commit 01acfa3b4041377165eeb8f17a818f8fc4d82a2f Author: glb_adm Date: Mon Jul 6 14:07:50 2026 +0000 UPSTREAM BASELINE: nextcloud/spreed v22.0.12 (без изменений) Источник: https://github.com/nextcloud/spreed/archive/refs/tags/v22.0.12.tar.gz С этого коммита ветка официального Nextcloud Talk отрезана (решение владельца 2026-07-06). Все дальнейшие изменения — только наши; версии релизов: 22.0.12-f7.N. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..753a0ac --- /dev/null +++ b/.editorconfig @@ -0,0 +1,31 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 +# https://editorconfig.org + +root = true + +[*] +charset = utf-8 +end_of_line = lf +indent_size = 4 +indent_style = tab +insert_final_newline = true +trim_trailing_whitespace = true + +[*.feature] +indent_size = 2 +indent_style = space + +[*.yml] +indent_size = 2 +indent_style = space + +[*.md] +trim_trailing_whitespace = false + +[*.svg] +insert_final_newline = false + +[package*.json] +indent_size = 2 +indent_style = space diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 0000000..a5bd7f8 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,23 @@ +# .git-blame-ignore-revs +# Update to nextcloud/coding-standard 1.2.3 +956a1ab00ffb25d87c0f5192333c9b66e56a63fe +# Update to nextcloud/eslint-config 9.0.0-rc.1 +0cefd79e15c25c0be84efdd282db2fd7ed521d7e +5aa4668f98528580c445576b865b087d39a6e950 +dc371de6124686747085e2fc7f68a89bd6eb7791 +f361c6920b738ff8c6a7356bce141b4c60bd80de +4a67c5b7b48160419077413e789683069c15cb2d +770e38efe565dfd3a727a4956a823e0b2f17dcf8 +6ed81e8ba3c767e381e23a70910d862c7ebb4bfc +ccfda0f407958c001598a234bbf0fc92ea04228e +1b3757bfacfa996d094773fd7e571fcdd53ab85b +dcfe2facab60f83e8c9581f785d41ed48c05adcd +777ffd9b0168795014552e85b264981c67ff83f2 +5776a5fe6d5a2839e7313d94c2b743a40a469582 +b48dfcc48441b0a6f26f2d1e6b3a6ddc262a04ab +08799ed75d4539239eddc9b897cba1b3931ebfe0 +49957ae0af4e9c09ab956f4f0781e0dd48edb76c +20d3960b78da17a464a9cb7a120e435771d912b6 +e0c0f74870124c7ab82da0150fb25e477b1362fb +# Update to nextcloud/coding-standard 1.4.0 +28b85f33a9789a73ba49b4716fcc5ab69d9aa603 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e9e386c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 +/js/*.js binary +/js/*.js.map binary diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..262ae01 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +/appinfo/info.xml @nickvergessen diff --git a/.github/ISSUE_TEMPLATE/1_bug_report.md b/.github/ISSUE_TEMPLATE/1_bug_report.md new file mode 100644 index 0000000..36946a9 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/1_bug_report.md @@ -0,0 +1,107 @@ +--- +name: 🐞 Bug report +about: Help us to improve by reporting a bug +labels: 0. Needs triage, bug +--- + + + +### How to use GitHub + +* Please use the 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are affected by the same issue. +* Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue. +* Subscribe to receive notifications on status change and new comments. + +--- + +## Steps to reproduce +1. +2. +3. + +### Expected behaviour +Tell us what should happen + +### Actual behaviour +Tell us what happens instead + +## Talk app + +**Talk app version:** (see apps administration page: `/index.php/settings/apps`) + +**Custom Signaling server configured:** yes/no and version (see Talk administration settings: `/index.php/settings/admin/talk#signaling_server`) + +**Custom TURN server configured:** yes/no (see Talk administration settings: `/index.php/settings/admin/talk#turn_server`) + +**Custom STUN server configured:** yes/no (see Talk administration settings: `/index.php/settings/admin/talk#stun_server`) + + +## Browser + +**Microphone available:** yes/no + +**Camera available:** yes/no + +**Operating system:** Windows/Ubuntu/Mac/... + +**Browser name:** Firefox/Chrome/Safari/... + +**Browser version:** 124/125/... + +### Browser log + +
+``` +Insert your browser log here, this could for example include: +a) The javascript console log +b) The network log +c) ... +``` + +
+ +## Server configuration + + + +**Operating system**: Ubuntu/RedHat/... + +**Web server:** Apache/Nginx + +**Database:** MySQL/Maria/SQLite/PostgreSQL + +**PHP version:** 8.1/8.2/8.3 + +**Nextcloud Version:** (see administration page) + +**List of activated apps:** + +
+ +``` +If you have access to your command line run e.g.: +sudo -u www-data php occ app:list +from within your server installation folder +``` +
+ +**Nextcloud configuration:** + +
+ +``` +If you have access to your command line run e.g.: +sudo -u www-data php occ config:list system +from within your Nextcloud installation folder +``` +
+ +### Server log (data/nextcloud.log) +
+ +``` +Insert your server log here +``` +
diff --git a/.github/ISSUE_TEMPLATE/2_feature_request.md b/.github/ISSUE_TEMPLATE/2_feature_request.md new file mode 100644 index 0000000..a91ba4f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/2_feature_request.md @@ -0,0 +1,31 @@ +--- +name: 🚀 Feature request +about: Suggest an idea for Nextcloud Talk +labels: 0. Needs triage, enhancement +--- + + + +### How to use GitHub + +* Please use the 👍 [reaction](https://blog.github.com/2016-03-10-add-reactions-to-pull-requests-issues-and-comments/) to show that you are interested into the same feature. +* Please don't comment if you have no relevant information to add. It's just extra noise for everyone subscribed to this issue. +* Subscribe to receive notifications on status change and new comments. + +--- + +## Feature request + +**Which Nextcloud Version are you currently using:** (see administration page) + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/3_bot_list.yml b/.github/ISSUE_TEMPLATE/3_bot_list.yml new file mode 100644 index 0000000..8e79457 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/3_bot_list.yml @@ -0,0 +1,56 @@ +name: 🤖 Add a Bot +description: Request to add an existing bot to the docs/bot-list +title: "🤖 Bot - " +labels: ["1. to develop", "enhancement", "feature: bots 🤖"] +assignees: + - nickvergessen +body: +- type: input + id: botname + attributes: + label: Bot name + description: Should be the name users and moderators also see later on in the UI + placeholder: e.g. Call summary bot + validations: + required: true +- type: textarea + id: description + attributes: + label: Description + description: Useful, but short description, best to keep it to 1-3 lines of text. + placeholder: "The call summary bot posts an overview message after the call listing all participants and outlining tasks." + value: + validations: + required: true +- type: input + id: screenshot + attributes: + label: Screenshot URL + description: Please use bright mode and crop to the chat view with, max. width 700px, max. height 480px + placeholder: https://github.com/nextcloud/call_summary_bot/blob/main/docs/screenshot.png + validations: + required: true +- type: input + id: license + attributes: + label: License + description: Identifier of the license (See [https://spdx.org/licenses/](https://spdx.org/licenses/)) + placeholder: AGPL-3.0-or-later + validations: + required: true +- type: input + id: source + attributes: + label: Source code URL + description: Link to source code / repository + placeholder: https://github.com/nextcloud/call_summary_bot + validations: + required: true +- type: input + id: install + attributes: + label: Installation steps + description: Link to the readme or other docs how to install the bot + placeholder: https://github.com/nextcloud/call_summary_bot#readme + validations: + required: true diff --git a/.github/actions-lock.txt b/.github/actions-lock.txt new file mode 100644 index 0000000..0ba162b --- /dev/null +++ b/.github/actions-lock.txt @@ -0,0 +1,27 @@ +# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT +f776ffe8120cb9a8b2579bc30a7f7ca7 appstore-build-publish.yml +30c9fe81a0a80bcf36cc7d441fcb8f9d block-unconventional-commits.yml +9570be036a81d55d85cd3dc384041007 command-openapi.yml +cbffe424c47647a2e375f96f25b67af9 dependabot-approve-merge.yml +2581a67c5bcdcd570427e6d51db767d7 fixup.yml +54f293d9abe11ac0035a7bbb96a4e453 lint-eslint.yml +80a58e5584612def0e751fcfb7669814 lint-info-xml.yml +ccd8a55c60e35b84becb0f7005ce1286 lint-php-cs.yml +5dcc3187a9460cb62a455235cbdb3562 lint-php.yml +cf229fbf443d2f7a303f22eb92745811 lint-stylelint.yml +c8770d61f6f9339176e7c123fa528111 lint-typescript.yml +7e42858234a508fe4ff6235a27d503f9 node-test.yml +c965845a0def7b39d872e47e93dd1139 node.yml +c4dda10f905203af83124b944ce8c749 openapi.yml +bdca1af74c27de9a9fc2f3c70aabdc8f phpunit-mariadb.yml +5846b994639ccab0059bf23e141d389a phpunit-mysql.yml +ec7d1084fbb3a6803dbabf3acdd17ac8 phpunit-oci.yml +29b359a5b76e7ff8cd85af34b3bf36e3 phpunit-pgsql.yml +182cc739d33a2441d3a9278a9bff55b4 phpunit-sqlite.yml +3c4a096b3b7dbaef0f8e5190ffe13518 pr-feedback.yml +2070d9569f327e758b9ce2b924c28fef psalm.yml +7db5b820f3750eebe988005a0bb2febd reuse.yml +800d5b188aa885626cf4169fa2dfea9e update-nextcloud-ocp-approve-merge.yml +1a3e76e59e411598dbf3042cd687ec33 update-nextcloud-ocp.yml +48c2c657b87747c9faeb589bcce08923 update-stable-titles.yml diff --git a/.github/contributing.md b/.github/contributing.md new file mode 100644 index 0000000..3c35d9b --- /dev/null +++ b/.github/contributing.md @@ -0,0 +1,53 @@ +## Submitting issues + +### Short version + + * Here you can find the [**bug report template**](https://raw.github.com/nextcloud/spreed/main/.github/ISSUE_TEMPLATE/1_bug_report.md) and [**feature request template**](https://raw.github.com/nextcloud/spreed/main/.github/ISSUE_TEMPLATE/2_feature_request.md), but be aware of the different repositories! See list below. Please always use the issue template when reporting issues. + +### Guidelines +* Please search the existing issues first, it's likely that your issue was already reported or even fixed. + - Go to one of the repositories, click "issues" and type any word in the top search/command bar. + - You can also filter by appending e. g. "state:open" to the search string. + - More info on [search syntax within github](https://help.github.com/articles/searching-issues) +* Report the issue using our template for [bugs](https://raw.github.com/nextcloud/spreed/main/.github/ISSUE_TEMPLATE/1_bug_report.md) and [features](https://raw.github.com/nextcloud/spreed/main/.github/ISSUE_TEMPLATE/2_feature_request.md), it includes all the informations we need to track down the issue. + +If your issue appears to be a bug, and hasn't been reported, open a new issue. + +Help us to maximize the effort we can spend fixing issues and adding new features, by not reporting duplicate issues. + +## Translations +Please submit translations via [Transifex](https://www.transifex.com/nextcloud/nextcloud/spreed/). + +## Contributing to Source Code + +Thanks for wanting to contribute source code to the Talk app. That's great! 🎉 + +Please read the [Code of Conduct](https://nextcloud.com/community/code-of-conduct/). This document offers some guidance to ensure Nextcloud participants can cooperate effectively in a positive and inspiring atmosphere, and to explain how together we can strengthen and support each other. + +For more information please review the [guidelines for contributing](https://github.com/nextcloud/server/blob/master/.github/CONTRIBUTING.md) to this repository. + +### Sign your work + +We use the Developer Certificate of Origin (DCO) as a additional safeguard +for the Nextcloud project. This is a well established and widely used +mechanism to assure contributors have confirmed their right to license +their contribution under the project's license. +Please read [contribute/developer-certificate-of-origin][dcofile]. +If you can certify it, then just add a line to every git commit message: + +```` + Signed-off-by: Random J Developer +```` + +Use your real name (sorry, no pseudonyms or anonymous contributions). +If you set your `user.name` and `user.email` git configs, you can sign your +commit automatically with `git commit -s`. You can also use git [aliases](https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases) +like `git config --global alias.ci 'commit -s'`. Now you can commit with +`git ci` and the commit will be signed. + +### Apply a license + +In case you are not sure how to add or update the license header correctly please have a look at [contribute/HowToApplyALicense.md][applyalicense] + +[dcofile]: https://github.com/nextcloud/server/blob/master/contribute/developer-certificate-of-origin +[applyalicense]: https://github.com/nextcloud/server/blob/master/contribute/HowToApplyALicense.md diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..f93a5c4 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,156 @@ +version: 2 +updates: +# Composer: Code-Dependencies +- package-ecosystem: composer + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +- package-ecosystem: composer + target-branch: stable31 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +- package-ecosystem: composer + target-branch: stable30 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +- package-ecosystem: composer + target-branch: stable29 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +# Composer: Tooling +- package-ecosystem: composer + directories: + - "/tests/integration" + - "/vendor-bin/csfixer" + - "/vendor-bin/mozart" + - "/vendor-bin/openapi-extractor" + - "/vendor-bin/phpunit" + - "/vendor-bin/psalm" + - "/vendor-bin/rector" + commit-message: + prefix: "ci" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +# GitHub Actions +- package-ecosystem: "github-actions" + directory: ".github/workflows" + commit-message: + prefix: "ci" + include: "scope" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +# NPM: Code-Dependencies +- package-ecosystem: npm + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + +- package-ecosystem: npm + target-branch: stable31 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + +- package-ecosystem: npm + target-branch: stable30 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + +- package-ecosystem: npm + target-branch: stable29 + directory: "/" + commit-message: + prefix: "build" + include: "scope" + versioning-strategy: "increase" + schedule: + interval: weekly + day: saturday + time: "03:00" + timezone: Europe/Berlin + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-major", "version-update:semver-minor"] + diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..6ebd686 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,69 @@ + +### ☑️ Resolves + +* Fix #… + + + +## 🖌️ UI Checklist + +### 🖼️ Screenshots / Screencasts + +🏚️ Before | 🏡 After +-- | -- +Screenshot before | Screenshot after + + + +### 🚧 Tasks + +- [ ] ... + +### 🏁 Checklist + +- [ ] 🌏 Tested with different browsers / clients: + - [ ] Chromium (Chrome / Edge / Opera / Brave) + - [ ] Firefox + - [ ] Safari + - [ ] Talk Desktop + - [ ] Integrations with Files sidebar and other apps + - [ ] Not risky to browser differences / client +- [ ] 🖌️ Design was reviewed, approved or inspired by the design team +- [ ] ⛑️ Tests are included or not possible +- [ ] 📗 User documentation in https://github.com/nextcloud/documentation/tree/master/user_manual/talk has been updated or is not required + +--- + + + +## 🛠️ API Checklist + +### 🚧 Tasks + +- [ ] ... + +### 🏁 Checklist + +- [ ] ⛑️ Tests (unit and/or integration) are included or not possible +- [ ] 📘 API documentation in `docs/` has been updated or is not required +- [ ] 🔖 Capability is added or not needed diff --git a/.github/workflows/appstore-build-publish.yml b/.github/workflows/appstore-build-publish.yml new file mode 100644 index 0000000..1e6bd32 --- /dev/null +++ b/.github/workflows/appstore-build-publish.yml @@ -0,0 +1,199 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Build and publish app release + +on: + release: + types: [published] + +permissions: + contents: write + +jobs: + build_and_publish: + runs-on: ubuntu-latest + + # Only allowed to be run on nextcloud-releases repositories + if: ${{ github.repository_owner == 'nextcloud-releases' }} + + steps: + - name: Check actor permission + uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v3.0 + with: + require: write + + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + echo "APP_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV + + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: ${{ env.APP_NAME }} + + - name: Get app version number + id: app-version + uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # v1.0.0 + with: + filename: ${{ env.APP_NAME }}/appinfo/info.xml + expression: "//info//version/text()" + + - name: Validate app version against tag + run: | + [ "${{ env.APP_VERSION }}" = "v${{ fromJSON(steps.app-version.outputs.result).version }}" ] + + - name: Get appinfo data + id: appinfo + uses: skjnldsv/xpath-action@f5b036e9d973f42c86324833fd00be90665fbf77 # v1.0.0 + with: + filename: ${{ env.APP_NAME }}/appinfo/info.xml + expression: "//info//dependencies//nextcloud/@min-version" + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + # Continue if no package.json + continue-on-error: true + with: + path: ${{ env.APP_NAME }} + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + # Skip if no package.json + if: ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + # Skip if no package.json + if: ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Get php version + id: php-versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + with: + filename: ${{ env.APP_NAME }}/appinfo/info.xml + + - name: Set up php ${{ steps.php-versions.outputs.php-min }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ steps.php-versions.outputs.php-min }} + coverage: none + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check composer.json + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: "${{ env.APP_NAME }}/composer.json" + + - name: Install composer dependencies + if: steps.check_composer.outputs.files_exists == 'true' + run: | + cd ${{ env.APP_NAME }} + composer install --no-dev + + - name: Build ${{ env.APP_NAME }} + # Skip if no package.json + if: ${{ steps.versions.outputs.nodeVersion }} + env: + CYPRESS_INSTALL_BINARY: 0 + run: | + cd ${{ env.APP_NAME }} + npm ci + npm run build --if-present + + - name: Check Krankerl config + id: krankerl + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: ${{ env.APP_NAME }}/krankerl.toml + + - name: Install Krankerl + if: steps.krankerl.outputs.files_exists == 'true' + run: | + wget https://github.com/ChristophWurst/krankerl/releases/download/v0.14.0/krankerl_0.14.0_amd64.deb + sudo dpkg -i krankerl_0.14.0_amd64.deb + + - name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with krankerl + if: steps.krankerl.outputs.files_exists == 'true' + run: | + cd ${{ env.APP_NAME }} + krankerl package + + - name: Package ${{ env.APP_NAME }} ${{ env.APP_VERSION }} with makefile + if: steps.krankerl.outputs.files_exists != 'true' + run: | + cd ${{ env.APP_NAME }} + make appstore + + - name: Check server download link for ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }} + run: | + NCVERSION='${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }}' + DOWNLOAD_URL=$(curl -s "https://updates.nextcloud.com/updater_server/latest?channel=beta&version=$NCVERSION" | jq -r '.downloads.zip[0]') + echo "DOWNLOAD_URL=$DOWNLOAD_URL" >> $GITHUB_ENV + + - name: Download server ${{ fromJSON(steps.appinfo.outputs.result).nextcloud.min-version }} + continue-on-error: true + id: server-download + if: ${{ env.DOWNLOAD_URL != 'null' }} + run: | + echo "Downloading release tarball from $DOWNLOAD_URL" + wget $DOWNLOAD_URL -O nextcloud.zip + unzip nextcloud.zip + + - name: Checkout server master fallback + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + if: ${{ steps.server-download.outcome != 'success' }} + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + path: nextcloud + + + - name: Sign app + run: | + # Extracting release + cd ${{ env.APP_NAME }}/build/artifacts + tar -xvf ${{ env.APP_NAME }}.tar.gz + cd ../../../ + # Setting up keys + echo '${{ secrets.APP_PRIVATE_KEY }}' > ${{ env.APP_NAME }}.key # zizmor: ignore[secrets-outside-env] + wget --quiet "https://github.com/nextcloud/app-certificate-requests/raw/master/${{ env.APP_NAME }}/${{ env.APP_NAME }}.crt" + # Signing + php nextcloud/occ integrity:sign-app --privateKey=../${{ env.APP_NAME }}.key --certificate=../${{ env.APP_NAME }}.crt --path=../${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }} + # Rebuilding archive + cd ${{ env.APP_NAME }}/build/artifacts + tar -zcvf ${{ env.APP_NAME }}.tar.gz ${{ env.APP_NAME }} + + - name: Attach tarball to github release + uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # v2.11.5 + id: attach_to_release + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: ${{ env.APP_NAME }}/build/artifacts/${{ env.APP_NAME }}.tar.gz + asset_name: ${{ env.APP_NAME }}-${{ env.APP_VERSION }}.tar.gz + tag: ${{ github.ref }} + overwrite: true + + - name: Upload app to Nextcloud appstore + uses: nextcloud-releases/nextcloud-appstore-push-action@a011fe619bcf6e77ddebc96f9908e1af4071b9c1 # v1.0.3 + with: + app_name: ${{ env.APP_NAME }} + appstore_token: ${{ secrets.APPSTORE_TOKEN }} # zizmor: ignore[secrets-outside-env] + download_url: ${{ steps.attach_to_release.outputs.browser_download_url }} + app_private_key: ${{ secrets.APP_PRIVATE_KEY }} # zizmor: ignore[secrets-outside-env] diff --git a/.github/workflows/block-unconventional-commits.yml b/.github/workflows/block-unconventional-commits.yml new file mode 100644 index 0000000..01c4dea --- /dev/null +++ b/.github/workflows/block-unconventional-commits.yml @@ -0,0 +1,36 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Block unconventional commits + +on: + pull_request: + types: [opened, ready_for_review, reopened, synchronize] + +permissions: + contents: read + +concurrency: + group: block-unconventional-commits-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + block-unconventional-commits: + name: Block unconventional commits + + runs-on: ubuntu-latest-low + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - uses: webiny/action-conventional-commits@faccb24fc2550dd15c0390d944379d2d8ed9690e # v1.3.1 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/command-openapi.yml b/.github/workflows/command-openapi.yml new file mode 100644 index 0000000..5279d44 --- /dev/null +++ b/.github/workflows/command-openapi.yml @@ -0,0 +1,199 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: OpenAPI Command +on: + issue_comment: + types: [created] + +permissions: + contents: read + +jobs: + init: + runs-on: ubuntu-latest + + # On pull requests and if the comment starts with `/openapi` + if: github.event.issue.pull_request != '' && startsWith(github.event.comment.body, '/openapi') + + outputs: + git_path: ${{ steps.git-path.outputs.path }} + arg1: ${{ steps.command.outputs.arg1 }} + arg2: ${{ steps.command.outputs.arg2 }} + head_ref: ${{ steps.comment-branch.outputs.head_ref }} + base_ref: ${{ steps.comment-branch.outputs.base_ref }} + + steps: + - name: Get repository from pull request comment + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + id: get-repository + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const pull = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number + }); + + const repositoryName = pull.data.head?.repo?.full_name + console.log(repositoryName) + return repositoryName + + - name: Disabled on forks + if: ${{ fromJSON(steps.get-repository.outputs.result) != github.repository }} + run: | + echo 'Can not execute /openapi on forks' + exit 1 + + - name: Check actor permission + uses: skjnldsv/check-actor-permission@69e92a3c4711150929bca9fcf34448c5bf5526e7 # v2 + with: + require: write + + - name: Add reaction on start + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 + with: + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + repository: ${{ github.event.repository.full_name }} + comment-id: ${{ github.event.comment.id }} + reactions: '+1' + + - name: Parse command + uses: skjnldsv/parse-command-comment@5c955203c52424151e6d0e58fb9de8a9f6a605a1 # v2 + id: command + + # Init path depending on which command is run + - name: Init path + id: git-path + run: | + if ${{ startsWith(steps.command.outputs.arg1, '/') }}; then + echo "path=${{steps.command.outputs.arg1}}" >> $GITHUB_OUTPUT + else + echo "path=${{steps.command.outputs.arg2}}" >> $GITHUB_OUTPUT + fi + + - name: Init branch + uses: xt0rted/pull-request-comment-branch@e8b8daa837e8ea7331c0003c9c316a64c6d8b0b1 # v3.0.0 + id: comment-branch + + - name: Add reaction on failure + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 + if: failure() + with: + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + repository: ${{ github.event.repository.full_name }} + comment-id: ${{ github.event.comment.id }} + reactions: '-1' + + process: + runs-on: ubuntu-latest + needs: init + + steps: + - name: Restore cached git repository + uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4 + with: + path: .git + key: git-repo + + - name: Checkout ${{ needs.init.outputs.head_ref }} + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + # Needed to allow force push later + persist-credentials: true + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + fetch-depth: 0 + ref: ${{ needs.init.outputs.head_ref }} + + - name: Setup git + run: | + git config --local user.email 'nextcloud-command@users.noreply.github.com' + git config --local user.name 'nextcloud-command' + + - name: Check Typescript OpenApi types + id: check_typescript_openapi + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: "src/types/openapi/openapi*.ts" + + - name: Read package.json node and npm engines version + if: steps.check_typescript_openapi.outputs.files_exists == 'true' + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: node_versions + # Continue if no package.json + continue-on-error: true + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.node_versions.outputs.nodeVersion }} + if: ${{ steps.node_versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.node_versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.node_versions.outputs.npmVersion }} + if: ${{ steps.node_versions.outputs.nodeVersion }} + run: npm i -g 'npm@${{ steps.node_versions.outputs.npmVersion }}' + + - name: Rebase to ${{ needs.init.outputs.base_ref }} + if: ${{ contains(needs.init.outputs.arg1, 'rebase') }} + run: | + git fetch origin '${{ needs.init.outputs.base_ref }}:${{ needs.init.outputs.base_ref }}' + git rebase 'origin/${{ needs.init.outputs.base_ref }}' + + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: | + npm ci + + - name: Set up dependencies + run: composer i + + - name: Regenerate OpenAPI + run: composer run openapi + + - name: Commit default + if: ${{ !contains(needs.init.outputs.arg1, 'fixup') && !contains(needs.init.outputs.arg1, 'amend') }} + run: | + git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}' + git commit --signoff -m 'fix(openapi): Regenerate OpenAPI assets' + + - name: Commit fixup + if: ${{ contains(needs.init.outputs.arg1, 'fixup') }} + run: | + git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}' + git commit --fixup=HEAD --signoff + + - name: Commit amend + if: ${{ contains(needs.init.outputs.arg1, 'amend') }} + run: | + git add '${{ github.workspace }}${{ needs.init.outputs.git_path }}' + git commit --amend --no-edit --signoff + # Remove any [skip ci] from the amended commit + git commit --amend -m "$(git log -1 --format='%B' | sed '/\[skip ci\]/d')" + + - name: Push normally + if: ${{ !contains(needs.init.outputs.arg1, 'rebase') && !contains(needs.init.outputs.arg1, 'amend') }} + run: git push origin '${{ needs.init.outputs.head_ref }}' + + - name: Force push + if: ${{ contains(needs.init.outputs.arg1, 'rebase') || contains(needs.init.outputs.arg1, 'amend') }} + run: git push --force-with-lease origin '${{ needs.init.outputs.head_ref }}' + + - name: Add reaction on failure + uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 + if: failure() + with: + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + repository: ${{ github.event.repository.full_name }} + comment-id: ${{ github.event.comment.id }} + reactions: '-1' diff --git a/.github/workflows/dependabot-approve-merge.yml b/.github/workflows/dependabot-approve-merge.yml new file mode 100644 index 0000000..78b5479 --- /dev/null +++ b/.github/workflows/dependabot-approve-merge.yml @@ -0,0 +1,84 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Auto approve Dependabot PRs + +on: + pull_request_target: # zizmor: ignore[dangerous-triggers] + branches: + - main + - master + - stable* + +permissions: + contents: read + +concurrency: + group: dependabot-approve-merge-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + auto-approve-merge: + if: github.event.pull_request.user.login == 'dependabot[bot]' + runs-on: ubuntu-latest-low + env: + ALLOW_MINOR: false + IGNORE_PATTERN: '(webrtc-adapter|\@nextcloud\/vue)' + permissions: + # for hmarr/auto-approve-action to approve PRs + pull-requests: write + # for alexwilson/enable-github-automerge-action to approve PRs + contents: write + + steps: + - name: Disabled on forks + if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} + run: | + echo 'Can not approve PRs from forks' + exit 1 + + - name: Dependabot metadata + if: github.event.pull_request.user.login == 'dependabot[bot]' + id: metadata + uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a # v2.5.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + - name: Check allowed dependency update + if: github.event.pull_request.user.login == 'dependabot[bot]' + id: validate + env: + IGNORE_PATTERN: ${{ env.IGNORE_PATTERN }} + DEPENDENCY_NAMES: ${{ steps.metadata.outputs.dependency-names }} + run: | + if [[ -z ${IGNORE_PATTERN} ]]; then + echo "ignore=false" >> "$GITHUB_OUTPUT" + elif [[ -z ${DEPENDENCY_NAMES} ]]; then + echo "ignore=false" >> "$GITHUB_OUTPUT" + elif [[ ${DEPENDENCY_NAMES} =~ ${IGNORE_PATTERN} ]]; then + echo "ignore=true" >> "$GITHUB_OUTPUT" + fi + + # GitHub actions bot approve + - name: Auto approve + id: auto_approve + uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0 + if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' + && steps.validate.outputs.ignore != 'true' + && ((fromJSON(env.ALLOW_MINOR) && steps.metadata.outputs.update-type == 'version-update:semver-minor') + || steps.metadata.outputs.update-type == 'version-update:semver-patch') + }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + # Enable GitHub auto merge + - name: Auto merge + uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0 + if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' && steps.auto_approve.conclusion == 'success' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/dependabot-approve-merge.yml.patch b/.github/workflows/dependabot-approve-merge.yml.patch new file mode 100644 index 0000000..5684ca6 --- /dev/null +++ b/.github/workflows/dependabot-approve-merge.yml.patch @@ -0,0 +1,64 @@ +diff --git a/.github/workflows/dependabot-approve-merge.yml b/.github/workflows/dependabot-approve-merge.yml +index e4fa4e58ff..a1127d8826 100644 +--- a/.github/workflows/dependabot-approve-merge.yml ++++ b/.github/workflows/dependabot-approve-merge.yml +@@ -26,6 +26,9 @@ jobs: + auto-approve-merge: + if: github.event.pull_request.user.login == 'dependabot[bot]' || github.event.pull_request.user.login == 'renovate[bot]' + runs-on: ubuntu-latest-low ++ env: ++ ALLOW_MINOR: false ++ IGNORE_PATTERN: '(webrtc-adapter|\@nextcloud\/vue)' + permissions: + # for hmarr/auto-approve-action to approve PRs + pull-requests: write +@@ -42,20 +42,43 @@ jobs: + echo 'Can not approve PRs from forks' + exit 1 + +- - uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0 +- id: branchname ++ - name: Dependabot metadata ++ if: github.event.pull_request.user.login == 'dependabot[bot]' ++ id: metadata ++ uses: dependabot/fetch-metadata@21025c705c08248db411dc16f3619e6b5f9ea21a # v2.5.0 + with: +- repo-token: ${{ secrets.GITHUB_TOKEN }} ++ github-token: ${{ secrets.GITHUB_TOKEN }} ++ ++ - name: Check allowed dependency update ++ if: github.event.pull_request.user.login == 'dependabot[bot]' ++ id: validate ++ env: ++ IGNORE_PATTERN: ${{ env.IGNORE_PATTERN }} ++ DEPENDENCY_NAMES: ${{ steps.metadata.outputs.dependency-names }} ++ run: | ++ if [[ -z ${IGNORE_PATTERN} ]]; then ++ echo "ignore=false" >> "$GITHUB_OUTPUT" ++ elif [[ -z ${DEPENDENCY_NAMES} ]]; then ++ echo "ignore=false" >> "$GITHUB_OUTPUT" ++ elif [[ ${DEPENDENCY_NAMES} =~ ${IGNORE_PATTERN} ]]; then ++ echo "ignore=true" >> "$GITHUB_OUTPUT" ++ fi + + # GitHub actions bot approve +- - uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0 +- if: startsWith(steps.branchname.outputs.branch, 'dependabot/') ++ - name: Auto approve ++ id: auto_approve ++ uses: hmarr/auto-approve-action@f0939ea97e9205ef24d872e76833fa908a770363 # v4.0.0 ++ if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' ++ && steps.validate.outputs.ignore != 'true' ++ && ((fromJSON(env.ALLOW_MINOR) && steps.metadata.outputs.update-type == 'version-update:semver-minor') ++ || steps.metadata.outputs.update-type == 'version-update:semver-patch') ++ }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + # Enable GitHub auto merge + - name: Auto merge + uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0 +- if: startsWith(steps.branchname.outputs.branch, 'dependabot/') ++ if: ${{ github.event.pull_request.user.login == 'dependabot[bot]' && steps.auto_approve.conclusion == 'success' }} + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/fixup.yml b/.github/workflows/fixup.yml new file mode 100644 index 0000000..69da2bb --- /dev/null +++ b/.github/workflows/fixup.yml @@ -0,0 +1,36 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Block fixup and squash commits + +on: + pull_request: + types: [opened, ready_for_review, reopened, synchronize] + +permissions: + contents: read + +concurrency: + group: fixup-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + commit-message-check: + if: github.event.pull_request.draft == false + + permissions: + pull-requests: write + name: Block fixup and squash commits + + runs-on: ubuntu-latest-low + + steps: + - name: Run check + uses: skjnldsv/block-fixup-merge-action@c138ea99e45e186567b64cf065ce90f7158c236a # v2 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/integration-federation.yml b/.github/workflows/integration-federation.yml new file mode 100644 index 0000000..20b83a4 --- /dev/null +++ b/.github/workflows/integration-federation.yml @@ -0,0 +1,354 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration Federation + +on: + pull_request: + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-federation-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-federation: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + name: Federation ${{ matrix.host-server-versions }} (${{ matrix.host-db }}) -> ${{ matrix.remote-server-versions }} (${{ matrix.remote-db }}) + + strategy: + fail-fast: false + matrix: + include: + - test-suite: 'federation' + php-versions: '8.2' + host-db: 'oci' + host-server-versions: 'stable32' + host-spreed-versions: ${{ github.event.pull_request.head.sha }} + host-guests-versions: 'main' + host-circles-versions: 'stable32' + host-notifications-versions: 'stable32' + remote-db: 'mysql' + remote-server-versions: 'stable31' + remote-spreed-versions: 'stable31' + remote-guests-versions: 'stable-4.6' + remote-circles-versions: 'stable31' + remote-notifications-versions: 'stable31' + - test-suite: 'federation' + php-versions: '8.2' + host-db: 'pgsql' + host-server-versions: 'stable32' + host-spreed-versions: ${{ github.event.pull_request.head.sha }} + host-guests-versions: 'main' + host-circles-versions: 'stable32' + host-notifications-versions: 'stable32' + remote-db: 'mysql' + remote-server-versions: 'stable31' + remote-spreed-versions: 'stable31' + remote-guests-versions: 'stable-4.6' + remote-circles-versions: 'stable31' + remote-notifications-versions: 'stable31' + - test-suite: 'federation' + php-versions: '8.2' + host-db: 'oci' + host-server-versions: 'stable31' + host-spreed-versions: 'stable31' + host-guests-versions: 'stable-4.6' + host-circles-versions: 'stable31' + host-notifications-versions: 'stable31' + remote-db: 'mysql' + remote-server-versions: 'stable32' + remote-spreed-versions: ${{ github.event.pull_request.head.sha }} + remote-guests-versions: 'main' + remote-circles-versions: 'stable32' + remote-notifications-versions: 'stable32' + + services: + oracle: + image: ghcr.io/gvenzl/oracle-xe:11 + + # Provide passwords and other environment variables to container + env: + ORACLE_RANDOM_PASSWORD: true + APP_USER: autotest + APP_USER_PASSWORD: owncloud + + # Forward Oracle port + ports: + - 1521:1521/tcp + + # Provide healthcheck script options for startup + options: >- + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + + mysql: + image: ghcr.io/nextcloud/continuous-integration-mysql-8.4:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:3306/tcp + env: + MYSQL_ROOT_PASSWORD: rootpassword + options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 + + postgres: + image: ghcr.io/nextcloud/continuous-integration-postgres-16:latest # zizmor: ignore[unpinned-images] + ports: + - 4445:5432/tcp + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: rootpassword + POSTGRES_DB: nextcloud + options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server - Host + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: host + submodules: true + repository: nextcloud/server + ref: ${{ matrix.host-server-versions }} + + - name: Checkout spreed app - Host + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: host/apps/spreed + ref: ${{ matrix.host-spreed-versions }} + + - name: Checkout circles app - Host + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: host/apps/circles + ref: ${{ matrix.host-circles-versions }} + + - name: Checkout guests app - Host + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: host/apps/guests + ref: ${{ matrix.host-guests-versions }} + + - name: Checkout notifications app - Host + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: host/apps/notifications + ref: ${{ matrix.host-notifications-versions }} + + - name: Checkout server - Remote + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: remote + submodules: true + repository: nextcloud/server + ref: ${{ matrix.remote-server-versions }} + + - name: Checkout spreed app - Remote + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: remote/apps/spreed + ref: ${{ matrix.remote-spreed-versions }} + + - name: Checkout circles app - Remote + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: remote/apps/circles + ref: ${{ matrix.remote-circles-versions }} + + - name: Checkout guests app - Remote + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: remote/apps/guests + ref: ${{ matrix.remote-guests-versions }} + + - name: Checkout notifications app - Remote + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: remote/apps/notifications + ref: ${{ matrix.remote-notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql, oci8, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up production dependencies - Host + working-directory: host/apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up production dependencies - Remote + working-directory: remote/apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: host/apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud - Host (Postgres) + if: ${{ matrix.host-db == 'pgsql' }} + env: + DB_PORT: 4445 + working-directory: host/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Host (Oracle) + if: ${{ matrix.host-db == 'oci' }} + env: + DB_PORT: 1521 + working-directory: host/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Host (MySQL) + if: ${{ matrix.host-db == 'mysql' }} + env: + DB_PORT: 4444 + working-directory: host/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Remote (Postgres) + if: ${{ matrix.remote-db == 'pgsql' }} + env: + DB_PORT: 4445 + working-directory: remote/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Remote (Oracle) + if: ${{ matrix.remote-db == 'oracle' }} + env: + DB_PORT: 1521 + working-directory: remote/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Remote (MySQL) + if: ${{ matrix.remote-db == 'mysql' }} + env: + DB_PORT: 4444 + working-directory: remote/ + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + + - name: Set up Nextcloud - Host (Shared) + working-directory: host/ + run: | + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Set up Nextcloud - Remote (Shared) + working-directory: remote/ + run: | + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + echo 'REMOTE_ROOT_DIR='$PWD >> $GITHUB_ENV + + - name: Run integration + working-directory: host/apps/${{ env.APP_NAME }}/tests/integration + run: REMOTE_ROOT_DIR=${{ env.REMOTE_ROOT_DIR }} bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs - Host + if: always() + working-directory: host/ + run: | + cat data/nextcloud.log + + - name: Print logs - Remote + if: always() + working-directory: remote/ + run: | + cat data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-federation] + + if: always() + + name: integration-federation-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-federation.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/integration-mariadb.yml b/.github/workflows/integration-mariadb.yml new file mode 100644 index 0000000..a5a7c8d --- /dev/null +++ b/.github/workflows/integration-mariadb.yml @@ -0,0 +1,189 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration mariadb + +on: + pull_request: + paths: + # Only running on PR for this file to save CI time (otherwise pgsql only) + - '.github/workflows/integration-mariadb.yml' + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-mariadb-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-mariadb: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + strategy: + fail-fast: false + matrix: + test-suite: ['callapi', 'chat-1', 'chat-2', 'chat-3', 'chat-4', 'command', 'conversation-1', 'conversation-2', 'conversation-3', 'conversation-4', 'conversation-5', 'federation', 'integration', 'sharing-1', 'sharing-2', 'sharing-3', 'sharing-4'] + php-versions: ['8.2'] + server-versions: ['stable32'] + guests-versions: ['main'] + circles-versions: ['stable32'] + notifications-versions: ['stable32'] + + services: + mariadb: + image: ghcr.io/nextcloud/continuous-integration-mariadb-11.4:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:3306/tcp + env: + MARIADB_ROOT_PASSWORD: rootpassword + options: --health-cmd="mariadb-admin ping" --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Checkout circles app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: apps/circles + ref: ${{ matrix.circles-versions }} + + - name: Checkout guests app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: apps/guests + ref: ${{ matrix.guests-versions }} + + - name: Checkout notifications app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: apps/notifications + ref: ${{ matrix.notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable ONLY_FULL_GROUP_BY MariaDB option + run: | + echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + + - name: Set up production dependencies + working-directory: apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Run integration + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Check Federation log + if: always() + id: check_federation_log + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: "data/tests-talk-real-federated-server/data/nextcloud.log" + + - name: Print federation logs + if: always() && steps.check_federation_log.outputs.files_exists == 'true' + run: | + cat data/tests-talk-real-federated-server/data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-mariadb] + + if: always() + + name: integration-mariadb-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-mariadb.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/integration-mysql.yml b/.github/workflows/integration-mysql.yml new file mode 100644 index 0000000..2505501 --- /dev/null +++ b/.github/workflows/integration-mysql.yml @@ -0,0 +1,189 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration mysql + +on: + pull_request: + paths: + # Only running on PR for this file to save CI time (otherwise pgsql only) + - '.github/workflows/integration-mysql.yml' + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-mysql-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-mysql: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + strategy: + fail-fast: false + matrix: + test-suite: ['callapi', 'chat-1', 'chat-2', 'chat-3', 'chat-4', 'command', 'conversation-1', 'conversation-2', 'conversation-3', 'conversation-4', 'conversation-5', 'federation', 'integration', 'sharing-1', 'sharing-2', 'sharing-3', 'sharing-4'] + php-versions: ['8.2'] + server-versions: ['stable32'] + guests-versions: ['main'] + circles-versions: ['stable32'] + notifications-versions: ['stable32'] + + services: + mysql: + image: ghcr.io/nextcloud/continuous-integration-mysql-8.4:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:3306/tcp + env: + MYSQL_ROOT_PASSWORD: rootpassword + options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Checkout circles app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: apps/circles + ref: ${{ matrix.circles-versions }} + + - name: Checkout guests app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: apps/guests + ref: ${{ matrix.guests-versions }} + + - name: Checkout notifications app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: apps/notifications + ref: ${{ matrix.notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable ONLY_FULL_GROUP_BY MySQL option + run: | + echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + + - name: Set up production dependencies + working-directory: apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Run integration + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Check Federation log + if: always() + id: check_federation_log + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: "data/tests-talk-real-federated-server/data/nextcloud.log" + + - name: Print federation logs + if: always() && steps.check_federation_log.outputs.files_exists == 'true' + run: | + cat data/tests-talk-real-federated-server/data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-mysql] + + if: always() + + name: integration-mysql-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-mysql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/integration-oci.yml b/.github/workflows/integration-oci.yml new file mode 100644 index 0000000..f47ae5d --- /dev/null +++ b/.github/workflows/integration-oci.yml @@ -0,0 +1,196 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration oci + +on: + pull_request: + paths: + # Only running on PR for this file to save CI time (otherwise pgsql only) + - '.github/workflows/integration-oci.yml' + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-oci-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-oci: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + strategy: + fail-fast: false + matrix: + test-suite: ['callapi', 'chat-1', 'chat-2', 'chat-3', 'chat-4', 'command', 'conversation-1', 'conversation-2', 'conversation-3', 'conversation-4', 'conversation-5', 'federation', 'integration', 'sharing-1', 'sharing-2', 'sharing-3', 'sharing-4'] + php-versions: ['8.2'] + server-versions: ['stable32'] + guests-versions: ['main'] + circles-versions: ['stable32'] + notifications-versions: ['stable32'] + + services: + oracle: + image: ghcr.io/gvenzl/oracle-xe:11 + + # Provide passwords and other environment variables to container + env: + ORACLE_RANDOM_PASSWORD: true + APP_USER: autotest + APP_USER_PASSWORD: owncloud + + # Forward Oracle port + ports: + - 1521:1521/tcp + + # Provide healthcheck script options for startup + options: >- + --health-cmd healthcheck.sh + --health-interval 10s + --health-timeout 5s + --health-retries 10 + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Checkout circles app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: apps/circles + ref: ${{ matrix.circles-versions }} + + - name: Checkout guests app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: apps/guests + ref: ${{ matrix.guests-versions }} + + - name: Checkout notifications app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: apps/notifications + ref: ${{ matrix.notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, oci8, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up production dependencies + working-directory: apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 1521 + run: | + mkdir data + ./occ maintenance:install --verbose --database=oci --database-name=XE --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=autotest --database-pass=owncloud --admin-user admin --admin-pass admin + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Run integration + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Check Federation log + if: always() + id: check_federation_log + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: "data/tests-talk-real-federated-server/data/nextcloud.log" + + - name: Print federation logs + if: always() && steps.check_federation_log.outputs.files_exists == 'true' + run: | + cat data/tests-talk-real-federated-server/data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-oci] + + if: always() + + name: integration-oci-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-oci.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/integration-pgsql.yml b/.github/workflows/integration-pgsql.yml new file mode 100644 index 0000000..62a7e4d --- /dev/null +++ b/.github/workflows/integration-pgsql.yml @@ -0,0 +1,216 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration pgsql + +on: + pull_request: + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-pgsql-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-pgsql: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + strategy: + fail-fast: false + matrix: + test-suite: + - 'callapi' + - 'chat-1' + - 'chat-2' + - 'chat-3' + - 'chat-4' + - 'command' + - 'conversation-1' + - 'conversation-2' + - 'conversation-3' + - 'conversation-4' + - 'conversation-5' + - 'federation' + - 'integration' + - 'scaling' + - 'sharing-1' + - 'sharing-2' + - 'sharing-3' + - 'sharing-4' + php-versions: ['8.3'] + server-versions: ['stable32'] + guests-versions: ['main'] + circles-versions: ['stable32'] + notifications-versions: ['stable32'] + + services: + postgres: + image: ghcr.io/nextcloud/continuous-integration-postgres-16:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:5432/tcp + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: rootpassword + POSTGRES_DB: nextcloud + options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Patch version check for nightly PHP + if: ${{ matrix.php-versions == '8.4' }} + run: echo " lib/versioncheck.php + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Checkout circles app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: apps/circles + ref: ${{ matrix.circles-versions }} + + - name: Checkout guests app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: apps/guests + ref: ${{ matrix.guests-versions }} + + - name: Checkout notifications app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: apps/notifications + ref: ${{ matrix.notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up production dependencies + working-directory: apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Run integration + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Print query logs + if: matrix.test-suite == 'scaling' + run: | + cat data/query.log + + - name: Upload query.log + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: query-list.txt + path: data/query.log + + - name: Check Federation log + if: always() + id: check_federation_log + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: "data/tests-talk-real-federated-server/data/nextcloud.log" + + - name: Print federation logs + if: always() && steps.check_federation_log.outputs.files_exists == 'true' + run: | + cat data/tests-talk-real-federated-server/data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-pgsql] + + if: always() + + name: integration-pgsql-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-pgsql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/integration-sqlite.yml b/.github/workflows/integration-sqlite.yml new file mode 100644 index 0000000..74c9a1d --- /dev/null +++ b/.github/workflows/integration-sqlite.yml @@ -0,0 +1,175 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Integration sqlite + +on: + pull_request: + paths: + # Only running on PR for this file to save CI time (otherwise pgsql only) + - '.github/workflows/integration-sqlite.yml' + schedule: + - cron: "5 2 * * *" + +permissions: + contents: read + +concurrency: + group: integration-sqlite-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36 # v3.0.2 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/integration/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + integration-sqlite: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + strategy: + fail-fast: false + matrix: + test-suite: ['callapi', 'chat-1', 'chat-2', 'chat-3', 'chat-4', 'command', 'conversation-1', 'conversation-2', 'conversation-3', 'conversation-4', 'conversation-5', 'federation', 'integration', 'sharing-1', 'sharing-2', 'sharing-3', 'sharing-4'] + php-versions: ['8.2'] + server-versions: ['stable32'] + guests-versions: ['main'] + circles-versions: ['stable32'] + notifications-versions: ['stable32'] + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Checkout circles app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/circles + path: apps/circles + ref: ${{ matrix.circles-versions }} + + - name: Checkout guests app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/guests + path: apps/guests + ref: ${{ matrix.guests-versions }} + + - name: Checkout notifications app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + repository: nextcloud/notifications + path: apps/notifications + ref: ${{ matrix.notifications-versions }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: apcu, bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3: ini-values: apc.enable_cli=on + ini-values: apc.enable_cli=on, disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Set up production dependencies + working-directory: apps/${{ env.APP_NAME }} + run: composer i --no-dev + + - name: Set up behat dependencies + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ config:system:set debug --value=true --type=boolean + ./occ config:system:set hashing_default_password --value=true --type=boolean + ./occ config:system:set memcache.local --value="\\OC\\Memcache\\APCu" + ./occ config:system:set memcache.distributed --value="\\OC\\Memcache\\APCu" + ./occ app:enable --force ${{ env.APP_NAME }} + ./occ app:enable --force circles + ./occ app:enable --force guests + ./occ app:enable --force notifications + + - name: Run integration + working-directory: apps/${{ env.APP_NAME }}/tests/integration + run: bash run.sh features/${{ matrix.test-suite }} + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Check Federation log + if: always() + id: check_federation_log + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: "data/tests-talk-real-federated-server/data/nextcloud.log" + + - name: Print federation logs + if: always() && steps.check_federation_log.outputs.files_exists == 'true' + run: | + cat data/tests-talk-real-federated-server/data/nextcloud.log + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, integration-sqlite] + + if: always() + + name: integration-sqlite-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.integration-sqlite.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/lint-action.yml b/.github/workflows/lint-action.yml new file mode 100644 index 0000000..a3a3c92 --- /dev/null +++ b/.github/workflows/lint-action.yml @@ -0,0 +1,42 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint GitHub Actions + +on: + pull_request: + paths: + - '.github/workflows/**' + +permissions: + contents: read + +jobs: + action-lint: + runs-on: ubuntu-latest + + name: GitHub Actions lint + + steps: + - name: Checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + + - name: GitHub action templates lint + uses: ibiqlik/action-yamllint@2576378a8e339169678f9939646ee3ee325e845c # v3.1.1 + with: + file_or_dir: .github/workflows + config_data: | + line-length: warning + + - name: Install the latest version of uv + uses: astral-sh/setup-uv@4959332f0f014c5280e7eac8b70c90cb574c9f9b # v6.6.0 + + - name: Check GitHub actions + run: uvx zizmor --min-severity medium .github/workflows/*.yml diff --git a/.github/workflows/lint-eslint.yml b/.github/workflows/lint-eslint.yml new file mode 100644 index 0000000..af11871 --- /dev/null +++ b/.github/workflows/lint-eslint.yml @@ -0,0 +1,100 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint eslint + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-eslint-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'src/**' + - 'appinfo/info.xml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '.eslintrc.*' + - '.eslintignore' + - '**.js' + - '**.ts' + - '**.vue' + + lint: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + name: NPM lint + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: npm ci + + - name: Lint + run: npm run lint + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, lint] + + if: always() + + # This is the summary, we just avoid to rename it so that branch protection rules still match + name: eslint + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.lint.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/lint-info-xml.yml b/.github/workflows/lint-info-xml.yml new file mode 100644 index 0000000..d0c84cc --- /dev/null +++ b/.github/workflows/lint-info-xml.yml @@ -0,0 +1,38 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint info.xml + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-info-xml-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + xml-linters: + runs-on: ubuntu-latest-low + + name: info.xml lint + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Download schema + run: wget https://raw.githubusercontent.com/nextcloud/appstore/master/nextcloudappstore/api/v1/release/info.xsd + + - name: Lint info.xml + uses: ChristophWurst/xmllint-action@36f2a302f84f8c83fceea0b9c59e1eb4a616d3c1 # v1.2 + with: + xml-file: ./appinfo/info.xml + xml-schema-file: ./info.xsd diff --git a/.github/workflows/lint-php-cs.yml b/.github/workflows/lint-php-cs.yml new file mode 100644 index 0000000..da40208 --- /dev/null +++ b/.github/workflows/lint-php-cs.yml @@ -0,0 +1,52 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint php-cs + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-php-cs-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + lint: + runs-on: ubuntu-latest + + name: php-cs + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get php version + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + - name: Set up php${{ steps.versions.outputs.php-min }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ steps.versions.outputs.php-min }} + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Lint + run: composer run cs:check || ( echo 'Please run `composer run cs:fix` to format your code' && exit 1 ) diff --git a/.github/workflows/lint-php.yml b/.github/workflows/lint-php.yml new file mode 100644 index 0000000..d1eafea --- /dev/null +++ b/.github/workflows/lint-php.yml @@ -0,0 +1,76 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint php + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-php-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-min: ${{ steps.versions.outputs.php-min }} + php-max: ${{ steps.versions.outputs.php-max }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + php-lint: + runs-on: ubuntu-latest + needs: matrix + strategy: + matrix: + php-versions: ['${{ needs.matrix.outputs.php-min }}', '${{ needs.matrix.outputs.php-max }}'] + + name: php-lint + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Lint + run: composer run lint + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: php-lint + + if: always() + + name: php-lint-summary + + steps: + - name: Summary status + run: if ${{ needs.php-lint.result != 'success' && needs.php-lint.result != 'skipped' }}; then exit 1; fi diff --git a/.github/workflows/lint-stylelint.yml b/.github/workflows/lint-stylelint.yml new file mode 100644 index 0000000..fb317ca --- /dev/null +++ b/.github/workflows/lint-stylelint.yml @@ -0,0 +1,53 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Lint stylelint + +on: pull_request + +permissions: + contents: read + +concurrency: + group: lint-stylelint-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + lint: + runs-on: ubuntu-latest + + name: stylelint + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + run: npm ci + + - name: Lint + run: npm run stylelint diff --git a/.github/workflows/lint-typescript.yml b/.github/workflows/lint-typescript.yml new file mode 100644 index 0000000..6cecc80 --- /dev/null +++ b/.github/workflows/lint-typescript.yml @@ -0,0 +1,100 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Type checking + +on: + pull_request: + push: + branches: + - main + - master + - stable* + +permissions: + contents: read + +concurrency: + group: lint-typescript-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/lint-typescript.yml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '**.ts' + - '**.vue' + + test: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + run: | + npm ci + + - name: Check types + run: | + npm run --if-present check-types + npm run --if-present ts:check + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, test] + + if: always() + + name: typescript-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.test.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/node-test.yml b/.github/workflows/node-test.yml new file mode 100644 index 0000000..e8c3379 --- /dev/null +++ b/.github/workflows/node-test.yml @@ -0,0 +1,110 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Node tests + +on: + pull_request: + push: + branches: + - main + - master + - stable* + +permissions: + contents: read + +concurrency: + group: node-tests-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - '__tests__/**' + - '__mocks__/**' + - 'src/**' + - 'appinfo/info.xml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '**.js' + - '**.ts' + - '**.vue' + + test: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + # In contrast to the workflow template, there is no build step here + - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + run: | + npm ci + + # In contrast to the workflow template, there is no coverage step here + - name: Test + run: npm run test --if-present + + - name: Collect coverage + uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v6.0.0 + with: + files: ./coverage/lcov.info + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, test] + + if: always() + + name: test-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.test.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/node-test.yml.patch b/.github/workflows/node-test.yml.patch new file mode 100644 index 0000000..d55e1de --- /dev/null +++ b/.github/workflows/node-test.yml.patch @@ -0,0 +1,27 @@ +diff --git b/.github/workflows/node-test.yml a/.github/workflows/node-test.yml +index a61b9cb06..9081c98b6 100644 +--- b/.github/workflows/node-test.yml ++++ a/.github/workflows/node-test.yml +@@ -79,19 +79,17 @@ jobs: + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + +- - name: Install dependencies & build ++ # In contrast to the workflow template, there is no build step here ++ - name: Install dependencies + env: + CYPRESS_INSTALL_BINARY: 0 + run: | + npm ci +- npm run build --if-present + ++ # In contrast to the workflow template, there is no coverage step here + - name: Test + run: npm run test --if-present + +- - name: Test and process coverage +- run: npm run test:coverage --if-present +- + - name: Collect coverage + uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1 + with: diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml new file mode 100644 index 0000000..1ee7662 --- /dev/null +++ b/.github/workflows/node.yml @@ -0,0 +1,113 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2021-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Node + +on: pull_request + +permissions: + contents: read + +concurrency: + group: node-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'src/**' + - 'appinfo/info.xml' + - 'package.json' + - 'package-lock.json' + - 'tsconfig.json' + - '**.js' + - '**.ts' + - '**.vue' + + build: + runs-on: ubuntu-latest + + needs: changes + if: needs.changes.outputs.src != 'false' + + name: NPM build + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Read package.json node and npm engines version + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Validate package-lock.json # See https://github.com/npm/cli/issues/4460 + run: | + npm i -g npm-package-lock-add-resolved@1.1.4 + npm-package-lock-add-resolved + git --no-pager diff --exit-code + + - name: Install dependencies & build + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: | + npm ci + npm run build --if-present + + - name: Check build changes + run: | + bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please recompile and commit the assets, see the section \"Show changes on failure\" for details' && exit 1)" + + - name: Show changes on failure + if: failure() + run: | + git status + git --no-pager diff + exit 1 # make it red to grab attention + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, build] + + if: always() + + # This is the summary, we just avoid to rename it so that branch protection rules still match + name: node + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.build.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/occ-command-documentation.yml b/.github/workflows/occ-command-documentation.yml new file mode 100644 index 0000000..0ebaf4c --- /dev/null +++ b/.github/workflows/occ-command-documentation.yml @@ -0,0 +1,93 @@ +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Documentation + +on: + pull_request: + paths: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + +permissions: + contents: read + +concurrency: + group: occ-commands-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + occ-commands: + runs-on: ubuntu-latest + + strategy: + matrix: + php-versions: ['8.2'] + server-versions: ['stable32'] + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@ec406be512d7077f68eed36e63f4d91bc006edc4 # v2.35.4 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@076e0072799f4942c8bc574a82233e1e4d13e9d6 # v3.0.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ app:enable ${{ env.APP_NAME }} + ./occ config:system:set debug --value true --type boolean + + - name: Check if documentation is up to date + id: check_documentation + run: | + ./occ talk:developer:update-docs + cd apps/${{ env.APP_NAME }} + bash -c "[[ ! \"`git status --porcelain `\" ]] || (cat docs/occ.md && echo 'Documentation outdated. Run the command talk:developer:update-docs locally, commit the occ.md file and push the changes.' && exit 1)" diff --git a/.github/workflows/openapi.yml b/.github/workflows/openapi.yml new file mode 100644 index 0000000..d2cf695 --- /dev/null +++ b/.github/workflows/openapi.yml @@ -0,0 +1,96 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2024 Arthur Schiwon +# SPDX-License-Identifier: MIT + +name: OpenAPI + +on: pull_request + +permissions: + contents: read + +concurrency: + group: openapi-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + openapi: + runs-on: ubuntu-latest + + if: ${{ github.repository_owner != 'nextcloud-gmbh' }} + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get php version + id: php_versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + - name: Set up php + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ steps.php_versions.outputs.php-available }} + extensions: xml + coverage: none + ini-file: development + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check Typescript OpenApi types + id: check_typescript_openapi + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: "src/types/openapi/openapi*.ts" + + - name: Read package.json node and npm engines version + if: steps.check_typescript_openapi.outputs.files_exists == 'true' + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: node_versions + # Continue if no package.json + continue-on-error: true + with: + fallbackNode: '^24' + fallbackNpm: '^11.3' + + - name: Set up node ${{ steps.node_versions.outputs.nodeVersion }} + if: ${{ steps.node_versions.outputs.nodeVersion }} + uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + with: + node-version: ${{ steps.node_versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.node_versions.outputs.npmVersion }} + if: ${{ steps.node_versions.outputs.nodeVersion }} + run: npm i -g 'npm@${{ steps.node_versions.outputs.npmVersion }}' + + - name: Install dependencies + if: ${{ steps.node_versions.outputs.nodeVersion }} + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: | + npm ci + + - name: Set up dependencies + run: composer i + + - name: Regenerate OpenAPI + run: composer run openapi + + - name: Check openapi*.json and typescript changes + run: | + bash -c "[[ ! \"`git status --porcelain `\" ]] || (echo 'Please run \"composer run openapi\" and commit the openapi*.json files and (if applicable) src/types/openapi/openapi*.ts, see the section \"Show changes on failure\" for details' && exit 1)" + + - name: Show changes on failure + if: failure() + run: | + git status + git --no-pager diff + exit 1 # make it red to grab attention diff --git a/.github/workflows/phpunit-mariadb.yml b/.github/workflows/phpunit-mariadb.yml new file mode 100644 index 0000000..6472226 --- /dev/null +++ b/.github/workflows/phpunit-mariadb.yml @@ -0,0 +1,202 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit MariaDB + +on: pull_request + +permissions: + contents: read + +concurrency: + group: phpunit-mariadb-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + phpunit-mariadb: + runs-on: ubuntu-latest + + needs: [changes, matrix] + if: needs.changes.outputs.src != 'false' + + strategy: + matrix: + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} + mariadb-versions: ['10.6', '11.8'] + + name: MariaDB ${{ matrix.mariadb-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + + services: + mariadb: + image: ghcr.io/nextcloud/continuous-integration-mariadb-${{ matrix.mariadb-versions }}:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:3306/tcp + env: + MARIADB_ROOT_PASSWORD: rootpassword + options: --health-cmd="mariadb-admin ping" --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Set app env + if: ${{ env.APP_NAME == '' }} + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable ONLY_FULL_GROUP_BY MariaDB option + run: | + echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: Check PHPUnit script is defined + id: check_phpunit + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:unit ' | wc -l | grep 1 + + - name: PHPUnit + # Only run if phpunit config file exists + if: steps.check_phpunit.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:unit + + - name: Check PHPUnit integration script is defined + id: check_integration + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:integration ' | wc -l | grep 1 + + - name: Run Nextcloud + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + run: php -S localhost:8080 & + + - name: PHPUnit integration + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:integration + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Skipped + # Fail the action when neither unit nor integration tests ran + if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' + run: | + echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' + exit 1 + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, phpunit-mariadb] + + if: always() + + name: phpunit-mariadb-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mariadb.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-mariadb.yml.patch b/.github/workflows/phpunit-mariadb.yml.patch new file mode 100644 index 0000000..3804b9a --- /dev/null +++ b/.github/workflows/phpunit-mariadb.yml.patch @@ -0,0 +1,13 @@ +diff --git b/.github/workflows/phpunit-mariadb.yml a/.github/workflows/phpunit-mariadb.yml +index fcc701967..c9c5a4e3e 100644 +--- b/.github/workflows/phpunit-mariadb.yml ++++ a/.github/workflows/phpunit-mariadb.yml +@@ -70,7 +70,7 @@ jobs: + matrix: + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} +- mariadb-versions: ['10.6', '11.4'] ++ mariadb-versions: ['10.6', '11.8'] + + name: MariaDB ${{ matrix.mariadb-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + diff --git a/.github/workflows/phpunit-mysql.yml b/.github/workflows/phpunit-mysql.yml new file mode 100644 index 0000000..e021681 --- /dev/null +++ b/.github/workflows/phpunit-mysql.yml @@ -0,0 +1,200 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit MySQL + +on: pull_request + +permissions: + contents: read + +concurrency: + group: phpunit-mysql-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + matrix: ${{ steps.versions.outputs.sparse-matrix }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + with: + matrix: '{"mysql-versions": ["8.4"]}' + + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + phpunit-mysql: + runs-on: ubuntu-latest + + needs: [changes, matrix] + if: needs.changes.outputs.src != 'false' + + strategy: + matrix: ${{ fromJson(needs.matrix.outputs.matrix) }} + + name: MySQL ${{ matrix.mysql-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + + services: + mysql: + image: ghcr.io/nextcloud/continuous-integration-mysql-${{ matrix.mysql-versions }}:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:3306/tcp + env: + MYSQL_ROOT_PASSWORD: rootpassword + options: --health-cmd="mysqladmin ping" --health-interval 5s --health-timeout 2s --health-retries 10 + + steps: + - name: Set app env + if: ${{ env.APP_NAME == '' }} + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, mysql, pdo_mysql + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Enable ONLY_FULL_GROUP_BY MySQL option + run: | + echo "SET GLOBAL sql_mode=(SELECT CONCAT(@@sql_mode,',ONLY_FULL_GROUP_BY'));" | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + echo 'SELECT @@sql_mode;' | mysql -h 127.0.0.1 -P 4444 -u root -prootpassword + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=mysql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: Check PHPUnit script is defined + id: check_phpunit + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:unit ' | wc -l | grep 1 + + - name: PHPUnit + # Only run if phpunit config file exists + if: steps.check_phpunit.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:unit + + - name: Check PHPUnit integration script is defined + id: check_integration + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:integration ' | wc -l | grep 1 + + - name: Run Nextcloud + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + run: php -S localhost:8080 & + + - name: PHPUnit integration + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:integration + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Skipped + # Fail the action when neither unit nor integration tests ran + if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' + run: | + echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' + exit 1 + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, phpunit-mysql] + + if: always() + + name: phpunit-mysql-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-mysql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-oci.yml b/.github/workflows/phpunit-oci.yml new file mode 100644 index 0000000..5355382 --- /dev/null +++ b/.github/workflows/phpunit-oci.yml @@ -0,0 +1,207 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit OCI + +on: pull_request + +permissions: + contents: read + +concurrency: + group: phpunit-oci-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src }} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + phpunit-oci: + runs-on: ubuntu-latest + + needs: [changes, matrix] + if: needs.changes.outputs.src != 'false' + + strategy: + matrix: + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} + oci-versions: ['18', '21', '23'] + + name: OCI ${{ matrix.oci-versions }} PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + + services: + oracle: + image: ghcr.io/gvenzl/oracle-${{ matrix.oci-versions < 23 && 'xe' || 'free' }}:${{ matrix.oci-versions }} + + # Provide passwords and other environment variables to container + env: + ORACLE_PASSWORD: oracle + + # Forward Oracle port + ports: + - 1521:1521 + + # Provide healthcheck script options for startup + options: >- + --health-cmd healthcheck.sh + --health-interval 20s + --health-timeout 10s + --health-retries 10 + + steps: + - name: Set app env + if: ${{ env.APP_NAME == '' }} + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, oci8 + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Set up Nextcloud + env: + DB_PORT: 1521 + run: | + mkdir data + ./occ maintenance:install --verbose --database=oci --database-name=${{ matrix.oci-versions < 23 && 'XE' || 'FREE' }} --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=system --database-pass=oracle --admin-user admin --admin-pass admin + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: Check PHPUnit script is defined + id: check_phpunit + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:unit ' | wc -l | grep 1 + + - name: PHPUnit + # Only run if phpunit config file exists + if: steps.check_phpunit.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:unit + + - name: Check PHPUnit integration script is defined + id: check_integration + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:integration ' | wc -l | grep 1 + + - name: Run Nextcloud + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + run: php -S localhost:8080 & + + - name: PHPUnit integration + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:integration + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Skipped + # Fail the action when neither unit nor integration tests ran + if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' + run: | + echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' + exit 1 + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, phpunit-oci] + + if: always() + + name: phpunit-oci-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-oci.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-pgsql.yml b/.github/workflows/phpunit-pgsql.yml new file mode 100644 index 0000000..4592e62 --- /dev/null +++ b/.github/workflows/phpunit-pgsql.yml @@ -0,0 +1,198 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit PostgreSQL + +on: pull_request + +permissions: + contents: read + +concurrency: + group: phpunit-pgsql-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src }} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + phpunit-pgsql: + runs-on: ubuntu-latest + + needs: [changes, matrix] + if: needs.changes.outputs.src != 'false' + + strategy: + matrix: + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} + + name: PostgreSQL PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + + services: + postgres: + image: ghcr.io/nextcloud/continuous-integration-postgres-16:latest # zizmor: ignore[unpinned-images] + ports: + - 4444:5432/tcp + env: + POSTGRES_USER: root + POSTGRES_PASSWORD: rootpassword + POSTGRES_DB: nextcloud + options: --health-cmd pg_isready --health-interval 5s --health-timeout 2s --health-retries 5 + + steps: + - name: Set app env + if: ${{ env.APP_NAME == '' }} + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, pgsql, pdo_pgsql + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=pgsql --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: Check PHPUnit script is defined + id: check_phpunit + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:unit ' | wc -l | grep 1 + + - name: PHPUnit + # Only run if phpunit config file exists + if: steps.check_phpunit.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:unit + + - name: Check PHPUnit integration script is defined + id: check_integration + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:integration ' | wc -l | grep 1 + + - name: Run Nextcloud + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + run: php -S localhost:8080 & + + - name: PHPUnit integration + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:integration + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Skipped + # Fail the action when neither unit nor integration tests ran + if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' + run: | + echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' + exit 1 + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, phpunit-pgsql] + + if: always() + + name: phpunit-pgsql-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-pgsql.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/phpunit-sqlite.yml b/.github/workflows/phpunit-sqlite.yml new file mode 100644 index 0000000..e2e299a --- /dev/null +++ b/.github/workflows/phpunit-sqlite.yml @@ -0,0 +1,187 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: PHPUnit SQLite + +on: pull_request + +permissions: + contents: read + +concurrency: + group: phpunit-sqlite-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + matrix: + runs-on: ubuntu-latest-low + outputs: + php-version: ${{ steps.versions.outputs.php-available-list }} + server-max: ${{ steps.versions.outputs.branches-max-list }} + steps: + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get version matrix + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + changes: + runs-on: ubuntu-latest-low + permissions: + contents: read + pull-requests: read + + outputs: + src: ${{ steps.changes.outputs.src}} + + steps: + - uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1 + id: changes + continue-on-error: true + with: + filters: | + src: + - '.github/workflows/**' + - 'appinfo/**' + - 'lib/**' + - 'templates/**' + - 'tests/**' + - 'vendor/**' + - 'vendor-bin/**' + - '.php-cs-fixer.dist.php' + - 'composer.json' + - 'composer.lock' + + phpunit-sqlite: + runs-on: ubuntu-latest + + needs: [changes, matrix] + if: needs.changes.outputs.src != 'false' + + strategy: + matrix: + php-versions: ${{ fromJson(needs.matrix.outputs.php-version) }} + server-versions: ${{ fromJson(needs.matrix.outputs.server-max) }} + + name: SQLite PHP ${{ matrix.php-versions }} Nextcloud ${{ matrix.server-versions }} + + steps: + - name: Set app env + if: ${{ env.APP_NAME == '' }} + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.server-versions }} + + - name: Checkout app + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + + - name: Set up php ${{ matrix.php-versions }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ matrix.php-versions }} + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Check composer file existence + id: check_composer + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: apps/${{ env.APP_NAME }}/composer.json + + - name: Set up dependencies + # Only run if phpunit config file exists + if: steps.check_composer.outputs.files_exists == 'true' + working-directory: apps/${{ env.APP_NAME }} + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Set up Nextcloud + env: + DB_PORT: 4444 + run: | + mkdir data + ./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass admin + ./occ app:enable --force ${{ env.APP_NAME }} + + - name: Check PHPUnit script is defined + id: check_phpunit + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:unit ' | wc -l | grep 1 + + - name: PHPUnit + # Only run if phpunit config file exists + if: steps.check_phpunit.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:unit + + - name: Check PHPUnit integration script is defined + id: check_integration + continue-on-error: true + working-directory: apps/${{ env.APP_NAME }} + run: | + composer run --list | grep '^ test:integration ' | wc -l | grep 1 + + - name: Run Nextcloud + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + run: php -S localhost:8080 & + + - name: PHPUnit integration + # Only run if phpunit integration config file exists + if: steps.check_integration.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + run: composer run test:integration + + - name: Print logs + if: always() + run: | + cat data/nextcloud.log + + - name: Skipped + # Fail the action when neither unit nor integration tests ran + if: steps.check_phpunit.outcome == 'failure' && steps.check_integration.outcome == 'failure' + run: | + echo 'Neither PHPUnit nor PHPUnit integration tests are specified in composer.json scripts' + exit 1 + + summary: + permissions: + contents: none + runs-on: ubuntu-latest-low + needs: [changes, phpunit-sqlite] + + if: always() + + name: phpunit-sqlite-summary + + steps: + - name: Summary status + run: if ${{ needs.changes.outputs.src != 'false' && needs.phpunit-sqlite.result != 'success' }}; then exit 1; fi diff --git a/.github/workflows/pr-feedback.yml b/.github/workflows/pr-feedback.yml new file mode 100644 index 0000000..f4c0477 --- /dev/null +++ b/.github/workflows/pr-feedback.yml @@ -0,0 +1,55 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization + +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-FileCopyrightText: 2023 Marcel Klehr +# SPDX-FileCopyrightText: 2023 Joas Schilling <213943+nickvergessen@users.noreply.github.com> +# SPDX-FileCopyrightText: 2023 Daniel Kesselberg +# SPDX-FileCopyrightText: 2023 Florian Steffens +# SPDX-License-Identifier: MIT + +name: 'Ask for feedback on PRs' +on: + schedule: + - cron: '30 1 * * *' + +permissions: + contents: read + pull-requests: write + +jobs: + pr-feedback: + if: ${{ github.repository_owner == 'nextcloud' }} + runs-on: ubuntu-latest + steps: + - name: The get-github-handles-from-website action + uses: marcelklehr/get-github-handles-from-website-action@06b2239db0a48fe1484ba0bfd966a3ab81a08308 # v1.0.1 + id: scrape + with: + website: 'https://nextcloud.com/team/' + + - name: Get blocklist + id: blocklist + run: | + blocklist=$(curl https://raw.githubusercontent.com/nextcloud/.github/master/non-community-usernames.txt | paste -s -d, -) + echo "blocklist=$blocklist" >> "$GITHUB_OUTPUT" + + - uses: nextcloud/pr-feedback-action@f0cab224dea8e1f282f9451de322f323c78fc7a5 # main + with: + feedback-message: | + Hello there, + Thank you so much for taking the time and effort to create a pull request to our Nextcloud project. + + We hope that the review process is going smooth and is helpful for you. We want to ensure your pull request is reviewed to your satisfaction. If you have a moment, our community management team would very much appreciate your feedback on your experience with this PR review process. + + Your feedback is valuable to us as we continuously strive to improve our community developer experience. Please take a moment to complete our short survey by clicking on the following link: https://cloud.nextcloud.com/apps/forms/s/i9Ago4EQRZ7TWxjfmeEpPkf6 + + Thank you for contributing to Nextcloud and we hope to hear from you soon! + + (If you believe you should not receive this message, you can add yourself to the [blocklist](https://github.com/nextcloud/.github/blob/master/non-community-usernames.txt).) + days-before-feedback: 14 + start-date: '2025-06-12' + exempt-authors: '${{ steps.blocklist.outputs.blocklist }},${{ steps.scrape.outputs.users }}' + exempt-bots: true diff --git a/.github/workflows/psalm.yml b/.github/workflows/psalm.yml new file mode 100644 index 0000000..d69fd28 --- /dev/null +++ b/.github/workflows/psalm.yml @@ -0,0 +1,62 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Static analysis + +on: pull_request + +concurrency: + group: psalm-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + static-analysis: + runs-on: ubuntu-latest + + name: static-psalm-analysis + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: Get php version + id: versions + uses: icewind1991/nextcloud-version-matrix@8a7bac6300b2f0f3100088b297995a229558ddba # v1.3.2 + + - name: Check enforcement of minimum PHP version ${{ steps.versions.outputs.php-min }} in psalm.xml + run: grep 'phpVersion="${{ steps.versions.outputs.php-min }}' psalm.xml + + - name: Set up php${{ steps.versions.outputs.php-available }} + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: ${{ steps.versions.outputs.php-available }} + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + ini-file: development + # Temporary workaround for missing pcntl_* in PHP 8.3 + ini-values: disable_functions= + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Install dependencies + run: | + composer remove nextcloud/ocp --dev --no-scripts + composer i + + - name: Check for vulnerable PHP dependencies + run: composer require --dev roave/security-advisories:dev-latest + + - name: Install nextcloud/ocp + run: composer require --dev nextcloud/ocp:dev-${{ steps.versions.outputs.branches-max }} --ignore-platform-reqs --with-dependencies + + - name: Run coding standards check + run: composer run psalm -- --threads=1 --monochrome --no-progress --output-format=github diff --git a/.github/workflows/reuse.yml b/.github/workflows/reuse.yml new file mode 100644 index 0000000..3f485f8 --- /dev/null +++ b/.github/workflows/reuse.yml @@ -0,0 +1,27 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization + +# SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. +# +# SPDX-License-Identifier: CC0-1.0 + +name: REUSE Compliance Check + +on: [pull_request] + +permissions: + contents: read + +jobs: + reuse-compliance-check: + runs-on: ubuntu-latest-low + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + + - name: REUSE Compliance Check + uses: fsfe/reuse-action@676e2d560c9a403aa252096d99fcab3e1132b0f5 # v6.0.0 diff --git a/.github/workflows/sync-workflow-templates.yml.patch b/.github/workflows/sync-workflow-templates.yml.patch new file mode 100644 index 0000000..ce1e7b5 --- /dev/null +++ b/.github/workflows/sync-workflow-templates.yml.patch @@ -0,0 +1,9 @@ +diff --git a/.github/workflows/sync-workflow-templates.yml b/.github/workflows/sync-workflow-templates.yml +index 2dbd84b71f..304796d10c 100644 +--- a/.github/workflows/sync-workflow-templates.yml ++++ b/.github/workflows/sync-workflow-templates.yml +@@ -132,4 +132,3 @@ jobs: + ${{ env.SUMMARY }} + labels: | + dependencies +- 3. to review diff --git a/.github/workflows/update-nextcloud-ocp-approve-merge.yml b/.github/workflows/update-nextcloud-ocp-approve-merge.yml new file mode 100644 index 0000000..dfe0ef4 --- /dev/null +++ b/.github/workflows/update-nextcloud-ocp-approve-merge.yml @@ -0,0 +1,58 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2023-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Auto approve nextcloud/ocp + +on: + pull_request_target: # zizmor: ignore[dangerous-triggers] + branches: + - main + - master + - stable* + +permissions: + contents: read + +concurrency: + group: update-nextcloud-ocp-approve-merge-${{ github.head_ref || github.run_id }} + cancel-in-progress: true + +jobs: + auto-approve-merge: + if: github.actor == 'nextcloud-command' + runs-on: ubuntu-latest-low + permissions: + # for hmarr/auto-approve-action to approve PRs + pull-requests: write + # for alexwilson/enable-github-automerge-action to approve PRs + contents: write + + steps: + - name: Disabled on forks + if: ${{ github.event.pull_request.head.repo.full_name != github.repository }} + run: | + echo 'Can not approve PRs from forks' + exit 1 + + - uses: mdecoleman/pr-branch-name@55795d86b4566d300d237883103f052125cc7508 # v3.0.0 + id: branchname + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + # GitHub actions bot approve + - uses: hmarr/auto-approve-action@b40d6c9ed2fa10c9a2749eca7eb004418a705501 # v2 + if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp') + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + + # Enable GitHub auto merge + - name: Auto merge + uses: alexwilson/enable-github-automerge-action@56e3117d1ae1540309dc8f7a9f2825bc3c5f06ff # v2.0.0 + if: startsWith(steps.branchname.outputs.branch, 'automated/noid/') && endsWith(steps.branchname.outputs.branch, 'update-nextcloud-ocp') + with: + github-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/update-nextcloud-ocp.yml b/.github/workflows/update-nextcloud-ocp.yml new file mode 100644 index 0000000..082a6d8 --- /dev/null +++ b/.github/workflows/update-nextcloud-ocp.yml @@ -0,0 +1,117 @@ +# This workflow is provided via the organization template repository +# +# https://github.com/nextcloud/.github +# https://docs.github.com/en/actions/learn-github-actions/sharing-workflows-with-your-organization +# +# SPDX-FileCopyrightText: 2022-2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Update nextcloud/ocp + +on: + workflow_dispatch: + schedule: + - cron: "5 2 * * 0" + +permissions: + contents: read + issues: write + +jobs: + update-nextcloud-ocp: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + branches: + - ${{ github.event.repository.default_branch }} + - 'stable33' + - 'stable32' + + name: update-nextcloud-ocp-${{ matrix.branches }} + + steps: + - id: checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false + ref: ${{ matrix.branches }} + submodules: true + continue-on-error: true + + - name: Set up php8.2 + if: steps.checkout.outcome == 'success' + uses: shivammathur/setup-php@accd6127cb78bee3e8082180cb391013d204ef9f # v2.37.0 + with: + php-version: 8.2 + # https://docs.nextcloud.com/server/stable/admin_manual/installation/source_installation.html#prerequisites-for-manual-installation + extensions: bz2, ctype, curl, dom, fileinfo, gd, iconv, intl, json, libxml, mbstring, openssl, pcntl, posix, session, simplexml, xmlreader, xmlwriter, zip, zlib, sqlite, pdo_sqlite + coverage: none + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Read codeowners + if: steps.checkout.outcome == 'success' + id: codeowners + run: | + grep '/appinfo/info.xml' .github/CODEOWNERS | cut -f 2- -d ' ' | xargs | awk '{ print "codeowners="$0 }' >> $GITHUB_OUTPUT + continue-on-error: true + + - name: Composer install + if: steps.checkout.outcome == 'success' + run: composer install + + - name: Check composer bin for nextcloud/ocp exists + id: check_composer_bin + uses: andstor/file-existence-action@558493d6c74bf472d87c84eab196434afc2fa029 # v3.1.0 + with: + files: vendor-bin/nextcloud-ocp/composer.json + + - name: Composer update nextcloud/ocp + id: update_branch + env: + USE_COMPOSER_BIN: ${{ steps.check_composer_bin.outputs.files_exists }} + BRANCH_NAME: ${{ matrix.branches }} + run: | + COMPOSER_CMD='composer' + if [[ "$USE_COMPOSER_BIN" == 'true' ]]; then + COMPOSER_CMD='composer bin nextcloud-ocp' + fi + + PACKAGE_VERSION="nextcloud/ocp:dev-$BRANCH_NAME" + if [[ "$BRANCH_NAME" == 'main' ]]; then + PACKAGE_VERSION='nextcloud/ocp:dev-master' + fi + + echo $COMPOSER_CMD require --dev $PACKAGE_VERSION + $COMPOSER_CMD require --dev $PACKAGE_VERSION + + - name: Raise on issue on failure + uses: dacbd/create-issue-action@cdb57ab6ff8862aa09fee2be6ba77a59581921c2 # v2.0.0 + if: ${{ steps.checkout.outcome == 'success' && failure() && steps.update_branch.conclusion == 'failure' }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + title: 'Failed to update nextcloud/ocp package on branch ${{ matrix.branches }}' + body: 'Please check the output of the GitHub action and manually resolve the issues
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
${{ steps.codeowners.outputs.codeowners }}' + + - name: Create Pull Request + if: steps.checkout.outcome == 'success' + uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0 + with: + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + commit-message: 'chore(dev-deps): Bump nextcloud/ocp package' + committer: GitHub + author: nextcloud-command + signoff: true + branch: 'automated/noid/${{ matrix.branches }}-update-nextcloud-ocp' + title: '[${{ matrix.branches }}] Update nextcloud/ocp dependency' + add-path: | + composer.json + composer.lock + vendor-bin/nextcloud-ocp/composer.json + vendor-bin/nextcloud-ocp/composer.lock + body: | + Auto-generated update of [nextcloud/ocp](https://github.com/nextcloud-deps/ocp/) dependency + labels: | + dependencies diff --git a/.github/workflows/update-nextcloud-ocp.yml.patch b/.github/workflows/update-nextcloud-ocp.yml.patch new file mode 100644 index 0000000..c8a8d4f --- /dev/null +++ b/.github/workflows/update-nextcloud-ocp.yml.patch @@ -0,0 +1,9 @@ +diff --git a/.github/workflows/update-nextcloud-ocp.yml b/.github/workflows/update-nextcloud-ocp.yml +index 5dc5f9a596..81d4279c1b 100644 +--- a/.github/workflows/update-nextcloud-ocp.yml ++++ b/.github/workflows/update-nextcloud-ocp.yml +@@ -124,4 +124,3 @@ jobs: + Auto-generated update of [nextcloud/ocp](https://github.com/nextcloud-deps/ocp/) dependency + labels: | + dependencies +- 3. to review diff --git a/.github/workflows/update-nextcloud-openapi.yml b/.github/workflows/update-nextcloud-openapi.yml new file mode 100644 index 0000000..0650919 --- /dev/null +++ b/.github/workflows/update-nextcloud-openapi.yml @@ -0,0 +1,102 @@ +# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT + +name: Update nextcloud/openapi + +on: + workflow_dispatch: + schedule: + - cron: "5 4 * * 0" + +permissions: + contents: read + +jobs: + update-nextcloud-openapi: + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + branches: ['main', 'master', 'stable31', 'stable30'] + + name: Update Nextcloud OpenAPI types from core + + steps: + - name: Set app env + run: | + # Split and keep last + echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV + + - name: Checkout server + if: ${{ matrix.branches != 'main' }} + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: ${{ matrix.branches }} + + - name: Checkout server (Main) + if: ${{ matrix.branches == 'main' }} + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + submodules: true + repository: nextcloud/server + ref: master + + - name: Checkout app + id: checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + persist-credentials: false + path: apps/${{ env.APP_NAME }} + ref: ${{ matrix.branches }} + continue-on-error: true + + - name: Read package.json node and npm engines version + if: steps.checkout.outcome == 'success' + uses: skjnldsv/read-package-engines-version-actions@06d6baf7d8f41934ab630e97d9e6c0bc9c9ac5e4 # v3 + id: versions + with: + fallbackNode: '^20' + fallbackNpm: '^10' + + - name: Set up node ${{ steps.versions.outputs.nodeVersion }} + if: steps.checkout.outcome == 'success' + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: ${{ steps.versions.outputs.nodeVersion }} + + - name: Set up npm ${{ steps.versions.outputs.npmVersion }} + if: steps.checkout.outcome == 'success' + run: npm i -g 'npm@${{ steps.versions.outputs.npmVersion }}' + + - name: Install dependencies & generate types + if: steps.checkout.outcome == 'success' + working-directory: apps/${{ env.APP_NAME }} + env: + CYPRESS_INSTALL_BINARY: 0 + PUPPETEER_SKIP_DOWNLOAD: true + run: | + npm ci + npm run ts:generate-core-types --if-present + + - name: Create Pull Request + if: steps.checkout.outcome == 'success' + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 + with: + path: apps/${{ env.APP_NAME }} + token: ${{ secrets.COMMAND_BOT_PAT }} # zizmor: ignore[secrets-outside-env] + commit-message: 'chore(ts): update OpenAPI types from core' + committer: GitHub + author: nextcloud-command + signoff: true + branch: 'automated/noid/${{ matrix.branches }}-update-nextcloud-openapi' + title: '[${{ matrix.branches }}] Update Nextcloud OpenAPI types' + body: | + Auto-generated update of Nextcloud OpenAPI types + labels: | + dependencies + 3. to review diff --git a/.github/workflows/update-nextcloud-openapi.yml.patch b/.github/workflows/update-nextcloud-openapi.yml.patch new file mode 100644 index 0000000..4357c43 --- /dev/null +++ b/.github/workflows/update-nextcloud-openapi.yml.patch @@ -0,0 +1,9 @@ +diff --git a/.github/workflows/update-nextcloud-openapi.yml b/.github/workflows/update-nextcloud-openapi.yml +index 8bb2d794c0..2d4befebab 100644 +--- a/.github/workflows/update-nextcloud-openapi.yml ++++ b/.github/workflows/update-nextcloud-openapi.yml +@@ -99,4 +99,3 @@ jobs: + Auto-generated update of Nextcloud OpenAPI types + labels: | + dependencies +- 3. to review diff --git a/.github/workflows/update-stable-titles.yml b/.github/workflows/update-stable-titles.yml new file mode 100644 index 0000000..565e9bc --- /dev/null +++ b/.github/workflows/update-stable-titles.yml @@ -0,0 +1,71 @@ +# SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: MIT +name: Update PRs titles on stable branches + +on: + pull_request: + types: [opened, edited] + branches: + - "stable*" + +concurrency: + group: stable-pr-title-${{ github.event.pull_request.number }} + cancel-in-progress: true + +jobs: + update-pr-title: + runs-on: ubuntu-latest-low + permissions: + pull-requests: write + contents: read + + steps: + - name: Wait for potential title edits + run: sleep 15 + + - name: Get PR details and update title + # Renovate already have target branch in the title + if: github.event.pull_request.user.login != 'renovate[bot]' + uses: actions/github-script@ed597411d8f924073f98dfc5c65a23a2325f34cd # v8.0.0 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const { data: pr } = await github.rest.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + }); + + const baseBranch = pr.base.ref; + const currentTitle = pr.title; + + // Check if this is a stable branch + // Should not happen as we only trigger on stable* branches 🤷‍♀️ + if (!baseBranch.startsWith('stable')) { + console.log(`Not a stable branch: ${baseBranch}`); + return; + } + + const prefix = `[${baseBranch}]`; + + // Check if title already has the correct prefix and no other stable tags + const correctTagRegex = new RegExp(`^\\[${baseBranch}\\]\\s*`); + const hasOtherStableTags = /\[stable[\d.]*\]/.test(currentTitle.replace(correctTagRegex, '')); + + if (correctTagRegex.test(currentTitle) && !hasOtherStableTags) { + console.log(`Title already has correct prefix only: ${currentTitle}`); + return; + } + + // Remove all stable tags and add the correct one + const cleanTitle = currentTitle.replace(/\[stable[\d.]*\]\s*/g, '').trim(); + const newTitle = `${prefix} ${cleanTitle}`; + + console.log(`Updating title from: "${currentTitle}" to: "${newTitle}"`); + + await github.rest.pulls.update({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.issue.number, + title: newTitle, + }); diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6001188 --- /dev/null +++ b/.gitignore @@ -0,0 +1,39 @@ +# Exclude npm stuff +/build +/node_modules + +# PHP Code Sniffer +/vendor +/vendor-bin/*/vendor +/lib/Vendor +/.php-cs-fixer.cache + +# Local docs +/site + +# Karma/jasmine coverage data +/coverage +/tests/php/coverage-html +/tests/php/clover.xml +/tests/php/.phpunit.result.cache +/tests/integration/vendor +/tests/integration/output +/drone +/findings.sarif + +# PHP Dev server output (integration tests) +/tests/integration/phpserver*.log + +# Compiled frontend assets +/css +/js + +# VScode settings +/.vscode +*.code-workspace + +# JetBrains IDEs settings +/.idea + +# JetBrains Fleet settings +/.fleet diff --git a/.l10nignore b/.l10nignore new file mode 100644 index 0000000..5948301 --- /dev/null +++ b/.l10nignore @@ -0,0 +1,2 @@ +js/ +build/ diff --git a/.patches/.gitkeep b/.patches/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/.php-cs-fixer.dist.php b/.php-cs-fixer.dist.php new file mode 100644 index 0000000..b13e847 --- /dev/null +++ b/.php-cs-fixer.dist.php @@ -0,0 +1,26 @@ +setParallelConfig(ParallelConfigFactory::detect()) + ->getFinder() + ->ignoreVCSIgnored(true) + ->notPath('build') + ->notPath('l10n') + ->notPath('src') + ->notPath('lib/Vendor') + ->notPath('vendor') + ->notPath('vendor-bin') + ->in(__DIR__); +return $config; diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 0000000..44a0ea4 --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 +version: 2 + +build: + os: ubuntu-22.04 + tools: + python: "3" + +mkdocs: + configuration: mkdocs.yml + fail_on_warning: false diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 0000000..197481d --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,5 @@ +# SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 + +/src/utils/webrtc/simplewebrtc/* +/src/**/*.spec.js diff --git a/.tx/config b/.tx/config new file mode 100644 index 0000000..75600d9 --- /dev/null +++ b/.tx/config @@ -0,0 +1,10 @@ +[main] +host = https://www.transifex.com +lang_map = hu_HU: hu, nb_NO: nb, sk_SK: sk, th_TH: th, ja_JP: ja, bg_BG: bg, cs_CZ: cs, fi_FI: fi + +[o:nextcloud:p:nextcloud:r:spreed] +file_filter = translationfiles//spreed.po +source_file = translationfiles/templates/spreed.pot +source_lang = en +type = PO + diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 0000000..a9cd8b2 --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,42 @@ + +# Authors + +- Arthur Schiwon +- Bjoern Schiessle +- Carl Schwan +- Christoph Wurst +- Christopher Ng +- Daniel Calviño Sánchez +- Daniel Rudolf +- Denis Mosolov +- Dorra Jaouad +- Elmer Miroslav Mosher Golovin +- Fon E. Noel NFEBE +- Gary Kim +- Grigorii K. Shartsev +- Immanuel Pasanec +- Informatyka Boguslawski sp. z o.o. sp.k., http://www.ib.pl/ +- Ivan Sein +- Joachim Bauch +- Joas Schilling +- John Molakvoæ +- Julien Veyssier +- Julius Härtl +- Kate Döen +- Lukas Reschke +- Maksim Sukharev +- Marcel Müller +- Marco Ambrosini +- Mario Danic +- Morris Jobke +- Richard Steinmetz +- Robin Appelman +- Roeland Jago Douma +- Sergio Bertolín +- Thomas Müller +- Vincent Petry +- Vitor Mattos +- ownCloud, Inc. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5ec2ad8 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ + +# Changelog +All notable changes to this project will be documented in docs/changelogs/ at release time. +A readable version is available in the [Nextcloud Talk Documentation](https://nextcloud-talk.readthedocs.io/en/latest/changelog/). diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..dba13ed --- /dev/null +++ b/COPYING @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. diff --git a/LICENSES/AGPL-3.0-only.txt b/LICENSES/AGPL-3.0-only.txt new file mode 100644 index 0000000..0c97efd --- /dev/null +++ b/LICENSES/AGPL-3.0-only.txt @@ -0,0 +1,235 @@ +GNU AFFERO GENERAL PUBLIC LICENSE +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + + Preamble + +The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. + +A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. + +The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. + +An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. + +The precise terms and conditions for copying, distribution and modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the Program. + +To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. + +A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . diff --git a/LICENSES/AGPL-3.0-or-later.txt b/LICENSES/AGPL-3.0-or-later.txt new file mode 100644 index 0000000..0c97efd --- /dev/null +++ b/LICENSES/AGPL-3.0-or-later.txt @@ -0,0 +1,235 @@ +GNU AFFERO GENERAL PUBLIC LICENSE +Version 3, 19 November 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + + Preamble + +The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. + +A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. + +The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. + +An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. + +The precise terms and conditions for copying, distribution and modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU Affero General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the Program. + +To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. +The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. + +A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". + + c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + + d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. +"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + + e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Remote Network Interaction; Use with the GNU General Public License. + +Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version 3 of the GNU General Public License. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see . diff --git a/LICENSES/Apache-2.0.txt b/LICENSES/Apache-2.0.txt new file mode 100644 index 0000000..137069b --- /dev/null +++ b/LICENSES/Apache-2.0.txt @@ -0,0 +1,73 @@ +Apache License +Version 2.0, January 2004 +http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. + +"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. + +"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Apache License to your work. + +To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. + +Copyright [yyyy] [name of copyright owner] + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + +http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSES/CC-BY-4.0.txt b/LICENSES/CC-BY-4.0.txt new file mode 100644 index 0000000..13ca539 --- /dev/null +++ b/LICENSES/CC-BY-4.0.txt @@ -0,0 +1,156 @@ +Creative Commons Attribution 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + +b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/CC-BY-SA-4.0.txt b/LICENSES/CC-BY-SA-4.0.txt new file mode 100644 index 0000000..835a683 --- /dev/null +++ b/LICENSES/CC-BY-SA-4.0.txt @@ -0,0 +1,170 @@ +Creative Commons Attribution-ShareAlike 4.0 International + + Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. + +Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. + +Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. + +Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. + +Creative Commons Attribution-ShareAlike 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. + +Section 1 – Definitions. + + a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. + + c. BY-SA Compatible License means a license listed at creativecommons.org/compatiblelicenses, approved by Creative Commons as essentially the equivalent of this Public License. + + d. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. + + e. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. + + f. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. + + g. License Elements means the license attributes listed in the name of a Creative Commons Public License. The License Elements of this Public License are Attribution and ShareAlike. + + h. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. + + i. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. + + j. Licensor means the individual(s) or entity(ies) granting rights under this Public License. + + k. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. + + l. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. + + m. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. + +Section 2 – Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: + + A. reproduce and Share the Licensed Material, in whole or in part; and + + B. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. + + 3. Term. The term of this Public License is specified in Section 6(a). + + 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. + + 5. Downstream recipients. + + A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. + + B. Additional offer from the Licensor – Adapted Material. Every recipient of Adapted Material from You automatically receives an offer from the Licensor to exercise the Licensed Rights in the Adapted Material under the conditions of the Adapter’s License You apply. + + C. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. + + 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this Public License. + + 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. + +Section 3 – License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified form), You must: + + A. retain the following if it is supplied by the Licensor with the Licensed Material: + + i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of warranties; + + v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; + + B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and + + C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. + + 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. + + b. ShareAlike.In addition to the conditions in Section 3(a), if You Share Adapted Material You produce, the following conditions also apply. + + 1. The Adapter’s License You apply must be a Creative Commons license with the same License Elements, this version or later, or a BY-SA Compatible License. + + 2. You must include the text of, or the URI or hyperlink to, the Adapter's License You apply. You may satisfy this condition in any reasonable manner based on the medium, means, and context in which You Share Adapted Material. + + 3. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, Adapted Material that restrict exercise of the rights granted under the Adapter's License You apply. + +Section 4 – Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; + + b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material, including for purposes of Section 3(b); and + + c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. +For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. + +Section 5 – Disclaimer of Warranties and Limitation of Liability. + + a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. + + b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. + + c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. + +Section 6 – Term and Termination. + + a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or + + 2. upon express reinstatement by the Licensor. + + c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. + + d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. + + e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. + +Section 7 – Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. + +Section 8 – Interpretation. + + a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. + + c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. + + d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. + +Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. + +Creative Commons may be contacted at creativecommons.org. diff --git a/LICENSES/CC0-1.0.txt b/LICENSES/CC0-1.0.txt new file mode 100644 index 0000000..0e259d4 --- /dev/null +++ b/LICENSES/CC0-1.0.txt @@ -0,0 +1,121 @@ +Creative Commons Legal Code + +CC0 1.0 Universal + + CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE + LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN + ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS + INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES + REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS + PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM + THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED + HEREUNDER. + +Statement of Purpose + +The laws of most jurisdictions throughout the world automatically confer +exclusive Copyright and Related Rights (defined below) upon the creator +and subsequent owner(s) (each and all, an "owner") of an original work of +authorship and/or a database (each, a "Work"). + +Certain owners wish to permanently relinquish those rights to a Work for +the purpose of contributing to a commons of creative, cultural and +scientific works ("Commons") that the public can reliably and without fear +of later claims of infringement build upon, modify, incorporate in other +works, reuse and redistribute as freely as possible in any form whatsoever +and for any purposes, including without limitation commercial purposes. +These owners may contribute to the Commons to promote the ideal of a free +culture and the further production of creative, cultural and scientific +works, or to gain reputation or greater distribution for their Work in +part through the use and efforts of others. + +For these and/or other purposes and motivations, and without any +expectation of additional consideration or compensation, the person +associating CC0 with a Work (the "Affirmer"), to the extent that he or she +is an owner of Copyright and Related Rights in the Work, voluntarily +elects to apply CC0 to the Work and publicly distribute the Work under its +terms, with knowledge of his or her Copyright and Related Rights in the +Work and the meaning and intended legal effect of CC0 on those rights. + +1. Copyright and Related Rights. A Work made available under CC0 may be +protected by copyright and related or neighboring rights ("Copyright and +Related Rights"). Copyright and Related Rights include, but are not +limited to, the following: + + i. the right to reproduce, adapt, distribute, perform, display, + communicate, and translate a Work; + ii. moral rights retained by the original author(s) and/or performer(s); +iii. publicity and privacy rights pertaining to a person's image or + likeness depicted in a Work; + iv. rights protecting against unfair competition in regards to a Work, + subject to the limitations in paragraph 4(a), below; + v. rights protecting the extraction, dissemination, use and reuse of data + in a Work; + vi. database rights (such as those arising under Directive 96/9/EC of the + European Parliament and of the Council of 11 March 1996 on the legal + protection of databases, and under any national implementation + thereof, including any amended or successor version of such + directive); and +vii. other similar, equivalent or corresponding rights throughout the + world based on applicable law or treaty, and any national + implementations thereof. + +2. Waiver. To the greatest extent permitted by, but not in contravention +of, applicable law, Affirmer hereby overtly, fully, permanently, +irrevocably and unconditionally waives, abandons, and surrenders all of +Affirmer's Copyright and Related Rights and associated claims and causes +of action, whether now known or unknown (including existing as well as +future claims and causes of action), in the Work (i) in all territories +worldwide, (ii) for the maximum duration provided by applicable law or +treaty (including future time extensions), (iii) in any current or future +medium and for any number of copies, and (iv) for any purpose whatsoever, +including without limitation commercial, advertising or promotional +purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each +member of the public at large and to the detriment of Affirmer's heirs and +successors, fully intending that such Waiver shall not be subject to +revocation, rescission, cancellation, termination, or any other legal or +equitable action to disrupt the quiet enjoyment of the Work by the public +as contemplated by Affirmer's express Statement of Purpose. + +3. Public License Fallback. Should any part of the Waiver for any reason +be judged legally invalid or ineffective under applicable law, then the +Waiver shall be preserved to the maximum extent permitted taking into +account Affirmer's express Statement of Purpose. In addition, to the +extent the Waiver is so judged Affirmer hereby grants to each affected +person a royalty-free, non transferable, non sublicensable, non exclusive, +irrevocable and unconditional license to exercise Affirmer's Copyright and +Related Rights in the Work (i) in all territories worldwide, (ii) for the +maximum duration provided by applicable law or treaty (including future +time extensions), (iii) in any current or future medium and for any number +of copies, and (iv) for any purpose whatsoever, including without +limitation commercial, advertising or promotional purposes (the +"License"). The License shall be deemed effective as of the date CC0 was +applied by Affirmer to the Work. Should any part of the License for any +reason be judged legally invalid or ineffective under applicable law, such +partial invalidity or ineffectiveness shall not invalidate the remainder +of the License, and in such case Affirmer hereby affirms that he or she +will not (i) exercise any of his or her remaining Copyright and Related +Rights in the Work or (ii) assert any associated claims and causes of +action with respect to the Work, in either case contrary to Affirmer's +express Statement of Purpose. + +4. Limitations and Disclaimers. + + a. No trademark or patent rights held by Affirmer are waived, abandoned, + surrendered, licensed or otherwise affected by this document. + b. Affirmer offers the Work as-is and makes no representations or + warranties of any kind concerning the Work, express, implied, + statutory or otherwise, including without limitation warranties of + title, merchantability, fitness for a particular purpose, non + infringement, or the absence of latent or other defects, accuracy, or + the present or absence of errors, whether or not discoverable, all to + the greatest extent permissible under applicable law. + c. Affirmer disclaims responsibility for clearing rights of other persons + that may apply to the Work or any use thereof, including without + limitation any person's Copyright and Related Rights in the Work. + Further, Affirmer disclaims responsibility for obtaining any necessary + consents, permissions or other rights required for any use of the + Work. + d. Affirmer understands and acknowledges that Creative Commons is not a + party to this document and has no duty or obligation with respect to + this CC0 or use of the Work. diff --git a/LICENSES/LicenseRef-Discord.txt b/LICENSES/LicenseRef-Discord.txt new file mode 100644 index 0000000..050b36b --- /dev/null +++ b/LICENSES/LicenseRef-Discord.txt @@ -0,0 +1,10 @@ +The Discord logo + +The Discord logo consists of two elements; the icon (Clyde) +and the wordmark. It’s an instantly recognisable brand +element and should be represented consistently throughout +our product and marketing efforts. The logo should always +try to exist with the symbol and wordmark together. In no +way should the logo be modified, distorted, or redrawn + +https://discord.com/branding diff --git a/LICENSES/LicenseRef-Mattermost.txt b/LICENSES/LicenseRef-Mattermost.txt new file mode 100644 index 0000000..68cad21 --- /dev/null +++ b/LICENSES/LicenseRef-Mattermost.txt @@ -0,0 +1,7 @@ +The Mattermost logomark + +The logos below are available for use in your integrations and applications that +connect to Mattermost. Use of the logo is permitted as long as it’s used in a +non-commercial way and does not imply endorsement by Mattermost, Inc. + +https://handbook.mattermost.com/operations/operations/company-processes/publishing/publishing-guidelines/brand-and-visual-design-guidelines diff --git a/LICENSES/LicenseRef-Nasa.txt b/LICENSES/LicenseRef-Nasa.txt new file mode 100644 index 0000000..fcf41e0 --- /dev/null +++ b/LICENSES/LicenseRef-Nasa.txt @@ -0,0 +1 @@ +The picture https://images.nasa.gov/details/iss036e005944 is licensed under https://www.nasa.gov/multimedia/guidelines/index.html diff --git a/LICENSES/LicenseRef-NextcloudTrademarks.txt b/LICENSES/LicenseRef-NextcloudTrademarks.txt new file mode 100644 index 0000000..40322c8 --- /dev/null +++ b/LICENSES/LicenseRef-NextcloudTrademarks.txt @@ -0,0 +1,9 @@ +The Nextcloud marks +Nextcloud and the Nextcloud logo is a registered trademark of Nextcloud GmbH in Germany and/or other countries. +These guidelines cover the following marks pertaining both to the product names and the logo: “Nextcloud” +and the blue/white cloud logo with or without the word Nextcloud; the service “Nextcloud Enterprise”; +and our products: “Nextcloud Files”; “Nextcloud Groupware” and “Nextcloud Talk”. +This set of marks is collectively referred to as the “Nextcloud marks.” + +Use of Nextcloud logos and other marks is only permitted under the guidelines provided by the Nextcloud GmbH. +A copy can be found at https://discord.com/branding diff --git a/LICENSES/LicenseRef-RocketChat.txt b/LICENSES/LicenseRef-RocketChat.txt new file mode 100644 index 0000000..14282b8 --- /dev/null +++ b/LICENSES/LicenseRef-RocketChat.txt @@ -0,0 +1,7 @@ +The Rocket.Chat logo + +Read our brand guidelines at: https://docs.rocket.chat/guides/brand-and-visual-guidelines +Find more elements for your content at: https://drive.google.com/drive/folders/1gaRMmpX2iuc8x9x5szbqdDSfaArjb19e?usp=sharing +Find more icons at: https://drive.google.com/drive/folders/1m097stjSL7k8FSYpbKV3_gvu83sPfeE2?usp=sharing + +Rocket.Chat diff --git a/LICENSES/MIT.txt b/LICENSES/MIT.txt new file mode 100644 index 0000000..2071b23 --- /dev/null +++ b/LICENSES/MIT.txt @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..8d32b9d --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +# SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later + +# Makefile for building the project + +app_name=spreed + +project_dir=$(CURDIR)/../$(app_name) +build_dir=$(CURDIR)/build/artifacts +appstore_dir=$(build_dir)/appstore +source_dir=$(build_dir)/source +sign_dir=$(build_dir)/sign +package_name=$(app_name) +cert_dir=$(HOME)/.nextcloud/certificates +version+=main + +all: dev-setup build-production + +dev-setup: clean-dev npm-init build-dev + +production-setup: clean-dev npm-init build-production + +release: appstore create-tag + +build-dev: composer-install-dev build-js + +build-production: composer-install-production build-js-production + +composer-install-dev: + composer install + +composer-install-production: + composer install --no-dev --classmap-authoritative + +build-js: + npm run dev + +build-js-production: + npm run build + +watch-js: + npm run watch + +test: + npm run test + +lint: + npm run lint + +lint-fix: + npm run lint:fix + +npm-init: + npm ci + +npm-update: + npm update + +clean: + rm -rf js/* + rm -rf $(build_dir) + +clean-dev: clean + rm -rf node_modules + rm -rf vendor + +create-tag: + git tag -a v$(version) -m "Tagging the $(version) release." + git push origin v$(version) + +appstore: + rm -rf $(build_dir) + mkdir -p $(sign_dir) + rsync -a \ + --exclude=/build \ + --exclude=composer.patches.json \ + --exclude=docs \ + --exclude=.drone.jsonnet \ + --exclude=.drone.yml \ + --exclude=.editorconfig \ + --exclude=eslint.config.mjs \ + --exclude=.git \ + --exclude=.git-blame-ignore-revs \ + --exclude=.gitattributes \ + --exclude=.github \ + --exclude=.gitignore \ + --exclude=vitest.config.js \ + --exclude=.l10nignore \ + --exclude=mkdocs.yml \ + --exclude=Makefile \ + --exclude=node_modules \ + --exclude=.patches \ + --exclude=.php-cs-fixer.cache \ + --exclude=.php-cs-fixer.dist.php \ + --exclude=.php_cs.cache \ + --exclude=.php_cs.dist \ + --exclude=psalm.xml \ + --exclude=README.md \ + --exclude=.readthedocs.yaml \ + --exclude=/recording \ + --exclude=/rector.php \ + --exclude=/redocly.yaml \ + --exclude=/rspack.config.js \ + --exclude=/site \ + --exclude=/src \ + --exclude=.stylelintignore \ + --exclude=stylelint.config.js \ + --exclude=.tx \ + --exclude=tests \ + --exclude=tsconfig.json \ + --exclude=vendor/bamarni \ + --exclude=vendor/cweagans \ + --exclude=vendor/bin \ + --exclude=vendor-bin \ + --exclude=webpack.common.config.js \ + --exclude=webpack.config.js \ + $(project_dir)/ $(sign_dir)/$(app_name) + @if [ -f $(project_dir)/docs/changelogs/changelog-$(firstword $(subst ., ,$(version))).md ]; then \ + cp $(project_dir)/docs/changelogs/changelog-$(firstword $(subst ., ,$(version))).md $(sign_dir)/$(app_name)/CHANGELOG.md; \ + fi + @if [ -f $(cert_dir)/$(app_name).key ]; then \ + echo "Signing app files…"; \ + php ../../occ integrity:sign-app \ + --privateKey=$(cert_dir)/$(app_name).key\ + --certificate=$(cert_dir)/$(app_name).crt\ + --path=$(sign_dir)/$(app_name); \ + fi + tar -czf $(build_dir)/$(app_name).tar.gz \ + -C $(sign_dir) $(app_name) + @if [ -f $(cert_dir)/$(app_name).key ]; then \ + echo "Signing package…"; \ + openssl dgst -sha512 -sign $(cert_dir)/$(app_name).key $(build_dir)/$(app_name).tar.gz | openssl base64; \ + fi diff --git a/README.md b/README.md new file mode 100644 index 0000000..211a8c8 --- /dev/null +++ b/README.md @@ -0,0 +1,136 @@ + +# Nextcloud Talk + +[![REUSE status](https://api.reuse.software/badge/github.com/nextcloud/spreed)](https://api.reuse.software/info/github.com/nextcloud/spreed) + +**A video & audio conferencing app for Nextcloud** + +| Elevator | +|-------------------------------------------------------| +| [✨ Why is this so awesome?](#-why-is-this-so-awesome) | +| [📚 Documentation](#-documentation) | +| [🚧 Development Setup](#-development-setup) | + + +![](https://raw.githubusercontent.com/nextcloud/spreed/main/docs/call-in-action.jpg) + +## ✨ Why is this so awesome? + +* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants. +* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call. +* 🌐 **Federated chats** Chat with other Nextcloud users on their servers +* 💻 **Screen sharing!** Share your screen with the participants of your call. +* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more. +* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa. + +More in the works for the [coming versions](https://github.com/nextcloud/spreed/milestones/). + +If you have suggestions or problems, please [open an issue](https://github.com/nextcloud/spreed/issues) or contribute directly 🤓 + +--- + +## 📚 Documentation + +* **[👤 User system requirements](https://nextcloud-talk.readthedocs.io/en/latest/user-requirements/)** +* **[📙 User documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)** +* **[💻 Server system requirements](https://nextcloud-talk.readthedocs.io/en/latest/system-requirements/)** +* **[📗 Administration documentation](https://nextcloud-talk.readthedocs.io/en/latest/#administration-documentation)** +* **[🤖 Bots/Webhooks documentation](https://nextcloud-talk.readthedocs.io/en/latest/bots/)** +* **[⚙️ API documentation](https://nextcloud-talk.readthedocs.io/en/latest/#talk-api)** + +### 📦 Installing for Production + +Nextcloud Talk is really easy to install. You just need to enable the app from the [Nextcloud App Store](https://apps.nextcloud.com/apps/spreed) and everything will work out of the box. + +There are some scenarios (users behind strict firewalls / symmetric NATs) where a TURN server is needed. That's a bit more tricky to install. You can [find instructions in our documentation](https://nextcloud-talk.readthedocs.io/en/latest/TURN/) and the team behind the Nextcloud VM has developed a script that takes care of everything for you ([vm-talk.sh](https://github.com/nextcloud/vm/blob/master/apps/talk.sh)). The script is tested on the recent Ubuntu Server LTS. Please keep in mind that it's developed for the VM specifically and any issues should be reported in that repository, not here. + +Here's a short [video](https://youtu.be/KdTsWIy4eN0) on how it's done. + +--- + +## 🚧 Development Setup + +1. Simply clone this repository into the `apps` folder of your Nextcloud development instance. +2. Run `make dev-setup` to install the dependencies. +3. Run `make build-js`. +4. Then activate it through the apps management. 🎉 +5. To build the docs locally, install mkdocs locally: `apt install mkdocs mkdocs-bootstrap`. + +Also see our **[step by step guide](https://nextcloud-talk.readthedocs.io/en/latest/developer-setup/)** on how to set up a full development environment. + +### 🏎️ Faster frontend developing with HMR + +You can enable HMR (Hot module replacement) to avoid page reloads when working on the frontend: + +1. Install and enable [`hmr_enabler` app](https://github.com/nextcloud/hmr_enabler) +2. Run `npm run serve` +3. Open the normal Nextcloud server URL (not the URL given by above command) + +We are also available on [our public Talk team conversation](https://cloud.nextcloud.com/call/c7fz9qpr), if you want to join the discussion. + +### 🙈 Ignore code style updates in git blame + +```sh +git config blame.ignoreRevsFile .git-blame-ignore-revs +``` + +### 🌏 Testing federation locally + +When testing federated conversations locally, some additional steps might be needed, +to improve the behaviour and allowing the servers to talk to each others: + +1. Allow self-signed certificates + ```shell + occ config:system:set sharing.federation.allowSelfSignedCertificates --value true --type bool + occ security:certificates:import /path/to/the/nextcloud.crt + occ security:certificates + ``` +2. Allow local servers to be remote servers + ```shell + occ config:system:set allow_local_remote_servers --value true --type bool + ``` + +Additionally you can enable debug mode that will list local users as federated users options +allowing you to federate with accounts on the same instance. Federation will still work +and use the full federation experience and opposed to the federated files sharing **not** +create a local share instead. + +### 🪄 Useful tricks for testing video calls + +#### 👥 Joining a test call with multiple users + +* Send fake-stream (audio and video) in Firefox: + 1. Open `about:config` + 2. Search for `fake` + 3. Toggle `media.navigator.streams.fake` to **true** + 4. Set `media.navigator.audio.fake_frequency` to **60** for more pleasant sound experience +* Afterwards install the [Firefox Multi-Account Containers](https://addons.mozilla.org/en-US/firefox/addon/multi-account-containers/) addon +* Now you can create multiple account containers, log in with a different Nextcloud account on each of them and join the same call with multiple different users + +#### 📸 Modifying available media devices + +* Disable camera until reboot: `sudo modprobe -r uvcvideo` +* Re-enable camera: `sudo modprobe uvcvideo` + +### 🔃 Milestones and Branches + +#### Branches + +In the Talk app we have one branch per Nextcloud server version. `stable*` branches of the app should always work with the same branch of the Nextcloud server. +This is only off close to releases of the server, to allow easier finishing of features, so we don't have to backport them. + +#### Milestones + +* `v17.0.0` - *Numeric* milestones are settled and waiting for their release or some final polishing +* `💛 Next Patch (27)` - The **next patch** milestone is for issues/PR that go into the next Dot-Release for the given Nextcloud version (in the example 27 - e.g. 17.0.1) +* `💚 Next Major (28)` - The **next major** milestone is for issues/PR that go into the next feature release for the new Major Nextcloud version (as there are Patch releases for 27, this would be 28) +* `💔 Backlog` - The **backlog** milestone is assigned to all remaining issues + +You can always pick a task of any milestone, and we will help you to get it into the assigned milestone or also an earlier one if time permits. It's just a matter of having an overview and better visibility what we think should be worked on, but it's not exclusive. + +### 💙 Contribution Guidelines + +For more information please see the [guidelines for contributing](https://github.com/nextcloud/spreed/blob/main/.github/contributing.md) to this repository. diff --git a/REUSE.toml b/REUSE.toml new file mode 100644 index 0000000..962b0c0 --- /dev/null +++ b/REUSE.toml @@ -0,0 +1,204 @@ +# SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later +version = 1 +SPDX-PackageName = "talk" +SPDX-PackageSupplier = "Nextcloud " +SPDX-PackageDownloadLocation = "https://github.com/nextcloud/spreed/" + +[[annotations]] +path = ["l10n/**.js", "l10n/**.json"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + +[[annotations]] +path = ["js/**.js.map", "js/**.js"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + +[[annotations]] +path = ["openapi.json", "openapi-**.json", "src/types/openapi/**.ts"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2023 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "AGPL-3.0-or-later" + +[[annotations]] +path = [".github/CODEOWNERS", ".github/ISSUE_TEMPLATE/1_bug_report.md", ".github/ISSUE_TEMPLATE/2_feature_request.md", ".github/ISSUE_TEMPLATE/3_bot_list.yml", ".github/contributing.md", ".github/dependabot.yml", ".github/pull_request_template.md", ".github/workflows/*.patch"] +precedence = "aggregate" +SPDX-FileCopyrightText = "none" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "docs/**.md" +precedence = "aggregate" +SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "tests/integration/features/**/**.feature" +precedence = "aggregate" +SPDX-FileCopyrightText = "2016 Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "tests/integration/spreedcheats/calendars/**.txt" +precedence = "aggregate" +SPDX-FileCopyrightText = "none" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["package.json", "package-lock.json", ".git-blame-ignore-revs", "**/package.json", "**/package-lock.json", "composer.json", "composer.patches.json", "composer.lock", "**/composer.json", "**/composer.lock", ".gitignore", ".l10nignore", "psalm.xml", "tests/psalm-baseline.xml", "vendor-bin/**/composer.json", "vendor-bin/**/composer.lock", ".tx/config", "**/phpunit.xml", "tsconfig.json", "redocly.yaml"] +precedence = "aggregate" +SPDX-FileCopyrightText = "none" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["src/utils/media/effects/virtual-background/vendor/models/selfie_segmenter.tflite", "src/utils/media/effects/virtual-background/vendor/models/Model Card MediaPipe Selfie Segmentation.pdf", "src/utils/media/effects/virtual-background/vendor/README.md"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2019-2022 The MediaPipe Authors" +SPDX-License-Identifier = "Apache-2.0" + +[[annotations]] +path = ["img/app.svg", "img/app-dark.png", "img/app-dark.svg", "img/changelog.svg", "img/favicon.ico", "img/favicon.png", "img/favicon.svg", "img/favicon-mask.svg", "img/favicon-touch.png", "img/favicon-touch.svg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Nextcloud GmbH " +SPDX-License-Identifier = "LicenseRef-NextcloudTrademarks" + +[[annotations]] +path = ["img/bridge-bot.png", "img/bridge-services/irc.svg", "img/bridge-services/msteams.svg", "img/bridge-services/slack.svg", "img/bridge-services/steam.svg", "img/bridge-services/xmpp.svg", "img/icon-contacts-white.svg", "img/icon-conversation-event-bright.svg", "img/icon-conversation-event-dark.svg", "img/icon-conversation-federation-bright.svg", "img/icon-conversation-federation-dark.svg", "img/icon-conversation-group-bright.svg", "img/icon-conversation-group-dark.svg", "img/icon-conversation-mail-bright.svg", "img/icon-conversation-mail-dark.svg", "img/icon-conversation-password-bright.svg", "img/icon-conversation-password-dark.svg", "img/icon-conversation-phone-bright.svg", "img/icon-conversation-phone-dark.svg", "img/icon-conversation-public-bright.svg", "img/icon-conversation-public-dark.svg", "img/icon-conversation-text-bright.svg", "img/icon-conversation-text-dark.svg", "img/icon-conversation-user-bright.svg", "img/icon-conversation-user-dark.svg", "img/icon-event-white.svg", "img/icon-mail-white.svg", "img/icon-password-white.svg", "img/icon-phone-white.svg", "img/icon-public-white.svg", "img/icon-team-white.svg", "img/icon-text-white.svg", "img/icon-user-white.svg", "img/phone.png", "img/material-icons/*.svg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2018-2025 Google LLC" +SPDX-License-Identifier = "Apache-2.0" + +[[annotations]] +path = "img/dashboard/**.png" +precedence = "aggregate" +SPDX-FileCopyrightText = "Nextcloud GmbH " +SPDX-License-Identifier = "LicenseRef-NextcloudTrademarks" + +[[annotations]] +path = "img/emojis/**.gif" +precedence = "aggregate" +SPDX-FileCopyrightText = "Google LLC" +SPDX-License-Identifier = "CC-BY-4.0" + +[[annotations]] +path = "img/bridge-services/discord.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Discord Inc." +SPDX-License-Identifier = "LicenseRef-Discord" + +[[annotations]] +path = "img/bridge-services/matrix.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Matrix.org" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/bridge-services/mattermost.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Mattermost, Inc" +SPDX-License-Identifier = "LicenseRef-Mattermost" + +[[annotations]] +path = "img/bridge-services/rocketchat.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Mattermost, Inc" +SPDX-License-Identifier = "LicenseRef-RocketChat" + +[[annotations]] +path = "img/bridge-services/telegram.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Telegram" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/bridge-services/zulip.svg" +precedence = "aggregate" +SPDX-FileCopyrightText = "The Zulip team" +SPDX-License-Identifier = "MIT" + +[[annotations]] +path = ["docs/screenshotplaceholders/placeholder-1.jpeg", "docs/screenshotplaceholders/placeholder-2.jpeg", "docs/screenshotplaceholders/placeholder-4.jpeg", "docs/screenshotplaceholders/placeholder-5.jpeg", "docs/screenshotplaceholders/placeholder-7.jpeg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Nextcloud GmbH and Nextcloud contributors" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "docs/screenshotplaceholders/placeholder-0.jpeg" +precedence = "aggregate" +SPDX-FileCopyrightText = "2021 Mart Production" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "docs/screenshotplaceholders/placeholder-3.jpeg" +precedence = "aggregate" +SPDX-FileCopyrightText = "2019 Sound On" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["docs/screenshotplaceholders/placeholder-6.jpeg", "docs/screenshotplaceholders/placeholder-8.jpeg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2021 Antoni Shkraba" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["img/join_call.flac", "img/join_call.ogg", "img/leave_call.flac", "img/leave_call.ogg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "Marco Ambrosini " +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = ["img/LibremPhoneCall.flac", "img/LibremPhoneCall.ogg"] +precedence = "aggregate" +SPDX-FileCopyrightText = "2017 Feandesign https://soundcloud.com/feandesign" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/backgrounds/1_office.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Breather, https://stocksnap.io/author/746" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/backgrounds/2_home.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Naomi Hébert, https://stocksnap.io/author/40931" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/backgrounds/3_abstract.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "HD Wallpapers, https://stocksnap.io/author/hdwallpapers" +SPDX-License-Identifier = "CC0-1.0" + +[[annotations]] +path = "img/backgrounds/4_beach.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Flo Dahm, https://stocksnap.io/author/flodahm" +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "img/backgrounds/5_park.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Basile Morin, https://commons.wikimedia.org/wiki/User:Basile_Morin" +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "img/backgrounds/6_theater.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Pietro Tessarin" +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "img/backgrounds/7_library.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Diliff, https://commons.wikimedia.org/wiki/User:Diliff" +SPDX-License-Identifier = "CC-BY-SA-4.0" + +[[annotations]] +path = "img/backgrounds/8_space_station.jpg" +precedence = "aggregate" +SPDX-FileCopyrightText = "Karen Nyberg" +SPDX-License-Identifier = "LicenseRef-Nasa" diff --git a/appinfo/info.xml b/appinfo/info.xml new file mode 100644 index 0000000..4c5038c --- /dev/null +++ b/appinfo/info.xml @@ -0,0 +1,169 @@ + + + + spreed + Talk + + + + 22.0.12 + agpl + + Anna Larch + Daniel Calviño Sánchez + Dorra Jaouad + Grigorii Shartsev + Ivan Sein + Joas Schilling + Julius Linus + Maksim Sukharev + Marcel Hibbe + Marcel Müller + Sowjanya Kota + + Talk + + + + + + + + https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html + https://nextcloud-talk.readthedocs.io/en/latest/#administration-documentation + https://nextcloud-talk.readthedocs.io/en/latest/#developer-documentation + + + multimedia + social + workflow + + https://github.com/nextcloud/spreed + https://help.nextcloud.com/c/support/talk/52 + https://github.com/nextcloud/spreed/issues + https://github.com/nextcloud/spreed.git + + https://raw.githubusercontent.com/nextcloud/spreed/main/docs/call-in-action.jpg + https://raw.githubusercontent.com/nextcloud/spreed/main/docs/chat.png + https://raw.githubusercontent.com/nextcloud/spreed/main/docs/file-darg-and-drop.png + https://raw.githubusercontent.com/nextcloud/spreed/main/docs/screensharing.png + https://raw.githubusercontent.com/nextcloud/spreed/main/docs/video-verfication.png + + + + + + + OCA\Talk\BackgroundJob\CheckCertificates + OCA\Talk\BackgroundJob\CheckHostedSignalingServer + OCA\Talk\BackgroundJob\CheckMatterbridges + OCA\Talk\BackgroundJob\ExpireChatMessages + OCA\Talk\BackgroundJob\ExpireObjectRooms + OCA\Talk\BackgroundJob\ExpireSignalingMessage + OCA\Talk\BackgroundJob\LockInactiveRooms + OCA\Talk\BackgroundJob\MaximumCallDuration + OCA\Talk\BackgroundJob\Reminder + OCA\Talk\BackgroundJob\RemoveEmptyRooms + OCA\Talk\BackgroundJob\ResetAssignedSignalingServer + OCA\Talk\BackgroundJob\RetryNotificationsJob + + + + + OCA\Talk\Migration\FixNamespaceInDatabaseTables + + + OCA\Talk\Migration\ClearResourceAccessCache + OCA\Talk\Migration\CacheUserDisplayNames + OCA\Talk\Migration\FixLastReadMessageZero + OCA\Talk\Migration\RegenerateSignalingKeys + + + + + OCA\Talk\Command\Bot\Install + OCA\Talk\Command\Bot\Create + OCA\Talk\Command\Bot\ListBots + OCA\Talk\Command\Bot\Remove + OCA\Talk\Command\Bot\State + OCA\Talk\Command\Bot\Setup + OCA\Talk\Command\Bot\Uninstall + + OCA\Talk\Command\Developer\AgeChatMessages + OCA\Talk\Command\Developer\UpdateDocs + + OCA\Talk\Command\Monitor\Calls + OCA\Talk\Command\Monitor\HasActiveCalls + OCA\Talk\Command\Monitor\Room + + OCA\Talk\Command\PhoneNumber\AddPhoneNumber + OCA\Talk\Command\PhoneNumber\FindPhoneNumber + OCA\Talk\Command\PhoneNumber\ImportPhoneNumbers + OCA\Talk\Command\PhoneNumber\RemoveUser + OCA\Talk\Command\PhoneNumber\RemovePhoneNumber + + OCA\Talk\Command\Recording\Consent + + OCA\Talk\Command\Room\Add + OCA\Talk\Command\Room\Create + OCA\Talk\Command\Room\Delete + OCA\Talk\Command\Room\Demote + OCA\Talk\Command\Room\Promote + OCA\Talk\Command\Room\Remove + OCA\Talk\Command\Room\Update + + OCA\Talk\Command\Signaling\Add + OCA\Talk\Command\Signaling\Delete + OCA\Talk\Command\Signaling\ListCommand + OCA\Talk\Command\Signaling\VerifyKeys + + OCA\Talk\Command\Stun\Add + OCA\Talk\Command\Stun\Delete + OCA\Talk\Command\Stun\ListCommand + + OCA\Talk\Command\Turn\Add + OCA\Talk\Command\Turn\Delete + OCA\Talk\Command\Turn\ListCommand + + OCA\Talk\Command\User\Remove + OCA\Talk\Command\User\TransferOwnership + + + + OCA\Talk\Settings\Admin\AdminSettings + OCA\Talk\Settings\Admin\Section + + + + + OCA\Talk\Activity\Setting + + + + OCA\Talk\Activity\Provider\Invitation + OCA\Talk\Activity\Provider\Call + + + + + OCA\Talk\ContactsMenu\Providers\CallProvider + + + + + OCA\Talk\Collaboration\Collaborators\RoomPlugin + + + diff --git a/appinfo/routes.php b/appinfo/routes.php new file mode 100644 index 0000000..19a0d21 --- /dev/null +++ b/appinfo/routes.php @@ -0,0 +1,33 @@ + '(v1)', + 'token' => '^[a-z0-9]{4,30}$', +]; +$requirementsWithSize = [ + 'apiVersion' => '(v1)', + 'token' => '^[a-z0-9]{4,30}$', + 'size' => '(64|512)', +]; +$requirementsNewWithSize = [ + 'apiVersion' => '(v1)', + 'size' => '(64|512)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\AvatarController::uploadAvatar() */ + ['name' => 'Avatar#uploadAvatar', 'url' => '/api/{apiVersion}/room/{token}/avatar', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\AvatarController::emojiAvatar() */ + ['name' => 'Avatar#emojiAvatar', 'url' => '/api/{apiVersion}/room/{token}/avatar/emoji', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\AvatarController::getAvatar() */ + ['name' => 'Avatar#getAvatar', 'url' => '/api/{apiVersion}/room/{token}/avatar', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\AvatarController::getAvatarDark() */ + ['name' => 'Avatar#getAvatarDark', 'url' => '/api/{apiVersion}/room/{token}/avatar/dark', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\AvatarController::deleteAvatar() */ + ['name' => 'Avatar#deleteAvatar', 'url' => '/api/{apiVersion}/room/{token}/avatar', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\AvatarController::getUserProxyAvatarWithoutRoom() */ + ['name' => 'Avatar#getUserProxyAvatarWithoutRoom', 'url' => '/api/{apiVersion}/proxy/new/user-avatar/{size}', 'verb' => 'GET', 'requirements' => $requirementsNewWithSize], + /** @see \OCA\Talk\Controller\AvatarController::getUserProxyAvatarDarkWithoutRoom() */ + ['name' => 'Avatar#getUserProxyAvatarDarkWithoutRoom', 'url' => '/api/{apiVersion}/proxy/new/user-avatar/{size}/dark', 'verb' => 'GET', 'requirements' => $requirementsNewWithSize], + /** @see \OCA\Talk\Controller\AvatarController::getUserProxyAvatar() */ + ['name' => 'Avatar#getUserProxyAvatar', 'url' => '/api/{apiVersion}/proxy/{token}/user-avatar/{size}', 'verb' => 'GET', 'requirements' => $requirementsWithSize], + /** @see \OCA\Talk\Controller\AvatarController::getUserProxyAvatarDark() */ + ['name' => 'Avatar#getUserProxyAvatarDark', 'url' => '/api/{apiVersion}/proxy/{token}/user-avatar/{size}/dark', 'verb' => 'GET', 'requirements' => $requirementsWithSize], + ], +]; diff --git a/appinfo/routes/routesBanController.php b/appinfo/routes/routesBanController.php new file mode 100644 index 0000000..cdda427 --- /dev/null +++ b/appinfo/routes/routesBanController.php @@ -0,0 +1,22 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\BanController::banActor() */ + ['name' => 'Ban#banActor', 'url' => '/api/{apiVersion}/ban/{token}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BanController::listBans() */ + ['name' => 'Ban#listBans', 'url' => '/api/{apiVersion}/ban/{token}', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BanController::unbanActor() */ + ['name' => 'Ban#unbanActor', 'url' => '/api/{apiVersion}/ban/{token}/{banId}', 'verb' => 'DELETE', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesBotController.php b/appinfo/routes/routesBotController.php new file mode 100644 index 0000000..c008f8e --- /dev/null +++ b/appinfo/routes/routesBotController.php @@ -0,0 +1,47 @@ + '(v1)', +]; + +$requirementsWithToken = [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +$requirementsWithMessageId = [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', +]; + +$requirementsWithBotId = [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'botId' => '[0-9]+', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\BotController::sendMessage() */ + ['name' => 'Bot#sendMessage', 'url' => '/api/{apiVersion}/bot/{token}/message', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\BotController::react() */ + ['name' => 'Bot#react', 'url' => '/api/{apiVersion}/bot/{token}/reaction/{messageId}', 'verb' => 'POST', 'requirements' => $requirementsWithMessageId], + /** @see \OCA\Talk\Controller\BotController::deleteReaction() */ + ['name' => 'Bot#deleteReaction', 'url' => '/api/{apiVersion}/bot/{token}/reaction/{messageId}', 'verb' => 'DELETE', 'requirements' => $requirementsWithMessageId], + /** @see \OCA\Talk\Controller\BotController::adminListBots() */ + ['name' => 'Bot#adminListBots', 'url' => '/api/{apiVersion}/bot/admin', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BotController::listBots() */ + ['name' => 'Bot#listBots', 'url' => '/api/{apiVersion}/bot/{token}', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\BotController::enableBot() */ + ['name' => 'Bot#enableBot', 'url' => '/api/{apiVersion}/bot/{token}/{botId}', 'verb' => 'POST', 'requirements' => $requirementsWithBotId], + /** @see \OCA\Talk\Controller\BotController::disableBot() */ + ['name' => 'Bot#disableBot', 'url' => '/api/{apiVersion}/bot/{token}/{botId}', 'verb' => 'DELETE', 'requirements' => $requirementsWithBotId], + ], +]; diff --git a/appinfo/routes/routesBreakoutRoomController.php b/appinfo/routes/routesBreakoutRoomController.php new file mode 100644 index 0000000..94bc9ff --- /dev/null +++ b/appinfo/routes/routesBreakoutRoomController.php @@ -0,0 +1,35 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\BreakoutRoomController::configureBreakoutRooms() */ + ['name' => 'BreakoutRoom#configureBreakoutRooms', 'url' => '/api/{apiVersion}/breakout-rooms/{token}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::removeBreakoutRooms() */ + ['name' => 'BreakoutRoom#removeBreakoutRooms', 'url' => '/api/{apiVersion}/breakout-rooms/{token}', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::broadcastChatMessage() */ + ['name' => 'BreakoutRoom#broadcastChatMessage', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/broadcast', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::applyAttendeeMap() */ + ['name' => 'BreakoutRoom#applyAttendeeMap', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/attendees', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::requestAssistance() */ + ['name' => 'BreakoutRoom#requestAssistance', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/request-assistance', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::resetRequestForAssistance() */ + ['name' => 'BreakoutRoom#resetRequestForAssistance', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/request-assistance', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::startBreakoutRooms() */ + ['name' => 'BreakoutRoom#startBreakoutRooms', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/rooms', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::stopBreakoutRooms() */ + ['name' => 'BreakoutRoom#stopBreakoutRooms', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/rooms', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\BreakoutRoomController::switchBreakoutRoom() */ + ['name' => 'BreakoutRoom#switchBreakoutRoom', 'url' => '/api/{apiVersion}/breakout-rooms/{token}/switch', 'verb' => 'POST', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesCalendarIntegrationController.php b/appinfo/routes/routesCalendarIntegrationController.php new file mode 100644 index 0000000..e506236 --- /dev/null +++ b/appinfo/routes/routesCalendarIntegrationController.php @@ -0,0 +1,25 @@ + '(v4)', +]; + +$requirementsWithToken = [ + 'apiVersion' => '(v4)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\CalendarIntegrationController::getDashboardEvents() */ + ['name' => 'CalendarIntegration#getDashboardEvents', 'url' => '/api/{apiVersion}/dashboard/events', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CalendarIntegrationController::getMutualEvents() */ + ['name' => 'CalendarIntegration#getMutualEvents', 'url' => '/api/{apiVersion}/room/{token}/mutual-events', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + ], +]; diff --git a/appinfo/routes/routesCallController.php b/appinfo/routes/routesCallController.php new file mode 100644 index 0000000..2a878c7 --- /dev/null +++ b/appinfo/routes/routesCallController.php @@ -0,0 +1,39 @@ + '(v4)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\CallController::getPeersForCall() */ + ['name' => 'Call#getPeersForCall', 'url' => '/api/{apiVersion}/call/{token}', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallNotificationController::state() */ + ['name' => 'CallNotification#state', 'url' => '/api/{apiVersion}/call/{token}/notification-state', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::downloadParticipantsForCall() */ + ['name' => 'Call#downloadParticipantsForCall', 'url' => '/api/{apiVersion}/call/{token}/download', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::joinCall() */ + ['name' => 'Call#joinCall', 'url' => '/api/{apiVersion}/call/{token}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::joinFederatedCall() */ + ['name' => 'Call#joinFederatedCall', 'url' => '/api/{apiVersion}/call/{token}/federation', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::ringAttendee() */ + ['name' => 'Call#ringAttendee', 'url' => '/api/{apiVersion}/call/{token}/ring/{attendeeId}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::sipDialOut() */ + ['name' => 'Call#sipDialOut', 'url' => '/api/{apiVersion}/call/{token}/dialout/{attendeeId}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::updateCallFlags() */ + ['name' => 'Call#updateCallFlags', 'url' => '/api/{apiVersion}/call/{token}', 'verb' => 'PUT', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::updateFederatedCallFlags() */ + ['name' => 'Call#updateFederatedCallFlags', 'url' => '/api/{apiVersion}/call/{token}/federation', 'verb' => 'PUT', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::leaveCall() */ + ['name' => 'Call#leaveCall', 'url' => '/api/{apiVersion}/call/{token}', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\CallController::leaveFederatedCall() */ + ['name' => 'Call#leaveFederatedCall', 'url' => '/api/{apiVersion}/call/{token}/federation', 'verb' => 'DELETE', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesCertificateController.php b/appinfo/routes/routesCertificateController.php new file mode 100644 index 0000000..0f67d18 --- /dev/null +++ b/appinfo/routes/routesCertificateController.php @@ -0,0 +1,18 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\CertificateController::getCertificateExpiration() */ + ['name' => 'Certificate#getCertificateExpiration', 'url' => '/api/{apiVersion}/certificate/expiration', 'verb' => 'GET', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesFederationController.php b/appinfo/routes/routesFederationController.php new file mode 100644 index 0000000..967e603 --- /dev/null +++ b/appinfo/routes/routesFederationController.php @@ -0,0 +1,22 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\FederationController::acceptShare() */ + ['name' => 'Federation#acceptShare', 'url' => 'api/{apiVersion}/federation/invitation/{id}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\FederationController::rejectShare() */ + ['name' => 'Federation#rejectShare', 'url' => 'api/{apiVersion}/federation/invitation/{id}', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\FederationController::getShares() */ + ['name' => 'Federation#getShares', 'url' => 'api/{apiVersion}/federation/invitation', 'verb' => 'GET', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesFilesIntegrationController.php b/appinfo/routes/routesFilesIntegrationController.php new file mode 100644 index 0000000..e60c90f --- /dev/null +++ b/appinfo/routes/routesFilesIntegrationController.php @@ -0,0 +1,25 @@ + '(v1)', + 'fileId' => '.+', +]; +$requirementsShare = [ + 'apiVersion' => '(v1)', + 'shareToken' => '.+', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\FilesIntegrationController::getRoomByFileId() */ + ['name' => 'FilesIntegration#getRoomByFileId', 'url' => '/api/{apiVersion}/file/{fileId}', 'verb' => 'GET', 'requirements' => $requirementsFile], + /** @see \OCA\Talk\Controller\FilesIntegrationController::getRoomByShareToken() */ + ['name' => 'FilesIntegration#getRoomByShareToken', 'url' => '/api/{apiVersion}/publicshare/{shareToken}', 'verb' => 'GET', 'requirements' => $requirementsShare], + ], +]; diff --git a/appinfo/routes/routesGuestController.php b/appinfo/routes/routesGuestController.php new file mode 100644 index 0000000..ea0c1ee --- /dev/null +++ b/appinfo/routes/routesGuestController.php @@ -0,0 +1,19 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\GuestController::setDisplayName() */ + ['name' => 'Guest#setDisplayName', 'url' => '/api/{apiVersion}/guest/{token}/name', 'verb' => 'POST', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesHostedSignalingServerController.php b/appinfo/routes/routesHostedSignalingServerController.php new file mode 100644 index 0000000..eff36ce --- /dev/null +++ b/appinfo/routes/routesHostedSignalingServerController.php @@ -0,0 +1,22 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\HostedSignalingServerController::requestTrial() */ + ['name' => 'HostedSignalingServer#requestTrial', 'url' => '/api/{apiVersion}/hostedsignalingserver/requesttrial', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\HostedSignalingServerController::auth() */ + ['name' => 'HostedSignalingServer#auth', 'url' => '/api/{apiVersion}/hostedsignalingserver/auth', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\HostedSignalingServerController::deleteAccount() */ + ['name' => 'HostedSignalingServer#deleteAccount', 'url' => '/api/{apiVersion}/hostedsignalingserver/delete', 'verb' => 'DELETE', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesMatterbridgeController.php b/appinfo/routes/routesMatterbridgeController.php new file mode 100644 index 0000000..2c186db --- /dev/null +++ b/appinfo/routes/routesMatterbridgeController.php @@ -0,0 +1,25 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\MatterbridgeController::getBridgeOfRoom() */ + ['name' => 'Matterbridge#getBridgeOfRoom', 'url' => '/api/{apiVersion}/bridge/{token}', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\MatterbridgeController::getBridgeProcessState() */ + ['name' => 'Matterbridge#getBridgeProcessState', 'url' => '/api/{apiVersion}/bridge/{token}/process', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\MatterbridgeController::editBridgeOfRoom() */ + ['name' => 'Matterbridge#editBridgeOfRoom', 'url' => '/api/{apiVersion}/bridge/{token}', 'verb' => 'PUT', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\MatterbridgeController::deleteBridgeOfRoom() */ + ['name' => 'Matterbridge#deleteBridgeOfRoom', 'url' => '/api/{apiVersion}/bridge/{token}', 'verb' => 'DELETE', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesMatterbridgeSettingsController.php b/appinfo/routes/routesMatterbridgeSettingsController.php new file mode 100644 index 0000000..a947c70 --- /dev/null +++ b/appinfo/routes/routesMatterbridgeSettingsController.php @@ -0,0 +1,20 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\MatterbridgeSettingsController::stopAllBridges() */ + ['name' => 'MatterbridgeSettings#stopAllBridges', 'url' => '/api/{apiVersion}/bridge', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\MatterbridgeSettingsController::getMatterbridgeVersion() */ + ['name' => 'MatterbridgeSettings#getMatterbridgeVersion', 'url' => '/api/{apiVersion}/bridge/version', 'verb' => 'GET', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesPageController.php b/appinfo/routes/routesPageController.php new file mode 100644 index 0000000..81754e9 --- /dev/null +++ b/appinfo/routes/routesPageController.php @@ -0,0 +1,28 @@ + '[a-z0-9]{4,30}', +]; + +return [ + 'routes' => [ + /** @see \OCA\Talk\Controller\PageController::index() */ + ['name' => 'Page#index', 'url' => '/', 'verb' => 'GET'], + /** @see \OCA\Talk\Controller\PageController::notFound() */ + ['name' => 'Page#notFound', 'url' => '/not-found', 'verb' => 'GET'], + /** @see \OCA\Talk\Controller\PageController::duplicateSession() */ + ['name' => 'Page#duplicateSession', 'url' => '/duplicate-session', 'verb' => 'GET'], + /** @see \OCA\Talk\Controller\PageController::showCall() */ + ['name' => 'Page#showCall', 'url' => '/call/{token}', 'root' => '', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\PageController::authenticatePassword() */ + ['name' => 'Page#authenticatePassword', 'url' => '/call/{token}', 'root' => '', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\PageController::recording() */ + ['name' => 'Page#recording', 'url' => '/call/{token}/recording', 'root' => '', 'verb' => 'GET', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesPollController.php b/appinfo/routes/routesPollController.php new file mode 100644 index 0000000..bcb8947 --- /dev/null +++ b/appinfo/routes/routesPollController.php @@ -0,0 +1,35 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +$requirementsWithPollId = [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'pollId' => '\d+', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\PollController::createPoll() */ + ['name' => 'Poll#createPoll', 'url' => '/api/{apiVersion}/poll/{token}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\PollController::updateDraftPoll() */ + ['name' => 'Poll#updateDraftPoll', 'url' => '/api/{apiVersion}/poll/{token}/draft/{pollId}', 'verb' => 'POST', 'requirements' => $requirementsWithPollId], + /** @see \OCA\Talk\Controller\PollController::getAllDraftPolls() */ + ['name' => 'Poll#getAllDraftPolls', 'url' => '/api/{apiVersion}/poll/{token}/drafts', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\PollController::showPoll() */ + ['name' => 'Poll#showPoll', 'url' => '/api/{apiVersion}/poll/{token}/{pollId}', 'verb' => 'GET', 'requirements' => $requirementsWithPollId], + /** @see \OCA\Talk\Controller\PollController::votePoll() */ + ['name' => 'Poll#votePoll', 'url' => '/api/{apiVersion}/poll/{token}/{pollId}', 'verb' => 'POST', 'requirements' => $requirementsWithPollId], + /** @see \OCA\Talk\Controller\PollController::closePoll() */ + ['name' => 'Poll#closePoll', 'url' => '/api/{apiVersion}/poll/{token}/{pollId}', 'verb' => 'DELETE', 'requirements' => $requirementsWithPollId], + ], +]; diff --git a/appinfo/routes/routesPublicShareAuthController.php b/appinfo/routes/routesPublicShareAuthController.php new file mode 100644 index 0000000..c84f100 --- /dev/null +++ b/appinfo/routes/routesPublicShareAuthController.php @@ -0,0 +1,18 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\PublicShareAuthController::createRoom() */ + ['name' => 'PublicShareAuth#createRoom', 'url' => '/api/{apiVersion}/publicshareauth', 'verb' => 'POST', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesReactionController.php b/appinfo/routes/routesReactionController.php new file mode 100644 index 0000000..b9c0e3d --- /dev/null +++ b/appinfo/routes/routesReactionController.php @@ -0,0 +1,24 @@ + '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\ReactionController::react() */ + ['name' => 'Reaction#react', 'url' => '/api/{apiVersion}/reaction/{token}/{messageId}', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\ReactionController::delete() */ + ['name' => 'Reaction#delete', 'url' => '/api/{apiVersion}/reaction/{token}/{messageId}', 'verb' => 'DELETE', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\ReactionController::getReactions() */ + ['name' => 'Reaction#getReactions', 'url' => '/api/{apiVersion}/reaction/{token}/{messageId}', 'verb' => 'GET', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesRecordingController.php b/appinfo/routes/routesRecordingController.php new file mode 100644 index 0000000..7826d66 --- /dev/null +++ b/appinfo/routes/routesRecordingController.php @@ -0,0 +1,37 @@ + '(v1)', +]; + +$requirementsWithToken = [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\RecordingController::getWelcomeMessage() */ + ['name' => 'Recording#getWelcomeMessage', 'url' => '/api/{apiVersion}/recording/welcome/{serverId}', 'verb' => 'GET', 'requirements' => array_merge($requirements, [ + 'serverId' => '\d+', + ])], + /** @see \OCA\Talk\Controller\RecordingController::backend() */ + ['name' => 'Recording#backend', 'url' => '/api/{apiVersion}/recording/backend', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RecordingController::start() */ + ['name' => 'Recording#start', 'url' => '/api/{apiVersion}/recording/{token}', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RecordingController::stop() */ + ['name' => 'Recording#stop', 'url' => '/api/{apiVersion}/recording/{token}', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RecordingController::store() */ + ['name' => 'Recording#store', 'url' => '/api/{apiVersion}/recording/{token}/store', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RecordingController::notificationDismiss() */ + ['name' => 'Recording#notificationDismiss', 'url' => '/api/{apiVersion}/recording/{token}/notification', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RecordingController::shareToChat() */ + ['name' => 'Recording#shareToChat', 'url' => '/api/{apiVersion}/recording/{token}/share-chat', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + ], +]; diff --git a/appinfo/routes/routesRoomController.php b/appinfo/routes/routesRoomController.php new file mode 100644 index 0000000..196281c --- /dev/null +++ b/appinfo/routes/routesRoomController.php @@ -0,0 +1,135 @@ + '(v4)', +]; + +$requirementsWithToken = [ + 'apiVersion' => '(v4)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\RoomController::getRooms() */ + ['name' => 'Room#getRooms', 'url' => '/api/{apiVersion}/room', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RoomController::getListedRooms() */ + ['name' => 'Room#getListedRooms', 'url' => '/api/{apiVersion}/listed-room', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RoomController::createRoom() */ + ['name' => 'Room#createRoom', 'url' => '/api/{apiVersion}/room', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RoomController::getNoteToSelfConversation() */ + ['name' => 'Room#getNoteToSelfConversation', 'url' => '/api/{apiVersion}/room/note-to-self', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RoomController::getSingleRoom() */ + ['name' => 'Room#getSingleRoom', 'url' => '/api/{apiVersion}/room/{token}', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::getBreakoutRooms() */ + ['name' => 'Room#getBreakoutRooms', 'url' => '/api/{apiVersion}/room/{token}/breakout-rooms', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::renameRoom() */ + ['name' => 'Room#renameRoom', 'url' => '/api/{apiVersion}/room/{token}', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::deleteRoom() */ + ['name' => 'Room#deleteRoom', 'url' => '/api/{apiVersion}/room/{token}', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::unbindRoomFromObject() */ + ['name' => 'Room#unbindRoomFromObject', 'url' => '/api/{apiVersion}/room/{token}/object', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::makePublic() */ + ['name' => 'Room#makePublic', 'url' => '/api/{apiVersion}/room/{token}/public', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::makePrivate() */ + ['name' => 'Room#makePrivate', 'url' => '/api/{apiVersion}/room/{token}/public', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setDescription() */ + ['name' => 'Room#setDescription', 'url' => '/api/{apiVersion}/room/{token}/description', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setReadOnly() */ + ['name' => 'Room#setReadOnly', 'url' => '/api/{apiVersion}/room/{token}/read-only', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setListable() */ + ['name' => 'Room#setListable', 'url' => '/api/{apiVersion}/room/{token}/listable', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setPassword() */ + ['name' => 'Room#setPassword', 'url' => '/api/{apiVersion}/room/{token}/password', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setPermissions() */ + ['name' => 'Room#setPermissions', 'url' => '/api/{apiVersion}/room/{token}/permissions/{mode}', 'verb' => 'PUT', 'requirements' => array_merge($requirementsWithToken, [ + 'mode' => '(call|default)', + ])], + /** @see \OCA\Talk\Controller\RoomController::getParticipants() */ + ['name' => 'Room#getParticipants', 'url' => '/api/{apiVersion}/room/{token}/participants', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::getBreakoutRoomParticipants() */ + ['name' => 'Room#getBreakoutRoomParticipants', 'url' => '/api/{apiVersion}/room/{token}/breakout-rooms/participants', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::addParticipantToRoom() */ + ['name' => 'Room#addParticipantToRoom', 'url' => '/api/{apiVersion}/room/{token}/participants', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::removeSelfFromRoom() */ + ['name' => 'Room#removeSelfFromRoom', 'url' => '/api/{apiVersion}/room/{token}/participants/self', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::removeAttendeeFromRoom() */ + ['name' => 'Room#removeAttendeeFromRoom', 'url' => '/api/{apiVersion}/room/{token}/attendees', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setAttendeePermissions() */ + ['name' => 'Room#setAttendeePermissions', 'url' => '/api/{apiVersion}/room/{token}/attendees/permissions', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setAllAttendeesPermissions() */ + ['name' => 'Room#setAllAttendeesPermissions', 'url' => '/api/{apiVersion}/room/{token}/attendees/permissions/all', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::joinRoom() */ + ['name' => 'Room#joinRoom', 'url' => '/api/{apiVersion}/room/{token}/participants/active', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::joinFederatedRoom() */ + ['name' => 'Room#joinFederatedRoom', 'url' => '/api/{apiVersion}/room/{token}/federation/active', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::resendInvitations() */ + ['name' => 'Room#resendInvitations', 'url' => '/api/{apiVersion}/room/{token}/participants/resend-invitations', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::leaveRoom() */ + ['name' => 'Room#leaveRoom', 'url' => '/api/{apiVersion}/room/{token}/participants/active', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::leaveFederatedRoom() */ + ['name' => 'Room#leaveFederatedRoom', 'url' => '/api/{apiVersion}/room/{token}/federation/active', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setSessionState() */ + ['name' => 'Room#setSessionState', 'url' => '/api/{apiVersion}/room/{token}/participants/state', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::promoteModerator() */ + ['name' => 'Room#promoteModerator', 'url' => '/api/{apiVersion}/room/{token}/moderators', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::demoteModerator() */ + ['name' => 'Room#demoteModerator', 'url' => '/api/{apiVersion}/room/{token}/moderators', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::addToFavorites() */ + ['name' => 'Room#addToFavorites', 'url' => '/api/{apiVersion}/room/{token}/favorite', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::removeFromFavorites() */ + ['name' => 'Room#removeFromFavorites', 'url' => '/api/{apiVersion}/room/{token}/favorite', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::markConversationAsImportant() */ + ['name' => 'Room#markConversationAsImportant', 'url' => '/api/{apiVersion}/room/{token}/important', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::markConversationAsUnimportant() */ + ['name' => 'Room#markConversationAsUnimportant', 'url' => '/api/{apiVersion}/room/{token}/important', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::markConversationAsSensitive() */ + ['name' => 'Room#markConversationAsSensitive', 'url' => '/api/{apiVersion}/room/{token}/sensitive', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::markConversationAsInsensitive() */ + ['name' => 'Room#markConversationAsInsensitive', 'url' => '/api/{apiVersion}/room/{token}/sensitive', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::verifyDialInPin() */ + ['name' => 'Room#verifyDialInPin', 'url' => '/api/{apiVersion}/room/{token}/pin/{pin}', 'verb' => 'GET', 'requirements' => array_merge($requirementsWithToken, [ + 'pin' => '\d{7,32}', + ]), 'postfix' => 'deprecated'], + /** @see \OCA\Talk\Controller\RoomController::verifyDialInPin() */ + ['name' => 'Room#verifyDialInPin', 'url' => '/api/{apiVersion}/room/{token}/verify-dialin', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::verifyDialOutNumber() */ + ['name' => 'Room#verifyDialOutNumber', 'url' => '/api/{apiVersion}/room/{token}/verify-dialout', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::directDialIn() */ + ['name' => 'Room#directDialIn', 'url' => '/api/{apiVersion}/room/direct-dial-in', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\RoomController::createGuestByDialIn() */ + ['name' => 'Room#createGuestByDialIn', 'url' => '/api/{apiVersion}/room/{token}/open-dial-in', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::rejectedDialOutRequest() */ + ['name' => 'Room#rejectedDialOutRequest', 'url' => '/api/{apiVersion}/room/{token}/rejected-dialout', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setNotificationLevel() */ + ['name' => 'Room#setNotificationLevel', 'url' => '/api/{apiVersion}/room/{token}/notify', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setNotificationCalls() */ + ['name' => 'Room#setNotificationCalls', 'url' => '/api/{apiVersion}/room/{token}/notify-calls', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setLobby() */ + ['name' => 'Room#setLobby', 'url' => '/api/{apiVersion}/room/{token}/webinar/lobby', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setSIPEnabled() */ + ['name' => 'Room#setSIPEnabled', 'url' => '/api/{apiVersion}/room/{token}/webinar/sip', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setRecordingConsent() */ + ['name' => 'Room#setRecordingConsent', 'url' => '/api/{apiVersion}/room/{token}/recording-consent', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setMessageExpiration() */ + ['name' => 'Room#setMessageExpiration', 'url' => '/api/{apiVersion}/room/{token}/message-expiration', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::getCapabilities() */ + ['name' => 'Room#getCapabilities', 'url' => '/api/{apiVersion}/room/{token}/capabilities', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::setMentionPermissions() */ + ['name' => 'Room#setMentionPermissions', 'url' => '/api/{apiVersion}/room/{token}/mention-permissions', 'verb' => 'PUT', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::archiveConversation() */ + ['name' => 'Room#archiveConversation', 'url' => '/api/{apiVersion}/room/{token}/archive', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::unarchiveConversation() */ + ['name' => 'Room#unarchiveConversation', 'url' => '/api/{apiVersion}/room/{token}/archive', 'verb' => 'DELETE', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::importEmailsAsParticipants() */ + ['name' => 'Room#importEmailsAsParticipants', 'url' => '/api/{apiVersion}/room/{token}/import-emails', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\RoomController::scheduleMeeting() */ + ['name' => 'Room#scheduleMeeting', 'url' => '/api/{apiVersion}/room/{token}/meeting', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + ], +]; diff --git a/appinfo/routes/routesSettingsController.php b/appinfo/routes/routesSettingsController.php new file mode 100644 index 0000000..b707fcf --- /dev/null +++ b/appinfo/routes/routesSettingsController.php @@ -0,0 +1,20 @@ + '(v1)', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\SettingsController::setSIPSettings() */ + ['name' => 'Settings#setSIPSettings', 'url' => '/api/{apiVersion}/settings/sip', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\SettingsController::setUserSetting() */ + ['name' => 'Settings#setUserSetting', 'url' => '/api/{apiVersion}/settings/user', 'verb' => 'POST', 'requirements' => $requirements], + ], +]; diff --git a/appinfo/routes/routesSignalingController.php b/appinfo/routes/routesSignalingController.php new file mode 100644 index 0000000..d3b1fcf --- /dev/null +++ b/appinfo/routes/routesSignalingController.php @@ -0,0 +1,34 @@ + '(v3)', +]; + + +$requirementsWithToken = [ + 'apiVersion' => '(v3)', + 'token' => '[a-z0-9]{4,30}', +]; + +return [ + 'ocs' => [ + /** @see \OCA\Talk\Controller\SignalingController::getSettings() */ + ['name' => 'Signaling#getSettings', 'url' => '/api/{apiVersion}/signaling/settings', 'verb' => 'GET', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\SignalingController::getWelcomeMessage() */ + ['name' => 'Signaling#getWelcomeMessage', 'url' => '/api/{apiVersion}/signaling/welcome/{serverId}', 'verb' => 'GET', 'requirements' => array_merge($requirements, [ + 'serverId' => '\d+', + ])], + /** @see \OCA\Talk\Controller\SignalingController::backend() */ + ['name' => 'Signaling#backend', 'url' => '/api/{apiVersion}/signaling/backend', 'verb' => 'POST', 'requirements' => $requirements], + /** @see \OCA\Talk\Controller\SignalingController::sendMessages() */ + ['name' => 'Signaling#sendMessages', 'url' => '/api/{apiVersion}/signaling/{token}', 'verb' => 'POST', 'requirements' => $requirementsWithToken], + /** @see \OCA\Talk\Controller\SignalingController::pullMessages() */ + ['name' => 'Signaling#pullMessages', 'url' => '/api/{apiVersion}/signaling/{token}', 'verb' => 'GET', 'requirements' => $requirementsWithToken], + ], +]; diff --git a/appinfo/routes/routesTempAvatarController.php b/appinfo/routes/routesTempAvatarController.php new file mode 100644 index 0000000..5d4befe --- /dev/null +++ b/appinfo/routes/routesTempAvatarController.php @@ -0,0 +1,16 @@ + [ + /** @see \OCA\Talk\Controller\TempAvatarController::postAvatar() */ + ['name' => 'TempAvatar#postAvatar', 'url' => '/temp-user-avatar', 'verb' => 'POST'], + /** @see \OCA\Talk\Controller\TempAvatarController::deleteAvatar() */ + ['name' => 'TempAvatar#deleteAvatar', 'url' => '/temp-user-avatar', 'verb' => 'DELETE'], + ], +]; diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..e1e28db --- /dev/null +++ b/composer.json @@ -0,0 +1,65 @@ +{ + "autoload": { + "psr-4": { + "OCA\\Talk\\": "lib/" + } + }, + "config": { + "allow-plugins": { + "bamarni/composer-bin-plugin": true, + "cweagans/composer-patches": true + }, + "autoloader-suffix": "Talk", + "optimize-autoloader": true, + "platform": { + "php": "8.1" + }, + "sort-packages": true + }, + "scripts": { + "cs:check": "php-cs-fixer fix --dry-run --diff", + "cs:fix": "php-cs-fixer fix", + "lint": "find . -name \\*.php -not -path './vendor/*' -not -path './vendor-bin/*' -not -path './lib/Vendor/*' -not -path './build/*' -not -path './tests/integration/vendor/*' -print0 | xargs -0 -n1 php -l", + "openapi": "generate-spec && (npm run ts:generate || echo 'Please manually regenerate the typescript OpenAPI models')", + "rector:check": "rector --dry-run", + "rector:fix": "rector", + "opengrep": "opengrep --opengrep-ignore-pattern=noopengrep --error --include '*.php' --exclude 'docs' --exclude-rule 'javascript.lang.security.detect-insecure-websocket.detect-insecure-websocket'", + "opengrep-full": "opengrep --opengrep-ignore-pattern=noopengrep --error --include '*.php' --exclude 'docs' --include '*.vue' --include '*.js' --include '*.ts' --exclude-rule 'javascript.vue.security.audit.xss.templates.avoid-v-html.avoid-v-html' --exclude-rule 'javascript.lang.security.detect-insecure-websocket.detect-insecure-websocket'", + "psalm": "psalm --no-cache --threads=$(nproc)", + "psalm:dev": "@psalm", + "psalm:update-baseline": "psalm --threads=1 --update-baseline --set-baseline=tests/psalm-baseline.xml", + "post-install-cmd": [ + "@composer bin all install --ansi", + "\"vendor/bin/mozart\" compose", + "composer dump-autoload" + ], + "post-update-cmd": [ + "@composer bin all install --ansi", + "\"vendor/bin/mozart\" compose", + "composer dump-autoload" + ], + "test:unit": "vendor/bin/phpunit -c tests/php/phpunit.xml --colors=always --fail-on-warning --fail-on-risky --display-deprecations --display-phpunit-deprecations" + }, + "require-dev": { + "nextcloud/ocp": "dev-stable32" + }, + "require": { + "bamarni/composer-bin-plugin": "^1.8", + "cuyz/valinor": "^1.17", + "cweagans/composer-patches": "^1.7.3", + "firebase/php-jwt": "^7.0.5" + }, + "extra": { + "mozart": { + "dep_namespace": "OCA\\Talk\\Vendor\\", + "dep_directory": "/lib/Vendor/", + "classmap_directory": "/lib/autoload/", + "classmap_prefix": "NEXTCLOUDTALK_", + "packages": [ + "firebase/php-jwt", + "cuyz/valinor" + ] + }, + "patches-file": "composer.patches.json" + } +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..17f8693 --- /dev/null +++ b/composer.lock @@ -0,0 +1,572 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "6731642da590d0f16841ec8f03311245", + "packages": [ + { + "name": "bamarni/composer-bin-plugin", + "version": "1.8.3", + "source": { + "type": "git", + "url": "https://github.com/bamarni/composer-bin-plugin.git", + "reference": "e7ef9e012667327516c24e5fad9903a3bc91389d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bamarni/composer-bin-plugin/zipball/e7ef9e012667327516c24e5fad9903a3bc91389d", + "reference": "e7ef9e012667327516c24e5fad9903a3bc91389d", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^2.0", + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "composer/composer": "^2.0", + "ext-json": "*", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.0", + "symfony/console": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/finder": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0", + "symfony/process": "^2.8.52 || ^3.4.35 || ^4.4 || ^5.0 || ^6.0" + }, + "type": "composer-plugin", + "extra": { + "class": "Bamarni\\Composer\\Bin\\BamarniBinPlugin" + }, + "autoload": { + "psr-4": { + "Bamarni\\Composer\\Bin\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "No conflicts for your bin dependencies", + "keywords": [ + "composer", + "conflict", + "dependency", + "executable", + "isolation", + "tool" + ], + "support": { + "issues": "https://github.com/bamarni/composer-bin-plugin/issues", + "source": "https://github.com/bamarni/composer-bin-plugin/tree/1.8.3" + }, + "time": "2025-11-24T19:20:55+00:00" + }, + { + "name": "cuyz/valinor", + "version": "1.17.0", + "source": { + "type": "git", + "url": "https://github.com/CuyZ/Valinor.git", + "reference": "9eb2802797e36f3af1fd6e13ff23e4e3d0058022" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CuyZ/Valinor/zipball/9eb2802797e36f3af1fd6e13ff23e4e3d0058022", + "reference": "9eb2802797e36f3af1fd6e13ff23e4e3d0058022", + "shasum": "" + }, + "require": { + "composer-runtime-api": "^2.0", + "php": "~8.1.0 || ~8.2.0 || ~8.3.0 || ~8.4.0", + "psr/simple-cache": "^1.0 || ^2.0 || ^3.0" + }, + "conflict": { + "phpstan/phpstan": "<1.0 || >= 3.0", + "vimeo/psalm": "<5.0 || >=7.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.4", + "infection/infection": "^0.29", + "marcocesarato/php-conventional-changelog": "^1.12", + "mikey179/vfsstream": "^1.6.10", + "phpbench/phpbench": "^1.3", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^10.5", + "rector/rector": "^2.0", + "vimeo/psalm": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "CuyZ\\Valinor\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Romain Canon", + "email": "romain.hydrocanon@gmail.com", + "homepage": "https://github.com/romm" + } + ], + "description": "Library that helps to map any input into a strongly-typed value object structure.", + "homepage": "https://github.com/CuyZ/Valinor", + "keywords": [ + "array", + "conversion", + "hydrator", + "json", + "mapper", + "mapping", + "object", + "tree", + "yaml" + ], + "support": { + "issues": "https://github.com/CuyZ/Valinor/issues", + "source": "https://github.com/CuyZ/Valinor/tree/1.17.0" + }, + "funding": [ + { + "url": "https://github.com/romm", + "type": "github" + } + ], + "time": "2025-06-20T06:40:38+00:00" + }, + { + "name": "cweagans/composer-patches", + "version": "1.7.3", + "source": { + "type": "git", + "url": "https://github.com/cweagans/composer-patches.git", + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/cweagans/composer-patches/zipball/e190d4466fe2b103a55467dfa83fc2fecfcaf2db", + "reference": "e190d4466fe2b103a55467dfa83fc2fecfcaf2db", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0 || ^2.0", + "php": ">=5.3.0" + }, + "require-dev": { + "composer/composer": "~1.0 || ~2.0", + "phpunit/phpunit": "~4.6" + }, + "type": "composer-plugin", + "extra": { + "class": "cweagans\\Composer\\Patches" + }, + "autoload": { + "psr-4": { + "cweagans\\Composer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Cameron Eagans", + "email": "me@cweagans.net" + } + ], + "description": "Provides a way to patch Composer packages.", + "support": { + "issues": "https://github.com/cweagans/composer-patches/issues", + "source": "https://github.com/cweagans/composer-patches/tree/1.7.3" + }, + "time": "2022-12-20T22:53:13+00:00" + }, + { + "name": "firebase/php-jwt", + "version": "v7.0.5", + "source": { + "type": "git", + "url": "https://github.com/googleapis/php-jwt.git", + "reference": "47ad26bab5e7c70ae8a6f08ed25ff83631121380" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/googleapis/php-jwt/zipball/47ad26bab5e7c70ae8a6f08ed25ff83631121380", + "reference": "47ad26bab5e7c70ae8a6f08ed25ff83631121380", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.4", + "phpfastcache/phpfastcache": "^9.2", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "psr/cache": "^2.0||^3.0", + "psr/http-client": "^1.0", + "psr/http-factory": "^1.0" + }, + "suggest": { + "ext-sodium": "Support EdDSA (Ed25519) signatures", + "paragonie/sodium_compat": "Support EdDSA (Ed25519) signatures when libsodium is not present" + }, + "type": "library", + "autoload": { + "psr-4": { + "Firebase\\JWT\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "keywords": [ + "jwt", + "php" + ], + "support": { + "issues": "https://github.com/googleapis/php-jwt/issues", + "source": "https://github.com/googleapis/php-jwt/tree/v7.0.5" + }, + "time": "2026-04-01T20:38:03+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + } + ], + "packages-dev": [ + { + "name": "nextcloud/ocp", + "version": "dev-stable32", + "source": { + "type": "git", + "url": "https://github.com/nextcloud-deps/ocp.git", + "reference": "78e3e2d8dece0cf49a760cee2d2d0fc239c95ebc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nextcloud-deps/ocp/zipball/78e3e2d8dece0cf49a760cee2d2d0fc239c95ebc", + "reference": "78e3e2d8dece0cf49a760cee2d2d0fc239c95ebc", + "shasum": "" + }, + "require": { + "php": "~8.1 || ~8.2 || ~8.3 || ~8.4", + "psr/clock": "^1.0", + "psr/container": "^2.0.2", + "psr/event-dispatcher": "^1.0", + "psr/log": "^3.0.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-stable32": "32.0.0-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "AGPL-3.0-or-later" + ], + "authors": [ + { + "name": "Christoph Wurst", + "email": "christoph@winzerhof-wurst.at" + }, + { + "name": "Joas Schilling", + "email": "coding@schilljs.com" + } + ], + "description": "Composer package containing Nextcloud's public OCP API and the unstable NCU API", + "support": { + "issues": "https://github.com/nextcloud-deps/ocp/issues", + "source": "https://github.com/nextcloud-deps/ocp/tree/stable32" + }, + "time": "2026-04-28T01:53:22+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", + "keywords": [ + "clock", + "now", + "psr", + "psr-20", + "time" + ], + "support": { + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" + }, + "time": "2022-11-25T14:36:26+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/log", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.2" + }, + "time": "2024-09-11T13:17:53+00:00" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": { + "nextcloud/ocp": 20 + }, + "prefer-stable": false, + "prefer-lowest": false, + "platform": {}, + "platform-dev": {}, + "platform-overrides": { + "php": "8.1" + }, + "plugin-api-version": "2.9.0" +} diff --git a/composer.patches.json b/composer.patches.json new file mode 100644 index 0000000..30cc0fe --- /dev/null +++ b/composer.patches.json @@ -0,0 +1,4 @@ +{ + "patches": { + } +} diff --git a/composer/autoload.php b/composer/autoload.php new file mode 100644 index 0000000..b1c7bd3 --- /dev/null +++ b/composer/autoload.php @@ -0,0 +1,9 @@ + simple.log + +for i in $(seq 1 $NUM_USER_SESSIONS); +do + echo "$LOG_CONTENT" | egrep "user$i( |$)" > user$i.log +done + +for i in $(seq 1 $NUM_ROOM_SESSIONS); +do + echo "$LOG_CONTENT" | egrep "session$i( |$)" > session$i.log +done + diff --git a/docs/TURN.md b/docs/TURN.md new file mode 100644 index 0000000..71b5066 --- /dev/null +++ b/docs/TURN.md @@ -0,0 +1,129 @@ +# TURN server configuration + +## Background +The configuration of Nextcloud Talk mainly depends on your desired usage: + +- As long as it shall be used only **within one local network**, besides the app, nothing else should be required. Just verify that all browsers support the underlying [WebRTC](https://en.wikipedia.org/wiki/WebRTC) protocol - most contemporary browsers do with current versions, though mobile browsers tend to lag behind a little - and you should be good to go. Browser support can be tested for example here: [https://test.webrtc.org/](https://test.webrtc.org/) + +- Talk tries to establish a direct [peer-to-peer (P2P)](https://en.wikipedia.org/wiki/Peer-to-peer) connection, thus on connections **beyond the local network** (behind a [NAT](https://en.wikipedia.org/wiki/Network_address_translation) or router), clients do not only need to know each other's public IP, but the participants local IPs as well. Processing this, is the job of a [STUN](https://en.wikipedia.org/wiki/STUN) server. As there is one preconfigured for Nextcloud Talk that is operated by Nextcloud GmbH, for this case nothing else needs to be done. + +- But in many cases, especially **in combination with firewalls or [symmetric NAT](https://en.wikipedia.org/wiki/Network_address_translation#Symmetric_NAT)**, a direct P2P connection is not possible, even with the help of a STUN server. For this a so-called [TURN server](https://en.wikipedia.org/wiki/Traversal_Using_Relays_around_NAT) needs to be configured additionally. + +- Nextcloud Talk will try direct P2P in the first place, use STUN if needed and TURN as last resort fallback. Thus, to be most flexible and guarantee functionality of your Nextcloud Talk instance, in all possible connection cases, you would want to set up a TURN server. + +### TURN server and Nextcloud Talk High Performance Backend + +A TURN server might be needed even if the Nextcloud Talk High Performance Backend is used and publicly accessible. + +The High Performance Backend uses a certain range of ports for WebRTC media connections (20000-40000 by default). A client could be behind a restrictive firewall that only allows connections to port 443, so even if the High Performance Backend is publicly accessible the client would need to connect to a TURN server in port 443, and the TURN server will then relay the packets to the 20000-40000 range in the High Performance Backend. + +For maximum compatibility the TURN server should be configured to listen on port 443. Therefore, when both a TURN server and the High Performance Backend are used each one should run in its own server, or in the same server but each one with its own IP address, as the High Performance Backend will need to bind to port 443 too. + +## Install and set up your TURN server + +This documentation provides two examples for TURN server implementations: + +* [coturn](coturn.md) +* [eturnal](eturnal.md) + +After you have setup the server part above, continue here on this page with the following steps. + +#### 4. Configure Nextcloud Talk to use your TURN server + +- Go to Nextcloud admin panel > Talk settings. Btw. if you already have your own TURN server, you can and may want to use it as STUN server as well: + + * STUN servers: your.domain.org: + * TURN server: your.domain.org: + * TURN secret: + * Protocol: UDP and TCP + +- Do not add `http(s)://` or `turn(s)://` protocol prefix here, just enter the bare `domain:port`. The protocol (`turn:` and/or `turns:`) needs to be selected in the dropdown. + +##### Changes in Talk 12 + +In Talk 11 and previous versions when several STUN or TURN servers were listed in the settings a random one was provided to the clients. Starting with Talk 12 all the STUN and TURN servers listed in the settings are now returned. + +Nevertheless, please note that in most cases you will not need to set up several TURN servers to ensure that the clients can connect to them. In general a single TURN server using both _turn:_ and _turns:_ with UDP and TCP on port 443 should be enough. Also keep in mind that clients will try to connect to all configured STUN and TURN servers when joining a call, even if they are not actually used in the end. + +If you need to retain the previous behaviour you should now do it by external means. For example, by using a properly configured load balancer in front of the TURN servers and configuring only that load balancer as the TURN server in Talk settings. + +#### 5. Port opening/forwarding + +- The TURN server on `` needs to be accessible for all Talk participants, so you need to open it to the web and if your TURN server is running **behind a NAT**, forward it to the related machine. Also make sure to set coturn's [`--external-ip` option](https://github.com/coturn/coturn/wiki/turnserver#options) or eturnal's [`relay_ipv4_addr` configuration item](https://eturnal.net/documentation/#relay_ipv4_addr) when your TURN server is in a private network. + +- If the High Performance Backend is used the TURN server and the High Performance Backend must be able to reach each other. If set, the `external-ip` option/`relay_ipv4_addr` parameter defines the IP address of the TURN server that the High Performance Backend will try to connect to. Therefore, if both the TURN server and the High Performance Backend are in the same private network they may be able to reach each other using their local IP addresses, and thus it may not be needed to set the `external-ip` option/`relay_ipv4_addr` parameter. Moreover, when both servers are behind a firewall, in some cases (depending on the firewall configuration) setting the external IP can even cause the TURN server and the High Performance Backend to fail to reach each other (for example, if the firewall is not able to "loop" a packet from an internal address to an external one which then should go back to another internal address). + + * Note that in some cases additional addresses can be found during the negotiation of the connection, the so-called peer reflexive candidates. Due to this even if the external IP of the TURN server is not reachable by the High Performance Backend the connection may still work, but this should not be relied on. + +#### 6. Testing the TURN server + +##### Test if the TURN server is accessible from outside + +For _coTURN_: + +Install _coTURN_ on your client. Please [refer above for details](coturn.md#1-download-and-install). Note that in the case of the client you only need to install it, you do not need to perform any configuration after that. + +Run `turnutils_uclient -p -W -v -y turn.example.com` where + +- `` is the port where your TURN server is listening +- `` is the _static-auth-secret_ value configured in your TURN server +- `-v` enables the verbose mode to be able to check all the details +- `-y` enables _client-to-client_ connections, so _turnutils_uclient_ acts as both the client and the peer that the TURN server relays to; otherwise you would need to also run _turnutils_peer_ to act as the peer to relay to and specify its address and port when running _turnutils_uclient_ with `-e` and `-r` + +By default, the connection between the TURN client and the TURN server will be done using UDP. To instead test TCP connections you need to add `-t` to the options. + +No matter if you are using UDP or TCP the output should look similar to: + + 0: IPv4. Connected from: 192.168.0.2:50988 + 0: IPv4. Connected to: 1.2.3.4:3478 + 0: allocate sent + 0: allocate response received: + 0: allocate sent + 0: allocate response received: + 0: success + 0: IPv4. Received relay addr: 1.2.3.4:56365 + .... + 4: Total transmit time is 4 + 4: Total lost packets 0 (0.000000%), total send dropped 0 (0.000000%) + 4: Average round trip delay 32.500000 ms; min = 15 ms, max = 56 ms + 4: Average jitter 12.600000 ms; min = 0 ms, max = 41 ms + +If the output hangs at some point this could mean that the TURN server is not accessible (for example, because a firewall blocks its ports). Pay special attention too to the _Total lost packets_ and _total send dropped_ values, as there would be no error message if the data was successfully sent to the TURN server, but then it was not properly relayed. + +Further you should see in the TURN server log the successful connection. + +This test only verifies that your TURN server is accessible from the outside, but it does not check if your TURN server can be actually used within Talk. For that please keep reading. + +For _eturnal_: + +The easiest way is to refer to eturnal's Quick-Start guide, e.g. [in a shell](https://github.com/processone/eturnal/blob/master/doc/QUICK-TEST.md) or with [Docker](https://github.com/processone/eturnal/blob/master/doc/CONTAINER-QUICK-TEST.md). + +##### Test the TURN server connection from within Talk + +When the TURN server is set in the Talk settings a basic test against the TURN server is performed. You can perform a deeper test by forcing your browser to send the media of a call only through the TURN server: + +- Join a call +- Open your browser console +- Type `OCA.Talk.SimpleWebRTC.webrtc.config.peerConnectionConfig.iceTransportPolicy = 'relay'` in the console and press Enter +- Leave the call +- Join the call again + +Now, in that browser, the media sent to and received from other participants in the call should go through the TURN server. If the call works then the TURN server should work. + +##### Differences between Firefox and Chromium + +Firefox and Chromium handle `iceTransportPolicy = 'relay'` in slightly different ways. When relay candidates are forced Firefox will use only relay candidates, but Chromium will also take into account peer reflexive candidates that refer to the TURN server. Due to this in the above test, in some specific cases, a connection could be established in Chromium but not in Firefox. + +For example, if a Janus gateway is used too, the TURN server is in the same server as the Janus gateway and both are behind a firewall (not recommended), relay candidates could have the public IP address of the server while peer reflexive candidates could have the internal one. If the firewall drops connections between the public IP address and the public IP address the connection between coTURN and Janus may not be established (but without failing either), which would cause that Firefox establishes a connection with the TURN server, but the TURN server does not send or receive any packet to or from Janus. In Chromium, on the other hand, the connection would work as it would use the internal IP address of the server from the peer reflexive candidate. + +However, in the scenario above Firefox would not be able to establish a connection only if relay candidates are forced. With a standard Firefox configuration it would take into account peer reflexive candidates too, and thus, it should work without issues. Nevertheless, note that although using `iceTransportPolicy = 'relay'` in the browser console is just a temporary setting there is a persistent setting in Firefox configuration (_about:config_) to force relay candidates, `media.peerconnection.ice.relay_only`. This setting is targeted towards privacy-minded people, so you may want to test the TURN server with Firefox to ensure that it works even with the most restrictive configurations. + +### What else +Nextcloud Talk´s WebRTC handling is still mostly based on the one from the [Spreed.ME](https://www.spreed.me/) WebRTC solution. For this reason, all guides about how to configure coTURN for it, applies to Nextcloud Talk too. + +If you need to use Talk with more than 5-10 users in the same call, you will need the Spreed High Performance Back-end from Nextcloud GmbH. Check [the website](https://nextcloud.com/talk/) for details. + +#### Further reference + +- [https://github.com/spreedbox/spreedbox/wiki/Use-TURN-server](https://github.com/spreedbox/spreedbox/wiki/Use-TURN-server) +- [https://github.com/nextcloud/spreed/issues/667](https://github.com/nextcloud/spreed/issues/667) diff --git a/docs/Talkbuchet-cli.py b/docs/Talkbuchet-cli.py new file mode 100644 index 0000000..843df28 --- /dev/null +++ b/docs/Talkbuchet-cli.py @@ -0,0 +1,1761 @@ +# +# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later +# + +""" +Helper script that provides a command line interface for Talkbuchet, the helper +tool for load/stress testing of Nextcloud Talk. + +Talkbuchet is a JavaScript script (Talkbuchet.js), and it is run using a web +browser. A Python script (Talkbuchet-cli.py) is provided to launch a web +browser, load Talkbuchet and control it from a command line interface (which +requires Selenium and certain Python packages to be available in the system). A +Bash script (Talkbuchet-run.sh) is provided to set up a Docker container with +Selenium, a web browser and all the needed Python dependencies for +Talkbuchet-cli.py. + +Please refer to the documentation in Talkbuchet.js and Talkbuchet-run.sh for +information on Talkbuchet and on how to easily run it. + +Documentation on the control functions provided by Talkbuchet-cli.py can be +printed while Talkbuchet-cli.py is running by calling "help(XXX)" (where XXX is +the function to get help about). + +Talkbuchet-cli.py provides wrapper classes to start and interact with +Talkbuchet.js instances. Creating an object of a wrapper class launches a new +browser instance, opens the given Nextcloud URL and loads Talkbuchet.js on it. +After that the methods in the object call their counterpart in the wrapped +Talkbuchet.js instance; the wrapper objects provide full control of their +wrapped Talkbuchet.js instance. + +Besides the helper classes Talkbuchet-cli.py also provides a set of global +functions to easily create several wrapper objects with common settings. Some +control functions are also provided, for example, to check the status of +connections during a siege, but in general the global functions only cover +creating and deleting the wrappers, and once created any specific action should +be executed on the wrapper objects themselves. + +The values set using the global functions are not taken into account if a +Talkbuchet wrapper is manually created; they only affect the wrappers created +using the global functions. Moreover, existing Talkbuchet wrappers +already created by the global helper functions are not affected either, only +those created after the value was changed. + +By default the browser instances will be launched in the local Selenium server. +A remote server can be used instead with: +>>>> setRemoteSeleniumUrl(THE-SELENIUM-SERVER-URL) + +Independently of the server used, by default the browser will be launched in +headless mode. If the browser needs to be interacted with this can be disabled +with: +>>>> setHeadless(False) + +Talkbuchet-cli.py supports launching Chrome and Firefox instances. Nevertheless, +note that the browser to be used also needs to be supported by the Selenium +server. When Talkbuchet-cli.py was started through Talkbuchet-run.sh and a +remote Selenium server is not set the available browser in the container will be +automatically used. Otherwise the browser to be used needs to be explicitly set +with: +>>>> setBrowser(THE-BROWSER-NAME) + +Talkbuchet-cli.py supports both the siege and virtual participant modes of +Talkbuchet. Although there are a few common functions each mode has its own set +of specific functions, so there are separate wrapper classes and global +functions for each mode. Switching between the two modes can be done by calling +"switchToSiegeMode()" and "switchToVirtualParticipantMode()". By default +Talkbuchet-cli.py starts in siege mode. + +The documentation for each specific mode can be shown with +"help(switchToSiegeMode)" and "help(switchToVirtualParticipantMode)". Note that +there are some slight differences in the behaviour between Firefox and Chrome. +Chrome has a hardcoded limit in the number of connections that can be created, +and it does not properly clean them once closed, so it could be less suitable +for sieges where a high number of connections are typically required. +Nevertheless, this could be overcomed by creating several smaller sieges at the +same time rather than a single, larger one. On the other hand, Firefox requires +more resources for each browser instance than Chrome, so it could be less +suitable for virtual participants where a high number of browser instances are +typically required. But of course this might not be a problem if the system +running the browser has enough resources. + +Regarding the sent media, Firefox sends a continuous beep for audio, while +Chrome sends a short beep every ~500ms. Firefox sends more audio data (~11 kBps) +than Chrome (~4 kBps), and also uses more CPU in the system running the browser +when sending and receiving audio (specially on large sieges with a high number +of connections). On the other hand, Firefox uses slightly less CPU than Chrome +in the system running the browser when receiving video, although more when +sending it; Firefox sends a changing colour animation for video (640x480x30FPS, +~40 kBps), while Chrome sends an animation with the time since the video started +and a one second "clock" (640x480x20FPS, ~64 kBps). + +Besides the siege and virtual participant modes Talkbuchet-cli.py provides an +additional mode, real participant, that is not part of Talkbuchet itself. This +mode can be used to open browser instances and join the conversation and/or the +call, exactly as it would be done by a real participant. However, please note +that this mode is meant only for developing purposes; load/stress testing should +be done with the other two modes, as the number of participants that can be +simulated with them in the system running the test is much higher. + +Unlike the other modes, the real participant mode does not require an HPB server +to be configured in Nextcloud Talk. +""" + +import atexit +import json +import threading +import websocket + +from datetime import datetime +from pathlib import Path +from selenium import webdriver +from selenium.webdriver.common.by import By +from selenium.webdriver.support.wait import WebDriverWait +from shutil import disk_usage +from time import sleep + + +class BiDiLogsHelper: + """ + Helper class to get browser logs using the BiDi protocol. + + A new thread is started by each object to receive the logs, so they can be + printed in real time even if the main thread is waiting for some script to + finish. + """ + + def __init__(self, driver): + if not 'webSocketUrl' in driver.capabilities: + raise Exception('webSocketUrl not found in capabilities') + + self.realtimeLogsEnabled = False + self.pendingLogs = [] + self.logsLock = threading.Lock() + + # Web socket connection is rejected by Firefox with "Bad request" if + # "Origin" header is present; logs show: + # "The handshake request has incorrect Origin header". + self.websocket = websocket.create_connection(driver.capabilities['webSocketUrl'], suppress_origin=True) + + self.websocket.send(json.dumps({ + 'id': 1, + 'method': 'session.subscribe', + 'params': { + 'events': ['log.entryAdded'], + }, + })) + + self.initialLogsLock = threading.Lock() + self.initialLogsLock.acquire() + + self.loggingThread = threading.Thread(target=self.__processLogEvents, daemon=True) + self.loggingThread.start() + + # Do not return until the existing logs were fetched, except if it is + # taking too long. + self.initialLogsLock.acquire(timeout=10) + + def __del__(self): + if self.websocket: + self.websocket.close() + + if self.loggingThread: + self.loggingThread.join() + + def __messageFromEvent(self, event): + if not 'params' in event: + return '???' + + method = '' + if 'method' in event['params']: + method = event['params']['method'] + elif 'level' in event['params']: + method = event['params']['level'] if event['params']['level'] != 'warning' else 'warn' + + text = '' + if 'text' in event['params']: + text = event['params']['text'] + + time = '??:??:??' + if 'timestamp' in event['params']: + timestamp = event['params']['timestamp'] + + # JavaScript timestamps are millisecond based, Python timestamps + # are second based. + time = datetime.fromtimestamp(timestamp / 1000).strftime('%H:%M:%S') + + methodShort = '?' + if method == 'error': + methodShort = 'E' + elif method == 'warn': + methodShort = 'W' + elif method == 'log': + methodShort = 'L' + elif method == 'info': + methodShort = 'I' + elif method == 'debug': + methodShort = 'D' + + return time + ' ' + methodShort + ' ' + text + + def __processLogEvents(self): + while True: + try: + event = json.loads(self.websocket.recv()) + except: + print('BiDi WebSocket closed') + return + + if 'id' in event and event['id'] == 1: + self.initialLogsLock.release() + continue + + if not 'method' in event or event['method'] != 'log.entryAdded': + continue + + message = self.__messageFromEvent(event) + + with self.logsLock: + if self.realtimeLogsEnabled: + print(message) + else: + self.pendingLogs.append(message) + + def clearLogs(self): + """ + Clears, without printing, the logs received while realtime logs were not + enabled. + """ + + with self.logsLock: + self.pendingLogs = [] + + def printLogs(self): + """ + Prints the logs received while realtime logs were not enabled. + + The logs are cleared after printing them. + """ + + with self.logsLock: + for log in self.pendingLogs: + print(log) + + self.pendingLogs = [] + + def setRealtimeLogsEnabled(self, realtimeLogsEnabled): + """ + Enable or disable realtime logs. + + If logs are received while realtime logs are not enabled they can be + printed using "printLogs()". + """ + + with self.logsLock: + self.realtimeLogsEnabled = realtimeLogsEnabled + + +class SeleniumHelper: + """ + Helper class to start a browser and execute scripts in it using Selenium. + + By default the browser will be started in headless mode, so the browser will + not be visible. It is not possible to make it visible once the browser was + launched; in order to show it the browser has to be started again in + non-headless mode. + + The browser, as well as the Selenium server, are expected to be available in + the local system. A remote Selenium server can be used instead by specifying + the URL when starting the browser. However, when a remote Selenium server is + used its session timeout (which is independent from the timeouts set in the + driver) must be kept in mind, as it can cause the browser to "unexpectedly" + close. + """ + + def __init__(self): + self.driver = None + self.bidiLogsHelper = None + + def __del__(self): + if self.driver: + # The session must be explicitly quit to remove the temporary files + # created in "/tmp". + self.driver.quit() + + def startChrome(self, headless = True, remoteSeleniumUrl = None): + """ + Starts a Chrome instance. + + :param headless: whether the browser will be started in headless mode or + not; headless mode is used by default. + :param remoteSeleniumUrl: the URL of the Selenium server to connect to; + the local server is used by default. + """ + + options = webdriver.ChromeOptions() + options.set_capability("goog:loggingPrefs", { 'browser': 'ALL' }) + options.add_argument('--use-fake-device-for-media-stream') + options.add_argument('--use-fake-ui-for-media-stream') + + # Headless mode uses a little less memory on each instance, so it is + # specially useful when there are several virtual participants. + if headless: + options.add_argument('--headless') + + if remoteSeleniumUrl: + self.driver = webdriver.Remote( + command_executor=remoteSeleniumUrl, + options=options + ) + else: + # Error messages like "Failed to fetch" or crashes when starting the + # driver are usually caused by not having enough space in "/dev/shm" + # or in "/tmp". + # Using "/dev/shm" provides better performance, but it is not + # strictly needed, so it can be disabled if there is not enough free + # space. The limit is set to 64 MiB just based on the memory usage + # observed during some tests. + if disk_usage('/dev/shm').free < 67108864: + print('Less than 64 MiB available in "/dev/shm", usage disabled') + + options.add_argument("--disable-dev-shm-usage") + + if disk_usage('/tmp').free < 134217728: + print('Warning: less than 128 MiB available in "/tmp", strange failures may occur') + + self.driver = webdriver.Chrome( + options=options + ) + + def startFirefox(self, headless = True, remoteSeleniumUrl = None): + """ + Starts a Firefox instance. + + :param headless: whether the browser will be started in headless mode or + not; headless mode is used by default. + :param remoteSeleniumUrl: the URL of the Selenium server to connect to; + the local server is used by default. + """ + + options = webdriver.FirefoxOptions() + + # "webSocketUrl" is needed for BiDi; this should be set already by + # default, but just in case. + options.set_capability('webSocketUrl', True) + # In Firefox < 101 BiDi protocol was not enabled by default, although it + # works fine for getting the logs with Firefox 99, so it is explicitly + # enabled. + # https://bugzilla.mozilla.org/show_bug.cgi?id=1753997 + options.set_preference('remote.active-protocols', 3) + + options.set_preference('media.navigator.permission.disabled', True) + options.set_preference('media.navigator.streams.fake', True) + + # Headless mode uses a little less memory on each instance, so it is + # specially useful when there are several virtual participants. + options.headless = headless + + if remoteSeleniumUrl: + self.driver = webdriver.Remote( + command_executor=remoteSeleniumUrl, + options=options + ) + else: + if disk_usage('/tmp').free < 134217728: + print('Warning: less than 128 MiB available in "/tmp", strange failures may occur') + + self.driver = webdriver.Firefox( + options=options + ) + + self.bidiLogsHelper = BiDiLogsHelper(self.driver) + + def clearLogs(self): + """ + Clears browser logs not printed yet. + + This does not affect the logs in the browser itself, only the ones + received by the SeleniumHelper. + """ + + if self.bidiLogsHelper: + self.bidiLogsHelper.clearLogs() + return + + self.driver.get_log('browser') + + def printLogs(self): + """ + Prints browser logs received since last print. + + These logs do not include realtime logs, as they are printed as soon as + they are received. + """ + + if self.bidiLogsHelper: + self.bidiLogsHelper.printLogs() + return + + for log in self.driver.get_log('browser'): + print(log['message']) + + def execute(self, script): + """ + Executes the given script. + + If the script contains asynchronous code "executeAsync()" should be used + instead to properly wait until the asynchronous code finished before + returning. + + Technically Chrome (unlike Firefox) works as expected with something + like "execute('await someFunctionCall(); await anotherFunctionCall()'", + but "executeAsync" has to be used instead for something like + "someFunctionReturningAPromise().then(() => { more code })"). + + If realtime logs are available logs are printed as soon as they are + received. Otherwise they will be printed once the script has finished. + """ + + # Real time logs are enabled while the command is being executed. + if self.bidiLogsHelper: + self.printLogs() + self.bidiLogsHelper.setRealtimeLogsEnabled(True) + + self.driver.execute_script(script) + + if self.bidiLogsHelper: + # Give it some time to receive the last real time logs before + # disabling them again. + sleep(0.5) + + self.bidiLogsHelper.setRealtimeLogsEnabled(False) + + self.printLogs() + + def executeAsync(self, script): + """ + Executes the given script asynchronously. + + This function should be used to execute JavaScript code that needs to + wait for a promise to be fulfilled, either explicitly or through "await" + calls. + + The script needs to explicitly signal that the execution has finished by + including the special text "{RETURN}" (without quotes). If "{RETURN}" is + not included the function will automatically return once all the root + statements of the script were executed (which works as expected if using + "await" calls, but not if the script includes something like + "someFunctionReturningAPromise().then(() => { more code })"; in that + case the script should be written as + "someFunctionReturningAPromise().then(() => { more code {RETURN} })"). + + If realtime logs are available logs are printed as soon as they are + received. Otherwise they will be printed once the script has finished. + """ + + # Real time logs are enabled while the command is being executed. + if self.bidiLogsHelper: + self.printLogs() + self.bidiLogsHelper.setRealtimeLogsEnabled(True) + + # Add an explicit return point at the end of the script if none is + # given. + if script.find('{RETURN}') == -1: + script += '{RETURN}' + + # await is not valid in the root context in Firefox, so the script to be + # executed needs to be wrapped in an async function. + script = '(async() => { ' + script + ' })().catch(error => { console.error(error) {RETURN} })' + + # Asynchronous scripts need to explicitly signal that they are finished + # by invoking the callback injected as the last argument. + # https://www.selenium.dev/documentation/legacy/json_wire_protocol/#sessionsessionidexecute_async + script = script.replace('{RETURN}', '; arguments[arguments.length - 1]()') + + self.driver.execute_async_script(script) + + if self.bidiLogsHelper: + # Give it some time to receive the last real time logs before + # disabling them again. + sleep(0.5) + + self.bidiLogsHelper.setRealtimeLogsEnabled(False) + + self.printLogs() + + +class TalkbuchetCommon: + """ + Base class for Talkbuchet wrappers. + + Talkbuchet wrappers load Talkbuchet on a given Nextcloud URL and provide + methods to call the different Talkbuchet functions in the browser. + """ + + def __init__(self, browser, nextcloudUrl, headless = True, remoteSeleniumUrl = None): + """ + Loads Talkbuchet on the given Nextcloud URL using the given browser. + + :param browser: "firefox" or "chrome". + :param nextcloudUrl: the URL of the Nextcloud instance to load + Talkbuchet on. + :param headless: whether the browser will be started in headless mode or + not; headless mode is used by default. + :param remoteSeleniumUrl: the URL of the Selenium server to connect to; + the local server is used by default. + """ + + self.seleniumHelper = SeleniumHelper() + + if browser == 'chrome': + self.seleniumHelper.startChrome(headless, remoteSeleniumUrl) + elif browser == 'firefox': + self.seleniumHelper.startFirefox(headless, remoteSeleniumUrl) + else: + raise Exception('Invalid browser: ' + browser) + + self.seleniumHelper.driver.get(nextcloudUrl) + + self.__loadTalkbuchet() + + def __loadTalkbuchet(self): + talkbuchet = Path('Talkbuchet.js').read_text() + + # Explicitly assign all the needed functions defined in Talkbuchet.js to + # the Window object to be able to access them at a later point. + talkbuchet = talkbuchet + ''' + window.getPublishers = getPublishers + window.getSubscribers = getSubscribers + window.closeConnections = closeConnections + window.setAudioEnabled = setAudioEnabled + window.setVideoEnabled = setVideoEnabled + window.setSentAudioStreamEnabled = setSentAudioStreamEnabled + window.setSentVideoStreamEnabled = setSentVideoStreamEnabled + window.checkPublishersConnections = checkPublishersConnections + window.checkSubscribersConnections = checkSubscribersConnections + window.printPublisherStats = printPublisherStats + window.printSubscriberStats = printSubscriberStats + window.setCredentials = setCredentials + window.setToken = setToken + window.setPublishersAndSubscribersCount = setPublishersAndSubscribersCount + window.startMedia = startMedia + window.setConnectionWarningTimeout = setConnectionWarningTimeout + window.siege = siege + window.getVirtualParticipant = getVirtualParticipant + window.startVirtualParticipant = startVirtualParticipant + window.stopVirtualParticipant = stopVirtualParticipant + window.sendMediaEnabledStateThroughDataChannel = sendMediaEnabledStateThroughDataChannel + window.sendSpeakingStateThroughDataChannel = sendSpeakingStateThroughDataChannel + window.sendNickThroughDataChannel = sendNickThroughDataChannel + ''' + + # Clear previous logs + self.seleniumHelper.clearLogs() + + self.seleniumHelper.executeAsync(talkbuchet) + + def setAudioEnabled(self, audioEnabled): + """ + Sets the enabled state of the audio track in the media stream. + + :param audioEnabled: True to enable, False to disable. + """ + + self.seleniumHelper.execute('setAudioEnabled(' + ('true' if audioEnabled else 'false') + ')') + + def setVideoEnabled(self, videoEnabled): + """ + Sets the enabled state of the video track in the media stream. + + :param videoEnabled: True to enable, False to disable. + """ + + self.seleniumHelper.execute('setVideoEnabled(' + ('true' if videoEnabled else 'false') + ')') + + def setSentAudioStreamEnabled(self, sentAudioStreamEnabled): + """ + Sets whether the audio track is sent or not. + + :param sentAudioStreamEnabled: True to send the actual track, False to + send a null track. + """ + + self.seleniumHelper.execute('setSentAudioStreamEnabled(' + ('true' if sentAudioStreamEnabled else 'false') + ')') + + def setSentVideoStreamEnabled(self, sentVideoStreamEnabled): + """ + Sets whether the video track is sent or not. + + :param sentVideoStreamEnabled: True to send the actual track, False to + send a null track. + """ + + self.seleniumHelper.execute('setSentVideoStreamEnabled(' + ('true' if sentVideoStreamEnabled else 'false') + ')') + + def setCredentials(self, user, appToken): + """ + The user and app token to use. + + An app token/password can be generated in the Security section of the + personal settings (index.php/settings/user/security). + + In siege mode the credentials always need to be set. + + In virtual participant mode the participant will be a guest if the + credentials are not set. + + :param user: the user ID. + :param appToken: the app token for the user. + """ + + self.seleniumHelper.execute('setCredentials(\'' + user + '\', \'' + appToken + '\')') + + def setToken(self, token): + """ + Sets the conversation token to use. + + In siege mode this should be set only when conversation clustering is + enabled in the server. + + In virtual participant mode the token always needs to be set. + + :param token: the conversation token. + """ + + self.seleniumHelper.execute('setToken(\'' + token + '\')') + + def startMedia(self, audio, video): + """ + Starts the media stream to be used by publishers (including virtual + participants). + + By default in siege mode audio will be used, and in virtual participant + mode neither audio nor video will be used. + + Only one media stream can be active at the same time, so any previous + stream is stopped when starting a new one. This should be done only when + the siege or the virtual participant is not active. + + If both audio and video are False then there will be no media. This is + only allowed in virtual participant mode, but not in siege mode. + + :param audio: True to start audio, False otherwise + :param video: True to start video, False otherwise + """ + + self.seleniumHelper.executeAsync('await startMedia(' + ('true' if audio else 'false') + ', ' + ('true' if video else 'false') + ')') + + +class Siege(TalkbuchetCommon): + """ + Wrapper for Talkbuchet in siege mode. + + Besides the common functions this wrapper exposes only the Talkbuchet + functions for siege mode. + """ + + def __init__(self, browser, nextcloudUrl, headless = True, remoteSeleniumUrl = None): + """ + See :py:meth:`TalkbuchetCommon.__init__`. + """ + + super().__init__(browser, nextcloudUrl, headless, remoteSeleniumUrl) + + # Set default values from Talkbuchet.js. + self.publishersCount = 5 + self.subscribersPerPublisherCount = 40 + self.connectionWarningTimeout = 5000 + + def closeConnections(self): + """ + Stops the siege by closing the publisher and subscriber connections + + As the media stream is no longer needed it is also stopped. + """ + + self.seleniumHelper.execute('closeConnections()') + + def checkPublishersConnections(self): + """ + Prints the state of the publisher connections. + """ + + self.seleniumHelper.execute('checkPublishersConnections()') + + def checkSubscribersConnections(self): + """ + Prints the state of the subscriber connections. + """ + + self.seleniumHelper.execute('checkSubscribersConnections()') + + def printPublisherStats(self, publisherSessionId): + """ + Prints the stats of the given publisher connection. + + :param publisherSessionId: the session ID of the publisher. + """ + + self.seleniumHelper.executeAsync('await printPublisherStats(\'' + publisherSessionId + '\', true)') + + def printSubscriberStats(self, index): + """ + Prints the stats of the given subscriber connection. + + :param index: the index of the subscriber in the list of subscribers. + """ + + self.seleniumHelper.executeAsync('await printSubscriberStats(' + str(index) + ', true)') + + def setPublishersAndSubscribersCount(self, publishersCount, subscribersPerPublisherCount): + """ + Sets the number of publishers and subscribers per publisher to use. + + If not explicitly set the default number from Talkbuchet.js is used, + which is 5 publishers and 40 subscribers per publisher. + + :param publishersCount: the number of publishers. + :param subscribersPerPublisherCount: the number of subscribers for each + publisher. + """ + + self.publishersCount = publishersCount + self.subscribersPerPublisherCount = subscribersPerPublisherCount + + self.seleniumHelper.execute('setPublishersAndSubscribersCount(' + str(publishersCount) + ', ' + str(subscribersPerPublisherCount) + ')') + + def setConnectionWarningTimeout(self, connectionWarningTimeout): + """ + Sets the milliseconds to wait before warning about connection problems. + + A message is printed when a connection was not established after or has + been disconnected for more than the given time. However, note that the + message might not be printed in CLI until another command is executed. + + :param connectionWarningTimeout: the milliseconds to wait before + warning about connection issues. + """ + + self.connectionWarningTimeout = connectionWarningTimeout + + self.seleniumHelper.execute('setConnectionWarningTimeout(' + str(connectionWarningTimeout) + ')') + + def siege(self): + """ + Starts a siege. + """ + + savedScriptTimeout = self.seleniumHelper.driver.timeouts.script + + # Adjust script timeout to prevent it from ending before the siege has + # started. + scriptTimeout = (self.publishersCount + self.publishersCount * self.subscribersPerPublisherCount) * (self.connectionWarningTimeout / 1000) + if scriptTimeout > savedScriptTimeout: + self.seleniumHelper.driver.set_script_timeout(scriptTimeout) + + self.seleniumHelper.executeAsync('await siege()') + + self.seleniumHelper.driver.set_script_timeout(savedScriptTimeout) + + +class VirtualParticipant(TalkbuchetCommon): + """ + Wrapper for Talkbuchet in virtual participant mode. + + Besides the common functions this wrapper exposes only the Talkbuchet + functions for virtual participant mode. + """ + + def __init__(self, browser, nextcloudUrl, headless = True, remoteSeleniumUrl = None): + """ + See :py:meth:`TalkbuchetCommon.__init__`. + """ + + super().__init__(browser, nextcloudUrl, headless, remoteSeleniumUrl) + + def startVirtualParticipant(self): + """ + Starts the virtual participant. + """ + + self.seleniumHelper.executeAsync('await startVirtualParticipant()') + + def stopVirtualParticipant(self): + """ + Stops the virtual participant. + """ + + self.seleniumHelper.executeAsync('await stopVirtualParticipant()') + + def sendMediaEnabledStateThroughDataChannel(self, mediaType, enabled): + """ + Sends the enabled state of the media using a data channel message. + + :param mediaType: "audio" or "video". + :param enabled: True or False. + """ + + self.seleniumHelper.execute('sendMediaEnabledStateThroughDataChannel(\'' + mediaType + '\', ' + ('true' if enabled else 'false') + ')') + + def sendSpeakingStateThroughDataChannel(self, speaking): + """ + Sends the speaking state using a data channel message. + + :param speaking: True for speaking, False for not speaking. + """ + + self.seleniumHelper.execute('sendSpeakingStateThroughDataChannel(' + ('true' if speaking else 'false') + ')') + + def sendNickThroughDataChannel(self, nick): + """ + Sends the nick of the participant using a data channel message. + + :param nick: the nick to send. + """ + + self.seleniumHelper.execute('sendNickThroughDataChannel(\'' + nick + '\')') + + +class RealParticipant(): + """ + Wrapper for Talkbuchet in real participant mode. + + This wrapper exposes functions to use a real participant in a browser. + """ + + def __init__(self, browser, nextcloudUrl, headless = True, remoteSeleniumUrl = None): + """ + Starts a real participant in the given Nextcloud URL using the given + browser. + + :param browser: "firefox" or "chrome". + :param nextcloudUrl: the URL of the Nextcloud instance to start the real + participant in. + :param headless: whether the browser will be started in headless mode or + not; headless mode is used by default. + :param remoteSeleniumUrl: the URL of the Selenium server to connect to; + the local server is used by default. + """ + + self.nextcloudUrl = nextcloudUrl + + self.seleniumHelper = SeleniumHelper() + + if browser == 'chrome': + self.seleniumHelper.startChrome(headless, remoteSeleniumUrl) + elif browser == 'firefox': + self.seleniumHelper.startFirefox(headless, remoteSeleniumUrl) + else: + raise Exception('Invalid browser: ' + browser) + + self.seleniumHelper.driver.get(nextcloudUrl) + + def login(self, user, appToken): + """ + Logs in Nextcloud as the given user with the given app token. + + :param user: the ID of the user to log as. + :param appToken: an app token of the user. + """ + + # Fetching a Nextcloud URL in the browser console with a user and an app + # token implicitly does a login with that user. Visiting any page in the + # Nextcloud server will be done as a logged in user after that. + self.seleniumHelper.executeAsync(''' + const fetchOptions = { + headers: { + 'Authorization': 'Basic ' + btoa(\'''' + user + ':' + appToken + '''\'), + }, + } + + await fetch(\'''' + self.nextcloudUrl + '''\', fetchOptions) + ''') + + def joinRoom(self, token): + """ + Joins the room with the given token. + + If no login was done before the participant will join as a guest. + + :param token: the token of the room to join. + """ + + self.seleniumHelper.driver.get(self.nextcloudUrl + '/call/' + token) + + def joinCall(self): + """ + Joins (or starts) the call in the current room. + + A room must have been joined before joining the call. + """ + + self.seleniumHelper.driver.find_element(By.CSS_SELECTOR, '.top-bar #call_button').click() + + try: + # If the device selector is shown click on the "Join call" button + # in the dialog to actually join the call. + WebDriverWait(self.seleniumHelper.driver, timeout=5).until(lambda driver: driver.find_element(By.CSS_SELECTOR, '.device-checker #call_button')) + self.seleniumHelper.driver.find_element(By.CSS_SELECTOR, '.device-checker #call_button').click() + except: + pass + + def leaveCall(self): + """ + Leaves the current call. + + The call must have been joined first. + """ + + self.seleniumHelper.driver.find_element(By.CSS_SELECTOR, '.top-bar #call_button').click() + + +_talkbuchetMode = '' + +_browser = '' +_browserDefault = '' + +_nextcloudUrl = '' +_remoteSeleniumUrl = '' +_headless = True + +_user = '' +_appToken = '' + +_token = '' + +_audio = False +_video = False + +def _isValidBrowser(): + if not _browser: + print("Set browser first") + return False + + if _remoteSeleniumUrl and _browser == 'default': + print("Set an explicit browser name to be used in the remote Selenium instance") + return False + + if _browser == 'default' and not _browserDefault: + print("Set an explicit browser name, no default browser found") + return False + + return True + +def _findDefaultBrowser(): + global _browserDefault + + # Try to get the browser from the Selenium Docker image. + try: + _browserDefault = Path('/opt/selenium/browser_name').read_text().strip() + except: + pass + + if _browserDefault: + setBrowser('default') + else: + print('No default browser found, please set the browser to use with setBrowser("chrome") or setBrowser("firefox")') + +def _getBrowser(): + if _browser == 'chrome' or (_browser == 'default' and _browserDefault == 'chrome'): + return 'chrome' + + return 'firefox' + +def setBrowser(browser): + """ + Sets the browser to use. + + Supported browsers are "chrome" and "firefox"; the browser needs to be + available in the Selenium server. + + The special value "default" (which is the default value) can be set to try + to find which is the default browser in the Selenium server and use it + without having to specify it. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param browser: "default", "chrome" or "firefox". + """ + + if browser != 'default' and browser != 'chrome' and browser != 'firefox': + print('Browser value not valid. Allowed values: "default", "chrome" or "firefox"') + return + + global _browser + _browser = browser + +def setTarget(nextcloudUrl): + """ + Sets the Nextcloud URL to use. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param nextcloudUrl: the URL of the Nextcloud instance to test against + (for example, "https://cloud.mydomain.com"). + """ + + global _nextcloudUrl + _nextcloudUrl = nextcloudUrl + +def setHeadless(headless): + """ + Sets whether the browsers will be started in headless mode or not. + + By default browsers are started in headless mode, as each instance uses a + little less memory. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param headless: True for headless mode, False otherwise. + """ + + global _headless + _headless = headless + +def setRemoteSeleniumUrl(remoteSeleniumUrl): + """ + Sets the URL of the remote Selenium server to use. + + By default the local Selenium server is used. + + When a remote Selenium server is used its session timeout (which is + independent from the timeouts set in the driver) must be kept in mind, as it + can cause the browser to "unexpectedly" close. Also note that each + Talkbuchet wrapper will use its own browser instance, so the remote Selenium + server should have enough available sessions for all the instances running + at the same time (for example, if several virtual participants are used). + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param remoteSeleniumUrl: the URL of the remote Selenium server, or None to + use the local one. + """ + + global _remoteSeleniumUrl + _remoteSeleniumUrl = remoteSeleniumUrl + +def setCredentials(user, appToken): + """ + Sets the credentials to use. + + An app token/password can be generated in the Security section of the + personal settings (index.php/settings/user/security). + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param user: the user ID. + :param appToken: the app token for the user. + """ + + global _user, _appToken + _user = user + _appToken = appToken + +def setToken(token): + """ + Sets the conversation token to use. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param token: the conversation token. + """ + + global _token + _token = token + +def setMedia(audio, video): + """ + Sets the media to be started in the Talkbuchet wrappers. + + By default in siege mode audio will be used, and in virtual participant + mode neither audio nor video will be used. + + Note that audio will be used too in siege mode even if both audio and video + are disabled, as some media needs to be published. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param audio: True to start audio, False otherwise + :param video: True to start video, False otherwise + """ + + global _audio, _video + _audio = audio + _video = video + + +_publishersCount = None +_subscribersPerPublisherCount = None + +sieges = [] + +def switchToSiegeMode(): + """ + Sets the siege mode as the active one. + + This adjusts the global helper functions to those relevant for this mode + (so, for example, there will be no function to add a virtual participant). + + A siege can be started in the following way: + >>>> setTarget('https://THE-NEXTCLOUD-DOMAIN') + >>>> setCredentials('THE-USER-ID', 'THE-APP-TOKEN') + >>>> setPublishersAndSubscribersCount(XXX, YYY) + >>>> startSiege() + + Note that a conversation token does not need to be set, except if the server + is configured in conversation clustering mode. + + Setting the publishers and subscribers count is not mandatory, but it is + recommended to adjust it based on the maximum number supported by the + client machine running the browser, as well as the values that need to be + tested on the server. + + In any case, it is recommended to initially set a low number, for example + "setPublishersAndSubscribersCount(1, 2)", start a siege to verify that + everything works as expected, and then perform the real test. + + Note that starting a new siege does not stop the previous one. That should + be explicitly done by calling "endSiege()". Starting several sieges instead + of a single siege with a higher number of publishers and subscribers could + be needed in powerful client machines that can handle more connections than + what a single browser is able to (for example, Chromium has a hardcoded + limit on the maximum number of concurrent connections). + + Sieges are done with audio only connections by default. If a different media + needs to be used (either video but not audio, or both audio and video) this + needs to be specified (before starting the siege) with: + >>>> setMedia(CONNECT-WITH-AUDIO, CONNECT-WITH-VIDEO) + + When a siege is active it is possible to check the state of the publisher + connections with "checkPublishersConnections()" and the state of the + subscriber connections with "checkSubscribersConnections()". + + Global functions for additional actions, like enabling or disabling media + during the siege, are not provided. They must be directly called on the + Talkbuchet wrapper objects in the "sieges" list. For example: + >>>> sieges[0].setAudioEnabled(False) + """ + + def _isValidConfiguration(): + if not _isValidBrowser(): + return False + + if not _nextcloudUrl: + print("Set target Nextcloud URL first") + return False + + if not _user or not _appToken: + print("Set credentials (user and app token) first") + return False + + return True + + def setPublishersAndSubscribersCount(publishersCount, subscribersPerPublisherCount): + """ + Sets the number of publishers and subscribers per publisher to use. + + By the default the number from Talkbuchet.js is used, which is 5 + publishers and 40 subscribers per publisher. + + This is used only for the global helper functions and is not taken into + account if a Talkbuchet wrapper is manually created. + + :param publishersCount: the number of publishers. + :param subscribersPerPublisherCount: the number of subscribers for each + publisher. + """ + + global _publishersCount, _subscribersPerPublisherCount + _publishersCount = publishersCount + _subscribersPerPublisherCount = subscribersPerPublisherCount + + def startSiege(): + """ + Starts a siege. + + The global target Nextcloud URL and credentials need to be set first. + + If global token, media or publishers and subscribers count were set they + will be applied to the siege. + + Note that changing any of those values later will have no effect on a + running siege, the updated value will be used only on sieges started + after they were changed. + + If there is already a running siege it will not be ended when a new one + is started; the new one will run along the previous one. + """ + + if not _isValidConfiguration(): + return + + siege = Siege(_getBrowser(), _nextcloudUrl, _headless, _remoteSeleniumUrl) + + sieges.append(siege) + + siege.setCredentials(_user, _appToken) + + if _token: + siege.setToken(_token) + + if _audio or _video: + siege.startMedia(_audio, _video) + + if _publishersCount != None and _subscribersPerPublisherCount != None: + siege.setPublishersAndSubscribersCount(_publishersCount, _subscribersPerPublisherCount) + + siege.siege() + + def _getSiegeIndex(index = None): + if not sieges: + return -1 + + if index == None and len(sieges) > 1: + print("Index needs to be specified") + return -1 + + if index == None and len(sieges) == 1: + index = 0 + + if index < 0 or index >= len(sieges): + print("Index out of range") + return -1 + + return index + + def checkPublishersConnections(index = None): + """ + Checks the publisher connections of the siege with the given index. + + If a single siege is active the index does not need to be specified. + + :param index: the index in :py:data:`sieges` of the siege to check its + publisher connections. + """ + + index = _getSiegeIndex(index) + if index < 0: + return + + sieges[index].checkPublishersConnections() + + def checkSubscribersConnections(index = None): + """ + Checks the subscriber connections of the siege with the given index. + + If a single siege is active the index does not need to be specified. + + :param index: the index in :py:data:`sieges` of the siege to check its + subscriber connections. + """ + + index = _getSiegeIndex(index) + if index < 0: + return + + sieges[index].checkSubscribersConnections() + + def endSiege(index = None): + """ + Ends the siege with the given index. + + If a single siege is active the index does not need to be specified. + + :param index: the index in :py:data:`sieges` of the siege to remove. + """ + + index = _getSiegeIndex(index) + if index < 0: + return + + sieges[index].closeConnections() + del sieges[index] + + if globals()['_talkbuchetMode'] == 'virtualParticipant': + if removeVirtualParticipants: + removeVirtualParticipants() + + del globals()['prepareVirtualParticipant'] + del globals()['prepareVirtualParticipants'] + del globals()['startVirtualParticipants'] + del globals()['startVirtualParticipantsParallel'] + del globals()['stopVirtualParticipants'] + del globals()['stopVirtualParticipantsParallel'] + del globals()['addVirtualParticipant'] + del globals()['addVirtualParticipants'] + del globals()['removeVirtualParticipant'] + del globals()['removeVirtualParticipants'] + + if globals()['_talkbuchetMode'] == 'realParticipant': + if removeRealParticipants: + removeRealParticipants() + + del globals()['addRealParticipant'] + del globals()['addRealParticipants'] + del globals()['removeRealParticipant'] + del globals()['removeRealParticipants'] + + globals()['setPublishersAndSubscribersCount'] = setPublishersAndSubscribersCount + globals()['startSiege'] = startSiege + globals()['checkPublishersConnections'] = checkPublishersConnections + globals()['checkSubscribersConnections'] = checkSubscribersConnections + globals()['endSiege'] = endSiege + + globals()['_talkbuchetMode'] = 'siege' + + +virtualParticipants = [] + +def switchToVirtualParticipantMode(): + """ + Sets the virtual participant mode as the active one. + + This adjusts the global helper functions to those relevant for this mode + (so, for example, there will be no function to start a siege). + + Virtual participants can be added to a call in the following way: + >>>> setTarget('https://THE-NEXTCLOUD-DOMAIN') + >>>> setToken('THE-CONVERSATION-TOKEN') + >>>> addVirtualParticipants(NUMBER-OF-VIRTUAL-PARTICIPANTS) + + If no credentials are set the added participants will be guests. To add a + registered user (note that the same user can be added several times) set the + credentials first before adding the virtual participants: + >>>> setCredentials('THE-USER-ID', 'THE-APP-TOKEN') + + If no media is explicitly set virtual participants will join without media. + To join with specific media set the desired type first before adding the + virtual participants: + >>>> setMedia(JOIN-WITH-AUDIO, JOIN-WITH-VIDEO) + + Note that adding a new participant does not remove the previous ones. That + should be explicitly done by calling "removeVirtualParticipants()" (or + "removeVirtualParticipant(INDEX)" to remove just a specific participant). + Therefore, it is possible to add several participants with different + parameters (like several guests and then several users, or participants with + and without media) by setting the parameters, calling + "addVirtualParticipants(NUMBER)", setting the new parameters and calling + "addVirtualParticipants(NUMBER)" again. + + In case joining/leaving a call should be tested, it makes sense to use + "prepareVirtualParticipant()" / "prepareVirtualParticipants(NUMBER)" and + then start them with "startVirtualParticipants()" and stop them with + "stopVirtualParticipants()". In case joining/leaving should be done in + parallel one can use "startVirtualParticipantsParallel()" and + "stopVirtualParticipantsParallel()". + + Global functions provided for virtual participants only cover adding and + removing them. Any specific action, like enabling or disabling media of a + virtual participant, must be directly called on the Talkbuchet wrapper + objects in the "virtualParticipants" list. For example: + >>>> virtualParticipants[0].setAudioEnabled(False) + + Note that clients may not show any nick for the virtual participants unless + explicitly given, even if the virtual participant is a registered user. The + nick for a specific virtual participant can be set with: + >>>> virtualParticipants[INDEX].sendNickThroughDataChannel(NICK) + """ + + def _isValidConfiguration(): + if not _isValidBrowser(): + return False + + if not _nextcloudUrl: + print("Set target Nextcloud URL first") + return False + + if not _token: + print("Set conversation token first") + return False + + return True + + def prepareVirtualParticipant(): + """ + Prepares a single virtual participant. + + The global target Nextcloud URL and conversation token need to be set + first. + + If global credentials or media were set they will be applied to the + virtual participant. + + Note that changing any of those values later will have no effect on an + existing virtual participant, the updated value will be used only by + virtual participants added after they were changed. + + This method just prepares a virtual participant, but does not start it. + See :py:func:`addVirtualParticipant` as an alternative. + """ + + if not _isValidConfiguration(): + return + + virtualParticipant = VirtualParticipant(_getBrowser(), _nextcloudUrl, _headless, _remoteSeleniumUrl) + + virtualParticipants.append(virtualParticipant) + + virtualParticipant.setToken(_token) + + if _user or _appToken: + virtualParticipant.setCredentials(_user, _appToken) + + if _audio or _video: + virtualParticipant.startMedia(_audio, _video) + + return virtualParticipant + + def prepareVirtualParticipants(count): + """ + Prepares as many virtual participants as the given count. + + See :py:func:`prepareVirtualParticipant`. + + :param count: the number of virtual participants to prepare. + """ + + if not _isValidConfiguration(): + return + + for i in range(count): + prepareVirtualParticipant() + + print('.', end='', flush=True) + + print("") + + def startVirtualParticipants(): + """ + Starts all virtual participants which are prepared. + + Note that there is no check if a virtual participant was already started + before. The result of starting again a virtual participant before + stopping it first is undefined, no matter if the virtual participant was + started with any of the "startVirtualParticipants" or + "addVirtualParticipant" variants. + + See :py:func:`prepareVirtualParticipant`. + """ + for virtualParticipant in virtualParticipants: + virtualParticipant.startVirtualParticipant() + + def startVirtualParticipantsParallel(): + """ + Starts all virtual participants. + + Same as :py:func:`startVirtualParticipants`, but starting each virtual + participant in parallel. + + This method returns before the virtual participants were fully started, + so it should be ensured that starting them finished before starting more + virtual participants or stopping them. + """ + + for virtualParticipant in virtualParticipants: + startThread = threading.Thread(target=virtualParticipant.startVirtualParticipant) + startThread.start() + + def stopVirtualParticipants(): + """ + Stops all virtual participants. + + The participants are not removed and can be started again. + See :py:func:`prepareVirtualParticipant`. + + Note that there is no check if a virtual participant was started/stopped + before. + + See :py:func:`prepareVirtualParticipant`. + """ + + for virtualParticipant in virtualParticipants: + virtualParticipant.stopVirtualParticipant() + + def stopVirtualParticipantsParallel(): + """ + Stops all virtual participants. + + Same as :py:func:`stopVirtualParticipants`, but stopping each virtual + participant in parallel. + + This method returns before the virtual participants were fully stopped, + so it should be ensured that stopping them finished before starting or + stopping them again. + """ + + for virtualParticipant in virtualParticipants: + stopThread = threading.Thread(target=virtualParticipant.stopVirtualParticipant) + stopThread.start() + + def addVirtualParticipant(): + """ + Adds a single virtual participant. + + The global target Nextcloud URL and conversation token need to be set + first. + + If global credentials or media were set they will be applied to the + virtual participant. + + Note that changing any of those values later will have no effect on an + existing virtual participant, the updated value will be used only by + virtual participants added after they were changed. + + This method prepares a participant and immediately starts it. + """ + + if not _isValidConfiguration(): + return + + virtualParticipant = prepareVirtualParticipant() + + virtualParticipant.startVirtualParticipant() + + def addVirtualParticipants(count): + """ + Adds as many virtual participants as the given count. + + See :py:func:`addVirtualParticipant`. + + :param count: the number of virtual participants to add. + """ + + if not _isValidConfiguration(): + return + + for i in range(count): + addVirtualParticipant() + + print('.', end='', flush=True) + + print("") + + def removeVirtualParticipant(index): + """ + Removes the virtual participant with the given index. + + :param index: the index in :py:data:`virtualParticipants` of the virtual + participant to remove. + """ + + if index < 0 or index >= len(virtualParticipants): + print("Index out of range") + return + + virtualParticipants[index].stopVirtualParticipant() + del virtualParticipants[index] + + def removeVirtualParticipants(): + """ + Removes all the virtual participants previously added. + """ + + while virtualParticipants: + removeVirtualParticipant(0) + + if globals()['_talkbuchetMode'] == 'siege': + if endSiege: + endSiege() + + del globals()['setPublishersAndSubscribersCount'] + del globals()['startSiege'] + del globals()['checkPublishersConnections'] + del globals()['checkSubscribersConnections'] + del globals()['endSiege'] + + if globals()['_talkbuchetMode'] == 'realParticipant': + if removeRealParticipants: + removeRealParticipants() + + del globals()['addRealParticipant'] + del globals()['addRealParticipants'] + del globals()['removeRealParticipant'] + del globals()['removeRealParticipants'] + + globals()['prepareVirtualParticipant'] = prepareVirtualParticipant + globals()['prepareVirtualParticipants'] = prepareVirtualParticipants + globals()['startVirtualParticipants'] = startVirtualParticipants + globals()['startVirtualParticipantsParallel'] = startVirtualParticipantsParallel + globals()['stopVirtualParticipants'] = stopVirtualParticipants + globals()['stopVirtualParticipantsParallel'] = stopVirtualParticipantsParallel + globals()['addVirtualParticipant'] = addVirtualParticipant + globals()['addVirtualParticipants'] = addVirtualParticipants + globals()['removeVirtualParticipant'] = removeVirtualParticipant + globals()['removeVirtualParticipants'] = removeVirtualParticipants + + globals()['_talkbuchetMode'] = 'virtualParticipant' + + +realParticipants = [] + +def switchToRealParticipantMode(): + """ + Sets the real participant mode as the active one. + + This adjusts the global helper functions to those relevant for this mode + (so, for example, there will be no function to start a siege). + + Real participants can be added to a conversation in the following way: + >>>> setTarget('https://THE-NEXTCLOUD-DOMAIN') + >>>> setToken('THE-CONVERSATION-TOKEN') + >>>> addRealParticipants(NUMBER-OF-REAL-PARTICIPANTS) + + If no credentials are set the added participants will be guests. To add a + registered user (note that the same user can be added several times) set the + credentials first before adding the real participants: + >>>> setCredentials('THE-USER-ID', 'THE-APP-TOKEN') + + Note that adding a new participant does not remove the previous ones. That + should be explicitly done by calling "removeRealParticipants()" (or + "removeRealParticipant(INDEX)" to remove just a specific participant). + Therefore, it is possible to add several participants with different + parameters (like several guests and then several users) by setting the + parameters, calling "addRealParticipants(NUMBER)", setting the new + parameters and calling "addRealParticipants(NUMBER)" again. + + Global functions provided for real participants only cover joining and + leaving the conversation. Joining the call must be directly done on the + Talkbuchet wrapper objects in the "realParticipants" list with: + >>>> realParticipants[INDEX].joinCall() + """ + + def _isValidConfiguration(): + if not _isValidBrowser(): + return False + + if not _nextcloudUrl: + print("Set target Nextcloud URL first") + return False + + if not _token: + print("Set conversation token first") + return False + + return True + + def addRealParticipant(): + """ + Adds a single real participant. + + The global target Nextcloud URL and conversation token need to be set + first. + + If global credentials were set the user will be logged in with them. + + Note that changing any of those values later will have no effect on an + existing real participant, the updated value will be used only by real + participants added after they were changed. + """ + + if not _isValidConfiguration(): + return + + realParticipant = RealParticipant(_getBrowser(), _nextcloudUrl, _headless, _remoteSeleniumUrl) + + realParticipants.append(realParticipant) + + if _user or _appToken: + realParticipant.login(_user, _appToken) + + realParticipant.joinRoom(_token) + + def addRealParticipants(count): + """ + Adds as many real participants as the given count. + + See :py:func:`addRealParticipant`. + + :param count: the number of real participants to add. + """ + + if not _isValidConfiguration(): + return + + for i in range(count): + addRealParticipant() + + print('.', end='', flush=True) + + print("") + + def removeRealParticipant(index): + """ + Removes the real participant with the given index. + + :param index: the index in :py:data:`realParticipants` of the real + participant to remove. + """ + + if index < 0 or index >= len(realParticipants): + print("Index out of range") + return + + del realParticipants[index] + + def removeRealParticipants(): + """ + Removes all the real participants previously added. + """ + + while realParticipants: + removeRealParticipant(0) + + if globals()['_talkbuchetMode'] == 'siege': + if endSiege: + endSiege() + + del globals()['setPublishersAndSubscribersCount'] + del globals()['startSiege'] + del globals()['checkPublishersConnections'] + del globals()['checkSubscribersConnections'] + del globals()['endSiege'] + + if globals()['_talkbuchetMode'] == 'virtualParticipant': + if removeVirtualParticipants: + removeVirtualParticipants() + + del globals()['prepareVirtualParticipant'] + del globals()['prepareVirtualParticipants'] + del globals()['startVirtualParticipants'] + del globals()['startVirtualParticipantsParallel'] + del globals()['stopVirtualParticipants'] + del globals()['stopVirtualParticipantsParallel'] + del globals()['addVirtualParticipant'] + del globals()['addVirtualParticipants'] + del globals()['removeVirtualParticipant'] + del globals()['removeVirtualParticipants'] + + globals()['addRealParticipant'] = addRealParticipant + globals()['addRealParticipants'] = addRealParticipants + globals()['removeRealParticipant'] = removeRealParticipant + globals()['removeRealParticipants'] = removeRealParticipants + + globals()['_talkbuchetMode'] = 'realParticipant' + + +def _deleteTalkbuchetInstancesOnExit(): + while sieges: + del sieges[0] + + while virtualParticipants: + del virtualParticipants[0] + + while realParticipants: + del realParticipants[0] + +# Talkbuchet instances should be explicitly deleted before exiting, as if they +# are implicitly deleted while exiting the Selenium driver may not cleanly quit. +atexit.register(_deleteTalkbuchetInstancesOnExit) + +_findDefaultBrowser() + +print('Full documentation can be shown by calling help(__name__)') + +switchToSiegeMode() diff --git a/docs/Talkbuchet-run.sh b/docs/Talkbuchet-run.sh new file mode 100755 index 0000000..3769118 --- /dev/null +++ b/docs/Talkbuchet-run.sh @@ -0,0 +1,247 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: AGPL-3.0-or-later + +# Helper script to run Talkbuchet, the helper tool for load/stress testing of +# Nextcloud Talk. +# +# Talkbuchet is a JavaScript script (Talkbuchet.js), and it is run using a web +# browser. A Python script (Talkbuchet-cli.py) is provided to launch a web +# browser, load Talkbuchet and control it from a command line interface (which +# requires Selenium and certain Python packages to be available in the system). +# A Bash script (Talkbuchet-run.sh) is provided to set up a Docker container +# with Selenium, a web browser and all the needed Python dependencies for +# Talkbuchet-cli.py. +# +# Please refer to the documentation in Talkbuchet.js and Talkbuchet-cli.py for +# information on Talkbuchet and how to control it. +# +# Talkbuchet-run.sh creates a Selenium container, installs all the needed +# dependencies in it and executes Talkbuchet-cli.py inside the container. The +# command line interface will automatically use the Selenium server from the +# container, so as soon as the command line interface is shown Talkbuchet is +# ready to be used. If the container exists already the previous container will +# be reused and Talkbuchet-run.sh will simply execute Talkbuchet-cli.py in it. +# +# Due to that the Docker container will not be stopped nor removed when the +# script exits (except when the container was created but it could not be +# started); that must be explicitly done once the container is no longer needed. +# If the Selenium container can not be started then the script will be exited +# immediately with an error state; the most common cause for the Selenium +# container to fail to start is that another process is already using the mapped +# ports in the host. +# +# As the web browsers are run inside the Docker container they are not visible +# by default. However, they can be viewed using VNC (for example, +# "vncviewer 127.0.0.1:5900"). The Selenium Docker images also support web VNC, +# so the web browsers can also be viewed navigating to "http://127.0.0.1:7900" +# in a web browser outside the Docker container. In both cases, when asked for +# the password use "secret". +# +# Besides that, by default Talkbuchet-cli.py starts the web browsers in headless +# mode, so "setHeadless(False)" should be called in the command line interface +# before starting a web browser to be able to view it. +# +# +# +# DOCKER AND PERMISSIONS +# +# To perform its job, this script requires the "docker" command to be available. +# +# The Docker Command Line Interface (the "docker" command) requires special +# permissions to talk to the Docker daemon, and those permissions are typically +# available only to the root user. Please see the Docker documentation to find +# out how to give access to a regular user to the Docker daemon: +# https://docs.docker.com/engine/installation/linux/linux-postinstall/ +# +# Note, however, that being able to communicate with the Docker daemon is the +# same as being able to get root privileges for the system. Therefore, you must +# give access to the Docker daemon (and thus run this script as) ONLY to trusted +# and secure users: +# https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface + +# Sets the variables that abstract the differences in command names and options +# between operating systems. +# +# Switches between timeout on GNU/Linux and gtimeout on macOS (same for mktemp +# and gmktemp). +function setOperatingSystemAbstractionVariables() { + case "$OSTYPE" in + darwin*) + if [ "$(which gtimeout)" == "" ]; then + echo "Please install coreutils (brew install coreutils)" + exit 1 + fi + + MKTEMP=gmktemp + TIMEOUT=gtimeout + DOCKER_OPTIONS="-e no_proxy=localhost " + ;; + linux*) + MKTEMP=mktemp + TIMEOUT=timeout + DOCKER_OPTIONS=" " + ;; + *) + echo "Operating system ($OSTYPE) not supported" + exit 1 + ;; + esac +} + +# Removes Docker container if it was created but failed to start. +function cleanUp() { + # Disable (yes, "+" disables) exiting immediately on errors to ensure that + # all the cleanup commands are executed (well, no errors should occur during + # the cleanup anyway, but just in case). + set +o errexit + + # The name filter must be specified as "^/XXX$" to get an exact match; using + # just "XXX" would match every name that contained "XXX". + if [ -n "$(docker ps --all --quiet --filter status=created --filter name="^/$CONTAINER$")" ]; then + echo "Removing Docker container $CONTAINER" + docker rm --volumes --force $CONTAINER + fi +} + +# Exit immediately on errors. +set -o errexit + +# Execute cleanUp when the script exits, either normally or due to an error. +trap cleanUp EXIT + +# Ensure working directory is script directory, as some actions (like copying +# Talkbuchet to the container) expect that. +cd "$(dirname $0)" + +HELP="Usage: $(basename $0) [OPTION]... + +Options (all options can be omitted, but when present they must appear in the +following order): +--help prints this help and exits. +--container CONTAINER_NAME the name to assign to the container. Defaults to + talkbuchet-selenium, talkbuchet-selenium-chrome or talkbuchet-selenium-firefox + depending on the image options. +--selenium-image SELENIUM_IMAGE or --chrome or --firefox: + --selenium-image SELENIUM_IMAGE the name of the Selenium image to use. No + matter the image, the default container name will be talkbuchet-selenium. If + no specific image is given a Firefox image will be used by default (and + talkbuchet-selenium-firefox will be used as the default container name). + --chrome use a Selenium image with Chrome. + --firefox use a Selenium image with Firefox. +--vnc-port PORT_NUMBER the port used to map the VNC server in the host. Defaults + to 5900. +--web-vnc-port PORT_NUMBER the port used to map the web VNC server in the host. + Defaults to 7900. +--dev-shm-size SIZE the size to assign to /dev/shm in the Docker container. + Defaults to 2g" +if [ "$1" = "--help" ]; then + echo "$HELP" + + exit 0 +fi + +CUSTOM_CONTAINER_NAME=false +CONTAINER="talkbuchet-selenium-firefox" +if [ "$1" = "--container" ]; then + CONTAINER="$2" + CUSTOM_CONTAINER_NAME=true + + shift 2 +fi + +CUSTOM_CONTAINER_OPTIONS=false + +SELENIUM_IMAGE="selenium/standalone-firefox:99.0-20220427" +if [ "$1" = "--selenium-image" ]; then + SELENIUM_IMAGE="$2" + CUSTOM_CONTAINER_OPTIONS=true + + if ! $CUSTOM_CONTAINER_NAME; then + CONTAINER="talkbuchet-selenium" + fi + + shift 2 +elif [ "$1" = "--chrome" ]; then + SELENIUM_IMAGE="selenium/standalone-chrome:101.0-20220427" + + if $CUSTOM_CONTAINER_NAME; then + CUSTOM_CONTAINER_OPTIONS=true + else + CONTAINER="talkbuchet-selenium-chrome" + fi + + shift 1 +elif [ "$1" = "--firefox" ]; then + if $CUSTOM_CONTAINER_NAME; then + CUSTOM_CONTAINER_OPTIONS=true + fi + + shift 1 +fi + +VNC_PORT="5900" +if [ "$1" = "--vnc-port" ]; then + VNC_PORT="$2" + CUSTOM_CONTAINER_OPTIONS=true + + shift 2 +fi + +WEB_VNC_PORT="7900" +if [ "$1" = "--web-vnc-port" ]; then + WEB_VNC_PORT="$2" + CUSTOM_CONTAINER_OPTIONS=true + + shift 2 +fi + +# 2g is the default value recommended in the documentation of the Docker images +# for Selenium: +# https://github.com/SeleniumHQ/docker-selenium#--shm-size2g +DEV_SHM_SIZE="2g" +if [ "$1" = "--dev-shm-size" ]; then + DEV_SHM_SIZE="$2" + CUSTOM_CONTAINER_OPTIONS=true + + shift 2 +fi + +if [ -n "$1" ]; then + echo "Invalid option (or at invalid position): $1 + +$HELP" + + exit 1 +fi + +setOperatingSystemAbstractionVariables + +# If the container is not found a new one is prepared. Otherwise the existing +# container is used. +# +# The name filter must be specified as "^/XXX$" to get an exact match; using +# just "XXX" would match every name that contained "XXX". +if [ -z "$(docker ps --all --quiet --filter name="^/$CONTAINER$")" ]; then + echo "Creating Selenium container" + docker run --detach --name=$CONTAINER --publish $VNC_PORT:5900 --publish $WEB_VNC_PORT:7900 --shm-size=$DEV_SHM_SIZE $DOCKER_OPTIONS $SELENIUM_IMAGE + + echo "Installing required Python modules" + docker exec --user root $CONTAINER bash -c "apt-get update && apt-get install --assume-yes python3-pip && pip install selenium websocket-client" + + echo "Copying Talkbuchet to the container" + docker cp Talkbuchet.js $CONTAINER:/tmp/ + docker cp Talkbuchet-cli.py $CONTAINER:/tmp/ +elif $CUSTOM_CONTAINER_OPTIONS; then + echo "WARNING: Using existing container, custom container options ignored" +fi + +# Start existing container if it is stopped. +if [ -n "$(docker ps --all --quiet --filter status=exited --filter name="^/$CONTAINER$")" ]; then + echo "Starting Selenium container" + docker start $CONTAINER +fi + +echo "Starting Talkbuchet CLI" +docker exec --tty --interactive --workdir /tmp $CONTAINER python3 -i /tmp/Talkbuchet-cli.py diff --git a/docs/Talkbuchet.js b/docs/Talkbuchet.js new file mode 100644 index 0000000..fc31103 --- /dev/null +++ b/docs/Talkbuchet.js @@ -0,0 +1,1242 @@ +/** + * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +/** + * Talkbuchet is the helper tool for load/stress testing of Nextcloud Talk. + * + * Talkbuchet is a JavaScript script (Talkbuchet.js), and it is run using a web + * browser. A Python script (Talkbuchet-cli.py) is provided to launch a web + * browser, load Talkbuchet and control it from a command line interface (which + * requires Selenium and certain Python packages to be available in the system). + * A Bash script (Talkbuchet-run.sh) is provided to set up a Docker container + * with Selenium, a web browser and all the needed Python dependencies for + * Talkbuchet-cli.py. + * + * Please refer to the documentation in Talkbuchet-cli.py and Talkbuchet-run.sh + * for information on how to control Talkbuchet and easily run it. + * + * A High Performance Backend (HPB) server must be configured in Nextcloud Talk + * to use Talkbuchet. + * + * HOW TO SETUP (without using the CLI): + * ----------------------------------------------------------------------------- + * - In the browser, log in the Nextcloud server (with the same user as in this + * script). + * - Copy and paste the full script in the console of the browser. + * + * + * + * ----------------------------------------------------------------------------- + * SIEGE MODE + * ----------------------------------------------------------------------------- + * + * Siege mode is used for load testing of the Janus gateway running in the HPB + * server. In siege mode Talkbuchet creates M publishers and N subscribers for + * each publisher for a total of M+M*N connections with the Janus gateway. + * Therefore, it can be used to verify that the server will be able to withstand + * certain number of media connections (audio, video or both audio and video). + * + * In a real call every participant will subscribe to the publishers of the + * other participants. That is, for X participants, Y of them publishers, there + * will be (X-1)*Y subscribers. However, note that some participants may not be + * publishers, for example, if the do not have publishing permissions, or if + * they never had a microphone nor a camera selected (although they will be + * publishers if the microphone and camera are selected but disabled, or if the + * microphone or camera is no longer selected but was selected at some point + * during the call). + * + * For example, in a normal call between 10 participants there will be 10 + * publishers and (10-1)*10=90 subscribers for a total of 100 connections. + * However, if only two participants have publishing permissions then there will + * be 2 publishers and (10-1)*2=18 subscribers for a total of 20 connections. + * + * To use the siege mode the signaling server of the HPB must be configured to + * allow subscribing any stream: + * https://github.com/strukturag/nextcloud-spreed-signaling/blob/a663dd43f90b0876630250012bb716136920fcd3/server.conf.in#L32-L35 + * + * HOW TO RUN: + * ----------------------------------------------------------------------------- + * - Set the user and appToken (a user must be used; guests do not work; + * generate an apptoken at index.php/settings/user/security) by calling + * "setCredentials(user, appToken)" in the console. + * - If HPB clustering is enabled, set the token of a conversation (otherwise + * leave empty) by calling "setToken(token)" in the console. + * - If media other than just audio should be used, start it by calling + * "startMedia(audio, video)" in the console. + * - Set the desired numbers of publishers and subscribers per publisher (in a + * regular call with N participants you would have N publishers and N-1 + * subscribers) by calling "setPublishersAndSubscribersCount(publishersCount, + * subscribersPerPublisherCount)" in the console. + * - Once all the needed parameters are set execute "siege()" in the console. + * - To run it again execute "siege()" again in the console; if any parameter + * needs to be changed it is recommended to first stop the previous siege by + * calling "closeConnections()" in the console before changing the parameters. + * + * HOW TO ENABLE AND DISABLE THE MEDIA DURING A TEST: + * ----------------------------------------------------------------------------- + * You can manually enable and disable the media during a test by running the + * following commands in the browser console: + * - For audio: + * setAudioEnabled(TRUE_OR_FALSE) + * - For video: + * setVideoEnabled(TRUE_OR_FALSE) + * + * Note that you can only enable and disable the original media specified in the + * "getUserMedia" call. + * + * Additionally, you can also enable and disable the sent media streams during + * a test by running the following commands in the browser console: + * - For audio: + * setSentAudioStreamEnabled(TRUE_OR_FALSE) + * - For video: + * setSentVideoStreamEnabled(TRUE_OR_FALSE) + * + * Currently Firefox behaviour is the same whether the media is disabled or the + * sent media stream is disabled, so this makes no difference. Chromium, on the + * other hand, sends some media data when the media is disabled, but stops it + * when the sent media stream is disabled. In any case, please note that some + * data will be always sent as long as there is a connection open, even if no + * media is being sent. + * + * HOW TO CALIBRATE: + * ----------------------------------------------------------------------------- + * The script starts as many publishers and subscribers for each publisher as + * specified, each one being a real and independent peer connection to Janus. + * Therefore, how many peer connections can be established with a single script + * run depends on the client machine, both its CPU and its network. + * + * You should first "calibrate" the client by running it with different numbers + * of publishers and subscribers to check how many peer connections are + * supported before doing the actual stress test on Janus. + * + * It is most likely that the CPU or network of a single client will be + * saturated before Janus is. The script will write to the console when a peer + * could not be connected or if it was disconnected after being connected; if + * there is a large number of those messages or the CPU consumption is very high + * the client has probably reached its limit. + * + * Besides the messages written by the script itself you can manually check the + * connection state by running the following commands in the browser console: + * - For the publishers: + * checkPublishersConnections() + * - For the subscribers: + * checkSubscribersConnections() + * + * DISCLAIMER: + * ----------------------------------------------------------------------------- + * Talk performs some optimizations during calls, like reducing the video + * quality based on the number of participants. This script does not take into + * account those things; it is meant to be used for stress tests of Janus rather + * than to accurately simulate Talk behaviour. + * + * Independently of that, please note that an accurate simulation would not be + * possible given that a single client has to behave as several different + * clients. In a real call each client could have a different behaviour (not + * only due to sending different media streams, but also from having different + * CPU and network conditions), and that might even also affect Janus and the + * server regarding very low level things (but relevant for performance on + * highly loaded systems) like caches. + * + * Nevertheless, if those things are kept in mind the script can be anyway used + * as a rough performance test of specific call scenarios. Just remember that in + * regular calls peer connections increase quadratically with the number of + * participants; specifically, publishers increase linearly while subscribers + * increase quadratically. + * + * For example a call between 10 participants has 10 publishers and 90 + * subscribers (9 for each publisher) for a total of 100 peer connections, while + * a call between 30 participants has 30 publishers and 870 subscribers (29 for + * each publisher) for a total of 900 peer connections. + + * Due to this, if you have several clients that can only withstand ~100 peer + * connections each in order to simulate a 30 participants call you could run + * the script with 3 publishers and 29 subscribers per publisher on 10 clients + * at the same time. + * + * + * + * ----------------------------------------------------------------------------- + * VIRTUAL PARTICIPANT MODE + * ----------------------------------------------------------------------------- + * + * Virtual participant mode is used for load testing of clients. From the point + * of view of the clients in a call the virtual participants are real + * participants (they can be just listeners, but they can publish audio and/or + * video), so several virtual participants can be added to a call to verify if + * a client running on a specific system will be able to withstand certain + * number of participants in a call. + * + * The reason to use virtual participants instead of real participants is that + * virtual participants are either just in the call or publishing media, but + * they will not subscribe to any other participant (which does not affect the + * other clients, only the HPB server). Due to this they need much less + * resources than real participants and therefore the system launching the test + * would be able to add a much higher number of virtual participants than of + * real participants. + * + * However, note that each web browser session can execute a single virtual + * participant. Due to this it is recommended to use Talkbuchet CLI instead to + * easily start several web browser sessions, each one with its own virtual + * participant, and control the virtual participants from the CLI. + * + * HOW TO RUN: + * ----------------------------------------------------------------------------- + * - Set the user and appToken (generate an apptoken at + * index.php/settings/user/security) by calling + * "setCredentials(user, appToken)" in the console. If credentials are not set + * a guest user will be used instead. + * - Set the token of the conversation by calling "setToken(token)" in the + * console. + * - Start the desired media by calling "startMedia(audio, video)" in the + * console. If not called (or both parameters are false) no media will be + * used. + * - Once all the needed parameters are set execute "startVirtualParticipant()" + * in the console. + * - To run it again execute "stopVirtualParticipant()" and then + * "startVirtualParticipant()" again in the console; if any parameter + * needs to be changed do it before starting the virtual participant again. + * + * TRIGGERING ACTIONS BY THE VIRTUAL PARTICIPANT: + * ----------------------------------------------------------------------------- + * In general, for load testing of clients it is enough to start the virtual + * participant and that is it. However, for development purposes it can be + * useful to simulate certain actions by the virtual participant. + * + * Currently all the actions are simulated through data channel messages; the + * equivalent signaling messages are not sent. + * + * The nick of the virtual participant can be set with: + * sendNickThroughDataChannel(NICK) + * + * Note that sending the nick is not limited to guests; even if the virtual + * participant is a registered user a nick can be sent. Moreover, clients may + * not show any name at all for the virtual participant of a registered user + * until a nick is sent, even if the user name is known by the client. + * + * If the virtual participant is a publisher the media can be enabled and + * disabled as described in the siege mode. However, that does not notify other + * participants in the call that the media state has changed. That can be done + * instead with: + * sendMediaEnabledStateThroughDataChannel(AUDIO_OR_VIDEO, TRUE_OR_FALSE) + * + * Similarly, when audio is enabled the message to notify other participants + * when the virtual participant started or stopped speaking can be sent with: + * sendSpeakingStateThroughDataChannel(TRUE_OR_FALSE) + * + * Note that the message is independent of the actual audio being sent; a + * "speaking" event can be sent when audio is silent, and a "stoppedSpeaking" + * event can be sent when audio is at full volume. + * + * DISCLAIMER: + * ----------------------------------------------------------------------------- + * Like in siege mode, virtual participants mode does not take into account the + * optimizations performed by Talk during calls, like reducing the video + * quality based on the number of participants. This script is not meant to + * accurately simulate Talk behaviour, but to provide a tool to perform rough + * performance tests of specific call scenarios. + * + * Therefore, it should be kept in mind that in a real call with several video + * participants the performance is very likely to be better than with several + * virtual participants with video, as in that case the video quality will not + * be adjusted based on the number of participants. Nevertheless, this script + * could still be used to simulate a worst case scenario. + */ + +// Sieges with guest users do not currently work, as they must join the +// conversation to not be kicked out from the signaling server. However, joining +// the conversation a second time causes the first guest to be unregistered. +// Regular users do not need to join the conversation, so the same user can be +// connected several times to the HPB. +let user = '' +let appToken = '' + +// The conversation token is only strictly needed for guests or if HPB +// clustering is enabled. +let token = '' + +// Number of streams to send +let publishersCount = 5 +// Number of streams to receive +let subscribersPerPublisherCount = 40 + +const mediaConstraints = { + audio: true, + video: false, +} + +let connectionWarningTimeout = 5000 + +/* + * End of configuration section + */ + +// To run the script the current page in the browser must be a page of the +// target Nextcloud instance, as cross-doman requests are not allowed, so the +// host is directly got from the current location. +const host = 'https://' + window.location.host + +const capabitiliesUrl = host + '/ocs/v1.php/cloud/capabilities' + +async function getCapabilities() { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + } + + const capabilitiesResponse = await fetch(capabitiliesUrl, fetchOptions) + const capabilities = await capabilitiesResponse.json() + + return capabilities.ocs.data +} + +const capabilities = await getCapabilities() + +function extractFeatureVersion(feature) { + const talkFeatures = capabilities?.capabilities?.spreed?.features + if (!talkFeatures) { + console.error('Talk features not found', capabilities) + throw new Error() + } + + for (const talkFeature of talkFeatures) { + if (talkFeature.startsWith(feature + '-v')) { + return talkFeature.substring(feature.length + 2) + } + } + + console.error('Failed to get feature version for %s', feature, talkFeatures) + throw new Error() +} + +const signalingApiVersion = extractFeatureVersion('signaling') +const conversationApiVersion = extractFeatureVersion('conversation') + +const talkOcsApiUrl = host + '/ocs/v2.php/apps/spreed/api/' +const signalingSettingsUrl = talkOcsApiUrl + 'v' + signalingApiVersion + '/signaling/settings' +const signalingBackendUrl = talkOcsApiUrl + 'v' + signalingApiVersion + '/signaling/backend' +let joinLeaveRoomUrl = talkOcsApiUrl + 'v' + conversationApiVersion + '/room/' + token + '/participants/active' +let joinLeaveCallUrl = talkOcsApiUrl + 'v' + conversationApiVersion + '/call/' + token + +const publishers = [] +const subscribers = [] + +let virtualParticipant + +let stream + +async function getSignalingSettings(user, appToken, token) { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + } + + if (user) { + fetchOptions.headers['Authorization'] = 'Basic ' + btoa(user + ':' + appToken) + } + + const signalingSettingsResponse = await fetch(signalingSettingsUrl + '?token=' + token, fetchOptions) + const signalingSettings = await signalingSettingsResponse.json() + + return signalingSettings.ocs.data +} + +/** + * Helper class to interact with the signaling server. + * + * A new signaling session is started when a Signaling object is created. + * Messages can be sent using the sendXXX methods. Received messages are emitted + * using events, so a listener for the type of received message can be set to + * listen to them; the message data is provided in the "detail" attribute of the + * event. + */ +class Signaling extends EventTarget { + constructor(user, signalingSettings) { + super(); + + this.user = user + this.signalingTicket = signalingSettings.ticket + + let resolveSessionId + this.sessionId = new Promise((resolve, reject) => { + resolveSessionId = resolve + }) + + this.messageId = 1 + this.resolveMessageId = [] + + const signalingUrl = this.sanitizeSignalingUrl(signalingSettings.server) + + this.socket = new WebSocket(signalingUrl) + this.socket.onopen = () => { + this.sendHello() + } + this.socket.onmessage = event => { + const data = JSON.parse(event.data) + + if (data.id && this.resolveMessageId[data.id]) { + this.resolveMessageId[data.id]() + delete this.resolveMessageId[data.id] + } + + this.dispatchEvent(new CustomEvent(data.type, { detail: data[data.type] })) + } + this.socket.onclose = () => { + console.warn('Socket closed') + } + + this.addEventListener('hello', async event => { + const hello = event.detail + const sessionId = hello.sessionid + + this.sessionId = sessionId + resolveSessionId(sessionId) + }) + + this.addEventListener('error', event => { + const error = event.detail + + console.warn(error) + + if (error.code === 'not_allowed') { + console.info('Is "allowsubscribeany = true" set in the signaling server configuration?') + } + }) + } + + sanitizeSignalingUrl(url) { + if (url.startsWith('https://')) { + url = 'wss://' + url.slice(8) + } else if (url.startsWith('http://')) { + url = 'ws://' + url.slice(7) + } + if (url.endsWith('/')) { + url = url.slice(0, -1) + } + + return url + '/spreed' + } + + /** + * Returns the session ID. + * + * It can return either the actual session ID or a promise that is fulfilled + * once the session ID is available. Therefore this should be called with + * something like "sessionId = await signaling.getSessionId()". + */ + async getSessionId() { + return this.sessionId + } + + send(message) { + this.socket.send(JSON.stringify(message)) + } + + async sendAndWaitForResponse(message) { + return new Promise((resolve, reject) => { + message.id = String(this.messageId++) + this.resolveMessageId[message.id] = resolve + + this.send(message) + }) + } + + sendHello() { + this.send({ + 'type': 'hello', + 'hello': { + 'version': '1.0', + 'auth': { + 'url': signalingBackendUrl, + 'params': { + 'userid': this.user, + 'ticket': this.signalingTicket, + }, + }, + }, + }) + } + + sendMessage(data) { + this.send({ + 'type': 'message', + 'message': { + 'recipient': { + 'type': 'session', + 'sessionid': data.to, + }, + 'data': data + } + }) + } + + sendRequestOffer(publisherSessionId) { + this.send({ + 'type': 'message', + 'message': { + 'recipient': { + 'type': 'session', + 'sessionid': publisherSessionId, + }, + 'data': { + 'type': 'requestoffer', + 'roomType': 'video', + }, + }, + }) + } + + async joinRoom() { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + method: 'POST', + } + + if (user) { + fetchOptions.headers['Authorization'] = 'Basic ' + btoa(user + ':' + appToken) + } + + const joinRoomResponse = await fetch(joinLeaveRoomUrl, fetchOptions) + const joinRoomResult = await joinRoomResponse.json() + const nextcloudSessionId = joinRoomResult.ocs.data.sessionId + + await this.sendAndWaitForResponse({ + 'type': 'room', + 'room': { + 'roomid': token, + 'sessionid': nextcloudSessionId, + }, + }) + } + + async joinCall(flags) { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + method: 'POST', + body: new URLSearchParams({ + flags, + }), + } + + if (user) { + fetchOptions.headers['Authorization'] = 'Basic ' + btoa(user + ':' + appToken) + } + + await fetch(joinLeaveCallUrl, fetchOptions) + } + + async leaveCall() { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + method: 'DELETE', + } + + if (user) { + fetchOptions.headers['Authorization'] = 'Basic ' + btoa(user + ':' + appToken) + } + + await fetch(joinLeaveCallUrl, fetchOptions) + } + + async leaveRoom() { + const fetchOptions = { + headers: { + 'OCS-ApiRequest': true, + 'Accept': 'json', + }, + method: 'DELETE', + } + + if (user) { + fetchOptions.headers['Authorization'] = 'Basic ' + btoa(user + ':' + appToken) + } + + await fetch(joinLeaveRoomUrl, fetchOptions) + + this.send({ + 'type': 'room', + 'room': { + 'roomid': '', + }, + }) + } +} + +/** + * Base class for publishers and subscribers. + * + * After a Peer is created it must be explicitly connected to the HPB by calling + * "connect()". This method returns a promise that is fulfilled once the peer + * has connected, or rejected if the peer has not connected yet after some time. + * "connect()" must be called once the signaling is already connected; this can + * be done by waiting for "signaling.getSessionId()". + * + * Subclasses must set the "sessionId" attribute. + */ +class Peer { + constructor(user, signalingSettings, signaling) { + this.signaling = signaling + + let iceServers = signalingSettings.stunservers + iceServers = iceServers.concat(signalingSettings.turnservers) + + this.peerConnection = new RTCPeerConnection({ iceServers: iceServers }) + this.peerConnection.onicecandidate = async event => { + const candidate = event.candidate + + if (candidate) { + this.send('candidate', candidate) + } + } + + this.signaling.addEventListener('message', event => { + const message = event.detail + + if (message.data.type === 'candidate' && message.data.from === this.sessionId) { + const candidate = message.data.payload + this.peerConnection.addIceCandidate(candidate.candidate) + } + }) + + this.connectedPromiseResolve = undefined + this.connectedPromiseReject = undefined + this.connectedPromise = new Promise((resolve, reject) => { + this.connectedPromiseResolve = resolve + this.connectedPromiseReject = reject + }) + } + + async connect() { + this.peerConnection.addEventListener('iceconnectionstatechange', () => { + if (this.peerConnection.iceConnectionState === 'connected' || this.peerConnection.iceConnectionState === 'completed') { + this.connectedPromiseResolve() + this.connected = true + } + }) + + setTimeout(() => { + if (!this.connected) { + this.connectedPromiseReject('Peer has not connected in ' + connectionWarningTimeout + ' seconds') + } + }, connectionWarningTimeout) + + return this.connectedPromise + } + + send(type, data) { + this.signaling.sendMessage({ + to: this.sessionId, + roomType: 'video', + type: type, + payload: data + }) + } +} + +/** + * Helper class for publishers. + * + * A single publisher can be used on each signaling session. + * + * A publisher is connected to the HPB by sending an offer and handling the + * returned answer. + */ +class Publisher extends Peer { + constructor(user, signalingSettings, signaling, stream) { + super(user, signalingSettings, signaling) + + stream.getTracks().forEach(track => { + this.peerConnection.addTrack(track, stream) + }) + + this.signaling.addEventListener('message', event => { + const message = event.detail + + if (message.data.type === 'answer') { + const answer = message.data.payload + this.peerConnection.setRemoteDescription(answer) + } + }) + } + + async connect() { + this.sessionId = await this.signaling.getSessionId() + + const offer = await this.peerConnection.createOffer({ offerToReceiveAudio: 0, offerToReceiveVideo: 0 }) + await this.peerConnection.setLocalDescription(offer) + + this.send('offer', offer) + + return super.connect() + } +} + +async function newPublisher(signalingSettings, signaling, stream) { + const publisher = new Publisher(user, signalingSettings, signaling, stream) + const sessionId = await publisher.signaling.getSessionId() + + return [sessionId, publisher] +} + +/** + * Helper class for subscribers. + * + * Several subscribers can be used on a single signaling session provided that + * each subscriber subscribes to a different publisher. + * + * A subscriber is connected to the HPB by requesting an offer, handling the + * returned offer and sending back an answer. + */ +class Subscriber extends Peer { + constructor(user, signalingSettings, signaling, publisherSessionId) { + super(user, signalingSettings, signaling) + + this.sessionId = publisherSessionId + + this.signaling.addEventListener('message', async event => { + const message = event.detail + + if (message.data.type === 'offer' && message.data.from === this.sessionId) { + const offer = message.data.payload + await this.peerConnection.setRemoteDescription(offer) + + const answer = await this.peerConnection.createAnswer() + await this.peerConnection.setLocalDescription(answer) + + this.send('answer', answer) + } + }) + } + + async connect() { + this.signaling.sendRequestOffer(this.sessionId) + + return super.connect() + } +} + +function listenToPublisherConnectionChanges() { + Object.values(publishers).forEach(publisher => { + publisher.peerConnection.addEventListener('iceconnectionstatechange', event => { + if (publisher.peerConnection.iceConnectionState === 'connected' + || publisher.peerConnection.iceConnectionState === 'completed') { + clearTimeout(publisher.connectionWarning) + publisher.connectionWarning = null + + return + } + + if (publisher.peerConnection.iceConnectionState === 'disconnected') { + // Brief disconnections are normal and expected; they are only + // relevant if the connection has not been restored after some + // seconds. + publisher.connectionWarning = setTimeout(() => { + console.warn('Publisher disconnected', publisher.sessionId) + }, connectionWarningTimeout) + } else if (publisher.peerConnection.iceConnectionState === 'failed') { + console.warn('Publisher connection failed', publisher.sessionId) + } + }) + }) +} + +async function initPublishers() { + for (let i = 0; i < publishersCount; i++) { + const signalingSettings = await getSignalingSettings(user, appToken, token) + let signaling = null + try { + signaling = new Signaling(user, signalingSettings) + } catch (exception) { + console.error('Publisher ' + i + ' init error: ' + exception) + continue + } + + const [publisherSessionId, publisher] = await newPublisher(signalingSettings, signaling, stream) + + try { + await publisher.connect() + + if ((i + 1) % 5 === 0 && (i + 1) < publishersCount) { + console.info('Publisher started (' + (i + 1) + '/' + publishersCount + ')') + } + } catch (exception) { + console.warn('Publisher ' + i + ' error: ' + exception) + } + + publishers[publisherSessionId] = publisher + } + + console.info('Publishers started the siege') + + listenToPublisherConnectionChanges() +} + +function listenToSubscriberConnectionChanges() { + subscribers.forEach(subscriber => { + subscriber.peerConnection.addEventListener('iceconnectionstatechange', event => { + if (subscriber.peerConnection.iceConnectionState === 'connected' + || subscriber.peerConnection.iceConnectionState === 'completed') { + clearTimeout(subscriber.connectionWarning) + subscriber.connectionWarning = null + + return + } + + if (subscriber.peerConnection.iceConnectionState === 'disconnected') { + // Brief disconnections are normal and expected; they are only + // relevant if the connection has not been restored after some + // seconds. + subscriber.connectionWarning = setTimeout(() => { + console.warn('Subscriber disconnected', subscriber.sessionId) + }, connectionWarningTimeout) + } else if (subscriber.peerConnection.iceConnectionState === 'failed') { + console.warn('Subscriber connection failed', subscriber.sessionId) + } + }) + }) +} + +async function initSubscribers() { + for (let i = 0; i < subscribersPerPublisherCount; i++) { + // The same signaling session can be shared between subscribers to + // different publishers. + const signalingSettings = await getSignalingSettings(user, appToken, token) + let signaling = null + try { + signaling = new Signaling(user, signalingSettings) + } catch (exception) { + console.error('Subscriber ' + i + ' init error: ' + exception) + continue + } + + await signaling.getSessionId() + + Object.keys(publishers).forEach(async publisherSessionId => { + const subscriber = new Subscriber(user, signalingSettings, signaling, publisherSessionId) + + subscribers.push(subscriber) + }) + } + + for (let i = 0; i < subscribers.length; i++) { + try { + await subscribers[i].connect() + + if ((i + 1) % 5 === 0 && (i + 1) < subscribers.length) { + console.info('Subscriber started (' + (i + 1) + '/' + subscribers.length + ')') + } + } catch (exception) { + console.warn('Subscriber ' + i + ' error: ' + exception) + } + } + + console.info('Subscribers started the siege') + + listenToSubscriberConnectionChanges() +} + +// Expose publishers to CLI. +const getPublishers = function() { + return publishers +} + +// Expose subscribers to CLI. +const getSubscribers = function() { + return subscribers +} + +const closeConnections = function() { + subscribers.forEach(subscriber => { + subscriber.peerConnection.close() + }) + subscribers.splice(0) + + Object.values(publishers).forEach(publisher => { + publisher.peerConnection.close() + }) + Object.keys(publishers).forEach(publisherSessionId => { + delete publishers[publisherSessionId] + }) + + if (stream) { + stream.getTracks().forEach(track => { + track.stop() + }) + stream = null + } +} + +const setAudioEnabled = function(enabled) { + if (!stream || !stream.getAudioTracks().length) { + console.error('Audio was not initialized') + + return + } + + // There will be at most a single audio track. + stream.getAudioTracks()[0].enabled = enabled +} + +const setVideoEnabled = function(enabled) { + if (!stream || !stream.getVideoTracks().length) { + console.error('Video was not initialized') + + return + } + + // There will be at most a single video track. + stream.getVideoTracks()[0].enabled = enabled +} + +const setSentAudioStreamEnabled = function(enabled) { + if (!stream || !stream.getAudioTracks().length) { + console.error('Audio was not initialized') + + return + } + + Object.values(publishers).forEach(publisher => { + // For simplicity it is assumed that if audio is enabled the audio + // sender will always be the first one. + const audioSender = publisher.peerConnection.getSenders()[0] + if (enabled) { + audioSender.replaceTrack(stream.getAudioTracks()[0]) + } else { + audioSender.replaceTrack(null) + } + }) +} + +const setSentVideoStreamEnabled = function(enabled) { + if (!stream || !stream.getVideoTracks().length) { + console.error('Video was not initialized') + + return + } + + Object.values(publishers).forEach(publisher => { + // For simplicity it is assumed that if audio is not enabled the video + // sender will always be the first one, otherwise the second one. + let videoIndex = 0 + if (stream.getAudioTracks().length) { + videoIndex = 1 + } + + const videoSender = publisher.peerConnection.getSenders()[videoIndex] + if (enabled) { + videoSender.replaceTrack(stream.getVideoTracks()[0]) + } else { + videoSender.replaceTrack(null) + } + }) +} + +const checkPublishersConnections = function() { + const iceConnectionStateCount = {} + + Object.keys(publishers).forEach(publisherSessionId => { + publisher = publishers[publisherSessionId] + + console.info(publisherSessionId + ': ' + publisher.peerConnection.iceConnectionState) + + if (iceConnectionStateCount[publisher.peerConnection.iceConnectionState] === undefined) { + iceConnectionStateCount[publisher.peerConnection.iceConnectionState] = 1 + } else { + iceConnectionStateCount[publisher.peerConnection.iceConnectionState]++ + } + }) + + console.info('Summary:') + console.info(' - New: ' + (iceConnectionStateCount['new'] ?? 0)) + console.info(' - Connected: ' + ((iceConnectionStateCount['connected'] ?? 0) + (iceConnectionStateCount['completed'] ?? 0))) + console.info(' - Disconnected: ' + (iceConnectionStateCount['disconnected'] ?? 0)) + console.info(' - Failed: ' + (iceConnectionStateCount['failed'] ?? 0)) +} + +const checkSubscribersConnections = function() { + const iceConnectionStateCount = {} + + i = 0 + + subscribers.forEach(subscriber => { + console.info(i + ': ' + subscriber.peerConnection.iceConnectionState) + i++ + + if (iceConnectionStateCount[subscriber.peerConnection.iceConnectionState] === undefined) { + iceConnectionStateCount[subscriber.peerConnection.iceConnectionState] = 1 + } else { + iceConnectionStateCount[subscriber.peerConnection.iceConnectionState]++ + } + }) + + console.info('Summary:') + console.info(' - New: ' + (iceConnectionStateCount['new'] ?? 0)) + console.info(' - Connected: ' + ((iceConnectionStateCount['connected'] ?? 0) + (iceConnectionStateCount['completed'] ?? 0))) + console.info(' - Disconnected: ' + (iceConnectionStateCount['disconnected'] ?? 0)) + console.info(' - Failed: ' + (iceConnectionStateCount['failed'] ?? 0)) +} + +const printPublisherStats = async function(publisherSessionId, stringify = false) { + if (!(publisherSessionId in publishers)) { + console.error('Invalid publisher session ID') + + return + } + + stats = await publishers[publisherSessionId].peerConnection.getStats() + + for (stat of stats.values()) { + if (stringify) { + console.info(JSON.stringify(stat)) + } else { + console.info(stat) + } + } +} + +const printSubscriberStats = async function(index, stringify = false) { + if (!(index in subscribers)) { + console.error('Index out of range') + + return + } + + stats = await subscribers[index].peerConnection.getStats() + + for (stat of stats.values()) { + if (stringify) { + console.info(JSON.stringify(stat)) + } else { + console.info(stat) + } + } +} + +const setCredentials = function(userToSet, appTokenToSet) { + user = userToSet + appToken = appTokenToSet +} + +const setToken = function(tokenToSet) { + token = tokenToSet + + joinLeaveRoomUrl = talkOcsApiUrl + 'v' + conversationApiVersion + '/room/' + token + '/participants/active' + joinLeaveCallUrl = talkOcsApiUrl + 'v' + conversationApiVersion + '/call/' + token +} + +const setPublishersAndSubscribersCount = function(publishersCountToSet, subscribersPerPublisherCountToSet) { + publishersCount = publishersCountToSet + subscribersPerPublisherCount = subscribersPerPublisherCountToSet +} + +const startMedia = async function(audio, video) { + if (stream) { + stream.getTracks().forEach(track => { + track.stop() + }) + + stream = null + } + + if (audio !== undefined) { + mediaConstraints.audio = audio + } + if (video !== undefined) { + mediaConstraints.video = video + } + + stream = await navigator.mediaDevices.getUserMedia(mediaConstraints) +} + +const setConnectionWarningTimeout = function(connectionWarningTimeoutToSet) { + connectionWarningTimeout = connectionWarningTimeoutToSet +} + +const siege = async function() { + if (!user || !appToken) { + console.error('Credentials (user and appToken) are not set') + + return + } + + closeConnections() + + if (!stream) { + await startMedia() + } + + console.info('Preparing to siege') + + await initPublishers() + await initSubscribers() +} + +// Expose virtual participant to CLI. +const getVirtualParticipant = function() { + return virtualParticipant +} + +const startVirtualParticipant = async function() { + if (!token) { + console.error('Conversation token is not set') + + return + } + + const signalingSettings = await getSignalingSettings(user, appToken, token) + let signaling = null + try { + signaling = new Signaling(user, signalingSettings) + } catch (exception) { + console.error('Virtual participant init error: ' + exception) + return + } + + let flags = 1 + + let publisherSessionId + let publisher + + if (stream) { + [publisherSessionId, publisher] = await newPublisher(signalingSettings, signaling, stream) + + if (stream.getAudioTracks().length > 0) { + flags |= 2 + } + + if (stream.getVideoTracks().length > 0) { + flags |= 4 + } + } else { + await signaling.getSessionId() + } + + await signaling.joinRoom() + await signaling.joinCall(flags) + + virtualParticipant = { + signaling + } + + if (stream) { + try { + // Data channels are expected to be available for call participants. + virtualParticipant.dataChannel = publisher.peerConnection.createDataChannel('status') + + await publisher.connect() + + publishers[publisherSessionId] = publisher + virtualParticipant.publisherSessionId = publisherSessionId + } catch (exception) { + console.warn('Virtual participant publisher error: ' + exception) + } + } +} + +const stopVirtualParticipant = async function() { + if (!virtualParticipant) { + return + } + + if (virtualParticipant.publisherSessionId) { + publishers[virtualParticipant.publisherSessionId].peerConnection.close() + delete publishers[virtualParticipant.publisherSessionId] + } + + await virtualParticipant.signaling.leaveCall() + virtualParticipant.signaling.leaveRoom() + + virtualParticipant = null +} + +function isVirtualParticipantAndDataChannelAvailable() { + if (!virtualParticipant) { + console.error('Virtual participant not started') + + return false + } + + if (!virtualParticipant.dataChannel) { + console.error('Data channel not open for virtual participant (was media enabled when virtual participant was started?)') + + return false + } + + return true +} + +const sendMediaEnabledStateThroughDataChannel = function(mediaType, enabled) { + if (!isVirtualParticipantAndDataChannelAvailable()) { + return + } + + let messageType + if (mediaType === 'audio' && enabled) { + messageType = 'audioOn' + } else if (mediaType === 'audio' && !enabled) { + messageType = 'audioOff' + } else if (mediaType === 'video' && enabled) { + messageType = 'videoOn' + } else if (mediaType === 'video' && !enabled) { + messageType = 'videoOff' + } else { + console.error('Wrong parameters, expected "audio" or "video" and a boolean: ', mediaType, enabled) + + return + } + + virtualParticipant.dataChannel.send(JSON.stringify({ + type: messageType + })) +} + +const sendSpeakingStateThroughDataChannel = function(speaking) { + if (!isVirtualParticipantAndDataChannelAvailable()) { + return + } + + let messageType + if (speaking) { + messageType = 'speaking' + } else { + messageType = 'stoppedSpeaking' + } + + virtualParticipant.dataChannel.send(JSON.stringify({ + type: messageType + })) +} + +const sendNickThroughDataChannel = function(nick) { + if (!isVirtualParticipantAndDataChannelAvailable()) { + return + } + + if (!virtualParticipant.signaling.user) { + payload = nick + } else { + payload = { + name: nick, + userid: virtualParticipant.signaling.user, + } + } + + virtualParticipant.dataChannel.send(JSON.stringify({ + type: 'nickChanged', + payload, + })) +} diff --git a/docs/avatar.md b/docs/avatar.md new file mode 100644 index 0000000..c159489 --- /dev/null +++ b/docs/avatar.md @@ -0,0 +1,130 @@ +# Conversation avatar API + +* API v1: Base endpoint `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 27 + +## Set conversations avatar + +* Required capability: `avatar` +* Method: `POST` +* Endpoint: `/room/{token}/avatar` +* Data: + +| field | type | Description | +|--------|--------|-------------------------------------------------------------------------------------------------------------------------------------| +| `file` | string | Blob of image in a multipart/form-data request. Only accept images with mimetype equal to PNG or JPEG and need to be squared image. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When: is one-to-one, no image, file is too big, invalid mimetype or resource, isn't square, unknown error + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + + - Data: + + `200 OK`: See array definition in `Get user´s conversations` + + `400 Bad Request`: Array with a `message` field contain the error in user language + +## Set emoji as avatar + +* Required capability: `avatar` +* Method: `POST` +* Endpoint: `/room/{token}/avatar/emoji` +* Data: + +| field | type | Description | +|---------|-------------|--------------------------------------------------------------------------------------------------------------------------------------------| +| `emoji` | string | A single emoji being used as avatar (can contain properties like gender, skin color, age, job, etc.) | +| `color` | string/null | HEX color code (6 times 0-9A-F) without the leading `#` character (omit to fallback to the default bright/dark mode icon background color) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation is a one-to-one conversation + + `400 Bad Request` When the emoji is not a single emoji + + `400 Bad Request` When color was provided but is not matching the expected pattern + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + + - Data: + + `200 OK`: See array definition in `Get user´s conversations` + + `400 Bad Request`: Array with a `message` field contain the error in user language + +## Delete conversations avatar + +!!! note + To determine if the delete option should be presented to the user, it's recommended to check the `isCustomAvatar` property of the [Get user´s conversations](conversation.md#get-user-s-conversations) API. + + +* Required capability: `avatar` +* Method: `DELETE` +* Endpoint: `/room/{token}/avatar` + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + + - Data: See array definition in `Get user´s conversations` + +## Get conversations avatar (binary) + +* Required capability: `avatar` +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/room/{token}/avatar` + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + - Body: the image file + +## Get dark mode conversations avatar (binary) + +* Required capability: `avatar` +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/room/{token}/avatar/dark` + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + - Body: the image file + +## Get federated user avatar (binary) + +* Required capability: `federation-v1` +* Method: `GET` +* Endpoint: `/proxy/{token}/user-avatar/{size}` +* Data: + +| field | type | Description | +|-----------|--------|------------------------------------------| +| `size` | int | Only 64 and 512 are supported | +| `cloudId` | string | Federation CloudID to get the avatar for | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + - Body: the image file + +## Get dark mode federated user avatar (binary) + +* Required capability: `federation-v1` +* Method: `GET` +* Endpoint: `/proxy/{token}/user-avatar/{size}/dark` +* Data: + +| field | type | Description | +|-----------|--------|------------------------------------------| +| `size` | int | Only 64 and 512 are supported | +| `cloudId` | string | Federation CloudID to get the avatar for | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + - Body: the image file diff --git a/docs/bot-list.md b/docs/bot-list.md new file mode 100644 index 0000000..2924927 --- /dev/null +++ b/docs/bot-list.md @@ -0,0 +1,65 @@ +# List of available bots + +If you want to write your own bot or webhook, please see the +[Bots and Webhooks developer documentation](bots.md). Afterwards send a pull +request against the [docs/bot-list.md](https://github.com/nextcloud/spreed/blob/main/docs/bot-list.md) +to add your bot to the list, using the following template: + +```markdown +### Name of the bot + +Useful, but short description, best to keep it to 1-3 lines of text. + +![Screenshot can be put into docs/botscreenshots/bot-name.png, max. width 700px, max. height 480px](botscreenshots/bot-name.png) + +* License: Identifier of the license (See https://spdx.org/licenses/) +* [Link to source code](https://github.com/nextcloud/call_summary_bot) +* [Link to installation documentation](https://github.com/nextcloud/call_summary_bot#readme) +``` + +Here you can find a brief overview of known bots that allows administration to +easily discover your bot and install it on their Nextcloud server. + +## Samples + +### Call summary (Nextcloud app sample) + +The call summary bot posts an overview message after the call listing all participants and outlining tasks. + +![Screenshot showing a call summary chat message](botscreenshots/call-summary.png) + +* License: AGPL-3.0-or-later +* [Link to source code](https://github.com/nextcloud/call_summary_bot) +* [Link to installation documentation](https://github.com/nextcloud/call_summary_bot#readme) + +### Currency convertor (Nextcloud AppEcosystem sample) + +Example of how easily bot can be implemented in Python. + +![Screenshot showing a chat messages to change EUR into USD](botscreenshots/currency-convertor.png) + +* License: MIT +* [Link to source code](https://github.com/cloud-py-api/nc_py_api/tree/main/examples/as_app/talk_bot) +* [Link to installation documentation](https://github.com/cloud-py-api/nc_py_api/blob/main/examples/as_app/talk_bot/HOW_TO_INSTALL.md) + +### Welcome bot (Golang sample) + +A Golang sample bot that responds to "Good morning" and "Hello" and welcomes new attendees in the room. + +![Screenshot showing a welcome and hello response](botscreenshots/welcome-bot.png) + +* License: GPL-3.0-or-later +* [Link to source code](https://github.com/nextcloud/welcome_bot) +* [Link to installation documentation](https://github.com/nextcloud/welcome_bot#readme) + +## Bots + +### Stable Diffusion + +Uses [SDXL-Turbo](https://huggingface.co/stabilityai/sdxl-turbo) for fast image generation. Usage example: `@image cinematic portrait of fluffy cat with black eyes` + +![Screenshot showing chat message and the resulting image](botscreenshots/stable-diffusion.png) + +* License: MIT +* [Link to source code](https://github.com/cloud-py-api/ai_image_generator_bot) +* [Link to installation documentation](https://github.com/cloud-py-api/ai_image_generator_bot#readme) diff --git a/docs/bot-management.md b/docs/bot-management.md new file mode 100644 index 0000000..ac2453f --- /dev/null +++ b/docs/bot-management.md @@ -0,0 +1,83 @@ +# Setup and management bots + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`: (requires the `bots-v1` capability - available since Nextcloud 27.1) + +## Get list of bots installed on the server + +Lists the bots that are installed on the server. + +* Required capability: `bots-v1` +* Method: `GET` +* Endpoint: `bot/admin` + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not an administrator + - Data: + List of bots, each bot has at least: + +| field | type | Description | +|----------------------|--------|----------------------------------------------------------------------------------------------| +| `id` | int | Unique numeric identifier of the bot on this server | +| `name` | string | Display name of the bot shown as author when it posts a message or reaction | +| `description` | string | A longer description of the bot helping moderators to decide if they want to enable this bot | +| `url` | string | URL endpoint that is triggered by this bot | +| `url_hash` | string | Hash of the URL prefixed with `bot-` serves as `actor_id` | +| `state` | int | One of the [Bot states](constants.md#bot-states) | +| `error_count` | int | Number of consecutive errors | +| `last_error_date` | int | UNIX timestamp of the last error | +| `last_error_message` | string | The last exception message or error response information when trying to reach the bot. | + +## Get list of bots for a conversation + +Lists the bots that are enabled and can be enabled for the conversation + +* Required capability: `bots-v1` +* Method: `GET` +* Endpoint: `bot/{token}` + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: + List of bots, each bot has at least: + +| field | type | Description | +|-----------------------|--------|----------------------------------------------------------------------------------------------| +| `id` | int | Unique numeric identifier of the bot on this server | +| `name` | string | Display name of the bot shown as author when it posts a message or reaction | +| `description` | string | A longer description of the bot helping moderators to decide if they want to enable this bot | +| `state` | int | One of the [Bot states](constants.md#bot-states) | + +## Enable a bot for a conversation as a moderator + +* Required capability: `bots-v1` +* Method: `POST` +* Endpoint: `bot/{token}/{botId}` + +* Response: + - Status code: + + `200 OK` When the bot is already enabled in the conversation + + `201 Created` When the bot is now enabled in the conversation + + `400 Bad Request` When the bot ID is unknown on the server + + `400 Bad Request` When the bot is disabled or set to "no-setup" on the server + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Disable a bot for a conversation as a moderator + +* Required capability: `bots-v1` +* Method: `DELETE` +* Endpoint: `bot/{token}/{botId}` + +* Response: + - Status code: + + `200 OK` When the bot is already enabled in the conversation + + `201 Created` When the bot is now enabled in the conversation + + `400 Bad Request` When the bot ID is unknown on the server + + `400 Bad Request` When the bot is disabled or set to "no-setup" on the server + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant diff --git a/docs/bots.md b/docs/bots.md new file mode 100644 index 0000000..01f2207 --- /dev/null +++ b/docs/bots.md @@ -0,0 +1,409 @@ +# Bots and Webhooks + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`: (requires the `bots-v1` capability - available since Nextcloud 27.1) + +Webhook based bots are available with the Nextcloud 27.1 compatible Nextcloud Talk 17.1 release as a first version + +!!! note + + For security reasons bots can only be added via the + command line. `./occ talk:bot:install --help` gives you + a short overview of the required arguments, but they are + also explained in the [OCC documentation](occ.md#talkbotinstall). + +--- + +## Signing and Verifying Requests + +Messages are signed using the shared secret that is specified when installing a bot on the server. +Create a HMAC with SHA256 over the `RANDOM` header and the request body using the shared secret. +Only when the `SIGNATURE` matches the request should be accepted and handled. + +**Sample PHP code:** + +```php +$digest = hash_hmac('sha256', $_SERVER['HTTP_X_NEXTCLOUD_TALK_RANDOM'] . file_get_contents('php://input'), $secret); + +if (!hash_equals($digest, strtolower($_SERVER['HTTP_X_NEXTCLOUD_TALK_SIGNATURE']))) { + exit; +} +``` + +## Receiving chat messages + +Bot receives all the chat messages following the same signature/verification method. + +### Headers + +| Header | Content type | Description | +|-----------------------------------|---------------------|------------------------------------------------------| +| `HTTP_X_NEXTCLOUD_TALK_SIGNATURE` | `[a-f0-9]{64}` | SHA265 signature of the body | +| `HTTP_X_NEXTCLOUD_TALK_RANDOM` | `[A-Za-z0-9+\]{64}` | Random string used when signing the body | +| `HTTP_X_NEXTCLOUD_TALK_BACKEND` | URI | Base URL of the Nextcloud server sending the message | + +### Content + +The content format follows the [Activity Streams 2.0 Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). + +#### Sample chat message + +```json +{ + "type": "Create", + "actor": { + "type": "Person", + "id": "users/ada-lovelace", + "name": "Ada Lovelace" + }, + "object": { + "type": "Note", + "id": "1567", + "name": "message", + "content": "{\"message\":\"hi {mention-call1} !\",\"parameters\":{\"mention-call1\":{\"type\":\"call\",\"id\":\"n3xtc10ud\",\"name\":\"world\",\"call-type\":\"group\",\"icon-url\":\"https:\\/\\/nextcloud.local\\/ocs\\/v2.php\\/apps\\/spreed\\/api\\/v1\\/room\\/n3xtc10ud\\/avatar\"}}}", + "mediaType": "text/markdown" + }, + "target": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + } +} +``` + +#### Explanation + +| Path | Description | +|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| actor.id | One of the known [attendee types](constants.md#attendee-types) followed by the `/` slash character and a unique identifier within the given type. For users it is the Nextcloud user ID, for guests and email invited guests a random hash value. | +| actor.name | The display name of the attendee sending the message. | +| actor.talkParticipantType | *Optional:* 🆕 Added in Talk 21. If applicable the attendee's [participant type](constants.md#participant-types) is provided. However this field can not be provided in some cases, e.g. bots. | +| object.id | The message ID of the given message on the origin server. It can be used to react or reply to the given message. | +| object.name | For normal written messages `message`, otherwise one of the known [system message identifiers](chat.md#system-messages). | +| object.content | A JSON encoded dictionary with a `message` and `parameters` key. The message can include placeholders and the [Rich Object parameters](https://github.com/nextcloud/server/blob/master/lib/public/RichObjectStrings/Definitions.php) are rendered into it in the chat view. | +| object.mediaType | `text/markdown` when the message should be interpreted as Markdown. Otherwise `text/plain`. | +| object.inReplyTo | *Optional:* 🆕 Added in Talk 21. If applicable the parent message which was quoted in this message | +| object.inReplyTo.actor | *Optional:* 🆕 Added in Talk 21. Same data as the `actor` | +| object.inReplyTo.object | *Optional:* 🆕 Added in Talk 21. Same data as the `object` (but never contains `inReplyTo`) | +| target.id | The token of the conversation in which the message was posted. It can be used to react or reply to the given message. | +| target.name | The name of the conversation in which the message was posted. | + +## Receiving reaction added + +🆕 Added in Talk 21. Bots with the `reaction` feature receive special hooks when a reaction was added to a chat message. + +### Headers + +| Header | Content type | Description | +|-----------------------------------|---------------------|------------------------------------------------------| +| `HTTP_X_NEXTCLOUD_TALK_SIGNATURE` | `[a-f0-9]{64}` | SHA265 signature of the body | +| `HTTP_X_NEXTCLOUD_TALK_RANDOM` | `[A-Za-z0-9+\]{64}` | Random string used when signing the body | +| `HTTP_X_NEXTCLOUD_TALK_BACKEND` | URI | Base URL of the Nextcloud server sending the message | + +### Content + +The content format follows the [Activity Streams 2.0 Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). + +#### Sample reaction added message + +```json +{ + "type": "Like", + "actor": { + "type": "Person", + "id": "users/ada-lovelace", + "name": "Ada Lovelace" + }, + "object": { + "type": "Note", + "id": "1567", + "name": "message", + "content": "{\"message\":\"hi {mention-call1} !\",\"parameters\":{\"mention-call1\":{\"type\":\"call\",\"id\":\"n3xtc10ud\",\"name\":\"world\",\"call-type\":\"group\",\"icon-url\":\"https:\\/\\/nextcloud.local\\/ocs\\/v2.php\\/apps\\/spreed\\/api\\/v1\\/room\\/n3xtc10ud\\/avatar\"}}}", + "mediaType": "text/markdown" + }, + "target": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + }, + "content": "\ud83d\ude06" +} +``` + +#### Explanation + +| Path | Description | +|---------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| actor.id | One of the known [attendee types](constants.md#attendee-types) followed by the `/` slash character and a unique identifier within the given type. For users it is the Nextcloud user ID, for guests and email invited guests a random hash value. | +| actor.name | The display name of the attendee sending the message. | +| actor.talkParticipantType | *Optional:* If applicable the attendee's [participant type](constants.md#participant-types) is provided. However this field can not be provided in some cases, e.g. bots. | +| object.id | The message ID of the given message on the origin server. It can be used to react or reply to the given message. | +| object.name | For normal written messages `message`, otherwise one of the known [system message identifiers](chat.md#system-messages). | +| object.content | A JSON encoded dictionary with a `message` and `parameters` key. The message can include placeholders and the [Rich Object parameters](https://github.com/nextcloud/server/blob/master/lib/public/RichObjectStrings/Definitions.php) are rendered into it in the chat view. | +| object.mediaType | `text/markdown` when the message should be interpreted as Markdown. Otherwise `text/plain`. | +| target.id | The token of the conversation in which the message was posted. It can be used to react or reply to the given message. | +| target.name | The name of the conversation in which the message was posted. | +| content | The reaction emoji that was added | + +## Receiving reaction removed + +🆕 Added in Talk 21. Bots with the `reaction` feature receive special hooks when a reaction was added to a chat message. + +### Headers + +| Header | Content type | Description | +|-----------------------------------|---------------------|------------------------------------------------------| +| `HTTP_X_NEXTCLOUD_TALK_SIGNATURE` | `[a-f0-9]{64}` | SHA265 signature of the body | +| `HTTP_X_NEXTCLOUD_TALK_RANDOM` | `[A-Za-z0-9+\]{64}` | Random string used when signing the body | +| `HTTP_X_NEXTCLOUD_TALK_BACKEND` | URI | Base URL of the Nextcloud server sending the message | + +### Content + +The content format follows the [Activity Streams 2.0 Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). + +#### Sample reaction removed message + +```json +{ + "type": "Undo", + "actor": { + "type": "Person", + "id": "users/ada-lovelace", + "name": "Ada Lovelace" + }, + "object": { + "type": "Like", + "actor": { + "type": "Person", + "id": "users/ada-lovelace", + "name": "Ada Lovelace" + }, + "object": { + "type": "Note", + "id": "1567", + "name": "message", + "content": "{\"message\":\"hi {mention-call1} !\",\"parameters\":{\"mention-call1\":{\"type\":\"call\",\"id\":\"n3xtc10ud\",\"name\":\"world\",\"call-type\":\"group\",\"icon-url\":\"https:\\/\\/nextcloud.local\\/ocs\\/v2.php\\/apps\\/spreed\\/api\\/v1\\/room\\/n3xtc10ud\\/avatar\"}}}", + "mediaType": "text/markdown" + }, + "target": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + }, + "content": "\ud83d\ude06" + }, + "target": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + } +} +``` + +#### Explanation + +| Path | Description | +|---------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| actor.id | One of the known [attendee types](constants.md#attendee-types) followed by the `/` slash character and a unique identifier within the given type. For users it is the Nextcloud user ID, for guests and email invited guests a random hash value. | +| actor.name | The display name of the attendee sending the message. | +| actor.talkParticipantType | *Optional:* If applicable the attendee's [participant type](constants.md#participant-types) is provided. However this field can not be provided in some cases, e.g. bots. | +| object | Full hook content when the reaction was added | +| object.content | The reaction emoji that was removed | +| target.id | The token of the conversation in which the message was posted. It can be used to react or reply to the given message. | +| target.name | The name of the conversation in which the message was posted. | + +## Bot added in a chat + +When the bot is added to a chat, the server sends a request to the bot, informing it of the event. The same signature/verification method is applied. + +### Headers + +| Header | Content type | Description | +|-----------------------------------|---------------------|------------------------------------------------------| +| `HTTP_X_NEXTCLOUD_TALK_SIGNATURE` | `[a-f0-9]{64}` | SHA265 signature of the body | +| `HTTP_X_NEXTCLOUD_TALK_RANDOM` | `[A-Za-z0-9+\]{64}` | Random string used when signing the body | +| `HTTP_X_NEXTCLOUD_TALK_BACKEND` | URI | Base URL of the Nextcloud server sending the message | + +### Content + +The content format follows the [Activity Streams 2.0 Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). + +#### Sample request + +```json +{ + "type": "Join", + "actor": { + "type": "Application", + "id": "bots/bot-a78f46c5c203141b247554e180e1aa3553d282c6", + "name": "Bot123" + }, + "object": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + } +} +``` + +#### Explanation + +| Path | Description | +|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| +| actor.id | Bot's [actor type](constants.md#actor-types-of-chat-messages) followed by the `/` slash character and a bot's unique sha1 identifier with `bot-` prefix. | +| actor.name | The display name of the bot. | +| object.id | The token of the conversation in which the bot was added. | +| object.name | The name of the conversation in which the bot was added. | + +## Bot removed from a chat + +When the bot is removed from a chat, the server sends a request to the bot, informing it of the event. The same signature/verification method is applied. + +### Headers + +| Header | Content type | Description | +|-----------------------------------|---------------------|------------------------------------------------------| +| `HTTP_X_NEXTCLOUD_TALK_SIGNATURE` | `[a-f0-9]{64}` | SHA265 signature of the body | +| `HTTP_X_NEXTCLOUD_TALK_RANDOM` | `[A-Za-z0-9+\]{64}` | Random string used when signing the body | +| `HTTP_X_NEXTCLOUD_TALK_BACKEND` | URI | Base URL of the Nextcloud server sending the message | + +### Content + +The content format follows the [Activity Streams 2.0 Vocabulary](https://www.w3.org/TR/activitystreams-vocabulary/). + +#### Sample request + +```json +{ + "type": "Leave", + "actor": { + "type": "Application", + "id": "bots/bot-a78f46c5c203141b247554e180e1aa3553d282c6", + "name": "Bot123" + }, + "object": { + "type": "Collection", + "id": "n3xtc10ud", + "name": "world" + } +} +``` + +#### Explanation + +| Path | Description | +|-------------|----------------------------------------------------------------------------------------------------------------------------------------------------------| +| actor.id | Bot's [actor type](constants.md#actor-types-of-chat-messages) followed by the `/` slash character and a bot's unique sha1 identifier with `bot-` prefix. | +| actor.name | The display name of the bot. | +| object.id | The token of the conversation from which the bot was removed. | +| object.name | The name of the conversation from which the bot was removed. | + +## Sending a chat message + +Bots can also send message. On the sending process the same signature/verification method is applied. + +* Required capability: `bots-v1` +* Method: `POST` +* Endpoint: `/bot/{token}/message` +* Header: + +| Name | Description | +|----------------------------------|-----------------------------------------------------------------| +| `X-Nextcloud-Talk-Bot-Random` | The random value used when signing the request | +| `X-Nextcloud-Talk-Bot-Signature` | The signature to validate the request comes from an enabled bot | +| `OCS-APIRequest` | Needs to be set to `true` to access the ocs/vX.php endpoint | + +* Data: + +| field | type | Description | +|--------------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| `message` | string | The message the user wants to say | +| `replyTo` | int | The message ID this message is a reply to (only allowed for messages from the same conversation and when the message type is not `system` or `command`) | +| `referenceId` | string | A reference string to be able to identify the message again in a "get messages" request, should be a random sha256 | +| `silent` | bool | If sent silent the message will not create chat notifications even for users | + +* Response: + - Status code: + + `201 Created` When the message was posted successfully + + `400 Bad Request` When the provided replyTo parameter is invalid or the message is empty + + `401 Unauthenticated` When the bot could not be verified for the conversation + + `404 Not Found` When the conversation could not be found + + `413 Payload Too Large` When the message was longer than the allowed limit of 32000 characters (or 1000 until Nextcloud 16.0.1, check the `spreed => config => chat => max-length` capability for the limit) + + `429 Too Many Requests` When `401 Unauthenticated` was triggered too often + +## Reacting to a chat message + +Bots can also react to a message. The same signature/verification method is applied. + +* Required capability: `bots-v1` +* Method: `POST` +* Endpoint: `/bot/{token}/reaction/{messageId}` +* Header: + +| Name | Description | +|----------------------------------|-----------------------------------------------------------------| +| `X-Nextcloud-Talk-Bot-Random` | The random value used when signing the request | +| `X-Nextcloud-Talk-Bot-Signature` | The signature to validate the request comes from an enabled bot | +| `OCS-APIRequest` | Needs to be set to `true` to access the ocs/vX.php endpoint | + +* Data: + +| field | type | Description | +|------------|--------|----------------| +| `reaction` | string | A single emoji | + +* Response: + - Status code: + + `201 Created` When the reaction was created successfully + + `400 Bad Request` When the provided emoji was invalid + + `401 Unauthenticated` When the bot could not be verified for the conversation + + `404 Not Found` When the conversation or message could not be found + + `429 Too Many Requests` When `401 Unauthenticated` was triggered too often + +## Delete a reaction + +Bots can also remove their previous reaction from a message. The same signature/verification method is applied. + +* Required capability: `bots-v1` +* Method: `DELETE` +* Endpoint: `/bot/{token}/reaction/{messageId}` +* Header: + +| Name | Description | +|----------------------------------|-----------------------------------------------------------------| +| `X-Nextcloud-Talk-Bot-Random` | The random value used when signing the request | +| `X-Nextcloud-Talk-Bot-Signature` | The signature to validate the request comes from an enabled bot | +| `OCS-APIRequest` | Needs to be set to `true` to access the ocs/vX.php endpoint | + +* Data: + +| field | type | Description | +|------------|--------|----------------| +| `reaction` | string | A single emoji | + +* Response: + - Status code: + + `200 OK` When the reaction was deleted successfully + + `400 Bad Request` When the provided emoji was invalid + + `401 Unauthenticated` When the bot could not be verified for the conversation + + `404 Not Found` When the conversation or message could not be found + + `429 Too Many Requests` When `401 Unauthenticated` was triggered too often + +## Nextcloud apps as a bot + +🆕 Added in Talk 21. + +Instead of being webhook based, bots can also listen to the [`OCA\Talk\Events\BotInvokeEvent` PHP events](events.md#bot-invoke) and get invoked with the same content. +The event allows to `addAnswer()` and `addReaction()` which will then be posted and reacted as the bot. +The advantage is that a web request can be saved, reducing the load on the system. + +When installing the bot specify `nextcloudapp://$APPID` as the bot URL, together with the `4` as a [Bot feature flag](constants.md#bot-features). + +## Changelog + +### Nextcloud 27.1 / Talk 17.1 - September 2023 +- Initial version + +### Nextcloud 31 / Talk 21 - February 2025 +- Added direct support for Nextcloud apps as bots. A new feature flag `events` which indicates that a bot will utilize the `OCA\Talk\Events\BotInvokeEvent` event listed in [PHP events](events.md#bot-invoke) rather than being invoked via a webhook. +- Added new feature flag `reaction` which allows to get invoked for added and removed reactions +- In hooks that are replies the new optional field `object.inReplyTo` contains the actor and content of the parent chat message diff --git a/docs/botscreenshots/call-summary.png b/docs/botscreenshots/call-summary.png new file mode 100644 index 0000000..5115940 Binary files /dev/null and b/docs/botscreenshots/call-summary.png differ diff --git a/docs/botscreenshots/call-summary.png.license b/docs/botscreenshots/call-summary.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/botscreenshots/call-summary.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/botscreenshots/currency-convertor.png b/docs/botscreenshots/currency-convertor.png new file mode 100644 index 0000000..b25efa3 Binary files /dev/null and b/docs/botscreenshots/currency-convertor.png differ diff --git a/docs/botscreenshots/currency-convertor.png.license b/docs/botscreenshots/currency-convertor.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/botscreenshots/currency-convertor.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/botscreenshots/stable-diffusion.png b/docs/botscreenshots/stable-diffusion.png new file mode 100644 index 0000000..5945239 Binary files /dev/null and b/docs/botscreenshots/stable-diffusion.png differ diff --git a/docs/botscreenshots/stable-diffusion.png.license b/docs/botscreenshots/stable-diffusion.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/botscreenshots/stable-diffusion.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/botscreenshots/welcome-bot.png b/docs/botscreenshots/welcome-bot.png new file mode 100644 index 0000000..155c12a Binary files /dev/null and b/docs/botscreenshots/welcome-bot.png differ diff --git a/docs/botscreenshots/welcome-bot.png.license b/docs/botscreenshots/welcome-bot.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/botscreenshots/welcome-bot.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/breakout-rooms.md b/docs/breakout-rooms.md new file mode 100644 index 0000000..d279dbf --- /dev/null +++ b/docs/breakout-rooms.md @@ -0,0 +1,194 @@ +# Breakout rooms management + +Group and public conversations can be used to host breakout rooms. + +* Only moderators can configure and remove breakout rooms +* Only moderators can start and stop breakout rooms +* Moderators in the parent conversation are added as moderators to all breakout rooms and remove from all on demotion + +## Base endpoint + +* API v1: Base endpoint `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 26 + +## Configure breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}` +* Data: + +| field | type | Description | +|---------------|--------|-------------------------------------------------------------------------------------------------------| +| `mode` | int | Participant assignment mode (see [constants list](constants.md#breakout-room-modes)) | +| `amount` | int | Number of breakout rooms to create (Minimum `1`, maximum `20`) | +| `attendeeMap` | string | A json encoded Map of attendeeId => room number (0 based) (Only considered when the mode is "manual") | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `config`: When breakout rooms are disabled on the server + + `400 Bad Request` Error `mode`: When breakout rooms are already configured + + `400 Bad Request` Error `room`: When the conversation is not a group conversation + + `400 Bad Request` Error `room`: When the conversation is a breakout room itself + + `400 Bad Request` Error `mode`: When the mode is invalid + + `400 Bad Request` Error `amount`: When the amount is below the minimum or above the maximum + + `400 Bad Request` Error `attendeeMap`: When the attendee map contains an invalid room number or moderator + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: Array of conversations (breakout rooms and parent) + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Create additional breakout room + +In order to create an additional breakout room, create a conversation with object type `room` and object ID being the parent token. +See [Creating a new conversation](conversation.md#creating-a-new-conversation) for more information. + +## Delete individual breakout room + +The normal deletion API can be used. +See [Delete a conversation](conversation.md#delete-a-conversation) for more information. + +## Remove breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `DELETE` +* Endpoint: `/breakout-rooms/{token}` + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: Parent conversation + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Start breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}/rooms` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `mode`: When breakout rooms are not configured + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: Array of conversations (breakout rooms and parent) + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Stop breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `DELETE` +* Endpoint: `/breakout-rooms/{token}/rooms` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `mode`: When breakout rooms are not configured + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: Array of conversations (breakout rooms and parent) + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Broadcast message to breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}/broadcast` +* Data: + +| field | type | Description | +|-----------|--------|----------------------------------------------------------------------------------------------------------------| +| `message` | string | A chat message to be posted in all breakout rooms in the name of the moderator | +| `token` | string | **Note:** The token in the URL is the parent room. The message will appear in all breakout rooms automatically | + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` Error `mode`: When the room does not have breakout rooms configured + + `403 Forbidden` When the participant is not a moderator + + `404 Not Found` When the conversation could not be found for the participant + + `413 Payload Too Large` When the message was longer than the allowed limit of 32000 characters (check the `spreed => config => chat => max-length` capability for the limit) + - Data: Array of conversations (breakout rooms and parent) + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Reorganize attendees + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}/attendees` +* Data: + +| field | type | Description | +|---------------|--------|-------------------------------------------------------------------------------------------------------| +| `attendeeMap` | string | A json encoded Map of attendeeId => room number (0 based) (Only considered when the mode is "manual") | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `config`: When breakout rooms are disabled on the server + + `400 Bad Request` Error `mode`: When breakout rooms are not configured + + `400 Bad Request` Error `attendeeMap`: When the attendee map contains an invalid room number or moderator + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + - Data: Array of conversations (breakout rooms and parent) + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Request assistance + +This endpoint allows participants to raise their hand (token is the breakout room) and moderators will see it in any of the breakout rooms as well as the parent room. + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}/request-assistance` +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `room`: When the room is not a breakout room or breakout rooms are not started + + `404 Not Found` When the conversation could not be found for the participant + - Data: Breakout room + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## Reset request for assistance + +* Required capability: `breakout-rooms-v1` +* Method: `DELETE` +* Endpoint: `/breakout-rooms/{token}/request-assistance` +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `room`: When the room is not a breakout room or breakout rooms are not started + + `404 Not Found` When the conversation could not be found for the participant + - Data: Breakout room + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) + +## List all breakout rooms + +See [conversation API](conversation.md#get-breakout-rooms)) + +## Switch to a different breakout room (as non moderator) + +This endpoint allows participants to switch between breakout rooms when they are allowed to choose the breakout room and not are automatically or manually assigned by the moderator. + +* Required capability: `breakout-rooms-v1` +* Method: `POST` +* Endpoint: `/breakout-rooms/{token}/switch` +* Data: + +| field | type | Description | +|----------|--------|-------------------------------------------------------------------------------| +| `token` | string | (In the URL) Conversation token of the parent room hosting the breakout rooms | +| `target` | string | Conversation token of the target breakout room | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error `moderator`: When the participant is a moderator in the conversation + + `400 Bad Request` Error `mode`: When breakout rooms are not configured in `free` mode + + `400 Bad Request` Error `status`: When breakout rooms are not started + + `400 Bad Request` Error `target`: When the target room is not breakout room of the parent + + `404 Not Found` When the conversation could not be found for the participant + - Data: Target breakout room + See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) (API v4) diff --git a/docs/call-experience.md b/docs/call-experience.md new file mode 100644 index 0000000..1a73c2a --- /dev/null +++ b/docs/call-experience.md @@ -0,0 +1,52 @@ +# Call experience + +There are multiple factors which can have a smaller and bigger impact on the experience of a call. + +## Automatic selection of sent video quality + +Since version 8.0.8 Nextcloud Talk will automatically select the sent video quality depending on the number of participants sending video and/or audio streams. Both counters are checked and then the lowest matching quality is selected. + +If a participant enabled their microphone and starts speaking the video quality is set to "High" for the duration of them talking plus an additional grace period of 5 seconds. + +### Number of video streams + +| Streams | Quality | +|---------|-----------| +| < 4 | High | +| 4-7 | Medium | +| 8-10 | Low | +| 11-14 | Very low | +| > 14 | Thumbnail | + +### Number of audio streams + +| Streams | Quality | +|---------|-----------| +| < 10 | High | +| 10-19 | Medium | +| 20-29 | Low | +| 30-39 | Very low | +| > 40 | Thumbnail | + +### Video qualities + +| Quality | Max width | Ideal width | Max height | Ideal height | Max frames | Ideal frames | +|-----------|-----------|-------------|------------|--------------|------------|--------------| +| High | - | 720 | - | 540 | - | 30 | +| Medium | 640 | 560 | 480 | 420 | 24 | 24 | +| Low | 480 | 360 | 320 | 270 | 15 | 15 | +| Very low | 320 | - | 240 | - | 8 | - | +| Thumbnail | 320 | - | 240 | - | 1 | - | + +## Judging the connection quality + +Similar since version 9.0.2 Nextcloud Talk is having an eye on the lost packages and the "round trip time" of the stream data. When the connection is too bad or no data could be transmitted at all, the participant will be informed to try to disable their own video and screen share. +If those two are already off, the participant will see a message that their connection bandwidth or device cannot withhold the necessary load for participating in a call. + +The critical values are: + +**Lost packages:** 30% in the last 5 seconds + +**Too few packages:** Less than 10 packages per second + +**Round trip time:** above 1.5 seconds diff --git a/docs/call-in-action.jpg b/docs/call-in-action.jpg new file mode 100644 index 0000000..8441634 Binary files /dev/null and b/docs/call-in-action.jpg differ diff --git a/docs/call-in-action.jpg.license b/docs/call-in-action.jpg.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/call-in-action.jpg.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/call-in-action.png b/docs/call-in-action.png new file mode 100644 index 0000000..89f74f8 Binary files /dev/null and b/docs/call-in-action.png differ diff --git a/docs/call-in-action.png.license b/docs/call-in-action.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/call-in-action.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/call.md b/docs/call.md new file mode 100644 index 0000000..99e9bbc --- /dev/null +++ b/docs/call.md @@ -0,0 +1,145 @@ +# Call API + +* API v1: 🏁 Removed with API v4: until Nextcloud 21 +* API v2: 🏁 Removed with API v4: Nextcloud 21 only +* API v3: 🏁 Removed with API v4: Nextcloud 21 only +* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`: since Nextcloud 22 + +!!! note + + At the moment, joining a room is only possible with cookies, as you need a + session. + +## Get list of connected participants + +* Federation capability: `federation-v2` +* Method: `GET` +* Endpoint: `/call/{token}` + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + Array of participants, each participant has at least: + +| field | type | Added | Removed | Description | +|---------------|--------|-------|---------|--------------------------------------------------------------------------------------------| +| `actorType` | string | v3 | | Actor type of the attendee (see [Constants - Attendee types](constants.md#attendee-types)) | +| `actorId` | string | v3 | | The user id, guest random id or email address of the attendee | +| `userId` | string | v1 | v3 | The user id replaced with actorType = users and actorId being the userId | +| `displayName` | string | v3 | | The display name of the attendee | +| `lastPing` | int | v1 | | Timestamp of the last ping of the user (should be used for sorting) | +| `sessionId` | string | v1 | | 512 character long string | + +## Join a call + +* Federation capability: `federation-v2` +* Method: `POST` +* Endpoint: `/call/{token}` +* Data: + +| field | type | Description | +|--------------------|------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `flags` | int | Flags what streams are provided by the participant (see [Constants - Participant in-call flag](constants.md#participant-in-call-flag)) | +| `silent` | bool | Disable start call notifications for group/public calls | +| `recordingConsent` | bool | When the user ticked a checkbox and agreed with being recorded (Only needed when the `config => call => recording-consent` capability is set to `1` or the capability is `2` and the conversation `recordingConsent` value is `1`) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When recording consent is required but was not given + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the user did not join the conversation before + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + +## Send call notification + +* Required capability: `send-call-notification` +* Federation capability: `federation-v2` +* Method: `POST` +* Endpoint: `/call/{token}/ring/{attendeeId}` +* Data: + +| field | type | Description | +|--------------|------|---------------------------| +| `attendeeId` | int | The participant to notify | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the target participant is not a user (Guest, group, etc.) + + `400 Bad Request` When the target participant is already in the call + + `400 Bad Request` When the room has no call in process + + `400 Bad Request` When the actor is not in the call + + `403 Forbidden` When the current user is not a moderator + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the attendee could not be found in the conversation + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + +## Send SIP dial-out request + +* Required capability: `sip-support-dialout` +* Method: `POST` +* Endpoint: `/call/{token}/dialout/{attendeeId}` +* Data: + +| field | type | Description | +|--------------|------|-------------------------| +| `attendeeId` | int | The participant to call | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the room has no call in process + + `400 Bad Request` When the actor is not in the call + + `403 Forbidden` When the current user does not have the "Start call" permission + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the target participant could not be found or is not a phone number (Guest, group, etc.) + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + `501 Not Implemented` When the SIP functionality is not configured + +## Update call flags + +* Federation capability: `federation-v2` +* Method: `PUT` +* Endpoint: `/call/{token}` +* Data: + +| field | type | Description | +|---------|------|----------------------------------------------------------------------------------------------------------------------------------------| +| `flags` | int | Flags what streams are provided by the participant (see [Constants - Participant in-call flag](constants.md#participant-in-call-flag)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the user is not in the call + + `400 Bad Request` When the flags do not contain "in call" + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the user did not join the conversation before + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + +## Leave a call (but staying in the conversation for future calls and chat) + +* Federation capability: `federation-v2` +* Method: `DELETE` +* Endpoint: `/call/{token}` +* Data: + +| field | type | Description | +|-------|------|-----------------------------------------------------------------------------| +| `all` | bool | If sent as a moderator, end the meeting and all participants leave the call | + + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the user did not join the conversation before + + `412 Precondition Failed` When the lobby is active and the user is not a moderator diff --git a/docs/capabilities.md b/docs/capabilities.md new file mode 100644 index 0000000..0f71930 --- /dev/null +++ b/docs/capabilities.md @@ -0,0 +1,213 @@ +# Capabilities + +## 3.0 (Initial Talk release) +* `audio` - audio is supported +* `video` - video + screensharing is supported +* `chat` - simple text chat is supported, superseded by `chat-v2` + +## 3.1 +* `guest-signaling` - Guests can do signaling via api endpoints +* `empty-group-room` - Group conversations can be created without inviting a Nextcloud user group by default + +## 3.2 +* `guest-display-names` - Display names of guests are stored in the database, can be set via API (not WebRTC only) and are used on returned comments/participants/etc. +* `multi-room-users` - Users can be in multiple conversations at the same time now, therefor signaling now also requires the conversation token on the URL. +* `chat-v2` - Chat messages are now [Rich Object Strings](https://github.com/nextcloud/server/issues/1706) and pagination is available, the previous `chat` is not available anymore. + +## 4.0 +* `favorites` (local) - Conversations can be marked as favorites which will pin them to the top of the conversation list. +* `last-room-activity` - Conversations have the `lastActivity` attribute and should be sorted by that instead of the last ping of the user. +* `no-ping` - The ping endpoint has been removed. Ping is updated with a call to fetch the signaling or chat messages instead. +* `system-messages` - Chat messages have a `systemMessage` attribute and can be generated by the system +* `mention-flag` - The conversation list populates the boolean `unreadMention` when the user was mentioned since their last visit +* `in-call-flags` - A new flag `participantFlags` has been introduced and is replacing the `participantInCall` boolean. + +## 5.0 +* `invite-by-mail` - *Replaced by `invite-groups-and-mails`* Guests can be invited with their email address +* `notification-levels` - Users can select when they want to be notified in conversations +* `invite-groups-and-mails` - Groups can be added to existing conversations via the add participant endpoint + +## 6.0 +* `locked-one-to-one-rooms` - One-to-one conversations are now locked to the users. Neither guests nor other participants can be added, so the options to do that should be hidden as well. Also a user can only leave a one-to-one conversation (not delete). It will be deleted when the other participant left too. If the other participant posts a new chat message or starts a call, the left-participant will be re-added. +* `read-only-rooms` - Conversations can be in `read-only` mode which means people can not do calls or write chat messages. + +## 7.0 +* `chat-read-marker` - The chat can be optionally marked read by clients manually, independent from the loading of the chat messages. +* `webinary-lobby` - See [Webinary management](webinar.md) for technical details. +* `start-call-flag` - Only moderators or users might be able to start calls. +* `config => chat => max-length` - Maximum length of chat messages + + +## 8.0 +* `chat-replies` - Normal chat messages can now be replied to. Check the `isReplyable` parameter on the message object. +* `circles-support` - Conversations can be created for circles and all circle members can be added to existing conversations + + +## 9.0 +* `config => attachments => allowed` (local) - Whether the user can upload files into a chat +* `config => attachments => folder` (local) - User defined folder where items should be uploaded to +* `config => conversations => can-create` (local) - Whether the user can create public and group conversations, if not only one-to-one conversations are allowed +* `force-mute` - "forceMute" signaling messages can be sent to mute other participants. +* `conversation-v2` - ~~The conversations API v2 is less load heavy and should be used by clients when available. Check the difference in the [Conversation API documentation](conversation.md).~~ Replaced by API v4 when `conversation-v4` is set. +* `chat-reference-id` - a referenceId can be sent with a chat message to be able to identify it in parallel get requests to earlier fade out a temporary message. This feature is always enabled since Nextcloud 29 + +## 10.1 +* `conversation-v3` - ~~Whether conversations API v3 is available~~ Replaced by API v4 when `conversation-v4` is set. +* `sip-support` - Whether SIP can be configured and enabled by moderators. The conversations API will come with some new values `sipEnabled` which signals whether this conversation has SIP configured as well as `canEnableSIP` to see if a user can enable it. When it is enabled `attendeePin` will contain the unique dial-in code for this user. + +## 11.0 +* `chat-read-status` (local) - On conversation API v3 and the chat API the last common read message is exposed which can be used to update the "read status" flag of own chat messages. The info should be shown only when the user also shares their read status. The user's value can be found in `config => chat => read-privacy`. +* `listable-rooms` (local) - Conversations can searched for even when not joined. A "listable" attribute set on rooms defines the scope of who can find it. +* `phonebook-search` (local) - Is present when the server has the endpoint to search for phone numbers to find matches in the accounts list +* `raise-hand` - Participants can raise or lower hand, the state change is sent through signaling messages. +* `room-description` - A description can be get and set for conversations. +* `config => chat => read-privacy` (local) - See `chat-read-status` +* `config => previews => max-gif-size` (local) - Maximum size in bytes below which a GIF can be embedded directly in the page at render time. Bigger files will be rendered statically using the preview endpoint instead. Can be set with `occ config:app:set spreed max-gif-size --value=X` where X is the new value in bytes. Defaults to 3 MB. + +## 11.1 +* `delete-messages` - Allows to delete chat messages up to 6 hours for your own messages or when being a moderator. On deleting the message text will be replaced and a follow up system message will make sure clients and users update it in their cache and storage. +* `rich-object-sharing` - Rich objects can be shared to chats. See [OCP\RichObjectStrings\Definitions](https://github.com/nextcloud/server/blob/master/lib/public/RichObjectStrings/Definitions.php) for more details on supported rich objects and required data. +* `conversation-call-flags` - Whether the room api provides the `callFlag` to tell apart video and audio calls +* `temp-user-avatar-api` (local) - Whether a temporary api is available to allow users to upload an avatar to their profile via an OCS endpoint. + +## 12.0 +* `conversation-v4` - Whether conversations API v4 is available. This also means that v1, v2 and v3 are **not** available anymore. The changes on API v4 allow a user to have multiple sessions in the same conversation on different devices which is incompatible with the data structure that was used by the previous APIs. +* `signaling-v3` - Whether signaling API v3 is available. This also means that v1 and v2 are **not** available anymore. The TURN and STUN server data is now returning all defined servers instead of a random one. Multiple entries for the same server are combined and using the urls array correctly now. +* `geo-location-sharing` - Whether the `geo-location` rich object is defined and can be shared to the rich-object sharing endpoint. +* `voice-message-sharing` - Shared files can be flagged as voice messages and are then presented differently in the interface +* `publishing-permissions` - Whether the publishing permissions can be set for the attendees. + +## 12.1 +* `clear-history` - Whether chat API has the endpoint so moderators can clear the complete history of a chat + +## 13 +* `direct-mention-flag` - The conversation list populates the boolean `unreadMentionDirect` when the user was mentioned directly (ignoring @all mentions) since their last visit +* `notification-calls` - Whether the API to opt out of call notifications is available +* `conversation-permissions` - Whether the default and custom permissions can be set for attendees. + +## 14 +* `chat-unread` - Whether the API to mark a conversation as unread is available +* `reactions` - Api reactions to chat message +* `rich-object-list-media` - When the API to get the chat messages for shared media is available +* `rich-object-delete` - When the API allows to delete chat messages which are file or rich object shares + +## 15 +* `unified-search` (local) - When the extended attributes of unified search results are there +* `chat-permission` - When permission 128 is required to post chat messages, reaction or share items to the conversation +* `silent-send` - Whether the chat API allows to send chat messages without triggering notifications +* `message-expiration` - Message expiration time for a conversation +* `sip-support-nopin` - Whether SIP can be configured to not require a custom attendee PIN +* `send-call-notification` - When the API allows to resend call notifications for individual users that did not join yet +* `silent-call` - Allow to start calls without sending notification +* `talk-polls` - Polls feature is available to use in the chat +* `config => call => enabled` - Whether calling is enabled on the instance or not +* `config => signaling => session-ping-limit` (local) - Number of sessions the HPB is allowed to ping in the same request +* `config => signaling => hello-v2-token-key` (local) - Public key to use when verifying JWT auth tokens for hello V2. + +## 16 +* `breakout-rooms-v1` - Whether breakout-rooms API v1 is available +* `recording-v1` - Call recording is available. +* `chat-get-context` - Whether the message context API endpoint is available +* `config => call => breakout-rooms` - Whether breakout rooms are enabled on this instance +* `config => call => recording` - Whether calls can be recorded (requires the High-performance backend server) +* `single-conversation-status` - When the response of a single conversation can also return the user status +* `chat-keep-notifications` - Whether messages can be retrieved without marking notifications as read + +## 17 +* `avatar` (local) - Avatar of conversation +* ~~`config => chat => translations` - List of translations tuples, JSON encoded sample `{"from":"de","fromLabel":"German","to":"en","toLabel":"English"}`. Those tuples should be provided as options when translating chat messages.~~ Due to some providers the list was too big causing issues in various clients. So the capability was replaced by boolean `config => chat => has-translation-providers` in Talk 18. +* `config => call => predefined-backgrounds` (local) - List of predefined virtual backgrounds. The files are in Talks img/ folder, accessible via the normal image path methods. The list is cached for 5 minutes. +* `config => call => can-upload-background` (local) - Boolean flag whether the user can upload a custom virtual background (requires an account and non-zero quota). Uploads should be done to Talk/Backgrounds/ (respecting the user's attachment directory setting). +* `config => call => supported-reactions` - A list of emojis supported as call reactions. If the list is absent or empty, clients should not show the emoji reaction option in calls. +* `config => chat => typing-privacy` (local) - User defined numeric value to enable 1 or disable 0 the typing indicator to other users +* `typing-privacy` - Support toggle typing privacy + +## 17.1 +* `remind-me-later` (local) - Support for "Remind me later" for chat messages exists +* `bots-v1` - Support of the first version for Bots and Webhooks is available +* `markdown-messages` - Chat messages support markdown and are rendered automatically + +## 18 +* `media-caption` - Whether media caption can be added to shared files +* `session-state` - Sessions can mark themselves as inactive, so the participant receives notifications again +* `note-to-self` (local) - Support for "Note-to-self" conversation exists +* `recording-consent` - Whether admins and moderators can require recording consent before joining a call +* `sip-support-dialout` - Whether admins can enable SIP dial-out +* `config => chat => has-translation-providers` (local) - When true, translation tuples can be loaded from the [OCS Translation API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-translation-api.html#get-available-translation-options). +* `config => call => recording-consent` - Whether users need to consent into call recording before joining a call (see [constants list](constants.md#recording-consent-required)) +* `config => call => sip-enabled` - Whether SIP is configured on the server allowing for SIP dial-in +* `config => call => sip-dialout-enabled` - Whether SIP dial-out is configured on the server, additionally requires `config => call => sip-enabled` +* `config => call => can-enable-sip` - Whether the current user is a member of the groups that are allowed to enable SIP dial-in on a conversation or use SIP dial-out + +## 19 +* `delete-messages-unlimited` - Whether messages can be deleted at any time (used to be restricted to 6 hours after posting) +* `edit-messages` - Whether messages can be edited (restricted to 24 hours after posting) +* `silent-send-state` - Whether messages contain a flag that they were sent silently +* `chat-read-last` - Whether chat can be marked read without giving a message ID (will fall back to the conversations last message ID) +* `federation-v1` - Whether basic chatting is possible with federation +* `config => federation => enabled` (local) - Boolean, whether federation is enabled on instance +* `config => federation => incoming-enabled` (local) - Boolean, whether users are allowed to be invited into federated conversations on other servers +* `config => federation => outgoing-enabled` (local) - Boolean, whether users are allowed to invited federated users of other servers into conversations +* `config => federation => only-trusted-servers` (local) - Boolean, whether federation invites are limited to trusted servers + +## 20 +* `ban-v1` - Whether the API to ban attendees is available +* `mention-permissions` - Whether non-moderators are allowed to mention `@all` +* `federation-v2` - Whether federated session ids are used and calls are possible with federation +* `edit-messages-note-to-self` - Messages in note-to-self conversations can be edited indefinitely + +## 20.1 +* `archived-conversations-v2` (local) - Conversations can be marked as archived which will hide them from the conversation list by default +* `talk-polls-drafts` - Whether moderators can store and retrieve poll drafts +* `download-call-participants` - Whether the endpoints for moderators to download the call participants is available +* `chat-summary-api` (local) - Whether the endpoint to get summarized chat messages in a conversation is available +* `email-csv-import` - Whether the endpoint to import a CSV email list as participants exists +* `config => chat => summary-threshold` (local) - Number of unread messages that should exist to show a "Generate summary" option +* `config => call => start-without-media` (local) - Boolean, whether media should be disabled when starting or joining a conversation +* `config => call => max-duration` - Integer, maximum call duration in seconds. Please note that this should only be used with system cron and with a reasonable high value, due to the expended duration until the background job ran. +* `config => call => blur-virtual-background` (local) - Boolean, whether blur background is set by default when joining a conversation + +## 21 +* `config => conversations => force-passwords` - Whether passwords are enforced for public rooms +* `conversation-creation-password` - Whether the endpoints for creating public conversations or making a conversation public support setting a password +* `call-notification-state-api` (local) - Whether the endpoints exist for checking if a call notification should be dismissed +* `schedule-meeting` (local) - Whether logged-in participants can schedule meetings +* `config => chat => has-translation-task-providers` (local) - When true, translations can be done using the [OCS TaskProcessing API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-taskprocessing-api.html). +* `config => conversations => list-style` (local) - Whether conversation list should appear in certain way +* `config => conversations => description-length` (local) - The maximum length for conversation descriptions, currently 2000. Before this config was added the implicit limit was 500, since the existance of the feature capability `room-description`. +* `call-end-to-end-encryption` - Signaling support of the server for the end-to-end encryption of calls +* `config => call => end-to-end-encryption` - Whether calls should be end-to-end encrypted (currently off by default, until all Talk mobile clients support it) ++ `edit-draft-poll` - Whether moderators can edit draft polls + +## 21.1 +* `conversation-creation-all` (local) - Whether the conversation creation endpoint allows to specify all attributes of a conversation +* `sip-direct-dialin` (local) - Whether the SIP bridge can create conversations when an external participant calls a mapped phone number +* `important-conversations` (local) - Whether important conversations are supported +* `unbind-conversation` - Whether the API exists to make an event and phone conversation persistent +* `config => conversations => retention-event` - Number of days before an inactive event conversation is deleted (`0` = disabled) +* `config => conversations => retention-instant-meetings` - Number of days before an instant meeting conversation is deleted (`0` = disabled) +* `config => conversations => retention-phone` - Number of days before an inactive incoming or outgoing phone conversation is deleted (`0` = disabled) +* `config => call => predefined-backgrounds-v2` (local) - Whether virtual backgrounds should be read from the theming directory +* `config => experiments => enabled` (local) - Bit flag of enabled experiments for clients +* `dashboard-event-rooms` (local) - Whether Talk APIs offer functionality for Dashboard requests +* `mutual-calendar-events` (local) - Whether Talk APIs offer mutual calendar events for 1:1 rooms +* `upcoming-reminders` (local) - Whether the API to list upcoming reminders exists +* `sensitive-conversations` (local) - Whether sensitive conversations are supported + +## 22 +* `threads` - Whether the chat supports threads +* `config => call => live-transcription` - Whether live transcription is supported in calls + +## 22.0.3 +* `federated-shared-items` - Whether shared items endpoints can be called in a federated conversation + +## 22.0.10 +* `config => call => default-phone-region` - System value for the default phone region to predict the regional phone numbers +* `config => permissions => max-default` - Maximum value for default permissions (510 with react-permission, 254 without) +* `config => permissions => max-custom` - Maximum value for custom permissions (511 with react-permission, 255 without) +* `config => permissions => default` - The admin configured default permissions +* `config => chat => matterbridge-enabled` (local) - Whether matterbridge is installed on the server and can be configured for conversations +* `config => signaling => mode` (local) - Signaling mode (external with High-performance backend, internal otherwise) +* `config => call => play-sounds` (local) - Whether the user has sounds enabled for calls (falls back to admin default for guests) +* `config => call => grid-limit` (local) - Suggested gird size for all participants +* `config => call => grid-limit-enforced` (local) - Whether the limit is hard enforced for all participants diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 0000000..ec9c5e9 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,25 @@ +# Changelog + +- [Talk 23 for Nextcloud 33](changelogs/changelog-23.md) +- [Talk 22 for Nextcloud 32](changelogs/changelog-22.md) +- [Talk 21 for Nextcloud 31](changelogs/changelog-21.md) +- [Talk 20 for Nextcloud 30](changelogs/changelog-20.md) +- [Talk 19 for Nextcloud 29](changelogs/changelog-19.md) +- [Talk 18 for Nextcloud 28](changelogs/changelog-18.md) +- [Talk 17 for Nextcloud 27](changelogs/changelog-17.md) +- [Talk 16 for Nextcloud 26](changelogs/changelog-16.md) +- [Talk 15 for Nextcloud 25](changelogs/changelog-15.md) +- [Talk 14 for Nextcloud 24](changelogs/changelog-14.md) +- [Talk 13 for Nextcloud 23](changelogs/changelog-13.md) +- [Talk 12 for Nextcloud 22](changelogs/changelog-12.md) +- [Talk 11 for Nextcloud 21](changelogs/changelog-11.md) +- [Talk 10 for Nextcloud 20](changelogs/changelog-10.md) +- [Talk 9 for Nextcloud 19](changelogs/changelog-9.md) +- [Talk 8 for Nextcloud 18](changelogs/changelog-8.md) +- [Talk 7 for Nextcloud 17](changelogs/changelog-7.md) +- [Talk 6 for Nextcloud 16](changelogs/changelog-6.md) +- [Talk 5 for Nextcloud 15](changelogs/changelog-5.md) +- [Talk 4 for Nextcloud 14](changelogs/changelog-4.md) +- [Talk 3 for Nextcloud 13](changelogs/changelog-3.md) +- [Talk 2 for Nextcloud 12](changelogs/changelog-2.md) +- [Talk 1 for Nextcloud 11](changelogs/changelog-1.md) diff --git a/docs/changelogs/changelog-1.md b/docs/changelogs/changelog-1.md new file mode 100644 index 0000000..b6882a3 --- /dev/null +++ b/docs/changelogs/changelog-1.md @@ -0,0 +1,30 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 1.2.0 – 2017-01-18 +### Added + - Translations for multiple languages now available + [#177](https://github.com/nextcloud/spreed/pull/177) + - Open call-search when user has no calls + [#111](https://github.com/nextcloud/spreed/pull/111) + - Disable video by default, when more then 5 people are in a room + +### Changed + - TURN settings can only be changed by admins now + [#185](https://github.com/nextcloud/spreed/pull/185) + - App can not be restricted to groups anymore to prevent issues with public rooms + [#201](https://github.com/nextcloud/spreed/pull/201) + +### Fixed + - Allow to connect via Firefox without a camera + [#160](https://github.com/nextcloud/spreed/pull/160) + - Leaving the current room does not refresh the full page anymore + [#163](https://github.com/nextcloud/spreed/pull/163) + - "Undefined index" log entry when visiting admin page + [#151](https://github.com/nextcloud/spreed/pull/151) + [#57](https://github.com/nextcloud/spreed/pull/57) + diff --git a/docs/changelogs/changelog-10.md b/docs/changelogs/changelog-10.md new file mode 100644 index 0000000..5e4d13d --- /dev/null +++ b/docs/changelogs/changelog-10.md @@ -0,0 +1,278 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 10.1.7 – 2021-09-17 +### Fixed +- Fix logged-in users are unable to join a password protected public conversation + [#6232](https://github.com/nextcloud/spreed/pull/6232) +- Fix infinite loop when the media constraints can not be decreased + [#6240](https://github.com/nextcloud/spreed/pull/6240) + +## 10.0.10 – 2021-09-17 +### Fixed +- Fix logged-in users are unable to join a password protected public conversation + [#6233](https://github.com/nextcloud/spreed/pull/6233) +- Fix infinite loop when the media constraints can not be decreased + [#6128](https://github.com/nextcloud/spreed/pull/6128) + +## 10.1.6 – 2021-07-15 +### Fixed +- Fix connection quality stats not reset when setting a new peer connection + [#5770](https://github.com/nextcloud/spreed/pull/5770) + +## 10.0.9 – 2021-07-15 +### Fixed +- Fix connection quality stats not reset when setting a new peer connection + [#5769](https://github.com/nextcloud/spreed/pull/5769) + +## 10.1.5 – 2021-06-04 +### Fixed +- Regenerate session id after entering conversation password + [#5640](https://github.com/nextcloud/spreed/pull/5640) +- Fix quality warning appearing again in certain conditions + [#5553](https://github.com/nextcloud/spreed/pull/5553) +- Fix camera quality starting bad in some cases + [#5557](https://github.com/nextcloud/spreed/pull/5557) + +## 10.0.8 – 2021-06-04 +### Fixed +- Regenerate session id after entering conversation password + [#5641](https://github.com/nextcloud/spreed/pull/5641) +- Fix quality warning appearing again in certain conditions + [#5555](https://github.com/nextcloud/spreed/pull/5555) +- Fix camera quality starting bad in some cases + [#5559](https://github.com/nextcloud/spreed/pull/5559) + +## 10.1.4 – 2021-04-12 +### Fixed +- Only use the local file as preview for some types when uploading + [#5425](https://github.com/nextcloud/spreed/pull/5425) +- Fix an issue with the migration to the new attendees table + [#5245](https://github.com/nextcloud/spreed/pull/5245) + [#5429](https://github.com/nextcloud/spreed/pull/5429) + +## 10.0.7 – 2021-04-12 +### Fixed +- Only use the local file as preview for some types when uploading + [#5426](https://github.com/nextcloud/spreed/pull/5426) + +## 10.1.3 – 2021-03-04 +### Fixed +- Fixed a bug in the migration that could prevent copying all participants to the attendee table + [#5245](https://github.com/nextcloud/spreed/pull/5245) + +## 10.1.2 – 2021-02-22 +### Added +- Added pagination to the gridview in case there are too many participants + [#4991](https://github.com/nextcloud/spreed/pull/4991) + +### Changed +- Replace blur with average color in video backgrounds to improve performance on Chrome based browsers + [#5011](https://github.com/nextcloud/spreed/pull/5011) +- Allow SIP dial-in in non-public conversations too + [#4955](https://github.com/nextcloud/spreed/pull/4955) + +### Fixed +- Drop guest moderators when changing a conversation to group conversation + [#5231](https://github.com/nextcloud/spreed/pull/5231) +- Fix collaboration resource options not loading + [#5141](https://github.com/nextcloud/spreed/pull/5141) +- Fixed a bug that would prevent attachments going into the Talk/ folder + [#5078](https://github.com/nextcloud/spreed/pull/5078) +- Fix mentioning of users with subnames, e.g. "foo" and "foobar" + [#5050](https://github.com/nextcloud/spreed/pull/5050) +- Add upload editor in files sidebar mode + [#5113](https://github.com/nextcloud/spreed/pull/5113) + +## 10.0.6 – 2021-02-22 +### Changed +- Replace blur with average color in video backgrounds to improve performance on Chrome based browsers + [#5012](https://github.com/nextcloud/spreed/pull/5012) + +### Fixed +- Drop guest moderators when changing a conversation to group conversation + [#5228](https://github.com/nextcloud/spreed/pull/5228) +- Fix collaboration resource options not loading + [#5142](https://github.com/nextcloud/spreed/pull/5142) +- Fixed a bug that would prevent attachments going into the Talk/ folder + [#5079](https://github.com/nextcloud/spreed/pull/5079) +- Fix mentioning of users with subnames, e.g. "foo" and "foobar" + [#5051](https://github.com/nextcloud/spreed/pull/5051) +- Add upload editor in files sidebar mode + [#5111](https://github.com/nextcloud/spreed/pull/5111) + +## 10.1.1 – 2021-01-08 +### Fixed +- Fix chat notifications not being sent when user is not active in a chat + [#4869](https://github.com/nextcloud/spreed/pull/4869) + [#4847](https://github.com/nextcloud/spreed/pull/4847) +- Fix CSP violation in Safari with worker-src from avatar blurring + [#4899](https://github.com/nextcloud/spreed/pull/4899) +- Don't remove a chat when a self-joined user leaves + [#4893](https://github.com/nextcloud/spreed/pull/4893) +- Use proc_open to run matterbridge for better compatibility + [#4775](https://github.com/nextcloud/spreed/pull/4775) +- Make the bridge bot password more complex + [#4909](https://github.com/nextcloud/spreed/pull/4909) + +## 10.0.5 – 2021-01-08 +### Fixed +- Fix CSP violation in Safari with worker-src from avatar blurring + [#4900](https://github.com/nextcloud/spreed/pull/4900) +- Don't remove a chat when a self-joined user leaves + [#4894](https://github.com/nextcloud/spreed/pull/4894) +- Make the bridge bot password more complex + [#4910](https://github.com/nextcloud/spreed/pull/4910) + +## 10.1.0 – 2020-12-18 +### Added +- Implement multiple requirements to prepare for SIP dial-in + [#4612](https://github.com/nextcloud/spreed/pull/4612) +### Fixed +- Fix potentially multiple guests joining in a password request conversation + [#4801](https://github.com/nextcloud/spreed/pull/4801) +- Prevent issues with UTF8 multibyte chars in the changelog conversation + [#4733](https://github.com/nextcloud/spreed/pull/4733) +- Fix Chromium performance hit in calls due to blur filter + [#4781](https://github.com/nextcloud/spreed/pull/4781) +- Stop sending the nick through data channels after some time + [#4726](https://github.com/nextcloud/spreed/pull/4726) +- Fix "Copy link" not clickable when waiting alone in a call + [#4687](https://github.com/nextcloud/spreed/pull/4687) +- Fix some Matterbridge integrations + [#4729](https://github.com/nextcloud/spreed/pull/4729) + [#4799](https://github.com/nextcloud/spreed/pull/4799) +- Use proc_open to run system commands in bridge manager + [#4775](https://github.com/nextcloud/spreed/pull/4775) +- Only show password request button when the share actually has Talk Verification enabled + [#4794](https://github.com/nextcloud/spreed/pull/4794) + +## 10.0.4 – 2020-12-18 +### Fixed +- Fix potentially multiple guests joining in a password request conversation + [#4798](https://github.com/nextcloud/spreed/pull/4798) +- Prevent issues with UTF8 multibyte chars in the changelog conversation + [#4734](https://github.com/nextcloud/spreed/pull/4734) +- Fix Chromium performance hit in calls due to blur filter + [#4780](https://github.com/nextcloud/spreed/pull/4780) +- Stop sending the nick through data channels after some time + [#4649](https://github.com/nextcloud/spreed/pull/4649) +- Fix "Copy link" not clickable when waiting alone in a call + [#4687](https://github.com/nextcloud/spreed/pull/4687) +- Fix some Matterbridge integrations + [#4728](https://github.com/nextcloud/spreed/pull/4728) + [#4800](https://github.com/nextcloud/spreed/pull/4800) +- Use proc_open to run system commands in bridge manager + [#4774](https://github.com/nextcloud/spreed/pull/4774) +- Only show password request button when the share actually has Talk Verification enabled + [#4795](https://github.com/nextcloud/spreed/pull/4795) + +## 10.0.3 – 2020-11-18 +### Fixed +- Fix conversation URL change detection + [#4642](https://github.com/nextcloud/spreed/pull/4642) +- Fix missing call icon in participant list + [#4637](https://github.com/nextcloud/spreed/pull/4637) + +## 10.0.2 – 2020-11-17 +### Fixed +- Reduce performance impact caused by the existence of the emoji picker + [#4514](https://github.com/nextcloud/spreed/pull/4514) +- Reduce the load when mounting many shares + [#4509](https://github.com/nextcloud/spreed/pull/4509) +- Fix handling of unavailable commands + [#4577](https://github.com/nextcloud/spreed/pull/4577) +- Don't leave conversation on URL hash change e.g. from search + [#4596](https://github.com/nextcloud/spreed/pull/4596) +- Correctly delete a conversation when the last moderator leaves + [#4498](https://github.com/nextcloud/spreed/pull/4498) + +## 10.0.1 – 2020-10-23 +### Fixed +- Fix automated scrolling behaviour which sometimes jumped into the middle of the message list + [#4417](https://github.com/nextcloud/spreed/pull/4417) +- Remove pulse animation from call button to reduce CPU load in chrome-based browsers + [#4301](https://github.com/nextcloud/spreed/pull/4301) +- Only show the "Session conflict" dialog when in a call + [#4442](https://github.com/nextcloud/spreed/pull/4442) +- Fix minimum length calculation of the call token + [#4369](https://github.com/nextcloud/spreed/pull/4369) +- Fix duplicate session issue in files sidebar + [#4426](https://github.com/nextcloud/spreed/pull/4426) +- Lobby date not shown in the moderator menu + [#4322](https://github.com/nextcloud/spreed/pull/4322) +- Don't load the session information in rooms with more than 100 participants + [#4278](https://github.com/nextcloud/spreed/pull/4278) +- Improve setting the initial status of audio/video when the high-performance backend is used + [#4375](https://github.com/nextcloud/spreed/pull/4375) +- Fix syntax to check for matterbridge processes to work on more systems + [#4415](https://github.com/nextcloud/spreed/pull/4415) +- Don't render an additional video when selecting the already promoted video + [#4419](https://github.com/nextcloud/spreed/pull/4419) + +## 10.0.0 – 2020-10-02 +### Added +- Implement unified search for messages + [#4017](https://github.com/nextcloud/spreed/pull/4017) +- Support for user status + [#3993](https://github.com/nextcloud/spreed/pull/3993) +- Moderators can now mute all participants with one click in the moderator menu + [#4052](https://github.com/nextcloud/spreed/pull/4052) +- Allow changing the camera and microphone during a call + [#4023](https://github.com/nextcloud/spreed/pull/4023) +- Show upload progress and a preview when sharing a file into the chat + [#3988](https://github.com/nextcloud/spreed/pull/3988) +- Add a dashboard widget with unread mentions and active calls + [#3890](https://github.com/nextcloud/spreed/pull/3890) +- Add an emoji picker to the chat + [#3994](https://github.com/nextcloud/spreed/pull/3994) +- Hosted high-performance backend trial option in the admin settings + [#3620](https://github.com/nextcloud/spreed/pull/3620) +- Remember the selected camera and microphone for future visits + [#4224](https://github.com/nextcloud/spreed/pull/4224) +- Keyboard navigation for conversation search + [#3955](https://github.com/nextcloud/spreed/pull/3955) +- Show keyboard shortcuts in the settings + [#4089](https://github.com/nextcloud/spreed/pull/4089) +- 🚧 TechPreview: Matterbridge integration + [#4010](https://github.com/nextcloud/spreed/pull/4010) +- Compatibility with Nextcloud 20 + +### Changed +- Online users are now sorted above offline moderators in the participant list, because we think it's more important what you do than who you are + [#4211](https://github.com/nextcloud/spreed/pull/4211) +- Allow to select your own video in the speaker view + [#3814](https://github.com/nextcloud/spreed/pull/3814) + +### Fixed +- "Talk to …" button in avatar only works on first use + [#4194](https://github.com/nextcloud/spreed/pull/4194) +- Reduce the load of various requests + [#4205](https://github.com/nextcloud/spreed/pull/4205) + [#4204](https://github.com/nextcloud/spreed/pull/4204) + [#4201](https://github.com/nextcloud/spreed/pull/4201) + [#4152](https://github.com/nextcloud/spreed/pull/4152) +- Fix clientside memory leaks due to missing unsubscribe of events when destroying interface components + [#4139](https://github.com/nextcloud/spreed/pull/4139) + [#4140](https://github.com/nextcloud/spreed/pull/4140) + [#4154](https://github.com/nextcloud/spreed/pull/4154) + [#4155](https://github.com/nextcloud/spreed/pull/4155) +- Installation on Oracle fails + [#4127](https://github.com/nextcloud/spreed/pull/4127) +- Try to be more safe again errors when trying to get the Talk folder for attachments + [#4165](https://github.com/nextcloud/spreed/pull/4165) +- Remove old "hark" data channel + [#4068](https://github.com/nextcloud/spreed/pull/4068) +- Show other participants video when they share their screen + [#4082](https://github.com/nextcloud/spreed/pull/4082) +- Scroll to the original message when clicking on a quota + [#4037](https://github.com/nextcloud/spreed/pull/4037) +- Fix transparency issue with the avatar menu in the participant list + [#3958](https://github.com/nextcloud/spreed/pull/3958) +- Prevent infinite loop in datachannel open re-transmission + [#3882](https://github.com/nextcloud/spreed/pull/3882) + diff --git a/docs/changelogs/changelog-11.md b/docs/changelogs/changelog-11.md new file mode 100644 index 0000000..1cfa03e --- /dev/null +++ b/docs/changelogs/changelog-11.md @@ -0,0 +1,365 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 11.3.6 – 2022-03-17 +### Fixed +- Fix several modals, dialogs and popovers in fullscreen mode + [#6886](https://github.com/nextcloud/spreed/pull/6886) +- Fix mentions inside brackets + [#6871](https://github.com/nextcloud/spreed/pull/6871) + +## 11.3.5 – 2022-01-24 +### Fixed +- Allow joining open conversations which are also shared as link with a password + [#6711](https://github.com/nextcloud/spreed/pull/6711) +- Don't force a signaling mode when starting/ending the HPB trial + [#6824](https://github.com/nextcloud/spreed/pull/6824) +- Add conversation token and message id to search results + [#6747](https://github.com/nextcloud/spreed/pull/6747) + +## 11.3.4 – 2021-12-07 +### Changed +- Remove Plan-B option from the HPB integration + [#6449](https://github.com/nextcloud/spreed/pull/6449) +- Allow apps to override/modify the TURN server list + [#6430](https://github.com/nextcloud/spreed/pull/6430) + +### Fixed +- Properly allow sha256 checksums for reference ids as advertised + [#6529](https://github.com/nextcloud/spreed/pull/6529) +- Limit deck integration to the current instance for now + [#6414](https://github.com/nextcloud/spreed/pull/6414) + +## 11.3.3 – 2021-10-22 +### Fixed +- Fix crash of Chrome/Chromium 95 + [#6384](https://github.com/nextcloud/spreed/pull/6384) + +## 11.3.2 – 2021-09-17 +### Fixed +- Fix logged-in users are unable to join a password protected public conversation + [#6231](https://github.com/nextcloud/spreed/pull/6231) +- Don't toggle the video on/off when pasting files into the chat and first releasing the CTRL key + [#6200](https://github.com/nextcloud/spreed/pull/6200) +- Fix infinite loop when the media constraints can not be decreased + [#6127](https://github.com/nextcloud/spreed/pull/6127) +- Fix connection quality warning not disappearing when media is stopped + [#6148](https://github.com/nextcloud/spreed/pull/6148) +- Send offer again when own peer was not initially connected + [#6081](https://github.com/nextcloud/spreed/pull/6081) +- Don't refresh the room when the participant list changes + [#5786](https://github.com/nextcloud/spreed/pull/5786) + +## 11.3.1 – 2021-07-15 +### Fixed +- Add UI feedback when local participant is not connected + [#5797](https://github.com/nextcloud/spreed/pull/5797) +- Allow to open files with ctrl click + [#5761](https://github.com/nextcloud/spreed/pull/5761) +- Prevent submitting the message when the user is composing a character + [#5941](https://github.com/nextcloud/spreed/pull/5941) +- Fix connection quality warning shown due to stalled stats + [#5924](https://github.com/nextcloud/spreed/pull/5924) +- Fix connection quality stats not reset when setting a new peer connection + [#5768](https://github.com/nextcloud/spreed/pull/5768) +- Ignore current participant when listing rooms if removed concurrently + [#5758](https://github.com/nextcloud/spreed/pull/5758) + [#5740](https://github.com/nextcloud/spreed/pull/5740) +- Fix links to documentation + [#5947](https://github.com/nextcloud/spreed/pull/5947) + +## 11.3.0 – 2021-06-04 +### Fixed +- Inject the preloaded user status into the avatar component + [#5694](https://github.com/nextcloud/spreed/pull/5694) +- Fix switching devices in Firefox + [#5580](https://github.com/nextcloud/spreed/pull/5580) +- Fix switching devices during a call if started without audio nor video + [#5662](https://github.com/nextcloud/spreed/pull/5662) +- Redirect to not-found page while in a call + [#5601](https://github.com/nextcloud/spreed/pull/5601) +- Regenerate session id after entering conversation password + [#5638](https://github.com/nextcloud/spreed/pull/5638) +- Fix a problem when a deleted user is recreated again + [#5643](https://github.com/nextcloud/spreed/pull/5643) +- Encode dav path segments for direct GIF preview + [#5674](https://github.com/nextcloud/spreed/pull/5674) +- Fix raised hand handler not detached when a participant leaves + [#5676](https://github.com/nextcloud/spreed/pull/5676) +- Register flow operation via dedicated instead of legacy event + [#5650](https://github.com/nextcloud/spreed/pull/5650) + +## 11.2.2 – 2021-06-04 +### Fixed +- Regenerate session id after entering conversation password + [#5639](https://github.com/nextcloud/spreed/pull/5639) +- Fix a problem when a deleted user is recreated again + [#5644](https://github.com/nextcloud/spreed/pull/5644) +- Encode dav path segments for direct GIF preview + [#5692](https://github.com/nextcloud/spreed/pull/5692) +- Fix raised hand handler not detached when a participant leaves + [#5677](https://github.com/nextcloud/spreed/pull/5677) +- Register flow operation via dedicated instead of legacy event + [#5651](https://github.com/nextcloud/spreed/pull/5651) + +## 11.2.1 – 2021-05-06 +### Fixed +- Fix redirect when deleting the current conversation + [#5315](https://github.com/nextcloud/spreed/pull/5315) +- Reset the page title when the conversation is not found + [#5493](https://github.com/nextcloud/spreed/pull/5493) +- Fix quality warning appearing again in certain conditions + [#5552](https://github.com/nextcloud/spreed/pull/5552) +- Fix camera quality starting bad in some cases + [#5556](https://github.com/nextcloud/spreed/pull/5556) +- Allow to copy the link of open conversations which the user didn't join + [#5562](https://github.com/nextcloud/spreed/pull/5562) +- Fix search focus when typing in the conversation search + [#5566](https://github.com/nextcloud/spreed/pull/5566) +- Fix sorting of users which set their user status to offline + [#5569](https://github.com/nextcloud/spreed/pull/5569) + +## 11.2.0 – 2021-04-12 +### Added +- Added a temporary OCS Api for clients to upload avatars + [#5401](https://github.com/nextcloud/spreed/pull/5401) + +### Changed +- Direct reply button in message row + [#5361](https://github.com/nextcloud/spreed/pull/5361) + +### Fixed +- Show error notification also when hello signaling message fails + [#5344](https://github.com/nextcloud/spreed/pull/5344) +- Fix UI feedback when remote participants lose connection + [#5345](https://github.com/nextcloud/spreed/pull/5345) +- Handle failed server requests more gracefully + [#5455](https://github.com/nextcloud/spreed/pull/5455) + +- Only use the local file as preview for some types when uploading + [#5423](https://github.com/nextcloud/spreed/pull/5423) +- Fix an issue with the migration to the new attendees table + [#5427](https://github.com/nextcloud/spreed/pull/5427) +- Fix the background job checking the schema + [#5374](https://github.com/nextcloud/spreed/pull/5374) +- Fix a bug with the raised hand of users that disconnect + [#5418](https://github.com/nextcloud/spreed/pull/5418) + +## 11.1.2 – 2021-04-12 +### Fixed +- Only use the local file as preview for some types when uploading + [#5424](https://github.com/nextcloud/spreed/pull/5424) +- Fix an issue with the migration to the new attendees table + [#5428](https://github.com/nextcloud/spreed/pull/5428) +- Fix the background job checking the schema + [#5373](https://github.com/nextcloud/spreed/pull/5373) +- Fix a bug with the raised hand of users that disconnect + [#5419](https://github.com/nextcloud/spreed/pull/5419) + +## 11.1.1 – 2021-03-04 +### Fixed +- Fixed a bug in the migration that could prevent copying all participants to the attendee table + [#5244](https://github.com/nextcloud/spreed/pull/5244) + +## 11.1.0 – 2021-02-23 +### Added +- Integrate with Deck to allow posting Deck cards to Talk conversations + [#5201](https://github.com/nextcloud/spreed/pull/5201) + [#5202](https://github.com/nextcloud/spreed/pull/5202) + [#5203](https://github.com/nextcloud/spreed/pull/5203) +- Allow other apps to register message actions, e.g. Deck can create a Deck card out of a chat message + [#5204](https://github.com/nextcloud/spreed/pull/5204) +- Allow to delete chat messages + [#5205](https://github.com/nextcloud/spreed/pull/5205) + [#5206](https://github.com/nextcloud/spreed/pull/5206) +- Add information about callFlags of a conversation to the API so mobile clients can show if it's a audio or video call + [#5208](https://github.com/nextcloud/spreed/pull/5208) + +### Fixed +- Prevent loading old messages twice on scroll which could skip some messages + [#5209](https://github.com/nextcloud/spreed/pull/5209) + +## 11.0.0 – 2021-02-22 +### Added +- Implement read status for messages including a privacy setting + [#4231](https://github.com/nextcloud/spreed/pull/4231) +- Allow moderators to "open" conversations so users can join themselves + [#4706](https://github.com/nextcloud/spreed/pull/4706) +- Add conversation descriptions + [#4546](https://github.com/nextcloud/spreed/pull/4546) +- Allow pagination for main grid view + [#4958](https://github.com/nextcloud/spreed/pull/4958) +- Allow to send messages again when they failed + [#4975](https://github.com/nextcloud/spreed/pull/4975) +- You can now push to talk/mute with the space key + [#4328](https://github.com/nextcloud/spreed/pull/4328) +- Added support for turns:// protocol + [#5087](https://github.com/nextcloud/spreed/pull/5087) +- Add basic support for Opera + [#4974](https://github.com/nextcloud/spreed/pull/4974) +- Allow resending email invitations + [#5052](https://github.com/nextcloud/spreed/pull/5052) +- Allow to collapse the video strip to focus more on the promoted speaker or screenshare + [#4363](https://github.com/nextcloud/spreed/pull/4363) +- Improve previews of images and allow animation of gifs + [#4472](https://github.com/nextcloud/spreed/pull/4472) +- Allow to "Raise hand" in a call + [#4569](https://github.com/nextcloud/spreed/pull/4569) +- Compatibility with Nextcloud 21 + +### Changed +- Bring up the conversation creation-dialog when clicking on a group to prevent accidentally spam + [#5062](https://github.com/nextcloud/spreed/pull/5062) +- Use different border color when own message is quoted + [#4940](https://github.com/nextcloud/spreed/pull/4940) +- Move matterbridge settings into the conversation settings dialog + [#4907](https://github.com/nextcloud/spreed/pull/4907) +- Updated database structure so all tables have a primary key for database cluster support + [#4735](https://github.com/nextcloud/spreed/pull/4735) + +### Fixed +- For more details look at the changelog of the alphas and the rc + +## 11.0.0-rc.1 – 2021-02-12 +### Added +- Allow resending email invitations + [#5052](https://github.com/nextcloud/spreed/pull/5052) +- Added support for turns:// protocol + [#5087](https://github.com/nextcloud/spreed/pull/5087) + +### Changed +- Bring up the conversation creation-dialog when clicking on a group to prevent accidentally spam + [#5062](https://github.com/nextcloud/spreed/pull/5062) + +### Fixed +- Fixed a bug that would prevent attachments going into the Talk/ folder + [#5077](https://github.com/nextcloud/spreed/pull/5077) +- Split the turn test to report whether UDP and/or TCP work + [#5104](https://github.com/nextcloud/spreed/pull/5104) +- Fix collaboration resource options not loading + [#5140](https://github.com/nextcloud/spreed/pull/5140) +- Hide the upload option when the user has no quota assigned + [#5036](https://github.com/nextcloud/spreed/pull/5036) +- Fix mentioning of users with subnames, e.g. "foo" and "foobar" + [#5041](https://github.com/nextcloud/spreed/pull/5041) +- Fix capabilities check for image preview size + [#5033](https://github.com/nextcloud/spreed/pull/5033) +- Prevent duplicated call summaries when multiple people leave a call on the HPB within a short time period + [#5042](https://github.com/nextcloud/spreed/pull/5042) + +## 11.0.0-alpha.4 – 2021-01-25 +### Added +- Allow pagination for main grid view + [#4958](https://github.com/nextcloud/spreed/pull/4958) +- Allow line breaks and links in the descriptions + [#4960](https://github.com/nextcloud/spreed/pull/4960) +- Allow to send messages again when they failed + [#4975](https://github.com/nextcloud/spreed/pull/4975) +- Add a button to directly disable the lobby + [#4997](https://github.com/nextcloud/spreed/pull/4997) +- Add basic support for Opera + [#4974](https://github.com/nextcloud/spreed/pull/4974) + +### Changed +- The avatar-blurring in calls has been replaced with the average color to improve performance on Chrome, Chromium, Safari, Edge and Opera + [#4985](https://github.com/nextcloud/spreed/pull/4985) +- User different border color when own message is quoted + [#4940](https://github.com/nextcloud/spreed/pull/4940) +- Move matterbridge settings into the conversation settings dialog + [#4907](https://github.com/nextcloud/spreed/pull/4907) + +### Fixed +- Fix Javascript errors with Internet Explorer and Safari + [#4829](https://github.com/nextcloud/spreed/pull/4829) + [#4963](https://github.com/nextcloud/spreed/pull/4963) + [#5008](https://github.com/nextcloud/spreed/pull/5008) +- Show unread one-to-one messages in dashboard widget + [#4944](https://github.com/nextcloud/spreed/pull/4944) +- Allow to clear the lobby timer value again + [#4990](https://github.com/nextcloud/spreed/pull/4990) +- Show single video in stripe if screen share in progress + [#4941](https://github.com/nextcloud/spreed/pull/4941) +- Properly initialize descriptionText with description + [#4942](https://github.com/nextcloud/spreed/pull/4942) +- Remove system message when a self-joined user leaves a conversation + [#4933](https://github.com/nextcloud/spreed/pull/4933) +- Fix scrolling of the chat when messages arrive while in background + [#4979](https://github.com/nextcloud/spreed/pull/4979) +- Fix a bug that prevented disabling sip + [#4951](https://github.com/nextcloud/spreed/pull/4951) +- Allow SIP dial-in in non-public conversations + [#4954](https://github.com/nextcloud/spreed/pull/4954) +- Correctly use the displayname for groups in admin settings + [#4943](https://github.com/nextcloud/spreed/pull/4943) +- Delete messages from UI storage when a conversation is deleted + [#4949](https://github.com/nextcloud/spreed/pull/4949) +- Add mapping between Nextcloud session id and signaling server session id, to allow linking call users with the rest of the UI + [#4952](https://github.com/nextcloud/spreed/pull/4952) +- Fix missing display names with sip users + [#4956](https://github.com/nextcloud/spreed/pull/4956) + +## 11.0.0-alpha.3 – 2021-01-08 +### Fixed +- Fix chat notifications not being sent when user is not active in a chat + [#4825](https://github.com/nextcloud/spreed/pull/4825) + [#4848](https://github.com/nextcloud/spreed/pull/4848) +- Fix CSP violation in Safari with worker-src from avatar blurring + [#4822](https://github.com/nextcloud/spreed/pull/4822) +- Don't remove a chat when a self-joined user leaves + [#4892](https://github.com/nextcloud/spreed/pull/4892) +- Avoid double quotes in bridge bot app password + [#4905](https://github.com/nextcloud/spreed/pull/4905) +- Only scroll to conversations when clicking on search results + [#4905](https://github.com/nextcloud/spreed/pull/4905) +- Do not load full room object for share queries to save resources on propfinds + [#4856](https://github.com/nextcloud/spreed/pull/4856) + +## 11.0.0-alpha.2 – 2020-12-18 +### Added +- Implement read status for messages including a privacy setting + [#4231](https://github.com/nextcloud/spreed/pull/4231) +- Implement multiple requirements to prepare for SIP dial-in + [#4324](https://github.com/nextcloud/spreed/pull/4324) + [#4469](https://github.com/nextcloud/spreed/pull/4496) + [#4682](https://github.com/nextcloud/spreed/pull/4682) + [#4689](https://github.com/nextcloud/spreed/pull/4689) +- Allow moderators to make conversations "listable" so users can join themselves + [#4706](https://github.com/nextcloud/spreed/pull/4706) +- Add the possibility for conversation descriptions + [#4546](https://github.com/nextcloud/spreed/pull/4546) +- You can now push to talk/mute with the space key + [#4328](https://github.com/nextcloud/spreed/pull/4328) +- Conversations can now be locked in the moderator settings preventing further chat messages and calls + [#4331](https://github.com/nextcloud/spreed/pull/4331) +- Allow to collapse the video strip to focus more on the promoted speaker or screenshare + [#4363](https://github.com/nextcloud/spreed/pull/4363) +- Improve previews of images and allow animation of gifs + [#4472](https://github.com/nextcloud/spreed/pull/4472) +- Allow to "Raise hand" in a call + [#4569](https://github.com/nextcloud/spreed/pull/4569) +- Compatibility with Nextcloud 21 + +### Changed +- Improve setting initial audio and video status when the HPB is used + [#4181](https://github.com/nextcloud/spreed/pull/4181) +- Remember the Grid view/Promoted speaker selection per conversation in the browser storage and when a screenshare is stopped + [#4451](https://github.com/nextcloud/spreed/pull/4451) +- Use the new Vue settings modal for user and conversation settings + [#4195](https://github.com/nextcloud/spreed/pull/4195) +- Updated database structure so all tables have a primary key for database cluster support + [#4735](https://github.com/nextcloud/spreed/pull/4735) + +### Fixed +- Diff against alpha.1: Revert update of @babel/preset-env which breaks the compiled JS + [#4808](https://github.com/nextcloud/spreed/pull/4808) +- Stop sending the nick through data channels after some time + [#4182](https://github.com/nextcloud/spreed/pull/4182) +- Don't query guest names for an empty list of guest sessions + [#4190](https://github.com/nextcloud/spreed/pull/4190) +- Use date-based names for image content that is pasted into the chat + [#4539](https://github.com/nextcloud/spreed/pull/4539) + diff --git a/docs/changelogs/changelog-12.md b/docs/changelogs/changelog-12.md new file mode 100644 index 0000000..f510173 --- /dev/null +++ b/docs/changelogs/changelog-12.md @@ -0,0 +1,233 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 12.2.8 – 2022-11-03 +### Fixed +- Fix participant sessions not sent to the HPB + [#8114](https://github.com/nextcloud/spreed/pull/8114) +- Fix guest names in search results + [#7591](https://github.com/nextcloud/spreed/pull/7591) +- Fix an issue with detecting Safari on iOS version + [#8277](https://github.com/nextcloud/spreed/pull/8277) + +## 12.2.7 – 2022-07-08 +### Added +- Add brute force protection for conversation tokens and passwords + [#7537](https://github.com/nextcloud/spreed/pull/7537) +- Add a capability for unified search to enable the feature on the clients + [#7450](https://github.com/nextcloud/spreed/pull/7450) + +### Fixed +- Fix backend URL in request to HPB from command line + [#7442](https://github.com/nextcloud/spreed/pull/7442) +- Fix error when setting user status while not being in any conversation + [#7468](https://github.com/nextcloud/spreed/pull/7468) + +## 12.2.6 – 2022-05-26 +### Fixed +- Ensure display name of conversation owner is stored correctly + [#7378](https://github.com/nextcloud/spreed/pull/7378) +- Don't show promotion options for circles and groups + [#7406](https://github.com/nextcloud/spreed/pull/7406) + +## 12.2.5 – 2022-04-08 +### Fixed +- Compatibility with LDAP user backends and more than 64 characters display names + [#7074](https://github.com/nextcloud/spreed/pull/7074) +- Compatibility with Oracle and MySQL ONLY_FULL_GROUP_BY + [#7040](https://github.com/nextcloud/spreed/pull/7040) + +## 12.2.4 – 2022-03-17 +### Fixed +- Fix several modals, dialogs and popovers in fullscreen mode + [#6884](https://github.com/nextcloud/spreed/pull/6884) +- Fix mentions inside brackets + [#6870](https://github.com/nextcloud/spreed/pull/6870) +- Fix call flags update when track is disabled + [#7015](https://github.com/nextcloud/spreed/pull/7015) + +## 12.2.3 – 2022-01-24 +### Fixed +- Allow joining open conversations which are also shared as link with a password + [#6710](https://github.com/nextcloud/spreed/pull/6710) +- Prevent handleScroll on initial loading of a conversation + [#6718](https://github.com/nextcloud/spreed/pull/6718) +- Don't force a signaling mode when starting/ending the HPB trial + [#6823](https://github.com/nextcloud/spreed/pull/6823) +- Add conversation token and message id to search results + [#6746](https://github.com/nextcloud/spreed/pull/6746) + +## 12.2.2 – 2021-12-07 +### Changed +- Show user status and message as description in 1-to-1 conversations + [#6369](https://github.com/nextcloud/spreed/pull/6369) +- Allow apps to override/modify the TURN server list + [#6428](https://github.com/nextcloud/spreed/pull/6428) + +### Fixed +- Fix connection analyzer when using simulcast with Chromium + [#6530](https://github.com/nextcloud/spreed/pull/6530) +- Properly allow sha256 checksums for reference ids as advertised + [#6406](https://github.com/nextcloud/spreed/pull/6406) +- Fix forwarding object shares to other conversations + [#6398](https://github.com/nextcloud/spreed/pull/6398) +- Fix invisible emoji picker on Safari + [#6352](https://github.com/nextcloud/spreed/pull/6352) +- Limit deck integration to the current instance for now + [#6412](https://github.com/nextcloud/spreed/pull/6412) + +## 12.2.1 – 2021-10-15 +### Changed +- Simplify sidebar in one-to-one conversations + [#6275](https://github.com/nextcloud/spreed/pull/6275) + +### Fixed +- Reuse participant information when rendering peers in a call + [#6344](https://github.com/nextcloud/spreed/pull/6344) +- Ignore sessions with timeouted ping when sending notifications + [#6329](https://github.com/nextcloud/spreed/pull/6329) +- Fix errors with the speaking events + [#6298](https://github.com/nextcloud/spreed/pull/6298) +- Don't fail hard when adding a participant in parallel + [#6264](https://github.com/nextcloud/spreed/pull/6264) +- Fix invisible emoji picker in Safari + [#6351](https://github.com/nextcloud/spreed/pull/6351) + +## 12.2.0 – 2021-09-17 +### Added +- Add "Create conversation" button on first page of dialog when creating a public conversation + [#6206](https://github.com/nextcloud/spreed/pull/6206) + +### Fixed +- Add some validation for shared geo-locations + [#6242](https://github.com/nextcloud/spreed/pull/6242) +- Move unreadMessageElement from computed to a method + [#6241](https://github.com/nextcloud/spreed/pull/6241) +- Fix logged-in users are unable to join a password protected public conversation + [#6230](https://github.com/nextcloud/spreed/pull/6230) +- Don't toggle the video on/off when pasting files into the chat and first releasing the CTRL key + [#6198](https://github.com/nextcloud/spreed/pull/6198) +- Disable recording voice messages on readonly conversations + [#6182](https://github.com/nextcloud/spreed/pull/6182) + +## 12.1.2 – 2021-09-17 +### Fixed +- Add some validation for shared geo-locations + [#6243](https://github.com/nextcloud/spreed/pull/6243) +- Fix logged-in users are unable to join a password protected public conversation + [#6229](https://github.com/nextcloud/spreed/pull/6229) +- Don't toggle the video on/off when pasting files into the chat and first releasing the CTRL key + [#6199](https://github.com/nextcloud/spreed/pull/6199) +- Fix blocked audio recording preview when Talk is embedded in the sidebar + [#6130](https://github.com/nextcloud/spreed/pull/6130) +- Fix infinite loop when the media constraints can not be decreased + [#6126](https://github.com/nextcloud/spreed/pull/6126) +- Fix connection quality warning not disappearing when media is stopped + [#6146](https://github.com/nextcloud/spreed/pull/6146) +- Send offer again when own peer was not initially connected + [#6080](https://github.com/nextcloud/spreed/pull/6080) + +## 12.1.1 – 2021-08-30 +### Changed +- Improved device preference storing to better recover after switching between docking-station and normal usage with a device + [#6179](https://github.com/nextcloud/spreed/pull/6179) + +### Fixed +- Fix laggy video with Full HD 60 FPS webcams in Chrome and Chromium + [#6159](https://github.com/nextcloud/spreed/pull/6159) +- Fix infinite loop when video constrains can not be satisfied + [#6125](https://github.com/nextcloud/spreed/pull/6125) +- Fix connection quality warning after media was stopped + [#6147](https://github.com/nextcloud/spreed/pull/6147) +- Hide forward action for guests + [#6143](https://github.com/nextcloud/spreed/pull/6143) +- Don't select the own video when trying to open the video settings + [#6158](https://github.com/nextcloud/spreed/pull/6158) +- Fix issues with several popovers in fullscreen mode or sidebar mode + [#6155](https://github.com/nextcloud/spreed/pull/6155) +- Fix issue with video recording in sidebar mode + [#6129](https://github.com/nextcloud/spreed/pull/6129) + [#6131](https://github.com/nextcloud/spreed/pull/6131) + +## 12.1.0 – 2021-08-10 +### Added +- Allow to forward messages to another chat + [#6053](https://github.com/nextcloud/spreed/pull/6053) + [#6057](https://github.com/nextcloud/spreed/pull/6057) + [#6076](https://github.com/nextcloud/spreed/pull/6076) +- Allow to clear chat history + [#6052](https://github.com/nextcloud/spreed/pull/6052) + [#5971](https://github.com/nextcloud/spreed/pull/5971) + +### Changed +- Add "missed call" chat system message for one-to-one calls + [#6031](https://github.com/nextcloud/spreed/pull/6031) + +### Fixed +- Remove div tags when pasting or writing multiline messages in Safari + [#6086](https://github.com/nextcloud/spreed/pull/6086) +- Add list of "What's new in Talk 12" + [#6050](https://github.com/nextcloud/spreed/pull/6050) + +## 12.0.1 – 2021-07-15 +### Fixed +- Unshare all items directly when deleting a room + [#5975](https://github.com/nextcloud/spreed/pull/5975) +- Fix date picker for lobby not being visible + [#5984](https://github.com/nextcloud/spreed/pull/5984) +- Fix initial camera quality with Chromium and Chromebased browsers + [#6000](https://github.com/nextcloud/spreed/pull/6000) +- Wait for the wav encoder to be initialized before allowing recordings + [#6012](https://github.com/nextcloud/spreed/pull/6012) + [#6014](https://github.com/nextcloud/spreed/pull/6014) +- Fix displaying moderation options in one-to-ones + [#6008](https://github.com/nextcloud/spreed/pull/6008) +- Never show read marker on the very last message + [#5969](https://github.com/nextcloud/spreed/pull/5969) + +## 12.0.0 – 2021-07-06 +### Added +- Add support for simulcast streams when the high-performance backend is used + [#5535](https://github.com/nextcloud/spreed/pull/5535) +- Allow users to have multiple session in the same conversation + [#5194](https://github.com/nextcloud/spreed/pull/5194) +- Voice messages, location sharing and contacts sharing + [#5610](https://github.com/nextcloud/spreed/pull/5610) + [#5573](https://github.com/nextcloud/spreed/pull/5573) + [#5731](https://github.com/nextcloud/spreed/pull/5731) +- Play a sound when a participant joins or leaves the call + [#5410](https://github.com/nextcloud/spreed/pull/5410) +- Add unread message marker in the chat view + [#3825](https://github.com/nextcloud/spreed/pull/3825) +- Show a "new message" indicator while being in the call + [#5534](https://github.com/nextcloud/spreed/pull/5534) +- Sync group members with conversation participants + [#4810](https://github.com/nextcloud/spreed/pull/4810) +- Add an option to reply privately + [#4855](https://github.com/nextcloud/spreed/pull/4855) +- Conversation TopBar with icon, name and description + [#5596](https://github.com/nextcloud/spreed/pull/5596) + +### Changed +- Use all defined STUN and TURN servers instead of a random one + [#5503](https://github.com/nextcloud/spreed/pull/5503) + [#5491](https://github.com/nextcloud/spreed/pull/5491) +- Compatibility with Nextcloud 22 + +### Fixed +- Allow to mention groupfolder users in file chats + [#4246](https://github.com/nextcloud/spreed/pull/4246) +- Fix not sending signaling messages to participants without a Peer object + [#4686](https://github.com/nextcloud/spreed/pull/4686) +- Fix several issues with video, stream and screenshare selections + +### Removed +- 🏁 Conversations API v1, v2 and v3 +- 🏁 Call API v1, v2 and v3 +- 🏁 Signaling API v1 and v2 +- 🏁 Support for Internet Explorer + diff --git a/docs/changelogs/changelog-13.md b/docs/changelogs/changelog-13.md new file mode 100644 index 0000000..b9ae350 --- /dev/null +++ b/docs/changelogs/changelog-13.md @@ -0,0 +1,262 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 13.0.11 – 2022-12-01 +### Changed +- Allow to disable the changelog conversation with an app config + [#8366](https://github.com/nextcloud/spreed/pull/8366) + +### Fixed +- Fix bottom stripe of speaker view with high DPI + [#8321](https://github.com/nextcloud/spreed/pull/8321) + +## 13.0.10 – 2022-11-03 +### Changed +- Take the device pixel ratio into account when calculating minimum grid size (should see more videos now on High DPI settings like MacOS and most 4k setup) + [#8248](https://github.com/nextcloud/spreed/pull/8248) + +### Fixed +- Hide talk dashboard when user can not use the Talk app + [#8238](https://github.com/nextcloud/spreed/pull/8238) +- Hide talk sidebar integration when user can not use the Talk app + [#8242](https://github.com/nextcloud/spreed/pull/8242) +- Fix participant sessions not sent to the HPB + [#8100](https://github.com/nextcloud/spreed/pull/8100) +- Don't search in lobbied conversations + [#8117](https://github.com/nextcloud/spreed/pull/8117) +- Fix an issue with detecting Safari on iOS version + [#8136](https://github.com/nextcloud/spreed/pull/8136) + +## 13.0.9 – 2022-09-15 +### Fixed +- Fix notification sending when the user is blocked by the lobby + [#7796](https://github.com/nextcloud/spreed/pull/7796) +- Fix missing local media controls in public share sidebar + [#7759](https://github.com/nextcloud/spreed/pull/7759) +- Fix missing screenshares in sidebar + [#7763](https://github.com/nextcloud/spreed/pull/7763) +- Fix inconsistent state when leaving a call fails + [#7804](https://github.com/nextcloud/spreed/pull/7804) + +## 13.0.8 – 2022-08-11 +### Added +- Extend search result attributes for better handling in mobile clients + [#7590](https://github.com/nextcloud/spreed/pull/7590) + [#7589](https://github.com/nextcloud/spreed/pull/7589) + +### Fixed +- Reduce sent information with disabled videos + [#7710](https://github.com/nextcloud/spreed/pull/7710) + +## 13.0.7 – 2022-07-08 +### Added +- Add brute force protection for conversation tokens and passwords + [#7536](https://github.com/nextcloud/spreed/pull/7536) +- Add a capability for unified search to enable the feature on the clients + [#7449](https://github.com/nextcloud/spreed/pull/7449) + +### Fixed +- Fix backend URL in request to HPB from command line + [#7441](https://github.com/nextcloud/spreed/pull/7441) +- Fix error when setting user status while not being in any conversation + [#7467](https://github.com/nextcloud/spreed/pull/7467) + +## 13.0.6 – 2022-05-26 +### Fixed +- Ensure display name of conversation owner is stored correctly + [#7377](https://github.com/nextcloud/spreed/pull/7377) +- Don't show promotion options for circles and groups + [#7409](https://github.com/nextcloud/spreed/pull/7409) +- Don't show permissions options for circles and groups + [#7405](https://github.com/nextcloud/spreed/pull/7405) + +## 13.0.5 – 2022-04-08 +### Fixed +- Fix reconnection when media permissions change + [#7092](https://github.com/nextcloud/spreed/pull/7092) +- Fix forced reconnection without the High-performance backend + [#7095](https://github.com/nextcloud/spreed/pull/7095) +- Compatibility with LDAP user backends and more than 64 characters display names + [#7073](https://github.com/nextcloud/spreed/pull/7073) +- Compatibility with Oracle and MySQL ONLY_FULL_GROUP_BY + [#7036](https://github.com/nextcloud/spreed/pull/7036) +- Fix broken avatars when search for users to add to a conversation + [#7037](https://github.com/nextcloud/spreed/pull/7037) +- Fix sort order of guests and logged-in users + [#7053](https://github.com/nextcloud/spreed/pull/7053) +- Allow copying links of open conversations without joining + [#7070](https://github.com/nextcloud/spreed/pull/7070) + +## 13.0.4 – 2022-03-17 +### Fixed +- Fix several modals, dialogs and popovers in fullscreen mode + [#6885](https://github.com/nextcloud/spreed/pull/6885) +- Fix issues when permissions of a participant or conversation are changed right before joining a call + [#6996](https://github.com/nextcloud/spreed/pull/6996) + [#7018](https://github.com/nextcloud/spreed/pull/7018) +- Fix media automatically enabled after selecting a device during a call + [#7017](https://github.com/nextcloud/spreed/pull/7017) +- Fix call flags update when track is disabled + [#7016](https://github.com/nextcloud/spreed/pull/7016) +- Show the version number also when the HPB backend is not older + [#6890](https://github.com/nextcloud/spreed/pull/6890) +- Correctly stop waiting sound when someone joins the call + [#6919](https://github.com/nextcloud/spreed/pull/6919) +- Improve performance when starting a call in a conversation with many participants + [#6933](https://github.com/nextcloud/spreed/pull/6933) + +## 13.0.3 – 2022-02-07 +### Fixed +- Fix stopping a screenshare for recipients + [#6857](https://github.com/nextcloud/spreed/pull/6857) +- Fix switching between screenshares + [#6850](https://github.com/nextcloud/spreed/pull/6850) +- Fix mentions inside brackets + [#6869](https://github.com/nextcloud/spreed/pull/6869) +- Allow using mentions with the mouse + [#6838](https://github.com/nextcloud/spreed/pull/6838) +- Deduplicate round trips when a moderator ends the meeting for everyone + [#6841](https://github.com/nextcloud/spreed/pull/6841) +- Fix message menu misbehaving when the message scrolls outside of the viewport + [#6855](https://github.com/nextcloud/spreed/pull/6855) + +## 13.0.2 – 2022-01-24 +### Changed +- Improve the join/leave sounds to be shorter + [#6720](https://github.com/nextcloud/spreed/pull/6720) +- Keep emoji picker open when selecting an emoji + [#6792](https://github.com/nextcloud/spreed/pull/6792) +- Reduce the set of avatar sizes so browser cache hits more often + [#6799](https://github.com/nextcloud/spreed/pull/6799) +- Improve signaling events for the roomlist + [#6719](https://github.com/nextcloud/spreed/pull/6719) +- Don't update the participant list when only you joined + [#6805](https://github.com/nextcloud/spreed/pull/6805) +- Recognize voice messages, object and file shares as unread messages + [#6826](https://github.com/nextcloud/spreed/pull/6826) + +### Fixed +- Allow joining open conversations which are also shared as link with a password + [#6709](https://github.com/nextcloud/spreed/pull/6709) +- Prevent handleScroll on initial loading of a conversation + [#6717](https://github.com/nextcloud/spreed/pull/6717) +- Don't force a signaling mode when starting/ending the HPB trial + [#6822](https://github.com/nextcloud/spreed/pull/6823) +- Add conversation token and message id to search results + [#6745](https://github.com/nextcloud/spreed/pull/6745) +- Fix enabling background blur when video is disabled + [#6705](https://github.com/nextcloud/spreed/pull/6705) +- Fix several issues with the own peer when connections are slow + [#6774](https://github.com/nextcloud/spreed/pull/6774) + +## 13.0.1 – 2021-12-13 +### Fixed +- Fix various issues with enabling/disabling the camera and background blur + [#6688](https://github.com/nextcloud/spreed/pull/6688) +- Fix unregistering of user status listener which lead to a memory leak with Nextcloud 23 + [#6643](https://github.com/nextcloud/spreed/pull/6643) +- Device not released when closing settings dialog immediate after opening + [#6638](https://github.com/nextcloud/spreed/pull/6638) +- Disable emoji picker in read-only conversations + [#6662](https://github.com/nextcloud/spreed/pull/6662) +- Make conversation settings scrollable again + [#6682](https://github.com/nextcloud/spreed/pull/6682) +- Make the pagination buttons more and clearly visible in the grid view + [#6695](https://github.com/nextcloud/spreed/pull/6695) + +## 13.0.0 – 2021-11-30 +### Added +- Moderators can now set permissions for all or individual users to control if they can enable audio and video, do a screenshare, start a call and ignore the lobby +- When starting a call is limited to moderators, they can now also end the call for all participants +- A device checker makes sure users start with the desired microphone and camera and also allows them to disable the devices before joining a call +- Users can now blur their background (Not supported on Safari) +- Users can now opt-out of call notifications on a conversation basis + +### Changed +- The layout of the call view has been redesigned +- The size of the grid view is now limited to 20 videos by default to reduce the performance impact +- Version 0.4.0 of the signaling server of the High-performance backend is now required + +### Fixed +- Show more details instead of a loading spinner only in case of connection issues +- And a lot more things here and there + +## 13.0.0-rc.4 – 2021-11-25 +### Changed +- The segmentation model of the background blur was replaced + [#6597](https://github.com/nextcloud/spreed/pull/6597) + +### Fixed +- Fix missing default permissions when opening the permissions editor + [#6614](https://github.com/nextcloud/spreed/pull/6614) +- Fix issues with device selection after muting, disconnecting and more + [#6601](https://github.com/nextcloud/spreed/pull/6601) + [#6609](https://github.com/nextcloud/spreed/pull/6609) + [#6615](https://github.com/nextcloud/spreed/pull/6615) +- Fix issues with the background blurring + [#6594](https://github.com/nextcloud/spreed/pull/6594) + [#6600](https://github.com/nextcloud/spreed/pull/6600) + +## 13.0.0-rc.3 – 2021-11-22 +### Fixed +- Fix several issues with the new call view and media controls + [#6554](https://github.com/nextcloud/spreed/pull/6554) + [#6571](https://github.com/nextcloud/spreed/pull/6571) + [#6576](https://github.com/nextcloud/spreed/pull/6576) + [#6575](https://github.com/nextcloud/spreed/pull/6575) +- Don't always enable devices when the device picker is shown + [#6567](https://github.com/nextcloud/spreed/pull/6567) +- Opening the conversation settings via the conversation list opened with wrong data + [#6584](https://github.com/nextcloud/spreed/pull/6584) +- Fix issues with the background blurring + [#6586](https://github.com/nextcloud/spreed/pull/6586) +- Fix call summary in one-to-one conversations + [#6564](https://github.com/nextcloud/spreed/pull/6564) + +### Known issue +- The video will "zoom in and out" when more than 4 people have video enabled and people with background blur start or stop speaking + +## 13.0.0-rc.2 – 2021-11-18 +### Fixed +- Fix several issues with the new call view and media controls + [#6486](https://github.com/nextcloud/spreed/pull/6486) + [#6489](https://github.com/nextcloud/spreed/pull/6489) + [#6520](https://github.com/nextcloud/spreed/pull/6520) + [#6541](https://github.com/nextcloud/spreed/pull/6541) + [#6543](https://github.com/nextcloud/spreed/pull/6543) + [#6548](https://github.com/nextcloud/spreed/pull/6548) +- Can not pass the device checker with a small screen + [#6508](https://github.com/nextcloud/spreed/pull/6508) + [#6539](https://github.com/nextcloud/spreed/pull/6539) +- Fix several issues with the background blurring + [#6502](https://github.com/nextcloud/spreed/pull/6502) + [#6532](https://github.com/nextcloud/spreed/pull/6532) + [#6535](https://github.com/nextcloud/spreed/pull/6535) + [#6546](https://github.com/nextcloud/spreed/pull/6546) + [#6547](https://github.com/nextcloud/spreed/pull/6547) +- Update hasCall state of a conversation when a chat message indicates that + [#6509](https://github.com/nextcloud/spreed/pull/6509) +- Don't end meeting for everyone when a moderator leaves + [#6484](https://github.com/nextcloud/spreed/pull/6484) + +## 13.0.0-rc.1 – 2021-11-11 +### Added +- Moderators can now set permissions for all or individual users to control if they can enable audio and video, do a screenshare, start a call and ignore the lobby +- When starting a call is limited to moderators, they can now also end the call for all participants +- A device checker makes sure users start with the desired microphone and camera and also allows them to disable the devices before joining a call +- Users can now blur their background (Not supported on Safari) +- Users can now opt-out of call notifications on a conversation basis + +### Changed +- The layout of the call view has been redesigned +- The size of the grid view is now limited to 20 videos by default to reduce the performance impact +- Version 0.4.0 of the signaling server of the High-performance backend is now required + +### Fixed +- Show more details instead of a loading spinner only in case of connection issues +- And a lot more things here and there + diff --git a/docs/changelogs/changelog-14.md b/docs/changelogs/changelog-14.md new file mode 100644 index 0000000..11c9658 --- /dev/null +++ b/docs/changelogs/changelog-14.md @@ -0,0 +1,228 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 14.0.11 – 2023-05-25 +### Changed +- Allow Brave browser without unsupported warning + [#9172](https://github.com/nextcloud/spreed/issues/9172) +- Update dependencies + +### Fixed +- Fix call summary when a user has a full numeric user ID + [#9503](https://github.com/nextcloud/spreed/issues/9503) + +## 14.0.10 – 2023-03-24 +### Fixed +- fix(calls): Fix RemoteVideoBlocker still active after removing its associated model + [#9133](https://github.com/nextcloud/spreed/pull/9133) +- fix(reactions): Fix reacting to people that left + [#8887](https://github.com/nextcloud/spreed/pull/8887) + +## 14.0.9 – 2023-02-23 +### Changed +- Update some dependencies + +### Fixed +- Only filter mentions for participants of the conversation + [#8666](https://github.com/nextcloud/spreed/pull/8666) +- Fix interaction of self-joined users with multiple sessions when navigating away + [#8730](https://github.com/nextcloud/spreed/pull/8730) + +## 14.0.8 – 2023-01-19 +### Fixed +- Allow autocompleting conversation names from the middle + [#8506](https://github.com/nextcloud/spreed/pull/8506) +- Call view not shown when rejoining a call in the file sidebar + [#8508](https://github.com/nextcloud/spreed/pull/8508) +- Fix leaving the call when switching to another conversation + [#8530](https://github.com/nextcloud/spreed/pull/8530) + +## 14.0.7 – 2022-12-01 +### Changed +- Allow to disable the changelog conversation with an app config + [#8365](https://github.com/nextcloud/spreed/pull/8365) + +### Fixed +- Fix in_call flag on the "Join room" API response + [#8372](https://github.com/nextcloud/spreed/pull/8372) +- Fix bottom stripe of speaker view with high DPI + [#8320](https://github.com/nextcloud/spreed/pull/8320) + +## 14.0.6 – 2022-11-03 +### Changed +- Take the device pixel ratio into account when calculating minimum grid size (should see more videos now on High DPI settings like MacOS and most 4k setup) + [#8247](https://github.com/nextcloud/spreed/pull/8247) + +### Fixed +- Fix XML API endpoint for chats with empty reactions result + [#8110](https://github.com/nextcloud/spreed/pull/8110) +- Hide talk dashboard when user can not use the Talk app + [#8237](https://github.com/nextcloud/spreed/pull/8237) +- Hide talk sidebar integration when user can not use the Talk app + [#8241](https://github.com/nextcloud/spreed/pull/8241) +- Fix participant sessions not sent to the HPB + [#8099](https://github.com/nextcloud/spreed/pull/8099) +- Don't search in lobbied conversations + [#8116](https://github.com/nextcloud/spreed/pull/8116) +- Fix an issue with detecting Safari on iOS version + [#8135](https://github.com/nextcloud/spreed/pull/8135) + +## 14.0.5 – 2022-09-15 +### Fixed +- Fix notification sending when the user is blocked by the lobby + [#7794](https://github.com/nextcloud/spreed/pull/7794) +- Fix missing local media controls in public share sidebar + [#7758](https://github.com/nextcloud/spreed/pull/7758) +- Fix missing screenshares in sidebar + [#7760](https://github.com/nextcloud/spreed/pull/7760) +- Fix inconsistent state when leaving a call fails + [#7803](https://github.com/nextcloud/spreed/pull/7803) + +## 14.0.4 – 2022-08-11 +### Added +- Extend search result attributes for better handling in mobile clients + [#7588](https://github.com/nextcloud/spreed/pull/7588) + [#7587](https://github.com/nextcloud/spreed/pull/7587) + +### Fixed +- Location shares not visible in chat anymore (only in the sidebar tab) + [#7550](https://github.com/nextcloud/spreed/pull/7550) +- Reduce sent information with disabled videos + [#7709](https://github.com/nextcloud/spreed/pull/7709) +- Multiple accessibility fixes + [#7599](https://github.com/nextcloud/spreed/pull/7599) + [#7654](https://github.com/nextcloud/spreed/pull/7654) + [#7553](https://github.com/nextcloud/spreed/pull/7553) + [#7570](https://github.com/nextcloud/spreed/pull/7570) + +## 14.0.3 – 2022-07-08 +### Added +- Add brute force protection for conversation tokens and passwords + [#7535](https://github.com/nextcloud/spreed/pull/7535) +- Allow the HPB to group session pinging across multiple conversations + [#7444](https://github.com/nextcloud/spreed/pull/7444) +- Add a capability for unified search to enable the feature on the clients + [#7448](https://github.com/nextcloud/spreed/pull/7448) + +### Fixed +- Fix backend URL in request to HPB from command line + [#7440](https://github.com/nextcloud/spreed/pull/7440) +- Fix error when setting user status while not being in any conversation + [#7466](https://github.com/nextcloud/spreed/pull/7466) + +## 14.0.2 – 2022-05-26 +### Changed +- Add "Others" section to shared items tab to list unknown items + [#7350](https://github.com/nextcloud/spreed/pull/7350) + +### Fixed +- Only declare changed sessions as such instead of all sessions of that participant + [#7382](https://github.com/nextcloud/spreed/pull/7382) +- Ensure display name of conversation owner is stored correctly + [#7376](https://github.com/nextcloud/spreed/pull/7376) +- Don't show promotion options for circles and groups + [#7404](https://github.com/nextcloud/spreed/pull/7404) +- Don't show permissions options for circles and groups + [#7360](https://github.com/nextcloud/spreed/pull/7360) +- Don't show reactions option for command messages + [#7345](https://github.com/nextcloud/spreed/pull/7345) +- Fix forwarding replies + [#7343](https://github.com/nextcloud/spreed/pull/7343) + +## 14.0.1 – 2022-05-07 +### Fixed +- Fix memory consumption with emoji picker in conversations with a lot of chat messages with reactions + [#7328](https://github.com/nextcloud/spreed/pull/7328) +- Fix endless offer loop with SIP participants + [#7288](https://github.com/nextcloud/spreed/pull/7288) +- Fix room selector in deck and maps integration + [#7290](https://github.com/nextcloud/spreed/pull/7290) + [#7294](https://github.com/nextcloud/spreed/pull/7294) +- Fix transceiver kind for participants without the HPB + [#7263](https://github.com/nextcloud/spreed/pull/7263) +- Fix error on console when initiating a screenshare + [#7330](https://github.com/nextcloud/spreed/pull/7330) +- Add missing translations of 24 branch + [#7330](https://github.com/nextcloud/spreed/pull/7330) + +## 14.0.0 – 2022-05-02 +### Added +- Reactions for chat messages +- Media tab in the sidebar to show all the shared items +- Implement `OCP\Talk\IBroker` to allow apps to create conversations +- Sharing a browser tab in Chrome-based browsers can now also share the audio of that tab + +### Changed +- Messages of shared objects and files can now be deleted (shares will be removed, files persist) +- Actions like calling and chatting in big rooms are now much smoother +- Compatibility with Nextcloud 24 + +## 14.0.0-rc.4 – 2022-04-29 +### Added +- Add a modal to show more shared items + +### Fixed +- Make reactions work for guests and handle guests without name in the summary + [#7217](https://github.com/nextcloud/spreed/pull/7217) +- Add a link to notification sound settings from talk settings + [#7224](https://github.com/nextcloud/spreed/pull/7224) +- Fix migration with Postgres and Oracle + [#7211](https://github.com/nextcloud/spreed/pull/7211) +- Add programmatic output options to talk:active-calls command + [#7227](https://github.com/nextcloud/spreed/pull/7227) +- Fix media tab and reactions summary in read-only rooms + [#7236](https://github.com/nextcloud/spreed/pull/7236) + +## 14.0.0-rc.3 – 2022-04-22 +### Fixed +- Move message.reactions.self to message.reactionsSelf to not merge different data structures + [#7182](https://github.com/nextcloud/spreed/pull/7182) +- Use actor and time information from the reaction not the message author + [#7190](https://github.com/nextcloud/spreed/pull/7190) +- Fix migration of attachment types for media + [#7196](https://github.com/nextcloud/spreed/pull/7196) +- Open chat tab by default in sidebar while in a call + [#7201](https://github.com/nextcloud/spreed/pull/7201) +- Fix access to undefined key + [#7195](https://github.com/nextcloud/spreed/pull/7195) +- Only set header when the value changed and the status is not 304 + [#7200](https://github.com/nextcloud/spreed/pull/7200) + +### Still in progress +- Media tab showing all shared items of the conversation + +## 14.0.0-rc.2 – 2022-04-19 +### Fixed +- Remove event to delete shares when user leave of room + [#7168](https://github.com/nextcloud/spreed/pull/7168) +- Add item shares from chat messages directly to the store + [#7149](https://github.com/nextcloud/spreed/pull/7149) +- Only switch to the participant tab when the token changes not any other detail + [#7146](https://github.com/nextcloud/spreed/pull/7146) +- Don't update last message of conversation with invisible message + [#7142](https://github.com/nextcloud/spreed/pull/7142) + +### Still in progress +- Media tab showing all shared items of the conversation + +## 14.0.0-rc.1 – 2022-04-13 +### Added +- Reactions for chat messages +- Media tab in the sidebar to show all the shared items +- Implement `OCP\Talk\IBroker` to allow apps to create conversations +- Sharing a browser tab in Chrome-based browsers can now also share the audio of that tab + [#6810](https://github.com/nextcloud/spreed/pull/6810) + +### Still in progress +- Media tab showing all shared items of the conversation + +### Changed +- Messages of shared objects and files can now be deleted (shares will be removed, files persist) + [#7047](https://github.com/nextcloud/spreed/pull/7047) +- Actions like calling and chatting in big rooms should now be much smoother +- Compatibility with Nextcloud 24 + diff --git a/docs/changelogs/changelog-15.md b/docs/changelogs/changelog-15.md new file mode 100644 index 0000000..5dad099 --- /dev/null +++ b/docs/changelogs/changelog-15.md @@ -0,0 +1,252 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 15.0.8 – 2023-09-21 +### Changed +- Update dependencies + +### Fixed +- fix(call): Add an option to disable background blur in call + [#10474](https://github.com/nextcloud/spreed/issues/10474) +- fix(page): Decouple the index controller from the executing method + [#10548](https://github.com/nextcloud/spreed/issues/10548) +- Fix using signaling settings while being refetched + [#10257](https://github.com/nextcloud/spreed/issues/10257) +- fix(chat): clean conversation history for participants in call + [#10304](https://github.com/nextcloud/spreed/issues/10304) + +## 15.0.7 – 2023-07-20 +### Fixed +- Make conversation name and description selectable + [#9784](https://github.com/nextcloud/spreed/issues/9784) + +## 15.0.6 – 2023-05-25 +### Changed +- Allow Brave browser without unsupported warning + [#9167](https://github.com/nextcloud/spreed/issues/9167) +- Update dependencies + +### Fixed +- Fix call summary when a user has a full numeric user ID + [#9504](https://github.com/nextcloud/spreed/issues/9504) + +## 15.0.5 – 2023-03-24 +### Fixed +- fix(calls): Fix RemoteVideoBlocker still active after removing its associated model + [#9132](https://github.com/nextcloud/spreed/pull/9132) +- fix(polls): Remove polls also when deleting the chat history + [#8992](https://github.com/nextcloud/spreed/pull/8992) +- fix(reactions): Fix reacting to people that left + [#8886](https://github.com/nextcloud/spreed/pull/8886) + +## 15.0.4 – 2023-02-23 +### Added +- Make "End call for everyone" available for moderators all the time + [#8767](https://github.com/nextcloud/spreed/pull/8767) + +### Changed +- Update some dependencies + +### Fixed +- Show tooltip for conversations with a long title + [#8659](https://github.com/nextcloud/spreed/pull/8659) +- Don't break the maps app with the Talk Files sidebar integration + [#8590](https://github.com/nextcloud/spreed/pull/8590) +- Only register the maps integration when the user is allowed to use Talk + [#8591](https://github.com/nextcloud/spreed/pull/8591) +- Fix missing "Unread mentions" floating button since Nextcloud 25 theming update + [#8603](https://github.com/nextcloud/spreed/pull/8603) +- Fix button style while being in a call + [#8671](https://github.com/nextcloud/spreed/pull/8671) +- Only filter mentions for participants of the conversation + [#8665](https://github.com/nextcloud/spreed/pull/8665) +- Fix interaction of self-joined users with multiple sessions when navigating away + [#8729](https://github.com/nextcloud/spreed/pull/8729) + +## 15.0.3 – 2023-01-19 +### Changed +- Update @nextcloud/vue library to 7.4.0 + [#8458](https://github.com/nextcloud/spreed/pull/8458) + [#8565](https://github.com/nextcloud/spreed/pull/8565) + +### Fixed +- Allow autocompleting conversation names from the middle + [#8505](https://github.com/nextcloud/spreed/pull/8505) +- Call view not shown when rejoining a call in the file sidebar + [#8507](https://github.com/nextcloud/spreed/pull/8507) +- Fix leaving the call when switching to another conversation + [#8529](https://github.com/nextcloud/spreed/pull/8529) +- Don't keep the session open longer than necessary when leaving and joining a conversation + [#8394](https://github.com/nextcloud/spreed/pull/8394) +- Enforce a length of the private JWT keys used for signaling in case libressl has 0 as default + [#8468](https://github.com/nextcloud/spreed/pull/8468) +- Remove webserver warning when in unknown state as it confuses admins + [#8512](https://github.com/nextcloud/spreed/pull/8512) +- Remove expired messages from API even when the background job did not execute + [#8523](https://github.com/nextcloud/spreed/pull/8523) + +## 15.0.2 – 2022-12-01 +### Changed +- Allow to disable the changelog conversation with an app config + [#8365](https://github.com/nextcloud/spreed/pull/8365) +- Improve message grouping duration to match better with UX expectations + [#8288](https://github.com/nextcloud/spreed/pull/8288) +- Update @nextcloud/vue library to 7.1.0 + [#8405](https://github.com/nextcloud/spreed/pull/8405) + [#8419](https://github.com/nextcloud/spreed/pull/8419) + +### Fixed +- Fix in_call flag on the "Join room" API response + [#8371](https://github.com/nextcloud/spreed/pull/8371) +- Fix bottom stripe of speaker view with high DPI + [#8319](https://github.com/nextcloud/spreed/pull/8319) +- Make webserver configuration check less error-prone + [#8310](https://github.com/nextcloud/spreed/pull/8310) + [#8332](https://github.com/nextcloud/spreed/pull/8332) +- Fix monitoring command when using SQLite + [#8304](https://github.com/nextcloud/spreed/pull/8304) +- Fix chat not loading in certain situations (e.g. more than 100 votes in a row without any chat message in between) + [#8322](https://github.com/nextcloud/spreed/pull/8322) +- Immediately remove poll data when deleting the "asking message" + [#8362](https://github.com/nextcloud/spreed/pull/8362) +- Fix inconsistent behaviour of link and password option on conversation creation + [#8367](https://github.com/nextcloud/spreed/pull/8367) + +## 15.0.1 – 2022-11-03 +### Changed +- Take the device pixel ratio into account when calculating minimum grid size (should see more videos now on High DPI settings like MacOS and most 4k setup) + [#8246](https://github.com/nextcloud/spreed/pull/8246) + +### Fixed +- Show the number of cast votes to the question raiser and moderators on the voting screen + [#8273](https://github.com/nextcloud/spreed/pull/8273) +- Hide talk dashboard when user can not use the Talk app + [#8236](https://github.com/nextcloud/spreed/pull/8236) +- Hide talk sidebar integration when user can not use the Talk app + [#8240](https://github.com/nextcloud/spreed/pull/8240) +- Show other participant's name when waiting in a one-to-one call + [#8228](https://github.com/nextcloud/spreed/pull/8228) + +## 15.0.0 – 2022-10-18 +### Added +- 🌏 Show link previews for chat messages with links +- 🛂 Chat permission +- 📊 Simple polls +- 📴 "Silent call" for group/public calls +- 🔔 Allow to re-notify a participant for a call +- 🔕 "Silent send" for chat messages +- 🔍 Search for messages in mobile apps +- 📵 Allow to disable calling functionality +- 📞 Allow SIP dial-in without individual user PINs +- 🗒️ Allow to create new files from within the chat +- ⏳ Expiration for chat messages +- 💻 New CLI commands for devops to monitor calls and rooms + +## 15.0.0-rc.5 – 2022-10-13 +### Fixed +- Fix frequent emoji list breaking due to multiple emoji-data versions +- Keep emoji picker open even when hovering another message +- Adjust dashboard API list to be the same as in the web +- Upgrade to @nextcloud/vue v7.0.0 + +## 15.0.0-rc.4 – 2022-10-10 +### Fixed +- Fix call button missing on Safari for iPadOS +- Fix silent call not working from web + +## 15.0.0-rc.3 – 2022-10-10 +### Changed +- Move all checkboxes to NcCheckboxRadioSwitch component so the UI doesn't break +- Reorganize the conversation settings + +### Fixed +- Fix chats not getting marked as read with reactions + +## 15.0.0-rc.2 – 2022-09-29 +### Added +- Commands to monitor calls and a single room +- Add a reference provider for call links + +### Fixed +- Reaction summary missing when hovering a chat message +- Fix recursion when the lobby of a conversation expired +- Fix missing "Leave call" button for moderators in restricted rooms +- Fix padding in the left sidebar +- Bump @nextcloud/vue and @nextcloud/vue-richtext + +## 15.0.0-rc.1 – 2022-09-22 +### Added +- Implement the new dashboard widget modes + +### Changed +- Allow to opt-out of keyboard shortcuts to improve accessibility + +### Fixed +- Show more poll voters in details popover +- Do not allow to forward polls as they become non-functional +- Fix coloring of reaction buttons +- Reduce preview size for non-images +- Disallow polls in one-to-one chats +- Adjust the height of file upload modals +- Show empty content when all messages expire +- Correctly quote the parent again when sending the message failed + +## 15.0.0-beta.4 – 2022-09-15 +### Added +- Add related_resources UI + +### Changed +- Use Node 16 and NPM 8 to compile the interface +- Several dependency updates +- Unload chat messages when moving to another chat to avoid lagging on return + +### Fixed +- Several fixes to adapt to the UI changes in Nextcloud 25 +- Respect message expiration in the frontend when the user never leaves the conversation +- Fix handling of deleted users in polls +- Allow recalling the owner as a normal moderator + +## 15.0.0-beta.3 – 2022-09-09 +### Changed +- Finish polls UI + +### Fixed +- Several fixes to adapt to the UI changes in Nextcloud 25 + +## 15.0.0-beta.2 – 2022-09-01 +### Added +- 🗒️ Allow to create new files from within the chat +- 🌏 Show link previews for chat messages with links +- Show more details on the poll result screen +- Upgrade @nextcloud/vue to version 7 + +### Changed +- Improve performance by using the UserDisplayNameCache +- Improve performance of chats with a lot of shared files +- Populate ETag and permissions so the image editor works as expected + +### Fixed +- Fix depenendency management and make sure all required dependencies are shipped +- Fix type of icon size +- Fix missing aria-labels and tooltips in various places +- Fix missing local media in share sidebar +- Fix missing screenshares in share sidebar +- Ensure that the reactions details is always an object +- Do not allow to close a poll twice +- Make handling of guest moderators more consistent + +## 15.0.0-beta.1 – 2022-08-12 +### Added +- 🛂 Chat permission +- 📊 Simple polls +- 📴 "Silent call" for group/public calls +- 🔔 Allow to re-notify a participant for a call +- 🔕 "Silent send" for chat messages +- 🔍 Search for messages in mobile apps +- 📵 Allow to disable calling functionality +- 📞 Allow SIP dial-in without individual user PINs + diff --git a/docs/changelogs/changelog-16.md b/docs/changelogs/changelog-16.md new file mode 100644 index 0000000..4264dee --- /dev/null +++ b/docs/changelogs/changelog-16.md @@ -0,0 +1,356 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 16.0.11 – 2024-02-29 +### Changed +- Update translations + +### Fixed +- fix(webrtc): Ignore label of data channel when processing received messages for Janus 1.x compatibility + [#11669](https://github.com/nextcloud/spreed/issues/11669) +- fix(notifications): Fix notification action label length with utf8 languages + [#11619](https://github.com/nextcloud/spreed/issues/11619) +- fix(chat): Fix forwarding messages from conversations in the right sidebar + [#11611](https://github.com/nextcloud/spreed/issues/11611) + +## 16.0.10 – 2024-01-25 +### Fixed +- fix(attachments): Don't allow selecting shared folders as attachment folder + [#11431](https://github.com/nextcloud/spreed/issues/11431) + +## 16.0.9 – 2023-12-19 +### Fixed +- fix(occ): Fix verification of STUN server details + [#11195](https://github.com/nextcloud/spreed/issues/11195) +- fix(hosted-hpb): Correctly handle API response codes of hosted High-performance backend when the account expired + [#11045](https://github.com/nextcloud/spreed/issues/11045) + +## 16.0.8 – 2023-11-23 +### Fixed +- fix(settings): Remove non-working notification settings for guests + [#10976](https://github.com/nextcloud/spreed/issues/10976) +- fix(settings): Fix option to request an HPB trial + [#10967](https://github.com/nextcloud/spreed/issues/10967) +- fix(settings): Fail recording server test when an HPB was given as recording backend + [#10950](https://github.com/nextcloud/spreed/issues/10950) +- fix(chat): Hide delete option for guests + [#10807](https://github.com/nextcloud/spreed/issues/10807) + +## 16.0.7 – 2023-10-27 +### Changed +- Update dependencies + +### Fixed +- fix(call): Fix "silent" parameter not sent again when reconnecting + [#10777](https://github.com/nextcloud/spreed/issues/10777) +- fix(chat): Fix message grouping for all locales + [#10696](https://github.com/nextcloud/spreed/issues/10696) +- fix(RightSidebar) update active tab on mount and conversation change + [#10564](https://github.com/nextcloud/spreed/issues/10564) +- fix(sip): Fix saving the secret of the SIP bridge in the admin UI + [#10719](https://github.com/nextcloud/spreed/issues/10719) + +## 16.0.6 – 2023-09-21 +### Changed +- Update dependencies + +### Fixed +- fix(chat): Fix responding with "X-Chat-Last-Common-Read" when requested by the client + [#10340](https://github.com/nextcloud/spreed/issues/10340) +- fix(call): Add an option to disable background blur in call + [#10473](https://github.com/nextcloud/spreed/issues/10473) +- fix(desktop): fix disabling avatar menu for desktop + [#10183](https://github.com/nextcloud/spreed/issues/10183) +- fix(page): Decouple the index controller from the executing method + [#10547](https://github.com/nextcloud/spreed/issues/10547) +- Fix using signaling settings while being refetched + [#10259](https://github.com/nextcloud/spreed/issues/10259) +- fix(chat): clean conversation history for participants in call + [#10303](https://github.com/nextcloud/spreed/issues/10303) + +## 16.0.5 – 2023-07-20 +### Changed +- Close sidebar on mobile resolution after changing the route + [#9764](https://github.com/nextcloud/spreed/issues/9764) + +### Fixed +- Make chat stay scrolling when the last message receives its first reaction + [#9957](https://github.com/nextcloud/spreed/issues/9957) +- Improve call view video size calculation + [#9836](https://github.com/nextcloud/spreed/issues/9836) +- Update group displayname when a group is renamed + [#9840](https://github.com/nextcloud/spreed/issues/9840) +- Don't make the conversation list scroll when the selected conversation is already visible + [#9785](https://github.com/nextcloud/spreed/issues/9785) +- Make conversation name and description selectable + [#9781](https://github.com/nextcloud/spreed/issues/9781) + +## 16.0.4 – 2023-05-25 +### Added +- Allow to mark conversations unread in the sidebar + [#9366](https://github.com/nextcloud/spreed/issues/9366) + +### Changed +- Make self-joined users persistent members when assigning permissions + [#9434](https://github.com/nextcloud/spreed/issues/9434) +- Update dependencies + +### Fixed +- Special characters are HTML encoded when selecting an Emoji from the picker + [#9545](https://github.com/nextcloud/spreed/issues/9545) +- Fix missing "New message" form on share and files app integration + [#9532](https://github.com/nextcloud/spreed/issues/9532) +- Fix diverging user status between top bar and conversation list + [#9419](https://github.com/nextcloud/spreed/issues/9419) +- Fix call summary when a user has a full numeric user ID + [#9502](https://github.com/nextcloud/spreed/issues/9502) +- Fix mentions of groups with spaces in the ID and guests + [#9420](https://github.com/nextcloud/spreed/issues/9420) +- Prevent sending empty chat messages + [#9515](https://github.com/nextcloud/spreed/issues/9515) + +## 16.0.3 – 2023-04-20 +### Added +- feat: Add missing "New in Talk 16" section + [#9205](https://github.com/nextcloud/spreed/pull/9205) + +### Changed +- Update several dependencies + +### Fixed +- fix(chat): Fix missing popups and modals in fullscreen mode + [#9323](https://github.com/nextcloud/spreed/pull/9323) +- fix(chat): Fix squeezed mention suggestions after library update + [#9302](https://github.com/nextcloud/spreed/pull/9302) +- fix(conversation): Change redirect when the conversation is left or deleted + [#9242](https://github.com/nextcloud/spreed/pull/9242) + [#9058](https://github.com/nextcloud/spreed/pull/9058) +- fix(sidebar): Improve handling of the sidebar + [#9212](https://github.com/nextcloud/spreed/pull/9212) +- fix(settings): Fix admin settings page when upload limit is infinite + [#9247](https://github.com/nextcloud/spreed/pull/9247) + +## 16.0.2 – 2023-03-28 +### Added +- feat: Allow Chromium-based browser Brave + [#9166](https://github.com/nextcloud/spreed/pull/9166) +- feat(smart-picker): Add conversation search to the smart-picker integration + [#9105](https://github.com/nextcloud/spreed/pull/9105) + +### Changed +- Update several dependencies + +### Fixed +- fix(chat): Fix lost message text when autocomplete triggers after pasting text inside the @nextcloud/vue library + [#9191](https://github.com/nextcloud/spreed/pull/9191) +- fix(chat): Fix visual regression with links inside the @nextcloud/vue library + [#9191](https://github.com/nextcloud/spreed/pull/9191) +- fix(reactions): Don't update last message when someone reacted + [#9186](https://github.com/nextcloud/spreed/pull/9186) +- fix(recordings): Set a dedicated user-agent for the recording backend + [#9184](https://github.com/nextcloud/spreed/pull/9184) + [#9194](https://github.com/nextcloud/spreed/pull/9194) +- fix(desktop): Hide some features inside the desktop client + [#9171](https://github.com/nextcloud/spreed/pull/9171) + +## 16.0.1 – 2023-03-24 +### Added +- feat(chat): Allow to receive messages without marking notifications as unread + [#9103](https://github.com/nextcloud/spreed/pull/9103) + +### Changed +- Update several dependencies + +### Fixed +- fix(chat): Fix multiple issues with emoji and mention autocompletion +- fix(chat): Fix pasting HTML and XML content into the chat input + [#9104](https://github.com/nextcloud/spreed/pull/9104) +- fix(calls): Fix RemoteVideoBlocker still active after removing its associated model + [#9131](https://github.com/nextcloud/spreed/pull/9131) +- fix(breakout-rooms): Fix breakout-room option shown for public conversations + [#9135](https://github.com/nextcloud/spreed/pull/9135) +- fix(UI): Fix conditions when a reload of the UI is necessary + [#9123](https://github.com/nextcloud/spreed/pull/9123) +- fix(recordings): Fix default quality of call recordings + [#9121](https://github.com/nextcloud/spreed/pull/9121) +- fix(chat): Don't focus the chat input on mobile devices + [#8898](https://github.com/nextcloud/spreed/pull/8898) + +## 16.0.0 – 2023-03-21 +### Added for users +- Breakout rooms can be used to split a group call into temporary working groups (Requires the High-performance backend) + [#8337](https://github.com/nextcloud/spreed/pull/8337) +- Calls can now be recorded (Requires the High-performance backend) + [#8324](https://github.com/nextcloud/spreed/pull/8324) +- The top bar now shows useful information like participant count, call duration and title while in a call. + [#8341](https://github.com/nextcloud/spreed/pull/8341) +- Chat input now allows to autocomplete emojis + [#4333](https://github.com/nextcloud/spreed/pull/4333) + +### Added for administrators +- Administrators can now define the default conversation permissions via the `default_permissions` app config + [#8457](https://github.com/nextcloud/spreed/pull/8457) +- Administrators can now define the default name of the Talk/ attachments folder via the `default_attachment_folder` app config + [#8465](https://github.com/nextcloud/spreed/pull/8465) +- OCC command to transfer-ownership of conversations was added allowing to hand over conversations during off-boarding + [#8479](https://github.com/nextcloud/spreed/pull/8479) +- All available app configurations have been documented in the [settings documentation](https://nextcloud-talk.readthedocs.io/en/latest/settings/#app-configuration) + +### Added for developers +- Chat API now allows to get the context (older and newer messages) for a message + [#8717](https://github.com/nextcloud/spreed/pull/8717) +- Conversation list is now being instantly updated with information from notifications + [#8723](https://github.com/nextcloud/spreed/pull/8723) +- Conversations API now supports a "modified since" parameter to only get changed conversations + [#8726](https://github.com/nextcloud/spreed/pull/8726) +- Chats are opened now without a page reload when interacting with notifications + [#8713](https://github.com/nextcloud/spreed/pull/8713) +- Introduced a new conversation type to indicate that a conversation was a one-to-one conversation + [#8600](https://github.com/nextcloud/spreed/pull/8600) + +### Changed +- Version 1.1.0 of the signaling server of the High-performance backend is now required +- Update several dependencies + + +## 16.0.0-rc.4 – 2023-03-20 +### Fixed +- Fix flickering when dragging a file over the window with Safari on MacOS + [#9076](https://github.com/nextcloud/spreed/pull/9076) +- Fix flickering with message buttons bar of the last message + [#9043](https://github.com/nextcloud/spreed/pull/9043) +- Fix conditions for showing "Reply" and "Reply privately" + [#9052](https://github.com/nextcloud/spreed/pull/9052) + +## 16.0.0-rc.3 – 2023-03-09 +### Fixed +- Correctly handle `<` and `>` in chat messages + [#8977](https://github.com/nextcloud/spreed/pull/8977) +- Improve the position of the message button bar for single line and very long messages + [#9009](https://github.com/nextcloud/spreed/pull/9009) +- Remove space on call-time button + [#8979](https://github.com/nextcloud/spreed/pull/8979) +- Fix displaying of restricted and full permissions selection when manually configuring them + [#8982](https://github.com/nextcloud/spreed/pull/8982) +- Fix dashboard widget API returning breakout rooms + [#8976](https://github.com/nextcloud/spreed/pull/8976) +- Improve breakout room API documentation + [#8994](https://github.com/nextcloud/spreed/pull/8994) +- Also remove polls when purging the chat history + [#8991](https://github.com/nextcloud/spreed/pull/8991) +- Fix mention and emoji autocomplete when broadcasting to breakout rooms + [#8999](https://github.com/nextcloud/spreed/pull/8999) +- Notify the moderator when uploading a recording failed + [#9000](https://github.com/nextcloud/spreed/pull/9000) +- Add a warning in the admin settings when the file upload limits are lower than 512 MB + [#9002](https://github.com/nextcloud/spreed/pull/9002) +- Fix unread message count improving when receiving own messages + [#9011](https://github.com/nextcloud/spreed/pull/9011) +- Fix duplicate attachment upload with Safari and Chrome on MacOS + [#9012](https://github.com/nextcloud/spreed/pull/9012) + +## 16.0.0-rc.2 – 2023-03-06 +### Changed +- Update several dependencies +- Migrate RichText component usage to NcRichText + [#8959](https://github.com/nextcloud/spreed/pull/8959) + +### Fixed +- Design review changes for breakout rooms handling + [#8962](https://github.com/nextcloud/spreed/pull/8962) +- Add documentation for OCC commands + [#8907](https://github.com/nextcloud/spreed/pull/8907) + +## 16.0.0-rc.1 – 2023-03-02 +### Changed +- Update several dependencies + +### Fixed +- Design review changes for breakout rooms handling + [#8905](https://github.com/nextcloud/spreed/pull/8905) + [#8910](https://github.com/nextcloud/spreed/pull/8910) + [#8919](https://github.com/nextcloud/spreed/pull/8919) + [#8920](https://github.com/nextcloud/spreed/pull/8920) + [#8921](https://github.com/nextcloud/spreed/pull/8921) + [#8922](https://github.com/nextcloud/spreed/pull/8922) +- Always expose the breakout room names when being a member of the parent + [#8925](https://github.com/nextcloud/spreed/pull/8925) +- Hide breakout rooms from the dashboard widget + [#8918](https://github.com/nextcloud/spreed/pull/8918) +- Fix chat scrolling to the end and the quick access button for it + [#8895](https://github.com/nextcloud/spreed/pull/8895) +- Breakout rooms can not be configured in full screen mode + [#8897](https://github.com/nextcloud/spreed/pull/8897) +- Button to reopen the chat sidebar while being in a call can disappear + [#8923](https://github.com/nextcloud/spreed/pull/8923) +- Error when reacting to a message when the author left the conversation + [#8883](https://github.com/nextcloud/spreed/pull/8883) +- File upload modal is positioned outside the chat + [#8906](https://github.com/nextcloud/spreed/pull/8906) + +## 16.0.0-beta.2 – 2023-02-27 +### Changed +- Update several dependencies + +### Fixed +- Don't show breakout room options in one-to-one and public conversations + [#8875](https://github.com/nextcloud/spreed/pull/8875) +- Don't show recording options when no recording servers are configured + [#8874](https://github.com/nextcloud/spreed/pull/8874) +- Focus conversation name field when creating conversation + [#8873](https://github.com/nextcloud/spreed/pull/8873) +- Allow to abort emoji-autocomplete with ESC + [#8870](https://github.com/nextcloud/spreed/pull/8870) +- Focus chat input when replying to a message + [#8864](https://github.com/nextcloud/spreed/pull/8864) +- Fix message type of attachments uploaded via mobile apps + [#8861](https://github.com/nextcloud/spreed/pull/8861) +- Hide the bottom video stripe in recordings + [#8844](https://github.com/nextcloud/spreed/pull/8844) +- Don't allow to change certain settings directly inside breakout rooms + [#8841](https://github.com/nextcloud/spreed/pull/8841) +- Fix detection of the recording state + [#8840](https://github.com/nextcloud/spreed/pull/8840) +- Improve notification subject and message for recording uploads + [#8837](https://github.com/nextcloud/spreed/pull/8837) + +## 16.0.0-beta.1 – 2023-02-23 +### Added for users +- Breakout rooms can be used to split a group call into temporary working groups (Requires the High-performance backend) + [#8337](https://github.com/nextcloud/spreed/pull/8337) +- Calls can now be recorded (Requires the High-performance backend) + [#8324](https://github.com/nextcloud/spreed/pull/8324) +- The top bar now shows useful information like participant count, call duration and title while in a call. + [#8341](https://github.com/nextcloud/spreed/pull/8341) +- Chat input now allows to autocomplete emojis + [#4333](https://github.com/nextcloud/spreed/pull/4333) + +### Added for administrators +- Administrators can now define the default conversation permissions via the `default_permissions` app config + [#8457](https://github.com/nextcloud/spreed/pull/8457) +- Administrators can now define the default name of the Talk/ attachments folder via the `default_attachment_folder` app config + [#8465](https://github.com/nextcloud/spreed/pull/8465) +- OCC command to transfer-ownership of conversations was added allowing to hand over conversations during off-boarding + [#8479](https://github.com/nextcloud/spreed/pull/8479) +- All available app configurations have been documented in the [settings documentation](https://nextcloud-talk.readthedocs.io/en/latest/settings/#app-configuration) + +### Added for developers +- Chat API now allows to get the context (older and newer messages) for a message + [#8717](https://github.com/nextcloud/spreed/pull/8717) +- Conversation list is now being instantly updated with information from notifications + [#8723](https://github.com/nextcloud/spreed/pull/8723) +- Conversations API now supports a "modified since" parameter to only get changed conversations + [#8726](https://github.com/nextcloud/spreed/pull/8726) +- Chats are opened now without a page reload when interacting with notifications + [#8713](https://github.com/nextcloud/spreed/pull/8713) +- Introduced a new conversation type to indicate that a conversation was a one-to-one conversation + [#8600](https://github.com/nextcloud/spreed/pull/8600) + +### Changed +- Version 1.1.0 of the signaling server of the High-performance backend is now required +- Update several dependencies + diff --git a/docs/changelogs/changelog-17.md b/docs/changelogs/changelog-17.md new file mode 100644 index 0000000..b9fd0cd --- /dev/null +++ b/docs/changelogs/changelog-17.md @@ -0,0 +1,458 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 17.1.10 – 2024-06-27 +### Fixed +- fix(bots): Fix bots with self-signed certificates + [#12469](https://github.com/nextcloud/spreed/pull/12469) +- fix(shareIntegration): Fix handle to close and open the right sidebar on publish share links + [#12495](https://github.com/nextcloud/spreed/pull/12495) + +## 17.1.9 – 2024-05-23 +### Fixed +- fix(polls): Remove actor info from system message + [#12342](https://github.com/nextcloud/spreed/pull/12342) +- fix(recording): Stop broken recording backend + [#12401](https://github.com/nextcloud/spreed/pull/12401) + +## 17.1.8 – 2024-04-12 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(conversation): Fix error when adding participants while creating a conversation + [#12059](https://github.com/nextcloud/spreed/issues/12059) +- fix(conversation): Fix missing icon in conversation settings for file conversations + [#12052](https://github.com/nextcloud/spreed/issues/12052) + +## 17.1.7 – 2024-04-04 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(conversation): skip unread marker increasing from notification + [#11735](https://github.com/nextcloud/spreed/issues/11735) +- fix(modal): mount nested modals inside global modals + [#11891](https://github.com/nextcloud/spreed/issues/11891) + +## 17.1.6 – 2024-02-29 +### Changed +- Update translations + +### Fixed +- fix(webrtc): Ignore label of data channel when processing received messages for Janus 1.x compatibility + [#11668](https://github.com/nextcloud/spreed/issues/11668) +- fix(notifications): Fix notification action label length with utf8 languages + [#11620](https://github.com/nextcloud/spreed/issues/11620) +- fix(chat): Fix forwarding messages from conversations in the right sidebar + [#11609](https://github.com/nextcloud/spreed/issues/11609) + +## 17.1.5 – 2024-01-25 +### Fixed +- fix(attachments): Don't allow selecting shared folders as attachment folder + [#11430](https://github.com/nextcloud/spreed/issues/11430) + +## 17.1.4 – 2023-12-19 +### Fixed +- fix(UI): Allow joining a call while editing a document + [#11260](https://github.com/nextcloud/spreed/issues/11260) +- fix(chat): Fix grouping of chat messages when they include the readmarker + [#11068](https://github.com/nextcloud/spreed/issues/11068) +- fix(call): Fix lost audio tracks in Safari after being muted a longer time + [#11145](https://github.com/nextcloud/spreed/issues/11145) +- fix(occ): Fix verification of STUN server details + [#11194](https://github.com/nextcloud/spreed/issues/11194) +- fix(hosted-hpb): Correctly handle API response codes of hosted High-performance backend when the account expired + [#11045](https://github.com/nextcloud/spreed/issues/11045) + +## 17.1.3 – 2023-11-23 +### Fixed +- fix(settings): Remove non-working notification settings for guests + [#10974](https://github.com/nextcloud/spreed/issues/10974) +- fix(chat): Fix uploading files after some time of being online + [#10891](https://github.com/nextcloud/spreed/issues/10891) +- fix(participants): Update participants list more regularly + [#10843](https://github.com/nextcloud/spreed/issues/10843) +- fix(settings): Fix option to request an HPB trial + [#10965](https://github.com/nextcloud/spreed/issues/10965) +- fix(settings): Fail recording server test when an HPB was given as recording backend + [#10948](https://github.com/nextcloud/spreed/issues/10948) +- fix(chat): Hide delete option for guests + [#10806](https://github.com/nextcloud/spreed/issues/10806) +- fix(chat): Fix sorting of system messages + [#10964](https://github.com/nextcloud/spreed/issues/10964) +- fix(chat): Fix not breaking the JSON response when removing the last reaction of a message + [#10949](https://github.com/nextcloud/spreed/issues/10949) +- fix(call): Log error message when starting a screenshot fails + [#10827](https://github.com/nextcloud/spreed/issues/10827) + +## 17.1.2 – 2023-10-27 +### Changed +- Update dependencies + +### Fixed +- fix(chat): Allow joining a conversation via search when a filter is active + [#10781](https://github.com/nextcloud/spreed/issues/10781) +- fix(chat): Fix re-rendering of conversation data when scrolling (hover, user status, more) + [#10779](https://github.com/nextcloud/spreed/issues/10779) +- fix(chat): Clear deleted messages from replies + [#10713](https://github.com/nextcloud/spreed/issues/10713) +- fix(chat): Fix mentions when forwarding messages + [#10673](https://github.com/nextcloud/spreed/issues/10673) +- fix(call): Increase the avatar size in calls when the video is disabled + [#10628](https://github.com/nextcloud/spreed/issues/10628) +- fix(call): Fix "silent" parameter not sent again when reconnecting + [#10776](https://github.com/nextcloud/spreed/issues/10776) +- fix(chat): Fix message grouping for all locales + [#10695](https://github.com/nextcloud/spreed/issues/10695) +- fix(RightSidebar) update active tab on mount and conversation change + [#10564](https://github.com/nextcloud/spreed/issues/10564) +- fix(sip): Fix saving the secret of the SIP bridge in the admin UI + [#10718](https://github.com/nextcloud/spreed/issues/10718) + +## 17.1.1 – 2023-09-21 +### Added +- feat(chat): Add copy function to code blocks + [#10533](https://github.com/nextcloud/spreed/issues/10533) + +### Changed +- Update dependencies + +### Fixed +- fix(attachments): Allow to navigate between attachments in the viewer + [#10549](https://github.com/nextcloud/spreed/issues/10549) +- fix(bots): Fix notifications of bot messages and reactions + [#10530](https://github.com/nextcloud/spreed/issues/10530) +- fix(conversations): Keep the current conversation in filtered list + [#10527](https://github.com/nextcloud/spreed/issues/10527) +- fix(page): Decouple the index controller from the executing method + [#10546](https://github.com/nextcloud/spreed/issues/10546) +- fix(API): Reuse participant objects already created to reduce number of database queries + [#10536](https://github.com/nextcloud/spreed/issues/10536) + +## 17.1.0 – 2023-09-16 +### Added +- Add support for bots via webhooks + [#10139](https://github.com/nextcloud/spreed/issues/10139) + [#10151](https://github.com/nextcloud/spreed/issues/10151) +- Add Markdown support for chat messages + [#10089](https://github.com/nextcloud/spreed/issues/10089) + [#10090](https://github.com/nextcloud/spreed/issues/10090) +- Allow to filter the conversation list for unread mentions and messages + [#10093](https://github.com/nextcloud/spreed/issues/10093) +- Provide an overview list of open conversations + [#10095](https://github.com/nextcloud/spreed/issues/10095) +- Set a reminder to get notified about a chat messages at a later time + [#10104](https://github.com/nextcloud/spreed/issues/10104) + [#10152](https://github.com/nextcloud/spreed/issues/10152) + [#10155](https://github.com/nextcloud/spreed/issues/10155) +- Show a hint when the call is running since one hour + [#10101](https://github.com/nextcloud/spreed/issues/10101) +- Show the talking time of participants in the right sidebar + [#10145](https://github.com/nextcloud/spreed/issues/10145) + +### Changed +- System messages of the same actions are now grouped + [#10143](https://github.com/nextcloud/spreed/issues/10143) +- Use virtual scrolling for the conversation list to improve the performance + [#10297](https://github.com/nextcloud/spreed/issues/10297) +- Cache the conversation list in the browser storage for better loading experience + [#10273](https://github.com/nextcloud/spreed/issues/10273) +- Update dependencies + +## 17.1.0-rc.4 – 2023-08-31 +### Changed +- chore(packaging): Ship dependencies lock files + [#10426](https://github.com/nextcloud/spreed/issues/10426) +- Update dependencies + +### Fixed +- fix(bots): Fix several problems with bots + [#10425](https://github.com/nextcloud/spreed/issues/10425) +- feat(conversations): Persist the filter status after reload + [#10407](https://github.com/nextcloud/spreed/issues/10407) +- fix(chat): Adjust parsing of NcRichContenteditable output before sending + [#10440](https://github.com/nextcloud/spreed/issues/10440) +- fix(conversations): Fix arrow-key navigation in left sidebar + [#10418](https://github.com/nextcloud/spreed/issues/10418) +- fix(deck): Show conversation name and highlight link in deck integration + [#10394](https://github.com/nextcloud/spreed/issues/10394) +- fix(chat): Fix combined system message text with duplicated messages from yourself + [#10439](https://github.com/nextcloud/spreed/issues/10439) + +## 17.1.0-rc.3 – 2023-08-25 +### Added +- feat(capability): Add a capability for messages being markdown + [#10367](https://github.com/nextcloud/spreed/issues/10367) +- feat(bots)!: Ensure bot uniqueness and allow removing by URL + [#10371](https://github.com/nextcloud/spreed/issues/10371) + +### Changed +- Update dependencies + +### Fixed +- fix(LeftSidebar): wrong user status after scrolling + [#10369](https://github.com/nextcloud/spreed/issues/10369) +- fix(changelog): Prevent duplicated changelog message by parallel requests + [#10366](https://github.com/nextcloud/spreed/issues/10366) +- fix(RoomSelector): Align text vertically for open conversation list + [#10363](https://github.com/nextcloud/spreed/issues/10363) +- fix(chat): Fix primary color selection on quotes + [#10363](https://github.com/nextcloud/spreed/issues/10363) +- fix(LeftSidebar): adjust conversation padding and size + [#10359](https://github.com/nextcloud/spreed/issues/10359) + +## 17.1.0-rc.2 – 2023-08-24 +### Added +- Avatars of open conversations are now shown without being a participant + [#10229](https://github.com/nextcloud/spreed/issues/10229) +- Added an option to only remove a user from private conversations + [#10310](https://github.com/nextcloud/spreed/issues/10310) +- Added an option to copy the original message content + [#10335](https://github.com/nextcloud/spreed/issues/10335) + +### Changed +- Use virtual scrolling for the conversation list to improve the performance + [#10297](https://github.com/nextcloud/spreed/issues/10297) +- Cache the conversation list in the browser storage for better loading experience + [#10273](https://github.com/nextcloud/spreed/issues/10273) +- Update dependencies + +### Fixed +- Allow replying to messages of bots + [#10219](https://github.com/nextcloud/spreed/issues/10219) +- Fix sending system messages to bots + [#10271](https://github.com/nextcloud/spreed/issues/10271) +- Fix style of Markdown code blocks, headlines and quotes + [#10221](https://github.com/nextcloud/spreed/issues/10221) + [#10238](https://github.com/nextcloud/spreed/issues/10238) + [#10255](https://github.com/nextcloud/spreed/issues/10255) +- Fix recording option shown for non moderators + [#10246](https://github.com/nextcloud/spreed/issues/10246) +- Apply selected call background only once confirmed + [#10267](https://github.com/nextcloud/spreed/issues/10267) +- Clear chat history for other participants that are live when the moderator performs the action + [#10302](https://github.com/nextcloud/spreed/issues/10302) +- Add missing capability that indicates bots are supported + [#10314](https://github.com/nextcloud/spreed/issues/10314) +- Don't add parent messages of quotes to the message list which could create gaps in the history + [#10318](https://github.com/nextcloud/spreed/issues/10318) +- Fix missing `X-Chat-Last-Common-Read` header on chat requests + [#10337](https://github.com/nextcloud/spreed/issues/10337) + +## 17.1.0-rc.1 – 2023-08-11 +### Added +- Add support for bots via webhooks + [#10139](https://github.com/nextcloud/spreed/issues/10139) + [#10151](https://github.com/nextcloud/spreed/issues/10151) +- Add Markdown support for chat messages + [#10089](https://github.com/nextcloud/spreed/issues/10089) + [#10090](https://github.com/nextcloud/spreed/issues/10090) +- Allow to filter the conversation list for unread mentions and messages + [#10093](https://github.com/nextcloud/spreed/issues/10093) +- Provide an overview list of open conversations + [#10095](https://github.com/nextcloud/spreed/issues/10095) +- Set a reminder to get notified about a chat messages at a later time + [#10104](https://github.com/nextcloud/spreed/issues/10104) + [#10152](https://github.com/nextcloud/spreed/issues/10152) + [#10155](https://github.com/nextcloud/spreed/issues/10155) +- Show a hint when the call is running since one hour + [#10101](https://github.com/nextcloud/spreed/issues/10101) +- Show the talking time of participants in the right sidebar + [#10145](https://github.com/nextcloud/spreed/issues/10145) + +### Changed +- System messages of the same actions are now grouped + [#10143](https://github.com/nextcloud/spreed/issues/10143) +- Update dependencies + +### Fixed +- Fix resetting the bruteforce protection when joining a conversation + [#10165](https://github.com/nextcloud/spreed/issues/10165) + +## 17.0.3 – 2023-07-28 +### Changed +- Update dependencies + +### Fixed +- Fix duplicate messages and improve performance + [#10070](https://github.com/nextcloud/spreed/issues/10070) +- fix(SIP): Show SIP info also when enabled without user PIN + [#10064](https://github.com/nextcloud/spreed/issues/10064) +- fix(settings): Hide description and status from 1-1 conversation settings + [#10057](https://github.com/nextcloud/spreed/issues/10057) + +## 17.0.2 – 2023-07-20 +### Changed +- Automatic transcription of call recordings is now opt-in + [#9971](https://github.com/nextcloud/spreed/issues/9971) +- Update dependencies + +### Fixed +- Fix position of "Scroll to bottom" button in the chat view + [#9871](https://github.com/nextcloud/spreed/issues/9871) + [#9858](https://github.com/nextcloud/spreed/issues/9858) +- Improve accessibility of conversation creation dialog + [#9954](https://github.com/nextcloud/spreed/issues/9954) +- Make chat stay scrolling when the last message receives its first reaction + [#9956](https://github.com/nextcloud/spreed/issues/9956) +- Don't emit event when the user status did not change on refetching + [#10005](https://github.com/nextcloud/spreed/issues/10005) +- Attempt to further improve the performance of conversation list updates with hundreds of conversations + [#10016](https://github.com/nextcloud/spreed/issues/10016) + +## 17.0.1 – 2023-06-23 +### Changed +- Include display name in participant update signaling message + [#9822](https://github.com/nextcloud/spreed/issues/9822) +- Update dependencies + +### Fixed +- Improve frontend responsiveness with many conversations + [#9841](https://github.com/nextcloud/spreed/issues/9841) +- Don't make the conversation list scroll when the selected conversation is already visible + [#9782](https://github.com/nextcloud/spreed/issues/9782) + [#9796](https://github.com/nextcloud/spreed/issues/9796) +- Fix creating files from the "Blank" template option + [#9818](https://github.com/nextcloud/spreed/issues/9818) +- Make conversation description and name selectable + [#9780](https://github.com/nextcloud/spreed/issues/9780) +- Hide poll voting details when not filled + [#9821](https://github.com/nextcloud/spreed/issues/9821) + [#9819](https://github.com/nextcloud/spreed/issues/9819) +- Fix visibility issue in the create conversation dialog on small screens + [#9794](https://github.com/nextcloud/spreed/issues/9794) + [#9843](https://github.com/nextcloud/spreed/issues/9843) +- Include display name in participant update signaling message + [#9822](https://github.com/nextcloud/spreed/issues/9822) +- Update group displayname cache when the group was renamed + [#9839](https://github.com/nextcloud/spreed/issues/9839) + +## 17.0.0 – 2023-06-12 +### Added +- Conversations can now have an avatar or emoji as icon + [#927](https://github.com/nextcloud/spreed/issues/927) +- Virtual backgrounds are now available in addition to the blurred background in video calls + [#9251](https://github.com/nextcloud/spreed/issues/9251) +- Reactions are now available during calls + [#9249](https://github.com/nextcloud/spreed/issues/9249) +- Typing indicators show which users are currently typing a message + [#9248](https://github.com/nextcloud/spreed/issues/9248) +- Groups can now be mentioned in chats + [#6339](https://github.com/nextcloud/spreed/issues/6339) +- Call recordings are automatically transcribed if a transcription provider app is registered + [#9274](https://github.com/nextcloud/spreed/issues/9274) +- Chat messages can be translated if a translation provider app is registered + [#9273](https://github.com/nextcloud/spreed/issues/9273) + +## 17.0.0-rc.4 – 2023-06-09 +### Fixed + +- fix(chat): Fix dark/light theme in messages loading placeholder + [#9720](https://github.com/nextcloud/spreed/issues/9720) +- fix(TypingIndicator): Signaling messages wrong when conversation is switched + [#9615](https://github.com/nextcloud/spreed/issues/9615) +- fix(TypingIndicator): Typing indicator does not "expire" + [#9604](https://github.com/nextcloud/spreed/issues/9604) +- fix(TypingIndicator): Typing indicator distorted on small sidebar during call when 3 or more people are typing + [#9589](https://github.com/nextcloud/spreed/issues/9589) +- fix(mediasettings): Aria label keywords of virtual backgrounds are not translatable + [#9610](https://github.com/nextcloud/spreed/issues/9610) +- fix(mediasettings): Conversation picture picker does not work well on mobile + [#9565](https://github.com/nextcloud/spreed/issues/9565) +- fix(conversations): Do not scroll to conversations that are already visible in the conversations list + [#9582](https://github.com/nextcloud/spreed/issues/9582) +- fix(conversations): Fix error when creating a conversation from search results + [#9709](https://github.com/nextcloud/spreed/pull/9709) + +## 17.0.0-rc.3 – 2023-06-02 +### Fixed + +- fix(MediaSettings): Fix guests being prompted with login window when blurring background + [#9620](https://github.com/nextcloud/spreed/issues/9620) +- fix(TypingIndicator): Actors are only unique by type and id + [#9625](https://github.com/nextcloud/spreed/pull/9625) + +## 17.0.0-rc.2 – 2023-05-25 +### Fixed +- fix(reactions): Fix own call reactions when the high-performance backend is used + [#9586](https://github.com/nextcloud/spreed/issues/9586) +- fix(mediasettings): Hide virtual background options when not supported + [#9611](https://github.com/nextcloud/spreed/issues/9611) +- fix(mediasettings): Fix broken aria-label + [#9617](https://github.com/nextcloud/spreed/issues/9617) +- fix(CallView): Fix Fullscreen mode support in ViewerOverlay + [#9613](https://github.com/nextcloud/spreed/issues/9613) + [#9618](https://github.com/nextcloud/spreed/issues/9618) +- fix(CallView): fix no local video on empty call in not grid mode + [#9584](https://github.com/nextcloud/spreed/issues/9584) +- fix(chat): Update own read marker before triggering events when posting + [#9612](https://github.com/nextcloud/spreed/issues/9612) +- fix(chat): Don't send startTyping signaling message for each keystroke + [#9614](https://github.com/nextcloud/spreed/issues/9614) + +## 17.0.0-rc.1 – 2023-05-17 +### Changed +- Update dependencies + +### Fixed +- Fix virtual background image being stretched instead of cropped + [#9549](https://github.com/nextcloud/spreed/issues/9549) + +## 17.0.0-beta.3 – 2023-05-12 +### Added +- Allow translating chat messages + [#9512](https://github.com/nextcloud/spreed/issues/9512) + +### Changed +- Update several dependencies + +### Fixed +- Media settings or not respected + [#9513](https://github.com/nextcloud/spreed/issues/9513) +- Fix clearing guests over and over again on MySQL and Oracle + [#9517](https://github.com/nextcloud/spreed/issues/9517) +- Prevent empty chat messages + [#9509](https://github.com/nextcloud/spreed/issues/9509) + +## 17.0.0-beta.2 – 2023-05-09 +### Added +- Typing indicators frontend and settings + [#9455](https://github.com/nextcloud/spreed/issues/9455) + [#9431](https://github.com/nextcloud/spreed/issues/9431) + +### Changed +- Update several dependencies + +### Fixed +- Show empty call view on viewer overlay + [#9460](https://github.com/nextcloud/spreed/issues/9460) +- Fix avatar handling when interacting with non-supporting backends + [#9492](https://github.com/nextcloud/spreed/issues/9492) + +## 17.0.0-beta.1 – 2023-05-04 +### Added +- Conversations can now have an avatar or emoji as icon + [#927](https://github.com/nextcloud/spreed/issues/927) +- Virtual backgrounds are now available in addition to the blurred background in video calls + [#9251](https://github.com/nextcloud/spreed/issues/9251) +- Reactions are now available during calls + [#9249](https://github.com/nextcloud/spreed/issues/9249) +- Typing indicators show which users are currently typing a message + [#9248](https://github.com/nextcloud/spreed/issues/9248) +- Groups can now be mentioned in chats + [#6339](https://github.com/nextcloud/spreed/issues/6339) +- Call recordings are automatically transcribed if a transcription provider app is registered + [#9274](https://github.com/nextcloud/spreed/issues/9274) +- Chat messages can be translated if a translation provider app is registered + [#9273](https://github.com/nextcloud/spreed/issues/9273) + +### Changed +- Update several dependencies + diff --git a/docs/changelogs/changelog-18.md b/docs/changelogs/changelog-18.md new file mode 100644 index 0000000..4d41e3a --- /dev/null +++ b/docs/changelogs/changelog-18.md @@ -0,0 +1,370 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 18.0.14 – 2025-01-16 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(calls): Retain names of guests when they disconnect from the High-performance backend + [#13982](https://github.com/nextcloud/spreed/issues/13982) +- fix(search): Add pagination support to the conversation search in unified search + [#14032](https://github.com/nextcloud/spreed/issues/14032) +- fix(setupcheck): Check server times of Webserver nodes and High-performance backend to be in sync + [#14014](https://github.com/nextcloud/spreed/issues/14014) +- fix(moderation): Allow promoting self-joined users + [#14080](https://github.com/nextcloud/spreed/issues/14080) + +## 18.0.13 – 2024-11-07 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Fix layout for guests on public conversations + [#13620](https://github.com/nextcloud/spreed/issues/13620) +- fix(UI): Improve handling of sidebar on mobile view + [#12693](https://github.com/nextcloud/spreed/issues/12693) + +## 18.0.12 – 2024-10-10 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(avatar): Fix missing translations + [#13411](https://github.com/nextcloud/spreed/issues/13411) +- fix(chat): Expire message cache when deleting the last message + [#13391](https://github.com/nextcloud/spreed/issues/13391) +- fix(call): Correctly ignore media offers from users without permissions when internal signaling is used + [#13493](https://github.com/nextcloud/spreed/issues/13493) +- fix(call): Fix missing call sounds in Safari when tab is moved to the background + [#13351](https://github.com/nextcloud/spreed/issues/13351) +- fix(avatar): Don't overwrite user avatar when selecting a square for a conversation + [#13287](https://github.com/nextcloud/spreed/issues/13287) + +## 18.0.11 – 2024-08-22 +### Changed +- Update several dependencies + +### Fixed +- fix(settings): hide secrets in password fields + [#12843](https://github.com/nextcloud/spreed/issues/12843) +- fix(conversation): Fix adding and removing permissions + [#13080](https://github.com/nextcloud/spreed/issues/13080) +- fix(session): Fix generating session id again if duplicated + [#12744](https://github.com/nextcloud/spreed/issues/12744) + +## 18.0.10 – 2024-07-11 +### Fixed +- fix(sharing): Fix share detection within object stores + [#12628](https://github.com/nextcloud/spreed/pull/12628) + +## 18.0.9 – 2024-06-27 +### Fixed +- fix(bots): Fix bots with self-signed certificates + [#12470](https://github.com/nextcloud/spreed/pull/12470) +- fix(attachments): Fix creating new files from templates + [#12487](https://github.com/nextcloud/spreed/pull/12487) +- fix(shareIntegration): Fix handle to close and open the right sidebar on publish share links + [#12494](https://github.com/nextcloud/spreed/pull/12494) +- fix(bots): Show error messages during bots setup + [#12573](https://github.com/nextcloud/spreed/pull/12573) +- fix(chat): Adjust toast message on message deletion + [#12588](https://github.com/nextcloud/spreed/pull/12588) + +## 18.0.8 – 2024-05-23 +### Fixed +- fix(polls): Remove actor info from system message + [#12343](https://github.com/nextcloud/spreed/pull/12343) +- fix(recording): Stop broken recording backend + [#12402](https://github.com/nextcloud/spreed/pull/12402) + +## 18.0.7 – 2024-04-12 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(conversation): Fix error when adding participants while creating a conversation + [#12057](https://github.com/nextcloud/spreed/issues/12057) +- fix(conversation): Fix missing icon in conversation settings for file conversations + [#12051](https://github.com/nextcloud/spreed/issues/12051) + +## 18.0.6 – 2024-04-04 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(FilePicker): Provide correct container for FilePicker + [#11940](https://github.com/nextcloud/spreed/issues/11940) +- fix(flow): Fix flow notifications in note-to-self and on own actions + [#11919](https://github.com/nextcloud/spreed/issues/11919) +- fix(call): Keep the talk time information when changing active tab + [#11797](https://github.com/nextcloud/spreed/issues/11797) + +## 18.0.5 – 2024-03-08 +### Changed +- Update translations + +### Fixed +- fix(call): Fix missing screenshare button after stopping a screenshare + [#11721](https://github.com/nextcloud/spreed/issues/11721) +- fix(call): Correctly focus the screenshare after selecting in the grid view + [#11755](https://github.com/nextcloud/spreed/issues/11755) +- fix(chat): Fix jumping unread counter when entering a conversation after receiving a notification + [#11736](https://github.com/nextcloud/spreed/issues/11736) + +## 18.0.4 – 2024-02-29 +### Added +- feat(desktop): Allow using the avatar menu in the desktop client + [#11679](https://github.com/nextcloud/spreed/issues/11679) + +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(webrtc): Ignore label of data channel when processing received messages for Janus 1.x compatibility + [#11667](https://github.com/nextcloud/spreed/issues/11667) +- fix(notifications): Fix notification action label length with utf8 languages + [#11621](https://github.com/nextcloud/spreed/issues/11621) +- fix(chat): Fix forwarding messages from conversations in the right sidebar + [#11606](https://github.com/nextcloud/spreed/issues/11606) +- fix(search): Hide search providers when not allowed to use Talk + [#11623](https://github.com/nextcloud/spreed/issues/11623) +- fix(UI): Fix nesting of modals + [#11580](https://github.com/nextcloud/spreed/issues/11580) +- fix(participants): Add a key to the elements force re-rendering on changes + [#11558](https://github.com/nextcloud/spreed/issues/11558) + +## 18.0.3 – 2024-01-31 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(chat): Fix scrolling behaviour when loading older messages + [#11481](https://github.com/nextcloud/spreed/issues/11481) +- fix(chat): Fix showing mention and emoji suggestions when writing a caption + [#11458](https://github.com/nextcloud/spreed/issues/11458) +- fix(chat): Show mention chips when inserting a suggested mention + [#11493](https://github.com/nextcloud/spreed/issues/11493) + +## 18.0.2 – 2024-01-25 +### Fixed +- fix(calls): Device preview not visible when editing, uploading or viewing a file + [#11222](https://github.com/nextcloud/spreed/issues/11222) +- fix(conversation): Make description input multi line when creating a conversation + [#11376](https://github.com/nextcloud/spreed/issues/11376) +- fix(bot): Don't allow empty chat messages from bots + [#11353](https://github.com/nextcloud/spreed/issues/11353) +- fix(breakout): Stop breakout rooms when they are started while deleting them + [#11409](https://github.com/nextcloud/spreed/issues/11409) +- fix(attachments): Allow to retry failed uploads + [#11256](https://github.com/nextcloud/spreed/issues/11256) +- fix(attachments): Fix uploading from local device + [#11331](https://github.com/nextcloud/spreed/issues/11331) +- fix(attachments): Don't allow selecting shared folders as attachment folder + [#11427](https://github.com/nextcloud/spreed/issues/11427) + +## 18.0.1 – 2023-12-15 +### Changed +- Update translations + +### Fixed +- fix(shares): Fix notifications for captions with mentions or as a reply + [#11242](https://github.com/nextcloud/spreed/issues/11242) +- fix(shares): Fix replying to message with attachments + [#11242](https://github.com/nextcloud/spreed/issues/11242) +- fix(shares): Reserve space for file previews while loading + [#11196](https://github.com/nextcloud/spreed/issues/11196) +- fix(chat): Don't trim the quote when it is not an image share with caption + [#11237](https://github.com/nextcloud/spreed/issues/11237) +- fix(call): Reset "Start recording" checkbox on "Media settings" close + [#11227](https://github.com/nextcloud/spreed/issues/11227) +- fix(call): Fix uploading files as image for the call background + [#11214](https://github.com/nextcloud/spreed/issues/11214) +- fix(notifications): Fix the order of event listeners to improve responsiveness when starting calls + [#11238](https://github.com/nextcloud/spreed/issues/11238) + +## 18.0.0 – 2023-12-12 +### Added +- 🗒️ Note to self + [#2196](https://github.com/nextcloud/spreed/issues/2196) +- 🎙️ Show speaker while screensharing + [#4478](https://github.com/nextcloud/spreed/issues/4478) +- 🏷️ Add a caption to your file before sharing it into the chat + [#5354](https://github.com/nextcloud/spreed/issues/5354) +- 👤 Ask Guest to enter a name when connecting + [#855](https://github.com/nextcloud/spreed/issues/855) +- 🤩 Animated call reactions + [#10561](https://github.com/nextcloud/spreed/issues/10561) +- 🖋️ Optionally require consent before joining a recorded call + [#10348](https://github.com/nextcloud/spreed/issues/10348) +- 📲 Allow calling phone numbers from within Talk using SIP dialout + [#10346](https://github.com/nextcloud/spreed/issues/10346) +- 🔎 Add support for "person" and "modified" filter options of the new search + [#10909](https://github.com/nextcloud/spreed/issues/10909) +- 🌴 Show the "Out of office" message in one-to-one conversations + [#11049](https://github.com/nextcloud/spreed/issues/11049) + +### Changed +- Requires Nextcloud 28 +- Update translations +- Update several dependencies +- Require compatible clients (Talk Android 18.0.0 or later, Talk iOS 18.0.0 or later, Talk Desktop 0.16.0 or later) when recording consent is enabled + [#10969](https://github.com/nextcloud/spreed/issues/10969) + +## 18.0.0-rc.3 – 2023-12-07 +### Added +- feat(call): Add screensharing support to the viewer-overlay + [#11033](https://github.com/nextcloud/spreed/issues/11033) +- feat(conversations): Always show create conversation button + [#11104](https://github.com/nextcloud/spreed/issues/11104) +- fix(chat): Add metadata to file parameters on API level so clients can calculate aspect ratio of previews + [#11131](https://github.com/nextcloud/spreed/issues/11131) + +### Changed +- Update several dependencies +- Update translations + +### Fixed +- fix(chat): Fix various cases of handling (in)active sessions while chatting and calling + [#11125](https://github.com/nextcloud/spreed/issues/11125) + [#11140](https://github.com/nextcloud/spreed/issues/11140) +- fix(chat): Only load current absence not future ones + [#11124](https://github.com/nextcloud/spreed/issues/11124) +- fix(chat): Fix file share with caption quote reply + [#11128](https://github.com/nextcloud/spreed/issues/11128) +- fix(poll): Reorganize component structure and hide "End poll" from first view + [#11109](https://github.com/nextcloud/spreed/issues/11109) +- fix(call): Cancel scheduled participant request when requesting new one + [#11097](https://github.com/nextcloud/spreed/issues/11097) +- fix(chat): Expand system messages group if visual unread marker is set on it + [#11067](https://github.com/nextcloud/spreed/issues/11067) +- fix(chat): Handle silent sending and input paste correctly in media captions + [#11123](https://github.com/nextcloud/spreed/issues/11123) +- fix(conversations): Remove label from talk search input + [#11071](https://github.com/nextcloud/spreed/issues/11071) +- fix(video-verification): Remove unneeded settings from video-verification screen + [#11138](https://github.com/nextcloud/spreed/issues/11138) + +## 18.0.0-rc.2 – 2023-11-30 +### Added +- feat(chat): Show the "Out of office" message in one-to-one conversations + [#11049](https://github.com/nextcloud/spreed/issues/11049) + +### Changed +- Update several dependencies +- Update translations + +### Fixed +- fix(call): Try to fix Safari unmute after being muted for a longer time + [#11032](https://github.com/nextcloud/spreed/issues/11032) +- fix(call): Reduce participant list update speed when you are not joining a call + [#11047](https://github.com/nextcloud/spreed/issues/11047) +- fix(call): Remove O(n) queries when ending a call for everyone + [#11020](https://github.com/nextcloud/spreed/issues/11020) +- fix(UI): Fix several missing headlines after nextcloud/vue update + [#11031](https://github.com/nextcloud/spreed/issues/11031) +- fix(chat): Allow submitting the caption upload form without a file + [#11013](https://github.com/nextcloud/spreed/issues/11013) +- fix(call): Fix undefined variable $participant when calling a conversation with lobby + [#11027](https://github.com/nextcloud/spreed/issues/11027) +- fix(chat): Hide "Messages in current conversation" search filter when not in a chat + [#11054](https://github.com/nextcloud/spreed/issues/11054) + +## 18.0.0-rc.1 – 2023-11-23 +### Changed +- Update several dependencies +- Improve documentation by adding magic strings and values to parameters + [#10857](https://github.com/nextcloud/spreed/issues/10857) +- Require compatible clients when recording consent is enabled + [#10969](https://github.com/nextcloud/spreed/issues/10969) +- Revert: Try to fix Safari unmute after being muted for a longer time + [#10954](https://github.com/nextcloud/spreed/issues/10954) +- Move away from deprecated constants and functions + [#10975](https://github.com/nextcloud/spreed/issues/10975) + +### Fixed +- fix(settings): Remove non-working notification settings for guests + [#10960](https://github.com/nextcloud/spreed/issues/10960) +- fix(settings): Fix option to request an HPB trial + [#10962](https://github.com/nextcloud/spreed/issues/10962) + [#10970](https://github.com/nextcloud/spreed/issues/10970) +- fix(chat): Fix sorting of system messages + [#10963](https://github.com/nextcloud/spreed/issues/10963) +- fix(settings): Fix style in the admin settings after vue library update + [#10984](https://github.com/nextcloud/spreed/issues/10984) + +## 18.0.0-beta.3 – 2023-11-16 +### Added +- Allow drag'n'drop of files onto the caption dialog + [#10898](https://github.com/nextcloud/spreed/issues/10898) +- Add support for "person" and "modified" filter options of the global search + [#10909](https://github.com/nextcloud/spreed/issues/10909) + +### Changed +- Update several dependencies + +### Fixed +- Fix Safari browser not receiving any stream in a call + [#10912](https://github.com/nextcloud/spreed/issues/10912) +- Try to fix Safari unmute after being muted for a longer time + [#10913](https://github.com/nextcloud/spreed/issues/10913) +- Mark notifications about read chat messages as resolved + [#10889](https://github.com/nextcloud/spreed/issues/10889) +- Fix uploading files after multiple hours without a page reload + [#10877](https://github.com/nextcloud/spreed/issues/10877) +- Don't throw an unhandled exception when mentioning `at-all` in "Note to self" + [#10881](https://github.com/nextcloud/spreed/issues/10881) +- Fix SIP dialout not working after resolving license issue + [#10914](https://github.com/nextcloud/spreed/issues/10914) +- Fix issues with the session active state + [#10876](https://github.com/nextcloud/spreed/issues/10876) +- Clarify that "Note to self" and "Talk Updates" are system generated + [#10884](https://github.com/nextcloud/spreed/issues/10884) + +## 18.0.0-beta.2 – 2023-11-09 +### Changed +- Replace various confirmation screens with the NcDialog component + [#10812](https://github.com/nextcloud/spreed/issues/10812) +- Update several dependencies + +### Fixed +- Fix mentions at the beginning of the text in captions + [#10831](https://github.com/nextcloud/spreed/issues/10831) +- Fix not breaking the JSON response when removing the last reaction of a message + [#10832](https://github.com/nextcloud/spreed/issues/10832) +- Remove previous style adjustments from left sidebar + [#10818](https://github.com/nextcloud/spreed/issues/10818) +- Migrate the last set of event listeners to be service listeners + +## 18.0.0-beta.1 – 2023-11-02 +### Added +- 🗒️ Note to self + [#2196](https://github.com/nextcloud/spreed/issues/2196) +- 🎙️ Show speaker while screensharing + [#4478](https://github.com/nextcloud/spreed/issues/4478) +- 🏷️ Add a caption to your file before sharing it into the chat + [#5354](https://github.com/nextcloud/spreed/issues/5354) +- 👤 Ask Guest to enter a name when connecting + [#855](https://github.com/nextcloud/spreed/issues/855) +- 🤩 Animated call reactions + [#10561](https://github.com/nextcloud/spreed/issues/10561) +- 🖋️ Optionally require consent before joining a recorded call + [#10348](https://github.com/nextcloud/spreed/issues/10348) +- 📲 Allow calling phone numbers from within Talk using SIP dialout + [#10346](https://github.com/nextcloud/spreed/issues/10346) + +### Changed +- Requires Nextcloud 28 +- Update several dependencies + diff --git a/docs/changelogs/changelog-19.md b/docs/changelogs/changelog-19.md new file mode 100644 index 0000000..9ed2e94 --- /dev/null +++ b/docs/changelogs/changelog-19.md @@ -0,0 +1,551 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 19.0.15 – 2025-04-04 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(calls): Do not reset previous connected users after resuming in a call + [#14735](https://github.com/nextcloud/spreed/issues/14735) +- fix(sidebar): Show tooltips when Talk is in the sidebar + [#14697](https://github.com/nextcloud/spreed/issues/14697) +- fix(guests): Fix style and labels on public share page as a guest + [#14720](https://github.com/nextcloud/spreed/issues/14720) + [#14726](https://github.com/nextcloud/spreed/issues/14726) +- fix(calls): Skip password verification for guests that are reconnecting to the call + [#14787](https://github.com/nextcloud/spreed/pull/14787) +- fix(calls): Fix leaving call if a signaling message is received while reconnecting + [#14788](https://github.com/nextcloud/spreed/pull/14788) + +## 19.0.14 – 2025-03-12 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(search): Include caption messages in search results + [#14551](https://github.com/nextcloud/spreed/issues/14551) +- fix(conversation): Stay in chat when removing a group or team the moderator is a member of + [#14395](https://github.com/nextcloud/spreed/issues/14395) +- fix(dashboard): Hide lobbied conversations from the dashboard + [#14610](https://github.com/nextcloud/spreed/issues/14610) +- fix(calls): Further improve false positives when showing the connection warning + [#14448](https://github.com/nextcloud/spreed/issues/14448) +- fix(reminder): Log when generating a reminder failed + [#14616](https://github.com/nextcloud/spreed/issues/14616) + +## 19.0.13 – 2025-02-13 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(bots): Allow users to edit messages of bots in one-to-one conversations + [#14360](https://github.com/nextcloud/spreed/issues/14360) +- fix(calls): Address some false positives when showing the connection warning + [#14250](https://github.com/nextcloud/spreed/issues/14250) +- fix(conversation): Don't suggest teams that are already added to the conversation + [#14347](https://github.com/nextcloud/spreed/issues/14347) + +## 19.0.12 – 2025-01-16 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(calls): Retain names of guests when they disconnect from the High-performance backend + [#13983](https://github.com/nextcloud/spreed/issues/13983) +- fix(search): Add pagination support to the conversation search in unified search + [#14033](https://github.com/nextcloud/spreed/issues/14033) +- fix(setupcheck): Check server times of Webserver nodes and High-performance backend to be in sync + [#14015](https://github.com/nextcloud/spreed/issues/14015) +- fix(moderation): Allow promoting self-joined users + [#14081](https://github.com/nextcloud/spreed/issues/14081) +- fix(calls): Fix "Talk while muted" toast + [#14026](https://github.com/nextcloud/spreed/issues/14026) +- fix(firstrun): Create default conversations when loading the dashboard + [#14090](https://github.com/nextcloud/spreed/issues/14090) + +## 19.0.11 – 2024-11-07 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Fix layout for guests on public conversations + [#13620](https://github.com/nextcloud/spreed/issues/13620) +- fix(UI): Improve handling of sidebar on mobile view + [#12693](https://github.com/nextcloud/spreed/issues/12693) +- fix(calls): Fix background blur performance if Server was not upgraded + [#13603](https://github.com/nextcloud/spreed/issues/13603) + +## 19.0.10 – 2024-10-10 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(performance): Fade out local blur-filter option for Nextcloud wide setting + [#13100](https://github.com/nextcloud/spreed/issues/13100) +- fix(avatar): Fix missing translations + [#13410](https://github.com/nextcloud/spreed/issues/13410) +- fix(chat): Expire message cache when deleting the last message + [#13392](https://github.com/nextcloud/spreed/issues/13392) +- fix(call): Correctly ignore media offers from users without permissions when internal signaling is used + [#13494](https://github.com/nextcloud/spreed/issues/13494) +- fix(call): Fix missing call sounds in Safari when tab is moved to the background + [#13352](https://github.com/nextcloud/spreed/issues/13352) + +## 19.0.9 – 2024-09-12 +### Fixed +- fix(federation): Fix federation invites accepting from the notification + [#13153](https://github.com/nextcloud/spreed/issues/13153) +- fix(chat): Fix "You deleted the message" when performed by federated user with same ID + [#13250](https://github.com/nextcloud/spreed/issues/13250) +- fix(files): Keep order of attachments when sharing multiple + [#13099](https://github.com/nextcloud/spreed/issues/13099) +- fix(avatar): Don't overwrite user avatar when selecting a square for a conversation + [#13277](https://github.com/nextcloud/spreed/issues/13277) + +## 19.0.8 – 2024-08-22 +### Changed +- Update several dependencies + +### Fixed +- fix(settings): hide secrets in password fields + [#12842](https://github.com/nextcloud/spreed/issues/12842) +- fix(conversation): Fix adding and removing permissions + [#13081](https://github.com/nextcloud/spreed/issues/13081) +- fix(session): Fix generating session id again if duplicated + [#12745](https://github.com/nextcloud/spreed/issues/12745) +- fix(sidebar): hide sidebar button in lobby + [#13070](https://github.com/nextcloud/spreed/issues/13070) +- fix(call): prevent navigating away when clicking on a quote while being in a call + [#12841](https://github.com/nextcloud/spreed/issues/12841) +- fix(federation): fix system message when removed user has same userId as the moderator + [#13054](https://github.com/nextcloud/spreed/issues/13054) +- fix(federation): correctly check list of allowed groups when federation is limited + [#13069](https://github.com/nextcloud/spreed/issues/13069) +- fix(federation): show lobby in federated conversations + [#12789](https://github.com/nextcloud/spreed/issues/12789) +- fix(federation): don't create system messages inside remote conversations + [#12788](https://github.com/nextcloud/spreed/issues/12788) +- fix(federation): ignore outdated sessions when generating notifications + [#12742](https://github.com/nextcloud/spreed/issues/12742) + +## 19.0.7 – 2024-07-15 +### Fixed +- fix(federation): Fix missing notifications in https-federated conversations (Nextcloud Server 29.0.4 or later - Part 3) + [#12724](https://github.com/nextcloud/spreed/pull/12724) +- fix(chat): Fix chat not loading new messages anymore in new conversation when switching quickly after writing a message + [#12721](https://github.com/nextcloud/spreed/pull/12721) +- fix(chat): Fix missing parent message when a chained child message gets edited or deleted + [#12719](https://github.com/nextcloud/spreed/pull/12719) + +## 19.0.6 – 2024-07-12 +### Fixed +- fix(chat): Fix broken widgets by updating nextcloud/vue library + [#12610](https://github.com/nextcloud/spreed/pull/12610) +- fix(chat): Fix sidebar opening and closing + [#12610](https://github.com/nextcloud/spreed/pull/12610) +- fix(federation): Allow sessions to mark themselves as inactive and block notifications when session is active + [#12689](https://github.com/nextcloud/spreed/pull/12689) +- fix(federation): Correctly handle federation with Nextcloud Server 29.0.4 or later - Part 2 + [#12687](https://github.com/nextcloud/spreed/pull/12687) + +## 19.0.5 – 2024-07-11 +### Fixed +- fix(federation): Correctly handle federation with Nextcloud Server 29.0.4 or later + [#12663](https://github.com/nextcloud/spreed/pull/12663) +- fix(chat): Fix scrolling to a quoted message in the desktop client + [#12653](https://github.com/nextcloud/spreed/pull/12653) +- fix(conversations): Improve sharing data between different tabs + [#12637](https://github.com/nextcloud/spreed/pull/12637) +- fix(chat): Improve update of messages list in the sidebar and the chat + [#12636](https://github.com/nextcloud/spreed/pull/12636) +- fix(chat): Show loading spinner when submitting an edited message + [#12674](https://github.com/nextcloud/spreed/pull/12674) +- fix(chat): Workaround rendering issue in Safari when unread marker is removed + [#12669](https://github.com/nextcloud/spreed/pull/12669) +- fix(chat): Fix missing reference data when linking to a federated chat message + [#12665](https://github.com/nextcloud/spreed/pull/12665) +- fix(chat): Fix contrast of unread counter when being mentioned in the chat during a call + [#12605](https://github.com/nextcloud/spreed/pull/12605) +- fix(chat): Don't group certain system messages when the actor is different + [#12642](https://github.com/nextcloud/spreed/pull/12642) +- fix(sharing): Improve performance when loading chat messages with file shares + [#12554](https://github.com/nextcloud/spreed/pull/12554) +- fix(sharing): Fix share detection within object stores + [#12629](https://github.com/nextcloud/spreed/pull/12629) +- fix(dashboard): Fix missing dashboard icon + [#12673](https://github.com/nextcloud/spreed/pull/12673) + +## 19.0.4 – 2024-06-27 +### Changed +- feat(call): Add option to mirror video preview + [#12593](https://github.com/nextcloud/spreed/pull/12593) +- feat(call): Add 'Participants' tab to 1-1 calls + [#12594](https://github.com/nextcloud/spreed/pull/12594) + +### Fixed +- fix(federation): Update federation invites counter + [#12544](https://github.com/nextcloud/spreed/pull/12544) +- fix(chat): Hide reply button for participants without chat permissions + [#12577](https://github.com/nextcloud/spreed/pull/12577) +- fix(bots): Show error messages during bots setup + [#12572](https://github.com/nextcloud/spreed/pull/12572) +- fix(sidebar): Restore missing tab after switching a conversation + [#12587](https://github.com/nextcloud/spreed/pull/12587) +- fix(chat): Adjust toast message on message deletion + [#12589](https://github.com/nextcloud/spreed/pull/12589) +- fix(chat): Fix marking conversation as read for hidden messages + [#12592](https://github.com/nextcloud/spreed/pull/12592) + +## 19.0.3 – 2024-06-18 +### Fixed +- fix(chat): visual alignment of typing indicator for wide screens + [#12521](https://github.com/nextcloud/spreed/pull/12521) +- fix(call): remove sound interference in Safari after audio disconnecting + [#12534](https://github.com/nextcloud/spreed/pull/12534) + +## 19.0.2 – 2024-06-13 +### Fixed +- fix(call): Fix audio issue in Safari when a user unmutes after a longer time while the tab is inactive + [#12511](https://github.com/nextcloud/spreed/pull/12511) +- fix(bots): Fix bots with self-signed certificates + [#12471](https://github.com/nextcloud/spreed/pull/12471) +- fix(chat): Improve scrolling behaviour when reopening a conversation + [#12199](https://github.com/nextcloud/spreed/pull/12199) +- fix(chat): Better handling of captioned messages in federated conversations + [#12375](https://github.com/nextcloud/spreed/pull/12375) +- fix(attachments): Fix creating new files from templates + [#12488](https://github.com/nextcloud/spreed/pull/12488) +- fix(call): Directly sync the preferences with the device selection + [#12493](https://github.com/nextcloud/spreed/pull/12493) +- fix(call): Give feedback when trying to "Ring" a participant that has DND enabled + [#12377](https://github.com/nextcloud/spreed/pull/12377) +- fix(breakoutrooms): Don't allow to enable guests in breakout rooms until it's supported + [#12457](https://github.com/nextcloud/spreed/pull/12457) +- fix(UI): Improve button in mobile UI to use less space + [#12473](https://github.com/nextcloud/spreed/pull/12473) + +## 19.0.1 – 2024-05-23 +### Changed +- fix(editing): restore default behaviour of keyboard hotkeys Ctrl+Up + [#12254](https://github.com/nextcloud/spreed/pull/12254) +- fix: replace emoji-mart-vue-fast lib usage with nextcloud/vue function + [#12306](https://github.com/nextcloud/spreed/pull/12306) +- feat(capabilities): Expose which capabilities should be considered local vs federated + [#12316](https://github.com/nextcloud/spreed/pull/12316) + +### Fixed +- fix(call): open chat sidebar in call by click on toast + [#12196](https://github.com/nextcloud/spreed/pull/12196) +- fix(LeftSidebar): small glitch on sidebar scroll + [#12286](https://github.com/nextcloud/spreed/pull/12286) +- fix(MessagesList): clean up expired, removed messages from the chat + [#12287](https://github.com/nextcloud/spreed/pull/12287) +- fix(chat): focus submit on upload attachments without caption + [#12296](https://github.com/nextcloud/spreed/pull/12296) +- fix(dashboard): Fix dashboard when the last message of a chat expired + [#12309](https://github.com/nextcloud/spreed/pull/12309) +- fix(notifications): Preparse call notifications for improved performance + [#12320](https://github.com/nextcloud/spreed/pull/12320) +- fix(polls): Remove actor info from system message + [#12344](https://github.com/nextcloud/spreed/pull/12344) +- fix(federation): Don't send notifications for most system messages in federation + [#12371](https://github.com/nextcloud/spreed/pull/12371) +- fix(recording): Stop broken recording backend + [#12403](https://github.com/nextcloud/spreed/pull/12403) +- fix(recording): Handle the problem gracefully when the recording can not be uploaded + [#12404](https://github.com/nextcloud/spreed/pull/12404) + +## 19.0.0 – 2024-04-24 +### Added +- Messages can now be edited by logged-in authors and moderators for one day + [#1836](https://github.com/nextcloud/spreed/issues/1836) +- Allow todo lists in chat messages to be interactive + [#12065](https://github.com/nextcloud/spreed/issues/12065) +- Added a "In conversation" search filter + [#11456](https://github.com/nextcloud/spreed/issues/11456) +- Save unsent messages in browser storage so they survive a page reload or browser restart + [#3055](https://github.com/nextcloud/spreed/issues/3055) +- Allow to accept individual users when the lobby is enabled + [#8601](https://github.com/nextcloud/spreed/issues/8601) +- Flavored Markdown in messages + [#10066](https://github.com/nextcloud/spreed/issues/10066) +- Allow to see all reactions + [#11508](https://github.com/nextcloud/spreed/issues/11508) +- Preview: Federated chatting + [#11231](https://github.com/nextcloud/spreed/issues/11231) + +### Changed +- Update translations +- Update several dependencies +- Added support for Janus 1.x +- Prepare frontend code for a migration to Vue3 +- Migrated various icons to Material Design icons +- Deleting messages is now possible without a time limitation (was 6 hours) + [#11408](https://github.com/nextcloud/spreed/issues/11408) +- Guests are now rate-limited on mentioning users + [#11072](https://github.com/nextcloud/spreed/issues/11072) +- Make polls more visible in the chat when they are posted during a call + [#11372](https://github.com/nextcloud/spreed/issues/11372) +- Bots can now be installed by apps with limited feature flags + [#11630](https://github.com/nextcloud/spreed/issues/11630) +- Save all previously picked devices to improve the call experience when switching between different working situations + [#12067](https://github.com/nextcloud/spreed/issues/12067) + +### Deprecation +- Commands: This will be the last major version that supports commands. Please migrate your commands to webhook based bots instead. + +## 19.0.0-rc.6 – 2024-04-22 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(chat): restrict checkbox editing in one-to-one conversations + [#12160](https://github.com/nextcloud/spreed/pull/12160) + [#12176](https://github.com/nextcloud/spreed/pull/12176) +- fix(chat): Fix clearing the input field after file upload + [#12061](https://github.com/nextcloud/spreed/issues/12061) +- fix(chat): Fix setting known chat messages borders after leaving the conversation + [#12183](https://github.com/nextcloud/spreed/pull/12183) +- fix(dashboard): Dashboard does not show mentions from federated conversations + [#12163](https://github.com/nextcloud/spreed/pull/12163) + +## 19.0.0-rc.5 – 2024-04-18 +### Changed +- Update translations + +### Fixed +- fix(lobby): Show the timezone and relative time when enabling the lobby + [#12135](https://github.com/nextcloud/spreed/issues/12135) +- fix(shareIntegration): Fix handle to close and open the right sidebar on publish share links + [#12134](https://github.com/nextcloud/spreed/issues/12134) +- fix(chat): Fix collapsing grouped system message + [#12139](https://github.com/nextcloud/spreed/issues/12139) +- fix(attachments): Fix missing icons when creating a file in a chat + [#12138](https://github.com/nextcloud/spreed/issues/12138) +- fix(media): Fix initial selection of devices + [#12152](https://github.com/nextcloud/spreed/pull/12152) + [#12146](https://github.com/nextcloud/spreed/pull/12146) + +## 19.0.0-rc.4 – 2024-04-16 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(calls): Correctly pick the device when showing the device picker after a page reload + [#12124](https://github.com/nextcloud/spreed/issues/12124) +- fix(conversations): Correctly update conversations when the read marker changes via another device or window + [#9590](https://github.com/nextcloud/spreed/issues/9590) +- fix(chat): Make "silent send" state more obvious for follow up messages + [#12118](https://github.com/nextcloud/spreed/issues/12118) +- fix(dashboard): Correctly handle 1-1 conversations with unread system messages + [#12073](https://github.com/nextcloud/spreed/issues/12073) + +## 19.0.0-rc.3 – 2024-04-11 +### Added +- feat(chat): Allow todo lists to be interactive + [#12065](https://github.com/nextcloud/spreed/issues/12065) +- feat(devicechecker): Save all previously picked devices instead of the last one + [#12067](https://github.com/nextcloud/spreed/issues/12067) +- feat(OCM): Register TalkV1 as OCM resource + [#12045](https://github.com/nextcloud/spreed/issues/12045) +- feat(dashboard): Implement Dashboard Widget APIv2 + [#12035](https://github.com/nextcloud/spreed/issues/12035) + +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(chat): Mentions in todo lists are not rendered + [#12009](https://github.com/nextcloud/spreed/issues/12009) +- fix(one2one): Allow the desktop client to handle one-to-one links without a reload + [#12047](https://github.com/nextcloud/spreed/issues/12047) +- fix(attachments): Ensure all rich object parameters are strings + [#12043](https://github.com/nextcloud/spreed/issues/12043) +- fix(openapi): Ensure operation IDs are unique + [#12030](https://github.com/nextcloud/spreed/issues/12030) +- fix(openapi): Object inheritance for chat and proxy messages + [#12056](https://github.com/nextcloud/spreed/issues/12056) +- fix(chat): Don't close emoji picker when clicking on the search input or a category + [#12062](https://github.com/nextcloud/spreed/issues/12062) + +## 19.0.0-rc.2 – 2024-04-04 +### Added +- feat(desktop): Prepare to support screensharing in the desktop client + [#12003](https://github.com/nextcloud/spreed/issues/12003) + +### Changed +- Update translations +- Update several dependencies + +### Fixed +- fix(federation): Fix posting federated messages with oracle database + [#11999](https://github.com/nextcloud/spreed/issues/11999) + +## 19.0.0-rc.1 – 2024-03-28 +### Added +- Add a header to the room list indicating pending invites + [#11944](https://github.com/nextcloud/spreed/issues/11944) + +### Changed +- Update translations +- Update several dependencies + +### Fixed +- Don't close the modal on outside click when the user started to fill them + [#11941](https://github.com/nextcloud/spreed/issues/11941) +- Fix user confusion when federating with a user that has the same user ID + [#11942](https://github.com/nextcloud/spreed/issues/11942) +- Don't transfer ownership federated memberships as it doesn't work + [#11950](https://github.com/nextcloud/spreed/issues/11950) +- Provide the correct container for the file picker + [#11939](https://github.com/nextcloud/spreed/issues/11939) +- Adjust the cursor to be a grabbing hand when dragging the presenter view + [#11903](https://github.com/nextcloud/spreed/issues/11903) +- Fix file names overflowing the box when chat is in the right sidebar + [#11937](https://github.com/nextcloud/spreed/issues/11937) + +## 19.0.0-beta.5 – 2024-03-26 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- Fix handling of cloud ID when provided in wrong casing + [#11922](https://github.com/nextcloud/spreed/issues/11922) +- Fix flow notifications triggered by own actions and in note-to-self conversations + [#11918](https://github.com/nextcloud/spreed/issues/11918) +- Hide call related user settings in federated conversations + [#11892](https://github.com/nextcloud/spreed/issues/11892) + +## 19.0.0-beta.4 – 2024-03-21 +### Changed +- Update translations +- Update several dependencies + +### Fixed +- Adjust read handling in received federated conversations to match normal conversations + [#11861](https://github.com/nextcloud/spreed/issues/11861) +- Allow inviting federated users while creating a conversation + [#11862](https://github.com/nextcloud/spreed/issues/11862) +- Fix duplicate messages when sharing recordings or transcripts + [#11863](https://github.com/nextcloud/spreed/issues/11863) +- Prevent manipulating receiving federated conversations via OCC + [#11855](https://github.com/nextcloud/spreed/issues/11855) + +## 19.0.0-beta.3 – 2024-03-19 +### Added +- Preview: Federated chatting - Implemented reminders + [#11814](https://github.com/nextcloud/spreed/issues/11814) + +### Changed +- Update translations +- Update several dependencies +- Provide better OpenAPI data for message parameters + [#11807](https://github.com/nextcloud/spreed/issues/11807) + +### Fixed +- Fix editing and deleting not reflected correctly in left sidebar for federated conversations + [#11839](https://github.com/nextcloud/spreed/issues/11839) +- Fix missing expiration of cached messages in federated conversations + [#11816](https://github.com/nextcloud/spreed/issues/11816) +- Make conversation avatars dark mode again + [#11840](https://github.com/nextcloud/spreed/issues/11840) +- Reduce the cache time of avatars when the remote was not reachable + [#11842](https://github.com/nextcloud/spreed/issues/11842) +- Don't notify user about own messages when replying or mentioning themselves + [#11815](https://github.com/nextcloud/spreed/issues/11815) +- Fix read marker and unread behaviour in federated conversations again + [#11810](https://github.com/nextcloud/spreed/issues/11810) +- Hide federated conversations from various integrations + [#11809](https://github.com/nextcloud/spreed/issues/11809) + +## 19.0.0-beta.2 – 2024-03-14 +### Added +- Preview: Federated chatting - Implemented reactions + [#11772](https://github.com/nextcloud/spreed/issues/11772) +- Preview: Federated chatting - Implemented polls + [#11653](https://github.com/nextcloud/spreed/issues/11653) + +### Changed +- Update translations +- Update several dependencies +- Mark federated users as such in the participant list + [#11771](https://github.com/nextcloud/spreed/issues/11771) + +### Fixed +- Fix retry behaviour when the host or federated instance was not reachable + [#11780](https://github.com/nextcloud/spreed/issues/11780) +- Fix UI spaming chat requests when memory cache was cleared + [#11788](https://github.com/nextcloud/spreed/issues/11788) +- Fix showing federated users as options when providing a cloudId + [#11794](https://github.com/nextcloud/spreed/issues/11794) +- Fix read marker and unread behaviour in federated conversations + [#11792](https://github.com/nextcloud/spreed/issues/11792) +- Notify federated servers when a hosted conversation is deleted + [#11790](https://github.com/nextcloud/spreed/issues/11790) +- Proxy federation requests with the users language + [#11801](https://github.com/nextcloud/spreed/issues/11801) +- Fix cursor resetting to the beginning of the input field after having typed a "lower than" or "greater than" + [#11803](https://github.com/nextcloud/spreed/issues/11803) +- Directly update the conversation data when marking a conversation read or unread + [#11678](https://github.com/nextcloud/spreed/issues/11678) +- Silent message setting is not remembered with good user experience + [#11591](https://github.com/nextcloud/spreed/issues/11591) +- Silent call setting is not remembered with good user experience + [#8323](https://github.com/nextcloud/spreed/issues/8323) + +### Known issues +- Federated chatting: Various features are still visible but not functional + +## 19.0.0-beta.1 – 2024-03-08 +### Added +- Messages can now be edited by logged-in authors and moderators for one day + [#1836](https://github.com/nextcloud/spreed/issues/1836) +- Added a "In conversation" search filter + [#11456](https://github.com/nextcloud/spreed/issues/11456) +- Save unsent messages in browser storage so they survive a page reload or browser restart + [#3055](https://github.com/nextcloud/spreed/issues/3055) +- Allow to accept individual users when the lobby is enabled + [#8601](https://github.com/nextcloud/spreed/issues/8601) +- Flavored Markdown in messages + [#10066](https://github.com/nextcloud/spreed/issues/10066) +- Allow to see all reactions + [#11508](https://github.com/nextcloud/spreed/issues/11508) +- Preview: Federated chatting + [#11231](https://github.com/nextcloud/spreed/issues/11231) + +### Changed +- Update translations +- Update several dependencies +- Added support for Janus 1.x +- Prepare frontend code for a migration to Vue3 +- Migrated various icons to Material Design icons +- Deleting messages is now possible without a time limitation (was 6 hours) + [#11408](https://github.com/nextcloud/spreed/issues/11408) +- Guests are now rate-limited on mentioning users + [#11072](https://github.com/nextcloud/spreed/issues/11072) +- Make polls more visible in the chat when they are posted during a call + [#11372](https://github.com/nextcloud/spreed/issues/11372) +- Bots can now be installed by apps with limited feature flags + [#11630](https://github.com/nextcloud/spreed/issues/11630) + +### Deprecation +- Commands: This will be the last major version that supports commands. Please migrate your commands to webhook based bots instead. + +### Known issues +- Federated chatting: Various features are still visible but not functional + diff --git a/docs/changelogs/changelog-2.md b/docs/changelogs/changelog-2.md new file mode 100644 index 0000000..c465792 --- /dev/null +++ b/docs/changelogs/changelog-2.md @@ -0,0 +1,46 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 2.0.2 – 2017-11-28 +### Fixed + - Re-send data channels messages when they could not be sent. + [#335](https://github.com/nextcloud/spreed/pull/335) + +## 2.0.1 – 2017-05-22 +### Added + - Display the connection state in the interface and try to reconnect in case of an issue + [#317](https://github.com/nextcloud/spreed/pull/317) + +### Changed + - Is now more tolerant towards server ping issues + [#320](https://github.com/nextcloud/spreed/pull/320) + +### Fixed + - Fix several issues that caused missing avatars + [#312](https://github.com/nextcloud/spreed/pull/312) + [#313](https://github.com/nextcloud/spreed/pull/313) + - Fix visibility of guest names on light themes + [#321](https://github.com/nextcloud/spreed/pull/321) + +## 2.0.0 – 2017-05-02 +### Added + - Screensharing is now supported in Chrome 42+ (requires an extension) and Firefox 52+ + [#227](https://github.com/nextcloud/spreed/pull/227) + - Integration in the new Nextcloud 12 contacts menu + [#300](https://github.com/nextcloud/spreed/pull/300) + +### Changed + - URLs are now short random strings instead of iteratible numbers + [#258](https://github.com/nextcloud/spreed/pull/258) + - Logged-in users can now join public rooms + [#296](https://github.com/nextcloud/spreed/pull/296) + +### Fixed + - Fix error when response of TURN and STUN server arrive in the wrong order + [#295](https://github.com/nextcloud/spreed/pull/295) + + diff --git a/docs/changelogs/changelog-20.md b/docs/changelogs/changelog-20.md new file mode 100644 index 0000000..8b2f0a4 --- /dev/null +++ b/docs/changelogs/changelog-20.md @@ -0,0 +1,524 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 20.1.10 – 2025-09-18 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Support at-all in captions + [#15746](https://github.com/nextcloud/spreed/issues/15746) +- fix(chat): Fix loading a completely empty conversation as a guest + [#15551](https://github.com/nextcloud/spreed/issues/15551) +- fix(conversation): Fix joining and leaving conversations when errors occurred + [#15796](https://github.com/nextcloud/spreed/issues/15796) + +## 20.1.9 – 2025-07-17 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(settings): Allow changing call notification level for federated conversations + [#15515](https://github.com/nextcloud/spreed/issues/15515) +- fix(settings): Fix class name of background job checking certificates + [#15463](https://github.com/nextcloud/spreed/issues/15463) +- fix(polls): Fix deleting poll drafts + [#15535](https://github.com/nextcloud/spreed/issues/15535) + +## 20.1.8 – 2025-07-03 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Remove items from the shared items list when a message is deleted + [#15222](https://github.com/nextcloud/spreed/issues/15222) +- fix(chat): Allow deleting shared call recordings + [#15241](https://github.com/nextcloud/spreed/issues/15241) +- fix(federation): Fix sending invites from conversations without an owner + [#15353](https://github.com/nextcloud/spreed/issues/15353) +- fix(settings): Do not break when settings has an incomplete server URL + [#15452](https://github.com/nextcloud/spreed/issues/15452) + +## 20.1.7 – 2025-05-22 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(call): Fix missing call notification when SIP dial-in is starting a call + [#14991](https://github.com/nextcloud/spreed/issues/14991) +- fix(chat): Improve regex of todo-list handling also uppercase X + [#14903](https://github.com/nextcloud/spreed/issues/14903) +- fix(one-to-one): Add the other participant when sharing a file in one-to-one + [#14850](https://github.com/nextcloud/spreed/issues/14850) +- fix(performance): Fix unnecessary user_status requests from avatar component + [#14934](https://github.com/nextcloud/spreed/issues/14934) + +## 20.1.6 – 2025-04-10 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix: Improve performance of conversation list + [#14810](https://github.com/nextcloud/spreed/issues/14810) + [#14830](https://github.com/nextcloud/spreed/issues/14830) + [#14834](https://github.com/nextcloud/spreed/issues/14834) +- fix: Improve performance when rendering system messages + [#14816](https://github.com/nextcloud/spreed/issues/14816) +- fix(guests): Allow guests to reload the page without re-entering the password + [#14785](https://github.com/nextcloud/spreed/issues/14785) +- fix(federation): Fix calls when federated server receive messages in wrong order + [#14769](https://github.com/nextcloud/spreed/pull/14769) +- fix(calls): Fix call after resuming connection + [#14736](https://github.com/nextcloud/spreed/pull/14736) +- fix(calls): Fix wrongly showing "Missed call" in one-to-one conversations + [#14832](https://github.com/nextcloud/spreed/pull/14832) +- fix(workflows): Adjust workflow registration to new mechanism + [#14823](https://github.com/nextcloud/spreed/pull/14823) +- fix(polls): Hide intermediate results from anonymous polls + [#14723](https://github.com/nextcloud/spreed/issues/14723) + +## 20.1.5 – 2025-03-12 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(calls): Improve call related system messages in one-to-one conversations + [#14468](https://github.com/nextcloud/spreed/issues/14468) +- fix(search): Include caption messages in search results + [#14552](https://github.com/nextcloud/spreed/issues/14552) +- fix(conversation): Stay in chat when removing a group or team the moderator is a member of + [#14396](https://github.com/nextcloud/spreed/issues/14396) +- fix(chat): Correctly start loading the chat when the lobby is removed + [#14518](https://github.com/nextcloud/spreed/issues/14518) +- fix(dashboard): Hide lobbied conversations from the dashboard + [#14611](https://github.com/nextcloud/spreed/issues/14611) +- fix(calls): Further improve false positives when showing the connection warning + [#14449](https://github.com/nextcloud/spreed/issues/14449) +- fix(calls): Fix guest displayname when exporting call participants + [#14631](https://github.com/nextcloud/spreed/issues/14631) +- fix(reminder): Log when generating a reminder failed + [#14617](https://github.com/nextcloud/spreed/issues/14617) + +## 20.1.4 – 2025-02-13 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(bots): Allow users to edit messages of bots in one-to-one conversations + [#14352](https://github.com/nextcloud/spreed/issues/14352) +- fix(calls): Address some false positives when showing the connection warning + [#14251](https://github.com/nextcloud/spreed/issues/14251) +- fix(dashboard): Hide archived conversations from dashboard unless mentioned + [#14298](https://github.com/nextcloud/spreed/issues/14298) +- fix(conversation): Don't suggest teams that are already added to the conversation + [#14348](https://github.com/nextcloud/spreed/issues/14348) +- fix(chat): Fix missing "Copy code" button when syntax is used + [#14309](https://github.com/nextcloud/spreed/issues/14309) + +## 20.1.3 – 2025-01-17 +### Changed +- Update translations +- Update dependencies +- Clarify the usage of the High-performance backend and warn when it's not configured + [#14065](https://github.com/nextcloud/spreed/issues/14065) + +### Fixed +- fix(moderation): Allow promoting self-joined users + [#14082](https://github.com/nextcloud/spreed/issues/14082) +- fix(firstrun): Create default conversations when loading the dashboard + [#14089](https://github.com/nextcloud/spreed/issues/14089) +- fix(archive): Don't add asterix to title for unread messages in archived conversations + [#14102](https://github.com/nextcloud/spreed/issues/14102) + +## 20.1.1 – 2024-12-19 +### Changed +- Update translations +- Update dependencies +- perf(calls): Add endpoint for clients to specifically check if a call notification is still current + [#13950](https://github.com/nextcloud/spreed/issues/13950) + +### Fixed +- fix(chat): Add start and end of out-of-office to the note card in one-to-one conversations + [#13926](https://github.com/nextcloud/spreed/issues/13926) +- fix(chat): Fix chats for offline participants when the chat history was reset + [#13965](https://github.com/nextcloud/spreed/issues/13965) +- fix(calls): Remove "Share to chat" button from failure notifications of recording summaries + [#13941](https://github.com/nextcloud/spreed/issues/13941) +- fix(calls): Hide option to start without enabled media when it can not be stored on the server + [#13953](https://github.com/nextcloud/spreed/issues/13953) +- fix(calls): Retain names of guests when they disconnect from the High-performance backend + [#13984](https://github.com/nextcloud/spreed/issues/13984) +- fix(calls): Fix missing "Speaking while muted" popup + [#14027](https://github.com/nextcloud/spreed/issues/14027) +- fix(search): Implement pagination in conversation search results + [#14034](https://github.com/nextcloud/spreed/issues/14034) +- fix(settings): Confirm server time of High-performance and recording backend in admin settings + [#14016](https://github.com/nextcloud/spreed/issues/14016) + +## 20.1.0 – 2024-12-03 +### Added +- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux + [Download](https://nextcloud.com/talk-desktop-install) +- feat(calls): Summarize call recordings automatically with AI when installed + [#13429](https://github.com/nextcloud/spreed/issues/13429) +- feat(chat): Allow to summarize the chat history when there are many unread messages + [#13430](https://github.com/nextcloud/spreed/issues/13430) +- feat(calls): Allow moderators to download a call participants list + [#13453](https://github.com/nextcloud/spreed/issues/13453) +- feat(meetings): Allow importing email lists as attendees + [#13882](https://github.com/nextcloud/spreed/issues/13882) +- feat(email-guests): Identify and recognize guests invited via email address + [#6098](https://github.com/nextcloud/spreed/issues/6098) +- feat(email-guests): Allow to invite email guests when creating a conversation + [#4937](https://github.com/nextcloud/spreed/issues/4937) +- feat(polls): Allow to draft, export and import polls + [#13439](https://github.com/nextcloud/spreed/issues/13439) +- feat(conversations): Allow to archive conversations + [#6140](https://github.com/nextcloud/spreed/issues/6140) +- feat(conversations): Add direct option to change notification settings to the conversation list again + [#13870](https://github.com/nextcloud/spreed/issues/13870) +- feat(chat): Add option to directly download attachments + [Desktop #824](https://github.com/nextcloud/talk-desktop/issues/824) +- feat(voice-messages): Auto play voice messages which are grouped together + [#13199](https://github.com/nextcloud/spreed/issues/13199) +- feat(calls): Add an option to always disable devices by default + [#13446](https://github.com/nextcloud/spreed/issues/13446) +- feat(calls): Add option to enable blurred background always by default + [#13783](https://github.com/nextcloud/spreed/issues/13783) +- feat(conversations): Add settings to automatically lock rooms after days of inactivity + [#13448](https://github.com/nextcloud/spreed/issues/13448) +- feat(calls): Allow to enforce a maximum call length + [#13445](https://github.com/nextcloud/spreed/issues/13445) +- feat(chat): Highlight file and object shares with an icon in conversations list + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(conversations): Fix password validation when setting a password + [#13890](https://github.com/nextcloud/spreed/issues/13890) +- fix(chat): Fix visibility of "Send message without notification" option being enabled + [#13824](https://github.com/nextcloud/spreed/issues/13824) +- fix(matterbridge): Fix settings disappearing after configuring matterbridge in a conversation + [#13786](https://github.com/nextcloud/spreed/issues/13786) +- fix(chat): Disable interactiveness of reference by default, to avoid input-focus stealing + [#4937](https://github.com/nextcloud/spreed/issues/4937) +- fix(avatar): Use person icon for deleted accounts and guests without a name + [#13754](https://github.com/nextcloud/spreed/issues/13754) +- fix(calls): Omit "with 0 guests" when a call is ended and only 1 logged-in participant joined + [#13545](https://github.com/nextcloud/spreed/issues/13545) +- fix(polls): rename "Private poll" to "Anonymous poll" +- perf: Fix a performance issue when the page is not reloaded over multiple days + +## 20.1.0-rc.3 – 2024-11-28 +### Added +- feat(conversations): Add direct option to change notification settings to the conversation list again + [#13870](https://github.com/nextcloud/spreed/issues/13870) +- feat(meetings): Allow importing email lists as attendees + [#13882](https://github.com/nextcloud/spreed/issues/13882) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(conversation): Fix password validation when setting a password + [#13890](https://github.com/nextcloud/spreed/issues/13890) +- fix(calls): Don't disable microphone and camera when it was enabled in the device check + [#13893](https://github.com/nextcloud/spreed/issues/13893) +- fix(chat): Hide "Generate summary" in federated conversations for now + [#13881](https://github.com/nextcloud/spreed/issues/13881) +- fix(chat): Fix mention suggestions referring to participants of the previous conversation + [#13870](https://github.com/nextcloud/spreed/issues/13870) +- fix(chat): Links in markdown todo-lists are only clickable with edit permissions + [#13865](https://github.com/nextcloud/spreed/issues/13865) + +## 20.1.0-rc.2 – 2024-11-21 +### Added +- feat(chat): Allow to summarize the chat history when there are many unread messages + [#13430](https://github.com/nextcloud/spreed/issues/13430) +- feat(call): Summarize call recordings automatically with AI when installed + [#13429](https://github.com/nextcloud/spreed/issues/13429) +- feat(call): Add option to enable blurred background always by default + [#13783](https://github.com/nextcloud/spreed/issues/13783) +- feat(conversations): Allow to archive conversations + [#6140](https://github.com/nextcloud/spreed/issues/6140) +- feat(conversations): Add settings to automatically lock rooms after days of inactivity + [#13448](https://github.com/nextcloud/spreed/issues/13448) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Fix visibility of the silent send option being enabled + [#13824](https://github.com/nextcloud/spreed/issues/13824) +- fix(matterbridge): Fix settings disappearing after configuring matterbridge in a conversation + [#13786](https://github.com/nextcloud/spreed/issues/13786) + +## 20.1.0-rc.1 – 2024-11-14 +### Added +- feat(polls): Allow to draft, export and import polls + [#13439](https://github.com/nextcloud/spreed/issues/13439) +- feat(voice-messages): Auto play voice messages which are grouped together + [#13199](https://github.com/nextcloud/spreed/issues/13199) +- feat(calls): Allow moderators to download a call participants list + [#13453](https://github.com/nextcloud/spreed/issues/13453) +- feat(calls): Allow to enforce a maximum call length + [#13445](https://github.com/nextcloud/spreed/issues/13445) +- feat(chat): Add option to directly download attachments + [Desktop #824](https://github.com/nextcloud/talk-desktop/issues/824) +- feat(calls): Add an option to always disable devices by default + [#13446](https://github.com/nextcloud/spreed/issues/13446) +- feat(email-guests): Identify and recognize guests invited via email address + [#6098](https://github.com/nextcloud/spreed/issues/6098) +- feat(email-guests): Allow to invite email guests when creating a conversation + [#4937](https://github.com/nextcloud/spreed/issues/4937) +- feat(chat): Highlight file and object shares with an icon in conversations list + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Disable interactiveness of reference by default, to avoid focus stealing + [#4937](https://github.com/nextcloud/spreed/issues/4937) +- fix(avatar): Use person icon for deleted accounts and guests without a name + [#13754](https://github.com/nextcloud/spreed/issues/13754) +- fix(call): Omit "with 0 guests" when a call is ended and only 1 logged-in participant joined + [#13545](https://github.com/nextcloud/spreed/issues/13545) +- fix(polls): rename "Private poll" to "Anonymous poll" +- perf: Fix a performance issue when the page is not reloaded over multiple days + +## 20.0.2 – 2024-11-07 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(attachments): Fix a performance issue when opening the file picker in Talk + [#13698](https://github.com/nextcloud/spreed/issues/13698) +- fix(meetings): Fix layout for guests on public conversations + [#13552](https://github.com/nextcloud/spreed/issues/13552) + +## 20.0.1 – 2024-10-10 +### Added +- feat(call): Add wave and fire call reactions + [#13349](https://github.com/nextcloud/spreed/issues/13349) + +### Changed +- Update translations +- Update dependencies +- fix(chat): Reduce read-width of chat again + [#13421](https://github.com/nextcloud/spreed/issues/13421) +- fix(signaling): Deprecate using multiple High-performance backends and the fake-clustering mode + [#13420](https://github.com/nextcloud/spreed/issues/13420) + +### Fixed +- fix(chat): Fix missing push notifications for chat messages + [#13331](https://github.com/nextcloud/spreed/issues/13331) +- fix(chat): Correctly update "Today"-date separator when the day changes + [#13434](https://github.com/nextcloud/spreed/issues/13434) +- fix(call): Correctly ignore media offers from users without permissions when internal signaling is used + [#13495](https://github.com/nextcloud/spreed/issues/13495) +- fix(chat): Expire message cache when deleting the last message + [#13393](https://github.com/nextcloud/spreed/issues/13393) +- fix(federation): Send the newest conversation properties when retrying OCM notifications + [#13424](https://github.com/nextcloud/spreed/issues/13424) +- fix(avatar): Fix missing translations + [#13409](https://github.com/nextcloud/spreed/issues/13409) +- fix(call): Fix missing call sounds in Safari when tab is moved to the background + [#13353](https://github.com/nextcloud/spreed/issues/13353) +- fix: Fix several popups and menus in fullscreen mode + [#13399](https://github.com/nextcloud/spreed/issues/13399) + +## 20.0.0 – 2024-09-14 +### Added +- Federated calls +- Add a task counter for to-do lists in "Note to self" messages +- Allow editing "Note to self" messages forever +- Show blurhash while loading attachments +- Show upcoming event information in conversation +- Banning users and guests +- Allow to prevent "@all" mentions for non-moderators +- Add button to show smart picker +- Dispatch events when enabling or disabling bots +- Show user status messages of other local users in a federated conversation + +### Changed +- Requires Nextcloud 30 +- High-performance backend with `federation` support is required (Version 2.0.0 or later) +- API performance improvements +- Dynamic order of tiles in a call to prioritize participants with audio or video +- Automatically lower raised hand when participant speaks +- Show confirmation dialog when removing a participant +- Show description when listing open conversations +- Outline the participant count when trying to mention everyone +- Show out-of-office replacement in the out-of-office message + +### Known issues +- Federation requires the High-performance backend on both servers +- Federation requires Talk 20 on both servers + +## 20.0.0-rc.5 – 2024-09-12 +### Added +- Add setup checks for server configuration pitfalls + [#13260](https://github.com/nextcloud/spreed/issues/13260) + +### Fixed +- fix(chat): Fix "You deleted the message" when performed by federated user with same ID + [#13251](https://github.com/nextcloud/spreed/issues/13251) +- fix(chat): Take attachment shares into account when marking a conversation unread + [#13253](https://github.com/nextcloud/spreed/issues/13253) +- fix(calls): Temporarily disable call button after a moderator ended the call for everyone to avoid recalling + [#13268](https://github.com/nextcloud/spreed/issues/13268) +- fix(avatar): Don't overwrite user avatar when selecting a square for a conversation + [#13278](https://github.com/nextcloud/spreed/issues/13278) + +## 20.0.0-rc.4 – 2024-09-03 +### Changed +- Update several dependencies +- Add a task counter for to-do lists in "Note to self" messages + [#13034](https://github.com/nextcloud/spreed/issues/13034) + +### Fixed +- Fix accepting federation invites from notification + [#13146](https://github.com/nextcloud/spreed/issues/13146) +- Show error when joining a call failed + [#13077](https://github.com/nextcloud/spreed/issues/13077) +- Handle OS theme change without page reload + [#10774](https://github.com/nextcloud/spreed/issues/10774) +- Various design fixes + +## 20.0.0-rc.3 – 2024-08-22 +### Changed +- Update several dependencies +- Allow editing "Note to self" messages forever + [#13083](https://github.com/nextcloud/spreed/issues/13083) + [#13089](https://github.com/nextcloud/spreed/issues/13089) +- Add blurhash to files so "previews" can be shown while loading + [#13058](https://github.com/nextcloud/spreed/issues/13058) + [#13075](https://github.com/nextcloud/spreed/issues/13075) + +### Fixed +- fix(federation): Fix propagating permissions, recording consent, permissions and more +- Don't break when joining an open conversation + [#13090](https://github.com/nextcloud/spreed/issues/13090) +- Fix signaling server check for Desktop Client so that Nextcloud 29 does not need the newest version + [#13094](https://github.com/nextcloud/spreed/issues/13094) +- fix(settings): Hide unused settings in (former) one-to-one conversations + [#13046](https://github.com/nextcloud/spreed/issues/13046) +- fix(sidebar): Fix row-style of attachments + [#13044](https://github.com/nextcloud/spreed/issues/13044) +- fix(federation): fix system message when removed user has same userId as the moderator + [#13055](https://github.com/nextcloud/spreed/issues/13055) +- fix(federation): correctly check list of allowed groups when federation is limited + [#13067](https://github.com/nextcloud/spreed/issues/13067) + +## 20.0.0-rc.2 – 2024-08-16 +### Fixed +- Adjust conversation list density + [#13013](https://github.com/nextcloud/spreed/issues/13013) + +## 20.0.0-rc.1 – 2024-08-15 +### Added +- Show upcoming event information (up to 1 month) in conversation top bar + [#12984](https://github.com/nextcloud/spreed/issues/12984) + +### Fixed +- Show user status messages of other local users in a federated conversation + [#12982](https://github.com/nextcloud/spreed/issues/12982) +- Don't trigger notifications for system messages in federated conversations + [#12985](https://github.com/nextcloud/spreed/issues/12985) +- Add a quick option to log-in when visiting a public conversation as a guest + [#12988](https://github.com/nextcloud/spreed/issues/12988) +- Save displayname immediately when inviting a federated account + [#12954](https://github.com/nextcloud/spreed/issues/12954) +- Show error messages when uploading a file failed + [#12919](https://github.com/nextcloud/spreed/issues/12919) +- Add a hint how to add federated accounts + [#12916](https://github.com/nextcloud/spreed/issues/12916) +- Retain order of attachments when uploading multiple + [#12904](https://github.com/nextcloud/spreed/issues/12904) +- Don't allow to enable bots in former one-to-one conversations + [#12893](https://github.com/nextcloud/spreed/issues/12893) +- Hide ban option for federated accounts as they are not supported for now + [#12980](https://github.com/nextcloud/spreed/issues/12980) +- Various design fixes + +## 20.0.0-beta.3 – 2024-08-06 +### Fixed +- Disallow setting message expiration in former one-to-one conversations + [#12882](https://github.com/nextcloud/spreed/issues/12882) +- Show avatar thumbnail for former one-to-one conversations + [#12886](https://github.com/nextcloud/spreed/issues/12886) +- Hide Ban section in "Note to self" conversation settings + [#12889](https://github.com/nextcloud/spreed/pull/12889) +- Disallow banned user to be added to the conversation + [#12793](https://github.com/nextcloud/spreed/issues/12793) +- Disable call button in a federated chat when its settings was changed + [#12864](https://github.com/nextcloud/spreed/issues/12864) +- More UI changes according to design review + [#12800](https://github.com/nextcloud/spreed/issues/12800) + +## 20.0.0-beta.2 – 2024-08-01 +### Fixed +- fix(calls): Add notifications for federated calls + [#12845](https://github.com/nextcloud/spreed/issues/12845) + [#12856](https://github.com/nextcloud/spreed/issues/12856) + [#12874](https://github.com/nextcloud/spreed/issues/12874) +- fix(calls): Fix broken avatar of remote users in calls + [#12863](https://github.com/nextcloud/spreed/issues/12863) +- fix(videoverification): Fix design + [#12853](https://github.com/nextcloud/spreed/issues/12853) +- fix(chat): Prevent leave call dialog when canceling quoting + [#12824](https://github.com/nextcloud/spreed/issues/12824) +- fix(UI): More design adjustments for nextcloud/vue changes + [#12810](https://github.com/nextcloud/spreed/issues/12810) + +## 20.0.0-beta.1 – 2024-07-26 +### Added +- Banning users and guests + [#12291](https://github.com/nextcloud/spreed/issues/12291) +- Allow to prevent "@all" mentions for non-moderators + [#9074](https://github.com/nextcloud/spreed/issues/9074) +- Add button to show smart picker + [#12250](https://github.com/nextcloud/spreed/issues/12250) +- Dispatch events when enabling or disabling bots + [#12551](https://github.com/nextcloud/spreed/pull/12551) +- Preview: Federated calls + [#11232](https://github.com/nextcloud/spreed/issues/11232) + +### Changed +- Requires Nextcloud 30 +- External signaling requires [federation support](https://github.com/strukturag/nextcloud-spreed-signaling/pull/776) +- API performance improvements +- Dynamic order of tiles in a call + [#11393](https://github.com/nextcloud/spreed/issues/11393) +- Automatically lower raised hand when participant speaks + [#12399](https://github.com/nextcloud/spreed/issues/12399) +- Show confirmation dialog when removing a participant + [#12543](https://github.com/nextcloud/spreed/pull/12543) +- Show description when listing open conversations + [#12209](https://github.com/nextcloud/spreed/issues/12209) +- Outline the participant count when trying to mention everyone + [#12782](https://github.com/nextcloud/spreed/pull/12782) +- Show out-of-office replacement in the out-of-office message + [#12510](https://github.com/nextcloud/spreed/pull/12510) + +### Known issues +- Design: not fully adjusted to changes in Nextcloud 30 +- Federated calls: broken participant avatars and missing call notifications + diff --git a/docs/changelogs/changelog-21.md b/docs/changelogs/changelog-21.md new file mode 100644 index 0000000..b4b9a6a --- /dev/null +++ b/docs/changelogs/changelog-21.md @@ -0,0 +1,526 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 21.1.11 – 2026-04-30 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(calendar): Fix calendar meeting integration after a session related change in server + [#17818](https://github.com/nextcloud/spreed/pull/17818) +- fix(federation): Check session id when leaving a conversation + [#17866](https://github.com/nextcloud/spreed/pull/17866) + +## 21.1.10 – 2026-04-02 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(signaling): Check recipient room with internal signaling + [#17578](https://github.com/nextcloud/spreed/pull/17578) +- fix(signaling): Limit signaling support without conversation-token + [#17588](https://github.com/nextcloud/spreed/pull/17588) +- fix(signaling): Expect nonce on request when setting up hosted signaling server + [#17581](https://github.com/nextcloud/spreed/pull/17581) + +## 21.1.9 – 2026-02-12 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(mobile-clients): Fix error message for Talk iOS when end-to-end encryption for calls is enabled + [#17002](https://github.com/nextcloud/spreed/pull/17002) +- fix(breakout-rooms): Fix managing existing breakout rooms in conversation settings + [#16967](https://github.com/nextcloud/spreed/pull/16967) +- fix(chat): Fix system messages with email-invited guests + [#16869](https://github.com/nextcloud/spreed/pull/16869) +- fix(federation): Abort requests early when federation is disabled + [#16962](https://github.com/nextcloud/spreed/pull/16962) +- fix(signaling): Unify request validation for HPB, recording and other services + [#17073](https://github.com/nextcloud/spreed/pull/17073) + +## 21.1.8 – 2026-01-15 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Allow getting a single message + [#16732](https://github.com/nextcloud/spreed/pull/16732) +- fix(call): Allow selecting a media device after an error occurred + [#16700](https://github.com/nextcloud/spreed/pull/16700) +- fix(call): Still block mobile clients when call end-to-end encryption is enabled + [#16673](https://github.com/nextcloud/spreed/pull/16673) + +## 21.1.7 – 2025-12-15 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Correctly expire shared items in sidebar + [#16573](https://github.com/nextcloud/spreed/pull/16573) +- fix(call): Show video streams of other attendees for guests + [#16546](https://github.com/nextcloud/spreed/pull/16546) + +## 21.1.6 – 2025-12-11 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(call): Fix low frame rate in the grid layout + [#16389](https://github.com/nextcloud/spreed/pull/16389) +- fix(call): Keep media disabled when reassigning permissions + [#16521](https://github.com/nextcloud/spreed/pull/16521) +- fix(chat): Fix resetting the cursor to the end of the message when editing + [#16300](https://github.com/nextcloud/spreed/pull/16300) +- fix(chat): Don't show typing indicator when editing a message + [#16140](https://github.com/nextcloud/spreed/pull/16140) +- fix(search): Fix short date style in message search + [#16232](https://github.com/nextcloud/spreed/pull/16232) +- fix(settings): Hide message expiration when not supported by the server + [#16317](https://github.com/nextcloud/spreed/pull/16317) +- fix(settings): Don't transfer ownership of sample conversations + [#16177](https://github.com/nextcloud/spreed/pull/16177) +- fix(settings): Fix a missing check when configuring Matterbridge + [#16523](https://github.com/nextcloud/spreed/pull/16523) + +## 21.1.5 – 2025-09-18 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Validate file name when creating from template instead of failing afterwards + [#15919](https://github.com/nextcloud/spreed/issues/15919) +- fix(conversation): Fix spacing between items in conversation list when forwarding + [#15812](https://github.com/nextcloud/spreed/issues/15812) +- fix(conversation): Fix joining and leaving conversations when errors occurred + [#15797](https://github.com/nextcloud/spreed/issues/15797) + +## 21.1.4 – 2025-08-28 +### Added +- feat(sip): Allow to send the direct dial-in number of users on out-going calls + [#15701](https://github.com/nextcloud/spreed/issues/15701) +- feat(settings): Add a config for the unread message threshold for the AI summary + [#15734](https://github.com/nextcloud/spreed/issues/15734) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(dashboard): Fix events without an end date + [#15732](https://github.com/nextcloud/spreed/issues/15732) +- fix(chat): Suggest mentioning yourself, it's useful with bots and todos + [#15656](https://github.com/nextcloud/spreed/issues/15656) +- fix(chat): Fix search interaction when scrolling away and clicking on a result again + [#15706](https://github.com/nextcloud/spreed/issues/15706) +- fix(chat): Fix support for at-all in captions when sharing a file + [#15744](https://github.com/nextcloud/spreed/issues/15744) + +## 21.1.3 – 2025-08-06 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(meetings): invitation emails for Talk created events not sent + [#15634](https://github.com/nextcloud/spreed/issues/15634) +- fix(dashboard): don't show cancelled events in upcoming events + [#15544](https://github.com/nextcloud/spreed/issues/15544) +- fix(dashboard): prevent accidentally forwarding guests to dashboard via Esc key + [#15560](https://github.com/nextcloud/spreed/issues/15560) +- fix(chat): close Download menu after interaction + [#15587](https://github.com/nextcloud/spreed/issues/15587) +- fix(chat): empty content for guests after chat is cleared + [#15550](https://github.com/nextcloud/spreed/issues/15550) +- fix(chat): fix search result scroll when clicking twice + [#15612](https://github.com/nextcloud/spreed/issues/15612) + +## 21.1.2 – 2025-07-17 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(federation): Make sure some capabilities are correctly used from the remote host + [#15507](https://github.com/nextcloud/spreed/issues/15507) +- fix(settings): Allow changing call notification level for federated conversations + [#15516](https://github.com/nextcloud/spreed/issues/15516) +- fix(settings): Fix class name of background job checking certificates + [#15464](https://github.com/nextcloud/spreed/issues/15464) +- fix(settings): Fix false-negative error being shown on certificate check if another check failed an SSL call + [#15525](https://github.com/nextcloud/spreed/issues/15525) +- fix(polls): Fix deleting poll drafts + [#15536](https://github.com/nextcloud/spreed/issues/15536) + +## 21.1.1 – 2025-07-03 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Always render code blocks left-to-right + [#15364](https://github.com/nextcloud/spreed/issues/15364) +- fix(call): Allow end-to-end encrypted calls in integrations like files and sharing + [#15415](https://github.com/nextcloud/spreed/issues/15415) +- fix(sip): Add log message when direct dial-in had no match to help configuring phone numbers + [#15358](https://github.com/nextcloud/spreed/issues/15358) +- fix(federation): Fix sending invites from conversations without an owner + [#15354](https://github.com/nextcloud/spreed/issues/15354) +- fix(settings): Show errors when the websocket connection could not be opened + [#15368](https://github.com/nextcloud/spreed/issues/15368) +- fix(settings): Validate that signaling private and public key match + [#15357](https://github.com/nextcloud/spreed/issues/15357) +- fix(settings): Do not break when settings has an incomplete server URL + [#15453](https://github.com/nextcloud/spreed/issues/15453) + +## 21.1.0 – 2025-06-05 +### Added +- 📅 Improve handling of event conversations: filtered until close to the meeting, default expiration, tracking of event name and description +- 👥 Allow adding participants to one-to-one calls creating a new conversation +- 🍱 Add a Talk Dashboard +- 📇 Enhance right sidebar in one-to-one conversations with information about the participant +- 📲 Allow SIP direct dial-in to start a new conversation with an existing Nextcloud account +- 🖌️ Allow to provide custom images for virtual backgrounds for branding or corporate appearance +- 🔈 Allow selecting the output device in the media settings +- ☎️ Administration setting to enable SIP dial-in by default for new conversations +- 📅 Allow creating instant meetings +- 🔏 Add sensitive conversations which don't show chat messages in sublines and notifications +- 📲 Add option to mark a conversation as important to still receive notifications during "Do not disturb" + +### Changed +- Update translations +- Update dependencies + +## 21.1.0-rc.4 – 2025-05-29 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(dashboard): Add attachment icon and link to the events on the dashboard + [#15238](https://github.com/nextcloud/spreed/issues/15238) +- fix(meetings): Don't show duplicates for the same event in the upcoming meetings + [#15252](https://github.com/nextcloud/spreed/issues/15252) +- fix(meetings): Lock conversation when meeting is cancelled + [#15253](https://github.com/nextcloud/spreed/issues/15253) +- fix(sip): Allow guests to use direct-dial-in even when starting calls is restricted + [#15234](https://github.com/nextcloud/spreed/issues/15234) + +## 21.1.0-rc.3 – 2025-05-22 +### Added +- 📲 🙊 Add option to mark a conversation as sensitive or important + [#15175](https://github.com/nextcloud/spreed/issues/15175) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Fix missing push notifications for chat messages in important conversations + [#15180](https://github.com/nextcloud/spreed/issues/15180) +- fix(dashboard): Make sure all events of the upcoming week are considered + [#15177](https://github.com/nextcloud/spreed/issues/15177) +- fix(conversations): Make the "Local time" reactive in one-to-one conversations + [#15130](https://github.com/nextcloud/spreed/issues/15130) +- fix(conversations): Only show events in one-to-one conversations when upcoming recurrences contain both participants + [#15163](https://github.com/nextcloud/spreed/issues/15163) +- fix(conversations): Fix background job for conversation retention + [#15185](https://github.com/nextcloud/spreed/issues/15185) +- fix(calls): Don't break the session when the user accidentally navigated to the same conversation + [#15170](https://github.com/nextcloud/spreed/issues/15170) +- fix(calls): Make output device selection work on Safari + [#15142](https://github.com/nextcloud/spreed/issues/15142) + +## 21.1.0-rc.2 – 2025-05-15 +### Added +- 🍱 Add a Talk Dashboard + [#15094](https://github.com/nextcloud/spreed/issues/15094) +- 📅 Allow creating instant meetings + [#15073](https://github.com/nextcloud/spreed/issues/15073) +- 🤝 Show mutual events in the sidebar of one-to-one + [#15097](https://github.com/nextcloud/spreed/issues/15097) +- 🙊 Add sensitive conversations which don't show a chat messages in sublines and notifications + [#15098](https://github.com/nextcloud/spreed/issues/15098) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- Send call notification to newly added participants + [#15090](https://github.com/nextcloud/spreed/issues/15090) +- Fix issues with calendar event integration + [#15078](https://github.com/nextcloud/spreed/issues/15078) + [#15080](https://github.com/nextcloud/spreed/issues/15080) + +## 21.1.0-rc.1 – 2025-05-09 +### Added +- 📅 Improve handling of event conversations: filtered until close to the meeting, default expiration, tracking of event name and description + [#14401](https://github.com/nextcloud/spreed/issues/14401) +- 👥 Allow adding participants to one-to-one calls creating a new conversation + [#14398](https://github.com/nextcloud/spreed/issues/14398) +- 📇 Enhance right sidebar in one-to-one conversations with information about the participant + [#14411](https://github.com/nextcloud/spreed/issues/14411) +- 📲 Allow SIP direct dial-in to start a new conversation with an existing Nextcloud account + [#14992](https://github.com/nextcloud/spreed/issues/14992) +- 🖌️ Allow to provide custom images for virtual backgrounds for branding or corporate appearance + [#14987](https://github.com/nextcloud/spreed/issues/14987) +- 🔈 Allow selecting the output device in the media settings + [#15037](https://github.com/nextcloud/spreed/issues/15037) +- ☎️ Administration setting to allow to enable SIP dial-in by default for new conversations + [#14940](https://github.com/nextcloud/spreed/issues/14940) + +### Changed +- Update translations +- Update dependencies + +## 21.0.4 – 2025-04-28 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(schedule-meeting): Make sure the other user is in one-to-one when scheduling + [#14973](https://github.com/nextcloud/spreed/issues/14973) + [#14967](https://github.com/nextcloud/spreed/issues/14967) +- fix(schedule-meeting): Improve dialog when scheduling in one-to-one + [#14923](https://github.com/nextcloud/spreed/issues/14923) +- fix(schedule-meeting): Hide schedule meeting from former one-to-one + [#14923](https://github.com/nextcloud/spreed/issues/14923) +- fix(performance): Fix unnecessary user_status requests from avatar component + [#14932](https://github.com/nextcloud/spreed/issues/14932) + +## 21.0.3 – 2025-04-17 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(avatar): Fix regression from library requesting too many status updates + [#14894](https://github.com/nextcloud/spreed/issues/14894) +- fix(chat): Improve regex of todo-list handling also uppercase X + [#14904](https://github.com/nextcloud/spreed/issues/14904) +- fix(federation): Use correct capability to show call-notification setting in federated conversations + [#14907](https://github.com/nextcloud/spreed/issues/14907) + +## 21.0.2 – 2025-04-10 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix: Improve performance of conversation list + [#14811](https://github.com/nextcloud/spreed/issues/14811) + [#14779](https://github.com/nextcloud/spreed/issues/14779) + [#14777](https://github.com/nextcloud/spreed/issues/14777) + [#14775](https://github.com/nextcloud/spreed/issues/14775) + [#14774](https://github.com/nextcloud/spreed/issues/14774) + [#14831](https://github.com/nextcloud/spreed/issues/14831) +- fix: Improve performance when rendering system messages + [#14817](https://github.com/nextcloud/spreed/issues/14817) +- fix: Improve performance when searching for conversations + [#14734](https://github.com/nextcloud/spreed/issues/14734) +- fix(chat): Fix missing reactions on own messages while posting + [#14695](https://github.com/nextcloud/spreed/pull/14695) +- fix(guests): Allow guests to reload the page without re-entering the password + [#14786](https://github.com/nextcloud/spreed/issues/14786) +- fix(federation): Fix calls when federated server receive messages in wrong order + [#14770](https://github.com/nextcloud/spreed/pull/14770) +- fix(calls): Fix call after resuming connection + [#14737](https://github.com/nextcloud/spreed/pull/14737) +- fix(calls): Fix wrongly showing "Missed call" in one-to-one conversations + [#14833](https://github.com/nextcloud/spreed/pull/14833) +- fix(calls): Fix videos in the last row being cut off + [#14692](https://github.com/nextcloud/spreed/pull/14692) +- fix(calls): Prevent screen from turning off during calls + [#14733](https://github.com/nextcloud/spreed/pull/14733) +- fix(settings): Fix initial state of end-to-end-encrypted calls setting + [#14693](https://github.com/nextcloud/spreed/pull/14693) +- fix(events): Automatically confirm the calendar event for the organizer + [#14762](https://github.com/nextcloud/spreed/pull/14762) +- fix(workflows): Adjust workflow registration to new mechanism + [#14823](https://github.com/nextcloud/spreed/pull/14823) +- fix(polls): Hide intermediate results from anonymous polls + [#14724](https://github.com/nextcloud/spreed/issues/14724) + +## 21.0.1 – 2025-03-12 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(calls): Improve call related system messages in one-to-one conversations + [#14495](https://github.com/nextcloud/spreed/issues/14495) +- fix(search): Include caption messages in search results + [#14553](https://github.com/nextcloud/spreed/issues/14553) +- fix(chat): Show loading spinner when requesting AI chat summary + [#14625](https://github.com/nextcloud/spreed/issues/14625) +- fix(chat): Correctly start loading the chat when the lobby is removed + [#14517](https://github.com/nextcloud/spreed/issues/14517) +- fix(dashboard): Hide lobbied conversations from the dashboard + [#14612](https://github.com/nextcloud/spreed/issues/14612) +- fix(federation): Fix broken participant avatar when federated instance is down + [#14573](https://github.com/nextcloud/spreed/issues/14573) +- fix(conversation): Fix participant list change when the menu for a participant is open + [#14564](https://github.com/nextcloud/spreed/issues/14564) +- fix(calls): Fix guest displayname when exporting call participants + [#14630](https://github.com/nextcloud/spreed/issues/14630) +- fix(reminder): Log when generating a reminder failed + [#14618](https://github.com/nextcloud/spreed/issues/14618) + +## 21.0.0 – 2025-02-25 +### Added +- feat(meetings): Schedule a meeting directly from within the conversation +- feat(chat): Support mentioning teams in the chat +- feat(chat): Add message search to the right sidebar +- feat(bots): Allow bots to get invoked for reactions +- feat(bots): Let bots know the original message in case a message was a reply +- feat(bots): Allow event based bots that don't require HTTP requests +- feat(calls): Add end-to-end encryption for calls with the High-performance backend +- feat(calls): Allow to zoom and pan screenshares in a call +- feat(conversations): Add sample conversation mechanism + +### Changed +- Update translations +- Update dependencies +- Require Nextcloud 31 / Hub 10 + +### Fixed +- fix(UI): Fix various issues for right-to-left languages + +## 21.0.0-rc.5 – 2025-02-21 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(chat): Mark mentions of teams you are a part of primary + [#14455](https://github.com/nextcloud/spreed/issues/14455) +- fix(federation): Fix "remote server was updated" shown too frequently + [#14389](https://github.com/nextcloud/spreed/issues/14389) + +## 21.0.0-rc.4 – 2025-02-13 +### Added +- feat(bots): Allow bots to get invoked for reactions + [#14336](https://github.com/nextcloud/spreed/issues/14336) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(bots): Allow users to edit messages of bots in one-to-one conversations + [#14353](https://github.com/nextcloud/spreed/issues/14353) +- fix(conversation): Correctly update team names after being edited + [#14358](https://github.com/nextcloud/spreed/issues/14358) +- fix(conversation): Don't suggest teams that are already added to the conversation + [#14349](https://github.com/nextcloud/spreed/issues/14349) +- fix(meetings): Fix calendar integration for Desktop client + [#14379](https://github.com/nextcloud/spreed/issues/14379) +- fix(calls): Fix issues with presenter overlay + [#14330](https://github.com/nextcloud/spreed/issues/14330) + [#14371](https://github.com/nextcloud/spreed/issues/14371) + +## 21.0.0-rc.3 – 2025-02-07 +### Added +- feat(bots): Let bots know when a message was a reply + [#14310](https://github.com/nextcloud/spreed/issues/14310) + +### Changed +- Update translations +- Update dependencies +- fix(calls): Adjust double-click behaviour when zooming screenshares + [#14284](https://github.com/nextcloud/spreed/issues/14284) + +### Fixed +- fix(chat): Fix double scroll bar + [#14265](https://github.com/nextcloud/spreed/issues/14265) +- fix(chat): Keep chat position at the bottom when the chat list height expends + [#14268](https://github.com/nextcloud/spreed/issues/14268) +- fix(chat): Fix missing "Copy code" in some cases + [#14308](https://github.com/nextcloud/spreed/issues/14308) +- fix(archive): Hide archived conversations from dashboard unless mentioned + [#14299](https://github.com/nextcloud/spreed/issues/14299) +- fix(chat): Add mention-id to simplify editing messages with mentions + [#14311](https://github.com/nextcloud/spreed/issues/14311) + +## 21.0.0-rc.2 – 2025-01-30 +### Added +- feat(chat): Support mentioning teams + [#14259](https://github.com/nextcloud/spreed/issues/14259) + [#14260](https://github.com/nextcloud/spreed/issues/14260) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(UI): Fix multiple right-to-left issues + [#14235](https://github.com/nextcloud/spreed/issues/14235) + [#14256](https://github.com/nextcloud/spreed/issues/14256) +- fix(meetings): Allow creating conversations when password policy app is enabled + [#14227](https://github.com/nextcloud/spreed/issues/14227) +- fix(calls): Fix multiple false-positives when showing the connection warning + [#14252](https://github.com/nextcloud/spreed/issues/14252) +- fix(bots): Fix installing PHP event bots via an event + [#14231](https://github.com/nextcloud/spreed/issues/14231) + +## 21.0.0-rc.1 – 2025-01-23 +### Added +- feat(calls): Allow to zoom and pan screenshares in a call + [#14028](https://github.com/nextcloud/spreed/issues/14028) +- feat(bots): Allow event based bots that don't require HTTP requests + [#14160](https://github.com/nextcloud/spreed/issues/14160) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- docs: Add quick install documentation for the High-performance backend + [#14165](https://github.com/nextcloud/spreed/issues/14165) + +## 21.0.0-beta.2 – 2025-01-17 +### Added +- feat(search): Add message search to the right sidebar + [#14125](https://github.com/nextcloud/spreed/issues/14125) +- feat(conversations): Add sample conversation mechanism + [#14124](https://github.com/nextcloud/spreed/issues/14124) +- feat(calls): Add end-to-end encryption for calls with the High-performance backend + [#14005](https://github.com/nextcloud/spreed/issues/14005) + +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(federation): Fix federation from Nextcloud 30 to 31 with https + [#14141](https://github.com/nextcloud/spreed/issues/14141) +- fix(conversations): Make compact list more compact and avatar bigger + [#14118](https://github.com/nextcloud/spreed/issues/14118) +- fix(signaling): Test actual websocket connection in admin settings + [#13973](https://github.com/nextcloud/spreed/issues/13973) +- fix(archive): Don't add asterix to title for unread messages in archived conversations + [#14101](https://github.com/nextcloud/spreed/issues/14101) + +## 21.0.0-beta.1 – 2025-01-10 +### Added +- Schedule a meeting directly from within the conversation + [#6292](https://github.com/nextcloud/spreed/issues/6292) + +### Changed +- Update translations +- Update dependencies +- Require Nextcloud 31 / Hub 10 + diff --git a/docs/changelogs/changelog-22.md b/docs/changelogs/changelog-22.md new file mode 100644 index 0000000..a47c2fe --- /dev/null +++ b/docs/changelogs/changelog-22.md @@ -0,0 +1,386 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 22.0.12 – 2026-04-30 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(bots): Hide bots from apps when their app is disabled + [#17668](https://github.com/nextcloud/spreed/pull/17668) +- fix(bots): Don't soft-fail when creating incompatible bots + [#17665](https://github.com/nextcloud/spreed/pull/17665) +- fix(calendar): Make appointment conversations meetings so they expire after the appointment + [#17646](https://github.com/nextcloud/spreed/pull/17646) +- fix(call): Fix joining the conversation with breakout rooms or extending 1-1 + [#17785](https://github.com/nextcloud/spreed/pull/17785) + [#17710](https://github.com/nextcloud/spreed/pull/17710) + [#17779](https://github.com/nextcloud/spreed/pull/17779) +- fix(chat): Improve "language detection" option in the translation dialogue + [#17677](https://github.com/nextcloud/spreed/pull/17677) +- fix(commands): Correctly exclude only 1-1 from managing via occ + [#17740](https://github.com/nextcloud/spreed/pull/17740) +- fix(conversation): Show filtered conversations right away when searching + [#17841](https://github.com/nextcloud/spreed/pull/17841) +- fix(conversation): Make conversation order consistent when searching + [#17658](https://github.com/nextcloud/spreed/pull/17658) +- fix(conversation): Gracefully handle cases when the conversation list is too big for the browser storage + [#17650](https://github.com/nextcloud/spreed/pull/17650) +- fix(federation): Check session id when leaving a conversation + [#17867](https://github.com/nextcloud/spreed/pull/17867) +- fix(recording): Allow MP4 as recording mimetype + [#17648](https://github.com/nextcloud/spreed/pull/17648) +- fix(transcriptions): Fix live transcription app getting the signaling settings + [#17739](https://github.com/nextcloud/spreed/pull/17739) + +## 22.0.11 – 2026-04-02 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Keep thread information when copying link of a message + [#17478](https://github.com/nextcloud/spreed/pull/17478) +- fix(call): Fix unneeded signaling messages when sending initial state + [#17407](https://github.com/nextcloud/spreed/pull/17407) +- fix(conversation): Improve translation string for automatic deletion of conversations + [#17411](https://github.com/nextcloud/spreed/pull/17411) +- fix(meeting): Don't log a PHP error when a todo item is edited + [#17547](https://github.com/nextcloud/spreed/pull/17547) +- fix(phone): Improve phone number input validation of OCC commands + [#17551](https://github.com/nextcloud/spreed/pull/17551) +- fix(video-verification): Fix video-verification when "Start call" is limited to moderators + [#17504](https://github.com/nextcloud/spreed/pull/17504) +- fix(signaling): Check recipient room with internal signaling + [#17579](https://github.com/nextcloud/spreed/pull/17579) +- fix(signaling): Limit signaling support without conversation-token + [#17587](https://github.com/nextcloud/spreed/pull/17587) +- fix(signaling): Expect nonce on request when setting up hosted signaling server + [#17582](https://github.com/nextcloud/spreed/pull/17582) + +## 22.0.10 – 2026-03-19 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(bots): Support threads for bots + [#17345](https://github.com/nextcloud/spreed/pull/17345) +- fix(call): Hide call button from dashboard when calls are disabled + [#17317](https://github.com/nextcloud/spreed/pull/17317) +- fix(call): Prefix typed phone number with configured prefix if needed + [#17207](https://github.com/nextcloud/spreed/pull/17207) +- fix(chat): Improve rendering of markdown in mention bubbles + [#17211](https://github.com/nextcloud/spreed/pull/17211) +- fix(conversation): Allow to change the password of a conversation without disabling it + [#17221](https://github.com/nextcloud/spreed/pull/17221) +- fix(federation): Fix federation when using the email instead of the user ID + [#17312](https://github.com/nextcloud/spreed/pull/17312) +- fix(search): Fix conversation and user search with unicode characters + [#17143](https://github.com/nextcloud/spreed/pull/17143) +- fix(settings): Don't discard hosted High-performance backend account when 401 is returned + [#17384](https://github.com/nextcloud/spreed/pull/17384) +- fix(settings): Expose more initial state data as capabilities + [#17341](https://github.com/nextcloud/spreed/pull/17341) + [#17216](https://github.com/nextcloud/spreed/pull/17216) +- fix(settings): Fix problem when editing some matterbridge components that have boolean fields + [#17391](https://github.com/nextcloud/spreed/pull/17391) +- fix(settings): Create a stronger/longer turn secret when --generate-secret option is used + [#17397](https://github.com/nextcloud/spreed/pull/17397) + +## 22.0.9 – 2026-02-12 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(mobile-clients): Fix error message for Talk iOS when end-to-end encryption for calls is enabled + [#17003](https://github.com/nextcloud/spreed/pull/17003) +- fix(breakout-rooms): Fix managing existing breakout rooms in conversation settings + [#16968](https://github.com/nextcloud/spreed/pull/16968) +- fix(call): Improve new chat messages hint during calls + [#16797](https://github.com/nextcloud/spreed/pull/16797) +- fix(chat): Fix system messages with email-invited guests + [#16867](https://github.com/nextcloud/spreed/pull/16867) +- fix(chat): Respect thread and parent when sharing a file + [#16860](https://github.com/nextcloud/spreed/pull/16860) +- fix(chat): Correctly update last message and unread counter from polling + [#16910](https://github.com/nextcloud/spreed/pull/16910) +- fix(meeting): Add timezone to events created from Talk + [#17060](https://github.com/nextcloud/spreed/pull/17060) +- fix(search): Readd missing input border for search + [#16861](https://github.com/nextcloud/spreed/pull/16861) +- fix(federation): Abort requests early when federation is disabled + [#16963](https://github.com/nextcloud/spreed/pull/16963) +- fix(signaling): Unify request validation for HPB, recording and other services + [#17074](https://github.com/nextcloud/spreed/pull/17074) +- fix(bots): Fix reaction author when notifying bots + [#16900](https://github.com/nextcloud/spreed/pull/16900) + +## 22.0.8 – 2026-01-15 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Allow getting a single message + [#16731](https://github.com/nextcloud/spreed/pull/16731) +- fix(chat): Don't show chat messages of the old chat when switching to a new chat + [#16718](https://github.com/nextcloud/spreed/pull/16718) +- fix(chat): Don't set the cursor to the end when someone reacts to a message while editing + [#16633](https://github.com/nextcloud/spreed/pull/16633) +- fix(call): Allow selecting a media device after an error occurred + [#16701](https://github.com/nextcloud/spreed/pull/16701) +- fix(call): Allow preparing media devices even when the user has no permissions yet + [#16682](https://github.com/nextcloud/spreed/pull/16682) +- fix(call): Still block mobile clients when call end-to-end encryption is enabled + [#16674](https://github.com/nextcloud/spreed/pull/16674) + +## 22.0.7 – 2025-12-17 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): fix loading more shared items + [#16589](https://github.com/nextcloud/spreed/pull/16589) + +## 22.0.6 – 2025-12-15 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Correctly expire shared items in sidebar + [#16569](https://github.com/nextcloud/spreed/pull/16569) +- fix(call): Show video streams of other attendees for guests + [#16544](https://github.com/nextcloud/spreed/pull/16544) +- fix(call): Prevent call reactions overflow for users + [#16581](https://github.com/nextcloud/spreed/pull/16581) + +## 22.0.5 – 2025-12-11 +### Changed +- Update dependencies +- Update translations +- Build mechanism was changed from Webpack to RSPack + +### Fixed +- fix(call): Fix low frame rate in the grid layout + [#16519](https://github.com/nextcloud/spreed/pull/16519) +- fix(call): Fix "Stay in call" as primary action in "Leave call"-dialog + [#16481](https://github.com/nextcloud/spreed/pull/16481) +- fix(call): Keep media disabled when reassigning permissions + [#16522](https://github.com/nextcloud/spreed/pull/16522) +- fix(chat): Fix a case where chat-relay would pause and skip messages + [#16407](https://github.com/nextcloud/spreed/pull/16407) +- fix(chat): Correctly handle unsorted reaction details + [#16426](https://github.com/nextcloud/spreed/pull/16426) +- fix(settings): Hide unsupported shortcuts for guests + [#16410](https://github.com/nextcloud/spreed/pull/16410) +- fix(settings): Fix wasm file name in system check + [#16395](https://github.com/nextcloud/spreed/pull/16395) +- fix(settings): Fix default for listable conversation to be off + [#16512](https://github.com/nextcloud/spreed/pull/16512) +- fix(settings): Fix a missing check when configuring Matterbridge + [#16524](https://github.com/nextcloud/spreed/pull/16524) + +## 22.0.4 – 2025-11-20 +### Changed +- Update translations + +### Fixed +- fix(settings): Show appearance and sounds settings for guests again + [#16377](https://github.com/nextcloud/spreed/pull/16377) +- fix(settings): Add app config to disable play-sounds for guests + [#16381](https://github.com/nextcloud/spreed/pull/16381) +- fix(settings): Do not warn about missing experimental feature + [#16388](https://github.com/nextcloud/spreed/pull/16388) +- fix(settings): Fix path for WASM file check + [#16389](https://github.com/nextcloud/spreed/pull/16389) + +## 22.0.3 – 2025-11-20 +### Changed +- Update dependencies +- Update translations +- feat(call): Use hardware acceleration for background blur + [#16310](https://github.com/nextcloud/spreed/pull/16310) +- feat(settings): Redesign Talk settings + [#16304](https://github.com/nextcloud/spreed/pull/16304) +- perf(chat): Chat messages can be relayed via the HPB when enabling an experiment + [#16240](https://github.com/nextcloud/spreed/pull/16240) + +### Fixed +- fix(chat): Fix memory leak from styles recalculation + [#16260](https://github.com/nextcloud/spreed/pull/16260) +- fix(chat): Fix rendering performance from message bottom-bar + [#16307](https://github.com/nextcloud/spreed/pull/16307) +- fix(conversations): Fix rendering performance of left sidebar with many conversations + [#16340](https://github.com/nextcloud/spreed/pull/16340) +- fix(call): Fix squeezed buttons in small screens + [#16205](https://github.com/nextcloud/spreed/pull/16205) +- fix(call): Use bulk activity events when ending a call + [#16263](https://github.com/nextcloud/spreed/pull/16263) +- fix(chat): Fix amount of requests when a guest sets their name + [#16364](https://github.com/nextcloud/spreed/pull/16364) +- fix(federation): Allow access to shared items like location, threads, … for federated users + [#16269](https://github.com/nextcloud/spreed/pull/16269) +- fix(search): Use short datetime style in search + [#16233](https://github.com/nextcloud/spreed/pull/16233) + +## 22.0.2 – 2025-10-27 +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Fix relative date header showing `.042` after DST change + [#16217](https://github.com/nextcloud/spreed/pull/16217) +- fix(participants): Correctly show guests as online and offline + [#16218](https://github.com/nextcloud/spreed/pull/16218) + +## 22.0.1 – 2025-10-24 +### Added +- feat(bots): Add create command for inbound-only bots + [#16111](https://github.com/nextcloud/spreed/pull/16111) + +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(chat): Don't trigger typing indicator when editing a message + [#16139](https://github.com/nextcloud/spreed/pull/16139) +- fix(meeting): Fix issue not showing name of lobbied gusts to moderators + [#16147](https://github.com/nextcloud/spreed/pull/16147) +- fix(meeting): Fix issue not showed 2 guests instead of 1 + [#16154](https://github.com/nextcloud/spreed/pull/16154) +- fix(threads): Fix notifications for federated users + [#16064](https://github.com/nextcloud/spreed/pull/16064) +- fix(threads): Fix link to thread when clicking on notification while on Talk + [#16056](https://github.com/nextcloud/spreed/pull/16056) +- fix(threads): Fix Oracle compatibility with threads + [#16150](https://github.com/nextcloud/spreed/pull/16150) +- fix(conversations): Don't transfer sample conversations when transferring ownership + [#16176](https://github.com/nextcloud/spreed/pull/16176) + +## 22.0.0 – 2025-09-27 +### Added +- Implement threads feature +- Implement "Busy" status in calls +- Implement live-transcriptions when the ExApp is available +- Update call interface design + +### Changed +- Migrate app to Vue3 +- Update dependencies +- Update translations +- Require Nextcloud 32 / Hub 25 Autumn + +### Fixed +- Improve chat history browsing performance + +## 22.0.0-rc.4 – 2025-09-25 +### Changed +- Update translations +- Update dependencies + +### Fixed +- fix(threads): Support object shares, polls and file uploads + [#15990](https://github.com/nextcloud/spreed/pull/15990) + [#16001](https://github.com/nextcloud/spreed/pull/16001) +- fix(call): Release media devices and memory resources after the call end + [#15992](https://github.com/nextcloud/spreed/issues/15992) +- fix(call): Adjust call recording layout + [#16016](https://github.com/nextcloud/spreed/pull/16016) + +## 22.0.0-rc.3 – 2025-09-18 +### Fixed +- fix(call): Correctly sync media devices with OS sound settings + [#15900](https://github.com/nextcloud/spreed/pull/15900) + [#15972](https://github.com/nextcloud/spreed/pull/15972) +- fix(chat): Validate file name when creating from template instead of failing afterwards + [#15920](https://github.com/nextcloud/spreed/issues/15920) +- fix(threads): Post shared files in the opened thread + [#15938](https://github.com/nextcloud/spreed/pull/15938) +- fix(threads): Count shared files as thread replies and last message + [#15946](https://github.com/nextcloud/spreed/pull/15946) + +## 22.0.0-rc.2 – 2025-09-11 +### Fixed +- fix(chat): send messages with reduced conversation data available + [#15836](https://github.com/nextcloud/spreed/pull/15836) +- fix(call): restore participant videoframe after sharing a screen + [#15853](https://github.com/nextcloud/spreed/pull/15853) +- fix(threads): navigate to thread messages from search results + [#15858](https://github.com/nextcloud/spreed/pull/15858) +- fix(chat): forward thread messages to other conversations + [#15866](https://github.com/nextcloud/spreed/pull/15866) + +## 22.0.0-rc.1 – 2025-09-04 +### Added +- feat(hosted-hpb): Support setting the TURN and STUN server if included + [#15700](https://github.com/nextcloud/spreed/issues/15700) +- feat(assistant): Use new assistant theming + [#15773](https://github.com/nextcloud/spreed/issues/15773) + +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(threads): Allow renaming a thread + [#15779](https://github.com/nextcloud/spreed/issues/15779) +- fix(threads): Hide ignored threads from "Followed threads" list + [#15781](https://github.com/nextcloud/spreed/issues/15781) +- fix(threads): Don't create threads without a title + [#15790](https://github.com/nextcloud/spreed/issues/15790) +- fix(threads): Show temporary message as a thread already + [#15800](https://github.com/nextcloud/spreed/issues/15800) +- fix(calls): Scroll chat to bottom when joining a call + [#15774](https://github.com/nextcloud/spreed/issues/15774) + +## 22.0.0-beta.2 – 2025-08-29 +### Added +- feat(calls): Implement live-transcriptions when the ExApp is available + [#15696](https://github.com/nextcloud/spreed/issues/15696) +- feat(dashboard): Improve empty content view of the dashboard sections + [#15697](https://github.com/nextcloud/spreed/issues/15697) + +### Changed +- Update dependencies +- Update translations + +### Fixed +- fix(UI): Further design adjustments to outlined icons +- fix(chat): Many improvements for threads + [#15616](https://github.com/nextcloud/spreed/issues/15616) + [#15703](https://github.com/nextcloud/spreed/issues/15703) + [#15704](https://github.com/nextcloud/spreed/issues/15704) + [#15722](https://github.com/nextcloud/spreed/issues/15722) + [#15735](https://github.com/nextcloud/spreed/issues/15735) + +## 22.0.0-beta.1 – 2025-08-21 +### Added +- Implement threads feature + [#15313](https://github.com/nextcloud/spreed/issues/15313) +- Implement 'Busy' status in calls + [#15465](https://github.com/nextcloud/spreed/issues/15465) +- Update call interface design + [#15025](https://github.com/nextcloud/spreed/issues/15025) + +### Changed +- Migrate app to Vue3 + [#9448](https://github.com/nextcloud/spreed/issues/9448) +- Update dependencies +- Update translations +- Require Nextcloud 32 / Hub 25 Autumn + +### Fixed +- Improve chat history browsing performance + [#6046](https://github.com/nextcloud/spreed/issues/6046) + diff --git a/docs/changelogs/changelog-3.md b/docs/changelogs/changelog-3.md new file mode 100644 index 0000000..a84b146 --- /dev/null +++ b/docs/changelogs/changelog-3.md @@ -0,0 +1,217 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 3.2.8 – 2019-01-30 +### Fixed +- Fix mentions when adding multiple directly after each other + [#1394](https://github.com/nextcloud/spreed/pull/1394) +- Load more messages after loading the first batch when entering a room + [#1403](https://github.com/nextcloud/spreed/pull/1403) + +## 3.2.7 – 2018-12-11 +### Fixed +- Fix screensharing in Chrome 71+ and other Chrome based browsers + [#1369](https://github.com/nextcloud/spreed/pull/1369) +- Send initial screensharing stream to participants that don't publish video + [#1372](https://github.com/nextcloud/spreed/pull/1372) + +## 3.2.6 – 2018-09-20 +### Fixed +- Fix turn credential generation + [#1203](https://github.com/nextcloud/spreed/pull/1203) +- Fix several inconsistencies with the internal api + [#1202](https://github.com/nextcloud/spreed/pull/1202) + [#1201](https://github.com/nextcloud/spreed/pull/1201) + [#1200](https://github.com/nextcloud/spreed/pull/1200) + +## 3.2.5 – 2018-07-23 +### Fixed +- Fix handling of malicious usernames while autocompleting in chat + +## 3.2.4 – 2018-07-12 +### Added +- Allow external signaling servers to integrate a MCU + [#398](https://github.com/nextcloud/spreed/pull/398) + +### Fixed +- Support chat with a standalone signaling servers + [#890](https://github.com/nextcloud/spreed/pull/890) + [#887](https://github.com/nextcloud/spreed/pull/887) + +## 3.2.3 – 2018-07-11 +### Changed +- Only paste the content of HTML into the chat input without the actual HTML + [#1018](https://github.com/nextcloud/spreed/pull/1018) + +### Fixed +- Fixes for standalone signaling server + [#910](https://github.com/nextcloud/spreed/pull/910) +- Name not shown for participants without audio and video + [#982](https://github.com/nextcloud/spreed/pull/982) +- Correctly timeout users when they are chatting/calling and got disconnected + [#935](https://github.com/nextcloud/spreed/pull/935) +- Multiple layout fixes + +## 3.2.2 – 2018-06-06 +### Added +- Add toggle to show and hide video from other participants + [#937](https://github.com/nextcloud/spreed/pull/937) + +### Changed +- Activities and Notifications text (Calls->Conversations) + [#919](https://github.com/nextcloud/spreed/pull/919) + +### Fixed +- Send call notifications to every room participant that is not in the call + [#926](https://github.com/nextcloud/spreed/pull/926) +- Mark messages directly as read when waiting for new messages + [#936](https://github.com/nextcloud/spreed/pull/936) +- Fix tab header icons not shown + [#929](https://github.com/nextcloud/spreed/pull/929) +- Fix room and participants menu buttons + [#934](https://github.com/nextcloud/spreed/pull/934) + [#941](https://github.com/nextcloud/spreed/pull/941) +- Fix local audio and video not disabled when not available + [#938](https://github.com/nextcloud/spreed/pull/938) +- Fix "Add participant" shown to normal participants + [#939](https://github.com/nextcloud/spreed/pull/939) +- Fix adding the same participant several times in a row + [#940](https://github.com/nextcloud/spreed/pull/940) + + +## 3.2.1 – 2018-05-11 +### Added +- Standalone signaling server now supports the 3.2 changes + [#864](https://github.com/nextcloud/spreed/pull/864) + [#869](https://github.com/nextcloud/spreed/pull/869) + +### Fixed +- Only join the room after media permission request was answered + [#854](https://github.com/nextcloud/spreed/pull/854) +- Do not reload the participant everytime a guest sends a chat message + [#866](https://github.com/nextcloud/spreed/pull/866) +- Make sure the web UI still works after you left the current conversation or call + [#871](https://github.com/nextcloud/spreed/pull/871) + [#872](https://github.com/nextcloud/spreed/pull/872) + [#874](https://github.com/nextcloud/spreed/pull/874) +- Allow to scroll on long participant lists again + [#896](https://github.com/nextcloud/spreed/pull/896) +- Do not throw an error when starting a call in a conversation without any chat message + [#861](https://github.com/nextcloud/spreed/pull/861) +- Enable media controls when media is approved on a second request + [#861](https://github.com/nextcloud/spreed/pull/861) +- Limit the unread message counter to 99+ + [#845](https://github.com/nextcloud/spreed/pull/845) + + +## 3.2.0 – 2018-05-03 +### Added +- Shortcuts have been added when a call is active: (m)ute, (v)ideo, (f)ullscreen, (c)hat and (p)articipant list + [#730](https://github.com/nextcloud/spreed/pull/730) + [#750](https://github.com/nextcloud/spreed/pull/750) +- Allow users to chat in multiple tabs in multiple chats at the same time + [#748](https://github.com/nextcloud/spreed/pull/748) +- Guest names are now handled better in chat and the participant list + [#733](https://github.com/nextcloud/spreed/pull/733) +- Users which are participanting in a call now have a video icon in the participant list + [#777](https://github.com/nextcloud/spreed/pull/777) +- Unread chat message count is now displayed in the room list + [#806](https://github.com/nextcloud/spreed/pull/806) + [#824](https://github.com/nextcloud/spreed/pull/824) + +### Changed +- It is now possible to join a call without camera and/or microphone + [#758](https://github.com/nextcloud/spreed/pull/758) +- Chat does now not require Media permissions anymore + [#711](https://github.com/nextcloud/spreed/pull/711) +- Leaving a call will free up the Media permissions + [#735](https://github.com/nextcloud/spreed/pull/735) +- Participants can now be `@mentioned` in the chat by starting to type `@` followed by the name of the user + [#805](https://github.com/nextcloud/spreed/pull/805) + [#812](https://github.com/nextcloud/spreed/pull/812) + [#813](https://github.com/nextcloud/spreed/pull/813) + +### Fixed +- Correctly catch the input on the chat in firefox (instead of writing to the placeholder) + [#737](https://github.com/nextcloud/spreed/pull/737) +- Keep scrolling position when switching from chat to call or back + [#838](https://github.com/nextcloud/spreed/pull/838) +- Delete rooms when the last logged in user leaves + [#727](https://github.com/nextcloud/spreed/pull/727) +- Correctly update chat UI when leaving current room + [#743](https://github.com/nextcloud/spreed/pull/743) +- Various layout fixes with videos and screensharing + [#702](https://github.com/nextcloud/spreed/pull/702) + [#712](https://github.com/nextcloud/spreed/pull/712) + [#713](https://github.com/nextcloud/spreed/pull/713) +- Fix issues with users that have a numerical name or id + [#694](https://github.com/nextcloud/spreed/pull/694) +- Fix contacts menu entry when no user was found + [#686](https://github.com/nextcloud/spreed/pull/686) + + +## 3.1.0 – 2018-02-14 +### Added +- Finish support for go-based external signaling backend + [#492](https://github.com/nextcloud/spreed/pull/492) + +### Changed +- Make capabilities and signaling settings available for guests + [#644](https://github.com/nextcloud/spreed/pull/644) [#654](https://github.com/nextcloud/spreed/pull/654) +- Use the search name as room name when creating a new room + [#592](https://github.com/nextcloud/spreed/pull/592) +- Make links in chat clickable + [#579](https://github.com/nextcloud/spreed/pull/579) + +### Fixed +- Fix screensharing layout for guests + [#611](https://github.com/nextcloud/spreed/pull/611) +- Correctly remember guest names when a guest is rejoining an existing call + [#593](https://github.com/nextcloud/spreed/pull/593) +- Better date time divider in chat view + [#591](https://github.com/nextcloud/spreed/pull/591) + +## 3.0.1 – 2018-01-12 +### Added +- Added capabilities so the mobile files apps can link to the mobile talk apps + [#585](https://github.com/nextcloud/spreed/pull/585) + +### Fixed +- Fixed issues when updating with Postgres and versions before 2.0.0 + [#584](https://github.com/nextcloud/spreed/pull/584) + +## 3.0.0 – 2018-01-10 +### Added + - Added simple text chat + [#429](https://github.com/nextcloud/spreed/pull/429) + - Added activities for calls: "You had a call with ABC (Duration: 15:20)" + [#438](https://github.com/nextcloud/spreed/pull/438) + - Introduced different participant permission levels: owner, moderator and user + [#353](https://github.com/nextcloud/spreed/pull/353) + - Added support for room passwords on public shared rooms + [#402](https://github.com/nextcloud/spreed/pull/402) + - Added option to run an external signaling backend + [#366](https://github.com/nextcloud/spreed/pull/366) + +### Changed + - Rename the app to "Talk" since it now contains chat, voice and video calls + [#444](https://github.com/nextcloud/spreed/pull/444) + - Moved admin settings to separate category and allowed to configure multiple STUN and TURN servers + [#427](https://github.com/nextcloud/spreed/pull/427) + - Moved signaling from EventSource to long polling for compatibility with HTTP2 + [#363](https://github.com/nextcloud/spreed/pull/363) + - Moved room API to OCS so apps and 3rd party tools can use it + [#342](https://github.com/nextcloud/spreed/pull/342) + +### Fixed + - Fixed compatibility with Postgres + [#537](https://github.com/nextcloud/spreed/pull/537) + - Fixed compatibility with Oracle + [#371](https://github.com/nextcloud/spreed/pull/371) + - Compatibility with Nextcloud 13 + + diff --git a/docs/changelogs/changelog-4.md b/docs/changelogs/changelog-4.md new file mode 100644 index 0000000..3a8a641 --- /dev/null +++ b/docs/changelogs/changelog-4.md @@ -0,0 +1,87 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 4.0.4 – 2019-04-11 +### Fixed +- Enable "Plan B" for chrome/chromium for better MCU support + [#1614](https://github.com/nextcloud/spreed/pull/1614) +- Delay signaling messages when the socket is not yet opened + [#1552](https://github.com/nextcloud/spreed/pull/1552) + +## 4.0.3 – 2019-01-30 +### Fixed +- Do not show room names when the user is not part of it + [#1498](https://github.com/nextcloud/spreed/pull/1498) +- Fix mentions when adding multiple directly after each other + [#1393](https://github.com/nextcloud/spreed/pull/1393) +- Load more messages after loading the first batch when entering a room + [#1402](https://github.com/nextcloud/spreed/pull/1402) +- Pass empty list of session ids when notifying about removed guests to avoid errors + [#1414](https://github.com/nextcloud/spreed/pull/1414) + +## 4.0.2 – 2018-12-11 +### Fixed +- Fix screensharing in Chrome 71+ and other Chrome based browsers + [#1369](https://github.com/nextcloud/spreed/pull/1369) +- Fix broken chat when a file that was shared into a room is deleted + [#1352](https://github.com/nextcloud/spreed/pull/1352) +- Send initial screensharing stream to participants that don't publish video + [#1372](https://github.com/nextcloud/spreed/pull/1372) + +## 4.0.1 – 2018-11-15 +### Added +- Add an option to test the TURN configuration in the admin settings + [#1294](https://github.com/nextcloud/spreed/pull/1294) + +### Changed +- Improve the notifications when a share password is requested + [#1296](https://github.com/nextcloud/spreed/pull/1296) +- Do not show an error when a file is shared a second time into a conversation + [#1295](https://github.com/nextcloud/spreed/pull/1295) + +### Fixed +- Custom Signaling, STUN and TURN configurations are not loaded for the user requesting the password for a share + [#1297](https://github.com/nextcloud/spreed/pull/1297) +- Fix position of the contacts menu when clicking on the avatar of a chat author + [#1293](https://github.com/nextcloud/spreed/pull/1293) +- Avatars in messages/mentions by guests show the guest avatar instead of the user + [#1292](https://github.com/nextcloud/spreed/pull/1292) +- Information about user state in a call is bugged + [#1291](https://github.com/nextcloud/spreed/pull/1291) +- Wrong conversation name of password requests in the details sidebar + [#1290](https://github.com/nextcloud/spreed/pull/1290) +- Fix rendering, reloading and interaction with the participant list + [#1222](https://github.com/nextcloud/spreed/pull/1222) + [#1289](https://github.com/nextcloud/spreed/pull/1289) + +## 4.0.0 – 2018-09-06 +### Added +- Video verification for password protected email shares + [#1123](https://github.com/nextcloud/spreed/pull/1123) + [#1049](https://github.com/nextcloud/spreed/pull/1049) +- Add a file picker to the chat to share files and folders into a chat room + [#1151](https://github.com/nextcloud/spreed/pull/1151) + [#1050](https://github.com/nextcloud/spreed/pull/1050) +- Log the activity of a conversation in the chat (user added/removed, call happened, …) + [#1067](https://github.com/nextcloud/spreed/pull/1067) +- Allow to favor conversations so they are pinned to the top of the list + [#1025](https://github.com/nextcloud/spreed/pull/1025) + +### Changed +- Mentions in the chat now show the avatar of the user and highlight yourself more prominent + [#1142](https://github.com/nextcloud/spreed/pull/1142) +- Messages in one2one chats now always send a notification + [#1029](https://github.com/nextcloud/spreed/pull/1029) +- Conversations are now sorted by last activity rather then your last visit + [#1061](https://github.com/nextcloud/spreed/pull/1061) + +### Fixed +- Fix turn credentials generation + [#1176](https://github.com/nextcloud/spreed/pull/1176) +- Do not turn all `@…` strings into a mention + [#1118](https://github.com/nextcloud/spreed/pull/1118) + diff --git a/docs/changelogs/changelog-5.md b/docs/changelogs/changelog-5.md new file mode 100644 index 0000000..756434a --- /dev/null +++ b/docs/changelogs/changelog-5.md @@ -0,0 +1,120 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 5.0.4 – 2019-06-06 +### Fixed +- Fix message list not reloaded after switching tabs in the sidebar + [#1867](https://github.com/nextcloud/spreed/pull/1867) +- Fix multiple issues related to screensharing + [#1762](https://github.com/nextcloud/spreed/pull/1762) + [#1754](https://github.com/nextcloud/spreed/pull/1754) + [#1746](https://github.com/nextcloud/spreed/pull/1746) + +## 5.0.3 – 2019-04-11 +### Changed +- Remove some conversation informations for non-participants + [#1518](https://github.com/nextcloud/spreed/pull/1518) + +### Fixed +- Fix duplicated call summary message when multiple people leave at the same time + [#1599](https://github.com/nextcloud/spreed/pull/1599) +- Allow multiline text insertion in chrome-based browsers + [#1579](https://github.com/nextcloud/spreed/pull/1579) +- Fix multiple race-conditions that could interrupt connections, end calls or prevent connections between single participants + [#1523](https://github.com/nextcloud/spreed/pull/1523) + [#1542](https://github.com/nextcloud/spreed/pull/1542) + [#1543](https://github.com/nextcloud/spreed/pull/1543) +- Enable "Plan B" for chrome/chromium for better MCU support + [#1613](https://github.com/nextcloud/spreed/pull/1613) +- Delay signaling messages when the socket is not yet opened + [#1551](https://github.com/nextcloud/spreed/pull/1551) +- Correctly readd the default STUN server on empty values + [#1501](https://github.com/nextcloud/spreed/pull/1501) + +## 5.0.2 – 2019-01-30 +### Changed +- Show autocompletion as soon as "@" is typed + [#1483](https://github.com/nextcloud/spreed/pull/1483) + +### Fixed +- Fix parse error on PHP 7.0 + [#1493](https://github.com/nextcloud/spreed/pull/1493) +- Add global Content Security Policy for signaling servers + [#1462](https://github.com/nextcloud/spreed/pull/1462) +- Shared file messages show the name of the file as seen by the owner instead of by the current user + [#1487](https://github.com/nextcloud/spreed/pull/1487) +- Multiple fixes for dark-theme + [#1494](https://github.com/nextcloud/spreed/pull/1494) + [#1472](https://github.com/nextcloud/spreed/pull/1472) + [#1486](https://github.com/nextcloud/spreed/pull/1486) +- Do not show room names when the user is not part of it + [#1497](https://github.com/nextcloud/spreed/pull/1497) + [#1495](https://github.com/nextcloud/spreed/pull/1495) +- Fix page title not updated when room name is updated + [#1468](https://github.com/nextcloud/spreed/pull/1468) +- Reduce the number of loaded JS and CSS files + [#1491](https://github.com/nextcloud/spreed/pull/1491) +- Always use white icons for conversation images (also in dark-theme) + [#1463](https://github.com/nextcloud/spreed/pull/1463) +- Fix submit button in public share authentication page + [#1481](https://github.com/nextcloud/spreed/pull/1481) + +## 5.0.1 – 2019-01-23 +### Changed +- Add a hook so the external signaling can set participant data + [#1418](https://github.com/nextcloud/spreed/pull/1418) + +### Fixed +- Fix dark theme for better accessibility + [#1451](https://github.com/nextcloud/spreed/pull/1451) +- Correctly mark notifications as resolved when you join the room directly + [#1436](https://github.com/nextcloud/spreed/pull/1436) +- Fix history back and forth in Talk and the Files app + [#1456](https://github.com/nextcloud/spreed/pull/1456) +- Favorite icon has grey avatar shadow + [#1419](https://github.com/nextcloud/spreed/pull/1419) + +## 5.0.0 – 2018-12-14 +### Added +- Chat and call option in the Files app sidebar + [#1323](https://github.com/nextcloud/spreed/pull/1323) + [#1312](https://github.com/nextcloud/spreed/pull/1312) +- Users can now select for each conversation whether they want to be notified: always, on mention or never + [#1230](https://github.com/nextcloud/spreed/pull/1230) +- Password protection via Talk now also works for link shares + [#1273](https://github.com/nextcloud/spreed/pull/1273) +- Guests can now be promoted to moderators in on going calls + [#1078](https://github.com/nextcloud/spreed/pull/1078) +- Groups can now be selected when adding participants and will add all members as participants + [#1268](https://github.com/nextcloud/spreed/pull/1268) +- Email addresses can now be added to conversations which will make the room public and send the link via email + [#1090](https://github.com/nextcloud/spreed/pull/1090) +- TURN server settings can now be tested in the admin settings + [#1177](https://github.com/nextcloud/spreed/pull/1177) + +### Changed +- Improve performance of chats with multiple hundred messages + [#1271](https://github.com/nextcloud/spreed/pull/1271) + +### Fixed +- Fix screensharing in Chrome 71+ and other Chrome based browsers + [#1369](https://github.com/nextcloud/spreed/pull/1369) +- Fix mentions for users with spaces in their user id + [#1254](https://github.com/nextcloud/spreed/pull/1254) +- Fix avatars in messages by guests + [#1240](https://github.com/nextcloud/spreed/pull/1240) +- Gracefully handle messages with more than 1000 characters + [#1229](https://github.com/nextcloud/spreed/pull/1229) +- Stop signaling when leaving a conversation + [#1330](https://github.com/nextcloud/spreed/pull/1330) +- Fix scroll position when the chat is moved to the sidebar + [#1302](https://github.com/nextcloud/spreed/pull/1302) +- When a files is shared a second time into a chat no error is displayed + [#1196](https://github.com/nextcloud/spreed/pull/1196) +- Send initial screensharing stream to participants that don't publish video + [#1372](https://github.com/nextcloud/spreed/pull/1372) + diff --git a/docs/changelogs/changelog-6.md b/docs/changelogs/changelog-6.md new file mode 100644 index 0000000..064e37a --- /dev/null +++ b/docs/changelogs/changelog-6.md @@ -0,0 +1,122 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 6.0.4 – 2019-07-31 +### Fixed +- Audio missing in chromium when enabling video until a video is received + [#2058](https://github.com/nextcloud/spreed/pull/2058) +- Correctly handle password public conversations in projects + [#2057](https://github.com/nextcloud/spreed/pull/2057) +- Update the nextcloud-vue-collections library for better projects handling + [#2054](https://github.com/nextcloud/spreed/pull/2054) +- Fix pending reconnections after WebSocket is reconnected + [#2033](https://github.com/nextcloud/spreed/pull/2033) + +## 6.0.3 – 2019-07-22 +### Changed +- Chat messages can now be longer than 1.000 characters + [#1901](https://github.com/nextcloud/spreed/pull/1901) +- Users matching the autocomplete at the beginning of their name are now sorted to the top + [#1968](https://github.com/nextcloud/spreed/pull/1968) +- Only strings starting with http:// or https:// are now made clickable as links + [#1965](https://github.com/nextcloud/spreed/pull/1965) + +### Fixed +- Fix layout issues of the chat on the share authentication page + [#1901](https://github.com/nextcloud/spreed/pull/1901) +- Fix issues with calls when a user logs out while being in a call + [#1947](https://github.com/nextcloud/spreed/pull/1947) +- Fix a problem when joining a public conversation as a non-invited logged-in user + [#1914](https://github.com/nextcloud/spreed/pull/1914) +- Fix missing tooltip with full date on timestamp for the first message of a user in a grouped block + [#1914](https://github.com/nextcloud/spreed/pull/1914) +- Commands based on the Symfony Command component can now provide a useful help message + [#1901](https://github.com/nextcloud/spreed/pull/1901) + +## 6.0.2 – 2019-06-06 +### Fixed +- Fix message list not reloaded after switching tabs in the sidebar + [#1867](https://github.com/nextcloud/spreed/pull/1867) +- Show warning when browser silently fails to get user media + [#1874](https://github.com/nextcloud/spreed/pull/1874) +- Fix view for participants without streams + [#1873](https://github.com/nextcloud/spreed/pull/1873) +- Fix forced reconnection with external signaling + [#1850](https://github.com/nextcloud/spreed/pull/1850) +- Do not send volume datachannel message + [#1849](https://github.com/nextcloud/spreed/pull/1849) + + +## 6.0.1 – 2019-05-16 +### Changed +- Do not send black video by default in bigger calls + [#1830](https://github.com/nextcloud/spreed/pull/1830) + [#1827](https://github.com/nextcloud/spreed/pull/1827) +- Improve the grouping of chat messages so more fit on the screen + [#1826](https://github.com/nextcloud/spreed/pull/1826) + +### Fixed +- Fix password protected conversations + [#1775](https://github.com/nextcloud/spreed/pull/1775) +- Fix chat not automatically loading new messages after a command was used with the external signaling server + [#1808](https://github.com/nextcloud/spreed/pull/1808) +- Fix screensharing for users not in the call + [#1753](https://github.com/nextcloud/spreed/pull/1753) +- Conversation list does not update with read/unread status using the external signaling server + [#1431](https://github.com/nextcloud/spreed/pull/1431) + +## 6.0.0 – 2019-04-25 +### Added +- Administrators can now define commands which can be used in the chat. See [the commands documentation](https://nextcloud-talk.readthedocs.io/en/latest/commands/) for more information. You can install some sample commands via the console. + [#1453](https://github.com/nextcloud/spreed/pull/1453) + [#1662](https://github.com/nextcloud/spreed/pull/1662) +- There is now a "Talk updates" conversation which will help the user to discover some features + [#1616](https://github.com/nextcloud/spreed/pull/1616) + [#1662](https://github.com/nextcloud/spreed/pull/1662) +- `@all` mentions all participants in the conversation + [#1531](https://github.com/nextcloud/spreed/pull/1531) +- Allow to get the last sent message again with `arrow-up` + [#1520](https://github.com/nextcloud/spreed/pull/1520) +- Conversations can be added to the new Nextcloud 16 projects + [#1611](https://github.com/nextcloud/spreed/pull/1611) + [#1663](https://github.com/nextcloud/spreed/pull/1663) +- Conversations associated to files now have a link to the file + [#1387](https://github.com/nextcloud/spreed/pull/1387) +- The Talk app can now be restricted to a group of users in the Talk administration settings + [#1585](https://github.com/nextcloud/spreed/pull/1585) +- Show a warning when a call has many participants and no external signaling server is used + [#1649](https://github.com/nextcloud/spreed/pull/1649) +- Added an easy-to-find option to copy the link of a conversation + [#1670](https://github.com/nextcloud/spreed/pull/1670) + +### Changed +- One-to-one conversations are now persistent and can not be turned into group conversations by accident. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. + [#1591](https://github.com/nextcloud/spreed/pull/1591) + [#1588](https://github.com/nextcloud/spreed/pull/1588) +- Conversations must have a name now + [#1567](https://github.com/nextcloud/spreed/pull/1567) + +### Fixed +- Fix multiple race-conditions that could interrupt connections, end calls or prevent connections between single participants + [#1522](https://github.com/nextcloud/spreed/pull/1522) + [#1533](https://github.com/nextcloud/spreed/pull/1533) + [#1534](https://github.com/nextcloud/spreed/pull/1534) + [#1549](https://github.com/nextcloud/spreed/pull/1549) +- Use better icons when a file without preview or a folder is shared into the chat + [#1601](https://github.com/nextcloud/spreed/pull/1601) +- Prevent issues when two participants share their screens + [#1571](https://github.com/nextcloud/spreed/pull/1571) +- Correctly remember last media state when reloading in a call + [#1548](https://github.com/nextcloud/spreed/pull/1548) + [#5174](https://github.com/nextcloud/spreed/pull/1574) +- Do not show conversation names and other details if the user is not a participant + [#1426](https://github.com/nextcloud/spreed/pull/1426) + [#1496](https://github.com/nextcloud/spreed/pull/1496) + [#1502](https://github.com/nextcloud/spreed/pull/1502) +- Fixed an issue when a link was posted into the chat at the end of a line + [#1666](https://github.com/nextcloud/spreed/pull/1666) + diff --git a/docs/changelogs/changelog-7.md b/docs/changelogs/changelog-7.md new file mode 100644 index 0000000..c4df61f --- /dev/null +++ b/docs/changelogs/changelog-7.md @@ -0,0 +1,96 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 7.0.4 – 2020-07-21 +### Added +- Reduce CPU usage when doing a video call + [#3416](https://github.com/nextcloud/spreed/pull/3416) + +### Changed +- Improve default push notification text for upcoming iOS 13 SDK changes in the iOS mobile app + [#3849](https://github.com/nextcloud/spreed/pull/3849) + +### Fixed +- Fix a failure on logout when an active session was removed from a conversation already + [#3871](https://github.com/nextcloud/spreed/pull/3871) +- Fix an error when the user list is used to fill a missing conversation name + [#3629](https://github.com/nextcloud/spreed/pull/3629) +- Fix an error when the parent of a reply was the first item in the message list + [#3588](https://github.com/nextcloud/spreed/pull/3588) + +## 7.0.2 – 2019-11-12 +### Changed +- Improve the settings for Talk and extend the explanations + [#2342](https://github.com/nextcloud/spreed/pull/2342) + +### Fixed +- Do not join file conversations automatically to avoid empty conversations + [#2423](https://github.com/nextcloud/spreed/pull/2423) + [#2347](https://github.com/nextcloud/spreed/pull/2347) +- Do not load the Talk sidebar on public share page for folders + [#2340](https://github.com/nextcloud/spreed/pull/2340) + +## 7.0.1 – 2019-10-17 +### Fixed +- Fix position of the promoted and the current participant in calls + [#2320](https://github.com/nextcloud/spreed/pull/2320) +- Add a hint for the start time format of the lobby timer + [#2267](https://github.com/nextcloud/spreed/pull/2267) +- Fix "MessageTooLongException" when mentioning someone in a long comment + [#2268](https://github.com/nextcloud/spreed/pull/2268) +- Correctly set the unread counter when readding a user to a one-to-one conversation + [#2259](https://github.com/nextcloud/spreed/pull/2259) + +## 7.0.0 – 2019-09-26 +### Added +- Added a simple Lobby: moderators can join and prepare a call/meeting while users and guests can not join yet + [#1926](https://github.com/nextcloud/spreed/pull/1926) +- Add the file call functionality to the public sharing page + [#2107](https://github.com/nextcloud/spreed/pull/2107) +- Allow to mention guest users + [#1974](https://github.com/nextcloud/spreed/pull/1974) +- Added a voice level indicator and notify the user when they speak while they are muted + [#2016](https://github.com/nextcloud/spreed/pull/2016) +- Change the read marker to work based on the message ID and allow clients to set it manually + [#1214](https://github.com/nextcloud/spreed/pull/1214) +- Prepare the backend for replies to messages so the clients can implement it + [#2000](https://github.com/nextcloud/spreed/pull/2000) +- Allow to prevent guests from starting a call + [#2204](https://github.com/nextcloud/spreed/pull/2204) +- Update SimpleWebRTC to the latest version + +### Changed +- Load newest chat messages first on joining a conversation + [#2206](https://github.com/nextcloud/spreed/pull/2206) +- You can now escape commands to show them to your chat partners by prepending a second slash (e.g. //help) + [#1919](https://github.com/nextcloud/spreed/pull/1919) +- One-to-one conversations are now only deleted if both users leave the conversation + [#1921](https://github.com/nextcloud/spreed/pull/1921) +- Use the guests name in notifications instead of the anonymous "A guest" string + [#2104](https://github.com/nextcloud/spreed/pull/2104) + +### Fixed +- Allow to have file based calls in folders mounted by the groupfolders app + [#2012](https://github.com/nextcloud/spreed/pull/2012) +- Only list participants who joined the call in the call summary + [#2012](https://github.com/nextcloud/spreed/pull/2012) +- Participants in the participant list now offer the contacts menu + [#1822](https://github.com/nextcloud/spreed/pull/1822) +- Better UI feedback while moderator actions are performed + [#2117](https://github.com/nextcloud/spreed/pull/2117) +- Make sure the external signaling server is informed about the new state changes (read-only, lobby, etc.) + [#2103](https://github.com/nextcloud/spreed/pull/2103) +- Show a call summary for calls when there was no user + [#2177](https://github.com/nextcloud/spreed/pull/2177) +- Allow to mention the conversation by its name additionally to "all" + [#2198](https://github.com/nextcloud/spreed/pull/2198) +- Fix mentions with users that have a numeric only ID + [#2173](https://github.com/nextcloud/spreed/pull/2173) +- Enable camera and microphone access in the Nextcloud 17 feature policy + [#2073](https://github.com/nextcloud/spreed/pull/2073) +- Multiple Nextcloud 17 compatibility fixes + diff --git a/docs/changelogs/changelog-8.md b/docs/changelogs/changelog-8.md new file mode 100644 index 0000000..fb6e3e7 --- /dev/null +++ b/docs/changelogs/changelog-8.md @@ -0,0 +1,280 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 8.0.15 – 2021-01-08 +### Fixed +- Don't remove a chat when a self-joined user leaves + [#4904](https://github.com/nextcloud/spreed/pull/4904) + +## 8.0.14 – 2020-12-18 +### Fixed +- Fix potentially multiple guests joining in a password request conversation + [#4796](https://github.com/nextcloud/spreed/pull/4796) + +## 8.0.13 – 2020-11-17 +### Fixed +- Reduce the load when mounting many shares + [#4511](https://github.com/nextcloud/spreed/pull/4511) +- Fix handling of unavailable commands + [#4579](https://github.com/nextcloud/spreed/pull/4579) +- Correctly delete a conversation when the last moderator leaves + [#4611](https://github.com/nextcloud/spreed/pull/4611) + +## 8.0.12 – 2020-10-23 +### Fixed +- Remove pulse animation from call button to reduce CPU load in chrome-based browsers + [#4303](https://github.com/nextcloud/spreed/pull/4303) +- Fix minimum length calculation of the call token + [#4371](https://github.com/nextcloud/spreed/pull/4371) +- Fix duplicate session issue in files sidebar + [#4428](https://github.com/nextcloud/spreed/pull/4428) + +## 8.0.11 – 2020-09-17 +### Fixed +- Internet Explorer 11 unable to load the interface + [#3983](https://github.com/nextcloud/spreed/pull/3983) +- Speaker promotion with newer Janus versions + [#3952](https://github.com/nextcloud/spreed/pull/3952) +- Prevent infinite loop when opening a data channel and retransmitting old messages + [#4070](https://github.com/nextcloud/spreed/pull/4070) +- Installation on Oracle fails + [#4130](https://github.com/nextcloud/spreed/pull/4130) +- Fix clientside memory leaks due to missing unsubscribe of events when destroying interface components + [#4149](https://github.com/nextcloud/spreed/pull/4149) + [#4161](https://github.com/nextcloud/spreed/pull/4161) + [#4163](https://github.com/nextcloud/spreed/pull/4163) + +## 8.0.10 – 2020-07-21 +### Added +- Warn the user when their connection or computer is busy and others might not be able to see or hear them correctly anymore. + [#3899](https://github.com/nextcloud/spreed/pull/3899) + +### Changed +- Improve default push notification text for upcoming iOS 13 SDK changes in the iOS mobile app + [#3848](https://github.com/nextcloud/spreed/pull/3848) + +### Fixed +- Always try to connect without camera in case it failed + [#3781](https://github.com/nextcloud/spreed/pull/3781) +- Update lib to parse links in chat messages to fix an issue with trailing spaces + [#3925](https://github.com/nextcloud/spreed/pull/3925) +- Remove automatic ping when getting chat messages via the web UI + [#3793](https://github.com/nextcloud/spreed/pull/3793) + +## 8.0.9 – 2020-05-13 +### Changed +- Reduce CPU usage when doing a video call + [#3414](https://github.com/nextcloud/spreed/pull/3414) +- Automatic scaling of video quality to allow bigger video calls to further reduce required CPU and bandwidth + [#3468](https://github.com/nextcloud/spreed/pull/3468) +- Notify users when talk was updated in the background and a reload is necessary + [#3373](https://github.com/nextcloud/spreed/pull/3373) +- Improve the layout of the video stripe when the videos don't fit anymore + [#3433](https://github.com/nextcloud/spreed/pull/3433) + +### Fixed +- Guest names not shown in video calls with the HPB + [#3502](https://github.com/nextcloud/spreed/pull/3502) +- Don't mark the tab "unread" for own messages and messages you read already + [#3378](https://github.com/nextcloud/spreed/pull/3378) +- Try harder to connect with microphone when camera is not readable + [#3494](https://github.com/nextcloud/spreed/pull/3494) +- Fix multiple issues when the connection was interrupted + [#3405](https://github.com/nextcloud/spreed/pull/3405) + [#3461](https://github.com/nextcloud/spreed/pull/3461) + [#3467](https://github.com/nextcloud/spreed/pull/3467) + [#3466](https://github.com/nextcloud/spreed/pull/3466) + [#3452](https://github.com/nextcloud/spreed/pull/3452) +- Fix a type error while pinging the sessions with the HPB + [#3375](https://github.com/nextcloud/spreed/pull/3375) + +## 8.0.8 – 2020-04-20 +### Changed +- Show a warning to users when they use an unsupported browser already when chatting + [#3296](https://github.com/nextcloud/spreed/pull/3296) + +### Fixed +- Further performance improvements when interacting with participant sessions + [#3345](https://github.com/nextcloud/spreed/pull/3345) + [#3322](https://github.com/nextcloud/spreed/pull/3322) +- Show a warning and error in case the signaling connection is failing + [#3288](https://github.com/nextcloud/spreed/pull/3288) +- Fix missing header element to make Chrome aware of the screenshare extension + [#3281](https://github.com/nextcloud/spreed/pull/3281) +- Don't error when a guest tries to open the Talk app without a conversation token + [#3344](https://github.com/nextcloud/spreed/pull/3344) +- Removed unnecessary double-quote argument parameter from commands + [#3362](https://github.com/nextcloud/spreed/pull/3362) + +## 8.0.7 – 2020-04-02 +### Fixed +- Calls in files and public sharing sidebar don't work + [#3241](https://github.com/nextcloud/spreed/pull/3241) +- Add another missing index to the participants table to reduce the load + [#3239](https://github.com/nextcloud/spreed/pull/3239) +- Fix blank page on Internet Explorer 11 + [#3240](https://github.com/nextcloud/spreed/pull/3240) + +## 8.0.6 – 2020-04-01 +### Added +- Remember the video/audio setting per conversation + [#3205](https://github.com/nextcloud/spreed/pull/3205) +- Added the join button to the "Alice started a call" message to make it easier to join + [#3135](https://github.com/nextcloud/spreed/pull/3135) +- Added a warning when no TURN server is configured but no ICE connection could be established + [#3162](https://github.com/nextcloud/spreed/pull/3162) +- Added more aria labels to support screenreaders + [#3215](https://github.com/nextcloud/spreed/pull/3215) +- **Tech Preview:** Added a setting to prefer H.264 video codec + [#3224](https://github.com/nextcloud/spreed/pull/3224) + +### Changed +- Allow guests to set their name while they are already in a call + [#3169](https://github.com/nextcloud/spreed/pull/3169) +- Automatically hide the left sidebar when in full screen in a call + [#3158](https://github.com/nextcloud/spreed/pull/3158) + +### Fixed +- Fix unnecessary high load when users update their room list (every 30 seconds) + [#3225](https://github.com/nextcloud/spreed/pull/3225) +- Fix videos being overlayed with the video/audio control icons + [#3149](https://github.com/nextcloud/spreed/pull/3149) +- Correctly load/hide the guest avatar based on the WebRTC connection state + [#3196](https://github.com/nextcloud/spreed/pull/3196) +- Stop signaling correctly when switching to another conversation + [#3200](https://github.com/nextcloud/spreed/pull/3200) +- Do not constantly try to reconnect to peers without any streams + [#3199](https://github.com/nextcloud/spreed/pull/3199) +- Do not retrigger an update of the participant list when it is already being updated + [#3202](https://github.com/nextcloud/spreed/pull/3202) +- Fix a problem when trying to set a password with question marks or hash sign + [#3145](https://github.com/nextcloud/spreed/pull/3145) +- Fix issues when a user or guest is being demoted from moderators while already being in a call with the lobby enabled with the external signaling server + [#3057](https://github.com/nextcloud/spreed/pull/3057) +- Fix issues with interrupted audio streams when closing the sidebar in the files app while having a call + [#3044](https://github.com/nextcloud/spreed/pull/3044) + +## 8.0.5 – 2020-03-03 +### Added +- Add a link to the file in the conversation info for file conversations + [#2974](https://github.com/nextcloud/spreed/pull/2974) + +### Fixed +- Fix copy and paste behaviour with WebKit based browsers + [#2982](https://github.com/nextcloud/spreed/pull/2982) +- Improve chat loading for guests to be fast again + [#3026](https://github.com/nextcloud/spreed/pull/3026) +- Improve reaction time to conversation status changes for guests + [#3038](https://github.com/nextcloud/spreed/pull/3038) +- Fix collision on (empty) tab id with systemtags app in the sidebar + [#2964](https://github.com/nextcloud/spreed/pull/2964) +- Focus the chat input in the sidebar when opening the chat tab + [#2975](https://github.com/nextcloud/spreed/pull/2975) +- Also end call state of conversation when the last user leaves, has a timeout or logs out directly + [#2952](https://github.com/nextcloud/spreed/pull/2952) + [#2984](https://github.com/nextcloud/spreed/pull/2984) +- Await response of "Leave call" before leaving the conversation + [#2951](https://github.com/nextcloud/spreed/pull/2951) +- Don't provide a default stun when the server has no internet connection + [#2982](https://github.com/nextcloud/spreed/pull/2982) + [#3028](https://github.com/nextcloud/spreed/pull/3028) +- Fix call notifications stating "You missed a call" with a lot of participants + [#2945](https://github.com/nextcloud/spreed/pull/2945) +- Only try to join and leave real conversations when opening the files sidebar + [#2977](https://github.com/nextcloud/spreed/pull/2977) + + +## 8.0.4 – 2020-02-11 +### Added +- Readd fullscreen option for the interface with f as a shortcut + [#2937](https://github.com/nextcloud/spreed/pull/2937) + +### Fixed +- Fix Files sidebar integration, public share page and video verification + [#2935](https://github.com/nextcloud/spreed/pull/2935) + +## 8.0.3 – 2020-02-10 +### Fixed +- Fix calls not working anymore due to error when handling signaling messages + [#2928](https://github.com/nextcloud/spreed/pull/2928) +- Do not show favorite and call icon overlapping each others + [#2927](https://github.com/nextcloud/spreed/pull/2927) +- Fix issues in the participants list when there are multiple guests + [#2929](https://github.com/nextcloud/spreed/pull/2929) +- Fix error in console when adding a conversation to favorites + [#2930](https://github.com/nextcloud/spreed/pull/2930) + +## 8.0.2 – 2020-02-07 +### Added +- Allow admins to select a default notification level for group conversations + [#2903](https://github.com/nextcloud/spreed/pull/2903) +- Add a red video icon to the conversation list when a call is in progress + [#2910](https://github.com/nextcloud/spreed/pull/2910) + +### Changed +- Make unread message counter and last message preview more responsive + [#2865](https://github.com/nextcloud/spreed/pull/2865) + [#2904](https://github.com/nextcloud/spreed/pull/2904) +- Further improve the dialog to create group conversations + [#2878](https://github.com/nextcloud/spreed/pull/2878) + +### Fixed +- Improve loading performance of chats + [#2901](https://github.com/nextcloud/spreed/pull/2901) +- Continue scrolling a conversation when new messages arrive while the tab is inactive + [#2901](https://github.com/nextcloud/spreed/pull/2901) +- Do not send last message again when hitting enter on an empty input field + [#2868](https://github.com/nextcloud/spreed/pull/2868) +- Fix flows to correctly send notifications on mentions + [#2867](https://github.com/nextcloud/spreed/pull/2867) +- Reduce server load when using autocomplete on chat mentions + [#2871](https://github.com/nextcloud/spreed/pull/2871) + +## 8.0.1 – 2020-01-27 +### Added +- Add details to "New in Talk 8" list + [#2812](https://github.com/nextcloud/spreed/pull/2812) +- Allow to "right click" > "Copy link address" on the conversations list again + [#2832](https://github.com/nextcloud/spreed/pull/2832) +- Add an indicator to the participant list if a user is in the call + [#2840](https://github.com/nextcloud/spreed/pull/2840) + +### Changed +- Require confirmation before deleting a conversation + [#2843](https://github.com/nextcloud/spreed/pull/2843) + +### Fixed +- Re-add missing shortcuts for turning on/off audio (m) and video (v) + [#2828](https://github.com/nextcloud/spreed/pull/2828) +- Fix visiting index.php/ links when rewrite is enabled + [#2833](https://github.com/nextcloud/spreed/pull/2833) +- Adding a circle does not correctly add all accepted members + [#2834](https://github.com/nextcloud/spreed/pull/2834) +- Correctly handle guest names in chats and calls when they are changed + [#2849](https://github.com/nextcloud/spreed/pull/2849) +- Contacts menu not redirecting to one-to-one conversations on "Talk to …" + [#2809](https://github.com/nextcloud/spreed/pull/2809) +- Increase tolerence for automatically show new messages and scroll to bottom + [#2821](https://github.com/nextcloud/spreed/pull/2821) + +## 8.0.0 – 2020-01-17 +### Added +- Recreation of the frontend in Vue.JS +- Allow to reply directly to messages +- Filter the conversations and participants list when searching +- Ask for confirmation when a user navigates away while being in a call +- Support for circles when creating a new conversation and adding participants +- Add a first version of Flow support + +### Changed +- Allow to write multiple chat messages in a row +- Improve the way how conversations are created +- Make single emojis bigger to improve readability + +### Fixed +- A lot of fixes, see [Github](https://github.com/nextcloud/spreed/milestone/27?closed=1) for a complete list + diff --git a/docs/changelogs/changelog-9.md b/docs/changelogs/changelog-9.md new file mode 100644 index 0000000..4f81c5d --- /dev/null +++ b/docs/changelogs/changelog-9.md @@ -0,0 +1,189 @@ + +# Changelog +All notable changes to this project will be documented in this file. + +## 9.0.10 – 2021-06-04 +### Fixed +- Regenerate session id after entering conversation password + [#5642](https://github.com/nextcloud/spreed/pull/5642) + +## 9.0.9 – 2021-02-22 +### Fixed +- Fix collaboration resource options not loading + [#5143](https://github.com/nextcloud/spreed/pull/5143) +- Fixed a bug that would prevent attachments going into the Talk/ folder + [#5080](https://github.com/nextcloud/spreed/pull/5080) + +## 9.0.8 – 2021-01-08 +### Fixed +- Don't remove a chat when a self-joined user leaves + [#4903](https://github.com/nextcloud/spreed/pull/4903) + +## 9.0.7 – 2020-12-18 +### Fixed +- Fix potentially multiple guests joining in a password request conversation + [#4797](https://github.com/nextcloud/spreed/pull/4797) + +## 9.0.6 – 2020-11-17 +### Fixed +- Reduce the load when mounting many shares + [#4510](https://github.com/nextcloud/spreed/pull/4510) +- Fix handling of unavailable commands + [#4578](https://github.com/nextcloud/spreed/pull/4578) +- Correctly delete a conversation when the last moderator leaves + [#4499](https://github.com/nextcloud/spreed/pull/4499) + +## 9.0.5 – 2020-10-23 +### Fixed +- Remove pulse animation from call button to reduce CPU load in chrome-based browsers + [#4302](https://github.com/nextcloud/spreed/pull/4302) +- Only show the "Session conflict" dialog when in a call + [#4443](https://github.com/nextcloud/spreed/pull/4443) +- Fix minimum length calculation of the call token + [#4370](https://github.com/nextcloud/spreed/pull/4370) +- Fix duplicate session issue in files sidebar + [#4427](https://github.com/nextcloud/spreed/pull/4427) +- Lobby date not shown in the moderator menu + [#4323](https://github.com/nextcloud/spreed/pull/4323) + +## 9.0.4 – 2020-09-17 +### Added +- Moderators can now mute all participants with a single button in the moderator menu + [#4054](https://github.com/nextcloud/spreed/pull/4054) + +### Fixed +- Prevent infinite loop when opening a data channel and retransmitting old messages + [#4069](https://github.com/nextcloud/spreed/pull/4069) +- Installation on Oracle fails + [#4129](https://github.com/nextcloud/spreed/pull/4129) +- Fix clientside memory leaks due to missing unsubscribe of events when destroying interface components + [#4148](https://github.com/nextcloud/spreed/pull/4148) + [#4156](https://github.com/nextcloud/spreed/pull/4156) + [#4160](https://github.com/nextcloud/spreed/pull/4160) + [#4162](https://github.com/nextcloud/spreed/pull/4162) + +## 9.0.3 – 2020-08-04 +### Fixed +- Fix compatibility with Janus 0.10.4 and the newest High-performance backend + [#3940](https://github.com/nextcloud/spreed/pull/3940) + [#3979](https://github.com/nextcloud/spreed/pull/3979) +- Allow Internet Explorer 11 to render the page again + [#3967](https://github.com/nextcloud/spreed/pull/3967) + [#3982](https://github.com/nextcloud/spreed/pull/3982) +- Only show the browser warning when interacting with Nextcloud Talk features + [#3978](https://github.com/nextcloud/spreed/pull/3978) +- Avatar menu is opaque for participants that are offline + [#3959](https://github.com/nextcloud/spreed/pull/3959) +- Always allow to communicate with the HPB even when it's a local url + [#3965](https://github.com/nextcloud/spreed/pull/3965) + +## 9.0.2 – 2020-07-21 +### Added +- Warn the user when their connection or computer is busy and others might not be able to see or hear them correctly anymore. + [#3923](https://github.com/nextcloud/spreed/pull/3923) +- Warn the user when joining twice in the same conversation which breaks the calling experience for others. + [#3866](https://github.com/nextcloud/spreed/pull/3866) + +### Changed +- Improve default push notification text for upcoming iOS 13 SDK changes in the iOS mobile app + [#3847](https://github.com/nextcloud/spreed/pull/3847) + +### Fixed +- Fix timeout issue with users having only numeric ids + [#3791](https://github.com/nextcloud/spreed/pull/3791) +- Fix a failure on logout when an active session was removed from a conversation already + [#3869](https://github.com/nextcloud/spreed/pull/3869) +- Unify the blur on all videos to a same higher factor + [#3821](https://github.com/nextcloud/spreed/pull/3821) + [#3887](https://github.com/nextcloud/spreed/pull/3887) +- Fix attachment selection when default folder can not be created. + [#3797](https://github.com/nextcloud/spreed/pull/3797) +- Update lib to parse links in chat messages to fix an issue with trailing spaces + [#3924](https://github.com/nextcloud/spreed/pull/3924) + +## 9.0.1 – 2020-06-08 +### Added +- Store the guest name in browser storage again and read it from there + [#3709](https://github.com/nextcloud/spreed/pull/3709) +- Automatically switch to promoted view upon screenshare + [#3711](https://github.com/nextcloud/spreed/pull/3711) +- Added autocomplete support for talk:room:* commands + [#3728](https://github.com/nextcloud/spreed/pull/3728) + +### Changed +- Reload page on changing conversation and disable start/join call when Talk UI needs reloading + [#3699](https://github.com/nextcloud/spreed/pull/3699) +- Show sidebar when Viewer is opened + [#3679](https://github.com/nextcloud/spreed/pull/3679) + +### Fixed +- Properly sort participants by display name again + [#3763](https://github.com/nextcloud/spreed/pull/3763) +- Make joining the call synchronous to avoid toggling in and out of the callview + [#3682](https://github.com/nextcloud/spreed/pull/3682) +- Do not fetch all conversations on some signaling events + [#3673](https://github.com/nextcloud/spreed/pull/3673) +- Reduce database load when sending out push notifications + [#3782](https://github.com/nextcloud/spreed/pull/3782) +- Remove automatic ping when getting chat messages via the web UI + [#3784](https://github.com/nextcloud/spreed/pull/3784) +- Always try to connect without camera in case it failed + [#3780](https://github.com/nextcloud/spreed/pull/3780) +- Fix talk:room:* commands showing "Guest" as actor in the chat + [#3754](https://github.com/nextcloud/spreed/pull/3754) +- Do not break LessThan3 in last message of conversations list + [#3705](https://github.com/nextcloud/spreed/pull/3705) + +## 9.0.0 – 2020-05-26 +### Added +- Added a grid view for calls and made the promoted view more usable in huge calls as well as one-to-one calls + [#1056](https://github.com/nextcloud/spreed/pull/1056) + [#3569](https://github.com/nextcloud/spreed/pull/3569) +- Allow to use multiple High-performance backends in parallel for different conversations + [#3292](https://github.com/nextcloud/spreed/pull/3292) + [#3605](https://github.com/nextcloud/spreed/pull/3605) +- Allow selecting which video is shown big in the promoted view + [#3497](https://github.com/nextcloud/spreed/pull/3497) +- Open files with the viewer apps registered in Nextcloud + [#2778](https://github.com/nextcloud/spreed/pull/2778) +- Allow to upload and drag'n'drop files into the chat + [#2891](https://github.com/nextcloud/spreed/pull/2891) + [#3045](https://github.com/nextcloud/spreed/pull/3045) +- Allow pasting images/screenshot directly into the chat + [#3399](https://github.com/nextcloud/spreed/pull/3399) +- Allow selecting a directory for shared files + [#2876](https://github.com/nextcloud/spreed/pull/2876) + [#2983](https://github.com/nextcloud/spreed/pull/2983) +- Allow to limit creating public and group conversations to a group + [#3095](https://github.com/nextcloud/spreed/pull/3095) +- Added OCC commands to do basic administrations of conversations + [#3465](https://github.com/nextcloud/spreed/pull/3465) +- Allow guests to set their name while waiting in the lobby + [#3133](https://github.com/nextcloud/spreed/pull/3133) +- Allow moderators to turn off the microphone of participants + [#3015](https://github.com/nextcloud/spreed/pull/3015) + +### Changed +- Reduce CPU usage when doing a video call + [#3413](https://github.com/nextcloud/spreed/pull/3413) +- Automatic scaling of video quality to allow bigger video calls to further reduce required CPU and bandwidth + [#3419](https://github.com/nextcloud/spreed/pull/3419) +- Notify users when talk was updated in the background and a reload is necessary + [#3336](https://github.com/nextcloud/spreed/pull/3336) +- Adjust color of leave and join buttons to common styles + [#3398](https://github.com/nextcloud/spreed/pull/3398) + [#3348](https://github.com/nextcloud/spreed/pull/3348) + +### Fixed +- Try harder to connect with microphone when camera is not readable + [#3474](https://github.com/nextcloud/spreed/pull/3474) +- Fix multiple issues when the connection was interrupted + [#3383](https://github.com/nextcloud/spreed/pull/3383) + [#3457](https://github.com/nextcloud/spreed/pull/3457) + [#3460](https://github.com/nextcloud/spreed/pull/3460) + [#3456](https://github.com/nextcloud/spreed/pull/3456) + [#3402](https://github.com/nextcloud/spreed/pull/3402) + diff --git a/docs/chat.md b/docs/chat.md new file mode 100644 index 0000000..cae37f1 --- /dev/null +++ b/docs/chat.md @@ -0,0 +1,569 @@ +# Chat API + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 13 + +## Receive chat messages of a conversation + +!!! note + + Due to the structure of the `lastMessage.reactions` array the response is not valid in XML. + It is therefor recommended to use `format=json` or send the `Accept: application/json` header, + to receive a JSON response. + +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/chat/{token}` +* Data: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `lookIntoFuture` | int | `1` Poll and wait for new message or `0` get history of a conversation | +| `limit` | int | Number of chat messages to receive (100 by default, 200 at most) | +| `lastKnownMessageId` | int | Serves as an offset for the query. The lastKnownMessageId for the next page is available in the `X-Chat-Last-Given` header. | +| `lastCommonReadId` | int | Send the last `X-Chat-Last-Common-Read` header you got, if you are interested in updates of the common read value. A 304 response does not allow custom headers and otherwise the server can not know if your value is modified or not. | +| `timeout` | int | `$lookIntoFuture = 1` only, Number of seconds to wait for new messages (30 by default, 60 at most) | +| `setReadMarker` | int | `1` to automatically set the read timer after fetching the messages, use `0` when your client calls `Mark chat as read` manually. (Default: `1`) | +| `includeLastKnown` | int | `1` to include the last known message as well (Default: `0`) | +| `noStatusUpdate` | int | When the user status should not be automatically set to online set to 1 (default 0) | +| `markNotificationsAsRead` | int | `0` to not mark notifications as read (Default: `1`, only available with `chat-keep-notifications` capability) | + +* Response: + - Status code: + + `200 OK` + + `304 Not Modified` When there were no older/newer messages + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Header: + +| field | type | Description | +|---------------------------|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Given` | int | Offset (lastKnownMessageId) for the next page. | +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability and when lastCommonReadId was sent) | + + - Data: + Array of messages, each message has at least: + +| field | type | Description | +|----------------------------|----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `id` | int | ID of the comment | +| `token` | string | Conversation token | +| `actorType` | string | See [Constants - Actor types of chat messages](constants.md#actor-types-of-chat-messages) | +| `actorId` | string | Actor id of the message author | +| `actorDisplayName` | string | Display name of the message author (can be empty for type `deleted_users` and `guests`) | +| `timestamp` | int | Timestamp in seconds and UTC time zone | +| `systemMessage` | string | empty for normal chat message or the type of the system message (untranslated) | +| `messageType` | string | Currently known types are `comment`, `comment_deleted`, `system` and `command` | +| `isReplyable` | bool | True if the user can post a reply to this message (only available with `chat-replies` capability) | +| `referenceId` | string | A reference string that was given while posting the message to be able to identify a sent message again (only available with `chat-reference-id` capability) | +| `message` | string | Message string with placeholders (see [Rich Object String](https://github.com/nextcloud/server/issues/1706)) | +| `messageParameters` | array | Message parameters for `message` (see [Rich Object String](https://github.com/nextcloud/server/issues/1706)) | +| `expirationTimestamp` | int | Unix time stamp when the message expires and show be removed from the clients UI without further note or warning (only available with `message-expiration` capability) | +| `parent` | array | **Optional:** See `Parent data` below | +| `reactions` | int[] | **Optional:** An array map with relation between reaction emoji and total count of reactions with this emoji | +| `reactionsSelf` | string[] | **Optional:** When the user reacted this is the list of emojis the user reacted with | +| `markdown` | bool | **Optional:** Whether the message should be rendered as markdown or shown as plain text | +| `lastEditActorType` | string | **Optional:** Actor type of the last editing author - See [Constants - Actor types of chat messages](constants.md#actor-types-of-chat-messages) (only available with `edit-messages` capability and when the message was actually edited) | +| `lastEditActorId` | string | **Optional:** Actor id of the last editing author (only available with `edit-messages` capability and when the message was actually edited) | +| `lastEditActorDisplayName` | string | **Optional:** Display name of the last editing author (only available with `edit-messages` capability and when the message was actually edited) (can be empty for type `deleted_users` and `guests`) | +| `lastEditTimestamp` | int | **Optional:** Unix time stamp when the message was last edited (only available with `edit-messages` capability and when the message was actually edited) | +| `silent` | bool | **Optional:** Whether the message was sent silently (only available with `silent-send-state` capability) | + +#### Parent data + +* When deleted: + +| field | type | Description | +|-----------|------|-----------------------------------| +| `id` | int | ID of the parent comment | +| `deleted` | bool | `true` when the parent is deleted | + +* Regular message: + + Full message array as shown above, but `parent` will never be set for a parent message. + +## Get context of a message + +!!! note + + Due to the structure of the `lastMessage.reactions` array the response is not valid in XML. + It is therefor recommended to use `format=json` or send the `Accept: application/json` header, + to receive a JSON response. + +* Required capability: `chat-get-context` +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/chat/{token}/{messageId}/context` +* Data: + +| field | type | Description | +|----------------------|------|-------------------------------------------------------------------------------------| +| `limit` | int | Number of chat messages to receive into each direction (50 by default, 100 at most) | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Header: + +| field | type | Description | +|---------------------------|------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Given` | int | Offset (lastKnownMessageId) for the next page when getting more history. | +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability and when lastCommonReadId was sent) | + + - Data: See array definition in `Receive chat messages of a conversation` + +## Sending a new chat message + +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/chat/{token}` +* Data: + +| field | type | Description | +|--------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `message` | string | The message the user wants to say | +| `actorDisplayName` | string | Guest display name (ignored for logged in users) | +| `replyTo` | int | The message ID this message is a reply to (only allowed for messages from the same conversation and when the message type is not `system` or `command`) | +| `referenceId` | string | A reference string to be able to identify the message again in a "get messages" request, should be a random sha256 (only available with `chat-reference-id` capability) | +| `silent` | bool | If sent silent the message will not create chat notifications even for mentions (only available with `silent-send` capability) | + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` In case of any other error + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + `413 Payload Too Large` When the message was longer than the allowed limit of 32000 characters (or 1000 until Nextcloud 16.0.1, check the `spreed => config => chat => max-length` capability for the limit) + + `429 Too Many Requests` When a guest mentioned other participants too often (50 mention messages per day) + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + + - Data: + The full message array of the new message, as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + +## Share a rich object to the chat + +See [OCP\RichObjectStrings\Definitions](https://github.com/nextcloud/server/blob/master/lib/public/RichObjectStrings/Definitions.php) for more details on supported rich objects and required data. + +* Required capability: `rich-object-sharing` +* Method: `POST` +* Endpoint: `/chat/{token}/share` +* Data: + +| field | type | Description | +|--------------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `objectType` | string | The object type | +| `objectId` | string | The object id | +| `metaData` | string | JSON encoded array of the rich objects data | +| `actorDisplayName` | string | Guest display name (ignored for logged in users) | +| `referenceId` | string | A reference string to be able to identify the message again in a "get messages" request, should be a random sha256 (only available with `chat-reference-id` capability) | + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` In case the meta data is invalid + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + `413 Payload Too Large` When the message was longer than the allowed limit of 32000 characters (or 1000 until Nextcloud 16.0.1, check the `spreed => config => chat => max-length` capability for the limit) + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + + - Data: + The full message array of the new message, as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + +## Share a file to the chat + +* Method: `POST` +* Endpoint: `ocs/v2.php/apps/files_sharing/api/v1/shares` +* Data: + +| field | type | Description | +|----------------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `shareType` | int | `10` means share to a conversation | +| `shareWith` | string | The token of the conversation to share the file to | +| `path` | string | The file path inside the user's root to share | +| `referenceId` | string | A reference string to be able to identify the generated chat message again in a "get messages" request, should be a random sha256 (only available with `chat-reference-id` capability) | +| `talkMetaData` | string | JSON encoded array of the meta data | + +### `talkMetaData` array + +| field | type | Description | +|---------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `messageType` | string | A message type to show the message in different styles. Currently known: `voice-message` and `comment` | +| `caption` | string | A caption message that should be shown together with the shared file (only available with `media-caption` capability) | +| `replyTo` | int | The message ID this caption message is a reply to (only allowed for messages from the same conversation and when the message type is not `system` or `command`) | +| `threadId` | int | The thread ID this caption message is a response to without actually being a reply (so not sending a notification, only available with `threads` capability) | +| `threadTitle` | string | When not empty the message will start a new thread (only available with `threads` capability) | +| `silent` | bool | If sent silent the message will not create chat notifications even for mentions (only available with `media-caption` capability, yes `media-caption` not `silent-send`) | + +* Response: [See official OCS Share API docs](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-share-api.html?highlight=sharing#create-a-new-share) + +## List overview of items shared into a chat + +* Required capability: `rich-object-list-media` +* Method: `GET` +* Endpoint: `/chat/{token}/share/overview` +* Data: + +| field | type | Description | +|---------|------|-----------------------------------------------------| +| `limit` | int | Number of chat messages with shares you want to get | + +* Response: + - Note: if a file was shared multiple times it will be returned multiple times + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + + An array per item type + - Array of messages as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + +## List items of type shared in a chat + +* Required capability: `rich-object-list-media` +* Method: `GET` +* Endpoint: `/chat/{token}/share` +* Data: + +| field | type | Description | +|----------------------|--------|-----------------------------------------------------------------------------------------------------------------------------| +| `objectType` | string | One of the [Constants - Shared item types](constants.md#shared-item-types) | +| `lastKnownMessageId` | int | Serves as an offset for the query. The lastKnownMessageId for the next page is available in the `X-Chat-Last-Given` header. | +| `limit` | int | Number of chat messages with shares you want to get | + +* Response: + - Note: if a file was shared multiple times it will be returned multiple times + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Header: + +| field | type | Description | +|---------------------|------|------------------------------------------------| +| `X-Chat-Last-Given` | int | Offset (lastKnownMessageId) for the next page. | + + - Data: + Array of messages as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + +## Clear chat history + +* Required capability: `clear-history` +* Method: `DELETE` +* Endpoint: `/chat/{token}` + +* Response: + - Status code: + + `200 OK` - When deleting was successful + + `202 Accepted` - When deleting was successful but Matterbridge is enabled so the message was leaked to other services + + `403 Forbidden` When the user is not a moderator + + `404 Not Found` When the conversation could not be found for the participant + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + + - Data: + The full message array of the new system message "You cleared the history of the conversation", as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + When rendering this message the client should also remove all messages from any cache/storage of the device. + + +## Deleting a chat message + +* Required capability: `delete-messages` - `rich-object-delete` indicates if shared objects can be deleted from the chat +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/chat/{token}/{messageId}` + +* Response: + - Status code: + + `200 OK` - When deleting was successful + + `202 Accepted` - When deleting was successful, but a bot or Matterbridge is configured, so the information can be replicated to other services + + `400 Bad Request` The message is already older than 6 hours + + `403 Forbidden` When the message is not from the current user and the user not a moderator + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation or chat message could not be found for the participant + + `405 Method Not Allowed` When the message is not a normal chat message + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + + - Data: + The full message array of the new system message "You deleted a message", as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + The parent message is the object of the deleted message with the replaced text "Message deleted by you". + This message should **NOT** be displayed to the user but instead be used to remove the original message from any cache/storage of the device. + + +## Editing a chat message + +* Required capability: `edit-messages` +* Federation capability: `federation-v1` +* Method: `PUT` +* Endpoint: `/chat/{token}/{messageId}` +* Data: + +| field | type | Description | +|--------------------|--------|-----------------------------------| +| `message` | string | The message the user wants to say | + +* Response: + - Status code: + + `200 OK` - When editing was successful + + `202 Accepted` - When editing was successful, but a bot or Matterbridge is configured, so the information can be replicated to other services + + `400 Bad Request` The message is already older than 24 hours or another reason why editing is not okay + + `403 Forbidden` When the message is not from the current user and the user not a moderator + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation or chat message could not be found for the participant + + `405 Method Not Allowed` When the message is not a normal chat message + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + + - Data: + The full message array of the new system message "You edited a message", as defined in [Receive chat messages of a conversation](#receive-chat-messages-of-a-conversation) + The parent message is the object of the edited message with the new content. + This message should **NOT** be displayed to the user but instead be used to update the original message from any cache/storage of the device. + +## Set reminder for chat message + +* Required capability: `remind-me-later` +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/chat/{token}/{messageId}/reminder` +* Data: + +| field | type | Description | +|-------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------| +| `timestamp` | int | Timestamp when the notification should be triggered. Preferable options for 6pm today, 8am tomorrow, Saturday 8am and Monday 8am should be offered. | + +* Response: + - Status code: + + `201 Created` + + `401 Unauthorized` when the user is not logged in + + `404 Not Found` When the message could not be found in the room + + `404 Not Found` When the room could not be found for the participant, + or the participant is a guest. + - Data: + Array with the details of the reminder + +| field | type | Description | +|-------------|--------|----------------------------------------------| +| `userId` | string | The user id of the user | +| `token` | string | The token of the conversation of the message | +| `messageId` | int | The message id this reminder is for | +| `timestamp` | int | The timestamp when the reminder is triggered | + +## Get reminder for chat message + +* Required capability: `remind-me-later` +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/chat/{token}/{messageId}/reminder` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` when the user is not logged in + + `404 Not Found` When the message could not be found in the room + + `404 Not Found` When the room could not be found for the participant, + or the participant is a guest. + + `404 Not Found` When the user has no reminder for this message + - Data: + Array with the details of the reminder + +| field | type | Description | +|-------------|--------|----------------------------------------------| +| `userId` | string | The user id of the user | +| `token` | string | The token of the conversation of the message | +| `messageId` | int | The message id this reminder is for | +| `timestamp` | int | The timestamp when the reminder is triggered | + +## Delete reminder for chat message + +* Required capability: `remind-me-later` +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/chat/{token}/{messageId}/reminder` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` when the user is not logged in + + `404 Not Found` When the message could not be found in the room + + `404 Not Found` When the room could not be found for the participant, + or the participant is a guest. + +## Mark chat as read + +* Required capability: `chat-read-marker` +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/chat/{token}/read` +* Data: + +| field | type | Description | +|-------------------|----------|----------------------------------------------------------------------| +| `lastReadMessage` | int/null | The last read message ID (Optional with `chat-read-last` capability) | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the room could not be found for the participant, + or the participant is a guest. + + - Data in case of `200 OK`: + + **Without** `federation-v1` capability empty + + **With** `federation-v1` capability, see array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + +## Mark chat as unread + +* Required capability: `chat-unread` +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/chat/{token}/read` + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the room could not be found for the participant, + or the participant is a guest. + + - Data in case of `200 OK`: + + **Without** `federation-v1` capability empty + + **With** `federation-v1` capability, see array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) + + - Header: + +| field | type | Description | +|---------------------------|------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Chat-Last-Common-Read` | int | ID of the last message read by every user that has read privacy set to public. When the user themself has it set to private the value the header is not set (only available with `chat-read-status` capability) | + +## Get mention autocomplete suggestions + +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/chat/{token}/mentions` +* Data: + +| field | type | Description | +|-----------------|--------|-------------------------------------------------------------------| +| `search` | string | Search term for name suggestions (should at least be 1 character) | +| `limit` | int | Number of suggestions to receive (20 by default) | +| `includeStatus` | bool | Whether the user status information also needs to be loaded | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the conversation is read-only + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + Array of suggestions, each suggestion has at least: + +| field | type | Description | +|-----------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `mentionId` | string | Optional: Only available with `federation-v1` capability - the identifier which should be sent as `@` in the message (ids that contain spaces or slashes need to be wrapped in double-quotes when sending in a message: `@"space user"` and `@"guest/random-string"`) | +| `id` | string | The id of the participant to mention. Note: while this should not be inserted into the message field when `mentionId` is present, it still has to be used to load e.g. avatar and user status of users that are from the same proxy server. | +| `label` | string | The display name of the mention option | +| `source` | string | The type of the mention option, currently only `users`, `federated_users`, `group`, `guests` or `calls` (for mentioning the whole conversation) | +| `status` | string | Optional: Only available with `includeStatus=true` and for users with a set status | +| `statusIcon` | string | Optional: Only available with `includeStatus=true` and for users with a set status | +| `statusMessage` | string | Optional: Only available with `includeStatus=true` and for users with a set status | +| `details` | string | Optional: Only provided for the "Everyone" option and can be used as a subline directly | + +## System messages + +* `conversation_created` - {actor} created the conversation +* `conversation_renamed` - {actor} renamed the conversation from "foo" to "bar" +* `description_set` - {actor} set the description +* `description_removed` - {actor} removed the description +* `call_started` - {actor} started a call +* `call_joined` - {actor} joined the call +* `call_left` - {actor} left the call +* `call_ended` - Call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration 30:23) +* `call_ended_everyone` - {user1} ended the call with {user2}, {user3}, {user4} and {user5} (Duration 30:23) +* `call_missed` - You missed a call from {user} +* `call_tried` - You tried to call {user} +* `read_only_off` - {actor} unlocked the conversation +* `read_only` - {actor} locked the conversation +* `listable_none` - {actor} limited the conversation to the current participants +* `listable_users` - {actor} opened the conversation accessible to registered users +* `listable_all` - {actor} opened the conversation accessible to registered users and users created with the Guests app +* `lobby_timer_reached` - The conversation is now open to everyone +* `lobby_none` - {actor} opened the conversation to everyone +* `lobby_non_moderators` - {actor} restricted the conversation to moderators +* `guests_allowed` - {actor} allowed guests in the conversation +* `guests_disallowed` - {actor} disallowed guests in the conversation +* `password_set` - {actor} set a password for the conversation +* `password_removed` - {actor} removed the password for the conversation +* `user_added` - {actor} added {user} to the conversation +* `user_removed` - {actor} removed {user} from the conversation +* `group_added` - {actor} added group {group} to the conversation +* `group_removed` - {actor} removed group {group} from the conversation +* `circle_added` - {actor} added circle {circle} to the conversation +* `circle_removed` - {actor} removed circle {circle} from the conversation +* `moderator_promoted` - {actor} promoted {user} to moderator +* `moderator_demoted` - {actor} demoted {user} from moderator +* `guest_moderator_promoted` - {actor} promoted {user} to moderator +* `guest_moderator_demoted` - {actor} demoted {user} from moderator +* `message_deleted` - Message deleted by {actor} (Should not be shown to the user) +* `message_edited` - Message edited by {actor} (Should not be shown to the user) +* `history_cleared` - {actor} cleared the history of the conversation +* `file_shared` - {file} +* `object_shared` - {object} +* `matterbridge_config_added` - {actor} set up Matterbridge to synchronize this conversation with other chats +* `matterbridge_config_edited` - {actor} updated the Matterbridge configuration +* `matterbridge_config_removed` - {actor} removed the Matterbridge configuration +* `matterbridge_config_enabled` - {actor} started Matterbridge +* `matterbridge_config_disabled` - {actor} stopped Matterbridge +* `reaction` - {reaction} +* `reaction_deleted` - Reaction deleted by author (replacement of `reaction` after the action has been performed) +* `reaction_revoked` - {actor} deleted a reaction (the action that will replace `reaction` with a `reaction_deleted` message) +* Creating a poll is an `object_shared` with a poll object +* `poll_voted` - Someone voted on the poll {poll} +* `poll_closed` - {actor} closed the poll {poll} +* `message_expiration_enabled` - {actor} set the message expiration to 3 hours +* `message_expiration_disabled` - {actor} disabled message expiration +* `breakout_rooms_started` - {actor} started breakout rooms +* `breakout_rooms_stopped` - {actor} stopped breakout rooms +* `recording_started` - {actor} started a video recording +* `recording_stopped` - {actor} stopped a video recording +* `audio_recording_started` - {actor} started an audio recording +* `audio_recording_stopped` - {actor} stopped an audio recording +* `avatar_set` - {actor} set the conversation avatar +* `avatar_removed` - {actor} removed the conversation avatar +* `federated_user_added` - {actor} invited {federated_user} / {federated_user} accepted the invitation +* `federated_user_removed` - {actor} removed {federated_user} / {federated_user} declined the invitation diff --git a/docs/chat.png b/docs/chat.png new file mode 100644 index 0000000..65017e9 Binary files /dev/null and b/docs/chat.png differ diff --git a/docs/chat.png.license b/docs/chat.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/chat.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/commands.md b/docs/commands.md new file mode 100644 index 0000000..9af5115 --- /dev/null +++ b/docs/commands.md @@ -0,0 +1,5 @@ +# Chat commands + +!!! warning + + **Deprecation:** Commands have been removed in favor of [Bots](bots.md). diff --git a/docs/constants.md b/docs/constants.md new file mode 100644 index 0000000..ccbd76b --- /dev/null +++ b/docs/constants.md @@ -0,0 +1,192 @@ +# Constants + +## Conversation + +### Conversation types +* `1` "One to one" +* `2` Group +* `3` Public +* `4` Changelog +* `5` Former "One to one" (When a user is deleted from the server or removed from all their conversations, `1` "One to one" rooms are converted to this type) +* `6` Note to self + +### Object types + +| Constant | Can be created | Description | Object ID | +|-------------------------|----------------|------------------------------------------------------------------------------|-----------------------------------------------------------------------------------| +| `file` | No | Conversations about a file in the right sidebar of the files app | File ID | +| `share:password` | No | Video verification to verify the identity of the share recipient | Share token | +| `room` | Yes | Room is a breakout room | Token of the main/parent conversation | +| `phone` | Yes | Room is created when calling a phone number with SIP dial-out | `phone` (not set atm, just used for the default avatar) | +| `sample` | No | Room is a sample conversation | User ID the sample | +| `event` | Yes | Event conversation created via the calendar | Start and end unix timestamp of the event concatenated by pound sign: `start#end` | +| `extended_conversation` | Yes | Room is created from another conversation (e.g. adding a participant to 1-1) | Token of previous conversation | + +### Read-only states +* `0` Read-write +* `1` Read-only + +### Listable scope +* `0` Participants only +* `1` Regular users only, excluding users created with the Guests app +* `2` Everyone + +### Webinar lobby states +* `0` No lobby +* `1` Lobby for non moderators + +### SIP states +* `0` Disabled +* `1` Enabled (Each participant needs a unique PIN) +* `2` Enabled without PIN (Only the conversation token is required) + +### Breakout room modes +* `0` Not configured +* `1` Automatic - Attendees are unsorted and then distributed equaly over the rooms, so they all have the same participant count (+/- 1) +* `2` Manual - A map with attendee to room number specifies the participants +* `3` Free - Each attendee picks their own breakout room + +### Breakout room status +* `0` Stopped (breakout rooms lobbies are enabled) +* `1` Started (breakout rooms lobbies are disabled) + +### Mention permissions +* `0` Everyone (default) - All participants can mention using `@all` +* `1` Moderators - Only moderators can mention using `@all` + +### Conversation list style +* `two-lines` Normal (default) - two-line elements (with display name and last message) +* `compact` Compact - one-line elements (with display name) + +## Participants + +### Participant types +* `1` Owner +* `2` Moderator +* `3` User +* `4` Guest +* `5` User following a public link +* `6` Guest with moderator permissions + +### Participant in-call flag +* `0` Disconnected +* `1` In-call +* `2` Provides audio +* `4` Provides video +* `8` Uses SIP dial-in + +### Participant notification levels +* `0` Default (`1` for one-to-one conversations, `2` for other conversations) +* `1` Always notify +* `2` Notify on mention +* `3` Never notify + +### Participant call notification levels +* `0` Off +* `1` On (default) + +### Participant read status privacy +* `0` Read status is public +* `1` Read status is private + +### Participant typing privacy +* `0` Typing status is public +* `1` Typing status is private + +### Attendee types +* `users` - Logged-in users +* `federated_users` - Federated users invited by their CloudID +* `groups` - Groups +* `circles` - [Circle from the Circles app](https://github.com/nextcloud/circles) +* `guests` - Guest without a login +* `emails` - A guest invited by email address + +### Attendee permissions +* `0` Default permissions (will pick the one from the next level of: user, call, conversation) +* `1` Custom permissions (this is required to be able to remove all other permissions) +* `2` Start call +* `4` Join call +* `8` Can ignore lobby +* `16` Can publish audio stream +* `32` Can publish video stream +* `64` Can publish screen sharing stream +* `128` Can post chat message, share items and do reactions + +### Attendee permission modifications +* `set` - Setting this permission set. +* `add` - Add the given flags to the permissions. +* `remove` - Remove the given flags from the permissions. + +### Actor types of chat messages +* `users` - Logged-in users +* `guests` - Guest users (attendee type `guests` and `emails`) +* `bots` - Used by bots, commands (actor-id is the used `/command`) and the changelog conversation (actor-id is `changelog`) +* `bridged` - Users whose messages are bridged in by the [Matterbridge integration](matterbridge.md) +* `deleted_users` - Former logged-in users that got deleted (actor id is hardcoded to `deleted_users` and the display name is empty) +* `federated_users` - Federated users + +### Session states +* `0` - Inactive (Notifications should still be sent, even though the user has this session in the room) +* `1` - Active (No notifications should be sent) + +## Call + +### Start call +* `0` - Everyone +* `1` - Participants of the conversation with an account on the instance +* `2` - Moderators +* `3` - No one + +### Call recording status +* `0` - No recording +* `1` - Recording video +* `2` - Recording audio +* `3` - Starting video recording +* `4` - Starting audio recording +* `5` - Recording failed + +### Recording consent required +* `0` - No recording consent is required to join a call +* `1` - Recording consent is required +* `2` - Recording consent can be enabled by moderators on conversation level (not allowed on conversation API level, only on config level) + +## Chat + +### Shared item types +* `audio` - Shared audio file +* `deckcard` - Shared deck card +* `file` - Shared files not falling into any other category +* `location` - Shared geo location +* `media` - Shared files with mimetype starting with image or video +* `other` - Shared objects not falling into any other category +* `voice` - Voice messages +* `recording` - Audio and video recording file of a call + +## Poll + +### Poll status +* `0` - Open: Participants can cast votes +* `1` - Closed: Participants can no longer cast votes and the result is displayed + +### Poll mode +* `0` - Public: Participants can see the result immediately and also who voted for which option +* `1` - Hidden: The result is hidden until the poll is closed and then only the number of votes for each option are displayed + +## Bots + +### Bot states +* `0` Disabled +* `1` Enabled +* `2` No setup - The bot can neither be enabled nor disabled by a moderator + +### Bot features +* `0` (none) - Bot is not functional at the moment +* `1` (webhook) - Bot is receive webhooks +* `2` (response) - Bot is sending webhooks +* `4` (event) - Bot is invoked via PHP event `OCA\Talk\Events\BotInvokeEvent` +* `8` (reaction) - Bot is receiving webhooks or is invoked via PHP event for adding and removing reactions + +## Signaling modes +* `internal` - No external signaling server is used +* `external` - A single external signaling server is used +* `conversation_cluster` - An external signaling server is assigned per conversation. diff --git a/docs/conversation.md b/docs/conversation.md new file mode 100644 index 0000000..6d64524 --- /dev/null +++ b/docs/conversation.md @@ -0,0 +1,536 @@ +# Conversation API + +* API v1: 🏁 Removed with API v4: until Nextcloud 21 +* API v2: 🏁 Removed with API v4: Nextcloud 19 - 21 +* API v3: 🏁 Removed with API v4: Nextcloud 21 only +* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`: since Nextcloud 22 + +## Get user´s conversations + +!!! note + + Due to the structure of the `lastMessage.reactions` array the response is not valid in XML. + It is therefor recommended to use `format=json` or send the `Accept: application/json` header, + to receive a JSON response. + +!!! note + + When `modifiedSince` is provided only conversations with a newer `lastActivity` are returned. If `includeStatus` is set to `true` all one-to-one conversations will be returned to make sure the latest user status is returned. + Due to the nature of the data structure we can not return information that a conversation was deleted + or the user removed from a conversation. Therefore it is recommended to do a full refresh: + * Every 5 minutes + * When a signaling message of type `delete` or `disinvite` was received + * Internal signaling mode is used + + +* Method: `GET` +* Endpoint: `/room` +* Data: + +| field | type | Description | +|------------------|------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `noStatusUpdate` | int | When the user status should not be automatically set to online set to 1 (default 0) | +| `includeStatus` | bool | Whether the user status information of all one-to-one conversations should be loaded (default false) | +| `modifiedSince` | int | **Use with care as per note above.** When provided only conversations with a newer `lastActivity` (and one-to-one conversations when `includeStatus` is provided) are returned. | + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` when the user is not logged in + + - Header: + +| field | type | Description | +|---------------------------------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Nextcloud-Talk-Hash` | string | Sha1 value over some config. When you receive a different value on subsequent requests, the capabilities and the signaling settings should be refreshed. | +| `X-Nextcloud-Talk-Modified-Before` | string | Timestamp from before the database request that can be used as `modifiedSince` parameter in the next request | +| `X-Nextcloud-Talk-Federation-Invites` | string | *Optional:* Number of pending invites to federated conversations the user has. (Only available when the user can do federation and has at least one invite pending) | + + - Data: + Array of conversations, each conversation has at least: + +| field | type | Added | Removed | Description | +|-------------------------|---------|-------|---------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `id` | int | v1 | | Numeric identifier of the conversation | +| `token` | string | v1 | | Token identifier of the conversation which is used for further interaction | +| `type` | int | v1 | | See list of conversation types in the [constants list](constants.md#conversation-types) | +| `name` | string | v1 | | Name of the conversation (can also be empty) | +| `displayName` | string | v1 | | `name` if non empty, otherwise it falls back to a list of participants | +| `description` | string | v3 | | Description of the conversation (can also be empty) (only available with `room-description` capability) | +| `participantType` | int | v1 | | Permissions level of the current user | +| `attendeeId` | int | v3 | | Unique attendee id | +| `attendeePin` | string | v3 | | Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute) | +| `actorType` | string | v3 | | Actor type of the current user (see [constants list](constants.md#attendee-types)) | +| `actorId` | string | v3 | | The unique identifier for the given actor type | +| `permissions` | int | v4 | | Combined final permissions for the current participant, permissions are picked in order of attendee then call then default and the first which is `Custom` will apply (see [constants list](constants.md#attendee-permissions)) | +| `attendeePermissions` | int | v4 | | Dedicated permissions for the current participant, if not `Custom` this are not the resulting permissions (see [constants list](constants.md#attendee-permissions)) | +| `callPermissions` | int | v4 | | Call permissions, if not `Custom` this are not the resulting permissions, if set they will reset after the end of the call (see [constants list](constants.md#attendee-permissions)) | +| `defaultPermissions` | int | v4 | | Default permissions for new participants (see [constants list](constants.md#attendee-permissions)) | +| `participantInCall` | bool | v1 | v2 | **Removed:** use `participantFlags` instead | +| `participantFlags` | int | v1 | | "In call" flags of the user's session making the request (only available with `in-call-flags` capability) | +| `readOnly` | int | v1 | | Read-only state for the current user (only available with `read-only-rooms` capability) | +| `listable` | int | v3 | | Listable scope for the room (only available with `listable-rooms` capability) | +| `messageExpiration` | int | v4 | | The message expiration time in seconds in this chat. Zero if disabled. (only available with `message-expiration` capability) | +| `count` | int | v1 | v2 | **Removed:** Count the users on the [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation) endpoint | +| `numGuests` | int | v1 | v2 | **Removed:** Count the guests on the [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation) endpoin | +| `lastPing` | int | v1 | | Timestamp of the user's session making the request | +| `sessionId` | string | v1 | | `'0'` if not connected, otherwise an up to 512 character long string that is the identifier of the user's session making the request. Should only be used to pre-check if the user joined already with this session, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](participant.md#get-list-of-participants-in-a-conversation) | +| `hasPassword` | bool | v1 | | Flag if the conversation has a password | +| `hasCall` | bool | v1 | | Flag if the conversation has an active call | +| `callFlag` | int | v3 | | Combined flag of all participants in the current call (see [constants list](constants.md#participant-in-call-flag), only available with `conversation-call-flags` capability) | +| `canStartCall` | bool | v1 | | Flag if the user can start a new call in this conversation (joining is always possible) (only available with `start-call-flag` capability) | +| `canDeleteConversation` | bool | v2 | | Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations) | +| `canLeaveConversation` | bool | v2 | | Flag if the user can leave the conversation (not possible for the last user with moderator permissions) | +| `lastActivity` | int | v1 | | Timestamp of the last activity in the conversation, in seconds and UTC time zone | +| `isFavorite` | bool | v1 | | Flag if the conversation is favorited by the user | +| `notificationLevel` | int | v1 | | The notification level for the user (See [Participant notification levels](constants.md#participant-notification-levels)) | +| `lobbyState` | int | v1 | | Webinar lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability) (See [Webinar lobby states](constants.md#webinar-lobby-states)) | +| `lobbyTimer` | int | v1 | | Timestamp when the lobby will be automatically disabled (only available with `webinary-lobby` capability) | +| `sipEnabled` | int | v3 | | SIP enable status (see [constants list](constants.md#sip-states)) | +| `canEnableSIP` | int | v3 | | Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation | +| `unreadMessages` | int | v1 | | Number of unread chat messages in the conversation (only available with `chat-v2` capability) | +| `unreadMention` | bool | v1 | | Flag if the user was mentioned since their last visit | +| `unreadMentionDirect` | bool | v4 | | Flag if the user was mentioned directly (ignoring @all mentions) since their last visit (only available with `direct-mention-flag` capability) | +| `lastReadMessage` | int | v1 | | ID of the last read message in a room (only available with `chat-read-marker` capability) | +| `lastCommonReadMessage` | int | v3 | | ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability) | +| `lastMessage` | message | v1 | | Last message in a conversation if available, otherwise empty. **Note:** Even when given the message will not contain the `parent` or `reactionsSelf` attribute due to performance reasons | +| `objectType` | string | v1 | | The type of object that the conversation is associated with (See [Object types](constants.md#object-types)) | +| `objectId` | string | v1 | | See [Object types](constants.md#object-types) documentation for explanation | +| `breakoutRoomMode` | string | v4 | | Breakout room configuration mode (see [constants list](constants.md#breakout-room-modes)) (only available with `breakout-rooms-v1` capability) | +| `breakoutRoomStatus` | string | v4 | | Breakout room status (see [constants list](constants.md#breakout-room-status)) (only available with `breakout-rooms-v1` capability) | +| `status` | string | v4 | | Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status | +| `statusIcon` | ?string | v4 | | Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status | +| `statusMessage` | ?string | v4 | | Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status | +| `statusClearAt` | ?int | v4 | | Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status | +| `participants` | array | v1 | v2 | **Removed** | +| `guestList` | string | v1 | v2 | **Removed** | +| `avatarVersion` | string | v4 | | Version of conversation avatar used to easier expiration of the avatar in case a moderator updates it, since the avatar endpoint should be cached for 24 hours. (only available with `avatar` capability) | +| `isCustomAvatar` | bool | v4 | | Flag if the conversation has a custom avatar (only available with `avatar` capability) | +| `callStartTime` | int | v4 | | Timestamp when the call was started (only available with `recording-v1` capability) | +| `callRecording` | int | v4 | | Type of call recording (see [Constants - Call recording status](constants.md#call-recording-status)) (only available with `recording-v1` capability) | +| `recordingConsent` | int | v4 | | Whether recording consent is required before joining a call (Only 0 and 1 will be returned, see [constants list](constants.md#recording-consent-required)) (only available with `recording-consent` capability) | +| `mentionPermissions` | int | v4 | | Whether all participants can mention using `@all` or only moderators (see [constants list](constants.md#mention-permissions)) (only available with `mention-permissions` capability) | +| `isArchived` | bool | v4 | | Flag if the conversation is archived by the user (only available with `archived-conversations-v2` capability) | | + +## Creating a new conversation + +*Note:* Creating a conversation as a child breakout room, will automatically set the lobby when breakout rooms are not started and will always overwrite the room type with the parent room type. Also, moderators of the parent conversation will be automatically added as moderators. + +* Method: `POST` +* Endpoint: `/room` +* Data: + +| field | type | Description | +|--------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `roomType` | int | See [constants list](constants.md#conversation-types) | +| `invite` | string | user id (`roomType = 1`), group id (`roomType = 2` - optional), circle id (`roomType = 2`, `source = 'circles'`], only available with `circles-support` capability)) | +| `source` | string | The source for the invite, only supported on `roomType = 2` for `groups` and `circles` (only available with `circles-support` capability) | +| `roomName` | string | Conversation name up to 255 characters (Not available for `roomType = 1`) | +| `objectType` | string | Type of an object this room references, currently only allowed value is `room` to indicate the parent of a breakout room (See [Object types](constants.md#object-types)) | +| `objectId` | string | Id of an object this room references, room token is used for the parent of a breakout room | +| `password` | string | Password for the room (only available with `conversation-creation-password` capability) | + +* Response: + - Status code: + + `200 OK` When the "one to one" conversation already exists + + `201 Created` When the conversation was created + + `400 Bad Request` When an invalid conversation type was given + + `400 Bad Request` When the conversation name is empty for `type = 3` + + `400 Bad Request` When a password is required for a public room or when the password is invalid according to the password policy + + `401 Unauthorized` When the user is not logged in + + `404 Not Found` When the target to invite does not exist + + - Data: See array definition in `Get user´s conversations` + +## Get single conversation (also for guests) + +* Method: `GET` +* Endpoint: `/room/{token}` + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + + - Header: + +| field | type | Description | +|-------------------------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Nextcloud-Talk-Hash` | string | Sha1 value over some config. When you receive a different value on subsequent requests, the capabilities and the signaling settings should be refreshed. | + + - Data: See array definition in `Get user´s conversations` + +## Get "Note-to-self" conversation + +The conversation is like a group conversation and the user is the owner, but with the following limitations: + +* Can not add participants to the conversation +* Can not allow guests +* Can not make read-only +* Can not open the conversations to users or guests +* Can not change permissions +* Can not set lobby +* Can not enable SIP +* Can not configure breakout rooms +* Can not call + +If the conversation does not exist at the moment, it will be generated and the user added automatically. + +* Required capability: `note-to-self` +* Method: `GET` +* Endpoint: `/room/note-to-self` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the user is not logged in + + - Header: + +| field | type | Description | +|-------------------------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------| +| `X-Nextcloud-Talk-Hash` | string | Sha1 value over some config. When you receive a different value on subsequent requests, the capabilities and the signaling settings should be refreshed. | + + - Data: See array definition in `Get user´s conversations` + +## Get open conversations + +* Required capability: `listable-rooms` +* Method: `GET` +* Endpoint: `/listed-room` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` when the user is not logged in + + - Header: + +| field | type | Description | +|--------------|--------|-------------| +| `searchTerm` | string | search term | + + - Data: See array definition in `Get user´s conversations` + +## Get breakout rooms + +Get all (for moderators and in case of "free selection") or the assigned breakout room + +* Required capability: `breakout-rooms-v1` +* Method: `GET` +* Endpoint: `/room/{token}/breakout-rooms` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation does not have breakout rooms configured + + `400 Bad Request` When the breakout rooms are not started and the participant is not a moderator + + `401 Unauthorized` When the user is not logged in + + `404 Not Found` When the conversation could not be found for the participant + + - Data: See array definition in `Get user´s conversations` + +## Rename a conversation + +* Method: `PUT` +* Endpoint: `/room/{token}` +* Data: + +| field | type | Description | +|------------|--------|------------------------------------------------------| +| `roomName` | string | New name for the conversation (up to 255 characters) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the name is too long or empty + + `400 Bad Request` When the conversation is a one to one conversation + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Delete a conversation + +*Note:* Deleting a conversation that is the parent of breakout rooms, will also delete them. + +* Method: `DELETE` +* Endpoint: `/room/{token}` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation is a one-to-one conversation (Use [Remove yourself from a conversation](participant.md#Remove-yourself-from-a-conversation) instead) + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Set description for a conversation + +* Required capability: `room-description` +* Method: `PUT` +* Endpoint: `/room/{token}/description` +* Data: + +| field | type | Description | +|---------------|--------|--------------------------------------------------------------------------------------------| +| `description` | string | New description for the conversation (limited to 2.000 characters, was 500 before Talk 21) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the description is too long + + `400 Bad Request` When the conversation is a one to one conversation + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Allow guests in a conversation (public conversation) + +* Method: `POST` +* Endpoint: `/room/{token}/public` +* Data: + +| field | type | Description | +|------------|---------|-------------------------------------------------------------------------------------------------| +| `password` | ?string | Password for the conversation (only available with `conversation-creation-password` capability) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation is not a group conversation + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Disallow guests in a conversation (group conversation) + +* Method: `DELETE` +* Endpoint: `/room/{token}/public` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation is not a public conversation + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Set read-only for a conversation + +* Required capability: `read-only-rooms` +* Method: `PUT` +* Endpoint: `/room/{token}/read-only` +* Data: + +| field | type | Description | +|---------|------|-------------------------------------------------------------------------------------| +| `state` | int | New state for the conversation, see [constants list](constants.md#read-only-states) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support read-only (only group and public conversation) + + `403 Forbidden` When the current user is not a moderator/owner or the conversation is not a public conversation + + `404 Not Found` When the conversation could not be found for the participant + +## Set password for a conversation + +* Method: `PUT` +* Endpoint: `/room/{token}/password` +* Data: + +| field | type | Description | +|------------|--------|-----------------------------------| +| `password` | string | New password for the conversation | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the password does not match the password policy. Show `ocs.data.message` to the user in this case + + `400 Bad Request` When the conversation is a breakout room + + `403 Forbidden` When the current user is not a moderator or owner + + `403 Forbidden` When the conversation is not a public conversation + + `404 Not Found` When the conversation could not be found for the participant + + - Data: + field | type | Description + ---|---|--- + `message` | string | Only available on `400 Bad Request`, translated error with the violated password policy rules + +## Set default or call permissions for a conversation + +* Method: `PUT` +* Endpoint: `/room/{token}/permissions/{mode}` +* Data: + +| field | type | Description | +|---------------|--------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `mode` | string | `default` or `call`, in case of call the permissions will be reset to `0` (default) after the end of a call. (🏁 `call` is no-op since Talk 20) | +| `permissions` | int | New permissions for the attendees, see [constants list](constants.md#attendee-permissions). If permissions are not `0` (default), the `1` (custom) permission will always be added. Note that this will reset all custom permissions that have been given to attendees so far. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support setting publishing permissions, e.g. one-to-one conversations + + `400 Bad Request` When the mode is invalid + + `400 Bad Request` When the conversation is a breakout room + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + +## Add conversation to favorites + +* Required capability: `favorites` +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/room/{token}/favorite` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the participant is a guest + + `404 Not Found` When the conversation could not be found for the participant + +## Remove conversation from favorites + +* Required capability: `favorites` +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/room/{token}/favorite` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the participant is a guest + + `404 Not Found` When the conversation could not be found for the participant + +## Set notification level + +* Required capability: `notification-levels` +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/room/{token}/notify` +* Data: + +| field | type | Description | +|---------|------|--------------------------------------------------------------------------------------------------------------| +| `level` | int | The notification level (See [Participant notification levels](constants.md#participant-notification-levels)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the given level is invalid + + `401 Unauthorized` When the participant is a guest + + `404 Not Found` When the conversation could not be found for the participant + +## Set notification level for calls + +* Required capability: `notification-calls` +* Method: `POST` +* Endpoint: `/room/{token}/notify-calls` +* Data: + +| field | type | Description | +|---------|------|-----------------------------------------------------------------------------------------------------------------------------| +| `level` | int | The call notification level (See [Participant call notification levels](constants.md#participant-call-notification-levels)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the given level is invalid + + `401 Unauthorized` When the participant is a guest + + `404 Not Found` When the conversation could not be found for the participant + +## Set message expiration + +* Required capability: `message-expiration` +* Method: `POST` +* Endpoint: `/room/{token}/message-expiration` +* Data: + +| field | type | Description | +|-----------|------|---------------------------------------------------------------------------------------------| +| `seconds` | int | The messages expiration in seconds. If is zero, messages will not be deleted automatically. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Invalid value + + `400 Bad Request` When the conversation is a breakout room + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + +## Set recording consent + +* Required capability: `recording-consent` +* Method: `PUT` +* Endpoint: `/room/{token}/recording-consent` +* Data: + +| field | type | Description | +|--------------------|------|---------------------------------------------------------------------------------------------------------------------------------------------| +| `recordingConsent` | int | New consent setting for the conversation (Only `0` and `1` from the [constants](constants.md#recording-consent-required) are allowed here.) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the consent value is invalid + + `400 Bad Request` When the consent is being enabled while a call is going on + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Open a conversation + +* Required capability: `listable-rooms` +* Method: `PUT` +* Endpoint: `/room/{token}/listable` +* Data: + +| field | type | Description | +|---------|------|--------------------------------| +| `scope` | int | The room listable scope (See [listable scopes](constants.md#listable-scope)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support making it listable (only group and public conversation) + + `400 Bad Request` When the conversation is a breakout room + + `403 Forbidden` When the current user is not a moderator/owner or the conversation is not a public conversation + + `404 Not Found` When the conversation could not be found for the participant + +## Set mention permissions + +* Required capability: `mention-permissions` +* Method: `PUT` +* Endpoint: `/room/{token}/mention-permissions` +* Data: + +| field | type | Description | +|----------------------|------|-----------------------------------------------------------------------------------------------------------| +| `mentionPermissions` | int | New mention permissions for the conversation (See [mention permssions](constants.md#mention-permissions)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support setting mention permissions (only group and public conversation) + + `400 Bad Request` When the conversation is a breakout room + + `400 Bad Request` When permissions value is invalid + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + +## Get conversation capabilities + +See [Capability handling in federated conversations](https://github.com/nextcloud/spreed/issues/10680) to learn which capabilities +should be considered from the local server or from the remote server. + +* Required capability: `federation-v1` +* Method: `GET` +* Endpoint: `/room/{token}/capabilities` + +* Response: + - Status code: + + `200 OK` Get capabilities + + `404 Not Found` When the conversation could not be found for the participant + + - Header: + +| field | type | Description | +|-------------------------------|--------|--------------------------------------------------------------------------------------------| +| `X-Nextcloud-Talk-Proxy-Hash` | string | Sha1 value over the capabilities in case the conversation is hosted **on another server**. | +| `X-Nextcloud-Talk-Hash` | string | Sha1 value over the capabilities in case the conversation is hosted **on this server**. | + + - Data: Server capabilities limited to the `spreed` sub-array or an empty array in case the app is disabled (for the user) diff --git a/docs/coturn.md b/docs/coturn.md new file mode 100644 index 0000000..7c17b0d --- /dev/null +++ b/docs/coturn.md @@ -0,0 +1,153 @@ +# CoTURN configuration + +## Install and setup _coTURN_ as TURN server + +It is recommended to install the latest _coTURN_ version; at the very minimum _coTURN_ 4.5.0.8 should be used. In previous versions there is a bug that causes [the IPv6 UDP sockets created by coTURN not to be freed](https://github.com/coturn/coturn/issues/217). Due to this the _turn_ process ends not being able to open new ports and thus not being able to serve new connections. Moreover, when that happens, even if there are no connections a high CPU load will be caused by the _turn_ process. Therefore, if you can not install _coTURN_ 4.5.0.8 or a later version you should restart the _turn_ process periodically to work around that issue. + +## 1. Download and install + +- On **Debian and Ubuntu** there are official repository packages available: + ``` + sudo apt install coturn + ``` +- For many **other Linux derivatives and UNIX-likes** packages can be found on [https://pkgs.org/download/coturn](https://pkgs.org/download/coturn) +- For all **other** cases check out the [Downloads in the wiki of coTURN](https://github.com/coturn/coturn/wiki/Downloads) + + +## 2. Make coturn run as daemon on startup + +- On **Debian and Ubuntu** you just need to enable the deployed sysvinit service by adjusting the related environment variable: + ``` + sudo sed -i '/TURNSERVER_ENABLED/c\TURNSERVER_ENABLED=1' /etc/default/coturn + ``` + +- Since **Debian Buster** and **Ubuntu disco** the package ships a systemd unit, which does not use `/etc/default/coturn` but is enabled automatically on installation. To check whether a systemd unit is available: + ``` + ls -l /lib/systemd/system/coturn.service + ``` + +- If you installed coTURN manually, you may want to create a sysvinit service or systemd unit, or use another method to run the following during boot: + ``` + /path/to/turnserver -c /path/to/turnserver.conf -o + ``` + +- `-o` starts the server in daemon mode, `-c` defines the path to the config file. +- There is also an official example available at [https://github.com/coturn/coturn/blob/master/examples/etc/coturn.service](https://github.com/coturn/coturn/blob/master/examples/etc/coturn.service) + +### Running coTURN on privileged ports + +On some GNU/Linux distributions (for example, **Ubuntu Focal and later**) when _coTURN_ is installed from the official package the _coturn_ service is executed as an unprivileged user like _turnserver_. Due to this by default _coTURN_ can not use privileged ports, like port 443. + +Depending on the system configuration Linux kernel capabilities could be used to overcome this limitation. Capabilities can be associated with executable files using _setcap_, so you could allow the _/usr/bin/turnserver_ executable to bind sockets to privileged ports with: +``` +setcap cap_net_bind_service=+ep /usr/bin/turnserver +``` + +Alternatively, if the system configuration does not allow to set the capability, or if the coturn process needs to access files only readable by root like an SSL certificate for TLS connections, you could configure the _coturn_ service to be executed by root instead of the unprivileged user by executing: +``` +systemctl edit coturn +``` +and then setting the following configuration, which will override the default one: +``` +[Service] +User=root +Group=root +``` + +## 3. Configure `turnserver.conf` for usage with Nextcloud Talk + +- Next you need to adjust the coTURN configuration file to work with Nextcloud Talk. +- Choose the listening port (default is _3478_) and an authentication secret, where a random hex is recommended + ``` + openssl rand -hex 32 + ``` + +- Then uncomment/edit the following settings accordingly: + +``` +listening-port= +fingerprint +lt-cred-mech # Only on coTURN below v4.5.0.8! +use-auth-secret +static-auth-secret= +realm=your.domain.org +total-quota=0 +bps-capacity=0 +stale-nonce +no-loopback-peers # Only on coTURN below v4.5.1.0! +no-multicast-peers +``` + +- Support for TLS connections to the TURN server has been added in Talk 11. + + In some cases clients can be behind very restrictive firewalls that only allow TLS connections; in those cases the clients would be able to connect with other clients or the High Performance Backend only through a TURN server and a TLS connection. However, please note that TLS connections do not provide any additional security, as media streams are always end-to-end (When the High Performance Backend is used the High Performance Backend is one of the ends; in that case the media streams are not end-to-end encrypted between the participants but only between participants and the High Performance Backend) encrypted in WebRTC; enabling TLS is just a matter of providing the maximum compatibility. + + Also note that even with TURN over TLS a client may not be able to connect with the TURN server if the firewall performs deep packet inspection and drops packets to port 443 that are not really HTTPS packets. This would be a corner case, though, as given that the connection is encrypted in order to inspect the packets that means that the firewall acts as a man-in-the-middle and the connection is not actually encrypted end-to-end. There is nothing that can be done in that case, but it should be rather uncommon. + + In order to use TLS connections to the TURN server the TURN server requires an SSL certificate and, therefore, a domain. The path to the certificate file must be set in the [`cert` parameter](https://github.com/coturn/coturn/blob/upstream/4.5.1.3/README.turnserver#L442-L446), and the private key file must be set in the [`pkey` file](https://github.com/coturn/coturn/blob/upstream/4.5.1.3/README.turnserver#L448-L452). Besides that in [Talk settings](#4-configure-nextcloud-talk-to-use-your-turn-server) you must set the TURN server scheme as `turns:` or `turn: and turns:`. + + Note that, even if TLS provides the maximum compatibility, using a domain can cause problems with Firefox on a very specific scenario: [currently Firefox does not perform DNS requests through HTTP tunnels](https://bugzilla.mozilla.org/show_bug.cgi?id=1239006), so even if the WebRTC connection would work through the TURN server the TURN server may not be reachable. + +- The recommended listening port is port 443, even if only _turn:_ but not _turns:_ is used. In some cases firewalls restrict connections only to port 443, but they do not actually check whether the connection is a TLS connection or not. Nevertheless, as mentioned above using both _turn:_ and _turns:_ is recommended for maximum compatibility. + +- The `total-quota` parameter limits the number of allowed simultaneous connections to the TURN server. Along with [`max-bps` and `bps-capacity`](https://github.com/coturn/coturn/blob/upstream/4.5.1.3/README.turnserver#L414-L423) it can be used to limit the effects of a [DoS attack against the TURN server](https://tools.ietf.org/html/rfc8656#section-21.3.1). The value of _0_ shown above means _unlimited_; if a connection limit is desired it should be adjusted depending on your specific setup. + + Please note that the number of allowed simultaneous connections limited by `total-quota` are not only fully established connections, but also the connections being tested during the negotiation phase used to establish the actual connection. During the negotiation phase each peer generates several candidates (an IP address and port) that can be used to establish a connection with that peer. Then the peers try to establish a connection between them with different candidate combinations until a valid one is found. If there is a TURN server, then the client will connect to the TURN server too, and it will generate additional candidates with the IP address of the TURN server (the so-called "relay" candidates). Each of those relay candidates will try to connect to the candidates of the other peer, and each of those connection attempts allocates a slot in the available quota of the TURN server. If there are no more available slots "Allocation Quota Reached" message is written to coTURN logs. + + In most cases the candidates that will be generated, and thus the connections to the TURN server during the negotiation phase, can not be known beforehand. When Janus is used the number of candidate combinations is reduced, as the Janus candidates can be known, but the number of relay candidates that will be generated by the client may still be unknown. For example, it seems that browsers generate one relay candidate for each host candidate. Host candidates are those with the IP address known to the client, so typically there will be one for each network device in the system; in the case of Firefox host candidates are also generated for the IP addresses of local bridge network devices. + + You should take all that into account if you intend to set a specific value to the `total-quota` parameter, but for maximum availability an unlimited quota is recommended. + +- If your TURN server is running **not behind a NAT**, but with direct www connection and **static public IP**, than you can limit the IPs it listens at and answers with, by setting those as `listening-ip` and `relay-ip`. On larger deployments it is recommended to run your TURN server on a dedicated machine that is directly accessible from the internet. + +- The following settings can be used to adjust the **logging behaviour**. On SBCs with SDcards you may want to adjust this, as by default coTURN logs very verbose. The config file explains everything very well: + +``` +no-stdout-log +log-file=... +syslog +simple-log +``` + +- `sudo systemctl restart coturn` or corresponding restart method + +### Disabling UDP or TCP protocols + +Unless you have some special need, you should always enable both UDP and TCP protocols in your TURN server, as that provides the maximum compatibility. However, if you must limit the connections from clients to the TURN server through UDP or TCP protocols you can do that by enabling one the following settings, depending on the case: +``` +no-udp +no-tcp +``` + +Please note that those settings only limit the protocols from the client to the TURN server. The relayed protocol from the TURN server to the other end (Janus if the High Performance Backend is being used, another client or TURN server if it is not) must be UDP; _coTURN_ provides the setting `no-udp-relay` to disable the UDP protocol for the relayed connection, but enabling it would cause the TURN server to be unusable in a WebRTC context. + +Also keep in mind that disabling the UDP protocol from clients to the TURN server with `no-udp` in practice disables STUN on that server, as neither Janus nor the clients currently support STUN over TCP. + +### TURN server and internal networks + +If your TURN server has access to an internal network you should prevent access to the local/internal IPs from the TURN server, except those that are actually needed (like the High Performance Backend if you are using it) by setting the [`denied-peer-ip` and `allowed-peer-ip` parameters](https://github.com/coturn/coturn/blob/upstream/4.5.1.3/README.turnserver#L523-L537). For example: +``` +allowed-peer-ip={IP_ADDRESS_OF_THE_HIGH_PERFORMANCE_BACKEND} +denied-peer-ip=0.0.0.0-0.255.255.255 +denied-peer-ip=10.0.0.0-10.255.255.255 +denied-peer-ip=100.64.0.0-100.127.255.255 +denied-peer-ip=127.0.0.0-127.255.255.255 +denied-peer-ip=169.254.0.0-169.254.255.255 +denied-peer-ip=172.16.0.0-172.31.255.255 +denied-peer-ip=192.0.0.0-192.0.0.255 +denied-peer-ip=192.0.2.0-192.0.2.255 +denied-peer-ip=192.88.99.0-192.88.99.255 +denied-peer-ip=192.168.0.0-192.168.255.255 +denied-peer-ip=198.18.0.0-198.19.255.255 +denied-peer-ip=198.51.100.0-198.51.100.255 +denied-peer-ip=203.0.113.0-203.0.113.255 +denied-peer-ip=240.0.0.0-255.255.255.255 +``` + +Otherwise, [a malicious user could access services in that internal network through your TURN server](https://www.rtcsec.com/2020/04/01-slack-webrtc-turn-compromise/). + +Alternatively you could of course prevent access to that internal network from the TURN server by means of a firewall. + +## Continue with the integration into Nextcloud Talk + +Now you can go back to the [TURN overview page](TURN.md#4-configure-nextcloud-talk-to-use-your-turn-server). diff --git a/docs/developer-setup.md b/docs/developer-setup.md new file mode 100644 index 0000000..f32609b --- /dev/null +++ b/docs/developer-setup.md @@ -0,0 +1,229 @@ +# Nextcloud Talk development setup + +The following guide is intended to setup an environment for Nextcloud Talk development. It is _not_ intended to be used in production at any time. + +## Preface + +Nextcloud Talk delivers private audio/video conferencing and text chat through browser and mobile apps. It consists of several components, some of which are optional: + +* **Nextcloud Server**: The core component of Nextcloud that offers file storage capabilities and the framework for building/running apps. + +* **Nextcloud Talk Server**: The Nextcloud app that is the core of Nextcloud Talk. It consists of the backend (PHP) and a frontend (Vue.js) to use Nextcloud Talk directly in the web browser. **Important**: Due to legacy reasons, the app id of "talk" is "spreed"! + +* **High performance backend**: _(optional)_ The high performance backend is an optional component that consists of a signaling server and a WebRTC gateway. It ensures that calls with more than 4 participants work smoothly. It is also required for features like typing indicators or federated calling to work properly. + +* **Nextcloud Talk Recording Server**: _(optional)_ The Nextcloud Talk recording server is required when calls should be recorded on the server side. It takes care of the recording itself and uploading the result to Nextcloud. + +* **Nextcloud Talk Android**: _(optional)_ Nextcloud Talk Android is the recommended way of using Nextcloud Talk on Android devices. Mostly written in Kotlin nowadays, it still contains some Java code. + +* **Nextcloud Talk iOS**: _(optional)_ The recommended way of using Nextcloud Talk on your iOS devices. Major parts are still written in Objective-C while the transition to Swift is an ongoing effort. + +## Prerequirements + +There are many ways of running Nextcloud for development purposes. In the following guide we are using a docker based installation of Nextcloud. The following components are required: + +* A working docker installation (see https://docs.docker.com/engine/install/) +* Node.js >= 20 and NPM >= 10 (optionally, see _Prepare Nextcoud Talk for development_ below for an alternative) +* PHP Composer (optionally, see _Prepare Nextcoud Talk for development_ below for an alternative) +* Git + +## Install the development environment + +Clone `nextcloud-docker-dev` in a directory of your choice: + +```shell +cd /path/to/directory +git clone https://github.com/juliushaertl/nextcloud-docker-dev +cd nextcloud-docker-dev +``` + +`bootstrap.sh` is used to setup the enviroment, it supports multiple parameters that may depend on your development focus: + +```shell +bootstrap.sh [--full-clone|--clone-no-blobs] [--clone-all-apps-filtered] [--] APPS + +This command will initialize the debug environment for app developers. + +The following options can be provided: + + --full-clone Clone the server repository with the complete history included + --clone-no-blobs Clone the server repository with the history but omitting the + file contents. A network connection might be required if checking + out commits is done. + --full-clone and --clone-no-blobs is mutually exclusive. + --clone-all-apps-filtered + Do not only reduce the history of the server repository but also + the cloned apps. + + APPS The apps to add to the development setup on top of the default apps +``` + +#### Example 1: Latest `master/main` without history for server + +Clones only the latest `master/main` from Nextcloud Server without history, but full history for all other apps, including Nextcloud Talk. This is perfectly fine if you plan on working with the latest version of Nextcloud / Nextcloud Talk. + +```shell +./bootstrap.sh -- spreed +``` + +#### Example 2: Latest `master/main` with full history, but no blobs for server + +Clones the full Nextcloud Server repository, but omitting file contents. All other apps, including Nextcloud Talk are still fully cloned. This way you also have the full history of Nextcloud Server, without needing to download everything at once + +```shell +./bootstrap.sh --clone-no-blobs -- spreed +``` + +#### Example 3: Latest `master/main` with full history (_Slow!_) + +Clones the full Nextcloud Server repository and all apps with full history. This is the slowest option + +```shell +./bootstrap.sh --full-clone -- spreed +``` + +### Install `mkcert` for self-signed certificate support + +Nextcloud Talk needs camera and microphone access for audio/video conferencing. Some browsers do not allow access to these components, if the connection was not done in a secure way. Therefore we can use `mkcert` to have trusted self-signed certificates. + +* Follow the installation instructions for your OS at https://github.com/FiloSottile/mkcert?tab=readme-ov-file#installation +* Execute `mkcert -install` create a new CA and trust it +* Execute `./scripts/update-certs` to automatically generate certificates for all possible containers used for development + +### Prepare Nextcoud Talk for development + +Enter the Nextcloud Talk directory and install the required components for development: + +```shell +cd workspace/server/apps-extra/spreed +make dev-setup +``` + +If you do not have NPM, Node or Composer you can run all of them from inside the container instead (note that they will be run as root, so the file owner of the created files will be also root): +```shell +docker compose exec nextcloud bash --login -c "cd /var/www/html/apps-extra/spreed && make dev-setup" +``` + +## Start Nextcloud + +In the directory of `nextcloud-docker-dev` execute the following: + +```shell +docker compose up -d nextcloud +``` + +Enable Nextcloud Talk: + +```shell +./scripts/occ.sh nextcloud -- app:enable spreed +``` + +After that you should be able to login with `admin` / `admin` at https://nextcloud.local + +### Enable High Performance Backend + +If you want to enable the HPB for your development setup, just execute + +``` +./scripts/enable-talk-hpb.sh nextcloud +``` + +to start the needed containers and add the configuration to the Nextcloud installation. You can check if everything is working in Settings -> Talk -> High Performance Backend. + +### Enable Nextcloud Talk Recording Server + +**Important:** Make sure that the HPB is correctly running! + +Start the container of the recording server: + +``` +docker compose up -d talk-recording +``` + +Go to the admin settings of talk and add the recording server (`http://talk-recording.local` with shared secret `6789`) + +### Use federation between 2 Nextcloud Servers + +The provided `docker-compose.yml` file from `nextcloud-docker-dev` supports spinning up multiple instances out of the box. For the `master/main` branch, up to 3 instances can be started (e.g. `docker compose up -d nextcloud nextcloud2 nextcloud3`). This allows easy testing/development for federated scenarios. + +1. Make sure to have 2 instances of Nextcloud running with + + docker compose up -d nextcloud nextcloud2 + +2. In case of federated calling, the HPB needs to be enabled on both instances + + ./scripts/enable-talk-hpb.sh nextcloud + ./scripts/enable-talk-hpb.sh nextcloud2 + +3. Allow self-signed certs on both instances + + ./scripts/occ.sh nextcloud -- config:system:set sharing.federation.allowSelfSignedCertificates --value true --type bool + ./scripts/occ.sh nextcloud2 -- config:system:set sharing.federation.allowSelfSignedCertificates --value true --type bool + +4. Copy and import the certificates to the other instance + + docker compose cp data/ssl/nextcloud2.local.crt nextcloud:/tmp + docker compose cp data/ssl/nextcloud.local.crt nextcloud2:/tmp + + ./scripts/occ.sh nextcloud2 -- security:certificates:import /tmp/nextcloud.local.crt + ./scripts/occ.sh nextcloud -- security:certificates:import /tmp/nextcloud2.local.crt + +5. Optional: Verify certs + + ./scripts/occ.sh nextcloud2 -- security:certificates + ./scripts/occ.sh nextcloud -- security:certificates + +6. Enable federation in the admin settings of Nextcloud Talk or alternatively via occ: + + ./scripts/occ.sh nextcloud -- config:app:set spreed federation_enabled --value yes + ./scripts/occ.sh nextcloud2 -- config:app:set spreed federation_enabled --value yes + +### Rebuild / update Talk after code changes + +#### JavaScript + +If you modify any JavaScript file, either directly or by switching to a different branch, you will need to rebuild them. You can do that with: + +```shell +cd workspace/server/apps-extra/spreed +make build-js +``` + +For JavaScript development rather than manually rebuilding the files whenever you modify them you can instead run a watcher that will automatically rebuild them when they are changed: +```shell +cd workspace/server/apps-extra/spreed +make watch-js +``` + +Note, however, that in some cases the watcher may stop running (for example, if it gets killed by the system after some time due to its RAM consumption), so you might want to check it from time to time. + +Also note that both `make build-js` and `make watch-js` are just wrappers for `npm run dev` and `npm run watch`, so you could run those commands instead if they feel more familiar. + +No matter if you manually rebuilt the JavaScript files or if you use the watcher note that you will need to force refresh Talk in the browser, as otherwise the previous version of the built JavaScript files could be cached and used instead of the latest one. + +Besides manually force refreshing the page you can disable the cache in the _Network_ tab of the developer tools of the browser, but keep in mind that it will only have effect if the developer tools are open (and the _Network_ tab might need to be open once after the developer tools were open, even if the cache was already disabled). + +In the case of Firefox you can disable the cache in all cases by opening `about:config` and setting `browser.cache.disk.enable` and `browser.cache.memory.enable` to `false`. + +If you do not have NPM or Node you can rebuild the JavaScript files from inside the container instead (like before, note that the file owner of the created files will be also root): +```shell +docker compose exec nextcloud bash --login -c "cd /var/www/html/apps-extra/spreed && make build-js" +``` + +Or, in the case of the watcher, with: +```shell +docker compose exec nextcloud bash --login -c "cd /var/www/html/apps-extra/spreed && make watch-js" +``` + +#### PHP dependencies + +PHP files themselves do not need to be rebuilt, although if the PHP dependencies change they need to be updated. Note that this does not happen frequently, so in most cases you can switch to another branch without needing to update the PHP dependencies. Nevertheless, if the PHP dependencies changed (that is, if the `composer.lock` file changed) you can update them with: +```shell +cd workspace/server/apps-extra/spreed +make composer-install-dev +``` + +If you do not have Composer you can update the PHP dependencies from inside the container instead (like before, note that the file owner of the created files will be also root): +```shell +docker compose exec nextcloud bash --login -c "cd /var/www/html/apps-extra/spreed && make composer-install-dev" +``` diff --git a/docs/eturnal.md b/docs/eturnal.md new file mode 100644 index 0000000..5add3c7 --- /dev/null +++ b/docs/eturnal.md @@ -0,0 +1,147 @@ +# eturnal configuration + +## Install and setup _eturnal_ as TURN server + +Quick-Test instructions in a [Linux Shell](https://github.com/processone/eturnal/blob/master/QUICK-TEST.md) or with [Docker](https://github.com/processone/eturnal/blob/master/docker-k8s/QUICK-TEST.md) are available as well. + +## 1. Download and install + +eturnal is available from a variety of sources such as native package managers, binary packages, installation from source or [container image](https://eturnal.net/documentation/code/docker.html). They are all described [here](https://github.com/processone/eturnal#installation). + + +## 2. Make eturnal run as daemon on startup + +- On Linux systems, the eturnal server is usually invoked by systemd. + ``` + sudo systemctl status eturnal + ``` + +- For non-systemd platforms, example init and OpenRC scripts are shipped below the `etc` directory. + + For controlling eturnal, the eturnalctl command can be used; see: + ``` + eturnalctl help + ``` + +### Running eturnal on privileged ports + +On systemd-managed systems, the systemd unit grants `NET_BIND_SERVICE` capability to the [service](https://github.com/processone/eturnal/blob/29e82f260d369a39bd4a395cb981e914b141875b/config/eturnal.service#L23). + +Depending on the system configuration Linux kernel capabilities could be used to overcome this limitation. Capabilities can be associated with executable files using _setcap_, so you could allow eturnal's process manager _beam.smp_ in eturnal's `lib` directory, e.g.: +``` +setcap 'cap_net_bind_service=+ep' $(find /opt/eturnal -name beam.smp) +``` + +## 3. Configure `eturnal.yml` for usage with Nextcloud Talk + +- Next you need to adjust eturnal's configuration file in `/etc/eturnal.yml` to work with Nextcloud Talk. This file uses the (indentation-sensitive!) YAML format. The shipped configuration file contains further explanations. +- Choose the listening port (default is _3478_) and an authentication secret, where a random hex is recommended + ``` + openssl rand -hex 32 + ``` + +- Then uncomment/edit the following settings accordingly: + +```yaml +eturnal: + ## Shared secret for deriving temporary TURN credentials (default: $RANDOM): + secret: "long-and-cryptic" # Shared secret, CHANGE THIS. + + ## The server's public IPv4 address (default: autodetected): + #relay_ipv4_addr: "203.0.113.4" + ## The server's public IPv6 address (optional): + #relay_ipv6_addr: "2001:db8::4" + + listen: + - + ip: "::" + port: + transport: udp + - + ip: "::" + port: + transport: tcp +``` + +- Support for TLS connections to the TURN server has been added in Talk 11. + + In some cases clients can be behind very restrictive firewalls that only allow TLS connections; in those cases the clients would be able to connect with other clients or the High Performance Backend only through a TURN server and a TLS connection. However, please note that TLS connections do not provide any additional security, as media streams are always end-to-end (When the High Performance Backend is used the High Performance Backend is one of the ends; in that case the media streams are not end-to-end encrypted between the participants but only between participants and the High Performance Backend) encrypted in WebRTC; enabling TLS is just a matter of providing the maximum compatibility. + + Also note that even with TURN over TLS a client may not be able to connect with the TURN server if the firewall performs deep packet inspection and drops packets to port 443 that are not really HTTPS packets. This would be a corner case, though, as given that the connection is encrypted in order to inspect the packets that means that the firewall acts as a man-in-the-middle and the connection is not actually encrypted end-to-end. There is nothing that can be done in that case, but it should be rather uncommon. + + In order to use TLS connections to the TURN server the TURN server requires an SSL certificate and, therefore, a domain. The path to the certificate file must be set in the [`tls_crt_file` parameter](https://eturnal.net/documentation/#tls_crt_file), and the private key file must be set in the [`tls_key_file` parameter](https://eturnal.net/documentation/#tls_key_file) within eturnal's configuration file as well as corresponding [listen](https://eturnal.net/documentation/#listen)er needs to be enabled. To listen for encrypted and unencrypted traffic on one port, the transport can be set to `auto` for `tcp`/`tls` multiplexing. + +```yaml +eturnal: + ... + listen: + ... + - + ip: "::" + port: + transport: auto + ... + ## TLS certificate/key files (must be readable by 'eturnal' user!): + tls_crt_file: /etc/eturnal/tls/crt.pem + tls_key_file: /etc/eturnal/tls/key.pem + ... +``` + + Besides that in [Talk settings](TURN.md#4-configure-nextcloud-talk-to-use-your-turn-server) you must set the TURN server scheme as `turns:` or `turn: and turns:`. + + Note that, even if TLS provides the maximum compatibility, using a domain can cause problems with Firefox on a very specific scenario: [currently Firefox does not perform DNS requests through HTTP tunnels](https://bugzilla.mozilla.org/show_bug.cgi?id=1239006), so even if the WebRTC connection would work through the TURN server the TURN server may not be reachable. + +- The recommended listening port is port 443, even if only _turn:_ but not _turns:_ is used. In some cases firewalls restrict connections only to port 443, but they do not actually check whether the connection is a TLS connection or not. Nevertheless, as mentioned above using both _turn:_ and _turns:_ is recommended for maximum compatibility. + +- If your TURN server is running **not behind a NAT**, but with direct www connection and **static public IP**, than you can limit the IPs it listens at and answers with, by setting those as `ip` and `relay_ipv4_addr`/`relay_ipv6_addr` (IPv6 is optional). On larger deployments it is recommended to run your TURN server on a dedicated machine that is directly accessible from the internet. + +- If `eturnal` was started by systemd, log files are written into the `/var/log/eturnal` directory by default. In order to log to the [journal](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) instead, the `log_dir` option can be set to `stdout` in the configuration file. + +- `sudo systemctl restart eturnal` or corresponding restart method + +### TURN server and internal networks + +If your TURN server has access to an internal network you should prevent access to the local/internal IPs from the TURN server, except those that are actually needed (like the High Performance Backend if you are using it) by setting the `blacklist`, [see also the official documentation](https://eturnal.net/documentation/#blacklist): + +```yaml +eturnal: + ... + ## Reject TURN relaying from/to the following addresses/networks: + blacklist: # This is the default blacklist. + - "127.0.0.0/8" # IPv4 loopback. + - "::1" # IPv6 loopback. + - recommended # Expands to a number of networks recommended to be + # blocked, but includes private networks. Those + # would have to be 'whitelist'ed if eturnal serves + # local clients/peers within such networks. + ... +``` + +To whitelist IP addresses (like the High Performance Backend if you are using it) or specific (private) networks, you need to **add** a whitelist part into the configuration file, e.g.: + +```yaml +eturnal: + ... + whitelist: + - {IP_ADDRESS_OF_THE_HIGH_PERFORMANCE_BACKEND} + - "192.168.0.0/16" + - "203.0.113.113" + - "2001:db8::/64" + ... +``` + +The more specific, the better. + +Otherwise, [a malicious user could access services in that internal network through your TURN server](https://www.rtcsec.com/2020/04/01-slack-webrtc-turn-compromise/). + +Alternatively you could of course prevent access to that internal network from the TURN server by means of a firewall. + +## eturnalctl opterations script + +`eturnal` offers a handy [operations script](https://eturnal.net/documentation/#Operation) which can be called e.g. to check, whether the service is up, to restart the service, to query how many active sessions exist, to change logging behaviour and so on. + +Hint: If `eturnalctl` is not part of your `$PATH`, consider either sym-linking it (e.g. ´ln -s /opt/eturnal/bin/eturnalctl /usr/local/bin/eturnalctl´) or call it from the default `eturnal` directory directly: e.g. `/opt/eturnal/bin/eturnalctl info` + +## Continue with the integration into Nextcloud Talk + +Now you can go back to the [TURN overview page](TURN.md#4-configure-nextcloud-talk-to-use-your-turn-server). diff --git a/docs/events.md b/docs/events.md new file mode 100644 index 0000000..895526b --- /dev/null +++ b/docs/events.md @@ -0,0 +1,265 @@ +# PHP Events + +See the general [Nextcloud Developers - Events](https://docs.nextcloud.com/server/latest/developer_manual/basics/events.html) documentation for information how to listen to the events. + +## Conversation related events + +### Conversation list fetched + +* Before event: `OCA\Talk\Events\BeforeRoomsFetchEvent` +* After event: *Not available* +* Since: 18.0.0 + +### Conversation created + +* Before event: *Not available* +* After event: `OCA\Talk\Events\RoomCreatedEvent` +* Since: 18.0.0 + +### Conversation deleted + +* Before event: `OCA\Talk\Events\BeforeRoomDeletedEvent` +* After event: `OCA\Talk\Events\RoomDeletedEvent` +* Since: 18.0.0 + +### Conversation modified + +* Before event: `OCA\Talk\Events\BeforeRoomModifiedEvent` +* After event: `OCA\Talk\Events\RoomModifiedEvent` +* Since: 18.0.0 + +### Conversation extended + +When a new conversation is created from a one-to-one conversation + +* Before event: *Not available* +* After event: `OCA\Talk\Events\RoomExtendedEvent` +* Since: 21.1.0 + +### Lobby modified + +* Before event: `OCA\Talk\Events\BeforeLobbyModifiedEvent` +* After event: `OCA\Talk\Events\LobbyModifiedEvent` +* Since: 18.0.0 + +### Federated conversation synced + +When multiple properties of a federated conversation are synced, the individual +"Conversation modified" and "Lobby modified" events are still triggered, but a +listener could decide to not follow up individual but only after all properties +where modified. + +* Before event: `OCA\Talk\Events\BeforeRoomSyncedEvent` +* After event: `OCA\Talk\Events\RoomSyncedEvent` +* Since: 20.0.0 + +### Call started + +* Before event: `OCA\Talk\Events\BeforeCallStartedEvent` +* After event: `OCA\Talk\Events\CallStartedEvent` + The after event might be skipped if the request lost the race to update the database. + A parallel request will have triggered the before and after events in the meantime. +* Since: 20.0.0 + +### Call ended for everyone + +* Before event: `OCA\Talk\Events\BeforeCallEndedForEveryoneEvent` +* After event: `OCA\Talk\Events\CallEndedForEveryoneEvent` +* Since: 18.0.0 +* Since: 20.0.0 Extends the abstract `ACallEndedEvent` + +### Call ended + +When the last participant is leaving the call, the session expired or the participant was removed. + +* Before event: `OCA\Talk\Events\BeforeCallEndedEvent` +* After event: `OCA\Talk\Events\CallEndedEvent` + The after event might be skipped if the request lost the race to update the database. + A parallel request will have triggered the before and after events in the meantime. +* Since: 20.0.0 + +### Conversation password verify + +Allows to verify a password and set a redirect URL for the invalid case + +* Event: `OCA\Talk\Events\RoomPasswordVerifyEvent` +* Since: 18.0.0 + +## Participant related events + +### Attendees added + +* Before event: `OCA\Talk\Events\BeforeAttendeesAddedEvent` + * Since: 18.0.0 +* After event: `OCA\Talk\Events\AttendeesAddedEvent` +* Since: 12.0.0 + +### Attendees removed + +* Before event: *Not available* +* After event: `OCA\Talk\Events\AttendeesRemovedEvent` +* Since: 12.0.0 + +### Attendee removed + +* Before event: `OCA\Talk\Events\BeforeAttendeeRemovedEvent` +* After event: `OCA\Talk\Events\AttendeeRemovedEvent` +* Since: 18.0.0 + +### User joined a conversation + +* Before event: `OCA\Talk\Events\BeforeUserJoinedRoomEvent` +* After event: `OCA\Talk\Events\UserJoinedRoomEvent` +* Since: 18.0.0 + +### Federated user joined a conversation + +* Before event: `OCA\Talk\Events\BeforeFederatedUserJoinedRoomEvent` +* After event: `OCA\Talk\Events\FederatedUserJoinedRoomEvent` +* Since: 18.0.0 + +### Guest joined a conversation + +* Before event: `OCA\Talk\Events\BeforeGuestJoinedRoomEvent` +* After event: `OCA\Talk\Events\GuestJoinedRoomEvent` +* Since: 18.0.0 + +### Email invitation send + +* Before event: `OCA\Talk\Events\BeforeEmailInvitationSentEvent` +* After event: `OCA\Talk\Events\EmailInvitationSentEvent` +* Since: 18.0.0 + +### Session left a conversation + +This is the invert action to `User joined a conversation`, `Federated user joined a conversation` and `Guest joined a conversation` + +* Before event: `OCA\Talk\Events\BeforeSessionLeftRoomEvent` +* After event: `OCA\Talk\Events\SessionLeftRoomEvent` +* Since: 18.0.0 + +### Participant modified + +* Before event: `OCA\Talk\Events\BeforeParticipantModifiedEvent` +* After event: `OCA\Talk\Events\ParticipantModifiedEvent` +* Since: 18.0.0 + +### Call notification send + +* **internal:** This event is not part of the public API and you should not rely on it +* Event: `OCA\Talk\Events\CallNotificationSendEvent` +* Since: 18.0.0 + +### Guests cleaned up + +Remove guests without an active session + +* Before event: `OCA\Talk\Events\BeforeGuestsCleanedUpEvent` +* After event: `OCA\Talk\Events\GuestsCleanedUpEvent` +* Since: 18.0.0 + +## Chat related events + +### Parse chat message + +Used to parse mentions, replace parameters in messages with rich objects, transform system messages into readable and translated chat messages etc. + +* Event: `OCA\Talk\Events\MessageParseEvent` +* Since: 18.0.0 + +### Chat message sent + +* Before event: `OCA\Talk\Events\BeforeChatMessageSentEvent` +* After event: `OCA\Talk\Events\ChatMessageSentEvent` +* Since: 18.0.0 +* Since: 19.0.0 - Method `getParent()` was added + +### Duplicate share sent + +Sharing the same file a second time is prevented by the API. But this event is dispatched, so that the chat message can be created nevertheless. + +* Before event: `OCA\Talk\Events\BeforeDuplicateShareSentEvent` +* After event: *Not available* +* Since: 18.0.0 + +### System message sent + +`shouldSkipLastActivityUpdate` indicates whether multiple system messages are being sent. +In case you only need to be notified after the last system message was posted, +listen to the `OCA\Talk\Events\SystemMessagesMultipleSentEvent` event instead. + +* Before event: `OCA\Talk\Events\BeforeSystemMessageSentEvent` +* After event: `OCA\Talk\Events\SystemMessageSentEvent` +* Final event: `OCA\Talk\Events\SystemMessagesMultipleSentEvent` - Only sent once as per above explanation +* Since: 18.0.0 +* Since: 19.0.0 - Method `getParent()` was added + +### Reaction added + +* Before event: `OCA\Talk\Events\BeforeReactionAddedEvent` +* After event: `OCA\Talk\Events\ReactionAddedEvent` +* Since: 21.0.0 + +### Reaction removed + +* Before event: `OCA\Talk\Events\BeforeReactionRemovedEvent` +* After event: `OCA\Talk\Events\ReactionRemovedEvent` +* Since: 21.0.0 + +## Other events + +### Turn servers get + +* Before event: `OCA\Talk\Events\BeforeTurnServersGetEvent` +* After event: *Not available* +* Since: 18.0.0 + +### Signaling room properties sent + +* Before event: `OCA\Talk\Events\BeforeSignalingRoomPropertiesSentEvent` +* After event: *Not available* +* Since: 18.0.0 + +### Signaling response sent + +* Before event: `OCA\Talk\Events\BeforeSignalingResponseSentEvent` +* After event: *Not available* +* Since: 18.0.0 + +### Bot enabled + +Sends a request to the bot server, informing it was added in a chat. + +* Event: `OCA\Talk\Events\BotEnabledEvent` +* Since: 20.0.0 + +### Bot disabled + +Sends a request to the bot server, informing it was removed from a chat. + +* Event: `OCA\Talk\Events\BotDisabledEvent` +* Since: 20.0.0 + +### Bot invoke + +Sends the request as an event when the bot has the feature `event` + +* Event: `OCA\Talk\Events\BotInvokeEvent` +* Since: 21.0.0 + +## Inbound events to invoke Talk + +### Bot install + +Dispatch this event in your app to install a bot on this server + +* Event: `OCA\Talk\Events\BotInstallEvent` +* Since: 17.0.0 +* Since: 19.0.0 - Features flag was added + +### Bot uninstall + +Dispatch this event in your app to install a bot on this server + +* Event: `OCA\Talk\Events\BotUninstallEvent` +* Since: 17.0.0 diff --git a/docs/file-darg-and-drop.png b/docs/file-darg-and-drop.png new file mode 100644 index 0000000..a5a5739 Binary files /dev/null and b/docs/file-darg-and-drop.png differ diff --git a/docs/file-darg-and-drop.png.license b/docs/file-darg-and-drop.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/file-darg-and-drop.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/global.md b/docs/global.md new file mode 100644 index 0000000..6ae8ff8 --- /dev/null +++ b/docs/global.md @@ -0,0 +1,58 @@ +# Global API status and headers + +## Maintenance mode + +Server is in maintenance mode, when the header is not available it could be a missing execution of a database upgrade or any other general server failure. + +* Response: + - Status code: + + `503 Service Unavailable` + + - Header: + +| field | type | Description | +|--------------------------------|------|-------------| +| `X-Nextcloud-Maintenance-Mode` | int | Value `1` | + + +## Rate limit + +The remote address sent too many requests targeting the same endpoint, see the [Nextcloud Developer manual](https://docs.nextcloud.com//server/stable/developer_manual/basics/controllers.html#rate-limiting) for more information. + +* Response: + - Status code: + + `429 Too Many Requests` + +## Brute force protection + +The remote address sent too many requests targeting the same action, see the [Nextcloud Developer manual](https://docs.nextcloud.com//server/stable/developer_manual/basics/controllers.html#brute-force-protection) for more information. + +* Response: + - Status code: + + `429 Too Many Requests` + +## Outdated client + +From time to time it is unavoidable to break compatibility. In such cases we try to be as helpful for the users as possible and instead of behaving unexpected, a dedicated error response is returned and the clients should handle it properly and show a message that the client is outdated and needs to be upgraded in order to continue using this server. + +* Response: + - Status code: + + `426 Upgrade Required` + - Body: + + `ocs.meta.message` contains the minimum required version of the used client + +## Federation - Not supported + +Endpoints without a "Federation capability: `federation-vX`" will return a `406 Not Acceptable` status code, when called with tokens that actually refer to a so-called proxy conversation on the local server. + +* Response: + - Status code: + + `406 Not Acceptable` + +## Federation - Remote error + +When a request is performed on a proxy conversation and the host can not be reached `422 Unprocessable Content` will be returned. The only exception will be leaving the room, where the request will still execute it's part locally so the user is no longer bothered. A background job will be queued to retry informing the remote server about the leave automatically. + +* Response: + - Status code: + + `422 Unprocessable Content` diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c880d33 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,53 @@ +![Screenshot of the chat in Nextcloud Talk](chat.png) + +# Nextcloud Talk Documentation + +## Changelogs + +* [Changelogs](changelog.md) + +## User documentation + +* [User system requirements](user-requirements.md) +* [User feature documentation ↗](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html) + +## Administration documentation + +* [Server system requirements](system-requirements.md) +* [Quick install](quick-install.md) +* [Configuring a TURN server](TURN.md) + * [Configuring coTURN](coturn.md) + * [Configuring eturnal](eturnal.md) +* [Scalability](scalability.md) +* [Call experience](call-experience.md) +* [Sample conversations](sample-conversations.md) +* [Occ commands](occ.md) +* [Bots](bot-list.md) +* [Matterbridge integration](matterbridge.md) + +## Developer documentation + +* [Developer setup](developer-setup.md) +* [Bots and webhooks](bots.md) +* [Constants](constants.md) +* [Capabilities](capabilities.md) +* [PHP Events](events.md) + +## API documentation + +* [Global API status and headers](global.md) +* [Conversation management](conversation.md) +* [Conversation avatar management](avatar.md) +* [Participant management](participant.md) +* [Call management](call.md) +* [Call recording management](recording.md) +* [Chat management](chat.md) +* [Reaction management](reaction.md) +* [Poll management](poll.md) +* [Breakout rooms management](breakout-rooms.md) +* [Bots management](bot-management.md) +* [Integration by other apps](integration.md) +* [Webinar management](webinar.md) +* [Settings management](settings.md) +* [Internal Signaling API](internal-signaling.md) +* [Standalone Signaling API ↗](https://nextcloud-spreed-signaling.readthedocs.io/en/latest/) diff --git a/docs/integration.md b/docs/integration.md new file mode 100644 index 0000000..a3416fd --- /dev/null +++ b/docs/integration.md @@ -0,0 +1,74 @@ +# Integration + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 15 + +## Get conversation for an internal file + +* Method: `GET` +* Endpoint: `/file/{fileId}` +* Data: + +| field | type | Description | +|----------|------|----------------------------------------------------| +| `fileId` | int | File id for which the conversation should be given | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the item was not found + + `404 Not Found` When the found item is not a file + + `404 Not Found` When the user can not access the file + + `404 Not Found` When the file is not shared with anyone + + - Data: + +| field | type | Description | +|---------|--------|---------------------------------------------| +| `token` | string | The token of the conversation for this file | + +## Get conversation for a public share + +* Method: `GET` +* Endpoint: `/publicshare/{shareToken}` +* Data: + +| field | type | Description | +|--------------|--------|--------------------------------------------------------| +| `shareToken` | string | Share token for which the conversation should be given | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the share was not found + + `404 Not Found` When the user can not access the share + + `404 Not Found` When the shared item is not a file + + - Data: + +| field | type | Description | +|---------|--------|---------------------------------------------| +| `token` | string | The token of the conversation for this file | + +## Create a conversation to request the password for a public share + +* Method: `POST` +* Endpoint: `/publicshareauth` +* Data: + +| field | type | Description | +|--------------|--------|--------------------------------------------------------| +| `shareToken` | string | Share token for which the conversation should be given | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the share was not found + + `404 Not Found` When "Request password via Talk" is not active for the share + + - Data: + +| field | type | Description | +|---------------|--------|---------------------------------------------| +| `token` | string | The token of the conversation for this file | +| `name` | string | A technical name for the conversation | +| `displayName` | string | The visual name of the conversation | diff --git a/docs/internal-signaling.md b/docs/internal-signaling.md new file mode 100644 index 0000000..cd9d6db --- /dev/null +++ b/docs/internal-signaling.md @@ -0,0 +1,56 @@ +# Signaling API + +* Base endpoint for API v1 is: 🏁 Removed with API v3: Nextcloud 13 - 21 +* Base endpoint for API v2 is: 🏁 Removed with API v3: Nextcloud 21 only +* Base endpoint for API v3 is: `/ocs/v2.php/apps/spreed/api/v3`: since Nextcloud 22 + +## Get signaling settings + +* Method: `GET` +* Endpoint: `/signaling/settings` +* Data: + +| field | type | Description | +|---------|--------|----------------------------------------------------| +| `token` | string | The conversation to get the signaling settings for | + +* Response: + +| field | type | Added | Description | +|-----------------|--------|-------|---------------------------------------------------------------------------------------------------------| +| `signalingMode` | string | v1 | See [Signaling modes](constants.md#signaling_modes) | +| `userId` | string | v1 | Current user id | +| `hideWarning` | string | v1 | Don't show a performance warning although internal signaling is used | +| `server` | string | v1 | URL of the external signaling server | +| `ticket` | string | v1 | Ticket for the external signaling server | +| `stunservers` | array | v3 | STUN servers | +| `turnservers` | array | v3 | TURN servers | +| `sipDialinInfo` | string | v2 | Generic SIP dial-in information for this conversation (admin free text containing the phone number etc) | +| `helloAuthParams` | array | v3 | Parameters of the different `hello` versions for the external signaling server. | + + - STUN server + +| field | type | Description | +|--------|-------|-----------------------------------------------| +| `urls` | array | Each element is a STUN server URL as a string | + + - TURN server + +| field | type | Description | +|--------------|--------|-----------------------------------------------| +| `urls` | array | Each element is a TURN server URL as a string | +| `username` | string | User name for the TURN server | +| `credential` | string | User password for the TURN server | + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` + +### Internal signaling API + +Todo + +### External signaling API + +See [External signaling API](https://nextcloud-spreed-signaling.readthedocs.io/en/latest/) for the Signaling API of the High-performance backend. diff --git a/docs/matterbridge.md b/docs/matterbridge.md new file mode 100644 index 0000000..571a773 --- /dev/null +++ b/docs/matterbridge.md @@ -0,0 +1,15 @@ +# Matterbridge integration + +While we tried to keep the setup and integration as smooth as possible, we also wanted to make sure you can get fixes on the Matterbridge as soon as possible and don't have to wait until we made a new Talk release available. Therefore, we have put the [Matterbridge binaries from 42wim](https://github.com/42wim/matterbridge) into a separate app in the [App Store](https://apps.nextcloud.com/apps/talk_matterbridge). This also helps to keep the normal Talk package at a reasonable size as the download of the binaries is around 120 MB. + +When this app is used, the basic configuration should work out of the box. + +## Use a custom Matterbridge binary + +In case you need a non-default binary (currently we ship 32-bit, 64-bit and arm-64 for linux) or want to check a different version of Matterbridge, you can also download the Matterbridge binary directly from [42wim's repo](https://github.com/42wim/matterbridge). +You then manually set the path for the Matterbridge binary by changing the `matterbridge_binary` spreed app config key: +``` +occ config:app:set spreed matterbridge_binary --value="/absolute/path/to/binary" +``` + +Afterwards the Matterbridge version should be shown in the admin settings of Nextcloud Talk, confirming that it works and allowing you to configure it in the individual chats in which you are a moderator. diff --git a/docs/occ.md b/docs/occ.md new file mode 100644 index 0000000..949823b --- /dev/null +++ b/docs/occ.md @@ -0,0 +1,532 @@ +# Talk occ commands + +## talk:bot:install + +Install a new bot on the server + +### Usage + +* `talk:bot:install [--output [OUTPUT]] [--no-setup] [-f|--feature FEATURE] [--] []` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `name` | The name under which the messages will be posted (min. 1 char, max. 64 chars) | yes | no | *Required* | +| `secret` | Secret used to validate API calls (min. 40 chars, max. 128 chars) | yes | no | *Required* | +| `url` | Webhook endpoint to post messages to (max. 4000 chars) | yes | no | *Required* | +| `description` | Optional description shown in the admin settings (max. 4000 chars) | no | no | `NULL` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--no-setup` | Prevent moderators from setting up the bot in a conversation | no | no | no | `false` | +| `--feature\|-f` | Specify the list of features for the bot - webhook: The bot receives posted chat messages as webhooks - response: The bot can post messages and reactions as a response - event: The bot reads posted messages from local events - reaction: The bot is notified about adding and removing of reactions - none: When all features should be disabled for the bot | yes | yes | yes | *Required* | + +## talk:bot:create + +Creates a new bot on the server with 'response' feature only. + +### Usage + +* `talk:bot:create [--output [OUTPUT]] [-s|--secret SECRET] [--no-setup] [--] []` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `name` | The name under which the messages will be posted (min. 1 char, max. 64 chars) | yes | no | *Required* | +| `description` | Optional description shown in the admin settings (max. 4000 chars) | no | no | `NULL` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--secret\|-s` | Secret used to validate API calls (min. 40 chars, max. 128 chars). When none is provided, a random 64 chars string is generated and output. | yes | yes | no | *Required* | +| `--no-setup` | Prevent moderators from setting up the bot in a conversation | no | no | no | `false` | + +## talk:bot:list + +List all installed bots of the server or a conversation + +### Usage + +* `talk:bot:list [--output [OUTPUT]] [--] []` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Conversation token to limit the bot list for | no | no | `NULL` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:bot:remove + +Remove a bot from a conversation + +### Usage + +* `talk:bot:remove [--output [OUTPUT]] [--] [...]` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `bot-id` | The ID of the bot to remove in a conversation | yes | no | *Required* | +| `token` | Conversation tokens to remove bot up for | no | yes | `array ()` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:bot:state + +Change the state or feature list for a bot + +### Usage + +* `talk:bot:state [--output [OUTPUT]] [-f|--feature FEATURE] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `bot-id` | Bot ID to change the state for | yes | no | *Required* | +| `state` | New state for the bot (0 = disabled, 1 = enabled, 2 = no setup via GUI) | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--feature\|-f` | Specify the list of features for the bot - webhook: The bot receives posted chat messages as webhooks - response: The bot can post messages and reactions as a response - event: The bot reads posted messages from local events - reaction: The bot is notified about adding and removing of reactions - none: When all features should be disabled for the bot | yes | yes | yes | *Required* | + +## talk:bot:setup + +Add a bot to a conversation + +### Usage + +* `talk:bot:setup [--output [OUTPUT]] [--] [...]` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `bot-id` | The ID of the bot to set up in a conversation | yes | no | *Required* | +| `token` | Conversation tokens to set the bot up for | no | yes | `array ()` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:bot:uninstall + +Uninstall a bot from the server + +### Usage + +* `talk:bot:uninstall [--output [OUTPUT]] [--url URL] [--] []` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `id` | The ID of the bot | no | no | `NULL` | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--url` | The URL of the bot (required when no ID is given, ignored otherwise) | yes | yes | no | *Required* | + +## talk:monitor:calls + +Prints a list with conversations that have an active call as well as their participant count + +### Usage + +* `talk:monitor:calls [--output [OUTPUT]]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:active-calls + +Allows you to check if calls are currently in process + +### Usage + +* `talk:active-calls [--output [OUTPUT]]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:monitor:room + +Prints the number of attendees, active sessions and participant in the call. + +### Usage + +* `talk:monitor:room [--output [OUTPUT]] [--separator SEPARATOR] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room to monitor | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--separator` | Separator for the CSV list when output=csv is used | yes | yes | no | *Required* | + +## talk:phone-number:add + +Add a mapping entry to map a phone number to an user + +### Usage + +* `talk:phone-number:add [-f|--force] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `phone` | Phone number that will be called | yes | no | *Required* | +| `user` | User to be added to the conversation | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--force\|-f` | Force the number to the given user even when it is assigned already | no | no | no | `false` | + +## talk:phone-number:find + +Find a phone number or the phone number of an user + +### Usage + +* `talk:phone-number:find [--phone PHONE] [--user USER]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--phone` | Phone number to search for | yes | yes | no | *Required* | +| `--user` | User to get number(s) for | yes | yes | no | *Required* | + +## talk:phone-number:import + +Import a CSV list (format: "number","user") for SIP dial-in + +### Usage + +* `talk:phone-number:import [--reset] [-f|--force]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--reset` | Delete all phone numbers before importing | no | no | no | `false` | +| `--force\|-f` | Force the numbers to the given user even when they are assigned already | no | no | no | `false` | + +## talk:phone-number:remove-user + +Remove mapping entries by user + +### Usage + +* `talk:phone-number:remove-user ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `user` | User to remove all mapping entries for | yes | no | *Required* | + +## talk:phone-number:remove + +Remove a mapping entry by phone number + +### Usage + +* `talk:phone-number:remove ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `phone` | Phone number to remove the mapping entry for | yes | no | *Required* | + +## talk:recording:consent + +List all matching consent that were given to be audio and video recorded during a call (requires administrator or moderator configuration) + +### Usage + +* `talk:recording:consent [--output [OUTPUT]] [--token TOKEN] [--actor-type ACTOR-TYPE] [--actor-id ACTOR-ID]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--token` | Limit to the given conversation | yes | yes | no | *Required* | +| `--actor-type` | Limit to the given actor (only valid when --actor-id is also provided) | yes | yes | no | *Required* | +| `--actor-id` | Limit to the given actor (only valid when --actor-type is also provided) | yes | yes | no | *Required* | + +## talk:room:add + +Adds users to a room + +### Usage + +* `talk:room:add [--user USER] [--group GROUP] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room to add users to | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--user` | Invites the given users to the room | yes | yes | yes | *Required* | +| `--group` | Invites all members of the given groups to the room | yes | yes | yes | *Required* | + +## talk:room:create + +Create a new room + +### Usage + +* `talk:room:create [--description DESCRIPTION] [--user USER] [--group GROUP] [--public] [--readonly] [--listable LISTABLE] [--password PASSWORD] [--owner OWNER] [--moderator MODERATOR] [--message-expiration MESSAGE-EXPIRATION] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `name` | The name of the room to create | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--description` | The description of the room to create | yes | yes | no | *Required* | +| `--user` | Invites the given users to the room to create | yes | yes | yes | *Required* | +| `--group` | Invites all members of the given group to the room to create | yes | yes | yes | *Required* | +| `--public` | Creates the room as public room if set | no | no | no | `false` | +| `--readonly` | Creates the room with read-only access only if set | no | no | no | `false` | +| `--listable` | Creates the room with the given listable scope | yes | yes | no | *Required* | +| `--password` | Protects the room to create with the given password | yes | yes | no | *Required* | +| `--owner` | Sets the given user as owner of the room to create | yes | yes | no | *Required* | +| `--moderator` | Promotes the given users to moderators | yes | yes | yes | *Required* | +| `--message-expiration` | Seconds to expire a message after sent. If zero will disable the expire message duration. | yes | yes | no | *Required* | + +## talk:room:delete + +Deletes a room + +### Usage + +* `talk:room:delete ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room to delete | yes | no | *Required* | + +## talk:room:demote + +Demotes participants of a room to regular users + +### Usage + +* `talk:room:demote ...` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room in which users should be demoted | yes | no | *Required* | +| `participant` | Demotes the given participants of the room to regular users | yes | yes | *Required* | + +## talk:room:promote + +Promotes participants of a room to moderators + +### Usage + +* `talk:room:promote ...` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room in which users should be promoted | yes | no | *Required* | +| `participant` | Promotes the given participants of the room to moderators | yes | yes | *Required* | + +## talk:room:remove + +Remove users from a room + +### Usage + +* `talk:room:remove ...` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | Token of the room to remove users from | yes | no | *Required* | +| `participant` | Removes the given participants from the room | yes | yes | *Required* | + +## talk:room:update + +Updates a room + +### Usage + +* `talk:room:update [--name NAME] [--description DESCRIPTION] [--public PUBLIC] [--readonly READONLY] [--listable LISTABLE] [--password PASSWORD] [--owner OWNER] [--message-expiration MESSAGE-EXPIRATION] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `token` | The token of the room to update | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--name` | Sets a new name for the room | yes | yes | no | *Required* | +| `--description` | Sets a new description for the room | yes | yes | no | *Required* | +| `--public` | Modifies the room to be a public room (value 1) or private room (value 0) | yes | yes | no | *Required* | +| `--readonly` | Modifies the room to be read-only (value 1) or read-write (value 0) | yes | yes | no | *Required* | +| `--listable` | Modifies the room's listable scope | yes | yes | no | *Required* | +| `--password` | Sets a new password for the room; pass an empty value to remove password protection | yes | yes | no | *Required* | +| `--owner` | Sets the given user as owner of the room; pass an empty value to remove the owner | yes | yes | no | *Required* | +| `--message-expiration` | Seconds to expire a message after sent. If zero will disable the expire message duration. | yes | yes | no | *Required* | + +## talk:signaling:add + +Add an external signaling server. + +### Usage + +* `talk:signaling:add [--verify] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `server` | A server string, ex. wss://signaling.example.org | yes | no | *Required* | +| `secret` | A shared secret string. | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--verify` | Validate SSL certificate if set. | no | no | no | `false` | + +## talk:signaling:delete + +Remove an existing signaling server. + +### Usage + +* `talk:signaling:delete ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `server` | An external signaling server string, ex. wss://signaling.example.org | yes | no | *Required* | + +## talk:signaling:list + +List external signaling servers. + +### Usage + +* `talk:signaling:list [--output [OUTPUT]]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:signaling:verify-keys + +Verify if the stored public key matches the stored private key for the signaling server + +### Usage + +* `talk:signaling:verify-keys [--output [OUTPUT]] [--update]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | +| `--update` | Updates the stored public key to match the private key if there is a mis-match | no | no | no | `false` | + +## talk:stun:add + +Add a new STUN server. + +### Usage + +* `talk:stun:add ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `server` | A domain name and port number separated by the colons, ex. stun.nextcloud.com:443 | yes | no | *Required* | + +## talk:stun:delete + +Remove an existing STUN server. + +### Usage + +* `talk:stun:delete ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `server` | A domain name and port number separated by the colons, ex. stun.nextcloud.com:443 | yes | no | *Required* | + +## talk:stun:list + +List STUN servers. + +### Usage + +* `talk:stun:list [--output [OUTPUT]]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:turn:add + +Add a TURN server. + +### Usage + +* `talk:turn:add [--secret SECRET] [--generate-secret] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `schemes` | Schemes, can be turn or turns or turn,turns. | yes | no | *Required* | +| `server` | A domain name, ex. turn.nextcloud.com | yes | no | *Required* | +| `protocols` | Protocols, can be udp or tcp or udp,tcp. | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--secret` | A shard secret string | yes | yes | no | *Required* | +| `--generate-secret` | Generate secret if set. | no | no | no | `false` | + +## talk:turn:delete + +Remove an existing TURN server. + +### Usage + +* `talk:turn:delete ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `schemes` | Schemes, can be turn or turns or turn,turns | yes | no | *Required* | +| `server` | A domain name, ex. turn.nextcloud.com | yes | no | *Required* | +| `protocols` | Protocols, can be udp or tcp or udp,tcp | yes | no | *Required* | + +## talk:turn:list + +List TURN servers. + +### Usage + +* `talk:turn:list [--output [OUTPUT]]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | `'plain'` | + +## talk:user:remove + +Remove a user from all their rooms + +### Usage + +* `talk:user:remove [--user USER] [--private-only]` + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--user` | Remove the given users from all rooms | yes | yes | yes | *Required* | +| `--private-only` | Only remove the user from private rooms, retaining membership in public and open conversations as well as one-to-ones | no | no | no | `false` | + +## talk:user:transfer-ownership + +Adds the destination-user with the same participant type to all (not one-to-one) conversations of source-user + +### Usage + +* `talk:user:transfer-ownership [--include-non-moderator] [--remove-source-user] [--] ` + +| Arguments | Description | Is required | Is array | Default | +|---|---|---|---|---| +| `source-user` | Owner of conversations which shall be moved | yes | no | *Required* | +| `destination-user` | User who will be the new owner of the conversations | yes | no | *Required* | + +| Options | Description | Accept value | Is value required | Is multiple | Default | +|---|---|---|---|---|---| +| `--include-non-moderator` | Also include conversations where the source-user is a normal user | no | no | no | `false` | +| `--remove-source-user` | Remove the source-user from the conversations | no | no | no | `false` | + diff --git a/docs/participant.md b/docs/participant.md new file mode 100644 index 0000000..604bf72 --- /dev/null +++ b/docs/participant.md @@ -0,0 +1,373 @@ +# Participant API + +* API v1: 🏁 Removed with API v4: until Nextcloud 21 +* API v2: 🏁 Removed with API v4: Nextcloud 19 - 21 +* API v3: 🏁 Removed with API v4: Nextcloud 21 only +* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`: since Nextcloud 22 + +## Get list of participants in a conversation + +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/room/{token}/participants` +* Data: + +| field | type | Description | +|-----------------|------|-------------------------------------------------------------| +| `includeStatus` | bool | Whether the user status information also needs to be loaded | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the participant is a guest + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + Array of participants, each participant has at least: + +| field | type | Added | Removed | Description | +|-----------------------|--------|-------|---------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `attendeeId` | int | v3 | | Unique attendee id | +| `actorType` | string | v3 | | Currently known `users |guests|emails|groups|circles` +| `actorId` | string | v3 | | The unique identifier for the given actor type | +| `displayName` | string | v1 | | Can be empty for guests | +| `participantType` | int | v1 | | Permissions level of the participant (see [constants list](constants.md#participant-types)) | +| `lastPing` | int | v1 | | Timestamp of the last ping of the user (should be used for sorting) | +| `inCall` | int | v1 | | Call flags the user joined with (see [constants list](constants.md#participant-in-call-flag)) | +| `permissions` | int | v4 | | Combined final permissions for the participant, permissions are picked in order of attendee then call then default and the first which is `Custom` will apply (see [constants list](constants.md#attendee-permissions)) | +| `attendeePermissions` | int | v4 | | Dedicated permissions for the current participant, if not `Custom` this are not the resulting permissions (see [constants list](constants.md#attendee-permissions)) | +| `sessionId` | string | v1 | v4 | `'0'` if not connected, otherwise a 512 character long string | +| `sessionIds` | array | v4 | | array of session ids, each are 512 character long strings, or empty if no session | +| `status` | string | v2 | | Optional: Only available with `includeStatus=true`, for users with a set status and when there are less than 100 participants in the conversation | +| `statusIcon` | string | v2 | | Optional: Only available with `includeStatus=true`, for users with a set status and when there are less than 100 participants in the conversation | +| `statusMessage` | string | v2 | | Optional: Only available with `includeStatus=true`, for users with a set status and when there are less than 100 participants in the conversation | +| `roomToken` | string | v4 | | Optional: Only available with `breakout-rooms-v1` capability | +| `phoneNumber` | string | v4 | | Optional: Only available with `sip-support-dialout` capability and only filled for moderators that are allowed to configure SIP for conversations | +| `callId` | string | v4 | | Optional: Only available with `sip-support-dialout` capability and only filled for moderators that are allowed to configure SIP for conversations | + + +## Get list of participants in a conversation including its breakout rooms + +* Required capability: `breakout-rooms-v1` +* Method: `GET` +* Endpoint: `/room/{token}/breakout-rooms/participants` +* Data: See Data in [Get list of participants in a conversations](participant.md#get-list-of-participants-in-a-conversation) +* Response: See Response in [Get list of participants in a conversations](participant.md#get-list-of-participants-in-a-conversation) + +## Add a participant to a conversation + +*Note:* Adding a participant to a breakout room will automatically add them to the parent room as well. + +*Note:* Only source users can be added directly to a breakout room. + +*Note:* Adding a participant to a breakout room, that is already a participant in another breakout room of the same parent will remove them from there. + +* Method: `POST` +* Endpoint: `/room/{token}/participants` +* Data: + +| field | type | Description | +|------------------|--------|-------------------------------------------------------------------------------------------------------| +| `newParticipant` | string | User, group, email or circle to add | +| `source` | string | Source of the participant(s) as returned by the autocomplete suggestion endpoint (default is `users`) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the source type is unknown, currently `users`, `groups`, `emails` are supported. `circles` are supported with `circles-support` capability + + `400 Bad Request` When the conversation is a one-to-one conversation or a conversation to request a password for a share + + `403 Forbidden` When the current user is not a moderator or owner + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the user or group to add could not be found + + - Data: + +| field | type | Description | +|--------|------|------------------------------------------------------------------| +| `type` | int | In case the conversation type changed, the new value is returned | + +## Delete an attendee by id from a conversation + +* Method: `DELETE` +* Endpoint: `/room/{token}/attendees` +* Data: + +| field | type | Description | +|--------------|------|---------------------------| +| `attendeeId` | int | The participant to delete | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the participant is a moderator or owner + + `400 Bad Request` When there are no other moderators or owners left + + `403 Forbidden` When the current user is not a moderator or owner + + `403 Forbidden` When the participant to remove is an owner + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the participant to remove could not be found + +## Remove yourself from a conversation + +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/room/{token}/participants/self` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the participant is a moderator or owner and there are no other moderators or owners left. + + `404 Not Found` When the conversation could not be found for the participant + +## Join a conversation (available for call and chat) + +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/room/{token}/participants/active` +* Data: + +| field | type | Description | +|------------|--------|---------------------------------------------------------------------------------------------------------------------------------------------| +| `password` | string | Optional: Password is only required for users which are self joined or guests and only when the conversation has `hasPassword` set to true. | +| `force` | bool | If set to `false` and the user has an active session already a `409 Conflict` will be returned (Default: true - to keep the old behaviour) | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the password is required and didn't match + + `404 Not Found` When the conversation could not be found for the participant + + `409 Conflict` When the user already has an active Talk session in the conversation with this Nextcloud session. The suggested behaviour is to ask the user whether they want to kill the old session and force join unless the last ping is older than 60 seconds or older than 40 seconds when the conflicting session is not marked as in a call. + + - Data in case of `200 OK`: See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) + + - Data in case of `409 Conflict`: + +| field | type | Description | +|-------------|--------|--------------------------------------------------------------| +| `sessionId` | string | 512 character long string | +| `inCall` | int | Flags whether the conflicting session is in a potential call | +| `lastPing` | int | Timestamp of the last ping of the conflicting session | + +## Resend participant emails + +* Required capability: `sip-support` +* Method: `POST` +* Endpoint: `/room/{token}/participants/resend-invitations` +* Data: + +| field | type | Description | +|--------------|-------------|------------------------------------------------------------------------------------------| +| `attendeeId` | int or null | Attendee id can be used for guests and users, not setting it will resend all invitations | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not a moderator or owner + + `404 Not Found` When the given attendee was not found in the conversation + +## Set session state + +* Required capability: `session-state` +* Federation capability: `federation-v1` +* Method: `PUT` +* Endpoint: `/room/{token}/participants/state` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the provided state is invalid (see [constants list](constants.md#participant-state)) + + `404 Not Found` When the conversation could not be found for the participant + +## Leave a conversation (not available for call and chat anymore) + +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/room/{token}/participants/active` + +* Response: + - Status code: + + `200 OK` + + `404 Not Found` When the conversation could not be found for the participant + +## Promote a user or guest to moderator + +* Method: `POST` +* Endpoint: `/room/{token}/moderators` +* Data: + +| field | type | Description | +|--------------|------|----------------------------------------------| +| `attendeeId` | int | Attendee id can be used for guests and users | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the participant to promote is not a normal user (type `3`), normal guest (type `4`) or self-joined user (type `5`) + + `403 Forbidden` When the current user is not a moderator or owner + + `403 Forbidden` When the participant to remove is an owner + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the participant to remove could not be found + +## Demote a moderator to user or guest + +* Method: `DELETE` +* Endpoint: `/room/{token}/moderators` +* Data: + +| field | type | Description | +|--------------|------|----------------------------------------------| +| `attendeeId` | int | Attendee id can be used for guests and users | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the participant to demote is not a moderator (type `2`) or guest moderator (type `6`) + + `403 Forbidden` When the current participant is not a moderator or owner + + `403 Forbidden` When the current participant tries to demote themselves + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the participant to demote could not be found + +## Set permissions for an attendee + +Setting custom permissions for a self-joined user will also make them a permanent user to the conversation. + +* Method: `PUT` +* Endpoint: `/room/{token}/attendees/permissions` +* Data: + +| field | type | Description | +|---------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `attendeeId` | int | Attendee id can be used for guests and users | +| `method` | string | Mode of how permissions should be manipulated [constants list](constants.md#attendee-permission-modifications). If the permissions were `0` (default) and the modification is `add` or `remove`, they will be initialised with the call or default conversation permissions before, falling back to `126` for moderators and `118` for normal participants. | +| `permissions` | int | New permissions for the attendee, see [constants list](constants.md#attendee-permissions). If permissions are not `0` (default), the `1` (custom) permission will always be added. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support setting publishing permissions, e.g. one-to-one conversations + + `400 Bad Request` When the attendee type is `groups` or `circles` + + `400 Bad Request` When the mode is invalid + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the attendee to set publishing permissions could not be found + +## Set permissions for all attendees + +* Deprecated: 🏁 The API is no-op since Talk 20 +* Method: `PUT` +* Endpoint: `/room/{token}/attendees/permissions/all` +* Data: + +| field | type | Description | +|---------------|--------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `method` | string | Mode of how permissions should be manipulated [constants list](constants.md#attendee-permission-modifications). If the permissions were `0` (default) and the modification is `add` or `remove`, they will be initialised with the call or default conversation permissions before, falling back to `126` for moderators and `118` for normal participants. | +| `permissions` | int | New permissions for the attendees, see [constants list](constants.md#attendee-permissions). If permissions are not `0` (default), the `1` (custom) permission will always be added. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support setting publishing permissions, e.g. one-to-one conversations + + `400 Bad Request` When the mode is invalid + + `403 Forbidden` When the current user is not a moderator, owner or guest moderator + + `404 Not Found` When the conversation could not be found for the participant + +## Get a participant by their pin + +Note: Deprecated - Use [Verify a dial-in PIN](#Verify-a-dial-in-PIN) instead +Note: This is only allowed as validate SIP bridge requests + +* Required capability: `sip-support` +* Method: `GET` +* Endpoint: `/room/{token}/pin/{pin}` + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the validation as SIP bridge failed + + `404 Not Found` When the conversation or participant could not be found + + - Data: See array definition in `Get user´s conversations` + +## Verify a dial-in PIN + +Note: This is only allowed as validate SIP bridge requests + +* Required capability: `sip-support-dialout` +* Method: `POST` +* Endpoint: `/room/{token}/verify-dialin` +* Data: + +| field | type | Description | +|-------|--------|-------------------------------------| +| `pin` | string | PIN the participant used to dial-in | + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the validation as SIP bridge failed + + `404 Not Found` When the conversation or participant could not be found + + `501 Not Implemented` When SIP is not configured + + - Data: See array definition in `Get user´s conversations` + +## Verify a dial-out number + +Note: This is only allowed as validate SIP bridge requests + +* Required capability: `sip-support-dialout` +* Method: `POST` +* Endpoint: `/room/{token}/verify-dialout` +* Data: + +| field | type | Description | +|-----------|--------|---------------------------------------------------------------------------------------------------------------------------------| +| `number` | string | E164 formatted phone number | +| `options` | string | Additional details to verify the validity of the request as JSON encoded object (Should contain actorId, actorType, attendeeId) | + +* Response: + - Status code: + + `200 OK` + + `401 Unauthorized` When the validation as SIP bridge failed + + `404 Not Found` When the conversation or participant could not be found + + `501 Not Implemented` When SIP or SIP dial-out is not configured + + - Data: See array definition in `Get user´s conversations` + +## Reset call ID of rejected dial-out + +Note: This is only allowed as validate SIP bridge requests + +* Required capability: `sip-support-dialout` +* Method: `DELETE` +* Endpoint: `/room/{token}/rejected-dialout` +* Data: + +| field | type | Description | +|-----------|--------|------------------------------------------------| +| `callId` | string | The call ID that was rejected | +| `options` | string | The options as received in the dialout request | + +* Response: + - Status code: + + `200 OK` Call ID reset + + `400 Bad Request` Call ID mismatch + + `401 Unauthorized` SIP request invalid + + `404 Not Found` Participant was not found + + `501 Not Implemented` When SIP or SIP dial-out is not configured + +## Set display name as a guest + +* API: Only `v1` +* Method: `POST` +* Endpoint: `/guest/{token}/name` +* Data: + +| field | type | Description | +|---------------|--------|----------------------| +| `displayName` | string | The new display name | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the current user is not a guest + + `404 Not Found` When the conversation could not be found for the participant diff --git a/docs/poll.md b/docs/poll.md new file mode 100644 index 0000000..6fe2485 --- /dev/null +++ b/docs/poll.md @@ -0,0 +1,151 @@ +# Poll API + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1` + +## Create a poll in a conversation + +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/poll/{token}` +* Data: + +| field | type | Description | +|--------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `question` | string | The question of the poll | +| `options` | string[] | Array of strings with the voting options | +| `resultMode` | int | The result and voting mode of the poll, `0` means participants can immediatelly see the result and who voted for which option. `1` means the result is hidden until the poll is closed and then only the summary is published. | +| `maxVotes` | int | Maximum amount of options a participant can vote for | + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` When the room is a one-to-one conversation + + `400 Bad Request` When the question or the options were too long or invalid (not strings) + + `403 Forbidden` When the conversation is read-only + + `403 Forbidden` When the actor does not have chat permissions + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + + See [Poll data](#poll-data) + +# Edit a draft poll in a conversation + +* Required capability: `edit-draft-poll` +* Method: `POST` +* Endpoint: `/poll/{token}/draft/{pollId}` +* Data: + +| field | type | Description | +|--------------|--------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `question` | string | The question of the poll | +| `options` | string[] | Array of strings with the voting options | +| `resultMode` | int | The result and voting mode of the poll, `0` means participants can immediatelly see the result and who voted for which option. `1` means the result is hidden until the poll is closed and then only the summary is published. | +| `maxVotes` | int | Maximum amount of options a participant can vote for | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Modifying poll is not possible + + `403 Forbidden` No permission to modify this poll + + `404 Not Found` When the draft poll could not be found + + - Data: + + See [Poll data](#poll-data) + +## Get state or result of a poll + +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/poll/{token}/{pollId}` + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` In case of any other error + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the poll id could not be found in the conversation + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + + See [Poll data](#poll-data) + +## Vote on a poll + +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/poll/{token}/{pollId}` +* Data: + +| field | type | Description | +|--------------|-------|--------------------------------------------------| +| `optionIds` | int[] | The option IDs the participant wants to vote for | + + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` When an option id is invalid + + `400 Bad Request` When too many options were voted + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the poll id could not be found in the conversation + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + + See [Poll data](#poll-data) + +## Close a poll + +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/poll/{token}/{pollId}` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the poll is already closed + + `403 Forbidden` When the participant is not the author of the poll or a moderator + + `404 Not Found` When the conversation could not be found for the participant + + `404 Not Found` When the poll id could not be found in the conversation + + `412 Precondition Failed` When the lobby is active and the user is not a moderator + + - Data: + + See [Poll data](#poll-data) + +## Poll data + +!!! note + + Due to the structure of the `votes` array the response is not valid in XML. + It is therefor recommended to use `format=json` or send the `Accept: application/json` header, + to receive a JSON response. + +| field | type | Description | +|--------------------|----------|---------------------------------------------------------------------------------------------------------------------------------------------------------| +| `id` | int | ID of the poll | +| `question` | string | The question of the poll | +| `options` | string[] | The options participants can vote for | +| `votes` | int[] | Map with `'option-' + optionId` => number of votes (only available for when the actor voted on public poll or the poll is closed) | +| `actorType` | string | Actor type of the poll author (see [Constants - Attendee types](constants.md#attendee-types)) | +| `actorId` | string | Actor ID identifying the poll author | +| `actorDisplayName` | string | Display name of the poll author | +| `status` | int | Status of the poll (see [Constants - Poll status](constants.md#poll-status)) | +| `resultMode` | int | Result mode of the poll (see [Constants - Poll mode](constants.md#poll-mode)) | +| `maxVotes` | int | Maximum amount of options a user can vote for, `0` means unlimited | +| `votedSelf` | int[] | Array of option ids the participant voted for | +| `numVoters` | int | The number of unique voters that voted (only available when the actor voted on public poll or the poll is closed unless for the creator and moderators) | +| `details` | array[] | Detailed list who voted for which option (only available for public closed polls), see [Details](#details) below | + +### Details + +| field | type | Description | +|------------------|--------|--------------------------------------------------------------------------------------------------------------| +| actorType | string | The actor type of the participant that voted (see [Constants - Attendee types](constants.md#attendee-types)) | +| actorId | string | The actor id of the participant that voted | +| actorDisplayName | string | The display name of the participant that voted | +| optionId | int | The option that was voted for | diff --git a/docs/quick-install.md b/docs/quick-install.md new file mode 100644 index 0000000..3dba070 --- /dev/null +++ b/docs/quick-install.md @@ -0,0 +1,206 @@ +# Quick install + +## Introduction + +Installing Nextcloud Talk consists of two main parts: + +1. **App:** The Nextcloud Server app available in the [Nextcloud app store](https://apps.nextcloud.com/apps/spreed). +2. **High-performance backend:** The High-performance backend developed by our Partner Struktur AG available in [their GitHub organisation](https://github.com/strukturag/nextcloud-spreed-signaling). The High-performance backend itself consists of multiple modules, the most important ones being a signaling server and a WebRTC media gateway. + +!!! note + + While the High-performance backend is **_optional_**, please note, that it is already **helpful in calls with three participants** (reducing required upload bandwidth by 50%). Even more so in calls with 4+ participants as described in the [Scalability documentation](scalability.md). + + Besides performance aspects, some features (e.g. typing indicators) require a High-performance backend as well. + +Additional components: + +- Most installations require a STUN and TURN server to ensure people can join calls from limited networks and mobile networks. + - **STUN server:** Resolves public IP addresses of participants. A STUN server is provided by default, but you can replace it with your own and e.g. coTURN brings it by default. + - **TURN server:** Relays the audio and video data through firewalls and port restrictions. For a quick guide on TURN, please find the relevant information in our [TURN documentation](TURN.md). +- **Recording backend:** A Recording backend to allow recording audio and video calls. See the [Recording backend documentation](https://github.com/nextcloud/nextcloud-talk-recording/blob/main/docs/installation.md) for detailed steps. +- **SIP bridge:** Available with a Nextcloud Talk Enterprise subscription, the SIP bridge allows participating in meetings via phone as well as calling phone numbers from within Nextcloud Talk. More details are available in the [Nextcloud Enterprise Portal](https://portal.nextcloud.com/article/Nextcloud-Talk/High-Performance-Backend/Installation/Setup-Instructions#content-sip-bridge) + +## Installation types + +This guide explains the steps and instructions required to install the High-performance backend using Docker and how to quickly configure the basics to get started. + +In general, the following installation methods are available + +### Nextcloud All-in-One + +* **Requirements:** Docker +* **Link:** [github.com/nextcloud/all-in-one](https://github.com/nextcloud/all-in-one) + +Nextcloud All-in-One (AIO) is the official Nextcloud installation method. It provides easy deployment and maintanence with most features of Nextcloud already included. + +For Nextcloud Talk this means that Nextcloud AIO already includes a ready to use High-performance backend and TURN server. + +### Packages + +* **Requirements:**: Nextcloud Talk subscription +* **Link:** [Nextcloud Enterprise Portal](https://portal.nextcloud.com/article/Nextcloud-Talk/High-Performance-Backend/Installation-of-Nextcloud-Talk-High-Performance-Backend) + +Packages for installing the High-performance backend for Ubuntu, Debian und Red Hat Enterprise Linux are available with a Nextcloud Talk subscription. Additionally, extensive documentation for very large installation, e.g. clustered setups, is available there. + +### "How to" from the Nextcloud snap team / Docker Stack + +* **Requirements:** Docker +* **Link:** [help.nextcloud.com/t/high-performance-backend-for-talk-on-nextcloud-with-docker/215828](https://help.nextcloud.com/t/high-performance-backend-for-talk-on-nextcloud-with-docker/215828) + +Thanks to the Nextcloud snap team, who created a [how to](https://help.nextcloud.com/t/high-performance-backend-for-talk-on-nextcloud-with-docker/215828) for installing the High-performance backend using the Talk container from Nextcloud AIO in a Docker Stack. While provided "as-is" it might help you to setup the High-performance backend for your use-case. Please note that it does not require a Nextcloud snap installation! + +### Docker container + +* **Requirements:** Docker +* **Link:** _Described in detail below_ + +Similar to the approach above, we utilize the Nextcloud AIO container to get the High-performance backend up and running. + +## System requirements + +* A working docker installation + * Checkout [the docker installation guide](https://docs.docker.com/engine/install/) + +## Before you begin + +Before installing the High performance backend, ensure you have: + +* A working Nextcloud installation. + * If you don't have a working Nextcloud installation yet, please checkout [Nextcloud All-in-One](https://github.com/nextcloud/all-in-one) or alteratively our [installation documentation](https://docs.nextcloud.com/server/latest/admin_manual/installation/index.html). +* Nextcloud Talk installed from the [Nextcloud app store](https://apps.nextcloud.com/apps/spreed). + * If you need help installing Nextcloud Talk, please check out [our documentation on apps management](https://docs.nextcloud.com/server/latest/admin_manual/apps_management.html). +* A correctly setup reverse proxy for your Nextcloud installation + * See [our documentation on reverse proxy](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/reverse_proxy_configuration.html). + +## Installation steps + +The following procedure explains how to get the High-performance backend up and running with a standalone docker container. It will utilize the pre-built container from Nextcloud All-in-One. + +For more information on how Nextcloud All-in-One builds the container, please [see the Nextcloud AIO repository](https://github.com/nextcloud/all-in-one/tree/main/Containers/talk). + +### Step 1 - Create secrets + +The High-performance backend requires multiple secrets for authentication with the Nextcloud instance. The talk container from Nextcloud All-in-One needs 3 secrets to work correctly: + +* A `TURN` secret +* A `SIGNALING` secret +* A `INTERNAL` secret + +While you specify the secrets manually, it is recommended to generate a secure random string. There are multiple ways to do that, one of the easiest is using `openssl`: + +```shell +# openssl rand --hex 32 +86a057a959534eb761b20afb4122da6b5475a5f8db20ba16abbb91c65132ca03 +``` + +Repeat that another 2 times to have all 3 secrets. + +For the following steps we will refer to the secrets as: + +* `TURN` = 1111 +* `SIGNALING` = 2222 +* `INTERNAL` = 3333 + +Please make sure to replace the values accordingly. + +!!! note + + While the talk container from Nextcloud AIO also contains a TURN server (and requires a TURN secret), this guide soley focuses on the HPB part. + +### Step 2 - Start the docker container + +The following command will start the container, please adjust the command to your needs. In addition to the generated secrets, you'll also need the domain of your Nextcloud installation and the port where the signaling server will listen. + +```shell +docker run \ + --name=nextcloud-talk-hpb \ + --restart=always \ + --detach \ + -e NC_DOMAIN= \ + -e TALK_PORT=3478 \ + -e TURN_SECRET= \ + -e SIGNALING_SECRET= \ + -e INTERNAL_SECRET= \ + -p :8081 \ + ghcr.io/nextcloud-releases/aio-talk:latest +``` + +Example: + +```shell +docker run \ + --name=nextcloud-talk-hpb \ + --restart=always \ + --detach \ + -e NC_DOMAIN=nextcloud.domain.invalid \ + -e TALK_PORT=3478 \ + -e TURN_SECRET=1111 \ + -e SIGNALING_SECRET=2222 \ + -e INTERNAL_SECRET=3333 \ + -p 8080:8081 \ + ghcr.io/nextcloud-releases/aio-talk:latest +``` + +### Step 3 - Expose the container through the reverse proxy + +The container needs to be exposed through the reverse proxy that does TLS offloading, e.g. as `signaling.domain.invalid`. Please checkout the example configs in [the nextcloud-spreed-signaling repository](https://github.com/strukturag/nextcloud-spreed-signaling?tab=readme-ov-file#setup-of-frontend-webserver). + +## Verify installation + +After finishing all the installation steps, please verify if the signaling server is correctly reachable. You can use query the welcome endpoint for that: + +```shell +# curl https://signaling.domain.invalid/api/v1/welcome +{"nextcloud-spreed-signaling":"Welcome","version":"2.0.1~docker"} +``` + +If you would like to verify it locally from the docker host, you can query the welcome endpoint as well: + +```shell +# curl http://localhost:8081/api/v1/welcome +{"nextcloud-spreed-signaling":"Welcome","version":"2.0.1~docker"} +``` + +Also to show the logs of the docker container, use `docker logs nextcloud-talk-hpb`. + +## Post installation + +After successfully starting the container, please go to the administrative settings of Talk (`/settings/admin/talk`) to configure the High-performance backend with the following parameters: + +* High-performance backend URL: `https://signaling.domain.invalid` +* Shared secret: `2222` (The generated `SIGNALING` secret) + +Verify that the connection check succeeds with a green checkmark. + +### TURN option + +In case you would like to use the TURN option that the Nextcloud AIO container provides, you can modify the docker command like this: + +```shell +docker run \ + --name=nextcloud-talk-hpb \ + --restart=always \ + --detach \ + -e NC_DOMAIN= \ + -e TALK_HOST= \ + -e TALK_PORT=3478 \ + -e TURN_SECRET= \ + -e SIGNALING_SECRET= \ + -e INTERNAL_SECRET= \ + -p :8081 \ + -p 3478:3478/tcp \ + -p 3478:3478/udp \ + ghcr.io/nextcloud-releases/aio-talk:latest +``` + +Note that we added the environment variable `TALK_HOST` and additionally exposed port TCP 3478 and UDP ports. The domain entered needs to be the one where the TURN server will be reachable on port 3478. + +### TURN post installation + +After successfully starting the container, please go to the administrative settings of Talk (`/settings/admin/talk`) to configure the TURN server with the following parameters: + +* `turn: only` +* TURN server URL: `signaling.domain.invalid:3478` (no protocol) +* TURN server secret: `1111` (The generated `TURN` secret) +* `UDP and TCP` diff --git a/docs/reaction.md b/docs/reaction.md new file mode 100644 index 0000000..1373c24 --- /dev/null +++ b/docs/reaction.md @@ -0,0 +1,88 @@ +# Reaction API + +Base endpoint is: `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 24 + +## React to a message + +* Required capability: `reactions` +* Federation capability: `federation-v1` +* Method: `POST` +* Endpoint: `/reaction/{token}/{messageId}` +* Data: + +| field | type | Description | +|------------|--------|--------------------| +| `reaction` | string | the reaction emoji | + +* Response: + - Status code: + + `200 OK` Reaction already exists + + `201 Created` User reacted with a new reaction + + `400 Bad Request` In case of no reaction support, message out of reactions context or any other error + + `404 Not Found` When the conversation or message to react could not be found for the participant + + - Data: + Array with data of reactions: + +| field | type | Description | +|--------------------|--------|----------------------------------------| +| `actorType` | string | `guests` or `users` | +| `actorId` | string | Actor id of the reacting participant | +| `actorDisplayName` | string | Display name of the reaction author | +| `timestamp` | int | Timestamp in seconds and UTC time zone | + +## Delete a reaction + +* Required capability: `reactions` +* Federation capability: `federation-v1` +* Method: `DELETE` +* Endpoint: `/reaction/{token}/{messageId}` +* Data: + +| field | type | Description | +|------------|--------|--------------------| +| `reaction` | string | the reaction emoji | + +* Response: + - Status code: + + `201 Created` + + `400 Bad Request` In case of no reaction support, message out of reactions context or any other error + + `404 Not Found` When the conversation or message to react or reaction could not be found for the participant + + - Data: + Array with data of reactions: + +| field | type | Description | +|--------------------|--------|----------------------------------------| +| `actorType` | string | `guests` or `users` | +| `actorId` | string | Actor id of the reacting participant | +| `actorDisplayName` | string | Display name of the reaction author | +| `timestamp` | int | Timestamp in seconds and UTC time zone | + +## Retrieve reactions of a message by type + +* Required capability: `reactions` +* Federation capability: `federation-v1` +* Method: `GET` +* Endpoint: `/reaction/{token}/{messageId}` +* Data: + +| field | type | Description | +|------------|--------|----------------------------------| +| `reaction` | string | **Optional:** the reaction emoji | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` In case of no reaction support, message out of reactions context or any other error + + `404 Not Found` When the conversation or message to react could not be found for the participant + + - Data: + Array with data of reactions: + +| field | type | Description | +|--------------------|--------|----------------------------------------| +| `actorType` | string | `guests` or `users` | +| `actorId` | string | Actor id of the reacting participant | +| `actorDisplayName` | string | Display name of the reaction author | +| `timestamp` | int | Timestamp in seconds and UTC time zone | diff --git a/docs/recording.md b/docs/recording.md new file mode 100644 index 0000000..bef05ea --- /dev/null +++ b/docs/recording.md @@ -0,0 +1,197 @@ +# Call recording API + +* API v1: Base endpoint `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 26 + +## Start call recording + +* Required capability: `recording-v1` +* Method: `POST` +* Endpoint: `/recording/{token}` +* Data: + +| Field | Type | Description | +| ------ | ---- | ---------------------------------------------------------------------------------------------------- | +| status | int | Type of call recording (see [Constants - Call recording status](constants.md#call-recording-status)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Message: `status`. When the status to start is invalid. + + `400 Bad Request` Message: `config`. Need to enable the config `recording`. + + `400 Bad Request` Message: `recording`. Already have a recording in progress. + + `400 Bad Request` Message: `call`. Call is not activated. + + `401 Unauthorized` When the participant is a guest. + + `403 Forbidden` When the user is not a moderator/owner. + + `412 Precondition Failed` When the lobby is active and the user is not a moderator. + +## Stop call recording + +* Required capability: `recording-v1` +* Method: `DELETE` +* Endpoint: `/recording/{token}` + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Message: `config`. Need to enable the config `recording`. + + `400 Bad Request` Message: `call`. Call is not activated. + + `401 Unauthorized` When the participant is a guest. + + `403 Forbidden` When the user is not a moderator/owner. + + `412 Precondition Failed` When the lobby is active and the user is not a moderator. + +## Store call recording + +* Required capability: `recording-v1` +* Method: `POST` +* Endpoint: `/recording/{token}/store` + +* Header: + +| field | type | Description | +| ------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- | +| `TALK_RECORDING_RANDOM` | string | Random string that needs to be concatenated with room token to generate the checksum using the `recording_servers['secret']`. | +| `TALK_RECORDING_CHECKSUM` | string | The checksum generated with `TALK_RECORDING_RANDOM`. | + +* Data: + +| field | type | Description | +| ------- | ------ | --------------------------------------------------------- | +| `file` | string | File with the recording in a multipart/form-data request. | +| `owner` | string | The person that started the recording. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error: `invalid_file`: File in block list or invalid + + `400 Bad Request` Error: `empty_file`: Invalid file extension + + `400 Bad Request` Error: `file_mimetype`: Invalid mimetype + + `400 Bad Request` Error: `file_name`. :nvalid file name + + `400 Bad Request` Error: `file_extension`: Invalid file extension + + `400 Bad Request` Error: `owner_participant`: Owner is not to be a participant of room + + `400 Bad Request` Error: `owner_invalid`: Owner invalid + + `400 Bad Request` Error: `owner_permission`: Owner have not permission to store record file + + `401 Unauthorized` When the validation as recording server failed + + `404 Not Found` Room not found + + `429 Too Many Request` Brute force protection + +## Dismiss store call recording notification + +* Required capability: `recording-v1` +* Method: `DELETE` +* Endpoint: `/recording/{token}/notification` +* Data: + +| field | type | Description | +| ----------- | ------ | --------------------------------------------------------------------- | +| `timestamp` | string | Timestamp in seconds and UTC time zone that notification was created. | + +* Response: + - Status code: + + `200 OK` + + `403 Forbidden` When the user is not a moderator/owner. + + `404 Not Found` Room not found + +## Share store call recording + +* Required capability: `recording-v1` +* Method: `POST` +* Endpoint: `/recording/{token}/share-chat` +* Data: + +| field | type | Description | +| ----------- | ------- | --------------------------------------------------------------------- | +| `timestamp` | string | Timestamp in seconds and UTC time zone that notification was created. | +| `fileId` | integer | File id of recording to share at the room. | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` Error: `file`: Shared file is invalid + + `400 Bad Request` Error: `system`: Internal system error + + `403 Forbidden` When the user is not a moderator/owne + + `404 Not Found` Room not found + +## Recording server requests + +* Required capability: `recording-v1` +* Method: `POST` +* Endpoint: `/recording/backend` + +* Header: + +| field | type | Description | +| ------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------------- | +| `TALK_RECORDING_RANDOM` | string | Random string that needs to be concatenated with request body to generate the checksum using the secret configured for the backend. | +| `TALK_RECORDING_CHECKSUM` | string | The checksum generated with `TALK_RECORDING_RANDOM`. | + +* Data: + + - Body as a JSON encoded string; format depends on the request type, see below. + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request`: When the body data does not match the expected format. + + `403 Forbidden`: When the request validation failed. + +### Started call recording + +* Data format: + + ```json + { + "type": "started", + "started": { + "token": "the-token-of-the-room", + "status": "the-type-of-recording (see [Constants - Call recording status](constants.md#call-recording-status))", + "actor": { + "type": "the-type-of-the-actor", + "id": "the-id-of-the-actor", + }, + }, + } + ``` + +* Response: + - (Additional) Status code: + + `404 Not Found`: When the room is not found. + +### Stopped call recording + +* Data format: + + ```json + { + "type": "stopped", + "stopped": { + "token": "the-token-of-the-room", + "actor": { + "type": "the-type-of-the-actor", + "id": "the-id-of-the-actor", + }, + }, + } + ``` + + - `actor` is optional + +* Response: + - (Additional) Status code: + + `404 Not Found`: When the room is not found. + +### Failed call recording + +* Data format: + + ```json + { + "type": "failed", + "failed": { + "token": "the-token-of-the-room", + }, + } + ``` + +* Response: + - (Additional) Status code: + + `404 Not Found`: When the room is not found. diff --git a/docs/sample-conversations.md b/docs/sample-conversations.md new file mode 100644 index 0000000..22afb13 --- /dev/null +++ b/docs/sample-conversations.md @@ -0,0 +1,71 @@ +# Sample conversations + +In Hub 10 (Nextcloud 31) we introduced new sample conversations to better showcase various features of Nextcloud Talk. The default sample conversations are translated just like Nextcloud itself is, so it should be shown to the user in a language they understand. + +## Custom samples + +It is also possible to replace the sample conversations. For this you need to configure the `samples_directory` app config of the spreed app to point to a directory. +```shell +sudo -u www-data php /var/www/nextcloud/occ \ + config:app:set \ + spreed samples_directory \ + --value '/this/is/the/configured/path' +``` + +In the directory you put a subdirectory of each language that you want to support. A directory structure looks like the following: + +``` +/this/is/the/configured/path + ├─ de/ + ├─ en/ + ├─ es/ + └─ fr/ +``` +The chosen language is picked from the user language, falling back to the `default_language` and can be overwritten with the `force_language` system config. It's also falling back from languages like `de_DE` to `de` if the first one is picked but does not exist. + +In each of the languages you can have a unique set of sample Markdown files. + +### Conversation information + +The first section of the Markdown files must contain the following information, prefixed with the matching keyword: + +``` +NAME: Let's get started! +EMOJI: 💡 +COLOR: #0082c9 +--- +``` + +End this segment with 3 dashes `---`. + +Optionally you can have a description in the second section, indicated by the `DESCRIPTION:` marker as a beginning and ending again with `---`: + +```markdown +DESCRIPTION: + +This is a *sample* description! Including **Markdown** support. + +--- +``` + +Please note that descriptions are currently limited to 2.000 characters. + +### Messages + +Afterwards you can have unlimited amount of messages, each separated by `---`. Messages support markdown and mentions. + +Additionally, the following additional features can be used: + +- Reply: `{REPLY}` (at the start of the message) The message will be posted as a reply to the previous message +- Reactions: `{REACTION:👍}` (anywhere in the message) will be removed and a reaction with the given emoji will be down by the system +- File link: `{FILE:Readme.md}` (anywhere in the message) will be removed from the message and a link to the specified file inside the user's Files app root will be posted + +## Disable samples + +If you don't like the samples we provide, and you don't want to write your own samples, you can also disable them by setting the `create_samples` app config of the spreed app to false: +```shell +sudo -u www-data php /var/www/nextcloud/occ \ + config:app:set \ + spreed create_samples \ + --value false --type boolean +``` diff --git a/docs/samples/en/lets-get-started.md b/docs/samples/en/lets-get-started.md new file mode 100644 index 0000000..6e85efc --- /dev/null +++ b/docs/samples/en/lets-get-started.md @@ -0,0 +1,72 @@ +NAME: Let's get started! +EMOJI: 💡 +COLOR: #0082c9 +--- +{DESCRIPTION} + +**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem. + +#### Key Features of Nextcloud Talk: + +* Chat and messaging in private and group chats +* Voice and video calls +* File sharing and integration with other Nextcloud apps +* Customizable conversation settings, moderation and privacy controls +* Web, desktop and mobile (iOS and Android) +* Private & secure communication + +Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html). + +--- + +# Welcome to Nextcloud Talk + +Nextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more. + +--- + +## 🎨 Format texts to create rich messages + +In Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text. + +Need to fix a typo or change formatting? Edit your message by clicking "Edit message" in the message menu. + +--- + +## 🔗 Add attachments and links + +Attach files from your Nextcloud Hub using the "+" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app. + +{FILE:Readme.md} + +--- + +## 💭 Let the conversations flow: mention users, react to messages and more + +You can mention everybody in the conversation @all or mention specific participants by typing "@" and picking their name from the list. + +{REACTION:😍} +{REACTION:👍} + +--- + +{REPLY} +You can reply to messages, forward them to other chats and people, or copy message content. + +--- + +## ✨ Do more with Smart Picker + +Simply type "/" or go to the "+" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more. + +--- + +## ⚙️ Manage conversation settings + +In the conversation menu, you can access various settings to manage your conversations, such as: +* Edit conversation info +* Manage notifications +* Apply numerous moderation rules +* Configure access and security +* Enable bots +* and more! diff --git a/docs/scalability.md b/docs/scalability.md new file mode 100644 index 0000000..6d11c91 --- /dev/null +++ b/docs/scalability.md @@ -0,0 +1,40 @@ +# Scalability + +Talk works peer to peer, that is, each participant sends an end-to-end encrypted stream to every other participant and receives one stream per other participant. Bandwidth usage grows with the number of participants. + +A single video stream currently uses about 1 Mbit/sec and the total required bandwidth can be calculated as follows: + +``` +1 Mbit/s * (participants - 1) +``` + +![](HPB-P2P.png) + +This means that in a call with 5 participants, each has to send and receive about 4 Mbit/sec. Given the asymmetric nature of most typical broadband connections, it's sending video that quickly becomes the bottleneck. Moreover, decoding all those video streams puts a big strain on the system of each participant. + +To limit and CPU bandwidth usage, participants can disable video. This will drop the bandwidth use to audio only, about 50 kbit/sec (about 1/20th of the bandwidth of video), eliminating most decoding work. When all participants are on a fast network, a call with 20 people without video could be doable. + +Still a call creates a load on the participants' browsers (decoding streams) and on the server as it handles signaling. This, for example, also has consequences for devices that support calls. Mobile device browsers will sooner run out of compute capacity and cause issues to the call. While we continuously work to optimize Talk for performance, there is still work to be done so it is not unlikely that the bottleneck will be there for the time being. We very much welcome help in optimization of calls! + +### How to have the maximum number of participants in a call + +To make sure a call can sustain the largest number of participants, make sure that: + +* each participant has a fast upload and download. +* each participant has a fast enough system. This means: + + - on a desktop/laptop system, a browser like Firefox or Chrome should be used. The WebRTC implementation in other browsers is often sub-par. On a laptop, the power cord should be plugged in - this often results in better CPU performance. + - on mobile devices, the Android/iOS apps should be used because mobile browsers will run out of computing power quickly. + +* all participant disables their video streams. + + +With this setup, 20 users should be possible in a typical setup. + +### Scaling beyond 5-20 users in a call + +Nextcloud offers a partner product, the Talk High Performance Back-end, which deals with this scalability issue by including a Selective Forwarding Unit (SFU). Each participant sends one stream to the SFU which distributes it under the participants. This typically scales to 30-50 or even more active participants. Furthermore, the HPB setup also allows calls with hundreds of passive participants. With this number of participants is only limited by the bandwidth of the SFU setup. This is ideal for one-to-many streaming like webinars or remote teaching lessons. + +The HPB also takes care of signaling, decreasing the load of many calls on the Talk server and optional SIP integration so users can dial in to calls by phone. + +If you need to use Talk in an enterprise environment, [contact our sales team](https://nextcloud.com/enterprise/buy/) for access to the Talk High Performance Back-end. See our website for more details and [pricing](https://nextcloud.com/talk/#scalability). diff --git a/docs/screensharing.png b/docs/screensharing.png new file mode 100644 index 0000000..4903160 Binary files /dev/null and b/docs/screensharing.png differ diff --git a/docs/screensharing.png.license b/docs/screensharing.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/screensharing.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/screenshotplaceholders/placeholder-0.jpeg b/docs/screenshotplaceholders/placeholder-0.jpeg new file mode 100644 index 0000000..000606c Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-0.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-1.jpeg b/docs/screenshotplaceholders/placeholder-1.jpeg new file mode 100644 index 0000000..5c584cf Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-1.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-2.jpeg b/docs/screenshotplaceholders/placeholder-2.jpeg new file mode 100644 index 0000000..81e8205 Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-2.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-3.jpeg b/docs/screenshotplaceholders/placeholder-3.jpeg new file mode 100644 index 0000000..502d41c Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-3.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-4.jpeg b/docs/screenshotplaceholders/placeholder-4.jpeg new file mode 100644 index 0000000..32f68d8 Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-4.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-5.jpeg b/docs/screenshotplaceholders/placeholder-5.jpeg new file mode 100644 index 0000000..0c8b36c Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-5.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-6.jpeg b/docs/screenshotplaceholders/placeholder-6.jpeg new file mode 100644 index 0000000..bbbb123 Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-6.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-7.jpeg b/docs/screenshotplaceholders/placeholder-7.jpeg new file mode 100644 index 0000000..167b304 Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-7.jpeg differ diff --git a/docs/screenshotplaceholders/placeholder-8.jpeg b/docs/screenshotplaceholders/placeholder-8.jpeg new file mode 100644 index 0000000..43488d2 Binary files /dev/null and b/docs/screenshotplaceholders/placeholder-8.jpeg differ diff --git a/docs/settings.md b/docs/settings.md new file mode 100644 index 0000000..877e263 --- /dev/null +++ b/docs/settings.md @@ -0,0 +1,146 @@ +# Settings API + +* Base endpoint: `/ocs/v2.php/apps/spreed/api/v1`: since Nextcloud 19 + +## Set user´s settings + +* Method: `POST` +* Endpoint: `/settings/user` +* Data: + +| field | type | Description | +|---------|------------|------------------------| +| `key` | string | The user config to set | +| `value` | string/int | The value to set | + +* Response: + - Status code: + + `200 OK` When the value was updated + + `400 Bad Request` When the key or value was invalid + + `401 Unauthorized` When the user is not logged in + +## User settings + +**Note:** Settings from `calls_start_without_media` onwards can not be set via above API. +Instead, the server API `POST /ocs/v2.php/apps/provisioning_api/api/v1/config/users/{appId}/{configKey}` needs to be used. + +| Key | Capability | Default | Valid values | +|-----------------------------|---------------------------------------------|----------------------------------------------------|----------------------------------------------------------------------------------------------------------| +| `attachment_folder` | `config => attachments => folder` | Value of app config `default_attachment_folder` | Path owned by the user to store uploads and received shares. It is created if it does not exist. | +| `read_status_privacy` | `config => chat => read-privacy` | `0` | One of the read-status constants from the [constants list](constants.md#participant-read-status-privacy) | +| `typing_privacy` | `config => chat => typing-privacy` | `0` | One of the typing privacy constants from the [constants list](constants.md#participant-typing-privacy) | +| `play_sounds` | | `'yes'` | `'yes'` and `'no'` | +| `calls_start_without_media` | `config => call => start-without-media` | `''` falling back to app config with the same name | `'yes'` and `'no'` | +| `blur_virtual_background` | `config => call => blur-virtual-background` | `'no'` | `'yes'` and `'no'` | +| `conversations_list_style` | `config => conversations => list-style` | `'two-lines'` | One of the constants from the [constants list](constants.md#conversation-list-style) | + +## Set SIP settings + +* Required capability: `sip-support` +* Method: `POST` +* Endpoint: `/settings/sip` +* Data: + + All values must be sent in the same request + +| field | type | Description | +|----------------|--------|-------------------------------------------------------------------| +| `sipGroups` | array | List of group ids that are allow to enable SIP for a conversation | +| `dialInInfo` | string | The dial-in information shown in the sidebar and sent in emails | +| `sharedSecret` | string | The shared secret of the SIP component | + +* Response: + - Status code: + + `403 Forbidden` When the user is not an admin + +## App configuration + +**Note:** All app configs are stored as `string` in the `oc_appconfig` database table. Arrays and objects are therefor JSON encoded, integers are casted to string and booleans are replaced with `0/1` or `no/yes` strings. + +When available the dedicated UI or OCC command option should be used to configure the setting rather than directly manipulating the database. + +Legend: + +* `Hash` - Whether the changing the config changes the Talk version hash triggering clients to refresh capabilities +* 🖌️ - UI option in the admin settings available +* 💻 - Dedicated OCC command available + +| Key | Internal type | Default | Hash | Option | Valid values | +|--------------------------------------|------------------------------------------------------------------|------------|------|--------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `allowed_groups` | string[] | `[]` | Yes | 🖌️ | List of group ids that are allowed to use Talk | +| `sip_bridge_groups` | string[] | `[]` | Yes | 🖌️ | List of group ids that are allowed to enable SIP dial-in in a conversation | +| `start_conversations` | string[] | `[]` | Yes | 🖌️ | List of group ids that are allowed to create conversations | +| `federation_allowed_groups` | string[] | `[]` | Yes | 🖌️ | 🏗️ *Work in progress:* List of group ids that are allowed to invite federated users into their conversations (everyone when empty) | +| `hosted-signaling-server-account` | array | `{}` | No | 🖌️ | Account information of the hosted signaling server | +| `stun_servers` | array[] | `[]` | Yes | 🖌💻️ | List of STUN servers, should be configured via the web interface or the OCC commands | +| `turn_servers` | array[] | `[]` | Yes | 🖌️💻 | List of TURN servers, should be configured via the web interface or the OCC commands | +| `recording_servers` | array[] | `[]` | Yes | 🖌️ | List of recording servers, should be configured via the web interface | +| `signaling_servers` | array[] | `[]` | Yes | 🖌️💻 | List of signaling servers, should be configured via the web interface or the OCC commands | +| `signaling_mode` | string
`internal` or `external` or `conversation_cluster` | `internal` | Yes | | `internal` when no HPB is configured, `external` when configured, `conversation_cluster` is an experimental flag that is deprecated | +| `sip_bridge_dialin_info` | string | | Yes | 🖌️ | Additional information added in the SIP dial-in invitation mail and sidebar | +| `sip_bridge_dialout_anonymous` | bool | false | No | | When set to true, all out-going SIP calls will be anonymous calls (CLIR) | +| `sip_bridge_dialout_number` | string | | No | | Fallback phone number that is used as caller for out-going calls when the user has no phone-number configured (has to be E164 `+49123456789` formatted) | +| `sip_bridge_dialout_prefix` | string | `+` | No | | Prefix that is added before the first configured phone-number of a user to make it a valid E164 number to be used as a caller for out-going calls | +| `sip_bridge_shared_secret` | string | | Yes | 🖌️ | Shared secret allowing the SIP bridge to authenticate on the Nextcloud server | +| `signaling_ticket_secret` | string | | Yes | | Secret used to secure the signaling tickets for guests (255 character random string) | +| `signaling_token_alg` | string
`ES256`, `ES384`, `RS256`, `RS384`, `RS512` or `EdDSA` | `ES256` | Yes | | Algorithm for the signaling tickets | +| `signaling_token_privkey_*` | string | * | Yes | | Private key for the signaling ticket creation by the server | +| `signaling_token_pubkey_*` | string | * | Yes | | Public key for the signaling ticket creation by the server | +| `hosted-signaling-server-nonce` | string | | No | | Temporary nonce while configuring the hosted signaling server | +| `hosted-signaling-server-account-id` | string | | No | | Account identifier of the hosted signaling server | +| `matterbridge_binary` | string | | No | | Path to the matterbridge binary file | +| `bridge_bot_password` | string | | No | | Automatically generated password of the matterbridge bot user profile | +| `default_attachment_folder` | string | `/Talk` | No | | Specify default attachment folder location | +| `samples_directory` | string | | No | | Specify a readable directory that contains other sample conversation data | +| `start_calls` | int | `0` | Yes | 🖌️ | Who can start a call, see [constants list](constants.md#start-call) | +| `max_call_duration` | int | `0` | No | | Maximum duration of a call in seconds, 0 for unlimited. Federated calls will be terminated based on the setting of the host server. Calls are ended via a background job, so system cron should be used and calls will last a bit longer (until the next execution of the cron). | +| `max-gif-size` | int | `3145728` | No | | Maximum file size for clients to render gifs previews with animation | +| `session-ping-limit` | int | `200` | No | | Number of sessions the HPB can ping in a single request | +| `token_entropy` | int | `8` | No | | Length of conversation tokens, can be increased to make tokens harder to guess but reduces readability and dial-in comfort | +| `default_group_notification` | int | `2` | No | 🖌️ | Default notification level for group conversations [constants list](constants.md#participant-notification-levels) | +| `default_permissions` | int | `246` | Yes | | Default permissions for non-moderators (see [constants list](constants.md#attendee-permissions) for bit flags) | +| `recording_consent` | int | `0` | Yes | 🖌️ | Whether users have to agree on being recorded before they can join the call (see [constants](constants.md#recording-consent-required)) | +| `grid_videos_limit` | int | `19` | No | | Maximum number of videos to show (additional to the own video) | +| `sip_dialin_default` | int | `0` | No | | Default value of SIP dial-in when creating new conversations | +| `retention_event_rooms` | int | `28` | No | | Retention period of event conversations in days (`0` means no-retention) | +| `retention_phone_rooms` | int | `7` | No | | Retention period of phone dial-in and dial-out conversations in days (`0` means no-retention) | +| `retention_instant_meetings` | int | `1` | No | | Retention period of instant meetings in days (`0` means no-retention) | +| `experiments_users` | int | `0` | Yes | | Bit flag of experiments that should be enabled for logged-in users on this server (see [Experiments](#experiments) below) | +| `experiments_guests` | int | `0` | Yes | | Bit flag of experiments that should be enabled for guests on this server (see [Experiments](#experiments) below) | +| `summary_threshold` | int | `100` | No | | Amount of unread messages a user needs before they see the option to summarize with AI | +| `grid_videos_limit_enforced` | string
`yes` or `no` | `no` | No | | Whether the number of grid videos should be enforced | +| `changelog` | string
`yes` or `no` | `yes` | No | | Whether the changelog conversation is updated with new features on major releases | +| `hide_signaling_warning` | string
`yes` or `no` | `no` | No | 🖌️ | Flag that allows to suppress the warning that an HPB should be configured | +| `calls_start_without_media` | string
`yes` or `no` | `no` | Yes | | Whether participants start with enabled or disabled audio and video by default | +| `breakout_rooms` | string
`yes` or `no` | `yes` | Yes | | Whether or not breakout rooms are allowed (Will only prevent creating new breakout rooms. Existing conversations are not modified.) | +| `call_recording` | string
`yes` or `no` | `yes` | Yes | | Enable call recording | +| `call_recording_summary` | string
`yes` or `no` | `yes` | No | 🖌️ | Whether call recordings should automatically be summarized when a transcription and summary provider is enabled. | +| `call_recording_transcription` | string
`yes` or `no` | `no` | No | | Whether call recordings should automatically be transcribed when a transcription provider is enabled. | +| `sip_dialout` | string
`yes` or `no` | `no` | Yes | | SIP dial-out is allowed when a SIP bridge is configured | +| `federation_enabled` | string
`yes` or `no` | `no` | Yes | | 🏗️ *Work in progress:* Whether or not federation with this instance is allowed | +| `federation_incoming_enabled` | string
`1` or `0` | `1` | Yes | | 🏗️ *Work in progress:* Whether users of this instance can be invited to federated conversations | +| `federation_outgoing_enabled` | string
`1` or `0` | `1` | Yes | | 🏗️ *Work in progress:* Whether users of this instance can invite federated users into conversations | +| `federation_only_trusted_servers` | string
`1` or `0` | `0` | Yes | | 🏗️ *Work in progress:* Whether federation should be limited to the list of "Trusted servers" | +| `conversations_files` | string
`1` or `0` | `1` | No | 🖌️ | Whether the files app integration is enabled allowing to start conversations in the right sidebar | +| `conversations_files_public_shares` | string
`1` or `0` | `1` | No | 🖌️ | Whether the public share integration is enabled allowing to start conversations in the right sidebar on the public share page (Requires `conversations_files` also to be enabled) | +| `delete_one_to_one_conversations` | string
`1` or `0` | `0` | No | ️ | Whether one-to-one conversations can be left by either participant or should be deleted when one participant leaves | +| `enable_matterbridge` | string
`1` or `0` | `0` | No | 🖌️ | Whether the Matterbridge integration is enabled and can be configured | +| `force_passwords` | string
`1` or `0` | `0` | No | ️ | Whether public chats are forced to use a password | +| `create_samples` | string
`1` or `0` | `1` | No | ️ | Create sample conversations (the content can be overwritten by providing files in a provided `samples_directory` app config) | +| `call_end_to_end_encryption` | string
`1` or `0` | `0` | No | 🖌️ | Whether clients should end-to-end encrypt streams in calls (Only supported with High-performance backend) | +| `inactivity_lock_after_days` | int | `0` | No | | A duration (in days) after which rooms are locked. Calculated from the last activity in the room. | +| `inactivity_enable_lobby` | string
`1` or `0` | `0` | No | | Additionally enable the lobby for inactive rooms so they can only be read by moderators. | +| `backgrounds_branded_for_guests` | string
`1` or `0` | `0` | No | | Whether guests are allowed to use the virtual backgrounds provided via `themes/talk-backgrounds/` | +| `backgrounds_default_for_users` | string
`1` or `0` | `1` | No | | Whether users are allowed to use the default virtual backgrounds provided by the releases | +| `backgrounds_upload_users` | string
`1` or `0` | `1` | No | | Whether users are allowed to upload custom virtual backgrounds and choose from their Nextcloud Files | +| `guests_play_sounds` | string
`1` or `0` | `1` | No | | Whether guests hear the join and leave sounds by default | + +## Experiments + +Features that can be toggled on-off with the `experiments_users` and `experiments_guests` bit flags: + +| Bit | Status | Introduced | Ended | Description | +|-----|--------|----------------------------------|-------|-----------------------------------------------------------------------------------------------------------------------------| +| 1 | Active | Web 21.1.0
Desktop 1.2.2-beta | - | Instead of refreshing the participant list repeatingly during calls, the data is generated from received signaling messages | +| 2 | Active | Web 21.1.0
Desktop 1.2.2 | - | Make automatic attempts to recover suspended / expired signaling session to allow join the call without page reload | +| 4 | Active | Web 22.0.3
Desktop 2.0.4 | - | Send chat messages via the High performance-backend / websocket | diff --git a/docs/system-requirements.md b/docs/system-requirements.md new file mode 100644 index 0000000..aa73499 --- /dev/null +++ b/docs/system-requirements.md @@ -0,0 +1,39 @@ +# Server + +Nextcloud Talk will significantly increase load on your server, depending on the number of concurrent active participants - no matter whether they use audio call, video call or just the chat. This is due to required signalling and message pulling. By default Talk will use its integrated signalling server, which works just fine for small and medium installations. If you're running Talk on a dedicated or decent virtual server, you shouldn't experience any problems. However, if you're running Talk on a shared webhoster, you might indeed experience issues. Also note that many shared webhosters particularly prohibit running chat server software like Nextcloud Talk; please make sure to check your provider's Terms & Conditions. In this case you might be required to upgrade your package. + +Additional to normal Nextcloud requirements the following constraints apply to use Nextcloud Talk: + +## HTTPS + +HTTPS is required to be able to use WebRTC (the video call technology of browsers used by Nextcloud Talk calls). + +## Database + +* SQLite: must not be used, to grant a decent experience for chats and calls +* MySQL/Maria DB: Must enable utf8mb4 support as per documentation at [Enabling MySQL 4-byte support](https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/mysql_4byte_support.html) + +## Webserver + +Apache and Nginx must use: + +* PHP FPM + mpm_events or +* PHP + mpm_prefork + +Other combinations will not work due to the long polling used for chat and signaling messages, see [this issue](https://github.com/nextcloud/spreed/issues/2211#issuecomment-610198026) for details. + +### WebAssembly and TensorFlow Lite files + +Since Talk 13 the web server needs to handle WebAssembly (.wasm) and TensorFlow Lite (.tflite) files in a similar way to JavaScript and CSS files, as they will be requested by Talk clients to provide certain features (for example, the background blur when Talk is running in a browser). If Apache is used the default configuration provided by the Nextcloud server should be enough; if NGINX is used please refer to the [_NGINX configuration_ section in Nextcloud Administration manual](https://docs.nextcloud.com/server/stable/admin_manual/installation/nginx.html). + +Besides that the web server should associate _.wasm_ files with the right MIME type. This is not strictly needed, though, but if they are not the browser console may show a warning similar to: +``` +wasm streaming compile failed: TypeError: WebAssembly: Response has unsupported MIME type '' expected 'application/wasm' +falling back to ArrayBuffer instantiation +``` + +In Apache, if _mod_mime_ and _.htaccess_ files are enabled, the default _.htaccess_ file in Nextcloud server associates the _application/wasm_ MIME type with _.wasm_ files. Alternatively the association can be done by adding `AddType application/wasm .wasm` in _/etc/apache2/mods-enabled/mime.conf_, or `application/wasm wasm` to _/etc/mime.types_. Similarly, the default configuration for NGINX does the association too, but alternatively it can be done by adding `application/wasm wasm;` to _/etc/nginx/mime.types_. + +## TURN server + +A TURN server running on **port 443** (or 80) is required in almost all scenarios, see [Configuring coTURN](TURN.md) for more details. diff --git a/docs/user-requirements.md b/docs/user-requirements.md new file mode 100644 index 0000000..adf8e1f --- /dev/null +++ b/docs/user-requirements.md @@ -0,0 +1,28 @@ +# User system requirements + +## Browsers + +### Recommended + +* Firefox: latest +* Chrome / Chromium: latest + +### Supported + +* Brave: latest +* Chrome / Chromium: 49 or later + - Screensharing requires version 72 or later or this [Chrome extension](https://chrome.google.com/webstore/detail/screensharing-for-nextclo/kepnpjhambipllfmgmbapncekcmabkol) +* Edge: latest + - Speakers are not promoted + - Name changes while a call is ongoing are not reflected +* Firefox / Firefox ESR: 52 or later + - Screensharing requires Firefox 66 or later +* Opera: 72 or later +* Safari: 13 or later + - Safari does not support virtual backgrounds and background blurring + - Safari 12 also works in general, but users can not share their own screen + +## Mobile apps + +* Android: 8 or later +* iOS: 15 or later diff --git a/docs/video-verfication.png b/docs/video-verfication.png new file mode 100644 index 0000000..84cf217 Binary files /dev/null and b/docs/video-verfication.png differ diff --git a/docs/video-verfication.png.license b/docs/video-verfication.png.license new file mode 100644 index 0000000..a6272dd --- /dev/null +++ b/docs/video-verfication.png.license @@ -0,0 +1,2 @@ +# SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors +# SPDX-License-Identifier: CC0-1.0 diff --git a/docs/webinar.md b/docs/webinar.md new file mode 100644 index 0000000..283e21b --- /dev/null +++ b/docs/webinar.md @@ -0,0 +1,59 @@ +# Webinar management + +Group and public conversations can be used to host webinars. Those online meetings can have a lobby, which come with the following restrictions: + +* Only moderators can start/join a call +* Only moderators can read and write chat messages +* Normal users can only join the room. They then pull the room endpoint regularly for an update and should start the chat and signaling as well as allowing to join the call, once the lobby got disabled. + +## Base endpoint + +* API v1: 🏁 Removed with API v4: Nextcloud 17 - 21 +* API v2: 🏁 Removed with API v4: Nextcloud 19 - 21 +* API v3: 🏁 Removed with API v4: Nextcloud 21 only +* API v4: Base endpoint `/ocs/v2.php/apps/spreed/api/v4`: since Nextcloud 22 + +## Set lobby for a conversation + +* Required capability: `webinary-lobby` +* Method: `PUT` +* Endpoint: `/room/{token}/webinar/lobby` +* Data: + +| field | type | Description | +|---------|----------|------------------------------------------------------------------------------------------| +| `state` | int | New state for the conversation (see [constants list](constants.md#webinar-lobby-states)) | +| `timer` | int/null | Timestamp when the lobby state is reset to no lobby | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the conversation type does not support lobby (only group and public conversation atm) + + `400 Bad Request` When the given timestamp is invalid + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + + - Data: See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) + +## Enabled or disable SIP dial-in + +* Required capability: `sip-support` +* Method: `PUT` +* Endpoint: `/room/{token}/webinar/sip` +* Data: + +| field | type | Description | +|---------|------|----------------------------------------------------------------| +| `state` | int | New SIP state for the conversation (see [constants list](constants.md#sip-states)) | + +* Response: + - Status code: + + `200 OK` + + `400 Bad Request` When the state was invalid or the same + + `400 Bad Request` When the conversation is a breakout room + + `401 Unauthorized` When the user can not enabled SIP + + `403 Forbidden` When the current user is not a moderator/owner + + `404 Not Found` When the conversation could not be found for the participant + + `412 Precondition Failed` When SIP is not configured on the server + + - Data: See array definition in [Get user´s conversations](conversation.md#get-user-s-conversations) diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..b46de18 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,64 @@ +/** + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { recommended } from '@nextcloud/eslint-config' +import globals from 'globals' + +export default [ + ...recommended, + + { + name: 'talk/ignores', + ignores: [ + // Generated files + 'src/types/openapi/*', + 'js/*', + // Vendor code + 'src/utils/**/vendor/*', + // Temporary ignore code in documentation examples + 'docs', + // TODO: upstream + 'openapi-*.json', + ], + }, + + { + name: 'talk/config', + languageOptions: { + globals: { + ...globals.browser, + ...globals.node, + IS_DESKTOP: 'readonly', + __webpack_public_path__: 'writable', + }, + }, + }, + + { + name: 'talk/disabled-during-migration', + rules: { + '@nextcloud/l10n-non-breaking-space': 'off', // changes translation strings + '@nextcloud/l10n-non-breaking-space-vue': 'off', // changes translation strings + '@typescript-eslint/no-unused-expressions': 'off', // non-fixable + '@typescript-eslint/no-unused-vars': 'off', // non-fixable + '@typescript-eslint/no-use-before-define': 'off', // non-fixable + 'jsdoc/check-tag-names': 'off', // need to respect JS + 'jsdoc/reject-function-type': 'off', // need to respect JS + 'jsdoc/reject-any-type': 'off', // need to respect JS + 'jsdoc/require-function-type': 'off', // need to respect JS + 'jsdoc/require-param-type': 'off', // need to respect JS + 'jsdoc/require-param-description': 'off', // need to respect JS + 'jsdoc/require-throws-type': 'off', // need to respect JS + 'no-console': 'off', // non-fixable + 'no-unused-vars': 'off', // non-fixable + 'no-useless-assignment': 'off', // non-fixable + 'no-use-before-define': 'off', // non-fixable + 'vue/no-boolean-default': 'off', // non-fixable + 'vue/no-required-prop-with-default': 'off', // non-fixable + 'vue/no-unused-properties': 'off', // non-fixable + 'vue/no-unused-refs': 'off', // non-fixable + }, + }, +] diff --git a/img/LibremPhoneCall.flac b/img/LibremPhoneCall.flac new file mode 100644 index 0000000..be93104 Binary files /dev/null and b/img/LibremPhoneCall.flac differ diff --git a/img/LibremPhoneCall.ogg b/img/LibremPhoneCall.ogg new file mode 100644 index 0000000..51d1bc0 Binary files /dev/null and b/img/LibremPhoneCall.ogg differ diff --git a/img/app-dark.png b/img/app-dark.png new file mode 100644 index 0000000..c3bdeab Binary files /dev/null and b/img/app-dark.png differ diff --git a/img/app-dark.svg b/img/app-dark.svg new file mode 100644 index 0000000..3e133d0 --- /dev/null +++ b/img/app-dark.svg @@ -0,0 +1 @@ + diff --git a/img/app.svg b/img/app.svg new file mode 100644 index 0000000..024e8ca --- /dev/null +++ b/img/app.svg @@ -0,0 +1 @@ + diff --git a/img/backgrounds/1_office.jpg b/img/backgrounds/1_office.jpg new file mode 100644 index 0000000..3cfcaf5 Binary files /dev/null and b/img/backgrounds/1_office.jpg differ diff --git a/img/backgrounds/2_home.jpg b/img/backgrounds/2_home.jpg new file mode 100644 index 0000000..1bbc09a Binary files /dev/null and b/img/backgrounds/2_home.jpg differ diff --git a/img/backgrounds/3_abstract.jpg b/img/backgrounds/3_abstract.jpg new file mode 100644 index 0000000..679bb7f Binary files /dev/null and b/img/backgrounds/3_abstract.jpg differ diff --git a/img/backgrounds/4_beach.jpg b/img/backgrounds/4_beach.jpg new file mode 100644 index 0000000..5ea98c6 Binary files /dev/null and b/img/backgrounds/4_beach.jpg differ diff --git a/img/backgrounds/5_park.jpg b/img/backgrounds/5_park.jpg new file mode 100644 index 0000000..00c0108 Binary files /dev/null and b/img/backgrounds/5_park.jpg differ diff --git a/img/backgrounds/6_theater.jpg b/img/backgrounds/6_theater.jpg new file mode 100644 index 0000000..07bf9d1 Binary files /dev/null and b/img/backgrounds/6_theater.jpg differ diff --git a/img/backgrounds/7_library.jpg b/img/backgrounds/7_library.jpg new file mode 100644 index 0000000..9d1bb25 Binary files /dev/null and b/img/backgrounds/7_library.jpg differ diff --git a/img/backgrounds/8_space_station.jpg b/img/backgrounds/8_space_station.jpg new file mode 100644 index 0000000..076110a Binary files /dev/null and b/img/backgrounds/8_space_station.jpg differ diff --git a/img/bridge-bot.png b/img/bridge-bot.png new file mode 100644 index 0000000..99ab81e Binary files /dev/null and b/img/bridge-bot.png differ diff --git a/img/bridge-services/discord.svg b/img/bridge-services/discord.svg new file mode 100755 index 0000000..6ed3af2 --- /dev/null +++ b/img/bridge-services/discord.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/bridge-services/irc.svg b/img/bridge-services/irc.svg new file mode 100644 index 0000000..7932136 --- /dev/null +++ b/img/bridge-services/irc.svg @@ -0,0 +1 @@ + diff --git a/img/bridge-services/matrix.svg b/img/bridge-services/matrix.svg new file mode 100644 index 0000000..f2106b2 --- /dev/null +++ b/img/bridge-services/matrix.svg @@ -0,0 +1,9 @@ + + + Matrix (protocol) logo + + + + + + diff --git a/img/bridge-services/mattermost.svg b/img/bridge-services/mattermost.svg new file mode 100644 index 0000000..4784da7 --- /dev/null +++ b/img/bridge-services/mattermost.svg @@ -0,0 +1 @@ + diff --git a/img/bridge-services/msteams.svg b/img/bridge-services/msteams.svg new file mode 100644 index 0000000..454a6a8 --- /dev/null +++ b/img/bridge-services/msteams.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/bridge-services/rocketchat.svg b/img/bridge-services/rocketchat.svg new file mode 100644 index 0000000..85ff1ed --- /dev/null +++ b/img/bridge-services/rocketchat.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/img/bridge-services/slack.svg b/img/bridge-services/slack.svg new file mode 100644 index 0000000..83226f4 --- /dev/null +++ b/img/bridge-services/slack.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/bridge-services/steam.svg b/img/bridge-services/steam.svg new file mode 100644 index 0000000..8d45415 --- /dev/null +++ b/img/bridge-services/steam.svg @@ -0,0 +1,3 @@ + + + diff --git a/img/bridge-services/telegram.svg b/img/bridge-services/telegram.svg new file mode 100644 index 0000000..8b44dad --- /dev/null +++ b/img/bridge-services/telegram.svg @@ -0,0 +1,2 @@ + + diff --git a/img/bridge-services/xmpp.svg b/img/bridge-services/xmpp.svg new file mode 100644 index 0000000..065b687 --- /dev/null +++ b/img/bridge-services/xmpp.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/bridge-services/zulip.svg b/img/bridge-services/zulip.svg new file mode 100644 index 0000000..4067be1 --- /dev/null +++ b/img/bridge-services/zulip.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/img/changelog.svg b/img/changelog.svg new file mode 100644 index 0000000..72d95a0 --- /dev/null +++ b/img/changelog.svg @@ -0,0 +1 @@ + diff --git a/img/dashboard/meetings.png b/img/dashboard/meetings.png new file mode 100644 index 0000000..5d5f934 Binary files /dev/null and b/img/dashboard/meetings.png differ diff --git a/img/dashboard/mentions.png b/img/dashboard/mentions.png new file mode 100644 index 0000000..73a6425 Binary files /dev/null and b/img/dashboard/mentions.png differ diff --git a/img/dashboard/reminders.png b/img/dashboard/reminders.png new file mode 100644 index 0000000..3bf9474 Binary files /dev/null and b/img/dashboard/reminders.png differ diff --git a/img/dashboard/welcome.png b/img/dashboard/welcome.png new file mode 100644 index 0000000..8a05614 Binary files /dev/null and b/img/dashboard/welcome.png differ diff --git a/img/emojis/Clap.gif b/img/emojis/Clap.gif new file mode 100644 index 0000000..c2ed0b7 Binary files /dev/null and b/img/emojis/Clap.gif differ diff --git a/img/emojis/Concerned.gif b/img/emojis/Concerned.gif new file mode 100644 index 0000000..1cb66be Binary files /dev/null and b/img/emojis/Concerned.gif differ diff --git a/img/emojis/Fire.gif b/img/emojis/Fire.gif new file mode 100644 index 0000000..2428075 Binary files /dev/null and b/img/emojis/Fire.gif differ diff --git a/img/emojis/Heart.gif b/img/emojis/Heart.gif new file mode 100644 index 0000000..2f63dec Binary files /dev/null and b/img/emojis/Heart.gif differ diff --git a/img/emojis/Joy.gif b/img/emojis/Joy.gif new file mode 100644 index 0000000..cb72152 Binary files /dev/null and b/img/emojis/Joy.gif differ diff --git a/img/emojis/Party.gif b/img/emojis/Party.gif new file mode 100644 index 0000000..b9f809e Binary files /dev/null and b/img/emojis/Party.gif differ diff --git a/img/emojis/Star-struck.gif b/img/emojis/Star-struck.gif new file mode 100644 index 0000000..08feb7d Binary files /dev/null and b/img/emojis/Star-struck.gif differ diff --git a/img/emojis/Surprised.gif b/img/emojis/Surprised.gif new file mode 100644 index 0000000..06a6cda Binary files /dev/null and b/img/emojis/Surprised.gif differ diff --git a/img/emojis/Thinking-face.gif b/img/emojis/Thinking-face.gif new file mode 100644 index 0000000..21388a7 Binary files /dev/null and b/img/emojis/Thinking-face.gif differ diff --git a/img/emojis/Thumbs-down.gif b/img/emojis/Thumbs-down.gif new file mode 100644 index 0000000..6a3dcf0 Binary files /dev/null and b/img/emojis/Thumbs-down.gif differ diff --git a/img/emojis/Thumbs-up.gif b/img/emojis/Thumbs-up.gif new file mode 100644 index 0000000..bbaaddc Binary files /dev/null and b/img/emojis/Thumbs-up.gif differ diff --git a/img/emojis/Wave.gif b/img/emojis/Wave.gif new file mode 100644 index 0000000..bb0fc5f Binary files /dev/null and b/img/emojis/Wave.gif differ diff --git a/img/favicon-mask.svg b/img/favicon-mask.svg new file mode 100644 index 0000000..3cc8bf0 --- /dev/null +++ b/img/favicon-mask.svg @@ -0,0 +1 @@ + diff --git a/img/favicon-touch.png b/img/favicon-touch.png new file mode 100644 index 0000000..b8efab9 Binary files /dev/null and b/img/favicon-touch.png differ diff --git a/img/favicon-touch.svg b/img/favicon-touch.svg new file mode 100644 index 0000000..bdb5475 --- /dev/null +++ b/img/favicon-touch.svg @@ -0,0 +1 @@ + diff --git a/img/favicon.ico b/img/favicon.ico new file mode 100644 index 0000000..b6a22fc Binary files /dev/null and b/img/favicon.ico differ diff --git a/img/favicon.png b/img/favicon.png new file mode 100644 index 0000000..0ed7afe Binary files /dev/null and b/img/favicon.png differ diff --git a/img/favicon.svg b/img/favicon.svg new file mode 100644 index 0000000..46040be --- /dev/null +++ b/img/favicon.svg @@ -0,0 +1 @@ + diff --git a/img/icon-contacts-white.svg b/img/icon-contacts-white.svg new file mode 100644 index 0000000..fd14916 --- /dev/null +++ b/img/icon-contacts-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-conversation-event-bright.svg b/img/icon-conversation-event-bright.svg new file mode 100644 index 0000000..18198d3 --- /dev/null +++ b/img/icon-conversation-event-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-event-dark.svg b/img/icon-conversation-event-dark.svg new file mode 100644 index 0000000..d3dafc3 --- /dev/null +++ b/img/icon-conversation-event-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-federation-bright.svg b/img/icon-conversation-federation-bright.svg new file mode 100644 index 0000000..a0e5a04 --- /dev/null +++ b/img/icon-conversation-federation-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-federation-dark.svg b/img/icon-conversation-federation-dark.svg new file mode 100644 index 0000000..df9a048 --- /dev/null +++ b/img/icon-conversation-federation-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-group-bright.svg b/img/icon-conversation-group-bright.svg new file mode 100644 index 0000000..a023c30 --- /dev/null +++ b/img/icon-conversation-group-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-group-dark.svg b/img/icon-conversation-group-dark.svg new file mode 100644 index 0000000..1e88b7f --- /dev/null +++ b/img/icon-conversation-group-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-mail-bright.svg b/img/icon-conversation-mail-bright.svg new file mode 100644 index 0000000..6442081 --- /dev/null +++ b/img/icon-conversation-mail-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-mail-dark.svg b/img/icon-conversation-mail-dark.svg new file mode 100644 index 0000000..b3a40d2 --- /dev/null +++ b/img/icon-conversation-mail-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-password-bright.svg b/img/icon-conversation-password-bright.svg new file mode 100644 index 0000000..091afd5 --- /dev/null +++ b/img/icon-conversation-password-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-password-dark.svg b/img/icon-conversation-password-dark.svg new file mode 100644 index 0000000..1be00b0 --- /dev/null +++ b/img/icon-conversation-password-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-phone-bright.svg b/img/icon-conversation-phone-bright.svg new file mode 100644 index 0000000..24d8be6 --- /dev/null +++ b/img/icon-conversation-phone-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-phone-dark.svg b/img/icon-conversation-phone-dark.svg new file mode 100644 index 0000000..95ce7fe --- /dev/null +++ b/img/icon-conversation-phone-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-public-bright.svg b/img/icon-conversation-public-bright.svg new file mode 100644 index 0000000..67111b7 --- /dev/null +++ b/img/icon-conversation-public-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-public-dark.svg b/img/icon-conversation-public-dark.svg new file mode 100644 index 0000000..b364ffc --- /dev/null +++ b/img/icon-conversation-public-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-text-bright.svg b/img/icon-conversation-text-bright.svg new file mode 100644 index 0000000..95ed6b1 --- /dev/null +++ b/img/icon-conversation-text-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-text-dark.svg b/img/icon-conversation-text-dark.svg new file mode 100644 index 0000000..24aa415 --- /dev/null +++ b/img/icon-conversation-text-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-user-bright.svg b/img/icon-conversation-user-bright.svg new file mode 100644 index 0000000..c6bc0ad --- /dev/null +++ b/img/icon-conversation-user-bright.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-conversation-user-dark.svg b/img/icon-conversation-user-dark.svg new file mode 100644 index 0000000..cf98004 --- /dev/null +++ b/img/icon-conversation-user-dark.svg @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/img/icon-event-white.svg b/img/icon-event-white.svg new file mode 100644 index 0000000..22b7faa --- /dev/null +++ b/img/icon-event-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-mail-white.svg b/img/icon-mail-white.svg new file mode 100644 index 0000000..ddec430 --- /dev/null +++ b/img/icon-mail-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-password-white.svg b/img/icon-password-white.svg new file mode 100644 index 0000000..80e4ed5 --- /dev/null +++ b/img/icon-password-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-phone-white.svg b/img/icon-phone-white.svg new file mode 100644 index 0000000..0d4c165 --- /dev/null +++ b/img/icon-phone-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-public-white.svg b/img/icon-public-white.svg new file mode 100644 index 0000000..9439723 --- /dev/null +++ b/img/icon-public-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-team-white.svg b/img/icon-team-white.svg new file mode 100644 index 0000000..d4eb424 --- /dev/null +++ b/img/icon-team-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-text-white.svg b/img/icon-text-white.svg new file mode 100644 index 0000000..ef9a1ee --- /dev/null +++ b/img/icon-text-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/icon-user-white.svg b/img/icon-user-white.svg new file mode 100644 index 0000000..ad697ce --- /dev/null +++ b/img/icon-user-white.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/join_call.flac b/img/join_call.flac new file mode 100644 index 0000000..bd09fb9 Binary files /dev/null and b/img/join_call.flac differ diff --git a/img/join_call.ogg b/img/join_call.ogg new file mode 100644 index 0000000..6350071 Binary files /dev/null and b/img/join_call.ogg differ diff --git a/img/leave_call.flac b/img/leave_call.flac new file mode 100644 index 0000000..0efdd19 Binary files /dev/null and b/img/leave_call.flac differ diff --git a/img/leave_call.ogg b/img/leave_call.ogg new file mode 100644 index 0000000..5e4177c Binary files /dev/null and b/img/leave_call.ogg differ diff --git a/img/material-icons/file-download.svg b/img/material-icons/file-download.svg new file mode 100644 index 0000000..7fd728d --- /dev/null +++ b/img/material-icons/file-download.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/material-icons/file-upload.svg b/img/material-icons/file-upload.svg new file mode 100644 index 0000000..2c3e831 --- /dev/null +++ b/img/material-icons/file-upload.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/material-icons/microphone-off-outline.svg b/img/material-icons/microphone-off-outline.svg new file mode 100644 index 0000000..d2d8d47 --- /dev/null +++ b/img/material-icons/microphone-off-outline.svg @@ -0,0 +1,4 @@ + + + diff --git a/img/material-icons/perm-media-outline.svg b/img/material-icons/perm-media-outline.svg new file mode 100644 index 0000000..3a009df --- /dev/null +++ b/img/material-icons/perm-media-outline.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file diff --git a/img/material-icons/replace-background.svg b/img/material-icons/replace-background.svg new file mode 100644 index 0000000..cf0b0ef --- /dev/null +++ b/img/material-icons/replace-background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/material-icons/screen-record-outline.svg b/img/material-icons/screen-record-outline.svg new file mode 100644 index 0000000..1169bc4 --- /dev/null +++ b/img/material-icons/screen-record-outline.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/img/material-icons/smart-picker.svg b/img/material-icons/smart-picker.svg new file mode 100644 index 0000000..a11e87e --- /dev/null +++ b/img/material-icons/smart-picker.svg @@ -0,0 +1,7 @@ + + + + + diff --git a/img/material-icons/volume-high-outline.svg b/img/material-icons/volume-high-outline.svg new file mode 100644 index 0000000..530788e --- /dev/null +++ b/img/material-icons/volume-high-outline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/img/material-icons/volume-off-outline.svg b/img/material-icons/volume-off-outline.svg new file mode 100644 index 0000000..b202bf3 --- /dev/null +++ b/img/material-icons/volume-off-outline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/img/phone.png b/img/phone.png new file mode 100644 index 0000000..29d45b2 Binary files /dev/null and b/img/phone.png differ diff --git a/l10n/.gitkeep b/l10n/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/l10n/af.js b/l10n/af.js new file mode 100644 index 0000000..f1e565b --- /dev/null +++ b/l10n/af.js @@ -0,0 +1,341 @@ +OC.L10N.register( + "spreed", + { + "Guest" : "Gas", + "File not found" : "Lêer nie gevind nie", + "File is too big" : "Lêer is te groot", + "Invalid file provided" : "Ongeldige lêer verskaf", + "Invalid image" : "Ongeldige beeld", + "Unknown filetype" : "Onbekende lêertipe", + "Description" : "Beskrywing", + "Accept" : "Aanvaar", + "New message" : "Nuwe boodskap", + "Open settings" : "Open instellings", + "error" : "fout", + "Default" : "Verstek", + "Other" : "Ander", + "Andorra" : "Andorra", + "United Arab Emirates" : "Verenigde Arabiese Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua en Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanië", + "Armenia" : "Armenië", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentinië", + "American Samoa" : "Amerikaans-Samoa", + "Austria" : "Oostenryk", + "Australia" : "Australië", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandeilande", + "Azerbaijan" : "Azerbeidjan", + "Bosnia and Herzegovina" : "Bosnië-Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesj", + "Belgium" : "België", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarye", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sint Bartholomeus", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Broenei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint-Eustatius en Saba", + "Brazil" : "Brasilië", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoetan", + "Bouvet Island" : "Bouveteiland", + "Botswana" : "Botswana", + "Belarus" : "Wit-Rusland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos- (Keeling-) eilande", + "Central African Republic" : "Sentraal Afrikaanse Republiek", + "Congo" : "Kongo", + "Switzerland" : "Switserland", + "Côte d'Ivoire" : "Ivoorkus", + "Cook Islands" : "Cookeilande", + "Chile" : "Chili", + "Cameroon" : "Kameroen", + "China" : "Sjina", + "Colombia" : "Colombië", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kaap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Kerseiland", + "Cyprus" : "Siprus", + "Czechia" : "Tsjeggië", + "Germany" : "Duitsland", + "Djibouti" : "Djiboeti", + "Denmark" : "Denemarke", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikaanse Republiek", + "Algeria" : "Algerië", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egipte", + "Western Sahara" : "Wes-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanje", + "Ethiopia" : "Ethiopië", + "Finland" : "Finland", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Falklandeilande (Malvinas)", + "Faroe Islands" : "Faroëreilande", + "France" : "Frankryk", + "Gabon" : "Gaboen", + "United Kingdom of Great Britain and Northern Ireland" : "Verenigde Koninkryk van Groot-Brittanje en Noord-Ierland", + "Grenada" : "Grenada", + "Georgia" : "Georgië", + "French Guiana" : "Frans-Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambië", + "Guinea" : "Guinee", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekwatoriaal Guinee", + "Greece" : "Griekeland", + "South Georgia and the South Sandwich Islands" : "Suid-Georgië en die Suidelike Sandwicheilande", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinee-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heardeiland en McDonaldeilande", + "Honduras" : "Honduras", + "Croatia" : "Kroasië", + "Haiti" : "Haïti", + "Hungary" : "Hongarye", + "Indonesia" : "Indonesië", + "Ireland" : "Ierland", + "Israel" : "Israel", + "Isle of Man" : "Man, die eiland", + "India" : "Indië", + "British Indian Ocean Territory" : "Britse Indiese Oseaangebied", + "Iraq" : "Irak", + "Iceland" : "Ysland", + "Italy" : "Italië", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanië", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgisië", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Sint Kitts en Nevis", + "Kuwait" : "Koeweit", + "Cayman Islands" : "Kaaimanseilande", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Laos Demokratiese Volksrepubliek", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberië", + "Lesotho" : "Lesotho", + "Lithuania" : "Litaue", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letland", + "Libya" : "Libië", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sint Martin (Franse deel)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalleilande", + "Mali" : "Mali", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongolië", + "Macao" : "Macao", + "Northern Mariana Islands" : "Noordelike Marianaeilande", + "Martinique" : "Martinique", + "Mauritania" : "Mauritanië", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maledive", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Maleisië", + "Mozambique" : "Mosambiek", + "Namibia" : "Namibië", + "New Caledonia" : "Nieu-Kaledonië", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkeiland", + "Nigeria" : "Nigerië", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Noorweë", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nieu-Seeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Frans-Polinesië", + "Papua New Guinea" : "Papoea-Nieu-Guinee", + "Philippines" : "Filippyne", + "Pakistan" : "Pakistan", + "Poland" : "Pole", + "Saint Pierre and Miquelon" : "Sint Pierre en Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina (omstrede gebied)", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Roemenië", + "Serbia" : "Serwië", + "Russian Federation" : "Russiese Federasie", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saoedi-Arabië", + "Solomon Islands" : "Solomoneilande", + "Seychelles" : "Seychelle", + "Sudan" : "Seodan", + "Sweden" : "Swede", + "Singapore" : "Singapoer", + "Saint Helena, Ascension and Tristan da Cunha" : "Sint Helena, Ascension en Tristan da Cunha", + "Slovenia" : "Slowenië", + "Svalbard and Jan Mayen" : "Spitsbergen en Jan Mayen", + "Slovakia" : "Slowakye", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalië", + "Suriname" : "Suriname", + "South Sudan" : "Suid-Soedan", + "Sao Tome and Principe" : "São Tomé en Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Nederlandse deel)", + "Syrian Arab Republic" : "Siriese Arabiese Republiek", + "Turks and Caicos Islands" : "Turks- en Caicoseilande", + "Chad" : "Tsjad", + "French Southern Territories" : "Franse Suidelike en Antarktiese Gebiede", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Oos-Timor", + "Turkmenistan" : "Turkmenië", + "Tunisia" : "Tunisië", + "Tonga" : "Tonga", + "Turkey" : "Turkye", + "Trinidad and Tobago" : "Trinidad en Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzanië, Verenigde Republiek van", + "Ukraine" : "Oekraïne", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Klein Afgeleë Eilande van die Verenigde State van Amerika", + "United States of America" : "Verenigde State van Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Oesbekistan", + "Holy See" : "Vatikaanstad", + "Saint Vincent and the Grenadines" : "Sint Vincent en die Grenadine", + "Viet Nam" : "Viëtnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis en Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suid-Afrika", + "Zambia" : "Zambië", + "Zimbabwe" : "Zimbabwe", + "The password is wrong. Try again." : "Die wagwoord is verkeerd. Probeer weer.", + "Password" : "Wagwoord", + "Submit" : "Dien in", + "Everyone" : "Almal", + "Save changes" : "Bewaar veranderinge", + "Saving …" : "Word gestoor …", + "Saved!" : "Gestoor!", + "Name" : "Naam", + "All messages" : "Alle boodskappe", + "Off" : "Af", + "Pending" : "Hangend", + "Error" : "Fout", + "Active" : "Aktief", + "Language" : "Taal", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Geskep om", + "Error code" : "Foutkode", + "OK" : "Goed", + "Checking …" : "Gaan tans na …", + "Confirm" : "Bevestig", + "Reset" : "Herstel", + "Cancel" : "Kanselleer", + "Back" : "Terug", + "From" : "Van", + "To" : "Aan", + "Calendar" : "Kalender", + "Attendees" : "Bywoners", + "Save" : "Stoor", + "This conversation is read-only" : "Hierdie gesprek is leesalleen", + "Copy link" : "Kopieer skakel", + "None" : "Geen", + "You" : "U", + "Collapse" : "Vou In", + "Favorite" : "Gunsteling", + "Disable" : "Deaktiveer", + "Choose" : "Kies", + "Personal" : "Persoonlik", + "Leave conversation" : "verlaat gesprek", + "Delete conversation" : "Skrap gesprek", + "Edit" : "Wysig", + "Delete" : "Skrap", + "Notifications" : "Kennisgewings", + "Join" : "Sluit aan", + "Log in" : "Teken Aan", + "Remove from favorites" : "Verwyder uit gunstelinge", + "Add to favorites" : "Voeg by gunstelinge", + "Home" : "Tuis", + "Alphabetically" : "Alfabeties", + "Users" : "Gebruikers", + "Groups" : "Groepe", + "You are currently waiting in the lobby" : "U wag tans in die voorportaal", + "Devices" : "Toestelle", + "Upload" : "Oplaai", + "Files" : " Lêers", + "Reply" : "Antwoord", + "Dismiss" : "Ontslaan", + "Send now" : "Stuur nou", + "Contact" : "Kontak", + "Add participants" : "Voeg deelnemers toe", + "Enter password" : "Voer wagwoord in", + "Send later" : "Stuur later", + "Send" : "Stuur", + "Settings" : "Instellings", + "guest" : "gas", + "Remove participant" : "Verwyder deelnemer", + "Promote to moderator" : "Bevorder na moderator", + "Chat" : "Klets", + "Details" : "Besonderhede", + "Privacy" : "Privaatheid", + "Search" : "Soek", + "Keep" : "Hou", + "Select a region" : "Kies ’n streek", + "User" : "Gebruiker", + "Login" : "Teken aan", + "Nickname" : "Bynaam", + "Client ID" : "Kliënt-ID", + "Media" : "Media", + "Audio" : "Oudio", + "Group" : "Groep", + "Please reload the page." : "Herlaai asseblief die bladsy.", + "Do not disturb" : "Moenie pla nie", + "Away" : "Weg", + "Android app" : "Android-toep", + "iOS app" : "iOS-toep", + "__language_name__" : "Afrikaans", + "Tasks" : "Take" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/af.json b/l10n/af.json new file mode 100644 index 0000000..7049ebf --- /dev/null +++ b/l10n/af.json @@ -0,0 +1,339 @@ +{ "translations": { + "Guest" : "Gas", + "File not found" : "Lêer nie gevind nie", + "File is too big" : "Lêer is te groot", + "Invalid file provided" : "Ongeldige lêer verskaf", + "Invalid image" : "Ongeldige beeld", + "Unknown filetype" : "Onbekende lêertipe", + "Description" : "Beskrywing", + "Accept" : "Aanvaar", + "New message" : "Nuwe boodskap", + "Open settings" : "Open instellings", + "error" : "fout", + "Default" : "Verstek", + "Other" : "Ander", + "Andorra" : "Andorra", + "United Arab Emirates" : "Verenigde Arabiese Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua en Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanië", + "Armenia" : "Armenië", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentinië", + "American Samoa" : "Amerikaans-Samoa", + "Austria" : "Oostenryk", + "Australia" : "Australië", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandeilande", + "Azerbaijan" : "Azerbeidjan", + "Bosnia and Herzegovina" : "Bosnië-Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesj", + "Belgium" : "België", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarye", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sint Bartholomeus", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Broenei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint-Eustatius en Saba", + "Brazil" : "Brasilië", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoetan", + "Bouvet Island" : "Bouveteiland", + "Botswana" : "Botswana", + "Belarus" : "Wit-Rusland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos- (Keeling-) eilande", + "Central African Republic" : "Sentraal Afrikaanse Republiek", + "Congo" : "Kongo", + "Switzerland" : "Switserland", + "Côte d'Ivoire" : "Ivoorkus", + "Cook Islands" : "Cookeilande", + "Chile" : "Chili", + "Cameroon" : "Kameroen", + "China" : "Sjina", + "Colombia" : "Colombië", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kaap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Kerseiland", + "Cyprus" : "Siprus", + "Czechia" : "Tsjeggië", + "Germany" : "Duitsland", + "Djibouti" : "Djiboeti", + "Denmark" : "Denemarke", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikaanse Republiek", + "Algeria" : "Algerië", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egipte", + "Western Sahara" : "Wes-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanje", + "Ethiopia" : "Ethiopië", + "Finland" : "Finland", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Falklandeilande (Malvinas)", + "Faroe Islands" : "Faroëreilande", + "France" : "Frankryk", + "Gabon" : "Gaboen", + "United Kingdom of Great Britain and Northern Ireland" : "Verenigde Koninkryk van Groot-Brittanje en Noord-Ierland", + "Grenada" : "Grenada", + "Georgia" : "Georgië", + "French Guiana" : "Frans-Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambië", + "Guinea" : "Guinee", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekwatoriaal Guinee", + "Greece" : "Griekeland", + "South Georgia and the South Sandwich Islands" : "Suid-Georgië en die Suidelike Sandwicheilande", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinee-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heardeiland en McDonaldeilande", + "Honduras" : "Honduras", + "Croatia" : "Kroasië", + "Haiti" : "Haïti", + "Hungary" : "Hongarye", + "Indonesia" : "Indonesië", + "Ireland" : "Ierland", + "Israel" : "Israel", + "Isle of Man" : "Man, die eiland", + "India" : "Indië", + "British Indian Ocean Territory" : "Britse Indiese Oseaangebied", + "Iraq" : "Irak", + "Iceland" : "Ysland", + "Italy" : "Italië", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanië", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgisië", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Sint Kitts en Nevis", + "Kuwait" : "Koeweit", + "Cayman Islands" : "Kaaimanseilande", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Laos Demokratiese Volksrepubliek", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberië", + "Lesotho" : "Lesotho", + "Lithuania" : "Litaue", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letland", + "Libya" : "Libië", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sint Martin (Franse deel)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalleilande", + "Mali" : "Mali", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongolië", + "Macao" : "Macao", + "Northern Mariana Islands" : "Noordelike Marianaeilande", + "Martinique" : "Martinique", + "Mauritania" : "Mauritanië", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maledive", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Maleisië", + "Mozambique" : "Mosambiek", + "Namibia" : "Namibië", + "New Caledonia" : "Nieu-Kaledonië", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkeiland", + "Nigeria" : "Nigerië", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Noorweë", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nieu-Seeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Frans-Polinesië", + "Papua New Guinea" : "Papoea-Nieu-Guinee", + "Philippines" : "Filippyne", + "Pakistan" : "Pakistan", + "Poland" : "Pole", + "Saint Pierre and Miquelon" : "Sint Pierre en Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina (omstrede gebied)", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Roemenië", + "Serbia" : "Serwië", + "Russian Federation" : "Russiese Federasie", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saoedi-Arabië", + "Solomon Islands" : "Solomoneilande", + "Seychelles" : "Seychelle", + "Sudan" : "Seodan", + "Sweden" : "Swede", + "Singapore" : "Singapoer", + "Saint Helena, Ascension and Tristan da Cunha" : "Sint Helena, Ascension en Tristan da Cunha", + "Slovenia" : "Slowenië", + "Svalbard and Jan Mayen" : "Spitsbergen en Jan Mayen", + "Slovakia" : "Slowakye", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalië", + "Suriname" : "Suriname", + "South Sudan" : "Suid-Soedan", + "Sao Tome and Principe" : "São Tomé en Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Nederlandse deel)", + "Syrian Arab Republic" : "Siriese Arabiese Republiek", + "Turks and Caicos Islands" : "Turks- en Caicoseilande", + "Chad" : "Tsjad", + "French Southern Territories" : "Franse Suidelike en Antarktiese Gebiede", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Oos-Timor", + "Turkmenistan" : "Turkmenië", + "Tunisia" : "Tunisië", + "Tonga" : "Tonga", + "Turkey" : "Turkye", + "Trinidad and Tobago" : "Trinidad en Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzanië, Verenigde Republiek van", + "Ukraine" : "Oekraïne", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Klein Afgeleë Eilande van die Verenigde State van Amerika", + "United States of America" : "Verenigde State van Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Oesbekistan", + "Holy See" : "Vatikaanstad", + "Saint Vincent and the Grenadines" : "Sint Vincent en die Grenadine", + "Viet Nam" : "Viëtnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis en Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suid-Afrika", + "Zambia" : "Zambië", + "Zimbabwe" : "Zimbabwe", + "The password is wrong. Try again." : "Die wagwoord is verkeerd. Probeer weer.", + "Password" : "Wagwoord", + "Submit" : "Dien in", + "Everyone" : "Almal", + "Save changes" : "Bewaar veranderinge", + "Saving …" : "Word gestoor …", + "Saved!" : "Gestoor!", + "Name" : "Naam", + "All messages" : "Alle boodskappe", + "Off" : "Af", + "Pending" : "Hangend", + "Error" : "Fout", + "Active" : "Aktief", + "Language" : "Taal", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Geskep om", + "Error code" : "Foutkode", + "OK" : "Goed", + "Checking …" : "Gaan tans na …", + "Confirm" : "Bevestig", + "Reset" : "Herstel", + "Cancel" : "Kanselleer", + "Back" : "Terug", + "From" : "Van", + "To" : "Aan", + "Calendar" : "Kalender", + "Attendees" : "Bywoners", + "Save" : "Stoor", + "This conversation is read-only" : "Hierdie gesprek is leesalleen", + "Copy link" : "Kopieer skakel", + "None" : "Geen", + "You" : "U", + "Collapse" : "Vou In", + "Favorite" : "Gunsteling", + "Disable" : "Deaktiveer", + "Choose" : "Kies", + "Personal" : "Persoonlik", + "Leave conversation" : "verlaat gesprek", + "Delete conversation" : "Skrap gesprek", + "Edit" : "Wysig", + "Delete" : "Skrap", + "Notifications" : "Kennisgewings", + "Join" : "Sluit aan", + "Log in" : "Teken Aan", + "Remove from favorites" : "Verwyder uit gunstelinge", + "Add to favorites" : "Voeg by gunstelinge", + "Home" : "Tuis", + "Alphabetically" : "Alfabeties", + "Users" : "Gebruikers", + "Groups" : "Groepe", + "You are currently waiting in the lobby" : "U wag tans in die voorportaal", + "Devices" : "Toestelle", + "Upload" : "Oplaai", + "Files" : " Lêers", + "Reply" : "Antwoord", + "Dismiss" : "Ontslaan", + "Send now" : "Stuur nou", + "Contact" : "Kontak", + "Add participants" : "Voeg deelnemers toe", + "Enter password" : "Voer wagwoord in", + "Send later" : "Stuur later", + "Send" : "Stuur", + "Settings" : "Instellings", + "guest" : "gas", + "Remove participant" : "Verwyder deelnemer", + "Promote to moderator" : "Bevorder na moderator", + "Chat" : "Klets", + "Details" : "Besonderhede", + "Privacy" : "Privaatheid", + "Search" : "Soek", + "Keep" : "Hou", + "Select a region" : "Kies ’n streek", + "User" : "Gebruiker", + "Login" : "Teken aan", + "Nickname" : "Bynaam", + "Client ID" : "Kliënt-ID", + "Media" : "Media", + "Audio" : "Oudio", + "Group" : "Groep", + "Please reload the page." : "Herlaai asseblief die bladsy.", + "Do not disturb" : "Moenie pla nie", + "Away" : "Weg", + "Android app" : "Android-toep", + "iOS app" : "iOS-toep", + "__language_name__" : "Afrikaans", + "Tasks" : "Take" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/ar.js b/l10n/ar.js new file mode 100644 index 0000000..bdb3c11 --- /dev/null +++ b/l10n/ar.js @@ -0,0 +1,1991 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "محادثة", + "(Duration %s)" : "(المدة الزمنية %s)", + "You attended a call with {user1}" : "لقد حضرت مكالمة مع {user1}", + "_%n guest_::_%n guests_" : ["%n ضيف","%n ضيف","%n ضيف","%n ضيف","%n ضيف","%nضيف"], + "You attended a call with {user1} and {user2}" : "لقد حضرت مكالمة مع {user1} و {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3} و {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3} و {user4} و {user5}", + "_%n other_::_%n others_" : [" %n لايوجد آخرون"," %n شخص واحد","%n شخصان آخران","%n  بضعة أشخاص آخرين","%n  العديد من الأشخاص الآخرين","%n آخرون"], + "{actor} invited you to {call}" : "{actor} يدعوك إلى {call}", + "You were invited to a conversation or had a call" : "تم دعوتك للإنضمام إلى المحادثة أو المكالمة", + "Other activities" : "أنشطة أخرى", + "Talk" : "التحدث", + "Guest" : "ضيف", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## مرحبًا بك في تطبيق \"المحادثة\" Talk من نكست كلاود! \nفي هذه المحادثة، سيتم إخطارك بالميزات الجديدة المتوفرة في التطبيق.", + "## New in Talk %s" : "## الجديد في تطبيق \"المحادثة\" %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- بإمكانك إستعمال متصفح مايكروسوفت ايدج و سفاري الآن للانضمام إلى المكالمات الصوتية والفيديو", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- أصبحت المحادثات الفردية مستمرة الآن ولا يمكن تحويلها صدفة إلى محادثات جماعية. أيضًا عندما يغادر أحد المشاركين المحادثة، لن يتم حذف المحادثة تلقائيًا. فقط إذا غادر كلا المشاركين، سيتم حذف المحادثة من الخادم", + "- You can now notify all participants by posting \"@all\" into the chat" : "- يمكنك الآن تنبيه جميع المشاركين بنشر \"@all\" في الدردشة", + "- With the \"arrow-up\" key you can repost your last message" : "باستخدام مفتاح \"السهم للأعلى\" بإمكانك إعادة نشر رسالتك الأخيرة ", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- يمكن أن يحتوي Talk الآن على أوامر ، أرسل \"مساعدة\" كرسالة دردشة لمعرفة ما إذا كان المسؤول قد قام بتهيئة بعضها", + "- With projects you can create quick links between conversations, files and other items" : "- باستخدام المشاريع، يمكنك إنشاء روابط سريعة بين المحادثات والملفات والعناصر الأخرى", + "- You can now mention guests in the chat" : "يمكنك الآن الإشارة إلى الضيوف في الدردشة", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- يمكن أن يكون للمحادثات الآن ساحة للانتظار. سيسمح هذا للمنسقين بالانضمام إلى الدردشة والاتصال بالفعل للتحضير للاجتماع، بينما يتعين على المستخدمين والضيوف الانتظار", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- يمكنك الآن الرد مباشرة على الرسائل مما يمنح المستخدمين الآخرين مجالًا أوسع لمعرفة موضوع رسالتك", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- سيؤدي البحث الآن عن المحادثات والمشاركين إلى تصفية محادثاتك الحالية أيضًا، مما يسهل كثيرًا العثور على المحادثات السابقة", + "- You can now add custom user groups to conversations when the circles app is installed" : "- يمكنك الآن إضافة مجموعات مستخدمين مخصصة إلى المحادثات عند تثبيت تطبيق circles", + "- Check out the new grid and call view" : "- تحقق من الشبكة الجديدة وعرض المكالمة", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- يمكنك الآن رفع الملفات وسحبها مباشرة من جهازك إلى الدردشة", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- يتم الآن فتح الملفات المشتركة مباشرة داخل عرض الدردشة باستخدام تطبيقات العرض", + "- You can now search for chats and messages in the unified search in the top bar" : "- يمكنك الآن البحث عن الدردشات والرسائل في البحث الموحد في الشريط العلوي", + "- Spice up your messages with emojis from the emoji picker" : " - أضف على رسائلك الرموز التعبيرية", + "- You can now change your camera and microphone while being in a call" : "- يمكنك الآن تغيير الكاميرا والميكروفون أثناء المكالمة", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- اضف لمحادثاتك بعض المحتوى مع وصف وافتحها حتى يتمكن المستخدمون المسجلون من العثور عليها والانضمام إليها", + "- See a read status and send failed messages again" : "- انظر لحالة القراءة وارسل الرسائل التي فشل إرسالها مره أخرى. ", + "- Raise your hand in a call with the R key" : "- ارفع يدك في المكالمة باستخدام مفتاح R.", + "- Join the same conversation and call from multiple devices" : "- انضم إلى نفس المحادثة واتصل من أجهزة متعددة", + "- Send voice messages, share your location or contact details" : "- إرسال رسائل صوتية، مشاركة موقعك أو تفاصيل الاتصال", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- أضف مجموعات إلى محادثة وسيتم تلقائيًا إضافة أعضاء المجموعة الجدد كمشاركين", + "- A preview of your audio and video is shown before joining a call" : "- يتم عرض معاينة الصوت والفيديو قبل الانضمام إلى مكالمة", + "- You can now blur your background in the newly designed call view" : "- يمكنك الآن طمس الخلفية في عرض المكالمات المصمم حديثًا", + "- Moderators can now assign general and individual permissions to participants" : "- يمكن للمشرفين الآن تعيين أذونات عامة وفردية للمشاركين", + "- You can now react to chat messages" : "- بإمكانك الآن التفاعل مع رسائل الدردشة", + "- In the sidebar you can now find an overview of the latest shared items" : "- يمكنك الآن العثور في الشريط الجانبي على لمحة عن أحدث العناصر التي تمّت مُشارَكتها", + "- Use a poll to collect the opinions of others or settle on a date" : "- استعمل استبياناً لجمع آراء الآخرين أو الاتفاق على تاريخ معين", + "- Configure an expiration time for chat messages" : "- عيّن زمناً لانتهاء صلاحية رسائل الدردشة", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- إبدأ مكالمات بدون إعلام الآخرين المشتركين في محادثات المجموعات الكبيرة. يُمكنك إرسال إشعارٍ بالمحادثة على الخاص بمجرد أن تبدأ المكالمة.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- أرسِل رسائل دردشتك غير المستعجلة دون داعٍ لإزعاج المستلمين بإشعارت فورية", + "- Emojis can now be autocompleted by typing a \":\"" : "- أصبح الاستكمال الآلي للإيموجي emoji الآن ممكناً؛ و ذلك بكتابة علامة الشارحة \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- إربط العناصر المتعددة باستعمال اللاقط الذكي الجديد؛ و ذلك بكتابة علامة الشَّرْطَة المائلة \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- يمكن للمشرفين الآن فتح غرف جانبية (يتطلب ذلك واجهة خلفية عالية الآداء)", + "- Calls can now be recorded (requires the High-performance backend)" : "- يمكن الآن تسجيل المكالمات (يتطلب ذلك واجهة خلفية عالية الأداء)", + "- Conversations can now have an avatar or emoji as icon" : "- صار بإمكان المحادثات أن تحمل صورة رمزية Avatar أو إيموجي emoji كأيقونة", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- الخلفيات الظاهرية أصبحت متاحةً الآن في محادثات الفيديو بالإضافة إلى تضبيب الخلفية", + "- Reactions are now available during calls" : "- الاستجابات Reactions ممكنة الآن في أثناء المكالمات", + "- Typing indicators show which users are currently typing a message" : "- مؤشرات الطباعة Typing indicators تظهر على النص أو الرسالة في موضع الإدخال الحالي لكل مستخدم ", + "- Groups can now be mentioned in chats" : "- صار بالإمكان الإشارة إلى mention المجموعات في الدردشة", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- المكالمات أثناء تسجيلها يمكن آليّاً تحويلها إلى نص transcribe إذا ما تمّ تسجيل تطبيقٍ لمُزوّد ترجمةٍ translation provider app", + "- Chat messages can be translated if a translation provider app is registered" : "- رسائل الدردشة يمكن ترجمتها إذا ما تمّ تسجيل تطبيقٍ لمُزوّد ترجمةٍ translation provider app", + "- **Markdown** can now be used in _chat_ messages" : "- **تنسيق ماركداون** يمكن استعماله الآن في _رسائل_الدردشة", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- خطافات الويب Webhooks متاحة الآن لتطبيق الروبوتات bot. لمزيد المعلومات، أنظر التوثيق في: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- قم بتعيين تذكير على رسالة محادثة ليتم إشعارك بها لاحقًا ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- استَخدِم محادثة **ملاحظة ذاتية Note to self** لتدوين الملاحظات ومشاركة المعلومات بين أجهزتك", + "- Captions allow to send a message with a file at the same time" : "- تٌمكِّنُك التعليقات Captions من إلحاق رسالة بالملف المرسل في نفس الوقت", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- أصبح فيديو المُتحدِّث مرئيًا الآن أثناء مشاركة الشاشة و يتم كذلك تحريك تفاعلات المكالمات", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- يمكن الآن تعديل الرسائل من قِبَل المؤلفين و المشرفين إلى حد 6 ساعات", + "- Unsent message drafts are now saved in your browser" : "- مسودات الرسائل غير المرسلة تبقى محفوظة على متصفحك للويب ", + "- Text chatting can now be done in a federated way with other Talk servers" : "- الدردشة النصية يمكن الآن إجراؤها عبر السحابة الاتحادية و خوادم تطبيق \"المحادثة\" Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- يمكن للمشرفين الآن حظر حسابات أو ضيوف لمنعهم من الانضمام إلى محادثة", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- المكالمات الواردة من أحداث مربوطة على التقويم أو استبدالات لشخص خارج المكتب يمكن الآن عرضها في المحادثات", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- المكالمات يمكن الآن إجراؤها عبر السحابة الاتحادية و خوادم تطبيق \"المحادثة\" Talk (لكنها تستلزم توفير واجهة خلفية عالية الأداء HPB)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- تقديم تطبيق نكست كلاود للمحادثة على سطح المكتب لنظم وندوز، و ماك، و لينكس: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- تلخيص تسجيلات المكالمات والرسائل غير المقروءة في الدردشات باستخدام \"مساعد\" نكست كلاود.", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- تحسين الاجتماعات من خلال التعرف على الضيوف المدعوين عبر عناوين بريدهم الإلكتروني، واستيراد قوائم المشاركين، ومسودات الاستطلاعات، وتنزيل قوائم المشاركين في المكالمات", + "- Archive conversations to stay focused" : "- أرشفة المحادثات للمحافظة على التركيز", + "- Schedule a meeting into your calendar from within a conversation" : "- جدولة اجتماع في تقويمك من داخل المحادثة", + "- Search for messages of the current conversation directly in the right sidebar" : "- البحث عن رسائل المحادثة الحالية مباشرة في الشريط الجانبي الأيمن", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- يمكنك رؤية المزيد من المحادثات بنظرة واحدة باستخدام القائمة المدمجة الجديدة (يمكنك تمكينها في إعدادات المحادثة)", + "_All %n participant_::_All %n participants_" : ["كل الـ%n مشارك","كل الـ%n مشارك","كل الـ %n مشاركين","كل الـ%n مشاركين","كل الـ%n مشارك","كل الـ%n مشارك"], + "Talk updates ✅" : "تحديثات التحدث ✅", + "Reaction deleted by author" : "تم حذف تفاعل من قبل الكاتب", + "{actor} created the conversation" : "{actor} قام بإنشاء محادثة", + "You created the conversation" : "أنشأتَ المحادثة", + "System created the conversation" : "قام النظام بإنشاء هذه المحادثة تلقائياً", + "An administrator created the conversation" : "المسؤول انشئ محادثة", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} اعاد تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "قمت بإعادة تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "قام المسؤول بإعادة تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "{actor} set the description" : "{actor} قام بتعيين الوصف ", + "You set the description" : "قمت بتعيين الوصف ", + "An administrator set the description" : "قام المسؤول بتعيين الوصف", + "{actor} removed the description" : "{actor} قام بحذف الوصف ", + "You removed the description" : "قمت بحذف الوصف ", + "An administrator removed the description" : "قام المسؤول بحذف الوصف", + "You started a silent call" : "لقد بَدَأتَ مكالمة صامتة", + "Outgoing silent call" : "مكالمة صامتة صادرة", + "{actor} started a silent call" : "{actor} بدأ مكالمة صامتة", + "Incoming silent call" : "مكالمة صامتة واردة", + "You started a call" : "أنت بدأت مكالمة", + "Outgoing call" : "مكالمة صادرة", + "{actor} started a call" : "{actor} بدأ مكالمة", + "Incoming call" : "مكالمة واردة", + "{actor} joined the call" : "{actor} انضم إلى المكالمة", + "You joined the call" : "أنت انضممت للمكالمة", + "{actor} left the call" : "{actor} غادر المكالمة", + "You left the call" : "لقد قمت بمغادرة المكالمة", + "{actor} unlocked the conversation" : "{actor} أزال قفل المحادثة", + "You unlocked the conversation" : "أنت أزلت اقفال المكالمة", + "An administrator unlocked the conversation" : "قامت الإدارة بإزالة قفل المحادثة ", + "{actor} locked the conversation" : "{actor} اقفل المحادثة", + "You locked the conversation" : "أنت اقفلت المحادثة", + "An administrator locked the conversation" : " الإدارة اقفلت المحادثة", + "{actor} limited the conversation to the current participants" : "{actor} قام بحد الرسائل للمشاركين الحاليين", + "You limited the conversation to the current participants" : "قمت بحد الرسائل للمشاركين الحاليين", + "An administrator limited the conversation to the current participants" : "قامت الإدارة بحد الرسائل للمشاركين الحاليين", + "{actor} opened the conversation to registered users" : "{actor} اتاح المحادثة للمستخدمين المسجلين ", + "You opened the conversation to registered users" : "قمت بإتاحة المحادثة للمستخدمين المسجلين ", + "An administrator opened the conversation to registered users" : "قامت الإدارة بإتاحة المحادثة للمستخدمين المسجلين ", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} قام بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "You opened the conversation to registered users and users created with the Guests app" : "أنت قمت بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "قام مدير بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "The conversation is now open to everyone" : "المحادثة الآن مفتوحة للجميع", + "{actor} opened the conversation to everyone" : "{actor} اتاح المحادثة للجميع", + "You opened the conversation to everyone" : "أنت سمحت بإتاحة المحادثة للجميع", + "{actor} restricted the conversation to moderators" : "{actor} اقتصرت المحادثة على المشرفيين", + "You restricted the conversation to moderators" : "أنت اقتصرت المحادثة على المشرفيين", + "{actor} started breakout rooms" : "بدأ {actor} الغرف الجانبية", + "You started breakout rooms" : "لقد بدأت الغرف الجانبية", + "{actor} stopped breakout rooms" : "قام {actor} بوقف الغرف الجانبية", + "You stopped breakout rooms" : "لقد قمت بوقف الغرف الجانبية", + "{actor} allowed guests" : "{actor} السماح للضيوف بالانضمام", + "You allowed guests" : "أنت وافقت على انضمام الضيوف", + "An administrator allowed guests" : "الإدارة وافقت على انضمام الضيوف", + "{actor} disallowed guests" : "{actor} منع الضيوف", + "You disallowed guests" : "أنت منعت الضيوف", + "An administrator disallowed guests" : "الإدارة منعت الضيوف", + "{actor} set a password" : "{actor} تعيين كلمة مرور", + "You set a password" : "أنت قمت بتعيين كلمة مرور", + "An administrator set a password" : "تعيين كلمة مرور من قبل الإدارة", + "{actor} removed the password" : "{actor} إلغاء كلمة المرور", + "You removed the password" : "أنت حذفت كلمة المرور", + "An administrator removed the password" : "الإدارة حذفت كلمة المرور", + "{actor} added {user}" : "{actor} اضاف {user}", + "You joined the conversation" : "انضممت للمحادثة", + "{actor} joined the conversation" : "{actor} انضم للمحادثة", + "You added {user}" : "أنت اضفت {user}", + "{actor} added you" : "{actor} أضافك أنت", + "An administrator added you" : "الإدارة قامت بإضافتك أنت", + "An administrator added {user}" : "الإدارة أضافت {user}", + "You left the conversation" : "لقد غادرت المحادثة", + "{actor} left the conversation" : "{actor} غادر المحادثة", + "{actor} removed {user}" : "{actor} حذف {user}", + "You removed {user}" : "أنت قمت بحذف {user}", + "{actor} removed you" : "{actor} قام بحذفك", + "An administrator removed you" : "الإدارة قامت بحذفك", + "An administrator removed {user}" : "الإدارة حذفت {user}", + "{actor} invited {federated_user}" : "{actor} قام بدعوة {federated_user}", + "You invited {federated_user}" : "أنت قمت بدعوة {federated_user}", + "You accepted the invitation" : "أنت قَبَلت الدعوة", + "{actor} invited you" : "{actor} قام بدعوتك", + "An administrator invited you" : "قام مدير بدعوتك", + "An administrator invited {federated_user}" : "قام مدير بدعوة {federated_user}", + "{federated_user} accepted the invitation" : "قَبَل {federated_user} الدعوة", + "{actor} removed {federated_user}" : "قام {actor} بإزالة {federated_user}", + "You removed {federated_user}" : "لقد قمت بحذف {federated_user}", + "You declined the invitation" : "أنت رفضت الدعوة", + "An administrator removed {federated_user}" : "قام مدير بحذف {federated_user}", + "{federated_user} declined the invitation" : "رفض {federated_user} الدعوة", + "{actor} added group {group}" : "أضاف {actor} مجموعة {group}", + "You added group {group}" : "لقد أضفت مجموعة {group}", + "An administrator added group {group}" : "أضاف المسؤول مجموعة {group}", + "{actor} removed group {group}" : "قام {actor} بإزالة مجموعة {group}", + "You removed group {group}" : "لقد قمت بإزالة مجموعة {group}.", + "An administrator removed group {group}" : "قام المسؤول بإزالة مجموعة {group}", + "{actor} added team {circle}" : "قام {actor} بإضافة الفريق {circle}", + "You added team {circle}" : "أنت قمت بإضافة الفريق {circle}", + "An administrator added team {circle}" : "قام مدير بإضافة الفريق {circle}", + "{actor} removed team {circle}" : "قام {actor} بحذف الفريق {circle}", + "You removed team {circle}" : "أنت قمت بحذف الفريق {circle}", + "An administrator removed team {circle}" : "قم مدير بحذف الفريق {circle}", + "{actor} added {phone}" : "قام {actor} بإضافة {phone}", + "You added {phone}" : "أنت قمت بإضافة {phone}", + "An administrator added {phone}" : "قام مدير بإضافة {phone}", + "{actor} removed {phone}" : "قام {actor} بحذف {phone}", + "You removed {phone}" : "أنت قمت بحذف {phone}", + "An administrator removed {phone}" : "قام مدير بحذف {phone}", + "{actor} promoted {user} to moderator" : "تم ترقية {user} من قبل {actor}", + "You promoted {user} to moderator" : "قمت بترقية {user} إلى مشرف", + "{actor} promoted you to moderator" : "تم ترقيتك إلى مشرف من قبل {actor}", + "An administrator promoted you to moderator" : "تم ترقيتك إلى مشرف من قبل الادارة", + "An administrator promoted {user} to moderator" : "تم ترقية {user} من قبل الادارة", + "{actor} demoted {user} from moderator" : "تم خفض رتبة الاشراف من {user} من قبل {actor}", + "You demoted {user} from moderator" : "لقد خفضت رتبة الاشراف {user}", + "{actor} demoted you from moderator" : "تم تخفيض رتب الاشراف من قبل {actor}", + "An administrator demoted you from moderator" : "تم تخفيض رتبتك بالاشراف من قبل الادارة", + "An administrator demoted {user} from moderator" : "تم تخفيض رتبة الاشراف من {user} من قبل الادارة", + "{actor} shared a file which is no longer available" : "{actor} قام بمشاركة ملف لم يعد متاح", + "You shared a file which is no longer available" : "قمت بمشاركة ملف لم يعد متاح", + "File shares are currently not supported in federated conversations" : "مشاركة الملفات غير مدعومة حاليّاً في حالة المحادثات عبر السحابة الموحدة", + "The shared location is malformed" : "الموقع المشترك غير صحيح", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "قام {actor} بإعداد Matterbridge لمزامنة هذه المحادثة مع الدردشات الأخرى.", + "You set up Matterbridge to synchronize this conversation with other chats" : "قمت بإعداد Matterbridge لمزامنة هذه المحادثة مع الدردشات الأخرى.", + "{actor} updated the Matterbridge configuration" : "قام {actor} بتحديث تكوين Matterbridge .", + "You updated the Matterbridge configuration" : "لقد قمت بتحديث تكوين Matterbridge .", + "{actor} removed the Matterbridge configuration" : "قام {actor} بإزالة تكوين Matterbridge .", + "You removed the Matterbridge configuration" : "لقد قمت بإزالة تكوين Matterbridge .", + "{actor} started Matterbridge" : " {actor} بدأ Matterbridge .", + "You started Matterbridge" : "لقد بدأت Matterbridge .", + "{actor} stopped Matterbridge" : "قام {actor} بإيقاف Matterbridge .", + "You stopped Matterbridge" : "قمت بإيقاف Matterbridge .", + "{actor} deleted a message" : "{actor} مسح رسالة ", + "You deleted a message" : "أنت حذفت الرسالة ", + "{actor} edited a message" : "{actor} قام بتحرير رسالة", + "You edited a message" : "أنت قمت بتحرير رسالة", + "{actor} deleted a reaction" : "حذف {actor} تفاعل", + "You deleted a reaction" : "لقد قمت بحذف تفاعل", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد%n أسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسبوع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n يوم","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n ساعة","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقيقة","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسبوع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n يوم","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعة","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعات"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقيقة","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق"], + "{actor} disabled message expiration" : "قام {actor} بتعطيل تعيين انتهاء صلاحية الرسالة ", + "You disabled message expiration" : "لقد قمت بتعطيل تعيين انتهاء صلاحية الرسالة", + "{actor} cleared the history of the conversation" : "قام {actor} بمسح تاريخ المحادثة", + "You cleared the history of the conversation" : "لقد قمت بمسح تاريخ المحادثة", + "{actor} set the conversation picture" : "{actor} عيّن صورةً للمحادثة ", + "You set the conversation picture" : "أنت عيّنت صورةً للمحادثة", + "{actor} removed the conversation picture" : "{actor} حذف صورة المحادثة", + "You removed the conversation picture" : "أنت حذفت صورة المحادثة", + "{actor} ended the poll {poll}" : "قام {actor} بإنهاء استطلاع {poll}", + "You ended the poll {poll}" : "لقد قمت بإنهاء استطلاع {poll}", + "{actor} started the video recording" : "قام {actor} ببدء تسجيل فيديو", + "You started the video recording" : "لقد بدأت تسجيل فيديو", + "{actor} stopped the video recording" : "قام {actor} بإيقاف تسجيل الفيديو", + "You stopped the video recording" : "لقد قمت بإيقاف تسجيل الفيديو", + "{actor} started the audio recording" : "قام {actor} ببدء تسجيل صوتي", + "You started the audio recording" : "لقد قمت ببدء تسجيل الصوتي", + "{actor} stopped the audio recording" : "قام {actor} بإيقاف التسجيل الصوتي", + "You stopped the audio recording" : "لقد قمت بإيقاف التسجيل الصوتي", + "The recording failed" : "فشل في التسجيل", + "Someone voted on the poll {poll}" : "قامل شخص بالتصويت في استطلاع {poll}", + "Message deleted by author" : "مٌسحت الرسالة بواسطة الكاتب ", + "Message deleted by {actor}" : "مُسحت الرسالة بواسطة {actor}", + "Message deleted by you" : "مُسحت الرسالة بواسطتك", + "Deleted user" : "مستخدم محذوف", + "Unknown number" : "رقم غير معروف", + "Administration" : "الإدارة", + "System" : "النظام", + "%s (guest)" : "%s (ضيف)", + "Missed call" : "مكالمة فائتة", + "Unanswered call" : "مكالمة فائتة", + "Call ended (Duration {duration})" : "انتهت المكالمة (المدة {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "تم إنهاء المكالمة، حيث وصلت إلى الحد الأقصى لمدة المكالمة (المدة {duration})", + "{actor} ended the call (Duration {duration})" : "أنهى {actor} المكالمة (المدة {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration} )","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة{duration})","المكالمة التي فيها %n ضيوف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة{duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n ضيف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %nمن الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %nمن الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1} تمّ إنهاؤها بسبب تجاوزها الحدّ الأقصى لمدة المكالمات ( المدة{duration})", + "Call with {user1} ended (Duration {duration})" : "المكالمة مع {user1} تمّ إنهاؤها (المدة {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} (المدة {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1} و {user2} تمّ إنهاؤها بسبب تجاوز الحدّ الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "مكالمة {user1}، و {user2} انتهت (المدة {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} (المدة {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1}،و {user2} ،و {user3} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} (المدة {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1},و {user2}, و{user3} ،و {user4} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3}، و {user4} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} و {user4} (المدة {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1}, و{user2},و {user3},و {user4} ،و {user5} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3}، و {user4}، و {user5} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} و {user4} و {user5} (المدة {duration})", + "Message of {user} in {conversation}" : "رسالة من {user} في {conversation}", + "Message of {user}" : "رسالة من {user}", + "Message of a deleted user in {conversation}" : "رسالة من مستخدِم محذوف في {conversation}", + "Talk conversations" : "محادثات", + "Talk to %s" : "تحدث إلى %s", + "An error occurred. Please contact your administrator." : "حدث خطأٌ. يرجى الاتصال بمسؤول النظام.", + "Storage quota exceeded" : "الحصة التخزينية تمّ استنفاذها", + "File not found" : "تعذر العثور على الملف", + "File is not shared, or shared but not with the user" : "الملف لم يتم مشاركته أو ليس مع المستخدم صلاحية للإطلاع على الملف", + "No account available to delete." : "لا يوجد حساب متاح للحذف", + "Poll" : "استبيان", + "Password needs to be set" : "يجب تعيين كلمة المرور", + "Uploading the file failed" : "فشل تحميل الملف", + "No image file provided" : "لم يتم توفير صورة ملف", + "File is too big" : "الملف كبير جدًا", + "Invalid file provided" : "تم تقديم ملف غير صالح", + "Invalid image" : "الصورة غير صالحة", + "Unknown filetype" : "نوع الملف غير معروف", + "Talk mentions" : "إشارات في المحادثات", + "More conversations" : "محادثات أخرى", + "Say hi to your friends and colleagues!" : "قل مرحبا ً لزملاء العمل!", + "No unread mentions" : "لا توجد إشارة جديدة لك", + "Call in progress" : "محادثة جارية", + "You were mentioned" : "منشن بإسمك", + "Write to conversation" : "اكتب للمحادثة", + "Writes event information into a conversation of your choice" : "اكتب معلومات الحدث في محادثة من اختيارك", + "Missing email field in header line" : "خانة البريد الإلكتروني في سطر الترويسة ناقصة", + "Following lines are invalid: %s" : "السطر التالي غير صحيح %s", + "Conversation invitation" : "دعوة محادثة", + "Description" : "الوصف", + "You can also dial-in via phone with the following details" : "يمكنك أيضًا الاتصال عبر الهاتف بالتفاصيل التالية", + "Dial-in information" : "معلومات الإتصال", + "Meeting ID" : "معرف الإجتماع ", + "Your PIN" : "رقمك السري", + "Meeting" : "اجتماع", + "Password request: %s" : "طلب كلمة المرور: %s", + "Private conversation" : "محادثة خاصة", + "Deleted user (%s)" : "تم حذف العضو (%s)", + "Failed to upload call recording" : "تعذّر رفع تسجيل المكالمة", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "خادم التسجل فشل في رفع تسجيل المكالمة {call}. يرجى التواصل مع مسؤول النظام.", + "Share to chat" : "شارك بالدردشة", + "Dismiss notification" : "تجاهل الإشعار", + "Call recording now available" : "تسجيل المكالمة متاحٌ الآن", + "The recording for the call in {call} was uploaded to {file}." : "تسجيل المكالمة في {call} تمّ رفعه إلى {file}.", + "Transcript now available" : "التحويل من كلام إلى نصٍ متاحٌ الآن", + "The transcript for the call in {call} was uploaded to {file}." : "نص المكالمة {call} تمّ رفعه بعد تحويله إلى {file}.", + "Failed to transcript call recording" : "تعذّر تحويل تسجيل المكالمة إلى نص", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "فشل الخادم في تحويل تسجيل المكالمة في {file} للمكالمة {call} إلى نص. يرجى التواصل مع مسؤول النظام.", + "Call summary now available" : "ملخص المكالمة جاهزٌ الآن", + "The summary for the call in {call} was uploaded to {file}." : "ملخص المكالمة في {call} تمّ تحميله إلى {file}.", + "Failed to summarize call recording" : "تعذّر تلخيص تسجيل المكالمة", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "أخفق الخادوم في تلخيص التسجيل عند {file} للمكالمة في {call}. رجاءً، تواصل مع مشرف النظام.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} دعاك للانضمام إلى غرفة: {roomName} على الخادوم: {remoteServer}", + "Accept" : "قبول", + "Decline" : "رفض", + "{user1} invited you to a federated conversation" : "{user1} دعاك للانضمام إلى مُحادثة على سحابة اتحاديّة", + "New message" : "رسالة جديدة", + "Reminder" : "تذكير", + "Notification" : "إشعار", + "Reminder: You in {call}" : "تذكير: أنت في {call}", + "Reminder: {user} in {call}" : "تذكير: {user} في {call}", + "Reminder: Deleted user in {call}" : "تذكير: مستخدِم محذوف في {call}", + "Reminder: {guest} (guest) in {call}" : "تذكير: {guest} (ضيف) في {call}", + "Reminder: Guest in {call}" : "تذكير: ضيف في {call}", + "{user} reacted with {reaction}" : "{user} تَفَاعَلَ بـ {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} تَفَاعَلَ بـ {reaction} في {call}", + "Deleted user reacted with {reaction} in {call}" : "مستخدِم محذوف تَفَاعَلَ بـ {reaction} في {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (ضيف) تَفَاعَلَ بـ {reaction} في {call}", + "Guest reacted with {reaction} in {call}" : "تَفَاعَلَ ضيفُ بـ {reaction} في {call}", + "{user} in {call}" : "{user} في {call}", + "Deleted user in {call}" : "تم حذف العضو في {call}", + "{guest} (guest) in {call}" : "{guest} (ضيف) في {call}", + "Guest in {call}" : "ضيف في {call}", + "{user} sent you a private message" : "{user} ارسل لك رسالة خاصة", + "{user} sent a message in conversation {call}" : "{user} ارسل رسالة في المحادثة {call}", + "A deleted user sent a message in conversation {call}" : "عضو محذوف قام بإرسال رسالة في محادثة {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (ضيف) ارسل رسالة لمحادثة {call}", + "A guest sent a message in conversation {call}" : "ضيف ارسل رسالة للمحادثة {call}", + "{user} replied to your private message" : "{user} قام بالرد على رسالتك الخاصة", + "{user} replied to your message in conversation {call}" : "{user} قام بالرد على رسالتك في محادثة {call}", + "A deleted user replied to your message in conversation {call}" : "عضو محذوف رد على رسالتك في محادثة {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (ضيف) قام بالرد على رسالتك في محادثة {call}", + "A guest replied to your message in conversation {call}" : "ضيف قام بالرد على رسالتك في محادثة {call}", + "Reminder: You in private conversation {call}" : "تذكير: أنت في محادثة خاصة {call}", + "Reminder: A deleted user in private conversation {call}" : "تذكير: مستخدِم محذوف في محادثة خاصة {call}", + "Reminder: {user} in private conversation" : "تذكير: {user} في محادثة خاصة", + "Reminder: You in conversation {call}" : "تذكير: أنت في محادثة {call}", + "Reminder: {user} in conversation {call}" : "تذكير: {user} في محادثة {call}", + "Reminder: A deleted user in conversation {call}" : "تذكير: مستخدِم محذوف في محادثة {call}", + "Reminder: {guest} (guest) in conversation {call}" : "تذكير: {guest} (ضيف) في محادثة {call}", + "Reminder: A guest in conversation {call}" : "تذكير: ضيف في محادثة {call}", + "{user} reacted with {reaction} to your private message" : "تفاعل {user} بـ {reaction} على رسالتك الخاصة", + "{user} reacted with {reaction} to your message in conversation {call}" : "تفاعل {user} بـ {reaction} على رسالتك في المحادثة {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "تفاعل مستخدم محذوف بـ {reaction} على رسالتك في المحادثة {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "رد (ضيف){guest} بـ {reaction} على رسالتك في المحادثة {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "رد ضيف بـ {reaction} على رسالتك في المحادثة {call}", + "{user} mentioned you in a private conversation" : "{user} مشار له في رسالة خاصة", + "{user} mentioned group {group} in conversation {call}" : "{user} أشار إلى المجموعة {group} iفي المحادثة {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} أشار للفريق {team} في المحادثة {call}", + "{user} mentioned everyone in conversation {call}" : "{user} أشار إلى الجميع في المحادثة {call}", + "{user} mentioned you in conversation {call}" : "{user} مشار له في محادثة {call}", + "A deleted user mentioned group {group} in conversation {call}" : "مستخدِمٌ محذوفٌ أشار إلى المجموعة {group} في المحادثة {call}.", + "A deleted user mentioned team {team} in conversation {call}" : "مُستخدِم محذوف أشار للفريق {team} في المحادثة {call}", + "A deleted user mentioned everyone in conversation {call}" : "مستخدِمٌ محذوفٌ أشار إلى الجميع في المحادثة {call}.", + "A deleted user mentioned you in conversation {call}" : "عضو محذوف أشار لاسمك في محادثة {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) أشار إلى المجموعة {group} في المحادثة {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (الضيف) أشار للفريق {team} في المحادثة {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) أشار إلى الجميع في المحادثة {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (ضيف) أشار لاسمك في محادثة {call}", + "A guest mentioned group {group} in conversation {call}" : "ضيفٌ أشار إلى المجموعة {group} في المحادثة {call}", + "A guest mentioned team {team} in conversation {call}" : "أشار ضيف للفريق {team} في المحادثة {call}", + "A guest mentioned everyone in conversation {call}" : "ضيفٌ أشار إلى الجميع في المحادثة {call}", + "A guest mentioned you in conversation {call}" : "ضيف أشار لاسمك في محادثة {call}", + "View message" : "إعرِض الرسالة", + "Dismiss reminder" : "تجاهل التذكير", + "View chat" : "عرض المحادثة", + "{user} invited you to a group conversation: {call}" : "{user} قام بدعوتك للإنضمام لمحادثة جماعية: {call}", + "Join call" : "انضمام لمكالمة", + "Answer call" : "الرد على المكالمة", + "{user} would like to talk with you" : "{user} يريد التحدث إليك", + "Call back" : "معاودة الاتصال", + "You missed a call from {user}" : "مكالمة لم ترد عليها من {user}", + "A group call has started in {call}" : "اتصال جماعي بدأ في {call}", + "You missed a group call in {call}" : "اتصال جماعي لم ترد عليه في {call}", + "{email} is requesting the password to access {file}" : "{email} انشأ طلب كلمة المرور للوصول إلى الملف {file}", + "{email} tried to request the password to access {file}" : "{email} حاول طلب كلمة المرور للوصول للملف {file}", + "Someone is requesting the password to access {file}" : "شخص انشأ طلب كلمة المرور للوصول للملف {file}", + "Someone tried to request the password to access {file}" : "شخص حاول طلب كلمة المرور للوصول للملف {file}", + "Open settings" : "فتح الإعدادات", + "Hosted signaling server added" : "تمّت إضافة خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server is now configured and will be used." : "تم تكوين خادم التشوير المستضاف الآن وسيتم استخدامه.", + "Hosted signaling server removed" : "تمّ حذف خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server was removed and will not be used anymore." : "تمت إزالة خادم التشوير المستضاف ولن يتم استخدامه بعد الآن.", + "Hosted signaling server changed" : "تمّ تغيير خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "قام حساب خادم التشوير المستضاف بتغيير الحالة من \"{oldstatus}\" إلى \"{newstatus}\".", + "pending" : "مُعلّق قيد الانتظار", + "active" : "نَشِطٌ", + "expired" : "منتهي الصلاحية", + "blocked" : "محظور", + "error" : "خطأ", + "The certificate of {host} expires in {days} days" : "تنتهي صلاحية شهادة {host} خلال {days} أيام", + "The certificate of {host} expired" : "انتهت صلاحية شهادة {host}", + "Contact via Talk" : "تواصل عبر تطبيق المحادثة", + "Open Talk" : "تطبيق مؤتمرات الفيديو OpenTalk ", + "Default" : "افتراضي", + "Presentation" : "عرض تقديمي", + "Webinar" : "نقاش عبر الويب - ويب نير", + "Conversations" : "المحادثات", + "Messages in current conversation" : "رسائل في المحادثة الحالية", + "{user}" : "{user}", + "Messages" : "الرسائل", + "{user} in {conversation}" : "{user} في {conversation}", + "Messages in other conversations" : "الرسائل في المحادثات الآخرى", + "One-to-one rooms always need to show the other users avatar" : "غرف واحد لواحد يلزم فيها دائماً إظهار صورة الملف الشخصي الرمزية للأشخاص الآخرين", + "Invalid emoji character" : "حرف إيموجي غير صحيح", + "Invalid background color" : "لون خلفية غير صحيح", + "Avatar image is not square" : "الصورة الرمزية ليست على شكل مربّع", + "Room {number}" : "الغرفة {number}", + "Other" : "آخر", + "Failed to request trial because the trial server is unreachable. Please try again later." : "فشل طلب التجربة لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "هناك مشكلة في مصادقة هذه الحالة. ربما لا يمكن الوصول إليه من الخارج للتحقق من عنوان URL الخاص به.", + "Something unexpected happened." : "حصل خطأ غير متوقع. ", + "The URL is invalid." : "الرابط غير صحيح", + "An HTTPS URL is required." : "مطلوب عنوان HTTPS URL.", + "The email address is invalid." : "البريد الإلكتروني غير صحيح", + "The language is invalid." : "اللغة غير صحيحة", + "The country is invalid." : "الدولة غير صحيحة", + "There is a problem with the request of the trial. Please check your logs for further information." : "حدثت مشكلة عند طلب التجربة. يرجى التحقق من سجلاتك للحصول على مزيد من المعلومات.", + "Too many requests are send from your servers address. Please try again later." : "طلبات متعددة تم ارساله من عنوان خادمك. يرجى المحاولة لاحقا.", + "There is already a trial registered for this Nextcloud instance." : "توجد بالفعل نسخة تجريبية مسجلة لمثيل نكست كلاود هذا.", + "Something unexpected happened. Please try again later." : "حصل امر غير معتاد. يرجى إعادة المحاولة لاحقًا.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "فشل طلب التجربة لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Trial requested but failed to get account information. Please check back later." : "تم طلب التجربة لكن فشل في الحصول على معلومات الحساب. يرجى التحقق مره أخرى لاحقًا. ", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "هناك مشكلة في مصادقة هذا الطلب. ربما لا يمكن الوصول إليه من الخارج للتحقق من عنوان URL الخاص به.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "فشل جلب معلومات الحساب لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with fetching the account information. Please check your logs for further information." : "حدثت مشكلة عند جلب معلومات الحساب. يرجى التحقق من السجلات الخاصة بك للحصول على مزيد من المعلومات.", + "There is no such account registered." : "الحساب غير مسجل", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "فشل جلب معلومات الحساب لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Deleting the hosted signaling server account failed. Please check back later." : "فشل حذف حساب خادم التشوير المستضاف. يرجى معاودة المحاولة لاحقًا.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "فشل حذف الحساب لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with deleting the account. Please check your logs for further information." : "حدثت مشكلة عند حذف الحساب. يرجى التحقق من السجلات الخاصة بك للحصول على مزيد من المعلومات.", + "Too many requests are sent from your servers address. Please try again later." : "تم ارسال طلبات متعددة من عنوان خادمك. يرجى المحاولة لاحقًا.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "فشل حذف الحساب لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Note to self" : "ملاحظة شخصية", + "A place for your private notes, thoughts and ideas" : "مكان لتسجيل ملاحظاتك و خططك و أفكارك", + "Transcript is AI generated and may contain mistakes" : "النص تمّ توليده بواسطة الذكاء الاصطناعي؛ لذا يُحتمل أنه يحتوي على أخطاء", + "Summary is AI generated and may contain mistakes" : "الملخص تمّ توليده بواسطة الذكاء الاصطناعي؛ لذا يُحتمل أنه يحتوي على أخطاء", + "Let's get started!" : "فَلْنَبْدَإ الآن!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "تطبيق \"المحادثة\" من نكست كلاود **Nextcloud Talk** هو عبارة عن منصة اتصال آمنة ذاتية الاستضافة تتكامل بسلاسة مع بيئة نكست كلاود. \n\n#### الميزات الرئيسية: \n* الدردشة والمراسلة في الدردشات الخاصة والجماعية \n* مكالمات صوتية وفيديو \n* مشاركة الملفات والتكامل مع تطبيقات نكست كلاود الأخرى \n* إعدادات محادثة قابلة للتخصيص، والتحكم في الخصوصية، والتنسيق \n* الويب وسطح المكتب والهاتف النقال (iOS وAndroid) \n* اتصالات خاصة وآمنة \n\nتعرف على المزيد في [وثائق المُستخدِم](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# مرحبًا بك في تطبيق \"المحادثة\" من نكست كلاود Nextcloud Talk \n\nهذا التطبيق هو تطبيق مراسلة خاص وقوي يتكامل مع بيئة نكست كلاود. \nيمكنك الدردشة في محادثات خاصة أو جماعية والتعاون عبر مكالمات الصوت والفيديو وتنظيم الندوات عبر الإنترنت واللقاءات وتخصيص محادثاتك؛ والمزيد المزيد.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 تنسيق النصوص لإنشاء رسائل غنية \n\nفي تطبيق \"المحادثة\" من نكست كلاود Nextcloud Talk يمكنك استخدام صيغة Markdown لتنسيق رسائلك. على سبيل المثال، يمكنك تطبيق التنسيق **الغامق** أو *المائل*، أو \"تمييز النصوص ككود برمجي\". يمكنك أيضاً إنشاء جداول وإضافة عناوين إلى نصِّك. \n\nهل تحتاج إلى تصحيح خطأ مطبعي أو تغيير التنسيق؟ عدّل رسالتك بكل بساطة بالنقر فوق \"تعديل الرسالة\" في قائمة الرسائل.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 أضِف المُرفقات والروابط \n\nيمكنك إرفاق الملفات من نكست كلاود هَبْ Hub باستعمال الزر \"+\". شارك العناصر من الملفات وتطبيقات نكست كلاود المتنوعة. تدعم بعض التطبيقات أيضاً عناصر واجهة المستخدم التفاعلية، على سبيل المثال، تطبيق \"الكتابة\" Text.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "يمكنك الرّد على الرسائل أو إعادة توجيهها إلى دردشات أو أشخاص آخرين أو نسخ محتوى الرسالة.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ افعل المزيد باستخدام \"اللاقط الذكي\" Smart Picker \n\nما عليك سوى كتابة \"/\" أو الانتقال إلى قائمة \"+\" لفتح \"اللاقط الذكي\"؛ حيث يمكنك إرفاق محتوىً متنوع مع رسائلك. يمكنك تهيئة اللاقط الذكي لتتمكن من إضافة عناصر من تطبيقات نكست كلاود وصور GIF ومواقع الخرائط والمحتوى الذي تم إنشاؤه بواسطة الذكاء الاصطناعي وغير ذلك كثير.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ إدارة إعدادات المحادثة \n\nفي قائمة المحادثة، يمكنك الوصول إلى إعدادات مختلفة لإدارة محادثاتك، مثل: \n* تحرير معلومات المحادثة \n* إدارة الإشعارات \n* تطبيق قواعد تعديل متعددة \n* إعدادات حق الوصول والأمان \n* تمكين روبوتات الردود الآلية bot\n* والمزيد!", + "Andorra" : "أندورا", + "United Arab Emirates" : "الإمارات العربية المتحدة", + "Afghanistan" : "أفغانستان", + "Antigua and Barbuda" : "أنتيغوا وبربودا", + "Anguilla" : "أنغيلا", + "Albania" : "ألبانيا", + "Armenia" : "أرمينيا", + "Angola" : "أنغولا", + "Antarctica" : "القارة القطبية الجنوبية", + "Argentina" : "الأرجنتين", + "American Samoa" : "ساموا الأمريكية", + "Austria" : "النمسا", + "Australia" : "أستراليا", + "Aruba" : "أروبا", + "Åland Islands" : "جزر آلاند", + "Azerbaijan" : "أذربيجان", + "Bosnia and Herzegovina" : "البوسنة والهرسك", + "Barbados" : "بربادوس", + "Bangladesh" : "بنغلاديش", + "Belgium" : "بلجيكا", + "Burkina Faso" : "بوركينا فاسو", + "Bulgaria" : "بلغاريا", + "Bahrain" : "البحرين", + "Burundi" : "بوروندي", + "Benin" : "البنين", + "Saint Barthélemy" : "سانت بارتيليمي", + "Bermuda" : "برمودا", + "Brunei Darussalam" : "بروناي دار السلام", + "Bolivia, Plurinational State of" : "بوليفيا المتعددة القوميات", + "Bonaire, Sint Eustatius and Saba" : "بونير وسانت أوستاتيوس وسابا", + "Brazil" : "البرازيل", + "Bahamas" : "جزر البهاما", + "Bhutan" : "بوتان", + "Bouvet Island" : "جزيرة بوفيت", + "Botswana" : "بوتسوانا", + "Belarus" : "بيلاروسيا", + "Belize" : "بليز", + "Canada" : "كندا", + "Cocos (Keeling) Islands" : "جزر كوكوس (كيلينغ)", + "Congo, the Democratic Republic of the" : "جمهورية الكونغو الديمقراطية", + "Central African Republic" : "جمهورية افريقيا الوسطى", + "Congo" : "الكونغو", + "Switzerland" : "سويسرا", + "Côte d'Ivoire" : "ساحل العاج", + "Cook Islands" : "جزر كوك", + "Chile" : "تشيلي", + "Cameroon" : "الكاميرون", + "China" : "الصين", + "Colombia" : "كولومبيا", + "Costa Rica" : "كوستاريكا", + "Cuba" : "كوبا", + "Cabo Verde" : "كابو فيردي", + "Curaçao" : "كوراساو", + "Christmas Island" : "جزيرة الكريسماس", + "Cyprus" : "قبرص", + "Czechia" : "التشيك", + "Germany" : "ألمانيا", + "Djibouti" : "جيبوتي", + "Denmark" : "الدانمارك", + "Dominica" : "دومينيكا", + "Dominican Republic" : "جمهورية الدومينيكان", + "Algeria" : "الجزائر", + "Ecuador" : "الاكوادور", + "Estonia" : "إستونيا", + "Egypt" : "مصر", + "Western Sahara" : "الصحراء الغربية", + "Eritrea" : "إريتريا", + "Spain" : "إسبانيا", + "Ethiopia" : "إثيوبيا", + "Finland" : "فنلندا", + "Fiji" : "فيجي", + "Falkland Islands (Malvinas)" : "جزر فوكلاند (مالفيناس)", + "Micronesia, Federated States of" : "ولايات ميكرونيسيا المتحدة", + "Faroe Islands" : "جزر فاروس", + "France" : "فرنسا", + "Gabon" : "الغابون", + "United Kingdom of Great Britain and Northern Ireland" : "المملكة المتحدة لبريطانيا العظمى وأيرلندا الشمالية", + "Grenada" : "غرينادا", + "Georgia" : "جيورجيا", + "French Guiana" : "غيانا الفرنسية", + "Guernsey" : "غيرنزي", + "Ghana" : "غانا", + "Gibraltar" : "جبل طارق", + "Greenland" : "جرينلاند", + "Gambia" : "غامبيا", + "Guinea" : "غينيا", + "Guadeloupe" : "غوادلوب", + "Equatorial Guinea" : "غينيا الإستوائية", + "Greece" : "اليونان", + "South Georgia and the South Sandwich Islands" : "جورجيا الجنوبية وجزر ساندويتش الجنوبية", + "Guatemala" : "غواتيمالا", + "Guam" : "غوام", + "Guinea-Bissau" : "غينيا بيساو", + "Guyana" : "غيانا", + "Hong Kong" : "هونج كونج", + "Heard Island and McDonald Islands" : "قلب الجزيرة وجزر ماكدونالز", + "Honduras" : "هندوراس", + "Croatia" : "كرواتيا", + "Haiti" : "هايتي", + "Hungary" : "هنغاريا", + "Indonesia" : "أندونيسيا", + "Ireland" : "أيرلندا", + "Israel" : "الكيان الصهيوني", + "Isle of Man" : "جزيرة مان", + "India" : "الهند", + "British Indian Ocean Territory" : "إقليم المحيط البريطاني الهندي", + "Iraq" : "العراق", + "Iran, Islamic Republic of" : "إيران", + "Iceland" : "ايسلندا", + "Italy" : "إيطاليا", + "Jersey" : "جيرسي", + "Jamaica" : "جامايكا", + "Jordan" : "الأردن", + "Japan" : "اليابان", + "Kenya" : "كينيا", + "Kyrgyzstan" : "قيرغيزستان", + "Cambodia" : "كمبوديا", + "Kiribati" : "كيريباتي", + "Comoros" : "جزر القمر", + "Saint Kitts and Nevis" : "سانت كيتس ونيفيس", + "Korea, Democratic People's Republic of" : " جمهورية كوريا الشعبية الديمقراطية", + "Korea, Republic of" : "جمهورية كوريا", + "Kuwait" : "الكويت", + "Cayman Islands" : "جزر كايمان", + "Kazakhstan" : "كازاخستان", + "Lao People's Democratic Republic" : "جمهورية لاو الديمقراطية الشعبية", + "Lebanon" : "لبنان", + "Saint Lucia" : "سانت لوسيا", + "Liechtenstein" : "ليختنشتاين", + "Sri Lanka" : "سيريلانكا", + "Liberia" : "ليبيريا", + "Lesotho" : "ليسوتو", + "Lithuania" : "ليتوانيا", + "Luxembourg" : "لوكسمبورغ", + "Latvia" : "لاتفيا", + "Libya" : "ليبيا", + "Morocco" : "المغرب", + "Monaco" : "موناكو ", + "Moldova, Republic of" : "جمهورية مولدوفا", + "Montenegro" : "الجبل الأسود", + "Saint Martin (French part)" : "سانت مارتن (الجزء الفرنسي)", + "Madagascar" : "مدغشقر", + "Marshall Islands" : "جزر مارشال", + "North Macedonia" : "الجبل الأسود الشمالية", + "Mali" : "مالي", + "Myanmar" : "ميانمار", + "Mongolia" : "منغوليا", + "Macao" : "ماكاو", + "Northern Mariana Islands" : "جزر ماريانا الشمالية", + "Martinique" : "مارتينيك", + "Mauritania" : "موريطانيا", + "Montserrat" : "مونتسرات", + "Malta" : "مالطا", + "Mauritius" : "موريشيوس", + "Maldives" : "جزر المالديف", + "Malawi" : "ملاوي", + "Mexico" : "المكسيك", + "Malaysia" : "ماليزيا", + "Mozambique" : "موزمبيق", + "Namibia" : "ناميبيا", + "New Caledonia" : "كاليدونيا الجديدة", + "Niger" : "النيجر", + "Norfolk Island" : "جزيرة نورفولك", + "Nigeria" : "نيجيريا", + "Nicaragua" : "نيكاراغوا", + "Netherlands" : "هولندا", + "Norway" : "النرويج", + "Nepal" : "نيبال", + "Nauru" : "ناورو", + "Niue" : "نييوي", + "New Zealand" : "نيوزلاندا ", + "Oman" : "عمان", + "Panama" : "بنما", + "Peru" : "بيرو", + "French Polynesia" : "بولينيزيا الفرنسية", + "Papua New Guinea" : "بابوا غينيا الجديدة", + "Philippines" : "الفلبين", + "Pakistan" : "باكستان", + "Poland" : "بولونيا", + "Saint Pierre and Miquelon" : "سانت بيير وميكلون", + "Pitcairn" : "جزر بيتكيرن", + "Puerto Rico" : "بورتوريكو", + "Palestine, State of" : "فلسطين", + "Portugal" : "البرتغال", + "Palau" : "بالاو", + "Paraguay" : "باراغواي", + "Qatar" : "قطر", + "Réunion" : "ريونيون", + "Romania" : "رومانيا", + "Serbia" : "صربيا ", + "Russian Federation" : "روسيا ", + "Rwanda" : "رواندا", + "Saudi Arabia" : "السعودية ", + "Solomon Islands" : "جزر سليمان", + "Seychelles" : "سيشيل", + "Sudan" : "السودان", + "Sweden" : "السويد", + "Singapore" : "سنغافورة", + "Saint Helena, Ascension and Tristan da Cunha" : "سانت هيلينا وأسينشين وتريستان دا كونا", + "Slovenia" : "سلوفينيا", + "Svalbard and Jan Mayen" : "سفالبارد وجان ماين", + "Slovakia" : "سلوفاكيا", + "Sierra Leone" : "سيراليون", + "San Marino" : "سان مارينو", + "Senegal" : "السنيغال", + "Somalia" : "الصومال", + "Suriname" : "سورينام", + "South Sudan" : "جنوب السودان", + "Sao Tome and Principe" : "ساو تومي وبرينسيبي", + "El Salvador" : "السلفادور", + "Sint Maarten (Dutch part)" : "سانت مارتن (الجزء الهولندي)", + "Syrian Arab Republic" : "سوريا", + "Eswatini" : "إسواتيني", + "Turks and Caicos Islands" : "جزر تركس وكايكوس", + "Chad" : "تشاد", + "French Southern Territories" : "مدن جنوب فرنسا", + "Togo" : "توجو", + "Thailand" : "تايلاند", + "Tajikistan" : "طاجيكستان", + "Tokelau" : "توكيلاو", + "Timor-Leste" : "تيمور الشرقية", + "Turkmenistan" : "تركمانستان", + "Tunisia" : "تونس", + "Tonga" : "تونغا", + "Turkey" : "تركيا", + "Trinidad and Tobago" : "ترينيداد وتوباغو", + "Tuvalu" : "توفالو", + "Taiwan, Province of China" : "مقاطعة تايوان الصينية", + "Tanzania, United Republic of" : "جمهورية تنزانيا المتحدة", + "Ukraine" : "أوكرانيا", + "Uganda" : "أوغندا", + "United States Minor Outlying Islands" : "جزر الولايات المتحدة البعيدة الصغرى", + "United States of America" : "الولايات المتحدة الأمريكية", + "Uruguay" : "أوروغواي", + "Uzbekistan" : "أوزبكستان", + "Holy See" : "الكرسي الرسولي دولة الفاتيكان", + "Saint Vincent and the Grenadines" : "سانت فنسنت وجزر غرينادين", + "Venezuela, Bolivarian Republic of" : "جمهورية فنزويلا البوليفارية", + "Virgin Islands, British" : "جزر العذراء، البريطانية", + "Virgin Islands, U.S." : "جزر العذراء، الأمريكية", + "Viet Nam" : "فييتنام", + "Vanuatu" : "فانواتو", + "Wallis and Futuna" : "جزر واليس وفوتونا", + "Samoa" : "ساموا", + "Yemen" : "اليمن", + "Mayotte" : "مايوت", + "South Africa" : "إفريقيا الجنوبية", + "Zambia" : "زامبيا", + "Zimbabwe" : "زيمبابوي", + "Background blur" : "تضبيب خلفية الصورة", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "تعذر التحقُّق من دعم تحميل WASM. يرجى التحقق يدويًا مما إذا كان خادوم الويب لديك يتعامل مع ملفات `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "لم يتم إعداد خادوم الويب لديك بالشكل الصحيح للتعامل مع ملفات `.wasm`. عادةً ما تكون هذه مشكلة في تكوين خادوم الويب Nginx. بالنسبة إلى الخلفية الضبابية، فإنها تحتاج إلى التعديل كذلك للتعامل مع ملفات \".wasm\". قارن إعدادات Nginx بالإعدادات الموصى بها في وثائق النظام.", + "Talk configuration values" : "قيم تهيئة تطبيق \"المحادثة\" Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "يتم دعم فرض مدة المكالمة فقط مع نظام cron. الرجاء تمكين cron النظام أو إزالة تكوين \"max_call_duration\".", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "قيم `max_call_duration` الصغيرة (المضبوطة حاليًا على %d) غير قابلة للتنفيذ بسبب القيود الفنية. يتم تنفيذ مهمة الخلفية كل 5 دقائق فقط، لذا استخدمها على مسؤوليتك الخاصة.", + "Federation" : "الربط عبر السحابة الموحدة", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "يوصى بشدة بتهيئة \"memcache.locking\" عند تمكين المحادثة الاتحادية.", + "High-performance backend" : "خلفية أعلى اداء", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "لم يتم تكوين واجهة خلفية عالية الأداء لتشغيل تطبيق \"المحادثة\" Talk من نكست كلاود. بدون واجهة خلفية عالية الأداء لا يمكن التعامل إلا مع عدد محدود من المكالمات (بحد أقصى 2-3 مشاركين). يُرجى إعداد الواجهة الخلفية عالية الأداء لضمان عمل المكالمات التي تضم أعداداً أكبر من المشاركين.\n\n\n ", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "وضع \"conversation_cluster\" في الواجهة الخلفية عالية الأداء صار قديمًا ولن يتم دعمه بعد الآن في الإصدارات القادمة. الواجهة الخلفية عالية الأداء تدعم التجميع الحقيقي real-clustering في الوقت الحالي والذي يجب استخدامه بدلاً من ذلك.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "لقد أصبح تحديد العديد من الخوادم الخلفية عالية الأداء غير مستحسن ولن يتم دعمه بعد الآن في الإصدارات القادمة. و بدلاً من ذلك، يجب إعداد موازن التحميل load balancer مع خوادم الإشارات المجمعة وتكوينه في إعدادات تطبيق \"المحادثة\" Talk.", + "High-performance backend not configured correctly" : "خلفية الأداء العالي HP backend ليست مُهيّأةً بالطريقة الصحيحة", + "Error: Cannot connect to server" : "خطأ: لا يمكن الاتصال بالخادم", + "Error: Server did not respond with proper JSON" : "خطأ: الخادم لم يجب جيدا JSON", + "Error: Certificate expired" : "خطأ: انتهت صلاحية الشهادة", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خطأ: أوقات النظام لخادوم نكست كلاود وخادوم الأداء العالي High Performance في الخلفية غير متزامنة. يرجى التأكد من أن كلا الخادومين متصلان بخادوم توقيت موحد أو قم بمزامنة وقتيهما يدوياً.", + "Could not get version" : "تعذر الحصول على الإصدار", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "خطأ: إصدار قيد التشغيل: {version} ؛ يحتاج الخادم إلى التحديث حتى يكون متوافقًا مع هذا الإصدار من تطبيق Talk", + "Error: Server responded with: {error}" : "خطأ: الخادم اجاب بـ: {error}", + "Error: Unknown error occurred" : "خطأ: غير معروف", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "تحذير: الخادوم في الإصدار الذي تعمل عليه: {version}؛ لا يدعم جميع ميزات هذا الإصدار من تطبيق \"المحادثة\" Talk، و هو يفتقد للميزات: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "يوصى بشدة بتهيئة ذاكرة تخزين مؤقت cache عند تشغيل تطبيق \"المحادثة\" Talk في نكست كلاود بواجهة خلفية عالية الأداء .", + "Client Push" : "دفع المعلومات من جهة العميل Client Push", + "Recording backend" : "خلفية التسجيل", + "Using the recording backend requires a High-performance backend." : "لاستعمال تسجيل المحادثات في الخلفية يلزمك خلفية عالية الأداء.", + "No recording backend configured" : "لاتوجد خلفية عالية الأداء للتسجيل", + "SIP configuration" : "إعدادات SIP", + "Using the SIP functionality requires a High-performance backend." : "لاستعمال خاصية الاتصال الهاتفي SIP يلزمك خلفية عالية الأداء.", + "No SIP backend configured" : "لاتوجد خلفية عالية الأداء لإدارة جلسات المكالمات SIP", + "Invalid date, date format must be YYYY-MM-DD" : "تاريخ غير صحيح, يجب أن يكون تنسيق التاريخ YYYY-MM-DD", + "Conversation not found" : "المحادثة غير موجودة", + "Path is already shared with this conversation" : "المسار سبقت مشاركته سلفاً مع هذه المحادثة", + "Chat, video & audio-conferencing using WebRTC" : "الدردشة والفيديو والمؤتمرات الصوتية باستخدام WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "الدردشة والفيديو والمؤتمرات الصوتية باستخدام WebRTC\n\n * 💬 **الدردشة** يأتي تطبيق المحادثة Talk في نكست كلاود مع محادثة نصية بسيطة، مما يسمح لك بمشاركة أو تحميل الملفات من تطبيق الملفات Files في نكست كلاود أو من الجهاز المحلي، و الإشارة إلى المشاركين الآخرين. \n* 👥 **مكالمات خاصة وجماعية وعامة ومحمية بكلمة مرور! ** قم بدعوة شخص ما أو مجموعة كاملة أو أرسل رابطًا عامًا للدعوة لإجراء مكالمة.\n * 🌐 **الدردشات الموحدة** قم بالدردشة مع مستخدمي نكست كلاود الآخرين على خوادمهم \n* 💻 **مشاركة الشاشة!** شارك شاشتك مع المشاركين في مكالمتك. \n* 🚀 **التكامل مع تطبيقات نكست كلاود الأخرى** مثل الملفات والتقويم وحالة المستخدم ولوحة المعلومات وأتمتة سير العمل والخرائط و اللاقط الذكي وجهات الاتصال و رزم البطاقات وغير ذلك الكثير. \n* 🌉 **المزامنة مع حلول الدردشة الأخرى** من خلال دمج [Matterbridge] (https://github.com/42wim/matterbridge/) في Talk، يمكنك بسهولة مزامنة الكثير من حلول الدردشة الأخرى مع تطبيق المحادثة Talk في نكست كلاود، و كذلك بالعكس.", + "Leave call" : "مغادرة المكالمة", + "Navigating away from the page will leave the call in {conversation}" : "الخروج من هذه الصفحة سيؤدي لمغادرة المكالمة في {conversation}", + "Stay in call" : "البقاء في المكالمة", + "Discuss this file" : "مناقشة هذا الملف", + "Share this file with others to discuss it" : "مشاركة هذا الملف للمناقشة", + "Share this file" : "مشاركة هذا الملف", + "Join conversation" : "انضمام للمحادثة", + "This conversation is password-protected." : "هذه المحادثة محمية بكلمة مرور.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "لقد اكتشفنا عدة محاولات غير صالحة لكلمة المرور من عنوان IP الخاص بك. لذلك سوق يتم تقييد محاولتك التالية لمدة تصل إلى 30 ثانية.", + "The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى.", + "Password" : "الكلمة السرية", + "Submit" : "إرسال ", + "Error requesting the password." : "خطأ في طلب كلمة المرور", + "Request password" : "طلب كلمة المرور", + "This conversation has ended" : "المحادثة انتهت", + "Error occurred when joining the conversation" : "حدث خطأ أثناء الانضمام إلى المحادثة", + "Close Talk sidebar" : "إغلاق الشريط الجانبي لتطبيق Talk", + "Open Talk sidebar" : "فتح الشريط الجانبي لتطبيق Talk", + "Everyone" : "الجميع", + "Users and moderators" : "الأعضاء والمشرفين", + "Moderators only" : "المشرفين فقط", + "Disable calls" : "تعطيل المكالمات", + "Save changes" : "حفظ التعديلات", + "Saving …" : "جاري الحفظ…", + "Saved!" : "تم الحفظ!", + "Limit to groups" : "التقيد إلى مجموعات", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "عند تحديد مجموعة واحدة، الاعضاء في هذه المجموعة فقط سيشاركون في هذه المحادثة.", + "Guests can still join public conversations." : "الضيوف بإمكانهم الانضمام للمحادثات العامة.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "المستخدمين الذين لا يمكنهم استخدام التحدث Talk بعد الآن سيظهورن كمشاركين في قائمة المحادثات السابقة وأيضًا سيتم حفظ رسائل محادثاتهم.", + "Limit using Talk" : "تقييد استخدام تطبيق التحدث", + "Limit creating a public and group conversation" : "تقييد إنشاء محادثات عامة او جماعية", + "Limit creating conversations" : "تقييد انشاء المحادثات", + "Limit starting a call" : "تقييد بدء مكالمة", + "Limit starting calls" : "تقييد بدء المكالمات", + "When a call has started, everyone with access to the conversation can join the call." : "في حين مكالمة بدأت، الجميع بصلاحية للمحادثات بإمكانه الانضمام للمكالمة.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "تم تثبيت الروبوتات التالية على هذا الخادوم. في الوثائق، يمكنك العثور على تفاصيل حول كيفية {linkstart1} إنشاء روبوتك الخاص{linkend} أو {linkstart2} قائمة الروبوتات {linkend} لتمكينها على خادومك.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "لم يتم تثبيت أي روبوتات على هذا الخادوم. في الوثائق، يمكنك العثور على تفاصيل حول كيفية {linkstart1} إنشاء روبوتك الخاص{linkend} أو {linkstart2} قائمة الروبوتات {linkend} لتمكينها على خادومك.", + "Description is not provided" : "الوصف غير موجود", + "Locked for moderators" : "مقفل للمشرفين", + "Enabled" : "مُفعّل", + "Disabled" : "معطّل", + "Bots settings" : "إعدادات الروبوتات Bots", + "State" : "الحالة", + "Name" : "الاسم", + "Last error" : "آخر خطأ", + "Total errors count" : "العدد الإجمالي للأخطاء", + "Find more bots" : "أعثُر على المزيد من الروبوتات", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "يمكن تكوين الخوادم الموثوقة في {linkstart} صفحة إعدادات المشاركة {linkend}.", + "Beta" : "تجريبي", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "المحادثات والمكالمات الاتحادية تعمل بالفعل. سيتم إضافة إمكانية التعامل مع المرفقات في إصدار مستقبلي.", + "Enable Federation in Talk app" : "تمكين تطبيق \"المحادثة\" من التواصل عبر السحابة الموحدة", + "Permissions" : "التصريحات", + "Allow users to be invited to federated conversations" : "السماح للمستخدِمين بأن تتم دعوتهم إلى المحادثات الاتحادية", + "Allow users to invite federated users into conversation" : "السماح للمستخدِمين بدعوة مستخدِمين من السحابة الموحدة إلى المحادثة ", + "Only allow to federate with trusted servers" : "السماح فقط بالاتحاد مع الخوادم الموثوقة", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "عند تحديد مجموعة واحدة على الأقل، يمكن لأشخاص المجموعات المدرجة فقط دعوة المستخدِمين من السحابة الموحدة إلى المحادثة.", + "Groups allowed to invite federated users" : "المجموعات التي يحق لها دعوة مستخدِمين من السحابة الموحدة", + "Select groups …" : "تحديد المجموعات ...", + "All messages" : "كافة الرسائل", + "@-mentions only" : "@-إشارة فقط", + "Off" : "إيقاف", + "General settings" : "الإعدادات العامة", + "Default notification settings" : "إعدادات الإشعارات الافتراضية", + "Default group notification" : "تنبيه المجموعة الافتراضي", + "Default group notification for new groups" : "تنبيه المجموعة الافتراضي للمجموعات الجديدة", + "Integration into other apps" : "الربط مع تطبيقات آخرى", + "Allow conversations on files" : "السماح بالمحادثات على الملفات", + "Allow conversations on public shares for files" : "السماح للمحادثات عبر مشاركة الملفات العامة", + "End-to-end encrypted calls" : "محادثات مشفرة من الحدّ للحدّ", + "Enable encryption" : "تمكين التشفير", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "تتطلب المكالمات المشفرة من الحد للحد باستخدام جسر SIP مُهيّإٍ إصداراً أحدث من الواجهة الخلفية للأداء العالي وجسر SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "الهواتف النقالة العميلة لا تدعم المكالمات المشفرة من الحد للحد في الوقت الحاضر.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "بالنقر فوق الزر أعلاه، يتم إرسال المعلومات الواردة في النموذج إلى خوادم شركة Struktur AG. يمكنك العثور على مزيد من المعلومات على {linkstart} spreed.eu {linkend}.", + "Pending" : "معلّق", + "Error" : "خطأ", + "Blocked" : "محجوب", + "Active" : "فعال", + "Expired" : "منتهي", + "Never" : "مُطلَقاً", + "The trial could not be requested. Please try again later." : "لا يمكن طلب التجربة. يرجى إعادة المحاولة لاحقًا. ", + "The account could not be deleted. Please try again later." : "لا يمكن حذف الحساب، يرجى المحاولة لاحقا.", + "Hosted High-performance backend" : "خلفية مستضافة عالية الأداء ", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "يوفر شريكنا Struktur AG خدمة حيث يمكن طلب خادم التشوير المستضاف. لهذا ما عليك سوى ملء النموذج أدناه وسيطلبه نكست كلاود الخاص بك. وبمجرد تعيين الخادم لك، سيتم ملء بيانات الاعتماد تلقائيًا. سيؤدي هذا إلى الكتابة فوق إعدادات خادم التشوير الحالي.", + "URL of this Nextcloud instance" : "الرابط لهذا الخادم السحابي نكست كلاود", + "Full name of the user requesting the trial" : "الاسم الكامل للمستخدم الذي يطلب التجربة", + "Email of the user" : "البريد الالكتروني للمستخدم ", + "Language" : "اللغة", + "Country" : "البلد", + "Request signaling server trial" : "طلب تجربة خادم التشوير", + "You can see the current status of your hosted signaling server in the following table." : "يمكنك رؤية الحالة الحالية لخادم التشوير المستضاف في الجدول التالي.", + "Status" : "الحالة", + "Created at" : "انشأت في", + "Expires at" : "انتهت في", + "Limits" : "التقييد", + "Yes" : "نعم", + "No" : "لا", + "Delete the signaling server account" : "حذف حساب خادم التشوير ", + "_%n user_::_%n users_" : ["%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم"], + "Installed version: {version}" : "الاصدار المثبت: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "يمكنك تثبيت Matterbridge لربط Nextcloud Talk ببعض الخدمات الأخرى ، قم بزيارة {linkstart1} صفحة جيت هب {linkend} الخاصة بهم لمزيد من التفاصيل. قد يستغرق تنزيل التطبيق وتثبيته بعض الوقت. في حالة انتهاء المهلة، يرجى تثبيته يدويًا من {linkstart2} متجر تطبيقات نكست كلود {linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "كود \"ماتر بريدج\" Matterbridge binary لايملك الأذونات الصحيحة المطلوبة. رجاءً، تأكد من أن المستخدِم مالك ملف كود \"ماتر بريدج\" Matterbridge binary يحمل الصلاحيات اللازمة بحيث يمكن تنفيذه. يمكن إيجاده في: \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "لم يتم العثور على ملف Matterbridge الثنائي أو تعذر تنفيذه.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "يمكنك أيضًا تعيين المسار إلى ثنائي Matterbridge يدويًا عبر التكوين. راجع {linkstart} وثائق تكامل Matterbridge {linkend} للحصول على مزيد من المعلومات.", + "Downloading …" : "جاري التحميل…", + "Install Talk Matterbridge" : "تثبيت Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "حدث خطأ أثناء تنصيب تطبيق Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "حدث خطأ أثناء تنصيب the Talk Matterbridge. رجاءً، قُم بتنصيبه يدوياً", + "Failed to execute Matterbridge binary." : "فشل تنفيذ برنامج Matterbridge الثنائي.", + "Matterbridge integration" : "تكامل Matterbridge", + "Enable Matterbridge integration" : "تعطيل تكامل Matterbridge", + "Status: Checking connection" : "الحالة: فحص الاتصال", + "OK: Running version: {version}" : "ممتاز: الاصدار التشغيلي: {version}", + "Error: Server seems to be a Signaling server" : "خطأ: يبدو أن الخادوم هو خادوم إشارة Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خطأ: أوقات النظام لخادوم نكست كلاود وخادوم التسجيل الصوتي للمكالمات في الخلفية غير متزامنة. يرجى التأكد من أن كلا الخادومين متصلان بخادوم توقيت موحد أو قم بمزامنة وقتيهما يدوياً.", + "Recording backend URL" : "عنوان URL خلفية التسجيل", + "Validate SSL certificate" : "التحقق من صلاحية شهادة SSL", + "Delete this server" : "حذف هذا الخادم", + "Test this server" : "جرّب هذا الخادم", + "Disabled for all calls" : "تمّ تعطيله لكل المكالمات", + "Enabled for all calls" : "تمّ تمكينه لكل المكالمات", + "Configurable on conversation level by moderators" : "يمكن تهيئته على مستوى المحادثة من قِبَل المشرفين", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "أعدادات PHP ـ \"upload_max_filesize\" أو \"post_max_size\" فقط ستسمح برفع ملفات ٍإلى {maxUpload}.", + "Recording backend settings saved" : "تمّ حفظ إعدادات خلفية التسجيل recording backend", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "المشرفون يمكنهم تمكين الإذونات على مستوى المحادثة. الإذن بالتسجيل مطلوب من كل مشارك قبل الانضمام لكل مكالمة في هذه المحادثة.", + "The consent to be recorded will be required for each participant before joining every call." : "الإذن بالتسجيل سيُطلب من كل مشارك قبل الانضمام لكل مكالمة. ", + "The consent to be recorded is not required." : "الإذن بالتسجيل ليس مطلوباً.", + "Recording backend configuration is only possible with a High-performance backend." : "تهيئة خلفية التسجيل ممكنة فقط بوجود خلفية عالية الأداء.", + "Add a new recording backend server" : "إضافة خادم واجهة خلفية للتسجيل جديد", + "Shared secret" : "السر المشترك", + "Recording consent" : "الإذن بالتسجيل", + "Recording transcription" : "مستنسخ التسجيل ", + "Automatically transcribe call recordings with a transcription provider" : "القيام تلقائياً باستنساح تسجيلات المكالمات عبر مزود استنساخ", + "Automatically summarize call recordings with transcription and summary providers" : "القيام تلقائياً بتلخيص تسجيلات المكالمات عبر مزود استنساخ و تلخيص", + "SIP configuration saved!" : "تم حفظ تكوين SIP!", + "SIP configuration is only possible with a High-performance backend." : "تهيئة إدارة جلسات المكالمات SIP ممكنة فقط بوجود خلفية عالية الأداء.", + "Enable SIP Dial-out option" : "تمكين خيار الطلب الهاتفي SIP.", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "يحتاج خادوم الإشارة Signaling server إلى التحديث إلى ميزة الطلب الهاتفي SIP المدعومة.", + "Restrict SIP configuration" : "تقييد إعدادات SIP", + "Enable SIP configuration" : "تفعيل إعدادات SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "السماح فقط للمستخدمين من المجموعات التالية بتفعيل SIP في اشرافهم على المحادثات.", + "Phone number (Country)" : "رقم الجوال (الدولة)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "هذه المعلومات مرسله من بريد الدعوة وظاهرة ايضا في الشريط الجانبي لجميع المشاركين.", + "Nextcloud base URL" : "عنوان URL الأساسي لنكست كلاود", + "Talk Backend URL" : "عنوان URL لخلفية \"المحادثة\" Talk", + "WebSocket URL" : "عنوان URL لـ\"مَقبَس الوِب\" WebSocket", + "Available features" : "الخصائص المُتَاحة", + "Error code" : "رقم الخطأ", + "Error: Websocket connection failed. Check browser console" : "خطأ: فشل الاتصال عن طريق \"مقبس الوب\" WebSocket. أنظُر طَرَفِيّة المُتصَفِّح browser console", + "High-performance backend URL" : "رابط خلفية أعلى اداء", + "Missing High-performance backend warning hidden" : "التحذير من عدم وجود خلفية للأداء العالي لن يتم إظهاره", + "High-performance backend settings saved" : "تم حفظ إعدادات الواجهة الخلفية عالية الأداء", + "Nextcloud Talk setup not complete" : "تهيئة \"المحادثة\" Talk من نكست كلاود لم تكتمل بعدُ.", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "يرجى ملاحظة أنه في المكالمات التي يكون فيها عدد المشاركين أكثر من 2 دون استخدام خلفية الأداء العالي، فمن المرجح أن يواجه المشاركون مشكلات في الاتصال قد يسبب تحميلًا عاليًا على الأجهزة المشاركة.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "قُم بتثبيت خلفية الأداء العالي لضمان العمل بسلاسة لمكالمات متعددة المتشاركين.", + "Nextcloud portal" : "بوابة نكست كلاود", + "Quick installation guide" : "دليل التثبيت السريع", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "خلفية الأداء العالي لازمة لإجراء مكالمات ومحادثات فيها متشاركون عديدون. وبدون هذه الخلفية، يتعين على جميع المشاركين تحميل مقاطع الفيديو الخاصة بهم بشكل فردي لكل مشارك آخر؛ الأمر الذي قد يتسبب في حدوث مشكلات في الاتصال وزيادة الحمل على الأجهزة المشاركة.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "يوصى بشدة بإعداد ذاكرة تخزين مؤقتة موزعة distriburted cache عند استخدام \"المحادثة\" Talk من نكست كلاود مع خلفية للأداء العالي.", + "Add High-performance backend server" : "إضافة خادوم خلفية الأداء العالي", + "Warn about connectivity issues in calls with more than 2 participants" : "تحذير حول إشكاليات في الاتصال بالنسبة للمكالمات التي فيها أكثر من 2 مُشَارِكَيْن.", + "STUN server URL" : "عنوان URL لخادم STUN", + "The server address is invalid" : "عنوان الخادم غير صالح", + "STUN settings saved" : "تم حفظ إعدادات خادم STUN", + "STUN servers" : "خوادم STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "يتم استخدام خادم STUN لتحديد عنوان IP العام للمشاركين خلف جهاز توجيه.", + "Add a new STUN server" : "إضافة خادم STUN جديد", + "{schema} scheme must be used with a domain" : "{schema} يجب أن يستخدم من نطاق معين ", + "{option1} and {option2}" : "{خيار1} و {خيار2}", + "{option} only" : "{option} فقط ", + "OK: Successful ICE candidates returned by the TURN server" : "حسنًا: تم إرجاع مرشحي ICE بواسطة خادم TURN بنجاح", + "Error: No working ICE candidates returned by the TURN server" : "خطأ: لم يتم إرجاع أي من مرشحي ICE بواسطة خادم TURN", + "Testing whether the TURN server returns ICE candidates" : "تجربة ما إذا كان خادم TURN يعرض مرشحات ICE", + "TURN server schemes" : "نظم خادم TURN", + "TURN server URL" : "عنوان URL لخادم TURN", + "TURN server secret" : "سر خادم TURN", + "TURN server protocols" : "بروتوكلات خادم TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "يتم استخدام خادم TURN لتوكيل مرور المشاركين خلف جدار الحماية. إذا لم يتمكن المشاركون الأفراد من الاتصال بالآخرين، فمن المرجح أن يكون خادم TURN مطلوبًا. راجع {linkstart} هذه الوثائق {linkend} للحصول على إرشادات الإعداد.", + "TURN settings saved" : "تم حفظ إعدادات خادم TURN", + "TURN servers" : "خوادم TURN", + "Add a new TURN server" : "إضافة خادم TURN جديد", + "Failed" : "فشل", + "OK" : "موافق", + "Checking …" : "جاري التحقق … ", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "فشل: تم تعطيل WebAssembly أو أنه غير مدعوم في هذا المتصفح. يرجى تمكين WebAssembly أو استخدام متصفح يدعمه لإجراء الفحص.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "فشل: لم يتم إرجاع ملفات \".wasm\" و \".tflite\" بشكل صحيح من قبل خادم الويب. الرجاء مراجعة قسم \"متطلبات النظام\" في وثائق تطبيق Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "حسنًا: تم إرجاع ملفات \".wasm\" و \".tflite\" بشكل صحيح من قبل خادم الويب.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "يبدو أن إعدادات PHP و Apache غير متوافقة. يرجى ملاحظة أنه لا يمكن استخدام PHP إلا مع الوحدة النمطية MPM_PREFORK ولا يمكن استخدام PHP-FPM إلا مع الوحدة النمطية MPM_EVENT.", + "Web server setup checks" : "التحقق من تنصيب خادم الويب", + "Files required for virtual background can be loaded" : "يمكن تحميل الملفات المطلوبة للخلفية الافتراضية", + "Federated user" : "مستخدِم السحابة الموحدة", + "Assign participants to rooms" : "تعيين المشاركين للغرف", + "Configure breakout rooms" : "تهيئة الغرف الجانبية", + "Number of breakout rooms" : "عدد الغرف الجانبية", + "You can create from 1 to 20 breakout rooms." : "يمكنك إنشاء من 1 حتى 20 غرفة جانبية.", + "Assignment method" : "طريقة التكليف", + "Automatically assign participants" : "تعيين المشاركين تلقائيًا", + "Manually assign participants" : "تعيين المشاركين يدويًا", + "Allow participants to choose" : "السماح للمشاركين بالاختيار", + "Create rooms" : "إنشاء غرف", + "Confirm" : "تأكيد", + "Create breakout rooms" : "إنشاء غرف جانبية", + "Reset" : "إعادة الضبط", + "Delete breakout rooms" : "حذف الغرف الجانبية", + "Room {roomNumber}" : "غرفة {roomNumber}", + "Current breakout rooms and settings will be lost" : "سوف يحدث فقد للغرف الجانبية والإعدادات الحالية", + "Cancel" : "إلغاء", + "Unassigned participants" : "المشاركون غير المعينين", + "Back" : "العودة", + "Assign" : "كَلِّف", + "Add participant \"{user}\"" : "إضافة مشارك \"{user}\"", + "Now" : "الآن", + "Invalid calendar selected" : "التقويم الذي تمّ تحديده غير صحيح", + "Invalid start time selected" : "وقت البداية الذي تمّ تحديده غير صحيح", + "Invalid end time selected" : "وقت الانتهاء الذي تمّ تحديده غير صحيح", + "Unknown error occurred" : "حدث خطأ غير معروف", + "Sending no invitations" : "لم يتم إرسال أي دعوات", + "{participant0} will receive an invitation" : "{participant0} سوف يستلم دعوةً", + "{participant0} and {participant1} will receive invitations" : "{participant0} و {participant1} سوف يستلمان دعوةً", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} و %n آخرون سيستلمون دعواتٍ","{participant0}, {participant1} و %n آخرون سيستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سيستلمون دعواتٍ","{participant0}, {participant1} و%n آخرين سوف يستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سوف يستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سوف يستلمون دعواتٍ"], + "Meeting created" : "تمّ إنشاء الاجتماع", + "Upcoming meetings" : "الاجتماعات القادمة", + "Loading …" : "التحميل جارٍ …", + "Schedule a meeting" : "جدولة اجتماع", + "Meeting title" : "عنوان الاجتماع", + "From" : "مِن :", + "To" : "إلى :", + "Calendar" : "الجدول الزمني", + "Attendees" : "المشاركون", + "Add attendees" : "إضافة إلى الحُضُور", + "Save" : "حفظ", + "Search participants" : "البحث عن مشاركين", + "No results" : "دون أية نتيجة", + "Done" : "تمّ", + "Raise hand" : "رفع اليد", + "Raise hand (R)" : "رفع اليد (r)", + "Lower hand" : "خفض اليد ", + "Lower hand (R)" : "خفض اليد (R)", + "Exit full screen (F)" : "خروج من ملء الشاشة (F)", + "Full screen (F)" : "ملء الشاشة (F)", + "Speaker view" : "عرض المتحدث", + "Grid view" : "عرض كمخطط", + "Recording consent is required" : "إذن التسجيل مطلوب", + "This conversation is read-only" : "هذه المحادثة للقراءة فقط", + "Conversation not found or not joined" : "المحادثة غير موجودة أو لم يتم الانضمام إليها", + "Lobby is still active and you're not a moderator" : "صالة الاستقبال مازالت مفتوحة وأنت ليس مُنسِّقَاً", + "Connection failed" : "تعذّر الاتصال", + "Reload" : "إعادة تحميل", + "{nickName} raised their hand." : "{nickName} رفع يده ", + "A participant raised their hand." : "رفع مشارك يده. ", + "Collapse stripe" : "طي الشريط ", + "Expand stripe" : "توسيع الشريط ", + "Previous page of videos" : "الصفحة السابقة للفيديوهات ", + "Next page of videos" : "الصفحة التالية من الفيديوهات ", + "Connecting …" : "جارٍ الاتصال…", + "Calling …" : "الاتصال جارٍ ...", + "Waiting for {user} to join the call" : "في انتظار انضمام {user} إلى المكالمة", + "Waiting for others to join the call …" : "انتظار الآخريين للانضمام للمكالمة…", + "You can invite others in the participant tab of the sidebar" : "بإمكانك اضافة مشاركيين آخريين من القائمة الجانبية", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "بإمكانك اضافة مشاركيين آخريين من القائمة الجانبية أو مشاركة الرابط لدعوة الآخريين!", + "Share this link to invite others!" : "شارك هذا الرابط لدعوة الآخريين!", + "Copy link" : "انسخ الرابط", + "You are not allowed to enable audio" : "غير مسموح لك بتمكين الصوت", + "No audio. Click to select device" : "لا يوجد صَوْت. أنقُر لاختيار الجهاز", + "Mute audio" : "كتم الصوت", + "Mute audio (M)" : "كتم الصوت (M)", + "Unmute audio" : "تشغيل الصوت", + "Unmute audio (M)" : "تشغيل الصوت (M)", + "None" : "لا شيء", + "Access to camera was denied" : "تم رفض الوصول للكاميرا", + "Error while accessing camera: It is likely in use by another program" : "خطأ أثناء الوصول إلى الكاميرا: من المحتمل أن تكون قيد الاستخدام من قبل برنامج آخر", + "Error while accessing camera" : "حدث خطأ اثناء الوصول للكاميرا", + "You have been muted by a moderator" : "تم اغلاق المايكرفون الخاص بك من قبل المشرف", + "Hide presenter video" : "إخفاء فيديو مقدم العرض", + "You are not allowed to enable video" : "غير مسموح لك بتمكين الفيديو", + "No video. Click to select device" : "لايوجد فيديو. أنقُر لاختيار الجهاز", + "Disable video" : "تعطيل الفيديو", + "Disable video (V)" : "تعطيل بالفيديو (V)", + "Enable video" : "تفعيل الفيديو", + "Enable video (V)" : "تفعيل الفيديو (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "تمكين الفيديو - سوف ينقطع اتصالك مؤقّتاً عند تمكين الفيديو للمرة الاولى", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "تفعيل الفيديو (v) - سيتم قطع اتصالك للحظات عند تشغيل الفيديو للمره الأولى", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "سماح الفيديو - سيتم قطع اتصالك للحظات عند تشغيل الفيديو للمره الاولى", + "Show presenter" : "إظهار مقدم العرض", + "You" : "أنت", + "Mute" : "كتم الصوت", + "Muted" : "تم كتم الصوت", + "Show screen" : "اظهار الشاشة", + "Stop following" : "ايقاف المتابعة", + "Connection could not be established …" : "تعذر إنشاء الاتصال ...", + "Connection was lost and could not be re-established …" : "انقطع الاتصال ولا يمكن إعادة إنشائه ...", + "Connection could not be established. Trying again …" : "تعذر إنشاء الاتصال. المحاولة مرة اخرى …", + "Connection lost. Trying to reconnect …" : "انقطع الاتصال. جارٍ محاولة إعادة الاتصال ...", + "Connection problems …" : "مشاكلات في الاتصال …", + "Collapse" : "طوي", + "Expand" : "توسيع", + "You need to be logged in to upload files" : "يجب عليك تسجيل الدخول لرفع الملفات", + "Drop your files to upload" : "افلت الملفات لرفعها", + "Conversation messages" : "رسائل المحادثة ", + "Scroll to bottom" : "انتقل للاسفل", + "Post message" : "إرسال الرسالة ", + "Federated conversation" : "محادثة السحابة الموحدة", + "Public conversation" : "محادثة عمومية", + "Favorite" : "المفضلة", + "Banned users" : "مستخدِمون محظورون", + "Manage the list of banned users in this conversation." : "إدارة قائمة المستخدمين المحظورين في هذه المحادثة", + "Manage bans" : "إدارة الحظر", + "No banned users" : "لا يوجد مستخدِمون محظورون", + "Banned by:" : "محظورٌ من قِبَل:", + "Date:" : "التاريخ:", + "Note:" : "ملاحظة:", + "Hide details" : "إخفاء التفاصيل", + "Show details" : "عرض التفاصيل", + "Unban" : "رفع الحظر", + "Error while updating conversation name" : "خطأ أثناء تحميل اسم المحادثة", + "Error while updating conversation description" : "حدث خطأ أثناء تحديث وصف المحادثة", + "Enter a name for this conversation" : "أدخِل اسماً لهذه المحادثة", + "Edit conversation name" : "تعديل اسم المحادثة", + "Edit conversation description" : "تحرير وصف المحادثة", + "Enter a description for this conversation" : "ادخل وصفًا لهذه المحادثة ", + "Picture" : "صورة", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "يمكن تمكين الروبوتات bots التالية في هذه المحادثة. تواصل مع إدارتك لتثبيت المزيد من برامج الروبوت على هذا الخادوم.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "لم يتم تثبيت أي روبوتات على هذا الخادم. تواصل مع إدارتك لتثبيت برامج الروبوت على هذا الخادوم.", + "Disable" : "تعطيل", + "Enable" : "تمكين", + "Breakout rooms" : "الغرف الجانبية", + "Manage breakout rooms" : "أدِر الغرف الجانبية", + "Set up breakout rooms for this conversation" : "جهّز غرفاً جانبيةً لهذه المحادثة", + "Please select a valid PNG or JPG file" : "يرجي اختيار ملف PNG أو JPG صالح", + "Choose your conversation picture" : "إختَر صورة محادثتك", + "Choose" : "إختر", + "Error setting conversation picture" : "خطأ في تعيين صورة المحادثة", + "Could not set the conversation picture: {error}" : "تعذّر تعيين صورة المحادثة: {error}", + "Error cropping conversation picture" : "خطأ في اقتصاص صورة المحادثة", + "Error removing conversation picture" : "خطأ في حذف صورة المحادثة", + "Set emoji as conversation picture" : "تعيين إيموجي كصورة للمحادثة", + "Set background color for conversation picture" : "تعيين لون الخلفية لصورة المحادثة", + "Upload conversation picture" : "رفع صورة المحادثة", + "Choose conversation picture from files" : "إختَر صورة للمحادثة من الملفات", + "Remove conversation picture" : "حذف صورة المحادثة", + "The file must be a PNG or JPG" : "يحب أن يكون الملف PNG أو JPG", + "Set picture" : "تعيين الصورة", + "Default permissions modified for {conversationName}" : "تم تعديل الأذونات الافتراضية لـ {ConversName}", + "Could not modify default permissions for {conversationName}" : "تعذر تعديل الأذونات الافتراضية لـ {callingName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "تحرير الأذونات الافتراضية للمشاركين في هذه المحادثة. لا تؤثر هذه الإعدادات على المشرفين.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "في كل مرة يتم فيها تعديل الأذونات في هذا القسم، فإن الأذونات المخصصة التي سبق تعيينها للمشاركين الفرديين سيقع حذفها.", + "All permissions" : "كل الأذونات", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "حصل المشاركون علي أذونات لبدء مكالمة، والانضمام إلى مكالمة، وتمكين الصوت والفيديو ، ومشاركة الشاشة.", + "Restricted" : "مقيد", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "يمكن للمشاركين الانضمام إلى المكالمات، لكن لا يمكنهم تمكين الصوت أو الفيديو أو مشاركة الشاشة حتى يمنحهم الميسر الأذونات يدويًا.", + "Advanced permissions" : "أذونات متقدمة", + "Edit permissions" : "تحرير الأذونات", + "Conversation settings" : "اعدادات المحادثة", + "Basic Info" : "معلومات أساسية", + "Personal" : "شخصي", + "Moderation" : "الإدارة", + "Setup overview" : "نظرة عامة على الإعداد", + "Breakout Rooms" : "الغرف الجانبية", + "Matterbridge" : "Matterbridge", + "Bots" : "الروبوتات Bots", + "Danger zone" : "منطقة خطر", + "Archive conversation" : "أرشفة المحادثة", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "يتم إخفاء المحادثات المؤرشفة من قائمة المحادثات تلقائيّاً. ومع ذلك، ستظل تظهر عند البحث عن اسم المحادثة أو الوصول إلى قائمة المحادثات المؤرشفة.", + "Do you really want to leave \"{displayName}\"?" : "هل ترغب حقاً في المغادرة، \"{displayName}\"؟", + "You can archive this conversation instead." : "يمكنك أرشفة هذه المحادثة بدلاً عن ذلك.", + "Leave conversation" : "غادر المحادثة", + "You need to promote a new moderator before you can leave the conversation" : "تحتاج إلى إنشاء ميسر جديد قبل أن تتمكن من مغادرة المحادثة", + "Delete conversation" : "احذف المحادثة", + "Do you really want to delete \"{displayName}\"?" : "هل تريد حقا حذف \"{displayName}\" ؟", + "Error while deleting conversation" : "حدث خطأ أثناء حذف المحادثة ", + "Delete all chat messages" : "حذف جميع رسائل الدردشة", + "Do you really want to delete all messages in \"{displayName}\"?" : "هل تريد حقًا حذف كافة الرسائل الموجودة في \"{displayName}\"؟", + "Error while clearing chat history" : "خطأ أثناء مسح سجل الدردشة", + "Be careful, these actions cannot be undone." : "كن حذرًا ، لا يمكن التراجع عن هذه الإجراءات.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "عند ترك المحادثة،ولإعادة الانضمام مرة أخرى إلى المحادثة المغلقة، فإن ذلك يتطلبدعوة. ويمكن إعادة الانضمام إلى المحادثة المفتوحة في أي وقت.", + "Permanently delete this conversation." : "حذف هذه المحادثة بشكل دائم.", + "Delete chat messages" : "حذف رسائل الدردشة", + "Permanently delete all the messages in this conversation." : "حذف جميع الرسائل الموجودة في هذه المحادثة بشكل دائم.", + "_%n hour_::_%n hours_" : ["%nساعات","%n ساعة","%n ساعات","%n ساعات","%n ساعات","%n ساعات"], + "_%n day_::_%n days_" : ["%n أيام","%n يوم","%nأيام","%nأيام","%n أيام","%n أيام"], + "_%n week_::_%n weeks_" : ["%n أسابيع","%n أسبوع","%n أسابيع","%n أسابيع","%n أسابيع","%n أسابيع"], + "Custom expiration time" : "تخصيص إنتهاء الصلاحية", + "Message expiration disabled" : "تم تعطيل انتهاء صلاحية الرسالة", + "Message expiration set: {duration}" : "ضبط انتهاء صلاحية الرسالة: {duration}", + "Error when trying to set message expiration" : "خطأ عند محاولة تعيين انتهاء صلاحية الرسالة", + "Message expiration" : "نهاية صلاحية الرسالة", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "يمكن أن تنتهي صلاحية رسائل الدردشة بعد وقت معين. ملاحظة: لن يتم حذف الملفات التي تمّت مشاركتها في الدردشة عند المالك، و لكن لن تستمر مشاركتها مع الآخرين في المحادثة.", + "Set message expiration" : "عيّن تاريخ انتهاء صلاحية الرسالة", + "Current message expiration" : "التاريخ الحالي لانتهاء صلاحية الرسالة", + "Password copied to clipboard" : "تمّ نسخ كلمة المرور إلى الحافظة", + "Password could not be copied" : "تعذّر نسخ كلمة المرور", + "Guest access" : "وصول الضيف", + "Breakout rooms are not allowed in public conversations." : "الغرف الجانبية غير متاحة في حالة المحادثات العامة.", + "Allow guests to join this conversation via link" : "السماح للضيوف بالانضمام إلى هذه المحادثة من خلال رابط", + "Password protection" : "الحماية بكلمة السر", + "This conversation is password-protected. Guests need password to join" : "المحادثة محمية بكلمة مرور. الضيوف محتاجون لكلمة المرور للانضمام", + "Password protection is needed for public conversations" : "الحماية باستعمال كلمة المرور لازمة في حالة المحادثة العامة", + "Set a password" : "تعيين كلمة المرور", + "Change password" : "تغيير كلمة المرور", + "Enter new password" : "أدخِل كلمة مرور جديدة", + "Save password" : "حفظ كلمة المرور", + "Copy password" : "إنسَخ كلمة المرور", + "Guests are allowed to join this conversation via link" : "الضيوف مسموح لهم بالانضمام لهذه المحادثة عبر الرابط", + "Guests are not allowed to join this conversation" : "الضيوف غير مسموح لهم بالانضمام لهذه المحادثة", + "Resend invitations" : "إعادة إرسال الدعوات ", + "This conversation is open to both registered users and users created with the Guests app" : "المحادثة مفتوحة لكل من المستخدِمين المسجلين و للضيوف المستحدثين عبر تطبيق الضيوف Guests app", + "This conversation is open to registered users" : "المحادثة مفتوحة للمستخدِمين المسجلين", + "This conversation is limited to the current participants" : "هذه المحادثة مقتصرةٌ على المشاركين الحاليين", + "You opened the conversation to both registered users and users created with the Guests app" : "أنت قمت بفتح المحادثة لكل من المستخدِمين المسجلين و المستخدِمين المستحدثين عبر تطبيق الضيوف Guests app", + "Error occurred when opening or limiting the conversation" : "حدث خطأ عند فتح أو تقييد الرد بالمحادثة ", + "Open conversation to registered users, showing it in search results" : "فتح المحادثة للمستخدمين المسجلين، وإظهارها في نتائج البحث", + "Also open to users created with the Guests app" : "و مفتوحةٌ أيضاً للضيوف المستحدثين عبر تطبيق الضيوف Guests app", + "Open conversation" : "فتح المحادثة", + "Invalid language" : "لغة غير صالحة", + "Start time: {date}" : "بدايةً من: {date}", + "Start time has been updated" : "تم تحديث وقت البدء", + "Error occurred while updating start time" : "حدث خطأ أثناء تحديث وقت البدء ", + "Enabling the lobby will remove non-moderators from the ongoing call." : "سيؤدي تمكين صالة الانتظار إلى إزالة الجميع باستثناء المشرفين من المكالمة الجارية.", + "Enable lobby, restricting the conversation to moderators" : "تمكين صالة الانتظار، و قصر المحادثة على المشرفين", + "Meeting start time" : "وقت بدء الإجتماع ", + "Start time (optional)" : "بداية الوقت (اختياري)", + "Import email participants" : "استيراد المشاركين في البريد الإلكتروني", + "You can import a list of email participants from a CSV file." : "يمكنك استيراد قائمة المشاركين في البريد الإلكتروني من ملف CSV.", + "Poll drafts" : "مسودات الاستبيان", + "Browse poll drafts" : "استعراض مسودات الاستبيان", + "Error occurred when locking the conversation" : "حدث خطأ أثناء قفل المحادثة ", + "Error occurred when unlocking the conversation" : "حدث خطأ أثناء إزالة قفل المحادثة ", + "Lock conversation" : "قفل المحادثة", + "This will also terminate the ongoing call." : "سيؤدي هذا أيضًا إلى إنهاء المكالمة الجارية.", + "Lock the conversation to prevent anyone to post messages or start calls" : "قفل المحادثة لمنع أي شخص من نشر الرسائل أو بدء المكالمات", + "Edit" : "تعديل", + "More information" : "المزيد من المعلومات", + "Delete" : "حذف ", + "Add new bridged channel to current conversation" : "إضافة قناة وصل جديدة للمحادثة الحالية ", + "unknown state" : "حالة غير معروفة", + "running" : "فعال", + "not running, check Matterbridge log" : "لا يعمل، تحقق من سجل Matterbridge", + "not running" : "غير فعال", + "Bridge saved" : "تم الحفظ ", + "You can bridge channels from various instant messaging systems with Matterbridge." : "يمكنك ربط القنوات من مختلف أنظمة المراسلة الفورية باستخدام Matterbridge.", + "More info on Matterbridge" : "مزيد من المعلومات حول Matterbridge.", + "Messaging systems" : "نظم التراسل", + "Enable bridge" : "غير متاح ", + "Show Matterbridge log" : "إظهار سجل Matterbridge", + "Log content" : "محتوى سجل الأحداث", + "Only moderators are allowed to mention @all" : "فقط المشرفون يحق لهم الإشارة إلى الجميع @all", + "All participants are allowed to mention @all" : "جميع المشاركين مسموح لهم بالإشارة إلى الجميع @all", + "Participants are now allowed to mention @all." : "المشاركون غير مسموح لهم بالإشارة إلى الجميع @all", + "Mentioning @all has been limited to moderators." : "صلاحية الإشارة إلى الجميع @all مقتصرة فقط على المشرفين.", + "Allow participants to mention @all" : "السماح للمشاركين بالإشارة إلى الجميع @all", + "Mention permissions" : "صلاحية الإشارة لآخرين", + "Notifications" : "التنبيهات", + "Notify about calls in this conversation" : "الإخطار حول المكالمات فى هذه المحادثة", + "Important conversation" : "محادثة مهمة", + "Recording consent is required for calls in this conversation" : "الإذن بالتسجيل مطلوبٌ لكل المكالمات في هذه المحادثة", + "Recording consent is not required for calls in this conversation" : "الإذن بالتسجيل ليس مطلوباً لكل المكالمات", + "Recording consent requirement was updated" : "تم تحديث متطلبات الإذن بالتسجيل", + "Error occurred while updating recording consent" : "حدث خطأ أثناء تحديث الإذن بالتسجيل", + "Recording Consent" : "الإذن بالتسجيل ", + "Recording consent cannot be changed once a call or breakout session has started." : "لا يمكن تغيير الموافقة على التسجيل بعد بدء المكالمة أو الجلسة الجانبية.", + "Require recording consent before joining call in this conversation" : "أطلُب الإذن بالتسجيل قبل الانضمام لهذه المحادثة", + "Recording consent is required for all calls" : "الإذن بالتسجيل مطلوبٌ لكل المكالمات", + "SIP dial-in is now possible without PIN requirement" : "أصبح الاتصال عبر SIP ممكنًا الآن بدون الحاجة إلى رقم التعريف الشخصي", + "SIP dial-in is now enabled" : "تم تمكين اتصال SIP الآن", + "SIP dial-in is now disabled" : "تم تعطيل اتصال SIP الآن", + "Error occurred when enabling SIP dial-in" : "حدث خطأ أثناء تمكين اتصال SIP", + "Error occurred when disabling SIP dial-in" : "حدث خطأ أثناء تعطيل اتصال SIP", + "Phone and SIP dial-in" : "الاتصال الهاتفي dial-in، و عبر الإنترنت SIP", + "Enable phone and SIP dial-in" : "تمكين الاتصال الهاتفي dial-in، و عبر الإنترنت SIP", + "Allow to dial-in without a PIN" : "السماح بالاتصال بدون رقم التعريف الشخصي PIN", + "Join" : "إن", + "Error while creating the conversation" : "حدث خطأ اثناء نسخ رابط المحادثة", + "Create a new conversation" : "إنشاء محادثة جديدة", + "Join open conversations" : "الانضمام إلى محادثات جارية", + "Call a phone number" : "اتَّصِل برقم هاتف", + "Unread mentions" : "إشارات غير مقروءة", + "Create conversation" : "انشاء محادثة", + "Enter your name" : "أدخِل اسمك", + "Submit name and join" : "أرسِل الاسم و انضَمّ", + "Do you already have an account?" : "هل لديك حساب سلفاً؟", + "Log in" : "تسجيل الدخول", + "Error while verifying uploaded file" : "خطأ أثناء التحقق من الملف المرفوع", + "Uploaded file is verified" : "تمّ التحقق من الملف المرفوع", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "تنسيق المحتوى عبارة عن قيم مفصولة بفاصلة (CSV) :
- سطر الترويسة لازم ويجب أن يكون مُطابقاً الاسم، \"الإيميل\" أو فقط \"الإيميل\"\"
- إدخالية واحدة فقط لكل سطر (مثل: \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "تمّت إضافة المشاركين بنجاحٍ", + "Error while adding participants" : "خطأ أثناء إضافة المشاركين", + "Import a file" : "إستيراد ملف", + "Browse" : "تصفُّح", + "Verifying uploaded file …" : "التحقُّق من الملفات المرفوعة جارٍ ...", + "This might take a moment" : "يمكن أن يستغرق هذا لحظات ...", + "Send invitations" : "إرسال دعوات", + "_%n invalid email_::_%n invalid emails_" : ["%n إيميل غير صحيح","%n إيميل غير صحيح","%n إيميل غير صحيح","%n إيميلات غير صحيحة","%n إيميل غير صحيح","%n إيميل غير صحيح"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر","%n إيميلات سبق استيرادها أو هي مكررة","%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوات يمكن إرسالها","%n دعوة يمكن إرسالها"], + "An error occurred while calling a phone number" : "حدث خطأ أثناء الاتصال برقم هاتف", + "Phone number could not be called: {error}" : "تعذّر طلب الاتصال برقم الهاتف: {error}", + "Phone number could not be called" : "تعذّر الاتصال برقم الهاتف", + "Search participants or phone numbers" : "البحث عن مشاركين أو أرقام هواتف", + "Creating the conversation …" : "إنشاء محادثة ...", + "Mark as read" : "تحديد كمقروء ", + "Mark as unread" : "تحديد كغير مقروء ", + "Remove from favorites" : "إزالتها مِن المفضلة", + "Add to favorites" : "أضفه إلى المفضلة", + "Unarchive conversation" : "استرجاع المحادثة من الأرشيف", + "You need to promote a new moderator before you can leave the conversation." : "يجب عليك ترقية مشرف لاحد المشاركين قبل مغادرة المحادثة.", + "Conversation actions" : "إجراءات المحادثة ", + "Notify about calls" : "إشعار بالمكالمات", + "Pending invitations" : "دعوات معلقة", + "From {user} at {remoteServer}" : "من {user} على الخادم {remoteServer}", + "Decline invitation" : "رفض الدعوة", + "Accept invitation" : "قبول الدعوة", + "No pending invitations" : "لا توجد دعوات معلقة", + "Home" : "الرئيسية", + "Unread" : "غير مقروء", + "Alphabetically" : "أبجديا", + "No matches found" : "لم يٌمكن إيجاد أي تطابقات", + "No conversations found" : "لم يتم العثور على المحادثات ", + "You have no archived conversations." : "ليس لديك أي محادثات مؤرشفة.", + "You have no unread mentions." : "لا توجد لديك أي إشارات غير مقرؤة.", + "You have no unread messages." : "لا توجد لديك أي رسائل غير مقرؤة.", + "An error occurred while performing the search" : "حدث خطأ اثناء البحث", + "Conversation list" : "قائمة المحادثة ", + "Unread messages" : "رسائل غير مقروءة", + "Clear filters" : "إزالة التصفية", + "New personal note" : "ملاحظة شخصية جديدة", + "Back to conversations" : "عودة إلى المحادثات", + "Archived conversations" : "المحادثات المؤرشفة", + "Clear filter" : "إزالة التصفية", + "App settings" : "إعدادات التطبيق", + "Users" : "المستخدمين:", + "Groups" : "المجموعات", + "Teams" : "الفرق", + "Federated users" : "مستخدِمون من السحابة الموحدة", + "New private conversation" : "محادثة جديدة على الخاص", + "Other sources" : "مصادر آخرى", + "Open conversations" : "فتح المحادثات ", + "No search results" : "لا توجد نتائج", + "Users, groups and teams" : "المستخدمين، والمجموعات، والفرق", + "Users and groups" : "الاعضاء والمجموعات", + "Users and teams" : "المستخدمين و الفرق", + "Groups and teams" : "المجموعات والفرق", + "New group conversation" : "محادثة جماعية جديدة", + "The meeting will start soon" : "هذا الاجتماع سيبدأ قريباً", + "This meeting is scheduled for {startTime}" : "تمت جدولة هذا الاجتماع في {startTime}", + "You are currently waiting in the lobby" : "أنت حاليا في انتظار الاستقبال", + "Select microphone" : "اختر مايك", + "No microphone available" : "لا يوجد مايكرفون متاح", + "Select speaker" : "حدِّد المُتحَدِّث", + "No speaker available" : "لايوجد أيّ مُتحَدِّث", + "Select camera" : "اختر كاميرا", + "No camera available" : "لا توجد كاميرا متاحة", + "Select a device" : "إختَر جهازاً", + "Playing …" : "قيد التشغيل ...", + "Test speakers" : "اختبار مكبرات الصوت", + "Test" : "اختبار", + "Devices" : "الأجهزة", + "Backgrounds" : "الخلفيّات", + "No audio" : "بدون صوت", + "No camera" : "بدون كاميرا", + "Display video as you will see it (mirrored)" : "عرض الفيديو كما ستراه أنت (معكوساً)", + "Display video as others will see it" : "عرض الفيديو كما سيراه الآخرون", + "Calls are not supported in your browser" : "المكالمات غير مدعومة في متصفحك", + "Access to microphone is only possible with HTTPS" : "الوصول إلى المايكرفون مسموح فقط في HTTPS", + "Access to microphone was denied" : "تم رفض الوصول للمايكرفون", + "Error while accessing microphone" : "حدث خطأ اثناء الوصول إلى المايكرفون", + "Access to camera is only possible with HTTPS" : "الوصول للكاميرا مسموح فقط في HTTPS", + "The call is being recorded." : "يتم تسجيل المكالمة.", + "The call might be recorded." : "المكالمة يُمكن أن يتم تسجيلها.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "يمكن أن يشمل التسجيل صوتك، و مقاطع الفيديو من الكاميرات، و شاشات مُشارَكة. إذنُك مطلوبٌ قبل الانضمام إلى المكالمة.", + "Give consent to the recording of this call" : "إمنَحِ الإذن بتسجيل هذه المكالمة", + "Start recording immediately with the call" : "إبدأ التسجيل فور بدء المكالمة", + "Apply settings" : "طبِّق الإعدادات", + "Select virtual office background" : "اختر الخلفية الافتراضية للمكتب", + "Select virtual home background" : "اختر الخلفية الافتراضية للمنزل", + "Select virtual abstract background" : "اختر الخلفية الافتراضية للملخص", + "Select virtual beach background" : "اختر الخلفية الافتراضية للشاطئ", + "Select virtual park background" : "اختر الخلفية الافتراضية للمنتزه", + "Select virtual theater background" : "اختر الخلفية الافتراضية للمسرح", + "Select virtual library background" : "اختر الخلفية الافتراضية للمكتبة", + "Select virtual space station background" : "اختر الخلفية الافتراضية لمساحة محطة المستخدم", + "Error while uploading the file" : "خطأ أثناء رفع الملف", + "Select a file" : "إختَر ملفّاً", + "Invalid path selected" : "تم تحديد مسار غير صحيح", + "Select virtual background from file {fileName}" : "اختر الخلفية الافتراضية من الملف {fileName}", + "Blur" : "تضبيب", + "Upload" : "تحميل", + "Files" : "الملفات", + "(editing)" : "(تعديل)", + "(edited)" : "(معدّلة)", + "The message has expired or has been deleted" : "الرسالة انتهت صلاحيتها أو سبق حذفها", + "Cancel quote" : "إلغاء التعليق", + "24 hours" : "24 ساعة", + "7 days" : "7 أيام", + "Clear reminder – {timeLocale}" : "إمحُ التذكير – {timeLocale}", + "Edited by {actor}" : "تمّ تحريرها من قِبَل {actor}", + "Message text copied to clipboard" : "تمّ نسخ الرسالة النصّية إلى الحافظة", + "Message text could not be copied" : "تعذّر نسخ الرسالة النصّية إلى الحافظة", + "Message forwarded to \"Note to self\"" : "الرسالة أُعِيدَ توجيهها إلى \"ملاحظة لنفسي\"", + "Error while forwarding message to \"Note to self\"" : "حدث خطأ أثناء إعادة توجيه الرسالة إلى \"ملاحظة لنفسي\"", + "A reminder was successfully removed" : "تمّ بنجاح حذف التذكير", + "Error occurred when removing a reminder" : "حدث خطأ أثناء حذف التذكير", + "A reminder was successfully set at {datetime}" : "تمّ بنجاح تعيين التذكير إلى {datetime}", + "Error occurred when creating a reminder" : "حدث خطأ أثناء إنشاء التذكير", + "Add a reaction to this message" : "إضافة تفاعل على هذه الرسالة", + "Reply" : "رد", + "More actions" : "إجراءات إضافية", + "Set reminder" : "ضبط التذكير", + "Reply privately" : "الرد على الخاص", + "Edit message" : "تحرير رسالة", + "Copy message" : "نسخ الرسالة", + "Copy message link" : "نسخ رابط الرسالة ", + "Go to file" : "الذهاب إلى ملف", + "Download file" : "تنزيل ملف", + "Forward message" : "رسالة معاد توجيهها", + "Translate" : "ترجم", + "Set custom reminder" : "تعيين تذكير مخصص", + "Close reactions menu" : "إغلاق قائمة التفاعل", + "React with {emoji}" : "تفاعل باستخدام {emoji}", + "React with another emoji" : "تفاعل مع رمز تعبيري آخر", + "Choose a conversation to forward the selected message." : "اختر محادثة لإعادة توجيه الرسالة المحددة إليها.", + "Error while forwarding message" : "خطأ أثناء إعادة توجيه الرسالة", + "The message has been forwarded to {selectedConversationName}" : "تمت إعادة توجيه الرسالة إلى {selectedConversationName}", + "Dismiss" : "الغاء", + "Go to conversation" : "ذهاب إلى المحادثة", + "Detect language" : "إكتشف اللغة", + "The message could not be translated" : "لا يمكن ترجمة الرسالة", + "Translation copied to clipboard" : "تمّ نسخ الترجمة إلى الحافظة", + "Translation could not be copied" : "تعذّر نسخ الترجمة", + "Translate message" : "ترجِم الرسالة", + "Source language to translate from" : "اللغة الأصلية التي ستتم الترجمة منها", + "Translate from" : "ترجِم من", + "Target language to translate into" : "اللغة الهدف التي ستتم الترجمة إليها", + "Translate to" : "ترجِم إلى", + "Translating" : "يترجم", + "Copy translated text" : "نسخ النص المترجم", + "Send now" : "أرسِل الآن", + "Message read by everyone who shares their reading status" : "تمت قراءة الرسالة من قبل كل من يشاركهم الحالة ", + "Message sent" : "تم إرسال الرسالة ", + "Sent without notification" : "تمّ الإرسال بدون إشعار", + "Deleting message" : "حذف الرسالة", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "تم حذف الرسالة بنجاح، ولكن تم تكوين بُريْمِج bot أو جسر Matterbridge و لربما تمّ توزيع الرسالة بالفعل على خدمات أخرى", + "Message deleted successfully" : "تم مسح الرسالة بنجاح", + "Message could not be deleted because it is too old" : "تعذر مسح الرسالة لإنها قديمة جدًا", + "Only normal chat messages can be deleted" : "يمكن حذف رسائل الدردشة العادية فقط", + "An error occurred while deleting the message" : "حدث خطأ أثناء حذف الرسالة", + "Your browser does not support playing audio files" : "متصفحك لا يدعم تشغيل ملفات الصوت", + "Contact" : "التواصل", + "{stack} in {board}" : "{stack} في {board}", + "Deck Card" : "بطاقة Deck", + "Remove {fileName}" : "إزالة {fileName}", + "Open this location in OpenStreetMap" : "افتح هذا الموقع في تطبيق OpenStreetMap", + "Sending message" : "إرسال الرسالة ", + "Failed to send the message. Click to try again" : "فشل في إرسال الرسالة، انقر للمحاولة مجددًا ", + "Not enough free space to upload file" : "لا يوجد مساحة تخزينية كافية لرفع الملف ", + "You cannot send messages to this conversation at the moment" : "لا يمكنك إرسال الرسائل لهذه المحادثة حاليًا ", + "Could not update the message" : "تعذّر تحديث الرسالة", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيار","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات"], + "_%n vote_::_%n votes_" : ["%n أصوات","%n صوت","%n أصوات","%n أصوات","%n أصوات","%n أصوات"], + "Edit poll draft" : "تحرير مُسوَّدة التصويت", + "Delete poll draft" : "حذف مسودة الاستبيان", + "Open poll" : "فتح استطلاع", + "See results" : "رؤية النتائج", + "Reactions" : "التفاعلات", + "No permission to post reactions in this conversation" : "لا يوجد إذن لنشر التفاعلات في هذه المحادثة", + "and {participant}" : "و {participant}", + "_and %n other participant_::_and %n other participants_" : ["و %n مشارك آخر","و %n مشارك آخر","و %n مُشاركين آخرين","و %n مُشاركين آخرين","و %n مشاركين آخرين","و %n مشاركين آخرين"], + "Show all reactions" : "أظهِر جميع التفاعلات", + "Add more reactions" : "إضافة تفاعلاتٍ أخرى", + "Show or collapse system messages" : "إظهار أو طي رسائل النظام", + "No messages" : "لاتوجد رسائل", + "All messages have expired or have been deleted." : "كل الرسائل انتهت صلاحيتها أو تمّ حذفها", + "Unpin" : "فك التثبيت", + "Cancel search" : "إلغاء البحث", + "Add a phone number" : "إضافة رقم هاتف", + "Error: A password is required to create the conversation." : "خطأ: كلمة المرور لازمة لإنشاء المحادثة.", + "All set, the conversation \"{conversationName}\" was created." : "تمّ إنشاء المحادثة \"{conversationName}\" بنجاح.", + "Create a new group conversation" : "انشاء محادثة جماعية جديدة", + "Add participants" : "اضافة مشارك جديد", + "Maximum length exceeded ({maxlength} characters)" : "تمّ تجاوز الحدّ الأقصى ({maxlength} حرفاً)", + "Conversation visibility" : "رؤية المحادثة", + "Allow guests to join via link" : "السماح بالضيوف بالانضمام عن طريق الرابط", + "Enter password" : "أدخل كلمة المرور", + "This conversation has been locked" : "هذه المحادثة مغلقة", + "No permission to post messages in this conversation" : "ليس لديك صلاحية لنشر رسائل في هذه المحادثة", + "Joining conversation …" : "جارٍ الانضمام للمحادثة ", + "Write a message without notification" : "أكتُب رسالة بدون إشعارٍ", + "Send message silently" : "إرسال رسالة صامتة", + "Send message" : "أرسل رسالة", + "Send without notification" : "أرسِل بدون إشعار", + "The participant will not be notified about new messages" : "سوف لن يتم إشعار المشارك بشأن الرسائل الجديدة", + "Participants will not be notified about new messages" : "سوف لن يتم إشعار المُشاركين بشأن الرسائل الجديدة", + "The message could not be edited" : "تعذّر تحرير الرسالة", + "File to share" : "ملف للمشاركة", + "File upload is not available in this conversation" : "رفع الملفات غير متاح في هذه الدردشة", + "Add emoji" : "اضافة رمز تعبيري", + "Adding a mention will only notify users who did not read the message." : "إضافة إشارة ستؤدي إلى إشعار المستخدِمين الذين لم يسبق لهم قراءة الرسالة.", + "Send later" : "أرسِل لاحقاً", + "Cancel editing" : "إلغاء التحرير", + "{user} is out of office and might not respond." : "{user} خارج المكتب الآن، و يمكن ألّا يستجيب", + "Absence period: {startDate} - {endDate}" : "فترة الغياب: {startDate} - {endDate}", + "Replacement:" : "البديل:", + "Share from {nextcloud}" : "مشاركة من {nextcloud}", + "Share from Files" : "مشاركة من الملفات", + "Share files to the conversation" : "مشاركة ملفات في المحادثة", + "Upload from device" : "إرفع من جهاز", + "Create new poll" : "إنشاء استطلاع جديد", + "Smart picker" : "اللاقط الذكي Smart picker", + "Record voice message" : "تسجيل رسالة صوتية", + "End recording and send" : "إنهاء التسجيل والإرسال", + "Dismiss recording" : "رفض التسجيل", + "Access to the microphone was denied" : "تم رفض الوصول إلى الميكروفون", + "Microphone either not available or disabled in settings" : "الميكروفون إما غير متاح أو تم تعطيله من الإعدادات", + "Error while recording audio" : "خطأ أثناء تسجيل الصوت", + "Generating summary of unread messages …" : "توليد ملخص للرسائل غير المقرؤة ...", + "Summary is AI generated and might contain mistakes" : "المُلخَّص يتم توليده بالذكاء الاصطناعي و يمكن أن يحتوي على أخطاء", + "Error occurred during a summary generation" : "حدث خطأ أثناء توليد المُلخَّص", + "New file" : "ملف جديد", + "Blank" : "فارغ", + "Error while creating file" : "خطأ أثناء إنشاء الملف", + "Create and share a new file" : "إنشاء ملف جديد ومشاركته", + "Name of the new file" : "اسم الملف الجديد", + "Create file" : "إنشاء ملف", + "Someone is typing …" : "شخصٌ ما يكتبُ ...", + "{user1} is typing …" : "{user1} يكتُب…", + "{user1} and {user2} are typing …" : "{user1} و {user2} يكتُبُون …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} و {user3} يكتُبُون …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2} و {user3} و%n أخرون يكتُبُون …","{user1}, {user2} و {user3} و%n آخر يكتُب …","{user1}, {user2} و {user3} و%nأخرون يكتُبُون …","{user1}, {user2} و {user3} و%n أخرون يكتُبُون …","{user1}, {user2} و {user3} و %n أخرون يكتُبُون …","{user1}, {user2} و {user3} و%n أخرون يكتُبُون …"], + "Add more files" : "اضافة المزيد من الملفات", + "Send" : "أرسل", + "In this conversation {user} can:" : "في هذه المحادثة يستطيع {user}:", + "Edit default permissions for participants in {conversationName}" : "تحرير الأذونات الافتراضية للمشاركين في {conversationName}", + "Start a call" : "بدء المكالمة", + "Skip the lobby" : "تخطي انتظار القبول", + "Can post messages and reactions" : "يمكن نشر الرسائل والتفاعلات", + "Enable the microphone" : "تفعيل الميكروفون", + "Enable the camera" : "تمكين الكاميرا", + "Share the screen" : "شارك الشاشة", + "Update permissions" : "تحديث الأذونات", + "Updating permissions" : "الرجاء الاتصال بالمسؤول الخاص بك.", + "No poll drafts" : "لا توجد أي مسودات للاستبيان", + "There is no poll drafts yet saved for this conversation" : "لا توجد أي مسودات محفوظة للاستبيان في هذه المحادثة", + "Create poll in {name}" : "إنشاء تصويت في {name}", + "Create poll" : "صَوّت، رجاءً", + "Error while importing poll" : "خطأ أثناء استيراد الاستبيان", + "Question" : "سؤال", + "Ask a question" : "طرح سؤال", + "Import draft from file" : "إستيراد مسودة من ملف", + "Answers" : "الإجابات", + "Answer {option}" : "إجابة {option}", + "Delete poll option" : "حذِف خيار التصويت", + "Add answer" : "إضافة إجابة", + "Settings" : "الإعدادات", + "Anonymous poll" : "استبيان مع إخفاء هوية المصوتين", + "Multiple answers" : "إجابات متعددة", + "Save as draft" : "إحفَظ كمسودة", + "Export draft to file" : "تصدير مسودة إلى ملف", + "You voted for this option" : "أنت صوَّتَّ على هذا الخيار", + "End poll" : "نهاية التصويت", + "Change your vote" : "تغيير صوتك", + "Results" : "النتائج ", + "Voted participants" : "المُشارِكون المُصَوِّتُون", + "Send a message to \"{roomName}\"" : "إرسال رسالة إلى \"{roomName}\"", + "Hide list of participants" : "إخفاء قائمة المشاركين", + "Show list of participants" : "عرض قائمة المشاركين", + "Assistance requested in {roomName}" : "تمّ طلب مساعدة في {roomName}", + "The message was sent to \"{roomName}\"" : "تم إرسال الرسالة إلى \"{roomName}\"", + "Dismiss request for assistance" : "رفض طلب المساعدة", + "Send message to room" : "إرسال رسالة إلى الغرفة", + "Back to main room" : "عودة إلى الغرفة الرئيسية", + "Back to your room" : "الرجوع إلى غرفتك", + "Message all rooms" : "أدِر كل الغرف", + "Start session" : "إبدَإِ الجلسة", + "Start a call before you start a breakout room session" : "إبدأ مكالمة قبل بدأ جلسةً الغرفة الجانبية", + "Stop session" : "أوقِف الجلسة", + "The message was sent to all breakout rooms" : "تمّ إرسال الرسالة إلى كل الغُرف الجانبية breakout rooms", + "Send a message to all breakout rooms" : "إرسال رسالة إلى جميع الغرف الجانبية", + "Breakout rooms are not started" : "الغرف الجانبية لم تبدأ ", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : " المكالمات بدون استعمال خلفية للأداء العالي تتسبب في إشكاليات في الاتصال و حمل زائد على الأجهزة. {linkstart}تعلَّم المزيد {linkend}", + "Talk setup incomplete" : "إعدادات \"المحادثة\" Talk لم تكتمل", + "Disable lobby" : "تعطيل ساحة الإنتظار", + "Settings for participant \"{user}\"" : "إعدادات المشارك \"{المستخدم}\"", + "Participant \"{user}\"" : "المشارك \"{user}\"", + "moderator" : "مشرف", + "bot" : "بوت", + "guest" : "ضيف", + "Ringing …" : "يَرِنُّ الآن ...", + "Call rejected" : "تمّ رفض المكالمة", + "{time} talking …" : "{time} في محادثة …", + "{time} talking time" : "{time} زمن المحادثة", + "Raised their hand" : "رفعوا أيديهم", + "Joined with video" : "انضم مع مشاركة بالفيديو", + "Joined via phone" : "انضم عبر الجوال ", + "Joined with audio" : "انضم مع مشاركة بالصوت ", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "يجب أن يكون عدد حروف النص أقل من أو يساوي {maxLength} . الطول الحالي للنص هو {charactersCount} حرفاً.", + "Remove group and members" : "حذف المجموعة والأعضاء ", + "Remove team and members" : "إزالة الفريق و الأعضاء", + "Remove participant" : "حذف مشارك", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "هل تريد حقًا إزالة المجموعة \"{displayName}\" وأعضائها من هذه المحادثة؟", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "هل تريد حقًا إزالة الفريق \"{displayName}\" وأعضائه من هذه المحادثة؟", + "Do you really want to remove {displayName} from this conversation?" : "هل تريد حقًا إزالة {displayName} من هذه المحادثة؟", + "Notification was sent to {displayName}" : "تمّ إرسال الإخطار إلى {displayName}", + "Could not send notification to {displayName}" : "تعذر إرسال إشعار إلى {displayName}", + "Permissions granted to {displayName}" : "تم منح الأذونات لـ {displayName}", + "Could not modify permissions for {displayName}" : "تعذر تعديل الأذونات لـ {displayName}", + "Permissions removed for {displayName}" : "تمت إزالة الأذونات لـ {displayName}", + "Permissions set to default for {displayName}" : "تم تعيين الأذونات على الإعداد الافتراضي لـ {displayName}", + "Phone number could not be hung up" : "رقم الهاتف لا يمكن قفله", + "Phone number could not be put on hold" : "رقم الهاتف لا يمكن تعليقه", + "Phone number could not be muted" : "رقم الهاتف لا يمكن كتمه", + "Phone number could not be unmuted" : "رقم الهاتف لا يمكن إلغاء كتمه", + "DTMF message could not be sent" : "تعذّر إرسال رسالة DTMF - النغمة المزدوجة متعددة الترددات-", + "Phone number copied to clipboard" : "تمّ نسخ رقم الهاتف إلى الحافظة", + "Phone number could not be copied" : "تعذّر نسخ رقم الهاتف إلى الحافظة", + "in the lobby" : "في صالة الانتظار", + "Dial out phone" : "أطلُب اتصال هاتفي", + "Hang up phone" : "علِّق الاتصال الهاتفي", + "Move back to lobby" : "عودة إلى صالة الانتظار", + "Move to conversation" : "إنتقال إلى المحادثة", + "Dial-in PIN" : "رمز الإتصال الهاتفي ", + "Demote from moderator" : "تخفيض رتبة مشرف", + "Promote to moderator" : "ترقية لـ مشرف", + "Resend invitation" : "إعادة إرسال الدعوة", + "Send call notification" : "إرسال إشعار المكالمة", + "Dial out phone number" : "أطلُب الاتصال برقم هاتفٍ", + "Resume call for phone number" : "استئناف المكالمة مع رقم هاتف", + "Put phone number on hold" : "ضع رقم هاتف في وضع الانتظار", + "Unmute phone number" : "إلغاء كتم صوت رقم هاتف", + "Mute phone number" : "كتم صوت رقم هاتف", + "Copy phone number" : "نسخ رقم هاتف", + "Reset custom permissions" : "إعادة إعداد الأذونات المخصصة", + "Grant all permissions" : "منح كافة الأذونات", + "Remove all permissions" : "إزالة كافة الأذونات", + "Also ban from this conversation" : "محظور أيضاً في هذه المحادثة", + "Internal note (reason to ban)" : "ملاحظة داخلية (سبب الحظر)", + "Remove" : "حذف", + "Permissions modified for {displayName}" : "تم تعديل الأذونات لـ {displayName}", + "Add users, groups or teams" : "إضافة مستخدمين، و مجموعات، وفرق", + "Add users or groups" : "اضافة اعضاء او مجموعات", + "Add users or teams" : "إضافة مستخدمين أو فرق", + "Add users" : "اضافة اعضاء", + "Add groups or teams" : "إضافة مجموعات وفرق", + "Add groups" : "اضافة مجموعات", + "Add teams" : "إضافة فرق", + "Add other sources" : "اضافة مصدر آخر", + "Add emails" : "اضافة عبر البريد", + "Integrations" : "مُكاملات", + "Add federated users" : "إضافة المستخدمين الخارجيين", + "Searching …" : "جاري البحث…", + "Search for more users" : "البحث عن مزيد من الاعضاء", + "You can search or add participants via name, email, or Federated Cloud ID" : "بمكنك البحث عن او اضافة مشاركين بدلالة الاسم أو الايميل أو معرف السحابة الموحدة", + "Search or add participants" : "بحث او اضافة مشاركين", + "Invitation was sent to {actorId}" : "تمّ إرسال الدعوة إلى {actId}", + "An error occurred while adding the participants" : "حدث خطأ اثناء إضافة المشاركين", + "Participants" : "المشاركون", + "Participants ({count})" : "المشاركون ({count})", + "Open chat" : "دردشة مفتوحة", + "You have new unread messages in the chat." : "لديك رسائل جديدة غير مقروءة فى الدردشة.", + "You have been mentioned in the chat." : "أشار إليك أحدهم في الدردشة", + "Search messages" : "البحث في الرسائل", + "Chat" : "الدردشة", + "Details" : "التفاصيل", + "Shared items" : "عناصر مُشارَكة", + "Search in {name}" : "البحث في {name}", + "Search messages …" : "البحث في الرسائل ...", + "Search options" : "خيارات البحث", + "From User" : "من مُستخدِم", + "Since" : "منذ", + "Until" : "حتى", + "No results found" : "لا توجد أي نتائج", + "Load more results" : "تحميل المزيد من النتائج", + "Projects" : "المشاريع", + "No shared items" : "لا توجد عناصر مشاركة", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "الربط لمحادثة", + "No open conversations found" : "لا توجد أي محادثات مفتوحة", + "Either there are no open conversations or you joined all of them." : "إمّا أنه لا توجد أيّ محادثات جارية أو أنك مُنضَمٌّ سلفاً إليها جميعاَ", + "Check spelling or use complete words." : "تحقَّق من الهجاء أو استخدام كلماتٍ كاملة", + "Search conversations or users" : "البحث عن المحادثات او الاعضاء", + "Select conversation" : "اختر محادثة", + "Number length is not valid" : "عدد خانات الرقم غير صحيح", + "Region code is not valid" : "كود المنطقة أو الدولة غير صحيح", + "Number length is too short" : "عدد خانات الرقم أقل مما يُفترَض", + "Number length is too long" : "عدد خانات الرقم أكثر مما يُفتَرض", + "Number is not valid" : "الرقم غير صحيح", + "Phone numbers" : "أرقام الهواتف", + "Display name: {name}" : "اسم العرض: {name}", + "Edit display name" : "عَدِّل اسم العرض", + "Save name" : "حفظ الاسم", + "Error while setting personal setting" : "خطأ أثناء إعداد الاعدادات الشخصية", + "Error while saving sounds setting" : "حدث خطأ أثناء حفظ إعدادات الأصوات ", + "Play sounds when participants join or leave a call" : "تشغيل الأصوات عندما انضمام أو مغادرة المشاركون المكالمة", + "Notification settings" : "إعدادات الإشعارات", + "Default language" : "اللغة الافتراضية", + "Select location for attachments" : "اختر مكان المرفقات", + "Error while setting attachment folder" : "خطأ اثناء تحديد مجلد المرفقات", + "Error while setting read status privacy" : "حدث خطأ عند تعيين خصوصية قراءة الرسائل ", + "Error while setting typing status privacy" : "خطأ أثناء تعيين خصوصية حالة الكتابة", + "Error while setting default media state" : "حدث خطأ أثناء حفظ حالة الوسائط ", + "Privacy" : "الخصوصية", + "Attachments folder" : "مجلد المرفقات", + "Toggle full screen" : "تبديل إلى ملء الشاشة", + "Search" : "البحث", + "Focus the chat input" : "تركيز على إدخال الدردشة", + "Unfocus the chat input to use shortcuts" : "الغاء تركيز على إدخال الدردشة", + "Edit your last message" : "قّم بتحرير رسالتك الأخيرة", + "Shortcuts while in a call" : "اختصارات اثناء مكالمة", + "Camera on and off" : "تشغيل وإيقاف تشغيل الكاميرا ", + "Microphone on and off" : "تفعيل او تعطيل المايك", + "Raise or lower hand" : "رفع أو خفض اليد ", + "Push to talk or push to mute" : "اضغط للتحدث او اضغط لكتم الصوت", + "Zoom-in / zoom-out a screen share" : "تكبير/تصغير شاشة مُشارَكة", + "Mouse wheel" : "عجلة الفارة", + "Start call silently" : "بدء اتصال صامت", + "Start call" : "ابدء مكالمة", + "End call" : "إقطَع المكالمة", + "This call has just ended" : "المكالمة انتهت للتّو", + "You will be able to join the call only after a moderator starts it." : "لن تتمكن من الانضمام إلى المكالمة إلا بعد أن يبدأها المشرف.", + "End call for everyone" : "إنهاء المكالمة للجميع", + "Starting the recording" : "بدء التسجيل", + "Recording" : "تسجيل", + "The call has been running for one hour." : "المكالمة ما زالت مستمرة منذ حوالي الساعة.", + "Cancel recording start" : "إلغاء مباشرة التسجيل", + "Stop recording" : "إيقاف التسجيل", + "Send a reaction" : "إرسال تفاعل", + "React with {reaction}" : "تَفَاعَل مع {reaction}", + "All tasks done!" : "تمّ إنجاز جميع المهام!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} من %n مهمة","{done} من %n مهمة","{done} من %n مهمة","{done} من %n مهام","{done} من %n مهمة","{done} من %n مهمة"], + "_%n participant in call_::_%n participants in call_" : ["%n مشاركين بالمكالمة","%n مشارك بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة"], + "You are not allowed to enable screensharing" : "غير مسموح لك بتمكين مشاركة الشاشة", + "No screensharing" : "عدم مشاركة الشاشة", + "Screensharing options" : "خيارات مشاركة الشاشة", + "Enable screensharing" : "تفعيل مشاركة الشاشة", + "Bad sent video and screen quality." : "الفيديو المرسل وجودة الشاشة ضعيفة.", + "Bad sent screen quality." : "جودة الشاشة المرسلة ضعيفة.", + "Bad sent video quality." : "جودة الفيديو المرسل ضعيفة.", + "Bad sent audio, video and screen quality." : "الصوت والفيديو المرسل وجودة الشاشة ضعيفة.", + "Bad sent audio and screen quality." : "الصوت المرسل وجودة الشاشة ضعيفة.", + "Bad sent audio and video quality." : "الصوت المرسل وجودة الفيديو ضعيفة.", + "Bad sent audio quality." : "جودة الصوت المرسل ضعيفة.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "اتصالك بالإنترنت ضعيف وقد لا يتمكن المشاركون الآخرون من رؤية شاشتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك أثناء قيامك بمشاركة الشاشة.", + "Disable background blur" : "تعطيل طمس وتشويش الخلفية", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "اتصالك بالإنترنت ضعيف وقد لا يتمكن المشاركون الآخرون من رؤية شاشتك. لتحسين الوضع، حاول تعطيل الفيديو الخاص بك أثناء مشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهور شاشتك للآخرين.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهورك للآخرين.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "اتصالك بالإنترنت ضعيف بشكل قد لا يتمكن معه المشاركون الآخرون من رؤيتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك أثناء قيامك بمشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهورك للآخرين وفهم المشاركين. لتحسين ذلك جرب تعطيل الفيديو في حال مشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "اتصالك بالانترنت ضعيف بشكل قد يؤثر على ظهورك للآخرين. لتحسين ذلك، جرب تعطيل مشاركة الشاشة.", + "Disable screenshare" : "تعطيل مشاركة الشاشة", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "اتصالك بالإنترنت ضعيف بشكل قد لا يتمكن المشاركون معه الآخرون من رؤيتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على فهم المشاركين وعدم ظهورك للآخرين. لتحسين ذلك جرب تعطيل الفيديو.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك فهم الآخرين.", + "Screen sharing is not supported by your browser." : "مشاركة الشاشة غير مدعوم من قبل متصفحك.", + "Screen sharing requires the page to be loaded through HTTPS." : "مشاركة الشاشة يتطلب تحميل الصفحة عن طريق HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "مشاركة الشاشة يتطلب تحميل الصفحة عن طريق HTTPS.", + "An error occurred while starting screensharing." : "حدث خطأ اثناء محاولة مشاركة الشاشة.", + "Show your screen" : "مشاركة الشاشة", + "Stop screensharing" : "التوقف عن مشاركة الشاشة", + "Mute others" : "كتم صوت الآخرين", + "Start recording" : "بدء التسجيل", + "Set up breakout rooms" : "جَهِّز الغرف الجانبية", + "Download attendance list" : "تنزيل قائمة الحضور", + "Open Calendar" : "إفتَح التقويم", + "Remove participant {name}" : "إزالة المشارك {name}", + "Keep" : "حفظ", + "Open dialpad" : "فتح لوحة طلب الاتصال الهاتفي", + "Select a region" : "اختر منطقة", + "Search …" : "البحث …", + "Message without mention" : "رسالة بدون إشارة", + "Mention myself" : "إشارة إليّ", + "Mention everyone" : "أشِر إلى الجميع", + "Select a conversation" : "إختَر مُحادثةً", + "Select a mode" : "إختَر وضعيةً", + "You do not have permissions to access this conversation." : "أنت ليس لديك الصلاحية للوصول إلى هذه المحادثة", + "Join a different conversation or start a new one." : "التحق بمحادثة أخرى أو ابدأ محادثة جديدة", + "The conversation does not exist" : "المحادثة غير موجودة", + "Join a conversation or start a new one!" : "انضم لمحادثة او ابدء محادثة جديدة!", + "Duplicate session" : "تكرار الجلسة", + "Creating and joining a conversation with \"{userid}\"" : "إنشاء و انضمام إلى محادثة مع \"{userid}\"", + "Join a conversation or start a new one" : "انضم لمحادثة او ابدء محادثة جديدة", + "Error while joining the conversation" : "حدث خطأ أثناء الانضمام إلى المحادثة", + "Nextcloud URL" : "رابط الخادم السحابي نكست كلاود", + "Nextcloud user" : "عضو نكست كلاود", + "User password" : "كلمة مرور المستخدم", + "Talk conversation" : "محادثات", + "Skip TLS verification" : "تجاهل تحقق من TLS", + "Matrix server URL" : "عنوان URL لخادم Matrix", + "User" : "المستخدم", + "Matrix channel" : "قناة Matrix", + "Mattermost server URL" : "عنوان URL لخادم Mattermost", + "Mattermost user" : "مستخدم Mattermost", + "Team name" : "اسم الفريق", + "Channel name" : "اسم القناة", + "Rocket.Chat server URL" : "عنوان URL لخادم Rocket.Chat", + "User name or email address" : "اسم المستخدم او البريد الالكتروني", + "Rocket.Chat channel" : "قناة Rocket.Chat  ", + "Zulip server URL" : "عنوان URL لخادم Zulip ", + "Bot user name" : "اسم المستخدم البوت ", + "Bot API key" : "مفتاح Bot API", + "Zulip channel" : "قناة Zulip", + "API token" : "رمز API", + "Slack channel" : "قناة سلاك Slack", + "Server ID or name" : "معرف الخادم السحابي او الاسم", + "Channel ID (prefixed with \"ID:\") or name" : "مُعرِّف القناة (مسبوقاً بـ \"ID:\") أو اسمها", + "Channel" : "قناة", + "Login" : "الدخول", + "Chat ID" : "معرف المحادثة", + "IRC server URL (e.g. chat.freenode.net:6667)" : "عنوان URL لخادم IRC (مثل chat.freenode.net:6667)", + "Nickname" : "كنية.\nلقب.", + "Connection password" : "كلمة مرور الاتصال", + "IRC channel" : "قناة IRC", + "Channel password" : "كلمة مرور القناة", + "NickServ nickname" : "اللقب لـ NickServ", + "NickServ password" : "كلمة المرور لـ NickServ", + "Use TLS" : "استخدم TLS", + "Use SASL" : "استخدم SASL", + "Tenant ID" : "معرف المستأجر", + "Client ID" : "معرف العميل", + "Team ID" : "معرف الفريق", + "Thread ID" : "معرف الموضوع", + "XMPP/Jabber server URL" : "عنوان URL لخادم XMPP/Jabber", + "MUC server URL" : "عنوان URL لخادم MUC", + "Jabber ID" : "معرف Jabber ", + "Media" : "وسائط", + "Polls" : "استطلاعات الرأي", + "Deck cards" : "البطاقات", + "Voice messages" : "الرسائل الصوتية", + "Locations" : "المواقع", + "Call recordings" : "تسجيلات المكالمات", + "Audio" : "الصوت", + "Show all media" : "عرض كل الوسائط", + "Show all files" : "أظهر جميع الملفات", + "Show all polls" : "عرض كل الاستبيانات", + "Show all deck cards" : "عرض كل رزمة البطاقات", + "Show all voice messages" : "عرض كافة الرسائل الصوتية", + "Show all locations" : "عرض كل المواقع", + "Show all call recordings" : "عرض جميع تسجيلات المكالمات", + "Show all audio" : "عرض كل الأصوات", + "Show all other" : "عرض كل الآخرين", + "Group" : "المجموعة", + "Team" : "الفريق", + "You reconnected to the call" : "تمّت إعادة توصيلك بالمكالمة", + "{actor} reconnected to the call" : "تمّت إعادة توصيل {actor} بالمكالمة", + "You added {user0} and {user1}" : "أنت قمت بإضافة {user0} و {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "An administrator added you and {user0}" : "قام مدير بإضافتك أنت و {user0}", + "{actor} added you and {user0}" : "{actor} قام بإضافتك أنت و {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مساهمين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام مدير بإضافتك أنت و {user0} و %n مشاركين آخرين"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين"], + "An administrator added {user0} and {user1}" : "قام مدير بإضافة {user0} و {user1}", + "{actor} added {user0} and {user1}" : "{actor} قام بإضافة {user0} و {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام مدير بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "You removed {user0} and {user1}" : "أنت قمت بحذف {user0} و {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشترك آخر ","أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشترك آخر","أنت قمت بحذف {user0}, {user1} و %n مشاركين آخرين"], + "An administrator removed you and {user0}" : "قام مدير بحذفك أنت و {user0}", + "{actor} removed you and {user0}" : "{actor} قام بحذفك أنت و {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["قام المشرف بحذفك أنت, و {user0} و %n مشارك آخر","قام المشرف بحذفك أنت، و {user0} و %n مشارك آخر","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام مدير بحذفك أنت, و {user0} و %n مشاركين آخرين"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["قام {actor} بحذفك أنت, و {user0} و %n مشارك آخر","قام {actor} بحذفك أنت, و {user0} و %n مشارك آخر","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و%n مشاركين آخرين"], + "An administrator removed {user0} and {user1}" : "قام مدير بحذف {user0} و {user1}", + "{actor} removed {user0} and {user1}" : "قام {actor} بحذف {user0} و {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["قام المشرف بحذف {user0}, و {user1} و %n مشارك آخر","قام المشرف بحذف {user0}, و {user1} و %n مشارك آخر","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام مدير بحذف {user0}, و {user1} و %n مشاركين آخرين"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["قام {actor} بحذف {user0}, و {user1} و %nمشارك آخر","قام {actor} بحذف {user0}, و {user1} و %n مشارك آخر","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين"], + "You and {user0} joined the call" : "لقد انضممت أنت و {user0} للمكالمة", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة"], + "{user0} and {user1} joined the call" : "لقد انضم {user0} و {user1} إلى المكالمة", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة"], + "You and {user0} left the call" : "لقد غادرت أنت و {user0} المكالمة", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["لقد غادرت أنت و {user0} و %n مشاركون آخرين المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة"], + "{user0} and {user1} left the call" : "لقد غادر {user0} و {user1} المكالمة", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة"], + "You promoted {user0} and {user1} to moderators" : "لقد قمت أنت بترقية {user0} و {user1} إلى مشرف", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين كمنسقين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "An administrator promoted you and {user0} to moderators" : "قام مدير بترقيتك أنت و {user0} إلى مشرفين", + "{actor} promoted you and {user0} to moderators" : "قام {actor} بترقيتك أنت و {user0} إلى مشرفين", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "An administrator promoted {user0} and {user1} to moderators" : "قام مدير بترقية{user0} و {user1} إلى مشرفين", + "{actor} promoted {user0} and {user1} to moderators" : "قام {actor} بترقية {user0} و {user1} إلى مشرفين", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","تقام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "You demoted {user0} and {user1} from moderators" : "لقد قمت بإلغاء ترقية {user0} و {user1} كمشرفين", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "An administrator demoted you and {user0} from moderators" : "لقد قام مدير بإلغاء ترقيتك أنت و {user0} كمشرفين", + "{actor} demoted you and {user0} from moderators" : "لقد قام {actor} بإلغاء ترقيتك أنت و {user0} كمشرفين", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "An administrator demoted {user0} and {user1} from moderators" : "لقد قام مدير بإلغاء ترقية {user0} و {user1} كمشرفين", + "{actor} demoted {user0} and {user1} from moderators" : "لقد قام {actor} بإلغاء ترقية {user0} و {user1} كمشرفين", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "You: {lastMessage}" : "أنت: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(معدّلة بواسطتك)", + "(edited by a deleted user)" : "(تمّ تحريرها من قِبَل مُستخدِم محذوف)", + "(edited by {moderator})" : "(معدّلة بواسطة {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "انضممت لمحادثة آخرى في نافذة او جهاز آخر. هذه الخاصية غير مدعومة سيتم اغلاق هذه الجلسة من قبل نكست كلاود التحدث. ماذا تريد ان تفعل؟", + "Leave this page" : "مغادرة هذه الصفحة", + "Join here" : "انضم لهذا", + "Deck card has been posted to {conversation}" : "بطاقات تمّ نشرها في {conversation}", + "An error occurred while posting deck card to conversation" : "حدث خطأ أثناء نشر كَدْسَة البطاقات إلى المحادثة", + "Post to a conversation" : "انشر في محادثة ", + "Post to conversation" : "انشر في محادثة ", + "The recording failed. Please contact your administrator." : "فشل التسجيل. الرجاء الاتصال بمسؤول النظام.", + "Location has been posted to {conversation}" : "تم نشر الموقع في {conversation}", + "An error occurred while posting location to conversation" : "حدث خطأ أثناء نشر الموقع في المحادثة", + "Share to a conversation" : "شارِك في مُحادَثة", + "Share to conversation" : "شارِك في المُحادثَة", + "In conversation" : "في المحادثة ...", + "Search in conversation: {conversation}" : "البحث في المحادثة: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "يتم تقييد طلباتك في الوقت الحالي كإجراء تحسبي للحماية من هجمات القوة الغاشمة", + "Error while clearing conversation history" : "خطأ أثناء مسح محفوظات المحادثة", + "Error occurred while allowing guests" : "حدث خطأ أثناء السماح للضيوف ", + "Error occurred while disallowing guests" : "حدث خطأ أثناء عدم السماح للضيوف ", + "Error occurred when restricting the conversation to moderator" : "حدث خطأ عندما اقتصرت المحادثة على المشرفيين فقط ", + "Error occurred when opening the conversation to everyone" : "حدث خطأ أثناء فتح المحادثة للجميع ", + "Conversation password has been saved" : "تم حفظ كلمة المرور للمحادثة ", + "Conversation password has been removed" : "حُذفت كلمة المرور للمحادثة ", + "Error occurred while saving conversation password" : "حدث خطأ أثناء حفظ كلمة السر للمحادثة ", + "Call recording is starting." : "بدء تسجيل المكالمة.", + "Call recording stopped while starting." : "تسجيل المكالمة توقف بمجرد البدء فيه", + "Call recording stopped. You will be notified once the recording is available." : "توقف تسجيل المكالمات. سيتم إخطارك بمجرد إتاحة التسجيل.", + "Conversation picture set" : "تمّ تعيين صورة المحادثة", + "Conversation picture deleted" : "تمّ حذف صورة المحادثة", + "Could not delete the conversation picture" : "تعذر حذف صورة المحادثة", + "Could not post message: {errorMessage}" : "لا يمكن نشر رسالة: {errorMessage}", + "Participant is banned successfully" : "تمّ حظر المُشارِك بنجاحٍ", + "Error while banning the participant" : "حدث خطأ أثناء حظر المُشارك", + "An error occurred while fetching the participants" : "حدث خطأ اثناء اضافة مشاركيين", + "Could not send invitation to {actorId}" : "تعذر إرسال دعوة إلى {actorId} ", + "Invitations sent" : "تم إرسال الدعوات ", + "Error occurred when sending invitations" : "حدث خطأ أثناء إرسال الدعوات ", + "Failed to join the conversation." : "تعذّر الانضمام إلى المحادثة.", + "An error occurred while creating breakout rooms" : "حدث خطأ أثناء إنشاء الغرف الجانبية", + "An error occurred while re-ordering the attendees" : "حدث خطأٌ أثناء إعادة ترتيب الحاضرين", + "An error occurred while deleting breakout rooms" : "حدث خطأ أثناء حذف الغرف الجانبية", + "An error occurred while starting breakout rooms" : "حدث خطأ أثناء بدء الغرف الجانبية", + "An error occurred while stopping breakout rooms" : "حدث خطأ أثناء إيقاف الغرف الجانبية", + "An error occurred while sending a message to the breakout rooms" : "حدث خطأ أثناء إرسال رسالة إلى الغرف الجانبية", + "An error occurred while requesting assistance" : "حدث خطأٌ أثناء طلب المساعدة", + "An error occurred while resetting the request for assistance" : "حدث خطأٌ أثناء إعادة تعيين طلب المساعدة", + "An error occurred while joining breakout room" : "حدث خطأٌ أثناء الانضمام إلى غرفة جانبية", + "An error occurred while accepting an invitation" : "حدث خطأ أثناء قبول الدعوة", + "An error occurred while rejecting an invitation" : "حدث خطأ أثناء رفض الدعوة", + "{guest} (guest)" : "{guest} (ضيف)", + "Poll draft has been saved" : "تمّ حفظ مسودة الاستبيان", + "An error occurred while saving the draft" : "حدث خطأ أثناء حفظ المسودة", + "An error occurred while submitting your vote" : "حدث خطأ أثناء تقديم تصويتك", + "An error occurred while ending the poll" : "حدث خطأ أثناء إنهاء الاستطلاع", + "An error occurred while deleting the poll draft" : "حدث خطأ أثناء حذف مسودة الاستطلاع", + "Poll \"{name}\" was created by {user}. Click to vote" : "الاستفتاء \"{name}\" أنشأه {user}. أنقُر للتصويت", + "Failed to add reaction" : "فشل في إضافة تفاعل", + "Failed to remove reaction" : "فشل في إزالة تفاعل", + "Error while uploading file \"{fileName}\"" : "حدث خطأ أثناء رفع الملف \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "لا يوجد مساحة تخزينية كافية لرفع الملف \"{fileName}\"", + "You are not allowed to share files" : "غير مسموح لك بمشاركة الملفات ", + "Error while sharing file" : "خطأ اثناء مشاركة ملف", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "تستخدم متصفح غير مدعوم بالكامل من قبل نكست كلاود التحدث. استخدم اخر اصدار من فايرفوكس، مايكروسوفت ادج، قوقل كروم أو ابل سفاري.", + "_In %n hour_::_In %n hours_" : ["في %n ساعة","في %n ساعة","في %n ساعة","في %n ساعات","في %n ساعة","في %n ساعة"], + "_%n minute _::_%n minutes_" : ["%n دقيقة","%n دقيقة","%n دقيقة","%n دقائق","%n دقيقة","%n دقيقة"], + "In {hours} and {minutes}" : "في {hours} و {minutes}", + "_In %n minute_::_In %n minutes_" : ["في %n دقيقة","في %n دقيقة","في %n دقيقة","في %n دقائق","في %n دقيقة","في %n دقيقة"], + "Later today – {timeLocale}" : "في وقت لاحقٍ اليوم – {timeLocale}", + "Tomorrow – {timeLocale}" : "غداً – {timeLocale}", + "This weekend – {timeLocale}" : "نهاية هذا الأسبوع – {timeLocale}", + "Next week – {timeLocale}" : "الأسبوع القادم – {timeLocale}", + "Message link copied to clipboard" : "تمّ نسخ رابط الرسالة إلى الحافظة", + "Conversation link copied to clipboard" : "تمّ نسخ رابط المحادثة إلى الحافظة", + "The link could not be copied" : "لا يمكن نسخ الرابط", + "Error while parsing a PROPFIND error" : "حدث خطأ أثناء تحليل PROFIND", + "Sending signaling message has failed" : "فشل إرسال رسالة الإشارة", + "Lost connection to signaling server. Trying to reconnect." : "انقطع الاتصال بخادم التشوير. حاول معاودة الاتصال.", + "Lost connection to signaling server." : "فُقِد الاتصال بخادوم الإشارة.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "يجب تحديث خادم الإشارة الذي تم تكوينه حتى يكون متوافقًا مع هذا الإصدار من تطبيق Talk. يرجى الاتصال بإدارتك.", + "Please restart the app." : "يُرجى إعادة تشغيل التطبيق.", + "Please reload the page." : "رجاء أعد تحميل الصفحة.", + "Please try to restart the app." : "حاول رجاءً إعادة تشغيل التطبيق.", + "Please try to reload the page." : "حاول رجاءً إعادة تحميل الصفحة.", + "Do not disturb" : "عدم الازعاج", + "Away" : "بالخارج", + "Microphone {number}" : "مايك {number}", + "Camera {number}" : "كاميرا {number}", + "Speaker {number}" : "المتحدث {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "تتحدث في وضع كاتم الصوت، يرجى تعطيل كاتم الصوت ليتمكن الآخرين من سماعك.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "تعذر إنشاء اتصال مع مشارك واحد على الأقل. لمثل هذا السيناريو قد تكون بحاجه إلى خادم TURN. يرجى مطالبة المسؤول تعيين {linkstart} هذه الوثائق {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "يستغرق هذا وقتًا أطول من المعتاد. هل تم بالفعل منح أذونات الوسائط (أو رفضها)؟ إذا كانت الإجابة بنعم ، يرجى إعادة تشغيل المتصفح ، لأنه فشل الوصول للصوت والفيديو ", + "Access to microphone & camera is only possible with HTTPS" : "الوصول للمايك والكاميرا مسموح فقط في HTTPS", + "Please move your setup to HTTPS" : "يرجى تعديل تعيين إلى HTTPS", + "Access to microphone & camera was denied" : "تم رفض الوصول للمايكرفون والكاميرا", + "WebRTC is not supported in your browser" : "WebRTC غير مدعوم في متصفحك", + "Please use a different browser like Firefox or Chrome" : "يرجى استخدام متصفح آخر مثل فايرفوكس او كروم", + "Error while accessing microphone & camera" : "خطأ في الوصول للمايكرفون والكاميرا", + "%s Talk on your mobile devices" : "%s محادثة في جهازك المحمول", + "Join conversations at any time, anywhere, on any device." : "انضم إلى المحادثات في أي وقت و من أي مكان و عبر أي جهاز", + "Android app" : "تطبيق الأندرويد", + "iOS app" : "تطبيق آي أواس", + "__language_name__" : "__اسم اللغة__", + "Webhook Demo" : "عرض توضيحي demo لخطّاف الوِب Webhook", + "Call summary (%s)" : "ملخص المكالمة (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "يقوم روبوت \"ملخص المكالمة\"بنشر رسالة عامة بعد المكالمة يسرد فيها جميع المشاركين و يحدد المهام", + "Tasks" : "المهام", + "Notes" : "الملاحظات", + "Reports" : "تقارير", + "Decisions" : "قرارات", + "Agenda" : "الأجندة", + "Call summary" : "ملخص المكالمة", + "Call summary - {title}" : "ملخص المكالمة - {title}", + "Talk conversation for event" : "محادثة الحدث ", + "Client Push is installed, this improves the performance of desktop clients." : "تمّ تثبيت Client Push دفع المعلومات من جهة العميل؛ هذا سيؤدي لتحسين أداء عملاء سطح المكتب. ", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} غير مُثبَّت. هذا قد يتسبب في مشاكل في الأداء عند استعمال عملاء سطح المكتب.", + "Next meeting" : "الاجتماع التالي", + "Join conversations from remote Nextcloud servers" : "الانضمام إلى المحادثة من خوادم بعيدة لنكست كلاود", + "Your default media state has been saved" : "تمّ حفظ حالة الوسائط الخاصة بك", + "Set reminder for later today" : "عيّن التذكير لوقت لاحقٍ اليوم", + "Set reminder for tomorrow" : "عيّن التذكير للغد", + "Set reminder for this weekend" : "عيّن التذكير لنهاية هذا الأسبوع", + "Set reminder for next week" : "عيّن التذكير للأسبوع القادم", + "Generate summary" : "توليد مُلخَّص", + "Open poll • You voted already" : "فتح الاستطلاع • لقد قمت بالتصويت بالفعل", + "Open poll • Click to vote" : "فتح الاستطلاع • اضغط للتصويت", + "Poll • Ended" : "انتهى•الاستطلاع", + "Talk recording from {time} ({conversation})" : "تسجيل حديث من {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n صوت","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %nأصوات"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["فتح استطلاع • %n أصوات","فتح استطلاع • %n صوت","فتح استطلاع • %n أصوات","فتح استطلاع • %n أصوات","فتح استطلاع • %n أصوات","فتح استطلاع •%n أصوات"], + "Submit vote" : "إرسال التصويت", + "Your privacy setting has been saved" : "تم حفظ إعدادات الخصوصية الخاصة بك ", + "Your personal setting has been saved" : "تمّ حفظ إعداداتك الشخصية", + "Failed to save sounds setting" : "فشل حفظ إعدادت الصوت ", + "Sounds setting saved" : "تم حفظ إعدادات الأصوات ", + "Nextcloud Talk was updated, you cannot start or join a call." : "تمّ تحديث \"المحادثة\" من نكست كلاود. لايمكنك البدء في أو الانضمام إلى محادثة.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "انضممت لمحادثة آخرى في نافذة او جهاز آخر. هذه الخاصية غير مدعومة سيتم اغلاق هذه الجلسة من قبل نكست كلاود التحدث.", + "Nextcloud Talk was updated." : "تمّ تحديث \"المحادثة\" من نكست كلاود.", + "Nextcloud is in maintenance mode." : "نكست كلاود في وضعية الصيانة.", + "Nextcloud Talk Federation was updated." : "تمّ تحديث \"المحادثة الاتحادية\" Talk Federation من نكست كلاود." +}, +"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;"); diff --git a/l10n/ar.json b/l10n/ar.json new file mode 100644 index 0000000..d60c0b4 --- /dev/null +++ b/l10n/ar.json @@ -0,0 +1,1989 @@ +{ "translations": { + "a conversation" : "محادثة", + "(Duration %s)" : "(المدة الزمنية %s)", + "You attended a call with {user1}" : "لقد حضرت مكالمة مع {user1}", + "_%n guest_::_%n guests_" : ["%n ضيف","%n ضيف","%n ضيف","%n ضيف","%n ضيف","%nضيف"], + "You attended a call with {user1} and {user2}" : "لقد حضرت مكالمة مع {user1} و {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3} و {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "لقد حضرت مكالمة مع {user1} و {user2} و {user3} و {user4} و {user5}", + "_%n other_::_%n others_" : [" %n لايوجد آخرون"," %n شخص واحد","%n شخصان آخران","%n  بضعة أشخاص آخرين","%n  العديد من الأشخاص الآخرين","%n آخرون"], + "{actor} invited you to {call}" : "{actor} يدعوك إلى {call}", + "You were invited to a conversation or had a call" : "تم دعوتك للإنضمام إلى المحادثة أو المكالمة", + "Other activities" : "أنشطة أخرى", + "Talk" : "التحدث", + "Guest" : "ضيف", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## مرحبًا بك في تطبيق \"المحادثة\" Talk من نكست كلاود! \nفي هذه المحادثة، سيتم إخطارك بالميزات الجديدة المتوفرة في التطبيق.", + "## New in Talk %s" : "## الجديد في تطبيق \"المحادثة\" %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- بإمكانك إستعمال متصفح مايكروسوفت ايدج و سفاري الآن للانضمام إلى المكالمات الصوتية والفيديو", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- أصبحت المحادثات الفردية مستمرة الآن ولا يمكن تحويلها صدفة إلى محادثات جماعية. أيضًا عندما يغادر أحد المشاركين المحادثة، لن يتم حذف المحادثة تلقائيًا. فقط إذا غادر كلا المشاركين، سيتم حذف المحادثة من الخادم", + "- You can now notify all participants by posting \"@all\" into the chat" : "- يمكنك الآن تنبيه جميع المشاركين بنشر \"@all\" في الدردشة", + "- With the \"arrow-up\" key you can repost your last message" : "باستخدام مفتاح \"السهم للأعلى\" بإمكانك إعادة نشر رسالتك الأخيرة ", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- يمكن أن يحتوي Talk الآن على أوامر ، أرسل \"مساعدة\" كرسالة دردشة لمعرفة ما إذا كان المسؤول قد قام بتهيئة بعضها", + "- With projects you can create quick links between conversations, files and other items" : "- باستخدام المشاريع، يمكنك إنشاء روابط سريعة بين المحادثات والملفات والعناصر الأخرى", + "- You can now mention guests in the chat" : "يمكنك الآن الإشارة إلى الضيوف في الدردشة", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- يمكن أن يكون للمحادثات الآن ساحة للانتظار. سيسمح هذا للمنسقين بالانضمام إلى الدردشة والاتصال بالفعل للتحضير للاجتماع، بينما يتعين على المستخدمين والضيوف الانتظار", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- يمكنك الآن الرد مباشرة على الرسائل مما يمنح المستخدمين الآخرين مجالًا أوسع لمعرفة موضوع رسالتك", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- سيؤدي البحث الآن عن المحادثات والمشاركين إلى تصفية محادثاتك الحالية أيضًا، مما يسهل كثيرًا العثور على المحادثات السابقة", + "- You can now add custom user groups to conversations when the circles app is installed" : "- يمكنك الآن إضافة مجموعات مستخدمين مخصصة إلى المحادثات عند تثبيت تطبيق circles", + "- Check out the new grid and call view" : "- تحقق من الشبكة الجديدة وعرض المكالمة", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- يمكنك الآن رفع الملفات وسحبها مباشرة من جهازك إلى الدردشة", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- يتم الآن فتح الملفات المشتركة مباشرة داخل عرض الدردشة باستخدام تطبيقات العرض", + "- You can now search for chats and messages in the unified search in the top bar" : "- يمكنك الآن البحث عن الدردشات والرسائل في البحث الموحد في الشريط العلوي", + "- Spice up your messages with emojis from the emoji picker" : " - أضف على رسائلك الرموز التعبيرية", + "- You can now change your camera and microphone while being in a call" : "- يمكنك الآن تغيير الكاميرا والميكروفون أثناء المكالمة", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- اضف لمحادثاتك بعض المحتوى مع وصف وافتحها حتى يتمكن المستخدمون المسجلون من العثور عليها والانضمام إليها", + "- See a read status and send failed messages again" : "- انظر لحالة القراءة وارسل الرسائل التي فشل إرسالها مره أخرى. ", + "- Raise your hand in a call with the R key" : "- ارفع يدك في المكالمة باستخدام مفتاح R.", + "- Join the same conversation and call from multiple devices" : "- انضم إلى نفس المحادثة واتصل من أجهزة متعددة", + "- Send voice messages, share your location or contact details" : "- إرسال رسائل صوتية، مشاركة موقعك أو تفاصيل الاتصال", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- أضف مجموعات إلى محادثة وسيتم تلقائيًا إضافة أعضاء المجموعة الجدد كمشاركين", + "- A preview of your audio and video is shown before joining a call" : "- يتم عرض معاينة الصوت والفيديو قبل الانضمام إلى مكالمة", + "- You can now blur your background in the newly designed call view" : "- يمكنك الآن طمس الخلفية في عرض المكالمات المصمم حديثًا", + "- Moderators can now assign general and individual permissions to participants" : "- يمكن للمشرفين الآن تعيين أذونات عامة وفردية للمشاركين", + "- You can now react to chat messages" : "- بإمكانك الآن التفاعل مع رسائل الدردشة", + "- In the sidebar you can now find an overview of the latest shared items" : "- يمكنك الآن العثور في الشريط الجانبي على لمحة عن أحدث العناصر التي تمّت مُشارَكتها", + "- Use a poll to collect the opinions of others or settle on a date" : "- استعمل استبياناً لجمع آراء الآخرين أو الاتفاق على تاريخ معين", + "- Configure an expiration time for chat messages" : "- عيّن زمناً لانتهاء صلاحية رسائل الدردشة", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- إبدأ مكالمات بدون إعلام الآخرين المشتركين في محادثات المجموعات الكبيرة. يُمكنك إرسال إشعارٍ بالمحادثة على الخاص بمجرد أن تبدأ المكالمة.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- أرسِل رسائل دردشتك غير المستعجلة دون داعٍ لإزعاج المستلمين بإشعارت فورية", + "- Emojis can now be autocompleted by typing a \":\"" : "- أصبح الاستكمال الآلي للإيموجي emoji الآن ممكناً؛ و ذلك بكتابة علامة الشارحة \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- إربط العناصر المتعددة باستعمال اللاقط الذكي الجديد؛ و ذلك بكتابة علامة الشَّرْطَة المائلة \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- يمكن للمشرفين الآن فتح غرف جانبية (يتطلب ذلك واجهة خلفية عالية الآداء)", + "- Calls can now be recorded (requires the High-performance backend)" : "- يمكن الآن تسجيل المكالمات (يتطلب ذلك واجهة خلفية عالية الأداء)", + "- Conversations can now have an avatar or emoji as icon" : "- صار بإمكان المحادثات أن تحمل صورة رمزية Avatar أو إيموجي emoji كأيقونة", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- الخلفيات الظاهرية أصبحت متاحةً الآن في محادثات الفيديو بالإضافة إلى تضبيب الخلفية", + "- Reactions are now available during calls" : "- الاستجابات Reactions ممكنة الآن في أثناء المكالمات", + "- Typing indicators show which users are currently typing a message" : "- مؤشرات الطباعة Typing indicators تظهر على النص أو الرسالة في موضع الإدخال الحالي لكل مستخدم ", + "- Groups can now be mentioned in chats" : "- صار بالإمكان الإشارة إلى mention المجموعات في الدردشة", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- المكالمات أثناء تسجيلها يمكن آليّاً تحويلها إلى نص transcribe إذا ما تمّ تسجيل تطبيقٍ لمُزوّد ترجمةٍ translation provider app", + "- Chat messages can be translated if a translation provider app is registered" : "- رسائل الدردشة يمكن ترجمتها إذا ما تمّ تسجيل تطبيقٍ لمُزوّد ترجمةٍ translation provider app", + "- **Markdown** can now be used in _chat_ messages" : "- **تنسيق ماركداون** يمكن استعماله الآن في _رسائل_الدردشة", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- خطافات الويب Webhooks متاحة الآن لتطبيق الروبوتات bot. لمزيد المعلومات، أنظر التوثيق في: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- قم بتعيين تذكير على رسالة محادثة ليتم إشعارك بها لاحقًا ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- استَخدِم محادثة **ملاحظة ذاتية Note to self** لتدوين الملاحظات ومشاركة المعلومات بين أجهزتك", + "- Captions allow to send a message with a file at the same time" : "- تٌمكِّنُك التعليقات Captions من إلحاق رسالة بالملف المرسل في نفس الوقت", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- أصبح فيديو المُتحدِّث مرئيًا الآن أثناء مشاركة الشاشة و يتم كذلك تحريك تفاعلات المكالمات", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- يمكن الآن تعديل الرسائل من قِبَل المؤلفين و المشرفين إلى حد 6 ساعات", + "- Unsent message drafts are now saved in your browser" : "- مسودات الرسائل غير المرسلة تبقى محفوظة على متصفحك للويب ", + "- Text chatting can now be done in a federated way with other Talk servers" : "- الدردشة النصية يمكن الآن إجراؤها عبر السحابة الاتحادية و خوادم تطبيق \"المحادثة\" Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- يمكن للمشرفين الآن حظر حسابات أو ضيوف لمنعهم من الانضمام إلى محادثة", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- المكالمات الواردة من أحداث مربوطة على التقويم أو استبدالات لشخص خارج المكتب يمكن الآن عرضها في المحادثات", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- المكالمات يمكن الآن إجراؤها عبر السحابة الاتحادية و خوادم تطبيق \"المحادثة\" Talk (لكنها تستلزم توفير واجهة خلفية عالية الأداء HPB)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- تقديم تطبيق نكست كلاود للمحادثة على سطح المكتب لنظم وندوز، و ماك، و لينكس: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- تلخيص تسجيلات المكالمات والرسائل غير المقروءة في الدردشات باستخدام \"مساعد\" نكست كلاود.", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- تحسين الاجتماعات من خلال التعرف على الضيوف المدعوين عبر عناوين بريدهم الإلكتروني، واستيراد قوائم المشاركين، ومسودات الاستطلاعات، وتنزيل قوائم المشاركين في المكالمات", + "- Archive conversations to stay focused" : "- أرشفة المحادثات للمحافظة على التركيز", + "- Schedule a meeting into your calendar from within a conversation" : "- جدولة اجتماع في تقويمك من داخل المحادثة", + "- Search for messages of the current conversation directly in the right sidebar" : "- البحث عن رسائل المحادثة الحالية مباشرة في الشريط الجانبي الأيمن", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- يمكنك رؤية المزيد من المحادثات بنظرة واحدة باستخدام القائمة المدمجة الجديدة (يمكنك تمكينها في إعدادات المحادثة)", + "_All %n participant_::_All %n participants_" : ["كل الـ%n مشارك","كل الـ%n مشارك","كل الـ %n مشاركين","كل الـ%n مشاركين","كل الـ%n مشارك","كل الـ%n مشارك"], + "Talk updates ✅" : "تحديثات التحدث ✅", + "Reaction deleted by author" : "تم حذف تفاعل من قبل الكاتب", + "{actor} created the conversation" : "{actor} قام بإنشاء محادثة", + "You created the conversation" : "أنشأتَ المحادثة", + "System created the conversation" : "قام النظام بإنشاء هذه المحادثة تلقائياً", + "An administrator created the conversation" : "المسؤول انشئ محادثة", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} اعاد تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "قمت بإعادة تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "قام المسؤول بإعادة تسمية المحادثة من \"%1$s\" إلى \"%2$s\"", + "{actor} set the description" : "{actor} قام بتعيين الوصف ", + "You set the description" : "قمت بتعيين الوصف ", + "An administrator set the description" : "قام المسؤول بتعيين الوصف", + "{actor} removed the description" : "{actor} قام بحذف الوصف ", + "You removed the description" : "قمت بحذف الوصف ", + "An administrator removed the description" : "قام المسؤول بحذف الوصف", + "You started a silent call" : "لقد بَدَأتَ مكالمة صامتة", + "Outgoing silent call" : "مكالمة صامتة صادرة", + "{actor} started a silent call" : "{actor} بدأ مكالمة صامتة", + "Incoming silent call" : "مكالمة صامتة واردة", + "You started a call" : "أنت بدأت مكالمة", + "Outgoing call" : "مكالمة صادرة", + "{actor} started a call" : "{actor} بدأ مكالمة", + "Incoming call" : "مكالمة واردة", + "{actor} joined the call" : "{actor} انضم إلى المكالمة", + "You joined the call" : "أنت انضممت للمكالمة", + "{actor} left the call" : "{actor} غادر المكالمة", + "You left the call" : "لقد قمت بمغادرة المكالمة", + "{actor} unlocked the conversation" : "{actor} أزال قفل المحادثة", + "You unlocked the conversation" : "أنت أزلت اقفال المكالمة", + "An administrator unlocked the conversation" : "قامت الإدارة بإزالة قفل المحادثة ", + "{actor} locked the conversation" : "{actor} اقفل المحادثة", + "You locked the conversation" : "أنت اقفلت المحادثة", + "An administrator locked the conversation" : " الإدارة اقفلت المحادثة", + "{actor} limited the conversation to the current participants" : "{actor} قام بحد الرسائل للمشاركين الحاليين", + "You limited the conversation to the current participants" : "قمت بحد الرسائل للمشاركين الحاليين", + "An administrator limited the conversation to the current participants" : "قامت الإدارة بحد الرسائل للمشاركين الحاليين", + "{actor} opened the conversation to registered users" : "{actor} اتاح المحادثة للمستخدمين المسجلين ", + "You opened the conversation to registered users" : "قمت بإتاحة المحادثة للمستخدمين المسجلين ", + "An administrator opened the conversation to registered users" : "قامت الإدارة بإتاحة المحادثة للمستخدمين المسجلين ", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} قام بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "You opened the conversation to registered users and users created with the Guests app" : "أنت قمت بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "قام مدير بفتح المحادثة للمستخدِمين المسجلين و المستخدِمين الذين تمّ استحداثهم عن طريق تطبيق الضيوف Gustes app", + "The conversation is now open to everyone" : "المحادثة الآن مفتوحة للجميع", + "{actor} opened the conversation to everyone" : "{actor} اتاح المحادثة للجميع", + "You opened the conversation to everyone" : "أنت سمحت بإتاحة المحادثة للجميع", + "{actor} restricted the conversation to moderators" : "{actor} اقتصرت المحادثة على المشرفيين", + "You restricted the conversation to moderators" : "أنت اقتصرت المحادثة على المشرفيين", + "{actor} started breakout rooms" : "بدأ {actor} الغرف الجانبية", + "You started breakout rooms" : "لقد بدأت الغرف الجانبية", + "{actor} stopped breakout rooms" : "قام {actor} بوقف الغرف الجانبية", + "You stopped breakout rooms" : "لقد قمت بوقف الغرف الجانبية", + "{actor} allowed guests" : "{actor} السماح للضيوف بالانضمام", + "You allowed guests" : "أنت وافقت على انضمام الضيوف", + "An administrator allowed guests" : "الإدارة وافقت على انضمام الضيوف", + "{actor} disallowed guests" : "{actor} منع الضيوف", + "You disallowed guests" : "أنت منعت الضيوف", + "An administrator disallowed guests" : "الإدارة منعت الضيوف", + "{actor} set a password" : "{actor} تعيين كلمة مرور", + "You set a password" : "أنت قمت بتعيين كلمة مرور", + "An administrator set a password" : "تعيين كلمة مرور من قبل الإدارة", + "{actor} removed the password" : "{actor} إلغاء كلمة المرور", + "You removed the password" : "أنت حذفت كلمة المرور", + "An administrator removed the password" : "الإدارة حذفت كلمة المرور", + "{actor} added {user}" : "{actor} اضاف {user}", + "You joined the conversation" : "انضممت للمحادثة", + "{actor} joined the conversation" : "{actor} انضم للمحادثة", + "You added {user}" : "أنت اضفت {user}", + "{actor} added you" : "{actor} أضافك أنت", + "An administrator added you" : "الإدارة قامت بإضافتك أنت", + "An administrator added {user}" : "الإدارة أضافت {user}", + "You left the conversation" : "لقد غادرت المحادثة", + "{actor} left the conversation" : "{actor} غادر المحادثة", + "{actor} removed {user}" : "{actor} حذف {user}", + "You removed {user}" : "أنت قمت بحذف {user}", + "{actor} removed you" : "{actor} قام بحذفك", + "An administrator removed you" : "الإدارة قامت بحذفك", + "An administrator removed {user}" : "الإدارة حذفت {user}", + "{actor} invited {federated_user}" : "{actor} قام بدعوة {federated_user}", + "You invited {federated_user}" : "أنت قمت بدعوة {federated_user}", + "You accepted the invitation" : "أنت قَبَلت الدعوة", + "{actor} invited you" : "{actor} قام بدعوتك", + "An administrator invited you" : "قام مدير بدعوتك", + "An administrator invited {federated_user}" : "قام مدير بدعوة {federated_user}", + "{federated_user} accepted the invitation" : "قَبَل {federated_user} الدعوة", + "{actor} removed {federated_user}" : "قام {actor} بإزالة {federated_user}", + "You removed {federated_user}" : "لقد قمت بحذف {federated_user}", + "You declined the invitation" : "أنت رفضت الدعوة", + "An administrator removed {federated_user}" : "قام مدير بحذف {federated_user}", + "{federated_user} declined the invitation" : "رفض {federated_user} الدعوة", + "{actor} added group {group}" : "أضاف {actor} مجموعة {group}", + "You added group {group}" : "لقد أضفت مجموعة {group}", + "An administrator added group {group}" : "أضاف المسؤول مجموعة {group}", + "{actor} removed group {group}" : "قام {actor} بإزالة مجموعة {group}", + "You removed group {group}" : "لقد قمت بإزالة مجموعة {group}.", + "An administrator removed group {group}" : "قام المسؤول بإزالة مجموعة {group}", + "{actor} added team {circle}" : "قام {actor} بإضافة الفريق {circle}", + "You added team {circle}" : "أنت قمت بإضافة الفريق {circle}", + "An administrator added team {circle}" : "قام مدير بإضافة الفريق {circle}", + "{actor} removed team {circle}" : "قام {actor} بحذف الفريق {circle}", + "You removed team {circle}" : "أنت قمت بحذف الفريق {circle}", + "An administrator removed team {circle}" : "قم مدير بحذف الفريق {circle}", + "{actor} added {phone}" : "قام {actor} بإضافة {phone}", + "You added {phone}" : "أنت قمت بإضافة {phone}", + "An administrator added {phone}" : "قام مدير بإضافة {phone}", + "{actor} removed {phone}" : "قام {actor} بحذف {phone}", + "You removed {phone}" : "أنت قمت بحذف {phone}", + "An administrator removed {phone}" : "قام مدير بحذف {phone}", + "{actor} promoted {user} to moderator" : "تم ترقية {user} من قبل {actor}", + "You promoted {user} to moderator" : "قمت بترقية {user} إلى مشرف", + "{actor} promoted you to moderator" : "تم ترقيتك إلى مشرف من قبل {actor}", + "An administrator promoted you to moderator" : "تم ترقيتك إلى مشرف من قبل الادارة", + "An administrator promoted {user} to moderator" : "تم ترقية {user} من قبل الادارة", + "{actor} demoted {user} from moderator" : "تم خفض رتبة الاشراف من {user} من قبل {actor}", + "You demoted {user} from moderator" : "لقد خفضت رتبة الاشراف {user}", + "{actor} demoted you from moderator" : "تم تخفيض رتب الاشراف من قبل {actor}", + "An administrator demoted you from moderator" : "تم تخفيض رتبتك بالاشراف من قبل الادارة", + "An administrator demoted {user} from moderator" : "تم تخفيض رتبة الاشراف من {user} من قبل الادارة", + "{actor} shared a file which is no longer available" : "{actor} قام بمشاركة ملف لم يعد متاح", + "You shared a file which is no longer available" : "قمت بمشاركة ملف لم يعد متاح", + "File shares are currently not supported in federated conversations" : "مشاركة الملفات غير مدعومة حاليّاً في حالة المحادثات عبر السحابة الموحدة", + "The shared location is malformed" : "الموقع المشترك غير صحيح", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "قام {actor} بإعداد Matterbridge لمزامنة هذه المحادثة مع الدردشات الأخرى.", + "You set up Matterbridge to synchronize this conversation with other chats" : "قمت بإعداد Matterbridge لمزامنة هذه المحادثة مع الدردشات الأخرى.", + "{actor} updated the Matterbridge configuration" : "قام {actor} بتحديث تكوين Matterbridge .", + "You updated the Matterbridge configuration" : "لقد قمت بتحديث تكوين Matterbridge .", + "{actor} removed the Matterbridge configuration" : "قام {actor} بإزالة تكوين Matterbridge .", + "You removed the Matterbridge configuration" : "لقد قمت بإزالة تكوين Matterbridge .", + "{actor} started Matterbridge" : " {actor} بدأ Matterbridge .", + "You started Matterbridge" : "لقد بدأت Matterbridge .", + "{actor} stopped Matterbridge" : "قام {actor} بإيقاف Matterbridge .", + "You stopped Matterbridge" : "قمت بإيقاف Matterbridge .", + "{actor} deleted a message" : "{actor} مسح رسالة ", + "You deleted a message" : "أنت حذفت الرسالة ", + "{actor} edited a message" : "{actor} قام بتحرير رسالة", + "You edited a message" : "أنت قمت بتحرير رسالة", + "{actor} deleted a reaction" : "حذف {actor} تفاعل", + "You deleted a reaction" : "لقد قمت بحذف تفاعل", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد%n أسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسبوع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n يوم","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nأيام","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n أيام"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n ساعة","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %nساعات"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقيقة","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","لقد قمت بتعيين انتهاء صلاحية الرسالة بعد %n دقائق"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nأسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسبوع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أسابيع"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n يوم","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n أيام"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعة","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n ساعات","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %nساعات"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقيقة","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق","قام {actor} بتعيين انتهاء صلاحية الرسالة بعد %n دقائق"], + "{actor} disabled message expiration" : "قام {actor} بتعطيل تعيين انتهاء صلاحية الرسالة ", + "You disabled message expiration" : "لقد قمت بتعطيل تعيين انتهاء صلاحية الرسالة", + "{actor} cleared the history of the conversation" : "قام {actor} بمسح تاريخ المحادثة", + "You cleared the history of the conversation" : "لقد قمت بمسح تاريخ المحادثة", + "{actor} set the conversation picture" : "{actor} عيّن صورةً للمحادثة ", + "You set the conversation picture" : "أنت عيّنت صورةً للمحادثة", + "{actor} removed the conversation picture" : "{actor} حذف صورة المحادثة", + "You removed the conversation picture" : "أنت حذفت صورة المحادثة", + "{actor} ended the poll {poll}" : "قام {actor} بإنهاء استطلاع {poll}", + "You ended the poll {poll}" : "لقد قمت بإنهاء استطلاع {poll}", + "{actor} started the video recording" : "قام {actor} ببدء تسجيل فيديو", + "You started the video recording" : "لقد بدأت تسجيل فيديو", + "{actor} stopped the video recording" : "قام {actor} بإيقاف تسجيل الفيديو", + "You stopped the video recording" : "لقد قمت بإيقاف تسجيل الفيديو", + "{actor} started the audio recording" : "قام {actor} ببدء تسجيل صوتي", + "You started the audio recording" : "لقد قمت ببدء تسجيل الصوتي", + "{actor} stopped the audio recording" : "قام {actor} بإيقاف التسجيل الصوتي", + "You stopped the audio recording" : "لقد قمت بإيقاف التسجيل الصوتي", + "The recording failed" : "فشل في التسجيل", + "Someone voted on the poll {poll}" : "قامل شخص بالتصويت في استطلاع {poll}", + "Message deleted by author" : "مٌسحت الرسالة بواسطة الكاتب ", + "Message deleted by {actor}" : "مُسحت الرسالة بواسطة {actor}", + "Message deleted by you" : "مُسحت الرسالة بواسطتك", + "Deleted user" : "مستخدم محذوف", + "Unknown number" : "رقم غير معروف", + "Administration" : "الإدارة", + "System" : "النظام", + "%s (guest)" : "%s (ضيف)", + "Missed call" : "مكالمة فائتة", + "Unanswered call" : "مكالمة فائتة", + "Call ended (Duration {duration})" : "انتهت المكالمة (المدة {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "تم إنهاء المكالمة، حيث وصلت إلى الحد الأقصى لمدة المكالمة (المدة {duration})", + "{actor} ended the call (Duration {duration})" : "أنهى {actor} المكالمة (المدة {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration} )","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})","إنتهت للتوّ مكالمة فيها %n ضيف بسبب تجاوز الحدّ الأقصى لمدة المكالمة (المدة {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة{duration})","المكالمة التي فيها %n ضيوف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة {duration})","المكالمة التي فيها %n ضيف انتهت (المدة{duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n ضيف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %nمن الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %nمن الضيوف (المدة {duration})","قام {actor} بإنهاء المكالمة مع %n من الضيوف (المدة {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1} تمّ إنهاؤها بسبب تجاوزها الحدّ الأقصى لمدة المكالمات ( المدة{duration})", + "Call with {user1} ended (Duration {duration})" : "المكالمة مع {user1} تمّ إنهاؤها (المدة {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} (المدة {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1} و {user2} تمّ إنهاؤها بسبب تجاوز الحدّ الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "مكالمة {user1}، و {user2} انتهت (المدة {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} (المدة {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1}،و {user2} ،و {user3} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} (المدة {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1},و {user2}, و{user3} ،و {user4} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3}، و {user4} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} و {user4} (المدة {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "المكالمة مع {user1}, و{user2},و {user3},و {user4} ،و {user5} تمّ إنهاؤها بسبب تجاوز الحد الأقصى لمدة المكالمات (المدة {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "مكالمة {user1}، و {user2}، و {user3}، و {user4}، و {user5} انتهت (المدة {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "قام {actor} بإنهاء المكالمة مع {user1} و {user2} و {user3} و {user4} و {user5} (المدة {duration})", + "Message of {user} in {conversation}" : "رسالة من {user} في {conversation}", + "Message of {user}" : "رسالة من {user}", + "Message of a deleted user in {conversation}" : "رسالة من مستخدِم محذوف في {conversation}", + "Talk conversations" : "محادثات", + "Talk to %s" : "تحدث إلى %s", + "An error occurred. Please contact your administrator." : "حدث خطأٌ. يرجى الاتصال بمسؤول النظام.", + "Storage quota exceeded" : "الحصة التخزينية تمّ استنفاذها", + "File not found" : "تعذر العثور على الملف", + "File is not shared, or shared but not with the user" : "الملف لم يتم مشاركته أو ليس مع المستخدم صلاحية للإطلاع على الملف", + "No account available to delete." : "لا يوجد حساب متاح للحذف", + "Poll" : "استبيان", + "Password needs to be set" : "يجب تعيين كلمة المرور", + "Uploading the file failed" : "فشل تحميل الملف", + "No image file provided" : "لم يتم توفير صورة ملف", + "File is too big" : "الملف كبير جدًا", + "Invalid file provided" : "تم تقديم ملف غير صالح", + "Invalid image" : "الصورة غير صالحة", + "Unknown filetype" : "نوع الملف غير معروف", + "Talk mentions" : "إشارات في المحادثات", + "More conversations" : "محادثات أخرى", + "Say hi to your friends and colleagues!" : "قل مرحبا ً لزملاء العمل!", + "No unread mentions" : "لا توجد إشارة جديدة لك", + "Call in progress" : "محادثة جارية", + "You were mentioned" : "منشن بإسمك", + "Write to conversation" : "اكتب للمحادثة", + "Writes event information into a conversation of your choice" : "اكتب معلومات الحدث في محادثة من اختيارك", + "Missing email field in header line" : "خانة البريد الإلكتروني في سطر الترويسة ناقصة", + "Following lines are invalid: %s" : "السطر التالي غير صحيح %s", + "Conversation invitation" : "دعوة محادثة", + "Description" : "الوصف", + "You can also dial-in via phone with the following details" : "يمكنك أيضًا الاتصال عبر الهاتف بالتفاصيل التالية", + "Dial-in information" : "معلومات الإتصال", + "Meeting ID" : "معرف الإجتماع ", + "Your PIN" : "رقمك السري", + "Meeting" : "اجتماع", + "Password request: %s" : "طلب كلمة المرور: %s", + "Private conversation" : "محادثة خاصة", + "Deleted user (%s)" : "تم حذف العضو (%s)", + "Failed to upload call recording" : "تعذّر رفع تسجيل المكالمة", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "خادم التسجل فشل في رفع تسجيل المكالمة {call}. يرجى التواصل مع مسؤول النظام.", + "Share to chat" : "شارك بالدردشة", + "Dismiss notification" : "تجاهل الإشعار", + "Call recording now available" : "تسجيل المكالمة متاحٌ الآن", + "The recording for the call in {call} was uploaded to {file}." : "تسجيل المكالمة في {call} تمّ رفعه إلى {file}.", + "Transcript now available" : "التحويل من كلام إلى نصٍ متاحٌ الآن", + "The transcript for the call in {call} was uploaded to {file}." : "نص المكالمة {call} تمّ رفعه بعد تحويله إلى {file}.", + "Failed to transcript call recording" : "تعذّر تحويل تسجيل المكالمة إلى نص", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "فشل الخادم في تحويل تسجيل المكالمة في {file} للمكالمة {call} إلى نص. يرجى التواصل مع مسؤول النظام.", + "Call summary now available" : "ملخص المكالمة جاهزٌ الآن", + "The summary for the call in {call} was uploaded to {file}." : "ملخص المكالمة في {call} تمّ تحميله إلى {file}.", + "Failed to summarize call recording" : "تعذّر تلخيص تسجيل المكالمة", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "أخفق الخادوم في تلخيص التسجيل عند {file} للمكالمة في {call}. رجاءً، تواصل مع مشرف النظام.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} دعاك للانضمام إلى غرفة: {roomName} على الخادوم: {remoteServer}", + "Accept" : "قبول", + "Decline" : "رفض", + "{user1} invited you to a federated conversation" : "{user1} دعاك للانضمام إلى مُحادثة على سحابة اتحاديّة", + "New message" : "رسالة جديدة", + "Reminder" : "تذكير", + "Notification" : "إشعار", + "Reminder: You in {call}" : "تذكير: أنت في {call}", + "Reminder: {user} in {call}" : "تذكير: {user} في {call}", + "Reminder: Deleted user in {call}" : "تذكير: مستخدِم محذوف في {call}", + "Reminder: {guest} (guest) in {call}" : "تذكير: {guest} (ضيف) في {call}", + "Reminder: Guest in {call}" : "تذكير: ضيف في {call}", + "{user} reacted with {reaction}" : "{user} تَفَاعَلَ بـ {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} تَفَاعَلَ بـ {reaction} في {call}", + "Deleted user reacted with {reaction} in {call}" : "مستخدِم محذوف تَفَاعَلَ بـ {reaction} في {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (ضيف) تَفَاعَلَ بـ {reaction} في {call}", + "Guest reacted with {reaction} in {call}" : "تَفَاعَلَ ضيفُ بـ {reaction} في {call}", + "{user} in {call}" : "{user} في {call}", + "Deleted user in {call}" : "تم حذف العضو في {call}", + "{guest} (guest) in {call}" : "{guest} (ضيف) في {call}", + "Guest in {call}" : "ضيف في {call}", + "{user} sent you a private message" : "{user} ارسل لك رسالة خاصة", + "{user} sent a message in conversation {call}" : "{user} ارسل رسالة في المحادثة {call}", + "A deleted user sent a message in conversation {call}" : "عضو محذوف قام بإرسال رسالة في محادثة {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (ضيف) ارسل رسالة لمحادثة {call}", + "A guest sent a message in conversation {call}" : "ضيف ارسل رسالة للمحادثة {call}", + "{user} replied to your private message" : "{user} قام بالرد على رسالتك الخاصة", + "{user} replied to your message in conversation {call}" : "{user} قام بالرد على رسالتك في محادثة {call}", + "A deleted user replied to your message in conversation {call}" : "عضو محذوف رد على رسالتك في محادثة {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (ضيف) قام بالرد على رسالتك في محادثة {call}", + "A guest replied to your message in conversation {call}" : "ضيف قام بالرد على رسالتك في محادثة {call}", + "Reminder: You in private conversation {call}" : "تذكير: أنت في محادثة خاصة {call}", + "Reminder: A deleted user in private conversation {call}" : "تذكير: مستخدِم محذوف في محادثة خاصة {call}", + "Reminder: {user} in private conversation" : "تذكير: {user} في محادثة خاصة", + "Reminder: You in conversation {call}" : "تذكير: أنت في محادثة {call}", + "Reminder: {user} in conversation {call}" : "تذكير: {user} في محادثة {call}", + "Reminder: A deleted user in conversation {call}" : "تذكير: مستخدِم محذوف في محادثة {call}", + "Reminder: {guest} (guest) in conversation {call}" : "تذكير: {guest} (ضيف) في محادثة {call}", + "Reminder: A guest in conversation {call}" : "تذكير: ضيف في محادثة {call}", + "{user} reacted with {reaction} to your private message" : "تفاعل {user} بـ {reaction} على رسالتك الخاصة", + "{user} reacted with {reaction} to your message in conversation {call}" : "تفاعل {user} بـ {reaction} على رسالتك في المحادثة {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "تفاعل مستخدم محذوف بـ {reaction} على رسالتك في المحادثة {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "رد (ضيف){guest} بـ {reaction} على رسالتك في المحادثة {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "رد ضيف بـ {reaction} على رسالتك في المحادثة {call}", + "{user} mentioned you in a private conversation" : "{user} مشار له في رسالة خاصة", + "{user} mentioned group {group} in conversation {call}" : "{user} أشار إلى المجموعة {group} iفي المحادثة {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} أشار للفريق {team} في المحادثة {call}", + "{user} mentioned everyone in conversation {call}" : "{user} أشار إلى الجميع في المحادثة {call}", + "{user} mentioned you in conversation {call}" : "{user} مشار له في محادثة {call}", + "A deleted user mentioned group {group} in conversation {call}" : "مستخدِمٌ محذوفٌ أشار إلى المجموعة {group} في المحادثة {call}.", + "A deleted user mentioned team {team} in conversation {call}" : "مُستخدِم محذوف أشار للفريق {team} في المحادثة {call}", + "A deleted user mentioned everyone in conversation {call}" : "مستخدِمٌ محذوفٌ أشار إلى الجميع في المحادثة {call}.", + "A deleted user mentioned you in conversation {call}" : "عضو محذوف أشار لاسمك في محادثة {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) أشار إلى المجموعة {group} في المحادثة {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (الضيف) أشار للفريق {team} في المحادثة {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) أشار إلى الجميع في المحادثة {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (ضيف) أشار لاسمك في محادثة {call}", + "A guest mentioned group {group} in conversation {call}" : "ضيفٌ أشار إلى المجموعة {group} في المحادثة {call}", + "A guest mentioned team {team} in conversation {call}" : "أشار ضيف للفريق {team} في المحادثة {call}", + "A guest mentioned everyone in conversation {call}" : "ضيفٌ أشار إلى الجميع في المحادثة {call}", + "A guest mentioned you in conversation {call}" : "ضيف أشار لاسمك في محادثة {call}", + "View message" : "إعرِض الرسالة", + "Dismiss reminder" : "تجاهل التذكير", + "View chat" : "عرض المحادثة", + "{user} invited you to a group conversation: {call}" : "{user} قام بدعوتك للإنضمام لمحادثة جماعية: {call}", + "Join call" : "انضمام لمكالمة", + "Answer call" : "الرد على المكالمة", + "{user} would like to talk with you" : "{user} يريد التحدث إليك", + "Call back" : "معاودة الاتصال", + "You missed a call from {user}" : "مكالمة لم ترد عليها من {user}", + "A group call has started in {call}" : "اتصال جماعي بدأ في {call}", + "You missed a group call in {call}" : "اتصال جماعي لم ترد عليه في {call}", + "{email} is requesting the password to access {file}" : "{email} انشأ طلب كلمة المرور للوصول إلى الملف {file}", + "{email} tried to request the password to access {file}" : "{email} حاول طلب كلمة المرور للوصول للملف {file}", + "Someone is requesting the password to access {file}" : "شخص انشأ طلب كلمة المرور للوصول للملف {file}", + "Someone tried to request the password to access {file}" : "شخص حاول طلب كلمة المرور للوصول للملف {file}", + "Open settings" : "فتح الإعدادات", + "Hosted signaling server added" : "تمّت إضافة خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server is now configured and will be used." : "تم تكوين خادم التشوير المستضاف الآن وسيتم استخدامه.", + "Hosted signaling server removed" : "تمّ حذف خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server was removed and will not be used anymore." : "تمت إزالة خادم التشوير المستضاف ولن يتم استخدامه بعد الآن.", + "Hosted signaling server changed" : "تمّ تغيير خادوم إشارة مُستضاف Hosted signaling server", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "قام حساب خادم التشوير المستضاف بتغيير الحالة من \"{oldstatus}\" إلى \"{newstatus}\".", + "pending" : "مُعلّق قيد الانتظار", + "active" : "نَشِطٌ", + "expired" : "منتهي الصلاحية", + "blocked" : "محظور", + "error" : "خطأ", + "The certificate of {host} expires in {days} days" : "تنتهي صلاحية شهادة {host} خلال {days} أيام", + "The certificate of {host} expired" : "انتهت صلاحية شهادة {host}", + "Contact via Talk" : "تواصل عبر تطبيق المحادثة", + "Open Talk" : "تطبيق مؤتمرات الفيديو OpenTalk ", + "Default" : "افتراضي", + "Presentation" : "عرض تقديمي", + "Webinar" : "نقاش عبر الويب - ويب نير", + "Conversations" : "المحادثات", + "Messages in current conversation" : "رسائل في المحادثة الحالية", + "{user}" : "{user}", + "Messages" : "الرسائل", + "{user} in {conversation}" : "{user} في {conversation}", + "Messages in other conversations" : "الرسائل في المحادثات الآخرى", + "One-to-one rooms always need to show the other users avatar" : "غرف واحد لواحد يلزم فيها دائماً إظهار صورة الملف الشخصي الرمزية للأشخاص الآخرين", + "Invalid emoji character" : "حرف إيموجي غير صحيح", + "Invalid background color" : "لون خلفية غير صحيح", + "Avatar image is not square" : "الصورة الرمزية ليست على شكل مربّع", + "Room {number}" : "الغرفة {number}", + "Other" : "آخر", + "Failed to request trial because the trial server is unreachable. Please try again later." : "فشل طلب التجربة لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "هناك مشكلة في مصادقة هذه الحالة. ربما لا يمكن الوصول إليه من الخارج للتحقق من عنوان URL الخاص به.", + "Something unexpected happened." : "حصل خطأ غير متوقع. ", + "The URL is invalid." : "الرابط غير صحيح", + "An HTTPS URL is required." : "مطلوب عنوان HTTPS URL.", + "The email address is invalid." : "البريد الإلكتروني غير صحيح", + "The language is invalid." : "اللغة غير صحيحة", + "The country is invalid." : "الدولة غير صحيحة", + "There is a problem with the request of the trial. Please check your logs for further information." : "حدثت مشكلة عند طلب التجربة. يرجى التحقق من سجلاتك للحصول على مزيد من المعلومات.", + "Too many requests are send from your servers address. Please try again later." : "طلبات متعددة تم ارساله من عنوان خادمك. يرجى المحاولة لاحقا.", + "There is already a trial registered for this Nextcloud instance." : "توجد بالفعل نسخة تجريبية مسجلة لمثيل نكست كلاود هذا.", + "Something unexpected happened. Please try again later." : "حصل امر غير معتاد. يرجى إعادة المحاولة لاحقًا.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "فشل طلب التجربة لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Trial requested but failed to get account information. Please check back later." : "تم طلب التجربة لكن فشل في الحصول على معلومات الحساب. يرجى التحقق مره أخرى لاحقًا. ", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "هناك مشكلة في مصادقة هذا الطلب. ربما لا يمكن الوصول إليه من الخارج للتحقق من عنوان URL الخاص به.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "فشل جلب معلومات الحساب لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with fetching the account information. Please check your logs for further information." : "حدثت مشكلة عند جلب معلومات الحساب. يرجى التحقق من السجلات الخاصة بك للحصول على مزيد من المعلومات.", + "There is no such account registered." : "الحساب غير مسجل", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "فشل جلب معلومات الحساب لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Deleting the hosted signaling server account failed. Please check back later." : "فشل حذف حساب خادم التشوير المستضاف. يرجى معاودة المحاولة لاحقًا.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "فشل حذف الحساب لأن حدث خطأ بخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "There is a problem with deleting the account. Please check your logs for further information." : "حدثت مشكلة عند حذف الحساب. يرجى التحقق من السجلات الخاصة بك للحصول على مزيد من المعلومات.", + "Too many requests are sent from your servers address. Please try again later." : "تم ارسال طلبات متعددة من عنوان خادمك. يرجى المحاولة لاحقًا.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "فشل حذف الحساب لأن لا يمكن الوصول لخادم الإصدار التجريبي. يرجى معاودة المحاولة لاحقًا.", + "Note to self" : "ملاحظة شخصية", + "A place for your private notes, thoughts and ideas" : "مكان لتسجيل ملاحظاتك و خططك و أفكارك", + "Transcript is AI generated and may contain mistakes" : "النص تمّ توليده بواسطة الذكاء الاصطناعي؛ لذا يُحتمل أنه يحتوي على أخطاء", + "Summary is AI generated and may contain mistakes" : "الملخص تمّ توليده بواسطة الذكاء الاصطناعي؛ لذا يُحتمل أنه يحتوي على أخطاء", + "Let's get started!" : "فَلْنَبْدَإ الآن!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "تطبيق \"المحادثة\" من نكست كلاود **Nextcloud Talk** هو عبارة عن منصة اتصال آمنة ذاتية الاستضافة تتكامل بسلاسة مع بيئة نكست كلاود. \n\n#### الميزات الرئيسية: \n* الدردشة والمراسلة في الدردشات الخاصة والجماعية \n* مكالمات صوتية وفيديو \n* مشاركة الملفات والتكامل مع تطبيقات نكست كلاود الأخرى \n* إعدادات محادثة قابلة للتخصيص، والتحكم في الخصوصية، والتنسيق \n* الويب وسطح المكتب والهاتف النقال (iOS وAndroid) \n* اتصالات خاصة وآمنة \n\nتعرف على المزيد في [وثائق المُستخدِم](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# مرحبًا بك في تطبيق \"المحادثة\" من نكست كلاود Nextcloud Talk \n\nهذا التطبيق هو تطبيق مراسلة خاص وقوي يتكامل مع بيئة نكست كلاود. \nيمكنك الدردشة في محادثات خاصة أو جماعية والتعاون عبر مكالمات الصوت والفيديو وتنظيم الندوات عبر الإنترنت واللقاءات وتخصيص محادثاتك؛ والمزيد المزيد.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 تنسيق النصوص لإنشاء رسائل غنية \n\nفي تطبيق \"المحادثة\" من نكست كلاود Nextcloud Talk يمكنك استخدام صيغة Markdown لتنسيق رسائلك. على سبيل المثال، يمكنك تطبيق التنسيق **الغامق** أو *المائل*، أو \"تمييز النصوص ككود برمجي\". يمكنك أيضاً إنشاء جداول وإضافة عناوين إلى نصِّك. \n\nهل تحتاج إلى تصحيح خطأ مطبعي أو تغيير التنسيق؟ عدّل رسالتك بكل بساطة بالنقر فوق \"تعديل الرسالة\" في قائمة الرسائل.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 أضِف المُرفقات والروابط \n\nيمكنك إرفاق الملفات من نكست كلاود هَبْ Hub باستعمال الزر \"+\". شارك العناصر من الملفات وتطبيقات نكست كلاود المتنوعة. تدعم بعض التطبيقات أيضاً عناصر واجهة المستخدم التفاعلية، على سبيل المثال، تطبيق \"الكتابة\" Text.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "يمكنك الرّد على الرسائل أو إعادة توجيهها إلى دردشات أو أشخاص آخرين أو نسخ محتوى الرسالة.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ افعل المزيد باستخدام \"اللاقط الذكي\" Smart Picker \n\nما عليك سوى كتابة \"/\" أو الانتقال إلى قائمة \"+\" لفتح \"اللاقط الذكي\"؛ حيث يمكنك إرفاق محتوىً متنوع مع رسائلك. يمكنك تهيئة اللاقط الذكي لتتمكن من إضافة عناصر من تطبيقات نكست كلاود وصور GIF ومواقع الخرائط والمحتوى الذي تم إنشاؤه بواسطة الذكاء الاصطناعي وغير ذلك كثير.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ إدارة إعدادات المحادثة \n\nفي قائمة المحادثة، يمكنك الوصول إلى إعدادات مختلفة لإدارة محادثاتك، مثل: \n* تحرير معلومات المحادثة \n* إدارة الإشعارات \n* تطبيق قواعد تعديل متعددة \n* إعدادات حق الوصول والأمان \n* تمكين روبوتات الردود الآلية bot\n* والمزيد!", + "Andorra" : "أندورا", + "United Arab Emirates" : "الإمارات العربية المتحدة", + "Afghanistan" : "أفغانستان", + "Antigua and Barbuda" : "أنتيغوا وبربودا", + "Anguilla" : "أنغيلا", + "Albania" : "ألبانيا", + "Armenia" : "أرمينيا", + "Angola" : "أنغولا", + "Antarctica" : "القارة القطبية الجنوبية", + "Argentina" : "الأرجنتين", + "American Samoa" : "ساموا الأمريكية", + "Austria" : "النمسا", + "Australia" : "أستراليا", + "Aruba" : "أروبا", + "Åland Islands" : "جزر آلاند", + "Azerbaijan" : "أذربيجان", + "Bosnia and Herzegovina" : "البوسنة والهرسك", + "Barbados" : "بربادوس", + "Bangladesh" : "بنغلاديش", + "Belgium" : "بلجيكا", + "Burkina Faso" : "بوركينا فاسو", + "Bulgaria" : "بلغاريا", + "Bahrain" : "البحرين", + "Burundi" : "بوروندي", + "Benin" : "البنين", + "Saint Barthélemy" : "سانت بارتيليمي", + "Bermuda" : "برمودا", + "Brunei Darussalam" : "بروناي دار السلام", + "Bolivia, Plurinational State of" : "بوليفيا المتعددة القوميات", + "Bonaire, Sint Eustatius and Saba" : "بونير وسانت أوستاتيوس وسابا", + "Brazil" : "البرازيل", + "Bahamas" : "جزر البهاما", + "Bhutan" : "بوتان", + "Bouvet Island" : "جزيرة بوفيت", + "Botswana" : "بوتسوانا", + "Belarus" : "بيلاروسيا", + "Belize" : "بليز", + "Canada" : "كندا", + "Cocos (Keeling) Islands" : "جزر كوكوس (كيلينغ)", + "Congo, the Democratic Republic of the" : "جمهورية الكونغو الديمقراطية", + "Central African Republic" : "جمهورية افريقيا الوسطى", + "Congo" : "الكونغو", + "Switzerland" : "سويسرا", + "Côte d'Ivoire" : "ساحل العاج", + "Cook Islands" : "جزر كوك", + "Chile" : "تشيلي", + "Cameroon" : "الكاميرون", + "China" : "الصين", + "Colombia" : "كولومبيا", + "Costa Rica" : "كوستاريكا", + "Cuba" : "كوبا", + "Cabo Verde" : "كابو فيردي", + "Curaçao" : "كوراساو", + "Christmas Island" : "جزيرة الكريسماس", + "Cyprus" : "قبرص", + "Czechia" : "التشيك", + "Germany" : "ألمانيا", + "Djibouti" : "جيبوتي", + "Denmark" : "الدانمارك", + "Dominica" : "دومينيكا", + "Dominican Republic" : "جمهورية الدومينيكان", + "Algeria" : "الجزائر", + "Ecuador" : "الاكوادور", + "Estonia" : "إستونيا", + "Egypt" : "مصر", + "Western Sahara" : "الصحراء الغربية", + "Eritrea" : "إريتريا", + "Spain" : "إسبانيا", + "Ethiopia" : "إثيوبيا", + "Finland" : "فنلندا", + "Fiji" : "فيجي", + "Falkland Islands (Malvinas)" : "جزر فوكلاند (مالفيناس)", + "Micronesia, Federated States of" : "ولايات ميكرونيسيا المتحدة", + "Faroe Islands" : "جزر فاروس", + "France" : "فرنسا", + "Gabon" : "الغابون", + "United Kingdom of Great Britain and Northern Ireland" : "المملكة المتحدة لبريطانيا العظمى وأيرلندا الشمالية", + "Grenada" : "غرينادا", + "Georgia" : "جيورجيا", + "French Guiana" : "غيانا الفرنسية", + "Guernsey" : "غيرنزي", + "Ghana" : "غانا", + "Gibraltar" : "جبل طارق", + "Greenland" : "جرينلاند", + "Gambia" : "غامبيا", + "Guinea" : "غينيا", + "Guadeloupe" : "غوادلوب", + "Equatorial Guinea" : "غينيا الإستوائية", + "Greece" : "اليونان", + "South Georgia and the South Sandwich Islands" : "جورجيا الجنوبية وجزر ساندويتش الجنوبية", + "Guatemala" : "غواتيمالا", + "Guam" : "غوام", + "Guinea-Bissau" : "غينيا بيساو", + "Guyana" : "غيانا", + "Hong Kong" : "هونج كونج", + "Heard Island and McDonald Islands" : "قلب الجزيرة وجزر ماكدونالز", + "Honduras" : "هندوراس", + "Croatia" : "كرواتيا", + "Haiti" : "هايتي", + "Hungary" : "هنغاريا", + "Indonesia" : "أندونيسيا", + "Ireland" : "أيرلندا", + "Israel" : "الكيان الصهيوني", + "Isle of Man" : "جزيرة مان", + "India" : "الهند", + "British Indian Ocean Territory" : "إقليم المحيط البريطاني الهندي", + "Iraq" : "العراق", + "Iran, Islamic Republic of" : "إيران", + "Iceland" : "ايسلندا", + "Italy" : "إيطاليا", + "Jersey" : "جيرسي", + "Jamaica" : "جامايكا", + "Jordan" : "الأردن", + "Japan" : "اليابان", + "Kenya" : "كينيا", + "Kyrgyzstan" : "قيرغيزستان", + "Cambodia" : "كمبوديا", + "Kiribati" : "كيريباتي", + "Comoros" : "جزر القمر", + "Saint Kitts and Nevis" : "سانت كيتس ونيفيس", + "Korea, Democratic People's Republic of" : " جمهورية كوريا الشعبية الديمقراطية", + "Korea, Republic of" : "جمهورية كوريا", + "Kuwait" : "الكويت", + "Cayman Islands" : "جزر كايمان", + "Kazakhstan" : "كازاخستان", + "Lao People's Democratic Republic" : "جمهورية لاو الديمقراطية الشعبية", + "Lebanon" : "لبنان", + "Saint Lucia" : "سانت لوسيا", + "Liechtenstein" : "ليختنشتاين", + "Sri Lanka" : "سيريلانكا", + "Liberia" : "ليبيريا", + "Lesotho" : "ليسوتو", + "Lithuania" : "ليتوانيا", + "Luxembourg" : "لوكسمبورغ", + "Latvia" : "لاتفيا", + "Libya" : "ليبيا", + "Morocco" : "المغرب", + "Monaco" : "موناكو ", + "Moldova, Republic of" : "جمهورية مولدوفا", + "Montenegro" : "الجبل الأسود", + "Saint Martin (French part)" : "سانت مارتن (الجزء الفرنسي)", + "Madagascar" : "مدغشقر", + "Marshall Islands" : "جزر مارشال", + "North Macedonia" : "الجبل الأسود الشمالية", + "Mali" : "مالي", + "Myanmar" : "ميانمار", + "Mongolia" : "منغوليا", + "Macao" : "ماكاو", + "Northern Mariana Islands" : "جزر ماريانا الشمالية", + "Martinique" : "مارتينيك", + "Mauritania" : "موريطانيا", + "Montserrat" : "مونتسرات", + "Malta" : "مالطا", + "Mauritius" : "موريشيوس", + "Maldives" : "جزر المالديف", + "Malawi" : "ملاوي", + "Mexico" : "المكسيك", + "Malaysia" : "ماليزيا", + "Mozambique" : "موزمبيق", + "Namibia" : "ناميبيا", + "New Caledonia" : "كاليدونيا الجديدة", + "Niger" : "النيجر", + "Norfolk Island" : "جزيرة نورفولك", + "Nigeria" : "نيجيريا", + "Nicaragua" : "نيكاراغوا", + "Netherlands" : "هولندا", + "Norway" : "النرويج", + "Nepal" : "نيبال", + "Nauru" : "ناورو", + "Niue" : "نييوي", + "New Zealand" : "نيوزلاندا ", + "Oman" : "عمان", + "Panama" : "بنما", + "Peru" : "بيرو", + "French Polynesia" : "بولينيزيا الفرنسية", + "Papua New Guinea" : "بابوا غينيا الجديدة", + "Philippines" : "الفلبين", + "Pakistan" : "باكستان", + "Poland" : "بولونيا", + "Saint Pierre and Miquelon" : "سانت بيير وميكلون", + "Pitcairn" : "جزر بيتكيرن", + "Puerto Rico" : "بورتوريكو", + "Palestine, State of" : "فلسطين", + "Portugal" : "البرتغال", + "Palau" : "بالاو", + "Paraguay" : "باراغواي", + "Qatar" : "قطر", + "Réunion" : "ريونيون", + "Romania" : "رومانيا", + "Serbia" : "صربيا ", + "Russian Federation" : "روسيا ", + "Rwanda" : "رواندا", + "Saudi Arabia" : "السعودية ", + "Solomon Islands" : "جزر سليمان", + "Seychelles" : "سيشيل", + "Sudan" : "السودان", + "Sweden" : "السويد", + "Singapore" : "سنغافورة", + "Saint Helena, Ascension and Tristan da Cunha" : "سانت هيلينا وأسينشين وتريستان دا كونا", + "Slovenia" : "سلوفينيا", + "Svalbard and Jan Mayen" : "سفالبارد وجان ماين", + "Slovakia" : "سلوفاكيا", + "Sierra Leone" : "سيراليون", + "San Marino" : "سان مارينو", + "Senegal" : "السنيغال", + "Somalia" : "الصومال", + "Suriname" : "سورينام", + "South Sudan" : "جنوب السودان", + "Sao Tome and Principe" : "ساو تومي وبرينسيبي", + "El Salvador" : "السلفادور", + "Sint Maarten (Dutch part)" : "سانت مارتن (الجزء الهولندي)", + "Syrian Arab Republic" : "سوريا", + "Eswatini" : "إسواتيني", + "Turks and Caicos Islands" : "جزر تركس وكايكوس", + "Chad" : "تشاد", + "French Southern Territories" : "مدن جنوب فرنسا", + "Togo" : "توجو", + "Thailand" : "تايلاند", + "Tajikistan" : "طاجيكستان", + "Tokelau" : "توكيلاو", + "Timor-Leste" : "تيمور الشرقية", + "Turkmenistan" : "تركمانستان", + "Tunisia" : "تونس", + "Tonga" : "تونغا", + "Turkey" : "تركيا", + "Trinidad and Tobago" : "ترينيداد وتوباغو", + "Tuvalu" : "توفالو", + "Taiwan, Province of China" : "مقاطعة تايوان الصينية", + "Tanzania, United Republic of" : "جمهورية تنزانيا المتحدة", + "Ukraine" : "أوكرانيا", + "Uganda" : "أوغندا", + "United States Minor Outlying Islands" : "جزر الولايات المتحدة البعيدة الصغرى", + "United States of America" : "الولايات المتحدة الأمريكية", + "Uruguay" : "أوروغواي", + "Uzbekistan" : "أوزبكستان", + "Holy See" : "الكرسي الرسولي دولة الفاتيكان", + "Saint Vincent and the Grenadines" : "سانت فنسنت وجزر غرينادين", + "Venezuela, Bolivarian Republic of" : "جمهورية فنزويلا البوليفارية", + "Virgin Islands, British" : "جزر العذراء، البريطانية", + "Virgin Islands, U.S." : "جزر العذراء، الأمريكية", + "Viet Nam" : "فييتنام", + "Vanuatu" : "فانواتو", + "Wallis and Futuna" : "جزر واليس وفوتونا", + "Samoa" : "ساموا", + "Yemen" : "اليمن", + "Mayotte" : "مايوت", + "South Africa" : "إفريقيا الجنوبية", + "Zambia" : "زامبيا", + "Zimbabwe" : "زيمبابوي", + "Background blur" : "تضبيب خلفية الصورة", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "تعذر التحقُّق من دعم تحميل WASM. يرجى التحقق يدويًا مما إذا كان خادوم الويب لديك يتعامل مع ملفات `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "لم يتم إعداد خادوم الويب لديك بالشكل الصحيح للتعامل مع ملفات `.wasm`. عادةً ما تكون هذه مشكلة في تكوين خادوم الويب Nginx. بالنسبة إلى الخلفية الضبابية، فإنها تحتاج إلى التعديل كذلك للتعامل مع ملفات \".wasm\". قارن إعدادات Nginx بالإعدادات الموصى بها في وثائق النظام.", + "Talk configuration values" : "قيم تهيئة تطبيق \"المحادثة\" Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "يتم دعم فرض مدة المكالمة فقط مع نظام cron. الرجاء تمكين cron النظام أو إزالة تكوين \"max_call_duration\".", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "قيم `max_call_duration` الصغيرة (المضبوطة حاليًا على %d) غير قابلة للتنفيذ بسبب القيود الفنية. يتم تنفيذ مهمة الخلفية كل 5 دقائق فقط، لذا استخدمها على مسؤوليتك الخاصة.", + "Federation" : "الربط عبر السحابة الموحدة", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "يوصى بشدة بتهيئة \"memcache.locking\" عند تمكين المحادثة الاتحادية.", + "High-performance backend" : "خلفية أعلى اداء", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "لم يتم تكوين واجهة خلفية عالية الأداء لتشغيل تطبيق \"المحادثة\" Talk من نكست كلاود. بدون واجهة خلفية عالية الأداء لا يمكن التعامل إلا مع عدد محدود من المكالمات (بحد أقصى 2-3 مشاركين). يُرجى إعداد الواجهة الخلفية عالية الأداء لضمان عمل المكالمات التي تضم أعداداً أكبر من المشاركين.\n\n\n ", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "وضع \"conversation_cluster\" في الواجهة الخلفية عالية الأداء صار قديمًا ولن يتم دعمه بعد الآن في الإصدارات القادمة. الواجهة الخلفية عالية الأداء تدعم التجميع الحقيقي real-clustering في الوقت الحالي والذي يجب استخدامه بدلاً من ذلك.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "لقد أصبح تحديد العديد من الخوادم الخلفية عالية الأداء غير مستحسن ولن يتم دعمه بعد الآن في الإصدارات القادمة. و بدلاً من ذلك، يجب إعداد موازن التحميل load balancer مع خوادم الإشارات المجمعة وتكوينه في إعدادات تطبيق \"المحادثة\" Talk.", + "High-performance backend not configured correctly" : "خلفية الأداء العالي HP backend ليست مُهيّأةً بالطريقة الصحيحة", + "Error: Cannot connect to server" : "خطأ: لا يمكن الاتصال بالخادم", + "Error: Server did not respond with proper JSON" : "خطأ: الخادم لم يجب جيدا JSON", + "Error: Certificate expired" : "خطأ: انتهت صلاحية الشهادة", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خطأ: أوقات النظام لخادوم نكست كلاود وخادوم الأداء العالي High Performance في الخلفية غير متزامنة. يرجى التأكد من أن كلا الخادومين متصلان بخادوم توقيت موحد أو قم بمزامنة وقتيهما يدوياً.", + "Could not get version" : "تعذر الحصول على الإصدار", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "خطأ: إصدار قيد التشغيل: {version} ؛ يحتاج الخادم إلى التحديث حتى يكون متوافقًا مع هذا الإصدار من تطبيق Talk", + "Error: Server responded with: {error}" : "خطأ: الخادم اجاب بـ: {error}", + "Error: Unknown error occurred" : "خطأ: غير معروف", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "تحذير: الخادوم في الإصدار الذي تعمل عليه: {version}؛ لا يدعم جميع ميزات هذا الإصدار من تطبيق \"المحادثة\" Talk، و هو يفتقد للميزات: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "يوصى بشدة بتهيئة ذاكرة تخزين مؤقت cache عند تشغيل تطبيق \"المحادثة\" Talk في نكست كلاود بواجهة خلفية عالية الأداء .", + "Client Push" : "دفع المعلومات من جهة العميل Client Push", + "Recording backend" : "خلفية التسجيل", + "Using the recording backend requires a High-performance backend." : "لاستعمال تسجيل المحادثات في الخلفية يلزمك خلفية عالية الأداء.", + "No recording backend configured" : "لاتوجد خلفية عالية الأداء للتسجيل", + "SIP configuration" : "إعدادات SIP", + "Using the SIP functionality requires a High-performance backend." : "لاستعمال خاصية الاتصال الهاتفي SIP يلزمك خلفية عالية الأداء.", + "No SIP backend configured" : "لاتوجد خلفية عالية الأداء لإدارة جلسات المكالمات SIP", + "Invalid date, date format must be YYYY-MM-DD" : "تاريخ غير صحيح, يجب أن يكون تنسيق التاريخ YYYY-MM-DD", + "Conversation not found" : "المحادثة غير موجودة", + "Path is already shared with this conversation" : "المسار سبقت مشاركته سلفاً مع هذه المحادثة", + "Chat, video & audio-conferencing using WebRTC" : "الدردشة والفيديو والمؤتمرات الصوتية باستخدام WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "الدردشة والفيديو والمؤتمرات الصوتية باستخدام WebRTC\n\n * 💬 **الدردشة** يأتي تطبيق المحادثة Talk في نكست كلاود مع محادثة نصية بسيطة، مما يسمح لك بمشاركة أو تحميل الملفات من تطبيق الملفات Files في نكست كلاود أو من الجهاز المحلي، و الإشارة إلى المشاركين الآخرين. \n* 👥 **مكالمات خاصة وجماعية وعامة ومحمية بكلمة مرور! ** قم بدعوة شخص ما أو مجموعة كاملة أو أرسل رابطًا عامًا للدعوة لإجراء مكالمة.\n * 🌐 **الدردشات الموحدة** قم بالدردشة مع مستخدمي نكست كلاود الآخرين على خوادمهم \n* 💻 **مشاركة الشاشة!** شارك شاشتك مع المشاركين في مكالمتك. \n* 🚀 **التكامل مع تطبيقات نكست كلاود الأخرى** مثل الملفات والتقويم وحالة المستخدم ولوحة المعلومات وأتمتة سير العمل والخرائط و اللاقط الذكي وجهات الاتصال و رزم البطاقات وغير ذلك الكثير. \n* 🌉 **المزامنة مع حلول الدردشة الأخرى** من خلال دمج [Matterbridge] (https://github.com/42wim/matterbridge/) في Talk، يمكنك بسهولة مزامنة الكثير من حلول الدردشة الأخرى مع تطبيق المحادثة Talk في نكست كلاود، و كذلك بالعكس.", + "Leave call" : "مغادرة المكالمة", + "Navigating away from the page will leave the call in {conversation}" : "الخروج من هذه الصفحة سيؤدي لمغادرة المكالمة في {conversation}", + "Stay in call" : "البقاء في المكالمة", + "Discuss this file" : "مناقشة هذا الملف", + "Share this file with others to discuss it" : "مشاركة هذا الملف للمناقشة", + "Share this file" : "مشاركة هذا الملف", + "Join conversation" : "انضمام للمحادثة", + "This conversation is password-protected." : "هذه المحادثة محمية بكلمة مرور.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "لقد اكتشفنا عدة محاولات غير صالحة لكلمة المرور من عنوان IP الخاص بك. لذلك سوق يتم تقييد محاولتك التالية لمدة تصل إلى 30 ثانية.", + "The password is wrong. Try again." : "كلمة المرور خاطئة. حاول مرة أخرى.", + "Password" : "الكلمة السرية", + "Submit" : "إرسال ", + "Error requesting the password." : "خطأ في طلب كلمة المرور", + "Request password" : "طلب كلمة المرور", + "This conversation has ended" : "المحادثة انتهت", + "Error occurred when joining the conversation" : "حدث خطأ أثناء الانضمام إلى المحادثة", + "Close Talk sidebar" : "إغلاق الشريط الجانبي لتطبيق Talk", + "Open Talk sidebar" : "فتح الشريط الجانبي لتطبيق Talk", + "Everyone" : "الجميع", + "Users and moderators" : "الأعضاء والمشرفين", + "Moderators only" : "المشرفين فقط", + "Disable calls" : "تعطيل المكالمات", + "Save changes" : "حفظ التعديلات", + "Saving …" : "جاري الحفظ…", + "Saved!" : "تم الحفظ!", + "Limit to groups" : "التقيد إلى مجموعات", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "عند تحديد مجموعة واحدة، الاعضاء في هذه المجموعة فقط سيشاركون في هذه المحادثة.", + "Guests can still join public conversations." : "الضيوف بإمكانهم الانضمام للمحادثات العامة.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "المستخدمين الذين لا يمكنهم استخدام التحدث Talk بعد الآن سيظهورن كمشاركين في قائمة المحادثات السابقة وأيضًا سيتم حفظ رسائل محادثاتهم.", + "Limit using Talk" : "تقييد استخدام تطبيق التحدث", + "Limit creating a public and group conversation" : "تقييد إنشاء محادثات عامة او جماعية", + "Limit creating conversations" : "تقييد انشاء المحادثات", + "Limit starting a call" : "تقييد بدء مكالمة", + "Limit starting calls" : "تقييد بدء المكالمات", + "When a call has started, everyone with access to the conversation can join the call." : "في حين مكالمة بدأت، الجميع بصلاحية للمحادثات بإمكانه الانضمام للمكالمة.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "تم تثبيت الروبوتات التالية على هذا الخادوم. في الوثائق، يمكنك العثور على تفاصيل حول كيفية {linkstart1} إنشاء روبوتك الخاص{linkend} أو {linkstart2} قائمة الروبوتات {linkend} لتمكينها على خادومك.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "لم يتم تثبيت أي روبوتات على هذا الخادوم. في الوثائق، يمكنك العثور على تفاصيل حول كيفية {linkstart1} إنشاء روبوتك الخاص{linkend} أو {linkstart2} قائمة الروبوتات {linkend} لتمكينها على خادومك.", + "Description is not provided" : "الوصف غير موجود", + "Locked for moderators" : "مقفل للمشرفين", + "Enabled" : "مُفعّل", + "Disabled" : "معطّل", + "Bots settings" : "إعدادات الروبوتات Bots", + "State" : "الحالة", + "Name" : "الاسم", + "Last error" : "آخر خطأ", + "Total errors count" : "العدد الإجمالي للأخطاء", + "Find more bots" : "أعثُر على المزيد من الروبوتات", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "يمكن تكوين الخوادم الموثوقة في {linkstart} صفحة إعدادات المشاركة {linkend}.", + "Beta" : "تجريبي", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "المحادثات والمكالمات الاتحادية تعمل بالفعل. سيتم إضافة إمكانية التعامل مع المرفقات في إصدار مستقبلي.", + "Enable Federation in Talk app" : "تمكين تطبيق \"المحادثة\" من التواصل عبر السحابة الموحدة", + "Permissions" : "التصريحات", + "Allow users to be invited to federated conversations" : "السماح للمستخدِمين بأن تتم دعوتهم إلى المحادثات الاتحادية", + "Allow users to invite federated users into conversation" : "السماح للمستخدِمين بدعوة مستخدِمين من السحابة الموحدة إلى المحادثة ", + "Only allow to federate with trusted servers" : "السماح فقط بالاتحاد مع الخوادم الموثوقة", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "عند تحديد مجموعة واحدة على الأقل، يمكن لأشخاص المجموعات المدرجة فقط دعوة المستخدِمين من السحابة الموحدة إلى المحادثة.", + "Groups allowed to invite federated users" : "المجموعات التي يحق لها دعوة مستخدِمين من السحابة الموحدة", + "Select groups …" : "تحديد المجموعات ...", + "All messages" : "كافة الرسائل", + "@-mentions only" : "@-إشارة فقط", + "Off" : "إيقاف", + "General settings" : "الإعدادات العامة", + "Default notification settings" : "إعدادات الإشعارات الافتراضية", + "Default group notification" : "تنبيه المجموعة الافتراضي", + "Default group notification for new groups" : "تنبيه المجموعة الافتراضي للمجموعات الجديدة", + "Integration into other apps" : "الربط مع تطبيقات آخرى", + "Allow conversations on files" : "السماح بالمحادثات على الملفات", + "Allow conversations on public shares for files" : "السماح للمحادثات عبر مشاركة الملفات العامة", + "End-to-end encrypted calls" : "محادثات مشفرة من الحدّ للحدّ", + "Enable encryption" : "تمكين التشفير", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "تتطلب المكالمات المشفرة من الحد للحد باستخدام جسر SIP مُهيّإٍ إصداراً أحدث من الواجهة الخلفية للأداء العالي وجسر SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "الهواتف النقالة العميلة لا تدعم المكالمات المشفرة من الحد للحد في الوقت الحاضر.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "بالنقر فوق الزر أعلاه، يتم إرسال المعلومات الواردة في النموذج إلى خوادم شركة Struktur AG. يمكنك العثور على مزيد من المعلومات على {linkstart} spreed.eu {linkend}.", + "Pending" : "معلّق", + "Error" : "خطأ", + "Blocked" : "محجوب", + "Active" : "فعال", + "Expired" : "منتهي", + "Never" : "مُطلَقاً", + "The trial could not be requested. Please try again later." : "لا يمكن طلب التجربة. يرجى إعادة المحاولة لاحقًا. ", + "The account could not be deleted. Please try again later." : "لا يمكن حذف الحساب، يرجى المحاولة لاحقا.", + "Hosted High-performance backend" : "خلفية مستضافة عالية الأداء ", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "يوفر شريكنا Struktur AG خدمة حيث يمكن طلب خادم التشوير المستضاف. لهذا ما عليك سوى ملء النموذج أدناه وسيطلبه نكست كلاود الخاص بك. وبمجرد تعيين الخادم لك، سيتم ملء بيانات الاعتماد تلقائيًا. سيؤدي هذا إلى الكتابة فوق إعدادات خادم التشوير الحالي.", + "URL of this Nextcloud instance" : "الرابط لهذا الخادم السحابي نكست كلاود", + "Full name of the user requesting the trial" : "الاسم الكامل للمستخدم الذي يطلب التجربة", + "Email of the user" : "البريد الالكتروني للمستخدم ", + "Language" : "اللغة", + "Country" : "البلد", + "Request signaling server trial" : "طلب تجربة خادم التشوير", + "You can see the current status of your hosted signaling server in the following table." : "يمكنك رؤية الحالة الحالية لخادم التشوير المستضاف في الجدول التالي.", + "Status" : "الحالة", + "Created at" : "انشأت في", + "Expires at" : "انتهت في", + "Limits" : "التقييد", + "Yes" : "نعم", + "No" : "لا", + "Delete the signaling server account" : "حذف حساب خادم التشوير ", + "_%n user_::_%n users_" : ["%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم ","%n مستخدم"], + "Installed version: {version}" : "الاصدار المثبت: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "يمكنك تثبيت Matterbridge لربط Nextcloud Talk ببعض الخدمات الأخرى ، قم بزيارة {linkstart1} صفحة جيت هب {linkend} الخاصة بهم لمزيد من التفاصيل. قد يستغرق تنزيل التطبيق وتثبيته بعض الوقت. في حالة انتهاء المهلة، يرجى تثبيته يدويًا من {linkstart2} متجر تطبيقات نكست كلود {linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "كود \"ماتر بريدج\" Matterbridge binary لايملك الأذونات الصحيحة المطلوبة. رجاءً، تأكد من أن المستخدِم مالك ملف كود \"ماتر بريدج\" Matterbridge binary يحمل الصلاحيات اللازمة بحيث يمكن تنفيذه. يمكن إيجاده في: \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "لم يتم العثور على ملف Matterbridge الثنائي أو تعذر تنفيذه.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "يمكنك أيضًا تعيين المسار إلى ثنائي Matterbridge يدويًا عبر التكوين. راجع {linkstart} وثائق تكامل Matterbridge {linkend} للحصول على مزيد من المعلومات.", + "Downloading …" : "جاري التحميل…", + "Install Talk Matterbridge" : "تثبيت Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "حدث خطأ أثناء تنصيب تطبيق Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "حدث خطأ أثناء تنصيب the Talk Matterbridge. رجاءً، قُم بتنصيبه يدوياً", + "Failed to execute Matterbridge binary." : "فشل تنفيذ برنامج Matterbridge الثنائي.", + "Matterbridge integration" : "تكامل Matterbridge", + "Enable Matterbridge integration" : "تعطيل تكامل Matterbridge", + "Status: Checking connection" : "الحالة: فحص الاتصال", + "OK: Running version: {version}" : "ممتاز: الاصدار التشغيلي: {version}", + "Error: Server seems to be a Signaling server" : "خطأ: يبدو أن الخادوم هو خادوم إشارة Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خطأ: أوقات النظام لخادوم نكست كلاود وخادوم التسجيل الصوتي للمكالمات في الخلفية غير متزامنة. يرجى التأكد من أن كلا الخادومين متصلان بخادوم توقيت موحد أو قم بمزامنة وقتيهما يدوياً.", + "Recording backend URL" : "عنوان URL خلفية التسجيل", + "Validate SSL certificate" : "التحقق من صلاحية شهادة SSL", + "Delete this server" : "حذف هذا الخادم", + "Test this server" : "جرّب هذا الخادم", + "Disabled for all calls" : "تمّ تعطيله لكل المكالمات", + "Enabled for all calls" : "تمّ تمكينه لكل المكالمات", + "Configurable on conversation level by moderators" : "يمكن تهيئته على مستوى المحادثة من قِبَل المشرفين", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "أعدادات PHP ـ \"upload_max_filesize\" أو \"post_max_size\" فقط ستسمح برفع ملفات ٍإلى {maxUpload}.", + "Recording backend settings saved" : "تمّ حفظ إعدادات خلفية التسجيل recording backend", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "المشرفون يمكنهم تمكين الإذونات على مستوى المحادثة. الإذن بالتسجيل مطلوب من كل مشارك قبل الانضمام لكل مكالمة في هذه المحادثة.", + "The consent to be recorded will be required for each participant before joining every call." : "الإذن بالتسجيل سيُطلب من كل مشارك قبل الانضمام لكل مكالمة. ", + "The consent to be recorded is not required." : "الإذن بالتسجيل ليس مطلوباً.", + "Recording backend configuration is only possible with a High-performance backend." : "تهيئة خلفية التسجيل ممكنة فقط بوجود خلفية عالية الأداء.", + "Add a new recording backend server" : "إضافة خادم واجهة خلفية للتسجيل جديد", + "Shared secret" : "السر المشترك", + "Recording consent" : "الإذن بالتسجيل", + "Recording transcription" : "مستنسخ التسجيل ", + "Automatically transcribe call recordings with a transcription provider" : "القيام تلقائياً باستنساح تسجيلات المكالمات عبر مزود استنساخ", + "Automatically summarize call recordings with transcription and summary providers" : "القيام تلقائياً بتلخيص تسجيلات المكالمات عبر مزود استنساخ و تلخيص", + "SIP configuration saved!" : "تم حفظ تكوين SIP!", + "SIP configuration is only possible with a High-performance backend." : "تهيئة إدارة جلسات المكالمات SIP ممكنة فقط بوجود خلفية عالية الأداء.", + "Enable SIP Dial-out option" : "تمكين خيار الطلب الهاتفي SIP.", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "يحتاج خادوم الإشارة Signaling server إلى التحديث إلى ميزة الطلب الهاتفي SIP المدعومة.", + "Restrict SIP configuration" : "تقييد إعدادات SIP", + "Enable SIP configuration" : "تفعيل إعدادات SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "السماح فقط للمستخدمين من المجموعات التالية بتفعيل SIP في اشرافهم على المحادثات.", + "Phone number (Country)" : "رقم الجوال (الدولة)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "هذه المعلومات مرسله من بريد الدعوة وظاهرة ايضا في الشريط الجانبي لجميع المشاركين.", + "Nextcloud base URL" : "عنوان URL الأساسي لنكست كلاود", + "Talk Backend URL" : "عنوان URL لخلفية \"المحادثة\" Talk", + "WebSocket URL" : "عنوان URL لـ\"مَقبَس الوِب\" WebSocket", + "Available features" : "الخصائص المُتَاحة", + "Error code" : "رقم الخطأ", + "Error: Websocket connection failed. Check browser console" : "خطأ: فشل الاتصال عن طريق \"مقبس الوب\" WebSocket. أنظُر طَرَفِيّة المُتصَفِّح browser console", + "High-performance backend URL" : "رابط خلفية أعلى اداء", + "Missing High-performance backend warning hidden" : "التحذير من عدم وجود خلفية للأداء العالي لن يتم إظهاره", + "High-performance backend settings saved" : "تم حفظ إعدادات الواجهة الخلفية عالية الأداء", + "Nextcloud Talk setup not complete" : "تهيئة \"المحادثة\" Talk من نكست كلاود لم تكتمل بعدُ.", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "يرجى ملاحظة أنه في المكالمات التي يكون فيها عدد المشاركين أكثر من 2 دون استخدام خلفية الأداء العالي، فمن المرجح أن يواجه المشاركون مشكلات في الاتصال قد يسبب تحميلًا عاليًا على الأجهزة المشاركة.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "قُم بتثبيت خلفية الأداء العالي لضمان العمل بسلاسة لمكالمات متعددة المتشاركين.", + "Nextcloud portal" : "بوابة نكست كلاود", + "Quick installation guide" : "دليل التثبيت السريع", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "خلفية الأداء العالي لازمة لإجراء مكالمات ومحادثات فيها متشاركون عديدون. وبدون هذه الخلفية، يتعين على جميع المشاركين تحميل مقاطع الفيديو الخاصة بهم بشكل فردي لكل مشارك آخر؛ الأمر الذي قد يتسبب في حدوث مشكلات في الاتصال وزيادة الحمل على الأجهزة المشاركة.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "يوصى بشدة بإعداد ذاكرة تخزين مؤقتة موزعة distriburted cache عند استخدام \"المحادثة\" Talk من نكست كلاود مع خلفية للأداء العالي.", + "Add High-performance backend server" : "إضافة خادوم خلفية الأداء العالي", + "Warn about connectivity issues in calls with more than 2 participants" : "تحذير حول إشكاليات في الاتصال بالنسبة للمكالمات التي فيها أكثر من 2 مُشَارِكَيْن.", + "STUN server URL" : "عنوان URL لخادم STUN", + "The server address is invalid" : "عنوان الخادم غير صالح", + "STUN settings saved" : "تم حفظ إعدادات خادم STUN", + "STUN servers" : "خوادم STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "يتم استخدام خادم STUN لتحديد عنوان IP العام للمشاركين خلف جهاز توجيه.", + "Add a new STUN server" : "إضافة خادم STUN جديد", + "{schema} scheme must be used with a domain" : "{schema} يجب أن يستخدم من نطاق معين ", + "{option1} and {option2}" : "{خيار1} و {خيار2}", + "{option} only" : "{option} فقط ", + "OK: Successful ICE candidates returned by the TURN server" : "حسنًا: تم إرجاع مرشحي ICE بواسطة خادم TURN بنجاح", + "Error: No working ICE candidates returned by the TURN server" : "خطأ: لم يتم إرجاع أي من مرشحي ICE بواسطة خادم TURN", + "Testing whether the TURN server returns ICE candidates" : "تجربة ما إذا كان خادم TURN يعرض مرشحات ICE", + "TURN server schemes" : "نظم خادم TURN", + "TURN server URL" : "عنوان URL لخادم TURN", + "TURN server secret" : "سر خادم TURN", + "TURN server protocols" : "بروتوكلات خادم TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "يتم استخدام خادم TURN لتوكيل مرور المشاركين خلف جدار الحماية. إذا لم يتمكن المشاركون الأفراد من الاتصال بالآخرين، فمن المرجح أن يكون خادم TURN مطلوبًا. راجع {linkstart} هذه الوثائق {linkend} للحصول على إرشادات الإعداد.", + "TURN settings saved" : "تم حفظ إعدادات خادم TURN", + "TURN servers" : "خوادم TURN", + "Add a new TURN server" : "إضافة خادم TURN جديد", + "Failed" : "فشل", + "OK" : "موافق", + "Checking …" : "جاري التحقق … ", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "فشل: تم تعطيل WebAssembly أو أنه غير مدعوم في هذا المتصفح. يرجى تمكين WebAssembly أو استخدام متصفح يدعمه لإجراء الفحص.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "فشل: لم يتم إرجاع ملفات \".wasm\" و \".tflite\" بشكل صحيح من قبل خادم الويب. الرجاء مراجعة قسم \"متطلبات النظام\" في وثائق تطبيق Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "حسنًا: تم إرجاع ملفات \".wasm\" و \".tflite\" بشكل صحيح من قبل خادم الويب.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "يبدو أن إعدادات PHP و Apache غير متوافقة. يرجى ملاحظة أنه لا يمكن استخدام PHP إلا مع الوحدة النمطية MPM_PREFORK ولا يمكن استخدام PHP-FPM إلا مع الوحدة النمطية MPM_EVENT.", + "Web server setup checks" : "التحقق من تنصيب خادم الويب", + "Files required for virtual background can be loaded" : "يمكن تحميل الملفات المطلوبة للخلفية الافتراضية", + "Federated user" : "مستخدِم السحابة الموحدة", + "Assign participants to rooms" : "تعيين المشاركين للغرف", + "Configure breakout rooms" : "تهيئة الغرف الجانبية", + "Number of breakout rooms" : "عدد الغرف الجانبية", + "You can create from 1 to 20 breakout rooms." : "يمكنك إنشاء من 1 حتى 20 غرفة جانبية.", + "Assignment method" : "طريقة التكليف", + "Automatically assign participants" : "تعيين المشاركين تلقائيًا", + "Manually assign participants" : "تعيين المشاركين يدويًا", + "Allow participants to choose" : "السماح للمشاركين بالاختيار", + "Create rooms" : "إنشاء غرف", + "Confirm" : "تأكيد", + "Create breakout rooms" : "إنشاء غرف جانبية", + "Reset" : "إعادة الضبط", + "Delete breakout rooms" : "حذف الغرف الجانبية", + "Room {roomNumber}" : "غرفة {roomNumber}", + "Current breakout rooms and settings will be lost" : "سوف يحدث فقد للغرف الجانبية والإعدادات الحالية", + "Cancel" : "إلغاء", + "Unassigned participants" : "المشاركون غير المعينين", + "Back" : "العودة", + "Assign" : "كَلِّف", + "Add participant \"{user}\"" : "إضافة مشارك \"{user}\"", + "Now" : "الآن", + "Invalid calendar selected" : "التقويم الذي تمّ تحديده غير صحيح", + "Invalid start time selected" : "وقت البداية الذي تمّ تحديده غير صحيح", + "Invalid end time selected" : "وقت الانتهاء الذي تمّ تحديده غير صحيح", + "Unknown error occurred" : "حدث خطأ غير معروف", + "Sending no invitations" : "لم يتم إرسال أي دعوات", + "{participant0} will receive an invitation" : "{participant0} سوف يستلم دعوةً", + "{participant0} and {participant1} will receive invitations" : "{participant0} و {participant1} سوف يستلمان دعوةً", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} و %n آخرون سيستلمون دعواتٍ","{participant0}, {participant1} و %n آخرون سيستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سيستلمون دعواتٍ","{participant0}, {participant1} و%n آخرين سوف يستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سوف يستلمون دعواتٍ","{participant0}, {participant1} و %n آخرين سوف يستلمون دعواتٍ"], + "Meeting created" : "تمّ إنشاء الاجتماع", + "Upcoming meetings" : "الاجتماعات القادمة", + "Loading …" : "التحميل جارٍ …", + "Schedule a meeting" : "جدولة اجتماع", + "Meeting title" : "عنوان الاجتماع", + "From" : "مِن :", + "To" : "إلى :", + "Calendar" : "الجدول الزمني", + "Attendees" : "المشاركون", + "Add attendees" : "إضافة إلى الحُضُور", + "Save" : "حفظ", + "Search participants" : "البحث عن مشاركين", + "No results" : "دون أية نتيجة", + "Done" : "تمّ", + "Raise hand" : "رفع اليد", + "Raise hand (R)" : "رفع اليد (r)", + "Lower hand" : "خفض اليد ", + "Lower hand (R)" : "خفض اليد (R)", + "Exit full screen (F)" : "خروج من ملء الشاشة (F)", + "Full screen (F)" : "ملء الشاشة (F)", + "Speaker view" : "عرض المتحدث", + "Grid view" : "عرض كمخطط", + "Recording consent is required" : "إذن التسجيل مطلوب", + "This conversation is read-only" : "هذه المحادثة للقراءة فقط", + "Conversation not found or not joined" : "المحادثة غير موجودة أو لم يتم الانضمام إليها", + "Lobby is still active and you're not a moderator" : "صالة الاستقبال مازالت مفتوحة وأنت ليس مُنسِّقَاً", + "Connection failed" : "تعذّر الاتصال", + "Reload" : "إعادة تحميل", + "{nickName} raised their hand." : "{nickName} رفع يده ", + "A participant raised their hand." : "رفع مشارك يده. ", + "Collapse stripe" : "طي الشريط ", + "Expand stripe" : "توسيع الشريط ", + "Previous page of videos" : "الصفحة السابقة للفيديوهات ", + "Next page of videos" : "الصفحة التالية من الفيديوهات ", + "Connecting …" : "جارٍ الاتصال…", + "Calling …" : "الاتصال جارٍ ...", + "Waiting for {user} to join the call" : "في انتظار انضمام {user} إلى المكالمة", + "Waiting for others to join the call …" : "انتظار الآخريين للانضمام للمكالمة…", + "You can invite others in the participant tab of the sidebar" : "بإمكانك اضافة مشاركيين آخريين من القائمة الجانبية", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "بإمكانك اضافة مشاركيين آخريين من القائمة الجانبية أو مشاركة الرابط لدعوة الآخريين!", + "Share this link to invite others!" : "شارك هذا الرابط لدعوة الآخريين!", + "Copy link" : "انسخ الرابط", + "You are not allowed to enable audio" : "غير مسموح لك بتمكين الصوت", + "No audio. Click to select device" : "لا يوجد صَوْت. أنقُر لاختيار الجهاز", + "Mute audio" : "كتم الصوت", + "Mute audio (M)" : "كتم الصوت (M)", + "Unmute audio" : "تشغيل الصوت", + "Unmute audio (M)" : "تشغيل الصوت (M)", + "None" : "لا شيء", + "Access to camera was denied" : "تم رفض الوصول للكاميرا", + "Error while accessing camera: It is likely in use by another program" : "خطأ أثناء الوصول إلى الكاميرا: من المحتمل أن تكون قيد الاستخدام من قبل برنامج آخر", + "Error while accessing camera" : "حدث خطأ اثناء الوصول للكاميرا", + "You have been muted by a moderator" : "تم اغلاق المايكرفون الخاص بك من قبل المشرف", + "Hide presenter video" : "إخفاء فيديو مقدم العرض", + "You are not allowed to enable video" : "غير مسموح لك بتمكين الفيديو", + "No video. Click to select device" : "لايوجد فيديو. أنقُر لاختيار الجهاز", + "Disable video" : "تعطيل الفيديو", + "Disable video (V)" : "تعطيل بالفيديو (V)", + "Enable video" : "تفعيل الفيديو", + "Enable video (V)" : "تفعيل الفيديو (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "تمكين الفيديو - سوف ينقطع اتصالك مؤقّتاً عند تمكين الفيديو للمرة الاولى", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "تفعيل الفيديو (v) - سيتم قطع اتصالك للحظات عند تشغيل الفيديو للمره الأولى", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "سماح الفيديو - سيتم قطع اتصالك للحظات عند تشغيل الفيديو للمره الاولى", + "Show presenter" : "إظهار مقدم العرض", + "You" : "أنت", + "Mute" : "كتم الصوت", + "Muted" : "تم كتم الصوت", + "Show screen" : "اظهار الشاشة", + "Stop following" : "ايقاف المتابعة", + "Connection could not be established …" : "تعذر إنشاء الاتصال ...", + "Connection was lost and could not be re-established …" : "انقطع الاتصال ولا يمكن إعادة إنشائه ...", + "Connection could not be established. Trying again …" : "تعذر إنشاء الاتصال. المحاولة مرة اخرى …", + "Connection lost. Trying to reconnect …" : "انقطع الاتصال. جارٍ محاولة إعادة الاتصال ...", + "Connection problems …" : "مشاكلات في الاتصال …", + "Collapse" : "طوي", + "Expand" : "توسيع", + "You need to be logged in to upload files" : "يجب عليك تسجيل الدخول لرفع الملفات", + "Drop your files to upload" : "افلت الملفات لرفعها", + "Conversation messages" : "رسائل المحادثة ", + "Scroll to bottom" : "انتقل للاسفل", + "Post message" : "إرسال الرسالة ", + "Federated conversation" : "محادثة السحابة الموحدة", + "Public conversation" : "محادثة عمومية", + "Favorite" : "المفضلة", + "Banned users" : "مستخدِمون محظورون", + "Manage the list of banned users in this conversation." : "إدارة قائمة المستخدمين المحظورين في هذه المحادثة", + "Manage bans" : "إدارة الحظر", + "No banned users" : "لا يوجد مستخدِمون محظورون", + "Banned by:" : "محظورٌ من قِبَل:", + "Date:" : "التاريخ:", + "Note:" : "ملاحظة:", + "Hide details" : "إخفاء التفاصيل", + "Show details" : "عرض التفاصيل", + "Unban" : "رفع الحظر", + "Error while updating conversation name" : "خطأ أثناء تحميل اسم المحادثة", + "Error while updating conversation description" : "حدث خطأ أثناء تحديث وصف المحادثة", + "Enter a name for this conversation" : "أدخِل اسماً لهذه المحادثة", + "Edit conversation name" : "تعديل اسم المحادثة", + "Edit conversation description" : "تحرير وصف المحادثة", + "Enter a description for this conversation" : "ادخل وصفًا لهذه المحادثة ", + "Picture" : "صورة", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "يمكن تمكين الروبوتات bots التالية في هذه المحادثة. تواصل مع إدارتك لتثبيت المزيد من برامج الروبوت على هذا الخادوم.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "لم يتم تثبيت أي روبوتات على هذا الخادم. تواصل مع إدارتك لتثبيت برامج الروبوت على هذا الخادوم.", + "Disable" : "تعطيل", + "Enable" : "تمكين", + "Breakout rooms" : "الغرف الجانبية", + "Manage breakout rooms" : "أدِر الغرف الجانبية", + "Set up breakout rooms for this conversation" : "جهّز غرفاً جانبيةً لهذه المحادثة", + "Please select a valid PNG or JPG file" : "يرجي اختيار ملف PNG أو JPG صالح", + "Choose your conversation picture" : "إختَر صورة محادثتك", + "Choose" : "إختر", + "Error setting conversation picture" : "خطأ في تعيين صورة المحادثة", + "Could not set the conversation picture: {error}" : "تعذّر تعيين صورة المحادثة: {error}", + "Error cropping conversation picture" : "خطأ في اقتصاص صورة المحادثة", + "Error removing conversation picture" : "خطأ في حذف صورة المحادثة", + "Set emoji as conversation picture" : "تعيين إيموجي كصورة للمحادثة", + "Set background color for conversation picture" : "تعيين لون الخلفية لصورة المحادثة", + "Upload conversation picture" : "رفع صورة المحادثة", + "Choose conversation picture from files" : "إختَر صورة للمحادثة من الملفات", + "Remove conversation picture" : "حذف صورة المحادثة", + "The file must be a PNG or JPG" : "يحب أن يكون الملف PNG أو JPG", + "Set picture" : "تعيين الصورة", + "Default permissions modified for {conversationName}" : "تم تعديل الأذونات الافتراضية لـ {ConversName}", + "Could not modify default permissions for {conversationName}" : "تعذر تعديل الأذونات الافتراضية لـ {callingName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "تحرير الأذونات الافتراضية للمشاركين في هذه المحادثة. لا تؤثر هذه الإعدادات على المشرفين.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "في كل مرة يتم فيها تعديل الأذونات في هذا القسم، فإن الأذونات المخصصة التي سبق تعيينها للمشاركين الفرديين سيقع حذفها.", + "All permissions" : "كل الأذونات", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "حصل المشاركون علي أذونات لبدء مكالمة، والانضمام إلى مكالمة، وتمكين الصوت والفيديو ، ومشاركة الشاشة.", + "Restricted" : "مقيد", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "يمكن للمشاركين الانضمام إلى المكالمات، لكن لا يمكنهم تمكين الصوت أو الفيديو أو مشاركة الشاشة حتى يمنحهم الميسر الأذونات يدويًا.", + "Advanced permissions" : "أذونات متقدمة", + "Edit permissions" : "تحرير الأذونات", + "Conversation settings" : "اعدادات المحادثة", + "Basic Info" : "معلومات أساسية", + "Personal" : "شخصي", + "Moderation" : "الإدارة", + "Setup overview" : "نظرة عامة على الإعداد", + "Breakout Rooms" : "الغرف الجانبية", + "Matterbridge" : "Matterbridge", + "Bots" : "الروبوتات Bots", + "Danger zone" : "منطقة خطر", + "Archive conversation" : "أرشفة المحادثة", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "يتم إخفاء المحادثات المؤرشفة من قائمة المحادثات تلقائيّاً. ومع ذلك، ستظل تظهر عند البحث عن اسم المحادثة أو الوصول إلى قائمة المحادثات المؤرشفة.", + "Do you really want to leave \"{displayName}\"?" : "هل ترغب حقاً في المغادرة، \"{displayName}\"؟", + "You can archive this conversation instead." : "يمكنك أرشفة هذه المحادثة بدلاً عن ذلك.", + "Leave conversation" : "غادر المحادثة", + "You need to promote a new moderator before you can leave the conversation" : "تحتاج إلى إنشاء ميسر جديد قبل أن تتمكن من مغادرة المحادثة", + "Delete conversation" : "احذف المحادثة", + "Do you really want to delete \"{displayName}\"?" : "هل تريد حقا حذف \"{displayName}\" ؟", + "Error while deleting conversation" : "حدث خطأ أثناء حذف المحادثة ", + "Delete all chat messages" : "حذف جميع رسائل الدردشة", + "Do you really want to delete all messages in \"{displayName}\"?" : "هل تريد حقًا حذف كافة الرسائل الموجودة في \"{displayName}\"؟", + "Error while clearing chat history" : "خطأ أثناء مسح سجل الدردشة", + "Be careful, these actions cannot be undone." : "كن حذرًا ، لا يمكن التراجع عن هذه الإجراءات.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "عند ترك المحادثة،ولإعادة الانضمام مرة أخرى إلى المحادثة المغلقة، فإن ذلك يتطلبدعوة. ويمكن إعادة الانضمام إلى المحادثة المفتوحة في أي وقت.", + "Permanently delete this conversation." : "حذف هذه المحادثة بشكل دائم.", + "Delete chat messages" : "حذف رسائل الدردشة", + "Permanently delete all the messages in this conversation." : "حذف جميع الرسائل الموجودة في هذه المحادثة بشكل دائم.", + "_%n hour_::_%n hours_" : ["%nساعات","%n ساعة","%n ساعات","%n ساعات","%n ساعات","%n ساعات"], + "_%n day_::_%n days_" : ["%n أيام","%n يوم","%nأيام","%nأيام","%n أيام","%n أيام"], + "_%n week_::_%n weeks_" : ["%n أسابيع","%n أسبوع","%n أسابيع","%n أسابيع","%n أسابيع","%n أسابيع"], + "Custom expiration time" : "تخصيص إنتهاء الصلاحية", + "Message expiration disabled" : "تم تعطيل انتهاء صلاحية الرسالة", + "Message expiration set: {duration}" : "ضبط انتهاء صلاحية الرسالة: {duration}", + "Error when trying to set message expiration" : "خطأ عند محاولة تعيين انتهاء صلاحية الرسالة", + "Message expiration" : "نهاية صلاحية الرسالة", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "يمكن أن تنتهي صلاحية رسائل الدردشة بعد وقت معين. ملاحظة: لن يتم حذف الملفات التي تمّت مشاركتها في الدردشة عند المالك، و لكن لن تستمر مشاركتها مع الآخرين في المحادثة.", + "Set message expiration" : "عيّن تاريخ انتهاء صلاحية الرسالة", + "Current message expiration" : "التاريخ الحالي لانتهاء صلاحية الرسالة", + "Password copied to clipboard" : "تمّ نسخ كلمة المرور إلى الحافظة", + "Password could not be copied" : "تعذّر نسخ كلمة المرور", + "Guest access" : "وصول الضيف", + "Breakout rooms are not allowed in public conversations." : "الغرف الجانبية غير متاحة في حالة المحادثات العامة.", + "Allow guests to join this conversation via link" : "السماح للضيوف بالانضمام إلى هذه المحادثة من خلال رابط", + "Password protection" : "الحماية بكلمة السر", + "This conversation is password-protected. Guests need password to join" : "المحادثة محمية بكلمة مرور. الضيوف محتاجون لكلمة المرور للانضمام", + "Password protection is needed for public conversations" : "الحماية باستعمال كلمة المرور لازمة في حالة المحادثة العامة", + "Set a password" : "تعيين كلمة المرور", + "Change password" : "تغيير كلمة المرور", + "Enter new password" : "أدخِل كلمة مرور جديدة", + "Save password" : "حفظ كلمة المرور", + "Copy password" : "إنسَخ كلمة المرور", + "Guests are allowed to join this conversation via link" : "الضيوف مسموح لهم بالانضمام لهذه المحادثة عبر الرابط", + "Guests are not allowed to join this conversation" : "الضيوف غير مسموح لهم بالانضمام لهذه المحادثة", + "Resend invitations" : "إعادة إرسال الدعوات ", + "This conversation is open to both registered users and users created with the Guests app" : "المحادثة مفتوحة لكل من المستخدِمين المسجلين و للضيوف المستحدثين عبر تطبيق الضيوف Guests app", + "This conversation is open to registered users" : "المحادثة مفتوحة للمستخدِمين المسجلين", + "This conversation is limited to the current participants" : "هذه المحادثة مقتصرةٌ على المشاركين الحاليين", + "You opened the conversation to both registered users and users created with the Guests app" : "أنت قمت بفتح المحادثة لكل من المستخدِمين المسجلين و المستخدِمين المستحدثين عبر تطبيق الضيوف Guests app", + "Error occurred when opening or limiting the conversation" : "حدث خطأ عند فتح أو تقييد الرد بالمحادثة ", + "Open conversation to registered users, showing it in search results" : "فتح المحادثة للمستخدمين المسجلين، وإظهارها في نتائج البحث", + "Also open to users created with the Guests app" : "و مفتوحةٌ أيضاً للضيوف المستحدثين عبر تطبيق الضيوف Guests app", + "Open conversation" : "فتح المحادثة", + "Invalid language" : "لغة غير صالحة", + "Start time: {date}" : "بدايةً من: {date}", + "Start time has been updated" : "تم تحديث وقت البدء", + "Error occurred while updating start time" : "حدث خطأ أثناء تحديث وقت البدء ", + "Enabling the lobby will remove non-moderators from the ongoing call." : "سيؤدي تمكين صالة الانتظار إلى إزالة الجميع باستثناء المشرفين من المكالمة الجارية.", + "Enable lobby, restricting the conversation to moderators" : "تمكين صالة الانتظار، و قصر المحادثة على المشرفين", + "Meeting start time" : "وقت بدء الإجتماع ", + "Start time (optional)" : "بداية الوقت (اختياري)", + "Import email participants" : "استيراد المشاركين في البريد الإلكتروني", + "You can import a list of email participants from a CSV file." : "يمكنك استيراد قائمة المشاركين في البريد الإلكتروني من ملف CSV.", + "Poll drafts" : "مسودات الاستبيان", + "Browse poll drafts" : "استعراض مسودات الاستبيان", + "Error occurred when locking the conversation" : "حدث خطأ أثناء قفل المحادثة ", + "Error occurred when unlocking the conversation" : "حدث خطأ أثناء إزالة قفل المحادثة ", + "Lock conversation" : "قفل المحادثة", + "This will also terminate the ongoing call." : "سيؤدي هذا أيضًا إلى إنهاء المكالمة الجارية.", + "Lock the conversation to prevent anyone to post messages or start calls" : "قفل المحادثة لمنع أي شخص من نشر الرسائل أو بدء المكالمات", + "Edit" : "تعديل", + "More information" : "المزيد من المعلومات", + "Delete" : "حذف ", + "Add new bridged channel to current conversation" : "إضافة قناة وصل جديدة للمحادثة الحالية ", + "unknown state" : "حالة غير معروفة", + "running" : "فعال", + "not running, check Matterbridge log" : "لا يعمل، تحقق من سجل Matterbridge", + "not running" : "غير فعال", + "Bridge saved" : "تم الحفظ ", + "You can bridge channels from various instant messaging systems with Matterbridge." : "يمكنك ربط القنوات من مختلف أنظمة المراسلة الفورية باستخدام Matterbridge.", + "More info on Matterbridge" : "مزيد من المعلومات حول Matterbridge.", + "Messaging systems" : "نظم التراسل", + "Enable bridge" : "غير متاح ", + "Show Matterbridge log" : "إظهار سجل Matterbridge", + "Log content" : "محتوى سجل الأحداث", + "Only moderators are allowed to mention @all" : "فقط المشرفون يحق لهم الإشارة إلى الجميع @all", + "All participants are allowed to mention @all" : "جميع المشاركين مسموح لهم بالإشارة إلى الجميع @all", + "Participants are now allowed to mention @all." : "المشاركون غير مسموح لهم بالإشارة إلى الجميع @all", + "Mentioning @all has been limited to moderators." : "صلاحية الإشارة إلى الجميع @all مقتصرة فقط على المشرفين.", + "Allow participants to mention @all" : "السماح للمشاركين بالإشارة إلى الجميع @all", + "Mention permissions" : "صلاحية الإشارة لآخرين", + "Notifications" : "التنبيهات", + "Notify about calls in this conversation" : "الإخطار حول المكالمات فى هذه المحادثة", + "Important conversation" : "محادثة مهمة", + "Recording consent is required for calls in this conversation" : "الإذن بالتسجيل مطلوبٌ لكل المكالمات في هذه المحادثة", + "Recording consent is not required for calls in this conversation" : "الإذن بالتسجيل ليس مطلوباً لكل المكالمات", + "Recording consent requirement was updated" : "تم تحديث متطلبات الإذن بالتسجيل", + "Error occurred while updating recording consent" : "حدث خطأ أثناء تحديث الإذن بالتسجيل", + "Recording Consent" : "الإذن بالتسجيل ", + "Recording consent cannot be changed once a call or breakout session has started." : "لا يمكن تغيير الموافقة على التسجيل بعد بدء المكالمة أو الجلسة الجانبية.", + "Require recording consent before joining call in this conversation" : "أطلُب الإذن بالتسجيل قبل الانضمام لهذه المحادثة", + "Recording consent is required for all calls" : "الإذن بالتسجيل مطلوبٌ لكل المكالمات", + "SIP dial-in is now possible without PIN requirement" : "أصبح الاتصال عبر SIP ممكنًا الآن بدون الحاجة إلى رقم التعريف الشخصي", + "SIP dial-in is now enabled" : "تم تمكين اتصال SIP الآن", + "SIP dial-in is now disabled" : "تم تعطيل اتصال SIP الآن", + "Error occurred when enabling SIP dial-in" : "حدث خطأ أثناء تمكين اتصال SIP", + "Error occurred when disabling SIP dial-in" : "حدث خطأ أثناء تعطيل اتصال SIP", + "Phone and SIP dial-in" : "الاتصال الهاتفي dial-in، و عبر الإنترنت SIP", + "Enable phone and SIP dial-in" : "تمكين الاتصال الهاتفي dial-in، و عبر الإنترنت SIP", + "Allow to dial-in without a PIN" : "السماح بالاتصال بدون رقم التعريف الشخصي PIN", + "Join" : "إن", + "Error while creating the conversation" : "حدث خطأ اثناء نسخ رابط المحادثة", + "Create a new conversation" : "إنشاء محادثة جديدة", + "Join open conversations" : "الانضمام إلى محادثات جارية", + "Call a phone number" : "اتَّصِل برقم هاتف", + "Unread mentions" : "إشارات غير مقروءة", + "Create conversation" : "انشاء محادثة", + "Enter your name" : "أدخِل اسمك", + "Submit name and join" : "أرسِل الاسم و انضَمّ", + "Do you already have an account?" : "هل لديك حساب سلفاً؟", + "Log in" : "تسجيل الدخول", + "Error while verifying uploaded file" : "خطأ أثناء التحقق من الملف المرفوع", + "Uploaded file is verified" : "تمّ التحقق من الملف المرفوع", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "تنسيق المحتوى عبارة عن قيم مفصولة بفاصلة (CSV) :
- سطر الترويسة لازم ويجب أن يكون مُطابقاً الاسم، \"الإيميل\" أو فقط \"الإيميل\"\"
- إدخالية واحدة فقط لكل سطر (مثل: \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "تمّت إضافة المشاركين بنجاحٍ", + "Error while adding participants" : "خطأ أثناء إضافة المشاركين", + "Import a file" : "إستيراد ملف", + "Browse" : "تصفُّح", + "Verifying uploaded file …" : "التحقُّق من الملفات المرفوعة جارٍ ...", + "This might take a moment" : "يمكن أن يستغرق هذا لحظات ...", + "Send invitations" : "إرسال دعوات", + "_%n invalid email_::_%n invalid emails_" : ["%n إيميل غير صحيح","%n إيميل غير صحيح","%n إيميل غير صحيح","%n إيميلات غير صحيحة","%n إيميل غير صحيح","%n إيميل غير صحيح"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر","%n إيميلات سبق استيرادها أو هي مكررة","%n إيميل سبق استيراده أو هو مكرر","%n إيميل سبق استيراده أو هو مكرر"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوة يمكن إرسالها","%n دعوات يمكن إرسالها","%n دعوة يمكن إرسالها"], + "An error occurred while calling a phone number" : "حدث خطأ أثناء الاتصال برقم هاتف", + "Phone number could not be called: {error}" : "تعذّر طلب الاتصال برقم الهاتف: {error}", + "Phone number could not be called" : "تعذّر الاتصال برقم الهاتف", + "Search participants or phone numbers" : "البحث عن مشاركين أو أرقام هواتف", + "Creating the conversation …" : "إنشاء محادثة ...", + "Mark as read" : "تحديد كمقروء ", + "Mark as unread" : "تحديد كغير مقروء ", + "Remove from favorites" : "إزالتها مِن المفضلة", + "Add to favorites" : "أضفه إلى المفضلة", + "Unarchive conversation" : "استرجاع المحادثة من الأرشيف", + "You need to promote a new moderator before you can leave the conversation." : "يجب عليك ترقية مشرف لاحد المشاركين قبل مغادرة المحادثة.", + "Conversation actions" : "إجراءات المحادثة ", + "Notify about calls" : "إشعار بالمكالمات", + "Pending invitations" : "دعوات معلقة", + "From {user} at {remoteServer}" : "من {user} على الخادم {remoteServer}", + "Decline invitation" : "رفض الدعوة", + "Accept invitation" : "قبول الدعوة", + "No pending invitations" : "لا توجد دعوات معلقة", + "Home" : "الرئيسية", + "Unread" : "غير مقروء", + "Alphabetically" : "أبجديا", + "No matches found" : "لم يٌمكن إيجاد أي تطابقات", + "No conversations found" : "لم يتم العثور على المحادثات ", + "You have no archived conversations." : "ليس لديك أي محادثات مؤرشفة.", + "You have no unread mentions." : "لا توجد لديك أي إشارات غير مقرؤة.", + "You have no unread messages." : "لا توجد لديك أي رسائل غير مقرؤة.", + "An error occurred while performing the search" : "حدث خطأ اثناء البحث", + "Conversation list" : "قائمة المحادثة ", + "Unread messages" : "رسائل غير مقروءة", + "Clear filters" : "إزالة التصفية", + "New personal note" : "ملاحظة شخصية جديدة", + "Back to conversations" : "عودة إلى المحادثات", + "Archived conversations" : "المحادثات المؤرشفة", + "Clear filter" : "إزالة التصفية", + "App settings" : "إعدادات التطبيق", + "Users" : "المستخدمين:", + "Groups" : "المجموعات", + "Teams" : "الفرق", + "Federated users" : "مستخدِمون من السحابة الموحدة", + "New private conversation" : "محادثة جديدة على الخاص", + "Other sources" : "مصادر آخرى", + "Open conversations" : "فتح المحادثات ", + "No search results" : "لا توجد نتائج", + "Users, groups and teams" : "المستخدمين، والمجموعات، والفرق", + "Users and groups" : "الاعضاء والمجموعات", + "Users and teams" : "المستخدمين و الفرق", + "Groups and teams" : "المجموعات والفرق", + "New group conversation" : "محادثة جماعية جديدة", + "The meeting will start soon" : "هذا الاجتماع سيبدأ قريباً", + "This meeting is scheduled for {startTime}" : "تمت جدولة هذا الاجتماع في {startTime}", + "You are currently waiting in the lobby" : "أنت حاليا في انتظار الاستقبال", + "Select microphone" : "اختر مايك", + "No microphone available" : "لا يوجد مايكرفون متاح", + "Select speaker" : "حدِّد المُتحَدِّث", + "No speaker available" : "لايوجد أيّ مُتحَدِّث", + "Select camera" : "اختر كاميرا", + "No camera available" : "لا توجد كاميرا متاحة", + "Select a device" : "إختَر جهازاً", + "Playing …" : "قيد التشغيل ...", + "Test speakers" : "اختبار مكبرات الصوت", + "Test" : "اختبار", + "Devices" : "الأجهزة", + "Backgrounds" : "الخلفيّات", + "No audio" : "بدون صوت", + "No camera" : "بدون كاميرا", + "Display video as you will see it (mirrored)" : "عرض الفيديو كما ستراه أنت (معكوساً)", + "Display video as others will see it" : "عرض الفيديو كما سيراه الآخرون", + "Calls are not supported in your browser" : "المكالمات غير مدعومة في متصفحك", + "Access to microphone is only possible with HTTPS" : "الوصول إلى المايكرفون مسموح فقط في HTTPS", + "Access to microphone was denied" : "تم رفض الوصول للمايكرفون", + "Error while accessing microphone" : "حدث خطأ اثناء الوصول إلى المايكرفون", + "Access to camera is only possible with HTTPS" : "الوصول للكاميرا مسموح فقط في HTTPS", + "The call is being recorded." : "يتم تسجيل المكالمة.", + "The call might be recorded." : "المكالمة يُمكن أن يتم تسجيلها.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "يمكن أن يشمل التسجيل صوتك، و مقاطع الفيديو من الكاميرات، و شاشات مُشارَكة. إذنُك مطلوبٌ قبل الانضمام إلى المكالمة.", + "Give consent to the recording of this call" : "إمنَحِ الإذن بتسجيل هذه المكالمة", + "Start recording immediately with the call" : "إبدأ التسجيل فور بدء المكالمة", + "Apply settings" : "طبِّق الإعدادات", + "Select virtual office background" : "اختر الخلفية الافتراضية للمكتب", + "Select virtual home background" : "اختر الخلفية الافتراضية للمنزل", + "Select virtual abstract background" : "اختر الخلفية الافتراضية للملخص", + "Select virtual beach background" : "اختر الخلفية الافتراضية للشاطئ", + "Select virtual park background" : "اختر الخلفية الافتراضية للمنتزه", + "Select virtual theater background" : "اختر الخلفية الافتراضية للمسرح", + "Select virtual library background" : "اختر الخلفية الافتراضية للمكتبة", + "Select virtual space station background" : "اختر الخلفية الافتراضية لمساحة محطة المستخدم", + "Error while uploading the file" : "خطأ أثناء رفع الملف", + "Select a file" : "إختَر ملفّاً", + "Invalid path selected" : "تم تحديد مسار غير صحيح", + "Select virtual background from file {fileName}" : "اختر الخلفية الافتراضية من الملف {fileName}", + "Blur" : "تضبيب", + "Upload" : "تحميل", + "Files" : "الملفات", + "(editing)" : "(تعديل)", + "(edited)" : "(معدّلة)", + "The message has expired or has been deleted" : "الرسالة انتهت صلاحيتها أو سبق حذفها", + "Cancel quote" : "إلغاء التعليق", + "24 hours" : "24 ساعة", + "7 days" : "7 أيام", + "Clear reminder – {timeLocale}" : "إمحُ التذكير – {timeLocale}", + "Edited by {actor}" : "تمّ تحريرها من قِبَل {actor}", + "Message text copied to clipboard" : "تمّ نسخ الرسالة النصّية إلى الحافظة", + "Message text could not be copied" : "تعذّر نسخ الرسالة النصّية إلى الحافظة", + "Message forwarded to \"Note to self\"" : "الرسالة أُعِيدَ توجيهها إلى \"ملاحظة لنفسي\"", + "Error while forwarding message to \"Note to self\"" : "حدث خطأ أثناء إعادة توجيه الرسالة إلى \"ملاحظة لنفسي\"", + "A reminder was successfully removed" : "تمّ بنجاح حذف التذكير", + "Error occurred when removing a reminder" : "حدث خطأ أثناء حذف التذكير", + "A reminder was successfully set at {datetime}" : "تمّ بنجاح تعيين التذكير إلى {datetime}", + "Error occurred when creating a reminder" : "حدث خطأ أثناء إنشاء التذكير", + "Add a reaction to this message" : "إضافة تفاعل على هذه الرسالة", + "Reply" : "رد", + "More actions" : "إجراءات إضافية", + "Set reminder" : "ضبط التذكير", + "Reply privately" : "الرد على الخاص", + "Edit message" : "تحرير رسالة", + "Copy message" : "نسخ الرسالة", + "Copy message link" : "نسخ رابط الرسالة ", + "Go to file" : "الذهاب إلى ملف", + "Download file" : "تنزيل ملف", + "Forward message" : "رسالة معاد توجيهها", + "Translate" : "ترجم", + "Set custom reminder" : "تعيين تذكير مخصص", + "Close reactions menu" : "إغلاق قائمة التفاعل", + "React with {emoji}" : "تفاعل باستخدام {emoji}", + "React with another emoji" : "تفاعل مع رمز تعبيري آخر", + "Choose a conversation to forward the selected message." : "اختر محادثة لإعادة توجيه الرسالة المحددة إليها.", + "Error while forwarding message" : "خطأ أثناء إعادة توجيه الرسالة", + "The message has been forwarded to {selectedConversationName}" : "تمت إعادة توجيه الرسالة إلى {selectedConversationName}", + "Dismiss" : "الغاء", + "Go to conversation" : "ذهاب إلى المحادثة", + "Detect language" : "إكتشف اللغة", + "The message could not be translated" : "لا يمكن ترجمة الرسالة", + "Translation copied to clipboard" : "تمّ نسخ الترجمة إلى الحافظة", + "Translation could not be copied" : "تعذّر نسخ الترجمة", + "Translate message" : "ترجِم الرسالة", + "Source language to translate from" : "اللغة الأصلية التي ستتم الترجمة منها", + "Translate from" : "ترجِم من", + "Target language to translate into" : "اللغة الهدف التي ستتم الترجمة إليها", + "Translate to" : "ترجِم إلى", + "Translating" : "يترجم", + "Copy translated text" : "نسخ النص المترجم", + "Send now" : "أرسِل الآن", + "Message read by everyone who shares their reading status" : "تمت قراءة الرسالة من قبل كل من يشاركهم الحالة ", + "Message sent" : "تم إرسال الرسالة ", + "Sent without notification" : "تمّ الإرسال بدون إشعار", + "Deleting message" : "حذف الرسالة", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "تم حذف الرسالة بنجاح، ولكن تم تكوين بُريْمِج bot أو جسر Matterbridge و لربما تمّ توزيع الرسالة بالفعل على خدمات أخرى", + "Message deleted successfully" : "تم مسح الرسالة بنجاح", + "Message could not be deleted because it is too old" : "تعذر مسح الرسالة لإنها قديمة جدًا", + "Only normal chat messages can be deleted" : "يمكن حذف رسائل الدردشة العادية فقط", + "An error occurred while deleting the message" : "حدث خطأ أثناء حذف الرسالة", + "Your browser does not support playing audio files" : "متصفحك لا يدعم تشغيل ملفات الصوت", + "Contact" : "التواصل", + "{stack} in {board}" : "{stack} في {board}", + "Deck Card" : "بطاقة Deck", + "Remove {fileName}" : "إزالة {fileName}", + "Open this location in OpenStreetMap" : "افتح هذا الموقع في تطبيق OpenStreetMap", + "Sending message" : "إرسال الرسالة ", + "Failed to send the message. Click to try again" : "فشل في إرسال الرسالة، انقر للمحاولة مجددًا ", + "Not enough free space to upload file" : "لا يوجد مساحة تخزينية كافية لرفع الملف ", + "You cannot send messages to this conversation at the moment" : "لا يمكنك إرسال الرسائل لهذه المحادثة حاليًا ", + "Could not update the message" : "تعذّر تحديث الرسالة", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيار","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات","مسودة الاستبيان • %n خيارات"], + "_%n vote_::_%n votes_" : ["%n أصوات","%n صوت","%n أصوات","%n أصوات","%n أصوات","%n أصوات"], + "Edit poll draft" : "تحرير مُسوَّدة التصويت", + "Delete poll draft" : "حذف مسودة الاستبيان", + "Open poll" : "فتح استطلاع", + "See results" : "رؤية النتائج", + "Reactions" : "التفاعلات", + "No permission to post reactions in this conversation" : "لا يوجد إذن لنشر التفاعلات في هذه المحادثة", + "and {participant}" : "و {participant}", + "_and %n other participant_::_and %n other participants_" : ["و %n مشارك آخر","و %n مشارك آخر","و %n مُشاركين آخرين","و %n مُشاركين آخرين","و %n مشاركين آخرين","و %n مشاركين آخرين"], + "Show all reactions" : "أظهِر جميع التفاعلات", + "Add more reactions" : "إضافة تفاعلاتٍ أخرى", + "Show or collapse system messages" : "إظهار أو طي رسائل النظام", + "No messages" : "لاتوجد رسائل", + "All messages have expired or have been deleted." : "كل الرسائل انتهت صلاحيتها أو تمّ حذفها", + "Unpin" : "فك التثبيت", + "Cancel search" : "إلغاء البحث", + "Add a phone number" : "إضافة رقم هاتف", + "Error: A password is required to create the conversation." : "خطأ: كلمة المرور لازمة لإنشاء المحادثة.", + "All set, the conversation \"{conversationName}\" was created." : "تمّ إنشاء المحادثة \"{conversationName}\" بنجاح.", + "Create a new group conversation" : "انشاء محادثة جماعية جديدة", + "Add participants" : "اضافة مشارك جديد", + "Maximum length exceeded ({maxlength} characters)" : "تمّ تجاوز الحدّ الأقصى ({maxlength} حرفاً)", + "Conversation visibility" : "رؤية المحادثة", + "Allow guests to join via link" : "السماح بالضيوف بالانضمام عن طريق الرابط", + "Enter password" : "أدخل كلمة المرور", + "This conversation has been locked" : "هذه المحادثة مغلقة", + "No permission to post messages in this conversation" : "ليس لديك صلاحية لنشر رسائل في هذه المحادثة", + "Joining conversation …" : "جارٍ الانضمام للمحادثة ", + "Write a message without notification" : "أكتُب رسالة بدون إشعارٍ", + "Send message silently" : "إرسال رسالة صامتة", + "Send message" : "أرسل رسالة", + "Send without notification" : "أرسِل بدون إشعار", + "The participant will not be notified about new messages" : "سوف لن يتم إشعار المشارك بشأن الرسائل الجديدة", + "Participants will not be notified about new messages" : "سوف لن يتم إشعار المُشاركين بشأن الرسائل الجديدة", + "The message could not be edited" : "تعذّر تحرير الرسالة", + "File to share" : "ملف للمشاركة", + "File upload is not available in this conversation" : "رفع الملفات غير متاح في هذه الدردشة", + "Add emoji" : "اضافة رمز تعبيري", + "Adding a mention will only notify users who did not read the message." : "إضافة إشارة ستؤدي إلى إشعار المستخدِمين الذين لم يسبق لهم قراءة الرسالة.", + "Send later" : "أرسِل لاحقاً", + "Cancel editing" : "إلغاء التحرير", + "{user} is out of office and might not respond." : "{user} خارج المكتب الآن، و يمكن ألّا يستجيب", + "Absence period: {startDate} - {endDate}" : "فترة الغياب: {startDate} - {endDate}", + "Replacement:" : "البديل:", + "Share from {nextcloud}" : "مشاركة من {nextcloud}", + "Share from Files" : "مشاركة من الملفات", + "Share files to the conversation" : "مشاركة ملفات في المحادثة", + "Upload from device" : "إرفع من جهاز", + "Create new poll" : "إنشاء استطلاع جديد", + "Smart picker" : "اللاقط الذكي Smart picker", + "Record voice message" : "تسجيل رسالة صوتية", + "End recording and send" : "إنهاء التسجيل والإرسال", + "Dismiss recording" : "رفض التسجيل", + "Access to the microphone was denied" : "تم رفض الوصول إلى الميكروفون", + "Microphone either not available or disabled in settings" : "الميكروفون إما غير متاح أو تم تعطيله من الإعدادات", + "Error while recording audio" : "خطأ أثناء تسجيل الصوت", + "Generating summary of unread messages …" : "توليد ملخص للرسائل غير المقرؤة ...", + "Summary is AI generated and might contain mistakes" : "المُلخَّص يتم توليده بالذكاء الاصطناعي و يمكن أن يحتوي على أخطاء", + "Error occurred during a summary generation" : "حدث خطأ أثناء توليد المُلخَّص", + "New file" : "ملف جديد", + "Blank" : "فارغ", + "Error while creating file" : "خطأ أثناء إنشاء الملف", + "Create and share a new file" : "إنشاء ملف جديد ومشاركته", + "Name of the new file" : "اسم الملف الجديد", + "Create file" : "إنشاء ملف", + "Someone is typing …" : "شخصٌ ما يكتبُ ...", + "{user1} is typing …" : "{user1} يكتُب…", + "{user1} and {user2} are typing …" : "{user1} و {user2} يكتُبُون …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} و {user3} يكتُبُون …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2} و {user3} و%n أخرون يكتُبُون …","{user1}, {user2} و {user3} و%n آخر يكتُب …","{user1}, {user2} و {user3} و%nأخرون يكتُبُون …","{user1}, {user2} و {user3} و%n أخرون يكتُبُون …","{user1}, {user2} و {user3} و %n أخرون يكتُبُون …","{user1}, {user2} و {user3} و%n أخرون يكتُبُون …"], + "Add more files" : "اضافة المزيد من الملفات", + "Send" : "أرسل", + "In this conversation {user} can:" : "في هذه المحادثة يستطيع {user}:", + "Edit default permissions for participants in {conversationName}" : "تحرير الأذونات الافتراضية للمشاركين في {conversationName}", + "Start a call" : "بدء المكالمة", + "Skip the lobby" : "تخطي انتظار القبول", + "Can post messages and reactions" : "يمكن نشر الرسائل والتفاعلات", + "Enable the microphone" : "تفعيل الميكروفون", + "Enable the camera" : "تمكين الكاميرا", + "Share the screen" : "شارك الشاشة", + "Update permissions" : "تحديث الأذونات", + "Updating permissions" : "الرجاء الاتصال بالمسؤول الخاص بك.", + "No poll drafts" : "لا توجد أي مسودات للاستبيان", + "There is no poll drafts yet saved for this conversation" : "لا توجد أي مسودات محفوظة للاستبيان في هذه المحادثة", + "Create poll in {name}" : "إنشاء تصويت في {name}", + "Create poll" : "صَوّت، رجاءً", + "Error while importing poll" : "خطأ أثناء استيراد الاستبيان", + "Question" : "سؤال", + "Ask a question" : "طرح سؤال", + "Import draft from file" : "إستيراد مسودة من ملف", + "Answers" : "الإجابات", + "Answer {option}" : "إجابة {option}", + "Delete poll option" : "حذِف خيار التصويت", + "Add answer" : "إضافة إجابة", + "Settings" : "الإعدادات", + "Anonymous poll" : "استبيان مع إخفاء هوية المصوتين", + "Multiple answers" : "إجابات متعددة", + "Save as draft" : "إحفَظ كمسودة", + "Export draft to file" : "تصدير مسودة إلى ملف", + "You voted for this option" : "أنت صوَّتَّ على هذا الخيار", + "End poll" : "نهاية التصويت", + "Change your vote" : "تغيير صوتك", + "Results" : "النتائج ", + "Voted participants" : "المُشارِكون المُصَوِّتُون", + "Send a message to \"{roomName}\"" : "إرسال رسالة إلى \"{roomName}\"", + "Hide list of participants" : "إخفاء قائمة المشاركين", + "Show list of participants" : "عرض قائمة المشاركين", + "Assistance requested in {roomName}" : "تمّ طلب مساعدة في {roomName}", + "The message was sent to \"{roomName}\"" : "تم إرسال الرسالة إلى \"{roomName}\"", + "Dismiss request for assistance" : "رفض طلب المساعدة", + "Send message to room" : "إرسال رسالة إلى الغرفة", + "Back to main room" : "عودة إلى الغرفة الرئيسية", + "Back to your room" : "الرجوع إلى غرفتك", + "Message all rooms" : "أدِر كل الغرف", + "Start session" : "إبدَإِ الجلسة", + "Start a call before you start a breakout room session" : "إبدأ مكالمة قبل بدأ جلسةً الغرفة الجانبية", + "Stop session" : "أوقِف الجلسة", + "The message was sent to all breakout rooms" : "تمّ إرسال الرسالة إلى كل الغُرف الجانبية breakout rooms", + "Send a message to all breakout rooms" : "إرسال رسالة إلى جميع الغرف الجانبية", + "Breakout rooms are not started" : "الغرف الجانبية لم تبدأ ", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : " المكالمات بدون استعمال خلفية للأداء العالي تتسبب في إشكاليات في الاتصال و حمل زائد على الأجهزة. {linkstart}تعلَّم المزيد {linkend}", + "Talk setup incomplete" : "إعدادات \"المحادثة\" Talk لم تكتمل", + "Disable lobby" : "تعطيل ساحة الإنتظار", + "Settings for participant \"{user}\"" : "إعدادات المشارك \"{المستخدم}\"", + "Participant \"{user}\"" : "المشارك \"{user}\"", + "moderator" : "مشرف", + "bot" : "بوت", + "guest" : "ضيف", + "Ringing …" : "يَرِنُّ الآن ...", + "Call rejected" : "تمّ رفض المكالمة", + "{time} talking …" : "{time} في محادثة …", + "{time} talking time" : "{time} زمن المحادثة", + "Raised their hand" : "رفعوا أيديهم", + "Joined with video" : "انضم مع مشاركة بالفيديو", + "Joined via phone" : "انضم عبر الجوال ", + "Joined with audio" : "انضم مع مشاركة بالصوت ", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "يجب أن يكون عدد حروف النص أقل من أو يساوي {maxLength} . الطول الحالي للنص هو {charactersCount} حرفاً.", + "Remove group and members" : "حذف المجموعة والأعضاء ", + "Remove team and members" : "إزالة الفريق و الأعضاء", + "Remove participant" : "حذف مشارك", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "هل تريد حقًا إزالة المجموعة \"{displayName}\" وأعضائها من هذه المحادثة؟", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "هل تريد حقًا إزالة الفريق \"{displayName}\" وأعضائه من هذه المحادثة؟", + "Do you really want to remove {displayName} from this conversation?" : "هل تريد حقًا إزالة {displayName} من هذه المحادثة؟", + "Notification was sent to {displayName}" : "تمّ إرسال الإخطار إلى {displayName}", + "Could not send notification to {displayName}" : "تعذر إرسال إشعار إلى {displayName}", + "Permissions granted to {displayName}" : "تم منح الأذونات لـ {displayName}", + "Could not modify permissions for {displayName}" : "تعذر تعديل الأذونات لـ {displayName}", + "Permissions removed for {displayName}" : "تمت إزالة الأذونات لـ {displayName}", + "Permissions set to default for {displayName}" : "تم تعيين الأذونات على الإعداد الافتراضي لـ {displayName}", + "Phone number could not be hung up" : "رقم الهاتف لا يمكن قفله", + "Phone number could not be put on hold" : "رقم الهاتف لا يمكن تعليقه", + "Phone number could not be muted" : "رقم الهاتف لا يمكن كتمه", + "Phone number could not be unmuted" : "رقم الهاتف لا يمكن إلغاء كتمه", + "DTMF message could not be sent" : "تعذّر إرسال رسالة DTMF - النغمة المزدوجة متعددة الترددات-", + "Phone number copied to clipboard" : "تمّ نسخ رقم الهاتف إلى الحافظة", + "Phone number could not be copied" : "تعذّر نسخ رقم الهاتف إلى الحافظة", + "in the lobby" : "في صالة الانتظار", + "Dial out phone" : "أطلُب اتصال هاتفي", + "Hang up phone" : "علِّق الاتصال الهاتفي", + "Move back to lobby" : "عودة إلى صالة الانتظار", + "Move to conversation" : "إنتقال إلى المحادثة", + "Dial-in PIN" : "رمز الإتصال الهاتفي ", + "Demote from moderator" : "تخفيض رتبة مشرف", + "Promote to moderator" : "ترقية لـ مشرف", + "Resend invitation" : "إعادة إرسال الدعوة", + "Send call notification" : "إرسال إشعار المكالمة", + "Dial out phone number" : "أطلُب الاتصال برقم هاتفٍ", + "Resume call for phone number" : "استئناف المكالمة مع رقم هاتف", + "Put phone number on hold" : "ضع رقم هاتف في وضع الانتظار", + "Unmute phone number" : "إلغاء كتم صوت رقم هاتف", + "Mute phone number" : "كتم صوت رقم هاتف", + "Copy phone number" : "نسخ رقم هاتف", + "Reset custom permissions" : "إعادة إعداد الأذونات المخصصة", + "Grant all permissions" : "منح كافة الأذونات", + "Remove all permissions" : "إزالة كافة الأذونات", + "Also ban from this conversation" : "محظور أيضاً في هذه المحادثة", + "Internal note (reason to ban)" : "ملاحظة داخلية (سبب الحظر)", + "Remove" : "حذف", + "Permissions modified for {displayName}" : "تم تعديل الأذونات لـ {displayName}", + "Add users, groups or teams" : "إضافة مستخدمين، و مجموعات، وفرق", + "Add users or groups" : "اضافة اعضاء او مجموعات", + "Add users or teams" : "إضافة مستخدمين أو فرق", + "Add users" : "اضافة اعضاء", + "Add groups or teams" : "إضافة مجموعات وفرق", + "Add groups" : "اضافة مجموعات", + "Add teams" : "إضافة فرق", + "Add other sources" : "اضافة مصدر آخر", + "Add emails" : "اضافة عبر البريد", + "Integrations" : "مُكاملات", + "Add federated users" : "إضافة المستخدمين الخارجيين", + "Searching …" : "جاري البحث…", + "Search for more users" : "البحث عن مزيد من الاعضاء", + "You can search or add participants via name, email, or Federated Cloud ID" : "بمكنك البحث عن او اضافة مشاركين بدلالة الاسم أو الايميل أو معرف السحابة الموحدة", + "Search or add participants" : "بحث او اضافة مشاركين", + "Invitation was sent to {actorId}" : "تمّ إرسال الدعوة إلى {actId}", + "An error occurred while adding the participants" : "حدث خطأ اثناء إضافة المشاركين", + "Participants" : "المشاركون", + "Participants ({count})" : "المشاركون ({count})", + "Open chat" : "دردشة مفتوحة", + "You have new unread messages in the chat." : "لديك رسائل جديدة غير مقروءة فى الدردشة.", + "You have been mentioned in the chat." : "أشار إليك أحدهم في الدردشة", + "Search messages" : "البحث في الرسائل", + "Chat" : "الدردشة", + "Details" : "التفاصيل", + "Shared items" : "عناصر مُشارَكة", + "Search in {name}" : "البحث في {name}", + "Search messages …" : "البحث في الرسائل ...", + "Search options" : "خيارات البحث", + "From User" : "من مُستخدِم", + "Since" : "منذ", + "Until" : "حتى", + "No results found" : "لا توجد أي نتائج", + "Load more results" : "تحميل المزيد من النتائج", + "Projects" : "المشاريع", + "No shared items" : "لا توجد عناصر مشاركة", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "الربط لمحادثة", + "No open conversations found" : "لا توجد أي محادثات مفتوحة", + "Either there are no open conversations or you joined all of them." : "إمّا أنه لا توجد أيّ محادثات جارية أو أنك مُنضَمٌّ سلفاً إليها جميعاَ", + "Check spelling or use complete words." : "تحقَّق من الهجاء أو استخدام كلماتٍ كاملة", + "Search conversations or users" : "البحث عن المحادثات او الاعضاء", + "Select conversation" : "اختر محادثة", + "Number length is not valid" : "عدد خانات الرقم غير صحيح", + "Region code is not valid" : "كود المنطقة أو الدولة غير صحيح", + "Number length is too short" : "عدد خانات الرقم أقل مما يُفترَض", + "Number length is too long" : "عدد خانات الرقم أكثر مما يُفتَرض", + "Number is not valid" : "الرقم غير صحيح", + "Phone numbers" : "أرقام الهواتف", + "Display name: {name}" : "اسم العرض: {name}", + "Edit display name" : "عَدِّل اسم العرض", + "Save name" : "حفظ الاسم", + "Error while setting personal setting" : "خطأ أثناء إعداد الاعدادات الشخصية", + "Error while saving sounds setting" : "حدث خطأ أثناء حفظ إعدادات الأصوات ", + "Play sounds when participants join or leave a call" : "تشغيل الأصوات عندما انضمام أو مغادرة المشاركون المكالمة", + "Notification settings" : "إعدادات الإشعارات", + "Default language" : "اللغة الافتراضية", + "Select location for attachments" : "اختر مكان المرفقات", + "Error while setting attachment folder" : "خطأ اثناء تحديد مجلد المرفقات", + "Error while setting read status privacy" : "حدث خطأ عند تعيين خصوصية قراءة الرسائل ", + "Error while setting typing status privacy" : "خطأ أثناء تعيين خصوصية حالة الكتابة", + "Error while setting default media state" : "حدث خطأ أثناء حفظ حالة الوسائط ", + "Privacy" : "الخصوصية", + "Attachments folder" : "مجلد المرفقات", + "Toggle full screen" : "تبديل إلى ملء الشاشة", + "Search" : "البحث", + "Focus the chat input" : "تركيز على إدخال الدردشة", + "Unfocus the chat input to use shortcuts" : "الغاء تركيز على إدخال الدردشة", + "Edit your last message" : "قّم بتحرير رسالتك الأخيرة", + "Shortcuts while in a call" : "اختصارات اثناء مكالمة", + "Camera on and off" : "تشغيل وإيقاف تشغيل الكاميرا ", + "Microphone on and off" : "تفعيل او تعطيل المايك", + "Raise or lower hand" : "رفع أو خفض اليد ", + "Push to talk or push to mute" : "اضغط للتحدث او اضغط لكتم الصوت", + "Zoom-in / zoom-out a screen share" : "تكبير/تصغير شاشة مُشارَكة", + "Mouse wheel" : "عجلة الفارة", + "Start call silently" : "بدء اتصال صامت", + "Start call" : "ابدء مكالمة", + "End call" : "إقطَع المكالمة", + "This call has just ended" : "المكالمة انتهت للتّو", + "You will be able to join the call only after a moderator starts it." : "لن تتمكن من الانضمام إلى المكالمة إلا بعد أن يبدأها المشرف.", + "End call for everyone" : "إنهاء المكالمة للجميع", + "Starting the recording" : "بدء التسجيل", + "Recording" : "تسجيل", + "The call has been running for one hour." : "المكالمة ما زالت مستمرة منذ حوالي الساعة.", + "Cancel recording start" : "إلغاء مباشرة التسجيل", + "Stop recording" : "إيقاف التسجيل", + "Send a reaction" : "إرسال تفاعل", + "React with {reaction}" : "تَفَاعَل مع {reaction}", + "All tasks done!" : "تمّ إنجاز جميع المهام!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} من %n مهمة","{done} من %n مهمة","{done} من %n مهمة","{done} من %n مهام","{done} من %n مهمة","{done} من %n مهمة"], + "_%n participant in call_::_%n participants in call_" : ["%n مشاركين بالمكالمة","%n مشارك بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة","%n مشاركين بالمكالمة"], + "You are not allowed to enable screensharing" : "غير مسموح لك بتمكين مشاركة الشاشة", + "No screensharing" : "عدم مشاركة الشاشة", + "Screensharing options" : "خيارات مشاركة الشاشة", + "Enable screensharing" : "تفعيل مشاركة الشاشة", + "Bad sent video and screen quality." : "الفيديو المرسل وجودة الشاشة ضعيفة.", + "Bad sent screen quality." : "جودة الشاشة المرسلة ضعيفة.", + "Bad sent video quality." : "جودة الفيديو المرسل ضعيفة.", + "Bad sent audio, video and screen quality." : "الصوت والفيديو المرسل وجودة الشاشة ضعيفة.", + "Bad sent audio and screen quality." : "الصوت المرسل وجودة الشاشة ضعيفة.", + "Bad sent audio and video quality." : "الصوت المرسل وجودة الفيديو ضعيفة.", + "Bad sent audio quality." : "جودة الصوت المرسل ضعيفة.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "اتصالك بالإنترنت ضعيف وقد لا يتمكن المشاركون الآخرون من رؤية شاشتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك أثناء قيامك بمشاركة الشاشة.", + "Disable background blur" : "تعطيل طمس وتشويش الخلفية", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "اتصالك بالإنترنت ضعيف وقد لا يتمكن المشاركون الآخرون من رؤية شاشتك. لتحسين الوضع، حاول تعطيل الفيديو الخاص بك أثناء مشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهور شاشتك للآخرين.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهورك للآخرين.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "اتصالك بالإنترنت ضعيف بشكل قد لا يتمكن معه المشاركون الآخرون من رؤيتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك أثناء قيامك بمشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على عدم ظهورك للآخرين وفهم المشاركين. لتحسين ذلك جرب تعطيل الفيديو في حال مشاركة الشاشة.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "اتصالك بالانترنت ضعيف بشكل قد يؤثر على ظهورك للآخرين. لتحسين ذلك، جرب تعطيل مشاركة الشاشة.", + "Disable screenshare" : "تعطيل مشاركة الشاشة", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "اتصالك بالإنترنت ضعيف بشكل قد لا يتمكن المشاركون معه الآخرون من رؤيتك. لتحسين الوضع، حاول تعطيل تشويش الخلفية أو تعطيل الفيديو الخاص بك.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك على فهم المشاركين وعدم ظهورك للآخرين. لتحسين ذلك جرب تعطيل الفيديو.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "اتصالك بالانترنت او جهازك الخاص قد يؤثر ذلك فهم الآخرين.", + "Screen sharing is not supported by your browser." : "مشاركة الشاشة غير مدعوم من قبل متصفحك.", + "Screen sharing requires the page to be loaded through HTTPS." : "مشاركة الشاشة يتطلب تحميل الصفحة عن طريق HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "مشاركة الشاشة يتطلب تحميل الصفحة عن طريق HTTPS.", + "An error occurred while starting screensharing." : "حدث خطأ اثناء محاولة مشاركة الشاشة.", + "Show your screen" : "مشاركة الشاشة", + "Stop screensharing" : "التوقف عن مشاركة الشاشة", + "Mute others" : "كتم صوت الآخرين", + "Start recording" : "بدء التسجيل", + "Set up breakout rooms" : "جَهِّز الغرف الجانبية", + "Download attendance list" : "تنزيل قائمة الحضور", + "Open Calendar" : "إفتَح التقويم", + "Remove participant {name}" : "إزالة المشارك {name}", + "Keep" : "حفظ", + "Open dialpad" : "فتح لوحة طلب الاتصال الهاتفي", + "Select a region" : "اختر منطقة", + "Search …" : "البحث …", + "Message without mention" : "رسالة بدون إشارة", + "Mention myself" : "إشارة إليّ", + "Mention everyone" : "أشِر إلى الجميع", + "Select a conversation" : "إختَر مُحادثةً", + "Select a mode" : "إختَر وضعيةً", + "You do not have permissions to access this conversation." : "أنت ليس لديك الصلاحية للوصول إلى هذه المحادثة", + "Join a different conversation or start a new one." : "التحق بمحادثة أخرى أو ابدأ محادثة جديدة", + "The conversation does not exist" : "المحادثة غير موجودة", + "Join a conversation or start a new one!" : "انضم لمحادثة او ابدء محادثة جديدة!", + "Duplicate session" : "تكرار الجلسة", + "Creating and joining a conversation with \"{userid}\"" : "إنشاء و انضمام إلى محادثة مع \"{userid}\"", + "Join a conversation or start a new one" : "انضم لمحادثة او ابدء محادثة جديدة", + "Error while joining the conversation" : "حدث خطأ أثناء الانضمام إلى المحادثة", + "Nextcloud URL" : "رابط الخادم السحابي نكست كلاود", + "Nextcloud user" : "عضو نكست كلاود", + "User password" : "كلمة مرور المستخدم", + "Talk conversation" : "محادثات", + "Skip TLS verification" : "تجاهل تحقق من TLS", + "Matrix server URL" : "عنوان URL لخادم Matrix", + "User" : "المستخدم", + "Matrix channel" : "قناة Matrix", + "Mattermost server URL" : "عنوان URL لخادم Mattermost", + "Mattermost user" : "مستخدم Mattermost", + "Team name" : "اسم الفريق", + "Channel name" : "اسم القناة", + "Rocket.Chat server URL" : "عنوان URL لخادم Rocket.Chat", + "User name or email address" : "اسم المستخدم او البريد الالكتروني", + "Rocket.Chat channel" : "قناة Rocket.Chat  ", + "Zulip server URL" : "عنوان URL لخادم Zulip ", + "Bot user name" : "اسم المستخدم البوت ", + "Bot API key" : "مفتاح Bot API", + "Zulip channel" : "قناة Zulip", + "API token" : "رمز API", + "Slack channel" : "قناة سلاك Slack", + "Server ID or name" : "معرف الخادم السحابي او الاسم", + "Channel ID (prefixed with \"ID:\") or name" : "مُعرِّف القناة (مسبوقاً بـ \"ID:\") أو اسمها", + "Channel" : "قناة", + "Login" : "الدخول", + "Chat ID" : "معرف المحادثة", + "IRC server URL (e.g. chat.freenode.net:6667)" : "عنوان URL لخادم IRC (مثل chat.freenode.net:6667)", + "Nickname" : "كنية.\nلقب.", + "Connection password" : "كلمة مرور الاتصال", + "IRC channel" : "قناة IRC", + "Channel password" : "كلمة مرور القناة", + "NickServ nickname" : "اللقب لـ NickServ", + "NickServ password" : "كلمة المرور لـ NickServ", + "Use TLS" : "استخدم TLS", + "Use SASL" : "استخدم SASL", + "Tenant ID" : "معرف المستأجر", + "Client ID" : "معرف العميل", + "Team ID" : "معرف الفريق", + "Thread ID" : "معرف الموضوع", + "XMPP/Jabber server URL" : "عنوان URL لخادم XMPP/Jabber", + "MUC server URL" : "عنوان URL لخادم MUC", + "Jabber ID" : "معرف Jabber ", + "Media" : "وسائط", + "Polls" : "استطلاعات الرأي", + "Deck cards" : "البطاقات", + "Voice messages" : "الرسائل الصوتية", + "Locations" : "المواقع", + "Call recordings" : "تسجيلات المكالمات", + "Audio" : "الصوت", + "Show all media" : "عرض كل الوسائط", + "Show all files" : "أظهر جميع الملفات", + "Show all polls" : "عرض كل الاستبيانات", + "Show all deck cards" : "عرض كل رزمة البطاقات", + "Show all voice messages" : "عرض كافة الرسائل الصوتية", + "Show all locations" : "عرض كل المواقع", + "Show all call recordings" : "عرض جميع تسجيلات المكالمات", + "Show all audio" : "عرض كل الأصوات", + "Show all other" : "عرض كل الآخرين", + "Group" : "المجموعة", + "Team" : "الفريق", + "You reconnected to the call" : "تمّت إعادة توصيلك بالمكالمة", + "{actor} reconnected to the call" : "تمّت إعادة توصيل {actor} بالمكالمة", + "You added {user0} and {user1}" : "أنت قمت بإضافة {user0} و {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين","أنت قمت بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "An administrator added you and {user0}" : "قام مدير بإضافتك أنت و {user0}", + "{actor} added you and {user0}" : "{actor} قام بإضافتك أنت و {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مساهمين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام المشرف بإضافتك أنت و {user0} و %n مشاركين آخرين","قام مدير بإضافتك أنت و {user0} و %n مشاركين آخرين"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين","{actor} قام بإضافتك أنت و {user0} و %n مشاركين آخرين"], + "An administrator added {user0} and {user1}" : "قام مدير بإضافة {user0} و {user1}", + "{actor} added {user0} and {user1}" : "{actor} قام بإضافة {user0} و {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام المشرف بإضافة {user0} و {user1} و %n مشاركين آخرين","قام مدير بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين","{actor} قام بإضافة {user0} و {user1} و %n مشاركين آخرين"], + "You removed {user0} and {user1}" : "أنت قمت بحذف {user0} و {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشترك آخر ","أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشتركين آخرين","أنت قمت بحذف {user0}, و {user1}، و %n مشترك آخر","أنت قمت بحذف {user0}, {user1} و %n مشاركين آخرين"], + "An administrator removed you and {user0}" : "قام مدير بحذفك أنت و {user0}", + "{actor} removed you and {user0}" : "{actor} قام بحذفك أنت و {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["قام المشرف بحذفك أنت, و {user0} و %n مشارك آخر","قام المشرف بحذفك أنت، و {user0} و %n مشارك آخر","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام المشرف بحذفك أنت, و {user0} و %n مشاركين آخرين","قام مدير بحذفك أنت, و {user0} و %n مشاركين آخرين"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["قام {actor} بحذفك أنت, و {user0} و %n مشارك آخر","قام {actor} بحذفك أنت, و {user0} و %n مشارك آخر","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و %n مشاركين آخرين","قام {actor} بحذفك أنت, و {user0} و%n مشاركين آخرين"], + "An administrator removed {user0} and {user1}" : "قام مدير بحذف {user0} و {user1}", + "{actor} removed {user0} and {user1}" : "قام {actor} بحذف {user0} و {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["قام المشرف بحذف {user0}, و {user1} و %n مشارك آخر","قام المشرف بحذف {user0}, و {user1} و %n مشارك آخر","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام المشرف بحذف {user0}, و {user1} و %n مشاركين آخرين","قام مدير بحذف {user0}, و {user1} و %n مشاركين آخرين"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["قام {actor} بحذف {user0}, و {user1} و %nمشارك آخر","قام {actor} بحذف {user0}, و {user1} و %n مشارك آخر","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين","قام {actor} بحذف {user0}, و {user1} و %n مشاركين آخرين"], + "You and {user0} joined the call" : "لقد انضممت أنت و {user0} للمكالمة", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة","لقد انضممت أنت و {user0} و %n مشاركين آخرين للمكالمة"], + "{user0} and {user1} joined the call" : "لقد انضم {user0} و {user1} إلى المكالمة", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة","لقد انضم {user0} و {user1} و %n مشاركين آخرين للمكالمة"], + "You and {user0} left the call" : "لقد غادرت أنت و {user0} المكالمة", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["لقد غادرت أنت و {user0} و %n مشاركون آخرين المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة","لقد غادرت أنت و {user0} و %n مشاركون آخرون المكالمة"], + "{user0} and {user1} left the call" : "لقد غادر {user0} و {user1} المكالمة", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة","لقد غادر {user0} و {user1} و %n مشاركون آخرون المكالمة"], + "You promoted {user0} and {user1} to moderators" : "لقد قمت أنت بترقية {user0} و {user1} إلى مشرف", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين كمنسقين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","لقد قمت أنت بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "An administrator promoted you and {user0} to moderators" : "قام مدير بترقيتك أنت و {user0} إلى مشرفين", + "{actor} promoted you and {user0} to moderators" : "قام {actor} بترقيتك أنت و {user0} إلى مشرفين", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام مدير بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","قام {actor} بترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "An administrator promoted {user0} and {user1} to moderators" : "قام مدير بترقية{user0} و {user1} إلى مشرفين", + "{actor} promoted {user0} and {user1} to moderators" : "قام {actor} بترقية {user0} و {user1} إلى مشرفين", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام مدير بترقية {user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","قام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين","تقام {actor} بترقية{user0} و {user1} و %n مشاركين آخرين إلى مشرفين"], + "You demoted {user0} and {user1} from moderators" : "لقد قمت بإلغاء ترقية {user0} و {user1} كمشرفين", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","أنت قمت بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "An administrator demoted you and {user0} from moderators" : "لقد قام مدير بإلغاء ترقيتك أنت و {user0} كمشرفين", + "{actor} demoted you and {user0} from moderators" : "لقد قام {actor} بإلغاء ترقيتك أنت و {user0} كمشرفين", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقيتك أنت و {user0} و %n مشاركين آخرين كمشرفين"], + "An administrator demoted {user0} and {user1} from moderators" : "لقد قام مدير بإلغاء ترقية {user0} و {user1} كمشرفين", + "{actor} demoted {user0} and {user1} from moderators" : "لقد قام {actor} بإلغاء ترقية {user0} و {user1} كمشرفين", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين","لقد قام مدير بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مساهمين آخرين كمشرفين","لقد قام {actor} بإلغاء ترقية {user0} و {user1} و %n مشاركين آخرين كمشرفين"], + "You: {lastMessage}" : "أنت: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(معدّلة بواسطتك)", + "(edited by a deleted user)" : "(تمّ تحريرها من قِبَل مُستخدِم محذوف)", + "(edited by {moderator})" : "(معدّلة بواسطة {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "انضممت لمحادثة آخرى في نافذة او جهاز آخر. هذه الخاصية غير مدعومة سيتم اغلاق هذه الجلسة من قبل نكست كلاود التحدث. ماذا تريد ان تفعل؟", + "Leave this page" : "مغادرة هذه الصفحة", + "Join here" : "انضم لهذا", + "Deck card has been posted to {conversation}" : "بطاقات تمّ نشرها في {conversation}", + "An error occurred while posting deck card to conversation" : "حدث خطأ أثناء نشر كَدْسَة البطاقات إلى المحادثة", + "Post to a conversation" : "انشر في محادثة ", + "Post to conversation" : "انشر في محادثة ", + "The recording failed. Please contact your administrator." : "فشل التسجيل. الرجاء الاتصال بمسؤول النظام.", + "Location has been posted to {conversation}" : "تم نشر الموقع في {conversation}", + "An error occurred while posting location to conversation" : "حدث خطأ أثناء نشر الموقع في المحادثة", + "Share to a conversation" : "شارِك في مُحادَثة", + "Share to conversation" : "شارِك في المُحادثَة", + "In conversation" : "في المحادثة ...", + "Search in conversation: {conversation}" : "البحث في المحادثة: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "يتم تقييد طلباتك في الوقت الحالي كإجراء تحسبي للحماية من هجمات القوة الغاشمة", + "Error while clearing conversation history" : "خطأ أثناء مسح محفوظات المحادثة", + "Error occurred while allowing guests" : "حدث خطأ أثناء السماح للضيوف ", + "Error occurred while disallowing guests" : "حدث خطأ أثناء عدم السماح للضيوف ", + "Error occurred when restricting the conversation to moderator" : "حدث خطأ عندما اقتصرت المحادثة على المشرفيين فقط ", + "Error occurred when opening the conversation to everyone" : "حدث خطأ أثناء فتح المحادثة للجميع ", + "Conversation password has been saved" : "تم حفظ كلمة المرور للمحادثة ", + "Conversation password has been removed" : "حُذفت كلمة المرور للمحادثة ", + "Error occurred while saving conversation password" : "حدث خطأ أثناء حفظ كلمة السر للمحادثة ", + "Call recording is starting." : "بدء تسجيل المكالمة.", + "Call recording stopped while starting." : "تسجيل المكالمة توقف بمجرد البدء فيه", + "Call recording stopped. You will be notified once the recording is available." : "توقف تسجيل المكالمات. سيتم إخطارك بمجرد إتاحة التسجيل.", + "Conversation picture set" : "تمّ تعيين صورة المحادثة", + "Conversation picture deleted" : "تمّ حذف صورة المحادثة", + "Could not delete the conversation picture" : "تعذر حذف صورة المحادثة", + "Could not post message: {errorMessage}" : "لا يمكن نشر رسالة: {errorMessage}", + "Participant is banned successfully" : "تمّ حظر المُشارِك بنجاحٍ", + "Error while banning the participant" : "حدث خطأ أثناء حظر المُشارك", + "An error occurred while fetching the participants" : "حدث خطأ اثناء اضافة مشاركيين", + "Could not send invitation to {actorId}" : "تعذر إرسال دعوة إلى {actorId} ", + "Invitations sent" : "تم إرسال الدعوات ", + "Error occurred when sending invitations" : "حدث خطأ أثناء إرسال الدعوات ", + "Failed to join the conversation." : "تعذّر الانضمام إلى المحادثة.", + "An error occurred while creating breakout rooms" : "حدث خطأ أثناء إنشاء الغرف الجانبية", + "An error occurred while re-ordering the attendees" : "حدث خطأٌ أثناء إعادة ترتيب الحاضرين", + "An error occurred while deleting breakout rooms" : "حدث خطأ أثناء حذف الغرف الجانبية", + "An error occurred while starting breakout rooms" : "حدث خطأ أثناء بدء الغرف الجانبية", + "An error occurred while stopping breakout rooms" : "حدث خطأ أثناء إيقاف الغرف الجانبية", + "An error occurred while sending a message to the breakout rooms" : "حدث خطأ أثناء إرسال رسالة إلى الغرف الجانبية", + "An error occurred while requesting assistance" : "حدث خطأٌ أثناء طلب المساعدة", + "An error occurred while resetting the request for assistance" : "حدث خطأٌ أثناء إعادة تعيين طلب المساعدة", + "An error occurred while joining breakout room" : "حدث خطأٌ أثناء الانضمام إلى غرفة جانبية", + "An error occurred while accepting an invitation" : "حدث خطأ أثناء قبول الدعوة", + "An error occurred while rejecting an invitation" : "حدث خطأ أثناء رفض الدعوة", + "{guest} (guest)" : "{guest} (ضيف)", + "Poll draft has been saved" : "تمّ حفظ مسودة الاستبيان", + "An error occurred while saving the draft" : "حدث خطأ أثناء حفظ المسودة", + "An error occurred while submitting your vote" : "حدث خطأ أثناء تقديم تصويتك", + "An error occurred while ending the poll" : "حدث خطأ أثناء إنهاء الاستطلاع", + "An error occurred while deleting the poll draft" : "حدث خطأ أثناء حذف مسودة الاستطلاع", + "Poll \"{name}\" was created by {user}. Click to vote" : "الاستفتاء \"{name}\" أنشأه {user}. أنقُر للتصويت", + "Failed to add reaction" : "فشل في إضافة تفاعل", + "Failed to remove reaction" : "فشل في إزالة تفاعل", + "Error while uploading file \"{fileName}\"" : "حدث خطأ أثناء رفع الملف \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "لا يوجد مساحة تخزينية كافية لرفع الملف \"{fileName}\"", + "You are not allowed to share files" : "غير مسموح لك بمشاركة الملفات ", + "Error while sharing file" : "خطأ اثناء مشاركة ملف", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "تستخدم متصفح غير مدعوم بالكامل من قبل نكست كلاود التحدث. استخدم اخر اصدار من فايرفوكس، مايكروسوفت ادج، قوقل كروم أو ابل سفاري.", + "_In %n hour_::_In %n hours_" : ["في %n ساعة","في %n ساعة","في %n ساعة","في %n ساعات","في %n ساعة","في %n ساعة"], + "_%n minute _::_%n minutes_" : ["%n دقيقة","%n دقيقة","%n دقيقة","%n دقائق","%n دقيقة","%n دقيقة"], + "In {hours} and {minutes}" : "في {hours} و {minutes}", + "_In %n minute_::_In %n minutes_" : ["في %n دقيقة","في %n دقيقة","في %n دقيقة","في %n دقائق","في %n دقيقة","في %n دقيقة"], + "Later today – {timeLocale}" : "في وقت لاحقٍ اليوم – {timeLocale}", + "Tomorrow – {timeLocale}" : "غداً – {timeLocale}", + "This weekend – {timeLocale}" : "نهاية هذا الأسبوع – {timeLocale}", + "Next week – {timeLocale}" : "الأسبوع القادم – {timeLocale}", + "Message link copied to clipboard" : "تمّ نسخ رابط الرسالة إلى الحافظة", + "Conversation link copied to clipboard" : "تمّ نسخ رابط المحادثة إلى الحافظة", + "The link could not be copied" : "لا يمكن نسخ الرابط", + "Error while parsing a PROPFIND error" : "حدث خطأ أثناء تحليل PROFIND", + "Sending signaling message has failed" : "فشل إرسال رسالة الإشارة", + "Lost connection to signaling server. Trying to reconnect." : "انقطع الاتصال بخادم التشوير. حاول معاودة الاتصال.", + "Lost connection to signaling server." : "فُقِد الاتصال بخادوم الإشارة.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "يجب تحديث خادم الإشارة الذي تم تكوينه حتى يكون متوافقًا مع هذا الإصدار من تطبيق Talk. يرجى الاتصال بإدارتك.", + "Please restart the app." : "يُرجى إعادة تشغيل التطبيق.", + "Please reload the page." : "رجاء أعد تحميل الصفحة.", + "Please try to restart the app." : "حاول رجاءً إعادة تشغيل التطبيق.", + "Please try to reload the page." : "حاول رجاءً إعادة تحميل الصفحة.", + "Do not disturb" : "عدم الازعاج", + "Away" : "بالخارج", + "Microphone {number}" : "مايك {number}", + "Camera {number}" : "كاميرا {number}", + "Speaker {number}" : "المتحدث {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "تتحدث في وضع كاتم الصوت، يرجى تعطيل كاتم الصوت ليتمكن الآخرين من سماعك.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "تعذر إنشاء اتصال مع مشارك واحد على الأقل. لمثل هذا السيناريو قد تكون بحاجه إلى خادم TURN. يرجى مطالبة المسؤول تعيين {linkstart} هذه الوثائق {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "يستغرق هذا وقتًا أطول من المعتاد. هل تم بالفعل منح أذونات الوسائط (أو رفضها)؟ إذا كانت الإجابة بنعم ، يرجى إعادة تشغيل المتصفح ، لأنه فشل الوصول للصوت والفيديو ", + "Access to microphone & camera is only possible with HTTPS" : "الوصول للمايك والكاميرا مسموح فقط في HTTPS", + "Please move your setup to HTTPS" : "يرجى تعديل تعيين إلى HTTPS", + "Access to microphone & camera was denied" : "تم رفض الوصول للمايكرفون والكاميرا", + "WebRTC is not supported in your browser" : "WebRTC غير مدعوم في متصفحك", + "Please use a different browser like Firefox or Chrome" : "يرجى استخدام متصفح آخر مثل فايرفوكس او كروم", + "Error while accessing microphone & camera" : "خطأ في الوصول للمايكرفون والكاميرا", + "%s Talk on your mobile devices" : "%s محادثة في جهازك المحمول", + "Join conversations at any time, anywhere, on any device." : "انضم إلى المحادثات في أي وقت و من أي مكان و عبر أي جهاز", + "Android app" : "تطبيق الأندرويد", + "iOS app" : "تطبيق آي أواس", + "__language_name__" : "__اسم اللغة__", + "Webhook Demo" : "عرض توضيحي demo لخطّاف الوِب Webhook", + "Call summary (%s)" : "ملخص المكالمة (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "يقوم روبوت \"ملخص المكالمة\"بنشر رسالة عامة بعد المكالمة يسرد فيها جميع المشاركين و يحدد المهام", + "Tasks" : "المهام", + "Notes" : "الملاحظات", + "Reports" : "تقارير", + "Decisions" : "قرارات", + "Agenda" : "الأجندة", + "Call summary" : "ملخص المكالمة", + "Call summary - {title}" : "ملخص المكالمة - {title}", + "Talk conversation for event" : "محادثة الحدث ", + "Client Push is installed, this improves the performance of desktop clients." : "تمّ تثبيت Client Push دفع المعلومات من جهة العميل؛ هذا سيؤدي لتحسين أداء عملاء سطح المكتب. ", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} غير مُثبَّت. هذا قد يتسبب في مشاكل في الأداء عند استعمال عملاء سطح المكتب.", + "Next meeting" : "الاجتماع التالي", + "Join conversations from remote Nextcloud servers" : "الانضمام إلى المحادثة من خوادم بعيدة لنكست كلاود", + "Your default media state has been saved" : "تمّ حفظ حالة الوسائط الخاصة بك", + "Set reminder for later today" : "عيّن التذكير لوقت لاحقٍ اليوم", + "Set reminder for tomorrow" : "عيّن التذكير للغد", + "Set reminder for this weekend" : "عيّن التذكير لنهاية هذا الأسبوع", + "Set reminder for next week" : "عيّن التذكير للأسبوع القادم", + "Generate summary" : "توليد مُلخَّص", + "Open poll • You voted already" : "فتح الاستطلاع • لقد قمت بالتصويت بالفعل", + "Open poll • Click to vote" : "فتح الاستطلاع • اضغط للتصويت", + "Poll • Ended" : "انتهى•الاستطلاع", + "Talk recording from {time} ({conversation})" : "تسجيل حديث من {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n صوت","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %n أصوات","نتائج الاستطلاع • %nأصوات"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["فتح استطلاع • %n أصوات","فتح استطلاع • %n صوت","فتح استطلاع • %n أصوات","فتح استطلاع • %n أصوات","فتح استطلاع • %n أصوات","فتح استطلاع •%n أصوات"], + "Submit vote" : "إرسال التصويت", + "Your privacy setting has been saved" : "تم حفظ إعدادات الخصوصية الخاصة بك ", + "Your personal setting has been saved" : "تمّ حفظ إعداداتك الشخصية", + "Failed to save sounds setting" : "فشل حفظ إعدادت الصوت ", + "Sounds setting saved" : "تم حفظ إعدادات الأصوات ", + "Nextcloud Talk was updated, you cannot start or join a call." : "تمّ تحديث \"المحادثة\" من نكست كلاود. لايمكنك البدء في أو الانضمام إلى محادثة.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "انضممت لمحادثة آخرى في نافذة او جهاز آخر. هذه الخاصية غير مدعومة سيتم اغلاق هذه الجلسة من قبل نكست كلاود التحدث.", + "Nextcloud Talk was updated." : "تمّ تحديث \"المحادثة\" من نكست كلاود.", + "Nextcloud is in maintenance mode." : "نكست كلاود في وضعية الصيانة.", + "Nextcloud Talk Federation was updated." : "تمّ تحديث \"المحادثة الاتحادية\" Talk Federation من نكست كلاود." +},"pluralForm" :"nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;" +} \ No newline at end of file diff --git a/l10n/ast.js b/l10n/ast.js new file mode 100644 index 0000000..8f48739 --- /dev/null +++ b/l10n/ast.js @@ -0,0 +1,961 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "un conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Atendiesti una llamada con «{user1}»", + "_%n guest_::_%n guests_" : ["%n convidáu","%n convidaos"], + "You attended a call with {user1} and {user2}" : "Atendiesti una llamada con «{user1}» y «{user2}»", + "You attended a call with {user1}, {user2} and {user3}" : "Atendiesti una llamada con «{user1}», «{user2}» y «{user3}»", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Atendiesti una llamada con «{user1}», «{user2}», «{user3}» y «{user4}»", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Atendiesti una llamada con «{user1}», «{user2}», «{user3}», «{user4}» y «{user5}»", + "_%n other_::_%n others_" : ["%n más","%n más"], + "{actor} invited you to {call}" : "{actor} convidóte a «{call}»", + "You were invited to a conversation or had a call" : "Convidáronte a una conversación o tuviesti una llamada", + "Other activities" : "Otres actividaes", + "Talk" : "Charra", + "Guest" : "Convidáu", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Afáyate en Nextcloud Talk!\nNesta conversación vas recibir información tocante a les funciones nueves que tean disponibles en Nextcloud Talk.", + "## New in Talk %s" : "## Novedaes de Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora pues usar Microsoft Edge y Safari pa participar nes llamaes y videollamaes", + "Talk updates ✅" : "Anovamientos de Talk ✅", + "Reaction deleted by author" : "L'autor desanició la reaición", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Creó la conversación", + "System created the conversation" : "El sistema creó la conversación", + "An administrator created the conversation" : "L'alministración creó la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomó la conversación «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Renomesti la conversación «%1$s» a «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "L'alministración renomó la conversación «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} configuró la descripción", + "You set the description" : "Configuresti la descripción", + "An administrator set the description" : "L'alministración configuró la descripción", + "{actor} removed the description" : "{actor} quitesti la descripción", + "You removed the description" : "Quitesti la descripción", + "An administrator removed the description" : "L'alministración quitó la descripción", + "You started a silent call" : "Aniciesti una llamada silenciosa", + "{actor} started a silent call" : "{actor} anició una llamada silenciosa", + "You started a call" : "Aniciesti una llamada", + "{actor} started a call" : "{actor} anició una llamada", + "{actor} joined the call" : "{actor} xunióse a la llamada", + "You joined the call" : "Xuniéstite a la llamada", + "{actor} left the call" : "{actor} coló de la llamada", + "You left the call" : "Colesti de la llamada", + "{actor} unlocked the conversation" : "{actor} desbloquió la conversación", + "You unlocked the conversation" : "Desbloquiesti la conversación", + "An administrator unlocked the conversation" : "L'alministración desbloquió la conversación", + "{actor} locked the conversation" : "{actor} bloquió la conversación", + "You locked the conversation" : "Bloquiesti la conversación", + "An administrator locked the conversation" : "L'alministración bloquió la conversación", + "{actor} limited the conversation to the current participants" : "{actor} llendó'l númberu de participantes de la conversación al actual", + "You limited the conversation to the current participants" : "Llendesti'l númberu de participantes de la conversación al actual", + "An administrator limited the conversation to the current participants" : "L'alministración llendó'l númberu de participantes de la conversación al actual", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a usuarios rexistraos", + "You opened the conversation to registered users" : "Abriesti la conversación a usuarios rexistraos", + "An administrator opened the conversation to registered users" : "L'alministración abrió la conversación a usuarios rexistraos", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abrió la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "You opened the conversation to registered users and users created with the Guests app" : "Abriesti la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "An administrator opened the conversation to registered users and users created with the Guests app" : "L'alministración abrió la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "The conversation is now open to everyone" : "La conversación ta abierta a tol mundu", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación a tol mundu", + "You opened the conversation to everyone" : "Abriesti la conversación a tol mundu", + "{actor} restricted the conversation to moderators" : "{actor} restrinxó la conversación a moderadores", + "You restricted the conversation to moderators" : "Restrinxesti la conversación a moderadores", + "{actor} started breakout rooms" : "{actor} activó les sales de grupu de trabayu", + "You started breakout rooms" : "Aniciesti les sales de grupu de trabayu", + "{actor} stopped breakout rooms" : "{actor} paró les sales de grupu de trabayu", + "You stopped breakout rooms" : "Paresti les sales de grupu de trabayu", + "{actor} allowed guests" : "{actor} permitió a los convidaos", + "You allowed guests" : "Permitiesti a los convidaos", + "An administrator allowed guests" : "L'alministrador permitió a los convidaos", + "{actor} set a password" : "{actor} afitó una contraseña", + "You set a password" : "Afitesti una contraseña", + "An administrator set a password" : "L'alministración afitó una contraseña", + "{actor} removed the password" : "{actor} quitó la contraseña", + "You removed the password" : "Quitesti la contraseña", + "An administrator removed the password" : "L'alministración quitó la contraseña", + "{actor} added {user}" : "{actor} amestó a {user}", + "You joined the conversation" : "Xuniéstite a la conversación", + "{actor} joined the conversation" : "{actor} xunióse a la conversación", + "You added {user}" : "Amestesti a {user}", + "{actor} added you" : "{actor} amestóte", + "An administrator added you" : "L'alministración amestóse", + "An administrator added {user}" : "L'alministración amestó a {user}", + "You left the conversation" : "Colesti de la conversación", + "{actor} left the conversation" : "{actor} coló de la conversación", + "{actor} removed {user}" : "{actor} quitó a {user}", + "You removed {user}" : "Quitesti a {user}", + "{actor} removed you" : "{actor} quitóte", + "An administrator removed you" : "L'alministración quitóte", + "An administrator removed {user}" : "L'alministración quitó a {user}", + "{actor} invited {federated_user}" : "{actor} convidó a {federated_user}", + "You invited {federated_user}" : "Convidesti a {federated_user}", + "You accepted the invitation" : "Aceptesti la invitación", + "{actor} invited you" : "{actor} convidóte", + "An administrator invited you" : "L'alministración convidóte", + "An administrator invited {federated_user}" : "L'alministración convidó a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptó la invitación", + "{actor} removed {federated_user}" : "{actor} quitó a {federated_user}", + "You removed {federated_user}" : "Quitesti a {federated_user}", + "An administrator removed {federated_user}" : "L'alministración quitó a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} refugó la invitación", + "{actor} added group {group}" : "{actor} amestó'l grupu «{group}»", + "You added group {group}" : "Amestesti'l grupu «{group}»", + "An administrator added group {group}" : "L'alministración amestó'l grupu «{group}»", + "{actor} removed group {group}" : "{actor} quitó'l grupu «{group}»", + "You removed group {group}" : "Quietesti'l grupu «{group}»", + "An administrator removed group {group}" : "L'alministración quitó'l grupu «{group}»", + "{actor} added team {circle}" : "{actor} amestó l'equipu «{circle}»", + "You added team {circle}" : "Amestesti l'equipu «{circle}»", + "An administrator added team {circle}" : "L'alministración amestó l'equipu «{circle}»", + "{actor} removed team {circle}" : "{actor} quitó l'equipu «{circle}»", + "You removed team {circle}" : "Quitesti l'equipu «{circle}»", + "An administrator removed team {circle}" : "L'alministración quitó l'equipu «{circle}»", + "{actor} added {phone}" : "{actor} amestó a {phone}", + "You added {phone}" : "Amestesti a {phone}", + "An administrator added {phone}" : "L'alministración amestó a {phone}", + "{actor} removed {phone}" : "{actor} quitó a {phone}", + "You removed {phone}" : "Quitesti a {phone}", + "An administrator removed {phone}" : "L'alministración quitó a {phone}", + "{actor} promoted {user} to moderator" : "{actor} ascendió a {user} a moderador", + "You promoted {user} to moderator" : "Ascendiesti a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} ascendióte a moderador", + "An administrator promoted you to moderator" : "L'alministración ascendióse a moderador", + "An administrator promoted {user} to moderator" : "L'alministración ascendió a {usar} a moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un ficheru que yá nun ta disponible", + "You shared a file which is no longer available" : "Compartiesti un ficheru que yá nun ta disponible", + "The shared location is malformed" : "La llocalización compartida ye incorreuta", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configuró Matterbridge pa configurar esta conversación con otres charres", + "You set up Matterbridge to synchronize this conversation with other chats" : "Configuresti Matterbridge pa sincronizar esta conversación con otres charres", + "{actor} updated the Matterbridge configuration" : "{actor} anovó la configuración de Matter bridge", + "You updated the Matterbridge configuration" : "Anovesti la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} quitó la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Quitesti la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} anició Matterbridge", + "You started Matterbridge" : "Aniciesti Matterbridge", + "{actor} stopped Matterbridge" : "{actor} paró Matterbridge", + "You stopped Matterbridge" : "Paresti Matterbridge", + "{actor} deleted a message" : "{actor} desanició un mensaxe", + "You deleted a message" : "Desaniciesti un mensaxe", + "{actor} edited a message" : "{actor} editó un mensaxe", + "You edited a message" : "Editesti un mensaxe", + "{actor} deleted a reaction" : "{actor} desanició una reaición", + "You deleted a reaction" : "Desaniciesti una reaición", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Afitesti la caducidá de los mensaxes a %n selmana","Afitesti la caducidá de los mensaxes a %n selmanes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Afitesti la caducidá de los mensaxes a %n día","Afitesti la caducidá de los mensaxes a %n díes"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Afitesti la caducidá de los mensaxes a %n hora","Afitesti la caducidá de los mensaxes a %n hores"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Afitesti la caducidá de los mensaxes a %n minutu","Afitesti la caducidá de los mensaxes a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} afitó la caducidá de los mensaxes a %n selmana","{actor} afitó la caducidá de los mensaxes a %n selmanes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} afitó la caducidá de los mensaxes a %n día","{actor} afitó la caducidá de los mensaxes a %n díes"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} afitó la caducidá de los mensaxes a %n hora","{actor} afitó la caducidá de los mensaxes a %n hores"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} afitó la caducidá de los mensaxes a %n minutu","{actor} afitó la caducidá de los mensaxes a %n minutos"], + "{actor} disabled message expiration" : "{actor} desactivó la caducidá de los mensaxes", + "You disabled message expiration" : "Desactivesti la caducidá de los mensaxes", + "{actor} cleared the history of the conversation" : "{actor} borró l'historial de la conversación", + "You cleared the history of the conversation" : "Borresti l'historial de la conversación", + "{actor} set the conversation picture" : "{actor} afitó la semeya de la conversación", + "You set the conversation picture" : "Afitesti la semeya de la conversación", + "{actor} removed the conversation picture" : "{actor} quitó la semeya de la conversación", + "You removed the conversation picture" : "Quitesti la semeya de la conversación", + "{actor} ended the poll {poll}" : "{actor} finó la encuesta {poll}", + "You ended the poll {poll}" : "Finesti la encuesta «{poll}»", + "{actor} started the video recording" : "{actor} anició la grabación de videu", + "You started the video recording" : "Aniciesti la grabación de videu", + "{actor} stopped the video recording" : "{actor} paró la grabación de videu", + "You stopped the video recording" : "Paresti la grabación de videu", + "{actor} started the audio recording" : "{actor} anició la grabación d'audiu", + "You started the audio recording" : "Aniciesti la grabación d'audiu", + "{actor} stopped the audio recording" : "{actor} paró la grabación d'audiu", + "You stopped the audio recording" : "Paresta la grabación d'audiu", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Daquién votó na encuesta «{poll}»", + "Message deleted by author" : "L'autor desanició'l mensaxe", + "Message deleted by {actor}" : "{actor} desanició'l mensaxe", + "Message deleted by you" : "Desaniciesti'l mensaxe", + "Deleted user" : "Usuariu desaniciáu", + "Unknown number" : "Númberu desconocíu", + "Administration" : "Alministración", + "System" : "Sistema", + "%s (guest)" : "%s (convidáu)", + "Message of {user}" : "Mensaxe de: {user}", + "Talk conversations" : "Conversaciones de Talk", + "An error occurred. Please contact your administrator." : "Prodúxose un error. Ponte en contautu cola alministración.", + "File not found" : "Nun s'atopó'l ficheru", + "Poll" : "Encuesta", + "No image file provided" : "Nun se fornió nengún ficheru d'imaxe", + "File is too big" : "El ficheru ye mui grande", + "Invalid file provided" : "Fornióse un ficheru inválidu", + "Invalid image" : "La imaxe ye inválida", + "Unknown filetype" : "El tipu de ficheru ye inválidu", + "Talk mentions" : "Menciones de Talk", + "More conversations" : "Más conversaciones", + "Say hi to your friends and colleagues!" : "¡Saluda a amigos y colegues!", + "No unread mentions" : "Nun hai nenguna mención ensin lleer", + "Call in progress" : "Llamada en cursu", + "You were mentioned" : "Mentáronte", + "Write to conversation" : "Escribi na conversación", + "Description" : "Descripción", + "Private conversation" : "Conversación privada", + "Failed to upload call recording" : "Nun se pue xubir la grabación de la llamada", + "Dismiss notification" : "Escargar l'avisu", + "Transcript now available" : "La trescripción ta disponible", + "Failed to transcript call recording" : "Nun se pue trescribir la grabación de la llamada", + "Accept" : "Aceptar", + "Decline" : "Refugar", + "New message" : "Mensaxe nuevu", + "Notification" : "Avisu", + "{user} reacted with {reaction}" : "{user} reaicionó con «{reaction}»", + "{user} reacted with {reaction} in {call}" : "{user} reaicionó con «{reaction}» en: {call}", + "{user} sent you a private message" : "{user} unvióte un mensaxe priváu", + "{user} sent a message in conversation {call}" : "{user} unvióte un mensaxe priváu na conversación «{call}»", + "A deleted user sent a message in conversation {call}" : "Un usuariu desaniciáu unvió un mensaxe na conversación «{call}»", + "{user} mentioned you in a private conversation" : "«{user}» mentóte nuna conversación privada", + "{user} mentioned you in conversation {call}" : "«{user}» mentóte na conversación «{call}»", + "A guest mentioned you in conversation {call}" : "Un convidáu mentóte na conversión «{call}»", + "View message" : "Ver el mensaxe", + "Dismiss reminder" : "Escartar el recordatoriu", + "View chat" : "Ver la charra", + "Join call" : " Xunise a la llamada", + "Answer call" : "Contestar a la llamada", + "{user} would like to talk with you" : "{user} quier falar contigo", + "Call back" : "Devolver la llamad", + "You missed a call from {user}" : "Perdiesti una llamada de: {user}", + "Open settings" : "Abrir la configuración", + "pending" : "pendiente", + "error" : "error", + "Default" : "Por defeutu", + "Presentation" : "Presentación", + "Webinar" : "Webinariu", + "Conversations" : "Conversaciones", + "Messages in current conversation" : "Mensaxes na conversación actual", + "{user}" : "{user}", + "Messages" : "Mensaxes", + "Messages in other conversations" : "Mensaxes n'otres conversaciones", + "Avatar image is not square" : "La imaxe del avatar nun ye cuadrada", + "Room {number}" : "Sala {number}", + "Something unexpected happened." : "Prodúxose daqué inesperaos.", + "The URL is invalid." : "La URL ye inválida.", + "An HTTPS URL is required." : "Ríquese una URL HTTPS.", + "The email address is invalid." : "La direición de corréu electrónicu ye inválida.", + "The language is invalid." : "La llingua ye inválida.", + "The country is invalid." : "El país ye inválidu", + "Something unexpected happened. Please try again later." : "Prodúxose daqué inesperao. Volvi tentalo dempués.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Xuníos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "L'Antártida", + "Argentina" : "Arxentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islles Åland", + "Azerbaijan" : "Azerbaixán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladex", + "Belgium" : "Bélxica", + "Burkina Faso" : "Burkina Fasu", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baḥréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Les Bermudes", + "Bonaire, Sint Eustatius and Saba" : "Caribe Neerlandés", + "Brazil" : "Brasil", + "Bahamas" : "Les Baḥames", + "Bhutan" : "Bután", + "Bouvet Island" : "Islla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belize", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islles Cocos (Keeling)", + "Central African Republic" : "República Centroafricana", + "Congo" : "El Congu", + "Switzerland" : "Suiza", + "Cook Islands" : "Islles Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabu Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Islla Christmas", + "Cyprus" : "Xipre", + "Czechia" : "Chequia", + "Germany" : "Alemaña", + "Djibouti" : "Xibuti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Arxelia", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Exiptu", + "Western Sahara" : "Saḥara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Islles Fixi", + "Falkland Islands (Malvinas)" : "Islles Malvines", + "Faroe Islands" : "Islles Feroe", + "France" : "Francia", + "Gabon" : "Gabón", + "Grenada" : "Granada", + "Georgia" : "Xeorxa", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guérnesei", + "Ghana" : "Ghana", + "Gibraltar" : "Xibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islles Xeorxa del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bisáu", + "Guyana" : "Guyana", + "Hong Kong" : "Ḥong Kong", + "Heard Island and McDonald Islands" : "Islles Heard Island y McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Islla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territoriu Británicu del Océanu de Índicu", + "Iraq" : "Iraq", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jamaica" : "Xamaica", + "Jordan" : "Xordania", + "Japan" : "Xapón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "Saint Kitts y Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islles Caimán", + "Kazakhstan" : "Kazakstán", + "Lao People's Democratic Republic" : "República Popular Democrática de Laos", + "Lebanon" : "El Líbanu", + "Saint Lucia" : "Santa Llucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesothu", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgu", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónacu", + "Montenegro" : "Montenegru", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islles Márxal", + "Mali" : "Malí", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macáu", + "Northern Mariana Islands" : "Islles Marianes del Norte", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauriciu", + "Maldives" : "Maldives", + "Malawi" : "Malaui", + "Mexico" : "Méxicu", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níxer", + "Norfolk Island" : "Islla Norfolk", + "Nigeria" : "Nixeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papua Nueva Guinea", + "Philippines" : "Filipines", + "Pakistan" : "Paquistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint Pierre y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puertu Ricu", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Paláu", + "Paraguay" : "Paraguái", + "Qatar" : "Qatar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Russian Federation" : "Federación Rusa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Islles Salomón", + "Seychelles" : "Seixeles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Lena", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard ya Islla Jan Mayen *", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Lleona", + "San Marino" : "San Marín", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santu Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Islles Turques y Caicos", + "Chad" : "Chad", + "Togo" : "Togu", + "Thailand" : "Tailandia", + "Tajikistan" : "Taxiquistán", + "Tokelau" : "Tokeláu", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Tunicia", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidá y Tobagu", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucraína", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islles Ultramarines Menores d'Estaos Xuníos", + "Uruguay" : "Uruguái", + "Uzbekistan" : "Uzbequistán", + "Holy See" : "Santa Sede", + "Saint Vincent and the Grenadines" : "San Vicente y Les Granadines", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis y Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yeme", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Federation" : "Federación", + "High-performance backend" : "Backend de rindimientu altu", + "Error: Cannot connect to server" : "Error: nun pue conectar al sirvidor", + "Error: Certificate expired" : "Error: el certificáu caducó", + "Could not get version" : "Nun se pudo consiguir la versión", + "Error: Server responded with: {error}" : "Error: el sirvidor respondió con «{error}»", + "Error: Unknown error occurred" : "Error: prodúxose un error desconocíu", + "SIP configuration" : "Configuración de SIP", + "Invalid date, date format must be YYYY-MM-DD" : "La data ye inválida, el so formatu ha ser AAAA-MM-DD", + "Conversation not found" : "Nun s'atopó la converación", + "Leave call" : "Colar de la llamada", + "Stay in call" : "Quedar na llamada", + "Share this file" : "Compartir esti ficheru", + "Join conversation" : "Xunise a la conversación", + "This conversation is password-protected." : "Esta conversación ta protexida con una contraseña.", + "The password is wrong. Try again." : "La contraseña ye incorreuta. Volvi tentalo.", + "Password" : "Contraseña", + "Submit" : "Unviar", + "Error requesting the password." : "Hebo un error al solicitar la contraseña.", + "This conversation has ended" : "Esta conversación finó", + "Error occurred when joining the conversation" : "Prodúxose un error al xunite a la conversación", + "Everyone" : "Tol mundu", + "Disable calls" : "Desactivar les llamaes", + "Save changes" : "Guardar los cambeos", + "Saving …" : "Guardando…", + "Saved!" : "¡Guardóse!", + "Description is not provided" : "Nun se fornió la descripción", + "Enabled" : "Activóse", + "Disabled" : "Desactivóse", + "Bots settings" : "Configuración de los robós", + "State" : "Estáu", + "Name" : "Nome", + "Total errors count" : "Númberu d'errores totales", + "Find more bots" : "Atopar más robós", + "Beta" : "Beta", + "Permissions" : "Permisos", + "All messages" : "Tolos mensaxes", + "Off" : "Non", + "General settings" : "Configuración xeneral", + "Enable encryption" : "Activar el cifráu", + "Pending" : "Pendiente", + "Error" : "Error", + "Active" : "Activa", + "Expired" : "Caducó", + "Never" : "Enxamás", + "Language" : "Llingua", + "Country" : "País", + "Status" : "Estáu", + "Created at" : "Data de creación", + "Limits" : "Llendes", + "Yes" : "Sí", + "No" : "Non", + "_%n user_::_%n users_" : ["%n usuariu","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "Downloading …" : "Baxando…", + "An error occurred while installing the Matterbridge app" : "Prodúxose un error mentanto s'instalaba l'aplicación Matterbridge", + "Status: Checking connection" : "Estáu: comprobando la conexón", + "Delete this server" : "Desaniciar esti sirvidor", + "Test this server" : "Probar esti sirvidor", + "SIP configuration saved!" : "¡Guardóse la configuración de SIP!", + "Error code" : "Códigu d'error", + "High-performance backend URL" : "URL del backend de rindimientu altu", + "High-performance backend settings saved" : "Guardóse la configuración del backend de rindimientu altu", + "STUN server URL" : "URL del sirvidor STUN", + "The server address is invalid" : "La direición del sirvidor ye inválida", + "STUN settings saved" : "Guardóse la configuración STUN", + "STUN servers" : "Sirvidores STUN", + "{option1} and {option2}" : "{option1} y {option2}", + "TURN server URL" : "URL de sirvidor TURN", + "TURN server secret" : "Secretu del sirvidor TURN", + "TURN server protocols" : "Protocolos del sirvidor TURN", + "TURN settings saved" : "Guardóse la configuración de TURN", + "TURN servers" : "Sirvidores TURN", + "Failed" : "Falló", + "OK" : "Normal", + "Checking …" : "Comprobando…", + "Federated user" : "Usuariu federáu", + "Confirm" : "Confirmar", + "Reset" : "Reafitar", + "Room {roomNumber}" : "Sala {roomNumber}", + "Cancel" : "Encaboxar", + "Back" : "Atrás", + "Now" : "Agora", + "Loading …" : "Cargando…", + "From" : "De", + "To" : "Pa", + "Calendar" : "Calendariu", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Nun hai nengún resultáu", + "Done" : "Fecho", + "Raise hand" : "Alzar la mano", + "Lower hand" : "Baxar la mano", + "This conversation is read-only" : "Esta conversación ye namás de llectura", + "Reload" : "Volver cargar", + "{nickName} raised their hand." : "«{nickName}» alzo la mano", + "A participant raised their hand." : "Un participante alzó la mano.", + "Previous page of videos" : "Páxina de vídeos anterior", + "Next page of videos" : "Páxina de vídeos siguiente", + "Connecting …" : "Conectando…", + "Calling …" : "Llamando…", + "Copy link" : "Copiar l'enllaz", + "None" : "Nada", + "Error while accessing camera" : "Hebo un error mentanto s'accedía a la cámara", + "You are not allowed to enable video" : "Nun tienes permisu p'activar el videu", + "No video. Click to select device" : "Nun hai videu. Calca pa seleicionar un preséu", + "Disable video" : "Desactivar el videu", + "Enable video" : "Activar el videu", + "You" : "Tu", + "Show screen" : "Amosar la pantalla", + "Collapse" : "Recoyer", + "Expand" : "Espander", + "You need to be logged in to upload files" : "Tienes d'aniciar la sesión pa xubir ficheros", + "Drop your files to upload" : "Suelta los ficheros pa xubilos", + "Conversation messages" : "Mensaxes de la conversación", + "Post message" : "Espublizar el mensaxe", + "Federated conversation" : "Conversación federada", + "Public conversation" : "Conversación pública", + "Favorite" : "Meter en Favoritos", + "Date:" : "Data:", + "Hide details" : "Anubrir los detalles", + "Show details" : "Amosar los detalles", + "Error while updating conversation name" : "Hebo un error mentanto s'anovaba'l nome de la conversación", + "Error while updating conversation description" : "Hebo un error mentanto s'anovaba la descripción de la conversación", + "Enter a name for this conversation" : "Introduz un nome pa esta conversación", + "Edit conversation name" : "Editar el nome de la conversación", + "Edit conversation description" : "Editar la descripción de la conversación", + "Enter a description for this conversation" : "Introduz una descripción pa esta conversación", + "Picture" : "Semeya", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Choose" : "Escoyer", + "Error removing conversation picture" : "Hebo un error al quitar la semeya de la conversación", + "The file must be a PNG or JPG" : "El ficheru a ser PNG o JPG", + "All permissions" : "Tolos permisos", + "Restricted" : "Restrinxóse", + "Advanced permissions" : "Permisos avanzaos", + "Edit permissions" : "Editar los permisos", + "Basic Info" : "Información básica", + "Personal" : "Personal", + "Matterbridge" : "Matterbridge", + "Bots" : "Robós", + "Danger zone" : "Zona de peligru", + "Leave conversation" : "Colar de la conversación", + "Delete conversation" : "Desaniciar la conversación", + "Error while deleting conversation" : "Hebo un error mentanto se desaniciaba la conversación", + "Delete all chat messages" : "Desaniciar los mensaxes de toles charres", + "Error while clearing chat history" : "Hebo un error mentanto se borraba l'historial de la charra", + "Be careful, these actions cannot be undone." : "Ten curiáu, estes aiciones nun se puen desfacer.", + "Delete chat messages" : "Desaniciar los mensaxes de la charra", + "_%n hour_::_%n hours_" : ["%n hora","%n hores"], + "_%n day_::_%n days_" : ["%n día","%n díes"], + "_%n week_::_%n weeks_" : ["%n selmana","%n selmanes"], + "Error when trying to set message expiration" : "Hebo un error al tentar d'afitar la caducidá de los mensaxes", + "Message expiration" : "Caducidá de los mensaxes", + "Password protection" : "Proteición con contraseña", + "Change password" : "Camudar la contraseña", + "Enter new password" : "Introduz una contraseña nueva", + "Save password" : "Guardar la contraseña", + "This conversation is open to registered users" : "Esta conversación ta abierta a los usuarios rexistraos", + "This conversation is limited to the current participants" : "Esta conversación ta llendada a los participantes actuales", + "Error occurred when opening or limiting the conversation" : "Prodúxose un error al abrir o llendar la conversación", + "Open conversation" : "Abrir la conversación", + "Invalid language" : "La llingua ye inválida", + "Error occurred while updating start time" : "Prodúxose un error mentanto s'anovaba la hora de comienzu", + "Error occurred when locking the conversation" : "Prodúxose un error mentanto se bloquiaba la conversación", + "Error occurred when unlocking the conversation" : "Prodúxose un error mentanto se desbloquiaba la conversación", + "Lock conversation" : "Bloquiar la conversación", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquia la conversación pa impidir que naide espublice mensaxes o anicie llamaes", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Desaniciar", + "unknown state" : "estáu desonocíu", + "running" : "n'execución", + "not running" : "nun ta n'execución", + "Bridge saved" : "Guardóse la ponte", + "Messaging systems" : "Sistemes de mensaxería", + "Enable bridge" : "Activar la ponte", + "Show Matterbridge log" : "Amosar el rexistru de Matterbridge", + "Log content" : "Conteníu del rexistru", + "Notifications" : "Avisos", + "Important conversation" : "Converación importante", + "Join" : "Xunise", + "Error while creating the conversation" : "Hebo un error mentanto se creaba la conversación", + "Unread mentions" : "Menciones ensin lleer", + "Create conversation" : "Crear una conversación", + "Log in" : "Aniciar la sesión", + "An error occurred while calling a phone number" : "Prodúxose un error mentanto se llamaba a un númberu de teléfonu", + "Phone number could not be called: {error}" : "Nun se pudo llamar al númberu de teléfonu: {error}", + "Phone number could not be called" : "Nun se pudo llamar al númberu de teléfonu", + "Creating the conversation …" : "Creando la conversación…", + "Remove from favorites" : "Quitar de Favoritos", + "Add to favorites" : "Meter en Favoritos", + "Pending invitations" : "Invitaciones pendientes", + "Decline invitation" : "Refugar la invitación", + "Accept invitation" : "Aceptar la invitación", + "No pending invitations" : "Nun hai nenguna invitación pendiente", + "Home" : "Aniciu", + "Unread" : "Ensin lleer", + "Alphabetically" : "Alfabéticamente", + "No matches found" : "Nun s'atopó nenguna coincidencia", + "No conversations found" : "Nun s'atopó nenguna conversación", + "You have no unread mentions." : "Nun tienes nenguna mención ensin lleer.", + "You have no unread messages." : "Nun tienes nengún mensaxe ensin lleer.", + "An error occurred while performing the search" : "Prodúxose un error mentanto se facía la busca", + "Conversation list" : "Llista de conversaciones", + "Unread messages" : "Mensaxes ensin lleer", + "New personal note" : "Nota personal nueva", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federaos", + "New private conversation" : "Conversación privada nueva", + "Other sources" : "Otros oríxenes", + "Open conversations" : "Abrir les conversaciones", + "No search results" : "Nun hai nengún resultáu de la busca", + "Users, groups and teams" : "Usuarios, grupos y equipos", + "Users and groups" : "Usuarios y grupos", + "Users and teams" : "Usuarios y equipos", + "Groups and teams" : "Grupos y equipos", + "You are currently waiting in the lobby" : "Tas na sala d'espera", + "No microphone available" : "Nun hai nengún micrófonu disponible", + "No camera available" : "Nun hai nenguna cámara disponible", + "Devices" : "Preseos", + "Backgrounds" : "Fondos", + "Calls are not supported in your browser" : "Les llamaes nun son compatible col sirvidor", + "Access to microphone is only possible with HTTPS" : "L'accesu al micrófonu namás ye posible con HTTPS", + "Access to microphone was denied" : "Negóse l'accesu al micrófonu", + "Error while accessing microphone" : "Hebo un error mentanto s'accedía al micrófonu", + "Access to camera is only possible with HTTPS" : "L'accesu a la cámara namás ye posible con HTTPS", + "The call is being recorded." : "La llamada ta grabándose", + "Invalid path selected" : "Seleicionóse un camín inválidu", + "Blur" : "Emborrinar", + "Upload" : "Xunir", + "Files" : "Ficheros", + "(edited)" : "(editóse)", + "The message has expired or has been deleted" : "El mensaxe caducó o desanicióse", + "24 hours" : "24 hores", + "7 days" : "7 díes", + "Message text copied to clipboard" : "El testu del mensaxe copióse nel cartafueyu", + "Message text could not be copied" : "El testu del mensaxe nun se pudo copiar", + "A reminder was successfully removed" : "El recordatoriu quitóse correutamente", + "Error occurred when removing a reminder" : "Prodúxose un error al quitar un recordatoriu", + "Error occurred when creating a reminder" : "Prodúxose un error al crear un recordatoriu", + "Reply" : "Responder", + "More actions" : "Más aiciones", + "Set reminder" : "Configurar un recordatoriu", + "Reply privately" : "Responder per privao", + "Edit message" : "Editar el mensaxe", + "Copy message link" : "Copiar l'enllaz del mensaxe", + "Go to file" : "Dir al ficheru", + "Translate" : "Traducir", + "Close reactions menu" : "Zarrar el menú de les reaiciones", + "Dismiss" : "Escartar", + "Go to conversation" : "Dir a la conversación", + "Detect language" : "Detectar la llingua", + "The message could not be translated" : "Nun se pudo traducir el mensaxe", + "Translation copied to clipboard" : "La traducción copióse al cartafueyu", + "Translation could not be copied" : "Nun se pudo copiar la traducción", + "Translate message" : "Traducir el mensaxe", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar el testu traducíu", + "Send now" : "Unviar agora", + "Message sent" : "Unvióse'l mensaxe", + "Deleting message" : "Desaniciando'l mensaxe", + "An error occurred while deleting the message" : "Prodúxose un error mentanto se desaniciaba'l mensaxe", + "Contact" : "Contautu", + "Sending message" : "Unviando'l mensaxe", + "Not enough free space to upload file" : "Nun hai abondu espaciu llibre pa xubir el ficheru", + "You cannot send messages to this conversation at the moment" : "Pel momentu, nun pues unviar mensaxes a esta conversación", + "Open poll" : "Abrir la encuesta", + "See results" : "Ver los resultaos", + "Reactions" : "Reaiciones", + "Show all reactions" : "Amosar toles reaiciones", + "Add more reactions" : "Amestar más reaiciones", + "No messages" : "Nun hai nengún mensaxe", + "Unpin" : "Lliberar", + "Add participants" : "Amestar participantes", + "Conversation visibility" : "Visibilidá de la conversación", + "This conversation has been locked" : "Bloquióse esta conversación", + "Send message" : "Unviar el mensaxe", + "Send without notification" : "Unviar ensin avisar", + "The message could not be edited" : "Nun se pudo editar el mensaxe", + "File upload is not available in this conversation" : "La xuba de ficheros nun ta disponible nesta conversación", + "Add emoji" : "Amestar un fustaxe", + "Send later" : "Unviar dempués", + "Smart picker" : "Selector intelixente", + "New file" : "Ficheru nuevu", + "Blank" : "Baleru", + "Error while creating file" : "Hebo un error mentanto se creaba'l ficheru", + "Name of the new file" : "Nome del ficheru nuevu", + "{user1} is typing …" : "{user1} ta escribiendo…", + "{user1} and {user2} are typing …" : "{user1} y {user2} tán escribiendo…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} tán escribiendo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n más tán escribiendo…","{user1}, {user2}, {user3} y %n más tán escribiendo…"], + "Add more files" : "Amestar más ficheros", + "Send" : "Unviar", + "In this conversation {user} can:" : "Nesta conversión, {user} pue:", + "Start a call" : "Aniciar una llamada", + "Skip the lobby" : "Saltar la sala d'espera", + "Enable the microphone" : "Activar el micrófonu", + "Enable the camera" : "Activar la cámara", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Anovar los permisos", + "Updating permissions" : "Anovando los permisos", + "Create poll" : "Crear una encuesta", + "Question" : "Entruga", + "Ask a question" : "Entrugar", + "Answers" : "Rempuestes", + "Settings" : "Configuración", + "Anonymous poll" : "Encuesta anónima", + "You voted for this option" : "Votesti esta opción", + "End poll" : "Finar la encuesta", + "Change your vote" : "Cambiar el votu", + "Results" : "Resultaos", + "Send a message to \"{roomName}\"" : "¿Quies unviar un mensaxe a «{roomName}»?", + "Show list of participants" : "Amosar la llista de participantes", + "The message was sent to \"{roomName}\"" : "El mensaxe unvióse a «{roomName}»", + "Back to main room" : "Volver a la sala principal", + "Message all rooms" : "Xestionar toles sales", + "Start session" : "Aniciar la sesión", + "Stop session" : "Parar la sesión", + "Disable lobby" : "Desactivar la sala d'espera", + "moderator" : "moderador", + "bot" : "robó", + "guest" : "convidáu", + "Ringing …" : "Sonando…", + "Raised their hand" : "Alzó la mano", + "in the lobby" : "na sala", + "Resend invitation" : "Volver unviar la invitación", + "Copy phone number" : "Copiar el númberu de teléfonu", + "Grant all permissions" : "Conceder tolos permisos", + "Remove all permissions" : "Quitar tolos permisos", + "Remove" : "Quitar", + "Add users, groups or teams" : "Amestar usuarios, grupos o equipos", + "Add users or groups" : "Amestar usuarios o grupos", + "Add users or teams" : "Amestar usuarios o equipos", + "Add users" : "Amestar usuarios", + "Add groups or teams" : "Amestar grupos o equipos", + "Add groups" : "Amestar grupos", + "Add teams" : "Amestar equipos", + "Add other sources" : "Amestar otra fonte", + "Add emails" : "Amestar direiciones de corréu electróniques", + "Integrations" : "Integraciones", + "Add federated users" : "Amestar usuarios federaos", + "Searching …" : "Buscando…", + "Search for more users" : "Buscar más usuarios", + "Search or add participants" : "Buscar o amestar participantes", + "An error occurred while adding the participants" : "Prodúxose un error mentanto s'amestaben los participantes", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir la charra", + "You have new unread messages in the chat." : "Tienes mensaxes ensin lleer nuevos na charra.", + "You have been mentioned in the chat." : "Mentáronte na charra.", + "Chat" : "Charra", + "Details" : "Detalles", + "Shared items" : "Elementos compartíos", + "No results found" : "Nun s'atopó nengún resultáu", + "Load more results" : "Cargar más resultaos", + "Projects" : "Proyeutos", + "No shared items" : "Nun hai nengún elementu compartíu", + "No open conversations found" : "Nun s'atopó nenguna conversación abierta", + "Number is not valid" : "El númberu nun ye válidu", + "Phone numbers" : "Númberos de teléfonu", + "Display name: {name}" : "Nome visible: {name}", + "Save name" : "Guardar el nome", + "Error while saving sounds setting" : "Hebo un error mentanto se guardaba la configuración de soníu", + "Notification settings" : "Configuración de los avisos", + "Default language" : "Llingua predeterminada", + "Privacy" : "Privacidá", + "Search" : "Buscar", + "Start call" : "Aniciar la llamada", + "End call" : "Finar la llamada", + "Stop recording" : "Parar la grabación", + "Send a reaction" : "Unviar una reaición", + "_%n participant in call_::_%n participants in call_" : ["%n participante na llamada","%n participantes na llamada"], + "You are not allowed to enable screensharing" : "Nun tienes permisu p'activar la compartición de pantalla", + "Screensharing options" : "Opciones de la compartición de pantalla", + "Enable screensharing" : "Activar la compartición de pantalla", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla. P'ameyorar esta situación, desactiva'l desenfoque del fondu o'l videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla. P'ameyorar esta situación, prueba a desactivar el videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a vete.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, desactiva'l desenfoque del fondu o'l videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y ver la to pantalla. P'ameyorar esta situación, prueba a desactivar la compartición de la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el desenfoque del fondu.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el videu.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete.", + "Show your screen" : "Amosar la to pantalla", + "Stop screensharing" : "Dexar de compartir la pantalla", + "Start recording" : "Aniciar la grabación", + "Keep" : "Caltener", + "Open dialpad" : "Abrir el tecláu numbéricu", + "Search …" : "Buscar…", + "Mention everyone" : "Mentar a tol mundu", + "The conversation does not exist" : "La conversación nun esiste", + "Join a conversation or start a new one!" : "¡Xúnite una conversación o anicia una nueva!", + "Duplicate session" : "Duplicar la sesión", + "Join a conversation or start a new one" : "Xúnite a una conversación o anicia otra", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuariu de Nextcloud", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Saltar la verificación del TLS", + "Matrix server URL" : "URL del sirvidor Matrix", + "User" : "Usuariu", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del sirvidor Mattermost", + "Mattermost user" : "Usuariu de Mattermost", + "Team name" : "Nome del equipu", + "Channel name" : "Nome de la canal", + "Zulip server URL" : "URL del sirvidor Zulip", + "Zulip channel" : "Canal de Zulip", + "API token" : "Pase de l'API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "ID o nome del sirvidor", + "Channel" : "Canal", + "Login" : "Aniciar la sesión", + "Chat ID" : "ID de la charra", + "Nickname" : "Nomatu", + "Connection password" : "Contraseña de la conexón", + "IRC channel" : "Canal IRC", + "Channel password" : "Contraseña de la canal", + "NickServ nickname" : "Nomatu de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Client ID" : "ID de veceru", + "Team ID" : "ID d'equipu", + "Thread ID" : "ID de filu", + "Jabber ID" : "ID de Jabber", + "Media" : "Multimedia", + "Polls" : "Encuestes", + "Voice messages" : "Mensaxes de voz", + "Locations" : "Llugares", + "Audio" : "Audiu", + "Show all files" : "Amosar tolos ficheros", + "Show all polls" : "Amosar toles encuestes", + "Show all voice messages" : "Amosar tolos mensaxe de voz", + "Show all locations" : "Amosar tolos llugares", + "Group" : "Grupu", + "Team" : "Equipu", + "You and {user0} left the call" : "Tu y {user0} colestis de la canal", + "You: {lastMessage}" : "Tu: {lastMessage}", + "Leave this page" : "Colar d'esta páxina", + "In conversation" : "Na conversación", + "Error while clearing conversation history" : "Hebo un error mentanto se borraba l'historial de la conversación", + "Error occurred while allowing guests" : "Prodúxose un error mentanto se permitíen a los convidaos", + "Conversation password has been saved" : "Guardóse la contraseña de la conversación", + "Conversation password has been removed" : "Quitóse la contraseña de la conversación", + "Error occurred while saving conversation password" : "Prodúxose un error mentanto se guardaba la contraseña de la conversación", + "Could not delete the conversation picture" : "Nun se pudo desaniciar la semeya de la conversación", + "Could not post message: {errorMessage}" : "Nun se pudo espublizar el mensaxe: {errorMessage}", + "Invitations sent" : "Unviáronse les invitaciones", + "Error occurred when sending invitations" : "Prodúxose un error mentanto s'unviaben les conversaciones", + "An error occurred while requesting assistance" : "Prodúxose un error mentanto se solicitaba l'asistencia", + "An error occurred while accepting an invitation" : "Prodúxose un error mentanto s'aceptaba una invitación", + "An error occurred while submitting your vote" : "Prodúxose un error mentanto s'unviaba'l votu", + "An error occurred while ending the poll" : "Prodúxose un error mentanto finaba la encuesta", + "Failed to add reaction" : "Nun se pue amestar la reaición", + "Failed to remove reaction" : "Nun se pue desaniciar la reaición", + "Error while uploading file \"{fileName}\"" : "Hebo un error mentanto se xubía'l ficheru «{fileName}»", + "Not enough free space to upload file \"{fileName}\"" : "Nun hai abondu espaciu pa xubir el ficheru «{fileName}»", + "You are not allowed to share files" : "Nun tienes permisu pa compartir ficheros", + "Error while sharing file" : "Hebo un error mentanto se compartía'l ficheru", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n hores"], + "_%n minute _::_%n minutes_" : ["%n minutu","%n minutos"], + "_In %n minute_::_In %n minutes_" : ["En %n minutu","En %n minutos"], + "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", + "This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}", + "Next week – {timeLocale}" : "La próxima selmana – {timeLocale}", + "Conversation link copied to clipboard" : "L'enllaz de la conversación copióse nel cartafueyu", + "The link could not be copied" : "Nun se pudo copiar l'enllaz", + "Please reload the page." : "Volvi cargar la páxina.", + "Do not disturb" : "Nun molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófonu {number}", + "Camera {number}" : "Cámara {number}", + "Access to microphone & camera was denied" : "Negóse l'accesu al micrófonu y a la cámara", + "WebRTC is not supported in your browser" : "WebRTC nun ye compatible col restolador", + "Android app" : "Aplicación p'Android", + "iOS app" : "Aplicación pa iOS", + "__language_name__" : "Asturianu", + "Call summary (%s)" : "Resume de llamaes (%s)", + "Tasks" : "Xeres", + "Notes" : "Notes", + "Reports" : "Informes", + "Call summary" : "Resume de llamaes", + "Open poll • You voted already" : "Encuesta abierta • Yá votesti", + "Open poll • Click to vote" : "Encuesta abierta • Calca pa votar", + "Poll • Ended" : "Encuesta • Finó", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultaos de la encuesta • %n votu","Resultaos de la encuesta • %n votos"], + "Submit vote" : "Unviar el votu", + "Failed to save sounds setting" : "Nun se pue guardar la configuración de los soníos", + "Sounds setting saved" : "Guardóse la configuración de los soníos" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ast.json b/l10n/ast.json new file mode 100644 index 0000000..611ef57 --- /dev/null +++ b/l10n/ast.json @@ -0,0 +1,959 @@ +{ "translations": { + "a conversation" : "un conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Atendiesti una llamada con «{user1}»", + "_%n guest_::_%n guests_" : ["%n convidáu","%n convidaos"], + "You attended a call with {user1} and {user2}" : "Atendiesti una llamada con «{user1}» y «{user2}»", + "You attended a call with {user1}, {user2} and {user3}" : "Atendiesti una llamada con «{user1}», «{user2}» y «{user3}»", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Atendiesti una llamada con «{user1}», «{user2}», «{user3}» y «{user4}»", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Atendiesti una llamada con «{user1}», «{user2}», «{user3}», «{user4}» y «{user5}»", + "_%n other_::_%n others_" : ["%n más","%n más"], + "{actor} invited you to {call}" : "{actor} convidóte a «{call}»", + "You were invited to a conversation or had a call" : "Convidáronte a una conversación o tuviesti una llamada", + "Other activities" : "Otres actividaes", + "Talk" : "Charra", + "Guest" : "Convidáu", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Afáyate en Nextcloud Talk!\nNesta conversación vas recibir información tocante a les funciones nueves que tean disponibles en Nextcloud Talk.", + "## New in Talk %s" : "## Novedaes de Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora pues usar Microsoft Edge y Safari pa participar nes llamaes y videollamaes", + "Talk updates ✅" : "Anovamientos de Talk ✅", + "Reaction deleted by author" : "L'autor desanició la reaición", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Creó la conversación", + "System created the conversation" : "El sistema creó la conversación", + "An administrator created the conversation" : "L'alministración creó la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomó la conversación «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Renomesti la conversación «%1$s» a «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "L'alministración renomó la conversación «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} configuró la descripción", + "You set the description" : "Configuresti la descripción", + "An administrator set the description" : "L'alministración configuró la descripción", + "{actor} removed the description" : "{actor} quitesti la descripción", + "You removed the description" : "Quitesti la descripción", + "An administrator removed the description" : "L'alministración quitó la descripción", + "You started a silent call" : "Aniciesti una llamada silenciosa", + "{actor} started a silent call" : "{actor} anició una llamada silenciosa", + "You started a call" : "Aniciesti una llamada", + "{actor} started a call" : "{actor} anició una llamada", + "{actor} joined the call" : "{actor} xunióse a la llamada", + "You joined the call" : "Xuniéstite a la llamada", + "{actor} left the call" : "{actor} coló de la llamada", + "You left the call" : "Colesti de la llamada", + "{actor} unlocked the conversation" : "{actor} desbloquió la conversación", + "You unlocked the conversation" : "Desbloquiesti la conversación", + "An administrator unlocked the conversation" : "L'alministración desbloquió la conversación", + "{actor} locked the conversation" : "{actor} bloquió la conversación", + "You locked the conversation" : "Bloquiesti la conversación", + "An administrator locked the conversation" : "L'alministración bloquió la conversación", + "{actor} limited the conversation to the current participants" : "{actor} llendó'l númberu de participantes de la conversación al actual", + "You limited the conversation to the current participants" : "Llendesti'l númberu de participantes de la conversación al actual", + "An administrator limited the conversation to the current participants" : "L'alministración llendó'l númberu de participantes de la conversación al actual", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a usuarios rexistraos", + "You opened the conversation to registered users" : "Abriesti la conversación a usuarios rexistraos", + "An administrator opened the conversation to registered users" : "L'alministración abrió la conversación a usuarios rexistraos", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abrió la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "You opened the conversation to registered users and users created with the Guests app" : "Abriesti la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "An administrator opened the conversation to registered users and users created with the Guests app" : "L'alministración abrió la conversación a usuarios rexistraos y usuarios creaos cola aplicación Convidaos", + "The conversation is now open to everyone" : "La conversación ta abierta a tol mundu", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación a tol mundu", + "You opened the conversation to everyone" : "Abriesti la conversación a tol mundu", + "{actor} restricted the conversation to moderators" : "{actor} restrinxó la conversación a moderadores", + "You restricted the conversation to moderators" : "Restrinxesti la conversación a moderadores", + "{actor} started breakout rooms" : "{actor} activó les sales de grupu de trabayu", + "You started breakout rooms" : "Aniciesti les sales de grupu de trabayu", + "{actor} stopped breakout rooms" : "{actor} paró les sales de grupu de trabayu", + "You stopped breakout rooms" : "Paresti les sales de grupu de trabayu", + "{actor} allowed guests" : "{actor} permitió a los convidaos", + "You allowed guests" : "Permitiesti a los convidaos", + "An administrator allowed guests" : "L'alministrador permitió a los convidaos", + "{actor} set a password" : "{actor} afitó una contraseña", + "You set a password" : "Afitesti una contraseña", + "An administrator set a password" : "L'alministración afitó una contraseña", + "{actor} removed the password" : "{actor} quitó la contraseña", + "You removed the password" : "Quitesti la contraseña", + "An administrator removed the password" : "L'alministración quitó la contraseña", + "{actor} added {user}" : "{actor} amestó a {user}", + "You joined the conversation" : "Xuniéstite a la conversación", + "{actor} joined the conversation" : "{actor} xunióse a la conversación", + "You added {user}" : "Amestesti a {user}", + "{actor} added you" : "{actor} amestóte", + "An administrator added you" : "L'alministración amestóse", + "An administrator added {user}" : "L'alministración amestó a {user}", + "You left the conversation" : "Colesti de la conversación", + "{actor} left the conversation" : "{actor} coló de la conversación", + "{actor} removed {user}" : "{actor} quitó a {user}", + "You removed {user}" : "Quitesti a {user}", + "{actor} removed you" : "{actor} quitóte", + "An administrator removed you" : "L'alministración quitóte", + "An administrator removed {user}" : "L'alministración quitó a {user}", + "{actor} invited {federated_user}" : "{actor} convidó a {federated_user}", + "You invited {federated_user}" : "Convidesti a {federated_user}", + "You accepted the invitation" : "Aceptesti la invitación", + "{actor} invited you" : "{actor} convidóte", + "An administrator invited you" : "L'alministración convidóte", + "An administrator invited {federated_user}" : "L'alministración convidó a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptó la invitación", + "{actor} removed {federated_user}" : "{actor} quitó a {federated_user}", + "You removed {federated_user}" : "Quitesti a {federated_user}", + "An administrator removed {federated_user}" : "L'alministración quitó a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} refugó la invitación", + "{actor} added group {group}" : "{actor} amestó'l grupu «{group}»", + "You added group {group}" : "Amestesti'l grupu «{group}»", + "An administrator added group {group}" : "L'alministración amestó'l grupu «{group}»", + "{actor} removed group {group}" : "{actor} quitó'l grupu «{group}»", + "You removed group {group}" : "Quietesti'l grupu «{group}»", + "An administrator removed group {group}" : "L'alministración quitó'l grupu «{group}»", + "{actor} added team {circle}" : "{actor} amestó l'equipu «{circle}»", + "You added team {circle}" : "Amestesti l'equipu «{circle}»", + "An administrator added team {circle}" : "L'alministración amestó l'equipu «{circle}»", + "{actor} removed team {circle}" : "{actor} quitó l'equipu «{circle}»", + "You removed team {circle}" : "Quitesti l'equipu «{circle}»", + "An administrator removed team {circle}" : "L'alministración quitó l'equipu «{circle}»", + "{actor} added {phone}" : "{actor} amestó a {phone}", + "You added {phone}" : "Amestesti a {phone}", + "An administrator added {phone}" : "L'alministración amestó a {phone}", + "{actor} removed {phone}" : "{actor} quitó a {phone}", + "You removed {phone}" : "Quitesti a {phone}", + "An administrator removed {phone}" : "L'alministración quitó a {phone}", + "{actor} promoted {user} to moderator" : "{actor} ascendió a {user} a moderador", + "You promoted {user} to moderator" : "Ascendiesti a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} ascendióte a moderador", + "An administrator promoted you to moderator" : "L'alministración ascendióse a moderador", + "An administrator promoted {user} to moderator" : "L'alministración ascendió a {usar} a moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un ficheru que yá nun ta disponible", + "You shared a file which is no longer available" : "Compartiesti un ficheru que yá nun ta disponible", + "The shared location is malformed" : "La llocalización compartida ye incorreuta", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configuró Matterbridge pa configurar esta conversación con otres charres", + "You set up Matterbridge to synchronize this conversation with other chats" : "Configuresti Matterbridge pa sincronizar esta conversación con otres charres", + "{actor} updated the Matterbridge configuration" : "{actor} anovó la configuración de Matter bridge", + "You updated the Matterbridge configuration" : "Anovesti la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} quitó la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Quitesti la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} anició Matterbridge", + "You started Matterbridge" : "Aniciesti Matterbridge", + "{actor} stopped Matterbridge" : "{actor} paró Matterbridge", + "You stopped Matterbridge" : "Paresti Matterbridge", + "{actor} deleted a message" : "{actor} desanició un mensaxe", + "You deleted a message" : "Desaniciesti un mensaxe", + "{actor} edited a message" : "{actor} editó un mensaxe", + "You edited a message" : "Editesti un mensaxe", + "{actor} deleted a reaction" : "{actor} desanició una reaición", + "You deleted a reaction" : "Desaniciesti una reaición", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Afitesti la caducidá de los mensaxes a %n selmana","Afitesti la caducidá de los mensaxes a %n selmanes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Afitesti la caducidá de los mensaxes a %n día","Afitesti la caducidá de los mensaxes a %n díes"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Afitesti la caducidá de los mensaxes a %n hora","Afitesti la caducidá de los mensaxes a %n hores"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Afitesti la caducidá de los mensaxes a %n minutu","Afitesti la caducidá de los mensaxes a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} afitó la caducidá de los mensaxes a %n selmana","{actor} afitó la caducidá de los mensaxes a %n selmanes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} afitó la caducidá de los mensaxes a %n día","{actor} afitó la caducidá de los mensaxes a %n díes"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} afitó la caducidá de los mensaxes a %n hora","{actor} afitó la caducidá de los mensaxes a %n hores"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} afitó la caducidá de los mensaxes a %n minutu","{actor} afitó la caducidá de los mensaxes a %n minutos"], + "{actor} disabled message expiration" : "{actor} desactivó la caducidá de los mensaxes", + "You disabled message expiration" : "Desactivesti la caducidá de los mensaxes", + "{actor} cleared the history of the conversation" : "{actor} borró l'historial de la conversación", + "You cleared the history of the conversation" : "Borresti l'historial de la conversación", + "{actor} set the conversation picture" : "{actor} afitó la semeya de la conversación", + "You set the conversation picture" : "Afitesti la semeya de la conversación", + "{actor} removed the conversation picture" : "{actor} quitó la semeya de la conversación", + "You removed the conversation picture" : "Quitesti la semeya de la conversación", + "{actor} ended the poll {poll}" : "{actor} finó la encuesta {poll}", + "You ended the poll {poll}" : "Finesti la encuesta «{poll}»", + "{actor} started the video recording" : "{actor} anició la grabación de videu", + "You started the video recording" : "Aniciesti la grabación de videu", + "{actor} stopped the video recording" : "{actor} paró la grabación de videu", + "You stopped the video recording" : "Paresti la grabación de videu", + "{actor} started the audio recording" : "{actor} anició la grabación d'audiu", + "You started the audio recording" : "Aniciesti la grabación d'audiu", + "{actor} stopped the audio recording" : "{actor} paró la grabación d'audiu", + "You stopped the audio recording" : "Paresta la grabación d'audiu", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Daquién votó na encuesta «{poll}»", + "Message deleted by author" : "L'autor desanició'l mensaxe", + "Message deleted by {actor}" : "{actor} desanició'l mensaxe", + "Message deleted by you" : "Desaniciesti'l mensaxe", + "Deleted user" : "Usuariu desaniciáu", + "Unknown number" : "Númberu desconocíu", + "Administration" : "Alministración", + "System" : "Sistema", + "%s (guest)" : "%s (convidáu)", + "Message of {user}" : "Mensaxe de: {user}", + "Talk conversations" : "Conversaciones de Talk", + "An error occurred. Please contact your administrator." : "Prodúxose un error. Ponte en contautu cola alministración.", + "File not found" : "Nun s'atopó'l ficheru", + "Poll" : "Encuesta", + "No image file provided" : "Nun se fornió nengún ficheru d'imaxe", + "File is too big" : "El ficheru ye mui grande", + "Invalid file provided" : "Fornióse un ficheru inválidu", + "Invalid image" : "La imaxe ye inválida", + "Unknown filetype" : "El tipu de ficheru ye inválidu", + "Talk mentions" : "Menciones de Talk", + "More conversations" : "Más conversaciones", + "Say hi to your friends and colleagues!" : "¡Saluda a amigos y colegues!", + "No unread mentions" : "Nun hai nenguna mención ensin lleer", + "Call in progress" : "Llamada en cursu", + "You were mentioned" : "Mentáronte", + "Write to conversation" : "Escribi na conversación", + "Description" : "Descripción", + "Private conversation" : "Conversación privada", + "Failed to upload call recording" : "Nun se pue xubir la grabación de la llamada", + "Dismiss notification" : "Escargar l'avisu", + "Transcript now available" : "La trescripción ta disponible", + "Failed to transcript call recording" : "Nun se pue trescribir la grabación de la llamada", + "Accept" : "Aceptar", + "Decline" : "Refugar", + "New message" : "Mensaxe nuevu", + "Notification" : "Avisu", + "{user} reacted with {reaction}" : "{user} reaicionó con «{reaction}»", + "{user} reacted with {reaction} in {call}" : "{user} reaicionó con «{reaction}» en: {call}", + "{user} sent you a private message" : "{user} unvióte un mensaxe priváu", + "{user} sent a message in conversation {call}" : "{user} unvióte un mensaxe priváu na conversación «{call}»", + "A deleted user sent a message in conversation {call}" : "Un usuariu desaniciáu unvió un mensaxe na conversación «{call}»", + "{user} mentioned you in a private conversation" : "«{user}» mentóte nuna conversación privada", + "{user} mentioned you in conversation {call}" : "«{user}» mentóte na conversación «{call}»", + "A guest mentioned you in conversation {call}" : "Un convidáu mentóte na conversión «{call}»", + "View message" : "Ver el mensaxe", + "Dismiss reminder" : "Escartar el recordatoriu", + "View chat" : "Ver la charra", + "Join call" : " Xunise a la llamada", + "Answer call" : "Contestar a la llamada", + "{user} would like to talk with you" : "{user} quier falar contigo", + "Call back" : "Devolver la llamad", + "You missed a call from {user}" : "Perdiesti una llamada de: {user}", + "Open settings" : "Abrir la configuración", + "pending" : "pendiente", + "error" : "error", + "Default" : "Por defeutu", + "Presentation" : "Presentación", + "Webinar" : "Webinariu", + "Conversations" : "Conversaciones", + "Messages in current conversation" : "Mensaxes na conversación actual", + "{user}" : "{user}", + "Messages" : "Mensaxes", + "Messages in other conversations" : "Mensaxes n'otres conversaciones", + "Avatar image is not square" : "La imaxe del avatar nun ye cuadrada", + "Room {number}" : "Sala {number}", + "Something unexpected happened." : "Prodúxose daqué inesperaos.", + "The URL is invalid." : "La URL ye inválida.", + "An HTTPS URL is required." : "Ríquese una URL HTTPS.", + "The email address is invalid." : "La direición de corréu electrónicu ye inválida.", + "The language is invalid." : "La llingua ye inválida.", + "The country is invalid." : "El país ye inválidu", + "Something unexpected happened. Please try again later." : "Prodúxose daqué inesperao. Volvi tentalo dempués.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Xuníos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "L'Antártida", + "Argentina" : "Arxentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islles Åland", + "Azerbaijan" : "Azerbaixán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladex", + "Belgium" : "Bélxica", + "Burkina Faso" : "Burkina Fasu", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baḥréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Les Bermudes", + "Bonaire, Sint Eustatius and Saba" : "Caribe Neerlandés", + "Brazil" : "Brasil", + "Bahamas" : "Les Baḥames", + "Bhutan" : "Bután", + "Bouvet Island" : "Islla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belize", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islles Cocos (Keeling)", + "Central African Republic" : "República Centroafricana", + "Congo" : "El Congu", + "Switzerland" : "Suiza", + "Cook Islands" : "Islles Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabu Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Islla Christmas", + "Cyprus" : "Xipre", + "Czechia" : "Chequia", + "Germany" : "Alemaña", + "Djibouti" : "Xibuti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Arxelia", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Exiptu", + "Western Sahara" : "Saḥara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Islles Fixi", + "Falkland Islands (Malvinas)" : "Islles Malvines", + "Faroe Islands" : "Islles Feroe", + "France" : "Francia", + "Gabon" : "Gabón", + "Grenada" : "Granada", + "Georgia" : "Xeorxa", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guérnesei", + "Ghana" : "Ghana", + "Gibraltar" : "Xibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islles Xeorxa del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bisáu", + "Guyana" : "Guyana", + "Hong Kong" : "Ḥong Kong", + "Heard Island and McDonald Islands" : "Islles Heard Island y McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Islla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territoriu Británicu del Océanu de Índicu", + "Iraq" : "Iraq", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jamaica" : "Xamaica", + "Jordan" : "Xordania", + "Japan" : "Xapón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "Saint Kitts y Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islles Caimán", + "Kazakhstan" : "Kazakstán", + "Lao People's Democratic Republic" : "República Popular Democrática de Laos", + "Lebanon" : "El Líbanu", + "Saint Lucia" : "Santa Llucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesothu", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgu", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónacu", + "Montenegro" : "Montenegru", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islles Márxal", + "Mali" : "Malí", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macáu", + "Northern Mariana Islands" : "Islles Marianes del Norte", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauriciu", + "Maldives" : "Maldives", + "Malawi" : "Malaui", + "Mexico" : "Méxicu", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níxer", + "Norfolk Island" : "Islla Norfolk", + "Nigeria" : "Nixeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papua Nueva Guinea", + "Philippines" : "Filipines", + "Pakistan" : "Paquistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint Pierre y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puertu Ricu", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Paláu", + "Paraguay" : "Paraguái", + "Qatar" : "Qatar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Russian Federation" : "Federación Rusa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Islles Salomón", + "Seychelles" : "Seixeles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Lena", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard ya Islla Jan Mayen *", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Lleona", + "San Marino" : "San Marín", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santu Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Islles Turques y Caicos", + "Chad" : "Chad", + "Togo" : "Togu", + "Thailand" : "Tailandia", + "Tajikistan" : "Taxiquistán", + "Tokelau" : "Tokeláu", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Tunicia", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidá y Tobagu", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucraína", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islles Ultramarines Menores d'Estaos Xuníos", + "Uruguay" : "Uruguái", + "Uzbekistan" : "Uzbequistán", + "Holy See" : "Santa Sede", + "Saint Vincent and the Grenadines" : "San Vicente y Les Granadines", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis y Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yeme", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Federation" : "Federación", + "High-performance backend" : "Backend de rindimientu altu", + "Error: Cannot connect to server" : "Error: nun pue conectar al sirvidor", + "Error: Certificate expired" : "Error: el certificáu caducó", + "Could not get version" : "Nun se pudo consiguir la versión", + "Error: Server responded with: {error}" : "Error: el sirvidor respondió con «{error}»", + "Error: Unknown error occurred" : "Error: prodúxose un error desconocíu", + "SIP configuration" : "Configuración de SIP", + "Invalid date, date format must be YYYY-MM-DD" : "La data ye inválida, el so formatu ha ser AAAA-MM-DD", + "Conversation not found" : "Nun s'atopó la converación", + "Leave call" : "Colar de la llamada", + "Stay in call" : "Quedar na llamada", + "Share this file" : "Compartir esti ficheru", + "Join conversation" : "Xunise a la conversación", + "This conversation is password-protected." : "Esta conversación ta protexida con una contraseña.", + "The password is wrong. Try again." : "La contraseña ye incorreuta. Volvi tentalo.", + "Password" : "Contraseña", + "Submit" : "Unviar", + "Error requesting the password." : "Hebo un error al solicitar la contraseña.", + "This conversation has ended" : "Esta conversación finó", + "Error occurred when joining the conversation" : "Prodúxose un error al xunite a la conversación", + "Everyone" : "Tol mundu", + "Disable calls" : "Desactivar les llamaes", + "Save changes" : "Guardar los cambeos", + "Saving …" : "Guardando…", + "Saved!" : "¡Guardóse!", + "Description is not provided" : "Nun se fornió la descripción", + "Enabled" : "Activóse", + "Disabled" : "Desactivóse", + "Bots settings" : "Configuración de los robós", + "State" : "Estáu", + "Name" : "Nome", + "Total errors count" : "Númberu d'errores totales", + "Find more bots" : "Atopar más robós", + "Beta" : "Beta", + "Permissions" : "Permisos", + "All messages" : "Tolos mensaxes", + "Off" : "Non", + "General settings" : "Configuración xeneral", + "Enable encryption" : "Activar el cifráu", + "Pending" : "Pendiente", + "Error" : "Error", + "Active" : "Activa", + "Expired" : "Caducó", + "Never" : "Enxamás", + "Language" : "Llingua", + "Country" : "País", + "Status" : "Estáu", + "Created at" : "Data de creación", + "Limits" : "Llendes", + "Yes" : "Sí", + "No" : "Non", + "_%n user_::_%n users_" : ["%n usuariu","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "Downloading …" : "Baxando…", + "An error occurred while installing the Matterbridge app" : "Prodúxose un error mentanto s'instalaba l'aplicación Matterbridge", + "Status: Checking connection" : "Estáu: comprobando la conexón", + "Delete this server" : "Desaniciar esti sirvidor", + "Test this server" : "Probar esti sirvidor", + "SIP configuration saved!" : "¡Guardóse la configuración de SIP!", + "Error code" : "Códigu d'error", + "High-performance backend URL" : "URL del backend de rindimientu altu", + "High-performance backend settings saved" : "Guardóse la configuración del backend de rindimientu altu", + "STUN server URL" : "URL del sirvidor STUN", + "The server address is invalid" : "La direición del sirvidor ye inválida", + "STUN settings saved" : "Guardóse la configuración STUN", + "STUN servers" : "Sirvidores STUN", + "{option1} and {option2}" : "{option1} y {option2}", + "TURN server URL" : "URL de sirvidor TURN", + "TURN server secret" : "Secretu del sirvidor TURN", + "TURN server protocols" : "Protocolos del sirvidor TURN", + "TURN settings saved" : "Guardóse la configuración de TURN", + "TURN servers" : "Sirvidores TURN", + "Failed" : "Falló", + "OK" : "Normal", + "Checking …" : "Comprobando…", + "Federated user" : "Usuariu federáu", + "Confirm" : "Confirmar", + "Reset" : "Reafitar", + "Room {roomNumber}" : "Sala {roomNumber}", + "Cancel" : "Encaboxar", + "Back" : "Atrás", + "Now" : "Agora", + "Loading …" : "Cargando…", + "From" : "De", + "To" : "Pa", + "Calendar" : "Calendariu", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Nun hai nengún resultáu", + "Done" : "Fecho", + "Raise hand" : "Alzar la mano", + "Lower hand" : "Baxar la mano", + "This conversation is read-only" : "Esta conversación ye namás de llectura", + "Reload" : "Volver cargar", + "{nickName} raised their hand." : "«{nickName}» alzo la mano", + "A participant raised their hand." : "Un participante alzó la mano.", + "Previous page of videos" : "Páxina de vídeos anterior", + "Next page of videos" : "Páxina de vídeos siguiente", + "Connecting …" : "Conectando…", + "Calling …" : "Llamando…", + "Copy link" : "Copiar l'enllaz", + "None" : "Nada", + "Error while accessing camera" : "Hebo un error mentanto s'accedía a la cámara", + "You are not allowed to enable video" : "Nun tienes permisu p'activar el videu", + "No video. Click to select device" : "Nun hai videu. Calca pa seleicionar un preséu", + "Disable video" : "Desactivar el videu", + "Enable video" : "Activar el videu", + "You" : "Tu", + "Show screen" : "Amosar la pantalla", + "Collapse" : "Recoyer", + "Expand" : "Espander", + "You need to be logged in to upload files" : "Tienes d'aniciar la sesión pa xubir ficheros", + "Drop your files to upload" : "Suelta los ficheros pa xubilos", + "Conversation messages" : "Mensaxes de la conversación", + "Post message" : "Espublizar el mensaxe", + "Federated conversation" : "Conversación federada", + "Public conversation" : "Conversación pública", + "Favorite" : "Meter en Favoritos", + "Date:" : "Data:", + "Hide details" : "Anubrir los detalles", + "Show details" : "Amosar los detalles", + "Error while updating conversation name" : "Hebo un error mentanto s'anovaba'l nome de la conversación", + "Error while updating conversation description" : "Hebo un error mentanto s'anovaba la descripción de la conversación", + "Enter a name for this conversation" : "Introduz un nome pa esta conversación", + "Edit conversation name" : "Editar el nome de la conversación", + "Edit conversation description" : "Editar la descripción de la conversación", + "Enter a description for this conversation" : "Introduz una descripción pa esta conversación", + "Picture" : "Semeya", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Choose" : "Escoyer", + "Error removing conversation picture" : "Hebo un error al quitar la semeya de la conversación", + "The file must be a PNG or JPG" : "El ficheru a ser PNG o JPG", + "All permissions" : "Tolos permisos", + "Restricted" : "Restrinxóse", + "Advanced permissions" : "Permisos avanzaos", + "Edit permissions" : "Editar los permisos", + "Basic Info" : "Información básica", + "Personal" : "Personal", + "Matterbridge" : "Matterbridge", + "Bots" : "Robós", + "Danger zone" : "Zona de peligru", + "Leave conversation" : "Colar de la conversación", + "Delete conversation" : "Desaniciar la conversación", + "Error while deleting conversation" : "Hebo un error mentanto se desaniciaba la conversación", + "Delete all chat messages" : "Desaniciar los mensaxes de toles charres", + "Error while clearing chat history" : "Hebo un error mentanto se borraba l'historial de la charra", + "Be careful, these actions cannot be undone." : "Ten curiáu, estes aiciones nun se puen desfacer.", + "Delete chat messages" : "Desaniciar los mensaxes de la charra", + "_%n hour_::_%n hours_" : ["%n hora","%n hores"], + "_%n day_::_%n days_" : ["%n día","%n díes"], + "_%n week_::_%n weeks_" : ["%n selmana","%n selmanes"], + "Error when trying to set message expiration" : "Hebo un error al tentar d'afitar la caducidá de los mensaxes", + "Message expiration" : "Caducidá de los mensaxes", + "Password protection" : "Proteición con contraseña", + "Change password" : "Camudar la contraseña", + "Enter new password" : "Introduz una contraseña nueva", + "Save password" : "Guardar la contraseña", + "This conversation is open to registered users" : "Esta conversación ta abierta a los usuarios rexistraos", + "This conversation is limited to the current participants" : "Esta conversación ta llendada a los participantes actuales", + "Error occurred when opening or limiting the conversation" : "Prodúxose un error al abrir o llendar la conversación", + "Open conversation" : "Abrir la conversación", + "Invalid language" : "La llingua ye inválida", + "Error occurred while updating start time" : "Prodúxose un error mentanto s'anovaba la hora de comienzu", + "Error occurred when locking the conversation" : "Prodúxose un error mentanto se bloquiaba la conversación", + "Error occurred when unlocking the conversation" : "Prodúxose un error mentanto se desbloquiaba la conversación", + "Lock conversation" : "Bloquiar la conversación", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquia la conversación pa impidir que naide espublice mensaxes o anicie llamaes", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Desaniciar", + "unknown state" : "estáu desonocíu", + "running" : "n'execución", + "not running" : "nun ta n'execución", + "Bridge saved" : "Guardóse la ponte", + "Messaging systems" : "Sistemes de mensaxería", + "Enable bridge" : "Activar la ponte", + "Show Matterbridge log" : "Amosar el rexistru de Matterbridge", + "Log content" : "Conteníu del rexistru", + "Notifications" : "Avisos", + "Important conversation" : "Converación importante", + "Join" : "Xunise", + "Error while creating the conversation" : "Hebo un error mentanto se creaba la conversación", + "Unread mentions" : "Menciones ensin lleer", + "Create conversation" : "Crear una conversación", + "Log in" : "Aniciar la sesión", + "An error occurred while calling a phone number" : "Prodúxose un error mentanto se llamaba a un númberu de teléfonu", + "Phone number could not be called: {error}" : "Nun se pudo llamar al númberu de teléfonu: {error}", + "Phone number could not be called" : "Nun se pudo llamar al númberu de teléfonu", + "Creating the conversation …" : "Creando la conversación…", + "Remove from favorites" : "Quitar de Favoritos", + "Add to favorites" : "Meter en Favoritos", + "Pending invitations" : "Invitaciones pendientes", + "Decline invitation" : "Refugar la invitación", + "Accept invitation" : "Aceptar la invitación", + "No pending invitations" : "Nun hai nenguna invitación pendiente", + "Home" : "Aniciu", + "Unread" : "Ensin lleer", + "Alphabetically" : "Alfabéticamente", + "No matches found" : "Nun s'atopó nenguna coincidencia", + "No conversations found" : "Nun s'atopó nenguna conversación", + "You have no unread mentions." : "Nun tienes nenguna mención ensin lleer.", + "You have no unread messages." : "Nun tienes nengún mensaxe ensin lleer.", + "An error occurred while performing the search" : "Prodúxose un error mentanto se facía la busca", + "Conversation list" : "Llista de conversaciones", + "Unread messages" : "Mensaxes ensin lleer", + "New personal note" : "Nota personal nueva", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federaos", + "New private conversation" : "Conversación privada nueva", + "Other sources" : "Otros oríxenes", + "Open conversations" : "Abrir les conversaciones", + "No search results" : "Nun hai nengún resultáu de la busca", + "Users, groups and teams" : "Usuarios, grupos y equipos", + "Users and groups" : "Usuarios y grupos", + "Users and teams" : "Usuarios y equipos", + "Groups and teams" : "Grupos y equipos", + "You are currently waiting in the lobby" : "Tas na sala d'espera", + "No microphone available" : "Nun hai nengún micrófonu disponible", + "No camera available" : "Nun hai nenguna cámara disponible", + "Devices" : "Preseos", + "Backgrounds" : "Fondos", + "Calls are not supported in your browser" : "Les llamaes nun son compatible col sirvidor", + "Access to microphone is only possible with HTTPS" : "L'accesu al micrófonu namás ye posible con HTTPS", + "Access to microphone was denied" : "Negóse l'accesu al micrófonu", + "Error while accessing microphone" : "Hebo un error mentanto s'accedía al micrófonu", + "Access to camera is only possible with HTTPS" : "L'accesu a la cámara namás ye posible con HTTPS", + "The call is being recorded." : "La llamada ta grabándose", + "Invalid path selected" : "Seleicionóse un camín inválidu", + "Blur" : "Emborrinar", + "Upload" : "Xunir", + "Files" : "Ficheros", + "(edited)" : "(editóse)", + "The message has expired or has been deleted" : "El mensaxe caducó o desanicióse", + "24 hours" : "24 hores", + "7 days" : "7 díes", + "Message text copied to clipboard" : "El testu del mensaxe copióse nel cartafueyu", + "Message text could not be copied" : "El testu del mensaxe nun se pudo copiar", + "A reminder was successfully removed" : "El recordatoriu quitóse correutamente", + "Error occurred when removing a reminder" : "Prodúxose un error al quitar un recordatoriu", + "Error occurred when creating a reminder" : "Prodúxose un error al crear un recordatoriu", + "Reply" : "Responder", + "More actions" : "Más aiciones", + "Set reminder" : "Configurar un recordatoriu", + "Reply privately" : "Responder per privao", + "Edit message" : "Editar el mensaxe", + "Copy message link" : "Copiar l'enllaz del mensaxe", + "Go to file" : "Dir al ficheru", + "Translate" : "Traducir", + "Close reactions menu" : "Zarrar el menú de les reaiciones", + "Dismiss" : "Escartar", + "Go to conversation" : "Dir a la conversación", + "Detect language" : "Detectar la llingua", + "The message could not be translated" : "Nun se pudo traducir el mensaxe", + "Translation copied to clipboard" : "La traducción copióse al cartafueyu", + "Translation could not be copied" : "Nun se pudo copiar la traducción", + "Translate message" : "Traducir el mensaxe", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar el testu traducíu", + "Send now" : "Unviar agora", + "Message sent" : "Unvióse'l mensaxe", + "Deleting message" : "Desaniciando'l mensaxe", + "An error occurred while deleting the message" : "Prodúxose un error mentanto se desaniciaba'l mensaxe", + "Contact" : "Contautu", + "Sending message" : "Unviando'l mensaxe", + "Not enough free space to upload file" : "Nun hai abondu espaciu llibre pa xubir el ficheru", + "You cannot send messages to this conversation at the moment" : "Pel momentu, nun pues unviar mensaxes a esta conversación", + "Open poll" : "Abrir la encuesta", + "See results" : "Ver los resultaos", + "Reactions" : "Reaiciones", + "Show all reactions" : "Amosar toles reaiciones", + "Add more reactions" : "Amestar más reaiciones", + "No messages" : "Nun hai nengún mensaxe", + "Unpin" : "Lliberar", + "Add participants" : "Amestar participantes", + "Conversation visibility" : "Visibilidá de la conversación", + "This conversation has been locked" : "Bloquióse esta conversación", + "Send message" : "Unviar el mensaxe", + "Send without notification" : "Unviar ensin avisar", + "The message could not be edited" : "Nun se pudo editar el mensaxe", + "File upload is not available in this conversation" : "La xuba de ficheros nun ta disponible nesta conversación", + "Add emoji" : "Amestar un fustaxe", + "Send later" : "Unviar dempués", + "Smart picker" : "Selector intelixente", + "New file" : "Ficheru nuevu", + "Blank" : "Baleru", + "Error while creating file" : "Hebo un error mentanto se creaba'l ficheru", + "Name of the new file" : "Nome del ficheru nuevu", + "{user1} is typing …" : "{user1} ta escribiendo…", + "{user1} and {user2} are typing …" : "{user1} y {user2} tán escribiendo…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} tán escribiendo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n más tán escribiendo…","{user1}, {user2}, {user3} y %n más tán escribiendo…"], + "Add more files" : "Amestar más ficheros", + "Send" : "Unviar", + "In this conversation {user} can:" : "Nesta conversión, {user} pue:", + "Start a call" : "Aniciar una llamada", + "Skip the lobby" : "Saltar la sala d'espera", + "Enable the microphone" : "Activar el micrófonu", + "Enable the camera" : "Activar la cámara", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Anovar los permisos", + "Updating permissions" : "Anovando los permisos", + "Create poll" : "Crear una encuesta", + "Question" : "Entruga", + "Ask a question" : "Entrugar", + "Answers" : "Rempuestes", + "Settings" : "Configuración", + "Anonymous poll" : "Encuesta anónima", + "You voted for this option" : "Votesti esta opción", + "End poll" : "Finar la encuesta", + "Change your vote" : "Cambiar el votu", + "Results" : "Resultaos", + "Send a message to \"{roomName}\"" : "¿Quies unviar un mensaxe a «{roomName}»?", + "Show list of participants" : "Amosar la llista de participantes", + "The message was sent to \"{roomName}\"" : "El mensaxe unvióse a «{roomName}»", + "Back to main room" : "Volver a la sala principal", + "Message all rooms" : "Xestionar toles sales", + "Start session" : "Aniciar la sesión", + "Stop session" : "Parar la sesión", + "Disable lobby" : "Desactivar la sala d'espera", + "moderator" : "moderador", + "bot" : "robó", + "guest" : "convidáu", + "Ringing …" : "Sonando…", + "Raised their hand" : "Alzó la mano", + "in the lobby" : "na sala", + "Resend invitation" : "Volver unviar la invitación", + "Copy phone number" : "Copiar el númberu de teléfonu", + "Grant all permissions" : "Conceder tolos permisos", + "Remove all permissions" : "Quitar tolos permisos", + "Remove" : "Quitar", + "Add users, groups or teams" : "Amestar usuarios, grupos o equipos", + "Add users or groups" : "Amestar usuarios o grupos", + "Add users or teams" : "Amestar usuarios o equipos", + "Add users" : "Amestar usuarios", + "Add groups or teams" : "Amestar grupos o equipos", + "Add groups" : "Amestar grupos", + "Add teams" : "Amestar equipos", + "Add other sources" : "Amestar otra fonte", + "Add emails" : "Amestar direiciones de corréu electróniques", + "Integrations" : "Integraciones", + "Add federated users" : "Amestar usuarios federaos", + "Searching …" : "Buscando…", + "Search for more users" : "Buscar más usuarios", + "Search or add participants" : "Buscar o amestar participantes", + "An error occurred while adding the participants" : "Prodúxose un error mentanto s'amestaben los participantes", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir la charra", + "You have new unread messages in the chat." : "Tienes mensaxes ensin lleer nuevos na charra.", + "You have been mentioned in the chat." : "Mentáronte na charra.", + "Chat" : "Charra", + "Details" : "Detalles", + "Shared items" : "Elementos compartíos", + "No results found" : "Nun s'atopó nengún resultáu", + "Load more results" : "Cargar más resultaos", + "Projects" : "Proyeutos", + "No shared items" : "Nun hai nengún elementu compartíu", + "No open conversations found" : "Nun s'atopó nenguna conversación abierta", + "Number is not valid" : "El númberu nun ye válidu", + "Phone numbers" : "Númberos de teléfonu", + "Display name: {name}" : "Nome visible: {name}", + "Save name" : "Guardar el nome", + "Error while saving sounds setting" : "Hebo un error mentanto se guardaba la configuración de soníu", + "Notification settings" : "Configuración de los avisos", + "Default language" : "Llingua predeterminada", + "Privacy" : "Privacidá", + "Search" : "Buscar", + "Start call" : "Aniciar la llamada", + "End call" : "Finar la llamada", + "Stop recording" : "Parar la grabación", + "Send a reaction" : "Unviar una reaición", + "_%n participant in call_::_%n participants in call_" : ["%n participante na llamada","%n participantes na llamada"], + "You are not allowed to enable screensharing" : "Nun tienes permisu p'activar la compartición de pantalla", + "Screensharing options" : "Opciones de la compartición de pantalla", + "Enable screensharing" : "Activar la compartición de pantalla", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla. P'ameyorar esta situación, desactiva'l desenfoque del fondu o'l videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla. P'ameyorar esta situación, prueba a desactivar el videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a ver la to pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan a vete.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, desactiva'l desenfoque del fondu o'l videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el videu mentanto compartes la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y ver la to pantalla. P'ameyorar esta situación, prueba a desactivar la compartición de la pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el desenfoque del fondu.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete y vete. P'ameyorar esta situación, prueba a desactivar el videu.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La conexón a internet o l'ordenador tán ocupaos y ye probable que los demás participantes nun seyan entendete.", + "Show your screen" : "Amosar la to pantalla", + "Stop screensharing" : "Dexar de compartir la pantalla", + "Start recording" : "Aniciar la grabación", + "Keep" : "Caltener", + "Open dialpad" : "Abrir el tecláu numbéricu", + "Search …" : "Buscar…", + "Mention everyone" : "Mentar a tol mundu", + "The conversation does not exist" : "La conversación nun esiste", + "Join a conversation or start a new one!" : "¡Xúnite una conversación o anicia una nueva!", + "Duplicate session" : "Duplicar la sesión", + "Join a conversation or start a new one" : "Xúnite a una conversación o anicia otra", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuariu de Nextcloud", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Saltar la verificación del TLS", + "Matrix server URL" : "URL del sirvidor Matrix", + "User" : "Usuariu", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del sirvidor Mattermost", + "Mattermost user" : "Usuariu de Mattermost", + "Team name" : "Nome del equipu", + "Channel name" : "Nome de la canal", + "Zulip server URL" : "URL del sirvidor Zulip", + "Zulip channel" : "Canal de Zulip", + "API token" : "Pase de l'API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "ID o nome del sirvidor", + "Channel" : "Canal", + "Login" : "Aniciar la sesión", + "Chat ID" : "ID de la charra", + "Nickname" : "Nomatu", + "Connection password" : "Contraseña de la conexón", + "IRC channel" : "Canal IRC", + "Channel password" : "Contraseña de la canal", + "NickServ nickname" : "Nomatu de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Client ID" : "ID de veceru", + "Team ID" : "ID d'equipu", + "Thread ID" : "ID de filu", + "Jabber ID" : "ID de Jabber", + "Media" : "Multimedia", + "Polls" : "Encuestes", + "Voice messages" : "Mensaxes de voz", + "Locations" : "Llugares", + "Audio" : "Audiu", + "Show all files" : "Amosar tolos ficheros", + "Show all polls" : "Amosar toles encuestes", + "Show all voice messages" : "Amosar tolos mensaxe de voz", + "Show all locations" : "Amosar tolos llugares", + "Group" : "Grupu", + "Team" : "Equipu", + "You and {user0} left the call" : "Tu y {user0} colestis de la canal", + "You: {lastMessage}" : "Tu: {lastMessage}", + "Leave this page" : "Colar d'esta páxina", + "In conversation" : "Na conversación", + "Error while clearing conversation history" : "Hebo un error mentanto se borraba l'historial de la conversación", + "Error occurred while allowing guests" : "Prodúxose un error mentanto se permitíen a los convidaos", + "Conversation password has been saved" : "Guardóse la contraseña de la conversación", + "Conversation password has been removed" : "Quitóse la contraseña de la conversación", + "Error occurred while saving conversation password" : "Prodúxose un error mentanto se guardaba la contraseña de la conversación", + "Could not delete the conversation picture" : "Nun se pudo desaniciar la semeya de la conversación", + "Could not post message: {errorMessage}" : "Nun se pudo espublizar el mensaxe: {errorMessage}", + "Invitations sent" : "Unviáronse les invitaciones", + "Error occurred when sending invitations" : "Prodúxose un error mentanto s'unviaben les conversaciones", + "An error occurred while requesting assistance" : "Prodúxose un error mentanto se solicitaba l'asistencia", + "An error occurred while accepting an invitation" : "Prodúxose un error mentanto s'aceptaba una invitación", + "An error occurred while submitting your vote" : "Prodúxose un error mentanto s'unviaba'l votu", + "An error occurred while ending the poll" : "Prodúxose un error mentanto finaba la encuesta", + "Failed to add reaction" : "Nun se pue amestar la reaición", + "Failed to remove reaction" : "Nun se pue desaniciar la reaición", + "Error while uploading file \"{fileName}\"" : "Hebo un error mentanto se xubía'l ficheru «{fileName}»", + "Not enough free space to upload file \"{fileName}\"" : "Nun hai abondu espaciu pa xubir el ficheru «{fileName}»", + "You are not allowed to share files" : "Nun tienes permisu pa compartir ficheros", + "Error while sharing file" : "Hebo un error mentanto se compartía'l ficheru", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n hores"], + "_%n minute _::_%n minutes_" : ["%n minutu","%n minutos"], + "_In %n minute_::_In %n minutes_" : ["En %n minutu","En %n minutos"], + "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", + "This weekend – {timeLocale}" : "Esta fin de selmana – {timeLocale}", + "Next week – {timeLocale}" : "La próxima selmana – {timeLocale}", + "Conversation link copied to clipboard" : "L'enllaz de la conversación copióse nel cartafueyu", + "The link could not be copied" : "Nun se pudo copiar l'enllaz", + "Please reload the page." : "Volvi cargar la páxina.", + "Do not disturb" : "Nun molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófonu {number}", + "Camera {number}" : "Cámara {number}", + "Access to microphone & camera was denied" : "Negóse l'accesu al micrófonu y a la cámara", + "WebRTC is not supported in your browser" : "WebRTC nun ye compatible col restolador", + "Android app" : "Aplicación p'Android", + "iOS app" : "Aplicación pa iOS", + "__language_name__" : "Asturianu", + "Call summary (%s)" : "Resume de llamaes (%s)", + "Tasks" : "Xeres", + "Notes" : "Notes", + "Reports" : "Informes", + "Call summary" : "Resume de llamaes", + "Open poll • You voted already" : "Encuesta abierta • Yá votesti", + "Open poll • Click to vote" : "Encuesta abierta • Calca pa votar", + "Poll • Ended" : "Encuesta • Finó", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultaos de la encuesta • %n votu","Resultaos de la encuesta • %n votos"], + "Submit vote" : "Unviar el votu", + "Failed to save sounds setting" : "Nun se pue guardar la configuración de los soníos", + "Sounds setting saved" : "Guardóse la configuración de los soníos" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/be.js b/l10n/be.js new file mode 100644 index 0000000..0b1e0aa --- /dev/null +++ b/l10n/be.js @@ -0,0 +1,1761 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "размова", + "(Duration %s)" : "(Працягласць %s)", + "_%n guest_::_%n guests_" : ["%n госць","%n госці","%n гасцей","%n гасцей"], + "_%n other_::_%n others_" : ["яшчэ %n","яшчэ %n","яшчэ %n","яшчэ %n"], + "{actor} invited you to {call}" : "{actor} запрасіў(-ла) вас у {call}", + "Other activities" : "Іншая актыўнасць", + "Talk" : "Talk", + "Guest" : "Госць", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Вітаем у Nextcloud Talk!\nУ гэтай размове вы даведаецеся пра новыя функцыі, даступныя ў Nextcloud Talk.", + "## New in Talk %s" : "## Новае ў Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Цяпер можна выкарыстоўваць Microsoft Edge і Safari для ўдзелу ў аўдыя- і відэазванках", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Цяпер вы можаце апавясціць усіх удзельнікаў, напісаўшы ў чат \"@all\"", + "- You can now mention guests in the chat" : "- Цяпер вы можаце згадваць у чаце гасцей", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Цяпер вы можаце запампоўваць і перацягваць файлы непасрэдна са сваёй прылады ў чат", + "- You can now search for chats and messages in the unified search in the top bar" : "- Цяпер вы можаце шукаць чаты і паведамленні ва ўніфікаваным пошуку ў верхняй панэлі", + "- You can now change your camera and microphone while being in a call" : "- Цяпер вы можаце змяняць камеру і мікрафон падчас выкліку", + "- Raise your hand in a call with the R key" : "- Падніміце руку падчас размовы з дапамогай клавішы R", + "- You can now blur your background in the newly designed call view" : "- Цяпер вы можаце размываць фон у новым дызайне выкліку", + "- Moderators can now assign general and individual permissions to participants" : "- Мадэратары цяпер могуць прызначаць удзельнікам агульныя і індывідуальныя дазволы", + "- You can now react to chat messages" : "- Цяпер вы можаце рэагаваць на паведамленні ў чаце", + "- Configure an expiration time for chat messages" : "- Наладжвайце тэрмін дзеяння паведамленняў у чаце", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Мадэратары зараз могуць ствараць групавыя пакоі (патрабуе высокапрадукцыйнага бэкэнду)", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Акрамя размытасці фону ў відэавыкліках, цяпер даступныя віртуальныя фоны.", + "- Reactions are now available during calls" : "- Падчас выклікаў цяпер даступныя рэакцыі", + "- Groups can now be mentioned in chats" : "- Цяпер у чатах можна згадваць групы", + "- **Markdown** can now be used in _chat_ messages" : "- У паведамленнях _чата_ цяпер можна выкарыстоўваць **Markdown**", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Выкарыстоўвайце размову **Асабістыя нататкі**, каб рабіць нататкі і абменьвацца інфармацыяй паміж вашымі прыладамі", + "- Unsent message drafts are now saved in your browser" : "- Чарнавікі неадпраўленых паведамленняў цяпер захоўваюцца ў браўзеры", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Цяпер у размовах адлюстроўваюцца будучыя званкі з прывязаных падзей календара і замены пры адсутнасці.", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Вітайце кліент Nextcloud Talk для працоўнага стала для Windows, macOS і Linux: %s", + "- Search for messages of the current conversation directly in the right sidebar" : "- Шукайце паведамленні ў бягучай размове непасрэдна ў правай бакавой панэлі", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- З дапамогай новага кампактнага спісу (уключыце ў наладах Talk) вы адразу бачыце больш размоў", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Размовы пра сустрэчы цяпер сінхранізуюць загаловак і апісанне з календара і хаваюцца з дапамогай фільтра пошуку, пакуль не наблізіцца час іх пачатку.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Пазначайце размовы як сакрэтныя ў наладах апавяшчэнняў, каб схаваць змест паведамленняў са спісу размоў і апавяшчэнняў", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Каб атрымліваць push-апавяшчэнні ў рэжыме \"Не турбаваць\", пазначайце размовы як важныя", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Дадайце іншых удзельнікаў да індывідуальнага выкліку, каб адразу стварыць новы групавы выклік", + "- Use threads to keep your chat and discussions organized" : "- Арганізоўвайце чаты і абмеркаванні з дапамогай гутарак", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Цяпер падчас выкліку даступна імгненная транскрыпцыя (патрабуецца праграма ExApp для імгненнай транскрыпцыі і высокапрадукцыйны бэкенд)", + "- Moderators can now pin messages so they are kept at the top" : "- Цяпер мадэратары могуць замацоўваць паведамленні, якія будуць заўсёды ўверсе старонкі", + "- Schedule a message to send it at a later time" : "- Заплануйце адпраўку паведамлення на пазнейшы час", + "Talk updates ✅" : "Абнаўленні Talk ✅", + "Reaction deleted by author" : "Рэакцыя выдалена аўтарам", + "{actor} created the conversation" : "{actor} стварыў(-ла) размову", + "You created the conversation" : "Вы стварылі размову", + "System created the conversation" : "Сістэма стварыла размову", + "An administrator created the conversation" : "Адміністратар стварыў размову", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} перайменаваў(-ла) размову з \"%1$s\" на \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вы перайменавалі размову з \"%1$s\" на \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Адміністратар перайменаваў размову з \"%1$s\" на \"%2$s\"", + "{actor} set the description" : "{actor} задаў(-ла) апісанне", + "You set the description" : "Вы задалі апісанне", + "An administrator set the description" : "Адміністратар задаў апісанне", + "{actor} removed the description" : "{actor} выдаліў(-ла) апісанне", + "You removed the description" : "Вы выдалілі апісанне", + "An administrator removed the description" : "Адміністратар выдаліў апісанне", + "You started a silent call" : "Вы пачалі бязгучны выклік", + "Outgoing silent call" : "Выходны бязгучны выклік", + "{actor} started a silent call" : "{actor} пачаў(-ла) бязгучны выклік", + "Incoming silent call" : "Уваходны бязгучны выклік", + "You started a call" : "Вы пачалі выклік", + "Outgoing call" : "Выходны выклік", + "{actor} started a call" : "{actor} пачаў(-ла) выклік", + "Incoming call" : "Уваходны выклік", + "{actor} joined the call" : "{actor} далучыўся(-лася) да выкліку ", + "You joined the call" : "Вы далучыліся да выкліку", + "{actor} left the call" : "{actor} выйшаў(-ла) з выкліку", + "You left the call" : "Вы выйшлі з выкліку", + "{actor} unlocked the conversation" : "{actor} разблакіраваў(-ла) размову", + "You unlocked the conversation" : "Вы разблакіравалі размову", + "An administrator unlocked the conversation" : "Адміністратар разблакіраваў размову", + "{actor} locked the conversation" : "{actor} заблакіраваў(-ла) размову", + "You locked the conversation" : "Вы заблакіравалі размову", + "An administrator locked the conversation" : "Адміністратар заблакіраваў размову", + "{actor} opened the conversation to registered users" : "{actor} адкрыў(-ла) размову для зарэгістраваных карыстальнікаў", + "You opened the conversation to registered users" : "Вы адкрылі размову для зарэгістраваных карыстальнікаў", + "An administrator opened the conversation to registered users" : "Адміністратар адкрыў размову для зарэгістраваных карыстальнікаў", + "The conversation is now open to everyone" : "Размова адкрыта для ўсіх", + "{actor} opened the conversation to everyone" : "{actor} адкрыў(-ла) размову для ўсіх", + "You opened the conversation to everyone" : "Вы адкрылі размову для ўсіх", + "{actor} started breakout rooms" : "{actor} пачаў(-ла) групавыя пакоі", + "You started breakout rooms" : "Вы пачалі групавыя пакоі", + "{actor} stopped breakout rooms" : "{actor} спыніў(-ла) групавыя пакоі", + "You stopped breakout rooms" : "Вы спынілі групавыя пакоі", + "{actor} allowed guests" : "{actor} дазволіў(-ла) гасцей", + "You allowed guests" : "Вы дазволілі гасцей", + "An administrator allowed guests" : "Адміністратар дазволіў гасцей", + "{actor} disallowed guests" : "{actor} забараніў(-ла) гасцей", + "You disallowed guests" : "Вы забаранілі гасцей", + "An administrator disallowed guests" : "Адміністратар забараніў гасцей", + "{actor} set a password" : "{actor} задаў(-ла) пароль", + "You set a password" : "Вы задалі пароль", + "An administrator set a password" : "Адміністратар задаў пароль", + "{actor} removed the password" : "{actor} выдаліў(-ла) пароль", + "You removed the password" : "Вы выдалілі пароль", + "An administrator removed the password" : "Адміністратар выдаліў пароль", + "{actor} added {user}" : "{actor} дадаў(-ла) {user}", + "You joined the conversation" : "Вы далучыліся да размовы", + "{actor} joined the conversation" : "{actor} далучыўся(-лася) да размовы", + "You added {user}" : "Вы дадалі {user}", + "{actor} added you" : "{actor} дадаў(-ла) вас", + "An administrator added you" : "Адміністратар дадаў вас", + "An administrator added {user}" : "Адміністратар дадаў {user}", + "You left the conversation" : "Вы выйшлі з размовы", + "{actor} left the conversation" : "{actor} выйшаў(-ла) з размовы", + "{actor} removed {user}" : "{actor} выдаліў(-ла) {user}", + "You removed {user}" : "Вы выдалілі {user}", + "{actor} removed you" : "{actor} выдаліў(-ла) вас", + "An administrator removed you" : "Адміністратар выдаліў вас", + "An administrator removed {user}" : "Адміністратар выдаліў {user}", + "{actor} invited {federated_user}" : "{actor} запрасіў(-ла) {federated_user}", + "You invited {federated_user}" : "Вы запрасілі {federated_user}", + "You accepted the invitation" : "Вы прынялі запрашэнне", + "{actor} invited you" : "{actor} запрасіў(-ла) вас", + "An administrator invited you" : "Адміністратар запрасіў вас", + "An administrator invited {federated_user}" : "Адміністратар запрасіў {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} прыняў(-ла) запрашэнне", + "{actor} removed {federated_user}" : "{actor} выдаліў(-ла) {federated_user}", + "You removed {federated_user}" : "Вы выдалілі {federated_user}", + "You declined the invitation" : "Вы адхілілі запрашэнне", + "An administrator removed {federated_user}" : "Адміністратар выдаліў {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} адхіліў(-ла) запрашэнне", + "{actor} added group {group}" : "{actor} дадаў(-ла) групу {group}", + "You added group {group}" : "Вы дадалі групу {group}", + "An administrator added group {group}" : "Адміністратар дадаў групу {group}", + "{actor} removed group {group}" : "{actor} выдаліў(-ла) групу {group}", + "You removed group {group}" : "Вы выдалілі групу {group}", + "An administrator removed group {group}" : "Адміністратар выдаліў групу {group}", + "{actor} added team {circle}" : "{actor} дадаў(-ла) каманду {circle}", + "You added team {circle}" : "Вы дадалі каманду {circle}", + "An administrator added team {circle}" : "Адміністратар дадаў каманду {circle}", + "{actor} removed team {circle}" : "{actor} выдаліў(-ла) каманду {circle}", + "You removed team {circle}" : "Вы выдалілі каманду {circle}", + "An administrator removed team {circle}" : "Адміністратар выдаліў каманду {circle}", + "{actor} added {phone}" : "{actor} дадаў(-ла) {phone}", + "You added {phone}" : "Вы дадалі {phone}", + "An administrator added {phone}" : "Адміністратар дадаў {phone}", + "{actor} removed {phone}" : "{actor} выдаліў(-ла) {phone}", + "You removed {phone}" : "Вы выдалілі {phone}", + "An administrator removed {phone}" : "Адміністратар выдаліў {phone}", + "{actor} promoted {user} to moderator" : "{actor} прызначыў(-ла) {user} мадэратарам", + "You promoted {user} to moderator" : "Вы прызначылі {user} мадэратарам", + "{actor} promoted you to moderator" : "{actor} прызначыў(-ла) вас мадэратарам", + "An administrator promoted you to moderator" : "Адміністратар прызначыў вас мадэратарам", + "An administrator promoted {user} to moderator" : "Адміністратар прызначыў {user} мадэратарам", + "{actor} demoted {user} from moderator" : "{actor} пазбавіў(-ла) {user} правоў мадэратара", + "You demoted {user} from moderator" : "Вы пазбавілі {user} правоў мадэратара", + "{actor} demoted you from moderator" : "{actor} пазбавіў(-ла) вас правоў мадэратара", + "An administrator demoted you from moderator" : "Адміністратар пазбавіў вас правоў мадэратара", + "An administrator demoted {user} from moderator" : "Адміністратар пазбавіў {user} правоў мадэратара", + "{actor} shared a file which is no longer available" : "{actor} абагуліў(-ла) файл, які больш недаступны", + "You shared a file which is no longer available" : "Вы абагулілі файл, які больш недаступны", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} наладзіў(-ла) Matterbridge для сінхранізацыі гэтай размовы з іншымі чатамі", + "You set up Matterbridge to synchronize this conversation with other chats" : "Вы наладзілі Matterbridge для сінхранізацыі гэтай размовы з іншымі чатамі", + "{actor} created thread {title}" : "{actor} стварыў(-ла) гутарку {title}", + "You created thread {title}" : "Вы стварылі гутарку {title}", + "{actor} renamed thread {title}" : "{actor} перайменаваў(-ла) гутарку {title}", + "You renamed thread {title}" : "Вы перайменавалі гутарку {title}", + "{actor} updated the Matterbridge configuration" : "{actor} абнавіў(-ла) канфігурацыю Matterbridge", + "You updated the Matterbridge configuration" : "Вы абнавілі канфігурацыю Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} выдаліў(-ла) канфігурацыю Matterbridge", + "You removed the Matterbridge configuration" : "Вы выдалілі канфігурацыю Matterbridge", + "{actor} started Matterbridge" : "{actor} запусціў(-ла) Matterbridge", + "You started Matterbridge" : "Вы запусцілі Matterbridge", + "{actor} stopped Matterbridge" : "{actor} спыніў(-ла) Matterbridge", + "You stopped Matterbridge" : "Вы спынілі Matterbridge", + "{actor} deleted a message" : "{actor} выдаліў(-ла) паведамленне", + "You deleted a message" : "Вы выдалілі паведамленне", + "{actor} edited a message" : "{actor} адрэдагаваў(-ла) паведамленне", + "You edited a message" : "Вы адрэдагавалі паведамленне", + "{actor} pinned a message" : "{actor} замацаваў(-ла) паведамленне", + "You pinned a message" : "Вы замацавалі паведамленне", + "{actor} unpinned a message" : "{actor} адмацаваў(-ла) паведамленне", + "Message was automatically unpinned" : "Паведамленне было аўтаматычна адмацавана", + "You unpinned a message" : "Вы адмацавалі паведамленне", + "{actor} deleted a reaction" : "{actor} выдаліў(-ла) рэакцыю", + "You deleted a reaction" : "Вы выдалілі рэакцыю", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n тыдзень","Вы задалі тэрмін дзеяння паведамленняў на %n тыдні","Вы задалі тэрмін дзеяння паведамленняў на %n тыдняў","Вы задалі тэрмін дзеяння паведамленняў на %n тыдняў"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n дзень","Вы задалі тэрмін дзеяння паведамленняў на %n дні","Вы задалі тэрмін дзеяння паведамленняў на %n дзён","Вы задалі тэрмін дзеяння паведамленняў на %n дзён"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n гадзіну","Вы задалі тэрмін дзеяння паведамленняў на %n гадзіны","Вы задалі тэрмін дзеяння паведамленняў на %n гадзін","Вы задалі тэрмін дзеяння паведамленняў на %n гадзін"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n хвіліну","Вы задалі тэрмін дзеяння паведамленняў на %n хвіліны","Вы задалі тэрмін дзеяння паведамленняў на %n хвілін","Вы задалі тэрмін дзеяння паведамленняў на %n хвілін"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдзень","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдні","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдняў","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдняў"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзень","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дні","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзён","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзён"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзіну","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзіны","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзін","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзін"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвіліну","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвіліны","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвілін","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвілін"], + "{actor} disabled message expiration" : "{actor} адключыў(-ла) тэрмін дзеяння паведамленняў", + "You disabled message expiration" : "Вы адключылі тэрмін дзеяння паведамленняў", + "{actor} cleared the history of the conversation" : "{actor} ачысціў(-ла) гісторыю размовы", + "You cleared the history of the conversation" : "Вы ачысцілі гісторыю размовы", + "{actor} set the conversation picture" : "{actor} задаў(-ла) аватар размовы", + "You set the conversation picture" : "Вы задалі аватар размовы", + "{actor} removed the conversation picture" : "{actor} выдаліў(-ла) аватар размовы", + "You removed the conversation picture" : "Вы выдалілі аватар размовы", + "{actor} ended the poll {poll}" : "{actor} завяршыў(-ла) апытанне {poll}", + "You ended the poll {poll}" : "Вы завяршылі апытанне {poll}", + "{actor} started the video recording" : "{actor} пачаў(-ла) відэазапіс", + "You started the video recording" : "Вы пачалі відэазапіс", + "{actor} stopped the video recording" : "{actor} спыніў(-ла) відэазапіс", + "You stopped the video recording" : "Вы спынілі відэазапіс", + "{actor} started the audio recording" : "{actor} пачаў(-ла) аўдыязапіс", + "You started the audio recording" : "Вы пачалі аўдыязапіс", + "{actor} stopped the audio recording" : "{actor} спыніў(-ла) аўдыязапіс", + "You stopped the audio recording" : "Вы спынілі аўдыязапіс", + "The recording failed" : "Запіс не атрымаўся", + "Someone voted on the poll {poll}" : "Хтосьці прагаласаваў у апытанні {poll}", + "Message deleted by author" : "Паведамленне выдалена аўтарам", + "Message deleted by {actor}" : "Паведамленне выдалена карыстальнікам {actor}", + "Message deleted by you" : "Вы выдалілі паведамленне", + "Deleted user" : "Выдалены карыстальнік", + "Unknown number" : "Невядомы нумар", + "Administration" : "Адміністратар", + "System" : "Сістэма", + "%s (guest)" : "%s (госць)", + "Missed call" : "Прапушчаны выклік", + "Call ended (Duration {duration})" : "Выклік завершаны (працягласць {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завяршыў(-ла) выклік (працягласць {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Выклік з %n госцем завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Выклік з %n госцем завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} завяршыў(-ла) выклік з %n госцем (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1} ended (Duration {duration})" : "Выклік з {user1} завершаны (працягласць {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1} (працягласць {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1} і {user2} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Выклік з {user1} і {user2} завершаны (працягласць {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1} і {user2} (працягласць {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2} і {user3} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Выклік з {user1}, {user2} і {user3} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2} і {user3} (працягласць {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2}, {user3} і {user4} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Выклік з {user1}, {user2}, {user3} і {user4} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2}, {user3} і {user4} (працягласць {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2}, {user3}, {user4} і {user5} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Выклік з {user1}, {user2}, {user3}, {user4} і {user5} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2}, {user3}, {user4} і {user5} (працягласць {duration})", + "Message of {user} in {conversation}" : "Паведамленне карыстальніка {user} у {conversation}", + "Message of {user}" : "Паведамленне карыстальніка {user}", + "Message of a deleted user in {conversation}" : "Паведамленне выдаленага карыстальніка ў {conversation}", + "Talk conversations" : "Размовы ў Talk", + "An error occurred. Please contact your administrator." : "Узнікла памылка. Звярніцеся да адміністратара.", + "App disabled" : "Праграма адключана", + "Storage quota exceeded" : "Квота сховішча перавышана", + "File not found" : "Файл не знойдзены", + "File is not shared, or shared but not with the user" : "Файл не абагулены, або абагулены, але не з карыстальнікам", + "No account available to delete." : "Няма ўліковых запісаў для выдалення.", + "Poll" : "Апытанне", + "Password needs to be set" : "Неабходна задаць пароль", + "Uploading the file failed" : "Не ўдалося запампаваць файл", + "File is too big" : "Файл занадта вялікі", + "Invalid file provided" : "Прапанаваны файл некарэктны", + "Invalid image" : "Памылковы відарыс", + "Unknown filetype" : "Невядомы тып файла", + "Talk mentions" : "Згадкі ў Talk", + "More conversations" : "Больш размоў", + "Say hi to your friends and colleagues!" : "Прывітайцеся з сябрамі і калегамі!", + "No unread mentions" : "Няма непрачытаных згадак", + "Call in progress" : "Выконваецца выклік", + "You were mentioned" : "Вас згадалі", + "Write to conversation" : "Напісаць у размову", + "Writes event information into a conversation of your choice" : "Адпраўляе інфармацыю пра падзею ў выбраную вамі размову", + "%1$s invited you to conversation \"%2$s\"." : "%1$s запрасіў(-ла) вас у размову \"%2$s\".", + "You were invited to conversation \"%s\"." : "Вас запрасілі ў размову \"%s\".", + "Conversation invitation" : "Запрашэнне ў размову", + "Scheduled time" : "Запланаваны час", + "Description" : "Апісанне", + "Meeting ID" : "Ідэнтыфікатар сустрэчы", + "Your PIN" : "Ваш PIN-код", + "Click the button below to join the lobby now." : "Націсніце на кнопку, каб далучыцца да лобі зараз.", + "Click the link below to join the lobby now." : "Націсніце на спасылку, каб далучыцца да лобі зараз.", + "Join lobby for \"%s\"" : "Далучыцца да лобі \"%s\"", + "Click the button below to join the conversation now." : "Націсніце на кнопку, каб далучыцца да размовы зараз.", + "Click the link below to join the conversation now." : "Націсніце на спасылку, каб далучыцца да размовы зараз.", + "Join \"%s\"" : "Далучыцца да \"%s\"", + "Meeting" : "Сустрэча", + "Password request: %s" : "Запыт пароля: %s", + "Private conversation" : "Прыватная размова", + "Deleted user (%s)" : "Выдалены карыстальнік (%s)", + "Failed to upload call recording" : "Не ўдалося запампаваць запіс выкліку", + "Share to chat" : "Абагуіць у чаце", + "Dismiss notification" : "Адхіліць апавяшчэнне", + "Call recording now available" : "Цяпер даступны запіс выклікаў", + "The recording for the call in {call} was uploaded to {file}." : "Запіс выкліку ў {call} запампаваны ў {file}.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} запрасіў(-ла) вас далучыцца да {roomName} на {remoteServer}", + "Accept" : "Прыняць", + "Decline" : "Адхіліць", + "Someone reacted" : "Хтосьці адрэагаваў", + "New message" : "Новае паведамленне", + "Reminder" : "Напамін", + "Someone mentioned you" : "Хтосьці згадаў вас", + "Notification" : "Апавяшчэнне", + "Someone reacted in a private conversation" : "Хтосьці адрэагаваў у прыватнай размове", + "You received a message in a private conversation" : "Вы атрымалі паведамленне ў прыватнай размове", + "Reminder in a private conversation" : "Напамін у прыватнай размове", + "Someone mentioned you in a private conversation" : "Хтосьці згадаў вас у прыватнай размове", + "Notification in a private conversation" : "Апавяшчэнне ў прыватнай размове", + "Reminder: You in {call}" : "Напамін: вы ў {call}", + "Reminder: {user} in {call}" : "Напамін: {user} у {call}", + "Reminder: Deleted user in {call}" : "Напамін: выдалены карыстальнік у {call}", + "Reminder: {guest} (guest) in {call}" : "Напамін: {guest} (госць) у {call}", + "Reminder: Guest in {call}" : "Напамін: госць у {call}", + "{user} reacted with {reaction}" : "{user} адрэагаваў(-ла) з {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} адрэагаваў(-ла) з {reaction} у {call}", + "Deleted user reacted with {reaction} in {call}" : "Выдалены карыстальнік адрэагаваў з {reaction} у {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (госць) адрэагаваў(-ла) з {reaction} у {call}", + "Guest reacted with {reaction} in {call}" : "Госць адрэагаваў з {reaction} у {call}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Выдалены карыстальнік у {call}", + "{guest} (guest) in {call}" : "{guest} (госць) у {call}", + "Guest in {call}" : "Госць у {call}", + "{user} sent you a private message" : "{user} адправіў(-ла) вам прыватнае паведамленне", + "{user} sent a message in conversation {call}" : "{user} адправіў(-ла) паведамленне ў размове {call}", + "A deleted user sent a message in conversation {call}" : "Выдалены карыстальнік адправіў паведамленне ў размове {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (госць) адправіў(-ла) паведамленне ў размове {call}", + "A guest sent a message in conversation {call}" : "Гось адправіў паведамленне ў размове {call}", + "{user} replied to your private message" : "{user} адказаў(-ла) на ваша прыватнае паведамленне", + "{user} replied to your message in conversation {call}" : "{user} адказаў(-ла) на ваша паведамленне ў размове {call}", + "A deleted user replied to your message in conversation {call}" : "Выдалены карыстальнік адказаў на ваша паведамленне ў размове {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (госць) адказаў(-ла) на ваша паведамленне ў размове {call}", + "A guest replied to your message in conversation {call}" : "Госць адказаў на ваша паведамленне ў размове {call}", + "Reminder: You in private conversation {call}" : "Напамін: вы ў прыватнай размове {call}", + "Reminder: A deleted user in private conversation {call}" : "Напамін: выдалены карыстальнік у прыватнай размове {call}", + "Reminder: {user} in private conversation" : "Напамін: {user} у прыватнай размове", + "Reminder: You in conversation {call}" : "Напамін: вы ў размове {call}", + "Reminder: {user} in conversation {call}" : "Напамін: {user} у размове {call}", + "Reminder: A deleted user in conversation {call}" : "Напамін: выдалены карыстальнік у размове {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Напамін: {guest} (госць) у размове {call}", + "Reminder: A guest in conversation {call}" : "Напамін: госць у размове {call}", + "{user} reacted with {reaction} to your private message" : "{user} адрэагаваў(-ла) з {reaction} на ваша прыватане паведамленне", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} адрэагаваў(-ла) з {reaction} на ваша паведамленне ў размове {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Выдалены карыстальнік адрэагаваў з {reaction} на ваша паведамленне ў размове {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (госць) адрэагаваў(-ла) з {reaction} на ваша паведамленне ў размове {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Госць адрэагаваў з {reaction} на ваша паведамленне ў размове {call}", + "{user} mentioned you in a private conversation" : "{user} згадаў(-ла) вас у прыватнай размове", + "{user} mentioned group {group} in conversation {call}" : "{user} згадаў(-ла) групу {group} у размове {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} згадаў(-ла) каманду {team} у размове {call}", + "{user} mentioned everyone in conversation {call}" : "{user} згадаў(-ла) усіх у размове {call}", + "{user} mentioned you in conversation {call}" : "{user} згадаў(-ла) вас у размове {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Выдалены карыстальнік згадаў групу {group} у размове {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Выдалены карыстальнік згадаў каманду {team} у размове {call}", + "A deleted user mentioned everyone in conversation {call}" : "Выдалены карыстальнік згадаў усіх у размове {call}", + "A deleted user mentioned you in conversation {call}" : "Выдалены карыстальнік згадаў вас у размове {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (госць) згадаў(-ла) групу {group} у размове {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (госць) згадаў(-ла) каманду {team} у размове {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (госць) згадаў(-ла) усіх у размове {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (госць) згадаў(-ла) вас у размове {call}", + "A guest mentioned group {group} in conversation {call}" : "Госць згадаў групу {group} у размове {call}", + "A guest mentioned team {team} in conversation {call}" : "Госць згадаў каманду {team} у размове {call}", + "A guest mentioned everyone in conversation {call}" : "Госць згадаў усіх у размове {call}", + "A guest mentioned you in conversation {call}" : "Госць згадаў вас у размове {call}", + "View message" : "Праглядзець паведамленне", + "Dismiss reminder" : "Адхіліць напамін", + "View chat" : "Праглядзець чат", + "{user} invited you to a group conversation: {call}" : "{user} запрасіў(-ла) вас у групавую размову: {call}", + "Join call" : "Далучыцца да выкліку", + "Answer call" : "Адказаць на выклік", + "{user} would like to talk with you" : "{user} хоча пагаварыць з вамі", + "You missed a call from {user}" : "Вы прапусцілі выклік ад {user}", + "Accept call" : "Прыняць выклік", + "Incoming phone call from {call}" : "Уваходны тэлефонны выклік ад {call}", + "You missed a phone call from {call}" : "Вы прапусцілі тэлефонны выклік ад {call}", + "A group call has started in {call}" : "Групавы выклік пачаўся ў {call}", + "You missed a group call in {call}" : "Вы прапусцілі групавы выклік у {call}", + "{email} is requesting the password to access {file}" : "{email} запытвае пароль для доступу да {file}", + "{email} tried to request the password to access {file}" : "{email} паспрабаваў(-ла) запытаць пароль для доступу да {file}", + "Someone is requesting the password to access {file}" : "Хтосьці запытвае пароль для доступу да {file}", + "Someone tried to request the password to access {file}" : "Хтосьці паспрабаваў запытаць пароль для доступу да {file}", + "Open settings" : "Адкрыць налады", + "pending" : "у чаканні", + "active" : "актыўны", + "expired" : "скончыўся тэрмін дзеяння", + "blocked" : "заблакіраваны", + "error" : "памылка", + "The certificate of {host} expires in {days} days" : "Тэрмін дзеяння сертыфіката {host} заканчваецца праз {days} дзён", + "The certificate of {host} expired" : "Тэрмін дзеяння сертыфіката {host} скончыўся", + "Open Talk" : "Адкрыць Talk", + "Default" : "Прадвызначаныя", + "Webinar" : "Вэбінар", + "Conversations" : "Размовы", + "Messages in current conversation" : "Паведамленні ў бягучай размове", + "{user}" : "{user}", + "Messages" : "Паведамленні", + "{user} in {conversation}" : "{user} у {conversation}", + "Messages in other conversations" : "Паведамленні ў іншых размовах", + "Invalid emoji character" : "Памылковы сімвал эмодзі", + "Invalid background color" : "Памылковы колер фону", + "Avatar image is not square" : "Відарыс аватара не квадратны", + "Room {number}" : "Пакой {number}", + "Other" : "Іншае", + "Something unexpected happened." : "Здарылася нешта нечаканае.", + "An HTTPS URL is required." : "Патрабуецца URL-адрас HTTPS.", + "The language is invalid." : "Мова памылковая.", + "Too many requests are send from your servers address. Please try again later." : "З вашага адраса сервера адпраўлена занадта шмат запытаў. Паспрабуйце яшчэ раз пазней.", + "Something unexpected happened. Please try again later." : "Здарылася нешта нечаканае. Паўтарыце спробу пазней.", + "There is no such account registered." : "Такі ўліковы запіс не зарэгістраваны.", + "Note to self" : "Асабістыя нататкі", + "A place for your private notes, thoughts and ideas" : "Месца для вашых прыватных нататак, думак і ідэй", + "Let's get started!" : "Пачнем!", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Вітаем у Nextcloud Talk\n\nNextcloud Talk — гэта прыватны і магутны месенджар, які інтэгруецца з Nextcloud. Удзельнічайце ў прыватных або групавых размовах, супрацоўнічайце праз галасавыя і відэазванкі, арганізуйце вэбінары і мерапрыемствы, наладжвайце свае размовы і многае іншае.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Вы можаце адказваць на паведамленні, перасылаць іх у іншыя чаты і людзям або капіяваць змесціва паведамленняў.", + "Andorra" : "Андора", + "United Arab Emirates" : "Аб'яднаныя Арабскія Эміраты", + "Afghanistan" : "Афганістан", + "Antigua and Barbuda" : "Антыгуа і Барбуда", + "Anguilla" : "Ангілья", + "Albania" : "Албанія", + "Armenia" : "Арменія", + "Angola" : "Ангола", + "Antarctica" : "Антарктыка", + "Argentina" : "Аргенціна", + "American Samoa" : "Амерыканскае Самоа", + "Austria" : "Аўстрыя", + "Australia" : "Аўстралія", + "Aruba" : "Аруба", + "Åland Islands" : "Аландскія астравы", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Боснія і Герцагавіна", + "Barbados" : "Барбадас", + "Bangladesh" : "Бангладэш", + "Belgium" : "Бельгія", + "Burkina Faso" : "Буркіна-Фасо", + "Bulgaria" : "Балгарыя", + "Bahrain" : "Бахрэйн", + "Burundi" : "Бурундзі", + "Benin" : "Бенін", + "Saint Barthélemy" : "Сен-Бартэльмі", + "Bermuda" : "Бермудскія астравы", + "Brunei Darussalam" : "Бруней-Дарусалам", + "Bolivia, Plurinational State of" : "Балівія, Шматнацыянальная Дзяржава", + "Bonaire, Sint Eustatius and Saba" : "Банайрэ, Сінт-Эстаціус і Саба", + "Brazil" : "Бразілія", + "Bahamas" : "Багамскія астравы", + "Bhutan" : "Бутан", + "Bouvet Island" : "Востраў Бувэ", + "Botswana" : "Батсвана", + "Belarus" : "Беларусь", + "Belize" : "Беліз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Какосавыя (Кілінг) астравы", + "Congo, the Democratic Republic of the" : "Дэмакратычная Рэспубліка Конга", + "Central African Republic" : "Цэнтральна-Афрыканская Рэспубліка", + "Congo" : "Конга", + "Switzerland" : "Швейцарыя", + "Côte d'Ivoire" : "Кот-д'Івуар", + "Cook Islands" : "Астравы Кука", + "Chile" : "Чылі", + "Cameroon" : "Камерун", + "China" : "Кітай", + "Colombia" : "Калумбія", + "Costa Rica" : "Коста-Рыка", + "Cuba" : "Куба", + "Cabo Verde" : "Каба-Вердэ", + "Curaçao" : "Кюрасаа", + "Christmas Island" : "Востраў Каляд", + "Cyprus" : "Кіпр", + "Czechia" : "Чэхія", + "Germany" : "Германія", + "Djibouti" : "Джыбуці", + "Denmark" : "Данія", + "Dominica" : "Дамініка", + "Dominican Republic" : "Дамініканская Рэспубліка", + "Algeria" : "Алжыр", + "Ecuador" : "Эквадор", + "Estonia" : "Эстонія", + "Egypt" : "Егіпет", + "Western Sahara" : "Заходняя Сахара", + "Eritrea" : "Эрытрэя", + "Spain" : "Іспанія", + "Ethiopia" : "Эфіопія", + "Finland" : "Фінляндыя", + "Fiji" : "Фіджы", + "Falkland Islands (Malvinas)" : "Фалклендскія (Мальвінскія) астравы", + "Micronesia, Federated States of" : "Мікранезія, Федэратыўныя Штаты", + "Faroe Islands" : "Фарэрскія астравы", + "France" : "Францыя", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Злучанае Каралеўства Вялікабрытаніі і Паўночнай Ірландыі", + "Grenada" : "Грэнада", + "Georgia" : "Грузія", + "French Guiana" : "Французская Гвіяна", + "Guernsey" : "Гернсі", + "Ghana" : "Гана", + "Gibraltar" : "Гібралтар", + "Greenland" : "Грэнландыя", + "Gambia" : "Гамбія", + "Guinea" : "Гвінея", + "Guadeloupe" : "Гвадэлупа", + "Equatorial Guinea" : "Экватарыяльная Гвінея", + "Greece" : "Грэцыя", + "South Georgia and the South Sandwich Islands" : "Паўднёвая Георгія і Паўднёвыя Сандвічавы астравы", + "Guatemala" : "Гватэмала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвінея-Бісау", + "Guyana" : "Гаяна", + "Hong Kong" : "Ганконг", + "Heard Island and McDonald Islands" : "Астравы Херд і Макдональд", + "Honduras" : "Гандурас", + "Croatia" : "Харватыя", + "Haiti" : "Гаіці", + "Hungary" : "Венгрыя", + "Indonesia" : "Інданезія", + "Ireland" : "Ірландыя", + "Israel" : "Ізраіль", + "Isle of Man" : "Востраў Мэн", + "India" : "Індыя", + "British Indian Ocean Territory" : "Брытанская тэрыторыя ў Індыйскім акіяне", + "Iraq" : "Ірак", + "Iran, Islamic Republic of" : "Іран, Ісламская Рэспубліка", + "Iceland" : "Ісландыя", + "Italy" : "Італія", + "Jersey" : "Джэрсі", + "Jamaica" : "Ямайка", + "Jordan" : "Іарданія", + "Japan" : "Японія", + "Kenya" : "Кенія", + "Kyrgyzstan" : "Кыргызстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кірыбаці", + "Comoros" : "Каморскія астравы", + "Saint Kitts and Nevis" : "Сент-Кітс і Невіс", + "Korea, Democratic People's Republic of" : "Карэйская Народна-Дэмакратычная Рэспубліка", + "Korea, Republic of" : "Карэйская Рэспубліка", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманавы астравы", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоская Народна-Дэмакратычная Рэспубліка", + "Lebanon" : "Ліван", + "Saint Lucia" : "Сент-Люсія", + "Liechtenstein" : "Ліхтэнштэйн", + "Sri Lanka" : "Шры-Ланка", + "Liberia" : "Ліберыя", + "Lesotho" : "Лесота", + "Lithuania" : "Літва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвія", + "Libya" : "Лівія", + "Morocco" : "Марока", + "Monaco" : "Манака", + "Moldova, Republic of" : "Малдова, Рэспубліка", + "Montenegro" : "Чарнагорыя", + "Saint Martin (French part)" : "Сен-Мартэн (французская частка)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалавы астравы", + "North Macedonia" : "Паўночная Македонія", + "Mali" : "Малі", + "Myanmar" : "М’янма", + "Mongolia" : "Манголія", + "Macao" : "Макаа", + "Northern Mariana Islands" : "Паўночныя Марыянскія астравы", + "Martinique" : "Марцініка", + "Mauritania" : "Маўрытанія", + "Montserrat" : "Мантсерат", + "Malta" : "Мальта", + "Mauritius" : "Маўрыкій", + "Maldives" : "Мальдывы", + "Malawi" : "Малаві", + "Mexico" : "Мексіка", + "Malaysia" : "Малайзія", + "Mozambique" : "Мазамбік", + "Namibia" : "Намібія", + "New Caledonia" : "Новая Каледонія", + "Niger" : "Нігер", + "Norfolk Island" : "Востраў Норфалк", + "Nigeria" : "Нігерыя", + "Nicaragua" : "Нікарагуа", + "Netherlands" : "Нідэрланды", + "Norway" : "Нарвегія", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ніуэ", + "New Zealand" : "Новая Зеландыя", + "Oman" : "Аман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французская Палінезія", + "Papua New Guinea" : "Папуа-Новая Гвінея", + "Philippines" : "Філіпіны", + "Pakistan" : "Пакістан", + "Poland" : "Польшча", + "Saint Pierre and Miquelon" : "Сен-П’ер і Мікелон", + "Pitcairn" : "Астравы Піткэрн", + "Puerto Rico" : "Пуэрта-Рыка", + "Palestine, State of" : "Палесціна, Дзяржава", + "Portugal" : "Партугалія", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Рэюньён", + "Romania" : "Румынія", + "Serbia" : "Сербія", + "Russian Federation" : "Расійская Федэрацыя", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудаўская Аравія", + "Solomon Islands" : "Саламонавы астравы", + "Seychelles" : "Сейшэльскія астравы", + "Sudan" : "Судан", + "Sweden" : "Швецыя", + "Singapore" : "Сінгапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Астравы святой Алены, Узнясення і Трыстан-да-Кунья", + "Slovenia" : "Славенія", + "Svalbard and Jan Mayen" : "Шпіцберген і Ян-Маен", + "Slovakia" : "Славакія", + "Sierra Leone" : "Сьера-Леонэ", + "San Marino" : "Сан-Марына", + "Senegal" : "Сенегал", + "Somalia" : "Самалі", + "Suriname" : "Сурынам", + "South Sudan" : "Паўднёвы Судан", + "Sao Tome and Principe" : "Сан-Тамэ і Прынсіпі", + "El Salvador" : "Сальвадор", + "Sint Maarten (Dutch part)" : "Сінт-Мартэн (нідэрландская частка)", + "Syrian Arab Republic" : "Сірыйская Арабская Рэспубліка", + "Eswatini" : "Эсваціні", + "Turks and Caicos Islands" : "Астравы Цёркс і Кайкас", + "Chad" : "Чад", + "French Southern Territories" : "Французскія Паўднёвыя Тэрыторыі", + "Togo" : "Тога", + "Thailand" : "Тайланд", + "Tajikistan" : "Таджыкістан", + "Tokelau" : "Такелау", + "Timor-Leste" : "Тымор-Лешці", + "Turkmenistan" : "Туркменістан", + "Tunisia" : "Туніс", + "Tonga" : "Тонга", + "Turkey" : "Турцыя", + "Trinidad and Tobago" : "Трынідад і Табага", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань, правінцыя Кітая", + "Tanzania, United Republic of" : "Танзанія, Аб'яднаная Рэспубліка", + "Ukraine" : "Украіна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малыя Аддаленыя астравы ЗША", + "United States of America" : "Злучаныя Штаты Амерыкі", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекістан", + "Holy See" : "Святы Пасад", + "Saint Vincent and the Grenadines" : "Сент-Вінсент і Грэнадзіны", + "Venezuela, Bolivarian Republic of" : "Венесуэла, Баліварыянская Рэспубліка", + "Virgin Islands, British" : "Віргінскія астравы, Брытанскія", + "Virgin Islands, U.S." : "Віргінскія астравы, ЗША", + "Viet Nam" : "В'етнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоліс і Футуна", + "Samoa" : "Самоа", + "Yemen" : "Емен", + "Mayotte" : "Маёта", + "South Africa" : "Паўднёва-Афрыканская Рэспубліка", + "Zambia" : "Замбія", + "Zimbabwe" : "Зімбабвэ", + "Background blur" : "Размытасць фону", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш вэб-сервер няправільна наладжаны для дастаўкі файлаў `.wasm`. Звычайна гэта праблема канфігурацыі Nginx. Для размытасці фону неабходна ўнесці карэктывы ў канфігурацыю Nginx таксама для дастаўкі файлаў `.wasm`. Параўнайце канфігурацыю Nginx з рэкамендаванай у нашай дакументацыі.", + "Talk configuration values" : "Значэнні канфігурацыі Talk", + "Federation" : "Федэрацыя", + "Error: Cannot connect to server" : "Памылка: немагчыма злучыцца з серверам", + "Error: Server did not respond with proper JSON" : "Памылка: сервер не адказаў правільным JSON", + "Error: Certificate expired" : "Памылка: тэрмін дзеяння сертыфіката скончыўся", + "Could not get version" : "Не ўдалося атрымаць версію", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Памылка: запушчана версія: {version}; неабходна абнавіць сервер для сумяшчальнасці з гэтай версіяй Talk.", + "Error: Server responded with: {error}" : "Памылка: адказ сервера: {error}", + "Error: Unknown error occurred" : "Памылка: Узнікла невядомая памылка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Увага: запушчана версія: {version}; Сервер не падтрымлівае ўсе функцыі гэтай версіі Talk, адсутнічаюць функцыі: {features}", + "SIP configuration" : "Канфігурацыя SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Памылковая дата, дата павінна быць у фармаце ГГГГ-ММ-ДД", + "Conversation not found" : "Размова не знойдзена", + "Path is already shared with this conversation" : "Шлях ужо абагулены ў гэтай размове", + "Chat, video & audio-conferencing using WebRTC" : "Чат, відэа- і аўдыяканферэнцыі з выкарыстаннем WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чат, відэа- і аўдыяканферэнцыі з выкарыстаннем WebRTC\n\n* 💬 **Чат** Nextcloud Talk - гэта просты тэкставы чат, які дазваляе вам абагульваць або запампоўваць файлы з праграмы Файлы Nextcloud або лакальнай прылады і згадваць іншых удзельнікаў..\n* 👥 **Прыватныя, групавыя, публічныя і абароненыя паролем выклікі!** Запрашайце каго-небудзь, усю групу або адпраўляйце публічную спасылку, каб запрасіць на выклік.\n* 🌐 **Федэратыўныя чаты** Чат з іншымі карыстальнікамі Nextcloud на іх серверах\n* 💻 **Абагульванне экрана!** Паказвайце свой экран удзельнікам выкліку.\n* 🚀 **Інтэграцыя з іншымі праграмамі Nextcloud**, такімі як Файлы, Каляндар, Статус карыстальніка, Панэль кіравання, Flow, Карты, Smart picker, Кантакты, Карткі, і многімі іншымі.\n* 🌉 **Сінхранізацыя з іншымі месенджарамі** Дзякуючы інтэграцыі [Matterbridge](https://github.com/42wim/matterbridge/) у Talk, вы можаце лёгка сінхранізаваць мноства іншых месенджараў з Nextcloud Talk і наадварот.", + "Leave call" : "Выйсці з выкліку", + "Stay in call" : "Застацца ў выкліку", + "Error occurred when getting the conversation information" : "Памылка пры атрыманні інфармацыі пра размову", + "Discuss this file" : "Абмеркаваць гэты файл", + "Share this file with others to discuss it" : "Абагульце гэты файл з іншымі, каб абмеркаваць яго", + "Share this file" : "Абагуліць гэты файл", + "Join conversation" : "Далучыцца да размовы", + "The password is wrong. Try again." : "Пароль няправільны. Паспрабуйце яшчэ раз.", + "Password" : "Пароль", + "Submit" : "Адправіць", + "Error requesting the password." : "Памылка пры запыце пароля.", + "Request password" : "Запытаць пароль", + "This conversation has ended" : "Гэтая размова завершана.", + "Error occurred when joining the conversation" : "Памылка пры далучэнні да размовы", + "Close Talk sidebar" : "Закрыць бакавую панэль Talk", + "Open Talk sidebar" : "Адкрыць бакавую панэль Talk", + "Everyone" : "Усе", + "Users and moderators" : "Карыстальнікі і мадэратары", + "Moderators only" : "Толькі мадэратары", + "Disable calls" : "Адключыць выклікі", + "Save changes" : "Захаваць змены", + "Saving …" : "Захаванне …", + "Saved!" : "Захавана!", + "Guests can still join public conversations." : "Госці ўсё яшчэ могуць далучацца да публічных размоў.", + "Limit using Talk" : "Абмежаваць выкарыстанне Talk", + "Limit creating a public and group conversation" : "Абмежаваць стварэнне публічных і групавых размоў", + "Limit creating conversations" : "Абмежаваць стварэнне размоў", + "Limit starting a call" : "Абмежаваць пачатак выкліку", + "Limit starting calls" : "Абмежаваць пачатак выклікаў", + "When a call has started, everyone with access to the conversation can join the call." : "Калі пачаўся выклік, да яго могуць далучыцца ўсе, хто мае доступ да размовы.", + "Enabled" : "Уключаны", + "Disabled" : "Адключаны", + "Bots settings" : "Налады ботаў", + "State" : "Статус", + "Name" : "Назва", + "Last error" : "Апошняя памылка", + "Total errors count" : "Усяго памылак", + "Find more bots" : "Знайсці больш ботаў", + "Beta" : "Бэта", + "Permissions" : "Дазволы", + "Select groups …" : "Выберыце групы …", + "All messages" : "Усе паведамленні", + "@-mentions only" : "Толькі згадкі з @", + "Off" : "Выкл.", + "General settings" : "Агульныя налады", + "Default notification settings" : "Прадвызначаныя налады апавяшчэнняў", + "Integration into other apps" : "Інтэграцыя ў іншыя праграмы", + "End-to-end encrypted calls" : "Скразное шыфраванне выклікаў", + "Enable encryption" : "Уключыць шыфраванне", + "Pending" : "У чаканні", + "Error" : "Памылка", + "Blocked" : "Заблакіраваны", + "Active" : "Актыўны", + "Expired" : "Скончыўся тэрмін дзеяння", + "Never" : "Ніколі", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Калі ваш высокапрадукцыйны бэкэнд уключае функцыянальнасць STUN і/або TURN, налады будуць абноўлены адпаведна.", + "Language" : "Мова", + "Country" : "Краіна", + "Status" : "Статус", + "Created at" : "Створана", + "STUN included" : "STUN уключаны", + "Yes" : "Так", + "No" : "Не", + "_%n user_::_%n users_" : ["%n карыстальнік","%n карыстальнікі","%n карыстальнікаў","%n карыстальнікаў"], + "Installed version: {version}" : "Усталяваная версія: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Вы можаце ўсталяваць Matterbridge, каб звязаць NextCloud Talk з некаторымі іншымі сэрвісамі. Наведайце іх {linkstart1}старонку на GitHub{linkend} для больш падрабязнай інфармацыі. Загрузка і ўсталяванне праграмы можа заняць некаторы час. У выпадку перавышэння часу чакання усталюйце яго ўручную з {linkstart2}NextCloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Бінарны файл Matterbridge мае няправільныя правы доступу. Пераканайцеся, што бінарны файл Matterbridge належыць патрэбнаму карыстальніку і можа быць выкананы. Яго можна знайсці ў \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Бінарны файл Matterbridge не знойдзены або не можа быць выкананы.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Вы таксама можаце ўручную задаць шлях да бінарнага файла Matterbridge праз канфігурацыю. Больш падрабязную інфармацыю глядзіце ў {linkstart}дакументацыі па інтэграцыі Matterbridge{linkend}.", + "Downloading …" : "Спампоўванне …", + "Install Talk Matterbridge" : "Усталяваць Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Падчас усталявання праграмы Matterbridge адбылася памылка", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Падчас усталявання Talk Matterbridge адбылася памылка. Усталюйце яго ўручную.", + "Failed to execute Matterbridge binary." : "Не атрымалася выканаць двайковы файл Matterbridge.", + "Matterbridge integration" : "Інтэграцыя з Matterbridge", + "Enable Matterbridge integration" : "Уключыць інтэграцыю з Matterbridge", + "Status: Checking connection" : "Стан: праверка злучэння", + "OK: Running version: {version}" : "ОК: запушчаная версія: {version}", + "Validate SSL certificate" : "Праверыць SSL-сертыфікат", + "Delete this server" : "Выдаліць гэты сервер", + "Recording consent" : "Згода на запіс", + "Available features" : "Даступныя функцыі", + "Error code" : "Код памылкі", + "Error message" : "Паведамленне пра памылку", + "High-performance backend URL" : "URL-адрас высокапрадукцыйнага бэкенда", + "Nextcloud Talk setup not complete" : "Наладка Nextcloud Talk не завершана", + "Nextcloud portal" : "Партал Nextcloud", + "Quick installation guide" : "Кароткае кіраўніцтва па ўсталяванні", + "STUN server URL" : "URL-адрас STUN-сервера", + "STUN settings saved" : "Налады STUN захаваны", + "STUN servers" : "STUN-серверы", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-сервер выкарыстоўваецца для вызначэння публічнага IP-адраса ўдзельнікаў, якія знаходзяцца за маршрутызатарам.", + "Add a new STUN server" : "Дадаць новы STUN-сервер", + "{option1} and {option2}" : "{option1} і {option2}", + "{option} only" : "Толькі {option}", + "Failed" : "Не ўдалося", + "OK" : "OK", + "Checking …" : "Праверка …", + "Federated user" : "Федэратыўны карыстальнік", + "Configure breakout rooms" : "Наладзіць групавыя пакоі", + "Number of breakout rooms" : "Колькасць групавых пакояў", + "You can create from 1 to 20 breakout rooms." : "Вы можаце стварыць ад 1 да 20 групавых пакояў.", + "Confirm" : "Пацвердзіць", + "Create breakout rooms" : "Стварыць групавыя пакоі", + "Reset" : "Скінуць", + "Delete breakout rooms" : "Выдаліць групавыя пакоі", + "Room {roomNumber}" : "Пакой {roomNumber}", + "Current breakout rooms and settings will be lost" : "Бягучыя групавыя пакоі і налады будуць страчаны", + "Cancel" : "Скасаваць", + "Back" : "Назад", + "Add participant \"{user}\"" : "Дадаць удзельніка \"{user}\"", + "Now" : "Зараз", + "Unknown error occurred" : "Узнікла невядомая памылка", + "{participant0} will receive an invitation" : "{participant0} атрымае запрашэнне", + "{participant0} and {participant1} will receive invitations" : "{participant0} і {participant1} атрымаюць запрашэнні", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні"], + "Invite {user}" : "Запрасіць {user}", + "Meeting created" : "Сустрэча створана", + "Upcoming meetings" : "Будучыя сустрэчы", + "Loading …" : "Загрузка …", + "No upcoming meetings" : "Няма будучых сустрэч", + "Schedule a meeting" : "Запланаваць сустрэчу", + "Meeting title" : "Загаловак сустрэчы", + "From" : "З", + "To" : "Да", + "Calendar" : "Каляндар", + "Attendees" : "Удзельнікі", + "No other participants to send invitations to." : "Больш няма удзельнікаў, якім можна было б адправіць запрашэнні.", + "Add attendees" : "Дадаць удзельнікаў", + "Save" : "Захаваць", + "Search participants" : "Пошук удзельнікаў", + "No results" : "Няма вынікаў", + "Done" : "Гатова", + "Original language: {languageName}" : "Арыгінальная мова: {languageName}", + "Translated language" : "Мова перакладу", + "Translated language: {languageName}" : "Мова перакладу: {languageName}", + "Raise hand" : "Падняць руку", + "Raise hand (R)" : "Падняць руку (R)", + "Lower hand" : "Апусціць руку", + "Lower hand (R)" : "Апусціць руку (R)", + "Exit full screen (F)" : "Выйсці з поўнаэкраннага рэжыму (F)", + "Full screen (F)" : "На ўвесь экран (F)", + "Recording consent is required" : "Патрабуецца згода на запіс", + "This conversation is read-only" : "Размова у рэжыме \"толькі для чытання\"", + "Conversation not found or not joined" : "Размова не знойдзена або вы да яе не далучыліся", + "Lobby is still active and you're not a moderator" : "Лобі ўсё яшчэ актыўнае, і вы не мадэратар", + "Connection failed" : "Не ўдалося злучыцца", + "Reload" : "Перазагрузіць", + "{nickName} raised their hand." : "{nickName} падняў(-ла) руку", + "A participant raised their hand." : "Удзельнікаў падняў руку.", + "Collapse stripe" : "Згарнуць паласу", + "Expand stripe" : "Разгарнуць паласу", + "Previous page of videos" : "Папярэдняя старонка відэа", + "Next page of videos" : "Наступная старонка відэа", + "Connecting …" : "Злучэнне …", + "Calling …" : "Выклік …", + "You can invite others in the participant tab of the sidebar" : "Вы можаце запрасіць іншых на ўкладцы ўдзельнікаў на бакавой панэлі", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Вы можаце запрасіць іншых на ўкладцы ўдзельнікаў на бакавой панэлі або абагуліўшы гэту спасылку!", + "Share this link to invite others!" : "Абагульце гэту спасылку, каб запрасіць іншых!", + "Copy link" : "Скапіяваць спасылку", + "You are not allowed to enable audio" : "Вам не дазволена ўключаць гук", + "No audio. Click to select device" : "Няма гуку. Націсніце, каб выбраць прыладу", + "Mute audio" : "Адключыць гук", + "Mute audio (M)" : "Адключыць гук (M)", + "Unmute audio" : "Уключыць гук", + "Unmute audio (M)" : "Уключыць гук (M)", + "None" : "Няма", + "Select a microphone" : "Выберыце мікрафон", + "Select a speaker" : "Выберыце дынамік", + "Microphone settings" : "Налады мікрафона", + "Check devices" : "Праверыць прылады", + "Access to camera was denied" : "Доступ да камеры забаронены", + "Error while accessing camera: It is likely in use by another program" : "Памылка доступу да камеры: верагодна, яна выкарыстоўваецца іншай праграмай", + "Error while accessing camera" : "Памылка доступу да камеры", + "You have been muted by a moderator" : "Мадэратар адключыў вам мікрафон", + "Hide presenter video" : "Схаваць відэа дакладчыка", + "You are not allowed to enable video" : "Вам не дазволена ўключаць відэа", + "No video. Click to select device" : "Няма відэа. Націсніце, каб выбраць прыладу", + "Disable video" : "Адключыць відэа", + "Disable video (V)" : "Адключыць відэа (V)", + "Enable video" : "Уключыць відэа", + "Enable video (V)" : "Уключыць відэа (V)", + "Select a video device" : "Выберыце відэапрыладу", + "Show presenter" : "Паказаць дакладчыка", + "You" : "Вы", + "Mute" : "Адключыць гук", + "Muted" : "Адключаны гук", + "Show screen" : "Паказаць экран", + "Connection could not be established …" : "Не ўдалося ўсталяваць злучэнне...", + "Connection was lost and could not be re-established …" : "Злучэнне было страчана і не можа быць адноўлена…", + "Connection could not be established. Trying again …" : "Не ўдалося ўсталяваць злучэнне. Паўторная спроба…", + "Connection lost. Trying to reconnect …" : "Злучэнне страчана. Спроба аднавіць злучэнне…", + "Connection problems …" : "Праблемы са злучэннем…", + "Collapse" : "Згарнуць", + "Expand" : "Разгарнуць", + "You need to be logged in to upload files" : "Каб запампоўваць файлы, вам трэба ўвайсці ў сістэму", + "Drop your files to upload" : "Перацягніце файлы для запампоўвання", + "Conversation messages" : "Паведамленні ў размове", + "Scroll to bottom" : "Прагартаць уніз", + "Post message" : "Апублікаваць паведамленне", + "Federated conversation" : "Федэратыўная размова", + "Public conversation" : "Публічная размова", + "Favorite" : "Абранае", + "Banned users" : "Заблакіраваныя карыстальнікі", + "Manage the list of banned users in this conversation." : "Кіраванне спісам заблакіраваных карыстальнікаў у гэтай размове.", + "Manage bans" : "Кіраванне блакіроўкамі", + "No banned users" : "Няма заблакіраваных карыстальнікаў", + "Banned by:" : "Заблакіраваны карыстальнікам:", + "Date:" : "Дата:", + "Note:" : "Заўвага:", + "Hide details" : "Схаваць падрабязнасці", + "Show details" : "Паказаць падрабязнасці", + "Unban" : "Разблакіраваць", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Вы можаце змяніць назву і апісанне ў {linkstart}Календары ↗{linkend}.", + "Error while updating conversation name" : "Памылка пры абнаўленні назвы размовы", + "Error while updating conversation description" : "Памылка пры абнаўленні апісання размовы", + "Enter a name for this conversation" : "Увядзіце назву для гэтай размовы", + "Edit conversation name" : "Рэдагаваць назву размовы", + "Edit conversation description" : "Рэдагаваць апісанне размовы", + "Enter a description for this conversation" : "Увядзіце апісанне гэтай размовы", + "Picture" : "Аватар", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У гэтай размове можна ўключыць наступных ботаў. Звярніцеся да адміністратара, каб усталяваць больш ботаў на серверы.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На гэтым серверы не ўсталяваны боты. Звярніцеся да адміністратара, каб усталяваць ботаў.", + "Disable" : "Адключыць", + "Enable" : "Уключыць", + "Breakout rooms" : "Групавыя пакоі", + "Manage breakout rooms" : "Кіраваць групавымі пакоямі", + "Set up breakout rooms for this conversation" : "Задаць групавыя пакоі для гэтай размовы", + "Choose your conversation picture" : "Выберыце аватар размовы", + "Choose" : "Выбраць", + "Error setting conversation picture" : "Памылка задання аватара размовы", + "Could not set the conversation picture: {error}" : "Не ўдалося задаць аватар размовы: {error}", + "Error cropping conversation picture" : "Памылка абрэзкі аватара размовы", + "Error removing conversation picture" : "Памылка выдалення аватара размовы", + "Set emoji as conversation picture" : "Задаць эмодзі ў якасці аватара размовы", + "Set background color for conversation picture" : "Задаць фонавы колер для аватара размовы", + "Upload conversation picture" : "Запампаваць аватар размовы", + "Choose conversation picture from files" : "Выбраць аватар размовы з Файлаў", + "Remove conversation picture" : "Выдаліць аватар размовы", + "The file must be a PNG or JPG" : "Файл павінен быць у фармаце PNG або JPG", + "Set picture" : "Задаць аватар", + "Default permissions modified for {conversationName}" : "Зменены прадвызначаныя дазволы для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не ўдалося змяніць прадвызначаныя дазволы для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Рэдагаваць прадвызначаныя дазволы для ўдзельнікаў гэтай размовы. Гэтыя налады не ўплываюць на мадэратараў.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Пасля кожнай змены дазволаў у гэтым раздзеле карыстальніцкія дазволы, раней прызначаныя асобным удзельнікам, будуць страчаны.", + "All permissions" : "Усе дазволы", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Удзельнікі маюць дазвол пачынаць выклік, далучацца да выкліку, уключаць аўдыя і відэа, а таксама паказваць экран.", + "Restricted" : "Абмежавана", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Удзельнікі могуць далучацца да выклікаў, але не могуць уключаць аўдыя, відэа і паказваць экран, пакуль мадэратар не дасць ім дазволы ўручную.", + "Advanced permissions" : "Пашыраныя дазволы", + "Edit permissions" : "Рэдагаваць дазволы", + "Conversation settings" : "Налады размовы", + "Basic Info" : "Асноўныя звесткі", + "Personal" : "Асабістыя", + "Moderation" : "Мадэрацыя", + "Breakout Rooms" : "Групавыя пакоі", + "Matterbridge" : "Matterbridge", + "Bots" : "Боты", + "Danger zone" : "Небяспечная зона", + "Archive conversation" : "Архіваваць размову", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архіваваныя размовы прадвызначна схаваныя ў спісе размоў. Аднак яны ўсё роўна будуць адлюстроўвацца, калі вы будзеце шукаць па назве размовы або адкрываць спіс архіваваных размоў.", + "Do you really want to leave \"{displayName}\"?" : "Вы сапраўды хочаце выйсці з \"{displayName}\"?", + "You can archive this conversation instead." : "Замест гэтага вы можаце архіваваць гэтую размову.", + "Leave conversation" : "Выйсці з размовы", + "You need to promote a new moderator before you can leave the conversation" : "Перш чым пакінуць размову, вам трэба прызначыць новага мадэратара", + "Delete conversation" : "Выдаліць размову", + "Do you really want to delete \"{displayName}\"?" : "Вы сапраўды хочаце выдаліць \"{displayName}\"?", + "Error while deleting conversation" : "Памылка пры выдаленні размовы", + "Delete all chat messages" : "Выдаліць усе паведамленні ў чаце", + "Do you really want to delete all messages in \"{displayName}\"?" : "Вы сапраўды хочаце выдаліць усе паведамленні ў \"{displayName}\"?", + "Error while clearing chat history" : "Памылка пры ачыстцы гісторыі чата", + "Be careful, these actions cannot be undone." : "Будзьце ўважлівыя, гэтыя дзеянні нельга адрабіць.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Каб зноў далучыцца да закрытай размовы пасля таго, я вы выйдзеце з яе, спатрэбіцца запрашэнне. Да адкрытай размовы можна далучыцца ў любы час.", + "Permanently delete this conversation." : "Назаўжды выдаліць гэту размову.", + "Delete chat messages" : "Выдаліць паведамленні ў чаце", + "Permanently delete all the messages in this conversation." : "Назаўжды выдаліць усе паведамленні ў гэтай размове.", + "_%n hour_::_%n hours_" : ["%n гадзіна","%n гадзіны","%n гадзін","%n гадзін"], + "_%n day_::_%n days_" : ["%n дзень","%n дні","%n дзён","%n дзён"], + "_%n week_::_%n weeks_" : ["%n тыдзень","%n тыдні","%n тыдняў","%n тыдняў"], + "Custom expiration time" : "Карыстальніцкі тэрмін дзеяння", + "Message expiration disabled" : "Тэрмін дзеяння паведамленняў адключаны", + "Message expiration set: {duration}" : "Зададзены тэрмін дзеяння паведамленняў: {duration}", + "Error when trying to set message expiration" : "Памылка пры спробе задаць тэрмін дзеяння паведамленняў", + "Message expiration" : "Тэрмін дзеяння паведамленняў", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Тэрмін дзеяння паведамленняў у чаце можа скончыцца праз пэўны час. Заўвага: файлы, абагуленыя ў чаце, не будуць выдалены для ўладальніка, але больш не будуць абагулены ў размове.", + "Set message expiration" : "Задаць тэрмін дзеяння паведамленняў", + "Current message expiration" : "Бягучы тэрмін дзеяння паведамленняў", + "Password copied to clipboard" : "Пароль скапіяваны ў буфер абмену", + "Password could not be copied" : "Не ўдалося скапіяваць пароль", + "Guest access" : "Гасцявы доступ", + "Breakout rooms are not allowed in public conversations." : "У публічных размовах не дапускаюцца групавыя пакоі.", + "Allow guests to join this conversation via link" : "Дазволіць гасцям далучацца да размовы па спасылцы", + "Password protection" : "Абарона паролем", + "This conversation is password-protected. Guests need password to join" : "Гэта размова абаронена паролем. Гасцям патрэбен пароль для далучэння.", + "Password protection is needed for public conversations" : "Публічным размовам патрэбна абарона паролем", + "Set a password" : "Задайце пароль", + "Change password" : "Змяніць пароль", + "Enter new password" : "Увядзіце новы пароль", + "Save password" : "Захаваць пароль", + "Copy password" : "Скапіяваць пароль", + "Guests are allowed to join this conversation via link" : "Госці могуць далучыцца да гэтай размовы па спасылцы", + "Guests are not allowed to join this conversation" : "Гасцям не дазваляецца далучацца да гэтай размовы", + "Resend invitations" : "Адправіць запрашэнні паўторна", + "This conversation is open to registered users" : "Гэта размова адкрыта для зарэгістраваных карыстальнікаў", + "Open conversation" : "Адкрыць размову", + "Set language spoken in calls" : "Задаць мову размовы падчас выклікаў", + "Languages could not be loaded" : "Не ўдалося загрузіць мовы", + "Loading languages …" : "Загрузка моў …", + "Invalid language" : "Памылковая мова", + "Default language (English)" : "Прадвызначаная мова (Англійская)", + "Start time: {date}" : "Час пачатку: {date}", + "Start time has been updated" : "Час пачатку абноўлены.", + "Error occurred while updating start time" : "Падчас абнаўлення часу пачатку адбылася памылка", + "Meeting start time" : "Час пачатку сустрэчы", + "Start time (optional)" : "Час пачатку (неабавязкова)", + "Poll drafts" : "Чарнавікі апытанняў", + "Browse poll drafts" : "Праглядзець чарнавікі апытанняў", + "Error occurred when locking the conversation" : "Памылка пры блакіраванні размовы", + "Error occurred when unlocking the conversation" : "Памылка пры разблакіраванні размовы", + "Lock conversation" : "Заблакіраваць размову", + "This will also terminate the ongoing call." : "Гэта таксама перапыніць бягучы выклік.", + "Edit" : "Рэдагаваць", + "More information" : "Больш інфармацыі", + "Delete" : "Выдаліць", + "not running, check Matterbridge log" : "не запушчана, праверце журнал Matterbridge", + "You can bridge channels from various instant messaging systems with Matterbridge." : "З дапамогай Matterbridge вы можаце злучаць каналы з розных сістэм імгненных паведамленняў.", + "More info on Matterbridge" : "Больш інфармацыі пра Matterbridge", + "Show Matterbridge log" : "Паказаць журнал Matterbridge", + "Log content" : "Змест журнала", + "Only moderators are allowed to mention @all" : "Толькі мадэратары могуць згадваць @all", + "All participants are allowed to mention @all" : "Усе ўдзельнікі могуць згадваць @all", + "Participants are now allowed to mention @all." : "Цяпер удзельнікам дазваляецца згадваць @all.", + "Mentioning @all has been limited to moderators." : "Згадваць @all дазволена толькі мадэратарам.", + "Allow participants to mention @all" : "Дазволіць удзельнікам згадваць @all", + "Mention permissions" : "Дазволы на згадванне", + "Notifications" : "Апавяшчэнні", + "Notify about calls in this conversation" : "Апавяшчаць пра выклікі ў гэтай размове", + "Important conversation" : "Важная размова", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус карыстальніка \"Не турбаваць\" ігнаруецца падчас важных размоў", + "Sensitive conversation" : "Сакрэтная размова", + "Message preview will be disabled in conversation list and notifications" : "Перадпрагляд паведамленняў будзе адключаны ў спісе размоў і апавяшчэннях", + "Recording consent is required for calls in this conversation" : "Для запісу выклікаў у гэтай размове патрабуецца згода", + "Recording consent is not required for calls in this conversation" : "Для запісу выклікаў у гэтай размове не патрабуецца згода", + "Recording consent requirement was updated" : "Патрабаванне аб згодзе на запіс было абноўлена", + "Error occurred while updating recording consent" : "Падчас абнаўлення згоды на запіс узнікла памылка", + "Recording Consent" : "Згода на запіс", + "Require recording consent before joining call in this conversation" : "Патрабаваць згоду на запіс перад далучэннем да выкліку ў гэтай размове", + "Recording consent is required for all calls" : "Для ўсіх выклікаў патрабуецца згода на запіс", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n чалавек прыняты","%n чалавекі прыняты","%n чалавек прынята","%n чалавек прынята"], + "_%n person declined_::_%n people declined_" : ["%n чалавек адхілены","%n чалавекі адхілены","%n чалавек адхілена","%n чалавек адхілена"], + "_and %n other attachment_::_and %n other attachments_" : ["і яшчэ %n далучэнне","і яшчэ %n далучэнні","і яшчэ %n далучэнняў","і яшчэ %n далучэнняў"], + "With {displayName}" : "З {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Праглядзець далучэнне", + "Join" : "Далучыцца", + "View conversation" : "Праглядзець размову", + "View event on Calendar" : "Праглядзець падзею ў Календары", + "Error while creating the conversation" : "Памылка пры стварэнні размовы", + "Hello, {displayName}" : "Вітаем, {displayName}", + "Start meeting now" : "Пачаць сустрэчу", + "Give your meeting a title" : "Дайце назву вашай сустрэчы", + "Create and copy link" : "Стварыць і скапіяваць спасылку", + "Create a new conversation" : "Стварыць новую размову", + "Join open conversations" : "Далучыцца да адкрытых размоў", + "Scroll backward" : "Прагартаць назад", + "Scroll forward" : "Прагартаць наперад", + "Schedule meetings" : "Плануйце сустрэчы", + "You don't have any upcoming meetings" : "Няма запланаваных сустрэч", + "Open calendar" : "Адкрыць каляндар", + "Unread mentions" : "Непрачытаныя згадкі", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Тут будуць адлюстроўвацца паведамленні, у якіх вас згадвалі. Вы можаце згадваць людзей, набіраючы @, а затым іх імя.", + "Upcoming reminders" : "Будучыя напаміны", + "Message reminders" : "Напаміны пра паведамленні", + "Set a reminder on a message to be notified" : "Задайце напамін для паведамлення, пра якое трэба атрымаць апавяшчэнне", + "Start a group conversation" : "Пачаць групавую размову", + "Create conversation" : "Стварыць размову", + "Enter your name" : "Увядзіце сваё імя", + "Submit name and join" : "Увядзіце імя і далучыцеся", + "Do you already have an account?" : "У вас ужо ёсць уліковы запіс?", + "Log in" : "Увайсці", + "Error while verifying uploaded file" : "Памылка пры спраўджанні запампаванага файла", + "Uploaded file is verified" : "Запампаваны файл спраўджаны", + "Participants added successfully" : "Удзельнікі паспяхова дададзены", + "Error while adding participants" : "Памылка пры дадаванні ўдзельнікаў", + "Import a file" : "Імпартаваць файл", + "Browse" : "Агляд", + "Verifying uploaded file …" : "Спраўджанне запампаванага файла …", + "This might take a moment" : "Гэта можа заняць крыху часу", + "Send invitations" : "Адправіць запрашэнні", + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Можна адправіць %n запрашэнне","Можна адправіць %n запрашэнні","Можна адправіць %n запрашэнняў","Можна адправіць %n запрашэнняў"], + "Search participants or phone numbers" : "Пошук удзельнікаў або тэлефонных нумароў", + "Creating the conversation …" : "Стварэнне размовы …", + "Mark as read" : "Пазначыць як прачытанае", + "Mark as unread" : "Пазначыць як непрачытанае", + "Remove from favorites" : "Выдаліць з абранага", + "Add to favorites" : "У абранае", + "Unarchive conversation" : "Разархіваваць размову", + "Ignore \"Do not disturb\"" : "Ігнараваць статус \"Не турбаваць\"", + "You need to promote a new moderator before you can leave the conversation." : "Перш чым пакінуць размову, вам трэба павысіць статус новага мадэратара.", + "Conversation actions" : "Дзеянні з размовамі", + "Notify about calls" : "Апавяшчаць пра выклікі", + "Hide message text" : "Схаваць тэкст паведамлення", + "Pending invitations" : "Запрашэнні ў чаканні", + "From {user} at {remoteServer}" : "Ад {user} на {remoteServer}", + "Decline invitation" : "Адхіліць запрашэнне", + "Accept invitation" : "Прыняць запрашэнне", + "No pending invitations" : "Няма запрашэнняў у чаканні", + "Home" : "Дадому", + "Unread" : "Непрачытанае", + "Mentions" : "Згадкі", + "Meetings" : "Сустрэчы", + "No matches found" : "Супадзенняў не знойдзена", + "No conversations found" : "Размоў не знойдзена", + "You have no archived conversations." : "Няма архіваваных размоў.", + "Subscribe to an existing thread or start your own." : "Падпішыцеся на існуючую гутарку або пачніце сваю ўласную.", + "You have no unread mentions." : "Няма непрачытаных згадак.", + "You have no unread messages." : "Няма непрачытаных паведамленняў.", + "An error occurred while performing the search" : "Падчас выканання пошуку адбылася памылка", + "Conversation list" : "Спіс размоў", + "Filter conversations by" : "Фільтраваць размовы па", + "Unread messages" : "Непрачытаныя паведамленні", + "Clear filters" : "Ачысціць фільтры", + "New personal note" : "Новая асабістая нататка", + "Back to conversations" : "Назад да размоў", + "Archived conversations" : "Архіваваныя размовы", + "Threads" : "Гутаркі", + "Clear filter" : "Ачысціць фільтр", + "Show more threads" : "Паказаць больш гутарак", + "App settings" : "Налады праграмы", + "Users" : "Карыстальнікі", + "Groups" : "Групы", + "Teams" : "Каманды", + "Federated users" : "Федэратыўныя карыстальнікі", + "New private conversation" : "Новая прыватная размова", + "Other sources" : "Іншыя крыніцы", + "Open conversations" : "Адкрытыя размовы", + "No search results" : "Няма вынікаў пошуку", + "Users, groups and teams" : "Карыстальнікі, групы і каманды", + "Users and groups" : "Карыстальнікі і групы", + "Users and teams" : "Карыстальнікі і каманды", + "Groups and teams" : "Групы і каманды", + "New group conversation" : "Новая групавая размова", + "The meeting will start soon" : "Сустрэча неўзабаве пачнецца", + "This meeting is scheduled for {startTime}" : "Гэта сустрэча запланавана на {startTime}", + "You are currently waiting in the lobby" : "Вы зараз чакаеце ў лобі", + "Select microphone" : "Выберыце мікрафон", + "No microphone available" : "Няма даступных мікрафонаў", + "Select speaker" : "Выберыце дынамік", + "No speaker available" : "Няма даступных дынамікаў", + "Select camera" : "Выберыце камеру", + "No camera available" : "Няма даступных камер", + "Select a device" : "Выберыце прыладу", + "Playing …" : "Прайграванне …", + "Test speakers" : "Тэст дынамікаў", + "Test" : "Тэст", + "Devices" : "Прылады", + "Backgrounds" : "Фоны", + "No audio" : "Няма гуку", + "No camera" : "Няма камеры", + "Display video as you will see it (mirrored)" : "Паказваць відэа так, як яго будзеце бачыць вы (адлюстраванае)", + "Display video as others will see it" : "Паказваць відэа так, як яго будуць бачыць іншыя", + "Calls are not supported in your browser" : "Ваш браўзер не падтрымлівае выклікі", + "Access to microphone is only possible with HTTPS" : "Доступ да мікрафона магчымы толькі праз HTTPS", + "Access to microphone was denied" : "Доступ да мікрафона забаронены", + "Error while accessing microphone" : "Памылка доступу да мікрафона", + "Access to camera is only possible with HTTPS" : "Доступ да камеры магчымы толькі праз HTTPS", + "The call is being recorded." : "Выклік запісваецца.", + "The call might be recorded." : "Выклік можа быць запісаны.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запіс можа ўключаць ваш голас, відэа з камеры і абагулены экран. Перад далучэннем да выкліку патрабуецца ваша згода.", + "Give consent to the recording of this call" : "Дайце згоду на запіс гэтага выкліку", + "Show more info" : "Паказаць падрабязныя звесткі", + "Audio is not available" : "Гук недаступны", + "Video is not available" : "Відэа недаступна", + "Start recording immediately with the call" : "Пачынаць запіс адразу з выклікам", + "Notify all participants about this call" : "Апавясціць ўсіх удзельнікаў пра гэты выклік", + "Apply settings" : "Прымяніць налады", + "Error while uploading the file" : "Памылка пры запампоўванні файла", + "Select a file" : "Выберыце файл", + "Invalid path selected" : "Выбраны памылковы шлях", + "Blur" : "Размытасць", + "Upload" : "Запампаваць", + "Files" : "Файлы", + "(edited)" : "(адрэдагавана)", + "The message has expired or has been deleted" : "Паведамленне пратэрмінавана або выдалена", + "Cancel quote" : "Скасаваць цытату", + "24 hours" : "24 гадзіны", + "7 days" : "7 дзён", + "30 days" : "30 дзён", + "Until unpin" : "Пакуль не адмацуецца", + "Clear reminder – {timeLocale}" : "Ачысціць напамін – {timeLocale}", + "Edited by {actor}" : "Адрэдагаваў(-ла) {actor}", + "Pinned by you" : "Замацавана вамі", + "Pinned by {actor}" : "Замацаваў(-ла) {actor}", + "Until {absoluteDate}" : "Да {absoluteDate}", + "Message text copied to clipboard" : "Тэкст паведамлення скапіяваны ў буфер абмену", + "Message text could not be copied" : "Не ўдалося скапіяваць тэкст паведамлення ", + "Message forwarded to \"Note to self\"" : "Паведамленне пераслана ў \"Асабістыя нататкі\"", + "Error while forwarding message to \"Note to self\"" : "Памылка пры перасыланні паведамлення ў \"Асабістыя нататкі\"", + "A reminder was successfully removed" : "Напамін паспяхова выдалены", + "Error occurred when removing a reminder" : "Пры выдаленні напаміну ўзнікла памылка", + "A reminder was successfully set at {datetime}" : "Напамін паспяхова зададзены на {datetime}", + "Error occurred when creating a reminder" : "Пры стварэнні напаміну ўзнікла памылка", + "Add a reaction to this message" : "Дадаць рэакцыю на гэта паведамленне", + "Reply" : "Адказаць", + "More actions" : "Больш дзеянняў", + "Set reminder" : "Задаць напамін", + "Pin message" : "Замацаваць паведамленне", + "Unpin message" : "Адмацаваць паведамленне", + "Reply privately" : "Адказаць прыватна", + "Edit message" : "Рэдагаваць паведамленне", + "Copy message" : "Скапіяваць паведамленне", + "Copy message link" : "Скапіяваць спасылку на паведамленне", + "Go to file" : "Перайсці да файла", + "Download file" : "Спампаваць файл", + "Go to thread" : "Перайсці да гутаркі", + "Edit thread details" : "Рэдагаваць звесткі пра гутарку", + "Forward message" : "Пераслаць паведамленне", + "Translate" : "Перакласці", + "Set custom reminder" : "Задаць уласны напамін", + "Keep pinned for" : "Замацоўваць на працягу", + "Set custom period" : "Уласны перыяд", + "Close reactions menu" : "Закрыць меню рэакцый", + "React with {emoji}" : "Адрэагаваць з {emoji}", + "React with another emoji" : "Адрэагаваць з дапамогай іншага эмодзі", + "Choose a conversation to forward the selected message." : "Выберыце размову, у якую трэба пераслаць выбранае паведамленне.", + "Error while forwarding message" : "Памылка падчас перасылкі паведамлення", + "The message has been forwarded to {selectedConversationName}" : "Падемленне пераслана ў {selectedConversationName}", + "Dismiss" : "Адхіліць", + "Go to conversation" : "Перайсці да размовы", + "Detect language" : "Вызначыць мову", + "The message could not be translated" : "Не ўдалося перакласці паведамленне ", + "Translation copied to clipboard" : "Пераклад скапіяваны ў буфер абмену", + "Translation could not be copied" : "Не ўдалося скапіяваць пераклад", + "Translate message" : "Перакласці паведамленне", + "Source language to translate from" : "Зыходная мова для перакладу", + "Translate from" : "Перакласці з", + "Target language to translate into" : "Мэтавая мова для перакладу", + "Translate to" : "Перакласці на", + "Translating" : "Пераклад", + "Copy translated text" : "Скапіяваць перакладзены тэкст", + "Error when scheduling the message" : "Памылка пры планаванні паведамлення", + "Reschedule" : "Запланаваць паўторна", + "Send now" : "Адправіць зараз", + "Choose a time" : "Выберыце час", + "Send at custom time" : "Адправіць у зададзены час", + "Will be sent without notification" : "Будзе адпраўлена без апавяшчэння", + "Message read by everyone who shares their reading status" : "Паведамленне прачыталі ўсе, хто абагульвае статус прачытання", + "Message sent" : "Паведамленне адпраўлена", + "Sent without notification" : "Адпраўлена без апавяшчэння", + "Deleting message" : "Выдаленне паведамлення", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Паведамленне паспяхова выдалена, але ёсць наладжаны бот або Matterbridge, і паведамленне, магчыма, ужо распаўсюджана ў іншыя сэрвісы", + "Message deleted successfully" : "Паведамленне паспяхова выдалена", + "Message could not be deleted because it is too old" : "Не ўдалося выдаліць паведамленне , бо яно занадта старое", + "Only normal chat messages can be deleted" : "Можна выдаліць толькі звычайныя паведамленні чата", + "An error occurred while deleting the message" : "Падчас выдалення паведамлення адбылася памылка", + "Pinned" : "Замацавана", + "Your browser does not support playing audio files" : "Ваш браўзер не падтрымлівае прайграванне аўдыяфайлаў", + "Contact" : "Кантакт", + "{stack} in {board}" : "{stack} у {board}", + "Deck Card" : "Картка Deck", + "Remove {fileName}" : "Выдаліць {fileName}", + "Open this location in OpenStreetMap" : "Адкрыць гэта месца ў OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n адказ","%n адказы","%n адказаў","%n адказаў"], + "Sending message" : "Адпраўка паведамлення", + "Failed to send the message. Click to try again" : "Не ўдалося адправіць паведамленне. Націсніце, каб паспрабаваць яшчэ раз.", + "Not enough free space to upload file" : "Недастаткова вольнай прасторы, каб запампаваць файл", + "You cannot send messages to this conversation at the moment" : "У дадзены момант вы не можаце адпраўляць паведамленні ў гэту размову", + "Could not update the message" : "Не атрымалася абнавіць паведамленне", + "Reply to thread \"{threadTitle}\"" : "Адказаць у гутарцы \"{threadTitle}\"", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Чарнавік апытання • %n варыянты","Чарнавік апытання • %n варыянты","Чарнавік апытання • %n варыянтаў","Чарнавік апытання • %n варыянтаў"], + "_%n vote_::_%n votes_" : ["%n голас","%n галасы","%n галасоў","%n галасоў"], + "Edit poll draft" : "Рэдагаваць чарнавік апытання", + "Delete poll draft" : "Выдаліць чарнавік апытання", + "Open poll" : "Адкрыць апытанне", + "See results" : "Паглядзець вынікі", + "Reactions" : "Рэакцыі", + "No permission to post reactions in this conversation" : "Няма дазволу на публікацыю рэакцый у гэтай размове", + "and {participant}" : "і {participant}", + "_and %n other participant_::_and %n other participants_" : ["і яшчэ %n удзельнік","і яшчэ %n удзельнікі","і яшчэ %n удзельнікаў","і яшчэ %n удзельнікаў"], + "Show all reactions" : "Паказаць усе рэакцыі", + "Add more reactions" : "Дадаць больш рэакцый", + "Show or collapse system messages" : "Паказаць або згарнуць сістэмныя паведамленні", + "No messages" : "Няма паведамленняў", + "All messages have expired or have been deleted." : "Усе паведамленні пратэрмінаваны або выдалены.", + "{author} (pinned by you)" : "{author} (замацавана вамі)", + "{author} (pinned by {actor})" : "{author} (замацаваў(-ла) {actor})", + "Unpin" : "Адмацаваць", + "Cancel search" : "Скасаваць пошук", + "Add a phone number" : "Дадаць нумар тэлефона", + "Error: A password is required to create the conversation." : "Памылка: Для стварэння размовы патрабуецца пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Гатова, размова \"{conversationName}\" створана.", + "Create a new group conversation" : "Стварыць новую групавую размову", + "Add participants" : "Дадаць удзельнікаў", + "Maximum length exceeded ({maxlength} characters)" : "Перавышана максімальная даўжыня ({maxlength} сімвалаў)", + "Conversation visibility" : "Бачнасць размовы", + "Allow guests to join via link" : "Дазволіць гасцям далучацца па спасылцы", + "Enter password" : "Увядзіце пароль", + "This conversation has been locked" : "Гэта размова была заблакіравана", + "No permission to post messages in this conversation" : "Няма дазволу на публікацыю паведамленняў у гэтай размове", + "Joining conversation …" : "Далучэнне да размовы …", + "Write a message without notification" : "Напісаць паведамленне без апавяшчэння", + "Create a thread silently" : "Пачаць гутарку бязгучна", + "Create a thread" : "Стварыць гутарку", + "Send message silently" : "Адправіць паведамленне бязгучна", + "Send message" : "Адправіць паведамленне", + "Send without notification" : "Адправіць без апавяшчэння", + "The participant will not be notified about new messages" : "Удзельнік не будзе атрымліваць апавяшчэнняў аб новых паведамленнях", + "Participants will not be notified about new messages" : "Удзельнікі не будуць атрымліваць апавяшчэнняў аб новых паведамленнях", + "Message will be sent {datetimeString}" : "Паведамленне будзе адпраўлена {datetimeString}", + "Thread title is required" : "Патрабуецца загаловак гутаркі", + "Message text is required" : "Патрабуецца тэкст паведамлення", + "The message could not be edited" : "Нне ўдалося адрэдагаваць паведамленне ", + "File to share" : "Файл для абагульвання", + "File upload is not available in this conversation" : "Запампоўванне файлаў недаступна ў гэтай размове", + "Message was successfully scheduled" : "Паведамленне паспяхова запланавана", + "Add emoji" : "Дадаць эмодзі", + "Adding a mention will only notify users who did not read the message." : "Даданне згадкі прывядзе да апавяшчэння толькі тых карыстальнікаў, якія не прачыталі паведамленне.", + "Thread title" : "Загаловак гутаркі", + "Send later" : "Адправіць пазней", + "Show scheduled messages" : "Паказаць запланаваныя паведамленні", + "Cancel editing" : "Скасаваць рэдагаванне", + "Schedule message" : "Запланаваць паведамленне", + "{user} is out of office and might not respond." : "{user} не на працы і можа не адказаць.", + "Absence period: {startDate} - {endDate}" : "Перыяд адсутнасці: {startDate} - {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Абагульванне з {nextcloud}", + "Share from Files" : "Абагуліць з Файлаў", + "Share files to the conversation" : "Абагуліць файлы ў размове", + "Upload from device" : "Запампаваць з прылады", + "Create new poll" : "Стварыць новае апытанне", + "Smart picker" : "Smart picker", + "Record voice message" : "Запісаць галасавое паведамленне", + "End recording and send" : "Завяршыць запіс і адправіць", + "Dismiss recording" : "Адхіліць запіс", + "Access to the microphone was denied" : "Доступ да мікрафона забаронены", + "Microphone either not available or disabled in settings" : "Мікрафон недаступны або адключаны ў наладах", + "Error while recording audio" : "Памылка падчас запісу гуку", + "New file" : "Новы файл", + "Blank" : "Пусты", + "Error while creating file" : "Памылка пры стварэнні файла", + "Create and share a new file" : "Стварыце і абагульце новы файл", + "Name of the new file" : "Назва новага файла", + "Create file" : "Стварыць файл", + "Someone is typing …" : "Хтосьці піша …", + "{user1} is typing …" : "{user1} піша …", + "{user1} and {user2} are typing …" : "{user1} і {user2} пішуць …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} і {user3} пішуць …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …"], + "Add more files" : "Дадаць больш файлаў", + "Send" : "Адправіць", + "In this conversation {user} can:" : "У гэтай размове {user} можа:", + "Edit default permissions for participants in {conversationName}" : "Рэдагаваць прадвызначаныя дазволы для ўдзельнікаў у {conversationName}", + "Start a call" : "Пачаць выклік", + "Skip the lobby" : "Прапусціць лобі", + "Can post messages" : "Можа адпраўляць паведамленні", + "Can post messages and reactions" : "Можа публікаваць паведамленні і рэакцыі", + "Can add reactions" : "Можа дадаваць рэакцыі", + "Enable the microphone" : "Уключыць мікрафон", + "Enable the camera" : "Уключыць камеру", + "Share the screen" : "Пачаць паказ экрана", + "Update permissions" : "Абнавіць дазволы", + "Updating permissions" : "Абнаўленне дазволаў", + "No poll drafts" : "Няма чарнавікоў апытанняў", + "There is no poll drafts yet saved for this conversation" : "Для гэтай размовы пакуль няма захаваных чарнавікоў апытанняў", + "Create poll in {name}" : "Стварыць апытанне ў {name}", + "Create poll" : "Стварыць апытанне", + "Error while importing poll" : "Памылка пры імпарце апытання", + "Question" : "Пытанне", + "Ask a question" : "Задаць пытанне", + "Import draft from file" : "Імпартаваць чарнавік з файла", + "Answers" : "Адказы", + "Answer {option}" : "Адказ {option}", + "Delete poll option" : "Выдаліць варыянт апытання", + "Add answer" : "Дадаць адказ", + "Settings" : "Налады", + "Anonymous poll" : "Ананімнае апытанне", + "Multiple answers" : "Некалькі адказаў", + "Save as draft" : "Захаваць як чарнавік", + "Export draft to file" : "Экспартаваць чарнавік у файл", + "You voted for this option" : "Вы прагаласавалі за гэты варыянт", + "End poll" : "Завяршыць апытанне", + "Change your vote" : "Змяніць голас", + "Results" : "Вынікі", + "Voted participants" : "Удзельнікі, якія прагаласавалі", + "Send a message to \"{roomName}\"" : "Адправіць паведамленне ў \"{roomName}\"", + "Hide list of participants" : "Схаваць спіс удзельнікаў", + "Show list of participants" : "Паказаць спіс удзельнікаў", + "The message was sent to \"{roomName}\"" : "Паведамленне адпраўлена ў \"{roomName}\"", + "Send message to room" : "Адправіць паведамленне ў пакой", + "Back to main room" : "Вярнуцца ў галоўны пакой", + "Back to your room" : "Вярнуцца ў свой пакой", + "Message all rooms" : "Паведамленне ва ўсе пакоі", + "Start session" : "Пачаць сеанс", + "Start a call before you start a breakout room session" : "Пачніце выклік, перш чым пачаць сеанс групавых пакояў", + "Stop session" : "Спыніць сеанс", + "The message was sent to all breakout rooms" : "Паведамленне адпраўлена ва ўсе групавыя пакоі", + "Send a message to all breakout rooms" : "Адправіць паведамленне ва ўсе групавыя пакоі", + "Breakout rooms are not started" : "Групавыя пакоі не запушчаны", + "Talk setup incomplete" : "Наладка Talk не завершана", + "Disable lobby" : "Адключыць лобі", + "Settings for participant \"{user}\"" : "Налады для ўдзельніка \"{user}\"", + "Participant \"{user}\"" : "Удзельнік \"{user}\"", + "moderator" : "мадэратар", + "bot" : "бот", + "guest" : "госць", + "Ringing …" : "Выклік …", + "Call rejected" : "Выклік адхілены", + "Raised their hand" : "Падняў(-ла) руку", + "Remove group and members" : "Выдаліць групу і ўдзельнікаў", + "Remove team and members" : "Выдаліць каманду і членаў", + "Remove participant" : "Выдаліць удзельніка", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Вы сапраўды хочаце выдаліць групу \"{displayName}\" і яе ўдзельнікаў з гэтай размовы?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Вы сапраўды хочаце выдаліць каманду \"{displayName}\" і яе членаў з гэтай размовы?", + "Do you really want to remove {displayName} from this conversation?" : "Вы сапраўды хочаце выдаліць \"{displayName}\" з гэтай размовы?", + "Notification was sent to {displayName}" : "Апавяшчэнне адпраўлена {displayName}", + "Could not send notification to {displayName}" : "Не ўдалося адправіць апавяшчэнне {displayName}", + "in the lobby" : "у лобі", + "Move back to lobby" : "Вярнуцца ў лобі", + "Move to conversation" : "Перайсці да размовы", + "Demote from moderator" : "Пазбавіць правоў мадэратара", + "Promote to moderator" : "Прызначыць мадэратарам", + "Resend invitation" : "Адправіць запрашэнне паўторна", + "Copy phone number" : "Скапіяваць нумар тэлефона", + "Reset custom permissions" : "Скінуць карыстальніцкія дазволы", + "Grant all permissions" : "Даць усе дазволы", + "Remove all permissions" : "Выдаліць усе дазволы", + "Internal note (reason to ban)" : "Унутраная заўвага (прычына блакіроўкі)", + "Remove" : "Выдаліць", + "Permissions modified for {displayName}" : "Зменены дазволы для {displayName}", + "Add users, groups or teams" : "Дадаць карыстальнікаў, групы або каманды", + "Add users or groups" : "Дадаць карыстальнікаў або групы", + "Add users or teams" : "Дадаць карыстальнікаў або каманды", + "Add users" : "Дадаць карыстальнікаў", + "Add groups or teams" : "Дадаць групы або каманды", + "Add groups" : "Дадаць групы", + "Add teams" : "Дадаць каманды", + "Add other sources" : "Дадаць іншыя крыніцы", + "Add emails" : "Дадаць адрасы электроннай пошты", + "Integrations" : "Інтэграцыі", + "Add federated users" : "Дадаць федэратыўных карыстальнікаў", + "Searching …" : "Пошук …", + "Search for more users" : "Пошук іншых карыстальнікаў", + "You can search or add participants via name, email, or Federated Cloud ID" : "Вы можаце шукаць або дадаваць удзельнікаў па імені, электроннай пошце або ідэнтыфікатары ў федэратыўным воблаку.", + "Search or add participants" : "Знайсці або дадаць удзельнікаў", + "Invitation was sent to {actorId}" : "Запрашэнне адпраўлена {actorId}", + "An error occurred while adding the participants" : "Падчас дадавання ўдзельнікаў узнікла памылка", + "A new group conversation with selected participant will be created" : "Будзе створана новая групавая размова з выбраным удзельнікам", + "Participants" : "Удзельнікі", + "Pinned by a deleted user" : "Замацавана выдаленым карыстальнікам", + "Participants ({count})" : "Удзельнікі ({count})", + "Open chat" : "Адкрыць чат", + "You have new unread messages in the chat." : "У вас ёсць новыя непрачытаныя паведамленні ў чаце.", + "You have been mentioned in the chat." : "Вас згадалі ў чаце.", + "Search messages" : "Пошук паведамленняў", + "Chat" : "Чат", + "Details" : "Падрабязнасці", + "Shared items" : "Абагуленыя элементы", + "Search in {name}" : "Пошук у {name}", + "Threads in {name}" : "Гутаркі ў {name}", + "{actor} in {conversation}" : "{actor} у {conversation}", + "Search messages …" : "Пошук паведамленняў …", + "Search options" : "Параметры пошуку", + "From User" : "Ад карыстальніка", + "Since" : "З", + "Until" : "Да", + "No results found" : "Вынікаў не знойдзена", + "Load more results" : "Загрузіць больш вынікаў", + "Recent threads" : "Нядаўнія гутаркі", + "Projects" : "Праекты", + "No shared items" : "Няма абагуленых элементаў", + "Thread notifications" : "Апавяшчэнні гутаркі", + "Thread actions" : "Дзеянні ў гутарцы", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Спасылка на размову", + "No open conversations found" : "Адкрытых размоў не знойдзена", + "Either there are no open conversations or you joined all of them." : "Або няма адкрытых размоў, або вы далучыліся да іх усіх.", + "Search conversations or users" : "Пошук размоў або карыстальнікаў", + "Select conversation" : "Выберыце размову", + "Number length is not valid" : "Памылковая даўжыня нумара", + "Region code is not valid" : "Памылковы код рэгіёна", + "Number length is too short" : "Даўжыня нумара занадта кароткая", + "Number length is too long" : "Даўжыня нумара занадта доўгая", + "Number is not valid" : "Памылковы нумар", + "Phone numbers" : "Нумары тэлефонаў", + "Display name: {name}" : "Імя для паказу: {name}", + "Edit display name" : "Рэдагаваць імя для паказу", + "Display name (required)" : "Імя для паказу (абавязкова)", + "Save name" : "Захаваць імя", + "Error while setting personal setting" : "Памылка падчас захавання асабістых налад", + "Error while saving sounds setting" : "Памылка пры захаванні налад гуку", + "Compact conversations list" : "Кампактны спіс размоў", + "Chat appearance" : "Выгляд чата", + "Messages list" : "Спіс паведамленняў", + "Play sounds when participants join or leave a call" : "Прайграваць гукі, калі ўдзельнікі далучаюцца да выкліку або пакідаюць яго", + "Notification settings" : "Налады апавяшчэнняў", + "Default language" : "Прадвызначаная мова", + "Default language ({languageName})" : "Прадвызначаная мова ({languageName})", + "Select location for attachments" : "Выберыце размяшчэнне далучэнняў", + "Error while setting attachment folder" : "Памылка пры заданні папкі для далучэнняў", + "Turn camera and microphone off by default" : "Прадвызначана выключаць камеру і мікрафон", + "Blur camera background by default" : "Прадвызначана размываць фон камеры", + "Appearance & Sounds" : "Знешні выгляд і гукі", + "Privacy" : "Прыватнасць", + "Attachments folder" : "Папка для далучэнняў", + "Search" : "Пошук", + "Edit your last message" : "Рэдагаваць апошняе паведамленне", + "Shortcuts while in a call" : "Спалучэнні клавіш падчас выкліку", + "Camera on and off" : "Уключыць/выключыць камеру", + "Microphone on and off" : "Уключыць/выключыць мікрафон", + "Raise or lower hand" : "Падняць або апусціць руку", + "Zoom-in / zoom-out a screen share" : "Павялічыць/паменшыць маштаб паказу экрана", + "Mouse wheel" : "Кола мышы", + "Start call silently" : "Пачаць бязгучны выклік", + "Start call" : "Пачаць выклік", + "End call" : "Завяршыць выклік", + "This call has just ended" : "Гэты выклік толькі што завяршыўся.", + "You will be able to join the call only after a moderator starts it." : "Вы зможаце далучыцца да выкліку толькі пасля таго, як яе пачне мадэратар.", + "End call for everyone" : "Завяршыць выклік для ўсіх", + "Starting the recording" : "Пачатак запісу", + "Recording" : "Запіс", + "The call has been running for one hour." : "Выклік доўжыцца ўжо гадзіну", + "Cancel recording start" : "Скасаваць пачатак запісу", + "Stop recording" : "Спыніць запіс", + "Send a reaction" : "Адправіць рэакцыю", + "React with {reaction}" : "Адрэагаваць з {reaction}", + "All tasks done!" : "Усе заданні выкананы!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} з %n задання","{done} з %n заданняў","{done} з %n заданняў","{done} з %n заданняў"], + "_%n participant in call_::_%n participants in call_" : ["У выкліку %n удзельнік","У выкліку %n удзельнікі","У выкліку %n удзельнікаў","У выкліку %n удзельнікаў"], + "Scheduled messages" : "Запланаваныя паведамленні", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа або размытасць фону падчас паказу экрана.", + "Disable background blur" : "Адключыць размытасць фону", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць вас.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа або размытасць фону падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць паказ экрана.", + "Disable screenshare" : "Адключыць паказ экрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць размытасць фону відэа.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець і не бачыць вас. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас.", + "Mute others" : "Адключыць гук іншых", + "Start recording" : "Пачаць запіс", + "Set up breakout rooms" : "Наладзіць групавыя пакоі", + "Open Calendar" : "Адкрыць Каляндар", + "Remove participant {name}" : "Выдаліць удзельніка {name}", + "Would you like to delete this conversation?" : "Вы хочаце выдаліць гэтую размову?", + "Are you sure you want to delete this conversation?" : "Вы ўпэўнены, што хочаце выдаліць гэту размову?", + "Delete now" : "Выдаліць зараз", + "Keep" : "Пакінуць", + "Select a region" : "Выберыце рэгіён", + "Local time: {time}" : "Мясцовы час: {time}", + "Scheduled {datetime}" : "Запланавана {datetime}", + "Scheduled for {datetime}" : "Запланавана на {datetime}", + "Search …" : "Пошук ...", + "Message without mention" : "Паведамленне без згадкі", + "Mention myself" : "Згадаць сябе", + "Mention everyone" : "Згадаць ўсіх", + "Select a conversation" : "Выберыце размову", + "Select a mode" : "Выберыце рэжым", + "You do not have permissions to access this conversation." : "У вас няма дазволу на доступ да гэтай размовы.", + "Join a different conversation or start a new one." : "Далучайцеся да іншай размовы або пачніце новую.", + "The conversation does not exist" : "Размова не існуе", + "Join a conversation or start a new one!" : "Далучайцеся да размовы або пачніце новую!", + "Duplicate session" : "Дубляваць сеанс", + "Creating and joining a conversation with \"{userid}\"" : "Стварэнне і далучэнне да размовы з карыстальнікам \"{userid}\"", + "Join a conversation or start a new one" : "Далучайцеся да размовы або пачніце новую", + "Error while joining the conversation" : "Памылка пры далучэнні да размовы", + "Another user" : "Іншы карыстальнік", + "Nextcloud URL" : "URL-адрас NextCloud", + "Nextcloud user" : "Карыстальнік Nextcloud", + "User password" : "Пароль карыстальніка", + "Talk conversation" : "Размова Talk", + "Skip TLS verification" : "Прапусціць праверку TLS", + "Matrix server URL" : "URL-адрас сервера Matrix", + "User" : "Карыстальнік", + "Matrix channel" : "Канал Matrix", + "Mattermost server URL" : "URL-адрас сервера Mattermost", + "Mattermost user" : "Карыстальнік Mattermost", + "Team name" : "Назва каманды", + "Channel name" : "Назва канала", + "Rocket.Chat server URL" : "URL-адрас сервера Rocket.Chat", + "User name or email address" : "Імя карыстальніка або электронная пошта", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "URL-адрас сервера Zulip", + "Bot user name" : "Імя карыстальніка бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "Токен API", + "Slack channel" : "Канал Slack", + "Server ID or name" : "Ідэнтыфікатар або назва сервера", + "Channel ID (prefixed with \"ID:\") or name" : "Ідэнтыфікатар (з прэфіксам \"ID:\") або назва канала", + "Channel" : "Канал", + "Login" : "Лагін", + "Chat ID" : "Ідэнтыфікатар чата", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL-адрас IRC-сервера (напрыклад, chat.freenode.net:6667)", + "Nickname" : "Псеўданім", + "IRC channel" : "Канал IRC", + "Channel password" : "Пароль канала", + "NickServ nickname" : "Псеўданім NickServ", + "NickServ password" : "Пароль NickServ", + "Use TLS" : "Выкарыстоўваць TLS", + "Use SASL" : "Выкарыстоўваць SASL", + "Client ID" : "Ідэнтыфікатар кліента", + "Team ID" : "Ідэнтыфікатар каманды", + "Thread ID" : "Ідэнтыфікатар гутаркі", + "XMPP/Jabber server URL" : "URL-адрас сервера XMPP/Jabber", + "MUC server URL" : "URL-адрас сервера MUC", + "Pinned messages" : "Замацаваныя паведамленні", + "Media" : "Медыя", + "Polls" : "Апытанні", + "Deck cards" : "Карткі Deck", + "Voice messages" : "Галасавыя паведамленні", + "Locations" : "Месцазнаходжанні", + "Call recordings" : "Запісы выклікаў", + "Audio" : "Аўдыя", + "Show all pinned messages" : "Паказаць усе замацаваныя паведамленні", + "Show all media" : "Паказаць усе медыя", + "Show all files" : "Паказаць усе файлы", + "Show all polls" : "Паказаць усе апытанні", + "Show all deck cards" : "Паказаць усе карткі Deck", + "Show all voice messages" : "Паказаць усе галасавыя паведамленні", + "Show all locations" : "Паказаць усе месцазнаходжанні", + "Show all call recordings" : "Паказаць усе запісы выклікаў", + "Show all audio" : "Паказаць усе аўдыя", + "Show all other" : "Паказаць усе іншыя", + "Follow conversation settings" : "Прытрымлівацца налад размовы", + "Group" : "Група", + "Team" : "Каманда", + "You reconnected to the call" : "Вы зноў падключыліся да выкліку", + "{actor} reconnected to the call" : "{actor} зноў падключыўся(-лася) да выкліку", + "You added {user0} and {user1}" : "Вы дадалі {user0} і {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Вы дадалі {user0}, {user1} і яшчэ %n удзельніка","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў"], + "An administrator added you and {user0}" : "Адміністратар дадаў вас і {user0}", + "{actor} added you and {user0}" : "{actor} дадаў(-ла) вас і {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Адміністратар дадаў вас, {user0} і яшчэ %n удзельніка","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельніка","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў"], + "An administrator added {user0} and {user1}" : "Адміністратар дадаў {user0} і {user1}", + "{actor} added {user0} and {user1}" : "{actor} дадаў(-ла) {user0} і {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельніка","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельніка","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў"], + "You removed {user0} and {user1}" : "Вы выдалілі {user0} і {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Вы выдалілі {user0}, {user1} і яшчэ %n удзельніка","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў"], + "An administrator removed you and {user0}" : "Адміністратар выдаліў вас і {user0}", + "{actor} removed you and {user0}" : "{actor} выдаліў(-ла) вас і {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Адміністратар выдаліў вас, {user0} і яшчэ %n удзельніка","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельніка","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў"], + "An administrator removed {user0} and {user1}" : "Адміністратар выдаліў {user0} і {user1}", + "{actor} removed {user0} and {user1}" : "{actor} выдаліў(-ла) {user0} і {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельніка","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельніка","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў"], + "You and {user0} joined the call" : "Вы і {user0} далучыліся да выкліку", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Вы, {user0} і яшчэ %n удзельнік далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікі далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікаў далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікаў далучыліся да выкліку"], + "{user0} and {user1} joined the call" : "{user0} і {user1} далучыліся да выкліку", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} і яшчэ %n удзельнік далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікі далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікаў далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікаў далучыліся да выкліку"], + "You and {user0} left the call" : "Вы і {user0} выйшлі з выкліку", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Вы, {user0} і яшчэ %n удзельнік выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікі выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікаў выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікаў выйшлі з выкліку"], + "{user0} and {user1} left the call" : "{user0} і {user1} выйшлі з выкліку", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} і яшчэ %n удзельнік выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікі выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікаў выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікаў выйшлі з выкліку"], + "You promoted {user0} and {user1} to moderators" : "Вы прызначылі {user0} і {user1} мадэратарамі", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Вы прызначылі {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "An administrator promoted you and {user0} to moderators" : "Адміністратар прызначыў вас і {user0} мадэратарамі", + "{actor} promoted you and {user0} to moderators" : "{actor} прызначыў(-ла) вас і {user0} мадэратарамі", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Адміністратар прызначыў вас, {user0} і яшчэ %n удзельніка мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельніка мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі"], + "An administrator promoted {user0} and {user1} to moderators" : "Адміністратар прызначыў {user0} і {user1} мадэратарамі", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} прызначыў(-ла) {user0} і {user1} мадэратарамі", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "You demoted {user0} and {user1} from moderators" : "Вы пазбавілі {user0} і {user1} правоў мадэратара", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Вы пазбавілі {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "An administrator demoted you and {user0} from moderators" : "Адміністратар пазбавіў вас і {user0} правоў мадэратара", + "{actor} demoted you and {user0} from moderators" : "{actor} пазбавіў(-ла) вас і {user0} правоў мадэратара", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельніка правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельніка правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара"], + "An administrator demoted {user0} and {user1} from moderators" : "Адміністратар пазбавіў {user0} і {user1} правоў мадэратара", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} пазбавіў(-ла) {user0} і {user1} правоў мадэратара", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "You:" : "Вы:", + "You: {lastMessage}" : "Вы: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(адрэдагавана вамі)", + "(edited by a deleted user)" : "(адрэдагавана выдаленым карыстальнікам)", + "(edited by {moderator})" : "(адрэдагаваў(-ла) {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Вы спрабуеце далучыцца да размовы, маючы актыўны сеанс у іншым акне або на іншай прыладзе. Nextcloud Talk пакуль што не падтрымлівае такі сцэнарый. Што вы хочаце зрабіць?", + "Leave this page" : "Выйсці з гэтай старонкі", + "Join here" : "Далучыцца тут", + "Deck card has been posted to {conversation}" : "Картка Deck была апублікавана ў {conversation}", + "An error occurred while posting deck card to conversation" : "Падчас публікацыі карткі Deck у размове адбылася памылка", + "Post to a conversation" : "Апублікаваць у размове", + "Post to conversation" : "Апублікаваць у размове", + "The recording failed. Please contact your administrator." : "Не ўдалося зрабіць запіс. Звярніцеся да адміністратара.", + "Location has been posted to {conversation}" : "Месцазнаходжанне апублікавана ў {conversation}", + "An error occurred while posting location to conversation" : "Падчас публікацыі месцазнаходжання ў размове адбылася памылка", + "Share to a conversation" : "Абагуліць у размове", + "Share to conversation" : "Абагуліць у размове", + "In conversation" : "У размове", + "Search in conversation: {conversation}" : "Пошук у размове: {conversation}", + "Error while clearing conversation history" : "Памылка пры ачыстцы гісторыі размовы", + "Conversation password has been saved" : "Пароль размовы захаваны", + "Conversation password has been removed" : "Пароль размовы выдалены", + "Error occurred while saving conversation password" : "Памылка пры захаванні пароля размовы", + "Conversation picture set" : "Аватар размовы зададзены", + "Conversation picture deleted" : "Аватар размовы выдалены", + "Could not delete the conversation picture" : "Не ўдалося выдаліць аватар размовы", + "Could not post message: {errorMessage}" : "Не ўдалося апублікаваць паведамленне: {errorMessage}", + "Participant is banned successfully" : "Удзельнік паспяхова заблакіраваны", + "Error while banning the participant" : "Памылка пры блакіраванні ўдзельніка", + "Could not send invitation to {actorId}" : "Не ўдалося адправіць запрашэнне {actorId}", + "Invitations sent" : "Запрашэнні адпраўлены", + "Error occurred when sending invitations" : "Падчас адпраўкі запрашэнняў узнікла памылка", + "Failed to join the conversation." : "Не атрымалася далучыцца да размовы.", + "An error occurred while creating breakout rooms" : "Пры стварэнні групавых пакояў адбылася памылка", + "An error occurred while deleting breakout rooms" : "Пры выдаленні групавых пакояў адбылася памылка", + "An error occurred while starting breakout rooms" : "Пры запуску групавых пакояў адбылася памылка", + "An error occurred while stopping breakout rooms" : "Пры спыненні групавых пакояў адбылася памылка", + "An error occurred while sending a message to the breakout rooms" : "Пры адпраўцы паведамлення ў групавыя пакоі адбылася памылка", + "An error occurred while joining breakout room" : "Пры далучэнні да групавога пакоя адбылася памылка", + "Failed to rename the thread" : "Не ўдалося перайменаваць гутарку", + "An error occurred while accepting an invitation" : "Падчас прыняцця запрашэння адбылася памылка", + "An error occurred while rejecting an invitation" : "Падчас адхілення запрашэння адбылася памылка", + "{guest} (guest)" : "{guest} (госць)", + "Poll draft has been saved" : "Чарнавік апытання захаваны", + "An error occurred while saving the draft" : "Падчас захавання чарнавіка ўзнікла памылка", + "An error occurred while submitting your vote" : "Падчас адпраўкі голаса ўзнікла памылка", + "An error occurred while ending the poll" : "Падчас заканчэння апытання ўзнікла памылка", + "An error occurred while deleting the poll draft" : "Падчас выдалення чарнавіка апытання ўзнікла памылка", + "Poll \"{name}\" was created by {user}. Click to vote" : "Апытанне \"{name}\" створана карыстальнікам {user}. Націсніце, каб прагаласаваць", + "Failed to add reaction" : "Не ўдалося дадаць рэакцыю", + "Failed to remove reaction" : "Не ўдалося выдаліць рэакцыю", + "Error while uploading file \"{fileName}\"" : "Памылка пры запампоўванні файла \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Недастаткова вольнай прасторы, каб запампаваць файл \"{fileName}\"", + "You are not allowed to share files" : "Вам не дазволена абагульваць файлы", + "Error while sharing file" : "Памылка пры абагульванні файла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Ваш браўзер не цалкам падтрымліваецца Nextcloud Talk. Выкарыстоўвайце апошнюю версію Mozilla Firefox, Microsoft Edge, Google Chrome, Opera або Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Праз %n гадзіну","Праз %n гадзіны","Праз %n гадзін","Праз %n гадзін"], + "_%n minute _::_%n minutes_" : ["%n хвіліна","%n хвіліны","%n хвілін","%n хвілін"], + "In {hours} and {minutes}" : "Праз {hours} і {minutes}", + "_In %n minute_::_In %n minutes_" : ["Праз %n хвіліну","Праз %n хвіліны","Праз %n хвілін","Праз %n хвілін"], + "Later today – {timeLocale}" : "Пазней сёння – {timeLocale}", + "Tomorrow – {timeLocale}" : "Заўтра – {timeLocale}", + "This weekend – {timeLocale}" : "У гэты ўік-энд – {timeLocale}", + "Next week – {timeLocale}" : "На наступным тыдні – {timeLocale}", + "Message link copied to clipboard" : "Спасылка на паведамленне скапіявана ў буфер абмену", + "Conversation link copied to clipboard" : "Спасылка на размову скапіявана ў буфер абмену", + "The link could not be copied" : "Не ўдалося скапіяваць спасылку ", + "Failed to connect. Retrying …" : "Не атрымалася злучыцца. Паўторная спроба…", + "Please restart the app." : "Перазапусціце праграму.", + "Please reload the page." : "Перазагрузіце старонку.", + "Please try to restart the app." : "Паспрабуйце перазапусціць праграму.", + "Please try to reload the page." : "Паспрабуйце перазагрузіць старонку.", + "Do not disturb" : "Не турбаваць", + "Away" : "Адышоў", + "Microphone {number}" : "Мікрафон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Дынамік {number}", + "Access to microphone & camera was denied" : "Доступ да мікрафона і камеры забаронены", + "WebRTC is not supported in your browser" : "WebRTC не падтрымліваецца вашым браўзерам", + "Please use a different browser like Firefox or Chrome" : "Выкарыстоўвайце іншы браўзер, напрыклад, Firefox або Chrome", + "Error while accessing microphone & camera" : "Памылка доступу да мікрафона і камеры", + "Join conversations at any time, anywhere, on any device." : "Далучайцеся да размоў у любы час, у любым месцы і на любой прыладзе.", + "Android app" : "Праграма для Android", + "iOS app" : "Праграма для iOS", + "__language_name__" : "Беларуская", + "Tasks" : "Заданні", + "Notes" : "Нататкі", + "Reports" : "Справаздачы", + "Decisions" : "Рашэнні", + "Next meeting" : "Наступная сустрэча", + "Join conversations from remote Nextcloud servers" : "Далучайцеся да размоў з аддаленых сервераў Nextcloud", + "Set reminder for later today" : "Задаць напамін на пазней сёння", + "Set reminder for tomorrow" : "Задаць напамін на заўтра", + "Set reminder for this weekend" : "Задаць напамін на гэты ўік-энд", + "Set reminder for next week" : "Задаць напамін на наступны тыдзень", + "Open poll • You voted already" : "Адкрытае апытанне • Вы ўжо прагаласавалі", + "Open poll • Click to vote" : "Адкрытае апытанне • Націсніце, каб прагаласаваць", + "Poll • Ended" : "Апытанне • Завершана", + "Talk recording from {time} ({conversation})" : "Галасавое паведамленне ад {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Вынікі апытання • %n голас","Вынікі апытання • %n галасы","Вынікі апытання • %n галасоў","Вынікі апытання • %n галасоў"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Адкрыць апытанне • %n голас","Адкрыць апытанне • %n галасы","Адкрыць апытанне • %n галасоў","Адкрыць апытанне • %n галасоў"], + "Submit vote" : "Адправіць голас", + "Your privacy setting has been saved" : "Вашы налады прыватнасці захаваны", + "Your personal setting has been saved" : "Вашы асабістыя налады захаваны", + "Failed to save sounds setting" : "Не атрымалася захаваць налады гуку", + "Sounds setting saved" : "Налады гуку захаваны", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk абноўлена, вы не можаце пачаць або далучыцца да выкліку.", + "Nextcloud Talk was updated." : "Nextcloud Talk была абноўлена.", + "Nextcloud is in maintenance mode." : "Nextcloud знаходзіцца ў рэжыме тэхнічнага абслугоўвання." +}, +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/be.json b/l10n/be.json new file mode 100644 index 0000000..8a0df0b --- /dev/null +++ b/l10n/be.json @@ -0,0 +1,1759 @@ +{ "translations": { + "a conversation" : "размова", + "(Duration %s)" : "(Працягласць %s)", + "_%n guest_::_%n guests_" : ["%n госць","%n госці","%n гасцей","%n гасцей"], + "_%n other_::_%n others_" : ["яшчэ %n","яшчэ %n","яшчэ %n","яшчэ %n"], + "{actor} invited you to {call}" : "{actor} запрасіў(-ла) вас у {call}", + "Other activities" : "Іншая актыўнасць", + "Talk" : "Talk", + "Guest" : "Госць", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Вітаем у Nextcloud Talk!\nУ гэтай размове вы даведаецеся пра новыя функцыі, даступныя ў Nextcloud Talk.", + "## New in Talk %s" : "## Новае ў Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Цяпер можна выкарыстоўваць Microsoft Edge і Safari для ўдзелу ў аўдыя- і відэазванках", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Цяпер вы можаце апавясціць усіх удзельнікаў, напісаўшы ў чат \"@all\"", + "- You can now mention guests in the chat" : "- Цяпер вы можаце згадваць у чаце гасцей", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Цяпер вы можаце запампоўваць і перацягваць файлы непасрэдна са сваёй прылады ў чат", + "- You can now search for chats and messages in the unified search in the top bar" : "- Цяпер вы можаце шукаць чаты і паведамленні ва ўніфікаваным пошуку ў верхняй панэлі", + "- You can now change your camera and microphone while being in a call" : "- Цяпер вы можаце змяняць камеру і мікрафон падчас выкліку", + "- Raise your hand in a call with the R key" : "- Падніміце руку падчас размовы з дапамогай клавішы R", + "- You can now blur your background in the newly designed call view" : "- Цяпер вы можаце размываць фон у новым дызайне выкліку", + "- Moderators can now assign general and individual permissions to participants" : "- Мадэратары цяпер могуць прызначаць удзельнікам агульныя і індывідуальныя дазволы", + "- You can now react to chat messages" : "- Цяпер вы можаце рэагаваць на паведамленні ў чаце", + "- Configure an expiration time for chat messages" : "- Наладжвайце тэрмін дзеяння паведамленняў у чаце", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Мадэратары зараз могуць ствараць групавыя пакоі (патрабуе высокапрадукцыйнага бэкэнду)", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Акрамя размытасці фону ў відэавыкліках, цяпер даступныя віртуальныя фоны.", + "- Reactions are now available during calls" : "- Падчас выклікаў цяпер даступныя рэакцыі", + "- Groups can now be mentioned in chats" : "- Цяпер у чатах можна згадваць групы", + "- **Markdown** can now be used in _chat_ messages" : "- У паведамленнях _чата_ цяпер можна выкарыстоўваць **Markdown**", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Выкарыстоўвайце размову **Асабістыя нататкі**, каб рабіць нататкі і абменьвацца інфармацыяй паміж вашымі прыладамі", + "- Unsent message drafts are now saved in your browser" : "- Чарнавікі неадпраўленых паведамленняў цяпер захоўваюцца ў браўзеры", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Цяпер у размовах адлюстроўваюцца будучыя званкі з прывязаных падзей календара і замены пры адсутнасці.", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Вітайце кліент Nextcloud Talk для працоўнага стала для Windows, macOS і Linux: %s", + "- Search for messages of the current conversation directly in the right sidebar" : "- Шукайце паведамленні ў бягучай размове непасрэдна ў правай бакавой панэлі", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- З дапамогай новага кампактнага спісу (уключыце ў наладах Talk) вы адразу бачыце больш размоў", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Размовы пра сустрэчы цяпер сінхранізуюць загаловак і апісанне з календара і хаваюцца з дапамогай фільтра пошуку, пакуль не наблізіцца час іх пачатку.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Пазначайце размовы як сакрэтныя ў наладах апавяшчэнняў, каб схаваць змест паведамленняў са спісу размоў і апавяшчэнняў", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Каб атрымліваць push-апавяшчэнні ў рэжыме \"Не турбаваць\", пазначайце размовы як важныя", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Дадайце іншых удзельнікаў да індывідуальнага выкліку, каб адразу стварыць новы групавы выклік", + "- Use threads to keep your chat and discussions organized" : "- Арганізоўвайце чаты і абмеркаванні з дапамогай гутарак", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Цяпер падчас выкліку даступна імгненная транскрыпцыя (патрабуецца праграма ExApp для імгненнай транскрыпцыі і высокапрадукцыйны бэкенд)", + "- Moderators can now pin messages so they are kept at the top" : "- Цяпер мадэратары могуць замацоўваць паведамленні, якія будуць заўсёды ўверсе старонкі", + "- Schedule a message to send it at a later time" : "- Заплануйце адпраўку паведамлення на пазнейшы час", + "Talk updates ✅" : "Абнаўленні Talk ✅", + "Reaction deleted by author" : "Рэакцыя выдалена аўтарам", + "{actor} created the conversation" : "{actor} стварыў(-ла) размову", + "You created the conversation" : "Вы стварылі размову", + "System created the conversation" : "Сістэма стварыла размову", + "An administrator created the conversation" : "Адміністратар стварыў размову", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} перайменаваў(-ла) размову з \"%1$s\" на \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вы перайменавалі размову з \"%1$s\" на \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Адміністратар перайменаваў размову з \"%1$s\" на \"%2$s\"", + "{actor} set the description" : "{actor} задаў(-ла) апісанне", + "You set the description" : "Вы задалі апісанне", + "An administrator set the description" : "Адміністратар задаў апісанне", + "{actor} removed the description" : "{actor} выдаліў(-ла) апісанне", + "You removed the description" : "Вы выдалілі апісанне", + "An administrator removed the description" : "Адміністратар выдаліў апісанне", + "You started a silent call" : "Вы пачалі бязгучны выклік", + "Outgoing silent call" : "Выходны бязгучны выклік", + "{actor} started a silent call" : "{actor} пачаў(-ла) бязгучны выклік", + "Incoming silent call" : "Уваходны бязгучны выклік", + "You started a call" : "Вы пачалі выклік", + "Outgoing call" : "Выходны выклік", + "{actor} started a call" : "{actor} пачаў(-ла) выклік", + "Incoming call" : "Уваходны выклік", + "{actor} joined the call" : "{actor} далучыўся(-лася) да выкліку ", + "You joined the call" : "Вы далучыліся да выкліку", + "{actor} left the call" : "{actor} выйшаў(-ла) з выкліку", + "You left the call" : "Вы выйшлі з выкліку", + "{actor} unlocked the conversation" : "{actor} разблакіраваў(-ла) размову", + "You unlocked the conversation" : "Вы разблакіравалі размову", + "An administrator unlocked the conversation" : "Адміністратар разблакіраваў размову", + "{actor} locked the conversation" : "{actor} заблакіраваў(-ла) размову", + "You locked the conversation" : "Вы заблакіравалі размову", + "An administrator locked the conversation" : "Адміністратар заблакіраваў размову", + "{actor} opened the conversation to registered users" : "{actor} адкрыў(-ла) размову для зарэгістраваных карыстальнікаў", + "You opened the conversation to registered users" : "Вы адкрылі размову для зарэгістраваных карыстальнікаў", + "An administrator opened the conversation to registered users" : "Адміністратар адкрыў размову для зарэгістраваных карыстальнікаў", + "The conversation is now open to everyone" : "Размова адкрыта для ўсіх", + "{actor} opened the conversation to everyone" : "{actor} адкрыў(-ла) размову для ўсіх", + "You opened the conversation to everyone" : "Вы адкрылі размову для ўсіх", + "{actor} started breakout rooms" : "{actor} пачаў(-ла) групавыя пакоі", + "You started breakout rooms" : "Вы пачалі групавыя пакоі", + "{actor} stopped breakout rooms" : "{actor} спыніў(-ла) групавыя пакоі", + "You stopped breakout rooms" : "Вы спынілі групавыя пакоі", + "{actor} allowed guests" : "{actor} дазволіў(-ла) гасцей", + "You allowed guests" : "Вы дазволілі гасцей", + "An administrator allowed guests" : "Адміністратар дазволіў гасцей", + "{actor} disallowed guests" : "{actor} забараніў(-ла) гасцей", + "You disallowed guests" : "Вы забаранілі гасцей", + "An administrator disallowed guests" : "Адміністратар забараніў гасцей", + "{actor} set a password" : "{actor} задаў(-ла) пароль", + "You set a password" : "Вы задалі пароль", + "An administrator set a password" : "Адміністратар задаў пароль", + "{actor} removed the password" : "{actor} выдаліў(-ла) пароль", + "You removed the password" : "Вы выдалілі пароль", + "An administrator removed the password" : "Адміністратар выдаліў пароль", + "{actor} added {user}" : "{actor} дадаў(-ла) {user}", + "You joined the conversation" : "Вы далучыліся да размовы", + "{actor} joined the conversation" : "{actor} далучыўся(-лася) да размовы", + "You added {user}" : "Вы дадалі {user}", + "{actor} added you" : "{actor} дадаў(-ла) вас", + "An administrator added you" : "Адміністратар дадаў вас", + "An administrator added {user}" : "Адміністратар дадаў {user}", + "You left the conversation" : "Вы выйшлі з размовы", + "{actor} left the conversation" : "{actor} выйшаў(-ла) з размовы", + "{actor} removed {user}" : "{actor} выдаліў(-ла) {user}", + "You removed {user}" : "Вы выдалілі {user}", + "{actor} removed you" : "{actor} выдаліў(-ла) вас", + "An administrator removed you" : "Адміністратар выдаліў вас", + "An administrator removed {user}" : "Адміністратар выдаліў {user}", + "{actor} invited {federated_user}" : "{actor} запрасіў(-ла) {federated_user}", + "You invited {federated_user}" : "Вы запрасілі {federated_user}", + "You accepted the invitation" : "Вы прынялі запрашэнне", + "{actor} invited you" : "{actor} запрасіў(-ла) вас", + "An administrator invited you" : "Адміністратар запрасіў вас", + "An administrator invited {federated_user}" : "Адміністратар запрасіў {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} прыняў(-ла) запрашэнне", + "{actor} removed {federated_user}" : "{actor} выдаліў(-ла) {federated_user}", + "You removed {federated_user}" : "Вы выдалілі {federated_user}", + "You declined the invitation" : "Вы адхілілі запрашэнне", + "An administrator removed {federated_user}" : "Адміністратар выдаліў {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} адхіліў(-ла) запрашэнне", + "{actor} added group {group}" : "{actor} дадаў(-ла) групу {group}", + "You added group {group}" : "Вы дадалі групу {group}", + "An administrator added group {group}" : "Адміністратар дадаў групу {group}", + "{actor} removed group {group}" : "{actor} выдаліў(-ла) групу {group}", + "You removed group {group}" : "Вы выдалілі групу {group}", + "An administrator removed group {group}" : "Адміністратар выдаліў групу {group}", + "{actor} added team {circle}" : "{actor} дадаў(-ла) каманду {circle}", + "You added team {circle}" : "Вы дадалі каманду {circle}", + "An administrator added team {circle}" : "Адміністратар дадаў каманду {circle}", + "{actor} removed team {circle}" : "{actor} выдаліў(-ла) каманду {circle}", + "You removed team {circle}" : "Вы выдалілі каманду {circle}", + "An administrator removed team {circle}" : "Адміністратар выдаліў каманду {circle}", + "{actor} added {phone}" : "{actor} дадаў(-ла) {phone}", + "You added {phone}" : "Вы дадалі {phone}", + "An administrator added {phone}" : "Адміністратар дадаў {phone}", + "{actor} removed {phone}" : "{actor} выдаліў(-ла) {phone}", + "You removed {phone}" : "Вы выдалілі {phone}", + "An administrator removed {phone}" : "Адміністратар выдаліў {phone}", + "{actor} promoted {user} to moderator" : "{actor} прызначыў(-ла) {user} мадэратарам", + "You promoted {user} to moderator" : "Вы прызначылі {user} мадэратарам", + "{actor} promoted you to moderator" : "{actor} прызначыў(-ла) вас мадэратарам", + "An administrator promoted you to moderator" : "Адміністратар прызначыў вас мадэратарам", + "An administrator promoted {user} to moderator" : "Адміністратар прызначыў {user} мадэратарам", + "{actor} demoted {user} from moderator" : "{actor} пазбавіў(-ла) {user} правоў мадэратара", + "You demoted {user} from moderator" : "Вы пазбавілі {user} правоў мадэратара", + "{actor} demoted you from moderator" : "{actor} пазбавіў(-ла) вас правоў мадэратара", + "An administrator demoted you from moderator" : "Адміністратар пазбавіў вас правоў мадэратара", + "An administrator demoted {user} from moderator" : "Адміністратар пазбавіў {user} правоў мадэратара", + "{actor} shared a file which is no longer available" : "{actor} абагуліў(-ла) файл, які больш недаступны", + "You shared a file which is no longer available" : "Вы абагулілі файл, які больш недаступны", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} наладзіў(-ла) Matterbridge для сінхранізацыі гэтай размовы з іншымі чатамі", + "You set up Matterbridge to synchronize this conversation with other chats" : "Вы наладзілі Matterbridge для сінхранізацыі гэтай размовы з іншымі чатамі", + "{actor} created thread {title}" : "{actor} стварыў(-ла) гутарку {title}", + "You created thread {title}" : "Вы стварылі гутарку {title}", + "{actor} renamed thread {title}" : "{actor} перайменаваў(-ла) гутарку {title}", + "You renamed thread {title}" : "Вы перайменавалі гутарку {title}", + "{actor} updated the Matterbridge configuration" : "{actor} абнавіў(-ла) канфігурацыю Matterbridge", + "You updated the Matterbridge configuration" : "Вы абнавілі канфігурацыю Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} выдаліў(-ла) канфігурацыю Matterbridge", + "You removed the Matterbridge configuration" : "Вы выдалілі канфігурацыю Matterbridge", + "{actor} started Matterbridge" : "{actor} запусціў(-ла) Matterbridge", + "You started Matterbridge" : "Вы запусцілі Matterbridge", + "{actor} stopped Matterbridge" : "{actor} спыніў(-ла) Matterbridge", + "You stopped Matterbridge" : "Вы спынілі Matterbridge", + "{actor} deleted a message" : "{actor} выдаліў(-ла) паведамленне", + "You deleted a message" : "Вы выдалілі паведамленне", + "{actor} edited a message" : "{actor} адрэдагаваў(-ла) паведамленне", + "You edited a message" : "Вы адрэдагавалі паведамленне", + "{actor} pinned a message" : "{actor} замацаваў(-ла) паведамленне", + "You pinned a message" : "Вы замацавалі паведамленне", + "{actor} unpinned a message" : "{actor} адмацаваў(-ла) паведамленне", + "Message was automatically unpinned" : "Паведамленне было аўтаматычна адмацавана", + "You unpinned a message" : "Вы адмацавалі паведамленне", + "{actor} deleted a reaction" : "{actor} выдаліў(-ла) рэакцыю", + "You deleted a reaction" : "Вы выдалілі рэакцыю", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n тыдзень","Вы задалі тэрмін дзеяння паведамленняў на %n тыдні","Вы задалі тэрмін дзеяння паведамленняў на %n тыдняў","Вы задалі тэрмін дзеяння паведамленняў на %n тыдняў"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n дзень","Вы задалі тэрмін дзеяння паведамленняў на %n дні","Вы задалі тэрмін дзеяння паведамленняў на %n дзён","Вы задалі тэрмін дзеяння паведамленняў на %n дзён"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n гадзіну","Вы задалі тэрмін дзеяння паведамленняў на %n гадзіны","Вы задалі тэрмін дзеяння паведамленняў на %n гадзін","Вы задалі тэрмін дзеяння паведамленняў на %n гадзін"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Вы задалі тэрмін дзеяння паведамленняў на %n хвіліну","Вы задалі тэрмін дзеяння паведамленняў на %n хвіліны","Вы задалі тэрмін дзеяння паведамленняў на %n хвілін","Вы задалі тэрмін дзеяння паведамленняў на %n хвілін"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдзень","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдні","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдняў","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n тыдняў"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзень","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дні","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзён","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n дзён"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзіну","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзіны","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзін","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n гадзін"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвіліну","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвіліны","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвілін","{actor} задаў(-ла) тэрмін дзеяння паведамленняў на %n хвілін"], + "{actor} disabled message expiration" : "{actor} адключыў(-ла) тэрмін дзеяння паведамленняў", + "You disabled message expiration" : "Вы адключылі тэрмін дзеяння паведамленняў", + "{actor} cleared the history of the conversation" : "{actor} ачысціў(-ла) гісторыю размовы", + "You cleared the history of the conversation" : "Вы ачысцілі гісторыю размовы", + "{actor} set the conversation picture" : "{actor} задаў(-ла) аватар размовы", + "You set the conversation picture" : "Вы задалі аватар размовы", + "{actor} removed the conversation picture" : "{actor} выдаліў(-ла) аватар размовы", + "You removed the conversation picture" : "Вы выдалілі аватар размовы", + "{actor} ended the poll {poll}" : "{actor} завяршыў(-ла) апытанне {poll}", + "You ended the poll {poll}" : "Вы завяршылі апытанне {poll}", + "{actor} started the video recording" : "{actor} пачаў(-ла) відэазапіс", + "You started the video recording" : "Вы пачалі відэазапіс", + "{actor} stopped the video recording" : "{actor} спыніў(-ла) відэазапіс", + "You stopped the video recording" : "Вы спынілі відэазапіс", + "{actor} started the audio recording" : "{actor} пачаў(-ла) аўдыязапіс", + "You started the audio recording" : "Вы пачалі аўдыязапіс", + "{actor} stopped the audio recording" : "{actor} спыніў(-ла) аўдыязапіс", + "You stopped the audio recording" : "Вы спынілі аўдыязапіс", + "The recording failed" : "Запіс не атрымаўся", + "Someone voted on the poll {poll}" : "Хтосьці прагаласаваў у апытанні {poll}", + "Message deleted by author" : "Паведамленне выдалена аўтарам", + "Message deleted by {actor}" : "Паведамленне выдалена карыстальнікам {actor}", + "Message deleted by you" : "Вы выдалілі паведамленне", + "Deleted user" : "Выдалены карыстальнік", + "Unknown number" : "Невядомы нумар", + "Administration" : "Адміністратар", + "System" : "Сістэма", + "%s (guest)" : "%s (госць)", + "Missed call" : "Прапушчаны выклік", + "Call ended (Duration {duration})" : "Выклік завершаны (працягласць {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завяршыў(-ла) выклік (працягласць {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Выклік з %n госцем завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})","Выклік з %n гасцямі завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Выклік з %n госцем завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})","Выклік з %n гасцямі завершаны (працягласць {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} завяршыў(-ла) выклік з %n госцем (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})","{actor} завяршыў(-ла) выклік з %n гасцямі (працягласць {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1} ended (Duration {duration})" : "Выклік з {user1} завершаны (працягласць {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1} (працягласць {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1} і {user2} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Выклік з {user1} і {user2} завершаны (працягласць {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1} і {user2} (працягласць {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2} і {user3} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Выклік з {user1}, {user2} і {user3} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2} і {user3} (працягласць {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2}, {user3} і {user4} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Выклік з {user1}, {user2}, {user3} і {user4} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2}, {user3} і {user4} (працягласць {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Выклік з {user1}, {user2}, {user3}, {user4} і {user5} завершаны, бо дасягнуў максімальнай працягласці (працягласць {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Выклік з {user1}, {user2}, {user3}, {user4} і {user5} завершаны (працягласць {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завяршыў(-ла) выклік з {user1}, {user2}, {user3}, {user4} і {user5} (працягласць {duration})", + "Message of {user} in {conversation}" : "Паведамленне карыстальніка {user} у {conversation}", + "Message of {user}" : "Паведамленне карыстальніка {user}", + "Message of a deleted user in {conversation}" : "Паведамленне выдаленага карыстальніка ў {conversation}", + "Talk conversations" : "Размовы ў Talk", + "An error occurred. Please contact your administrator." : "Узнікла памылка. Звярніцеся да адміністратара.", + "App disabled" : "Праграма адключана", + "Storage quota exceeded" : "Квота сховішча перавышана", + "File not found" : "Файл не знойдзены", + "File is not shared, or shared but not with the user" : "Файл не абагулены, або абагулены, але не з карыстальнікам", + "No account available to delete." : "Няма ўліковых запісаў для выдалення.", + "Poll" : "Апытанне", + "Password needs to be set" : "Неабходна задаць пароль", + "Uploading the file failed" : "Не ўдалося запампаваць файл", + "File is too big" : "Файл занадта вялікі", + "Invalid file provided" : "Прапанаваны файл некарэктны", + "Invalid image" : "Памылковы відарыс", + "Unknown filetype" : "Невядомы тып файла", + "Talk mentions" : "Згадкі ў Talk", + "More conversations" : "Больш размоў", + "Say hi to your friends and colleagues!" : "Прывітайцеся з сябрамі і калегамі!", + "No unread mentions" : "Няма непрачытаных згадак", + "Call in progress" : "Выконваецца выклік", + "You were mentioned" : "Вас згадалі", + "Write to conversation" : "Напісаць у размову", + "Writes event information into a conversation of your choice" : "Адпраўляе інфармацыю пра падзею ў выбраную вамі размову", + "%1$s invited you to conversation \"%2$s\"." : "%1$s запрасіў(-ла) вас у размову \"%2$s\".", + "You were invited to conversation \"%s\"." : "Вас запрасілі ў размову \"%s\".", + "Conversation invitation" : "Запрашэнне ў размову", + "Scheduled time" : "Запланаваны час", + "Description" : "Апісанне", + "Meeting ID" : "Ідэнтыфікатар сустрэчы", + "Your PIN" : "Ваш PIN-код", + "Click the button below to join the lobby now." : "Націсніце на кнопку, каб далучыцца да лобі зараз.", + "Click the link below to join the lobby now." : "Націсніце на спасылку, каб далучыцца да лобі зараз.", + "Join lobby for \"%s\"" : "Далучыцца да лобі \"%s\"", + "Click the button below to join the conversation now." : "Націсніце на кнопку, каб далучыцца да размовы зараз.", + "Click the link below to join the conversation now." : "Націсніце на спасылку, каб далучыцца да размовы зараз.", + "Join \"%s\"" : "Далучыцца да \"%s\"", + "Meeting" : "Сустрэча", + "Password request: %s" : "Запыт пароля: %s", + "Private conversation" : "Прыватная размова", + "Deleted user (%s)" : "Выдалены карыстальнік (%s)", + "Failed to upload call recording" : "Не ўдалося запампаваць запіс выкліку", + "Share to chat" : "Абагуіць у чаце", + "Dismiss notification" : "Адхіліць апавяшчэнне", + "Call recording now available" : "Цяпер даступны запіс выклікаў", + "The recording for the call in {call} was uploaded to {file}." : "Запіс выкліку ў {call} запампаваны ў {file}.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} запрасіў(-ла) вас далучыцца да {roomName} на {remoteServer}", + "Accept" : "Прыняць", + "Decline" : "Адхіліць", + "Someone reacted" : "Хтосьці адрэагаваў", + "New message" : "Новае паведамленне", + "Reminder" : "Напамін", + "Someone mentioned you" : "Хтосьці згадаў вас", + "Notification" : "Апавяшчэнне", + "Someone reacted in a private conversation" : "Хтосьці адрэагаваў у прыватнай размове", + "You received a message in a private conversation" : "Вы атрымалі паведамленне ў прыватнай размове", + "Reminder in a private conversation" : "Напамін у прыватнай размове", + "Someone mentioned you in a private conversation" : "Хтосьці згадаў вас у прыватнай размове", + "Notification in a private conversation" : "Апавяшчэнне ў прыватнай размове", + "Reminder: You in {call}" : "Напамін: вы ў {call}", + "Reminder: {user} in {call}" : "Напамін: {user} у {call}", + "Reminder: Deleted user in {call}" : "Напамін: выдалены карыстальнік у {call}", + "Reminder: {guest} (guest) in {call}" : "Напамін: {guest} (госць) у {call}", + "Reminder: Guest in {call}" : "Напамін: госць у {call}", + "{user} reacted with {reaction}" : "{user} адрэагаваў(-ла) з {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} адрэагаваў(-ла) з {reaction} у {call}", + "Deleted user reacted with {reaction} in {call}" : "Выдалены карыстальнік адрэагаваў з {reaction} у {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (госць) адрэагаваў(-ла) з {reaction} у {call}", + "Guest reacted with {reaction} in {call}" : "Госць адрэагаваў з {reaction} у {call}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Выдалены карыстальнік у {call}", + "{guest} (guest) in {call}" : "{guest} (госць) у {call}", + "Guest in {call}" : "Госць у {call}", + "{user} sent you a private message" : "{user} адправіў(-ла) вам прыватнае паведамленне", + "{user} sent a message in conversation {call}" : "{user} адправіў(-ла) паведамленне ў размове {call}", + "A deleted user sent a message in conversation {call}" : "Выдалены карыстальнік адправіў паведамленне ў размове {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (госць) адправіў(-ла) паведамленне ў размове {call}", + "A guest sent a message in conversation {call}" : "Гось адправіў паведамленне ў размове {call}", + "{user} replied to your private message" : "{user} адказаў(-ла) на ваша прыватнае паведамленне", + "{user} replied to your message in conversation {call}" : "{user} адказаў(-ла) на ваша паведамленне ў размове {call}", + "A deleted user replied to your message in conversation {call}" : "Выдалены карыстальнік адказаў на ваша паведамленне ў размове {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (госць) адказаў(-ла) на ваша паведамленне ў размове {call}", + "A guest replied to your message in conversation {call}" : "Госць адказаў на ваша паведамленне ў размове {call}", + "Reminder: You in private conversation {call}" : "Напамін: вы ў прыватнай размове {call}", + "Reminder: A deleted user in private conversation {call}" : "Напамін: выдалены карыстальнік у прыватнай размове {call}", + "Reminder: {user} in private conversation" : "Напамін: {user} у прыватнай размове", + "Reminder: You in conversation {call}" : "Напамін: вы ў размове {call}", + "Reminder: {user} in conversation {call}" : "Напамін: {user} у размове {call}", + "Reminder: A deleted user in conversation {call}" : "Напамін: выдалены карыстальнік у размове {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Напамін: {guest} (госць) у размове {call}", + "Reminder: A guest in conversation {call}" : "Напамін: госць у размове {call}", + "{user} reacted with {reaction} to your private message" : "{user} адрэагаваў(-ла) з {reaction} на ваша прыватане паведамленне", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} адрэагаваў(-ла) з {reaction} на ваша паведамленне ў размове {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Выдалены карыстальнік адрэагаваў з {reaction} на ваша паведамленне ў размове {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (госць) адрэагаваў(-ла) з {reaction} на ваша паведамленне ў размове {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Госць адрэагаваў з {reaction} на ваша паведамленне ў размове {call}", + "{user} mentioned you in a private conversation" : "{user} згадаў(-ла) вас у прыватнай размове", + "{user} mentioned group {group} in conversation {call}" : "{user} згадаў(-ла) групу {group} у размове {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} згадаў(-ла) каманду {team} у размове {call}", + "{user} mentioned everyone in conversation {call}" : "{user} згадаў(-ла) усіх у размове {call}", + "{user} mentioned you in conversation {call}" : "{user} згадаў(-ла) вас у размове {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Выдалены карыстальнік згадаў групу {group} у размове {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Выдалены карыстальнік згадаў каманду {team} у размове {call}", + "A deleted user mentioned everyone in conversation {call}" : "Выдалены карыстальнік згадаў усіх у размове {call}", + "A deleted user mentioned you in conversation {call}" : "Выдалены карыстальнік згадаў вас у размове {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (госць) згадаў(-ла) групу {group} у размове {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (госць) згадаў(-ла) каманду {team} у размове {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (госць) згадаў(-ла) усіх у размове {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (госць) згадаў(-ла) вас у размове {call}", + "A guest mentioned group {group} in conversation {call}" : "Госць згадаў групу {group} у размове {call}", + "A guest mentioned team {team} in conversation {call}" : "Госць згадаў каманду {team} у размове {call}", + "A guest mentioned everyone in conversation {call}" : "Госць згадаў усіх у размове {call}", + "A guest mentioned you in conversation {call}" : "Госць згадаў вас у размове {call}", + "View message" : "Праглядзець паведамленне", + "Dismiss reminder" : "Адхіліць напамін", + "View chat" : "Праглядзець чат", + "{user} invited you to a group conversation: {call}" : "{user} запрасіў(-ла) вас у групавую размову: {call}", + "Join call" : "Далучыцца да выкліку", + "Answer call" : "Адказаць на выклік", + "{user} would like to talk with you" : "{user} хоча пагаварыць з вамі", + "You missed a call from {user}" : "Вы прапусцілі выклік ад {user}", + "Accept call" : "Прыняць выклік", + "Incoming phone call from {call}" : "Уваходны тэлефонны выклік ад {call}", + "You missed a phone call from {call}" : "Вы прапусцілі тэлефонны выклік ад {call}", + "A group call has started in {call}" : "Групавы выклік пачаўся ў {call}", + "You missed a group call in {call}" : "Вы прапусцілі групавы выклік у {call}", + "{email} is requesting the password to access {file}" : "{email} запытвае пароль для доступу да {file}", + "{email} tried to request the password to access {file}" : "{email} паспрабаваў(-ла) запытаць пароль для доступу да {file}", + "Someone is requesting the password to access {file}" : "Хтосьці запытвае пароль для доступу да {file}", + "Someone tried to request the password to access {file}" : "Хтосьці паспрабаваў запытаць пароль для доступу да {file}", + "Open settings" : "Адкрыць налады", + "pending" : "у чаканні", + "active" : "актыўны", + "expired" : "скончыўся тэрмін дзеяння", + "blocked" : "заблакіраваны", + "error" : "памылка", + "The certificate of {host} expires in {days} days" : "Тэрмін дзеяння сертыфіката {host} заканчваецца праз {days} дзён", + "The certificate of {host} expired" : "Тэрмін дзеяння сертыфіката {host} скончыўся", + "Open Talk" : "Адкрыць Talk", + "Default" : "Прадвызначаныя", + "Webinar" : "Вэбінар", + "Conversations" : "Размовы", + "Messages in current conversation" : "Паведамленні ў бягучай размове", + "{user}" : "{user}", + "Messages" : "Паведамленні", + "{user} in {conversation}" : "{user} у {conversation}", + "Messages in other conversations" : "Паведамленні ў іншых размовах", + "Invalid emoji character" : "Памылковы сімвал эмодзі", + "Invalid background color" : "Памылковы колер фону", + "Avatar image is not square" : "Відарыс аватара не квадратны", + "Room {number}" : "Пакой {number}", + "Other" : "Іншае", + "Something unexpected happened." : "Здарылася нешта нечаканае.", + "An HTTPS URL is required." : "Патрабуецца URL-адрас HTTPS.", + "The language is invalid." : "Мова памылковая.", + "Too many requests are send from your servers address. Please try again later." : "З вашага адраса сервера адпраўлена занадта шмат запытаў. Паспрабуйце яшчэ раз пазней.", + "Something unexpected happened. Please try again later." : "Здарылася нешта нечаканае. Паўтарыце спробу пазней.", + "There is no such account registered." : "Такі ўліковы запіс не зарэгістраваны.", + "Note to self" : "Асабістыя нататкі", + "A place for your private notes, thoughts and ideas" : "Месца для вашых прыватных нататак, думак і ідэй", + "Let's get started!" : "Пачнем!", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Вітаем у Nextcloud Talk\n\nNextcloud Talk — гэта прыватны і магутны месенджар, які інтэгруецца з Nextcloud. Удзельнічайце ў прыватных або групавых размовах, супрацоўнічайце праз галасавыя і відэазванкі, арганізуйце вэбінары і мерапрыемствы, наладжвайце свае размовы і многае іншае.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Вы можаце адказваць на паведамленні, перасылаць іх у іншыя чаты і людзям або капіяваць змесціва паведамленняў.", + "Andorra" : "Андора", + "United Arab Emirates" : "Аб'яднаныя Арабскія Эміраты", + "Afghanistan" : "Афганістан", + "Antigua and Barbuda" : "Антыгуа і Барбуда", + "Anguilla" : "Ангілья", + "Albania" : "Албанія", + "Armenia" : "Арменія", + "Angola" : "Ангола", + "Antarctica" : "Антарктыка", + "Argentina" : "Аргенціна", + "American Samoa" : "Амерыканскае Самоа", + "Austria" : "Аўстрыя", + "Australia" : "Аўстралія", + "Aruba" : "Аруба", + "Åland Islands" : "Аландскія астравы", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Боснія і Герцагавіна", + "Barbados" : "Барбадас", + "Bangladesh" : "Бангладэш", + "Belgium" : "Бельгія", + "Burkina Faso" : "Буркіна-Фасо", + "Bulgaria" : "Балгарыя", + "Bahrain" : "Бахрэйн", + "Burundi" : "Бурундзі", + "Benin" : "Бенін", + "Saint Barthélemy" : "Сен-Бартэльмі", + "Bermuda" : "Бермудскія астравы", + "Brunei Darussalam" : "Бруней-Дарусалам", + "Bolivia, Plurinational State of" : "Балівія, Шматнацыянальная Дзяржава", + "Bonaire, Sint Eustatius and Saba" : "Банайрэ, Сінт-Эстаціус і Саба", + "Brazil" : "Бразілія", + "Bahamas" : "Багамскія астравы", + "Bhutan" : "Бутан", + "Bouvet Island" : "Востраў Бувэ", + "Botswana" : "Батсвана", + "Belarus" : "Беларусь", + "Belize" : "Беліз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Какосавыя (Кілінг) астравы", + "Congo, the Democratic Republic of the" : "Дэмакратычная Рэспубліка Конга", + "Central African Republic" : "Цэнтральна-Афрыканская Рэспубліка", + "Congo" : "Конга", + "Switzerland" : "Швейцарыя", + "Côte d'Ivoire" : "Кот-д'Івуар", + "Cook Islands" : "Астравы Кука", + "Chile" : "Чылі", + "Cameroon" : "Камерун", + "China" : "Кітай", + "Colombia" : "Калумбія", + "Costa Rica" : "Коста-Рыка", + "Cuba" : "Куба", + "Cabo Verde" : "Каба-Вердэ", + "Curaçao" : "Кюрасаа", + "Christmas Island" : "Востраў Каляд", + "Cyprus" : "Кіпр", + "Czechia" : "Чэхія", + "Germany" : "Германія", + "Djibouti" : "Джыбуці", + "Denmark" : "Данія", + "Dominica" : "Дамініка", + "Dominican Republic" : "Дамініканская Рэспубліка", + "Algeria" : "Алжыр", + "Ecuador" : "Эквадор", + "Estonia" : "Эстонія", + "Egypt" : "Егіпет", + "Western Sahara" : "Заходняя Сахара", + "Eritrea" : "Эрытрэя", + "Spain" : "Іспанія", + "Ethiopia" : "Эфіопія", + "Finland" : "Фінляндыя", + "Fiji" : "Фіджы", + "Falkland Islands (Malvinas)" : "Фалклендскія (Мальвінскія) астравы", + "Micronesia, Federated States of" : "Мікранезія, Федэратыўныя Штаты", + "Faroe Islands" : "Фарэрскія астравы", + "France" : "Францыя", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Злучанае Каралеўства Вялікабрытаніі і Паўночнай Ірландыі", + "Grenada" : "Грэнада", + "Georgia" : "Грузія", + "French Guiana" : "Французская Гвіяна", + "Guernsey" : "Гернсі", + "Ghana" : "Гана", + "Gibraltar" : "Гібралтар", + "Greenland" : "Грэнландыя", + "Gambia" : "Гамбія", + "Guinea" : "Гвінея", + "Guadeloupe" : "Гвадэлупа", + "Equatorial Guinea" : "Экватарыяльная Гвінея", + "Greece" : "Грэцыя", + "South Georgia and the South Sandwich Islands" : "Паўднёвая Георгія і Паўднёвыя Сандвічавы астравы", + "Guatemala" : "Гватэмала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвінея-Бісау", + "Guyana" : "Гаяна", + "Hong Kong" : "Ганконг", + "Heard Island and McDonald Islands" : "Астравы Херд і Макдональд", + "Honduras" : "Гандурас", + "Croatia" : "Харватыя", + "Haiti" : "Гаіці", + "Hungary" : "Венгрыя", + "Indonesia" : "Інданезія", + "Ireland" : "Ірландыя", + "Israel" : "Ізраіль", + "Isle of Man" : "Востраў Мэн", + "India" : "Індыя", + "British Indian Ocean Territory" : "Брытанская тэрыторыя ў Індыйскім акіяне", + "Iraq" : "Ірак", + "Iran, Islamic Republic of" : "Іран, Ісламская Рэспубліка", + "Iceland" : "Ісландыя", + "Italy" : "Італія", + "Jersey" : "Джэрсі", + "Jamaica" : "Ямайка", + "Jordan" : "Іарданія", + "Japan" : "Японія", + "Kenya" : "Кенія", + "Kyrgyzstan" : "Кыргызстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кірыбаці", + "Comoros" : "Каморскія астравы", + "Saint Kitts and Nevis" : "Сент-Кітс і Невіс", + "Korea, Democratic People's Republic of" : "Карэйская Народна-Дэмакратычная Рэспубліка", + "Korea, Republic of" : "Карэйская Рэспубліка", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманавы астравы", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоская Народна-Дэмакратычная Рэспубліка", + "Lebanon" : "Ліван", + "Saint Lucia" : "Сент-Люсія", + "Liechtenstein" : "Ліхтэнштэйн", + "Sri Lanka" : "Шры-Ланка", + "Liberia" : "Ліберыя", + "Lesotho" : "Лесота", + "Lithuania" : "Літва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвія", + "Libya" : "Лівія", + "Morocco" : "Марока", + "Monaco" : "Манака", + "Moldova, Republic of" : "Малдова, Рэспубліка", + "Montenegro" : "Чарнагорыя", + "Saint Martin (French part)" : "Сен-Мартэн (французская частка)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалавы астравы", + "North Macedonia" : "Паўночная Македонія", + "Mali" : "Малі", + "Myanmar" : "М’янма", + "Mongolia" : "Манголія", + "Macao" : "Макаа", + "Northern Mariana Islands" : "Паўночныя Марыянскія астравы", + "Martinique" : "Марцініка", + "Mauritania" : "Маўрытанія", + "Montserrat" : "Мантсерат", + "Malta" : "Мальта", + "Mauritius" : "Маўрыкій", + "Maldives" : "Мальдывы", + "Malawi" : "Малаві", + "Mexico" : "Мексіка", + "Malaysia" : "Малайзія", + "Mozambique" : "Мазамбік", + "Namibia" : "Намібія", + "New Caledonia" : "Новая Каледонія", + "Niger" : "Нігер", + "Norfolk Island" : "Востраў Норфалк", + "Nigeria" : "Нігерыя", + "Nicaragua" : "Нікарагуа", + "Netherlands" : "Нідэрланды", + "Norway" : "Нарвегія", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ніуэ", + "New Zealand" : "Новая Зеландыя", + "Oman" : "Аман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французская Палінезія", + "Papua New Guinea" : "Папуа-Новая Гвінея", + "Philippines" : "Філіпіны", + "Pakistan" : "Пакістан", + "Poland" : "Польшча", + "Saint Pierre and Miquelon" : "Сен-П’ер і Мікелон", + "Pitcairn" : "Астравы Піткэрн", + "Puerto Rico" : "Пуэрта-Рыка", + "Palestine, State of" : "Палесціна, Дзяржава", + "Portugal" : "Партугалія", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Рэюньён", + "Romania" : "Румынія", + "Serbia" : "Сербія", + "Russian Federation" : "Расійская Федэрацыя", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудаўская Аравія", + "Solomon Islands" : "Саламонавы астравы", + "Seychelles" : "Сейшэльскія астравы", + "Sudan" : "Судан", + "Sweden" : "Швецыя", + "Singapore" : "Сінгапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Астравы святой Алены, Узнясення і Трыстан-да-Кунья", + "Slovenia" : "Славенія", + "Svalbard and Jan Mayen" : "Шпіцберген і Ян-Маен", + "Slovakia" : "Славакія", + "Sierra Leone" : "Сьера-Леонэ", + "San Marino" : "Сан-Марына", + "Senegal" : "Сенегал", + "Somalia" : "Самалі", + "Suriname" : "Сурынам", + "South Sudan" : "Паўднёвы Судан", + "Sao Tome and Principe" : "Сан-Тамэ і Прынсіпі", + "El Salvador" : "Сальвадор", + "Sint Maarten (Dutch part)" : "Сінт-Мартэн (нідэрландская частка)", + "Syrian Arab Republic" : "Сірыйская Арабская Рэспубліка", + "Eswatini" : "Эсваціні", + "Turks and Caicos Islands" : "Астравы Цёркс і Кайкас", + "Chad" : "Чад", + "French Southern Territories" : "Французскія Паўднёвыя Тэрыторыі", + "Togo" : "Тога", + "Thailand" : "Тайланд", + "Tajikistan" : "Таджыкістан", + "Tokelau" : "Такелау", + "Timor-Leste" : "Тымор-Лешці", + "Turkmenistan" : "Туркменістан", + "Tunisia" : "Туніс", + "Tonga" : "Тонга", + "Turkey" : "Турцыя", + "Trinidad and Tobago" : "Трынідад і Табага", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань, правінцыя Кітая", + "Tanzania, United Republic of" : "Танзанія, Аб'яднаная Рэспубліка", + "Ukraine" : "Украіна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малыя Аддаленыя астравы ЗША", + "United States of America" : "Злучаныя Штаты Амерыкі", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекістан", + "Holy See" : "Святы Пасад", + "Saint Vincent and the Grenadines" : "Сент-Вінсент і Грэнадзіны", + "Venezuela, Bolivarian Republic of" : "Венесуэла, Баліварыянская Рэспубліка", + "Virgin Islands, British" : "Віргінскія астравы, Брытанскія", + "Virgin Islands, U.S." : "Віргінскія астравы, ЗША", + "Viet Nam" : "В'етнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоліс і Футуна", + "Samoa" : "Самоа", + "Yemen" : "Емен", + "Mayotte" : "Маёта", + "South Africa" : "Паўднёва-Афрыканская Рэспубліка", + "Zambia" : "Замбія", + "Zimbabwe" : "Зімбабвэ", + "Background blur" : "Размытасць фону", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш вэб-сервер няправільна наладжаны для дастаўкі файлаў `.wasm`. Звычайна гэта праблема канфігурацыі Nginx. Для размытасці фону неабходна ўнесці карэктывы ў канфігурацыю Nginx таксама для дастаўкі файлаў `.wasm`. Параўнайце канфігурацыю Nginx з рэкамендаванай у нашай дакументацыі.", + "Talk configuration values" : "Значэнні канфігурацыі Talk", + "Federation" : "Федэрацыя", + "Error: Cannot connect to server" : "Памылка: немагчыма злучыцца з серверам", + "Error: Server did not respond with proper JSON" : "Памылка: сервер не адказаў правільным JSON", + "Error: Certificate expired" : "Памылка: тэрмін дзеяння сертыфіката скончыўся", + "Could not get version" : "Не ўдалося атрымаць версію", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Памылка: запушчана версія: {version}; неабходна абнавіць сервер для сумяшчальнасці з гэтай версіяй Talk.", + "Error: Server responded with: {error}" : "Памылка: адказ сервера: {error}", + "Error: Unknown error occurred" : "Памылка: Узнікла невядомая памылка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Увага: запушчана версія: {version}; Сервер не падтрымлівае ўсе функцыі гэтай версіі Talk, адсутнічаюць функцыі: {features}", + "SIP configuration" : "Канфігурацыя SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Памылковая дата, дата павінна быць у фармаце ГГГГ-ММ-ДД", + "Conversation not found" : "Размова не знойдзена", + "Path is already shared with this conversation" : "Шлях ужо абагулены ў гэтай размове", + "Chat, video & audio-conferencing using WebRTC" : "Чат, відэа- і аўдыяканферэнцыі з выкарыстаннем WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чат, відэа- і аўдыяканферэнцыі з выкарыстаннем WebRTC\n\n* 💬 **Чат** Nextcloud Talk - гэта просты тэкставы чат, які дазваляе вам абагульваць або запампоўваць файлы з праграмы Файлы Nextcloud або лакальнай прылады і згадваць іншых удзельнікаў..\n* 👥 **Прыватныя, групавыя, публічныя і абароненыя паролем выклікі!** Запрашайце каго-небудзь, усю групу або адпраўляйце публічную спасылку, каб запрасіць на выклік.\n* 🌐 **Федэратыўныя чаты** Чат з іншымі карыстальнікамі Nextcloud на іх серверах\n* 💻 **Абагульванне экрана!** Паказвайце свой экран удзельнікам выкліку.\n* 🚀 **Інтэграцыя з іншымі праграмамі Nextcloud**, такімі як Файлы, Каляндар, Статус карыстальніка, Панэль кіравання, Flow, Карты, Smart picker, Кантакты, Карткі, і многімі іншымі.\n* 🌉 **Сінхранізацыя з іншымі месенджарамі** Дзякуючы інтэграцыі [Matterbridge](https://github.com/42wim/matterbridge/) у Talk, вы можаце лёгка сінхранізаваць мноства іншых месенджараў з Nextcloud Talk і наадварот.", + "Leave call" : "Выйсці з выкліку", + "Stay in call" : "Застацца ў выкліку", + "Error occurred when getting the conversation information" : "Памылка пры атрыманні інфармацыі пра размову", + "Discuss this file" : "Абмеркаваць гэты файл", + "Share this file with others to discuss it" : "Абагульце гэты файл з іншымі, каб абмеркаваць яго", + "Share this file" : "Абагуліць гэты файл", + "Join conversation" : "Далучыцца да размовы", + "The password is wrong. Try again." : "Пароль няправільны. Паспрабуйце яшчэ раз.", + "Password" : "Пароль", + "Submit" : "Адправіць", + "Error requesting the password." : "Памылка пры запыце пароля.", + "Request password" : "Запытаць пароль", + "This conversation has ended" : "Гэтая размова завершана.", + "Error occurred when joining the conversation" : "Памылка пры далучэнні да размовы", + "Close Talk sidebar" : "Закрыць бакавую панэль Talk", + "Open Talk sidebar" : "Адкрыць бакавую панэль Talk", + "Everyone" : "Усе", + "Users and moderators" : "Карыстальнікі і мадэратары", + "Moderators only" : "Толькі мадэратары", + "Disable calls" : "Адключыць выклікі", + "Save changes" : "Захаваць змены", + "Saving …" : "Захаванне …", + "Saved!" : "Захавана!", + "Guests can still join public conversations." : "Госці ўсё яшчэ могуць далучацца да публічных размоў.", + "Limit using Talk" : "Абмежаваць выкарыстанне Talk", + "Limit creating a public and group conversation" : "Абмежаваць стварэнне публічных і групавых размоў", + "Limit creating conversations" : "Абмежаваць стварэнне размоў", + "Limit starting a call" : "Абмежаваць пачатак выкліку", + "Limit starting calls" : "Абмежаваць пачатак выклікаў", + "When a call has started, everyone with access to the conversation can join the call." : "Калі пачаўся выклік, да яго могуць далучыцца ўсе, хто мае доступ да размовы.", + "Enabled" : "Уключаны", + "Disabled" : "Адключаны", + "Bots settings" : "Налады ботаў", + "State" : "Статус", + "Name" : "Назва", + "Last error" : "Апошняя памылка", + "Total errors count" : "Усяго памылак", + "Find more bots" : "Знайсці больш ботаў", + "Beta" : "Бэта", + "Permissions" : "Дазволы", + "Select groups …" : "Выберыце групы …", + "All messages" : "Усе паведамленні", + "@-mentions only" : "Толькі згадкі з @", + "Off" : "Выкл.", + "General settings" : "Агульныя налады", + "Default notification settings" : "Прадвызначаныя налады апавяшчэнняў", + "Integration into other apps" : "Інтэграцыя ў іншыя праграмы", + "End-to-end encrypted calls" : "Скразное шыфраванне выклікаў", + "Enable encryption" : "Уключыць шыфраванне", + "Pending" : "У чаканні", + "Error" : "Памылка", + "Blocked" : "Заблакіраваны", + "Active" : "Актыўны", + "Expired" : "Скончыўся тэрмін дзеяння", + "Never" : "Ніколі", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Калі ваш высокапрадукцыйны бэкэнд уключае функцыянальнасць STUN і/або TURN, налады будуць абноўлены адпаведна.", + "Language" : "Мова", + "Country" : "Краіна", + "Status" : "Статус", + "Created at" : "Створана", + "STUN included" : "STUN уключаны", + "Yes" : "Так", + "No" : "Не", + "_%n user_::_%n users_" : ["%n карыстальнік","%n карыстальнікі","%n карыстальнікаў","%n карыстальнікаў"], + "Installed version: {version}" : "Усталяваная версія: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Вы можаце ўсталяваць Matterbridge, каб звязаць NextCloud Talk з некаторымі іншымі сэрвісамі. Наведайце іх {linkstart1}старонку на GitHub{linkend} для больш падрабязнай інфармацыі. Загрузка і ўсталяванне праграмы можа заняць некаторы час. У выпадку перавышэння часу чакання усталюйце яго ўручную з {linkstart2}NextCloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Бінарны файл Matterbridge мае няправільныя правы доступу. Пераканайцеся, што бінарны файл Matterbridge належыць патрэбнаму карыстальніку і можа быць выкананы. Яго можна знайсці ў \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Бінарны файл Matterbridge не знойдзены або не можа быць выкананы.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Вы таксама можаце ўручную задаць шлях да бінарнага файла Matterbridge праз канфігурацыю. Больш падрабязную інфармацыю глядзіце ў {linkstart}дакументацыі па інтэграцыі Matterbridge{linkend}.", + "Downloading …" : "Спампоўванне …", + "Install Talk Matterbridge" : "Усталяваць Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Падчас усталявання праграмы Matterbridge адбылася памылка", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Падчас усталявання Talk Matterbridge адбылася памылка. Усталюйце яго ўручную.", + "Failed to execute Matterbridge binary." : "Не атрымалася выканаць двайковы файл Matterbridge.", + "Matterbridge integration" : "Інтэграцыя з Matterbridge", + "Enable Matterbridge integration" : "Уключыць інтэграцыю з Matterbridge", + "Status: Checking connection" : "Стан: праверка злучэння", + "OK: Running version: {version}" : "ОК: запушчаная версія: {version}", + "Validate SSL certificate" : "Праверыць SSL-сертыфікат", + "Delete this server" : "Выдаліць гэты сервер", + "Recording consent" : "Згода на запіс", + "Available features" : "Даступныя функцыі", + "Error code" : "Код памылкі", + "Error message" : "Паведамленне пра памылку", + "High-performance backend URL" : "URL-адрас высокапрадукцыйнага бэкенда", + "Nextcloud Talk setup not complete" : "Наладка Nextcloud Talk не завершана", + "Nextcloud portal" : "Партал Nextcloud", + "Quick installation guide" : "Кароткае кіраўніцтва па ўсталяванні", + "STUN server URL" : "URL-адрас STUN-сервера", + "STUN settings saved" : "Налады STUN захаваны", + "STUN servers" : "STUN-серверы", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-сервер выкарыстоўваецца для вызначэння публічнага IP-адраса ўдзельнікаў, якія знаходзяцца за маршрутызатарам.", + "Add a new STUN server" : "Дадаць новы STUN-сервер", + "{option1} and {option2}" : "{option1} і {option2}", + "{option} only" : "Толькі {option}", + "Failed" : "Не ўдалося", + "OK" : "OK", + "Checking …" : "Праверка …", + "Federated user" : "Федэратыўны карыстальнік", + "Configure breakout rooms" : "Наладзіць групавыя пакоі", + "Number of breakout rooms" : "Колькасць групавых пакояў", + "You can create from 1 to 20 breakout rooms." : "Вы можаце стварыць ад 1 да 20 групавых пакояў.", + "Confirm" : "Пацвердзіць", + "Create breakout rooms" : "Стварыць групавыя пакоі", + "Reset" : "Скінуць", + "Delete breakout rooms" : "Выдаліць групавыя пакоі", + "Room {roomNumber}" : "Пакой {roomNumber}", + "Current breakout rooms and settings will be lost" : "Бягучыя групавыя пакоі і налады будуць страчаны", + "Cancel" : "Скасаваць", + "Back" : "Назад", + "Add participant \"{user}\"" : "Дадаць удзельніка \"{user}\"", + "Now" : "Зараз", + "Unknown error occurred" : "Узнікла невядомая памылка", + "{participant0} will receive an invitation" : "{participant0} атрымае запрашэнне", + "{participant0} and {participant1} will receive invitations" : "{participant0} і {participant1} атрымаюць запрашэнні", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні","{participant0}, {participant1} і яшчэ %n атрымаюць запрашэнні"], + "Invite {user}" : "Запрасіць {user}", + "Meeting created" : "Сустрэча створана", + "Upcoming meetings" : "Будучыя сустрэчы", + "Loading …" : "Загрузка …", + "No upcoming meetings" : "Няма будучых сустрэч", + "Schedule a meeting" : "Запланаваць сустрэчу", + "Meeting title" : "Загаловак сустрэчы", + "From" : "З", + "To" : "Да", + "Calendar" : "Каляндар", + "Attendees" : "Удзельнікі", + "No other participants to send invitations to." : "Больш няма удзельнікаў, якім можна было б адправіць запрашэнні.", + "Add attendees" : "Дадаць удзельнікаў", + "Save" : "Захаваць", + "Search participants" : "Пошук удзельнікаў", + "No results" : "Няма вынікаў", + "Done" : "Гатова", + "Original language: {languageName}" : "Арыгінальная мова: {languageName}", + "Translated language" : "Мова перакладу", + "Translated language: {languageName}" : "Мова перакладу: {languageName}", + "Raise hand" : "Падняць руку", + "Raise hand (R)" : "Падняць руку (R)", + "Lower hand" : "Апусціць руку", + "Lower hand (R)" : "Апусціць руку (R)", + "Exit full screen (F)" : "Выйсці з поўнаэкраннага рэжыму (F)", + "Full screen (F)" : "На ўвесь экран (F)", + "Recording consent is required" : "Патрабуецца згода на запіс", + "This conversation is read-only" : "Размова у рэжыме \"толькі для чытання\"", + "Conversation not found or not joined" : "Размова не знойдзена або вы да яе не далучыліся", + "Lobby is still active and you're not a moderator" : "Лобі ўсё яшчэ актыўнае, і вы не мадэратар", + "Connection failed" : "Не ўдалося злучыцца", + "Reload" : "Перазагрузіць", + "{nickName} raised their hand." : "{nickName} падняў(-ла) руку", + "A participant raised their hand." : "Удзельнікаў падняў руку.", + "Collapse stripe" : "Згарнуць паласу", + "Expand stripe" : "Разгарнуць паласу", + "Previous page of videos" : "Папярэдняя старонка відэа", + "Next page of videos" : "Наступная старонка відэа", + "Connecting …" : "Злучэнне …", + "Calling …" : "Выклік …", + "You can invite others in the participant tab of the sidebar" : "Вы можаце запрасіць іншых на ўкладцы ўдзельнікаў на бакавой панэлі", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Вы можаце запрасіць іншых на ўкладцы ўдзельнікаў на бакавой панэлі або абагуліўшы гэту спасылку!", + "Share this link to invite others!" : "Абагульце гэту спасылку, каб запрасіць іншых!", + "Copy link" : "Скапіяваць спасылку", + "You are not allowed to enable audio" : "Вам не дазволена ўключаць гук", + "No audio. Click to select device" : "Няма гуку. Націсніце, каб выбраць прыладу", + "Mute audio" : "Адключыць гук", + "Mute audio (M)" : "Адключыць гук (M)", + "Unmute audio" : "Уключыць гук", + "Unmute audio (M)" : "Уключыць гук (M)", + "None" : "Няма", + "Select a microphone" : "Выберыце мікрафон", + "Select a speaker" : "Выберыце дынамік", + "Microphone settings" : "Налады мікрафона", + "Check devices" : "Праверыць прылады", + "Access to camera was denied" : "Доступ да камеры забаронены", + "Error while accessing camera: It is likely in use by another program" : "Памылка доступу да камеры: верагодна, яна выкарыстоўваецца іншай праграмай", + "Error while accessing camera" : "Памылка доступу да камеры", + "You have been muted by a moderator" : "Мадэратар адключыў вам мікрафон", + "Hide presenter video" : "Схаваць відэа дакладчыка", + "You are not allowed to enable video" : "Вам не дазволена ўключаць відэа", + "No video. Click to select device" : "Няма відэа. Націсніце, каб выбраць прыладу", + "Disable video" : "Адключыць відэа", + "Disable video (V)" : "Адключыць відэа (V)", + "Enable video" : "Уключыць відэа", + "Enable video (V)" : "Уключыць відэа (V)", + "Select a video device" : "Выберыце відэапрыладу", + "Show presenter" : "Паказаць дакладчыка", + "You" : "Вы", + "Mute" : "Адключыць гук", + "Muted" : "Адключаны гук", + "Show screen" : "Паказаць экран", + "Connection could not be established …" : "Не ўдалося ўсталяваць злучэнне...", + "Connection was lost and could not be re-established …" : "Злучэнне было страчана і не можа быць адноўлена…", + "Connection could not be established. Trying again …" : "Не ўдалося ўсталяваць злучэнне. Паўторная спроба…", + "Connection lost. Trying to reconnect …" : "Злучэнне страчана. Спроба аднавіць злучэнне…", + "Connection problems …" : "Праблемы са злучэннем…", + "Collapse" : "Згарнуць", + "Expand" : "Разгарнуць", + "You need to be logged in to upload files" : "Каб запампоўваць файлы, вам трэба ўвайсці ў сістэму", + "Drop your files to upload" : "Перацягніце файлы для запампоўвання", + "Conversation messages" : "Паведамленні ў размове", + "Scroll to bottom" : "Прагартаць уніз", + "Post message" : "Апублікаваць паведамленне", + "Federated conversation" : "Федэратыўная размова", + "Public conversation" : "Публічная размова", + "Favorite" : "Абранае", + "Banned users" : "Заблакіраваныя карыстальнікі", + "Manage the list of banned users in this conversation." : "Кіраванне спісам заблакіраваных карыстальнікаў у гэтай размове.", + "Manage bans" : "Кіраванне блакіроўкамі", + "No banned users" : "Няма заблакіраваных карыстальнікаў", + "Banned by:" : "Заблакіраваны карыстальнікам:", + "Date:" : "Дата:", + "Note:" : "Заўвага:", + "Hide details" : "Схаваць падрабязнасці", + "Show details" : "Паказаць падрабязнасці", + "Unban" : "Разблакіраваць", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Вы можаце змяніць назву і апісанне ў {linkstart}Календары ↗{linkend}.", + "Error while updating conversation name" : "Памылка пры абнаўленні назвы размовы", + "Error while updating conversation description" : "Памылка пры абнаўленні апісання размовы", + "Enter a name for this conversation" : "Увядзіце назву для гэтай размовы", + "Edit conversation name" : "Рэдагаваць назву размовы", + "Edit conversation description" : "Рэдагаваць апісанне размовы", + "Enter a description for this conversation" : "Увядзіце апісанне гэтай размовы", + "Picture" : "Аватар", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У гэтай размове можна ўключыць наступных ботаў. Звярніцеся да адміністратара, каб усталяваць больш ботаў на серверы.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На гэтым серверы не ўсталяваны боты. Звярніцеся да адміністратара, каб усталяваць ботаў.", + "Disable" : "Адключыць", + "Enable" : "Уключыць", + "Breakout rooms" : "Групавыя пакоі", + "Manage breakout rooms" : "Кіраваць групавымі пакоямі", + "Set up breakout rooms for this conversation" : "Задаць групавыя пакоі для гэтай размовы", + "Choose your conversation picture" : "Выберыце аватар размовы", + "Choose" : "Выбраць", + "Error setting conversation picture" : "Памылка задання аватара размовы", + "Could not set the conversation picture: {error}" : "Не ўдалося задаць аватар размовы: {error}", + "Error cropping conversation picture" : "Памылка абрэзкі аватара размовы", + "Error removing conversation picture" : "Памылка выдалення аватара размовы", + "Set emoji as conversation picture" : "Задаць эмодзі ў якасці аватара размовы", + "Set background color for conversation picture" : "Задаць фонавы колер для аватара размовы", + "Upload conversation picture" : "Запампаваць аватар размовы", + "Choose conversation picture from files" : "Выбраць аватар размовы з Файлаў", + "Remove conversation picture" : "Выдаліць аватар размовы", + "The file must be a PNG or JPG" : "Файл павінен быць у фармаце PNG або JPG", + "Set picture" : "Задаць аватар", + "Default permissions modified for {conversationName}" : "Зменены прадвызначаныя дазволы для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не ўдалося змяніць прадвызначаныя дазволы для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Рэдагаваць прадвызначаныя дазволы для ўдзельнікаў гэтай размовы. Гэтыя налады не ўплываюць на мадэратараў.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Пасля кожнай змены дазволаў у гэтым раздзеле карыстальніцкія дазволы, раней прызначаныя асобным удзельнікам, будуць страчаны.", + "All permissions" : "Усе дазволы", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Удзельнікі маюць дазвол пачынаць выклік, далучацца да выкліку, уключаць аўдыя і відэа, а таксама паказваць экран.", + "Restricted" : "Абмежавана", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Удзельнікі могуць далучацца да выклікаў, але не могуць уключаць аўдыя, відэа і паказваць экран, пакуль мадэратар не дасць ім дазволы ўручную.", + "Advanced permissions" : "Пашыраныя дазволы", + "Edit permissions" : "Рэдагаваць дазволы", + "Conversation settings" : "Налады размовы", + "Basic Info" : "Асноўныя звесткі", + "Personal" : "Асабістыя", + "Moderation" : "Мадэрацыя", + "Breakout Rooms" : "Групавыя пакоі", + "Matterbridge" : "Matterbridge", + "Bots" : "Боты", + "Danger zone" : "Небяспечная зона", + "Archive conversation" : "Архіваваць размову", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архіваваныя размовы прадвызначна схаваныя ў спісе размоў. Аднак яны ўсё роўна будуць адлюстроўвацца, калі вы будзеце шукаць па назве размовы або адкрываць спіс архіваваных размоў.", + "Do you really want to leave \"{displayName}\"?" : "Вы сапраўды хочаце выйсці з \"{displayName}\"?", + "You can archive this conversation instead." : "Замест гэтага вы можаце архіваваць гэтую размову.", + "Leave conversation" : "Выйсці з размовы", + "You need to promote a new moderator before you can leave the conversation" : "Перш чым пакінуць размову, вам трэба прызначыць новага мадэратара", + "Delete conversation" : "Выдаліць размову", + "Do you really want to delete \"{displayName}\"?" : "Вы сапраўды хочаце выдаліць \"{displayName}\"?", + "Error while deleting conversation" : "Памылка пры выдаленні размовы", + "Delete all chat messages" : "Выдаліць усе паведамленні ў чаце", + "Do you really want to delete all messages in \"{displayName}\"?" : "Вы сапраўды хочаце выдаліць усе паведамленні ў \"{displayName}\"?", + "Error while clearing chat history" : "Памылка пры ачыстцы гісторыі чата", + "Be careful, these actions cannot be undone." : "Будзьце ўважлівыя, гэтыя дзеянні нельга адрабіць.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Каб зноў далучыцца да закрытай размовы пасля таго, я вы выйдзеце з яе, спатрэбіцца запрашэнне. Да адкрытай размовы можна далучыцца ў любы час.", + "Permanently delete this conversation." : "Назаўжды выдаліць гэту размову.", + "Delete chat messages" : "Выдаліць паведамленні ў чаце", + "Permanently delete all the messages in this conversation." : "Назаўжды выдаліць усе паведамленні ў гэтай размове.", + "_%n hour_::_%n hours_" : ["%n гадзіна","%n гадзіны","%n гадзін","%n гадзін"], + "_%n day_::_%n days_" : ["%n дзень","%n дні","%n дзён","%n дзён"], + "_%n week_::_%n weeks_" : ["%n тыдзень","%n тыдні","%n тыдняў","%n тыдняў"], + "Custom expiration time" : "Карыстальніцкі тэрмін дзеяння", + "Message expiration disabled" : "Тэрмін дзеяння паведамленняў адключаны", + "Message expiration set: {duration}" : "Зададзены тэрмін дзеяння паведамленняў: {duration}", + "Error when trying to set message expiration" : "Памылка пры спробе задаць тэрмін дзеяння паведамленняў", + "Message expiration" : "Тэрмін дзеяння паведамленняў", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Тэрмін дзеяння паведамленняў у чаце можа скончыцца праз пэўны час. Заўвага: файлы, абагуленыя ў чаце, не будуць выдалены для ўладальніка, але больш не будуць абагулены ў размове.", + "Set message expiration" : "Задаць тэрмін дзеяння паведамленняў", + "Current message expiration" : "Бягучы тэрмін дзеяння паведамленняў", + "Password copied to clipboard" : "Пароль скапіяваны ў буфер абмену", + "Password could not be copied" : "Не ўдалося скапіяваць пароль", + "Guest access" : "Гасцявы доступ", + "Breakout rooms are not allowed in public conversations." : "У публічных размовах не дапускаюцца групавыя пакоі.", + "Allow guests to join this conversation via link" : "Дазволіць гасцям далучацца да размовы па спасылцы", + "Password protection" : "Абарона паролем", + "This conversation is password-protected. Guests need password to join" : "Гэта размова абаронена паролем. Гасцям патрэбен пароль для далучэння.", + "Password protection is needed for public conversations" : "Публічным размовам патрэбна абарона паролем", + "Set a password" : "Задайце пароль", + "Change password" : "Змяніць пароль", + "Enter new password" : "Увядзіце новы пароль", + "Save password" : "Захаваць пароль", + "Copy password" : "Скапіяваць пароль", + "Guests are allowed to join this conversation via link" : "Госці могуць далучыцца да гэтай размовы па спасылцы", + "Guests are not allowed to join this conversation" : "Гасцям не дазваляецца далучацца да гэтай размовы", + "Resend invitations" : "Адправіць запрашэнні паўторна", + "This conversation is open to registered users" : "Гэта размова адкрыта для зарэгістраваных карыстальнікаў", + "Open conversation" : "Адкрыць размову", + "Set language spoken in calls" : "Задаць мову размовы падчас выклікаў", + "Languages could not be loaded" : "Не ўдалося загрузіць мовы", + "Loading languages …" : "Загрузка моў …", + "Invalid language" : "Памылковая мова", + "Default language (English)" : "Прадвызначаная мова (Англійская)", + "Start time: {date}" : "Час пачатку: {date}", + "Start time has been updated" : "Час пачатку абноўлены.", + "Error occurred while updating start time" : "Падчас абнаўлення часу пачатку адбылася памылка", + "Meeting start time" : "Час пачатку сустрэчы", + "Start time (optional)" : "Час пачатку (неабавязкова)", + "Poll drafts" : "Чарнавікі апытанняў", + "Browse poll drafts" : "Праглядзець чарнавікі апытанняў", + "Error occurred when locking the conversation" : "Памылка пры блакіраванні размовы", + "Error occurred when unlocking the conversation" : "Памылка пры разблакіраванні размовы", + "Lock conversation" : "Заблакіраваць размову", + "This will also terminate the ongoing call." : "Гэта таксама перапыніць бягучы выклік.", + "Edit" : "Рэдагаваць", + "More information" : "Больш інфармацыі", + "Delete" : "Выдаліць", + "not running, check Matterbridge log" : "не запушчана, праверце журнал Matterbridge", + "You can bridge channels from various instant messaging systems with Matterbridge." : "З дапамогай Matterbridge вы можаце злучаць каналы з розных сістэм імгненных паведамленняў.", + "More info on Matterbridge" : "Больш інфармацыі пра Matterbridge", + "Show Matterbridge log" : "Паказаць журнал Matterbridge", + "Log content" : "Змест журнала", + "Only moderators are allowed to mention @all" : "Толькі мадэратары могуць згадваць @all", + "All participants are allowed to mention @all" : "Усе ўдзельнікі могуць згадваць @all", + "Participants are now allowed to mention @all." : "Цяпер удзельнікам дазваляецца згадваць @all.", + "Mentioning @all has been limited to moderators." : "Згадваць @all дазволена толькі мадэратарам.", + "Allow participants to mention @all" : "Дазволіць удзельнікам згадваць @all", + "Mention permissions" : "Дазволы на згадванне", + "Notifications" : "Апавяшчэнні", + "Notify about calls in this conversation" : "Апавяшчаць пра выклікі ў гэтай размове", + "Important conversation" : "Важная размова", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус карыстальніка \"Не турбаваць\" ігнаруецца падчас важных размоў", + "Sensitive conversation" : "Сакрэтная размова", + "Message preview will be disabled in conversation list and notifications" : "Перадпрагляд паведамленняў будзе адключаны ў спісе размоў і апавяшчэннях", + "Recording consent is required for calls in this conversation" : "Для запісу выклікаў у гэтай размове патрабуецца згода", + "Recording consent is not required for calls in this conversation" : "Для запісу выклікаў у гэтай размове не патрабуецца згода", + "Recording consent requirement was updated" : "Патрабаванне аб згодзе на запіс было абноўлена", + "Error occurred while updating recording consent" : "Падчас абнаўлення згоды на запіс узнікла памылка", + "Recording Consent" : "Згода на запіс", + "Require recording consent before joining call in this conversation" : "Патрабаваць згоду на запіс перад далучэннем да выкліку ў гэтай размове", + "Recording consent is required for all calls" : "Для ўсіх выклікаў патрабуецца згода на запіс", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n чалавек прыняты","%n чалавекі прыняты","%n чалавек прынята","%n чалавек прынята"], + "_%n person declined_::_%n people declined_" : ["%n чалавек адхілены","%n чалавекі адхілены","%n чалавек адхілена","%n чалавек адхілена"], + "_and %n other attachment_::_and %n other attachments_" : ["і яшчэ %n далучэнне","і яшчэ %n далучэнні","і яшчэ %n далучэнняў","і яшчэ %n далучэнняў"], + "With {displayName}" : "З {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Праглядзець далучэнне", + "Join" : "Далучыцца", + "View conversation" : "Праглядзець размову", + "View event on Calendar" : "Праглядзець падзею ў Календары", + "Error while creating the conversation" : "Памылка пры стварэнні размовы", + "Hello, {displayName}" : "Вітаем, {displayName}", + "Start meeting now" : "Пачаць сустрэчу", + "Give your meeting a title" : "Дайце назву вашай сустрэчы", + "Create and copy link" : "Стварыць і скапіяваць спасылку", + "Create a new conversation" : "Стварыць новую размову", + "Join open conversations" : "Далучыцца да адкрытых размоў", + "Scroll backward" : "Прагартаць назад", + "Scroll forward" : "Прагартаць наперад", + "Schedule meetings" : "Плануйце сустрэчы", + "You don't have any upcoming meetings" : "Няма запланаваных сустрэч", + "Open calendar" : "Адкрыць каляндар", + "Unread mentions" : "Непрачытаныя згадкі", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Тут будуць адлюстроўвацца паведамленні, у якіх вас згадвалі. Вы можаце згадваць людзей, набіраючы @, а затым іх імя.", + "Upcoming reminders" : "Будучыя напаміны", + "Message reminders" : "Напаміны пра паведамленні", + "Set a reminder on a message to be notified" : "Задайце напамін для паведамлення, пра якое трэба атрымаць апавяшчэнне", + "Start a group conversation" : "Пачаць групавую размову", + "Create conversation" : "Стварыць размову", + "Enter your name" : "Увядзіце сваё імя", + "Submit name and join" : "Увядзіце імя і далучыцеся", + "Do you already have an account?" : "У вас ужо ёсць уліковы запіс?", + "Log in" : "Увайсці", + "Error while verifying uploaded file" : "Памылка пры спраўджанні запампаванага файла", + "Uploaded file is verified" : "Запампаваны файл спраўджаны", + "Participants added successfully" : "Удзельнікі паспяхова дададзены", + "Error while adding participants" : "Памылка пры дадаванні ўдзельнікаў", + "Import a file" : "Імпартаваць файл", + "Browse" : "Агляд", + "Verifying uploaded file …" : "Спраўджанне запампаванага файла …", + "This might take a moment" : "Гэта можа заняць крыху часу", + "Send invitations" : "Адправіць запрашэнні", + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Можна адправіць %n запрашэнне","Можна адправіць %n запрашэнні","Можна адправіць %n запрашэнняў","Можна адправіць %n запрашэнняў"], + "Search participants or phone numbers" : "Пошук удзельнікаў або тэлефонных нумароў", + "Creating the conversation …" : "Стварэнне размовы …", + "Mark as read" : "Пазначыць як прачытанае", + "Mark as unread" : "Пазначыць як непрачытанае", + "Remove from favorites" : "Выдаліць з абранага", + "Add to favorites" : "У абранае", + "Unarchive conversation" : "Разархіваваць размову", + "Ignore \"Do not disturb\"" : "Ігнараваць статус \"Не турбаваць\"", + "You need to promote a new moderator before you can leave the conversation." : "Перш чым пакінуць размову, вам трэба павысіць статус новага мадэратара.", + "Conversation actions" : "Дзеянні з размовамі", + "Notify about calls" : "Апавяшчаць пра выклікі", + "Hide message text" : "Схаваць тэкст паведамлення", + "Pending invitations" : "Запрашэнні ў чаканні", + "From {user} at {remoteServer}" : "Ад {user} на {remoteServer}", + "Decline invitation" : "Адхіліць запрашэнне", + "Accept invitation" : "Прыняць запрашэнне", + "No pending invitations" : "Няма запрашэнняў у чаканні", + "Home" : "Дадому", + "Unread" : "Непрачытанае", + "Mentions" : "Згадкі", + "Meetings" : "Сустрэчы", + "No matches found" : "Супадзенняў не знойдзена", + "No conversations found" : "Размоў не знойдзена", + "You have no archived conversations." : "Няма архіваваных размоў.", + "Subscribe to an existing thread or start your own." : "Падпішыцеся на існуючую гутарку або пачніце сваю ўласную.", + "You have no unread mentions." : "Няма непрачытаных згадак.", + "You have no unread messages." : "Няма непрачытаных паведамленняў.", + "An error occurred while performing the search" : "Падчас выканання пошуку адбылася памылка", + "Conversation list" : "Спіс размоў", + "Filter conversations by" : "Фільтраваць размовы па", + "Unread messages" : "Непрачытаныя паведамленні", + "Clear filters" : "Ачысціць фільтры", + "New personal note" : "Новая асабістая нататка", + "Back to conversations" : "Назад да размоў", + "Archived conversations" : "Архіваваныя размовы", + "Threads" : "Гутаркі", + "Clear filter" : "Ачысціць фільтр", + "Show more threads" : "Паказаць больш гутарак", + "App settings" : "Налады праграмы", + "Users" : "Карыстальнікі", + "Groups" : "Групы", + "Teams" : "Каманды", + "Federated users" : "Федэратыўныя карыстальнікі", + "New private conversation" : "Новая прыватная размова", + "Other sources" : "Іншыя крыніцы", + "Open conversations" : "Адкрытыя размовы", + "No search results" : "Няма вынікаў пошуку", + "Users, groups and teams" : "Карыстальнікі, групы і каманды", + "Users and groups" : "Карыстальнікі і групы", + "Users and teams" : "Карыстальнікі і каманды", + "Groups and teams" : "Групы і каманды", + "New group conversation" : "Новая групавая размова", + "The meeting will start soon" : "Сустрэча неўзабаве пачнецца", + "This meeting is scheduled for {startTime}" : "Гэта сустрэча запланавана на {startTime}", + "You are currently waiting in the lobby" : "Вы зараз чакаеце ў лобі", + "Select microphone" : "Выберыце мікрафон", + "No microphone available" : "Няма даступных мікрафонаў", + "Select speaker" : "Выберыце дынамік", + "No speaker available" : "Няма даступных дынамікаў", + "Select camera" : "Выберыце камеру", + "No camera available" : "Няма даступных камер", + "Select a device" : "Выберыце прыладу", + "Playing …" : "Прайграванне …", + "Test speakers" : "Тэст дынамікаў", + "Test" : "Тэст", + "Devices" : "Прылады", + "Backgrounds" : "Фоны", + "No audio" : "Няма гуку", + "No camera" : "Няма камеры", + "Display video as you will see it (mirrored)" : "Паказваць відэа так, як яго будзеце бачыць вы (адлюстраванае)", + "Display video as others will see it" : "Паказваць відэа так, як яго будуць бачыць іншыя", + "Calls are not supported in your browser" : "Ваш браўзер не падтрымлівае выклікі", + "Access to microphone is only possible with HTTPS" : "Доступ да мікрафона магчымы толькі праз HTTPS", + "Access to microphone was denied" : "Доступ да мікрафона забаронены", + "Error while accessing microphone" : "Памылка доступу да мікрафона", + "Access to camera is only possible with HTTPS" : "Доступ да камеры магчымы толькі праз HTTPS", + "The call is being recorded." : "Выклік запісваецца.", + "The call might be recorded." : "Выклік можа быць запісаны.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запіс можа ўключаць ваш голас, відэа з камеры і абагулены экран. Перад далучэннем да выкліку патрабуецца ваша згода.", + "Give consent to the recording of this call" : "Дайце згоду на запіс гэтага выкліку", + "Show more info" : "Паказаць падрабязныя звесткі", + "Audio is not available" : "Гук недаступны", + "Video is not available" : "Відэа недаступна", + "Start recording immediately with the call" : "Пачынаць запіс адразу з выклікам", + "Notify all participants about this call" : "Апавясціць ўсіх удзельнікаў пра гэты выклік", + "Apply settings" : "Прымяніць налады", + "Error while uploading the file" : "Памылка пры запампоўванні файла", + "Select a file" : "Выберыце файл", + "Invalid path selected" : "Выбраны памылковы шлях", + "Blur" : "Размытасць", + "Upload" : "Запампаваць", + "Files" : "Файлы", + "(edited)" : "(адрэдагавана)", + "The message has expired or has been deleted" : "Паведамленне пратэрмінавана або выдалена", + "Cancel quote" : "Скасаваць цытату", + "24 hours" : "24 гадзіны", + "7 days" : "7 дзён", + "30 days" : "30 дзён", + "Until unpin" : "Пакуль не адмацуецца", + "Clear reminder – {timeLocale}" : "Ачысціць напамін – {timeLocale}", + "Edited by {actor}" : "Адрэдагаваў(-ла) {actor}", + "Pinned by you" : "Замацавана вамі", + "Pinned by {actor}" : "Замацаваў(-ла) {actor}", + "Until {absoluteDate}" : "Да {absoluteDate}", + "Message text copied to clipboard" : "Тэкст паведамлення скапіяваны ў буфер абмену", + "Message text could not be copied" : "Не ўдалося скапіяваць тэкст паведамлення ", + "Message forwarded to \"Note to self\"" : "Паведамленне пераслана ў \"Асабістыя нататкі\"", + "Error while forwarding message to \"Note to self\"" : "Памылка пры перасыланні паведамлення ў \"Асабістыя нататкі\"", + "A reminder was successfully removed" : "Напамін паспяхова выдалены", + "Error occurred when removing a reminder" : "Пры выдаленні напаміну ўзнікла памылка", + "A reminder was successfully set at {datetime}" : "Напамін паспяхова зададзены на {datetime}", + "Error occurred when creating a reminder" : "Пры стварэнні напаміну ўзнікла памылка", + "Add a reaction to this message" : "Дадаць рэакцыю на гэта паведамленне", + "Reply" : "Адказаць", + "More actions" : "Больш дзеянняў", + "Set reminder" : "Задаць напамін", + "Pin message" : "Замацаваць паведамленне", + "Unpin message" : "Адмацаваць паведамленне", + "Reply privately" : "Адказаць прыватна", + "Edit message" : "Рэдагаваць паведамленне", + "Copy message" : "Скапіяваць паведамленне", + "Copy message link" : "Скапіяваць спасылку на паведамленне", + "Go to file" : "Перайсці да файла", + "Download file" : "Спампаваць файл", + "Go to thread" : "Перайсці да гутаркі", + "Edit thread details" : "Рэдагаваць звесткі пра гутарку", + "Forward message" : "Пераслаць паведамленне", + "Translate" : "Перакласці", + "Set custom reminder" : "Задаць уласны напамін", + "Keep pinned for" : "Замацоўваць на працягу", + "Set custom period" : "Уласны перыяд", + "Close reactions menu" : "Закрыць меню рэакцый", + "React with {emoji}" : "Адрэагаваць з {emoji}", + "React with another emoji" : "Адрэагаваць з дапамогай іншага эмодзі", + "Choose a conversation to forward the selected message." : "Выберыце размову, у якую трэба пераслаць выбранае паведамленне.", + "Error while forwarding message" : "Памылка падчас перасылкі паведамлення", + "The message has been forwarded to {selectedConversationName}" : "Падемленне пераслана ў {selectedConversationName}", + "Dismiss" : "Адхіліць", + "Go to conversation" : "Перайсці да размовы", + "Detect language" : "Вызначыць мову", + "The message could not be translated" : "Не ўдалося перакласці паведамленне ", + "Translation copied to clipboard" : "Пераклад скапіяваны ў буфер абмену", + "Translation could not be copied" : "Не ўдалося скапіяваць пераклад", + "Translate message" : "Перакласці паведамленне", + "Source language to translate from" : "Зыходная мова для перакладу", + "Translate from" : "Перакласці з", + "Target language to translate into" : "Мэтавая мова для перакладу", + "Translate to" : "Перакласці на", + "Translating" : "Пераклад", + "Copy translated text" : "Скапіяваць перакладзены тэкст", + "Error when scheduling the message" : "Памылка пры планаванні паведамлення", + "Reschedule" : "Запланаваць паўторна", + "Send now" : "Адправіць зараз", + "Choose a time" : "Выберыце час", + "Send at custom time" : "Адправіць у зададзены час", + "Will be sent without notification" : "Будзе адпраўлена без апавяшчэння", + "Message read by everyone who shares their reading status" : "Паведамленне прачыталі ўсе, хто абагульвае статус прачытання", + "Message sent" : "Паведамленне адпраўлена", + "Sent without notification" : "Адпраўлена без апавяшчэння", + "Deleting message" : "Выдаленне паведамлення", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Паведамленне паспяхова выдалена, але ёсць наладжаны бот або Matterbridge, і паведамленне, магчыма, ужо распаўсюджана ў іншыя сэрвісы", + "Message deleted successfully" : "Паведамленне паспяхова выдалена", + "Message could not be deleted because it is too old" : "Не ўдалося выдаліць паведамленне , бо яно занадта старое", + "Only normal chat messages can be deleted" : "Можна выдаліць толькі звычайныя паведамленні чата", + "An error occurred while deleting the message" : "Падчас выдалення паведамлення адбылася памылка", + "Pinned" : "Замацавана", + "Your browser does not support playing audio files" : "Ваш браўзер не падтрымлівае прайграванне аўдыяфайлаў", + "Contact" : "Кантакт", + "{stack} in {board}" : "{stack} у {board}", + "Deck Card" : "Картка Deck", + "Remove {fileName}" : "Выдаліць {fileName}", + "Open this location in OpenStreetMap" : "Адкрыць гэта месца ў OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n адказ","%n адказы","%n адказаў","%n адказаў"], + "Sending message" : "Адпраўка паведамлення", + "Failed to send the message. Click to try again" : "Не ўдалося адправіць паведамленне. Націсніце, каб паспрабаваць яшчэ раз.", + "Not enough free space to upload file" : "Недастаткова вольнай прасторы, каб запампаваць файл", + "You cannot send messages to this conversation at the moment" : "У дадзены момант вы не можаце адпраўляць паведамленні ў гэту размову", + "Could not update the message" : "Не атрымалася абнавіць паведамленне", + "Reply to thread \"{threadTitle}\"" : "Адказаць у гутарцы \"{threadTitle}\"", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Чарнавік апытання • %n варыянты","Чарнавік апытання • %n варыянты","Чарнавік апытання • %n варыянтаў","Чарнавік апытання • %n варыянтаў"], + "_%n vote_::_%n votes_" : ["%n голас","%n галасы","%n галасоў","%n галасоў"], + "Edit poll draft" : "Рэдагаваць чарнавік апытання", + "Delete poll draft" : "Выдаліць чарнавік апытання", + "Open poll" : "Адкрыць апытанне", + "See results" : "Паглядзець вынікі", + "Reactions" : "Рэакцыі", + "No permission to post reactions in this conversation" : "Няма дазволу на публікацыю рэакцый у гэтай размове", + "and {participant}" : "і {participant}", + "_and %n other participant_::_and %n other participants_" : ["і яшчэ %n удзельнік","і яшчэ %n удзельнікі","і яшчэ %n удзельнікаў","і яшчэ %n удзельнікаў"], + "Show all reactions" : "Паказаць усе рэакцыі", + "Add more reactions" : "Дадаць больш рэакцый", + "Show or collapse system messages" : "Паказаць або згарнуць сістэмныя паведамленні", + "No messages" : "Няма паведамленняў", + "All messages have expired or have been deleted." : "Усе паведамленні пратэрмінаваны або выдалены.", + "{author} (pinned by you)" : "{author} (замацавана вамі)", + "{author} (pinned by {actor})" : "{author} (замацаваў(-ла) {actor})", + "Unpin" : "Адмацаваць", + "Cancel search" : "Скасаваць пошук", + "Add a phone number" : "Дадаць нумар тэлефона", + "Error: A password is required to create the conversation." : "Памылка: Для стварэння размовы патрабуецца пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Гатова, размова \"{conversationName}\" створана.", + "Create a new group conversation" : "Стварыць новую групавую размову", + "Add participants" : "Дадаць удзельнікаў", + "Maximum length exceeded ({maxlength} characters)" : "Перавышана максімальная даўжыня ({maxlength} сімвалаў)", + "Conversation visibility" : "Бачнасць размовы", + "Allow guests to join via link" : "Дазволіць гасцям далучацца па спасылцы", + "Enter password" : "Увядзіце пароль", + "This conversation has been locked" : "Гэта размова была заблакіравана", + "No permission to post messages in this conversation" : "Няма дазволу на публікацыю паведамленняў у гэтай размове", + "Joining conversation …" : "Далучэнне да размовы …", + "Write a message without notification" : "Напісаць паведамленне без апавяшчэння", + "Create a thread silently" : "Пачаць гутарку бязгучна", + "Create a thread" : "Стварыць гутарку", + "Send message silently" : "Адправіць паведамленне бязгучна", + "Send message" : "Адправіць паведамленне", + "Send without notification" : "Адправіць без апавяшчэння", + "The participant will not be notified about new messages" : "Удзельнік не будзе атрымліваць апавяшчэнняў аб новых паведамленнях", + "Participants will not be notified about new messages" : "Удзельнікі не будуць атрымліваць апавяшчэнняў аб новых паведамленнях", + "Message will be sent {datetimeString}" : "Паведамленне будзе адпраўлена {datetimeString}", + "Thread title is required" : "Патрабуецца загаловак гутаркі", + "Message text is required" : "Патрабуецца тэкст паведамлення", + "The message could not be edited" : "Нне ўдалося адрэдагаваць паведамленне ", + "File to share" : "Файл для абагульвання", + "File upload is not available in this conversation" : "Запампоўванне файлаў недаступна ў гэтай размове", + "Message was successfully scheduled" : "Паведамленне паспяхова запланавана", + "Add emoji" : "Дадаць эмодзі", + "Adding a mention will only notify users who did not read the message." : "Даданне згадкі прывядзе да апавяшчэння толькі тых карыстальнікаў, якія не прачыталі паведамленне.", + "Thread title" : "Загаловак гутаркі", + "Send later" : "Адправіць пазней", + "Show scheduled messages" : "Паказаць запланаваныя паведамленні", + "Cancel editing" : "Скасаваць рэдагаванне", + "Schedule message" : "Запланаваць паведамленне", + "{user} is out of office and might not respond." : "{user} не на працы і можа не адказаць.", + "Absence period: {startDate} - {endDate}" : "Перыяд адсутнасці: {startDate} - {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Абагульванне з {nextcloud}", + "Share from Files" : "Абагуліць з Файлаў", + "Share files to the conversation" : "Абагуліць файлы ў размове", + "Upload from device" : "Запампаваць з прылады", + "Create new poll" : "Стварыць новае апытанне", + "Smart picker" : "Smart picker", + "Record voice message" : "Запісаць галасавое паведамленне", + "End recording and send" : "Завяршыць запіс і адправіць", + "Dismiss recording" : "Адхіліць запіс", + "Access to the microphone was denied" : "Доступ да мікрафона забаронены", + "Microphone either not available or disabled in settings" : "Мікрафон недаступны або адключаны ў наладах", + "Error while recording audio" : "Памылка падчас запісу гуку", + "New file" : "Новы файл", + "Blank" : "Пусты", + "Error while creating file" : "Памылка пры стварэнні файла", + "Create and share a new file" : "Стварыце і абагульце новы файл", + "Name of the new file" : "Назва новага файла", + "Create file" : "Стварыць файл", + "Someone is typing …" : "Хтосьці піша …", + "{user1} is typing …" : "{user1} піша …", + "{user1} and {user2} are typing …" : "{user1} і {user2} пішуць …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} і {user3} пішуць …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …","{user1}, {user2}, {user3} і яшчэ %n пішуць …"], + "Add more files" : "Дадаць больш файлаў", + "Send" : "Адправіць", + "In this conversation {user} can:" : "У гэтай размове {user} можа:", + "Edit default permissions for participants in {conversationName}" : "Рэдагаваць прадвызначаныя дазволы для ўдзельнікаў у {conversationName}", + "Start a call" : "Пачаць выклік", + "Skip the lobby" : "Прапусціць лобі", + "Can post messages" : "Можа адпраўляць паведамленні", + "Can post messages and reactions" : "Можа публікаваць паведамленні і рэакцыі", + "Can add reactions" : "Можа дадаваць рэакцыі", + "Enable the microphone" : "Уключыць мікрафон", + "Enable the camera" : "Уключыць камеру", + "Share the screen" : "Пачаць паказ экрана", + "Update permissions" : "Абнавіць дазволы", + "Updating permissions" : "Абнаўленне дазволаў", + "No poll drafts" : "Няма чарнавікоў апытанняў", + "There is no poll drafts yet saved for this conversation" : "Для гэтай размовы пакуль няма захаваных чарнавікоў апытанняў", + "Create poll in {name}" : "Стварыць апытанне ў {name}", + "Create poll" : "Стварыць апытанне", + "Error while importing poll" : "Памылка пры імпарце апытання", + "Question" : "Пытанне", + "Ask a question" : "Задаць пытанне", + "Import draft from file" : "Імпартаваць чарнавік з файла", + "Answers" : "Адказы", + "Answer {option}" : "Адказ {option}", + "Delete poll option" : "Выдаліць варыянт апытання", + "Add answer" : "Дадаць адказ", + "Settings" : "Налады", + "Anonymous poll" : "Ананімнае апытанне", + "Multiple answers" : "Некалькі адказаў", + "Save as draft" : "Захаваць як чарнавік", + "Export draft to file" : "Экспартаваць чарнавік у файл", + "You voted for this option" : "Вы прагаласавалі за гэты варыянт", + "End poll" : "Завяршыць апытанне", + "Change your vote" : "Змяніць голас", + "Results" : "Вынікі", + "Voted participants" : "Удзельнікі, якія прагаласавалі", + "Send a message to \"{roomName}\"" : "Адправіць паведамленне ў \"{roomName}\"", + "Hide list of participants" : "Схаваць спіс удзельнікаў", + "Show list of participants" : "Паказаць спіс удзельнікаў", + "The message was sent to \"{roomName}\"" : "Паведамленне адпраўлена ў \"{roomName}\"", + "Send message to room" : "Адправіць паведамленне ў пакой", + "Back to main room" : "Вярнуцца ў галоўны пакой", + "Back to your room" : "Вярнуцца ў свой пакой", + "Message all rooms" : "Паведамленне ва ўсе пакоі", + "Start session" : "Пачаць сеанс", + "Start a call before you start a breakout room session" : "Пачніце выклік, перш чым пачаць сеанс групавых пакояў", + "Stop session" : "Спыніць сеанс", + "The message was sent to all breakout rooms" : "Паведамленне адпраўлена ва ўсе групавыя пакоі", + "Send a message to all breakout rooms" : "Адправіць паведамленне ва ўсе групавыя пакоі", + "Breakout rooms are not started" : "Групавыя пакоі не запушчаны", + "Talk setup incomplete" : "Наладка Talk не завершана", + "Disable lobby" : "Адключыць лобі", + "Settings for participant \"{user}\"" : "Налады для ўдзельніка \"{user}\"", + "Participant \"{user}\"" : "Удзельнік \"{user}\"", + "moderator" : "мадэратар", + "bot" : "бот", + "guest" : "госць", + "Ringing …" : "Выклік …", + "Call rejected" : "Выклік адхілены", + "Raised their hand" : "Падняў(-ла) руку", + "Remove group and members" : "Выдаліць групу і ўдзельнікаў", + "Remove team and members" : "Выдаліць каманду і членаў", + "Remove participant" : "Выдаліць удзельніка", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Вы сапраўды хочаце выдаліць групу \"{displayName}\" і яе ўдзельнікаў з гэтай размовы?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Вы сапраўды хочаце выдаліць каманду \"{displayName}\" і яе членаў з гэтай размовы?", + "Do you really want to remove {displayName} from this conversation?" : "Вы сапраўды хочаце выдаліць \"{displayName}\" з гэтай размовы?", + "Notification was sent to {displayName}" : "Апавяшчэнне адпраўлена {displayName}", + "Could not send notification to {displayName}" : "Не ўдалося адправіць апавяшчэнне {displayName}", + "in the lobby" : "у лобі", + "Move back to lobby" : "Вярнуцца ў лобі", + "Move to conversation" : "Перайсці да размовы", + "Demote from moderator" : "Пазбавіць правоў мадэратара", + "Promote to moderator" : "Прызначыць мадэратарам", + "Resend invitation" : "Адправіць запрашэнне паўторна", + "Copy phone number" : "Скапіяваць нумар тэлефона", + "Reset custom permissions" : "Скінуць карыстальніцкія дазволы", + "Grant all permissions" : "Даць усе дазволы", + "Remove all permissions" : "Выдаліць усе дазволы", + "Internal note (reason to ban)" : "Унутраная заўвага (прычына блакіроўкі)", + "Remove" : "Выдаліць", + "Permissions modified for {displayName}" : "Зменены дазволы для {displayName}", + "Add users, groups or teams" : "Дадаць карыстальнікаў, групы або каманды", + "Add users or groups" : "Дадаць карыстальнікаў або групы", + "Add users or teams" : "Дадаць карыстальнікаў або каманды", + "Add users" : "Дадаць карыстальнікаў", + "Add groups or teams" : "Дадаць групы або каманды", + "Add groups" : "Дадаць групы", + "Add teams" : "Дадаць каманды", + "Add other sources" : "Дадаць іншыя крыніцы", + "Add emails" : "Дадаць адрасы электроннай пошты", + "Integrations" : "Інтэграцыі", + "Add federated users" : "Дадаць федэратыўных карыстальнікаў", + "Searching …" : "Пошук …", + "Search for more users" : "Пошук іншых карыстальнікаў", + "You can search or add participants via name, email, or Federated Cloud ID" : "Вы можаце шукаць або дадаваць удзельнікаў па імені, электроннай пошце або ідэнтыфікатары ў федэратыўным воблаку.", + "Search or add participants" : "Знайсці або дадаць удзельнікаў", + "Invitation was sent to {actorId}" : "Запрашэнне адпраўлена {actorId}", + "An error occurred while adding the participants" : "Падчас дадавання ўдзельнікаў узнікла памылка", + "A new group conversation with selected participant will be created" : "Будзе створана новая групавая размова з выбраным удзельнікам", + "Participants" : "Удзельнікі", + "Pinned by a deleted user" : "Замацавана выдаленым карыстальнікам", + "Participants ({count})" : "Удзельнікі ({count})", + "Open chat" : "Адкрыць чат", + "You have new unread messages in the chat." : "У вас ёсць новыя непрачытаныя паведамленні ў чаце.", + "You have been mentioned in the chat." : "Вас згадалі ў чаце.", + "Search messages" : "Пошук паведамленняў", + "Chat" : "Чат", + "Details" : "Падрабязнасці", + "Shared items" : "Абагуленыя элементы", + "Search in {name}" : "Пошук у {name}", + "Threads in {name}" : "Гутаркі ў {name}", + "{actor} in {conversation}" : "{actor} у {conversation}", + "Search messages …" : "Пошук паведамленняў …", + "Search options" : "Параметры пошуку", + "From User" : "Ад карыстальніка", + "Since" : "З", + "Until" : "Да", + "No results found" : "Вынікаў не знойдзена", + "Load more results" : "Загрузіць больш вынікаў", + "Recent threads" : "Нядаўнія гутаркі", + "Projects" : "Праекты", + "No shared items" : "Няма абагуленых элементаў", + "Thread notifications" : "Апавяшчэнні гутаркі", + "Thread actions" : "Дзеянні ў гутарцы", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Спасылка на размову", + "No open conversations found" : "Адкрытых размоў не знойдзена", + "Either there are no open conversations or you joined all of them." : "Або няма адкрытых размоў, або вы далучыліся да іх усіх.", + "Search conversations or users" : "Пошук размоў або карыстальнікаў", + "Select conversation" : "Выберыце размову", + "Number length is not valid" : "Памылковая даўжыня нумара", + "Region code is not valid" : "Памылковы код рэгіёна", + "Number length is too short" : "Даўжыня нумара занадта кароткая", + "Number length is too long" : "Даўжыня нумара занадта доўгая", + "Number is not valid" : "Памылковы нумар", + "Phone numbers" : "Нумары тэлефонаў", + "Display name: {name}" : "Імя для паказу: {name}", + "Edit display name" : "Рэдагаваць імя для паказу", + "Display name (required)" : "Імя для паказу (абавязкова)", + "Save name" : "Захаваць імя", + "Error while setting personal setting" : "Памылка падчас захавання асабістых налад", + "Error while saving sounds setting" : "Памылка пры захаванні налад гуку", + "Compact conversations list" : "Кампактны спіс размоў", + "Chat appearance" : "Выгляд чата", + "Messages list" : "Спіс паведамленняў", + "Play sounds when participants join or leave a call" : "Прайграваць гукі, калі ўдзельнікі далучаюцца да выкліку або пакідаюць яго", + "Notification settings" : "Налады апавяшчэнняў", + "Default language" : "Прадвызначаная мова", + "Default language ({languageName})" : "Прадвызначаная мова ({languageName})", + "Select location for attachments" : "Выберыце размяшчэнне далучэнняў", + "Error while setting attachment folder" : "Памылка пры заданні папкі для далучэнняў", + "Turn camera and microphone off by default" : "Прадвызначана выключаць камеру і мікрафон", + "Blur camera background by default" : "Прадвызначана размываць фон камеры", + "Appearance & Sounds" : "Знешні выгляд і гукі", + "Privacy" : "Прыватнасць", + "Attachments folder" : "Папка для далучэнняў", + "Search" : "Пошук", + "Edit your last message" : "Рэдагаваць апошняе паведамленне", + "Shortcuts while in a call" : "Спалучэнні клавіш падчас выкліку", + "Camera on and off" : "Уключыць/выключыць камеру", + "Microphone on and off" : "Уключыць/выключыць мікрафон", + "Raise or lower hand" : "Падняць або апусціць руку", + "Zoom-in / zoom-out a screen share" : "Павялічыць/паменшыць маштаб паказу экрана", + "Mouse wheel" : "Кола мышы", + "Start call silently" : "Пачаць бязгучны выклік", + "Start call" : "Пачаць выклік", + "End call" : "Завяршыць выклік", + "This call has just ended" : "Гэты выклік толькі што завяршыўся.", + "You will be able to join the call only after a moderator starts it." : "Вы зможаце далучыцца да выкліку толькі пасля таго, як яе пачне мадэратар.", + "End call for everyone" : "Завяршыць выклік для ўсіх", + "Starting the recording" : "Пачатак запісу", + "Recording" : "Запіс", + "The call has been running for one hour." : "Выклік доўжыцца ўжо гадзіну", + "Cancel recording start" : "Скасаваць пачатак запісу", + "Stop recording" : "Спыніць запіс", + "Send a reaction" : "Адправіць рэакцыю", + "React with {reaction}" : "Адрэагаваць з {reaction}", + "All tasks done!" : "Усе заданні выкананы!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} з %n задання","{done} з %n заданняў","{done} з %n заданняў","{done} з %n заданняў"], + "_%n participant in call_::_%n participants in call_" : ["У выкліку %n удзельнік","У выкліку %n удзельнікі","У выкліку %n удзельнікаў","У выкліку %n удзельнікаў"], + "Scheduled messages" : "Запланаваныя паведамленні", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа або размытасць фону падчас паказу экрана.", + "Disable background blur" : "Адключыць размытасць фону", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць ваш экран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не бачыць вас.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа або размытасць фону падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа падчас паказу экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць паказ экрана.", + "Disable screenshare" : "Адключыць паказ экрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас і не бачыць ваш экран. Каб палепшыць сітуацыю, паспрабуйце адключыць размытасць фону відэа.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець і не бачыць вас. Каб палепшыць сітуацыю, паспрабуйце адключыць відэа.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваша інтэрнэт-злучэнне або камп'ютар перагружаны, і іншыя ўдзельнікі могуць не разумець вас.", + "Mute others" : "Адключыць гук іншых", + "Start recording" : "Пачаць запіс", + "Set up breakout rooms" : "Наладзіць групавыя пакоі", + "Open Calendar" : "Адкрыць Каляндар", + "Remove participant {name}" : "Выдаліць удзельніка {name}", + "Would you like to delete this conversation?" : "Вы хочаце выдаліць гэтую размову?", + "Are you sure you want to delete this conversation?" : "Вы ўпэўнены, што хочаце выдаліць гэту размову?", + "Delete now" : "Выдаліць зараз", + "Keep" : "Пакінуць", + "Select a region" : "Выберыце рэгіён", + "Local time: {time}" : "Мясцовы час: {time}", + "Scheduled {datetime}" : "Запланавана {datetime}", + "Scheduled for {datetime}" : "Запланавана на {datetime}", + "Search …" : "Пошук ...", + "Message without mention" : "Паведамленне без згадкі", + "Mention myself" : "Згадаць сябе", + "Mention everyone" : "Згадаць ўсіх", + "Select a conversation" : "Выберыце размову", + "Select a mode" : "Выберыце рэжым", + "You do not have permissions to access this conversation." : "У вас няма дазволу на доступ да гэтай размовы.", + "Join a different conversation or start a new one." : "Далучайцеся да іншай размовы або пачніце новую.", + "The conversation does not exist" : "Размова не існуе", + "Join a conversation or start a new one!" : "Далучайцеся да размовы або пачніце новую!", + "Duplicate session" : "Дубляваць сеанс", + "Creating and joining a conversation with \"{userid}\"" : "Стварэнне і далучэнне да размовы з карыстальнікам \"{userid}\"", + "Join a conversation or start a new one" : "Далучайцеся да размовы або пачніце новую", + "Error while joining the conversation" : "Памылка пры далучэнні да размовы", + "Another user" : "Іншы карыстальнік", + "Nextcloud URL" : "URL-адрас NextCloud", + "Nextcloud user" : "Карыстальнік Nextcloud", + "User password" : "Пароль карыстальніка", + "Talk conversation" : "Размова Talk", + "Skip TLS verification" : "Прапусціць праверку TLS", + "Matrix server URL" : "URL-адрас сервера Matrix", + "User" : "Карыстальнік", + "Matrix channel" : "Канал Matrix", + "Mattermost server URL" : "URL-адрас сервера Mattermost", + "Mattermost user" : "Карыстальнік Mattermost", + "Team name" : "Назва каманды", + "Channel name" : "Назва канала", + "Rocket.Chat server URL" : "URL-адрас сервера Rocket.Chat", + "User name or email address" : "Імя карыстальніка або электронная пошта", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "URL-адрас сервера Zulip", + "Bot user name" : "Імя карыстальніка бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "Токен API", + "Slack channel" : "Канал Slack", + "Server ID or name" : "Ідэнтыфікатар або назва сервера", + "Channel ID (prefixed with \"ID:\") or name" : "Ідэнтыфікатар (з прэфіксам \"ID:\") або назва канала", + "Channel" : "Канал", + "Login" : "Лагін", + "Chat ID" : "Ідэнтыфікатар чата", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL-адрас IRC-сервера (напрыклад, chat.freenode.net:6667)", + "Nickname" : "Псеўданім", + "IRC channel" : "Канал IRC", + "Channel password" : "Пароль канала", + "NickServ nickname" : "Псеўданім NickServ", + "NickServ password" : "Пароль NickServ", + "Use TLS" : "Выкарыстоўваць TLS", + "Use SASL" : "Выкарыстоўваць SASL", + "Client ID" : "Ідэнтыфікатар кліента", + "Team ID" : "Ідэнтыфікатар каманды", + "Thread ID" : "Ідэнтыфікатар гутаркі", + "XMPP/Jabber server URL" : "URL-адрас сервера XMPP/Jabber", + "MUC server URL" : "URL-адрас сервера MUC", + "Pinned messages" : "Замацаваныя паведамленні", + "Media" : "Медыя", + "Polls" : "Апытанні", + "Deck cards" : "Карткі Deck", + "Voice messages" : "Галасавыя паведамленні", + "Locations" : "Месцазнаходжанні", + "Call recordings" : "Запісы выклікаў", + "Audio" : "Аўдыя", + "Show all pinned messages" : "Паказаць усе замацаваныя паведамленні", + "Show all media" : "Паказаць усе медыя", + "Show all files" : "Паказаць усе файлы", + "Show all polls" : "Паказаць усе апытанні", + "Show all deck cards" : "Паказаць усе карткі Deck", + "Show all voice messages" : "Паказаць усе галасавыя паведамленні", + "Show all locations" : "Паказаць усе месцазнаходжанні", + "Show all call recordings" : "Паказаць усе запісы выклікаў", + "Show all audio" : "Паказаць усе аўдыя", + "Show all other" : "Паказаць усе іншыя", + "Follow conversation settings" : "Прытрымлівацца налад размовы", + "Group" : "Група", + "Team" : "Каманда", + "You reconnected to the call" : "Вы зноў падключыліся да выкліку", + "{actor} reconnected to the call" : "{actor} зноў падключыўся(-лася) да выкліку", + "You added {user0} and {user1}" : "Вы дадалі {user0} і {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Вы дадалі {user0}, {user1} і яшчэ %n удзельніка","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў","Вы дадалі {user0}, {user1} і яшчэ %n удзельнікаў"], + "An administrator added you and {user0}" : "Адміністратар дадаў вас і {user0}", + "{actor} added you and {user0}" : "{actor} дадаў(-ла) вас і {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Адміністратар дадаў вас, {user0} і яшчэ %n удзельніка","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар дадаў вас, {user0} і яшчэ %n удзельнікаў"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельніка","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) вас, {user0} і яшчэ %n удзельнікаў"], + "An administrator added {user0} and {user1}" : "Адміністратар дадаў {user0} і {user1}", + "{actor} added {user0} and {user1}" : "{actor} дадаў(-ла) {user0} і {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельніка","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар дадаў {user0}, {user1} і яшчэ %n удзельнікаў"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельніка","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} дадаў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў"], + "You removed {user0} and {user1}" : "Вы выдалілі {user0} і {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Вы выдалілі {user0}, {user1} і яшчэ %n удзельніка","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў","Вы выдалілі {user0}, {user1} і яшчэ %n удзельнікаў"], + "An administrator removed you and {user0}" : "Адміністратар выдаліў вас і {user0}", + "{actor} removed you and {user0}" : "{actor} выдаліў(-ла) вас і {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Адміністратар выдаліў вас, {user0} і яшчэ %n удзельніка","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў","Адміністратар выдаліў вас, {user0} і яшчэ %n удзельнікаў"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельніка","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) вас, {user0} і яшчэ %n удзельнікаў"], + "An administrator removed {user0} and {user1}" : "Адміністратар выдаліў {user0} і {user1}", + "{actor} removed {user0} and {user1}" : "{actor} выдаліў(-ла) {user0} і {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельніка","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў","Адміністратар выдаліў {user0}, {user1} і яшчэ %n удзельнікаў"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельніка","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў","{actor} выдаліў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў"], + "You and {user0} joined the call" : "Вы і {user0} далучыліся да выкліку", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Вы, {user0} і яшчэ %n удзельнік далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікі далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікаў далучыліся да выкліку","Вы, {user0} і яшчэ %n удзельнікаў далучыліся да выкліку"], + "{user0} and {user1} joined the call" : "{user0} і {user1} далучыліся да выкліку", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} і яшчэ %n удзельнік далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікі далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікаў далучыліся да выкліку","{user0}, {user1} і яшчэ %n удзельнікаў далучыліся да выкліку"], + "You and {user0} left the call" : "Вы і {user0} выйшлі з выкліку", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Вы, {user0} і яшчэ %n удзельнік выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікі выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікаў выйшлі з выкліку","Вы, {user0} і яшчэ %n удзельнікаў выйшлі з выкліку"], + "{user0} and {user1} left the call" : "{user0} і {user1} выйшлі з выкліку", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} і яшчэ %n удзельнік выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікі выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікаў выйшлі з выкліку","{user0}, {user1} і яшчэ %n удзельнікаў выйшлі з выкліку"], + "You promoted {user0} and {user1} to moderators" : "Вы прызначылі {user0} і {user1} мадэратарамі", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Вы прызначылі {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Вы прызначылі {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "An administrator promoted you and {user0} to moderators" : "Адміністратар прызначыў вас і {user0} мадэратарамі", + "{actor} promoted you and {user0} to moderators" : "{actor} прызначыў(-ла) вас і {user0} мадэратарамі", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Адміністратар прызначыў вас, {user0} і яшчэ %n удзельніка мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў вас, {user0} і яшчэ %n удзельнікаў мадэратарамі"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельніка мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) вас, {user0} і яшчэ %n удзельнікаў мадэратарамі"], + "An administrator promoted {user0} and {user1} to moderators" : "Адміністратар прызначыў {user0} і {user1} мадэратарамі", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} прызначыў(-ла) {user0} і {user1} мадэратарамі", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","Адміністратар прызначыў {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельніка мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі","{actor} прызначыў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў мадэратарамі"], + "You demoted {user0} and {user1} from moderators" : "Вы пазбавілі {user0} і {user1} правоў мадэратара", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Вы пазбавілі {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Вы пазбавілі {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "An administrator demoted you and {user0} from moderators" : "Адміністратар пазбавіў вас і {user0} правоў мадэратара", + "{actor} demoted you and {user0} from moderators" : "{actor} пазбавіў(-ла) вас і {user0} правоў мадэратара", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельніка правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельніка правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) вас, {user0} і яшчэ %n удзельнікаў правоў мадэратара"], + "An administrator demoted {user0} and {user1} from moderators" : "Адміністратар пазбавіў {user0} і {user1} правоў мадэратара", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} пазбавіў(-ла) {user0} і {user1} правоў мадэратара", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","Адміністратар пазбавіў {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельніка правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара","{actor} пазбавіў(-ла) {user0}, {user1} і яшчэ %n удзельнікаў правоў мадэратара"], + "You:" : "Вы:", + "You: {lastMessage}" : "Вы: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(адрэдагавана вамі)", + "(edited by a deleted user)" : "(адрэдагавана выдаленым карыстальнікам)", + "(edited by {moderator})" : "(адрэдагаваў(-ла) {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Вы спрабуеце далучыцца да размовы, маючы актыўны сеанс у іншым акне або на іншай прыладзе. Nextcloud Talk пакуль што не падтрымлівае такі сцэнарый. Што вы хочаце зрабіць?", + "Leave this page" : "Выйсці з гэтай старонкі", + "Join here" : "Далучыцца тут", + "Deck card has been posted to {conversation}" : "Картка Deck была апублікавана ў {conversation}", + "An error occurred while posting deck card to conversation" : "Падчас публікацыі карткі Deck у размове адбылася памылка", + "Post to a conversation" : "Апублікаваць у размове", + "Post to conversation" : "Апублікаваць у размове", + "The recording failed. Please contact your administrator." : "Не ўдалося зрабіць запіс. Звярніцеся да адміністратара.", + "Location has been posted to {conversation}" : "Месцазнаходжанне апублікавана ў {conversation}", + "An error occurred while posting location to conversation" : "Падчас публікацыі месцазнаходжання ў размове адбылася памылка", + "Share to a conversation" : "Абагуліць у размове", + "Share to conversation" : "Абагуліць у размове", + "In conversation" : "У размове", + "Search in conversation: {conversation}" : "Пошук у размове: {conversation}", + "Error while clearing conversation history" : "Памылка пры ачыстцы гісторыі размовы", + "Conversation password has been saved" : "Пароль размовы захаваны", + "Conversation password has been removed" : "Пароль размовы выдалены", + "Error occurred while saving conversation password" : "Памылка пры захаванні пароля размовы", + "Conversation picture set" : "Аватар размовы зададзены", + "Conversation picture deleted" : "Аватар размовы выдалены", + "Could not delete the conversation picture" : "Не ўдалося выдаліць аватар размовы", + "Could not post message: {errorMessage}" : "Не ўдалося апублікаваць паведамленне: {errorMessage}", + "Participant is banned successfully" : "Удзельнік паспяхова заблакіраваны", + "Error while banning the participant" : "Памылка пры блакіраванні ўдзельніка", + "Could not send invitation to {actorId}" : "Не ўдалося адправіць запрашэнне {actorId}", + "Invitations sent" : "Запрашэнні адпраўлены", + "Error occurred when sending invitations" : "Падчас адпраўкі запрашэнняў узнікла памылка", + "Failed to join the conversation." : "Не атрымалася далучыцца да размовы.", + "An error occurred while creating breakout rooms" : "Пры стварэнні групавых пакояў адбылася памылка", + "An error occurred while deleting breakout rooms" : "Пры выдаленні групавых пакояў адбылася памылка", + "An error occurred while starting breakout rooms" : "Пры запуску групавых пакояў адбылася памылка", + "An error occurred while stopping breakout rooms" : "Пры спыненні групавых пакояў адбылася памылка", + "An error occurred while sending a message to the breakout rooms" : "Пры адпраўцы паведамлення ў групавыя пакоі адбылася памылка", + "An error occurred while joining breakout room" : "Пры далучэнні да групавога пакоя адбылася памылка", + "Failed to rename the thread" : "Не ўдалося перайменаваць гутарку", + "An error occurred while accepting an invitation" : "Падчас прыняцця запрашэння адбылася памылка", + "An error occurred while rejecting an invitation" : "Падчас адхілення запрашэння адбылася памылка", + "{guest} (guest)" : "{guest} (госць)", + "Poll draft has been saved" : "Чарнавік апытання захаваны", + "An error occurred while saving the draft" : "Падчас захавання чарнавіка ўзнікла памылка", + "An error occurred while submitting your vote" : "Падчас адпраўкі голаса ўзнікла памылка", + "An error occurred while ending the poll" : "Падчас заканчэння апытання ўзнікла памылка", + "An error occurred while deleting the poll draft" : "Падчас выдалення чарнавіка апытання ўзнікла памылка", + "Poll \"{name}\" was created by {user}. Click to vote" : "Апытанне \"{name}\" створана карыстальнікам {user}. Націсніце, каб прагаласаваць", + "Failed to add reaction" : "Не ўдалося дадаць рэакцыю", + "Failed to remove reaction" : "Не ўдалося выдаліць рэакцыю", + "Error while uploading file \"{fileName}\"" : "Памылка пры запампоўванні файла \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Недастаткова вольнай прасторы, каб запампаваць файл \"{fileName}\"", + "You are not allowed to share files" : "Вам не дазволена абагульваць файлы", + "Error while sharing file" : "Памылка пры абагульванні файла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Ваш браўзер не цалкам падтрымліваецца Nextcloud Talk. Выкарыстоўвайце апошнюю версію Mozilla Firefox, Microsoft Edge, Google Chrome, Opera або Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Праз %n гадзіну","Праз %n гадзіны","Праз %n гадзін","Праз %n гадзін"], + "_%n minute _::_%n minutes_" : ["%n хвіліна","%n хвіліны","%n хвілін","%n хвілін"], + "In {hours} and {minutes}" : "Праз {hours} і {minutes}", + "_In %n minute_::_In %n minutes_" : ["Праз %n хвіліну","Праз %n хвіліны","Праз %n хвілін","Праз %n хвілін"], + "Later today – {timeLocale}" : "Пазней сёння – {timeLocale}", + "Tomorrow – {timeLocale}" : "Заўтра – {timeLocale}", + "This weekend – {timeLocale}" : "У гэты ўік-энд – {timeLocale}", + "Next week – {timeLocale}" : "На наступным тыдні – {timeLocale}", + "Message link copied to clipboard" : "Спасылка на паведамленне скапіявана ў буфер абмену", + "Conversation link copied to clipboard" : "Спасылка на размову скапіявана ў буфер абмену", + "The link could not be copied" : "Не ўдалося скапіяваць спасылку ", + "Failed to connect. Retrying …" : "Не атрымалася злучыцца. Паўторная спроба…", + "Please restart the app." : "Перазапусціце праграму.", + "Please reload the page." : "Перазагрузіце старонку.", + "Please try to restart the app." : "Паспрабуйце перазапусціць праграму.", + "Please try to reload the page." : "Паспрабуйце перазагрузіць старонку.", + "Do not disturb" : "Не турбаваць", + "Away" : "Адышоў", + "Microphone {number}" : "Мікрафон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Дынамік {number}", + "Access to microphone & camera was denied" : "Доступ да мікрафона і камеры забаронены", + "WebRTC is not supported in your browser" : "WebRTC не падтрымліваецца вашым браўзерам", + "Please use a different browser like Firefox or Chrome" : "Выкарыстоўвайце іншы браўзер, напрыклад, Firefox або Chrome", + "Error while accessing microphone & camera" : "Памылка доступу да мікрафона і камеры", + "Join conversations at any time, anywhere, on any device." : "Далучайцеся да размоў у любы час, у любым месцы і на любой прыладзе.", + "Android app" : "Праграма для Android", + "iOS app" : "Праграма для iOS", + "__language_name__" : "Беларуская", + "Tasks" : "Заданні", + "Notes" : "Нататкі", + "Reports" : "Справаздачы", + "Decisions" : "Рашэнні", + "Next meeting" : "Наступная сустрэча", + "Join conversations from remote Nextcloud servers" : "Далучайцеся да размоў з аддаленых сервераў Nextcloud", + "Set reminder for later today" : "Задаць напамін на пазней сёння", + "Set reminder for tomorrow" : "Задаць напамін на заўтра", + "Set reminder for this weekend" : "Задаць напамін на гэты ўік-энд", + "Set reminder for next week" : "Задаць напамін на наступны тыдзень", + "Open poll • You voted already" : "Адкрытае апытанне • Вы ўжо прагаласавалі", + "Open poll • Click to vote" : "Адкрытае апытанне • Націсніце, каб прагаласаваць", + "Poll • Ended" : "Апытанне • Завершана", + "Talk recording from {time} ({conversation})" : "Галасавое паведамленне ад {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Вынікі апытання • %n голас","Вынікі апытання • %n галасы","Вынікі апытання • %n галасоў","Вынікі апытання • %n галасоў"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Адкрыць апытанне • %n голас","Адкрыць апытанне • %n галасы","Адкрыць апытанне • %n галасоў","Адкрыць апытанне • %n галасоў"], + "Submit vote" : "Адправіць голас", + "Your privacy setting has been saved" : "Вашы налады прыватнасці захаваны", + "Your personal setting has been saved" : "Вашы асабістыя налады захаваны", + "Failed to save sounds setting" : "Не атрымалася захаваць налады гуку", + "Sounds setting saved" : "Налады гуку захаваны", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk абноўлена, вы не можаце пачаць або далучыцца да выкліку.", + "Nextcloud Talk was updated." : "Nextcloud Talk была абноўлена.", + "Nextcloud is in maintenance mode." : "Nextcloud знаходзіцца ў рэжыме тэхнічнага абслугоўвання." +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/bg.js b/l10n/bg.js new file mode 100644 index 0000000..0f336a2 --- /dev/null +++ b/l10n/bg.js @@ -0,0 +1,1382 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "разговор", + "(Duration %s)" : "(Продължителност %s)", + "You attended a call with {user1}" : "Присъствахте на разговор с {user1}", + "_%n guest_::_%n guests_" : ["%nгости ","%n гости"], + "You attended a call with {user1} and {user2}" : "Присъствахте на разговор с {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Присъствахте на разговор с {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Присъствахте на разговор с {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Присъствахте на разговор с {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["%nдруги ","%n други"], + "{actor} invited you to {call}" : "{actor} ви покани за {call}", + "You were invited to a conversation or had a call" : "Бяхте поканени на разговор или сте имали обаждане", + "Other activities" : "Други активности", + "Talk" : "Talk", + "Guest" : "Гост", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Safari вече могат да се използват за участие в аудио и видео разговори", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Разговорите един към един вече са постоянни и повече не могат да бъдат превърнати в групови разговори случайно. Също така, когато един от участниците напусне разговора, разговорът вече не се изтрива автоматично. Само ако и двамата участници напуснат, разговорът се изтрива от сървъра", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Вече можете да уведомявате всички участници, като публикувате „@all“ в чата", + "- With the \"arrow-up\" key you can repost your last message" : "- С клавиш \"стрелка нагоре\" можете да публикувате повторно последното си съобщение", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk вече може да има команди, изпращане \"/помощ\" като съобщение за чат, за да видите дали вашият администратор е конфигурирал някои", + "- With projects you can create quick links between conversations, files and other items" : "- С проекти можете да създавате бързи връзки между разговори, файлове и други елементи", + "- You can now mention guests in the chat" : "- Вече можете да споменавате гости в чата", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговорите вече могат да имат лоби. Това ще позволи на модераторите да се присъединят към чата и да се обаждат вече, за да подготвят срещата, докато потребителите и гостите трябва да изчакат", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Вече можете директно да отговаряте на съобщения, давайки на другите потребители повече контекст за какво е вашето съобщение", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "-Търсенето на разговори и участници вече също ще филтрира съществуващите ви разговори, което прави много по-лесно намирането на предишни разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Вече можете да добавяте персонализирани потребителски групи към разговорите, когато приложението circles /кръгове/ е инсталирано", + "- Check out the new grid and call view" : "- Проверете новата мрежа и изглед на обаждане", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Вече можете да качвате и да плъзгате и пускате файлове директно от вашето устройство в чата", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Споделените файлове вече се отварят директно в изгледа за чат с приложенията за преглед", + "- You can now search for chats and messages in the unified search in the top bar" : "- Вече можете да търсите чатове и съобщения в обединеното търсене в горната лента", + "- Spice up your messages with emojis from the emoji picker" : "- Подправете съобщенията си с емоджита от инструмента за избор на емоджи", + "- You can now change your camera and microphone while being in a call" : "- Вече можете да си сменяте камерата и микрофона, докато сте в разговор", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Дайте на разговорите си някакъв контекст с описание и го отворете, така че влезлите потребители да могат да го намерят и да се присъединят", + "- See a read status and send failed messages again" : "- Вижте състоянието на четене и изпратете отново неуспешно изпратени съобщения", + "- Raise your hand in a call with the R key" : "- Вдигнете ръката си при повикване с клавиша R", + "- Join the same conversation and call from multiple devices" : "- Присъединете се към същия разговор и се обаждайте от множество устройства", + "- Send voice messages, share your location or contact details" : "- Изпращайте гласови съобщения, споделяйте вашето местоположение или подробности за контакт", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Добавете групи към разговор и новите членове на групата автоматично ще бъдат добавени като участници", + "- A preview of your audio and video is shown before joining a call" : "- Показване на визуализация на вашето аудио и видео, преди да се присъедините към разговор", + "- You can now blur your background in the newly designed call view" : "- Вече можете да замъглите фона си в новият проект на изглед за разговори", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторите вече могат да задават общи и индивидуални права на участниците", + "- In the sidebar you can now find an overview of the latest shared items" : "- Вече можете да намерите общ преглед на най-новите споделени елементи в страничната лента", + "- Use a poll to collect the opinions of others or settle on a date" : "- Използвайте анкета, за събиране на мнението на другите или за определяне на дата", + "- Configure an expiration time for chat messages" : "- Конфигуриране на срок на валидност на съобщенията в чата", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Започвайте разговори, без да уведомявате другите участници в големи разговори. Можете да изпращате индивидуални известия за повиквания, след като повикването е започнало.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Изпращайте съобщения в чата, без да уведомявате получателите, в случай че не е спешно", + "- Emojis can now be autocompleted by typing a \":\"" : "- Емотиконите вече могат да се попълват автоматично чрез въвеждането на символа \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Свързване на различни елементи с помощта на новия интелигентен инструмент за избор чрез въвеждането на символа \"/\"", + "- Unsent message drafts are now saved in your browser" : "-Неизпратените чернови вече се съхраняват в браузъра", + "Talk updates ✅" : "Актуализации на Talk ✅", + "Reaction deleted by author" : "Реакцията е изтрита от автор", + "{actor} created the conversation" : "{actor} създаде разговора", + "You created the conversation" : "Вие създадохте разговор", + "An administrator created the conversation" : "Администратор създаде разговора", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} преименува разговора от „%1$s“ на „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вие преименувахте разговора от „%1$s“ на „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор преименува разговора от „%1$s“ на „%2$s“", + "{actor} set the description" : "{actor} зададе описанието", + "You set the description" : "Вие зададохте описанието", + "An administrator set the description" : "Администратор зададе описанието", + "{actor} removed the description" : "{actor} премахна описанието", + "You removed the description" : "Премахнахте описанието", + "An administrator removed the description" : "Администратор премахна описанието", + "You started a call" : "Вие започнахте разговор", + "{actor} started a call" : "{actor} започна обаждане", + "{actor} joined the call" : "{actor} се присъедини към разговора", + "You joined the call" : "Вие се присъединихте към разговора", + "{actor} left the call" : "{actor} напусна разговора", + "You left the call" : "Вие напуснахте разговора", + "{actor} unlocked the conversation" : "{actor} отключи разговора", + "You unlocked the conversation" : "Вие отключихте разговора", + "An administrator unlocked the conversation" : "Администратор отключи разговора", + "{actor} locked the conversation" : "{actor} заключи разговора", + "You locked the conversation" : "Вие заключихте разговора", + "An administrator locked the conversation" : "Администратор заключи разговора", + "{actor} limited the conversation to the current participants" : "{actor} ограничи разговора до настоящите участници", + "You limited the conversation to the current participants" : "Вие ограничихте разговора до настоящите участници", + "An administrator limited the conversation to the current participants" : "Администратор ограничи разговора до настоящите участници", + "{actor} opened the conversation to registered users" : "{actor} отвори разговора за регистрирани потребители", + "You opened the conversation to registered users" : "Отворихте разговора за регистрирани потребители", + "An administrator opened the conversation to registered users" : "Администратор отвори разговора за регистрирани потребители", + "The conversation is now open to everyone" : "Разговорът вече е отворен за всички", + "{actor} opened the conversation to everyone" : "{actor} отвори разговора за всички", + "You opened the conversation to everyone" : "Вие отворихте разговора за всички", + "{actor} restricted the conversation to moderators" : "{actor} ограничи разговора само за модератори", + "You restricted the conversation to moderators" : "Вие ограничихте разговора само за модератори", + "{actor} started breakout rooms" : "{actor} стартира стаите за отделно събрание", + "You started breakout rooms" : "Вие стартирахте стаите за отделно събрание", + "{actor} stopped breakout rooms" : "{actor} спря стаите за отделно събрание", + "You stopped breakout rooms" : "Вие спряхте стаите за отделно събрание", + "{actor} allowed guests" : "{actor} допусна гости ", + "You allowed guests" : "Допуснахте гости", + "An administrator allowed guests" : "Администратор допусна гости", + "{actor} disallowed guests" : "{actor} забрани гости", + "You disallowed guests" : "Вие забранихте гости", + "An administrator disallowed guests" : "Администратор забрани гости", + "{actor} set a password" : "{actor} зададе парола", + "You set a password" : "Зададохте парола", + "An administrator set a password" : "Администратор зададе парола", + "{actor} removed the password" : "{actor} премахна парола", + "You removed the password" : "Премахнахте парола", + "An administrator removed the password" : "Администратор премахна парола", + "{actor} added {user}" : "{actor} добави {user}", + "You joined the conversation" : "Вие се присъединихте към разговора", + "{actor} joined the conversation" : "{actor} се присъедини към разговора", + "You added {user}" : "Добавихте {user}", + "{actor} added you" : "{actor} ви добави", + "An administrator added you" : "Администратор ви добави", + "An administrator added {user}" : "Администратор добави {user}", + "You left the conversation" : "Напуснахте разговора", + "{actor} left the conversation" : "{actor} напусна разговора", + "{actor} removed {user}" : "{actor} премахна {user}", + "You removed {user}" : "Премахнахте {user}", + "{actor} removed you" : "{actor} ви премахна", + "An administrator removed you" : "Администратор ви премахна", + "An administrator removed {user}" : "Администратор премахна {user}", + "{federated_user} accepted the invitation" : "{federated_user} прие поканата", + "{actor} removed {federated_user}" : "{actor} премахна {federated_user}", + "You removed {federated_user}" : "Премахнахте {federated_user}", + "An administrator removed {federated_user}" : "Администратор премахна {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} отказа поканата", + "{actor} added group {group}" : "{actor} добави група {group}", + "You added group {group}" : "Добавихте група {group}", + "An administrator added group {group}" : "Администратор добави група {group}", + "{actor} removed group {group}" : "{actor} премахна група {group}", + "You removed group {group}" : "Премахнахте група {group}", + "An administrator removed group {group}" : "Администратор премахна група {group}", + "{actor} promoted {user} to moderator" : "{actor} повиши {user} до модератор", + "You promoted {user} to moderator" : "Повишихте {user} до модератор", + "{actor} promoted you to moderator" : "{actor} ви повиши до модератор", + "An administrator promoted you to moderator" : "Администратор ви повиши до модератор", + "An administrator promoted {user} to moderator" : "Администратор повиши {user} до модератор", + "{actor} demoted {user} from moderator" : "{actor} понижи {user} от модератор", + "You demoted {user} from moderator" : "Понижихте {user} от модератор", + "{actor} demoted you from moderator" : "{actor} ви понижи от модератор", + "An administrator demoted you from moderator" : "Администратор ви понижи от модератор", + "An administrator demoted {user} from moderator" : "Администратор понижи {user} от модератор", + "{actor} shared a file which is no longer available" : "{actor} сподели файл, който вече не е наличен", + "You shared a file which is no longer available" : "Споделихте файл, който вече не е наличен", + "The shared location is malformed" : "Споделеното местоположение е формирано неправилно ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} настрои Matterbridge да синхронизира този разговор с други чатове", + "You set up Matterbridge to synchronize this conversation with other chats" : "Настроихте Matterbridge да синхронизира този разговор с други чатове", + "{actor} updated the Matterbridge configuration" : "{actor} актуализира конфигурацията на Matterbridge", + "You updated the Matterbridge configuration" : "Вие актуализирахте конфигурацията на Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} премахна конфигурацията на Matterbridge", + "You removed the Matterbridge configuration" : "Премахнахте конфигурацията на Matterbridge", + "{actor} started Matterbridge" : "{actor} стартира Matterbridge", + "You started Matterbridge" : "Вие стартирахте Matterbridge", + "{actor} stopped Matterbridge" : "{actor} спря Matterbridge", + "You stopped Matterbridge" : "Спряхте Matterbridge", + "{actor} deleted a message" : "{actor} изтри съобщение", + "You deleted a message" : "Изтрихте съобщение", + "{actor} deleted a reaction" : "{actor} изтри реакция", + "You deleted a reaction" : "Изтрихте реакция", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Зададохте изтичане на съобщението след %n седмици","Зададохте изтичане на съобщението на %n седмици"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Зададохте изтичане на съобщението след %n дни","Зададохте изтичане на съобщението след %n дни"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Зададохте изтичане на съобщението след %n часа","Зададохте изтичане на съобщението след %n часа"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Зададохте изтичане на съобщението след %n минути","Зададохте изтичане на съобщението след %n минути"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} зададе изтичането на съобщението след %n седмици","{actor} зададе изтичането на съобщението след %n седмици"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} зададе изтичането на съобщението след %n дни","{actor} зададе изтичането на съобщението след %n дни"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} зададе изтичането на съобщението след %n часа","{actor} зададе изтичането на съобщението след %n дни"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} зададе изтичането на съобщението след %n минути","{actor} зададе изтичането на съобщението след %n минути"], + "{actor} disabled message expiration" : "{actor} деактивира изтичането на съобщението", + "You disabled message expiration" : "Деактивирахте изтичането на съобщението", + "{actor} cleared the history of the conversation" : "{actor} изчисти историята на разговора", + "You cleared the history of the conversation" : "Изчистихте историята на разговора", + "{actor} set the conversation picture" : "{actor} зададе снимка на разговора", + "You set the conversation picture" : "Вие зададохте снимка на разговора", + "{actor} removed the conversation picture" : "{actor} премахна снимката на разговора", + "You removed the conversation picture" : "Вие премахнахте снимката на разговора", + "{actor} ended the poll {poll}" : "{actor} прекрати анкетата {poll}", + "You ended the poll {poll}" : "Вие прекратихте анкетата {poll}", + "{actor} started the video recording" : "{actor} стартира видеозапис", + "You started the video recording" : "Вие стартирахте видеозапис", + "{actor} stopped the video recording" : "{actor} спря видеозаписа", + "You stopped the video recording" : "Вие спряхте видеозаписа", + "{actor} started the audio recording" : "{actor} стартира аудиозапис", + "You started the audio recording" : "Вие стартирахте аудиозапис", + "{actor} stopped the audio recording" : "{actor} спря аудиозаписа", + "You stopped the audio recording" : "Вие спряхте аудиозаписа", + "The recording failed" : "Записването е неуспешно", + "Someone voted on the poll {poll}" : "Някой гласува в анкетата {poll}", + "Message deleted by author" : "Съобщението е изтрито от автора", + "Message deleted by {actor}" : "Съобщението е изтрито от {actor}", + "Message deleted by you" : "Съобщение, изтрито от вас", + "Deleted user" : "Изтрит потребител", + "Administration" : "Администрация", + "System" : "Система", + "%s (guest)" : "%s (гост)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} прекрати разговора с %n гости (продължителност {duration})","{actor} прекрати разговора с %n гости (Продължителност {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} прекрати разговора с {user1} (Продължителност {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} прекрати разговора с {user1} и {user2} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2} и {user3} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2}, {user3} и {user4} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2}, {user3}, {user4} и {user5} (Продължителност {duration})", + "Message of {user} in {conversation}" : "Съобщение на {user} в {conversation}", + "Message of {user}" : "Съобщение на {user}", + "Message of a deleted user in {conversation}" : "Съобщение на изтрит потребител в {conversation}", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Говорене с %s", + "An error occurred. Please contact your administrator." : "Възникна грешка. Моля, свържете се с вашия администратор.", + "File not found" : "Файлът не е намерен", + "File is not shared, or shared but not with the user" : "Файлът не се споделя или се споделя, но не и с потребителя", + "No account available to delete." : "Няма достъпен профил за изтриване.", + "Poll" : "Анкета", + "No image file provided" : "Не е предоставен файл с изображение", + "File is too big" : "Файлът е твърде голям", + "Invalid file provided" : "Предоставен е невалиден файл", + "Invalid image" : "Невалидно изображение", + "Unknown filetype" : "Неизвестен тип файл", + "Talk mentions" : "Споменавания в Talk", + "Say hi to your friends and colleagues!" : "Поздравете приятелите и колегите си!", + "No unread mentions" : "Няма непрочетени споменавания", + "Call in progress" : "В ход е обаждане", + "You were mentioned" : "Вие бяхте споменати", + "Write to conversation" : "Записване към разговор", + "Writes event information into a conversation of your choice" : "Записва информация за събитието в разговор по ваш избор", + "Conversation invitation" : "Покана за разговор", + "Description" : "Описание", + "You can also dial-in via phone with the following details" : "Можете също да наберете по телефона със следните подробности", + "Dial-in information" : "Информация за набиране", + "Meeting ID" : "Идентификатор на срещата", + "Your PIN" : "Вашият ПИН", + "Meeting" : "Среща", + "Password request: %s" : "Заявка за парола %s", + "Private conversation" : "Частен разговор", + "Deleted user (%s)" : "Изтрит потребител (%s)", + "Failed to upload call recording" : "Неуспешно качване на запис на обаждане/то/", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Записващият сървър не успя да качи записа на обаждането {call}. Моля, свържете се с администрацията.", + "Share to chat" : "Споделяне в чата", + "Dismiss notification" : "Спри известията", + "Call recording now available" : "Записването на обаждане е налично", + "The recording for the call in {call} was uploaded to {file}." : "Записът на разговора в {call}, беше качен в {file}.", + "Transcript now available" : "Вече е налична транскрипция", + "The transcript for the call in {call} was uploaded to {file}." : "Транскрипцията на разговора в {call}, беше качена в {file}.", + "Failed to transcript call recording" : "Неуспешнa транскрипция на записa на обаждането", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сървърът не успя да направи транскрипция на записа в {file} за повикването в {call}. Моля, свържете се с администрацията.", + "Accept" : "Приемам", + "Decline" : "Отхвърляне", + "New message" : "Ново съобщение", + "Reminder" : "Напомняне", + "Notification" : "Известие", + "{user} in {call}" : "{user} в {call}", + "Deleted user in {call}" : "Изтрит потребител в {call}", + "{guest} (guest) in {call}" : "{guest} (guest) в {call}", + "Guest in {call}" : "Гост в {call}", + "{user} sent you a private message" : "{user} ви изпрати лично съобщение", + "{user} sent a message in conversation {call}" : "{user} изпрати съобщение в разговор {call}", + "A deleted user sent a message in conversation {call}" : "Изтрит потребител изпрати съобщение в разговор {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гост) изпрати съобщение в разговор {call}", + "A guest sent a message in conversation {call}" : "Гост изпрати съобщение в разговор {call}", + "{user} replied to your private message" : "{user} отговори на вашето лично съобщение", + "{user} replied to your message in conversation {call}" : "{user} отговори на вашето съобщение в разговор {call}", + "A deleted user replied to your message in conversation {call}" : "Изтрит потребител отговори на съобщението ви в разговор {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гост) отговори на съобщението ви в разговор {call}", + "A guest replied to your message in conversation {call}" : "Гост отговори на съобщението ви в разговор {call}", + "{user} reacted with {reaction} to your private message" : "{user} реагира с {reaction} на вашето лично съобщение", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} реагира с {reaction} на вашето съобщение в разговор {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Изтрит потребител реагира с {reaction} на вашето съобщение в разговор {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гост) реагира с {reaction} на вашето съобщение в разговор {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гост реагира с {reaction} на вашето съобщение в разговор {call}", + "{user} mentioned you in a private conversation" : "{user} ви спомена в личен разговор", + "{user} mentioned group {group} in conversation {call}" : "{user} спомена група {group} в разговор {call}", + "{user} mentioned everyone in conversation {call}" : "{user} спомена всички в разговор {call}", + "{user} mentioned you in conversation {call}" : "{user} ви спомена в разговор {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Изтрит потребител спомена група {group} в разговор {call}", + "A deleted user mentioned everyone in conversation {call}" : "Изтрит потребител спомена всички в разговор {call}", + "A deleted user mentioned you in conversation {call}" : "Изтрит потребител ви спомена в разговор {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гост) спомена група {group} в разговор {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гост) спомена всички в разговор {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гост) ви спомена в разговор {call}", + "A guest mentioned group {group} in conversation {call}" : "Гост спомена група {group} в разговор {call}", + "A guest mentioned everyone in conversation {call}" : "Гост спомена всички в разговор {call}", + "A guest mentioned you in conversation {call}" : "Гост ви спомена в разговор {call}", + "View chat" : "Преглед на чата", + "{user} invited you to a group conversation: {call}" : "{user} ви покани в групов разговор: {call}", + "Join call" : "Присъединяване към обаждането", + "Answer call" : "Отговаряне на обаждане", + "{user} would like to talk with you" : "{user} би искал да говори с вас", + "Call back" : "Върнете обаждането", + "You missed a call from {user}" : "Пропуснахте обаждане от {user}", + "A group call has started in {call}" : "Започна групово обаждане в {call}", + "You missed a group call in {call}" : "Пропуснахте групово обаждане в {call}", + "{email} is requesting the password to access {file}" : "{email} поиска паролата за достъп до {file}", + "{email} tried to request the password to access {file}" : "{email} се опита да поиска паролата за достъп до {file}", + "Someone is requesting the password to access {file}" : "Някой иска паролата за достъп до {file}", + "Someone tried to request the password to access {file}" : "Някой се опита да поиска паролата за достъп до {file}", + "Open settings" : "Отваряне на настройките", + "The hosted signaling server is now configured and will be used." : "Хостваният сървър за сигнализация вече е конфигуриран и ще се използва.", + "The hosted signaling server was removed and will not be used anymore." : "Хостваният сървър за сигнализиране е премахнат и няма да се използва повече.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Профил на хоствания сървър за сигнализация промени състоянието от „{oldstatus}“ на „{newstatus}“.", + "error" : "грешка", + "Contact via Talk" : "Свързване чрез Talk", + "Open Talk" : "Отваряне на Talk", + "Default" : "Стандартен", + "Presentation" : "Презентация", + "Conversations" : "Разговори", + "{user}" : "{user}", + "Messages" : "Съобщения", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Съобщения в други разговори", + "One-to-one rooms always need to show the other users avatar" : "В индивидуалните стаи винаги трябва да се показва аватарът на другия потребител", + "Avatar image is not square" : "Изображението на аватара не е квадратно", + "Room {number}" : "Стая {number}", + "Other" : "Други", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Неуспешна заявка за изпробване, защото пробният сървър е недостъпен. Моля, опитайте отново по-късно.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Има проблем с удостоверяването на този екземпляр. Може би не е достъпен отвън, за да се провери URL адресът му.", + "Something unexpected happened." : "Случи се нещо неочаквано.", + "The URL is invalid." : "URL адресът е невалиден.", + "An HTTPS URL is required." : "Нужно е HTTPS URL.", + "The email address is invalid." : "Имейл адресът е невалиден.", + "The language is invalid." : "Езикът е невалиден.", + "The country is invalid." : "Държавата е невалидна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Има проблем със заявката на процеса. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "Too many requests are send from your servers address. Please try again later." : "От адреса на вашия сървър се изпращат твърде много заявки. Моля, опитайте отново по-късно.", + "There is already a trial registered for this Nextcloud instance." : "Вече има регистрирано изпробване за този екземпляр на Nextcloud.", + "Something unexpected happened. Please try again later." : "Случи се нещо неочаквано. Моля, опитайте отново по-късно.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Неуспешна заявка за изпробване, защото пробният сървър се държеше неправилно. Моля, опитайте отново по-късно.", + "Trial requested but failed to get account information. Please check back later." : "Беше заявено изпробване, но не се получи информация за профил. Моля, проверете отново по-късно.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Има проблем с удостоверяването на тази заявка. Може би не е достъпна отвън, за да се провери URL адресът и.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Неуспешно извличане на информация за профил, защото пробният сървър се държеше неправилно. Моля, проверете отново по-късно.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Има проблем с извличането на информацията за профил. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "There is no such account registered." : "Няма регистриран такъв профил.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Неуспешно извличане на информация за профил, защото пробният сървър е недостъпен. Моля, проверете отново по-късно.", + "Deleting the hosted signaling server account failed. Please check back later." : "Изтриването на профил на хоствания сървър за сигнализация не бе успешно. Моля, проверете отново по-късно.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Изтриването на профил не бе успешно, защото пробният сървър се държеше неправилно. Моля, проверете отново по-късно.", + "There is a problem with deleting the account. Please check your logs for further information." : "Има проблем с изтриването на профил. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "Too many requests are sent from your servers address. Please try again later." : "От адреса на вашия сървър се изпращат твърде много заявки.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Изтриването на профил не беше успешно, защото пробният сървър е недостъпен. Моля, проверете отново по-късно.", + "Andorra" : "Андора", + "United Arab Emirates" : "Обединени арабски емирства", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа и Барбуда", + "Anguilla" : "Ангила", + "Albania" : "Албания", + "Armenia" : "Армения", + "Angola" : "Ангола", + "Antarctica" : "Антарктида", + "Argentina" : "Аржентина", + "American Samoa" : "Американска Самоа", + "Austria" : "Австрия", + "Australia" : "Австралия", + "Aruba" : "Аруба", + "Åland Islands" : "Оландски острови", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгия", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "България", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сен Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливия", + "Bonaire, Sint Eustatius and Saba" : "отвъдморски територии на Нидерландия", + "Brazil" : "Бразилия", + "Bahamas" : "Бахамски острови", + "Bhutan" : "Бутан", + "Bouvet Island" : "остров Буве", + "Botswana" : "Ботсуана", + "Belarus" : "Беларус", + "Belize" : "Белийз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосови строви (Кийлинг)", + "Congo, the Democratic Republic of the" : "Конго", + "Central African Republic" : "Централноафриканска република", + "Congo" : "Конго", + "Switzerland" : "Швейцария", + "Côte d'Ivoire" : "Кот д’Ивоар", + "Cook Islands" : "Oстрови Кук", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Китай", + "Colombia" : "Колумбия", + "Costa Rica" : "Коста Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "остров Рождество", + "Cyprus" : "Кипър", + "Czechia" : "Чехия", + "Germany" : "Германия", + "Djibouti" : "Джибути", + "Denmark" : "Дания", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естония", + "Egypt" : "Египет", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритрея", + "Spain" : "Испания", + "Ethiopia" : "Етиопия", + "Finland" : "Финландия", + "Fiji" : "Фиджи", + "Falkland Islands (Malvinas)" : "Фолкландски острови (Малдиви)", + "Micronesia, Federated States of" : "Микронезия", + "Faroe Islands" : "Фарьорски острови", + "France" : "Франция", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Обединено кралство", + "Grenada" : "Гренада", + "Georgia" : "Грузия", + "French Guiana" : "Френска Гвиана", + "Guernsey" : "Гърнзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренландия", + "Gambia" : "Гамбия", + "Guinea" : "Гвинея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Екваториална Гвинея", + "Greece" : "Гърция", + "South Georgia and the South Sandwich Islands" : "Южна Джорджия и Южни Сандвичеви острови", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинея Бисау", + "Guyana" : "Гвиaна", + "Hong Kong" : "Хонконг", + "Heard Island and McDonald Islands" : "Хърд и Макдоналд", + "Honduras" : "Хондурас", + "Croatia" : "Хърватия", + "Haiti" : "Хаити", + "Hungary" : "Унгария", + "Indonesia" : "Индонезия", + "Ireland" : "Ирландия", + "Israel" : "Израел", + "Isle of Man" : "Остров Ман", + "India" : "Индия", + "British Indian Ocean Territory" : "Британска индоокеанска територия", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран", + "Iceland" : "Исландия", + "Italy" : "Италия", + "Jersey" : "Джърси", + "Jamaica" : "Ямайка", + "Jordan" : "Йордания", + "Japan" : "Япония", + "Kenya" : "Кения", + "Kyrgyzstan" : "Киргизстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кирибати", + "Comoros" : "Коморски острови", + "Saint Kitts and Nevis" : "Сейнт Китс и Невис", + "Korea, Democratic People's Republic of" : "Северна Корея", + "Korea, Republic of" : "Южна Корея", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманови острови", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сейнт Лусия", + "Liechtenstein" : "Лихтенщайн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерия", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвия", + "Libya" : "Либия", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Черна гора", + "Saint Martin (French part)" : "Сен Мартен", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалови острови", + "North Macedonia" : "Северна Македония", + "Mali" : "Мали", + "Myanmar" : "Мианмар", + "Mongolia" : "Монголия", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северни Мариански острови", + "Martinique" : "Мартиника", + "Mauritania" : "Мавритания", + "Montserrat" : "Монсерат", + "Malta" : "Малта", + "Mauritius" : "Мавриций", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малайзия", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибия", + "New Caledonia" : "Нова Каледония", + "Niger" : "Нигер", + "Norfolk Island" : "Oстров Норфолк", + "Nigeria" : "Нигерия", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерландия", + "Norway" : "Норвегия", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуе", + "New Zealand" : "Нова Зеландия", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Френска Полинезия", + "Papua New Guinea" : "Папуа Нова Гвинея", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Полша", + "Saint Pierre and Miquelon" : "Сен Пиер и Микелон", + "Pitcairn" : "Oстрови Питкерн", + "Puerto Rico" : "Пуерто Рико", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалия", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюнион", + "Romania" : "Румъния", + "Serbia" : "Сърбия", + "Russian Federation" : "Русия", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудитска Арабия", + "Solomon Islands" : "Соломонови острови", + "Seychelles" : "Сейшелски острови", + "Sudan" : "Судан", + "Sweden" : "Швеция", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Елена, Възнесение и Тристан да Куня", + "Slovenia" : "Словения", + "Svalbard and Jan Mayen" : "Свалбард и Ян Майен", + "Slovakia" : "Словакия", + "Sierra Leone" : "Сиера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалия", + "Suriname" : "Суринам", + "South Sudan" : "Южен Судан", + "Sao Tome and Principe" : "Сао Томе и Принсипи", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Сен Мартен", + "Syrian Arab Republic" : "Сирия", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Търкс и Кайкос", + "Chad" : "Чад", + "French Southern Territories" : "Френски южни и антарктически територии", + "Togo" : "Того", + "Thailand" : "Тайланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Източен Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турция", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайван, провинция Китай ", + "Tanzania, United Republic of" : "Танзания", + "Ukraine" : "Украйна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малки отдалечени острови на Съединените щати", + "United States of America" : "Съединени щати", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Свети престол", + "Saint Vincent and the Grenadines" : "Сейнт Винсънт и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела", + "Virgin Islands, British" : "Британски Вирджински острови", + "Virgin Islands, U.S." : "Американски Вирджински острови", + "Viet Nam" : "Виетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уолис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майот", + "South Africa" : "Южна Африка", + "Zambia" : "Замбия", + "Zimbabwe" : "Зимбабве", + "Federation" : "Федерация", + "High-performance backend" : "Високопроизводителен сървър", + "Error: Cannot connect to server" : "Грешка: Невъзможно свързване със сървъра", + "Error: Server did not respond with proper JSON" : "Грешка: Сървърът не отговори с правилен JSON", + "Could not get version" : "Не можа да се получи версията", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Грешка: Използвана версия: {version}; Сървърът трябва да бъде актуализиран, за да бъде съвместим с тази версия на приложението Talk", + "Error: Server responded with: {error}" : "Грешка: Сървърът отговори с: {error}", + "Error: Unknown error occurred" : "Грешка: Възникна неизвестна грешка", + "Recording backend" : "Записващ сървър", + "SIP configuration" : "SIP конфигурация", + "Invalid date, date format must be YYYY-MM-DD" : "Невалидна дата, форматът е различен от ГГГГ-ММ-ДД", + "Conversation not found" : "Разговорът не е намерен", + "Chat, video & audio-conferencing using WebRTC" : "Чат, видео и аудио-конферентна връзка с помощта на WebRTC", + "Leave call" : "Напускане на обаждането", + "Navigating away from the page will leave the call in {conversation}" : "Навигирането извън страницата ще остави обаждането в {conversation}", + "Stay in call" : "Оставене в обаждането", + "Discuss this file" : "Обсъждане на този файл", + "Share this file with others to discuss it" : "Споделете този файл с други, за да го обсъдите", + "Share this file" : "Споделяне на този файл", + "Join conversation" : "Присъединяване към разговора", + "This conversation is password-protected." : "Този разговор е защитен с парола.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Открихме множество опити с невалидна парола от вашия IP. Следователно следващият ви опит се ограничава за 30 секунди.", + "The password is wrong. Try again." : "Паролата е грешна. Опитайте отново.", + "Password" : "Парола", + "Submit" : "Изпращане", + "Error requesting the password." : "Грешка при заявяване на паролата.", + "Request password" : "Заявка за парола", + "This conversation has ended" : "Този разговор е приключил", + "Error occurred when joining the conversation" : "Възникна грешка при присъединяване към разговора", + "Close Talk sidebar" : "Затваряне на страничната лента на Talk", + "Open Talk sidebar" : "Отворяне на страничната лента на Talk", + "Everyone" : "Всички", + "Users and moderators" : "Потребители и модератори", + "Moderators only" : "Само модератори", + "Disable calls" : "Деактивиране на обажданията", + "Save changes" : "Запиши промените", + "Saving …" : "Записване …", + "Saved!" : "Записано!", + "Limit to groups" : "Ограничен достъп", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Когато е избрана поне една група, само хората от изброените групи могат да участват в разговорите.", + "Guests can still join public conversations." : "Гостите все още могат да се присъединяват към публични разговори.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Потребителите, които вече не могат да използват Talk, ще продължат да бъдат броени като участници в предишните им разговори, а също и техните съобщения в чата ще бъдат запазени.", + "Limit using Talk" : "Ограничаване на използването на Talk", + "Limit creating a public and group conversation" : "Ограничете създаването на публичен и групов разговор", + "Limit creating conversations" : "Ограничете създаването на разговори", + "Limit starting a call" : "Ограничете започването на обаждане", + "Limit starting calls" : "Ограничете започващите обаждания", + "When a call has started, everyone with access to the conversation can join the call." : "Когато обаждането започне, всеки с достъп до разговора може да се присъедини към обаждането.", + "Enabled" : "Включено", + "Disabled" : "Изключено", + "State" : "Състояние", + "Name" : "Име", + "Beta" : "Бета", + "Permissions" : "Права", + "All messages" : "Всички съобщения", + "@-mentions only" : "@-само споменавания", + "Off" : "Изключен", + "General settings" : "Общи настройки", + "Default notification settings" : "Настройки на известие по подразбиране", + "Default group notification" : "Групово известие по подразбиране", + "Default group notification for new groups" : "Групово известие за нови групи по подразбиране", + "Integration into other apps" : "Интегриране в други приложения", + "Allow conversations on files" : "Разрешаване на разговори за файлове", + "Allow conversations on public shares for files" : "Разрешаване на разговори за публични споделяния на файлове", + "Enable encryption" : "Активиране на криптирането", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "С натискане на горния бутон, информацията във формуляра се изпраща към сървърите на Struktur AG. Можете да намерите допълнителна информация на {linkstart}spreed.eu{linkend}.", + "Pending" : "Чакащо", + "Error" : "Грешка", + "Blocked" : "Блокира", + "Active" : "Активен", + "Expired" : "Изтекъл", + "Never" : "Никога", + "The trial could not be requested. Please try again later." : "Не можа да се поиска изпробване. Моля, опитайте отново по-късно.", + "The account could not be deleted. Please try again later." : "Профилът не можа да бъде изтрит. Моля, опитайте отново по-късно.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Нашият партньор Struktur AG предоставя услуга, при която може да бъде заявен хостван сървър за сигнализация. За това трябва само да попълните формуляра по-долу и вашият Nextcloud ще го заяви След като сървърът е настроен за вас, вашите идентификационни данни ще бъдат попълнени автоматично. Това ще презапише съществуващите настройки на сървъра за сигнализация.", + "URL of this Nextcloud instance" : "URL на този екземпляр на Nextcloud", + "Full name of the user requesting the trial" : "Пълно име на потребителя, който иска изпробването", + "Email of the user" : "Имейл на потребителя", + "Language" : "Език", + "Country" : "Държава", + "Request signaling server trial" : "Заявка зс изпробване на сървъра за сигнализиране", + "You can see the current status of your hosted signaling server in the following table." : "Можете да видите текущото състояние на вашия хостван сигнализиращ сървър в следващата таблица.", + "Status" : "Състояние", + "Created at" : "Създаден на", + "Expires at" : "Изтича в", + "Limits" : "Ограничения", + "Yes" : "Да", + "No" : "Не", + "Delete the signaling server account" : "Изтриване на профил на сигналния сървър", + "_%n user_::_%n users_" : ["%n потребители","%n потребители"], + "Installed version: {version}" : "Инсталирана версия: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Можете да инсталирате Matterbridge, за да свържете Nextcloud Talk с някои други услуги, посетете тяхната {linkstart1}страница на GitHub{linkend} за повече подробности. Изтеглянето и инсталирането на приложението може да отнеме известно време. В случай, че то изтече, моля, инсталирайте го ръчно от {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Двоичният файл Matterbridge не е намерен или не може да бъде изпълнен.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Можете също да зададете пътя към двоичния файл Matterbridge ръчно чрез конфигурацията. Проверете {linkstart}документацията за интеграция на Matterbridge{linkend} за повече информация.", + "Downloading …" : "Изтегляне …", + "Install Talk Matterbridge" : "Инсталиране на Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Възникна грешка при инсталирането на приложението Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Възникна грешка при инсталирането на Talk Matterbridge. Моля, инсталирайте го ръчно", + "Failed to execute Matterbridge binary." : "Неуспешно изпълнение на двоичен файл Matterbridge.", + "Matterbridge integration" : "Интеграция на Matterbridge", + "Enable Matterbridge integration" : "Активиране на интеграцията на Matterbridge", + "Status: Checking connection" : "Състояние: Проверка на връзката", + "OK: Running version: {version}" : "ОК: Работна версия: {version}", + "Recording backend URL" : "URL адрес на записващ бекенд сървър", + "Validate SSL certificate" : "Проверка на SSL сертификата", + "Delete this server" : "Изтриване на този сървър", + "Test this server" : "Тествайте този сървър", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Настройките на PHP „upload_max_filesize“/качване_макс_размернафайл/ или „post_max_size“ /публикуване_макс_размер/ ще позволят само качване на файлове до {maxUpload}.", + "Recording backend settings saved" : "Настройките на записващия бекенд сървър са запазени", + "Add a new recording backend server" : "Добавяне на нов записващ бекенд сървър", + "Shared secret" : "Споделена тайна", + "SIP configuration saved!" : "SIP конфигурацията е запазена!", + "Restrict SIP configuration" : "Ограничаване на SIP конфигурацията", + "Enable SIP configuration" : "Активиране на SIP конфигурацията", + "Only users of the following groups can enable SIP in conversations they moderate" : "Само потребители от следните групи могат да активират SIP в разговорите, които модерират", + "Phone number (Country)" : "Телефонен номер (държава)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Тази информация се изпраща в имейли с покани, също така се показва в страничната лента на всички участници.", + "Error code" : "Код за грешка", + "High-performance backend URL" : "URL адрес на високопроизводителен сървър", + "High-performance backend settings saved" : "Настройките на бекенд сървъра с висока производителност са запазени", + "STUN server URL" : "URL на STUN сървъра", + "The server address is invalid" : "Адресът на сървъра е невалиден", + "STUN settings saved" : "Настройките на STUN са запазени", + "STUN servers" : "STUN сървъри", + "A STUN server is used to determine the public IP address of participants behind a router." : "Сървърът STUN се използва за определяне на публичния IP адрес на участниците зад рутер.", + "Add a new STUN server" : "Добавяне на нов STUN сървър", + "{schema} scheme must be used with a domain" : "Схемата {schema} трябва да се използва с домейн", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Успешни ICE кандидати, върнати от TURN сървъра", + "Error: No working ICE candidates returned by the TURN server" : "Грешка: Няма работещи ICE кандидати, върнати от TURN сървъра", + "Testing whether the TURN server returns ICE candidates" : "Тества се дали TURN сървърът връща ICE кандидати", + "TURN server schemes" : "Сървърни схеми TURN", + "TURN server URL" : "URL на TURN сървъра", + "TURN server secret" : "Тайна на сървъра TURN", + "TURN server protocols" : "Протоколи на TURN сървър", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сървър се използва за прокси трафик от участници зад защитна стена. Ако отделните участници не могат да се свържат с други, най-вероятно е нужен TURN сървър. Вижте {linkstart} тази документация {linkend} с инструкции за настройка.", + "TURN settings saved" : "Настройките на TURN са запазени", + "TURN servers" : "TURN сървъри", + "Add a new TURN server" : "Добавяне на нов TURN сървър", + "Failed" : "Неуспешно", + "OK" : "Добре", + "Checking …" : "Проверка ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Неуспешно: WebAssembly е деактивиран или не се поддържа в този браузър. Моля, активирайте WebAssembly или използвайте браузър с поддръжка за него, за да направите проверката.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Неуспех: файловете „wasm“ и „.tflite“ не са върнати правилно от уеб сървъра. Моля, проверете раздела „Системни изисквания“ в документацията на Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файловете „wasm“ и „.tflite“ са върнати правилно от уеб сървъра.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Изглежда, че конфигурацията на PHP и Apache не е съвместима. Моля, обърнете внимание, че PHP може да се използва само с модул MPM_PREFORK, а PHP-FPM може да се използва само с модул MPM_EVENT.", + "Web server setup checks" : "Проверки за настройка на уеб сървъра", + "Files required for virtual background can be loaded" : "Могат да се заредят файлове необходими за виртуалния фон", + "Assign participants to rooms" : "Зачисляване на участници към стаи", + "Configure breakout rooms" : "Конфигуриране на стаи за отделно събрание", + "Number of breakout rooms" : "Брой стаи за отделно събрание", + "Assignment method" : "Метод на задаване", + "Automatically assign participants" : "Автоматично зачисляване на участници", + "Manually assign participants" : "Ръчно зачисляване на участниците", + "Allow participants to choose" : "Позволяване на участниците да избират", + "Create rooms" : "Създаване на стаи", + "Confirm" : "Потвърдете", + "Create breakout rooms" : "Създаване на стаи за отделно събрание", + "Reset" : "Възстановяване", + "Delete breakout rooms" : "Изтриване на стаи за отделно събрание", + "Room {roomNumber}" : "Стая {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текущите стаи за отделно събрание и настройки ще бъдат изгубени", + "Cancel" : "Отказ", + "Unassigned participants" : "Незачислени участници", + "Back" : "Назад", + "Assign" : "Задаване на", + "Add participant \"{user}\"" : "Добавяне на участник „{user}“", + "Now" : "Сега", + "Loading …" : "Зареждане …", + "From" : "От", + "To" : "До", + "Calendar" : "Kалендар", + "Attendees" : "Участници", + "Save" : "Запазване", + "Search participants" : "Търсене на участници", + "No results" : "Няма резултати", + "Done" : "Завършено", + "Raise hand" : "Вдигане на ръка", + "Raise hand (R)" : "Вдигане на ръка (R)", + "Lower hand" : "Сваляне на ръка", + "Lower hand (R)" : "Сваляне на ръка (R)", + "Speaker view" : "Изглед на високоговорителя", + "Grid view" : "Решетъчен изглед", + "This conversation is read-only" : "Този разговор е само за четене", + "Reload" : "Презареди", + "{nickName} raised their hand." : "{nickName} вдигна ръка.", + "A participant raised their hand." : "Един участник вдигна ръка.", + "Collapse stripe" : "Свиване на лента", + "Expand stripe" : "Разширяване на лента", + "Previous page of videos" : "Предишна страница с видеоклипове", + "Next page of videos" : "Следваща страница с видеоклипове", + "Connecting …" : "Свързване ...", + "Waiting for {user} to join the call" : "Изчаква се {user} да се присъедини към обаждането", + "Waiting for others to join the call …" : "Изчаква се и други да се присъединят към обаждането ...", + "You can invite others in the participant tab of the sidebar" : "Можете да поканите други от раздела за участници в страничната лента", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете да поканите други от раздела за участници на страничната лента или да споделите тази връзка, за да поканите други!", + "Share this link to invite others!" : "Споделете тази връзка, за да поканите други!", + "Copy link" : "Копирай връзката", + "You are not allowed to enable audio" : "Нямате право да активирате аудио", + "No audio. Click to select device" : "Няма аудио. Кликнете, за да изберете устройство", + "Mute audio" : "Спиране на звука", + "Mute audio (M)" : "Изключване на звука (M)", + "Unmute audio" : "Включване на звука", + "Unmute audio (M)" : "Включване на звука (M)", + "None" : "Без", + "Access to camera was denied" : "Беше отказан достъп до камера", + "Error while accessing camera: It is likely in use by another program" : "Грешка при достъп до камера: възможно е тя се използва от друга програма", + "Error while accessing camera" : "Грешка при достъп до камера", + "You have been muted by a moderator" : "Бяхте заглушен от модератор", + "You are not allowed to enable video" : "Нямате право да активирате видео", + "No video. Click to select device" : "Няма видео. Кликнете, за да изберете устройство", + "Disable video" : "Изключване на видеото", + "Disable video (V)" : "Изключване на видеото (V)", + "Enable video" : "Включи видео", + "Enable video (V)" : "Включване на видеото (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото - Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото (V) – Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото. Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "You" : "Ти", + "Mute" : "Заглушаване", + "Muted" : "Заглушен", + "Show screen" : "Показване на екрана", + "Stop following" : "Спрете да следвате", + "Connection could not be established …" : "Връзката не можа да бъде установена …", + "Connection was lost and could not be re-established …" : "Връзката се изгуби и не можа да бъде възстановена ...", + "Connection could not be established. Trying again …" : "Връзката не можа да бъде установена. Повторен опит …", + "Connection lost. Trying to reconnect …" : "Връзката е загубена. Опит за повторно свързване …", + "Connection problems …" : "Проблеми с връзката …", + "Collapse" : "Сгъване", + "Expand" : "Разгъване", + "You need to be logged in to upload files" : "Трябва да сте влезли, за да качвате файлове", + "Drop your files to upload" : "Пуснете вашите файлове, за да ги качите", + "Conversation messages" : "Съобщения за разговор", + "Scroll to bottom" : "Превъртане до долу", + "Post message" : "Публикуване на съобщение", + "Favorite" : "Любима", + "Date:" : "Дата:", + "Hide details" : "Скриване на подробностите", + "Show details" : "Показване на подробности", + "Error while updating conversation name" : "Грешка при актуализиране на името на разговора", + "Error while updating conversation description" : "Грешка при актуализиране на описанието на разговора", + "Enter a name for this conversation" : "Въведете име за този разговор", + "Edit conversation name" : "Редактиране на името на разговора", + "Edit conversation description" : "Редактиране на описанието на разговора", + "Enter a description for this conversation" : "Въвеждане на описание за този разговор", + "Picture" : "Снимка", + "Disable" : "Изключване", + "Enable" : "Включена", + "Breakout rooms" : "Стаи за отделно събрание", + "Manage breakout rooms" : "Управление на стаите за отделно събрание", + "Set up breakout rooms for this conversation" : "Създаване на стаи за отделно събрание за този разговор", + "Please select a valid PNG or JPG file" : "Моля, изберете валиден PNG или JPG файл", + "Choose" : "Изберете", + "The file must be a PNG or JPG" : "Файлът трябва да е във формат PNG или JPG", + "Default permissions modified for {conversationName}" : "Права по подразбиране са променени за {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не можаха да се променят права по подразбиране за {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Редактиране на права по подразбиране за участниците в този разговор. Тези настройки не засягат модераторите.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Всеки път, когато се променят права в този раздел, потребителските права, които са били зададени преди това на отделните участници, ще бъдат загубени.", + "All permissions" : "Всички права", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Участниците имат права да започнат разговор, да се присъединят към разговор, да активират аудио и видео и да споделят екран.", + "Restricted" : "Ограничен", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Участниците могат да се присъединяват към разговори, но не могат да активират аудио или видео, нито да споделят екран, докато модераторът ръчно не им предостави права.", + "Advanced permissions" : "Разширени права", + "Edit permissions" : "Редактиране на права", + "Conversation settings" : "Настройки за разговор", + "Basic Info" : "Основна информация", + "Personal" : "Личен", + "Moderation" : "Модериране /Наблюдаване/", + "Breakout Rooms" : "Стаи за Отделно събрание", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Зона на опасност", + "Leave conversation" : "Напускане на разговор", + "You need to promote a new moderator before you can leave the conversation" : "Трябва да повишите нов модератор, преди да можете да напуснете разговора", + "Delete conversation" : "Изтриване на разговора", + "Do you really want to delete \"{displayName}\"?" : "Наистина ли искате да изтриете „{displayName}“?", + "Error while deleting conversation" : "Грешка при изтриването на разговор", + "Delete all chat messages" : "Изтриване на всички съобщенията в чата", + "Do you really want to delete all messages in \"{displayName}\"?" : "Наистина ли искате да изтриете всички съобщения в „{displayName}“?", + "Error while clearing chat history" : "Грешка при изчистване на историята на чата", + "Be careful, these actions cannot be undone." : "Бъдете внимателни, тези действия не могат да бъдат отменени.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Веднъж след като разговорът бъде напуснат, за да се присъедините отново към затворен разговор, е необходима покана. Към отворен разговор може да се присъедините по всяко време.", + "Permanently delete this conversation." : "Изтриване на разговора за постоянно.", + "Delete chat messages" : "Изтриване на съобщенията в чата", + "Permanently delete all the messages in this conversation." : "Изтриване за постоянно на всички съобщения в този разговор.", + "_%n hour_::_%n hours_" : ["%n часа","%n часа"], + "_%n day_::_%n days_" : ["%n дни","%n дни"], + "_%n week_::_%n weeks_" : ["%n седмици","%n седмици"], + "Custom expiration time" : "Персонализиране на времето на изтичане", + "Message expiration disabled" : "Изтичането на съобщение е деактивирано", + "Message expiration set: {duration}" : "Зададено изтичане на съобщение: {duration}", + "Error when trying to set message expiration" : "Грешка при опит за задаване на краен срок на съобщението", + "Message expiration" : "Изтичане на съобщението", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Съобщенията в чата могат да изтекат след определено време. Забележка: Файловете, споделени в чата, няма да бъдат изтрити за собственика, но повече няма да бъдат споделяни в разговора.", + "Guest access" : "Достъп за гост", + "Allow guests to join this conversation via link" : "Разрешаване на гостите да се присъединят към този разговор чрез връзка", + "Password protection" : "Password protection", + "Set a password" : "Задаване на парола", + "Change password" : "Промяна на парола", + "Enter new password" : "Въвеждане на нова парола", + "Save password" : "Запиши паролата", + "Resend invitations" : "Повторно изпращане на покани", + "Error occurred when opening or limiting the conversation" : "Възникна грешка при отваряне или ограничаване на разговора", + "Open conversation to registered users, showing it in search results" : "Отваряне на разговора за регистрирани потребители, и показването му в резултатите от търсенето", + "Start time has been updated" : "Началният час е актуализиран ", + "Error occurred while updating start time" : "Възникна грешка при актуализиране на началния час", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Активирането на лобито ще премахне немодераторите от текущия разговор.", + "Enable lobby, restricting the conversation to moderators" : "Активиране на лобито и ограничаване на разговора за модераторите", + "Meeting start time" : "Начален час на срещата", + "Start time (optional)" : "Начален час (по избор)", + "Error occurred when locking the conversation" : "Възникна грешка при заключване на разговора", + "Error occurred when unlocking the conversation" : "Възникна грешка при отключване на разговора", + "Lock conversation" : "Заключване на разговор", + "This will also terminate the ongoing call." : "Това също ще прекрати текущото обаждане.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Заключване на разговора, за да се попречи на всеки да публикува съобщения или да започва обаждания", + "Edit" : "Променяне", + "More information" : "Повече информация", + "Delete" : "Изтриване", + "Add new bridged channel to current conversation" : "Добавяне на нов мостов канал към текущия разговор", + "unknown state" : "неизвестно състояние", + "running" : "в процес", + "not running, check Matterbridge log" : "не работи, проверка на журнал на Matterbridge", + "not running" : "не работи", + "Bridge saved" : "Мостът е запазен", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Можете да свързвате канали от различни системи за незабавни съобщения с Matterbridge.", + "More info on Matterbridge" : "Повече информация за Matterbridge", + "Enable bridge" : "Активиране на мост", + "Show Matterbridge log" : "Показване на журнал на Matterbridge", + "Log content" : "Съдържание на журнал", + "Notifications" : "Известия", + "Notify about calls in this conversation" : "Уведомяване за обаждания в този разговор", + "Important conversation" : "Важен разговор", + "SIP dial-in is now possible without PIN requirement" : "Вече е възможно SIP набиране без изискване за PIN", + "SIP dial-in is now enabled" : "SIP набирането вече е активирано", + "SIP dial-in is now disabled" : "SIP набирането вече е деактивирано", + "Error occurred when enabling SIP dial-in" : "Възникна грешка при активиране на SIP набиране", + "Error occurred when disabling SIP dial-in" : "Възникна грешка при деактивиране на SIP набиране", + "Phone and SIP dial-in" : "Набиране по телефон и SIP", + "Enable phone and SIP dial-in" : "Активиране на телефонно и SIP набиране", + "Allow to dial-in without a PIN" : "Разрешаване на набиране без ПИН", + "Join" : "Влез", + "Error while creating the conversation" : "Грешка при създаването на разговора", + "Unread mentions" : "Непрочетени споменавания", + "Create conversation" : "Създаване на разговор", + "Enter your name" : "Въведете вашето име", + "Mark as read" : "Маркирай като прочетено", + "Mark as unread" : "Маркирай като непрочетено", + "Remove from favorites" : "Премахни от любимите", + "Add to favorites" : "Добави към любимите", + "You need to promote a new moderator before you can leave the conversation." : "Трябва да повишите нов модератор, преди да можете да напуснете разговора.", + "Conversation actions" : "Действия при разговор", + "Home" : "Начало", + "Unread" : "Непрочетено", + "Alphabetically" : "По азбучен ред", + "No matches found" : "Няма намерени съвпадения", + "No conversations found" : "Няма намерени разговори", + "An error occurred while performing the search" : "Възникна грешка при извършване на търсенето", + "Conversation list" : "Списък с разговори", + "Unread messages" : "Непрочетени съобщения", + "New personal note" : "Нова лична бележка", + "Clear filter" : "Изчстиване на филтър", + "App settings" : "Настройки на приложението", + "Users" : "Потребители", + "Groups" : "Групи", + "Other sources" : "Други източници", + "Open conversations" : "Отворени разговори", + "No search results" : "Няма резултати от търсенето", + "Users and groups" : "Потребители и групи", + "The meeting will start soon" : "Срещата ще започне скоро", + "This meeting is scheduled for {startTime}" : "Тази среща е насрочена за {startTime}", + "You are currently waiting in the lobby" : "В момента изчаквате в лобито", + "Select microphone" : "Избор на микрофон", + "No microphone available" : "Няма наличен микрофон", + "Select camera" : "Избор на камера", + "No camera available" : "Няма налична камера", + "Test" : "Тест", + "Devices" : "Устройства", + "Backgrounds" : "Фонове", + "No audio" : "Без аудио", + "No camera" : "Без камера", + "Calls are not supported in your browser" : "Обажданията не се поддържат във вашия браузър", + "Access to microphone is only possible with HTTPS" : "Достъп до микрофона е възможен само с HTTPS", + "Access to microphone was denied" : "Беше отказан достъп до микрофон", + "Error while accessing microphone" : "Грешка при достъп до микрофон", + "Access to camera is only possible with HTTPS" : "Достъп до камера е възможен само с HTTPS", + "The call is being recorded." : "Разговорът се записва.", + "Select a file" : "Избор на файл", + "Invalid path selected" : "Предоставен е невалиден път до файл.", + "Blur" : "Замъгляване", + "Upload" : "Качване", + "Files" : "Файлове", + "The message has expired or has been deleted" : "Съобщението е изтекло или е изтрито", + "Cancel quote" : "Отказ на офертата", + "24 hours" : "24 часа", + "7 days" : "7 дни", + "Clear reminder – {timeLocale}" : "Премахни напомнянето - {timeLocale}", + "Add a reaction to this message" : "Добавяне на реакция към това съобщение", + "Reply" : "Отговори", + "More actions" : "Повече действия", + "Reply privately" : "Отговаряне на лично ", + "Edit message" : "Редактиране на съобщение", + "Copy message link" : "Копиране на връзката към съобщението", + "Go to file" : "Отидете до файла", + "Forward message" : "Препращане на съобщение", + "Translate" : "Превод", + "Close reactions menu" : "Затваряне на менюто за действия", + "React with {emoji}" : "Реагирайте с {emoji}", + "React with another emoji" : "Реагирайте с друг емотикон", + "Choose a conversation to forward the selected message." : "Изберете разговор, за да препратите избраното съобщение.", + "Error while forwarding message" : "Грешка при препращане на съобщение", + "The message has been forwarded to {selectedConversationName}" : "Съобщението е препратено до {selectedConversationName}", + "Dismiss" : "Отхвърляне", + "Go to conversation" : "Отиване на разговор", + "Detect language" : "Разпознаване на език", + "Send now" : "Изпратете сега", + "Message read by everyone who shares their reading status" : "Съобщение, прочетено от всеки, който споделя статуса си на четене", + "Message sent" : "Съобщението е изпратено", + "Deleting message" : "Съобщението се изтрива", + "Message deleted successfully" : "Съобщението е изтрито успешно", + "Message could not be deleted because it is too old" : "Съобщението не можа да бъде изтрито, защото е твърде старо", + "Only normal chat messages can be deleted" : "Само нормалните съобщения за чат могат да бъдат изтрити", + "An error occurred while deleting the message" : "Възникна грешка при изтриването на съобщението", + "Your browser does not support playing audio files" : "Вашият браузър не поддържа възпроизвеждане на аудио файлове", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} в {board}", + "Deck Card" : "Deck карта", + "Remove {fileName}" : "Премахване на {fileName}", + "Open this location in OpenStreetMap" : "Отвяне на това местоположение в OpenStreetMap", + "Sending message" : "Изпращане на съобщение", + "Failed to send the message. Click to try again" : "Изпращането на съобщението не беше успешно. Кликнете, за да опитате отново", + "Not enough free space to upload file" : "Няма достатъчно свободно място за качване на файл", + "You cannot send messages to this conversation at the moment" : "В момента не можете да изпращате съобщения до този разговор", + "You voted" : "Вие гласувахте", + "_%n vote_::_%n votes_" : ["%nгласувания ","%n гласувания"], + "See results" : "Вижте резултатите", + "No permission to post reactions in this conversation" : "Няма зададено право за публикуване на реакции в този разговор", + "Add more reactions" : "Добавяне на повече реакции", + "No messages" : "Няма съобщения.", + "All messages have expired or have been deleted." : "Всички съобщения са изтекли или са били изтрити.", + "Unpin" : "Отмяна на закачване", + "Cancel search" : "Отказване на търсенето", + "Create a new group conversation" : "Създаване на нов групов разговор", + "Add participants" : "Добавяне на участници", + "Conversation visibility" : "Видимост на разговора", + "Allow guests to join via link" : "Разрешете на гостите да се присъединят чрез връзка", + "Enter password" : "Въвеждане на парола", + "This conversation has been locked" : "Този разговор е заключен", + "No permission to post messages in this conversation" : "Няма право за публикуване на съобщения в този разговор", + "Joining conversation …" : "Присъединяване към разговора ...", + "Send message" : "Изпрати съобщение", + "Send without notification" : "Изпращане без известие", + "File to share" : "Файл за споделяне", + "Add emoji" : "Добавяне на емотикон", + "Send later" : "Изпратете по-късно", + "Cancel editing" : "Отказ на редактирането", + "Absence period: {startDate} - {endDate}" : "Период на отсъствие: {startDate} до {endDate}.", + "Share from {nextcloud}" : "Споделяне от {nextcloud}", + "Share from Files" : "Споделяне от файлове", + "Share files to the conversation" : "Споделяне на файлове в разговора", + "Upload from device" : "Качване от устройство", + "Create new poll" : "Създаване на нова анкета", + "Smart picker" : "Умно избиране", + "Record voice message" : "Запис на гласово съобщение", + "End recording and send" : "Край на записа и изпращане", + "Dismiss recording" : "Отхвърляне на записа", + "Access to the microphone was denied" : "Беше отказан достъп до микрофона", + "Microphone either not available or disabled in settings" : "Микрофонът или не е наличен, или е деактивиран в настройките", + "Error while recording audio" : "Грешка при запис на аудио", + "New file" : "Нов файл", + "Blank" : "Празен", + "Error while creating file" : "Грешка при създаване на файл", + "Create and share a new file" : "Създаване и споделяне на нов файл", + "Name of the new file" : "Име на новия файл", + "Create file" : "Създаване на файл", + "Add more files" : "Добавяне на още файлове ", + "Send" : "Изпрати", + "In this conversation {user} can:" : "В този разговор {user} може:", + "Edit default permissions for participants in {conversationName}" : "Редактиране на права по подразбиране за участниците в {conversationName}", + "Start a call" : "Започване на обаждане", + "Skip the lobby" : "Пропускане на лобито", + "Can post messages and reactions" : "Може да се публикуват съобщения и реакции", + "Enable the microphone" : "Активиране на микрофона", + "Enable the camera" : "Активиране на камера", + "Share the screen" : "Споделяне на екрана", + "Update permissions" : "Актуализиране на права", + "Updating permissions" : "Актуализират се права", + "There is no poll drafts yet saved for this conversation" : "Все още няма запаметени чернови на анкети за този разговор", + "Create poll" : "Създаване на анкета", + "Question" : "Въпрос", + "Ask a question" : "Задаване на въпрос", + "Answers" : "Отговори", + "Answer {option}" : "Отговор {option}", + "Delete poll option" : "Изтриване на опция за анкета", + "Add answer" : "Добавяне на отговор", + "Settings" : "Настройки", + "Anonymous poll" : "Анонимна анкета", + "Multiple answers" : "Множество отговори", + "You voted for this option" : "Гласували сте за тази опция", + "End poll" : "Край на анкетата", + "Change your vote" : "Променете гласуването си", + "Results" : "Резултати", + "Voted participants" : "Гласували участници", + "Send a message to \"{roomName}\"" : "Изпращане на съобщение до „{roomName}“", + "Hide list of participants" : "Скриване на списъка с участници", + "Show list of participants" : "Показване на списъка с участници", + "Assistance requested in {roomName}" : "Поискано е съдействие в {roomName}", + "The message was sent to \"{roomName}\"" : "Съобщението е изпратено до „{roomName}“", + "Dismiss request for assistance" : "Отхвърляне на заявка за съдействие", + "Send message to room" : "Изпращане на съобщение до стая", + "Back to main room" : "Обратно към основната стая", + "Back to your room" : "Обратно към вашата стая", + "Message all rooms" : "Съобщение до всички стаи", + "Start session" : "Начало на сесията", + "Start a call before you start a breakout room session" : "Започване на обаждане, преди да стартирате сесия в стая за отделно събрание", + "Stop session" : "Спиране на сесия", + "The message was sent to all breakout rooms" : "Съобщението е изпратено до всички стаи за отделно събрание", + "Send a message to all breakout rooms" : "Изпращане на съобщение до всички стаи за отделно събрание", + "Breakout rooms are not started" : "Стаите за отделно събрание не са стартирани", + "Disable lobby" : "Деактивиране на лоби", + "Settings for participant \"{user}\"" : "Настройки за участник „{user}“", + "Participant \"{user}\"" : "Участник „{user}“", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гост", + "Raised their hand" : "Вдигнаха ръка", + "Joined with video" : "Присъединен с видео", + "Joined via phone" : "Присъединен по телефона", + "Joined with audio" : "Присъединен с аудио", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текстът трябва да е по-малък или равен на {maxLength} знака. Текущият ви текст е дълъг {charactersCount} знака.", + "Remove group and members" : "Премахване на групата и на членовете", + "Remove participant" : "Премахване на участник", + "Notification was sent to {displayName}" : "Беше изпратено известие до {displayName}", + "Could not send notification to {displayName}" : "Не можа да се изпрати известие до {displayName}", + "Permissions granted to {displayName}" : "Дадоха се права на {displayName}", + "Could not modify permissions for {displayName}" : "Не можаха да се променят права за {displayName}", + "Permissions removed for {displayName}" : "Премахнати са права за {displayName}", + "Permissions set to default for {displayName}" : "Зададени са права по подразбиране за {displayName}", + "Dial-in PIN" : "ПИН за набиране", + "Demote from moderator" : "Понижаване от модератор", + "Promote to moderator" : "Повишаване до модератор", + "Resend invitation" : "Повторно изпращане на покана", + "Send call notification" : "Изпращане на известие за обаждане", + "Reset custom permissions" : "Възстановяване на персонализираните права", + "Grant all permissions" : "Даване на всички права", + "Remove all permissions" : "Премахване на всички права", + "Remove" : "Премахване", + "Permissions modified for {displayName}" : "Променени са права за {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Добавяне на потребители", + "Add groups" : "Добавяне на групи", + "Add other sources" : "Добавяне на други източници", + "Add emails" : "Добавяне на имейли", + "Integrations" : "Интеграции", + "Add federated users" : "Добавяне на федерирани потребители", + "Searching …" : "Търсене ...", + "Search for more users" : "Търсене на повече потребители", + "Search or add participants" : "Търсене или добавяне на участници", + "Invitation was sent to {actorId}" : "Беше изпратена покана до {actorId}", + "An error occurred while adding the participants" : "Възникна грешка при добавянето на участници", + "Participants" : "Участници", + "Participants ({count})" : "Участници ({count})", + "Open chat" : "Отворяне на чата", + "You have new unread messages in the chat." : "Имате нови непрочетени съобщения в чата.", + "You have been mentioned in the chat." : "Споменаха ви в чата.", + "Chat" : "Съобщения", + "Details" : "Подробности", + "Shared items" : "Споделени елементи", + "No results found" : "Няма намерени резултати", + "Load more results" : "Зареждане на още резултати", + "Projects" : "Проекти", + "No shared items" : "Няма споделени елементи", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Свързване към разговор", + "Search conversations or users" : "Търсене на разговори или потребители", + "Select conversation" : "Избор на разговор", + "Save name" : "Запиши името", + "Error while setting personal setting" : "Грешка при записване на личната настройка", + "Error while saving sounds setting" : "Грешка при запазване на настройката за звуци", + "Play sounds when participants join or leave a call" : "Възпроизвеждане на звуци, когато участниците се присъединят или напуснат разговор", + "Notification settings" : "Настройки на известие", + "Default language" : "Стандартен език", + "Select location for attachments" : "Избор на местоположение за прикачени файлове", + "Error while setting attachment folder" : "Грешка при настройка на папка за прикачени файлове", + "Error while setting read status privacy" : "Грешка при задаване на поверителност на състоянието на четене", + "Privacy" : "Поверителност", + "Attachments folder" : "Папка с прикачени файлове", + "Search" : "Търсене", + "Focus the chat input" : "Фокусиране на въвеждането в чата", + "Unfocus the chat input to use shortcuts" : "Прекратяване на фокусирането на въвеждането в чата, за да се използват преки пътища ", + "Shortcuts while in a call" : "Преки пътища по време на обаждане", + "Camera on and off" : "Включване и изключване на камера", + "Microphone on and off" : "Включване и изключване на микрофон", + "Raise or lower hand" : "Повдигане или сваляне на ръка", + "Push to talk or push to mute" : "Натиснете за разговор или натиснете за заглушаване", + "Start call silently" : "Започване на разговор безшумно", + "Start call" : "Започване на обаждане", + "You will be able to join the call only after a moderator starts it." : "Ще можете да се присъедините към разговора само след като го започне модератор.", + "End call for everyone" : "Прекратяване на разговора за всички", + "Starting the recording" : "Започване на записа", + "Recording" : "Записване", + "Cancel recording start" : "Отмяна на стартирането на записа", + "Stop recording" : "Спиране на записването", + "Send a reaction" : "Изпращане на реакция", + "React with {reaction}" : "Реагирайте с {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n участници в разговора","%n участници в разговора"], + "You are not allowed to enable screensharing" : "Нямате право да активирате споделянето на екрана", + "No screensharing" : "Без споделяне на екрана", + "Screensharing options" : "Опции за споделяне на екрана", + "Enable screensharing" : "Активиране на споделянето на екрана", + "Bad sent video and screen quality." : "Лошо изпратено видео и качество на екрана.", + "Bad sent screen quality." : "Лошо изпратено качество на екрана.", + "Bad sent video quality." : "Лошо изпратено качество на видеото.", + "Bad sent audio, video and screen quality." : "Лошо изпратено качество на звука, видеото и екрана.", + "Bad sent audio and screen quality." : "Лошо изпратено качество на звука и на екрана.", + "Bad sent audio and video quality." : "Лошо изпратено качество на звук и на видео. ", + "Bad sent audio quality." : "Лошо изпратено качество на звука. ", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или на видеоклипа си, докато правите споделяне на екрана.", + "Disable background blur" : "Деактивиране на замъгляването на фона", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може да не могат да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Интернет връзката или компютърът ви са заети и другите участници може да не могат да видят екрана ви.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви видят.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или на видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате споделянето на екрана.", + "Disable screenshare" : "Деактивиране на споделянето на екрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат.", + "Screen sharing is not supported by your browser." : "Споделянето на екрана не се поддържа от вашия браузър.", + "Screen sharing requires the page to be loaded through HTTPS." : "Споделянето на екрана изисква страницата да бъде заредена чрез HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Споделянето на екрана изисква страницата да бъде заредена чрез HTTPS.", + "An error occurred while starting screensharing." : "Възникна грешка при стартиране на споделянето на екрана.", + "Show your screen" : "Покажете екрана си", + "Stop screensharing" : "Спрете споделянето на екрана", + "Mute others" : "Заглушаване на другите", + "Start recording" : "Започване на запис", + "Set up breakout rooms" : "Създаване на стаи за отделно събрание", + "Remove participant {name}" : "Премахване на участник {name}", + "Keep" : "Запази", + "Select a region" : "Изберете регион", + "Search …" : "Търсене …", + "Message without mention" : "Съобщение без споменаване", + "Mention myself" : "Споменх себе си", + "The conversation does not exist" : "Разговорът не съществува", + "Join a conversation or start a new one!" : "Присъединяване към разговор или започване на нов", + "Duplicate session" : "Дублирана сесия", + "Join a conversation or start a new one" : "Присъединяване към разговор или започване на нов", + "Nextcloud URL" : "URL адрес на Nextcloud", + "Nextcloud user" : "Потребител на Nextcloud", + "User password" : "Потребителска парола", + "Talk conversation" : "Talk разговор", + "Skip TLS verification" : "Пропускане на TLS потвърждение", + "Matrix server URL" : "URL адрес на матричен сървър", + "User" : "Потребител", + "Matrix channel" : "Матричен канал", + "Mattermost server URL" : " URL адрес на сървъра на Mattermost", + "Mattermost user" : "Потребител на Mattermost", + "Team name" : "Име на екипа", + "Channel name" : "Име на канала", + "Rocket.Chat server URL" : "URL адрес на сървъра на Rocket.Chat", + "User name or email address" : "Потребителско име или имейл адрес", + "Rocket.Chat channel" : "Rocket.Chat канал", + "Zulip server URL" : "URL адрес на сървъра на Zulip", + "Bot user name" : "Потребителско име на бот", + "Bot API key" : "API ключ за бот", + "Zulip channel" : "Zulip канал", + "API token" : "API токен", + "Slack channel" : "Slack канал", + "Server ID or name" : "Идентификатор или име на сървъра", + "Channel" : "Канал", + "Login" : "Вписване", + "Chat ID" : "Идентификатор за чат", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL адрес на IRC сървър (напр. chat.freenode.net:6667)", + "Nickname" : "Псевдоним", + "Connection password" : "Парола за връзка", + "IRC channel" : "IRC канал", + "Channel password" : "Парола за канал ", + "NickServ nickname" : "Псевдоним за NickServ", + "NickServ password" : "Парола за NickServ", + "Use TLS" : "Използвайте TLS", + "Use SASL" : "Използвайте SASL", + "Tenant ID" : "Идентификатор на клиент", + "Client ID" : "Client ID", + "Team ID" : "Идентификатор на екип", + "Thread ID" : "Идентификатор на нишка", + "XMPP/Jabber server URL" : "URL адрес на XMPP/Jabber сървър", + "MUC server URL" : "URL адрес на MUC сървър", + "Jabber ID" : "Идентификатор на Jabber", + "Media" : "Медия", + "Polls" : "Анкети", + "Deck cards" : "Deck карти", + "Voice messages" : "Гласови съобщения", + "Locations" : "Местоположения", + "Call recordings" : "Записи на обаждания", + "Audio" : "Аудио", + "Show all media" : "Показване на всички медии", + "Show all files" : "Показване на всички файлове", + "Show all polls" : "Показване на всички анкети", + "Show all deck cards" : "Показване на всички deck карти", + "Show all voice messages" : "Показване на всички гласови съобщения", + "Show all locations" : "Показване на всички местоположения", + "Show all call recordings" : "Показване на всички записи на обаждания", + "Show all audio" : "Показване на всички аудиозаписи", + "Show all other" : "Показване на всичко останало", + "Group" : "Група", + "Team" : "Екип", + "You: {lastMessage}" : "Вие: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Опитвате се да се присъедините към разговор, докато имате активна сесия в друг прозорец или устройство. Това в момента не се поддържа от Nextcloud Talk. Какво искате да направите?", + "Leave this page" : "Напускане на тази страница", + "Join here" : "Присъединяване тук", + "An error occurred while posting deck card to conversation" : "Възникна грешка при публикуване на deck карта в разговор", + "Post to a conversation" : "Публикуване в разговор", + "Post to conversation" : "Публикуване в разговорa", + "The recording failed. Please contact your administrator." : "Записът е неуспешен. Моля, свържете се с вашия администратор.", + "An error occurred while posting location to conversation" : "Възникна грешка при публикуване на местоположението в разговор", + "Share to a conversation" : "Споделяне в разговор", + "Share to conversation" : "Споделяне в разговора", + "Error while clearing conversation history" : "Грешка при изчистване на историята на разговорите", + "Error occurred while allowing guests" : "Възникна грешка при разрешаването на гостите", + "Error occurred while disallowing guests" : "Възникна грешка при забраняването на гостите", + "Error occurred when restricting the conversation to moderator" : "Възникна грешка при ограничаване на разговора до модератор", + "Error occurred when opening the conversation to everyone" : "Възникна грешка при отваряне на разговора за всички", + "Conversation password has been saved" : "Паролата за разговор е записана", + "Conversation password has been removed" : "Паролата за разговор е премахната", + "Error occurred while saving conversation password" : "Възникна грешка при запазване на паролата за разговор", + "Call recording is starting." : "Записването на обаждането започва.", + "Call recording stopped while starting." : "Записването на разговора спря при стартирането му.", + "Call recording stopped. You will be notified once the recording is available." : "Записването на обаждането е спряно. Ще бъдете уведомени, когато записът е наличен.", + "Conversation picture set" : "Набор от снимки на разговор", + "Conversation picture deleted" : "Снимката на разговора е изтрита", + "Could not delete the conversation picture" : "Не можа да се изтрие снимката на разговора", + "Could not post message: {errorMessage}" : "Не можа да се публикува съобщение: {errorMessage}", + "An error occurred while fetching the participants" : "Възникна грешка при извличане на участниците", + "Could not send invitation to {actorId}" : "Не можа да се изпрати покана до {actorId}", + "Invitations sent" : "Поканите са изпратени", + "Error occurred when sending invitations" : "Възникна грешка при изпращането на покани", + "An error occurred while creating breakout rooms" : "Възникна грешка при създаването на стаи за отделно събрание", + "An error occurred while re-ordering the attendees" : "Възникна грешка при пренареждане на участниците", + "An error occurred while deleting breakout rooms" : "Възникна грешка при изтриването на стаи за отделно събрание", + "An error occurred while starting breakout rooms" : "Възникна грешка при стартирането на стаи за отделно събрание", + "An error occurred while stopping breakout rooms" : "Възникна грешка при спирането на стаи за отделно събрание", + "An error occurred while sending a message to the breakout rooms" : "Възникна грешка при изпращането на съобщение до стаи за отделно събрание", + "An error occurred while requesting assistance" : "Възникна грешка при заявка за съдействие", + "An error occurred while resetting the request for assistance" : "Възникнала е грешка при възстановяване на заявката за съдействие", + "An error occurred while joining breakout room" : "Възникна грешка при присъединяването към стаята за отделно събрание", + "{guest} (guest)" : "{guest} (гост)", + "Poll draft has been saved" : "Черновата на анкетата е запаметена", + "An error occurred while submitting your vote" : "Възникна грешка при изпращането на вашето гласуване", + "An error occurred while ending the poll" : "Възникна грешка при приключване на анкетата", + "Failed to add reaction" : "Неуспешно добавяне на реакция", + "Failed to remove reaction" : "Неуспешно премахване на реакция", + "Error while uploading file \"{fileName}\"" : "Грешка при качването на файл „{fileName}“", + "Not enough free space to upload file \"{fileName}\"" : "Няма достатъчно свободно място за качване на файл „{fileName}“", + "You are not allowed to share files" : "Нямате право да споделяте файлове", + "Error while sharing file" : "Грешка при споделяне на файл", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Браузърът, който използвате, не се поддържа напълно от Nextcloud Talk. Моля, използвайте най-новата версия на Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "Later today – {timeLocale}" : "По-късно днес - {timeLocale}", + "Tomorrow – {timeLocale}" : "Утре - {timeLocale}", + "This weekend – {timeLocale}" : "Този уикенд - {timeLocale}", + "Next week – {timeLocale}" : "Следващата седмица - {timeLocale}", + "Message link copied to clipboard" : "Връзката към съобщението е копирана в клипборда", + "Conversation link copied to clipboard" : "Връзката към разговора е копирана в клипборда", + "The link could not be copied" : "Връзката не можа да бъде копирана", + "Error while parsing a PROPFIND error" : "Грешка при синтактичния анализ на грешка в PROPFIND", + "Sending signaling message has failed" : "Изпращането на сигнално съобщение е неуспешно", + "Lost connection to signaling server. Trying to reconnect." : "Загубена връзка със сървъра за сигнализация. Опит за повторно свързване.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Конфигурираният сървър за сигнализация трябва да бъде актуализиран, за да е съвместим с тази версия на приложениетоTalk. Моля, свържете се с вашия администрация.", + "Please reload the page." : "Моля, презаредете страницата.", + "Do not disturb" : "Не безпокойте", + "Away" : "Отсъстващ", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Високоговорител {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Изглежда, че говорите със заглушен звук, моля, включете звука, за да ви чуват другите", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не можа да се установи връзка с поне един участник. Може да е необходим TURN сървър за вашия сценарий. Моля, помолете администратора си да настрои такъв, като следвате {linkstart}тази документация{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Това отнема повече време от очакваното. Предоставени ли са вече права за медии (или отхвърлени)? Ако отговорът е да, моля, рестартирайте браузъра си, тъй като аудиото и видеото не работят ", + "Access to microphone & camera is only possible with HTTPS" : "Достъпът до микрофона и камерата е възможен само при HTTPS", + "Please move your setup to HTTPS" : "Моля, преместете настройката си в HTTPS", + "Access to microphone & camera was denied" : "Достъпът до микрофона и камерата е отказан", + "WebRTC is not supported in your browser" : "WebRTC не се поддържа във вашия браузър", + "Please use a different browser like Firefox or Chrome" : "Моля, използвайте друг браузър като Firefox или Chrome", + "Error while accessing microphone & camera" : "Грешка при достъп до микрофон и камера", + "%s Talk on your mobile devices" : "%s Talk на мобилните ви устройства", + "Join conversations at any time, anywhere, on any device." : "Присъединяване към разговори по всяко време, навсякъде и на всяко устройство.", + "Android app" : "Android приложение", + "iOS app" : "iOS приложениер", + "__language_name__" : "Български", + "Tasks" : "Задачи", + "Notes" : "Бележки", + "Reports" : "Доклади", + "Talk conversation for event" : "Talk разговор за събитие", + "Talk recording from {time} ({conversation})" : "Запис на разговор от {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати от анкетата • %n гласа","Резултати от анкетата • %n гласа"], + "Submit vote" : "Изпращане на гласуване", + "Your privacy setting has been saved" : " Настройката ви за поверителност е запазена", + "Your personal setting has been saved" : "Личната бележка е запаметена", + "Failed to save sounds setting" : "Неуспешно запазване на настройката за звуци", + "Sounds setting saved" : "Настройката за звуци е запазена", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Присъединихте се към разговора в друг прозорец или устройство. Това в момента не се поддържа от Nextcloud Talk, така че тази сесия беше затворена." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/bg.json b/l10n/bg.json new file mode 100644 index 0000000..972bfc8 --- /dev/null +++ b/l10n/bg.json @@ -0,0 +1,1380 @@ +{ "translations": { + "a conversation" : "разговор", + "(Duration %s)" : "(Продължителност %s)", + "You attended a call with {user1}" : "Присъствахте на разговор с {user1}", + "_%n guest_::_%n guests_" : ["%nгости ","%n гости"], + "You attended a call with {user1} and {user2}" : "Присъствахте на разговор с {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Присъствахте на разговор с {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Присъствахте на разговор с {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Присъствахте на разговор с {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["%nдруги ","%n други"], + "{actor} invited you to {call}" : "{actor} ви покани за {call}", + "You were invited to a conversation or had a call" : "Бяхте поканени на разговор или сте имали обаждане", + "Other activities" : "Други активности", + "Talk" : "Talk", + "Guest" : "Гост", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Safari вече могат да се използват за участие в аудио и видео разговори", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Разговорите един към един вече са постоянни и повече не могат да бъдат превърнати в групови разговори случайно. Също така, когато един от участниците напусне разговора, разговорът вече не се изтрива автоматично. Само ако и двамата участници напуснат, разговорът се изтрива от сървъра", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Вече можете да уведомявате всички участници, като публикувате „@all“ в чата", + "- With the \"arrow-up\" key you can repost your last message" : "- С клавиш \"стрелка нагоре\" можете да публикувате повторно последното си съобщение", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk вече може да има команди, изпращане \"/помощ\" като съобщение за чат, за да видите дали вашият администратор е конфигурирал някои", + "- With projects you can create quick links between conversations, files and other items" : "- С проекти можете да създавате бързи връзки между разговори, файлове и други елементи", + "- You can now mention guests in the chat" : "- Вече можете да споменавате гости в чата", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговорите вече могат да имат лоби. Това ще позволи на модераторите да се присъединят към чата и да се обаждат вече, за да подготвят срещата, докато потребителите и гостите трябва да изчакат", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Вече можете директно да отговаряте на съобщения, давайки на другите потребители повече контекст за какво е вашето съобщение", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "-Търсенето на разговори и участници вече също ще филтрира съществуващите ви разговори, което прави много по-лесно намирането на предишни разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Вече можете да добавяте персонализирани потребителски групи към разговорите, когато приложението circles /кръгове/ е инсталирано", + "- Check out the new grid and call view" : "- Проверете новата мрежа и изглед на обаждане", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Вече можете да качвате и да плъзгате и пускате файлове директно от вашето устройство в чата", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Споделените файлове вече се отварят директно в изгледа за чат с приложенията за преглед", + "- You can now search for chats and messages in the unified search in the top bar" : "- Вече можете да търсите чатове и съобщения в обединеното търсене в горната лента", + "- Spice up your messages with emojis from the emoji picker" : "- Подправете съобщенията си с емоджита от инструмента за избор на емоджи", + "- You can now change your camera and microphone while being in a call" : "- Вече можете да си сменяте камерата и микрофона, докато сте в разговор", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Дайте на разговорите си някакъв контекст с описание и го отворете, така че влезлите потребители да могат да го намерят и да се присъединят", + "- See a read status and send failed messages again" : "- Вижте състоянието на четене и изпратете отново неуспешно изпратени съобщения", + "- Raise your hand in a call with the R key" : "- Вдигнете ръката си при повикване с клавиша R", + "- Join the same conversation and call from multiple devices" : "- Присъединете се към същия разговор и се обаждайте от множество устройства", + "- Send voice messages, share your location or contact details" : "- Изпращайте гласови съобщения, споделяйте вашето местоположение или подробности за контакт", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Добавете групи към разговор и новите членове на групата автоматично ще бъдат добавени като участници", + "- A preview of your audio and video is shown before joining a call" : "- Показване на визуализация на вашето аудио и видео, преди да се присъедините към разговор", + "- You can now blur your background in the newly designed call view" : "- Вече можете да замъглите фона си в новият проект на изглед за разговори", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторите вече могат да задават общи и индивидуални права на участниците", + "- In the sidebar you can now find an overview of the latest shared items" : "- Вече можете да намерите общ преглед на най-новите споделени елементи в страничната лента", + "- Use a poll to collect the opinions of others or settle on a date" : "- Използвайте анкета, за събиране на мнението на другите или за определяне на дата", + "- Configure an expiration time for chat messages" : "- Конфигуриране на срок на валидност на съобщенията в чата", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Започвайте разговори, без да уведомявате другите участници в големи разговори. Можете да изпращате индивидуални известия за повиквания, след като повикването е започнало.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Изпращайте съобщения в чата, без да уведомявате получателите, в случай че не е спешно", + "- Emojis can now be autocompleted by typing a \":\"" : "- Емотиконите вече могат да се попълват автоматично чрез въвеждането на символа \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Свързване на различни елементи с помощта на новия интелигентен инструмент за избор чрез въвеждането на символа \"/\"", + "- Unsent message drafts are now saved in your browser" : "-Неизпратените чернови вече се съхраняват в браузъра", + "Talk updates ✅" : "Актуализации на Talk ✅", + "Reaction deleted by author" : "Реакцията е изтрита от автор", + "{actor} created the conversation" : "{actor} създаде разговора", + "You created the conversation" : "Вие създадохте разговор", + "An administrator created the conversation" : "Администратор създаде разговора", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} преименува разговора от „%1$s“ на „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вие преименувахте разговора от „%1$s“ на „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор преименува разговора от „%1$s“ на „%2$s“", + "{actor} set the description" : "{actor} зададе описанието", + "You set the description" : "Вие зададохте описанието", + "An administrator set the description" : "Администратор зададе описанието", + "{actor} removed the description" : "{actor} премахна описанието", + "You removed the description" : "Премахнахте описанието", + "An administrator removed the description" : "Администратор премахна описанието", + "You started a call" : "Вие започнахте разговор", + "{actor} started a call" : "{actor} започна обаждане", + "{actor} joined the call" : "{actor} се присъедини към разговора", + "You joined the call" : "Вие се присъединихте към разговора", + "{actor} left the call" : "{actor} напусна разговора", + "You left the call" : "Вие напуснахте разговора", + "{actor} unlocked the conversation" : "{actor} отключи разговора", + "You unlocked the conversation" : "Вие отключихте разговора", + "An administrator unlocked the conversation" : "Администратор отключи разговора", + "{actor} locked the conversation" : "{actor} заключи разговора", + "You locked the conversation" : "Вие заключихте разговора", + "An administrator locked the conversation" : "Администратор заключи разговора", + "{actor} limited the conversation to the current participants" : "{actor} ограничи разговора до настоящите участници", + "You limited the conversation to the current participants" : "Вие ограничихте разговора до настоящите участници", + "An administrator limited the conversation to the current participants" : "Администратор ограничи разговора до настоящите участници", + "{actor} opened the conversation to registered users" : "{actor} отвори разговора за регистрирани потребители", + "You opened the conversation to registered users" : "Отворихте разговора за регистрирани потребители", + "An administrator opened the conversation to registered users" : "Администратор отвори разговора за регистрирани потребители", + "The conversation is now open to everyone" : "Разговорът вече е отворен за всички", + "{actor} opened the conversation to everyone" : "{actor} отвори разговора за всички", + "You opened the conversation to everyone" : "Вие отворихте разговора за всички", + "{actor} restricted the conversation to moderators" : "{actor} ограничи разговора само за модератори", + "You restricted the conversation to moderators" : "Вие ограничихте разговора само за модератори", + "{actor} started breakout rooms" : "{actor} стартира стаите за отделно събрание", + "You started breakout rooms" : "Вие стартирахте стаите за отделно събрание", + "{actor} stopped breakout rooms" : "{actor} спря стаите за отделно събрание", + "You stopped breakout rooms" : "Вие спряхте стаите за отделно събрание", + "{actor} allowed guests" : "{actor} допусна гости ", + "You allowed guests" : "Допуснахте гости", + "An administrator allowed guests" : "Администратор допусна гости", + "{actor} disallowed guests" : "{actor} забрани гости", + "You disallowed guests" : "Вие забранихте гости", + "An administrator disallowed guests" : "Администратор забрани гости", + "{actor} set a password" : "{actor} зададе парола", + "You set a password" : "Зададохте парола", + "An administrator set a password" : "Администратор зададе парола", + "{actor} removed the password" : "{actor} премахна парола", + "You removed the password" : "Премахнахте парола", + "An administrator removed the password" : "Администратор премахна парола", + "{actor} added {user}" : "{actor} добави {user}", + "You joined the conversation" : "Вие се присъединихте към разговора", + "{actor} joined the conversation" : "{actor} се присъедини към разговора", + "You added {user}" : "Добавихте {user}", + "{actor} added you" : "{actor} ви добави", + "An administrator added you" : "Администратор ви добави", + "An administrator added {user}" : "Администратор добави {user}", + "You left the conversation" : "Напуснахте разговора", + "{actor} left the conversation" : "{actor} напусна разговора", + "{actor} removed {user}" : "{actor} премахна {user}", + "You removed {user}" : "Премахнахте {user}", + "{actor} removed you" : "{actor} ви премахна", + "An administrator removed you" : "Администратор ви премахна", + "An administrator removed {user}" : "Администратор премахна {user}", + "{federated_user} accepted the invitation" : "{federated_user} прие поканата", + "{actor} removed {federated_user}" : "{actor} премахна {federated_user}", + "You removed {federated_user}" : "Премахнахте {federated_user}", + "An administrator removed {federated_user}" : "Администратор премахна {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} отказа поканата", + "{actor} added group {group}" : "{actor} добави група {group}", + "You added group {group}" : "Добавихте група {group}", + "An administrator added group {group}" : "Администратор добави група {group}", + "{actor} removed group {group}" : "{actor} премахна група {group}", + "You removed group {group}" : "Премахнахте група {group}", + "An administrator removed group {group}" : "Администратор премахна група {group}", + "{actor} promoted {user} to moderator" : "{actor} повиши {user} до модератор", + "You promoted {user} to moderator" : "Повишихте {user} до модератор", + "{actor} promoted you to moderator" : "{actor} ви повиши до модератор", + "An administrator promoted you to moderator" : "Администратор ви повиши до модератор", + "An administrator promoted {user} to moderator" : "Администратор повиши {user} до модератор", + "{actor} demoted {user} from moderator" : "{actor} понижи {user} от модератор", + "You demoted {user} from moderator" : "Понижихте {user} от модератор", + "{actor} demoted you from moderator" : "{actor} ви понижи от модератор", + "An administrator demoted you from moderator" : "Администратор ви понижи от модератор", + "An administrator demoted {user} from moderator" : "Администратор понижи {user} от модератор", + "{actor} shared a file which is no longer available" : "{actor} сподели файл, който вече не е наличен", + "You shared a file which is no longer available" : "Споделихте файл, който вече не е наличен", + "The shared location is malformed" : "Споделеното местоположение е формирано неправилно ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} настрои Matterbridge да синхронизира този разговор с други чатове", + "You set up Matterbridge to synchronize this conversation with other chats" : "Настроихте Matterbridge да синхронизира този разговор с други чатове", + "{actor} updated the Matterbridge configuration" : "{actor} актуализира конфигурацията на Matterbridge", + "You updated the Matterbridge configuration" : "Вие актуализирахте конфигурацията на Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} премахна конфигурацията на Matterbridge", + "You removed the Matterbridge configuration" : "Премахнахте конфигурацията на Matterbridge", + "{actor} started Matterbridge" : "{actor} стартира Matterbridge", + "You started Matterbridge" : "Вие стартирахте Matterbridge", + "{actor} stopped Matterbridge" : "{actor} спря Matterbridge", + "You stopped Matterbridge" : "Спряхте Matterbridge", + "{actor} deleted a message" : "{actor} изтри съобщение", + "You deleted a message" : "Изтрихте съобщение", + "{actor} deleted a reaction" : "{actor} изтри реакция", + "You deleted a reaction" : "Изтрихте реакция", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Зададохте изтичане на съобщението след %n седмици","Зададохте изтичане на съобщението на %n седмици"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Зададохте изтичане на съобщението след %n дни","Зададохте изтичане на съобщението след %n дни"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Зададохте изтичане на съобщението след %n часа","Зададохте изтичане на съобщението след %n часа"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Зададохте изтичане на съобщението след %n минути","Зададохте изтичане на съобщението след %n минути"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} зададе изтичането на съобщението след %n седмици","{actor} зададе изтичането на съобщението след %n седмици"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} зададе изтичането на съобщението след %n дни","{actor} зададе изтичането на съобщението след %n дни"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} зададе изтичането на съобщението след %n часа","{actor} зададе изтичането на съобщението след %n дни"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} зададе изтичането на съобщението след %n минути","{actor} зададе изтичането на съобщението след %n минути"], + "{actor} disabled message expiration" : "{actor} деактивира изтичането на съобщението", + "You disabled message expiration" : "Деактивирахте изтичането на съобщението", + "{actor} cleared the history of the conversation" : "{actor} изчисти историята на разговора", + "You cleared the history of the conversation" : "Изчистихте историята на разговора", + "{actor} set the conversation picture" : "{actor} зададе снимка на разговора", + "You set the conversation picture" : "Вие зададохте снимка на разговора", + "{actor} removed the conversation picture" : "{actor} премахна снимката на разговора", + "You removed the conversation picture" : "Вие премахнахте снимката на разговора", + "{actor} ended the poll {poll}" : "{actor} прекрати анкетата {poll}", + "You ended the poll {poll}" : "Вие прекратихте анкетата {poll}", + "{actor} started the video recording" : "{actor} стартира видеозапис", + "You started the video recording" : "Вие стартирахте видеозапис", + "{actor} stopped the video recording" : "{actor} спря видеозаписа", + "You stopped the video recording" : "Вие спряхте видеозаписа", + "{actor} started the audio recording" : "{actor} стартира аудиозапис", + "You started the audio recording" : "Вие стартирахте аудиозапис", + "{actor} stopped the audio recording" : "{actor} спря аудиозаписа", + "You stopped the audio recording" : "Вие спряхте аудиозаписа", + "The recording failed" : "Записването е неуспешно", + "Someone voted on the poll {poll}" : "Някой гласува в анкетата {poll}", + "Message deleted by author" : "Съобщението е изтрито от автора", + "Message deleted by {actor}" : "Съобщението е изтрито от {actor}", + "Message deleted by you" : "Съобщение, изтрито от вас", + "Deleted user" : "Изтрит потребител", + "Administration" : "Администрация", + "System" : "Система", + "%s (guest)" : "%s (гост)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} прекрати разговора с %n гости (продължителност {duration})","{actor} прекрати разговора с %n гости (Продължителност {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} прекрати разговора с {user1} (Продължителност {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} прекрати разговора с {user1} и {user2} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2} и {user3} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2}, {user3} и {user4} (Продължителност {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} прекрати разговора с {user1}, {user2}, {user3}, {user4} и {user5} (Продължителност {duration})", + "Message of {user} in {conversation}" : "Съобщение на {user} в {conversation}", + "Message of {user}" : "Съобщение на {user}", + "Message of a deleted user in {conversation}" : "Съобщение на изтрит потребител в {conversation}", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Говорене с %s", + "An error occurred. Please contact your administrator." : "Възникна грешка. Моля, свържете се с вашия администратор.", + "File not found" : "Файлът не е намерен", + "File is not shared, or shared but not with the user" : "Файлът не се споделя или се споделя, но не и с потребителя", + "No account available to delete." : "Няма достъпен профил за изтриване.", + "Poll" : "Анкета", + "No image file provided" : "Не е предоставен файл с изображение", + "File is too big" : "Файлът е твърде голям", + "Invalid file provided" : "Предоставен е невалиден файл", + "Invalid image" : "Невалидно изображение", + "Unknown filetype" : "Неизвестен тип файл", + "Talk mentions" : "Споменавания в Talk", + "Say hi to your friends and colleagues!" : "Поздравете приятелите и колегите си!", + "No unread mentions" : "Няма непрочетени споменавания", + "Call in progress" : "В ход е обаждане", + "You were mentioned" : "Вие бяхте споменати", + "Write to conversation" : "Записване към разговор", + "Writes event information into a conversation of your choice" : "Записва информация за събитието в разговор по ваш избор", + "Conversation invitation" : "Покана за разговор", + "Description" : "Описание", + "You can also dial-in via phone with the following details" : "Можете също да наберете по телефона със следните подробности", + "Dial-in information" : "Информация за набиране", + "Meeting ID" : "Идентификатор на срещата", + "Your PIN" : "Вашият ПИН", + "Meeting" : "Среща", + "Password request: %s" : "Заявка за парола %s", + "Private conversation" : "Частен разговор", + "Deleted user (%s)" : "Изтрит потребител (%s)", + "Failed to upload call recording" : "Неуспешно качване на запис на обаждане/то/", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Записващият сървър не успя да качи записа на обаждането {call}. Моля, свържете се с администрацията.", + "Share to chat" : "Споделяне в чата", + "Dismiss notification" : "Спри известията", + "Call recording now available" : "Записването на обаждане е налично", + "The recording for the call in {call} was uploaded to {file}." : "Записът на разговора в {call}, беше качен в {file}.", + "Transcript now available" : "Вече е налична транскрипция", + "The transcript for the call in {call} was uploaded to {file}." : "Транскрипцията на разговора в {call}, беше качена в {file}.", + "Failed to transcript call recording" : "Неуспешнa транскрипция на записa на обаждането", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сървърът не успя да направи транскрипция на записа в {file} за повикването в {call}. Моля, свържете се с администрацията.", + "Accept" : "Приемам", + "Decline" : "Отхвърляне", + "New message" : "Ново съобщение", + "Reminder" : "Напомняне", + "Notification" : "Известие", + "{user} in {call}" : "{user} в {call}", + "Deleted user in {call}" : "Изтрит потребител в {call}", + "{guest} (guest) in {call}" : "{guest} (guest) в {call}", + "Guest in {call}" : "Гост в {call}", + "{user} sent you a private message" : "{user} ви изпрати лично съобщение", + "{user} sent a message in conversation {call}" : "{user} изпрати съобщение в разговор {call}", + "A deleted user sent a message in conversation {call}" : "Изтрит потребител изпрати съобщение в разговор {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гост) изпрати съобщение в разговор {call}", + "A guest sent a message in conversation {call}" : "Гост изпрати съобщение в разговор {call}", + "{user} replied to your private message" : "{user} отговори на вашето лично съобщение", + "{user} replied to your message in conversation {call}" : "{user} отговори на вашето съобщение в разговор {call}", + "A deleted user replied to your message in conversation {call}" : "Изтрит потребител отговори на съобщението ви в разговор {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гост) отговори на съобщението ви в разговор {call}", + "A guest replied to your message in conversation {call}" : "Гост отговори на съобщението ви в разговор {call}", + "{user} reacted with {reaction} to your private message" : "{user} реагира с {reaction} на вашето лично съобщение", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} реагира с {reaction} на вашето съобщение в разговор {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Изтрит потребител реагира с {reaction} на вашето съобщение в разговор {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гост) реагира с {reaction} на вашето съобщение в разговор {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гост реагира с {reaction} на вашето съобщение в разговор {call}", + "{user} mentioned you in a private conversation" : "{user} ви спомена в личен разговор", + "{user} mentioned group {group} in conversation {call}" : "{user} спомена група {group} в разговор {call}", + "{user} mentioned everyone in conversation {call}" : "{user} спомена всички в разговор {call}", + "{user} mentioned you in conversation {call}" : "{user} ви спомена в разговор {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Изтрит потребител спомена група {group} в разговор {call}", + "A deleted user mentioned everyone in conversation {call}" : "Изтрит потребител спомена всички в разговор {call}", + "A deleted user mentioned you in conversation {call}" : "Изтрит потребител ви спомена в разговор {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гост) спомена група {group} в разговор {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гост) спомена всички в разговор {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гост) ви спомена в разговор {call}", + "A guest mentioned group {group} in conversation {call}" : "Гост спомена група {group} в разговор {call}", + "A guest mentioned everyone in conversation {call}" : "Гост спомена всички в разговор {call}", + "A guest mentioned you in conversation {call}" : "Гост ви спомена в разговор {call}", + "View chat" : "Преглед на чата", + "{user} invited you to a group conversation: {call}" : "{user} ви покани в групов разговор: {call}", + "Join call" : "Присъединяване към обаждането", + "Answer call" : "Отговаряне на обаждане", + "{user} would like to talk with you" : "{user} би искал да говори с вас", + "Call back" : "Върнете обаждането", + "You missed a call from {user}" : "Пропуснахте обаждане от {user}", + "A group call has started in {call}" : "Започна групово обаждане в {call}", + "You missed a group call in {call}" : "Пропуснахте групово обаждане в {call}", + "{email} is requesting the password to access {file}" : "{email} поиска паролата за достъп до {file}", + "{email} tried to request the password to access {file}" : "{email} се опита да поиска паролата за достъп до {file}", + "Someone is requesting the password to access {file}" : "Някой иска паролата за достъп до {file}", + "Someone tried to request the password to access {file}" : "Някой се опита да поиска паролата за достъп до {file}", + "Open settings" : "Отваряне на настройките", + "The hosted signaling server is now configured and will be used." : "Хостваният сървър за сигнализация вече е конфигуриран и ще се използва.", + "The hosted signaling server was removed and will not be used anymore." : "Хостваният сървър за сигнализиране е премахнат и няма да се използва повече.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Профил на хоствания сървър за сигнализация промени състоянието от „{oldstatus}“ на „{newstatus}“.", + "error" : "грешка", + "Contact via Talk" : "Свързване чрез Talk", + "Open Talk" : "Отваряне на Talk", + "Default" : "Стандартен", + "Presentation" : "Презентация", + "Conversations" : "Разговори", + "{user}" : "{user}", + "Messages" : "Съобщения", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Съобщения в други разговори", + "One-to-one rooms always need to show the other users avatar" : "В индивидуалните стаи винаги трябва да се показва аватарът на другия потребител", + "Avatar image is not square" : "Изображението на аватара не е квадратно", + "Room {number}" : "Стая {number}", + "Other" : "Други", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Неуспешна заявка за изпробване, защото пробният сървър е недостъпен. Моля, опитайте отново по-късно.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Има проблем с удостоверяването на този екземпляр. Може би не е достъпен отвън, за да се провери URL адресът му.", + "Something unexpected happened." : "Случи се нещо неочаквано.", + "The URL is invalid." : "URL адресът е невалиден.", + "An HTTPS URL is required." : "Нужно е HTTPS URL.", + "The email address is invalid." : "Имейл адресът е невалиден.", + "The language is invalid." : "Езикът е невалиден.", + "The country is invalid." : "Държавата е невалидна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Има проблем със заявката на процеса. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "Too many requests are send from your servers address. Please try again later." : "От адреса на вашия сървър се изпращат твърде много заявки. Моля, опитайте отново по-късно.", + "There is already a trial registered for this Nextcloud instance." : "Вече има регистрирано изпробване за този екземпляр на Nextcloud.", + "Something unexpected happened. Please try again later." : "Случи се нещо неочаквано. Моля, опитайте отново по-късно.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Неуспешна заявка за изпробване, защото пробният сървър се държеше неправилно. Моля, опитайте отново по-късно.", + "Trial requested but failed to get account information. Please check back later." : "Беше заявено изпробване, но не се получи информация за профил. Моля, проверете отново по-късно.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Има проблем с удостоверяването на тази заявка. Може би не е достъпна отвън, за да се провери URL адресът и.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Неуспешно извличане на информация за профил, защото пробният сървър се държеше неправилно. Моля, проверете отново по-късно.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Има проблем с извличането на информацията за профил. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "There is no such account registered." : "Няма регистриран такъв профил.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Неуспешно извличане на информация за профил, защото пробният сървър е недостъпен. Моля, проверете отново по-късно.", + "Deleting the hosted signaling server account failed. Please check back later." : "Изтриването на профил на хоствания сървър за сигнализация не бе успешно. Моля, проверете отново по-късно.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Изтриването на профил не бе успешно, защото пробният сървър се държеше неправилно. Моля, проверете отново по-късно.", + "There is a problem with deleting the account. Please check your logs for further information." : "Има проблем с изтриването на профил. Моля, проверете вашите регистрационни файлове/журнали/ за допълнителна информация.", + "Too many requests are sent from your servers address. Please try again later." : "От адреса на вашия сървър се изпращат твърде много заявки.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Изтриването на профил не беше успешно, защото пробният сървър е недостъпен. Моля, проверете отново по-късно.", + "Andorra" : "Андора", + "United Arab Emirates" : "Обединени арабски емирства", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа и Барбуда", + "Anguilla" : "Ангила", + "Albania" : "Албания", + "Armenia" : "Армения", + "Angola" : "Ангола", + "Antarctica" : "Антарктида", + "Argentina" : "Аржентина", + "American Samoa" : "Американска Самоа", + "Austria" : "Австрия", + "Australia" : "Австралия", + "Aruba" : "Аруба", + "Åland Islands" : "Оландски острови", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгия", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "България", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сен Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливия", + "Bonaire, Sint Eustatius and Saba" : "отвъдморски територии на Нидерландия", + "Brazil" : "Бразилия", + "Bahamas" : "Бахамски острови", + "Bhutan" : "Бутан", + "Bouvet Island" : "остров Буве", + "Botswana" : "Ботсуана", + "Belarus" : "Беларус", + "Belize" : "Белийз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосови строви (Кийлинг)", + "Congo, the Democratic Republic of the" : "Конго", + "Central African Republic" : "Централноафриканска република", + "Congo" : "Конго", + "Switzerland" : "Швейцария", + "Côte d'Ivoire" : "Кот д’Ивоар", + "Cook Islands" : "Oстрови Кук", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Китай", + "Colombia" : "Колумбия", + "Costa Rica" : "Коста Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "остров Рождество", + "Cyprus" : "Кипър", + "Czechia" : "Чехия", + "Germany" : "Германия", + "Djibouti" : "Джибути", + "Denmark" : "Дания", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естония", + "Egypt" : "Египет", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритрея", + "Spain" : "Испания", + "Ethiopia" : "Етиопия", + "Finland" : "Финландия", + "Fiji" : "Фиджи", + "Falkland Islands (Malvinas)" : "Фолкландски острови (Малдиви)", + "Micronesia, Federated States of" : "Микронезия", + "Faroe Islands" : "Фарьорски острови", + "France" : "Франция", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Обединено кралство", + "Grenada" : "Гренада", + "Georgia" : "Грузия", + "French Guiana" : "Френска Гвиана", + "Guernsey" : "Гърнзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренландия", + "Gambia" : "Гамбия", + "Guinea" : "Гвинея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Екваториална Гвинея", + "Greece" : "Гърция", + "South Georgia and the South Sandwich Islands" : "Южна Джорджия и Южни Сандвичеви острови", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинея Бисау", + "Guyana" : "Гвиaна", + "Hong Kong" : "Хонконг", + "Heard Island and McDonald Islands" : "Хърд и Макдоналд", + "Honduras" : "Хондурас", + "Croatia" : "Хърватия", + "Haiti" : "Хаити", + "Hungary" : "Унгария", + "Indonesia" : "Индонезия", + "Ireland" : "Ирландия", + "Israel" : "Израел", + "Isle of Man" : "Остров Ман", + "India" : "Индия", + "British Indian Ocean Territory" : "Британска индоокеанска територия", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран", + "Iceland" : "Исландия", + "Italy" : "Италия", + "Jersey" : "Джърси", + "Jamaica" : "Ямайка", + "Jordan" : "Йордания", + "Japan" : "Япония", + "Kenya" : "Кения", + "Kyrgyzstan" : "Киргизстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кирибати", + "Comoros" : "Коморски острови", + "Saint Kitts and Nevis" : "Сейнт Китс и Невис", + "Korea, Democratic People's Republic of" : "Северна Корея", + "Korea, Republic of" : "Южна Корея", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманови острови", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сейнт Лусия", + "Liechtenstein" : "Лихтенщайн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерия", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвия", + "Libya" : "Либия", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Черна гора", + "Saint Martin (French part)" : "Сен Мартен", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалови острови", + "North Macedonia" : "Северна Македония", + "Mali" : "Мали", + "Myanmar" : "Мианмар", + "Mongolia" : "Монголия", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северни Мариански острови", + "Martinique" : "Мартиника", + "Mauritania" : "Мавритания", + "Montserrat" : "Монсерат", + "Malta" : "Малта", + "Mauritius" : "Мавриций", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малайзия", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибия", + "New Caledonia" : "Нова Каледония", + "Niger" : "Нигер", + "Norfolk Island" : "Oстров Норфолк", + "Nigeria" : "Нигерия", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерландия", + "Norway" : "Норвегия", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуе", + "New Zealand" : "Нова Зеландия", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Френска Полинезия", + "Papua New Guinea" : "Папуа Нова Гвинея", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Полша", + "Saint Pierre and Miquelon" : "Сен Пиер и Микелон", + "Pitcairn" : "Oстрови Питкерн", + "Puerto Rico" : "Пуерто Рико", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалия", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюнион", + "Romania" : "Румъния", + "Serbia" : "Сърбия", + "Russian Federation" : "Русия", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудитска Арабия", + "Solomon Islands" : "Соломонови острови", + "Seychelles" : "Сейшелски острови", + "Sudan" : "Судан", + "Sweden" : "Швеция", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Елена, Възнесение и Тристан да Куня", + "Slovenia" : "Словения", + "Svalbard and Jan Mayen" : "Свалбард и Ян Майен", + "Slovakia" : "Словакия", + "Sierra Leone" : "Сиера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалия", + "Suriname" : "Суринам", + "South Sudan" : "Южен Судан", + "Sao Tome and Principe" : "Сао Томе и Принсипи", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Сен Мартен", + "Syrian Arab Republic" : "Сирия", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Търкс и Кайкос", + "Chad" : "Чад", + "French Southern Territories" : "Френски южни и антарктически територии", + "Togo" : "Того", + "Thailand" : "Тайланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Източен Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турция", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайван, провинция Китай ", + "Tanzania, United Republic of" : "Танзания", + "Ukraine" : "Украйна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малки отдалечени острови на Съединените щати", + "United States of America" : "Съединени щати", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Свети престол", + "Saint Vincent and the Grenadines" : "Сейнт Винсънт и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела", + "Virgin Islands, British" : "Британски Вирджински острови", + "Virgin Islands, U.S." : "Американски Вирджински острови", + "Viet Nam" : "Виетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уолис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майот", + "South Africa" : "Южна Африка", + "Zambia" : "Замбия", + "Zimbabwe" : "Зимбабве", + "Federation" : "Федерация", + "High-performance backend" : "Високопроизводителен сървър", + "Error: Cannot connect to server" : "Грешка: Невъзможно свързване със сървъра", + "Error: Server did not respond with proper JSON" : "Грешка: Сървърът не отговори с правилен JSON", + "Could not get version" : "Не можа да се получи версията", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Грешка: Използвана версия: {version}; Сървърът трябва да бъде актуализиран, за да бъде съвместим с тази версия на приложението Talk", + "Error: Server responded with: {error}" : "Грешка: Сървърът отговори с: {error}", + "Error: Unknown error occurred" : "Грешка: Възникна неизвестна грешка", + "Recording backend" : "Записващ сървър", + "SIP configuration" : "SIP конфигурация", + "Invalid date, date format must be YYYY-MM-DD" : "Невалидна дата, форматът е различен от ГГГГ-ММ-ДД", + "Conversation not found" : "Разговорът не е намерен", + "Chat, video & audio-conferencing using WebRTC" : "Чат, видео и аудио-конферентна връзка с помощта на WebRTC", + "Leave call" : "Напускане на обаждането", + "Navigating away from the page will leave the call in {conversation}" : "Навигирането извън страницата ще остави обаждането в {conversation}", + "Stay in call" : "Оставене в обаждането", + "Discuss this file" : "Обсъждане на този файл", + "Share this file with others to discuss it" : "Споделете този файл с други, за да го обсъдите", + "Share this file" : "Споделяне на този файл", + "Join conversation" : "Присъединяване към разговора", + "This conversation is password-protected." : "Този разговор е защитен с парола.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Открихме множество опити с невалидна парола от вашия IP. Следователно следващият ви опит се ограничава за 30 секунди.", + "The password is wrong. Try again." : "Паролата е грешна. Опитайте отново.", + "Password" : "Парола", + "Submit" : "Изпращане", + "Error requesting the password." : "Грешка при заявяване на паролата.", + "Request password" : "Заявка за парола", + "This conversation has ended" : "Този разговор е приключил", + "Error occurred when joining the conversation" : "Възникна грешка при присъединяване към разговора", + "Close Talk sidebar" : "Затваряне на страничната лента на Talk", + "Open Talk sidebar" : "Отворяне на страничната лента на Talk", + "Everyone" : "Всички", + "Users and moderators" : "Потребители и модератори", + "Moderators only" : "Само модератори", + "Disable calls" : "Деактивиране на обажданията", + "Save changes" : "Запиши промените", + "Saving …" : "Записване …", + "Saved!" : "Записано!", + "Limit to groups" : "Ограничен достъп", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Когато е избрана поне една група, само хората от изброените групи могат да участват в разговорите.", + "Guests can still join public conversations." : "Гостите все още могат да се присъединяват към публични разговори.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Потребителите, които вече не могат да използват Talk, ще продължат да бъдат броени като участници в предишните им разговори, а също и техните съобщения в чата ще бъдат запазени.", + "Limit using Talk" : "Ограничаване на използването на Talk", + "Limit creating a public and group conversation" : "Ограничете създаването на публичен и групов разговор", + "Limit creating conversations" : "Ограничете създаването на разговори", + "Limit starting a call" : "Ограничете започването на обаждане", + "Limit starting calls" : "Ограничете започващите обаждания", + "When a call has started, everyone with access to the conversation can join the call." : "Когато обаждането започне, всеки с достъп до разговора може да се присъедини към обаждането.", + "Enabled" : "Включено", + "Disabled" : "Изключено", + "State" : "Състояние", + "Name" : "Име", + "Beta" : "Бета", + "Permissions" : "Права", + "All messages" : "Всички съобщения", + "@-mentions only" : "@-само споменавания", + "Off" : "Изключен", + "General settings" : "Общи настройки", + "Default notification settings" : "Настройки на известие по подразбиране", + "Default group notification" : "Групово известие по подразбиране", + "Default group notification for new groups" : "Групово известие за нови групи по подразбиране", + "Integration into other apps" : "Интегриране в други приложения", + "Allow conversations on files" : "Разрешаване на разговори за файлове", + "Allow conversations on public shares for files" : "Разрешаване на разговори за публични споделяния на файлове", + "Enable encryption" : "Активиране на криптирането", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "С натискане на горния бутон, информацията във формуляра се изпраща към сървърите на Struktur AG. Можете да намерите допълнителна информация на {linkstart}spreed.eu{linkend}.", + "Pending" : "Чакащо", + "Error" : "Грешка", + "Blocked" : "Блокира", + "Active" : "Активен", + "Expired" : "Изтекъл", + "Never" : "Никога", + "The trial could not be requested. Please try again later." : "Не можа да се поиска изпробване. Моля, опитайте отново по-късно.", + "The account could not be deleted. Please try again later." : "Профилът не можа да бъде изтрит. Моля, опитайте отново по-късно.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Нашият партньор Struktur AG предоставя услуга, при която може да бъде заявен хостван сървър за сигнализация. За това трябва само да попълните формуляра по-долу и вашият Nextcloud ще го заяви След като сървърът е настроен за вас, вашите идентификационни данни ще бъдат попълнени автоматично. Това ще презапише съществуващите настройки на сървъра за сигнализация.", + "URL of this Nextcloud instance" : "URL на този екземпляр на Nextcloud", + "Full name of the user requesting the trial" : "Пълно име на потребителя, който иска изпробването", + "Email of the user" : "Имейл на потребителя", + "Language" : "Език", + "Country" : "Държава", + "Request signaling server trial" : "Заявка зс изпробване на сървъра за сигнализиране", + "You can see the current status of your hosted signaling server in the following table." : "Можете да видите текущото състояние на вашия хостван сигнализиращ сървър в следващата таблица.", + "Status" : "Състояние", + "Created at" : "Създаден на", + "Expires at" : "Изтича в", + "Limits" : "Ограничения", + "Yes" : "Да", + "No" : "Не", + "Delete the signaling server account" : "Изтриване на профил на сигналния сървър", + "_%n user_::_%n users_" : ["%n потребители","%n потребители"], + "Installed version: {version}" : "Инсталирана версия: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Можете да инсталирате Matterbridge, за да свържете Nextcloud Talk с някои други услуги, посетете тяхната {linkstart1}страница на GitHub{linkend} за повече подробности. Изтеглянето и инсталирането на приложението може да отнеме известно време. В случай, че то изтече, моля, инсталирайте го ръчно от {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Двоичният файл Matterbridge не е намерен или не може да бъде изпълнен.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Можете също да зададете пътя към двоичния файл Matterbridge ръчно чрез конфигурацията. Проверете {linkstart}документацията за интеграция на Matterbridge{linkend} за повече информация.", + "Downloading …" : "Изтегляне …", + "Install Talk Matterbridge" : "Инсталиране на Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Възникна грешка при инсталирането на приложението Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Възникна грешка при инсталирането на Talk Matterbridge. Моля, инсталирайте го ръчно", + "Failed to execute Matterbridge binary." : "Неуспешно изпълнение на двоичен файл Matterbridge.", + "Matterbridge integration" : "Интеграция на Matterbridge", + "Enable Matterbridge integration" : "Активиране на интеграцията на Matterbridge", + "Status: Checking connection" : "Състояние: Проверка на връзката", + "OK: Running version: {version}" : "ОК: Работна версия: {version}", + "Recording backend URL" : "URL адрес на записващ бекенд сървър", + "Validate SSL certificate" : "Проверка на SSL сертификата", + "Delete this server" : "Изтриване на този сървър", + "Test this server" : "Тествайте този сървър", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Настройките на PHP „upload_max_filesize“/качване_макс_размернафайл/ или „post_max_size“ /публикуване_макс_размер/ ще позволят само качване на файлове до {maxUpload}.", + "Recording backend settings saved" : "Настройките на записващия бекенд сървър са запазени", + "Add a new recording backend server" : "Добавяне на нов записващ бекенд сървър", + "Shared secret" : "Споделена тайна", + "SIP configuration saved!" : "SIP конфигурацията е запазена!", + "Restrict SIP configuration" : "Ограничаване на SIP конфигурацията", + "Enable SIP configuration" : "Активиране на SIP конфигурацията", + "Only users of the following groups can enable SIP in conversations they moderate" : "Само потребители от следните групи могат да активират SIP в разговорите, които модерират", + "Phone number (Country)" : "Телефонен номер (държава)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Тази информация се изпраща в имейли с покани, също така се показва в страничната лента на всички участници.", + "Error code" : "Код за грешка", + "High-performance backend URL" : "URL адрес на високопроизводителен сървър", + "High-performance backend settings saved" : "Настройките на бекенд сървъра с висока производителност са запазени", + "STUN server URL" : "URL на STUN сървъра", + "The server address is invalid" : "Адресът на сървъра е невалиден", + "STUN settings saved" : "Настройките на STUN са запазени", + "STUN servers" : "STUN сървъри", + "A STUN server is used to determine the public IP address of participants behind a router." : "Сървърът STUN се използва за определяне на публичния IP адрес на участниците зад рутер.", + "Add a new STUN server" : "Добавяне на нов STUN сървър", + "{schema} scheme must be used with a domain" : "Схемата {schema} трябва да се използва с домейн", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Успешни ICE кандидати, върнати от TURN сървъра", + "Error: No working ICE candidates returned by the TURN server" : "Грешка: Няма работещи ICE кандидати, върнати от TURN сървъра", + "Testing whether the TURN server returns ICE candidates" : "Тества се дали TURN сървърът връща ICE кандидати", + "TURN server schemes" : "Сървърни схеми TURN", + "TURN server URL" : "URL на TURN сървъра", + "TURN server secret" : "Тайна на сървъра TURN", + "TURN server protocols" : "Протоколи на TURN сървър", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сървър се използва за прокси трафик от участници зад защитна стена. Ако отделните участници не могат да се свържат с други, най-вероятно е нужен TURN сървър. Вижте {linkstart} тази документация {linkend} с инструкции за настройка.", + "TURN settings saved" : "Настройките на TURN са запазени", + "TURN servers" : "TURN сървъри", + "Add a new TURN server" : "Добавяне на нов TURN сървър", + "Failed" : "Неуспешно", + "OK" : "Добре", + "Checking …" : "Проверка ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Неуспешно: WebAssembly е деактивиран или не се поддържа в този браузър. Моля, активирайте WebAssembly или използвайте браузър с поддръжка за него, за да направите проверката.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Неуспех: файловете „wasm“ и „.tflite“ не са върнати правилно от уеб сървъра. Моля, проверете раздела „Системни изисквания“ в документацията на Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файловете „wasm“ и „.tflite“ са върнати правилно от уеб сървъра.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Изглежда, че конфигурацията на PHP и Apache не е съвместима. Моля, обърнете внимание, че PHP може да се използва само с модул MPM_PREFORK, а PHP-FPM може да се използва само с модул MPM_EVENT.", + "Web server setup checks" : "Проверки за настройка на уеб сървъра", + "Files required for virtual background can be loaded" : "Могат да се заредят файлове необходими за виртуалния фон", + "Assign participants to rooms" : "Зачисляване на участници към стаи", + "Configure breakout rooms" : "Конфигуриране на стаи за отделно събрание", + "Number of breakout rooms" : "Брой стаи за отделно събрание", + "Assignment method" : "Метод на задаване", + "Automatically assign participants" : "Автоматично зачисляване на участници", + "Manually assign participants" : "Ръчно зачисляване на участниците", + "Allow participants to choose" : "Позволяване на участниците да избират", + "Create rooms" : "Създаване на стаи", + "Confirm" : "Потвърдете", + "Create breakout rooms" : "Създаване на стаи за отделно събрание", + "Reset" : "Възстановяване", + "Delete breakout rooms" : "Изтриване на стаи за отделно събрание", + "Room {roomNumber}" : "Стая {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текущите стаи за отделно събрание и настройки ще бъдат изгубени", + "Cancel" : "Отказ", + "Unassigned participants" : "Незачислени участници", + "Back" : "Назад", + "Assign" : "Задаване на", + "Add participant \"{user}\"" : "Добавяне на участник „{user}“", + "Now" : "Сега", + "Loading …" : "Зареждане …", + "From" : "От", + "To" : "До", + "Calendar" : "Kалендар", + "Attendees" : "Участници", + "Save" : "Запазване", + "Search participants" : "Търсене на участници", + "No results" : "Няма резултати", + "Done" : "Завършено", + "Raise hand" : "Вдигане на ръка", + "Raise hand (R)" : "Вдигане на ръка (R)", + "Lower hand" : "Сваляне на ръка", + "Lower hand (R)" : "Сваляне на ръка (R)", + "Speaker view" : "Изглед на високоговорителя", + "Grid view" : "Решетъчен изглед", + "This conversation is read-only" : "Този разговор е само за четене", + "Reload" : "Презареди", + "{nickName} raised their hand." : "{nickName} вдигна ръка.", + "A participant raised their hand." : "Един участник вдигна ръка.", + "Collapse stripe" : "Свиване на лента", + "Expand stripe" : "Разширяване на лента", + "Previous page of videos" : "Предишна страница с видеоклипове", + "Next page of videos" : "Следваща страница с видеоклипове", + "Connecting …" : "Свързване ...", + "Waiting for {user} to join the call" : "Изчаква се {user} да се присъедини към обаждането", + "Waiting for others to join the call …" : "Изчаква се и други да се присъединят към обаждането ...", + "You can invite others in the participant tab of the sidebar" : "Можете да поканите други от раздела за участници в страничната лента", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете да поканите други от раздела за участници на страничната лента или да споделите тази връзка, за да поканите други!", + "Share this link to invite others!" : "Споделете тази връзка, за да поканите други!", + "Copy link" : "Копирай връзката", + "You are not allowed to enable audio" : "Нямате право да активирате аудио", + "No audio. Click to select device" : "Няма аудио. Кликнете, за да изберете устройство", + "Mute audio" : "Спиране на звука", + "Mute audio (M)" : "Изключване на звука (M)", + "Unmute audio" : "Включване на звука", + "Unmute audio (M)" : "Включване на звука (M)", + "None" : "Без", + "Access to camera was denied" : "Беше отказан достъп до камера", + "Error while accessing camera: It is likely in use by another program" : "Грешка при достъп до камера: възможно е тя се използва от друга програма", + "Error while accessing camera" : "Грешка при достъп до камера", + "You have been muted by a moderator" : "Бяхте заглушен от модератор", + "You are not allowed to enable video" : "Нямате право да активирате видео", + "No video. Click to select device" : "Няма видео. Кликнете, за да изберете устройство", + "Disable video" : "Изключване на видеото", + "Disable video (V)" : "Изключване на видеото (V)", + "Enable video" : "Включи видео", + "Enable video (V)" : "Включване на видеото (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото - Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото (V) – Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Включване на видеото. Вашата връзка ще бъде прекъсната за кратко, когато включите видеото за първи път", + "You" : "Ти", + "Mute" : "Заглушаване", + "Muted" : "Заглушен", + "Show screen" : "Показване на екрана", + "Stop following" : "Спрете да следвате", + "Connection could not be established …" : "Връзката не можа да бъде установена …", + "Connection was lost and could not be re-established …" : "Връзката се изгуби и не можа да бъде възстановена ...", + "Connection could not be established. Trying again …" : "Връзката не можа да бъде установена. Повторен опит …", + "Connection lost. Trying to reconnect …" : "Връзката е загубена. Опит за повторно свързване …", + "Connection problems …" : "Проблеми с връзката …", + "Collapse" : "Сгъване", + "Expand" : "Разгъване", + "You need to be logged in to upload files" : "Трябва да сте влезли, за да качвате файлове", + "Drop your files to upload" : "Пуснете вашите файлове, за да ги качите", + "Conversation messages" : "Съобщения за разговор", + "Scroll to bottom" : "Превъртане до долу", + "Post message" : "Публикуване на съобщение", + "Favorite" : "Любима", + "Date:" : "Дата:", + "Hide details" : "Скриване на подробностите", + "Show details" : "Показване на подробности", + "Error while updating conversation name" : "Грешка при актуализиране на името на разговора", + "Error while updating conversation description" : "Грешка при актуализиране на описанието на разговора", + "Enter a name for this conversation" : "Въведете име за този разговор", + "Edit conversation name" : "Редактиране на името на разговора", + "Edit conversation description" : "Редактиране на описанието на разговора", + "Enter a description for this conversation" : "Въвеждане на описание за този разговор", + "Picture" : "Снимка", + "Disable" : "Изключване", + "Enable" : "Включена", + "Breakout rooms" : "Стаи за отделно събрание", + "Manage breakout rooms" : "Управление на стаите за отделно събрание", + "Set up breakout rooms for this conversation" : "Създаване на стаи за отделно събрание за този разговор", + "Please select a valid PNG or JPG file" : "Моля, изберете валиден PNG или JPG файл", + "Choose" : "Изберете", + "The file must be a PNG or JPG" : "Файлът трябва да е във формат PNG или JPG", + "Default permissions modified for {conversationName}" : "Права по подразбиране са променени за {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не можаха да се променят права по подразбиране за {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Редактиране на права по подразбиране за участниците в този разговор. Тези настройки не засягат модераторите.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Всеки път, когато се променят права в този раздел, потребителските права, които са били зададени преди това на отделните участници, ще бъдат загубени.", + "All permissions" : "Всички права", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Участниците имат права да започнат разговор, да се присъединят към разговор, да активират аудио и видео и да споделят екран.", + "Restricted" : "Ограничен", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Участниците могат да се присъединяват към разговори, но не могат да активират аудио или видео, нито да споделят екран, докато модераторът ръчно не им предостави права.", + "Advanced permissions" : "Разширени права", + "Edit permissions" : "Редактиране на права", + "Conversation settings" : "Настройки за разговор", + "Basic Info" : "Основна информация", + "Personal" : "Личен", + "Moderation" : "Модериране /Наблюдаване/", + "Breakout Rooms" : "Стаи за Отделно събрание", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Зона на опасност", + "Leave conversation" : "Напускане на разговор", + "You need to promote a new moderator before you can leave the conversation" : "Трябва да повишите нов модератор, преди да можете да напуснете разговора", + "Delete conversation" : "Изтриване на разговора", + "Do you really want to delete \"{displayName}\"?" : "Наистина ли искате да изтриете „{displayName}“?", + "Error while deleting conversation" : "Грешка при изтриването на разговор", + "Delete all chat messages" : "Изтриване на всички съобщенията в чата", + "Do you really want to delete all messages in \"{displayName}\"?" : "Наистина ли искате да изтриете всички съобщения в „{displayName}“?", + "Error while clearing chat history" : "Грешка при изчистване на историята на чата", + "Be careful, these actions cannot be undone." : "Бъдете внимателни, тези действия не могат да бъдат отменени.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Веднъж след като разговорът бъде напуснат, за да се присъедините отново към затворен разговор, е необходима покана. Към отворен разговор може да се присъедините по всяко време.", + "Permanently delete this conversation." : "Изтриване на разговора за постоянно.", + "Delete chat messages" : "Изтриване на съобщенията в чата", + "Permanently delete all the messages in this conversation." : "Изтриване за постоянно на всички съобщения в този разговор.", + "_%n hour_::_%n hours_" : ["%n часа","%n часа"], + "_%n day_::_%n days_" : ["%n дни","%n дни"], + "_%n week_::_%n weeks_" : ["%n седмици","%n седмици"], + "Custom expiration time" : "Персонализиране на времето на изтичане", + "Message expiration disabled" : "Изтичането на съобщение е деактивирано", + "Message expiration set: {duration}" : "Зададено изтичане на съобщение: {duration}", + "Error when trying to set message expiration" : "Грешка при опит за задаване на краен срок на съобщението", + "Message expiration" : "Изтичане на съобщението", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Съобщенията в чата могат да изтекат след определено време. Забележка: Файловете, споделени в чата, няма да бъдат изтрити за собственика, но повече няма да бъдат споделяни в разговора.", + "Guest access" : "Достъп за гост", + "Allow guests to join this conversation via link" : "Разрешаване на гостите да се присъединят към този разговор чрез връзка", + "Password protection" : "Password protection", + "Set a password" : "Задаване на парола", + "Change password" : "Промяна на парола", + "Enter new password" : "Въвеждане на нова парола", + "Save password" : "Запиши паролата", + "Resend invitations" : "Повторно изпращане на покани", + "Error occurred when opening or limiting the conversation" : "Възникна грешка при отваряне или ограничаване на разговора", + "Open conversation to registered users, showing it in search results" : "Отваряне на разговора за регистрирани потребители, и показването му в резултатите от търсенето", + "Start time has been updated" : "Началният час е актуализиран ", + "Error occurred while updating start time" : "Възникна грешка при актуализиране на началния час", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Активирането на лобито ще премахне немодераторите от текущия разговор.", + "Enable lobby, restricting the conversation to moderators" : "Активиране на лобито и ограничаване на разговора за модераторите", + "Meeting start time" : "Начален час на срещата", + "Start time (optional)" : "Начален час (по избор)", + "Error occurred when locking the conversation" : "Възникна грешка при заключване на разговора", + "Error occurred when unlocking the conversation" : "Възникна грешка при отключване на разговора", + "Lock conversation" : "Заключване на разговор", + "This will also terminate the ongoing call." : "Това също ще прекрати текущото обаждане.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Заключване на разговора, за да се попречи на всеки да публикува съобщения или да започва обаждания", + "Edit" : "Променяне", + "More information" : "Повече информация", + "Delete" : "Изтриване", + "Add new bridged channel to current conversation" : "Добавяне на нов мостов канал към текущия разговор", + "unknown state" : "неизвестно състояние", + "running" : "в процес", + "not running, check Matterbridge log" : "не работи, проверка на журнал на Matterbridge", + "not running" : "не работи", + "Bridge saved" : "Мостът е запазен", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Можете да свързвате канали от различни системи за незабавни съобщения с Matterbridge.", + "More info on Matterbridge" : "Повече информация за Matterbridge", + "Enable bridge" : "Активиране на мост", + "Show Matterbridge log" : "Показване на журнал на Matterbridge", + "Log content" : "Съдържание на журнал", + "Notifications" : "Известия", + "Notify about calls in this conversation" : "Уведомяване за обаждания в този разговор", + "Important conversation" : "Важен разговор", + "SIP dial-in is now possible without PIN requirement" : "Вече е възможно SIP набиране без изискване за PIN", + "SIP dial-in is now enabled" : "SIP набирането вече е активирано", + "SIP dial-in is now disabled" : "SIP набирането вече е деактивирано", + "Error occurred when enabling SIP dial-in" : "Възникна грешка при активиране на SIP набиране", + "Error occurred when disabling SIP dial-in" : "Възникна грешка при деактивиране на SIP набиране", + "Phone and SIP dial-in" : "Набиране по телефон и SIP", + "Enable phone and SIP dial-in" : "Активиране на телефонно и SIP набиране", + "Allow to dial-in without a PIN" : "Разрешаване на набиране без ПИН", + "Join" : "Влез", + "Error while creating the conversation" : "Грешка при създаването на разговора", + "Unread mentions" : "Непрочетени споменавания", + "Create conversation" : "Създаване на разговор", + "Enter your name" : "Въведете вашето име", + "Mark as read" : "Маркирай като прочетено", + "Mark as unread" : "Маркирай като непрочетено", + "Remove from favorites" : "Премахни от любимите", + "Add to favorites" : "Добави към любимите", + "You need to promote a new moderator before you can leave the conversation." : "Трябва да повишите нов модератор, преди да можете да напуснете разговора.", + "Conversation actions" : "Действия при разговор", + "Home" : "Начало", + "Unread" : "Непрочетено", + "Alphabetically" : "По азбучен ред", + "No matches found" : "Няма намерени съвпадения", + "No conversations found" : "Няма намерени разговори", + "An error occurred while performing the search" : "Възникна грешка при извършване на търсенето", + "Conversation list" : "Списък с разговори", + "Unread messages" : "Непрочетени съобщения", + "New personal note" : "Нова лична бележка", + "Clear filter" : "Изчстиване на филтър", + "App settings" : "Настройки на приложението", + "Users" : "Потребители", + "Groups" : "Групи", + "Other sources" : "Други източници", + "Open conversations" : "Отворени разговори", + "No search results" : "Няма резултати от търсенето", + "Users and groups" : "Потребители и групи", + "The meeting will start soon" : "Срещата ще започне скоро", + "This meeting is scheduled for {startTime}" : "Тази среща е насрочена за {startTime}", + "You are currently waiting in the lobby" : "В момента изчаквате в лобито", + "Select microphone" : "Избор на микрофон", + "No microphone available" : "Няма наличен микрофон", + "Select camera" : "Избор на камера", + "No camera available" : "Няма налична камера", + "Test" : "Тест", + "Devices" : "Устройства", + "Backgrounds" : "Фонове", + "No audio" : "Без аудио", + "No camera" : "Без камера", + "Calls are not supported in your browser" : "Обажданията не се поддържат във вашия браузър", + "Access to microphone is only possible with HTTPS" : "Достъп до микрофона е възможен само с HTTPS", + "Access to microphone was denied" : "Беше отказан достъп до микрофон", + "Error while accessing microphone" : "Грешка при достъп до микрофон", + "Access to camera is only possible with HTTPS" : "Достъп до камера е възможен само с HTTPS", + "The call is being recorded." : "Разговорът се записва.", + "Select a file" : "Избор на файл", + "Invalid path selected" : "Предоставен е невалиден път до файл.", + "Blur" : "Замъгляване", + "Upload" : "Качване", + "Files" : "Файлове", + "The message has expired or has been deleted" : "Съобщението е изтекло или е изтрито", + "Cancel quote" : "Отказ на офертата", + "24 hours" : "24 часа", + "7 days" : "7 дни", + "Clear reminder – {timeLocale}" : "Премахни напомнянето - {timeLocale}", + "Add a reaction to this message" : "Добавяне на реакция към това съобщение", + "Reply" : "Отговори", + "More actions" : "Повече действия", + "Reply privately" : "Отговаряне на лично ", + "Edit message" : "Редактиране на съобщение", + "Copy message link" : "Копиране на връзката към съобщението", + "Go to file" : "Отидете до файла", + "Forward message" : "Препращане на съобщение", + "Translate" : "Превод", + "Close reactions menu" : "Затваряне на менюто за действия", + "React with {emoji}" : "Реагирайте с {emoji}", + "React with another emoji" : "Реагирайте с друг емотикон", + "Choose a conversation to forward the selected message." : "Изберете разговор, за да препратите избраното съобщение.", + "Error while forwarding message" : "Грешка при препращане на съобщение", + "The message has been forwarded to {selectedConversationName}" : "Съобщението е препратено до {selectedConversationName}", + "Dismiss" : "Отхвърляне", + "Go to conversation" : "Отиване на разговор", + "Detect language" : "Разпознаване на език", + "Send now" : "Изпратете сега", + "Message read by everyone who shares their reading status" : "Съобщение, прочетено от всеки, който споделя статуса си на четене", + "Message sent" : "Съобщението е изпратено", + "Deleting message" : "Съобщението се изтрива", + "Message deleted successfully" : "Съобщението е изтрито успешно", + "Message could not be deleted because it is too old" : "Съобщението не можа да бъде изтрито, защото е твърде старо", + "Only normal chat messages can be deleted" : "Само нормалните съобщения за чат могат да бъдат изтрити", + "An error occurred while deleting the message" : "Възникна грешка при изтриването на съобщението", + "Your browser does not support playing audio files" : "Вашият браузър не поддържа възпроизвеждане на аудио файлове", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} в {board}", + "Deck Card" : "Deck карта", + "Remove {fileName}" : "Премахване на {fileName}", + "Open this location in OpenStreetMap" : "Отвяне на това местоположение в OpenStreetMap", + "Sending message" : "Изпращане на съобщение", + "Failed to send the message. Click to try again" : "Изпращането на съобщението не беше успешно. Кликнете, за да опитате отново", + "Not enough free space to upload file" : "Няма достатъчно свободно място за качване на файл", + "You cannot send messages to this conversation at the moment" : "В момента не можете да изпращате съобщения до този разговор", + "You voted" : "Вие гласувахте", + "_%n vote_::_%n votes_" : ["%nгласувания ","%n гласувания"], + "See results" : "Вижте резултатите", + "No permission to post reactions in this conversation" : "Няма зададено право за публикуване на реакции в този разговор", + "Add more reactions" : "Добавяне на повече реакции", + "No messages" : "Няма съобщения.", + "All messages have expired or have been deleted." : "Всички съобщения са изтекли или са били изтрити.", + "Unpin" : "Отмяна на закачване", + "Cancel search" : "Отказване на търсенето", + "Create a new group conversation" : "Създаване на нов групов разговор", + "Add participants" : "Добавяне на участници", + "Conversation visibility" : "Видимост на разговора", + "Allow guests to join via link" : "Разрешете на гостите да се присъединят чрез връзка", + "Enter password" : "Въвеждане на парола", + "This conversation has been locked" : "Този разговор е заключен", + "No permission to post messages in this conversation" : "Няма право за публикуване на съобщения в този разговор", + "Joining conversation …" : "Присъединяване към разговора ...", + "Send message" : "Изпрати съобщение", + "Send without notification" : "Изпращане без известие", + "File to share" : "Файл за споделяне", + "Add emoji" : "Добавяне на емотикон", + "Send later" : "Изпратете по-късно", + "Cancel editing" : "Отказ на редактирането", + "Absence period: {startDate} - {endDate}" : "Период на отсъствие: {startDate} до {endDate}.", + "Share from {nextcloud}" : "Споделяне от {nextcloud}", + "Share from Files" : "Споделяне от файлове", + "Share files to the conversation" : "Споделяне на файлове в разговора", + "Upload from device" : "Качване от устройство", + "Create new poll" : "Създаване на нова анкета", + "Smart picker" : "Умно избиране", + "Record voice message" : "Запис на гласово съобщение", + "End recording and send" : "Край на записа и изпращане", + "Dismiss recording" : "Отхвърляне на записа", + "Access to the microphone was denied" : "Беше отказан достъп до микрофона", + "Microphone either not available or disabled in settings" : "Микрофонът или не е наличен, или е деактивиран в настройките", + "Error while recording audio" : "Грешка при запис на аудио", + "New file" : "Нов файл", + "Blank" : "Празен", + "Error while creating file" : "Грешка при създаване на файл", + "Create and share a new file" : "Създаване и споделяне на нов файл", + "Name of the new file" : "Име на новия файл", + "Create file" : "Създаване на файл", + "Add more files" : "Добавяне на още файлове ", + "Send" : "Изпрати", + "In this conversation {user} can:" : "В този разговор {user} може:", + "Edit default permissions for participants in {conversationName}" : "Редактиране на права по подразбиране за участниците в {conversationName}", + "Start a call" : "Започване на обаждане", + "Skip the lobby" : "Пропускане на лобито", + "Can post messages and reactions" : "Може да се публикуват съобщения и реакции", + "Enable the microphone" : "Активиране на микрофона", + "Enable the camera" : "Активиране на камера", + "Share the screen" : "Споделяне на екрана", + "Update permissions" : "Актуализиране на права", + "Updating permissions" : "Актуализират се права", + "There is no poll drafts yet saved for this conversation" : "Все още няма запаметени чернови на анкети за този разговор", + "Create poll" : "Създаване на анкета", + "Question" : "Въпрос", + "Ask a question" : "Задаване на въпрос", + "Answers" : "Отговори", + "Answer {option}" : "Отговор {option}", + "Delete poll option" : "Изтриване на опция за анкета", + "Add answer" : "Добавяне на отговор", + "Settings" : "Настройки", + "Anonymous poll" : "Анонимна анкета", + "Multiple answers" : "Множество отговори", + "You voted for this option" : "Гласували сте за тази опция", + "End poll" : "Край на анкетата", + "Change your vote" : "Променете гласуването си", + "Results" : "Резултати", + "Voted participants" : "Гласували участници", + "Send a message to \"{roomName}\"" : "Изпращане на съобщение до „{roomName}“", + "Hide list of participants" : "Скриване на списъка с участници", + "Show list of participants" : "Показване на списъка с участници", + "Assistance requested in {roomName}" : "Поискано е съдействие в {roomName}", + "The message was sent to \"{roomName}\"" : "Съобщението е изпратено до „{roomName}“", + "Dismiss request for assistance" : "Отхвърляне на заявка за съдействие", + "Send message to room" : "Изпращане на съобщение до стая", + "Back to main room" : "Обратно към основната стая", + "Back to your room" : "Обратно към вашата стая", + "Message all rooms" : "Съобщение до всички стаи", + "Start session" : "Начало на сесията", + "Start a call before you start a breakout room session" : "Започване на обаждане, преди да стартирате сесия в стая за отделно събрание", + "Stop session" : "Спиране на сесия", + "The message was sent to all breakout rooms" : "Съобщението е изпратено до всички стаи за отделно събрание", + "Send a message to all breakout rooms" : "Изпращане на съобщение до всички стаи за отделно събрание", + "Breakout rooms are not started" : "Стаите за отделно събрание не са стартирани", + "Disable lobby" : "Деактивиране на лоби", + "Settings for participant \"{user}\"" : "Настройки за участник „{user}“", + "Participant \"{user}\"" : "Участник „{user}“", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гост", + "Raised their hand" : "Вдигнаха ръка", + "Joined with video" : "Присъединен с видео", + "Joined via phone" : "Присъединен по телефона", + "Joined with audio" : "Присъединен с аудио", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текстът трябва да е по-малък или равен на {maxLength} знака. Текущият ви текст е дълъг {charactersCount} знака.", + "Remove group and members" : "Премахване на групата и на членовете", + "Remove participant" : "Премахване на участник", + "Notification was sent to {displayName}" : "Беше изпратено известие до {displayName}", + "Could not send notification to {displayName}" : "Не можа да се изпрати известие до {displayName}", + "Permissions granted to {displayName}" : "Дадоха се права на {displayName}", + "Could not modify permissions for {displayName}" : "Не можаха да се променят права за {displayName}", + "Permissions removed for {displayName}" : "Премахнати са права за {displayName}", + "Permissions set to default for {displayName}" : "Зададени са права по подразбиране за {displayName}", + "Dial-in PIN" : "ПИН за набиране", + "Demote from moderator" : "Понижаване от модератор", + "Promote to moderator" : "Повишаване до модератор", + "Resend invitation" : "Повторно изпращане на покана", + "Send call notification" : "Изпращане на известие за обаждане", + "Reset custom permissions" : "Възстановяване на персонализираните права", + "Grant all permissions" : "Даване на всички права", + "Remove all permissions" : "Премахване на всички права", + "Remove" : "Премахване", + "Permissions modified for {displayName}" : "Променени са права за {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Добавяне на потребители", + "Add groups" : "Добавяне на групи", + "Add other sources" : "Добавяне на други източници", + "Add emails" : "Добавяне на имейли", + "Integrations" : "Интеграции", + "Add federated users" : "Добавяне на федерирани потребители", + "Searching …" : "Търсене ...", + "Search for more users" : "Търсене на повече потребители", + "Search or add participants" : "Търсене или добавяне на участници", + "Invitation was sent to {actorId}" : "Беше изпратена покана до {actorId}", + "An error occurred while adding the participants" : "Възникна грешка при добавянето на участници", + "Participants" : "Участници", + "Participants ({count})" : "Участници ({count})", + "Open chat" : "Отворяне на чата", + "You have new unread messages in the chat." : "Имате нови непрочетени съобщения в чата.", + "You have been mentioned in the chat." : "Споменаха ви в чата.", + "Chat" : "Съобщения", + "Details" : "Подробности", + "Shared items" : "Споделени елементи", + "No results found" : "Няма намерени резултати", + "Load more results" : "Зареждане на още резултати", + "Projects" : "Проекти", + "No shared items" : "Няма споделени елементи", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Свързване към разговор", + "Search conversations or users" : "Търсене на разговори или потребители", + "Select conversation" : "Избор на разговор", + "Save name" : "Запиши името", + "Error while setting personal setting" : "Грешка при записване на личната настройка", + "Error while saving sounds setting" : "Грешка при запазване на настройката за звуци", + "Play sounds when participants join or leave a call" : "Възпроизвеждане на звуци, когато участниците се присъединят или напуснат разговор", + "Notification settings" : "Настройки на известие", + "Default language" : "Стандартен език", + "Select location for attachments" : "Избор на местоположение за прикачени файлове", + "Error while setting attachment folder" : "Грешка при настройка на папка за прикачени файлове", + "Error while setting read status privacy" : "Грешка при задаване на поверителност на състоянието на четене", + "Privacy" : "Поверителност", + "Attachments folder" : "Папка с прикачени файлове", + "Search" : "Търсене", + "Focus the chat input" : "Фокусиране на въвеждането в чата", + "Unfocus the chat input to use shortcuts" : "Прекратяване на фокусирането на въвеждането в чата, за да се използват преки пътища ", + "Shortcuts while in a call" : "Преки пътища по време на обаждане", + "Camera on and off" : "Включване и изключване на камера", + "Microphone on and off" : "Включване и изключване на микрофон", + "Raise or lower hand" : "Повдигане или сваляне на ръка", + "Push to talk or push to mute" : "Натиснете за разговор или натиснете за заглушаване", + "Start call silently" : "Започване на разговор безшумно", + "Start call" : "Започване на обаждане", + "You will be able to join the call only after a moderator starts it." : "Ще можете да се присъедините към разговора само след като го започне модератор.", + "End call for everyone" : "Прекратяване на разговора за всички", + "Starting the recording" : "Започване на записа", + "Recording" : "Записване", + "Cancel recording start" : "Отмяна на стартирането на записа", + "Stop recording" : "Спиране на записването", + "Send a reaction" : "Изпращане на реакция", + "React with {reaction}" : "Реагирайте с {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n участници в разговора","%n участници в разговора"], + "You are not allowed to enable screensharing" : "Нямате право да активирате споделянето на екрана", + "No screensharing" : "Без споделяне на екрана", + "Screensharing options" : "Опции за споделяне на екрана", + "Enable screensharing" : "Активиране на споделянето на екрана", + "Bad sent video and screen quality." : "Лошо изпратено видео и качество на екрана.", + "Bad sent screen quality." : "Лошо изпратено качество на екрана.", + "Bad sent video quality." : "Лошо изпратено качество на видеото.", + "Bad sent audio, video and screen quality." : "Лошо изпратено качество на звука, видеото и екрана.", + "Bad sent audio and screen quality." : "Лошо изпратено качество на звука и на екрана.", + "Bad sent audio and video quality." : "Лошо изпратено качество на звук и на видео. ", + "Bad sent audio quality." : "Лошо изпратено качество на звука. ", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или на видеоклипа си, докато правите споделяне на екрана.", + "Disable background blur" : "Деактивиране на замъгляването на фона", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може да не могат да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Интернет връзката или компютърът ви са заети и другите участници може да не могат да видят екрана ви.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви видят.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или на видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате видеоклипа си, докато правите споделяне на екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и да видят екрана ви. За да подобрите ситуацията, опитайте се да деактивирате споделянето на екрана.", + "Disable screenshare" : "Деактивиране на споделянето на екрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате замъгляването на фона или вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат и видят. За да подобрите ситуацията, опитайте се да деактивирате вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Интернет връзката или компютърът ви са заети и другите участници може и да не могат да ви разберат.", + "Screen sharing is not supported by your browser." : "Споделянето на екрана не се поддържа от вашия браузър.", + "Screen sharing requires the page to be loaded through HTTPS." : "Споделянето на екрана изисква страницата да бъде заредена чрез HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Споделянето на екрана изисква страницата да бъде заредена чрез HTTPS.", + "An error occurred while starting screensharing." : "Възникна грешка при стартиране на споделянето на екрана.", + "Show your screen" : "Покажете екрана си", + "Stop screensharing" : "Спрете споделянето на екрана", + "Mute others" : "Заглушаване на другите", + "Start recording" : "Започване на запис", + "Set up breakout rooms" : "Създаване на стаи за отделно събрание", + "Remove participant {name}" : "Премахване на участник {name}", + "Keep" : "Запази", + "Select a region" : "Изберете регион", + "Search …" : "Търсене …", + "Message without mention" : "Съобщение без споменаване", + "Mention myself" : "Споменх себе си", + "The conversation does not exist" : "Разговорът не съществува", + "Join a conversation or start a new one!" : "Присъединяване към разговор или започване на нов", + "Duplicate session" : "Дублирана сесия", + "Join a conversation or start a new one" : "Присъединяване към разговор или започване на нов", + "Nextcloud URL" : "URL адрес на Nextcloud", + "Nextcloud user" : "Потребител на Nextcloud", + "User password" : "Потребителска парола", + "Talk conversation" : "Talk разговор", + "Skip TLS verification" : "Пропускане на TLS потвърждение", + "Matrix server URL" : "URL адрес на матричен сървър", + "User" : "Потребител", + "Matrix channel" : "Матричен канал", + "Mattermost server URL" : " URL адрес на сървъра на Mattermost", + "Mattermost user" : "Потребител на Mattermost", + "Team name" : "Име на екипа", + "Channel name" : "Име на канала", + "Rocket.Chat server URL" : "URL адрес на сървъра на Rocket.Chat", + "User name or email address" : "Потребителско име или имейл адрес", + "Rocket.Chat channel" : "Rocket.Chat канал", + "Zulip server URL" : "URL адрес на сървъра на Zulip", + "Bot user name" : "Потребителско име на бот", + "Bot API key" : "API ключ за бот", + "Zulip channel" : "Zulip канал", + "API token" : "API токен", + "Slack channel" : "Slack канал", + "Server ID or name" : "Идентификатор или име на сървъра", + "Channel" : "Канал", + "Login" : "Вписване", + "Chat ID" : "Идентификатор за чат", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL адрес на IRC сървър (напр. chat.freenode.net:6667)", + "Nickname" : "Псевдоним", + "Connection password" : "Парола за връзка", + "IRC channel" : "IRC канал", + "Channel password" : "Парола за канал ", + "NickServ nickname" : "Псевдоним за NickServ", + "NickServ password" : "Парола за NickServ", + "Use TLS" : "Използвайте TLS", + "Use SASL" : "Използвайте SASL", + "Tenant ID" : "Идентификатор на клиент", + "Client ID" : "Client ID", + "Team ID" : "Идентификатор на екип", + "Thread ID" : "Идентификатор на нишка", + "XMPP/Jabber server URL" : "URL адрес на XMPP/Jabber сървър", + "MUC server URL" : "URL адрес на MUC сървър", + "Jabber ID" : "Идентификатор на Jabber", + "Media" : "Медия", + "Polls" : "Анкети", + "Deck cards" : "Deck карти", + "Voice messages" : "Гласови съобщения", + "Locations" : "Местоположения", + "Call recordings" : "Записи на обаждания", + "Audio" : "Аудио", + "Show all media" : "Показване на всички медии", + "Show all files" : "Показване на всички файлове", + "Show all polls" : "Показване на всички анкети", + "Show all deck cards" : "Показване на всички deck карти", + "Show all voice messages" : "Показване на всички гласови съобщения", + "Show all locations" : "Показване на всички местоположения", + "Show all call recordings" : "Показване на всички записи на обаждания", + "Show all audio" : "Показване на всички аудиозаписи", + "Show all other" : "Показване на всичко останало", + "Group" : "Група", + "Team" : "Екип", + "You: {lastMessage}" : "Вие: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Опитвате се да се присъедините към разговор, докато имате активна сесия в друг прозорец или устройство. Това в момента не се поддържа от Nextcloud Talk. Какво искате да направите?", + "Leave this page" : "Напускане на тази страница", + "Join here" : "Присъединяване тук", + "An error occurred while posting deck card to conversation" : "Възникна грешка при публикуване на deck карта в разговор", + "Post to a conversation" : "Публикуване в разговор", + "Post to conversation" : "Публикуване в разговорa", + "The recording failed. Please contact your administrator." : "Записът е неуспешен. Моля, свържете се с вашия администратор.", + "An error occurred while posting location to conversation" : "Възникна грешка при публикуване на местоположението в разговор", + "Share to a conversation" : "Споделяне в разговор", + "Share to conversation" : "Споделяне в разговора", + "Error while clearing conversation history" : "Грешка при изчистване на историята на разговорите", + "Error occurred while allowing guests" : "Възникна грешка при разрешаването на гостите", + "Error occurred while disallowing guests" : "Възникна грешка при забраняването на гостите", + "Error occurred when restricting the conversation to moderator" : "Възникна грешка при ограничаване на разговора до модератор", + "Error occurred when opening the conversation to everyone" : "Възникна грешка при отваряне на разговора за всички", + "Conversation password has been saved" : "Паролата за разговор е записана", + "Conversation password has been removed" : "Паролата за разговор е премахната", + "Error occurred while saving conversation password" : "Възникна грешка при запазване на паролата за разговор", + "Call recording is starting." : "Записването на обаждането започва.", + "Call recording stopped while starting." : "Записването на разговора спря при стартирането му.", + "Call recording stopped. You will be notified once the recording is available." : "Записването на обаждането е спряно. Ще бъдете уведомени, когато записът е наличен.", + "Conversation picture set" : "Набор от снимки на разговор", + "Conversation picture deleted" : "Снимката на разговора е изтрита", + "Could not delete the conversation picture" : "Не можа да се изтрие снимката на разговора", + "Could not post message: {errorMessage}" : "Не можа да се публикува съобщение: {errorMessage}", + "An error occurred while fetching the participants" : "Възникна грешка при извличане на участниците", + "Could not send invitation to {actorId}" : "Не можа да се изпрати покана до {actorId}", + "Invitations sent" : "Поканите са изпратени", + "Error occurred when sending invitations" : "Възникна грешка при изпращането на покани", + "An error occurred while creating breakout rooms" : "Възникна грешка при създаването на стаи за отделно събрание", + "An error occurred while re-ordering the attendees" : "Възникна грешка при пренареждане на участниците", + "An error occurred while deleting breakout rooms" : "Възникна грешка при изтриването на стаи за отделно събрание", + "An error occurred while starting breakout rooms" : "Възникна грешка при стартирането на стаи за отделно събрание", + "An error occurred while stopping breakout rooms" : "Възникна грешка при спирането на стаи за отделно събрание", + "An error occurred while sending a message to the breakout rooms" : "Възникна грешка при изпращането на съобщение до стаи за отделно събрание", + "An error occurred while requesting assistance" : "Възникна грешка при заявка за съдействие", + "An error occurred while resetting the request for assistance" : "Възникнала е грешка при възстановяване на заявката за съдействие", + "An error occurred while joining breakout room" : "Възникна грешка при присъединяването към стаята за отделно събрание", + "{guest} (guest)" : "{guest} (гост)", + "Poll draft has been saved" : "Черновата на анкетата е запаметена", + "An error occurred while submitting your vote" : "Възникна грешка при изпращането на вашето гласуване", + "An error occurred while ending the poll" : "Възникна грешка при приключване на анкетата", + "Failed to add reaction" : "Неуспешно добавяне на реакция", + "Failed to remove reaction" : "Неуспешно премахване на реакция", + "Error while uploading file \"{fileName}\"" : "Грешка при качването на файл „{fileName}“", + "Not enough free space to upload file \"{fileName}\"" : "Няма достатъчно свободно място за качване на файл „{fileName}“", + "You are not allowed to share files" : "Нямате право да споделяте файлове", + "Error while sharing file" : "Грешка при споделяне на файл", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Браузърът, който използвате, не се поддържа напълно от Nextcloud Talk. Моля, използвайте най-новата версия на Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "Later today – {timeLocale}" : "По-късно днес - {timeLocale}", + "Tomorrow – {timeLocale}" : "Утре - {timeLocale}", + "This weekend – {timeLocale}" : "Този уикенд - {timeLocale}", + "Next week – {timeLocale}" : "Следващата седмица - {timeLocale}", + "Message link copied to clipboard" : "Връзката към съобщението е копирана в клипборда", + "Conversation link copied to clipboard" : "Връзката към разговора е копирана в клипборда", + "The link could not be copied" : "Връзката не можа да бъде копирана", + "Error while parsing a PROPFIND error" : "Грешка при синтактичния анализ на грешка в PROPFIND", + "Sending signaling message has failed" : "Изпращането на сигнално съобщение е неуспешно", + "Lost connection to signaling server. Trying to reconnect." : "Загубена връзка със сървъра за сигнализация. Опит за повторно свързване.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Конфигурираният сървър за сигнализация трябва да бъде актуализиран, за да е съвместим с тази версия на приложениетоTalk. Моля, свържете се с вашия администрация.", + "Please reload the page." : "Моля, презаредете страницата.", + "Do not disturb" : "Не безпокойте", + "Away" : "Отсъстващ", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Високоговорител {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Изглежда, че говорите със заглушен звук, моля, включете звука, за да ви чуват другите", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не можа да се установи връзка с поне един участник. Може да е необходим TURN сървър за вашия сценарий. Моля, помолете администратора си да настрои такъв, като следвате {linkstart}тази документация{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Това отнема повече време от очакваното. Предоставени ли са вече права за медии (или отхвърлени)? Ако отговорът е да, моля, рестартирайте браузъра си, тъй като аудиото и видеото не работят ", + "Access to microphone & camera is only possible with HTTPS" : "Достъпът до микрофона и камерата е възможен само при HTTPS", + "Please move your setup to HTTPS" : "Моля, преместете настройката си в HTTPS", + "Access to microphone & camera was denied" : "Достъпът до микрофона и камерата е отказан", + "WebRTC is not supported in your browser" : "WebRTC не се поддържа във вашия браузър", + "Please use a different browser like Firefox or Chrome" : "Моля, използвайте друг браузър като Firefox или Chrome", + "Error while accessing microphone & camera" : "Грешка при достъп до микрофон и камера", + "%s Talk on your mobile devices" : "%s Talk на мобилните ви устройства", + "Join conversations at any time, anywhere, on any device." : "Присъединяване към разговори по всяко време, навсякъде и на всяко устройство.", + "Android app" : "Android приложение", + "iOS app" : "iOS приложениер", + "__language_name__" : "Български", + "Tasks" : "Задачи", + "Notes" : "Бележки", + "Reports" : "Доклади", + "Talk conversation for event" : "Talk разговор за събитие", + "Talk recording from {time} ({conversation})" : "Запис на разговор от {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати от анкетата • %n гласа","Резултати от анкетата • %n гласа"], + "Submit vote" : "Изпращане на гласуване", + "Your privacy setting has been saved" : " Настройката ви за поверителност е запазена", + "Your personal setting has been saved" : "Личната бележка е запаметена", + "Failed to save sounds setting" : "Неуспешно запазване на настройката за звуци", + "Sounds setting saved" : "Настройката за звуци е запазена", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Присъединихте се към разговора в друг прозорец или устройство. Това в момента не се поддържа от Nextcloud Talk, така че тази сесия беше затворена." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/br.js b/l10n/br.js new file mode 100644 index 0000000..f6b3a9c --- /dev/null +++ b/l10n/br.js @@ -0,0 +1,716 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "un diviz", + "(Duration %s)" : "(Padelezh %s)", + "You attended a call with {user1}" : "Ur galvavadenn o peus bet gant {user1}", + "_%n guest_::_%n guests_" : ["%n gouviad","%n gouviad","%n gouviad","%n gouviad","%n gouviad"], + "You attended a call with {user1} and {user2}" : "Ur galvavadenn o peus bet gant {user1} ha {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ur galvavadenn o peus bet gant {user1}, {user2} ha {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ur galvavadenn o peus bet gant {user1}, {user2}, {user3} ha {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ur galvavadenn o peus bet gant {user1}, {user2}, {user3}, {user4} ha {user5}", + "_%n other_::_%n others_" : ["%n all","%n all","%n all","%n all","%n all"], + "{actor} invited you to {call}" : "Kouviet oc'h da {call} gant {actor}", + "You were invited to a conversation or had a call" : "Kouviet oc'h d'un diviz pe ouzhpennet d'ur galvadenn", + "Other activities" : "Oberiantizoù all", + "Talk" : "Komz", + "Guest" : "Kouviad", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Micosoft Edge ha Safari a zo posupl implij evit ar gemenadenoù audio a video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Posupl eo deoc'h gervel tout en dud en diviz en ur skrivañ \"@all\" er chat", + "- With the \"arrow-up\" key you can repost your last message" : " -Gant an douchenn \"bir-a-uz\" en posupl adkas ar gemenadenn divezhañ", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk en deus urzioù bremañ, kasit \"/help\" evel ur gemenadenn chat evit gwelet m'az eo bet stummet urzioù gant o merour", + "- With projects you can create quick links between conversations, files and other items" : "- Gant Raktres eo posupl deoc'h krouiñ liammoù etre an divizoù, restroù ha traoù all", + "- You can now mention guests in the chat" : "- Posuple eo deoc'h menegiñ kouvidi er chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Ur sal gortoz eo posupl kaout evit an divizoù. Aotreañ a raio an habaskaerien da vont er chat hag er gemenaden evit prientiñ ar gejadenn, padal eo ret d'an implijourien ha d'ar gouviidi gortoz", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Posupl eo deoc'h respont diouzhtu d'ar gemenadennoù en ur displegañ diwar benn petra eo ar gemenadenn.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Klask divizoù ha lodeget a implijo ivez ho divizoù, ma vo aesoc'h adkavout divizoù kozh", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Posupl eo deoc'h ouzhpenañ strolladoù implijourien personelaet d'an divizoù gant ar meziant kelc'h staliet", + "- Check out the new grid and call view" : "- Sellit ouzh ar rouedad ha kemener nevez", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Posuple eo deoc'h pelkas ha ruzañ-lakaat restroù diozhtu eus o ardivink er chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Restrom rannet a vez igoret diozhtu er chat gant ar lenner maziant", + "Talk updates ✅" : "Adnevesaden Talk ✅", + "{actor} created the conversation" : "{actor} en deus krouet an diviz", + "You created the conversation" : "Krouet o peus an diviz", + "An administrator created the conversation" : "Ar merour en deus krouet an diviz", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} en deus adenvet an diviz eus \"%1$s\" da \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Adenvet o peus an diviz eus \"%1$s\" da \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ar merour en deus adenvet an diviz eus \"%1$s\" da \"%2$s\"", + "You started a call" : "Kroget o peus ur gemenadenn", + "{actor} started a call" : "{actor} en deus kroget ur gemenadenn", + "{actor} joined the call" : "{actor} a zo deuet er gemenadenn", + "You joined the call" : "Deuet oc'h er gemenaden", + "{actor} left the call" : "{actor} en deus kuitaet ar gemenadenn", + "You left the call" : "Kuitaet o peus ar gemenaden", + "{actor} unlocked the conversation" : "{actor} en deus digoret ar gemenadenn", + "You unlocked the conversation" : "Digoret o peus ar gemenadenn", + "An administrator unlocked the conversation" : "Ar merour en deus digoret ar gemenadenn", + "{actor} locked the conversation" : "{actor} en deus seret ar gemenadenn", + "You locked the conversation" : "Serte ho peus ar gemenadenn", + "An administrator locked the conversation" : "Ar merour en deus seret ar gemenadenn", + "The conversation is now open to everyone" : "Digoret eo ar gemenadenn da tout an dud", + "{actor} opened the conversation to everyone" : "{actor} en deus digoret ar gemenadenn da tout an dud.", + "You opened the conversation to everyone" : "Digoret ho peus ar gemenadenn da tout an dud.", + "{actor} restricted the conversation to moderators" : "{actor} en deus bevennet ar gemenadenn d'an habaskaerien", + "You restricted the conversation to moderators" : "Bevennet ho peus ar gemenadenn d'an habaskaerien", + "{actor} allowed guests" : "{actor} en deus aotreet kouviidi", + "You allowed guests" : "Aotreet ho peus kouviidi", + "An administrator allowed guests" : "Ar merour en deus aotreet kouviidi", + "{actor} disallowed guests" : "{actor} en deus disaotreet kouviidi", + "You disallowed guests" : "Disaotreet ho peus kouviidi", + "An administrator disallowed guests" : "Ar merour en deus disaotreet kouviidi", + "{actor} set a password" : "{actor} en/he deus termenet ur ger-tremen", + "You set a password" : "Termenet ho peus ur ger-tremen", + "An administrator set a password" : "Ur merour en/he deus termenet ur ger-tremen", + "{actor} removed the password" : "{actor} en/he deus dilamet ar ger-tremen", + "You removed the password" : "Dilamet ho peus ar ger-tremen", + "An administrator removed the password" : "Ur merour en/he deus dilamet ar ger-tremen", + "{actor} added {user}" : "{actor} en deus ouzhpennet {user}", + "You joined the conversation" : "Deuet oc'h er gemenadenn", + "{actor} joined the conversation" : "{actor} a zo deuet er gemenadenn", + "You added {user}" : "Ouzhpennet ho peus {user}", + "{actor} added you" : "{actor} en deus ouzhpennet ac'hanoc'h", + "An administrator added you" : "Ur merour en deus ouzhpennet ac'hanoc'h", + "An administrator added {user}" : "Ur merour en deus uzhpennet {user}", + "You left the conversation" : "Kuitaet ho peus ar gemenadenn", + "{actor} left the conversation" : "{actor} en deus kuitaet ar gemenadenn", + "{actor} removed {user}" : "{actor} en deus lemet {user}", + "You removed {user}" : "Lamet ho peus {user}", + "{actor} removed you" : "{actor} en deus lemet ac'hanoc'h", + "An administrator removed you" : "Ur merour en deus lamet ac'hanoc'h", + "An administrator removed {user}" : "Ur merour en deus lamet {user}", + "{actor} promoted {user} to moderator" : "{actor} en deus lakaet {user} da habaskaer", + "You promoted {user} to moderator" : "Lakaet ho peus {user} da habaskaer", + "{actor} promoted you to moderator" : "{actor} en deus lakaet ac'hanoc'h da habaskaer", + "An administrator promoted you to moderator" : "Ur merour en deus lakaet ac'hanoc'h da habaskaer", + "An administrator promoted {user} to moderator" : "Ur merour en deus lakaet {user} da habaskaer", + "{actor} demoted {user} from moderator" : "{actor} en deus lamet da {user} e droet habaskaer ", + "You demoted {user} from moderator" : "Lamet ho peus da {user} e droet habaskaer ", + "{actor} demoted you from moderator" : "{actor} en deus lamet deioc'h ho droet habaskaer ", + "An administrator demoted you from moderator" : "Ur merour en deus lamet deoc'h ho droet habaskaer ", + "An administrator demoted {user} from moderator" : "Ur merour en deus lamet da {user} e droet habaskaer ", + "{actor} shared a file which is no longer available" : "Restr rannet {actor} n'eo ket posupl kavout kenn", + "You shared a file which is no longer available" : "Ar restr o peus rannet n'eo ket posupl kavout kenn", + "Administration" : "Merouriez", + "System" : "Sistem", + "%s (guest)" : "%s (kouviat)", + "Talk to %s" : "Komz da %s", + "File not found" : "Restr ebet kavet", + "File is not shared, or shared but not with the user" : "N'eo ket rannet ar restr, pe n'eo ket rannet gan an implijour", + "No account available to delete." : "N'ez eus kont ebet da lemel", + "File is too big" : "Re vras eo ar restr", + "Invalid file provided" : "Ar restr roet n'eo ket unan aotreet", + "Invalid image" : "N'eo ket aotreet ar skeudenn", + "Unknown filetype" : "N'eo ket anavezet stumm ar restr", + "Talk mentions" : "Menegoù Talk", + "Say hi to your friends and colleagues!" : "Lâr koukouk d'ho mignoned ha genseurted", + "No unread mentions" : "Kemenadenn nan-lennet ebet", + "Call in progress" : "Kemenadenn en dro", + "You were mentioned" : "Meneget oc'h bet", + "Write to conversation" : "Skrivañ d'an diviz", + "Writes event information into a conversation of your choice" : "Skriva titouroù an darvout en diviz o peus c'hoant", + "Conversation invitation" : "Kouviadenn diviz", + "Description" : "Deskrivadur", + "Password request: %s" : "Ger-tremen goulennet : %s", + "Private conversation" : "Diviz prevez", + "Deleted user (%s)" : "Implijour dilamet (%s)", + "Dismiss notification" : "Arrest ar gemenadennoù", + "Accept" : "Asantiñ", + "Notification" : "Kemennadenn", + "{user} in {call}" : "{user} e {call}", + "Deleted user in {call}" : "Implijer dilamet e {call}", + "{guest} (guest) in {call}" : "{guest} (kouviad) e {call}", + "Guest in {call}" : "Kouvidi e {call}", + "{user} sent you a private message" : "{user} en deus kaser deoc'h ur gemenadenn prevez", + "{user} sent a message in conversation {call}" : "{user} en deus kaset ur gemenadenn en diviz {call}", + "A deleted user sent a message in conversation {call}" : "Un implijer lamet en deus kaset ur gemenadenn en diviz {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (kouviat) en deus kaset ur gmenadenn en diviz {call}", + "A guest sent a message in conversation {call}" : "Ur c'houviat en deus kaset ur gemenaden en diviz {call}", + "{user} replied to your private message" : "{user} en deus responted d'ho gemenadenn prevez", + "{user} replied to your message in conversation {call}" : "{user} en deus respontet d'ho gemenadenn en diviz {call}", + "A deleted user replied to your message in conversation {call}" : "U implijour lamet en deus responted d'o gemenadenn en diviz {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (kouviat) en deus responted d'ho gemenadenn en diviz {call}", + "A guest replied to your message in conversation {call}" : "Ur c'houviat en deus responted d'ho gemenadenn en diviz {call}", + "{user} mentioned you in a private conversation" : "{usetr} en deus meneget ac'hanoc'h en un diviz prevez", + "{user} mentioned you in conversation {call}" : "{user} en deus meneget ac'hanoc'h en diviz {call}", + "A deleted user mentioned you in conversation {call}" : "Un implijour lamet en deus meneget ac'hanoc'h en diviz {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (kouviat) en deus meneget ac'hanoc'h en diviz {call}", + "A guest mentioned you in conversation {call}" : "Ur c'houviat en deus meneget ac'hanoc'h en diviz {call}", + "View chat" : "Gwellet ar chat", + "{user} invited you to a group conversation: {call}" : "{user} e deus kouviet ac'hnoc'h d'ur strolat diviz : {call}", + "Join call" : "Mont er gemenadenn", + "Answer call" : "Respont d'ar gemenadenn", + "Call back" : "adober ur gemenadenn", + "You missed a call from {user}" : "C'hwitet o peus ur gemenadenn eus {user}", + "A group call has started in {call}" : "Ur gemenadenn strollat a zo kroget e {call}", + "You missed a group call in {call}" : "C'hwitet ho peus ur gemenadenn strollat e {call}", + "{email} is requesting the password to access {file}" : "{email} a goulenn ar ger-tremen evit tizout {restr}", + "{email} tried to request the password to access {file}" : "{email} en deus goulennet ar ger-tremen evit tizout {restr}", + "Someone is requesting the password to access {file}" : "Unan bennak a zo o gouelnn ar ger tremen evit tizout {restr}", + "Someone tried to request the password to access {file}" : "Unan bennak en deus klasket goulenn ar ger-tremen evit tizhout {file}", + "Open settings" : "Digeri stummoù", + "The hosted signaling server is now configured and will be used." : "Ar servijour kemenn ostet a zo stummet hag a vo implijet bremañ.", + "The hosted signaling server was removed and will not be used anymore." : "Lamet eo bet ar servijour kemenn ostet ha ne vo ket implijet kenn.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ar servijour kemenn ostet en deus cheñchet eus \"{oldstatus}\" da \"{newstatus}\".", + "error" : "fazi", + "Default" : "Dre ziouer", + "Presentation" : "Kinnigadenn", + "Conversations" : "Diviz", + "{user}" : "{user}", + "Messages" : "Kemenadennoù", + "{user} in {conversation}" : "{user} e {conversation}", + "Messages in other conversations" : "Kemenadennoù e divizoù all", + "Other" : "All", + "Failed to request trial because the trial server is unreachable. Please try again later." : "C'hwitet eo bet goulenn an arnodenn, abalamour ne vez ket tizet ar servijour anodañ. klaskit en dro diwezatoc'h.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Ur gudenn a zo gant dilesa an azgoulenn. Mateze ne vez get tizet dre ar maez evit gwiriañ e URL.", + "Something unexpected happened." : "Un dra dic'hortoz a zo degouezet.", + "The URL is invalid." : "Fall eo an url", + "An HTTPS URL is required." : "Un URL HTTPS a zo ret kaout.", + "The email address is invalid." : "N'eo ket mat ar chom-lech postel", + "The language is invalid." : "N'eo ket mat ar yezh.", + "The country is invalid." : "N'eo ket mat ar bro.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Ur guden a zo gant ar goulenn arnodenn. Selit ouh ho kazetenn evit muioc'h a ditouroù.", + "Too many requests are send from your servers address. Please try again later." : "Re a goulennoù a vez kaset da chom-lec'h ar servijour. Klaskit en dro divesatoc'h.", + "There is already a trial registered for this Nextcloud instance." : "Un arnodenn a zo bet goulenet d'an azgoulenn Newtcloud dija.", + "Something unexpected happened. Please try again later." : "Un dra dic'hortozh a zo degouezet. Klaskit en dro diwezatoc'h.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "C'hwitet da goulenn an amprouadenn ablamour ne dro ket mat ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Trial requested but failed to get account information. Please check back later." : "Amprouadenn goulennet mes c'hwitet da tapout titouroù ar c'hont. Klaskit en dro diwezatoc'h.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Ur gudenn a zo gant dilesa ar goulenn. Marteze ne vez ket tizet dre ar maez evit gwiriañ an URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "C'hwitet da dapout titouroù ar c'hont peogwir ne dro ket mat ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Ur gudenn a zo gant pakañ titouroù ar c'hont. Sellit ho kazetnn evit muioc'h a ditouroù.", + "There is no such account registered." : "N'ez eus kont evel se ebet enrollet.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "'hwitet da dapout titouroù ar c'hont peogwir ne vez ket tizet ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Deleting the hosted signaling server account failed. Please check back later." : "C'hwitet da lemel ar servijour gemenn ostet. Klaskit en dro diwezatoc'h", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "C'hwitet da lemel ar c'hont peogwir ne dro ket mat ar serviojour ammprouiñ. Klaskit en dro diwezatoc'h.", + "There is a problem with deleting the account. Please check your logs for further information." : "Ur gudenn a zo en ur lemel arc'hont. Sellit ouzh ho kaetenn evit muioc'h ha ditouroù.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "C'hwitet da lemel ar c'hont peogwir ne vez ket tizet ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirelezhioù Arab Unanet", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua ha Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Arc'hantina", + "American Samoa" : "Samoa Amerikan", + "Austria" : "Aostria", + "Australia" : "Aostralia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaidjan", + "Bosnia and Herzegovina" : "Bosnia-ha-Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bengladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia", + "Bonaire, Sint Eustatius and Saba" : "Izelvroioù ar c'haraib", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoutan", + "Bouvet Island" : "Enez Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Inizi Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Republik Demokratel Kongo", + "Central African Republic" : "Republik Kreizafrikan", + "Congo" : "Kongo", + "Switzerland" : "Suis", + "Côte d'Ivoire" : "Aod an Olifant", + "Cook Islands" : "Inizi Cook", + "Chile" : "Chile", + "Cameroon" : "Kameroun", + "China" : "Sina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kab Glas", + "Curaçao" : "Kòrsou", + "Christmas Island" : "Enez Christmas", + "Cyprus" : "Republik Kiprenez", + "Czechia" : "Republik Tchek", + "Germany" : "Alamagn", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominika", + "Dominican Republic" : "Republik Dominikan", + "Algeria" : "Aljeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipt", + "Western Sahara" : "Sahara ar C'hornôg", + "Eritrea" : "Eritrea", + "Spain" : "Spagn", + "Ethiopia" : "Etiopia", + "Finland" : "Finland", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Inizi Maloù", + "Micronesia, Federated States of" : "Stadoù Kevreet Mikronezia", + "Faroe Islands" : "Faero", + "France" : "Bro-C'hall", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Rouantelezh-Unanet", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Ginea c'hall", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Jibraltar", + "Greenland" : "Greunland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Gwadeloup", + "Equatorial Guinea" : "Ginea ar C'heheder", + "Greece" : "Gres", + "South Georgia and the South Sandwich Islands" : "Georgia ar Su hag Inizi Sandwich ar Su", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Ginea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Enez Heard hag Inizi McDonald", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Republik Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonezia", + "Ireland" : "Iwerzhon", + "Israel" : "Israel", + "Isle of Man" : "Manav", + "India" : "India", + "British Indian Ocean Territory" : "Tiriad Meurvor Indez Breizh-Veur", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italia", + "Jersey" : "Jerzenez", + "Jamaica" : "Jamaika", + "Jordan" : "Jordania", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizstan", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komorez", + "Saint Kitts and Nevis" : "Saint Kitts ha Nevis", + "Korea, Democratic People's Republic of" : "Korea, Republik Poblel ha Demokratel", + "Korea, Republic of" : "Republik Korea", + "Kuwait" : "Koweit", + "Cayman Islands" : "Inizi Cayman", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Lao, Republik Demokratel ar Bobl", + "Lebanon" : "Liban", + "Saint Lucia" : "Santez-Lusia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Bro Luksembourg", + "Latvia" : "Latvia", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint-Martin (Antilhez)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Inizi Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Mariana an Norzh", + "Martinique" : "Martinik", + "Mauritania" : "Maouritania", + "Montserrat" : "Enez Montserrat", + "Malta" : "Malta", + "Mauritius" : "Moris", + "Maldives" : "Maldivez", + "Malawi" : "Malawi", + "Mexico" : "Mec'hiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia-Nevez", + "Niger" : "Niger", + "Norfolk Island" : "Enez Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Zeland-Nevez", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinezia C'hall", + "Papua New Guinea" : "Papoua Ginea-Nevez", + "Philippines" : "Filipinez", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Sant-Pêr-ha-Mikelon", + "Pitcairn" : "Inizi Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestinia, Stad", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Enez ar Reünion", + "Romania" : "Roumania", + "Serbia" : "Serbia", + "Russian Federation" : "Rusia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saoudat", + "Solomon Islands" : "Inizi Salomon", + "Seychelles" : "Sechelez", + "Sudan" : "Soudan", + "Sweden" : "Sveden", + "Singapore" : "Singapour", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ha Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard ha Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Soudan ar Su", + "Sao Tome and Principe" : "São Tomé ha Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (stad)", + "Syrian Arab Republic" : "Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Inizi Turks ha Caicos", + "Chad" : "Tchad", + "French Southern Territories" : "Douaroù Aostral hag Antarktikel Frañs", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor ar Reter", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizia", + "Tonga" : "Tongaeg", + "Turkey" : "Turkia", + "Trinidad and Tobago" : "Trinidad ha Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Rapublik Sina", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Ouganda", + "United States Minor Outlying Islands" : "Inizi bihan pell diouzh ar Stadoù Unanet", + "United States of America" : "Stadoù Unanet Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Ouzbekistan", + "Holy See" : "Sez Santel", + "Saint Vincent and the Grenadines" : "Sant Visant hag an Inizi Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Inizi Gwerc'h Breizhveurat", + "Virgin Islands, U.S." : "Inizi Gwerc'h ar Stadoù-Unanet", + "Viet Nam" : "Viêt Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ha Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Kevread", + "High-performance backend" : "Backend a labour buhan", + "Error: Server did not respond with proper JSON" : "Fazi : N'eo ket posupl respont gant ur JSON mat", + "Error: Server responded with: {error}" : "Fazi : Respont a ra ar servijour gant : {error}", + "Error: Unknown error occurred" : "Fazi : Ur fazi dianv a zo bet", + "Invalid date, date format must be YYYY-MM-DD" : "Deizat fall, stumm an deizat a zo ret bezhañ BBBB-MM-DD", + "Conversation not found" : "N'eo ket bet kavet an diviz", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-prezegenn gant WebRTC", + "Leave call" : "Kuitaat ar gemenadenn", + "Navigating away from the page will leave the call in {conversation}" : "Kuitaat ar bajenn a laosko ar pelgomzadenn e {convzersation}", + "Stay in call" : "Chom er gemenadenn", + "Discuss this file" : "Komz diwar benn ar restr-mañ", + "Share this file with others to discuss it" : "Rannañ ar restr-mañ da reoù all evit komz diwar e-benn", + "Share this file" : "Rannañ ar restr", + "Join conversation" : "Mont n diviz", + "The password is wrong. Try again." : "Direizh eo ar ger-tremen. Klaskit en-dro.", + "Password" : "Ger-tremen", + "Submit" : "Kinnig", + "Error requesting the password." : "Ur fazi a zo bet en ur gouelenn ar ger-tremen", + "Request password" : "Goulenn ar -ger-tremen", + "This conversation has ended" : "Echu ei an diviz-mañ", + "Everyone" : "Toud an dud", + "Users and moderators" : "Implijourien ha habaskaerienn", + "Moderators only" : "Habaskerienn nemetken", + "Save changes" : "Enrollañ ar cheñchamantoù", + "Saving …" : "Orc'h enrolliñ", + "Saved!" : "Enrollet !", + "Limit to groups" : "Nemet d'ar strolladoù", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "M'az eo choazet ur strollad d'an neubetañ, ne vo nemet tud ar strollad en diviz.", + "Guests can still join public conversations." : "Kouviidi a c'hell dont en diviz c'hoaz.", + "Limit using Talk" : "Bevenn en ur implij Talk", + "Limit creating a public and group conversation" : "Bevenn krouañ un diviz publik hag a stroll", + "Limit creating conversations" : "Bevenn krouañ un diviz", + "Limit starting a call" : "Beven kregiñ ur gemenadenn", + "Limit starting calls" : "Beven kregiñ kemenadennoù", + "When a call has started, everyone with access to the conversation can join the call." : "P'en deus kroget ur gemenadenn, tout an dud en diviz a c'hell monet er gemenadenn.", + "Disabled" : "Disaotreañ", + "State" : "Stad", + "Name" : "Anv", + "Beta" : "Beta", + "All messages" : "Pep kemenadenn", + "@-mentions only" : "@-meneg nemetkenn", + "Off" : "Lac'hañ", + "General settings" : "Stummoù hollek", + "Default notification settings" : "Arventennoù kemenadennoù dre ziouer", + "Default group notification" : "Kemenadenn strollad dre ziouer", + "Default group notification for new groups" : "Kemenadenn strollad dre ziouer evit ar strolladoù nevez", + "Integration into other apps" : "Lakaet e-barzh meziantoù all", + "Allow conversations on files" : "Aotreañ an treiñ restroù", + "Allow conversations on public shares for files" : "Aotreañ divizoù war ranadennoù publik evit ar restroù", + "Enable encryption" : "Aotreañ ar sifradur", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En ur klikañ war ar bouton a huz an titouroù ar stumm mañ a vo kaset d'ar servijour Struktur AG. Muioc'h a ditouroù war {linkstart}spreed.eu{linkend}.", + "Pending" : "O c'hortoz", + "Error" : "Fazi", + "Blocked" : "Stanket", + "Active" : "O labourat", + "Expired" : "Termenet", + "Never" : "James", + "The trial could not be requested. Please try again later." : "An amprouadenn na c'hell ket bezhañ goulennet. Klaskit en dro goude.", + "The account could not be deleted. Please try again later." : "Neo ket posupl lemel ar c'hont. Klaskit en dro goude", + "URL of this Nextcloud instance" : "URL an azgoulenn Nextcloud", + "Full name of the user requesting the trial" : "Anv klok an implijer a c'houlenn an taol esae", + "Language" : "Yezh", + "Country" : "Bro", + "Request signaling server trial" : "Goulenn amproui arhent ar servijour", + "You can see the current status of your hosted signaling server in the following table." : "Posupl eo deoc'h gwellet stad ho arhent ho servijour ostet e daolenn dindan.", + "Status" : "Stad", + "Created at" : "Krouet da", + "Expires at" : "Termen da", + "Limits" : "Bevennoù", + "No" : "Nann", + "Delete the signaling server account" : "Lemel ar c'hont arhent servijour", + "_%n user_::_%n users_" : ["%n implijer","%n implijer","%n implijer","%n implijer","%n implijer"], + "Status: Checking connection" : "Stad : Ho gwiriañ ar genstagadenn", + "OK: Running version: {version}" : "OK : o lakaat da dreiñ ar stumm : {version}", + "Validate SSL certificate" : "Sertifikad SSL gwiriet", + "Delete this server" : "Dilemel ar servijer-mañ", + "Test this server" : "Arnodañ ar servijour-mañ", + "Shared secret" : "Secret rannet", + "High-performance backend URL" : "URL ar vackend a labour buhan", + "STUN server URL" : "URL ar servijour STUNN", + "STUN servers" : "Servijour STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ur servijour STUNN a vez implijet evit anavezout chom-lec'h IP publik an implijourienn a drek an henter.", + "OK: Successful ICE candidates returned by the TURN server" : "OK : ICE emstriver mat edkaset gant ar servijour TURN", + "Error: No working ICE candidates returned by the TURN server" : "Fazi : Ne labour ket ICE emstriver adkaset gant ar servijour TURN", + "Testing whether the TURN server returns ICE candidates" : "Amprouiñ adkasadenn emstriver ICE at servijour TURN", + "TURN server URL" : "URL ar servijour TURN", + "TURN server secret" : "Servijour TURN sekret", + "TURN server protocols" : "Protokoloù servijour TURN", + "TURN servers" : "Servijour TURN", + "Failed" : "C'hwitet", + "OK" : "OK", + "Confirm" : "Kadarnañ", + "Cancel" : "Nullañ", + "Back" : "Distro", + "Calendar" : "Deiziataer", + "Save" : "Enrollañ", + "Search participants" : "Klask implijer", + "No results" : "Disoc'h ebet", + "Done" : "Graet", + "Grid view" : "Diskwell ar roued", + "Reload" : "Adkargañ", + "Waiting for others to join the call …" : "O c'hortoz ma teuio ar re all er gemenadenn ...", + "You can invite others in the participant tab of the sidebar" : "Galout a rit kouviañ tud gant an daolenn lodek er verenn gostez", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Galout a rit kouviañ tud en dolenn lodek er varenn gostez pe rannañ al liamm-mañ evit kouviañ anezho !", + "Share this link to invite others!" : "Rannit al liamm-mañ gant ar re all !", + "Copy link" : "Kopiañ al liamm", + "Mute audio" : "Lac'hañ a audio", + "Unmute audio" : "Lakaat an odio en dro", + "None" : "Hini ebet", + "Access to camera was denied" : "Nac'het eo bet tizhañ ar c'hamera", + "Error while accessing camera" : "Ur fazi a zo bet en ur tizhout ar c'hamera", + "You have been muted by a moderator" : "Mut oc'h bet lakaet gant ar moderatour", + "Disable video" : "Lac'han ar video", + "Enable video" : "Lakaat ar video en dro", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Lakaat ar video en dro. Ho genstagadenn a vo troc'het evit aotreañ ar video evit ar wech kentañ", + "You" : "C'hwi", + "Mute" : "Mut", + "Show screen" : "Diskwell ar skramm", + "Stop following" : "Arrest heuliañ", + "You need to be logged in to upload files" : "Ret eo deoc'h bezhañ deuet-tre evit pellkas restroù", + "Drop your files to upload" : "Laoskit ho restroù evit pellkas", + "Favorite" : "Pennroll", + "Date:" : "Deiziad:", + "Hide details" : "Skoachañ ar munudoù", + "Show details" : "Diskouel ar munudoù", + "Disable" : "Disaotreañ", + "Enable" : "Aotreañ", + "Choose" : "Dibab", + "Conversation settings" : "Stummoù diviz", + "Personal" : "Personel", + "Leave conversation" : "Kuitaat an diviz", + "Delete conversation" : "Dilemel an diviz", + "Do you really want to delete \"{displayName}\"?" : "Sur oc'h da zilemel \"{displayName}\"?", + "Password protection" : "Gwareziñ gant ur ger-tremen", + "Start time (optional)" : "Amzer kregiñ (dibab)", + "Edit" : "Cheñch", + "More information" : "Muioc'h a ditouroù", + "Delete" : "Dilemel", + "Notifications" : "Kemennadennoù", + "Join" : "Kejañ", + "Error while creating the conversation" : "Ur fazi a zo bet en ur krouiñ an diviz", + "Create conversation" : "Krouiñ un diviz", + "Log in" : "Kennaskañ", + "Remove from favorites" : "Diverkañañ eus ar pennrolloù", + "Add to favorites" : "Ouzhpennañ er pennrolloù", + "You need to promote a new moderator before you can leave the conversation." : "Ret eo deoc'h lakaat unan bennak da moderatour a-rao kuitaat an diviz.", + "Home" : "Degemer", + "Alphabetically" : "Urzh alfabetek", + "An error occurred while performing the search" : "Ur fazi a zo bet en ur ober an enklask", + "Users" : "Implijer", + "Groups" : "Strolladoù", + "Other sources" : "Orin all", + "No search results" : "Disoc'h enklask ebet", + "Users and groups" : "Implijourienn ha strolladoù", + "You are currently waiting in the lobby" : "Ho gortoz er sal gortoz emaoc'h", + "Select microphone" : "Choaz ur mikro", + "No microphone available" : "Mikro ebet kavet", + "Select camera" : "Choaz ur c'hamera", + "No camera available" : "Kamera ebet kavet", + "No audio" : "Audio ebet", + "No camera" : "Kamera ebet", + "Calls are not supported in your browser" : "N'eo ket douget ar gemenadennoù gant ho vrowser", + "Access to microphone is only possible with HTTPS" : "N'eo posupl tizhout ar mikro nemet gant HTTPS", + "Access to microphone was denied" : "N'eo ket aotreet tizhout ar mikro", + "Error while accessing microphone" : "Ur fazi a zo bet en ur tizhout ar mikro", + "Access to camera is only possible with HTTPS" : "Tizhout ar c'hamera n'eo posupl nemet gant HTTPS", + "Invalid path selected" : "An hent dibabet n'eus ket anezhañ", + "Upload" : "Pellkas", + "Files" : "Restroù", + "Reply" : "Respont", + "Go to file" : "Mont d'ar restr", + "Translate" : "Treiñ", + "Dismiss" : "Arrest", + "Translate to" : "Treiñ e", + "Create a new group conversation" : "Krouiñ un diviz strollad nevez", + "Add participants" : "Ouzhpennan tud", + "Send message" : "Kas ur gemenadenn", + "File to share" : "Restr da rannañ", + "Add emoji" : "Ouzhpennañ un emoji", + "Share from Files" : "Rannañ diouzh Restroù", + "Share files to the conversation" : "Rannañ restroù d'an diviz", + "New file" : "Restr nevez", + "Add more files" : "Ouzhpennañ muioc'h a restroù", + "Send" : "Kas", + "Settings" : "Arventennoù", + "moderator" : "habaskaer", + "guest" : "kouviad", + "Remove participant" : "Disachañ an den", + "Demote from moderator" : "Tennañ ar gwirioù kerreizhañ", + "Promote to moderator" : "Lakaat da moderatour", + "Add users or groups" : "Ouzhpennañ implijourienn pe strolladoù", + "Add users" : "Ouzhpennañ implijer ", + "Add groups" : "Ouzhoennañ strolladoù", + "Add other sources" : "Ouzhpennañ dre un orin all", + "Add emails" : "Ouzhpennañ postelloù", + "Searching …" : "O klask ...", + "Search for more users" : "Klask d evit muioc'h a implijourienn.", + "Participants" : "Tud", + "Chat" : "Chat", + "Details" : "Munudoù", + "Load more results" : "Kagañ muioc'h a disoc'hoù", + "Projects" : "Raktres", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Liamm d'an diviz", + "Search conversations or users" : "Klask divizoù ha implijourienn", + "Select conversation" : "Choaz un diviz", + "Notification settings" : "Arventennoù kemennadennoù", + "Default language" : "Yezh dre ziouer", + "Select location for attachments" : "Choazit ul lec'h evit stagañ", + "Error while setting attachment folder" : "Ur fazi a zo bet en ur lakaat an teuliad stagañ", + "Privacy" : "Prevezder", + "Attachments folder" : "Teuliad stag", + "Search" : "Klask", + "Start call" : "Kregiñ ar gemenadenn", + "You will be able to join the call only after a moderator starts it." : "Posupl vo deoc'h mont er gemenadenn goude ma vo bet groget gant ar modertator.", + "Screensharing options" : "Dibaboù rannañ skramm", + "Enable screensharing" : "Aotreañ ar rannan skramm", + "Bad sent video and screen quality." : "Fall eo perzh ar skramm ha kasadenn ar video.", + "Bad sent screen quality." : "Fall eo perzh ar skramm.", + "Bad sent video quality." : "Fall eo perzh ar gasadenn ar video.", + "Bad sent audio, video and screen quality." : "Fall eo perzh ar skramm, kasadenn ar video ha kasadenn an audio.", + "Bad sent audio and screen quality." : "Fall eo perzh ar skramm ha kasadenn an audio.", + "Bad sent audio and video quality." : "Fall eo kasadenn ar video ha kasadenn an audio.", + "Bad sent audio quality." : "Fall eo kasadenn an audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ho kenstagadenn internet pe urzhiataer a labour ha ne c'hell ket ar re all gwellet ho skramm", + "Your internet connection or computer are busy and other participants might be unable to see you." : "HO labour eo ho kenstagadenn internet pe ho urzhiataer ha ne c'hell ket ar re all gwellet ac'hanaoc'h.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ho kenstagadur internet pe ho urzhiataer a labour hamarteze ne c'hll ket komprenn ha gwellet ac'hnoc'h. Evit gwelaat ar stad klaskit lac'han ar video pa rannit ho skramm.", + "Disable screenshare" : "Rannañ skramm disaotreet", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ho kenstagadenn internet pe ho urzhiataer a labour ha ne c'hll ket marteze ar re all komprenn ac'hanaoc'h. La'hit ar video evit gwelaat an traoù.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ho kenstagadenn onternet pe ho urzhiataer a labour ha marteze ne c'hell ket ar re all komprenn ac'hanoc'h.", + "Screen sharing is not supported by your browser." : "N'eo ket douget ar rannañ skramm gant ho furcher.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ar rannañ skramm en deus ezhomm e vefe ar bajenn karget dre HTTPS", + "Screensharing requires the page to be loaded through HTTPS." : "Ar rannañ-skramm en deus ezhomm e vefe ar bajenn karget dre HTTPS", + "An error occurred while starting screensharing." : "Ur fazi a zo bet e pad ar rannadenn-skramm.", + "Show your screen" : "Diskouez ar skramm", + "Stop screensharing" : "Echuañ ar rannadenn skramm", + "Mute others" : "Lakaat ar re all mut", + "Keep" : "Mirout", + "Message without mention" : "Kemenn hp meneg", + "Mention myself" : "Meneg ac'hanon", + "The conversation does not exist" : "N'ez eus ket eus an diviz-mañ", + "Join a conversation or start a new one!" : "Mont en un diviz pe kregiñ unan nevez !", + "Duplicate session" : "Eilan dalc'h", + "Join a conversation or start a new one" : "Mont en un diviz pe kregiñ unan nevez ", + "User" : "Implijer", + "Login" : "Anv arveriad", + "Client ID" : "ID kliant", + "Media" : "Media", + "Audio" : "Audio", + "Group" : "Stollad", + "You: {lastMessage}" : "C'hwi : {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ho klask mont en diviz emaoc'h p'ho peus un dalc'h en ur prenestr pe ardivink all. N'eo ket douget c'hoaz gant Nextcloud Talk. Petra o peus c'hoant ober ?", + "Leave this page" : "Kuitaat ar bajenn", + "Join here" : "Kejañ amañ", + "An error occurred while fetching the participants" : "Ur fazi a zo bet en ur pakañ an tud", + "Error while sharing file" : "Ur fazi a zo bet en ur rannañ ar restr", + "Lost connection to signaling server. Trying to reconnect." : "Kenstagadenn gant ar servijour arhent kollet. O klask adkemprenn.", + "Please reload the page." : "Mar-plij adkargit ar bajenn", + "Do not disturb" : "Na rannit ket", + "Away" : "Pell", + "Microphone {number}" : "Mikro {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Huel-gomzerioù {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Seblant a rit bezhaén ho komz p'emaoc'h bet lakaet da mut, dimutit ac'hanoc'h evit bezhañ klevet gant ar re all", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ne oa ket posupl en em genstagañ gant un implijer d'an neubetañ. Ur servijour TURN a zo marteze ezhomm evit diskoulmañ ze. Goulennit d'ho merour da lakat unan en ur heuliañ {linkstart}an dielvadur-mañ{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Kemer a ra muioc'h a amzer eget ragjedet. Hag aotreoù ar media a zo bet lakaet mat (pe difennet) ? M'eo mat adlakit da vont en dro ho furcher, evel ne labour ket an audio hag ar video", + "Access to microphone & camera is only possible with HTTPS" : "Tizhout ar mikro hag ar c'hamero a zo posupl nemet gant HTTPS", + "Please move your setup to HTTPS" : "Lakait ho staliadur da HTTPS mar-plij", + "Access to microphone & camera was denied" : "Tizhañ ar mikro hag ar c'hmera a zo bet difennet", + "WebRTC is not supported in your browser" : "N'eo ket douget WebRTC gant ho furcher", + "Please use a different browser like Firefox or Chrome" : "Implijit furcherienn disheñvel evel Firefox pe Chrome", + "Error while accessing microphone & camera" : "Ur fazi a zo bet en ur klask tizout ar mikro hag ar c'hamera", + "%s Talk on your mobile devices" : "%s Talk war ho ardivinkoù hezoug", + "Join conversations at any time, anywhere, on any device." : "Kit en diviz n'eus forzh peseurt amzer, lec'h pe ardivink.", + "Android app" : "Meziant Android", + "iOS app" : "Meziant iOS", + "__language_name__" : "Brezhoneg", + "Notes" : "Notennoù", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Deuet oc'h en diviz dre ur prenestr pe ardivink all. N'eo ket douget evit ar poent gant Nextcloud Talk neuze eo bet sertet an dalc'h." +}, +"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);"); diff --git a/l10n/br.json b/l10n/br.json new file mode 100644 index 0000000..73a1dbd --- /dev/null +++ b/l10n/br.json @@ -0,0 +1,714 @@ +{ "translations": { + "a conversation" : "un diviz", + "(Duration %s)" : "(Padelezh %s)", + "You attended a call with {user1}" : "Ur galvavadenn o peus bet gant {user1}", + "_%n guest_::_%n guests_" : ["%n gouviad","%n gouviad","%n gouviad","%n gouviad","%n gouviad"], + "You attended a call with {user1} and {user2}" : "Ur galvavadenn o peus bet gant {user1} ha {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ur galvavadenn o peus bet gant {user1}, {user2} ha {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ur galvavadenn o peus bet gant {user1}, {user2}, {user3} ha {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ur galvavadenn o peus bet gant {user1}, {user2}, {user3}, {user4} ha {user5}", + "_%n other_::_%n others_" : ["%n all","%n all","%n all","%n all","%n all"], + "{actor} invited you to {call}" : "Kouviet oc'h da {call} gant {actor}", + "You were invited to a conversation or had a call" : "Kouviet oc'h d'un diviz pe ouzhpennet d'ur galvadenn", + "Other activities" : "Oberiantizoù all", + "Talk" : "Komz", + "Guest" : "Kouviad", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Micosoft Edge ha Safari a zo posupl implij evit ar gemenadenoù audio a video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Posupl eo deoc'h gervel tout en dud en diviz en ur skrivañ \"@all\" er chat", + "- With the \"arrow-up\" key you can repost your last message" : " -Gant an douchenn \"bir-a-uz\" en posupl adkas ar gemenadenn divezhañ", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk en deus urzioù bremañ, kasit \"/help\" evel ur gemenadenn chat evit gwelet m'az eo bet stummet urzioù gant o merour", + "- With projects you can create quick links between conversations, files and other items" : "- Gant Raktres eo posupl deoc'h krouiñ liammoù etre an divizoù, restroù ha traoù all", + "- You can now mention guests in the chat" : "- Posuple eo deoc'h menegiñ kouvidi er chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Ur sal gortoz eo posupl kaout evit an divizoù. Aotreañ a raio an habaskaerien da vont er chat hag er gemenaden evit prientiñ ar gejadenn, padal eo ret d'an implijourien ha d'ar gouviidi gortoz", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Posupl eo deoc'h respont diouzhtu d'ar gemenadennoù en ur displegañ diwar benn petra eo ar gemenadenn.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Klask divizoù ha lodeget a implijo ivez ho divizoù, ma vo aesoc'h adkavout divizoù kozh", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Posupl eo deoc'h ouzhpenañ strolladoù implijourien personelaet d'an divizoù gant ar meziant kelc'h staliet", + "- Check out the new grid and call view" : "- Sellit ouzh ar rouedad ha kemener nevez", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Posuple eo deoc'h pelkas ha ruzañ-lakaat restroù diozhtu eus o ardivink er chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Restrom rannet a vez igoret diozhtu er chat gant ar lenner maziant", + "Talk updates ✅" : "Adnevesaden Talk ✅", + "{actor} created the conversation" : "{actor} en deus krouet an diviz", + "You created the conversation" : "Krouet o peus an diviz", + "An administrator created the conversation" : "Ar merour en deus krouet an diviz", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} en deus adenvet an diviz eus \"%1$s\" da \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Adenvet o peus an diviz eus \"%1$s\" da \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ar merour en deus adenvet an diviz eus \"%1$s\" da \"%2$s\"", + "You started a call" : "Kroget o peus ur gemenadenn", + "{actor} started a call" : "{actor} en deus kroget ur gemenadenn", + "{actor} joined the call" : "{actor} a zo deuet er gemenadenn", + "You joined the call" : "Deuet oc'h er gemenaden", + "{actor} left the call" : "{actor} en deus kuitaet ar gemenadenn", + "You left the call" : "Kuitaet o peus ar gemenaden", + "{actor} unlocked the conversation" : "{actor} en deus digoret ar gemenadenn", + "You unlocked the conversation" : "Digoret o peus ar gemenadenn", + "An administrator unlocked the conversation" : "Ar merour en deus digoret ar gemenadenn", + "{actor} locked the conversation" : "{actor} en deus seret ar gemenadenn", + "You locked the conversation" : "Serte ho peus ar gemenadenn", + "An administrator locked the conversation" : "Ar merour en deus seret ar gemenadenn", + "The conversation is now open to everyone" : "Digoret eo ar gemenadenn da tout an dud", + "{actor} opened the conversation to everyone" : "{actor} en deus digoret ar gemenadenn da tout an dud.", + "You opened the conversation to everyone" : "Digoret ho peus ar gemenadenn da tout an dud.", + "{actor} restricted the conversation to moderators" : "{actor} en deus bevennet ar gemenadenn d'an habaskaerien", + "You restricted the conversation to moderators" : "Bevennet ho peus ar gemenadenn d'an habaskaerien", + "{actor} allowed guests" : "{actor} en deus aotreet kouviidi", + "You allowed guests" : "Aotreet ho peus kouviidi", + "An administrator allowed guests" : "Ar merour en deus aotreet kouviidi", + "{actor} disallowed guests" : "{actor} en deus disaotreet kouviidi", + "You disallowed guests" : "Disaotreet ho peus kouviidi", + "An administrator disallowed guests" : "Ar merour en deus disaotreet kouviidi", + "{actor} set a password" : "{actor} en/he deus termenet ur ger-tremen", + "You set a password" : "Termenet ho peus ur ger-tremen", + "An administrator set a password" : "Ur merour en/he deus termenet ur ger-tremen", + "{actor} removed the password" : "{actor} en/he deus dilamet ar ger-tremen", + "You removed the password" : "Dilamet ho peus ar ger-tremen", + "An administrator removed the password" : "Ur merour en/he deus dilamet ar ger-tremen", + "{actor} added {user}" : "{actor} en deus ouzhpennet {user}", + "You joined the conversation" : "Deuet oc'h er gemenadenn", + "{actor} joined the conversation" : "{actor} a zo deuet er gemenadenn", + "You added {user}" : "Ouzhpennet ho peus {user}", + "{actor} added you" : "{actor} en deus ouzhpennet ac'hanoc'h", + "An administrator added you" : "Ur merour en deus ouzhpennet ac'hanoc'h", + "An administrator added {user}" : "Ur merour en deus uzhpennet {user}", + "You left the conversation" : "Kuitaet ho peus ar gemenadenn", + "{actor} left the conversation" : "{actor} en deus kuitaet ar gemenadenn", + "{actor} removed {user}" : "{actor} en deus lemet {user}", + "You removed {user}" : "Lamet ho peus {user}", + "{actor} removed you" : "{actor} en deus lemet ac'hanoc'h", + "An administrator removed you" : "Ur merour en deus lamet ac'hanoc'h", + "An administrator removed {user}" : "Ur merour en deus lamet {user}", + "{actor} promoted {user} to moderator" : "{actor} en deus lakaet {user} da habaskaer", + "You promoted {user} to moderator" : "Lakaet ho peus {user} da habaskaer", + "{actor} promoted you to moderator" : "{actor} en deus lakaet ac'hanoc'h da habaskaer", + "An administrator promoted you to moderator" : "Ur merour en deus lakaet ac'hanoc'h da habaskaer", + "An administrator promoted {user} to moderator" : "Ur merour en deus lakaet {user} da habaskaer", + "{actor} demoted {user} from moderator" : "{actor} en deus lamet da {user} e droet habaskaer ", + "You demoted {user} from moderator" : "Lamet ho peus da {user} e droet habaskaer ", + "{actor} demoted you from moderator" : "{actor} en deus lamet deioc'h ho droet habaskaer ", + "An administrator demoted you from moderator" : "Ur merour en deus lamet deoc'h ho droet habaskaer ", + "An administrator demoted {user} from moderator" : "Ur merour en deus lamet da {user} e droet habaskaer ", + "{actor} shared a file which is no longer available" : "Restr rannet {actor} n'eo ket posupl kavout kenn", + "You shared a file which is no longer available" : "Ar restr o peus rannet n'eo ket posupl kavout kenn", + "Administration" : "Merouriez", + "System" : "Sistem", + "%s (guest)" : "%s (kouviat)", + "Talk to %s" : "Komz da %s", + "File not found" : "Restr ebet kavet", + "File is not shared, or shared but not with the user" : "N'eo ket rannet ar restr, pe n'eo ket rannet gan an implijour", + "No account available to delete." : "N'ez eus kont ebet da lemel", + "File is too big" : "Re vras eo ar restr", + "Invalid file provided" : "Ar restr roet n'eo ket unan aotreet", + "Invalid image" : "N'eo ket aotreet ar skeudenn", + "Unknown filetype" : "N'eo ket anavezet stumm ar restr", + "Talk mentions" : "Menegoù Talk", + "Say hi to your friends and colleagues!" : "Lâr koukouk d'ho mignoned ha genseurted", + "No unread mentions" : "Kemenadenn nan-lennet ebet", + "Call in progress" : "Kemenadenn en dro", + "You were mentioned" : "Meneget oc'h bet", + "Write to conversation" : "Skrivañ d'an diviz", + "Writes event information into a conversation of your choice" : "Skriva titouroù an darvout en diviz o peus c'hoant", + "Conversation invitation" : "Kouviadenn diviz", + "Description" : "Deskrivadur", + "Password request: %s" : "Ger-tremen goulennet : %s", + "Private conversation" : "Diviz prevez", + "Deleted user (%s)" : "Implijour dilamet (%s)", + "Dismiss notification" : "Arrest ar gemenadennoù", + "Accept" : "Asantiñ", + "Notification" : "Kemennadenn", + "{user} in {call}" : "{user} e {call}", + "Deleted user in {call}" : "Implijer dilamet e {call}", + "{guest} (guest) in {call}" : "{guest} (kouviad) e {call}", + "Guest in {call}" : "Kouvidi e {call}", + "{user} sent you a private message" : "{user} en deus kaser deoc'h ur gemenadenn prevez", + "{user} sent a message in conversation {call}" : "{user} en deus kaset ur gemenadenn en diviz {call}", + "A deleted user sent a message in conversation {call}" : "Un implijer lamet en deus kaset ur gemenadenn en diviz {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (kouviat) en deus kaset ur gmenadenn en diviz {call}", + "A guest sent a message in conversation {call}" : "Ur c'houviat en deus kaset ur gemenaden en diviz {call}", + "{user} replied to your private message" : "{user} en deus responted d'ho gemenadenn prevez", + "{user} replied to your message in conversation {call}" : "{user} en deus respontet d'ho gemenadenn en diviz {call}", + "A deleted user replied to your message in conversation {call}" : "U implijour lamet en deus responted d'o gemenadenn en diviz {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (kouviat) en deus responted d'ho gemenadenn en diviz {call}", + "A guest replied to your message in conversation {call}" : "Ur c'houviat en deus responted d'ho gemenadenn en diviz {call}", + "{user} mentioned you in a private conversation" : "{usetr} en deus meneget ac'hanoc'h en un diviz prevez", + "{user} mentioned you in conversation {call}" : "{user} en deus meneget ac'hanoc'h en diviz {call}", + "A deleted user mentioned you in conversation {call}" : "Un implijour lamet en deus meneget ac'hanoc'h en diviz {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (kouviat) en deus meneget ac'hanoc'h en diviz {call}", + "A guest mentioned you in conversation {call}" : "Ur c'houviat en deus meneget ac'hanoc'h en diviz {call}", + "View chat" : "Gwellet ar chat", + "{user} invited you to a group conversation: {call}" : "{user} e deus kouviet ac'hnoc'h d'ur strolat diviz : {call}", + "Join call" : "Mont er gemenadenn", + "Answer call" : "Respont d'ar gemenadenn", + "Call back" : "adober ur gemenadenn", + "You missed a call from {user}" : "C'hwitet o peus ur gemenadenn eus {user}", + "A group call has started in {call}" : "Ur gemenadenn strollat a zo kroget e {call}", + "You missed a group call in {call}" : "C'hwitet ho peus ur gemenadenn strollat e {call}", + "{email} is requesting the password to access {file}" : "{email} a goulenn ar ger-tremen evit tizout {restr}", + "{email} tried to request the password to access {file}" : "{email} en deus goulennet ar ger-tremen evit tizout {restr}", + "Someone is requesting the password to access {file}" : "Unan bennak a zo o gouelnn ar ger tremen evit tizout {restr}", + "Someone tried to request the password to access {file}" : "Unan bennak en deus klasket goulenn ar ger-tremen evit tizhout {file}", + "Open settings" : "Digeri stummoù", + "The hosted signaling server is now configured and will be used." : "Ar servijour kemenn ostet a zo stummet hag a vo implijet bremañ.", + "The hosted signaling server was removed and will not be used anymore." : "Lamet eo bet ar servijour kemenn ostet ha ne vo ket implijet kenn.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ar servijour kemenn ostet en deus cheñchet eus \"{oldstatus}\" da \"{newstatus}\".", + "error" : "fazi", + "Default" : "Dre ziouer", + "Presentation" : "Kinnigadenn", + "Conversations" : "Diviz", + "{user}" : "{user}", + "Messages" : "Kemenadennoù", + "{user} in {conversation}" : "{user} e {conversation}", + "Messages in other conversations" : "Kemenadennoù e divizoù all", + "Other" : "All", + "Failed to request trial because the trial server is unreachable. Please try again later." : "C'hwitet eo bet goulenn an arnodenn, abalamour ne vez ket tizet ar servijour anodañ. klaskit en dro diwezatoc'h.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Ur gudenn a zo gant dilesa an azgoulenn. Mateze ne vez get tizet dre ar maez evit gwiriañ e URL.", + "Something unexpected happened." : "Un dra dic'hortoz a zo degouezet.", + "The URL is invalid." : "Fall eo an url", + "An HTTPS URL is required." : "Un URL HTTPS a zo ret kaout.", + "The email address is invalid." : "N'eo ket mat ar chom-lech postel", + "The language is invalid." : "N'eo ket mat ar yezh.", + "The country is invalid." : "N'eo ket mat ar bro.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Ur guden a zo gant ar goulenn arnodenn. Selit ouh ho kazetenn evit muioc'h a ditouroù.", + "Too many requests are send from your servers address. Please try again later." : "Re a goulennoù a vez kaset da chom-lec'h ar servijour. Klaskit en dro divesatoc'h.", + "There is already a trial registered for this Nextcloud instance." : "Un arnodenn a zo bet goulenet d'an azgoulenn Newtcloud dija.", + "Something unexpected happened. Please try again later." : "Un dra dic'hortozh a zo degouezet. Klaskit en dro diwezatoc'h.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "C'hwitet da goulenn an amprouadenn ablamour ne dro ket mat ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Trial requested but failed to get account information. Please check back later." : "Amprouadenn goulennet mes c'hwitet da tapout titouroù ar c'hont. Klaskit en dro diwezatoc'h.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Ur gudenn a zo gant dilesa ar goulenn. Marteze ne vez ket tizet dre ar maez evit gwiriañ an URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "C'hwitet da dapout titouroù ar c'hont peogwir ne dro ket mat ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Ur gudenn a zo gant pakañ titouroù ar c'hont. Sellit ho kazetnn evit muioc'h a ditouroù.", + "There is no such account registered." : "N'ez eus kont evel se ebet enrollet.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "'hwitet da dapout titouroù ar c'hont peogwir ne vez ket tizet ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Deleting the hosted signaling server account failed. Please check back later." : "C'hwitet da lemel ar servijour gemenn ostet. Klaskit en dro diwezatoc'h", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "C'hwitet da lemel ar c'hont peogwir ne dro ket mat ar serviojour ammprouiñ. Klaskit en dro diwezatoc'h.", + "There is a problem with deleting the account. Please check your logs for further information." : "Ur gudenn a zo en ur lemel arc'hont. Sellit ouzh ho kaetenn evit muioc'h ha ditouroù.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "C'hwitet da lemel ar c'hont peogwir ne vez ket tizet ar servijour amprouiñ. Klaskit en dro diwezatoc'h.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirelezhioù Arab Unanet", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua ha Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Arc'hantina", + "American Samoa" : "Samoa Amerikan", + "Austria" : "Aostria", + "Australia" : "Aostralia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaidjan", + "Bosnia and Herzegovina" : "Bosnia-ha-Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bengladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia", + "Bonaire, Sint Eustatius and Saba" : "Izelvroioù ar c'haraib", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoutan", + "Bouvet Island" : "Enez Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Inizi Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Republik Demokratel Kongo", + "Central African Republic" : "Republik Kreizafrikan", + "Congo" : "Kongo", + "Switzerland" : "Suis", + "Côte d'Ivoire" : "Aod an Olifant", + "Cook Islands" : "Inizi Cook", + "Chile" : "Chile", + "Cameroon" : "Kameroun", + "China" : "Sina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kab Glas", + "Curaçao" : "Kòrsou", + "Christmas Island" : "Enez Christmas", + "Cyprus" : "Republik Kiprenez", + "Czechia" : "Republik Tchek", + "Germany" : "Alamagn", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominika", + "Dominican Republic" : "Republik Dominikan", + "Algeria" : "Aljeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipt", + "Western Sahara" : "Sahara ar C'hornôg", + "Eritrea" : "Eritrea", + "Spain" : "Spagn", + "Ethiopia" : "Etiopia", + "Finland" : "Finland", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Inizi Maloù", + "Micronesia, Federated States of" : "Stadoù Kevreet Mikronezia", + "Faroe Islands" : "Faero", + "France" : "Bro-C'hall", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Rouantelezh-Unanet", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Ginea c'hall", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Jibraltar", + "Greenland" : "Greunland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Gwadeloup", + "Equatorial Guinea" : "Ginea ar C'heheder", + "Greece" : "Gres", + "South Georgia and the South Sandwich Islands" : "Georgia ar Su hag Inizi Sandwich ar Su", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Ginea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Enez Heard hag Inizi McDonald", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Republik Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonezia", + "Ireland" : "Iwerzhon", + "Israel" : "Israel", + "Isle of Man" : "Manav", + "India" : "India", + "British Indian Ocean Territory" : "Tiriad Meurvor Indez Breizh-Veur", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italia", + "Jersey" : "Jerzenez", + "Jamaica" : "Jamaika", + "Jordan" : "Jordania", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizstan", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komorez", + "Saint Kitts and Nevis" : "Saint Kitts ha Nevis", + "Korea, Democratic People's Republic of" : "Korea, Republik Poblel ha Demokratel", + "Korea, Republic of" : "Republik Korea", + "Kuwait" : "Koweit", + "Cayman Islands" : "Inizi Cayman", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Lao, Republik Demokratel ar Bobl", + "Lebanon" : "Liban", + "Saint Lucia" : "Santez-Lusia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Bro Luksembourg", + "Latvia" : "Latvia", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint-Martin (Antilhez)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Inizi Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Mariana an Norzh", + "Martinique" : "Martinik", + "Mauritania" : "Maouritania", + "Montserrat" : "Enez Montserrat", + "Malta" : "Malta", + "Mauritius" : "Moris", + "Maldives" : "Maldivez", + "Malawi" : "Malawi", + "Mexico" : "Mec'hiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia-Nevez", + "Niger" : "Niger", + "Norfolk Island" : "Enez Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Zeland-Nevez", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinezia C'hall", + "Papua New Guinea" : "Papoua Ginea-Nevez", + "Philippines" : "Filipinez", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Sant-Pêr-ha-Mikelon", + "Pitcairn" : "Inizi Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestinia, Stad", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Enez ar Reünion", + "Romania" : "Roumania", + "Serbia" : "Serbia", + "Russian Federation" : "Rusia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saoudat", + "Solomon Islands" : "Inizi Salomon", + "Seychelles" : "Sechelez", + "Sudan" : "Soudan", + "Sweden" : "Sveden", + "Singapore" : "Singapour", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ha Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard ha Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Soudan ar Su", + "Sao Tome and Principe" : "São Tomé ha Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (stad)", + "Syrian Arab Republic" : "Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Inizi Turks ha Caicos", + "Chad" : "Tchad", + "French Southern Territories" : "Douaroù Aostral hag Antarktikel Frañs", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor ar Reter", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizia", + "Tonga" : "Tongaeg", + "Turkey" : "Turkia", + "Trinidad and Tobago" : "Trinidad ha Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Rapublik Sina", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Ouganda", + "United States Minor Outlying Islands" : "Inizi bihan pell diouzh ar Stadoù Unanet", + "United States of America" : "Stadoù Unanet Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Ouzbekistan", + "Holy See" : "Sez Santel", + "Saint Vincent and the Grenadines" : "Sant Visant hag an Inizi Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Inizi Gwerc'h Breizhveurat", + "Virgin Islands, U.S." : "Inizi Gwerc'h ar Stadoù-Unanet", + "Viet Nam" : "Viêt Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ha Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Kevread", + "High-performance backend" : "Backend a labour buhan", + "Error: Server did not respond with proper JSON" : "Fazi : N'eo ket posupl respont gant ur JSON mat", + "Error: Server responded with: {error}" : "Fazi : Respont a ra ar servijour gant : {error}", + "Error: Unknown error occurred" : "Fazi : Ur fazi dianv a zo bet", + "Invalid date, date format must be YYYY-MM-DD" : "Deizat fall, stumm an deizat a zo ret bezhañ BBBB-MM-DD", + "Conversation not found" : "N'eo ket bet kavet an diviz", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-prezegenn gant WebRTC", + "Leave call" : "Kuitaat ar gemenadenn", + "Navigating away from the page will leave the call in {conversation}" : "Kuitaat ar bajenn a laosko ar pelgomzadenn e {convzersation}", + "Stay in call" : "Chom er gemenadenn", + "Discuss this file" : "Komz diwar benn ar restr-mañ", + "Share this file with others to discuss it" : "Rannañ ar restr-mañ da reoù all evit komz diwar e-benn", + "Share this file" : "Rannañ ar restr", + "Join conversation" : "Mont n diviz", + "The password is wrong. Try again." : "Direizh eo ar ger-tremen. Klaskit en-dro.", + "Password" : "Ger-tremen", + "Submit" : "Kinnig", + "Error requesting the password." : "Ur fazi a zo bet en ur gouelenn ar ger-tremen", + "Request password" : "Goulenn ar -ger-tremen", + "This conversation has ended" : "Echu ei an diviz-mañ", + "Everyone" : "Toud an dud", + "Users and moderators" : "Implijourien ha habaskaerienn", + "Moderators only" : "Habaskerienn nemetken", + "Save changes" : "Enrollañ ar cheñchamantoù", + "Saving …" : "Orc'h enrolliñ", + "Saved!" : "Enrollet !", + "Limit to groups" : "Nemet d'ar strolladoù", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "M'az eo choazet ur strollad d'an neubetañ, ne vo nemet tud ar strollad en diviz.", + "Guests can still join public conversations." : "Kouviidi a c'hell dont en diviz c'hoaz.", + "Limit using Talk" : "Bevenn en ur implij Talk", + "Limit creating a public and group conversation" : "Bevenn krouañ un diviz publik hag a stroll", + "Limit creating conversations" : "Bevenn krouañ un diviz", + "Limit starting a call" : "Beven kregiñ ur gemenadenn", + "Limit starting calls" : "Beven kregiñ kemenadennoù", + "When a call has started, everyone with access to the conversation can join the call." : "P'en deus kroget ur gemenadenn, tout an dud en diviz a c'hell monet er gemenadenn.", + "Disabled" : "Disaotreañ", + "State" : "Stad", + "Name" : "Anv", + "Beta" : "Beta", + "All messages" : "Pep kemenadenn", + "@-mentions only" : "@-meneg nemetkenn", + "Off" : "Lac'hañ", + "General settings" : "Stummoù hollek", + "Default notification settings" : "Arventennoù kemenadennoù dre ziouer", + "Default group notification" : "Kemenadenn strollad dre ziouer", + "Default group notification for new groups" : "Kemenadenn strollad dre ziouer evit ar strolladoù nevez", + "Integration into other apps" : "Lakaet e-barzh meziantoù all", + "Allow conversations on files" : "Aotreañ an treiñ restroù", + "Allow conversations on public shares for files" : "Aotreañ divizoù war ranadennoù publik evit ar restroù", + "Enable encryption" : "Aotreañ ar sifradur", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En ur klikañ war ar bouton a huz an titouroù ar stumm mañ a vo kaset d'ar servijour Struktur AG. Muioc'h a ditouroù war {linkstart}spreed.eu{linkend}.", + "Pending" : "O c'hortoz", + "Error" : "Fazi", + "Blocked" : "Stanket", + "Active" : "O labourat", + "Expired" : "Termenet", + "Never" : "James", + "The trial could not be requested. Please try again later." : "An amprouadenn na c'hell ket bezhañ goulennet. Klaskit en dro goude.", + "The account could not be deleted. Please try again later." : "Neo ket posupl lemel ar c'hont. Klaskit en dro goude", + "URL of this Nextcloud instance" : "URL an azgoulenn Nextcloud", + "Full name of the user requesting the trial" : "Anv klok an implijer a c'houlenn an taol esae", + "Language" : "Yezh", + "Country" : "Bro", + "Request signaling server trial" : "Goulenn amproui arhent ar servijour", + "You can see the current status of your hosted signaling server in the following table." : "Posupl eo deoc'h gwellet stad ho arhent ho servijour ostet e daolenn dindan.", + "Status" : "Stad", + "Created at" : "Krouet da", + "Expires at" : "Termen da", + "Limits" : "Bevennoù", + "No" : "Nann", + "Delete the signaling server account" : "Lemel ar c'hont arhent servijour", + "_%n user_::_%n users_" : ["%n implijer","%n implijer","%n implijer","%n implijer","%n implijer"], + "Status: Checking connection" : "Stad : Ho gwiriañ ar genstagadenn", + "OK: Running version: {version}" : "OK : o lakaat da dreiñ ar stumm : {version}", + "Validate SSL certificate" : "Sertifikad SSL gwiriet", + "Delete this server" : "Dilemel ar servijer-mañ", + "Test this server" : "Arnodañ ar servijour-mañ", + "Shared secret" : "Secret rannet", + "High-performance backend URL" : "URL ar vackend a labour buhan", + "STUN server URL" : "URL ar servijour STUNN", + "STUN servers" : "Servijour STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ur servijour STUNN a vez implijet evit anavezout chom-lec'h IP publik an implijourienn a drek an henter.", + "OK: Successful ICE candidates returned by the TURN server" : "OK : ICE emstriver mat edkaset gant ar servijour TURN", + "Error: No working ICE candidates returned by the TURN server" : "Fazi : Ne labour ket ICE emstriver adkaset gant ar servijour TURN", + "Testing whether the TURN server returns ICE candidates" : "Amprouiñ adkasadenn emstriver ICE at servijour TURN", + "TURN server URL" : "URL ar servijour TURN", + "TURN server secret" : "Servijour TURN sekret", + "TURN server protocols" : "Protokoloù servijour TURN", + "TURN servers" : "Servijour TURN", + "Failed" : "C'hwitet", + "OK" : "OK", + "Confirm" : "Kadarnañ", + "Cancel" : "Nullañ", + "Back" : "Distro", + "Calendar" : "Deiziataer", + "Save" : "Enrollañ", + "Search participants" : "Klask implijer", + "No results" : "Disoc'h ebet", + "Done" : "Graet", + "Grid view" : "Diskwell ar roued", + "Reload" : "Adkargañ", + "Waiting for others to join the call …" : "O c'hortoz ma teuio ar re all er gemenadenn ...", + "You can invite others in the participant tab of the sidebar" : "Galout a rit kouviañ tud gant an daolenn lodek er verenn gostez", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Galout a rit kouviañ tud en dolenn lodek er varenn gostez pe rannañ al liamm-mañ evit kouviañ anezho !", + "Share this link to invite others!" : "Rannit al liamm-mañ gant ar re all !", + "Copy link" : "Kopiañ al liamm", + "Mute audio" : "Lac'hañ a audio", + "Unmute audio" : "Lakaat an odio en dro", + "None" : "Hini ebet", + "Access to camera was denied" : "Nac'het eo bet tizhañ ar c'hamera", + "Error while accessing camera" : "Ur fazi a zo bet en ur tizhout ar c'hamera", + "You have been muted by a moderator" : "Mut oc'h bet lakaet gant ar moderatour", + "Disable video" : "Lac'han ar video", + "Enable video" : "Lakaat ar video en dro", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Lakaat ar video en dro. Ho genstagadenn a vo troc'het evit aotreañ ar video evit ar wech kentañ", + "You" : "C'hwi", + "Mute" : "Mut", + "Show screen" : "Diskwell ar skramm", + "Stop following" : "Arrest heuliañ", + "You need to be logged in to upload files" : "Ret eo deoc'h bezhañ deuet-tre evit pellkas restroù", + "Drop your files to upload" : "Laoskit ho restroù evit pellkas", + "Favorite" : "Pennroll", + "Date:" : "Deiziad:", + "Hide details" : "Skoachañ ar munudoù", + "Show details" : "Diskouel ar munudoù", + "Disable" : "Disaotreañ", + "Enable" : "Aotreañ", + "Choose" : "Dibab", + "Conversation settings" : "Stummoù diviz", + "Personal" : "Personel", + "Leave conversation" : "Kuitaat an diviz", + "Delete conversation" : "Dilemel an diviz", + "Do you really want to delete \"{displayName}\"?" : "Sur oc'h da zilemel \"{displayName}\"?", + "Password protection" : "Gwareziñ gant ur ger-tremen", + "Start time (optional)" : "Amzer kregiñ (dibab)", + "Edit" : "Cheñch", + "More information" : "Muioc'h a ditouroù", + "Delete" : "Dilemel", + "Notifications" : "Kemennadennoù", + "Join" : "Kejañ", + "Error while creating the conversation" : "Ur fazi a zo bet en ur krouiñ an diviz", + "Create conversation" : "Krouiñ un diviz", + "Log in" : "Kennaskañ", + "Remove from favorites" : "Diverkañañ eus ar pennrolloù", + "Add to favorites" : "Ouzhpennañ er pennrolloù", + "You need to promote a new moderator before you can leave the conversation." : "Ret eo deoc'h lakaat unan bennak da moderatour a-rao kuitaat an diviz.", + "Home" : "Degemer", + "Alphabetically" : "Urzh alfabetek", + "An error occurred while performing the search" : "Ur fazi a zo bet en ur ober an enklask", + "Users" : "Implijer", + "Groups" : "Strolladoù", + "Other sources" : "Orin all", + "No search results" : "Disoc'h enklask ebet", + "Users and groups" : "Implijourienn ha strolladoù", + "You are currently waiting in the lobby" : "Ho gortoz er sal gortoz emaoc'h", + "Select microphone" : "Choaz ur mikro", + "No microphone available" : "Mikro ebet kavet", + "Select camera" : "Choaz ur c'hamera", + "No camera available" : "Kamera ebet kavet", + "No audio" : "Audio ebet", + "No camera" : "Kamera ebet", + "Calls are not supported in your browser" : "N'eo ket douget ar gemenadennoù gant ho vrowser", + "Access to microphone is only possible with HTTPS" : "N'eo posupl tizhout ar mikro nemet gant HTTPS", + "Access to microphone was denied" : "N'eo ket aotreet tizhout ar mikro", + "Error while accessing microphone" : "Ur fazi a zo bet en ur tizhout ar mikro", + "Access to camera is only possible with HTTPS" : "Tizhout ar c'hamera n'eo posupl nemet gant HTTPS", + "Invalid path selected" : "An hent dibabet n'eus ket anezhañ", + "Upload" : "Pellkas", + "Files" : "Restroù", + "Reply" : "Respont", + "Go to file" : "Mont d'ar restr", + "Translate" : "Treiñ", + "Dismiss" : "Arrest", + "Translate to" : "Treiñ e", + "Create a new group conversation" : "Krouiñ un diviz strollad nevez", + "Add participants" : "Ouzhpennan tud", + "Send message" : "Kas ur gemenadenn", + "File to share" : "Restr da rannañ", + "Add emoji" : "Ouzhpennañ un emoji", + "Share from Files" : "Rannañ diouzh Restroù", + "Share files to the conversation" : "Rannañ restroù d'an diviz", + "New file" : "Restr nevez", + "Add more files" : "Ouzhpennañ muioc'h a restroù", + "Send" : "Kas", + "Settings" : "Arventennoù", + "moderator" : "habaskaer", + "guest" : "kouviad", + "Remove participant" : "Disachañ an den", + "Demote from moderator" : "Tennañ ar gwirioù kerreizhañ", + "Promote to moderator" : "Lakaat da moderatour", + "Add users or groups" : "Ouzhpennañ implijourienn pe strolladoù", + "Add users" : "Ouzhpennañ implijer ", + "Add groups" : "Ouzhoennañ strolladoù", + "Add other sources" : "Ouzhpennañ dre un orin all", + "Add emails" : "Ouzhpennañ postelloù", + "Searching …" : "O klask ...", + "Search for more users" : "Klask d evit muioc'h a implijourienn.", + "Participants" : "Tud", + "Chat" : "Chat", + "Details" : "Munudoù", + "Load more results" : "Kagañ muioc'h a disoc'hoù", + "Projects" : "Raktres", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Liamm d'an diviz", + "Search conversations or users" : "Klask divizoù ha implijourienn", + "Select conversation" : "Choaz un diviz", + "Notification settings" : "Arventennoù kemennadennoù", + "Default language" : "Yezh dre ziouer", + "Select location for attachments" : "Choazit ul lec'h evit stagañ", + "Error while setting attachment folder" : "Ur fazi a zo bet en ur lakaat an teuliad stagañ", + "Privacy" : "Prevezder", + "Attachments folder" : "Teuliad stag", + "Search" : "Klask", + "Start call" : "Kregiñ ar gemenadenn", + "You will be able to join the call only after a moderator starts it." : "Posupl vo deoc'h mont er gemenadenn goude ma vo bet groget gant ar modertator.", + "Screensharing options" : "Dibaboù rannañ skramm", + "Enable screensharing" : "Aotreañ ar rannan skramm", + "Bad sent video and screen quality." : "Fall eo perzh ar skramm ha kasadenn ar video.", + "Bad sent screen quality." : "Fall eo perzh ar skramm.", + "Bad sent video quality." : "Fall eo perzh ar gasadenn ar video.", + "Bad sent audio, video and screen quality." : "Fall eo perzh ar skramm, kasadenn ar video ha kasadenn an audio.", + "Bad sent audio and screen quality." : "Fall eo perzh ar skramm ha kasadenn an audio.", + "Bad sent audio and video quality." : "Fall eo kasadenn ar video ha kasadenn an audio.", + "Bad sent audio quality." : "Fall eo kasadenn an audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ho kenstagadenn internet pe urzhiataer a labour ha ne c'hell ket ar re all gwellet ho skramm", + "Your internet connection or computer are busy and other participants might be unable to see you." : "HO labour eo ho kenstagadenn internet pe ho urzhiataer ha ne c'hell ket ar re all gwellet ac'hanaoc'h.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ho kenstagadur internet pe ho urzhiataer a labour hamarteze ne c'hll ket komprenn ha gwellet ac'hnoc'h. Evit gwelaat ar stad klaskit lac'han ar video pa rannit ho skramm.", + "Disable screenshare" : "Rannañ skramm disaotreet", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ho kenstagadenn internet pe ho urzhiataer a labour ha ne c'hll ket marteze ar re all komprenn ac'hanaoc'h. La'hit ar video evit gwelaat an traoù.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ho kenstagadenn onternet pe ho urzhiataer a labour ha marteze ne c'hell ket ar re all komprenn ac'hanoc'h.", + "Screen sharing is not supported by your browser." : "N'eo ket douget ar rannañ skramm gant ho furcher.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ar rannañ skramm en deus ezhomm e vefe ar bajenn karget dre HTTPS", + "Screensharing requires the page to be loaded through HTTPS." : "Ar rannañ-skramm en deus ezhomm e vefe ar bajenn karget dre HTTPS", + "An error occurred while starting screensharing." : "Ur fazi a zo bet e pad ar rannadenn-skramm.", + "Show your screen" : "Diskouez ar skramm", + "Stop screensharing" : "Echuañ ar rannadenn skramm", + "Mute others" : "Lakaat ar re all mut", + "Keep" : "Mirout", + "Message without mention" : "Kemenn hp meneg", + "Mention myself" : "Meneg ac'hanon", + "The conversation does not exist" : "N'ez eus ket eus an diviz-mañ", + "Join a conversation or start a new one!" : "Mont en un diviz pe kregiñ unan nevez !", + "Duplicate session" : "Eilan dalc'h", + "Join a conversation or start a new one" : "Mont en un diviz pe kregiñ unan nevez ", + "User" : "Implijer", + "Login" : "Anv arveriad", + "Client ID" : "ID kliant", + "Media" : "Media", + "Audio" : "Audio", + "Group" : "Stollad", + "You: {lastMessage}" : "C'hwi : {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ho klask mont en diviz emaoc'h p'ho peus un dalc'h en ur prenestr pe ardivink all. N'eo ket douget c'hoaz gant Nextcloud Talk. Petra o peus c'hoant ober ?", + "Leave this page" : "Kuitaat ar bajenn", + "Join here" : "Kejañ amañ", + "An error occurred while fetching the participants" : "Ur fazi a zo bet en ur pakañ an tud", + "Error while sharing file" : "Ur fazi a zo bet en ur rannañ ar restr", + "Lost connection to signaling server. Trying to reconnect." : "Kenstagadenn gant ar servijour arhent kollet. O klask adkemprenn.", + "Please reload the page." : "Mar-plij adkargit ar bajenn", + "Do not disturb" : "Na rannit ket", + "Away" : "Pell", + "Microphone {number}" : "Mikro {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Huel-gomzerioù {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Seblant a rit bezhaén ho komz p'emaoc'h bet lakaet da mut, dimutit ac'hanoc'h evit bezhañ klevet gant ar re all", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ne oa ket posupl en em genstagañ gant un implijer d'an neubetañ. Ur servijour TURN a zo marteze ezhomm evit diskoulmañ ze. Goulennit d'ho merour da lakat unan en ur heuliañ {linkstart}an dielvadur-mañ{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Kemer a ra muioc'h a amzer eget ragjedet. Hag aotreoù ar media a zo bet lakaet mat (pe difennet) ? M'eo mat adlakit da vont en dro ho furcher, evel ne labour ket an audio hag ar video", + "Access to microphone & camera is only possible with HTTPS" : "Tizhout ar mikro hag ar c'hamero a zo posupl nemet gant HTTPS", + "Please move your setup to HTTPS" : "Lakait ho staliadur da HTTPS mar-plij", + "Access to microphone & camera was denied" : "Tizhañ ar mikro hag ar c'hmera a zo bet difennet", + "WebRTC is not supported in your browser" : "N'eo ket douget WebRTC gant ho furcher", + "Please use a different browser like Firefox or Chrome" : "Implijit furcherienn disheñvel evel Firefox pe Chrome", + "Error while accessing microphone & camera" : "Ur fazi a zo bet en ur klask tizout ar mikro hag ar c'hamera", + "%s Talk on your mobile devices" : "%s Talk war ho ardivinkoù hezoug", + "Join conversations at any time, anywhere, on any device." : "Kit en diviz n'eus forzh peseurt amzer, lec'h pe ardivink.", + "Android app" : "Meziant Android", + "iOS app" : "Meziant iOS", + "__language_name__" : "Brezhoneg", + "Notes" : "Notennoù", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Deuet oc'h en diviz dre ur prenestr pe ardivink all. N'eo ket douget evit ar poent gant Nextcloud Talk neuze eo bet sertet an dalc'h." +},"pluralForm" :"nplurals=5; plural=((n%10 == 1) && (n%100 != 11) && (n%100 !=71) && (n%100 !=91) ? 0 :(n%10 == 2) && (n%100 != 12) && (n%100 !=72) && (n%100 !=92) ? 1 :(n%10 ==3 || n%10==4 || n%10==9) && (n%100 < 10 || n% 100 > 19) && (n%100 < 70 || n%100 > 79) && (n%100 < 90 || n%100 > 99) ? 2 :(n != 0 && n % 1000000 == 0) ? 3 : 4);" +} \ No newline at end of file diff --git a/l10n/ca.js b/l10n/ca.js new file mode 100644 index 0000000..91ab27f --- /dev/null +++ b/l10n/ca.js @@ -0,0 +1,1986 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversa", + "(Duration %s)" : "(Durada %s)", + "You attended a call with {user1}" : "Vau atendre una trucada amb {user1}", + "_%n guest_::_%n guests_" : ["%n invitat","%n convidats"], + "You attended a call with {user1} and {user2}" : "Vau atendre una trucada amb {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Vau atendre una trucada amb {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Vau atendre una trucada amb {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Vau atendre una trucada amb {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["altres %n","altres %n"], + "{actor} invited you to {call}" : "{actor} us ha convidat a {call}", + "You were invited to a conversation or had a call" : "Us han convidat a una conversa o heu rebut una trucada", + "Other activities" : "Altres activitats", + "Talk" : "Converses", + "Guest" : "Convidat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Benvingut a Nextcloud Parla!\n\nEn aquesta conversa se us informarà sobre les noves característiques a Parla.", + "## New in Talk %s" : "## Novetat a Converses %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Ja es poden emprar Microsoft Edge i Safari per participar en trucades d'àudio i vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Les converses individuals ara són persistents i ja no es poden convertir en converses de grup per accident. A més, quan un dels participants abandona la conversa, la conversa ja no se suprimeix automàticament. Només si els dos participants marxen, la conversa se suprimirà del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Podeu notificar ara a tots els participants al xat amb el comodí \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Usant la tecla de \"fletxa-amunt\" recupereu el vostre darrer missatge per tornar a enviar-ho", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ara permet emprar comandaments, envieu \"/help\" com un missatge al xat per veure si el vostre administrador n'ha configurat algun", + "- With projects you can create quick links between conversations, files and other items" : "- Amb els projectes podeu crear ràpidament enllaços entre converses, fitxers i altres elements a Nextcloud", + "- You can now mention guests in the chat" : "- Ara ja podeu esmentar convidats al xat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Les converses ara poden tenir un vestíbul. Això permetrà als moderadors unir-se al xat i trucar ja per preparar la reunió, mentre que els usuaris i convidats han d'esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ara podeu respondre directament als missatges que donen als altres usuaris més context quant a el que el seu missatge es tracta", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La recerca de converses i participants ara també filtrarà les converses existents, el que fa que sigui molt més fàcil trobar converses anteriors", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ara podeu afegir grups d'usuaris personalitzats a les converses quan s'instal·li l'aplicació cercles", + "- Check out the new grid and call view" : "- Reviseu la nova quadrícula i la visualització de trucades", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ara pot pujar i arrossegar arxius directament des del seu dispositiu al xat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Els fitxers compartits s'obren ara directament dins de la vista de xat amb les aplicacions de visualització", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ara podeu cercar xats i missatges a la cerca unificada de la barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Salpebreu els vostres missatges amb emojis del selector d'emojis", + "- You can now change your camera and microphone while being in a call" : "- Ara pots canviar la càmera i el micròfon mentre estàs en una trucada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Contextualitza les teves converses amb una descripció i obre-la perquè els usuaris iniciats la puguin trobar i unir-se", + "- See a read status and send failed messages again" : "- Veure un estat de lectura i tornar a enviar missatges fallits", + "- Raise your hand in a call with the R key" : "- Alceu la mà en una trucada amb la tecla R", + "- Join the same conversation and call from multiple devices" : "- Uneix-te a la mateixa conversa i truca des de diversos dispositius", + "- Send voice messages, share your location or contact details" : "- Envia missatges de veu, comparteix la teva ubicació o detalls de contacte", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Afegiu grups a una conversa i els nous membres del grup s'afegiran automàticament com a participants", + "- A preview of your audio and video is shown before joining a call" : "- Es mostra una vista prèvia del vostre àudio i vídeo abans d'unir-vos a una trucada", + "- You can now blur your background in the newly designed call view" : "- Ara podeu desdibuixar el vostre fons a la vista de trucades recent dissenyada", + "- Moderators can now assign general and individual permissions to participants" : "- Els moderadors ara poden assignar permisos generals i individuals als participants", + "- You can now react to chat messages" : "- Ara podeu reaccionar als missatges de xat", + "- In the sidebar you can now find an overview of the latest shared items" : "- A la barra lateral ara podeu trobar una visió general dels darrers elements compartits", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilitzeu una enquesta per recollir les opinions dels altres o establir una data", + "- Configure an expiration time for chat messages" : "- Configureu un temps de caducitat per als missatges de xat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicieu trucades sense avisar els altres en converses grans. Podeu enviar notificacions de trucades individuals un cop s'hagi iniciat la trucada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envia missatges de xat sense avisar als destinataris en cas que no sigui urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Ara els emojis es poden completar automàticament escrivint un \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enllaceu diversos elements mitjançant el nou selector intel·ligent escrivint un \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Els moderadors ara poden crear sales de treball (requereix el rerefons d'alt rendiment)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Ara es poden gravar les trucades (requereix el rerefons d'alt rendiment)", + "- Conversations can now have an avatar or emoji as icon" : "- Les converses ara poden tenir un avatar o una emoticona com a icona", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ara hi ha fons virtuals disponibles a més del fons borrós de les videotrucades", + "- Reactions are now available during calls" : "- Les reaccions ara estan disponibles durant les trucades", + "- Typing indicators show which users are currently typing a message" : "- Els indicadors d'escriptura mostren quins usuaris estan escrivint un missatge", + "- Groups can now be mentioned in chats" : "- Els grups ara es poden esmentar als xats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Els enregistraments de trucades es transcriuen automàticament si es registra una aplicació de proveïdor de transcripcions", + "- Chat messages can be translated if a translation provider app is registered" : "- Els missatges de xat es poden traduir si una aplicació de proveïdor de traducció està registrada", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** ara es pot utilitzar als missatges de _xat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Ara hi ha webhooks disponibles per implementar bots. Consulteu la documentació per obtenir més informació https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Establiu un recordatori en un missatge de xat per ser notificat més tard de nou", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utilitza la conversa **Nota per a mi mateix** per prendre notes i compartir informació entre els teus dispositius", + "- Captions allow to send a message with a file at the same time" : "- Els subtítols permeten enviar un missatge amb un fitxer al mateix temps", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- El vídeo de l'altaveu ara és visible mentre es comparteix la pantalla i les reaccions de trucada estan animades", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Ara els autors i moderadors registrats poden editar els missatges durant 6 hores", + "- Unsent message drafts are now saved in your browser" : "- Els esborranys de missatges no enviats ara es guarden al vostre navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- El xat de text ara es pot fer de manera federada amb altres servidors de Converses", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Els moderadors ara poden prohibir els comptes i els convidats per evitar que es tornin a unir a una conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Les trucades properes d'esdeveniments del calendari enllaçats i els substituts fora de l'oficina ara es mostren a les converses", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Les trucades ara es poden fer de manera federada amb altres servidors Talk (requereix el rerefons d'alt rendiment)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentació del client d'escriptori Nextcloud Converses per a Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resumiu els enregistraments de trucades i missatges no llegits als xats amb l'Assistent de Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reunions millorades amb el reconeixement dels convidats convidats a través de la seva adreça de correu electrònic, importació de llistes de participants, esborranys per a enquestes i descàrrega de llistes de participants de trucades", + "- Archive conversations to stay focused" : "- Arxiva les converses per mantenir la concentració", + "- Schedule a meeting into your calendar from within a conversation" : "- Programeu una reunió al vostre calendari des d'una conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cerca missatges de la conversa actual directament a la barra lateral dreta", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vegeu més converses a primera vista amb la nova llista compacta (activa a la configuració de Converses)", + "_All %n participant_::_All %n participants_" : ["Tots el %n participant","Tots els %n participants"], + "Talk updates ✅" : "Actualitzacions de Talk ✅", + "Reaction deleted by author" : "Reacció suprimida per l'autor", + "{actor} created the conversation" : "{actor} ha creat la conversa", + "You created the conversation" : "Heu creat la conversa", + "System created the conversation" : "El sistema ha creat la conversa", + "An administrator created the conversation" : "Un administrador ha creat la conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha canviat el nom de la conversa de «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Heu canviat el nom de la conversa de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador ha canviat el nom de la conversa de \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} defineix la descripció", + "You set the description" : "Tu estableixes la descripció", + "An administrator set the description" : "Un administrador ha establert la descripció", + "{actor} removed the description" : "{actor} ha eliminat la descripció", + "You removed the description" : "Has eliminat la descripció", + "An administrator removed the description" : "Un administrador ha eliminat la descripció", + "You started a silent call" : "Has iniciat una trucada silenciosa", + "Outgoing silent call" : "Trucada silenciosa sortint", + "{actor} started a silent call" : "{actor} ha iniciat una trucada silenciosa", + "Incoming silent call" : "Trucada silenciosa entrant", + "You started a call" : "Heu iniciat una trucada", + "Outgoing call" : "Trucada sortint", + "{actor} started a call" : "{actor} ha iniciat una trucada", + "Incoming call" : "Trucada entrant", + "{actor} joined the call" : "{actor} s'ha unit a la trucada", + "You joined the call" : "Us heu unit a la trucada", + "{actor} left the call" : "{actor} ha deixat la trucada", + "You left the call" : "Heu deixat la trucada", + "{actor} unlocked the conversation" : "{actor} ha desblocat la conversa", + "You unlocked the conversation" : "Heu desblocat la conversa", + "An administrator unlocked the conversation" : "Un administrador ha desbloquejat la conversa", + "{actor} locked the conversation" : "{actor} ha blocat la conversa", + "You locked the conversation" : "Heu blocat la conversa", + "An administrator locked the conversation" : "Un administrador ha blocat la conversa", + "{actor} limited the conversation to the current participants" : "{actor} ha limitat la conversa als participants actuals", + "You limited the conversation to the current participants" : "Has limitat la conversa als participants actuals", + "An administrator limited the conversation to the current participants" : "Un administrador ha limitat la conversa als participants actuals", + "{actor} opened the conversation to registered users" : "{actor} ha obert la conversa als usuaris registrats", + "You opened the conversation to registered users" : "Has obert la conversa als usuaris registrats", + "An administrator opened the conversation to registered users" : "Un administrador va obrir la conversa als usuaris registrats", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} va obrir la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "You opened the conversation to registered users and users created with the Guests app" : "Has obert la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrador va obrir la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "The conversation is now open to everyone" : "Ara la conversa està oberta a tothom", + "{actor} opened the conversation to everyone" : "{actor} ha obert la conversa a tothom", + "You opened the conversation to everyone" : "Heu obert la conversa a tothom", + "{actor} restricted the conversation to moderators" : "{actor} ha restringit la conversa als moderadors", + "You restricted the conversation to moderators" : "Heu restringit la conversa als moderadors", + "{actor} started breakout rooms" : "{actor} ha començat les sales de grup", + "You started breakout rooms" : "Has començat a les sales de grup", + "{actor} stopped breakout rooms" : "{actor} han aturat les sales de grup", + "You stopped breakout rooms" : "Has aturat les sales de descans", + "{actor} allowed guests" : "{actor} ha permès convidats", + "You allowed guests" : "Heu permès convidats", + "An administrator allowed guests" : "Un administrador ha permès convidats", + "{actor} disallowed guests" : "{actor} ha deixat de permetre convidats", + "You disallowed guests" : "Heu deixat de permetre convidats", + "An administrator disallowed guests" : "Un administrador no permet convidats", + "{actor} set a password" : "{actor} a establert una contrasenya", + "You set a password" : "Heu establert una contrasenya", + "An administrator set a password" : "Un administrador ha definit una contrasenya", + "{actor} removed the password" : "{actor} ha tret la contrasenya", + "You removed the password" : "Heu tret la contrasenya", + "An administrator removed the password" : "Un administrador ha suprimit la contrasenya", + "{actor} added {user}" : "{actor} ha afegit a {user}", + "You joined the conversation" : "Us heu sumat a la conversa", + "{actor} joined the conversation" : "{actor} s'ha sumat a la conversa", + "You added {user}" : "Heu afegit a {user}", + "{actor} added you" : "{actor} us ha afegit", + "An administrator added you" : "Un administrador us ha afegit", + "An administrator added {user}" : "Un administrador ha afegit a {user}", + "You left the conversation" : "Heu deixat la conversa", + "{actor} left the conversation" : "{actor} ha deixat la conversa", + "{actor} removed {user}" : "{actor} ha fet fora a {user}", + "You removed {user}" : "Heu fet fora a {user}", + "{actor} removed you" : "{actor} us ha fet fora", + "An administrator removed you" : "Un administrador us ha suprimit", + "An administrator removed {user}" : "Un administrador ha suprimit a {user}", + "{actor} invited {federated_user}" : "{actor} ha convidat {federated_user}", + "You invited {federated_user}" : "Has convidat {federated_user}", + "You accepted the invitation" : "Heu acceptat aquesta invitació", + "{actor} invited you" : "{actor} t'ha convidat", + "An administrator invited you" : "Un administrador t'ha convidat", + "An administrator invited {federated_user}" : "Un administrador ha convidat {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha acceptat la invitació", + "{actor} removed {federated_user}" : "{actor} ha eliminat {federated_user}", + "You removed {federated_user}" : "Has eliminat {federated_user}", + "You declined the invitation" : "Heu rebutjat aquesta invitació", + "An administrator removed {federated_user}" : "Un administrador ha eliminat {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha rebutjat la invitació", + "{actor} added group {group}" : "{actor} ha afegit el grup {group}", + "You added group {group}" : "Heu afegit el grup {group}", + "An administrator added group {group}" : "Un administrador ha afegit el grup {group}", + "{actor} removed group {group}" : "{actor} ha suprimit el grup {group}", + "You removed group {group}" : "Heu suprimit el grup {group}", + "An administrator removed group {group}" : "Un administrador ha eliminat el grup {group}", + "{actor} added team {circle}" : "{actor} ha afegit l'equip {circle}", + "You added team {circle}" : "Heu afegit l'equip {circle}", + "An administrator added team {circle}" : "Un administrador ha afegit l'equip {circle}", + "{actor} removed team {circle}" : "{actor} equip eliminat {circle}", + "You removed team {circle}" : "Has eliminat l'equip {circle}", + "An administrator removed team {circle}" : "Un administrador ha eliminat l'equip {circle}", + "{actor} added {phone}" : "{actor} ha afegit {phone}", + "You added {phone}" : "Heu afegit {phone}", + "An administrator added {phone}" : "Un administrador ha afegit {phone}", + "{actor} removed {phone}" : "{actor} ha eliminat {phone}", + "You removed {phone}" : "Has eliminat {phone}", + "An administrator removed {phone}" : "Un administrador ha eliminat {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha promogut {user} a moderador", + "You promoted {user} to moderator" : "Heu promogut {user} a moderador", + "{actor} promoted you to moderator" : "{actor} us ha promogut a moderador", + "An administrator promoted you to moderator" : "Un administrador us ha promogut com a moderador", + "An administrator promoted {user} to moderator" : "Un administrador ha promogut a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} li ha tret el rol de moderador a {user}", + "You demoted {user} from moderator" : "Li heu tret el rol de moderador a {user}", + "{actor} demoted you from moderator" : "{actor} us ha tret el rol de moderador", + "An administrator demoted you from moderator" : "Un administrador us ha degradat de moderador", + "An administrator demoted {user} from moderator" : "Un administrador va degradar a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} va compartir un fitxer que ja no està disponible", + "You shared a file which is no longer available" : "Vau compartir un fitxer que ja no està disponible", + "File shares are currently not supported in federated conversations" : "Actualment no s'admeten els recursos compartits de fitxers a les converses federades", + "The shared location is malformed" : "La ubicació compartida té un format incorrecte", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurat Matterbridge per sincronitzar aquesta conversa amb altres xats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Has configurat Matterbridge per sincronitzar aquesta conversa amb altres xats", + "{actor} updated the Matterbridge configuration" : "{actor} ha actualitzat la configuració de Matterbridge", + "You updated the Matterbridge configuration" : "Heu actualitzat la configuració de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ha eliminat la configuració de Matterbridge", + "You removed the Matterbridge configuration" : "Heu eliminat la configuració de Matterbridge", + "{actor} started Matterbridge" : "{actor} va iniciar Matterbridge", + "You started Matterbridge" : "Vas començar Matterbridge", + "{actor} stopped Matterbridge" : "{actor} va aturar Matterbridge", + "You stopped Matterbridge" : "Vas aturar Matterbridge", + "{actor} deleted a message" : "{actor} ha suprimit un missatge", + "You deleted a message" : "Has suprimit un missatge", + "{actor} edited a message" : "{actor} ha editat un missatge", + "You edited a message" : "Has editat un missatge", + "{actor} deleted a reaction" : "{actor} ha suprimit una reacció", + "You deleted a reaction" : "Has suprimit una reacció", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Heu establert la caducitat del missatge en %n setmana","Heu establert la caducitat del missatge en %n setmanes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Heu establert la caducitat del missatge en %n dia","Heu establert la caducitat del missatge en %n dies"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Heu establert la caducitat del missatge en %n hores","Heu establert la caducitat del missatge en %n hores"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Heu establert la caducitat del missatge en %n minut","Heu establert la caducitat del missatge en %n minuts"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} estableix la caducitat del missatge en %n setmana","{actor} estableix la caducitat del missatge en %n setmanes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} defineix la caducitat del missatge en %n dia","{actor} estableix la caducitat del missatge en %n dies"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} defineix la caducitat del missatge en %n hora","{actor} defineix la caducitat del missatge en %n hores"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} defineix la caducitat del missatge en %n minut","{actor} defineix la caducitat del missatge en %n minuts"], + "{actor} disabled message expiration" : "{actor} ha desactivat la caducitat del missatge", + "You disabled message expiration" : "Heu desactivat la caducitat del missatge", + "{actor} cleared the history of the conversation" : "{actor} ha esborrat l'historial de la conversa", + "You cleared the history of the conversation" : "Has esborrat l'historial de la conversa", + "{actor} set the conversation picture" : "{actor} defineix la imatge de la conversa", + "You set the conversation picture" : "Tu has configurat la imatge de la conversa", + "{actor} removed the conversation picture" : "{actor} ha eliminat la imatge de la conversa", + "You removed the conversation picture" : "Has eliminat la imatge de la conversa", + "{actor} ended the poll {poll}" : "{actor} ha acabat l'enquesta {poll}", + "You ended the poll {poll}" : "Has acabat l'enquesta {poll}", + "{actor} started the video recording" : "{actor} va iniciar la gravació del vídeo", + "You started the video recording" : "Has començat la gravació del vídeo", + "{actor} stopped the video recording" : "{actor} ha aturat la gravació del vídeo", + "You stopped the video recording" : "Has aturat la gravació del vídeo", + "{actor} started the audio recording" : "{actor} va iniciar la gravació d'àudio", + "You started the audio recording" : "Has començat la gravació d'àudio", + "{actor} stopped the audio recording" : "{actor} ha aturat la gravació d'àudio", + "You stopped the audio recording" : "Has aturat la gravació d'àudio", + "The recording failed" : "La gravació ha fallat", + "Someone voted on the poll {poll}" : "Algú ha votat a l'enquesta {poll}", + "Message deleted by author" : "Missatge suprimit per l'autor", + "Message deleted by {actor}" : "Missatge suprimit per {actor}", + "Message deleted by you" : "Missatge suprimit per tu", + "Deleted user" : "Usuari suprimit", + "Unknown number" : "Número desconegut", + "Administration" : "Administració", + "System" : "Sistema", + "%s (guest)" : "%s (convidat)", + "Missed call" : "Trucada perduda", + "Call ended (Duration {duration})" : "Trucada finalitzada (durada {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha finalitzat la trucada (durada {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La trucada amb %n convidat s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})","La trucada amb %n convidats s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (durada {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Trucada amb %n convidat finalitzada (Durada {duration})","Trucada amb %n convidats finalitzada (durada {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha finalitzat la trucada amb %n convidat (Durada {duration})","{actor} ha finalitzat la trucada amb %n convidats (Durada {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1} ended (Duration {duration})" : "Trucada amb {user1} finalitzada (Durada {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1} (Durada {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1} i {user2} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Trucada amb {user1} i {user2} finalitzada (durada {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1} i {user2} (Durada {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2} i {user3} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Trucada amb {user1}, {user2} i {user3} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1}, {user2} i {user3} (Durada {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2}, {user3} i {user4} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Trucada amb {user1}, {user2}, {user3} i {user4} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1}, {user2}, {user3} i {user4} (Durada {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2}, {user3}, {user4} i {user5} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Trucada amb {user1}, {user2}, {user3}, {user4} i {user5} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} va finalitzar la trucada amb {user1}, {user2}, {user3}, {user4} i {user5} (Durada {duration})", + "Message of {user} in {conversation}" : "Missatge de {user} a {conversation}", + "Message of {user}" : "Missatge de {user}", + "Message of a deleted user in {conversation}" : "Missatge d'un usuari suprimit a {conversation}", + "Talk conversations" : "Converses", + "Talk to %s" : "Trucada a %s", + "An error occurred. Please contact your administrator." : "Hi ha hagut un error. Poseu-vos en contacte amb el vostre administrador.", + "File not found" : "No s'ha trobat el fitxer", + "File is not shared, or shared but not with the user" : "El fitxer no és compartit, o ho és però no amb l'usuari", + "No account available to delete." : "No hi ha cap compte disponible per suprimir.", + "Poll" : "Enquesta", + "Password needs to be set" : "S'ha d'establir la contrasenya", + "Uploading the file failed" : "No s'ha pogut carregar el fitxer", + "No image file provided" : "No s'ha proporcionat cap imatge o fitxer", + "File is too big" : "El fitxer és massa gran", + "Invalid file provided" : "El fitxer proporcionat no és vàlid", + "Invalid image" : "La imatge no és vàlida", + "Unknown filetype" : "Tipus de fitxer desconegut", + "Talk mentions" : "Mencions de Talk", + "More conversations" : "Més converses", + "Say hi to your friends and colleagues!" : "Saludeu els vostres amics i col·legues!", + "No unread mentions" : "No hi ha mencions no llegides", + "Call in progress" : "S'està fent una trucada", + "You were mentioned" : "Se li va mencionar", + "Write to conversation" : "Escriu a la conversa", + "Writes event information into a conversation of your choice" : "Escriu informació de l'esdeveniment en una conversa de la vostra elecció", + "Missing email field in header line" : "Falta el camp de correu electrònic a la línia de capçalera", + "Following lines are invalid: %s" : "Les línies següents no són vàlides: %s", + "Conversation invitation" : "Invitació a conversar", + "Description" : "Descripció", + "You can also dial-in via phone with the following details" : "També podeu marcar per telèfon amb els detalls següents", + "Dial-in information" : "Informació de marcatge", + "Meeting ID" : "ID de la reunió", + "Your PIN" : "El teu PIN", + "Meeting" : "Reunió", + "Password request: %s" : "Petició de contrasenya: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Usuari (%s) suprimit", + "Failed to upload call recording" : "No s'ha pogut pujar l'enregistrament de la trucada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de gravació no ha pogut pujar l'enregistrament de la trucada {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "Share to chat" : "Comparteix per xatejar", + "Dismiss notification" : "Descarta la notificació", + "Call recording now available" : "Ja està disponible l'enregistrament de trucades", + "The recording for the call in {call} was uploaded to {file}." : "La gravació de la trucada a {call} s'ha penjat a {file}.", + "Transcript now available" : "Transcripció ja disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripció de la trucada a {call} s'ha penjat a {file}.", + "Failed to transcript call recording" : "No s'ha pogut transcriure l'enregistrament de la trucada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor no ha pogut transcriure l'enregistrament a {file} per a la trucada a {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "Call summary now available" : "Ja està disponible el resum de la trucada", + "The summary for the call in {call} was uploaded to {file}." : "El resum de la trucada a {call} s'ha penjat a {file}.", + "Failed to summarize call recording" : "No s'ha pogut resumir l'enregistrament de la trucada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor no ha pogut resumir l'enregistrament a {file} per a la trucada a {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} t'ha convidat a unir-te a {roomName} a {remoteServer}", + "Accept" : "Accepta", + "Decline" : "Rebutja", + "{user1} invited you to a federated conversation" : "{user1} t'ha convidat a una conversa federada", + "New message" : "Escriu un missatge", + "Reminder" : "Recordatori", + "Notification" : "Notificació", + "Reminder: You in {call}" : "Recordatori: tu a {call}", + "Reminder: {user} in {call}" : "Recordatori: {user} a {call}", + "Reminder: Deleted user in {call}" : "Recordatori: usuari suprimit a {call}", + "Reminder: {guest} (guest) in {call}" : "Recordatori: {guest} (convidat) a {call}", + "Reminder: Guest in {call}" : "Recordatori: convidat a {call}", + "{user} reacted with {reaction}" : "{user} ha reaccionat amb {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} ha reaccionat amb {reaction} a {call}", + "Deleted user reacted with {reaction} in {call}" : "L'usuari suprimit ha reaccionat amb {reaction} a {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidat) ha reaccionat amb {reaction} a {call}", + "Guest reacted with {reaction} in {call}" : "El convidat ha reaccionat amb {reaction} a {call}", + "{user} in {call}" : "{user} a {call}", + "Deleted user in {call}" : "Usuari suprimit a {call}", + "{guest} (guest) in {call}" : "{guest} (convidat) a {call}", + "Guest in {call}" : "Convidat a {call}", + "{user} sent you a private message" : "{user} us ha enviat un missatge privat", + "{user} sent a message in conversation {call}" : "{user} ha enviat un missatge a la conversa {call}", + "A deleted user sent a message in conversation {call}" : "Un usuari que va ser suprimit ha enviat un missatge a la conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) ha enviat un missatge a la conversa {call}", + "A guest sent a message in conversation {call}" : "Un convidat ha enviat un missatge a la conversa {call}", + "{user} replied to your private message" : "{user} ha respost al vostre missatge privat", + "{user} replied to your message in conversation {call}" : "{user} ha respost al vostre missatge a la conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuari que va ser suprimit ha respost al vostre missatge a la conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidat) ha respost al vostre missatge a la conversa {call}", + "A guest replied to your message in conversation {call}" : "Un usuari convidat ha respost al vostre missatge a la conversa {call}", + "Reminder: You in private conversation {call}" : "Recordatori: estàs en una conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Recordatori: un usuari suprimit en una conversa privada {call}", + "Reminder: {user} in private conversation" : "Recordatori: {user} en conversa privada", + "Reminder: You in conversation {call}" : "Recordatori: tu estàs a la conversa {call}", + "Reminder: {user} in conversation {call}" : "Recordatori: {user} a la conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Recordatori: un usuari suprimit a la conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Recordatori: {guest} (convidat) a la conversa {call}", + "Reminder: A guest in conversation {call}" : "Recordatori: un convidat a la conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} ha reaccionat amb {reaction} al teu missatge privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuari suprimit ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidat) ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidat ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "{user} mentioned you in a private conversation" : "{user} us ha mencionat en una conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} va mencionar el grup {group} a la conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} va mencionar l'equip {team} a la conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} ha mencionat tothom a la conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} us ha mencionat a la conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuari suprimit ha mencionat el grup {group} a la conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuari suprimit ha mencionat l'equip {team} a la conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuari suprimit ha mencionat tothom a la conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuari suprimit us ha mencionat a la conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidat) ha mencionat el grup {group} a la conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidat) va mencionar l'equip {team} a la conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidat) ha mencionat tothom a la conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) us ha mencionat a la conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Un convidat ha mencionat el grup {group} a la conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Un convidat va mencionar l'equip {team} a la conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Un convidat ha mencionat tothom a la conversa {call}", + "A guest mentioned you in conversation {call}" : "Un convidat us ha mencionat a la conversa {call}", + "View message" : "Visualitza el missatge", + "Dismiss reminder" : "Descarta el recordatori", + "View chat" : "Mostra el xat", + "{user} invited you to a group conversation: {call}" : "{user} us ha convidat a una conversa grupal: {call}", + "Join call" : "Uneix-te a la trucada", + "Answer call" : "Respon la trucada", + "{user} would like to talk with you" : "{user} vol parlar amb tu", + "Call back" : "Torna la trucada", + "You missed a call from {user}" : "Teniu una trucada perduda de {user}", + "A group call has started in {call}" : "S'ha iniciat una trucada grupal a {call}", + "You missed a group call in {call}" : "Teniu una trucada de grup perduda a {call}", + "{email} is requesting the password to access {file}" : "{email} està demanant la contrasenya per accedir a {file}", + "{email} tried to request the password to access {file}" : "{email} ha intentat sol·licitar la contrasenya per accedir a {file}", + "Someone is requesting the password to access {file}" : "Algú està demanant la contrasenya per accedir a {file}", + "Someone tried to request the password to access {file}" : "Algú ha intentat sol·licitar la contrasenya per accedir a {file}", + "Open settings" : "Obre els paràmetres", + "Hosted signaling server added" : "S'ha afegit un servidor de senyalització allotjat", + "The hosted signaling server is now configured and will be used." : "El servidor de senyalització allotjat ja està configurat i s'utilitzarà.", + "Hosted signaling server removed" : "S'ha eliminat el servidor de senyalització allotjat", + "The hosted signaling server was removed and will not be used anymore." : "El servidor de senyalització allotjat s'ha suprimit i ja no s'utilitzarà.", + "Hosted signaling server changed" : "S'ha canviat el servidor de senyalització allotjat", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "El compte del servidor de senyalització allotjat ha canviat l'estat de \"{oldstatus}\" a \"{newstatus}\".", + "pending" : "pendent", + "active" : "actiu", + "expired" : "caducat", + "blocked" : "bloquejat", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificat de {host} caduca d'aquí a {days} dies", + "The certificate of {host} expired" : "El certificat de {host} ha caducat", + "Contact via Talk" : "Contacta mitjançant Talk", + "Open Talk" : "Obre Talk", + "Default" : "Per defecte", + "Presentation" : "Presentació", + "Conversations" : "Converses", + "Messages in current conversation" : "Missatges de la conversa actual", + "{user}" : "{user}", + "Messages" : "Missatges", + "{user} in {conversation}" : "{user} a {conversation}", + "Messages in other conversations" : "Missatges en altres converses", + "One-to-one rooms always need to show the other users avatar" : "Les sales d'un a un sempre han de mostrar l'avatar dels altres usuaris", + "Invalid emoji character" : "Caràcter emoticona no vàlid", + "Invalid background color" : "Color de fons no vàlid", + "Avatar image is not square" : "La imatge de l'avatar no és quadrada", + "Room {number}" : "Sala {number}", + "Other" : "Altres", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No s'ha pogut sol·licitar la prova perquè el servidor de prova no és accessible. Torneu-ho a provar més tard.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hi ha un problema amb l'autenticació d'aquesta instància. Potser no es pot arribar des de l'exterior per verificar l’URL.", + "Something unexpected happened." : "Ha passat una cosa inesperada.", + "The URL is invalid." : "L'URL és invàlid.", + "An HTTPS URL is required." : "Cal un URL HTTPS.", + "The email address is invalid." : "L'adreça de correu electrònic no és vàlida.", + "The language is invalid." : "La llengua no és vàlida.", + "The country is invalid." : "El país no és vàlid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hi ha un problema amb la sol·licitud de la prova. Si us plau, comproveu els registres per obtenir més informació.", + "Too many requests are send from your servers address. Please try again later." : "S'envien massa sol·licituds des d'adreces dels seus servidors. Torneu-ho a provar més tard.", + "There is already a trial registered for this Nextcloud instance." : "Ja hi ha una prova registrada per a aquesta instància Nextcloud.", + "Something unexpected happened. Please try again later." : "Ha passat una cosa inesperada. Torneu-ho a provar més tard.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No s'ha pogut sol·licitar la prova perquè el servidor de prova s'ha comportat malament. Torneu-ho a provar més tard.", + "Trial requested but failed to get account information. Please check back later." : "S'ha sol·licitat la prova, però no s'ha pogut obtenir informació del compte. Torneu a comprovar-ho més tard.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hi ha un problema amb l'autenticació d'aquesta sol·licitud. Potser no es pot arribar des de l'exterior per verificar l'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No s'ha pogut obtenir la informació del compte perquè el servidor de prova s'ha comportat malament. Torneu a comprovar-ho més tard.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hi ha un problema amb l'obtenció de la informació del compte. Si us plau, comproveu els registres per obtenir més informació.", + "There is no such account registered." : "No hi ha aquest compte registrat.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No s'ha pogut obtenir la informació del compte perquè el servidor de prova no és accessible. Torneu a comprovar-ho més tard.", + "Deleting the hosted signaling server account failed. Please check back later." : "No s'ha pogut suprimir el compte del servidor de senyalització allotjat. Torneu a comprovar-ho més tard.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No s'ha pogut suprimir el compte perquè el servidor de prova s'ha comportat malament. Torneu a comprovar-ho més tard.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hi ha un problema en suprimir el compte. Si us plau, comproveu els registres per obtenir més informació.", + "Too many requests are sent from your servers address. Please try again later." : "S'envien massa sol·licituds des de l'adreça del vostre servidor. Siusplau, torneu-ho a provar més tard.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No s'ha pogut suprimir el compte perquè el servidor de prova no és accessible. Torneu a comprovar-ho més tard.", + "Note to self" : "Nota per a un mateix", + "A place for your private notes, thoughts and ideas" : "Un lloc per a les teves notes, pensaments i idees privades", + "Transcript is AI generated and may contain mistakes" : "La transcripció es genera amb intel·ligència artificial i pot contenir errors", + "Summary is AI generated and may contain mistakes" : "El resum es genera amb IA i pot contenir errors", + "Let's get started!" : "Comencem!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Converses** és una plataforma de comunicació segura i autoallotjada que s'integra perfectament amb l'ecosistema Nextcloud.\n\n#### Característiques clau de Nextcloud Converses:\n\n* Xateja i missatgeria en xats privats i de grup\n* Trucades de veu i videotrucades\n* Compartició de fitxers i integració amb altres aplicacions de Nextcloud\n* Configuració de conversa personalitzable, moderació i controls de privadesa\n* Web, escriptori i mòbil (iOS i Android)\n* Comunicació privada i segura\n\n Més informació a la [documentació de l'usuari](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Benvingut a Nextcloud Converses\n\nNextcloud Converses és una aplicació de missatgeria privada i potent que s'integra amb Nextcloud. Xateja en converses privades o en grup, col·labora mitjançant trucades de veu i videotrucades, organitza seminaris web i esdeveniments, personalitza les teves converses i molt més.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formateu textos per crear missatges rics\n\nA Nextcloud Converses, podeu utilitzar la sintaxi de Markdown per formatar els vostres missatges. Per exemple, apliqueu el format **negreta** o *cursiva*, o bé \"ressalteu textos com a codi\". Fins i tot podeu crear taules i afegir encapçalaments al vostre text.\n\nNecessites corregir una errada ortogràfica o canviar el format? Editeu el vostre missatge fent clic a \"Edita missatge\" al menú de missatges.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Afegeix fitxers adjunts i enllaços\n\nAdjunteu fitxers del vostre Nextcloud Hub mitjançant el botó \"+\". Comparteix elements de Files i de diverses aplicacions de Nextcloud. Algunes aplicacions fins i tot admeten ginys interactius, per exemple, l'aplicació Text.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Pots respondre missatges, reenviar-los a altres xats i persones, o copiar el contingut del missatge.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Fes més amb Smart Picker\n\nSimplement escriviu \"/\" o aneu al menú \"+\" per obrir el selector intel·ligent on podeu adjuntar diversos continguts als vostres missatges. Podeu configurar el selector intel·ligent per poder afegir elements d'aplicacions Nextcloud, GIF, ubicacions de mapes, contingut generat per IA i molt més.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestiona la configuració de la conversa\n\nAl menú de converses, podeu accedir a diverses configuracions per gestionar les vostres converses, com ara:\n* Edita la informació de la conversa\n* Gestiona les notificacions\n* Aplicar nombroses regles de moderació\n* Configura l'accés i la seguretat\n* Habilita els bots\n* i més!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirats Àrabs Units", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua i Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albània", + "Armenia" : "Armènia", + "Angola" : "Angola", + "Antarctica" : "Antàrtida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Nord-americana", + "Austria" : "Àustria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Illes Åland", + "Azerbaijan" : "Azerbaitjan", + "Bosnia and Herzegovina" : "Bòsnia i Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bèlgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgària", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermudes", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolívia, estat plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius i Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahames", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorússia", + "Belize" : "Belize", + "Canada" : "Canadà", + "Cocos (Keeling) Islands" : "Illes Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democràtica del", + "Central African Republic" : "República Centreafricana", + "Congo" : "Congo", + "Switzerland" : "Suïssa", + "Côte d'Ivoire" : "Costa d'Ivori", + "Cook Islands" : "Illes Cook", + "Chile" : "Xile", + "Cameroon" : "Camerun", + "China" : "Xina", + "Colombia" : "Colòmbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Christmas", + "Cyprus" : "Xipre", + "Czechia" : "Txèquia", + "Germany" : "Alemanya", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algèria", + "Ecuador" : "Equador", + "Estonia" : "Estònia", + "Egypt" : "Egipte", + "Western Sahara" : "Sàhara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "Espanya", + "Ethiopia" : "Etiòpia", + "Finland" : "Finlàndia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Illes Malvines (Falkland)", + "Micronesia, Federated States of" : "Micronèsia, Estats Federats de la", + "Faroe Islands" : "Illes Fèroe", + "France" : "França", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regne Unit de Gran Bretanya i Irlanda del nord", + "Grenada" : "Grenada", + "Georgia" : "Geòrgia", + "French Guiana" : "Guaiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlàndia", + "Gambia" : "Gàmbia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Equatorial", + "Greece" : "Grècia", + "South Georgia and the South Sandwich Islands" : "Illes Geòrgia del Sud i Sandwich del Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illes Heard i McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croàcia", + "Haiti" : "Haití", + "Hungary" : "Hongria", + "Indonesia" : "Indonèsia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Territori Britànic de l'Oceà Índic", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Islàndia", + "Italy" : "Itàlia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordània", + "Japan" : "Japó", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirguizistan", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "Saint Kitts i Nevis", + "Korea, Democratic People's Republic of" : "Corea, República Popular Democràtica de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Illes Caiman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "República Democràtica Popular Lao", + "Lebanon" : "Líban", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituània", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letònia", + "Libya" : "Líbia", + "Morocco" : "Marroc", + "Monaco" : "Mònaco", + "Moldova, Republic of" : "Moldàvia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sant Martí (part francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illes Marshall", + "North Macedonia" : "Macedònia del Nord", + "Mali" : "Mali", + "Myanmar" : "Birmània", + "Mongolia" : "Mongòlia", + "Macao" : "Macau", + "Northern Mariana Islands" : "Illes Marianes del Nord", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Illa de Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurici", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mèxic", + "Malaysia" : "Malàisia", + "Mozambique" : "Moçambic", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledònia", + "Niger" : "Níger", + "Norfolk Island" : "Illa Norfolk", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Països Baixos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Zelanda", + "Oman" : "Oman", + "Panama" : "Panamà", + "Peru" : "Perú", + "French Polynesia" : "Polinèsia Francesa", + "Papua New Guinea" : "Papua Nova Guinea", + "Philippines" : "Filipines", + "Pakistan" : "Pakistan", + "Poland" : "Polònia", + "Saint Pierre and Miquelon" : "Sant Pere i Miquelon", + "Pitcairn" : "Illes Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Estat de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Reunió", + "Romania" : "Romania", + "Serbia" : "Sèrbia", + "Russian Federation" : "Rússia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Aràbia Saudita", + "Solomon Islands" : "Illes Salomó", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Suècia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascensió i Tristan da Cunha", + "Slovenia" : "Eslovènia", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Eslovàquia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somàlia", + "Suriname" : "Surinam", + "South Sudan" : "Sudan del Sud", + "Sao Tome and Principe" : "São Tomé i Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (part holandesa)", + "Syrian Arab Republic" : "República Àrab Siriana", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Illes Turks i Caicos", + "Chad" : "Txad", + "French Southern Territories" : "Territoris Francesos del Sud", + "Togo" : "Togo", + "Thailand" : "Tailàndia", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunísia", + "Tonga" : "Tonga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinitat i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzània, República Unida de", + "Ukraine" : "Ucraïna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Illes Perifèriques Menors dels EUA", + "United States of America" : "Estats Units d'Amèrica", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Santa Seu", + "Saint Vincent and the Grenadines" : "Saint Vincent i les Grenadines", + "Venezuela, Bolivarian Republic of" : "Veneçuela, República Bolivariana de", + "Virgin Islands, British" : "Illes Verges britàniques", + "Virgin Islands, U.S." : "Illes Verges, EUA.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sud-àfrica", + "Zambia" : "Zàmbia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Desactiva el desenfocament de fons", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "No s'ha pogut comprovar el suport de càrrega de WASM. Comproveu manualment si el vostre servidor web ofereix fitxers `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "El vostre servidor web no està configurat correctament per lliurar fitxers `.wasm`. Això sol ser un problema amb la configuració de Nginx. Per al desenfocament de fons, necessita un ajust per oferir també fitxers `.wasm`. Compareu la vostra configuració de Nginx amb la configuració recomanada a la nostra documentació.", + "Talk configuration values" : "Valors de configuració de Converses", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forçar la durada d'una trucada només s'admet amb el cron del sistema. Si us plau, activeu el cron del sistema o elimineu la configuració `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Els valors petits de \"max_call_duration\" (actualment establerts en %d) no es poden aplicar a causa de limitacions tècniques. El treball en segon pla només s'executa cada 5 minuts, així que utilitzeu-lo sota el vostre risc.", + "Federation" : "Federació", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "És molt recomanable configurar \"memcache.locking\" quan la Federació de Converses estigui habilitada.", + "High-performance backend" : "Rerefons d'alt rendiment", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No s'ha configurat el rerefons d'alt rendiment: l'execució de Nextcloud Converses sense el rerefons d'alt rendiment només s'escala per a trucades molt petites (màx. 2-3 participants). Configureu el rerefons d'alt rendiment per garantir que les trucades amb diversos participants funcionin perfectament.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'execució del mode de rerefons d'alt rendiment \"conversation_cluster\" està obsolet i ja no s'admetrà a la propera versió. El rerefons d'alt rendiment admet actualment un clustering real que s'hauria d'utilitzar.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La definició de diversos rerefons d'alt rendiment està obsoleta i ja no s'admetrà a la propera versió. En lloc d'això, s'ha de configurar un equilibrador de càrrega juntament amb servidors de senyalització agrupats i configurar-lo a la configuració de Converses.", + "High-performance backend not configured correctly" : "El rerefons d'alt rendiment no s'ha configurat correctament", + "Error: Cannot connect to server" : "Error: no es pot connectar al servidor", + "Error: Server did not respond with proper JSON" : "Error: el servidor no ha respost amb el JSON adequat", + "Error: Certificate expired" : "Error: el certificat ha caducat", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: els temps del sistema del servidor Nextcloud i el servidor de fons d'alt rendiment no estan sincronitzats. Assegureu-vos que tots dos servidors estiguin connectats a un servidor d'hora o sincronitzeu manualment la seva hora.", + "Could not get version" : "No s'ha pogut obtenir la versió", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: versió en execució: {version}; El servidor s'ha d'actualitzar per ser compatible amb aquesta versió de Talk", + "Error: Server responded with: {error}" : "Error: el servidor ha respost amb: {error}", + "Error: Unknown error occurred" : "Error: s'ha produït un error desconegut", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Avís: Versió en execució: {version}; El servidor no admet totes les funcions d'aquesta versió de Converses, les funcions que falten: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "És molt recomanable configurar una memòria cau quan executeu Nextcloud Converses amb un rerefons d'alt rendiment.", + "Client Push" : "Client Push", + "Recording backend" : "Rerefons de gravació", + "Using the recording backend requires a High-performance backend." : "L'ús del rerefons de gravació requereix un rerefons d'alt rendiment.", + "No recording backend configured" : "No s'ha configurat cap rerefons de gravació", + "SIP configuration" : "Configuració SIP", + "Using the SIP functionality requires a High-performance backend." : "L'ús de la funcionalitat SIP requereix un rerefons d'alt rendiment.", + "No SIP backend configured" : "No s'ha configurat cap rerefons SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Data no vàlida, el format de la data ha de ser YYYY-MM-DD", + "Conversation not found" : "No s'ha trobat la conversa", + "Path is already shared with this conversation" : "El camí ja s'ha compartit amb aquesta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Xat, àudio i vídeo-conferència emprant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Xat, vídeo i àudio-conferència mitjançant WebRTC\n\n* 💬 **Xat** Nextcloud Converses inclou un xat de text senzill, que us permet compartir o carregar fitxers des de la vostra aplicació Nextcloud Fitxers o dispositiu local i esmentar altres participants.\n* 👥 **Trucades privades, de grup, públiques i protegides amb contrasenya!** Convida algú, un grup sencer o envia un enllaç públic per convidar a una trucada.\n* 🌐 **Xats federats** Xateja amb altres usuaris de Nextcloud als seus servidors\n* 💻 **Compartició de pantalla!** Comparteix la teva pantalla amb els participants de la trucada.\n* 🚀 **Integració amb altres aplicacions de Nextcloud** com Fitxers, Calendari, Estat de l'usuari, Tauler, Flow, Maps, Selector intel·ligent, Contactes, Targetes i molts més.\n* 🌉 **Sincronització amb altres solucions de xat** Amb [Matterbridge](https://github.com/42wim/matterbridge/) integrat a Converses, podeu sincronitzar fàcilment moltes altres solucions de xat amb Nextcloud Converses i viceversa.", + "Leave call" : "Abandona la trucada", + "Navigating away from the page will leave the call in {conversation}" : "La navegació fora de la pàgina deixarà la trucada a {conversation}", + "Stay in call" : "Estigues a la trucada", + "Discuss this file" : "Discuteix aquest fitxer", + "Share this file with others to discuss it" : "Comparteix aquest fitxer amb altres persones per discutir-ho", + "Share this file" : "Comparteix aquest fitxer", + "Join conversation" : "Uneix-te a la conversa", + "This conversation is password-protected." : "Aquesta conversa està protegida amb contrasenya.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hem detectat diversos intents de contrasenya no vàlids des de la teva IP. Per tant, el vostre proper intent s'accelera fins a 30 segons.", + "The password is wrong. Try again." : "La contrasenya no és correcta. Torneu-ho a provar.", + "Password" : "Contrasenya", + "Submit" : "Envia", + "Error requesting the password." : "No s'ha pogut sol·licitar la contrasenya.", + "Request password" : "Sol·licita contrasenya", + "This conversation has ended" : "Aquesta conversa s'ha acabat", + "Error occurred when joining the conversation" : "S'ha produït un error en unir-se a la conversa", + "Close Talk sidebar" : "Tanca la barra lateral de Talk", + "Open Talk sidebar" : "Obriu la barra lateral de Talk", + "Everyone" : "Tothom", + "Users and moderators" : "Usuaris i moderadors", + "Moderators only" : "Només els moderadors", + "Disable calls" : "Inhabilita les trucades", + "Save changes" : "Desa els canvis", + "Saving …" : "S'està desant …", + "Saved!" : "Desat!", + "Limit to groups" : "Limita a grups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quan al menys s'ha seleccionat un grup, només les persones dels grups llistats poden participar a les converses.", + "Guests can still join public conversations." : "Els convidats però poden sumar-se a les converses públiques.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Els usuaris que ja no puguin utilitzar Talk continuaran apareixent com a participants de les seves converses anteriors i també es conservaran els seus missatges de xat.", + "Limit using Talk" : "Limita l'ús de Talk", + "Limit creating a public and group conversation" : "Limitar la creació d'una conversa pública i de grup", + "Limit creating conversations" : "Limita la creació de converses", + "Limit starting a call" : "Limitar l'inici d'una trucada", + "Limit starting calls" : "Limitar l’iniciació de trucades", + "When a call has started, everyone with access to the conversation can join the call." : "Quan ha començat una trucada, tothom que tingui accés a la conversa pot afegir-s'hi.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Els robots següents estan instal·lats en aquest servidor. A la documentació podeu trobar detalls sobre com {linkstart1}crear el vostre propi robot{linkend} o una {linkstart2}llista de robots{linkend} per habilitar-los al vostre servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Els robots següents estan instal·lats en aquest servidor. A la documentació podeu trobar detalls sobre com {linkstart1}crear el vostre propi robot{linkend} o una {linkstart2}llista de robots{linkend} per habilitar-los al vostre servidor.", + "Description is not provided" : "No es proporciona la descripció", + "Locked for moderators" : "Bloquejat per als moderadors", + "Enabled" : "Habilitat", + "Disabled" : "Inhabilitat", + "Bots settings" : "Paràmetres dels bots", + "State" : "Estat", + "Name" : "Nom", + "Last error" : "Últim error", + "Total errors count" : "Nombre d’errors totals", + "Find more bots" : "Trobeu més robots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Els servidors de confiança es poden configurar a la {linkstart}pàgina de configuració per compartir{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Els xats i les trucades federades ja funcionen. La gestió dels fitxers adjunts arribarà en una versió futura.", + "Enable Federation in Talk app" : "Activa la federació a l'aplicació Converses", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permet que els usuaris siguin convidats a converses federades", + "Allow users to invite federated users into conversation" : "Permet als usuaris convidar usuaris federats a una conversa", + "Only allow to federate with trusted servers" : "Només permet federar-se amb servidors de confiança", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quan se selecciona almenys un grup, només les persones dels grups llistats poden convidar usuaris federats a converses.", + "Groups allowed to invite federated users" : "Els grups poden convidar usuaris federats", + "Select groups …" : "Selecció de grups …", + "All messages" : "Tots els missatges", + "@-mentions only" : "només mencions amb @", + "Off" : "Apagat", + "General settings" : "Paràmetres generals", + "Default notification settings" : "Paràmetres de notificacions per defecte", + "Default group notification" : "Notificació de grup per defecte", + "Default group notification for new groups" : "Notificació de grup per defecte per a grups nous", + "Integration into other apps" : "Integració en altres aplicacions", + "Allow conversations on files" : "Permet converses en fitxers", + "Allow conversations on public shares for files" : "Permetre converses en comparticions públiques per a fitxers", + "End-to-end encrypted calls" : "Trucades xifrades d'extrem a extrem", + "Enable encryption" : "Habilita el xifratge", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Les trucades xifrades d'extrem a extrem amb un pont SIP configurat requereixen una versió més recent del rerefons d'alt rendiment i del pont SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Els clients mòbils no admeten trucades xifrades d'extrem a extrem de moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En fer clic al botó que hi ha a sobre de la informació del formulari s'envia als servidors de Struktur AG. Podeu trobar més informació a {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendent", + "Error" : "Error", + "Blocked" : "Blocat", + "Active" : "Actiu", + "Expired" : "Caducat", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "No s'ha pogut sol·licitar la prova. Torneu-ho a provar més tard.", + "The account could not be deleted. Please try again later." : "No s'ha pogut suprimir el compte. Torneu-ho a provar més tard.", + "Hosted High-performance backend" : "Servidor rerefons d'alt rendiment", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "El nostre soci Struktur AG ofereix un servei on es pot sol·licitar un servidor de senyalització allotjat. Per a això només has d'omplir el següent formulari i el teu Nextcloud ho sol·licitarà. Un cop configurat el servidor, les credencials s'ompliran automàticament. Això sobreescriurà els paràmetres del servidor de senyalització existent.", + "URL of this Nextcloud instance" : "URL d'aquesta instància de Nextcloud", + "Full name of the user requesting the trial" : "Nom complet de l'usuari que sol·licita la prova", + "Email of the user" : "Enviar correu electrònic al nou usuari", + "Language" : "Llengua", + "Country" : "País", + "Request signaling server trial" : "Sol·licita la prova del servidor de senyalització", + "You can see the current status of your hosted signaling server in the following table." : "Podeu veure l'estat actual del servidor de senyalització allotjat a la taula següent.", + "Status" : "Estat", + "Created at" : "Creat a", + "Expires at" : "Venciment el", + "Limits" : "Límits", + "Yes" : "Sí", + "No" : "No", + "Delete the signaling server account" : "Suprimeix el compte del servidor de senyalització", + "_%n user_::_%n users_" : ["%n usuari","%n usuaris"], + "Installed version: {version}" : "Versió instal·lada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Podeu instal·lar Matterbridge per enllaçar Nextcloud Talk amb altres serveis, visiteu la seva {linkstart1}pàgina de GitHub{linkend} per obtenir més informació. Descarregar i instal·lar l'aplicació pot trigar una estona. En cas que s'acabi, instal·leu-lo manualment des de la {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "El binari de Matterbridge té permisos incorrectes. Assegureu-vos que el fitxer binari Matterbridge és propietat de l'usuari correcte i es pot executar. Es pot trobar a \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "No s'ha trobat el binari de Matterbridge o no s'ha pogut executar.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "També podeu establir el camí cap al binari de Matterbridge manualment a través de la configuració. Comproveu la {linkstart}documentació d'integració de Matterbridge{linkend} per obtenir més informació.", + "Downloading …" : "S'està baixant …", + "Install Talk Matterbridge" : "Instal·la Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "S'ha produït un error en instal·lar l'aplicació Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "S'ha produït un error en instal·lar el Parla Matterbridge. Si us plau, instal·leu-lo manualment", + "Failed to execute Matterbridge binary." : "No s'ha pogut executar el binari de Matterbridge.", + "Matterbridge integration" : "Integració de Matterbridge", + "Enable Matterbridge integration" : "Habilita la integració de Matterbridge", + "Status: Checking connection" : "Estat: Comprovant la connexió", + "OK: Running version: {version}" : "D'acord: versió en execució: {version}", + "Error: Server seems to be a Signaling server" : "Error: el servidor sembla ser un servidor de senyalització", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: els temps del sistema del servidor Nextcloud i el servidor de fons de gravació no estan sincronitzats. Assegureu-vos que tots dos servidors estiguin connectats a un servidor d'hora o sincronitzeu manualment la seva hora.", + "Recording backend URL" : "Enregistrament de l'URL del rerefons", + "Validate SSL certificate" : "Validar certificat SSL", + "Delete this server" : "Suprimeix aquest servidor", + "Test this server" : "Prova aquest servidor", + "Disabled for all calls" : "Desactivat per a totes les trucades", + "Enabled for all calls" : "Habilitat per a totes les trucades", + "Configurable on conversation level by moderators" : "Configurable a nivell de conversa pels moderadors", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Els paràmetres de PHP \"upload_max_filesize\" o \"post_max_size\" només permetrà carregar fitxers fins a {maxUpload}.", + "Recording backend settings saved" : "S'ha desat el paràmetre del rerefons de gravació", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Els moderadors podran habilitar el consentiment a nivell de conversa. El consentiment per ser gravat serà necessari per a cada participant abans d'unir-se a cada trucada d'aquesta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "El consentiment per ser gravat serà necessari per a cada participant abans d'unir-se a cada trucada.", + "The consent to be recorded is not required." : "No cal el consentiment per ser gravat.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuració del rerefons de gravació només és possible amb un rerefons d'alt rendiment.", + "Add a new recording backend server" : "Afegiu un nou servidor de rerefons de gravació", + "Shared secret" : "Clau secreta compartida", + "Recording consent" : "Consentiment de gravació", + "Recording transcription" : "Enregistrament de la transcripció", + "Automatically transcribe call recordings with a transcription provider" : "Transcriu automàticament els enregistraments de trucades amb un proveïdor de transcripcions", + "Automatically summarize call recordings with transcription and summary providers" : "Resumeix automàticament els enregistraments de trucades amb proveïdors de transcripció i resum", + "SIP configuration saved!" : "Configuració SIP desada!", + "SIP configuration is only possible with a High-performance backend." : "La configuració SIP només és possible amb un rerefons d'alt rendiment.", + "Enable SIP Dial-out option" : "Habilita l'opció de marcatge SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "El servidor de senyalització s'ha d'actualitzar a la funció de marcatge SIP compatible.", + "Restrict SIP configuration" : "Restringeix la configuració SIP", + "Enable SIP configuration" : "Habilita la configuració SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Només els usuaris dels grups següents poden habilitar SIP a les converses que moderin", + "Phone number (Country)" : "Número de telèfon (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Aquesta informació s'envia als correus electrònics d'invitació i es mostra a la barra lateral a tots els participants.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL del rerefons de Converses", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Funcions disponibles", + "Error: Websocket connection failed. Check browser console" : "Error: la connexió de Websocket ha fallat. Comproveu la consola del navegador", + "High-performance backend URL" : "URL del rerefons d'alt rendiment", + "Missing High-performance backend warning hidden" : "Falta l'advertiment de rerefons d'alt rendiment amagat", + "High-performance backend settings saved" : "S'ha desat els paràmetres del rerefons d'alt rendiment", + "Nextcloud Talk setup not complete" : "La configuració de Nextcloud Converses no s'ha completat", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tingueu en compte que a les trucades amb més de 2 participants sense el rerefons d'alt rendiment, és probable que els participants experimentin problemes de connectivitat i causen una càrrega elevada als dispositius participants.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instal·leu el rerefons d'alt rendiment per garantir que les trucades amb diversos participants funcionin perfectament.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Guia d'instal·lació ràpida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "El rerefons d'alt rendiment és necessari per a trucades i converses amb diversos participants. Sense el rerefons, tots els participants han de penjar el seu propi vídeo individualment per a cada altre participant, cosa que probablement causarà problemes de connectivitat i una càrrega elevada als dispositius participants.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "És molt recomanable configurar una memòria cau distribuïda quan utilitzeu Nextcloud Talk amb un rerefons d'alt rendiment.", + "Add High-performance backend server" : "Afegiu un servidor rerefons d'alt rendiment", + "Warn about connectivity issues in calls with more than 2 participants" : "Adverteix sobre problemes de connectivitat a les trucades amb més de 2 participants", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "L'adreça del servidor no és vàlida", + "STUN settings saved" : "S'han desat els paràmetres de STUN", + "STUN servers" : "Servidors STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "S'utilitza un servidor STUN per determinar l'adreça IP pública dels participants que siguin darrera d'un router.", + "Add a new STUN server" : "Afegeix un nou servidor STUN", + "{schema} scheme must be used with a domain" : "L'esquema {schema} s'ha d'utilitzar amb un domini", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "Només {option}", + "OK: Successful ICE candidates returned by the TURN server" : "D'acord: Els candidats de l'ICE reeixits retornats pel servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Error: no hi ha candidats de l'ICE que funcionin retornats pel servidor TURN", + "Testing whether the TURN server returns ICE candidates" : "S'està provant si el servidor TURN retorna els candidats de l'ICE", + "TURN server schemes" : "Esquemes del servidor TURN", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Paràmetre \"secret\" del servidor TURN", + "TURN server protocols" : "Protocols del servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "S'utilitza un servidor TURN per enviar el trànsit dels participants darrere d'un tallafoc. Si els participants individuals no poden connectar-se amb altres, probablement es requereixi un servidor TURN. Consulteu {linkstart}aquesta documentació{linkend} per obtenir instruccions de configuració.", + "TURN settings saved" : "S'han desat els paràmetres de TURN", + "TURN servers" : "Servidors TURN", + "Add a new TURN server" : "Afegeix un nou servidor TURN", + "Failed" : "Ha fallat", + "OK" : "D'acord", + "Checking …" : "Comprovant …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Error: WebAssembly està desactivat o no és compatible amb aquest navegador. Si us plau, habiliteu WebAssembly o utilitzeu un navegador amb suport per fer la comprovació.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Error: el servidor web no ha retornat correctament els fitxers \".wasm\" i \".tflite\". Consulteu la secció \"Requisits del sistema\" a la documentació de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "D'acord: el servidor web ha retornat correctament els fitxers \".wasm\" i \".tflite\".", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Sembla que la configuració de PHP i Apache no és compatible. Tingueu en compte que PHP només es pot utilitzar amb el mòdul MPM_PREFORK i PHP-FPM només es pot utilitzar amb el mòdul MPM_EVENT.", + "Web server setup checks" : "Comprovacions de configuració del servidor web", + "Files required for virtual background can be loaded" : "Es poden carregar els fitxers necessaris per al fons virtual", + "Federated user" : "Usuari federat", + "Assign participants to rooms" : "Assigna els participants a les sales", + "Configure breakout rooms" : "Configura les sales de treball", + "Number of breakout rooms" : "Nombre de sales de treball", + "You can create from 1 to 20 breakout rooms." : "Pots crear d'1 a 20 sales de treball.", + "Assignment method" : "Mètode d'assignació", + "Automatically assign participants" : "Assigna participants automàticament", + "Manually assign participants" : "Assigna els participants manualment", + "Allow participants to choose" : "Permet als participants triar", + "Create rooms" : "Crea sales", + "Confirm" : "Confirma", + "Create breakout rooms" : "Crea sales de treball", + "Reset" : "Restableix", + "Delete breakout rooms" : "Suprimeix les sales de treball", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Es perdran les sales de treball i els paràmetres actuals", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participants no assignats", + "Back" : "Enrere", + "Assign" : "Assigna", + "Add participant \"{user}\"" : "Afegeix el participant \"{user}\"", + "Now" : "Ara", + "Invalid calendar selected" : "S'ha seleccionat un calendari no vàlid", + "Invalid start time selected" : "L'hora d'inici seleccionada no és vàlida", + "Invalid end time selected" : "L'hora de finalització seleccionada no és vàlida", + "Unknown error occurred" : "S'ha produït un error desconegut", + "Sending no invitations" : "No s'envia cap invitació", + "{participant0} will receive an invitation" : "{participant0} rebrà una invitació", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} rebran invitacions", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i %n més rebran invitacions","{participant0}, {participant1} i %n més rebran invitacions"], + "Meeting created" : "Reunió creada", + "Upcoming meetings" : "Properes reunions", + "Loading …" : "S'està carregant…", + "Schedule a meeting" : "Programar una reunió", + "Meeting title" : "Títol de la reunió", + "From" : "De", + "To" : "A", + "Calendar" : "Calendari", + "Attendees" : "Assistents", + "Add attendees" : "Afegeix assistents", + "Save" : "Desa", + "Search participants" : "Cercar participants", + "No results" : "No hi ha resultats", + "Done" : "Desat", + "Raise hand" : "Aixeca la mà", + "Raise hand (R)" : "Aixeca la mà (R)", + "Lower hand" : "Baixa mà", + "Lower hand (R)" : "Baixa mà (R)", + "Exit full screen (F)" : "Sortir de la pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Visualització de qui parla", + "Grid view" : "Vista de graella", + "Recording consent is required" : "Cal el consentiment de gravació", + "This conversation is read-only" : "Aquesta conversa és només de lectura", + "Conversation not found or not joined" : "No s'ha trobat la conversa o no s'ha unit", + "Lobby is still active and you're not a moderator" : "El vestíbul encara està actiu i no ets moderador", + "Connection failed" : "Ha fallat la connexió", + "Reload" : "Recarrega", + "{nickName} raised their hand." : "{nickName} va aixecar la mà.", + "A participant raised their hand." : "Un participant va aixecar la mà.", + "Collapse stripe" : "Col·lapse la franja", + "Expand stripe" : "Ampliar la franja", + "Previous page of videos" : "Pàgina anterior de vídeos", + "Next page of videos" : "Següent pàgina de vídeos", + "Connecting …" : "S'està connectant …", + "Calling …" : "S'està trucant …", + "Waiting for {user} to join the call" : "S'està esperant que {user} s'uneixi a la trucada", + "Waiting for others to join the call …" : "Esperant a la resta per realitzar la trucada …", + "You can invite others in the participant tab of the sidebar" : "Podeu convidar més gent des de la pestanya Participants al panell lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podeu convidar a més gent des de la pestanya Participants al panell lateral o compartint aquest enllaç a tercers!", + "Share this link to invite others!" : "Compartiu aquest enllaç per convidar a més gent!", + "Copy link" : "Copia l'enllaç", + "You are not allowed to enable audio" : "No teniu permís per activar l'àudio", + "No audio. Click to select device" : "Sense àudio. Feu clic per seleccionar el dispositiu", + "Mute audio" : "Silencia l'àudio", + "Mute audio (M)" : "Silencia l'àudio (m)", + "Unmute audio" : "Activa l'àudio", + "Unmute audio (M)" : "Re-activa l'àudio (m)", + "None" : "Cap", + "Access to camera was denied" : "S'ha denegat l'accés a la càmera", + "Error while accessing camera: It is likely in use by another program" : "Error en accedir a la càmera: és probable que l'utilitzi un altre programa", + "Error while accessing camera" : "S'ha produït un error en accedir a la càmera", + "You have been muted by a moderator" : "Vostè ha estat silenciat per un moderador", + "Hide presenter video" : "Amaga el vídeo del presentador", + "You are not allowed to enable video" : "No tens permís per activar el vídeo", + "No video. Click to select device" : "Cap vídeo. Feu clic per seleccionar el dispositiu", + "Disable video" : "Inhabilita el vídeo", + "Disable video (V)" : "Inhabilita el vídeo (v)", + "Enable video" : "Habilita el vídeo", + "Enable video (V)" : "Habilita el vídeo (v)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activa el vídeo. La connexió s'interromprà breument en habilitar el vídeo per primera vegada", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilita el vídeo (V) - La vostra connexió s'interromprà quan s'activeu el vídeo per primera vegada", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activa el vídeo. La connexió s'interromprà breument en habilitar el vídeo per primera vegada", + "Show presenter" : "Mostra presentador", + "You" : "Tu", + "Mute" : "Silencia", + "Muted" : "Silenciat", + "Show screen" : "Mostra la pantalla", + "Stop following" : "Deixa de seguir", + "Connection could not be established …" : "No s'ha pogut establir la connexió …", + "Connection was lost and could not be re-established …" : "La connexió es va perdre i no es va poder restablir …", + "Connection could not be established. Trying again …" : "No s'ha pogut establir la connexió. Tornant a provar …", + "Connection lost. Trying to reconnect …" : "Connexió perduda. S'està intentant tornar a connectar …", + "Connection problems …" : "Problemes de connexió …", + "Collapse" : "Replega", + "Expand" : "Expandeix", + "You need to be logged in to upload files" : "Heu d'iniciar la sessió per pujar fitxers", + "Drop your files to upload" : "Deixeu anar els fitxers per pujar-los", + "Conversation messages" : "Missatges de conversa", + "Scroll to bottom" : "Desplaça al final", + "Post message" : "Publica el missatge", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Preferit", + "Banned users" : "Usuaris prohibits", + "Manage the list of banned users in this conversation." : "Gestioneu la llista d'usuaris prohibits en aquesta conversa.", + "Manage bans" : "Gestionar les prohibicions", + "No banned users" : "No hi ha usuaris prohibits", + "Banned by:" : "Prohibit per:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Amaga els detalls", + "Show details" : "Mostra els detalls", + "Unban" : "Anul·la la prohibició", + "Error while updating conversation name" : "S'ha produït un error en actualitzar el nom de la conversa", + "Error while updating conversation description" : "S'ha produït un error en actualitzar la descripció de la conversa", + "Enter a name for this conversation" : "Introduïu un nom per a la nova conversa", + "Edit conversation name" : "Edició del nom de la conversa", + "Edit conversation description" : "Edició de la descripció de la conversa", + "Enter a description for this conversation" : "Introdueix una descripció per a aquesta conversa", + "Picture" : "Imatge", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Els robots següents es poden habilitar en aquesta conversa. Poseu-vos en contacte amb la vostra administració per instal·lar més robots en aquest servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No hi ha cap robot instal·lat en aquest servidor. Poseu-vos en contacte amb la vostra administració per instal·lar robots en aquest servidor.", + "Disable" : "Inhabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Sales de treball", + "Manage breakout rooms" : "Gestiona les sales de treball", + "Set up breakout rooms for this conversation" : "Configura sales de treball per a aquesta conversa", + "Please select a valid PNG or JPG file" : "Seleccioneu un fitxer PNG o JPG vàlid", + "Choose your conversation picture" : "Tria la teva imatge de conversa", + "Choose" : "Tria", + "Error setting conversation picture" : "S'ha produït un error en establir la imatge de la conversa", + "Could not set the conversation picture: {error}" : "No s'ha pogut configurar la imatge de la conversa: {error}", + "Error cropping conversation picture" : "S'ha produït un error en retallar la imatge de la conversa", + "Error removing conversation picture" : "S'ha produït un error en eliminar la imatge de la conversa", + "Set emoji as conversation picture" : "Estableix l'emoticona com a imatge de conversa", + "Set background color for conversation picture" : "Estableix el color de fons per a la imatge de la conversa", + "Upload conversation picture" : "Pujar la imatge de la conversa", + "Choose conversation picture from files" : "Trieu la imatge de la conversa dels fitxers", + "Remove conversation picture" : "Suprimir la imatge de la conversa", + "The file must be a PNG or JPG" : "El fitxer ha de ser PNG o JPG", + "Set picture" : "Estableix la imatge", + "Default permissions modified for {conversationName}" : "Permisos per defecte modificats per a {conversationName}", + "Could not modify default permissions for {conversationName}" : "No s'han pogut modificar els permisos per defecte per a {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editeu els paràmetres predeterminats dels participants en aquesta conversa. Aquesta configuració no afecta els moderadors.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vegada que es modifiquin els permisos en aquesta secció, es perdran els permisos personalitzats assignats prèviament als participants individuals.", + "All permissions" : "Tots els permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Els participants tenen permisos per iniciar una trucada, unir-se a una trucada, habilitar l'àudio i el vídeo i compartir la pantalla.", + "Restricted" : "Restringit", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Els participants poden unir-se a les trucades, però no poden habilitar l'àudio ni el vídeo ni compartir la pantalla fins que un moderador els concedeixi manualment els permisos.", + "Advanced permissions" : "Permisos avançats", + "Edit permissions" : "Edició dels permisos", + "Conversation settings" : "Paràmetres de la conversa", + "Basic Info" : "Informació bàsica", + "Personal" : "Personal", + "Moderation" : "Moderació", + "Setup overview" : "Visió general de la configuració", + "Breakout Rooms" : "Sales de treball", + "Matterbridge" : "Matterbridge", + "Bots" : "Robots", + "Danger zone" : "Zona perillosa", + "Archive conversation" : "Arxiva la conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Les converses arxivades s'oculten de la llista de converses de manera predeterminada. Tanmateix, encara apareixeran quan cerqueu el nom de la conversa o accediu a una llista de converses arxivades.", + "Do you really want to leave \"{displayName}\"?" : "De veritat voleu deixar \"{displayName}\"?", + "You can archive this conversation instead." : "Pots arxivar aquesta conversa.", + "Leave conversation" : "Surt de la conversa", + "You need to promote a new moderator before you can leave the conversation" : "Heu de promocionar un nou moderador abans de deixar la conversa", + "Delete conversation" : "Suprimeix la conversa", + "Do you really want to delete \"{displayName}\"?" : "De debò que voleu suprimir \"{displayName}\"?", + "Error while deleting conversation" : "S'ha produït un error en suprimir la conversa", + "Delete all chat messages" : "Suprimeix tots els missatges de xat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Realment voleu suprimir tots els missatges de \"{displayName}\"?", + "Error while clearing chat history" : "S'ha produït un error en esborrar l'historial de xat", + "Be careful, these actions cannot be undone." : "Aneu amb compte, aquestes accions no es poden desfer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Un cop acabada una conversa, per tornar a unir-se a una conversa tancada, cal una invitació. Es pot unir de nou a una conversa oberta en qualsevol moment.", + "Permanently delete this conversation." : "Suprimeix permanentment aquesta conversa.", + "Delete chat messages" : "Suprimeix els missatges de xat", + "Permanently delete all the messages in this conversation." : "Suprimeix permanentment tots els missatges d'aquesta conversa.", + "_%n hour_::_%n hours_" : ["%n hora","%n hores"], + "_%n day_::_%n days_" : ["%n dia","%n dies"], + "_%n week_::_%n weeks_" : ["%n setmana","%n setmanes"], + "Custom expiration time" : "Temps de caducitat personalitzat", + "Message expiration disabled" : "S'ha desactivat la caducitat del missatge", + "Message expiration set: {duration}" : "Conjunt de caducitat del missatge: {duration}", + "Error when trying to set message expiration" : "S'ha produït un error en intentar configurar la caducitat del missatge", + "Message expiration" : "Caducitat del missatge", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Els missatges de xat poden caducar al cap d'un període de temps determinat. Nota: els fitxers compartits al xat no se suprimiran per al propietari, però ja no es compartiran a la conversa.", + "Set message expiration" : "Estableix la caducitat del missatge", + "Current message expiration" : "Caducitat del missatge actual", + "Password copied to clipboard" : "S’ha copiat la contrasenya al porta-retalls", + "Password could not be copied" : "No s'ha pogut copiar la contrasenya", + "Guest access" : "Accés de convidat", + "Breakout rooms are not allowed in public conversations." : "No es permeten les sales de descans en converses públiques.", + "Allow guests to join this conversation via link" : "Permet als convidats unir-se a aquesta conversa mitjançant un enllaç", + "Password protection" : "Protecció amb contrasenya", + "This conversation is password-protected. Guests need password to join" : "Aquesta conversa està protegida amb contrasenya. Els convidats necessiten una contrasenya per unir-se", + "Password protection is needed for public conversations" : "La protecció amb contrasenya és necessària per a les converses públiques", + "Set a password" : "Configura una contrasenya", + "Enter new password" : "Introduïu la contrasenya nova", + "Save password" : "Desa la contrasenya", + "Copy password" : "Copia la contrasenya", + "Guests are allowed to join this conversation via link" : "Els convidats poden unir-se a aquesta conversa mitjançant un enllaç", + "Guests are not allowed to join this conversation" : "Els convidats no poden unir-se a aquesta conversa", + "Resend invitations" : "Torna a enviar les invitacions", + "This conversation is open to both registered users and users created with the Guests app" : "Aquesta conversa és oberta tant als usuaris registrats com als usuaris creats amb l'aplicació Convidats", + "This conversation is open to registered users" : "Aquesta conversa és oberta als usuaris registrats", + "This conversation is limited to the current participants" : "Aquesta conversa està limitada als participants actuals", + "You opened the conversation to both registered users and users created with the Guests app" : "Has obert la conversa tant als usuaris registrats com als usuaris creats amb l'aplicació Convidats", + "Error occurred when opening or limiting the conversation" : "S'ha produït un error en obrir o limitar la conversa", + "Open conversation to registered users, showing it in search results" : "Conversa oberta als usuaris registrats, mostrant-la als resultats de la cerca", + "Also open to users created with the Guests app" : "També obert als usuaris creats amb l'aplicació Convidats", + "Open conversation" : "Obre Conversa", + "Invalid language" : "La llengua no és vàlida", + "Start time: {date}" : "Hora d'inici: {date}", + "Start time has been updated" : "S'ha actualitzat l'hora d'inici", + "Error occurred while updating start time" : "S'ha produït un error en actualitzar l'hora d'inici", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Si habiliteu el vestíbul, els no moderadors es suprimiran de la trucada en curs.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar el vestíbul, restringint la conversa als moderadors", + "Meeting start time" : "Hora d'inici de la reunió", + "Start time (optional)" : "Hora d'inici (opcional)", + "Import email participants" : "Importa els participants del correu electrònic", + "You can import a list of email participants from a CSV file." : "Podeu importar una llista de participants de correu electrònic des d'un fitxer CSV.", + "Poll drafts" : "Esborranys d'enquestes", + "Browse poll drafts" : "Consulta els esborranys de les enquestes", + "Error occurred when locking the conversation" : "S'ha produït un error en bloquejar la conversa", + "Error occurred when unlocking the conversation" : "S'ha produït un error en desbloquejar la conversa", + "Lock conversation" : "Bloqueja la conversa", + "This will also terminate the ongoing call." : "Això també finalitzarà la trucada en curs.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloqueja la conversa per evitar que ningú publiqui missatges o iniciï trucades", + "Edit" : "Edició", + "More information" : "Més informació", + "Delete" : "Suprimir", + "Add new bridged channel to current conversation" : "Afegeix un nou canal connectat a la conversa actual", + "unknown state" : "estat desconegut", + "running" : "en execució", + "not running, check Matterbridge log" : "no funciona, comproveu el registre de Matterbridge", + "not running" : "no s'està executant", + "Bridge saved" : "Pont desat", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Podeu fer ponts des de diversos sistemes de missatgeria instantània amb Matterbridge.", + "More info on Matterbridge" : "Més informació sobre Matterbridge", + "Messaging systems" : "Sistemes de missatgeria", + "Enable bridge" : "Habilitar el pont", + "Show Matterbridge log" : "Mostra el registre de Matterbridge", + "Log content" : "Contingut del registre", + "Only moderators are allowed to mention @all" : "Només els moderadors poden esmentar @all", + "All participants are allowed to mention @all" : "Tots els participants poden esmentar @all", + "Participants are now allowed to mention @all." : "Ara els participants poden esmentar @all.", + "Mentioning @all has been limited to moderators." : "Esmentar @all s'ha limitat als moderadors.", + "Allow participants to mention @all" : "Permet als participants mencionar @all", + "Mention permissions" : "Esmenta els permisos", + "Notifications" : "Notificacions", + "Notify about calls in this conversation" : "Notifica quant a trucades en aquesta conversa", + "Important conversation" : "Conversa important", + "Recording consent is required for calls in this conversation" : "Cal el consentiment per gravar les trucades d'aquesta conversa", + "Recording consent is not required for calls in this conversation" : "No cal el consentiment per gravar les trucades d'aquesta conversa", + "Recording consent requirement was updated" : "S'ha actualitzat el requisit de consentiment de gravació", + "Error occurred while updating recording consent" : "S'ha produït un error en actualitzar el consentiment de gravació", + "Recording Consent" : "Consentiment de gravació", + "Recording consent cannot be changed once a call or breakout session has started." : "El consentiment de gravació no es pot canviar un cop s'ha iniciat una trucada o una sessió grupal.", + "Require recording consent before joining call in this conversation" : "Requereix el consentiment per gravar abans d'unir-te a la trucada en aquesta conversa", + "Recording consent is required for all calls" : "Cal el consentiment de gravació per a totes les trucades", + "SIP dial-in is now possible without PIN requirement" : "Ara és possible l'accés SIP sense necessitat de PIN", + "SIP dial-in is now enabled" : "Ara s'ha habilitat el marcatge SIP", + "SIP dial-in is now disabled" : "El marcatge SIP ara està desactivat", + "Error occurred when enabling SIP dial-in" : "S'ha produït un error en activar el telèfon d'entrada SIP", + "Error occurred when disabling SIP dial-in" : "S'ha produït un error en desactivar el telèfon d'entrada SIP", + "Phone and SIP dial-in" : "Telèfon i marcatge SIP", + "Enable phone and SIP dial-in" : "Habilita el telèfon i el trucades SIP", + "Allow to dial-in without a PIN" : "Permet marcar sense un PIN", + "Join" : "Uneix-te", + "Error while creating the conversation" : "Error en crear la conversa", + "Create a new conversation" : "Crea una conversa nova", + "Join open conversations" : "Uneix-te a converses obertes", + "Call a phone number" : "Trucada a un número de telèfon", + "Unread mentions" : "Mencions no llegides", + "Create conversation" : "Crea una conversa", + "Enter your name" : "Introdueix el teu nom", + "Submit name and join" : "Envia el nom i uneix-te", + "Do you already have an account?" : "Ja tens un compte?", + "Log in" : "Inicia la sessió", + "Error while verifying uploaded file" : "S'ha produït un error en verificar el fitxer penjat", + "Uploaded file is verified" : "El fitxer penjat està verificat", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "El format del contingut són valors separats per comes (CSV):
- La línia de capçalera és necessària i ha de coincidir amb \"nom\", \"correu electrònic\" o només \"correu electrònic\"
- Una entrada per línia (per exemple, \"John Doe\",\"john@example.tld\" )", + "Participants added successfully" : "Els participants s'han afegit correctament", + "Error while adding participants" : "S'ha produït un error en afegir participants", + "Import a file" : "Importa un fitxer", + "Browse" : "Navegació", + "Verifying uploaded file …" : "S'està verificant el fitxer penjat …", + "This might take a moment" : "Això pot trigar un moment", + "Send invitations" : "Enviar invitacions", + "_%n invalid email_::_%n invalid emails_" : ["%n correu electrònic no vàlid","%n correus electrònics no vàlids"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["El correu electrònic %n ja s'ha importat o està duplicat","%n correus electrònics ja s'han importat o s'han duplicat"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Es pot enviar %n invitació","Es poden enviar %n invitacions"], + "An error occurred while calling a phone number" : "S'ha produït un error en trucar a un número de telèfon", + "Phone number could not be called: {error}" : "No s'ha pogut trucar al número de telèfon: {error}", + "Phone number could not be called" : "No s'ha pogut trucar al número de telèfon", + "Search participants or phone numbers" : "Cerca participants o números de telèfon", + "Creating the conversation …" : "Creació de la conversa …", + "Mark as read" : "Marca com a llegit", + "Mark as unread" : "Marca com a sense llegir", + "Remove from favorites" : "Suprimeix dels preferits", + "Add to favorites" : "Afegeix a preferits", + "Unarchive conversation" : "Desarxiva la conversa", + "You need to promote a new moderator before you can leave the conversation." : "Heu de designar un nou moderador abans de deixar la conversa.", + "Conversation actions" : "Accions de conversa", + "Notify about calls" : "Notificar sobre trucades", + "Pending invitations" : "Invitacions pendents", + "From {user} at {remoteServer}" : "Des de les {user} a les {remoteServer}", + "Decline invitation" : "Rebutja la invitació", + "Accept invitation" : "Accepta la invitació", + "No pending invitations" : "No hi ha cap invitació pendent", + "Home" : "Casa", + "Unread" : "Per llegir", + "Alphabetically" : "Alfabèticament", + "No matches found" : "No s'ha trobat cap coincidència", + "No conversations found" : "No s'han trobat converses", + "You have no archived conversations." : "No tens converses arxivades.", + "You have no unread mentions." : "No tens mencions no llegides.", + "You have no unread messages." : "No tens missatges no llegits.", + "An error occurred while performing the search" : "S'ha produït un error en realitzar la cerca", + "Conversation list" : "Llista de converses", + "Unread messages" : "Missatges sense llegir", + "Clear filters" : "Esborra els filtres", + "New personal note" : "Nova nota personal", + "Back to conversations" : "Torna a les converses", + "Archived conversations" : "Converses arxivades", + "Clear filter" : "Esborra el filtre", + "Users" : "Usuaris", + "Groups" : "Grups", + "Teams" : "Equips", + "Federated users" : "Afegeix usuaris federats", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Altres fonts", + "Open conversations" : "Obre les converses", + "No search results" : "No s'han trobat resultats", + "Users, groups and teams" : "Usuaris, grups i equips", + "Users and groups" : "Usuaris i grups", + "Users and teams" : "Usuaris i equips", + "Groups and teams" : "Grups i equips", + "New group conversation" : "Nova conversa de grup", + "The meeting will start soon" : "La reunió començarà aviat", + "This meeting is scheduled for {startTime}" : "Aquesta reunió està planificada per a les {startTime}", + "You are currently waiting in the lobby" : "Ara esteu esperant al vestíbul", + "Select microphone" : "Seleccioneu el micròfon", + "No microphone available" : "No hi ha micròfon disponible", + "Select speaker" : "Seleccioneu l'altaveu", + "No speaker available" : "No hi ha altaveu disponible", + "Select camera" : "Seleccioni la càmera", + "No camera available" : "No hi ha cap càmera disponible", + "Select a device" : "Seleccioneu un dispositiu", + "Playing …" : "Reproduint …", + "Test speakers" : "Prova altaveus", + "Test" : "Prova", + "Devices" : "Dispositius", + "Backgrounds" : "Fons", + "No audio" : "Sense àudio", + "No camera" : "No càmera", + "Display video as you will see it (mirrored)" : "Mostra el vídeo tal com el veuràs (reglat)", + "Display video as others will see it" : "Mostra el vídeo tal com el veuran els altres", + "Calls are not supported in your browser" : "Les trucades no són compatibles amb el vostre navegador", + "Access to microphone is only possible with HTTPS" : "L'accés al micròfon només és possible amb HTTPS", + "Access to microphone was denied" : "S'ha denegat l'accés al micròfon", + "Error while accessing microphone" : "S'ha produït un error en accedir al micròfon", + "Access to camera is only possible with HTTPS" : "L'accés a la càmera només és possible amb HTTPS", + "The call is being recorded." : "La trucada s'està gravant.", + "The call might be recorded." : "És possible que la trucada sigui gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La gravació pot incloure la teva veu, el vídeo de la càmera i la pantalla compartida. Cal el vostre consentiment abans d'unir-vos a la trucada.", + "Give consent to the recording of this call" : "Donar el consentiment per a la gravació d'aquesta trucada", + "Start recording immediately with the call" : "Comenceu a gravar immediatament amb la trucada", + "Apply settings" : "Aplica els paràmetres", + "Select virtual office background" : "Seleccioneu el fons virtual d’oficina", + "Select virtual home background" : "Seleccioneu el fons virtual a casa", + "Select virtual abstract background" : "Seleccioneu fons virtual abstracte", + "Select virtual beach background" : "Seleccioneu el fons virtual de platja", + "Select virtual park background" : "Seleccioneu el fons virtual de parc", + "Select virtual theater background" : "Seleccioneu el fons virtual de teatre", + "Select virtual library background" : "Seleccioneu el fons virtual de biblioteca", + "Select virtual space station background" : "Seleccioneu el fons virtual de l'estació espacial", + "Error while uploading the file" : "S'ha produït un error en carregar el fitxer", + "Select a file" : "Select a file", + "Invalid path selected" : "Camí seleccionat no vàlid", + "Select virtual background from file {fileName}" : "Seleccioneu el fons virtual del fitxer {fileName}", + "Blur" : "Difumina", + "Upload" : "Pujada", + "Files" : "Fitxers", + "(editing)" : "(edició)", + "(edited)" : "(editat)", + "The message has expired or has been deleted" : "El missatge ha caducat o s'ha suprimit", + "Cancel quote" : "Cancel·la la menció", + "24 hours" : "24 hores", + "7 days" : "7 dies", + "Clear reminder – {timeLocale}" : "Esborra el recordatori – {timeLocale}", + "Edited by {actor}" : "Editat per {actor}", + "Message text copied to clipboard" : "El text del missatge s'ha copiat al porta-retalls", + "Message text could not be copied" : "No s'ha pogut copiar el text del missatge", + "Message forwarded to \"Note to self\"" : "Missatge reenviat a \"Nota per a un mateix\"", + "Error while forwarding message to \"Note to self\"" : "Error en reenviar el missatge a \"Nota per a un mateix\"", + "A reminder was successfully removed" : "S'ha eliminat correctament un recordatori", + "Error occurred when removing a reminder" : "S'ha produït un error en eliminar un recordatori", + "A reminder was successfully set at {datetime}" : "S'ha establert un recordatori correctament a {datetime}", + "Error occurred when creating a reminder" : "S'ha produït un error en crear un recordatori", + "Add a reaction to this message" : "Afegeix una reacció a aquest missatge", + "Reply" : "Respon", + "More actions" : "Més accions", + "Set reminder" : "Defineix un recordatori", + "Reply privately" : "Respon en privat", + "Edit message" : "Edició del missatge", + "Copy message" : "Copia el missatge", + "Copy message link" : "Copia l'enllaç del missatge", + "Go to file" : "Vés al fitxer", + "Download file" : "Baixa el fitxer", + "Forward message" : "Missatge de reenviament", + "Translate" : "Traducció", + "Set custom reminder" : "Estableix un recordatori personalitzat", + "Close reactions menu" : "Tanca el menú de reaccions", + "React with {emoji}" : "Reacciona amb {emoji}", + "React with another emoji" : "Reacciona amb un altre emoji", + "Choose a conversation to forward the selected message." : "Trieu una conversa per reenviar el missatge seleccionat.", + "Error while forwarding message" : "S'ha produït un error en reenviar el missatge", + "The message has been forwarded to {selectedConversationName}" : "El missatge s'ha reenviat a {selectedConversationName}", + "Dismiss" : "Descarta", + "Go to conversation" : "Vés a la conversa", + "Detect language" : "Detecta la llengua", + "The message could not be translated" : "No s'ha pogut traduir el missatge", + "Translation copied to clipboard" : "La traducció s'ha copiat al porta-retalls", + "Translation could not be copied" : "No s'ha pogut copiar la traducció", + "Translate message" : "Tradueix el missatge", + "Source language to translate from" : "Llengua d'origen per traduir", + "Translate from" : "Traduir de", + "Target language to translate into" : "Llengua objectiu a traduir", + "Translate to" : "Traduir a", + "Translating" : "S'està traduint", + "Copy translated text" : "Copia el text traduït", + "Send now" : "Envia ara", + "Message read by everyone who shares their reading status" : "Missatge llegit per tothom que comparteix el seu estat de lectura", + "Message sent" : "Missatge enviat", + "Sent without notification" : "Enviat sense notificació", + "Deleting message" : "S'està eliminant el missatge", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "El missatge s'ha suprimit correctament, però s'ha configurat un bot o Matterbridge i és possible que el missatge ja s'hagi distribuït a altres serveis", + "Message deleted successfully" : "El missatge s'ha suprimit correctament", + "Message could not be deleted because it is too old" : "No s'ha pogut suprimir el missatge perquè és massa antic", + "Only normal chat messages can be deleted" : "Només es poden suprimir els missatges de xat normals", + "An error occurred while deleting the message" : "S'ha produït un error en suprimir el missatge", + "Your browser does not support playing audio files" : "El vostre navegador no admet la reproducció de fitxers d'àudio", + "Contact" : "Contacte", + "{stack} in {board}" : "{stack} a {board}", + "Deck Card" : "Pila de Targetes", + "Remove {fileName}" : "Suprimeix {fileName}", + "Open this location in OpenStreetMap" : "Obriu aquesta ubicació a OpenStreetMap", + "Sending message" : "S'està enviant el missatge", + "Failed to send the message. Click to try again" : "No s'ha pogut enviar el missatge. Feu clic per tornar-ho a provar", + "Not enough free space to upload file" : "No hi ha prou espai lliure per pujar el fitxer", + "You cannot send messages to this conversation at the moment" : "No pots enviar missatges a aquesta conversa en aquest moment", + "Could not update the message" : "No s'ha pogut actualitzar el missatge", + "You voted" : "Has votat", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Esborrany de l'enquesta • Opció %n","Esborrany de l'enquesta • %n opcions"], + "_%n vote_::_%n votes_" : ["%n vot","%n vots"], + "Edit poll draft" : "Edita l'esborrany de l'enquesta", + "Delete poll draft" : "Suprimeix l'esborrany de l'enquesta", + "Open poll" : "Enquesta oberta", + "See results" : "Veure resultats", + "Reactions" : "Reaccions", + "No permission to post reactions in this conversation" : "No hi ha permís per publicar reaccions en aquesta conversa", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i %n participant més","i %n participants més"], + "Show all reactions" : "Mostra totes les reaccions", + "Add more reactions" : "Afegeix més reaccions", + "Show or collapse system messages" : "Mostra o replega els missatges del sistema", + "No messages" : "No hi ha missatges", + "All messages have expired or have been deleted." : "Tots els missatges han caducat o s'han suprimit.", + "Unpin" : "No fixis", + "Cancel search" : "Cancel·la la cerca", + "Add a phone number" : "Afegeix un número de telèfon", + "Error: A password is required to create the conversation." : "Error: cal una contrasenya per crear la conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Tot a punt, s'ha creat la conversa \"{conversationName}\".", + "Create a new group conversation" : "Crear una conversa de grup nova", + "Add participants" : "Afegeix participants", + "Maximum length exceeded ({maxlength} characters)" : "S'ha superat la longitud màxima ({maxlength} caràcters)", + "Conversation visibility" : "Visibilitat de la conversa", + "Allow guests to join via link" : "Permet als convidats unir-se mitjançant un enllaç", + "Enter password" : "Introduïu la contrasenya", + "This conversation has been locked" : "Aquesta conversa s'ha bloquejat", + "No permission to post messages in this conversation" : "No hi ha permís per publicar missatges en aquesta conversa", + "Joining conversation …" : "S'està unint a la conversa …", + "Write a message without notification" : "Escriu un missatge sense notificació", + "Send message silently" : "Enviar missatge en silenci", + "Send message" : "Envia un missatge", + "Send without notification" : "Envia sense notificació", + "The participant will not be notified about new messages" : "El participant no rebrà notificacions sobre missatges nous", + "Participants will not be notified about new messages" : "Els participants no rebran notificacions dels missatges nous", + "The message could not be edited" : "No s'ha pogut editar el missatge", + "File to share" : "Fitxer a compartir", + "File upload is not available in this conversation" : "La càrrega de fitxers no està disponible en aquesta conversa", + "Add emoji" : "Afegeix emoji", + "Adding a mention will only notify users who did not read the message." : "Afegir una menció només notificarà als usuaris que no hagin llegit el missatge.", + "Send later" : "Envia més tard", + "Cancel editing" : "Cancel·la l'edició", + "{user} is out of office and might not respond." : "{user} està fora de l'oficina i és possible que no respongui.", + "Absence period: {startDate} - {endDate}" : "Període d'absència: {startDate} - {endDate}", + "Replacement:" : "Substitució:", + "Share from {nextcloud}" : "Comparteix des de {nextcloud}", + "Share from Files" : "Comparteix des de Fitxers", + "Share files to the conversation" : "Compartir fitxers a la conversa", + "Upload from device" : "Pujada des del dispositiu", + "Create new poll" : "Crea una nova enquesta", + "Smart picker" : "Selector intel·ligent", + "Record voice message" : "Grava un missatge de veu", + "End recording and send" : "Finalitzar la gravació i enviar", + "Dismiss recording" : "Descarta la gravació", + "Access to the microphone was denied" : "S'ha denegat l'accés al micròfon", + "Microphone either not available or disabled in settings" : "El micròfon no està disponible o està desactivat als paràmetres", + "Error while recording audio" : "S'ha produït un error en gravar l'àudio", + "Generating summary of unread messages …" : "S'està generant un resum dels missatges no llegits …", + "Summary is AI generated and might contain mistakes" : "El resum es genera amb IA i pot contenir errors", + "Error occurred during a summary generation" : "S'ha produït un error durant la generació d'un resum", + "New file" : "Nou fitxer", + "Blank" : "En blanc", + "Error while creating file" : "Error en crear el fitxer", + "Create and share a new file" : "Creació i compartició d'un fitxer nou", + "Name of the new file" : "Nom del nou fitxer", + "Create file" : "Crea el fitxer", + "Someone is typing …" : "Algú està escrivint …", + "{user1} is typing …" : "{user1} està escrivint …", + "{user1} and {user2} are typing …" : "{user1} i {user2} estan escrivint …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} estan escrivint …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i %n més estan escrivint …","{user1}, {user2}, {user3} i %n més estan escrivint …"], + "Add more files" : "Afegeix més fitxers", + "Send" : "Envia", + "In this conversation {user} can:" : "En aquesta conversa {user} pot:", + "Edit default permissions for participants in {conversationName}" : "Edita els permisos per defecte per als participants a {conversationName}", + "Start a call" : "Inicia una trucada", + "Skip the lobby" : "Omet el vestíbul", + "Can post messages and reactions" : "Pot publicar missatges i reaccions", + "Enable the microphone" : "Habilitar el micròfon", + "Enable the camera" : "Habilitar la càmera", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Actualitzar els permisos", + "Updating permissions" : "S'estan actualitzant els permisos", + "No poll drafts" : "No hi ha esborranys d'enquesta", + "There is no poll drafts yet saved for this conversation" : "Encara no hi ha cap esborrany d'enquesta desat per a aquesta conversa", + "Create poll in {name}" : "Crea una enquesta a {name}", + "Create poll" : "Crea enquesta", + "Error while importing poll" : "S'ha produït un error en importar l'enquesta", + "Question" : "Qüestió", + "Ask a question" : "Fer una pregunta", + "Import draft from file" : "Importa l'esborrany del fitxer", + "Answers" : "Respostes", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Suprimeix l'opció de l'enquesta", + "Add answer" : "Afegeix la resposta", + "Settings" : "Paràmetres", + "Anonymous poll" : "Enquesta anònima", + "Multiple answers" : "Respostes múltiples", + "Save as draft" : "Desa com a esborrany", + "Export draft to file" : "Exporta l'esborrany al fitxer", + "You voted for this option" : "Heu votat aquesta opció", + "End poll" : "Finalitza l'enquesta", + "Change your vote" : "Canvia el teu vot", + "Results" : "Resultats", + "Voted participants" : "Participants votats", + "Send a message to \"{roomName}\"" : "Envia un missatge a \"{roomName}\"", + "Hide list of participants" : "Amaga la llista de participants", + "Show list of participants" : "Mostra la llista de participants", + "Assistance requested in {roomName}" : "Ajuda sol·licitada a {roomName}", + "The message was sent to \"{roomName}\"" : "El missatge s'ha enviat a \"{roomName}\"", + "Dismiss request for assistance" : "Descarta la sol·licitud d'assistència", + "Send message to room" : "Envia missatge a l'habitació", + "Back to main room" : "Tornada a la sala principal", + "Back to your room" : "Torna a la teva habitació", + "Message all rooms" : "Envia un missatge a totes les habitacions", + "Start session" : "Inicia sessió", + "Start a call before you start a breakout room session" : "Inicieu una trucada abans d'iniciar una sessió de sala de treball", + "Stop session" : "Atura la sessió", + "The message was sent to all breakout rooms" : "El missatge s'ha enviat a totes les sales de treball", + "Send a message to all breakout rooms" : "Envia un missatge a totes les sales de treball", + "Breakout rooms are not started" : "Les sales de treball no s'inicien", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Les trucades sense backend d'alt rendiment poden causar problemes de connectivitat i una càrrega elevada als dispositius. {linkstart}Més informació{linkend}", + "Talk setup incomplete" : "Configuració de la conversa incompleta", + "Disable lobby" : "Inhabilita el vestíbul", + "Settings for participant \"{user}\"" : "Paràmetres per al participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderador", + "bot" : "autòmata", + "guest" : "convidat", + "Ringing …" : "Sonant …", + "Call rejected" : "Trucada rebutjada", + "{time} talking …" : "{time} parlant …", + "{time} talking time" : "{time} temps de conversa", + "Raised their hand" : "Van aixecar la mà", + "Joined with video" : "S'ha unit amb vídeo", + "Joined via phone" : "S'ha unit per telèfon", + "Joined with audio" : "S'ha unit amb àudio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El text ha de tenir una longitud inferior o igual a {maxLength} caràcters. El vostre text actual té {charactersCount} caràcters.", + "Remove group and members" : "Suprimir el grup i els membres", + "Remove team and members" : "Suprimeix l'equip i els membres", + "Remove participant" : "Suprimir el participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Segur que voleu eliminar el grup \"{displayName}\" i els seus membres d'aquesta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Realment voleu eliminar l'equip \"{displayName}\" i els seus membres d'aquesta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Segur que voleu eliminar {displayName} d'aquesta conversa?", + "Notification was sent to {displayName}" : "La notificació s'ha enviat a {displayName}", + "Could not send notification to {displayName}" : "No s'ha pogut enviar la notificació a {displayName}", + "Permissions granted to {displayName}" : "Permisos concedits a {displayName}", + "Could not modify permissions for {displayName}" : "No s'han pogut modificar els permisos de {displayName}", + "Permissions removed for {displayName}" : "S'han eliminat els permisos per a {displayName}", + "Permissions set to default for {displayName}" : "Permisos establerts per defecte per a {displayName}", + "Phone number could not be hung up" : "No s'ha pogut penjar el número de telèfon", + "Phone number could not be put on hold" : "El número de telèfon no s'ha pogut posar en espera", + "Phone number could not be muted" : "No s'ha pogut silenciar el número de telèfon", + "Phone number could not be unmuted" : "No s'ha pogut activar el so del número de telèfon", + "DTMF message could not be sent" : "No s'ha pogut enviar el missatge DTMF", + "Phone number copied to clipboard" : "El número de telèfon s'ha copiat al porta-retalls", + "Phone number could not be copied" : "No s'ha pogut copiar el número de telèfon", + "in the lobby" : "al vestíbul", + "Dial out phone" : "Marqueu el telèfon", + "Hang up phone" : "Penja el telèfon", + "Move back to lobby" : "Torneu al vestíbul", + "Move to conversation" : "Passa a la conversa", + "Dial-in PIN" : "PIN de marcatge", + "Demote from moderator" : "Retenció del moderador", + "Promote to moderator" : "Promociona al moderador", + "Resend invitation" : "Torna a enviar el correu d'invitació", + "Send call notification" : "Envia una notificació de trucada", + "Dial out phone number" : "Marqueu el número de telèfon", + "Resume call for phone number" : "Reprèn la trucada pel número de telèfon", + "Put phone number on hold" : "Posa el número de telèfon en espera", + "Unmute phone number" : "Activa el so del número de telèfon", + "Mute phone number" : "Silencia el número de telèfon", + "Copy phone number" : "Copia el número de telèfon", + "Reset custom permissions" : "Restableix els permisos personalitzats", + "Grant all permissions" : "Concediu tots els permisos", + "Remove all permissions" : "Suprimir tots els permisos", + "Also ban from this conversation" : "També prohibeix aquesta conversa", + "Internal note (reason to ban)" : "Nota interna (motiu de la prohibició)", + "Remove" : "Suprimir", + "Permissions modified for {displayName}" : "Permisos modificats per a {displayName}", + "Add users, groups or teams" : "Afegiu usuaris, grups o equips", + "Add users or groups" : "Afegeix usuaris o grups", + "Add users or teams" : "Afegiu usuaris o equips", + "Add users" : "Afegeix usuaris", + "Add groups or teams" : "Afegiu grups o equips", + "Add groups" : "Afegeix grups", + "Add teams" : "Afegeix equips", + "Add other sources" : "Afegeix altres fonts", + "Add emails" : "Afegeix correus electrònics", + "Integrations" : "Integracions", + "Add federated users" : "Afegeix usuaris federats", + "Searching …" : "Cercant …", + "Search for more users" : "Cercar més usuaris", + "You can search or add participants via name, email, or Federated Cloud ID" : "Podeu cercar o afegir participants mitjançant el nom, el correu electrònic o l'identificador de núvol federat", + "Search or add participants" : "Cerca o afegeix participants", + "Invitation was sent to {actorId}" : "S'ha enviat la invitació a {actorId}", + "An error occurred while adding the participants" : "S'ha produït un error en afegir els participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Xat obert", + "You have new unread messages in the chat." : "Tens missatges nous sense llegir al xat.", + "You have been mentioned in the chat." : "Has estat esmentat al xat.", + "Search messages" : "Cerca missatges", + "Chat" : "Xat", + "Details" : "Detalls", + "Shared items" : "Elements compartits", + "Search in {name}" : "Cerca a {name}", + "Search messages …" : "Cerca missatges …", + "Search options" : "Opcions de cerca", + "From User" : "De l'usuari", + "Since" : "Des de", + "Until" : "Fins", + "No results found" : "No s'han trobat resultats", + "Load more results" : "Carregar més resultats", + "Projects" : "Projectes", + "No shared items" : "No hi ha elements compartits", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enllaça a una conversa", + "No open conversations found" : "No s'han trobat converses obertes", + "Either there are no open conversations or you joined all of them." : "O no hi ha converses obertes o t'has unit a totes.", + "Check spelling or use complete words." : "Revisa l'ortografia o utilitza paraules completes.", + "Search conversations or users" : "Cercar converses o usuaris", + "Select conversation" : "Seleccioneu una conversa", + "Number length is not valid" : "La longitud del número no és vàlida", + "Region code is not valid" : "El codi de regió no és vàlid", + "Number length is too short" : "La longitud del número és massa curta", + "Number length is too long" : "La longitud del número és massa llarga", + "Number is not valid" : "El número no és vàlid", + "Phone numbers" : "Números de telèfon", + "Display name: {name}" : "Nom de visualització: {name}", + "Edit display name" : "Edició del nom a mostrar", + "Save name" : "Desar el nom", + "Error while setting personal setting" : "S'ha produït un error en configurar la configuració personal", + "Error while saving sounds setting" : "S'ha produït un error en desar els paràmetres dels sons", + "Play sounds when participants join or leave a call" : "Reprodueix sons quan els participants s'uneixen o surten d'una trucada", + "Notification settings" : "Paràmetres de les notificacions", + "Default language" : "Llengua per defecte", + "Select location for attachments" : "Seleccioneu la ubicació per als fitxers adjunts", + "Error while setting attachment folder" : "S'ha produït un error en establir la carpeta de fitxers adjunts", + "Error while setting read status privacy" : "S'ha produït un error en configurar la privadesa de l'estat de lectura", + "Error while setting typing status privacy" : "S'ha produït un error en configurar la privadesa de l'estat d'escriure", + "Error while setting default media state" : "S'ha produït un error en establir l'estat predeterminat dels mitjans", + "Privacy" : "Privadesa", + "Attachments folder" : "Carpeta fitxers adjunts", + "Toggle full screen" : "Commuta la pantalla completa", + "Search" : "Cerca", + "Focus the chat input" : "Posar focus a l'entrada del xat", + "Unfocus the chat input to use shortcuts" : "Treure focus de l'entrada del xat per utilitzar dreceres", + "Edit your last message" : "Editeu el vostre darrer missatge", + "Shortcuts while in a call" : "Dreceres mentre es troba en una trucada", + "Camera on and off" : "Càmera i desactivada", + "Microphone on and off" : "El micròfon activat i desactivat", + "Raise or lower hand" : "Aixecar o baixar la mà", + "Push to talk or push to mute" : "Premeu per parlar o premeu per silenciar", + "Zoom-in / zoom-out a screen share" : "Apropar/reduir una pantalla compartida", + "Mouse wheel" : "Roda del ratolí", + "Start call silently" : "Inicia la trucada en silenci", + "Start call" : "Inicia trucada", + "End call" : "Finalitzar la trucada", + "This call has just ended" : "Aquesta trucada acaba de finalitzar", + "You will be able to join the call only after a moderator starts it." : "Només podreu unir-vos a la trucada un cop s'inicii per un moderador.", + "End call for everyone" : "Finalitzar la trucada per a tothom", + "Starting the recording" : "Iniciant la gravació", + "Recording" : "Enregistrament", + "The call has been running for one hour." : "La trucada porta una hora en marxa.", + "Cancel recording start" : "Cancel·la l'inici de la gravació", + "Stop recording" : "Aturar l'enregistrament", + "Send a reaction" : "Envia una reacció", + "React with {reaction}" : "Reacciona amb {reaction}", + "All tasks done!" : "Totes les tasques fetes!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tasca","{done} de %n tasques"], + "_%n participant in call_::_%n participants in call_" : ["%n participant a la trucada","%n participants a la trucada"], + "You are not allowed to enable screensharing" : "No teniu permís per activar l'ús compartit de pantalla", + "No screensharing" : "Deixar de compartir pantalla", + "Screensharing options" : "Preferències de compartició de pantalla", + "Enable screensharing" : "Habilitar la compartició de pantalla", + "Bad sent video and screen quality." : "Mala qualitat de vídeo i pantalla enviada.", + "Bad sent screen quality." : "Mala qualitat de pantalla enviada.", + "Bad sent video quality." : "Mala qualitat de vídeo enviada.", + "Bad sent audio, video and screen quality." : "Mala qualitat d'àudio, vídeo i pantalla enviada.", + "Bad sent audio and screen quality." : "Mala qualitat d'àudio i pantalla enviada.", + "Bad sent audio and video quality." : "Mala qualitat d'àudio i vídeo enviat.", + "Bad sent audio quality." : "Mala qualitat d'àudio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin veure la teva pantalla. Per millorar la situació, proveu de inhabilitar el desenfocament de fons o el vostre vídeo mentre feu una compartició de pantalla.", + "Disable background blur" : "Inhabilitar el desenfocament de fons", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin veure la teva pantalla. Per millorar la situació, proveu de inhabilitar el vostre vídeo mentre feu una pantalla compartida.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "És possible que la connexió a Internet o l'ordinador estiguin ocupats i és possible que altres participants no puguin veure la vostra pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin veure.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't ni veure't. Per millorar la situació, proveu de inhabilitar el desenfocament de fons o el vostre vídeo mentre feu una pantalla compartida.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't i veure't. Per millorar la situació, proveu de inhabilitar el vídeo mentre es fa una compartició de pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La vostra connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin entendre ni veure la vostra pantalla. Per millorar la situació, prova de inhabilitar la teva pantalla compartida.", + "Disable screenshare" : "Inhabilitar la compartició de pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't ni veure't. Per millorar la situació, prova de inhabilitar el desenfocament de fons o el teu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't i veure't. Per millorar la situació, proveu de inhabilitar el vostre vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin entendre.", + "Screen sharing is not supported by your browser." : "El navegador no admet l'ús compartit de pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "L'ús compartit de pantalla requereix que la pàgina es carregui mitjançant HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "L'ús compartit de la pantalla requereix que la pàgina es carregui a través d'HTTPS.", + "An error occurred while starting screensharing." : "S'ha produït un error en iniciar l'ús compartit de la pantalla.", + "Show your screen" : "Mostra la teva pantalla", + "Stop screensharing" : "Deixar de compartir", + "Mute others" : "Silenciar els altres", + "Start recording" : "Inici de l'enregistrament", + "Set up breakout rooms" : "Configureu sales de treball", + "Download attendance list" : "Descarrega la llista d'assistència", + "Open Calendar" : "Obriu el calendari", + "Remove participant {name}" : "Suprimir el participant {name}", + "Keep" : "Mantén", + "Open dialpad" : "Obre el teclat", + "Select a region" : "Selecciona una regió", + "Search …" : "Cerca …", + "Message without mention" : "Missatge sense menció", + "Mention myself" : "Menció a mi mateix", + "Mention everyone" : "Esmenta a tothom", + "Select a conversation" : "Seleccioneu una conversa", + "Select a mode" : "Seleccioneu un mode", + "You do not have permissions to access this conversation." : "No tens permís per accedir a aquesta conversa.", + "Join a different conversation or start a new one." : "Uneix-te a una conversa diferent o inicia-ne una de nova.", + "The conversation does not exist" : "La conversa no existeix", + "Join a conversation or start a new one!" : "Uneix-vos a una conversa o inicia'n una de nova!", + "Duplicate session" : "Sessió duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Crear i unir-se a una conversa amb \"{userid}\"", + "Join a conversation or start a new one" : "Uniu-vos a una conversa o inicieu-ne una de nova", + "Error while joining the conversation" : "S'ha produït un error en unir-se a la conversa", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Usuari Nextcloud", + "User password" : "Contrasenya d'usuari", + "Talk conversation" : "Conversa de Talk", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "URL del servidor Matrix", + "User" : "Usuari", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuari Mattermost", + "Team name" : "Nom de l'equip", + "Channel name" : "Nom del canal", + "Rocket.Chat server URL" : "URL del servidor Rocket.Chat", + "User name or email address" : "Nom d'usuari o adreça de correu electrònic", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL del servidor Zulip", + "Bot user name" : "Nom d'usuari del bot", + "Bot API key" : "Clau de l'API del bot", + "Zulip channel" : "Canal Zulip", + "API token" : "Codi de l'API", + "Slack channel" : "Canal slack", + "Server ID or name" : "ID o nom del servidor", + "Channel ID (prefixed with \"ID:\") or name" : "Identificador del canal (prefixat amb \"ID:\") o nom", + "Channel" : "Canal", + "Login" : "Inici de sessió", + "Chat ID" : "ID de xat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Areça URL del servidor IRC (p. ex., chat.freenode.net:6667)", + "Nickname" : "Sobrenom", + "Connection password" : "Contrasenya de connexió", + "IRC channel" : "Canal IRC", + "Channel password" : "Contrasenya del canal", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Fer servir TLS", + "Use SASL" : "Fer servir SASL", + "Tenant ID" : "ID de l'inquilí", + "Client ID" : "ID de Client", + "Team ID" : "ID de l'equip", + "Thread ID" : "ID de fil", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID del Jabber", + "Media" : "Multimèdia", + "Polls" : "Enquestes", + "Deck cards" : "Pila de targetes", + "Voice messages" : "Missatges de veu", + "Locations" : "Ubicacions", + "Call recordings" : "Enregistraments de trucades", + "Audio" : "Àudio", + "Show all media" : "Mostra tots els mitjans", + "Show all files" : "Mostra tots els fitxers", + "Show all polls" : "Mostra totes les enquestes", + "Show all deck cards" : "Mostra totes les cartes de baralla", + "Show all voice messages" : "Mostra tots els missatges de veu", + "Show all locations" : "Mostra totes les ubicacions", + "Show all call recordings" : "Mostra tots els enregistraments de trucades", + "Show all audio" : "Mostra tot l'àudio", + "Show all other" : "Mostra tots els altres", + "Group" : "Grup", + "Team" : "Equip", + "You reconnected to the call" : "T'has tornat a connectar a la trucada", + "{actor} reconnected to the call" : "{actor} s'ha tornat a connectar a la trucada", + "You added {user0} and {user1}" : "Heu afegit {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Heu afegit {user0}, {user1} i %n participant més","Heu afegit {user0}, {user1} i %n participants més"], + "An administrator added you and {user0}" : "Un administrador t'ha afegit a tu i a {user0}", + "{actor} added you and {user0}" : "{actor} t'ha afegit a tu i a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrador t'ha afegit a tu, {user0} i %n participant més","Un administrador t'ha afegit a tu, {user0} i %n participants més"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} t'ha afegit a tu, {user0} i %n participant més","{actor} t'ha afegit a tu, {user0} i %n participants més"], + "An administrator added {user0} and {user1}" : "Un administrador ha afegit {user0} i {user1}", + "{actor} added {user0} and {user1}" : "{actor} ha afegit {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrador ha afegit {user0}, {user1} i %n participant més","Un administrador ha afegit {user0}, {user1} i %n participants més"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha afegit {user0}, {user1} i %n participant més","{actor} ha afegit {user0}, {user1} i %n participants més"], + "You removed {user0} and {user1}" : "Has eliminat {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Has eliminat {user0}, {user1} i %n participants més","Has eliminat {user0}, {user1} i %n participants més"], + "An administrator removed you and {user0}" : "Un administrador t'ha suprimit a tu i a {user0}", + "{actor} removed you and {user0}" : "{actor} us ha eliminat a vosaltres i a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrador us ha eliminat a vosaltres, a {user0} i a %n participants més","Un administrador us ha eliminat a vosaltres, {user0} i %n participants més"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} us ha eliminat a vosaltres, {user0} i %n participants més","{actor} us ha eliminat a vosaltres, {user0} i %n participants més"], + "An administrator removed {user0} and {user1}" : "Un administrador ha eliminat {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ha eliminat {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrador ha eliminat {user0}, {user1} i %n participants més","Un administrador ha eliminat {user0}, {user1} i %n participants més"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} ha eliminat {user0}, {user1} i %n participants més","{actor} ha eliminat {user0}, {user1} i %n participants més"], + "You and {user0} joined the call" : "Tu i {user0} us heu unit a la trucada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tu, {user0} i %n participant més us heu unit a la trucada","Tu, {user0} i %n participants més us heu unit a la trucada"], + "{user0} and {user1} joined the call" : "{user0} i {user1} s'han unit a la trucada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i %n participant més s'han unit a la trucada","{user0}, {user1} i %n participants més s'han unit a la trucada"], + "You and {user0} left the call" : "Tu i {user0} heu deixat la trucada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Tu, {user0} i %n participant més van deixar la trucada","Tu, {user0} i %n participants més van deixar la trucada"], + "{user0} and {user1} left the call" : "{user0} i {user1} van deixar la trucada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i %n participant més van abandonar la trucada","{user0}, {user1} i %n participants més van abandonar la trucada"], + "You promoted {user0} and {user1} to moderators" : "Has promocionat {user0} i {user1} a moderadors", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Has promocionat {user0}, {user1} i %n participant més a moderadors","Has promocionat {user0}, {user1} i %n participants més a moderadors"], + "An administrator promoted you and {user0} to moderators" : "Un administrador us ha promocionat a ru i a {user0} a moderadors", + "{actor} promoted you and {user0} to moderators" : "{actor} us ha promocionat i a {user0} a moderadors", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrador us ha promocionat a ru, {user0} i %n participant més a moderadors","Un administrador us ha promocionat a tu, {user0} i %n participants més a moderadors"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} us ha promocionat a tu, {user0} i %n participant més a moderadors","{actor} us ha promocionat a tu, {user0} i %n participants més a moderadors"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrador ha promocionat {user0} i {user1} a moderadors", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha promocionat {user0} i {user1} a moderadors", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrador va promocionar {user0}, {user1} i %n participant més a moderadors","Un administrador va promocionar {user0}, {user1} i %n participants més a moderadors"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha promocionat {user0}, {user1} i %n participant més a moderadors","{actor} ha promocionat {user0}, {user1} i %n participants més a moderadors"], + "You demoted {user0} and {user1} from moderators" : "Has degradat {user0} i {user1} dels moderadors", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Has degradat {user0}, {user1} i %n participant més dels moderadors","Has degradat {user0}, {user1} i %n participants més dels moderadors"], + "An administrator demoted you and {user0} from moderators" : "Un administrador us ha degradat a tu i a {user0} dels moderadors", + "{actor} demoted you and {user0} from moderators" : "{actor} us ha degradat a tu i a {user0} dels moderadors", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrador us ha degradat a tu, {user0} i %n participant més dels moderadors","Un administrador us ha degradat a tu, {user0} i %n participants més dels moderadors"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} us ha degradat a tu, {user0} i %n participant més dels moderadors","{actor} us ha degradat a tu, {user0} i %n participants més dels moderadors"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrador ha degradat {user0} i {user1} dels moderadors", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ha degradat {user0} i {user1} dels moderadors", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrador ha degradat {user0}, {user1} i %n participant més dels moderadors","Un administrador ha degradat {user0}, {user1} i %n participants més dels moderadors"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha degradat {user0}, {user1} i %n participant més dels moderadors","{actor} ha degradat {user0}, {user1} i %n participants més dels moderadors"], + "You: {lastMessage}" : "Vostè: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editat per tu)", + "(edited by a deleted user)" : "(editat per un usuari eliminat)", + "(edited by {moderator})" : "(editat per {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Esteu intentant unir-vos a una conversa mentre teniu una sessió activa en una altra finestra o dispositiu. Això actualment no és compatible amb Nextcloud Talk. Què voleu fer?", + "Leave this page" : "Surt d'aquesta pàgina", + "Join here" : "Unir-se aquí", + "Deck card has been posted to {conversation}" : "La pila de targetes s'ha publicat a {conversation}", + "An error occurred while posting deck card to conversation" : "S'ha produït un error en publicar la pila de targetes a la conversa", + "Post to a conversation" : "Publica en una conversa", + "Post to conversation" : "Publica a la conversa", + "The recording failed. Please contact your administrator." : "La gravació ha fallat. Poseu-vos en contacte amb el vostre administrador.", + "Location has been posted to {conversation}" : "La ubicació s'ha publicat a {conversation}", + "An error occurred while posting location to conversation" : "S'ha produït un error en publicar la ubicació a la conversa", + "Share to a conversation" : "Comparteix en una conversa", + "Share to conversation" : "Comparteix a la conversa", + "In conversation" : "En conversa", + "Search in conversation: {conversation}" : "Cerca a la conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Les vostres sol·licituds estan limitades en aquest moment a causa de la protecció de força bruta", + "Error while clearing conversation history" : "S'ha produït un error en esborrar l'historial de converses", + "Error occurred while allowing guests" : "S'ha produït un error en permetre els convidats", + "Error occurred while disallowing guests" : "S'ha produït un error en desactivar convidats", + "Error occurred when restricting the conversation to moderator" : "S'ha produït un error en restringir la conversa al moderador", + "Error occurred when opening the conversation to everyone" : "S'ha produït un error en obrir la conversa a tothom", + "Conversation password has been saved" : "La contrasenya de la conversa s'ha desat", + "Conversation password has been removed" : "La contrasenya de la conversa s'ha eliminat", + "Error occurred while saving conversation password" : "S'ha produït un error en desar la contrasenya de la conversa", + "Call recording is starting." : "S'està començant la gravació de trucades.", + "Call recording stopped while starting." : "La gravació de trucades s'ha aturat mentre començava.", + "Call recording stopped. You will be notified once the recording is available." : "S'ha aturat la gravació de trucades. Se us notificarà quan la gravació estigui disponible.", + "Conversation picture set" : "Conjunt d'imatges de conversa", + "Conversation picture deleted" : "S'ha suprimit la imatge de la conversa", + "Could not delete the conversation picture" : "No s'ha pogut suprimir la imatge de la conversa", + "Could not post message: {errorMessage}" : "No s'ha pogut publicar el missatge: {errorMessage}", + "Participant is banned successfully" : "El participant està prohibit correctament", + "Error while banning the participant" : "S'ha produït un error en prohibir el participant", + "An error occurred while fetching the participants" : "S'ha produït un error en recuperar els participants", + "Could not send invitation to {actorId}" : "No s'ha pogut enviar la invitació a {actorId}", + "Invitations sent" : "Invitacions enviades", + "Error occurred when sending invitations" : "S'ha produït un error en enviar les invitacions", + "Failed to join the conversation." : "No s'ha pogut unir a la conversa.", + "An error occurred while creating breakout rooms" : "S'ha produït un error en crear les sales de treball", + "An error occurred while re-ordering the attendees" : "S'ha produït un error en tornar a ordenar els assistents", + "An error occurred while deleting breakout rooms" : "S'ha produït un error en suprimir les sales de treball", + "An error occurred while starting breakout rooms" : "S'ha produït un error en iniciar les sales de treball", + "An error occurred while stopping breakout rooms" : "S'ha produït un error en aturar les sales de treball", + "An error occurred while sending a message to the breakout rooms" : "S'ha produït un error en enviar un missatge a les sales de treball", + "An error occurred while requesting assistance" : "S'ha produït un error en sol·licitar ajuda", + "An error occurred while resetting the request for assistance" : "S'ha produït un error en restablir la sol·licitud d'assistència", + "An error occurred while joining breakout room" : "S'ha produït un error en unir-se a la sala de grups", + "An error occurred while accepting an invitation" : "S'ha produït un error en acceptar una invitació", + "An error occurred while rejecting an invitation" : "S'ha produït un error en rebutjar una invitació", + "{guest} (guest)" : "{guest} (convidat)", + "Poll draft has been saved" : "S'ha desat l'esborrany de l'enquesta", + "An error occurred while saving the draft" : "S'ha produït un error en desar l'esborrany", + "An error occurred while submitting your vote" : "S'ha produït un error en enviar el vostre vot", + "An error occurred while ending the poll" : "S'ha produït un error en finalitzar l'enquesta", + "An error occurred while deleting the poll draft" : "S'ha produït un error en suprimir l'esborrany de l'enquesta", + "Poll \"{name}\" was created by {user}. Click to vote" : "L'enquesta \"{name}\" l'ha creat {user}. Feu clic per votar", + "Failed to add reaction" : "No s'ha pogut afegir la reacció", + "Failed to remove reaction" : "No s'ha pogut suprimir la reacció", + "Error while uploading file \"{fileName}\"" : "Error en carregar el fitxer \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "No hi ha prou espai lliure per pujar el fitxer \"{fileName}\"", + "You are not allowed to share files" : "No teniu permís per compartir fitxers", + "Error while sharing file" : "Error en compartir el fitxer", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "El navegador que utilitzeu no és totalment compatible amb Nextcloud Talk. Feu servir la darrera versió de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["D'aquí a %n hora","d'aquí %n hores"], + "_%n minute _::_%n minutes_" : ["d'aquí a %n minut","%n minuts"], + "In {hours} and {minutes}" : "A {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["D'aquí a %n minut","d'aquí %n minuts"], + "Later today – {timeLocale}" : "Avui més tard: {timeLocale}", + "Tomorrow – {timeLocale}" : "Demà: {timeLocale}", + "This weekend – {timeLocale}" : "Aquest cap de setmana: {timeLocale}", + "Next week – {timeLocale}" : "La setmana següent: {timeLocale}", + "Message link copied to clipboard" : "S'ha copiat l'enllaç del missatge al porta-retalls", + "Conversation link copied to clipboard" : "L'enllaç de la conversa s'ha copiat al porta-retalls", + "The link could not be copied" : "No s'ha pogut copiar l'enllaç", + "Error while parsing a PROPFIND error" : "S'ha produït un error en analitzar un error PROPFIND", + "Sending signaling message has failed" : "No s'ha pogut enviar el missatge de senyalització", + "Lost connection to signaling server. Trying to reconnect." : "S'ha perdut la connexió al servidor de senyalització. S'està intentant tornar a connectar.", + "Lost connection to signaling server." : "S'ha perdut la connexió amb el servidor de senyalització.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de senyalització configurat s'ha d'actualitzar perquè sigui compatible amb aquesta versió de Converses. Si us plau, poseu-vos en contacte amb la vostre administració.", + "Please restart the app." : "Si us plau, reinicieu l'aplicació.", + "Please reload the page." : "Torneu a carregar la pàgina.", + "Please try to restart the app." : "Si us plau, prova de reiniciar l'aplicació.", + "Please try to reload the page." : "Si us plau, prova de tornar a carregar la pàgina.", + "Do not disturb" : "No molesteu", + "Away" : "Absent", + "Microphone {number}" : "Micròfon {number}", + "Camera {number}" : "Càmera {number}", + "Speaker {number}" : "Altaveu {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembla que esteu parlant mentre esteu silenciat/da, si us plau, deixeu de silenciar-vos perquè altres persones us puguin sentir", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No s'ha pogut establir una connexió amb almenys un participant. Pot ser que calgui un servidor TURN per a l'escenari. Demaneu a l'administrador que en configure un després segons {linkstart}aquesta documentació{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Això ja porta massa estona. Ja s'han acceptat (o rebutjat) els permisos multimèdia necessaris al vostre navegador/sistema? Si és així llavors reinicieu el navegador web, perquè estan fallant l'àudio i el vídeo", + "Access to microphone & camera is only possible with HTTPS" : "L'accés al micròfon i a la càmera només és possible amb HTTPS", + "Please move your setup to HTTPS" : "Heu de canviar la vostra configuració a HTTPS", + "Access to microphone & camera was denied" : "S'ha denegat l'accés al micròfon i a la càmera", + "WebRTC is not supported in your browser" : "WebRTC no és compatible amb el vostre navegador", + "Please use a different browser like Firefox or Chrome" : "Si us plau, utilitzeu un navegador diferent, com Firefox o Chrome", + "Error while accessing microphone & camera" : "S'ha produït un error en accedir al micròfon i a la càmera", + "%s Talk on your mobile devices" : "%s Talk als vostres dispositius mòbils", + "Join conversations at any time, anywhere, on any device." : "Uneix-te a les converses en qualsevol moment, en qualsevol lloc, i en qualsevol dispositiu.", + "Android app" : "Aplicació d'Android", + "iOS app" : "aplicació d'iOS", + "__language_name__" : "__language_name__", + "Webhook Demo" : "Demostració de Webhook", + "Call summary (%s)" : "Resum de la trucada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "El bot de resum de trucades publica un missatge de visió general després de la trucada amb una llista de tots els participants i exposant les tasques", + "Tasks" : "Tasques", + "Notes" : "Notes", + "Reports" : "Informes", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Resum de la trucada", + "Call summary - {title}" : "Resum de la trucada: {title}", + "Talk conversation for event" : "Converses per a l'esdeveniment", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push està instal·lat, això millora el rendiment dels clients d'escriptori.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} no està instal·lat, això pot provocar problemes de rendiment quan s'utilitzen clients d'escriptori.", + "Next meeting" : "Propera reunió", + "Join conversations from remote Nextcloud servers" : "Uniu-vos a converses des de servidors remots de Nextcloud", + "Your default media state has been saved" : "El vostre estat multimèdia predeterminat s'ha desat", + "Set reminder for later today" : "Estableix un recordatori per a més tard avui", + "Set reminder for tomorrow" : "Estableix un recordatori per a demà", + "Set reminder for this weekend" : "Estableix un recordatori per a aquest cap de setmana", + "Set reminder for next week" : "Estableix un recordatori per a la setmana següent", + "Generate summary" : "Generar resum", + "Open poll • You voted already" : "Enquesta oberta • Ja heu votat", + "Open poll • Click to vote" : "Enquesta oberta • Feu clic per votar", + "Poll • Ended" : "Enquesta • Finalitzada", + "Talk recording from {time} ({conversation})" : "Enregistrament de conversa des de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultats de l'enquesta • %n vot","Resultats de l'enquesta • %n vots"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquesta oberta • %n vot","Enquesta oberta • %n vots"], + "Submit vote" : "Enviar vot", + "Your privacy setting has been saved" : "Els vostres paràmetres de privadesa s'ha desat", + "Your personal setting has been saved" : "La teva configuració personal s'ha desat", + "Failed to save sounds setting" : "No s'han pogut desar els paràmetres dels sons", + "Sounds setting saved" : "S'ha desat els paràmetres de sons", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Converses s'ha actualitzat, no pots iniciar ni unir-te a una trucada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "S’ha unit a la conversa en una altra finestra o dispositiu. Actualment no és compatible amb Nextcloud Talk, de manera que aquesta sessió s'ha tancat.", + "Nextcloud Talk was updated." : "Nextcloud Talk s'ha actualitzat.", + "Nextcloud is in maintenance mode." : "Nextcloud està en mode de manteniment.", + "Nextcloud Talk Federation was updated." : "Nextcloud Converses Federació s'ha actualitzat." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ca.json b/l10n/ca.json new file mode 100644 index 0000000..1773346 --- /dev/null +++ b/l10n/ca.json @@ -0,0 +1,1984 @@ +{ "translations": { + "a conversation" : "una conversa", + "(Duration %s)" : "(Durada %s)", + "You attended a call with {user1}" : "Vau atendre una trucada amb {user1}", + "_%n guest_::_%n guests_" : ["%n invitat","%n convidats"], + "You attended a call with {user1} and {user2}" : "Vau atendre una trucada amb {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Vau atendre una trucada amb {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Vau atendre una trucada amb {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Vau atendre una trucada amb {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["altres %n","altres %n"], + "{actor} invited you to {call}" : "{actor} us ha convidat a {call}", + "You were invited to a conversation or had a call" : "Us han convidat a una conversa o heu rebut una trucada", + "Other activities" : "Altres activitats", + "Talk" : "Converses", + "Guest" : "Convidat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Benvingut a Nextcloud Parla!\n\nEn aquesta conversa se us informarà sobre les noves característiques a Parla.", + "## New in Talk %s" : "## Novetat a Converses %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Ja es poden emprar Microsoft Edge i Safari per participar en trucades d'àudio i vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Les converses individuals ara són persistents i ja no es poden convertir en converses de grup per accident. A més, quan un dels participants abandona la conversa, la conversa ja no se suprimeix automàticament. Només si els dos participants marxen, la conversa se suprimirà del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Podeu notificar ara a tots els participants al xat amb el comodí \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Usant la tecla de \"fletxa-amunt\" recupereu el vostre darrer missatge per tornar a enviar-ho", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ara permet emprar comandaments, envieu \"/help\" com un missatge al xat per veure si el vostre administrador n'ha configurat algun", + "- With projects you can create quick links between conversations, files and other items" : "- Amb els projectes podeu crear ràpidament enllaços entre converses, fitxers i altres elements a Nextcloud", + "- You can now mention guests in the chat" : "- Ara ja podeu esmentar convidats al xat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Les converses ara poden tenir un vestíbul. Això permetrà als moderadors unir-se al xat i trucar ja per preparar la reunió, mentre que els usuaris i convidats han d'esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ara podeu respondre directament als missatges que donen als altres usuaris més context quant a el que el seu missatge es tracta", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La recerca de converses i participants ara també filtrarà les converses existents, el que fa que sigui molt més fàcil trobar converses anteriors", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ara podeu afegir grups d'usuaris personalitzats a les converses quan s'instal·li l'aplicació cercles", + "- Check out the new grid and call view" : "- Reviseu la nova quadrícula i la visualització de trucades", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ara pot pujar i arrossegar arxius directament des del seu dispositiu al xat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Els fitxers compartits s'obren ara directament dins de la vista de xat amb les aplicacions de visualització", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ara podeu cercar xats i missatges a la cerca unificada de la barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Salpebreu els vostres missatges amb emojis del selector d'emojis", + "- You can now change your camera and microphone while being in a call" : "- Ara pots canviar la càmera i el micròfon mentre estàs en una trucada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Contextualitza les teves converses amb una descripció i obre-la perquè els usuaris iniciats la puguin trobar i unir-se", + "- See a read status and send failed messages again" : "- Veure un estat de lectura i tornar a enviar missatges fallits", + "- Raise your hand in a call with the R key" : "- Alceu la mà en una trucada amb la tecla R", + "- Join the same conversation and call from multiple devices" : "- Uneix-te a la mateixa conversa i truca des de diversos dispositius", + "- Send voice messages, share your location or contact details" : "- Envia missatges de veu, comparteix la teva ubicació o detalls de contacte", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Afegiu grups a una conversa i els nous membres del grup s'afegiran automàticament com a participants", + "- A preview of your audio and video is shown before joining a call" : "- Es mostra una vista prèvia del vostre àudio i vídeo abans d'unir-vos a una trucada", + "- You can now blur your background in the newly designed call view" : "- Ara podeu desdibuixar el vostre fons a la vista de trucades recent dissenyada", + "- Moderators can now assign general and individual permissions to participants" : "- Els moderadors ara poden assignar permisos generals i individuals als participants", + "- You can now react to chat messages" : "- Ara podeu reaccionar als missatges de xat", + "- In the sidebar you can now find an overview of the latest shared items" : "- A la barra lateral ara podeu trobar una visió general dels darrers elements compartits", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilitzeu una enquesta per recollir les opinions dels altres o establir una data", + "- Configure an expiration time for chat messages" : "- Configureu un temps de caducitat per als missatges de xat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicieu trucades sense avisar els altres en converses grans. Podeu enviar notificacions de trucades individuals un cop s'hagi iniciat la trucada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envia missatges de xat sense avisar als destinataris en cas que no sigui urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Ara els emojis es poden completar automàticament escrivint un \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enllaceu diversos elements mitjançant el nou selector intel·ligent escrivint un \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Els moderadors ara poden crear sales de treball (requereix el rerefons d'alt rendiment)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Ara es poden gravar les trucades (requereix el rerefons d'alt rendiment)", + "- Conversations can now have an avatar or emoji as icon" : "- Les converses ara poden tenir un avatar o una emoticona com a icona", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ara hi ha fons virtuals disponibles a més del fons borrós de les videotrucades", + "- Reactions are now available during calls" : "- Les reaccions ara estan disponibles durant les trucades", + "- Typing indicators show which users are currently typing a message" : "- Els indicadors d'escriptura mostren quins usuaris estan escrivint un missatge", + "- Groups can now be mentioned in chats" : "- Els grups ara es poden esmentar als xats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Els enregistraments de trucades es transcriuen automàticament si es registra una aplicació de proveïdor de transcripcions", + "- Chat messages can be translated if a translation provider app is registered" : "- Els missatges de xat es poden traduir si una aplicació de proveïdor de traducció està registrada", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** ara es pot utilitzar als missatges de _xat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Ara hi ha webhooks disponibles per implementar bots. Consulteu la documentació per obtenir més informació https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Establiu un recordatori en un missatge de xat per ser notificat més tard de nou", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utilitza la conversa **Nota per a mi mateix** per prendre notes i compartir informació entre els teus dispositius", + "- Captions allow to send a message with a file at the same time" : "- Els subtítols permeten enviar un missatge amb un fitxer al mateix temps", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- El vídeo de l'altaveu ara és visible mentre es comparteix la pantalla i les reaccions de trucada estan animades", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Ara els autors i moderadors registrats poden editar els missatges durant 6 hores", + "- Unsent message drafts are now saved in your browser" : "- Els esborranys de missatges no enviats ara es guarden al vostre navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- El xat de text ara es pot fer de manera federada amb altres servidors de Converses", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Els moderadors ara poden prohibir els comptes i els convidats per evitar que es tornin a unir a una conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Les trucades properes d'esdeveniments del calendari enllaçats i els substituts fora de l'oficina ara es mostren a les converses", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Les trucades ara es poden fer de manera federada amb altres servidors Talk (requereix el rerefons d'alt rendiment)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentació del client d'escriptori Nextcloud Converses per a Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resumiu els enregistraments de trucades i missatges no llegits als xats amb l'Assistent de Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reunions millorades amb el reconeixement dels convidats convidats a través de la seva adreça de correu electrònic, importació de llistes de participants, esborranys per a enquestes i descàrrega de llistes de participants de trucades", + "- Archive conversations to stay focused" : "- Arxiva les converses per mantenir la concentració", + "- Schedule a meeting into your calendar from within a conversation" : "- Programeu una reunió al vostre calendari des d'una conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cerca missatges de la conversa actual directament a la barra lateral dreta", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vegeu més converses a primera vista amb la nova llista compacta (activa a la configuració de Converses)", + "_All %n participant_::_All %n participants_" : ["Tots el %n participant","Tots els %n participants"], + "Talk updates ✅" : "Actualitzacions de Talk ✅", + "Reaction deleted by author" : "Reacció suprimida per l'autor", + "{actor} created the conversation" : "{actor} ha creat la conversa", + "You created the conversation" : "Heu creat la conversa", + "System created the conversation" : "El sistema ha creat la conversa", + "An administrator created the conversation" : "Un administrador ha creat la conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha canviat el nom de la conversa de «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Heu canviat el nom de la conversa de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador ha canviat el nom de la conversa de \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} defineix la descripció", + "You set the description" : "Tu estableixes la descripció", + "An administrator set the description" : "Un administrador ha establert la descripció", + "{actor} removed the description" : "{actor} ha eliminat la descripció", + "You removed the description" : "Has eliminat la descripció", + "An administrator removed the description" : "Un administrador ha eliminat la descripció", + "You started a silent call" : "Has iniciat una trucada silenciosa", + "Outgoing silent call" : "Trucada silenciosa sortint", + "{actor} started a silent call" : "{actor} ha iniciat una trucada silenciosa", + "Incoming silent call" : "Trucada silenciosa entrant", + "You started a call" : "Heu iniciat una trucada", + "Outgoing call" : "Trucada sortint", + "{actor} started a call" : "{actor} ha iniciat una trucada", + "Incoming call" : "Trucada entrant", + "{actor} joined the call" : "{actor} s'ha unit a la trucada", + "You joined the call" : "Us heu unit a la trucada", + "{actor} left the call" : "{actor} ha deixat la trucada", + "You left the call" : "Heu deixat la trucada", + "{actor} unlocked the conversation" : "{actor} ha desblocat la conversa", + "You unlocked the conversation" : "Heu desblocat la conversa", + "An administrator unlocked the conversation" : "Un administrador ha desbloquejat la conversa", + "{actor} locked the conversation" : "{actor} ha blocat la conversa", + "You locked the conversation" : "Heu blocat la conversa", + "An administrator locked the conversation" : "Un administrador ha blocat la conversa", + "{actor} limited the conversation to the current participants" : "{actor} ha limitat la conversa als participants actuals", + "You limited the conversation to the current participants" : "Has limitat la conversa als participants actuals", + "An administrator limited the conversation to the current participants" : "Un administrador ha limitat la conversa als participants actuals", + "{actor} opened the conversation to registered users" : "{actor} ha obert la conversa als usuaris registrats", + "You opened the conversation to registered users" : "Has obert la conversa als usuaris registrats", + "An administrator opened the conversation to registered users" : "Un administrador va obrir la conversa als usuaris registrats", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} va obrir la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "You opened the conversation to registered users and users created with the Guests app" : "Has obert la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrador va obrir la conversa als usuaris registrats i als usuaris creats amb l'aplicació Convidats", + "The conversation is now open to everyone" : "Ara la conversa està oberta a tothom", + "{actor} opened the conversation to everyone" : "{actor} ha obert la conversa a tothom", + "You opened the conversation to everyone" : "Heu obert la conversa a tothom", + "{actor} restricted the conversation to moderators" : "{actor} ha restringit la conversa als moderadors", + "You restricted the conversation to moderators" : "Heu restringit la conversa als moderadors", + "{actor} started breakout rooms" : "{actor} ha començat les sales de grup", + "You started breakout rooms" : "Has començat a les sales de grup", + "{actor} stopped breakout rooms" : "{actor} han aturat les sales de grup", + "You stopped breakout rooms" : "Has aturat les sales de descans", + "{actor} allowed guests" : "{actor} ha permès convidats", + "You allowed guests" : "Heu permès convidats", + "An administrator allowed guests" : "Un administrador ha permès convidats", + "{actor} disallowed guests" : "{actor} ha deixat de permetre convidats", + "You disallowed guests" : "Heu deixat de permetre convidats", + "An administrator disallowed guests" : "Un administrador no permet convidats", + "{actor} set a password" : "{actor} a establert una contrasenya", + "You set a password" : "Heu establert una contrasenya", + "An administrator set a password" : "Un administrador ha definit una contrasenya", + "{actor} removed the password" : "{actor} ha tret la contrasenya", + "You removed the password" : "Heu tret la contrasenya", + "An administrator removed the password" : "Un administrador ha suprimit la contrasenya", + "{actor} added {user}" : "{actor} ha afegit a {user}", + "You joined the conversation" : "Us heu sumat a la conversa", + "{actor} joined the conversation" : "{actor} s'ha sumat a la conversa", + "You added {user}" : "Heu afegit a {user}", + "{actor} added you" : "{actor} us ha afegit", + "An administrator added you" : "Un administrador us ha afegit", + "An administrator added {user}" : "Un administrador ha afegit a {user}", + "You left the conversation" : "Heu deixat la conversa", + "{actor} left the conversation" : "{actor} ha deixat la conversa", + "{actor} removed {user}" : "{actor} ha fet fora a {user}", + "You removed {user}" : "Heu fet fora a {user}", + "{actor} removed you" : "{actor} us ha fet fora", + "An administrator removed you" : "Un administrador us ha suprimit", + "An administrator removed {user}" : "Un administrador ha suprimit a {user}", + "{actor} invited {federated_user}" : "{actor} ha convidat {federated_user}", + "You invited {federated_user}" : "Has convidat {federated_user}", + "You accepted the invitation" : "Heu acceptat aquesta invitació", + "{actor} invited you" : "{actor} t'ha convidat", + "An administrator invited you" : "Un administrador t'ha convidat", + "An administrator invited {federated_user}" : "Un administrador ha convidat {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha acceptat la invitació", + "{actor} removed {federated_user}" : "{actor} ha eliminat {federated_user}", + "You removed {federated_user}" : "Has eliminat {federated_user}", + "You declined the invitation" : "Heu rebutjat aquesta invitació", + "An administrator removed {federated_user}" : "Un administrador ha eliminat {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha rebutjat la invitació", + "{actor} added group {group}" : "{actor} ha afegit el grup {group}", + "You added group {group}" : "Heu afegit el grup {group}", + "An administrator added group {group}" : "Un administrador ha afegit el grup {group}", + "{actor} removed group {group}" : "{actor} ha suprimit el grup {group}", + "You removed group {group}" : "Heu suprimit el grup {group}", + "An administrator removed group {group}" : "Un administrador ha eliminat el grup {group}", + "{actor} added team {circle}" : "{actor} ha afegit l'equip {circle}", + "You added team {circle}" : "Heu afegit l'equip {circle}", + "An administrator added team {circle}" : "Un administrador ha afegit l'equip {circle}", + "{actor} removed team {circle}" : "{actor} equip eliminat {circle}", + "You removed team {circle}" : "Has eliminat l'equip {circle}", + "An administrator removed team {circle}" : "Un administrador ha eliminat l'equip {circle}", + "{actor} added {phone}" : "{actor} ha afegit {phone}", + "You added {phone}" : "Heu afegit {phone}", + "An administrator added {phone}" : "Un administrador ha afegit {phone}", + "{actor} removed {phone}" : "{actor} ha eliminat {phone}", + "You removed {phone}" : "Has eliminat {phone}", + "An administrator removed {phone}" : "Un administrador ha eliminat {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha promogut {user} a moderador", + "You promoted {user} to moderator" : "Heu promogut {user} a moderador", + "{actor} promoted you to moderator" : "{actor} us ha promogut a moderador", + "An administrator promoted you to moderator" : "Un administrador us ha promogut com a moderador", + "An administrator promoted {user} to moderator" : "Un administrador ha promogut a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} li ha tret el rol de moderador a {user}", + "You demoted {user} from moderator" : "Li heu tret el rol de moderador a {user}", + "{actor} demoted you from moderator" : "{actor} us ha tret el rol de moderador", + "An administrator demoted you from moderator" : "Un administrador us ha degradat de moderador", + "An administrator demoted {user} from moderator" : "Un administrador va degradar a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} va compartir un fitxer que ja no està disponible", + "You shared a file which is no longer available" : "Vau compartir un fitxer que ja no està disponible", + "File shares are currently not supported in federated conversations" : "Actualment no s'admeten els recursos compartits de fitxers a les converses federades", + "The shared location is malformed" : "La ubicació compartida té un format incorrecte", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurat Matterbridge per sincronitzar aquesta conversa amb altres xats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Has configurat Matterbridge per sincronitzar aquesta conversa amb altres xats", + "{actor} updated the Matterbridge configuration" : "{actor} ha actualitzat la configuració de Matterbridge", + "You updated the Matterbridge configuration" : "Heu actualitzat la configuració de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ha eliminat la configuració de Matterbridge", + "You removed the Matterbridge configuration" : "Heu eliminat la configuració de Matterbridge", + "{actor} started Matterbridge" : "{actor} va iniciar Matterbridge", + "You started Matterbridge" : "Vas començar Matterbridge", + "{actor} stopped Matterbridge" : "{actor} va aturar Matterbridge", + "You stopped Matterbridge" : "Vas aturar Matterbridge", + "{actor} deleted a message" : "{actor} ha suprimit un missatge", + "You deleted a message" : "Has suprimit un missatge", + "{actor} edited a message" : "{actor} ha editat un missatge", + "You edited a message" : "Has editat un missatge", + "{actor} deleted a reaction" : "{actor} ha suprimit una reacció", + "You deleted a reaction" : "Has suprimit una reacció", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Heu establert la caducitat del missatge en %n setmana","Heu establert la caducitat del missatge en %n setmanes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Heu establert la caducitat del missatge en %n dia","Heu establert la caducitat del missatge en %n dies"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Heu establert la caducitat del missatge en %n hores","Heu establert la caducitat del missatge en %n hores"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Heu establert la caducitat del missatge en %n minut","Heu establert la caducitat del missatge en %n minuts"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} estableix la caducitat del missatge en %n setmana","{actor} estableix la caducitat del missatge en %n setmanes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} defineix la caducitat del missatge en %n dia","{actor} estableix la caducitat del missatge en %n dies"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} defineix la caducitat del missatge en %n hora","{actor} defineix la caducitat del missatge en %n hores"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} defineix la caducitat del missatge en %n minut","{actor} defineix la caducitat del missatge en %n minuts"], + "{actor} disabled message expiration" : "{actor} ha desactivat la caducitat del missatge", + "You disabled message expiration" : "Heu desactivat la caducitat del missatge", + "{actor} cleared the history of the conversation" : "{actor} ha esborrat l'historial de la conversa", + "You cleared the history of the conversation" : "Has esborrat l'historial de la conversa", + "{actor} set the conversation picture" : "{actor} defineix la imatge de la conversa", + "You set the conversation picture" : "Tu has configurat la imatge de la conversa", + "{actor} removed the conversation picture" : "{actor} ha eliminat la imatge de la conversa", + "You removed the conversation picture" : "Has eliminat la imatge de la conversa", + "{actor} ended the poll {poll}" : "{actor} ha acabat l'enquesta {poll}", + "You ended the poll {poll}" : "Has acabat l'enquesta {poll}", + "{actor} started the video recording" : "{actor} va iniciar la gravació del vídeo", + "You started the video recording" : "Has començat la gravació del vídeo", + "{actor} stopped the video recording" : "{actor} ha aturat la gravació del vídeo", + "You stopped the video recording" : "Has aturat la gravació del vídeo", + "{actor} started the audio recording" : "{actor} va iniciar la gravació d'àudio", + "You started the audio recording" : "Has començat la gravació d'àudio", + "{actor} stopped the audio recording" : "{actor} ha aturat la gravació d'àudio", + "You stopped the audio recording" : "Has aturat la gravació d'àudio", + "The recording failed" : "La gravació ha fallat", + "Someone voted on the poll {poll}" : "Algú ha votat a l'enquesta {poll}", + "Message deleted by author" : "Missatge suprimit per l'autor", + "Message deleted by {actor}" : "Missatge suprimit per {actor}", + "Message deleted by you" : "Missatge suprimit per tu", + "Deleted user" : "Usuari suprimit", + "Unknown number" : "Número desconegut", + "Administration" : "Administració", + "System" : "Sistema", + "%s (guest)" : "%s (convidat)", + "Missed call" : "Trucada perduda", + "Call ended (Duration {duration})" : "Trucada finalitzada (durada {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha finalitzat la trucada (durada {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La trucada amb %n convidat s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})","La trucada amb %n convidats s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (durada {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Trucada amb %n convidat finalitzada (Durada {duration})","Trucada amb %n convidats finalitzada (durada {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha finalitzat la trucada amb %n convidat (Durada {duration})","{actor} ha finalitzat la trucada amb %n convidats (Durada {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1} ended (Duration {duration})" : "Trucada amb {user1} finalitzada (Durada {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1} (Durada {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1} i {user2} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Trucada amb {user1} i {user2} finalitzada (durada {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1} i {user2} (Durada {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2} i {user3} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Trucada amb {user1}, {user2} i {user3} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1}, {user2} i {user3} (Durada {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2}, {user3} i {user4} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Trucada amb {user1}, {user2}, {user3} i {user4} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha finalitzat la trucada amb {user1}, {user2}, {user3} i {user4} (Durada {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La trucada amb {user1}, {user2}, {user3}, {user4} i {user5} s'ha finalitzat, ja que s'ha arribat a la durada màxima de la trucada (Durada {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Trucada amb {user1}, {user2}, {user3}, {user4} i {user5} finalitzada (durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} va finalitzar la trucada amb {user1}, {user2}, {user3}, {user4} i {user5} (Durada {duration})", + "Message of {user} in {conversation}" : "Missatge de {user} a {conversation}", + "Message of {user}" : "Missatge de {user}", + "Message of a deleted user in {conversation}" : "Missatge d'un usuari suprimit a {conversation}", + "Talk conversations" : "Converses", + "Talk to %s" : "Trucada a %s", + "An error occurred. Please contact your administrator." : "Hi ha hagut un error. Poseu-vos en contacte amb el vostre administrador.", + "File not found" : "No s'ha trobat el fitxer", + "File is not shared, or shared but not with the user" : "El fitxer no és compartit, o ho és però no amb l'usuari", + "No account available to delete." : "No hi ha cap compte disponible per suprimir.", + "Poll" : "Enquesta", + "Password needs to be set" : "S'ha d'establir la contrasenya", + "Uploading the file failed" : "No s'ha pogut carregar el fitxer", + "No image file provided" : "No s'ha proporcionat cap imatge o fitxer", + "File is too big" : "El fitxer és massa gran", + "Invalid file provided" : "El fitxer proporcionat no és vàlid", + "Invalid image" : "La imatge no és vàlida", + "Unknown filetype" : "Tipus de fitxer desconegut", + "Talk mentions" : "Mencions de Talk", + "More conversations" : "Més converses", + "Say hi to your friends and colleagues!" : "Saludeu els vostres amics i col·legues!", + "No unread mentions" : "No hi ha mencions no llegides", + "Call in progress" : "S'està fent una trucada", + "You were mentioned" : "Se li va mencionar", + "Write to conversation" : "Escriu a la conversa", + "Writes event information into a conversation of your choice" : "Escriu informació de l'esdeveniment en una conversa de la vostra elecció", + "Missing email field in header line" : "Falta el camp de correu electrònic a la línia de capçalera", + "Following lines are invalid: %s" : "Les línies següents no són vàlides: %s", + "Conversation invitation" : "Invitació a conversar", + "Description" : "Descripció", + "You can also dial-in via phone with the following details" : "També podeu marcar per telèfon amb els detalls següents", + "Dial-in information" : "Informació de marcatge", + "Meeting ID" : "ID de la reunió", + "Your PIN" : "El teu PIN", + "Meeting" : "Reunió", + "Password request: %s" : "Petició de contrasenya: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Usuari (%s) suprimit", + "Failed to upload call recording" : "No s'ha pogut pujar l'enregistrament de la trucada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de gravació no ha pogut pujar l'enregistrament de la trucada {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "Share to chat" : "Comparteix per xatejar", + "Dismiss notification" : "Descarta la notificació", + "Call recording now available" : "Ja està disponible l'enregistrament de trucades", + "The recording for the call in {call} was uploaded to {file}." : "La gravació de la trucada a {call} s'ha penjat a {file}.", + "Transcript now available" : "Transcripció ja disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripció de la trucada a {call} s'ha penjat a {file}.", + "Failed to transcript call recording" : "No s'ha pogut transcriure l'enregistrament de la trucada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor no ha pogut transcriure l'enregistrament a {file} per a la trucada a {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "Call summary now available" : "Ja està disponible el resum de la trucada", + "The summary for the call in {call} was uploaded to {file}." : "El resum de la trucada a {call} s'ha penjat a {file}.", + "Failed to summarize call recording" : "No s'ha pogut resumir l'enregistrament de la trucada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor no ha pogut resumir l'enregistrament a {file} per a la trucada a {call}. Si us plau, poseu-vos en contacte amb l'administració.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} t'ha convidat a unir-te a {roomName} a {remoteServer}", + "Accept" : "Accepta", + "Decline" : "Rebutja", + "{user1} invited you to a federated conversation" : "{user1} t'ha convidat a una conversa federada", + "New message" : "Escriu un missatge", + "Reminder" : "Recordatori", + "Notification" : "Notificació", + "Reminder: You in {call}" : "Recordatori: tu a {call}", + "Reminder: {user} in {call}" : "Recordatori: {user} a {call}", + "Reminder: Deleted user in {call}" : "Recordatori: usuari suprimit a {call}", + "Reminder: {guest} (guest) in {call}" : "Recordatori: {guest} (convidat) a {call}", + "Reminder: Guest in {call}" : "Recordatori: convidat a {call}", + "{user} reacted with {reaction}" : "{user} ha reaccionat amb {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} ha reaccionat amb {reaction} a {call}", + "Deleted user reacted with {reaction} in {call}" : "L'usuari suprimit ha reaccionat amb {reaction} a {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidat) ha reaccionat amb {reaction} a {call}", + "Guest reacted with {reaction} in {call}" : "El convidat ha reaccionat amb {reaction} a {call}", + "{user} in {call}" : "{user} a {call}", + "Deleted user in {call}" : "Usuari suprimit a {call}", + "{guest} (guest) in {call}" : "{guest} (convidat) a {call}", + "Guest in {call}" : "Convidat a {call}", + "{user} sent you a private message" : "{user} us ha enviat un missatge privat", + "{user} sent a message in conversation {call}" : "{user} ha enviat un missatge a la conversa {call}", + "A deleted user sent a message in conversation {call}" : "Un usuari que va ser suprimit ha enviat un missatge a la conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) ha enviat un missatge a la conversa {call}", + "A guest sent a message in conversation {call}" : "Un convidat ha enviat un missatge a la conversa {call}", + "{user} replied to your private message" : "{user} ha respost al vostre missatge privat", + "{user} replied to your message in conversation {call}" : "{user} ha respost al vostre missatge a la conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuari que va ser suprimit ha respost al vostre missatge a la conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidat) ha respost al vostre missatge a la conversa {call}", + "A guest replied to your message in conversation {call}" : "Un usuari convidat ha respost al vostre missatge a la conversa {call}", + "Reminder: You in private conversation {call}" : "Recordatori: estàs en una conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Recordatori: un usuari suprimit en una conversa privada {call}", + "Reminder: {user} in private conversation" : "Recordatori: {user} en conversa privada", + "Reminder: You in conversation {call}" : "Recordatori: tu estàs a la conversa {call}", + "Reminder: {user} in conversation {call}" : "Recordatori: {user} a la conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Recordatori: un usuari suprimit a la conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Recordatori: {guest} (convidat) a la conversa {call}", + "Reminder: A guest in conversation {call}" : "Recordatori: un convidat a la conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} ha reaccionat amb {reaction} al teu missatge privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuari suprimit ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidat) ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidat ha reaccionat amb {reaction} al teu missatge a la conversa {call}", + "{user} mentioned you in a private conversation" : "{user} us ha mencionat en una conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} va mencionar el grup {group} a la conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} va mencionar l'equip {team} a la conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} ha mencionat tothom a la conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} us ha mencionat a la conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuari suprimit ha mencionat el grup {group} a la conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuari suprimit ha mencionat l'equip {team} a la conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuari suprimit ha mencionat tothom a la conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuari suprimit us ha mencionat a la conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidat) ha mencionat el grup {group} a la conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidat) va mencionar l'equip {team} a la conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidat) ha mencionat tothom a la conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) us ha mencionat a la conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Un convidat ha mencionat el grup {group} a la conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Un convidat va mencionar l'equip {team} a la conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Un convidat ha mencionat tothom a la conversa {call}", + "A guest mentioned you in conversation {call}" : "Un convidat us ha mencionat a la conversa {call}", + "View message" : "Visualitza el missatge", + "Dismiss reminder" : "Descarta el recordatori", + "View chat" : "Mostra el xat", + "{user} invited you to a group conversation: {call}" : "{user} us ha convidat a una conversa grupal: {call}", + "Join call" : "Uneix-te a la trucada", + "Answer call" : "Respon la trucada", + "{user} would like to talk with you" : "{user} vol parlar amb tu", + "Call back" : "Torna la trucada", + "You missed a call from {user}" : "Teniu una trucada perduda de {user}", + "A group call has started in {call}" : "S'ha iniciat una trucada grupal a {call}", + "You missed a group call in {call}" : "Teniu una trucada de grup perduda a {call}", + "{email} is requesting the password to access {file}" : "{email} està demanant la contrasenya per accedir a {file}", + "{email} tried to request the password to access {file}" : "{email} ha intentat sol·licitar la contrasenya per accedir a {file}", + "Someone is requesting the password to access {file}" : "Algú està demanant la contrasenya per accedir a {file}", + "Someone tried to request the password to access {file}" : "Algú ha intentat sol·licitar la contrasenya per accedir a {file}", + "Open settings" : "Obre els paràmetres", + "Hosted signaling server added" : "S'ha afegit un servidor de senyalització allotjat", + "The hosted signaling server is now configured and will be used." : "El servidor de senyalització allotjat ja està configurat i s'utilitzarà.", + "Hosted signaling server removed" : "S'ha eliminat el servidor de senyalització allotjat", + "The hosted signaling server was removed and will not be used anymore." : "El servidor de senyalització allotjat s'ha suprimit i ja no s'utilitzarà.", + "Hosted signaling server changed" : "S'ha canviat el servidor de senyalització allotjat", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "El compte del servidor de senyalització allotjat ha canviat l'estat de \"{oldstatus}\" a \"{newstatus}\".", + "pending" : "pendent", + "active" : "actiu", + "expired" : "caducat", + "blocked" : "bloquejat", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificat de {host} caduca d'aquí a {days} dies", + "The certificate of {host} expired" : "El certificat de {host} ha caducat", + "Contact via Talk" : "Contacta mitjançant Talk", + "Open Talk" : "Obre Talk", + "Default" : "Per defecte", + "Presentation" : "Presentació", + "Conversations" : "Converses", + "Messages in current conversation" : "Missatges de la conversa actual", + "{user}" : "{user}", + "Messages" : "Missatges", + "{user} in {conversation}" : "{user} a {conversation}", + "Messages in other conversations" : "Missatges en altres converses", + "One-to-one rooms always need to show the other users avatar" : "Les sales d'un a un sempre han de mostrar l'avatar dels altres usuaris", + "Invalid emoji character" : "Caràcter emoticona no vàlid", + "Invalid background color" : "Color de fons no vàlid", + "Avatar image is not square" : "La imatge de l'avatar no és quadrada", + "Room {number}" : "Sala {number}", + "Other" : "Altres", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No s'ha pogut sol·licitar la prova perquè el servidor de prova no és accessible. Torneu-ho a provar més tard.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hi ha un problema amb l'autenticació d'aquesta instància. Potser no es pot arribar des de l'exterior per verificar l’URL.", + "Something unexpected happened." : "Ha passat una cosa inesperada.", + "The URL is invalid." : "L'URL és invàlid.", + "An HTTPS URL is required." : "Cal un URL HTTPS.", + "The email address is invalid." : "L'adreça de correu electrònic no és vàlida.", + "The language is invalid." : "La llengua no és vàlida.", + "The country is invalid." : "El país no és vàlid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hi ha un problema amb la sol·licitud de la prova. Si us plau, comproveu els registres per obtenir més informació.", + "Too many requests are send from your servers address. Please try again later." : "S'envien massa sol·licituds des d'adreces dels seus servidors. Torneu-ho a provar més tard.", + "There is already a trial registered for this Nextcloud instance." : "Ja hi ha una prova registrada per a aquesta instància Nextcloud.", + "Something unexpected happened. Please try again later." : "Ha passat una cosa inesperada. Torneu-ho a provar més tard.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No s'ha pogut sol·licitar la prova perquè el servidor de prova s'ha comportat malament. Torneu-ho a provar més tard.", + "Trial requested but failed to get account information. Please check back later." : "S'ha sol·licitat la prova, però no s'ha pogut obtenir informació del compte. Torneu a comprovar-ho més tard.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hi ha un problema amb l'autenticació d'aquesta sol·licitud. Potser no es pot arribar des de l'exterior per verificar l'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No s'ha pogut obtenir la informació del compte perquè el servidor de prova s'ha comportat malament. Torneu a comprovar-ho més tard.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hi ha un problema amb l'obtenció de la informació del compte. Si us plau, comproveu els registres per obtenir més informació.", + "There is no such account registered." : "No hi ha aquest compte registrat.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No s'ha pogut obtenir la informació del compte perquè el servidor de prova no és accessible. Torneu a comprovar-ho més tard.", + "Deleting the hosted signaling server account failed. Please check back later." : "No s'ha pogut suprimir el compte del servidor de senyalització allotjat. Torneu a comprovar-ho més tard.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No s'ha pogut suprimir el compte perquè el servidor de prova s'ha comportat malament. Torneu a comprovar-ho més tard.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hi ha un problema en suprimir el compte. Si us plau, comproveu els registres per obtenir més informació.", + "Too many requests are sent from your servers address. Please try again later." : "S'envien massa sol·licituds des de l'adreça del vostre servidor. Siusplau, torneu-ho a provar més tard.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No s'ha pogut suprimir el compte perquè el servidor de prova no és accessible. Torneu a comprovar-ho més tard.", + "Note to self" : "Nota per a un mateix", + "A place for your private notes, thoughts and ideas" : "Un lloc per a les teves notes, pensaments i idees privades", + "Transcript is AI generated and may contain mistakes" : "La transcripció es genera amb intel·ligència artificial i pot contenir errors", + "Summary is AI generated and may contain mistakes" : "El resum es genera amb IA i pot contenir errors", + "Let's get started!" : "Comencem!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Converses** és una plataforma de comunicació segura i autoallotjada que s'integra perfectament amb l'ecosistema Nextcloud.\n\n#### Característiques clau de Nextcloud Converses:\n\n* Xateja i missatgeria en xats privats i de grup\n* Trucades de veu i videotrucades\n* Compartició de fitxers i integració amb altres aplicacions de Nextcloud\n* Configuració de conversa personalitzable, moderació i controls de privadesa\n* Web, escriptori i mòbil (iOS i Android)\n* Comunicació privada i segura\n\n Més informació a la [documentació de l'usuari](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Benvingut a Nextcloud Converses\n\nNextcloud Converses és una aplicació de missatgeria privada i potent que s'integra amb Nextcloud. Xateja en converses privades o en grup, col·labora mitjançant trucades de veu i videotrucades, organitza seminaris web i esdeveniments, personalitza les teves converses i molt més.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formateu textos per crear missatges rics\n\nA Nextcloud Converses, podeu utilitzar la sintaxi de Markdown per formatar els vostres missatges. Per exemple, apliqueu el format **negreta** o *cursiva*, o bé \"ressalteu textos com a codi\". Fins i tot podeu crear taules i afegir encapçalaments al vostre text.\n\nNecessites corregir una errada ortogràfica o canviar el format? Editeu el vostre missatge fent clic a \"Edita missatge\" al menú de missatges.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Afegeix fitxers adjunts i enllaços\n\nAdjunteu fitxers del vostre Nextcloud Hub mitjançant el botó \"+\". Comparteix elements de Files i de diverses aplicacions de Nextcloud. Algunes aplicacions fins i tot admeten ginys interactius, per exemple, l'aplicació Text.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Pots respondre missatges, reenviar-los a altres xats i persones, o copiar el contingut del missatge.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Fes més amb Smart Picker\n\nSimplement escriviu \"/\" o aneu al menú \"+\" per obrir el selector intel·ligent on podeu adjuntar diversos continguts als vostres missatges. Podeu configurar el selector intel·ligent per poder afegir elements d'aplicacions Nextcloud, GIF, ubicacions de mapes, contingut generat per IA i molt més.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestiona la configuració de la conversa\n\nAl menú de converses, podeu accedir a diverses configuracions per gestionar les vostres converses, com ara:\n* Edita la informació de la conversa\n* Gestiona les notificacions\n* Aplicar nombroses regles de moderació\n* Configura l'accés i la seguretat\n* Habilita els bots\n* i més!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirats Àrabs Units", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua i Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albània", + "Armenia" : "Armènia", + "Angola" : "Angola", + "Antarctica" : "Antàrtida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Nord-americana", + "Austria" : "Àustria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Illes Åland", + "Azerbaijan" : "Azerbaitjan", + "Bosnia and Herzegovina" : "Bòsnia i Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bèlgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgària", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermudes", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolívia, estat plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius i Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahames", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorússia", + "Belize" : "Belize", + "Canada" : "Canadà", + "Cocos (Keeling) Islands" : "Illes Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democràtica del", + "Central African Republic" : "República Centreafricana", + "Congo" : "Congo", + "Switzerland" : "Suïssa", + "Côte d'Ivoire" : "Costa d'Ivori", + "Cook Islands" : "Illes Cook", + "Chile" : "Xile", + "Cameroon" : "Camerun", + "China" : "Xina", + "Colombia" : "Colòmbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Christmas", + "Cyprus" : "Xipre", + "Czechia" : "Txèquia", + "Germany" : "Alemanya", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algèria", + "Ecuador" : "Equador", + "Estonia" : "Estònia", + "Egypt" : "Egipte", + "Western Sahara" : "Sàhara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "Espanya", + "Ethiopia" : "Etiòpia", + "Finland" : "Finlàndia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Illes Malvines (Falkland)", + "Micronesia, Federated States of" : "Micronèsia, Estats Federats de la", + "Faroe Islands" : "Illes Fèroe", + "France" : "França", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regne Unit de Gran Bretanya i Irlanda del nord", + "Grenada" : "Grenada", + "Georgia" : "Geòrgia", + "French Guiana" : "Guaiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlàndia", + "Gambia" : "Gàmbia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Equatorial", + "Greece" : "Grècia", + "South Georgia and the South Sandwich Islands" : "Illes Geòrgia del Sud i Sandwich del Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illes Heard i McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croàcia", + "Haiti" : "Haití", + "Hungary" : "Hongria", + "Indonesia" : "Indonèsia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Territori Britànic de l'Oceà Índic", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Islàndia", + "Italy" : "Itàlia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordània", + "Japan" : "Japó", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirguizistan", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "Saint Kitts i Nevis", + "Korea, Democratic People's Republic of" : "Corea, República Popular Democràtica de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Illes Caiman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "República Democràtica Popular Lao", + "Lebanon" : "Líban", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituània", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letònia", + "Libya" : "Líbia", + "Morocco" : "Marroc", + "Monaco" : "Mònaco", + "Moldova, Republic of" : "Moldàvia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sant Martí (part francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illes Marshall", + "North Macedonia" : "Macedònia del Nord", + "Mali" : "Mali", + "Myanmar" : "Birmània", + "Mongolia" : "Mongòlia", + "Macao" : "Macau", + "Northern Mariana Islands" : "Illes Marianes del Nord", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Illa de Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurici", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mèxic", + "Malaysia" : "Malàisia", + "Mozambique" : "Moçambic", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledònia", + "Niger" : "Níger", + "Norfolk Island" : "Illa Norfolk", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Països Baixos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Zelanda", + "Oman" : "Oman", + "Panama" : "Panamà", + "Peru" : "Perú", + "French Polynesia" : "Polinèsia Francesa", + "Papua New Guinea" : "Papua Nova Guinea", + "Philippines" : "Filipines", + "Pakistan" : "Pakistan", + "Poland" : "Polònia", + "Saint Pierre and Miquelon" : "Sant Pere i Miquelon", + "Pitcairn" : "Illes Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Estat de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Reunió", + "Romania" : "Romania", + "Serbia" : "Sèrbia", + "Russian Federation" : "Rússia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Aràbia Saudita", + "Solomon Islands" : "Illes Salomó", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Suècia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascensió i Tristan da Cunha", + "Slovenia" : "Eslovènia", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Eslovàquia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somàlia", + "Suriname" : "Surinam", + "South Sudan" : "Sudan del Sud", + "Sao Tome and Principe" : "São Tomé i Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (part holandesa)", + "Syrian Arab Republic" : "República Àrab Siriana", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Illes Turks i Caicos", + "Chad" : "Txad", + "French Southern Territories" : "Territoris Francesos del Sud", + "Togo" : "Togo", + "Thailand" : "Tailàndia", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunísia", + "Tonga" : "Tonga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinitat i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzània, República Unida de", + "Ukraine" : "Ucraïna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Illes Perifèriques Menors dels EUA", + "United States of America" : "Estats Units d'Amèrica", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Santa Seu", + "Saint Vincent and the Grenadines" : "Saint Vincent i les Grenadines", + "Venezuela, Bolivarian Republic of" : "Veneçuela, República Bolivariana de", + "Virgin Islands, British" : "Illes Verges britàniques", + "Virgin Islands, U.S." : "Illes Verges, EUA.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sud-àfrica", + "Zambia" : "Zàmbia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Desactiva el desenfocament de fons", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "No s'ha pogut comprovar el suport de càrrega de WASM. Comproveu manualment si el vostre servidor web ofereix fitxers `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "El vostre servidor web no està configurat correctament per lliurar fitxers `.wasm`. Això sol ser un problema amb la configuració de Nginx. Per al desenfocament de fons, necessita un ajust per oferir també fitxers `.wasm`. Compareu la vostra configuració de Nginx amb la configuració recomanada a la nostra documentació.", + "Talk configuration values" : "Valors de configuració de Converses", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forçar la durada d'una trucada només s'admet amb el cron del sistema. Si us plau, activeu el cron del sistema o elimineu la configuració `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Els valors petits de \"max_call_duration\" (actualment establerts en %d) no es poden aplicar a causa de limitacions tècniques. El treball en segon pla només s'executa cada 5 minuts, així que utilitzeu-lo sota el vostre risc.", + "Federation" : "Federació", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "És molt recomanable configurar \"memcache.locking\" quan la Federació de Converses estigui habilitada.", + "High-performance backend" : "Rerefons d'alt rendiment", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No s'ha configurat el rerefons d'alt rendiment: l'execució de Nextcloud Converses sense el rerefons d'alt rendiment només s'escala per a trucades molt petites (màx. 2-3 participants). Configureu el rerefons d'alt rendiment per garantir que les trucades amb diversos participants funcionin perfectament.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'execució del mode de rerefons d'alt rendiment \"conversation_cluster\" està obsolet i ja no s'admetrà a la propera versió. El rerefons d'alt rendiment admet actualment un clustering real que s'hauria d'utilitzar.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La definició de diversos rerefons d'alt rendiment està obsoleta i ja no s'admetrà a la propera versió. En lloc d'això, s'ha de configurar un equilibrador de càrrega juntament amb servidors de senyalització agrupats i configurar-lo a la configuració de Converses.", + "High-performance backend not configured correctly" : "El rerefons d'alt rendiment no s'ha configurat correctament", + "Error: Cannot connect to server" : "Error: no es pot connectar al servidor", + "Error: Server did not respond with proper JSON" : "Error: el servidor no ha respost amb el JSON adequat", + "Error: Certificate expired" : "Error: el certificat ha caducat", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: els temps del sistema del servidor Nextcloud i el servidor de fons d'alt rendiment no estan sincronitzats. Assegureu-vos que tots dos servidors estiguin connectats a un servidor d'hora o sincronitzeu manualment la seva hora.", + "Could not get version" : "No s'ha pogut obtenir la versió", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: versió en execució: {version}; El servidor s'ha d'actualitzar per ser compatible amb aquesta versió de Talk", + "Error: Server responded with: {error}" : "Error: el servidor ha respost amb: {error}", + "Error: Unknown error occurred" : "Error: s'ha produït un error desconegut", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Avís: Versió en execució: {version}; El servidor no admet totes les funcions d'aquesta versió de Converses, les funcions que falten: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "És molt recomanable configurar una memòria cau quan executeu Nextcloud Converses amb un rerefons d'alt rendiment.", + "Client Push" : "Client Push", + "Recording backend" : "Rerefons de gravació", + "Using the recording backend requires a High-performance backend." : "L'ús del rerefons de gravació requereix un rerefons d'alt rendiment.", + "No recording backend configured" : "No s'ha configurat cap rerefons de gravació", + "SIP configuration" : "Configuració SIP", + "Using the SIP functionality requires a High-performance backend." : "L'ús de la funcionalitat SIP requereix un rerefons d'alt rendiment.", + "No SIP backend configured" : "No s'ha configurat cap rerefons SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Data no vàlida, el format de la data ha de ser YYYY-MM-DD", + "Conversation not found" : "No s'ha trobat la conversa", + "Path is already shared with this conversation" : "El camí ja s'ha compartit amb aquesta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Xat, àudio i vídeo-conferència emprant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Xat, vídeo i àudio-conferència mitjançant WebRTC\n\n* 💬 **Xat** Nextcloud Converses inclou un xat de text senzill, que us permet compartir o carregar fitxers des de la vostra aplicació Nextcloud Fitxers o dispositiu local i esmentar altres participants.\n* 👥 **Trucades privades, de grup, públiques i protegides amb contrasenya!** Convida algú, un grup sencer o envia un enllaç públic per convidar a una trucada.\n* 🌐 **Xats federats** Xateja amb altres usuaris de Nextcloud als seus servidors\n* 💻 **Compartició de pantalla!** Comparteix la teva pantalla amb els participants de la trucada.\n* 🚀 **Integració amb altres aplicacions de Nextcloud** com Fitxers, Calendari, Estat de l'usuari, Tauler, Flow, Maps, Selector intel·ligent, Contactes, Targetes i molts més.\n* 🌉 **Sincronització amb altres solucions de xat** Amb [Matterbridge](https://github.com/42wim/matterbridge/) integrat a Converses, podeu sincronitzar fàcilment moltes altres solucions de xat amb Nextcloud Converses i viceversa.", + "Leave call" : "Abandona la trucada", + "Navigating away from the page will leave the call in {conversation}" : "La navegació fora de la pàgina deixarà la trucada a {conversation}", + "Stay in call" : "Estigues a la trucada", + "Discuss this file" : "Discuteix aquest fitxer", + "Share this file with others to discuss it" : "Comparteix aquest fitxer amb altres persones per discutir-ho", + "Share this file" : "Comparteix aquest fitxer", + "Join conversation" : "Uneix-te a la conversa", + "This conversation is password-protected." : "Aquesta conversa està protegida amb contrasenya.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hem detectat diversos intents de contrasenya no vàlids des de la teva IP. Per tant, el vostre proper intent s'accelera fins a 30 segons.", + "The password is wrong. Try again." : "La contrasenya no és correcta. Torneu-ho a provar.", + "Password" : "Contrasenya", + "Submit" : "Envia", + "Error requesting the password." : "No s'ha pogut sol·licitar la contrasenya.", + "Request password" : "Sol·licita contrasenya", + "This conversation has ended" : "Aquesta conversa s'ha acabat", + "Error occurred when joining the conversation" : "S'ha produït un error en unir-se a la conversa", + "Close Talk sidebar" : "Tanca la barra lateral de Talk", + "Open Talk sidebar" : "Obriu la barra lateral de Talk", + "Everyone" : "Tothom", + "Users and moderators" : "Usuaris i moderadors", + "Moderators only" : "Només els moderadors", + "Disable calls" : "Inhabilita les trucades", + "Save changes" : "Desa els canvis", + "Saving …" : "S'està desant …", + "Saved!" : "Desat!", + "Limit to groups" : "Limita a grups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quan al menys s'ha seleccionat un grup, només les persones dels grups llistats poden participar a les converses.", + "Guests can still join public conversations." : "Els convidats però poden sumar-se a les converses públiques.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Els usuaris que ja no puguin utilitzar Talk continuaran apareixent com a participants de les seves converses anteriors i també es conservaran els seus missatges de xat.", + "Limit using Talk" : "Limita l'ús de Talk", + "Limit creating a public and group conversation" : "Limitar la creació d'una conversa pública i de grup", + "Limit creating conversations" : "Limita la creació de converses", + "Limit starting a call" : "Limitar l'inici d'una trucada", + "Limit starting calls" : "Limitar l’iniciació de trucades", + "When a call has started, everyone with access to the conversation can join the call." : "Quan ha començat una trucada, tothom que tingui accés a la conversa pot afegir-s'hi.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Els robots següents estan instal·lats en aquest servidor. A la documentació podeu trobar detalls sobre com {linkstart1}crear el vostre propi robot{linkend} o una {linkstart2}llista de robots{linkend} per habilitar-los al vostre servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Els robots següents estan instal·lats en aquest servidor. A la documentació podeu trobar detalls sobre com {linkstart1}crear el vostre propi robot{linkend} o una {linkstart2}llista de robots{linkend} per habilitar-los al vostre servidor.", + "Description is not provided" : "No es proporciona la descripció", + "Locked for moderators" : "Bloquejat per als moderadors", + "Enabled" : "Habilitat", + "Disabled" : "Inhabilitat", + "Bots settings" : "Paràmetres dels bots", + "State" : "Estat", + "Name" : "Nom", + "Last error" : "Últim error", + "Total errors count" : "Nombre d’errors totals", + "Find more bots" : "Trobeu més robots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Els servidors de confiança es poden configurar a la {linkstart}pàgina de configuració per compartir{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Els xats i les trucades federades ja funcionen. La gestió dels fitxers adjunts arribarà en una versió futura.", + "Enable Federation in Talk app" : "Activa la federació a l'aplicació Converses", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permet que els usuaris siguin convidats a converses federades", + "Allow users to invite federated users into conversation" : "Permet als usuaris convidar usuaris federats a una conversa", + "Only allow to federate with trusted servers" : "Només permet federar-se amb servidors de confiança", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quan se selecciona almenys un grup, només les persones dels grups llistats poden convidar usuaris federats a converses.", + "Groups allowed to invite federated users" : "Els grups poden convidar usuaris federats", + "Select groups …" : "Selecció de grups …", + "All messages" : "Tots els missatges", + "@-mentions only" : "només mencions amb @", + "Off" : "Apagat", + "General settings" : "Paràmetres generals", + "Default notification settings" : "Paràmetres de notificacions per defecte", + "Default group notification" : "Notificació de grup per defecte", + "Default group notification for new groups" : "Notificació de grup per defecte per a grups nous", + "Integration into other apps" : "Integració en altres aplicacions", + "Allow conversations on files" : "Permet converses en fitxers", + "Allow conversations on public shares for files" : "Permetre converses en comparticions públiques per a fitxers", + "End-to-end encrypted calls" : "Trucades xifrades d'extrem a extrem", + "Enable encryption" : "Habilita el xifratge", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Les trucades xifrades d'extrem a extrem amb un pont SIP configurat requereixen una versió més recent del rerefons d'alt rendiment i del pont SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Els clients mòbils no admeten trucades xifrades d'extrem a extrem de moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En fer clic al botó que hi ha a sobre de la informació del formulari s'envia als servidors de Struktur AG. Podeu trobar més informació a {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendent", + "Error" : "Error", + "Blocked" : "Blocat", + "Active" : "Actiu", + "Expired" : "Caducat", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "No s'ha pogut sol·licitar la prova. Torneu-ho a provar més tard.", + "The account could not be deleted. Please try again later." : "No s'ha pogut suprimir el compte. Torneu-ho a provar més tard.", + "Hosted High-performance backend" : "Servidor rerefons d'alt rendiment", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "El nostre soci Struktur AG ofereix un servei on es pot sol·licitar un servidor de senyalització allotjat. Per a això només has d'omplir el següent formulari i el teu Nextcloud ho sol·licitarà. Un cop configurat el servidor, les credencials s'ompliran automàticament. Això sobreescriurà els paràmetres del servidor de senyalització existent.", + "URL of this Nextcloud instance" : "URL d'aquesta instància de Nextcloud", + "Full name of the user requesting the trial" : "Nom complet de l'usuari que sol·licita la prova", + "Email of the user" : "Enviar correu electrònic al nou usuari", + "Language" : "Llengua", + "Country" : "País", + "Request signaling server trial" : "Sol·licita la prova del servidor de senyalització", + "You can see the current status of your hosted signaling server in the following table." : "Podeu veure l'estat actual del servidor de senyalització allotjat a la taula següent.", + "Status" : "Estat", + "Created at" : "Creat a", + "Expires at" : "Venciment el", + "Limits" : "Límits", + "Yes" : "Sí", + "No" : "No", + "Delete the signaling server account" : "Suprimeix el compte del servidor de senyalització", + "_%n user_::_%n users_" : ["%n usuari","%n usuaris"], + "Installed version: {version}" : "Versió instal·lada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Podeu instal·lar Matterbridge per enllaçar Nextcloud Talk amb altres serveis, visiteu la seva {linkstart1}pàgina de GitHub{linkend} per obtenir més informació. Descarregar i instal·lar l'aplicació pot trigar una estona. En cas que s'acabi, instal·leu-lo manualment des de la {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "El binari de Matterbridge té permisos incorrectes. Assegureu-vos que el fitxer binari Matterbridge és propietat de l'usuari correcte i es pot executar. Es pot trobar a \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "No s'ha trobat el binari de Matterbridge o no s'ha pogut executar.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "També podeu establir el camí cap al binari de Matterbridge manualment a través de la configuració. Comproveu la {linkstart}documentació d'integració de Matterbridge{linkend} per obtenir més informació.", + "Downloading …" : "S'està baixant …", + "Install Talk Matterbridge" : "Instal·la Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "S'ha produït un error en instal·lar l'aplicació Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "S'ha produït un error en instal·lar el Parla Matterbridge. Si us plau, instal·leu-lo manualment", + "Failed to execute Matterbridge binary." : "No s'ha pogut executar el binari de Matterbridge.", + "Matterbridge integration" : "Integració de Matterbridge", + "Enable Matterbridge integration" : "Habilita la integració de Matterbridge", + "Status: Checking connection" : "Estat: Comprovant la connexió", + "OK: Running version: {version}" : "D'acord: versió en execució: {version}", + "Error: Server seems to be a Signaling server" : "Error: el servidor sembla ser un servidor de senyalització", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: els temps del sistema del servidor Nextcloud i el servidor de fons de gravació no estan sincronitzats. Assegureu-vos que tots dos servidors estiguin connectats a un servidor d'hora o sincronitzeu manualment la seva hora.", + "Recording backend URL" : "Enregistrament de l'URL del rerefons", + "Validate SSL certificate" : "Validar certificat SSL", + "Delete this server" : "Suprimeix aquest servidor", + "Test this server" : "Prova aquest servidor", + "Disabled for all calls" : "Desactivat per a totes les trucades", + "Enabled for all calls" : "Habilitat per a totes les trucades", + "Configurable on conversation level by moderators" : "Configurable a nivell de conversa pels moderadors", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Els paràmetres de PHP \"upload_max_filesize\" o \"post_max_size\" només permetrà carregar fitxers fins a {maxUpload}.", + "Recording backend settings saved" : "S'ha desat el paràmetre del rerefons de gravació", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Els moderadors podran habilitar el consentiment a nivell de conversa. El consentiment per ser gravat serà necessari per a cada participant abans d'unir-se a cada trucada d'aquesta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "El consentiment per ser gravat serà necessari per a cada participant abans d'unir-se a cada trucada.", + "The consent to be recorded is not required." : "No cal el consentiment per ser gravat.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuració del rerefons de gravació només és possible amb un rerefons d'alt rendiment.", + "Add a new recording backend server" : "Afegiu un nou servidor de rerefons de gravació", + "Shared secret" : "Clau secreta compartida", + "Recording consent" : "Consentiment de gravació", + "Recording transcription" : "Enregistrament de la transcripció", + "Automatically transcribe call recordings with a transcription provider" : "Transcriu automàticament els enregistraments de trucades amb un proveïdor de transcripcions", + "Automatically summarize call recordings with transcription and summary providers" : "Resumeix automàticament els enregistraments de trucades amb proveïdors de transcripció i resum", + "SIP configuration saved!" : "Configuració SIP desada!", + "SIP configuration is only possible with a High-performance backend." : "La configuració SIP només és possible amb un rerefons d'alt rendiment.", + "Enable SIP Dial-out option" : "Habilita l'opció de marcatge SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "El servidor de senyalització s'ha d'actualitzar a la funció de marcatge SIP compatible.", + "Restrict SIP configuration" : "Restringeix la configuració SIP", + "Enable SIP configuration" : "Habilita la configuració SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Només els usuaris dels grups següents poden habilitar SIP a les converses que moderin", + "Phone number (Country)" : "Número de telèfon (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Aquesta informació s'envia als correus electrònics d'invitació i es mostra a la barra lateral a tots els participants.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL del rerefons de Converses", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Funcions disponibles", + "Error: Websocket connection failed. Check browser console" : "Error: la connexió de Websocket ha fallat. Comproveu la consola del navegador", + "High-performance backend URL" : "URL del rerefons d'alt rendiment", + "Missing High-performance backend warning hidden" : "Falta l'advertiment de rerefons d'alt rendiment amagat", + "High-performance backend settings saved" : "S'ha desat els paràmetres del rerefons d'alt rendiment", + "Nextcloud Talk setup not complete" : "La configuració de Nextcloud Converses no s'ha completat", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tingueu en compte que a les trucades amb més de 2 participants sense el rerefons d'alt rendiment, és probable que els participants experimentin problemes de connectivitat i causen una càrrega elevada als dispositius participants.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instal·leu el rerefons d'alt rendiment per garantir que les trucades amb diversos participants funcionin perfectament.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Guia d'instal·lació ràpida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "El rerefons d'alt rendiment és necessari per a trucades i converses amb diversos participants. Sense el rerefons, tots els participants han de penjar el seu propi vídeo individualment per a cada altre participant, cosa que probablement causarà problemes de connectivitat i una càrrega elevada als dispositius participants.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "És molt recomanable configurar una memòria cau distribuïda quan utilitzeu Nextcloud Talk amb un rerefons d'alt rendiment.", + "Add High-performance backend server" : "Afegiu un servidor rerefons d'alt rendiment", + "Warn about connectivity issues in calls with more than 2 participants" : "Adverteix sobre problemes de connectivitat a les trucades amb més de 2 participants", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "L'adreça del servidor no és vàlida", + "STUN settings saved" : "S'han desat els paràmetres de STUN", + "STUN servers" : "Servidors STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "S'utilitza un servidor STUN per determinar l'adreça IP pública dels participants que siguin darrera d'un router.", + "Add a new STUN server" : "Afegeix un nou servidor STUN", + "{schema} scheme must be used with a domain" : "L'esquema {schema} s'ha d'utilitzar amb un domini", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "Només {option}", + "OK: Successful ICE candidates returned by the TURN server" : "D'acord: Els candidats de l'ICE reeixits retornats pel servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Error: no hi ha candidats de l'ICE que funcionin retornats pel servidor TURN", + "Testing whether the TURN server returns ICE candidates" : "S'està provant si el servidor TURN retorna els candidats de l'ICE", + "TURN server schemes" : "Esquemes del servidor TURN", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Paràmetre \"secret\" del servidor TURN", + "TURN server protocols" : "Protocols del servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "S'utilitza un servidor TURN per enviar el trànsit dels participants darrere d'un tallafoc. Si els participants individuals no poden connectar-se amb altres, probablement es requereixi un servidor TURN. Consulteu {linkstart}aquesta documentació{linkend} per obtenir instruccions de configuració.", + "TURN settings saved" : "S'han desat els paràmetres de TURN", + "TURN servers" : "Servidors TURN", + "Add a new TURN server" : "Afegeix un nou servidor TURN", + "Failed" : "Ha fallat", + "OK" : "D'acord", + "Checking …" : "Comprovant …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Error: WebAssembly està desactivat o no és compatible amb aquest navegador. Si us plau, habiliteu WebAssembly o utilitzeu un navegador amb suport per fer la comprovació.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Error: el servidor web no ha retornat correctament els fitxers \".wasm\" i \".tflite\". Consulteu la secció \"Requisits del sistema\" a la documentació de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "D'acord: el servidor web ha retornat correctament els fitxers \".wasm\" i \".tflite\".", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Sembla que la configuració de PHP i Apache no és compatible. Tingueu en compte que PHP només es pot utilitzar amb el mòdul MPM_PREFORK i PHP-FPM només es pot utilitzar amb el mòdul MPM_EVENT.", + "Web server setup checks" : "Comprovacions de configuració del servidor web", + "Files required for virtual background can be loaded" : "Es poden carregar els fitxers necessaris per al fons virtual", + "Federated user" : "Usuari federat", + "Assign participants to rooms" : "Assigna els participants a les sales", + "Configure breakout rooms" : "Configura les sales de treball", + "Number of breakout rooms" : "Nombre de sales de treball", + "You can create from 1 to 20 breakout rooms." : "Pots crear d'1 a 20 sales de treball.", + "Assignment method" : "Mètode d'assignació", + "Automatically assign participants" : "Assigna participants automàticament", + "Manually assign participants" : "Assigna els participants manualment", + "Allow participants to choose" : "Permet als participants triar", + "Create rooms" : "Crea sales", + "Confirm" : "Confirma", + "Create breakout rooms" : "Crea sales de treball", + "Reset" : "Restableix", + "Delete breakout rooms" : "Suprimeix les sales de treball", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Es perdran les sales de treball i els paràmetres actuals", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participants no assignats", + "Back" : "Enrere", + "Assign" : "Assigna", + "Add participant \"{user}\"" : "Afegeix el participant \"{user}\"", + "Now" : "Ara", + "Invalid calendar selected" : "S'ha seleccionat un calendari no vàlid", + "Invalid start time selected" : "L'hora d'inici seleccionada no és vàlida", + "Invalid end time selected" : "L'hora de finalització seleccionada no és vàlida", + "Unknown error occurred" : "S'ha produït un error desconegut", + "Sending no invitations" : "No s'envia cap invitació", + "{participant0} will receive an invitation" : "{participant0} rebrà una invitació", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} rebran invitacions", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i %n més rebran invitacions","{participant0}, {participant1} i %n més rebran invitacions"], + "Meeting created" : "Reunió creada", + "Upcoming meetings" : "Properes reunions", + "Loading …" : "S'està carregant…", + "Schedule a meeting" : "Programar una reunió", + "Meeting title" : "Títol de la reunió", + "From" : "De", + "To" : "A", + "Calendar" : "Calendari", + "Attendees" : "Assistents", + "Add attendees" : "Afegeix assistents", + "Save" : "Desa", + "Search participants" : "Cercar participants", + "No results" : "No hi ha resultats", + "Done" : "Desat", + "Raise hand" : "Aixeca la mà", + "Raise hand (R)" : "Aixeca la mà (R)", + "Lower hand" : "Baixa mà", + "Lower hand (R)" : "Baixa mà (R)", + "Exit full screen (F)" : "Sortir de la pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Visualització de qui parla", + "Grid view" : "Vista de graella", + "Recording consent is required" : "Cal el consentiment de gravació", + "This conversation is read-only" : "Aquesta conversa és només de lectura", + "Conversation not found or not joined" : "No s'ha trobat la conversa o no s'ha unit", + "Lobby is still active and you're not a moderator" : "El vestíbul encara està actiu i no ets moderador", + "Connection failed" : "Ha fallat la connexió", + "Reload" : "Recarrega", + "{nickName} raised their hand." : "{nickName} va aixecar la mà.", + "A participant raised their hand." : "Un participant va aixecar la mà.", + "Collapse stripe" : "Col·lapse la franja", + "Expand stripe" : "Ampliar la franja", + "Previous page of videos" : "Pàgina anterior de vídeos", + "Next page of videos" : "Següent pàgina de vídeos", + "Connecting …" : "S'està connectant …", + "Calling …" : "S'està trucant …", + "Waiting for {user} to join the call" : "S'està esperant que {user} s'uneixi a la trucada", + "Waiting for others to join the call …" : "Esperant a la resta per realitzar la trucada …", + "You can invite others in the participant tab of the sidebar" : "Podeu convidar més gent des de la pestanya Participants al panell lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podeu convidar a més gent des de la pestanya Participants al panell lateral o compartint aquest enllaç a tercers!", + "Share this link to invite others!" : "Compartiu aquest enllaç per convidar a més gent!", + "Copy link" : "Copia l'enllaç", + "You are not allowed to enable audio" : "No teniu permís per activar l'àudio", + "No audio. Click to select device" : "Sense àudio. Feu clic per seleccionar el dispositiu", + "Mute audio" : "Silencia l'àudio", + "Mute audio (M)" : "Silencia l'àudio (m)", + "Unmute audio" : "Activa l'àudio", + "Unmute audio (M)" : "Re-activa l'àudio (m)", + "None" : "Cap", + "Access to camera was denied" : "S'ha denegat l'accés a la càmera", + "Error while accessing camera: It is likely in use by another program" : "Error en accedir a la càmera: és probable que l'utilitzi un altre programa", + "Error while accessing camera" : "S'ha produït un error en accedir a la càmera", + "You have been muted by a moderator" : "Vostè ha estat silenciat per un moderador", + "Hide presenter video" : "Amaga el vídeo del presentador", + "You are not allowed to enable video" : "No tens permís per activar el vídeo", + "No video. Click to select device" : "Cap vídeo. Feu clic per seleccionar el dispositiu", + "Disable video" : "Inhabilita el vídeo", + "Disable video (V)" : "Inhabilita el vídeo (v)", + "Enable video" : "Habilita el vídeo", + "Enable video (V)" : "Habilita el vídeo (v)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activa el vídeo. La connexió s'interromprà breument en habilitar el vídeo per primera vegada", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilita el vídeo (V) - La vostra connexió s'interromprà quan s'activeu el vídeo per primera vegada", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activa el vídeo. La connexió s'interromprà breument en habilitar el vídeo per primera vegada", + "Show presenter" : "Mostra presentador", + "You" : "Tu", + "Mute" : "Silencia", + "Muted" : "Silenciat", + "Show screen" : "Mostra la pantalla", + "Stop following" : "Deixa de seguir", + "Connection could not be established …" : "No s'ha pogut establir la connexió …", + "Connection was lost and could not be re-established …" : "La connexió es va perdre i no es va poder restablir …", + "Connection could not be established. Trying again …" : "No s'ha pogut establir la connexió. Tornant a provar …", + "Connection lost. Trying to reconnect …" : "Connexió perduda. S'està intentant tornar a connectar …", + "Connection problems …" : "Problemes de connexió …", + "Collapse" : "Replega", + "Expand" : "Expandeix", + "You need to be logged in to upload files" : "Heu d'iniciar la sessió per pujar fitxers", + "Drop your files to upload" : "Deixeu anar els fitxers per pujar-los", + "Conversation messages" : "Missatges de conversa", + "Scroll to bottom" : "Desplaça al final", + "Post message" : "Publica el missatge", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Preferit", + "Banned users" : "Usuaris prohibits", + "Manage the list of banned users in this conversation." : "Gestioneu la llista d'usuaris prohibits en aquesta conversa.", + "Manage bans" : "Gestionar les prohibicions", + "No banned users" : "No hi ha usuaris prohibits", + "Banned by:" : "Prohibit per:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Amaga els detalls", + "Show details" : "Mostra els detalls", + "Unban" : "Anul·la la prohibició", + "Error while updating conversation name" : "S'ha produït un error en actualitzar el nom de la conversa", + "Error while updating conversation description" : "S'ha produït un error en actualitzar la descripció de la conversa", + "Enter a name for this conversation" : "Introduïu un nom per a la nova conversa", + "Edit conversation name" : "Edició del nom de la conversa", + "Edit conversation description" : "Edició de la descripció de la conversa", + "Enter a description for this conversation" : "Introdueix una descripció per a aquesta conversa", + "Picture" : "Imatge", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Els robots següents es poden habilitar en aquesta conversa. Poseu-vos en contacte amb la vostra administració per instal·lar més robots en aquest servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No hi ha cap robot instal·lat en aquest servidor. Poseu-vos en contacte amb la vostra administració per instal·lar robots en aquest servidor.", + "Disable" : "Inhabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Sales de treball", + "Manage breakout rooms" : "Gestiona les sales de treball", + "Set up breakout rooms for this conversation" : "Configura sales de treball per a aquesta conversa", + "Please select a valid PNG or JPG file" : "Seleccioneu un fitxer PNG o JPG vàlid", + "Choose your conversation picture" : "Tria la teva imatge de conversa", + "Choose" : "Tria", + "Error setting conversation picture" : "S'ha produït un error en establir la imatge de la conversa", + "Could not set the conversation picture: {error}" : "No s'ha pogut configurar la imatge de la conversa: {error}", + "Error cropping conversation picture" : "S'ha produït un error en retallar la imatge de la conversa", + "Error removing conversation picture" : "S'ha produït un error en eliminar la imatge de la conversa", + "Set emoji as conversation picture" : "Estableix l'emoticona com a imatge de conversa", + "Set background color for conversation picture" : "Estableix el color de fons per a la imatge de la conversa", + "Upload conversation picture" : "Pujar la imatge de la conversa", + "Choose conversation picture from files" : "Trieu la imatge de la conversa dels fitxers", + "Remove conversation picture" : "Suprimir la imatge de la conversa", + "The file must be a PNG or JPG" : "El fitxer ha de ser PNG o JPG", + "Set picture" : "Estableix la imatge", + "Default permissions modified for {conversationName}" : "Permisos per defecte modificats per a {conversationName}", + "Could not modify default permissions for {conversationName}" : "No s'han pogut modificar els permisos per defecte per a {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editeu els paràmetres predeterminats dels participants en aquesta conversa. Aquesta configuració no afecta els moderadors.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vegada que es modifiquin els permisos en aquesta secció, es perdran els permisos personalitzats assignats prèviament als participants individuals.", + "All permissions" : "Tots els permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Els participants tenen permisos per iniciar una trucada, unir-se a una trucada, habilitar l'àudio i el vídeo i compartir la pantalla.", + "Restricted" : "Restringit", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Els participants poden unir-se a les trucades, però no poden habilitar l'àudio ni el vídeo ni compartir la pantalla fins que un moderador els concedeixi manualment els permisos.", + "Advanced permissions" : "Permisos avançats", + "Edit permissions" : "Edició dels permisos", + "Conversation settings" : "Paràmetres de la conversa", + "Basic Info" : "Informació bàsica", + "Personal" : "Personal", + "Moderation" : "Moderació", + "Setup overview" : "Visió general de la configuració", + "Breakout Rooms" : "Sales de treball", + "Matterbridge" : "Matterbridge", + "Bots" : "Robots", + "Danger zone" : "Zona perillosa", + "Archive conversation" : "Arxiva la conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Les converses arxivades s'oculten de la llista de converses de manera predeterminada. Tanmateix, encara apareixeran quan cerqueu el nom de la conversa o accediu a una llista de converses arxivades.", + "Do you really want to leave \"{displayName}\"?" : "De veritat voleu deixar \"{displayName}\"?", + "You can archive this conversation instead." : "Pots arxivar aquesta conversa.", + "Leave conversation" : "Surt de la conversa", + "You need to promote a new moderator before you can leave the conversation" : "Heu de promocionar un nou moderador abans de deixar la conversa", + "Delete conversation" : "Suprimeix la conversa", + "Do you really want to delete \"{displayName}\"?" : "De debò que voleu suprimir \"{displayName}\"?", + "Error while deleting conversation" : "S'ha produït un error en suprimir la conversa", + "Delete all chat messages" : "Suprimeix tots els missatges de xat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Realment voleu suprimir tots els missatges de \"{displayName}\"?", + "Error while clearing chat history" : "S'ha produït un error en esborrar l'historial de xat", + "Be careful, these actions cannot be undone." : "Aneu amb compte, aquestes accions no es poden desfer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Un cop acabada una conversa, per tornar a unir-se a una conversa tancada, cal una invitació. Es pot unir de nou a una conversa oberta en qualsevol moment.", + "Permanently delete this conversation." : "Suprimeix permanentment aquesta conversa.", + "Delete chat messages" : "Suprimeix els missatges de xat", + "Permanently delete all the messages in this conversation." : "Suprimeix permanentment tots els missatges d'aquesta conversa.", + "_%n hour_::_%n hours_" : ["%n hora","%n hores"], + "_%n day_::_%n days_" : ["%n dia","%n dies"], + "_%n week_::_%n weeks_" : ["%n setmana","%n setmanes"], + "Custom expiration time" : "Temps de caducitat personalitzat", + "Message expiration disabled" : "S'ha desactivat la caducitat del missatge", + "Message expiration set: {duration}" : "Conjunt de caducitat del missatge: {duration}", + "Error when trying to set message expiration" : "S'ha produït un error en intentar configurar la caducitat del missatge", + "Message expiration" : "Caducitat del missatge", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Els missatges de xat poden caducar al cap d'un període de temps determinat. Nota: els fitxers compartits al xat no se suprimiran per al propietari, però ja no es compartiran a la conversa.", + "Set message expiration" : "Estableix la caducitat del missatge", + "Current message expiration" : "Caducitat del missatge actual", + "Password copied to clipboard" : "S’ha copiat la contrasenya al porta-retalls", + "Password could not be copied" : "No s'ha pogut copiar la contrasenya", + "Guest access" : "Accés de convidat", + "Breakout rooms are not allowed in public conversations." : "No es permeten les sales de descans en converses públiques.", + "Allow guests to join this conversation via link" : "Permet als convidats unir-se a aquesta conversa mitjançant un enllaç", + "Password protection" : "Protecció amb contrasenya", + "This conversation is password-protected. Guests need password to join" : "Aquesta conversa està protegida amb contrasenya. Els convidats necessiten una contrasenya per unir-se", + "Password protection is needed for public conversations" : "La protecció amb contrasenya és necessària per a les converses públiques", + "Set a password" : "Configura una contrasenya", + "Enter new password" : "Introduïu la contrasenya nova", + "Save password" : "Desa la contrasenya", + "Copy password" : "Copia la contrasenya", + "Guests are allowed to join this conversation via link" : "Els convidats poden unir-se a aquesta conversa mitjançant un enllaç", + "Guests are not allowed to join this conversation" : "Els convidats no poden unir-se a aquesta conversa", + "Resend invitations" : "Torna a enviar les invitacions", + "This conversation is open to both registered users and users created with the Guests app" : "Aquesta conversa és oberta tant als usuaris registrats com als usuaris creats amb l'aplicació Convidats", + "This conversation is open to registered users" : "Aquesta conversa és oberta als usuaris registrats", + "This conversation is limited to the current participants" : "Aquesta conversa està limitada als participants actuals", + "You opened the conversation to both registered users and users created with the Guests app" : "Has obert la conversa tant als usuaris registrats com als usuaris creats amb l'aplicació Convidats", + "Error occurred when opening or limiting the conversation" : "S'ha produït un error en obrir o limitar la conversa", + "Open conversation to registered users, showing it in search results" : "Conversa oberta als usuaris registrats, mostrant-la als resultats de la cerca", + "Also open to users created with the Guests app" : "També obert als usuaris creats amb l'aplicació Convidats", + "Open conversation" : "Obre Conversa", + "Invalid language" : "La llengua no és vàlida", + "Start time: {date}" : "Hora d'inici: {date}", + "Start time has been updated" : "S'ha actualitzat l'hora d'inici", + "Error occurred while updating start time" : "S'ha produït un error en actualitzar l'hora d'inici", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Si habiliteu el vestíbul, els no moderadors es suprimiran de la trucada en curs.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar el vestíbul, restringint la conversa als moderadors", + "Meeting start time" : "Hora d'inici de la reunió", + "Start time (optional)" : "Hora d'inici (opcional)", + "Import email participants" : "Importa els participants del correu electrònic", + "You can import a list of email participants from a CSV file." : "Podeu importar una llista de participants de correu electrònic des d'un fitxer CSV.", + "Poll drafts" : "Esborranys d'enquestes", + "Browse poll drafts" : "Consulta els esborranys de les enquestes", + "Error occurred when locking the conversation" : "S'ha produït un error en bloquejar la conversa", + "Error occurred when unlocking the conversation" : "S'ha produït un error en desbloquejar la conversa", + "Lock conversation" : "Bloqueja la conversa", + "This will also terminate the ongoing call." : "Això també finalitzarà la trucada en curs.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloqueja la conversa per evitar que ningú publiqui missatges o iniciï trucades", + "Edit" : "Edició", + "More information" : "Més informació", + "Delete" : "Suprimir", + "Add new bridged channel to current conversation" : "Afegeix un nou canal connectat a la conversa actual", + "unknown state" : "estat desconegut", + "running" : "en execució", + "not running, check Matterbridge log" : "no funciona, comproveu el registre de Matterbridge", + "not running" : "no s'està executant", + "Bridge saved" : "Pont desat", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Podeu fer ponts des de diversos sistemes de missatgeria instantània amb Matterbridge.", + "More info on Matterbridge" : "Més informació sobre Matterbridge", + "Messaging systems" : "Sistemes de missatgeria", + "Enable bridge" : "Habilitar el pont", + "Show Matterbridge log" : "Mostra el registre de Matterbridge", + "Log content" : "Contingut del registre", + "Only moderators are allowed to mention @all" : "Només els moderadors poden esmentar @all", + "All participants are allowed to mention @all" : "Tots els participants poden esmentar @all", + "Participants are now allowed to mention @all." : "Ara els participants poden esmentar @all.", + "Mentioning @all has been limited to moderators." : "Esmentar @all s'ha limitat als moderadors.", + "Allow participants to mention @all" : "Permet als participants mencionar @all", + "Mention permissions" : "Esmenta els permisos", + "Notifications" : "Notificacions", + "Notify about calls in this conversation" : "Notifica quant a trucades en aquesta conversa", + "Important conversation" : "Conversa important", + "Recording consent is required for calls in this conversation" : "Cal el consentiment per gravar les trucades d'aquesta conversa", + "Recording consent is not required for calls in this conversation" : "No cal el consentiment per gravar les trucades d'aquesta conversa", + "Recording consent requirement was updated" : "S'ha actualitzat el requisit de consentiment de gravació", + "Error occurred while updating recording consent" : "S'ha produït un error en actualitzar el consentiment de gravació", + "Recording Consent" : "Consentiment de gravació", + "Recording consent cannot be changed once a call or breakout session has started." : "El consentiment de gravació no es pot canviar un cop s'ha iniciat una trucada o una sessió grupal.", + "Require recording consent before joining call in this conversation" : "Requereix el consentiment per gravar abans d'unir-te a la trucada en aquesta conversa", + "Recording consent is required for all calls" : "Cal el consentiment de gravació per a totes les trucades", + "SIP dial-in is now possible without PIN requirement" : "Ara és possible l'accés SIP sense necessitat de PIN", + "SIP dial-in is now enabled" : "Ara s'ha habilitat el marcatge SIP", + "SIP dial-in is now disabled" : "El marcatge SIP ara està desactivat", + "Error occurred when enabling SIP dial-in" : "S'ha produït un error en activar el telèfon d'entrada SIP", + "Error occurred when disabling SIP dial-in" : "S'ha produït un error en desactivar el telèfon d'entrada SIP", + "Phone and SIP dial-in" : "Telèfon i marcatge SIP", + "Enable phone and SIP dial-in" : "Habilita el telèfon i el trucades SIP", + "Allow to dial-in without a PIN" : "Permet marcar sense un PIN", + "Join" : "Uneix-te", + "Error while creating the conversation" : "Error en crear la conversa", + "Create a new conversation" : "Crea una conversa nova", + "Join open conversations" : "Uneix-te a converses obertes", + "Call a phone number" : "Trucada a un número de telèfon", + "Unread mentions" : "Mencions no llegides", + "Create conversation" : "Crea una conversa", + "Enter your name" : "Introdueix el teu nom", + "Submit name and join" : "Envia el nom i uneix-te", + "Do you already have an account?" : "Ja tens un compte?", + "Log in" : "Inicia la sessió", + "Error while verifying uploaded file" : "S'ha produït un error en verificar el fitxer penjat", + "Uploaded file is verified" : "El fitxer penjat està verificat", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "El format del contingut són valors separats per comes (CSV):
- La línia de capçalera és necessària i ha de coincidir amb \"nom\", \"correu electrònic\" o només \"correu electrònic\"
- Una entrada per línia (per exemple, \"John Doe\",\"john@example.tld\" )", + "Participants added successfully" : "Els participants s'han afegit correctament", + "Error while adding participants" : "S'ha produït un error en afegir participants", + "Import a file" : "Importa un fitxer", + "Browse" : "Navegació", + "Verifying uploaded file …" : "S'està verificant el fitxer penjat …", + "This might take a moment" : "Això pot trigar un moment", + "Send invitations" : "Enviar invitacions", + "_%n invalid email_::_%n invalid emails_" : ["%n correu electrònic no vàlid","%n correus electrònics no vàlids"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["El correu electrònic %n ja s'ha importat o està duplicat","%n correus electrònics ja s'han importat o s'han duplicat"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Es pot enviar %n invitació","Es poden enviar %n invitacions"], + "An error occurred while calling a phone number" : "S'ha produït un error en trucar a un número de telèfon", + "Phone number could not be called: {error}" : "No s'ha pogut trucar al número de telèfon: {error}", + "Phone number could not be called" : "No s'ha pogut trucar al número de telèfon", + "Search participants or phone numbers" : "Cerca participants o números de telèfon", + "Creating the conversation …" : "Creació de la conversa …", + "Mark as read" : "Marca com a llegit", + "Mark as unread" : "Marca com a sense llegir", + "Remove from favorites" : "Suprimeix dels preferits", + "Add to favorites" : "Afegeix a preferits", + "Unarchive conversation" : "Desarxiva la conversa", + "You need to promote a new moderator before you can leave the conversation." : "Heu de designar un nou moderador abans de deixar la conversa.", + "Conversation actions" : "Accions de conversa", + "Notify about calls" : "Notificar sobre trucades", + "Pending invitations" : "Invitacions pendents", + "From {user} at {remoteServer}" : "Des de les {user} a les {remoteServer}", + "Decline invitation" : "Rebutja la invitació", + "Accept invitation" : "Accepta la invitació", + "No pending invitations" : "No hi ha cap invitació pendent", + "Home" : "Casa", + "Unread" : "Per llegir", + "Alphabetically" : "Alfabèticament", + "No matches found" : "No s'ha trobat cap coincidència", + "No conversations found" : "No s'han trobat converses", + "You have no archived conversations." : "No tens converses arxivades.", + "You have no unread mentions." : "No tens mencions no llegides.", + "You have no unread messages." : "No tens missatges no llegits.", + "An error occurred while performing the search" : "S'ha produït un error en realitzar la cerca", + "Conversation list" : "Llista de converses", + "Unread messages" : "Missatges sense llegir", + "Clear filters" : "Esborra els filtres", + "New personal note" : "Nova nota personal", + "Back to conversations" : "Torna a les converses", + "Archived conversations" : "Converses arxivades", + "Clear filter" : "Esborra el filtre", + "Users" : "Usuaris", + "Groups" : "Grups", + "Teams" : "Equips", + "Federated users" : "Afegeix usuaris federats", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Altres fonts", + "Open conversations" : "Obre les converses", + "No search results" : "No s'han trobat resultats", + "Users, groups and teams" : "Usuaris, grups i equips", + "Users and groups" : "Usuaris i grups", + "Users and teams" : "Usuaris i equips", + "Groups and teams" : "Grups i equips", + "New group conversation" : "Nova conversa de grup", + "The meeting will start soon" : "La reunió començarà aviat", + "This meeting is scheduled for {startTime}" : "Aquesta reunió està planificada per a les {startTime}", + "You are currently waiting in the lobby" : "Ara esteu esperant al vestíbul", + "Select microphone" : "Seleccioneu el micròfon", + "No microphone available" : "No hi ha micròfon disponible", + "Select speaker" : "Seleccioneu l'altaveu", + "No speaker available" : "No hi ha altaveu disponible", + "Select camera" : "Seleccioni la càmera", + "No camera available" : "No hi ha cap càmera disponible", + "Select a device" : "Seleccioneu un dispositiu", + "Playing …" : "Reproduint …", + "Test speakers" : "Prova altaveus", + "Test" : "Prova", + "Devices" : "Dispositius", + "Backgrounds" : "Fons", + "No audio" : "Sense àudio", + "No camera" : "No càmera", + "Display video as you will see it (mirrored)" : "Mostra el vídeo tal com el veuràs (reglat)", + "Display video as others will see it" : "Mostra el vídeo tal com el veuran els altres", + "Calls are not supported in your browser" : "Les trucades no són compatibles amb el vostre navegador", + "Access to microphone is only possible with HTTPS" : "L'accés al micròfon només és possible amb HTTPS", + "Access to microphone was denied" : "S'ha denegat l'accés al micròfon", + "Error while accessing microphone" : "S'ha produït un error en accedir al micròfon", + "Access to camera is only possible with HTTPS" : "L'accés a la càmera només és possible amb HTTPS", + "The call is being recorded." : "La trucada s'està gravant.", + "The call might be recorded." : "És possible que la trucada sigui gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La gravació pot incloure la teva veu, el vídeo de la càmera i la pantalla compartida. Cal el vostre consentiment abans d'unir-vos a la trucada.", + "Give consent to the recording of this call" : "Donar el consentiment per a la gravació d'aquesta trucada", + "Start recording immediately with the call" : "Comenceu a gravar immediatament amb la trucada", + "Apply settings" : "Aplica els paràmetres", + "Select virtual office background" : "Seleccioneu el fons virtual d’oficina", + "Select virtual home background" : "Seleccioneu el fons virtual a casa", + "Select virtual abstract background" : "Seleccioneu fons virtual abstracte", + "Select virtual beach background" : "Seleccioneu el fons virtual de platja", + "Select virtual park background" : "Seleccioneu el fons virtual de parc", + "Select virtual theater background" : "Seleccioneu el fons virtual de teatre", + "Select virtual library background" : "Seleccioneu el fons virtual de biblioteca", + "Select virtual space station background" : "Seleccioneu el fons virtual de l'estació espacial", + "Error while uploading the file" : "S'ha produït un error en carregar el fitxer", + "Select a file" : "Select a file", + "Invalid path selected" : "Camí seleccionat no vàlid", + "Select virtual background from file {fileName}" : "Seleccioneu el fons virtual del fitxer {fileName}", + "Blur" : "Difumina", + "Upload" : "Pujada", + "Files" : "Fitxers", + "(editing)" : "(edició)", + "(edited)" : "(editat)", + "The message has expired or has been deleted" : "El missatge ha caducat o s'ha suprimit", + "Cancel quote" : "Cancel·la la menció", + "24 hours" : "24 hores", + "7 days" : "7 dies", + "Clear reminder – {timeLocale}" : "Esborra el recordatori – {timeLocale}", + "Edited by {actor}" : "Editat per {actor}", + "Message text copied to clipboard" : "El text del missatge s'ha copiat al porta-retalls", + "Message text could not be copied" : "No s'ha pogut copiar el text del missatge", + "Message forwarded to \"Note to self\"" : "Missatge reenviat a \"Nota per a un mateix\"", + "Error while forwarding message to \"Note to self\"" : "Error en reenviar el missatge a \"Nota per a un mateix\"", + "A reminder was successfully removed" : "S'ha eliminat correctament un recordatori", + "Error occurred when removing a reminder" : "S'ha produït un error en eliminar un recordatori", + "A reminder was successfully set at {datetime}" : "S'ha establert un recordatori correctament a {datetime}", + "Error occurred when creating a reminder" : "S'ha produït un error en crear un recordatori", + "Add a reaction to this message" : "Afegeix una reacció a aquest missatge", + "Reply" : "Respon", + "More actions" : "Més accions", + "Set reminder" : "Defineix un recordatori", + "Reply privately" : "Respon en privat", + "Edit message" : "Edició del missatge", + "Copy message" : "Copia el missatge", + "Copy message link" : "Copia l'enllaç del missatge", + "Go to file" : "Vés al fitxer", + "Download file" : "Baixa el fitxer", + "Forward message" : "Missatge de reenviament", + "Translate" : "Traducció", + "Set custom reminder" : "Estableix un recordatori personalitzat", + "Close reactions menu" : "Tanca el menú de reaccions", + "React with {emoji}" : "Reacciona amb {emoji}", + "React with another emoji" : "Reacciona amb un altre emoji", + "Choose a conversation to forward the selected message." : "Trieu una conversa per reenviar el missatge seleccionat.", + "Error while forwarding message" : "S'ha produït un error en reenviar el missatge", + "The message has been forwarded to {selectedConversationName}" : "El missatge s'ha reenviat a {selectedConversationName}", + "Dismiss" : "Descarta", + "Go to conversation" : "Vés a la conversa", + "Detect language" : "Detecta la llengua", + "The message could not be translated" : "No s'ha pogut traduir el missatge", + "Translation copied to clipboard" : "La traducció s'ha copiat al porta-retalls", + "Translation could not be copied" : "No s'ha pogut copiar la traducció", + "Translate message" : "Tradueix el missatge", + "Source language to translate from" : "Llengua d'origen per traduir", + "Translate from" : "Traduir de", + "Target language to translate into" : "Llengua objectiu a traduir", + "Translate to" : "Traduir a", + "Translating" : "S'està traduint", + "Copy translated text" : "Copia el text traduït", + "Send now" : "Envia ara", + "Message read by everyone who shares their reading status" : "Missatge llegit per tothom que comparteix el seu estat de lectura", + "Message sent" : "Missatge enviat", + "Sent without notification" : "Enviat sense notificació", + "Deleting message" : "S'està eliminant el missatge", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "El missatge s'ha suprimit correctament, però s'ha configurat un bot o Matterbridge i és possible que el missatge ja s'hagi distribuït a altres serveis", + "Message deleted successfully" : "El missatge s'ha suprimit correctament", + "Message could not be deleted because it is too old" : "No s'ha pogut suprimir el missatge perquè és massa antic", + "Only normal chat messages can be deleted" : "Només es poden suprimir els missatges de xat normals", + "An error occurred while deleting the message" : "S'ha produït un error en suprimir el missatge", + "Your browser does not support playing audio files" : "El vostre navegador no admet la reproducció de fitxers d'àudio", + "Contact" : "Contacte", + "{stack} in {board}" : "{stack} a {board}", + "Deck Card" : "Pila de Targetes", + "Remove {fileName}" : "Suprimeix {fileName}", + "Open this location in OpenStreetMap" : "Obriu aquesta ubicació a OpenStreetMap", + "Sending message" : "S'està enviant el missatge", + "Failed to send the message. Click to try again" : "No s'ha pogut enviar el missatge. Feu clic per tornar-ho a provar", + "Not enough free space to upload file" : "No hi ha prou espai lliure per pujar el fitxer", + "You cannot send messages to this conversation at the moment" : "No pots enviar missatges a aquesta conversa en aquest moment", + "Could not update the message" : "No s'ha pogut actualitzar el missatge", + "You voted" : "Has votat", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Esborrany de l'enquesta • Opció %n","Esborrany de l'enquesta • %n opcions"], + "_%n vote_::_%n votes_" : ["%n vot","%n vots"], + "Edit poll draft" : "Edita l'esborrany de l'enquesta", + "Delete poll draft" : "Suprimeix l'esborrany de l'enquesta", + "Open poll" : "Enquesta oberta", + "See results" : "Veure resultats", + "Reactions" : "Reaccions", + "No permission to post reactions in this conversation" : "No hi ha permís per publicar reaccions en aquesta conversa", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i %n participant més","i %n participants més"], + "Show all reactions" : "Mostra totes les reaccions", + "Add more reactions" : "Afegeix més reaccions", + "Show or collapse system messages" : "Mostra o replega els missatges del sistema", + "No messages" : "No hi ha missatges", + "All messages have expired or have been deleted." : "Tots els missatges han caducat o s'han suprimit.", + "Unpin" : "No fixis", + "Cancel search" : "Cancel·la la cerca", + "Add a phone number" : "Afegeix un número de telèfon", + "Error: A password is required to create the conversation." : "Error: cal una contrasenya per crear la conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Tot a punt, s'ha creat la conversa \"{conversationName}\".", + "Create a new group conversation" : "Crear una conversa de grup nova", + "Add participants" : "Afegeix participants", + "Maximum length exceeded ({maxlength} characters)" : "S'ha superat la longitud màxima ({maxlength} caràcters)", + "Conversation visibility" : "Visibilitat de la conversa", + "Allow guests to join via link" : "Permet als convidats unir-se mitjançant un enllaç", + "Enter password" : "Introduïu la contrasenya", + "This conversation has been locked" : "Aquesta conversa s'ha bloquejat", + "No permission to post messages in this conversation" : "No hi ha permís per publicar missatges en aquesta conversa", + "Joining conversation …" : "S'està unint a la conversa …", + "Write a message without notification" : "Escriu un missatge sense notificació", + "Send message silently" : "Enviar missatge en silenci", + "Send message" : "Envia un missatge", + "Send without notification" : "Envia sense notificació", + "The participant will not be notified about new messages" : "El participant no rebrà notificacions sobre missatges nous", + "Participants will not be notified about new messages" : "Els participants no rebran notificacions dels missatges nous", + "The message could not be edited" : "No s'ha pogut editar el missatge", + "File to share" : "Fitxer a compartir", + "File upload is not available in this conversation" : "La càrrega de fitxers no està disponible en aquesta conversa", + "Add emoji" : "Afegeix emoji", + "Adding a mention will only notify users who did not read the message." : "Afegir una menció només notificarà als usuaris que no hagin llegit el missatge.", + "Send later" : "Envia més tard", + "Cancel editing" : "Cancel·la l'edició", + "{user} is out of office and might not respond." : "{user} està fora de l'oficina i és possible que no respongui.", + "Absence period: {startDate} - {endDate}" : "Període d'absència: {startDate} - {endDate}", + "Replacement:" : "Substitució:", + "Share from {nextcloud}" : "Comparteix des de {nextcloud}", + "Share from Files" : "Comparteix des de Fitxers", + "Share files to the conversation" : "Compartir fitxers a la conversa", + "Upload from device" : "Pujada des del dispositiu", + "Create new poll" : "Crea una nova enquesta", + "Smart picker" : "Selector intel·ligent", + "Record voice message" : "Grava un missatge de veu", + "End recording and send" : "Finalitzar la gravació i enviar", + "Dismiss recording" : "Descarta la gravació", + "Access to the microphone was denied" : "S'ha denegat l'accés al micròfon", + "Microphone either not available or disabled in settings" : "El micròfon no està disponible o està desactivat als paràmetres", + "Error while recording audio" : "S'ha produït un error en gravar l'àudio", + "Generating summary of unread messages …" : "S'està generant un resum dels missatges no llegits …", + "Summary is AI generated and might contain mistakes" : "El resum es genera amb IA i pot contenir errors", + "Error occurred during a summary generation" : "S'ha produït un error durant la generació d'un resum", + "New file" : "Nou fitxer", + "Blank" : "En blanc", + "Error while creating file" : "Error en crear el fitxer", + "Create and share a new file" : "Creació i compartició d'un fitxer nou", + "Name of the new file" : "Nom del nou fitxer", + "Create file" : "Crea el fitxer", + "Someone is typing …" : "Algú està escrivint …", + "{user1} is typing …" : "{user1} està escrivint …", + "{user1} and {user2} are typing …" : "{user1} i {user2} estan escrivint …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} estan escrivint …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i %n més estan escrivint …","{user1}, {user2}, {user3} i %n més estan escrivint …"], + "Add more files" : "Afegeix més fitxers", + "Send" : "Envia", + "In this conversation {user} can:" : "En aquesta conversa {user} pot:", + "Edit default permissions for participants in {conversationName}" : "Edita els permisos per defecte per als participants a {conversationName}", + "Start a call" : "Inicia una trucada", + "Skip the lobby" : "Omet el vestíbul", + "Can post messages and reactions" : "Pot publicar missatges i reaccions", + "Enable the microphone" : "Habilitar el micròfon", + "Enable the camera" : "Habilitar la càmera", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Actualitzar els permisos", + "Updating permissions" : "S'estan actualitzant els permisos", + "No poll drafts" : "No hi ha esborranys d'enquesta", + "There is no poll drafts yet saved for this conversation" : "Encara no hi ha cap esborrany d'enquesta desat per a aquesta conversa", + "Create poll in {name}" : "Crea una enquesta a {name}", + "Create poll" : "Crea enquesta", + "Error while importing poll" : "S'ha produït un error en importar l'enquesta", + "Question" : "Qüestió", + "Ask a question" : "Fer una pregunta", + "Import draft from file" : "Importa l'esborrany del fitxer", + "Answers" : "Respostes", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Suprimeix l'opció de l'enquesta", + "Add answer" : "Afegeix la resposta", + "Settings" : "Paràmetres", + "Anonymous poll" : "Enquesta anònima", + "Multiple answers" : "Respostes múltiples", + "Save as draft" : "Desa com a esborrany", + "Export draft to file" : "Exporta l'esborrany al fitxer", + "You voted for this option" : "Heu votat aquesta opció", + "End poll" : "Finalitza l'enquesta", + "Change your vote" : "Canvia el teu vot", + "Results" : "Resultats", + "Voted participants" : "Participants votats", + "Send a message to \"{roomName}\"" : "Envia un missatge a \"{roomName}\"", + "Hide list of participants" : "Amaga la llista de participants", + "Show list of participants" : "Mostra la llista de participants", + "Assistance requested in {roomName}" : "Ajuda sol·licitada a {roomName}", + "The message was sent to \"{roomName}\"" : "El missatge s'ha enviat a \"{roomName}\"", + "Dismiss request for assistance" : "Descarta la sol·licitud d'assistència", + "Send message to room" : "Envia missatge a l'habitació", + "Back to main room" : "Tornada a la sala principal", + "Back to your room" : "Torna a la teva habitació", + "Message all rooms" : "Envia un missatge a totes les habitacions", + "Start session" : "Inicia sessió", + "Start a call before you start a breakout room session" : "Inicieu una trucada abans d'iniciar una sessió de sala de treball", + "Stop session" : "Atura la sessió", + "The message was sent to all breakout rooms" : "El missatge s'ha enviat a totes les sales de treball", + "Send a message to all breakout rooms" : "Envia un missatge a totes les sales de treball", + "Breakout rooms are not started" : "Les sales de treball no s'inicien", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Les trucades sense backend d'alt rendiment poden causar problemes de connectivitat i una càrrega elevada als dispositius. {linkstart}Més informació{linkend}", + "Talk setup incomplete" : "Configuració de la conversa incompleta", + "Disable lobby" : "Inhabilita el vestíbul", + "Settings for participant \"{user}\"" : "Paràmetres per al participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderador", + "bot" : "autòmata", + "guest" : "convidat", + "Ringing …" : "Sonant …", + "Call rejected" : "Trucada rebutjada", + "{time} talking …" : "{time} parlant …", + "{time} talking time" : "{time} temps de conversa", + "Raised their hand" : "Van aixecar la mà", + "Joined with video" : "S'ha unit amb vídeo", + "Joined via phone" : "S'ha unit per telèfon", + "Joined with audio" : "S'ha unit amb àudio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El text ha de tenir una longitud inferior o igual a {maxLength} caràcters. El vostre text actual té {charactersCount} caràcters.", + "Remove group and members" : "Suprimir el grup i els membres", + "Remove team and members" : "Suprimeix l'equip i els membres", + "Remove participant" : "Suprimir el participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Segur que voleu eliminar el grup \"{displayName}\" i els seus membres d'aquesta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Realment voleu eliminar l'equip \"{displayName}\" i els seus membres d'aquesta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Segur que voleu eliminar {displayName} d'aquesta conversa?", + "Notification was sent to {displayName}" : "La notificació s'ha enviat a {displayName}", + "Could not send notification to {displayName}" : "No s'ha pogut enviar la notificació a {displayName}", + "Permissions granted to {displayName}" : "Permisos concedits a {displayName}", + "Could not modify permissions for {displayName}" : "No s'han pogut modificar els permisos de {displayName}", + "Permissions removed for {displayName}" : "S'han eliminat els permisos per a {displayName}", + "Permissions set to default for {displayName}" : "Permisos establerts per defecte per a {displayName}", + "Phone number could not be hung up" : "No s'ha pogut penjar el número de telèfon", + "Phone number could not be put on hold" : "El número de telèfon no s'ha pogut posar en espera", + "Phone number could not be muted" : "No s'ha pogut silenciar el número de telèfon", + "Phone number could not be unmuted" : "No s'ha pogut activar el so del número de telèfon", + "DTMF message could not be sent" : "No s'ha pogut enviar el missatge DTMF", + "Phone number copied to clipboard" : "El número de telèfon s'ha copiat al porta-retalls", + "Phone number could not be copied" : "No s'ha pogut copiar el número de telèfon", + "in the lobby" : "al vestíbul", + "Dial out phone" : "Marqueu el telèfon", + "Hang up phone" : "Penja el telèfon", + "Move back to lobby" : "Torneu al vestíbul", + "Move to conversation" : "Passa a la conversa", + "Dial-in PIN" : "PIN de marcatge", + "Demote from moderator" : "Retenció del moderador", + "Promote to moderator" : "Promociona al moderador", + "Resend invitation" : "Torna a enviar el correu d'invitació", + "Send call notification" : "Envia una notificació de trucada", + "Dial out phone number" : "Marqueu el número de telèfon", + "Resume call for phone number" : "Reprèn la trucada pel número de telèfon", + "Put phone number on hold" : "Posa el número de telèfon en espera", + "Unmute phone number" : "Activa el so del número de telèfon", + "Mute phone number" : "Silencia el número de telèfon", + "Copy phone number" : "Copia el número de telèfon", + "Reset custom permissions" : "Restableix els permisos personalitzats", + "Grant all permissions" : "Concediu tots els permisos", + "Remove all permissions" : "Suprimir tots els permisos", + "Also ban from this conversation" : "També prohibeix aquesta conversa", + "Internal note (reason to ban)" : "Nota interna (motiu de la prohibició)", + "Remove" : "Suprimir", + "Permissions modified for {displayName}" : "Permisos modificats per a {displayName}", + "Add users, groups or teams" : "Afegiu usuaris, grups o equips", + "Add users or groups" : "Afegeix usuaris o grups", + "Add users or teams" : "Afegiu usuaris o equips", + "Add users" : "Afegeix usuaris", + "Add groups or teams" : "Afegiu grups o equips", + "Add groups" : "Afegeix grups", + "Add teams" : "Afegeix equips", + "Add other sources" : "Afegeix altres fonts", + "Add emails" : "Afegeix correus electrònics", + "Integrations" : "Integracions", + "Add federated users" : "Afegeix usuaris federats", + "Searching …" : "Cercant …", + "Search for more users" : "Cercar més usuaris", + "You can search or add participants via name, email, or Federated Cloud ID" : "Podeu cercar o afegir participants mitjançant el nom, el correu electrònic o l'identificador de núvol federat", + "Search or add participants" : "Cerca o afegeix participants", + "Invitation was sent to {actorId}" : "S'ha enviat la invitació a {actorId}", + "An error occurred while adding the participants" : "S'ha produït un error en afegir els participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Xat obert", + "You have new unread messages in the chat." : "Tens missatges nous sense llegir al xat.", + "You have been mentioned in the chat." : "Has estat esmentat al xat.", + "Search messages" : "Cerca missatges", + "Chat" : "Xat", + "Details" : "Detalls", + "Shared items" : "Elements compartits", + "Search in {name}" : "Cerca a {name}", + "Search messages …" : "Cerca missatges …", + "Search options" : "Opcions de cerca", + "From User" : "De l'usuari", + "Since" : "Des de", + "Until" : "Fins", + "No results found" : "No s'han trobat resultats", + "Load more results" : "Carregar més resultats", + "Projects" : "Projectes", + "No shared items" : "No hi ha elements compartits", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enllaça a una conversa", + "No open conversations found" : "No s'han trobat converses obertes", + "Either there are no open conversations or you joined all of them." : "O no hi ha converses obertes o t'has unit a totes.", + "Check spelling or use complete words." : "Revisa l'ortografia o utilitza paraules completes.", + "Search conversations or users" : "Cercar converses o usuaris", + "Select conversation" : "Seleccioneu una conversa", + "Number length is not valid" : "La longitud del número no és vàlida", + "Region code is not valid" : "El codi de regió no és vàlid", + "Number length is too short" : "La longitud del número és massa curta", + "Number length is too long" : "La longitud del número és massa llarga", + "Number is not valid" : "El número no és vàlid", + "Phone numbers" : "Números de telèfon", + "Display name: {name}" : "Nom de visualització: {name}", + "Edit display name" : "Edició del nom a mostrar", + "Save name" : "Desar el nom", + "Error while setting personal setting" : "S'ha produït un error en configurar la configuració personal", + "Error while saving sounds setting" : "S'ha produït un error en desar els paràmetres dels sons", + "Play sounds when participants join or leave a call" : "Reprodueix sons quan els participants s'uneixen o surten d'una trucada", + "Notification settings" : "Paràmetres de les notificacions", + "Default language" : "Llengua per defecte", + "Select location for attachments" : "Seleccioneu la ubicació per als fitxers adjunts", + "Error while setting attachment folder" : "S'ha produït un error en establir la carpeta de fitxers adjunts", + "Error while setting read status privacy" : "S'ha produït un error en configurar la privadesa de l'estat de lectura", + "Error while setting typing status privacy" : "S'ha produït un error en configurar la privadesa de l'estat d'escriure", + "Error while setting default media state" : "S'ha produït un error en establir l'estat predeterminat dels mitjans", + "Privacy" : "Privadesa", + "Attachments folder" : "Carpeta fitxers adjunts", + "Toggle full screen" : "Commuta la pantalla completa", + "Search" : "Cerca", + "Focus the chat input" : "Posar focus a l'entrada del xat", + "Unfocus the chat input to use shortcuts" : "Treure focus de l'entrada del xat per utilitzar dreceres", + "Edit your last message" : "Editeu el vostre darrer missatge", + "Shortcuts while in a call" : "Dreceres mentre es troba en una trucada", + "Camera on and off" : "Càmera i desactivada", + "Microphone on and off" : "El micròfon activat i desactivat", + "Raise or lower hand" : "Aixecar o baixar la mà", + "Push to talk or push to mute" : "Premeu per parlar o premeu per silenciar", + "Zoom-in / zoom-out a screen share" : "Apropar/reduir una pantalla compartida", + "Mouse wheel" : "Roda del ratolí", + "Start call silently" : "Inicia la trucada en silenci", + "Start call" : "Inicia trucada", + "End call" : "Finalitzar la trucada", + "This call has just ended" : "Aquesta trucada acaba de finalitzar", + "You will be able to join the call only after a moderator starts it." : "Només podreu unir-vos a la trucada un cop s'inicii per un moderador.", + "End call for everyone" : "Finalitzar la trucada per a tothom", + "Starting the recording" : "Iniciant la gravació", + "Recording" : "Enregistrament", + "The call has been running for one hour." : "La trucada porta una hora en marxa.", + "Cancel recording start" : "Cancel·la l'inici de la gravació", + "Stop recording" : "Aturar l'enregistrament", + "Send a reaction" : "Envia una reacció", + "React with {reaction}" : "Reacciona amb {reaction}", + "All tasks done!" : "Totes les tasques fetes!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tasca","{done} de %n tasques"], + "_%n participant in call_::_%n participants in call_" : ["%n participant a la trucada","%n participants a la trucada"], + "You are not allowed to enable screensharing" : "No teniu permís per activar l'ús compartit de pantalla", + "No screensharing" : "Deixar de compartir pantalla", + "Screensharing options" : "Preferències de compartició de pantalla", + "Enable screensharing" : "Habilitar la compartició de pantalla", + "Bad sent video and screen quality." : "Mala qualitat de vídeo i pantalla enviada.", + "Bad sent screen quality." : "Mala qualitat de pantalla enviada.", + "Bad sent video quality." : "Mala qualitat de vídeo enviada.", + "Bad sent audio, video and screen quality." : "Mala qualitat d'àudio, vídeo i pantalla enviada.", + "Bad sent audio and screen quality." : "Mala qualitat d'àudio i pantalla enviada.", + "Bad sent audio and video quality." : "Mala qualitat d'àudio i vídeo enviat.", + "Bad sent audio quality." : "Mala qualitat d'àudio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin veure la teva pantalla. Per millorar la situació, proveu de inhabilitar el desenfocament de fons o el vostre vídeo mentre feu una compartició de pantalla.", + "Disable background blur" : "Inhabilitar el desenfocament de fons", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin veure la teva pantalla. Per millorar la situació, proveu de inhabilitar el vostre vídeo mentre feu una pantalla compartida.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "És possible que la connexió a Internet o l'ordinador estiguin ocupats i és possible que altres participants no puguin veure la vostra pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin veure.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't ni veure't. Per millorar la situació, proveu de inhabilitar el desenfocament de fons o el vostre vídeo mentre feu una pantalla compartida.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't i veure't. Per millorar la situació, proveu de inhabilitar el vídeo mentre es fa una compartició de pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La vostra connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin entendre ni veure la vostra pantalla. Per millorar la situació, prova de inhabilitar la teva pantalla compartida.", + "Disable screenshare" : "Inhabilitar la compartició de pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La teva connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't ni veure't. Per millorar la situació, prova de inhabilitar el desenfocament de fons o el teu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no puguin entendre't i veure't. Per millorar la situació, proveu de inhabilitar el vostre vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La connexió a Internet o l'ordinador estan ocupats i és possible que altres participants no us puguin entendre.", + "Screen sharing is not supported by your browser." : "El navegador no admet l'ús compartit de pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "L'ús compartit de pantalla requereix que la pàgina es carregui mitjançant HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "L'ús compartit de la pantalla requereix que la pàgina es carregui a través d'HTTPS.", + "An error occurred while starting screensharing." : "S'ha produït un error en iniciar l'ús compartit de la pantalla.", + "Show your screen" : "Mostra la teva pantalla", + "Stop screensharing" : "Deixar de compartir", + "Mute others" : "Silenciar els altres", + "Start recording" : "Inici de l'enregistrament", + "Set up breakout rooms" : "Configureu sales de treball", + "Download attendance list" : "Descarrega la llista d'assistència", + "Open Calendar" : "Obriu el calendari", + "Remove participant {name}" : "Suprimir el participant {name}", + "Keep" : "Mantén", + "Open dialpad" : "Obre el teclat", + "Select a region" : "Selecciona una regió", + "Search …" : "Cerca …", + "Message without mention" : "Missatge sense menció", + "Mention myself" : "Menció a mi mateix", + "Mention everyone" : "Esmenta a tothom", + "Select a conversation" : "Seleccioneu una conversa", + "Select a mode" : "Seleccioneu un mode", + "You do not have permissions to access this conversation." : "No tens permís per accedir a aquesta conversa.", + "Join a different conversation or start a new one." : "Uneix-te a una conversa diferent o inicia-ne una de nova.", + "The conversation does not exist" : "La conversa no existeix", + "Join a conversation or start a new one!" : "Uneix-vos a una conversa o inicia'n una de nova!", + "Duplicate session" : "Sessió duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Crear i unir-se a una conversa amb \"{userid}\"", + "Join a conversation or start a new one" : "Uniu-vos a una conversa o inicieu-ne una de nova", + "Error while joining the conversation" : "S'ha produït un error en unir-se a la conversa", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Usuari Nextcloud", + "User password" : "Contrasenya d'usuari", + "Talk conversation" : "Conversa de Talk", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "URL del servidor Matrix", + "User" : "Usuari", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuari Mattermost", + "Team name" : "Nom de l'equip", + "Channel name" : "Nom del canal", + "Rocket.Chat server URL" : "URL del servidor Rocket.Chat", + "User name or email address" : "Nom d'usuari o adreça de correu electrònic", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL del servidor Zulip", + "Bot user name" : "Nom d'usuari del bot", + "Bot API key" : "Clau de l'API del bot", + "Zulip channel" : "Canal Zulip", + "API token" : "Codi de l'API", + "Slack channel" : "Canal slack", + "Server ID or name" : "ID o nom del servidor", + "Channel ID (prefixed with \"ID:\") or name" : "Identificador del canal (prefixat amb \"ID:\") o nom", + "Channel" : "Canal", + "Login" : "Inici de sessió", + "Chat ID" : "ID de xat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Areça URL del servidor IRC (p. ex., chat.freenode.net:6667)", + "Nickname" : "Sobrenom", + "Connection password" : "Contrasenya de connexió", + "IRC channel" : "Canal IRC", + "Channel password" : "Contrasenya del canal", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Fer servir TLS", + "Use SASL" : "Fer servir SASL", + "Tenant ID" : "ID de l'inquilí", + "Client ID" : "ID de Client", + "Team ID" : "ID de l'equip", + "Thread ID" : "ID de fil", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID del Jabber", + "Media" : "Multimèdia", + "Polls" : "Enquestes", + "Deck cards" : "Pila de targetes", + "Voice messages" : "Missatges de veu", + "Locations" : "Ubicacions", + "Call recordings" : "Enregistraments de trucades", + "Audio" : "Àudio", + "Show all media" : "Mostra tots els mitjans", + "Show all files" : "Mostra tots els fitxers", + "Show all polls" : "Mostra totes les enquestes", + "Show all deck cards" : "Mostra totes les cartes de baralla", + "Show all voice messages" : "Mostra tots els missatges de veu", + "Show all locations" : "Mostra totes les ubicacions", + "Show all call recordings" : "Mostra tots els enregistraments de trucades", + "Show all audio" : "Mostra tot l'àudio", + "Show all other" : "Mostra tots els altres", + "Group" : "Grup", + "Team" : "Equip", + "You reconnected to the call" : "T'has tornat a connectar a la trucada", + "{actor} reconnected to the call" : "{actor} s'ha tornat a connectar a la trucada", + "You added {user0} and {user1}" : "Heu afegit {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Heu afegit {user0}, {user1} i %n participant més","Heu afegit {user0}, {user1} i %n participants més"], + "An administrator added you and {user0}" : "Un administrador t'ha afegit a tu i a {user0}", + "{actor} added you and {user0}" : "{actor} t'ha afegit a tu i a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrador t'ha afegit a tu, {user0} i %n participant més","Un administrador t'ha afegit a tu, {user0} i %n participants més"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} t'ha afegit a tu, {user0} i %n participant més","{actor} t'ha afegit a tu, {user0} i %n participants més"], + "An administrator added {user0} and {user1}" : "Un administrador ha afegit {user0} i {user1}", + "{actor} added {user0} and {user1}" : "{actor} ha afegit {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrador ha afegit {user0}, {user1} i %n participant més","Un administrador ha afegit {user0}, {user1} i %n participants més"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha afegit {user0}, {user1} i %n participant més","{actor} ha afegit {user0}, {user1} i %n participants més"], + "You removed {user0} and {user1}" : "Has eliminat {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Has eliminat {user0}, {user1} i %n participants més","Has eliminat {user0}, {user1} i %n participants més"], + "An administrator removed you and {user0}" : "Un administrador t'ha suprimit a tu i a {user0}", + "{actor} removed you and {user0}" : "{actor} us ha eliminat a vosaltres i a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrador us ha eliminat a vosaltres, a {user0} i a %n participants més","Un administrador us ha eliminat a vosaltres, {user0} i %n participants més"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} us ha eliminat a vosaltres, {user0} i %n participants més","{actor} us ha eliminat a vosaltres, {user0} i %n participants més"], + "An administrator removed {user0} and {user1}" : "Un administrador ha eliminat {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ha eliminat {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrador ha eliminat {user0}, {user1} i %n participants més","Un administrador ha eliminat {user0}, {user1} i %n participants més"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} ha eliminat {user0}, {user1} i %n participants més","{actor} ha eliminat {user0}, {user1} i %n participants més"], + "You and {user0} joined the call" : "Tu i {user0} us heu unit a la trucada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tu, {user0} i %n participant més us heu unit a la trucada","Tu, {user0} i %n participants més us heu unit a la trucada"], + "{user0} and {user1} joined the call" : "{user0} i {user1} s'han unit a la trucada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i %n participant més s'han unit a la trucada","{user0}, {user1} i %n participants més s'han unit a la trucada"], + "You and {user0} left the call" : "Tu i {user0} heu deixat la trucada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Tu, {user0} i %n participant més van deixar la trucada","Tu, {user0} i %n participants més van deixar la trucada"], + "{user0} and {user1} left the call" : "{user0} i {user1} van deixar la trucada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i %n participant més van abandonar la trucada","{user0}, {user1} i %n participants més van abandonar la trucada"], + "You promoted {user0} and {user1} to moderators" : "Has promocionat {user0} i {user1} a moderadors", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Has promocionat {user0}, {user1} i %n participant més a moderadors","Has promocionat {user0}, {user1} i %n participants més a moderadors"], + "An administrator promoted you and {user0} to moderators" : "Un administrador us ha promocionat a ru i a {user0} a moderadors", + "{actor} promoted you and {user0} to moderators" : "{actor} us ha promocionat i a {user0} a moderadors", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrador us ha promocionat a ru, {user0} i %n participant més a moderadors","Un administrador us ha promocionat a tu, {user0} i %n participants més a moderadors"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} us ha promocionat a tu, {user0} i %n participant més a moderadors","{actor} us ha promocionat a tu, {user0} i %n participants més a moderadors"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrador ha promocionat {user0} i {user1} a moderadors", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha promocionat {user0} i {user1} a moderadors", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrador va promocionar {user0}, {user1} i %n participant més a moderadors","Un administrador va promocionar {user0}, {user1} i %n participants més a moderadors"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha promocionat {user0}, {user1} i %n participant més a moderadors","{actor} ha promocionat {user0}, {user1} i %n participants més a moderadors"], + "You demoted {user0} and {user1} from moderators" : "Has degradat {user0} i {user1} dels moderadors", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Has degradat {user0}, {user1} i %n participant més dels moderadors","Has degradat {user0}, {user1} i %n participants més dels moderadors"], + "An administrator demoted you and {user0} from moderators" : "Un administrador us ha degradat a tu i a {user0} dels moderadors", + "{actor} demoted you and {user0} from moderators" : "{actor} us ha degradat a tu i a {user0} dels moderadors", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrador us ha degradat a tu, {user0} i %n participant més dels moderadors","Un administrador us ha degradat a tu, {user0} i %n participants més dels moderadors"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} us ha degradat a tu, {user0} i %n participant més dels moderadors","{actor} us ha degradat a tu, {user0} i %n participants més dels moderadors"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrador ha degradat {user0} i {user1} dels moderadors", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ha degradat {user0} i {user1} dels moderadors", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrador ha degradat {user0}, {user1} i %n participant més dels moderadors","Un administrador ha degradat {user0}, {user1} i %n participants més dels moderadors"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha degradat {user0}, {user1} i %n participant més dels moderadors","{actor} ha degradat {user0}, {user1} i %n participants més dels moderadors"], + "You: {lastMessage}" : "Vostè: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editat per tu)", + "(edited by a deleted user)" : "(editat per un usuari eliminat)", + "(edited by {moderator})" : "(editat per {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Esteu intentant unir-vos a una conversa mentre teniu una sessió activa en una altra finestra o dispositiu. Això actualment no és compatible amb Nextcloud Talk. Què voleu fer?", + "Leave this page" : "Surt d'aquesta pàgina", + "Join here" : "Unir-se aquí", + "Deck card has been posted to {conversation}" : "La pila de targetes s'ha publicat a {conversation}", + "An error occurred while posting deck card to conversation" : "S'ha produït un error en publicar la pila de targetes a la conversa", + "Post to a conversation" : "Publica en una conversa", + "Post to conversation" : "Publica a la conversa", + "The recording failed. Please contact your administrator." : "La gravació ha fallat. Poseu-vos en contacte amb el vostre administrador.", + "Location has been posted to {conversation}" : "La ubicació s'ha publicat a {conversation}", + "An error occurred while posting location to conversation" : "S'ha produït un error en publicar la ubicació a la conversa", + "Share to a conversation" : "Comparteix en una conversa", + "Share to conversation" : "Comparteix a la conversa", + "In conversation" : "En conversa", + "Search in conversation: {conversation}" : "Cerca a la conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Les vostres sol·licituds estan limitades en aquest moment a causa de la protecció de força bruta", + "Error while clearing conversation history" : "S'ha produït un error en esborrar l'historial de converses", + "Error occurred while allowing guests" : "S'ha produït un error en permetre els convidats", + "Error occurred while disallowing guests" : "S'ha produït un error en desactivar convidats", + "Error occurred when restricting the conversation to moderator" : "S'ha produït un error en restringir la conversa al moderador", + "Error occurred when opening the conversation to everyone" : "S'ha produït un error en obrir la conversa a tothom", + "Conversation password has been saved" : "La contrasenya de la conversa s'ha desat", + "Conversation password has been removed" : "La contrasenya de la conversa s'ha eliminat", + "Error occurred while saving conversation password" : "S'ha produït un error en desar la contrasenya de la conversa", + "Call recording is starting." : "S'està començant la gravació de trucades.", + "Call recording stopped while starting." : "La gravació de trucades s'ha aturat mentre començava.", + "Call recording stopped. You will be notified once the recording is available." : "S'ha aturat la gravació de trucades. Se us notificarà quan la gravació estigui disponible.", + "Conversation picture set" : "Conjunt d'imatges de conversa", + "Conversation picture deleted" : "S'ha suprimit la imatge de la conversa", + "Could not delete the conversation picture" : "No s'ha pogut suprimir la imatge de la conversa", + "Could not post message: {errorMessage}" : "No s'ha pogut publicar el missatge: {errorMessage}", + "Participant is banned successfully" : "El participant està prohibit correctament", + "Error while banning the participant" : "S'ha produït un error en prohibir el participant", + "An error occurred while fetching the participants" : "S'ha produït un error en recuperar els participants", + "Could not send invitation to {actorId}" : "No s'ha pogut enviar la invitació a {actorId}", + "Invitations sent" : "Invitacions enviades", + "Error occurred when sending invitations" : "S'ha produït un error en enviar les invitacions", + "Failed to join the conversation." : "No s'ha pogut unir a la conversa.", + "An error occurred while creating breakout rooms" : "S'ha produït un error en crear les sales de treball", + "An error occurred while re-ordering the attendees" : "S'ha produït un error en tornar a ordenar els assistents", + "An error occurred while deleting breakout rooms" : "S'ha produït un error en suprimir les sales de treball", + "An error occurred while starting breakout rooms" : "S'ha produït un error en iniciar les sales de treball", + "An error occurred while stopping breakout rooms" : "S'ha produït un error en aturar les sales de treball", + "An error occurred while sending a message to the breakout rooms" : "S'ha produït un error en enviar un missatge a les sales de treball", + "An error occurred while requesting assistance" : "S'ha produït un error en sol·licitar ajuda", + "An error occurred while resetting the request for assistance" : "S'ha produït un error en restablir la sol·licitud d'assistència", + "An error occurred while joining breakout room" : "S'ha produït un error en unir-se a la sala de grups", + "An error occurred while accepting an invitation" : "S'ha produït un error en acceptar una invitació", + "An error occurred while rejecting an invitation" : "S'ha produït un error en rebutjar una invitació", + "{guest} (guest)" : "{guest} (convidat)", + "Poll draft has been saved" : "S'ha desat l'esborrany de l'enquesta", + "An error occurred while saving the draft" : "S'ha produït un error en desar l'esborrany", + "An error occurred while submitting your vote" : "S'ha produït un error en enviar el vostre vot", + "An error occurred while ending the poll" : "S'ha produït un error en finalitzar l'enquesta", + "An error occurred while deleting the poll draft" : "S'ha produït un error en suprimir l'esborrany de l'enquesta", + "Poll \"{name}\" was created by {user}. Click to vote" : "L'enquesta \"{name}\" l'ha creat {user}. Feu clic per votar", + "Failed to add reaction" : "No s'ha pogut afegir la reacció", + "Failed to remove reaction" : "No s'ha pogut suprimir la reacció", + "Error while uploading file \"{fileName}\"" : "Error en carregar el fitxer \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "No hi ha prou espai lliure per pujar el fitxer \"{fileName}\"", + "You are not allowed to share files" : "No teniu permís per compartir fitxers", + "Error while sharing file" : "Error en compartir el fitxer", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "El navegador que utilitzeu no és totalment compatible amb Nextcloud Talk. Feu servir la darrera versió de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["D'aquí a %n hora","d'aquí %n hores"], + "_%n minute _::_%n minutes_" : ["d'aquí a %n minut","%n minuts"], + "In {hours} and {minutes}" : "A {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["D'aquí a %n minut","d'aquí %n minuts"], + "Later today – {timeLocale}" : "Avui més tard: {timeLocale}", + "Tomorrow – {timeLocale}" : "Demà: {timeLocale}", + "This weekend – {timeLocale}" : "Aquest cap de setmana: {timeLocale}", + "Next week – {timeLocale}" : "La setmana següent: {timeLocale}", + "Message link copied to clipboard" : "S'ha copiat l'enllaç del missatge al porta-retalls", + "Conversation link copied to clipboard" : "L'enllaç de la conversa s'ha copiat al porta-retalls", + "The link could not be copied" : "No s'ha pogut copiar l'enllaç", + "Error while parsing a PROPFIND error" : "S'ha produït un error en analitzar un error PROPFIND", + "Sending signaling message has failed" : "No s'ha pogut enviar el missatge de senyalització", + "Lost connection to signaling server. Trying to reconnect." : "S'ha perdut la connexió al servidor de senyalització. S'està intentant tornar a connectar.", + "Lost connection to signaling server." : "S'ha perdut la connexió amb el servidor de senyalització.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de senyalització configurat s'ha d'actualitzar perquè sigui compatible amb aquesta versió de Converses. Si us plau, poseu-vos en contacte amb la vostre administració.", + "Please restart the app." : "Si us plau, reinicieu l'aplicació.", + "Please reload the page." : "Torneu a carregar la pàgina.", + "Please try to restart the app." : "Si us plau, prova de reiniciar l'aplicació.", + "Please try to reload the page." : "Si us plau, prova de tornar a carregar la pàgina.", + "Do not disturb" : "No molesteu", + "Away" : "Absent", + "Microphone {number}" : "Micròfon {number}", + "Camera {number}" : "Càmera {number}", + "Speaker {number}" : "Altaveu {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembla que esteu parlant mentre esteu silenciat/da, si us plau, deixeu de silenciar-vos perquè altres persones us puguin sentir", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No s'ha pogut establir una connexió amb almenys un participant. Pot ser que calgui un servidor TURN per a l'escenari. Demaneu a l'administrador que en configure un després segons {linkstart}aquesta documentació{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Això ja porta massa estona. Ja s'han acceptat (o rebutjat) els permisos multimèdia necessaris al vostre navegador/sistema? Si és així llavors reinicieu el navegador web, perquè estan fallant l'àudio i el vídeo", + "Access to microphone & camera is only possible with HTTPS" : "L'accés al micròfon i a la càmera només és possible amb HTTPS", + "Please move your setup to HTTPS" : "Heu de canviar la vostra configuració a HTTPS", + "Access to microphone & camera was denied" : "S'ha denegat l'accés al micròfon i a la càmera", + "WebRTC is not supported in your browser" : "WebRTC no és compatible amb el vostre navegador", + "Please use a different browser like Firefox or Chrome" : "Si us plau, utilitzeu un navegador diferent, com Firefox o Chrome", + "Error while accessing microphone & camera" : "S'ha produït un error en accedir al micròfon i a la càmera", + "%s Talk on your mobile devices" : "%s Talk als vostres dispositius mòbils", + "Join conversations at any time, anywhere, on any device." : "Uneix-te a les converses en qualsevol moment, en qualsevol lloc, i en qualsevol dispositiu.", + "Android app" : "Aplicació d'Android", + "iOS app" : "aplicació d'iOS", + "__language_name__" : "__language_name__", + "Webhook Demo" : "Demostració de Webhook", + "Call summary (%s)" : "Resum de la trucada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "El bot de resum de trucades publica un missatge de visió general després de la trucada amb una llista de tots els participants i exposant les tasques", + "Tasks" : "Tasques", + "Notes" : "Notes", + "Reports" : "Informes", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Resum de la trucada", + "Call summary - {title}" : "Resum de la trucada: {title}", + "Talk conversation for event" : "Converses per a l'esdeveniment", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push està instal·lat, això millora el rendiment dels clients d'escriptori.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} no està instal·lat, això pot provocar problemes de rendiment quan s'utilitzen clients d'escriptori.", + "Next meeting" : "Propera reunió", + "Join conversations from remote Nextcloud servers" : "Uniu-vos a converses des de servidors remots de Nextcloud", + "Your default media state has been saved" : "El vostre estat multimèdia predeterminat s'ha desat", + "Set reminder for later today" : "Estableix un recordatori per a més tard avui", + "Set reminder for tomorrow" : "Estableix un recordatori per a demà", + "Set reminder for this weekend" : "Estableix un recordatori per a aquest cap de setmana", + "Set reminder for next week" : "Estableix un recordatori per a la setmana següent", + "Generate summary" : "Generar resum", + "Open poll • You voted already" : "Enquesta oberta • Ja heu votat", + "Open poll • Click to vote" : "Enquesta oberta • Feu clic per votar", + "Poll • Ended" : "Enquesta • Finalitzada", + "Talk recording from {time} ({conversation})" : "Enregistrament de conversa des de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultats de l'enquesta • %n vot","Resultats de l'enquesta • %n vots"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquesta oberta • %n vot","Enquesta oberta • %n vots"], + "Submit vote" : "Enviar vot", + "Your privacy setting has been saved" : "Els vostres paràmetres de privadesa s'ha desat", + "Your personal setting has been saved" : "La teva configuració personal s'ha desat", + "Failed to save sounds setting" : "No s'han pogut desar els paràmetres dels sons", + "Sounds setting saved" : "S'ha desat els paràmetres de sons", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Converses s'ha actualitzat, no pots iniciar ni unir-te a una trucada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "S’ha unit a la conversa en una altra finestra o dispositiu. Actualment no és compatible amb Nextcloud Talk, de manera que aquesta sessió s'ha tancat.", + "Nextcloud Talk was updated." : "Nextcloud Talk s'ha actualitzat.", + "Nextcloud is in maintenance mode." : "Nextcloud està en mode de manteniment.", + "Nextcloud Talk Federation was updated." : "Nextcloud Converses Federació s'ha actualitzat." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/cs.js b/l10n/cs.js new file mode 100644 index 0000000..e7e247b --- /dev/null +++ b/l10n/cs.js @@ -0,0 +1,2235 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "konverzace", + "(Duration %s)" : "(Doba trvání %s)", + "You attended a call with {user1}" : "Zúčastnili jste se hovoru s {user1}", + "_%n guest_::_%n guests_" : ["%n host","%n hosté","%n hostů","%n hosté"], + "You attended a call with {user1} and {user2}" : "Zúčastnili jste se hovoru s {user1} a {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Zúčastnili jste se hovoru s {user1}, {user2} a {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Zúčastnili jste se hovoru s {user1}, {user2}, {user3} a {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Zúčastnili jste se hovoru s {user1}, {user2}, {user3}, {user4} a {user5}", + "_%n other_::_%n others_" : ["%n dalším","%n dalšími","%n dalšími","%n dalšími"], + "{actor} invited you to {call}" : "{actor} vás pozval(a) do {call}", + "You were invited to a conversation or had a call" : "Byli jste přizvání do konverzace nebo vám někdo volal", + "Other activities" : "Ostatní aktivity", + "Talk" : "Talk", + "Guest" : "Host", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Vítejte v Nextcloud Talk!\nV této konverzaci budete informováni o nových funkcích, dostupných v Nextcloud Talk.", + "## New in Talk %s" : "## Novinky v Talk verze %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Účastnit se (video)hovorů je nyní možné i z prohlížečů Microsoft Edge a Safari", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- konverzace se dvěma účastníky jsou nyní trvalé a už se nedají omylem přepnout do skupinové konverzace. Dále, pokud jeden z účastníků odejde, konverzace už není automaticky smazána. Konverzace je ze serveru vymazána teprve, až když odejdou oba", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Nově lze upozornit všechny účastníky chatu a to odesláním „@all“ v příspěvku.", + "- With the \"arrow-up\" key you can repost your last message" : "- Pomocí šipky nahoru můžete znovu poslat svoji předchozí zprávu.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk nově disponuje příkazy pro aplikaci. To, zda správce vašeho Nextcloud nějaké nastavil zjistíte posláním zprávy s textem \"/help\"", + "- With projects you can create quick links between conversations, files and other items" : "- Pomocí projektů lze seskupovat konverzace, soubory a další položky", + "- You can now mention guests in the chat" : "- Nově lze v konverzacích „zmiňovat“ i hosty.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konverzace nyní mohou mít „čekárnu“. To moderátorům umožňuje se k chatu nebo rozhovoru připojit s předstihem a setkání připravit, zatímco ostatní uživatelé a hosté čekají", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Nyní můžete na zprávy odpovídat přímo a poskytnout tak ostatním představu o kontextu vaší zprávy", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Hledání v konverzacích a účastnících nyní také odfiltrovává stávající konverzace, díky čemuž je mnohem snazší najít předchozí konverzace", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Pokud je nainstalovaná aplikace Okruhy, je nyní možné do konverzace přidávat uživatelsky určené skupiny", + "- Check out the new grid and call view" : "- Podívejte se na nové zobrazení v mřížce a hovoru", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nyní můžete nahrávat přetažením souborů přímo do chatu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Sdílené soubory se nyní otevírají přímo v chatu pomocí aplikací pro jejich zobrazení", + "- You can now search for chats and messages in the unified search in the top bar" : "- Nyní je možné vyhledávat v chatech a zprávách ve sjednoceném vyhledávání v horní liště", + "- Spice up your messages with emojis from the emoji picker" : "- Okořeňte své zprávy emotikony z dialogu s nimi", + "- You can now change your camera and microphone while being in a call" : "- Nyní je možné změnit kameru a mikrofon v průběhu hovoru", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Napište popis své konverzace a umožněte ji tak ostatním uživatelům snadněji najít a připojit se", + "- See a read status and send failed messages again" : "- Zkontrolujte si, kdo si zprávu už přečetl a pošlete ty nedoručené znovu", + "- Raise your hand in a call with the R key" : "- Přihlaste se při konferenci o slovo stiskem klávesy R", + "- Join the same conversation and call from multiple devices" : "- Připojit se k té stejné konverzaci a volat z vícero zařízení naráz", + "- Send voice messages, share your location or contact details" : "- Posílat hlasové zprávy, sdílet svou polohu nebo podrobnosti o kontaktu", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Přidat skupiny do konverzace a jejich noví členové pak budou automaticky přidáni jako účastníci", + "- A preview of your audio and video is shown before joining a call" : "- Před připojením k hovoru se nyní zobrazuje náhled videa a zvuku od vás", + "- You can now blur your background in the newly designed call view" : "- V nově navrženém pohledu volání, si za sebou můžete nechat rozmazat pozadí", + "- Moderators can now assign general and individual permissions to participants" : "- Moderátoři nyní mohou účastníkům upravovat všeobecná a individuální oprávnění", + "- You can now react to chat messages" : "- Nyní můžete reagovat na zprávy v chatu", + "- In the sidebar you can now find an overview of the latest shared items" : "- V postranním panelu nyní naleznete přehled naposledy sdílených položek", + "- Use a poll to collect the opinions of others or settle on a date" : "- Použijte anketu pro shromáždění názorů ostatních nebo pro dohodnutí si data", + "- Configure an expiration time for chat messages" : "- nastavte dobu skončení platnosti pro zprávy v chatu", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- V konverzacích s mnoha účastníky zahajujte hovory bez upozorňování ostatních. Upozornění na hovory je možné posílat jednotlivě po zahájení hovoru.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Odesílejte zprávy v chatu bez upozorňování příjemců pro případy, že nejsou neodkladné", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emotikony je nyní možné automaticky doplňovat napsáním „:“ (dvojtečky)", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Odkazování na různé položky pomocí nového inteligentního výběru napsáním „/“ (dopředné lomítko)", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderátoři nyní mohou vytvářet přestávkové místnosti (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Hovory je nyní možné nahrávat (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Conversations can now have an avatar or emoji as icon" : "- Konverzace nyní mohou mít jako ikonu avatara či emotikonu", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ve videohovorech jsou nyní kromě rozmazaného pozadí k dispozici také ta virtuální", + "- Reactions are now available during calls" : "- V průběhu hovorů jsou nyní k dispozici reakce", + "- Typing indicators show which users are currently typing a message" : "- Indikátory psaní zobrazují, kteří uživatelé právě píší zprávu", + "- Groups can now be mentioned in chats" : "- Skupiny je nyní možné zmiňovat v chatech", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Nahrávky hovorů jsou automaticky převáděny na text (pokud je zaregistrována aplikace poskytovatele pro vytváření přepisů)", + "- Chat messages can be translated if a translation provider app is registered" : "- Zprávy v chatu je možné překládat (pokud je zaregistrována aplikace poskytovatele pro vytváření překladů)", + "- **Markdown** can now be used in _chat_ messages" : "- ve zprávách v _chatu_ je nyní možné formátovat pomocí **markdown** značek", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- webové háčky jsou nyní k dispozici pro implementaci automatů. Podrobnosti viz dokumentace https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nastavte si připomínku ohledně zprávy v chatu a buďte tak na ni upozorněni později znovu", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- konverzaci **Poznámky pro mne** použijte pro své poznámky a sdílení informací napříč svými zařízeními", + "- Captions allow to send a message with a file at the same time" : "- titulky umožňují poslání zprávy se souborem naráz", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- video řečníka je nyní viditelné v průběhu sdílení obrazovky a reakce v hovoru jsou animované", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Zprávy je nyní možné po dobu 6 hodin upravovat přihlášenými autory a moderátory", + "- Unsent message drafts are now saved in your browser" : "- Neodeslané koncepty zpráv jsou nyní webovým prohlížečem ukládány", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textové chatování je nyní možné federovaně s ostatními Talk servery", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderátoři nyní mohou udělovat účtům vyloučení a hostům bránit v tom, aby se znovu připojovali ke konverzacím", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nacházející volání z událostí v napojeném kalendáři a zástupy při nepřítomnosti jsou nyní zobrazovány v konverzacích", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Hovory je nyní možné uskutečňovat federovaně s ostatními Talk servery (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Uvádí desktopového klienta Nextcloud Talk pro Windows, macOS a Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Díky Nextcloud asistentovi si nechte vytvářet shrnutí obsahu nahrávek hovorů a nepřečtených zpráv v chat konverzacích", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Vylepšené schůzky s uznávanými hosty pozvanými prostřednictvím jejich e-mailových adres, import seznamů účastníků, koncepty anket a stahování seznamů účastníků hovorů", + "- Archive conversations to stay focused" : "- Archivujte konverzace a vyhněte se tak rozptylování pozornosti", + "- Schedule a meeting into your calendar from within a conversation" : "- Naplánujte schůzku ve svém kalendáři přímo z konverzace", + "- Search for messages of the current conversation directly in the right sidebar" : "- Vyhledávejte ve zprávách stávající konverzace přímo v postranní liště vpravo", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Přehled o více konverzacích naráz pomocí nového zhuštěného seznamu (k zapnutí v nastavení Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- U konverzací v rámci schůzí jsou nyní synchronizovány nadpis a popis z kalendáře a jsou kryté ve vyhledávacím filtru dokud se neblíží svému zahájení", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označujte v nastavení notifikací konverzace jako citlivé a skrývejte tak obsah zpráv v seznamu konverzací a notifikacích", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Pokud chcete dostávat push notifikace i po dobu „Nevyrušovat“, označte konverzace jako důležité", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Přidávejte ostatní účastníky do hovoru jednoho-s-jedním a vytvářejte tak za pochodu nové skupinové volání", + "- Use threads to keep your chat and discussions organized" : "– Používejte vlákna a uspořádávejte tak své chaty a diskuze", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- V průběhu hovoru je nyní k dispozici průběžný přepis (vyžaduje ExApp live-transcription a podpůrnou vrstvu pro vysoký výkon)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderátoři nyní mohou připínat zprávy, takže zůstávají nahoře", + "- Schedule a message to send it at a later time" : "- Naplánovat zprávu pro její odeslání později", + "_All %n participant_::_All %n participants_" : ["Všechen %n účastník","Všichni %n účastníci","Všech %n účastníků","Všichni %n účastníci"], + "Talk updates ✅" : "Aktualizace Talk ✅", + "Reaction deleted by author" : "Reakce smazána autorem", + "{actor} created the conversation" : "{actor} vytvořil(a) konverzaci", + "You created the conversation" : "Vytvořili jste konverzaci", + "System created the conversation" : "Systém vytvořil konverzaci", + "An administrator created the conversation" : "Správce vytvořil konverzaci", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} přejmenoval(a) konverzaci z „%1$s“ na „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Přejmenovali jste konverzaci z „%1$s“ na „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Správce přejmenoval konverzaci z „%1$s“ na „%2$s“", + "{actor} set the description" : "{actor} nastavil(a) popis", + "You set the description" : "Nastavili jste popis", + "An administrator set the description" : "Správce nastavil popis", + "{actor} removed the description" : "{actor} odebral(a) popis", + "You removed the description" : "Odebrali jste popis", + "An administrator removed the description" : "Správce odebral popis", + "You started a silent call" : "Zahájili jste nevyzvánějící hovor", + "Outgoing silent call" : "Odchozí hovor bez vyzvánění", + "{actor} started a silent call" : "{actor} zahájil(a) nevyzvánějící hovor", + "Incoming silent call" : "Příchozí hovor bez vyzvánění", + "You started a call" : "Zahájili jste hovor", + "Outgoing call" : "Odchozí hovor", + "{actor} started a call" : "{actor} zahájil(a) hovor", + "Incoming call" : "Příchozí hovor", + "{actor} joined the call" : "{actor} se připojil(a) k hovoru", + "You joined the call" : "Připojili jste se k hovoru", + "{actor} left the call" : "{actor} opustil(a) hovor", + "You left the call" : "Opustili jste hovor", + "{actor} unlocked the conversation" : "{actor} odemkl(a) konverzaci", + "You unlocked the conversation" : "Odemkli jste konverzaci", + "An administrator unlocked the conversation" : "Správce odemknul konverzaci", + "{actor} locked the conversation" : "{actor} uzamkl(a) konverzaci", + "You locked the conversation" : "Uzamkli jste konverzaci", + "An administrator locked the conversation" : "Správce uzamkl konverzaci", + "{actor} limited the conversation to the current participants" : "{actor} omezil(a) konverzaci pouze na stávající účastníky", + "You limited the conversation to the current participants" : "Omezili jste konverzaci pouze na stávající účastníky", + "An administrator limited the conversation to the current participants" : "Správce omezil konverzaci pouze pro stávající účastníky", + "{actor} opened the conversation to registered users" : "{actor} otevřel(a) konverzaci registrovaným uživatelům", + "You opened the conversation to registered users" : "Otevřeli jste konverzaci registrovaným uživatelům", + "An administrator opened the conversation to registered users" : "Správce otevřel konverzaci registrovaným uživatelům", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otevřel(a) konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "You opened the conversation to registered users and users created with the Guests app" : "Otevřeli jste konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Správce otevřel konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "The conversation is now open to everyone" : "Konverzace je nyní otevřena komukoliv", + "{actor} opened the conversation to everyone" : "{actor} otevřel(a) konverzaci komukoliv", + "You opened the conversation to everyone" : "Konverzaci jste zpřístupnili komukoliv", + "{actor} restricted the conversation to moderators" : "{actor} omezil(a) přístup ke konverzaci pouze na moderátory", + "You restricted the conversation to moderators" : "Omezili jste konverzaci pouze na moderátory", + "{actor} started breakout rooms" : "{actor} spustil(a) místnosti pro přestávku", + "You started breakout rooms" : "Spustili jste místnosti pro přestávku", + "{actor} stopped breakout rooms" : "{actor} zastavil(a) místnosti pro přestávku", + "You stopped breakout rooms" : "Zastavili jste místnosti pro přestávku", + "{actor} allowed guests" : "{actor} umožnil(a) hosty", + "You allowed guests" : "Umožnili jste hosty", + "An administrator allowed guests" : "Správce povolil hosty", + "{actor} disallowed guests" : "{actor} nedovolil(a) hosty", + "You disallowed guests" : "Nedovolili jste hosty", + "An administrator disallowed guests" : "Správce nepovolil hosty", + "{actor} set a password" : "{actor} nastavil(a) heslo", + "You set a password" : "Nastavili jste heslo", + "An administrator set a password" : "Správce nastavil heslo", + "{actor} removed the password" : "{actor} odebral(a) heslo", + "You removed the password" : "Odebrali jste heslo", + "An administrator removed the password" : "Správce odebral heslo", + "{actor} added {user}" : "{actor} přidal(a) {user}", + "You joined the conversation" : "Připojili jste se ke konverzaci", + "{actor} joined the conversation" : "{actor} se připojil(a) ke konverzaci", + "You added {user}" : "Přidali jste {user}", + "{actor} added you" : "{actor} vás přidal(a)", + "An administrator added you" : "Správce vás přidal", + "An administrator added {user}" : "Správce přidal {user}", + "You left the conversation" : "Opustili jste konverzaci", + "{actor} left the conversation" : "{actor} opustil(a) konverzaci", + "{actor} removed {user}" : "{actor} odebral(a) {user}", + "You removed {user}" : "Odebrali jste {user}", + "{actor} removed you" : "{actor} vás odebral(a)", + "An administrator removed you" : "Správce vás odebral", + "An administrator removed {user}" : "Správce odebral {user}", + "{actor} invited {federated_user}" : "{actor} pozval(a) {federated_user}", + "You invited {federated_user}" : "Pozvali jste {federated_user}", + "You accepted the invitation" : "Pozvánku jste přijali", + "{actor} invited you" : "{actor} vás pozval(a)", + "An administrator invited you" : "Správce vás pozval", + "An administrator invited {federated_user}" : "Správce pozval {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} přijal pozvání", + "{actor} removed {federated_user}" : "{actor} odebral(a) {federated_user}", + "You removed {federated_user}" : "Odebrali jste {federated_user}", + "You declined the invitation" : "Odmítli jste pozvánku", + "An administrator removed {federated_user}" : "Správce odebral {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odmítl pozvání", + "{actor} added group {group}" : "{actor} přidal(a) skupinu {group}", + "You added group {group}" : "Přidali jste skupinu {group}", + "An administrator added group {group}" : "Správce přidal skupinu {group}", + "{actor} removed group {group}" : "{actor} odebral(a) skupinu {group}", + "You removed group {group}" : "Odebrali jste skupinu {group}", + "An administrator removed group {group}" : "Správce odebral skupinu {group}", + "{actor} added team {circle}" : "{actor} přidal(a) tým {circle}", + "You added team {circle}" : "Přidali jste tým {circle}", + "An administrator added team {circle}" : "Správce přidal tým {circle}", + "{actor} removed team {circle}" : "{actor} odebral(a) tým {circle}", + "You removed team {circle}" : "Odebrali jste tým {circle}", + "An administrator removed team {circle}" : "Správce odebral tým {circle}", + "{actor} added {phone}" : "{actor} přidal(a) {phone}", + "You added {phone}" : "Přidali jste {phone}", + "An administrator added {phone}" : "Správce přidal {phone}", + "{actor} removed {phone}" : "{actor} odebral(a) {phone}", + "You removed {phone}" : "Odebrali jste {phone}", + "An administrator removed {phone}" : "Správce odebral {phone}", + "{actor} promoted {user} to moderator" : "{actor} povýšil(a) {user} na moderátora", + "You promoted {user} to moderator" : "Přidali jste {user} práva moderátora", + "{actor} promoted you to moderator" : "{actor} vás povýšil(a) na moderátora", + "An administrator promoted you to moderator" : "Správce vás povýšil na moderátora", + "An administrator promoted {user} to moderator" : "Správce povýšil {user} na moderátora", + "{actor} demoted {user} from moderator" : "{actor} odebral(a) uživateli {user} oprávnění moderátora", + "You demoted {user} from moderator" : "Odebrali jste {user} práva moderátora", + "{actor} demoted you from moderator" : "{actor} vám odebral(a) oprávnění moderátora", + "An administrator demoted you from moderator" : "Správce vám odebral práva moderátora", + "An administrator demoted {user} from moderator" : "Správce odebral {user} práva moderátora", + "{actor} shared a file which is no longer available" : "{actor} nasdílel(a) soubor který už není k dispozici", + "You shared a file which is no longer available" : "Sdílíte soubor který už není k dispozici", + "File shares are currently not supported in federated conversations" : "Sdílení souborů prozatím není ve federovaných konverzacích podporováno", + "The shared location is malformed" : "Popis sdíleného umístění nemá správný formát", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavil(a) Matterbridge pro synchronizaci této konverzace s ostatními chaty", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavili jste Matterbridge pro synchronizaci této konverzace s ostatními chaty", + "{actor} created thread {title}" : "{actor} vytvořil/a vlákno {title}", + "You created thread {title}" : "Vytvořili jste vlákno {title}", + "{actor} renamed thread {title}" : "{actor} přejmenoval/a vlákno {title}", + "You renamed thread {title}" : "Přejmenovali jste vlákno {title}", + "{actor} updated the Matterbridge configuration" : "{actor} aktualizoval(a) nastavení pro Matterbridge", + "You updated the Matterbridge configuration" : "Aktualizovali jste nastavení pro Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} odebral(a) nastavení pro Matterbridge", + "You removed the Matterbridge configuration" : "Odebrali jste nastavení pro Matterbridge", + "{actor} started Matterbridge" : "{actor} spustil(a) Matterbridge", + "You started Matterbridge" : "Spustili jste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zastavil(a) Matterbridge", + "You stopped Matterbridge" : "Zastavili jste Matterbridge", + "{actor} deleted a message" : "{actor} smazal(a) zprávu", + "You deleted a message" : "Smazali jste zprávu", + "{actor} edited a message" : "{actor} upravil(a) zprávu", + "You edited a message" : "Upravili jste správu", + "{actor} pinned a message" : "{actor} připnul/a zprávu", + "You pinned a message" : "Připnuli jste zprávu", + "{actor} unpinned a message" : "{actor} zrušil/a připnutí zprávy", + "Message was automatically unpinned" : "Připnutí zprávy bylo automaticky zrušeno", + "You unpinned a message" : "Zrušili jste připnutí zprávy", + "{actor} deleted a reaction" : "{actor} smazal(a) reakci", + "You deleted a reaction" : "Smazali jste reakci", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nastavili jste omezení platnosti zprávy na %n týden","Nastavili jste omezení platnosti zprávy na %n týdny","Nastavili jste omezení platnosti zprávy na %n týdnů","Nastavili jste omezení platnosti zprávy na %n týdny"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nastavili jste omezení platnosti zprávy na %n den","Nastavili jste omezení platnosti zprávy na %n dny","Nastavili jste omezení platnosti zprávy na %n dnů","Nastavili jste omezení platnosti zprávy na %n dny"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nastavili jste omezení platnosti zprávy na %n hodinu","Nastavili jste omezení platnosti zprávy na %n hodiny","Nastavili jste omezení platnosti zprávy na %n hodin","Nastavili jste omezení platnosti zprávy na %n hodiny"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nastavili jste platnost zprávy na %n minutu","Nastavili jste platnost zprávy na %n minuty","Nastavili jste platnost zprávy na %n minut","Nastavili jste platnost zprávy na %n minuty"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n týden","{actor} nastavil(a) omezení platnosti zprávy na %n týdny","{actor} nastavil(a) omezení platnosti zprávy na %n týdnů","{actor} nastavil(a) omezení platnosti zprávy na %n týdny"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n den","{actor} nastavil(a) omezení platnosti zprávy na %n dny","{actor} nastavil(a) omezení platnosti zprávy na %n dnů","{actor} nastavil(a) omezení platnosti zprávy na %n dny"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n hodinu","{actor} nastavil(a) omezení platnosti zprávy na %n hodiny","{actor} nastavil(a) omezení platnosti zprávy na %n hodin","{actor} nastavil(a) omezení platnosti zprávy na %n hodiny"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavi(a) platnost zprávy na %n minutu","{actor} nastavi(a) platnost zprávy na %n minuty","{actor} nastavi(a) platnost zprávy na %n minut","{actor} nastavi(a) platnost zprávy na %n minuty"], + "{actor} disabled message expiration" : "{actor} vypnul(a) omezení časové platnosti zprávy", + "You disabled message expiration" : "Vypnuli jste omezení časové platnosti zprávy", + "{actor} cleared the history of the conversation" : "{actor} vyčistil(a) historii konverzace", + "You cleared the history of the conversation" : "Vyčistili jste historii konverzace", + "{actor} set the conversation picture" : "{actor} nastavil(a) zástupný obrázek", + "You set the conversation picture" : "Nastavili jste obrázek konverzace", + "{actor} removed the conversation picture" : "{actor} odebral(a) obrázek konverzace", + "You removed the conversation picture" : "Odebrali jste obrázek konverzace", + "{actor} ended the poll {poll}" : "{actor} ukončil(a) anketu {poll}", + "You ended the poll {poll}" : "Ukončili jste anketu {poll}", + "{actor} started the video recording" : "{actor} zahájil(a) záznam videa", + "You started the video recording" : "Zahájili jste záznam videa", + "{actor} stopped the video recording" : "{actor} ukončil(a) záznam videa", + "You stopped the video recording" : "Ukončili jste záznam videa", + "{actor} started the audio recording" : "{actor} zahájil(a) záznam zvuku", + "You started the audio recording" : "Zahájili jste záznam zvuku", + "{actor} stopped the audio recording" : "{actor} ukončil(a) záznam zvuku", + "You stopped the audio recording" : "Zastavili ukončili jste záznam zvuku", + "The recording failed" : "Nahrávání se nezdařilo", + "Someone voted on the poll {poll}" : "Někdo hlasoval v anketě {poll}", + "Message deleted by author" : "Autor zprávu smazal", + "Message deleted by {actor}" : "Zpráva byla smazána uživatelem {actor}", + "Message deleted by you" : "Zprávu jste smazali", + "Deleted user" : "Smazaný uživatel", + "Unknown number" : "Neznámé číslo", + "Administration" : "Správa", + "System" : "Systémové", + "%s (guest)" : "%s (host)", + "Missed call" : "Zmeškaný hovor", + "Unanswered call" : "Nezvednutý hovor", + "Call ended (Duration {duration})" : "Hovor skončil (trval {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ukončil(a) hovor (trval {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Hovor s %n hostem byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor se %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor s %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor se %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Hovor s %n hostem skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ukončil hovor s %n hostem (trval {duration})","{actor} ukončil hovor se %n hosty (trval {duration})","{actor} ukončil hovor s %n hosty (trval {duration})","{actor} ukončil hovor se %n hosty (trval {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1} ended (Duration {duration})" : "Hovor s {user1} skončil (trval {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ukončil hovor s {user1} (trval {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} a {user2} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Hovor s {user1} a {user2} skončil (trval {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ukončil hovor s {user1} a {user2} (trval {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} skončil (trvání {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2} a {user3} (trval {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} skončil (trval {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3} a {user4} (trval {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} skončil (trval {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3}, {user4} a {user5} (trval {duration})", + "Message of {user} in {conversation}" : "Zpráva {user} v {conversation}", + "Message of {user}" : "Zpráva uživatele {user}", + "Message of a deleted user in {conversation}" : "Zpráva smazaného uživatele v {conversation}", + "Talk conversations" : "Konverzace v Talk", + "Talk to %s" : "Talk s %s", + "An error occurred. Please contact your administrator." : "Došlo k chybě. Obraťte se na svého správce.", + "Storage quota exceeded" : "Kvóta úložiště překročena", + "File not found" : "Soubor nenalezen", + "File is not shared, or shared but not with the user" : "Soubor není sdílen, nebo je sdílený s jiným uživatelem", + "No account available to delete." : "Není k dispozici žádný účet pro smazání.", + "Poll" : "Anketa", + "Password needs to be set" : "Je třeba nastavit heslo", + "Uploading the file failed" : "Nahrání souboru se nezdařilo", + "No image file provided" : "Neposkytnut žádný soubor, obsahující obrázek", + "File is too big" : "Soubor je příliš velký", + "Invalid file provided" : "Poskytnut neplatný soubor", + "Invalid image" : "Neplatný obrázek", + "Unknown filetype" : "Neznámý typ souboru", + "Talk mentions" : "Zmínění v Talk", + "More conversations" : "Další konverzace", + "Say hi to your friends and colleagues!" : "Pozdravte své přátele a kolegy!", + "No unread mentions" : "Žádná nepřečtená zmínění", + "Call in progress" : "Probíhá hovor", + "You were mentioned" : "Byli jste zmíněni", + "Write to conversation" : "Napsat do konverzace", + "Writes event information into a conversation of your choice" : "Napíše informace o události do konverzace, kterou zvolíte", + "Missing email field in header line" : "V řádku hlavičky chybí kolonka e-mail", + "Following lines are invalid: %s" : "Následující řádky nejsou platné: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vás přizval/a do konverzace „%2$s“.", + "You were invited to conversation \"%s\"." : "Jste pozváni do konverzace „%s“.", + "Conversation invitation" : "Pozvánka do konverzace", + "Scheduled time" : "Naplánovaný čas", + "Description" : "Popis", + "You can also dial-in via phone with the following details" : "Můžete se také připojit voláním z telefonu na následující", + "Dial-in information" : "Informace o volání sem", + "Meeting ID" : "Identif. schůzky", + "Your PIN" : "Váš PIN", + "Click the button below to join the lobby now." : "Kliknutím na tlačítko níže se k čekárně připojíte nyní.", + "Click the link below to join the lobby now." : "Kliknutím na odkaz níže se k čekárně připojíte nyní.", + "Join lobby for \"%s\"" : "Připojit se k čekárně pro „%s“", + "Click the button below to join the conversation now." : "Kliknutím na tlačítko níže se ke konverzaci připojíte nyní.", + "Click the link below to join the conversation now." : "Kliknutím na odkaz níže se ke konverzaci připojíte nyní.", + "Join \"%s\"" : "Připojit se k „%s“", + "Meeting" : "Schůze", + "Password request: %s" : "Požadavek na heslo: %s", + "Private conversation" : "Soukromá konverzace", + "Deleted user (%s)" : "Smazán uživatel (%s)", + "Failed to upload call recording" : "Nahrávku se nepodařilo nahrát na server", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Nahrávacímu serveru se nepodařilo nahrát záznam hovoru {call}. Obraťte se na správu.", + "Share to chat" : "Nasdílet do chatu", + "Dismiss notification" : "Zahodit upozornění", + "Call recording now available" : "Nahrávání hovoru je nyní k dispozici", + "The recording for the call in {call} was uploaded to {file}." : "Nahrávka pro hovor v {call} byla nahrána do {file}.", + "Transcript now available" : "Přepis je nyní k dispozici", + "The transcript for the call in {call} was uploaded to {file}." : "Přepis hovoru v {call} byl nahrán do {file}.", + "Failed to transcript call recording" : "Z nahrávky hovoru se nepodařilo udělat přepis", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru se nepodařilo vytvořit přepis nahrávky v {file} pro hovor v {call}. Obraťte se na správu.", + "Call summary now available" : "Souhrn hovoru je nyní k dispozici", + "The summary for the call in {call} was uploaded to {file}." : "Shrnutí hovoru v {call} bylo nahráno do {file}.", + "Failed to summarize call recording" : "Nepodařilo se shrnout nahrávku hovoru", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru se nepodařilo shrnout obsah nahrávky v {file} pro hovor v {call}. Obraťte se na správu.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vás pozval(a) do {roomName} na {remoteServer}", + "Accept" : "Přijmout", + "Decline" : "Odmítnout", + "{user1} invited you to a federated conversation" : "{user} vás pozval(a) do federované konverzace", + "Someone reacted" : "Někdo zareagoval", + "New message" : "Nová zpráva", + "Reminder" : "Připomínka", + "Someone mentioned you" : "Někdo vás zmínil", + "Notification" : "Upozornění", + "Someone reacted in a private conversation" : "Někdo reagoval v soukromé konverzaci", + "You received a message in a private conversation" : "Obdrželi jste zprávu v soukromé konverzaci", + "Reminder in a private conversation" : "Připomínka v soukromé konverzaci", + "Someone mentioned you in a private conversation" : "Někdo vás zmínil v soukromé konverzaci", + "Notification in a private conversation" : "Upozornění v soukromé konverzaci", + "Reminder: You in {call}" : "Připomínka: Vy v {call}", + "Reminder: {user} in {call}" : "Připomínka: {user} v {call}", + "Reminder: Deleted user in {call}" : "Připomínka: smazaný uživatel v {call}", + "Reminder: {guest} (guest) in {call}" : "Připomínka: {guest} (guest) v {call}", + "Reminder: Guest in {call}" : "Připomínka: host v {call}", + "{user} reacted with {reaction}" : "{user} reagoval(a) s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagoval(a) s {reaction} v {call}", + "Deleted user reacted with {reaction} in {call}" : "Smazaný uživatel reagoval {reaction} v {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (host) reagoval(a) {reaction} v {call}", + "Guest reacted with {reaction} in {call}" : "Host reagoval {reaction} v {call}", + "{user} in {call}" : "{user} v {call}", + "Deleted user in {call}" : "Smazaný uživatel v {call}", + "{guest} (guest) in {call}" : "{guest} (host) v {call}", + "Guest in {call}" : "Host v {call}", + "{user} sent you a private message" : "{user} vám poslal(a) soukromou zprávu", + "{user} sent a message in conversation {call}" : "{user} poslal(a) zprávu v konverzaci {call}", + "A deleted user sent a message in conversation {call}" : "Smazaný uživatel poslal zprávu v konverzaci {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (host) poslal(a) zprávu v konverzaci {call}", + "A guest sent a message in conversation {call}" : "Host poslal zprávu v konverzaci {call}", + "{user} replied to your private message" : "{user} odpověděl(a) na vaši soukromou zprávu", + "{user} replied to your message in conversation {call}" : "{user} odpověděl(a) na vaši zprávu v konverzaci {call}", + "A deleted user replied to your message in conversation {call}" : "Smazaný/á uživatel(ka) odpověděl(a) na vaši zprávu v konverzaci {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (host) odpověděl(a) na vaši zprávu v konverzaci {call}", + "A guest replied to your message in conversation {call}" : "Host odpověděl(a) na vaši zprávu v konverzaci {call}", + "Reminder: You in private conversation {call}" : "Připomínka: Vy v soukromé konverzaci {call}", + "Reminder: A deleted user in private conversation {call}" : "Připomínka: smazaný uživatel v soukromé konverzaci {call}", + "Reminder: {user} in private conversation" : "Připomínka: {user} v soukromé konverzaci", + "Reminder: You in conversation {call}" : "Připomínka: Vy v konverzaci {call}", + "Reminder: {user} in conversation {call}" : "Připomínka: {user} v konverzaci {call}", + "Reminder: A deleted user in conversation {call}" : "Připomínka: smazaný uživatel v konverzaci {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Připomínka: {guest} (host) v konverzaci {call}", + "Reminder: A guest in conversation {call}" : "Připomínka: host v konverzaci {call}", + "{user} reacted with {reaction} to your private message" : "{user} zareagoval(a) s {reaction} na vaši soukromou zprávu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Smazaný uživatel zareagoval s {reaction} na vaši zprávu v konverzaci {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (host) zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Host zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "{user} mentioned you in a private conversation" : "{user} vás zmínil(a) v soukromé konverzaci", + "{user} mentioned group {group} in conversation {call}" : "{user} zmínil(a) skupinu {group} v konverzaci {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} zmínil(a) tým {team} v konverzaci {call}", + "{user} mentioned everyone in conversation {call}" : "{user} zmínil(a) všechny v konverzaci {call}", + "{user} mentioned you in conversation {call}" : "{user} vás zmínil(a) v konverzaci {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Smazaný uživatel zmínil skupinu {group} v konverzaci {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Smazaný uživatel zmínil tým {team} v konverzaci {call}", + "A deleted user mentioned everyone in conversation {call}" : "Smazaný uživatel zmínil všechny v konverzaci {call}", + "A deleted user mentioned you in conversation {call}" : "Smazaný uživatel vás zmínil v konverzaci {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{host} (host) zmínil(a) skupinu {group} v konverzaci {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (host) zmínil(a) tým {team} v konverzaci {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{host} (host) zmínil(a) všechny v konverzaci {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (host) vás zmínil(a) v konverzaci {call}", + "A guest mentioned group {group} in conversation {call}" : "Host zmínil skupinu {group} v konverzaci {call}", + "A guest mentioned team {team} in conversation {call}" : "Host zmínil tým {team} v konverzaci {call}", + "A guest mentioned everyone in conversation {call}" : "Host zmínil všechny v konverzaci {call}", + "A guest mentioned you in conversation {call}" : "Host vás zmínil v konverzaci {call}", + "View message" : "Zobrazit zprávu", + "Dismiss reminder" : "Zahodit připomínku", + "View chat" : "Zobrazit chat", + "{user} invited you to a group conversation: {call}" : "{user} vás pozval(a) do skupinové konverzace: {call}", + "Join call" : "Připojit se k hovoru", + "Answer call" : "Přijmout hovor", + "{user} would like to talk with you" : "{user} si s vámi přeje mluvit", + "Call back" : "Zavolat zpátky", + "You missed a call from {user}" : "Zmeškali jste hovor od {user}", + "Accept call" : "Přijmout vše", + "Incoming phone call from {call}" : "Příchozí hovor od {call}", + "You missed a phone call from {call}" : "Zmeškali jste hovor od {call}", + "A group call has started in {call}" : "V {call} byl zahájen skupinový hovor", + "You missed a group call in {call}" : "Zmeškali jste skupinový hovor v {call}", + "{email} is requesting the password to access {file}" : "{email} požádal(a) o heslo pro přístup k {file}", + "{email} tried to request the password to access {file}" : "{email} se pokusil(a) vyžádat si heslo pro přístup k {file}", + "Someone is requesting the password to access {file}" : "Někdo si žádá o heslo pro přístup k {file}", + "Someone tried to request the password to access {file}" : "Někdo se pokusil(a) vyžádat si heslo pro přístup k {file}", + "Open settings" : "Otevřít nastavení", + "Hosted signaling server added" : "Hostovaný signální server přidán", + "The hosted signaling server is now configured and will be used." : "Nyní je nastavený hostovaný signalizační server a bude použit.", + "Hosted signaling server removed" : "Hostovaný signální server odebrán", + "The hosted signaling server was removed and will not be used anymore." : "Hostovaný signální server byl odebrán a už nebude používán.", + "Hosted signaling server changed" : "Hostovaný signální server změněn", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Stav účtu na hostovaném signalizačním serveru se změnil z „{oldstatus}“ na „{newstatus}“.", + "pending" : "čeká", + "active" : "aktivní", + "expired" : "platnost skončila", + "blocked" : "blokováno", + "error" : "chyba", + "The certificate of {host} expires in {days} days" : "Certifikátu {host} skončí platnost za {days} dny/ů", + "The certificate of {host} expired" : "Platnost certifikátu {host} skončila", + "Contact via Talk" : "Kontakt přes Talk", + "Open Talk" : "Otevřít Talk", + "Default" : "Výchozí", + "Presentation" : "Prezentace", + "Voice room" : "Hlasová místnost", + "Webinar" : "Webinář", + "Conversations" : "Konverzace", + "Messages in current conversation" : "Zprávy ve stávající konverzaci", + "{user}" : "{user}", + "Messages" : "Zprávy", + "{user} in {conversation}" : "{user} v {conversation}", + "Messages in other conversations" : "Zprávy v ostatních konverzacích", + "One-to-one rooms always need to show the other users avatar" : "Místnosti typu s jen dvěma komunikujícími vždy vyžadují zobrazení profilového obrázku druhého uživatele", + "Invalid emoji character" : "Neplatný znak emotikony", + "Invalid background color" : "Neplatná barva pozadí", + "Avatar image is not square" : "Profilový obrázek není čtvercový", + "Room {number}" : "Místnost {number}", + "Other" : "Ostatní", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepodařilo se zažádat o zkušební období, protože příslušný server není dosažitelný. Prosím zkuste to znovu později.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Je problém s ověřováním této instance. Možná není dosažitelná zvenčí, což je třeba pro ověření její URL adresy.", + "Something unexpected happened." : "Stalo se něco neočekávaného.", + "The URL is invalid." : "URL adresa není platná.", + "An HTTPS URL is required." : "Je zapotřebí HTTPS URL.", + "The email address is invalid." : "E-mailová adresa není platná.", + "The language is invalid." : "Jazyk není platný.", + "The country is invalid." : "Země není platná.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Je problém se žádostí o zkušební období. Podrobnosti naleznete v záznamech událostí.", + "Too many requests are send from your servers address. Please try again later." : "Z adresy vašeho serveru bylo odesláno příliš mnoho požadavků. Prosím zkuste to znovu později.", + "There is already a trial registered for this Nextcloud instance." : "Pro tuto instanci Nextcloud už je zaregistrováno zkušební období.", + "Something unexpected happened. Please try again later." : "Stalo se něco neočekávaného. Prosím zkuste to znovu později.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepodařilo se zažádat o zkušební období, protože příslušný server se zachoval chybně. Prosím zkuste to znovu později.", + "Trial requested but failed to get account information. Please check back later." : "O zkušební období zažádáno, ale nepodařilo se získat informace o účtu. Prosím vraťte se sem později.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Je problém s ověřením tohoto požadavku. Možné není dosažitelné zvenčí, což je třeba pro ověření jeho URL adresy.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepodařilo se získat informace o účtu, protože server pro vyzkoušení si se zachoval chybně. Prosím vraťte se sem později.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Je problém se získáním informací o účtu. Další informace naleznete v záznamech událostí.", + "There is no such account registered." : "Není zde zaregistrován žádný takový účet.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepodařilo se získat informace o účtu, protože server pro vyzkoušení si není dosažitelný. Prosím vraťte se sem později.", + "Deleting the hosted signaling server account failed. Please check back later." : "Smazání účtu hostovaného signalizačního serveru se nezdařilo. Prosím vraťte se sem později.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Účet se nepodařilo smazat protože server pro vyzkoušení si se zachoval chybně. Prosím vraťte se sem později.", + "There is a problem with deleting the account. Please check your logs for further information." : "Je problém se smazáním účtu. Další informace naleznete v záznamech událostí.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresy vašeho serveru bylo odesláno příliš mnoho požadavků. Prosím zkuste to znovu později.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Účet se nepodařilo smazat, protože server pro vyzkoušení si není dosažitelný. Prosím vraťte se sem znovu později.", + "Note to self" : "Poznámka pro mne", + "A place for your private notes, thoughts and ideas" : "Místo pro vaše soukromé poznámky, myšlenky a nápady", + "Transcript is AI generated and may contain mistakes" : "Přepis je vytvářen AI a může obsahovat chyby", + "Summary is AI generated and may contain mistakes" : "Shrnutí je vytvářeno AI a může obsahovat chyby", + "Let's get started!" : "Začněme!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je bezpečná komunikační platforma, která je plně integrovaná do ekosystému Nextcloud.\n\n#### Klíčové vymoženosti Nextcloud Talk:\n\n* Chatování v místnostech jeden na jednoho i ve skupinových chatech\n* Umožňuje uskutečňovat hlasové hovory i video hovory \n* Můžete jednoduše posílat soubory a využívat integrace s dalšími aplikacemi Nextcloud\n* Nabízí možnosti přizpůsobení konverzací, jejich moderování a správu soukromí\n* Je možné ho používat na Webu, počítači i mobilu (s operačním systémem iOS nebo Android)\n* Skutečně soukromou a zabezpečenou komunikaci\n\nZjistěte více v [dokumentaci pro uživatele](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Vítejte v Nextcloud Talk\n\nNextcloud Talk je soukromá a vybavená aplikace pro posílání zpráv, napojená na Nextcloud server. Pište si v soukromých nebo skupinových konverzacích, spolupracujte prostřednictvím hlasových a video hovorů, uspořádávejte webináře a události, přizpůsobujte si své konverzace a mnoho dalšího.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Využívejte možností formátování a vytvářejte líbivé zprávy\n\nV Nextcloud Talk můžete pro formátování zpráv využívat syntaxu Markdown. Například můžete text **ztučnit**, napsat ho *kurzívou* nebo `ho zvýrazňovat jako programový kód`. Dokonce můžete vytvářet tabulky, nadpisy a záhlaví.\n\nPotřebujete opravit překlep nebo změnit formátování? Upravte zprávu ťuknutím na tlačítko \"Upravit zprávu\" v podmenu zprávy.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Vkládejte přílohy a odkazy\n\nPřipojujte soubory z Nextcloud Hubu pomocí tlačítka \"+\". Sdílejte soubory a položky z dalších aplikací Nextcloud. Některé aplikace podporují i interaktivní widgety, například aplikace Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Nechte rozhovory téct proudem: zmiňujte uživatele a reagujte na zprávy\n\nMůžete zmínit všechny účastníky konverzace použitím %s - anebo zmiňte jen specifické osoby tak, že napíšete \"@\" a jejich jméno dopíšete nebo ho vyberete ze seznamu.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Na zprávy je možné odpovídat, přeposílat je do dalších chatů nebo kopírovat jejich obsah.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Buďte rychlejší se Smart Picker\n\nJen napište \"/\" nebo běžte do nabídky \"+\" odkud otevřete Smart Picker díky kterému můžete ke svým zprávám přikládat nepřeberné množství obsahu. Smart Picker také můžete nakonfigurovat tak, aby byl schopný připojovat položky z aplikací Nextcloud, GIFy, umístění na mapách, obsah vygenerovaný AI a mnoho dalšího.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Spravujte nastavení konverzací\n\nV menu konverzace můžete přistupovat k mnoha nastavením, pomocí kterých můžete chaty spravovat, například můžete:\n* Upravovat informace o konverzaci a její popis\n* Spravovat oznámení\n* Vynucovat moderační pravidla\n* Spravovat přístup a zabezpečení\n* Přidávat roboty\n* a je tam toho ještě víc!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Spojené Arabské Emiráty", + "Afghanistan" : "Afgánistán", + "Antigua and Barbuda" : "Antigua a Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánie", + "Armenia" : "Arménie", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Americká Samoa", + "Austria" : "Rakousko", + "Australia" : "Austrálie", + "Aruba" : "Aruba", + "Åland Islands" : "Alandy", + "Azerbaijan" : "Ázerbájdžán", + "Bosnia and Herzegovina" : "Bosna a Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladéš", + "Belgium" : "Belgie", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulharsko", + "Bahrain" : "Bahrajn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Svatý Bartoloměj", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunej", + "Bolivia, Plurinational State of" : "Bolívie", + "Bonaire, Sint Eustatius and Saba" : "Karibské Nizozemsko", + "Brazil" : "Brazílie", + "Bahamas" : "Bahamy", + "Bhutan" : "Bhútán", + "Bouvet Island" : "Bouvetův ostrov", + "Botswana" : "Botswana", + "Belarus" : "Bělorusko", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosové ostrovy", + "Congo, the Democratic Republic of the" : "Kongo", + "Central African Republic" : "Středoafrická republika", + "Congo" : "Kongo", + "Switzerland" : "Švýcarsko", + "Côte d'Ivoire" : "Pobřeží slonoviny", + "Cook Islands" : "Cookovy ostrovy", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Čína", + "Colombia" : "Kolumbie", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapverdy", + "Curaçao" : "Curaçao", + "Christmas Island" : "Vánoční ostrov", + "Cyprus" : "Kypr", + "Czechia" : "Česko", + "Germany" : "Německo", + "Djibouti" : "Džibutsko", + "Denmark" : "Dánsko", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikánská republika", + "Algeria" : "Alžír", + "Ecuador" : "Ekvádor", + "Estonia" : "Estonsko", + "Egypt" : "Egypt", + "Western Sahara" : "Západní Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Španělsko", + "Ethiopia" : "Etiopie", + "Finland" : "Finsko", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandské ostrovy (Malvíny)", + "Micronesia, Federated States of" : "Mikronésie", + "Faroe Islands" : "Faerské ostrovy", + "France" : "Francie", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Spojené království Velké Británie a Severního Irska", + "Grenada" : "Grenada", + "Georgia" : "Gruzie", + "French Guiana" : "Francouzská Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grónsko", + "Gambia" : "Gambie", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Rovníková Guinea", + "Greece" : "Řecko", + "South Georgia and the South Sandwich Islands" : "Jižní Georgie a Jižní Sandwichovy ostrovy", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heardův ostrov a McDonaldovy ostrovy", + "Honduras" : "Honduras", + "Croatia" : "Chorvatsko", + "Haiti" : "Haiti", + "Hungary" : "Maďarsko", + "Indonesia" : "Indonézie", + "Ireland" : "Irsko", + "Israel" : "Izrael", + "Isle of Man" : "Man", + "India" : "Indie", + "British Indian Ocean Territory" : "Britské indickooceánské území", + "Iraq" : "Irák", + "Iran, Islamic Republic of" : "Írán", + "Iceland" : "Island", + "Italy" : "Itálie", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordánsko", + "Japan" : "Japonsko", + "Kenya" : "Keňa", + "Kyrgyzstan" : "Kyrgyzstán", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Svatý Kryštof a Nevis", + "Korea, Democratic People's Republic of" : "Severní Korea (KLDR)", + "Korea, Republic of" : "Jižní Korea", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanské ostrovy", + "Kazakhstan" : "Kazachstán", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Svatá Lucie", + "Liechtenstein" : "Lichnštejnsko", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libérie", + "Lesotho" : "Lesotho", + "Lithuania" : "Litva", + "Luxembourg" : "Lucembursko", + "Latvia" : "Lotyšsko", + "Libya" : "Libye", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldávie", + "Montenegro" : "Černá Hora", + "Saint Martin (French part)" : "Svatý Martin (francouzská část)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovy ostrovy", + "North Macedonia" : "Severní Makedonie", + "Mali" : "Mali", + "Myanmar" : "Barma", + "Mongolia" : "Mongolsko", + "Macao" : "Macao", + "Northern Mariana Islands" : "Severní Mariany", + "Martinique" : "Martinik", + "Mauritania" : "Mauritánie", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurícius", + "Maldives" : "Maledivy", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malajsie", + "Mozambique" : "Mozambik", + "Namibia" : "Nambie", + "New Caledonia" : "Nová Kaledonie", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk", + "Nigeria" : "Nigérie", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Nizozemí", + "Norway" : "Norsko", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nový Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francouzská Polynésie", + "Papua New Guinea" : "Papua-Nová Guinea", + "Philippines" : "Filipíny", + "Pakistan" : "Pakistán", + "Poland" : "Polsko", + "Saint Pierre and Miquelon" : "Saint-Pierre a Miquelon", + "Pitcairn" : "Pitcairnovy ostrovy", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugalsko", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunsko", + "Serbia" : "Srbsko", + "Russian Federation" : "Ruská federace", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudská Arábie", + "Solomon Islands" : "Šalamounovy ostrovy", + "Seychelles" : "Seychely", + "Sudan" : "Súdán", + "Sweden" : "Švédsko", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Svatá Helena", + "Slovenia" : "Slovinsko", + "Svalbard and Jan Mayen" : "Špicberky a Jan Mayen", + "Slovakia" : "Slovensko", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somálsko", + "Suriname" : "Surinam", + "South Sudan" : "Jižní Súdán", + "Sao Tome and Principe" : "Svatý Tomáš a Princův ostrov", + "El Salvador" : "Salvador", + "Sint Maarten (Dutch part)" : "Svatý Martin (nizozemská část)", + "Syrian Arab Republic" : "Sýrie", + "Eswatini" : "Svazijsko", + "Turks and Caicos Islands" : "Turks a Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francouzská jižní a antarktická území", + "Togo" : "Togo", + "Thailand" : "Thajsko", + "Tajikistan" : "Tádžikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Východní Timor", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Tunisko", + "Tonga" : "Tonga", + "Turkey" : "Turecko", + "Trinidad and Tobago" : "Trinidad a Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tchaj-wan (provincie)", + "Tanzania, United Republic of" : "Tanzanie", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Menší odlehlé ostrovy Spojených států amerických", + "United States of America" : "Spojené státy americké", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Svatý stolec", + "Saint Vincent and the Grenadines" : "Svatý Vincenc a Grenadiny", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Britské Panenské ostrovy", + "Virgin Islands, U.S." : "Americké Panenské ostrovy", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis a Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Jihoafrická republika", + "Zambia" : "Zambie", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmazání pozadí", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepodařilo se zkontrolovat podporu načítání WASM. Zkontrolujte ručně, zda vámi využívaný webový server poskytuje .wasm` soubory.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Váš webový server není správně nastaven k doručování `.wasm` souborů. To je obvykle chyba v nastavení Nginx. Pro rozmazávání pozadí potřebuje úpravu také k doručování `.wasm` souborů. Porovnejte své nastavení Nginx s doporučeným nastavením v naší dokumentaci.", + "Talk configuration values" : "Hodnoty nastavení Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Vynucování omezení délky hovoru je podporováno pouze při používání systémového plánovače cron. Zapněte jeho používání nebo odeberte nastavení `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Nízké hodnoty `max_call_duration` (nyní nastaveno na %d) nejsou vynutitelné z důvodu technických omezení. Úloha na pozadí je spouštěna pouze co 5 minut, takže použijte na své vlastní riziko.", + "Federation" : "Federování", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Pokud je zapnuté federování v Talk, je vřele doporučováno nastavit „memcache.locking“.", + "High-performance backend" : "Podpůrná vrstva pro vysoký výkon", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Není nastavená žádná podpůrná vrstva pro vysoký výkon. Provozování Nextcloud Talk bez ní škáluje pouze pro velmi malé hovory (nejvýše 2-3 účastníci). Nastavte podpůrnou vrstvu pro vysoký výkon a zajistěte tak, že hovory s vícero účastníky budou hladce fungovat.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Provozování režimu „conversation_cluster“ podpůrné vrstvy pro vysoký výkon je zastaralé a v nadcházející verzi už nebude podporováno. Podpůrná vrstva dnes už obsahuje skutečné klastrování, které by mělo být použito namísto toho.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definování vícero podpůrných vrstev pro vysoký výkon je zastaralé a v nadcházející verzi už nebude podporováno. Namísto toho by rozdělování zátěže mělo být nastaveno ve spojení se signalizačními servery v clusteru a ten pak zadán v nastavení Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Uložený veřejný klíč pro použitý algoritmus %1$s neodpovídá uloženému soukromému klíči. Opravte tuto chybu spuštěním %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "Podpůrná vrstva pro vysoký výkon není správně nastavená. Podrobnosti obdržíte spuštěním %s.", + "High-performance backend not configured correctly" : "Podpůrná vrstva pro vysoký výkon není správně nastavená", + "Error: Cannot connect to server" : "Chyba: K serveru se nedaří připojit", + "Error: Server did not respond with proper JSON" : "Chyba: Odpověď ze serveru nemá platný JSON formát", + "Error: Certificate expired" : "Chyba: platnost certifikátu skončila", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: systémové časy Nextcloud serveru a serveru s podpůrnou vrstvou pro vysoký výkon se liší. Ověřte, že oba servery jsou napojeny na stejný časový server nebo jejich čas ručně sesynchronizujte.", + "Could not get version" : "Nedaří se získat verzi", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Chyba: Provozovaná verze: {version}; Server je třeba aktualizovat, aby byl kompatibilní s touto verzí Talk", + "Error: Server responded with: {error}" : "Chyba: Odpověď ze serveru: {error}", + "Error: Unknown error occurred" : "Chyba: Došlo k neznámé chybě", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Varování: provozovaná verze: {version}; Server nepodporuje všechny funkce této verze Talk – chybějící funkce: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Pokud je Nextcloud Talk provozován s podpůrnou vrstvou pro vysoký výkon, je vřele doporučováno nastavit mezipaměť v operační paměti.", + "Client Push" : "Služba klient Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Služba klient Push je nainstalovaná a bude zlepšovat včasnost doručení notifikací v Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} není nainstalované. To může vést k prodlevě doručování notifikací z Talk.", + "Recording backend" : "Podpůrná vrstva pro nahrávání", + "Using the recording backend requires a High-performance backend." : "Aby bylo možné používat podpůrnou vrstvu pro pořizování nahrávek, je třeba mít vrstvu pro vysoký výkon.", + "No recording backend configured" : "Nenastavena žádná podpůrná vrstva pro pořizování nahrávek", + "SIP configuration" : "Nastavení SIP", + "Using the SIP functionality requires a High-performance backend." : "Aby bylo možné používat funkci pro SIP, je třeba mít vrstvu pro vysoký výkon.", + "No SIP backend configured" : "Nenastavena žádná podpůrná vrstva pro SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, je třeba aby formát byl RRRR-MM-DD", + "Conversation not found" : "Konverzace nenalezena", + "Path is already shared with this conversation" : "Popis umístění už je touto konverzací sdílen", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video a audiokonference používající WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video a audio konference využívající WebRTC\n\n* 💬 **Chat** Nextcloud Talk je vybavený jednoduchým textovým chatem, který Vám umožňuje sdílet nebo nahrávat soubory z Nextcloud Souborů nebo přímo ze zařízení a zmiňovat ostatní účastníky chatu.\n* 👥 **Soukromé, skupinové i veřejné a heslem chráněné hovory!** Pozvěte někoho, třeba celou skupinu lidí nebo pošlete veřejně přístupný odkaz jako pozvánku pro připojení k hovoru.\n* 🌐 **Federované chaty** Chatujte s ostatními uživateli Nextcloud na jejich serverech.\n* 💻 **Sdílení obrazovky!** Sdílejte to co vidíte na své obrazovce s ostatními účastníky hovoru.\n* 🚀 **Integrace s dalšími aplikacemi Nextcloud** například se Soubory, Kalendářem, Uživatelským stavem, Nástěnkou, Flow, Mapami, Smart Pickerem, Kontakty, Deck a mnoha dalšími.\n* 🌉 **Synchronizujte s jinými poskytovateli chatu** [Matterbridge](https://github.com/42wim/matterbridge/) je do Talk integrovaný, což znamená že můžete jednoduše synchronizovat mnoho dalších chatovacích řešení do Nextcloud Talk a naopak.", + "Leave call" : "Opustit hovor", + "Navigating away from the page will leave the call in {conversation}" : "Opuštění této stránky nepřeruší hovor v {conversation}", + "Stay in call" : "Neopustit hovor", + "Error occurred when getting the conversation information" : "Při získávání informací o konverzaci došlo k chybě", + "Discuss this file" : "Diskutujte o tomto souboru", + "Share this file with others to discuss it" : "Sdílet tento soubor s ostatními k diskuzi", + "Share this file" : "Sdílet tento soubor", + "Join conversation" : "Vstupte do konverzace", + "This conversation is password-protected." : "Tato konverzace je chráněna heslem.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Bylo rozpoznáno několik neplatných pokusů o zadání hesla z vaší IP adresy. Další pokus bude proto možný až za 30 sekund.", + "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", + "Password" : "Heslo", + "Submit" : "Odeslat", + "Error requesting the password." : "Chyba při požadavku na heslo.", + "Request password" : "Vyžadovat heslo", + "This conversation has ended" : "Tato konverzace skončila", + "Error occurred when joining the conversation" : "Při připojování se ke konverzaci došlo k chybě", + "Close Talk sidebar" : "Zavřít postranní panel Talk", + "Open Talk sidebar" : "Otevřít postranní panel Talk", + "Everyone" : "Všichni", + "Users and moderators" : "Uživatelé a moderátoři", + "Moderators only" : "Pouze moderátoři", + "Disable calls" : "Neumožnit hovory", + "Save changes" : "Uložit změny", + "Saving …" : "Ukládání …", + "Saved!" : "Uloženo", + "Limit to groups" : "Omezit na skupiny", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Když je vybrána alespoň jedna skupina, pak se konverzace mohou účastnit pouze lidé z uvedených skupin.", + "Guests can still join public conversations." : "Hosté se pořád mohou připojit k veřejným konverzacím.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Uživatelé, kteří přestanou Talk používat budou pořád uvedeni jako účastníci v jejich předchozích konverzacích a také jejich zprávy budou zachovány.", + "Limit using Talk" : "Omezit používání Talk", + "Limit creating a public and group conversation" : "Omezit vytváření veřejných a skupinových konverzací", + "Limit creating conversations" : "Omezit vytváření konverzací", + "Limit starting a call" : "Omezit zahájení hovoru", + "Limit starting calls" : "Omezit zahajování hovorů", + "When a call has started, everyone with access to the conversation can join the call." : "Poté, co konverzace započne, kdokoli s přístupem ke konverzaci se může připojit k hovoru.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tomto serveru jsou nainstalovány následující automaty. V dokumentaci naleznete podrobnosti ohledně toho, jak {linkstart1}vytvořit svůj vlastní automat{linkend} nebo {linkstart2}seznam automatů{linkend} pro zapnutí na vašem serveru.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tomto serveru nejsou nainstalovány žádné automaty. V dokumentaci naleznete podrobnosti ohledně toho, jak {linkstart1}vytvořit svůj vlastní automat{linkend} nebo {linkstart2}seznam automatů{linkend} pro zapnutí na vašem serveru.", + "Description is not provided" : "Popis není poskytnut", + "Locked for moderators" : "Uzamčeno jen pro moderátory", + "Enabled" : "Zapnuto", + "Disabled" : "Vypnuto", + "Bots settings" : "Nastavení ohledně automatů", + "State" : "Stav", + "Name" : "Jméno", + "Last error" : "Poslední chyba", + "Total errors count" : "Celkový počet chyb", + "Find more bots" : "Najít více automatů", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Důvěryhodné servery je možné nastavit na {linkstart}Stránce nastavení sdílení{linkend}.", + "Beta" : "Vývojové", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federované chaty a volání už fungují. Obsluha příloh přijde v budoucí verzi.", + "Enable Federation in Talk app" : "Zapnout federování v aplikaci Talk", + "Permissions" : "Oprávnění", + "Allow users to be invited to federated conversations" : "Umožnit aby uživatelé byli zváni do federovaných konverzací", + "Allow users to invite federated users into conversation" : "Umožnit uživatelům zvát federované uživatele do konverzací", + "Only allow to federate with trusted servers" : "Umožnit federování pouze s důvěryhodnými servery", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Když je vybrána alespoň jedna skupina, pak zvát federované uživatele do konverzace mohou pouze lidé z uvedených skupin.", + "Groups allowed to invite federated users" : "Skupiny které mohou zvát federované uživatele", + "Select groups …" : "Vybrat skupiny …", + "All messages" : "Všechny zprávy", + "@-mentions only" : "Pouze zmínky ve stylu @jméno", + "Off" : "Vypnuto", + "General settings" : "Obecná nastavení", + "Default notification settings" : "Výchozí nastavení upozorňování", + "Default group notification" : "Výchozí upozornění pro skupinu", + "Default group notification for new groups" : "Výchozí upozorňování pro nové skupiny", + "Integration into other apps" : "Napojení na další aplikace", + "Allow conversations on files" : "Povolit konverzace u souborů", + "Allow conversations on public shares for files" : "Povolit konverzaci u veřejných souborů pro sdílení", + "End-to-end encrypted calls" : "Hovory šifrované mezi koncovými body", + "Enable encryption" : "Šifrovat", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Hovory šifrované mezi koncovými body s nastaveným mostem pro SIP vyžadují novější verzi podpůrné vrstvy pro vysoký výkon a mostu pro SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilní klienti v tuto chvíli nepodporují hovory šifrované mezi koncovými body.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kliknutím na výše uvedené tlačítko budou údaje z formuláře odeslány na servery společnosti Struktur AG. Podrobnosti naleznete na {linkstart}spreed.eu{linkend}.", + "Pending" : "Čeká", + "Error" : "Chyba", + "Blocked" : "Blokovaný", + "Active" : "Aktivní", + "Expired" : "Platnost skončila", + "Never" : "Nikdy", + "The trial could not be requested. Please try again later." : "Nepodařilo se zažádat o zkušební období. Prosím zkuste to znovu později.", + "The account could not be deleted. Please try again later." : "Účet se nepodařilo smazat. Prosím zkuste to znovu později.", + "Hosted High-performance backend" : "Hostovaná podpůrná vrstva pro vysoký výkon", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Náš partner, společnost Struktur AG poskytuje službu, u které je možné si zažádat o hostovaný signalizační server. Stačí pouze vyplnit níže uvedený formulář a vaše instance Nextcloud provede žádost Jakmile je pro vás vytvořen server, přihlašovací údaje budou vyplněny automaticky. Toto přepíše existující nastavení pro signalizační server.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Pokud váš účet pro vysoce výkonnou podpůrnou vrstvu obsahuje funkci STUN a/nebo TURN, nastavení budou příslušně zaktualizována.", + "URL of this Nextcloud instance" : "URL adresa této instance Nextcloud", + "Full name of the user requesting the trial" : "Celé jméno uživatele, žádajícího o zkušební období", + "Email of the user" : "E-mail uživatele", + "Language" : "Jazyk", + "Country" : "Země", + "Request signaling server trial" : "Požádat o zkušební období signalizačního serveru", + "You can see the current status of your hosted signaling server in the following table." : "Stávající stav vašeho hostovaného signálního serveru naleznete v následující tabulce.", + "Status" : "Stav", + "Created at" : "Vytvořeno", + "Expires at" : "Platnost končí", + "Limits" : "Omezení", + "STUN included" : "STUN obsaženo", + "Yes" : "Ano", + "No" : "Ne", + "TURN included" : "TURN obsaženo", + "Delete the signaling server account" : "Smazat účet na signalizačním serveru", + "_%n user_::_%n users_" : ["%n uživatel","%n uživatelé","%n uživatelů","%n uživatelé"], + "Installed version: {version}" : "Nainstalovaná verze: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Pro propojení Nextcloud Talk s některými ostatními službami je možné nainstalovat Matterbridge, podrobnosti viz {linkstart1}stránka na GitHub{linkend}. Stažení a instalace aplikace může chvíli trvat. V případě překročení časového limitu ji prosím nainstalujte ručně z {linkstart2}Nextcloud katalogu aplikací{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Spustitelný soubor nemá správná oprávnění. Ověřte, že spustitelný soubor s Matterbridge je vlastněn správným uživatelem a je spustitelný. Je k nalezení v „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "Spustitelný soubor s matterbridge nebyl nalezen nebo ho nebylo možné spustit.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Je také možné nastavit popis umístění spustitelného souboru s Matterbridge ručně a to v nastavení. Podrobnosti naleznete v {linkstart}dokumentaci k napojení Matterbridge{linkend}.", + "Downloading …" : "Stahování …", + "Install Talk Matterbridge" : "Nainstalovat Matterbridge pro Talk", + "An error occurred while installing the Matterbridge app" : "Došlo k chybě při instalaci aplikace Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Při instalaci Matterbridge pro Talk došlo k chybě. Prosím nainstalujte ho ručně", + "Failed to execute Matterbridge binary." : "Nepodařilo se spustit spustitelný soubor od Matterbridge.", + "Matterbridge integration" : "Napojení na Matterbridge", + "Enable Matterbridge integration" : "Zapnout napojení na Matterbridge", + "Status: Checking connection" : "Stav: Kontrola připojení", + "OK: Running version: {version}" : "OK: Spuštěná verze: {version}", + "Error: Server seems to be a Signaling server" : "Chyba: zdá se, že server je signalizujícím serverem", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: systémové časy Nextcloud serveru a serveru s podpůrnou vrstvou pro pořizování nahrávek se liší. Ověřte, že oba servery jsou napojeny na stejný časový server nebo jejich čas ručně sesynchronizujte.", + "Recording backend URL" : "URL podpůrné vrstvy pro nahrávání", + "Validate SSL certificate" : "Ověřovat si SSL certifikát", + "Delete this server" : "Smazat tento server", + "Test this server" : "Vyzkoušet tento server", + "Disabled for all calls" : "Vypnuto pro všechna volání", + "Enabled for all calls" : "Zapnuto pro všechna volání", + "Configurable on conversation level by moderators" : "Nastavitelné moderátory v rámci konverzace", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP nastavení „upload_max_filesize“ nebo „post_max_size“ umožní nahrání souborů velkých nejvýše {maxUpload}.", + "Recording backend settings saved" : "Nastavení pro podpůrnou vrstvu pro nahrávání uložena", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderátorům bude umožněno zapnout souhlas v rámci konverzace. Souhlas s pořízením nahrávky bude vyžadován od každého z účastníků před každým připojením k hovoru v této konverzaci.", + "The consent to be recorded will be required for each participant before joining every call." : "Souhlas s nahráváním bude vyžadován od každého z účastníků před každým připojením k hovoru v této konverzaci.", + "The consent to be recorded is not required." : "Souhlas s nahráváním není vyžadován.", + "Recording backend configuration is only possible with a High-performance backend." : "Nastavování podpůrné vrstvy pro pořizování nahrávek je možné pouze při použití podpůrné vrstvy pro vysoký výkon.", + "Add a new recording backend server" : "Přidat nový server podpůrné vrstvy pro nahrávávání", + "Shared secret" : "Předsdílené heslo", + "Recording consent" : "Souhlas s nahráváním", + "Recording transcription" : "Přepis nahrávky", + "Automatically transcribe call recordings with a transcription provider" : "Automaticky přepsat nahrávky hovorů prostřednictvím poskytovatele přepisů", + "Automatically summarize call recordings with transcription and summary providers" : "Automaticky vytvářet souhrn nahrávek hovorů prostřednictvím poskytovatele přepisů a souhrnů", + "SIP configuration saved!" : "Nastavení pro SIP nastaveno!", + "SIP configuration is only possible with a High-performance backend." : "Nastavení SIP je možné pouze při použití podpůrné vrstvy pro vysoký výkon.", + "Enable SIP Dial-out option" : "Zapnout SIP volání odsud", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Aby podporoval SIP volání odsud, je třeba aktualizovat signalizační server.", + "Do not show SIP Dial-out caller number" : "Nezobrazovat číslo volajícího SIP volání ven", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymní čísla by se měla příjemci volání zobrazovat jako „neznámé“ nebo „skryté číslo“", + "Dial-out number" : "Telefonní číslo, ze kterého zavolat", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Číslo ve formátu E164 sloužící jako náhradní číslo volajícího pro odchozí volání", + "Dial-out prefix" : "Předpona, ze které zavolat", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Předpona pro nastavené číslo uživatele pro odchozí volání (výchozí je `+`)", + "Restrict SIP configuration" : "Omezit nastavení SIP", + "Enable SIP configuration" : "Zapnout nastavení SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "SIP mohou zapnout pouze členové následujících skupin a to jen v konverzacích, které moderují", + "Phone number (Country)" : "Telefonní číslo (země)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Tato informace je odeslána ve zvacích e-mailech a také zobrazována v postranním panelu všem účastníkům.", + "Nextcloud base URL" : "Základ URL Nextcloud", + "Talk Backend URL" : "URL podpůrné vrstvy Talk", + "WebSocket URL" : "URL WebSocket", + "Available features" : "Funkce k dispozici", + "Error: Websocket connection failed" : "Chyba: Websocket připojení se nezdařilo", + "Error code" : "Kód chyby", + "Error message" : "Chybové hlášení", + "Error: Websocket connection failed. Check browser console" : "Chyba: Websocket připojení se nezdařilo. Podívejte se do konzole prohlížeče", + "High-performance backend URL" : "URL adresa podpůrné vrstvy pro vysoký výkon", + "Missing High-performance backend warning hidden" : "Varování o chybějící podpůrné vrstvě pro vysoký výkon skryto", + "High-performance backend settings saved" : "Nastavení pro podpůrnou vrstvu pro vysoký výkon uložena", + "Nextcloud Talk setup not complete" : "Nastavení Nextcloud Talk nedokončeno", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Mějte na paměti, že při volání s více než 2 účastníky bez podpůrné vrstvy pro vysoký výkon budou účastníci nejspíš pociťovat problémy s konektivitou a vysoké vytížení účastnících se zařízení.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Pro hladké fungování hovorů s vícero účastníky nainstalujte podpůrnou vrstvu pro vysoký výkon.", + "Nextcloud portal" : "Portál Nextcloud", + "Quick installation guide" : "Stručná instalační příručka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Pro hovory a konverzace s vícero účastníky je zapotřebí podpůrné vrstvy pro vysoký výkon. Bez ní všichni účastníci musejí odesílat své vlastní video jednotlivě pro každého z ostatních účastníků, což nejspíš způsobí problémy s konektivitou a vysokým vytížením zařízení účastníků.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Při používání Nextcloud Talk ve spojení s podpůrnou vrstvou pro vysoký výkon, je doporučeno nastavit distribuovanou mezipaměť.", + "Add High-performance backend server" : "Přidat server podpůrné vrstvy pro vysoký výkon", + "Warn about connectivity issues in calls with more than 2 participants" : "Varovat před problémy s konektivitou u volání s více než 2 účastníky", + "STUN server URL" : "URL adresa STUN serveru", + "The server address is invalid" : "Adresa serveru není platná", + "STUN settings saved" : "Nastavení pro STUN uložena", + "STUN servers" : "Servery STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Server STUN je používán ke zjištění veřejné IP adresy účastníků schovaných za směrovačem (router).", + "Add a new STUN server" : "Přidat nový STUN server", + "{schema} scheme must be used with a domain" : "společně s doménou je třeba použít schéma {schema}", + "{option1} and {option2}" : "{option1} a {option2}", + "{option} only" : "Pouze {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN server odpověděl úspěšnými ICE kandidáty", + "Error: No working ICE candidates returned by the TURN server" : "Chyba: TURN server neodpověděl žádnými fungujícími ICE kandidáty", + "Testing whether the TURN server returns ICE candidates" : "Zkoušení zda TURN server odpoví ICE kandidáty", + "TURN server schemes" : "Popis TURN serveru", + "TURN server URL" : "URL adresa TURN serveru", + "TURN server secret" : "Kód pro TURN server", + "TURN server protocols" : "Protokoly TURN serveru", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN server slouží jako proxy pro provoz od účastníků, kteří se nacházejí za bránou firewall. Pokud se jednotliví účastníci nemohou spojit s ostatními, nejspíš je zapotřebí TURN server. Pokyny k nastavení viz {linkstart}tato dokumentace{linkend} .", + "TURN settings saved" : "Nastavení pro TURN uložena", + "TURN servers" : "TURN servery", + "Add a new TURN server" : "Přidat nový TURN server", + "Failed" : "Nezdařilo se", + "OK" : "OK", + "Checking …" : "Kontrola …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Nezdar: WebAssembly je vypnuté nebo nepodporované prohlížečem. Pro provedení kontroly zapněte WebAssembly nebo použijte prohlížeč, který jej podporuje.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Nezdařilo se: webový server nevrátil správně soubory „.wasm“ a „.tflite“. Podívejte se do sekce „Požadavky na systém“ v dokumentaci k Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: server správně vrátil soubory „.wasm“ a „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Zdá se, že nastavení PHP a Apache nejsou slučitelná. Poznamenejme, že PHP je možné použít pouze s modulem MPM_PREFORK a PHP-FPM je možné použít pouze s modulem MPM_EVENT.", + "Web server setup checks" : "Kontroly nastavení webového serveru", + "Files required for virtual background can be loaded" : "Nedaří se načíst soubory, potřebné pro virtuální pozadí", + "Federated user" : "Federovaný uživatel", + "Assign participants to rooms" : "Přiřadit účastníkům místnosti", + "Configure breakout rooms" : "Nastavit přestávkové místnosti", + "Number of breakout rooms" : "Počet přestávkových místností", + "You can create from 1 to 20 breakout rooms." : "Je možné vytvořit 1 až 20 přestávkových místností.", + "Assignment method" : "Metoda přiřazování", + "Automatically assign participants" : "Automaticky přiřadit účastníky", + "Manually assign participants" : "Přiřadit účastníky ručně", + "Allow participants to choose" : "Umožnit účastníkům zvolit", + "Create rooms" : "Vytvořit místnosti", + "Confirm" : "Potvrdit", + "Create breakout rooms" : "Vytvořit přestávkové místnosti", + "Reset" : "Vrátit na výchozí hodnoty", + "Delete breakout rooms" : "Smazat přestávkové místnosti", + "Room {roomNumber}" : "Místnost {roomNumber}", + "Current breakout rooms and settings will be lost" : "Stávající přestávkové místnosti a nastavení budou ztraceny", + "Cancel" : "Storno", + "Unassigned participants" : "Nepřiřazení účastníci", + "Back" : "Zpět", + "Assign" : "Přidělit", + "Add participant \"{user}\"" : "Přidat účastníka „{user}“", + "Now" : "Nyní", + "Invalid calendar selected" : "Vybrán neplatný kalendář", + "Invalid start time selected" : "Vybrán neplatný čas zahájení", + "Invalid end time selected" : "Vybrán neplatný čas skončení", + "Unknown error occurred" : "Došlo k neznámé chybě", + "Sending no invitations" : "Pozvánky nebudou zaslány", + "{participant0} will receive an invitation" : "{participant0} obdrží pozvánku", + "{participant0} and {participant1} will receive invitations" : "{participant0} a {participant1} obdrží pozvánky", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} a %n další obdrží pozvánky","{participant0}, {participant1} a %n další obdrží pozvánky","{participant0}, {participant1} a %n dalších obdrží pozvánky","{participant0}, {participant1} a %n další obdrží pozvánky"], + "Invite {user}" : "Pozvat {user}", + "Invite all users and emails in this conversation" : "Pozvat všechny uživatele a e-maily do konverzace", + "Meeting created" : "Schůzka vytvořena", + "Upcoming meetings" : "Nadcházející schůzky", + "Loading …" : "Načítání …", + "No upcoming meetings" : "Žádné nadcházející schůzky", + "Schedule a meeting" : "Naplánovat schůzku", + "Meeting title" : "Název schůzky", + "From" : "Od", + "To" : "Pro", + "Calendar" : "Kalendář", + "Attendees" : "Účastníci", + "No other participants to send invitations to." : "Žádní ostatní účastníci, kterým poslat pozvánku.", + "Add attendees" : "Přidat účastníky", + "Save" : "Uložit", + "Search participants" : "Vyhledat účastníky", + "No results" : "Žádné výsledky", + "Done" : "Dokončeno", + "Disable live transcription" : "Vypnout přepis v reálném čase", + "Enable live transcription (generated by AI)" : "Zapnout průběžné přepisování do textu (vytvářeno AI)", + "Disable live translation" : "Vypnout překlad v reálném čase", + "Enable live translation (generated by AI)" : "Zapnout průběžné překládání (vytvářeno AI)", + "Original language: {languageName}" : "Původní jazyk: {languageName}", + "Translated language" : "Přeložený jazyk", + "Translated language: {languageName}" : "Přeložený jazyk: {languageName}", + "Raise hand" : "Hlásit se", + "Raise hand (R)" : "Hlásit se (R)", + "Lower hand" : "Přestat se hlásit", + "Lower hand (R)" : "Přestat se hlásit (R)", + "Exit full screen (F)" : "Opustit režim celé obrazovky (F)", + "Full screen (F)" : "Spustit režim celé obrazovky (F)", + "Speaker view" : "Zobrazení řečníka", + "Grid view" : "Zobrazení v mřížce", + "Error when trying to load the available live transcription languages" : "Chyba při pokusu o načtení jazyků, které jsou pro průběžný přepis k dispozici", + "Failed to enable live transcription" : "Nepodařilo se zapnout průběžné vytváření přepisu", + "Failed to enable live translations" : "Nepodařilo se zapnout průběžné překládání", + "Failed to disable live translations" : "Nepodařilo se vypnout průběžné překládání", + "Recording consent is required" : "Je vyžadován souhlas s nahráváním", + "This conversation is read-only" : "Tato konverzace je pouze pro čtení", + "Conversation not found or not joined" : "Konverzace nenalezena nebo jste do ní ještě nevstoupili", + "Lobby is still active and you're not a moderator" : "Čekárna je pořád aktivní a nejste moderátorem", + "Connection failed" : "Připojení se nezdařilo", + "Reload" : "Načíst znovu", + "{nickName} raised their hand." : "{nickName} se přihlásil(a) o slovo.", + "A participant raised their hand." : "Účastník se hlásí.", + "Collapse stripe" : "Sbalit pruh", + "Expand stripe" : "Rozbalit pruh", + "Previous page of videos" : "Předchozí stránka s videi", + "Next page of videos" : "Další stránka s videi", + "Connecting …" : "Připojování …", + "Calling …" : "Volání …", + "Waiting for {user} to join the call" : "Čeká se, až se {user} připojí k hovoru", + "Waiting for others to join the call …" : "Čekání na ostatní, až se připojí k hovoru …", + "You can invite others in the participant tab of the sidebar" : "Ostatní je možné pozvat v kartě účastníci (na postranním panelu)", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ostatní je možné pozvat na kartě účastníci v bočním panelu nebo sdílet tento odkaz pro pozvání ostatních!", + "Share this link to invite others!" : "Pro pozvání dalších lidí sdílejte tento odkaz!", + "Copy link" : "Zkopírovat odkaz", + "You are not allowed to enable audio" : "Nemáte oprávnění zapnout přenos zvuku od vás", + "No audio. Click to select device" : "Žádný zvuk – kliknutím vyberte zařízení.", + "Mute audio" : "Ztlumit zvuk", + "Mute audio (M)" : "Ztlumit zvuk (M)", + "Unmute audio" : "Zrušit ztlumení zvuku", + "Unmute audio (M)" : "Zrušit ztlumení zvuku (M)", + "None" : "Žádné", + "Select a microphone" : "Vyberte mikrofon", + "Select a speaker" : "Vybrat reproduktor", + "Microphone settings" : "Nastavení mikrofonu", + "Check devices" : "Zkontrolovat zařízení", + "Access to camera was denied" : "Přístup ke kameře byl odepřen", + "Error while accessing camera: It is likely in use by another program" : "Chyba při přistupování ke kameře: nejspíš je využívána jiným programem", + "Error while accessing camera" : "Chyba při přístupu ke kameře", + "You have been muted by a moderator" : "Byli jste ztlumeni moderátorem", + "Hide presenter video" : "Krýt video prezentujícího", + "You are not allowed to enable video" : "Nemáte oprávnění zapnout přenos z kamery od vás", + "No video. Click to select device" : "Žádné video – kliknutím vyberte zařízení.", + "Disable video" : "Vypnout video", + "Disable video (V)" : "Vypnout obraz (V)", + "Enable video" : "Povolit video", + "Enable video (V)" : "Zapnout obraz (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout video – při jeho prvním zapnutí bude spojení nakrátko přerušeno", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout obraz (V) – Při prvním spuštění bude vaše spojení nakrátko přerušeno", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout video. Při jeho prvním zapnutí bude spojení nakrátko přerušeno", + "Select a video device" : "Vyberte videozařízení", + "Show presenter" : "Zobrazit přezentujícího", + "You" : "Vy", + "Mute" : "Ztlumit", + "Muted" : "Ztlumeno", + "Show screen" : "Ukázat obrazovku", + "Stop following" : "Přestat následovat", + "Connection could not be established …" : "Spojení se nedaří navázat …", + "Connection was lost and could not be re-established …" : "Spojení bylo ztraceno a nedaří se ho opětovně navázat …", + "Connection could not be established. Trying again …" : "Spojení se nepodařilo navázat. Zkouší se znovu …", + "Connection lost. Trying to reconnect …" : "Spojení ztraceno. Pokus o opětovné připojení…", + "Connection problems …" : "Problémy s připojením…", + "Collapse" : "Sbalit", + "Expand" : "Rozbalit", + "You need to be logged in to upload files" : "Pro nahrávání souborů je třeba, abyste byli přihlášení", + "Drop your files to upload" : "Přetáhněte sem soubor, které chcete nahrát", + "Conversation messages" : "Zprávy v konverzaci", + "Scroll to bottom" : "Odrolovat na konec", + "Post message" : "Odeslat zprávu", + "Federated conversation" : "Federovaná konverzace", + "Public conversation" : "Veřejná konverzace", + "Favorite" : "Oblíbený", + "Banned users" : "Vyloučení uživatelé", + "Manage the list of banned users in this conversation." : "Spravovat seznam vyloučených uživatelů v této konverzaci.", + "Manage bans" : "Spravovat vyloučení", + "No banned users" : "Žádní vyloučení uživatelé", + "Banned by:" : "Vyloučil(a):", + "Date:" : "Datum:", + "Note:" : "Poznámka:", + "Hide details" : "Skrýt podrobnosti", + "Show details" : "Zobrazit podrobnosti", + "Unban" : "Zrušit vyloučení", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Nadpis a popis je možné změnit v {linkstart}Kalendáři ↗{linkend}.", + "Error while updating conversation name" : "Chyba při aktualizování názvu konverzace", + "Error while updating conversation description" : "Při úpravě popisu konverzace se vyskytla chyba", + "Enter a name for this conversation" : "Zadejte název pro tuto konverzaci", + "Edit conversation name" : "Upravit název konverzace", + "Edit conversation description" : "Upravit popis konverzace", + "Enter a description for this conversation" : "Přidat popis pro tuto konverzaci", + "Picture" : "Obrázek", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "V této konverzaci je možné zapnout následující automaty. Pokud chcete na tomto serveru mít nainstalovány další, obraťte se na jeho správce.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na tomto serveru nejsou nainstalovány žádné automaty. Pokud chcete na tomto serveru mít nainstalovány další, obraťte se na jeho správce.", + "Disable" : "Vypnout", + "Enable" : "Povolit", + "Breakout rooms" : "Přestávkové místnosti", + "Manage breakout rooms" : "Spravovat přestávkové místnosti", + "Set up breakout rooms for this conversation" : "Vytvořte pro tuto konverzaci přestávkové místnosti", + "Please select a valid PNG or JPG file" : "Vyberte platný PNG nebo JPG soubor", + "Choose your conversation picture" : "Zvolte si obrázek pro konverzaci", + "Choose" : "Vybrat", + "Error setting conversation picture" : "Chyba při nastavování obrázku konverzace", + "Could not set the conversation picture: {error}" : "Nepodařilo se nastavit obrázek konverzace: {error}", + "Error cropping conversation picture" : "Chyba při ořezávání obrázku pro konverzaci", + "Error removing conversation picture" : "Chyba při odebírání obrázku konverzace", + "Set emoji as conversation picture" : "Nastavit emotikonu jako obrázek konverzace", + "Set background color for conversation picture" : "Nastavit barvu pozadí pro obrázek konverzace", + "Upload conversation picture" : "Nahrát obrázek konverzace", + "Choose conversation picture from files" : "Zvolit obrázek konverzace ze souborů", + "Remove conversation picture" : "Odebrat obrázek konverzace", + "The file must be a PNG or JPG" : "Je třeba, aby soubor by PNG nebo JPG", + "Set picture" : "Nastavit obrázek", + "Default permissions modified for {conversationName}" : "Výchozí oprávnění změněna pro {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nedaří se upravit výchozí oprávnění uživateli {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Upravit výchozí oprávnění pro účastníky v této konverzaci. Tato nastavení se nedotknou moderátorů.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Pokaždé když jsou v této sekci změněna oprávnění, budou ztracena předtím udělená uživatelsky určená oprávnění, přiřazená jednotlivým účastníkům.", + "All permissions" : "Všechna oprávnění", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Účastníci mají oprávnění zahájit hovor, připojit se k hovoru, zapnout zvuk a video, a sdílení obrazovky.", + "Restricted" : "Omezeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Účastníci se mohou připojovat k hovorům, ale už ne zapínat zvuk, ani video či sdílení obrazovky od nich, dokud jim moderátoři tato oprávnění neudělí ručně.", + "Advanced permissions" : "Pokročilá oprávnění", + "Edit permissions" : "Upravit oprávnění", + "Conversation settings" : "Nastavení konverzace", + "Basic Info" : "Základní informace", + "Personal" : "Osobní", + "Moderation" : "Moderování", + "Setup overview" : "Přehled nastavení", + "Live transcription" : "Přepis v reálném čase", + "Enable live transcription" : "Zapnout přepis v reálném čase", + "Breakout Rooms" : "Přestávkové místnosti", + "Matterbridge" : "Matterbridge", + "Bots" : "Automaty", + "Danger zone" : "Nebezpečná zóna", + "Archive conversation" : "Archivovat konverzaci", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivované konverzace jsou ve výchozím stavu ze seznamu konverzací skryté. Nicméně objeví se při hledání podle názvu konverzace nebo na seznamu archivovaných konverzací.", + "Do you really want to leave \"{displayName}\"?" : "Opravdu chcete „{displayName}“ opustit?", + "You can archive this conversation instead." : "Namísto toho můžete tuto konverzaci archivovat.", + "Leave conversation" : "Opustit konverzaci", + "You need to promote a new moderator before you can leave the conversation" : "Než budete moci konverzaci opustit, je třeba předat někomu roli moderátora", + "Delete conversation" : "Smazat konverzaci", + "Do you really want to delete \"{displayName}\"?" : "Opravdu chcete smazat „{displayName}“?", + "Error while deleting conversation" : "Chyba při mazání konverzace", + "Delete all chat messages" : "Smazat všechny zprávy chatu", + "Do you really want to delete all messages in \"{displayName}\"?" : "Opravdu chcete smazat všechny zprávy v „{displayName}“?", + "Error while clearing chat history" : "Chyba při mazání historie konverzace", + "Be careful, these actions cannot be undone." : "Opatrně, tyto kroky nelze vrátit zpět.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Jakmile opustíte konverzaci, budete v případě těch uzavřených potřebovat k opětovnému připojení pozvánku. K otevřené konverzaci se můžete znovu připojit kdykoli.", + "Permanently delete this conversation." : "Nadobro smazat tuto konverzaci.", + "Delete chat messages" : "Smazat zprávy chatu", + "Permanently delete all the messages in this conversation." : "Nadobro smazat veškeré zprávy v této konverzaci.", + "_%n hour_::_%n hours_" : ["%n hodina","%n hodiny","%n hodin","%n hodiny"], + "_%n day_::_%n days_" : ["%n den","%n dny","%n dnů","%n dny"], + "_%n week_::_%n weeks_" : ["%n týden","%n týdny","%n týdnů","%n týdny"], + "Custom expiration time" : "Uživatelsky určený okamžik skončení platnosti", + "Message expiration disabled" : "Ukončení platnosti zprávy vypnuto", + "Message expiration set: {duration}" : "Okamžik skončení platnosti zprávy nastaven na: {duration}", + "Error when trying to set message expiration" : "Chyba při pokusu o nastavení konce platnosti zprávy", + "Message expiration" : "Skončení platnosti zprávy", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Platnost zpráv v chatu je možné ukončit po uplynutí zadané doby. Pozn.: Soubory nasdílené v chatu nebudou vlastníkovi smazány, ale už nadále nebudou sdíleny v konverzaci.", + "Set message expiration" : "Nastavit skončení platnosti zprávy", + "Current message expiration" : "Stávající doba platnosti zprávy", + "Password copied to clipboard" : "Heslo zkopírováno do schránky", + "Password could not be copied" : "Heslo se nepodařilo zkopírovat", + "Guest access" : "Přístup pro hosty", + "Breakout rooms are not allowed in public conversations." : "Přestávkové místnosti nejsou ve veřejných konverzacích povoleny.", + "Allow guests to join this conversation via link" : "Umožnit hostům, připojit se k této konverzace prostřednictvím odkazu.", + "Password protection" : "Ochrana heslem", + "This conversation is password-protected. Guests need password to join" : "Tato konverzace je chráněna heslem. Hosté pro připojení potřebují heslo", + "Password protection is needed for public conversations" : "Veřejné konverzace vyžadují heslo", + "Set a password" : "Nastavit heslo", + "Change password" : "Změnit heslo", + "Enter new password" : "Zadejte nové heslo", + "Save password" : "Uložit heslo", + "Copy password" : "Zkopírovat heslo", + "Guests are allowed to join this conversation via link" : "Hostům je umožněno se do této konverzace připojovat prostřednictvím odkazu", + "Guests are not allowed to join this conversation" : "Hostům není umožněno se do této konverzace připojovat", + "Resend invitations" : "Znovu poslat pozvánky", + "This conversation is open to both registered users and users created with the Guests app" : "Tato konverzace je otevřená jak registrovaným uživatelům, tak uživatelům, vytvořeným v aplikaci Hosté", + "This conversation is open to registered users" : "Tato konverzace je otevřená pro registrované uživatele", + "This conversation is limited to the current participants" : "Tato konverzace je omezená pouze na stávající účastníky", + "You opened the conversation to both registered users and users created with the Guests app" : "Otevřeli jste konverzaci jak registrovaným uživatelům, tak uživatelům, vytvořeným aplikací Hosté", + "Error occurred when opening or limiting the conversation" : "Při otevírání nebo omezování konverzace došlo k chybě", + "Open conversation to registered users, showing it in search results" : "Otevřít konverzaci registrovaným uživatelům a zobrazovat jí ve výsledcích hledání", + "Also open to users created with the Guests app" : "Také otevřít uživatelům, vytvořeným v aplikaci Hosté", + "Open conversation" : "Otevřít konverzaci", + "Set language spoken in calls" : "Nastavte jazyk, kterým se mluví v hovorech", + "Languages could not be loaded" : "Jazyky se nepodařilo načíst", + "Loading languages …" : "Načítání jazyků …", + "Invalid language" : "Neplatný jazyk", + "Default language (English)" : "Výchozí jazyk (angličtina)", + "Default live transcription language set" : "Výchozí jazyk pro vytváření průběžného přepisu nastaven", + "Live transcription language set: {languageName}" : "Jazyk pro vytváření průběžného přepisu nastaven: {languageName}", + "Error when trying to set live transcription language" : "Chyba při pokusu o nastavení jazyka pro průběžný přepis", + "Start time: {date}" : "Okamžik začátku: {date}", + "Start time has been updated" : "Čas zahájení byl upraven", + "Error occurred while updating start time" : "Při upravování času začátku došlo k chybě", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Zapnutí čekárny odebere z probíhajícího hovoru ty, kteří nejsou moderátory.", + "Enable lobby, restricting the conversation to moderators" : "Zapnout čekárnu, omezit konverzaci pouze na moderátory", + "Meeting start time" : "Okamžik zahájení schůzky", + "Start time (optional)" : "Čas začátku (volitelný)", + "Import email participants" : "Naimportovat e-mailové účastníky", + "You can import a list of email participants from a CSV file." : "Seznam e-mailových účastníků je možné naimportovat z CSV souboru.", + "Poll drafts" : "Koncepty anket", + "Browse poll drafts" : "Procházet koncepty anket", + "Error occurred when locking the conversation" : "Při uzamykání konverzace došlo k chybě", + "Error occurred when unlocking the conversation" : "Při odemykání konverzace došlo k chybě", + "Lock conversation" : "Uzamknout konverzaci", + "This will also terminate the ongoing call." : "Toto ukončí i probíhající hovor.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Uzamknout konverzaci a zabránit tak komukoliv posílat do ní zprávy nebo zahajovat hovory", + "Edit" : "Upravit", + "More information" : "Podrobnosti", + "Delete" : "Smazat", + "Add new bridged channel to current conversation" : "Přidat nový můstkem napojený kanál do současné konverzace", + "unknown state" : "neznámý stav", + "running" : "spuštěné", + "not running, check Matterbridge log" : "není spuštěné – zkontrolujte záznam událostí Matterbridge", + "not running" : "nespuštěné", + "Bridge saved" : "Můstek uložen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Pomocí Matterbridge je možné napojit můstkem kanály z různých systémů pro okamžité posílání zpráv.", + "More info on Matterbridge" : "Podrobnosti o Matterbridge", + "Messaging systems" : "Systémy zasílání zpráv", + "Enable bridge" : "Povolit můstek", + "Show Matterbridge log" : "Zobrazit záznam událostí v Matterbridge", + "Log content" : "Obsah záznamu událostí", + "Only moderators are allowed to mention @all" : "Zmínit @all (všechny) je umožněno pouze moderátorům", + "All participants are allowed to mention @all" : "Zmínit @all (všechny) je umožněno všem účastníkům", + "Participants are now allowed to mention @all." : "Účastníkům je nyní umožněno zmínit @all (všechny).", + "Mentioning @all has been limited to moderators." : "Zmiňování @all (všech) bylo omezeno pouze na moderátory.", + "Allow participants to mention @all" : "Umožnit účastníkům zmínit @all (všechny)", + "Mention permissions" : "Oprávnění pro zmiňování", + "Notifications" : "Upozornění", + "Notify about calls in this conversation" : "Upozorňovat na volání v této konverzaci", + "Important conversation" : "Důležitá konverzace", + "\"Do not disturb\" user status is ignored for important conversations" : "Stav uživatele „Nevyrušovat“ bude v případě důležitých konverzací ignorován", + "Sensitive conversation" : "Citlivá konverzace", + "Message preview will be disabled in conversation list and notifications" : "Náhled zprávy bude vypnut pro seznam konverzací a notifikace", + "Recording consent is required for calls in this conversation" : "Souhlas s nahráváním je vyžadován pro volání v této konverzaci", + "Recording consent is not required for calls in this conversation" : "Souhlas s nahráváním není pro volání v této konverzaci vyžadován", + "Recording consent requirement was updated" : "Požadavek na souhlas s nahráváním byl zaktualizován", + "Error occurred while updating recording consent" : "Při aktualizování souhlasu s nahráváním došlo k chybě", + "Recording Consent" : "Souhlas s nahráváním", + "Recording consent cannot be changed once a call or breakout session has started." : "Souhlas s nahráváním nelze po zahájení hovoru nebo přestávkové relace změnit.", + "Require recording consent before joining call in this conversation" : "Vždy vyžadovat souhlas s nahráváním před připojením hovoru v této konverzaci.", + "Recording consent is required for all calls" : "Souhlas s nahráváním je vyžadován pro všechna volání", + "SIP dial-in is now possible without PIN requirement" : "Zavolat do hovoru prostřednictvím SIP je nyní možné i bez požadavku na PIN kód", + "SIP dial-in is now enabled" : "SIP vytáčení je povoleno", + "SIP dial-in is now disabled" : "SIP vytáčení je zakázáno", + "Error occurred when enabling SIP dial-in" : "Při zapínání SIP vytáčení došlo k chybě", + "Error occurred when disabling SIP dial-in" : "Při vypínání SIP vytáčení došlo k chybě", + "Phone and SIP dial-in" : "Volání do telefonem a SIP", + "Enable phone and SIP dial-in" : "Zapnout volání do konverzace telefonem a přes SIP protokol", + "Allow to dial-in without a PIN" : "Umožnit zavolání do hovoru bez zadávání PIN kódu", + "Ongoing" : "Probíhající", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba přijala","%n lidé přijali","%n lidí přijalo","%n lidé přijaly"], + "_%n person declined_::_%n people declined_" : ["%n osoba odmítla","%n lidé odmítli","%n lidí odmítlo","%n lidé odmítli"], + "_and %n other attachment_::_and %n other attachments_" : ["a %n další příloha","a %n další přílohy","a %n dalších příloh","a %n další přílohy"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "V {conversation}", + "View attachment" : "Zobrazit přílohu", + "Join" : "Připojit se", + "View conversation" : "Zobrazit konverzaci", + "View event on Calendar" : "Zobrazit událost v Kalendáři", + "Error while creating the conversation" : "Chyba při vytváření konverzace", + "Hello, {displayName}" : "Dobrý den, {displayName}", + "Start meeting now" : "Zahájit schůzku nyní", + "Give your meeting a title" : "Dejte své schůzce název", + "Create and copy link" : "Vytvořit a zkopírovat odkaz", + "Create a new conversation" : "Vytvořit novou konverzaci", + "Join open conversations" : "Přidat se do všem přístupných konverzací", + "Call a phone number" : "Vytočit telefonní číslo", + "Scroll backward" : "Posunout zpět", + "Scroll forward" : "Posunout vpřed", + "Schedule meetings" : "Naplánovat schůze", + "You don't have any upcoming meetings" : "Nemáte žádné nadcházející schůzky", + "Open calendar" : "Otevřít kalendář", + "Unread mentions" : "Označit zmínění jako nepřečtená", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Zprávy, ve kterých jste byli zmíněni se zobrazí zde. Lidi můžete zmiňovat zadáním @ (zavináč), následovaného jejich jménem", + "Upcoming reminders" : "Nadcházející připomínky", + "Message reminders" : "Připomínky zprávy", + "Set a reminder on a message to be notified" : "Nastavte si připomínku ohledně zprávy a buďte tak na ni upozorněni", + "Start a group conversation" : "Zahájit skupinovou konverzaci", + "Create conversation" : "Vytvořit konverzaci", + "Enter your name" : "Zadejte své jméno", + "Submit name and join" : "Odeslat jméno a připojit se", + "Do you already have an account?" : "Už máte účet?", + "Log in" : "Přihlásit se", + "Error while verifying uploaded file" : "Chyba při ověřování nahraného souboru", + "Uploaded file is verified" : "Nahrání souboru je ověřeno", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Formát obsahu jsou hodnoty oddělované čárkami (CSV):
- Řádek se záhlavím je vyžadován a je třeba, aby se shodoval s \"name\",\"e-mail\" nebo pouze \"email\"
- Každou položku na zvlášť řádek (např. \"Jan Novák\",\"jan@priklad.tld\")", + "Participants added successfully" : "Účastníci úspěšně přidáni", + "Error while adding participants" : "Chyba při přidávání účastníků", + "Import a file" : "Naimportovat soubor", + "Browse" : "Procházet", + "Verifying uploaded file …" : "Ověřování nahraného souboru …", + "This might take a moment" : "Toto může chvíli trvat", + "Send invitations" : "Odeslat pozvánky", + "_%n invalid email_::_%n invalid emails_" : ["%n neplatný e-mail","%n neplatné e-maily","%n neplatných e-mailů","%n neplatné e-maily"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail už byl naimportován nebo jde o duplicitu","%n e-maily už byly naimportovány nebo jde o duplicity","%n e-mailů už bylo naimportováno nebo jde o duplicity","%n e-maily už byly naimportovány nebo jde o duplicity"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Je možné odeslat %n pozvánku","Je možné odeslat %n pozvánky","Je možné odeslat %n pozvánek","Je možné odeslat %n pozvánky"], + "An error occurred while calling a phone number" : "Došlo k chybě při volání na telefonní číslo", + "Phone number could not be called: {error}" : "Nepodařilo se zavolat na telefonní číslo: {error}", + "Phone number could not be called" : "Na telefonní číslo se nepodařilo zavolat", + "Search participants or phone numbers" : "Hledat účastníky nebo telefonní čísla", + "Creating the conversation …" : "Vytváření konverzace …", + "Mark as read" : "Označit jako přečtené", + "Mark as unread" : "Označit jako nepřečtené", + "Remove from favorites" : "Odebrat z oblíbených", + "Add to favorites" : "Přidat do oblíbených", + "Unarchive conversation" : "Zrušit archivaci konverzace", + "Ignore \"Do not disturb\"" : "Ignorovat „Nevyrušovat“", + "You need to promote a new moderator before you can leave the conversation." : "Než budete moci konverzaci opustit, je třeba předat někomu roli moderátora.", + "Conversation actions" : "Akce konverzace", + "Notify about calls" : "Upozorňovat na hovory", + "Hide message text" : "Skrýt text zprávy", + "Pending invitations" : "Čekající pozvánky", + "Join conversations from other servers" : "Připojit se ke konverzacím z ostatních serverů", + "From {user} at {remoteServer}" : "Od {user} v {remoteServer}", + "Decline invitation" : "Odmítnout pozvání", + "Accept invitation" : "Přijmout pozvání", + "No pending invitations" : "Žádné čekající pozvánky", + "Home" : "Domů", + "Unread" : "Nastavit jako nepřečtené", + "Mentions" : "Zmínění", + "Meetings" : "Schůze", + "Alphabetically" : "Abecedně", + "No followed threads" : "Žádná sledovaná vlákna", + "No matches found" : "Nenalezeny žádné shody", + "No conversations found" : "Nenalezena žádná konverzace", + "You have no archived conversations." : "Nemáte žádné archivované konverzace.", + "Subscribe to an existing thread or start your own." : "Přihlaste se k odběru stávajícího vlákna nebo zahajte své vlastní.", + "You have no unread mentions." : "Nemáte žádná nepřečtená zmínění.", + "You have no unread messages." : "Nemáte žádné nepřečtené zprávy.", + "An error occurred while performing the search" : "Došlo k chybě při provádění hledání", + "Conversation list" : "Seznam konverzace", + "Filter conversations by" : "Filtrovat konverzaci podle", + "Unread messages" : "Nepřečtené zprávy", + "Meeting conversations" : "Konverzace schůzky", + "Clear filters" : "Vyčistit filtry", + "New personal note" : "Nová osobní poznámka", + "Back to conversations" : "Zpět na konverzace", + "Archived conversations" : "Archivované konverzace", + "Threads" : "Vláken", + "Clear filter" : "Vyčistit filtr", + "Show more threads" : "Zobrazit více vláken", + "App settings" : "Nastavení aplikace", + "Users" : "Uživatelé", + "Groups" : "Skupiny", + "Teams" : "Týmy", + "Federated users" : "Federovaní uživatelé", + "New private conversation" : "Nová soukromá konverzace", + "Other sources" : "Ostatní zdroje", + "Open conversations" : "Otevřít konverzace", + "No search results" : "Nic nenalezeno", + "Users, groups and teams" : "Uživatelé, skupiny a týmy", + "Users and groups" : "Uživatelé a skupiny", + "Users and teams" : "Uživatelé a týmy", + "Groups and teams" : "Skupiny a týmy", + "New group conversation" : "Nová skupinová konverzace", + "The meeting will start soon" : "Schůzka brzy začne", + "This meeting is scheduled for {startTime}" : "Tato schůzka je naplánována na {startTime}", + "You are currently waiting in the lobby" : "V tuto chvíli se nacházíte v čekárně", + "Enable noise suppression" : "Zapnout potlačování hluku", + "Reduce background noises for better voice quality" : "Omezit hluk na pozadí pro lepší kvalitu hlasu", + "Enable echo cancellation" : "Zapnout potlačování ozvěn", + "Minimize echo effect from own surrounding" : "Minimalizovat ozvěnu ze svého okolí", + "Enable auto gain control" : "Zapnout automatickou regulaci zesílení", + "Dynamically adjust microphone volume for consistent level" : "Dynamicky uzpůsobí zesílení mikrofonu, aby snímal pořád stejně hlasitě", + "Select microphone" : "Vyberte mikrofon", + "No microphone available" : "Není k dispozici žádný mikrofon", + "Select speaker" : "Vybrat reproduktor", + "No speaker available" : "Není k dispozici žádný reproduktor", + "Select camera" : "Vyberte kameru", + "No camera available" : "Není k dispozici žádná kamera", + "Select a device" : "Vyberte zařízení", + "Playing …" : "Přehrávání …", + "Test speakers" : "Vyzkoušet reproduktory", + "Test" : "Vyzkoušet", + "Devices" : "Zařízení", + "Backgrounds" : "Pozadí", + "No audio" : "Žádný zvuk", + "No camera" : "Žádná kamera", + "Display video as you will see it (mirrored)" : "Zobrazit video tak, jak byste ho viděli vy (zrcadlené)", + "Display video as others will see it" : "Zobrazit si video tak, jako ho uvidí ostatní", + "Calls are not supported in your browser" : "Vámi používaný prohlížeč nepodporuje volání", + "Access to microphone is only possible with HTTPS" : "Přístup k mikrofonu je možný pouze přes HTTPS", + "Access to microphone was denied" : "Přístup k mikrofonu byl odepřen", + "Error while accessing microphone" : "Chyba při přístupu k mikrofonu", + "Access to camera is only possible with HTTPS" : "Přístup ke kameře je možný pouze přes HTTPS", + "The call is being recorded." : "Hovor je nahráván.", + "The call might be recorded." : "Hovor může být nahráván.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Nahrávka může obsahovat váš hlas, obraz z kamery a sdílení obrazovky. K hovoru se budete moci připojit až po odsouhlasení.", + "Give consent to the recording of this call" : "Udělit souhlas s nahráváním tohoto hovoru", + "Show more info" : "Zobrazit další informace", + "Audio is not available" : "Zvuk není k dispozici", + "Video is not available" : "Video není k dispozici", + "Start recording immediately with the call" : "Zahájit nahrávání bezprostředně po zahájení hovoru", + "Notify all participants about this call" : "Upozornit všechny účastníky na tento hovor", + "Apply settings" : "Uplatnit nastavení", + "Select virtual office background" : "Vybrat pozadí virtuální kanceláře", + "Select virtual home background" : "Vybrat pozadí virtuálního domova", + "Select virtual abstract background" : "Vybrat virtuální abstraktní ppozadí", + "Select virtual beach background" : "Vybrat pozadí virtuální pláže", + "Select virtual park background" : "Vybrat pozadí virtuálního parku", + "Select virtual theater background" : "Vybrat pozadí virtuálního divadla", + "Select virtual library background" : "Vybrat pozadí virtuální knihovny", + "Select virtual space station background" : "Vybrat pozadí virtuální vesmírné stanice", + "Error while uploading the file" : "Chyba při nahrávání souboru", + "Select a file" : "Vybrat soubor", + "Invalid path selected" : "Vybrán neplatný popis umístění", + "Select virtual background from file {fileName}" : "Vybrat virtuální pozadí ze souboru {fileName}", + "Blur" : "Rozmazat", + "Upload" : "Nahrát", + "Files" : "Soubory", + "(editing)" : "(upravováno)", + "(edited)" : "(upraveno)", + "The message has expired or has been deleted" : "Platnost této zprávy skončila nebo byla smazána", + "Cancel quote" : "Zrušit citování", + "24 hours" : "24 hodin", + "7 days" : "7 dnů", + "30 days" : "30 dnů", + "Until unpin" : "Dokud není připnutí zrušeno", + "Clear reminder – {timeLocale}" : "Odstranit připomínku – {timeLocale}", + "Edited by {actor}" : "Upravil(a) {actor}", + "Pinned by you" : "Připnuto vámi", + "Pinned by {actor}" : "Připnul/a {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Text zprávy zkopírován do schránky", + "Message text could not be copied" : "Text zprávy se nepodařilo zkopírovat", + "Message forwarded to \"Note to self\"" : "Zpráva přeposlána do „Poznámka pro mne“", + "Error while forwarding message to \"Note to self\"" : "Chyba při přeposílání do „Poznámka pro mne“", + "A reminder was successfully removed" : "Připomínka byla úspěšně odebrána", + "Error occurred when removing a reminder" : "Při odebírání připomínky došlo k chybě", + "A reminder was successfully set at {datetime}" : "Připomínka byla úspěšně nastavena na {datetime}", + "Error occurred when creating a reminder" : "Při vytváření připomínky došlo k chybě", + "Add a reaction to this message" : "Přidat reakce na tuto zprávu", + "Reply" : "Odpovědět", + "More actions" : "Další akce", + "Set reminder" : "Nastavit připomínku", + "Pin message" : "Připnout zprávu", + "Unpin message" : "Zrušit připnutí zprávy", + "Reply privately" : "Odpovědět soukromě", + "Edit message" : "Upravit zprávu", + "Copy message" : "Zkopírovat zprávu", + "Copy message link" : "Zkopírovat odkaz zprávy", + "Go to file" : "Přejít k souboru", + "Download file" : "Stáhnout si soubor", + "Go to thread" : "Přejít na vlákno", + "Edit thread details" : "Upravit podrobnosti o vláknu", + "Forward message" : "Přeposlat zprávu", + "Translate" : "Překládání", + "Set custom reminder" : "Nastavit uživatelsky určenou připomínku", + "Keep pinned for" : "Ponechat připnuté po dobu", + "Set custom period" : "Nastavit uživatelsky určené období", + "Close reactions menu" : "Zavřít nabídku reakcí", + "React with {emoji}" : "Zareagovat {emoji}", + "React with another emoji" : "Zareagovat jinou emotikonou", + "Choose a conversation to forward the selected message." : "Zvolte konverzaci do které označenou zprávu odeslat.", + "Error while forwarding message" : "Chyba při přeposílání zprávy", + "The message has been forwarded to {selectedConversationName}" : "Zpráva byla přeposlána do {selectedConversationName}", + "Dismiss" : "Zavřít", + "Go to conversation" : "Přejít do konverzace", + "Detect language" : "Zjistit jazyk", + "The message could not be translated" : "Zprávu se nepodařilo přeložit", + "Translation copied to clipboard" : "Překlad zkopírován do schránky", + "Translation could not be copied" : "Překlad se nepodařilo zkopírovat", + "Translate message" : "Přeložit zprávu", + "Source language to translate from" : "Zdrojový jazyk, ze kterého přeložit", + "Translate from" : "Přeložit z", + "Target language to translate into" : "Cílový jazyk, do kterého přeložit", + "Translate to" : "Přeložit do", + "Translating" : "Překládá se", + "Copy translated text" : "Zkopírovat přeložený text", + "Error when scheduling the message" : "Chyba při plánování této zprávy", + "Reschedule" : "Přeplánovat", + "Send now" : "Odeslat nyní", + "Choose a time" : "Zvolit čas", + "Send at custom time" : "Odeslat v uživatelsky určený čas", + "Will be sent without notification" : "Bude odesláno bez notifikace", + "Message read by everyone who shares their reading status" : "Všichni, kteří sdílejí oznámení o přečtení, si zprávu přečetli", + "Message sent" : "Zpráva odeslána", + "Sent without notification" : "Odeslat bez oznámení", + "Deleting message" : "Mazání zprávy", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Zpráva úspěšně smazána, ale je nastavený bot nebo Matterbridge, takže mohla už být odeslána do jiných služeb", + "Message deleted successfully" : "Zpráva úspěšně smazána", + "Message could not be deleted because it is too old" : "Zpráva nemohla být smazána, protože je příliš stará", + "Only normal chat messages can be deleted" : "Pouze normální zprávy mohou být smazány", + "An error occurred while deleting the message" : "Při mazání zprávy došlo k chybě", + "Pinned" : "Připnuté", + "Your browser does not support playing audio files" : "Vámi využívaný prohlížeč nepodporuje přehrávání zvukových souborů", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Karta aplikace Deck", + "Remove {fileName}" : "Odebrat {fileName}", + "Open this location in OpenStreetMap" : "Otevřít toto umístění v OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odpověď","%n odpovědi","%n odpovědí","%n odpovědi"], + "Sending message" : "Odesílání zprávy", + "Failed to send the message. Click to try again" : "Odeslání zprávy se nezdařilo. Klikněte pro další pokus", + "Not enough free space to upload file" : "Pro odeslání souboru není dostatek volného místa", + "You cannot send messages to this conversation at the moment" : "Nyní není možné do této konverzace posílat zprávy", + "Could not update the message" : "Nepodařilo se zaktualizovat zprávu", + "Reply to thread \"{threadTitle}\"" : "Odpovědět na vlákno „{threadTitle}“", + "_You voted • %n vote_::_You voted • %n votes_" : ["Hlasovali jste • %n hlas","Hlasovali jste • %n hlasy","Hlasovali jste • %n hlasů","Hlasovali jste • %n hlasy"], + "You voted" : "Hlasovali jste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknutím hlasujte • %n hlas","Kliknutím hlasujte • %n hlasy","Kliknutím hlasujte • %n hlasů","Kliknutím hlasujte • %n hlasy"], + "Click to vote" : "Kliknutím hlasujte", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Koncept ankety • %n volba","Koncept ankety • %n volby","Koncept ankety • %n voleb","Koncept ankety • %n volby"], + "_%n vote_::_%n votes_" : ["%n hlas","%n hlasy","%n hlasů","%n hlasy"], + "Edit poll draft" : "Upravit koncept ankety", + "Delete poll draft" : "Smazat koncept ankety", + "Open poll" : "Otevřít anketu", + "Closed poll" : "Uzavřená anketa", + "See results" : "Zobrazit výsledky", + "Reactions" : "Reakce", + "No permission to post reactions in this conversation" : "Nemáte oprávnění reagovat do této konverzace", + "and {participant}" : "přidat {participant}", + "_and %n other participant_::_and %n other participants_" : ["a %n další účastník","a %n další účastníci","a %n dalších účastníků","a %n další účastníci"], + "Show all reactions" : "Zobrazit veškeré reakce", + "Add more reactions" : "Přidat další reakce", + "Show or collapse system messages" : "Zobrazit nebo sbalit systémové zprávy", + "No messages" : "Žádné zprávy", + "All messages have expired or have been deleted." : "Platnost veškerých zpráv skončila nebo byly smazány.", + "Generate summary with AI" : "Vytvořit shrnutí pomocí AI", + "{author} (pinned by you)" : "{author} (připnuto vámi)", + "{author} (pinned by {actor})" : "{author} (připnul/a {actor})", + "Unpin" : "Uvolnit", + "Cancel search" : "Zrušit hledání", + "Add a phone number" : "Přidat telefonní číslo", + "Error: A password is required to create the conversation." : "Chyba: pro vytvoření konverzace je zapotřebí hesla.", + "All set, the conversation \"{conversationName}\" was created." : "Vše hotovo, konverzace „{conversationName}“ byla vytvořena.", + "Create a new group conversation" : "Vytvořit novou skupinovou konverzaci", + "Add participants" : "Přidat účastníky", + "Maximum length exceeded ({maxlength} characters)" : "Překročena nejvyšší umožněná délka ({maxlength} znaků)", + "Conversation type" : "Typ konverzace", + "Conversation visibility" : "Viditelnost konverzace", + "Allow guests to join via link" : "Umožnit hostům, připojit se přes odkaz.", + "Enter password" : "Zadejte heslo", + "This conversation has been locked" : "Tato konverzace byla uzamčena", + "No permission to post messages in this conversation" : "Nemáte oprávnění posílat zprávy do této konverzace", + "Joining conversation …" : "Připojování ke konverzaci …", + "Write a message without notification" : "Napsat zprávu bez oznámení", + "Create a thread silently" : "Vytvořit vlákno, ale neodesílat o tom notifikaci", + "Create a thread" : "Vytvořit vlákno", + "Send message silently" : "Poslat zprávu bez upozornění", + "Send message" : "Poslat zprávu", + "Send without notification" : "Odeslat bez upozornění", + "The participant will not be notified about new messages" : "Účastník nebude upozorňován na nové zprávy", + "Participants will not be notified about new messages" : "Účastníci nebudou upozorňováni na nové zprávy", + "Message will be sent {datetimeString}" : "Zpráva bude odeslána v {datetimeString}", + "Thread title is required" : "Je třeba zadat název vlákna", + "Message text is required" : "Je zapotřebí textu zprávy", + "The message could not be edited" : "Zprávu nebylo možné upravit", + "File to share" : "Soubor ke sdílení", + "File upload is not available in this conversation" : "V této konverzaci není nahrání souboru k dispozici", + "Message was successfully scheduled" : "Zpráva byla úspěšně naplánována", + "Add emoji" : "Přidat emoji", + "Adding a mention will only notify users who did not read the message." : "Přidávání zmínění upozorní pouze uživatele, kteří si zprávu ještě nepřečetli.", + "Thread title" : "Název vlákna", + "Send later" : "Odeslat později", + "Show scheduled messages" : "Zobrazit naplánované zprávy", + "Cancel editing" : "Zrušit upravování", + "Schedule message" : "Naplánovat zprávu", + "{user} is out of office and might not respond." : "{user} je mimo kancelář a může se stát, že neodpoví.", + "Absence period: {startDate} - {endDate}" : "Období nepřítomnosti: {startDate} - {endDate}", + "Replacement:" : "Nahrazení:", + "Share from {nextcloud}" : "Nasdílet z {nextcloud}", + "Share from Files" : "Sdílet ze Souborů", + "Share files to the conversation" : "Sdílet soubory do konverzace", + "Upload from device" : "Nahrát ze zařízení", + "Create new poll" : "Vytvořit novou anketu", + "Smart picker" : "Inteligentní výběr", + "Record voice message" : "Nahrát hlasovou zprávu", + "End recording and send" : "Ukončit pořizování nahrávky a odeslat", + "Dismiss recording" : "Zahodit nahrávku", + "Access to the microphone was denied" : "Přístup k mikrofonu byl odepřen", + "Microphone either not available or disabled in settings" : "Mikrofon buď není k dispozici nebo je vypnutý v nastaveních", + "Error while recording audio" : "Chyba při pořizování zvukového záznamu", + "Voice message {time} ({conversation})" : "Hlasová zpráva {time} ({conversation})", + "Generating summary of unread messages …" : "Vytváření shrnutí nepřečtených zpráv …", + "Summary is AI generated and might contain mistakes" : "Shrnutí je vytvářeno AI a může obsahovat chyby", + "Error occurred during a summary generation" : "Při vytváření shrnutí došlo k chybě", + "New file" : "Nový soubor", + "Blank" : "Prázdný", + "Error while creating file" : "Chyba při vytváření souboru", + "Create and share a new file" : "Vytvořit a nasdílet nový soubor", + "Name of the new file" : "Název pro nový soubor", + "Create file" : "Vytvořit soubor", + "Someone is typing …" : "Někdo píše …", + "{user1} is typing …" : "{user1} píše …", + "{user1} and {user2} are typing …" : "{user1} a {user2} píší …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} a {user3} píší …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} a %n další píše …","{user1}, {user2}, {user3} a %n další píší …","{user1}, {user2}, {user3} a %n dalších píše …","{user1}, {user2}, {user3} a %n další píší …"], + "Add more files" : "Přidat další soubory", + "Send" : "Odeslat", + "In this conversation {user} can:" : "V této konverzaci {user} může:", + "Edit default permissions for participants in {conversationName}" : "Upravit výchozí oprávnění pro účastníky v {conversationName}", + "Start a call" : "Zahájit hovor", + "Skip the lobby" : "Přeskočit čekárnu", + "Can post messages" : "Může posílat zprávy", + "Can post messages and reactions" : "Může posílat zprávy a reakce", + "Can add reactions" : "Může přidávat reakce", + "Enable the microphone" : "Zapnout mikrofon", + "Enable the camera" : "Zapnout kameru", + "Share the screen" : "Sdílet obsah obrazovky", + "Update permissions" : "Aktualizovat oprávnění", + "Updating permissions" : "Aktualizují se oprávnění", + "No poll drafts" : "Žádné koncepty anket", + "There is no poll drafts yet saved for this conversation" : "Pro tuto konverzaci zatím nejsou žádné koncepty ankety", + "Create poll in {name}" : "Vytvořit anketu v {name}", + "Create poll" : "Vytvořit anketu", + "Error while importing poll" : "Chyba při importování ankety", + "Question" : "Otázka", + "Ask a question" : "Položit dotaz", + "Import draft from file" : "Naimportovat koncept ze souboru", + "Answers" : "Odpovědi", + "Answer {option}" : "Odpověď {option}", + "Delete poll option" : "Smazat volbu ankety", + "Add answer" : "Přidat odpověď", + "Settings" : "Nastavení", + "Anonymous poll" : "Anonymní anketa", + "Multiple answers" : "Vícero odpovědí", + "Save as draft" : "Uložit jako koncept", + "Export draft to file" : "Exportovat koncept do souboru", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konečné výsledky • %n hlas","Konečné výsledky • %n hlasy","Konečné výsledky • %n hlasů","Konečné výsledky • %n hlasy"], + "Your vote is anonymous" : "Vaše hlasování je anonymní", + "You voted for this option" : "Hlasovali jste pro tuto možnost", + "End poll" : "Ukončit anketu", + "Change your vote" : "Změňte svůj hlas", + "Withdraw vote" : "Vzít hlasování zpět", + "Results" : "Výsledky", + "Voted participants" : "Účastníci, kteří odvolili", + "Send a message to \"{roomName}\"" : "Poslat zprávu do „{roomName}“", + "Hide list of participants" : "Skrýt seznam účastníků", + "Show list of participants" : "Zobrazit seznam účastníků", + "Assistance requested in {roomName}" : "Vyžádána asistence v {roomName}", + "The message was sent to \"{roomName}\"" : "Zpráva byla odeslána do „{roomName}", + "Dismiss request for assistance" : "Zahodit požadavek o asistenci", + "Send message to room" : "Odeslat zprávu do místnosti", + "Back to main room" : "Zpět do hlavní místnosti", + "Back to your room" : "Zpátky do vaší místnosti", + "Message all rooms" : "Poslat zprávu do všech místností", + "Start session" : "Zahájení relace", + "Start a call before you start a breakout room session" : "Zahajte hovor předtím, než spustíte relaci přestávkové místnosti", + "Stop session" : "Ukončení relace", + "The message was sent to all breakout rooms" : "Zpráva byla zaslána do všech přestávkových místností", + "Send a message to all breakout rooms" : "Poslat zprávu do všech přestávkových místností", + "Breakout rooms are not started" : "Přestávkové místnosti nejsou spuštěné", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Hovory bez podpůrné vrstvy pro vysoký výkon mohou způsobovat problémy s připojením k Internetu a vytěžovat zařízení. {linkstart}Zjistěte více{linkend}", + "Talk setup incomplete" : "Neúplné nastavení Talk", + "Disable lobby" : "Zavřít čekárnu", + "Settings for participant \"{user}\"" : "Nastavení pro účastníka „{user}“", + "Participant \"{user}\"" : "Účastník „{user}“", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "host", + "Ringing …" : "Vyzvánění", + "Call rejected" : "Hovor odmítnut", + "{time} talking …" : "{time} mluvení …", + "{time} talking time" : "{time} doba mluvení", + "Raised their hand" : "Hlásí se", + "Joined with video" : "Připojen(a) s obrazem", + "Joined via phone" : "Připojen(a) telefonem", + "Joined with audio" : "Připojen(a) se zvukem", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Je třeba, aby délka textu byla kratší nebo rovna {maxLength} znaků. Váš stávající text je dlouhý {charactersCount} znaků.", + "Remove group and members" : "Odebrat skupinu a její členy", + "Remove team and members" : "Odebrat tým a uživatele", + "Remove participant" : "Odebrat účastníka", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Opravdu chcete skupinu „{displayName}“ a její členy odebrat z této konverzace?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Opravdu chcete tým „{displayName}“ a jeho členy odebrat z této konverzace?", + "Do you really want to remove {displayName} from this conversation?" : "Opravdu chcete {displayName} odebrat z této konverzace?", + "Notification was sent to {displayName}" : "Upozornění bylo odesláno uživateli {displayName}", + "Could not send notification to {displayName}" : "Nedaří se odeslat upozornění uživateli {displayName}", + "Permissions granted to {displayName}" : "Oprávnění uděleno pro {displayName}", + "Could not modify permissions for {displayName}" : "Nedaří se upravit oprávnění uživateli {displayName}", + "Permissions removed for {displayName}" : "Oprávnění odebrána uživateli {displayName}", + "Permissions set to default for {displayName}" : "Oprávnění pro uživatele {displayName} nastavena na výchozí hodnoty", + "Phone number could not be hung up" : "Hovor na telefonní číslo se nepodařilo zavěsit", + "Phone number could not be put on hold" : "Hovor na telefonní číslo se nepodařilo pozastavit", + "Phone number could not be muted" : "Hovor na telefonní číslo se nepodařilo ztlumit", + "Phone number could not be unmuted" : "Nepodařilo se zrušit ztlumení hovoru na telefonní číslo", + "DTMF message could not be sent" : "DTMF zprávu se nepodařilo odeslat", + "Phone number copied to clipboard" : "Telefonní číslo zkopírováno do schránky", + "Phone number could not be copied" : "Telefonní číslo se nepodařilo zkopírovat", + "in the lobby" : "v čekárně", + "Dial out phone" : "Zavolat na telefon", + "Hang up phone" : "Zavěsit telefon", + "Move back to lobby" : "Přesunout zpět do čekárny", + "Move to conversation" : "Přesunout do konverzace", + "Dial-in PIN" : "PIN kód pro dovolání se", + "Demote from moderator" : "Odebrat práva moderátora", + "Promote to moderator" : "Udělit práva moderátora", + "Resend invitation" : "Znovu poslat pozvánku", + "Send call notification" : "Odeslat upozornění na hovor", + "Dial out phone number" : "Telefonní číslo, na které zavolat", + "Resume call for phone number" : "Pokračovat v hovoru s telefonním číslem", + "Put phone number on hold" : "Pozastavit hovor s telefonním číslem", + "Unmute phone number" : "Zrušit ztlumení telefonního čísla", + "Mute phone number" : "Ztlumit z telefonního čísla", + "Copy phone number" : "Zkopírovat telefonní číslo", + "Reset custom permissions" : "Vrátit uživatelsky určená oprávnění na výchozí hodnoty", + "Grant all permissions" : "Udělit veškerá oprávnění", + "Remove all permissions" : "Odebrat veškerá oprávnění", + "Also ban from this conversation" : "Také vyloučit z této konverzace", + "Internal note (reason to ban)" : "Interní poznámka (důvod pro vyloučení)", + "Remove" : "Odebrat", + "Permissions modified for {displayName}" : "Oprávnění upravena uživateli {displayName}", + "Add users, groups or teams" : "Přidat uživatele, skupiny nebo týmy", + "Add users or groups" : "Přidat uživatele nebo skupiny", + "Add users or teams" : "Přidat uživatele nebo týmy", + "Add users" : "Přidat uživatele", + "Add groups or teams" : "Přidat skupiny nebo týmy", + "Add groups" : "Přidat skupiny", + "Add teams" : "Přidat týmy", + "Add other sources" : "Přidat další zdroje", + "Add emails" : "Přidat e-maily", + "Integrations" : "Napojení", + "Add federated users" : "Přidat federované uživatele", + "Searching …" : "Hledání …", + "Search for more users" : "Hledat další uživatele", + "You can search or add participants via name, email, or Federated Cloud ID" : "Účastníky je možné vyhledávat nebo přidávat prostřednictvím jména, e-mailu nebo identifikátoru v rámci federovaného cloudu", + "Search or add participants" : "Vyhledat nebo přidat účastníky", + "Invitation was sent to {actorId}" : "Odeslána pozvánka pro {actorId}", + "An error occurred while adding the participants" : "Při přidávání účastníků došlo k chybě", + "A new group conversation with selected participant will be created" : "Bude vytvořena nová skupinová konverzace s vybraným účastníkem", + "Participants" : "Účastníci", + "Pinned by a deleted user" : "Připnuto smazaným uživatelem", + "Participants ({count})" : "Účastníci ({count})", + "Open chat" : "Otevřít chat", + "You have new unread messages in the chat." : "Máte nové nepřečtené zprávy v chatu.", + "You have been mentioned in the chat." : "Byli jste zmíněni v chatu.", + "Search messages" : "Hledat zprávy", + "Chat" : "Chat", + "Details" : "Podrobnosti", + "Shared items" : "Sdílené položky", + "Search in {name}" : "Hledat v {name}", + "Threads in {name}" : "Vlákna v {name}", + "{actor} in {conversation}" : "{actor} v {conversation}", + "Search messages …" : "Hledat ve zprávách …", + "Search options" : "Možnosti vyhledávání", + "From User" : "Od uživatele", + "Since" : "Už od", + "Until" : "Do", + "No results found" : "Nic nenalezeno", + "Load more results" : "Načíst další výsledky", + "Recent threads" : "Nedávná vlákna", + "Projects" : "Projekty", + "No shared items" : "Žádné sdílené položky", + "Thread notifications" : "Notifikace ohledně vlákna", + "Thread actions" : "Akce ohledně vlákna", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Odkaz na konverzaci", + "No open conversations found" : "Nenalezeny žádné všem přístupné konverzace", + "Either there are no open conversations or you joined all of them." : "Buď zde nejsou žádné všem přístupné konverzace, nebo už jste se přidali do všech z nich.", + "Check spelling or use complete words." : "Zkontrolovat pravopis nebo doplňovat slova.", + "Search conversations or users" : "Hledat konverzace nebo uživatele", + "Select conversation" : "Vybrat konverzaci", + "Number length is not valid" : "Délka čísla není platná", + "Region code is not valid" : "Kód oblasti není platný", + "Number length is too short" : "Číslo je příliš krátké", + "Number length is too long" : "Číslo je příliš dlouhé", + "Number is not valid" : "Číslo není platné", + "Phone numbers" : "Telefonní čísla", + "Display name: {name}" : "Zobrazované jméno: {name}", + "Edit display name" : "Upravit zobrazovaný název", + "Display name (required)" : "Zobrazované jméno (vyžadováno)", + "Save name" : "Uložit název", + "I picked message bubbles" : "Vybral/a jsem bubliny zpráv", + "I picked the list style" : "Vybral jsem si styl seznamu", + "Error while setting personal setting" : "Chyba při nastavování osobních nastavení", + "Error while saving sounds setting" : "Chyba při ukládání nastavení zvuku", + "Compact conversations list" : "Zhuštěný seznam konverzací", + "Chat appearance" : "Vzhled chatu", + "Messages list" : "Seznam zpráv", + "Message bubbles" : "Bubliny zpráv", + "Play sounds when participants join or leave a call" : "Přehrát zvuky oznámení když se účastníci připojí nebo odpojí", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Z důvodu technických omezení, zavedených jejich výrobcem, není v současnosti na zařízeních iPad a iPhone k dispozici", + "Notification settings" : "Nastavení upozorňování", + "Sounds for chat and call notifications" : "Zvuky pro notifikace na chat a volání", + "Invalid language ({languageId})" : "Neplatný jazyk ({languageId})", + "Default language" : "Výchozí jazyk", + "Default language ({languageName})" : "Výchozí jazyk ({languageName})", + "Error when trying to load the available live translation languages" : "Chyba při pokusu o načtení jazyků, dostupných pro průběžný překlad", + "Error when trying to set live translation language" : "Chyba při pokusu o nastavení jazyka průběžného překladu", + "Set language used to show the transcriptions" : "Nastavit jazyk použitý pro zobrazení přepisu do textu", + "Select location for attachments" : "Vyberte umístění pro přílohy", + "Error while setting attachment folder" : "Chyba při nastavování složky pro přílohy", + "Error while setting read status privacy" : "Chyba při nastavování oznámení o přečtení", + "Error while setting typing status privacy" : "Chyba při nastavování soukromí pro stav psaní", + "Error while setting default media state" : "Chyba při nastavování výchozího stavu média", + "Turn camera and microphone off by default" : "Ve výchozím stavu vypnout kameru a mikrofon", + "Blur camera background by default" : "Rozmazávat pozadí záběru z kamery už ve výchozím stavu", + "Skip device preview before joining a call" : "Před připojením se k hovoru přeskočit náhled ze zařízení", + "Appearance & Sounds" : "Vzhled a zvuky", + "Privacy" : "Soukromí", + "Send read receipts" : "Odeslat potvrzení o přečtení", + "When off, all read statuses will be hidden" : "Pokud vypnuto, všechny přečtené stavy budou skryté", + "Share typing status" : "Sdílet stav psaní", + "When off, all typing indicators will be hidden" : "Pokud vypnuto, veškeré indikátory psaní budou skryté", + "Attachments folder" : "Složka s přílohami", + "Toggle full screen" : "Vyp/zap. zobrazení na celou obrazovku", + "Return to Home screen" : "Vrátit se na domovskou obrazovku", + "Search" : "Hledat", + "Shortcuts while in a chat" : "Zkratky při používání chatu", + "Focus the chat input" : "Zaměřit okno psaní chatu", + "Unfocus the chat input to use shortcuts" : "Abyste mohli použít klávesové zkratky, je třeba zrušit zaměření psaní v chatu", + "Edit your last message" : "Upravit svou poslední zprávu", + "Shortcuts while in a call" : "Klávesové zkratky při volání", + "Camera on and off" : "Kamera zapnout a vypnout", + "Microphone on and off" : "Mikrofon zapnout a vypnout", + "Raise or lower hand" : "Hlásit se nebo přestat", + "Push to talk or push to mute" : "Stisknout a držet pro mluvení či naopak pro odmlčení se - podle předchozího stavu mikrofonu", + "Zoom-in / zoom-out a screen share" : "Přiblížit/oddálit sdílení obrazovky", + "Mouse wheel" : "Kolečko myši", + "Start call silently" : "Zahájit hovor tiše", + "Start call" : "Zavolat", + "End call" : "Ukončit hovor", + "The server was updated, you cannot start or join a call." : "Server byl zaktualizován – nemůžete zahájit nebo se připojit do volání.", + "This call has just ended" : "Tento hovor právě skončil", + "You will be able to join the call only after a moderator starts it." : "K hovoru se budete moci připojit až poté, co ho moderátor zahájí.", + "End call for everyone" : "Ukončit hovor pro všechny", + "Starting the recording" : "Zahájit nahrávání", + "Recording" : "Zaznamenávání", + "The call has been running for one hour." : "Hovor trvá už hodinu.", + "Cancel recording start" : "Zrušit zahajování nahrávání", + "Stop recording" : "Zastavit nahrávání", + "Send a reaction" : "Poslat reakci", + "React with {reaction}" : "Zareagovat s {reaction}", + "All tasks done!" : "Všechny úkoly hotové!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n úkolu","{done} z %n úkolů","{done} z %n úkolů","{done} z %n úkolů"], + "Add participants to this call" : "Přidat účastníky do tohoto hovoru", + "_%n participant in call_::_%n participants in call_" : ["%n účastník hovoru","%n účastníci hovoru","%n účastníků hovoru","%n účastníci hovoru"], + "Scheduled messages" : "Naplánované zprávy", + "You are not allowed to enable screensharing" : "Nemáte oprávnění zapnout sdílení obsahu vaší obrazovky", + "No screensharing" : "Obrazovka není sdílena", + "Screensharing options" : "Možnosti sdílení obrazovky", + "Enable screensharing" : "Povolit sdílení obrazovky", + "Bad sent video and screen quality." : "Špatná technická kvalita odesílaného videa a obsahu obrazovky.", + "Bad sent screen quality." : "Špatná technická kvalita odesílání obsahu obrazovky.", + "Bad sent video quality." : "Špatná kvalita odesílaného videa.", + "Bad sent audio, video and screen quality." : "Špatná technická kvalita odesílaného zvuku, videa a obsahu obrazovky.", + "Bad sent audio and screen quality." : "Špatná technická kvalita odesílaného zvuku a sdílení obsahu obrazovky.", + "Bad sent audio and video quality." : "Špatná kvalita odesílaného zvuku a videa.", + "Bad sent audio quality." : "Špatná kvalita odesílaného zvuku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také nemusí vidět obsah vaší obrazovky. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video či vypnout rozmazání pozadí.", + "Disable background blur" : "Vypnout rozmazávání pozadí za vámi", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci vaši obrazovku možná neuvidí. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci možná obsah vaší obrazovky neuvidí.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci vás možná neuvidí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video či vypnout rozmazání pozadí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také nemusí vidět obsah vaší obrazovky. Pro zlepšení situace zkuste přestat sdílet obsah obrazovky.", + "Disable screenshare" : "Vypnout sdílení obrazovky", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste přestat vysílat video či vypnout rozmazání pozadí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná.", + "Screen sharing is not supported by your browser." : "Sdílení obrazovky není vaším prohlížečem podporováno.", + "Screen sharing requires the page to be loaded through HTTPS." : "Sdílení obrazovky vyžaduje, aby byla stránka načtena přes HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Sdílení obrazovky vyžaduje, aby byla stránka načtena přes HTTPS.", + "An error occurred while starting screensharing." : "Při zahajování sdílení obrazovky došlo k chybě.", + "Select virtual background" : "Vybrat virtuální pozadí", + "Show your screen" : "Zobrazit vaši obrazovku", + "Stop screensharing" : "Přestat sdílet obrazovku", + "Mute others" : "Ztlumit ostatní", + "Start recording" : "Zahájit nahrávání", + "Set up breakout rooms" : "Nastavit přestávkové místnosti", + "Download attendance list" : "Stáhnout si seznam účastníků", + "Open Calendar" : "Otevřít kalendář", + "Remove participant {name}" : "Odebrat účastníka {name}", + "Would you like to delete this conversation?" : "Chcete tuto konverzaci smazat?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dne neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity."], + "Are you sure you want to delete this conversation?" : "Opravdu chcete tuto konverzaci smazat?", + "Delete now" : "Smazat nyní", + "Keep" : "Ponechat", + "Open dialpad" : "Otevřít číselník", + "Select a region" : "Vyberte oblast", + "Local time: {time}" : "Místní čas: {time}", + "Scheduled {datetime}" : "Naplánováno {datetime}", + "Scheduled for {datetime}" : "Naplánováno na {datetime}", + "Search …" : "Hledat …", + "Message without mention" : "Zprávy, ve kterých nezmíněno", + "Mention myself" : "Zmínit sebe sama", + "Mention everyone" : "Zmínit všechny", + "Select a conversation" : "Vybrat konverzaci", + "Select a mode" : "Vyberte režim", + "You do not have permissions to access this conversation." : "Nemáte oprávnění pro přístup k této konverzaci.", + "Join a different conversation or start a new one." : "Připojte se k jiné konverzaci, nebo začněte novou.", + "The conversation does not exist" : "Konverzace neexistuje", + "Join a conversation or start a new one!" : "Připojte se ke konverzaci nebo zahajte novou", + "Duplicate session" : "Zduplikovat sezení", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Tato konverzace byla otevřena v jiném panelu. Stávající verze serveru nepodporuje otevírání konverzace ve vícero panelech.", + "Creating and joining a conversation with \"{userid}\"" : "Vytváření a vstupování do konverzace s „{userid}“", + "Join a conversation or start a new one" : "Připojte se ke konverzaci, nebo začněte novou", + "Error while joining the conversation" : "Chyba při připojování do konverzace", + "Another user" : "Jiný uživatel", + "Hey! Are you using the list style or message bubbles?" : "Hej! Používáte styl seznamu nebo bubliny zpráv?", + "Nextcloud URL" : "URL adresa Nextcloud", + "Nextcloud user" : "Uživatel Nextcloud", + "User password" : "Heslo uživatele", + "Talk conversation" : "Konverzace v Talk", + "Skip TLS verification" : "Přeskočit ověřování TLS", + "Matrix server URL" : "URL adresa Matrix serveru", + "User" : "Uživatel", + "Matrix channel" : "Matrix kanál", + "Mattermost server URL" : "URL adresa Mattermost serveru", + "Mattermost user" : "Uživatel v Mattermost", + "Team name" : "Název týmu", + "Channel name" : "Název kanálu", + "Rocket.Chat server URL" : "URL adresa Rocket.Chat serveru", + "User name or email address" : "Uživ. jméno nebo e-mail", + "Rocket.Chat channel" : "Rocket.Chat kanál", + "Zulip server URL" : "URL adresa Zulip serveru", + "Bot user name" : "Uživatelské jméno bota", + "Bot API key" : "Klíč k aplikačnímu program. rozhraní pro bota", + "Zulip channel" : "Zulip kanál", + "API token" : "Token do aplikačního program. rozhraní (API)", + "Slack channel" : "Slack kanál", + "Server ID or name" : "Identif. nebo název serveru", + "Channel ID (prefixed with \"ID:\") or name" : "Identif. kanálu (předeslaný „ID:“) nebo název", + "Channel" : "Kanál", + "Login" : "Přihlašovací jméno", + "Chat ID" : "Identif. chatu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL adresa IRC serveru (např. chat.freenode.net:6667)", + "Nickname" : "Přezdívka", + "Connection password" : "Heslo k připojení", + "IRC channel" : "IRC kanál", + "Channel password" : "Heslo kanálu", + "NickServ nickname" : "Přezdívka na NickServ", + "NickServ password" : "Heslo k NickServ", + "Use TLS" : "Použít TLS", + "Use SASL" : "Použít SASL", + "Tenant ID" : "Identif. nájemce", + "Client ID" : "Identif. klienta", + "Team ID" : "Identifikátor týmu", + "Thread ID" : "Identif. vlákna", + "XMPP/Jabber server URL" : "URL adresa XMPP/Jabber serveru", + "MUC server URL" : "URL adresa MUC serveru", + "Jabber ID" : "Jabber identif.", + "Pinned messages" : "Připnuté zprávy", + "Media" : "Média", + "Polls" : "Ankety", + "Deck cards" : "Karty aplikace Deck", + "Voice messages" : "Hlasové zprávy", + "Locations" : "Polohy", + "Call recordings" : "Nahrávky hovoru", + "Audio" : "Zvuk", + "Show all pinned messages" : "Zobrazit všechny připnuté zprávy", + "Show all media" : "Zobrazit veškerá média", + "Show all files" : "Zobrazit všechny soubory", + "Show all polls" : "Zobrazit veškeré ankety", + "Show all deck cards" : "Zobrazit všechny karty aplikace Deck", + "Show all voice messages" : "Zobrazit všechny hlasové zprávy", + "Show all locations" : "Zobrazit všechny polohy", + "Show all call recordings" : "Zobrazit veškeré nahrávky hovorů", + "Show all audio" : "Zobrazit všechno audio", + "Show all other" : "Zobrazit všechno ostatní", + "Follow conversation settings" : "Nastavení následování konverzace", + "Group" : "Skupina", + "Team" : "Tým", + "You reconnected to the call" : "Připojili jste se zpět k hovoru", + "{actor} reconnected to the call" : "{actor} se připojil(a) zpět k hovoru", + "You added {user0} and {user1}" : "Přidali jste {user0} a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Přidali jste {user0}, {user1} a %n dalšího účastníka","Přidali jste {user0}, {user1} a %n další účastníky","Přidali jste {user0}, {user1} a %n dalších účastníků","Přidali jste {user0}, {user1} a %n další účastníky"], + "An administrator added you and {user0}" : "Správce přidal vás a {user0}", + "{actor} added you and {user0}" : "{actor} přidal(a) vás a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Správce přidal vás, {user0} a %n dalšího účastníka","Správce přidal vás, {user0} a %n další účastníky","Správce přidal vás, {user0} a %n dalších účastníků","Správce přidal vás, {user0} a %n další účastníky"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} přidal(a) vás, {user0} a %n dalšího účastníka","{actor} přidal(a) vás, {user0} a %n další účastníky","{actor} přidal(a) vás, {user0} a %n dalších účastníků","{actor} přidal(a) vás, {user0} a %n další účastníky"], + "An administrator added {user0} and {user1}" : "Správce přidal {user0} a {user1}", + "{actor} added {user0} and {user1}" : "{actor} přidal(a) {user0} a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Správce přidal {user0}, {user1} a %n dalšího účastníka","Správce přidal {user0}, {user1} a %n další účastníky","Správce přidal {user0}, {user1} a %n dalších účastníků","Správce přidal {user0}, {user1} a %n další účastníky"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} přidal(a) {user0}, {user1} a %n dalšího účastníka","{actor} přidal(a) {user0}, {user1} a %n další účastníky","{actor} přidal(a) {user0}, {user1} a %n dalších účastníků","{actor} přidal(a) {user0}, {user1} a %n další účastníky"], + "You removed {user0} and {user1}" : "Odebrali jste {user0} a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Odebrali jste {user0}, {user1} a %n dalšího účastníka","Odebrali jste {user0}, {user1} a %n další účastníky","Odebrali jste {user0}, {user1} a %n dalších účastníků","Odebrali jste {user0}, {user1} a %n další účastníky"], + "An administrator removed you and {user0}" : "Správce odebral vás „{user0}“", + "{actor} removed you and {user0}" : "{actor} odebral(a) vás a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Správce odebral vás, {user0} a %n dalšího účastníka","Správce odebral vás, {user0} a %n další účastníky","Správce odebral vás, {user0} a %n dalších účastníků","Správce odebral vás, {user0} a %n další účastníky"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} odebral(a) vás, {user0} a %n dalšího účastníka","{actor} odebral(a) vás, {user0} a %n další účastníky","{actor} odebral(a) vás, {user0} a %n dalších účastníků","{actor} odebral(a) vás, {user0} a %n další účastníky"], + "An administrator removed {user0} and {user1}" : "Správce odebral {user0} a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} odebral(a) {user0} a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Správce odebral {user0}, {user1} a %n dalšího účastníka","Správce odebral {user0}, {user1} a %n další účastníky","Správce odebral {user0}, {user1} a %n dalších účastníků","Správce odebral {user0}, {user1} a %n další účastníky"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} odebral(a) {user0}, {user1} a %n dalšího účastníka","{actor} odebral(a) {user0}, {user1} a %n další účastníky","{actor} odebral(a) {user0}, {user1} a %n dalších účastníků","{actor} odebral(a) {user0}, {user1} a %n další účastníky"], + "You and {user0} joined the call" : "Vy a {user0} jste se připojili k hovoru", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vy, {user0} a %n další účastník jste se připojili k hovoru","Vy, {user0} a %n další účastníci jste se připojili k hovoru","Vy, {user0} a %n dalších účastníků se připojilo k hovoru","Vy, {user0} a %n další účastníci jste se připojili k hovoru"], + "{user0} and {user1} joined the call" : "{user0} a {user1} se připojili k hovoru", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} a %n další účastník se připojili k hovoru","{user0}, {user1} a %n další účastníci se připojili k hovoru","{user0}, {user1} a %n dalších účastníků se připojilo k hovoru","{user0}, {user1} a %n další účastníci se připojili k hovoru"], + "You and {user0} left the call" : "Vy a {user0} jste opustili hovor", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vy, {user0} a %n další účastník jste opustili hovor","Vy, {user0} a %n další účastníci jste opustili hovor","Vy, {user0} a %n dalších účastníků opustilo hovor","Vy, {user0} a %n další účastníci jste opustili hovor"], + "{user0} and {user1} left the call" : "{user0} a {user1} opustili hovor", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} a %n další účastník opustili hovor","{user0}, {user1} a %n další účastníci opustil hovor","{user0}, {user1} a %n dalších účastníků opustilo hovor","{user0}, {user1} a %n další účastníci opustil hovor"], + "You promoted {user0} and {user1} to moderators" : "Přidali jste {user0} a {user1} práva moderátora", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Udělili jste {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "An administrator promoted you and {user0} to moderators" : "Správce vám a {user0} přidal práva moderátora", + "{actor} promoted you and {user0} to moderators" : "{actor} vám a {user0} udělila(a) práva moderátora", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Správce udělil vám, {user0} a %n dalšímu účastníkovi práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} udělil vám, {user0} a %n dalšímu účastníkovi práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora"], + "An administrator promoted {user0} and {user1} to moderators" : "Správce udělil {user0} a {user1} práva moderátorů", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} udělil {user0} a {user1} práva moderátorů", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Správce udělil {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} udělil {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "You demoted {user0} and {user1} from moderators" : "Odebrali jste {user0} a {user1} práva moderátora", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Odebrali jste {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "An administrator demoted you and {user0} from moderators" : "Správce vám a {user0} odebral práva moderátora", + "{actor} demoted you and {user0} from moderators" : "{actor} odebral(a) vám a {user0} práva moderátora", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Správce odebral vám, {user0} a %n dalšímu účastníkovi práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} odebral(a) vám, {user0} a %n dalšímu účastníkovi práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora"], + "An administrator demoted {user0} and {user1} from moderators" : "Správce odebral {user0} a {user1} práva moderátora", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} odebral(a) {user0} a {user1} práva moderátorů", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Správce odebral {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} odebral(a {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "You:" : "Vy:", + "You: {lastMessage}" : "Vy: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Server byl zaktualizován.", + "(edited by you)" : "(upraveno vámi)", + "(edited by a deleted user)" : "(upraveno smazaným uživatelem)", + "(edited by {moderator})" : "(upravil(a) {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pokoušíte se připojit ke konverzaci zatímco máte aktivní relaci v ní v jiném okně nebo zařízení. Toto Nextcloud Talk zatím nepodporuje. Co chcete udělat?", + "Leave this page" : "Opustit tuto stránku", + "Join here" : "Přidat se zde", + "Deck card has been posted to {conversation}" : "Karta v Deck byla uvedena v {conversation}", + "An error occurred while posting deck card to conversation" : "Při odesílání karty aplikace Deck došlo k chybě", + "Post to a conversation" : "Odeslat do konverzace", + "Post to conversation" : "Odeslat do konverzace", + "The recording failed. Please contact your administrator." : "Nahrávání se nezdařilo. Obraťte se na svého správce.", + "Location has been posted to {conversation}" : "Umístění bylo zasláno do {conversation}", + "An error occurred while posting location to conversation" : "Při odesílání polohy do konverzace došlo k chybě", + "Share to a conversation" : "Nasdílet do konverzace", + "Share to conversation" : "Nasdílet do konverzace", + "In conversation" : "V konverzaci", + "Search in conversation: {conversation}" : "Hledat v konverzaci: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Četnost vašich požadavků byla pro tuto chvíli omezena ochranou proti útoku zkoušením všech možných hesel", + "Error while clearing conversation history" : "Chyba při vymazávání historie konverzace", + "Error occurred while allowing guests" : "Při povolování hostů došlo k chybě", + "Error occurred while disallowing guests" : "Při zakazování hostů došlo k chybě", + "Error occurred when restricting the conversation to moderator" : "Při omezování konverzace pouze na moderátora došlo k chybě", + "Error occurred when opening the conversation to everyone" : "Při otevírání konverzace všem došlo k chybě", + "Conversation password has been saved" : "Heslo do konverzace bylo uloženo", + "Conversation password has been removed" : "Heslo do konverzace bylo odebráno", + "Error occurred while saving conversation password" : "Při ukládání hesla konverzace došlo k chybě", + "Call recording is starting." : "Nahrávání hovoru se spouští.", + "Call recording stopped while starting." : "Pořizování nahrávky z hovoru se při spouštění zastavilo.", + "Call recording stopped. You will be notified once the recording is available." : "Nahrávání hovoru zastaveno. Budete upozorněni jakmile bude nahrávka k dispozici.", + "Conversation picture set" : "Obrázek konverzace nastaven", + "Conversation picture deleted" : "Obrázek konverzace smazán", + "Could not delete the conversation picture" : "Nepodařilo se smazat obrázek konverzace", + "Could not remove the automatic expiration" : "Nebylo možné odebrat automatické skončení platnosti", + "Could not post message: {errorMessage}" : "Zprávu se nedaří odeslat: {errorMessage}", + "Participant is banned successfully" : "Účastní je úspěšně vyloučen", + "Error while banning the participant" : "Chyba při vylučování účastníka", + "An error occurred while fetching the participants" : "Došlo k chybě při získávání seznamu účastníků", + "Could not send invitation to {actorId}" : "Nebylo možné poslat pozvánku pro {actorId}", + "Invitations sent" : "Pozvánky rozeslány", + "Error occurred when sending invitations" : "Při rozesílání pozvánek došlo k chybě", + "Failed to join the conversation." : "Nepodařilo se připojit do konverzace.", + "An error occurred while creating breakout rooms" : "Došlo k chybě při vytváření přestávkových místností", + "An error occurred while re-ordering the attendees" : "Při přeuspořádávání účastníků došlo k chybě", + "An error occurred while deleting breakout rooms" : "Došlo k chybě při mazání přestávkových místností", + "An error occurred while starting breakout rooms" : "An error occurred while spouštění breakout rooms", + "An error occurred while stopping breakout rooms" : "Došlo k chybě při zastavování přestávkových místností", + "An error occurred while sending a message to the breakout rooms" : "Došlo k chybě při posílání zpráv do přestávkových místností", + "An error occurred while requesting assistance" : "Při žádosti o asistenci došlo k chybě", + "An error occurred while resetting the request for assistance" : "Při resetování žádosti o asistenci došlo k chybě", + "An error occurred while joining breakout room" : "Došlo k chybě při připojování se do přestávkové místnosti", + "Failed to rename the thread" : "Nepodařilo se přejmenovat vlákno", + "Error fetching upcoming events" : "Chyba při získávání nadcházejících událostí", + "Error fetching upcoming reminders" : "Chyba při získávání nadcházejících připomínek", + "An error occurred while accepting an invitation" : "Došlo k chybě při přijímání pozvánky", + "An error occurred while rejecting an invitation" : "Došlo k chybě při odmítání pozvánky", + "{guest} (guest)" : "{guest} (host)", + "Poll draft has been saved" : "Koncept ankety byl uložen", + "An error occurred while saving the draft" : "Došlo k chybě při ukládání konceptu", + "An error occurred while submitting your vote" : "Při odesílání vašeho hlasu došlo k chybě", + "An error occurred while ending the poll" : "Při uzavírání ankety došlo k chybě", + "An error occurred while deleting the poll draft" : "Došlo k chybě při mazání konceptu ankety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketa „{name}“ byla vytvořena uživatelem {user}. Kliknutím budete hlasovat", + "Failed to add reaction" : "Nepodařilo se přidat reakci", + "Failed to remove reaction" : "Nepodařilo se odebrat reakci", + "The server is in maintenance mode." : "Server se nachází v režimu údržby.", + "Federated server was updated." : "Federovaný server byl zaktualizován.", + "Error while uploading file \"{fileName}\"" : "Chyba při nahrávání „{fileName}“", + "Not enough free space to upload file \"{fileName}\"" : "Nedostatek místa pro nahrání souboru „{fileName}“", + "You are not allowed to share files" : "Ke sdílení souborů nemáte povolení", + "Error while sharing file" : "Chyba při sdílení souboru", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Webový prohlížeč, který používáte, není Nextcloud Talk plně podporován. Prosíme použijte nejnovější verzi Mozilla Firefox, Microsoft Edge, Google Chrome, Opera nebo Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Během %n hodiny","Během %n hodin","Během %n hodin","Během %n hodin"], + "_%n minute _::_%n minutes_" : ["%n minuta ","%n minuty ","%n minut ","%n minuty "], + "In {hours} and {minutes}" : "Za {hours} a {minutes}", + "_In %n minute_::_In %n minutes_" : ["během %n minuty","během %n minut","během %n minut","během %n minut"], + "Later today – {timeLocale}" : "Později dnes – {timeLocale}", + "Set time for later today" : "Nastavit čas na později dnes", + "Tomorrow – {timeLocale}" : "Zítra – {timeLocale}", + "Set time for tomorrow" : "Nastavit čas na zítra", + "This weekend – {timeLocale}" : "Tento víkend – {timeLocale}", + "Set time for this weekend" : "Nastavit čas na tento víkend", + "Next week – {timeLocale}" : "Příští týden – {timeLocale}", + "Set time for next week" : "Nastavit čas na příští týden", + "Message link copied to clipboard" : "Odkaz na zprávu zkopírován do schránky", + "Conversation link copied to clipboard" : "Odkaz na konverzaci zkopírován do schránky", + "The link could not be copied" : "Odkaz se nepodařilo zkopírovat", + "Error while parsing a PROPFIND error" : "Chyba při zpracovávání PROPFIND chyby", + "Sending signaling message has failed" : "Odeslání signálové zprávy se nezdařilo", + "Lost connection to signaling server. Trying to reconnect." : "Ztraceno spojení se signalizačním serverem. Probíhá pokus o opětovné navázání spojení.", + "Lost connection to signaling server." : "Ztraceno spojení se signalizačním serverem", + "Connecting is taking longer than expected …" : "Připojování trvá déle než očekáváno …", + "Failed to connect. Retrying …" : "Nepodařilo se připojit. Zkouší se znovu …", + "Failed to connect. The signaling server may be set up incorrectly" : "Nepodařilo se připojit. Je možné, že signalizační server není správně nastavený", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nastavený signální server je třeba aktualizovat, aby byl kompatibilní s touto verzí Talk. Obraťte se na správu.", + "Please restart the app." : "Restartujte aplikaci.", + "Please reload the page." : "Načtěte stránku znovu.", + "Please try to restart the app." : "Zkuste aplikaci ukončit a spustit znovu.", + "Please try to reload the page." : "Zkuste stránku znovu načíst.", + "Do not disturb" : "Nerušit", + "Away" : "Pryč", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Reproduktor {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Zdá se, že mluvíte a přitom máte ztlumeno – zrušte ztlumení, aby vás ostatní slyšeli", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nedaří se navázat spojení přinejmenším s jedním účastníkem. Pro váš scénář může být zapotřebí TURN server. Požádejte správce o nastavení nějakého podle {linkstart}této dokumentace{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Toto trvá déle než by mělo. Udělili už jste oprávnění pro přístup k médiím (nebo snad zamítli)? Pokud jsou oprávnění udělena, restartujte webový prohlížeč, protože zvuk a video se nedaří", + "Access to microphone & camera is only possible with HTTPS" : "Přístup k mikrofonu a kameře je možný pouze přes HTTPS", + "Please move your setup to HTTPS" : "Přesuňte svou instalaci na HTTPS", + "Access to microphone & camera was denied" : "Přístup k mikrofonu a kameře byl odepřen", + "WebRTC is not supported in your browser" : "Vámi používaný prohlížeč nepodporuje WebRTC", + "Please use a different browser like Firefox or Chrome" : "Použijte jiný prohlížeč, jako třeba Firefox nebo Chrome", + "Error while accessing microphone & camera" : "Chyba při přístupu k mikrofonu a kameře", + "%s Talk on your mobile devices" : "%s Talk na vašich mobilních zařízeních", + "Join conversations at any time, anywhere, on any device." : "Připojte se ke konverzaci kdykoli, kdekoli a z jakéhokoli zařízení.", + "Android app" : "Aplikace pro Android", + "iOS app" : "Aplikace pro iOS", + "__language_name__" : "Čeština", + "Webhook Demo" : "Ukázka webového háčku", + "Call summary (%s)" : "Shrnutí hovoru (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Automat pošle po ukončení hovoru souhrnnou zprávu se seznamem všech účastníků a vytyčením úkolů", + "Tasks" : "Úlohy", + "Notes" : "Poznámky", + "Reports" : "Výkazy", + "Decisions" : "Rozhodnutí", + "Agenda" : "Agenda", + "Call summary" : "Shrnutí hovoru", + "Call summary - {title}" : "Souhrn hovoru – {title}", + "Talk conversation for event" : "Konverzace v Talk pro událost", + "Client Push is installed, this improves the performance of desktop clients." : "Služba klient Push je nainstalovaná a bude zlepšovat výkon klientských aplikací pro počítač.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} není nainstalované – to může vést k problémům s výkonem při používání klientů pro počítač.", + "Next meeting" : "Příští schůzka", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Naplánujte schůzku ze svého kalendáře. Aby se zde ukázala, je třeba konverzaci v Talk nastavit jako umístění", + "Join conversations from remote Nextcloud servers" : "Připojte se do konverzací na vzdálených Nextcloud serverech", + "Your default media state has been saved" : "Váš výchozí stav média byl uložen", + "Set reminder for later today" : "Nastavit připomínku na později dnes", + "Set reminder for tomorrow" : "Nastavit připomínku na zítra", + "Set reminder for this weekend" : "Nastavit připomínku na tento víkend", + "Set reminder for next week" : "Nastavit připomínku pro příští týden", + "Generate summary" : "Vytvořit shrnutí", + "Open poll • You voted already" : "Otevřená anketa ・ Už jste hlasovali", + "Open poll • Click to vote" : "Otevřená anketa ・ Hlasujte kliknutím", + "Poll • Ended" : "Anketa • Ukončeno", + "Talk recording from {time} ({conversation})" : "Záznam z Talk z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Výsledky ankety • %n hlas","Výsledky ankety • %n hlasy","Výsledky ankety • %n hlasů","Výsledky ankety • %n hlasy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otevřená anketa • %n hlas","Otevřená anketa • %n hlasy","Otevřená anketa • %n hlasů","Otevřená anketa • %n hlasy"], + "Submit vote" : "Odeslat hlas", + "Your privacy setting has been saved" : "Vaše nastavení soukromí byla uložena", + "Your personal setting has been saved" : "Vaše osobní nastavení byla uložena", + "Failed to save sounds setting" : "Nastavení zvuků se nepodařilo uložit", + "Sounds setting saved" : "Nastavení zvuku uloženo", + "Always shown if recording consent is required" : "Vždy zobrazováno, pokud je zapotřebí souhlas s nahráváním", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk bylo aktualizováno – nemůžete zahájit hovor nebo se k němu připojit.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ke konverzaci jste se přidali z jiného okna nebo zařízení. Nextcloud zatím nepodporuje souběžná připojení a tak tato relace byla uzavřena.", + "Nextcloud Talk was updated." : "Nextcloud Talk bylo aktualizováno.", + "Nextcloud is in maintenance mode." : "Nextcloud se právě nachází v režimu údržby.", + "Nextcloud Talk Federation was updated." : "Federovaní Nextcloud Talk bylo zaktualizováno.", + "Enable live translation" : "Zapnout překlad v reálném čase", + "I picked list style" : "Vybral/a jsem styl seznamu", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Používáte Talk ve stylu seznamu nebo bublin zpráv?" +}, +"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;"); diff --git a/l10n/cs.json b/l10n/cs.json new file mode 100644 index 0000000..2dcb01e --- /dev/null +++ b/l10n/cs.json @@ -0,0 +1,2233 @@ +{ "translations": { + "a conversation" : "konverzace", + "(Duration %s)" : "(Doba trvání %s)", + "You attended a call with {user1}" : "Zúčastnili jste se hovoru s {user1}", + "_%n guest_::_%n guests_" : ["%n host","%n hosté","%n hostů","%n hosté"], + "You attended a call with {user1} and {user2}" : "Zúčastnili jste se hovoru s {user1} a {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Zúčastnili jste se hovoru s {user1}, {user2} a {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Zúčastnili jste se hovoru s {user1}, {user2}, {user3} a {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Zúčastnili jste se hovoru s {user1}, {user2}, {user3}, {user4} a {user5}", + "_%n other_::_%n others_" : ["%n dalším","%n dalšími","%n dalšími","%n dalšími"], + "{actor} invited you to {call}" : "{actor} vás pozval(a) do {call}", + "You were invited to a conversation or had a call" : "Byli jste přizvání do konverzace nebo vám někdo volal", + "Other activities" : "Ostatní aktivity", + "Talk" : "Talk", + "Guest" : "Host", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Vítejte v Nextcloud Talk!\nV této konverzaci budete informováni o nových funkcích, dostupných v Nextcloud Talk.", + "## New in Talk %s" : "## Novinky v Talk verze %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Účastnit se (video)hovorů je nyní možné i z prohlížečů Microsoft Edge a Safari", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- konverzace se dvěma účastníky jsou nyní trvalé a už se nedají omylem přepnout do skupinové konverzace. Dále, pokud jeden z účastníků odejde, konverzace už není automaticky smazána. Konverzace je ze serveru vymazána teprve, až když odejdou oba", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Nově lze upozornit všechny účastníky chatu a to odesláním „@all“ v příspěvku.", + "- With the \"arrow-up\" key you can repost your last message" : "- Pomocí šipky nahoru můžete znovu poslat svoji předchozí zprávu.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk nově disponuje příkazy pro aplikaci. To, zda správce vašeho Nextcloud nějaké nastavil zjistíte posláním zprávy s textem \"/help\"", + "- With projects you can create quick links between conversations, files and other items" : "- Pomocí projektů lze seskupovat konverzace, soubory a další položky", + "- You can now mention guests in the chat" : "- Nově lze v konverzacích „zmiňovat“ i hosty.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konverzace nyní mohou mít „čekárnu“. To moderátorům umožňuje se k chatu nebo rozhovoru připojit s předstihem a setkání připravit, zatímco ostatní uživatelé a hosté čekají", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Nyní můžete na zprávy odpovídat přímo a poskytnout tak ostatním představu o kontextu vaší zprávy", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Hledání v konverzacích a účastnících nyní také odfiltrovává stávající konverzace, díky čemuž je mnohem snazší najít předchozí konverzace", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Pokud je nainstalovaná aplikace Okruhy, je nyní možné do konverzace přidávat uživatelsky určené skupiny", + "- Check out the new grid and call view" : "- Podívejte se na nové zobrazení v mřížce a hovoru", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nyní můžete nahrávat přetažením souborů přímo do chatu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Sdílené soubory se nyní otevírají přímo v chatu pomocí aplikací pro jejich zobrazení", + "- You can now search for chats and messages in the unified search in the top bar" : "- Nyní je možné vyhledávat v chatech a zprávách ve sjednoceném vyhledávání v horní liště", + "- Spice up your messages with emojis from the emoji picker" : "- Okořeňte své zprávy emotikony z dialogu s nimi", + "- You can now change your camera and microphone while being in a call" : "- Nyní je možné změnit kameru a mikrofon v průběhu hovoru", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Napište popis své konverzace a umožněte ji tak ostatním uživatelům snadněji najít a připojit se", + "- See a read status and send failed messages again" : "- Zkontrolujte si, kdo si zprávu už přečetl a pošlete ty nedoručené znovu", + "- Raise your hand in a call with the R key" : "- Přihlaste se při konferenci o slovo stiskem klávesy R", + "- Join the same conversation and call from multiple devices" : "- Připojit se k té stejné konverzaci a volat z vícero zařízení naráz", + "- Send voice messages, share your location or contact details" : "- Posílat hlasové zprávy, sdílet svou polohu nebo podrobnosti o kontaktu", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Přidat skupiny do konverzace a jejich noví členové pak budou automaticky přidáni jako účastníci", + "- A preview of your audio and video is shown before joining a call" : "- Před připojením k hovoru se nyní zobrazuje náhled videa a zvuku od vás", + "- You can now blur your background in the newly designed call view" : "- V nově navrženém pohledu volání, si za sebou můžete nechat rozmazat pozadí", + "- Moderators can now assign general and individual permissions to participants" : "- Moderátoři nyní mohou účastníkům upravovat všeobecná a individuální oprávnění", + "- You can now react to chat messages" : "- Nyní můžete reagovat na zprávy v chatu", + "- In the sidebar you can now find an overview of the latest shared items" : "- V postranním panelu nyní naleznete přehled naposledy sdílených položek", + "- Use a poll to collect the opinions of others or settle on a date" : "- Použijte anketu pro shromáždění názorů ostatních nebo pro dohodnutí si data", + "- Configure an expiration time for chat messages" : "- nastavte dobu skončení platnosti pro zprávy v chatu", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- V konverzacích s mnoha účastníky zahajujte hovory bez upozorňování ostatních. Upozornění na hovory je možné posílat jednotlivě po zahájení hovoru.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Odesílejte zprávy v chatu bez upozorňování příjemců pro případy, že nejsou neodkladné", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emotikony je nyní možné automaticky doplňovat napsáním „:“ (dvojtečky)", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Odkazování na různé položky pomocí nového inteligentního výběru napsáním „/“ (dopředné lomítko)", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderátoři nyní mohou vytvářet přestávkové místnosti (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Hovory je nyní možné nahrávat (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Conversations can now have an avatar or emoji as icon" : "- Konverzace nyní mohou mít jako ikonu avatara či emotikonu", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ve videohovorech jsou nyní kromě rozmazaného pozadí k dispozici také ta virtuální", + "- Reactions are now available during calls" : "- V průběhu hovorů jsou nyní k dispozici reakce", + "- Typing indicators show which users are currently typing a message" : "- Indikátory psaní zobrazují, kteří uživatelé právě píší zprávu", + "- Groups can now be mentioned in chats" : "- Skupiny je nyní možné zmiňovat v chatech", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Nahrávky hovorů jsou automaticky převáděny na text (pokud je zaregistrována aplikace poskytovatele pro vytváření přepisů)", + "- Chat messages can be translated if a translation provider app is registered" : "- Zprávy v chatu je možné překládat (pokud je zaregistrována aplikace poskytovatele pro vytváření překladů)", + "- **Markdown** can now be used in _chat_ messages" : "- ve zprávách v _chatu_ je nyní možné formátovat pomocí **markdown** značek", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- webové háčky jsou nyní k dispozici pro implementaci automatů. Podrobnosti viz dokumentace https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nastavte si připomínku ohledně zprávy v chatu a buďte tak na ni upozorněni později znovu", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- konverzaci **Poznámky pro mne** použijte pro své poznámky a sdílení informací napříč svými zařízeními", + "- Captions allow to send a message with a file at the same time" : "- titulky umožňují poslání zprávy se souborem naráz", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- video řečníka je nyní viditelné v průběhu sdílení obrazovky a reakce v hovoru jsou animované", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Zprávy je nyní možné po dobu 6 hodin upravovat přihlášenými autory a moderátory", + "- Unsent message drafts are now saved in your browser" : "- Neodeslané koncepty zpráv jsou nyní webovým prohlížečem ukládány", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textové chatování je nyní možné federovaně s ostatními Talk servery", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderátoři nyní mohou udělovat účtům vyloučení a hostům bránit v tom, aby se znovu připojovali ke konverzacím", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nacházející volání z událostí v napojeném kalendáři a zástupy při nepřítomnosti jsou nyní zobrazovány v konverzacích", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Hovory je nyní možné uskutečňovat federovaně s ostatními Talk servery (vyžaduje podpůrnou vrstvu pro vysoký výkon)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Uvádí desktopového klienta Nextcloud Talk pro Windows, macOS a Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Díky Nextcloud asistentovi si nechte vytvářet shrnutí obsahu nahrávek hovorů a nepřečtených zpráv v chat konverzacích", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Vylepšené schůzky s uznávanými hosty pozvanými prostřednictvím jejich e-mailových adres, import seznamů účastníků, koncepty anket a stahování seznamů účastníků hovorů", + "- Archive conversations to stay focused" : "- Archivujte konverzace a vyhněte se tak rozptylování pozornosti", + "- Schedule a meeting into your calendar from within a conversation" : "- Naplánujte schůzku ve svém kalendáři přímo z konverzace", + "- Search for messages of the current conversation directly in the right sidebar" : "- Vyhledávejte ve zprávách stávající konverzace přímo v postranní liště vpravo", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Přehled o více konverzacích naráz pomocí nového zhuštěného seznamu (k zapnutí v nastavení Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- U konverzací v rámci schůzí jsou nyní synchronizovány nadpis a popis z kalendáře a jsou kryté ve vyhledávacím filtru dokud se neblíží svému zahájení", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označujte v nastavení notifikací konverzace jako citlivé a skrývejte tak obsah zpráv v seznamu konverzací a notifikacích", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Pokud chcete dostávat push notifikace i po dobu „Nevyrušovat“, označte konverzace jako důležité", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Přidávejte ostatní účastníky do hovoru jednoho-s-jedním a vytvářejte tak za pochodu nové skupinové volání", + "- Use threads to keep your chat and discussions organized" : "– Používejte vlákna a uspořádávejte tak své chaty a diskuze", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- V průběhu hovoru je nyní k dispozici průběžný přepis (vyžaduje ExApp live-transcription a podpůrnou vrstvu pro vysoký výkon)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderátoři nyní mohou připínat zprávy, takže zůstávají nahoře", + "- Schedule a message to send it at a later time" : "- Naplánovat zprávu pro její odeslání později", + "_All %n participant_::_All %n participants_" : ["Všechen %n účastník","Všichni %n účastníci","Všech %n účastníků","Všichni %n účastníci"], + "Talk updates ✅" : "Aktualizace Talk ✅", + "Reaction deleted by author" : "Reakce smazána autorem", + "{actor} created the conversation" : "{actor} vytvořil(a) konverzaci", + "You created the conversation" : "Vytvořili jste konverzaci", + "System created the conversation" : "Systém vytvořil konverzaci", + "An administrator created the conversation" : "Správce vytvořil konverzaci", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} přejmenoval(a) konverzaci z „%1$s“ na „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Přejmenovali jste konverzaci z „%1$s“ na „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Správce přejmenoval konverzaci z „%1$s“ na „%2$s“", + "{actor} set the description" : "{actor} nastavil(a) popis", + "You set the description" : "Nastavili jste popis", + "An administrator set the description" : "Správce nastavil popis", + "{actor} removed the description" : "{actor} odebral(a) popis", + "You removed the description" : "Odebrali jste popis", + "An administrator removed the description" : "Správce odebral popis", + "You started a silent call" : "Zahájili jste nevyzvánějící hovor", + "Outgoing silent call" : "Odchozí hovor bez vyzvánění", + "{actor} started a silent call" : "{actor} zahájil(a) nevyzvánějící hovor", + "Incoming silent call" : "Příchozí hovor bez vyzvánění", + "You started a call" : "Zahájili jste hovor", + "Outgoing call" : "Odchozí hovor", + "{actor} started a call" : "{actor} zahájil(a) hovor", + "Incoming call" : "Příchozí hovor", + "{actor} joined the call" : "{actor} se připojil(a) k hovoru", + "You joined the call" : "Připojili jste se k hovoru", + "{actor} left the call" : "{actor} opustil(a) hovor", + "You left the call" : "Opustili jste hovor", + "{actor} unlocked the conversation" : "{actor} odemkl(a) konverzaci", + "You unlocked the conversation" : "Odemkli jste konverzaci", + "An administrator unlocked the conversation" : "Správce odemknul konverzaci", + "{actor} locked the conversation" : "{actor} uzamkl(a) konverzaci", + "You locked the conversation" : "Uzamkli jste konverzaci", + "An administrator locked the conversation" : "Správce uzamkl konverzaci", + "{actor} limited the conversation to the current participants" : "{actor} omezil(a) konverzaci pouze na stávající účastníky", + "You limited the conversation to the current participants" : "Omezili jste konverzaci pouze na stávající účastníky", + "An administrator limited the conversation to the current participants" : "Správce omezil konverzaci pouze pro stávající účastníky", + "{actor} opened the conversation to registered users" : "{actor} otevřel(a) konverzaci registrovaným uživatelům", + "You opened the conversation to registered users" : "Otevřeli jste konverzaci registrovaným uživatelům", + "An administrator opened the conversation to registered users" : "Správce otevřel konverzaci registrovaným uživatelům", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otevřel(a) konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "You opened the conversation to registered users and users created with the Guests app" : "Otevřeli jste konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Správce otevřel konverzaci registrovaným uživatelům a uživatelům, vytvořeným aplikací Hosté", + "The conversation is now open to everyone" : "Konverzace je nyní otevřena komukoliv", + "{actor} opened the conversation to everyone" : "{actor} otevřel(a) konverzaci komukoliv", + "You opened the conversation to everyone" : "Konverzaci jste zpřístupnili komukoliv", + "{actor} restricted the conversation to moderators" : "{actor} omezil(a) přístup ke konverzaci pouze na moderátory", + "You restricted the conversation to moderators" : "Omezili jste konverzaci pouze na moderátory", + "{actor} started breakout rooms" : "{actor} spustil(a) místnosti pro přestávku", + "You started breakout rooms" : "Spustili jste místnosti pro přestávku", + "{actor} stopped breakout rooms" : "{actor} zastavil(a) místnosti pro přestávku", + "You stopped breakout rooms" : "Zastavili jste místnosti pro přestávku", + "{actor} allowed guests" : "{actor} umožnil(a) hosty", + "You allowed guests" : "Umožnili jste hosty", + "An administrator allowed guests" : "Správce povolil hosty", + "{actor} disallowed guests" : "{actor} nedovolil(a) hosty", + "You disallowed guests" : "Nedovolili jste hosty", + "An administrator disallowed guests" : "Správce nepovolil hosty", + "{actor} set a password" : "{actor} nastavil(a) heslo", + "You set a password" : "Nastavili jste heslo", + "An administrator set a password" : "Správce nastavil heslo", + "{actor} removed the password" : "{actor} odebral(a) heslo", + "You removed the password" : "Odebrali jste heslo", + "An administrator removed the password" : "Správce odebral heslo", + "{actor} added {user}" : "{actor} přidal(a) {user}", + "You joined the conversation" : "Připojili jste se ke konverzaci", + "{actor} joined the conversation" : "{actor} se připojil(a) ke konverzaci", + "You added {user}" : "Přidali jste {user}", + "{actor} added you" : "{actor} vás přidal(a)", + "An administrator added you" : "Správce vás přidal", + "An administrator added {user}" : "Správce přidal {user}", + "You left the conversation" : "Opustili jste konverzaci", + "{actor} left the conversation" : "{actor} opustil(a) konverzaci", + "{actor} removed {user}" : "{actor} odebral(a) {user}", + "You removed {user}" : "Odebrali jste {user}", + "{actor} removed you" : "{actor} vás odebral(a)", + "An administrator removed you" : "Správce vás odebral", + "An administrator removed {user}" : "Správce odebral {user}", + "{actor} invited {federated_user}" : "{actor} pozval(a) {federated_user}", + "You invited {federated_user}" : "Pozvali jste {federated_user}", + "You accepted the invitation" : "Pozvánku jste přijali", + "{actor} invited you" : "{actor} vás pozval(a)", + "An administrator invited you" : "Správce vás pozval", + "An administrator invited {federated_user}" : "Správce pozval {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} přijal pozvání", + "{actor} removed {federated_user}" : "{actor} odebral(a) {federated_user}", + "You removed {federated_user}" : "Odebrali jste {federated_user}", + "You declined the invitation" : "Odmítli jste pozvánku", + "An administrator removed {federated_user}" : "Správce odebral {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odmítl pozvání", + "{actor} added group {group}" : "{actor} přidal(a) skupinu {group}", + "You added group {group}" : "Přidali jste skupinu {group}", + "An administrator added group {group}" : "Správce přidal skupinu {group}", + "{actor} removed group {group}" : "{actor} odebral(a) skupinu {group}", + "You removed group {group}" : "Odebrali jste skupinu {group}", + "An administrator removed group {group}" : "Správce odebral skupinu {group}", + "{actor} added team {circle}" : "{actor} přidal(a) tým {circle}", + "You added team {circle}" : "Přidali jste tým {circle}", + "An administrator added team {circle}" : "Správce přidal tým {circle}", + "{actor} removed team {circle}" : "{actor} odebral(a) tým {circle}", + "You removed team {circle}" : "Odebrali jste tým {circle}", + "An administrator removed team {circle}" : "Správce odebral tým {circle}", + "{actor} added {phone}" : "{actor} přidal(a) {phone}", + "You added {phone}" : "Přidali jste {phone}", + "An administrator added {phone}" : "Správce přidal {phone}", + "{actor} removed {phone}" : "{actor} odebral(a) {phone}", + "You removed {phone}" : "Odebrali jste {phone}", + "An administrator removed {phone}" : "Správce odebral {phone}", + "{actor} promoted {user} to moderator" : "{actor} povýšil(a) {user} na moderátora", + "You promoted {user} to moderator" : "Přidali jste {user} práva moderátora", + "{actor} promoted you to moderator" : "{actor} vás povýšil(a) na moderátora", + "An administrator promoted you to moderator" : "Správce vás povýšil na moderátora", + "An administrator promoted {user} to moderator" : "Správce povýšil {user} na moderátora", + "{actor} demoted {user} from moderator" : "{actor} odebral(a) uživateli {user} oprávnění moderátora", + "You demoted {user} from moderator" : "Odebrali jste {user} práva moderátora", + "{actor} demoted you from moderator" : "{actor} vám odebral(a) oprávnění moderátora", + "An administrator demoted you from moderator" : "Správce vám odebral práva moderátora", + "An administrator demoted {user} from moderator" : "Správce odebral {user} práva moderátora", + "{actor} shared a file which is no longer available" : "{actor} nasdílel(a) soubor který už není k dispozici", + "You shared a file which is no longer available" : "Sdílíte soubor který už není k dispozici", + "File shares are currently not supported in federated conversations" : "Sdílení souborů prozatím není ve federovaných konverzacích podporováno", + "The shared location is malformed" : "Popis sdíleného umístění nemá správný formát", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavil(a) Matterbridge pro synchronizaci této konverzace s ostatními chaty", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavili jste Matterbridge pro synchronizaci této konverzace s ostatními chaty", + "{actor} created thread {title}" : "{actor} vytvořil/a vlákno {title}", + "You created thread {title}" : "Vytvořili jste vlákno {title}", + "{actor} renamed thread {title}" : "{actor} přejmenoval/a vlákno {title}", + "You renamed thread {title}" : "Přejmenovali jste vlákno {title}", + "{actor} updated the Matterbridge configuration" : "{actor} aktualizoval(a) nastavení pro Matterbridge", + "You updated the Matterbridge configuration" : "Aktualizovali jste nastavení pro Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} odebral(a) nastavení pro Matterbridge", + "You removed the Matterbridge configuration" : "Odebrali jste nastavení pro Matterbridge", + "{actor} started Matterbridge" : "{actor} spustil(a) Matterbridge", + "You started Matterbridge" : "Spustili jste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zastavil(a) Matterbridge", + "You stopped Matterbridge" : "Zastavili jste Matterbridge", + "{actor} deleted a message" : "{actor} smazal(a) zprávu", + "You deleted a message" : "Smazali jste zprávu", + "{actor} edited a message" : "{actor} upravil(a) zprávu", + "You edited a message" : "Upravili jste správu", + "{actor} pinned a message" : "{actor} připnul/a zprávu", + "You pinned a message" : "Připnuli jste zprávu", + "{actor} unpinned a message" : "{actor} zrušil/a připnutí zprávy", + "Message was automatically unpinned" : "Připnutí zprávy bylo automaticky zrušeno", + "You unpinned a message" : "Zrušili jste připnutí zprávy", + "{actor} deleted a reaction" : "{actor} smazal(a) reakci", + "You deleted a reaction" : "Smazali jste reakci", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nastavili jste omezení platnosti zprávy na %n týden","Nastavili jste omezení platnosti zprávy na %n týdny","Nastavili jste omezení platnosti zprávy na %n týdnů","Nastavili jste omezení platnosti zprávy na %n týdny"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nastavili jste omezení platnosti zprávy na %n den","Nastavili jste omezení platnosti zprávy na %n dny","Nastavili jste omezení platnosti zprávy na %n dnů","Nastavili jste omezení platnosti zprávy na %n dny"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nastavili jste omezení platnosti zprávy na %n hodinu","Nastavili jste omezení platnosti zprávy na %n hodiny","Nastavili jste omezení platnosti zprávy na %n hodin","Nastavili jste omezení platnosti zprávy na %n hodiny"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nastavili jste platnost zprávy na %n minutu","Nastavili jste platnost zprávy na %n minuty","Nastavili jste platnost zprávy na %n minut","Nastavili jste platnost zprávy na %n minuty"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n týden","{actor} nastavil(a) omezení platnosti zprávy na %n týdny","{actor} nastavil(a) omezení platnosti zprávy na %n týdnů","{actor} nastavil(a) omezení platnosti zprávy na %n týdny"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n den","{actor} nastavil(a) omezení platnosti zprávy na %n dny","{actor} nastavil(a) omezení platnosti zprávy na %n dnů","{actor} nastavil(a) omezení platnosti zprávy na %n dny"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavil(a) omezení platnosti zprávy na %n hodinu","{actor} nastavil(a) omezení platnosti zprávy na %n hodiny","{actor} nastavil(a) omezení platnosti zprávy na %n hodin","{actor} nastavil(a) omezení platnosti zprávy na %n hodiny"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavi(a) platnost zprávy na %n minutu","{actor} nastavi(a) platnost zprávy na %n minuty","{actor} nastavi(a) platnost zprávy na %n minut","{actor} nastavi(a) platnost zprávy na %n minuty"], + "{actor} disabled message expiration" : "{actor} vypnul(a) omezení časové platnosti zprávy", + "You disabled message expiration" : "Vypnuli jste omezení časové platnosti zprávy", + "{actor} cleared the history of the conversation" : "{actor} vyčistil(a) historii konverzace", + "You cleared the history of the conversation" : "Vyčistili jste historii konverzace", + "{actor} set the conversation picture" : "{actor} nastavil(a) zástupný obrázek", + "You set the conversation picture" : "Nastavili jste obrázek konverzace", + "{actor} removed the conversation picture" : "{actor} odebral(a) obrázek konverzace", + "You removed the conversation picture" : "Odebrali jste obrázek konverzace", + "{actor} ended the poll {poll}" : "{actor} ukončil(a) anketu {poll}", + "You ended the poll {poll}" : "Ukončili jste anketu {poll}", + "{actor} started the video recording" : "{actor} zahájil(a) záznam videa", + "You started the video recording" : "Zahájili jste záznam videa", + "{actor} stopped the video recording" : "{actor} ukončil(a) záznam videa", + "You stopped the video recording" : "Ukončili jste záznam videa", + "{actor} started the audio recording" : "{actor} zahájil(a) záznam zvuku", + "You started the audio recording" : "Zahájili jste záznam zvuku", + "{actor} stopped the audio recording" : "{actor} ukončil(a) záznam zvuku", + "You stopped the audio recording" : "Zastavili ukončili jste záznam zvuku", + "The recording failed" : "Nahrávání se nezdařilo", + "Someone voted on the poll {poll}" : "Někdo hlasoval v anketě {poll}", + "Message deleted by author" : "Autor zprávu smazal", + "Message deleted by {actor}" : "Zpráva byla smazána uživatelem {actor}", + "Message deleted by you" : "Zprávu jste smazali", + "Deleted user" : "Smazaný uživatel", + "Unknown number" : "Neznámé číslo", + "Administration" : "Správa", + "System" : "Systémové", + "%s (guest)" : "%s (host)", + "Missed call" : "Zmeškaný hovor", + "Unanswered call" : "Nezvednutý hovor", + "Call ended (Duration {duration})" : "Hovor skončil (trval {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ukončil(a) hovor (trval {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Hovor s %n hostem byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor se %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor s %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})","Hovor se %n hosty byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Hovor s %n hostem skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})","Hovor se %n hosty skončil (doba trvání {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ukončil hovor s %n hostem (trval {duration})","{actor} ukončil hovor se %n hosty (trval {duration})","{actor} ukončil hovor s %n hosty (trval {duration})","{actor} ukončil hovor se %n hosty (trval {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1} ended (Duration {duration})" : "Hovor s {user1} skončil (trval {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ukončil hovor s {user1} (trval {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} a {user2} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Hovor s {user1} a {user2} skončil (trval {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ukončil hovor s {user1} a {user2} (trval {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} skončil (trvání {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2} a {user3} (trval {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} skončil (trval {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3} a {user4} (trval {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} byl ukončen, protože přesáhl nejvyšší umožněnou délku (trval {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} skončil (trval {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3}, {user4} a {user5} (trval {duration})", + "Message of {user} in {conversation}" : "Zpráva {user} v {conversation}", + "Message of {user}" : "Zpráva uživatele {user}", + "Message of a deleted user in {conversation}" : "Zpráva smazaného uživatele v {conversation}", + "Talk conversations" : "Konverzace v Talk", + "Talk to %s" : "Talk s %s", + "An error occurred. Please contact your administrator." : "Došlo k chybě. Obraťte se na svého správce.", + "Storage quota exceeded" : "Kvóta úložiště překročena", + "File not found" : "Soubor nenalezen", + "File is not shared, or shared but not with the user" : "Soubor není sdílen, nebo je sdílený s jiným uživatelem", + "No account available to delete." : "Není k dispozici žádný účet pro smazání.", + "Poll" : "Anketa", + "Password needs to be set" : "Je třeba nastavit heslo", + "Uploading the file failed" : "Nahrání souboru se nezdařilo", + "No image file provided" : "Neposkytnut žádný soubor, obsahující obrázek", + "File is too big" : "Soubor je příliš velký", + "Invalid file provided" : "Poskytnut neplatný soubor", + "Invalid image" : "Neplatný obrázek", + "Unknown filetype" : "Neznámý typ souboru", + "Talk mentions" : "Zmínění v Talk", + "More conversations" : "Další konverzace", + "Say hi to your friends and colleagues!" : "Pozdravte své přátele a kolegy!", + "No unread mentions" : "Žádná nepřečtená zmínění", + "Call in progress" : "Probíhá hovor", + "You were mentioned" : "Byli jste zmíněni", + "Write to conversation" : "Napsat do konverzace", + "Writes event information into a conversation of your choice" : "Napíše informace o události do konverzace, kterou zvolíte", + "Missing email field in header line" : "V řádku hlavičky chybí kolonka e-mail", + "Following lines are invalid: %s" : "Následující řádky nejsou platné: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vás přizval/a do konverzace „%2$s“.", + "You were invited to conversation \"%s\"." : "Jste pozváni do konverzace „%s“.", + "Conversation invitation" : "Pozvánka do konverzace", + "Scheduled time" : "Naplánovaný čas", + "Description" : "Popis", + "You can also dial-in via phone with the following details" : "Můžete se také připojit voláním z telefonu na následující", + "Dial-in information" : "Informace o volání sem", + "Meeting ID" : "Identif. schůzky", + "Your PIN" : "Váš PIN", + "Click the button below to join the lobby now." : "Kliknutím na tlačítko níže se k čekárně připojíte nyní.", + "Click the link below to join the lobby now." : "Kliknutím na odkaz níže se k čekárně připojíte nyní.", + "Join lobby for \"%s\"" : "Připojit se k čekárně pro „%s“", + "Click the button below to join the conversation now." : "Kliknutím na tlačítko níže se ke konverzaci připojíte nyní.", + "Click the link below to join the conversation now." : "Kliknutím na odkaz níže se ke konverzaci připojíte nyní.", + "Join \"%s\"" : "Připojit se k „%s“", + "Meeting" : "Schůze", + "Password request: %s" : "Požadavek na heslo: %s", + "Private conversation" : "Soukromá konverzace", + "Deleted user (%s)" : "Smazán uživatel (%s)", + "Failed to upload call recording" : "Nahrávku se nepodařilo nahrát na server", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Nahrávacímu serveru se nepodařilo nahrát záznam hovoru {call}. Obraťte se na správu.", + "Share to chat" : "Nasdílet do chatu", + "Dismiss notification" : "Zahodit upozornění", + "Call recording now available" : "Nahrávání hovoru je nyní k dispozici", + "The recording for the call in {call} was uploaded to {file}." : "Nahrávka pro hovor v {call} byla nahrána do {file}.", + "Transcript now available" : "Přepis je nyní k dispozici", + "The transcript for the call in {call} was uploaded to {file}." : "Přepis hovoru v {call} byl nahrán do {file}.", + "Failed to transcript call recording" : "Z nahrávky hovoru se nepodařilo udělat přepis", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru se nepodařilo vytvořit přepis nahrávky v {file} pro hovor v {call}. Obraťte se na správu.", + "Call summary now available" : "Souhrn hovoru je nyní k dispozici", + "The summary for the call in {call} was uploaded to {file}." : "Shrnutí hovoru v {call} bylo nahráno do {file}.", + "Failed to summarize call recording" : "Nepodařilo se shrnout nahrávku hovoru", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru se nepodařilo shrnout obsah nahrávky v {file} pro hovor v {call}. Obraťte se na správu.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vás pozval(a) do {roomName} na {remoteServer}", + "Accept" : "Přijmout", + "Decline" : "Odmítnout", + "{user1} invited you to a federated conversation" : "{user} vás pozval(a) do federované konverzace", + "Someone reacted" : "Někdo zareagoval", + "New message" : "Nová zpráva", + "Reminder" : "Připomínka", + "Someone mentioned you" : "Někdo vás zmínil", + "Notification" : "Upozornění", + "Someone reacted in a private conversation" : "Někdo reagoval v soukromé konverzaci", + "You received a message in a private conversation" : "Obdrželi jste zprávu v soukromé konverzaci", + "Reminder in a private conversation" : "Připomínka v soukromé konverzaci", + "Someone mentioned you in a private conversation" : "Někdo vás zmínil v soukromé konverzaci", + "Notification in a private conversation" : "Upozornění v soukromé konverzaci", + "Reminder: You in {call}" : "Připomínka: Vy v {call}", + "Reminder: {user} in {call}" : "Připomínka: {user} v {call}", + "Reminder: Deleted user in {call}" : "Připomínka: smazaný uživatel v {call}", + "Reminder: {guest} (guest) in {call}" : "Připomínka: {guest} (guest) v {call}", + "Reminder: Guest in {call}" : "Připomínka: host v {call}", + "{user} reacted with {reaction}" : "{user} reagoval(a) s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagoval(a) s {reaction} v {call}", + "Deleted user reacted with {reaction} in {call}" : "Smazaný uživatel reagoval {reaction} v {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (host) reagoval(a) {reaction} v {call}", + "Guest reacted with {reaction} in {call}" : "Host reagoval {reaction} v {call}", + "{user} in {call}" : "{user} v {call}", + "Deleted user in {call}" : "Smazaný uživatel v {call}", + "{guest} (guest) in {call}" : "{guest} (host) v {call}", + "Guest in {call}" : "Host v {call}", + "{user} sent you a private message" : "{user} vám poslal(a) soukromou zprávu", + "{user} sent a message in conversation {call}" : "{user} poslal(a) zprávu v konverzaci {call}", + "A deleted user sent a message in conversation {call}" : "Smazaný uživatel poslal zprávu v konverzaci {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (host) poslal(a) zprávu v konverzaci {call}", + "A guest sent a message in conversation {call}" : "Host poslal zprávu v konverzaci {call}", + "{user} replied to your private message" : "{user} odpověděl(a) na vaši soukromou zprávu", + "{user} replied to your message in conversation {call}" : "{user} odpověděl(a) na vaši zprávu v konverzaci {call}", + "A deleted user replied to your message in conversation {call}" : "Smazaný/á uživatel(ka) odpověděl(a) na vaši zprávu v konverzaci {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (host) odpověděl(a) na vaši zprávu v konverzaci {call}", + "A guest replied to your message in conversation {call}" : "Host odpověděl(a) na vaši zprávu v konverzaci {call}", + "Reminder: You in private conversation {call}" : "Připomínka: Vy v soukromé konverzaci {call}", + "Reminder: A deleted user in private conversation {call}" : "Připomínka: smazaný uživatel v soukromé konverzaci {call}", + "Reminder: {user} in private conversation" : "Připomínka: {user} v soukromé konverzaci", + "Reminder: You in conversation {call}" : "Připomínka: Vy v konverzaci {call}", + "Reminder: {user} in conversation {call}" : "Připomínka: {user} v konverzaci {call}", + "Reminder: A deleted user in conversation {call}" : "Připomínka: smazaný uživatel v konverzaci {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Připomínka: {guest} (host) v konverzaci {call}", + "Reminder: A guest in conversation {call}" : "Připomínka: host v konverzaci {call}", + "{user} reacted with {reaction} to your private message" : "{user} zareagoval(a) s {reaction} na vaši soukromou zprávu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Smazaný uživatel zareagoval s {reaction} na vaši zprávu v konverzaci {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (host) zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Host zareagoval(a) s {reaction} na vaši zprávu v konverzaci {call}", + "{user} mentioned you in a private conversation" : "{user} vás zmínil(a) v soukromé konverzaci", + "{user} mentioned group {group} in conversation {call}" : "{user} zmínil(a) skupinu {group} v konverzaci {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} zmínil(a) tým {team} v konverzaci {call}", + "{user} mentioned everyone in conversation {call}" : "{user} zmínil(a) všechny v konverzaci {call}", + "{user} mentioned you in conversation {call}" : "{user} vás zmínil(a) v konverzaci {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Smazaný uživatel zmínil skupinu {group} v konverzaci {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Smazaný uživatel zmínil tým {team} v konverzaci {call}", + "A deleted user mentioned everyone in conversation {call}" : "Smazaný uživatel zmínil všechny v konverzaci {call}", + "A deleted user mentioned you in conversation {call}" : "Smazaný uživatel vás zmínil v konverzaci {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{host} (host) zmínil(a) skupinu {group} v konverzaci {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (host) zmínil(a) tým {team} v konverzaci {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{host} (host) zmínil(a) všechny v konverzaci {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (host) vás zmínil(a) v konverzaci {call}", + "A guest mentioned group {group} in conversation {call}" : "Host zmínil skupinu {group} v konverzaci {call}", + "A guest mentioned team {team} in conversation {call}" : "Host zmínil tým {team} v konverzaci {call}", + "A guest mentioned everyone in conversation {call}" : "Host zmínil všechny v konverzaci {call}", + "A guest mentioned you in conversation {call}" : "Host vás zmínil v konverzaci {call}", + "View message" : "Zobrazit zprávu", + "Dismiss reminder" : "Zahodit připomínku", + "View chat" : "Zobrazit chat", + "{user} invited you to a group conversation: {call}" : "{user} vás pozval(a) do skupinové konverzace: {call}", + "Join call" : "Připojit se k hovoru", + "Answer call" : "Přijmout hovor", + "{user} would like to talk with you" : "{user} si s vámi přeje mluvit", + "Call back" : "Zavolat zpátky", + "You missed a call from {user}" : "Zmeškali jste hovor od {user}", + "Accept call" : "Přijmout vše", + "Incoming phone call from {call}" : "Příchozí hovor od {call}", + "You missed a phone call from {call}" : "Zmeškali jste hovor od {call}", + "A group call has started in {call}" : "V {call} byl zahájen skupinový hovor", + "You missed a group call in {call}" : "Zmeškali jste skupinový hovor v {call}", + "{email} is requesting the password to access {file}" : "{email} požádal(a) o heslo pro přístup k {file}", + "{email} tried to request the password to access {file}" : "{email} se pokusil(a) vyžádat si heslo pro přístup k {file}", + "Someone is requesting the password to access {file}" : "Někdo si žádá o heslo pro přístup k {file}", + "Someone tried to request the password to access {file}" : "Někdo se pokusil(a) vyžádat si heslo pro přístup k {file}", + "Open settings" : "Otevřít nastavení", + "Hosted signaling server added" : "Hostovaný signální server přidán", + "The hosted signaling server is now configured and will be used." : "Nyní je nastavený hostovaný signalizační server a bude použit.", + "Hosted signaling server removed" : "Hostovaný signální server odebrán", + "The hosted signaling server was removed and will not be used anymore." : "Hostovaný signální server byl odebrán a už nebude používán.", + "Hosted signaling server changed" : "Hostovaný signální server změněn", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Stav účtu na hostovaném signalizačním serveru se změnil z „{oldstatus}“ na „{newstatus}“.", + "pending" : "čeká", + "active" : "aktivní", + "expired" : "platnost skončila", + "blocked" : "blokováno", + "error" : "chyba", + "The certificate of {host} expires in {days} days" : "Certifikátu {host} skončí platnost za {days} dny/ů", + "The certificate of {host} expired" : "Platnost certifikátu {host} skončila", + "Contact via Talk" : "Kontakt přes Talk", + "Open Talk" : "Otevřít Talk", + "Default" : "Výchozí", + "Presentation" : "Prezentace", + "Voice room" : "Hlasová místnost", + "Webinar" : "Webinář", + "Conversations" : "Konverzace", + "Messages in current conversation" : "Zprávy ve stávající konverzaci", + "{user}" : "{user}", + "Messages" : "Zprávy", + "{user} in {conversation}" : "{user} v {conversation}", + "Messages in other conversations" : "Zprávy v ostatních konverzacích", + "One-to-one rooms always need to show the other users avatar" : "Místnosti typu s jen dvěma komunikujícími vždy vyžadují zobrazení profilového obrázku druhého uživatele", + "Invalid emoji character" : "Neplatný znak emotikony", + "Invalid background color" : "Neplatná barva pozadí", + "Avatar image is not square" : "Profilový obrázek není čtvercový", + "Room {number}" : "Místnost {number}", + "Other" : "Ostatní", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepodařilo se zažádat o zkušební období, protože příslušný server není dosažitelný. Prosím zkuste to znovu později.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Je problém s ověřováním této instance. Možná není dosažitelná zvenčí, což je třeba pro ověření její URL adresy.", + "Something unexpected happened." : "Stalo se něco neočekávaného.", + "The URL is invalid." : "URL adresa není platná.", + "An HTTPS URL is required." : "Je zapotřebí HTTPS URL.", + "The email address is invalid." : "E-mailová adresa není platná.", + "The language is invalid." : "Jazyk není platný.", + "The country is invalid." : "Země není platná.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Je problém se žádostí o zkušební období. Podrobnosti naleznete v záznamech událostí.", + "Too many requests are send from your servers address. Please try again later." : "Z adresy vašeho serveru bylo odesláno příliš mnoho požadavků. Prosím zkuste to znovu později.", + "There is already a trial registered for this Nextcloud instance." : "Pro tuto instanci Nextcloud už je zaregistrováno zkušební období.", + "Something unexpected happened. Please try again later." : "Stalo se něco neočekávaného. Prosím zkuste to znovu později.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepodařilo se zažádat o zkušební období, protože příslušný server se zachoval chybně. Prosím zkuste to znovu později.", + "Trial requested but failed to get account information. Please check back later." : "O zkušební období zažádáno, ale nepodařilo se získat informace o účtu. Prosím vraťte se sem později.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Je problém s ověřením tohoto požadavku. Možné není dosažitelné zvenčí, což je třeba pro ověření jeho URL adresy.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepodařilo se získat informace o účtu, protože server pro vyzkoušení si se zachoval chybně. Prosím vraťte se sem později.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Je problém se získáním informací o účtu. Další informace naleznete v záznamech událostí.", + "There is no such account registered." : "Není zde zaregistrován žádný takový účet.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepodařilo se získat informace o účtu, protože server pro vyzkoušení si není dosažitelný. Prosím vraťte se sem později.", + "Deleting the hosted signaling server account failed. Please check back later." : "Smazání účtu hostovaného signalizačního serveru se nezdařilo. Prosím vraťte se sem později.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Účet se nepodařilo smazat protože server pro vyzkoušení si se zachoval chybně. Prosím vraťte se sem později.", + "There is a problem with deleting the account. Please check your logs for further information." : "Je problém se smazáním účtu. Další informace naleznete v záznamech událostí.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresy vašeho serveru bylo odesláno příliš mnoho požadavků. Prosím zkuste to znovu později.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Účet se nepodařilo smazat, protože server pro vyzkoušení si není dosažitelný. Prosím vraťte se sem znovu později.", + "Note to self" : "Poznámka pro mne", + "A place for your private notes, thoughts and ideas" : "Místo pro vaše soukromé poznámky, myšlenky a nápady", + "Transcript is AI generated and may contain mistakes" : "Přepis je vytvářen AI a může obsahovat chyby", + "Summary is AI generated and may contain mistakes" : "Shrnutí je vytvářeno AI a může obsahovat chyby", + "Let's get started!" : "Začněme!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je bezpečná komunikační platforma, která je plně integrovaná do ekosystému Nextcloud.\n\n#### Klíčové vymoženosti Nextcloud Talk:\n\n* Chatování v místnostech jeden na jednoho i ve skupinových chatech\n* Umožňuje uskutečňovat hlasové hovory i video hovory \n* Můžete jednoduše posílat soubory a využívat integrace s dalšími aplikacemi Nextcloud\n* Nabízí možnosti přizpůsobení konverzací, jejich moderování a správu soukromí\n* Je možné ho používat na Webu, počítači i mobilu (s operačním systémem iOS nebo Android)\n* Skutečně soukromou a zabezpečenou komunikaci\n\nZjistěte více v [dokumentaci pro uživatele](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Vítejte v Nextcloud Talk\n\nNextcloud Talk je soukromá a vybavená aplikace pro posílání zpráv, napojená na Nextcloud server. Pište si v soukromých nebo skupinových konverzacích, spolupracujte prostřednictvím hlasových a video hovorů, uspořádávejte webináře a události, přizpůsobujte si své konverzace a mnoho dalšího.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Využívejte možností formátování a vytvářejte líbivé zprávy\n\nV Nextcloud Talk můžete pro formátování zpráv využívat syntaxu Markdown. Například můžete text **ztučnit**, napsat ho *kurzívou* nebo `ho zvýrazňovat jako programový kód`. Dokonce můžete vytvářet tabulky, nadpisy a záhlaví.\n\nPotřebujete opravit překlep nebo změnit formátování? Upravte zprávu ťuknutím na tlačítko \"Upravit zprávu\" v podmenu zprávy.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Vkládejte přílohy a odkazy\n\nPřipojujte soubory z Nextcloud Hubu pomocí tlačítka \"+\". Sdílejte soubory a položky z dalších aplikací Nextcloud. Některé aplikace podporují i interaktivní widgety, například aplikace Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Nechte rozhovory téct proudem: zmiňujte uživatele a reagujte na zprávy\n\nMůžete zmínit všechny účastníky konverzace použitím %s - anebo zmiňte jen specifické osoby tak, že napíšete \"@\" a jejich jméno dopíšete nebo ho vyberete ze seznamu.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Na zprávy je možné odpovídat, přeposílat je do dalších chatů nebo kopírovat jejich obsah.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Buďte rychlejší se Smart Picker\n\nJen napište \"/\" nebo běžte do nabídky \"+\" odkud otevřete Smart Picker díky kterému můžete ke svým zprávám přikládat nepřeberné množství obsahu. Smart Picker také můžete nakonfigurovat tak, aby byl schopný připojovat položky z aplikací Nextcloud, GIFy, umístění na mapách, obsah vygenerovaný AI a mnoho dalšího.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Spravujte nastavení konverzací\n\nV menu konverzace můžete přistupovat k mnoha nastavením, pomocí kterých můžete chaty spravovat, například můžete:\n* Upravovat informace o konverzaci a její popis\n* Spravovat oznámení\n* Vynucovat moderační pravidla\n* Spravovat přístup a zabezpečení\n* Přidávat roboty\n* a je tam toho ještě víc!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Spojené Arabské Emiráty", + "Afghanistan" : "Afgánistán", + "Antigua and Barbuda" : "Antigua a Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánie", + "Armenia" : "Arménie", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Americká Samoa", + "Austria" : "Rakousko", + "Australia" : "Austrálie", + "Aruba" : "Aruba", + "Åland Islands" : "Alandy", + "Azerbaijan" : "Ázerbájdžán", + "Bosnia and Herzegovina" : "Bosna a Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladéš", + "Belgium" : "Belgie", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulharsko", + "Bahrain" : "Bahrajn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Svatý Bartoloměj", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunej", + "Bolivia, Plurinational State of" : "Bolívie", + "Bonaire, Sint Eustatius and Saba" : "Karibské Nizozemsko", + "Brazil" : "Brazílie", + "Bahamas" : "Bahamy", + "Bhutan" : "Bhútán", + "Bouvet Island" : "Bouvetův ostrov", + "Botswana" : "Botswana", + "Belarus" : "Bělorusko", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosové ostrovy", + "Congo, the Democratic Republic of the" : "Kongo", + "Central African Republic" : "Středoafrická republika", + "Congo" : "Kongo", + "Switzerland" : "Švýcarsko", + "Côte d'Ivoire" : "Pobřeží slonoviny", + "Cook Islands" : "Cookovy ostrovy", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Čína", + "Colombia" : "Kolumbie", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapverdy", + "Curaçao" : "Curaçao", + "Christmas Island" : "Vánoční ostrov", + "Cyprus" : "Kypr", + "Czechia" : "Česko", + "Germany" : "Německo", + "Djibouti" : "Džibutsko", + "Denmark" : "Dánsko", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikánská republika", + "Algeria" : "Alžír", + "Ecuador" : "Ekvádor", + "Estonia" : "Estonsko", + "Egypt" : "Egypt", + "Western Sahara" : "Západní Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Španělsko", + "Ethiopia" : "Etiopie", + "Finland" : "Finsko", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandské ostrovy (Malvíny)", + "Micronesia, Federated States of" : "Mikronésie", + "Faroe Islands" : "Faerské ostrovy", + "France" : "Francie", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Spojené království Velké Británie a Severního Irska", + "Grenada" : "Grenada", + "Georgia" : "Gruzie", + "French Guiana" : "Francouzská Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grónsko", + "Gambia" : "Gambie", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Rovníková Guinea", + "Greece" : "Řecko", + "South Georgia and the South Sandwich Islands" : "Jižní Georgie a Jižní Sandwichovy ostrovy", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heardův ostrov a McDonaldovy ostrovy", + "Honduras" : "Honduras", + "Croatia" : "Chorvatsko", + "Haiti" : "Haiti", + "Hungary" : "Maďarsko", + "Indonesia" : "Indonézie", + "Ireland" : "Irsko", + "Israel" : "Izrael", + "Isle of Man" : "Man", + "India" : "Indie", + "British Indian Ocean Territory" : "Britské indickooceánské území", + "Iraq" : "Irák", + "Iran, Islamic Republic of" : "Írán", + "Iceland" : "Island", + "Italy" : "Itálie", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordánsko", + "Japan" : "Japonsko", + "Kenya" : "Keňa", + "Kyrgyzstan" : "Kyrgyzstán", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Svatý Kryštof a Nevis", + "Korea, Democratic People's Republic of" : "Severní Korea (KLDR)", + "Korea, Republic of" : "Jižní Korea", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanské ostrovy", + "Kazakhstan" : "Kazachstán", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Svatá Lucie", + "Liechtenstein" : "Lichnštejnsko", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libérie", + "Lesotho" : "Lesotho", + "Lithuania" : "Litva", + "Luxembourg" : "Lucembursko", + "Latvia" : "Lotyšsko", + "Libya" : "Libye", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldávie", + "Montenegro" : "Černá Hora", + "Saint Martin (French part)" : "Svatý Martin (francouzská část)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovy ostrovy", + "North Macedonia" : "Severní Makedonie", + "Mali" : "Mali", + "Myanmar" : "Barma", + "Mongolia" : "Mongolsko", + "Macao" : "Macao", + "Northern Mariana Islands" : "Severní Mariany", + "Martinique" : "Martinik", + "Mauritania" : "Mauritánie", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurícius", + "Maldives" : "Maledivy", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malajsie", + "Mozambique" : "Mozambik", + "Namibia" : "Nambie", + "New Caledonia" : "Nová Kaledonie", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk", + "Nigeria" : "Nigérie", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Nizozemí", + "Norway" : "Norsko", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nový Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francouzská Polynésie", + "Papua New Guinea" : "Papua-Nová Guinea", + "Philippines" : "Filipíny", + "Pakistan" : "Pakistán", + "Poland" : "Polsko", + "Saint Pierre and Miquelon" : "Saint-Pierre a Miquelon", + "Pitcairn" : "Pitcairnovy ostrovy", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugalsko", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunsko", + "Serbia" : "Srbsko", + "Russian Federation" : "Ruská federace", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudská Arábie", + "Solomon Islands" : "Šalamounovy ostrovy", + "Seychelles" : "Seychely", + "Sudan" : "Súdán", + "Sweden" : "Švédsko", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Svatá Helena", + "Slovenia" : "Slovinsko", + "Svalbard and Jan Mayen" : "Špicberky a Jan Mayen", + "Slovakia" : "Slovensko", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somálsko", + "Suriname" : "Surinam", + "South Sudan" : "Jižní Súdán", + "Sao Tome and Principe" : "Svatý Tomáš a Princův ostrov", + "El Salvador" : "Salvador", + "Sint Maarten (Dutch part)" : "Svatý Martin (nizozemská část)", + "Syrian Arab Republic" : "Sýrie", + "Eswatini" : "Svazijsko", + "Turks and Caicos Islands" : "Turks a Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francouzská jižní a antarktická území", + "Togo" : "Togo", + "Thailand" : "Thajsko", + "Tajikistan" : "Tádžikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Východní Timor", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Tunisko", + "Tonga" : "Tonga", + "Turkey" : "Turecko", + "Trinidad and Tobago" : "Trinidad a Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tchaj-wan (provincie)", + "Tanzania, United Republic of" : "Tanzanie", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Menší odlehlé ostrovy Spojených států amerických", + "United States of America" : "Spojené státy americké", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Svatý stolec", + "Saint Vincent and the Grenadines" : "Svatý Vincenc a Grenadiny", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Britské Panenské ostrovy", + "Virgin Islands, U.S." : "Americké Panenské ostrovy", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis a Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Jihoafrická republika", + "Zambia" : "Zambie", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmazání pozadí", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepodařilo se zkontrolovat podporu načítání WASM. Zkontrolujte ručně, zda vámi využívaný webový server poskytuje .wasm` soubory.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Váš webový server není správně nastaven k doručování `.wasm` souborů. To je obvykle chyba v nastavení Nginx. Pro rozmazávání pozadí potřebuje úpravu také k doručování `.wasm` souborů. Porovnejte své nastavení Nginx s doporučeným nastavením v naší dokumentaci.", + "Talk configuration values" : "Hodnoty nastavení Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Vynucování omezení délky hovoru je podporováno pouze při používání systémového plánovače cron. Zapněte jeho používání nebo odeberte nastavení `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Nízké hodnoty `max_call_duration` (nyní nastaveno na %d) nejsou vynutitelné z důvodu technických omezení. Úloha na pozadí je spouštěna pouze co 5 minut, takže použijte na své vlastní riziko.", + "Federation" : "Federování", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Pokud je zapnuté federování v Talk, je vřele doporučováno nastavit „memcache.locking“.", + "High-performance backend" : "Podpůrná vrstva pro vysoký výkon", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Není nastavená žádná podpůrná vrstva pro vysoký výkon. Provozování Nextcloud Talk bez ní škáluje pouze pro velmi malé hovory (nejvýše 2-3 účastníci). Nastavte podpůrnou vrstvu pro vysoký výkon a zajistěte tak, že hovory s vícero účastníky budou hladce fungovat.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Provozování režimu „conversation_cluster“ podpůrné vrstvy pro vysoký výkon je zastaralé a v nadcházející verzi už nebude podporováno. Podpůrná vrstva dnes už obsahuje skutečné klastrování, které by mělo být použito namísto toho.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definování vícero podpůrných vrstev pro vysoký výkon je zastaralé a v nadcházející verzi už nebude podporováno. Namísto toho by rozdělování zátěže mělo být nastaveno ve spojení se signalizačními servery v clusteru a ten pak zadán v nastavení Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Uložený veřejný klíč pro použitý algoritmus %1$s neodpovídá uloženému soukromému klíči. Opravte tuto chybu spuštěním %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "Podpůrná vrstva pro vysoký výkon není správně nastavená. Podrobnosti obdržíte spuštěním %s.", + "High-performance backend not configured correctly" : "Podpůrná vrstva pro vysoký výkon není správně nastavená", + "Error: Cannot connect to server" : "Chyba: K serveru se nedaří připojit", + "Error: Server did not respond with proper JSON" : "Chyba: Odpověď ze serveru nemá platný JSON formát", + "Error: Certificate expired" : "Chyba: platnost certifikátu skončila", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: systémové časy Nextcloud serveru a serveru s podpůrnou vrstvou pro vysoký výkon se liší. Ověřte, že oba servery jsou napojeny na stejný časový server nebo jejich čas ručně sesynchronizujte.", + "Could not get version" : "Nedaří se získat verzi", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Chyba: Provozovaná verze: {version}; Server je třeba aktualizovat, aby byl kompatibilní s touto verzí Talk", + "Error: Server responded with: {error}" : "Chyba: Odpověď ze serveru: {error}", + "Error: Unknown error occurred" : "Chyba: Došlo k neznámé chybě", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Varování: provozovaná verze: {version}; Server nepodporuje všechny funkce této verze Talk – chybějící funkce: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Pokud je Nextcloud Talk provozován s podpůrnou vrstvou pro vysoký výkon, je vřele doporučováno nastavit mezipaměť v operační paměti.", + "Client Push" : "Služba klient Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Služba klient Push je nainstalovaná a bude zlepšovat včasnost doručení notifikací v Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} není nainstalované. To může vést k prodlevě doručování notifikací z Talk.", + "Recording backend" : "Podpůrná vrstva pro nahrávání", + "Using the recording backend requires a High-performance backend." : "Aby bylo možné používat podpůrnou vrstvu pro pořizování nahrávek, je třeba mít vrstvu pro vysoký výkon.", + "No recording backend configured" : "Nenastavena žádná podpůrná vrstva pro pořizování nahrávek", + "SIP configuration" : "Nastavení SIP", + "Using the SIP functionality requires a High-performance backend." : "Aby bylo možné používat funkci pro SIP, je třeba mít vrstvu pro vysoký výkon.", + "No SIP backend configured" : "Nenastavena žádná podpůrná vrstva pro SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Neplatné datum, je třeba aby formát byl RRRR-MM-DD", + "Conversation not found" : "Konverzace nenalezena", + "Path is already shared with this conversation" : "Popis umístění už je touto konverzací sdílen", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video a audiokonference používající WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video a audio konference využívající WebRTC\n\n* 💬 **Chat** Nextcloud Talk je vybavený jednoduchým textovým chatem, který Vám umožňuje sdílet nebo nahrávat soubory z Nextcloud Souborů nebo přímo ze zařízení a zmiňovat ostatní účastníky chatu.\n* 👥 **Soukromé, skupinové i veřejné a heslem chráněné hovory!** Pozvěte někoho, třeba celou skupinu lidí nebo pošlete veřejně přístupný odkaz jako pozvánku pro připojení k hovoru.\n* 🌐 **Federované chaty** Chatujte s ostatními uživateli Nextcloud na jejich serverech.\n* 💻 **Sdílení obrazovky!** Sdílejte to co vidíte na své obrazovce s ostatními účastníky hovoru.\n* 🚀 **Integrace s dalšími aplikacemi Nextcloud** například se Soubory, Kalendářem, Uživatelským stavem, Nástěnkou, Flow, Mapami, Smart Pickerem, Kontakty, Deck a mnoha dalšími.\n* 🌉 **Synchronizujte s jinými poskytovateli chatu** [Matterbridge](https://github.com/42wim/matterbridge/) je do Talk integrovaný, což znamená že můžete jednoduše synchronizovat mnoho dalších chatovacích řešení do Nextcloud Talk a naopak.", + "Leave call" : "Opustit hovor", + "Navigating away from the page will leave the call in {conversation}" : "Opuštění této stránky nepřeruší hovor v {conversation}", + "Stay in call" : "Neopustit hovor", + "Error occurred when getting the conversation information" : "Při získávání informací o konverzaci došlo k chybě", + "Discuss this file" : "Diskutujte o tomto souboru", + "Share this file with others to discuss it" : "Sdílet tento soubor s ostatními k diskuzi", + "Share this file" : "Sdílet tento soubor", + "Join conversation" : "Vstupte do konverzace", + "This conversation is password-protected." : "Tato konverzace je chráněna heslem.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Bylo rozpoznáno několik neplatných pokusů o zadání hesla z vaší IP adresy. Další pokus bude proto možný až za 30 sekund.", + "The password is wrong. Try again." : "Heslo není správné. Zkuste to znovu.", + "Password" : "Heslo", + "Submit" : "Odeslat", + "Error requesting the password." : "Chyba při požadavku na heslo.", + "Request password" : "Vyžadovat heslo", + "This conversation has ended" : "Tato konverzace skončila", + "Error occurred when joining the conversation" : "Při připojování se ke konverzaci došlo k chybě", + "Close Talk sidebar" : "Zavřít postranní panel Talk", + "Open Talk sidebar" : "Otevřít postranní panel Talk", + "Everyone" : "Všichni", + "Users and moderators" : "Uživatelé a moderátoři", + "Moderators only" : "Pouze moderátoři", + "Disable calls" : "Neumožnit hovory", + "Save changes" : "Uložit změny", + "Saving …" : "Ukládání …", + "Saved!" : "Uloženo", + "Limit to groups" : "Omezit na skupiny", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Když je vybrána alespoň jedna skupina, pak se konverzace mohou účastnit pouze lidé z uvedených skupin.", + "Guests can still join public conversations." : "Hosté se pořád mohou připojit k veřejným konverzacím.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Uživatelé, kteří přestanou Talk používat budou pořád uvedeni jako účastníci v jejich předchozích konverzacích a také jejich zprávy budou zachovány.", + "Limit using Talk" : "Omezit používání Talk", + "Limit creating a public and group conversation" : "Omezit vytváření veřejných a skupinových konverzací", + "Limit creating conversations" : "Omezit vytváření konverzací", + "Limit starting a call" : "Omezit zahájení hovoru", + "Limit starting calls" : "Omezit zahajování hovorů", + "When a call has started, everyone with access to the conversation can join the call." : "Poté, co konverzace započne, kdokoli s přístupem ke konverzaci se může připojit k hovoru.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tomto serveru jsou nainstalovány následující automaty. V dokumentaci naleznete podrobnosti ohledně toho, jak {linkstart1}vytvořit svůj vlastní automat{linkend} nebo {linkstart2}seznam automatů{linkend} pro zapnutí na vašem serveru.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tomto serveru nejsou nainstalovány žádné automaty. V dokumentaci naleznete podrobnosti ohledně toho, jak {linkstart1}vytvořit svůj vlastní automat{linkend} nebo {linkstart2}seznam automatů{linkend} pro zapnutí na vašem serveru.", + "Description is not provided" : "Popis není poskytnut", + "Locked for moderators" : "Uzamčeno jen pro moderátory", + "Enabled" : "Zapnuto", + "Disabled" : "Vypnuto", + "Bots settings" : "Nastavení ohledně automatů", + "State" : "Stav", + "Name" : "Jméno", + "Last error" : "Poslední chyba", + "Total errors count" : "Celkový počet chyb", + "Find more bots" : "Najít více automatů", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Důvěryhodné servery je možné nastavit na {linkstart}Stránce nastavení sdílení{linkend}.", + "Beta" : "Vývojové", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federované chaty a volání už fungují. Obsluha příloh přijde v budoucí verzi.", + "Enable Federation in Talk app" : "Zapnout federování v aplikaci Talk", + "Permissions" : "Oprávnění", + "Allow users to be invited to federated conversations" : "Umožnit aby uživatelé byli zváni do federovaných konverzací", + "Allow users to invite federated users into conversation" : "Umožnit uživatelům zvát federované uživatele do konverzací", + "Only allow to federate with trusted servers" : "Umožnit federování pouze s důvěryhodnými servery", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Když je vybrána alespoň jedna skupina, pak zvát federované uživatele do konverzace mohou pouze lidé z uvedených skupin.", + "Groups allowed to invite federated users" : "Skupiny které mohou zvát federované uživatele", + "Select groups …" : "Vybrat skupiny …", + "All messages" : "Všechny zprávy", + "@-mentions only" : "Pouze zmínky ve stylu @jméno", + "Off" : "Vypnuto", + "General settings" : "Obecná nastavení", + "Default notification settings" : "Výchozí nastavení upozorňování", + "Default group notification" : "Výchozí upozornění pro skupinu", + "Default group notification for new groups" : "Výchozí upozorňování pro nové skupiny", + "Integration into other apps" : "Napojení na další aplikace", + "Allow conversations on files" : "Povolit konverzace u souborů", + "Allow conversations on public shares for files" : "Povolit konverzaci u veřejných souborů pro sdílení", + "End-to-end encrypted calls" : "Hovory šifrované mezi koncovými body", + "Enable encryption" : "Šifrovat", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Hovory šifrované mezi koncovými body s nastaveným mostem pro SIP vyžadují novější verzi podpůrné vrstvy pro vysoký výkon a mostu pro SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilní klienti v tuto chvíli nepodporují hovory šifrované mezi koncovými body.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kliknutím na výše uvedené tlačítko budou údaje z formuláře odeslány na servery společnosti Struktur AG. Podrobnosti naleznete na {linkstart}spreed.eu{linkend}.", + "Pending" : "Čeká", + "Error" : "Chyba", + "Blocked" : "Blokovaný", + "Active" : "Aktivní", + "Expired" : "Platnost skončila", + "Never" : "Nikdy", + "The trial could not be requested. Please try again later." : "Nepodařilo se zažádat o zkušební období. Prosím zkuste to znovu později.", + "The account could not be deleted. Please try again later." : "Účet se nepodařilo smazat. Prosím zkuste to znovu později.", + "Hosted High-performance backend" : "Hostovaná podpůrná vrstva pro vysoký výkon", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Náš partner, společnost Struktur AG poskytuje službu, u které je možné si zažádat o hostovaný signalizační server. Stačí pouze vyplnit níže uvedený formulář a vaše instance Nextcloud provede žádost Jakmile je pro vás vytvořen server, přihlašovací údaje budou vyplněny automaticky. Toto přepíše existující nastavení pro signalizační server.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Pokud váš účet pro vysoce výkonnou podpůrnou vrstvu obsahuje funkci STUN a/nebo TURN, nastavení budou příslušně zaktualizována.", + "URL of this Nextcloud instance" : "URL adresa této instance Nextcloud", + "Full name of the user requesting the trial" : "Celé jméno uživatele, žádajícího o zkušební období", + "Email of the user" : "E-mail uživatele", + "Language" : "Jazyk", + "Country" : "Země", + "Request signaling server trial" : "Požádat o zkušební období signalizačního serveru", + "You can see the current status of your hosted signaling server in the following table." : "Stávající stav vašeho hostovaného signálního serveru naleznete v následující tabulce.", + "Status" : "Stav", + "Created at" : "Vytvořeno", + "Expires at" : "Platnost končí", + "Limits" : "Omezení", + "STUN included" : "STUN obsaženo", + "Yes" : "Ano", + "No" : "Ne", + "TURN included" : "TURN obsaženo", + "Delete the signaling server account" : "Smazat účet na signalizačním serveru", + "_%n user_::_%n users_" : ["%n uživatel","%n uživatelé","%n uživatelů","%n uživatelé"], + "Installed version: {version}" : "Nainstalovaná verze: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Pro propojení Nextcloud Talk s některými ostatními službami je možné nainstalovat Matterbridge, podrobnosti viz {linkstart1}stránka na GitHub{linkend}. Stažení a instalace aplikace může chvíli trvat. V případě překročení časového limitu ji prosím nainstalujte ručně z {linkstart2}Nextcloud katalogu aplikací{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Spustitelný soubor nemá správná oprávnění. Ověřte, že spustitelný soubor s Matterbridge je vlastněn správným uživatelem a je spustitelný. Je k nalezení v „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "Spustitelný soubor s matterbridge nebyl nalezen nebo ho nebylo možné spustit.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Je také možné nastavit popis umístění spustitelného souboru s Matterbridge ručně a to v nastavení. Podrobnosti naleznete v {linkstart}dokumentaci k napojení Matterbridge{linkend}.", + "Downloading …" : "Stahování …", + "Install Talk Matterbridge" : "Nainstalovat Matterbridge pro Talk", + "An error occurred while installing the Matterbridge app" : "Došlo k chybě při instalaci aplikace Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Při instalaci Matterbridge pro Talk došlo k chybě. Prosím nainstalujte ho ručně", + "Failed to execute Matterbridge binary." : "Nepodařilo se spustit spustitelný soubor od Matterbridge.", + "Matterbridge integration" : "Napojení na Matterbridge", + "Enable Matterbridge integration" : "Zapnout napojení na Matterbridge", + "Status: Checking connection" : "Stav: Kontrola připojení", + "OK: Running version: {version}" : "OK: Spuštěná verze: {version}", + "Error: Server seems to be a Signaling server" : "Chyba: zdá se, že server je signalizujícím serverem", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: systémové časy Nextcloud serveru a serveru s podpůrnou vrstvou pro pořizování nahrávek se liší. Ověřte, že oba servery jsou napojeny na stejný časový server nebo jejich čas ručně sesynchronizujte.", + "Recording backend URL" : "URL podpůrné vrstvy pro nahrávání", + "Validate SSL certificate" : "Ověřovat si SSL certifikát", + "Delete this server" : "Smazat tento server", + "Test this server" : "Vyzkoušet tento server", + "Disabled for all calls" : "Vypnuto pro všechna volání", + "Enabled for all calls" : "Zapnuto pro všechna volání", + "Configurable on conversation level by moderators" : "Nastavitelné moderátory v rámci konverzace", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP nastavení „upload_max_filesize“ nebo „post_max_size“ umožní nahrání souborů velkých nejvýše {maxUpload}.", + "Recording backend settings saved" : "Nastavení pro podpůrnou vrstvu pro nahrávání uložena", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderátorům bude umožněno zapnout souhlas v rámci konverzace. Souhlas s pořízením nahrávky bude vyžadován od každého z účastníků před každým připojením k hovoru v této konverzaci.", + "The consent to be recorded will be required for each participant before joining every call." : "Souhlas s nahráváním bude vyžadován od každého z účastníků před každým připojením k hovoru v této konverzaci.", + "The consent to be recorded is not required." : "Souhlas s nahráváním není vyžadován.", + "Recording backend configuration is only possible with a High-performance backend." : "Nastavování podpůrné vrstvy pro pořizování nahrávek je možné pouze při použití podpůrné vrstvy pro vysoký výkon.", + "Add a new recording backend server" : "Přidat nový server podpůrné vrstvy pro nahrávávání", + "Shared secret" : "Předsdílené heslo", + "Recording consent" : "Souhlas s nahráváním", + "Recording transcription" : "Přepis nahrávky", + "Automatically transcribe call recordings with a transcription provider" : "Automaticky přepsat nahrávky hovorů prostřednictvím poskytovatele přepisů", + "Automatically summarize call recordings with transcription and summary providers" : "Automaticky vytvářet souhrn nahrávek hovorů prostřednictvím poskytovatele přepisů a souhrnů", + "SIP configuration saved!" : "Nastavení pro SIP nastaveno!", + "SIP configuration is only possible with a High-performance backend." : "Nastavení SIP je možné pouze při použití podpůrné vrstvy pro vysoký výkon.", + "Enable SIP Dial-out option" : "Zapnout SIP volání odsud", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Aby podporoval SIP volání odsud, je třeba aktualizovat signalizační server.", + "Do not show SIP Dial-out caller number" : "Nezobrazovat číslo volajícího SIP volání ven", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymní čísla by se měla příjemci volání zobrazovat jako „neznámé“ nebo „skryté číslo“", + "Dial-out number" : "Telefonní číslo, ze kterého zavolat", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Číslo ve formátu E164 sloužící jako náhradní číslo volajícího pro odchozí volání", + "Dial-out prefix" : "Předpona, ze které zavolat", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Předpona pro nastavené číslo uživatele pro odchozí volání (výchozí je `+`)", + "Restrict SIP configuration" : "Omezit nastavení SIP", + "Enable SIP configuration" : "Zapnout nastavení SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "SIP mohou zapnout pouze členové následujících skupin a to jen v konverzacích, které moderují", + "Phone number (Country)" : "Telefonní číslo (země)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Tato informace je odeslána ve zvacích e-mailech a také zobrazována v postranním panelu všem účastníkům.", + "Nextcloud base URL" : "Základ URL Nextcloud", + "Talk Backend URL" : "URL podpůrné vrstvy Talk", + "WebSocket URL" : "URL WebSocket", + "Available features" : "Funkce k dispozici", + "Error: Websocket connection failed" : "Chyba: Websocket připojení se nezdařilo", + "Error code" : "Kód chyby", + "Error message" : "Chybové hlášení", + "Error: Websocket connection failed. Check browser console" : "Chyba: Websocket připojení se nezdařilo. Podívejte se do konzole prohlížeče", + "High-performance backend URL" : "URL adresa podpůrné vrstvy pro vysoký výkon", + "Missing High-performance backend warning hidden" : "Varování o chybějící podpůrné vrstvě pro vysoký výkon skryto", + "High-performance backend settings saved" : "Nastavení pro podpůrnou vrstvu pro vysoký výkon uložena", + "Nextcloud Talk setup not complete" : "Nastavení Nextcloud Talk nedokončeno", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Mějte na paměti, že při volání s více než 2 účastníky bez podpůrné vrstvy pro vysoký výkon budou účastníci nejspíš pociťovat problémy s konektivitou a vysoké vytížení účastnících se zařízení.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Pro hladké fungování hovorů s vícero účastníky nainstalujte podpůrnou vrstvu pro vysoký výkon.", + "Nextcloud portal" : "Portál Nextcloud", + "Quick installation guide" : "Stručná instalační příručka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Pro hovory a konverzace s vícero účastníky je zapotřebí podpůrné vrstvy pro vysoký výkon. Bez ní všichni účastníci musejí odesílat své vlastní video jednotlivě pro každého z ostatních účastníků, což nejspíš způsobí problémy s konektivitou a vysokým vytížením zařízení účastníků.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Při používání Nextcloud Talk ve spojení s podpůrnou vrstvou pro vysoký výkon, je doporučeno nastavit distribuovanou mezipaměť.", + "Add High-performance backend server" : "Přidat server podpůrné vrstvy pro vysoký výkon", + "Warn about connectivity issues in calls with more than 2 participants" : "Varovat před problémy s konektivitou u volání s více než 2 účastníky", + "STUN server URL" : "URL adresa STUN serveru", + "The server address is invalid" : "Adresa serveru není platná", + "STUN settings saved" : "Nastavení pro STUN uložena", + "STUN servers" : "Servery STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Server STUN je používán ke zjištění veřejné IP adresy účastníků schovaných za směrovačem (router).", + "Add a new STUN server" : "Přidat nový STUN server", + "{schema} scheme must be used with a domain" : "společně s doménou je třeba použít schéma {schema}", + "{option1} and {option2}" : "{option1} a {option2}", + "{option} only" : "Pouze {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN server odpověděl úspěšnými ICE kandidáty", + "Error: No working ICE candidates returned by the TURN server" : "Chyba: TURN server neodpověděl žádnými fungujícími ICE kandidáty", + "Testing whether the TURN server returns ICE candidates" : "Zkoušení zda TURN server odpoví ICE kandidáty", + "TURN server schemes" : "Popis TURN serveru", + "TURN server URL" : "URL adresa TURN serveru", + "TURN server secret" : "Kód pro TURN server", + "TURN server protocols" : "Protokoly TURN serveru", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN server slouží jako proxy pro provoz od účastníků, kteří se nacházejí za bránou firewall. Pokud se jednotliví účastníci nemohou spojit s ostatními, nejspíš je zapotřebí TURN server. Pokyny k nastavení viz {linkstart}tato dokumentace{linkend} .", + "TURN settings saved" : "Nastavení pro TURN uložena", + "TURN servers" : "TURN servery", + "Add a new TURN server" : "Přidat nový TURN server", + "Failed" : "Nezdařilo se", + "OK" : "OK", + "Checking …" : "Kontrola …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Nezdar: WebAssembly je vypnuté nebo nepodporované prohlížečem. Pro provedení kontroly zapněte WebAssembly nebo použijte prohlížeč, který jej podporuje.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Nezdařilo se: webový server nevrátil správně soubory „.wasm“ a „.tflite“. Podívejte se do sekce „Požadavky na systém“ v dokumentaci k Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: server správně vrátil soubory „.wasm“ a „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Zdá se, že nastavení PHP a Apache nejsou slučitelná. Poznamenejme, že PHP je možné použít pouze s modulem MPM_PREFORK a PHP-FPM je možné použít pouze s modulem MPM_EVENT.", + "Web server setup checks" : "Kontroly nastavení webového serveru", + "Files required for virtual background can be loaded" : "Nedaří se načíst soubory, potřebné pro virtuální pozadí", + "Federated user" : "Federovaný uživatel", + "Assign participants to rooms" : "Přiřadit účastníkům místnosti", + "Configure breakout rooms" : "Nastavit přestávkové místnosti", + "Number of breakout rooms" : "Počet přestávkových místností", + "You can create from 1 to 20 breakout rooms." : "Je možné vytvořit 1 až 20 přestávkových místností.", + "Assignment method" : "Metoda přiřazování", + "Automatically assign participants" : "Automaticky přiřadit účastníky", + "Manually assign participants" : "Přiřadit účastníky ručně", + "Allow participants to choose" : "Umožnit účastníkům zvolit", + "Create rooms" : "Vytvořit místnosti", + "Confirm" : "Potvrdit", + "Create breakout rooms" : "Vytvořit přestávkové místnosti", + "Reset" : "Vrátit na výchozí hodnoty", + "Delete breakout rooms" : "Smazat přestávkové místnosti", + "Room {roomNumber}" : "Místnost {roomNumber}", + "Current breakout rooms and settings will be lost" : "Stávající přestávkové místnosti a nastavení budou ztraceny", + "Cancel" : "Storno", + "Unassigned participants" : "Nepřiřazení účastníci", + "Back" : "Zpět", + "Assign" : "Přidělit", + "Add participant \"{user}\"" : "Přidat účastníka „{user}“", + "Now" : "Nyní", + "Invalid calendar selected" : "Vybrán neplatný kalendář", + "Invalid start time selected" : "Vybrán neplatný čas zahájení", + "Invalid end time selected" : "Vybrán neplatný čas skončení", + "Unknown error occurred" : "Došlo k neznámé chybě", + "Sending no invitations" : "Pozvánky nebudou zaslány", + "{participant0} will receive an invitation" : "{participant0} obdrží pozvánku", + "{participant0} and {participant1} will receive invitations" : "{participant0} a {participant1} obdrží pozvánky", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} a %n další obdrží pozvánky","{participant0}, {participant1} a %n další obdrží pozvánky","{participant0}, {participant1} a %n dalších obdrží pozvánky","{participant0}, {participant1} a %n další obdrží pozvánky"], + "Invite {user}" : "Pozvat {user}", + "Invite all users and emails in this conversation" : "Pozvat všechny uživatele a e-maily do konverzace", + "Meeting created" : "Schůzka vytvořena", + "Upcoming meetings" : "Nadcházející schůzky", + "Loading …" : "Načítání …", + "No upcoming meetings" : "Žádné nadcházející schůzky", + "Schedule a meeting" : "Naplánovat schůzku", + "Meeting title" : "Název schůzky", + "From" : "Od", + "To" : "Pro", + "Calendar" : "Kalendář", + "Attendees" : "Účastníci", + "No other participants to send invitations to." : "Žádní ostatní účastníci, kterým poslat pozvánku.", + "Add attendees" : "Přidat účastníky", + "Save" : "Uložit", + "Search participants" : "Vyhledat účastníky", + "No results" : "Žádné výsledky", + "Done" : "Dokončeno", + "Disable live transcription" : "Vypnout přepis v reálném čase", + "Enable live transcription (generated by AI)" : "Zapnout průběžné přepisování do textu (vytvářeno AI)", + "Disable live translation" : "Vypnout překlad v reálném čase", + "Enable live translation (generated by AI)" : "Zapnout průběžné překládání (vytvářeno AI)", + "Original language: {languageName}" : "Původní jazyk: {languageName}", + "Translated language" : "Přeložený jazyk", + "Translated language: {languageName}" : "Přeložený jazyk: {languageName}", + "Raise hand" : "Hlásit se", + "Raise hand (R)" : "Hlásit se (R)", + "Lower hand" : "Přestat se hlásit", + "Lower hand (R)" : "Přestat se hlásit (R)", + "Exit full screen (F)" : "Opustit režim celé obrazovky (F)", + "Full screen (F)" : "Spustit režim celé obrazovky (F)", + "Speaker view" : "Zobrazení řečníka", + "Grid view" : "Zobrazení v mřížce", + "Error when trying to load the available live transcription languages" : "Chyba při pokusu o načtení jazyků, které jsou pro průběžný přepis k dispozici", + "Failed to enable live transcription" : "Nepodařilo se zapnout průběžné vytváření přepisu", + "Failed to enable live translations" : "Nepodařilo se zapnout průběžné překládání", + "Failed to disable live translations" : "Nepodařilo se vypnout průběžné překládání", + "Recording consent is required" : "Je vyžadován souhlas s nahráváním", + "This conversation is read-only" : "Tato konverzace je pouze pro čtení", + "Conversation not found or not joined" : "Konverzace nenalezena nebo jste do ní ještě nevstoupili", + "Lobby is still active and you're not a moderator" : "Čekárna je pořád aktivní a nejste moderátorem", + "Connection failed" : "Připojení se nezdařilo", + "Reload" : "Načíst znovu", + "{nickName} raised their hand." : "{nickName} se přihlásil(a) o slovo.", + "A participant raised their hand." : "Účastník se hlásí.", + "Collapse stripe" : "Sbalit pruh", + "Expand stripe" : "Rozbalit pruh", + "Previous page of videos" : "Předchozí stránka s videi", + "Next page of videos" : "Další stránka s videi", + "Connecting …" : "Připojování …", + "Calling …" : "Volání …", + "Waiting for {user} to join the call" : "Čeká se, až se {user} připojí k hovoru", + "Waiting for others to join the call …" : "Čekání na ostatní, až se připojí k hovoru …", + "You can invite others in the participant tab of the sidebar" : "Ostatní je možné pozvat v kartě účastníci (na postranním panelu)", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ostatní je možné pozvat na kartě účastníci v bočním panelu nebo sdílet tento odkaz pro pozvání ostatních!", + "Share this link to invite others!" : "Pro pozvání dalších lidí sdílejte tento odkaz!", + "Copy link" : "Zkopírovat odkaz", + "You are not allowed to enable audio" : "Nemáte oprávnění zapnout přenos zvuku od vás", + "No audio. Click to select device" : "Žádný zvuk – kliknutím vyberte zařízení.", + "Mute audio" : "Ztlumit zvuk", + "Mute audio (M)" : "Ztlumit zvuk (M)", + "Unmute audio" : "Zrušit ztlumení zvuku", + "Unmute audio (M)" : "Zrušit ztlumení zvuku (M)", + "None" : "Žádné", + "Select a microphone" : "Vyberte mikrofon", + "Select a speaker" : "Vybrat reproduktor", + "Microphone settings" : "Nastavení mikrofonu", + "Check devices" : "Zkontrolovat zařízení", + "Access to camera was denied" : "Přístup ke kameře byl odepřen", + "Error while accessing camera: It is likely in use by another program" : "Chyba při přistupování ke kameře: nejspíš je využívána jiným programem", + "Error while accessing camera" : "Chyba při přístupu ke kameře", + "You have been muted by a moderator" : "Byli jste ztlumeni moderátorem", + "Hide presenter video" : "Krýt video prezentujícího", + "You are not allowed to enable video" : "Nemáte oprávnění zapnout přenos z kamery od vás", + "No video. Click to select device" : "Žádné video – kliknutím vyberte zařízení.", + "Disable video" : "Vypnout video", + "Disable video (V)" : "Vypnout obraz (V)", + "Enable video" : "Povolit video", + "Enable video (V)" : "Zapnout obraz (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout video – při jeho prvním zapnutí bude spojení nakrátko přerušeno", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout obraz (V) – Při prvním spuštění bude vaše spojení nakrátko přerušeno", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnout video. Při jeho prvním zapnutí bude spojení nakrátko přerušeno", + "Select a video device" : "Vyberte videozařízení", + "Show presenter" : "Zobrazit přezentujícího", + "You" : "Vy", + "Mute" : "Ztlumit", + "Muted" : "Ztlumeno", + "Show screen" : "Ukázat obrazovku", + "Stop following" : "Přestat následovat", + "Connection could not be established …" : "Spojení se nedaří navázat …", + "Connection was lost and could not be re-established …" : "Spojení bylo ztraceno a nedaří se ho opětovně navázat …", + "Connection could not be established. Trying again …" : "Spojení se nepodařilo navázat. Zkouší se znovu …", + "Connection lost. Trying to reconnect …" : "Spojení ztraceno. Pokus o opětovné připojení…", + "Connection problems …" : "Problémy s připojením…", + "Collapse" : "Sbalit", + "Expand" : "Rozbalit", + "You need to be logged in to upload files" : "Pro nahrávání souborů je třeba, abyste byli přihlášení", + "Drop your files to upload" : "Přetáhněte sem soubor, které chcete nahrát", + "Conversation messages" : "Zprávy v konverzaci", + "Scroll to bottom" : "Odrolovat na konec", + "Post message" : "Odeslat zprávu", + "Federated conversation" : "Federovaná konverzace", + "Public conversation" : "Veřejná konverzace", + "Favorite" : "Oblíbený", + "Banned users" : "Vyloučení uživatelé", + "Manage the list of banned users in this conversation." : "Spravovat seznam vyloučených uživatelů v této konverzaci.", + "Manage bans" : "Spravovat vyloučení", + "No banned users" : "Žádní vyloučení uživatelé", + "Banned by:" : "Vyloučil(a):", + "Date:" : "Datum:", + "Note:" : "Poznámka:", + "Hide details" : "Skrýt podrobnosti", + "Show details" : "Zobrazit podrobnosti", + "Unban" : "Zrušit vyloučení", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Nadpis a popis je možné změnit v {linkstart}Kalendáři ↗{linkend}.", + "Error while updating conversation name" : "Chyba při aktualizování názvu konverzace", + "Error while updating conversation description" : "Při úpravě popisu konverzace se vyskytla chyba", + "Enter a name for this conversation" : "Zadejte název pro tuto konverzaci", + "Edit conversation name" : "Upravit název konverzace", + "Edit conversation description" : "Upravit popis konverzace", + "Enter a description for this conversation" : "Přidat popis pro tuto konverzaci", + "Picture" : "Obrázek", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "V této konverzaci je možné zapnout následující automaty. Pokud chcete na tomto serveru mít nainstalovány další, obraťte se na jeho správce.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na tomto serveru nejsou nainstalovány žádné automaty. Pokud chcete na tomto serveru mít nainstalovány další, obraťte se na jeho správce.", + "Disable" : "Vypnout", + "Enable" : "Povolit", + "Breakout rooms" : "Přestávkové místnosti", + "Manage breakout rooms" : "Spravovat přestávkové místnosti", + "Set up breakout rooms for this conversation" : "Vytvořte pro tuto konverzaci přestávkové místnosti", + "Please select a valid PNG or JPG file" : "Vyberte platný PNG nebo JPG soubor", + "Choose your conversation picture" : "Zvolte si obrázek pro konverzaci", + "Choose" : "Vybrat", + "Error setting conversation picture" : "Chyba při nastavování obrázku konverzace", + "Could not set the conversation picture: {error}" : "Nepodařilo se nastavit obrázek konverzace: {error}", + "Error cropping conversation picture" : "Chyba při ořezávání obrázku pro konverzaci", + "Error removing conversation picture" : "Chyba při odebírání obrázku konverzace", + "Set emoji as conversation picture" : "Nastavit emotikonu jako obrázek konverzace", + "Set background color for conversation picture" : "Nastavit barvu pozadí pro obrázek konverzace", + "Upload conversation picture" : "Nahrát obrázek konverzace", + "Choose conversation picture from files" : "Zvolit obrázek konverzace ze souborů", + "Remove conversation picture" : "Odebrat obrázek konverzace", + "The file must be a PNG or JPG" : "Je třeba, aby soubor by PNG nebo JPG", + "Set picture" : "Nastavit obrázek", + "Default permissions modified for {conversationName}" : "Výchozí oprávnění změněna pro {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nedaří se upravit výchozí oprávnění uživateli {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Upravit výchozí oprávnění pro účastníky v této konverzaci. Tato nastavení se nedotknou moderátorů.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Pokaždé když jsou v této sekci změněna oprávnění, budou ztracena předtím udělená uživatelsky určená oprávnění, přiřazená jednotlivým účastníkům.", + "All permissions" : "Všechna oprávnění", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Účastníci mají oprávnění zahájit hovor, připojit se k hovoru, zapnout zvuk a video, a sdílení obrazovky.", + "Restricted" : "Omezeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Účastníci se mohou připojovat k hovorům, ale už ne zapínat zvuk, ani video či sdílení obrazovky od nich, dokud jim moderátoři tato oprávnění neudělí ručně.", + "Advanced permissions" : "Pokročilá oprávnění", + "Edit permissions" : "Upravit oprávnění", + "Conversation settings" : "Nastavení konverzace", + "Basic Info" : "Základní informace", + "Personal" : "Osobní", + "Moderation" : "Moderování", + "Setup overview" : "Přehled nastavení", + "Live transcription" : "Přepis v reálném čase", + "Enable live transcription" : "Zapnout přepis v reálném čase", + "Breakout Rooms" : "Přestávkové místnosti", + "Matterbridge" : "Matterbridge", + "Bots" : "Automaty", + "Danger zone" : "Nebezpečná zóna", + "Archive conversation" : "Archivovat konverzaci", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivované konverzace jsou ve výchozím stavu ze seznamu konverzací skryté. Nicméně objeví se při hledání podle názvu konverzace nebo na seznamu archivovaných konverzací.", + "Do you really want to leave \"{displayName}\"?" : "Opravdu chcete „{displayName}“ opustit?", + "You can archive this conversation instead." : "Namísto toho můžete tuto konverzaci archivovat.", + "Leave conversation" : "Opustit konverzaci", + "You need to promote a new moderator before you can leave the conversation" : "Než budete moci konverzaci opustit, je třeba předat někomu roli moderátora", + "Delete conversation" : "Smazat konverzaci", + "Do you really want to delete \"{displayName}\"?" : "Opravdu chcete smazat „{displayName}“?", + "Error while deleting conversation" : "Chyba při mazání konverzace", + "Delete all chat messages" : "Smazat všechny zprávy chatu", + "Do you really want to delete all messages in \"{displayName}\"?" : "Opravdu chcete smazat všechny zprávy v „{displayName}“?", + "Error while clearing chat history" : "Chyba při mazání historie konverzace", + "Be careful, these actions cannot be undone." : "Opatrně, tyto kroky nelze vrátit zpět.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Jakmile opustíte konverzaci, budete v případě těch uzavřených potřebovat k opětovnému připojení pozvánku. K otevřené konverzaci se můžete znovu připojit kdykoli.", + "Permanently delete this conversation." : "Nadobro smazat tuto konverzaci.", + "Delete chat messages" : "Smazat zprávy chatu", + "Permanently delete all the messages in this conversation." : "Nadobro smazat veškeré zprávy v této konverzaci.", + "_%n hour_::_%n hours_" : ["%n hodina","%n hodiny","%n hodin","%n hodiny"], + "_%n day_::_%n days_" : ["%n den","%n dny","%n dnů","%n dny"], + "_%n week_::_%n weeks_" : ["%n týden","%n týdny","%n týdnů","%n týdny"], + "Custom expiration time" : "Uživatelsky určený okamžik skončení platnosti", + "Message expiration disabled" : "Ukončení platnosti zprávy vypnuto", + "Message expiration set: {duration}" : "Okamžik skončení platnosti zprávy nastaven na: {duration}", + "Error when trying to set message expiration" : "Chyba při pokusu o nastavení konce platnosti zprávy", + "Message expiration" : "Skončení platnosti zprávy", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Platnost zpráv v chatu je možné ukončit po uplynutí zadané doby. Pozn.: Soubory nasdílené v chatu nebudou vlastníkovi smazány, ale už nadále nebudou sdíleny v konverzaci.", + "Set message expiration" : "Nastavit skončení platnosti zprávy", + "Current message expiration" : "Stávající doba platnosti zprávy", + "Password copied to clipboard" : "Heslo zkopírováno do schránky", + "Password could not be copied" : "Heslo se nepodařilo zkopírovat", + "Guest access" : "Přístup pro hosty", + "Breakout rooms are not allowed in public conversations." : "Přestávkové místnosti nejsou ve veřejných konverzacích povoleny.", + "Allow guests to join this conversation via link" : "Umožnit hostům, připojit se k této konverzace prostřednictvím odkazu.", + "Password protection" : "Ochrana heslem", + "This conversation is password-protected. Guests need password to join" : "Tato konverzace je chráněna heslem. Hosté pro připojení potřebují heslo", + "Password protection is needed for public conversations" : "Veřejné konverzace vyžadují heslo", + "Set a password" : "Nastavit heslo", + "Change password" : "Změnit heslo", + "Enter new password" : "Zadejte nové heslo", + "Save password" : "Uložit heslo", + "Copy password" : "Zkopírovat heslo", + "Guests are allowed to join this conversation via link" : "Hostům je umožněno se do této konverzace připojovat prostřednictvím odkazu", + "Guests are not allowed to join this conversation" : "Hostům není umožněno se do této konverzace připojovat", + "Resend invitations" : "Znovu poslat pozvánky", + "This conversation is open to both registered users and users created with the Guests app" : "Tato konverzace je otevřená jak registrovaným uživatelům, tak uživatelům, vytvořeným v aplikaci Hosté", + "This conversation is open to registered users" : "Tato konverzace je otevřená pro registrované uživatele", + "This conversation is limited to the current participants" : "Tato konverzace je omezená pouze na stávající účastníky", + "You opened the conversation to both registered users and users created with the Guests app" : "Otevřeli jste konverzaci jak registrovaným uživatelům, tak uživatelům, vytvořeným aplikací Hosté", + "Error occurred when opening or limiting the conversation" : "Při otevírání nebo omezování konverzace došlo k chybě", + "Open conversation to registered users, showing it in search results" : "Otevřít konverzaci registrovaným uživatelům a zobrazovat jí ve výsledcích hledání", + "Also open to users created with the Guests app" : "Také otevřít uživatelům, vytvořeným v aplikaci Hosté", + "Open conversation" : "Otevřít konverzaci", + "Set language spoken in calls" : "Nastavte jazyk, kterým se mluví v hovorech", + "Languages could not be loaded" : "Jazyky se nepodařilo načíst", + "Loading languages …" : "Načítání jazyků …", + "Invalid language" : "Neplatný jazyk", + "Default language (English)" : "Výchozí jazyk (angličtina)", + "Default live transcription language set" : "Výchozí jazyk pro vytváření průběžného přepisu nastaven", + "Live transcription language set: {languageName}" : "Jazyk pro vytváření průběžného přepisu nastaven: {languageName}", + "Error when trying to set live transcription language" : "Chyba při pokusu o nastavení jazyka pro průběžný přepis", + "Start time: {date}" : "Okamžik začátku: {date}", + "Start time has been updated" : "Čas zahájení byl upraven", + "Error occurred while updating start time" : "Při upravování času začátku došlo k chybě", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Zapnutí čekárny odebere z probíhajícího hovoru ty, kteří nejsou moderátory.", + "Enable lobby, restricting the conversation to moderators" : "Zapnout čekárnu, omezit konverzaci pouze na moderátory", + "Meeting start time" : "Okamžik zahájení schůzky", + "Start time (optional)" : "Čas začátku (volitelný)", + "Import email participants" : "Naimportovat e-mailové účastníky", + "You can import a list of email participants from a CSV file." : "Seznam e-mailových účastníků je možné naimportovat z CSV souboru.", + "Poll drafts" : "Koncepty anket", + "Browse poll drafts" : "Procházet koncepty anket", + "Error occurred when locking the conversation" : "Při uzamykání konverzace došlo k chybě", + "Error occurred when unlocking the conversation" : "Při odemykání konverzace došlo k chybě", + "Lock conversation" : "Uzamknout konverzaci", + "This will also terminate the ongoing call." : "Toto ukončí i probíhající hovor.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Uzamknout konverzaci a zabránit tak komukoliv posílat do ní zprávy nebo zahajovat hovory", + "Edit" : "Upravit", + "More information" : "Podrobnosti", + "Delete" : "Smazat", + "Add new bridged channel to current conversation" : "Přidat nový můstkem napojený kanál do současné konverzace", + "unknown state" : "neznámý stav", + "running" : "spuštěné", + "not running, check Matterbridge log" : "není spuštěné – zkontrolujte záznam událostí Matterbridge", + "not running" : "nespuštěné", + "Bridge saved" : "Můstek uložen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Pomocí Matterbridge je možné napojit můstkem kanály z různých systémů pro okamžité posílání zpráv.", + "More info on Matterbridge" : "Podrobnosti o Matterbridge", + "Messaging systems" : "Systémy zasílání zpráv", + "Enable bridge" : "Povolit můstek", + "Show Matterbridge log" : "Zobrazit záznam událostí v Matterbridge", + "Log content" : "Obsah záznamu událostí", + "Only moderators are allowed to mention @all" : "Zmínit @all (všechny) je umožněno pouze moderátorům", + "All participants are allowed to mention @all" : "Zmínit @all (všechny) je umožněno všem účastníkům", + "Participants are now allowed to mention @all." : "Účastníkům je nyní umožněno zmínit @all (všechny).", + "Mentioning @all has been limited to moderators." : "Zmiňování @all (všech) bylo omezeno pouze na moderátory.", + "Allow participants to mention @all" : "Umožnit účastníkům zmínit @all (všechny)", + "Mention permissions" : "Oprávnění pro zmiňování", + "Notifications" : "Upozornění", + "Notify about calls in this conversation" : "Upozorňovat na volání v této konverzaci", + "Important conversation" : "Důležitá konverzace", + "\"Do not disturb\" user status is ignored for important conversations" : "Stav uživatele „Nevyrušovat“ bude v případě důležitých konverzací ignorován", + "Sensitive conversation" : "Citlivá konverzace", + "Message preview will be disabled in conversation list and notifications" : "Náhled zprávy bude vypnut pro seznam konverzací a notifikace", + "Recording consent is required for calls in this conversation" : "Souhlas s nahráváním je vyžadován pro volání v této konverzaci", + "Recording consent is not required for calls in this conversation" : "Souhlas s nahráváním není pro volání v této konverzaci vyžadován", + "Recording consent requirement was updated" : "Požadavek na souhlas s nahráváním byl zaktualizován", + "Error occurred while updating recording consent" : "Při aktualizování souhlasu s nahráváním došlo k chybě", + "Recording Consent" : "Souhlas s nahráváním", + "Recording consent cannot be changed once a call or breakout session has started." : "Souhlas s nahráváním nelze po zahájení hovoru nebo přestávkové relace změnit.", + "Require recording consent before joining call in this conversation" : "Vždy vyžadovat souhlas s nahráváním před připojením hovoru v této konverzaci.", + "Recording consent is required for all calls" : "Souhlas s nahráváním je vyžadován pro všechna volání", + "SIP dial-in is now possible without PIN requirement" : "Zavolat do hovoru prostřednictvím SIP je nyní možné i bez požadavku na PIN kód", + "SIP dial-in is now enabled" : "SIP vytáčení je povoleno", + "SIP dial-in is now disabled" : "SIP vytáčení je zakázáno", + "Error occurred when enabling SIP dial-in" : "Při zapínání SIP vytáčení došlo k chybě", + "Error occurred when disabling SIP dial-in" : "Při vypínání SIP vytáčení došlo k chybě", + "Phone and SIP dial-in" : "Volání do telefonem a SIP", + "Enable phone and SIP dial-in" : "Zapnout volání do konverzace telefonem a přes SIP protokol", + "Allow to dial-in without a PIN" : "Umožnit zavolání do hovoru bez zadávání PIN kódu", + "Ongoing" : "Probíhající", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba přijala","%n lidé přijali","%n lidí přijalo","%n lidé přijaly"], + "_%n person declined_::_%n people declined_" : ["%n osoba odmítla","%n lidé odmítli","%n lidí odmítlo","%n lidé odmítli"], + "_and %n other attachment_::_and %n other attachments_" : ["a %n další příloha","a %n další přílohy","a %n dalších příloh","a %n další přílohy"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "V {conversation}", + "View attachment" : "Zobrazit přílohu", + "Join" : "Připojit se", + "View conversation" : "Zobrazit konverzaci", + "View event on Calendar" : "Zobrazit událost v Kalendáři", + "Error while creating the conversation" : "Chyba při vytváření konverzace", + "Hello, {displayName}" : "Dobrý den, {displayName}", + "Start meeting now" : "Zahájit schůzku nyní", + "Give your meeting a title" : "Dejte své schůzce název", + "Create and copy link" : "Vytvořit a zkopírovat odkaz", + "Create a new conversation" : "Vytvořit novou konverzaci", + "Join open conversations" : "Přidat se do všem přístupných konverzací", + "Call a phone number" : "Vytočit telefonní číslo", + "Scroll backward" : "Posunout zpět", + "Scroll forward" : "Posunout vpřed", + "Schedule meetings" : "Naplánovat schůze", + "You don't have any upcoming meetings" : "Nemáte žádné nadcházející schůzky", + "Open calendar" : "Otevřít kalendář", + "Unread mentions" : "Označit zmínění jako nepřečtená", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Zprávy, ve kterých jste byli zmíněni se zobrazí zde. Lidi můžete zmiňovat zadáním @ (zavináč), následovaného jejich jménem", + "Upcoming reminders" : "Nadcházející připomínky", + "Message reminders" : "Připomínky zprávy", + "Set a reminder on a message to be notified" : "Nastavte si připomínku ohledně zprávy a buďte tak na ni upozorněni", + "Start a group conversation" : "Zahájit skupinovou konverzaci", + "Create conversation" : "Vytvořit konverzaci", + "Enter your name" : "Zadejte své jméno", + "Submit name and join" : "Odeslat jméno a připojit se", + "Do you already have an account?" : "Už máte účet?", + "Log in" : "Přihlásit se", + "Error while verifying uploaded file" : "Chyba při ověřování nahraného souboru", + "Uploaded file is verified" : "Nahrání souboru je ověřeno", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Formát obsahu jsou hodnoty oddělované čárkami (CSV):
- Řádek se záhlavím je vyžadován a je třeba, aby se shodoval s \"name\",\"e-mail\" nebo pouze \"email\"
- Každou položku na zvlášť řádek (např. \"Jan Novák\",\"jan@priklad.tld\")", + "Participants added successfully" : "Účastníci úspěšně přidáni", + "Error while adding participants" : "Chyba při přidávání účastníků", + "Import a file" : "Naimportovat soubor", + "Browse" : "Procházet", + "Verifying uploaded file …" : "Ověřování nahraného souboru …", + "This might take a moment" : "Toto může chvíli trvat", + "Send invitations" : "Odeslat pozvánky", + "_%n invalid email_::_%n invalid emails_" : ["%n neplatný e-mail","%n neplatné e-maily","%n neplatných e-mailů","%n neplatné e-maily"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail už byl naimportován nebo jde o duplicitu","%n e-maily už byly naimportovány nebo jde o duplicity","%n e-mailů už bylo naimportováno nebo jde o duplicity","%n e-maily už byly naimportovány nebo jde o duplicity"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Je možné odeslat %n pozvánku","Je možné odeslat %n pozvánky","Je možné odeslat %n pozvánek","Je možné odeslat %n pozvánky"], + "An error occurred while calling a phone number" : "Došlo k chybě při volání na telefonní číslo", + "Phone number could not be called: {error}" : "Nepodařilo se zavolat na telefonní číslo: {error}", + "Phone number could not be called" : "Na telefonní číslo se nepodařilo zavolat", + "Search participants or phone numbers" : "Hledat účastníky nebo telefonní čísla", + "Creating the conversation …" : "Vytváření konverzace …", + "Mark as read" : "Označit jako přečtené", + "Mark as unread" : "Označit jako nepřečtené", + "Remove from favorites" : "Odebrat z oblíbených", + "Add to favorites" : "Přidat do oblíbených", + "Unarchive conversation" : "Zrušit archivaci konverzace", + "Ignore \"Do not disturb\"" : "Ignorovat „Nevyrušovat“", + "You need to promote a new moderator before you can leave the conversation." : "Než budete moci konverzaci opustit, je třeba předat někomu roli moderátora.", + "Conversation actions" : "Akce konverzace", + "Notify about calls" : "Upozorňovat na hovory", + "Hide message text" : "Skrýt text zprávy", + "Pending invitations" : "Čekající pozvánky", + "Join conversations from other servers" : "Připojit se ke konverzacím z ostatních serverů", + "From {user} at {remoteServer}" : "Od {user} v {remoteServer}", + "Decline invitation" : "Odmítnout pozvání", + "Accept invitation" : "Přijmout pozvání", + "No pending invitations" : "Žádné čekající pozvánky", + "Home" : "Domů", + "Unread" : "Nastavit jako nepřečtené", + "Mentions" : "Zmínění", + "Meetings" : "Schůze", + "Alphabetically" : "Abecedně", + "No followed threads" : "Žádná sledovaná vlákna", + "No matches found" : "Nenalezeny žádné shody", + "No conversations found" : "Nenalezena žádná konverzace", + "You have no archived conversations." : "Nemáte žádné archivované konverzace.", + "Subscribe to an existing thread or start your own." : "Přihlaste se k odběru stávajícího vlákna nebo zahajte své vlastní.", + "You have no unread mentions." : "Nemáte žádná nepřečtená zmínění.", + "You have no unread messages." : "Nemáte žádné nepřečtené zprávy.", + "An error occurred while performing the search" : "Došlo k chybě při provádění hledání", + "Conversation list" : "Seznam konverzace", + "Filter conversations by" : "Filtrovat konverzaci podle", + "Unread messages" : "Nepřečtené zprávy", + "Meeting conversations" : "Konverzace schůzky", + "Clear filters" : "Vyčistit filtry", + "New personal note" : "Nová osobní poznámka", + "Back to conversations" : "Zpět na konverzace", + "Archived conversations" : "Archivované konverzace", + "Threads" : "Vláken", + "Clear filter" : "Vyčistit filtr", + "Show more threads" : "Zobrazit více vláken", + "App settings" : "Nastavení aplikace", + "Users" : "Uživatelé", + "Groups" : "Skupiny", + "Teams" : "Týmy", + "Federated users" : "Federovaní uživatelé", + "New private conversation" : "Nová soukromá konverzace", + "Other sources" : "Ostatní zdroje", + "Open conversations" : "Otevřít konverzace", + "No search results" : "Nic nenalezeno", + "Users, groups and teams" : "Uživatelé, skupiny a týmy", + "Users and groups" : "Uživatelé a skupiny", + "Users and teams" : "Uživatelé a týmy", + "Groups and teams" : "Skupiny a týmy", + "New group conversation" : "Nová skupinová konverzace", + "The meeting will start soon" : "Schůzka brzy začne", + "This meeting is scheduled for {startTime}" : "Tato schůzka je naplánována na {startTime}", + "You are currently waiting in the lobby" : "V tuto chvíli se nacházíte v čekárně", + "Enable noise suppression" : "Zapnout potlačování hluku", + "Reduce background noises for better voice quality" : "Omezit hluk na pozadí pro lepší kvalitu hlasu", + "Enable echo cancellation" : "Zapnout potlačování ozvěn", + "Minimize echo effect from own surrounding" : "Minimalizovat ozvěnu ze svého okolí", + "Enable auto gain control" : "Zapnout automatickou regulaci zesílení", + "Dynamically adjust microphone volume for consistent level" : "Dynamicky uzpůsobí zesílení mikrofonu, aby snímal pořád stejně hlasitě", + "Select microphone" : "Vyberte mikrofon", + "No microphone available" : "Není k dispozici žádný mikrofon", + "Select speaker" : "Vybrat reproduktor", + "No speaker available" : "Není k dispozici žádný reproduktor", + "Select camera" : "Vyberte kameru", + "No camera available" : "Není k dispozici žádná kamera", + "Select a device" : "Vyberte zařízení", + "Playing …" : "Přehrávání …", + "Test speakers" : "Vyzkoušet reproduktory", + "Test" : "Vyzkoušet", + "Devices" : "Zařízení", + "Backgrounds" : "Pozadí", + "No audio" : "Žádný zvuk", + "No camera" : "Žádná kamera", + "Display video as you will see it (mirrored)" : "Zobrazit video tak, jak byste ho viděli vy (zrcadlené)", + "Display video as others will see it" : "Zobrazit si video tak, jako ho uvidí ostatní", + "Calls are not supported in your browser" : "Vámi používaný prohlížeč nepodporuje volání", + "Access to microphone is only possible with HTTPS" : "Přístup k mikrofonu je možný pouze přes HTTPS", + "Access to microphone was denied" : "Přístup k mikrofonu byl odepřen", + "Error while accessing microphone" : "Chyba při přístupu k mikrofonu", + "Access to camera is only possible with HTTPS" : "Přístup ke kameře je možný pouze přes HTTPS", + "The call is being recorded." : "Hovor je nahráván.", + "The call might be recorded." : "Hovor může být nahráván.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Nahrávka může obsahovat váš hlas, obraz z kamery a sdílení obrazovky. K hovoru se budete moci připojit až po odsouhlasení.", + "Give consent to the recording of this call" : "Udělit souhlas s nahráváním tohoto hovoru", + "Show more info" : "Zobrazit další informace", + "Audio is not available" : "Zvuk není k dispozici", + "Video is not available" : "Video není k dispozici", + "Start recording immediately with the call" : "Zahájit nahrávání bezprostředně po zahájení hovoru", + "Notify all participants about this call" : "Upozornit všechny účastníky na tento hovor", + "Apply settings" : "Uplatnit nastavení", + "Select virtual office background" : "Vybrat pozadí virtuální kanceláře", + "Select virtual home background" : "Vybrat pozadí virtuálního domova", + "Select virtual abstract background" : "Vybrat virtuální abstraktní ppozadí", + "Select virtual beach background" : "Vybrat pozadí virtuální pláže", + "Select virtual park background" : "Vybrat pozadí virtuálního parku", + "Select virtual theater background" : "Vybrat pozadí virtuálního divadla", + "Select virtual library background" : "Vybrat pozadí virtuální knihovny", + "Select virtual space station background" : "Vybrat pozadí virtuální vesmírné stanice", + "Error while uploading the file" : "Chyba při nahrávání souboru", + "Select a file" : "Vybrat soubor", + "Invalid path selected" : "Vybrán neplatný popis umístění", + "Select virtual background from file {fileName}" : "Vybrat virtuální pozadí ze souboru {fileName}", + "Blur" : "Rozmazat", + "Upload" : "Nahrát", + "Files" : "Soubory", + "(editing)" : "(upravováno)", + "(edited)" : "(upraveno)", + "The message has expired or has been deleted" : "Platnost této zprávy skončila nebo byla smazána", + "Cancel quote" : "Zrušit citování", + "24 hours" : "24 hodin", + "7 days" : "7 dnů", + "30 days" : "30 dnů", + "Until unpin" : "Dokud není připnutí zrušeno", + "Clear reminder – {timeLocale}" : "Odstranit připomínku – {timeLocale}", + "Edited by {actor}" : "Upravil(a) {actor}", + "Pinned by you" : "Připnuto vámi", + "Pinned by {actor}" : "Připnul/a {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Text zprávy zkopírován do schránky", + "Message text could not be copied" : "Text zprávy se nepodařilo zkopírovat", + "Message forwarded to \"Note to self\"" : "Zpráva přeposlána do „Poznámka pro mne“", + "Error while forwarding message to \"Note to self\"" : "Chyba při přeposílání do „Poznámka pro mne“", + "A reminder was successfully removed" : "Připomínka byla úspěšně odebrána", + "Error occurred when removing a reminder" : "Při odebírání připomínky došlo k chybě", + "A reminder was successfully set at {datetime}" : "Připomínka byla úspěšně nastavena na {datetime}", + "Error occurred when creating a reminder" : "Při vytváření připomínky došlo k chybě", + "Add a reaction to this message" : "Přidat reakce na tuto zprávu", + "Reply" : "Odpovědět", + "More actions" : "Další akce", + "Set reminder" : "Nastavit připomínku", + "Pin message" : "Připnout zprávu", + "Unpin message" : "Zrušit připnutí zprávy", + "Reply privately" : "Odpovědět soukromě", + "Edit message" : "Upravit zprávu", + "Copy message" : "Zkopírovat zprávu", + "Copy message link" : "Zkopírovat odkaz zprávy", + "Go to file" : "Přejít k souboru", + "Download file" : "Stáhnout si soubor", + "Go to thread" : "Přejít na vlákno", + "Edit thread details" : "Upravit podrobnosti o vláknu", + "Forward message" : "Přeposlat zprávu", + "Translate" : "Překládání", + "Set custom reminder" : "Nastavit uživatelsky určenou připomínku", + "Keep pinned for" : "Ponechat připnuté po dobu", + "Set custom period" : "Nastavit uživatelsky určené období", + "Close reactions menu" : "Zavřít nabídku reakcí", + "React with {emoji}" : "Zareagovat {emoji}", + "React with another emoji" : "Zareagovat jinou emotikonou", + "Choose a conversation to forward the selected message." : "Zvolte konverzaci do které označenou zprávu odeslat.", + "Error while forwarding message" : "Chyba při přeposílání zprávy", + "The message has been forwarded to {selectedConversationName}" : "Zpráva byla přeposlána do {selectedConversationName}", + "Dismiss" : "Zavřít", + "Go to conversation" : "Přejít do konverzace", + "Detect language" : "Zjistit jazyk", + "The message could not be translated" : "Zprávu se nepodařilo přeložit", + "Translation copied to clipboard" : "Překlad zkopírován do schránky", + "Translation could not be copied" : "Překlad se nepodařilo zkopírovat", + "Translate message" : "Přeložit zprávu", + "Source language to translate from" : "Zdrojový jazyk, ze kterého přeložit", + "Translate from" : "Přeložit z", + "Target language to translate into" : "Cílový jazyk, do kterého přeložit", + "Translate to" : "Přeložit do", + "Translating" : "Překládá se", + "Copy translated text" : "Zkopírovat přeložený text", + "Error when scheduling the message" : "Chyba při plánování této zprávy", + "Reschedule" : "Přeplánovat", + "Send now" : "Odeslat nyní", + "Choose a time" : "Zvolit čas", + "Send at custom time" : "Odeslat v uživatelsky určený čas", + "Will be sent without notification" : "Bude odesláno bez notifikace", + "Message read by everyone who shares their reading status" : "Všichni, kteří sdílejí oznámení o přečtení, si zprávu přečetli", + "Message sent" : "Zpráva odeslána", + "Sent without notification" : "Odeslat bez oznámení", + "Deleting message" : "Mazání zprávy", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Zpráva úspěšně smazána, ale je nastavený bot nebo Matterbridge, takže mohla už být odeslána do jiných služeb", + "Message deleted successfully" : "Zpráva úspěšně smazána", + "Message could not be deleted because it is too old" : "Zpráva nemohla být smazána, protože je příliš stará", + "Only normal chat messages can be deleted" : "Pouze normální zprávy mohou být smazány", + "An error occurred while deleting the message" : "Při mazání zprávy došlo k chybě", + "Pinned" : "Připnuté", + "Your browser does not support playing audio files" : "Vámi využívaný prohlížeč nepodporuje přehrávání zvukových souborů", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Karta aplikace Deck", + "Remove {fileName}" : "Odebrat {fileName}", + "Open this location in OpenStreetMap" : "Otevřít toto umístění v OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odpověď","%n odpovědi","%n odpovědí","%n odpovědi"], + "Sending message" : "Odesílání zprávy", + "Failed to send the message. Click to try again" : "Odeslání zprávy se nezdařilo. Klikněte pro další pokus", + "Not enough free space to upload file" : "Pro odeslání souboru není dostatek volného místa", + "You cannot send messages to this conversation at the moment" : "Nyní není možné do této konverzace posílat zprávy", + "Could not update the message" : "Nepodařilo se zaktualizovat zprávu", + "Reply to thread \"{threadTitle}\"" : "Odpovědět na vlákno „{threadTitle}“", + "_You voted • %n vote_::_You voted • %n votes_" : ["Hlasovali jste • %n hlas","Hlasovali jste • %n hlasy","Hlasovali jste • %n hlasů","Hlasovali jste • %n hlasy"], + "You voted" : "Hlasovali jste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknutím hlasujte • %n hlas","Kliknutím hlasujte • %n hlasy","Kliknutím hlasujte • %n hlasů","Kliknutím hlasujte • %n hlasy"], + "Click to vote" : "Kliknutím hlasujte", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Koncept ankety • %n volba","Koncept ankety • %n volby","Koncept ankety • %n voleb","Koncept ankety • %n volby"], + "_%n vote_::_%n votes_" : ["%n hlas","%n hlasy","%n hlasů","%n hlasy"], + "Edit poll draft" : "Upravit koncept ankety", + "Delete poll draft" : "Smazat koncept ankety", + "Open poll" : "Otevřít anketu", + "Closed poll" : "Uzavřená anketa", + "See results" : "Zobrazit výsledky", + "Reactions" : "Reakce", + "No permission to post reactions in this conversation" : "Nemáte oprávnění reagovat do této konverzace", + "and {participant}" : "přidat {participant}", + "_and %n other participant_::_and %n other participants_" : ["a %n další účastník","a %n další účastníci","a %n dalších účastníků","a %n další účastníci"], + "Show all reactions" : "Zobrazit veškeré reakce", + "Add more reactions" : "Přidat další reakce", + "Show or collapse system messages" : "Zobrazit nebo sbalit systémové zprávy", + "No messages" : "Žádné zprávy", + "All messages have expired or have been deleted." : "Platnost veškerých zpráv skončila nebo byly smazány.", + "Generate summary with AI" : "Vytvořit shrnutí pomocí AI", + "{author} (pinned by you)" : "{author} (připnuto vámi)", + "{author} (pinned by {actor})" : "{author} (připnul/a {actor})", + "Unpin" : "Uvolnit", + "Cancel search" : "Zrušit hledání", + "Add a phone number" : "Přidat telefonní číslo", + "Error: A password is required to create the conversation." : "Chyba: pro vytvoření konverzace je zapotřebí hesla.", + "All set, the conversation \"{conversationName}\" was created." : "Vše hotovo, konverzace „{conversationName}“ byla vytvořena.", + "Create a new group conversation" : "Vytvořit novou skupinovou konverzaci", + "Add participants" : "Přidat účastníky", + "Maximum length exceeded ({maxlength} characters)" : "Překročena nejvyšší umožněná délka ({maxlength} znaků)", + "Conversation type" : "Typ konverzace", + "Conversation visibility" : "Viditelnost konverzace", + "Allow guests to join via link" : "Umožnit hostům, připojit se přes odkaz.", + "Enter password" : "Zadejte heslo", + "This conversation has been locked" : "Tato konverzace byla uzamčena", + "No permission to post messages in this conversation" : "Nemáte oprávnění posílat zprávy do této konverzace", + "Joining conversation …" : "Připojování ke konverzaci …", + "Write a message without notification" : "Napsat zprávu bez oznámení", + "Create a thread silently" : "Vytvořit vlákno, ale neodesílat o tom notifikaci", + "Create a thread" : "Vytvořit vlákno", + "Send message silently" : "Poslat zprávu bez upozornění", + "Send message" : "Poslat zprávu", + "Send without notification" : "Odeslat bez upozornění", + "The participant will not be notified about new messages" : "Účastník nebude upozorňován na nové zprávy", + "Participants will not be notified about new messages" : "Účastníci nebudou upozorňováni na nové zprávy", + "Message will be sent {datetimeString}" : "Zpráva bude odeslána v {datetimeString}", + "Thread title is required" : "Je třeba zadat název vlákna", + "Message text is required" : "Je zapotřebí textu zprávy", + "The message could not be edited" : "Zprávu nebylo možné upravit", + "File to share" : "Soubor ke sdílení", + "File upload is not available in this conversation" : "V této konverzaci není nahrání souboru k dispozici", + "Message was successfully scheduled" : "Zpráva byla úspěšně naplánována", + "Add emoji" : "Přidat emoji", + "Adding a mention will only notify users who did not read the message." : "Přidávání zmínění upozorní pouze uživatele, kteří si zprávu ještě nepřečetli.", + "Thread title" : "Název vlákna", + "Send later" : "Odeslat později", + "Show scheduled messages" : "Zobrazit naplánované zprávy", + "Cancel editing" : "Zrušit upravování", + "Schedule message" : "Naplánovat zprávu", + "{user} is out of office and might not respond." : "{user} je mimo kancelář a může se stát, že neodpoví.", + "Absence period: {startDate} - {endDate}" : "Období nepřítomnosti: {startDate} - {endDate}", + "Replacement:" : "Nahrazení:", + "Share from {nextcloud}" : "Nasdílet z {nextcloud}", + "Share from Files" : "Sdílet ze Souborů", + "Share files to the conversation" : "Sdílet soubory do konverzace", + "Upload from device" : "Nahrát ze zařízení", + "Create new poll" : "Vytvořit novou anketu", + "Smart picker" : "Inteligentní výběr", + "Record voice message" : "Nahrát hlasovou zprávu", + "End recording and send" : "Ukončit pořizování nahrávky a odeslat", + "Dismiss recording" : "Zahodit nahrávku", + "Access to the microphone was denied" : "Přístup k mikrofonu byl odepřen", + "Microphone either not available or disabled in settings" : "Mikrofon buď není k dispozici nebo je vypnutý v nastaveních", + "Error while recording audio" : "Chyba při pořizování zvukového záznamu", + "Voice message {time} ({conversation})" : "Hlasová zpráva {time} ({conversation})", + "Generating summary of unread messages …" : "Vytváření shrnutí nepřečtených zpráv …", + "Summary is AI generated and might contain mistakes" : "Shrnutí je vytvářeno AI a může obsahovat chyby", + "Error occurred during a summary generation" : "Při vytváření shrnutí došlo k chybě", + "New file" : "Nový soubor", + "Blank" : "Prázdný", + "Error while creating file" : "Chyba při vytváření souboru", + "Create and share a new file" : "Vytvořit a nasdílet nový soubor", + "Name of the new file" : "Název pro nový soubor", + "Create file" : "Vytvořit soubor", + "Someone is typing …" : "Někdo píše …", + "{user1} is typing …" : "{user1} píše …", + "{user1} and {user2} are typing …" : "{user1} a {user2} píší …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} a {user3} píší …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} a %n další píše …","{user1}, {user2}, {user3} a %n další píší …","{user1}, {user2}, {user3} a %n dalších píše …","{user1}, {user2}, {user3} a %n další píší …"], + "Add more files" : "Přidat další soubory", + "Send" : "Odeslat", + "In this conversation {user} can:" : "V této konverzaci {user} může:", + "Edit default permissions for participants in {conversationName}" : "Upravit výchozí oprávnění pro účastníky v {conversationName}", + "Start a call" : "Zahájit hovor", + "Skip the lobby" : "Přeskočit čekárnu", + "Can post messages" : "Může posílat zprávy", + "Can post messages and reactions" : "Může posílat zprávy a reakce", + "Can add reactions" : "Může přidávat reakce", + "Enable the microphone" : "Zapnout mikrofon", + "Enable the camera" : "Zapnout kameru", + "Share the screen" : "Sdílet obsah obrazovky", + "Update permissions" : "Aktualizovat oprávnění", + "Updating permissions" : "Aktualizují se oprávnění", + "No poll drafts" : "Žádné koncepty anket", + "There is no poll drafts yet saved for this conversation" : "Pro tuto konverzaci zatím nejsou žádné koncepty ankety", + "Create poll in {name}" : "Vytvořit anketu v {name}", + "Create poll" : "Vytvořit anketu", + "Error while importing poll" : "Chyba při importování ankety", + "Question" : "Otázka", + "Ask a question" : "Položit dotaz", + "Import draft from file" : "Naimportovat koncept ze souboru", + "Answers" : "Odpovědi", + "Answer {option}" : "Odpověď {option}", + "Delete poll option" : "Smazat volbu ankety", + "Add answer" : "Přidat odpověď", + "Settings" : "Nastavení", + "Anonymous poll" : "Anonymní anketa", + "Multiple answers" : "Vícero odpovědí", + "Save as draft" : "Uložit jako koncept", + "Export draft to file" : "Exportovat koncept do souboru", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konečné výsledky • %n hlas","Konečné výsledky • %n hlasy","Konečné výsledky • %n hlasů","Konečné výsledky • %n hlasy"], + "Your vote is anonymous" : "Vaše hlasování je anonymní", + "You voted for this option" : "Hlasovali jste pro tuto možnost", + "End poll" : "Ukončit anketu", + "Change your vote" : "Změňte svůj hlas", + "Withdraw vote" : "Vzít hlasování zpět", + "Results" : "Výsledky", + "Voted participants" : "Účastníci, kteří odvolili", + "Send a message to \"{roomName}\"" : "Poslat zprávu do „{roomName}“", + "Hide list of participants" : "Skrýt seznam účastníků", + "Show list of participants" : "Zobrazit seznam účastníků", + "Assistance requested in {roomName}" : "Vyžádána asistence v {roomName}", + "The message was sent to \"{roomName}\"" : "Zpráva byla odeslána do „{roomName}", + "Dismiss request for assistance" : "Zahodit požadavek o asistenci", + "Send message to room" : "Odeslat zprávu do místnosti", + "Back to main room" : "Zpět do hlavní místnosti", + "Back to your room" : "Zpátky do vaší místnosti", + "Message all rooms" : "Poslat zprávu do všech místností", + "Start session" : "Zahájení relace", + "Start a call before you start a breakout room session" : "Zahajte hovor předtím, než spustíte relaci přestávkové místnosti", + "Stop session" : "Ukončení relace", + "The message was sent to all breakout rooms" : "Zpráva byla zaslána do všech přestávkových místností", + "Send a message to all breakout rooms" : "Poslat zprávu do všech přestávkových místností", + "Breakout rooms are not started" : "Přestávkové místnosti nejsou spuštěné", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Hovory bez podpůrné vrstvy pro vysoký výkon mohou způsobovat problémy s připojením k Internetu a vytěžovat zařízení. {linkstart}Zjistěte více{linkend}", + "Talk setup incomplete" : "Neúplné nastavení Talk", + "Disable lobby" : "Zavřít čekárnu", + "Settings for participant \"{user}\"" : "Nastavení pro účastníka „{user}“", + "Participant \"{user}\"" : "Účastník „{user}“", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "host", + "Ringing …" : "Vyzvánění", + "Call rejected" : "Hovor odmítnut", + "{time} talking …" : "{time} mluvení …", + "{time} talking time" : "{time} doba mluvení", + "Raised their hand" : "Hlásí se", + "Joined with video" : "Připojen(a) s obrazem", + "Joined via phone" : "Připojen(a) telefonem", + "Joined with audio" : "Připojen(a) se zvukem", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Je třeba, aby délka textu byla kratší nebo rovna {maxLength} znaků. Váš stávající text je dlouhý {charactersCount} znaků.", + "Remove group and members" : "Odebrat skupinu a její členy", + "Remove team and members" : "Odebrat tým a uživatele", + "Remove participant" : "Odebrat účastníka", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Opravdu chcete skupinu „{displayName}“ a její členy odebrat z této konverzace?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Opravdu chcete tým „{displayName}“ a jeho členy odebrat z této konverzace?", + "Do you really want to remove {displayName} from this conversation?" : "Opravdu chcete {displayName} odebrat z této konverzace?", + "Notification was sent to {displayName}" : "Upozornění bylo odesláno uživateli {displayName}", + "Could not send notification to {displayName}" : "Nedaří se odeslat upozornění uživateli {displayName}", + "Permissions granted to {displayName}" : "Oprávnění uděleno pro {displayName}", + "Could not modify permissions for {displayName}" : "Nedaří se upravit oprávnění uživateli {displayName}", + "Permissions removed for {displayName}" : "Oprávnění odebrána uživateli {displayName}", + "Permissions set to default for {displayName}" : "Oprávnění pro uživatele {displayName} nastavena na výchozí hodnoty", + "Phone number could not be hung up" : "Hovor na telefonní číslo se nepodařilo zavěsit", + "Phone number could not be put on hold" : "Hovor na telefonní číslo se nepodařilo pozastavit", + "Phone number could not be muted" : "Hovor na telefonní číslo se nepodařilo ztlumit", + "Phone number could not be unmuted" : "Nepodařilo se zrušit ztlumení hovoru na telefonní číslo", + "DTMF message could not be sent" : "DTMF zprávu se nepodařilo odeslat", + "Phone number copied to clipboard" : "Telefonní číslo zkopírováno do schránky", + "Phone number could not be copied" : "Telefonní číslo se nepodařilo zkopírovat", + "in the lobby" : "v čekárně", + "Dial out phone" : "Zavolat na telefon", + "Hang up phone" : "Zavěsit telefon", + "Move back to lobby" : "Přesunout zpět do čekárny", + "Move to conversation" : "Přesunout do konverzace", + "Dial-in PIN" : "PIN kód pro dovolání se", + "Demote from moderator" : "Odebrat práva moderátora", + "Promote to moderator" : "Udělit práva moderátora", + "Resend invitation" : "Znovu poslat pozvánku", + "Send call notification" : "Odeslat upozornění na hovor", + "Dial out phone number" : "Telefonní číslo, na které zavolat", + "Resume call for phone number" : "Pokračovat v hovoru s telefonním číslem", + "Put phone number on hold" : "Pozastavit hovor s telefonním číslem", + "Unmute phone number" : "Zrušit ztlumení telefonního čísla", + "Mute phone number" : "Ztlumit z telefonního čísla", + "Copy phone number" : "Zkopírovat telefonní číslo", + "Reset custom permissions" : "Vrátit uživatelsky určená oprávnění na výchozí hodnoty", + "Grant all permissions" : "Udělit veškerá oprávnění", + "Remove all permissions" : "Odebrat veškerá oprávnění", + "Also ban from this conversation" : "Také vyloučit z této konverzace", + "Internal note (reason to ban)" : "Interní poznámka (důvod pro vyloučení)", + "Remove" : "Odebrat", + "Permissions modified for {displayName}" : "Oprávnění upravena uživateli {displayName}", + "Add users, groups or teams" : "Přidat uživatele, skupiny nebo týmy", + "Add users or groups" : "Přidat uživatele nebo skupiny", + "Add users or teams" : "Přidat uživatele nebo týmy", + "Add users" : "Přidat uživatele", + "Add groups or teams" : "Přidat skupiny nebo týmy", + "Add groups" : "Přidat skupiny", + "Add teams" : "Přidat týmy", + "Add other sources" : "Přidat další zdroje", + "Add emails" : "Přidat e-maily", + "Integrations" : "Napojení", + "Add federated users" : "Přidat federované uživatele", + "Searching …" : "Hledání …", + "Search for more users" : "Hledat další uživatele", + "You can search or add participants via name, email, or Federated Cloud ID" : "Účastníky je možné vyhledávat nebo přidávat prostřednictvím jména, e-mailu nebo identifikátoru v rámci federovaného cloudu", + "Search or add participants" : "Vyhledat nebo přidat účastníky", + "Invitation was sent to {actorId}" : "Odeslána pozvánka pro {actorId}", + "An error occurred while adding the participants" : "Při přidávání účastníků došlo k chybě", + "A new group conversation with selected participant will be created" : "Bude vytvořena nová skupinová konverzace s vybraným účastníkem", + "Participants" : "Účastníci", + "Pinned by a deleted user" : "Připnuto smazaným uživatelem", + "Participants ({count})" : "Účastníci ({count})", + "Open chat" : "Otevřít chat", + "You have new unread messages in the chat." : "Máte nové nepřečtené zprávy v chatu.", + "You have been mentioned in the chat." : "Byli jste zmíněni v chatu.", + "Search messages" : "Hledat zprávy", + "Chat" : "Chat", + "Details" : "Podrobnosti", + "Shared items" : "Sdílené položky", + "Search in {name}" : "Hledat v {name}", + "Threads in {name}" : "Vlákna v {name}", + "{actor} in {conversation}" : "{actor} v {conversation}", + "Search messages …" : "Hledat ve zprávách …", + "Search options" : "Možnosti vyhledávání", + "From User" : "Od uživatele", + "Since" : "Už od", + "Until" : "Do", + "No results found" : "Nic nenalezeno", + "Load more results" : "Načíst další výsledky", + "Recent threads" : "Nedávná vlákna", + "Projects" : "Projekty", + "No shared items" : "Žádné sdílené položky", + "Thread notifications" : "Notifikace ohledně vlákna", + "Thread actions" : "Akce ohledně vlákna", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Odkaz na konverzaci", + "No open conversations found" : "Nenalezeny žádné všem přístupné konverzace", + "Either there are no open conversations or you joined all of them." : "Buď zde nejsou žádné všem přístupné konverzace, nebo už jste se přidali do všech z nich.", + "Check spelling or use complete words." : "Zkontrolovat pravopis nebo doplňovat slova.", + "Search conversations or users" : "Hledat konverzace nebo uživatele", + "Select conversation" : "Vybrat konverzaci", + "Number length is not valid" : "Délka čísla není platná", + "Region code is not valid" : "Kód oblasti není platný", + "Number length is too short" : "Číslo je příliš krátké", + "Number length is too long" : "Číslo je příliš dlouhé", + "Number is not valid" : "Číslo není platné", + "Phone numbers" : "Telefonní čísla", + "Display name: {name}" : "Zobrazované jméno: {name}", + "Edit display name" : "Upravit zobrazovaný název", + "Display name (required)" : "Zobrazované jméno (vyžadováno)", + "Save name" : "Uložit název", + "I picked message bubbles" : "Vybral/a jsem bubliny zpráv", + "I picked the list style" : "Vybral jsem si styl seznamu", + "Error while setting personal setting" : "Chyba při nastavování osobních nastavení", + "Error while saving sounds setting" : "Chyba při ukládání nastavení zvuku", + "Compact conversations list" : "Zhuštěný seznam konverzací", + "Chat appearance" : "Vzhled chatu", + "Messages list" : "Seznam zpráv", + "Message bubbles" : "Bubliny zpráv", + "Play sounds when participants join or leave a call" : "Přehrát zvuky oznámení když se účastníci připojí nebo odpojí", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Z důvodu technických omezení, zavedených jejich výrobcem, není v současnosti na zařízeních iPad a iPhone k dispozici", + "Notification settings" : "Nastavení upozorňování", + "Sounds for chat and call notifications" : "Zvuky pro notifikace na chat a volání", + "Invalid language ({languageId})" : "Neplatný jazyk ({languageId})", + "Default language" : "Výchozí jazyk", + "Default language ({languageName})" : "Výchozí jazyk ({languageName})", + "Error when trying to load the available live translation languages" : "Chyba při pokusu o načtení jazyků, dostupných pro průběžný překlad", + "Error when trying to set live translation language" : "Chyba při pokusu o nastavení jazyka průběžného překladu", + "Set language used to show the transcriptions" : "Nastavit jazyk použitý pro zobrazení přepisu do textu", + "Select location for attachments" : "Vyberte umístění pro přílohy", + "Error while setting attachment folder" : "Chyba při nastavování složky pro přílohy", + "Error while setting read status privacy" : "Chyba při nastavování oznámení o přečtení", + "Error while setting typing status privacy" : "Chyba při nastavování soukromí pro stav psaní", + "Error while setting default media state" : "Chyba při nastavování výchozího stavu média", + "Turn camera and microphone off by default" : "Ve výchozím stavu vypnout kameru a mikrofon", + "Blur camera background by default" : "Rozmazávat pozadí záběru z kamery už ve výchozím stavu", + "Skip device preview before joining a call" : "Před připojením se k hovoru přeskočit náhled ze zařízení", + "Appearance & Sounds" : "Vzhled a zvuky", + "Privacy" : "Soukromí", + "Send read receipts" : "Odeslat potvrzení o přečtení", + "When off, all read statuses will be hidden" : "Pokud vypnuto, všechny přečtené stavy budou skryté", + "Share typing status" : "Sdílet stav psaní", + "When off, all typing indicators will be hidden" : "Pokud vypnuto, veškeré indikátory psaní budou skryté", + "Attachments folder" : "Složka s přílohami", + "Toggle full screen" : "Vyp/zap. zobrazení na celou obrazovku", + "Return to Home screen" : "Vrátit se na domovskou obrazovku", + "Search" : "Hledat", + "Shortcuts while in a chat" : "Zkratky při používání chatu", + "Focus the chat input" : "Zaměřit okno psaní chatu", + "Unfocus the chat input to use shortcuts" : "Abyste mohli použít klávesové zkratky, je třeba zrušit zaměření psaní v chatu", + "Edit your last message" : "Upravit svou poslední zprávu", + "Shortcuts while in a call" : "Klávesové zkratky při volání", + "Camera on and off" : "Kamera zapnout a vypnout", + "Microphone on and off" : "Mikrofon zapnout a vypnout", + "Raise or lower hand" : "Hlásit se nebo přestat", + "Push to talk or push to mute" : "Stisknout a držet pro mluvení či naopak pro odmlčení se - podle předchozího stavu mikrofonu", + "Zoom-in / zoom-out a screen share" : "Přiblížit/oddálit sdílení obrazovky", + "Mouse wheel" : "Kolečko myši", + "Start call silently" : "Zahájit hovor tiše", + "Start call" : "Zavolat", + "End call" : "Ukončit hovor", + "The server was updated, you cannot start or join a call." : "Server byl zaktualizován – nemůžete zahájit nebo se připojit do volání.", + "This call has just ended" : "Tento hovor právě skončil", + "You will be able to join the call only after a moderator starts it." : "K hovoru se budete moci připojit až poté, co ho moderátor zahájí.", + "End call for everyone" : "Ukončit hovor pro všechny", + "Starting the recording" : "Zahájit nahrávání", + "Recording" : "Zaznamenávání", + "The call has been running for one hour." : "Hovor trvá už hodinu.", + "Cancel recording start" : "Zrušit zahajování nahrávání", + "Stop recording" : "Zastavit nahrávání", + "Send a reaction" : "Poslat reakci", + "React with {reaction}" : "Zareagovat s {reaction}", + "All tasks done!" : "Všechny úkoly hotové!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n úkolu","{done} z %n úkolů","{done} z %n úkolů","{done} z %n úkolů"], + "Add participants to this call" : "Přidat účastníky do tohoto hovoru", + "_%n participant in call_::_%n participants in call_" : ["%n účastník hovoru","%n účastníci hovoru","%n účastníků hovoru","%n účastníci hovoru"], + "Scheduled messages" : "Naplánované zprávy", + "You are not allowed to enable screensharing" : "Nemáte oprávnění zapnout sdílení obsahu vaší obrazovky", + "No screensharing" : "Obrazovka není sdílena", + "Screensharing options" : "Možnosti sdílení obrazovky", + "Enable screensharing" : "Povolit sdílení obrazovky", + "Bad sent video and screen quality." : "Špatná technická kvalita odesílaného videa a obsahu obrazovky.", + "Bad sent screen quality." : "Špatná technická kvalita odesílání obsahu obrazovky.", + "Bad sent video quality." : "Špatná kvalita odesílaného videa.", + "Bad sent audio, video and screen quality." : "Špatná technická kvalita odesílaného zvuku, videa a obsahu obrazovky.", + "Bad sent audio and screen quality." : "Špatná technická kvalita odesílaného zvuku a sdílení obsahu obrazovky.", + "Bad sent audio and video quality." : "Špatná kvalita odesílaného zvuku a videa.", + "Bad sent audio quality." : "Špatná kvalita odesílaného zvuku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také nemusí vidět obsah vaší obrazovky. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video či vypnout rozmazání pozadí.", + "Disable background blur" : "Vypnout rozmazávání pozadí za vámi", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci vaši obrazovku možná neuvidí. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci možná obsah vaší obrazovky neuvidí.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaše připojení k Internetu nebo počítač je zahlcené – ostatní účastníci vás možná neuvidí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video či vypnout rozmazání pozadí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste po dobu sdílení obsahu obrazovky přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také nemusí vidět obsah vaší obrazovky. Pro zlepšení situace zkuste přestat sdílet obsah obrazovky.", + "Disable screenshare" : "Vypnout sdílení obrazovky", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste přestat vysílat video či vypnout rozmazání pozadí.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná. Také vás nemusí vidět. Pro zlepšení situace zkuste přestat vysílat video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaše připojení k Internetu nebo počítač je zahlcené – vaše řeč může být pro ostatní účastníky nesrozumitelná.", + "Screen sharing is not supported by your browser." : "Sdílení obrazovky není vaším prohlížečem podporováno.", + "Screen sharing requires the page to be loaded through HTTPS." : "Sdílení obrazovky vyžaduje, aby byla stránka načtena přes HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Sdílení obrazovky vyžaduje, aby byla stránka načtena přes HTTPS.", + "An error occurred while starting screensharing." : "Při zahajování sdílení obrazovky došlo k chybě.", + "Select virtual background" : "Vybrat virtuální pozadí", + "Show your screen" : "Zobrazit vaši obrazovku", + "Stop screensharing" : "Přestat sdílet obrazovku", + "Mute others" : "Ztlumit ostatní", + "Start recording" : "Zahájit nahrávání", + "Set up breakout rooms" : "Nastavit přestávkové místnosti", + "Download attendance list" : "Stáhnout si seznam účastníků", + "Open Calendar" : "Otevřít kalendář", + "Remove participant {name}" : "Odebrat účastníka {name}", + "Would you like to delete this conversation?" : "Chcete tuto konverzaci smazat?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dne neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity.","Tato konverzace bude automaticky smazána pro kohokoli po uplynutí %n dnů neaktivity."], + "Are you sure you want to delete this conversation?" : "Opravdu chcete tuto konverzaci smazat?", + "Delete now" : "Smazat nyní", + "Keep" : "Ponechat", + "Open dialpad" : "Otevřít číselník", + "Select a region" : "Vyberte oblast", + "Local time: {time}" : "Místní čas: {time}", + "Scheduled {datetime}" : "Naplánováno {datetime}", + "Scheduled for {datetime}" : "Naplánováno na {datetime}", + "Search …" : "Hledat …", + "Message without mention" : "Zprávy, ve kterých nezmíněno", + "Mention myself" : "Zmínit sebe sama", + "Mention everyone" : "Zmínit všechny", + "Select a conversation" : "Vybrat konverzaci", + "Select a mode" : "Vyberte režim", + "You do not have permissions to access this conversation." : "Nemáte oprávnění pro přístup k této konverzaci.", + "Join a different conversation or start a new one." : "Připojte se k jiné konverzaci, nebo začněte novou.", + "The conversation does not exist" : "Konverzace neexistuje", + "Join a conversation or start a new one!" : "Připojte se ke konverzaci nebo zahajte novou", + "Duplicate session" : "Zduplikovat sezení", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Tato konverzace byla otevřena v jiném panelu. Stávající verze serveru nepodporuje otevírání konverzace ve vícero panelech.", + "Creating and joining a conversation with \"{userid}\"" : "Vytváření a vstupování do konverzace s „{userid}“", + "Join a conversation or start a new one" : "Připojte se ke konverzaci, nebo začněte novou", + "Error while joining the conversation" : "Chyba při připojování do konverzace", + "Another user" : "Jiný uživatel", + "Hey! Are you using the list style or message bubbles?" : "Hej! Používáte styl seznamu nebo bubliny zpráv?", + "Nextcloud URL" : "URL adresa Nextcloud", + "Nextcloud user" : "Uživatel Nextcloud", + "User password" : "Heslo uživatele", + "Talk conversation" : "Konverzace v Talk", + "Skip TLS verification" : "Přeskočit ověřování TLS", + "Matrix server URL" : "URL adresa Matrix serveru", + "User" : "Uživatel", + "Matrix channel" : "Matrix kanál", + "Mattermost server URL" : "URL adresa Mattermost serveru", + "Mattermost user" : "Uživatel v Mattermost", + "Team name" : "Název týmu", + "Channel name" : "Název kanálu", + "Rocket.Chat server URL" : "URL adresa Rocket.Chat serveru", + "User name or email address" : "Uživ. jméno nebo e-mail", + "Rocket.Chat channel" : "Rocket.Chat kanál", + "Zulip server URL" : "URL adresa Zulip serveru", + "Bot user name" : "Uživatelské jméno bota", + "Bot API key" : "Klíč k aplikačnímu program. rozhraní pro bota", + "Zulip channel" : "Zulip kanál", + "API token" : "Token do aplikačního program. rozhraní (API)", + "Slack channel" : "Slack kanál", + "Server ID or name" : "Identif. nebo název serveru", + "Channel ID (prefixed with \"ID:\") or name" : "Identif. kanálu (předeslaný „ID:“) nebo název", + "Channel" : "Kanál", + "Login" : "Přihlašovací jméno", + "Chat ID" : "Identif. chatu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL adresa IRC serveru (např. chat.freenode.net:6667)", + "Nickname" : "Přezdívka", + "Connection password" : "Heslo k připojení", + "IRC channel" : "IRC kanál", + "Channel password" : "Heslo kanálu", + "NickServ nickname" : "Přezdívka na NickServ", + "NickServ password" : "Heslo k NickServ", + "Use TLS" : "Použít TLS", + "Use SASL" : "Použít SASL", + "Tenant ID" : "Identif. nájemce", + "Client ID" : "Identif. klienta", + "Team ID" : "Identifikátor týmu", + "Thread ID" : "Identif. vlákna", + "XMPP/Jabber server URL" : "URL adresa XMPP/Jabber serveru", + "MUC server URL" : "URL adresa MUC serveru", + "Jabber ID" : "Jabber identif.", + "Pinned messages" : "Připnuté zprávy", + "Media" : "Média", + "Polls" : "Ankety", + "Deck cards" : "Karty aplikace Deck", + "Voice messages" : "Hlasové zprávy", + "Locations" : "Polohy", + "Call recordings" : "Nahrávky hovoru", + "Audio" : "Zvuk", + "Show all pinned messages" : "Zobrazit všechny připnuté zprávy", + "Show all media" : "Zobrazit veškerá média", + "Show all files" : "Zobrazit všechny soubory", + "Show all polls" : "Zobrazit veškeré ankety", + "Show all deck cards" : "Zobrazit všechny karty aplikace Deck", + "Show all voice messages" : "Zobrazit všechny hlasové zprávy", + "Show all locations" : "Zobrazit všechny polohy", + "Show all call recordings" : "Zobrazit veškeré nahrávky hovorů", + "Show all audio" : "Zobrazit všechno audio", + "Show all other" : "Zobrazit všechno ostatní", + "Follow conversation settings" : "Nastavení následování konverzace", + "Group" : "Skupina", + "Team" : "Tým", + "You reconnected to the call" : "Připojili jste se zpět k hovoru", + "{actor} reconnected to the call" : "{actor} se připojil(a) zpět k hovoru", + "You added {user0} and {user1}" : "Přidali jste {user0} a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Přidali jste {user0}, {user1} a %n dalšího účastníka","Přidali jste {user0}, {user1} a %n další účastníky","Přidali jste {user0}, {user1} a %n dalších účastníků","Přidali jste {user0}, {user1} a %n další účastníky"], + "An administrator added you and {user0}" : "Správce přidal vás a {user0}", + "{actor} added you and {user0}" : "{actor} přidal(a) vás a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Správce přidal vás, {user0} a %n dalšího účastníka","Správce přidal vás, {user0} a %n další účastníky","Správce přidal vás, {user0} a %n dalších účastníků","Správce přidal vás, {user0} a %n další účastníky"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} přidal(a) vás, {user0} a %n dalšího účastníka","{actor} přidal(a) vás, {user0} a %n další účastníky","{actor} přidal(a) vás, {user0} a %n dalších účastníků","{actor} přidal(a) vás, {user0} a %n další účastníky"], + "An administrator added {user0} and {user1}" : "Správce přidal {user0} a {user1}", + "{actor} added {user0} and {user1}" : "{actor} přidal(a) {user0} a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Správce přidal {user0}, {user1} a %n dalšího účastníka","Správce přidal {user0}, {user1} a %n další účastníky","Správce přidal {user0}, {user1} a %n dalších účastníků","Správce přidal {user0}, {user1} a %n další účastníky"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} přidal(a) {user0}, {user1} a %n dalšího účastníka","{actor} přidal(a) {user0}, {user1} a %n další účastníky","{actor} přidal(a) {user0}, {user1} a %n dalších účastníků","{actor} přidal(a) {user0}, {user1} a %n další účastníky"], + "You removed {user0} and {user1}" : "Odebrali jste {user0} a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Odebrali jste {user0}, {user1} a %n dalšího účastníka","Odebrali jste {user0}, {user1} a %n další účastníky","Odebrali jste {user0}, {user1} a %n dalších účastníků","Odebrali jste {user0}, {user1} a %n další účastníky"], + "An administrator removed you and {user0}" : "Správce odebral vás „{user0}“", + "{actor} removed you and {user0}" : "{actor} odebral(a) vás a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Správce odebral vás, {user0} a %n dalšího účastníka","Správce odebral vás, {user0} a %n další účastníky","Správce odebral vás, {user0} a %n dalších účastníků","Správce odebral vás, {user0} a %n další účastníky"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} odebral(a) vás, {user0} a %n dalšího účastníka","{actor} odebral(a) vás, {user0} a %n další účastníky","{actor} odebral(a) vás, {user0} a %n dalších účastníků","{actor} odebral(a) vás, {user0} a %n další účastníky"], + "An administrator removed {user0} and {user1}" : "Správce odebral {user0} a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} odebral(a) {user0} a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Správce odebral {user0}, {user1} a %n dalšího účastníka","Správce odebral {user0}, {user1} a %n další účastníky","Správce odebral {user0}, {user1} a %n dalších účastníků","Správce odebral {user0}, {user1} a %n další účastníky"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} odebral(a) {user0}, {user1} a %n dalšího účastníka","{actor} odebral(a) {user0}, {user1} a %n další účastníky","{actor} odebral(a) {user0}, {user1} a %n dalších účastníků","{actor} odebral(a) {user0}, {user1} a %n další účastníky"], + "You and {user0} joined the call" : "Vy a {user0} jste se připojili k hovoru", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vy, {user0} a %n další účastník jste se připojili k hovoru","Vy, {user0} a %n další účastníci jste se připojili k hovoru","Vy, {user0} a %n dalších účastníků se připojilo k hovoru","Vy, {user0} a %n další účastníci jste se připojili k hovoru"], + "{user0} and {user1} joined the call" : "{user0} a {user1} se připojili k hovoru", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} a %n další účastník se připojili k hovoru","{user0}, {user1} a %n další účastníci se připojili k hovoru","{user0}, {user1} a %n dalších účastníků se připojilo k hovoru","{user0}, {user1} a %n další účastníci se připojili k hovoru"], + "You and {user0} left the call" : "Vy a {user0} jste opustili hovor", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vy, {user0} a %n další účastník jste opustili hovor","Vy, {user0} a %n další účastníci jste opustili hovor","Vy, {user0} a %n dalších účastníků opustilo hovor","Vy, {user0} a %n další účastníci jste opustili hovor"], + "{user0} and {user1} left the call" : "{user0} a {user1} opustili hovor", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} a %n další účastník opustili hovor","{user0}, {user1} a %n další účastníci opustil hovor","{user0}, {user1} a %n dalších účastníků opustilo hovor","{user0}, {user1} a %n další účastníci opustil hovor"], + "You promoted {user0} and {user1} to moderators" : "Přidali jste {user0} a {user1} práva moderátora", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Udělili jste {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Udělili jste {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "An administrator promoted you and {user0} to moderators" : "Správce vám a {user0} přidal práva moderátora", + "{actor} promoted you and {user0} to moderators" : "{actor} vám a {user0} udělila(a) práva moderátora", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Správce udělil vám, {user0} a %n dalšímu účastníkovi práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora","Správce udělil vám, {user0} a %n dalším účastníkům práva moderátora"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} udělil vám, {user0} a %n dalšímu účastníkovi práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora","{actor} udělil vám, {user0} a %n dalším účastníkům práva moderátora"], + "An administrator promoted {user0} and {user1} to moderators" : "Správce udělil {user0} a {user1} práva moderátorů", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} udělil {user0} a {user1} práva moderátorů", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Správce udělil {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce udělil {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} udělil {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} udělil {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "You demoted {user0} and {user1} from moderators" : "Odebrali jste {user0} a {user1} práva moderátora", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Odebrali jste {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora","Odebrali jste {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "An administrator demoted you and {user0} from moderators" : "Správce vám a {user0} odebral práva moderátora", + "{actor} demoted you and {user0} from moderators" : "{actor} odebral(a) vám a {user0} práva moderátora", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Správce odebral vám, {user0} a %n dalšímu účastníkovi práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora","Správce odebral vám, {user0} a %n dalším účastníkům práva moderátora"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} odebral(a) vám, {user0} a %n dalšímu účastníkovi práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora","{actor} odebral(a) vám, {user0} a %n dalším účastníkům práva moderátora"], + "An administrator demoted {user0} and {user1} from moderators" : "Správce odebral {user0} a {user1} práva moderátora", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} odebral(a) {user0} a {user1} práva moderátorů", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Správce odebral {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora","Správce odebral {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} odebral(a {user0}, {user1} a %n dalšímu účastníkovi práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora","{actor} odebral(a {user0}, {user1} a %n dalším účastníkům práva moderátora"], + "You:" : "Vy:", + "You: {lastMessage}" : "Vy: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Server byl zaktualizován.", + "(edited by you)" : "(upraveno vámi)", + "(edited by a deleted user)" : "(upraveno smazaným uživatelem)", + "(edited by {moderator})" : "(upravil(a) {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pokoušíte se připojit ke konverzaci zatímco máte aktivní relaci v ní v jiném okně nebo zařízení. Toto Nextcloud Talk zatím nepodporuje. Co chcete udělat?", + "Leave this page" : "Opustit tuto stránku", + "Join here" : "Přidat se zde", + "Deck card has been posted to {conversation}" : "Karta v Deck byla uvedena v {conversation}", + "An error occurred while posting deck card to conversation" : "Při odesílání karty aplikace Deck došlo k chybě", + "Post to a conversation" : "Odeslat do konverzace", + "Post to conversation" : "Odeslat do konverzace", + "The recording failed. Please contact your administrator." : "Nahrávání se nezdařilo. Obraťte se na svého správce.", + "Location has been posted to {conversation}" : "Umístění bylo zasláno do {conversation}", + "An error occurred while posting location to conversation" : "Při odesílání polohy do konverzace došlo k chybě", + "Share to a conversation" : "Nasdílet do konverzace", + "Share to conversation" : "Nasdílet do konverzace", + "In conversation" : "V konverzaci", + "Search in conversation: {conversation}" : "Hledat v konverzaci: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Četnost vašich požadavků byla pro tuto chvíli omezena ochranou proti útoku zkoušením všech možných hesel", + "Error while clearing conversation history" : "Chyba při vymazávání historie konverzace", + "Error occurred while allowing guests" : "Při povolování hostů došlo k chybě", + "Error occurred while disallowing guests" : "Při zakazování hostů došlo k chybě", + "Error occurred when restricting the conversation to moderator" : "Při omezování konverzace pouze na moderátora došlo k chybě", + "Error occurred when opening the conversation to everyone" : "Při otevírání konverzace všem došlo k chybě", + "Conversation password has been saved" : "Heslo do konverzace bylo uloženo", + "Conversation password has been removed" : "Heslo do konverzace bylo odebráno", + "Error occurred while saving conversation password" : "Při ukládání hesla konverzace došlo k chybě", + "Call recording is starting." : "Nahrávání hovoru se spouští.", + "Call recording stopped while starting." : "Pořizování nahrávky z hovoru se při spouštění zastavilo.", + "Call recording stopped. You will be notified once the recording is available." : "Nahrávání hovoru zastaveno. Budete upozorněni jakmile bude nahrávka k dispozici.", + "Conversation picture set" : "Obrázek konverzace nastaven", + "Conversation picture deleted" : "Obrázek konverzace smazán", + "Could not delete the conversation picture" : "Nepodařilo se smazat obrázek konverzace", + "Could not remove the automatic expiration" : "Nebylo možné odebrat automatické skončení platnosti", + "Could not post message: {errorMessage}" : "Zprávu se nedaří odeslat: {errorMessage}", + "Participant is banned successfully" : "Účastní je úspěšně vyloučen", + "Error while banning the participant" : "Chyba při vylučování účastníka", + "An error occurred while fetching the participants" : "Došlo k chybě při získávání seznamu účastníků", + "Could not send invitation to {actorId}" : "Nebylo možné poslat pozvánku pro {actorId}", + "Invitations sent" : "Pozvánky rozeslány", + "Error occurred when sending invitations" : "Při rozesílání pozvánek došlo k chybě", + "Failed to join the conversation." : "Nepodařilo se připojit do konverzace.", + "An error occurred while creating breakout rooms" : "Došlo k chybě při vytváření přestávkových místností", + "An error occurred while re-ordering the attendees" : "Při přeuspořádávání účastníků došlo k chybě", + "An error occurred while deleting breakout rooms" : "Došlo k chybě při mazání přestávkových místností", + "An error occurred while starting breakout rooms" : "An error occurred while spouštění breakout rooms", + "An error occurred while stopping breakout rooms" : "Došlo k chybě při zastavování přestávkových místností", + "An error occurred while sending a message to the breakout rooms" : "Došlo k chybě při posílání zpráv do přestávkových místností", + "An error occurred while requesting assistance" : "Při žádosti o asistenci došlo k chybě", + "An error occurred while resetting the request for assistance" : "Při resetování žádosti o asistenci došlo k chybě", + "An error occurred while joining breakout room" : "Došlo k chybě při připojování se do přestávkové místnosti", + "Failed to rename the thread" : "Nepodařilo se přejmenovat vlákno", + "Error fetching upcoming events" : "Chyba při získávání nadcházejících událostí", + "Error fetching upcoming reminders" : "Chyba při získávání nadcházejících připomínek", + "An error occurred while accepting an invitation" : "Došlo k chybě při přijímání pozvánky", + "An error occurred while rejecting an invitation" : "Došlo k chybě při odmítání pozvánky", + "{guest} (guest)" : "{guest} (host)", + "Poll draft has been saved" : "Koncept ankety byl uložen", + "An error occurred while saving the draft" : "Došlo k chybě při ukládání konceptu", + "An error occurred while submitting your vote" : "Při odesílání vašeho hlasu došlo k chybě", + "An error occurred while ending the poll" : "Při uzavírání ankety došlo k chybě", + "An error occurred while deleting the poll draft" : "Došlo k chybě při mazání konceptu ankety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketa „{name}“ byla vytvořena uživatelem {user}. Kliknutím budete hlasovat", + "Failed to add reaction" : "Nepodařilo se přidat reakci", + "Failed to remove reaction" : "Nepodařilo se odebrat reakci", + "The server is in maintenance mode." : "Server se nachází v režimu údržby.", + "Federated server was updated." : "Federovaný server byl zaktualizován.", + "Error while uploading file \"{fileName}\"" : "Chyba při nahrávání „{fileName}“", + "Not enough free space to upload file \"{fileName}\"" : "Nedostatek místa pro nahrání souboru „{fileName}“", + "You are not allowed to share files" : "Ke sdílení souborů nemáte povolení", + "Error while sharing file" : "Chyba při sdílení souboru", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Webový prohlížeč, který používáte, není Nextcloud Talk plně podporován. Prosíme použijte nejnovější verzi Mozilla Firefox, Microsoft Edge, Google Chrome, Opera nebo Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Během %n hodiny","Během %n hodin","Během %n hodin","Během %n hodin"], + "_%n minute _::_%n minutes_" : ["%n minuta ","%n minuty ","%n minut ","%n minuty "], + "In {hours} and {minutes}" : "Za {hours} a {minutes}", + "_In %n minute_::_In %n minutes_" : ["během %n minuty","během %n minut","během %n minut","během %n minut"], + "Later today – {timeLocale}" : "Později dnes – {timeLocale}", + "Set time for later today" : "Nastavit čas na později dnes", + "Tomorrow – {timeLocale}" : "Zítra – {timeLocale}", + "Set time for tomorrow" : "Nastavit čas na zítra", + "This weekend – {timeLocale}" : "Tento víkend – {timeLocale}", + "Set time for this weekend" : "Nastavit čas na tento víkend", + "Next week – {timeLocale}" : "Příští týden – {timeLocale}", + "Set time for next week" : "Nastavit čas na příští týden", + "Message link copied to clipboard" : "Odkaz na zprávu zkopírován do schránky", + "Conversation link copied to clipboard" : "Odkaz na konverzaci zkopírován do schránky", + "The link could not be copied" : "Odkaz se nepodařilo zkopírovat", + "Error while parsing a PROPFIND error" : "Chyba při zpracovávání PROPFIND chyby", + "Sending signaling message has failed" : "Odeslání signálové zprávy se nezdařilo", + "Lost connection to signaling server. Trying to reconnect." : "Ztraceno spojení se signalizačním serverem. Probíhá pokus o opětovné navázání spojení.", + "Lost connection to signaling server." : "Ztraceno spojení se signalizačním serverem", + "Connecting is taking longer than expected …" : "Připojování trvá déle než očekáváno …", + "Failed to connect. Retrying …" : "Nepodařilo se připojit. Zkouší se znovu …", + "Failed to connect. The signaling server may be set up incorrectly" : "Nepodařilo se připojit. Je možné, že signalizační server není správně nastavený", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nastavený signální server je třeba aktualizovat, aby byl kompatibilní s touto verzí Talk. Obraťte se na správu.", + "Please restart the app." : "Restartujte aplikaci.", + "Please reload the page." : "Načtěte stránku znovu.", + "Please try to restart the app." : "Zkuste aplikaci ukončit a spustit znovu.", + "Please try to reload the page." : "Zkuste stránku znovu načíst.", + "Do not disturb" : "Nerušit", + "Away" : "Pryč", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Reproduktor {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Zdá se, že mluvíte a přitom máte ztlumeno – zrušte ztlumení, aby vás ostatní slyšeli", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nedaří se navázat spojení přinejmenším s jedním účastníkem. Pro váš scénář může být zapotřebí TURN server. Požádejte správce o nastavení nějakého podle {linkstart}této dokumentace{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Toto trvá déle než by mělo. Udělili už jste oprávnění pro přístup k médiím (nebo snad zamítli)? Pokud jsou oprávnění udělena, restartujte webový prohlížeč, protože zvuk a video se nedaří", + "Access to microphone & camera is only possible with HTTPS" : "Přístup k mikrofonu a kameře je možný pouze přes HTTPS", + "Please move your setup to HTTPS" : "Přesuňte svou instalaci na HTTPS", + "Access to microphone & camera was denied" : "Přístup k mikrofonu a kameře byl odepřen", + "WebRTC is not supported in your browser" : "Vámi používaný prohlížeč nepodporuje WebRTC", + "Please use a different browser like Firefox or Chrome" : "Použijte jiný prohlížeč, jako třeba Firefox nebo Chrome", + "Error while accessing microphone & camera" : "Chyba při přístupu k mikrofonu a kameře", + "%s Talk on your mobile devices" : "%s Talk na vašich mobilních zařízeních", + "Join conversations at any time, anywhere, on any device." : "Připojte se ke konverzaci kdykoli, kdekoli a z jakéhokoli zařízení.", + "Android app" : "Aplikace pro Android", + "iOS app" : "Aplikace pro iOS", + "__language_name__" : "Čeština", + "Webhook Demo" : "Ukázka webového háčku", + "Call summary (%s)" : "Shrnutí hovoru (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Automat pošle po ukončení hovoru souhrnnou zprávu se seznamem všech účastníků a vytyčením úkolů", + "Tasks" : "Úlohy", + "Notes" : "Poznámky", + "Reports" : "Výkazy", + "Decisions" : "Rozhodnutí", + "Agenda" : "Agenda", + "Call summary" : "Shrnutí hovoru", + "Call summary - {title}" : "Souhrn hovoru – {title}", + "Talk conversation for event" : "Konverzace v Talk pro událost", + "Client Push is installed, this improves the performance of desktop clients." : "Služba klient Push je nainstalovaná a bude zlepšovat výkon klientských aplikací pro počítač.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} není nainstalované – to může vést k problémům s výkonem při používání klientů pro počítač.", + "Next meeting" : "Příští schůzka", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Naplánujte schůzku ze svého kalendáře. Aby se zde ukázala, je třeba konverzaci v Talk nastavit jako umístění", + "Join conversations from remote Nextcloud servers" : "Připojte se do konverzací na vzdálených Nextcloud serverech", + "Your default media state has been saved" : "Váš výchozí stav média byl uložen", + "Set reminder for later today" : "Nastavit připomínku na později dnes", + "Set reminder for tomorrow" : "Nastavit připomínku na zítra", + "Set reminder for this weekend" : "Nastavit připomínku na tento víkend", + "Set reminder for next week" : "Nastavit připomínku pro příští týden", + "Generate summary" : "Vytvořit shrnutí", + "Open poll • You voted already" : "Otevřená anketa ・ Už jste hlasovali", + "Open poll • Click to vote" : "Otevřená anketa ・ Hlasujte kliknutím", + "Poll • Ended" : "Anketa • Ukončeno", + "Talk recording from {time} ({conversation})" : "Záznam z Talk z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Výsledky ankety • %n hlas","Výsledky ankety • %n hlasy","Výsledky ankety • %n hlasů","Výsledky ankety • %n hlasy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otevřená anketa • %n hlas","Otevřená anketa • %n hlasy","Otevřená anketa • %n hlasů","Otevřená anketa • %n hlasy"], + "Submit vote" : "Odeslat hlas", + "Your privacy setting has been saved" : "Vaše nastavení soukromí byla uložena", + "Your personal setting has been saved" : "Vaše osobní nastavení byla uložena", + "Failed to save sounds setting" : "Nastavení zvuků se nepodařilo uložit", + "Sounds setting saved" : "Nastavení zvuku uloženo", + "Always shown if recording consent is required" : "Vždy zobrazováno, pokud je zapotřebí souhlas s nahráváním", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk bylo aktualizováno – nemůžete zahájit hovor nebo se k němu připojit.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ke konverzaci jste se přidali z jiného okna nebo zařízení. Nextcloud zatím nepodporuje souběžná připojení a tak tato relace byla uzavřena.", + "Nextcloud Talk was updated." : "Nextcloud Talk bylo aktualizováno.", + "Nextcloud is in maintenance mode." : "Nextcloud se právě nachází v režimu údržby.", + "Nextcloud Talk Federation was updated." : "Federovaní Nextcloud Talk bylo zaktualizováno.", + "Enable live translation" : "Zapnout překlad v reálném čase", + "I picked list style" : "Vybral/a jsem styl seznamu", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Používáte Talk ve stylu seznamu nebo bublin zpráv?" +},"pluralForm" :"nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;" +} \ No newline at end of file diff --git a/l10n/da.js b/l10n/da.js new file mode 100644 index 0000000..f557a22 --- /dev/null +++ b/l10n/da.js @@ -0,0 +1,896 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "en samtale", + "(Duration %s)" : "(Varighed %s)", + "You attended a call with {user1}" : "Du deltog i et opkald med {user1}", + "_%n guest_::_%n guests_" : ["%n gæst","%n gæster"], + "You attended a call with {user1} and {user2}" : "Du deltog i et opkald med {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du deltog i et opkald med {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du deltog i et opkald med {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du deltog i et opkald med {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["%n andre","%n andre"], + "{actor} invited you to {call}" : "{actor} inviterede dig til {call}", + "You were invited to a conversation or had a call" : "Du var inviteret til en samtale eller fik et opkald", + "Other activities" : "Andre aktiviteter", + "Talk" : "Snak", + "Guest" : "Gæst", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge og Safari kan nu benyttes til at deltage i lyd- og videosamtaler", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-til-en-samtaler er nu vedvarende og kan ikke længere omdannes til gruppesamtaler ved et uheld. Derudover, når en af deltagerne forlader samtalen, slettes samtalen ikke længere automatisk. Kun hvis begge deltagere forlader samtalen, så slettes samtalen fra serveren", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Nu kan nu sende en notifikation til alle deltagere ved at skrive \"@all\" i chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Ved at trykke på \"pil op\" kan du sende din sidste besked igen", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Snak understøtter nu kommandoer. Send \"/help\" som en chat-besked for at se om din administrator har konfigureret nogen", + "- With projects you can create quick links between conversations, files and other items" : "- Med projekter kan du oprette hurtige links mellem samtaler, filer og andre objekter", + "- You can now mention guests in the chat" : "- Du kan nu omtale gæster i samtalen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Samtaler kan nu have en lobby. Dette giver mulighed for at moderatorer kan deltage i samtalen for at forberede mødet, mens almindelige brugere og gæster må vente", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nu svare direkte på beskeder og dermed give andre brugere mere kontekst om hvad din besked handler om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Søgninger efter samtaler og deltagere vil nu også filtrere dine eksisterende samtaler, hvilke gør det meget nemmere at finde tidligere samtaler", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nu tilføje brugerdefinerede brugergrupper til samtaler når cirkel-appen er installeret", + "- Check out the new grid and call view" : "- Tjek den nye gitter og opkaldsvisning", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Du kan nu uploade og trække og slippe filer direkte fra din enhed til chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delte filer åbnes nu direkte inde i chatvisningen med fremviserapps", + "- You can now search for chats and messages in the unified search in the top bar" : "- Du kan nu søge efter chats og beskeder i den samlede søgning i den øverste bjælke", + "- Spice up your messages with emojis from the emoji picker" : "- Krydr dine beskeder med emojis fra emojivælgeren", + "- You can now change your camera and microphone while being in a call" : "- Du kan nu skifte kamera og mikrofon, mens du er i et opkald", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Giv dine samtaler en vis kontekst med en beskrivelse, og åbn den, så brugere der er logget på kan finde den og deltage selv", + "- See a read status and send failed messages again" : "- Se en læst status og send mislykkede beskeder igen", + "- Raise your hand in a call with the R key" : "- Ræk hånden op i et opkald med R-tasten", + "- Join the same conversation and call from multiple devices" : "- Deltag i den samme samtale og opkald fra flere enheder", + "- Send voice messages, share your location or contact details" : "- Send talebeskeder, del din placering eller kontaktoplysninger", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Føj grupper til en samtale, og nye gruppemedlemmer vil automatisk blive tilføjet som deltagere", + "- A preview of your audio and video is shown before joining a call" : "- En forhåndsvisning af din lyd og video vises, før du deltager i et opkald", + "- You can now blur your background in the newly designed call view" : "- Du kan nu sløre din baggrund i den nydesignede opkaldsvisning", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nu tildele generelle og individuelle tilladelser til deltagere", + "- In the sidebar you can now find an overview of the latest shared items" : "- I sidebjælken kan du nu finde en oversigt over de seneste delte elementer", + "- Use a poll to collect the opinions of others or settle on a date" : "- Brug en meningsmåling til at indsamle andres meninger eller til at vælge en dato", + "- Configure an expiration time for chat messages" : "- Konfigurer en udløbstid for chatbeskeder", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start opkald uden at underrette andre i store samtaler. Du kan sende individuelle opkaldsmeddelelser, når opkaldet er startet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chatbeskeder uden at give modtagerne besked, hvis det ikke haster", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link forskellige elementer ved at bruge den nye Smart Vælger ved at taste \"/\"", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nu bandlyse konti og gæster for at forhindre dem i at gen-deltage i en samtale", + "Talk updates ✅" : "Snak opdateringer ✅", + "Reaction deleted by author" : "Reaktion slettet af forfatter", + "{actor} created the conversation" : "{actor} oprettede samtalen", + "You created the conversation" : "Du oprettede samtalen", + "System created the conversation" : "Systemet oprettede samtalen", + "An administrator created the conversation" : "En administrator oprettede samtalen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administrator omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "{actor} set the description" : "{actor} satte beskrivelsen", + "You set the description" : "Du satte beskrivelsen", + "An administrator set the description" : "En administrator satte beskrivelsen", + "{actor} removed the description" : "{actor} fjernede beskrivelsen", + "You removed the description" : "Du fjernede beskrivelsen", + "An administrator removed the description" : "En administrator fjernede beskrivelsen", + "You started a call" : "Du startede et opkald", + "{actor} started a call" : "{actor} startede et opkald", + "{actor} joined the call" : "{actor} deltog i opkaldet", + "You joined the call" : "Du deltog i opkaldet", + "{actor} left the call" : "{actor} forlod opkaldet", + "You left the call" : "Du forlod opkaldet", + "{actor} unlocked the conversation" : "{actor} låste op for samtalen", + "You unlocked the conversation" : "Du låste op for samtalen", + "An administrator unlocked the conversation" : "En administrator låste samtalen op", + "{actor} locked the conversation" : "{actor} låste samtalen", + "You locked the conversation" : "Du låste samtalen", + "An administrator locked the conversation" : "En administrator låste samtalen", + "{actor} limited the conversation to the current participants" : "{actor} begrænsede samtalen til de nuværende deltagere", + "You limited the conversation to the current participants" : "Du begrænsede samtalen til de nuværende deltagere", + "An administrator limited the conversation to the current participants" : "En administrator begrænsede samtalen til de nuværende deltagere", + "{actor} opened the conversation to registered users" : "{actor} åbnede samtalen for registrerede brugere", + "You opened the conversation to registered users" : "Du åbnede samtalen for registrerede brugere", + "An administrator opened the conversation to registered users" : "En administrator åbnede samtalen for registrerede brugere", + "The conversation is now open to everyone" : "Samtalen er nu åben for alle", + "{actor} opened the conversation to everyone" : "{actor} åbnede samtalen for alle", + "You opened the conversation to everyone" : "Du åbnede samtalen for alle", + "{actor} restricted the conversation to moderators" : "{actor} begrænsede samtalen til moderatorer", + "You restricted the conversation to moderators" : "Du begrænsede samtalen til moderatorer", + "{actor} started breakout rooms" : "{actor} started breakout rum", + "You started breakout rooms" : "Du startede et breakout rum", + "{actor} stopped breakout rooms" : "{actor} stoppede breakout rum", + "You stopped breakout rooms" : "Du stoppede breakout rum", + "{actor} allowed guests" : "{actor} tillod gæster", + "You allowed guests" : "Du tillod gæster", + "An administrator allowed guests" : "En administrator tillod gæster", + "{actor} disallowed guests" : "{actor} forbød gæster", + "You disallowed guests" : "Du forbød gæster", + "An administrator disallowed guests" : "En administrator afviste gæster", + "{actor} set a password" : "{actor} indstillede en adgangskode", + "You set a password" : "Du indstillede en adgangskode", + "An administrator set a password" : "En administrator satte et kodeord", + "{actor} removed the password" : "{actor} fjernede adgangskoden", + "You removed the password" : "Du fjernede adgangskoden", + "An administrator removed the password" : "En administrator fjernede kodeordet", + "{actor} added {user}" : "{actor} tilføjede {user}", + "You joined the conversation" : "Du deltog i samtalen", + "{actor} joined the conversation" : "{actor} deltog i samtalen", + "You added {user}" : "Du tilføjede {user}", + "{actor} added you" : "{actor} tilføjede dig", + "An administrator added you" : "En administrator tilføjede dig", + "An administrator added {user}" : "En administrator tilføjede {user}", + "You left the conversation" : "Du forlod samtalen", + "{actor} left the conversation" : "{actor} forlod samtalen", + "{actor} removed {user}" : "{actor} fjernede {user}", + "You removed {user}" : "Du fjernede {user}", + "{actor} removed you" : "{actor} fjernede dig", + "An administrator removed you" : "En administrator fjernede dig", + "An administrator removed {user}" : "En administrator fjernede {user}", + "{federated_user} accepted the invitation" : "{federated_user} tog imod invitationen", + "{actor} removed {federated_user}" : "{actor} fjernede {federated_user}", + "You removed {federated_user}" : "Du fjernede {federated_user}", + "An administrator removed {federated_user}" : "En administrator fjernede {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} afviste invitationen", + "{actor} added group {group}" : "{actor} tilføjede gruppen {group}", + "You added group {group}" : "Du tilføjede en gruppen {group}", + "An administrator added group {group}" : "En administrator tilføjede gruppen {group}", + "{actor} removed group {group}" : "{actor} fjernede gruppen {group}", + "You removed group {group}" : "Du fjernede gruppen {group}", + "An administrator removed group {group}" : "En administrator fjernede gruppen {group}", + "{actor} promoted {user} to moderator" : "{actor} forfremmede {user} til moderator", + "You promoted {user} to moderator" : "Du forfremmede {user} til moderator", + "{actor} promoted you to moderator" : "{actor} forfremmede dig til moderator", + "{actor} demoted {user} from moderator" : "{actor} degraderede {user} fra moderator", + "You demoted {user} from moderator" : "Du degraderede {user} fra moderator", + "{actor} demoted you from moderator" : "{actor} degraderede dig fra moderator", + "{actor} shared a file which is no longer available" : "{actor} delte en fil, der ikke længere er tilgængelig", + "You shared a file which is no longer available" : "Du delte en fil, der ikke længere er tilgængelig", + "You cleared the history of the conversation" : "Du ryddede samtalens historik", + "Message deleted by author" : "Beskeden er slettet af forfatteren", + "Message deleted by you" : "Besked slettet af dig", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (gæst)", + "Talk conversations" : "Snak samtaler", + "Talk to %s" : "Snak med %s", + "Storage quota exceeded" : "Lagringskvote overskredet", + "File not found" : "Filen blev ikke fundet", + "File is not shared, or shared but not with the user" : "Filen er ikke delt, eller den er delt men ikke med brugeren", + "Poll" : "Afstemning", + "File is too big" : "Filen er for stor", + "Invalid file provided" : "Der er angivet en ugyldig fil", + "Invalid image" : "Ugyldigt billede", + "Unknown filetype" : "Ukendt filtype", + "Talk mentions" : "Snak omtaler", + "Say hi to your friends and colleagues!" : "Sig hej til dine venner og kollegaer.", + "No unread mentions" : "Ingen ulæste omtaler", + "Call in progress" : "Opkald i gang", + "Write to conversation" : "Skriv til samtale", + "Writes event information into a conversation of your choice" : "Skriver begivenhedsinformation i en samtale du vælger", + "Conversation invitation" : "Invitation til samtale", + "Description" : "Beskrivelse", + "Meeting" : "Møde", + "Password request: %s" : "Adgangskode-forespørgsel: %s", + "Private conversation" : "Privat samtale", + "Deleted user (%s)" : "Slettet bruger (%s)", + "Dismiss notification" : "Fjern notifikation", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} inviterede dig til at deltage i {roomName} på {remoteServer}", + "Accept" : "Accepter", + "Decline" : "Afvis", + "New message" : "Ny besked", + "Reminder" : "Påmindelse", + "{user} sent you a private message" : "{user} sendte dig en privat besked", + "{user} sent a message in conversation {call}" : "{user} sendte en besked i samtalen {call}", + "A deleted user sent a message in conversation {call}" : "En slettet bruger sendte en besked i samtalen {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gæst) sendte en besked i samtalen {call}", + "A guest sent a message in conversation {call}" : "En gæst sendte en besked i samtalen {call}", + "{user} replied to your private message" : "{user} svarede på din private besked", + "{user} replied to your message in conversation {call}" : "{user} svarede på din besked i samtalen {call}", + "A deleted user replied to your message in conversation {call}" : "En slettet bruger svarede på din besked i samtalen {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gæst) svarede på din besked i samtalen {call}", + "A guest replied to your message in conversation {call}" : "En gæst svarede på din besked i samtalen {call}", + "{user} mentioned you in a private conversation" : "{user} omtalte dig i en privat samtale", + "{user} mentioned you in conversation {call}" : "{user} omtalte dig i samtalen {call}", + "A deleted user mentioned you in conversation {call}" : "En slettet bruger omtalte dig i samtalen {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gæst) omtalte dig i samtalen {call}", + "A guest mentioned you in conversation {call}" : "En gæst omtalte dig i samtalen {call}", + "View chat" : "Se chat", + "{user} invited you to a group conversation: {call}" : "{user} inviterede dig til en gruppesamtale: {call}", + "Join call" : "Deltag i opkaldet", + "Answer call" : "Besvar opkald", + "Call back" : "Ring tilbage", + "You missed a call from {user}" : "Du missede et opkald fra {user}", + "A group call has started in {call}" : "Et gruppeopkald er startet i {call}", + "You missed a group call in {call}" : "Du missede en gruppesamtale i {call}", + "{email} is requesting the password to access {file}" : "{email} anmoder om adgangskoden til {file}", + "{email} tried to request the password to access {file}" : "{email} forsøgte at anmode om adgangskoden til {file}", + "Someone is requesting the password to access {file}" : "Nogen beder om adgangskoden til {file}", + "Someone tried to request the password to access {file}" : "Nogen forsøgte at bede om adgangskoden til {file}", + "Open settings" : "Indstillinger", + "error" : "fejl", + "Default" : "Standard", + "Presentation" : "Præsentation", + "Conversations" : "Samtaler", + "Messages" : "Beskeder", + "Avatar image is not square" : "Avatar billedet er ikke kvadratisk", + "Other" : "Andet", + "Note to self" : "Bemærkning til dig selv", + "Andorra" : "Andorra", + "United Arab Emirates" : "De Forenede Arabiske Emirater", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua og Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikansk Samoa", + "Austria" : "Østrig", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandsøerne", + "Azerbaijan" : "Aserbajdsjan", + "Bosnia and Herzegovina" : "Bosnien-Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius og Saba", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutanworld. kgm", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Hviderusland", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Central African Republic" : "Den Centralafrikanske Republik", + "Congo" : "Congo", + "Switzerland" : "Schweiz", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroun", + "China" : "Kina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Juleøen", + "Cyprus" : "Cypern", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominican Republic" : "Den Dominikanske Republik", + "Algeria" : "Algeriet", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypten", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Etiopien", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Faroe Islands" : "Færøerne", + "France" : "Frankrig", + "Gabon" : "Gabon", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Fransk Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grønland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ækvatorialguinea", + "Greece" : "Grækenland", + "South Georgia and the South Sandwich Islands" : "Sydgeorgien og de sydlige Sandwichøer", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Hørt Island og McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisk område i Det Indiske Ocean", + "Iraq" : "Irak", + "Iceland" : "Island", + "Italy" : "Italien", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgisistan", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Christopher og Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Caymanøerne", + "Kazakhstan" : "Kasakhstan", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxembourg", + "Latvia" : "Letland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalløerne", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoliet", + "Macao" : "Macao", + "Northern Mariana Islands" : "Nord Mariana øerne", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiverne", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Ny kaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holland", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransk Polynesien", + "Papua New Guinea" : "Papua Ny Guinea", + "Philippines" : "Filippinerne", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Rumænien", + "Serbia" : "Serbien", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabien", + "Solomon Islands" : "Salomonøerne", + "Seychelles" : "Seychellerne", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slovenien", + "Svalbard and Jan Mayen" : "Svalbard og Jan Mayen", + "Slovakia" : "Slovakiet", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sydsudan", + "Sao Tome and Principe" : "São Tomé og Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Turks- og Caicosøerne", + "Chad" : "Chad", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadsjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor- Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Tyrkiet", + "Trinidad and Tobago" : "Trinidad og Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outliing Islands", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Pavestolen", + "Saint Vincent and the Grenadines" : "Saint Vincent og Grenadinerne", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis og Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sydafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Datafællesskab", + "Invalid date, date format must be YYYY-MM-DD" : "Ugyldig dato. Brug formatet ÅÅÅÅ-MM-DD", + "Conversation not found" : "Samtalen blev ikke fundet", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video- & lyd-samtaler over WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-konference ved anvendelse af WebRTC\n\n* 💬 **Chat** Nextcloud Snak kommer med en simpel tekst chat, der giver dig mulighed for at dele eller uploade filer fra din Nextcloud filer app eller lokale apparatog nævne andre deltagere.\n* 👥 **Privat, gruppe, offentlig og adgangskodebeskyttede opkald!** Inviter nogen, en hel gruppe eller send et offentligt link for at invitere til et opkald.\n* 🌐 **Sammenkoblede chats** Chat med andre Nextcloud brugere på deres servere\n* 💻 **Skærmdeling!** Del din skærm med deltagerne i dit opkald.\n* 🚀 **Integration med andre Nextcloud apps** såsom filer, kalender, Brugerstatus, Opslagstavle, Flow, Kort, Smart vælger, Kontakter, Opslag, og meget mere.\n* 🌉 **Synk med andre chatløsninger** Med [Matterbridge](https://github.com/42wim/matterbridge/) integreret i Snak, kan du let synkronisere mange andre chat løsninger med Nextcloud Snak og vice-versa.", + "Leave call" : "Forlad opkald", + "Discuss this file" : "Diskuter denne fil", + "Share this file with others to discuss it" : "Del denne fil med andre for at diskutere den", + "Share this file" : "Del denne fil", + "Join conversation" : "Deltag i samtale", + "The password is wrong. Try again." : "Adgangskoden er forkert. Prøv igen.", + "Password" : "Adgangskode", + "Submit" : "Tilføj", + "Error requesting the password." : "Der opstod en fejl ved anmodning om adgangskoden.", + "Request password" : "Anmod om adgangskode", + "This conversation has ended" : "Samtalen er slut", + "Error occurred when joining the conversation" : "Fejl under deltagelse i samtalen", + "Everyone" : "Alle", + "Users and moderators" : "Brugere og moderatorer", + "Moderators only" : "Kun moderatorer", + "Save changes" : "Gem ændringer", + "Saving …" : "Gemmer…", + "Saved!" : "Gemt!", + "Limit to groups" : "Begræns til grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Når en eller flere grupper er valgt kan kun personer i de valgte grupper deltage i samtaler.", + "Guests can still join public conversations." : "Gæster kan stadig deltage i offentlige samtaler.", + "When a call has started, everyone with access to the conversation can join the call." : "Når et opkald er startet, kan alle som har adgang til samtalen deltage i opkaldet.", + "Enabled" : "Aktiveret", + "Disabled" : "Deaktiveret", + "State" : "Tilstand", + "Name" : "Navn", + "Beta" : "Beta", + "Permissions" : "Rettigheder", + "All messages" : "Alle beskeder", + "@-mentions only" : "Kun omtalt med @", + "Off" : "Slået fra", + "General settings" : "Generelle indstillinger", + "Default notification settings" : "Standardindstillinger for notifikationer", + "Default group notification" : "Standardindstillinger for gruppenotifikation", + "Default group notification for new groups" : "Standardindstillinger for gruppenotifikation for nye grupper", + "Integration into other apps" : "Integration med andre apps", + "Allow conversations on files" : "Tillad samtaler om filer", + "Allow conversations on public shares for files" : "Tillad samtaler om offentlige delinger af filer", + "Enable encryption" : "Slå kryptering til", + "Pending" : "Afventer", + "Error" : "Fejl", + "Blocked" : "Blokeret", + "Expired" : "Udløbet", + "Never" : "Aldrig", + "Language" : "Sprog", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Oprettet", + "Yes" : "Ja", + "No" : "Nej", + "Downloading …" : "Downloader …", + "OK: Running version: {version}" : "OK: Kørende version: {version}", + "Validate SSL certificate" : "Godkend SSL certifikat", + "Delete this server" : "Slet denne server", + "Test this server" : "Test denne server", + "Shared secret" : "Delt hemmelighed", + "Recording consent" : "Optagelsessamtykke", + "STUN server URL" : "STUN-server URL", + "STUN servers" : "STUN-servere", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server bliver brugt til at bestemme den offentlige IP adresse for deltagerne bagved en router.", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Succesfulde ICE-kandidater returneret af TURN-serveren", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN-server hemmelighed", + "TURN server protocols" : "TURN server protokoller ", + "TURN servers" : "TURN-servere", + "Failed" : "Mislykkede", + "OK" : "OK", + "Checking …" : "Kontrollerer...", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- og \".tflite\" filer blev korrekt returneret af webserveren.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det ser ud til, at PHP og Apache konfigurationen ikke er kompatibel. Bemærk venligst, at PHP kun kan bruges med MPM_PREFORK modulet, og PHP-FPM kan kun bruges med MPM_EVENT modulet.", + "Federated user" : "Fødereret bruger", + "Confirm" : "Bekræft", + "Reset" : "Nulstil", + "Cancel" : "Annullér", + "Back" : "Tilbage", + "Now" : "Nu", + "Meeting created" : "Møde oprettet", + "Upcoming meetings" : "Kommende møder", + "Loading …" : "Indlæser …", + "Schedule a meeting" : "Planlæg et møde", + "Meeting title" : "Mødetitel", + "From" : "Fra", + "To" : "Til", + "Calendar" : "Kalender", + "Attendees" : "Deltagere", + "Add attendees" : "Tilføj deltagere", + "Save" : "Gem", + "Search participants" : "Find deltagere", + "No results" : "Ingen resultater", + "Done" : "Færdig", + "Raise hand" : "Løft hånden", + "Lower hand" : "Sænk hånden", + "Grid view" : "Gittervisning", + "Reload" : "Genindlæs", + "Connecting …" : "Forbinder ...", + "Waiting for {user} to join the call" : "Venter på at {user} deltager i kaldet", + "Waiting for others to join the call …" : "Venter på at andre deltager i opkaldet ...", + "You can invite others in the participant tab of the sidebar" : "Du kan invitere andre i fanen \"deltagere\" i menuen i siden", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan invitere andre i fanen \"deltagere\" i menuen i siden, eller dele dette link for at invitere andre!", + "Share this link to invite others!" : "Del dette link for at invitere andre!", + "Copy link" : "Kopier link", + "Mute audio" : "Slå lyden fra", + "None" : "Ingen", + "You have been muted by a moderator" : "Du er blevet sat på mute af en moderator", + "Disable video" : "Deaktiver video", + "Enable video" : "Slå video til", + "You" : "Dig", + "Mute" : "Mute", + "Show screen" : "Vis skærm", + "Collapse" : "Sammenfold", + "Expand" : "Udvid", + "You need to be logged in to upload files" : "Du skal være logget på for at kunne uploade filer", + "Drop your files to upload" : "Drop dine filer for at uploade", + "Scroll to bottom" : "Rul til bunden", + "Public conversation" : "Offentlig samtale", + "Favorite" : "Foretrukken", + "Date:" : "Dato:", + "Note:" : "Bemærkning:", + "Hide details" : "Skjul detaljer", + "Show details" : "Vis detaljer", + "Unban" : "Fjern blokering", + "Disable" : "Deaktiver", + "Enable" : "Aktiver", + "Choose" : "Vælg", + "The file must be a PNG or JPG" : "Fil format: PNG eller JPG", + "Restricted" : "Begrænset", + "Conversation settings" : "Samtaleindstillinger", + "Personal" : "Personlig", + "Danger zone" : "Farezone", + "Archive conversation" : "Arkiv samtale", + "Do you really want to leave \"{displayName}\"?" : "Vil du virkelig forlade \"{displayName}\"?", + "You can archive this conversation instead." : "Du kan arkivere denne samtale i stedet for.", + "Leave conversation" : "Forlad samtale", + "You need to promote a new moderator before you can leave the conversation" : "Du skal udnævne en ny moderator inden du kan forlade samtalen.", + "Delete conversation" : "Slet samtale", + "Do you really want to delete \"{displayName}\"?" : "Er du sikker på at du vil slette \"{displayName}\"?", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatbeskeder kan udløbe efter et vist tidsrum. Bemærk: Filer der er delt i chatten vil ikke blive slette for ejeren, men vil ikke længere deles i samtalen.", + "Guest access" : "Gæsteadgang", + "Password protection" : "Adgangskodebeskyttelse", + "Set a password" : "Indstil en adgangskode", + "Change password" : "Skift adgangskode", + "Resend invitations" : "Gensend invitationer", + "Invalid language" : "Ugyldigt sprog", + "Start time (optional)" : "Starttid (valgfri)", + "Lock conversation" : "Lås samtale", + "Edit" : "Redigér", + "More information" : "Mere information", + "Delete" : "Slet", + "Log content" : "Log indhold", + "Notifications" : "Notifikationer", + "Important conversation" : "Vigtig samtale", + "\"Do not disturb\" user status is ignored for important conversations" : "Brugerstatus \"Forstyr ikke\" ignoreres ved vigtige samtaler", + "Sensitive conversation" : "Følsom samtale", + "Message preview will be disabled in conversation list and notifications" : "Forhåndsvisning af beskeder vil blive deaktiveret i samtalelisten og notifikationer", + "Require recording consent before joining call in this conversation" : "Kræv optagelsessamtykke inden deltagelse i opkaldet i denne samtale", + "Recording consent is required for all calls" : "Optagelsessamtykke er kræver for alle opkald", + "Join" : "Deltag", + "Error while creating the conversation" : "Fejl under oprettelse af samtalen", + "Create a new conversation" : "Opret ny samtale", + "Join open conversations" : "Deltag i åbne samtaler", + "Unread mentions" : "Ulæste omtaler", + "Create conversation" : "Opret samtale", + "Enter your name" : "Angiv dit navn", + "Submit name and join" : "Angiv navn og deltagname and join", + "Do you already have an account?" : "Har du allerede en konto?", + "Log in" : "Log på", + "Mark as read" : "Marker som læst", + "Mark as unread" : "Marker som ulæst", + "Remove from favorites" : "Fjernet fra favoritter", + "Add to favorites" : "Føj til favoritter", + "Unarchive conversation" : "Fjern samtale fra arkiv", + "You need to promote a new moderator before you can leave the conversation." : "Du skal udnævne en ny moderator før du kan forlade samtalen.", + "No pending invitations" : "Ingen afventende invitationer", + "Home" : "Hjem", + "Unread" : "Ulæst", + "Alphabetically" : "Alfabetisk", + "You have no archived conversations." : "Du har ingen arkiverede samtaler.", + "You have no unread mentions." : "Du har ingen ulæste omtaler", + "An error occurred while performing the search" : "Der opstod en fejl under søgningen", + "Unread messages" : "Ulæste beskedder", + "Back to conversations" : "Tilbage til samtaler", + "Archived conversations" : "Arkiverede samtaler", + "Threads" : "Tråde", + "Clear filter" : "Ryd filter", + "Users" : "Brugere", + "Groups" : "Grupper", + "Teams" : "Teams", + "Other sources" : "Andre kilder", + "Open conversations" : "Åbne samtaler", + "No search results" : "Ingen søgeresultater", + "The meeting will start soon" : "Mødet starter snart", + "This meeting is scheduled for {startTime}" : "Mødet er skemalagt til {startTime}", + "You are currently waiting in the lobby" : "Du venter nu i lobbyen", + "Select a device" : "Vælg en enhed", + "Devices" : "Enhed", + "No audio" : "Ingen lyd", + "No camera" : "Intet kamera", + "The call might be recorded." : "Opkaldes optages måske", + "Select a file" : "Vælg en fil", + "Invalid path selected" : "Ugyldig filsti valgt", + "Blur" : "Slør", + "Upload" : "Send", + "Files" : "Filer", + "(edited)" : "(redigeret)", + "24 hours" : "24 timer", + "7 days" : "7 dage", + "Edited by {actor}" : "Redigeret af {actor}", + "Reply" : "Besvar", + "More actions" : "Flere handlinger", + "Set reminder" : "Sæt påmindelse", + "Reply privately" : "Svar privat", + "Edit message" : "Redigér besked", + "Copy message" : "Kopiér besked", + "Copy message link" : "Kopier besked link", + "Go to file" : "Gå til fil", + "Go to thread" : "Gå til tråd", + "Forward message" : "Videresend besked", + "Translate" : "Oversæt", + "Set custom reminder" : "Sæt brugerdefineret påmindelse", + "Choose a conversation to forward the selected message." : "Vælg en samtale som den valgte besked skal videresendes til.", + "Error while forwarding message" : "Der opstod en fejl ved videresendelse af beskeden.", + "The message has been forwarded to {selectedConversationName}" : "Beskeden er videresendt til {selectedConversationName}", + "Dismiss" : "Afvis", + "Detect language" : "Detekter sprog", + "Translate from" : "Oversæt fra", + "Translate to" : "Oversæt til", + "Copy translated text" : "Kopiér oversat tekst", + "Send now" : "Send nu", + "Message sent" : "Beskeden blev sendt", + "Contact" : "Kontakt", + "Deck Card" : "Opslagskort", + "_%n reply_::_%n replies_" : ["%n svar","%n svar"], + "You voted" : "Du stemte", + "_%n vote_::_%n votes_" : ["%n stemme","%n stemmer"], + "Edit poll draft" : "Redigér afstemningskladde", + "No messages" : "Ingen beskeder", + "Unpin" : "Frigør", + "Create a new group conversation" : "Opret en ny gruppesamtale", + "Add participants" : "Tilføj deltagere", + "Allow guests to join via link" : "Tillad gæster at deltage via link", + "Create a thread" : "Opret en tråd", + "Send message" : "Send besked", + "Send without notification" : "Send uden notifikation", + "File to share" : "Vælg fil til deling", + "Add emoji" : "Tilføj emoji", + "Thread title" : "Trådtitel", + "Send later" : "Send senere", + "Cancel editing" : "Annullér redigering", + "Share from {nextcloud}" : "Del fra {nextcloud}", + "Share from Files" : "Del fra Filer", + "Upload from device" : "Upload fra enhed", + "Create new poll" : "Opret ny afstemning", + "Smart picker" : "Smart Vælger", + "Record voice message" : "Optag stemmebesked", + "End recording and send" : "Afslut optagelse og send", + "Dismiss recording" : "Forkast optagelse", + "Error while recording audio" : "Fejl under optagelse af lyd", + "New file" : "Ny fil", + "Blank" : "Tom", + "Send" : "Send", + "Create poll in {name}" : "Opret afstemning i {name}", + "Create poll" : "Opret afstemning", + "Question" : "Spørgsmål", + "Settings" : "Indstillinger", + "Anonymous poll" : "Anonym afstemning", + "Multiple answers" : "Multiple svar", + "End poll" : "Afslut afstemning", + "Results" : "Resultater", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Opkald uden højtydende backend kan forårsage forbindelsesproblemer og høj belastning af enheder. {linkstart}Få flere oplysninger{linkend}", + "Talk setup incomplete" : "Snak opsætningen er ufuldstændig", + "Settings for participant \"{user}\"" : "Indstillinger for deltager \"{user}\"", + "moderator" : "moderator", + "guest" : "gæst", + "Joined with video" : "Deltager med video", + "Joined via phone" : "Deltager via telefon", + "Joined with audio" : "Deltager med audio", + "Remove group and members" : "Fjern gruppe og medlemmer", + "Remove team and members" : "Fjern team og medlemmer", + "Remove participant" : "Fjern deltager", + "Demote from moderator" : "Degrader fra moderator", + "Promote to moderator" : "Forfrem til moderator", + "Remove" : "Fjern", + "Add users or groups" : "Tilføj brugere eller grupper", + "Add users" : "Tilføj brugere", + "Add groups" : "Tilføj grupper", + "Add teams" : "Tilføj teams", + "Add other sources" : "Tilføj andre kilder", + "Add emails" : "Tilføj e-mails", + "Integrations" : "Integrationer", + "Searching …" : "Søger ...", + "Participants" : "Deltagere", + "Open chat" : "Åbn chat", + "Search messages" : "Søg efter beskeder", + "Chat" : "Chat", + "Details" : "Detaljer", + "Shared items" : "Delte elementer", + "Search in {name}" : "Søg i {name}", + "Search messages …" : "Søg efter beskeder ...", + "Search options" : "Søgeindstillinger", + "From User" : "Fra bruger", + "Since" : "Siden", + "Until" : "TIl", + "No results found" : "Ingen resultater fundet", + "Load more results" : "Indlæs flere resultater", + "Recent threads" : "Seneste tråde", + "Projects" : "Projekter", + "No shared items" : "Ingen delte elementer", + "Thread notifications" : "Trådnotifikationer", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link til samtale", + "Search conversations or users" : "Søg samtaler eller kontakter", + "Select conversation" : "Vælg samtale", + "Edit display name" : "Redigér vist navn", + "Error while setting personal setting" : "Fejl under angivelse af personlig indstilling", + "Play sounds when participants join or leave a call" : "Afspil lyde, når personer deltager eller forlader et opkald", + "Notification settings" : "Meddelelsesindstillinger", + "Default language" : "Standardsprog", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Fejl under indstilling af mappe til vedhæftninger", + "Error while setting default media state" : "Din standard medietilstand er blevet gemt", + "Privacy" : "Privatliv", + "Attachments folder" : "Mappe til vedhæftede filer", + "Search" : "Søg", + "Focus the chat input" : "Fokuser chat funktionen", + "Unfocus the chat input to use shortcuts" : "Fjern fokus på chat funktionen for at bruge genveje", + "Shortcuts while in a call" : "Genveje under et opkald", + "Camera on and off" : "Kamera til og fra", + "Microphone on and off" : "Mikrofon til og fra", + "Raise or lower hand" : "Løft eller sænk hånden", + "Push to talk or push to mute" : "Tryk for at tale eller tryk for at slå lyden fra", + "Zoom-in / zoom-out a screen share" : "Zoom ind / zoom ud på en skærmdeling", + "Mouse wheel" : "Musehjul", + "Start call" : "Start opkald", + "End call" : "Afslut opkald", + "End call for everyone" : "Afslut opkald for alle", + "Recording" : "Optagelse", + "The call has been running for one hour." : "Opkaldet har været igang i en time.", + "Cancel recording start" : "Annuller opstagelsesstart", + "Stop recording" : "Stop optagelse", + "Screensharing options" : "Skærmdeling indstillinger", + "Enable screensharing" : "Slå skærmdeling til", + "Screen sharing is not supported by your browser." : "Skærmdeling er ikke understøttet af din browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skærmdeling kræver at siden er hentet over HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skærmdeling kræver at siden bliver vist gennem HTTPS.", + "An error occurred while starting screensharing." : "Der opstod en fejl da du prøvede at dele skærm.", + "Show your screen" : "Vis din skærm", + "Stop screensharing" : "Stop skærmdeling", + "Start recording" : "Start optagelse", + "Delete now" : "Slet nu", + "Keep" : "Behold", + "Select a region" : "Vælg en region", + "Local time: {time}" : "Lokal tid: {time}", + "Search …" : "Søg ...", + "Message without mention" : "Besked som ikke omtaler nogen", + "Mention myself" : "Omtal mig selv", + "The conversation does not exist" : "Samtalen findes ikke", + "Join a conversation or start a new one!" : "Deltag i en samtale eller start en ny!", + "Join a conversation or start a new one" : "Deltag i en samtale eller start en ny", + "Nextcloud URL" : "Nextcloud URL", + "Talk conversation" : "Snak samtale", + "User" : "Bruger", + "API token" : "API nøgle", + "Login" : "Login", + "Nickname" : "Kaldenavn", + "Client ID" : "Klient-ID", + "Media" : "Medier", + "Polls" : "Afstemninger", + "Deck cards" : "Opslagskort", + "Locations" : "Steder", + "Audio" : "Audio", + "Show all files" : "Vis alle filer", + "Show all deck cards" : "Vis alle opslagskort", + "Follow conversation settings" : "Følg samtaleindstillinger", + "Group" : "Gruppe", + "Team" : "Team", + "You removed {user0} and {user1}" : "Du fjernede {user0} og {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du fjernede {user0}, {user1} og yderligere %n deltager","Du fjernede {user0}, {user1} og yderligere %n deltagere"], + "An administrator removed you and {user0}" : "En administrator fjernede dig og {user0}", + "{actor} removed you and {user0}" : "{actor} fjernede dig og {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administrator fjernede dig, {user0} og yderligere%n deltager","En administrator fjernede dig, {user0} og yderligere %n deltagere"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} fjernede dig, {user0} og yderligere %n deltagere","{actor} fjernede dig, {user0} og yderligere %n deltagere"], + "An administrator removed {user0} and {user1}" : "En administrator fjernede {user0} og {user1}", + "{actor} removed {user0} and {user1}" : "{actor} fjernede {user0} og {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administrator fjernede {user0}, {user1} og yderligere %n deltager","En administrator fjernede {user0}, {user1} og yderligere %n deltagere"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} fjernede {user0}, {user1} og yderligere %n deltager","{actor} fjernede {user0}, {user1} og yderligere %n deltagere"], + "You and {user0} joined the call" : "Du og {user0} deltog i opkaldet", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} og yderligere %n deltagere deltog i opkaldet","Du, {user0} og yderligere %n deltog i opkaldet"], + "{user0} and {user1} joined the call" : "{user0} og {user1} deltog i opkaldet", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} og yderligere %n deltager deltog i opkaldet","{user0}, {user1} og yderligere %n deltagere deltog i opkaldet"], + "You and {user0} left the call" : "Du og {user0} forlod opkaldet", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} og yderligere %n deltager forlod opkaldet","Du, {user0} og yderligere %n deltagere forlod opkaldet"], + "{user0} and {user1} left the call" : "{user0} og {user1} forlod opkaldet", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} og yderligere %n deltager forlod opkaldet","{user0}, {user1} og yderligere %n deltagere forlod opkaldet"], + "You promoted {user0} and {user1} to moderators" : "Du forfremmede {user0} og {user1} til moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du forfremmede {user0}, {user1} og yderligere %n deltager til moderatorer","Du forfremmede {user0}, {user1} og yderligere %n deltagere til moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administrator forfremmede dig og {user0} til moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} forfremmede dig og {user0} til moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administrator forfremmede dig, {user0} og yderligere %n deltager til moderatorer","En administrator forfremmede dig, {user0} og yderligere %n deltagere til moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} forfremmede dig, {user0} og yderligere %n deltager til moderatorer","{actor} forfremmede dig, {user0} og yderligere %n deltagere til moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administrator forfremmede {user0} og {user1} til moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} forfremmede {user0} og {user1} til moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administrator forfremmede {user0}, {user1} og yderligere %n deltager til moderatorer","En administrator forfremmede {user0}, {user1} og yderligere %n deltagere til moderatorer"], + "You:" : "Dig:", + "You: {lastMessage}" : "Dig: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(redigeret af dig)", + "(edited by a deleted user)" : "(redigeret af en slettet bruger)", + "(edited by {moderator})" : "(redigeret af {moderator})", + "Leave this page" : "Forlad denne side", + "Join here" : "Deltag her", + "Deck card has been posted to {conversation}" : "Opslagskort er blevet postet til {conversation}", + "The recording failed. Please contact your administrator." : "Optagelsen fejlede. Kontakt venligst din administrator", + "An error occurred while fetching the participants" : "Kunne ikke hente listen over deltagere", + "Failed to join the conversation." : "Kunne ikke deltage i samtalen.", + "Error while sharing file" : "Fejl ved deling af fil", + "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "I morgen – {timeLocale}", + "This weekend – {timeLocale}" : "Denne weekend – {timeLocale}", + "Next week – {timeLocale}" : "Næste uge – {timeLocale}", + "Error while parsing a PROPFIND error" : "Fejl under parsing af en PROPFIND-fejl", + "Lost connection to signaling server." : "Mistet forbindelse til signalserver.", + "Please restart the app." : "Genstart venligst app'en.", + "Please reload the page." : "Genindlæs venligst siden.", + "Please try to restart the app." : "Prøv at genstarte app'en.", + "Please try to reload the page." : "Prøv at genindlæse siden.", + "Do not disturb" : "Forstyr ikke", + "Away" : "Ikke tilstede", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Det virker som om du taler mens lyden er slået fra, slå den til hvis du vil have at andre skal høre dig", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dette tager lidt længere end forventet. Er medie-rettigheder allerede givet (eller nægtet)? Hvis ja så prøv at genstarte din browser, da lyd og video virker ikke lige nu", + "Access to microphone & camera is only possible with HTTPS" : "Adgang til mikrofon og kamera er kun tilgængeligt over HTTPS", + "Please move your setup to HTTPS" : "Flyt venligst din installation til HTTPS", + "Access to microphone & camera was denied" : "Ingen adgang til mikrofon og kamera", + "WebRTC is not supported in your browser" : "WebRTC er ikke undertøttet i din browser", + "Please use a different browser like Firefox or Chrome" : "Anvend venligst en anden browser fx Firefox eller Chrome", + "Error while accessing microphone & camera" : "Der opstod en fejl da vi prøvede at få adgang til din mikrofon og kamera", + "%s Talk on your mobile devices" : "%s Snak på dine mobilenheder", + "Join conversations at any time, anywhere, on any device." : "Deltag i samtaler når som helst, hvor som helst og på en hvilken som helst enhed.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "Dansk", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Opkaldssammendrag (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Opkaldsoversigts bot'en sender en oversigtsmeddelelse efter opkaldet med alle deltagere og skitserede opgaver", + "Tasks" : "Opgaver", + "Notes" : "Noter", + "Reports" : "Raporter", + "Decisions" : "Beslutninger", + "Agenda" : "Dagsorden", + "Call summary" : "Opkaldsoversigt", + "Call summary - {title}" : "Opkaldsoversigt - {title}", + "Talk conversation for event" : "Snak samtale for begivenhed", + "Next meeting" : "Næste møde", + "Your default media state has been saved" : "Din standard medietilstand er blevet gemt", + "Set reminder for later today" : "Sæt påmindelse for senere i dag", + "Set reminder for tomorrow" : "Sæt påmindelse for i morgen", + "Set reminder for this weekend" : "Sæt påmindelse for denne weekend", + "Set reminder for next week" : "Sæt påmindelse for næste weekend", + "Talk recording from {time} ({conversation})" : "Snak optagelse fra {time} ({conversation})", + "Submit vote" : "Afgiv stemme", + "Your personal setting has been saved" : "Din personlige indstilling er blevet gemt", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Snak blev opdateret, du kan ikke starte eller deltage i et opkald.", + "Nextcloud Talk was updated." : "Nextcloud Snak blev opdateret.", + "Nextcloud is in maintenance mode." : "Nextcloud er i vedligeholdelsestilstand.", + "Nextcloud Talk Federation was updated." : "Nextcloud Snak Sammenkobling blev opdateret." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/da.json b/l10n/da.json new file mode 100644 index 0000000..09ac294 --- /dev/null +++ b/l10n/da.json @@ -0,0 +1,894 @@ +{ "translations": { + "a conversation" : "en samtale", + "(Duration %s)" : "(Varighed %s)", + "You attended a call with {user1}" : "Du deltog i et opkald med {user1}", + "_%n guest_::_%n guests_" : ["%n gæst","%n gæster"], + "You attended a call with {user1} and {user2}" : "Du deltog i et opkald med {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du deltog i et opkald med {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du deltog i et opkald med {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du deltog i et opkald med {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["%n andre","%n andre"], + "{actor} invited you to {call}" : "{actor} inviterede dig til {call}", + "You were invited to a conversation or had a call" : "Du var inviteret til en samtale eller fik et opkald", + "Other activities" : "Andre aktiviteter", + "Talk" : "Snak", + "Guest" : "Gæst", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge og Safari kan nu benyttes til at deltage i lyd- og videosamtaler", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-til-en-samtaler er nu vedvarende og kan ikke længere omdannes til gruppesamtaler ved et uheld. Derudover, når en af deltagerne forlader samtalen, slettes samtalen ikke længere automatisk. Kun hvis begge deltagere forlader samtalen, så slettes samtalen fra serveren", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Nu kan nu sende en notifikation til alle deltagere ved at skrive \"@all\" i chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Ved at trykke på \"pil op\" kan du sende din sidste besked igen", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Snak understøtter nu kommandoer. Send \"/help\" som en chat-besked for at se om din administrator har konfigureret nogen", + "- With projects you can create quick links between conversations, files and other items" : "- Med projekter kan du oprette hurtige links mellem samtaler, filer og andre objekter", + "- You can now mention guests in the chat" : "- Du kan nu omtale gæster i samtalen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Samtaler kan nu have en lobby. Dette giver mulighed for at moderatorer kan deltage i samtalen for at forberede mødet, mens almindelige brugere og gæster må vente", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nu svare direkte på beskeder og dermed give andre brugere mere kontekst om hvad din besked handler om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Søgninger efter samtaler og deltagere vil nu også filtrere dine eksisterende samtaler, hvilke gør det meget nemmere at finde tidligere samtaler", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nu tilføje brugerdefinerede brugergrupper til samtaler når cirkel-appen er installeret", + "- Check out the new grid and call view" : "- Tjek den nye gitter og opkaldsvisning", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Du kan nu uploade og trække og slippe filer direkte fra din enhed til chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delte filer åbnes nu direkte inde i chatvisningen med fremviserapps", + "- You can now search for chats and messages in the unified search in the top bar" : "- Du kan nu søge efter chats og beskeder i den samlede søgning i den øverste bjælke", + "- Spice up your messages with emojis from the emoji picker" : "- Krydr dine beskeder med emojis fra emojivælgeren", + "- You can now change your camera and microphone while being in a call" : "- Du kan nu skifte kamera og mikrofon, mens du er i et opkald", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Giv dine samtaler en vis kontekst med en beskrivelse, og åbn den, så brugere der er logget på kan finde den og deltage selv", + "- See a read status and send failed messages again" : "- Se en læst status og send mislykkede beskeder igen", + "- Raise your hand in a call with the R key" : "- Ræk hånden op i et opkald med R-tasten", + "- Join the same conversation and call from multiple devices" : "- Deltag i den samme samtale og opkald fra flere enheder", + "- Send voice messages, share your location or contact details" : "- Send talebeskeder, del din placering eller kontaktoplysninger", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Føj grupper til en samtale, og nye gruppemedlemmer vil automatisk blive tilføjet som deltagere", + "- A preview of your audio and video is shown before joining a call" : "- En forhåndsvisning af din lyd og video vises, før du deltager i et opkald", + "- You can now blur your background in the newly designed call view" : "- Du kan nu sløre din baggrund i den nydesignede opkaldsvisning", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nu tildele generelle og individuelle tilladelser til deltagere", + "- In the sidebar you can now find an overview of the latest shared items" : "- I sidebjælken kan du nu finde en oversigt over de seneste delte elementer", + "- Use a poll to collect the opinions of others or settle on a date" : "- Brug en meningsmåling til at indsamle andres meninger eller til at vælge en dato", + "- Configure an expiration time for chat messages" : "- Konfigurer en udløbstid for chatbeskeder", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start opkald uden at underrette andre i store samtaler. Du kan sende individuelle opkaldsmeddelelser, når opkaldet er startet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chatbeskeder uden at give modtagerne besked, hvis det ikke haster", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link forskellige elementer ved at bruge den nye Smart Vælger ved at taste \"/\"", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nu bandlyse konti og gæster for at forhindre dem i at gen-deltage i en samtale", + "Talk updates ✅" : "Snak opdateringer ✅", + "Reaction deleted by author" : "Reaktion slettet af forfatter", + "{actor} created the conversation" : "{actor} oprettede samtalen", + "You created the conversation" : "Du oprettede samtalen", + "System created the conversation" : "Systemet oprettede samtalen", + "An administrator created the conversation" : "En administrator oprettede samtalen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administrator omdøbte samtalen fra \"%1$s\" til \"%2$s\"", + "{actor} set the description" : "{actor} satte beskrivelsen", + "You set the description" : "Du satte beskrivelsen", + "An administrator set the description" : "En administrator satte beskrivelsen", + "{actor} removed the description" : "{actor} fjernede beskrivelsen", + "You removed the description" : "Du fjernede beskrivelsen", + "An administrator removed the description" : "En administrator fjernede beskrivelsen", + "You started a call" : "Du startede et opkald", + "{actor} started a call" : "{actor} startede et opkald", + "{actor} joined the call" : "{actor} deltog i opkaldet", + "You joined the call" : "Du deltog i opkaldet", + "{actor} left the call" : "{actor} forlod opkaldet", + "You left the call" : "Du forlod opkaldet", + "{actor} unlocked the conversation" : "{actor} låste op for samtalen", + "You unlocked the conversation" : "Du låste op for samtalen", + "An administrator unlocked the conversation" : "En administrator låste samtalen op", + "{actor} locked the conversation" : "{actor} låste samtalen", + "You locked the conversation" : "Du låste samtalen", + "An administrator locked the conversation" : "En administrator låste samtalen", + "{actor} limited the conversation to the current participants" : "{actor} begrænsede samtalen til de nuværende deltagere", + "You limited the conversation to the current participants" : "Du begrænsede samtalen til de nuværende deltagere", + "An administrator limited the conversation to the current participants" : "En administrator begrænsede samtalen til de nuværende deltagere", + "{actor} opened the conversation to registered users" : "{actor} åbnede samtalen for registrerede brugere", + "You opened the conversation to registered users" : "Du åbnede samtalen for registrerede brugere", + "An administrator opened the conversation to registered users" : "En administrator åbnede samtalen for registrerede brugere", + "The conversation is now open to everyone" : "Samtalen er nu åben for alle", + "{actor} opened the conversation to everyone" : "{actor} åbnede samtalen for alle", + "You opened the conversation to everyone" : "Du åbnede samtalen for alle", + "{actor} restricted the conversation to moderators" : "{actor} begrænsede samtalen til moderatorer", + "You restricted the conversation to moderators" : "Du begrænsede samtalen til moderatorer", + "{actor} started breakout rooms" : "{actor} started breakout rum", + "You started breakout rooms" : "Du startede et breakout rum", + "{actor} stopped breakout rooms" : "{actor} stoppede breakout rum", + "You stopped breakout rooms" : "Du stoppede breakout rum", + "{actor} allowed guests" : "{actor} tillod gæster", + "You allowed guests" : "Du tillod gæster", + "An administrator allowed guests" : "En administrator tillod gæster", + "{actor} disallowed guests" : "{actor} forbød gæster", + "You disallowed guests" : "Du forbød gæster", + "An administrator disallowed guests" : "En administrator afviste gæster", + "{actor} set a password" : "{actor} indstillede en adgangskode", + "You set a password" : "Du indstillede en adgangskode", + "An administrator set a password" : "En administrator satte et kodeord", + "{actor} removed the password" : "{actor} fjernede adgangskoden", + "You removed the password" : "Du fjernede adgangskoden", + "An administrator removed the password" : "En administrator fjernede kodeordet", + "{actor} added {user}" : "{actor} tilføjede {user}", + "You joined the conversation" : "Du deltog i samtalen", + "{actor} joined the conversation" : "{actor} deltog i samtalen", + "You added {user}" : "Du tilføjede {user}", + "{actor} added you" : "{actor} tilføjede dig", + "An administrator added you" : "En administrator tilføjede dig", + "An administrator added {user}" : "En administrator tilføjede {user}", + "You left the conversation" : "Du forlod samtalen", + "{actor} left the conversation" : "{actor} forlod samtalen", + "{actor} removed {user}" : "{actor} fjernede {user}", + "You removed {user}" : "Du fjernede {user}", + "{actor} removed you" : "{actor} fjernede dig", + "An administrator removed you" : "En administrator fjernede dig", + "An administrator removed {user}" : "En administrator fjernede {user}", + "{federated_user} accepted the invitation" : "{federated_user} tog imod invitationen", + "{actor} removed {federated_user}" : "{actor} fjernede {federated_user}", + "You removed {federated_user}" : "Du fjernede {federated_user}", + "An administrator removed {federated_user}" : "En administrator fjernede {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} afviste invitationen", + "{actor} added group {group}" : "{actor} tilføjede gruppen {group}", + "You added group {group}" : "Du tilføjede en gruppen {group}", + "An administrator added group {group}" : "En administrator tilføjede gruppen {group}", + "{actor} removed group {group}" : "{actor} fjernede gruppen {group}", + "You removed group {group}" : "Du fjernede gruppen {group}", + "An administrator removed group {group}" : "En administrator fjernede gruppen {group}", + "{actor} promoted {user} to moderator" : "{actor} forfremmede {user} til moderator", + "You promoted {user} to moderator" : "Du forfremmede {user} til moderator", + "{actor} promoted you to moderator" : "{actor} forfremmede dig til moderator", + "{actor} demoted {user} from moderator" : "{actor} degraderede {user} fra moderator", + "You demoted {user} from moderator" : "Du degraderede {user} fra moderator", + "{actor} demoted you from moderator" : "{actor} degraderede dig fra moderator", + "{actor} shared a file which is no longer available" : "{actor} delte en fil, der ikke længere er tilgængelig", + "You shared a file which is no longer available" : "Du delte en fil, der ikke længere er tilgængelig", + "You cleared the history of the conversation" : "Du ryddede samtalens historik", + "Message deleted by author" : "Beskeden er slettet af forfatteren", + "Message deleted by you" : "Besked slettet af dig", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (gæst)", + "Talk conversations" : "Snak samtaler", + "Talk to %s" : "Snak med %s", + "Storage quota exceeded" : "Lagringskvote overskredet", + "File not found" : "Filen blev ikke fundet", + "File is not shared, or shared but not with the user" : "Filen er ikke delt, eller den er delt men ikke med brugeren", + "Poll" : "Afstemning", + "File is too big" : "Filen er for stor", + "Invalid file provided" : "Der er angivet en ugyldig fil", + "Invalid image" : "Ugyldigt billede", + "Unknown filetype" : "Ukendt filtype", + "Talk mentions" : "Snak omtaler", + "Say hi to your friends and colleagues!" : "Sig hej til dine venner og kollegaer.", + "No unread mentions" : "Ingen ulæste omtaler", + "Call in progress" : "Opkald i gang", + "Write to conversation" : "Skriv til samtale", + "Writes event information into a conversation of your choice" : "Skriver begivenhedsinformation i en samtale du vælger", + "Conversation invitation" : "Invitation til samtale", + "Description" : "Beskrivelse", + "Meeting" : "Møde", + "Password request: %s" : "Adgangskode-forespørgsel: %s", + "Private conversation" : "Privat samtale", + "Deleted user (%s)" : "Slettet bruger (%s)", + "Dismiss notification" : "Fjern notifikation", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} inviterede dig til at deltage i {roomName} på {remoteServer}", + "Accept" : "Accepter", + "Decline" : "Afvis", + "New message" : "Ny besked", + "Reminder" : "Påmindelse", + "{user} sent you a private message" : "{user} sendte dig en privat besked", + "{user} sent a message in conversation {call}" : "{user} sendte en besked i samtalen {call}", + "A deleted user sent a message in conversation {call}" : "En slettet bruger sendte en besked i samtalen {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gæst) sendte en besked i samtalen {call}", + "A guest sent a message in conversation {call}" : "En gæst sendte en besked i samtalen {call}", + "{user} replied to your private message" : "{user} svarede på din private besked", + "{user} replied to your message in conversation {call}" : "{user} svarede på din besked i samtalen {call}", + "A deleted user replied to your message in conversation {call}" : "En slettet bruger svarede på din besked i samtalen {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gæst) svarede på din besked i samtalen {call}", + "A guest replied to your message in conversation {call}" : "En gæst svarede på din besked i samtalen {call}", + "{user} mentioned you in a private conversation" : "{user} omtalte dig i en privat samtale", + "{user} mentioned you in conversation {call}" : "{user} omtalte dig i samtalen {call}", + "A deleted user mentioned you in conversation {call}" : "En slettet bruger omtalte dig i samtalen {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gæst) omtalte dig i samtalen {call}", + "A guest mentioned you in conversation {call}" : "En gæst omtalte dig i samtalen {call}", + "View chat" : "Se chat", + "{user} invited you to a group conversation: {call}" : "{user} inviterede dig til en gruppesamtale: {call}", + "Join call" : "Deltag i opkaldet", + "Answer call" : "Besvar opkald", + "Call back" : "Ring tilbage", + "You missed a call from {user}" : "Du missede et opkald fra {user}", + "A group call has started in {call}" : "Et gruppeopkald er startet i {call}", + "You missed a group call in {call}" : "Du missede en gruppesamtale i {call}", + "{email} is requesting the password to access {file}" : "{email} anmoder om adgangskoden til {file}", + "{email} tried to request the password to access {file}" : "{email} forsøgte at anmode om adgangskoden til {file}", + "Someone is requesting the password to access {file}" : "Nogen beder om adgangskoden til {file}", + "Someone tried to request the password to access {file}" : "Nogen forsøgte at bede om adgangskoden til {file}", + "Open settings" : "Indstillinger", + "error" : "fejl", + "Default" : "Standard", + "Presentation" : "Præsentation", + "Conversations" : "Samtaler", + "Messages" : "Beskeder", + "Avatar image is not square" : "Avatar billedet er ikke kvadratisk", + "Other" : "Andet", + "Note to self" : "Bemærkning til dig selv", + "Andorra" : "Andorra", + "United Arab Emirates" : "De Forenede Arabiske Emirater", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua og Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikansk Samoa", + "Austria" : "Østrig", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandsøerne", + "Azerbaijan" : "Aserbajdsjan", + "Bosnia and Herzegovina" : "Bosnien-Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius og Saba", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutanworld. kgm", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Hviderusland", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Central African Republic" : "Den Centralafrikanske Republik", + "Congo" : "Congo", + "Switzerland" : "Schweiz", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroun", + "China" : "Kina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Juleøen", + "Cyprus" : "Cypern", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominican Republic" : "Den Dominikanske Republik", + "Algeria" : "Algeriet", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypten", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Etiopien", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Faroe Islands" : "Færøerne", + "France" : "Frankrig", + "Gabon" : "Gabon", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Fransk Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grønland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ækvatorialguinea", + "Greece" : "Grækenland", + "South Georgia and the South Sandwich Islands" : "Sydgeorgien og de sydlige Sandwichøer", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Hørt Island og McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisk område i Det Indiske Ocean", + "Iraq" : "Irak", + "Iceland" : "Island", + "Italy" : "Italien", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgisistan", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Christopher og Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Caymanøerne", + "Kazakhstan" : "Kasakhstan", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxembourg", + "Latvia" : "Letland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalløerne", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoliet", + "Macao" : "Macao", + "Northern Mariana Islands" : "Nord Mariana øerne", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiverne", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Ny kaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holland", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransk Polynesien", + "Papua New Guinea" : "Papua Ny Guinea", + "Philippines" : "Filippinerne", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Rumænien", + "Serbia" : "Serbien", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabien", + "Solomon Islands" : "Salomonøerne", + "Seychelles" : "Seychellerne", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slovenien", + "Svalbard and Jan Mayen" : "Svalbard og Jan Mayen", + "Slovakia" : "Slovakiet", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sydsudan", + "Sao Tome and Principe" : "São Tomé og Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Turks- og Caicosøerne", + "Chad" : "Chad", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadsjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor- Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Tyrkiet", + "Trinidad and Tobago" : "Trinidad og Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outliing Islands", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Pavestolen", + "Saint Vincent and the Grenadines" : "Saint Vincent og Grenadinerne", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis og Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sydafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Datafællesskab", + "Invalid date, date format must be YYYY-MM-DD" : "Ugyldig dato. Brug formatet ÅÅÅÅ-MM-DD", + "Conversation not found" : "Samtalen blev ikke fundet", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video- & lyd-samtaler over WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-konference ved anvendelse af WebRTC\n\n* 💬 **Chat** Nextcloud Snak kommer med en simpel tekst chat, der giver dig mulighed for at dele eller uploade filer fra din Nextcloud filer app eller lokale apparatog nævne andre deltagere.\n* 👥 **Privat, gruppe, offentlig og adgangskodebeskyttede opkald!** Inviter nogen, en hel gruppe eller send et offentligt link for at invitere til et opkald.\n* 🌐 **Sammenkoblede chats** Chat med andre Nextcloud brugere på deres servere\n* 💻 **Skærmdeling!** Del din skærm med deltagerne i dit opkald.\n* 🚀 **Integration med andre Nextcloud apps** såsom filer, kalender, Brugerstatus, Opslagstavle, Flow, Kort, Smart vælger, Kontakter, Opslag, og meget mere.\n* 🌉 **Synk med andre chatløsninger** Med [Matterbridge](https://github.com/42wim/matterbridge/) integreret i Snak, kan du let synkronisere mange andre chat løsninger med Nextcloud Snak og vice-versa.", + "Leave call" : "Forlad opkald", + "Discuss this file" : "Diskuter denne fil", + "Share this file with others to discuss it" : "Del denne fil med andre for at diskutere den", + "Share this file" : "Del denne fil", + "Join conversation" : "Deltag i samtale", + "The password is wrong. Try again." : "Adgangskoden er forkert. Prøv igen.", + "Password" : "Adgangskode", + "Submit" : "Tilføj", + "Error requesting the password." : "Der opstod en fejl ved anmodning om adgangskoden.", + "Request password" : "Anmod om adgangskode", + "This conversation has ended" : "Samtalen er slut", + "Error occurred when joining the conversation" : "Fejl under deltagelse i samtalen", + "Everyone" : "Alle", + "Users and moderators" : "Brugere og moderatorer", + "Moderators only" : "Kun moderatorer", + "Save changes" : "Gem ændringer", + "Saving …" : "Gemmer…", + "Saved!" : "Gemt!", + "Limit to groups" : "Begræns til grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Når en eller flere grupper er valgt kan kun personer i de valgte grupper deltage i samtaler.", + "Guests can still join public conversations." : "Gæster kan stadig deltage i offentlige samtaler.", + "When a call has started, everyone with access to the conversation can join the call." : "Når et opkald er startet, kan alle som har adgang til samtalen deltage i opkaldet.", + "Enabled" : "Aktiveret", + "Disabled" : "Deaktiveret", + "State" : "Tilstand", + "Name" : "Navn", + "Beta" : "Beta", + "Permissions" : "Rettigheder", + "All messages" : "Alle beskeder", + "@-mentions only" : "Kun omtalt med @", + "Off" : "Slået fra", + "General settings" : "Generelle indstillinger", + "Default notification settings" : "Standardindstillinger for notifikationer", + "Default group notification" : "Standardindstillinger for gruppenotifikation", + "Default group notification for new groups" : "Standardindstillinger for gruppenotifikation for nye grupper", + "Integration into other apps" : "Integration med andre apps", + "Allow conversations on files" : "Tillad samtaler om filer", + "Allow conversations on public shares for files" : "Tillad samtaler om offentlige delinger af filer", + "Enable encryption" : "Slå kryptering til", + "Pending" : "Afventer", + "Error" : "Fejl", + "Blocked" : "Blokeret", + "Expired" : "Udløbet", + "Never" : "Aldrig", + "Language" : "Sprog", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Oprettet", + "Yes" : "Ja", + "No" : "Nej", + "Downloading …" : "Downloader …", + "OK: Running version: {version}" : "OK: Kørende version: {version}", + "Validate SSL certificate" : "Godkend SSL certifikat", + "Delete this server" : "Slet denne server", + "Test this server" : "Test denne server", + "Shared secret" : "Delt hemmelighed", + "Recording consent" : "Optagelsessamtykke", + "STUN server URL" : "STUN-server URL", + "STUN servers" : "STUN-servere", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server bliver brugt til at bestemme den offentlige IP adresse for deltagerne bagved en router.", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Succesfulde ICE-kandidater returneret af TURN-serveren", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN-server hemmelighed", + "TURN server protocols" : "TURN server protokoller ", + "TURN servers" : "TURN-servere", + "Failed" : "Mislykkede", + "OK" : "OK", + "Checking …" : "Kontrollerer...", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- og \".tflite\" filer blev korrekt returneret af webserveren.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det ser ud til, at PHP og Apache konfigurationen ikke er kompatibel. Bemærk venligst, at PHP kun kan bruges med MPM_PREFORK modulet, og PHP-FPM kan kun bruges med MPM_EVENT modulet.", + "Federated user" : "Fødereret bruger", + "Confirm" : "Bekræft", + "Reset" : "Nulstil", + "Cancel" : "Annullér", + "Back" : "Tilbage", + "Now" : "Nu", + "Meeting created" : "Møde oprettet", + "Upcoming meetings" : "Kommende møder", + "Loading …" : "Indlæser …", + "Schedule a meeting" : "Planlæg et møde", + "Meeting title" : "Mødetitel", + "From" : "Fra", + "To" : "Til", + "Calendar" : "Kalender", + "Attendees" : "Deltagere", + "Add attendees" : "Tilføj deltagere", + "Save" : "Gem", + "Search participants" : "Find deltagere", + "No results" : "Ingen resultater", + "Done" : "Færdig", + "Raise hand" : "Løft hånden", + "Lower hand" : "Sænk hånden", + "Grid view" : "Gittervisning", + "Reload" : "Genindlæs", + "Connecting …" : "Forbinder ...", + "Waiting for {user} to join the call" : "Venter på at {user} deltager i kaldet", + "Waiting for others to join the call …" : "Venter på at andre deltager i opkaldet ...", + "You can invite others in the participant tab of the sidebar" : "Du kan invitere andre i fanen \"deltagere\" i menuen i siden", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan invitere andre i fanen \"deltagere\" i menuen i siden, eller dele dette link for at invitere andre!", + "Share this link to invite others!" : "Del dette link for at invitere andre!", + "Copy link" : "Kopier link", + "Mute audio" : "Slå lyden fra", + "None" : "Ingen", + "You have been muted by a moderator" : "Du er blevet sat på mute af en moderator", + "Disable video" : "Deaktiver video", + "Enable video" : "Slå video til", + "You" : "Dig", + "Mute" : "Mute", + "Show screen" : "Vis skærm", + "Collapse" : "Sammenfold", + "Expand" : "Udvid", + "You need to be logged in to upload files" : "Du skal være logget på for at kunne uploade filer", + "Drop your files to upload" : "Drop dine filer for at uploade", + "Scroll to bottom" : "Rul til bunden", + "Public conversation" : "Offentlig samtale", + "Favorite" : "Foretrukken", + "Date:" : "Dato:", + "Note:" : "Bemærkning:", + "Hide details" : "Skjul detaljer", + "Show details" : "Vis detaljer", + "Unban" : "Fjern blokering", + "Disable" : "Deaktiver", + "Enable" : "Aktiver", + "Choose" : "Vælg", + "The file must be a PNG or JPG" : "Fil format: PNG eller JPG", + "Restricted" : "Begrænset", + "Conversation settings" : "Samtaleindstillinger", + "Personal" : "Personlig", + "Danger zone" : "Farezone", + "Archive conversation" : "Arkiv samtale", + "Do you really want to leave \"{displayName}\"?" : "Vil du virkelig forlade \"{displayName}\"?", + "You can archive this conversation instead." : "Du kan arkivere denne samtale i stedet for.", + "Leave conversation" : "Forlad samtale", + "You need to promote a new moderator before you can leave the conversation" : "Du skal udnævne en ny moderator inden du kan forlade samtalen.", + "Delete conversation" : "Slet samtale", + "Do you really want to delete \"{displayName}\"?" : "Er du sikker på at du vil slette \"{displayName}\"?", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatbeskeder kan udløbe efter et vist tidsrum. Bemærk: Filer der er delt i chatten vil ikke blive slette for ejeren, men vil ikke længere deles i samtalen.", + "Guest access" : "Gæsteadgang", + "Password protection" : "Adgangskodebeskyttelse", + "Set a password" : "Indstil en adgangskode", + "Change password" : "Skift adgangskode", + "Resend invitations" : "Gensend invitationer", + "Invalid language" : "Ugyldigt sprog", + "Start time (optional)" : "Starttid (valgfri)", + "Lock conversation" : "Lås samtale", + "Edit" : "Redigér", + "More information" : "Mere information", + "Delete" : "Slet", + "Log content" : "Log indhold", + "Notifications" : "Notifikationer", + "Important conversation" : "Vigtig samtale", + "\"Do not disturb\" user status is ignored for important conversations" : "Brugerstatus \"Forstyr ikke\" ignoreres ved vigtige samtaler", + "Sensitive conversation" : "Følsom samtale", + "Message preview will be disabled in conversation list and notifications" : "Forhåndsvisning af beskeder vil blive deaktiveret i samtalelisten og notifikationer", + "Require recording consent before joining call in this conversation" : "Kræv optagelsessamtykke inden deltagelse i opkaldet i denne samtale", + "Recording consent is required for all calls" : "Optagelsessamtykke er kræver for alle opkald", + "Join" : "Deltag", + "Error while creating the conversation" : "Fejl under oprettelse af samtalen", + "Create a new conversation" : "Opret ny samtale", + "Join open conversations" : "Deltag i åbne samtaler", + "Unread mentions" : "Ulæste omtaler", + "Create conversation" : "Opret samtale", + "Enter your name" : "Angiv dit navn", + "Submit name and join" : "Angiv navn og deltagname and join", + "Do you already have an account?" : "Har du allerede en konto?", + "Log in" : "Log på", + "Mark as read" : "Marker som læst", + "Mark as unread" : "Marker som ulæst", + "Remove from favorites" : "Fjernet fra favoritter", + "Add to favorites" : "Føj til favoritter", + "Unarchive conversation" : "Fjern samtale fra arkiv", + "You need to promote a new moderator before you can leave the conversation." : "Du skal udnævne en ny moderator før du kan forlade samtalen.", + "No pending invitations" : "Ingen afventende invitationer", + "Home" : "Hjem", + "Unread" : "Ulæst", + "Alphabetically" : "Alfabetisk", + "You have no archived conversations." : "Du har ingen arkiverede samtaler.", + "You have no unread mentions." : "Du har ingen ulæste omtaler", + "An error occurred while performing the search" : "Der opstod en fejl under søgningen", + "Unread messages" : "Ulæste beskedder", + "Back to conversations" : "Tilbage til samtaler", + "Archived conversations" : "Arkiverede samtaler", + "Threads" : "Tråde", + "Clear filter" : "Ryd filter", + "Users" : "Brugere", + "Groups" : "Grupper", + "Teams" : "Teams", + "Other sources" : "Andre kilder", + "Open conversations" : "Åbne samtaler", + "No search results" : "Ingen søgeresultater", + "The meeting will start soon" : "Mødet starter snart", + "This meeting is scheduled for {startTime}" : "Mødet er skemalagt til {startTime}", + "You are currently waiting in the lobby" : "Du venter nu i lobbyen", + "Select a device" : "Vælg en enhed", + "Devices" : "Enhed", + "No audio" : "Ingen lyd", + "No camera" : "Intet kamera", + "The call might be recorded." : "Opkaldes optages måske", + "Select a file" : "Vælg en fil", + "Invalid path selected" : "Ugyldig filsti valgt", + "Blur" : "Slør", + "Upload" : "Send", + "Files" : "Filer", + "(edited)" : "(redigeret)", + "24 hours" : "24 timer", + "7 days" : "7 dage", + "Edited by {actor}" : "Redigeret af {actor}", + "Reply" : "Besvar", + "More actions" : "Flere handlinger", + "Set reminder" : "Sæt påmindelse", + "Reply privately" : "Svar privat", + "Edit message" : "Redigér besked", + "Copy message" : "Kopiér besked", + "Copy message link" : "Kopier besked link", + "Go to file" : "Gå til fil", + "Go to thread" : "Gå til tråd", + "Forward message" : "Videresend besked", + "Translate" : "Oversæt", + "Set custom reminder" : "Sæt brugerdefineret påmindelse", + "Choose a conversation to forward the selected message." : "Vælg en samtale som den valgte besked skal videresendes til.", + "Error while forwarding message" : "Der opstod en fejl ved videresendelse af beskeden.", + "The message has been forwarded to {selectedConversationName}" : "Beskeden er videresendt til {selectedConversationName}", + "Dismiss" : "Afvis", + "Detect language" : "Detekter sprog", + "Translate from" : "Oversæt fra", + "Translate to" : "Oversæt til", + "Copy translated text" : "Kopiér oversat tekst", + "Send now" : "Send nu", + "Message sent" : "Beskeden blev sendt", + "Contact" : "Kontakt", + "Deck Card" : "Opslagskort", + "_%n reply_::_%n replies_" : ["%n svar","%n svar"], + "You voted" : "Du stemte", + "_%n vote_::_%n votes_" : ["%n stemme","%n stemmer"], + "Edit poll draft" : "Redigér afstemningskladde", + "No messages" : "Ingen beskeder", + "Unpin" : "Frigør", + "Create a new group conversation" : "Opret en ny gruppesamtale", + "Add participants" : "Tilføj deltagere", + "Allow guests to join via link" : "Tillad gæster at deltage via link", + "Create a thread" : "Opret en tråd", + "Send message" : "Send besked", + "Send without notification" : "Send uden notifikation", + "File to share" : "Vælg fil til deling", + "Add emoji" : "Tilføj emoji", + "Thread title" : "Trådtitel", + "Send later" : "Send senere", + "Cancel editing" : "Annullér redigering", + "Share from {nextcloud}" : "Del fra {nextcloud}", + "Share from Files" : "Del fra Filer", + "Upload from device" : "Upload fra enhed", + "Create new poll" : "Opret ny afstemning", + "Smart picker" : "Smart Vælger", + "Record voice message" : "Optag stemmebesked", + "End recording and send" : "Afslut optagelse og send", + "Dismiss recording" : "Forkast optagelse", + "Error while recording audio" : "Fejl under optagelse af lyd", + "New file" : "Ny fil", + "Blank" : "Tom", + "Send" : "Send", + "Create poll in {name}" : "Opret afstemning i {name}", + "Create poll" : "Opret afstemning", + "Question" : "Spørgsmål", + "Settings" : "Indstillinger", + "Anonymous poll" : "Anonym afstemning", + "Multiple answers" : "Multiple svar", + "End poll" : "Afslut afstemning", + "Results" : "Resultater", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Opkald uden højtydende backend kan forårsage forbindelsesproblemer og høj belastning af enheder. {linkstart}Få flere oplysninger{linkend}", + "Talk setup incomplete" : "Snak opsætningen er ufuldstændig", + "Settings for participant \"{user}\"" : "Indstillinger for deltager \"{user}\"", + "moderator" : "moderator", + "guest" : "gæst", + "Joined with video" : "Deltager med video", + "Joined via phone" : "Deltager via telefon", + "Joined with audio" : "Deltager med audio", + "Remove group and members" : "Fjern gruppe og medlemmer", + "Remove team and members" : "Fjern team og medlemmer", + "Remove participant" : "Fjern deltager", + "Demote from moderator" : "Degrader fra moderator", + "Promote to moderator" : "Forfrem til moderator", + "Remove" : "Fjern", + "Add users or groups" : "Tilføj brugere eller grupper", + "Add users" : "Tilføj brugere", + "Add groups" : "Tilføj grupper", + "Add teams" : "Tilføj teams", + "Add other sources" : "Tilføj andre kilder", + "Add emails" : "Tilføj e-mails", + "Integrations" : "Integrationer", + "Searching …" : "Søger ...", + "Participants" : "Deltagere", + "Open chat" : "Åbn chat", + "Search messages" : "Søg efter beskeder", + "Chat" : "Chat", + "Details" : "Detaljer", + "Shared items" : "Delte elementer", + "Search in {name}" : "Søg i {name}", + "Search messages …" : "Søg efter beskeder ...", + "Search options" : "Søgeindstillinger", + "From User" : "Fra bruger", + "Since" : "Siden", + "Until" : "TIl", + "No results found" : "Ingen resultater fundet", + "Load more results" : "Indlæs flere resultater", + "Recent threads" : "Seneste tråde", + "Projects" : "Projekter", + "No shared items" : "Ingen delte elementer", + "Thread notifications" : "Trådnotifikationer", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link til samtale", + "Search conversations or users" : "Søg samtaler eller kontakter", + "Select conversation" : "Vælg samtale", + "Edit display name" : "Redigér vist navn", + "Error while setting personal setting" : "Fejl under angivelse af personlig indstilling", + "Play sounds when participants join or leave a call" : "Afspil lyde, når personer deltager eller forlader et opkald", + "Notification settings" : "Meddelelsesindstillinger", + "Default language" : "Standardsprog", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Fejl under indstilling af mappe til vedhæftninger", + "Error while setting default media state" : "Din standard medietilstand er blevet gemt", + "Privacy" : "Privatliv", + "Attachments folder" : "Mappe til vedhæftede filer", + "Search" : "Søg", + "Focus the chat input" : "Fokuser chat funktionen", + "Unfocus the chat input to use shortcuts" : "Fjern fokus på chat funktionen for at bruge genveje", + "Shortcuts while in a call" : "Genveje under et opkald", + "Camera on and off" : "Kamera til og fra", + "Microphone on and off" : "Mikrofon til og fra", + "Raise or lower hand" : "Løft eller sænk hånden", + "Push to talk or push to mute" : "Tryk for at tale eller tryk for at slå lyden fra", + "Zoom-in / zoom-out a screen share" : "Zoom ind / zoom ud på en skærmdeling", + "Mouse wheel" : "Musehjul", + "Start call" : "Start opkald", + "End call" : "Afslut opkald", + "End call for everyone" : "Afslut opkald for alle", + "Recording" : "Optagelse", + "The call has been running for one hour." : "Opkaldet har været igang i en time.", + "Cancel recording start" : "Annuller opstagelsesstart", + "Stop recording" : "Stop optagelse", + "Screensharing options" : "Skærmdeling indstillinger", + "Enable screensharing" : "Slå skærmdeling til", + "Screen sharing is not supported by your browser." : "Skærmdeling er ikke understøttet af din browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skærmdeling kræver at siden er hentet over HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skærmdeling kræver at siden bliver vist gennem HTTPS.", + "An error occurred while starting screensharing." : "Der opstod en fejl da du prøvede at dele skærm.", + "Show your screen" : "Vis din skærm", + "Stop screensharing" : "Stop skærmdeling", + "Start recording" : "Start optagelse", + "Delete now" : "Slet nu", + "Keep" : "Behold", + "Select a region" : "Vælg en region", + "Local time: {time}" : "Lokal tid: {time}", + "Search …" : "Søg ...", + "Message without mention" : "Besked som ikke omtaler nogen", + "Mention myself" : "Omtal mig selv", + "The conversation does not exist" : "Samtalen findes ikke", + "Join a conversation or start a new one!" : "Deltag i en samtale eller start en ny!", + "Join a conversation or start a new one" : "Deltag i en samtale eller start en ny", + "Nextcloud URL" : "Nextcloud URL", + "Talk conversation" : "Snak samtale", + "User" : "Bruger", + "API token" : "API nøgle", + "Login" : "Login", + "Nickname" : "Kaldenavn", + "Client ID" : "Klient-ID", + "Media" : "Medier", + "Polls" : "Afstemninger", + "Deck cards" : "Opslagskort", + "Locations" : "Steder", + "Audio" : "Audio", + "Show all files" : "Vis alle filer", + "Show all deck cards" : "Vis alle opslagskort", + "Follow conversation settings" : "Følg samtaleindstillinger", + "Group" : "Gruppe", + "Team" : "Team", + "You removed {user0} and {user1}" : "Du fjernede {user0} og {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du fjernede {user0}, {user1} og yderligere %n deltager","Du fjernede {user0}, {user1} og yderligere %n deltagere"], + "An administrator removed you and {user0}" : "En administrator fjernede dig og {user0}", + "{actor} removed you and {user0}" : "{actor} fjernede dig og {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administrator fjernede dig, {user0} og yderligere%n deltager","En administrator fjernede dig, {user0} og yderligere %n deltagere"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} fjernede dig, {user0} og yderligere %n deltagere","{actor} fjernede dig, {user0} og yderligere %n deltagere"], + "An administrator removed {user0} and {user1}" : "En administrator fjernede {user0} og {user1}", + "{actor} removed {user0} and {user1}" : "{actor} fjernede {user0} og {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administrator fjernede {user0}, {user1} og yderligere %n deltager","En administrator fjernede {user0}, {user1} og yderligere %n deltagere"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} fjernede {user0}, {user1} og yderligere %n deltager","{actor} fjernede {user0}, {user1} og yderligere %n deltagere"], + "You and {user0} joined the call" : "Du og {user0} deltog i opkaldet", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} og yderligere %n deltagere deltog i opkaldet","Du, {user0} og yderligere %n deltog i opkaldet"], + "{user0} and {user1} joined the call" : "{user0} og {user1} deltog i opkaldet", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} og yderligere %n deltager deltog i opkaldet","{user0}, {user1} og yderligere %n deltagere deltog i opkaldet"], + "You and {user0} left the call" : "Du og {user0} forlod opkaldet", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} og yderligere %n deltager forlod opkaldet","Du, {user0} og yderligere %n deltagere forlod opkaldet"], + "{user0} and {user1} left the call" : "{user0} og {user1} forlod opkaldet", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} og yderligere %n deltager forlod opkaldet","{user0}, {user1} og yderligere %n deltagere forlod opkaldet"], + "You promoted {user0} and {user1} to moderators" : "Du forfremmede {user0} og {user1} til moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du forfremmede {user0}, {user1} og yderligere %n deltager til moderatorer","Du forfremmede {user0}, {user1} og yderligere %n deltagere til moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administrator forfremmede dig og {user0} til moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} forfremmede dig og {user0} til moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administrator forfremmede dig, {user0} og yderligere %n deltager til moderatorer","En administrator forfremmede dig, {user0} og yderligere %n deltagere til moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} forfremmede dig, {user0} og yderligere %n deltager til moderatorer","{actor} forfremmede dig, {user0} og yderligere %n deltagere til moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administrator forfremmede {user0} og {user1} til moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} forfremmede {user0} og {user1} til moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administrator forfremmede {user0}, {user1} og yderligere %n deltager til moderatorer","En administrator forfremmede {user0}, {user1} og yderligere %n deltagere til moderatorer"], + "You:" : "Dig:", + "You: {lastMessage}" : "Dig: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(redigeret af dig)", + "(edited by a deleted user)" : "(redigeret af en slettet bruger)", + "(edited by {moderator})" : "(redigeret af {moderator})", + "Leave this page" : "Forlad denne side", + "Join here" : "Deltag her", + "Deck card has been posted to {conversation}" : "Opslagskort er blevet postet til {conversation}", + "The recording failed. Please contact your administrator." : "Optagelsen fejlede. Kontakt venligst din administrator", + "An error occurred while fetching the participants" : "Kunne ikke hente listen over deltagere", + "Failed to join the conversation." : "Kunne ikke deltage i samtalen.", + "Error while sharing file" : "Fejl ved deling af fil", + "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "I morgen – {timeLocale}", + "This weekend – {timeLocale}" : "Denne weekend – {timeLocale}", + "Next week – {timeLocale}" : "Næste uge – {timeLocale}", + "Error while parsing a PROPFIND error" : "Fejl under parsing af en PROPFIND-fejl", + "Lost connection to signaling server." : "Mistet forbindelse til signalserver.", + "Please restart the app." : "Genstart venligst app'en.", + "Please reload the page." : "Genindlæs venligst siden.", + "Please try to restart the app." : "Prøv at genstarte app'en.", + "Please try to reload the page." : "Prøv at genindlæse siden.", + "Do not disturb" : "Forstyr ikke", + "Away" : "Ikke tilstede", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Det virker som om du taler mens lyden er slået fra, slå den til hvis du vil have at andre skal høre dig", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dette tager lidt længere end forventet. Er medie-rettigheder allerede givet (eller nægtet)? Hvis ja så prøv at genstarte din browser, da lyd og video virker ikke lige nu", + "Access to microphone & camera is only possible with HTTPS" : "Adgang til mikrofon og kamera er kun tilgængeligt over HTTPS", + "Please move your setup to HTTPS" : "Flyt venligst din installation til HTTPS", + "Access to microphone & camera was denied" : "Ingen adgang til mikrofon og kamera", + "WebRTC is not supported in your browser" : "WebRTC er ikke undertøttet i din browser", + "Please use a different browser like Firefox or Chrome" : "Anvend venligst en anden browser fx Firefox eller Chrome", + "Error while accessing microphone & camera" : "Der opstod en fejl da vi prøvede at få adgang til din mikrofon og kamera", + "%s Talk on your mobile devices" : "%s Snak på dine mobilenheder", + "Join conversations at any time, anywhere, on any device." : "Deltag i samtaler når som helst, hvor som helst og på en hvilken som helst enhed.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "Dansk", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Opkaldssammendrag (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Opkaldsoversigts bot'en sender en oversigtsmeddelelse efter opkaldet med alle deltagere og skitserede opgaver", + "Tasks" : "Opgaver", + "Notes" : "Noter", + "Reports" : "Raporter", + "Decisions" : "Beslutninger", + "Agenda" : "Dagsorden", + "Call summary" : "Opkaldsoversigt", + "Call summary - {title}" : "Opkaldsoversigt - {title}", + "Talk conversation for event" : "Snak samtale for begivenhed", + "Next meeting" : "Næste møde", + "Your default media state has been saved" : "Din standard medietilstand er blevet gemt", + "Set reminder for later today" : "Sæt påmindelse for senere i dag", + "Set reminder for tomorrow" : "Sæt påmindelse for i morgen", + "Set reminder for this weekend" : "Sæt påmindelse for denne weekend", + "Set reminder for next week" : "Sæt påmindelse for næste weekend", + "Talk recording from {time} ({conversation})" : "Snak optagelse fra {time} ({conversation})", + "Submit vote" : "Afgiv stemme", + "Your personal setting has been saved" : "Din personlige indstilling er blevet gemt", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Snak blev opdateret, du kan ikke starte eller deltage i et opkald.", + "Nextcloud Talk was updated." : "Nextcloud Snak blev opdateret.", + "Nextcloud is in maintenance mode." : "Nextcloud er i vedligeholdelsestilstand.", + "Nextcloud Talk Federation was updated." : "Nextcloud Snak Sammenkobling blev opdateret." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/de.js b/l10n/de.js new file mode 100644 index 0000000..46736c7 --- /dev/null +++ b/l10n/de.js @@ -0,0 +1,2262 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "Eine Unterhaltung", + "(Duration %s)" : "(Dauer %s)", + "You attended a call with {user1}" : "Du hast an einem Anruf mit {user1} teilgenommen", + "_%n guest_::_%n guests_" : ["%n Gast","%n Gäste"], + "You attended a call with {user1} and {user2}" : "Du hast an einem Anruf mit {user1} und {user2} teilgenommen", + "You attended a call with {user1}, {user2} and {user3}" : "Du hast an einem Anruf mit {user1}, {user2} und {user3} teilgenommen", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du hast an einem Anruf mit {user1}, {user2}, {user3} und {user4} teilgenommen", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du hast an einem Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} teilgenommen", + "_%n other_::_%n others_" : ["%n weiterer","%n weitere"], + "{actor} invited you to {call}" : "{actor} hat dich zu {call} eingeladen", + "You were invited to a conversation or had a call" : "Du wurdest zu einer Unterhaltung eingeladen oder hattest einen Anruf", + "Other activities" : "Andere Aktivitäten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Willkommen bei Nextcloud Talk!\nDiese Unterhaltung informiert über neue Funktionen in Nextcloud Talk.", + "## New in Talk %s" : "## Neu in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge und Safari können jetzt zur Teilnahme an Audio- und Videoanrufen verwendet werden", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Eins-zu-Eins-Unterhaltungen sind jetzt dauerhaft und können nicht mehr versehentlich in eine Gruppenunterhaltung gewandelt werden. Wenn ein Teilnehmer eine Unterhaltung verlässt, so wird die Unterhaltung jetzt nicht mehr automatisch gelöscht. Nur wenn beide Teilnehmer gehen, so wird die Unterhaltung vom Server gelöscht", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Jetzt können alle Teilnehmer durch das Posten von \"@all\" in den Chat benachrichtigt werden", + "- With the \"arrow-up\" key you can repost your last message" : "- Mit der \"Pfeil nach oben\"-Taste kannst du deine letzte Nachricht nochmals senden", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk beherrscht jetzt Befehle. Sende \"/help\" als Nachricht, um zu sehen, ob die Administration welche eingerichtet hat", + "- With projects you can create quick links between conversations, files and other items" : "- Mit Projekten kannst du einfach und schnell Verknüpfungen zwischen Unterhaltungen, Dateien und anderen Elementen erstellen", + "- You can now mention guests in the chat" : "- Du kannst nun Gäste im Chat erwähnen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Unterhaltungen können jetzt eine Lobby erhalten. Dies erlaubt Moderatoren, dem Chat und dem Anruf beizutreten, um das Meeting vorzubereiten, während andere Benutzer und Gäste in der Lobby warten", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kannst jetzt direkt auf Nachrichten antworten, um anderen Benutzern den Kontext deiner Nachrichten anzuzeigen", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Die Suche nach Unterhaltungen und Teilnehmern durchsucht jetzt auch vorhandene Unterhaltungen. Das macht es viel einfacher, vorhergehende Unterhaltungen zu finden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Wenn die Circles-App installiert ist, können jetzt auch benutzerdefinierte Gruppen zu Unterhaltungen hinzugefügt werden", + "- Check out the new grid and call view" : "- Schau dir die neue Kachel- und Sprecheransicht an", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Es können jetzt Dateien direkt von deinem Gerät in den Chat hochgeladen und per Drag'n'Drop übertragen werden.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Geteilte Dateien werden jetzt direkt in der Chatansicht mit den Betrachteranwendungen geöffnet", + "- You can now search for chats and messages in the unified search in the top bar" : "- Es kann jetzt in der vereinheitlichten Suche in der oberen Leiste nach Chats und Nachrichten gesucht werden", + "- Spice up your messages with emojis from the emoji picker" : "- Peppe deine Nachrichten mit Emojis aus der Emoji-Auswahl auf", + "- You can now change your camera and microphone while being in a call" : "- Kamera und Mikrofon können jetzt während des Telefonats gewechselt werden", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Den Unterhaltungen einen Kontext mit einer Beschreibung geben und diese öffnen, damit angemeldete Benutzer diese finden und selbst teilnehmen können", + "- See a read status and send failed messages again" : "- Lesestatus sehen und fehlgeschlagene Nachrichten erneut senden", + "- Raise your hand in a call with the R key" : "- Die Hand in einem Anruf durch drücken der Taste R heben", + "- Join the same conversation and call from multiple devices" : "- Derselben Unterhaltung von verschiedenen Geräten aus beitreten", + "- Send voice messages, share your location or contact details" : "- Sende Sprachnachrichten, teile deinen Aufenthaltsort oder deine Adressdaten", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Füge Gruppen zu einer Unterhaltung hinzu und die Gruppenmitglieder werden automatisch als Teilnehmer hinzugefügt", + "- A preview of your audio and video is shown before joining a call" : "- Eine Vorschau deines Audios und Videos wird angezeigt, bevor du einen Anruf tätigst", + "- You can now blur your background in the newly designed call view" : "- In der neu gestalteten Anrufansicht kannst du jetzt den Hintergrund unscharf anzeigen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren können nun allgemeine und individuelle Berechtigungen an Teilnehmer vergeben", + "- You can now react to chat messages" : "- Du kannst jetzt auf Chatnachrichten reagieren", + "- In the sidebar you can now find an overview of the latest shared items" : "- In der Seitenleiste findest du jetzt eine Übersicht über die zuletzt geteilten Elemente", + "- Use a poll to collect the opinions of others or settle on a date" : "- eine Umfrage verwenden, um die Meinungen anderer einzuholen oder sich auf einen Zeitpunkt zu einigen", + "- Configure an expiration time for chat messages" : "- Ablaufdatum für Chatnachrichten konfigurieren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anrufe starten, ohne andere in großen Gesprächen zu benachrichtigen. Du kannst einzelne Anrufbenachrichtigungen senden, sobald der Anruf begonnen hat.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatnachrichten senden, ohne die Empfänger zu benachrichtigen, für Fälle die nicht dringend sind", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis können jetzt automatisch vervollständigt werden, indem ein \":\" eingegeben wird", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Verknüpfe verschiedene Artikel mit dem neuen Smart-Picker, indem du ein \"/\" eingibst", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoren können jetzt Gruppenräume erstellen (erfordert das Hochleistungs-Backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Anrufe können jetzt aufgezeichnet werden (erfordert das Hochleistungs-Backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Unterhaltungen können nun einen Avatar oder ein Icon haben", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle Hintergründe sind nun zusätzlich zum verwischten Hintergrund in Video-Unterhaltungen möglich", + "- Reactions are now available during calls" : "- Reaktionen sind nun auch in Anrufen möglich", + "- Typing indicators show which users are currently typing a message" : "- Schreibindikatoren zeigen, welche Benutzer dabei sind, eine Nachricht zu schreiben", + "- Groups can now be mentioned in chats" : "- Gruppen können nun in Chats erwähnt werden", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Anrufaufnahmen werden automatisch transkribiert, wenn eine entsprechende Anbieterapp registriert ist", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatnachrichten können übersetzt werden, wenn eine Übersetzungsanbieter-App registriert ist", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kann jetzt in _Chat_nachrichten verwendet werden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "– Zur Implementierung von Bots stehen jetzt Webhooks zur Verfügung. Weitere Informationen findest du in der Dokumentation: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Lege eine Erinnerung für eine Chatnachricht fest, um später erneut benachrichtigt zu werden", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Verwende die **Notiz an mich**-Unterhaltung, um Notizen zu machen und Informationen zwischen deinen Geräten auszutauschen", + "- Captions allow to send a message with a file at the same time" : "- Untertitel ermöglichen das gleichzeitige Senden einer Nachricht mit einer Datei", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Das Video des Sprechers ist jetzt beim Teilen des Bildschirms sichtbar und die Anrufreaktionen sind animiert", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Nachrichten können jetzt 6 Stunden lang von angemeldeten Autoren und Moderatoren bearbeitet werden", + "- Unsent message drafts are now saved in your browser" : "- Nicht gesendete Nachrichtenentwürfe werden jetzt in Deinem Browser gespeichert-", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchats können jetzt im Verbund mit anderen Talk-Servern geführt werden", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoren können jetzt Konten und Gäste sperren, um zu verhindern, dass sie erneut an einer Unterhaltung teilnehmen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Anstehende Anrufe aus verknüpften Kalenderterminen und Abwesenheitsvertretungen werden jetzt in Unterhaltungen angezeigt", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Anrufe können jetzt im Verbund mit anderen Talk-Servern getätigt werden (erfordert das Hochleistungs-Backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Wir stellen den Nextcloud Talk Desktop-Client für Windows, macOS und Linux vor: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zusammenfassung von Anrufaufzeichnungen und ungelesenen Nachrichten in Chats mit dem Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Verbesserte Meetings mit Erkennung von Gästen, die über ihre E-Mail-Adresse eingeladen werden, Import von Teilnehmerlisten, Entwürfen für Umfragen und Herunterladen von Teilnehmerlisten der Anrufe", + "- Archive conversations to stay focused" : "- Archivieren von Gesprächen, um konzentriert zu bleiben", + "- Schedule a meeting into your calendar from within a conversation" : "- Eine Besprechung in deinem Kalender aus einer Unterhaltung heraus planen", + "- Search for messages of the current conversation directly in the right sidebar" : "- Nach Nachrichten der aktuellen Unterhaltung direkt in der rechten Seitenleiste suchen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Mit der neuen kompakten Liste siehst du mehr Unterhaltungen auf einen Blick (in den Gesprächseinstellungen aktivieren)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Besprechungsunterhaltungen werden jetzt mit dem Titel und der Beschreibung aus dem Kalender synchronisiert und mit einem Suchfilter ausgeblendet, bis sie kurz vor dem Beginn stehen", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Unterhaltungen in den Benachrichtigungseinstellungen als sensibel markieren, um den Inhalt der Nachricht aus der Unterhaltungsliste und den Benachrichtigungen auszublenden", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Um Push-Benachrichtigungen während \"Bitte nicht stören\" zu erhalten, markiere Unterhaltungen als wichtig", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Füge andere Teilnehmer zu einem Einzelgespräch hinzu, um im Handumdrehen ein neues Gruppengespräch zu erstellen.", + "- Use threads to keep your chat and discussions organized" : "- Themen verwenden, um deine Chats und Diskussionen zu organisieren", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-Transkriptionen sind jetzt während des Anrufs verfügbar (erfordert die Live-Transkriptions-ExApp und das Hochleistungs-Backend)", + "- Moderators can now pin messages so they are kept at the top" : "- die Moderation kann jetzt Nachrichten anheften, sodass diese oben bleiben", + "- Schedule a message to send it at a later time" : "- Den Versand einer Nachricht zu einem späteren Zeitpunkt planen", + "_All %n participant_::_All %n participants_" : ["Jeder %n Teilnehmer","Alle %n Teilnehmer"], + "Talk updates ✅" : "Talk Aktualisierungen ✅", + "Reaction deleted by author" : "Reaktion vom Autor gelöscht", + "{actor} created the conversation" : "{actor} hat die Unterhaltung erstellt", + "You created the conversation" : "Du hast die Unterhaltung erstellt", + "System created the conversation" : "Das System hat die Unterhaltung erstellt", + "An administrator created the conversation" : "Die Administration hat die Unterhaltung erstellt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du hast die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Die Administration hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "{actor} set the description" : "{actor} hat die Beschreibung gesetzt", + "You set the description" : "Du hast die Beschreibung gesetzt", + "An administrator set the description" : "Die Administration hat die Beschreibung gesetzt", + "{actor} removed the description" : "{actor} hat die Beschreibung entfernt", + "You removed the description" : "Du hast die Beschreibung entfernt", + "An administrator removed the description" : "Die Administration hat die Beschreibung entfernt", + "You started a silent call" : "Du hast einen stillen Anruf gestartet", + "Outgoing silent call" : "Ausgehender stiller Anruf", + "{actor} started a silent call" : "{actor} hat einen stillen Anruf gestartet", + "Incoming silent call" : "Ankommender stiller Anruf", + "You started a call" : "Du hast einen Anruf begonnen", + "Outgoing call" : "Ausgehender Anruf", + "{actor} started a call" : "{actor} hat einen Anruf begonnen", + "Incoming call" : "Eingehender Anruf", + "{actor} joined the call" : "{actor} ist dem Anruf beigetreten", + "You joined the call" : "Du bist dem Anruf beigetreten", + "{actor} left the call" : "{actor} hat den Anruf verlassen", + "You left the call" : "Du hast den Anruf verlassen", + "{actor} unlocked the conversation" : "{actor} hat die Unterhaltung freigegeben", + "You unlocked the conversation" : "Du hast die Unterhaltung freigegeben", + "An administrator unlocked the conversation" : "Die Administration hat die Unterhaltung freigegeben", + "{actor} locked the conversation" : "{actor} hat die Unterhaltung gesperrt", + "You locked the conversation" : "Du hast die Unterhaltung gesperrt", + "An administrator locked the conversation" : "Die Administration hat die Unterhaltung gesperrt", + "{actor} limited the conversation to the current participants" : "{actor} beschränkte das Gespräch auf die aktuellen Teilnehmer", + "You limited the conversation to the current participants" : "Du hast das Gespräch auf die aktuellen Teilnehmer beschränkt", + "An administrator limited the conversation to the current participants" : "Die Administration hat das Gespräch auf die aktuellen Teilnehmer beschränkt", + "{actor} opened the conversation to registered users" : "{actor} öffnete die Unterhaltung für registrierte Benutzer", + "You opened the conversation to registered users" : "Du hast die Unterhaltung für registrierte Benutzer geöffnet", + "An administrator opened the conversation to registered users" : "Die Administration hat die Unterhaltung für registrierte Benutzer geöffnet", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "You opened the conversation to registered users and users created with the Guests app" : "Du hast die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Die Administration hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "The conversation is now open to everyone" : "Die Unterhaltung ist nun für jeden geöffnet", + "{actor} opened the conversation to everyone" : "{actor} hat die Unterhaltung für jeden geöffnet", + "You opened the conversation to everyone" : "Du hast die Unterhaltung für Jedermann geöffnet", + "{actor} restricted the conversation to moderators" : "{actor} hat die Unterhaltung auf Moderatoren beschränkt", + "You restricted the conversation to moderators" : "Du hast die Unterhaltung auf Moderatoren beschränkt", + "{actor} started breakout rooms" : "{actor} hat Gruppenräume gestartet", + "You started breakout rooms" : "Du hast Gruppenräume gestartet.", + "{actor} stopped breakout rooms" : "{actor} hat Gruppenräume beendet", + "You stopped breakout rooms" : "Du hast Gruppenräume beendet", + "{actor} allowed guests" : "{actor} hat Gäste zugelassen", + "You allowed guests" : "Du hast Gäste zugelassen", + "An administrator allowed guests" : "Die Administration hat Gäste erlaubt", + "{actor} disallowed guests" : "{actor} hat Gäste untersagt", + "You disallowed guests" : "Du hast Gäste untersagt", + "An administrator disallowed guests" : "Die Administration hat den Gastzugriff untersagt", + "{actor} set a password" : "{actor} hat ein Passwort vergeben", + "You set a password" : "Du hast ein Passwort vergeben", + "An administrator set a password" : "Die Administration hat ein Passwort gesetzt", + "{actor} removed the password" : "{actor} hat das Passwort entfernt", + "You removed the password" : "Du hast das Passwort entfernt", + "An administrator removed the password" : "Die Administration hat das Passwort entfernt", + "{actor} added {user}" : "{actor} hat {user} hinzugefügt", + "You joined the conversation" : "Du bist der Unterhaltung beigetreten", + "{actor} joined the conversation" : "{actor} ist der Unterhaltung beigetreten", + "You added {user}" : "Du hast {user} hinzugefügt", + "{actor} added you" : "{actor} hat dich hinzugefügt", + "An administrator added you" : "Die Administration hat dich hinzugefügt", + "An administrator added {user}" : "Die Administration hat {user} hinzugefügt", + "You left the conversation" : "Du hast die Unterhaltung verlassen", + "{actor} left the conversation" : "{actor} hat die Unterhaltung verlassen", + "{actor} removed {user}" : "{actor} hat {user} entfernt", + "You removed {user}" : "Du hast {user} entfernt", + "{actor} removed you" : "{actor} hat dich entfernt", + "An administrator removed you" : "Die Administration hat dich entfernt", + "An administrator removed {user}" : "Die Administration hat {user} entfernt", + "{actor} invited {federated_user}" : "{actor} hat {federated_user} eingeladen", + "You invited {federated_user}" : "Du hast {federated_user} eingeladen", + "You accepted the invitation" : "Du hast diese Einladung angenommen", + "{actor} invited you" : "{actor} hat dich eingeladen", + "An administrator invited you" : "Die Administration hat dich eingeladen", + "An administrator invited {federated_user}" : "Die Administration hat {federated_user} eingeladen", + "{federated_user} accepted the invitation" : "{federated_user} hat die Einladung angenommen", + "{actor} removed {federated_user}" : "{actor} hat {federated_user} entfernt", + "You removed {federated_user}" : "Du hast {federated_user} entfernt", + "You declined the invitation" : "Du hast die Einladung abgelehnt", + "An administrator removed {federated_user}" : "Die Administration hat {federated_user} entfernt", + "{federated_user} declined the invitation" : "{federated_user} hat die Einladung abgelehnt", + "{actor} added group {group}" : "{actor} hat die Gruppe {group} hinzugefügt", + "You added group {group}" : "Du hast die Gruppe {group} hinzugefügt", + "An administrator added group {group}" : "Die Administration hat die Gruppe {group} hinzugefügt", + "{actor} removed group {group}" : "{actor} hat die Gruppe {group} entfernt", + "You removed group {group}" : "Du hast die Gruppe {group} entfernt", + "An administrator removed group {group}" : "Die Administration hat die Gruppe {group} entfernt", + "{actor} added team {circle}" : "{actor} hat das Team {circle} hinzugefügt", + "You added team {circle}" : "Du hast das Team {circle} hinzugefügt", + "An administrator added team {circle}" : "Die Administration hat das Team {circle} hinzugefügt", + "{actor} removed team {circle}" : "{actor} hat das Team {circle} entfernt", + "You removed team {circle}" : "Du hast das Team {circle} entfernt", + "An administrator removed team {circle}" : "Die Administration hat das Team {circle} entfernt", + "{actor} added {phone}" : "{actor} hat {phone} hinzugefügt", + "You added {phone}" : "Du hast {phone} hinzugefügt", + "An administrator added {phone}" : "Die Administration hat {phone} hinzgefügt", + "{actor} removed {phone}" : "{actor} hat {phone} entfernt", + "You removed {phone}" : "Du hast {phone} entfernt", + "An administrator removed {phone}" : "Die Administration hat {phone} entfernt", + "{actor} promoted {user} to moderator" : "{actor} hat {user} Moderationsrechte zugeteilt", + "You promoted {user} to moderator" : "Du hast {user} Moderationsrechte zugeteilt", + "{actor} promoted you to moderator" : "{actor} hat dir Moderationsrechte zugeteilt", + "An administrator promoted you to moderator" : "Die Administration hat dir Moderationsrechte zugeteilt", + "An administrator promoted {user} to moderator" : "Die Administration hat {user} Moderationsrechte zugeteilt", + "{actor} demoted {user} from moderator" : "{actor} hat {user} Moderationsrechte entzogen", + "You demoted {user} from moderator" : "Du hast {user} Moderationsrechte entzogen", + "{actor} demoted you from moderator" : "{actor} hat dir Moderationsrechte entzogen", + "An administrator demoted you from moderator" : "Die Administration hat dir Moderationsrechte entzogen", + "An administrator demoted {user} from moderator" : "Die Administration hat {user} Moderationsrechte entzogen", + "{actor} shared a file which is no longer available" : "{actor} hat eine Datei geteilt, die nicht mehr vorhanden ist", + "You shared a file which is no longer available" : "Du hast eine Datei geteilt, die nicht mehr vorhanden ist", + "File shares are currently not supported in federated conversations" : "Dateifreigaben werden bislang in federierten Unterhaltungen noch nicht unterstützt", + "The shared location is malformed" : "Der freigegebene Standort ist fehlerhaft", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} hat Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du hast Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "{actor} created thread {title}" : "{actor} hat das Thema {title} erstellt", + "You created thread {title}" : "Du hast das Thema {title} erstellt", + "{actor} renamed thread {title}" : "{actor} hat das Thema {title} umbenannt", + "You renamed thread {title}" : "Du hast das Thema {title} umbenannt", + "{actor} updated the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration aktualisiert", + "You updated the Matterbridge configuration" : "Du hast die Matterbridge-Konfiguration aktualisiert", + "{actor} removed the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration entfernt", + "You removed the Matterbridge configuration" : "Du hast die Matterbridge-Konfiguration entfernt", + "{actor} started Matterbridge" : "{actor} hat Matterbridge gestartet", + "You started Matterbridge" : "Du hast Matterbridge gestartet", + "{actor} stopped Matterbridge" : "{actor} hat Matterbridge angehalten", + "You stopped Matterbridge" : "Du hast Matterbridge angehalten", + "{actor} deleted a message" : "{actor} hat eine Nachricht gelöscht", + "You deleted a message" : "Du hast eine Nachricht gelöscht", + "{actor} edited a message" : "{actor} hat eine Nachricht bearbeitet", + "You edited a message" : "Du hast eine Nachricht bearbeitet", + "{actor} pinned a message" : "{actor} hat eine Nachricht angepinnt", + "You pinned a message" : "Du hast eine Nachricht angepinnt", + "{actor} unpinned a message" : "{actor} hat eine Nachricht gelöst", + "Message was automatically unpinned" : "Die Nachricht wurde automatisch gelöst.", + "You unpinned a message" : "Du hast eine Nachricht gelöst", + "{actor} deleted a reaction" : "{actor} hat eine Reaktion gelöscht", + "You deleted a reaction" : "Du hast eine Reaktion gelöscht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du hast den Ablauf der Nachricht auf %n Woche festgelegt.","Du hast den Ablauf der Nachricht auf %n Wochen festgelegt."], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du hast den Ablauf der Nachricht auf %n Tag festgelegt.","Du hast den Ablauf der Nachricht auf %n Tage festgelegt."], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du hast den Ablauf der Nachricht auf %n Stunde festgelegt.","Du hast den Ablauf der Nachricht auf %n Stunden festgelegt."], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du hast den Ablauf der Nachricht auf %n Minuten festgelegt.","Du hast den Ablauf der Nachricht auf %n Minuten festgelegt."], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} hat den Ablauf der Nachricht auf %n Woche festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Wochen festgelegt."], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} hat den Ablauf der Nachricht auf %n Tag festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Tage festgelegt."], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} hat den Ablauf der Nachricht auf %n Stunde festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Stunden festgelegt."], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt."], + "{actor} disabled message expiration" : "{actor} hat den Ablauf von Nachrichten deaktiviert.", + "You disabled message expiration" : "Du hast den Ablauf von Nachrichten deaktiviert.", + "{actor} cleared the history of the conversation" : "{actor} hat den Gesprächsverlauf gelöscht", + "You cleared the history of the conversation" : "Du hast den Gesprächsverlauf gelöscht", + "{actor} set the conversation picture" : "{actor} hat das Unterhaltungsbild eingestellt", + "You set the conversation picture" : "Du hast das Unterhaltungsbild eingestellt", + "{actor} removed the conversation picture" : "{actor} hat das Unterhaltungsbild entfernt", + "You removed the conversation picture" : "Du hast das Unterhaltungsbild entfernt", + "{actor} ended the poll {poll}" : "{actor} hat die Umfrage {poll} beendet", + "You ended the poll {poll}" : "Du hast die Umfrage {poll} beendet", + "{actor} started the video recording" : "{actor} hat die Videoaufnahme gestartet.", + "You started the video recording" : "Du hast die Videoaufnahme gestartet.", + "{actor} stopped the video recording" : "{actor} hat die Videoaufnahme gestoppt.", + "You stopped the video recording" : "Du hast die Videoaufnahme gestoppt.", + "{actor} started the audio recording" : "{actor} hat die Audioaufnahme gestartet.", + "You started the audio recording" : "Du hast die Audioaufnahme gestartet.", + "{actor} stopped the audio recording" : "{actor} hat die Audioaufnahme gestoppt.", + "You stopped the audio recording" : "Du hast die Audioaufnahme gestoppt.", + "The recording failed" : "Aufnahme fehlgeschlagen", + "Someone voted on the poll {poll}" : "Jemand hat in der Umfrage {poll} abgestimmt", + "Message deleted by author" : "Nachricht vom Autor gelöscht", + "Message deleted by {actor}" : "Nachricht von {actor} gelöscht", + "Message deleted by you" : "Nachricht von dir gelöscht", + "Deleted user" : "Gelöschter Benutzer", + "Unknown number" : "Unbekannte Nummer", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (Gast) ", + "Missed call" : "Verpasster Anruf", + "Unanswered call" : "Unbeantworteter Anruf", + "Call ended (Duration {duration})" : "Anruf beendet (Dauer {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} hat den Anruf beendet (Dauer {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})","Anruf mit %n Gästen wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet (Dauer {duration})","Anruf mit %n Gästen wurde beendet (Dauer {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} hat den Anruf mit %n Gast beendet (Duration {duration})","{actor} hat den Anruf mit %n Gästen beendet (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} ended (Duration {duration})" : "Anruf mit {user1} beendet (Dauer {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} hat den Anruf mit {user1} beendet (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} and {user2} ended (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} hat den Anruf mit {user1} und {user2} beendet (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2} und {user3} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3} und {user4} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} beendet (Duration {duration})", + "Message of {user} in {conversation}" : "Nachricht von {user} in {conversation}", + "Message of {user}" : "Nachricht von {user}", + "Message of a deleted user in {conversation}" : "Nachricht eines gelöschten Benutzers in {conversation}", + "Talk conversations" : "Talk Unterhaltungen", + "Talk to %s" : "Mit %s sprechen", + "An error occurred. Please contact your administrator." : "Es ist ein Fehler aufgetreten. Bitte kontaktiere deine Administration.", + "App disabled" : "App deaktiviert", + "Conversation subfolders are disabled" : "Unterhaltungsunterordner sind deaktiviert", + "Storage quota exceeded" : "Speicherkontingent überschritten", + "Could not prepare conversation folder" : "Unterhaltungsordner konnten nicht vorbereitet werden", + "File not found" : "Datei nicht gefunden", + "Path must point to a file" : "Der Pfad muss auf eine Datei verweisen", + "File is not inside the conversation draft folder for this room" : "Die Datei befindet sich nicht im Unterhaltungsentwurfsordner für diesen Raum", + "File is not shared, or shared but not with the user" : "Datei ist nicht geteilt oder nicht mit dem Benutzer geteilt", + "No account available to delete." : "Kein Konto zum Löschen verfügbar.", + "Poll" : "Umfrage", + "Password needs to be set" : "Passwort muss festgelegt werden", + "Uploading the file failed" : "Hochladen der Datei fehlgeschlagen", + "No image file provided" : "Keine Bilddatei bereitgestellt", + "File is too big" : "Datei ist zu groß", + "Invalid file provided" : "Ungültige Datei bereitgestellt", + "Invalid image" : "Ungültiges Bild", + "Unknown filetype" : "Unbekannter Dateityp", + "Talk mentions" : "Talk Erwähnungen", + "More conversations" : "Weitere Unterhaltungen", + "Say hi to your friends and colleagues!" : "Begrüße deine Freunde und Kollegen!", + "No unread mentions" : "Keine ungelesenen Erwähnungen", + "Call in progress" : "Anruf ist aktiv", + "You were mentioned" : "Du wurdest erwähnt", + "Write to conversation" : "An eine Unterhaltung schreiben", + "Writes event information into a conversation of your choice" : "Schreibt Termininformationen an eine Unterhaltung deiner Wahl", + "Missing email field in header line" : "Fehlendes E-Mail-Feld in der Kopfzeile", + "Following lines are invalid: %s" : "Folgende Zeilen sind unzulässig: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s hat dich zur Unterhaltung \"%2$s\" eingeladen.", + "You were invited to conversation \"%s\"." : "Du wurdest zur Unterhaltung \"%s\" eingeladen.", + "Conversation invitation" : "Einladung zu einer Unterhaltung", + "Scheduled time" : "Geplante Zeit", + "Description" : "Beschreibung", + "You can also dial-in via phone with the following details" : "Du kannst dich auch per Telefon mit den folgenden Daten einwählen", + "Dial-in information" : "Einwahlinformationen", + "Meeting ID" : "Meeting-ID", + "Your PIN" : "Deine PIN", + "Click the button below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf den unten stehenden Link klicken.", + "Join lobby for \"%s\"" : "Lobby für \"%s\" beitreten", + "Click the button below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf den unten stehenden Link klicken.", + "Join \"%s\"" : "\"%s\" beitreten", + "Meeting" : "Meeting", + "Password request: %s" : "Passwortanforderung: %s", + "Private conversation" : "Private Unterhaltung", + "Deleted user (%s)" : "Gelöschter Benutzer (%s)", + "Failed to upload call recording" : "Anrufaufzeichnung konnte nicht hochgeladen werden", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Der Aufzeichnungsserver konnte die Aufzeichnung des Anrufs {call} nicht hochladen. Bitte wende dich an die Administration.", + "Share to chat" : "In Unterhaltung teilen", + "Dismiss notification" : "Benachrichtigung verwerfen", + "Call recording now available" : "Anrufaufzeichnung jetzt verfügbar", + "The recording for the call in {call} was uploaded to {file}." : "Aufnahme der Unterhaltung in {call} wurde als {file} hochgeladen.", + "Transcript now available" : "Transkript jetzt verfügbar", + "The transcript for the call in {call} was uploaded to {file}." : "Das Transkript für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to transcript call recording" : "Transkription der Anrufaufzeichnung fehlgeschlagen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht transkribieren. Bitte wende dich an die Administration.", + "Call summary now available" : "Anrufzusammenfassung ist jetzt verfügbar", + "The summary for the call in {call} was uploaded to {file}." : "Die Zusammenfassung für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to summarize call recording" : "Zusammenfassung der Anrufaufzeichnung fehlgeschlagen", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht zusammenfassen. Bitte wende Dich an die Administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} hat dich eingeladen dem {roomName} auf {remoteServer} beizutreten", + "Accept" : "Annehmen", + "Decline" : "Ablehnen", + "{user1} invited you to a federated conversation" : "{user1} hat dich zu einer Federated-Unterhaltung eingeladen", + "Someone reacted" : "Jemand hat reagiert", + "New message" : "Neue Nachricht", + "Reminder" : "Erinnerung", + "Someone mentioned you" : "Jemand hat dich erwähnt", + "Notification" : "Benachrichtigung", + "Someone reacted in a private conversation" : "Jemand hat in einer privaten Unterhaltung reagiert", + "You received a message in a private conversation" : "Du hast eine Nachricht in einer privaten Unterhaltung erhalten", + "Reminder in a private conversation" : "Erinnerung in einer privaten Unterhaltung", + "Someone mentioned you in a private conversation" : "Jemand hat dich in einer privaten Unterhaltung erwähnt", + "Notification in a private conversation" : "Benachrichtigung in einer privaten Unterhaltung", + "Reminder: You in {call}" : "Erinnerung: Du in {call}", + "Reminder: {user} in {call}" : "Erinnerung: {user} in {call}", + "Reminder: Deleted user in {call}" : "Erinnerung: Gelöschter Benutzer in {call}", + "Reminder: {guest} (guest) in {call}" : "Erinnerung: {guest} (Gast) in {call}", + "Reminder: Guest in {call}" : "Erinnerung: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reagierte mit {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagierte mit {reaction} in {call}\n ", + "Deleted user reacted with {reaction} in {call}" : "Gelöschter Benutzer reagierte mit {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (Gast) reagierte mit {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reagierte mit {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gelöschter Benutzer in {call}", + "{guest} (guest) in {call}" : "{guest} (Gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} hat dir eine private Nachricht gesendet", + "{user} sent a message in conversation {call}" : "{user} hat eine Nachricht in der Unterhaltung {call} gesendet", + "A deleted user sent a message in conversation {call}" : "Ein gelöschter Benutzer hat eine Nachricht in der Unterhaltung {call} gesendet", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) hat eine Nachricht in der Unterhaltung {call} gesendet", + "A guest sent a message in conversation {call}" : "Ein Gast hat eine Nachricht in der Unterhaltung {call} gesendet", + "{user} replied to your private message" : "{user} hat auf deine private Nachricht geantwortet", + "{user} replied to your message in conversation {call}" : "{user} hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "A deleted user replied to your message in conversation {call}" : "Ein gelöschter Benutzer hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "A guest replied to your message in conversation {call}" : "Ein Gast hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "Reminder: You in private conversation {call}" : "Erinnerung: Du in der privaten Unterhaltung {call}", + "Reminder: A deleted user in private conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der privaten Unterhaltung {call}", + "Reminder: {user} in private conversation" : "Erinnerung: {user} in einer privaten Unterhaltung", + "Reminder: You in conversation {call}" : "Erinnerung: Du in der Unterhaltung {call}", + "Reminder: {user} in conversation {call}" : "Erinnerung: {user} in der Unterhaltung {call}", + "Reminder: A deleted user in conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der Unterhaltung {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Erinnerung: {guest} (Gast) in der Unterhaltung {call}", + "Reminder: A guest in conversation {call}" : "Erinnerung: Ein Gast in der Unterhaltung {call}", + "{user} reacted with {reaction} to your private message" : "{user} hat mit {reaction} auf deine private Nachricht reagiert", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} hat mit {reaction} auf deiner Nachricht in der Unterhaltung {call} reagiert", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ein gelöschter Benutzer hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (Gast) hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ein Gast hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "{user} mentioned you in a private conversation" : "{user} hat dich in einer privaten Unterhaltung erwähnt", + "{user} mentioned group {group} in conversation {call}" : "{user} hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "{user} mentioned team {team} in conversation {call}" : "{user} hat das Team {team} in der Unterhaltung {call} erwähnt", + "{user} mentioned everyone in conversation {call}" : "{user} hat jeden in der Unterhaltung erwähnt {call}", + "{user} mentioned you in conversation {call}" : "{user} hat dich in einer Unterhaltung erwähnt: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ein gelöschter Benutzer hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned team {team} in conversation {call}" : "Ein gelöschter Benutzer hat das Team {team} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned everyone in conversation {call}" : "Ein gelöschter Benutzer hat jeden in der Unterhaltung {call} erwähnt", + "A deleted user mentioned you in conversation {call}" : "Ein gelöschter Benutzer hat dich in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) erwähnte die Gruppe {group} in der Unterhaltung {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (Gast) hat das Team {team} in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) hat jeden in der Unterhaltung {call} erwähnt ", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) hat dich in der Unterhaltung {call} erwähnt", + "A guest mentioned group {group} in conversation {call}" : "Ein Gast erwähnte die Gruppe {group} in der Unterhaltung {call}", + "A guest mentioned team {team} in conversation {call}" : "Ein Gast hat das Team {team} in der Unterhaltung {call} erwähnt", + "A guest mentioned everyone in conversation {call}" : "Ein Gast hat alle in der Unterhaltung {call} erwähnt", + "A guest mentioned you in conversation {call}" : "Ein Gast hat dich in der Unterhaltung {call} erwähnt", + "View message" : "Nachricht ansehen", + "Dismiss reminder" : "Erinnerung verwerfen", + "View chat" : "Chat anzeigen", + "{user} invited you to a group conversation: {call}" : "{user} hat dich zu einer Gruppenunterhaltung eingeladen: {call}", + "Join call" : "Anruf beitreten", + "Answer call" : "Anruf beantworten", + "{user} would like to talk with you" : "{user} möchte mit dir sprechen", + "Call back" : "Zurückrufen", + "You missed a call from {user}" : "Du hast einen Anruf von {user} verpasst", + "Accept call" : "Anruf annehmen", + "Incoming phone call from {call}" : "Eingehender Anruf von{call}", + "You missed a phone call from {call}" : "Du hast einen Anruf von {call} verpasst", + "A group call has started in {call}" : "Ein Gruppenanruf wurde in {call} gestartet", + "You missed a group call in {call}" : "Du hast einen Gruppenanruf in {call} verpasst", + "{email} is requesting the password to access {file}" : "{email} hat das Passwort für den Zugriff auf {file} angefordert", + "{email} tried to request the password to access {file}" : "{email} hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Someone is requesting the password to access {file}" : "Jemand hat das Passwort für den Zugriff auf {file} angefordert", + "Someone tried to request the password to access {file}" : "Jemand hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Open settings" : "Einstellungen öffnen", + "Hosted signaling server added" : "Gehosteter Signalisierungsserver hinzugefügt", + "The hosted signaling server is now configured and will be used." : "Der gehostete Signalisierungsserver ist jetzt konfiguriert und wird verwendet.", + "Hosted signaling server removed" : "Gehosteter Signalisierungsserver entfernt", + "The hosted signaling server was removed and will not be used anymore." : "Der gehostete Signalisierungsserver wurde entfernt und wird nicht mehr verwendet.", + "Hosted signaling server changed" : "Gehosteter Signalisierungsserver geändert", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Das gehostete Konto des Signalisierungsservers hat den Status von \"{oldstatus}\" in \"{newstatus}\" geändert.", + "pending" : "Ausstehend", + "active" : "Aktiv", + "expired" : "Abgelaufen", + "blocked" : "Blockiert", + "error" : "Fehler", + "The certificate of {host} expires in {days} days" : "Das Zertifikat von {host} läuft in {days} Tagen ab", + "The certificate of {host} expired" : "Das Zertifikat von {host} ist abgelaufen", + "Contact via Talk" : "Über Talk kontaktieren", + "Open Talk" : "Talk öffnen", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Nachrichten senden, Themen erstellen und Sprach- sowie und Videoanrufe starten.", + "Presentation" : "Präsentation", + "Voice room" : "Sprachraum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Direkt am Anruf teilnehmen, ideal für Nachholtermine oder spontane Treffen.", + "Webinar" : "Webinar", + "Conversations" : "Unterhaltungen", + "Messages in current conversation" : "Nachrichten in der aktuellen Unterhaltung", + "{user}" : "{user}", + "Messages" : "Nachrichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Nachrichten in anderen Unterhaltungen", + "One-to-one rooms always need to show the other users avatar" : "Eins-zu-Eins-Räume müssen immer den Avatar des anderen Benutzers anzeigen", + "Invalid emoji character" : "Ungültiges Emoji-Zeichen", + "Invalid background color" : "Ungültige Hintergrundfarbe", + "Avatar image is not square" : "Benutzerbild ist nicht quadratisch", + "Room {number}" : "Raum {number}", + "Other" : "Sonstiges", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Testserver nicht erreichbar ist. Bitte versuche es später noch einmal.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Problem bei der Authentifizierung dieser Instanz aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Something unexpected happened." : "Es ist etwas Unerwartetes passiert.", + "The URL is invalid." : "Die URL ist ungültig", + "An HTTPS URL is required." : "Eine HTTPS-URL ist erforderlich.", + "The email address is invalid." : "Die E-Mail-Adresse ist ungültig.", + "The language is invalid." : "Die Sprache ist ungültig.", + "The country is invalid." : "Das Land ist ungültig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Es gibt ein Problem mit dem Anfrage für den Trial-Test. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are send from your servers address. Please try again later." : "Es werden zu viele Anfragen von deiner Serveradresse aus gesendet. Bitte später noch einmal versuchen.", + "There is already a trial registered for this Nextcloud instance." : "Für diese Nextcloud-Instanz ist bereits eine Trial-Testversion registriert.", + "Something unexpected happened. Please try again later." : "Es ist etwas Unerwartetes passiert. Bitte später erneut versuchen.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Trial-Testserver sich falsch verhalten hat. Bitte versuche es später noch einmal.", + "Trial requested but failed to get account information. Please check back later." : "Trial-Testversion angefordert, aber keine Kontoinformationen erhalten. Bitte versuche es später erneut.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Es ist ein Problem bei der Authentifizierung dieser Anfrage aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Das Abrufen von Kontoinformationen ist fehlgeschlagen, weil sich der Trial-Server falsch verhalten hat. Bitte später noch einmal versuchen.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Beim Abrufen der Kontoinformationen ist ein Problem aufgetreten. Bitte überprüfe deine Protokolldateien für weitere Informationen.", + "There is no such account registered." : "Ein solches Konto ist nicht registriert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontoinformationen konnten nicht abgerufen werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuche es später erneut.", + "Deleting the hosted signaling server account failed. Please check back later." : "Fehler beim Löschen des Singnalisierungsserver-Kontos. Bitte versuche es später erneut.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Konto konnte nicht gelöscht werden, da sich der Trial-Testserver falsch verhalten hat. Bitte versuche es später erneut.", + "There is a problem with deleting the account. Please check your logs for further information." : "Es gibt ein Problem mit dem Löschen des Kontos. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are sent from your servers address. Please try again later." : "Es wurden zu viele Anfragen von deiner Serveradresse gesendet. Bitte versuche es später noch einmal.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Konto konnte nicht gelöscht werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuche es später erneut.", + "Note to self" : "Notiz an mich", + "A place for your private notes, thoughts and ideas" : "Ein Platz für deine privaten Notizen, Gedanken und Ideen", + "Transcript is AI generated and may contain mistakes" : "Das Transkript wird von KI generiert und kann Fehler enthalten", + "Summary is AI generated and may contain mistakes" : "Die Zusammenfassung wird von KI generiert und kann Fehler enthalten", + "Let's get started!" : "Los geht's!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ist eine sichere, selbst gehostete Kommunikationsplattform, die sich nahtlos in das Nextcloud-Ökosystem integriert.\n\n#### Hauptmerkmale von Nextcloud Talk:\n\n* Chat und Messaging in privaten und Gruppenchats\n* Sprach- und Videoanrufe\n* Dateifreigabe und Integration mit anderen Nextcloud-Apps\n* Anpassbare Gesprächseinstellungen, Moderation und Datenschutzkontrollen\n* Web, Desktop und Mobile (iOS und Android)\n* Private & sichere Kommunikation\n\n Erfahre mehr in der [Benutzerdokumentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Willkommen bei Nextcloud Talk\n\nNextcloud Talk ist eine private und leistungsstarke Messaging-App, die mit Nextcloud integriert ist. Chatte in privaten oder Gruppenunterhaltungen, arbeite über Sprach- und Videoanrufe zusammen, organisiere Webinare und Veranstaltungen, passe deine Unterhaltungen an und vieles mehr.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Texte formatieren, um aussagekräftige Nachrichten zu erstellen\n\nIn Nextcloud Talk kannst du die Markdown-Syntax verwenden, um deine Nachrichten zu formatieren. Du kannst zum Beispiel **fett** oder *kursiv* formatieren oder `Texte als Code hervorheben`. Du kannst sogar Tabellen erstellen und Überschriften zu deinem Text hinzufügen.\n\nMöchtest du einen Tippfehler korrigieren oder die Formatierung ändern? Bearbeite deine Nachricht, indem du im Nachrichtenmenü auf \"Nachricht bearbeiten\" klickst.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Anhänge und Links hinzufügen\n\nFüge Dateien aus deinem Nextcloud Hub über die Schaltfläche \"+\" hinzu. Teile Elemente aus Dateien und verschiedenen Nextcloud-Apps. Einige Apps unterstützen sogar interaktive Widgets, z. B. die Text-App.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lass den Unterhaltungen ihren Lauf: Erwähne Nutzer, reagiere auf Nachrichten und mehr\n\nDu kannst alle Teilnehmer einer Unterhaltung mit %s erwähnen oder bestimmte Teilnehmer erwähnen, indem du \"@\" eingibst und ihren Namen aus der Liste auswählst.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Du kannst auf Nachrichten antworten, sie an andere Chats und Personen weiterleiten oder Nachrichteninhalte kopieren.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Mehr tun mit Smart Picker\n\nGib einfach \"/\" ein oder wähle das Menü \"+\", um den Smart Picker zu öffnen, mit dem du verschiedene Inhalte an deine Nachrichten anhängen kannst. Du kannst den Smart Picker so konfigurieren, dass du Elemente aus Nextcloud-Apps, GIFs, Kartenpositionen, KI-generierte Inhalte und vieles mehr hinzufügen kannst.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gesprächseinstellungen verwalten\n\nIm Menü \"Unterhaltung\" kannst du auf verschiedene Einstellungen zur Verwaltung deiner Unterhaltungen zugreifen, wie z. B.:\n* Unterhaltungsinformationen bearbeiten\n* Verwalten von Benachrichtigungen\n* Zahlreiche Moderationsregeln anwenden\n* Zugang und Sicherheit konfigurieren\n* Aktivieren von Bots\n* und mehr!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Vereinigte Arabische Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua und Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentinien", + "American Samoa" : "Amerikanisch-Samoa", + "Austria" : "Österreich", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Inseln", + "Azerbaijan" : "Aserbaidschan", + "Bosnia and Herzegovina" : "Bosnien und Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesch", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivien", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saba und Sint Eustatius", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetinsel", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosinseln", + "Congo, the Democratic Republic of the" : "Kongo (Demokratische Republik)", + "Central African Republic" : "Zentralafrikanische Republik", + "Congo" : "Kongo", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbeinküste", + "Cook Islands" : "Cookinseln", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "China", + "Colombia" : "Kolumbien", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Weihnachtsinsel", + "Cyprus" : "Zypern", + "Czechia" : "Tschechien", + "Germany" : "Deutschland", + "Djibouti" : "Dschibuti", + "Denmark" : "Dänemark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanische Republik", + "Algeria" : "Algerien", + "Ecuador" : "Ekuador", + "Estonia" : "Estland", + "Egypt" : "Ägypten", + "Western Sahara" : "Westsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Äthiopien", + "Finland" : "Finnland", + "Fiji" : "Fidschi", + "Falkland Islands (Malvinas)" : "Falklandinseln", + "Micronesia, Federated States of" : "Mikronesien, Föderierte Staaten", + "Faroe Islands" : "Färöer", + "France" : "Frankreich", + "Gabon" : "Gabun", + "United Kingdom of Great Britain and Northern Ireland" : "Vereinigtes Königreich Großbritannien und Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Französisch-Guinea", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Äquatorialguinea", + "Greece" : "Griechenland", + "South Georgia and the South Sandwich Islands" : "Südgeorgien und die Südlichen Sandwichinseln", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard und die McDonaldinseln", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisches Territorium im Indischen Ozean", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodscha", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "St. Kitts und Nevis", + "Korea, Democratic People's Republic of" : "Nordkorea", + "Korea, Republic of" : "Korea, Republik", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaimaninseln", + "Kazakhstan" : "Kasachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldawien (Republik)", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "St. Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallinseln", + "North Macedonia" : "Nordmazedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolei", + "Macao" : "Macau", + "Northern Mariana Islands" : "Nördliche Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Neukaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsel", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niederlande", + "Norway" : "Norwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Neuseeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Französisch-Polynesien", + "Papua New Guinea" : "Papua-Neuguinea", + "Philippines" : "Philippinen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre und Miquelon", + "Pitcairn" : "Pitcairninseln", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palästina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russland", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabien", + "Solomon Islands" : "Salomonen", + "Seychelles" : "Seychellen", + "Sudan" : "Sudan", + "Sweden" : "Schweden", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "St. Helena, Ascension und Tristan da Cunha", + "Slovenia" : "Slowenien", + "Svalbard and Jan Mayen" : "Spitzbergen und Jan Mayen", + "Slovakia" : "Slowakei", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Südsudan", + "Sao Tome and Principe" : "São Tomé und Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrien", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- und Caicosinseln", + "Chad" : "Tschad", + "French Southern Territories" : "Französische Süd- und Antarktisgebiete", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadschikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Osttimor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Türkei", + "Trinidad and Tobago" : "Trinidad und Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansania", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "Vereinigte Staaten von Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikanstadt", + "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jungferninseln (britisch)", + "Virgin Islands, U.S." : "Jungferninseln, U.S.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis und Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Südafrika", + "Zambia" : "Sambia", + "Zimbabwe" : "Simbabwe", + "Background blur" : "Hintergrund verwischt", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Es konnte nicht geprüft werden, ob WASM-Ladeunterstützung verfügbar ist. Bitte prüfe manuell, ob dein Webserver `.wasm`-Dateien bereitstellt.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Dein Webserver ist nicht richtig eingerichtet, um `.wasm`-Dateien auszuliefern. Dies ist normalerweise ein Problem mit der Nginx-Konfiguration. Für die Hintergrundunschärfe muss eine Anpassung vorgenommen werden, um auch `.wasm`-Dateien auszuliefern. Vergleiche deine Nginx-Konfiguration mit der empfohlenen Konfiguration in unserer Dokumentation.", + "Talk configuration values" : "Talk Einstellungswerte", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Das Erzwingen einer Anrufdauer wird nur mit System-Cron unterstützt. Bitte aktiviere System-Cron oder entferne die Konfiguration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-Werte (derzeit auf %d) sind aufgrund technischer Beschränkungen nicht durchsetzbar. Die Hintergrundaufgabe wird nur alle 5 Minuten ausgeführt, die Verwendung erfolgt also auf eigene Gefahr.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es wird dringend empfohlen, \"memcache.locking\" einzurichten, wenn Talk-Federation aktiviert ist.", + "High-performance backend" : "Hochleistungs-Backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Kein Hochleistungs-Backend konfiguriert – Ohne das Hochleistungs-Backend skaliert es nur für kleinere Meetings (max. 2–3 Teilnehmer). Bitte richte das Hochleistungs-Backend ein, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Die Ausführung des Hochleistungs-Backends im Modus \"conversation_cluster\" ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Das Hochleistungs-Backend unterstützt heutzutage echtes Clustering, das stattdessen verwendet werden sollte.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Das Definieren mehrerer Hochleistungs-Backends ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Stattdessen sollte ein Load Balancer zusammen mit geclusterten Signalservern eingerichtet und in den Talk-Einstellungen konfiguriert werden.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Der gespeicherte öffentliche Schlüssel für den verwendeten Algorithmus %1$s stimmt nicht mit dem gespeicherten privaten Schlüssel überein. %2$s ausführen, um das Problem zu beheben.", + "High-performance backend not configured correctly. Run %s for details." : "Hochleistungs-Backend nicht richtig konfiguriert. Für Einzelheiten %s ausführen.", + "High-performance backend not configured correctly" : "Hochleistungs-Backend nicht richtig konfiguriert", + "Error: Cannot connect to server" : "Fehler: Kann nicht zum Server verbinden", + "Error: Server did not respond with proper JSON" : "Fehler: Server hat nicht mit korrektem JSON geantwortet", + "Error: Certificate expired" : "Fehler: Zertifikat ist abgelaufen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Hochleistungs-Backend-Servers sind nicht synchron. Bitte stelle sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisiere ihre Zeit manuell.", + "Could not get version" : "Version kann nicht abgerufen werden", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fehler: Aktuelle Version: {version}; Server muss aktualisiert werden, um mit dieser Version von Talk kompatibel zu sein", + "Error: Server responded with: {error}" : "Fehler: Der Server antwortete mit: {error}", + "Error: Unknown error occurred" : "Fehler: Ein unbekannter Fehler ist aufgetreten", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Achtung: Laufende Version: {version}; Der Server unterstützt nicht alle Funktionen dieser Talk-Version, fehlende Funktionen: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen Speichercache zu konfigurieren, wenn Nextcloud Talk mit einem Hochleistungs-Backend ausgeführt wird.", + "Client Push" : "Client-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push ist installiert, dies verbessert die Rechtzeitigkeit von Talk-Benachrichtigungen.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} ist nicht installiert. Dies kann zu verzögerten Talk-Benachrichtigungen führen.", + "Recording backend" : "Aufzeichnungs-Backend", + "Using the recording backend requires a High-performance backend." : "Die Verwendung des Aufzeichnungs-Backends erfordert ein Hochleistungs-Backend.", + "No recording backend configured" : "Kein Aufzeichnungs-Backend konfiguriert", + "SIP configuration" : "SIP-Konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Die Nutzung der SIP-Funktionalität erfordert ein Hochleistungs-Backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Zugewiesene Talk-Telefonnummern dürfen nicht mit + oder 0 beginnen. Bitte die folgenden Nummern entfernen oder aktualisieren:\n{list}", + "No SIP backend configured" : "Kein SIP-Backend konfiguriert", + "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, Zulässiges Datumsformat: JJJJ-MM-TT", + "Conversation not found" : "Unterhaltung nicht gefunden", + "Path is already shared with this conversation" : "Der Pfad wurde bereits mit dieser Unterhaltung geteilt", + "Chat, video & audio-conferencing using WebRTC" : "Chat, Video & Audio-Konferenzen mittels WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, Video- und Audiokonferenzen mit WebRTC\n\n* 💬 **Chat** Nextcloud Talk verfügt über einen einfachen Text-Chat, in dem du Dateien über deine Nextcloud Dateien-App oder dein lokales Gerät teilen oder hochladen und andere Teilnehmende erwähnen kannst.\n* 👥 **Private, Gruppen-, öffentliche und passwortgeschützte Anrufe!** Lade jemanden oder eine ganze Gruppe ein oder sende einen öffentlichen Link, um zu einem Anruf einzuladen.\n* 🌐 **Federierte Chats** Chatte mit anderen Nextcloud-Benutzern über deren Server\n* 💻 **Bildschirmfreigabe!** Teile deinen Bildschirm mit den Teilnehmern deiner Unterhaltung.\n* 🚀 **Integration mit anderen Nextcloud-Apps** wie Dateien, Kalender, Benutzerstatus, Dashboard, Flow, Karten, Smart Picker, Kontakte, Deck und viele mehr.\n* 🌉 **Mit anderen Chat-Lösungen synchronisieren** Durch die Integration von [Matterbridge](https://github.com/42wim/matterbridge/) in Talk kannst du viele andere Chat-Lösungen ganz einfach mit Nextcloud Talk und umgekehrt synchronisieren.", + "Leave call" : "Anruf verlassen", + "Navigating away from the page will leave the call in {conversation}" : "Bei verlassen der Seite, wird der Anruf in {conversation} beendet", + "Stay in call" : "Beim Anruf bleiben", + "Error occurred when getting the conversation information" : "Fehler beim Abrufen der Unterhaltungsinformationen ", + "Discuss this file" : "Diese Datei besprechen", + "Share this file with others to discuss it" : "Teile diese Datei, um sie mit anderen zu besprechen", + "Share this file" : "Diese Datei teilen", + "Join conversation" : "Unterhaltung beitreten", + "This conversation is password-protected." : "Diese Unterhaltung ist passwortgeschützt.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Es wurden mehrere ungültige Passworteingaben von deiner IP-Adresse festgestellt. Daher wird die nächste Anmeldung um 30 Sekunden verzögert.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte erneut versuchen.", + "Password" : "Passwort", + "Submit" : "Übermitteln", + "Error requesting the password." : "Fehler bei der Passwortanforderung", + "Request password" : "Passwort anfordern", + "This conversation has ended" : "Diese Unterhaltung wurde beendet", + "Error occurred when joining the conversation" : "Es ist ein Fehler beim Beitritt zur Unterhaltung aufgetreten.", + "Close Talk sidebar" : "Talk-Seitenleiste schließen", + "Open Talk sidebar" : "Talk-Seitenleiste öffnen", + "Everyone" : "Jeder", + "Users and moderators" : "Benutzer und Moderatoren", + "Moderators only" : "Nur Moderatoren", + "Disable calls" : "Anrufe deaktivieren", + "Save changes" : "Änderungen speichern", + "Saving …" : "Speichern …", + "Saved!" : "Gespeichert!", + "Limit to groups" : "Auf Gruppen beschränken", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, so können nur Personen von den aufgelisteten Gruppen an den Unterhaltungen teilnehmen.", + "Guests can still join public conversations." : "Gäste können nach wie vor öffentlichen Unterhaltungen beitreten.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Benutzer, welche Talk nicht mehr nutzen können, werden weiterhin als Teilnehmer ihrer früheren Unterhaltungen aufgelistet. Chatnachrichten werden ebenfalls aufbewahrt.", + "Limit using Talk" : "Beschränkung bei der Nutzung von Talk", + "Limit creating a public and group conversation" : "Beschränkung für das Erstellen von öffentlichen und Gruppenunterhaltungen", + "Limit creating conversations" : "Beschränkung beim Erstellen von Unterhaltungen", + "Limit starting a call" : "Starten von Anrufen begrenzen", + "Limit starting calls" : "Beschränkung beim Anrufaufbau", + "When a call has started, everyone with access to the conversation can join the call." : "Nachdem eine Unterhaltung gestartet wurde, kann jeder, der Zugriff auf die Unterhaltung hat, dieser beitreten", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Die folgenden Bots sind auf diesem Server installiert. In der Dokumentation findest du Einzelheiten zum {linkstart1}Erstellen deines eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die du auf deinem Server aktivieren kannst.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Auf diesem Server sind keine Bots installiert. In der Dokumentation findest du Einzelheiten zum {linkstart1}Erstellen deines eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die du auf deinem Server aktivieren kannst.", + "Description is not provided" : "Keine Beschreibung vorhanden", + "Locked for moderators" : "Gesperrt für Moderatoren", + "Enabled" : "Aktiviert", + "Disabled" : "Deaktiviert", + "Bots settings" : "Bots-Einstellungen", + "State" : "Status", + "Name" : "Name", + "Last error" : "Letzter Fehler", + "Total errors count" : "Gesamtzahl an Fehlern", + "Find more bots" : "Weitere Bots finden", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Vertrauenswürdige Server können auf der {linkstart}Einstellungsseite für Freigaben{linkend} konfiguriert werden.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated Chats und Anrufe funktionieren bereits. Die Verwaltung von Anhängen ist für eine spätere Version geplant.", + "Enable Federation in Talk app" : "Federation in der Talk-App aktivieren", + "Permissions" : "Berechtigungen", + "Allow users to be invited to federated conversations" : "Benutzern erlauben, zu federierten Unterhaltungen eingeladen zu werden.", + "Allow users to invite federated users into conversation" : "Benutzern erlauben, federierte Benutzer zu Unterhaltungen einzuladen.", + "Only allow to federate with trusted servers" : "Nur erlauben, mit vertrauenswürdigen Servern zu federieren", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen der aufgelisteten Gruppen federierte Benutzer zu Unterhaltungen einladen.", + "Groups allowed to invite federated users" : "Gruppen, die berechtigt sind, federierte Konten einzuladen", + "Select groups …" : "Gruppen auswählen …", + "All messages" : "Alle Nachrichten", + "@-mentions only" : "Nur @-Erwähnungen", + "Off" : "Aus", + "General settings" : "Allgemeine Einstellungen", + "Default notification settings" : "Standard Benachrichtigungseinstellungen", + "Default group notification" : "Standard Gruppenbenachrichtigung", + "Default group notification for new groups" : "Standard Gruppenbenachrichtigung für neue Gruppen", + "Integration into other apps" : "Einbindung in andere Apps", + "Allow conversations on files" : "Alle Unterhaltungen zu Dateien", + "Allow conversations on public shares for files" : "Alle Unterhaltungen in öffentlichen Freigaben zu Dateien", + "End-to-end encrypted calls" : "Ende-zu-Ende-verschlüsselte Anrufe", + "Enable encryption" : "Verschlüsselung aktivieren", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Für Ende-zu-Ende-verschlüsselte Anrufe mit einer konfigurierten SIP-Brücke ist eine neuere Version des Hochleistungs-Backends und der SIP-Bridge erforderlich.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile Clients unterstützen derzeit Ende-zu-Ende-verschlüsselte Anrufe nicht.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Durch Anklicken des obigen Buttons werden die Angaben im Formular an die Server der Struktur AG geschickt. Weitere Informationen hierzu gibt es unter {linkstart}spreed.eu{linkend}.", + "Pending" : "Ausstehend", + "Error" : "Fehler", + "Blocked" : "Blockiert", + "Active" : "Aktiv", + "Expired" : "Abgelaufen", + "Never" : "Niemals", + "The trial could not be requested. Please try again later." : "Der Test konnte nicht angefordert werden. Bitte versuche es später noch einmal.", + "The account could not be deleted. Please try again later." : "Konto konnte nicht gelöscht werden. Bitte später erneut versuchen.", + "Hosted High-performance backend" : "Gehostetes Hochleistungs-Backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Unser Partner Struktur AG bietet einen Dienst an, bei dem ein gehosteter Signalisierungsserver angefordert werden kann. Dazu brauchst du nur das untenstehende Formular auszufüllen und deine Nextcloud wird ihn anfordern. Sobald der Server für dich eingerichtet ist, werden die Anmeldedaten automatisch ausgefüllt. Dadurch werden die bestehenden Einstellungen des Signalisierungsservers überschrieben.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Wenn dein Hochleistungs-Backend-Konto STUN- und/oder TURN-Funktionen enthält, werden die Einstellungen entsprechend aktualisiert.", + "URL of this Nextcloud instance" : "URL dieser Nextcloud-Installation", + "Full name of the user requesting the trial" : "Vollständiger Name des Benutzers, der die Testversion anfordert", + "Email of the user" : "E-Mail-Adresse des Benutzers", + "Language" : "Sprache", + "Country" : "Land", + "Request signaling server trial" : "Testversion des Signalisierungsservers anfordern", + "You can see the current status of your hosted signaling server in the following table." : "Den aktuellen Status deines gehosteten Signalisierungsservers siehst du in der folgenden Tabelle.", + "Status" : "Status", + "Created at" : "Erstellt am", + "Expires at" : "Läuft ab am", + "Limits" : "Beschränkungen", + "STUN included" : "STUN inklusive", + "Yes" : "Ja", + "No" : "Nein", + "TURN included" : "TURN inklusive", + "Delete the signaling server account" : "Signalisierungsserver-Konto löschen", + "_%n user_::_%n users_" : ["%n Benutzer","%n Benutzer"], + "Installed version: {version}" : "Installierte Version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kannst Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuche deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installiere sie bitte manuell über den {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge-Binärdatei hat falsche Berechtigungen. Bitte sicher stellen, dass die Matterbridge-Binärdatei dem richtigen Benutzer gehört und ausgeführt werden kann. Sie befindet sich unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder konnte nicht ausgeführt werden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kannst den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen findest du in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", + "Downloading …" : "Herunterladen …", + "Install Talk Matterbridge" : "Talk-Matterbridge installieren", + "An error occurred while installing the Matterbridge app" : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Es ist ein Fehler bei der Installation von Talk Matterbridge aufgetreten. Bitte installiere es manuell.", + "Failed to execute Matterbridge binary." : "Matterbridge-Binärdatei konnte nicht ausgeführt werden.", + "Matterbridge integration" : "Matterbridge-Einbindung", + "Enable Matterbridge integration" : "Matterbridge-Einbindung aktivieren", + "Status: Checking connection" : "Status: Prüfe die Verbindung", + "OK: Running version: {version}" : "OK: Laufende Version: {version}", + "Error: Server seems to be a Signaling server" : "Fehler: Der Server scheint ein Signalisierungsserver zu sein", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Aufnahme-Backend-Servers sind nicht synchron. Bitte sicherstellen, dass beide Server mit einem Zeitserver verbunden sind oder synchronisiere die Zeit manuell.", + "Recording backend URL" : "URL für Aufzeichnungs-Backend", + "Validate SSL certificate" : "SSL-Zertifikat überprüfen", + "Delete this server" : "Diesen Server löschen", + "Test this server" : "Diesen Server testen", + "Disabled for all calls" : "Für alle Anrufe deaktiviert", + "Enabled for all calls" : "Für alle Anrufe aktiviert", + "Configurable on conversation level by moderators" : "Konfigurierbar auf Unterhaltungsebene durch Moderatoren", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Die PHP-Einstellungen \"upload_max_filesize\" oder \"post_max_size\" erlauben nur das Hochladen von Dateien bis zu {maxUpload}.", + "Recording backend settings saved" : "Aufzeichnungs-Backend Einstellungen gespeichert", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoren können die Zustimmung auf Unterhaltungsebene aktivieren. Die Einwilligung zur Aufzeichnung ist für jeden Teilnehmer vor der Teilnahme an der Unterhaltung erforderlich.", + "The consent to be recorded will be required for each participant before joining every call." : "Vor der Teilnahme an einer Unterhaltung ist für jeden Teilnehmer die Einwilligung zur Aufzeichnung erforderlich.", + "The consent to be recorded is not required." : "Eine Einwilligung zur Aufzeichnung ist nicht erforderlich.", + "Recording backend configuration is only possible with a High-performance backend." : "Aufzeichnungs-Backend-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Add a new recording backend server" : "Einen neuen Aufzeichnungs-Backend-Server hinzufügen", + "Shared secret" : "Gemeinsames Geheimnis", + "Recording consent" : "Zustimmung zur Aufzeichnung", + "Recording transcription" : "Aufnahme-Transskription", + "Automatically transcribe call recordings with a transcription provider" : "Automatisches Transkribieren von Gesprächsaufzeichnungen mit einem Transkriptionsanbieter", + "Automatically summarize call recordings with transcription and summary providers" : "Automatisches Zusammenfassen von Anrufaufzeichnungen mit Transkriptions- und Zusammenfassungsanbietern", + "SIP configuration saved!" : "SIP-Konfiguration gespeichert!", + "SIP configuration is only possible with a High-performance backend." : "SIP-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Enable SIP Dial-out option" : "SIP-Anrufen-Option aktivieren", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Der Signalisierungsserver muss auf die unterstützte SIP-Anrufen-Funktion aktualisiert werden.", + "Do not show SIP Dial-out caller number" : "Abgehend die eigene Rufnummer nicht anzeigen", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Die anonyme Nummer sollte als \"unbekannte\" oder \"unterdrückte Nummer\" angezeigt werden, um den Empfänger anzurufen", + "Dial-out number" : "Ausgehende Telefonnummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formatierte Nummer, die als Fallback-Rufnummer für ausgehende Anrufe verwendet wird", + "Dial-out prefix" : "Vorwahl für ausgehende Anrufe", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Präfix zur eingestellten Rufnummer für ausgehende Anrufe (Standard ist `+`)", + "Restrict SIP configuration" : "SIP-Konfiguration einschränken", + "Enable SIP configuration" : "SIP-Konfiguration aktivieren", + "Only users of the following groups can enable SIP in conversations they moderate" : "Nur Benutzer der folgenden Gruppen können SIP in von ihnen moderierten Unterhaltungen aktivieren", + "Phone number (Country)" : "Telefonnummer (Land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Diese Informationen werden sowohl in Einladungs-E-Mails versandt als auch in der Seitenleiste für alle Teilnehmer angezeigt.", + "Nextcloud base URL" : "Nextcloud-Basis-URL", + "Talk Backend URL" : "Talk-Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Verfügbare Funktionen", + "Error: Websocket connection failed" : "Fehler: Websocket-Verbindung fehlgeschlagen", + "Error code" : "Fehlercode", + "Error message" : "Fehlermeldung", + "Error: Websocket connection failed. Check browser console" : "Fehler: Websocket-Verbindung fehlgeschlagen. Browser-Konsole überprüfen", + "High-performance backend URL" : "Hochleistungs-Backend-URL", + "Missing High-performance backend warning hidden" : "Warnung zu fehlendem Hochleistungs-Backend ausgeblendet", + "High-performance backend settings saved" : "Hochleistungs-Backend Einstellungen gespeichert", + "Nextcloud Talk setup not complete" : "Einrichtung von Nextcloud Talk nicht abgeschlossen", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Bitte beachten, dass bei Meetings mit mehr als 2 Teilnehmern ohne das Hochleistungs-Backend höchstwahrscheinlich Verbindungsprobleme auftreten und die teilnehmenden Geräte stark belastet werden.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Das Hochleistungs-Backend installieren, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Nextcloud portal" : "Nextcloud Portal", + "Quick installation guide" : "Kurzanleitung zur Installation", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Das Hochleistungs-Backend ist für Anrufe und Unterhaltungen mit mehreren Teilnehmern erforderlich. Ohne das Backend müssen alle Teilnehmer ihr eigenes Video für jeden anderen Teilnehmer einzeln hochladen, was höchstwahrscheinlich zu Verbindungsproblemen und einer hohen Belastung der teilnehmenden Geräte führt.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen verteilten Cache einzurichten, wenn du Nextcloud Talk mit einem Hochleistungs-Backend verwendest.", + "Add High-performance backend server" : "Hochleistungs-Backend-Server hinzufügen", + "Warn about connectivity issues in calls with more than 2 participants" : "Vor Verbindungsproblemen bei Anrufen mit mehr als 2 Teilnehmern warnen", + "STUN server URL" : "STUN-Server-URL", + "The server address is invalid" : "Die Serveradresse ist ungültig.", + "STUN settings saved" : "STUN-Einstellungen gespeichert", + "STUN servers" : "STUN-Server", + "A STUN server is used to determine the public IP address of participants behind a router." : "Der STUN-Server wird verwendet, um die öffentliche IP-Adresse von Teilnehmern hinter einem Router zu bestimmen.", + "Add a new STUN server" : "Einen neuen STUN-Server hinzufügen", + "{schema} scheme must be used with a domain" : "{schema}-Schema muss mit einer Domain verwendet werden", + "{option1} and {option2}" : "{option1} und {option2}", + "{option} only" : "nur {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-Kandidaten erfolgreich durch den TURN-Server zurück gesendet", + "Error: No working ICE candidates returned by the TURN server" : "Fehler: Keine funktionierenden ICE-Kandidaten durch den TURN-Server zurück gesendet", + "Testing whether the TURN server returns ICE candidates" : "Testen, ob der TURN-Server ICE-Kandidaten zurückgibt", + "TURN server schemes" : "TURN-Server-Schemata", + "TURN server URL" : "TURN-Server-URL", + "TURN server secret" : "TURN-Server-Secret", + "TURN server protocols" : "TURN-Serverprotokolle", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ein TURN-Server wird verwendet, um den Datenverkehr von Teilnehmern hinter einer Firewall zu übertragen. Wenn einzelne Teilnehmer keine Verbindung zu anderen herstellen können, ist höchstwahrscheinlich ein TURN-Server erforderlich. Anweisungen zum Einrichten sind in folgender {linkstart}Dokumentation{linkend} zu finden.", + "TURN settings saved" : "TURN-Einstellungen gespeichert", + "TURN servers" : "TURN-Server", + "Add a new TURN server" : "Einen neuen TURN-Server hinzufügen", + "Failed" : "Fehlgeschlagen", + "OK" : "OK", + "Checking …" : "Überprüfe …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fehlgeschlagen: WebAssembly ist in diesem Browser deaktiviert oder wird nicht unterstützt. Bitte aktiviere WebAssembly oder verwende einen Browser, der es unterstützt, um die Prüfung durchzuführen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fehlgeschlagen: Die Dateien \".wasm\" und \".tflite\" wurden vom Webserver nicht korrekt zurückgegeben. Bitte prüfe den Abschnitt \"Systemanforderungen\" in der Talk-Dokumentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- und \".tflite\"-Dateien wurden ordnungsgemäß vom Webserver zurückgegeben.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Es scheint, dass die PHP- und Apache-Konfiguration nicht kompatibel ist. Bitte beachte, dass PHP nur mit dem Modul MPM_PREFORK und PHP-FPM nur mit dem Modul MPM_EVENT verwendet werden kann.", + "Web server setup checks" : "Prüfungen der Einrichtung des Webservers", + "Files required for virtual background can be loaded" : "Die für den virtuellen Hintergrund erforderlichen Dateien können geladen werden", + "Federated user" : "Federated-Benutzer", + "Assign participants to rooms" : "Teilnehmer Räumen zuweisen", + "Configure breakout rooms" : "Einstellungen für Breakout-Räume", + "Number of breakout rooms" : "Anzahl an Breakout-Räumen", + "You can create from 1 to 20 breakout rooms." : "Es können zwischen 1 bis 20 Gruppenräume erstellt werden.", + "Assignment method" : "Zuweisungsmethode", + "Automatically assign participants" : "Automatisch hinzugefügte Teilnehmer", + "Manually assign participants" : "Teilnehmer manuell zuordnen", + "Allow participants to choose" : "Teilnehmern die Wahl lassen", + "Create rooms" : "Räume erstellen", + "Confirm" : "Bestätigen", + "Create breakout rooms" : "Breakout-Räume erstellen", + "Reset" : "Zurücksetzen", + "Delete breakout rooms" : "Breakout-Räume löschen", + "Room {roomNumber}" : "Raum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuelle Breakout-Räume und deren Einstellungen gehen verloren", + "Cancel" : "Abbrechen", + "Unassigned participants" : "Nicht zugewiesene Teilnehmer", + "Back" : "Zurück", + "Assign" : "Zuweisen", + "Add participant \"{user}\"" : "Teilnehmer \"{user}\" hinzufügen", + "Now" : "Jetzt", + "Invalid calendar selected" : "Ungültiger Kalender ausgewählt", + "Invalid start time selected" : "Ungültige Startzeit ausgewählt", + "Invalid end time selected" : "Ungültige Endzeit ausgewählt", + "Unknown error occurred" : "Unbekannter Fehler aufgetreten", + "Sending no invitations" : "Keine Einladungen versenden", + "{participant0} will receive an invitation" : "{participant0} erhält eine Einladung", + "{participant0} and {participant1} will receive invitations" : "{participant0} und {participant1} erhalten Einladungen", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} und %n weiterer erhalten Einladungen","{participant0}, {participant1} und %n andere erhalten Einladungen"], + "Invite {user}" : "{user} einladen ", + "Invite all users and emails in this conversation" : "Alle Benutzer und E-Mail-Adressen in der Unterhaltung einladen", + "Meeting created" : "Besprechung erstellt", + "Upcoming meetings" : "Anstehende Besprechungen", + "Loading …" : "Lade …", + "No upcoming meetings" : "Keine anstehenden Besprechungen", + "Schedule a meeting" : "Eine Besprechung planen", + "Meeting title" : "Titel der Besprechung", + "From" : "Von", + "To" : "An", + "Calendar" : "Kalender", + "Attendees" : "Teilnehmende", + "No other participants to send invitations to." : "Keine anderen Teilnehmer, an die Einladungen gesendet werden können.", + "Add attendees" : "Teilnehmer hinzufügen", + "Save" : "Speichern", + "Search participants" : "Suche Teilnehmer", + "No results" : "Keine Ergebnisse", + "Done" : "Erledigt", + "Disable live transcription" : "Live-Transkription deaktivieren", + "Enable live transcription (generated by AI)" : "Live-Transkription aktivieren (KI-generiert)", + "Enable live transcription (Live transcriptions app is not installed)" : "Live-Transkription aktivieren (Live-Transkriptions-App ist nicht installiert)", + "Disable live translation" : "Live-Übersetzung deaktivieren", + "Enable live translation (generated by AI)" : "Live-Übersetzung aktivieren (KI-generiert)", + "Original language" : "Ausgangssprache", + "Live translations app is not installed" : "Die Live-Übersetzungs-App ist nicht installiert", + "Original language: {languageName}" : "Originalsprache: {languageName}", + "Translated language" : "Übersetzte Sprache", + "Translated language: {languageName}" : "Übersetzte Sprache: {languageName}", + "Raise hand" : "Hand heben", + "Raise hand (R)" : "Hand heben (R)", + "Lower hand" : "Hand herunternehmen", + "Lower hand (R)" : "Hand herunternehmen (R)", + "Exit full screen (F)" : "Vollbild verlassen (F)", + "Full screen (F)" : "Vollbild (F)", + "Speaker view" : "Sprecheransicht", + "Grid view" : "Kachelansicht", + "Error when trying to load the available live transcription languages" : "Fehler beim Versuch, die verfügbaren Live-Transkriptionssprachen zu laden", + "Failed to enable live transcription" : "Live-Transkription konnte nicht aktiviert werden", + "Failed to enable live translations" : "Live-Übersetzung konnten nicht aktiviert werden", + "Failed to disable live translations" : "Live-Übersetzung konnten nicht deaktiviert werden", + "Recording consent is required" : "Zustimmung zur Aufzeichnung ist erforderlich", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", + "Conversation not found or not joined" : "Unterhaltung nicht gefunden oder nicht beigetreten", + "Lobby is still active and you're not a moderator" : "Die Lobby ist weiterhin aktiv und du bist kein Moderator", + "Connection failed" : "Verbindung fehlgeschlagen", + "Reload" : "Neu laden", + "{nickName} raised their hand." : "{nickName} hat die Hand gehoben.", + "A participant raised their hand." : "Ein Teilnehmer hat die Hand gehoben", + "Collapse stripe" : "Streifen einklappen", + "Expand stripe" : "Streifen aufklappen", + "Previous page of videos" : "Vorherige Seite mit Videos", + "Next page of videos" : "Nächste Seite mit Videos", + "Connecting …" : "Verbinde …", + "Calling …" : "Rufe an …", + "Waiting for {user} to join the call" : "Warte darauf, dass {user} der Unterhaltung beitritt", + "Waiting for others to join the call …" : "Warte auf weitere Teilnehmer …", + "You can invite others in the participant tab of the sidebar" : "Du kannst andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste einladen", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kannst andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste oder über diesen Link einladen!", + "Share this link to invite others!" : "Teile diesen Link, um andere Personen einzuladen!", + "Copy link" : "Link kopieren", + "You are not allowed to enable audio" : "Du bist nicht berechtigt, Audio zu aktivieren", + "No audio. Click to select device" : "Kein Ton. Zum Auswählen des Geräts anklicken", + "Mute audio" : "Mikrofon stummschalten", + "Mute audio (M)" : "Mikrofon stummschalten (M)", + "Unmute audio" : "Mikrofon einschalten", + "Unmute audio (M)" : "Mikrofon einschalten (M)", + "None" : "Keine", + "Select a microphone" : "Ein Mikrofon auswählen", + "Select a speaker" : "Einen Lautsprecher auswählen", + "Microphone settings" : "Mikrofoneinstellungen", + "Check devices" : "Geräte prüfen", + "Access to camera was denied" : "Zugriff auf die Kamera wurde verweigert", + "Error while accessing camera: It is likely in use by another program" : "Fehler beim Zugriff auf die Kamera: Sie wird wahrscheinlich von einem anderen Programm verwendet", + "Error while accessing camera" : "Fehler beim Zugriff auf die Kamera", + "You have been muted by a moderator" : "Du wurdest von einem Moderator stummgeschaltet", + "Hide presenter video" : "Moderationsvideo ausblenden", + "You are not allowed to enable video" : "Du bist nicht berechtigt, Video zu aktivieren", + "No video. Click to select device" : "Kein Bild. Zum Auswählen des Geräts anklicken", + "Disable video" : "Video deaktivieren", + "Disable video (V)" : "Video deaktivieren (V)", + "Enable video" : "Video aktivieren", + "Enable video (V)" : "Video aktivieren (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren (V) - deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst.", + "Select a video device" : "Eine Videoquelle auswählen", + "Show presenter" : "Präsentierenden anzeigen", + "You" : "Du", + "Mute" : "Stummschalten", + "Muted" : "Stummgeschaltet", + "Show screen" : "Bildschirm anzeigen", + "Stop following" : "Nicht mehr folgen", + "Connection could not be established …" : "Es konnte keine Verbindung hergestellt werden …", + "Connection was lost and could not be re-established …" : "Die Verbindung wurde unterbrochen und konnte nicht wiederhergestellt werden …", + "Connection could not be established. Trying again …" : "Es konnte keine Verbindung hergestellt werden. Versuche es erneut …", + "Connection lost. Trying to reconnect …" : "Verbindung zum Server verloren. Es wird versucht diese wiederherzustellen …", + "Connection problems …" : "Verbindungsprobleme …", + "Collapse" : "Zuklappen", + "Expand" : "Erweitern", + "You need to be logged in to upload files" : "Du musst angemeldet sein, um Dateien hochzuladen", + "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", + "Conversation messages" : "Unterhaltungsnachrichten", + "Scroll to bottom" : "Nach unten blättern", + "Post message" : "Nachricht senden", + "Federated conversation" : "Federierte Unterhaltung", + "Public conversation" : "Öffentliche Unterhaltung", + "Favorite" : "Favorit", + "Banned users" : "Gesperrte Personen", + "Manage the list of banned users in this conversation." : "Liste der in dieser Unterhaltung gesperrten Personen bearbeiten", + "Manage bans" : "Sperrungen bearbeiten", + "No banned users" : "Keine gesperrten Personen", + "Banned by:" : "Ausgeschlossen von:", + "Date:" : "Datum:", + "Note:" : "Bemerkung:", + "Hide details" : "Details ausblenden", + "Show details" : "Details anzeigen", + "Unban" : "Entsperren", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Den Titel und die Beschreibung können Sie im {linkstart} Kalender ↗{linkend} ändern.", + "Error while updating conversation name" : "Fehler bei der Aktualisierung des Namens der Unterhaltung", + "Error while updating conversation description" : "Fehler bei der Aktualisierung der Beschreibung der Unterhaltung", + "Enter a name for this conversation" : "Gib einen Namen für diese Unterhaltung ein.", + "Edit conversation name" : "Name der Unterhaltung bearbeiten", + "Edit conversation description" : "Beschreibung der Unterhaltung bearbeiten", + "Enter a description for this conversation" : "Beschreibung zur Unterhaltung eingeben", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Die folgenden Bots können in dieser Unterhaltung aktiviert werden. Wenden dich an deine Administration, um weitere Bots auf diesem Server installieren zu lassen.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Auf diesem Server sind keine Bots installiert. Wende dich an die Administration, um Bots auf diesem Server installieren zu lassen.", + "Disable" : "Deaktivieren", + "Enable" : "Aktivieren", + "The bot is not available anymore" : "Der Bot ist nicht mehr verfügbar", + "Breakout rooms" : "Breakout-Räume", + "Manage breakout rooms" : "Gruppenräume verwalten", + "Set up breakout rooms for this conversation" : "Gruppenräume für diese Unterhaltung einrichten", + "Please select a valid PNG or JPG file" : "Bitte eine gültige PNG- oder JPG-Datei wählen", + "Choose your conversation picture" : "Dein Unterhaltungsbild auswählen", + "Choose" : "Auswählen", + "Error setting conversation picture" : "Fehler beim Setzen des Unterhaltungsbildes", + "Could not set the conversation picture: {error}" : "Unterhaltungsbild konnte nicht festgelegt werden: {error}", + "Error cropping conversation picture" : "Fehler beim Beschneiden des Unterhaltungsbildes", + "Error removing conversation picture" : "Fehler beim Entfernen des Unterhaltungsbildes", + "Set emoji as conversation picture" : "Emoji als Unterhaltungsbild setzen", + "Set background color for conversation picture" : "Hintergrundfarbe für Unterhaltungsbild setzen", + "Upload conversation picture" : "Unterhaltungsbild hochladen", + "Choose conversation picture from files" : "Unterhaltungsbild aus Dateien wählen", + "Remove conversation picture" : "Unterhaltungsbild entfernen", + "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein", + "Set picture" : "Bild festlegen", + "Default permissions modified for {conversationName}" : "Standardberechtigungen für {conversationName} geändert", + "Could not modify default permissions for {conversationName}" : "Für {conversationName} konnten die Standardberechtigungen nicht geändert werden", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bearbeite die Standardberechtigungen für die Teilnehmer dieser Unterhaltung. Diese Einstellungen wirken sich nicht auf Moderatoren aus.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Jedes Mal, wenn Berechtigungen in diesem Abschnitt geändert werden, gehen benutzerdefinierte Berechtigungen, die zuvor einzelnen Teilnehmern zugewiesen wurden, verloren.", + "All permissions" : "Alle Berechtigungen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Die Teilnehmer haben die Berechtigung einen Anruf zu starten, einem Anruf beizutreten und Audio-, Video- und Bildschirmübertragung zu aktivieren.", + "Participants can use all available features." : "Teilnehmer können alle verfügbaren Funktionen nutzen.", + "Restricted" : "Eingeschränkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Die Teilnehmer können nur an Anrufen teilnehmen, aber keine Audio-, Video- oder Bildschirmübertragung aktivieren, bis ein Moderator diese Berechtigungen manuell erteilt.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Die Teilnehmer erhalten einen reduzierten Funktionsumfang, bis die Moderation manuell zusätzliche Berechtigungen erteilt.", + "Advanced permissions" : "Erweiterte Berechtigungen", + "Edit permissions" : "Berechtigungen bearbeiten", + "Conversation settings" : "Unterhaltungseinstellungen", + "Basic Info" : "Basisinformationen", + "Personal" : "Persönlich", + "Moderation" : "Moderation", + "Setup overview" : "Einstellungsübersicht", + "Live transcription" : "Live-Transkription", + "Live transcriptions app is not installed" : "Die Live-Transkriptions-App ist nicht installiert", + "Enable live transcription" : "Live-Transkription aktivieren", + "Breakout Rooms" : "Breakout-Räume", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gefahrenzone", + "Archive conversation" : "Unterhaltung archivieren", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivierte Unterhaltungen werden standardmäßig aus der Unterhaltungsliste ausgeblendet. Sie werden jedoch weiterhin angezeigt, wenn du nach dem Unterhaltungsnamen suchst oder auf eine Liste archivierter Unterhaltungen zugreifst.", + "Do you really want to leave \"{displayName}\"?" : "Möchtest du wirklich \"{displayName}\" verlassen?", + "You can archive this conversation instead." : "Die Unterhaltung kann stattdessen archiviert werden.", + "Leave conversation" : "Unterhaltung verlassen", + "You need to promote a new moderator before you can leave the conversation" : "Du musst einen neuen Moderator bestimmen, bevor du die Unterhaltung verlassen kannst.", + "Delete conversation" : "Unterhaltung löschen", + "Do you really want to delete \"{displayName}\"?" : "Möchtest du wirklich \"{displayName}\" löschen?", + "Error while deleting conversation" : "Fehler beim Löschen der Unterhaltung", + "Delete all chat messages" : "Alle Chatnachrichten löschen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Willst du wirklich alle Nachrichten in \"{displayName}\" löschen?", + "Error while clearing chat history" : "Fehler beim Löschen des Chatverlaufs", + "Be careful, these actions cannot be undone." : "Bitte vorsichtig sein, diese Aktionen können nicht rückgängig gemacht werden.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nachdem du eine Unterhaltung verlassen hast, ist eine Einladung erforderlich, um einer bereits geschlossenen Unterhaltung wieder beizutreten. Einer noch geöffneten Unterhaltung kannst du jederzeit wieder beitreten.", + "Permanently delete this conversation." : "Die Unterhaltung endgültig löschen.", + "Delete chat messages" : "Chatnachrichten löschen", + "Permanently delete all the messages in this conversation." : "Alle Nachrichten in dieser Unterhaltung endgültig löschen.", + "_%n hour_::_%n hours_" : ["%n Stunde","%n Stunden"], + "_%n day_::_%n days_" : ["%n Tag","%n Tage"], + "_%n week_::_%n weeks_" : ["%n Woche","%n Wochen"], + "Custom expiration time" : "Benutzerdefinierte Ablaufzeit", + "Message expiration disabled" : "Nachrichtenablauf deaktiviert", + "Message expiration set: {duration}" : "Nachrichtenablauf eingestellt auf: {duration}", + "Error when trying to set message expiration" : "Fehler beim Festlegen des Nachrichtenablaufs", + "Message expiration" : "Nachrichtenablauf", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatnachrichten können nach einer bestimmten Zeit gelöscht werden. Hinweis: Im Chat freigegebene Dateien werden für den Besitzer nicht gelöscht, aber sie werden nicht mehr in der Unterhaltung freigegeben.", + "Set message expiration" : "Ablauf der Nachricht festlegen", + "Current message expiration" : "Ablauf der aktuellen Nachricht", + "Password copied to clipboard" : "Passwort in die Zwischenablage kopiert", + "Password could not be copied" : "Passwort konnte nicht kopiert werden", + "Guest access" : "Gastzugriff", + "Breakout rooms are not allowed in public conversations." : "Gruppenräume sind bei öffentlichen Gesprächen nicht gestattet.", + "Allow guests to join this conversation via link" : "Gästen die Teilnahme an dieser Unterhaltung per Link erlauben", + "Password protection" : "Passwortschutz", + "This conversation is password-protected. Guests need password to join" : "Diese Unterhaltung ist passwortgeschützt. Gäste brauchen ein Passwort um teilzunehmen", + "Password protection is needed for public conversations" : "Passwortschutz ist für öffentliche Gespräche erforderlich", + "Set a password" : "Passwort setzen", + "Change password" : "Passwort ändern", + "Enter new password" : "Neues Passwort eingeben", + "Save password" : "Passwort speichern", + "Copy password" : "Passwort kopieren", + "Guests are allowed to join this conversation via link" : "Gäste dürfen dieser Unterhaltung über einen Link beitreten", + "Guests are not allowed to join this conversation" : "Gäste dürfen dieser Unterhaltung nicht beitreten", + "Resend invitations" : "Einladungen erneut senden", + "This conversation is open to both registered users and users created with the Guests app" : "Diese Unterhaltung ist sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "This conversation is open to registered users" : "Diese Unterhaltung ist für registrierte Benutzer geöffnet", + "This conversation is limited to the current participants" : "Diese Unterhaltung ist auf die bisherigen Teilnehmer beschränkt", + "You opened the conversation to both registered users and users created with the Guests app" : "Du hast diese Unterhaltung sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet.", + "Error occurred when opening or limiting the conversation" : "Beim Öffnen oder Einschränken der Unterhaltung ist ein Fehler aufgetreten", + "Open conversation to registered users, showing it in search results" : "Unterhaltung für registrierte Benutzer öffnen und in den Suchergebnissen anzeigen", + "Also open to users created with the Guests app" : "Auch für Gäste, die mit der Gast-App erstellt wurden, geöffnet", + "Open conversation" : "Unterhaltung öffnen", + "Set language spoken in calls" : "Die in Telefonaten gesprochene Sprache festlegen", + "Languages could not be loaded" : "Sprachen konnten nicht geladen werden", + "Loading languages …" : "Lade Sprachen …", + "Invalid language" : "Ungültige Sprache", + "Default language (English)" : "Standardsprache (Englisch)", + "Default live transcription language set" : "Standard Live-Transkriptionssprache eingestellt", + "Live transcription language set: {languageName}" : "Eingestellte Live-Transkriptionssprache: {languageName}", + "Error when trying to set live transcription language" : "Fehler beim Einstellen der Live-Transkriptionssprache", + "Start time: {date}" : "Startzeit: {date}", + "Start time has been updated" : "Startzeit wurde angepasst", + "Error occurred while updating start time" : "Beim Aktualisieren der Startzeit ist ein Fehler aufgetreten", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Durch Aktivieren der Lobby werden Nicht-Moderatoren aus dem laufenden Anruf entfernt.", + "Enable lobby, restricting the conversation to moderators" : "Aktivieren der Lobby, beschränke die Unterhaltung auf die Moderatoren.", + "Meeting start time" : "Meeting Startzeit", + "Start time (optional)" : "Startzeit (optional)", + "Import email participants" : "E-Mail-Teilnehmer importieren", + "You can import a list of email participants from a CSV file." : "Eine Liste von E-Mail-Teilnehmern kann aus einer CSV-Datei importiert werden.", + "Poll drafts" : "Umfrageentwürfe", + "Browse poll drafts" : "Umfrageentwürfe durchsuchen", + "Error occurred when locking the conversation" : "Beim Sperren der Unterhaltung ist ein Fehler aufgetreten", + "Error occurred when unlocking the conversation" : "Beim Entsperren der Unterhaltung ist ein Fehler aufgetreten", + "Lock conversation" : "Unterhaltung sperren", + "This will also terminate the ongoing call." : "Dadurch wird auch der laufende Anruf beendet. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Die Unterhaltung sperren, um zu verhindern, dass jemand Nachrichten postet oder Anrufe startet", + "Edit" : "Bearbeiten", + "More information" : "Weitere Informationen", + "Delete" : " Löschen", + "Add new bridged channel to current conversation" : "Neuen Einbindungs-Kanal für die aktuelle Unterhaltung hinzufügen", + "unknown state" : "unbekannter Zustand", + "running" : "läuft", + "not running, check Matterbridge log" : "Nicht aktiv, bitte das Matterbridge-Protokoll prüfen", + "not running" : "läuft nicht", + "Bridge saved" : "Brücke gespeichert", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Mit Matterbridge kannst du Brücken-Kanäle von verschiedenen Instant-Messaging-Systemen verbinden.", + "More info on Matterbridge" : "Weitere Informationen über Matterbridge", + "Messaging systems" : "Messaging-Systeme", + "Enable bridge" : "Einbindung aktivieren", + "Show Matterbridge log" : "Zeige das Matterbridge Log", + "Log content" : "Log-Inhalt", + "Only moderators are allowed to mention @all" : "Nur Moderatoren dürfen @all erwähnen", + "All participants are allowed to mention @all" : "Alle Teilnehmer dürfen @all erwähnen", + "Participants are now allowed to mention @all." : "Teilnehmer dürfen nun @all erwähnen.", + "Mentioning @all has been limited to moderators." : "Erwähnung von @all wurde auf Moderatoren beschränkt.", + "Allow participants to mention @all" : "Teilnehmer dürfen @all erwähnen", + "Mention permissions" : "Erwähnungsberechtigungen", + "Notifications" : "Benachrichtigungen", + "Notify about calls in this conversation" : "Über Anrufe in dieser Unterhaltung benachrichtigen", + "Important conversation" : "Wichtige Unterhaltung", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Nicht stören\"-Benutzerstatus wird für wichtige Unterhaltungen ignoriert", + "Sensitive conversation" : "Sensible Unterhaltung", + "Message preview will be disabled in conversation list and notifications" : "Die Nachrichtenvorschau wird in der Unterhaltungsliste und den Benachrichtigungen deaktiviert", + "Recording consent is required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung erforderlich", + "Recording consent is not required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung nicht erforderlich", + "Recording consent requirement was updated" : "Die Einstellungen zum Erfordernis der Zustimmung zur Aufzeichnung wurde aktualisiert.", + "Error occurred while updating recording consent" : "Beim Aktualisieren der Einstellung zur Zustimmung zur Aufzeichnung ist ein Fehler aufgetreten.", + "Recording Consent" : "Einwilligung zur Aufzeichnung", + "Recording consent cannot be changed once a call or breakout session has started." : "Die Einwilligung zur Aufzeichnung kann nicht mehr geändert werden, sobald ein Unterhaltung oder eine Breakout-Sitzung begonnen hat.", + "Require recording consent before joining call in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Zustimmung zur Aufzeichnung erforderlich.", + "Recording consent is required for all calls" : "Für alle Unterhaltungen ist eine Zustimmung zur Aufzeichnung erforderlich", + "SIP dial-in is now possible without PIN requirement" : "SIP-Einwahl ist jetzt ohne PIN möglich", + "SIP dial-in is now enabled" : "Die SIP-Einwahl ist jetzt aktiviert", + "SIP dial-in is now disabled" : "Die SIP-Einwahl ist jetzt deaktiviert", + "Error occurred when enabling SIP dial-in" : "Beim Aktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Error occurred when disabling SIP dial-in" : "Beim Deaktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Phone and SIP dial-in" : "Telefon- und SIP-Einwahl", + "Enable phone and SIP dial-in" : "Telefon- und SIP-Einwahl aktivieren", + "Allow to dial-in without a PIN" : "Einwahl ohne PIN erlauben", + "Ongoing" : "Laufend", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n Person hat angenommen","%n Personen haben angenommen"], + "_%n person declined_::_%n people declined_" : ["%n Person hat abgelehnt","%n Personen haben abgelehnt"], + "_and %n other attachment_::_and %n other attachments_" : ["und %n anderer Anhang","und %n andere Anhänge"], + "With {displayName}" : "Mit {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Anhang ansehen", + "Join" : "Beitreten", + "View conversation" : "Unterhaltung anzeigen", + "View event on Calendar" : "Termin im Kalender anzeigen", + "Error while creating the conversation" : "Fehler beim Erstellen der Unterhaltung", + "Hello, {displayName}" : "Hallo {displayName}", + "Start meeting now" : "Besprechung jetzt beginnen", + "Give your meeting a title" : "Gib deiner Besprechung einen Titel", + "Create and copy link" : "Link erstellen und teilen", + "Create a new conversation" : "Neue Unterhaltung erstellen", + "Join open conversations" : "Offener Unterhaltung beitreten", + "Call a phone number" : "Eine Telefonnummer anrufen", + "Scroll backward" : "Rückwärts scrollen", + "Scroll forward" : "Vorwärts scrollen", + "Schedule meetings" : "Besprechungen planen", + "You don't have any upcoming meetings" : "Du hast keine bevorstehenden Besprechungen", + "Calendar events with a conversation link as the location are shown here" : "Hier werden Kalenderereignisse mit einem Konversationslink als Ort angezeigt", + "Open calendar" : "Kalender öffnen", + "Unread mentions" : "Ungelesene Erwähnungen", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Nachrichten, in denen du erwähnt wurdest, werden hier angezeigt. Du kannst Personen erwähnen, indem du @ gefolgt von deren Namen eingibst", + "Upcoming reminders" : "Anstehende Erinnerungen", + "Message reminders" : "Nachrichtenerinnerungen", + "Set a reminder on a message to be notified" : "Eine Erinnerung für eine Nachricht festlegen, um benachrichtigt zu werden", + "Start a group conversation" : "Gruppenunterhaltung beginnen", + "Create conversation" : "Unterhaltung erstellen", + "Enter your name" : "Gib deinen Namen ein", + "Submit name and join" : "Namen übermitteln und beitreten", + "Do you already have an account?" : "Hast du bereits ein Konto?", + "Log in" : "Anmelden", + "Error while verifying uploaded file" : "Fehler bei der Überprüfung der hochgeladenen Datei", + "Uploaded file is verified" : "Hochgeladene Datei wurde überprüft", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Das Inhaltsformat besteht aus kommagetrennten Werten (CSV):
- Eine Kopfzeile ist erforderlich und muss mit \"Name\",\"E-Mail\" oder nur \"E-Mail\" übereinstimmen.
- Ein Eintrag pro Zeile (z. B. \"Max Mustermann\", \"max@beispiel.de\")", + "Participants added successfully" : "Teilnehmer hinzugefügt", + "Error while adding participants" : "Fehler beim Hinzufügen von Teilnehmern", + "Import a file" : "Eine Datei importieren", + "Browse" : "Durchsuchen", + "Verifying uploaded file …" : "Überprüfe hochgeladene Datei …", + "This might take a moment" : "Dies kann einen Moment dauern", + "Send invitations" : "Einladungen senden", + "_%n invalid email_::_%n invalid emails_" : ["%n ungültige E-Mail","%n ungültige E-Mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n E-Mail ist bereits importiert oder ein Duplikat","%n E-Mails sind bereits importiert oder Duplikate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n Einladung kann verschickt werden","%n Einladungen können verschickt werden"], + "An error occurred while calling a phone number" : "Es ist ein Fehler beim Anrufen einer Telefonnummer aufgetreten", + "Phone number could not be called: {error}" : "Die Telefonnummer konnte nicht angerufen werden: {error}", + "Phone number could not be called" : "Die Telefonnummer konnte nicht angerufen werden", + "Search participants or phone numbers" : "Teilnehmer oder Telefonnummern suchen", + "Creating the conversation …" : "Die Unterhaltung wird erstellt …", + "Mark as read" : "Als gelesen markieren", + "Mark as unread" : "Als ungelesen markieren", + "Remove from favorites" : "Aus den Favoriten entfernen", + "Add to favorites" : "Zu den Favoriten hinzufügen", + "Unarchive conversation" : "Unterhaltung dearchivieren", + "Ignore \"Do not disturb\"" : "\"Nicht stören\"-Modus ignorieren", + "You need to promote a new moderator before you can leave the conversation." : "Du musst einen neuen Moderator bestimmen, bevor du die Unterhaltung verlassen kannst.", + "Conversation actions" : "Unterhaltungsaktionen", + "Notify about calls" : "Über Anrufe benachrichtigen", + "Hide message text" : "Nachrichtentext ausblenden", + "Pending invitations" : "Ausstehende Einladungen", + "Join conversations from other servers" : "Unterhaltungen von anderen Servern beitreten", + "From {user} at {remoteServer}" : "Von {user} auf {remoteServer}", + "Decline invitation" : "Einladung ablehnen", + "Accept invitation" : "Einladung annehmen", + "No pending invitations" : "Keine ausstehenden Einladungen", + "Home" : "Startseite", + "Unread" : "Ungelesen", + "Mentions" : "Erwähnungen", + "Meetings" : "Besprechungen", + "Sort conversations" : "Unterhaltungen sortieren", + "By recent activity" : "Nach neuesten Aktivitäten", + "Alphabetically" : "Alphabetisch", + "Do not group by type" : "Nicht nach Typ gruppieren", + "Show private ones first" : "Private zuerst zeigen", + "Show group ones first" : "Gruppe zuerst zeigen", + "No followed threads" : "Keine nachverfolgten Themen", + "No matches found" : "Keine Übereinstimmungen gefunden", + "No conversations found" : "Keine Unterhaltungen gefunden", + "You have no archived conversations." : "Du hast keine archivierten Unterhaltungen", + "Subscribe to an existing thread or start your own." : "Ein existierendes Thema abonnieren, oder ein eigenes Thema beginnen.", + "You have no unread mentions." : "Du hast keine ungelesenen Erwähnungen.", + "You have no unread messages." : "Du hast keine ungelesenen Nachrichten.", + "An error occurred while performing the search" : "Es ist ein Fehler beim Suchen aufgetreten", + "Conversation list" : "Unterhaltungsliste", + "Filter conversations by" : "Unterhaltungen filtern nach", + "Unread messages" : "Ungelesene Nachrichten", + "Meeting conversations" : "Besprechungsunterhaltungen", + "Clear filters" : "Filter zurücksetzen", + "New personal note" : "Neue persönliche Notiz", + "SIP backend is not installed" : "SIP-Backend ist nicht installiert", + "Back to conversations" : "Zurück zu den Unterhaltungen", + "Archived conversations" : "Archivierte Unterhaltungen", + "Threads" : "Themen", + "Clear filter" : "Filter zurücksetzen", + "Show more threads" : "Mehr Themen anzeigen", + "App settings" : "App-Einstellungen", + "Users" : "Benutzer", + "Groups" : "Gruppen", + "Teams" : "Teams", + "Federated users" : "Federierte Benutzer", + "New private conversation" : "Neue private Unterhaltung", + "Other sources" : "Andere Quellen", + "Open conversations" : "Offene Unterhaltungen", + "No search results" : "Keine Suchergebnisse", + "Users, groups and teams" : "Personen, Gruppen und Teams", + "Users and groups" : "Benutzer und Gruppen", + "Users and teams" : "Personen und Teams", + "Groups and teams" : "Gruppen und Teams", + "New group conversation" : "Neue Gruppenunterhaltung", + "The meeting will start soon" : "Das Meeting beginnt bald", + "This meeting is scheduled for {startTime}" : "Dieses Meeting ist geplant für {startTime}", + "You are currently waiting in the lobby" : "Du wartest derzeit in der Lobby", + "Enable noise suppression" : "Geräuschunterdrückung aktivieren", + "Reduce background noises for better voice quality" : "Hintergrundgeräusche für eine bessere Sprachqualität reduzieren", + "Enable echo cancellation" : "Echounterdrückung aktivieren", + "Minimize echo effect from own surrounding" : "Echoeffekt aus der eigenen Umgebung minimieren", + "Enable auto gain control" : "Regelung der automatischen Verstärkung aktivieren", + "Dynamically adjust microphone volume for consistent level" : "Die Mikrofonlautstärke dynamisch anpassen, um einen konstanten Pegel zu halten", + "Select microphone" : "Mikrofon auswählen", + "No microphone available" : "Kein Mikrofon verfügbar", + "Select speaker" : "Lautsprecher auswählen", + "No speaker available" : "Kein Lautsprecher verfügbar", + "Select camera" : "Kamera auswählen", + "No camera available" : "Keine Kamera verfügbar", + "Select a device" : "Ein Gerät auswählen", + "Playing …" : "Wiedergabe …", + "Test speakers" : "Lautsprecher testen", + "Test" : "Test", + "Devices" : "Geräte", + "Backgrounds" : "Hintergründe", + "No audio" : "Kein Audio", + "No camera" : "Keine Kamera", + "Display video as you will see it (mirrored)" : "Video so anzeigen, wie du es sehen wirst (gespiegelt)", + "Display video as others will see it" : "Video so anzeigen, wie andere es sehen", + "Calls are not supported in your browser" : "Anrufe werden von deinem Browser nicht unterstützt", + "Access to microphone is only possible with HTTPS" : "Zugriff auf Mikrofon ist nur über HTTPS möglich", + "Access to microphone was denied" : "Zugriff auf Mikrofon wurde verweigert", + "Error while accessing microphone" : "Fehler beim Zugriff auf das Mikrofon", + "Access to camera is only possible with HTTPS" : "Zugriff auf Kamera ist nur über HTTPS möglich", + "The call is being recorded." : "Der Anruf wird aufgezeichnet.", + "The call might be recorded." : "Die Unterhaltung wird möglicherweise aufgezeichnet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Die Aufnahme kann deine Stimme sowie Video von der Kamera und einer Bildschirmfreigabe beinhalten. Vor der Teilnahme am Anruf ist dein Einverständnis hierzu erforderlich.", + "Give consent to the recording of this call" : "Stimme bitte der Aufzeichnung dieser Unterhaltung zu", + "Show more info" : "Weitere Informationen anzeigen", + "Audio is not available" : "Audio ist nicht verfügbar", + "Video is not available" : "Video ist nicht verfügbar", + "Start recording immediately with the call" : "Aufzeichnung sofort mit dem Anruf starten", + "Recording backend is not installed" : "Aufnahme-Backend ist nicht installiert", + "Notify all participants about this call" : "Alle Teilnehmer über diesen Anruf benachrichtigen", + "Apply settings" : "Einstellungen anwenden", + "Select virtual office background" : "Büro als virtuellen Hintergrund auswählen", + "Select virtual home background" : "Zuhause als virtuellen Hintergrund auswählen", + "Select virtual abstract background" : "Abstraktion als virtuellen Hintergrund auswählen", + "Select virtual beach background" : "Strand als virtuellen Hintergrund auswählen", + "Select virtual park background" : "Park als virtuellen Hintergrund auswählen", + "Select virtual theater background" : "Theater als virtuellen Hintergrund auswählen", + "Select virtual library background" : "Bibliothek als virtuellen Hintergrund auswählen", + "Select virtual space station background" : "Raumstation als virtuellen Hintergrund auswählen", + "Error while uploading the file" : "Fehler beim Hochladen der Datei", + "Select a file" : "Eine Datei wählen", + "Invalid path selected" : "Ungültiger Pfad ausgewählt", + "Select virtual background from file {fileName}" : "Virtuellen Hintergrund von Datei {fileName} auswählen", + "Blur" : "Verwischen", + "Upload" : "Hochladen", + "Files" : "Dateien", + "(editing)" : "(bearbeiten)", + "(edited)" : "(Bearbeitet)", + "The message has expired or has been deleted" : "Die Nachricht ist abgelaufen oder wurde gelöscht", + "Cancel quote" : "Zitieren abbrechen", + "24 hours" : "24 Stunden", + "7 days" : "7 Tage", + "30 days" : "30 Tage", + "Until unpin" : "Bis zum Ablösen", + "Clear reminder – {timeLocale}" : "Erinnerung löschen – {timeLocale}", + "Edited by {actor}" : "Bearbeitet von {actor}", + "Pinned by you" : "Angeheftet von dir", + "Pinned by {actor}" : "Angeheftet von {actor}", + "Until {absoluteDate}" : "Bis zum {absoluteDate}", + "Message text copied to clipboard" : "Nachrichteninhalt wurde in die Zwischenablage kopiert", + "Message text could not be copied" : "Nachrichteninhalt konnte nicht kopiert werden", + "Message forwarded to \"Note to self\"" : "Nachricht weitergeleitet an \"Notiz an mich\"", + "Error while forwarding message to \"Note to self\"" : "Fehler beim Weiterleiten der Nachricht an \"Notiz an mich\"", + "A reminder was successfully removed" : "Erinnerung wurde entfernt", + "Error occurred when removing a reminder" : "Beim Entfernen einer Erinnerung ist ein Fehler aufgetreten", + "A reminder was successfully set at {datetime}" : "Eine Erinnerung wurde für {datetime} erstellt.", + "Error occurred when creating a reminder" : "Beim Erstellen einer Erinnerung ist ein Fehler aufgetreten", + "Add a reaction to this message" : "Dieser Nachricht eine Reaktion hinzufügen", + "Reply" : "Antworten", + "More actions" : "Weitere Aktionen", + "Set reminder" : "Erinnerung erstellen", + "Pin message" : "Nachricht anheften", + "Unpin message" : "Nachricht ablösen", + "Reply privately" : "Privat antworten", + "Edit message" : "Nachricht bearbeiten", + "Copy message" : "Nachricht kopieren", + "Copy message link" : "Nachrichtenlink kopieren", + "Go to file" : "Zur Datei wechseln", + "Download file" : "Datei herunterladen", + "Go to thread" : "Zu Thema gehen", + "Edit thread details" : "Themendetails bearbeiten", + "Forward message" : "Nachricht weiterleiten", + "Translate" : "Übersetzen", + "Set custom reminder" : "Benutzerdefinierte Erinnerung erstellen", + "Keep pinned for" : "Angeheftet lassen für", + "Set custom period" : "Benutzerdefinierten Zeitraum eingeben", + "Close reactions menu" : "Menü für Reaktionen schließen", + "React with {emoji}" : "Mit {emoji} reagieren", + "React with another emoji" : "Mit einem anderen Emoji reagieren", + "Choose a conversation to forward the selected message." : "Eine Unterhaltung auswählen um die ausgewählte Nachricht weiterzuleiten.", + "Error while forwarding message" : "Fehler beim Weiterleiten der Nachricht", + "The message has been forwarded to {selectedConversationName}" : "Die Nachricht wurde an {selectedConversationName} weitergleitet", + "Dismiss" : "Ausblenden", + "Go to conversation" : "Zur Unterhaltung gehen", + "Detect language" : "Sprache erkennen", + "The message could not be translated" : "Die Nachricht konnte nicht übersetzt werden", + "Translation copied to clipboard" : "Übersetzung wurde in die Zwischenablage kopiert", + "Translation could not be copied" : "Übersetzung konnte nicht kopiert werden", + "Translate message" : "Nachricht übersetzen", + "Source language to translate from" : "Ausgangssprache, aus der übersetzt werden soll ", + "Translate from" : "Übersetzen von", + "Target language to translate into" : "Zielsprache, in die übersetzt werden soll", + "Translate to" : "Übersetzen in", + "Translating" : "Übersetze", + "This translation is AI generated and may contain mistakes." : "Diese Übersetzung ist KI-generiert und kann Fehler enthalten.", + "Copy translated text" : "Übersetzen Text kopieren", + "Error when scheduling the message" : "Fehler beim Planen des Nachrichtenversands", + "Reschedule" : "Umplanen", + "Send now" : "Jetzt senden", + "Choose a time" : "Eine Zeit wählen", + "Send at custom time" : "Zur benutzerdefinierten Zeit senden", + "Will be sent without notification" : "Wird ohne Benachrichtigung gesendet", + "Message read by everyone who shares their reading status" : "Nachricht wird von allen gelesen, die deinen Lesestatus teilen", + "Message sent" : "Nachricht wurde gesendet", + "Sent without notification" : "Ohne Benachrichtigung gesendet", + "Deleting message" : "Löschen der Nachricht", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Nachricht gelöscht, aber ein Bot oder Matterbridge ist konfiguriert und die Nachricht wurde unter Umständen bereits an andere Dienste verteilt", + "Message deleted successfully" : "Nachricht gelöscht", + "Message could not be deleted because it is too old" : "Nachricht konnte nicht gelöscht werden, da sie zu alt ist.", + "Only normal chat messages can be deleted" : "Nur normale Chatnachrichten können gelöscht werden", + "An error occurred while deleting the message" : "Es ist ein Fehler beim Löschen der Nachricht aufgetreten", + "Pinned" : "Angeheftet", + "Your browser does not support playing audio files" : "Der Browser unterstützt nicht das Abspielen von Audio-Dateien", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck-Karte", + "Remove {fileName}" : "Entferne {fileName}", + "Open this location in OpenStreetMap" : "Diesen Ort in OpenStreetMap öffnen", + "_%n reply_::_%n replies_" : ["%n Antwort","%n Antworten"], + "Sending message" : "Nachricht wird gesendet", + "Failed to send the message. Click to try again" : "Nachricht konnte nicht gesendet werden. Klicke, um es erneut zu versuchen.", + "Not enough free space to upload file" : "Nicht genügend freier Speicherplatz zum Hochladen der Datei", + "You cannot send messages to this conversation at the moment" : "Du kannst derzeit keine Nachrichten an diese Unterhaltung senden", + "Could not update the message" : "Nachricht konnte nicht aktualisiert werden", + "Reply to thread \"{threadTitle}\"" : "Antwort auf das Thema \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Du hast abgestimmt • %n Stimme","Du hast abgestimmt • %n Stimmen"], + "You voted" : "Du hast abgestimmt", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Zum Abstimmen klicken • %n Stimme","Zum Abstimmen klicken • %n Stimmen"], + "Click to vote" : "Zum Abstimmen klicken", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Umfrageentwurf • %n Option","Umfrageentwurf • %n Optionen"], + "_%n vote_::_%n votes_" : ["%n Stimme","%n Stimmen"], + "Edit poll draft" : "Umfrageentwurf bearbeiten", + "Delete poll draft" : "Umfrageentwurf löschen", + "Open poll" : "Offene Umfrage", + "Closed poll" : "Geschlossene Umfrage", + "See results" : "Ergebnisse anzeigen", + "Reactions" : "Reaktionen", + "No permission to post reactions in this conversation" : "Keine Berechtigung zum Veröffentlichen von Reaktionen in dieser Unterhaltung", + "and {participant}" : "und {participant}", + "_and %n other participant_::_and %n other participants_" : ["und %n weiterer Teilnehmer","und %n weitere Teilnehmer"], + "Show all reactions" : "Alle Reaktionen anzeigen", + "Add more reactions" : "Weitere Reaktionen hinzufügen", + "Show or collapse system messages" : "Systemnachrichten anzeigen oder zuklappen", + "No messages" : "Keine Nachrichten", + "All messages have expired or have been deleted." : "Alle Nachrichten sind abgelaufen oder wurden gelöscht.", + "Generate summary with AI" : "Zusammenfassung mit KI erstellen", + "{author} (pinned by you)" : "{author} (Von dir angeheftet)", + "{author} (pinned by {actor})" : "{author} (Angeheftet von {actor})", + "Unpin" : "Ablösen", + "Cancel search" : "Suche abbrechen", + "Add a phone number" : "Eine Telefonnummer hinzufügen", + "Error: A password is required to create the conversation." : "Fehler: Ein Passwort ist erforderlich, um die Unterhaltung zu erstellen.", + "All set, the conversation \"{conversationName}\" was created." : "Alles erledigt, die Unterhaltung \"{conversationName}\" wurde erstellt.", + "Create a new group conversation" : "Neue Gruppenunterhaltung erstellen", + "Add participants" : "Teilnehmer hinzufügen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale Länge überschritten ({maxlength} Zeichen)", + "Conversation type" : "Unterhaltungstyp", + "Conversation visibility" : "Sichtbarkeit der Unterhaltung", + "Allow guests to join via link" : "Gästen die Teilnahme per Link erlauben", + "Enter password" : "Passwort eingeben", + "This conversation has been locked" : "Diese Unterhaltung wurde gesperrt", + "No permission to post messages in this conversation" : "Keine Berechtigung zum Veröffentlichen von Nachrichten in dieser Unterhaltung", + "Joining conversation …" : "Unterhaltung beitreten …", + "Write a message without notification" : "Eine Nachricht ohne Benachrichtigung schreiben", + "Create a thread silently" : "Ein Thema stillschweigend erstellen", + "Create a thread" : "Ein Thema erstellen", + "Send message silently" : "Nachricht still senden", + "Send message" : "Nachricht senden", + "Send without notification" : "Ohne Benachrichtigung senden", + "The participant will not be notified about new messages" : "Der Teilnehmer wird über neue Nachrichten nicht benachrichtigt", + "Participants will not be notified about new messages" : "Teilnehmer werden über neue Nachrichten nicht benachrichtigt", + "Message will be sent {datetimeString}" : "Nachricht wird gesendet um {datetimeString}", + "Thread title is required" : "Ein Thementitel ist erforderlich", + "Message text is required" : "Ein Nachrichtentext ist erforderlich", + "The message could not be edited" : "Die Nachricht konnte nicht bearbeitet werden", + "File to share" : "Zu teilende Datei", + "File upload is not available in this conversation" : "Das Hochladen von Dateien ist in dieser Unterhaltung nicht verfügbar", + "Message was successfully scheduled" : "Nachrichtenversand wurde geplant", + "Add emoji" : "Emoji hinzufügen", + "Adding a mention will only notify users who did not read the message." : "Hinzufügen einer Erwähnung benachrichtigt nur Benutzer, die die Nachricht noch nicht gelesen haben.", + "Thread title" : "Thementitel", + "Send later" : "Später senden", + "Show scheduled messages" : "Geplante Nachrichten ansehen", + "Cancel editing" : "Bearbeitung abbrechen", + "Schedule message" : "Nachrichtenversand planen", + "{user} is out of office and might not respond." : "{user} ist nicht im Büro und antwortet möglicherweise nicht.", + "Absence period: {startDate} - {endDate}" : "Abwesenheitszeitraum: {startDate} - {endDate}", + "Replacement:" : "Ersatz:", + "Share from {nextcloud}" : "Von {nextcloud} teilen", + "Share from Files" : "Aus Dateien heraus teilen", + "Share files to the conversation" : "Dateien mit der Unterhaltung teilen", + "Upload from device" : "Von Gerät hochladen", + "Create new poll" : "Neue Umfrage erstellen", + "Smart picker" : "Intelligente Auswahl", + "Record voice message" : "Sprachnachricht aufnehmen", + "End recording and send" : "Aufnahme beenden und senden", + "Dismiss recording" : "Aufnahme verwerfen", + "Access to the microphone was denied" : "Zugriff auf das Mikrofon wurde verweigert", + "Microphone either not available or disabled in settings" : "Mikrofon ist entweder nicht verfügbar oder in den Einstellungen deaktiviert", + "Error while recording audio" : "Fehler bei der Audioaufnahme", + "Voice message {time} ({conversation})" : "Sprachnachricht {time} ({conversation})", + "Generating summary of unread messages …" : "Zusammenfassung ungelesener Nachrichten wird erstellt …", + "Summary is AI generated and might contain mistakes" : "Die Zusammenfassung wird von einer KI erstellt und kann Fehler enthalten", + "Error occurred during a summary generation" : "Es ist ein Fehler beim Erstellen einer Zusammenfassung aufgetreten", + "New file" : "Neue Datei", + "Blank" : "Leer", + "Error while creating file" : "Fehler beim Erstellen der Datei", + "Create and share a new file" : "Erstellen und teile eine neue Datei", + "Name of the new file" : "Name der neuen Datei", + "Create file" : "Datei erstellen", + "Someone is typing …" : "Jemand schreibt …", + "{user1} is typing …" : "{user1} schreibt …", + "{user1} and {user2} are typing …" : "{user1} und {user2} schreiben …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} und {user3} schreiben …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n weiterer schreiben …","{user1}, {user2}, {user3} and %n weitere schreiben …"], + "Add more files" : "Weitere Dateien hinzufügen", + "Send" : "Senden", + "In this conversation {user} can:" : "In dieser Unterhaltung kann {user}:", + "Edit default permissions for participants in {conversationName}" : "Standardberechtigungen für Teilnehmer in {conversationName} bearbeiten", + "Start a call" : "Einen Anruf starten", + "Skip the lobby" : "Die Lobby überspringen", + "Can post messages" : "Kann Nachrichten senden", + "Can post messages and reactions" : "Kann Nachrichten und Reaktionen posten", + "Can add reactions" : "Kann Reaktionen hinzufügen", + "Enable the microphone" : "Das Mikrofon aktivieren", + "Enable the camera" : "Die Kamera aktivieren", + "Share the screen" : "Den Bildschirm teilen", + "Update permissions" : "Berechtigungen aktualisieren", + "Updating permissions" : "Aktualisiere Berechtigungen", + "No poll drafts" : "Keine Umfrageentwürfe", + "There is no poll drafts yet saved for this conversation" : "Für diese Unterhaltung sind noch keine Umfrageentwürfe gespeichert", + "Create poll in {name}" : "Umfrage erstellen in {name}", + "Create poll" : "Umfrage erstellen", + "Error while importing poll" : "Fehler beim Importieren der Umfrage", + "Question" : "Frage", + "Ask a question" : "Eine Frage stellen", + "Import draft from file" : "Entwurf aus Datei importieren", + "Answers" : "Antworten", + "Answer {option}" : "Antwort {option}", + "Delete poll option" : "Umfrage-Option löschen", + "Add answer" : "Antwort hinzufügen", + "Settings" : "Einstellungen", + "Anonymous poll" : "Anonyme Umfrage", + "Multiple answers" : "Mehrere Antworten", + "Save as draft" : "Als Entwurf speichern", + "Export draft to file" : "Entwurf in Datei exportieren", + "_Final results • %n vote_::_Final results • %n votes_" : ["Endergebnisse • %n Stimme","Endergebnisse • %n Stimmen"], + "Your vote is anonymous" : "Deine Stimme ist anonym", + "You voted for this option" : "Du hast für diese Option gestimmt", + "End poll" : "Umfrage beenden", + "Change your vote" : "Ändere deine Stimmabgabe", + "Withdraw vote" : "Stimme zurückziehen", + "Results" : "Ergebnisse", + "Download as spreadsheet" : "Als Tabelle herunterladen", + "Download as CSV" : "Als CSV herunterladen", + "Voted participants" : "Gewählte Teilnehmer", + "Send a message to \"{roomName}\"" : "Eine Nachricht an \"{roomName}\" senden", + "Hide list of participants" : "Teilnehmerliste verbergen", + "Show list of participants" : "Teilnehmerliste anzeigen", + "Assistance requested in {roomName}" : "Unterstützung angefordert in {roomName}", + "The message was sent to \"{roomName}\"" : "Die Nachricht wurde an \"{roomName}\" gesendet", + "Dismiss request for assistance" : "Bitte um Unterstützung ablehnen", + "Send message to room" : "Nachricht an Raum senden", + "Back to main room" : "Zurück zum Hauptraum", + "Back to your room" : "Zurück zu deinen Raum", + "Message all rooms" : "Nachricht an alle Räume", + "Start session" : "Sitzung starten", + "Start a call before you start a breakout room session" : "Einen Anruf starten bevor du eine Gruppenraumsitzung beginnst", + "Stop session" : "Sitzung beenden", + "The message was sent to all breakout rooms" : "Die Nachricht wurde an alle Gruppenräume gesendet.", + "Send a message to all breakout rooms" : "Nachricht an alle Gruppenräume senden", + "Breakout rooms are not started" : "Gruppenräume sind nicht gestartet", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Anrufe ohne Hochleistungs-Backend können Verbindungsprobleme und eine hohe Gerätebelastung verursachen. {linkstart}Mehr erfahren{linkend}", + "Talk setup incomplete" : "Talk-Einrichtung unvollständig", + "Disable lobby" : "Lobby deaktivieren", + "Settings for participant \"{user}\"" : "Einstellungen für den Teilnehmer \"{user}\"", + "Participant \"{user}\"" : "Teilnehmer \"{user}\"", + "moderator" : "Moderator", + "bot" : "Bot", + "guest" : "Gast", + "Ringing …" : "Klingeln …", + "Call rejected" : "Anruf abgelehnt", + "{time} talking …" : "{time} im Gespräch …", + "{time} talking time" : "{time} Gesprächsdauer", + "Raised their hand" : "Hat die Hand gehoben", + "Joined with video" : "Mit Video beigetreten", + "Joined via phone" : "Mit Telefon beigetreten", + "Joined with audio" : "Mit Audio beigetreten", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Der Text muss weniger als oder gleich {maxLength} Zeichen lang sein. Dein aktueller Text ist {charactersCount} Zeichen lang.", + "Remove group and members" : "Gruppe und Mitglieder entfernen", + "Remove team and members" : "Team und Mitglieder entfernen", + "Remove participant" : "Teilnehmer entfernen", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Soll die Gruppe \"{displayName}\" und ihre Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Soll das Team \"{displayName}\" und seine Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove {displayName} from this conversation?" : "Soll {displayName} aus dieser Unterhaltung entfernt werden?", + "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", + "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", + "Permissions granted to {displayName}" : "Berechtigungen für {displayName} gewährt", + "Could not modify permissions for {displayName}" : " Die Berechtigungen für {displayName} konnten nicht geändert werden", + "Permissions removed for {displayName}" : "Berechtigungen für {displayName} entzogen", + "Permissions set to default for {displayName}" : "Berechtigungen für {displayName} auf Standard gesetzt", + "Phone number could not be hung up" : "Telefonnummer konnte nicht aufgelegt werden", + "Phone number could not be put on hold" : "Telefonnummer konnte nicht in die Warteschleife gelegt werden", + "Phone number could not be muted" : "Telefonnummer konnte nicht stummgeschaltet werden", + "Phone number could not be unmuted" : "Stummschaltung für Telefonnummer konnte nicht aufgehoben werden", + "DTMF message could not be sent" : "MFW-Nachricht konnte nicht gesendet werden", + "Phone number copied to clipboard" : "Telefonnummer in die Zwischenablage kopiert", + "Phone number could not be copied" : "Telefonnummer konnte nicht kopiert werden", + "in the lobby" : "In der Lobby", + "Dial out phone" : "Telefon wählen", + "Hang up phone" : "Telefon auflegen", + "Move back to lobby" : "Zurück zur Lobby", + "Move to conversation" : "Zur Unterhaltung wechseln", + "Dial-in PIN" : "Einwahl-PIN", + "Demote from moderator" : "Moderator absetzen", + "Promote to moderator" : "Zum Moderator ernennen", + "Resend invitation" : "Einladung erneut senden", + "Send call notification" : "Sende Anrufbenachrichtigung", + "Dial out phone number" : "Ausgehende Telefonnummer", + "Resume call for phone number" : "Anruf fortsetzen für Telefonnummer", + "Put phone number on hold" : "Telefonnummer in die Warteschleife legen", + "Unmute phone number" : "Stummschaltung der Telefonnummer aufheben", + "Mute phone number" : "Telefonnummer stummschalten", + "Copy phone number" : "Telefonnummer kopieren", + "Reset custom permissions" : "Benutzerdefinierte Berechtigungen zurücksetzen", + "Grant all permissions" : "Alle Berechtigungen gewähren", + "Remove all permissions" : "Alle Berechtigungen entziehen", + "Also ban from this conversation" : "Auch für diese Unterhaltung sperren", + "Internal note (reason to ban)" : "Interne Notiz (Grund der Sperrung)", + "Remove" : "Entfernen", + "Permissions modified for {displayName}" : "Berechtigungen für {displayName} geändert", + "Add users, groups or teams" : "Personen, Gruppen oder Teams hinzufügen", + "Add users or groups" : "Benutzer oder Gruppen hinzufügen", + "Add users or teams" : "Personen oder Teams hinzufügen", + "Add users" : "Benutzer hinzufügen", + "Add groups or teams" : "Gruppen oder Teams hinzufügen", + "Add groups" : "Gruppen hinzufügen", + "Add teams" : "Teams hinzufügen", + "Add other sources" : "Andere Quellen hinzufügen", + "Add emails" : "E-Mails hinzufügen", + "Integrations" : "Einbindungen", + "Add federated users" : "Federated-Benutzer hinzufügen", + "Searching …" : "Suche …", + "Search for more users" : "Nach weiteren Benutzern suchen", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kannst Teilnehmende über Namen, E-Mail-Adresse oder Federated-Cloud-ID suchen oder hinzufügen", + "Search or add participants" : "Teilnehmer suchen oder hinzufügen", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} gesendet", + "An error occurred while adding the participants" : "Es ist ein Fehler beim Hinzufügen der Teilnehmer aufgetreten.", + "A new group conversation with selected participant will be created" : "Es wird eine neue Gruppenunterhaltung mit dem ausgewählten Teilnehmer erstellt", + "Participants" : "Teilnehmer", + "Pinned by a deleted user" : "Angeheftet von einem gelöschten Benutzer", + "Participants ({count})" : "Teilnehmer ({count})", + "Open chat" : "Chat öffnen", + "You have new unread messages in the chat." : "Du hast neue ungelesene Nachrichten im Chat.", + "You have been mentioned in the chat." : "Du wurdest im Chat erwähnt.", + "Search messages" : "Nachrichten suchen", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Freigegebene Elemente", + "Search in {name}" : "Suche in {name}", + "Threads in {name}" : "Themen in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Suche Nachrichten  …", + "Search options" : "Suchoptionen", + "From User" : "Von Benutzer", + "Since" : "Seit", + "Until" : "Bis", + "No results found" : "Keine Ergebnisse gefunden", + "Load more results" : "Weitere Ergebnisse laden", + "Recent threads" : "Neueste Themen", + "Projects" : "Projekte", + "No shared items" : "Keine geteilten Elemente", + "Thread notifications" : "Thread-Benachrichtigungen", + "Thread actions" : "Themenaktionen", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Zu einer Unterhaltung verlinken", + "No open conversations found" : "Keine offenen Unterhaltungen gefunden", + "Either there are no open conversations or you joined all of them." : "Entweder gibt es keine offenen Unterhaltungen oder du bist bereits allen beigetreten.", + "Check spelling or use complete words." : "Überprüfe die Rechtschreibung oder verwende vollständige Wörter.", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", + "Select conversation" : "Unterhaltung auswählen", + "Number length is not valid" : "Nummernlänge ist nicht gültig", + "Region code is not valid" : "Vorwahl ist ungültig", + "Number length is too short" : "Nummernlänge ist zu kurz", + "Number length is too long" : "Nummernlänge ist zu lang", + "Number is not valid" : "Nummer ist nicht gültig", + "Phone numbers" : "Telefonnummern", + "Display name: {name}" : "Anzeigename: {name}", + "Edit display name" : "Anzeigename bearbeiten", + "Display name (required)" : "Anzeigename (erforderlich)", + "Save name" : "Namen speichern", + "I picked message bubbles" : "Ich habe Sprechblasen ausgewählt", + "I picked the list style" : "Ich habe den Listenstil ausgewählt", + "Error while setting personal setting" : "Fehler beim Festlegen der persönlichen Einstellung", + "Error while saving sounds setting" : "Fehler beim Speichern der Toneinstellung", + "Compact conversations list" : "Unterhaltungsliste verkleinern", + "Chat appearance" : "Chat-Darstellung", + "Messages list" : "Nachrichtenliste", + "Message bubbles" : "Sprechblasen", + "Play sounds when participants join or leave a call" : "Töne abspielen, wenn Teilnehmer einem Anruf beitreten oder verlassen", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Derzeit aufgrund technischer Einschränkungen durch den Hersteller nicht auf iPhone und iPad verfügbar", + "Notification settings" : "Benachrichtigungseinstellungen", + "Sounds for chat and call notifications" : "Töne für Chat- und Anrufbenachrichtigungen", + "Invalid language ({languageId})" : "Ungültige Sprache ({languageId})", + "Default language" : "Standardsprache", + "Default language ({languageName})" : "Standardsprache ({languageName})", + "Error when trying to load the available live translation languages" : "Fehler beim Versuch, die verfügbaren Live-Übersetzungssprachen zu laden", + "Error when trying to set live translation language" : "Fehler beim Versuch, eine Live-Übersetzungssprache festzulegen", + "Set language used to show the transcriptions" : "Sprache festlegen, die zur Anzeige der Transkriptionen verwendet wird", + "Select location for attachments" : "Speicherort für Anhänge auswählen", + "Error while setting attachment folder" : "Fehler beim Festlegen des Ordners für Anhänge", + "Error while setting read status privacy" : "Fehler beim Setzen des Lesestatus Privatsphäre", + "Error while setting typing status privacy" : "Fehler beim Festlegen des Datenschutzes für den Eingabestatus", + "Error while setting default media state" : "Fehler beim Setzen des Standard-Medienstatus", + "Turn camera and microphone off by default" : "Kamera und Mikrofon standardmäßig ausschalten", + "Blur camera background by default" : "Kamerahintergrund standardmäßig verwischen", + "Skip device preview before joining a call" : "Gerätevorschau vor dem Beitritt zu einer Unterhaltung überspringen", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Beim Beitritt wird die Kamera ausgeschaltet. Dies wird immer angezeigt, wenn eine Einverständniserklärung erforderlich ist.", + "Appearance & Sounds" : "Aussehen & Töne", + "Privacy" : "Datenschutz", + "Send read receipts" : "Lesebestätigungen senden", + "When off, all read statuses will be hidden" : "Im ausgeschalteten Zustand werden alle Lesestatus ausgeblendet", + "Share typing status" : "Schreibstatus teilen", + "When off, all typing indicators will be hidden" : "Im ausgeschalteten Zustand werden alle Schreibanzeigen ausgeblendet", + "Attachments folder" : "Ordner für Anhänge", + "Toggle full screen" : "Vollbild umschalten", + "Return to Home screen" : "Zum Startbildschirm zurückkehren", + "Search" : "Suche", + "Shortcuts while in a chat" : "Tastaturkürzel während eines Chats", + "Focus the chat input" : "Chat-Eingabe fokussieren", + "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", + "Edit your last message" : "Deine letzte Nachricht bearbeiten", + "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", + "Camera on and off" : "Kamera ein- und ausschalten", + "Microphone on and off" : "Mikrofon ein- und ausschalten", + "Raise or lower hand" : "Hand heben oder senken", + "Push to talk or push to mute" : "Zum Sprechen oder Stummschalten drücken", + "Zoom-in / zoom-out a screen share" : "Vergrößern/Verkleinern einer Bildschirmfreigabe", + "Mouse wheel" : "Mausrad", + "Start call silently" : "Anruf stumm beginnen", + "Start call" : "Anruf starten", + "End call" : "Anruf beenden", + "The server was updated, you cannot start or join a call." : "Der Server wurde aktualisiert, Du kannst keinen Anruf starten oder daran teilnehmen.", + "This call has just ended" : "Dieser Anruf wurde gerade beendet", + "You will be able to join the call only after a moderator starts it." : "Du kannst dem Anruf erst beitreten, nachdem ein Moderator ihn gestartet hat.", + "End call for everyone" : "Anruf für alle beenden", + "Starting the recording" : "Aufnahme wird gestartet", + "Recording" : "Aufnahme", + "The call has been running for one hour." : "Der Anruf läuft seit einer Stunde.", + "Cancel recording start" : "Start der Aufnahme abbrechen", + "Stop recording" : "Aufnahme stoppen", + "Send a reaction" : "Reaktion senden", + "React with {reaction}" : "Reagiere mit {reaction}", + "All tasks done!" : "Alle Aufgaben erledigt!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} von %n Aufgabe","{done} von %n Aufgaben"], + "Add participants to this call" : "Teilnehmer zu diesem Anruf hinzufügen", + "_%n participant in call_::_%n participants in call_" : ["%n Anrufteilnehmer","%n Anrufteilnehmer"], + "Scheduled messages" : "Geplante Nachrichten", + "You are not allowed to enable screensharing" : "Du bist nicht berechtigt, die Bildschirmfreigabe zu aktivieren", + "No screensharing" : "Keine Bildschirmfreigabe", + "Screensharing options" : "Optionen für Bildschirmübertragung", + "Enable screensharing" : "Bildschirmübertragung aktivieren", + "Bad sent video and screen quality." : "Schlechte Video- und Bildschirm-Sendequalität.", + "Bad sent screen quality." : "Schlechte Bildschirm-Sendequalität.", + "Bad sent video quality." : "Schlechte Video-Sendequalität", + "Bad sent audio, video and screen quality." : "Schlechte Audio-, Video- und Bildschirm-Sendequalität.", + "Bad sent audio and screen quality." : "Schlechte Audio- und Bildschirm-Sendequalität.", + "Bad sent audio and video quality." : "Schlechte Audio- und Video-Sendequalität.", + "Bad sent audio quality." : "Schlechte Audio-Sendequalität", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Deine Internetverbindung oder dein Computer ist ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, die Hintergrundunschärfe oder deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Disable background blur" : "Hintergrund ohne Unschärfe", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche deine Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können deinen Bildschirm möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche die Hintergrundunschärfe oder die Hintergrundunschärfe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche deine Bildschirmfreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Disable screenshare" : "Bildschirmübertragung deaktivieren", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche die Hintergrundunschärfe oder deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, deine Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen.", + "Screen sharing is not supported by your browser." : "Dieser Browser unterstützt das Teilen des Bildschirms nicht", + "Screen sharing requires the page to be loaded through HTTPS." : "Bildschirmteilen erfordert dass die Seite über HTTPS geladen wird.", + "Screensharing requires the page to be loaded through HTTPS." : "Das Übertragen des Bildschirms erfordert das Laden der Seite über HTTPS.", + "An error occurred while starting screensharing." : "Es ist ein Fehler beim Start der Bildschirmübertragung aufgetreten.", + "Select virtual background" : "Virtuellen Hintergrund auswählen", + "Show your screen" : "Deinen Bildschirm übertragen", + "Stop screensharing" : "Bildschirmübertragung beenden", + "Mute others" : "Andere Stummschalten", + "Start recording" : "Aufnahme beginnen", + "Set up breakout rooms" : "Gruppenräume einrichten", + "Download attendance list" : "Anwesenheitsliste herunterladen", + "Open Calendar" : "Kalender öffnen", + "Remove participant {name}" : "Teilnehmer {name} entfernen", + "Would you like to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Diese Unterhaltung wird nach %n Tag Inaktivität für alle gelöscht","Diese Unterhaltung wird nach %n Tagen Inaktivität für alle gelöscht"], + "Are you sure you want to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "Delete now" : "Jetzt löschen", + "Keep" : "Behalten", + "Open dialpad" : "Wählfeld öffnen", + "Select a region" : "Eine Region auswählen", + "Local time: {time}" : "Ortszeit: {time}", + "Scheduled {datetime}" : "Geplant {datetime}", + "Scheduled for {datetime}" : "Geplant für {datetime}", + "Search …" : "Suche …", + "Message without mention" : "Nachricht ohne Erwähnung", + "Mention myself" : "Mich selbst erwähnen", + "Mention everyone" : "Alle erwähnen", + "Select a conversation" : "Eine Unterhaltung auswählen", + "Select a mode" : "Einen Modus auswählen", + "You do not have permissions to access this conversation." : "Du hast nicht die Berechtigung auf diese Unterhaltung zuzugreifen", + "Join a different conversation or start a new one." : "Nimm an einer anderen Unterhaltung teil oder beginne eine neue.", + "The conversation does not exist" : "Die Unterhaltung existiert nicht", + "Join a conversation or start a new one!" : "Trete einer Unterhaltung bei oder starte eine neue!", + "Duplicate session" : "Doppelte Sitzung", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Diese Unterhaltung wurde in einem anderen Tab geöffnet. Die aktuelle Serverversion unterstützt das Öffnen einer Konversation in mehreren Tabs nicht.", + "Creating and joining a conversation with \"{userid}\"" : "Eine Unterhaltung mit \"{userid}\" erstellen und daran teilnehmen", + "Join a conversation or start a new one" : "Trete einer Unterhaltung bei oder starte eine neue", + "Error while joining the conversation" : "Fehler beim Beitreten zur Unterhaltung", + "Another user" : "Ein anderer Benutzer", + "Hey! Are you using the list style or message bubbles?" : "Hey! Verwendest du Talk im Listenstil oder mit Sprechblasen?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-Benutzer", + "User password" : "Benutzerpasswort", + "Talk conversation" : "Talk-Unterhaltung", + "Skip TLS verification" : "TLS-Überprüfung überspringen", + "Matrix server URL" : "Matrix-Server-URL", + "User" : "Benutzer", + "Matrix channel" : "Matrix-Kanal", + "Mattermost server URL" : "Mattermost-Server-URL", + "Mattermost user" : "Mattermost-Benutzer", + "Team name" : "Team-Name", + "Channel name" : "Kanal-Name", + "Rocket.Chat server URL" : "Rocket.Chat-Server-URL", + "User name or email address" : "Benutzername oder E-Mail-Adresse", + "Rocket.Chat channel" : "Rocket.Chat-Kanal", + "Zulip server URL" : "Zulip-Server-URL", + "Bot user name" : "Bot-Benutzername", + "Bot API key" : "Bot-API-Schlüssel", + "Zulip channel" : "Zulip-Kanal", + "API token" : "API-Token", + "Slack channel" : "Slack-Kanal", + "Server ID or name" : "Server-ID oder -Name", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (mit vorangestelltem \"ID:\") oder Name", + "Channel" : "Kanal", + "Login" : "Anmeldung", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC Server-URL (z. B. chat.freenode.net:6667)", + "Nickname" : "Spitzname", + "Connection password" : "Verbindungs-Passwort", + "IRC channel" : "IRC-Kanal", + "Channel password" : "Kanal-Passwort", + "NickServ nickname" : "NickServ-Spitzname", + "NickServ password" : "NickServ-Passwort", + "Use TLS" : "TLS verwenden", + "Use SASL" : "SASL verwenden", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Client-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Thread-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber Server-URL", + "MUC server URL" : "MUC-Server-URL", + "Jabber ID" : "Jabber-ID", + "Pinned messages" : "Angeheftete Nachrichten", + "Media" : "Medien", + "Polls" : "Umfragen", + "Deck cards" : "Deck-Karten", + "Voice messages" : "Sprachnachrichten", + "Locations" : "Orte", + "Call recordings" : "Anrufaufnahmen", + "Audio" : "Audio", + "Show all pinned messages" : "Alle angehefteten Nachrichten anzeigen", + "Show all media" : "Alle Medien anzeigen", + "Show all files" : "Alle Dateien anzeigen", + "Show all polls" : "Alle Umfragen anzeigen", + "Show all deck cards" : "Alle Deck-Karten anzeigen", + "Show all voice messages" : "Alle Sprachnachrichten anzeigen", + "Show all locations" : "Alle Orte anzeigen", + "Show all call recordings" : "Alle Anrufaufnahmen ansehen", + "Show all audio" : "Alle Audiodateien anzeigen", + "Show all other" : "Alle sonstigen anzeigen", + "Follow conversation settings" : "Unterhaltungseinstellungen folgen", + "Group" : "Gruppe", + "Team" : "Team", + "You reconnected to the call" : "Du hast dich wieder mit dem Anruf verbunden", + "{actor} reconnected to the call" : "{actor} hat sich wieder mit dem Anruf verbunden", + "You added {user0} and {user1}" : "Du hast {user0} und {user1} hinzugefügt", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Du hast {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added you and {user0}" : "Die Administration hat dich und {user0} hinzugefügt", + "{actor} added you and {user0}" : "{actor} hat dich und {user0} hinzugefügt", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat dich, {user0} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer hinzugefügt","{actor} hat dich, {user0} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added {user0} and {user1}" : "Die Administration hat {user0} und {user1} hinzugefügt", + "{actor} added {user0} and {user1}" : "{actor} hat {user0} und {user1} hinzugefügt", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "You removed {user0} and {user1}" : "Du hast {user0} und {user1} entfernt", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer entfernt","Du hast {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "An administrator removed you and {user0}" : "Die Administration hat dich und {user0} entfernt", + "{actor} removed you and {user0}" : "{actor} hat dich und {user0} entfernt", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer entfernt","Die Administration hat dich, {user0} und %n weitere Teilnehmer entfernt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer entfernt","{actor} hat dich, {user0} und %n weitere Teilnehmer entfernt"], + "An administrator removed {user0} and {user1}" : "Die Administration hat {user0} und {user1} entfernt", + "{actor} removed {user0} and {user1}" : "{actor} hat {user0} und {user1} entfernt", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "You and {user0} joined the call" : "Du und {user0} sind dem Anruf beigetreten", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} und %n weiterer Teilnehmer sind dem Anruf beigetreten","Du, {user0} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "{user0} and {user1} joined the call" : "{user0} und {user1} sind dem Anruf beigetreten", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer sind dem Anruf beigetreten","{user0}, {user1} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "You and {user0} left the call" : "Du und {user0} haben den Anruf verlassen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} und %n weiterer Teilnehmer haben den Anruf verlassen","Du, {user0} und %n weitere Teilnehmer haben den Anruf verlassen"], + "{user0} and {user1} left the call" : "{user0} und {user1} haben den Anruf verlassen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer haben den Anruf verlassen","{user0}, {user1} und %n weitere Teilnehmer haben den Anruf verlassen"], + "You promoted {user0} and {user1} to moderators" : "Du hast {user0} und {user1} zu Moderatoren ernannt", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Du hast {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted you and {user0} to moderators" : "Die Administration hat dich und {user0} zu Moderatoren ernannt", + "{actor} promoted you and {user0} to moderators" : "{actor} hat dich und {user0} zu Moderatoren ernannt", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat dich, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","{actor} hat dich, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted {user0} and {user1} to moderators" : "Die Administration hat {user0} und {user1} zu Moderatoren ernannt", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} hat {user0} und {user1} zu Moderatoren ernannt", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren befördert","{actor} hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "You demoted {user0} and {user1} from moderators" : "Du hast {user0} und {user1} von der Moderation abberufen", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer von der Moderation abberufen","Du hast {user0}, {user1} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted you and {user0} from moderators" : "Die Administration hat dich und {user0} von der Moderation abberufen", + "{actor} demoted you and {user0} from moderators" : "{actor} hat dich und {user0} von der Moderation abberufen", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer von Moderatoren abberufen","Die Administration hat dich, {user0} und %n weitere Teilnehmer von Moderatoren abberufen"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat dich, {user0} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted {user0} and {user1} from moderators" : "Die Administration hat {user0} und {user1} von der Moderation abberufen", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} hat {user0} und {user1} von der Moderation abberufen", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Die Administration hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","Die Administration hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "You:" : "Du:", + "You: {lastMessage}" : "Du: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Der Server wurde aktualisiert.", + "(edited by you)" : "(Von dir bearbeitet)", + "(edited by a deleted user)" : "(Von einem gelöschten Benutzer bearbeitet)", + "(edited by {moderator})" : "(Bearbeitet von {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du versuchst, an einer Unterhaltung teilzunehmen, während du in einem anderen Fenster oder Gerät eine aktive Sitzung hast. Dies wird derzeit von Nextcloud Talk nicht unterstützt. Was möchtest du tun?", + "Leave this page" : "Diese Seite verlassen", + "Join here" : "Hier beitreten", + "Deck card has been posted to {conversation}" : "Deckkarte wurde nach {conversation} gepostet", + "An error occurred while posting deck card to conversation" : "Es ist ein Fehler beim Posten der Deckkarte an die Unterhaltung aufgetreten", + "Post to a conversation" : "An eine Unterhaltung posten", + "Post to conversation" : "An eine Unterhaltung posten", + "The recording failed. Please contact your administrator." : "Die Aufnahme ist fehlgeschlagen. Bitte wende dich an deine Administration.", + "Location has been posted to {conversation}" : "Der Standort wurde nach {conversation} gepostet", + "An error occurred while posting location to conversation" : "Es ist ein Fehler beim Posten des Ortes an die Unterhaltung aufgetreten.", + "Share to a conversation" : "Mit einer Unterhaltung teilen", + "Share to conversation" : "Mit der Unterhaltung teilen", + "In conversation" : "In einer Unterhaltung", + "Search in conversation: {conversation}" : "Suche in Unterhaltung: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Deine Anfragen werden derzeit aufgrund des Brute-Force-Schutzes gedrosselt", + "Error while clearing conversation history" : "Fehler beim Löschen des Unterhaltungsverlaufs", + "Error occurred while allowing guests" : "Es ist ein Fehler beim Zulassen von Gästen aufgetreten", + "Error occurred while disallowing guests" : "Fehler beim Nichtzulassen von Gästen", + "Error occurred when restricting the conversation to moderator" : "Fehler beim Beschränken der Unterhaltung auf den Moderator aufgetreten", + "Error occurred when opening the conversation to everyone" : "Beim Öffnen der Unterhaltung für alle ist ein Fehler aufgetreten", + "Conversation password has been saved" : "Passwort für diese Unterhaltung wurde gespeichert", + "Conversation password has been removed" : "Passwort für diese Unterhaltung wurde entfernt", + "Error occurred while saving conversation password" : "Es ist ein Fehler beim Speichern des Passworts für die Unterhaltung aufgetreten", + "Call recording is starting." : "Gesprächsaufnahme startet.", + "Call recording stopped while starting." : "Unterhaltungsaufnahme beim Start angehalten.", + "Call recording stopped. You will be notified once the recording is available." : "Anrufaufzeichnung angehalten. Du wirst benachrichtigt, sobald die Aufnahme zur Verfügung steht.", + "Conversation picture set" : "Unterhaltungsbild festgelegt", + "Conversation picture deleted" : "Unterhaltungsbild gelöscht", + "Could not delete the conversation picture" : "Unterhaltungsbild konnte nicht gelöscht werden", + "Could not remove the automatic expiration" : "Der automatische Ablauf konnte nicht entfernt werden", + "Could not post message: {errorMessage}" : "Nachricht konnte nicht gesendet werden: {errorMessage}", + "Participant is banned successfully" : "Teilnehmer wurde gesperrt", + "Error while banning the participant" : "Fehler beim Sperren des Teilnehmers", + "An error occurred while fetching the participants" : "Es ist ein Fehler beim Abrufen der Teilnehmer aufgetreten", + "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} gesendet werden", + "Invitations sent" : "Einladungen gesendet", + "Error occurred when sending invitations" : "Beim Senden der Einladungen ist ein Fehler aufgetreten", + "Failed to join the conversation." : "Beitreten zur Unterhaltung fehlgeschlagen", + "An error occurred while creating breakout rooms" : "Es ist ein Fehler beim Erstellen von Breakout-Räumen aufgetreten.", + "An error occurred while re-ordering the attendees" : "Es ist ein Fehler beim Neuordnen der Teilnehmer aufgetreten.", + "An error occurred while deleting breakout rooms" : "Es ist ein Fehler beim Löschen von Breakout-Räumen aufgetreten.", + "An error occurred while starting breakout rooms" : "Es ist ein Fehler beim Starten vom Breakout-Räumen aufgetreten.", + "An error occurred while stopping breakout rooms" : "Es ist ein Fehler beim Stoppen von Breakout-Räumen aufgetreten.", + "An error occurred while sending a message to the breakout rooms" : "Es ist ein Fehler beim Senden einer Nachricht an die Gruppenräume aufgetreten.", + "An error occurred while requesting assistance" : "Es ist ein Fehler beim Anfordern der Unterstützung aufgetreten.", + "An error occurred while resetting the request for assistance" : "Es ist ein Fehler beim Zurücksetzen der Hilfeanfrage aufgetreten.", + "An error occurred while joining breakout room" : "Es ist ein Fehler beim Beitritt zum Gruppenraumraum aufgetreten", + "Failed to rename the thread" : "Thema konnte nicht umbenannt werden", + "Error fetching upcoming events" : "Fehler beim Abrufen der bevorstehenden Termine", + "Error fetching upcoming reminders" : "Fehler beim Abrufen der anstehenden Erinnerungen", + "An error occurred while accepting an invitation" : "Es ist ein Fehler bei der Annahme einer Einladung aufgetreten", + "An error occurred while rejecting an invitation" : "Es ist ein Fehler bei der Zurückweisung einer Einladung aufgetreten", + "{guest} (guest)" : "{guest} (Gast)", + "Poll draft has been saved" : "Umfrageentwurf wurde gespeichert", + "An error occurred while saving the draft" : "Beim Speichern des Entwurfs ist ein Fehler aufgetreten", + "An error occurred while submitting your vote" : "Es ist ein Fehler beim Absenden deiner Stimme aufgetreten.", + "An error occurred while ending the poll" : "Es ist ein Fehler beim Beenden der Umfrage aufgetreten.", + "An error occurred while deleting the poll draft" : "Es ist ein Fehler beim Löschen des Umfrageentwurfs aufgetreten", + "Poll \"{name}\" was created by {user}. Click to vote" : "Umfrage \"{name}\" wurde von {user} erstellt. Klicke, um abzustimmen", + "Failed to add reaction" : "Hinzufügen der Reaktion fehlgeschlagen", + "Failed to remove reaction" : "Entfernen der Reaktion fehlgeschlagen", + "The server is in maintenance mode." : "Der Server befindet sich im Wartungsmodus.", + "Federated server was updated." : "Der Federated-Server wurde aktualisiert.", + "Error while uploading file \"{fileName}\"" : "Fehler beim Hochladen der Datei \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nicht genügend freier Speicherplatz zum Hochladen von \"{fileName}\"", + "You are not allowed to share files" : "Keine Berechtigung, Dateien zu teilen", + "Error while sharing file" : "Fehler beim Teilen der Datei", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Der von dir verwendete Browser wird von Nextcloud Talk nicht vollständig unterstützt. Bitte verwende die neueste Version von Mozilla Firefox, Microsoft Edge, Google Chrome, Opera oder Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n Stunde","In %n Stunden"], + "_%n minute _::_%n minutes_" : ["%n Minute","%n Minuten"], + "In {hours} and {minutes}" : "In {hours} und {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n Minute","In %n Minuten"], + "Later today – {timeLocale}" : "Später heute – {timeLocale}", + "Set time for later today" : "Zeit für später heute einstellen", + "Tomorrow – {timeLocale}" : "Morgen – {timeLocale}", + "Set time for tomorrow" : "Zeit für morgen einstellen", + "This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}", + "Set time for this weekend" : "Zeit für dieses Wochenende einstellen", + "Next week – {timeLocale}" : "Nächste Woche – {timeLocale}", + "Set time for next week" : "Zeit für nächste Woche einstellen", + "Message link copied to clipboard" : "Nachrichtenlink in die Zwischenablage kopiert", + "Conversation link copied to clipboard" : "Link zur Unterhaltung in die Zwischenablage kopiert", + "The link could not be copied" : "Der Link konnte nicht kopiert werden", + "Error while parsing a PROPFIND error" : "Fehler beim Parsen eines PROPFIND-Fehlers", + "Sending signaling message has failed" : "Das Senden der Signaling-Nachricht ist fehlgeschlagen", + "Lost connection to signaling server. Trying to reconnect." : "Verbindung zum Signaling-Server verloren. Es wird versucht, diese wiederherzustellen.", + "Lost connection to signaling server." : "Verbindung zum Signaling-Server verloren.", + "Connecting is taking longer than expected …" : "Verbinden dauert länger als erwartet …", + "Failed to connect. Retrying …" : "Verbindung konnte nicht hergestellt werden. Erneuter Versuch …", + "Failed to connect. The signaling server may be set up incorrectly" : "Verbindung konnte nicht hergestellt werden Der Signaling-Server könnte falsch eingerichtet sein", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Der eingerichtete Signalisierungsserver muss aktualisiert werden, damit er mit dieser Version von Talk kompatibel ist. Bitte wende dich an deine Administration.", + "Please restart the app." : "Bitte die App neu starten.", + "Please reload the page." : "Bitte die Seite neu laden.", + "Please try to restart the app." : "Bitte versuche, die App neu zu starten.", + "Please try to reload the page." : "Bitte versuche, die Seite neu zu laden.", + "Do not disturb" : "Nicht stören", + "Away" : "Abwesend", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Lautsprecher {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Anscheinend sprichst du während du stummgeschaltet bist. Bitte schalte die Stummschaltung aus, damit die Anderen dich hören können.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Mit mindestens einem Teilnehmer konnte keine Verbindung hergestellt werden. Für dein Szenario wird möglicherweise ein TURN-Server benötigt. Bitte deine Administration, diesen gemäß {linkstart} dieser Dokumentation {linkend} einzurichten.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dies dauert länger als erwartet. Sind die Zugriffsrechte für Medien bereits erteilt (oder zurückgenommen)? Falls ja, dann starte deinen Browser neu, dann sonst kein Zugriff auf Audio und Video möglich ist", + "Access to microphone & camera is only possible with HTTPS" : "Zugriff auf Mikrofon & Kamera ist nur über HTTPS möglich", + "Please move your setup to HTTPS" : "Bitte stelle auf HTTPS um", + "Access to microphone & camera was denied" : "Zugriff auf Mikrofon & Kamera wurde verweigert", + "WebRTC is not supported in your browser" : "WebRTC wird von deinem Browser nicht unterstützt", + "Please use a different browser like Firefox or Chrome" : "Bitte benutze einen anderen Browser, wie z. B. Firefox oder Chrome", + "Error while accessing microphone & camera" : "Fehler beim Zugriff auf Mikrofon & Kamera", + "%s Talk on your mobile devices" : "%s Talk auf deinen mobilen Geräte", + "Join conversations at any time, anywhere, on any device." : "Immer, überall und auf allen Geräten einer Unterhaltung beitreten.", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "__language_name__" : "Deutsch (Persönlich: Du)", + "Webhook Demo" : "Webhook-Demo", + "Call summary (%s)" : "Protokoll (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Der Anruf-Zusammenfassungs-Bot veröffentlicht nach der Unterhaltung eine Übersichtsnachricht, in der alle Teilnehmenden und die Aufgaben aufgeführt sind", + "Tasks" : "Aufgaben", + "Notes" : "Notizen", + "Reports" : "Berichte", + "Decisions" : "Entscheidungen", + "Agenda" : "Agenda", + "Call summary" : "Protokoll", + "Call summary - {title}" : "Protokoll - {title}", + "Talk conversation for event" : "Talk-Unterhaltung für ein Ereignis", + "Client Push is installed, this improves the performance of desktop clients." : "Client-Push installiert ist. Dies verbessert die Leistung von Desktop-Clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push}ist nicht installiert. Dies kann zu Leistungsproblemen bei der Verwendung von Desktop-Clients führen.", + "Next meeting" : "Nächste Besprechung", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Plane ein Meeting aus deinem Kalender heraus. Ein Talk-Gespräch muss als Ort festgelegt werden, um hier angezeigt zu werden", + "Join conversations from remote Nextcloud servers" : "Unterhaltungen von entfernten Nextcloud-Servern beitreten", + "Your default media state has been saved" : "Dein Standard-Medienstatus wurde gespeichert", + "Set reminder for later today" : "Erinnerung für nachher erstellen", + "Set reminder for tomorrow" : "Erinnerung für morgen erstellen", + "Set reminder for this weekend" : "Erinnerung für dieses Wochenende erstellen", + "Set reminder for next week" : "Erinnerung für nächste Woche erstellen", + "Generate summary" : "Zusammenfassung erstellen", + "Open poll • You voted already" : "Offene Umfrage • Du hast bereits abgestimmt", + "Open poll • Click to vote" : "Offene Umfrage • Klicken, um abzustimmen", + "Poll • Ended" : "Umfrage・Beendet", + "Talk recording from {time} ({conversation})" : "Talk-Aufnahme von {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Umfrageergebnis • %n Stimme","Umfrageergebnisse • %n Stimmen"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Offene Umfrage • %n Stimme","Offene Umfrage • %n Stimmen"], + "Submit vote" : "Stimme übermitteln", + "Your privacy setting has been saved" : "Deine Datenschutzeinstellungen wurde gespeichert", + "Your personal setting has been saved" : "Deine persönliche Einstellung wurde gespeichert", + "Failed to save sounds setting" : "Toneinstellungen konnten nicht gespeichert werden", + "Sounds setting saved" : "Toneinstellung gespeichert", + "Always shown if recording consent is required" : "Wird immer angezeigt, wenn eine Zustimmung zur Aufzeichnung erforderlich ist", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk wurde aktualisiert. Du kannst keinen Anruf starten oder beitreten.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du bist der Unterhaltung in einem anderen Fenster oder Gerät beigetreten. Dies wird derzeit von Nextcloud Talk nicht unterstützt, daher wurde diese Sitzung geschlossen.", + "Nextcloud Talk was updated." : "Nextcloud Talk wurde aktualisiert.", + "Nextcloud is in maintenance mode." : "Nextcloud befindet sich im Wartungsmodus.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation wurde aktualisiert.", + "Enable live translation" : "Live-Übersetzung aktivieren", + "I picked list style" : "Ich habe den Listenstil ausgewählt", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Verwendest du Talk im Listenstil oder mit Sprechblasen?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de.json b/l10n/de.json new file mode 100644 index 0000000..125579c --- /dev/null +++ b/l10n/de.json @@ -0,0 +1,2260 @@ +{ "translations": { + "a conversation" : "Eine Unterhaltung", + "(Duration %s)" : "(Dauer %s)", + "You attended a call with {user1}" : "Du hast an einem Anruf mit {user1} teilgenommen", + "_%n guest_::_%n guests_" : ["%n Gast","%n Gäste"], + "You attended a call with {user1} and {user2}" : "Du hast an einem Anruf mit {user1} und {user2} teilgenommen", + "You attended a call with {user1}, {user2} and {user3}" : "Du hast an einem Anruf mit {user1}, {user2} und {user3} teilgenommen", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du hast an einem Anruf mit {user1}, {user2}, {user3} und {user4} teilgenommen", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du hast an einem Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} teilgenommen", + "_%n other_::_%n others_" : ["%n weiterer","%n weitere"], + "{actor} invited you to {call}" : "{actor} hat dich zu {call} eingeladen", + "You were invited to a conversation or had a call" : "Du wurdest zu einer Unterhaltung eingeladen oder hattest einen Anruf", + "Other activities" : "Andere Aktivitäten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Willkommen bei Nextcloud Talk!\nDiese Unterhaltung informiert über neue Funktionen in Nextcloud Talk.", + "## New in Talk %s" : "## Neu in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge und Safari können jetzt zur Teilnahme an Audio- und Videoanrufen verwendet werden", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Eins-zu-Eins-Unterhaltungen sind jetzt dauerhaft und können nicht mehr versehentlich in eine Gruppenunterhaltung gewandelt werden. Wenn ein Teilnehmer eine Unterhaltung verlässt, so wird die Unterhaltung jetzt nicht mehr automatisch gelöscht. Nur wenn beide Teilnehmer gehen, so wird die Unterhaltung vom Server gelöscht", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Jetzt können alle Teilnehmer durch das Posten von \"@all\" in den Chat benachrichtigt werden", + "- With the \"arrow-up\" key you can repost your last message" : "- Mit der \"Pfeil nach oben\"-Taste kannst du deine letzte Nachricht nochmals senden", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk beherrscht jetzt Befehle. Sende \"/help\" als Nachricht, um zu sehen, ob die Administration welche eingerichtet hat", + "- With projects you can create quick links between conversations, files and other items" : "- Mit Projekten kannst du einfach und schnell Verknüpfungen zwischen Unterhaltungen, Dateien und anderen Elementen erstellen", + "- You can now mention guests in the chat" : "- Du kannst nun Gäste im Chat erwähnen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Unterhaltungen können jetzt eine Lobby erhalten. Dies erlaubt Moderatoren, dem Chat und dem Anruf beizutreten, um das Meeting vorzubereiten, während andere Benutzer und Gäste in der Lobby warten", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kannst jetzt direkt auf Nachrichten antworten, um anderen Benutzern den Kontext deiner Nachrichten anzuzeigen", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Die Suche nach Unterhaltungen und Teilnehmern durchsucht jetzt auch vorhandene Unterhaltungen. Das macht es viel einfacher, vorhergehende Unterhaltungen zu finden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Wenn die Circles-App installiert ist, können jetzt auch benutzerdefinierte Gruppen zu Unterhaltungen hinzugefügt werden", + "- Check out the new grid and call view" : "- Schau dir die neue Kachel- und Sprecheransicht an", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Es können jetzt Dateien direkt von deinem Gerät in den Chat hochgeladen und per Drag'n'Drop übertragen werden.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Geteilte Dateien werden jetzt direkt in der Chatansicht mit den Betrachteranwendungen geöffnet", + "- You can now search for chats and messages in the unified search in the top bar" : "- Es kann jetzt in der vereinheitlichten Suche in der oberen Leiste nach Chats und Nachrichten gesucht werden", + "- Spice up your messages with emojis from the emoji picker" : "- Peppe deine Nachrichten mit Emojis aus der Emoji-Auswahl auf", + "- You can now change your camera and microphone while being in a call" : "- Kamera und Mikrofon können jetzt während des Telefonats gewechselt werden", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Den Unterhaltungen einen Kontext mit einer Beschreibung geben und diese öffnen, damit angemeldete Benutzer diese finden und selbst teilnehmen können", + "- See a read status and send failed messages again" : "- Lesestatus sehen und fehlgeschlagene Nachrichten erneut senden", + "- Raise your hand in a call with the R key" : "- Die Hand in einem Anruf durch drücken der Taste R heben", + "- Join the same conversation and call from multiple devices" : "- Derselben Unterhaltung von verschiedenen Geräten aus beitreten", + "- Send voice messages, share your location or contact details" : "- Sende Sprachnachrichten, teile deinen Aufenthaltsort oder deine Adressdaten", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Füge Gruppen zu einer Unterhaltung hinzu und die Gruppenmitglieder werden automatisch als Teilnehmer hinzugefügt", + "- A preview of your audio and video is shown before joining a call" : "- Eine Vorschau deines Audios und Videos wird angezeigt, bevor du einen Anruf tätigst", + "- You can now blur your background in the newly designed call view" : "- In der neu gestalteten Anrufansicht kannst du jetzt den Hintergrund unscharf anzeigen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren können nun allgemeine und individuelle Berechtigungen an Teilnehmer vergeben", + "- You can now react to chat messages" : "- Du kannst jetzt auf Chatnachrichten reagieren", + "- In the sidebar you can now find an overview of the latest shared items" : "- In der Seitenleiste findest du jetzt eine Übersicht über die zuletzt geteilten Elemente", + "- Use a poll to collect the opinions of others or settle on a date" : "- eine Umfrage verwenden, um die Meinungen anderer einzuholen oder sich auf einen Zeitpunkt zu einigen", + "- Configure an expiration time for chat messages" : "- Ablaufdatum für Chatnachrichten konfigurieren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anrufe starten, ohne andere in großen Gesprächen zu benachrichtigen. Du kannst einzelne Anrufbenachrichtigungen senden, sobald der Anruf begonnen hat.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatnachrichten senden, ohne die Empfänger zu benachrichtigen, für Fälle die nicht dringend sind", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis können jetzt automatisch vervollständigt werden, indem ein \":\" eingegeben wird", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Verknüpfe verschiedene Artikel mit dem neuen Smart-Picker, indem du ein \"/\" eingibst", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoren können jetzt Gruppenräume erstellen (erfordert das Hochleistungs-Backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Anrufe können jetzt aufgezeichnet werden (erfordert das Hochleistungs-Backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Unterhaltungen können nun einen Avatar oder ein Icon haben", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle Hintergründe sind nun zusätzlich zum verwischten Hintergrund in Video-Unterhaltungen möglich", + "- Reactions are now available during calls" : "- Reaktionen sind nun auch in Anrufen möglich", + "- Typing indicators show which users are currently typing a message" : "- Schreibindikatoren zeigen, welche Benutzer dabei sind, eine Nachricht zu schreiben", + "- Groups can now be mentioned in chats" : "- Gruppen können nun in Chats erwähnt werden", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Anrufaufnahmen werden automatisch transkribiert, wenn eine entsprechende Anbieterapp registriert ist", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatnachrichten können übersetzt werden, wenn eine Übersetzungsanbieter-App registriert ist", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kann jetzt in _Chat_nachrichten verwendet werden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "– Zur Implementierung von Bots stehen jetzt Webhooks zur Verfügung. Weitere Informationen findest du in der Dokumentation: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Lege eine Erinnerung für eine Chatnachricht fest, um später erneut benachrichtigt zu werden", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Verwende die **Notiz an mich**-Unterhaltung, um Notizen zu machen und Informationen zwischen deinen Geräten auszutauschen", + "- Captions allow to send a message with a file at the same time" : "- Untertitel ermöglichen das gleichzeitige Senden einer Nachricht mit einer Datei", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Das Video des Sprechers ist jetzt beim Teilen des Bildschirms sichtbar und die Anrufreaktionen sind animiert", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Nachrichten können jetzt 6 Stunden lang von angemeldeten Autoren und Moderatoren bearbeitet werden", + "- Unsent message drafts are now saved in your browser" : "- Nicht gesendete Nachrichtenentwürfe werden jetzt in Deinem Browser gespeichert-", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchats können jetzt im Verbund mit anderen Talk-Servern geführt werden", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoren können jetzt Konten und Gäste sperren, um zu verhindern, dass sie erneut an einer Unterhaltung teilnehmen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Anstehende Anrufe aus verknüpften Kalenderterminen und Abwesenheitsvertretungen werden jetzt in Unterhaltungen angezeigt", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Anrufe können jetzt im Verbund mit anderen Talk-Servern getätigt werden (erfordert das Hochleistungs-Backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Wir stellen den Nextcloud Talk Desktop-Client für Windows, macOS und Linux vor: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zusammenfassung von Anrufaufzeichnungen und ungelesenen Nachrichten in Chats mit dem Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Verbesserte Meetings mit Erkennung von Gästen, die über ihre E-Mail-Adresse eingeladen werden, Import von Teilnehmerlisten, Entwürfen für Umfragen und Herunterladen von Teilnehmerlisten der Anrufe", + "- Archive conversations to stay focused" : "- Archivieren von Gesprächen, um konzentriert zu bleiben", + "- Schedule a meeting into your calendar from within a conversation" : "- Eine Besprechung in deinem Kalender aus einer Unterhaltung heraus planen", + "- Search for messages of the current conversation directly in the right sidebar" : "- Nach Nachrichten der aktuellen Unterhaltung direkt in der rechten Seitenleiste suchen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Mit der neuen kompakten Liste siehst du mehr Unterhaltungen auf einen Blick (in den Gesprächseinstellungen aktivieren)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Besprechungsunterhaltungen werden jetzt mit dem Titel und der Beschreibung aus dem Kalender synchronisiert und mit einem Suchfilter ausgeblendet, bis sie kurz vor dem Beginn stehen", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Unterhaltungen in den Benachrichtigungseinstellungen als sensibel markieren, um den Inhalt der Nachricht aus der Unterhaltungsliste und den Benachrichtigungen auszublenden", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Um Push-Benachrichtigungen während \"Bitte nicht stören\" zu erhalten, markiere Unterhaltungen als wichtig", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Füge andere Teilnehmer zu einem Einzelgespräch hinzu, um im Handumdrehen ein neues Gruppengespräch zu erstellen.", + "- Use threads to keep your chat and discussions organized" : "- Themen verwenden, um deine Chats und Diskussionen zu organisieren", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-Transkriptionen sind jetzt während des Anrufs verfügbar (erfordert die Live-Transkriptions-ExApp und das Hochleistungs-Backend)", + "- Moderators can now pin messages so they are kept at the top" : "- die Moderation kann jetzt Nachrichten anheften, sodass diese oben bleiben", + "- Schedule a message to send it at a later time" : "- Den Versand einer Nachricht zu einem späteren Zeitpunkt planen", + "_All %n participant_::_All %n participants_" : ["Jeder %n Teilnehmer","Alle %n Teilnehmer"], + "Talk updates ✅" : "Talk Aktualisierungen ✅", + "Reaction deleted by author" : "Reaktion vom Autor gelöscht", + "{actor} created the conversation" : "{actor} hat die Unterhaltung erstellt", + "You created the conversation" : "Du hast die Unterhaltung erstellt", + "System created the conversation" : "Das System hat die Unterhaltung erstellt", + "An administrator created the conversation" : "Die Administration hat die Unterhaltung erstellt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du hast die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Die Administration hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "{actor} set the description" : "{actor} hat die Beschreibung gesetzt", + "You set the description" : "Du hast die Beschreibung gesetzt", + "An administrator set the description" : "Die Administration hat die Beschreibung gesetzt", + "{actor} removed the description" : "{actor} hat die Beschreibung entfernt", + "You removed the description" : "Du hast die Beschreibung entfernt", + "An administrator removed the description" : "Die Administration hat die Beschreibung entfernt", + "You started a silent call" : "Du hast einen stillen Anruf gestartet", + "Outgoing silent call" : "Ausgehender stiller Anruf", + "{actor} started a silent call" : "{actor} hat einen stillen Anruf gestartet", + "Incoming silent call" : "Ankommender stiller Anruf", + "You started a call" : "Du hast einen Anruf begonnen", + "Outgoing call" : "Ausgehender Anruf", + "{actor} started a call" : "{actor} hat einen Anruf begonnen", + "Incoming call" : "Eingehender Anruf", + "{actor} joined the call" : "{actor} ist dem Anruf beigetreten", + "You joined the call" : "Du bist dem Anruf beigetreten", + "{actor} left the call" : "{actor} hat den Anruf verlassen", + "You left the call" : "Du hast den Anruf verlassen", + "{actor} unlocked the conversation" : "{actor} hat die Unterhaltung freigegeben", + "You unlocked the conversation" : "Du hast die Unterhaltung freigegeben", + "An administrator unlocked the conversation" : "Die Administration hat die Unterhaltung freigegeben", + "{actor} locked the conversation" : "{actor} hat die Unterhaltung gesperrt", + "You locked the conversation" : "Du hast die Unterhaltung gesperrt", + "An administrator locked the conversation" : "Die Administration hat die Unterhaltung gesperrt", + "{actor} limited the conversation to the current participants" : "{actor} beschränkte das Gespräch auf die aktuellen Teilnehmer", + "You limited the conversation to the current participants" : "Du hast das Gespräch auf die aktuellen Teilnehmer beschränkt", + "An administrator limited the conversation to the current participants" : "Die Administration hat das Gespräch auf die aktuellen Teilnehmer beschränkt", + "{actor} opened the conversation to registered users" : "{actor} öffnete die Unterhaltung für registrierte Benutzer", + "You opened the conversation to registered users" : "Du hast die Unterhaltung für registrierte Benutzer geöffnet", + "An administrator opened the conversation to registered users" : "Die Administration hat die Unterhaltung für registrierte Benutzer geöffnet", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "You opened the conversation to registered users and users created with the Guests app" : "Du hast die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Die Administration hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "The conversation is now open to everyone" : "Die Unterhaltung ist nun für jeden geöffnet", + "{actor} opened the conversation to everyone" : "{actor} hat die Unterhaltung für jeden geöffnet", + "You opened the conversation to everyone" : "Du hast die Unterhaltung für Jedermann geöffnet", + "{actor} restricted the conversation to moderators" : "{actor} hat die Unterhaltung auf Moderatoren beschränkt", + "You restricted the conversation to moderators" : "Du hast die Unterhaltung auf Moderatoren beschränkt", + "{actor} started breakout rooms" : "{actor} hat Gruppenräume gestartet", + "You started breakout rooms" : "Du hast Gruppenräume gestartet.", + "{actor} stopped breakout rooms" : "{actor} hat Gruppenräume beendet", + "You stopped breakout rooms" : "Du hast Gruppenräume beendet", + "{actor} allowed guests" : "{actor} hat Gäste zugelassen", + "You allowed guests" : "Du hast Gäste zugelassen", + "An administrator allowed guests" : "Die Administration hat Gäste erlaubt", + "{actor} disallowed guests" : "{actor} hat Gäste untersagt", + "You disallowed guests" : "Du hast Gäste untersagt", + "An administrator disallowed guests" : "Die Administration hat den Gastzugriff untersagt", + "{actor} set a password" : "{actor} hat ein Passwort vergeben", + "You set a password" : "Du hast ein Passwort vergeben", + "An administrator set a password" : "Die Administration hat ein Passwort gesetzt", + "{actor} removed the password" : "{actor} hat das Passwort entfernt", + "You removed the password" : "Du hast das Passwort entfernt", + "An administrator removed the password" : "Die Administration hat das Passwort entfernt", + "{actor} added {user}" : "{actor} hat {user} hinzugefügt", + "You joined the conversation" : "Du bist der Unterhaltung beigetreten", + "{actor} joined the conversation" : "{actor} ist der Unterhaltung beigetreten", + "You added {user}" : "Du hast {user} hinzugefügt", + "{actor} added you" : "{actor} hat dich hinzugefügt", + "An administrator added you" : "Die Administration hat dich hinzugefügt", + "An administrator added {user}" : "Die Administration hat {user} hinzugefügt", + "You left the conversation" : "Du hast die Unterhaltung verlassen", + "{actor} left the conversation" : "{actor} hat die Unterhaltung verlassen", + "{actor} removed {user}" : "{actor} hat {user} entfernt", + "You removed {user}" : "Du hast {user} entfernt", + "{actor} removed you" : "{actor} hat dich entfernt", + "An administrator removed you" : "Die Administration hat dich entfernt", + "An administrator removed {user}" : "Die Administration hat {user} entfernt", + "{actor} invited {federated_user}" : "{actor} hat {federated_user} eingeladen", + "You invited {federated_user}" : "Du hast {federated_user} eingeladen", + "You accepted the invitation" : "Du hast diese Einladung angenommen", + "{actor} invited you" : "{actor} hat dich eingeladen", + "An administrator invited you" : "Die Administration hat dich eingeladen", + "An administrator invited {federated_user}" : "Die Administration hat {federated_user} eingeladen", + "{federated_user} accepted the invitation" : "{federated_user} hat die Einladung angenommen", + "{actor} removed {federated_user}" : "{actor} hat {federated_user} entfernt", + "You removed {federated_user}" : "Du hast {federated_user} entfernt", + "You declined the invitation" : "Du hast die Einladung abgelehnt", + "An administrator removed {federated_user}" : "Die Administration hat {federated_user} entfernt", + "{federated_user} declined the invitation" : "{federated_user} hat die Einladung abgelehnt", + "{actor} added group {group}" : "{actor} hat die Gruppe {group} hinzugefügt", + "You added group {group}" : "Du hast die Gruppe {group} hinzugefügt", + "An administrator added group {group}" : "Die Administration hat die Gruppe {group} hinzugefügt", + "{actor} removed group {group}" : "{actor} hat die Gruppe {group} entfernt", + "You removed group {group}" : "Du hast die Gruppe {group} entfernt", + "An administrator removed group {group}" : "Die Administration hat die Gruppe {group} entfernt", + "{actor} added team {circle}" : "{actor} hat das Team {circle} hinzugefügt", + "You added team {circle}" : "Du hast das Team {circle} hinzugefügt", + "An administrator added team {circle}" : "Die Administration hat das Team {circle} hinzugefügt", + "{actor} removed team {circle}" : "{actor} hat das Team {circle} entfernt", + "You removed team {circle}" : "Du hast das Team {circle} entfernt", + "An administrator removed team {circle}" : "Die Administration hat das Team {circle} entfernt", + "{actor} added {phone}" : "{actor} hat {phone} hinzugefügt", + "You added {phone}" : "Du hast {phone} hinzugefügt", + "An administrator added {phone}" : "Die Administration hat {phone} hinzgefügt", + "{actor} removed {phone}" : "{actor} hat {phone} entfernt", + "You removed {phone}" : "Du hast {phone} entfernt", + "An administrator removed {phone}" : "Die Administration hat {phone} entfernt", + "{actor} promoted {user} to moderator" : "{actor} hat {user} Moderationsrechte zugeteilt", + "You promoted {user} to moderator" : "Du hast {user} Moderationsrechte zugeteilt", + "{actor} promoted you to moderator" : "{actor} hat dir Moderationsrechte zugeteilt", + "An administrator promoted you to moderator" : "Die Administration hat dir Moderationsrechte zugeteilt", + "An administrator promoted {user} to moderator" : "Die Administration hat {user} Moderationsrechte zugeteilt", + "{actor} demoted {user} from moderator" : "{actor} hat {user} Moderationsrechte entzogen", + "You demoted {user} from moderator" : "Du hast {user} Moderationsrechte entzogen", + "{actor} demoted you from moderator" : "{actor} hat dir Moderationsrechte entzogen", + "An administrator demoted you from moderator" : "Die Administration hat dir Moderationsrechte entzogen", + "An administrator demoted {user} from moderator" : "Die Administration hat {user} Moderationsrechte entzogen", + "{actor} shared a file which is no longer available" : "{actor} hat eine Datei geteilt, die nicht mehr vorhanden ist", + "You shared a file which is no longer available" : "Du hast eine Datei geteilt, die nicht mehr vorhanden ist", + "File shares are currently not supported in federated conversations" : "Dateifreigaben werden bislang in federierten Unterhaltungen noch nicht unterstützt", + "The shared location is malformed" : "Der freigegebene Standort ist fehlerhaft", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} hat Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du hast Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "{actor} created thread {title}" : "{actor} hat das Thema {title} erstellt", + "You created thread {title}" : "Du hast das Thema {title} erstellt", + "{actor} renamed thread {title}" : "{actor} hat das Thema {title} umbenannt", + "You renamed thread {title}" : "Du hast das Thema {title} umbenannt", + "{actor} updated the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration aktualisiert", + "You updated the Matterbridge configuration" : "Du hast die Matterbridge-Konfiguration aktualisiert", + "{actor} removed the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration entfernt", + "You removed the Matterbridge configuration" : "Du hast die Matterbridge-Konfiguration entfernt", + "{actor} started Matterbridge" : "{actor} hat Matterbridge gestartet", + "You started Matterbridge" : "Du hast Matterbridge gestartet", + "{actor} stopped Matterbridge" : "{actor} hat Matterbridge angehalten", + "You stopped Matterbridge" : "Du hast Matterbridge angehalten", + "{actor} deleted a message" : "{actor} hat eine Nachricht gelöscht", + "You deleted a message" : "Du hast eine Nachricht gelöscht", + "{actor} edited a message" : "{actor} hat eine Nachricht bearbeitet", + "You edited a message" : "Du hast eine Nachricht bearbeitet", + "{actor} pinned a message" : "{actor} hat eine Nachricht angepinnt", + "You pinned a message" : "Du hast eine Nachricht angepinnt", + "{actor} unpinned a message" : "{actor} hat eine Nachricht gelöst", + "Message was automatically unpinned" : "Die Nachricht wurde automatisch gelöst.", + "You unpinned a message" : "Du hast eine Nachricht gelöst", + "{actor} deleted a reaction" : "{actor} hat eine Reaktion gelöscht", + "You deleted a reaction" : "Du hast eine Reaktion gelöscht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du hast den Ablauf der Nachricht auf %n Woche festgelegt.","Du hast den Ablauf der Nachricht auf %n Wochen festgelegt."], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du hast den Ablauf der Nachricht auf %n Tag festgelegt.","Du hast den Ablauf der Nachricht auf %n Tage festgelegt."], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du hast den Ablauf der Nachricht auf %n Stunde festgelegt.","Du hast den Ablauf der Nachricht auf %n Stunden festgelegt."], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du hast den Ablauf der Nachricht auf %n Minuten festgelegt.","Du hast den Ablauf der Nachricht auf %n Minuten festgelegt."], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} hat den Ablauf der Nachricht auf %n Woche festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Wochen festgelegt."], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} hat den Ablauf der Nachricht auf %n Tag festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Tage festgelegt."], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} hat den Ablauf der Nachricht auf %n Stunde festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Stunden festgelegt."], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt.","{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt."], + "{actor} disabled message expiration" : "{actor} hat den Ablauf von Nachrichten deaktiviert.", + "You disabled message expiration" : "Du hast den Ablauf von Nachrichten deaktiviert.", + "{actor} cleared the history of the conversation" : "{actor} hat den Gesprächsverlauf gelöscht", + "You cleared the history of the conversation" : "Du hast den Gesprächsverlauf gelöscht", + "{actor} set the conversation picture" : "{actor} hat das Unterhaltungsbild eingestellt", + "You set the conversation picture" : "Du hast das Unterhaltungsbild eingestellt", + "{actor} removed the conversation picture" : "{actor} hat das Unterhaltungsbild entfernt", + "You removed the conversation picture" : "Du hast das Unterhaltungsbild entfernt", + "{actor} ended the poll {poll}" : "{actor} hat die Umfrage {poll} beendet", + "You ended the poll {poll}" : "Du hast die Umfrage {poll} beendet", + "{actor} started the video recording" : "{actor} hat die Videoaufnahme gestartet.", + "You started the video recording" : "Du hast die Videoaufnahme gestartet.", + "{actor} stopped the video recording" : "{actor} hat die Videoaufnahme gestoppt.", + "You stopped the video recording" : "Du hast die Videoaufnahme gestoppt.", + "{actor} started the audio recording" : "{actor} hat die Audioaufnahme gestartet.", + "You started the audio recording" : "Du hast die Audioaufnahme gestartet.", + "{actor} stopped the audio recording" : "{actor} hat die Audioaufnahme gestoppt.", + "You stopped the audio recording" : "Du hast die Audioaufnahme gestoppt.", + "The recording failed" : "Aufnahme fehlgeschlagen", + "Someone voted on the poll {poll}" : "Jemand hat in der Umfrage {poll} abgestimmt", + "Message deleted by author" : "Nachricht vom Autor gelöscht", + "Message deleted by {actor}" : "Nachricht von {actor} gelöscht", + "Message deleted by you" : "Nachricht von dir gelöscht", + "Deleted user" : "Gelöschter Benutzer", + "Unknown number" : "Unbekannte Nummer", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (Gast) ", + "Missed call" : "Verpasster Anruf", + "Unanswered call" : "Unbeantworteter Anruf", + "Call ended (Duration {duration})" : "Anruf beendet (Dauer {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} hat den Anruf beendet (Dauer {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})","Anruf mit %n Gästen wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet (Dauer {duration})","Anruf mit %n Gästen wurde beendet (Dauer {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} hat den Anruf mit %n Gast beendet (Duration {duration})","{actor} hat den Anruf mit %n Gästen beendet (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} ended (Duration {duration})" : "Anruf mit {user1} beendet (Dauer {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} hat den Anruf mit {user1} beendet (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} and {user2} ended (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} hat den Anruf mit {user1} und {user2} beendet (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2} und {user3} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3} und {user4} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} beendet (Duration {duration})", + "Message of {user} in {conversation}" : "Nachricht von {user} in {conversation}", + "Message of {user}" : "Nachricht von {user}", + "Message of a deleted user in {conversation}" : "Nachricht eines gelöschten Benutzers in {conversation}", + "Talk conversations" : "Talk Unterhaltungen", + "Talk to %s" : "Mit %s sprechen", + "An error occurred. Please contact your administrator." : "Es ist ein Fehler aufgetreten. Bitte kontaktiere deine Administration.", + "App disabled" : "App deaktiviert", + "Conversation subfolders are disabled" : "Unterhaltungsunterordner sind deaktiviert", + "Storage quota exceeded" : "Speicherkontingent überschritten", + "Could not prepare conversation folder" : "Unterhaltungsordner konnten nicht vorbereitet werden", + "File not found" : "Datei nicht gefunden", + "Path must point to a file" : "Der Pfad muss auf eine Datei verweisen", + "File is not inside the conversation draft folder for this room" : "Die Datei befindet sich nicht im Unterhaltungsentwurfsordner für diesen Raum", + "File is not shared, or shared but not with the user" : "Datei ist nicht geteilt oder nicht mit dem Benutzer geteilt", + "No account available to delete." : "Kein Konto zum Löschen verfügbar.", + "Poll" : "Umfrage", + "Password needs to be set" : "Passwort muss festgelegt werden", + "Uploading the file failed" : "Hochladen der Datei fehlgeschlagen", + "No image file provided" : "Keine Bilddatei bereitgestellt", + "File is too big" : "Datei ist zu groß", + "Invalid file provided" : "Ungültige Datei bereitgestellt", + "Invalid image" : "Ungültiges Bild", + "Unknown filetype" : "Unbekannter Dateityp", + "Talk mentions" : "Talk Erwähnungen", + "More conversations" : "Weitere Unterhaltungen", + "Say hi to your friends and colleagues!" : "Begrüße deine Freunde und Kollegen!", + "No unread mentions" : "Keine ungelesenen Erwähnungen", + "Call in progress" : "Anruf ist aktiv", + "You were mentioned" : "Du wurdest erwähnt", + "Write to conversation" : "An eine Unterhaltung schreiben", + "Writes event information into a conversation of your choice" : "Schreibt Termininformationen an eine Unterhaltung deiner Wahl", + "Missing email field in header line" : "Fehlendes E-Mail-Feld in der Kopfzeile", + "Following lines are invalid: %s" : "Folgende Zeilen sind unzulässig: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s hat dich zur Unterhaltung \"%2$s\" eingeladen.", + "You were invited to conversation \"%s\"." : "Du wurdest zur Unterhaltung \"%s\" eingeladen.", + "Conversation invitation" : "Einladung zu einer Unterhaltung", + "Scheduled time" : "Geplante Zeit", + "Description" : "Beschreibung", + "You can also dial-in via phone with the following details" : "Du kannst dich auch per Telefon mit den folgenden Daten einwählen", + "Dial-in information" : "Einwahlinformationen", + "Meeting ID" : "Meeting-ID", + "Your PIN" : "Deine PIN", + "Click the button below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf den unten stehenden Link klicken.", + "Join lobby for \"%s\"" : "Lobby für \"%s\" beitreten", + "Click the button below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf den unten stehenden Link klicken.", + "Join \"%s\"" : "\"%s\" beitreten", + "Meeting" : "Meeting", + "Password request: %s" : "Passwortanforderung: %s", + "Private conversation" : "Private Unterhaltung", + "Deleted user (%s)" : "Gelöschter Benutzer (%s)", + "Failed to upload call recording" : "Anrufaufzeichnung konnte nicht hochgeladen werden", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Der Aufzeichnungsserver konnte die Aufzeichnung des Anrufs {call} nicht hochladen. Bitte wende dich an die Administration.", + "Share to chat" : "In Unterhaltung teilen", + "Dismiss notification" : "Benachrichtigung verwerfen", + "Call recording now available" : "Anrufaufzeichnung jetzt verfügbar", + "The recording for the call in {call} was uploaded to {file}." : "Aufnahme der Unterhaltung in {call} wurde als {file} hochgeladen.", + "Transcript now available" : "Transkript jetzt verfügbar", + "The transcript for the call in {call} was uploaded to {file}." : "Das Transkript für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to transcript call recording" : "Transkription der Anrufaufzeichnung fehlgeschlagen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht transkribieren. Bitte wende dich an die Administration.", + "Call summary now available" : "Anrufzusammenfassung ist jetzt verfügbar", + "The summary for the call in {call} was uploaded to {file}." : "Die Zusammenfassung für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to summarize call recording" : "Zusammenfassung der Anrufaufzeichnung fehlgeschlagen", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht zusammenfassen. Bitte wende Dich an die Administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} hat dich eingeladen dem {roomName} auf {remoteServer} beizutreten", + "Accept" : "Annehmen", + "Decline" : "Ablehnen", + "{user1} invited you to a federated conversation" : "{user1} hat dich zu einer Federated-Unterhaltung eingeladen", + "Someone reacted" : "Jemand hat reagiert", + "New message" : "Neue Nachricht", + "Reminder" : "Erinnerung", + "Someone mentioned you" : "Jemand hat dich erwähnt", + "Notification" : "Benachrichtigung", + "Someone reacted in a private conversation" : "Jemand hat in einer privaten Unterhaltung reagiert", + "You received a message in a private conversation" : "Du hast eine Nachricht in einer privaten Unterhaltung erhalten", + "Reminder in a private conversation" : "Erinnerung in einer privaten Unterhaltung", + "Someone mentioned you in a private conversation" : "Jemand hat dich in einer privaten Unterhaltung erwähnt", + "Notification in a private conversation" : "Benachrichtigung in einer privaten Unterhaltung", + "Reminder: You in {call}" : "Erinnerung: Du in {call}", + "Reminder: {user} in {call}" : "Erinnerung: {user} in {call}", + "Reminder: Deleted user in {call}" : "Erinnerung: Gelöschter Benutzer in {call}", + "Reminder: {guest} (guest) in {call}" : "Erinnerung: {guest} (Gast) in {call}", + "Reminder: Guest in {call}" : "Erinnerung: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reagierte mit {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagierte mit {reaction} in {call}\n ", + "Deleted user reacted with {reaction} in {call}" : "Gelöschter Benutzer reagierte mit {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (Gast) reagierte mit {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reagierte mit {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gelöschter Benutzer in {call}", + "{guest} (guest) in {call}" : "{guest} (Gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} hat dir eine private Nachricht gesendet", + "{user} sent a message in conversation {call}" : "{user} hat eine Nachricht in der Unterhaltung {call} gesendet", + "A deleted user sent a message in conversation {call}" : "Ein gelöschter Benutzer hat eine Nachricht in der Unterhaltung {call} gesendet", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) hat eine Nachricht in der Unterhaltung {call} gesendet", + "A guest sent a message in conversation {call}" : "Ein Gast hat eine Nachricht in der Unterhaltung {call} gesendet", + "{user} replied to your private message" : "{user} hat auf deine private Nachricht geantwortet", + "{user} replied to your message in conversation {call}" : "{user} hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "A deleted user replied to your message in conversation {call}" : "Ein gelöschter Benutzer hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "A guest replied to your message in conversation {call}" : "Ein Gast hat auf deine Nachricht in der Unterhaltung {call} geantwortet", + "Reminder: You in private conversation {call}" : "Erinnerung: Du in der privaten Unterhaltung {call}", + "Reminder: A deleted user in private conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der privaten Unterhaltung {call}", + "Reminder: {user} in private conversation" : "Erinnerung: {user} in einer privaten Unterhaltung", + "Reminder: You in conversation {call}" : "Erinnerung: Du in der Unterhaltung {call}", + "Reminder: {user} in conversation {call}" : "Erinnerung: {user} in der Unterhaltung {call}", + "Reminder: A deleted user in conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der Unterhaltung {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Erinnerung: {guest} (Gast) in der Unterhaltung {call}", + "Reminder: A guest in conversation {call}" : "Erinnerung: Ein Gast in der Unterhaltung {call}", + "{user} reacted with {reaction} to your private message" : "{user} hat mit {reaction} auf deine private Nachricht reagiert", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} hat mit {reaction} auf deiner Nachricht in der Unterhaltung {call} reagiert", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ein gelöschter Benutzer hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (Gast) hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ein Gast hat mit {reaction} auf deine Nachricht in der Unterhaltung {call} reagiert", + "{user} mentioned you in a private conversation" : "{user} hat dich in einer privaten Unterhaltung erwähnt", + "{user} mentioned group {group} in conversation {call}" : "{user} hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "{user} mentioned team {team} in conversation {call}" : "{user} hat das Team {team} in der Unterhaltung {call} erwähnt", + "{user} mentioned everyone in conversation {call}" : "{user} hat jeden in der Unterhaltung erwähnt {call}", + "{user} mentioned you in conversation {call}" : "{user} hat dich in einer Unterhaltung erwähnt: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ein gelöschter Benutzer hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned team {team} in conversation {call}" : "Ein gelöschter Benutzer hat das Team {team} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned everyone in conversation {call}" : "Ein gelöschter Benutzer hat jeden in der Unterhaltung {call} erwähnt", + "A deleted user mentioned you in conversation {call}" : "Ein gelöschter Benutzer hat dich in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) erwähnte die Gruppe {group} in der Unterhaltung {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (Gast) hat das Team {team} in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) hat jeden in der Unterhaltung {call} erwähnt ", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) hat dich in der Unterhaltung {call} erwähnt", + "A guest mentioned group {group} in conversation {call}" : "Ein Gast erwähnte die Gruppe {group} in der Unterhaltung {call}", + "A guest mentioned team {team} in conversation {call}" : "Ein Gast hat das Team {team} in der Unterhaltung {call} erwähnt", + "A guest mentioned everyone in conversation {call}" : "Ein Gast hat alle in der Unterhaltung {call} erwähnt", + "A guest mentioned you in conversation {call}" : "Ein Gast hat dich in der Unterhaltung {call} erwähnt", + "View message" : "Nachricht ansehen", + "Dismiss reminder" : "Erinnerung verwerfen", + "View chat" : "Chat anzeigen", + "{user} invited you to a group conversation: {call}" : "{user} hat dich zu einer Gruppenunterhaltung eingeladen: {call}", + "Join call" : "Anruf beitreten", + "Answer call" : "Anruf beantworten", + "{user} would like to talk with you" : "{user} möchte mit dir sprechen", + "Call back" : "Zurückrufen", + "You missed a call from {user}" : "Du hast einen Anruf von {user} verpasst", + "Accept call" : "Anruf annehmen", + "Incoming phone call from {call}" : "Eingehender Anruf von{call}", + "You missed a phone call from {call}" : "Du hast einen Anruf von {call} verpasst", + "A group call has started in {call}" : "Ein Gruppenanruf wurde in {call} gestartet", + "You missed a group call in {call}" : "Du hast einen Gruppenanruf in {call} verpasst", + "{email} is requesting the password to access {file}" : "{email} hat das Passwort für den Zugriff auf {file} angefordert", + "{email} tried to request the password to access {file}" : "{email} hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Someone is requesting the password to access {file}" : "Jemand hat das Passwort für den Zugriff auf {file} angefordert", + "Someone tried to request the password to access {file}" : "Jemand hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Open settings" : "Einstellungen öffnen", + "Hosted signaling server added" : "Gehosteter Signalisierungsserver hinzugefügt", + "The hosted signaling server is now configured and will be used." : "Der gehostete Signalisierungsserver ist jetzt konfiguriert und wird verwendet.", + "Hosted signaling server removed" : "Gehosteter Signalisierungsserver entfernt", + "The hosted signaling server was removed and will not be used anymore." : "Der gehostete Signalisierungsserver wurde entfernt und wird nicht mehr verwendet.", + "Hosted signaling server changed" : "Gehosteter Signalisierungsserver geändert", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Das gehostete Konto des Signalisierungsservers hat den Status von \"{oldstatus}\" in \"{newstatus}\" geändert.", + "pending" : "Ausstehend", + "active" : "Aktiv", + "expired" : "Abgelaufen", + "blocked" : "Blockiert", + "error" : "Fehler", + "The certificate of {host} expires in {days} days" : "Das Zertifikat von {host} läuft in {days} Tagen ab", + "The certificate of {host} expired" : "Das Zertifikat von {host} ist abgelaufen", + "Contact via Talk" : "Über Talk kontaktieren", + "Open Talk" : "Talk öffnen", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Nachrichten senden, Themen erstellen und Sprach- sowie und Videoanrufe starten.", + "Presentation" : "Präsentation", + "Voice room" : "Sprachraum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Direkt am Anruf teilnehmen, ideal für Nachholtermine oder spontane Treffen.", + "Webinar" : "Webinar", + "Conversations" : "Unterhaltungen", + "Messages in current conversation" : "Nachrichten in der aktuellen Unterhaltung", + "{user}" : "{user}", + "Messages" : "Nachrichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Nachrichten in anderen Unterhaltungen", + "One-to-one rooms always need to show the other users avatar" : "Eins-zu-Eins-Räume müssen immer den Avatar des anderen Benutzers anzeigen", + "Invalid emoji character" : "Ungültiges Emoji-Zeichen", + "Invalid background color" : "Ungültige Hintergrundfarbe", + "Avatar image is not square" : "Benutzerbild ist nicht quadratisch", + "Room {number}" : "Raum {number}", + "Other" : "Sonstiges", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Testserver nicht erreichbar ist. Bitte versuche es später noch einmal.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Problem bei der Authentifizierung dieser Instanz aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Something unexpected happened." : "Es ist etwas Unerwartetes passiert.", + "The URL is invalid." : "Die URL ist ungültig", + "An HTTPS URL is required." : "Eine HTTPS-URL ist erforderlich.", + "The email address is invalid." : "Die E-Mail-Adresse ist ungültig.", + "The language is invalid." : "Die Sprache ist ungültig.", + "The country is invalid." : "Das Land ist ungültig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Es gibt ein Problem mit dem Anfrage für den Trial-Test. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are send from your servers address. Please try again later." : "Es werden zu viele Anfragen von deiner Serveradresse aus gesendet. Bitte später noch einmal versuchen.", + "There is already a trial registered for this Nextcloud instance." : "Für diese Nextcloud-Instanz ist bereits eine Trial-Testversion registriert.", + "Something unexpected happened. Please try again later." : "Es ist etwas Unerwartetes passiert. Bitte später erneut versuchen.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Trial-Testserver sich falsch verhalten hat. Bitte versuche es später noch einmal.", + "Trial requested but failed to get account information. Please check back later." : "Trial-Testversion angefordert, aber keine Kontoinformationen erhalten. Bitte versuche es später erneut.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Es ist ein Problem bei der Authentifizierung dieser Anfrage aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Das Abrufen von Kontoinformationen ist fehlgeschlagen, weil sich der Trial-Server falsch verhalten hat. Bitte später noch einmal versuchen.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Beim Abrufen der Kontoinformationen ist ein Problem aufgetreten. Bitte überprüfe deine Protokolldateien für weitere Informationen.", + "There is no such account registered." : "Ein solches Konto ist nicht registriert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontoinformationen konnten nicht abgerufen werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuche es später erneut.", + "Deleting the hosted signaling server account failed. Please check back later." : "Fehler beim Löschen des Singnalisierungsserver-Kontos. Bitte versuche es später erneut.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Konto konnte nicht gelöscht werden, da sich der Trial-Testserver falsch verhalten hat. Bitte versuche es später erneut.", + "There is a problem with deleting the account. Please check your logs for further information." : "Es gibt ein Problem mit dem Löschen des Kontos. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are sent from your servers address. Please try again later." : "Es wurden zu viele Anfragen von deiner Serveradresse gesendet. Bitte versuche es später noch einmal.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Konto konnte nicht gelöscht werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuche es später erneut.", + "Note to self" : "Notiz an mich", + "A place for your private notes, thoughts and ideas" : "Ein Platz für deine privaten Notizen, Gedanken und Ideen", + "Transcript is AI generated and may contain mistakes" : "Das Transkript wird von KI generiert und kann Fehler enthalten", + "Summary is AI generated and may contain mistakes" : "Die Zusammenfassung wird von KI generiert und kann Fehler enthalten", + "Let's get started!" : "Los geht's!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ist eine sichere, selbst gehostete Kommunikationsplattform, die sich nahtlos in das Nextcloud-Ökosystem integriert.\n\n#### Hauptmerkmale von Nextcloud Talk:\n\n* Chat und Messaging in privaten und Gruppenchats\n* Sprach- und Videoanrufe\n* Dateifreigabe und Integration mit anderen Nextcloud-Apps\n* Anpassbare Gesprächseinstellungen, Moderation und Datenschutzkontrollen\n* Web, Desktop und Mobile (iOS und Android)\n* Private & sichere Kommunikation\n\n Erfahre mehr in der [Benutzerdokumentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Willkommen bei Nextcloud Talk\n\nNextcloud Talk ist eine private und leistungsstarke Messaging-App, die mit Nextcloud integriert ist. Chatte in privaten oder Gruppenunterhaltungen, arbeite über Sprach- und Videoanrufe zusammen, organisiere Webinare und Veranstaltungen, passe deine Unterhaltungen an und vieles mehr.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Texte formatieren, um aussagekräftige Nachrichten zu erstellen\n\nIn Nextcloud Talk kannst du die Markdown-Syntax verwenden, um deine Nachrichten zu formatieren. Du kannst zum Beispiel **fett** oder *kursiv* formatieren oder `Texte als Code hervorheben`. Du kannst sogar Tabellen erstellen und Überschriften zu deinem Text hinzufügen.\n\nMöchtest du einen Tippfehler korrigieren oder die Formatierung ändern? Bearbeite deine Nachricht, indem du im Nachrichtenmenü auf \"Nachricht bearbeiten\" klickst.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Anhänge und Links hinzufügen\n\nFüge Dateien aus deinem Nextcloud Hub über die Schaltfläche \"+\" hinzu. Teile Elemente aus Dateien und verschiedenen Nextcloud-Apps. Einige Apps unterstützen sogar interaktive Widgets, z. B. die Text-App.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lass den Unterhaltungen ihren Lauf: Erwähne Nutzer, reagiere auf Nachrichten und mehr\n\nDu kannst alle Teilnehmer einer Unterhaltung mit %s erwähnen oder bestimmte Teilnehmer erwähnen, indem du \"@\" eingibst und ihren Namen aus der Liste auswählst.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Du kannst auf Nachrichten antworten, sie an andere Chats und Personen weiterleiten oder Nachrichteninhalte kopieren.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Mehr tun mit Smart Picker\n\nGib einfach \"/\" ein oder wähle das Menü \"+\", um den Smart Picker zu öffnen, mit dem du verschiedene Inhalte an deine Nachrichten anhängen kannst. Du kannst den Smart Picker so konfigurieren, dass du Elemente aus Nextcloud-Apps, GIFs, Kartenpositionen, KI-generierte Inhalte und vieles mehr hinzufügen kannst.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gesprächseinstellungen verwalten\n\nIm Menü \"Unterhaltung\" kannst du auf verschiedene Einstellungen zur Verwaltung deiner Unterhaltungen zugreifen, wie z. B.:\n* Unterhaltungsinformationen bearbeiten\n* Verwalten von Benachrichtigungen\n* Zahlreiche Moderationsregeln anwenden\n* Zugang und Sicherheit konfigurieren\n* Aktivieren von Bots\n* und mehr!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Vereinigte Arabische Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua und Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentinien", + "American Samoa" : "Amerikanisch-Samoa", + "Austria" : "Österreich", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Inseln", + "Azerbaijan" : "Aserbaidschan", + "Bosnia and Herzegovina" : "Bosnien und Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesch", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivien", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saba und Sint Eustatius", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetinsel", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosinseln", + "Congo, the Democratic Republic of the" : "Kongo (Demokratische Republik)", + "Central African Republic" : "Zentralafrikanische Republik", + "Congo" : "Kongo", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbeinküste", + "Cook Islands" : "Cookinseln", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "China", + "Colombia" : "Kolumbien", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Weihnachtsinsel", + "Cyprus" : "Zypern", + "Czechia" : "Tschechien", + "Germany" : "Deutschland", + "Djibouti" : "Dschibuti", + "Denmark" : "Dänemark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanische Republik", + "Algeria" : "Algerien", + "Ecuador" : "Ekuador", + "Estonia" : "Estland", + "Egypt" : "Ägypten", + "Western Sahara" : "Westsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Äthiopien", + "Finland" : "Finnland", + "Fiji" : "Fidschi", + "Falkland Islands (Malvinas)" : "Falklandinseln", + "Micronesia, Federated States of" : "Mikronesien, Föderierte Staaten", + "Faroe Islands" : "Färöer", + "France" : "Frankreich", + "Gabon" : "Gabun", + "United Kingdom of Great Britain and Northern Ireland" : "Vereinigtes Königreich Großbritannien und Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Französisch-Guinea", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Äquatorialguinea", + "Greece" : "Griechenland", + "South Georgia and the South Sandwich Islands" : "Südgeorgien und die Südlichen Sandwichinseln", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard und die McDonaldinseln", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisches Territorium im Indischen Ozean", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodscha", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "St. Kitts und Nevis", + "Korea, Democratic People's Republic of" : "Nordkorea", + "Korea, Republic of" : "Korea, Republik", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaimaninseln", + "Kazakhstan" : "Kasachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldawien (Republik)", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "St. Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallinseln", + "North Macedonia" : "Nordmazedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolei", + "Macao" : "Macau", + "Northern Mariana Islands" : "Nördliche Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Neukaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsel", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niederlande", + "Norway" : "Norwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Neuseeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Französisch-Polynesien", + "Papua New Guinea" : "Papua-Neuguinea", + "Philippines" : "Philippinen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre und Miquelon", + "Pitcairn" : "Pitcairninseln", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palästina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russland", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabien", + "Solomon Islands" : "Salomonen", + "Seychelles" : "Seychellen", + "Sudan" : "Sudan", + "Sweden" : "Schweden", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "St. Helena, Ascension und Tristan da Cunha", + "Slovenia" : "Slowenien", + "Svalbard and Jan Mayen" : "Spitzbergen und Jan Mayen", + "Slovakia" : "Slowakei", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Südsudan", + "Sao Tome and Principe" : "São Tomé und Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrien", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- und Caicosinseln", + "Chad" : "Tschad", + "French Southern Territories" : "Französische Süd- und Antarktisgebiete", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadschikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Osttimor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Türkei", + "Trinidad and Tobago" : "Trinidad und Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansania", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "Vereinigte Staaten von Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikanstadt", + "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jungferninseln (britisch)", + "Virgin Islands, U.S." : "Jungferninseln, U.S.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis und Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Südafrika", + "Zambia" : "Sambia", + "Zimbabwe" : "Simbabwe", + "Background blur" : "Hintergrund verwischt", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Es konnte nicht geprüft werden, ob WASM-Ladeunterstützung verfügbar ist. Bitte prüfe manuell, ob dein Webserver `.wasm`-Dateien bereitstellt.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Dein Webserver ist nicht richtig eingerichtet, um `.wasm`-Dateien auszuliefern. Dies ist normalerweise ein Problem mit der Nginx-Konfiguration. Für die Hintergrundunschärfe muss eine Anpassung vorgenommen werden, um auch `.wasm`-Dateien auszuliefern. Vergleiche deine Nginx-Konfiguration mit der empfohlenen Konfiguration in unserer Dokumentation.", + "Talk configuration values" : "Talk Einstellungswerte", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Das Erzwingen einer Anrufdauer wird nur mit System-Cron unterstützt. Bitte aktiviere System-Cron oder entferne die Konfiguration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-Werte (derzeit auf %d) sind aufgrund technischer Beschränkungen nicht durchsetzbar. Die Hintergrundaufgabe wird nur alle 5 Minuten ausgeführt, die Verwendung erfolgt also auf eigene Gefahr.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es wird dringend empfohlen, \"memcache.locking\" einzurichten, wenn Talk-Federation aktiviert ist.", + "High-performance backend" : "Hochleistungs-Backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Kein Hochleistungs-Backend konfiguriert – Ohne das Hochleistungs-Backend skaliert es nur für kleinere Meetings (max. 2–3 Teilnehmer). Bitte richte das Hochleistungs-Backend ein, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Die Ausführung des Hochleistungs-Backends im Modus \"conversation_cluster\" ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Das Hochleistungs-Backend unterstützt heutzutage echtes Clustering, das stattdessen verwendet werden sollte.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Das Definieren mehrerer Hochleistungs-Backends ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Stattdessen sollte ein Load Balancer zusammen mit geclusterten Signalservern eingerichtet und in den Talk-Einstellungen konfiguriert werden.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Der gespeicherte öffentliche Schlüssel für den verwendeten Algorithmus %1$s stimmt nicht mit dem gespeicherten privaten Schlüssel überein. %2$s ausführen, um das Problem zu beheben.", + "High-performance backend not configured correctly. Run %s for details." : "Hochleistungs-Backend nicht richtig konfiguriert. Für Einzelheiten %s ausführen.", + "High-performance backend not configured correctly" : "Hochleistungs-Backend nicht richtig konfiguriert", + "Error: Cannot connect to server" : "Fehler: Kann nicht zum Server verbinden", + "Error: Server did not respond with proper JSON" : "Fehler: Server hat nicht mit korrektem JSON geantwortet", + "Error: Certificate expired" : "Fehler: Zertifikat ist abgelaufen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Hochleistungs-Backend-Servers sind nicht synchron. Bitte stelle sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisiere ihre Zeit manuell.", + "Could not get version" : "Version kann nicht abgerufen werden", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fehler: Aktuelle Version: {version}; Server muss aktualisiert werden, um mit dieser Version von Talk kompatibel zu sein", + "Error: Server responded with: {error}" : "Fehler: Der Server antwortete mit: {error}", + "Error: Unknown error occurred" : "Fehler: Ein unbekannter Fehler ist aufgetreten", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Achtung: Laufende Version: {version}; Der Server unterstützt nicht alle Funktionen dieser Talk-Version, fehlende Funktionen: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen Speichercache zu konfigurieren, wenn Nextcloud Talk mit einem Hochleistungs-Backend ausgeführt wird.", + "Client Push" : "Client-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push ist installiert, dies verbessert die Rechtzeitigkeit von Talk-Benachrichtigungen.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} ist nicht installiert. Dies kann zu verzögerten Talk-Benachrichtigungen führen.", + "Recording backend" : "Aufzeichnungs-Backend", + "Using the recording backend requires a High-performance backend." : "Die Verwendung des Aufzeichnungs-Backends erfordert ein Hochleistungs-Backend.", + "No recording backend configured" : "Kein Aufzeichnungs-Backend konfiguriert", + "SIP configuration" : "SIP-Konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Die Nutzung der SIP-Funktionalität erfordert ein Hochleistungs-Backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Zugewiesene Talk-Telefonnummern dürfen nicht mit + oder 0 beginnen. Bitte die folgenden Nummern entfernen oder aktualisieren:\n{list}", + "No SIP backend configured" : "Kein SIP-Backend konfiguriert", + "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, Zulässiges Datumsformat: JJJJ-MM-TT", + "Conversation not found" : "Unterhaltung nicht gefunden", + "Path is already shared with this conversation" : "Der Pfad wurde bereits mit dieser Unterhaltung geteilt", + "Chat, video & audio-conferencing using WebRTC" : "Chat, Video & Audio-Konferenzen mittels WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, Video- und Audiokonferenzen mit WebRTC\n\n* 💬 **Chat** Nextcloud Talk verfügt über einen einfachen Text-Chat, in dem du Dateien über deine Nextcloud Dateien-App oder dein lokales Gerät teilen oder hochladen und andere Teilnehmende erwähnen kannst.\n* 👥 **Private, Gruppen-, öffentliche und passwortgeschützte Anrufe!** Lade jemanden oder eine ganze Gruppe ein oder sende einen öffentlichen Link, um zu einem Anruf einzuladen.\n* 🌐 **Federierte Chats** Chatte mit anderen Nextcloud-Benutzern über deren Server\n* 💻 **Bildschirmfreigabe!** Teile deinen Bildschirm mit den Teilnehmern deiner Unterhaltung.\n* 🚀 **Integration mit anderen Nextcloud-Apps** wie Dateien, Kalender, Benutzerstatus, Dashboard, Flow, Karten, Smart Picker, Kontakte, Deck und viele mehr.\n* 🌉 **Mit anderen Chat-Lösungen synchronisieren** Durch die Integration von [Matterbridge](https://github.com/42wim/matterbridge/) in Talk kannst du viele andere Chat-Lösungen ganz einfach mit Nextcloud Talk und umgekehrt synchronisieren.", + "Leave call" : "Anruf verlassen", + "Navigating away from the page will leave the call in {conversation}" : "Bei verlassen der Seite, wird der Anruf in {conversation} beendet", + "Stay in call" : "Beim Anruf bleiben", + "Error occurred when getting the conversation information" : "Fehler beim Abrufen der Unterhaltungsinformationen ", + "Discuss this file" : "Diese Datei besprechen", + "Share this file with others to discuss it" : "Teile diese Datei, um sie mit anderen zu besprechen", + "Share this file" : "Diese Datei teilen", + "Join conversation" : "Unterhaltung beitreten", + "This conversation is password-protected." : "Diese Unterhaltung ist passwortgeschützt.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Es wurden mehrere ungültige Passworteingaben von deiner IP-Adresse festgestellt. Daher wird die nächste Anmeldung um 30 Sekunden verzögert.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte erneut versuchen.", + "Password" : "Passwort", + "Submit" : "Übermitteln", + "Error requesting the password." : "Fehler bei der Passwortanforderung", + "Request password" : "Passwort anfordern", + "This conversation has ended" : "Diese Unterhaltung wurde beendet", + "Error occurred when joining the conversation" : "Es ist ein Fehler beim Beitritt zur Unterhaltung aufgetreten.", + "Close Talk sidebar" : "Talk-Seitenleiste schließen", + "Open Talk sidebar" : "Talk-Seitenleiste öffnen", + "Everyone" : "Jeder", + "Users and moderators" : "Benutzer und Moderatoren", + "Moderators only" : "Nur Moderatoren", + "Disable calls" : "Anrufe deaktivieren", + "Save changes" : "Änderungen speichern", + "Saving …" : "Speichern …", + "Saved!" : "Gespeichert!", + "Limit to groups" : "Auf Gruppen beschränken", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, so können nur Personen von den aufgelisteten Gruppen an den Unterhaltungen teilnehmen.", + "Guests can still join public conversations." : "Gäste können nach wie vor öffentlichen Unterhaltungen beitreten.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Benutzer, welche Talk nicht mehr nutzen können, werden weiterhin als Teilnehmer ihrer früheren Unterhaltungen aufgelistet. Chatnachrichten werden ebenfalls aufbewahrt.", + "Limit using Talk" : "Beschränkung bei der Nutzung von Talk", + "Limit creating a public and group conversation" : "Beschränkung für das Erstellen von öffentlichen und Gruppenunterhaltungen", + "Limit creating conversations" : "Beschränkung beim Erstellen von Unterhaltungen", + "Limit starting a call" : "Starten von Anrufen begrenzen", + "Limit starting calls" : "Beschränkung beim Anrufaufbau", + "When a call has started, everyone with access to the conversation can join the call." : "Nachdem eine Unterhaltung gestartet wurde, kann jeder, der Zugriff auf die Unterhaltung hat, dieser beitreten", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Die folgenden Bots sind auf diesem Server installiert. In der Dokumentation findest du Einzelheiten zum {linkstart1}Erstellen deines eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die du auf deinem Server aktivieren kannst.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Auf diesem Server sind keine Bots installiert. In der Dokumentation findest du Einzelheiten zum {linkstart1}Erstellen deines eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die du auf deinem Server aktivieren kannst.", + "Description is not provided" : "Keine Beschreibung vorhanden", + "Locked for moderators" : "Gesperrt für Moderatoren", + "Enabled" : "Aktiviert", + "Disabled" : "Deaktiviert", + "Bots settings" : "Bots-Einstellungen", + "State" : "Status", + "Name" : "Name", + "Last error" : "Letzter Fehler", + "Total errors count" : "Gesamtzahl an Fehlern", + "Find more bots" : "Weitere Bots finden", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Vertrauenswürdige Server können auf der {linkstart}Einstellungsseite für Freigaben{linkend} konfiguriert werden.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated Chats und Anrufe funktionieren bereits. Die Verwaltung von Anhängen ist für eine spätere Version geplant.", + "Enable Federation in Talk app" : "Federation in der Talk-App aktivieren", + "Permissions" : "Berechtigungen", + "Allow users to be invited to federated conversations" : "Benutzern erlauben, zu federierten Unterhaltungen eingeladen zu werden.", + "Allow users to invite federated users into conversation" : "Benutzern erlauben, federierte Benutzer zu Unterhaltungen einzuladen.", + "Only allow to federate with trusted servers" : "Nur erlauben, mit vertrauenswürdigen Servern zu federieren", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen der aufgelisteten Gruppen federierte Benutzer zu Unterhaltungen einladen.", + "Groups allowed to invite federated users" : "Gruppen, die berechtigt sind, federierte Konten einzuladen", + "Select groups …" : "Gruppen auswählen …", + "All messages" : "Alle Nachrichten", + "@-mentions only" : "Nur @-Erwähnungen", + "Off" : "Aus", + "General settings" : "Allgemeine Einstellungen", + "Default notification settings" : "Standard Benachrichtigungseinstellungen", + "Default group notification" : "Standard Gruppenbenachrichtigung", + "Default group notification for new groups" : "Standard Gruppenbenachrichtigung für neue Gruppen", + "Integration into other apps" : "Einbindung in andere Apps", + "Allow conversations on files" : "Alle Unterhaltungen zu Dateien", + "Allow conversations on public shares for files" : "Alle Unterhaltungen in öffentlichen Freigaben zu Dateien", + "End-to-end encrypted calls" : "Ende-zu-Ende-verschlüsselte Anrufe", + "Enable encryption" : "Verschlüsselung aktivieren", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Für Ende-zu-Ende-verschlüsselte Anrufe mit einer konfigurierten SIP-Brücke ist eine neuere Version des Hochleistungs-Backends und der SIP-Bridge erforderlich.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile Clients unterstützen derzeit Ende-zu-Ende-verschlüsselte Anrufe nicht.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Durch Anklicken des obigen Buttons werden die Angaben im Formular an die Server der Struktur AG geschickt. Weitere Informationen hierzu gibt es unter {linkstart}spreed.eu{linkend}.", + "Pending" : "Ausstehend", + "Error" : "Fehler", + "Blocked" : "Blockiert", + "Active" : "Aktiv", + "Expired" : "Abgelaufen", + "Never" : "Niemals", + "The trial could not be requested. Please try again later." : "Der Test konnte nicht angefordert werden. Bitte versuche es später noch einmal.", + "The account could not be deleted. Please try again later." : "Konto konnte nicht gelöscht werden. Bitte später erneut versuchen.", + "Hosted High-performance backend" : "Gehostetes Hochleistungs-Backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Unser Partner Struktur AG bietet einen Dienst an, bei dem ein gehosteter Signalisierungsserver angefordert werden kann. Dazu brauchst du nur das untenstehende Formular auszufüllen und deine Nextcloud wird ihn anfordern. Sobald der Server für dich eingerichtet ist, werden die Anmeldedaten automatisch ausgefüllt. Dadurch werden die bestehenden Einstellungen des Signalisierungsservers überschrieben.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Wenn dein Hochleistungs-Backend-Konto STUN- und/oder TURN-Funktionen enthält, werden die Einstellungen entsprechend aktualisiert.", + "URL of this Nextcloud instance" : "URL dieser Nextcloud-Installation", + "Full name of the user requesting the trial" : "Vollständiger Name des Benutzers, der die Testversion anfordert", + "Email of the user" : "E-Mail-Adresse des Benutzers", + "Language" : "Sprache", + "Country" : "Land", + "Request signaling server trial" : "Testversion des Signalisierungsservers anfordern", + "You can see the current status of your hosted signaling server in the following table." : "Den aktuellen Status deines gehosteten Signalisierungsservers siehst du in der folgenden Tabelle.", + "Status" : "Status", + "Created at" : "Erstellt am", + "Expires at" : "Läuft ab am", + "Limits" : "Beschränkungen", + "STUN included" : "STUN inklusive", + "Yes" : "Ja", + "No" : "Nein", + "TURN included" : "TURN inklusive", + "Delete the signaling server account" : "Signalisierungsserver-Konto löschen", + "_%n user_::_%n users_" : ["%n Benutzer","%n Benutzer"], + "Installed version: {version}" : "Installierte Version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kannst Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuche deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installiere sie bitte manuell über den {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge-Binärdatei hat falsche Berechtigungen. Bitte sicher stellen, dass die Matterbridge-Binärdatei dem richtigen Benutzer gehört und ausgeführt werden kann. Sie befindet sich unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder konnte nicht ausgeführt werden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kannst den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen findest du in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", + "Downloading …" : "Herunterladen …", + "Install Talk Matterbridge" : "Talk-Matterbridge installieren", + "An error occurred while installing the Matterbridge app" : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Es ist ein Fehler bei der Installation von Talk Matterbridge aufgetreten. Bitte installiere es manuell.", + "Failed to execute Matterbridge binary." : "Matterbridge-Binärdatei konnte nicht ausgeführt werden.", + "Matterbridge integration" : "Matterbridge-Einbindung", + "Enable Matterbridge integration" : "Matterbridge-Einbindung aktivieren", + "Status: Checking connection" : "Status: Prüfe die Verbindung", + "OK: Running version: {version}" : "OK: Laufende Version: {version}", + "Error: Server seems to be a Signaling server" : "Fehler: Der Server scheint ein Signalisierungsserver zu sein", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Aufnahme-Backend-Servers sind nicht synchron. Bitte sicherstellen, dass beide Server mit einem Zeitserver verbunden sind oder synchronisiere die Zeit manuell.", + "Recording backend URL" : "URL für Aufzeichnungs-Backend", + "Validate SSL certificate" : "SSL-Zertifikat überprüfen", + "Delete this server" : "Diesen Server löschen", + "Test this server" : "Diesen Server testen", + "Disabled for all calls" : "Für alle Anrufe deaktiviert", + "Enabled for all calls" : "Für alle Anrufe aktiviert", + "Configurable on conversation level by moderators" : "Konfigurierbar auf Unterhaltungsebene durch Moderatoren", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Die PHP-Einstellungen \"upload_max_filesize\" oder \"post_max_size\" erlauben nur das Hochladen von Dateien bis zu {maxUpload}.", + "Recording backend settings saved" : "Aufzeichnungs-Backend Einstellungen gespeichert", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoren können die Zustimmung auf Unterhaltungsebene aktivieren. Die Einwilligung zur Aufzeichnung ist für jeden Teilnehmer vor der Teilnahme an der Unterhaltung erforderlich.", + "The consent to be recorded will be required for each participant before joining every call." : "Vor der Teilnahme an einer Unterhaltung ist für jeden Teilnehmer die Einwilligung zur Aufzeichnung erforderlich.", + "The consent to be recorded is not required." : "Eine Einwilligung zur Aufzeichnung ist nicht erforderlich.", + "Recording backend configuration is only possible with a High-performance backend." : "Aufzeichnungs-Backend-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Add a new recording backend server" : "Einen neuen Aufzeichnungs-Backend-Server hinzufügen", + "Shared secret" : "Gemeinsames Geheimnis", + "Recording consent" : "Zustimmung zur Aufzeichnung", + "Recording transcription" : "Aufnahme-Transskription", + "Automatically transcribe call recordings with a transcription provider" : "Automatisches Transkribieren von Gesprächsaufzeichnungen mit einem Transkriptionsanbieter", + "Automatically summarize call recordings with transcription and summary providers" : "Automatisches Zusammenfassen von Anrufaufzeichnungen mit Transkriptions- und Zusammenfassungsanbietern", + "SIP configuration saved!" : "SIP-Konfiguration gespeichert!", + "SIP configuration is only possible with a High-performance backend." : "SIP-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Enable SIP Dial-out option" : "SIP-Anrufen-Option aktivieren", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Der Signalisierungsserver muss auf die unterstützte SIP-Anrufen-Funktion aktualisiert werden.", + "Do not show SIP Dial-out caller number" : "Abgehend die eigene Rufnummer nicht anzeigen", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Die anonyme Nummer sollte als \"unbekannte\" oder \"unterdrückte Nummer\" angezeigt werden, um den Empfänger anzurufen", + "Dial-out number" : "Ausgehende Telefonnummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formatierte Nummer, die als Fallback-Rufnummer für ausgehende Anrufe verwendet wird", + "Dial-out prefix" : "Vorwahl für ausgehende Anrufe", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Präfix zur eingestellten Rufnummer für ausgehende Anrufe (Standard ist `+`)", + "Restrict SIP configuration" : "SIP-Konfiguration einschränken", + "Enable SIP configuration" : "SIP-Konfiguration aktivieren", + "Only users of the following groups can enable SIP in conversations they moderate" : "Nur Benutzer der folgenden Gruppen können SIP in von ihnen moderierten Unterhaltungen aktivieren", + "Phone number (Country)" : "Telefonnummer (Land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Diese Informationen werden sowohl in Einladungs-E-Mails versandt als auch in der Seitenleiste für alle Teilnehmer angezeigt.", + "Nextcloud base URL" : "Nextcloud-Basis-URL", + "Talk Backend URL" : "Talk-Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Verfügbare Funktionen", + "Error: Websocket connection failed" : "Fehler: Websocket-Verbindung fehlgeschlagen", + "Error code" : "Fehlercode", + "Error message" : "Fehlermeldung", + "Error: Websocket connection failed. Check browser console" : "Fehler: Websocket-Verbindung fehlgeschlagen. Browser-Konsole überprüfen", + "High-performance backend URL" : "Hochleistungs-Backend-URL", + "Missing High-performance backend warning hidden" : "Warnung zu fehlendem Hochleistungs-Backend ausgeblendet", + "High-performance backend settings saved" : "Hochleistungs-Backend Einstellungen gespeichert", + "Nextcloud Talk setup not complete" : "Einrichtung von Nextcloud Talk nicht abgeschlossen", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Bitte beachten, dass bei Meetings mit mehr als 2 Teilnehmern ohne das Hochleistungs-Backend höchstwahrscheinlich Verbindungsprobleme auftreten und die teilnehmenden Geräte stark belastet werden.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Das Hochleistungs-Backend installieren, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Nextcloud portal" : "Nextcloud Portal", + "Quick installation guide" : "Kurzanleitung zur Installation", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Das Hochleistungs-Backend ist für Anrufe und Unterhaltungen mit mehreren Teilnehmern erforderlich. Ohne das Backend müssen alle Teilnehmer ihr eigenes Video für jeden anderen Teilnehmer einzeln hochladen, was höchstwahrscheinlich zu Verbindungsproblemen und einer hohen Belastung der teilnehmenden Geräte führt.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen verteilten Cache einzurichten, wenn du Nextcloud Talk mit einem Hochleistungs-Backend verwendest.", + "Add High-performance backend server" : "Hochleistungs-Backend-Server hinzufügen", + "Warn about connectivity issues in calls with more than 2 participants" : "Vor Verbindungsproblemen bei Anrufen mit mehr als 2 Teilnehmern warnen", + "STUN server URL" : "STUN-Server-URL", + "The server address is invalid" : "Die Serveradresse ist ungültig.", + "STUN settings saved" : "STUN-Einstellungen gespeichert", + "STUN servers" : "STUN-Server", + "A STUN server is used to determine the public IP address of participants behind a router." : "Der STUN-Server wird verwendet, um die öffentliche IP-Adresse von Teilnehmern hinter einem Router zu bestimmen.", + "Add a new STUN server" : "Einen neuen STUN-Server hinzufügen", + "{schema} scheme must be used with a domain" : "{schema}-Schema muss mit einer Domain verwendet werden", + "{option1} and {option2}" : "{option1} und {option2}", + "{option} only" : "nur {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-Kandidaten erfolgreich durch den TURN-Server zurück gesendet", + "Error: No working ICE candidates returned by the TURN server" : "Fehler: Keine funktionierenden ICE-Kandidaten durch den TURN-Server zurück gesendet", + "Testing whether the TURN server returns ICE candidates" : "Testen, ob der TURN-Server ICE-Kandidaten zurückgibt", + "TURN server schemes" : "TURN-Server-Schemata", + "TURN server URL" : "TURN-Server-URL", + "TURN server secret" : "TURN-Server-Secret", + "TURN server protocols" : "TURN-Serverprotokolle", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ein TURN-Server wird verwendet, um den Datenverkehr von Teilnehmern hinter einer Firewall zu übertragen. Wenn einzelne Teilnehmer keine Verbindung zu anderen herstellen können, ist höchstwahrscheinlich ein TURN-Server erforderlich. Anweisungen zum Einrichten sind in folgender {linkstart}Dokumentation{linkend} zu finden.", + "TURN settings saved" : "TURN-Einstellungen gespeichert", + "TURN servers" : "TURN-Server", + "Add a new TURN server" : "Einen neuen TURN-Server hinzufügen", + "Failed" : "Fehlgeschlagen", + "OK" : "OK", + "Checking …" : "Überprüfe …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fehlgeschlagen: WebAssembly ist in diesem Browser deaktiviert oder wird nicht unterstützt. Bitte aktiviere WebAssembly oder verwende einen Browser, der es unterstützt, um die Prüfung durchzuführen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fehlgeschlagen: Die Dateien \".wasm\" und \".tflite\" wurden vom Webserver nicht korrekt zurückgegeben. Bitte prüfe den Abschnitt \"Systemanforderungen\" in der Talk-Dokumentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- und \".tflite\"-Dateien wurden ordnungsgemäß vom Webserver zurückgegeben.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Es scheint, dass die PHP- und Apache-Konfiguration nicht kompatibel ist. Bitte beachte, dass PHP nur mit dem Modul MPM_PREFORK und PHP-FPM nur mit dem Modul MPM_EVENT verwendet werden kann.", + "Web server setup checks" : "Prüfungen der Einrichtung des Webservers", + "Files required for virtual background can be loaded" : "Die für den virtuellen Hintergrund erforderlichen Dateien können geladen werden", + "Federated user" : "Federated-Benutzer", + "Assign participants to rooms" : "Teilnehmer Räumen zuweisen", + "Configure breakout rooms" : "Einstellungen für Breakout-Räume", + "Number of breakout rooms" : "Anzahl an Breakout-Räumen", + "You can create from 1 to 20 breakout rooms." : "Es können zwischen 1 bis 20 Gruppenräume erstellt werden.", + "Assignment method" : "Zuweisungsmethode", + "Automatically assign participants" : "Automatisch hinzugefügte Teilnehmer", + "Manually assign participants" : "Teilnehmer manuell zuordnen", + "Allow participants to choose" : "Teilnehmern die Wahl lassen", + "Create rooms" : "Räume erstellen", + "Confirm" : "Bestätigen", + "Create breakout rooms" : "Breakout-Räume erstellen", + "Reset" : "Zurücksetzen", + "Delete breakout rooms" : "Breakout-Räume löschen", + "Room {roomNumber}" : "Raum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuelle Breakout-Räume und deren Einstellungen gehen verloren", + "Cancel" : "Abbrechen", + "Unassigned participants" : "Nicht zugewiesene Teilnehmer", + "Back" : "Zurück", + "Assign" : "Zuweisen", + "Add participant \"{user}\"" : "Teilnehmer \"{user}\" hinzufügen", + "Now" : "Jetzt", + "Invalid calendar selected" : "Ungültiger Kalender ausgewählt", + "Invalid start time selected" : "Ungültige Startzeit ausgewählt", + "Invalid end time selected" : "Ungültige Endzeit ausgewählt", + "Unknown error occurred" : "Unbekannter Fehler aufgetreten", + "Sending no invitations" : "Keine Einladungen versenden", + "{participant0} will receive an invitation" : "{participant0} erhält eine Einladung", + "{participant0} and {participant1} will receive invitations" : "{participant0} und {participant1} erhalten Einladungen", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} und %n weiterer erhalten Einladungen","{participant0}, {participant1} und %n andere erhalten Einladungen"], + "Invite {user}" : "{user} einladen ", + "Invite all users and emails in this conversation" : "Alle Benutzer und E-Mail-Adressen in der Unterhaltung einladen", + "Meeting created" : "Besprechung erstellt", + "Upcoming meetings" : "Anstehende Besprechungen", + "Loading …" : "Lade …", + "No upcoming meetings" : "Keine anstehenden Besprechungen", + "Schedule a meeting" : "Eine Besprechung planen", + "Meeting title" : "Titel der Besprechung", + "From" : "Von", + "To" : "An", + "Calendar" : "Kalender", + "Attendees" : "Teilnehmende", + "No other participants to send invitations to." : "Keine anderen Teilnehmer, an die Einladungen gesendet werden können.", + "Add attendees" : "Teilnehmer hinzufügen", + "Save" : "Speichern", + "Search participants" : "Suche Teilnehmer", + "No results" : "Keine Ergebnisse", + "Done" : "Erledigt", + "Disable live transcription" : "Live-Transkription deaktivieren", + "Enable live transcription (generated by AI)" : "Live-Transkription aktivieren (KI-generiert)", + "Enable live transcription (Live transcriptions app is not installed)" : "Live-Transkription aktivieren (Live-Transkriptions-App ist nicht installiert)", + "Disable live translation" : "Live-Übersetzung deaktivieren", + "Enable live translation (generated by AI)" : "Live-Übersetzung aktivieren (KI-generiert)", + "Original language" : "Ausgangssprache", + "Live translations app is not installed" : "Die Live-Übersetzungs-App ist nicht installiert", + "Original language: {languageName}" : "Originalsprache: {languageName}", + "Translated language" : "Übersetzte Sprache", + "Translated language: {languageName}" : "Übersetzte Sprache: {languageName}", + "Raise hand" : "Hand heben", + "Raise hand (R)" : "Hand heben (R)", + "Lower hand" : "Hand herunternehmen", + "Lower hand (R)" : "Hand herunternehmen (R)", + "Exit full screen (F)" : "Vollbild verlassen (F)", + "Full screen (F)" : "Vollbild (F)", + "Speaker view" : "Sprecheransicht", + "Grid view" : "Kachelansicht", + "Error when trying to load the available live transcription languages" : "Fehler beim Versuch, die verfügbaren Live-Transkriptionssprachen zu laden", + "Failed to enable live transcription" : "Live-Transkription konnte nicht aktiviert werden", + "Failed to enable live translations" : "Live-Übersetzung konnten nicht aktiviert werden", + "Failed to disable live translations" : "Live-Übersetzung konnten nicht deaktiviert werden", + "Recording consent is required" : "Zustimmung zur Aufzeichnung ist erforderlich", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", + "Conversation not found or not joined" : "Unterhaltung nicht gefunden oder nicht beigetreten", + "Lobby is still active and you're not a moderator" : "Die Lobby ist weiterhin aktiv und du bist kein Moderator", + "Connection failed" : "Verbindung fehlgeschlagen", + "Reload" : "Neu laden", + "{nickName} raised their hand." : "{nickName} hat die Hand gehoben.", + "A participant raised their hand." : "Ein Teilnehmer hat die Hand gehoben", + "Collapse stripe" : "Streifen einklappen", + "Expand stripe" : "Streifen aufklappen", + "Previous page of videos" : "Vorherige Seite mit Videos", + "Next page of videos" : "Nächste Seite mit Videos", + "Connecting …" : "Verbinde …", + "Calling …" : "Rufe an …", + "Waiting for {user} to join the call" : "Warte darauf, dass {user} der Unterhaltung beitritt", + "Waiting for others to join the call …" : "Warte auf weitere Teilnehmer …", + "You can invite others in the participant tab of the sidebar" : "Du kannst andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste einladen", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kannst andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste oder über diesen Link einladen!", + "Share this link to invite others!" : "Teile diesen Link, um andere Personen einzuladen!", + "Copy link" : "Link kopieren", + "You are not allowed to enable audio" : "Du bist nicht berechtigt, Audio zu aktivieren", + "No audio. Click to select device" : "Kein Ton. Zum Auswählen des Geräts anklicken", + "Mute audio" : "Mikrofon stummschalten", + "Mute audio (M)" : "Mikrofon stummschalten (M)", + "Unmute audio" : "Mikrofon einschalten", + "Unmute audio (M)" : "Mikrofon einschalten (M)", + "None" : "Keine", + "Select a microphone" : "Ein Mikrofon auswählen", + "Select a speaker" : "Einen Lautsprecher auswählen", + "Microphone settings" : "Mikrofoneinstellungen", + "Check devices" : "Geräte prüfen", + "Access to camera was denied" : "Zugriff auf die Kamera wurde verweigert", + "Error while accessing camera: It is likely in use by another program" : "Fehler beim Zugriff auf die Kamera: Sie wird wahrscheinlich von einem anderen Programm verwendet", + "Error while accessing camera" : "Fehler beim Zugriff auf die Kamera", + "You have been muted by a moderator" : "Du wurdest von einem Moderator stummgeschaltet", + "Hide presenter video" : "Moderationsvideo ausblenden", + "You are not allowed to enable video" : "Du bist nicht berechtigt, Video zu aktivieren", + "No video. Click to select device" : "Kein Bild. Zum Auswählen des Geräts anklicken", + "Disable video" : "Video deaktivieren", + "Disable video (V)" : "Video deaktivieren (V)", + "Enable video" : "Video aktivieren", + "Enable video (V)" : "Video aktivieren (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren (V) - deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Deine Verbindung wird kurz unterbrochen, wenn du Video zum ersten Mal aktivierst.", + "Select a video device" : "Eine Videoquelle auswählen", + "Show presenter" : "Präsentierenden anzeigen", + "You" : "Du", + "Mute" : "Stummschalten", + "Muted" : "Stummgeschaltet", + "Show screen" : "Bildschirm anzeigen", + "Stop following" : "Nicht mehr folgen", + "Connection could not be established …" : "Es konnte keine Verbindung hergestellt werden …", + "Connection was lost and could not be re-established …" : "Die Verbindung wurde unterbrochen und konnte nicht wiederhergestellt werden …", + "Connection could not be established. Trying again …" : "Es konnte keine Verbindung hergestellt werden. Versuche es erneut …", + "Connection lost. Trying to reconnect …" : "Verbindung zum Server verloren. Es wird versucht diese wiederherzustellen …", + "Connection problems …" : "Verbindungsprobleme …", + "Collapse" : "Zuklappen", + "Expand" : "Erweitern", + "You need to be logged in to upload files" : "Du musst angemeldet sein, um Dateien hochzuladen", + "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", + "Conversation messages" : "Unterhaltungsnachrichten", + "Scroll to bottom" : "Nach unten blättern", + "Post message" : "Nachricht senden", + "Federated conversation" : "Federierte Unterhaltung", + "Public conversation" : "Öffentliche Unterhaltung", + "Favorite" : "Favorit", + "Banned users" : "Gesperrte Personen", + "Manage the list of banned users in this conversation." : "Liste der in dieser Unterhaltung gesperrten Personen bearbeiten", + "Manage bans" : "Sperrungen bearbeiten", + "No banned users" : "Keine gesperrten Personen", + "Banned by:" : "Ausgeschlossen von:", + "Date:" : "Datum:", + "Note:" : "Bemerkung:", + "Hide details" : "Details ausblenden", + "Show details" : "Details anzeigen", + "Unban" : "Entsperren", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Den Titel und die Beschreibung können Sie im {linkstart} Kalender ↗{linkend} ändern.", + "Error while updating conversation name" : "Fehler bei der Aktualisierung des Namens der Unterhaltung", + "Error while updating conversation description" : "Fehler bei der Aktualisierung der Beschreibung der Unterhaltung", + "Enter a name for this conversation" : "Gib einen Namen für diese Unterhaltung ein.", + "Edit conversation name" : "Name der Unterhaltung bearbeiten", + "Edit conversation description" : "Beschreibung der Unterhaltung bearbeiten", + "Enter a description for this conversation" : "Beschreibung zur Unterhaltung eingeben", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Die folgenden Bots können in dieser Unterhaltung aktiviert werden. Wenden dich an deine Administration, um weitere Bots auf diesem Server installieren zu lassen.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Auf diesem Server sind keine Bots installiert. Wende dich an die Administration, um Bots auf diesem Server installieren zu lassen.", + "Disable" : "Deaktivieren", + "Enable" : "Aktivieren", + "The bot is not available anymore" : "Der Bot ist nicht mehr verfügbar", + "Breakout rooms" : "Breakout-Räume", + "Manage breakout rooms" : "Gruppenräume verwalten", + "Set up breakout rooms for this conversation" : "Gruppenräume für diese Unterhaltung einrichten", + "Please select a valid PNG or JPG file" : "Bitte eine gültige PNG- oder JPG-Datei wählen", + "Choose your conversation picture" : "Dein Unterhaltungsbild auswählen", + "Choose" : "Auswählen", + "Error setting conversation picture" : "Fehler beim Setzen des Unterhaltungsbildes", + "Could not set the conversation picture: {error}" : "Unterhaltungsbild konnte nicht festgelegt werden: {error}", + "Error cropping conversation picture" : "Fehler beim Beschneiden des Unterhaltungsbildes", + "Error removing conversation picture" : "Fehler beim Entfernen des Unterhaltungsbildes", + "Set emoji as conversation picture" : "Emoji als Unterhaltungsbild setzen", + "Set background color for conversation picture" : "Hintergrundfarbe für Unterhaltungsbild setzen", + "Upload conversation picture" : "Unterhaltungsbild hochladen", + "Choose conversation picture from files" : "Unterhaltungsbild aus Dateien wählen", + "Remove conversation picture" : "Unterhaltungsbild entfernen", + "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein", + "Set picture" : "Bild festlegen", + "Default permissions modified for {conversationName}" : "Standardberechtigungen für {conversationName} geändert", + "Could not modify default permissions for {conversationName}" : "Für {conversationName} konnten die Standardberechtigungen nicht geändert werden", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bearbeite die Standardberechtigungen für die Teilnehmer dieser Unterhaltung. Diese Einstellungen wirken sich nicht auf Moderatoren aus.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Jedes Mal, wenn Berechtigungen in diesem Abschnitt geändert werden, gehen benutzerdefinierte Berechtigungen, die zuvor einzelnen Teilnehmern zugewiesen wurden, verloren.", + "All permissions" : "Alle Berechtigungen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Die Teilnehmer haben die Berechtigung einen Anruf zu starten, einem Anruf beizutreten und Audio-, Video- und Bildschirmübertragung zu aktivieren.", + "Participants can use all available features." : "Teilnehmer können alle verfügbaren Funktionen nutzen.", + "Restricted" : "Eingeschränkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Die Teilnehmer können nur an Anrufen teilnehmen, aber keine Audio-, Video- oder Bildschirmübertragung aktivieren, bis ein Moderator diese Berechtigungen manuell erteilt.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Die Teilnehmer erhalten einen reduzierten Funktionsumfang, bis die Moderation manuell zusätzliche Berechtigungen erteilt.", + "Advanced permissions" : "Erweiterte Berechtigungen", + "Edit permissions" : "Berechtigungen bearbeiten", + "Conversation settings" : "Unterhaltungseinstellungen", + "Basic Info" : "Basisinformationen", + "Personal" : "Persönlich", + "Moderation" : "Moderation", + "Setup overview" : "Einstellungsübersicht", + "Live transcription" : "Live-Transkription", + "Live transcriptions app is not installed" : "Die Live-Transkriptions-App ist nicht installiert", + "Enable live transcription" : "Live-Transkription aktivieren", + "Breakout Rooms" : "Breakout-Räume", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gefahrenzone", + "Archive conversation" : "Unterhaltung archivieren", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivierte Unterhaltungen werden standardmäßig aus der Unterhaltungsliste ausgeblendet. Sie werden jedoch weiterhin angezeigt, wenn du nach dem Unterhaltungsnamen suchst oder auf eine Liste archivierter Unterhaltungen zugreifst.", + "Do you really want to leave \"{displayName}\"?" : "Möchtest du wirklich \"{displayName}\" verlassen?", + "You can archive this conversation instead." : "Die Unterhaltung kann stattdessen archiviert werden.", + "Leave conversation" : "Unterhaltung verlassen", + "You need to promote a new moderator before you can leave the conversation" : "Du musst einen neuen Moderator bestimmen, bevor du die Unterhaltung verlassen kannst.", + "Delete conversation" : "Unterhaltung löschen", + "Do you really want to delete \"{displayName}\"?" : "Möchtest du wirklich \"{displayName}\" löschen?", + "Error while deleting conversation" : "Fehler beim Löschen der Unterhaltung", + "Delete all chat messages" : "Alle Chatnachrichten löschen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Willst du wirklich alle Nachrichten in \"{displayName}\" löschen?", + "Error while clearing chat history" : "Fehler beim Löschen des Chatverlaufs", + "Be careful, these actions cannot be undone." : "Bitte vorsichtig sein, diese Aktionen können nicht rückgängig gemacht werden.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nachdem du eine Unterhaltung verlassen hast, ist eine Einladung erforderlich, um einer bereits geschlossenen Unterhaltung wieder beizutreten. Einer noch geöffneten Unterhaltung kannst du jederzeit wieder beitreten.", + "Permanently delete this conversation." : "Die Unterhaltung endgültig löschen.", + "Delete chat messages" : "Chatnachrichten löschen", + "Permanently delete all the messages in this conversation." : "Alle Nachrichten in dieser Unterhaltung endgültig löschen.", + "_%n hour_::_%n hours_" : ["%n Stunde","%n Stunden"], + "_%n day_::_%n days_" : ["%n Tag","%n Tage"], + "_%n week_::_%n weeks_" : ["%n Woche","%n Wochen"], + "Custom expiration time" : "Benutzerdefinierte Ablaufzeit", + "Message expiration disabled" : "Nachrichtenablauf deaktiviert", + "Message expiration set: {duration}" : "Nachrichtenablauf eingestellt auf: {duration}", + "Error when trying to set message expiration" : "Fehler beim Festlegen des Nachrichtenablaufs", + "Message expiration" : "Nachrichtenablauf", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatnachrichten können nach einer bestimmten Zeit gelöscht werden. Hinweis: Im Chat freigegebene Dateien werden für den Besitzer nicht gelöscht, aber sie werden nicht mehr in der Unterhaltung freigegeben.", + "Set message expiration" : "Ablauf der Nachricht festlegen", + "Current message expiration" : "Ablauf der aktuellen Nachricht", + "Password copied to clipboard" : "Passwort in die Zwischenablage kopiert", + "Password could not be copied" : "Passwort konnte nicht kopiert werden", + "Guest access" : "Gastzugriff", + "Breakout rooms are not allowed in public conversations." : "Gruppenräume sind bei öffentlichen Gesprächen nicht gestattet.", + "Allow guests to join this conversation via link" : "Gästen die Teilnahme an dieser Unterhaltung per Link erlauben", + "Password protection" : "Passwortschutz", + "This conversation is password-protected. Guests need password to join" : "Diese Unterhaltung ist passwortgeschützt. Gäste brauchen ein Passwort um teilzunehmen", + "Password protection is needed for public conversations" : "Passwortschutz ist für öffentliche Gespräche erforderlich", + "Set a password" : "Passwort setzen", + "Change password" : "Passwort ändern", + "Enter new password" : "Neues Passwort eingeben", + "Save password" : "Passwort speichern", + "Copy password" : "Passwort kopieren", + "Guests are allowed to join this conversation via link" : "Gäste dürfen dieser Unterhaltung über einen Link beitreten", + "Guests are not allowed to join this conversation" : "Gäste dürfen dieser Unterhaltung nicht beitreten", + "Resend invitations" : "Einladungen erneut senden", + "This conversation is open to both registered users and users created with the Guests app" : "Diese Unterhaltung ist sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "This conversation is open to registered users" : "Diese Unterhaltung ist für registrierte Benutzer geöffnet", + "This conversation is limited to the current participants" : "Diese Unterhaltung ist auf die bisherigen Teilnehmer beschränkt", + "You opened the conversation to both registered users and users created with the Guests app" : "Du hast diese Unterhaltung sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet.", + "Error occurred when opening or limiting the conversation" : "Beim Öffnen oder Einschränken der Unterhaltung ist ein Fehler aufgetreten", + "Open conversation to registered users, showing it in search results" : "Unterhaltung für registrierte Benutzer öffnen und in den Suchergebnissen anzeigen", + "Also open to users created with the Guests app" : "Auch für Gäste, die mit der Gast-App erstellt wurden, geöffnet", + "Open conversation" : "Unterhaltung öffnen", + "Set language spoken in calls" : "Die in Telefonaten gesprochene Sprache festlegen", + "Languages could not be loaded" : "Sprachen konnten nicht geladen werden", + "Loading languages …" : "Lade Sprachen …", + "Invalid language" : "Ungültige Sprache", + "Default language (English)" : "Standardsprache (Englisch)", + "Default live transcription language set" : "Standard Live-Transkriptionssprache eingestellt", + "Live transcription language set: {languageName}" : "Eingestellte Live-Transkriptionssprache: {languageName}", + "Error when trying to set live transcription language" : "Fehler beim Einstellen der Live-Transkriptionssprache", + "Start time: {date}" : "Startzeit: {date}", + "Start time has been updated" : "Startzeit wurde angepasst", + "Error occurred while updating start time" : "Beim Aktualisieren der Startzeit ist ein Fehler aufgetreten", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Durch Aktivieren der Lobby werden Nicht-Moderatoren aus dem laufenden Anruf entfernt.", + "Enable lobby, restricting the conversation to moderators" : "Aktivieren der Lobby, beschränke die Unterhaltung auf die Moderatoren.", + "Meeting start time" : "Meeting Startzeit", + "Start time (optional)" : "Startzeit (optional)", + "Import email participants" : "E-Mail-Teilnehmer importieren", + "You can import a list of email participants from a CSV file." : "Eine Liste von E-Mail-Teilnehmern kann aus einer CSV-Datei importiert werden.", + "Poll drafts" : "Umfrageentwürfe", + "Browse poll drafts" : "Umfrageentwürfe durchsuchen", + "Error occurred when locking the conversation" : "Beim Sperren der Unterhaltung ist ein Fehler aufgetreten", + "Error occurred when unlocking the conversation" : "Beim Entsperren der Unterhaltung ist ein Fehler aufgetreten", + "Lock conversation" : "Unterhaltung sperren", + "This will also terminate the ongoing call." : "Dadurch wird auch der laufende Anruf beendet. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Die Unterhaltung sperren, um zu verhindern, dass jemand Nachrichten postet oder Anrufe startet", + "Edit" : "Bearbeiten", + "More information" : "Weitere Informationen", + "Delete" : " Löschen", + "Add new bridged channel to current conversation" : "Neuen Einbindungs-Kanal für die aktuelle Unterhaltung hinzufügen", + "unknown state" : "unbekannter Zustand", + "running" : "läuft", + "not running, check Matterbridge log" : "Nicht aktiv, bitte das Matterbridge-Protokoll prüfen", + "not running" : "läuft nicht", + "Bridge saved" : "Brücke gespeichert", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Mit Matterbridge kannst du Brücken-Kanäle von verschiedenen Instant-Messaging-Systemen verbinden.", + "More info on Matterbridge" : "Weitere Informationen über Matterbridge", + "Messaging systems" : "Messaging-Systeme", + "Enable bridge" : "Einbindung aktivieren", + "Show Matterbridge log" : "Zeige das Matterbridge Log", + "Log content" : "Log-Inhalt", + "Only moderators are allowed to mention @all" : "Nur Moderatoren dürfen @all erwähnen", + "All participants are allowed to mention @all" : "Alle Teilnehmer dürfen @all erwähnen", + "Participants are now allowed to mention @all." : "Teilnehmer dürfen nun @all erwähnen.", + "Mentioning @all has been limited to moderators." : "Erwähnung von @all wurde auf Moderatoren beschränkt.", + "Allow participants to mention @all" : "Teilnehmer dürfen @all erwähnen", + "Mention permissions" : "Erwähnungsberechtigungen", + "Notifications" : "Benachrichtigungen", + "Notify about calls in this conversation" : "Über Anrufe in dieser Unterhaltung benachrichtigen", + "Important conversation" : "Wichtige Unterhaltung", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Nicht stören\"-Benutzerstatus wird für wichtige Unterhaltungen ignoriert", + "Sensitive conversation" : "Sensible Unterhaltung", + "Message preview will be disabled in conversation list and notifications" : "Die Nachrichtenvorschau wird in der Unterhaltungsliste und den Benachrichtigungen deaktiviert", + "Recording consent is required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung erforderlich", + "Recording consent is not required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung nicht erforderlich", + "Recording consent requirement was updated" : "Die Einstellungen zum Erfordernis der Zustimmung zur Aufzeichnung wurde aktualisiert.", + "Error occurred while updating recording consent" : "Beim Aktualisieren der Einstellung zur Zustimmung zur Aufzeichnung ist ein Fehler aufgetreten.", + "Recording Consent" : "Einwilligung zur Aufzeichnung", + "Recording consent cannot be changed once a call or breakout session has started." : "Die Einwilligung zur Aufzeichnung kann nicht mehr geändert werden, sobald ein Unterhaltung oder eine Breakout-Sitzung begonnen hat.", + "Require recording consent before joining call in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Zustimmung zur Aufzeichnung erforderlich.", + "Recording consent is required for all calls" : "Für alle Unterhaltungen ist eine Zustimmung zur Aufzeichnung erforderlich", + "SIP dial-in is now possible without PIN requirement" : "SIP-Einwahl ist jetzt ohne PIN möglich", + "SIP dial-in is now enabled" : "Die SIP-Einwahl ist jetzt aktiviert", + "SIP dial-in is now disabled" : "Die SIP-Einwahl ist jetzt deaktiviert", + "Error occurred when enabling SIP dial-in" : "Beim Aktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Error occurred when disabling SIP dial-in" : "Beim Deaktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Phone and SIP dial-in" : "Telefon- und SIP-Einwahl", + "Enable phone and SIP dial-in" : "Telefon- und SIP-Einwahl aktivieren", + "Allow to dial-in without a PIN" : "Einwahl ohne PIN erlauben", + "Ongoing" : "Laufend", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n Person hat angenommen","%n Personen haben angenommen"], + "_%n person declined_::_%n people declined_" : ["%n Person hat abgelehnt","%n Personen haben abgelehnt"], + "_and %n other attachment_::_and %n other attachments_" : ["und %n anderer Anhang","und %n andere Anhänge"], + "With {displayName}" : "Mit {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Anhang ansehen", + "Join" : "Beitreten", + "View conversation" : "Unterhaltung anzeigen", + "View event on Calendar" : "Termin im Kalender anzeigen", + "Error while creating the conversation" : "Fehler beim Erstellen der Unterhaltung", + "Hello, {displayName}" : "Hallo {displayName}", + "Start meeting now" : "Besprechung jetzt beginnen", + "Give your meeting a title" : "Gib deiner Besprechung einen Titel", + "Create and copy link" : "Link erstellen und teilen", + "Create a new conversation" : "Neue Unterhaltung erstellen", + "Join open conversations" : "Offener Unterhaltung beitreten", + "Call a phone number" : "Eine Telefonnummer anrufen", + "Scroll backward" : "Rückwärts scrollen", + "Scroll forward" : "Vorwärts scrollen", + "Schedule meetings" : "Besprechungen planen", + "You don't have any upcoming meetings" : "Du hast keine bevorstehenden Besprechungen", + "Calendar events with a conversation link as the location are shown here" : "Hier werden Kalenderereignisse mit einem Konversationslink als Ort angezeigt", + "Open calendar" : "Kalender öffnen", + "Unread mentions" : "Ungelesene Erwähnungen", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Nachrichten, in denen du erwähnt wurdest, werden hier angezeigt. Du kannst Personen erwähnen, indem du @ gefolgt von deren Namen eingibst", + "Upcoming reminders" : "Anstehende Erinnerungen", + "Message reminders" : "Nachrichtenerinnerungen", + "Set a reminder on a message to be notified" : "Eine Erinnerung für eine Nachricht festlegen, um benachrichtigt zu werden", + "Start a group conversation" : "Gruppenunterhaltung beginnen", + "Create conversation" : "Unterhaltung erstellen", + "Enter your name" : "Gib deinen Namen ein", + "Submit name and join" : "Namen übermitteln und beitreten", + "Do you already have an account?" : "Hast du bereits ein Konto?", + "Log in" : "Anmelden", + "Error while verifying uploaded file" : "Fehler bei der Überprüfung der hochgeladenen Datei", + "Uploaded file is verified" : "Hochgeladene Datei wurde überprüft", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Das Inhaltsformat besteht aus kommagetrennten Werten (CSV):
- Eine Kopfzeile ist erforderlich und muss mit \"Name\",\"E-Mail\" oder nur \"E-Mail\" übereinstimmen.
- Ein Eintrag pro Zeile (z. B. \"Max Mustermann\", \"max@beispiel.de\")", + "Participants added successfully" : "Teilnehmer hinzugefügt", + "Error while adding participants" : "Fehler beim Hinzufügen von Teilnehmern", + "Import a file" : "Eine Datei importieren", + "Browse" : "Durchsuchen", + "Verifying uploaded file …" : "Überprüfe hochgeladene Datei …", + "This might take a moment" : "Dies kann einen Moment dauern", + "Send invitations" : "Einladungen senden", + "_%n invalid email_::_%n invalid emails_" : ["%n ungültige E-Mail","%n ungültige E-Mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n E-Mail ist bereits importiert oder ein Duplikat","%n E-Mails sind bereits importiert oder Duplikate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n Einladung kann verschickt werden","%n Einladungen können verschickt werden"], + "An error occurred while calling a phone number" : "Es ist ein Fehler beim Anrufen einer Telefonnummer aufgetreten", + "Phone number could not be called: {error}" : "Die Telefonnummer konnte nicht angerufen werden: {error}", + "Phone number could not be called" : "Die Telefonnummer konnte nicht angerufen werden", + "Search participants or phone numbers" : "Teilnehmer oder Telefonnummern suchen", + "Creating the conversation …" : "Die Unterhaltung wird erstellt …", + "Mark as read" : "Als gelesen markieren", + "Mark as unread" : "Als ungelesen markieren", + "Remove from favorites" : "Aus den Favoriten entfernen", + "Add to favorites" : "Zu den Favoriten hinzufügen", + "Unarchive conversation" : "Unterhaltung dearchivieren", + "Ignore \"Do not disturb\"" : "\"Nicht stören\"-Modus ignorieren", + "You need to promote a new moderator before you can leave the conversation." : "Du musst einen neuen Moderator bestimmen, bevor du die Unterhaltung verlassen kannst.", + "Conversation actions" : "Unterhaltungsaktionen", + "Notify about calls" : "Über Anrufe benachrichtigen", + "Hide message text" : "Nachrichtentext ausblenden", + "Pending invitations" : "Ausstehende Einladungen", + "Join conversations from other servers" : "Unterhaltungen von anderen Servern beitreten", + "From {user} at {remoteServer}" : "Von {user} auf {remoteServer}", + "Decline invitation" : "Einladung ablehnen", + "Accept invitation" : "Einladung annehmen", + "No pending invitations" : "Keine ausstehenden Einladungen", + "Home" : "Startseite", + "Unread" : "Ungelesen", + "Mentions" : "Erwähnungen", + "Meetings" : "Besprechungen", + "Sort conversations" : "Unterhaltungen sortieren", + "By recent activity" : "Nach neuesten Aktivitäten", + "Alphabetically" : "Alphabetisch", + "Do not group by type" : "Nicht nach Typ gruppieren", + "Show private ones first" : "Private zuerst zeigen", + "Show group ones first" : "Gruppe zuerst zeigen", + "No followed threads" : "Keine nachverfolgten Themen", + "No matches found" : "Keine Übereinstimmungen gefunden", + "No conversations found" : "Keine Unterhaltungen gefunden", + "You have no archived conversations." : "Du hast keine archivierten Unterhaltungen", + "Subscribe to an existing thread or start your own." : "Ein existierendes Thema abonnieren, oder ein eigenes Thema beginnen.", + "You have no unread mentions." : "Du hast keine ungelesenen Erwähnungen.", + "You have no unread messages." : "Du hast keine ungelesenen Nachrichten.", + "An error occurred while performing the search" : "Es ist ein Fehler beim Suchen aufgetreten", + "Conversation list" : "Unterhaltungsliste", + "Filter conversations by" : "Unterhaltungen filtern nach", + "Unread messages" : "Ungelesene Nachrichten", + "Meeting conversations" : "Besprechungsunterhaltungen", + "Clear filters" : "Filter zurücksetzen", + "New personal note" : "Neue persönliche Notiz", + "SIP backend is not installed" : "SIP-Backend ist nicht installiert", + "Back to conversations" : "Zurück zu den Unterhaltungen", + "Archived conversations" : "Archivierte Unterhaltungen", + "Threads" : "Themen", + "Clear filter" : "Filter zurücksetzen", + "Show more threads" : "Mehr Themen anzeigen", + "App settings" : "App-Einstellungen", + "Users" : "Benutzer", + "Groups" : "Gruppen", + "Teams" : "Teams", + "Federated users" : "Federierte Benutzer", + "New private conversation" : "Neue private Unterhaltung", + "Other sources" : "Andere Quellen", + "Open conversations" : "Offene Unterhaltungen", + "No search results" : "Keine Suchergebnisse", + "Users, groups and teams" : "Personen, Gruppen und Teams", + "Users and groups" : "Benutzer und Gruppen", + "Users and teams" : "Personen und Teams", + "Groups and teams" : "Gruppen und Teams", + "New group conversation" : "Neue Gruppenunterhaltung", + "The meeting will start soon" : "Das Meeting beginnt bald", + "This meeting is scheduled for {startTime}" : "Dieses Meeting ist geplant für {startTime}", + "You are currently waiting in the lobby" : "Du wartest derzeit in der Lobby", + "Enable noise suppression" : "Geräuschunterdrückung aktivieren", + "Reduce background noises for better voice quality" : "Hintergrundgeräusche für eine bessere Sprachqualität reduzieren", + "Enable echo cancellation" : "Echounterdrückung aktivieren", + "Minimize echo effect from own surrounding" : "Echoeffekt aus der eigenen Umgebung minimieren", + "Enable auto gain control" : "Regelung der automatischen Verstärkung aktivieren", + "Dynamically adjust microphone volume for consistent level" : "Die Mikrofonlautstärke dynamisch anpassen, um einen konstanten Pegel zu halten", + "Select microphone" : "Mikrofon auswählen", + "No microphone available" : "Kein Mikrofon verfügbar", + "Select speaker" : "Lautsprecher auswählen", + "No speaker available" : "Kein Lautsprecher verfügbar", + "Select camera" : "Kamera auswählen", + "No camera available" : "Keine Kamera verfügbar", + "Select a device" : "Ein Gerät auswählen", + "Playing …" : "Wiedergabe …", + "Test speakers" : "Lautsprecher testen", + "Test" : "Test", + "Devices" : "Geräte", + "Backgrounds" : "Hintergründe", + "No audio" : "Kein Audio", + "No camera" : "Keine Kamera", + "Display video as you will see it (mirrored)" : "Video so anzeigen, wie du es sehen wirst (gespiegelt)", + "Display video as others will see it" : "Video so anzeigen, wie andere es sehen", + "Calls are not supported in your browser" : "Anrufe werden von deinem Browser nicht unterstützt", + "Access to microphone is only possible with HTTPS" : "Zugriff auf Mikrofon ist nur über HTTPS möglich", + "Access to microphone was denied" : "Zugriff auf Mikrofon wurde verweigert", + "Error while accessing microphone" : "Fehler beim Zugriff auf das Mikrofon", + "Access to camera is only possible with HTTPS" : "Zugriff auf Kamera ist nur über HTTPS möglich", + "The call is being recorded." : "Der Anruf wird aufgezeichnet.", + "The call might be recorded." : "Die Unterhaltung wird möglicherweise aufgezeichnet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Die Aufnahme kann deine Stimme sowie Video von der Kamera und einer Bildschirmfreigabe beinhalten. Vor der Teilnahme am Anruf ist dein Einverständnis hierzu erforderlich.", + "Give consent to the recording of this call" : "Stimme bitte der Aufzeichnung dieser Unterhaltung zu", + "Show more info" : "Weitere Informationen anzeigen", + "Audio is not available" : "Audio ist nicht verfügbar", + "Video is not available" : "Video ist nicht verfügbar", + "Start recording immediately with the call" : "Aufzeichnung sofort mit dem Anruf starten", + "Recording backend is not installed" : "Aufnahme-Backend ist nicht installiert", + "Notify all participants about this call" : "Alle Teilnehmer über diesen Anruf benachrichtigen", + "Apply settings" : "Einstellungen anwenden", + "Select virtual office background" : "Büro als virtuellen Hintergrund auswählen", + "Select virtual home background" : "Zuhause als virtuellen Hintergrund auswählen", + "Select virtual abstract background" : "Abstraktion als virtuellen Hintergrund auswählen", + "Select virtual beach background" : "Strand als virtuellen Hintergrund auswählen", + "Select virtual park background" : "Park als virtuellen Hintergrund auswählen", + "Select virtual theater background" : "Theater als virtuellen Hintergrund auswählen", + "Select virtual library background" : "Bibliothek als virtuellen Hintergrund auswählen", + "Select virtual space station background" : "Raumstation als virtuellen Hintergrund auswählen", + "Error while uploading the file" : "Fehler beim Hochladen der Datei", + "Select a file" : "Eine Datei wählen", + "Invalid path selected" : "Ungültiger Pfad ausgewählt", + "Select virtual background from file {fileName}" : "Virtuellen Hintergrund von Datei {fileName} auswählen", + "Blur" : "Verwischen", + "Upload" : "Hochladen", + "Files" : "Dateien", + "(editing)" : "(bearbeiten)", + "(edited)" : "(Bearbeitet)", + "The message has expired or has been deleted" : "Die Nachricht ist abgelaufen oder wurde gelöscht", + "Cancel quote" : "Zitieren abbrechen", + "24 hours" : "24 Stunden", + "7 days" : "7 Tage", + "30 days" : "30 Tage", + "Until unpin" : "Bis zum Ablösen", + "Clear reminder – {timeLocale}" : "Erinnerung löschen – {timeLocale}", + "Edited by {actor}" : "Bearbeitet von {actor}", + "Pinned by you" : "Angeheftet von dir", + "Pinned by {actor}" : "Angeheftet von {actor}", + "Until {absoluteDate}" : "Bis zum {absoluteDate}", + "Message text copied to clipboard" : "Nachrichteninhalt wurde in die Zwischenablage kopiert", + "Message text could not be copied" : "Nachrichteninhalt konnte nicht kopiert werden", + "Message forwarded to \"Note to self\"" : "Nachricht weitergeleitet an \"Notiz an mich\"", + "Error while forwarding message to \"Note to self\"" : "Fehler beim Weiterleiten der Nachricht an \"Notiz an mich\"", + "A reminder was successfully removed" : "Erinnerung wurde entfernt", + "Error occurred when removing a reminder" : "Beim Entfernen einer Erinnerung ist ein Fehler aufgetreten", + "A reminder was successfully set at {datetime}" : "Eine Erinnerung wurde für {datetime} erstellt.", + "Error occurred when creating a reminder" : "Beim Erstellen einer Erinnerung ist ein Fehler aufgetreten", + "Add a reaction to this message" : "Dieser Nachricht eine Reaktion hinzufügen", + "Reply" : "Antworten", + "More actions" : "Weitere Aktionen", + "Set reminder" : "Erinnerung erstellen", + "Pin message" : "Nachricht anheften", + "Unpin message" : "Nachricht ablösen", + "Reply privately" : "Privat antworten", + "Edit message" : "Nachricht bearbeiten", + "Copy message" : "Nachricht kopieren", + "Copy message link" : "Nachrichtenlink kopieren", + "Go to file" : "Zur Datei wechseln", + "Download file" : "Datei herunterladen", + "Go to thread" : "Zu Thema gehen", + "Edit thread details" : "Themendetails bearbeiten", + "Forward message" : "Nachricht weiterleiten", + "Translate" : "Übersetzen", + "Set custom reminder" : "Benutzerdefinierte Erinnerung erstellen", + "Keep pinned for" : "Angeheftet lassen für", + "Set custom period" : "Benutzerdefinierten Zeitraum eingeben", + "Close reactions menu" : "Menü für Reaktionen schließen", + "React with {emoji}" : "Mit {emoji} reagieren", + "React with another emoji" : "Mit einem anderen Emoji reagieren", + "Choose a conversation to forward the selected message." : "Eine Unterhaltung auswählen um die ausgewählte Nachricht weiterzuleiten.", + "Error while forwarding message" : "Fehler beim Weiterleiten der Nachricht", + "The message has been forwarded to {selectedConversationName}" : "Die Nachricht wurde an {selectedConversationName} weitergleitet", + "Dismiss" : "Ausblenden", + "Go to conversation" : "Zur Unterhaltung gehen", + "Detect language" : "Sprache erkennen", + "The message could not be translated" : "Die Nachricht konnte nicht übersetzt werden", + "Translation copied to clipboard" : "Übersetzung wurde in die Zwischenablage kopiert", + "Translation could not be copied" : "Übersetzung konnte nicht kopiert werden", + "Translate message" : "Nachricht übersetzen", + "Source language to translate from" : "Ausgangssprache, aus der übersetzt werden soll ", + "Translate from" : "Übersetzen von", + "Target language to translate into" : "Zielsprache, in die übersetzt werden soll", + "Translate to" : "Übersetzen in", + "Translating" : "Übersetze", + "This translation is AI generated and may contain mistakes." : "Diese Übersetzung ist KI-generiert und kann Fehler enthalten.", + "Copy translated text" : "Übersetzen Text kopieren", + "Error when scheduling the message" : "Fehler beim Planen des Nachrichtenversands", + "Reschedule" : "Umplanen", + "Send now" : "Jetzt senden", + "Choose a time" : "Eine Zeit wählen", + "Send at custom time" : "Zur benutzerdefinierten Zeit senden", + "Will be sent without notification" : "Wird ohne Benachrichtigung gesendet", + "Message read by everyone who shares their reading status" : "Nachricht wird von allen gelesen, die deinen Lesestatus teilen", + "Message sent" : "Nachricht wurde gesendet", + "Sent without notification" : "Ohne Benachrichtigung gesendet", + "Deleting message" : "Löschen der Nachricht", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Nachricht gelöscht, aber ein Bot oder Matterbridge ist konfiguriert und die Nachricht wurde unter Umständen bereits an andere Dienste verteilt", + "Message deleted successfully" : "Nachricht gelöscht", + "Message could not be deleted because it is too old" : "Nachricht konnte nicht gelöscht werden, da sie zu alt ist.", + "Only normal chat messages can be deleted" : "Nur normale Chatnachrichten können gelöscht werden", + "An error occurred while deleting the message" : "Es ist ein Fehler beim Löschen der Nachricht aufgetreten", + "Pinned" : "Angeheftet", + "Your browser does not support playing audio files" : "Der Browser unterstützt nicht das Abspielen von Audio-Dateien", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck-Karte", + "Remove {fileName}" : "Entferne {fileName}", + "Open this location in OpenStreetMap" : "Diesen Ort in OpenStreetMap öffnen", + "_%n reply_::_%n replies_" : ["%n Antwort","%n Antworten"], + "Sending message" : "Nachricht wird gesendet", + "Failed to send the message. Click to try again" : "Nachricht konnte nicht gesendet werden. Klicke, um es erneut zu versuchen.", + "Not enough free space to upload file" : "Nicht genügend freier Speicherplatz zum Hochladen der Datei", + "You cannot send messages to this conversation at the moment" : "Du kannst derzeit keine Nachrichten an diese Unterhaltung senden", + "Could not update the message" : "Nachricht konnte nicht aktualisiert werden", + "Reply to thread \"{threadTitle}\"" : "Antwort auf das Thema \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Du hast abgestimmt • %n Stimme","Du hast abgestimmt • %n Stimmen"], + "You voted" : "Du hast abgestimmt", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Zum Abstimmen klicken • %n Stimme","Zum Abstimmen klicken • %n Stimmen"], + "Click to vote" : "Zum Abstimmen klicken", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Umfrageentwurf • %n Option","Umfrageentwurf • %n Optionen"], + "_%n vote_::_%n votes_" : ["%n Stimme","%n Stimmen"], + "Edit poll draft" : "Umfrageentwurf bearbeiten", + "Delete poll draft" : "Umfrageentwurf löschen", + "Open poll" : "Offene Umfrage", + "Closed poll" : "Geschlossene Umfrage", + "See results" : "Ergebnisse anzeigen", + "Reactions" : "Reaktionen", + "No permission to post reactions in this conversation" : "Keine Berechtigung zum Veröffentlichen von Reaktionen in dieser Unterhaltung", + "and {participant}" : "und {participant}", + "_and %n other participant_::_and %n other participants_" : ["und %n weiterer Teilnehmer","und %n weitere Teilnehmer"], + "Show all reactions" : "Alle Reaktionen anzeigen", + "Add more reactions" : "Weitere Reaktionen hinzufügen", + "Show or collapse system messages" : "Systemnachrichten anzeigen oder zuklappen", + "No messages" : "Keine Nachrichten", + "All messages have expired or have been deleted." : "Alle Nachrichten sind abgelaufen oder wurden gelöscht.", + "Generate summary with AI" : "Zusammenfassung mit KI erstellen", + "{author} (pinned by you)" : "{author} (Von dir angeheftet)", + "{author} (pinned by {actor})" : "{author} (Angeheftet von {actor})", + "Unpin" : "Ablösen", + "Cancel search" : "Suche abbrechen", + "Add a phone number" : "Eine Telefonnummer hinzufügen", + "Error: A password is required to create the conversation." : "Fehler: Ein Passwort ist erforderlich, um die Unterhaltung zu erstellen.", + "All set, the conversation \"{conversationName}\" was created." : "Alles erledigt, die Unterhaltung \"{conversationName}\" wurde erstellt.", + "Create a new group conversation" : "Neue Gruppenunterhaltung erstellen", + "Add participants" : "Teilnehmer hinzufügen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale Länge überschritten ({maxlength} Zeichen)", + "Conversation type" : "Unterhaltungstyp", + "Conversation visibility" : "Sichtbarkeit der Unterhaltung", + "Allow guests to join via link" : "Gästen die Teilnahme per Link erlauben", + "Enter password" : "Passwort eingeben", + "This conversation has been locked" : "Diese Unterhaltung wurde gesperrt", + "No permission to post messages in this conversation" : "Keine Berechtigung zum Veröffentlichen von Nachrichten in dieser Unterhaltung", + "Joining conversation …" : "Unterhaltung beitreten …", + "Write a message without notification" : "Eine Nachricht ohne Benachrichtigung schreiben", + "Create a thread silently" : "Ein Thema stillschweigend erstellen", + "Create a thread" : "Ein Thema erstellen", + "Send message silently" : "Nachricht still senden", + "Send message" : "Nachricht senden", + "Send without notification" : "Ohne Benachrichtigung senden", + "The participant will not be notified about new messages" : "Der Teilnehmer wird über neue Nachrichten nicht benachrichtigt", + "Participants will not be notified about new messages" : "Teilnehmer werden über neue Nachrichten nicht benachrichtigt", + "Message will be sent {datetimeString}" : "Nachricht wird gesendet um {datetimeString}", + "Thread title is required" : "Ein Thementitel ist erforderlich", + "Message text is required" : "Ein Nachrichtentext ist erforderlich", + "The message could not be edited" : "Die Nachricht konnte nicht bearbeitet werden", + "File to share" : "Zu teilende Datei", + "File upload is not available in this conversation" : "Das Hochladen von Dateien ist in dieser Unterhaltung nicht verfügbar", + "Message was successfully scheduled" : "Nachrichtenversand wurde geplant", + "Add emoji" : "Emoji hinzufügen", + "Adding a mention will only notify users who did not read the message." : "Hinzufügen einer Erwähnung benachrichtigt nur Benutzer, die die Nachricht noch nicht gelesen haben.", + "Thread title" : "Thementitel", + "Send later" : "Später senden", + "Show scheduled messages" : "Geplante Nachrichten ansehen", + "Cancel editing" : "Bearbeitung abbrechen", + "Schedule message" : "Nachrichtenversand planen", + "{user} is out of office and might not respond." : "{user} ist nicht im Büro und antwortet möglicherweise nicht.", + "Absence period: {startDate} - {endDate}" : "Abwesenheitszeitraum: {startDate} - {endDate}", + "Replacement:" : "Ersatz:", + "Share from {nextcloud}" : "Von {nextcloud} teilen", + "Share from Files" : "Aus Dateien heraus teilen", + "Share files to the conversation" : "Dateien mit der Unterhaltung teilen", + "Upload from device" : "Von Gerät hochladen", + "Create new poll" : "Neue Umfrage erstellen", + "Smart picker" : "Intelligente Auswahl", + "Record voice message" : "Sprachnachricht aufnehmen", + "End recording and send" : "Aufnahme beenden und senden", + "Dismiss recording" : "Aufnahme verwerfen", + "Access to the microphone was denied" : "Zugriff auf das Mikrofon wurde verweigert", + "Microphone either not available or disabled in settings" : "Mikrofon ist entweder nicht verfügbar oder in den Einstellungen deaktiviert", + "Error while recording audio" : "Fehler bei der Audioaufnahme", + "Voice message {time} ({conversation})" : "Sprachnachricht {time} ({conversation})", + "Generating summary of unread messages …" : "Zusammenfassung ungelesener Nachrichten wird erstellt …", + "Summary is AI generated and might contain mistakes" : "Die Zusammenfassung wird von einer KI erstellt und kann Fehler enthalten", + "Error occurred during a summary generation" : "Es ist ein Fehler beim Erstellen einer Zusammenfassung aufgetreten", + "New file" : "Neue Datei", + "Blank" : "Leer", + "Error while creating file" : "Fehler beim Erstellen der Datei", + "Create and share a new file" : "Erstellen und teile eine neue Datei", + "Name of the new file" : "Name der neuen Datei", + "Create file" : "Datei erstellen", + "Someone is typing …" : "Jemand schreibt …", + "{user1} is typing …" : "{user1} schreibt …", + "{user1} and {user2} are typing …" : "{user1} und {user2} schreiben …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} und {user3} schreiben …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n weiterer schreiben …","{user1}, {user2}, {user3} and %n weitere schreiben …"], + "Add more files" : "Weitere Dateien hinzufügen", + "Send" : "Senden", + "In this conversation {user} can:" : "In dieser Unterhaltung kann {user}:", + "Edit default permissions for participants in {conversationName}" : "Standardberechtigungen für Teilnehmer in {conversationName} bearbeiten", + "Start a call" : "Einen Anruf starten", + "Skip the lobby" : "Die Lobby überspringen", + "Can post messages" : "Kann Nachrichten senden", + "Can post messages and reactions" : "Kann Nachrichten und Reaktionen posten", + "Can add reactions" : "Kann Reaktionen hinzufügen", + "Enable the microphone" : "Das Mikrofon aktivieren", + "Enable the camera" : "Die Kamera aktivieren", + "Share the screen" : "Den Bildschirm teilen", + "Update permissions" : "Berechtigungen aktualisieren", + "Updating permissions" : "Aktualisiere Berechtigungen", + "No poll drafts" : "Keine Umfrageentwürfe", + "There is no poll drafts yet saved for this conversation" : "Für diese Unterhaltung sind noch keine Umfrageentwürfe gespeichert", + "Create poll in {name}" : "Umfrage erstellen in {name}", + "Create poll" : "Umfrage erstellen", + "Error while importing poll" : "Fehler beim Importieren der Umfrage", + "Question" : "Frage", + "Ask a question" : "Eine Frage stellen", + "Import draft from file" : "Entwurf aus Datei importieren", + "Answers" : "Antworten", + "Answer {option}" : "Antwort {option}", + "Delete poll option" : "Umfrage-Option löschen", + "Add answer" : "Antwort hinzufügen", + "Settings" : "Einstellungen", + "Anonymous poll" : "Anonyme Umfrage", + "Multiple answers" : "Mehrere Antworten", + "Save as draft" : "Als Entwurf speichern", + "Export draft to file" : "Entwurf in Datei exportieren", + "_Final results • %n vote_::_Final results • %n votes_" : ["Endergebnisse • %n Stimme","Endergebnisse • %n Stimmen"], + "Your vote is anonymous" : "Deine Stimme ist anonym", + "You voted for this option" : "Du hast für diese Option gestimmt", + "End poll" : "Umfrage beenden", + "Change your vote" : "Ändere deine Stimmabgabe", + "Withdraw vote" : "Stimme zurückziehen", + "Results" : "Ergebnisse", + "Download as spreadsheet" : "Als Tabelle herunterladen", + "Download as CSV" : "Als CSV herunterladen", + "Voted participants" : "Gewählte Teilnehmer", + "Send a message to \"{roomName}\"" : "Eine Nachricht an \"{roomName}\" senden", + "Hide list of participants" : "Teilnehmerliste verbergen", + "Show list of participants" : "Teilnehmerliste anzeigen", + "Assistance requested in {roomName}" : "Unterstützung angefordert in {roomName}", + "The message was sent to \"{roomName}\"" : "Die Nachricht wurde an \"{roomName}\" gesendet", + "Dismiss request for assistance" : "Bitte um Unterstützung ablehnen", + "Send message to room" : "Nachricht an Raum senden", + "Back to main room" : "Zurück zum Hauptraum", + "Back to your room" : "Zurück zu deinen Raum", + "Message all rooms" : "Nachricht an alle Räume", + "Start session" : "Sitzung starten", + "Start a call before you start a breakout room session" : "Einen Anruf starten bevor du eine Gruppenraumsitzung beginnst", + "Stop session" : "Sitzung beenden", + "The message was sent to all breakout rooms" : "Die Nachricht wurde an alle Gruppenräume gesendet.", + "Send a message to all breakout rooms" : "Nachricht an alle Gruppenräume senden", + "Breakout rooms are not started" : "Gruppenräume sind nicht gestartet", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Anrufe ohne Hochleistungs-Backend können Verbindungsprobleme und eine hohe Gerätebelastung verursachen. {linkstart}Mehr erfahren{linkend}", + "Talk setup incomplete" : "Talk-Einrichtung unvollständig", + "Disable lobby" : "Lobby deaktivieren", + "Settings for participant \"{user}\"" : "Einstellungen für den Teilnehmer \"{user}\"", + "Participant \"{user}\"" : "Teilnehmer \"{user}\"", + "moderator" : "Moderator", + "bot" : "Bot", + "guest" : "Gast", + "Ringing …" : "Klingeln …", + "Call rejected" : "Anruf abgelehnt", + "{time} talking …" : "{time} im Gespräch …", + "{time} talking time" : "{time} Gesprächsdauer", + "Raised their hand" : "Hat die Hand gehoben", + "Joined with video" : "Mit Video beigetreten", + "Joined via phone" : "Mit Telefon beigetreten", + "Joined with audio" : "Mit Audio beigetreten", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Der Text muss weniger als oder gleich {maxLength} Zeichen lang sein. Dein aktueller Text ist {charactersCount} Zeichen lang.", + "Remove group and members" : "Gruppe und Mitglieder entfernen", + "Remove team and members" : "Team und Mitglieder entfernen", + "Remove participant" : "Teilnehmer entfernen", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Soll die Gruppe \"{displayName}\" und ihre Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Soll das Team \"{displayName}\" und seine Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove {displayName} from this conversation?" : "Soll {displayName} aus dieser Unterhaltung entfernt werden?", + "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", + "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", + "Permissions granted to {displayName}" : "Berechtigungen für {displayName} gewährt", + "Could not modify permissions for {displayName}" : " Die Berechtigungen für {displayName} konnten nicht geändert werden", + "Permissions removed for {displayName}" : "Berechtigungen für {displayName} entzogen", + "Permissions set to default for {displayName}" : "Berechtigungen für {displayName} auf Standard gesetzt", + "Phone number could not be hung up" : "Telefonnummer konnte nicht aufgelegt werden", + "Phone number could not be put on hold" : "Telefonnummer konnte nicht in die Warteschleife gelegt werden", + "Phone number could not be muted" : "Telefonnummer konnte nicht stummgeschaltet werden", + "Phone number could not be unmuted" : "Stummschaltung für Telefonnummer konnte nicht aufgehoben werden", + "DTMF message could not be sent" : "MFW-Nachricht konnte nicht gesendet werden", + "Phone number copied to clipboard" : "Telefonnummer in die Zwischenablage kopiert", + "Phone number could not be copied" : "Telefonnummer konnte nicht kopiert werden", + "in the lobby" : "In der Lobby", + "Dial out phone" : "Telefon wählen", + "Hang up phone" : "Telefon auflegen", + "Move back to lobby" : "Zurück zur Lobby", + "Move to conversation" : "Zur Unterhaltung wechseln", + "Dial-in PIN" : "Einwahl-PIN", + "Demote from moderator" : "Moderator absetzen", + "Promote to moderator" : "Zum Moderator ernennen", + "Resend invitation" : "Einladung erneut senden", + "Send call notification" : "Sende Anrufbenachrichtigung", + "Dial out phone number" : "Ausgehende Telefonnummer", + "Resume call for phone number" : "Anruf fortsetzen für Telefonnummer", + "Put phone number on hold" : "Telefonnummer in die Warteschleife legen", + "Unmute phone number" : "Stummschaltung der Telefonnummer aufheben", + "Mute phone number" : "Telefonnummer stummschalten", + "Copy phone number" : "Telefonnummer kopieren", + "Reset custom permissions" : "Benutzerdefinierte Berechtigungen zurücksetzen", + "Grant all permissions" : "Alle Berechtigungen gewähren", + "Remove all permissions" : "Alle Berechtigungen entziehen", + "Also ban from this conversation" : "Auch für diese Unterhaltung sperren", + "Internal note (reason to ban)" : "Interne Notiz (Grund der Sperrung)", + "Remove" : "Entfernen", + "Permissions modified for {displayName}" : "Berechtigungen für {displayName} geändert", + "Add users, groups or teams" : "Personen, Gruppen oder Teams hinzufügen", + "Add users or groups" : "Benutzer oder Gruppen hinzufügen", + "Add users or teams" : "Personen oder Teams hinzufügen", + "Add users" : "Benutzer hinzufügen", + "Add groups or teams" : "Gruppen oder Teams hinzufügen", + "Add groups" : "Gruppen hinzufügen", + "Add teams" : "Teams hinzufügen", + "Add other sources" : "Andere Quellen hinzufügen", + "Add emails" : "E-Mails hinzufügen", + "Integrations" : "Einbindungen", + "Add federated users" : "Federated-Benutzer hinzufügen", + "Searching …" : "Suche …", + "Search for more users" : "Nach weiteren Benutzern suchen", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kannst Teilnehmende über Namen, E-Mail-Adresse oder Federated-Cloud-ID suchen oder hinzufügen", + "Search or add participants" : "Teilnehmer suchen oder hinzufügen", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} gesendet", + "An error occurred while adding the participants" : "Es ist ein Fehler beim Hinzufügen der Teilnehmer aufgetreten.", + "A new group conversation with selected participant will be created" : "Es wird eine neue Gruppenunterhaltung mit dem ausgewählten Teilnehmer erstellt", + "Participants" : "Teilnehmer", + "Pinned by a deleted user" : "Angeheftet von einem gelöschten Benutzer", + "Participants ({count})" : "Teilnehmer ({count})", + "Open chat" : "Chat öffnen", + "You have new unread messages in the chat." : "Du hast neue ungelesene Nachrichten im Chat.", + "You have been mentioned in the chat." : "Du wurdest im Chat erwähnt.", + "Search messages" : "Nachrichten suchen", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Freigegebene Elemente", + "Search in {name}" : "Suche in {name}", + "Threads in {name}" : "Themen in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Suche Nachrichten  …", + "Search options" : "Suchoptionen", + "From User" : "Von Benutzer", + "Since" : "Seit", + "Until" : "Bis", + "No results found" : "Keine Ergebnisse gefunden", + "Load more results" : "Weitere Ergebnisse laden", + "Recent threads" : "Neueste Themen", + "Projects" : "Projekte", + "No shared items" : "Keine geteilten Elemente", + "Thread notifications" : "Thread-Benachrichtigungen", + "Thread actions" : "Themenaktionen", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Zu einer Unterhaltung verlinken", + "No open conversations found" : "Keine offenen Unterhaltungen gefunden", + "Either there are no open conversations or you joined all of them." : "Entweder gibt es keine offenen Unterhaltungen oder du bist bereits allen beigetreten.", + "Check spelling or use complete words." : "Überprüfe die Rechtschreibung oder verwende vollständige Wörter.", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", + "Select conversation" : "Unterhaltung auswählen", + "Number length is not valid" : "Nummernlänge ist nicht gültig", + "Region code is not valid" : "Vorwahl ist ungültig", + "Number length is too short" : "Nummernlänge ist zu kurz", + "Number length is too long" : "Nummernlänge ist zu lang", + "Number is not valid" : "Nummer ist nicht gültig", + "Phone numbers" : "Telefonnummern", + "Display name: {name}" : "Anzeigename: {name}", + "Edit display name" : "Anzeigename bearbeiten", + "Display name (required)" : "Anzeigename (erforderlich)", + "Save name" : "Namen speichern", + "I picked message bubbles" : "Ich habe Sprechblasen ausgewählt", + "I picked the list style" : "Ich habe den Listenstil ausgewählt", + "Error while setting personal setting" : "Fehler beim Festlegen der persönlichen Einstellung", + "Error while saving sounds setting" : "Fehler beim Speichern der Toneinstellung", + "Compact conversations list" : "Unterhaltungsliste verkleinern", + "Chat appearance" : "Chat-Darstellung", + "Messages list" : "Nachrichtenliste", + "Message bubbles" : "Sprechblasen", + "Play sounds when participants join or leave a call" : "Töne abspielen, wenn Teilnehmer einem Anruf beitreten oder verlassen", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Derzeit aufgrund technischer Einschränkungen durch den Hersteller nicht auf iPhone und iPad verfügbar", + "Notification settings" : "Benachrichtigungseinstellungen", + "Sounds for chat and call notifications" : "Töne für Chat- und Anrufbenachrichtigungen", + "Invalid language ({languageId})" : "Ungültige Sprache ({languageId})", + "Default language" : "Standardsprache", + "Default language ({languageName})" : "Standardsprache ({languageName})", + "Error when trying to load the available live translation languages" : "Fehler beim Versuch, die verfügbaren Live-Übersetzungssprachen zu laden", + "Error when trying to set live translation language" : "Fehler beim Versuch, eine Live-Übersetzungssprache festzulegen", + "Set language used to show the transcriptions" : "Sprache festlegen, die zur Anzeige der Transkriptionen verwendet wird", + "Select location for attachments" : "Speicherort für Anhänge auswählen", + "Error while setting attachment folder" : "Fehler beim Festlegen des Ordners für Anhänge", + "Error while setting read status privacy" : "Fehler beim Setzen des Lesestatus Privatsphäre", + "Error while setting typing status privacy" : "Fehler beim Festlegen des Datenschutzes für den Eingabestatus", + "Error while setting default media state" : "Fehler beim Setzen des Standard-Medienstatus", + "Turn camera and microphone off by default" : "Kamera und Mikrofon standardmäßig ausschalten", + "Blur camera background by default" : "Kamerahintergrund standardmäßig verwischen", + "Skip device preview before joining a call" : "Gerätevorschau vor dem Beitritt zu einer Unterhaltung überspringen", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Beim Beitritt wird die Kamera ausgeschaltet. Dies wird immer angezeigt, wenn eine Einverständniserklärung erforderlich ist.", + "Appearance & Sounds" : "Aussehen & Töne", + "Privacy" : "Datenschutz", + "Send read receipts" : "Lesebestätigungen senden", + "When off, all read statuses will be hidden" : "Im ausgeschalteten Zustand werden alle Lesestatus ausgeblendet", + "Share typing status" : "Schreibstatus teilen", + "When off, all typing indicators will be hidden" : "Im ausgeschalteten Zustand werden alle Schreibanzeigen ausgeblendet", + "Attachments folder" : "Ordner für Anhänge", + "Toggle full screen" : "Vollbild umschalten", + "Return to Home screen" : "Zum Startbildschirm zurückkehren", + "Search" : "Suche", + "Shortcuts while in a chat" : "Tastaturkürzel während eines Chats", + "Focus the chat input" : "Chat-Eingabe fokussieren", + "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", + "Edit your last message" : "Deine letzte Nachricht bearbeiten", + "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", + "Camera on and off" : "Kamera ein- und ausschalten", + "Microphone on and off" : "Mikrofon ein- und ausschalten", + "Raise or lower hand" : "Hand heben oder senken", + "Push to talk or push to mute" : "Zum Sprechen oder Stummschalten drücken", + "Zoom-in / zoom-out a screen share" : "Vergrößern/Verkleinern einer Bildschirmfreigabe", + "Mouse wheel" : "Mausrad", + "Start call silently" : "Anruf stumm beginnen", + "Start call" : "Anruf starten", + "End call" : "Anruf beenden", + "The server was updated, you cannot start or join a call." : "Der Server wurde aktualisiert, Du kannst keinen Anruf starten oder daran teilnehmen.", + "This call has just ended" : "Dieser Anruf wurde gerade beendet", + "You will be able to join the call only after a moderator starts it." : "Du kannst dem Anruf erst beitreten, nachdem ein Moderator ihn gestartet hat.", + "End call for everyone" : "Anruf für alle beenden", + "Starting the recording" : "Aufnahme wird gestartet", + "Recording" : "Aufnahme", + "The call has been running for one hour." : "Der Anruf läuft seit einer Stunde.", + "Cancel recording start" : "Start der Aufnahme abbrechen", + "Stop recording" : "Aufnahme stoppen", + "Send a reaction" : "Reaktion senden", + "React with {reaction}" : "Reagiere mit {reaction}", + "All tasks done!" : "Alle Aufgaben erledigt!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} von %n Aufgabe","{done} von %n Aufgaben"], + "Add participants to this call" : "Teilnehmer zu diesem Anruf hinzufügen", + "_%n participant in call_::_%n participants in call_" : ["%n Anrufteilnehmer","%n Anrufteilnehmer"], + "Scheduled messages" : "Geplante Nachrichten", + "You are not allowed to enable screensharing" : "Du bist nicht berechtigt, die Bildschirmfreigabe zu aktivieren", + "No screensharing" : "Keine Bildschirmfreigabe", + "Screensharing options" : "Optionen für Bildschirmübertragung", + "Enable screensharing" : "Bildschirmübertragung aktivieren", + "Bad sent video and screen quality." : "Schlechte Video- und Bildschirm-Sendequalität.", + "Bad sent screen quality." : "Schlechte Bildschirm-Sendequalität.", + "Bad sent video quality." : "Schlechte Video-Sendequalität", + "Bad sent audio, video and screen quality." : "Schlechte Audio-, Video- und Bildschirm-Sendequalität.", + "Bad sent audio and screen quality." : "Schlechte Audio- und Bildschirm-Sendequalität.", + "Bad sent audio and video quality." : "Schlechte Audio- und Video-Sendequalität.", + "Bad sent audio quality." : "Schlechte Audio-Sendequalität", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Deine Internetverbindung oder dein Computer ist ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, die Hintergrundunschärfe oder deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Disable background blur" : "Hintergrund ohne Unschärfe", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche deine Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können deinen Bildschirm möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche die Hintergrundunschärfe oder die Hintergrundunschärfe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche deine Bildschirmfreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Disable screenshare" : "Bildschirmübertragung deaktivieren", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche die Hintergrundunschärfe oder deine Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen und nicht sehen. Versuche, deine Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Deine Internetverbindung oder dein Computer sind ausgelastet und andere Teilnehmer können dich möglicherweise nicht verstehen.", + "Screen sharing is not supported by your browser." : "Dieser Browser unterstützt das Teilen des Bildschirms nicht", + "Screen sharing requires the page to be loaded through HTTPS." : "Bildschirmteilen erfordert dass die Seite über HTTPS geladen wird.", + "Screensharing requires the page to be loaded through HTTPS." : "Das Übertragen des Bildschirms erfordert das Laden der Seite über HTTPS.", + "An error occurred while starting screensharing." : "Es ist ein Fehler beim Start der Bildschirmübertragung aufgetreten.", + "Select virtual background" : "Virtuellen Hintergrund auswählen", + "Show your screen" : "Deinen Bildschirm übertragen", + "Stop screensharing" : "Bildschirmübertragung beenden", + "Mute others" : "Andere Stummschalten", + "Start recording" : "Aufnahme beginnen", + "Set up breakout rooms" : "Gruppenräume einrichten", + "Download attendance list" : "Anwesenheitsliste herunterladen", + "Open Calendar" : "Kalender öffnen", + "Remove participant {name}" : "Teilnehmer {name} entfernen", + "Would you like to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Diese Unterhaltung wird nach %n Tag Inaktivität für alle gelöscht","Diese Unterhaltung wird nach %n Tagen Inaktivität für alle gelöscht"], + "Are you sure you want to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "Delete now" : "Jetzt löschen", + "Keep" : "Behalten", + "Open dialpad" : "Wählfeld öffnen", + "Select a region" : "Eine Region auswählen", + "Local time: {time}" : "Ortszeit: {time}", + "Scheduled {datetime}" : "Geplant {datetime}", + "Scheduled for {datetime}" : "Geplant für {datetime}", + "Search …" : "Suche …", + "Message without mention" : "Nachricht ohne Erwähnung", + "Mention myself" : "Mich selbst erwähnen", + "Mention everyone" : "Alle erwähnen", + "Select a conversation" : "Eine Unterhaltung auswählen", + "Select a mode" : "Einen Modus auswählen", + "You do not have permissions to access this conversation." : "Du hast nicht die Berechtigung auf diese Unterhaltung zuzugreifen", + "Join a different conversation or start a new one." : "Nimm an einer anderen Unterhaltung teil oder beginne eine neue.", + "The conversation does not exist" : "Die Unterhaltung existiert nicht", + "Join a conversation or start a new one!" : "Trete einer Unterhaltung bei oder starte eine neue!", + "Duplicate session" : "Doppelte Sitzung", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Diese Unterhaltung wurde in einem anderen Tab geöffnet. Die aktuelle Serverversion unterstützt das Öffnen einer Konversation in mehreren Tabs nicht.", + "Creating and joining a conversation with \"{userid}\"" : "Eine Unterhaltung mit \"{userid}\" erstellen und daran teilnehmen", + "Join a conversation or start a new one" : "Trete einer Unterhaltung bei oder starte eine neue", + "Error while joining the conversation" : "Fehler beim Beitreten zur Unterhaltung", + "Another user" : "Ein anderer Benutzer", + "Hey! Are you using the list style or message bubbles?" : "Hey! Verwendest du Talk im Listenstil oder mit Sprechblasen?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-Benutzer", + "User password" : "Benutzerpasswort", + "Talk conversation" : "Talk-Unterhaltung", + "Skip TLS verification" : "TLS-Überprüfung überspringen", + "Matrix server URL" : "Matrix-Server-URL", + "User" : "Benutzer", + "Matrix channel" : "Matrix-Kanal", + "Mattermost server URL" : "Mattermost-Server-URL", + "Mattermost user" : "Mattermost-Benutzer", + "Team name" : "Team-Name", + "Channel name" : "Kanal-Name", + "Rocket.Chat server URL" : "Rocket.Chat-Server-URL", + "User name or email address" : "Benutzername oder E-Mail-Adresse", + "Rocket.Chat channel" : "Rocket.Chat-Kanal", + "Zulip server URL" : "Zulip-Server-URL", + "Bot user name" : "Bot-Benutzername", + "Bot API key" : "Bot-API-Schlüssel", + "Zulip channel" : "Zulip-Kanal", + "API token" : "API-Token", + "Slack channel" : "Slack-Kanal", + "Server ID or name" : "Server-ID oder -Name", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (mit vorangestelltem \"ID:\") oder Name", + "Channel" : "Kanal", + "Login" : "Anmeldung", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC Server-URL (z. B. chat.freenode.net:6667)", + "Nickname" : "Spitzname", + "Connection password" : "Verbindungs-Passwort", + "IRC channel" : "IRC-Kanal", + "Channel password" : "Kanal-Passwort", + "NickServ nickname" : "NickServ-Spitzname", + "NickServ password" : "NickServ-Passwort", + "Use TLS" : "TLS verwenden", + "Use SASL" : "SASL verwenden", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Client-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Thread-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber Server-URL", + "MUC server URL" : "MUC-Server-URL", + "Jabber ID" : "Jabber-ID", + "Pinned messages" : "Angeheftete Nachrichten", + "Media" : "Medien", + "Polls" : "Umfragen", + "Deck cards" : "Deck-Karten", + "Voice messages" : "Sprachnachrichten", + "Locations" : "Orte", + "Call recordings" : "Anrufaufnahmen", + "Audio" : "Audio", + "Show all pinned messages" : "Alle angehefteten Nachrichten anzeigen", + "Show all media" : "Alle Medien anzeigen", + "Show all files" : "Alle Dateien anzeigen", + "Show all polls" : "Alle Umfragen anzeigen", + "Show all deck cards" : "Alle Deck-Karten anzeigen", + "Show all voice messages" : "Alle Sprachnachrichten anzeigen", + "Show all locations" : "Alle Orte anzeigen", + "Show all call recordings" : "Alle Anrufaufnahmen ansehen", + "Show all audio" : "Alle Audiodateien anzeigen", + "Show all other" : "Alle sonstigen anzeigen", + "Follow conversation settings" : "Unterhaltungseinstellungen folgen", + "Group" : "Gruppe", + "Team" : "Team", + "You reconnected to the call" : "Du hast dich wieder mit dem Anruf verbunden", + "{actor} reconnected to the call" : "{actor} hat sich wieder mit dem Anruf verbunden", + "You added {user0} and {user1}" : "Du hast {user0} und {user1} hinzugefügt", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Du hast {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added you and {user0}" : "Die Administration hat dich und {user0} hinzugefügt", + "{actor} added you and {user0}" : "{actor} hat dich und {user0} hinzugefügt", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat dich, {user0} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer hinzugefügt","{actor} hat dich, {user0} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added {user0} and {user1}" : "Die Administration hat {user0} und {user1} hinzugefügt", + "{actor} added {user0} and {user1}" : "{actor} hat {user0} und {user1} hinzugefügt", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "You removed {user0} and {user1}" : "Du hast {user0} und {user1} entfernt", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer entfernt","Du hast {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "An administrator removed you and {user0}" : "Die Administration hat dich und {user0} entfernt", + "{actor} removed you and {user0}" : "{actor} hat dich und {user0} entfernt", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer entfernt","Die Administration hat dich, {user0} und %n weitere Teilnehmer entfernt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer entfernt","{actor} hat dich, {user0} und %n weitere Teilnehmer entfernt"], + "An administrator removed {user0} and {user1}" : "Die Administration hat {user0} und {user1} entfernt", + "{actor} removed {user0} and {user1}" : "{actor} hat {user0} und {user1} entfernt", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "You and {user0} joined the call" : "Du und {user0} sind dem Anruf beigetreten", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} und %n weiterer Teilnehmer sind dem Anruf beigetreten","Du, {user0} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "{user0} and {user1} joined the call" : "{user0} und {user1} sind dem Anruf beigetreten", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer sind dem Anruf beigetreten","{user0}, {user1} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "You and {user0} left the call" : "Du und {user0} haben den Anruf verlassen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} und %n weiterer Teilnehmer haben den Anruf verlassen","Du, {user0} und %n weitere Teilnehmer haben den Anruf verlassen"], + "{user0} and {user1} left the call" : "{user0} und {user1} haben den Anruf verlassen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer haben den Anruf verlassen","{user0}, {user1} und %n weitere Teilnehmer haben den Anruf verlassen"], + "You promoted {user0} and {user1} to moderators" : "Du hast {user0} und {user1} zu Moderatoren ernannt", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Du hast {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted you and {user0} to moderators" : "Die Administration hat dich und {user0} zu Moderatoren ernannt", + "{actor} promoted you and {user0} to moderators" : "{actor} hat dich und {user0} zu Moderatoren ernannt", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat dich, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","{actor} hat dich, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted {user0} and {user1} to moderators" : "Die Administration hat {user0} und {user1} zu Moderatoren ernannt", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} hat {user0} und {user1} zu Moderatoren ernannt", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren befördert","{actor} hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "You demoted {user0} and {user1} from moderators" : "Du hast {user0} und {user1} von der Moderation abberufen", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du hast {user0}, {user1} und %n weiteren Teilnehmer von der Moderation abberufen","Du hast {user0}, {user1} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted you and {user0} from moderators" : "Die Administration hat dich und {user0} von der Moderation abberufen", + "{actor} demoted you and {user0} from moderators" : "{actor} hat dich und {user0} von der Moderation abberufen", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Die Administration hat dich, {user0} und %n weiteren Teilnehmer von Moderatoren abberufen","Die Administration hat dich, {user0} und %n weitere Teilnehmer von Moderatoren abberufen"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} hat dich, {user0} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat dich, {user0} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted {user0} and {user1} from moderators" : "Die Administration hat {user0} und {user1} von der Moderation abberufen", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} hat {user0} und {user1} von der Moderation abberufen", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Die Administration hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","Die Administration hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "You:" : "Du:", + "You: {lastMessage}" : "Du: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Der Server wurde aktualisiert.", + "(edited by you)" : "(Von dir bearbeitet)", + "(edited by a deleted user)" : "(Von einem gelöschten Benutzer bearbeitet)", + "(edited by {moderator})" : "(Bearbeitet von {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du versuchst, an einer Unterhaltung teilzunehmen, während du in einem anderen Fenster oder Gerät eine aktive Sitzung hast. Dies wird derzeit von Nextcloud Talk nicht unterstützt. Was möchtest du tun?", + "Leave this page" : "Diese Seite verlassen", + "Join here" : "Hier beitreten", + "Deck card has been posted to {conversation}" : "Deckkarte wurde nach {conversation} gepostet", + "An error occurred while posting deck card to conversation" : "Es ist ein Fehler beim Posten der Deckkarte an die Unterhaltung aufgetreten", + "Post to a conversation" : "An eine Unterhaltung posten", + "Post to conversation" : "An eine Unterhaltung posten", + "The recording failed. Please contact your administrator." : "Die Aufnahme ist fehlgeschlagen. Bitte wende dich an deine Administration.", + "Location has been posted to {conversation}" : "Der Standort wurde nach {conversation} gepostet", + "An error occurred while posting location to conversation" : "Es ist ein Fehler beim Posten des Ortes an die Unterhaltung aufgetreten.", + "Share to a conversation" : "Mit einer Unterhaltung teilen", + "Share to conversation" : "Mit der Unterhaltung teilen", + "In conversation" : "In einer Unterhaltung", + "Search in conversation: {conversation}" : "Suche in Unterhaltung: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Deine Anfragen werden derzeit aufgrund des Brute-Force-Schutzes gedrosselt", + "Error while clearing conversation history" : "Fehler beim Löschen des Unterhaltungsverlaufs", + "Error occurred while allowing guests" : "Es ist ein Fehler beim Zulassen von Gästen aufgetreten", + "Error occurred while disallowing guests" : "Fehler beim Nichtzulassen von Gästen", + "Error occurred when restricting the conversation to moderator" : "Fehler beim Beschränken der Unterhaltung auf den Moderator aufgetreten", + "Error occurred when opening the conversation to everyone" : "Beim Öffnen der Unterhaltung für alle ist ein Fehler aufgetreten", + "Conversation password has been saved" : "Passwort für diese Unterhaltung wurde gespeichert", + "Conversation password has been removed" : "Passwort für diese Unterhaltung wurde entfernt", + "Error occurred while saving conversation password" : "Es ist ein Fehler beim Speichern des Passworts für die Unterhaltung aufgetreten", + "Call recording is starting." : "Gesprächsaufnahme startet.", + "Call recording stopped while starting." : "Unterhaltungsaufnahme beim Start angehalten.", + "Call recording stopped. You will be notified once the recording is available." : "Anrufaufzeichnung angehalten. Du wirst benachrichtigt, sobald die Aufnahme zur Verfügung steht.", + "Conversation picture set" : "Unterhaltungsbild festgelegt", + "Conversation picture deleted" : "Unterhaltungsbild gelöscht", + "Could not delete the conversation picture" : "Unterhaltungsbild konnte nicht gelöscht werden", + "Could not remove the automatic expiration" : "Der automatische Ablauf konnte nicht entfernt werden", + "Could not post message: {errorMessage}" : "Nachricht konnte nicht gesendet werden: {errorMessage}", + "Participant is banned successfully" : "Teilnehmer wurde gesperrt", + "Error while banning the participant" : "Fehler beim Sperren des Teilnehmers", + "An error occurred while fetching the participants" : "Es ist ein Fehler beim Abrufen der Teilnehmer aufgetreten", + "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} gesendet werden", + "Invitations sent" : "Einladungen gesendet", + "Error occurred when sending invitations" : "Beim Senden der Einladungen ist ein Fehler aufgetreten", + "Failed to join the conversation." : "Beitreten zur Unterhaltung fehlgeschlagen", + "An error occurred while creating breakout rooms" : "Es ist ein Fehler beim Erstellen von Breakout-Räumen aufgetreten.", + "An error occurred while re-ordering the attendees" : "Es ist ein Fehler beim Neuordnen der Teilnehmer aufgetreten.", + "An error occurred while deleting breakout rooms" : "Es ist ein Fehler beim Löschen von Breakout-Räumen aufgetreten.", + "An error occurred while starting breakout rooms" : "Es ist ein Fehler beim Starten vom Breakout-Räumen aufgetreten.", + "An error occurred while stopping breakout rooms" : "Es ist ein Fehler beim Stoppen von Breakout-Räumen aufgetreten.", + "An error occurred while sending a message to the breakout rooms" : "Es ist ein Fehler beim Senden einer Nachricht an die Gruppenräume aufgetreten.", + "An error occurred while requesting assistance" : "Es ist ein Fehler beim Anfordern der Unterstützung aufgetreten.", + "An error occurred while resetting the request for assistance" : "Es ist ein Fehler beim Zurücksetzen der Hilfeanfrage aufgetreten.", + "An error occurred while joining breakout room" : "Es ist ein Fehler beim Beitritt zum Gruppenraumraum aufgetreten", + "Failed to rename the thread" : "Thema konnte nicht umbenannt werden", + "Error fetching upcoming events" : "Fehler beim Abrufen der bevorstehenden Termine", + "Error fetching upcoming reminders" : "Fehler beim Abrufen der anstehenden Erinnerungen", + "An error occurred while accepting an invitation" : "Es ist ein Fehler bei der Annahme einer Einladung aufgetreten", + "An error occurred while rejecting an invitation" : "Es ist ein Fehler bei der Zurückweisung einer Einladung aufgetreten", + "{guest} (guest)" : "{guest} (Gast)", + "Poll draft has been saved" : "Umfrageentwurf wurde gespeichert", + "An error occurred while saving the draft" : "Beim Speichern des Entwurfs ist ein Fehler aufgetreten", + "An error occurred while submitting your vote" : "Es ist ein Fehler beim Absenden deiner Stimme aufgetreten.", + "An error occurred while ending the poll" : "Es ist ein Fehler beim Beenden der Umfrage aufgetreten.", + "An error occurred while deleting the poll draft" : "Es ist ein Fehler beim Löschen des Umfrageentwurfs aufgetreten", + "Poll \"{name}\" was created by {user}. Click to vote" : "Umfrage \"{name}\" wurde von {user} erstellt. Klicke, um abzustimmen", + "Failed to add reaction" : "Hinzufügen der Reaktion fehlgeschlagen", + "Failed to remove reaction" : "Entfernen der Reaktion fehlgeschlagen", + "The server is in maintenance mode." : "Der Server befindet sich im Wartungsmodus.", + "Federated server was updated." : "Der Federated-Server wurde aktualisiert.", + "Error while uploading file \"{fileName}\"" : "Fehler beim Hochladen der Datei \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nicht genügend freier Speicherplatz zum Hochladen von \"{fileName}\"", + "You are not allowed to share files" : "Keine Berechtigung, Dateien zu teilen", + "Error while sharing file" : "Fehler beim Teilen der Datei", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Der von dir verwendete Browser wird von Nextcloud Talk nicht vollständig unterstützt. Bitte verwende die neueste Version von Mozilla Firefox, Microsoft Edge, Google Chrome, Opera oder Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n Stunde","In %n Stunden"], + "_%n minute _::_%n minutes_" : ["%n Minute","%n Minuten"], + "In {hours} and {minutes}" : "In {hours} und {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n Minute","In %n Minuten"], + "Later today – {timeLocale}" : "Später heute – {timeLocale}", + "Set time for later today" : "Zeit für später heute einstellen", + "Tomorrow – {timeLocale}" : "Morgen – {timeLocale}", + "Set time for tomorrow" : "Zeit für morgen einstellen", + "This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}", + "Set time for this weekend" : "Zeit für dieses Wochenende einstellen", + "Next week – {timeLocale}" : "Nächste Woche – {timeLocale}", + "Set time for next week" : "Zeit für nächste Woche einstellen", + "Message link copied to clipboard" : "Nachrichtenlink in die Zwischenablage kopiert", + "Conversation link copied to clipboard" : "Link zur Unterhaltung in die Zwischenablage kopiert", + "The link could not be copied" : "Der Link konnte nicht kopiert werden", + "Error while parsing a PROPFIND error" : "Fehler beim Parsen eines PROPFIND-Fehlers", + "Sending signaling message has failed" : "Das Senden der Signaling-Nachricht ist fehlgeschlagen", + "Lost connection to signaling server. Trying to reconnect." : "Verbindung zum Signaling-Server verloren. Es wird versucht, diese wiederherzustellen.", + "Lost connection to signaling server." : "Verbindung zum Signaling-Server verloren.", + "Connecting is taking longer than expected …" : "Verbinden dauert länger als erwartet …", + "Failed to connect. Retrying …" : "Verbindung konnte nicht hergestellt werden. Erneuter Versuch …", + "Failed to connect. The signaling server may be set up incorrectly" : "Verbindung konnte nicht hergestellt werden Der Signaling-Server könnte falsch eingerichtet sein", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Der eingerichtete Signalisierungsserver muss aktualisiert werden, damit er mit dieser Version von Talk kompatibel ist. Bitte wende dich an deine Administration.", + "Please restart the app." : "Bitte die App neu starten.", + "Please reload the page." : "Bitte die Seite neu laden.", + "Please try to restart the app." : "Bitte versuche, die App neu zu starten.", + "Please try to reload the page." : "Bitte versuche, die Seite neu zu laden.", + "Do not disturb" : "Nicht stören", + "Away" : "Abwesend", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Lautsprecher {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Anscheinend sprichst du während du stummgeschaltet bist. Bitte schalte die Stummschaltung aus, damit die Anderen dich hören können.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Mit mindestens einem Teilnehmer konnte keine Verbindung hergestellt werden. Für dein Szenario wird möglicherweise ein TURN-Server benötigt. Bitte deine Administration, diesen gemäß {linkstart} dieser Dokumentation {linkend} einzurichten.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dies dauert länger als erwartet. Sind die Zugriffsrechte für Medien bereits erteilt (oder zurückgenommen)? Falls ja, dann starte deinen Browser neu, dann sonst kein Zugriff auf Audio und Video möglich ist", + "Access to microphone & camera is only possible with HTTPS" : "Zugriff auf Mikrofon & Kamera ist nur über HTTPS möglich", + "Please move your setup to HTTPS" : "Bitte stelle auf HTTPS um", + "Access to microphone & camera was denied" : "Zugriff auf Mikrofon & Kamera wurde verweigert", + "WebRTC is not supported in your browser" : "WebRTC wird von deinem Browser nicht unterstützt", + "Please use a different browser like Firefox or Chrome" : "Bitte benutze einen anderen Browser, wie z. B. Firefox oder Chrome", + "Error while accessing microphone & camera" : "Fehler beim Zugriff auf Mikrofon & Kamera", + "%s Talk on your mobile devices" : "%s Talk auf deinen mobilen Geräte", + "Join conversations at any time, anywhere, on any device." : "Immer, überall und auf allen Geräten einer Unterhaltung beitreten.", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "__language_name__" : "Deutsch (Persönlich: Du)", + "Webhook Demo" : "Webhook-Demo", + "Call summary (%s)" : "Protokoll (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Der Anruf-Zusammenfassungs-Bot veröffentlicht nach der Unterhaltung eine Übersichtsnachricht, in der alle Teilnehmenden und die Aufgaben aufgeführt sind", + "Tasks" : "Aufgaben", + "Notes" : "Notizen", + "Reports" : "Berichte", + "Decisions" : "Entscheidungen", + "Agenda" : "Agenda", + "Call summary" : "Protokoll", + "Call summary - {title}" : "Protokoll - {title}", + "Talk conversation for event" : "Talk-Unterhaltung für ein Ereignis", + "Client Push is installed, this improves the performance of desktop clients." : "Client-Push installiert ist. Dies verbessert die Leistung von Desktop-Clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push}ist nicht installiert. Dies kann zu Leistungsproblemen bei der Verwendung von Desktop-Clients führen.", + "Next meeting" : "Nächste Besprechung", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Plane ein Meeting aus deinem Kalender heraus. Ein Talk-Gespräch muss als Ort festgelegt werden, um hier angezeigt zu werden", + "Join conversations from remote Nextcloud servers" : "Unterhaltungen von entfernten Nextcloud-Servern beitreten", + "Your default media state has been saved" : "Dein Standard-Medienstatus wurde gespeichert", + "Set reminder for later today" : "Erinnerung für nachher erstellen", + "Set reminder for tomorrow" : "Erinnerung für morgen erstellen", + "Set reminder for this weekend" : "Erinnerung für dieses Wochenende erstellen", + "Set reminder for next week" : "Erinnerung für nächste Woche erstellen", + "Generate summary" : "Zusammenfassung erstellen", + "Open poll • You voted already" : "Offene Umfrage • Du hast bereits abgestimmt", + "Open poll • Click to vote" : "Offene Umfrage • Klicken, um abzustimmen", + "Poll • Ended" : "Umfrage・Beendet", + "Talk recording from {time} ({conversation})" : "Talk-Aufnahme von {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Umfrageergebnis • %n Stimme","Umfrageergebnisse • %n Stimmen"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Offene Umfrage • %n Stimme","Offene Umfrage • %n Stimmen"], + "Submit vote" : "Stimme übermitteln", + "Your privacy setting has been saved" : "Deine Datenschutzeinstellungen wurde gespeichert", + "Your personal setting has been saved" : "Deine persönliche Einstellung wurde gespeichert", + "Failed to save sounds setting" : "Toneinstellungen konnten nicht gespeichert werden", + "Sounds setting saved" : "Toneinstellung gespeichert", + "Always shown if recording consent is required" : "Wird immer angezeigt, wenn eine Zustimmung zur Aufzeichnung erforderlich ist", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk wurde aktualisiert. Du kannst keinen Anruf starten oder beitreten.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du bist der Unterhaltung in einem anderen Fenster oder Gerät beigetreten. Dies wird derzeit von Nextcloud Talk nicht unterstützt, daher wurde diese Sitzung geschlossen.", + "Nextcloud Talk was updated." : "Nextcloud Talk wurde aktualisiert.", + "Nextcloud is in maintenance mode." : "Nextcloud befindet sich im Wartungsmodus.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation wurde aktualisiert.", + "Enable live translation" : "Live-Übersetzung aktivieren", + "I picked list style" : "Ich habe den Listenstil ausgewählt", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Verwendest du Talk im Listenstil oder mit Sprechblasen?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/de_DE.js b/l10n/de_DE.js new file mode 100644 index 0000000..0da2f43 --- /dev/null +++ b/l10n/de_DE.js @@ -0,0 +1,2262 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "Eine Unterhaltung", + "(Duration %s)" : "(Dauer %s)", + "You attended a call with {user1}" : "Sie haben an einem Anruf mit {user1} teilgenommen", + "_%n guest_::_%n guests_" : ["%n Gast","%n Gäste"], + "You attended a call with {user1} and {user2}" : "Sie haben an einem Anruf mit {user1} und {user2} teilgenommen", + "You attended a call with {user1}, {user2} and {user3}" : "Sie haben an einem Anruf mit {user1}, {user2} und {user3} teilgenommen", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sie haben an einem Anruf mit {user1}, {user2}, {user3} und {user4} teilgenommen", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sie haben an einem Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} teilgenommen", + "_%n other_::_%n others_" : ["%n weiterer","%n weitere"], + "{actor} invited you to {call}" : "{actor} hat Sie zu {call} eingeladen", + "You were invited to a conversation or had a call" : "Sie wurden zu einer Unterhaltung eingeladen oder hatten einen Anruf", + "Other activities" : "Andere Aktivitäten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Willkommen zu Nextcloud Talk!\nIn dieser Unterhaltung werden Sie über neue Funktionen in Nextcloud Talk informiert.", + "## New in Talk %s" : "## Neu in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge und Safari können jetzt zur Teilnahme an Audio- und Videoanrufen verwendet werden", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Eins-zu-Eins-Unterhaltungen sind jetzt dauerhaft und können nicht mehr versehentlich in eine Gruppenunterhaltung gewandelt werden. Wenn ein Teilnehmer eine Unterhaltung verlässt, so wird die Unterhaltung jetzt nicht mehr automatisch gelöscht. Nur wenn beide Teilnehmer gehen, so wird die Unterhaltung vom Server gelöscht", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Jetzt können alle Teilnehmer durch das Posten von \"@all\" in den Chat benachrichtigt werden", + "- With the \"arrow-up\" key you can repost your last message" : "- Mit der \"Pfeil nach oben\"-Taste können Sie Ihre letzte Nachricht nochmals senden", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk beherrscht jetzt Befehle. Senden Sie \"/help\" als Nachricht, um zu sehen, ob der Administrator welche eingerichtet hat", + "- With projects you can create quick links between conversations, files and other items" : "- Mit Projekten können Sie einfach und schnell Verknüpfungen zwischen Unterhaltungen, Dateien und anderen Elementen erstellen", + "- You can now mention guests in the chat" : "- Sie können nun Gäste im Chat erwähnen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Unterhaltungen können jetzt eine Lobby haben. Dies erlaubt Moderatoren dem Chat und dem Anruf beizutreten, um das Meeting vorzubereiten, während andere Benutzer und Gäste warten müssen", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sie können jetzt direkt auf Nachrichten antworten, um anderen Benutzern mehr über Ihre Nachrichten mitzuteilen.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Die Suche nach Unterhaltungen und Teilnehmern durchsucht jetzt auch vorhandene Unterhaltungen. Das macht es viel einfacher, frühere Unterhaltungen zu finden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Wenn die Circles-App installiert ist, können jetzt auch benutzerdefinierte Gruppen zu Unterhaltungen hinzugefügt werden", + "- Check out the new grid and call view" : "- Sehen Sie sich die neue Kachel- und Sprecheransicht an", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sie können jetzt Dateien direkt von Ihrem Gerät in den Chat hochladen und per Drag'n'Drop übertragen.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Geteilte Dateien werden jetzt direkt in der Chatansicht mit den Betrachteranwendungen geöffnet", + "- You can now search for chats and messages in the unified search in the top bar" : "- Sie können jetzt in der einheitlichen Suche in der oberen Leiste nach Chats und Nachrichten suchen", + "- Spice up your messages with emojis from the emoji picker" : "- Peppen Sie Ihre Nachrichten mit Emojis aus der Emoji-Auswahl auf", + "- You can now change your camera and microphone while being in a call" : "Sie können jetzt Ihre Kamera und Ihr Mikrofon wechseln, während Sie telefonieren", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Geben Sie Ihren Unterhaltungen einen Kontext mit einer Beschreibung und öffnen Sie diese, damit eingeloggte Benutzer diese finden und selbst teilnehmen können", + "- See a read status and send failed messages again" : "- Lesestatus sehen und fehlgeschlagene Nachrichten erneut senden", + "- Raise your hand in a call with the R key" : "- Heben Sie Ihre Hand in einem Anruf durch drücken der Taste R", + "- Join the same conversation and call from multiple devices" : "- Treten Sie derselben Unterhaltung von verschiedenen Geräten aus bei", + "- Send voice messages, share your location or contact details" : "- Senden Sie Sprachnachrichten, teilen Sie Ihren Aufenthaltsort oder Ihre Adressdaten", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Fügen Sie Gruppen zu einer Unterhaltung hinzu und die Gruppenmitglieder werden automatisch als Teilnehmer hinzugefügt", + "- A preview of your audio and video is shown before joining a call" : "- Eine Vorschau von Audio und Video wird angezeigt, bevor Sie einen Anruf tätigen", + "- You can now blur your background in the newly designed call view" : "- In der neu gestalteten Anrufansicht können Sie jetzt den Hintergrund unscharf machen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren können nun allgemeine und individuelle Berechtigungen an Teilnehmer vergeben", + "- You can now react to chat messages" : "- Sie können jetzt auf Chatnachrichten reagieren", + "- In the sidebar you can now find an overview of the latest shared items" : "- In der Seitenleiste finden Sie jetzt eine Übersicht über die zuletzt geteilten Elemente", + "- Use a poll to collect the opinions of others or settle on a date" : "- eine Umfrage verwenden, um die Meinungen anderer einzuholen oder sich auf einen Zeitpunkt zu einigen", + "- Configure an expiration time for chat messages" : "- Ablaufdatum für Chatnachrichten konfigurieren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anrufe starten, ohne andere in großen Gesprächen zu benachrichtigen. Sie können einzelne Anrufbenachrichtigungen senden, sobald der Anruf begonnen hat.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatnachrichten senden, ohne die Empfänger zu benachrichtigen, für Fälle die nicht dringend sind", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis können jetzt automatisch vervollständigt werden, indem ein \":\" eingegeben wird", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Verknüpfen Sie verschiedene Artikel mit dem neuen Smart Picker, indem Sie ein \"/\" eingeben", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoren können jetzt Gruppenräume erstellen (erfordert das Hochleistungs-Backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Anrufe können jetzt aufgezeichnet werden (erfordert das Hochleistungs-Backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Unterhaltungen können nun einen Avatar oder ein Icon haben", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle Hintergründe sind nun zusätzlich zum verwischten Hintergrund in Video-Unterhaltungen möglich", + "- Reactions are now available during calls" : "- Reaktionen sind nun auch in Anrufen möglich", + "- Typing indicators show which users are currently typing a message" : "- Schreibindikatoren zeigen, welche Benutzer dabei sind, eine Nachricht zu schreiben", + "- Groups can now be mentioned in chats" : "- Gruppen können nun in Chats erwähnt werden", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Anrufaufnahmen werden automatisch transkribiert, wenn eine entsprechende Anbieterapp registriert ist", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatnachrichten können übersetzt werden, wenn eine Übersetzungsanbieter-App registriert ist", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kann jetzt in _Chat_nachrichten verwendet werden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "– Zur Implementierung von Bots stehen jetzt Webhooks zur Verfügung. Weitere Informationen finden Sie in der Dokumentation: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Legen Sie eine Erinnerung für eine Chatnachricht fest, um später erneut benachrichtigt zu werden", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Verwenden Sie die **Notiz an mich**-Unterhaltung, um Notizen zu machen und Informationen zwischen Ihren Geräten auszutauschen", + "- Captions allow to send a message with a file at the same time" : "- Untertitel ermöglichen das gleichzeitige Senden einer Nachricht mit einer Datei", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Das Video des Sprechers ist jetzt beim Teilen des Bildschirms sichtbar und die Anrufreaktionen sind animiert", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Nachrichten können jetzt 6 Stunden lang von angemeldeten Autoren und Moderatoren bearbeitet werden", + "- Unsent message drafts are now saved in your browser" : "- Nicht gesendete Nachrichtenentwürfe werden jetzt in Ihrem Browser gespeichert", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchats können jetzt im Verbund mit anderen Talk-Servern geführt werden", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoren können jetzt Konten und Gäste sperren, um zu verhindern, dass sie erneut an einer Unterhaltung teilnehmen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Anstehende Anrufe aus verknüpften Kalenderterminen und Abwesenheitsvertretungen werden jetzt in Unterhaltungen angezeigt", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Anrufe können jetzt im Verbund mit anderen Talk-Servern getätigt werden (erfordert das Hochleistungs-Backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Wir stellen den Nextcloud Talk Desktop-Client für Windows, macOS und Linux vor: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zusammenfassung von Anrufaufzeichnungen und ungelesenen Nachrichten in Chats mit dem Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Verbesserte Meetings mit Erkennung von Gästen, die über ihre E-Mail-Adresse eingeladen werden, Import von Teilnehmerlisten, Entwürfen für Umfragen und Herunterladen von Teilnehmerlisten für Anrufe", + "- Archive conversations to stay focused" : "- Archivieren von Gesprächen, um konzentriert zu bleiben", + "- Schedule a meeting into your calendar from within a conversation" : "- Eine Besprechung in Ihrem Kalender aus einer Unterhaltung heraus planen", + "- Search for messages of the current conversation directly in the right sidebar" : "- Nach Nachrichten der aktuellen Unterhaltung direkt in der rechten Seitenleiste suchen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Mit der neuen kompakten Liste sieht man mehr Unterhaltungen auf einen Blick (in den Gesprächseinstellungen aktivieren)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Besprechungsunterhaltungen werden jetzt mit dem Titel und der Beschreibung aus dem Kalender synchronisiert und mit einem Suchfilter ausgeblendet, bis sie kurz vor dem Beginn stehen", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Unterhaltungen in den Benachrichtigungseinstellungen als sensibel markieren, um den Inhalt der Nachricht aus der Unterhaltungsliste und den Benachrichtigungen auszublenden", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Um Push-Benachrichtigungen während \"Bitte nicht stören\" zu erhalten, markieren Sie Unterhaltungen als wichtig", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Fügen Sie andere Teilnehmer zu einem Einzelgespräch hinzu, um im Handumdrehen ein neues Gruppengespräch zu erstellen.", + "- Use threads to keep your chat and discussions organized" : "- Themen verwenden, um Ihre Chats und Diskussionen zu organisieren", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-Transkriptionen sind jetzt während des Anrufs verfügbar (erfordert die Live-Transkriptions-ExApp und das Hochleistungs-Backend)", + "- Moderators can now pin messages so they are kept at the top" : "- die Moderation kann jetzt Nachrichten anheften, sodass diese oben bleiben", + "- Schedule a message to send it at a later time" : "- Den Versand einer Nachricht zu einem späteren Zeitpunkt planen", + "_All %n participant_::_All %n participants_" : ["%n Teilnehmer","Alle %n Teilnehmer"], + "Talk updates ✅" : "Talk Aktualisierungen ✅", + "Reaction deleted by author" : "Reaktion vom Autor gelöscht", + "{actor} created the conversation" : "{actor} hat die Unterhaltung erstellt", + "You created the conversation" : "Sie haben die Unterhaltung erstellt", + "System created the conversation" : "Das System hat die Unterhaltung erstellt", + "An administrator created the conversation" : "Ein Administrator hat die Unterhaltung erstellt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hat die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sie haben die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ein Administrator hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "{actor} set the description" : "{actor} hat die Beschreibung gesetzt", + "You set the description" : "Sie haben die Beschreibung gesetzt", + "An administrator set the description" : "Ein Administrator hat die Beschreibung gesetzt", + "{actor} removed the description" : "{actor} hat die Beschreibung entfernt", + "You removed the description" : "Sie haben die Beschreibung entfernt", + "An administrator removed the description" : "Ein Administrator hat die Beschreibung entfernt", + "You started a silent call" : "Sie haben einen stillen Anruf gestartet", + "Outgoing silent call" : "Ausgehender stiller Anruf", + "{actor} started a silent call" : "{actor} hat einen stillen Anruf gestartet", + "Incoming silent call" : "Ankommender stiller Anruf", + "You started a call" : "Sie haben einen Anruf begonnen", + "Outgoing call" : "Ausgehender Anruf", + "{actor} started a call" : "{actor} hat einen Anruf begonnen", + "Incoming call" : "Eingehender Anruf", + "{actor} joined the call" : "{actor} ist dem Anruf beigetreten", + "You joined the call" : "Sie sind dem Anruf beigetreten", + "{actor} left the call" : "{actor} hat den Anruf verlassen", + "You left the call" : "Sie haben den Anruf verlassen", + "{actor} unlocked the conversation" : "{actor} hat die Unterhaltung freigegeben", + "You unlocked the conversation" : "Sie haben die Unterhaltung freigegeben", + "An administrator unlocked the conversation" : "Ein Administrator hat die Unterhaltung freigegeben", + "{actor} locked the conversation" : "{actor} hat die Unterhaltung gesperrt", + "You locked the conversation" : "Sie haben die Unterhaltung gesperrt", + "An administrator locked the conversation" : "Ein Administrator hat die Unterhaltung gesperrt", + "{actor} limited the conversation to the current participants" : "{actor} beschränkte die Unterhaltung auf die aktuellen Teilnehmer", + "You limited the conversation to the current participants" : "Sie haben die Unterhaltung auf die aktuellen Teilnehmer beschränkt", + "An administrator limited the conversation to the current participants" : "Ein Administrator hat die Unterhaltung auf die aktuellen Teilnehmer beschränkt", + "{actor} opened the conversation to registered users" : "{actor} öffnete die Unterhaltung für registrierte Benutzer", + "You opened the conversation to registered users" : "Sie haben die Unterhaltung für registrierte Benutzer geöffnet", + "An administrator opened the conversation to registered users" : "Ein Administrator öffnete die Unterhaltung für registrierte Benutzer", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "You opened the conversation to registered users and users created with the Guests app" : "Sie haben die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Die Administration hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "The conversation is now open to everyone" : "Die Unterhaltung ist nun für jeden geöffnet", + "{actor} opened the conversation to everyone" : "{actor} hat die Unterhaltung für jeden geöffnet", + "You opened the conversation to everyone" : "Sie haben die Unterhaltung für Jedermann geöffnet", + "{actor} restricted the conversation to moderators" : "{actor} hat die Unterhaltung auf Moderatoren beschränkt", + "You restricted the conversation to moderators" : "Sie haben die Unterhaltung auf Moderatoren beschränkt", + "{actor} started breakout rooms" : "{actor} hat Gruppenräume gestartet", + "You started breakout rooms" : "Sie haben Gruppenräume gestartet", + "{actor} stopped breakout rooms" : "{actor} hat Gruppenräume beendet", + "You stopped breakout rooms" : "Sie haben Gruppenräume beendet", + "{actor} allowed guests" : "{actor} hat Gäste zugelassen", + "You allowed guests" : "Sie haben Gäste zugelassen", + "An administrator allowed guests" : "Ein Administrator hat Gäste erlaubt", + "{actor} disallowed guests" : "{actor} hat Gäste untersagt", + "You disallowed guests" : "Sie haben Gäste untersagt", + "An administrator disallowed guests" : "Ein Administrator hat den Gastzugriff untersagt", + "{actor} set a password" : "{actor} hat ein Passwort vergeben", + "You set a password" : "Sie haben ein Passwort vergeben", + "An administrator set a password" : "Ein Administrator hat ein Passwort gesetzt", + "{actor} removed the password" : "{actor} hat das Passwort entfernt", + "You removed the password" : "Sie haben das Passwort entfernt", + "An administrator removed the password" : "Ein Administrator hat das Passwort entfernt", + "{actor} added {user}" : "{actor} hat {user} hinzugefügt", + "You joined the conversation" : "Sie sind der Unterhaltung beigetreten", + "{actor} joined the conversation" : "{actor} ist der Unterhaltung beigetreten", + "You added {user}" : "Sie haben {user} hinzugefügt", + "{actor} added you" : "{actor} hat Sie hinzugefügt", + "An administrator added you" : "Ein Administrator hat Sie hinzugefügt", + "An administrator added {user}" : "Ein Administrator hat {user} hinzugefügt", + "You left the conversation" : "Sie haben die Unterhaltung verlassen", + "{actor} left the conversation" : "{actor} hat die Unterhaltung verlassen", + "{actor} removed {user}" : "{actor} hat {user} entfernt", + "You removed {user}" : "Sie haben {user} entfernt", + "{actor} removed you" : "{actor} hat Sie entfernt", + "An administrator removed you" : "Ein Administrator hat Sie entfernt", + "An administrator removed {user}" : "Ein Administrator hat {user} entfernt", + "{actor} invited {federated_user}" : "{actor} hat {federated_user} eingeladen", + "You invited {federated_user}" : "Sie haben {federated_user} eingeladen", + "You accepted the invitation" : "Sie haben diese Einladung angenommen", + "{actor} invited you" : "{actor} hat Sie eingeladen", + "An administrator invited you" : "Ein Administrator hat Sie eingeladen", + "An administrator invited {federated_user}" : "Die Administration hat {federated_user} eingeladen", + "{federated_user} accepted the invitation" : "{federated_user} hat die Einladung angenommen", + "{actor} removed {federated_user}" : "{actor} hat {federated_user} entfernt", + "You removed {federated_user}" : "Sie haben {federated_user} entfernt", + "You declined the invitation" : "Sie haben die Einladung abgelehnt", + "An administrator removed {federated_user}" : "Ein Administrator hat {federated_user} entfernt", + "{federated_user} declined the invitation" : "{federated_user} hat die Einladung abgelehnt", + "{actor} added group {group}" : "{actor} hat die Gruppe {group} hinzugefügt", + "You added group {group}" : "Sie haben die Gruppe {group} hinzugefügt", + "An administrator added group {group}" : "Ein Administrator hat die Gruppe {group} hinzugefügt", + "{actor} removed group {group}" : "{actor} hat die Gruppe {group} entfernt", + "You removed group {group}" : "Sie haben die Gruppe {group} entfernt", + "An administrator removed group {group}" : "Ein Administrator hat die Gruppe {group} entfernt", + "{actor} added team {circle}" : "{actor} hat das Team {circle} hinzugefügt", + "You added team {circle}" : "Sie haben das Team {circle} hinzugefügt", + "An administrator added team {circle}" : "Ein Administrator hat das Team {circle} hinzugefügt", + "{actor} removed team {circle}" : "{actor} hat das Team {circle} entfernt", + "You removed team {circle}" : "Sie haben das Team {circle} entfernt", + "An administrator removed team {circle}" : "Ein Administrator hat das Team {circle} entfernt", + "{actor} added {phone}" : "{actor} hat {phone} hinzugefügt", + "You added {phone}" : "Sie haben {phone} hinzugefügt", + "An administrator added {phone}" : "Die Administration hat {phone} hinzgefügt", + "{actor} removed {phone}" : "{actor} hat {phone} entfernt", + "You removed {phone}" : "Sie haben {phone} entfernt", + "An administrator removed {phone}" : "Die Administration hat {phone} entfernt", + "{actor} promoted {user} to moderator" : "{actor} hat {user} Moderationsrechte zugeteilt", + "You promoted {user} to moderator" : "Sie haben {user} Moderationsrechte zugeteilt", + "{actor} promoted you to moderator" : "{actor} hat Ihnen Moderationsrechte zugeteilt", + "An administrator promoted you to moderator" : "Die Administration hat Ihnen Moderationsrechte zugeteilt", + "An administrator promoted {user} to moderator" : "Die Administration hat {user} Moderationsrechte zugeteilt", + "{actor} demoted {user} from moderator" : "{actor} hat {user} Moderationsrechte entzogen", + "You demoted {user} from moderator" : "Sie haben {user} Moderationsrechte entzogen", + "{actor} demoted you from moderator" : "{actor} hat Ihnen Moderationsrechte entzogen", + "An administrator demoted you from moderator" : "Die Administration hat Ihnen Moderationsrechte entzogen", + "An administrator demoted {user} from moderator" : "Die Administration hat {user} Moderationsrechte entzogen", + "{actor} shared a file which is no longer available" : "{actor} hat eine Datei geteilt, die nicht mehr vorhanden ist", + "You shared a file which is no longer available" : "Sie haben eine Datei geteilt, die nicht mehr vorhanden ist", + "File shares are currently not supported in federated conversations" : "Dateifreigaben werden bislang in Federated-Unterhaltungen noch nicht unterstützt", + "The shared location is malformed" : "Der freigegebene Standort ist fehlerhaft", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} hat Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "You set up Matterbridge to synchronize this conversation with other chats" : "Sie haben Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "{actor} created thread {title}" : "{actor} hat das Thema {title} erstellt", + "You created thread {title}" : "Sie haben das Thema {title} erstellt", + "{actor} renamed thread {title}" : "{actor} hat das Thema {title} umbenannt", + "You renamed thread {title}" : "Sie haben das Thema {title} umbenannt", + "{actor} updated the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration aktualisiert", + "You updated the Matterbridge configuration" : "Sie haben die Matterbridge-Konfiguration aktualisiert", + "{actor} removed the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration entfernt", + "You removed the Matterbridge configuration" : "Sie haben die Matterbridge-Konfiguration entfernt", + "{actor} started Matterbridge" : "{actor} hat Matterbridge gestartet", + "You started Matterbridge" : "Sie haben Matterbridge gestartet", + "{actor} stopped Matterbridge" : "{actor} hat Matterbridge angehalten", + "You stopped Matterbridge" : "Sie haben Matterbridge angehalten", + "{actor} deleted a message" : "{actor} hat eine Nachricht gelöscht", + "You deleted a message" : "Sie haben eine Nachricht gelöscht", + "{actor} edited a message" : "{actor} hat eine Nachricht bearbeitet", + "You edited a message" : "Sie haben eine Nachricht bearbeitet", + "{actor} pinned a message" : "{actor} hat eine Nachricht angepinnt", + "You pinned a message" : "Sie haben eine Nachricht angepinnt", + "{actor} unpinned a message" : "{actor} hat eine Nachricht abgelöst", + "Message was automatically unpinned" : "Die Nachricht wurde automatisch abgelöst.", + "You unpinned a message" : "Sie haben eine Nachricht abgelöst", + "{actor} deleted a reaction" : "{actor} hat eine Reaktion gelöscht", + "You deleted a reaction" : "Sie haben eine Reaktion gelöscht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Sie haben den Ablauf der Nachricht auf %n Woche festgelegt","Sie haben den Ablauf der Nachricht auf %n Wochen festgelegt"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Sie haben den Ablauf der Nachricht auf %n Tag festgelegt","Sie haben den Ablauf der Nachricht auf %n Tage festgelegt"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Sie haben den Ablauf der Nachricht auf %n Stunde festgelegt","Sie haben den Ablauf der Nachricht auf %n Stunden festgelegt"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Sie haben den Ablauf der Nachricht auf %n Minute festgelegt","Sie haben den Ablauf der Nachricht auf %n Minuten festgelegt"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} hat den Ablauf der Nachricht auf %n Woche festgelegt","{actor} hat den Ablauf der Nachricht auf %n Wochen festgelegt"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} hat den Ablauf der Nachricht auf %n Tag festgelegt","{actor} hat den Ablauf der Nachricht auf %n Tage festgelegt"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} hat den Ablauf der Nachricht auf %n Stunde festgelegt","{actor} hat den Ablauf der Nachricht auf %n Stunden festgelegt"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} hat den Ablauf der Nachricht auf %n Minute festgelegt","{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt"], + "{actor} disabled message expiration" : "{actor} hat den Ablauf von Nachrichten deaktiviert", + "You disabled message expiration" : "Sie haben den Ablauf von Nachrichten deaktiviert", + "{actor} cleared the history of the conversation" : "{actor} hat den Gesprächsverlauf gelöscht", + "You cleared the history of the conversation" : "Sie haben den Gesprächsverlauf gelöscht", + "{actor} set the conversation picture" : "{actor} hat das Unterhaltungsbild eingestellt", + "You set the conversation picture" : "Sie haben das Unterhaltungsbild eingestellt", + "{actor} removed the conversation picture" : "{actor} hat das Unterhaltungsbild entfernt", + "You removed the conversation picture" : "Sie haben das Unterhaltungsbild entfernt", + "{actor} ended the poll {poll}" : "{actor} hat die Umfrage {poll} beendet", + "You ended the poll {poll}" : "Sie haben die Umfrage {poll} beendet", + "{actor} started the video recording" : "{actor} hat die Videoaufnahme gestartet", + "You started the video recording" : "Sie haben die Videoaufnahme gestartet", + "{actor} stopped the video recording" : "{actor} hat die Videoaufnahme gestoppt", + "You stopped the video recording" : "Sie haben die Videoaufnahme gestoppt", + "{actor} started the audio recording" : "{actor} hat die Audioaufnahme gestartet", + "You started the audio recording" : "Sie haben die Audioaufnahme gestartet", + "{actor} stopped the audio recording" : "{actor} hat die Audioaufnahme gestoppt", + "You stopped the audio recording" : "Sie haben die Audioaufnahme gestoppt", + "The recording failed" : "Aufnahme fehlgeschlagen", + "Someone voted on the poll {poll}" : "Jemand hat in der Umfrage {poll} abgestimmt", + "Message deleted by author" : "Nachricht vom Autor gelöscht", + "Message deleted by {actor}" : "Nachricht von {actor} gelöscht", + "Message deleted by you" : "Nachricht von Ihnen gelöscht", + "Deleted user" : "Gelöschter Benutzer", + "Unknown number" : "Unbekannte Nummer", + "Administration" : "Verwaltung", + "System" : "System", + "%s (guest)" : "%s (Gast)", + "Missed call" : "Verpasster Anruf", + "Unanswered call" : "Unbeantworteter Anruf", + "Call ended (Duration {duration})" : "Anruf beendet (Dauer {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} hat den Anruf beendet (Dauer {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})","Anruf mit %n Gästen wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet (Dauer {duration})","Anruf mit %n Gästen wurde beendet (Dauer {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} hat den Anruf mit %n Gast beendet (Duration {duration})","{actor} hat den Anruf mit %n Gästen beendet (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} ended (Duration {duration})" : "Anruf mit {user1} beendet (Dauer {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} hat den Anruf mit {user1} beendet (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} and {user2} ended (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} hat den Anruf mit {user1} und {user2} beendet (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2} und {user3} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3} und {user4} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} beendet (Duration {duration})", + "Message of {user} in {conversation}" : "Nachricht von {user} in {conversation}", + "Message of {user}" : "Nachricht von {user}", + "Message of a deleted user in {conversation}" : "Nachricht eines gelöschten Benutzers in {conversation}", + "Talk conversations" : "Talk-Unterhaltungen", + "Talk to %s" : "Mit %s sprechen", + "An error occurred. Please contact your administrator." : "Es ist ein Fehler aufgetreten, bitte kontaktieren Sie Ihre Administration.", + "App disabled" : "App deaktiviert", + "Conversation subfolders are disabled" : "Unterhaltungsunterordner sind deaktiviert", + "Storage quota exceeded" : "Speicherkontingent überschritten", + "Could not prepare conversation folder" : "Unterhaltungsordner konnten nicht vorbereitet werden", + "File not found" : "Datei nicht gefunden", + "Path must point to a file" : "Der Pfad muss auf eine Datei verweisen", + "File is not inside the conversation draft folder for this room" : "Die Datei befindet sich nicht im Unterhaltungsentwurfsordner für diesen Raum", + "File is not shared, or shared but not with the user" : "Datei ist nicht geteilt oder nicht mit dem Benutzer geteilt", + "No account available to delete." : "Kein Konto zum Löschen verfügbar.", + "Poll" : "Umfrage", + "Password needs to be set" : "Passwort muss festgelegt werden", + "Uploading the file failed" : "Hochladen der Datei fehlgeschlagen", + "No image file provided" : "Kein Bild zur Verfügung gestellt", + "File is too big" : "Datei ist zu groß", + "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", + "Invalid image" : "Ungültiges Bild", + "Unknown filetype" : "Unbekannter Dateityp", + "Talk mentions" : "Talk Erwähnungen", + "More conversations" : "Weitere Unterhaltungen", + "Say hi to your friends and colleagues!" : "Begrüßen Sie Ihre Freunde und Kollegen!", + "No unread mentions" : "Keine ungelesenen Erwähnungen", + "Call in progress" : "Anruf ist aktiv", + "You were mentioned" : "Sie wurden erwähnt", + "Write to conversation" : "An eine Unterhaltung schreiben", + "Writes event information into a conversation of your choice" : "Schreibt Termininformationen in eine Unterhaltung Ihrer Wahl", + "Missing email field in header line" : "Fehlendes E-Mail-Feld in der Kopfzeile", + "Following lines are invalid: %s" : "Folgende Zeilen sind unzulässig: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s hat Sie zur Unterhaltung \"%2$s\" eingeladen.", + "You were invited to conversation \"%s\"." : "Sie wurden zur Unterhaltung \"%s\" eingeladen.", + "Conversation invitation" : "Einladung zu einer Unterhaltung", + "Scheduled time" : "Geplante Zeit", + "Description" : "Beschreibung", + "You can also dial-in via phone with the following details" : "Sie können sich auch per Telefon mit den folgenden Daten einwählen", + "Dial-in information" : "Einwahlinformationen", + "Meeting ID" : "Meeting-ID", + "Your PIN" : "Ihre PIN", + "Click the button below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf den unten stehenden Link klicken.", + "Join lobby for \"%s\"" : "Lobby für \"%s\" beitreten", + "Click the button below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf den unten stehenden Link klicken.", + "Join \"%s\"" : "\"%s\" beitreten", + "Meeting" : "Meeting", + "Password request: %s" : "Passwortanforderung: %s", + "Private conversation" : "Private Unterhaltung", + "Deleted user (%s)" : "Gelöschter Benutzer (%s)", + "Failed to upload call recording" : "Anrufaufzeichnung konnte nicht hochgeladen werden", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Der Aufzeichnungsserver konnte die Aufzeichnung des Anrufs {call} nicht hochladen. Bitte wenden Sie sich an die Administration.", + "Share to chat" : "In Unterhaltung teilen", + "Dismiss notification" : "Benachrichtigung verwerfen", + "Call recording now available" : "Anrufaufzeichnung jetzt verfügbar", + "The recording for the call in {call} was uploaded to {file}." : "Aufnahme der Unterhaltung in {call} wurde als {file} hochgeladen.", + "Transcript now available" : "Transkript jetzt verfügbar", + "The transcript for the call in {call} was uploaded to {file}." : "Das Transkript für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to transcript call recording" : "Anrufaufzeichnung konnte nicht transkribiert werden", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht transkribieren. Bitte wenden Sie sich an die Administration.", + "Call summary now available" : "Anrufzusammenfassung jetzt verfügbar", + "The summary for the call in {call} was uploaded to {file}." : "Die Zusammenfassung für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to summarize call recording" : "Anrufaufzeichnung konnte nicht zusammengefasst werden", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht zusammenfassen. Bitte wenden Sie sich an die Administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} hat Sie eingeladen dem {roomName} auf {remoteServer} beizutreten", + "Accept" : "Annehmen", + "Decline" : "Ablehnen", + "{user1} invited you to a federated conversation" : "{user1} hat Sie zu einer Federated-Unterhaltung eingeladen", + "Someone reacted" : "Jemand hat reagiert", + "New message" : "Neue Nachricht", + "Reminder" : "Erinnerung", + "Someone mentioned you" : "Jemand hat Sie erwähnt", + "Notification" : "Benachrichtigung", + "Someone reacted in a private conversation" : "Jemand hat in einer privaten Unterhaltung reagiert", + "You received a message in a private conversation" : "Sie haben eine Nachricht in einer privaten Unterhaltung erhalten", + "Reminder in a private conversation" : "Erinnerung in einer privaten Unterhaltung", + "Someone mentioned you in a private conversation" : "Jemand hat Sie in einer privaten Unterhaltung erwähnt", + "Notification in a private conversation" : "Benachrichtigung in einer privaten Unterhaltung", + "Reminder: You in {call}" : "Erinnerung: Sie in {call}", + "Reminder: {user} in {call}" : "Erinnerung: {user} in {call}", + "Reminder: Deleted user in {call}" : "Erinnerung: Gelöschter Benutzer in {call}", + "Reminder: {guest} (guest) in {call}" : "Erinnerung: {guest} (Gast) in {call}", + "Reminder: Guest in {call}" : "Erinnerung: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reagierte mit {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagierte mit {reaction} in {call}\n ", + "Deleted user reacted with {reaction} in {call}" : "Gelöschter Benutzer reagierte mit {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (Gast) reagierte mit {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reagierte mit {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gelöschter Benutzer in {call}", + "{guest} (guest) in {call}" : "{guest} (Gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} hat Ihnen eine private Nachricht gesendet", + "{user} sent a message in conversation {call}" : "{user} hat eine Nachricht in der Unterhaltung {call} gesendet", + "A deleted user sent a message in conversation {call}" : "Ein gelöschter Benutzer hat eine Nachricht in der Unterhaltung {call} gesendet", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) hat eine Nachricht in der Unterhaltung {call} gesendet", + "A guest sent a message in conversation {call}" : "Ein Gast hat eine Nachricht in der Unterhaltung {call} gesendet", + "{user} replied to your private message" : "{user} hat auf Ihre private Nachricht geantwortet", + "{user} replied to your message in conversation {call}" : "{user} hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "A deleted user replied to your message in conversation {call}" : "Ein gelöschter Benutzer hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "A guest replied to your message in conversation {call}" : "Ein Gast hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "Reminder: You in private conversation {call}" : "Erinnerung: Sie in der privaten Unterhaltung {call}", + "Reminder: A deleted user in private conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der privaten Unterhaltung {call}", + "Reminder: {user} in private conversation" : "Erinnerung: {user} in einer privaten Unterhaltung", + "Reminder: You in conversation {call}" : "Erinnerung: Sie in der Unterhaltung {call}", + "Reminder: {user} in conversation {call}" : "Erinnerung: {user} in der Unterhaltung {call}", + "Reminder: A deleted user in conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der Unterhaltung {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Erinnerung: {guest} (Gast) in der Unterhaltung {call}", + "Reminder: A guest in conversation {call}" : "Erinnerung: Ein Gast in der Unterhaltung {call}", + "{user} reacted with {reaction} to your private message" : "{user} hat mit {reaction} auf Ihre private Nachricht reagiert", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ein gelöschter Benutzer hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (Gast) hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ein Gast hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "{user} mentioned you in a private conversation" : "{user} hat Sie in einer privaten Unterhaltung erwähnt", + "{user} mentioned group {group} in conversation {call}" : "{user} hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "{user} mentioned team {team} in conversation {call}" : "{user} hat das Team {team} in der Unterhaltung {call} erwähnt", + "{user} mentioned everyone in conversation {call}" : "{user} hat jeden in der Unterhaltung erwähnt {call}", + "{user} mentioned you in conversation {call}" : "{user} hat Sie in einer Unterhaltung erwähnt: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ein gelöschter Benutzer hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned team {team} in conversation {call}" : "Ein gelöschter Benutzer hat das Team {team} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned everyone in conversation {call}" : "Ein gelöschter Benutzer hat jeden in der Unterhaltung {call} erwähnt", + "A deleted user mentioned you in conversation {call}" : "Ein gelöschter Benutzer hat Sie in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (Gast) erwähnte die Gruppe {group} in der Unterhaltung {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (Gast) hat das Team {team} in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (Gast) hat jeden in der Unterhaltung {call} erwähnt ", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) hat Sie in der Unterhaltung {call} erwähnt", + "A guest mentioned group {group} in conversation {call}" : "Ein Gast erwähnte die Gruppe {group} in der Unterhaltung {call}", + "A guest mentioned team {team} in conversation {call}" : "Ein Gast hat das Team {team} in der Unterhaltung {call} erwähnt", + "A guest mentioned everyone in conversation {call}" : "Ein Gast hat alle in der Unterhaltung {call} erwähnt", + "A guest mentioned you in conversation {call}" : "Ein Gast hat Sie in der Unterhaltung {call} erwähnt", + "View message" : "Nachricht ansehen", + "Dismiss reminder" : "Erinnerung verwerfen", + "View chat" : "Chat anzeigen", + "{user} invited you to a group conversation: {call}" : "{user} hat Sie zu einer Gruppenunterhaltung eingeladen: {call}", + "Join call" : "Anruf beitreten", + "Answer call" : "Anruf beantworten", + "{user} would like to talk with you" : "{user} möchte mit Ihnen sprechen", + "Call back" : "Zurückrufen", + "You missed a call from {user}" : "Sie haben einen Anruf von {user} verpasst", + "Accept call" : "Anruf annehmen", + "Incoming phone call from {call}" : "Eingehender Anruf von{call}", + "You missed a phone call from {call}" : "Sie haben einen Anruf von {call} verpasst", + "A group call has started in {call}" : "Ein Gruppenanruf wurde in {call} gestartet", + "You missed a group call in {call}" : "Sie haben einen Gruppenanruf in {call} verpasst", + "{email} is requesting the password to access {file}" : "{email} hat das Passwort für den Zugriff auf {file} angefordert", + "{email} tried to request the password to access {file}" : "{email} hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Someone is requesting the password to access {file}" : "Jemand hat das Passwort für den Zugriff auf {file} angefordert", + "Someone tried to request the password to access {file}" : "Jemand hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Open settings" : "Einstellungen öffnen", + "Hosted signaling server added" : "Gehosteter Signalisierungsserver hinzugefügt", + "The hosted signaling server is now configured and will be used." : "Der gehostete Signalisierungsserver ist jetzt konfiguriert und wird verwendet.", + "Hosted signaling server removed" : "Gehosteter Signalisierungsserver entfernt", + "The hosted signaling server was removed and will not be used anymore." : "Der gehostete Signalisierungsserver wurde entfernt und wird nicht mehr verwendet.", + "Hosted signaling server changed" : "Gehosteter Signalisierungsserver geändert", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Das gehostete Konto des Signalisierungsservers hat den Status von \"{oldstatus}\" in \"{newstatus}\" geändert.", + "pending" : "Ausstehend", + "active" : "Aktiv", + "expired" : "Abgelaufen", + "blocked" : "Blockiert", + "error" : "Fehler", + "The certificate of {host} expires in {days} days" : "Das Zertifikat von {host} läuft in {days} Tagen ab", + "The certificate of {host} expired" : "Das Zertifikat von {host} ist abgelaufen", + "Contact via Talk" : "Über Talk kontaktieren", + "Open Talk" : "Talk öffnen", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Nachrichten senden, Themen erstellen und Sprach- sowie und Videoanrufe starten.", + "Presentation" : "Präsentation", + "Voice room" : "Sprachraum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Direkt am Anruf teilnehmen, ideal für Nachholtermine oder spontane Treffen.", + "Webinar" : "Webinar", + "Conversations" : "Unterhaltungen", + "Messages in current conversation" : "Nachrichten in der aktuellen Unterhaltung", + "{user}" : "{user}", + "Messages" : "Nachrichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Nachrichten in anderen Unterhaltungen", + "One-to-one rooms always need to show the other users avatar" : "Eins-zu-Eins-Räume müssen immer den Avatar des anderen Benutzers anzeigen", + "Invalid emoji character" : "Ungültiges Emoji-Zeichen", + "Invalid background color" : "Ungültige Hintergrundfarbe", + "Avatar image is not square" : "Avatar-Bild ist nicht quadratisch", + "Room {number}" : "Raum {number}", + "Other" : "Sonstiges", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Problem bei der Authentifizierung dieser Instanz aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Something unexpected happened." : "Es ist etwas Unerwartetes passiert.", + "The URL is invalid." : "Die URL ist ungültig.", + "An HTTPS URL is required." : "Eine HTTPS-URL ist erforderlich.", + "The email address is invalid." : "Die E-Mail-Adresse ist ungültig.", + "The language is invalid." : "Die Sprache ist ungültig.", + "The country is invalid." : "Das Land ist ungültig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Es gibt ein Problem mit dem Anfrage für den Trial-Test. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are send from your servers address. Please try again later." : "Es werden zu viele Anfragen von Ihrer Serveradresse aus gesendet. Bitte später erneut versuchen.", + "There is already a trial registered for this Nextcloud instance." : "Für diese Nextcloud-Instanz ist bereits eine Trial-Testversion registriert.", + "Something unexpected happened. Please try again later." : "Es ist etwas Unerwartetes passiert. Bitte später erneut versuchen.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Trial-Testserver sich falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "Trial requested but failed to get account information. Please check back later." : "Trial-Testversion angefordert, aber keine Kontoinformationen erhalten. Bitte versuchen Sie es später erneut.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Es ist ein Problem bei der Authentifizierung dieser Anfrage aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Die Kontoinformationen konnten nicht abgerufen werden, weil sich der Trial-Server falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Beim Abrufen der Kontoinformationen ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Protokolldateien für weitere Informationen.", + "There is no such account registered." : "Ein solches Konto ist nicht registriert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontoinformationen konnten nicht abgerufen werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "Deleting the hosted signaling server account failed. Please check back later." : "Fehler beim Löschen des Singnalisierungsserver-Kontos. Bitte versuchen Sie es später erneut.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Konto konnte nicht gelöscht werden, da sich der Trial-Testserver falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "There is a problem with deleting the account. Please check your logs for further information." : "Es gibt ein Problem mit dem Löschen des Kontos. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are sent from your servers address. Please try again later." : "Es wurden zu viele Anfragen von Ihrer Serveradresse gesendet. Bitte später erneut versuchen.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Konto konnte nicht gelöscht werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "Note to self" : "Notiz an mich", + "A place for your private notes, thoughts and ideas" : "Ein Platz für Ihre privaten Notizen, Gedanken und Ideen", + "Transcript is AI generated and may contain mistakes" : "Das Transkript wird von KI generiert und kann Fehler enthalten", + "Summary is AI generated and may contain mistakes" : "Die Zusammenfassung wird von KI generiert und kann Fehler enthalten", + "Let's get started!" : "Los geht's!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ist eine sichere, selbst gehostete Kommunikationsplattform, die sich nahtlos in das Nextcloud-Ökosystem integriert.\n\n#### Hauptmerkmale von Nextcloud Talk:\n\n* Chat und Messaging in privaten und Gruppenchats\n* Sprach- und Videoanrufe\n* Dateifreigabe und Integration mit anderen Nextcloud-Apps\n* Anpassbare Gesprächseinstellungen, Moderation und Datenschutzkontrollen\n* Web, Desktop und Mobile (iOS und Android)\n* Private & sichere Kommunikation\n\n Erfahren Sie mehr in der [Benutzeranleitung](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Willkommen bei Nextcloud Talk\n\nNextcloud Talk ist eine private und leistungsstarke Messaging-App, die mit Nextcloud integriert ist. Chatten Sie in privaten oder Gruppenunterhaltungen, arbeiten Sie über Sprach- und Videoanrufe zusammen, organisieren Sie Webinare und Veranstaltungen, passen Sie Ihre Unterhaltungen an und vieles mehr.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Texte formatieren, um aussagekräftige Nachrichten zu erstellen\n\nIn Nextcloud Talk können Sie die Markdown-Syntax verwenden, um Ihre Nachrichten zu formatieren. Sie können zum Beispiel **fett** oder *kursiv* formatieren oder `Texte als Code hervorheben`. Sie können sogar Tabellen erstellen und Überschriften zu Ihrem Text hinzufügen.\n\nMöchten Sie einen Tippfehler korrigieren oder die Formatierung ändern? Bearbeiten Sie Ihre Nachricht, indem Sie im Nachrichtenmenü auf \"Nachricht bearbeiten\" klicken.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Anhänge und Links hinzufügen\n\nFügen Sie Dateien aus Ihrem Nextcloud Hub über die Schaltfläche \"+\" hinzu. Teilen Sie Elemente aus Dateien und verschiedenen Nextcloud-Apps. Einige Apps unterstützen sogar interaktive Widgets, z. B. die Text-App.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lassen Sie den Unterhaltungen ihren Lauf: Erwähnen Sie Nutzer, reagieren Sie auf Nachrichten und mehr\n\nSie können alle Teilnehmer einer Unterhaltung mit %s erwähnen oder bestimmte Teilnehmer erwähnen, indem Sie \"@\" eingeben und ihren Namen aus der Liste auswählen.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Sie können auf Nachrichten antworten, sie an andere Chats und Personen weiterleiten oder Nachrichteninhalte kopieren.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Mehr tun mit Smart Picker\n\nGeben Sie einfach \"/\" ein oder wählen Sie das Menü \"+\", um den Smart Picker zu öffnen, mit dem Sie verschiedene Inhalte an Ihre Nachrichten anhängen können. Sie können den Smart Picker so konfigurieren, dass Sie Elemente aus Nextcloud-Apps, GIFs, Kartenpositionen, KI-generierte Inhalte und vieles mehr hinzufügen können.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gesprächseinstellungen verwalten\n\nIm Menü \"Unterhaltung\" können Sie auf verschiedene Einstellungen zur Verwaltung Ihrer Unterhaltungen zugreifen, wie z. B.:\n* Unterhaltungsinformationen bearbeiten\n* Verwalten von Benachrichtigungen\n* Zahlreiche Moderationsregeln anwenden\n* Zugang und Sicherheit konfigurieren\n* Aktivieren von Bots\n* und mehr!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Vereinigte Arabische Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua und Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentinien", + "American Samoa" : "Amerikanisch-Samoa", + "Austria" : "Österreich", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Inseln", + "Azerbaijan" : "Aserbaidschan", + "Bosnia and Herzegovina" : "Bosnien und Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesch", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivien", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saba und Sint Eustatius", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetinsel", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosinseln", + "Congo, the Democratic Republic of the" : "Kongo (Demokratische Republik)", + "Central African Republic" : "Zentralafrikanische Republik", + "Congo" : "Kongo", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbeinküste", + "Cook Islands" : "Cookinseln", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "China", + "Colombia" : "Kolumbien", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Weihnachtsinsel", + "Cyprus" : "Zypern", + "Czechia" : "Tschechien", + "Germany" : "Deutschland", + "Djibouti" : "Dschibuti", + "Denmark" : "Dänemark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanische Republik", + "Algeria" : "Algerien", + "Ecuador" : "Ekuador", + "Estonia" : "Estland", + "Egypt" : "Ägypten", + "Western Sahara" : "Westsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Äthiopien", + "Finland" : "Finnland", + "Fiji" : "Fidschi", + "Falkland Islands (Malvinas)" : "Falklandinseln", + "Micronesia, Federated States of" : "Mikronesien (Föderierte Staaten)", + "Faroe Islands" : "Färöer", + "France" : "Frankreich", + "Gabon" : "Gabun", + "United Kingdom of Great Britain and Northern Ireland" : "Vereinigtes Königreich Großbritannien und Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Französisch-Guinea", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Äquatorialguinea", + "Greece" : "Griechenland", + "South Georgia and the South Sandwich Islands" : "Südgeorgien und die Südlichen Sandwichinseln", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard und die McDonaldinseln", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisches Territorium im Indischen Ozean", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodscha", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "St. Kitts und Nevis", + "Korea, Democratic People's Republic of" : "Nordkorea", + "Korea, Republic of" : "Korea, Republik", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaimaninseln", + "Kazakhstan" : "Kasachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldawien (Republik)", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "St. Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallinseln", + "North Macedonia" : "Nordmazedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolei", + "Macao" : "Macau", + "Northern Mariana Islands" : "Nördliche Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Neukaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsel", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niederlande", + "Norway" : "Norwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Neuseeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Französisch-Polynesien", + "Papua New Guinea" : "Papua-Neuguinea", + "Philippines" : "Philippinen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre und Miquelon", + "Pitcairn" : "Pitcairninseln", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palästina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russland", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabien", + "Solomon Islands" : "Salomonen", + "Seychelles" : "Seychellen", + "Sudan" : "Sudan", + "Sweden" : "Schweden", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "St. Helena, Ascension und Tristan da Cunha", + "Slovenia" : "Slowenien", + "Svalbard and Jan Mayen" : "Spitzbergen und Jan Mayen", + "Slovakia" : "Slowakei", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Südsudan", + "Sao Tome and Principe" : "São Tomé und Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrien", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- und Caicosinseln", + "Chad" : "Tschad", + "French Southern Territories" : "Französische Süd- und Antarktisgebiete", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadschikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Osttimor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Türkei", + "Trinidad and Tobago" : "Trinidad und Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansania", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "Vereinigte Staaten von Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikanstadt", + "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jungferninseln (britisch)", + "Virgin Islands, U.S." : "Jungferninseln, U.S.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis und Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Südafrika", + "Zambia" : "Sambia", + "Zimbabwe" : "Simbabwe", + "Background blur" : "Hintergrund-Verschleierung", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Es konnte nicht geprüft werden, ob WASM-Ladeunterstützung verfügbar ist. Bitte prüfen Sie manuell, ob Ihr Webserver `.wasm`-Dateien bereitstellt.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ihr Webserver ist nicht richtig eingerichtet, um `.wasm`-Dateien auszuliefern. Dies ist normalerweise ein Problem mit der Nginx-Konfiguration. Für die Hintergrundunschärfe muss eine Anpassung vorgenommen werden, um auch `.wasm`-Dateien auszuliefern. Vergleichen Sie Ihre Nginx-Konfiguration mit der empfohlenen Konfiguration in unserer Dokumentation.", + "Talk configuration values" : "Talk Einstellungswerte", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Das Erzwingen einer Anrufdauer wird nur mit System-Cron unterstützt. Bitte aktivieren Sie System-Cron oder entfernen Sie die Konfiguration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-Werte (derzeit auf %d) sind aufgrund technischer Beschränkungen nicht durchsetzbar. Die Hintergrundaufgabe wird nur alle 5 Minuten ausgeführt, die Verwendung erfolgt also auf eigene Gefahr.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es wird dringend empfohlen, \"memcache.locking\" einzurichten, wenn Talk-Federation aktiviert ist.", + "High-performance backend" : "Hochleistungs-Backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Kein Hochleistungs-Backend konfiguriert – Ohne das Hochleistungs-Backend skaliert es nur für kleinere Meetings (max. 2–3 Teilnehmer). Bitte richten Sie das Hochleistungs-Backend ein, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Die Ausführung des Hochleistungs-Backends im Modus \"conversation_cluster\" ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Das Hochleistungs-Backend unterstützt heutzutage echtes Clustering, das stattdessen verwendet werden sollte.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Das Definieren mehrerer Hochleistungs-Backends ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Stattdessen sollte ein Load Balancer zusammen mit geclusterten Signalservern eingerichtet und in den Talk-Einstellungen konfiguriert werden.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Der gespeicherte öffentliche Schlüssel für den verwendeten Algorithmus %1$s passt nicht zum gespeicherten privaten Schlüssel. %2$s ausführen, um das Problem zu beheben.", + "High-performance backend not configured correctly. Run %s for details." : "Hochleistungs-Backend ist nicht richtig konfiguriert. Für Einzelheiten %s ausführen.", + "High-performance backend not configured correctly" : "Hochleistungs-Backend nicht richtig konfiguriert", + "Error: Cannot connect to server" : "Fehler: Kann nicht zum Server verbinden", + "Error: Server did not respond with proper JSON" : "Fehler: Der Server hat nicht mit korrektem JSON geantwortet", + "Error: Certificate expired" : "Fehler: Zertifikat ist abgelaufen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Hochleistungs-Backend-Servers sind nicht synchron. Bitte stellen Sie sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisieren Sie ihre Zeit manuell.", + "Could not get version" : "Version kann nicht abgerufen werden", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fehler: Aktuelle Version: {version}; Server muss aktualisiert werden, um mit dieser Version von Talk kompatibel zu sein", + "Error: Server responded with: {error}" : "Fehler: Der Server antwortete mit: {error}", + "Error: Unknown error occurred" : "Es ist ein unbekannter Fehler aufgetreten.", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Achtung: Laufende Version: {version}; Der Server unterstützt nicht alle Funktionen dieser Talk-Version, fehlende Funktionen: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen Speichercache zu konfigurieren, wenn Nextcloud Talk mit einem Hochleistungs-Backend ausgeführt wird.", + "Client Push" : "Client-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push ist installiert, dies verbessert die Rechtzeitigkeit von Talk-Benachrichtigungen.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} ist nicht installiert. Dies kann zu verzögerten Talk-Benachrichtigungen führen.", + "Recording backend" : "Aufzeichnungs-Backend", + "Using the recording backend requires a High-performance backend." : "Die Verwendung des Aufzeichnungs-Backends erfordert ein Hochleistungs-Backend.", + "No recording backend configured" : "Kein Aufzeichnungs-Backend konfiguriert", + "SIP configuration" : "SIP-Konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Die Nutzung der SIP-Funktionalität erfordert ein Hochleistungs-Backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Zugewiesene Talk-Telefonnummern dürfen nicht mit + oder 0 beginnen. Bitte die folgenden Nummern entfernen oder aktualisieren:\n{list}", + "No SIP backend configured" : "Kein SIP-Backend konfiguriert", + "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, Zulässiges Datumsformat: JJJJ-MM-TT", + "Conversation not found" : "Unterhaltung nicht gefunden", + "Path is already shared with this conversation" : "Der Pfad wurde bereits mit dieser Unterhaltung geteilt", + "Chat, video & audio-conferencing using WebRTC" : "Chat, Video & Audio-Konferenzen mittels WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, Video- und Audiokonferenzen mit WebRTC\n\n* 💬 **Chat** Nextcloud Talk verfügt über einen einfachen Text-Chat, in dem Sie Dateien über Ihre Nextcloud Dateien-App oder Ihr lokales Gerät teilen oder hochladen und andere Teilnehmer erwähnen können.\n* 👥 **Private, Gruppen-, öffentliche und passwortgeschützte Anrufe!** Laden Sie jemanden oder eine ganze Gruppe ein oder senden Sie einen öffentlichen Link, um zu einem Anruf einzuladen.\n* 🌐 **Federated-Chats** Chatten Sie mit anderen Nextcloud-Benutzern über deren Server\n* 💻 **Bildschirmfreigabe!** Teilen Sie Ihren Bildschirm mit den Teilnehmern Ihrer Unterhaltung.\n* 🚀 **Integration mit anderen Nextcloud-Apps** wie Dateien, Kalender, Benutzerstatus, Dashboard, Flow, Karten, Smart Picker, Kontakte, Deck und viele mehr.\n* 🌉 **Mit anderen Chat-Lösungen synchronisieren** Durch die Integration von [Matterbridge](https://github.com/42wim/matterbridge/) in Talk können Sie viele andere Chat-Lösungen ganz einfach mit Nextcloud Talk und umgekehrt synchronisieren.", + "Leave call" : "Anruf verlassen", + "Navigating away from the page will leave the call in {conversation}" : "Bei verlassen der Seite, wird der Anruf in {conversation} beendet", + "Stay in call" : "Beim Anruf bleiben", + "Error occurred when getting the conversation information" : "Fehler beim Abrufen der Unterhaltungsinformationen ", + "Discuss this file" : "Diese Datei besprechen", + "Share this file with others to discuss it" : "Teilen Sie diese Datei mit anderen, um sie zu besprechen.", + "Share this file" : "Diese Datei teilen", + "Join conversation" : "Unterhaltung beitreten", + "This conversation is password-protected." : "Diese Unterhaltung ist passwortgeschützt.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Es wurden mehrere ungültige Passworteingaben von Ihrer IP-Adresse festgestellt. Daher wird die nächste Anmeldung um 30 Sekunden verzögert.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte erneut versuchen.", + "Password" : "Passwort", + "Submit" : "Übermitteln", + "Error requesting the password." : "Fehler bei der Passwortanforderung.", + "Request password" : "Passwort anfordern", + "This conversation has ended" : "Diese Unterhaltung wurde beendet", + "Error occurred when joining the conversation" : "Beim Beitritt zur Unterhaltung ist ein Fehler aufgetreten", + "Close Talk sidebar" : "Talk-Seitenleiste schließen", + "Open Talk sidebar" : "Talk-Seitenleiste öffnen", + "Everyone" : "Jeder", + "Users and moderators" : "Benutzer und Moderatoren", + "Moderators only" : "Nur Moderatoren", + "Disable calls" : "Anrufe deaktivieren", + "Save changes" : "Änderungen speichern ", + "Saving …" : "Speichere …", + "Saved!" : "Gespeichert!", + "Limit to groups" : "Auf Gruppen beschränken", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen von den aufgelisteten Gruppen an den Unterhaltungen teilnehmen.", + "Guests can still join public conversations." : "Gäste können nach wie vor öffentlichen Unterhaltungen beitreten.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Benutzer, welche Talk nicht mehr nutzen können, werden weiterhin als Teilnehmer ihrer früheren Unterhaltungen aufgelistet. Chatnachrichten werden ebenfalls aufbewahrt.", + "Limit using Talk" : "Beschränkung bei der Nutzung von Talk", + "Limit creating a public and group conversation" : "Beschränkung für das Erstellen von öffentlichen und Gruppenunterhaltungen", + "Limit creating conversations" : "Beschränkung beim Erstellen von Unterhaltungen", + "Limit starting a call" : "Beschränkung beim Anrufen", + "Limit starting calls" : "Starten von Anrufen begrenzen", + "When a call has started, everyone with access to the conversation can join the call." : "Nachdem eine Unterhaltung gestartet wurde, kann jeder, der Zugriff auf die Unterhaltung hat, dieser beitreten.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Die folgenden Bots sind auf diesem Server installiert. In der Dokumentation finden Sie Einzelheiten zum {linkstart1}Erstellen Ihres eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die Sie auf Ihrem Server aktivieren können.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Auf diesem Server sind keine Bots installiert. In der Dokumentation finden Sie Einzelheiten zum {linkstart1}Erstellen Ihres eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die Sie auf Ihrem Server aktivieren können.", + "Description is not provided" : "Keine Beschreibung vorhanden", + "Locked for moderators" : "Gesperrt für Moderatoren", + "Enabled" : "Aktiviert", + "Disabled" : "Deaktiviert", + "Bots settings" : "Bots-Einstellungen", + "State" : "Status", + "Name" : "Name", + "Last error" : "Letzter Fehler", + "Total errors count" : "Anzahl Fehler insgesamt", + "Find more bots" : "Weitere Bots finden", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Vertrauenswürdige Server können auf der {linkstart}Einstellungsseite für Freigaben{linkend} konfiguriert werden.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated Chats und Anrufe funktionieren bereits. Die Verwaltung von Anhängen ist für eine spätere Version geplant.", + "Enable Federation in Talk app" : "Federation in der Talk-App aktivieren", + "Permissions" : "Berechtigungen", + "Allow users to be invited to federated conversations" : "Benutzern erlauben, zu Federated-Unterhaltungen eingeladen zu werden.", + "Allow users to invite federated users into conversation" : "Benutzern erlauben, Federated-Benutzer zu Unterhaltungen einzuladen.", + "Only allow to federate with trusted servers" : "Nur erlauben, mit vertrauenswürdigen Servern zu federieren", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen der aufgelisteten Gruppen Federated-Benutzer zu Unterhaltungen einladen.", + "Groups allowed to invite federated users" : "Gruppen, die berechtigt sind, Federated-Benutzer einzuladen", + "Select groups …" : "Gruppen auswählen …", + "All messages" : "Alle Nachrichten", + "@-mentions only" : "Nur @-Erwähnungen", + "Off" : "Aus", + "General settings" : "Allgemeine Einstellungen", + "Default notification settings" : "Standard Benachrichtigungseinstellungen", + "Default group notification" : "Standard Gruppenbenachrichtigung", + "Default group notification for new groups" : "Standard Gruppenbenachrichtigung für neue Gruppen", + "Integration into other apps" : "Einbindung in andere Apps", + "Allow conversations on files" : "Alle Unterhaltungen zu Dateien", + "Allow conversations on public shares for files" : "Alle Unterhaltungen in öffentlichen Freigaben zu Dateien", + "End-to-end encrypted calls" : "Ende-zu-Ende-verschlüsselte Anrufe", + "Enable encryption" : "Verschlüsselung aktivieren", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Für Ende-zu-Ende-verschlüsselte Anrufe mit einer konfigurierten SIP-Brücke ist eine neuere Version des Hochleistungs-Backends und der SIP-Bridge erforderlich.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile Clients unterstützen derzeit Ende-zu-Ende-verschlüsselte Anrufe nicht.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Durch Anklicken des obigen Buttons werden die Angaben im Formular an die Server der Struktur AG geschickt. Weitere Informationen hierzu gibt es unter {linkstart}spreed.eu{linkend}.", + "Pending" : "Ausstehend", + "Error" : "Fehler", + "Blocked" : "Blockiert", + "Active" : "Aktiv", + "Expired" : "Abgelaufen", + "Never" : "Niemals", + "The trial could not be requested. Please try again later." : "Der Test konnte nicht angefordert werden. Bitte später erneut versuchen.", + "The account could not be deleted. Please try again later." : "Konto konnte nicht gelöscht werden. Bitte später erneut versuchen.", + "Hosted High-performance backend" : "Gehostetes Hochleistungs-Backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Unser Partner Struktur AG bietet einen Dienst an, bei dem ein gehosteter Signalisierungsserver angefordert werden kann. Dazu brauchen Sie nur das untenstehende Formular auszufüllen und Ihre Nextcloud wird ihn anfordern. Sobald der Server für Sie eingerichtet ist, werden die Anmeldedaten automatisch ausgefüllt. Dadurch werden die bestehenden Einstellungen des Signalisierungsservers überschrieben.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Wenn Ihr Hochleistungs-Backend-Konto STUN- und/oder TURN-Funktionen enthält, werden die Einstellungen entsprechend aktualisiert.", + "URL of this Nextcloud instance" : "URL dieser Nextcloud-Installation", + "Full name of the user requesting the trial" : "Vollständiger Name des Benutzers, der die Testversion anfordert", + "Email of the user" : "E-Mail-Adresse des Benutzers", + "Language" : "Sprache", + "Country" : "Land", + "Request signaling server trial" : "Testversion eines Signalisierungsservers anfordern", + "You can see the current status of your hosted signaling server in the following table." : "Den aktuellen Status Ihres gehosteten Signalisierungsservers sehen Sie in der folgenden Tabelle.", + "Status" : "Status", + "Created at" : "Erstellt am", + "Expires at" : "Läuft ab am", + "Limits" : "Beschränkungen", + "STUN included" : "STUN inklusive", + "Yes" : "Ja", + "No" : "Nein", + "TURN included" : "TURN inklusive", + "Delete the signaling server account" : "Signalisierungsserver-Konto löschen", + "_%n user_::_%n users_" : ["%n Benutzer","%n Benutzer"], + "Installed version: {version}" : "Installierte Version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Sie können Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuchen Sie deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installieren Sie sie bitte manuell über den {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge-Binärdatei hat falsche Berechtigungen. Bitte sicher stellen, dass die Matterbridge-Binärdatei dem richtigen Benutzer gehört und ausgeführt werden kann. Sie befindet sich unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Sie können den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen finden Sie in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", + "Downloading …" : "Herunterladen …", + "Install Talk Matterbridge" : "Talk-Matterbridge installieren", + "An error occurred while installing the Matterbridge app" : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Es ist ein Fehler bei der Installation von Talk Matterbridge aufgetreten. Bitte installieren Sie es manuell.", + "Failed to execute Matterbridge binary." : "Matterbridge-Binärdatei konnte nicht ausgeführt werden.", + "Matterbridge integration" : "Matterbridge-Einbindung", + "Enable Matterbridge integration" : "Matterbridge-Einbindung aktivieren", + "Status: Checking connection" : "Status: Prüfe die Verbindung", + "OK: Running version: {version}" : "OK: Laufende Version: {version}", + "Error: Server seems to be a Signaling server" : "Fehler: Der Server scheint ein Signalisierungsserver zu sein", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Aufzeichnungs-Backend-Servers sind nicht synchron. Bitte stellen Sie sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisieren Sie ihre Zeit manuell.", + "Recording backend URL" : "URL für Aufzeichnungs-Backend", + "Validate SSL certificate" : "SSL-Zertifikat überprüfen", + "Delete this server" : "Diesen Server löschen", + "Test this server" : "Diesen Server testen", + "Disabled for all calls" : "Für alle Anrufe deaktiviert", + "Enabled for all calls" : "Für alle Anrufe aktiviert", + "Configurable on conversation level by moderators" : "Konfigurierbar auf Unterhaltungsebene durch Moderatoren", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Die PHP-Einstellungen \"upload_max_filesize\" oder \"post_max_size\" erlauben nur das Hochladen von Dateien bis zu {maxUpload}.", + "Recording backend settings saved" : "Aufzeichnungs-Backend Einstellungen gespeichert", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoren können die Zustimmung auf Unterhaltungsebene aktivieren. Die Einwilligung zur Aufzeichnung ist für jeden Teilnehmer vor der Teinahme an der Unterhaltung erforderlich.", + "The consent to be recorded will be required for each participant before joining every call." : "Vor der Teilnahme an einer Unterhaltung ist für jeden Teilnehmer die Einwilligung zur Aufzeichnung erforderlich.", + "The consent to be recorded is not required." : "Eine Einwilligung zur Aufzeichnung ist nicht erforderlich.", + "Recording backend configuration is only possible with a High-performance backend." : "Aufzeichnungs-Backend-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Add a new recording backend server" : "Einen neuen Aufzeichnungs-Backend-Server hinzufügen", + "Shared secret" : "Geteiltes Geheimnis", + "Recording consent" : "Einwilligung zur Aufzeichnung", + "Recording transcription" : "Aufnahme-Transskription", + "Automatically transcribe call recordings with a transcription provider" : "Automatisches Transkribieren von Gesprächsaufzeichnungen mit einem Transkriptionsanbieter", + "Automatically summarize call recordings with transcription and summary providers" : "Automatisches Zusammenfassen von Anrufaufzeichnungen mit Transkriptions- und Zusammenfassungsanbietern", + "SIP configuration saved!" : "SIP-Konfiguration gespeichert!", + "SIP configuration is only possible with a High-performance backend." : "SIP-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Enable SIP Dial-out option" : "SIP-Anrufen-Option aktivieren", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Der Signalisierungsserver muss auf die unterstützte SIP-Anrufen-Funktion aktualisiert werden.", + "Do not show SIP Dial-out caller number" : "Abgehend die eigene SIP-Rufnummer nicht anzeigen", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Die anonyme Nummer sollte als \"unbekannte\" oder \"unterdrückte Nummer\" angezeigt werden, um den Empfänger anzurufen", + "Dial-out number" : "Abgehende Telefonnummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formatierte Nummer, die als Fallback-Rufnummer für ausgehende Anrufe verwendet wird", + "Dial-out prefix" : "Vorwahl für ausgehende Anrufe", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Präfix zur eingestellten Rufnummer für ausgehende Anrufe (Standard ist \"+\")", + "Restrict SIP configuration" : "SIP-Konfiguration einschränken", + "Enable SIP configuration" : "SIP-Konfiguration aktivieren", + "Only users of the following groups can enable SIP in conversations they moderate" : "Nur Benutzer der folgenden Gruppen können SIP in von ihnen moderierten Unterhaltungen aktivieren", + "Phone number (Country)" : "Telefonnummer (Land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Diese Informationen werden sowohl in Einladungs-E-Mails versandt als auch in der Seitenleiste für alle Teilnehmer angezeigt.", + "Nextcloud base URL" : "Nextcloud-Basis-URL", + "Talk Backend URL" : "Talk-Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Verfügbare Funktionen", + "Error: Websocket connection failed" : "Fehler: Websocket-Verbindung fehlgeschlagen", + "Error code" : "Fehlercode", + "Error message" : "Fehlermeldung", + "Error: Websocket connection failed. Check browser console" : "Fehler: Websocket-Verbindung fehlgeschlagen. Browser-Konsole überprüfen", + "High-performance backend URL" : "Hochleistungs-Backend-URL", + "Missing High-performance backend warning hidden" : "Warnung zu fehlendem Hochleistungs-Backend ausgeblendet", + "High-performance backend settings saved" : "Hochleistungs-Backend Einstellungen gespeichert", + "Nextcloud Talk setup not complete" : "Einrichtung von Nextcloud Talk nicht abgeschlossen", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Bitte beachten Sie, dass bei Meetings mit mehr als 2 Teilnehmern ohne das Hochleistungs-Backend höchstwahrscheinlich Verbindungsprobleme auftreten und die teilnehmenden Geräte stark belastet werden.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installieren Sie das Hochleistungs-Backend, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Nextcloud portal" : "Nextcloud Portal", + "Quick installation guide" : "Kurzanleitung zur Installation", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Das Hochleistungs-Backend ist für Anrufe und Unterhaltungen mit mehreren Teilnehmern erforderlich. Ohne das Backend müssen alle Teilnehmer ihr eigenes Video für jeden anderen Teilnehmer einzeln hochladen, was höchstwahrscheinlich zu Verbindungsproblemen und einer hohen Belastung der teilnehmenden Geräte führt.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen verteilten Cache einzurichten, wenn Sie Nextcloud Talk mit einem Hochleistungs-Backend verwenden.", + "Add High-performance backend server" : "Hochleistungs-Backend-Server hinzufügen", + "Warn about connectivity issues in calls with more than 2 participants" : "Vor Verbindungsproblemen bei Anrufen mit mehr als 2 Teilnehmern warnen", + "STUN server URL" : "STUN-Server-URL", + "The server address is invalid" : "Die Serveradresse ist ungültig", + "STUN settings saved" : "STUN-Einstellungen gespeichert", + "STUN servers" : "STUN-Server", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ein STUN-Server wird verwendet, um die öffentliche IP-Adresse von Teilnehmern hinter einem Router zu ermitteln.", + "Add a new STUN server" : "Einen neuen STUN-Server hinzufügen", + "{schema} scheme must be used with a domain" : "{schema}-Schema muss mit einer Domain verwendet werden", + "{option1} and {option2}" : "{option1} und {option2}", + "{option} only" : "nur {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-Kandidaten erfolgreich durch den TURN-Server zurück gesendet", + "Error: No working ICE candidates returned by the TURN server" : "Fehler: Keine funktionierenden ICE-Kandidaten durch den TURN-Server zurück gesendet", + "Testing whether the TURN server returns ICE candidates" : "Testen, ob der TURN-Server ICE-Kandidaten zurückgibt", + "TURN server schemes" : "TURN-Server-Schemata", + "TURN server URL" : "TURN-Server-URL", + "TURN server secret" : "TURN-Server-Secret", + "TURN server protocols" : "TURN-Serverprotokolle", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ein TURN-Server wird verwendet, um den Datenverkehr von Teilnehmern hinter einer Firewall zu übertragen. Wenn einzelne Teilnehmer keine Verbindung zu anderen herstellen können, ist höchstwahrscheinlich ein TURN-Server erforderlich. Anweisungen zum Einrichten sind in folgender {linkstart}Dokumentation{linkend} zu finden.", + "TURN settings saved" : "TURN-Einstellungen gespeichert", + "TURN servers" : "TURN-Server", + "Add a new TURN server" : "Einen neuen TURN-Server hinzufügen", + "Failed" : "Fehlgeschlagen", + "OK" : "OK", + "Checking …" : "Überprüfe …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fehlgeschlagen: WebAssembly ist in diesem Browser deaktiviert oder wird nicht unterstützt. Bitte aktivieren Sie WebAssembly oder verwenden Sie einen Browser, der es unterstützt, um die Prüfung durchzuführen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fehlgeschlagen: Die Dateien \".wasm\" und \".tflite\" wurden vom Webserver nicht korrekt zurückgegeben. Bitte prüfen Sie den Abschnitt \"Systemanforderungen\" in der Talk-Dokumentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- und \".tflite\"-Dateien wurden ordnungsgemäß vom Webserver zurückgegeben.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Es scheint, dass die PHP- und Apache-Konfiguration nicht kompatibel ist. Bitte beachten Sie, dass PHP nur mit dem Modul MPM_PREFORK und PHP-FPM nur mit dem Modul MPM_EVENT verwendet werden kann.", + "Web server setup checks" : "Prüfungen der Webserver-Einrichtung", + "Files required for virtual background can be loaded" : "Die für den virtuellen Hintergrund erforderlichen Dateien können geladen werden", + "Federated user" : "Federated-Benutzer", + "Assign participants to rooms" : "Teilnehmer Räumen zuweisen", + "Configure breakout rooms" : "Einstellungen für Gruppenräume", + "Number of breakout rooms" : "Anzahl an Gruppenräumen", + "You can create from 1 to 20 breakout rooms." : "Sie können zwischen 1 bis 20 Gruppenräume erstellen.", + "Assignment method" : "Zuweisungsmethode", + "Automatically assign participants" : "Teilnehmer automatisch zuordnen", + "Manually assign participants" : "Teilnehmer manuell zuordnen", + "Allow participants to choose" : "Teilnehmern die Wahl lassen", + "Create rooms" : "Räume erstellen", + "Confirm" : "Bestätigen", + "Create breakout rooms" : "Gruppenräume erstellen", + "Reset" : "Zurücksetzen", + "Delete breakout rooms" : "Gruppenräume löschen", + "Room {roomNumber}" : "Raum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuelle Gruppenräume und deren Einstellungen gehen verloren", + "Cancel" : "Abbrechen", + "Unassigned participants" : "Nicht zugewiesene Teilnehmer", + "Back" : "Zurück", + "Assign" : "Zuweisen", + "Add participant \"{user}\"" : "Teilnehmer \"{user}\" hinzufügen", + "Now" : "Jetzt", + "Invalid calendar selected" : "Ungültiger Kalender ausgewählt", + "Invalid start time selected" : "Ungültige Startzeit ausgewählt", + "Invalid end time selected" : "Ungültige Endzeit ausgewählt", + "Unknown error occurred" : "Unbekannter Fehler aufgetreten", + "Sending no invitations" : "Keine Einladungen versenden", + "{participant0} will receive an invitation" : "{participant0} erhält eine Einladung", + "{participant0} and {participant1} will receive invitations" : "{participant0} und {participant1} erhalten Einladungen", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} und %n weiterer erhalten Einladungen","{participant0}, {participant1} und %n andere erhalten Einladungen"], + "Invite {user}" : "{user} einladen ", + "Invite all users and emails in this conversation" : "Alle Benutzer und E-Mail-Adressen zu dieser Unterhaltung einladen", + "Meeting created" : "Besprechung erstellt", + "Upcoming meetings" : "Anstehende Besprechungen", + "Loading …" : "Lade …", + "No upcoming meetings" : "Keine anstehenden Besprechungen", + "Schedule a meeting" : "Eine Besprechung planen", + "Meeting title" : "Titel der Besprechung", + "From" : "Von", + "To" : "An", + "Calendar" : "Kalender", + "Attendees" : "Teilnehmende", + "No other participants to send invitations to." : "Keine anderen Teilnehmer, an die Einladungen gesendet werden können.", + "Add attendees" : "Teilnehmer hinzufügen", + "Save" : "Speichern", + "Search participants" : "Suche Teilnehmer", + "No results" : "Keine Ergebnisse", + "Done" : "Erledigt", + "Disable live transcription" : "Live-Transkription deaktivieren", + "Enable live transcription (generated by AI)" : "Live-Transkription aktivieren (KI-generiert)", + "Enable live transcription (Live transcriptions app is not installed)" : "Live-Transkription aktivieren (Live-Transkriptions-App ist nicht installiert)", + "Disable live translation" : "Live-Übersetzung deaktivieren", + "Enable live translation (generated by AI)" : "Live-Übersetzung aktivieren (KI-generiert)", + "Original language" : "Ausgangssprache", + "Live translations app is not installed" : "Die Live-Übersetzungs-App ist nicht installiert", + "Original language: {languageName}" : "Originalsprache: {languageName}", + "Translated language" : "Übersetzte Sprache", + "Translated language: {languageName}" : "Übersetzte Sprache: {languageName}", + "Raise hand" : "Hand heben", + "Raise hand (R)" : "Hand heben (R)", + "Lower hand" : "Hand herunternehmen", + "Lower hand (R)" : "Hand herunternehmen (R)", + "Exit full screen (F)" : "Vollbild verlassen (F)", + "Full screen (F)" : "Vollbild (F)", + "Speaker view" : "Sprecheransicht", + "Grid view" : "Kachelansicht", + "Error when trying to load the available live transcription languages" : "Fehler beim Versuch, die verfügbaren Live-Transkriptionssprachen zu laden", + "Failed to enable live transcription" : "Live-Transkription konnte nicht aktiviert werden", + "Failed to enable live translations" : "Live-Übersetzung konnten nicht aktiviert werden", + "Failed to disable live translations" : "Live-Übersetzung konnten nicht deaktiviert werden", + "Recording consent is required" : "Zustimmung zur Aufzeichnung ist erforderlich", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", + "Conversation not found or not joined" : "Unterhaltung nicht gefunden oder nicht beigetreten", + "Lobby is still active and you're not a moderator" : "Die Lobby ist weiterhin aktiv und Sie sind kein Moderator", + "Connection failed" : "Verbindung fehlgeschlagen", + "Reload" : "Neu laden", + "{nickName} raised their hand." : "{nickName} hat die Hand gehoben.", + "A participant raised their hand." : "Ein Teilnehmer hat die Hand gehoben.", + "Collapse stripe" : "Streifen einklappen", + "Expand stripe" : "Streifen aufklappen", + "Previous page of videos" : "Vorherige Seite mit Videos", + "Next page of videos" : "Nächste Seite mit Videos", + "Connecting …" : "Verbinde …", + "Calling …" : "Rufe an …", + "Waiting for {user} to join the call" : "Warte darauf, dass {user} der Unterhaltung beitritt", + "Waiting for others to join the call …" : "Warte auf weitere Teilnehmer …", + "You can invite others in the participant tab of the sidebar" : "Sie können andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste einladen", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sie können andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste oder über diesen Link einladen!", + "Share this link to invite others!" : "Teilen Sie diesen Link, um andere Personen einzuladen!", + "Copy link" : "Link kopieren", + "You are not allowed to enable audio" : "Sie dürfen Audio nicht einschalten", + "No audio. Click to select device" : "Kein Ton. Zum Auswählen des Geräts anklicken", + "Mute audio" : "Mikrofon stummschalten", + "Mute audio (M)" : "Mikrofon stummschalten (M)", + "Unmute audio" : "Mikrofon einschalten", + "Unmute audio (M)" : "Mikrofon einschalten (M)", + "None" : "Keine", + "Select a microphone" : "Ein Mikrofon auswählen", + "Select a speaker" : "Einen Lautsprecher auswählen", + "Microphone settings" : "Mikrofoneinstellungen", + "Check devices" : "Geräte prüfen", + "Access to camera was denied" : "Zugriff auf die Kamera wurde verweigert", + "Error while accessing camera: It is likely in use by another program" : "Fehler beim Zugriff auf die Kamera: Sie wird wahrscheinlich von einem anderen Programm verwendet", + "Error while accessing camera" : "Fehler beim Zugriff auf die Kamera", + "You have been muted by a moderator" : "Sie wurden von einem Moderator stummgeschaltet", + "Hide presenter video" : "Moderatorenvideo ausblenden", + "You are not allowed to enable video" : "Sie dürfen Video nicht aktivieren", + "No video. Click to select device" : "Kein Bild. Zum Auswählen des Geräts anklicken", + "Disable video" : "Video deaktivieren", + "Disable video (V)" : "Video deaktivieren (V)", + "Enable video" : "Video aktivieren", + "Enable video (V)" : "Video aktivieren (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren (V) - Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren.", + "Select a video device" : "Eine Videoquelle auswählen", + "Show presenter" : "Moderator anzeigen", + "You" : "Sie", + "Mute" : "Stummschalten", + "Muted" : "Stummgeschaltet", + "Show screen" : "Bildschirm anzeigen", + "Stop following" : "Nicht mehr folgen", + "Connection could not be established …" : "Es konnte keine Verbindung hergestellt werden …", + "Connection was lost and could not be re-established …" : "Die Verbindung wurde unterbrochen und konnte nicht wiederhergestellt werden …", + "Connection could not be established. Trying again …" : "Es konnte keine Verbindung hergestellt werden. Versuche erneut …", + "Connection lost. Trying to reconnect …" : "Verbindung zum Server verloren. Es wird versucht diese wiederherzustellen …", + "Connection problems …" : "Verbindungsprobleme …", + "Collapse" : "Zuklappen", + "Expand" : "Erweitern", + "You need to be logged in to upload files" : "Sie müssen angemeldet sein, um Dateien hochzuladen", + "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", + "Conversation messages" : "Unterhaltungsnachrichten", + "Scroll to bottom" : "Nach unten blättern", + "Post message" : "Nachricht senden", + "Federated conversation" : "Federated-Unterhaltung", + "Public conversation" : "Öffentliche Unterhaltung", + "Favorite" : "Favorit", + "Banned users" : "Gesperrte Personen", + "Manage the list of banned users in this conversation." : "Liste der in dieser Unterhaltung gesperrten Personen bearbeiten", + "Manage bans" : "Sperrungen bearbeiten", + "No banned users" : "Keine gesperrten Personen", + "Banned by:" : "Ausgeschlossen von:", + "Date:" : "Datum:", + "Note:" : "Bemerkung:", + "Hide details" : "Details ausblenden", + "Show details" : "Details anzeigen", + "Unban" : "Entsperren", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Den Titel und die Beschreibung können Sie im {linkstart} Kalender ↗ ändern{linkend}.", + "Error while updating conversation name" : "Fehler bei der Aktualisierung des Namens der Unterhaltung", + "Error while updating conversation description" : "Fehler bei der Aktualisierung der Beschreibung der Unterhaltung", + "Enter a name for this conversation" : "Geben Sie einen Namen für diese Unterhaltung ein", + "Edit conversation name" : "Name der Unterhaltung bearbeiten", + "Edit conversation description" : "Beschreibung der Unterhaltung bearbeiten", + "Enter a description for this conversation" : "Geben Sie eine Beschreibung für diese Unterhaltung ein", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Die folgenden Bots können in dieser Unterhaltung aktiviert werden. Wenden Sie sich an Ihre Administration, um weitere Bots auf diesem Server installieren zu lassen.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Auf diesem Server sind keine Bots installiert. Wenden Sie sich an Ihre Administration, um Bots auf diesem Server installieren zu lassen.", + "Disable" : "Deaktivieren", + "Enable" : "Aktivieren", + "The bot is not available anymore" : "Der Bot ist nicht mehr verfügbar", + "Breakout rooms" : "Gruppenräume", + "Manage breakout rooms" : "Gruppenräume verwalten", + "Set up breakout rooms for this conversation" : "Gruppenräume für diese Unterhaltung einrichten", + "Please select a valid PNG or JPG file" : "Bitte eine gültige PNG- oder JPG-Datei wählen", + "Choose your conversation picture" : "Unterhaltungsbild auswählen", + "Choose" : "Auswählen", + "Error setting conversation picture" : "Fehler beim Setzen des Unterhaltungsbildes", + "Could not set the conversation picture: {error}" : "Unterhaltungsbild konnte nicht festgelegt werden: {error}", + "Error cropping conversation picture" : "Fehler beim Beschneiden des Unterhaltungsbildes", + "Error removing conversation picture" : "Fehler beim Entfernen des Unterhaltungsbildes", + "Set emoji as conversation picture" : "Emoji als Unterhaltungsbild setzen", + "Set background color for conversation picture" : "Hintergrundfarbe für Unterhaltungsbild setzen", + "Upload conversation picture" : "Unterhaltungsbild hochladen", + "Choose conversation picture from files" : "Unterhaltungsbild aus Dateien wählen", + "Remove conversation picture" : "Unterhaltungsbild entfernen", + "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein", + "Set picture" : "Bild setzen", + "Default permissions modified for {conversationName}" : "Standardberechtigungen für {conversationName} geändert", + "Could not modify default permissions for {conversationName}" : "Für {conversationName} konnten die Standardberechtigungen nicht geändert werden", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bearbeiten Sie die Standardberechtigungen für die Teilnehmer dieser Unterhaltung. Diese Einstellungen wirken sich nicht auf Moderatoren aus.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Jedes Mal, wenn Berechtigungen in diesem Abschnitt geändert werden, gehen benutzerdefinierte Berechtigungen, die zuvor einzelnen Teilnehmern zugewiesen wurden, verloren.", + "All permissions" : "Alle Berechtigungen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Die Teilnehmer haben die Berechtigung, einen Anruf zu starten, einem Anruf beizutreten, Audio, Video und Bildschirmübertragung zu aktivieren.", + "Participants can use all available features." : "Teilnehmer können alle verfügbaren Funktionen nutzen.", + "Restricted" : "Eingeschränkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Die Teilnehmer können nur an Anrufen teilnehmen, aber keine Audio-, Video- oder Bildschirmübertragung aktivieren, bis ein Moderator diese Berechtigungen manuell erteilt.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Die Teilnehmer erhalten einen reduzierten Funktionsumfang, bis die Moderation manuell zusätzliche Berechtigungen erteilt.", + "Advanced permissions" : "Erweiterte Berechtigungen", + "Edit permissions" : "Berechtigungen bearbeiten", + "Conversation settings" : "Unterhaltungseinstellungen", + "Basic Info" : "Basisinformationen", + "Personal" : "Persönlich", + "Moderation" : "Moderation", + "Setup overview" : "Einstellungsübersicht", + "Live transcription" : "Live-Transkription", + "Live transcriptions app is not installed" : "Die Live-Transkriptions-App ist nicht installiert", + "Enable live transcription" : "Live-Transkription aktivieren", + "Breakout Rooms" : "Gruppenräume", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gefahrenzone", + "Archive conversation" : "Unterhaltung archivieren", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivierte Unterhaltungen werden standardmäßig aus der Unterhaltungsliste ausgeblendet. Sie werden jedoch weiterhin angezeigt, wenn Sie nach dem Unterhaltungsnamen suchen oder auf eine Liste archivierter Unterhaltungen zugreifen.", + "Do you really want to leave \"{displayName}\"?" : "Möchten Sie \"{displayName}\" verlassen?", + "You can archive this conversation instead." : "Sie können stattdessen die Unterhaltung archivieren.", + "Leave conversation" : "Unterhaltung verlassen", + "You need to promote a new moderator before you can leave the conversation" : "Sie müssen einen neuen Moderator bestimmen, bevor Sie die Unterhaltung verlassen können.", + "Delete conversation" : "Unterhaltung löschen", + "Do you really want to delete \"{displayName}\"?" : "Möchten Sie \"{displayName}\" löschen?", + "Error while deleting conversation" : "Fehler beim Löschen der Unterhaltung", + "Delete all chat messages" : "Alle Chatnachrichten löschen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Sollen alle Nachrichten in \"{displayName}\" gelöscht werden?", + "Error while clearing chat history" : "Fehler beim Löschen des Chatverlaufs", + "Be careful, these actions cannot be undone." : "Seien Sie vorsichtig, diese Aktionen können nicht rückgängig gemacht werden.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nachdem Sie eine Unterhaltung verlassen haben, ist eine Einladung erforderlich, um einer bereits geschlossenen Unterhaltung wieder beizutreten. Einer noch geöffneten Unterhaltung können Sie jederzeit wieder beitreten.", + "Permanently delete this conversation." : "Die Unterhaltung endgültig löschen.", + "Delete chat messages" : "Chatnachrichten löschen", + "Permanently delete all the messages in this conversation." : "Alle Nachrichten in dieser Unterhaltung endgültig löschen.", + "_%n hour_::_%n hours_" : ["%n Stunde","%n Stunden"], + "_%n day_::_%n days_" : ["%n Tag","%n Tage"], + "_%n week_::_%n weeks_" : ["%n Woche","%n Wochen"], + "Custom expiration time" : "Benutzerdefinierte Ablaufzeit", + "Message expiration disabled" : "Nachrichtenablauf deaktiviert", + "Message expiration set: {duration}" : "Nachrichtenablauf eingestellt: {duration}", + "Error when trying to set message expiration" : "Fehler beim Festlegen des Nachrichtenablaufs", + "Message expiration" : "Nachrichtenablauf", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatnachrichten können nach einer bestimmten Zeit gelöscht werden. Hinweis: Im Chat freigegebene Dateien werden für den Besitzer nicht gelöscht, aber sie werden nicht mehr in der Unterhaltung freigegeben.", + "Set message expiration" : "Nachrichtenablauf festlegen", + "Current message expiration" : "Akteller Nachrichtenablauf", + "Password copied to clipboard" : "Passwort in die Zwischenablage kopiert", + "Password could not be copied" : "Passwort kann nicht kopiert werden", + "Guest access" : "Gastzugriff", + "Breakout rooms are not allowed in public conversations." : "Gruppenräume sind bei öffentlichen Gesprächen nicht gestattet.", + "Allow guests to join this conversation via link" : "Gästen die Teilnahme an dieser Unterhaltung per Link erlauben", + "Password protection" : "Passwortschutz", + "This conversation is password-protected. Guests need password to join" : "Diese Unterhaltung ist passwortgeschützt. Gäste brauchen ein Passwort um teilzunehmen", + "Password protection is needed for public conversations" : "Passwortschutz ist für öffentliche Gespräche erforderlich", + "Set a password" : "Passwort setzen", + "Change password" : "Passwort ändern", + "Enter new password" : "Neues Passwort eingeben", + "Save password" : "Passwort speichern", + "Copy password" : "Passwort kopieren", + "Guests are allowed to join this conversation via link" : "Gäste dürfen dieser Unterhaltung über einen Link beitreten", + "Guests are not allowed to join this conversation" : "Gäste dürfen dieser Unterhaltung nicht beitreten", + "Resend invitations" : "Einladungen erneut versenden", + "This conversation is open to both registered users and users created with the Guests app" : "Diese Unterhaltung ist sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "This conversation is open to registered users" : "Diese Unterhaltung ist für registrierte Benutzer geöffnet", + "This conversation is limited to the current participants" : "Diese Unterhaltung ist auf die bisherigen Teilnehmer beschränkt", + "You opened the conversation to both registered users and users created with the Guests app" : "Sie haben diese Unterhaltung sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "Error occurred when opening or limiting the conversation" : "Es ist ein Fehler beim Öffnen oder Einschränken der Unterhaltung aufgetreten", + "Open conversation to registered users, showing it in search results" : "Unterhaltung für registrierte Benutzer öffnen und in den Suchergebnissen anzeigen", + "Also open to users created with the Guests app" : "Auch für Gäste, die mit der Gast-App erstellt wurden, geöffnet", + "Open conversation" : "Unterhaltung öffnen", + "Set language spoken in calls" : "Die in Telefonaten gesprochene Sprache festlegen", + "Languages could not be loaded" : "Sprachen konnten nicht geladen werden", + "Loading languages …" : "Lade Sprachen …", + "Invalid language" : "Ungültige Sprache", + "Default language (English)" : "Standardsprache (Englisch)", + "Default live transcription language set" : "Standard Live-Transkriptionssprache eingestellt", + "Live transcription language set: {languageName}" : "Eingestellte Live-Transkriptionssprache: {languageName}", + "Error when trying to set live transcription language" : "Fehler beim Einstellen der Live-Transkriptionssprache", + "Start time: {date}" : "Startzeit: {date}", + "Start time has been updated" : "Startzeit wurde aktualisiert", + "Error occurred while updating start time" : "Beim Aktualisieren der Startzeit ist ein Fehler aufgetreten", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Durch Aktivieren der Lobby werden Nicht-Moderatoren aus dem laufenden Anruf entfernt.", + "Enable lobby, restricting the conversation to moderators" : "Lobby aktivieren, Unterhaltung auf Moderatoren beschränken", + "Meeting start time" : "Meeting-Startzeit", + "Start time (optional)" : "Startzeit (optional)", + "Import email participants" : "E-Mail-Teilnehmer importieren", + "You can import a list of email participants from a CSV file." : "Sie können eine Liste von E-Mail-Teilnehmern aus einer CSV-Datei importieren.", + "Poll drafts" : "Umfrageentwürfe", + "Browse poll drafts" : "Umfrageentwürfe durchsuchen", + "Error occurred when locking the conversation" : "Beim Sperren der Unterhaltung ist ein Fehler aufgetreten", + "Error occurred when unlocking the conversation" : "Beim Entsperren der Unterhaltung ist ein Fehler aufgetreten", + "Lock conversation" : "Unterhaltung sperren", + "This will also terminate the ongoing call." : "Dadurch wird auch der laufende Anruf beendet. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Die Unterhaltung sperren, um zu verhindern, dass jemand Nachrichten postet oder Anrufe startet", + "Edit" : "Bearbeiten", + "More information" : "Weitere Informationen", + "Delete" : "Löschen", + "Add new bridged channel to current conversation" : "Neuen Einbindungs-Kanal für die aktuelle Unterhaltung hinzufügen", + "unknown state" : "unbekannter Zustand", + "running" : "läuft", + "not running, check Matterbridge log" : "Nicht aktiv, bitte das Matterbridge-Protokoll prüfen", + "not running" : "läuft nicht", + "Bridge saved" : "Einbindung gespeichert", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Mit Matterbridge können Sie Kanäle von verschiedenen Instant-Messaging-Systemen verbinden.", + "More info on Matterbridge" : "Weitere Informationen über Matterbridge", + "Messaging systems" : "Messaging-Systeme", + "Enable bridge" : "Einbindung aktivieren", + "Show Matterbridge log" : "Zeige das Matterbridge-Protokoll", + "Log content" : "Log-Inhalt", + "Only moderators are allowed to mention @all" : "Nur Moderatoren dürfen @all erwähnen", + "All participants are allowed to mention @all" : "Alle Teilnehmer dürfen @all erwähnen", + "Participants are now allowed to mention @all." : "Teilnehmer dürfen nun @all erwähnen.", + "Mentioning @all has been limited to moderators." : "Erwähnung von @all wurde auf Moderatoren beschränkt.", + "Allow participants to mention @all" : "Teilnehmer dürfen @all erwähnen", + "Mention permissions" : "Erwähnungsberechtigungen", + "Notifications" : "Benachrichtigungen", + "Notify about calls in this conversation" : "Über Anrufe in dieser Unterhaltung benachrichtigen", + "Important conversation" : "Wichtige Unterhaltung", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Nicht stören\"-Benutzerstatus wird für wichtige Unterhaltungen ignoriert", + "Sensitive conversation" : "Sensible Unterhaltung", + "Message preview will be disabled in conversation list and notifications" : "Die Nachrichtenvorschau wird in der Unterhaltungsliste und den Benachrichtigungen deaktiviert", + "Recording consent is required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung erforderlich", + "Recording consent is not required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung nicht erforderlich", + "Recording consent requirement was updated" : "Die Einstellungen zum Erfordernis der Zustimmung zur Aufzeichnung wurde aktualisiert", + "Error occurred while updating recording consent" : "Beim Aktualisieren der Einstellung zur Zustimmung zur Aufzeichnung ist ein Fehler aufgetreten", + "Recording Consent" : "Einwilligung zur Aufzeichnung", + "Recording consent cannot be changed once a call or breakout session has started." : "Die Einwilligung zur Aufzeichnung kann nicht mehr geändert werden, sobald ein Unterhaltung oder eine Gruppenraum-Sitzung begonnen hat.", + "Require recording consent before joining call in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Zustimmung zur Aufzeichnung erforderlich.", + "Recording consent is required for all calls" : "Für alle Unterhaltungen ist eine Einwilligung zur Aufzeichnung erforderlich", + "SIP dial-in is now possible without PIN requirement" : "SIP-Einwahl ist jetzt ohne PIN möglich", + "SIP dial-in is now enabled" : "Die SIP-Einwahl ist jetzt aktiviert", + "SIP dial-in is now disabled" : "Die SIP-Einwahl ist jetzt deaktiviert", + "Error occurred when enabling SIP dial-in" : "Beim Aktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Error occurred when disabling SIP dial-in" : "Beim Deaktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Phone and SIP dial-in" : "Telefon- und SIP-Einwahl", + "Enable phone and SIP dial-in" : "Telefon- und SIP-Einwahl aktivieren", + "Allow to dial-in without a PIN" : "Einwahl ohne PIN erlauben", + "Ongoing" : "Laufend", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n Person hat angenommen","%n Personen haben angenommen"], + "_%n person declined_::_%n people declined_" : ["%n Person hat abgelehnt","%n Personen haben abgelehnt"], + "_and %n other attachment_::_and %n other attachments_" : ["und %n anderer Anhang","und %n andere Anhänge"], + "With {displayName}" : "Mit {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Anhang ansehen", + "Join" : "Beitreten", + "View conversation" : "Unterhaltung anzeigen", + "View event on Calendar" : "Termin im Kalender anzeigen", + "Error while creating the conversation" : "Fehler beim Erstellen der Unterhaltung", + "Hello, {displayName}" : "Hallo {displayName}", + "Start meeting now" : "Besprechung jetzt beginnen", + "Give your meeting a title" : "Geben Sie Ihrer Besprechung einen Titel", + "Create and copy link" : "Link erstellen und teilen", + "Create a new conversation" : "Neue Unterhaltung erstellen", + "Join open conversations" : "Offenen Unterhaltungen beitreten", + "Call a phone number" : "Eine Telefonnummer anrufen", + "Scroll backward" : "Rückwärts scrollen", + "Scroll forward" : "Vorwärts scrollen", + "Schedule meetings" : "Besprechungen planen", + "You don't have any upcoming meetings" : "Sie haben keine bevorstehenden Besprechungen", + "Calendar events with a conversation link as the location are shown here" : "Hier werden Kalenderereignisse mit einem Konversationslink als Ort angezeigt", + "Open calendar" : "Kalender öffnen", + "Unread mentions" : "Ungelesene Erwähnungen", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Nachrichten, in denen Sie erwähnt wurden, werden hier angezeigt. Sie können Personen erwähnen, indem Sie @ gefolgt von deren Namen eingeben", + "Upcoming reminders" : "Anstehende Erinnerungen", + "Message reminders" : "Nachrichtenerinnerungen", + "Set a reminder on a message to be notified" : "Eine Erinnerung für eine Nachricht festlegen, um benachrichtigt zu werden", + "Start a group conversation" : "Gruppenunterhaltung beginnen", + "Create conversation" : "Unterhaltung erstellen", + "Enter your name" : "Geben Sie Ihren Namen ein", + "Submit name and join" : "Name übermitteln und beitreten", + "Do you already have an account?" : "Haben Sie bereits ein Konto?", + "Log in" : "Anmelden", + "Error while verifying uploaded file" : "Fehler bei der Überprüfung der hochgeladenen Datei", + "Uploaded file is verified" : "Hochgeladene Datei wurde überprüft", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Das Inhaltsformat besteht aus kommagetrennten Werten (CSV):
- Eine Kopfzeile ist erforderlich und muss mit \"Name\",\"E-Mail\" oder nur \"E-Mail\" übereinstimmen.
- Ein Eintrag pro Zeile (z. B. \"Max Mustermann\", \"max@beispiel.de\")", + "Participants added successfully" : "Teilnehmer hinzugefügt", + "Error while adding participants" : "Fehler beim Hinzufügen von Teilnehmern", + "Import a file" : "Eine Datei importieren", + "Browse" : "Durchsuchen", + "Verifying uploaded file …" : "Überprüfe hochgeladene Datei …", + "This might take a moment" : "Dies kann einen Moment dauern", + "Send invitations" : "Einladungen senden", + "_%n invalid email_::_%n invalid emails_" : ["%n ungültige E-Mail","%n ungültige E-Mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n E-Mail ist bereits importiert oder ein Duplikat","%n E-Mails sind bereits importiert oder Duplikate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n Einladung kann verschickt werden","%n Einladungen können verschickt werden"], + "An error occurred while calling a phone number" : "Es ist ein Fehler beim Anrufen einer Telefonnummer aufgetreten", + "Phone number could not be called: {error}" : "Die Telefonnummer konnte nicht angerufen werden: {error}", + "Phone number could not be called" : "Die Telefonnummer konnte nicht angerufen werden", + "Search participants or phone numbers" : "Teilnehmer oder Telefonnummern suchen", + "Creating the conversation …" : "Die Unterhaltung wird erstellt …", + "Mark as read" : "Als gelesen markieren", + "Mark as unread" : "Als ungelesen markieren", + "Remove from favorites" : "Von Favoriten entfernen", + "Add to favorites" : "Zu Favoriten hinzufügen", + "Unarchive conversation" : "Unterhaltung dearchivieren", + "Ignore \"Do not disturb\"" : "\"Nicht stören\"-Modus ignorieren", + "You need to promote a new moderator before you can leave the conversation." : "Sie müssen einen neuen Moderator bestimmen, bevor Sie die Unterhaltung verlassen können.", + "Conversation actions" : "Unterhaltungs-Aktionen", + "Notify about calls" : "Über Anrufe benachrichtigen", + "Hide message text" : "Nachrichtentext ausblenden", + "Pending invitations" : "Ausstehende Einladungen", + "Join conversations from other servers" : "Unterhaltungen von anderen Servern beitreten", + "From {user} at {remoteServer}" : "Von {user} auf {remoteServer}", + "Decline invitation" : "Einladung ablehnen", + "Accept invitation" : "Einladung annehmen", + "No pending invitations" : "Keine ausstehenden Einladungen", + "Home" : "Startseite", + "Unread" : "Ungelesen", + "Mentions" : "Erwähnungen", + "Meetings" : "Besprechungen", + "Sort conversations" : "Unterhaltungen sortieren", + "By recent activity" : "Nach neuesten Aktivitäten", + "Alphabetically" : "Alphabetisch", + "Do not group by type" : "Nicht nach Typ gruppieren", + "Show private ones first" : "Private zuerst zeigen", + "Show group ones first" : "Gruppe zuerst zeigen", + "No followed threads" : "Keine nachverfolgten Themen", + "No matches found" : "Keine Übereinstimmungen gefunden", + "No conversations found" : "Keine Unterhaltungen gefunden", + "You have no archived conversations." : "Sie haben keine archivierten Unterhaltungen", + "Subscribe to an existing thread or start your own." : "Ein existierendes Thema abonnieren, oder ein eigenes Thema beginnen.", + "You have no unread mentions." : "Sie haben keine ungelesenen Erwähnungen.", + "You have no unread messages." : "Sie haben keine ungelesenen Nachrichten.", + "An error occurred while performing the search" : "Es ist ein Fehler während der Suche aufgetreten", + "Conversation list" : "Unterhaltungsliste", + "Filter conversations by" : "Unterhaltungen filtern nach", + "Unread messages" : "Ungelesene Nachrichten", + "Meeting conversations" : "Besprechungsunterhaltungen", + "Clear filters" : "Filter zurücksetzen", + "New personal note" : "Neue persönliche Notiz", + "SIP backend is not installed" : "SIP-Backend ist nicht installiert", + "Back to conversations" : "Zurück zu den Unterhaltungen", + "Archived conversations" : "Archivierte Unterhaltungen", + "Threads" : "Themen", + "Clear filter" : "Filter zurücksetzen", + "Show more threads" : "Mehr Themen anzeigen", + "App settings" : "App-Einstellungen", + "Users" : "Benutzer", + "Groups" : "Gruppen", + "Teams" : "Teams", + "Federated users" : "Federated-Benutzer", + "New private conversation" : "Neue private Unterhaltung", + "Other sources" : "Andere Quellen", + "Open conversations" : "Offene Unterhaltungen", + "No search results" : "Keine Suchergebnisse", + "Users, groups and teams" : "Benutzer, Gruppen und Teams", + "Users and groups" : "Benutzer und Gruppen", + "Users and teams" : "Benutzer und Teams", + "Groups and teams" : "Gruppen und Teams", + "New group conversation" : "Neue Gruppenunterhaltung", + "The meeting will start soon" : "Das Meeting beginnt bald", + "This meeting is scheduled for {startTime}" : "Dieses Meeting ist geplant für {startTime}", + "You are currently waiting in the lobby" : "Sie warten derzeit in der Lobby", + "Enable noise suppression" : "Geräuschunterdrückung aktivieren", + "Reduce background noises for better voice quality" : "Hintergrundgeräusche für eine bessere Sprachqualität reduzieren", + "Enable echo cancellation" : "Echounterdrückung aktivieren", + "Minimize echo effect from own surrounding" : "Echoeffekt aus der eigenen Umgebung minimieren", + "Enable auto gain control" : "Regelung der automatischen Verstärkung aktivieren", + "Dynamically adjust microphone volume for consistent level" : "Die Mikrofonlautstärke dynamisch anpassen, um einen konstanten Pegel zu halten", + "Select microphone" : "Mikrofon auswählen", + "No microphone available" : "Kein Mikrofon verfügbar", + "Select speaker" : "Lautsprecher auswählen", + "No speaker available" : "Kein Lautsprecher verfügbar", + "Select camera" : "Kamera auswählen", + "No camera available" : "Keine Kamera verfügbar", + "Select a device" : "Ein Gerät auswählen", + "Playing …" : "Wiedergabe …", + "Test speakers" : "Lautsprecher testen", + "Test" : "Test", + "Devices" : "Geräte", + "Backgrounds" : "Hintergründe", + "No audio" : "Kein Audio", + "No camera" : "Keine Kamera", + "Display video as you will see it (mirrored)" : "Video so anzeigen, wie Sie es sehen werden (gespiegelt)", + "Display video as others will see it" : "Video so anzeigen, wie andere es sehen", + "Calls are not supported in your browser" : "Anrufe werden von Ihrem Browser nicht unterstützt", + "Access to microphone is only possible with HTTPS" : "Zugriff auf Mikrofon ist nur über HTTPS möglich", + "Access to microphone was denied" : "Zugriff auf Mikrofon wurde verweigert", + "Error while accessing microphone" : "Fehler beim Zugriff auf das Mikrofon", + "Access to camera is only possible with HTTPS" : "Zugriff auf Kamera ist nur über HTTPS möglich", + "The call is being recorded." : "Der Anruf wird aufgezeichnet.", + "The call might be recorded." : "Die Unterhaltung wird möglicherweise aufgezeichnet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Die Aufnahme kann Ihre Stimme sowie Video von der Kamera und einer Bildschirmfreigabe beinhalten. Vor der Teilnahme am Anruf ist Ihr Einverständnis hierzu erforderlich.", + "Give consent to the recording of this call" : "Stimmen Sie bitte der Aufzeichnung dieser Unterhaltung zu", + "Show more info" : "Weitere Informationen anzeigen", + "Audio is not available" : "Audio ist nicht verfügbar", + "Video is not available" : "Video ist nicht verfügbar", + "Start recording immediately with the call" : "Aufzeichnung sofort mit dem Anruf starten", + "Recording backend is not installed" : "Aufnahme-Backend ist nicht installiert", + "Notify all participants about this call" : "Alle Teilnehmer über diesen Anruf benachrichtigen", + "Apply settings" : "Einstellungen übernehmen", + "Select virtual office background" : "Wählen Sie einen virtuellen Hintergund (Büro)", + "Select virtual home background" : "Wählen Sie einen virtuellen Hintergrund (Zuhause)", + "Select virtual abstract background" : "Einen virtuellen abstrakten Hintergrund auswählen", + "Select virtual beach background" : "Einen virtuellen Strandhintergrund auswählen", + "Select virtual park background" : "Einen virtuellen Parkhintergrund auswählen", + "Select virtual theater background" : "Einen virtuellen Theaterhintergrund auswählen", + "Select virtual library background" : "Wählen Sie einen virtuellen Hintergrund (Bibliothek)", + "Select virtual space station background" : "Wählen Sie einen virtuellen Hintergrund (Raumstation)", + "Error while uploading the file" : "Fehler beim Hochladen der Datei", + "Select a file" : "Datei auswählen", + "Invalid path selected" : "Ungültiger Pfad ausgewählt", + "Select virtual background from file {fileName}" : "Einen virtuellen Hintergrund aus der Datei {fileName} auswählen", + "Blur" : "Verwischen", + "Upload" : "Hochladen", + "Files" : "Dateien", + "(editing)" : "(bearbeiten)", + "(edited)" : "(Bearbeitet)", + "The message has expired or has been deleted" : "Die Nachricht ist abgelaufen oder wurde gelöscht", + "Cancel quote" : "Zitieren abbrechen", + "24 hours" : "24 Stunden", + "7 days" : "7 Tage", + "30 days" : "30 Tage", + "Until unpin" : "Bis zum Ablösen", + "Clear reminder – {timeLocale}" : "Erinnerung löschen – {timeLocale}", + "Edited by {actor}" : "Bearbeitet von {actor}", + "Pinned by you" : "Angeheftet von Ihnen", + "Pinned by {actor}" : "Angeheftet von {actor}", + "Until {absoluteDate}" : "Bis zum {absoluteDate}", + "Message text copied to clipboard" : "Nachrichtentext in die Zwischenablage kopiert", + "Message text could not be copied" : "Der Nachrichtentext konnte nicht kopiert werden", + "Message forwarded to \"Note to self\"" : "Nachricht weitergeleitet an \"Notiz an mich\"", + "Error while forwarding message to \"Note to self\"" : "Fehler beim Weiterleiten der Nachricht an \"Notiz an mich\"", + "A reminder was successfully removed" : "Eine Erinnerung wurde entfernt", + "Error occurred when removing a reminder" : "Es ist ein Fehler beim Entfernen einer Erinnerung aufgetreten", + "A reminder was successfully set at {datetime}" : "Eine Erinnerung wurde für {datetime} erstellt", + "Error occurred when creating a reminder" : "Es ist ein Fehler beim Erstellen einer Erinnerung aufgetreten", + "Add a reaction to this message" : "Dieser Nachricht eine Reaktion hinzufügen", + "Reply" : "Antworten", + "More actions" : "Weitere Aktionen", + "Set reminder" : "Erinnerung erstellen", + "Pin message" : "Nachricht anheften", + "Unpin message" : "Nachricht ablösen", + "Reply privately" : "Privat antworten", + "Edit message" : "Nachricht bearbeiten", + "Copy message" : "Nachricht kopieren", + "Copy message link" : "Nachrichtenlink kopieren", + "Go to file" : "Zur Datei wechseln", + "Download file" : "Datei herunterladen", + "Go to thread" : "Zu Thema gehen", + "Edit thread details" : "Themendetails bearbeiten", + "Forward message" : "Nachricht weiterleiten", + "Translate" : "Übersetzen", + "Set custom reminder" : "Benutzerdefinierte Erinnerung erstellen", + "Keep pinned for" : "Angeheftet lassen für", + "Set custom period" : "Benutzerdefinierten Zeitraum eingeben", + "Close reactions menu" : "Reaktions-Menü schließen", + "React with {emoji}" : "Mit {emoji} reagieren", + "React with another emoji" : "Mit einem anderen Emoji reagieren", + "Choose a conversation to forward the selected message." : "Eine Unterhaltung auswählen um die ausgewählte Nachricht weiterzuleiten.", + "Error while forwarding message" : "Fehler beim Weiterleiten der Nachricht", + "The message has been forwarded to {selectedConversationName}" : "The Nachricht wurde an {selectedConversationName} weitergleitet", + "Dismiss" : "Ausblenden", + "Go to conversation" : "Zur Unterhaltung gehen", + "Detect language" : "Sprache erkennen", + "The message could not be translated" : "Die Nachricht konnte nicht übersetzt werden", + "Translation copied to clipboard" : "Übersetzung wurde in die Zwischenablage kopiert", + "Translation could not be copied" : "Übersetzung konnte nicht kopiert werden", + "Translate message" : "Nachricht übersetzen", + "Source language to translate from" : "Ausgangssprache, aus der übersetzt werden soll", + "Translate from" : "Übersetzen von", + "Target language to translate into" : "Zielsprache in die übersetzt werden soll", + "Translate to" : "Übersetzen in", + "Translating" : "Übersetze", + "This translation is AI generated and may contain mistakes." : "Diese Übersetzung ist KI-generiert und kann Fehler enthalten.", + "Copy translated text" : "Übersetzen Text kopieren", + "Error when scheduling the message" : "Fehler beim Planen des Nachrichtenversands", + "Reschedule" : "Umplanen", + "Send now" : "Jetzt senden", + "Choose a time" : "Eine Zeit wählen", + "Send at custom time" : "Zur benutzerdefinierten Zeit senden", + "Will be sent without notification" : "Wird ohne Benachrichtigung gesendet", + "Message read by everyone who shares their reading status" : "Nachricht wird von allen gelesen, die Ihren Lesestatus teilen", + "Message sent" : "Nachricht gesendet", + "Sent without notification" : "Ohne Benachrichtigung gesendet", + "Deleting message" : "Löschen der Nachricht", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Nachricht gelöscht, aber ein Bot oder Matterbridge ist konfiguriert und die Nachricht wurde unter Umständen bereits an andere Dienste verteilt", + "Message deleted successfully" : "Nachricht gelöscht", + "Message could not be deleted because it is too old" : "Nachricht konnte nicht gelöscht werden, da sie zu alt ist.", + "Only normal chat messages can be deleted" : "Nur normale Chatnachrichten können gelöscht werden", + "An error occurred while deleting the message" : "Es ist ein Fehler beim Löschen der Nachricht aufgetreten", + "Pinned" : "Angeheftet", + "Your browser does not support playing audio files" : "Ihr Browser unterstützt nicht das Abspielen von Audio-Dateien", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} auf {board}", + "Deck Card" : "Deck-Karte", + "Remove {fileName}" : "Entferne {fileName}", + "Open this location in OpenStreetMap" : "Diesen Ort in OpenStreetMap öffnen", + "_%n reply_::_%n replies_" : ["%n Antwort","%n Antworten"], + "Sending message" : "Sende Nachricht", + "Failed to send the message. Click to try again" : "Nachricht konnte nicht gesendet werden. Klicken Sie, um es erneut zu versuchen.", + "Not enough free space to upload file" : "Nicht genügend freier Speicherplatz zum Hochladen der Datei", + "You cannot send messages to this conversation at the moment" : "Sie können derzeit keine Nachrichten an diese Unterhaltung senden", + "Could not update the message" : "Nachricht konnte nicht aktualisiert werden", + "Reply to thread \"{threadTitle}\"" : "Antwort auf das Thema \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Sie haben abgestimmt • %n Stimme","Sie haben abgestimmt • %n Stimmen"], + "You voted" : "Sie haben abgestimmt", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Zum Abstimmen klicken • %n Stimme","Zum Abstimmen klicken • %n Stimmen"], + "Click to vote" : "Zum Abstimmen klicken", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Umfrageentwurf • %n Option","Umfrageentwurf • %n Optionen"], + "_%n vote_::_%n votes_" : ["%n Stimme","%n Stimmen"], + "Edit poll draft" : "Umfrageentwurf bearbeiten", + "Delete poll draft" : "Umfrageentwurf löschen", + "Open poll" : "Offene Umfrage", + "Closed poll" : "Geschlossene Umfrage", + "See results" : "Ergebnisse anzeigen", + "Reactions" : "Reaktionen", + "No permission to post reactions in this conversation" : "Keine Berechtigung zum Veröffentlichen von Reaktionen in dieser Unterhaltung", + "and {participant}" : "und {participant}", + "_and %n other participant_::_and %n other participants_" : ["und %n weiterer Teilnehmer","und %n weitere Teilnehmer"], + "Show all reactions" : "Alle Reaktionen anzeigen", + "Add more reactions" : "Weitere Reaktionen hinzufügen", + "Show or collapse system messages" : "Systemnachrichten anzeigen oder zuklappen", + "No messages" : "Keine Nachrichten", + "All messages have expired or have been deleted." : "Alle Nachrichten sind abgelaufen oder wurden gelöscht.", + "Generate summary with AI" : "Zusammenfassung mit KI erstellen", + "{author} (pinned by you)" : "{author} (Von Ihnen angeheftet)", + "{author} (pinned by {actor})" : "{author} (Angeheftet von {actor})", + "Unpin" : "Ablösen", + "Cancel search" : "Suche abbrechen", + "Add a phone number" : "Eine Telefonnummer hinzufügen", + "Error: A password is required to create the conversation." : "Fehler: Ein Passwort ist erforderlich, um die Unterhaltung zu erstellen.", + "All set, the conversation \"{conversationName}\" was created." : "Alles erledigt, die Unterhaltung \"{conversationName}\" wurde erstellt.", + "Create a new group conversation" : "Neue Gruppenunterhaltung erstellen", + "Add participants" : "Teilnehmer hinzufügen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale Länge überschritten ({maxlength} Zeichen)", + "Conversation type" : "Unterhaltungstyp", + "Conversation visibility" : "Sichtbarkeit der Unterhaltung", + "Allow guests to join via link" : "Gästen die Teilnahme per Link erlauben", + "Enter password" : "Passwort eingeben", + "This conversation has been locked" : "Diese Unterhaltung wurde gesperrt", + "No permission to post messages in this conversation" : "Keine Berechtigung zum Veröffentlichen von Nachrichten in dieser Unterhaltung", + "Joining conversation …" : "Unterhaltung beitreten …", + "Write a message without notification" : "Eine Nachricht ohne Benachrichtigung schreiben", + "Create a thread silently" : "Ein Thema stillschweigend erstellen", + "Create a thread" : "Ein Thema erstellen", + "Send message silently" : "Nachricht still senden", + "Send message" : "Nachricht senden", + "Send without notification" : "Ohne Benachrichtigung senden", + "The participant will not be notified about new messages" : "Der Teilnehmer wird über neue Nachrichten nicht benachrichtigt", + "Participants will not be notified about new messages" : "Teilnehmer werden über neue Nachrichten nicht benachrichtigt", + "Message will be sent {datetimeString}" : "Nachricht wird gesendet um {datetimeString}", + "Thread title is required" : "Ein Thementitel ist erforderlich", + "Message text is required" : "Ein Nachrichtentext ist erforderlich", + "The message could not be edited" : "Die Nachricht konnte nicht bearbeitet werden", + "File to share" : "Zu teilende Datei", + "File upload is not available in this conversation" : "Das Hochladen von Dateien ist in dieser Unterhaltung nicht verfügbar", + "Message was successfully scheduled" : "Nachrichtenversand wurde geplant", + "Add emoji" : "Emoji hinzufügen", + "Adding a mention will only notify users who did not read the message." : "Hinzufügen einer Erwähnung benachrichtigt nur Benutzer, die die Nachricht noch nicht gelesen haben.", + "Thread title" : "Thementitel", + "Send later" : "Später senden", + "Show scheduled messages" : "Geplante Nachrichten ansehen", + "Cancel editing" : "Bearbeitung abbrechen", + "Schedule message" : "Nachrichtenversand planen", + "{user} is out of office and might not respond." : "{user} ist nicht im Büro und antwortet möglicherweise nicht.", + "Absence period: {startDate} - {endDate}" : "Abwesenheitszeitraum: {startDate} - {endDate}", + "Replacement:" : "Ersatz:", + "Share from {nextcloud}" : "Von {nextcloud} teilen", + "Share from Files" : "Aus Dateien heraus teilen", + "Share files to the conversation" : "Dateien mit der Unterhaltung teilen", + "Upload from device" : "Von Gerät hochladen", + "Create new poll" : "Neue Umfrage erstellen", + "Smart picker" : "Smart Picker", + "Record voice message" : "Sprachnachricht aufnehmen", + "End recording and send" : "Aufnahme beenden und versenden", + "Dismiss recording" : "Aufnahme verwerfen", + "Access to the microphone was denied" : "Zugriff auf das Mikrofon wurde verweigert", + "Microphone either not available or disabled in settings" : "Mikrofon ist entweder nicht verfügbar oder in den Einstellungen deaktiviert", + "Error while recording audio" : "Fehler bei der Audioaufnahme", + "Voice message {time} ({conversation})" : "Sprachnachricht {time} ({conversation})", + "Generating summary of unread messages …" : "Zusammenfassung ungelesener Nachrichten wird erstellt …", + "Summary is AI generated and might contain mistakes" : "Die Zusammenfassung wird von einer KI erstellt und kann Fehler enthalten", + "Error occurred during a summary generation" : "Beim Erstellen einer Zusammenfassung ist ein Fehler aufgetreten", + "New file" : "Neue Datei", + "Blank" : "Leer", + "Error while creating file" : "Fehler beim Erstellen der Datei", + "Create and share a new file" : "Eine neue Datei erstellen und teilen", + "Name of the new file" : "Name der neuen Datei", + "Create file" : "Datei erstellen", + "Someone is typing …" : "Jemand schreibt …", + "{user1} is typing …" : "{user1} schreibt …", + "{user1} and {user2} are typing …" : "{user1} und {user2} schreiben …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} und {user3} schreiben …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n weiterer schreibt …","{user1}, {user2}, {user3} and %n weitere schreiben …"], + "Add more files" : "Weitere Dateien hinzufügen", + "Send" : "Senden", + "In this conversation {user} can:" : "In dieser Unterhaltung kann {user}:", + "Edit default permissions for participants in {conversationName}" : "Standardberechtigungen für Teilnehmer in {conversationName} bearbeiten", + "Start a call" : "Einen Anruf starten", + "Skip the lobby" : "Die Lobby überspringen", + "Can post messages" : "Kann Nachrichten senden", + "Can post messages and reactions" : "Kann Nachrichten und Reaktionen posten", + "Can add reactions" : "Kann Reaktionen hinzufügen", + "Enable the microphone" : "Das Mikrofon aktivieren", + "Enable the camera" : "Die Kamera aktivieren", + "Share the screen" : "Den Bildschirm teilen", + "Update permissions" : "Berechtigungen aktualisieren", + "Updating permissions" : "Aktualisiere Berechtigungen", + "No poll drafts" : "Keine Umfrageentwürfe", + "There is no poll drafts yet saved for this conversation" : "Für diese Unterhaltung sind noch keine Umfrageentwürfe gespeichert", + "Create poll in {name}" : "Umfrage erstellen in {name}", + "Create poll" : "Umfrage erstellen", + "Error while importing poll" : "Fehler beim Importieren der Umfrage", + "Question" : "Frage", + "Ask a question" : "Eine Frage stellen", + "Import draft from file" : "Entwurf aus Datei importieren", + "Answers" : "Antworten", + "Answer {option}" : "Antwort {option}", + "Delete poll option" : "Umfrage-Option löschen", + "Add answer" : "Antwort hinzufügen", + "Settings" : "Einstellungen", + "Anonymous poll" : "Anonyme Umfrage", + "Multiple answers" : "Mehrere Antworten", + "Save as draft" : "Als Entwurf speichern", + "Export draft to file" : "Entwurf in Datei exportieren", + "_Final results • %n vote_::_Final results • %n votes_" : ["Endergebnisse • %n Stimme","Endergebnisse • %n Stimmen"], + "Your vote is anonymous" : "Ihre Stimme ist anonym", + "You voted for this option" : "Sie haben für diese Option gestimmt", + "End poll" : "Umfrage beenden", + "Change your vote" : "Ihre Stimmabgabe ändern", + "Withdraw vote" : "Stimme zurückziehen", + "Results" : "Ergebnisse", + "Download as spreadsheet" : "Als Tabelle herunterladen", + "Download as CSV" : "Als CSV herunterladen", + "Voted participants" : "Gewählte Teilnehmer", + "Send a message to \"{roomName}\"" : "Eine Nachricht an \"{roomName}\" senden", + "Hide list of participants" : "Teilnehmerliste verbergen", + "Show list of participants" : "Teilnehmerliste anzeigen", + "Assistance requested in {roomName}" : "Unterstützung angefordert in {roomName}", + "The message was sent to \"{roomName}\"" : "Die Nachricht wurde an \"{roomName}\" gesendet", + "Dismiss request for assistance" : "Bitte um Unterstützung ablehnen", + "Send message to room" : "Nachricht an Raum senden", + "Back to main room" : "Zurück zum Hauptraum", + "Back to your room" : "Zurück zu Ihrem Raum", + "Message all rooms" : "Nachricht an alle Räume", + "Start session" : "Sitzung starten", + "Start a call before you start a breakout room session" : "Einen Anruf starten bevor Sie eine Gruppenraumsitzung beginnen", + "Stop session" : "Sitzung beenden", + "The message was sent to all breakout rooms" : "Die Nachricht wurde an alle Gruppenräume gesendet", + "Send a message to all breakout rooms" : "Nachricht an alle Gruppenräume senden", + "Breakout rooms are not started" : "Gruppenräume sind nicht gestartet", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Anrufe ohne Hochleistungs-Backend können Verbindungsprobleme und eine hohe Gerätebelastung verursachen. {linkstart}Mehr erfahren{linkend}", + "Talk setup incomplete" : "Talk-Einrichtung unvollständig", + "Disable lobby" : "Lobby deaktivieren", + "Settings for participant \"{user}\"" : "Einstellungen für den Teilnehmer \"{user}\"", + "Participant \"{user}\"" : "Teilnehmer \"{user}\"", + "moderator" : "Moderator", + "bot" : "Bot", + "guest" : "Gast", + "Ringing …" : "Klingeln …", + "Call rejected" : "Anruf abgelehnt", + "{time} talking …" : "{time} im Gespräch …", + "{time} talking time" : "{time} Gesprächsdauer", + "Raised their hand" : "Hat die Hand gehoben", + "Joined with video" : "Mit Video beigetreten", + "Joined via phone" : "Mit Telefon beigetreten", + "Joined with audio" : "Mit Audio beigetreten", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Der Text muss weniger als oder gleich {maxLength} Zeichen lang sein. Ihr aktueller Text ist {charactersCount} Zeichen lang.", + "Remove group and members" : "Gruppe und Mitglieder entfernen", + "Remove team and members" : "Team und Mitglieder entfernen", + "Remove participant" : "Teilnehmer entfernen", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Soll die Gruppe \"{displayName}\" und ihre Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Soll das Team \"{displayName}\" und seine Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove {displayName} from this conversation?" : "Soll {displayName} aus dieser Unterhaltung entfernt werden?", + "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", + "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", + "Permissions granted to {displayName}" : "Berechtigungen an {displayName} gewährt", + "Could not modify permissions for {displayName}" : "Für {displayName} konnten die Berechtigungen nicht geändert werden", + "Permissions removed for {displayName}" : "Berechtigungen für {displayName} entfernt", + "Permissions set to default for {displayName}" : "Berechtigungen für {displayName} auf Standard gesetzt", + "Phone number could not be hung up" : "Telefonnummer konnte nicht aufgelegt werden", + "Phone number could not be put on hold" : "Telefonnummer konnte nicht in die Warteschleife gelegt werden", + "Phone number could not be muted" : "Telefonnummer konnte nicht stummgeschaltet werden", + "Phone number could not be unmuted" : "Stummschaltung für Telefonnummer konnte nicht aufgehoben werden", + "DTMF message could not be sent" : "MFW-Nachricht konnte nicht gesendet werden", + "Phone number copied to clipboard" : "Telefonnummer in die Zwischenablage kopiert", + "Phone number could not be copied" : "Telefonnummer konnte nicht kopiert werden", + "in the lobby" : "In der Lobby", + "Dial out phone" : "Telefon wählen", + "Hang up phone" : "Telefon auflegen", + "Move back to lobby" : "Zurück zur Lobby", + "Move to conversation" : "Zur Unterhaltung wechseln", + "Dial-in PIN" : "Einwahl-PIN", + "Demote from moderator" : "Als Moderator abberufen", + "Promote to moderator" : "Zum Moderator ernennen", + "Resend invitation" : "Einladung erneut senden", + "Send call notification" : "Anrufbenachrichtigung senden", + "Dial out phone number" : "Ausgehende Telefonnummer", + "Resume call for phone number" : "Anruf fortsetzen für Telefonnummer", + "Put phone number on hold" : "Telefonnummer in die Warteschleife legen", + "Unmute phone number" : "Stummschaltung der Telefonnummer aufheben", + "Mute phone number" : "Telefonnummer stummschalten", + "Copy phone number" : "Telefonnummer kopieren", + "Reset custom permissions" : "Benutzerdefinierte Berechtigungen zurücksetzen", + "Grant all permissions" : "Alle Berechtigungen gewähren", + "Remove all permissions" : "Alle Berechtigungen entziehen", + "Also ban from this conversation" : "Auch für diese Unterhaltung sperren", + "Internal note (reason to ban)" : "Interne Notiz (Grund der Sperrung)", + "Remove" : "Entfernen", + "Permissions modified for {displayName}" : "Berechtigungen für {displayName} geändert", + "Add users, groups or teams" : "Benutzer, Gruppen oder Teams hinzufügen", + "Add users or groups" : "Benutzer oder Gruppen hinzufügen", + "Add users or teams" : "Benutzer oder Teams hinzufügen", + "Add users" : "Benutzer hinzufügen", + "Add groups or teams" : "Gruppen oder Teams hinzufügen", + "Add groups" : "Gruppen hinzufügen", + "Add teams" : "Teams hinzufügen", + "Add other sources" : "Andere Quellen hinzufügen", + "Add emails" : "E-Mails hinzufügen", + "Integrations" : "Einbindungen", + "Add federated users" : "Federated-Benutzer hinzufügen", + "Searching …" : "Suche …", + "Search for more users" : "Nach weiteren Benutzern suchen", + "You can search or add participants via name, email, or Federated Cloud ID" : "Sie können Teilnehmer über Namen, E-Mail-Adresse oder Federated-Cloud-ID suchen oder hinzufügen", + "Search or add participants" : "Teilnehmer suchen oder hinzufügen", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} versendet", + "An error occurred while adding the participants" : "Es ist ein Fehler beim Hinzufügen der Teilnehmer aufgetreten", + "A new group conversation with selected participant will be created" : "Es wird eine neue Gruppenunterhaltung mit dem ausgewählten Teilnehmer erstellt", + "Participants" : "Teilnehmer", + "Pinned by a deleted user" : "Angeheftet von einem gelöschten Benutzer", + "Participants ({count})" : "Teilnehmer ({count})", + "Open chat" : "Chat öffnen", + "You have new unread messages in the chat." : "Sie haben neue ungelesene Nachrichten im Chat.", + "You have been mentioned in the chat." : "Sie wurden im Chat erwähnt.", + "Search messages" : "Nachrichten suchen", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Geteilte Elemente", + "Search in {name}" : "Suche in {name}", + "Threads in {name}" : "Themen in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Suche Nachrichten …", + "Search options" : "Suchoptionen", + "From User" : "Von Benutzer", + "Since" : "Seit", + "Until" : "Bis", + "No results found" : "Keine Ergebnisse gefunden", + "Load more results" : "Weitere Ergebnisse laden", + "Recent threads" : "Neueste Themen", + "Projects" : "Projekte", + "No shared items" : "Keine geteilten Elemente", + "Thread notifications" : "Thread-Benachrichtigungen", + "Thread actions" : "Themenaktionen", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Zu einer Unterhaltung verlinken", + "No open conversations found" : "Keine offenen Unterhaltungen gefunden", + "Either there are no open conversations or you joined all of them." : "Entweder gibt es keine offenen Unterhaltungen oder sie sind bereits allen beigetreten.", + "Check spelling or use complete words." : "Überprüfen Sie die Rechtschreibung oder verwenden Sie vollständige Wörter.", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", + "Select conversation" : "Unterhaltung auswählen", + "Number length is not valid" : "Nummernlänge ist nicht gültig", + "Region code is not valid" : "Regionalcode ist nicht gültig", + "Number length is too short" : "Nummernlänge ist zu kurz", + "Number length is too long" : "Nummernlänge ist zu lang", + "Number is not valid" : "Nummer ist nicht gültig", + "Phone numbers" : "Telefonnummern", + "Display name: {name}" : "Anzeigename: {name}", + "Edit display name" : "Anzeigename bearbeiten", + "Display name (required)" : "Anzeigename (erforderlich)", + "Save name" : "Namen speichern", + "I picked message bubbles" : "Ich habe Sprechblasen ausgewählt", + "I picked the list style" : "Ich habe den Listenstil ausgewählt", + "Error while setting personal setting" : "Fehler beim Festlegen der persönlichen Einstellung", + "Error while saving sounds setting" : "Fehler beim Speichern der Toneinstellung", + "Compact conversations list" : "Unterhaltungsliste verkleinern", + "Chat appearance" : "Chat-Darstellung", + "Messages list" : "Nachrichtenliste", + "Message bubbles" : "Sprechblasen", + "Play sounds when participants join or leave a call" : "Töne abspielen, wenn Teilnehmer einem Anruf beitreten oder verlassen", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Derzeit aufgrund technischer Einschränkungen durch den Hersteller nicht auf iPhone und iPad verfügbar", + "Notification settings" : "Benachrichtigungseinstellungen", + "Sounds for chat and call notifications" : "Töne für Chat- und Anrufbenachrichtigungen", + "Invalid language ({languageId})" : "Ungültige Sprache ({languageId})", + "Default language" : "Standard-Sprache", + "Default language ({languageName})" : "Standardsprache ({languageName})", + "Error when trying to load the available live translation languages" : "Fehler beim Versuch, die verfügbaren Live-Übersetzungssprachen zu laden", + "Error when trying to set live translation language" : "Fehler beim Versuch, eine Live-Übersetzungssprache festzulegen", + "Set language used to show the transcriptions" : "Sprache festlegen, die zur Anzeige der Transkriptionen verwendet wird", + "Select location for attachments" : "Speicherort für Anhänge auswählen", + "Error while setting attachment folder" : "Fehler beim Festlegen des Ordners für Anhänge", + "Error while setting read status privacy" : "Fehler beim Setzen des Lesestatus Privatsphäre", + "Error while setting typing status privacy" : "Fehler beim Festlegen des Datenschutzes für den Eingabestatus", + "Error while setting default media state" : "Fehler beim Setzen des Standard-Medienstatus", + "Turn camera and microphone off by default" : "Kamera und Mikrofon standardmäßig ausschalten", + "Blur camera background by default" : "Kamerahintergrund standardmäßig verwischen", + "Skip device preview before joining a call" : "Gerätevorschau vor dem Beitritt zu einer Unterhaltung überspringen", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Beim Beitritt wird die Kamera ausgeschaltet. Dies wird immer angezeigt, wenn eine Einverständniserklärung erforderlich ist.", + "Appearance & Sounds" : "Aussehen & Töne", + "Privacy" : "Datenschutz", + "Send read receipts" : "Lesebestätigungen senden", + "When off, all read statuses will be hidden" : "Im ausgeschalteten Zustand werden alle Lesestatus ausgeblendet", + "Share typing status" : "Schreibstatus teilen", + "When off, all typing indicators will be hidden" : "Im ausgeschalteten Zustand werden alle Schreibanzeigen ausgeblendet", + "Attachments folder" : "Ordner für Anhänge", + "Toggle full screen" : "Vollbildmodus umschalten", + "Return to Home screen" : "Zum Startbildschirm zurückkehren", + "Search" : "Suche", + "Shortcuts while in a chat" : "Tastaturkürzel während eines Chats", + "Focus the chat input" : "Chat-Eingabe in den Vordergrund", + "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", + "Edit your last message" : "Ihre letzte Nachricht bearbeiten", + "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", + "Camera on and off" : "Kamera ein- und ausschalten", + "Microphone on and off" : "Mikrofon ein- und ausschalten", + "Raise or lower hand" : "Hand heben oder herunternehmen", + "Push to talk or push to mute" : "Zum Sprechen oder Stummschalten drücken", + "Zoom-in / zoom-out a screen share" : "Vergrößern/Verkleinern einer Bildschirmfreigabe", + "Mouse wheel" : "Mausrad", + "Start call silently" : "Stillen Anruf beginnen", + "Start call" : "Anruf starten", + "End call" : "Anruf beenden", + "The server was updated, you cannot start or join a call." : "Der Server wurde aktualisiert, Sie können keinen Anruf starten oder daran teilnehmen.", + "This call has just ended" : "Dieser Anruf wurde gerade beendet", + "You will be able to join the call only after a moderator starts it." : "Sie können dem Anruf erst beitreten, nachdem ein Moderator ihn gestartet hat.", + "End call for everyone" : "Anruf für alle beenden", + "Starting the recording" : "Aufnahme wird gestartet", + "Recording" : "Aufnahme", + "The call has been running for one hour." : "Der Anruf läuft seit einer Stunde.", + "Cancel recording start" : "Aufnahmestart abbrechen", + "Stop recording" : "Aufnahme stoppen", + "Send a reaction" : "Reaktion senden", + "React with {reaction}" : "Reagieren mit {reaction}", + "All tasks done!" : "Alle Aufgaben erledigt!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} von %n Aufgabe","{done} von %n Aufgaben"], + "Add participants to this call" : "Teilnehmer zu diesem Anruf hinzufügen", + "_%n participant in call_::_%n participants in call_" : ["%n Anrufteilnehmer","%n Anrufteilnehmer"], + "Scheduled messages" : "Geplante Nachrichten", + "You are not allowed to enable screensharing" : "Sie dürfen die Bildschirmfreigabe nicht aktivieren", + "No screensharing" : "Keine Bildschirmübertragung", + "Screensharing options" : "Optionen für Bildschirmübertragung", + "Enable screensharing" : "Bildschirmübertragung aktivieren", + "Bad sent video and screen quality." : "Schlechte Video- und Bildschirm-Sendequalität.", + "Bad sent screen quality." : "Schlechte Bildschirm-Sendequalität.", + "Bad sent video quality." : "Schlechte Video-Sendequalität", + "Bad sent audio, video and screen quality." : "Schlechte Audio-, Video- und Bildschirm-Sendequalität.", + "Bad sent audio and screen quality." : "Schlechte Audio- und Bildschirm-Sendequalität.", + "Bad sent audio and video quality." : "Schlechte Audio- und Video-Sendequalität.", + "Bad sent audio quality." : "Schlechte Audio-Sendequalität", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, die Hintergrundunschärfe der Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Disable background blur" : "Hintergrundunschärfe ausschalten", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht sehen und Ihren Bildschirm nicht sehen. Versuchen Sie, Ihr Video zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Ihren Bildschirm möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und Ihren Bildschirm nicht sehen. Versuchen Sie, Ihre Bildschirmübertragung zu deaktivieren, um die Übertragung zu verbessern.", + "Disable screenshare" : "Bildschirmübertragung deaktivieren", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, die Hintergrundunschärfe oder Ihr Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und Sie nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen.", + "Screen sharing is not supported by your browser." : "Dieser Browser unterstützt das Teilen des Bildschirms nicht.", + "Screen sharing requires the page to be loaded through HTTPS." : "Das Teilen des Bildschirms erfordert, dass die Seite über HTTPS geladen wird.", + "Screensharing requires the page to be loaded through HTTPS." : "Das Übertragen des Bildschirms erfordert das Laden der Seite über HTTPS.", + "An error occurred while starting screensharing." : "Es ist ein Fehler beim Start der Bildschirmübertragung aufgetreten.", + "Select virtual background" : "Virtuellen Hintergrund auswählen", + "Show your screen" : "Ihren Bildschirm übertragen", + "Stop screensharing" : "Bildschirmübertragung beenden", + "Mute others" : "Andere Stummschalten", + "Start recording" : "Aufnahme beginnen", + "Set up breakout rooms" : "Gruppenräume einrichten", + "Download attendance list" : "Anwesenheitsliste herunterladen", + "Open Calendar" : "Kalender öffnen", + "Remove participant {name}" : "Teilnehmer {name} entfernen", + "Would you like to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Diese Unterhaltung wird nach %n Tag Inaktivität für alle gelöscht","Diese Unterhaltung wird nach %n Tagen Inaktivität für alle gelöscht"], + "Are you sure you want to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "Delete now" : "Jetzt löschen", + "Keep" : "Behalten", + "Open dialpad" : "Wählfeld öffnen", + "Select a region" : "Eine Region auswählen", + "Local time: {time}" : "Ortszeit: {time}", + "Scheduled {datetime}" : "Geplant {datetime}", + "Scheduled for {datetime}" : "Geplant für {datetime}", + "Search …" : "Suche …", + "Message without mention" : "Nachricht ohne Erwähnung", + "Mention myself" : "Mich selbst erwähnen", + "Mention everyone" : "Jeden erwähnen", + "Select a conversation" : "Eine Unterhaltung auswählen", + "Select a mode" : "Einen Modus auswählen", + "You do not have permissions to access this conversation." : "Sie haben nicht die Berechtigung auf diese Unterhaltung zuzugreifen", + "Join a different conversation or start a new one." : "Nehmen Sie an einer anderen Unterhaltung teil oder beginnen Sie eine neue.", + "The conversation does not exist" : "Die Unterhaltung existiert nicht", + "Join a conversation or start a new one!" : "Treten Sie einer Unterhaltung bei oder starten Sie eine neue!", + "Duplicate session" : "Doppelte Sitzung", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Diese Unterhaltung wurde in einem anderen Tab geöffnet. Die aktuelle Serverversion unterstützt das Öffnen einer Konversation in mehreren Tabs nicht.", + "Creating and joining a conversation with \"{userid}\"" : "Eine Unterhaltung mit \"{userid}\" erstellen und daran teilnehmen", + "Join a conversation or start a new one" : "Treten Sie einer Unterhaltung bei oder starten Sie eine neue", + "Error while joining the conversation" : "Fehler beim Beitreten zur Unterhaltung", + "Another user" : "Ein anderer Benutzer", + "Hey! Are you using the list style or message bubbles?" : "Hey! Verwenden Sie Talk im Listenstil oder mit Sprechblasen?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-Benutzer", + "User password" : "Benutzerpasswort", + "Talk conversation" : "Talk-Unterhaltung", + "Skip TLS verification" : "TLS-Überprüfung überspringen", + "Matrix server URL" : "Matrix-Server-URL", + "User" : "Benutzer", + "Matrix channel" : "Matrix-Kanal", + "Mattermost server URL" : "Mattermost-Server-URL", + "Mattermost user" : "Mattermost-Benutzer", + "Team name" : "Team-Name", + "Channel name" : "Kanal-Name", + "Rocket.Chat server URL" : "Rocket.Chat-Server-URL", + "User name or email address" : "Benutzername oder E-Mail-Adresse", + "Rocket.Chat channel" : "Rocket.Chat-Kanal", + "Zulip server URL" : "Zulip-Server-URL", + "Bot user name" : "Bot-Benutzername", + "Bot API key" : "Bot-API-Schlüssel", + "Zulip channel" : "Zulip-Kanal", + "API token" : "API-Token", + "Slack channel" : "Slack-Kanal", + "Server ID or name" : "Server-ID oder -Name", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (mit vorangestelltem \"ID:\") oder Name", + "Channel" : "Kanal", + "Login" : "Anmeldung", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC Server-URL (z.B. chat.freenode.net:6667)", + "Nickname" : "Spitzname", + "Connection password" : "Verbindungs-Passwort", + "IRC channel" : "IRC-Kanal", + "Channel password" : "Kanal-Passwort", + "NickServ nickname" : "NickServ-Spitzname", + "NickServ password" : "NickServ-Passwort", + "Use TLS" : "TLS verwenden", + "Use SASL" : "SASL verwenden", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Client-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Themen-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber Server-URL", + "MUC server URL" : "MUC-Server-URL", + "Jabber ID" : "Jabber-ID", + "Pinned messages" : "Angeheftete Nachrichten", + "Media" : "Medien", + "Polls" : "Umfragen", + "Deck cards" : "Deck-Karten", + "Voice messages" : "Sprachnachrichten", + "Locations" : "Orte", + "Call recordings" : "Anrufaufnahmen", + "Audio" : "Audio", + "Show all pinned messages" : "Alle angehefteten Nachrichten anzeigen", + "Show all media" : "Alle Medien anzeigen", + "Show all files" : "Alle Dateien anzeigen", + "Show all polls" : "Alle Umfragen anzeigen", + "Show all deck cards" : "Alle Deck-Karten anzeigen", + "Show all voice messages" : "Alle Sprachnachrichten anzeigen", + "Show all locations" : "Alle Orte anzeigen", + "Show all call recordings" : "Alle Anrufaufnahmen ansehen", + "Show all audio" : "Alle Audios anzeigen", + "Show all other" : "Alle anderen anzeigen", + "Follow conversation settings" : "Unterhaltungseinstellungen folgen", + "Group" : "Gruppe", + "Team" : "Team", + "You reconnected to the call" : "Sie haben sich wieder mit dem Anruf verbunden", + "{actor} reconnected to the call" : "{actor} hat sich wieder mit dem Anruf verbunden", + "You added {user0} and {user1}" : "Sie haben {user0} und {user1} hinzugefügt", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Sie haben {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added you and {user0}" : "Die Administration hat Sie und {user0} hinzugefügt", + "{actor} added you and {user0}" : "{actor} hat Sie und {user0} hinzugefügt", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer hinzugefügt","{actor} hat Sie, {user0} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added {user0} and {user1}" : "Die Administration hat {user0} und {user1} hinzugefügt", + "{actor} added {user0} and {user1}" : "{actor} hat {user0} und {user1} hinzugefügt", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "You removed {user0} and {user1}" : "Sie haben {user0} und {user1} entfernt", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer entfernt","Sie haben {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "An administrator removed you and {user0}" : "Die Administration hat Sie und {user0} entfernt", + "{actor} removed you and {user0}" : "{actor} hat Sie und {user0} entfernt", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer entfernt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer entfernt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer entfernt","{actor} hat Sie, {user0} und %n weitere Teilnehmer entfernt"], + "An administrator removed {user0} and {user1}" : "Die Administration hat {user0} und {user1} entfernt", + "{actor} removed {user0} and {user1}" : "{actor} hat {user0} und {user1} entfernt", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "You and {user0} joined the call" : "Sie und {user0} sind dem Anruf beigetreten", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Sie, {user0} und %n weiterer Teilnehmer sind dem Anruf beigetreten","Sie, {user0} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "{user0} and {user1} joined the call" : "{user0} und {user1} sind dem Anruf beigetreten", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer sind dem Anruf beigetreten","{user0}, {user1} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "You and {user0} left the call" : "Sie und {user0} haben den Anruf verlassen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Sie, {user0} und %n weiterer Teilnehmer haben den Anruf verlassen","Sie, {user0} und %n weitere Teilnehmer haben den Anruf verlassen"], + "{user0} and {user1} left the call" : "{user0} und {user1} haben den Anruf verlassen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer haben den Anruf verlassen","{user0}, {user1} und %n weitere Teilnehmer haben den Anruf verlassen"], + "You promoted {user0} and {user1} to moderators" : "Sie haben {user0} und {user1} zu Moderatoren ernannt", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Sie haben {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted you and {user0} to moderators" : "Die Administration hat Sie und {user0} zu Moderatoren ernannt", + "{actor} promoted you and {user0} to moderators" : "{actor} hat Sie und {user0} zu Moderatoren ernannt", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","{actor} hat Sie, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted {user0} and {user1} to moderators" : "Ein Administrator hat {user0} und {user1} zu Moderatoren ernannt", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} hat {user0} und {user1} zu Moderatoren ernannt", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren befördert\n ","{actor} hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "You demoted {user0} and {user1} from moderators" : "Sie haben {user0} und {user1} von der Moderation abberufen", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer von der Moderation abberufen","Sie haben {user0}, {user1} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted you and {user0} from moderators" : "Die Administration hat Sie und {user0} von der Moderation abberufen", + "{actor} demoted you and {user0} from moderators" : "{actor} hat Sie und {user0} von der Moderation abberufen", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer von Moderatoren abberufen","Die Administration hat Sie, {user0} und %n weitere Teilnehmer von Moderatoren abberufen"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat Sie, {user0} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted {user0} and {user1} from moderators" : "Die Administration hat {user0} und {user1} von der Moderation abberufen", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} hat {user0} und {user1} von der Moderation abberufen", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Die Administration hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","Die Administration hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "You:" : "Sie:", + "You: {lastMessage}" : "Sie: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Der Server wurde aktualisiert.", + "(edited by you)" : "(Von Ihnen bearbeitet)", + "(edited by a deleted user)" : "(Von einem gelöschten Benutzer bearbeitet)", + "(edited by {moderator})" : "(Bearbeitet von {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Sie versuchen, an einer Unterhaltung teilzunehmen, während Sie in einem anderen Fenster oder Gerät eine aktive Sitzung haben. Dies wird derzeit von Nextcloud Talk nicht unterstützt. Was möchten Sie tun?", + "Leave this page" : "Diese Seite verlassen", + "Join here" : "Hier beitreten", + "Deck card has been posted to {conversation}" : "Deckkarte wurde nach {conversation} gepostet", + "An error occurred while posting deck card to conversation" : "Es ist ein Fehler beim Posten der Deckkarte an die Unterhaltung aufgetreten", + "Post to a conversation" : "An eine Unterhaltung posten", + "Post to conversation" : "An Unterhaltung posten", + "The recording failed. Please contact your administrator." : "Aufnahme fehlgeschlagen. Bitte wenden Sie sich an Ihre Administration.", + "Location has been posted to {conversation}" : "Der Standort wurde nach {conversation} gepostet", + "An error occurred while posting location to conversation" : "Es ist ein Fehler beim Posten des Standorts an die Unterhaltung aufgetreten.", + "Share to a conversation" : "Mit einer Unterhaltung teilen", + "Share to conversation" : "Mit der Unterhaltung teilen", + "In conversation" : "In einer Unterhaltung", + "Search in conversation: {conversation}" : "Suche in Unterhaltung: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Ihre Anfragen werden derzeit aufgrund des Brute-Force-Schutzes gedrosselt", + "Error while clearing conversation history" : "Fehler beim Löschen des Unterhaltungsverlaufs", + "Error occurred while allowing guests" : "Fehler beim Zulassen von Gästen", + "Error occurred while disallowing guests" : "Fehler beim Nichtzulassen von Gästen", + "Error occurred when restricting the conversation to moderator" : "Es ist ein Fehler beim Beschränken der Unterhaltung auf den Moderator aufgetreten", + "Error occurred when opening the conversation to everyone" : "Es ist ein Fehler beim Öffnen der Unterhaltung für alle aufgetreten", + "Conversation password has been saved" : "Unterhaltungs-Passwort wurde gespeichert", + "Conversation password has been removed" : "Unterhaltungs-Passwort wurde entfernt", + "Error occurred while saving conversation password" : "Fehler beim Speichern des Unterhaltungs-Passworts", + "Call recording is starting." : "Gesprächsaufnahme startet.", + "Call recording stopped while starting." : "Unterhaltungsaufnahme beim Start angehalten.", + "Call recording stopped. You will be notified once the recording is available." : "Anrufaufzeichnung angehalten. Sie werden benachrichtigt, sobald die Aufnahme zur Verfügung steht.", + "Conversation picture set" : "Unterhaltungsbild festgelegt", + "Conversation picture deleted" : "Unterhaltungsbild gelöscht", + "Could not delete the conversation picture" : "Unterhaltungsbild konnte nicht gelöscht werden", + "Could not remove the automatic expiration" : "Der automatische Ablauf konnte nicht entfernt werden", + "Could not post message: {errorMessage}" : "Nachricht konnte nicht gesendet werden: {errorMessage}", + "Participant is banned successfully" : "Teilnehmer wurde gesperrt", + "Error while banning the participant" : "Fehler beim Sperren des Teilnehmers", + "An error occurred while fetching the participants" : "Es ist ein Fehler beim Abrufen der Teilnehmer aufgetreten", + "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} versendet werden", + "Invitations sent" : "Einladungen gesendet", + "Error occurred when sending invitations" : "Beim Senden der Einladungen ist ein Fehler aufgetreten", + "Failed to join the conversation." : "Beitreten zur Unterhaltung fehlgeschlagen", + "An error occurred while creating breakout rooms" : "Es ist ein Fehler beim Erstellen von Gruppenräumen aufgetreten", + "An error occurred while re-ordering the attendees" : "Beim Neuordnen der Teilnehmer ist ein Fehler aufgetreten", + "An error occurred while deleting breakout rooms" : "Es ist ein Fehler beim Löschen von Gruppenräumen aufgetreten", + "An error occurred while starting breakout rooms" : "Es ist ein Fehler beim Starten vom Gruppenräumen aufgetreten", + "An error occurred while stopping breakout rooms" : "Es ist ein Fehler beim Stoppen von Gruppenräumen aufgetreten", + "An error occurred while sending a message to the breakout rooms" : "Es ist ein Fehler beim Senden einer Nachricht an die Gruppenräume aufgetreten", + "An error occurred while requesting assistance" : "Es ist ein Fehler beim Anfordern der Unterstützung aufgetreten", + "An error occurred while resetting the request for assistance" : "Es ist ein Fehler beim Zurücksetzen der Hilfeanfrage aufgetreten", + "An error occurred while joining breakout room" : "Es ist ein Fehler beim Beitritt zum Gruppenraumraum aufgetreten", + "Failed to rename the thread" : "Thema konnte nicht umbenannt werden", + "Error fetching upcoming events" : "Fehler beim Abrufen der anstehenden Veranstaltungen", + "Error fetching upcoming reminders" : "Fehler beim Abrufen der anstehenden Erinnerungen", + "An error occurred while accepting an invitation" : "Es ist ein Fehler bei der Annahme einer Einladung aufgetreten", + "An error occurred while rejecting an invitation" : "Es ist ein Fehler bei der Zurückweisung einer Einladung aufgetreten", + "{guest} (guest)" : "{guest} (Gast)", + "Poll draft has been saved" : "Umfrageentwurf wurde gespeichert", + "An error occurred while saving the draft" : "Beim Speichern des Entwurfs ist ein Fehler aufgetreten", + "An error occurred while submitting your vote" : "Beim Absenden Ihrer Stimme ist ein Fehler aufgetreten", + "An error occurred while ending the poll" : "Es ist ein Fehler beim Beenden der Umfrage aufgetreten", + "An error occurred while deleting the poll draft" : "Es ist ein Fehler beim Löschen des Umfrageentwurfs aufgetreten", + "Poll \"{name}\" was created by {user}. Click to vote" : "Umfrage \"{name}\" wurde von {user} erstellt. Klicken Sie, um abzustimmen", + "Failed to add reaction" : "Reaktion konnte nicht hinzugefügt werden", + "Failed to remove reaction" : "Reaktion konnte nicht entfernt werden", + "The server is in maintenance mode." : "Der Server befindet sich im Wartungsmodus.", + "Federated server was updated." : "Der Federated-Server wurde aktualisiert.", + "Error while uploading file \"{fileName}\"" : "Fehler beim Hochladen der Datei \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nicht genügend freier Speicherplatz zum Hochladen von \"{fileName}\"", + "You are not allowed to share files" : "Sie dürfen keine Dateien teilen", + "Error while sharing file" : "Fehler beim Teilen der Datei", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Der von Ihnen verwendete Browser wird von Nextcloud Talk nicht vollständig unterstützt. Bitte verwenden Sie die neueste Version von Mozilla Firefox, Microsoft Edge, Google Chrome, Opera oder Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n Stunde","In %n Stunden"], + "_%n minute _::_%n minutes_" : ["%n Minute","%n Minuten"], + "In {hours} and {minutes}" : "In {hours} und {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n Minute","In %n Minuten"], + "Later today – {timeLocale}" : "Später heute – {timeLocale}", + "Set time for later today" : "Zeit für später heute einstellen", + "Tomorrow – {timeLocale}" : "Morgen – {timeLocale}", + "Set time for tomorrow" : "Zeit für morgen einstellen", + "This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}", + "Set time for this weekend" : "Zeit für dieses Wochenende einstellen", + "Next week – {timeLocale}" : "Nächste Woche – {timeLocale}", + "Set time for next week" : "Zeit für nächste Woche einstellen", + "Message link copied to clipboard" : "Nachrichtenlink in die Zwischenablage kopiert", + "Conversation link copied to clipboard" : "Link zur Unterhaltung in die Zwischenablage kopiert", + "The link could not be copied" : "Der Link konnte nicht kopiert werden", + "Error while parsing a PROPFIND error" : "Fehler beim Parsen eines PROPFIND-Fehlers", + "Sending signaling message has failed" : "Das Senden der Signaling-Nachricht ist fehlgeschlagen", + "Lost connection to signaling server. Trying to reconnect." : "Verbindung zum Signaling-Server verloren. Es wird versucht, diese wiederherzustellen.", + "Lost connection to signaling server." : "Verbindung zum Signaling-Server verloren.", + "Connecting is taking longer than expected …" : "Verbinden dauert länger als erwartet …", + "Failed to connect. Retrying …" : "Verbindung konnte nicht hergestellt werden. Erneuter Versuch …", + "Failed to connect. The signaling server may be set up incorrectly" : "Verbindung konnte nicht hergestellt werden Der Signaling-Server könnte falsch eingerichtet sein", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Der eingerichtete Signalisierungsserver muss aktualisiert werden, damit er mit dieser Version von Talk kompatibel ist. Bitte wenden Sie sich an Ihre Administration.", + "Please restart the app." : "Bitte die App neu starten.", + "Please reload the page." : "Bitte die Seite neu laden.", + "Please try to restart the app." : "Bitte versuchen, die App neu zu starten.", + "Please try to reload the page." : "Bitte versuchen, die Seite neu zu laden.", + "Do not disturb" : "Nicht stören", + "Away" : "Abwesend", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Lautsprecher {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Anscheinend sprechen Sie während Sie stummgeschaltet sind. Bitte schalten Sie die Stummschaltung aus, damit die Anderen Sie hören können", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Mit mindestens einem Teilnehmer konnte keine Verbindung hergestellt werden. Für Ihr Szenario wird möglicherweise ein TURN-Server benötigt. Bitten Sie Ihre Administration, diesen gemäß {linkstart} dieser Dokumentation {linkend} einzurichten.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dies dauert länger als erwartet. Sind die Zugriffsrechte für Medien bereits erteilt (oder zurückgenommen)? Falls ja, dann starten Sie Ihren Browser neu, weil sonst kein Zugriff auf Audio und Video möglich ist", + "Access to microphone & camera is only possible with HTTPS" : "Zugriff auf Mikrofon & Kamera ist nur über HTTPS möglich", + "Please move your setup to HTTPS" : "Bitte stellen Sie auf HTTPS um", + "Access to microphone & camera was denied" : "Zugriff auf Mikrofon & Kamera wurde verweigert", + "WebRTC is not supported in your browser" : "WebRTC wird von Ihrem Browser nicht unterstützt", + "Please use a different browser like Firefox or Chrome" : "Bitte benutzen Sie einen anderen Browser, wie z.B. Firefox oder Chrome", + "Error while accessing microphone & camera" : "Fehler beim Zugriff auf Mikrofon & Kamera", + "%s Talk on your mobile devices" : "%s Talk auf Ihren mobilen Geräten", + "Join conversations at any time, anywhere, on any device." : "Immer, überall und auf allen Geräten einer Unterhaltung beitreten.", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "__language_name__" : "Deutsch (Förmlich: Sie)", + "Webhook Demo" : "Webhook-Demo", + "Call summary (%s)" : "Protokoll (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Der Protokoll-Bot veröffentlicht nach einem Anruf eine Übersichtsnachricht, in der alle Teilnehmenden und die Aufgaben aufgeführt sind", + "Tasks" : "Aufgaben", + "Notes" : "Notizen", + "Reports" : "Berichte", + "Decisions" : "Entscheidungen", + "Agenda" : "Agenda", + "Call summary" : "Zusammenfassung des Anrufs", + "Call summary - {title}" : "Protokoll - {title}", + "Talk conversation for event" : "Talk-Unterhaltung für ein Ereignis", + "Client Push is installed, this improves the performance of desktop clients." : "Client-Push installiert ist. Dies verbessert die Leistung von Desktop-Clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} ist nicht installiert. Dies kann zu Leistungsproblemen bei der Verwendung von Desktop-Clients führen.", + "Next meeting" : "Nächste Besprechung", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Planen Sie ein Meeting aus Ihrem Kalender. Ein Talk-Gespräch muss als Ort festgelegt werden, um hier angezeigt zu werden", + "Join conversations from remote Nextcloud servers" : "Unterhaltungen von entfernten Nextcloud-Servern beitreten", + "Your default media state has been saved" : "Ihr Standard-Medienstatus wurde gespeichert", + "Set reminder for later today" : "Erinnerung für später heute erstellen", + "Set reminder for tomorrow" : "Erinnerung für morgen erstellen", + "Set reminder for this weekend" : "Erinnerung für dieses Wochenende erstellen", + "Set reminder for next week" : "Erinnerung für nächste Woche erstellen", + "Generate summary" : "Zusammenfassung erstellen", + "Open poll • You voted already" : "Offene Umfrage • Sie haben bereits abgestimmt", + "Open poll • Click to vote" : "Offene Umfrage • Zur Abstimmung klicken", + "Poll • Ended" : "Umfrage・Beendet", + "Talk recording from {time} ({conversation})" : "Talk-Aufnahme von {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Umfrageergebnisse • %n Stimme","Umfrageergebnisse • %n Stimmen"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Offene Umfrage • %n Stimme","Offene Umfrage • %n Stimmen"], + "Submit vote" : "Stimme senden", + "Your privacy setting has been saved" : "Ihre Datenschutzeinstellungen wurde gespeichert", + "Your personal setting has been saved" : "Ihre persönliche Einstellung wurde gespeichert", + "Failed to save sounds setting" : "Toneinstellungen konnten nicht gespeichert werden", + "Sounds setting saved" : "Toneinstellung gespeichert", + "Always shown if recording consent is required" : "Wird immer angezeigt, wenn eine Zustimmung zur Aufzeichnung erforderlich ist", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk wurde aktualisiert. Sie können keinen Anruf starten oder beitreten.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Sie sind der Unterhaltung in einem anderen Fenster oder Gerät beigetreten. Dies wird derzeit von Nextcloud Talk nicht unterstützt, daher wurde diese Sitzung geschlossen.", + "Nextcloud Talk was updated." : "Nextcloud Talk wurde aktualisiert.", + "Nextcloud is in maintenance mode." : "Nextcloud befindet sich im Wartungsmodus.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation wurde aktualisiert.", + "Enable live translation" : "Live-Übersetzung aktivieren", + "I picked list style" : "Ich habe den Listenstil ausgewählt", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Verwenden Sie Talk im Listenstil oder mit Sprechblasen?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/de_DE.json b/l10n/de_DE.json new file mode 100644 index 0000000..53f1527 --- /dev/null +++ b/l10n/de_DE.json @@ -0,0 +1,2260 @@ +{ "translations": { + "a conversation" : "Eine Unterhaltung", + "(Duration %s)" : "(Dauer %s)", + "You attended a call with {user1}" : "Sie haben an einem Anruf mit {user1} teilgenommen", + "_%n guest_::_%n guests_" : ["%n Gast","%n Gäste"], + "You attended a call with {user1} and {user2}" : "Sie haben an einem Anruf mit {user1} und {user2} teilgenommen", + "You attended a call with {user1}, {user2} and {user3}" : "Sie haben an einem Anruf mit {user1}, {user2} und {user3} teilgenommen", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sie haben an einem Anruf mit {user1}, {user2}, {user3} und {user4} teilgenommen", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sie haben an einem Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} teilgenommen", + "_%n other_::_%n others_" : ["%n weiterer","%n weitere"], + "{actor} invited you to {call}" : "{actor} hat Sie zu {call} eingeladen", + "You were invited to a conversation or had a call" : "Sie wurden zu einer Unterhaltung eingeladen oder hatten einen Anruf", + "Other activities" : "Andere Aktivitäten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Willkommen zu Nextcloud Talk!\nIn dieser Unterhaltung werden Sie über neue Funktionen in Nextcloud Talk informiert.", + "## New in Talk %s" : "## Neu in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge und Safari können jetzt zur Teilnahme an Audio- und Videoanrufen verwendet werden", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Eins-zu-Eins-Unterhaltungen sind jetzt dauerhaft und können nicht mehr versehentlich in eine Gruppenunterhaltung gewandelt werden. Wenn ein Teilnehmer eine Unterhaltung verlässt, so wird die Unterhaltung jetzt nicht mehr automatisch gelöscht. Nur wenn beide Teilnehmer gehen, so wird die Unterhaltung vom Server gelöscht", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Jetzt können alle Teilnehmer durch das Posten von \"@all\" in den Chat benachrichtigt werden", + "- With the \"arrow-up\" key you can repost your last message" : "- Mit der \"Pfeil nach oben\"-Taste können Sie Ihre letzte Nachricht nochmals senden", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk beherrscht jetzt Befehle. Senden Sie \"/help\" als Nachricht, um zu sehen, ob der Administrator welche eingerichtet hat", + "- With projects you can create quick links between conversations, files and other items" : "- Mit Projekten können Sie einfach und schnell Verknüpfungen zwischen Unterhaltungen, Dateien und anderen Elementen erstellen", + "- You can now mention guests in the chat" : "- Sie können nun Gäste im Chat erwähnen", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Unterhaltungen können jetzt eine Lobby haben. Dies erlaubt Moderatoren dem Chat und dem Anruf beizutreten, um das Meeting vorzubereiten, während andere Benutzer und Gäste warten müssen", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sie können jetzt direkt auf Nachrichten antworten, um anderen Benutzern mehr über Ihre Nachrichten mitzuteilen.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Die Suche nach Unterhaltungen und Teilnehmern durchsucht jetzt auch vorhandene Unterhaltungen. Das macht es viel einfacher, frühere Unterhaltungen zu finden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Wenn die Circles-App installiert ist, können jetzt auch benutzerdefinierte Gruppen zu Unterhaltungen hinzugefügt werden", + "- Check out the new grid and call view" : "- Sehen Sie sich die neue Kachel- und Sprecheransicht an", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sie können jetzt Dateien direkt von Ihrem Gerät in den Chat hochladen und per Drag'n'Drop übertragen.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Geteilte Dateien werden jetzt direkt in der Chatansicht mit den Betrachteranwendungen geöffnet", + "- You can now search for chats and messages in the unified search in the top bar" : "- Sie können jetzt in der einheitlichen Suche in der oberen Leiste nach Chats und Nachrichten suchen", + "- Spice up your messages with emojis from the emoji picker" : "- Peppen Sie Ihre Nachrichten mit Emojis aus der Emoji-Auswahl auf", + "- You can now change your camera and microphone while being in a call" : "Sie können jetzt Ihre Kamera und Ihr Mikrofon wechseln, während Sie telefonieren", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Geben Sie Ihren Unterhaltungen einen Kontext mit einer Beschreibung und öffnen Sie diese, damit eingeloggte Benutzer diese finden und selbst teilnehmen können", + "- See a read status and send failed messages again" : "- Lesestatus sehen und fehlgeschlagene Nachrichten erneut senden", + "- Raise your hand in a call with the R key" : "- Heben Sie Ihre Hand in einem Anruf durch drücken der Taste R", + "- Join the same conversation and call from multiple devices" : "- Treten Sie derselben Unterhaltung von verschiedenen Geräten aus bei", + "- Send voice messages, share your location or contact details" : "- Senden Sie Sprachnachrichten, teilen Sie Ihren Aufenthaltsort oder Ihre Adressdaten", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Fügen Sie Gruppen zu einer Unterhaltung hinzu und die Gruppenmitglieder werden automatisch als Teilnehmer hinzugefügt", + "- A preview of your audio and video is shown before joining a call" : "- Eine Vorschau von Audio und Video wird angezeigt, bevor Sie einen Anruf tätigen", + "- You can now blur your background in the newly designed call view" : "- In der neu gestalteten Anrufansicht können Sie jetzt den Hintergrund unscharf machen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren können nun allgemeine und individuelle Berechtigungen an Teilnehmer vergeben", + "- You can now react to chat messages" : "- Sie können jetzt auf Chatnachrichten reagieren", + "- In the sidebar you can now find an overview of the latest shared items" : "- In der Seitenleiste finden Sie jetzt eine Übersicht über die zuletzt geteilten Elemente", + "- Use a poll to collect the opinions of others or settle on a date" : "- eine Umfrage verwenden, um die Meinungen anderer einzuholen oder sich auf einen Zeitpunkt zu einigen", + "- Configure an expiration time for chat messages" : "- Ablaufdatum für Chatnachrichten konfigurieren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anrufe starten, ohne andere in großen Gesprächen zu benachrichtigen. Sie können einzelne Anrufbenachrichtigungen senden, sobald der Anruf begonnen hat.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatnachrichten senden, ohne die Empfänger zu benachrichtigen, für Fälle die nicht dringend sind", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis können jetzt automatisch vervollständigt werden, indem ein \":\" eingegeben wird", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Verknüpfen Sie verschiedene Artikel mit dem neuen Smart Picker, indem Sie ein \"/\" eingeben", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoren können jetzt Gruppenräume erstellen (erfordert das Hochleistungs-Backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Anrufe können jetzt aufgezeichnet werden (erfordert das Hochleistungs-Backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Unterhaltungen können nun einen Avatar oder ein Icon haben", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle Hintergründe sind nun zusätzlich zum verwischten Hintergrund in Video-Unterhaltungen möglich", + "- Reactions are now available during calls" : "- Reaktionen sind nun auch in Anrufen möglich", + "- Typing indicators show which users are currently typing a message" : "- Schreibindikatoren zeigen, welche Benutzer dabei sind, eine Nachricht zu schreiben", + "- Groups can now be mentioned in chats" : "- Gruppen können nun in Chats erwähnt werden", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Anrufaufnahmen werden automatisch transkribiert, wenn eine entsprechende Anbieterapp registriert ist", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatnachrichten können übersetzt werden, wenn eine Übersetzungsanbieter-App registriert ist", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kann jetzt in _Chat_nachrichten verwendet werden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "– Zur Implementierung von Bots stehen jetzt Webhooks zur Verfügung. Weitere Informationen finden Sie in der Dokumentation: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Legen Sie eine Erinnerung für eine Chatnachricht fest, um später erneut benachrichtigt zu werden", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Verwenden Sie die **Notiz an mich**-Unterhaltung, um Notizen zu machen und Informationen zwischen Ihren Geräten auszutauschen", + "- Captions allow to send a message with a file at the same time" : "- Untertitel ermöglichen das gleichzeitige Senden einer Nachricht mit einer Datei", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Das Video des Sprechers ist jetzt beim Teilen des Bildschirms sichtbar und die Anrufreaktionen sind animiert", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Nachrichten können jetzt 6 Stunden lang von angemeldeten Autoren und Moderatoren bearbeitet werden", + "- Unsent message drafts are now saved in your browser" : "- Nicht gesendete Nachrichtenentwürfe werden jetzt in Ihrem Browser gespeichert", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchats können jetzt im Verbund mit anderen Talk-Servern geführt werden", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoren können jetzt Konten und Gäste sperren, um zu verhindern, dass sie erneut an einer Unterhaltung teilnehmen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Anstehende Anrufe aus verknüpften Kalenderterminen und Abwesenheitsvertretungen werden jetzt in Unterhaltungen angezeigt", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Anrufe können jetzt im Verbund mit anderen Talk-Servern getätigt werden (erfordert das Hochleistungs-Backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Wir stellen den Nextcloud Talk Desktop-Client für Windows, macOS und Linux vor: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zusammenfassung von Anrufaufzeichnungen und ungelesenen Nachrichten in Chats mit dem Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Verbesserte Meetings mit Erkennung von Gästen, die über ihre E-Mail-Adresse eingeladen werden, Import von Teilnehmerlisten, Entwürfen für Umfragen und Herunterladen von Teilnehmerlisten für Anrufe", + "- Archive conversations to stay focused" : "- Archivieren von Gesprächen, um konzentriert zu bleiben", + "- Schedule a meeting into your calendar from within a conversation" : "- Eine Besprechung in Ihrem Kalender aus einer Unterhaltung heraus planen", + "- Search for messages of the current conversation directly in the right sidebar" : "- Nach Nachrichten der aktuellen Unterhaltung direkt in der rechten Seitenleiste suchen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Mit der neuen kompakten Liste sieht man mehr Unterhaltungen auf einen Blick (in den Gesprächseinstellungen aktivieren)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Besprechungsunterhaltungen werden jetzt mit dem Titel und der Beschreibung aus dem Kalender synchronisiert und mit einem Suchfilter ausgeblendet, bis sie kurz vor dem Beginn stehen", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Unterhaltungen in den Benachrichtigungseinstellungen als sensibel markieren, um den Inhalt der Nachricht aus der Unterhaltungsliste und den Benachrichtigungen auszublenden", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Um Push-Benachrichtigungen während \"Bitte nicht stören\" zu erhalten, markieren Sie Unterhaltungen als wichtig", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Fügen Sie andere Teilnehmer zu einem Einzelgespräch hinzu, um im Handumdrehen ein neues Gruppengespräch zu erstellen.", + "- Use threads to keep your chat and discussions organized" : "- Themen verwenden, um Ihre Chats und Diskussionen zu organisieren", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-Transkriptionen sind jetzt während des Anrufs verfügbar (erfordert die Live-Transkriptions-ExApp und das Hochleistungs-Backend)", + "- Moderators can now pin messages so they are kept at the top" : "- die Moderation kann jetzt Nachrichten anheften, sodass diese oben bleiben", + "- Schedule a message to send it at a later time" : "- Den Versand einer Nachricht zu einem späteren Zeitpunkt planen", + "_All %n participant_::_All %n participants_" : ["%n Teilnehmer","Alle %n Teilnehmer"], + "Talk updates ✅" : "Talk Aktualisierungen ✅", + "Reaction deleted by author" : "Reaktion vom Autor gelöscht", + "{actor} created the conversation" : "{actor} hat die Unterhaltung erstellt", + "You created the conversation" : "Sie haben die Unterhaltung erstellt", + "System created the conversation" : "Das System hat die Unterhaltung erstellt", + "An administrator created the conversation" : "Ein Administrator hat die Unterhaltung erstellt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hat die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sie haben die Unterhaltung von \"%1$s\" in \"%2$s\" umbenannt", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ein Administrator hat die Unterhaltung von \"%1$s\" nach \"%2$s\" umbenannt", + "{actor} set the description" : "{actor} hat die Beschreibung gesetzt", + "You set the description" : "Sie haben die Beschreibung gesetzt", + "An administrator set the description" : "Ein Administrator hat die Beschreibung gesetzt", + "{actor} removed the description" : "{actor} hat die Beschreibung entfernt", + "You removed the description" : "Sie haben die Beschreibung entfernt", + "An administrator removed the description" : "Ein Administrator hat die Beschreibung entfernt", + "You started a silent call" : "Sie haben einen stillen Anruf gestartet", + "Outgoing silent call" : "Ausgehender stiller Anruf", + "{actor} started a silent call" : "{actor} hat einen stillen Anruf gestartet", + "Incoming silent call" : "Ankommender stiller Anruf", + "You started a call" : "Sie haben einen Anruf begonnen", + "Outgoing call" : "Ausgehender Anruf", + "{actor} started a call" : "{actor} hat einen Anruf begonnen", + "Incoming call" : "Eingehender Anruf", + "{actor} joined the call" : "{actor} ist dem Anruf beigetreten", + "You joined the call" : "Sie sind dem Anruf beigetreten", + "{actor} left the call" : "{actor} hat den Anruf verlassen", + "You left the call" : "Sie haben den Anruf verlassen", + "{actor} unlocked the conversation" : "{actor} hat die Unterhaltung freigegeben", + "You unlocked the conversation" : "Sie haben die Unterhaltung freigegeben", + "An administrator unlocked the conversation" : "Ein Administrator hat die Unterhaltung freigegeben", + "{actor} locked the conversation" : "{actor} hat die Unterhaltung gesperrt", + "You locked the conversation" : "Sie haben die Unterhaltung gesperrt", + "An administrator locked the conversation" : "Ein Administrator hat die Unterhaltung gesperrt", + "{actor} limited the conversation to the current participants" : "{actor} beschränkte die Unterhaltung auf die aktuellen Teilnehmer", + "You limited the conversation to the current participants" : "Sie haben die Unterhaltung auf die aktuellen Teilnehmer beschränkt", + "An administrator limited the conversation to the current participants" : "Ein Administrator hat die Unterhaltung auf die aktuellen Teilnehmer beschränkt", + "{actor} opened the conversation to registered users" : "{actor} öffnete die Unterhaltung für registrierte Benutzer", + "You opened the conversation to registered users" : "Sie haben die Unterhaltung für registrierte Benutzer geöffnet", + "An administrator opened the conversation to registered users" : "Ein Administrator öffnete die Unterhaltung für registrierte Benutzer", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "You opened the conversation to registered users and users created with the Guests app" : "Sie haben die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Die Administration hat die Unterhaltung für registrierte Benutzer und Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "The conversation is now open to everyone" : "Die Unterhaltung ist nun für jeden geöffnet", + "{actor} opened the conversation to everyone" : "{actor} hat die Unterhaltung für jeden geöffnet", + "You opened the conversation to everyone" : "Sie haben die Unterhaltung für Jedermann geöffnet", + "{actor} restricted the conversation to moderators" : "{actor} hat die Unterhaltung auf Moderatoren beschränkt", + "You restricted the conversation to moderators" : "Sie haben die Unterhaltung auf Moderatoren beschränkt", + "{actor} started breakout rooms" : "{actor} hat Gruppenräume gestartet", + "You started breakout rooms" : "Sie haben Gruppenräume gestartet", + "{actor} stopped breakout rooms" : "{actor} hat Gruppenräume beendet", + "You stopped breakout rooms" : "Sie haben Gruppenräume beendet", + "{actor} allowed guests" : "{actor} hat Gäste zugelassen", + "You allowed guests" : "Sie haben Gäste zugelassen", + "An administrator allowed guests" : "Ein Administrator hat Gäste erlaubt", + "{actor} disallowed guests" : "{actor} hat Gäste untersagt", + "You disallowed guests" : "Sie haben Gäste untersagt", + "An administrator disallowed guests" : "Ein Administrator hat den Gastzugriff untersagt", + "{actor} set a password" : "{actor} hat ein Passwort vergeben", + "You set a password" : "Sie haben ein Passwort vergeben", + "An administrator set a password" : "Ein Administrator hat ein Passwort gesetzt", + "{actor} removed the password" : "{actor} hat das Passwort entfernt", + "You removed the password" : "Sie haben das Passwort entfernt", + "An administrator removed the password" : "Ein Administrator hat das Passwort entfernt", + "{actor} added {user}" : "{actor} hat {user} hinzugefügt", + "You joined the conversation" : "Sie sind der Unterhaltung beigetreten", + "{actor} joined the conversation" : "{actor} ist der Unterhaltung beigetreten", + "You added {user}" : "Sie haben {user} hinzugefügt", + "{actor} added you" : "{actor} hat Sie hinzugefügt", + "An administrator added you" : "Ein Administrator hat Sie hinzugefügt", + "An administrator added {user}" : "Ein Administrator hat {user} hinzugefügt", + "You left the conversation" : "Sie haben die Unterhaltung verlassen", + "{actor} left the conversation" : "{actor} hat die Unterhaltung verlassen", + "{actor} removed {user}" : "{actor} hat {user} entfernt", + "You removed {user}" : "Sie haben {user} entfernt", + "{actor} removed you" : "{actor} hat Sie entfernt", + "An administrator removed you" : "Ein Administrator hat Sie entfernt", + "An administrator removed {user}" : "Ein Administrator hat {user} entfernt", + "{actor} invited {federated_user}" : "{actor} hat {federated_user} eingeladen", + "You invited {federated_user}" : "Sie haben {federated_user} eingeladen", + "You accepted the invitation" : "Sie haben diese Einladung angenommen", + "{actor} invited you" : "{actor} hat Sie eingeladen", + "An administrator invited you" : "Ein Administrator hat Sie eingeladen", + "An administrator invited {federated_user}" : "Die Administration hat {federated_user} eingeladen", + "{federated_user} accepted the invitation" : "{federated_user} hat die Einladung angenommen", + "{actor} removed {federated_user}" : "{actor} hat {federated_user} entfernt", + "You removed {federated_user}" : "Sie haben {federated_user} entfernt", + "You declined the invitation" : "Sie haben die Einladung abgelehnt", + "An administrator removed {federated_user}" : "Ein Administrator hat {federated_user} entfernt", + "{federated_user} declined the invitation" : "{federated_user} hat die Einladung abgelehnt", + "{actor} added group {group}" : "{actor} hat die Gruppe {group} hinzugefügt", + "You added group {group}" : "Sie haben die Gruppe {group} hinzugefügt", + "An administrator added group {group}" : "Ein Administrator hat die Gruppe {group} hinzugefügt", + "{actor} removed group {group}" : "{actor} hat die Gruppe {group} entfernt", + "You removed group {group}" : "Sie haben die Gruppe {group} entfernt", + "An administrator removed group {group}" : "Ein Administrator hat die Gruppe {group} entfernt", + "{actor} added team {circle}" : "{actor} hat das Team {circle} hinzugefügt", + "You added team {circle}" : "Sie haben das Team {circle} hinzugefügt", + "An administrator added team {circle}" : "Ein Administrator hat das Team {circle} hinzugefügt", + "{actor} removed team {circle}" : "{actor} hat das Team {circle} entfernt", + "You removed team {circle}" : "Sie haben das Team {circle} entfernt", + "An administrator removed team {circle}" : "Ein Administrator hat das Team {circle} entfernt", + "{actor} added {phone}" : "{actor} hat {phone} hinzugefügt", + "You added {phone}" : "Sie haben {phone} hinzugefügt", + "An administrator added {phone}" : "Die Administration hat {phone} hinzgefügt", + "{actor} removed {phone}" : "{actor} hat {phone} entfernt", + "You removed {phone}" : "Sie haben {phone} entfernt", + "An administrator removed {phone}" : "Die Administration hat {phone} entfernt", + "{actor} promoted {user} to moderator" : "{actor} hat {user} Moderationsrechte zugeteilt", + "You promoted {user} to moderator" : "Sie haben {user} Moderationsrechte zugeteilt", + "{actor} promoted you to moderator" : "{actor} hat Ihnen Moderationsrechte zugeteilt", + "An administrator promoted you to moderator" : "Die Administration hat Ihnen Moderationsrechte zugeteilt", + "An administrator promoted {user} to moderator" : "Die Administration hat {user} Moderationsrechte zugeteilt", + "{actor} demoted {user} from moderator" : "{actor} hat {user} Moderationsrechte entzogen", + "You demoted {user} from moderator" : "Sie haben {user} Moderationsrechte entzogen", + "{actor} demoted you from moderator" : "{actor} hat Ihnen Moderationsrechte entzogen", + "An administrator demoted you from moderator" : "Die Administration hat Ihnen Moderationsrechte entzogen", + "An administrator demoted {user} from moderator" : "Die Administration hat {user} Moderationsrechte entzogen", + "{actor} shared a file which is no longer available" : "{actor} hat eine Datei geteilt, die nicht mehr vorhanden ist", + "You shared a file which is no longer available" : "Sie haben eine Datei geteilt, die nicht mehr vorhanden ist", + "File shares are currently not supported in federated conversations" : "Dateifreigaben werden bislang in Federated-Unterhaltungen noch nicht unterstützt", + "The shared location is malformed" : "Der freigegebene Standort ist fehlerhaft", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} hat Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "You set up Matterbridge to synchronize this conversation with other chats" : "Sie haben Matterbridge so eingerichtet, dass diese Unterhaltung mit anderen Chats synchronisiert wird", + "{actor} created thread {title}" : "{actor} hat das Thema {title} erstellt", + "You created thread {title}" : "Sie haben das Thema {title} erstellt", + "{actor} renamed thread {title}" : "{actor} hat das Thema {title} umbenannt", + "You renamed thread {title}" : "Sie haben das Thema {title} umbenannt", + "{actor} updated the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration aktualisiert", + "You updated the Matterbridge configuration" : "Sie haben die Matterbridge-Konfiguration aktualisiert", + "{actor} removed the Matterbridge configuration" : "{actor} hat die Matterbridge-Konfiguration entfernt", + "You removed the Matterbridge configuration" : "Sie haben die Matterbridge-Konfiguration entfernt", + "{actor} started Matterbridge" : "{actor} hat Matterbridge gestartet", + "You started Matterbridge" : "Sie haben Matterbridge gestartet", + "{actor} stopped Matterbridge" : "{actor} hat Matterbridge angehalten", + "You stopped Matterbridge" : "Sie haben Matterbridge angehalten", + "{actor} deleted a message" : "{actor} hat eine Nachricht gelöscht", + "You deleted a message" : "Sie haben eine Nachricht gelöscht", + "{actor} edited a message" : "{actor} hat eine Nachricht bearbeitet", + "You edited a message" : "Sie haben eine Nachricht bearbeitet", + "{actor} pinned a message" : "{actor} hat eine Nachricht angepinnt", + "You pinned a message" : "Sie haben eine Nachricht angepinnt", + "{actor} unpinned a message" : "{actor} hat eine Nachricht abgelöst", + "Message was automatically unpinned" : "Die Nachricht wurde automatisch abgelöst.", + "You unpinned a message" : "Sie haben eine Nachricht abgelöst", + "{actor} deleted a reaction" : "{actor} hat eine Reaktion gelöscht", + "You deleted a reaction" : "Sie haben eine Reaktion gelöscht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Sie haben den Ablauf der Nachricht auf %n Woche festgelegt","Sie haben den Ablauf der Nachricht auf %n Wochen festgelegt"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Sie haben den Ablauf der Nachricht auf %n Tag festgelegt","Sie haben den Ablauf der Nachricht auf %n Tage festgelegt"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Sie haben den Ablauf der Nachricht auf %n Stunde festgelegt","Sie haben den Ablauf der Nachricht auf %n Stunden festgelegt"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Sie haben den Ablauf der Nachricht auf %n Minute festgelegt","Sie haben den Ablauf der Nachricht auf %n Minuten festgelegt"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} hat den Ablauf der Nachricht auf %n Woche festgelegt","{actor} hat den Ablauf der Nachricht auf %n Wochen festgelegt"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} hat den Ablauf der Nachricht auf %n Tag festgelegt","{actor} hat den Ablauf der Nachricht auf %n Tage festgelegt"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} hat den Ablauf der Nachricht auf %n Stunde festgelegt","{actor} hat den Ablauf der Nachricht auf %n Stunden festgelegt"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} hat den Ablauf der Nachricht auf %n Minute festgelegt","{actor} hat den Ablauf der Nachricht auf %n Minuten festgelegt"], + "{actor} disabled message expiration" : "{actor} hat den Ablauf von Nachrichten deaktiviert", + "You disabled message expiration" : "Sie haben den Ablauf von Nachrichten deaktiviert", + "{actor} cleared the history of the conversation" : "{actor} hat den Gesprächsverlauf gelöscht", + "You cleared the history of the conversation" : "Sie haben den Gesprächsverlauf gelöscht", + "{actor} set the conversation picture" : "{actor} hat das Unterhaltungsbild eingestellt", + "You set the conversation picture" : "Sie haben das Unterhaltungsbild eingestellt", + "{actor} removed the conversation picture" : "{actor} hat das Unterhaltungsbild entfernt", + "You removed the conversation picture" : "Sie haben das Unterhaltungsbild entfernt", + "{actor} ended the poll {poll}" : "{actor} hat die Umfrage {poll} beendet", + "You ended the poll {poll}" : "Sie haben die Umfrage {poll} beendet", + "{actor} started the video recording" : "{actor} hat die Videoaufnahme gestartet", + "You started the video recording" : "Sie haben die Videoaufnahme gestartet", + "{actor} stopped the video recording" : "{actor} hat die Videoaufnahme gestoppt", + "You stopped the video recording" : "Sie haben die Videoaufnahme gestoppt", + "{actor} started the audio recording" : "{actor} hat die Audioaufnahme gestartet", + "You started the audio recording" : "Sie haben die Audioaufnahme gestartet", + "{actor} stopped the audio recording" : "{actor} hat die Audioaufnahme gestoppt", + "You stopped the audio recording" : "Sie haben die Audioaufnahme gestoppt", + "The recording failed" : "Aufnahme fehlgeschlagen", + "Someone voted on the poll {poll}" : "Jemand hat in der Umfrage {poll} abgestimmt", + "Message deleted by author" : "Nachricht vom Autor gelöscht", + "Message deleted by {actor}" : "Nachricht von {actor} gelöscht", + "Message deleted by you" : "Nachricht von Ihnen gelöscht", + "Deleted user" : "Gelöschter Benutzer", + "Unknown number" : "Unbekannte Nummer", + "Administration" : "Verwaltung", + "System" : "System", + "%s (guest)" : "%s (Gast)", + "Missed call" : "Verpasster Anruf", + "Unanswered call" : "Unbeantworteter Anruf", + "Call ended (Duration {duration})" : "Anruf beendet (Dauer {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} hat den Anruf beendet (Dauer {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})","Anruf mit %n Gästen wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Anruf mit %n Gast wurde beendet (Dauer {duration})","Anruf mit %n Gästen wurde beendet (Dauer {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} hat den Anruf mit %n Gast beendet (Duration {duration})","{actor} hat den Anruf mit %n Gästen beendet (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} ended (Duration {duration})" : "Anruf mit {user1} beendet (Dauer {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} hat den Anruf mit {user1} beendet (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1} and {user2} ended (Duration {duration})" : "Anruf mit {user1} und {user2} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} hat den Anruf mit {user1} und {user2} beendet (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Anruf mit {user1}, {user2} und {user3} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2} und {user3} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3} und {user4} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3} und {user4} beendet (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet, da die maximale Gesprächsdauer erreicht wurde (Dauer {duration}) ", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} wurde beendet (Dauer {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} hat den Anruf mit {user1}, {user2}, {user3}, {user4} und {user5} beendet (Duration {duration})", + "Message of {user} in {conversation}" : "Nachricht von {user} in {conversation}", + "Message of {user}" : "Nachricht von {user}", + "Message of a deleted user in {conversation}" : "Nachricht eines gelöschten Benutzers in {conversation}", + "Talk conversations" : "Talk-Unterhaltungen", + "Talk to %s" : "Mit %s sprechen", + "An error occurred. Please contact your administrator." : "Es ist ein Fehler aufgetreten, bitte kontaktieren Sie Ihre Administration.", + "App disabled" : "App deaktiviert", + "Conversation subfolders are disabled" : "Unterhaltungsunterordner sind deaktiviert", + "Storage quota exceeded" : "Speicherkontingent überschritten", + "Could not prepare conversation folder" : "Unterhaltungsordner konnten nicht vorbereitet werden", + "File not found" : "Datei nicht gefunden", + "Path must point to a file" : "Der Pfad muss auf eine Datei verweisen", + "File is not inside the conversation draft folder for this room" : "Die Datei befindet sich nicht im Unterhaltungsentwurfsordner für diesen Raum", + "File is not shared, or shared but not with the user" : "Datei ist nicht geteilt oder nicht mit dem Benutzer geteilt", + "No account available to delete." : "Kein Konto zum Löschen verfügbar.", + "Poll" : "Umfrage", + "Password needs to be set" : "Passwort muss festgelegt werden", + "Uploading the file failed" : "Hochladen der Datei fehlgeschlagen", + "No image file provided" : "Kein Bild zur Verfügung gestellt", + "File is too big" : "Datei ist zu groß", + "Invalid file provided" : "Ungültige Datei zur Verfügung gestellt", + "Invalid image" : "Ungültiges Bild", + "Unknown filetype" : "Unbekannter Dateityp", + "Talk mentions" : "Talk Erwähnungen", + "More conversations" : "Weitere Unterhaltungen", + "Say hi to your friends and colleagues!" : "Begrüßen Sie Ihre Freunde und Kollegen!", + "No unread mentions" : "Keine ungelesenen Erwähnungen", + "Call in progress" : "Anruf ist aktiv", + "You were mentioned" : "Sie wurden erwähnt", + "Write to conversation" : "An eine Unterhaltung schreiben", + "Writes event information into a conversation of your choice" : "Schreibt Termininformationen in eine Unterhaltung Ihrer Wahl", + "Missing email field in header line" : "Fehlendes E-Mail-Feld in der Kopfzeile", + "Following lines are invalid: %s" : "Folgende Zeilen sind unzulässig: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s hat Sie zur Unterhaltung \"%2$s\" eingeladen.", + "You were invited to conversation \"%s\"." : "Sie wurden zur Unterhaltung \"%s\" eingeladen.", + "Conversation invitation" : "Einladung zu einer Unterhaltung", + "Scheduled time" : "Geplante Zeit", + "Description" : "Beschreibung", + "You can also dial-in via phone with the following details" : "Sie können sich auch per Telefon mit den folgenden Daten einwählen", + "Dial-in information" : "Einwahlinformationen", + "Meeting ID" : "Meeting-ID", + "Your PIN" : "Ihre PIN", + "Click the button below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the lobby now." : "Um jetzt der Lobby beizutreten, auf den unten stehenden Link klicken.", + "Join lobby for \"%s\"" : "Lobby für \"%s\" beitreten", + "Click the button below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf die untenstehende Schaltfläche klicken.", + "Click the link below to join the conversation now." : "Um jetzt der Unterhaltung beizutreten, auf den unten stehenden Link klicken.", + "Join \"%s\"" : "\"%s\" beitreten", + "Meeting" : "Meeting", + "Password request: %s" : "Passwortanforderung: %s", + "Private conversation" : "Private Unterhaltung", + "Deleted user (%s)" : "Gelöschter Benutzer (%s)", + "Failed to upload call recording" : "Anrufaufzeichnung konnte nicht hochgeladen werden", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Der Aufzeichnungsserver konnte die Aufzeichnung des Anrufs {call} nicht hochladen. Bitte wenden Sie sich an die Administration.", + "Share to chat" : "In Unterhaltung teilen", + "Dismiss notification" : "Benachrichtigung verwerfen", + "Call recording now available" : "Anrufaufzeichnung jetzt verfügbar", + "The recording for the call in {call} was uploaded to {file}." : "Aufnahme der Unterhaltung in {call} wurde als {file} hochgeladen.", + "Transcript now available" : "Transkript jetzt verfügbar", + "The transcript for the call in {call} was uploaded to {file}." : "Das Transkript für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to transcript call recording" : "Anrufaufzeichnung konnte nicht transkribiert werden", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht transkribieren. Bitte wenden Sie sich an die Administration.", + "Call summary now available" : "Anrufzusammenfassung jetzt verfügbar", + "The summary for the call in {call} was uploaded to {file}." : "Die Zusammenfassung für den Anruf in {call} wurde als {file} hochgeladen.", + "Failed to summarize call recording" : "Anrufaufzeichnung konnte nicht zusammengefasst werden", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Der Server konnte die Aufzeichnung in {file} für den Anruf in {call} nicht zusammenfassen. Bitte wenden Sie sich an die Administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} hat Sie eingeladen dem {roomName} auf {remoteServer} beizutreten", + "Accept" : "Annehmen", + "Decline" : "Ablehnen", + "{user1} invited you to a federated conversation" : "{user1} hat Sie zu einer Federated-Unterhaltung eingeladen", + "Someone reacted" : "Jemand hat reagiert", + "New message" : "Neue Nachricht", + "Reminder" : "Erinnerung", + "Someone mentioned you" : "Jemand hat Sie erwähnt", + "Notification" : "Benachrichtigung", + "Someone reacted in a private conversation" : "Jemand hat in einer privaten Unterhaltung reagiert", + "You received a message in a private conversation" : "Sie haben eine Nachricht in einer privaten Unterhaltung erhalten", + "Reminder in a private conversation" : "Erinnerung in einer privaten Unterhaltung", + "Someone mentioned you in a private conversation" : "Jemand hat Sie in einer privaten Unterhaltung erwähnt", + "Notification in a private conversation" : "Benachrichtigung in einer privaten Unterhaltung", + "Reminder: You in {call}" : "Erinnerung: Sie in {call}", + "Reminder: {user} in {call}" : "Erinnerung: {user} in {call}", + "Reminder: Deleted user in {call}" : "Erinnerung: Gelöschter Benutzer in {call}", + "Reminder: {guest} (guest) in {call}" : "Erinnerung: {guest} (Gast) in {call}", + "Reminder: Guest in {call}" : "Erinnerung: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reagierte mit {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagierte mit {reaction} in {call}\n ", + "Deleted user reacted with {reaction} in {call}" : "Gelöschter Benutzer reagierte mit {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (Gast) reagierte mit {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reagierte mit {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gelöschter Benutzer in {call}", + "{guest} (guest) in {call}" : "{guest} (Gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} hat Ihnen eine private Nachricht gesendet", + "{user} sent a message in conversation {call}" : "{user} hat eine Nachricht in der Unterhaltung {call} gesendet", + "A deleted user sent a message in conversation {call}" : "Ein gelöschter Benutzer hat eine Nachricht in der Unterhaltung {call} gesendet", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) hat eine Nachricht in der Unterhaltung {call} gesendet", + "A guest sent a message in conversation {call}" : "Ein Gast hat eine Nachricht in der Unterhaltung {call} gesendet", + "{user} replied to your private message" : "{user} hat auf Ihre private Nachricht geantwortet", + "{user} replied to your message in conversation {call}" : "{user} hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "A deleted user replied to your message in conversation {call}" : "Ein gelöschter Benutzer hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "A guest replied to your message in conversation {call}" : "Ein Gast hat auf Ihre Nachricht in der Unterhaltung {call} geantwortet", + "Reminder: You in private conversation {call}" : "Erinnerung: Sie in der privaten Unterhaltung {call}", + "Reminder: A deleted user in private conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der privaten Unterhaltung {call}", + "Reminder: {user} in private conversation" : "Erinnerung: {user} in einer privaten Unterhaltung", + "Reminder: You in conversation {call}" : "Erinnerung: Sie in der Unterhaltung {call}", + "Reminder: {user} in conversation {call}" : "Erinnerung: {user} in der Unterhaltung {call}", + "Reminder: A deleted user in conversation {call}" : "Erinnerung: Ein gelöschter Benutzer in der Unterhaltung {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Erinnerung: {guest} (Gast) in der Unterhaltung {call}", + "Reminder: A guest in conversation {call}" : "Erinnerung: Ein Gast in der Unterhaltung {call}", + "{user} reacted with {reaction} to your private message" : "{user} hat mit {reaction} auf Ihre private Nachricht reagiert", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ein gelöschter Benutzer hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (Gast) hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ein Gast hat mit {reaction} auf Ihre Nachricht in der Unterhaltung {call} reagiert", + "{user} mentioned you in a private conversation" : "{user} hat Sie in einer privaten Unterhaltung erwähnt", + "{user} mentioned group {group} in conversation {call}" : "{user} hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "{user} mentioned team {team} in conversation {call}" : "{user} hat das Team {team} in der Unterhaltung {call} erwähnt", + "{user} mentioned everyone in conversation {call}" : "{user} hat jeden in der Unterhaltung erwähnt {call}", + "{user} mentioned you in conversation {call}" : "{user} hat Sie in einer Unterhaltung erwähnt: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ein gelöschter Benutzer hat die Gruppe {group} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned team {team} in conversation {call}" : "Ein gelöschter Benutzer hat das Team {team} in der Unterhaltung {call} erwähnt", + "A deleted user mentioned everyone in conversation {call}" : "Ein gelöschter Benutzer hat jeden in der Unterhaltung {call} erwähnt", + "A deleted user mentioned you in conversation {call}" : "Ein gelöschter Benutzer hat Sie in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (Gast) erwähnte die Gruppe {group} in der Unterhaltung {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (Gast) hat das Team {team} in der Unterhaltung {call} erwähnt", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (Gast) hat jeden in der Unterhaltung {call} erwähnt ", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) hat Sie in der Unterhaltung {call} erwähnt", + "A guest mentioned group {group} in conversation {call}" : "Ein Gast erwähnte die Gruppe {group} in der Unterhaltung {call}", + "A guest mentioned team {team} in conversation {call}" : "Ein Gast hat das Team {team} in der Unterhaltung {call} erwähnt", + "A guest mentioned everyone in conversation {call}" : "Ein Gast hat alle in der Unterhaltung {call} erwähnt", + "A guest mentioned you in conversation {call}" : "Ein Gast hat Sie in der Unterhaltung {call} erwähnt", + "View message" : "Nachricht ansehen", + "Dismiss reminder" : "Erinnerung verwerfen", + "View chat" : "Chat anzeigen", + "{user} invited you to a group conversation: {call}" : "{user} hat Sie zu einer Gruppenunterhaltung eingeladen: {call}", + "Join call" : "Anruf beitreten", + "Answer call" : "Anruf beantworten", + "{user} would like to talk with you" : "{user} möchte mit Ihnen sprechen", + "Call back" : "Zurückrufen", + "You missed a call from {user}" : "Sie haben einen Anruf von {user} verpasst", + "Accept call" : "Anruf annehmen", + "Incoming phone call from {call}" : "Eingehender Anruf von{call}", + "You missed a phone call from {call}" : "Sie haben einen Anruf von {call} verpasst", + "A group call has started in {call}" : "Ein Gruppenanruf wurde in {call} gestartet", + "You missed a group call in {call}" : "Sie haben einen Gruppenanruf in {call} verpasst", + "{email} is requesting the password to access {file}" : "{email} hat das Passwort für den Zugriff auf {file} angefordert", + "{email} tried to request the password to access {file}" : "{email} hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Someone is requesting the password to access {file}" : "Jemand hat das Passwort für den Zugriff auf {file} angefordert", + "Someone tried to request the password to access {file}" : "Jemand hat versucht, das Passwort für den Zugriff auf {file} anzufordern", + "Open settings" : "Einstellungen öffnen", + "Hosted signaling server added" : "Gehosteter Signalisierungsserver hinzugefügt", + "The hosted signaling server is now configured and will be used." : "Der gehostete Signalisierungsserver ist jetzt konfiguriert und wird verwendet.", + "Hosted signaling server removed" : "Gehosteter Signalisierungsserver entfernt", + "The hosted signaling server was removed and will not be used anymore." : "Der gehostete Signalisierungsserver wurde entfernt und wird nicht mehr verwendet.", + "Hosted signaling server changed" : "Gehosteter Signalisierungsserver geändert", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Das gehostete Konto des Signalisierungsservers hat den Status von \"{oldstatus}\" in \"{newstatus}\" geändert.", + "pending" : "Ausstehend", + "active" : "Aktiv", + "expired" : "Abgelaufen", + "blocked" : "Blockiert", + "error" : "Fehler", + "The certificate of {host} expires in {days} days" : "Das Zertifikat von {host} läuft in {days} Tagen ab", + "The certificate of {host} expired" : "Das Zertifikat von {host} ist abgelaufen", + "Contact via Talk" : "Über Talk kontaktieren", + "Open Talk" : "Talk öffnen", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Nachrichten senden, Themen erstellen und Sprach- sowie und Videoanrufe starten.", + "Presentation" : "Präsentation", + "Voice room" : "Sprachraum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Direkt am Anruf teilnehmen, ideal für Nachholtermine oder spontane Treffen.", + "Webinar" : "Webinar", + "Conversations" : "Unterhaltungen", + "Messages in current conversation" : "Nachrichten in der aktuellen Unterhaltung", + "{user}" : "{user}", + "Messages" : "Nachrichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Nachrichten in anderen Unterhaltungen", + "One-to-one rooms always need to show the other users avatar" : "Eins-zu-Eins-Räume müssen immer den Avatar des anderen Benutzers anzeigen", + "Invalid emoji character" : "Ungültiges Emoji-Zeichen", + "Invalid background color" : "Ungültige Hintergrundfarbe", + "Avatar image is not square" : "Avatar-Bild ist nicht quadratisch", + "Room {number}" : "Raum {number}", + "Other" : "Sonstiges", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Problem bei der Authentifizierung dieser Instanz aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Something unexpected happened." : "Es ist etwas Unerwartetes passiert.", + "The URL is invalid." : "Die URL ist ungültig.", + "An HTTPS URL is required." : "Eine HTTPS-URL ist erforderlich.", + "The email address is invalid." : "Die E-Mail-Adresse ist ungültig.", + "The language is invalid." : "Die Sprache ist ungültig.", + "The country is invalid." : "Das Land ist ungültig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Es gibt ein Problem mit dem Anfrage für den Trial-Test. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are send from your servers address. Please try again later." : "Es werden zu viele Anfragen von Ihrer Serveradresse aus gesendet. Bitte später erneut versuchen.", + "There is already a trial registered for this Nextcloud instance." : "Für diese Nextcloud-Instanz ist bereits eine Trial-Testversion registriert.", + "Something unexpected happened. Please try again later." : "Es ist etwas Unerwartetes passiert. Bitte später erneut versuchen.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Trial-Test konnte nicht angefordert werden, da der Trial-Testserver sich falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "Trial requested but failed to get account information. Please check back later." : "Trial-Testversion angefordert, aber keine Kontoinformationen erhalten. Bitte versuchen Sie es später erneut.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Es ist ein Problem bei der Authentifizierung dieser Anfrage aufgetreten. Möglicherweise ist sie von außen nicht erreichbar, um ihre URL zu überprüfen.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Die Kontoinformationen konnten nicht abgerufen werden, weil sich der Trial-Server falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Beim Abrufen der Kontoinformationen ist ein Problem aufgetreten. Bitte überprüfen Sie Ihre Protokolldateien für weitere Informationen.", + "There is no such account registered." : "Ein solches Konto ist nicht registriert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontoinformationen konnten nicht abgerufen werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "Deleting the hosted signaling server account failed. Please check back later." : "Fehler beim Löschen des Singnalisierungsserver-Kontos. Bitte versuchen Sie es später erneut.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Konto konnte nicht gelöscht werden, da sich der Trial-Testserver falsch verhalten hat. Bitte versuchen Sie es später erneut.", + "There is a problem with deleting the account. Please check your logs for further information." : "Es gibt ein Problem mit dem Löschen des Kontos. Bitte die Protokolldateien für weitere Informationen überprüfen.", + "Too many requests are sent from your servers address. Please try again later." : "Es wurden zu viele Anfragen von Ihrer Serveradresse gesendet. Bitte später erneut versuchen.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Konto konnte nicht gelöscht werden, da der Trial-Testserver nicht erreichbar ist. Bitte versuchen Sie es später erneut.", + "Note to self" : "Notiz an mich", + "A place for your private notes, thoughts and ideas" : "Ein Platz für Ihre privaten Notizen, Gedanken und Ideen", + "Transcript is AI generated and may contain mistakes" : "Das Transkript wird von KI generiert und kann Fehler enthalten", + "Summary is AI generated and may contain mistakes" : "Die Zusammenfassung wird von KI generiert und kann Fehler enthalten", + "Let's get started!" : "Los geht's!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ist eine sichere, selbst gehostete Kommunikationsplattform, die sich nahtlos in das Nextcloud-Ökosystem integriert.\n\n#### Hauptmerkmale von Nextcloud Talk:\n\n* Chat und Messaging in privaten und Gruppenchats\n* Sprach- und Videoanrufe\n* Dateifreigabe und Integration mit anderen Nextcloud-Apps\n* Anpassbare Gesprächseinstellungen, Moderation und Datenschutzkontrollen\n* Web, Desktop und Mobile (iOS und Android)\n* Private & sichere Kommunikation\n\n Erfahren Sie mehr in der [Benutzeranleitung](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Willkommen bei Nextcloud Talk\n\nNextcloud Talk ist eine private und leistungsstarke Messaging-App, die mit Nextcloud integriert ist. Chatten Sie in privaten oder Gruppenunterhaltungen, arbeiten Sie über Sprach- und Videoanrufe zusammen, organisieren Sie Webinare und Veranstaltungen, passen Sie Ihre Unterhaltungen an und vieles mehr.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Texte formatieren, um aussagekräftige Nachrichten zu erstellen\n\nIn Nextcloud Talk können Sie die Markdown-Syntax verwenden, um Ihre Nachrichten zu formatieren. Sie können zum Beispiel **fett** oder *kursiv* formatieren oder `Texte als Code hervorheben`. Sie können sogar Tabellen erstellen und Überschriften zu Ihrem Text hinzufügen.\n\nMöchten Sie einen Tippfehler korrigieren oder die Formatierung ändern? Bearbeiten Sie Ihre Nachricht, indem Sie im Nachrichtenmenü auf \"Nachricht bearbeiten\" klicken.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Anhänge und Links hinzufügen\n\nFügen Sie Dateien aus Ihrem Nextcloud Hub über die Schaltfläche \"+\" hinzu. Teilen Sie Elemente aus Dateien und verschiedenen Nextcloud-Apps. Einige Apps unterstützen sogar interaktive Widgets, z. B. die Text-App.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lassen Sie den Unterhaltungen ihren Lauf: Erwähnen Sie Nutzer, reagieren Sie auf Nachrichten und mehr\n\nSie können alle Teilnehmer einer Unterhaltung mit %s erwähnen oder bestimmte Teilnehmer erwähnen, indem Sie \"@\" eingeben und ihren Namen aus der Liste auswählen.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Sie können auf Nachrichten antworten, sie an andere Chats und Personen weiterleiten oder Nachrichteninhalte kopieren.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Mehr tun mit Smart Picker\n\nGeben Sie einfach \"/\" ein oder wählen Sie das Menü \"+\", um den Smart Picker zu öffnen, mit dem Sie verschiedene Inhalte an Ihre Nachrichten anhängen können. Sie können den Smart Picker so konfigurieren, dass Sie Elemente aus Nextcloud-Apps, GIFs, Kartenpositionen, KI-generierte Inhalte und vieles mehr hinzufügen können.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gesprächseinstellungen verwalten\n\nIm Menü \"Unterhaltung\" können Sie auf verschiedene Einstellungen zur Verwaltung Ihrer Unterhaltungen zugreifen, wie z. B.:\n* Unterhaltungsinformationen bearbeiten\n* Verwalten von Benachrichtigungen\n* Zahlreiche Moderationsregeln anwenden\n* Zugang und Sicherheit konfigurieren\n* Aktivieren von Bots\n* und mehr!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Vereinigte Arabische Emirate", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua und Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentinien", + "American Samoa" : "Amerikanisch-Samoa", + "Austria" : "Österreich", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Inseln", + "Azerbaijan" : "Aserbaidschan", + "Bosnia and Herzegovina" : "Bosnien und Herzegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesch", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivien", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saba und Sint Eustatius", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetinsel", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosinseln", + "Congo, the Democratic Republic of the" : "Kongo (Demokratische Republik)", + "Central African Republic" : "Zentralafrikanische Republik", + "Congo" : "Kongo", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbeinküste", + "Cook Islands" : "Cookinseln", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "China", + "Colombia" : "Kolumbien", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Weihnachtsinsel", + "Cyprus" : "Zypern", + "Czechia" : "Tschechien", + "Germany" : "Deutschland", + "Djibouti" : "Dschibuti", + "Denmark" : "Dänemark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanische Republik", + "Algeria" : "Algerien", + "Ecuador" : "Ekuador", + "Estonia" : "Estland", + "Egypt" : "Ägypten", + "Western Sahara" : "Westsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Äthiopien", + "Finland" : "Finnland", + "Fiji" : "Fidschi", + "Falkland Islands (Malvinas)" : "Falklandinseln", + "Micronesia, Federated States of" : "Mikronesien (Föderierte Staaten)", + "Faroe Islands" : "Färöer", + "France" : "Frankreich", + "Gabon" : "Gabun", + "United Kingdom of Great Britain and Northern Ireland" : "Vereinigtes Königreich Großbritannien und Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Französisch-Guinea", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Äquatorialguinea", + "Greece" : "Griechenland", + "South Georgia and the South Sandwich Islands" : "Südgeorgien und die Südlichen Sandwichinseln", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard und die McDonaldinseln", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "Britisches Territorium im Indischen Ozean", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodscha", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "St. Kitts und Nevis", + "Korea, Democratic People's Republic of" : "Nordkorea", + "Korea, Republic of" : "Korea, Republik", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaimaninseln", + "Kazakhstan" : "Kasachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldawien (Republik)", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "St. Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallinseln", + "North Macedonia" : "Nordmazedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolei", + "Macao" : "Macau", + "Northern Mariana Islands" : "Nördliche Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Neukaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsel", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niederlande", + "Norway" : "Norwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Neuseeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Französisch-Polynesien", + "Papua New Guinea" : "Papua-Neuguinea", + "Philippines" : "Philippinen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre und Miquelon", + "Pitcairn" : "Pitcairninseln", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palästina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russland", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabien", + "Solomon Islands" : "Salomonen", + "Seychelles" : "Seychellen", + "Sudan" : "Sudan", + "Sweden" : "Schweden", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "St. Helena, Ascension und Tristan da Cunha", + "Slovenia" : "Slowenien", + "Svalbard and Jan Mayen" : "Spitzbergen und Jan Mayen", + "Slovakia" : "Slowakei", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Südsudan", + "Sao Tome and Principe" : "São Tomé und Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrien", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- und Caicosinseln", + "Chad" : "Tschad", + "French Southern Territories" : "Französische Süd- und Antarktisgebiete", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadschikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Osttimor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunesien", + "Tonga" : "Tonga", + "Turkey" : "Türkei", + "Trinidad and Tobago" : "Trinidad und Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansania", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "Vereinigte Staaten von Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikanstadt", + "Saint Vincent and the Grenadines" : "St. Vincent und die Grenadinen", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jungferninseln (britisch)", + "Virgin Islands, U.S." : "Jungferninseln, U.S.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis und Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Südafrika", + "Zambia" : "Sambia", + "Zimbabwe" : "Simbabwe", + "Background blur" : "Hintergrund-Verschleierung", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Es konnte nicht geprüft werden, ob WASM-Ladeunterstützung verfügbar ist. Bitte prüfen Sie manuell, ob Ihr Webserver `.wasm`-Dateien bereitstellt.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ihr Webserver ist nicht richtig eingerichtet, um `.wasm`-Dateien auszuliefern. Dies ist normalerweise ein Problem mit der Nginx-Konfiguration. Für die Hintergrundunschärfe muss eine Anpassung vorgenommen werden, um auch `.wasm`-Dateien auszuliefern. Vergleichen Sie Ihre Nginx-Konfiguration mit der empfohlenen Konfiguration in unserer Dokumentation.", + "Talk configuration values" : "Talk Einstellungswerte", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Das Erzwingen einer Anrufdauer wird nur mit System-Cron unterstützt. Bitte aktivieren Sie System-Cron oder entfernen Sie die Konfiguration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-Werte (derzeit auf %d) sind aufgrund technischer Beschränkungen nicht durchsetzbar. Die Hintergrundaufgabe wird nur alle 5 Minuten ausgeführt, die Verwendung erfolgt also auf eigene Gefahr.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es wird dringend empfohlen, \"memcache.locking\" einzurichten, wenn Talk-Federation aktiviert ist.", + "High-performance backend" : "Hochleistungs-Backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Kein Hochleistungs-Backend konfiguriert – Ohne das Hochleistungs-Backend skaliert es nur für kleinere Meetings (max. 2–3 Teilnehmer). Bitte richten Sie das Hochleistungs-Backend ein, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Die Ausführung des Hochleistungs-Backends im Modus \"conversation_cluster\" ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Das Hochleistungs-Backend unterstützt heutzutage echtes Clustering, das stattdessen verwendet werden sollte.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Das Definieren mehrerer Hochleistungs-Backends ist veraltet und wird in der nächsten Version nicht mehr unterstützt. Stattdessen sollte ein Load Balancer zusammen mit geclusterten Signalservern eingerichtet und in den Talk-Einstellungen konfiguriert werden.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Der gespeicherte öffentliche Schlüssel für den verwendeten Algorithmus %1$s passt nicht zum gespeicherten privaten Schlüssel. %2$s ausführen, um das Problem zu beheben.", + "High-performance backend not configured correctly. Run %s for details." : "Hochleistungs-Backend ist nicht richtig konfiguriert. Für Einzelheiten %s ausführen.", + "High-performance backend not configured correctly" : "Hochleistungs-Backend nicht richtig konfiguriert", + "Error: Cannot connect to server" : "Fehler: Kann nicht zum Server verbinden", + "Error: Server did not respond with proper JSON" : "Fehler: Der Server hat nicht mit korrektem JSON geantwortet", + "Error: Certificate expired" : "Fehler: Zertifikat ist abgelaufen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Hochleistungs-Backend-Servers sind nicht synchron. Bitte stellen Sie sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisieren Sie ihre Zeit manuell.", + "Could not get version" : "Version kann nicht abgerufen werden", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fehler: Aktuelle Version: {version}; Server muss aktualisiert werden, um mit dieser Version von Talk kompatibel zu sein", + "Error: Server responded with: {error}" : "Fehler: Der Server antwortete mit: {error}", + "Error: Unknown error occurred" : "Es ist ein unbekannter Fehler aufgetreten.", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Achtung: Laufende Version: {version}; Der Server unterstützt nicht alle Funktionen dieser Talk-Version, fehlende Funktionen: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen Speichercache zu konfigurieren, wenn Nextcloud Talk mit einem Hochleistungs-Backend ausgeführt wird.", + "Client Push" : "Client-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push ist installiert, dies verbessert die Rechtzeitigkeit von Talk-Benachrichtigungen.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} ist nicht installiert. Dies kann zu verzögerten Talk-Benachrichtigungen führen.", + "Recording backend" : "Aufzeichnungs-Backend", + "Using the recording backend requires a High-performance backend." : "Die Verwendung des Aufzeichnungs-Backends erfordert ein Hochleistungs-Backend.", + "No recording backend configured" : "Kein Aufzeichnungs-Backend konfiguriert", + "SIP configuration" : "SIP-Konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Die Nutzung der SIP-Funktionalität erfordert ein Hochleistungs-Backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Zugewiesene Talk-Telefonnummern dürfen nicht mit + oder 0 beginnen. Bitte die folgenden Nummern entfernen oder aktualisieren:\n{list}", + "No SIP backend configured" : "Kein SIP-Backend konfiguriert", + "Invalid date, date format must be YYYY-MM-DD" : "Ungültiges Datum, Zulässiges Datumsformat: JJJJ-MM-TT", + "Conversation not found" : "Unterhaltung nicht gefunden", + "Path is already shared with this conversation" : "Der Pfad wurde bereits mit dieser Unterhaltung geteilt", + "Chat, video & audio-conferencing using WebRTC" : "Chat, Video & Audio-Konferenzen mittels WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, Video- und Audiokonferenzen mit WebRTC\n\n* 💬 **Chat** Nextcloud Talk verfügt über einen einfachen Text-Chat, in dem Sie Dateien über Ihre Nextcloud Dateien-App oder Ihr lokales Gerät teilen oder hochladen und andere Teilnehmer erwähnen können.\n* 👥 **Private, Gruppen-, öffentliche und passwortgeschützte Anrufe!** Laden Sie jemanden oder eine ganze Gruppe ein oder senden Sie einen öffentlichen Link, um zu einem Anruf einzuladen.\n* 🌐 **Federated-Chats** Chatten Sie mit anderen Nextcloud-Benutzern über deren Server\n* 💻 **Bildschirmfreigabe!** Teilen Sie Ihren Bildschirm mit den Teilnehmern Ihrer Unterhaltung.\n* 🚀 **Integration mit anderen Nextcloud-Apps** wie Dateien, Kalender, Benutzerstatus, Dashboard, Flow, Karten, Smart Picker, Kontakte, Deck und viele mehr.\n* 🌉 **Mit anderen Chat-Lösungen synchronisieren** Durch die Integration von [Matterbridge](https://github.com/42wim/matterbridge/) in Talk können Sie viele andere Chat-Lösungen ganz einfach mit Nextcloud Talk und umgekehrt synchronisieren.", + "Leave call" : "Anruf verlassen", + "Navigating away from the page will leave the call in {conversation}" : "Bei verlassen der Seite, wird der Anruf in {conversation} beendet", + "Stay in call" : "Beim Anruf bleiben", + "Error occurred when getting the conversation information" : "Fehler beim Abrufen der Unterhaltungsinformationen ", + "Discuss this file" : "Diese Datei besprechen", + "Share this file with others to discuss it" : "Teilen Sie diese Datei mit anderen, um sie zu besprechen.", + "Share this file" : "Diese Datei teilen", + "Join conversation" : "Unterhaltung beitreten", + "This conversation is password-protected." : "Diese Unterhaltung ist passwortgeschützt.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Es wurden mehrere ungültige Passworteingaben von Ihrer IP-Adresse festgestellt. Daher wird die nächste Anmeldung um 30 Sekunden verzögert.", + "The password is wrong. Try again." : "Das Passwort ist falsch. Bitte erneut versuchen.", + "Password" : "Passwort", + "Submit" : "Übermitteln", + "Error requesting the password." : "Fehler bei der Passwortanforderung.", + "Request password" : "Passwort anfordern", + "This conversation has ended" : "Diese Unterhaltung wurde beendet", + "Error occurred when joining the conversation" : "Beim Beitritt zur Unterhaltung ist ein Fehler aufgetreten", + "Close Talk sidebar" : "Talk-Seitenleiste schließen", + "Open Talk sidebar" : "Talk-Seitenleiste öffnen", + "Everyone" : "Jeder", + "Users and moderators" : "Benutzer und Moderatoren", + "Moderators only" : "Nur Moderatoren", + "Disable calls" : "Anrufe deaktivieren", + "Save changes" : "Änderungen speichern ", + "Saving …" : "Speichere …", + "Saved!" : "Gespeichert!", + "Limit to groups" : "Auf Gruppen beschränken", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen von den aufgelisteten Gruppen an den Unterhaltungen teilnehmen.", + "Guests can still join public conversations." : "Gäste können nach wie vor öffentlichen Unterhaltungen beitreten.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Benutzer, welche Talk nicht mehr nutzen können, werden weiterhin als Teilnehmer ihrer früheren Unterhaltungen aufgelistet. Chatnachrichten werden ebenfalls aufbewahrt.", + "Limit using Talk" : "Beschränkung bei der Nutzung von Talk", + "Limit creating a public and group conversation" : "Beschränkung für das Erstellen von öffentlichen und Gruppenunterhaltungen", + "Limit creating conversations" : "Beschränkung beim Erstellen von Unterhaltungen", + "Limit starting a call" : "Beschränkung beim Anrufen", + "Limit starting calls" : "Starten von Anrufen begrenzen", + "When a call has started, everyone with access to the conversation can join the call." : "Nachdem eine Unterhaltung gestartet wurde, kann jeder, der Zugriff auf die Unterhaltung hat, dieser beitreten.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Die folgenden Bots sind auf diesem Server installiert. In der Dokumentation finden Sie Einzelheiten zum {linkstart1}Erstellen Ihres eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die Sie auf Ihrem Server aktivieren können.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Auf diesem Server sind keine Bots installiert. In der Dokumentation finden Sie Einzelheiten zum {linkstart1}Erstellen Ihres eigenen Bots{linkend} oder einer {linkstart2}Liste von Bots{linkend}, die Sie auf Ihrem Server aktivieren können.", + "Description is not provided" : "Keine Beschreibung vorhanden", + "Locked for moderators" : "Gesperrt für Moderatoren", + "Enabled" : "Aktiviert", + "Disabled" : "Deaktiviert", + "Bots settings" : "Bots-Einstellungen", + "State" : "Status", + "Name" : "Name", + "Last error" : "Letzter Fehler", + "Total errors count" : "Anzahl Fehler insgesamt", + "Find more bots" : "Weitere Bots finden", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Vertrauenswürdige Server können auf der {linkstart}Einstellungsseite für Freigaben{linkend} konfiguriert werden.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated Chats und Anrufe funktionieren bereits. Die Verwaltung von Anhängen ist für eine spätere Version geplant.", + "Enable Federation in Talk app" : "Federation in der Talk-App aktivieren", + "Permissions" : "Berechtigungen", + "Allow users to be invited to federated conversations" : "Benutzern erlauben, zu Federated-Unterhaltungen eingeladen zu werden.", + "Allow users to invite federated users into conversation" : "Benutzern erlauben, Federated-Benutzer zu Unterhaltungen einzuladen.", + "Only allow to federate with trusted servers" : "Nur erlauben, mit vertrauenswürdigen Servern zu federieren", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wenn mindestens eine Gruppe ausgewählt ist, können nur Personen der aufgelisteten Gruppen Federated-Benutzer zu Unterhaltungen einladen.", + "Groups allowed to invite federated users" : "Gruppen, die berechtigt sind, Federated-Benutzer einzuladen", + "Select groups …" : "Gruppen auswählen …", + "All messages" : "Alle Nachrichten", + "@-mentions only" : "Nur @-Erwähnungen", + "Off" : "Aus", + "General settings" : "Allgemeine Einstellungen", + "Default notification settings" : "Standard Benachrichtigungseinstellungen", + "Default group notification" : "Standard Gruppenbenachrichtigung", + "Default group notification for new groups" : "Standard Gruppenbenachrichtigung für neue Gruppen", + "Integration into other apps" : "Einbindung in andere Apps", + "Allow conversations on files" : "Alle Unterhaltungen zu Dateien", + "Allow conversations on public shares for files" : "Alle Unterhaltungen in öffentlichen Freigaben zu Dateien", + "End-to-end encrypted calls" : "Ende-zu-Ende-verschlüsselte Anrufe", + "Enable encryption" : "Verschlüsselung aktivieren", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Für Ende-zu-Ende-verschlüsselte Anrufe mit einer konfigurierten SIP-Brücke ist eine neuere Version des Hochleistungs-Backends und der SIP-Bridge erforderlich.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile Clients unterstützen derzeit Ende-zu-Ende-verschlüsselte Anrufe nicht.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Durch Anklicken des obigen Buttons werden die Angaben im Formular an die Server der Struktur AG geschickt. Weitere Informationen hierzu gibt es unter {linkstart}spreed.eu{linkend}.", + "Pending" : "Ausstehend", + "Error" : "Fehler", + "Blocked" : "Blockiert", + "Active" : "Aktiv", + "Expired" : "Abgelaufen", + "Never" : "Niemals", + "The trial could not be requested. Please try again later." : "Der Test konnte nicht angefordert werden. Bitte später erneut versuchen.", + "The account could not be deleted. Please try again later." : "Konto konnte nicht gelöscht werden. Bitte später erneut versuchen.", + "Hosted High-performance backend" : "Gehostetes Hochleistungs-Backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Unser Partner Struktur AG bietet einen Dienst an, bei dem ein gehosteter Signalisierungsserver angefordert werden kann. Dazu brauchen Sie nur das untenstehende Formular auszufüllen und Ihre Nextcloud wird ihn anfordern. Sobald der Server für Sie eingerichtet ist, werden die Anmeldedaten automatisch ausgefüllt. Dadurch werden die bestehenden Einstellungen des Signalisierungsservers überschrieben.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Wenn Ihr Hochleistungs-Backend-Konto STUN- und/oder TURN-Funktionen enthält, werden die Einstellungen entsprechend aktualisiert.", + "URL of this Nextcloud instance" : "URL dieser Nextcloud-Installation", + "Full name of the user requesting the trial" : "Vollständiger Name des Benutzers, der die Testversion anfordert", + "Email of the user" : "E-Mail-Adresse des Benutzers", + "Language" : "Sprache", + "Country" : "Land", + "Request signaling server trial" : "Testversion eines Signalisierungsservers anfordern", + "You can see the current status of your hosted signaling server in the following table." : "Den aktuellen Status Ihres gehosteten Signalisierungsservers sehen Sie in der folgenden Tabelle.", + "Status" : "Status", + "Created at" : "Erstellt am", + "Expires at" : "Läuft ab am", + "Limits" : "Beschränkungen", + "STUN included" : "STUN inklusive", + "Yes" : "Ja", + "No" : "Nein", + "TURN included" : "TURN inklusive", + "Delete the signaling server account" : "Signalisierungsserver-Konto löschen", + "_%n user_::_%n users_" : ["%n Benutzer","%n Benutzer"], + "Installed version: {version}" : "Installierte Version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Sie können Matterbridge installieren, um Nextcloud Talk mit einigen anderen Diensten zu verlinken. Besuchen Sie deren {linkstart1}GitHub-Seite{linkend} für weitere Details. Das Herunterladen und Installieren der App kann eine Weile dauern. Falls die Zeit überschritten wird, installieren Sie sie bitte manuell über den {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Die Matterbridge-Binärdatei hat falsche Berechtigungen. Bitte sicher stellen, dass die Matterbridge-Binärdatei dem richtigen Benutzer gehört und ausgeführt werden kann. Sie befindet sich unter \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Die Matterbridge Anwendung konnte nicht gefunden werden oder kann nicht ausgeführt werden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Sie können den Pfad zur Matterbridge-Binärdatei auch manuell über die Konfiguration festlegen. Weitere Informationen finden Sie in der {linkstart} Matterbridge-Integrationsdokumentation {linkend}.", + "Downloading …" : "Herunterladen …", + "Install Talk Matterbridge" : "Talk-Matterbridge installieren", + "An error occurred while installing the Matterbridge app" : "Es ist ein Fehler bei der Installation der Matterbridge-App aufgetreten.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Es ist ein Fehler bei der Installation von Talk Matterbridge aufgetreten. Bitte installieren Sie es manuell.", + "Failed to execute Matterbridge binary." : "Matterbridge-Binärdatei konnte nicht ausgeführt werden.", + "Matterbridge integration" : "Matterbridge-Einbindung", + "Enable Matterbridge integration" : "Matterbridge-Einbindung aktivieren", + "Status: Checking connection" : "Status: Prüfe die Verbindung", + "OK: Running version: {version}" : "OK: Laufende Version: {version}", + "Error: Server seems to be a Signaling server" : "Fehler: Der Server scheint ein Signalisierungsserver zu sein", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fehler: Die Systemzeiten des Nextcloud-Servers und des Aufzeichnungs-Backend-Servers sind nicht synchron. Bitte stellen Sie sicher, dass beide Server mit einem Zeitserver verbunden sind oder synchronisieren Sie ihre Zeit manuell.", + "Recording backend URL" : "URL für Aufzeichnungs-Backend", + "Validate SSL certificate" : "SSL-Zertifikat überprüfen", + "Delete this server" : "Diesen Server löschen", + "Test this server" : "Diesen Server testen", + "Disabled for all calls" : "Für alle Anrufe deaktiviert", + "Enabled for all calls" : "Für alle Anrufe aktiviert", + "Configurable on conversation level by moderators" : "Konfigurierbar auf Unterhaltungsebene durch Moderatoren", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Die PHP-Einstellungen \"upload_max_filesize\" oder \"post_max_size\" erlauben nur das Hochladen von Dateien bis zu {maxUpload}.", + "Recording backend settings saved" : "Aufzeichnungs-Backend Einstellungen gespeichert", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoren können die Zustimmung auf Unterhaltungsebene aktivieren. Die Einwilligung zur Aufzeichnung ist für jeden Teilnehmer vor der Teinahme an der Unterhaltung erforderlich.", + "The consent to be recorded will be required for each participant before joining every call." : "Vor der Teilnahme an einer Unterhaltung ist für jeden Teilnehmer die Einwilligung zur Aufzeichnung erforderlich.", + "The consent to be recorded is not required." : "Eine Einwilligung zur Aufzeichnung ist nicht erforderlich.", + "Recording backend configuration is only possible with a High-performance backend." : "Aufzeichnungs-Backend-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Add a new recording backend server" : "Einen neuen Aufzeichnungs-Backend-Server hinzufügen", + "Shared secret" : "Geteiltes Geheimnis", + "Recording consent" : "Einwilligung zur Aufzeichnung", + "Recording transcription" : "Aufnahme-Transskription", + "Automatically transcribe call recordings with a transcription provider" : "Automatisches Transkribieren von Gesprächsaufzeichnungen mit einem Transkriptionsanbieter", + "Automatically summarize call recordings with transcription and summary providers" : "Automatisches Zusammenfassen von Anrufaufzeichnungen mit Transkriptions- und Zusammenfassungsanbietern", + "SIP configuration saved!" : "SIP-Konfiguration gespeichert!", + "SIP configuration is only possible with a High-performance backend." : "SIP-Einrichtung ist nur in Verbindung mit einem Hochleistungs-Backend möglich.", + "Enable SIP Dial-out option" : "SIP-Anrufen-Option aktivieren", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Der Signalisierungsserver muss auf die unterstützte SIP-Anrufen-Funktion aktualisiert werden.", + "Do not show SIP Dial-out caller number" : "Abgehend die eigene SIP-Rufnummer nicht anzeigen", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Die anonyme Nummer sollte als \"unbekannte\" oder \"unterdrückte Nummer\" angezeigt werden, um den Empfänger anzurufen", + "Dial-out number" : "Abgehende Telefonnummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formatierte Nummer, die als Fallback-Rufnummer für ausgehende Anrufe verwendet wird", + "Dial-out prefix" : "Vorwahl für ausgehende Anrufe", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Präfix zur eingestellten Rufnummer für ausgehende Anrufe (Standard ist \"+\")", + "Restrict SIP configuration" : "SIP-Konfiguration einschränken", + "Enable SIP configuration" : "SIP-Konfiguration aktivieren", + "Only users of the following groups can enable SIP in conversations they moderate" : "Nur Benutzer der folgenden Gruppen können SIP in von ihnen moderierten Unterhaltungen aktivieren", + "Phone number (Country)" : "Telefonnummer (Land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Diese Informationen werden sowohl in Einladungs-E-Mails versandt als auch in der Seitenleiste für alle Teilnehmer angezeigt.", + "Nextcloud base URL" : "Nextcloud-Basis-URL", + "Talk Backend URL" : "Talk-Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Verfügbare Funktionen", + "Error: Websocket connection failed" : "Fehler: Websocket-Verbindung fehlgeschlagen", + "Error code" : "Fehlercode", + "Error message" : "Fehlermeldung", + "Error: Websocket connection failed. Check browser console" : "Fehler: Websocket-Verbindung fehlgeschlagen. Browser-Konsole überprüfen", + "High-performance backend URL" : "Hochleistungs-Backend-URL", + "Missing High-performance backend warning hidden" : "Warnung zu fehlendem Hochleistungs-Backend ausgeblendet", + "High-performance backend settings saved" : "Hochleistungs-Backend Einstellungen gespeichert", + "Nextcloud Talk setup not complete" : "Einrichtung von Nextcloud Talk nicht abgeschlossen", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Bitte beachten Sie, dass bei Meetings mit mehr als 2 Teilnehmern ohne das Hochleistungs-Backend höchstwahrscheinlich Verbindungsprobleme auftreten und die teilnehmenden Geräte stark belastet werden.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installieren Sie das Hochleistungs-Backend, um sicherzustellen, dass Meetings mit mehreren Teilnehmern reibungslos funktionieren.", + "Nextcloud portal" : "Nextcloud Portal", + "Quick installation guide" : "Kurzanleitung zur Installation", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Das Hochleistungs-Backend ist für Anrufe und Unterhaltungen mit mehreren Teilnehmern erforderlich. Ohne das Backend müssen alle Teilnehmer ihr eigenes Video für jeden anderen Teilnehmer einzeln hochladen, was höchstwahrscheinlich zu Verbindungsproblemen und einer hohen Belastung der teilnehmenden Geräte führt.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es wird dringend empfohlen, einen verteilten Cache einzurichten, wenn Sie Nextcloud Talk mit einem Hochleistungs-Backend verwenden.", + "Add High-performance backend server" : "Hochleistungs-Backend-Server hinzufügen", + "Warn about connectivity issues in calls with more than 2 participants" : "Vor Verbindungsproblemen bei Anrufen mit mehr als 2 Teilnehmern warnen", + "STUN server URL" : "STUN-Server-URL", + "The server address is invalid" : "Die Serveradresse ist ungültig", + "STUN settings saved" : "STUN-Einstellungen gespeichert", + "STUN servers" : "STUN-Server", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ein STUN-Server wird verwendet, um die öffentliche IP-Adresse von Teilnehmern hinter einem Router zu ermitteln.", + "Add a new STUN server" : "Einen neuen STUN-Server hinzufügen", + "{schema} scheme must be used with a domain" : "{schema}-Schema muss mit einer Domain verwendet werden", + "{option1} and {option2}" : "{option1} und {option2}", + "{option} only" : "nur {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-Kandidaten erfolgreich durch den TURN-Server zurück gesendet", + "Error: No working ICE candidates returned by the TURN server" : "Fehler: Keine funktionierenden ICE-Kandidaten durch den TURN-Server zurück gesendet", + "Testing whether the TURN server returns ICE candidates" : "Testen, ob der TURN-Server ICE-Kandidaten zurückgibt", + "TURN server schemes" : "TURN-Server-Schemata", + "TURN server URL" : "TURN-Server-URL", + "TURN server secret" : "TURN-Server-Secret", + "TURN server protocols" : "TURN-Serverprotokolle", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ein TURN-Server wird verwendet, um den Datenverkehr von Teilnehmern hinter einer Firewall zu übertragen. Wenn einzelne Teilnehmer keine Verbindung zu anderen herstellen können, ist höchstwahrscheinlich ein TURN-Server erforderlich. Anweisungen zum Einrichten sind in folgender {linkstart}Dokumentation{linkend} zu finden.", + "TURN settings saved" : "TURN-Einstellungen gespeichert", + "TURN servers" : "TURN-Server", + "Add a new TURN server" : "Einen neuen TURN-Server hinzufügen", + "Failed" : "Fehlgeschlagen", + "OK" : "OK", + "Checking …" : "Überprüfe …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fehlgeschlagen: WebAssembly ist in diesem Browser deaktiviert oder wird nicht unterstützt. Bitte aktivieren Sie WebAssembly oder verwenden Sie einen Browser, der es unterstützt, um die Prüfung durchzuführen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fehlgeschlagen: Die Dateien \".wasm\" und \".tflite\" wurden vom Webserver nicht korrekt zurückgegeben. Bitte prüfen Sie den Abschnitt \"Systemanforderungen\" in der Talk-Dokumentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- und \".tflite\"-Dateien wurden ordnungsgemäß vom Webserver zurückgegeben.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Es scheint, dass die PHP- und Apache-Konfiguration nicht kompatibel ist. Bitte beachten Sie, dass PHP nur mit dem Modul MPM_PREFORK und PHP-FPM nur mit dem Modul MPM_EVENT verwendet werden kann.", + "Web server setup checks" : "Prüfungen der Webserver-Einrichtung", + "Files required for virtual background can be loaded" : "Die für den virtuellen Hintergrund erforderlichen Dateien können geladen werden", + "Federated user" : "Federated-Benutzer", + "Assign participants to rooms" : "Teilnehmer Räumen zuweisen", + "Configure breakout rooms" : "Einstellungen für Gruppenräume", + "Number of breakout rooms" : "Anzahl an Gruppenräumen", + "You can create from 1 to 20 breakout rooms." : "Sie können zwischen 1 bis 20 Gruppenräume erstellen.", + "Assignment method" : "Zuweisungsmethode", + "Automatically assign participants" : "Teilnehmer automatisch zuordnen", + "Manually assign participants" : "Teilnehmer manuell zuordnen", + "Allow participants to choose" : "Teilnehmern die Wahl lassen", + "Create rooms" : "Räume erstellen", + "Confirm" : "Bestätigen", + "Create breakout rooms" : "Gruppenräume erstellen", + "Reset" : "Zurücksetzen", + "Delete breakout rooms" : "Gruppenräume löschen", + "Room {roomNumber}" : "Raum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuelle Gruppenräume und deren Einstellungen gehen verloren", + "Cancel" : "Abbrechen", + "Unassigned participants" : "Nicht zugewiesene Teilnehmer", + "Back" : "Zurück", + "Assign" : "Zuweisen", + "Add participant \"{user}\"" : "Teilnehmer \"{user}\" hinzufügen", + "Now" : "Jetzt", + "Invalid calendar selected" : "Ungültiger Kalender ausgewählt", + "Invalid start time selected" : "Ungültige Startzeit ausgewählt", + "Invalid end time selected" : "Ungültige Endzeit ausgewählt", + "Unknown error occurred" : "Unbekannter Fehler aufgetreten", + "Sending no invitations" : "Keine Einladungen versenden", + "{participant0} will receive an invitation" : "{participant0} erhält eine Einladung", + "{participant0} and {participant1} will receive invitations" : "{participant0} und {participant1} erhalten Einladungen", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} und %n weiterer erhalten Einladungen","{participant0}, {participant1} und %n andere erhalten Einladungen"], + "Invite {user}" : "{user} einladen ", + "Invite all users and emails in this conversation" : "Alle Benutzer und E-Mail-Adressen zu dieser Unterhaltung einladen", + "Meeting created" : "Besprechung erstellt", + "Upcoming meetings" : "Anstehende Besprechungen", + "Loading …" : "Lade …", + "No upcoming meetings" : "Keine anstehenden Besprechungen", + "Schedule a meeting" : "Eine Besprechung planen", + "Meeting title" : "Titel der Besprechung", + "From" : "Von", + "To" : "An", + "Calendar" : "Kalender", + "Attendees" : "Teilnehmende", + "No other participants to send invitations to." : "Keine anderen Teilnehmer, an die Einladungen gesendet werden können.", + "Add attendees" : "Teilnehmer hinzufügen", + "Save" : "Speichern", + "Search participants" : "Suche Teilnehmer", + "No results" : "Keine Ergebnisse", + "Done" : "Erledigt", + "Disable live transcription" : "Live-Transkription deaktivieren", + "Enable live transcription (generated by AI)" : "Live-Transkription aktivieren (KI-generiert)", + "Enable live transcription (Live transcriptions app is not installed)" : "Live-Transkription aktivieren (Live-Transkriptions-App ist nicht installiert)", + "Disable live translation" : "Live-Übersetzung deaktivieren", + "Enable live translation (generated by AI)" : "Live-Übersetzung aktivieren (KI-generiert)", + "Original language" : "Ausgangssprache", + "Live translations app is not installed" : "Die Live-Übersetzungs-App ist nicht installiert", + "Original language: {languageName}" : "Originalsprache: {languageName}", + "Translated language" : "Übersetzte Sprache", + "Translated language: {languageName}" : "Übersetzte Sprache: {languageName}", + "Raise hand" : "Hand heben", + "Raise hand (R)" : "Hand heben (R)", + "Lower hand" : "Hand herunternehmen", + "Lower hand (R)" : "Hand herunternehmen (R)", + "Exit full screen (F)" : "Vollbild verlassen (F)", + "Full screen (F)" : "Vollbild (F)", + "Speaker view" : "Sprecheransicht", + "Grid view" : "Kachelansicht", + "Error when trying to load the available live transcription languages" : "Fehler beim Versuch, die verfügbaren Live-Transkriptionssprachen zu laden", + "Failed to enable live transcription" : "Live-Transkription konnte nicht aktiviert werden", + "Failed to enable live translations" : "Live-Übersetzung konnten nicht aktiviert werden", + "Failed to disable live translations" : "Live-Übersetzung konnten nicht deaktiviert werden", + "Recording consent is required" : "Zustimmung zur Aufzeichnung ist erforderlich", + "This conversation is read-only" : "Diese Unterhaltung ist schreibgeschützt", + "Conversation not found or not joined" : "Unterhaltung nicht gefunden oder nicht beigetreten", + "Lobby is still active and you're not a moderator" : "Die Lobby ist weiterhin aktiv und Sie sind kein Moderator", + "Connection failed" : "Verbindung fehlgeschlagen", + "Reload" : "Neu laden", + "{nickName} raised their hand." : "{nickName} hat die Hand gehoben.", + "A participant raised their hand." : "Ein Teilnehmer hat die Hand gehoben.", + "Collapse stripe" : "Streifen einklappen", + "Expand stripe" : "Streifen aufklappen", + "Previous page of videos" : "Vorherige Seite mit Videos", + "Next page of videos" : "Nächste Seite mit Videos", + "Connecting …" : "Verbinde …", + "Calling …" : "Rufe an …", + "Waiting for {user} to join the call" : "Warte darauf, dass {user} der Unterhaltung beitritt", + "Waiting for others to join the call …" : "Warte auf weitere Teilnehmer …", + "You can invite others in the participant tab of the sidebar" : "Sie können andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste einladen", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sie können andere Teilnehmer auf dem Teilnehmer-Tab der Seitenleiste oder über diesen Link einladen!", + "Share this link to invite others!" : "Teilen Sie diesen Link, um andere Personen einzuladen!", + "Copy link" : "Link kopieren", + "You are not allowed to enable audio" : "Sie dürfen Audio nicht einschalten", + "No audio. Click to select device" : "Kein Ton. Zum Auswählen des Geräts anklicken", + "Mute audio" : "Mikrofon stummschalten", + "Mute audio (M)" : "Mikrofon stummschalten (M)", + "Unmute audio" : "Mikrofon einschalten", + "Unmute audio (M)" : "Mikrofon einschalten (M)", + "None" : "Keine", + "Select a microphone" : "Ein Mikrofon auswählen", + "Select a speaker" : "Einen Lautsprecher auswählen", + "Microphone settings" : "Mikrofoneinstellungen", + "Check devices" : "Geräte prüfen", + "Access to camera was denied" : "Zugriff auf die Kamera wurde verweigert", + "Error while accessing camera: It is likely in use by another program" : "Fehler beim Zugriff auf die Kamera: Sie wird wahrscheinlich von einem anderen Programm verwendet", + "Error while accessing camera" : "Fehler beim Zugriff auf die Kamera", + "You have been muted by a moderator" : "Sie wurden von einem Moderator stummgeschaltet", + "Hide presenter video" : "Moderatorenvideo ausblenden", + "You are not allowed to enable video" : "Sie dürfen Video nicht aktivieren", + "No video. Click to select device" : "Kein Bild. Zum Auswählen des Geräts anklicken", + "Disable video" : "Video deaktivieren", + "Disable video (V)" : "Video deaktivieren (V)", + "Enable video" : "Video aktivieren", + "Enable video (V)" : "Video aktivieren (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren (V) - Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Video aktivieren. Ihre Verbindung wird kurz unterbrochen, wenn Sie Video zum ersten Mal aktivieren.", + "Select a video device" : "Eine Videoquelle auswählen", + "Show presenter" : "Moderator anzeigen", + "You" : "Sie", + "Mute" : "Stummschalten", + "Muted" : "Stummgeschaltet", + "Show screen" : "Bildschirm anzeigen", + "Stop following" : "Nicht mehr folgen", + "Connection could not be established …" : "Es konnte keine Verbindung hergestellt werden …", + "Connection was lost and could not be re-established …" : "Die Verbindung wurde unterbrochen und konnte nicht wiederhergestellt werden …", + "Connection could not be established. Trying again …" : "Es konnte keine Verbindung hergestellt werden. Versuche erneut …", + "Connection lost. Trying to reconnect …" : "Verbindung zum Server verloren. Es wird versucht diese wiederherzustellen …", + "Connection problems …" : "Verbindungsprobleme …", + "Collapse" : "Zuklappen", + "Expand" : "Erweitern", + "You need to be logged in to upload files" : "Sie müssen angemeldet sein, um Dateien hochzuladen", + "Drop your files to upload" : "Dateien zum Hochladen hineinziehen", + "Conversation messages" : "Unterhaltungsnachrichten", + "Scroll to bottom" : "Nach unten blättern", + "Post message" : "Nachricht senden", + "Federated conversation" : "Federated-Unterhaltung", + "Public conversation" : "Öffentliche Unterhaltung", + "Favorite" : "Favorit", + "Banned users" : "Gesperrte Personen", + "Manage the list of banned users in this conversation." : "Liste der in dieser Unterhaltung gesperrten Personen bearbeiten", + "Manage bans" : "Sperrungen bearbeiten", + "No banned users" : "Keine gesperrten Personen", + "Banned by:" : "Ausgeschlossen von:", + "Date:" : "Datum:", + "Note:" : "Bemerkung:", + "Hide details" : "Details ausblenden", + "Show details" : "Details anzeigen", + "Unban" : "Entsperren", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Den Titel und die Beschreibung können Sie im {linkstart} Kalender ↗ ändern{linkend}.", + "Error while updating conversation name" : "Fehler bei der Aktualisierung des Namens der Unterhaltung", + "Error while updating conversation description" : "Fehler bei der Aktualisierung der Beschreibung der Unterhaltung", + "Enter a name for this conversation" : "Geben Sie einen Namen für diese Unterhaltung ein", + "Edit conversation name" : "Name der Unterhaltung bearbeiten", + "Edit conversation description" : "Beschreibung der Unterhaltung bearbeiten", + "Enter a description for this conversation" : "Geben Sie eine Beschreibung für diese Unterhaltung ein", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Die folgenden Bots können in dieser Unterhaltung aktiviert werden. Wenden Sie sich an Ihre Administration, um weitere Bots auf diesem Server installieren zu lassen.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Auf diesem Server sind keine Bots installiert. Wenden Sie sich an Ihre Administration, um Bots auf diesem Server installieren zu lassen.", + "Disable" : "Deaktivieren", + "Enable" : "Aktivieren", + "The bot is not available anymore" : "Der Bot ist nicht mehr verfügbar", + "Breakout rooms" : "Gruppenräume", + "Manage breakout rooms" : "Gruppenräume verwalten", + "Set up breakout rooms for this conversation" : "Gruppenräume für diese Unterhaltung einrichten", + "Please select a valid PNG or JPG file" : "Bitte eine gültige PNG- oder JPG-Datei wählen", + "Choose your conversation picture" : "Unterhaltungsbild auswählen", + "Choose" : "Auswählen", + "Error setting conversation picture" : "Fehler beim Setzen des Unterhaltungsbildes", + "Could not set the conversation picture: {error}" : "Unterhaltungsbild konnte nicht festgelegt werden: {error}", + "Error cropping conversation picture" : "Fehler beim Beschneiden des Unterhaltungsbildes", + "Error removing conversation picture" : "Fehler beim Entfernen des Unterhaltungsbildes", + "Set emoji as conversation picture" : "Emoji als Unterhaltungsbild setzen", + "Set background color for conversation picture" : "Hintergrundfarbe für Unterhaltungsbild setzen", + "Upload conversation picture" : "Unterhaltungsbild hochladen", + "Choose conversation picture from files" : "Unterhaltungsbild aus Dateien wählen", + "Remove conversation picture" : "Unterhaltungsbild entfernen", + "The file must be a PNG or JPG" : "Die Datei muss im PNG- oder JPG-Format sein", + "Set picture" : "Bild setzen", + "Default permissions modified for {conversationName}" : "Standardberechtigungen für {conversationName} geändert", + "Could not modify default permissions for {conversationName}" : "Für {conversationName} konnten die Standardberechtigungen nicht geändert werden", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bearbeiten Sie die Standardberechtigungen für die Teilnehmer dieser Unterhaltung. Diese Einstellungen wirken sich nicht auf Moderatoren aus.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Jedes Mal, wenn Berechtigungen in diesem Abschnitt geändert werden, gehen benutzerdefinierte Berechtigungen, die zuvor einzelnen Teilnehmern zugewiesen wurden, verloren.", + "All permissions" : "Alle Berechtigungen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Die Teilnehmer haben die Berechtigung, einen Anruf zu starten, einem Anruf beizutreten, Audio, Video und Bildschirmübertragung zu aktivieren.", + "Participants can use all available features." : "Teilnehmer können alle verfügbaren Funktionen nutzen.", + "Restricted" : "Eingeschränkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Die Teilnehmer können nur an Anrufen teilnehmen, aber keine Audio-, Video- oder Bildschirmübertragung aktivieren, bis ein Moderator diese Berechtigungen manuell erteilt.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Die Teilnehmer erhalten einen reduzierten Funktionsumfang, bis die Moderation manuell zusätzliche Berechtigungen erteilt.", + "Advanced permissions" : "Erweiterte Berechtigungen", + "Edit permissions" : "Berechtigungen bearbeiten", + "Conversation settings" : "Unterhaltungseinstellungen", + "Basic Info" : "Basisinformationen", + "Personal" : "Persönlich", + "Moderation" : "Moderation", + "Setup overview" : "Einstellungsübersicht", + "Live transcription" : "Live-Transkription", + "Live transcriptions app is not installed" : "Die Live-Transkriptions-App ist nicht installiert", + "Enable live transcription" : "Live-Transkription aktivieren", + "Breakout Rooms" : "Gruppenräume", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gefahrenzone", + "Archive conversation" : "Unterhaltung archivieren", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivierte Unterhaltungen werden standardmäßig aus der Unterhaltungsliste ausgeblendet. Sie werden jedoch weiterhin angezeigt, wenn Sie nach dem Unterhaltungsnamen suchen oder auf eine Liste archivierter Unterhaltungen zugreifen.", + "Do you really want to leave \"{displayName}\"?" : "Möchten Sie \"{displayName}\" verlassen?", + "You can archive this conversation instead." : "Sie können stattdessen die Unterhaltung archivieren.", + "Leave conversation" : "Unterhaltung verlassen", + "You need to promote a new moderator before you can leave the conversation" : "Sie müssen einen neuen Moderator bestimmen, bevor Sie die Unterhaltung verlassen können.", + "Delete conversation" : "Unterhaltung löschen", + "Do you really want to delete \"{displayName}\"?" : "Möchten Sie \"{displayName}\" löschen?", + "Error while deleting conversation" : "Fehler beim Löschen der Unterhaltung", + "Delete all chat messages" : "Alle Chatnachrichten löschen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Sollen alle Nachrichten in \"{displayName}\" gelöscht werden?", + "Error while clearing chat history" : "Fehler beim Löschen des Chatverlaufs", + "Be careful, these actions cannot be undone." : "Seien Sie vorsichtig, diese Aktionen können nicht rückgängig gemacht werden.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nachdem Sie eine Unterhaltung verlassen haben, ist eine Einladung erforderlich, um einer bereits geschlossenen Unterhaltung wieder beizutreten. Einer noch geöffneten Unterhaltung können Sie jederzeit wieder beitreten.", + "Permanently delete this conversation." : "Die Unterhaltung endgültig löschen.", + "Delete chat messages" : "Chatnachrichten löschen", + "Permanently delete all the messages in this conversation." : "Alle Nachrichten in dieser Unterhaltung endgültig löschen.", + "_%n hour_::_%n hours_" : ["%n Stunde","%n Stunden"], + "_%n day_::_%n days_" : ["%n Tag","%n Tage"], + "_%n week_::_%n weeks_" : ["%n Woche","%n Wochen"], + "Custom expiration time" : "Benutzerdefinierte Ablaufzeit", + "Message expiration disabled" : "Nachrichtenablauf deaktiviert", + "Message expiration set: {duration}" : "Nachrichtenablauf eingestellt: {duration}", + "Error when trying to set message expiration" : "Fehler beim Festlegen des Nachrichtenablaufs", + "Message expiration" : "Nachrichtenablauf", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatnachrichten können nach einer bestimmten Zeit gelöscht werden. Hinweis: Im Chat freigegebene Dateien werden für den Besitzer nicht gelöscht, aber sie werden nicht mehr in der Unterhaltung freigegeben.", + "Set message expiration" : "Nachrichtenablauf festlegen", + "Current message expiration" : "Akteller Nachrichtenablauf", + "Password copied to clipboard" : "Passwort in die Zwischenablage kopiert", + "Password could not be copied" : "Passwort kann nicht kopiert werden", + "Guest access" : "Gastzugriff", + "Breakout rooms are not allowed in public conversations." : "Gruppenräume sind bei öffentlichen Gesprächen nicht gestattet.", + "Allow guests to join this conversation via link" : "Gästen die Teilnahme an dieser Unterhaltung per Link erlauben", + "Password protection" : "Passwortschutz", + "This conversation is password-protected. Guests need password to join" : "Diese Unterhaltung ist passwortgeschützt. Gäste brauchen ein Passwort um teilzunehmen", + "Password protection is needed for public conversations" : "Passwortschutz ist für öffentliche Gespräche erforderlich", + "Set a password" : "Passwort setzen", + "Change password" : "Passwort ändern", + "Enter new password" : "Neues Passwort eingeben", + "Save password" : "Passwort speichern", + "Copy password" : "Passwort kopieren", + "Guests are allowed to join this conversation via link" : "Gäste dürfen dieser Unterhaltung über einen Link beitreten", + "Guests are not allowed to join this conversation" : "Gäste dürfen dieser Unterhaltung nicht beitreten", + "Resend invitations" : "Einladungen erneut versenden", + "This conversation is open to both registered users and users created with the Guests app" : "Diese Unterhaltung ist sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "This conversation is open to registered users" : "Diese Unterhaltung ist für registrierte Benutzer geöffnet", + "This conversation is limited to the current participants" : "Diese Unterhaltung ist auf die bisherigen Teilnehmer beschränkt", + "You opened the conversation to both registered users and users created with the Guests app" : "Sie haben diese Unterhaltung sowohl für registrierte Benutzer, als auch für Benutzer, die mit der Gast-App erstellt wurden, geöffnet", + "Error occurred when opening or limiting the conversation" : "Es ist ein Fehler beim Öffnen oder Einschränken der Unterhaltung aufgetreten", + "Open conversation to registered users, showing it in search results" : "Unterhaltung für registrierte Benutzer öffnen und in den Suchergebnissen anzeigen", + "Also open to users created with the Guests app" : "Auch für Gäste, die mit der Gast-App erstellt wurden, geöffnet", + "Open conversation" : "Unterhaltung öffnen", + "Set language spoken in calls" : "Die in Telefonaten gesprochene Sprache festlegen", + "Languages could not be loaded" : "Sprachen konnten nicht geladen werden", + "Loading languages …" : "Lade Sprachen …", + "Invalid language" : "Ungültige Sprache", + "Default language (English)" : "Standardsprache (Englisch)", + "Default live transcription language set" : "Standard Live-Transkriptionssprache eingestellt", + "Live transcription language set: {languageName}" : "Eingestellte Live-Transkriptionssprache: {languageName}", + "Error when trying to set live transcription language" : "Fehler beim Einstellen der Live-Transkriptionssprache", + "Start time: {date}" : "Startzeit: {date}", + "Start time has been updated" : "Startzeit wurde aktualisiert", + "Error occurred while updating start time" : "Beim Aktualisieren der Startzeit ist ein Fehler aufgetreten", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Durch Aktivieren der Lobby werden Nicht-Moderatoren aus dem laufenden Anruf entfernt.", + "Enable lobby, restricting the conversation to moderators" : "Lobby aktivieren, Unterhaltung auf Moderatoren beschränken", + "Meeting start time" : "Meeting-Startzeit", + "Start time (optional)" : "Startzeit (optional)", + "Import email participants" : "E-Mail-Teilnehmer importieren", + "You can import a list of email participants from a CSV file." : "Sie können eine Liste von E-Mail-Teilnehmern aus einer CSV-Datei importieren.", + "Poll drafts" : "Umfrageentwürfe", + "Browse poll drafts" : "Umfrageentwürfe durchsuchen", + "Error occurred when locking the conversation" : "Beim Sperren der Unterhaltung ist ein Fehler aufgetreten", + "Error occurred when unlocking the conversation" : "Beim Entsperren der Unterhaltung ist ein Fehler aufgetreten", + "Lock conversation" : "Unterhaltung sperren", + "This will also terminate the ongoing call." : "Dadurch wird auch der laufende Anruf beendet. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Die Unterhaltung sperren, um zu verhindern, dass jemand Nachrichten postet oder Anrufe startet", + "Edit" : "Bearbeiten", + "More information" : "Weitere Informationen", + "Delete" : "Löschen", + "Add new bridged channel to current conversation" : "Neuen Einbindungs-Kanal für die aktuelle Unterhaltung hinzufügen", + "unknown state" : "unbekannter Zustand", + "running" : "läuft", + "not running, check Matterbridge log" : "Nicht aktiv, bitte das Matterbridge-Protokoll prüfen", + "not running" : "läuft nicht", + "Bridge saved" : "Einbindung gespeichert", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Mit Matterbridge können Sie Kanäle von verschiedenen Instant-Messaging-Systemen verbinden.", + "More info on Matterbridge" : "Weitere Informationen über Matterbridge", + "Messaging systems" : "Messaging-Systeme", + "Enable bridge" : "Einbindung aktivieren", + "Show Matterbridge log" : "Zeige das Matterbridge-Protokoll", + "Log content" : "Log-Inhalt", + "Only moderators are allowed to mention @all" : "Nur Moderatoren dürfen @all erwähnen", + "All participants are allowed to mention @all" : "Alle Teilnehmer dürfen @all erwähnen", + "Participants are now allowed to mention @all." : "Teilnehmer dürfen nun @all erwähnen.", + "Mentioning @all has been limited to moderators." : "Erwähnung von @all wurde auf Moderatoren beschränkt.", + "Allow participants to mention @all" : "Teilnehmer dürfen @all erwähnen", + "Mention permissions" : "Erwähnungsberechtigungen", + "Notifications" : "Benachrichtigungen", + "Notify about calls in this conversation" : "Über Anrufe in dieser Unterhaltung benachrichtigen", + "Important conversation" : "Wichtige Unterhaltung", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Nicht stören\"-Benutzerstatus wird für wichtige Unterhaltungen ignoriert", + "Sensitive conversation" : "Sensible Unterhaltung", + "Message preview will be disabled in conversation list and notifications" : "Die Nachrichtenvorschau wird in der Unterhaltungsliste und den Benachrichtigungen deaktiviert", + "Recording consent is required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung erforderlich", + "Recording consent is not required for calls in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Einwilligung zur Aufzeichnung nicht erforderlich", + "Recording consent requirement was updated" : "Die Einstellungen zum Erfordernis der Zustimmung zur Aufzeichnung wurde aktualisiert", + "Error occurred while updating recording consent" : "Beim Aktualisieren der Einstellung zur Zustimmung zur Aufzeichnung ist ein Fehler aufgetreten", + "Recording Consent" : "Einwilligung zur Aufzeichnung", + "Recording consent cannot be changed once a call or breakout session has started." : "Die Einwilligung zur Aufzeichnung kann nicht mehr geändert werden, sobald ein Unterhaltung oder eine Gruppenraum-Sitzung begonnen hat.", + "Require recording consent before joining call in this conversation" : "Zur Teilnahme an dieser Unterhaltung ist die Zustimmung zur Aufzeichnung erforderlich.", + "Recording consent is required for all calls" : "Für alle Unterhaltungen ist eine Einwilligung zur Aufzeichnung erforderlich", + "SIP dial-in is now possible without PIN requirement" : "SIP-Einwahl ist jetzt ohne PIN möglich", + "SIP dial-in is now enabled" : "Die SIP-Einwahl ist jetzt aktiviert", + "SIP dial-in is now disabled" : "Die SIP-Einwahl ist jetzt deaktiviert", + "Error occurred when enabling SIP dial-in" : "Beim Aktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Error occurred when disabling SIP dial-in" : "Beim Deaktivieren der SIP-Einwahl ist ein Fehler aufgetreten", + "Phone and SIP dial-in" : "Telefon- und SIP-Einwahl", + "Enable phone and SIP dial-in" : "Telefon- und SIP-Einwahl aktivieren", + "Allow to dial-in without a PIN" : "Einwahl ohne PIN erlauben", + "Ongoing" : "Laufend", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n Person hat angenommen","%n Personen haben angenommen"], + "_%n person declined_::_%n people declined_" : ["%n Person hat abgelehnt","%n Personen haben abgelehnt"], + "_and %n other attachment_::_and %n other attachments_" : ["und %n anderer Anhang","und %n andere Anhänge"], + "With {displayName}" : "Mit {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Anhang ansehen", + "Join" : "Beitreten", + "View conversation" : "Unterhaltung anzeigen", + "View event on Calendar" : "Termin im Kalender anzeigen", + "Error while creating the conversation" : "Fehler beim Erstellen der Unterhaltung", + "Hello, {displayName}" : "Hallo {displayName}", + "Start meeting now" : "Besprechung jetzt beginnen", + "Give your meeting a title" : "Geben Sie Ihrer Besprechung einen Titel", + "Create and copy link" : "Link erstellen und teilen", + "Create a new conversation" : "Neue Unterhaltung erstellen", + "Join open conversations" : "Offenen Unterhaltungen beitreten", + "Call a phone number" : "Eine Telefonnummer anrufen", + "Scroll backward" : "Rückwärts scrollen", + "Scroll forward" : "Vorwärts scrollen", + "Schedule meetings" : "Besprechungen planen", + "You don't have any upcoming meetings" : "Sie haben keine bevorstehenden Besprechungen", + "Calendar events with a conversation link as the location are shown here" : "Hier werden Kalenderereignisse mit einem Konversationslink als Ort angezeigt", + "Open calendar" : "Kalender öffnen", + "Unread mentions" : "Ungelesene Erwähnungen", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Nachrichten, in denen Sie erwähnt wurden, werden hier angezeigt. Sie können Personen erwähnen, indem Sie @ gefolgt von deren Namen eingeben", + "Upcoming reminders" : "Anstehende Erinnerungen", + "Message reminders" : "Nachrichtenerinnerungen", + "Set a reminder on a message to be notified" : "Eine Erinnerung für eine Nachricht festlegen, um benachrichtigt zu werden", + "Start a group conversation" : "Gruppenunterhaltung beginnen", + "Create conversation" : "Unterhaltung erstellen", + "Enter your name" : "Geben Sie Ihren Namen ein", + "Submit name and join" : "Name übermitteln und beitreten", + "Do you already have an account?" : "Haben Sie bereits ein Konto?", + "Log in" : "Anmelden", + "Error while verifying uploaded file" : "Fehler bei der Überprüfung der hochgeladenen Datei", + "Uploaded file is verified" : "Hochgeladene Datei wurde überprüft", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Das Inhaltsformat besteht aus kommagetrennten Werten (CSV):
- Eine Kopfzeile ist erforderlich und muss mit \"Name\",\"E-Mail\" oder nur \"E-Mail\" übereinstimmen.
- Ein Eintrag pro Zeile (z. B. \"Max Mustermann\", \"max@beispiel.de\")", + "Participants added successfully" : "Teilnehmer hinzugefügt", + "Error while adding participants" : "Fehler beim Hinzufügen von Teilnehmern", + "Import a file" : "Eine Datei importieren", + "Browse" : "Durchsuchen", + "Verifying uploaded file …" : "Überprüfe hochgeladene Datei …", + "This might take a moment" : "Dies kann einen Moment dauern", + "Send invitations" : "Einladungen senden", + "_%n invalid email_::_%n invalid emails_" : ["%n ungültige E-Mail","%n ungültige E-Mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n E-Mail ist bereits importiert oder ein Duplikat","%n E-Mails sind bereits importiert oder Duplikate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n Einladung kann verschickt werden","%n Einladungen können verschickt werden"], + "An error occurred while calling a phone number" : "Es ist ein Fehler beim Anrufen einer Telefonnummer aufgetreten", + "Phone number could not be called: {error}" : "Die Telefonnummer konnte nicht angerufen werden: {error}", + "Phone number could not be called" : "Die Telefonnummer konnte nicht angerufen werden", + "Search participants or phone numbers" : "Teilnehmer oder Telefonnummern suchen", + "Creating the conversation …" : "Die Unterhaltung wird erstellt …", + "Mark as read" : "Als gelesen markieren", + "Mark as unread" : "Als ungelesen markieren", + "Remove from favorites" : "Von Favoriten entfernen", + "Add to favorites" : "Zu Favoriten hinzufügen", + "Unarchive conversation" : "Unterhaltung dearchivieren", + "Ignore \"Do not disturb\"" : "\"Nicht stören\"-Modus ignorieren", + "You need to promote a new moderator before you can leave the conversation." : "Sie müssen einen neuen Moderator bestimmen, bevor Sie die Unterhaltung verlassen können.", + "Conversation actions" : "Unterhaltungs-Aktionen", + "Notify about calls" : "Über Anrufe benachrichtigen", + "Hide message text" : "Nachrichtentext ausblenden", + "Pending invitations" : "Ausstehende Einladungen", + "Join conversations from other servers" : "Unterhaltungen von anderen Servern beitreten", + "From {user} at {remoteServer}" : "Von {user} auf {remoteServer}", + "Decline invitation" : "Einladung ablehnen", + "Accept invitation" : "Einladung annehmen", + "No pending invitations" : "Keine ausstehenden Einladungen", + "Home" : "Startseite", + "Unread" : "Ungelesen", + "Mentions" : "Erwähnungen", + "Meetings" : "Besprechungen", + "Sort conversations" : "Unterhaltungen sortieren", + "By recent activity" : "Nach neuesten Aktivitäten", + "Alphabetically" : "Alphabetisch", + "Do not group by type" : "Nicht nach Typ gruppieren", + "Show private ones first" : "Private zuerst zeigen", + "Show group ones first" : "Gruppe zuerst zeigen", + "No followed threads" : "Keine nachverfolgten Themen", + "No matches found" : "Keine Übereinstimmungen gefunden", + "No conversations found" : "Keine Unterhaltungen gefunden", + "You have no archived conversations." : "Sie haben keine archivierten Unterhaltungen", + "Subscribe to an existing thread or start your own." : "Ein existierendes Thema abonnieren, oder ein eigenes Thema beginnen.", + "You have no unread mentions." : "Sie haben keine ungelesenen Erwähnungen.", + "You have no unread messages." : "Sie haben keine ungelesenen Nachrichten.", + "An error occurred while performing the search" : "Es ist ein Fehler während der Suche aufgetreten", + "Conversation list" : "Unterhaltungsliste", + "Filter conversations by" : "Unterhaltungen filtern nach", + "Unread messages" : "Ungelesene Nachrichten", + "Meeting conversations" : "Besprechungsunterhaltungen", + "Clear filters" : "Filter zurücksetzen", + "New personal note" : "Neue persönliche Notiz", + "SIP backend is not installed" : "SIP-Backend ist nicht installiert", + "Back to conversations" : "Zurück zu den Unterhaltungen", + "Archived conversations" : "Archivierte Unterhaltungen", + "Threads" : "Themen", + "Clear filter" : "Filter zurücksetzen", + "Show more threads" : "Mehr Themen anzeigen", + "App settings" : "App-Einstellungen", + "Users" : "Benutzer", + "Groups" : "Gruppen", + "Teams" : "Teams", + "Federated users" : "Federated-Benutzer", + "New private conversation" : "Neue private Unterhaltung", + "Other sources" : "Andere Quellen", + "Open conversations" : "Offene Unterhaltungen", + "No search results" : "Keine Suchergebnisse", + "Users, groups and teams" : "Benutzer, Gruppen und Teams", + "Users and groups" : "Benutzer und Gruppen", + "Users and teams" : "Benutzer und Teams", + "Groups and teams" : "Gruppen und Teams", + "New group conversation" : "Neue Gruppenunterhaltung", + "The meeting will start soon" : "Das Meeting beginnt bald", + "This meeting is scheduled for {startTime}" : "Dieses Meeting ist geplant für {startTime}", + "You are currently waiting in the lobby" : "Sie warten derzeit in der Lobby", + "Enable noise suppression" : "Geräuschunterdrückung aktivieren", + "Reduce background noises for better voice quality" : "Hintergrundgeräusche für eine bessere Sprachqualität reduzieren", + "Enable echo cancellation" : "Echounterdrückung aktivieren", + "Minimize echo effect from own surrounding" : "Echoeffekt aus der eigenen Umgebung minimieren", + "Enable auto gain control" : "Regelung der automatischen Verstärkung aktivieren", + "Dynamically adjust microphone volume for consistent level" : "Die Mikrofonlautstärke dynamisch anpassen, um einen konstanten Pegel zu halten", + "Select microphone" : "Mikrofon auswählen", + "No microphone available" : "Kein Mikrofon verfügbar", + "Select speaker" : "Lautsprecher auswählen", + "No speaker available" : "Kein Lautsprecher verfügbar", + "Select camera" : "Kamera auswählen", + "No camera available" : "Keine Kamera verfügbar", + "Select a device" : "Ein Gerät auswählen", + "Playing …" : "Wiedergabe …", + "Test speakers" : "Lautsprecher testen", + "Test" : "Test", + "Devices" : "Geräte", + "Backgrounds" : "Hintergründe", + "No audio" : "Kein Audio", + "No camera" : "Keine Kamera", + "Display video as you will see it (mirrored)" : "Video so anzeigen, wie Sie es sehen werden (gespiegelt)", + "Display video as others will see it" : "Video so anzeigen, wie andere es sehen", + "Calls are not supported in your browser" : "Anrufe werden von Ihrem Browser nicht unterstützt", + "Access to microphone is only possible with HTTPS" : "Zugriff auf Mikrofon ist nur über HTTPS möglich", + "Access to microphone was denied" : "Zugriff auf Mikrofon wurde verweigert", + "Error while accessing microphone" : "Fehler beim Zugriff auf das Mikrofon", + "Access to camera is only possible with HTTPS" : "Zugriff auf Kamera ist nur über HTTPS möglich", + "The call is being recorded." : "Der Anruf wird aufgezeichnet.", + "The call might be recorded." : "Die Unterhaltung wird möglicherweise aufgezeichnet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Die Aufnahme kann Ihre Stimme sowie Video von der Kamera und einer Bildschirmfreigabe beinhalten. Vor der Teilnahme am Anruf ist Ihr Einverständnis hierzu erforderlich.", + "Give consent to the recording of this call" : "Stimmen Sie bitte der Aufzeichnung dieser Unterhaltung zu", + "Show more info" : "Weitere Informationen anzeigen", + "Audio is not available" : "Audio ist nicht verfügbar", + "Video is not available" : "Video ist nicht verfügbar", + "Start recording immediately with the call" : "Aufzeichnung sofort mit dem Anruf starten", + "Recording backend is not installed" : "Aufnahme-Backend ist nicht installiert", + "Notify all participants about this call" : "Alle Teilnehmer über diesen Anruf benachrichtigen", + "Apply settings" : "Einstellungen übernehmen", + "Select virtual office background" : "Wählen Sie einen virtuellen Hintergund (Büro)", + "Select virtual home background" : "Wählen Sie einen virtuellen Hintergrund (Zuhause)", + "Select virtual abstract background" : "Einen virtuellen abstrakten Hintergrund auswählen", + "Select virtual beach background" : "Einen virtuellen Strandhintergrund auswählen", + "Select virtual park background" : "Einen virtuellen Parkhintergrund auswählen", + "Select virtual theater background" : "Einen virtuellen Theaterhintergrund auswählen", + "Select virtual library background" : "Wählen Sie einen virtuellen Hintergrund (Bibliothek)", + "Select virtual space station background" : "Wählen Sie einen virtuellen Hintergrund (Raumstation)", + "Error while uploading the file" : "Fehler beim Hochladen der Datei", + "Select a file" : "Datei auswählen", + "Invalid path selected" : "Ungültiger Pfad ausgewählt", + "Select virtual background from file {fileName}" : "Einen virtuellen Hintergrund aus der Datei {fileName} auswählen", + "Blur" : "Verwischen", + "Upload" : "Hochladen", + "Files" : "Dateien", + "(editing)" : "(bearbeiten)", + "(edited)" : "(Bearbeitet)", + "The message has expired or has been deleted" : "Die Nachricht ist abgelaufen oder wurde gelöscht", + "Cancel quote" : "Zitieren abbrechen", + "24 hours" : "24 Stunden", + "7 days" : "7 Tage", + "30 days" : "30 Tage", + "Until unpin" : "Bis zum Ablösen", + "Clear reminder – {timeLocale}" : "Erinnerung löschen – {timeLocale}", + "Edited by {actor}" : "Bearbeitet von {actor}", + "Pinned by you" : "Angeheftet von Ihnen", + "Pinned by {actor}" : "Angeheftet von {actor}", + "Until {absoluteDate}" : "Bis zum {absoluteDate}", + "Message text copied to clipboard" : "Nachrichtentext in die Zwischenablage kopiert", + "Message text could not be copied" : "Der Nachrichtentext konnte nicht kopiert werden", + "Message forwarded to \"Note to self\"" : "Nachricht weitergeleitet an \"Notiz an mich\"", + "Error while forwarding message to \"Note to self\"" : "Fehler beim Weiterleiten der Nachricht an \"Notiz an mich\"", + "A reminder was successfully removed" : "Eine Erinnerung wurde entfernt", + "Error occurred when removing a reminder" : "Es ist ein Fehler beim Entfernen einer Erinnerung aufgetreten", + "A reminder was successfully set at {datetime}" : "Eine Erinnerung wurde für {datetime} erstellt", + "Error occurred when creating a reminder" : "Es ist ein Fehler beim Erstellen einer Erinnerung aufgetreten", + "Add a reaction to this message" : "Dieser Nachricht eine Reaktion hinzufügen", + "Reply" : "Antworten", + "More actions" : "Weitere Aktionen", + "Set reminder" : "Erinnerung erstellen", + "Pin message" : "Nachricht anheften", + "Unpin message" : "Nachricht ablösen", + "Reply privately" : "Privat antworten", + "Edit message" : "Nachricht bearbeiten", + "Copy message" : "Nachricht kopieren", + "Copy message link" : "Nachrichtenlink kopieren", + "Go to file" : "Zur Datei wechseln", + "Download file" : "Datei herunterladen", + "Go to thread" : "Zu Thema gehen", + "Edit thread details" : "Themendetails bearbeiten", + "Forward message" : "Nachricht weiterleiten", + "Translate" : "Übersetzen", + "Set custom reminder" : "Benutzerdefinierte Erinnerung erstellen", + "Keep pinned for" : "Angeheftet lassen für", + "Set custom period" : "Benutzerdefinierten Zeitraum eingeben", + "Close reactions menu" : "Reaktions-Menü schließen", + "React with {emoji}" : "Mit {emoji} reagieren", + "React with another emoji" : "Mit einem anderen Emoji reagieren", + "Choose a conversation to forward the selected message." : "Eine Unterhaltung auswählen um die ausgewählte Nachricht weiterzuleiten.", + "Error while forwarding message" : "Fehler beim Weiterleiten der Nachricht", + "The message has been forwarded to {selectedConversationName}" : "The Nachricht wurde an {selectedConversationName} weitergleitet", + "Dismiss" : "Ausblenden", + "Go to conversation" : "Zur Unterhaltung gehen", + "Detect language" : "Sprache erkennen", + "The message could not be translated" : "Die Nachricht konnte nicht übersetzt werden", + "Translation copied to clipboard" : "Übersetzung wurde in die Zwischenablage kopiert", + "Translation could not be copied" : "Übersetzung konnte nicht kopiert werden", + "Translate message" : "Nachricht übersetzen", + "Source language to translate from" : "Ausgangssprache, aus der übersetzt werden soll", + "Translate from" : "Übersetzen von", + "Target language to translate into" : "Zielsprache in die übersetzt werden soll", + "Translate to" : "Übersetzen in", + "Translating" : "Übersetze", + "This translation is AI generated and may contain mistakes." : "Diese Übersetzung ist KI-generiert und kann Fehler enthalten.", + "Copy translated text" : "Übersetzen Text kopieren", + "Error when scheduling the message" : "Fehler beim Planen des Nachrichtenversands", + "Reschedule" : "Umplanen", + "Send now" : "Jetzt senden", + "Choose a time" : "Eine Zeit wählen", + "Send at custom time" : "Zur benutzerdefinierten Zeit senden", + "Will be sent without notification" : "Wird ohne Benachrichtigung gesendet", + "Message read by everyone who shares their reading status" : "Nachricht wird von allen gelesen, die Ihren Lesestatus teilen", + "Message sent" : "Nachricht gesendet", + "Sent without notification" : "Ohne Benachrichtigung gesendet", + "Deleting message" : "Löschen der Nachricht", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Nachricht gelöscht, aber ein Bot oder Matterbridge ist konfiguriert und die Nachricht wurde unter Umständen bereits an andere Dienste verteilt", + "Message deleted successfully" : "Nachricht gelöscht", + "Message could not be deleted because it is too old" : "Nachricht konnte nicht gelöscht werden, da sie zu alt ist.", + "Only normal chat messages can be deleted" : "Nur normale Chatnachrichten können gelöscht werden", + "An error occurred while deleting the message" : "Es ist ein Fehler beim Löschen der Nachricht aufgetreten", + "Pinned" : "Angeheftet", + "Your browser does not support playing audio files" : "Ihr Browser unterstützt nicht das Abspielen von Audio-Dateien", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} auf {board}", + "Deck Card" : "Deck-Karte", + "Remove {fileName}" : "Entferne {fileName}", + "Open this location in OpenStreetMap" : "Diesen Ort in OpenStreetMap öffnen", + "_%n reply_::_%n replies_" : ["%n Antwort","%n Antworten"], + "Sending message" : "Sende Nachricht", + "Failed to send the message. Click to try again" : "Nachricht konnte nicht gesendet werden. Klicken Sie, um es erneut zu versuchen.", + "Not enough free space to upload file" : "Nicht genügend freier Speicherplatz zum Hochladen der Datei", + "You cannot send messages to this conversation at the moment" : "Sie können derzeit keine Nachrichten an diese Unterhaltung senden", + "Could not update the message" : "Nachricht konnte nicht aktualisiert werden", + "Reply to thread \"{threadTitle}\"" : "Antwort auf das Thema \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Sie haben abgestimmt • %n Stimme","Sie haben abgestimmt • %n Stimmen"], + "You voted" : "Sie haben abgestimmt", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Zum Abstimmen klicken • %n Stimme","Zum Abstimmen klicken • %n Stimmen"], + "Click to vote" : "Zum Abstimmen klicken", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Umfrageentwurf • %n Option","Umfrageentwurf • %n Optionen"], + "_%n vote_::_%n votes_" : ["%n Stimme","%n Stimmen"], + "Edit poll draft" : "Umfrageentwurf bearbeiten", + "Delete poll draft" : "Umfrageentwurf löschen", + "Open poll" : "Offene Umfrage", + "Closed poll" : "Geschlossene Umfrage", + "See results" : "Ergebnisse anzeigen", + "Reactions" : "Reaktionen", + "No permission to post reactions in this conversation" : "Keine Berechtigung zum Veröffentlichen von Reaktionen in dieser Unterhaltung", + "and {participant}" : "und {participant}", + "_and %n other participant_::_and %n other participants_" : ["und %n weiterer Teilnehmer","und %n weitere Teilnehmer"], + "Show all reactions" : "Alle Reaktionen anzeigen", + "Add more reactions" : "Weitere Reaktionen hinzufügen", + "Show or collapse system messages" : "Systemnachrichten anzeigen oder zuklappen", + "No messages" : "Keine Nachrichten", + "All messages have expired or have been deleted." : "Alle Nachrichten sind abgelaufen oder wurden gelöscht.", + "Generate summary with AI" : "Zusammenfassung mit KI erstellen", + "{author} (pinned by you)" : "{author} (Von Ihnen angeheftet)", + "{author} (pinned by {actor})" : "{author} (Angeheftet von {actor})", + "Unpin" : "Ablösen", + "Cancel search" : "Suche abbrechen", + "Add a phone number" : "Eine Telefonnummer hinzufügen", + "Error: A password is required to create the conversation." : "Fehler: Ein Passwort ist erforderlich, um die Unterhaltung zu erstellen.", + "All set, the conversation \"{conversationName}\" was created." : "Alles erledigt, die Unterhaltung \"{conversationName}\" wurde erstellt.", + "Create a new group conversation" : "Neue Gruppenunterhaltung erstellen", + "Add participants" : "Teilnehmer hinzufügen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale Länge überschritten ({maxlength} Zeichen)", + "Conversation type" : "Unterhaltungstyp", + "Conversation visibility" : "Sichtbarkeit der Unterhaltung", + "Allow guests to join via link" : "Gästen die Teilnahme per Link erlauben", + "Enter password" : "Passwort eingeben", + "This conversation has been locked" : "Diese Unterhaltung wurde gesperrt", + "No permission to post messages in this conversation" : "Keine Berechtigung zum Veröffentlichen von Nachrichten in dieser Unterhaltung", + "Joining conversation …" : "Unterhaltung beitreten …", + "Write a message without notification" : "Eine Nachricht ohne Benachrichtigung schreiben", + "Create a thread silently" : "Ein Thema stillschweigend erstellen", + "Create a thread" : "Ein Thema erstellen", + "Send message silently" : "Nachricht still senden", + "Send message" : "Nachricht senden", + "Send without notification" : "Ohne Benachrichtigung senden", + "The participant will not be notified about new messages" : "Der Teilnehmer wird über neue Nachrichten nicht benachrichtigt", + "Participants will not be notified about new messages" : "Teilnehmer werden über neue Nachrichten nicht benachrichtigt", + "Message will be sent {datetimeString}" : "Nachricht wird gesendet um {datetimeString}", + "Thread title is required" : "Ein Thementitel ist erforderlich", + "Message text is required" : "Ein Nachrichtentext ist erforderlich", + "The message could not be edited" : "Die Nachricht konnte nicht bearbeitet werden", + "File to share" : "Zu teilende Datei", + "File upload is not available in this conversation" : "Das Hochladen von Dateien ist in dieser Unterhaltung nicht verfügbar", + "Message was successfully scheduled" : "Nachrichtenversand wurde geplant", + "Add emoji" : "Emoji hinzufügen", + "Adding a mention will only notify users who did not read the message." : "Hinzufügen einer Erwähnung benachrichtigt nur Benutzer, die die Nachricht noch nicht gelesen haben.", + "Thread title" : "Thementitel", + "Send later" : "Später senden", + "Show scheduled messages" : "Geplante Nachrichten ansehen", + "Cancel editing" : "Bearbeitung abbrechen", + "Schedule message" : "Nachrichtenversand planen", + "{user} is out of office and might not respond." : "{user} ist nicht im Büro und antwortet möglicherweise nicht.", + "Absence period: {startDate} - {endDate}" : "Abwesenheitszeitraum: {startDate} - {endDate}", + "Replacement:" : "Ersatz:", + "Share from {nextcloud}" : "Von {nextcloud} teilen", + "Share from Files" : "Aus Dateien heraus teilen", + "Share files to the conversation" : "Dateien mit der Unterhaltung teilen", + "Upload from device" : "Von Gerät hochladen", + "Create new poll" : "Neue Umfrage erstellen", + "Smart picker" : "Smart Picker", + "Record voice message" : "Sprachnachricht aufnehmen", + "End recording and send" : "Aufnahme beenden und versenden", + "Dismiss recording" : "Aufnahme verwerfen", + "Access to the microphone was denied" : "Zugriff auf das Mikrofon wurde verweigert", + "Microphone either not available or disabled in settings" : "Mikrofon ist entweder nicht verfügbar oder in den Einstellungen deaktiviert", + "Error while recording audio" : "Fehler bei der Audioaufnahme", + "Voice message {time} ({conversation})" : "Sprachnachricht {time} ({conversation})", + "Generating summary of unread messages …" : "Zusammenfassung ungelesener Nachrichten wird erstellt …", + "Summary is AI generated and might contain mistakes" : "Die Zusammenfassung wird von einer KI erstellt und kann Fehler enthalten", + "Error occurred during a summary generation" : "Beim Erstellen einer Zusammenfassung ist ein Fehler aufgetreten", + "New file" : "Neue Datei", + "Blank" : "Leer", + "Error while creating file" : "Fehler beim Erstellen der Datei", + "Create and share a new file" : "Eine neue Datei erstellen und teilen", + "Name of the new file" : "Name der neuen Datei", + "Create file" : "Datei erstellen", + "Someone is typing …" : "Jemand schreibt …", + "{user1} is typing …" : "{user1} schreibt …", + "{user1} and {user2} are typing …" : "{user1} und {user2} schreiben …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} und {user3} schreiben …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n weiterer schreibt …","{user1}, {user2}, {user3} and %n weitere schreiben …"], + "Add more files" : "Weitere Dateien hinzufügen", + "Send" : "Senden", + "In this conversation {user} can:" : "In dieser Unterhaltung kann {user}:", + "Edit default permissions for participants in {conversationName}" : "Standardberechtigungen für Teilnehmer in {conversationName} bearbeiten", + "Start a call" : "Einen Anruf starten", + "Skip the lobby" : "Die Lobby überspringen", + "Can post messages" : "Kann Nachrichten senden", + "Can post messages and reactions" : "Kann Nachrichten und Reaktionen posten", + "Can add reactions" : "Kann Reaktionen hinzufügen", + "Enable the microphone" : "Das Mikrofon aktivieren", + "Enable the camera" : "Die Kamera aktivieren", + "Share the screen" : "Den Bildschirm teilen", + "Update permissions" : "Berechtigungen aktualisieren", + "Updating permissions" : "Aktualisiere Berechtigungen", + "No poll drafts" : "Keine Umfrageentwürfe", + "There is no poll drafts yet saved for this conversation" : "Für diese Unterhaltung sind noch keine Umfrageentwürfe gespeichert", + "Create poll in {name}" : "Umfrage erstellen in {name}", + "Create poll" : "Umfrage erstellen", + "Error while importing poll" : "Fehler beim Importieren der Umfrage", + "Question" : "Frage", + "Ask a question" : "Eine Frage stellen", + "Import draft from file" : "Entwurf aus Datei importieren", + "Answers" : "Antworten", + "Answer {option}" : "Antwort {option}", + "Delete poll option" : "Umfrage-Option löschen", + "Add answer" : "Antwort hinzufügen", + "Settings" : "Einstellungen", + "Anonymous poll" : "Anonyme Umfrage", + "Multiple answers" : "Mehrere Antworten", + "Save as draft" : "Als Entwurf speichern", + "Export draft to file" : "Entwurf in Datei exportieren", + "_Final results • %n vote_::_Final results • %n votes_" : ["Endergebnisse • %n Stimme","Endergebnisse • %n Stimmen"], + "Your vote is anonymous" : "Ihre Stimme ist anonym", + "You voted for this option" : "Sie haben für diese Option gestimmt", + "End poll" : "Umfrage beenden", + "Change your vote" : "Ihre Stimmabgabe ändern", + "Withdraw vote" : "Stimme zurückziehen", + "Results" : "Ergebnisse", + "Download as spreadsheet" : "Als Tabelle herunterladen", + "Download as CSV" : "Als CSV herunterladen", + "Voted participants" : "Gewählte Teilnehmer", + "Send a message to \"{roomName}\"" : "Eine Nachricht an \"{roomName}\" senden", + "Hide list of participants" : "Teilnehmerliste verbergen", + "Show list of participants" : "Teilnehmerliste anzeigen", + "Assistance requested in {roomName}" : "Unterstützung angefordert in {roomName}", + "The message was sent to \"{roomName}\"" : "Die Nachricht wurde an \"{roomName}\" gesendet", + "Dismiss request for assistance" : "Bitte um Unterstützung ablehnen", + "Send message to room" : "Nachricht an Raum senden", + "Back to main room" : "Zurück zum Hauptraum", + "Back to your room" : "Zurück zu Ihrem Raum", + "Message all rooms" : "Nachricht an alle Räume", + "Start session" : "Sitzung starten", + "Start a call before you start a breakout room session" : "Einen Anruf starten bevor Sie eine Gruppenraumsitzung beginnen", + "Stop session" : "Sitzung beenden", + "The message was sent to all breakout rooms" : "Die Nachricht wurde an alle Gruppenräume gesendet", + "Send a message to all breakout rooms" : "Nachricht an alle Gruppenräume senden", + "Breakout rooms are not started" : "Gruppenräume sind nicht gestartet", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Anrufe ohne Hochleistungs-Backend können Verbindungsprobleme und eine hohe Gerätebelastung verursachen. {linkstart}Mehr erfahren{linkend}", + "Talk setup incomplete" : "Talk-Einrichtung unvollständig", + "Disable lobby" : "Lobby deaktivieren", + "Settings for participant \"{user}\"" : "Einstellungen für den Teilnehmer \"{user}\"", + "Participant \"{user}\"" : "Teilnehmer \"{user}\"", + "moderator" : "Moderator", + "bot" : "Bot", + "guest" : "Gast", + "Ringing …" : "Klingeln …", + "Call rejected" : "Anruf abgelehnt", + "{time} talking …" : "{time} im Gespräch …", + "{time} talking time" : "{time} Gesprächsdauer", + "Raised their hand" : "Hat die Hand gehoben", + "Joined with video" : "Mit Video beigetreten", + "Joined via phone" : "Mit Telefon beigetreten", + "Joined with audio" : "Mit Audio beigetreten", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Der Text muss weniger als oder gleich {maxLength} Zeichen lang sein. Ihr aktueller Text ist {charactersCount} Zeichen lang.", + "Remove group and members" : "Gruppe und Mitglieder entfernen", + "Remove team and members" : "Team und Mitglieder entfernen", + "Remove participant" : "Teilnehmer entfernen", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Soll die Gruppe \"{displayName}\" und ihre Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Soll das Team \"{displayName}\" und seine Mitglieder aus dieser Unterhaltung entfernt werden?", + "Do you really want to remove {displayName} from this conversation?" : "Soll {displayName} aus dieser Unterhaltung entfernt werden?", + "Notification was sent to {displayName}" : "Benachrichtigung wurde an {displayName} gesendet", + "Could not send notification to {displayName}" : "Benachrichtigung konnte nicht an {displayName} versandt werden", + "Permissions granted to {displayName}" : "Berechtigungen an {displayName} gewährt", + "Could not modify permissions for {displayName}" : "Für {displayName} konnten die Berechtigungen nicht geändert werden", + "Permissions removed for {displayName}" : "Berechtigungen für {displayName} entfernt", + "Permissions set to default for {displayName}" : "Berechtigungen für {displayName} auf Standard gesetzt", + "Phone number could not be hung up" : "Telefonnummer konnte nicht aufgelegt werden", + "Phone number could not be put on hold" : "Telefonnummer konnte nicht in die Warteschleife gelegt werden", + "Phone number could not be muted" : "Telefonnummer konnte nicht stummgeschaltet werden", + "Phone number could not be unmuted" : "Stummschaltung für Telefonnummer konnte nicht aufgehoben werden", + "DTMF message could not be sent" : "MFW-Nachricht konnte nicht gesendet werden", + "Phone number copied to clipboard" : "Telefonnummer in die Zwischenablage kopiert", + "Phone number could not be copied" : "Telefonnummer konnte nicht kopiert werden", + "in the lobby" : "In der Lobby", + "Dial out phone" : "Telefon wählen", + "Hang up phone" : "Telefon auflegen", + "Move back to lobby" : "Zurück zur Lobby", + "Move to conversation" : "Zur Unterhaltung wechseln", + "Dial-in PIN" : "Einwahl-PIN", + "Demote from moderator" : "Als Moderator abberufen", + "Promote to moderator" : "Zum Moderator ernennen", + "Resend invitation" : "Einladung erneut senden", + "Send call notification" : "Anrufbenachrichtigung senden", + "Dial out phone number" : "Ausgehende Telefonnummer", + "Resume call for phone number" : "Anruf fortsetzen für Telefonnummer", + "Put phone number on hold" : "Telefonnummer in die Warteschleife legen", + "Unmute phone number" : "Stummschaltung der Telefonnummer aufheben", + "Mute phone number" : "Telefonnummer stummschalten", + "Copy phone number" : "Telefonnummer kopieren", + "Reset custom permissions" : "Benutzerdefinierte Berechtigungen zurücksetzen", + "Grant all permissions" : "Alle Berechtigungen gewähren", + "Remove all permissions" : "Alle Berechtigungen entziehen", + "Also ban from this conversation" : "Auch für diese Unterhaltung sperren", + "Internal note (reason to ban)" : "Interne Notiz (Grund der Sperrung)", + "Remove" : "Entfernen", + "Permissions modified for {displayName}" : "Berechtigungen für {displayName} geändert", + "Add users, groups or teams" : "Benutzer, Gruppen oder Teams hinzufügen", + "Add users or groups" : "Benutzer oder Gruppen hinzufügen", + "Add users or teams" : "Benutzer oder Teams hinzufügen", + "Add users" : "Benutzer hinzufügen", + "Add groups or teams" : "Gruppen oder Teams hinzufügen", + "Add groups" : "Gruppen hinzufügen", + "Add teams" : "Teams hinzufügen", + "Add other sources" : "Andere Quellen hinzufügen", + "Add emails" : "E-Mails hinzufügen", + "Integrations" : "Einbindungen", + "Add federated users" : "Federated-Benutzer hinzufügen", + "Searching …" : "Suche …", + "Search for more users" : "Nach weiteren Benutzern suchen", + "You can search or add participants via name, email, or Federated Cloud ID" : "Sie können Teilnehmer über Namen, E-Mail-Adresse oder Federated-Cloud-ID suchen oder hinzufügen", + "Search or add participants" : "Teilnehmer suchen oder hinzufügen", + "Invitation was sent to {actorId}" : "Einladung wurde an {actorId} versendet", + "An error occurred while adding the participants" : "Es ist ein Fehler beim Hinzufügen der Teilnehmer aufgetreten", + "A new group conversation with selected participant will be created" : "Es wird eine neue Gruppenunterhaltung mit dem ausgewählten Teilnehmer erstellt", + "Participants" : "Teilnehmer", + "Pinned by a deleted user" : "Angeheftet von einem gelöschten Benutzer", + "Participants ({count})" : "Teilnehmer ({count})", + "Open chat" : "Chat öffnen", + "You have new unread messages in the chat." : "Sie haben neue ungelesene Nachrichten im Chat.", + "You have been mentioned in the chat." : "Sie wurden im Chat erwähnt.", + "Search messages" : "Nachrichten suchen", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Geteilte Elemente", + "Search in {name}" : "Suche in {name}", + "Threads in {name}" : "Themen in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Suche Nachrichten …", + "Search options" : "Suchoptionen", + "From User" : "Von Benutzer", + "Since" : "Seit", + "Until" : "Bis", + "No results found" : "Keine Ergebnisse gefunden", + "Load more results" : "Weitere Ergebnisse laden", + "Recent threads" : "Neueste Themen", + "Projects" : "Projekte", + "No shared items" : "Keine geteilten Elemente", + "Thread notifications" : "Thread-Benachrichtigungen", + "Thread actions" : "Themenaktionen", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Zu einer Unterhaltung verlinken", + "No open conversations found" : "Keine offenen Unterhaltungen gefunden", + "Either there are no open conversations or you joined all of them." : "Entweder gibt es keine offenen Unterhaltungen oder sie sind bereits allen beigetreten.", + "Check spelling or use complete words." : "Überprüfen Sie die Rechtschreibung oder verwenden Sie vollständige Wörter.", + "Search conversations or users" : "Nach Unterhaltungen oder Benutzern suchen", + "Select conversation" : "Unterhaltung auswählen", + "Number length is not valid" : "Nummernlänge ist nicht gültig", + "Region code is not valid" : "Regionalcode ist nicht gültig", + "Number length is too short" : "Nummernlänge ist zu kurz", + "Number length is too long" : "Nummernlänge ist zu lang", + "Number is not valid" : "Nummer ist nicht gültig", + "Phone numbers" : "Telefonnummern", + "Display name: {name}" : "Anzeigename: {name}", + "Edit display name" : "Anzeigename bearbeiten", + "Display name (required)" : "Anzeigename (erforderlich)", + "Save name" : "Namen speichern", + "I picked message bubbles" : "Ich habe Sprechblasen ausgewählt", + "I picked the list style" : "Ich habe den Listenstil ausgewählt", + "Error while setting personal setting" : "Fehler beim Festlegen der persönlichen Einstellung", + "Error while saving sounds setting" : "Fehler beim Speichern der Toneinstellung", + "Compact conversations list" : "Unterhaltungsliste verkleinern", + "Chat appearance" : "Chat-Darstellung", + "Messages list" : "Nachrichtenliste", + "Message bubbles" : "Sprechblasen", + "Play sounds when participants join or leave a call" : "Töne abspielen, wenn Teilnehmer einem Anruf beitreten oder verlassen", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Derzeit aufgrund technischer Einschränkungen durch den Hersteller nicht auf iPhone und iPad verfügbar", + "Notification settings" : "Benachrichtigungseinstellungen", + "Sounds for chat and call notifications" : "Töne für Chat- und Anrufbenachrichtigungen", + "Invalid language ({languageId})" : "Ungültige Sprache ({languageId})", + "Default language" : "Standard-Sprache", + "Default language ({languageName})" : "Standardsprache ({languageName})", + "Error when trying to load the available live translation languages" : "Fehler beim Versuch, die verfügbaren Live-Übersetzungssprachen zu laden", + "Error when trying to set live translation language" : "Fehler beim Versuch, eine Live-Übersetzungssprache festzulegen", + "Set language used to show the transcriptions" : "Sprache festlegen, die zur Anzeige der Transkriptionen verwendet wird", + "Select location for attachments" : "Speicherort für Anhänge auswählen", + "Error while setting attachment folder" : "Fehler beim Festlegen des Ordners für Anhänge", + "Error while setting read status privacy" : "Fehler beim Setzen des Lesestatus Privatsphäre", + "Error while setting typing status privacy" : "Fehler beim Festlegen des Datenschutzes für den Eingabestatus", + "Error while setting default media state" : "Fehler beim Setzen des Standard-Medienstatus", + "Turn camera and microphone off by default" : "Kamera und Mikrofon standardmäßig ausschalten", + "Blur camera background by default" : "Kamerahintergrund standardmäßig verwischen", + "Skip device preview before joining a call" : "Gerätevorschau vor dem Beitritt zu einer Unterhaltung überspringen", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Beim Beitritt wird die Kamera ausgeschaltet. Dies wird immer angezeigt, wenn eine Einverständniserklärung erforderlich ist.", + "Appearance & Sounds" : "Aussehen & Töne", + "Privacy" : "Datenschutz", + "Send read receipts" : "Lesebestätigungen senden", + "When off, all read statuses will be hidden" : "Im ausgeschalteten Zustand werden alle Lesestatus ausgeblendet", + "Share typing status" : "Schreibstatus teilen", + "When off, all typing indicators will be hidden" : "Im ausgeschalteten Zustand werden alle Schreibanzeigen ausgeblendet", + "Attachments folder" : "Ordner für Anhänge", + "Toggle full screen" : "Vollbildmodus umschalten", + "Return to Home screen" : "Zum Startbildschirm zurückkehren", + "Search" : "Suche", + "Shortcuts while in a chat" : "Tastaturkürzel während eines Chats", + "Focus the chat input" : "Chat-Eingabe in den Vordergrund", + "Unfocus the chat input to use shortcuts" : "Chat-Eingabe in den Hintergrund", + "Edit your last message" : "Ihre letzte Nachricht bearbeiten", + "Shortcuts while in a call" : "Tastaturkürzel während eines Anrufs", + "Camera on and off" : "Kamera ein- und ausschalten", + "Microphone on and off" : "Mikrofon ein- und ausschalten", + "Raise or lower hand" : "Hand heben oder herunternehmen", + "Push to talk or push to mute" : "Zum Sprechen oder Stummschalten drücken", + "Zoom-in / zoom-out a screen share" : "Vergrößern/Verkleinern einer Bildschirmfreigabe", + "Mouse wheel" : "Mausrad", + "Start call silently" : "Stillen Anruf beginnen", + "Start call" : "Anruf starten", + "End call" : "Anruf beenden", + "The server was updated, you cannot start or join a call." : "Der Server wurde aktualisiert, Sie können keinen Anruf starten oder daran teilnehmen.", + "This call has just ended" : "Dieser Anruf wurde gerade beendet", + "You will be able to join the call only after a moderator starts it." : "Sie können dem Anruf erst beitreten, nachdem ein Moderator ihn gestartet hat.", + "End call for everyone" : "Anruf für alle beenden", + "Starting the recording" : "Aufnahme wird gestartet", + "Recording" : "Aufnahme", + "The call has been running for one hour." : "Der Anruf läuft seit einer Stunde.", + "Cancel recording start" : "Aufnahmestart abbrechen", + "Stop recording" : "Aufnahme stoppen", + "Send a reaction" : "Reaktion senden", + "React with {reaction}" : "Reagieren mit {reaction}", + "All tasks done!" : "Alle Aufgaben erledigt!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} von %n Aufgabe","{done} von %n Aufgaben"], + "Add participants to this call" : "Teilnehmer zu diesem Anruf hinzufügen", + "_%n participant in call_::_%n participants in call_" : ["%n Anrufteilnehmer","%n Anrufteilnehmer"], + "Scheduled messages" : "Geplante Nachrichten", + "You are not allowed to enable screensharing" : "Sie dürfen die Bildschirmfreigabe nicht aktivieren", + "No screensharing" : "Keine Bildschirmübertragung", + "Screensharing options" : "Optionen für Bildschirmübertragung", + "Enable screensharing" : "Bildschirmübertragung aktivieren", + "Bad sent video and screen quality." : "Schlechte Video- und Bildschirm-Sendequalität.", + "Bad sent screen quality." : "Schlechte Bildschirm-Sendequalität.", + "Bad sent video quality." : "Schlechte Video-Sendequalität", + "Bad sent audio, video and screen quality." : "Schlechte Audio-, Video- und Bildschirm-Sendequalität.", + "Bad sent audio and screen quality." : "Schlechte Audio- und Bildschirm-Sendequalität.", + "Bad sent audio and video quality." : "Schlechte Audio- und Video-Sendequalität.", + "Bad sent audio quality." : "Schlechte Audio-Sendequalität", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, die Hintergrundunschärfe der Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Disable background blur" : "Hintergrundunschärfe ausschalten", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht sehen und Ihren Bildschirm nicht sehen. Versuchen Sie, Ihr Video zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Ihren Bildschirm möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht sehen.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Bildschirmübertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und Ihren Bildschirm nicht sehen. Versuchen Sie, Ihre Bildschirmübertragung zu deaktivieren, um die Übertragung zu verbessern.", + "Disable screenshare" : "Bildschirmübertragung deaktivieren", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ihre Internetverbindung oder Ihr Computer ist ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und nicht sehen. Versuchen Sie, die Hintergrundunschärfe oder Ihr Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen und Sie nicht sehen. Versuchen Sie, Ihre Videofreigabe zu deaktivieren, um die Übertragung zu verbessern.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ihre Internetverbindung oder Ihr Computer sind ausgelastet und andere Teilnehmer können Sie möglicherweise nicht verstehen.", + "Screen sharing is not supported by your browser." : "Dieser Browser unterstützt das Teilen des Bildschirms nicht.", + "Screen sharing requires the page to be loaded through HTTPS." : "Das Teilen des Bildschirms erfordert, dass die Seite über HTTPS geladen wird.", + "Screensharing requires the page to be loaded through HTTPS." : "Das Übertragen des Bildschirms erfordert das Laden der Seite über HTTPS.", + "An error occurred while starting screensharing." : "Es ist ein Fehler beim Start der Bildschirmübertragung aufgetreten.", + "Select virtual background" : "Virtuellen Hintergrund auswählen", + "Show your screen" : "Ihren Bildschirm übertragen", + "Stop screensharing" : "Bildschirmübertragung beenden", + "Mute others" : "Andere Stummschalten", + "Start recording" : "Aufnahme beginnen", + "Set up breakout rooms" : "Gruppenräume einrichten", + "Download attendance list" : "Anwesenheitsliste herunterladen", + "Open Calendar" : "Kalender öffnen", + "Remove participant {name}" : "Teilnehmer {name} entfernen", + "Would you like to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Diese Unterhaltung wird nach %n Tag Inaktivität für alle gelöscht","Diese Unterhaltung wird nach %n Tagen Inaktivität für alle gelöscht"], + "Are you sure you want to delete this conversation?" : "Soll diese Unterhaltung gelöscht werden?", + "Delete now" : "Jetzt löschen", + "Keep" : "Behalten", + "Open dialpad" : "Wählfeld öffnen", + "Select a region" : "Eine Region auswählen", + "Local time: {time}" : "Ortszeit: {time}", + "Scheduled {datetime}" : "Geplant {datetime}", + "Scheduled for {datetime}" : "Geplant für {datetime}", + "Search …" : "Suche …", + "Message without mention" : "Nachricht ohne Erwähnung", + "Mention myself" : "Mich selbst erwähnen", + "Mention everyone" : "Jeden erwähnen", + "Select a conversation" : "Eine Unterhaltung auswählen", + "Select a mode" : "Einen Modus auswählen", + "You do not have permissions to access this conversation." : "Sie haben nicht die Berechtigung auf diese Unterhaltung zuzugreifen", + "Join a different conversation or start a new one." : "Nehmen Sie an einer anderen Unterhaltung teil oder beginnen Sie eine neue.", + "The conversation does not exist" : "Die Unterhaltung existiert nicht", + "Join a conversation or start a new one!" : "Treten Sie einer Unterhaltung bei oder starten Sie eine neue!", + "Duplicate session" : "Doppelte Sitzung", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Diese Unterhaltung wurde in einem anderen Tab geöffnet. Die aktuelle Serverversion unterstützt das Öffnen einer Konversation in mehreren Tabs nicht.", + "Creating and joining a conversation with \"{userid}\"" : "Eine Unterhaltung mit \"{userid}\" erstellen und daran teilnehmen", + "Join a conversation or start a new one" : "Treten Sie einer Unterhaltung bei oder starten Sie eine neue", + "Error while joining the conversation" : "Fehler beim Beitreten zur Unterhaltung", + "Another user" : "Ein anderer Benutzer", + "Hey! Are you using the list style or message bubbles?" : "Hey! Verwenden Sie Talk im Listenstil oder mit Sprechblasen?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-Benutzer", + "User password" : "Benutzerpasswort", + "Talk conversation" : "Talk-Unterhaltung", + "Skip TLS verification" : "TLS-Überprüfung überspringen", + "Matrix server URL" : "Matrix-Server-URL", + "User" : "Benutzer", + "Matrix channel" : "Matrix-Kanal", + "Mattermost server URL" : "Mattermost-Server-URL", + "Mattermost user" : "Mattermost-Benutzer", + "Team name" : "Team-Name", + "Channel name" : "Kanal-Name", + "Rocket.Chat server URL" : "Rocket.Chat-Server-URL", + "User name or email address" : "Benutzername oder E-Mail-Adresse", + "Rocket.Chat channel" : "Rocket.Chat-Kanal", + "Zulip server URL" : "Zulip-Server-URL", + "Bot user name" : "Bot-Benutzername", + "Bot API key" : "Bot-API-Schlüssel", + "Zulip channel" : "Zulip-Kanal", + "API token" : "API-Token", + "Slack channel" : "Slack-Kanal", + "Server ID or name" : "Server-ID oder -Name", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (mit vorangestelltem \"ID:\") oder Name", + "Channel" : "Kanal", + "Login" : "Anmeldung", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC Server-URL (z.B. chat.freenode.net:6667)", + "Nickname" : "Spitzname", + "Connection password" : "Verbindungs-Passwort", + "IRC channel" : "IRC-Kanal", + "Channel password" : "Kanal-Passwort", + "NickServ nickname" : "NickServ-Spitzname", + "NickServ password" : "NickServ-Passwort", + "Use TLS" : "TLS verwenden", + "Use SASL" : "SASL verwenden", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Client-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Themen-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber Server-URL", + "MUC server URL" : "MUC-Server-URL", + "Jabber ID" : "Jabber-ID", + "Pinned messages" : "Angeheftete Nachrichten", + "Media" : "Medien", + "Polls" : "Umfragen", + "Deck cards" : "Deck-Karten", + "Voice messages" : "Sprachnachrichten", + "Locations" : "Orte", + "Call recordings" : "Anrufaufnahmen", + "Audio" : "Audio", + "Show all pinned messages" : "Alle angehefteten Nachrichten anzeigen", + "Show all media" : "Alle Medien anzeigen", + "Show all files" : "Alle Dateien anzeigen", + "Show all polls" : "Alle Umfragen anzeigen", + "Show all deck cards" : "Alle Deck-Karten anzeigen", + "Show all voice messages" : "Alle Sprachnachrichten anzeigen", + "Show all locations" : "Alle Orte anzeigen", + "Show all call recordings" : "Alle Anrufaufnahmen ansehen", + "Show all audio" : "Alle Audios anzeigen", + "Show all other" : "Alle anderen anzeigen", + "Follow conversation settings" : "Unterhaltungseinstellungen folgen", + "Group" : "Gruppe", + "Team" : "Team", + "You reconnected to the call" : "Sie haben sich wieder mit dem Anruf verbunden", + "{actor} reconnected to the call" : "{actor} hat sich wieder mit dem Anruf verbunden", + "You added {user0} and {user1}" : "Sie haben {user0} und {user1} hinzugefügt", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Sie haben {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added you and {user0}" : "Die Administration hat Sie und {user0} hinzugefügt", + "{actor} added you and {user0}" : "{actor} hat Sie und {user0} hinzugefügt", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer hinzugefügt","{actor} hat Sie, {user0} und %n weitere Teilnehmer hinzugefügt"], + "An administrator added {user0} and {user1}" : "Die Administration hat {user0} und {user1} hinzugefügt", + "{actor} added {user0} and {user1}" : "{actor} hat {user0} und {user1} hinzugefügt", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer hinzugefügt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer hinzugefügt"], + "You removed {user0} and {user1}" : "Sie haben {user0} und {user1} entfernt", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer entfernt","Sie haben {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "An administrator removed you and {user0}" : "Die Administration hat Sie und {user0} entfernt", + "{actor} removed you and {user0}" : "{actor} hat Sie und {user0} entfernt", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer entfernt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer entfernt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer entfernt","{actor} hat Sie, {user0} und %n weitere Teilnehmer entfernt"], + "An administrator removed {user0} and {user1}" : "Die Administration hat {user0} und {user1} entfernt", + "{actor} removed {user0} and {user1}" : "{actor} hat {user0} und {user1} entfernt", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer entfernt","{actor} hat {user0}, {user1} und %n weitere Teilnehmer entfernt"], + "You and {user0} joined the call" : "Sie und {user0} sind dem Anruf beigetreten", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Sie, {user0} und %n weiterer Teilnehmer sind dem Anruf beigetreten","Sie, {user0} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "{user0} and {user1} joined the call" : "{user0} und {user1} sind dem Anruf beigetreten", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer sind dem Anruf beigetreten","{user0}, {user1} und %n weitere Teilnehmer sind dem Anruf beigetreten"], + "You and {user0} left the call" : "Sie und {user0} haben den Anruf verlassen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Sie, {user0} und %n weiterer Teilnehmer haben den Anruf verlassen","Sie, {user0} und %n weitere Teilnehmer haben den Anruf verlassen"], + "{user0} and {user1} left the call" : "{user0} und {user1} haben den Anruf verlassen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} und %n weiterer Teilnehmer haben den Anruf verlassen","{user0}, {user1} und %n weitere Teilnehmer haben den Anruf verlassen"], + "You promoted {user0} and {user1} to moderators" : "Sie haben {user0} und {user1} zu Moderatoren ernannt", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Sie haben {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted you and {user0} to moderators" : "Die Administration hat Sie und {user0} zu Moderatoren ernannt", + "{actor} promoted you and {user0} to moderators" : "{actor} hat Sie und {user0} zu Moderatoren ernannt", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat Sie, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer zu Moderatoren ernannt","{actor} hat Sie, {user0} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "An administrator promoted {user0} and {user1} to moderators" : "Ein Administrator hat {user0} und {user1} zu Moderatoren ernannt", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} hat {user0} und {user1} zu Moderatoren ernannt", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Die Administration hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren ernannt","Die Administration hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} hat {user0}, {user1} und %n weiteren Teilnehmer zu Moderatoren befördert\n ","{actor} hat {user0}, {user1} und %n weitere Teilnehmer zu Moderatoren ernannt"], + "You demoted {user0} and {user1} from moderators" : "Sie haben {user0} und {user1} von der Moderation abberufen", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Sie haben {user0}, {user1} und %n weiteren Teilnehmer von der Moderation abberufen","Sie haben {user0}, {user1} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted you and {user0} from moderators" : "Die Administration hat Sie und {user0} von der Moderation abberufen", + "{actor} demoted you and {user0} from moderators" : "{actor} hat Sie und {user0} von der Moderation abberufen", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Die Administration hat Sie, {user0} und %n weiteren Teilnehmer von Moderatoren abberufen","Die Administration hat Sie, {user0} und %n weitere Teilnehmer von Moderatoren abberufen"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} hat Sie, {user0} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat Sie, {user0} und %n weitere Teilnehmer von der Moderation abberufen"], + "An administrator demoted {user0} and {user1} from moderators" : "Die Administration hat {user0} und {user1} von der Moderation abberufen", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} hat {user0} und {user1} von der Moderation abberufen", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Die Administration hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","Die Administration hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} hat {Benutzer0}, {Benutzer1} und %n weiteren Teilnehmer von der Moderation abberufen","{actor} hat {Benutzer0}, {Benutzer1} und %n weitere Teilnehmer von der Moderation abberufen"], + "You:" : "Sie:", + "You: {lastMessage}" : "Sie: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Der Server wurde aktualisiert.", + "(edited by you)" : "(Von Ihnen bearbeitet)", + "(edited by a deleted user)" : "(Von einem gelöschten Benutzer bearbeitet)", + "(edited by {moderator})" : "(Bearbeitet von {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Sie versuchen, an einer Unterhaltung teilzunehmen, während Sie in einem anderen Fenster oder Gerät eine aktive Sitzung haben. Dies wird derzeit von Nextcloud Talk nicht unterstützt. Was möchten Sie tun?", + "Leave this page" : "Diese Seite verlassen", + "Join here" : "Hier beitreten", + "Deck card has been posted to {conversation}" : "Deckkarte wurde nach {conversation} gepostet", + "An error occurred while posting deck card to conversation" : "Es ist ein Fehler beim Posten der Deckkarte an die Unterhaltung aufgetreten", + "Post to a conversation" : "An eine Unterhaltung posten", + "Post to conversation" : "An Unterhaltung posten", + "The recording failed. Please contact your administrator." : "Aufnahme fehlgeschlagen. Bitte wenden Sie sich an Ihre Administration.", + "Location has been posted to {conversation}" : "Der Standort wurde nach {conversation} gepostet", + "An error occurred while posting location to conversation" : "Es ist ein Fehler beim Posten des Standorts an die Unterhaltung aufgetreten.", + "Share to a conversation" : "Mit einer Unterhaltung teilen", + "Share to conversation" : "Mit der Unterhaltung teilen", + "In conversation" : "In einer Unterhaltung", + "Search in conversation: {conversation}" : "Suche in Unterhaltung: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Ihre Anfragen werden derzeit aufgrund des Brute-Force-Schutzes gedrosselt", + "Error while clearing conversation history" : "Fehler beim Löschen des Unterhaltungsverlaufs", + "Error occurred while allowing guests" : "Fehler beim Zulassen von Gästen", + "Error occurred while disallowing guests" : "Fehler beim Nichtzulassen von Gästen", + "Error occurred when restricting the conversation to moderator" : "Es ist ein Fehler beim Beschränken der Unterhaltung auf den Moderator aufgetreten", + "Error occurred when opening the conversation to everyone" : "Es ist ein Fehler beim Öffnen der Unterhaltung für alle aufgetreten", + "Conversation password has been saved" : "Unterhaltungs-Passwort wurde gespeichert", + "Conversation password has been removed" : "Unterhaltungs-Passwort wurde entfernt", + "Error occurred while saving conversation password" : "Fehler beim Speichern des Unterhaltungs-Passworts", + "Call recording is starting." : "Gesprächsaufnahme startet.", + "Call recording stopped while starting." : "Unterhaltungsaufnahme beim Start angehalten.", + "Call recording stopped. You will be notified once the recording is available." : "Anrufaufzeichnung angehalten. Sie werden benachrichtigt, sobald die Aufnahme zur Verfügung steht.", + "Conversation picture set" : "Unterhaltungsbild festgelegt", + "Conversation picture deleted" : "Unterhaltungsbild gelöscht", + "Could not delete the conversation picture" : "Unterhaltungsbild konnte nicht gelöscht werden", + "Could not remove the automatic expiration" : "Der automatische Ablauf konnte nicht entfernt werden", + "Could not post message: {errorMessage}" : "Nachricht konnte nicht gesendet werden: {errorMessage}", + "Participant is banned successfully" : "Teilnehmer wurde gesperrt", + "Error while banning the participant" : "Fehler beim Sperren des Teilnehmers", + "An error occurred while fetching the participants" : "Es ist ein Fehler beim Abrufen der Teilnehmer aufgetreten", + "Could not send invitation to {actorId}" : "Einladung konnte nicht an {actorId} versendet werden", + "Invitations sent" : "Einladungen gesendet", + "Error occurred when sending invitations" : "Beim Senden der Einladungen ist ein Fehler aufgetreten", + "Failed to join the conversation." : "Beitreten zur Unterhaltung fehlgeschlagen", + "An error occurred while creating breakout rooms" : "Es ist ein Fehler beim Erstellen von Gruppenräumen aufgetreten", + "An error occurred while re-ordering the attendees" : "Beim Neuordnen der Teilnehmer ist ein Fehler aufgetreten", + "An error occurred while deleting breakout rooms" : "Es ist ein Fehler beim Löschen von Gruppenräumen aufgetreten", + "An error occurred while starting breakout rooms" : "Es ist ein Fehler beim Starten vom Gruppenräumen aufgetreten", + "An error occurred while stopping breakout rooms" : "Es ist ein Fehler beim Stoppen von Gruppenräumen aufgetreten", + "An error occurred while sending a message to the breakout rooms" : "Es ist ein Fehler beim Senden einer Nachricht an die Gruppenräume aufgetreten", + "An error occurred while requesting assistance" : "Es ist ein Fehler beim Anfordern der Unterstützung aufgetreten", + "An error occurred while resetting the request for assistance" : "Es ist ein Fehler beim Zurücksetzen der Hilfeanfrage aufgetreten", + "An error occurred while joining breakout room" : "Es ist ein Fehler beim Beitritt zum Gruppenraumraum aufgetreten", + "Failed to rename the thread" : "Thema konnte nicht umbenannt werden", + "Error fetching upcoming events" : "Fehler beim Abrufen der anstehenden Veranstaltungen", + "Error fetching upcoming reminders" : "Fehler beim Abrufen der anstehenden Erinnerungen", + "An error occurred while accepting an invitation" : "Es ist ein Fehler bei der Annahme einer Einladung aufgetreten", + "An error occurred while rejecting an invitation" : "Es ist ein Fehler bei der Zurückweisung einer Einladung aufgetreten", + "{guest} (guest)" : "{guest} (Gast)", + "Poll draft has been saved" : "Umfrageentwurf wurde gespeichert", + "An error occurred while saving the draft" : "Beim Speichern des Entwurfs ist ein Fehler aufgetreten", + "An error occurred while submitting your vote" : "Beim Absenden Ihrer Stimme ist ein Fehler aufgetreten", + "An error occurred while ending the poll" : "Es ist ein Fehler beim Beenden der Umfrage aufgetreten", + "An error occurred while deleting the poll draft" : "Es ist ein Fehler beim Löschen des Umfrageentwurfs aufgetreten", + "Poll \"{name}\" was created by {user}. Click to vote" : "Umfrage \"{name}\" wurde von {user} erstellt. Klicken Sie, um abzustimmen", + "Failed to add reaction" : "Reaktion konnte nicht hinzugefügt werden", + "Failed to remove reaction" : "Reaktion konnte nicht entfernt werden", + "The server is in maintenance mode." : "Der Server befindet sich im Wartungsmodus.", + "Federated server was updated." : "Der Federated-Server wurde aktualisiert.", + "Error while uploading file \"{fileName}\"" : "Fehler beim Hochladen der Datei \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nicht genügend freier Speicherplatz zum Hochladen von \"{fileName}\"", + "You are not allowed to share files" : "Sie dürfen keine Dateien teilen", + "Error while sharing file" : "Fehler beim Teilen der Datei", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Der von Ihnen verwendete Browser wird von Nextcloud Talk nicht vollständig unterstützt. Bitte verwenden Sie die neueste Version von Mozilla Firefox, Microsoft Edge, Google Chrome, Opera oder Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n Stunde","In %n Stunden"], + "_%n minute _::_%n minutes_" : ["%n Minute","%n Minuten"], + "In {hours} and {minutes}" : "In {hours} und {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n Minute","In %n Minuten"], + "Later today – {timeLocale}" : "Später heute – {timeLocale}", + "Set time for later today" : "Zeit für später heute einstellen", + "Tomorrow – {timeLocale}" : "Morgen – {timeLocale}", + "Set time for tomorrow" : "Zeit für morgen einstellen", + "This weekend – {timeLocale}" : "Dieses Wochenende – {timeLocale}", + "Set time for this weekend" : "Zeit für dieses Wochenende einstellen", + "Next week – {timeLocale}" : "Nächste Woche – {timeLocale}", + "Set time for next week" : "Zeit für nächste Woche einstellen", + "Message link copied to clipboard" : "Nachrichtenlink in die Zwischenablage kopiert", + "Conversation link copied to clipboard" : "Link zur Unterhaltung in die Zwischenablage kopiert", + "The link could not be copied" : "Der Link konnte nicht kopiert werden", + "Error while parsing a PROPFIND error" : "Fehler beim Parsen eines PROPFIND-Fehlers", + "Sending signaling message has failed" : "Das Senden der Signaling-Nachricht ist fehlgeschlagen", + "Lost connection to signaling server. Trying to reconnect." : "Verbindung zum Signaling-Server verloren. Es wird versucht, diese wiederherzustellen.", + "Lost connection to signaling server." : "Verbindung zum Signaling-Server verloren.", + "Connecting is taking longer than expected …" : "Verbinden dauert länger als erwartet …", + "Failed to connect. Retrying …" : "Verbindung konnte nicht hergestellt werden. Erneuter Versuch …", + "Failed to connect. The signaling server may be set up incorrectly" : "Verbindung konnte nicht hergestellt werden Der Signaling-Server könnte falsch eingerichtet sein", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Der eingerichtete Signalisierungsserver muss aktualisiert werden, damit er mit dieser Version von Talk kompatibel ist. Bitte wenden Sie sich an Ihre Administration.", + "Please restart the app." : "Bitte die App neu starten.", + "Please reload the page." : "Bitte die Seite neu laden.", + "Please try to restart the app." : "Bitte versuchen, die App neu zu starten.", + "Please try to reload the page." : "Bitte versuchen, die Seite neu zu laden.", + "Do not disturb" : "Nicht stören", + "Away" : "Abwesend", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Lautsprecher {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Anscheinend sprechen Sie während Sie stummgeschaltet sind. Bitte schalten Sie die Stummschaltung aus, damit die Anderen Sie hören können", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Mit mindestens einem Teilnehmer konnte keine Verbindung hergestellt werden. Für Ihr Szenario wird möglicherweise ein TURN-Server benötigt. Bitten Sie Ihre Administration, diesen gemäß {linkstart} dieser Dokumentation {linkend} einzurichten.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dies dauert länger als erwartet. Sind die Zugriffsrechte für Medien bereits erteilt (oder zurückgenommen)? Falls ja, dann starten Sie Ihren Browser neu, weil sonst kein Zugriff auf Audio und Video möglich ist", + "Access to microphone & camera is only possible with HTTPS" : "Zugriff auf Mikrofon & Kamera ist nur über HTTPS möglich", + "Please move your setup to HTTPS" : "Bitte stellen Sie auf HTTPS um", + "Access to microphone & camera was denied" : "Zugriff auf Mikrofon & Kamera wurde verweigert", + "WebRTC is not supported in your browser" : "WebRTC wird von Ihrem Browser nicht unterstützt", + "Please use a different browser like Firefox or Chrome" : "Bitte benutzen Sie einen anderen Browser, wie z.B. Firefox oder Chrome", + "Error while accessing microphone & camera" : "Fehler beim Zugriff auf Mikrofon & Kamera", + "%s Talk on your mobile devices" : "%s Talk auf Ihren mobilen Geräten", + "Join conversations at any time, anywhere, on any device." : "Immer, überall und auf allen Geräten einer Unterhaltung beitreten.", + "Android app" : "Android-App", + "iOS app" : "iOS-App", + "__language_name__" : "Deutsch (Förmlich: Sie)", + "Webhook Demo" : "Webhook-Demo", + "Call summary (%s)" : "Protokoll (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Der Protokoll-Bot veröffentlicht nach einem Anruf eine Übersichtsnachricht, in der alle Teilnehmenden und die Aufgaben aufgeführt sind", + "Tasks" : "Aufgaben", + "Notes" : "Notizen", + "Reports" : "Berichte", + "Decisions" : "Entscheidungen", + "Agenda" : "Agenda", + "Call summary" : "Zusammenfassung des Anrufs", + "Call summary - {title}" : "Protokoll - {title}", + "Talk conversation for event" : "Talk-Unterhaltung für ein Ereignis", + "Client Push is installed, this improves the performance of desktop clients." : "Client-Push installiert ist. Dies verbessert die Leistung von Desktop-Clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} ist nicht installiert. Dies kann zu Leistungsproblemen bei der Verwendung von Desktop-Clients führen.", + "Next meeting" : "Nächste Besprechung", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Planen Sie ein Meeting aus Ihrem Kalender. Ein Talk-Gespräch muss als Ort festgelegt werden, um hier angezeigt zu werden", + "Join conversations from remote Nextcloud servers" : "Unterhaltungen von entfernten Nextcloud-Servern beitreten", + "Your default media state has been saved" : "Ihr Standard-Medienstatus wurde gespeichert", + "Set reminder for later today" : "Erinnerung für später heute erstellen", + "Set reminder for tomorrow" : "Erinnerung für morgen erstellen", + "Set reminder for this weekend" : "Erinnerung für dieses Wochenende erstellen", + "Set reminder for next week" : "Erinnerung für nächste Woche erstellen", + "Generate summary" : "Zusammenfassung erstellen", + "Open poll • You voted already" : "Offene Umfrage • Sie haben bereits abgestimmt", + "Open poll • Click to vote" : "Offene Umfrage • Zur Abstimmung klicken", + "Poll • Ended" : "Umfrage・Beendet", + "Talk recording from {time} ({conversation})" : "Talk-Aufnahme von {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Umfrageergebnisse • %n Stimme","Umfrageergebnisse • %n Stimmen"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Offene Umfrage • %n Stimme","Offene Umfrage • %n Stimmen"], + "Submit vote" : "Stimme senden", + "Your privacy setting has been saved" : "Ihre Datenschutzeinstellungen wurde gespeichert", + "Your personal setting has been saved" : "Ihre persönliche Einstellung wurde gespeichert", + "Failed to save sounds setting" : "Toneinstellungen konnten nicht gespeichert werden", + "Sounds setting saved" : "Toneinstellung gespeichert", + "Always shown if recording consent is required" : "Wird immer angezeigt, wenn eine Zustimmung zur Aufzeichnung erforderlich ist", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk wurde aktualisiert. Sie können keinen Anruf starten oder beitreten.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Sie sind der Unterhaltung in einem anderen Fenster oder Gerät beigetreten. Dies wird derzeit von Nextcloud Talk nicht unterstützt, daher wurde diese Sitzung geschlossen.", + "Nextcloud Talk was updated." : "Nextcloud Talk wurde aktualisiert.", + "Nextcloud is in maintenance mode." : "Nextcloud befindet sich im Wartungsmodus.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation wurde aktualisiert.", + "Enable live translation" : "Live-Übersetzung aktivieren", + "I picked list style" : "Ich habe den Listenstil ausgewählt", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Verwenden Sie Talk im Listenstil oder mit Sprechblasen?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/el.js b/l10n/el.js new file mode 100644 index 0000000..3489f39 --- /dev/null +++ b/l10n/el.js @@ -0,0 +1,2122 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "μια συνομιλία", + "(Duration %s)" : "(Διάρκεια %s)", + "You attended a call with {user1}" : "Παρακολουθήσατε μια κλήση με {user1}", + "_%n guest_::_%n guests_" : ["%n επισκέπτης","%n επισκέπτες"], + "You attended a call with {user1} and {user2}" : "Παρακολουθήσατε μια κλήση με {user1} και {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2} και {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2}, {user3} και {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2}, {user3}, {user4} και {user5}", + "_%n other_::_%n others_" : ["%n άλλος","%n άλλοι"], + "{actor} invited you to {call}" : "Ο {actor} σας προσκάλεσε σε {call}", + "You were invited to a conversation or had a call" : "Σας προσκάλεσαν για συζήτηση ή είχατε μια κλήση", + "Other activities" : "Άλλες δραστηριότητες", + "Talk" : "Talk", + "Guest" : "Επισκέπτης", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Καλώς ήρθατε στο Nextcloud Talk!\nΣε αυτή τη συνομιλία θα ενημερώνεστε για νέες λειτουργίες που είναι διαθέσιμες στο Nextcloud Talk.", + "## New in Talk %s" : "## Νέα στο Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Το Microsoft Edge και Safari μπορούν να χρησιμοποιηθούν για κλήσεις βίντεο και ήχου", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Οι συνομιλίες ένας προς ένα είναι σταθερές και δεν μπορούν πλέον να μετατραπούν σε ομαδικές συνομιλίες τυχαία. Επίσης, όταν ένας από τους συμμετέχοντες αποχωρήσει από τη συζήτηση, αυτή δε διαγράφεται αυτόματα πλέον. Μόνο εάν και οι δύο συμμετέχοντες αποχωρήσουν, διαγράφεται από το διακομιστή", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Μπορείτε να ενημερώσετε όλους τους συμμετέχοντες γράφοντας \"@all\" στο chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Με το \"βελάκι-πάνω\" ξανά γράφεται το τελευταίο μήνυμα", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Το Talk έχει πλέον εντολές, στείλτε \"/help\" σαν μήνυμα στο chat για να δείτε εάν ο διαχειριστής ρύθμισε κάποιες", + "- With projects you can create quick links between conversations, files and other items" : "- Με τα έργα μπορείτε να δημιουργήσετε γρήγορους συνδέσμους μεταξύ συνομιλιών, αρχείων και άλλων αντικειμένων", + "- You can now mention guests in the chat" : "Μππορείτε πλέον να αναφερθείτε σε επισκέπτες στο chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Οι συνομιλίες έχουν πλέον αίθουσα αναμονής. Αυτό επιτρέπει στους συντονιστές να προετοιμαστούν για την συνάντηση, ενώ οι χρήστες και οι επισκέπτες πρέπει να περιμένουν", + "- You can now directly reply to messages giving the other users more context what your message is about" : "Μπορείτε πλέον να απαντήσετε απευθείας στα μηνύματα άλλων χρηστών δίνοντας άλλο ύφος στον ορισμό των μηνυμάτων", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Η αναζήτηση συζητήσεων και συμμετεχόντων φιλτράρει τις υπάρχουσες συνομιλίες σας, διευκολύνοντας την εύρεση προηγούμενων συνομιλιών", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Τώρα μπορείτε να προσθέσετε προσαρμοσμένες ομάδες χρηστών σε συνομιλίες όταν είναι εγκατεστημένη η εφαρμογή κύκλων", + "- Check out the new grid and call view" : "- Ελέγξτε τη νέα προβολή πλέγματος και κλήσεων", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Τώρα μπορείτε να ανεβάσετε και να σύρετε αρχεία απευθείας από τη συσκευή σας στη συνομιλία γραπτών μηνυμάτων", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Τα κοινόχρηστα αρχεία ανοίγουν τώρα απευθείας μέσα στον χώρο συνομιλίας με τις εφαρμογές προβολής", + "- You can now search for chats and messages in the unified search in the top bar" : "- Τώρα μπορείτε να αναζητήσετε συνομιλίες και μηνύματα στην ενοποιημένη αναζήτηση στην επάνω γραμμή.", + "- Spice up your messages with emojis from the emoji picker" : "- Εμπλουτίστε τα μηνύματά σας με emojis από την επιλογή emoji.", + "- You can now change your camera and microphone while being in a call" : "- Τώρα μπορείτε να αλλάξετε την κάμερα και το μικρόφωνό σας ενώ βρίσκεστε σε κλήση.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Δώστε πλαίσιο στις συνομιλίες σας με μια περιγραφή και ανοίξτε τις ώστε οι συνδεδεμένοι χρήστες να μπορούν να τις βρουν και να συμμετάσχουν μόνοι τους", + "- See a read status and send failed messages again" : "- Δείτε την κατάσταση ανάγνωσης και στείλτε ξανά μηνύματα που απέτυχαν", + "- Raise your hand in a call with the R key" : "Σηκώστε το χέρι σας σε μια κλήση με το πλήκτρο R", + "- Join the same conversation and call from multiple devices" : "- Συμμετέχετε στην ίδια συνομιλία και κλήση από πολλαπλές συσκευές", + "- Send voice messages, share your location or contact details" : "- Στείλτε φωνητικά μηνύματα, μοιραστείτε την τοποθεσία σας ή τα στοιχεία επικοινωνίας", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Προσθέστε ομάδες σε μια συνομιλία και τα νέα μέλη ομάδας θα προστεθούν αυτόματα ως συμμετέχοντες", + "- A preview of your audio and video is shown before joining a call" : "- Μια προεπισκόπηση του ήχου και βίντεό σας εμφανίζεται πριν από τη συμμετοχή σε κλήση", + "- You can now blur your background in the newly designed call view" : "- Μπορείτε τώρα να θολώσετε το φόντο σας στη νέα σχεδιασμένη προβολή κλήσης", + "- Moderators can now assign general and individual permissions to participants" : "- Οι συντονιστές μπορούν τώρα να αναθέτουν γενικά και ατομικά δικαιώματα σε συμμετέχοντες", + "- You can now react to chat messages" : "- Μπορείτε τώρα να αντιδράτε σε μηνύματα συνομιλίας", + "- In the sidebar you can now find an overview of the latest shared items" : "- Στην πλαϊνή γραμμή μπορείτε τώρα να βρείτε μια επισκόπηση των τελευταίων κοινόχρηστων στοιχείων", + "- Use a poll to collect the opinions of others or settle on a date" : "- Χρησιμοποιήστε μια δημοσκόπηση για να συλλέξετε τις απόψεις άλλων ή να κανονίσετε μια ημερομηνία", + "- Configure an expiration time for chat messages" : "- Ρυθμίστε ένα χρόνο λήξης για τα μηνύματα συνομιλίας", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Ξεκινήστε κλήσεις χωρίς ειδοποίηση άλλων σε μεγάλες συνομιλίες. Μπορείτε να στείλετε ατομικές ειδοποιήσεις κλήσης μόλις ξεκινήσει η κλήση.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Στείλτε μηνύματα συνομιλίας χωρίς ειδοποίηση των παραληπτών σε περίπτωση που δεν είναι επείγον", + "- Emojis can now be autocompleted by typing a \":\"" : "- Τα emojis μπορούν τώρα να συμπληρωθούν αυτόματα πληκτρολογώντας \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Συνδέστε διάφορα στοιχεία χρησιμοποιώντας τον νέο έξυπνο επιλογέα πληκτρολογώντας \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Οι συντονιστές μπορούν τώρα να δημιουργούν δωμάτια ομάδων (απαιτείται το High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Οι κλήσεις μπορούν τώρα να εγγράφονται (απαιτείται το High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Οι συνομιλίες μπορούν τώρα να έχουν avatar ή emoji ως εικονίδιο", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Τα εικονικά φόντα είναι τώρα διαθέσιμα εκτός από το θολωμένο φόντο σε κλήσεις βίντεο", + "- Reactions are now available during calls" : "- Οι αντιδράσεις είναι τώρα διαθέσιμες κατά τη διάρκεια κλήσεων", + "- Typing indicators show which users are currently typing a message" : "- Οι δείκτες πληκτρολόγησης δείχνουν ποιοι χρήστες πληκτρολογούν τρέχοντα μήνυμα", + "- Groups can now be mentioned in chats" : "- Οι ομάδες μπορούν τώρα να αναφέρονται σε συνομιλίες", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Οι εγγραφές κλήσεων μεταγράφονται αυτόματα εάν έχει εγγραφεί εφαρμογή πάροχου μεταγραφής", + "- Chat messages can be translated if a translation provider app is registered" : "- Τα μηνύματα συνομιλίας μπορούν να μεταφραστούν εάν έχει εγγραφεί εφαρμογή πάροχου μετάφρασης", + "- **Markdown** can now be used in _chat_ messages" : "- Το **Markdown** μπορεί τώρα να χρησιμοποιηθεί σε μηνύματα _συνομιλίας_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Τα Webhooks είναι τώρα διαθέσιμα για την υλοποίηση bots. Δείτε την τεκμηρίωση για περισσότερες πληροφορίες https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ορίστε υπενθύμιση σε μήνυμα συνομιλίας για να ειδοποιηθείτε ξανά αργότερα", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Χρησιμοποιήστε τη συνομιλία **Σημείωση προς εμένα** για να κρατάτε σημειώσεις και να μοιράζεστε πληροφορίες ανάμεσα στις συσκευές σας", + "- Captions allow to send a message with a file at the same time" : "- Οι λεζάντες επιτρέπουν την αποστολή μηνύματος με αρχείο ταυτόχρονα", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Το βίντεο του ομιλητή είναι τώρα ορατό κατά τη διάρκεια κοινής χρήσης οθόνης και οι αντιδράσεις κλήσης είναι κινούμενες", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Τα μηνύματα μπορούν τώρα να επεξεργαστούν από συνδεδεμένους συγγραφείς και συντονιστές για 6 ώρες", + "- Unsent message drafts are now saved in your browser" : "- Τα μη αποσταλμένα προσχέδια μηνυμάτων αποθηκεύονται τώρα στο πρόγραμμα περιήγησής σας", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Η συνομιλία κειμένου μπορεί τώρα να γίνει με federated τρόπο με άλλους διακομιστές Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Οι συντονιστές μπορούν τώρα να αποκλείσουν λογαριασμούς και επισκέπτες για να τους εμποδίσουν από το να επανέλθουν σε συνομιλία", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Οι επερχόμενες κλήσεις από συνδεδεμένα γεγονότα ημερολογίου και αντικαταστάτες εκτός γραφείου εμφανίζονται τώρα σε συνομιλίες", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Οι κλήσεις μπορούν τώρα να γίνουν με federated τρόπο με άλλους διακομιστές Talk (απαιτείται το High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Παρουσίαση του πελάτη επιφάνειας εργασίας Nextcloud Talk για Windows, macOS και Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Σύνοψη εγγραφών κλήσεων και μη αναγνωσμένων μηνυμάτων σε συνομιλίες με τον Βοηθό Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Βελτιωμένες συναντήσεις με αναγνώριση επισκεπτών που προσκλήθηκαν μέσω διεύθυνσης email, εισαγωγή λιστών συμμετεχόντων, προσχέδια για δημοσκοπήσεις και λήψη λιστών συμμετεχόντων κλήσης", + "- Archive conversations to stay focused" : "- Αρχειοθέτηση συνομιλιών για να παραμείνετε συγκεντρωμένοι", + "- Schedule a meeting into your calendar from within a conversation" : "- Προγραμματίστε μια συνάντηση στο ημερολόγιό σας από μέσα σε μια συνομιλία", + "- Search for messages of the current conversation directly in the right sidebar" : "- Αναζήτηση μηνυμάτων της τρέχουσας συνομιλίας απευθείας στην δεξιά πλαϊνή γραμμή", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Δείτε περισσότερες συνομιλίες με μια πρώτη ματιά με τη νέα συμπαγή λίστα (ενεργοποιήστε στις ρυθμίσεις Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Οι συνομιλίες συναντήσεων συγχρονίζουν τώρα τον τίτλο και την περιγραφή από το ημερολόγιο και είναι κρυφές με ένα φίλτρο αναζήτησης μέχρι να πλησιάσει η ώρα έναρξης", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Σημειώστε συνομιλίες ως ευαίσθητες στις ρυθμίσεις ειδοποιήσεων, για απόκρυψη του περιεχομένου μηνύματος από τη λίστα συνομιλιών και τις ειδοποιήσεις", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Για λήψη push ειδοποιήσεων κατά τη διάρκεια \"Μην ενοχλείτε\", σημειώστε συνομιλίες ως σημαντικές", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Προσθέστε άλλους συμμετέχοντες σε κλήση ένα προς ένα για δημιουργία νέας ομαδικής κλήσης αυτόματα", + "- Use threads to keep your chat and discussions organized" : "- Χρησιμοποιήστε νήματα για να διατηρήσετε τις συνομιλίες και συζητήσεις σας οργανωμένες", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Ζωντανές μεταγραφές τώρα διαθέσιμες κατά τη διάρκεια κλήσης (απαιτείται η εφαρμογή live-transcription ExApp και το High-performance backend)", + "_All %n participant_::_All %n participants_" : ["Όλοι οι %n συμμετέχοντες","Όλοι οι %n συμμετέχοντες"], + "Talk updates ✅" : "Ενημερώσεις Talk ✅", + "Reaction deleted by author" : "Αντίδραση διαγραμμένη από τον συγγραφέα", + "{actor} created the conversation" : "Ο/Η {actor} δημιούργησε την συζήτηση", + "You created the conversation" : "Δημιουργήσατε μια συζήτηση", + "System created the conversation" : "Το σύστημα δημιούργησε τη συνομιλία", + "An administrator created the conversation" : "Ένας διαχειριστής δημιούργησε την συζήτηση", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ο/Η {actor} μετονόμασε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Μετονομάσατε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ένας διαχειριστής μετονόμασε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "{actor} set the description" : "Ο/Η {actor} όρισε την περιγραφή", + "You set the description" : "Ορίσατε την περιγραφή", + "An administrator set the description" : "Ένας διαχειριστής όρισε την περιγραφή", + "{actor} removed the description" : "Ο/Η {actor} κατάργησε την περιγραφή", + "You removed the description" : "Καταργήσατε την περιγραφή", + "An administrator removed the description" : "Ένας διαχειριστής κατάργησε την περιγραφή", + "You started a silent call" : "Ξεκινήσατε μια σιωπηλή κλήση", + "Outgoing silent call" : "Εξερχόμενη σιωπηλή κλήση", + "{actor} started a silent call" : "Ο/Η {actor} ξεκίνησε μια σιωπηλή κλήση", + "Incoming silent call" : "Εισερχόμενη σιωπηλή κλήση", + "You started a call" : "Ξεκινήσατε μια κλήση", + "Outgoing call" : "Εξερχόμενη κλήση", + "{actor} started a call" : "Ο/Η {actor} ξεκίνησε μια κλήση", + "Incoming call" : "Εισερχόμενη κλήση", + "{actor} joined the call" : "Ο/Η {actor} συμμετέχει στην κλήση", + "You joined the call" : "Συμμετείχατε στην κλήση", + "{actor} left the call" : "Ο/Η {actor} αποχώρησε από την κλήση", + "You left the call" : "Αποχωρήσατε από την κλήση", + "{actor} unlocked the conversation" : "Ο/Η {actor} ξεκλείδωσε την συζήτηση", + "You unlocked the conversation" : "Ξεκλειδώσατε την συζήτηση", + "An administrator unlocked the conversation" : "Ένας διαχειριστής ξεκλείδωσε την συζήτηση", + "{actor} locked the conversation" : "Ο/Η {actor} κλείδωσε την συζήτηση", + "You locked the conversation" : "Κλειδώσατε την συζήτηση", + "An administrator locked the conversation" : "Ένας διαχειριστής κλείδωσε την συζήτηση", + "{actor} limited the conversation to the current participants" : "Ο/Η {actor} περιόρισε την συνομιλία στους τρέχοντες συμμετέχοντες", + "You limited the conversation to the current participants" : "Περιορίσατε την συνομιλία στους τρέχοντες συμμετέχοντες", + "An administrator limited the conversation to the current participants" : "Ένας διαχειριστής περιόρισε την συνομιλία στους τρέχοντες συμμετέχοντες", + "{actor} opened the conversation to registered users" : "Ο/Η {actor} άνοιξε την συνομιλία σε εγγεγραμμένους χρήστες", + "You opened the conversation to registered users" : "Ανοίξατε την συνομιλία σε εγγεγραμμένους χρήστες", + "An administrator opened the conversation to registered users" : "Ένας διαχειριστής άνοιξε την συνομιλία για εγγεγραμμένους χρήστες", + "{actor} opened the conversation to registered users and users created with the Guests app" : "Ο {actor} άνοιξε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "You opened the conversation to registered users and users created with the Guests app" : "Ανοίξατε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Ένας διαχειριστής άνοιξε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "The conversation is now open to everyone" : "Η συζήτηση είναι πλέον ανοιχτή για όλους", + "{actor} opened the conversation to everyone" : "Ο/Η {actor} άνοιξε την συζήτηση για όλους", + "You opened the conversation to everyone" : "Ανοίξατε την συζήτηση για όλους", + "{actor} restricted the conversation to moderators" : "Ο/Η {actor} περιόρισε την συζήτηση για συντονιστές", + "You restricted the conversation to moderators" : "Περιορίσατε την συζήτηση για συντονιστές", + "{actor} started breakout rooms" : "Ο/Η {actor} ξεκίνησε τα δωμάτια ομάδων", + "You started breakout rooms" : "Ξεκινήσατε τα δωμάτια ομάδων", + "{actor} stopped breakout rooms" : "Ο/Η {actor} σταμάτησε τα δωμάτια ομάδων", + "You stopped breakout rooms" : "Σταματήσατε τα δωμάτια ομάδων", + "{actor} allowed guests" : "Ο/Η {actor} επέτρεψε τους επισκέπτες", + "You allowed guests" : "Επιτρέψατε τους επισκέπτες", + "An administrator allowed guests" : "Ένας διαχειριστής επέτρεψε τους επισκέπτες", + "{actor} disallowed guests" : "Ο/Η {actor} απαγόρευσε τους επισκέπτες", + "You disallowed guests" : "Απαγορέψατε τους επισκέπτες", + "An administrator disallowed guests" : "Ένας διαχειριστής απαγόρευσε τους επισκέπτες", + "{actor} set a password" : "Ο/Η {actor} όρισε κωδικό", + "You set a password" : "Ορίσατε κωδικό", + "An administrator set a password" : "Ένας διαχειριστής όρισε κωδικό", + "{actor} removed the password" : "Ο/Η {actor} αφαίρεσε τον κωδικό", + "You removed the password" : "Αφαιρέσατε το συνθηματικό", + "An administrator removed the password" : "Ένας διαχειριστής αφαίρεσε το συνθηματικό", + "{actor} added {user}" : "Ο/Η {actor} πρόσθεσε τον/την {user}", + "You joined the conversation" : "Συνδεθήκατε στην συζήτηση", + "{actor} joined the conversation" : "Ο/Η {actor} συνδέθηκε στην συζήτηση", + "You added {user}" : "Προσθέσατε τον/την {user}", + "{actor} added you" : "Ο/Η {actor} σας πρόσθεσε", + "An administrator added you" : "Ένας διαχειριστής σάς πρόσθεσε", + "An administrator added {user}" : "Ένας διαχειριστής πρόσθεσε τον/την χρήστη {user}", + "You left the conversation" : "Αποχωρήσατε από την συζήτηση", + "{actor} left the conversation" : "Ο/Η {actor} αποχώρησε από την συζήτηση", + "{actor} removed {user}" : "Ο/Η {actor} αφαίρεσε τον/την {user}", + "You removed {user}" : "Αφαιρέσατε τον/την {user}", + "{actor} removed you" : "Ο/Η {actor} σας αφαίρεσε", + "An administrator removed you" : "Ένας διαχειριστής σάς αφαίρεσε", + "An administrator removed {user}" : "Ένας διαχειριστής αφαίρεσε τον/την χρήστη {user}", + "{actor} invited {federated_user}" : "Ο {actor} προσκάλεσε τον {federated_user}", + "You invited {federated_user}" : "Προσκαλέσατε τον {federated_user}", + "You accepted the invitation" : "Αποδεχθήκατε την πρόσκληση", + "{actor} invited you" : "Ο {actor} σας προσκάλεσε", + "An administrator invited you" : "Ένας διαχειριστής σας προσκάλεσε", + "An administrator invited {federated_user}" : "Ένας διαχειριστής προσκάλεσε τον/την {federated_user}", + "{federated_user} accepted the invitation" : "Ο/Η {federated_user} αποδέχθηκε την πρόσκληση", + "{actor} removed {federated_user}" : "Ο/Η {actor} αφαίρεσε τον/την {federated_user}", + "You removed {federated_user}" : "Αφαιρέσατε τον {federated_user}", + "You declined the invitation" : "Απορρίψατε την πρόσκληση", + "An administrator removed {federated_user}" : "Ένας διαχειριστής αφαίρεσε τον {federated_user}", + "{federated_user} declined the invitation" : "Ο/Η {federated_user} απέρριψε την πρόσκληση", + "{actor} added group {group}" : "Ο/Η {actor} πρόσθεσε την ομάδα {group}", + "You added group {group}" : "Προσθέσατε την ομάδα {group}", + "An administrator added group {group}" : "Ένας διαχειριστής πρόσθεσε την ομάδα {group}", + "{actor} removed group {group}" : "Ο/Η {actor} αφαίρεσε την ομάδα {group}", + "You removed group {group}" : "Αφαιρέσατε την ομάδα {group}", + "An administrator removed group {group}" : "Ένας διαχειριστής αφαίρεσε την ομάδα {group}", + "{actor} added team {circle}" : "Ο/Η {actor} πρόσθεσε την ομάδα {circle}", + "You added team {circle}" : "Προσθέσατε την ομάδα {circle}", + "An administrator added team {circle}" : "Ένας διαχειριστής πρόσθεσε την ομάδα {circle}", + "{actor} removed team {circle}" : "Ο/Η {actor} αφαίρεσε την ομάδα {circle}", + "You removed team {circle}" : "Αφαιρέσατε την ομάδα {circle}", + "An administrator removed team {circle}" : "Ένας διαχειριστής αφαίρεσε την ομάδα {circle}", + "{actor} added {phone}" : "Ο/Η {actor} πρόσθεσε {phone}", + "You added {phone}" : "Προσθέσατε {phone}", + "An administrator added {phone}" : "Ένας διαχειριστής πρόσθεσε {phone}", + "{actor} removed {phone}" : "Ο/Η {actor} αφαίρεσε {phone}", + "You removed {phone}" : "Αφαιρέσατε {phone}", + "An administrator removed {phone}" : "Ένας διαχειριστής αφαίρεσε {phone}", + "{actor} promoted {user} to moderator" : "Ο {actor} προήγαγε τον {user} σε συντονιστή", + "You promoted {user} to moderator" : "Προάγατε τον {user} σε συντονιστή", + "{actor} promoted you to moderator" : "Ο/Η {actor} σας προήγαγε σε συντονιστή", + "An administrator promoted you to moderator" : "Ένας διαχειριστής σας προήγαγε σε συντονιστή", + "An administrator promoted {user} to moderator" : "Ένας διαχειριστής προήγαγε τον/την {user} σε συντονιστή", + "{actor} demoted {user} from moderator" : "Ο/Η {actor} υποβίβασε τον/την {user} από συντονιστή", + "You demoted {user} from moderator" : "Υποβιβάσατε τον {user} από συντονιστή", + "{actor} demoted you from moderator" : "Ο/Η {actor} σας υποβίβασε από συντονιστή", + "An administrator demoted you from moderator" : "Ένας διαχειριστής σας υποβίβασε από συντονιστή", + "An administrator demoted {user} from moderator" : "Ένας διαχειριστής υποβίβασε τον/την {user} από συντονιστή", + "{actor} shared a file which is no longer available" : "Ο/Η {actor} διαμοίρασε ένα αρχείο που δεν είναι πλέον διαθέσιμο", + "You shared a file which is no longer available" : "Διαμοιράσε αρχείο που δεν είναι πλέον διαθέσιμο", + "File shares are currently not supported in federated conversations" : "Οι κοινόχρηστοι αρχείων δεν υποστηρίζονται προς το παρόν σε federated συνομιλίες", + "The shared location is malformed" : "Η κοινόχρηστη τοποθεσία είναι κακοσχηματισμένη", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "Ο {actor} ρύθμισε το Matterbridge για συγχρονισμό αυτής της συνομιλίας με άλλες συνομιλίες", + "You set up Matterbridge to synchronize this conversation with other chats" : "Ρυθμίσατε το Matterbridge για συγχρονισμό αυτής της συνομιλίας με άλλες συνομιλίες", + "{actor} created thread {title}" : "Ο/Η {actor} δημιούργησε το νήμα {title}", + "You created thread {title}" : "Δημιουργήσατε το νήμα {title}", + "{actor} renamed thread {title}" : "Ο/Η {actor} μετονόμασε το νήμα {title}", + "You renamed thread {title}" : "Μετονομάσατε το νήμα {title}", + "{actor} updated the Matterbridge configuration" : "Ο/Η {actor} ενημέρωσε τη ρύθμιση του Matterbridge", + "You updated the Matterbridge configuration" : "Ενημερώσατε τη ρύθμιση του Matterbridge", + "{actor} removed the Matterbridge configuration" : "Ο/Η {actor} αφαίρεσε τη ρύθμιση του Matterbridge", + "You removed the Matterbridge configuration" : "Αφαιρέσατε τη ρύθμιση του Matterbridge", + "{actor} started Matterbridge" : "Ο/Η {actor} ξεκίνησε το Matterbridge", + "You started Matterbridge" : "Ξεκινήσατε το Matterbridge", + "{actor} stopped Matterbridge" : "Ο/Η {actor} σταμάτησε το Matterbridge", + "You stopped Matterbridge" : "Σταματήσατε το Matterbridge", + "{actor} deleted a message" : "Ο/Η {actor} διέγραψε ένα μήνυμα", + "You deleted a message" : "Διαγράψατε ένα μήνυμα", + "{actor} edited a message" : "Ο/Η {actor} επεξεργάστηκε ένα μήνυμα", + "You edited a message" : "Επεξεργαστήκατε ένα μήνυμα", + "{actor} deleted a reaction" : "Ο/Η {actor} διέγραψε μια αντίδραση", + "You deleted a reaction" : "Διαγράψατε μια αντίδραση", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ορίσατε τη λήξη μηνύματος σε %n εβδομάδα","Ορίσατε τη λήξη μηνύματος σε %n εβδομάδες"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ορίσατε τη λήξη μηνύματος σε %n ημέρα","Ορίσατε τη λήξη μηνύματος σε %n ημέρες"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ορίσατε τη λήξη μηνύματος σε %n ώρα","Ορίσατε τη λήξη μηνύματος σε %n ώρες"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ορίσατε τη λήξη μηνύματος σε %n λεπτό","Ορίσατε τη λήξη μηνύματος σε %n λεπτά"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n εβδομάδα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n εβδομάδες"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ημέρα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ημέρες"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ώρα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ώρες"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n λεπτό","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n λεπτά"], + "{actor} disabled message expiration" : "Ο/Η {actor} απενεργοποίησε τη λήξη μηνυμάτων", + "You disabled message expiration" : "Απενεργοποιήσατε τη λήξη μηνυμάτων", + "{actor} cleared the history of the conversation" : "Ο/Η {actor} εκκαθάρισε το ιστορικό της συνομιλίας", + "You cleared the history of the conversation" : "Εκκαθαρίσατε το ιστορικό της συνομιλίας", + "{actor} set the conversation picture" : "Ο/Η {actor} όρισε την εικόνα συνομιλίας", + "You set the conversation picture" : "Ορίσατε την εικόνα συνομιλίας", + "{actor} removed the conversation picture" : "Ο/Η {actor} αφαίρεσε την εικόνα συνομιλίας", + "You removed the conversation picture" : "Αφαιρέσατε την εικόνα συνομιλίας", + "{actor} ended the poll {poll}" : "Ο/Η {actor} τερμάτισε τη δημοσκόπηση {poll}", + "You ended the poll {poll}" : "Τερματίσατε τη δημοσκόπηση {poll}", + "{actor} started the video recording" : "Ο/Η {actor} ξεκίνησε την εγγραφή βίντεο", + "You started the video recording" : "Ξεκινήσατε την εγγραφή βίντεο", + "{actor} stopped the video recording" : "Ο/Η {actor} σταμάτησε την εγγραφή βίντεο", + "You stopped the video recording" : "Σταματήσατε την εγγραφή βίντεο", + "{actor} started the audio recording" : "Ο/Η {actor} ξεκίνησε την εγγραφή ήχου", + "You started the audio recording" : "Ξεκινήσατε την εγγραφή ήχου", + "{actor} stopped the audio recording" : "Ο/Η {actor} σταμάτησε την εγγραφή ήχου", + "You stopped the audio recording" : "Σταματήσατε την εγγραφή ήχου", + "The recording failed" : "Η εγγραφή απέτυχε", + "Someone voted on the poll {poll}" : "Κάποιος ψήφισε στη δημοσκόπηση {poll}", + "Message deleted by author" : "Το μήνυμα διαγράφηκε από τον συντάκτη", + "Message deleted by {actor}" : "Το μήνυμα διαγράφηκε από {actor}", + "Message deleted by you" : "Το μήνυμα διαγράφηκε από εσάς", + "Deleted user" : "Διαγραμμένος χρήστης", + "Unknown number" : "Άγνωστος αριθμός", + "Administration" : "Διαχείριση", + "System" : "Συστήματος", + "%s (guest)" : "%s (επισκέπτης)", + "Missed call" : "Αναπάντητη κλήση", + "Unanswered call" : "Αναπάντητη κλήση", + "Call ended (Duration {duration})" : "Κλήση τερματίστηκε (Διάρκεια {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "{actor} ended the call (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση (Διάρκεια {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Η κλήση με %n επισκέπτη τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})","Η κλήση με %n επισκέπτες τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Κλήση με %n επισκέπτη τερματίστηκε (Διάρκεια {duration})","Κλήση με %n επισκέπτες τερματίστηκε (Διάρκεια {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["Ο {actor} τερμάτισε την κλήση με %n επισκέπτη (Διάρκεια {duration})","Ο {actor} τερμάτισε την κλήση με %n επισκέπτες (Διάρκεια {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τον {user1} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1} ended (Duration {duration})" : "Κλήση με τον {user1} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τον {user1} (Διάρκεια {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1} και {user2} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Κλήση με τους {user1} και {user2} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1} και {user2} (Διάρκεια {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2} και {user3} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2} και {user3} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1}, {user2} και {user3} (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2}, {user3} και {user4} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2}, {user3} και {user4} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1}, {user2}, {user3} και {user4} (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "Ο/Η {actor} τερμάτισε την κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} (Διάρκεια {duration})", + "Message of {user} in {conversation}" : "Μήνυμα του {user} στην {conversation}", + "Message of {user}" : "Μήνυμα του {user}", + "Message of a deleted user in {conversation}" : "Μήνυμα διαγεγραμμένου χρήστη στην {conversation}", + "Talk conversations" : "Συνομιλίες με Talk", + "Talk to %s" : "Talk σε %s", + "An error occurred. Please contact your administrator." : "Παρουσιάστηκε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.", + "File not found" : "Το αρχείο δεν βρέθηκε", + "File is not shared, or shared but not with the user" : "Το αρχείο δεν είναι κοινόχρηστο, ή δεν μοιράζεται με τον χρήστη", + "No account available to delete." : "Δεν υπάρχει διαθέσιμος λογαριασμός για διαγραφή.", + "Poll" : "Δημοσκόπηση", + "Password needs to be set" : "Απαιτείται ορισμός συνθηματικού", + "Uploading the file failed" : "Η μεταφόρτωση του αρχείου απέτυχε", + "No image file provided" : "Δεν παρέχεται αρχείο εικόνας", + "File is too big" : "Το αρχείο είναι πολύ μεγάλο", + "Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο", + "Invalid image" : "Μη έγκυρη εικόνα", + "Unknown filetype" : "Άγνωστος τύπος αρχείου", + "Talk mentions" : "Αναφορές σε ονόματα του Talk", + "More conversations" : "Περισσότερες συνομιλίες", + "Say hi to your friends and colleagues!" : "Πείτε γειά σε φίλους και συνεργάτες!", + "No unread mentions" : "Δεν υπάρχουν μη αναγνωσμένες αναφορές στο όνομά σας", + "Call in progress" : "Κλήση σε εξέλιξη", + "You were mentioned" : "Αναφέρθηκε το όνομά σας", + "Write to conversation" : "Γράψτε στη συνομιλία", + "Writes event information into a conversation of your choice" : "Γράφει πληροφορίες εκδήλωσης μιας συνομιλίας επιλογής σας", + "Missing email field in header line" : "Λείπει το πεδίο email στην γραμμή κεφαλίδας", + "Following lines are invalid: %s" : "Οι ακόλουθες γραμμές είναι μη έγκυρες: %s", + "%1$s invited you to conversation \"%2$s\"." : "Ο %1$s σας προσκάλεσε στη συνομιλία \"%2$s\".", + "You were invited to conversation \"%s\"." : "Προσκληθήκατε στη συνομιλία \"%s\".", + "Conversation invitation" : "Πρόσκληση συζήτησης", + "Scheduled time" : "Προγραμματισμένη ώρα", + "Description" : "Περιγραφή", + "You can also dial-in via phone with the following details" : "Μπορείτε επίσης να καλέσετε μέσω τηλεφώνου με τις ακόλουθες λεπτομέρειες.", + "Dial-in information" : "Πληροφορίες κλήσης", + "Meeting ID" : "Αναγνωριστικό Meeting ", + "Your PIN" : "Το PIN σας", + "Click the button below to join the lobby now." : "Κάντε κλικ στο παρακάτω κουμπί για να συμμετάσχετε τώρα στην αίθουσα αναμονής.", + "Click the link below to join the lobby now." : "Κάντε κλικ στον παρακάτω σύνδεσμο για να συμμετάσχετε τώρα στην αίθουσα αναμονής.", + "Join lobby for \"%s\"" : "Συμμετοχή στην αιθουσα αναμονής για \"%s\"", + "Click the button below to join the conversation now." : "Κάντε κλικ στο παρακάτω κουμπί για να συμμετάσχετε τώρα στη συνομιλία.", + "Click the link below to join the conversation now." : "Κάντε κλικ στον παρακάτω σύνδεσμο για να συμμετάσχετε τώρα στη συνομιλία.", + "Join \"%s\"" : "Συμμετοχή στο \"%s\"", + "Meeting" : "Συνάντηση", + "Password request: %s" : "Αίτημα κωδικού πρόσβασης: %s", + "Private conversation" : "Ιδιωτική συνομιλία", + "Deleted user (%s)" : "Διεγραμμένος χρήστης (%s)", + "Failed to upload call recording" : "Αποτυχία μεταφόρτωσης εγγραφής κλήσης", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Ο διακομιστής εγγραφής απέτυχε να μεταφορτώσει την εγγραφή της κλήσης {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "Share to chat" : "Κοινή χρήση στη συνομιλία", + "Dismiss notification" : "Αποδέσμευση ειδοποίησης", + "Call recording now available" : "Η εγγραφή κλήσης είναι πλέον διαθέσιμη", + "The recording for the call in {call} was uploaded to {file}." : "Η εγγραφή για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Transcript now available" : "Η μεταγραφή είναι πλέον διαθέσιμη", + "The transcript for the call in {call} was uploaded to {file}." : "Η μεταγραφή για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Failed to transcript call recording" : "Αποτυχία μεταγραφής εγγραφής κλήσης", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Ο διακομιστής απέτυχε να μεταγράψει την εγγραφή στο {file} για την κλήση στο {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "Call summary now available" : "Η σύνοψη κλήσης είναι πλέον διαθέσιμη", + "The summary for the call in {call} was uploaded to {file}." : "Η σύνοψη για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Failed to summarize call recording" : "Αποτυχία σύνταξης σύνοψης εγγραφής κλήσης", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Ο διακομιστής απέτυχε να συνοψίσει την εγγραφή στο {file} για την κλήση στο {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Ο {user1} σας προσκάλεσε να συμμετάσχετε στο {roomName} στον {remoteServer}", + "Accept" : "Αποδοχή", + "Decline" : "Απόρριψη", + "{user1} invited you to a federated conversation" : "Ο {user1} σας προσκάλεσε σε μια federated συνομιλία", + "Someone reacted" : "Κάποιος αντέδρασε", + "New message" : "Νέο μήνυμα", + "Reminder" : "Υπενθύμιση", + "Someone mentioned you" : "Κάποιος σας ανέφερε", + "Notification" : "Ειδοποίηση", + "Someone reacted in a private conversation" : "Κάποιος αντέδρασε σε μια ιδιωτική συνομιλία", + "You received a message in a private conversation" : "Λάβατε ένα μήνυμα σε μια ιδιωτική συνομιλία", + "Reminder in a private conversation" : "Υπενθύμιση σε μια ιδιωτική συνομιλία", + "Someone mentioned you in a private conversation" : "Κάποιος σας ανέφερε σε μια ιδιωτική συνομιλία", + "Notification in a private conversation" : "Ειδοποίηση σε μια ιδιωτική συνομιλία", + "Reminder: You in {call}" : "Υπενθύμιση: Εσείς στο {call}", + "Reminder: {user} in {call}" : "Υπενθύμιση: {user} στο {call}", + "Reminder: Deleted user in {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης στο {call}", + "Reminder: {guest} (guest) in {call}" : "Υπενθύμιση: {guest} (επισκέπτης) στο {call}", + "Reminder: Guest in {call}" : "Υπενθύμιση: Επισκέπτης στο {call}", + "{user} reacted with {reaction}" : "Ο/Η {user} αντέδρασε με {reaction}", + "{user} reacted with {reaction} in {call}" : "Ο/Η {user} αντέδρασε με {reaction} στο {call}", + "Deleted user reacted with {reaction} in {call}" : "Διεγραμμένος χρήστης αντέδρασε με {reaction} στο {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "Ο/Η {guest} (επισκέπτης) αντέδρασε με {reaction} στο {call}", + "Guest reacted with {reaction} in {call}" : "Επισκέπτης αντέδρασε με {reaction} στο {call}", + "{user} in {call}" : "Ο/Η {user} είναι σε {call}", + "Deleted user in {call}" : "Διαγράφηκε ο χρήστης στην {call}", + "{guest} (guest) in {call}" : "{guest} (επισκέπτης) στην {call}", + "Guest in {call}" : "Επισκέπτης στην {call}", + "{user} sent you a private message" : "Ο/Η {user} σας έστειλε προσωπικό μήνυμα", + "{user} sent a message in conversation {call}" : "Ο/Η {user} έστειλε μήνυμα στην συζήτηση {call}", + "A deleted user sent a message in conversation {call}" : "Ένας διεγραμένος χρήστης έστειλε μήνυμα στην συνομιλία {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (επισκέπτης) έστειλε μήνυμα στην συζήτηση {call}", + "A guest sent a message in conversation {call}" : "Ένας επισκέπτης έστειλε μήνυμα σε μια συνομιλία {call}", + "{user} replied to your private message" : "Ο/Η {user} απάντησε στο προσωπικό μήνυμα σας", + "{user} replied to your message in conversation {call}" : "Ο/Η {user} απάντησε στο μήνυμά σας στην συζήτηση {call}", + "A deleted user replied to your message in conversation {call}" : "Ένας διεγραμένος χρήστης απάντησε στο μήνυμά σας στην συζήτηση {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (επισκέπτης) απάντησε στο μήνυμα σας στην συζήτηση {call}", + "A guest replied to your message in conversation {call}" : "Ένας επισκέπτης απάντησε στο μήνυμα σας στην συζήτηση {call}", + "Reminder: You in private conversation {call}" : "Υπενθύμιση: Εσείς σε ιδιωτική συνομιλία {call}", + "Reminder: A deleted user in private conversation {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης σε ιδιωτική συνομιλία {call}", + "Reminder: {user} in private conversation" : "Υπενθύμιση: {user} σε ιδιωτική συνομιλία", + "Reminder: You in conversation {call}" : "Υπενθύμιση: Εσείς σε συνομιλία {call}", + "Reminder: {user} in conversation {call}" : "Υπενθύμιση: {user} σε συνομιλία {call}", + "Reminder: A deleted user in conversation {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης σε συνομιλία {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Υπενθύμιση: {guest} (επισκέπτης) σε συνομιλία {call}", + "Reminder: A guest in conversation {call}" : "Υπενθύμιση: Επισκέπτης σε συνομιλία {call}", + "{user} reacted with {reaction} to your private message" : "Ο/Η {user} αντέδρασε με {reaction} στο προσωπικό σας μήνυμα", + "{user} reacted with {reaction} to your message in conversation {call}" : "Ο/Η {user} αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ένας διεγραμμένος χρήστης αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "Ο/Η {guest} (επισκέπτης) αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ένας επισκέπτης αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "{user} mentioned you in a private conversation" : "Ο/Η {user} σας ανέφερε σε μια ιδιωτική συνομιλία", + "{user} mentioned group {group} in conversation {call}" : "Ο/Η {user} ανέφερε την ομάδα {group} στη συνομιλία {call}", + "{user} mentioned team {team} in conversation {call}" : "Ο/Η {user} ανέφερε την ομάδα {team} στη συνομιλία {call}", + "{user} mentioned everyone in conversation {call}" : "Ο/Η {user} ανέφερε όλους στη συνομιλία {call}", + "{user} mentioned you in conversation {call}" : "Ο/Η {user} σας ανέφερε στη συνομιλία {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε την ομάδα {group} στη συνομιλία {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε την ομάδα {team} στη συνομιλία {call}", + "A deleted user mentioned everyone in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε όλους στη συνομιλία {call}", + "A deleted user mentioned you in conversation {call}" : "Ένας διεγραμμένος χρήστης σας ανέφερε στη συνομιλία {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε την ομάδα {group} στη συνομιλία {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε την ομάδα {team} στη συνομιλία {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε όλους στη συνομιλία {call}", + "{guest} (guest) mentioned you in conversation {call}" : "Ο/Η {guest} (επισκέπτης) σας ανέφερε στη συνομιλία {call}", + "A guest mentioned group {group} in conversation {call}" : "Ένας επισκέπτης ανέφερε την ομάδα {group} στη συνομιλία {call}", + "A guest mentioned team {team} in conversation {call}" : "Ένας επισκέπτης ανέφερε την ομάδα {team} στη συνομιλία {call}", + "A guest mentioned everyone in conversation {call}" : "Ένας επισκέπτης ανέφερε όλους στη συνομιλία {call}", + "A guest mentioned you in conversation {call}" : "Ένας επισκέπτης σας ανέφερε στη συνομιλία {call}", + "View message" : "Προβολή μηνύματος", + "Dismiss reminder" : "Αποδέσμευση υπενθύμισης", + "View chat" : "Εμφάνιση συνομιλίας", + "{user} invited you to a group conversation: {call}" : "Ο/Η {user} σας προσκάλεσε σε ομαδική κλήση: {call}", + "Join call" : "Συμμετοχή σε κλήση", + "Answer call" : "Απάντηση κλήσης", + "{user} would like to talk with you" : "Ο/Η {user} θα ήθελε να μιλήσει μαζί σας", + "Call back" : "Επιστροφή κλήσης", + "You missed a call from {user}" : "Αναπάντητη κλήση από τον {user}", + "Accept call" : "Αποδοχή κλήσης", + "Incoming phone call from {call}" : "Εισερχόμενη τηλεφωνική κλήση από {call}", + "You missed a phone call from {call}" : "Χάσατε μια τηλεφωνική κλήση από {call}", + "A group call has started in {call}" : "Ξεκίνησε ομαδική κλήση σε {call}", + "You missed a group call in {call}" : "Αναπάντητη από ομαδική κλήση {call}", + "{email} is requesting the password to access {file}" : "Αίτηση από το {email} για κωδικό πρόσβασης στο {file}", + "{email} tried to request the password to access {file}" : "Προσπάθεια αίτησης από το {email} για κωδικό πρόσβασης στο {file}", + "Someone is requesting the password to access {file}" : "Κάποιος αιτήθηκε κωδικό πρόσβασης για το {file}", + "Someone tried to request the password to access {file}" : "Κάποιος προσπαθεί να αιτηθεί κωδικό πρόσβασης για το {file}", + "Open settings" : "Άνοιγμα ρυθμίσεων", + "Hosted signaling server added" : "Προστέθηκε φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server is now configured and will be used." : "Ο φιλοξενούμενος διακομιστής σηματοδότησης έχει πλέον ρυθμιστεί και θα χρησιμοποιηθεί.", + "Hosted signaling server removed" : "Αφαιρέθηκε φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server was removed and will not be used anymore." : "Ο φιλοξενούμενος διακομιστής σηματοδότησης καταργήθηκε και δεν θα χρησιμοποιείται πλέον.", + "Hosted signaling server changed" : "Άλλαξε ο φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ο λογαριασμός του φιλοξενούμενου διακομιστή σηματοδότησης άλλαξε την κατάσταση από \"{oldstatus}\" σε \"{newstatus}\".", + "pending" : "εκκρεμεί", + "active" : "ενεργό", + "expired" : "έληξε", + "blocked" : "αποκλεισμένο", + "error" : "σφάλμα", + "The certificate of {host} expires in {days} days" : "Το πιστοποιητικό του {host} λήγει σε {days} ημέρες", + "The certificate of {host} expired" : "Το πιστοποιητικό του {host} έληξε", + "Contact via Talk" : "Επικοινωνία μέσω Talk", + "Open Talk" : "Άνοιγμα του Talk", + "Default" : "Προεπιλεγμένο", + "Presentation" : "Παρουσίαση", + "Conversations" : "Συνομιλίες", + "Messages in current conversation" : "Μηνύματα στην τρέχουσα συνομιλία", + "{user}" : "{user}", + "Messages" : "Μηνύματα", + "{user} in {conversation}" : "Υπάρχουν {user} στην συνομιλία {conversation}", + "Messages in other conversations" : "Μηνύματα σε άλλες συνομιλίες", + "One-to-one rooms always need to show the other users avatar" : "Τα δωμάτια ένα προς ένα πρέπει πάντα να εμφανίζουν το άβαταρ του άλλου χρήστη", + "Invalid emoji character" : "Μη έγκυρος χαρακτήρας emoji", + "Invalid background color" : "Μη έγκυρο χρώμα φόντου", + "Avatar image is not square" : "Η εικόνα του άβαταρ δεν είναι τετράγωνη", + "Room {number}" : "Δωμάτιο {number}", + "Other" : "Άλλο", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Η αίτηση για δοκιμή απέτυχε επειδή δεν ήταν δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Υπάρχει πρόβλημα με τον έλεγχο ταυτότητας αυτής της περίπτωσης. Ίσως δεν είναι προσβάσιμο από έξω για την επαλήθευση της διεύθυνσης URL του.", + "Something unexpected happened." : "Κάτι απροσδόκητο συνέβη.", + "The URL is invalid." : "Η διεύθυνση URL δεν είναι έγκυρη.", + "An HTTPS URL is required." : "Απαιτείται διεύθυνση URL HTTPS.", + "The email address is invalid." : "Η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη.", + "The language is invalid." : "Η γλώσσα δεν είναι έγκυρη.", + "The country is invalid." : "Η χώρα δεν είναι έγκυρη.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Υπάρχει πρόβλημα με το αίτημα της δοκιμής. Ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "Too many requests are send from your servers address. Please try again later." : "Στέλνονται πάρα πολλά αιτήματα από τη διεύθυνση των διακομιστών σας. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "There is already a trial registered for this Nextcloud instance." : "Υπάρχει ήδη μια δοκιμαστική καταχώριση για αυτήν την περίπτωση του Nextcloud.", + "Something unexpected happened. Please try again later." : "Κάτι απροσδόκητο συνέβη. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Η αίτηση για δοκιμή απέτυχε επειδή ο διακομιστής δοκιμής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Trial requested but failed to get account information. Please check back later." : "Ζητήθηκε δοκιμή αλλά απέτυχε να λάβει πληροφορίες λογαριασμού. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Υπάρχει πρόβλημα με τον έλεγχο ταυτότητας αυτού του αιτήματος. Ίσως δεν είναι προσβάσιμο από έξω για την επαλήθευση της διεύθυνσης URL του.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Η ανάκτησης πληροφοριών λογαριασμού απέτυχε επειδή ο δοκιμαστικός διακομιστής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Υπάρχει πρόβλημα με την ανάκτηση των πληροφοριών λογαριασμού. Παρακαλούμε ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "There is no such account registered." : "Δεν έχει καταχωρηθεί τέτοιος λογαριασμός.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Η ανάκτηση πληροφοριών λογαριασμού απέτυχε επειδή δεν είναι δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Deleting the hosted signaling server account failed. Please check back later." : "Η διαγραφή του λογαριασμού του φιλοξενούμενου διακομιστή σηματοδότησης απέτυχε. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Η διαγραφής του λογαριασμού απέτυχε επειδή ο δοκιμαστικός διακομιστής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with deleting the account. Please check your logs for further information." : "Υπάρχει πρόβλημα με τη διαγραφή του λογαριασμού. Παρακαλούμε ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "Too many requests are sent from your servers address. Please try again later." : "Πάρα πολλά αιτήματα αποστέλλονται από τη διεύθυνση των διακομιστών σας. Παρακαλώ προσπαθήστε ξανά αργότερα.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Η διαγραφής του λογαριασμού απέτυχε επειδή δεν είναι δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Note to self" : "Σημείωση προς εμένα", + "A place for your private notes, thoughts and ideas" : "Ένας χώρος για τις προσωπικές σας σημειώσεις, σκέψεις και ιδέες", + "Transcript is AI generated and may contain mistakes" : "Η μεταγραφή δημιουργήθηκε από ΤΝ και μπορεί να περιέχει λάθη", + "Summary is AI generated and may contain mistakes" : "Η σύνοψη δημιουργήθηκε από ΤΝ και μπορεί να περιέχει λάθη", + "Let's get started!" : "Ας ξεκινήσουμε!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Το Nextcloud Talk** είναι μια ασφαλής, αυτο-φιλοξενούμενη πλατφόρμα επικοινωνίας που ενσωματώνεται απρόσκοπτα με το οικοσύστημα Nextcloud.\n\n#### Βασικά Χαρακτηριστικά του Nextcloud Talk:\n\n* Συνομιλία και ανταλλαγή μηνυμάτων σε ιδιωτικές και ομαδικές συνομιλίες\n* Κλήσεις φωνής και βίντεο\n* Κοινή χρήση αρχείων και ενσωμάτωση με άλλες εφαρμογές Nextcloud\n* Προσαρμόσιμες ρυθμίσεις συνομιλιών, συντονισμός και έλεγχος απορρήτου\n* Web, επιφάνεια εργασίας και κινητό (iOS και Android)\n* Ιδιωτική & ασφαλής επικοινωνία\n\n Μάθετε περισσότερα στην [τεκμηρίωση χρήστη](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Καλώς ήρθατε στο Nextcloud Talk\n\nΤο Nextcloud Talk είναι μια ιδιωτική και ισχυρή εφαρμογή ανταλλαγής μηνυμάτων που ενσωματώνεται με το Nextcloud. Συνομιλήστε σε ιδιωτικές ή ομαδικές συνομιλίες, συνεργαστείτε μέσω κλήσεων φωνής και βίντεο, οργανώστε webinars και εκδηλώσεις, προσαρμόστε τις συνομιλίες σας και πολλά άλλα.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Μορφοποιήστε κείμενα για να δημιουργήσετε πλούσια μηνύματα\n\nΣτο Nextcloud Talk, μπορείτε να χρησιμοποιήσετε σύνταξη Markdown για να μορφοποιήσετε τα μηνύματά σας. Για παράδειγμα, εφαρμόστε **έντονη** ή *πλάγια* μορφοποίηση, ή `επισημάνετε κείμενα ως κώδικα`. Μπορείτε ακόμα να δημιουργήσετε πίνακες και να προσθέσετε επικεφαλίδες στο κείμενό σας.\n\nΧρειάζεται να διορθώσετε ένα ορθογραφικό λάθος ή να αλλάξετε τη μορφοποίηση; Επεξεργαστείτε το μήνυμά σας κάνοντας κλικ στο \"Επεξεργασία μηνύματος\" στο μενού μηνύματος.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Προσθέστε συνημμένα και συνδέσμους\n\nΕπισυνάψτε αρχεία από το Nextcloud Hub σας χρησιμοποιώντας το κουμπί \"+\". Μοιραστείτε στοιχεία από τα Αρχεία και διάφορες εφαρμογές Nextcloud. Ορισμένες εφαρμογές υποστηρίζουν ακόμα και διαδραστικά widgets, για παράδειγμα, η εφαρμογή Κείμενο.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Αφήστε τις συνομιλίες να ρέουν: αναφέρετε χρήστες, αντιδράστε σε μηνύματα και άλλα\n\nΜπορείτε να αναφέρετε όλους στη συνομιλία χρησιμοποιώντας %s ή να αναφέρετε συγκεκριμένους συμμετέχοντες πληκτρολογώντας \"@\" και επιλέγοντας το όνομά τους από τη λίστα.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Μπορείτε να απαντήσετε σε μηνύματα, να τα προωθήσετε σε άλλες συνομιλίες και άτομα, ή να αντιγράψετε το περιεχόμενο μηνύματος.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Κάντε περισσότερα με τον Έξυπνο Επιλογέα\n\nΑπλώς πληκτρολογήστε \"/\" ή μεταβείτε στο μενού \"+\" για να ανοίξετε τον Έξυπνο Επιλογέα όπου μπορείτε να επισυνάψετε διάφορο περιεχόμενο στα μηνύματά σας. Μπορείτε να ρυθμίσετε τον Έξυπνο Επιλογέα για να μπορείτε να προσθέτετε στοιχεία από εφαρμογές Nextcloud, GIFs, τοποθεσίες χαρτών, περιεχόμενο που δημιουργήθηκε από ΤΝ και πολλά άλλα.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Διαχείριση ρυθμίσεων συνομιλιών\n\nΣτο μενού συνομιλίας, μπορείτε να αποκτήσετε πρόσβαση σε διάφορες ρυθμίσεις για τη διαχείριση των συνομιλιών σας, όπως:\n* Επεξεργασία πληροφοριών συνομιλίας\n* Διαχείριση ειδοποιήσεων\n* Εφαρμογή πολυάριθμων κανόνων συντονισμού\n* Ρύθμιση πρόσβασης και ασφάλειας\n* Ενεργοποίηση bots\n* και πολλά άλλα!", + "Andorra" : "Ανδόρα", + "United Arab Emirates" : "Ηνωμένα Αραβικά Εμιράτα", + "Afghanistan" : "Αφγανιστάν", + "Antigua and Barbuda" : "Αντίκουα και Μπαρμπούντα", + "Anguilla" : "Anguilla", + "Albania" : "Αλβανία", + "Armenia" : "Αρμενία", + "Angola" : "Αγκόλα", + "Antarctica" : "Ανταρκτική", + "Argentina" : "Αργεντινή", + "American Samoa" : "Αμερικανική Σαμόα", + "Austria" : "Αυστρία", + "Australia" : "Αυστραλία", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Αζερμπαϊτζάν", + "Bosnia and Herzegovina" : "Βοσνία και Ερζεγοβίνη", + "Barbados" : "Μπαρμπάντος", + "Bangladesh" : "Μπαγκλαντές ", + "Belgium" : "Βέλγιο", + "Burkina Faso" : "Μπουρκίνα Φάσο", + "Bulgaria" : "Βουλγαρία", + "Bahrain" : "Μπαχρέιν", + "Burundi" : "Μπουρούντι", + "Benin" : "Μπενίν", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Βερμούδα", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Βολιβία, πολυεθνική πολιτεία της", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Βραζιλία", + "Bahamas" : "Μπαχάμες", + "Bhutan" : "Μπουτάν", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Μποτσουάνα", + "Belarus" : "Λευκορωσία", + "Belize" : "Μπελίσε", + "Canada" : "Καναδάς", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Κονγκό, Λαϊκή Δημοκρατία του ", + "Central African Republic" : "Δημοκρατία Κεντρικής Αφρικής", + "Congo" : "Κονγκό", + "Switzerland" : "Ελβετία", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Χιλή", + "Cameroon" : "Καμερούν", + "China" : "Κίνα", + "Colombia" : "Κολομβία", + "Costa Rica" : "Costa Rica", + "Cuba" : "Κούβα", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Νησί των Χριστουγέννων", + "Cyprus" : "Κύπρος", + "Czechia" : "Czechia", + "Germany" : "Γερμανία", + "Djibouti" : "Djibouti", + "Denmark" : "Δανία", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Αλγερία", + "Ecuador" : "Εκουαδόρ", + "Estonia" : "Εσθονία", + "Egypt" : "Αίγυπτος", + "Western Sahara" : "Δυτική Σαχάρα", + "Eritrea" : "Eritrea", + "Spain" : "Ισπανία", + "Ethiopia" : "Αιθιοπία", + "Finland" : "Φινλανδία", + "Fiji" : "Φίτζι", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Μικρονησία, Ομοσπονδιακά κράτη του", + "Faroe Islands" : "Νησιά Φερόε", + "France" : "Γαλλία", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Ηνωμένο Βασίλειο της Μεγάλης Βρετανίας και Βορείου Ιρλανδίας", + "Grenada" : "Γρενάδα", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Γκάμπια", + "Guinea" : "Γουϊνέα", + "Guadeloupe" : "Γουαδελούπη", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Ελλάδα", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Γουατεμάλα", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Κροατία", + "Haiti" : "Haiti", + "Hungary" : "Ουγγαρία", + "Indonesia" : "Ινδονησία", + "Ireland" : "Ιρλανδία", + "Israel" : "Ισραήλ", + "Isle of Man" : "Isle of Man", + "India" : "Ινδία", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Ιράκ", + "Iran, Islamic Republic of" : "Ιράν, Ισλαμική Δημοκρατία του", + "Iceland" : "Ισλανδία", + "Italy" : "Ιταλία", + "Jersey" : "Jersey", + "Jamaica" : "Τζαμάικα", + "Jordan" : "Ιορδανία", + "Japan" : "Ιαπωνία", + "Kenya" : "Κένυα", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Κορέα, Λαϊκή Δημοκρατία της", + "Korea, Republic of" : "Δημοκρατία της Κορέας", + "Kuwait" : "κουβέιτ", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Καζακστάν", + "Lao People's Democratic Republic" : "Λαϊκή Δημοκρατία του Λάος", + "Lebanon" : "Λίβανος", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Λιχτενστάιν", + "Sri Lanka" : "Σρι Λάνκα", + "Liberia" : "Λιβερία", + "Lesotho" : "Λεσότο", + "Lithuania" : "Λιθουανία", + "Luxembourg" : "Λουξεμβούργο", + "Latvia" : "Λετονία", + "Libya" : "Λιβύη", + "Morocco" : "Μαρόκο", + "Monaco" : "Μονακό", + "Moldova, Republic of" : "Δημοκρατία της Μολδαβίας", + "Montenegro" : "Μαυροβούνιο", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Μαδαγασκάρη", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Δημοκρατία της Βόρειας Μακεδονίας", + "Mali" : "Μάλι", + "Myanmar" : "Myanmar", + "Mongolia" : "Μογγολία", + "Macao" : "Μακάο", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Μαρτινίκα", + "Mauritania" : "Μαυριτανία", + "Montserrat" : "Montserrat", + "Malta" : "Μάλτα", + "Mauritius" : "Μαυρίκιος", + "Maldives" : "Μαλδίβες", + "Malawi" : "Μαλάουι", + "Mexico" : "Μεξικό", + "Malaysia" : "Μαλαισία", + "Mozambique" : "Μοζαμβίκη", + "Namibia" : "Ναμίμπια", + "New Caledonia" : "New Caledonia", + "Niger" : "Νίγηρα", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Νιγηρία", + "Nicaragua" : "Νικαράγουα", + "Netherlands" : "Ολλανδία", + "Norway" : "Νορβηγία", + "Nepal" : "Νεπάλ", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Νέα Ζηλανδία", + "Oman" : "Ομάν", + "Panama" : "Παναμάς", + "Peru" : "Περού", + "French Polynesia" : "Γαλλική Πολυνησία", + "Papua New Guinea" : "Παπούα Νέα Γουινέα", + "Philippines" : "Φιλιππίνες", + "Pakistan" : "Πακιστάν", + "Poland" : "Πολωνία", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Πόρτο Ρίκο", + "Palestine, State of" : "Παλαιστίνη, Κράτος της", + "Portugal" : "Πορτογαλία", + "Palau" : "Palau", + "Paraguay" : "Παραγουάη", + "Qatar" : "Κατάρ", + "Réunion" : "Réunion", + "Romania" : "Ρουμανία", + "Serbia" : "Σερβία", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Ρουάντα", + "Saudi Arabia" : "Σαουδική Αραβία", + "Solomon Islands" : "Νησιά Σολομώντα", + "Seychelles" : "Σεϊχέλες", + "Sudan" : "Σουδάν", + "Sweden" : "Σουηδία", + "Singapore" : "Σιγκαπούρη", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Σλοβενία", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Σλοβακία", + "Sierra Leone" : "Σιέρα Λεόνε", + "San Marino" : "Σαν Μαρίνο", + "Senegal" : "Σενεγάλη", + "Somalia" : "Σομαλία", + "Suriname" : "Σουρινάμ", + "South Sudan" : "Νότιο Σουδάν", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "Ελ Σαλβαδόρ", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "Γαλλικά νότια εδάφη", + "Togo" : "Togo", + "Thailand" : "Ταϊλάνδη", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Τουρκμενιστάν", + "Tunisia" : "Τυνησία", + "Tonga" : "Tonga", + "Turkey" : "Τουρκία", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Τουβάλου", + "Taiwan, Province of China" : "Ταϊβάν, επαρχία της Κίνας", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ουκρανία", + "Uganda" : "Ουγκάντα", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Ουρουγουάη", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Βενεζουέλα, Δημοκρατία της Βολιβίας της", + "Virgin Islands, British" : "Παρθένοι Νήσοι, Βρετανικοί", + "Virgin Islands, U.S." : "Παρθένοι Νήσοι, ΗΠΑ", + "Viet Nam" : "Βιετνάμ", + "Vanuatu" : "Βανουάτου", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Σαμόα", + "Yemen" : "Υεμένη", + "Mayotte" : "Mayotte", + "South Africa" : "Νότιος Αφρική", + "Zambia" : "Ζάμπια", + "Zimbabwe" : "Ζιμπάμπουε", + "Background blur" : "Θόλωση φόντου", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Δεν ήταν δυνατός ο έλεγχος υποστήριξης φόρτωσης WASM. Παρακαλώ ελέγξτε χειροκίνητα αν ο διακομιστής ιστού σας εξυπηρετεί αρχεία `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ο διακομιστής ιστού σας δεν είναι σωστά ρυθμισμένος για παράδοση αρχείων `.wasm`. Αυτό είναι τυπικά ένα ζήτημα με τη ρύθμιση του Nginx. Για τη θόλωση φόντου χρειάζεται μια προσαρμογή για να παραδίδει επίσης αρχεία `.wasm`. Συγκρίνετε τη ρύθμιση του Nginx σας με τη συνιστώμενη ρύθμιση στην τεκμηρίωσή μας.", + "Talk configuration values" : "Τιμές ρύθμισης του Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Η εξαναγκασμένη διάρκεια κλήσης υποστηρίζεται μόνο με system cron. Παρακαλώ ενεργοποιήστε το system cron ή αφαιρέστε τη ρύθμιση `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Οι μικρές τιμές `max_call_duration` (τώρα ρυθμισμένες σε %d) δεν είναι επιβλητές λόγω τεχνικών περιορισμών. Η εργασία παρασκηνίου εκτελείται μόνο κάθε 5 λεπτά, οπότε χρησιμοποιήστε με δική σας ευθύνη.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Συνιστάται ιδιαίτερα η ρύθμιση του \"memcache.locking\" όταν το Talk Federation είναι ενεργοποιημένο.", + "High-performance backend" : "Backend υψηλής απόδοσης", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Δεν έχει ρυθμιστεί backend υψηλής απόδοσης - Η λειτουργία του Nextcloud Talk χωρίς το backend υψηλής απόδοσης κλιμακώνεται μόνο για πολύ μικρές κλήσεις (μέγ. 2-3 συμμετέχοντες). Παρακαλώ ρυθμίστε το backend υψηλής απόδοσης για να διασφαλίσετε ότι οι κλήσεις με πολλαπλούς συμμετέχοντες λειτουργούν απρόσκοπτα.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Η λειτουργία \"conversation_cluster\" του backend υψηλής απόδοσης είναι παρωχημένη και δεν θα υποστηρίζεται πλέον στην επερχόμενη έκδοση. Το Backend υψηλής απόδοσης υποστηρίζει πραγματική συστοιχία σήμερα η οποία θα πρέπει να χρησιμοποιηθεί αντ' αυτού.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Ο ορισμός πολλαπλών backends υψηλής απόδοσης είναι παρωχημένος και δεν θα υποστηρίζεται πλέον στην επερχόμενη έκδοση. Αντ' αυτού, θα πρέπει να ρυθμιστεί ένας load-balancer μαζί με συστοιχία διακομιστών σηματοδότησης και να ρυθμιστεί στις ρυθμίσεις του Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Το αποθηκευμένο δημόσιο κλειδί για τον αλγόριθμο %1$s που χρησιμοποιείται δεν ταιριάζει με το αποθηκευμένο ιδιωτικό κλειδί. Εκτελέστε %2$s για να διορθώσετε το ζήτημα.", + "High-performance backend not configured correctly. Run %s for details." : "Το backend υψηλής απόδοσης δεν είναι σωστά ρυθμισμένο. Εκτελέστε %s για λεπτομέρειες.", + "High-performance backend not configured correctly" : "Το backend υψηλής απόδοσης δεν είναι σωστά ρυθμισμένο", + "Error: Cannot connect to server" : "Σφάλμα: Αδυναμία σύνδεσης στο διακομιστή", + "Error: Server did not respond with proper JSON" : "Σφάλμα: Ο διακομιστής ανταποκρίθηκε με λάθος JSON", + "Error: Certificate expired" : "Σφάλμα: Το πιστοποιητικό έληξε", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Σφάλμα: Οι χρόνοι συστήματος του διακομιστή Nextcloud και του διακομιστή backend υψηλής απόδοσης δεν είναι συγχρονισμένοι. Παρακαλώ βεβαιωθείτε ότι και οι δύο διακομιστές είναι συνδεδεμένοι σε έναν διακομιστή χρόνου ή συγχρονίστε χειροκίνητα τον χρόνο τους.", + "Could not get version" : "Δεν ήταν δυνατή η λήψη της έκδοσης", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Σφάλμα: Έκδοση που εκτελείται: {version}; Ο διακομιστής πρέπει να ενημερωθεί για να είναι συμβατός με αυτή την έκδοση του Talk", + "Error: Server responded with: {error}" : "Σφάλμα: Ο διακομιστής απάντησε με: {error}", + "Error: Unknown error occurred" : "Σφάλμα: Παρουσιάστηκε άγνωστο σφάλμα", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Προειδοποίηση: Έκδοση που εκτελείται: {version}; Ο διακομιστής δεν υποστηρίζει όλες τις λειτουργίες αυτής της έκδοσης Talk, λείπουν λειτουργίες: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Συνιστάται ιδιαίτερα η ρύθμιση μιας μνήμης cache όταν εκτελείτε το Nextcloud Talk με ένα backend υψηλής απόδοσης.", + "Client Push" : "Client Push", + "Recording backend" : "Backend εγγραφής", + "Using the recording backend requires a High-performance backend." : "Η χρήση του backend εγγραφής απαιτεί ένα backend υψηλής απόδοσης.", + "No recording backend configured" : "Δεν έχει ρυθμιστεί backend εγγραφής", + "SIP configuration" : "Διαμόρφωση SIP", + "Using the SIP functionality requires a High-performance backend." : "Η χρήση της λειτουργικότητας SIP απαιτεί ένα backend υψηλής απόδοσης.", + "No SIP backend configured" : "Δεν έχει ρυθμιστεί backend SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Μη έγκυρη ημερομηνία, η μορφή της ημερομηνίας πρέπει να είναι YYYY-MM-DD", + "Conversation not found" : "Η συζήτηση δεν βρέθηκε", + "Path is already shared with this conversation" : "Η διαδρομή είναι ήδη κοινόχρηστη με αυτή τη συνομιλία", + "Chat, video & audio-conferencing using WebRTC" : "Συνομιλία, βίντεο & διάσκεψη ήχου χρησιμοποιώντας WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Συνομιλία, βίντεο & διάσκεψη ήχου χρησιμοποιώντας WebRTC\n\n* 💬 **Συνομιλία** Το Nextcloud Talk έρχεται με μια απλή συνομιλία κειμένου, επιτρέποντάς σας να μοιραστείτε ή να μεταφορτώσετε αρχεία από την εφαρμογή Nextcloud Files ή την τοπική συσκευή σας και να αναφέρετε άλλους συμμετέχοντες.\n* 👥 **Ιδιωτικές, ομαδικές, δημόσιες και κωδικοπροστατευμένες κλήσεις!** Προσκαλέστε κάποιον, μια ολόκληρη ομάδα ή στείλτε έναν δημόσιο σύνδεσμο για πρόσκληση σε κλήση.\n* 🌐 **Federated συνομιλίες** Συνομιλήστε με άλλους χρήστες Nextcloud στους διακομιστές τους\n* 💻 **Κοινή χρήση οθόνης!** Μοιραστείτε την οθόνη σας με τους συμμετέχοντες της κλήσης σας.\n* 🚀 **Ενσωμάτωση με άλλες εφαρμογές Nextcloud** όπως Αρχεία, Ημερολόγιο, Κατάσταση χρήστη, Πίνακας ελέγχου, Flow, Χάρτες, Έξυπνος επιλογέας, Επαφές, Deck, και πολλά άλλα.\n* 🌉 **Συγχρονισμός με άλλες λύσεις συνομιλιών** Με το [Matterbridge](https://github.com/42wim/matterbridge/) να είναι ενσωματωμένο στο Talk, μπορείτε εύκολα να συγχρονίσετε πολλές άλλες λύσεις συνομιλιών με το Nextcloud Talk και αντίστροφα.", + "Leave call" : "Αποχώρηση από την κλήση", + "Navigating away from the page will leave the call in {conversation}" : "Η απομάκρυνση από την σελίδα θα αφήσει την κλήση σε {conversation}", + "Stay in call" : "Παραμονή σε κλήση", + "Error occurred when getting the conversation information" : "Παρουσιάστηκε σφάλμα κατά τη λήψη των πληροφοριών συνομιλίας", + "Discuss this file" : "Συζήτηση γι αυτό το αρχείο", + "Share this file with others to discuss it" : "Κοινή χρήση του αρχείου για σχολιασμό του", + "Share this file" : "Κοινή χρήση του αρχείου", + "Join conversation" : "Συμμετοχή στη συνομιλία", + "This conversation is password-protected." : "Αυτή η συνομιλία προστατεύεται με κωδικό.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Εντοπίσαμε πολλές αποτυχημένες προσπάθειες εισαγωγής κωδικού από τη διεύθυνση IP σας. Για αυτό το λόγο, η επόμενη προσπάθειά σας θα καθυστερήσει έως και 30 δευτερόλεπτα.", + "The password is wrong. Try again." : "Το συνθηματικό είναι λανθασμένο. Δοκιμάστε ξανά.", + "Password" : "Συνθηματικό", + "Submit" : "Υποβολή", + "Error requesting the password." : ".Σφάλμα αίτησης κωδικού πρόσβασης.", + "Request password" : "Αίτηση κωδικού πρόσβασης", + "This conversation has ended" : "Η συνομιλία τερματίστηκε", + "Error occurred when joining the conversation" : "Παρουσιάστηκε σφάλμα κατά τη συμμετοχή στη συνομιλία", + "Close Talk sidebar" : "Κλείσιμο πλαϊνής γραμμής Talk", + "Open Talk sidebar" : "Άνοιγμα πλαϊνής γραμμής Talk", + "Everyone" : "Όλοι", + "Users and moderators" : "Χρήστες και συντονιστές", + "Moderators only" : "Συντονιστές μόνο", + "Disable calls" : "Απενεργοποίηση κλήσεων", + "Save changes" : "Αποθήκευση αλλαγών", + "Saving …" : "Αποθηκεύεται …", + "Saved!" : "Αποθηκεύτηκε!", + "Limit to groups" : "Περιορισμός σε ομάδες", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Όταν επιλεγεί μία ομάδα, μόνο τα μέλη της μπορούν να συμμετέχουν.", + "Guests can still join public conversations." : "Οι επισκέπτες μπορούν ακόμη να συμμετέχουν σε συνομιλίες.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Οι χρήστες που δεν μπορούν πλέον να χρησιμοποιήσουν το Talk θα παραμείνουν στη λίστα συμμετεχόντων στις προηγούμενες συνομιλίες τους και τα μηνύματα συνομιλίας τους θα διατηρηθούν.", + "Limit using Talk" : "Περιορισμός χρήσης του Talk", + "Limit creating a public and group conversation" : "Περιορισμός δημιουργίας δημόσιων και ομαδικών συζητήσεων", + "Limit creating conversations" : "Περιορισμός δημιουργίας συζητήσεων", + "Limit starting a call" : "Περιορισμός έναρξης κλήσης", + "Limit starting calls" : "Περιορισμός έναρξης κλήσεων", + "When a call has started, everyone with access to the conversation can join the call." : "Όταν ξεκινήσει μια κλήση, οποιοσδήποτε με πρόσβαση στην συνομιλία μπορεί να συμμετέχει στην κλήση.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Τα ακόλουθα bots είναι εγκατεστημένα σε αυτόν τον διακομιστή. Στην τεκμηρίωση μπορείτε να βρείτε λεπτομέρειες για το πώς να {linkstart1}δημιουργήσετε το δικό σας bot{linkend} ή μια {linkstart2}λίστα bots{linkend} για ενεργοποίηση στο διακομιστή σας.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Δεν υπάρχουν bots εγκατεστημένα σε αυτόν τον διακομιστή. Στην τεκμηρίωση μπορείτε να βρείτε λεπτομέρειες για το πώς να {linkstart1}δημιουργήσετε το δικό σας bot{linkend} ή μια {linkstart2}λίστα bots{linkend} για ενεργοποίηση στο διακομιστή σας.", + "Description is not provided" : "Δεν παρέχεται περιγραφή", + "Locked for moderators" : "Κλειδωμένο για συντονιστές", + "Enabled" : "Ενεργοποιημένο", + "Disabled" : "Απενεργοποιημένο", + "Bots settings" : "Ρυθμίσεις bots", + "State" : "Κατάσταση", + "Name" : "Όνομα", + "Last error" : "Τελευταίο σφάλμα", + "Total errors count" : "Συνολικός αριθμός σφαλμάτων", + "Find more bots" : "Εύρεση περισσότερων bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Οι έμπιστοι διακομιστές μπορούν να ρυθμιστούν στη σελίδα {linkstart}ρυθμίσεων κοινής χρήσης{linkend}.", + "Beta" : "Δοκιμαστικό", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Οι federated συνομιλίες και κλήσεις λειτουργούν ήδη. Η διαχείριση συνημμένων θα έρθει σε μια μελλοντική έκδοση.", + "Enable Federation in Talk app" : "Ενεργοποίηση Federation στην εφαρμογή Talk", + "Permissions" : "Δικαιώματα", + "Allow users to be invited to federated conversations" : "Να επιτρέπεται στους χρήστες να προσκαλούνται σε federated συνομιλίες", + "Allow users to invite federated users into conversation" : "Να επιτρέπεται στους χρήστες να προσκαλούν federated χρήστες σε συνομιλία", + "Only allow to federate with trusted servers" : "Να επιτρέπεται η federation μόνο με έμπιστους διακομιστές", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Όταν επιλεγεί τουλάχιστον μία ομάδα, μόνο τα άτομα των καταχωρημένων ομάδων μπορούν να προσκαλούν federated χρήστες σε συνομιλίες.", + "Groups allowed to invite federated users" : "Ομάδες που επιτρέπεται να προσκαλούν federated χρήστες", + "Select groups …" : "Επιλογή ομάδων …", + "All messages" : "Όλα τα μηνύματα", + "@-mentions only" : "@-mentions μόνο", + "Off" : "Απενεργοποίηση ", + "General settings" : "Γενικές ρυθμίσεις", + "Default notification settings" : "Προεπιλεγμένες ρυθμίσεις ειδοποιήσεων", + "Default group notification" : "Προεπιλεγμένη ομάδα ειδοποιήσεων", + "Default group notification for new groups" : "Προεπιλεγμένη ομάδα ειδοποιήσεων για νέες ομάδες", + "Integration into other apps" : "Ενσωμάτωση σε άλλες εφαρμογές", + "Allow conversations on files" : "Να επιτρέπονται συζητήσεις σε αρχεία", + "Allow conversations on public shares for files" : "Να επιτρέπονται συνομιλίες για δημόσια διαμοιρασμένα αρχεία", + "End-to-end encrypted calls" : "Κρυπτογραφημένες κλήσεις end-to-end", + "Enable encryption" : "Ενεργοποίηση κρυπτογράφησης", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Οι κρυπτογραφημένες κλήσεις end-to-end με ρυθμισμένη γέφυρα SIP απαιτούν νεότερη έκδοση του backend υψηλής απόδοσης και της γέφυρας SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Οι εφαρμογές για κινητές συσκευές προς το παρόν δεν υποστηρίζουν κρυπτογραφημένες κλήσεις από άκρο σε άκρο.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Κάνοντας κλικ στο κουμπί πάνω από τις πληροφορίες στη φόρμα γίνεται αποστολή στους διακομιστές της Struktur AG. Μπορείτε να βρείτε περισσότερες πληροφορίες στη διεύθυνση {linkstart}spreed.eu{linkend}.", + "Pending" : "Εκκρεμεί", + "Error" : "Σφάλμα", + "Blocked" : "Αποκλεισμένος", + "Active" : "Ενεργό", + "Expired" : "Έληξε", + "Never" : "Ποτέ", + "The trial could not be requested. Please try again later." : "Δεν ήταν δυνατή η αίτηση της δοκιμής. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "The account could not be deleted. Please try again later." : "Δεν ήταν δυνατή η διαγραφή του λογαριασμού. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Hosted High-performance backend" : "Φιλοξενούμενο backend υψηλής απόδοσης", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Ο συνεργάτης μας Struktur AG παρέχει μια υπηρεσία όπου μπορεί να ζητηθεί ένας φιλοξενούμενος διακομιστής σηματοδότησης. Για αυτό πρέπει να συμπληρώσετε μόνο την παρακάτω φόρμα και το Nextcloud θα το ζητήσει. Μόλις ο διακομιστής ρυθμιστεί για εσάς, τα διαπιστευτήρια θα συμπληρωθούν αυτόματα. Αυτό θα αντικαταστήσει τις υπάρχουσες ρυθμίσεις διακομιστή σηματοδότησης.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Εάν ο λογαριασμός του backend υψηλής απόδοσής σας περιλαμβάνει λειτουργικότητα STUN και/ή TURN, οι ρυθμίσεις θα ενημερωθούν αναλόγως.", + "URL of this Nextcloud instance" : "Διεύθυνση URL αυτής της εγκατάστασης Nextcloud", + "Full name of the user requesting the trial" : "Πλήρες όνομα του χρήστη που αιτείται την δοκιμή", + "Email of the user" : "Το email του χρήστη", + "Language" : "Γλώσσα", + "Country" : "Χώρα", + "Request signaling server trial" : "Αίτηση δοκιμής διακομιστή σηματοδότησης", + "You can see the current status of your hosted signaling server in the following table." : "Μπορείτε να δείτε την τρέχουσα κατάσταση του φιλοξενούμενου διακομιστή σηματοδότησης σας στον παρακάτω πίνακα.", + "Status" : "Κατάσταση", + "Created at" : "Έχει δημιουργηθεί στις", + "Expires at" : "Λήγει στις", + "Limits" : "Όρια", + "STUN included" : "Ο STUN περιλαμβάνεται", + "Yes" : "Ναι", + "No" : "Όχι", + "TURN included" : "Ο TURN περιλαμβάνεται", + "Delete the signaling server account" : "Διαγραφή του λογαριασμού διακομιστή σηματοδότησης", + "_%n user_::_%n users_" : ["%n χρήστης","%n χρήστες"], + "Installed version: {version}" : "Εγκατεστημένη έκδοση: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Μπορείτε να εγκαταστήσετε το Matterbridge για να συνδέσετε το Nextcloud Talk με άλλες υπηρεσίες, επισκεφτείτε τη {linkstart1}σελίδα GitHub{linkend} τους για περισσότερες λεπτομέρειες. Η λήψη και η εγκατάσταση της εφαρμογής μπορεί να πάρει λίγο χρόνο. Σε περίπτωση που λήξει το χρονικό όριο, παρακαλώ εγκαταστήστε το χειροκίνητα από το {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Το δυαδικό Matterbridge έχει εσφαλμένα δικαιώματα. Παρακαλώ βεβαιωθείτε ότι το δυαδικό αρχείο Matterbridge ανήκει στον σωστό χρήστη και μπορεί να εκτελεστεί. Μπορεί να βρεθεί στο \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Το δυαδικό Matterbridge δεν βρέθηκε ή δεν ήταν δυνατό να εκτελεστεί.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Μπορείτε επίσης να ορίσετε τη διαδρομή προς το δυαδικό Matterbridge χειροκίνητα μέσω του config. Ανατρέξτε στην {linkstart} τεκμηρίωση ενσωμάτωσης Matterbridge {linkend} για περισσότερες πληροφορίες.", + "Downloading …" : "Γίνεται λήψη ...", + "Install Talk Matterbridge" : "Εγκατάσταση του Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Παρουσιάστηκε σφάλμα κατά την εγκατάσταση της εφαρμογής Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Παρουσιάστηκε σφάλμα κατά την εγκατάσταση της εφαρμογής Talk Matterbridge.Παρακαλούμε εγκαταστήστε την χειροκίνητα.", + "Failed to execute Matterbridge binary." : "Η εκτέλεση του αλγόριθμου του Matterbridge επέτυχε.", + "Matterbridge integration" : "Ενσωμάτωση του Matterbridge", + "Enable Matterbridge integration" : "Ενεργοποίηση της ενσωμάτωσης του Matterbridge", + "Status: Checking connection" : "Κατάσταση: Έλεγχος σύνδεσης", + "OK: Running version: {version}" : "OK: Τρέχουσα έκδοση: {version}", + "Error: Server seems to be a Signaling server" : "Σφάλμα: Ο διακομιστής φαίνεται να είναι διακομιστής σηματοδότησης", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Σφάλμα: Οι ώρες συστήματος του διακομιστή Nextcloud και του διακομιστή backend εγγραφής δεν είναι συγχρονισμένες. Βεβαιωθείτε ότι και οι δύο διακομιστές είναι συνδεδεμένοι σε έναν διακομιστή ώρας ή συγχρονίστε χειροκίνητα την ώρα τους.", + "Recording backend URL" : "URL καταγραφής backend", + "Validate SSL certificate" : "Επικυρώστε το πιστοποιητικό SSL", + "Delete this server" : "Διαγραφή διακομιστή", + "Test this server" : "Δοκιμή αυτού του διακομιστή", + "Disabled for all calls" : "Απενεργοποιημένο για όλες τις κλήσεις", + "Enabled for all calls" : "Ενεργοποιημένο για όλες τις κλήσεις", + "Configurable on conversation level by moderators" : "Προσαρμόσιμο σε επίπεδο συνομιλίας από τους συντονιστές", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Οι ρυθμίσεις PHP \"upload_max_filesize\" ή \"post_max_size\" θα επιτρέψουν τη μεταφόρτωση αρχείων μέχρι {maxUpload}.", + "Recording backend settings saved" : "Οι ρυθμίσεις του backend εγγραφής αποθηκεύτηκαν", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Οι συντονιστές θα επιτρέπεται να ενεργοποιούν τη συγκατάθεση σε επίπεδο συνομιλίας. Η συγκατάθεση για εγγραφή θα απαιτείται από κάθε συμμετέχοντα πριν από τη συμμετοχή σε κάθε κλήση σε αυτή τη συνομιλία.", + "The consent to be recorded will be required for each participant before joining every call." : "Η συγκατάθεση για εγγραφή θα απαιτείται από κάθε συμμετέχοντα πριν από τη συμμετοχή σε κάθε κλήση.", + "The consent to be recorded is not required." : "Δεν απαιτείται συγκατάθεση για εγγραφή.", + "Recording backend configuration is only possible with a High-performance backend." : "Η ρύθμιση του backend εγγραφής είναι δυνατή μόνο με ένα backend υψηλής απόδοσης.", + "Add a new recording backend server" : "Προσθήκη νέου διακομιστή backend εγγραφής", + "Shared secret" : "Διαμοιρασμένο μυστικό", + "Recording consent" : "Συγκατάθεση εγγραφής", + "Recording transcription" : "Μεταγραφή εγγραφής", + "Automatically transcribe call recordings with a transcription provider" : "Αυτόματη μεταγραφή εγγραφών κλήσεων με πάροχο μεταγραφής", + "Automatically summarize call recordings with transcription and summary providers" : "Αυτόματη σύνταξη σύνοψης εγγραφών κλήσεων με παρόχους μεταγραφής και σύνοψης", + "SIP configuration saved!" : "Η διαμόρφωση SIP αποθηκεύτηκε!", + "SIP configuration is only possible with a High-performance backend." : "Η διαμόρφωση SIP είναι δυνατή μόνο με ένα backend υψηλής απόδοσης.", + "Enable SIP Dial-out option" : "Ενεργοποίηση επιλογής SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Ο διακομιστής σηματοδότησης πρέπει να ενημερωθεί για να υποστηρίζει τη λειτουργία SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Να μην εμφανίζεται ο αριθμός καλούντος SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Ο ανώνυμος αριθμός θα πρέπει να εμφανίζεται ως \"άγνωστος\" ή \"αποκλεισμένος αριθμός\" στον παραλήπτη της κλήσης", + "Dial-out number" : "Αριθμός Dial-out", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Αριθμός μορφοποιημένος E164 που χρησιμοποιείται ως εφεδρικός αριθμός καλούντος για εξερχόμενες κλήσεις", + "Dial-out prefix" : "Πρόθεμα Dial-out", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Πρόθεμα για τον ρυθμισμένο αριθμό χρήστη για εξερχόμενες κλήσεις (προεπιλογή είναι `+`)", + "Restrict SIP configuration" : "Περιορίστε τη διαμόρφωση SIP", + "Enable SIP configuration" : "Ενεργοποίηση διαμόρφωσης SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Μόνο οι χρήστες των ακόλουθων ομάδων μπορούν να ενεργοποιήσουν το SIP σε συνομιλίες που εποπτεύουν.", + "Phone number (Country)" : "Αριθμός τηλεφώνου (Χώρα)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Αυτές οι πληροφορίες αποστέλλονται σε email πρόσκλησης καθώς και παρουσιάζονται στην πλευρική γραμμή σε όλους τους συμμετέχοντες.", + "Nextcloud base URL" : "Βασική διεύθυνση URL Nextcloud", + "Talk Backend URL" : "Διεύθυνση URL Backend Talk", + "WebSocket URL" : "Διεύθυνση URL WebSocket", + "Available features" : "Διαθέσιμες λειτουργίες", + "Error: Websocket connection failed" : "Σφάλμα: Αποτυχία σύνδεσης WebSocket", + "Error code" : "Σφάλμα κωδικού", + "Error message" : "Μήνυμα σφάλματος", + "Error: Websocket connection failed. Check browser console" : "Σφάλμα: Αποτυχία σύνδεσης WebSocket. Ελέγξτε την κονσόλα του προγράμματος περιήγησης", + "High-performance backend URL" : "Διεύθυνση URL backend υψηλής απόδοσης", + "Missing High-performance backend warning hidden" : "Η προειδοποίηση για το ελλειπόμενο backend υψηλής απόδοσης αποκρύφθηκε", + "High-performance backend settings saved" : "Οι ρυθμίσεις του backend υψηλής απόδοσης αποθηκεύτηκαν", + "Nextcloud Talk setup not complete" : "Η ρύθμιση του Nextcloud Talk δεν είναι πλήρης", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Παρακαλώ σημειώστε ότι σε κλήσεις με περισσότερους από 2 συμμετέχοντες χωρίς το backend υψηλής απόδοσης, οι συμμετέχοντες πιθανότατα θα αντιμετωπίσουν προβλήματα σύνδεσης και θα προκαλέσουν υψηλό φόρτο στις συμμετέχουσες συσκευές.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Εγκαταστήστε το backend υψηλής απόδοσης για να διασφαλίσετε ότι οι κλήσεις με πολλαπλούς συμμετέχοντες λειτουργούν απρόσκοπτα.", + "Nextcloud portal" : "Πύλη Nextcloud", + "Quick installation guide" : "Γρήγορος οδηγός εγκατάστασης", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Το backend υψηλής απόδοσης απαιτείται για κλήσεις και συνομιλίες με πολλαπλούς συμμετέχοντες. Χωρίς το backend, όλοι οι συμμετέχοντες πρέπει να μεταφορτώσουν το δικό τους βίντεο ατομικά για κάθε άλλο συμμετέχοντα, κάτι που πιθανότατα θα προκαλέσει προβλήματα σύνδεσης και υψηλό φόρτο στις συμμετέχουσες συσκευές.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Συνιστάται ιδιαίτερα η ρύθμιση μιας κατανεμημένης cache όταν χρησιμοποιείτε το Nextcloud Talk με ένα backend υψηλής απόδοσης.", + "Add High-performance backend server" : "Προσθήκη διακομιστή backend υψηλής απόδοσης", + "Warn about connectivity issues in calls with more than 2 participants" : "Προειδοποίηση για προβλήματα σύνδεσης σε κλήσεις με περισσότερους από 2 συμμετέχοντες", + "STUN server URL" : "URL διακομιστή STUN", + "The server address is invalid" : "Η διεύθυνση του διακομιστή είναι μη έγκυρη", + "STUN settings saved" : "Οι ρυθμίσεις STUN αποθηκεύτηκαν", + "STUN servers" : "Διακομιστές STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ένας διακομιστής STUN χρησιμοποιείται για τον καθορισμό της δημόσιας διεύθυνσης IP των συμμετεχόντων πίσω από ένα δρομολογητή.", + "Add a new STUN server" : "Προσθήκη νέου διακομιστή STUN", + "{schema} scheme must be used with a domain" : "Το σχήμα {schema} πρέπει να χρησιμοποιείται με έναν domain", + "{option1} and {option2}" : "{option1} και {option2}", + "{option} only" : "μόνο {option}", + "OK: Successful ICE candidates returned by the TURN server" : "ΟΚ: Επιτυχής ανταλλαγή πληροφοριών ICE από τον διακομιστή TURN", + "Error: No working ICE candidates returned by the TURN server" : "Σφάλμα: Μη επιτυχής ανταλλαγή πληροφοριών ICE από τον διακομιστή TURN", + "Testing whether the TURN server returns ICE candidates" : "Δοκιμή ασχέτως εάν ο διακομιστής TURN παρέχει πληροφορίες ICE", + "TURN server schemes" : "Σχήματα διακομιστή TURN", + "TURN server URL" : "URL διακομιστή TURN", + "TURN server secret" : "Μυστικό του διακομιστή TURN", + "TURN server protocols" : "Πρωτόκολλα διακομιστή TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ένας διακομιστής TURN χρησιμοποιείται για να διαμεσολαβεί την κίνηση από συμμετέχοντες πίσω από ένα firewall. Εάν μεμονωμένοι συμμετέχοντες δεν μπορούν να συνδεθούν με άλλους, πιθανότατα απαιτείται διακομιστής TURN. Δείτε {linkstart}αυτή την τεκμηρίωση{linkend} για οδηγίες ρύθμισης.", + "TURN settings saved" : "Οι ρυθμίσεις TURN αποθηκεύτηκαν", + "TURN servers" : "Διακομιστές TURN", + "Add a new TURN server" : "Προσθήκη νέου διακομιστή TURN", + "Failed" : "Απέτυχε", + "OK" : "OK", + "Checking …" : "Έλεγχος …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Απέτυχε: Το WebAssembly είναι απενεργοποιημένο ή δεν υποστηρίζεται σε αυτό το πρόγραμμα περιήγησης. Παρακαλώ ενεργοποιήστε το WebAssembly ή χρησιμοποιήστε ένα πρόγραμμα περιήγησης με υποστήριξη για να κάνετε τον έλεγχο.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Απέτυχε: Τα αρχεία \".wasm\" και \".tflite\" δεν επέστρεψαν σωστά από τον διακομιστή ιστού. Παρακαλώ ελέγξτε την ενότητα \"Απαιτήσεις συστήματος\" στην τεκμηρίωση Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Τα αρχεία \".wasm\" και \".tflite\" επέστρεψαν σωστά από τον διακομιστή ιστού.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Φαίνεται ότι η διαμόρφωση PHP και Apache δεν είναι συμβατή. Παρακαλώ σημειώστε ότι το PHP μπορεί να χρησιμοποιηθεί μόνο με την ενότητα MPM_PREFORK και το PHP-FPM μπορεί να χρησιμοποιηθεί μόνο με την ενότητα MPM_EVENT.", + "Web server setup checks" : "Έλεγχοι ρύθμισης διακομιστή ιστού", + "Files required for virtual background can be loaded" : "Τα αρχεία που απαιτούνται για εικονικό φόντο μπορούν να φορτωθούν", + "Federated user" : "Federated χρήστης", + "Assign participants to rooms" : "Ανάθεση συμμετεχόντων σε δωμάτια", + "Configure breakout rooms" : "Διαμόρφωση δωματίων ομάδων", + "Number of breakout rooms" : "Αριθμός δωματίων ομάδων", + "You can create from 1 to 20 breakout rooms." : "Μπορείτε να δημιουργήσετε από 1 έως 20 δωμάτια ομάδων.", + "Assignment method" : "Μέθοδος ανάθεσης", + "Automatically assign participants" : "Αυτόματη ανάθεση συμμετεχόντων", + "Manually assign participants" : "Χειροκίνητη ανάθεση συμμετεχόντων", + "Allow participants to choose" : "Να επιτρέπεται στους συμμετέχοντες να επιλέγουν", + "Create rooms" : "Δημιουργία δωματίων", + "Confirm" : "Επιβεβαίωση", + "Create breakout rooms" : "Δημιουργία δωματίων ομάδων", + "Reset" : "Επαναφορά", + "Delete breakout rooms" : "Διαγραφή δωματίων διάσπασης", + "Room {roomNumber}" : "Δωμάτιο {roomNumber}", + "Current breakout rooms and settings will be lost" : "Τα τρέχοντα δωμάτια διάσπασης και οι ρυθμίσεις θα χαθούν", + "Cancel" : "Ακύρωση", + "Unassigned participants" : "Μη αντιστοιχισμένοι συμμετέχοντες", + "Back" : "Πίσω", + "Assign" : "Αντιστοίχιση", + "Add participant \"{user}\"" : "Προσθήκη συμμετέχοντος \"{user}\"", + "Now" : "Τώρα", + "Invalid calendar selected" : "Επιλέχθηκε μη έγκυρο ημερολόγιο", + "Invalid start time selected" : "Επιλέχθηκε μη έγκυρη ώρα έναρξης", + "Invalid end time selected" : "Επιλέχθηκε μη έγκυρη ώρα λήξης", + "Unknown error occurred" : "Παρουσιάστηκε άγνωστο σφάλμα", + "Sending no invitations" : "Δεν αποστέλλονται προσκλήσεις", + "{participant0} will receive an invitation" : "Ο/Η {participant0} θα λάβει πρόσκληση", + "{participant0} and {participant1} will receive invitations" : "Ο/Η {participant0} και ο/η {participant1} θα λάβουν προσκλήσεις", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["Ο/Η {participant0}, ο/η {participant1} και %n ακόμα θα λάβουν προσκλήσεις","Ο/Η {participant0}, ο/η {participant1} και %n ακόμα θα λάβουν προσκλήσεις"], + "Invite {user}" : "Πρόσκληση {user}", + "Invite all users and emails in this conversation" : "Πρόσκληση όλων των χρηστών και email σε αυτή τη συνομιλία", + "Meeting created" : "Η συνάντηση δημιουργήθηκε", + "Upcoming meetings" : "Προσεχείς συναντήσεις", + "Loading …" : "Φόρτωση…", + "No upcoming meetings" : "Δεν υπάρχουν προσεχείς συναντήσεις", + "Schedule a meeting" : "Προγραμματισμός συνάντησης", + "Meeting title" : "Τίτλος συνάντησης", + "From" : "Από", + "To" : "Έως", + "Calendar" : "Ημερολόγιο", + "Attendees" : "Συμμετέχοντες", + "No other participants to send invitations to." : "Δεν υπάρχουν άλλοι συμμετέχοντες για αποστολή προσκλήσεων.", + "Add attendees" : "Προσθήκη συμμετεχόντων", + "Save" : "Αποθήκευση", + "Search participants" : "Αναζήτηση συμμετεχόντων", + "No results" : "Κανένα αποτέλεσμα", + "Done" : "Ολοκληρώθηκε", + "Disable live transcription" : "Απενεργοποίηση ζωντανής μεταγραφής", + "Raise hand" : "Σήκωμα χεριού", + "Raise hand (R)" : "Σήκωμα χεριού (R)", + "Lower hand" : "Κατέβασμα χεριού", + "Lower hand (R)" : "Κατέβασμα χεριού (R)", + "Exit full screen (F)" : "Έξοδος από πλήρη οθόνη (F)", + "Full screen (F)" : "Πλήρης οθόνη (F)", + "Speaker view" : "Προβολή ομιλητή", + "Grid view" : "Προβολή πλέγματος", + "Error when trying to load the available live transcription languages" : "Σφάλμα κατά τη φόρτωση των διαθέσιμων γλωσσών ζωντανής μεταγραφής", + "Failed to enable live transcription" : "Αποτυχία ενεργοποίησης ζωντανής μεταγραφής", + "Recording consent is required" : "Απαιτείται συγκατάθεση για εγγραφή", + "This conversation is read-only" : "Αυτή η συνομιλία είναι μόνο για ανάγνωση", + "Conversation not found or not joined" : "Η συνομιλία δεν βρέθηκε ή δεν έχετε συμμετάσχει", + "Lobby is still active and you're not a moderator" : "Η αίθουσα αναμπνής είναι ακόμα ενεργό και δεν είστε συντονιστής", + "Connection failed" : "Η σύνδεση απέτυχε", + "Reload" : "Επαναφόρτωση", + "{nickName} raised their hand." : "Ο {nickName} σήκωσε το χέρι του.", + "A participant raised their hand." : "Ένας συμμετέχων σήκωσε το χέρι του.", + "Collapse stripe" : "Σύμπτυξη λωρίδας", + "Expand stripe" : "Ανάπτυξη λωρίδας", + "Previous page of videos" : "Προηγούμενη σελίδα βίντεο", + "Next page of videos" : "Επόμενη σελίδα βίντεο", + "Connecting …" : "Σύνδεση ...", + "Calling …" : "Κλήση σε εξέλιξη …", + "Waiting for {user} to join the call" : "Αναμονή για είσοδο του/της {user} στην κλήση", + "Waiting for others to join the call …" : "Αναμονή για είσοδο υπόλοιπων στην κλήση …", + "You can invite others in the participant tab of the sidebar" : "Μπορείτε να προσκαλέσετε άλλους από την καρτέλα συμμετεχόντων της πλευρικής μπάρας", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Μπορείτε να προσκαλέσετε άλλους από την καρτέλα συμμετεχόντων της πλευρικής μπάρας ή να κοινοποιήσετε αυτόν τον σύνδεσμο για να προσκαλέσετε άλλους!", + "Share this link to invite others!" : "Κοινοποιήστε αυτόν τον σύνδεσμο για να προσκαλέσετε άλλους!", + "Copy link" : "Αντιγραφή συνδέσμου", + "You are not allowed to enable audio" : "Δεν επιτρέπεται η ενεργοποίηση του ήχου", + "No audio. Click to select device" : "Χωρίς ήχο. Κάντε κλικ για επιλογή συσκευής", + "Mute audio" : "Σίγαση ήχου", + "Mute audio (M)" : "Σίγαση ήχου (M)", + "Unmute audio" : "Ενεργοποίηση ήχου", + "Unmute audio (M)" : "Ενεργοποίηση ήχου (M)", + "None" : "Κανένα", + "Select a microphone" : "Επιλογή μικροφώνου", + "Select a speaker" : "Επιλογή ηχείου", + "Check devices" : "Έλεγχος συσκευών", + "Access to camera was denied" : "Δεν επιτρέπεται η πρόσβαση στην κάμερα", + "Error while accessing camera: It is likely in use by another program" : "Σφάλμα κατά την πρόσβαση στην κάμερα: Είναι πιθανό να χρησιμοποιείται από άλλο πρόγραμμα", + "Error while accessing camera" : "Σφάλμα κατά την πρόσβαση στην κάμερα", + "You have been muted by a moderator" : "Έχετε σιγαστεί από συντονιστή", + "Hide presenter video" : "Απόκρυψη βίντεο παρουσιαστή", + "You are not allowed to enable video" : "Δεν επιτρέπεται η ενεργοποίηση του βίντεο", + "No video. Click to select device" : "Χωρίς βίντεο. Κάντε κλικ για επιλογή συσκευής", + "Disable video" : "Απενεργοποίηση βίντεο", + "Disable video (V)" : "Απενεργοποίηση βίντεο (V)", + "Enable video" : "Ενεργοποίηση βίντεο", + "Enable video (V)" : "Ενεργοποίηση βίντεο (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο - Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο (V) - Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο. Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Select a video device" : "Επιλογή συσκευής βίντεο", + "Show presenter" : "Εμφάνιση παρουσιαστή", + "You" : "Εσείς", + "Mute" : "Σίγαση", + "Muted" : "Σιγασμένο", + "Show screen" : "Εμφάνιση οθόνης", + "Stop following" : "Διακοπή ακολούθησης", + "Connection could not be established …" : "Δεν ήταν δυνατή η δημιουργία σύνδεσης …", + "Connection was lost and could not be re-established …" : "Η σύνδεση χάθηκε και δεν ήταν δυνατή η επανασύνδεση …", + "Connection could not be established. Trying again …" : "Δεν ήταν δυνατή η δημιουργία σύνδεσης. Νέα προσπάθεια …", + "Connection lost. Trying to reconnect …" : "Χαμένη σύνδεση. Προσπάθεια επανασύνδεσης …", + "Connection problems …" : "Προβλήματα σύνδεσης …", + "Collapse" : "Σύμπτυξη", + "Expand" : "Επεκτείνω", + "You need to be logged in to upload files" : "Πρέπει είστε σε σύνδεση για ανέβασμα αρχείων", + "Drop your files to upload" : "Αποθέστε τα αρχεία σας για ανέβασμα", + "Conversation messages" : "Μηνύματα συνομιλίας", + "Scroll to bottom" : "Μετακινηθείτε προς τα κάτω", + "Post message" : "Δημοσίευση μηνύματος", + "Federated conversation" : "Ομοσπονδιακή συνομιλία", + "Public conversation" : "Δημόσια συνομιλία", + "Favorite" : "Προσθήκη στα αγαπημένα", + "Banned users" : "Αποκλεισμένοι χρήστες", + "Manage the list of banned users in this conversation." : "Διαχείριση της λίστας αποκλεισμένων χρηστών σε αυτή τη συνομιλία.", + "Manage bans" : "Διαχείριση αποκλεισμών", + "No banned users" : "Δεν υπάρχουν αποκλεισμένοι χρήστες", + "Banned by:" : "Αποκλείστηκε από:", + "Date:" : "Ημερομηνία:", + "Note:" : "Σημείωση:", + "Hide details" : "Απόκρυψη λεπτομερειών", + "Show details" : "Εμφάνιση λεπτομερειών", + "Unban" : "Απο-αποκλεισμός", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Μπορείτε να αλλάξετε τον τίτλο και την περιγραφή στο {linkstart}Ημερολόγιο ↗{linkend}.", + "Error while updating conversation name" : "Σφάλμα κατά την ενημέρωση του ονόματος συνομιλίας", + "Error while updating conversation description" : "Σφάλμα κατά την ενημέρωση της περιγραφής συνομιλίας", + "Enter a name for this conversation" : "Εισάγετε ένα όνομα για αυτή τη συνομιλία", + "Edit conversation name" : "Επεξεργασία ονόματος συνομιλίας", + "Edit conversation description" : "Επεξεργασία περιγραφής συνομιλίας", + "Enter a description for this conversation" : "Πληκτρολογήστε μια περιγραφή για αυτήν τη συνομιλία", + "Picture" : "Εικόνα", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Τα ακόλουθα bots μπορούν να ενεργοποιηθούν σε αυτή τη συνομιλία. Επικοινωνήστε με τον διαχειριστή σας για να εγκαταστήσετε περισσότερα bots σε αυτόν τον server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Δεν υπάρχουν εγκατεστημένα bots σε αυτόν τον server. Επικοινωνήστε με τον διαχειριστή σας για να εγκαταστήσετε bots σε αυτόν τον server.", + "Disable" : "Απενεργοποίηση", + "Enable" : "Ενεργοποίηση", + "Breakout rooms" : "Δωμάτια διάσπασης", + "Manage breakout rooms" : "Διαχείριση δωματίων διάσπασης", + "Set up breakout rooms for this conversation" : "Ρύθμιση δωματίων διάσπασης για αυτή τη συνομιλία", + "Please select a valid PNG or JPG file" : "Παρακαλώ επιλέξτε ένα έγκυρο αρχείο PNG ή JPG", + "Choose your conversation picture" : "Επιλέξτε την εικόνα συνομιλίας σας", + "Choose" : "Επιλογή", + "Error setting conversation picture" : "Σφάλμα κατά την ρύθμιση της εικόνας συνομιλίας", + "Could not set the conversation picture: {error}" : "Δεν ήταν δυνατή η ρύθμιση της εικόνας συνομιλίας: {error}", + "Error cropping conversation picture" : "Σφάλμα κατά την περικοπή της εικόνας συνομιλίας", + "Error removing conversation picture" : "Σφάλμα κατά την αφαίρεση της εικόνας συνομιλίας", + "Set emoji as conversation picture" : "Ορισμός emoji ως εικόνας συνομιλίας", + "Set background color for conversation picture" : "Ορισμός χρώματος φόντου για εικόνα συνομιλίας", + "Upload conversation picture" : "Μεταφόρτωση εικόνας συνομιλίας", + "Choose conversation picture from files" : "Επιλογή εικόνας συνομιλίας από αρχεία", + "Remove conversation picture" : "Αφαίρεση εικόνας συνομιλίας", + "The file must be a PNG or JPG" : "Το αρχείο πρέπει να είναι τύπου PNG ή JPG", + "Set picture" : "Ορισμός εικόνας", + "Default permissions modified for {conversationName}" : "Τα προεπιλεγμένα δικαιώματα τροποποιήθηκαν για {conversationName}", + "Could not modify default permissions for {conversationName}" : "Δεν ήταν δυνατή η τροποποίηση των προεπιλεγμένων δικαιωμάτων για {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Επεξεργαστείτε τα προεπιλεγμένα δικαιώματα για τους συμμετέχοντες σε αυτή τη συνομιλία. Αυτές οι ρυθμίσεις δεν επηρεάζουν τους συντονιστές.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Κάθε φορά που τροποποιούνται τα δικαιώματα σε αυτή την ενότητα, τα προσαρμοσμένα δικαιώματα που είχαν ανατεθεί προηγουμένως σε μεμονωμένους συμμετέχοντες θα χαθούν.", + "All permissions" : "Όλα τα δικαιώματα", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Οι συμμετέχοντες έχουν δικαιώματα για έναρξη κλήσης, συμμετοχή σε κλήση, ενεργοποίηση ήχου και βίντεο και κοινή χρήση οθόνης.", + "Restricted" : "Περιορισμένο", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Οι συμμετέχοντες μπορούν να συμμετέχουν σε κλήσεις, αλλά δεν μπορούν να ενεργοποιήσουν τον ήχο ή το βίντεο ούτε να μοιραστούν την οθόνη έως ότου ένας συντονιστής τους εκχωρήσει αυτά τα δικαιώματα.", + "Advanced permissions" : "Προσαρμοσμένα δικαιώματα", + "Edit permissions" : "Επεξεργασία δικαιωμάτων", + "Conversation settings" : "Ρυθμίσεις συνομιλίας", + "Basic Info" : "Βασικές Πληροφορίες", + "Personal" : "Προσωπικός", + "Moderation" : "Συντονισμός", + "Setup overview" : "Επισκόπηση ρύθμισης", + "Live transcription" : "Ζωντανή μεταγραφή", + "Enable live transcription" : "Ενεργοποίηση ζωντανής μεταγραφής", + "Breakout Rooms" : "Δωμάτια Διάσπασης", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Επικίνδυνη ζώνη", + "Archive conversation" : "Αρχειοθέτηση συνομιλίας", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Οι αρχειοθετημένες συνομιλίες είναι κρυφές από την λίστα συνομιλιών από προεπιλογή. Ωστόσο, θα εμφανίζονται όταν αναζητάτε το όνομα της συνομιλίας ή προσπελάσετε μια λίστα αρχειοθετημένων συνομιλιών.", + "Do you really want to leave \"{displayName}\"?" : "Θέλετε πραγματικά να εγκαταλείψετε τη συνομιλία \"{displayName}\";", + "You can archive this conversation instead." : "Μπορείτε να αρχειοθετήσετε αυτή τη συνομιλία αντί αυτού.", + "Leave conversation" : "Εγκατάλειψη συνομιλίας", + "You need to promote a new moderator before you can leave the conversation" : "Πρέπει να προβιβάσετε έναν νέο συντονιστή πριν μπορέσετε να εγκαταλείψετε τη συνομιλία", + "Delete conversation" : "Διαγραφή συνομιλίας", + "Do you really want to delete \"{displayName}\"?" : "Θέλετε σίγουρα να διαγράψετε το \"{displayName}\";", + "Error while deleting conversation" : "Σφάλμα κατά τη διαγραφή της συνομιλίας", + "Delete all chat messages" : "Διαγραφή όλων των μηνυμάτων συνομιλίας", + "Do you really want to delete all messages in \"{displayName}\"?" : "Θέλετε πραγματικά να διαγράψετε όλα τα μηνύματα στο \"{displayName}\";", + "Error while clearing chat history" : "Σφάλμα κατά την εκκαθάριση του ιστορικού συνομιλιών", + "Be careful, these actions cannot be undone." : "Προσέξτε, αυτές οι ενέργειες δεν μπορούν να αναιρεθούν.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Μόλις εγκαταλείψετε μια συνομιλία, για να επανενταχθείτε σε μια κλειστή συνομιλία, απαιτείται πρόσκληση. Μια ανοιχτή συνομιλία μπορεί να επανενταχθεί ανά πάσα στιγμή.", + "Permanently delete this conversation." : "Οριστική διαγραφή αυτής της συνομιλίας.", + "Delete chat messages" : "Διαγραφή μηνυμάτων συνομιλίας", + "Permanently delete all the messages in this conversation." : "Οριστική διαγραφή όλων των μηνυμάτων σε αυτήν τη συνομιλία.", + "_%n hour_::_%n hours_" : ["%n ώρα","%n ώρες"], + "_%n day_::_%n days_" : ["%n ημέρα","%n ημέρες"], + "_%n week_::_%n weeks_" : ["%n εβδομάδα","%n εβδομάδες"], + "Custom expiration time" : "Προσαρμοσμένος χρόνος λήξης", + "Message expiration disabled" : "Η λήξη μηνυμάτων απενεργοποιήθηκε", + "Message expiration set: {duration}" : "Ορίστηκε λήξη μηνυμάτων: {duration}", + "Error when trying to set message expiration" : "Σφάλμα κατά την προσπάθεια ορισμού λήξης μηνυμάτων", + "Message expiration" : "Λήξη μηνυμάτων", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Τα μηνύματα συνομιλίας μπορούν να λήξουν μετά από συγκεκριμένο χρόνο. Σημείωση: Τα αρχεία που κοινοποιούνται στη συνομιλία δεν θα διαγραφούν για τον κάτοχο, αλλά δεν θα κοινοποιούνται πλέον στη συνομιλία.", + "Set message expiration" : "Ορισμός λήξης μηνυμάτων", + "Current message expiration" : "Τρέχουσα λήξη μηνυμάτων", + "Password copied to clipboard" : "Το συνθηματικό αντιγράφηκε στο πρόχειρο", + "Password could not be copied" : "Το συνθηματικό δεν μπορούσε να αντιγραφεί", + "Guest access" : "Πρόσβαση επισκεπτών", + "Breakout rooms are not allowed in public conversations." : "Τα δωμάτια διάσπασης δεν επιτρέπονται σε δημόσιες συνομιλίες.", + "Allow guests to join this conversation via link" : "Να επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία μέσω συνδέσμου", + "Password protection" : "Προστασία συνθηματικού", + "This conversation is password-protected. Guests need password to join" : "Αυτή η συνομιλία προστατεύεται με συνθηματικό. Οι επισκέπτες χρειάζονται συνθηματικό για να συμμετάσχουν", + "Password protection is needed for public conversations" : "Απαιτείται προστασία συνθηματικού για δημόσιες συνομιλίες", + "Set a password" : "Ορισμός συνθηματικού", + "Change password" : "Αλλαγή συνθηματικού", + "Enter new password" : "Εισαγωγή νέου συνθηματικού", + "Save password" : "Αποθήκευση συνθηματικού", + "Copy password" : "Αντιγραφή συνθηματικού", + "Guests are allowed to join this conversation via link" : "Επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία μέσω συνδέσμου", + "Guests are not allowed to join this conversation" : "Δεν επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία", + "Resend invitations" : "Επαναποστολή προσκλήσεων", + "This conversation is open to both registered users and users created with the Guests app" : "Αυτή η συνομιλία είναι ανοιχτή τόσο σε εγγεγραμμένους χρήστες όσο και σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "This conversation is open to registered users" : "Αυτή η συνομιλία είναι ανοιχτή σε εγγεγραμμένους χρήστες", + "This conversation is limited to the current participants" : "Αυτή η συνομιλία περιορίζεται στους τρέχοντες συμμετέχοντες", + "You opened the conversation to both registered users and users created with the Guests app" : "Ανοίξατε τη συνομιλία τόσο σε εγγεγραμμένους χρήστες όσο και σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "Error occurred when opening or limiting the conversation" : "Συνέβη σφάλμα κατά το άνοιγμα ή τον περιορισμό της συνομιλίας", + "Open conversation to registered users, showing it in search results" : "Άνοιγμα συνομιλίας σε εγγεγραμμένους χρήστες, εμφάνισή της στα αποτελέσματα αναζήτησης", + "Also open to users created with the Guests app" : "Επίσης ανοιχτή σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "Open conversation" : "Άνοιγμα συνομιλίας", + "Set language spoken in calls" : "Ορισμός γλώσσας που ομιλείται στις κλήσεις", + "Languages could not be loaded" : "Οι γλώσσες δεν μπόρεσαν να φορτωθούν", + "Loading languages …" : "Φόρτωση γλωσσών …", + "Invalid language" : "Μη έγκυρη γλώσσα", + "Default language (English)" : "Προεπιλεγμένη γλώσσα (Αγγλικά)", + "Default live transcription language set" : "Ορίστηκε προεπιλεγμένη γλώσσα ζωντανής μεταγραφής", + "Live transcription language set: {languageName}" : "Ορίστηκε γλώσσα ζωντανής μεταγραφής: {languageName}", + "Error when trying to set live transcription language" : "Σφάλμα κατά την προσπάθεια ορισμού γλώσσας ζωντανής μεταγραφής", + "Start time: {date}" : "Ώρα έναρξης: {date}", + "Start time has been updated" : "Η ώρα έναρξης ενημερώθηκε", + "Error occurred while updating start time" : "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ώρας έναρξης", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Η ενεργοποίηση της αίθουσας αναμονής θα απομακρύνει τους μη συντονιστές από την τρέχουσα κλήση.", + "Enable lobby, restricting the conversation to moderators" : "Ενεργοποίηση αιθουσας αναμονής, περιορίζοντας τη συνομιλία σε συντονιστές", + "Meeting start time" : "Ώρα έναρξης της συνάντησης", + "Start time (optional)" : "Ώρα έναρξης (προαιρετικό)", + "Import email participants" : "Εισαγωγή συμμετεχόντων μέσω email", + "You can import a list of email participants from a CSV file." : "Μπορείτε να εισάγετε μια λίστα συμμετεχόντων μέσω email από ένα αρχείο CSV.", + "Poll drafts" : "Προσχέδια δημοσκοτήσεων", + "Browse poll drafts" : "Περιήγηση στα προσχέδια δημοσκοτήσεων", + "Error occurred when locking the conversation" : "Παρουσιάστηκε σφάλμα κατά το κλείδωμα της συνομιλίας", + "Error occurred when unlocking the conversation" : "Παρουσιάστηκε σφάλμα κατά το ξεκλείδωμα της συνομιλίας", + "Lock conversation" : "Κλειδώστε τη συνομιλία", + "This will also terminate the ongoing call." : "Αυτό θα τερματίσει επίσης την τρέχουσα κλήση.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Κλειδώστε τη συνομιλία για να αποτρέψετε την ανάρτηση μηνυμάτων ή την έναρξη κλήσεων", + "Edit" : "Επεξεργασία", + "More information" : "Περισσότερες πληροφορίες", + "Delete" : "Διαγραφή", + "Add new bridged channel to current conversation" : "Προσθέστε νέο γεφυρωμένο κανάλι στην τρέχουσα συνομιλία", + "unknown state" : "άγνωστη κατάσταση", + "running" : "εκτελείται", + "not running, check Matterbridge log" : "δεν εκτελείται, ελέγξτε το αρχείο καταγραφής Matterbridge", + "not running" : "δεν εκτελείται", + "Bridge saved" : "Η σύνδεση αποθηκεύτηκε", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Μπορείτε να συνδέσετε κανάλια από διάφορα άλλα συστήματα άμεσων μηνυμάτων με το Matterbridge.", + "More info on Matterbridge" : "Περισσότερες πληροφορίες για το Matterbridge", + "Messaging systems" : "Συστήματα ανταλλαγής μηνυμάτων", + "Enable bridge" : "Ενεργοποίηση γέφυρας", + "Show Matterbridge log" : "Εμφάνιση αρχείου καταγραφής Matterbridge", + "Log content" : "Περιεχόμενα αρχείου καταγραφής", + "Only moderators are allowed to mention @all" : "Μόνο οι συντονιστές επιτρέπεται να αναφέρονται σε @all", + "All participants are allowed to mention @all" : "Όλοι οι συμμετέχοντες επιτρέπεται να αναφέρονται σε @all", + "Participants are now allowed to mention @all." : "Οι συμμετέχοντες επιτρέπεται πλέον να αναφέρονται σε @all.", + "Mentioning @all has been limited to moderators." : "Η αναφορά σε @all περιορίστηκε στους συντονιστές.", + "Allow participants to mention @all" : "Να επιτρέπεται στους συμμετέχοντες η αναφορά σε @all", + "Mention permissions" : "Δικαιώματα αναφοράς", + "Notifications" : "Ειδοποιήσεις", + "Notify about calls in this conversation" : "Να ειδοποιούμαι για κλήσεις σε αυτήν τη συνομιλία", + "Important conversation" : "Σημαντική συνομιλία", + "\"Do not disturb\" user status is ignored for important conversations" : "Η κατάσταση χρήστη \"Μην ενοχλείτε\" αγνοείται για σημαντικές συνομιλίες", + "Sensitive conversation" : "Ευαίσθητη συνομιλία", + "Message preview will be disabled in conversation list and notifications" : "Η προεπισκόπηση μηνυμάτων θα απενεργοποιηθεί στη λίστα συνομιλιών και στις ειδοποιήσεις", + "Recording consent is required for calls in this conversation" : "Απαιτείται συγκατάθεση εγγραφής για τις κλήσεις σε αυτή τη συνομιλία", + "Recording consent is not required for calls in this conversation" : "Δεν απαιτείται συγκατάθεση εγγραφής για τις κλήσεις σε αυτή τη συνομιλία", + "Recording consent requirement was updated" : "Η απαίτηση συγκατάθεσης εγγραφής ενημερώθηκε", + "Error occurred while updating recording consent" : "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της συγκατάθεσης εγγραφής", + "Recording Consent" : "Συγκατάθεση Εγγραφής", + "Recording consent cannot be changed once a call or breakout session has started." : "Η συγκατάθεση εγγραφής δεν μπορεί να αλλάξει μόλις ξεκινήσει μια κλήση ή συνεδρία διάσπασης.", + "Require recording consent before joining call in this conversation" : "Απαιτείται συγκατάθεση εγγραφής πριν από τη συμμετοχή σε κλήση σε αυτή τη συνομιλία", + "Recording consent is required for all calls" : "Η συγκατάθεση εγγραφής απαιτείται για όλες τις κλήσεις", + "SIP dial-in is now possible without PIN requirement" : "Το SIP dial-in είναι πλέον δυνατό χωρίς απαίτηση PIN", + "SIP dial-in is now enabled" : "Το SIP dial-in είναι πλέον ενεργοποιημένο", + "SIP dial-in is now disabled" : "Το SIP dial-in είναι πλέον απενεργοποιημένο", + "Error occurred when enabling SIP dial-in" : "Παρουσιάστηκε σφάλμα κατά την ενεργοποίηση του SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Παρουσιάστηκε σφάλμα κατά την απενεργοποίηση του SIP dial-in", + "Phone and SIP dial-in" : "Τηλεφωνική και SIP σύνδεση", + "Enable phone and SIP dial-in" : "Ενεργοποίηση τηλεφωνικής και SIP σύνδεσης", + "Allow to dial-in without a PIN" : "Να επιτρέπεται η σύνδεση χωρίς PIN", + "Ongoing" : "Σε εξέλιξη", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n άτομο δέχτηκε","%n άτομα δέχτηκαν"], + "_%n person declined_::_%n people declined_" : ["%n άτομο απέρριψε","%n άτομα απέρριψαν"], + "_and %n other attachment_::_and %n other attachments_" : ["και %n άλλο συνημμένο","και %n άλλα συνημμένα"], + "With {displayName}" : "Με {displayName}", + "In {conversation}" : "Στη συνομιλία {conversation}", + "View attachment" : "Προβολή συνημμένου", + "Join" : "Συμμετοχή", + "View conversation" : "Προβολή συνομιλίας", + "View event on Calendar" : "Προβολή συμβάντος στο Ημερολόγιο", + "Error while creating the conversation" : "Σφάλμα κατά τη δημιουργία συνομιλίας", + "Hello, {displayName}" : "Γεια σας, {displayName}", + "Start meeting now" : "Έναρξη συνεδρίας τώρα", + "Give your meeting a title" : "Δώστε έναν τίτλο στη συνεδρία σας", + "Create and copy link" : "Δημιουργία και αντιγραφή συνδέσμου", + "Create a new conversation" : "Δημιουργία νέας συνομιλίας", + "Join open conversations" : "Συμμετοχή σε ανοικτές συνομιλίες", + "Call a phone number" : "Κλήση σε αριθμό τηλεφώνου", + "Scroll backward" : "Κύλιση προς τα πίσω", + "Scroll forward" : "Κύλιση προς τα εμπρός", + "Schedule meetings" : "Προγραμματισμός συναντήσεων", + "You don't have any upcoming meetings" : "Δεν έχετε επερχόμενες συναντήσεις", + "Open calendar" : "Άνοιγμα ημερολογίου", + "Unread mentions" : "Αδιάβαστες αναφορές", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Τα μηνύματα όπου αναφερθήκατε θα εμφανίζονται εδώ. Μπορείτε να αναφέρετε άτομα πληκτρολογώντας @ ακολουθούμενο από το όνομά τους", + "Upcoming reminders" : "Επερχόμενες υπενθυμίσεις", + "Message reminders" : "Υπενθυμίσεις μηνυμάτων", + "Set a reminder on a message to be notified" : "Ορίστε μια υπενθύμιση σε ένα μήνυμα για να ειδοποιηθείτε", + "Start a group conversation" : "Έναρξη ομαδικής συνομιλίας", + "Create conversation" : "Δημιουργία συνομιλίας", + "Enter your name" : "Προσθέστε το όνομά σας", + "Submit name and join" : "Υποβολή ονόματος και συμμετοχή", + "Do you already have an account?" : "Έχετε ήδη λογαριασμό;", + "Log in" : "Είσοδος", + "Error while verifying uploaded file" : "Σφάλμα κατά την επαλήθευση του ανεβασμένου αρχείου", + "Uploaded file is verified" : "Το ανεβασμένο αρχείο επαληθεύτηκε", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Η μορφή περιεχομένου είναι τιμές διαχωρισμένες με κόμμα (CSV):
- Απαιτείται γραμμή κεφαλίδας και πρέπει να ταιριάζει με \"name\",\"email\" ή μόνο \"email\"
- Μία εγγραφή ανά γραμμή (π.χ. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Οι συμμετέχοντες προστέθηκαν με επιτυχία", + "Error while adding participants" : "Σφάλμα κατά την προσθήκη συμμετεχόντων", + "Import a file" : "Εισαγωγή αρχείου", + "Browse" : "Περιήγηση", + "Verifying uploaded file …" : "Επαλήθευση ανεβασμένου αρχείου …", + "This might take a moment" : "Αυτό μπορεί να πάρει λίγο χρόνο", + "Send invitations" : "Αποστολή προσκλήσεων", + "_%n invalid email_::_%n invalid emails_" : ["%n μη έγκυρο email","%n μη έγκυρα emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email έχει ήδη εισαχθεί ή είναι διπλότυπο","%n emails έχουν ήδη εισαχθεί ή είναι διπλότυπα"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n πρόσκληση μπορεί να αποσταλεί","%n προσκλήσεις μπορούν να αποσταλούν"], + "An error occurred while calling a phone number" : "Παρουσιάστηκε σφάλμα κατά την κλήση σε αριθμό τηλεφώνου", + "Phone number could not be called: {error}" : "Ο αριθμός τηλεφώνου δεν μπορούσε να καλεστεί: {error}", + "Phone number could not be called" : "Ο αριθμός τηλεφώνου δεν μπορούσε να καλεστεί", + "Search participants or phone numbers" : "Αναζήτηση συμμετεχόντων ή αριθμών τηλεφώνου", + "Creating the conversation …" : "Δημιουργία συνομιλίας …", + "Mark as read" : "Σήμανση ως αναγνωσμένο", + "Mark as unread" : "επισήμανση ως μή-αναγνωσμένο", + "Remove from favorites" : "Αφαίρεση από τα αγαπημένα", + "Add to favorites" : "Προσθήκη στα αγαπημένα ", + "Unarchive conversation" : "Απο-αρχειοθέτηση συνομιλίας", + "Ignore \"Do not disturb\"" : "Αγνόηση \"Μην ενοχλείτε\"", + "You need to promote a new moderator before you can leave the conversation." : "Πρέπει να προάγετε έναν νέο συντονιστή πριν μπορέσετε να αποχωρήσετε από τη συνομιλία.", + "Conversation actions" : "Δράσεις συνομιλιών", + "Notify about calls" : "Ειδοποίηση για κλήσεις", + "Hide message text" : "Απόκρυψη κειμένου μηνύματος", + "Pending invitations" : "Εκκρεμείς προσκλήσεις", + "From {user} at {remoteServer}" : "Από {user} στον {remoteServer}", + "Decline invitation" : "Απόρριψη πρόσκλησης", + "Accept invitation" : "Αποδοχή πρόσκλησης", + "No pending invitations" : "Δεν υπάρχουν εκκρεμείς προσκλήσεις", + "Home" : "Αρχική", + "Unread" : "Μη αναγνωσμένο", + "Mentions" : "Αναφορές", + "Meetings" : "Συναντήσεις", + "Alphabetically" : "Αλφαβητικά", + "No followed threads" : "Δεν υπάρχουν ακολουθούμενες συζητήσεις", + "No matches found" : "Δεν βρέθηκαν αντιστοιχίες", + "No conversations found" : "Δεν βρέθηκαν συνομιλίες", + "You have no archived conversations." : "Δεν έχετε αρχειοθετημένες συνομιλίες.", + "Subscribe to an existing thread or start your own." : "Εγγραφείτε σε μια υπάρχουσα συζήτηση ή ξεκινήστε τη δική σας.", + "You have no unread mentions." : "Δεν έχετε αδιάβαστες αναφορές.", + "You have no unread messages." : "Δεν έχετε αδιάβαστα μηνύματα.", + "An error occurred while performing the search" : "Παρουσιάστηκε σφάλμα κατά την αναζήτηση", + "Conversation list" : "Λίστα συνομιλιών", + "Filter conversations by" : "Φιλτράρισμα συνομιλιών κατά", + "Unread messages" : "Μη αναγνωσμένα μηνύματα", + "Meeting conversations" : "Συνομιλίες συναντήσεων", + "Clear filters" : "Εκκαθάριση φίλτρων", + "New personal note" : "Νέα προσωπική σημείωση", + "Back to conversations" : "Επιστροφή στις συνομιλίες", + "Archived conversations" : "Αρχειοθετημένες συνομιλίες", + "Threads" : "Συζητήσεις", + "Clear filter" : "Εκκαθάριση φίλτρου", + "Show more threads" : "Εμφάνιση περισσότερων συζητήσεων", + "App settings" : "Ρυθμίσεις εφαρμογής", + "Users" : "Χρήστες", + "Groups" : "Ομάδες", + "Teams" : "Ομάδες", + "Federated users" : "Ομοσπονδιακοί χρήστες", + "New private conversation" : "Νέα ιδιωτική συνομιλία", + "Other sources" : "Άλλες πηγές", + "Open conversations" : "Άνοιγμα συνομιλιών", + "No search results" : "Κανένα αποτέλεσμα", + "Users, groups and teams" : "Χρήστες, ομάδες και ομάδες", + "Users and groups" : "Χρήστες και ομάδες", + "Users and teams" : "Χρήστες και ομάδες", + "Groups and teams" : "Ομάδες και ομάδες", + "New group conversation" : "Νέα ομαδική συνομιλία", + "The meeting will start soon" : "Η συνάντηση θα ξεκινήσει σύντομα", + "This meeting is scheduled for {startTime}" : "Αυτή η συνάντηση είναι προγραμματισμένη για {startTime}", + "You are currently waiting in the lobby" : "Βρίσκεστε στην αιθουα αναμονης", + "Select microphone" : "Επιλογή μικροφώνου", + "No microphone available" : "Δεν βρέθηκε μικρόφωνο", + "Select speaker" : "Επιλογή ηχείου", + "No speaker available" : "Δεν υπάρχει διαθέσιμο ηχείο", + "Select camera" : "Επιλογή κάμερας", + "No camera available" : "Δεν υπάρχει διαθέσιμη κάμερα", + "Select a device" : "Επιλογή συσκευής", + "Playing …" : "Αναπαραγωγή …", + "Test speakers" : "Δοκιμή ηχείων", + "Test" : "Δοκιμή", + "Devices" : "Συσκευές", + "Backgrounds" : "Φόντα", + "No audio" : "Χωρίς ήχο", + "No camera" : "Χωρίς κάμερα", + "Display video as you will see it (mirrored)" : "Εμφάνιση βίντεο όπως θα το δείτε (καθρεφτισμένο)", + "Display video as others will see it" : "Εμφάνιση βίντεο όπως θα το δουν οι άλλοι", + "Calls are not supported in your browser" : "Οι κλήσεις δεν υποστηρίζονται στον περιηγητή σας.", + "Access to microphone is only possible with HTTPS" : "Η πρόσβαση στο μικρόφωνο είναι εφικτή μόνο μέσω HTTPS.", + "Access to microphone was denied" : "Δεν επιτρέπεται η πρόσβαση στο μικρόφωνο", + "Error while accessing microphone" : "Σφάλμα κατά την πρόσβαση στο μικρόφωνο.", + "Access to camera is only possible with HTTPS" : "Η πρόσβαση στην κάμερα είναι εφικτή μόνο μέσω HTTPS.", + "The call is being recorded." : "Η κλήση καταγράφεται.", + "The call might be recorded." : "Η κλήση μπορεί να καταγράφεται.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Η εγγραφή μπορεί να περιλαμβάνει τη φωνή σας, βίντεο από την κάμερα και κοινή χρήση οθόνης. Απαιτείται η συγκατάθεσή σας πριν από τη συμμετοχή στην κλήση.", + "Give consent to the recording of this call" : "Δώστε συγκατάθεση για την εγγραφή αυτής της κλήσης", + "Show more info" : "Εμφάνιση περισσότερων πληροφοριών", + "Audio is not available" : "Ο ήχος δεν είναι διαθέσιμος", + "Video is not available" : "Το βίντεο δεν είναι διαθέσιμο", + "Start recording immediately with the call" : "Έναρξη εγγραφής αμέσως με την κλήση", + "Notify all participants about this call" : "Ειδοποίηση όλων των συμμετεχόντων για αυτήν την κλήση", + "Apply settings" : "Εφαρμογή ρυθμίσεων", + "Select virtual office background" : "Επιλογή εικονικού φόντου γραφείου", + "Select virtual home background" : "Επιλογή εικονικού φόντου σπιτιού", + "Select virtual abstract background" : "Επιλογή εικονικού αφηρημένου φόντου", + "Select virtual beach background" : "Επιλογή εικονικού φόντου παραλίας", + "Select virtual park background" : "Επιλογή εικονικού φόντου πάρκου", + "Select virtual theater background" : "Επιλογή εικονικού φόντου θεάτρου", + "Select virtual library background" : "Επιλογή εικονικού φόντου βιβλιοθήκης", + "Select virtual space station background" : "Επιλογή εικονικού φόντου διαστημικού σταθμού", + "Error while uploading the file" : "Σφάλμα κατά τη μεταφόρτωση του αρχείου", + "Select a file" : "Επιλογή αρχείου", + "Invalid path selected" : "Επιλέχθηκε μη έγκυρη διαδρομή", + "Select virtual background from file {fileName}" : "Επιλογή εικονικού φόντου από το αρχείο {fileName}", + "Blur" : "Θόλωμα", + "Upload" : "Μεταφόρτωση", + "Files" : "Αρχεία", + "(editing)" : "(επεξεργασία)", + "(edited)" : "(επεξεργασμένο)", + "The message has expired or has been deleted" : "Το μήνυμα έχει λήξει ή έχει διαγραφεί", + "Cancel quote" : "Ακύρωση παράθεσης", + "24 hours" : "24 ώρες", + "7 days" : "7 ημέρες", + "Clear reminder – {timeLocale}" : "Εκκαθάριση υπενθύμισης – {timeLocale}", + "Edited by {actor}" : "Επεξεργάστηκε από {actor}", + "Message text copied to clipboard" : "Το κείμενο του μηνύματος αντιγράφηκε στο πρόχειρο", + "Message text could not be copied" : "Το κείμενο του μηνύματος δεν μπορούσε να αντιγραφεί", + "Message forwarded to \"Note to self\"" : "Το μήνυμα προωθήθηκε στο \"Σημείωση προς εμένα\"", + "Error while forwarding message to \"Note to self\"" : "Σφάλμα κατά την προώθηση του μηνύματος στο \"Σημείωση προς εμένα\"", + "A reminder was successfully removed" : "Μια υπενθύμιση αφαιρέθηκε με επιτυχία", + "Error occurred when removing a reminder" : "Παρουσιάστηκε σφάλμα κατά την αφαίρεση μιας υπενθύμισης", + "A reminder was successfully set at {datetime}" : "Μια υπενθύμιση ορίστηκε με επιτυχία στις {datetime}", + "Error occurred when creating a reminder" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία μιας υπενθύμισης", + "Add a reaction to this message" : "Προσθήκη αντίδρασης σε αυτό το μήνυμα", + "Reply" : "Απάντηση", + "More actions" : "Περισσότερες ενέργειες", + "Set reminder" : "Προσθήκη υπενθύμισης", + "Reply privately" : "Απάντηση ιδιωτικά", + "Edit message" : "Επεξεργασία μηνύματος", + "Copy message" : "Αντιγραφή μηνύματος", + "Copy message link" : "Αντιγραφή συνδέσμου μηνύματος", + "Go to file" : "Μετάβαση στο αρχείο", + "Download file" : "Λήψη αρχείου", + "Go to thread" : "Μετάβαση στη συζήτηση", + "Edit thread details" : "Επεξεργασία λεπτομερειών συζήτησης", + "Forward message" : "Προώθηση μηνύματος", + "Translate" : "Μετάφραση", + "Set custom reminder" : "Ορισμός προσαρμοσμένης υπενθύμισης", + "Close reactions menu" : "Κλείσιμο μενού αντιδράσεων", + "React with {emoji}" : "Αντίδραση με {emoji}", + "React with another emoji" : "Αντίδραση με άλλο emoji", + "Choose a conversation to forward the selected message." : "Επιλέξτε μια συνομιλία για να προωθήσετε το επιλεγμένο μήνυμα.", + "Error while forwarding message" : "Σφάλμα κατά την προώθηση μηνύματος", + "The message has been forwarded to {selectedConversationName}" : "Το μήνυμα έχει προωθηθεί στο {selectedConversationName}", + "Dismiss" : "Αποδέσμευση", + "Go to conversation" : "Μετάβαση στη συνομιλία", + "Detect language" : "Ανίχνευση γλώσσας", + "The message could not be translated" : "Δεν ήταν δυνατή η μετάφραση του μηνύματος", + "Translation copied to clipboard" : "Η μετάφραση αντιγράφηκε στο πρόχειρο", + "Translation could not be copied" : "Δεν ήταν δυνατή η αντιγραφή της μετάφρασης", + "Translate message" : "Μετάφραση μηνύματος", + "Source language to translate from" : "Γλώσσα πηγής για μετάφραση από", + "Translate from" : "Μετάφραση από", + "Target language to translate into" : "Γλώσσα προορισμού για μετάφραση σε", + "Translate to" : "Μετάφραση σε", + "Translating" : "Μεταφράζεται", + "Copy translated text" : "Αντιγραφή μεταφρασμένου κειμένου", + "Send now" : "Αποστολή τωρα", + "Message read by everyone who shares their reading status" : "Το μήνυμα διαβάστηκε από όλους όσους μοιράζονται την κατάσταση ανάγνωσής τους", + "Message sent" : "Το μήνυμα στάλθηκε", + "Sent without notification" : "Αποστολή χωρίς ειδοποίηση", + "Deleting message" : "Γίνεται διαγραφή μηνύματος", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Το μήνυμα διαγράφηκε με επιτυχία, αλλά έχει ρυθμιστεί ένα bot ή Matterbridge και το μήνυμα μπορεί να έχει ήδη διανεμηθεί σε άλλες υπηρεσίες", + "Message deleted successfully" : "Το μήνυμα διαγράφηκε με επιτυχία", + "Message could not be deleted because it is too old" : "Δεν ήταν δυνατή η διαγραφή του μηνύματος επειδή είναι αρκετά παλιό", + "Only normal chat messages can be deleted" : "Μόνο τα κανονικά μηνύματα συνομιλίας μπορούν να διαγραφούν", + "An error occurred while deleting the message" : "Προέκυψε ένα σφάλμα κατά τη διαγραφή του μηνύματος", + "Your browser does not support playing audio files" : "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την αναπαραγωγή αρχείων ήχου", + "Contact" : "Επικοινωνία", + "{stack} in {board}" : "{stack} στο {board}", + "Deck Card" : "Κάρτα Deck", + "Remove {fileName}" : "Αφαίρεση {fileName}", + "Open this location in OpenStreetMap" : "Άνοιγμα αυτής της τοποθεσίας στο OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n απάντηση","%n απαντήσεις"], + "Sending message" : "Αποστολή μηνύματος", + "Failed to send the message. Click to try again" : "Αποτυχία αποστολής του μηνύματος. Κάντε κλικ για να δοκιμάσετε ξανά", + "Not enough free space to upload file" : "Δεν επαρκεί ο ελεύθερος χώρος για τη μεταφόρτωση του αρχείου", + "You cannot send messages to this conversation at the moment" : "Δεν μπορείτε να στείλετε μηνύματα σε αυτή τη συνομιλία αυτή τη στιγμή", + "Could not update the message" : "Δεν ήταν δυνατή η ενημέρωση του μηνύματος", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Προσχέδιο δημοσκόπησης • %n επιλογή","Προσχέδιο δημοσκόπησης • %n επιλογές"], + "Edit poll draft" : "Επεξεργασία προσχεδίου δημοσκόπησης", + "Delete poll draft" : "Διαγραφή προσχεδίου δημοσκόπησης", + "Open poll" : "Ανοιχτή δημοσκόπηση", + "See results" : "Προβολή αποτελεσμάτων", + "Reactions" : "Αντιδράσεις", + "No permission to post reactions in this conversation" : "Δεν υπάρχει άδεια δημοσίευσης αντιδράσεων σε αυτή τη συνομιλία", + "and {participant}" : "και {participant}", + "_and %n other participant_::_and %n other participants_" : ["και %n άλλος συμμετέχων","και %n άλλοι συμμετέχοντες"], + "Show all reactions" : "Εμφάνιση όλων των αντιδράσεων", + "Add more reactions" : "Προσθήκη περισσότερων αντιδράσεων", + "Show or collapse system messages" : "Εμφάνιση ή σύμπτυξη μηνυμάτων συστήματος", + "No messages" : "Κανένα μήνυμα", + "All messages have expired or have been deleted." : "Όλα τα μηνύματα έχουν λήξει ή έχουν διαγραφεί.", + "Unpin" : "Ξεκαρφίτσωμα", + "Cancel search" : "Ακύρωση αναζήτησης", + "Add a phone number" : "Προσθήκη αριθμού τηλεφώνου", + "Error: A password is required to create the conversation." : "Σφάλμα: Απαιτείται κωδικός πρόσβασης για τη δημιουργία της συνομιλίας.", + "All set, the conversation \"{conversationName}\" was created." : "Όλα έτοιμα, η συνομιλία \"{conversationName}\" δημιουργήθηκε.", + "Create a new group conversation" : "Δημιουργία νέας ομαδικής συζήτησης", + "Add participants" : "Προσθήκη συμμετεχόντων", + "Maximum length exceeded ({maxlength} characters)" : "Υπέρβαση μέγιστου μήκους ({maxlength} χαρακτήρες)", + "Conversation visibility" : "Ορατότητα συνομιλίας", + "Allow guests to join via link" : "Να επιτρέπεται σε επισκέπτες να συμμετέχουν μέσω συνδέσμου", + "Enter password" : "Εισάγετε συνθηματικό", + "This conversation has been locked" : "Αυτή η συνομιλία έχει κλειδωθεί", + "No permission to post messages in this conversation" : "Δεν επιτρέπεται η δημοσίευση μηνυμάτων σε αυτήν τη συνομιλία", + "Joining conversation …" : "Συμμετοχή σε συνομιλία…", + "Write a message without notification" : "Γράψτε ένα μήνυμα χωρίς ειδοποίηση", + "Create a thread silently" : "Δημιουργία συζήτησης σιωπηλά", + "Create a thread" : "Δημιουργία συζήτησης", + "Send message silently" : "Αποστολή μηνύματος σιωπηλά", + "Send message" : "Αποστολή μηνύματος", + "Send without notification" : "Αποστολή χωρίς ειδοποίηση", + "The participant will not be notified about new messages" : "Ο συμμετέχων δεν θα ειδοποιηθεί για νέα μηνύματα", + "Participants will not be notified about new messages" : "Οι συμμετέχοντες δεν θα ειδοποιηθούν για νέα μηνύματα", + "Thread title is required" : "Απαιτείται τίτλος συζήτησης", + "Message text is required" : "Απαιτείται κείμενο μηνύματος", + "The message could not be edited" : "Δεν ήταν δυνατή η επεξεργασία του μηνύματος", + "File to share" : "Αρχείο για διαμοιρασμό", + "File upload is not available in this conversation" : "Η μεταφόρτωση αρχείων δεν είναι διαθέσιμη σε αυτή τη συνομιλία", + "Add emoji" : "Προσθήκη emoji", + "Adding a mention will only notify users who did not read the message." : "Η προσθήκη αναφοράς θα ειδοποιήσει μόνο χρήστες που δεν έχουν διαβάσει το μήνυμα.", + "Thread title" : "Τίτλος συζήτησης", + "Send later" : "Αποστολή αργότερα", + "Cancel editing" : "Ακύρωση επεξεργασίας", + "{user} is out of office and might not respond." : "Ο {user} είναι εκτός γραφείου και μπορεί να μην απαντήσει.", + "Absence period: {startDate} - {endDate}" : "Περίοδος απουσίας: {startDate} - {endDate}", + "Replacement:" : "Αντικαταστάτης:", + "Share from {nextcloud}" : "Κοινή χρήση από {nextcloud}", + "Share from Files" : "Κοινή χρήση από Αρχεία", + "Share files to the conversation" : "Διαμοιρασμός αρχείων στην συνομιλία", + "Upload from device" : "Μεταφόρτωση από συσκευή", + "Create new poll" : "Δημιουργία νέας ψηφοφορίας", + "Smart picker" : "Έξυπνος επιλογέας", + "Record voice message" : "Εγγραφή φωνητικού μηνύματος", + "End recording and send" : "Τερματισμός εγγραφής και αποστολή", + "Dismiss recording" : "Απόρριψη εγγραφής", + "Access to the microphone was denied" : "Η πρόσβαση στο μικρόφωνο απορρίφθηκε", + "Microphone either not available or disabled in settings" : "Το μικρόφωνο δεν είναι διαθέσιμο ή είναι απενεργοποιημένο στις ρυθμίσεις", + "Error while recording audio" : "Σφάλμα κατά την εγγραφή ήχου", + "Generating summary of unread messages …" : "Δημιουργία σύνοψης μη αναγνωσμένων μηνυμάτων …", + "Summary is AI generated and might contain mistakes" : "Η σύνοψη δημιουργείται από τεχνητή νοημοσύνη και μπορεί να περιέχει λάθη", + "Error occurred during a summary generation" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία σύνοψης", + "New file" : "Νέο αρχείο", + "Blank" : "Κενό", + "Error while creating file" : "Σφάλμα κατά τη δημιουργία αρχείου", + "Create and share a new file" : "Δημιουργία και κοινή χρήση νέου αρχείου", + "Name of the new file" : "Όνομα του νέου αρχείου", + "Create file" : "Δημιουργία αρχείου", + "Someone is typing …" : "Κάποιος πληκτρολογεί …", + "{user1} is typing …" : "Ο {user1} πληκτρολογεί …", + "{user1} and {user2} are typing …" : "Οι {user1} και {user2} πληκτρολογούν …", + "{user1}, {user2} and {user3} are typing …" : "Οι {user1}, {user2} και {user3} πληκτρολογούν …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["Οι {user1}, {user2}, {user3} και %n άλλος πληκτρολογούν …","Οι {user1}, {user2}, {user3} και %n άλλοι πληκτρολογούν …"], + "Add more files" : "Προσθήκη περισσότερων αρχείων", + "Send" : "Αποστολή", + "In this conversation {user} can:" : "Σε αυτή τη συνομιλία ο {user} μπορεί:", + "Edit default permissions for participants in {conversationName}" : "Επεξεργασία προεπιλεγμένων δικαιωμάτων για συμμετέχοντες στο {conversationName}", + "Start a call" : "Έναρξη κλήσης", + "Skip the lobby" : "Παράκαμψη της αίθουσας αναμονής", + "Can post messages and reactions" : "Μπορεί να δημοσιεύει μηνύματα και αντιδράσεις", + "Enable the microphone" : "Ενεργοποίηση μικροφώνου", + "Enable the camera" : "Ενεργοποίηση κάμερας", + "Share the screen" : "Κοινή χρήση οθόνης", + "Update permissions" : "Ενημέρωση αδειών", + "Updating permissions" : "Ενημέρωση δικαιωμάτων", + "No poll drafts" : "Δεν υπάρχουν προσχέδια δημοσκοπήσεων", + "There is no poll drafts yet saved for this conversation" : "Δεν υπάρχουν ακόμη αποθηκευμένα προσχέδια δημοσκοπήσεων για αυτή τη συνομιλία", + "Create poll in {name}" : "Δημιουργία δημοσκόπησης στο {name}", + "Create poll" : "Δημιουργία ψηφοφορίας", + "Error while importing poll" : "Σφάλμα κατά την εισαγωγή δημοσκόπησης", + "Question" : "Ερώτηση", + "Ask a question" : "Κάντε μια ερώτηση", + "Import draft from file" : "Εισαγωγή προσχεδίου από αρχείο", + "Answers" : "Απαντήσεις", + "Answer {option}" : "Απάντηση {option}", + "Delete poll option" : "Διαγραφή επιλογής δημοσκόπησης", + "Add answer" : "Προσθήκη απάντησης", + "Settings" : "Ρυθμίσεις", + "Anonymous poll" : "Ανώνυμη δημοσκόπηση", + "Multiple answers" : "Πολλαπλές απαντήσεις", + "Save as draft" : "Αποθήκευση ως προσχέδιο", + "Export draft to file" : "Εξαγωγή προσχεδίου σε αρχείο", + "You voted for this option" : "Ψηφίσατε για αυτή την επιλογή", + "End poll" : "Τερματισμός δημοσκόπησης", + "Change your vote" : "Αλλαγή ψήφου σας", + "Results" : "Αποτελέσματα", + "Voted participants" : "Συμμετέχοντες που ψήφισαν", + "Send a message to \"{roomName}\"" : "Αποστολή μηνύματος στο \"{roomName}\"", + "Hide list of participants" : "Απόκρυψη λίστας συμμετεχόντων", + "Show list of participants" : "Εμφάνιση λίστας συμμετεχόντων", + "Assistance requested in {roomName}" : "Ζητήθηκε βοήθεια στο {roomName}", + "The message was sent to \"{roomName}\"" : "Το μήνυμα στάλθηκε στο \"{roomName}\"", + "Dismiss request for assistance" : "Απόρριψη αιτήματος βοήθειας", + "Send message to room" : "Αποστολή μηνύματος στην αίθουσα", + "Back to main room" : "Επιστροφή στην κύρια αίθουσα", + "Back to your room" : "Επιστροφή στο δωμάτιό σας", + "Message all rooms" : "Μήνυμα σε όλα τα δωμάτια", + "Start session" : "Έναρξη συνεδρίας", + "Start a call before you start a breakout room session" : "Ξεκινήστε μια κλήση πριν ξεκινήσετε μια συνεδρία δωματίων διάσπασης", + "Stop session" : "Διακοπή συνεδρίας", + "The message was sent to all breakout rooms" : "Το μήνυμα στάλθηκε σε όλα τα δωμάτια διάσπασης", + "Send a message to all breakout rooms" : "Αποστολή μηνύματος σε όλα τα δωμάτια διάσπασης", + "Breakout rooms are not started" : "Τα δωμάτια διάσπασης δεν έχουν ξεκινήσει", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Οι κλήσεις χωρίς υψηλής απόδοσης backend μπορεί να προκαλέσουν προβλήματα σύνδεσης και υψηλό φόρτο σε συσκευές. {linkstart}Μάθετε περισσότερα{linkend}", + "Talk setup incomplete" : "Η ρύθμιση ομιλίας είναι ελλιπής", + "Disable lobby" : "Απενεργοποίηση αίθουσας αναμονής", + "Settings for participant \"{user}\"" : "Ρυθμίσεις για συμμετέχοντα \"{user}\"", + "Participant \"{user}\"" : "Συμμετέχων \"{user}\"", + "moderator" : "συντονιστής", + "bot" : "bot", + "guest" : "Επισκέπτης", + "Ringing …" : "Χτυπάει …", + "Call rejected" : "Η κλήση απορρίφθηκε", + "{time} talking …" : "{time} ομιλία …", + "{time} talking time" : "{time} χρόνος ομιλίας", + "Raised their hand" : "Σήκωσαν το χέρι τους", + "Joined with video" : "Συμμετοχή με βίντεο", + "Joined via phone" : "Συμμετοχή μέσω τηλεφώνου", + "Joined with audio" : "Συμμετοχή με ήχο", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Το κείμενο πρέπει να είναι μικρότερο ή ίσο με {maxLength} χαρακτήρες. Το τρέχον κείμενό σας είναι {charactersCount} χαρακτήρες.", + "Remove group and members" : "Αφαίρεση ομάδας και μελών", + "Remove team and members" : "Αφαίρεση ομάδας και μελών", + "Remove participant" : "Αφαίρεση συμμετέχοντα", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε την ομάδα \"{displayName}\" και τα μέλη της από αυτή τη συνομιλία;", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε την ομάδα \"{displayName}\" και τα μέλη της από αυτή τη συνομιλία;", + "Do you really want to remove {displayName} from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε τον {displayName} από αυτή τη συνομιλία;", + "Notification was sent to {displayName}" : "Η ειδοποίηση στάλθηκε στον {displayName}", + "Could not send notification to {displayName}" : "Δεν ήταν δυνατή η αποστολή ειδοποίησης στον {displayName}", + "Permissions granted to {displayName}" : "Δικαιώματα που παραχωρήθηκαν στον {displayName}", + "Could not modify permissions for {displayName}" : "Δεν ήταν δυνατή η τροποποίηση δικαιωμάτων για τον {displayName}", + "Permissions removed for {displayName}" : "Δικαιώματα που αφαιρέθηκαν από τον {displayName}", + "Permissions set to default for {displayName}" : "Δικαιώματα που ορίστηκαν σε προεπιλογή για τον {displayName}", + "Phone number could not be hung up" : "Ο αριθμός τηλεφώνου δεν μπορούσε να κλείσει", + "Phone number could not be put on hold" : "Ο αριθμός τηλεφώνου δεν μπορούσε να τεθεί σε αναμονή", + "Phone number could not be muted" : "Ο αριθμός τηλεφώνου δεν μπορούσε να σιγαστεί", + "Phone number could not be unmuted" : "Ο αριθμός τηλεφώνου δεν μπορούσε να ξεσιγαστεί", + "DTMF message could not be sent" : "Το μήνυμα DTMF δεν μπορούσε να αποσταλεί", + "Phone number copied to clipboard" : "Ο αριθμός τηλεφώνου αντιγράφηκε στο πρόχειρο", + "Phone number could not be copied" : "Ο αριθμός τηλεφώνου δεν μπορούσε να αντιγραφεί", + "in the lobby" : "στην αίθουσα αναμονής", + "Dial out phone" : "Κλήση εξωτερικού τηλεφώνου", + "Hang up phone" : "Κλείσιμο τηλεφώνου", + "Move back to lobby" : "Επιστροφή στην αίθουσα αναμονής", + "Move to conversation" : "Μετάβαση σε συνομιλία", + "Dial-in PIN" : "PIN σύνδεσης", + "Demote from moderator" : "Υποβάθμιση από συντονιστή", + "Promote to moderator" : "Προαγωγή από συντονιστή", + "Resend invitation" : "Επαναποστολή πρόσκλησης", + "Send call notification" : "Αποστολή ειδοποίησης κλήσης", + "Dial out phone number" : "Κλήση εξωτερικού αριθμού τηλεφώνου", + "Resume call for phone number" : "Συνέχιση κλήσης για αριθμό τηλεφώνου", + "Put phone number on hold" : "Τοποθέτηση αριθμού τηλεφώνου σε αναμονή", + "Unmute phone number" : "Αποσιγόπηση αριθμού τηλεφώνου", + "Mute phone number" : "Σίγαση αριθμού τηλεφώνου", + "Copy phone number" : "Αντιγραφή αριθμού τηλεφώνου", + "Reset custom permissions" : "Επαναφορά προσαρμοσμένων δικαιωμάτων", + "Grant all permissions" : "Χορήγηση όλων των δικαιωμάτων", + "Remove all permissions" : "Αφαίρεση όλων των δικαιωμάτων", + "Also ban from this conversation" : "Αποκλεισμός και από αυτή τη συνομιλία", + "Internal note (reason to ban)" : "Εσωτερική σημείωση (λόγος αποκλεισμού)", + "Remove" : "Αφαίρεση", + "Permissions modified for {displayName}" : "Τα δικαιώματα τροποποιήθηκαν για τον {displayName}", + "Add users, groups or teams" : "Προσθήκη χρηστών, ομάδων ή ομάδων", + "Add users or groups" : "Προσθήκη χρηστών ή ομάδων", + "Add users or teams" : "Προσθήκη χρηστών ή ομάδων", + "Add users" : "Προσθήκη χρηστών", + "Add groups or teams" : "Προσθήκη ομάδων ή ομάδων", + "Add groups" : "Προσθήκη ομάδων", + "Add teams" : "Προσθήκη ομάδων", + "Add other sources" : "Προσθήκη άλλων πηγών", + "Add emails" : "Προσθήκη emails", + "Integrations" : "Ενσωματώσεις", + "Add federated users" : "Προσθήκη ομοσπονδιακών χρηστών", + "Searching …" : "Αναζήτηση ...", + "Search for more users" : "Αναζήτηση περισσότερων χρηστών", + "You can search or add participants via name, email, or Federated Cloud ID" : "Μπορείτε να αναζητήσετε ή να προσθέσετε συμμετέχοντες μέσω ονόματος, email ή Federated Cloud ID", + "Search or add participants" : "Αναζήτηση ή προσθήκη συμμετεχόντων", + "Invitation was sent to {actorId}" : "Η πρόσκληση στάλθηκε στον {actorId}", + "An error occurred while adding the participants" : "Παρουσιάστηκε σφάλμα κατά την προσθήκη των συμμετεχόντων", + "A new group conversation with selected participant will be created" : "Θα δημιουργηθεί μια νέα ομαδική συνομιλία με τον επιλεγμένο συμμετέχοντα", + "Participants" : "Συμμετέχοντες", + "Participants ({count})" : "Συμμετέχοντες ({count})", + "Open chat" : "Άνοιγμα συνομιλίας", + "You have new unread messages in the chat." : "Έχετε νέα μη αναγνωσμένα μηνύματα στη συνομιλία.", + "You have been mentioned in the chat." : "Έχετε αναφερθεί στη συνομιλία.", + "Search messages" : "Αναζήτηση μηνυμάτων", + "Chat" : "Συνομιλία", + "Details" : "Λεπτομέρειες", + "Shared items" : "Κοινόχρηστα αντικείμενα", + "Search in {name}" : "Αναζήτηση στο {name}", + "Threads in {name}" : "Συζητήσεις στο {name}", + "{actor} in {conversation}" : "{actor} στο {conversation}", + "Search messages …" : "Αναζήτηση μηνυμάτων …", + "Search options" : "Επιλογές αναζήτησης", + "From User" : "Από Χρήστη", + "Since" : "Από", + "Until" : "Μέχρι", + "No results found" : "Δεν βρέθηκαν αποτελέσματα", + "Load more results" : "Φόρτωση περισσοτέρων αποτελεσμάτων", + "Recent threads" : "Πρόσφατες συζητήσεις", + "Projects" : "Έργα", + "No shared items" : "Δεν υπάρχουν κοινόχρηστα αντικείμενα", + "Thread notifications" : "Ειδοποιήσεις συζήτησης", + "Thread actions" : "Ενέργειες συζήτησης", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Σύνδεσμος συνομιλίας", + "No open conversations found" : "Δεν βρέθηκαν ανοιχτές συνομιλίες", + "Either there are no open conversations or you joined all of them." : "Είτε δεν υπάρχουν ανοιχτές συνομιλίες είτε έχετε συμμετάσχει σε όλες.", + "Check spelling or use complete words." : "Ελέγξτε την ορθογραφία ή χρησιμοποιήστε πλήρεις λέξεις.", + "Search conversations or users" : "Αναζήτηση συνομιλιών ή χρηστών", + "Select conversation" : "Επιλέξτε συνομιλία", + "Number length is not valid" : "Το μήκος του αριθμού δεν είναι έγκυρο", + "Region code is not valid" : "Ο κωδικός περιοχής δεν είναι έγκυρος", + "Number length is too short" : "Το μήκος του αριθμού είναι πολύ μικρό", + "Number length is too long" : "Το μήκος του αριθμού είναι πολύ μεγάλο", + "Number is not valid" : "Ο αριθμός δεν είναι έγκυρος", + "Phone numbers" : "Αριθμοί τηλεφώνου", + "Display name: {name}" : "Εμφανιζόμενο όνομα: {name}", + "Edit display name" : "Επεξεργασία εμφανιζόμενου ονόματος", + "Display name (required)" : "Εμφανιζόμενο όνομα (απαιτείται)", + "Save name" : "Αποθήκευση ονόματος", + "Error while setting personal setting" : "Σφάλμα κατά τον ορισμό προσωπικής ρύθμισης", + "Error while saving sounds setting" : "Σφάλμα κατά την αποθήκευση της ρύθμισης ήχων", + "Play sounds when participants join or leave a call" : "Αναπαραγωγή ήχων όταν οι συμμετέχοντες εισέρχονται ή αποχωρούν από μια κλήση", + "Notification settings" : "Ρυθμίσεις ειδοποιήσεων", + "Default language" : "Προεπιλεγμένη γλώσσα", + "Select location for attachments" : "Επιλέξτε τοποθεσία για τα συνημμένα", + "Error while setting attachment folder" : "Σφάλμα κατά την ρύθμιση φακέλου συνημμένων", + "Error while setting read status privacy" : "Σφάλμα κατά τον ορισμό απορρήτου κατάστασης ανάγνωσης", + "Error while setting typing status privacy" : "Σφάλμα κατά τον ορισμό απορρήτου κατάστασης πληκτρολόγησης", + "Error while setting default media state" : "Σφάλμα κατά τη ρύθμιση της προεπιλεγμένης κατάστασης πολυμέσων", + "Privacy" : "Ιδιωτικότητα", + "Attachments folder" : "Φάκελος συνημμένων", + "Toggle full screen" : "Εναλλαγή πλήρους οθόνης", + "Search" : "Αναζήτηση", + "Focus the chat input" : "Εστίασε την είσοδο συνομιλίας", + "Unfocus the chat input to use shortcuts" : "Αποεπιλέξτε την είσοδο συνομιλίας για να χρησιμοποιήσετε συντομεύσεις", + "Edit your last message" : "Επεξεργασία του τελευταίου μηνύματός σας", + "Shortcuts while in a call" : "Συντομεύσεις κατά τη διάρκεια μιας κλήσης", + "Camera on and off" : "Ενεργοποίηση και απενεργοποίηση κάμερας", + "Microphone on and off" : "Ενεργοποίηση και απενεργοποίηση μικροφώνου", + "Raise or lower hand" : "Σηκώστε ή κατεβάστε το χέρι", + "Push to talk or push to mute" : "Πιέστε για να μιλήσετε ή πιέστε για σίγαση", + "Zoom-in / zoom-out a screen share" : "Εστίαση / απομάκρυνση κοινής χρήσης οθόνης", + "Mouse wheel" : "Τροχός ποντικιού", + "Start call silently" : "Έναρξη κλήσης σιωπηλά", + "Start call" : "Έναρξη κλήσης", + "End call" : "Τερματισμός κλήσης", + "This call has just ended" : "Αυτή η κλήση μόλις τελείωσε", + "You will be able to join the call only after a moderator starts it." : "Μπορείτε να συμμετάσχετε στην κλήση μόνο μετά την εκκίνηση από τον συντονιστή.", + "End call for everyone" : "Τερματισμός κλήσης για όλους", + "Starting the recording" : "Έναρξη εγγραφής", + "Recording" : "Καταγραφή", + "The call has been running for one hour." : "Η κλήση εκτελείται για μία ώρα.", + "Cancel recording start" : "Ακύρωση έναρξης εγγραφής", + "Stop recording" : "Διακοπή εγγραφής", + "Send a reaction" : "Αποστολή αντίδρασης", + "React with {reaction}" : "Αντίδραση με {reaction}", + "All tasks done!" : "Όλες οι εργασίες ολοκληρώθηκαν!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} από %n εργασία","{done} από %n εργασίες"], + "Add participants to this call" : "Προσθήκη συμμετεχόντων σε αυτήν την κλήση", + "_%n participant in call_::_%n participants in call_" : ["%n συμμετέχων στην κλήση","%n συμμετέχοντες στην κλήση"], + "You are not allowed to enable screensharing" : "Δεν επιτρέπεται να ενεργοποιήσετε τον διαμοιρασμό οθόνης", + "No screensharing" : "Δεν υπάρχει διαμοιρασμός οθόνης", + "Screensharing options" : "Επιλογές διαμοιρασμού οθόνης", + "Enable screensharing" : "Ενεργοποίηση διαμοιρασμού οθόνης", + "Bad sent video and screen quality." : "Κακή ποιότητα βίντεο και διαμοιρασμού οθόνης.", + "Bad sent screen quality." : "Κακή ποιότητα διαμοιρασμού οθόνης.", + "Bad sent video quality." : "Κακή ποιότητα βίντεο.", + "Bad sent audio, video and screen quality." : "Κακή ποιότητα ήχου, βίντεο και διαμοιρασμού οθόνης.", + "Bad sent audio and screen quality." : "Κακή ποιότητα ήχου και διαμοιρασμού οθόνης.", + "Bad sent audio and video quality." : "Κακή ποιότητα ήχου και βίντεο.", + "Bad sent audio quality." : "Κακή ποιότητα ήχου.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Disable background blur" : "Απενεργοποίηση θολώματος φόντου", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας δουν.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε τον διαμοιρασμό οθόνης σας.", + "Disable screenshare" : "Απενεργοποίηση του διαμοιρασμού οθόνης", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν.", + "Screen sharing is not supported by your browser." : "Η κοινή χρήση οθόνης δεν υποστηρίζεται από τον φυλλομετρητή σας.", + "Screen sharing requires the page to be loaded through HTTPS." : "Για τον διαμοιρασμό οθόνης απαιτείται η χρήση σελίδας με HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Για τον διαμοιρασμό οθόνης απαιτείται η φόρτωση της σελίδας μέσω HTTPS.", + "An error occurred while starting screensharing." : "Προυσιάστηκε σφάλμα κατά την έναρξη του διαμοιρασμού οθόνης.", + "Select virtual background" : "Επιλογή εικονικού φόντου", + "Show your screen" : "Εμφάνιση της οθόνης σας", + "Stop screensharing" : "Διακόψτε την κοινή χρήση της οθόνης", + "Mute others" : "Σίγαση των άλλων", + "Start recording" : "Έναρξη εγγραφής", + "Set up breakout rooms" : "Ρύθμιση δωματίων διάσπασης", + "Download attendance list" : "Λήψη λίστας παρουσιών", + "Open Calendar" : "Άνοιγμα Ημερολογίου", + "Remove participant {name}" : "Αφαίρεση συμμετέχοντα {name}", + "Would you like to delete this conversation?" : "Θέλετε να διαγράψετε αυτή τη συνομιλία;", + "Are you sure you want to delete this conversation?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συνομιλία;", + "Delete now" : "Διαγραφή τώρα", + "Keep" : "Διατήρηση", + "Open dialpad" : "Άνοιγμα πληκτρολογίου", + "Select a region" : "Επιλογή περιοχής", + "Local time: {time}" : "Τοπική ώρα: {time}", + "Search …" : "Αναζήτηση …", + "Message without mention" : "Μήνυμα χωρίς αναφορά σε κάποιον", + "Mention myself" : "Αναφορά στον εαυτό μου", + "Mention everyone" : "Αναφορά σε όλους", + "Select a conversation" : "Επιλέξτε μια συνομιλία", + "Select a mode" : "Επιλέξτε μια λειτουργία", + "You do not have permissions to access this conversation." : "Δεν έχετε δικαιώματα πρόσβασης σε αυτή τη συνομιλία.", + "Join a different conversation or start a new one." : "Συμμετέχετε σε διαφορετική συνομιλία ή ξεκινήστε μια νέα.", + "The conversation does not exist" : "Η συνομιλία δεν υπάρχει", + "Join a conversation or start a new one!" : "Συμμετέχετε σε συνομιλία ή ξεκινήστε μια νέα!", + "Duplicate session" : "Αντιγραφή συνεδρίας", + "Creating and joining a conversation with \"{userid}\"" : "Δημιουργία και συμμετοχή σε συνομιλία με \"{userid}\"", + "Join a conversation or start a new one" : "Συμμετέχετε σε συνομιλία ή ξεκινήστε μια νέα", + "Error while joining the conversation" : "Σφάλμα κατά τη συμμετοχή στη συνομιλία", + "Nextcloud URL" : "Διεύθυνση URL του Nextcloud", + "Nextcloud user" : "Χρήστης του Nextcloud", + "User password" : "Συνθηματικό χρήστη", + "Talk conversation" : "Συνομιλία στο Talk", + "Skip TLS verification" : "Παράλειψη επαλήθευσης TLS", + "Matrix server URL" : "Διεύθυνση URL διακομιστή Matrix", + "User" : "Χρήστης", + "Matrix channel" : "Κανάλι Matrix", + "Mattermost server URL" : "Διεύθυνση URL διακομιστή Mattermost", + "Mattermost user" : "Χρήστης Mattermost", + "Team name" : "Όνομα ομάδας", + "Channel name" : "Όνομα καναλιού", + "Rocket.Chat server URL" : "Διεύθυνση URL διακομιστή Rocket.Chat", + "User name or email address" : "Όνομα χρήστη ή διεύθυνση email", + "Rocket.Chat channel" : "Κανάλι Rocket.Chat", + "Zulip server URL" : "Διεύθυνση URL διακομιστή Zulip", + "Bot user name" : "Όνομα χρήστη του ρομπότ", + "Bot API key" : "Κλειδί API του ρομπότ", + "Zulip channel" : "Κανάλι Zulip", + "API token" : "Διακριτικό API", + "Slack channel" : "Κανάλι Slack", + "Server ID or name" : "Όνομα ή ταυτότητα διακομιστή", + "Channel ID (prefixed with \"ID:\") or name" : "Αναγνωριστικό καναλιού (με πρόθεμα \"ID:\") ή όνομα", + "Channel" : "Κανάλι", + "Login" : "Είσοδος", + "Chat ID" : "Αναγνωριστικό συνομιλίας", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL διακομιστή IRC (πχ chat.freenode.net:6667)", + "Nickname" : "Παρατσούκλι", + "Connection password" : "Κωδικός πρόσβασης σύνδεσης", + "IRC channel" : "Κανάλι IRC", + "Channel password" : "Κωδικός πρόσβασης καναλιού", + "NickServ nickname" : "Ψευδώνυμο NickServ", + "NickServ password" : "Κωδικός πρόσβασης NickServ", + "Use TLS" : "Χρήση TLS", + "Use SASL" : "Χρήση SASL", + "Tenant ID" : "Ταυτότητα Tenant", + "Client ID" : "ID πελάτη", + "Team ID" : "Ταυτότητα ομάδας", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber διακομιστής URL", + "MUC server URL" : "Διεύθυνση URL διακομιστή MUC", + "Jabber ID" : "Ταυτότητα Jabber", + "Media" : "Μέσα ενημέρωσης", + "Polls" : "Δημοσκοπήσεις", + "Deck cards" : "Καρτέλες Deck", + "Voice messages" : "Φωνητικά μηνύματα", + "Locations" : "Τοποθεσίες", + "Call recordings" : "Εγγραφές κλήσεων", + "Audio" : "Ήχος", + "Show all media" : "Εμφάνιση όλων των πολυμέσων", + "Show all files" : "Εμφάνιση όλων των αρχείων", + "Show all polls" : "Εμφάνιση όλων των δημοσκοπήσεων", + "Show all deck cards" : "Εμφάνιση όλων των καρτελών Deck", + "Show all voice messages" : "Εμφάνιση όλων των φωνητικών μηνυμάτων", + "Show all locations" : "Εμφάνιση όλων των τοποθεσιών", + "Show all call recordings" : "Εμφάνιση όλων των εγγραφών κλήσεων", + "Show all audio" : "Εμφάνιση όλων των ήχων", + "Show all other" : "Εμφάνιση όλων των άλλων", + "Follow conversation settings" : "Ακολούθηση ρυθμίσεων συνομιλίας", + "Group" : "Ομάδα", + "Team" : "Ομάδα", + "You reconnected to the call" : "Επανασυνδεθήκατε στην κλήση", + "{actor} reconnected to the call" : "Ο {actor} επανασυνδέθηκε στην κλήση", + "You added {user0} and {user1}" : "Προσθέσατε τους {user0} και {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Προσθέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Προσθέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "An administrator added you and {user0}" : "Ένας διαχειριστής πρόσθεσε εσάς και τον {user0}", + "{actor} added you and {user0}" : "Ο {actor} πρόσθεσε εσάς και τον {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Ένας διαχειριστής πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["Ο {actor} πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ο {actor} πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "An administrator added {user0} and {user1}" : "Ένας διαχειριστής πρόσθεσε τους {user0} και {user1}", + "{actor} added {user0} and {user1}" : "Ο {actor} πρόσθεσε τους {user0} και {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Ένας διαχειριστής πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["Ο {actor} πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ο {actor} πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "You removed {user0} and {user1}" : "Αφαιρέσατε τους {user0} και {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Αφαιρέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Αφαιρέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "An administrator removed you and {user0}" : "Ένας διαχειριστής αφαίρεσε εσάς και τον {user0}", + "{actor} removed you and {user0}" : "Ο {actor} αφαίρεσε εσάς και τον {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Ένας διαχειριστής αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["Ο {actor} αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ο {actor} αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "An administrator removed {user0} and {user1}" : "Ένας διαχειριστής αφαίρεσε τους {user0} και {user1}", + "{actor} removed {user0} and {user1}" : "Ο {actor} αφαίρεσε τους {user0} και {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Ένας διαχειριστής αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["Ο {actor} αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ο {actor} αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "You and {user0} joined the call" : "Εσείς και ο {user0} συμμετείχατε στην κλήση", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Εσείς, ο {user0} και %n ακόμα συμμετέχοντας συμμετείχατε στην κλήση","Εσείς, ο {user0} και %n ακόμα συμμετέχοντες συμμετείχατε στην κλήση"], + "{user0} and {user1} joined the call" : "Οι {user0} και {user1} συμμετείχατε στην κλήση", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["Οι {user0}, {user1} και %n ακόμα συμμετέχοντας συμμετείχατε στην κλήση","Οι {user0}, {user1} και %n ακόμα συμμετέχοντες συμμετείχατε στην κλήση"], + "You and {user0} left the call" : "Εσείς και ο {user0} αποχωρήσατε από την κλήση", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Εσείς, ο {user0} και %n ακόμα συμμετέχοντας αποχωρήσατε από την κλήση","Εσείς, ο {user0} και %n ακόμα συμμετέχοντες αποχωρήσατε από την κλήση"], + "{user0} and {user1} left the call" : "Οι {user0} και {user1} αποχωρήσατε από την κλήση", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["Οι {user0}, {user1} και %n ακόμα συμμετέχοντας αποχωρήσατε από την κλήση","Οι {user0}, {user1} και %n ακόμα συμμετέχοντες αποχωρήσατε από την κλήση"], + "You promoted {user0} and {user1} to moderators" : "Προήγατε τους {user0} και {user1} σε συντονιστές", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Προήγατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Προήγατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "An administrator promoted you and {user0} to moderators" : "Ένας διαχειριστής σας προήγαγε εσάς και τον {user0} σε συντονιστές", + "{actor} promoted you and {user0} to moderators" : "Ο {actor} σας προήγαγε εσάς και τον {user0} σε συντονιστές", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Ένας διαχειριστής σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντα σε συντονιστές","Ένας διαχειριστής σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["Ο {actor} σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντα σε συντονιστές","Ο {actor} σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "An administrator promoted {user0} and {user1} to moderators" : "Ένας διαχειριστής προήγαγε τους {user0} και {user1} σε συντονιστές", + "{actor} promoted {user0} and {user1} to moderators" : "Ο {actor} προήγαγε τους {user0} και {user1} σε συντονιστές", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Ένας διαχειριστής προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Ένας διαχειριστής προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["Ο {actor} προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Ο {actor} προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "You demoted {user0} and {user1} from moderators" : "Υποβιβάσατε τους {user0} και {user1} από συντονιστές", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Υποβιβάσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Υποβιβάσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "An administrator demoted you and {user0} from moderators" : "Ένας διαχειριστής σας υποβίβασε εσάς και τον {user0} από συντονιστές", + "{actor} demoted you and {user0} from moderators" : "Ο {actor} σας υποβίβασε εσάς και τον {user0} από συντονιστές", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Ένας διαχειριστής σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντα από συντονιστές","Ένας διαχειριστής σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντες από συντονιστές"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["Ο {actor} σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντα από συντονιστές","Ο {actor} σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντες από συντονιστές"], + "An administrator demoted {user0} and {user1} from moderators" : "Ένας διαχειριστής υποβίβασε τους {user0} και {user1} από συντονιστές", + "{actor} demoted {user0} and {user1} from moderators" : "Ο {actor} υποβίβασε τους {user0} και {user1} από συντονιστές", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Ένας διαχειριστής υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Ένας διαχειριστής υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["Ο {actor} υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Ο {actor} υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "You:" : "Εσείς:", + "You: {lastMessage}" : "Εσείς: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(επεξεργασμένο από εσάς)", + "(edited by a deleted user)" : "(επεξεργασμένο από διαγεγραμμένο χρήστη)", + "(edited by {moderator})" : "(επεξεργασμένο από {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Προσπαθείτε να συμμετάσχετε σε μια συνομιλία ενώ έχετε ενεργή συνεδρία σε άλλο παράθυρο ή συσκευή. Αυτή τη στιγμή δεν υποστηρίζεται αυτό από το Nextcloud Talk. Τι θέλετε να κάνετε;", + "Leave this page" : "Αποχώρηση από την σελίδα", + "Join here" : "Συμμετέχετε εδώ", + "Deck card has been posted to {conversation}" : "Η κάρτα Deck δημοσιεύτηκε στο {conversation}", + "An error occurred while posting deck card to conversation" : "Παρουσιάστηκε σφάλμα κατά τη δημοσίευση της κάρτας Deck στη συνομιλία", + "Post to a conversation" : "Δημοσίευση σε συνομιλία", + "Post to conversation" : "Δημοσίευση σε συνομιλία", + "The recording failed. Please contact your administrator." : "Η εγγραφή απέτυχε. Παρακαλούμε επικοινωνήστε με τον διαχειριστή σας.", + "Location has been posted to {conversation}" : "Η τοποθεσία δημοσιεύτηκε στο {conversation}", + "An error occurred while posting location to conversation" : "Παρουσιάστηκε σφάλμα κατά τη δημοσίευση της τοποθεσίας στη συνομιλία", + "Share to a conversation" : "Κοινή χρήση σε συνομιλία", + "Share to conversation" : "Κοινή χρήση σε συνομιλία", + "In conversation" : "Σε συνομιλία", + "Search in conversation: {conversation}" : "Αναζήτηση στη συνομιλία: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Τα αιτήματά σας περιορίζονται προς το παρόν λόγω προστασίας από brute force", + "Error while clearing conversation history" : "Σφάλμα κατά την εκκαθάριση του ιστορικού συνομιλιών", + "Error occurred while allowing guests" : "Παρουσιάστηκε σφάλμα κατά την άδεια των επισκεπτών", + "Error occurred while disallowing guests" : "Παρουσιάστηκε σφάλμα κατά την απαγόρευση των επισκεπτών", + "Error occurred when restricting the conversation to moderator" : "Παρουσιάστηκε σφάλμα κατά τον περιορισμό της συνομιλίας σε επόπτη", + "Error occurred when opening the conversation to everyone" : "Παρουσιάστηκε σφάλμα κατά το άνοιγμα της συνομιλίας σε όλους", + "Conversation password has been saved" : "Ο κωδικός πρόσβασης συνομιλίας έχει αποθηκευτεί", + "Conversation password has been removed" : "Ο κωδικός πρόσβασης συνομιλίας έχει αφαιρεθεί", + "Error occurred while saving conversation password" : "Παρουσιάστηκε σφάλμα κατά την αποθήκευση του κωδικού πρόσβασης συνομιλίας", + "Call recording is starting." : "Η εγγραφή κλήσης ξεκινά.", + "Call recording stopped while starting." : "Η εγγραφή κλήσης σταμάτησε κατά την εκκίνηση.", + "Call recording stopped. You will be notified once the recording is available." : "Η εγγραφή κλήσης σταμάτησε. Θα ειδοποιηθείτε μόλις η εγγραφή είναι διαθέσιμη.", + "Conversation picture set" : "Ορίστηκε εικόνα συνομιλίας", + "Conversation picture deleted" : "Διαγράφηκε η εικόνα συνομιλίας", + "Could not delete the conversation picture" : "Δεν ήταν δυνατή η διαγραφή της εικόνας συνομιλίας", + "Could not remove the automatic expiration" : "Δεν ήταν δυνατή η αφαίρεση της αυτόματης λήξης", + "Could not post message: {errorMessage}" : "Δεν ήταν δυνατή η δημοσίευση μηνύματος: {errorMessage}", + "Participant is banned successfully" : "Ο συμμετέχων αποκλείστηκε με επιτυχία", + "Error while banning the participant" : "Σφάλμα κατά τον αποκλεισμό του συμμετέχοντα", + "An error occurred while fetching the participants" : "Παρουσιάστηκε σφάλμα κατά την ανάκτηση των συμμετεχόντων", + "Could not send invitation to {actorId}" : "Δεν ήταν δυνατή η αποστολή πρόσκλησης στον {actorId}", + "Invitations sent" : "Η προσκλήσεις στάλθηκαν", + "Error occurred when sending invitations" : "Παρουσιάστηκε σφάλμα κατά την αποστολή προσκλήσεων", + "Failed to join the conversation." : "Αποτυχία συμμετοχής στη συνομιλία.", + "An error occurred while creating breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία δωματίων διάσπασης", + "An error occurred while re-ordering the attendees" : "Παρουσιάστηκε σφάλμα κατά την αναδιάταξη των συμμετεχόντων", + "An error occurred while deleting breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη διαγραφή δωματίων διάσπασης", + "An error occurred while starting breakout rooms" : "Παρουσιάστηκε σφάλμα κατά την έναρξη δωματίων διάσπασης", + "An error occurred while stopping breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη διακοπή δωματίων διάσπασης", + "An error occurred while sending a message to the breakout rooms" : "Παρουσιάστηκε σφάλμα κατά την αποστολή μηνύματος στα δωμάτια διάσπασης", + "An error occurred while requesting assistance" : "Παρουσιάστηκε σφάλμα κατά την αίτηση βοήθειας", + "An error occurred while resetting the request for assistance" : "Παρουσιάστηκε σφάλμα κατά την επαναφορά της αίτησης βοήθειας", + "An error occurred while joining breakout room" : "Παρουσιάστηκε σφάλμα κατά τη συμμετοχή σε δωμάτιο διάσπασης", + "Failed to rename the thread" : "Αποτυχία μετονομασίας της συζήτησης", + "Error fetching upcoming events" : "Σφάλμα ανάκτησης επερχόμενων συμβάντων", + "Error fetching upcoming reminders" : "Σφάλμα ανάκτησης επερχόμενων υπενθυμίσεων", + "An error occurred while accepting an invitation" : "Παρουσιάστηκε σφάλμα κατά την αποδοχή πρόσκλησης", + "An error occurred while rejecting an invitation" : "Παρουσιάστηκε σφάλμα κατά την απόρριψη πρόσκλησης", + "{guest} (guest)" : "{guest} (επισκέπτης)", + "Poll draft has been saved" : "Το προσχέδιο δημοσκόπησης αποθηκεύτηκε", + "An error occurred while saving the draft" : "Παρουσιάστηκε σφάλμα κατά την αποθήκευση του προσχεδίου", + "An error occurred while submitting your vote" : "Παρουσιάστηκε σφάλμα κατά την υποβολή της ψήφου σας", + "An error occurred while ending the poll" : "Παρουσιάστηκε σφάλμα κατά τον τερματισμό της δημοσκόπησης", + "An error occurred while deleting the poll draft" : "Παρουσιάστηκε σφάλμα κατά τη διαγραφή του προσχεδίου δημοσκόπησης", + "Poll \"{name}\" was created by {user}. Click to vote" : "Η δημοσκόπηση \"{name}\" δημιουργήθηκε από τον {user}. Κάντε κλικ για να ψηφίσετε", + "Failed to add reaction" : "Αποτυχία προσθήκης αντίδρασης", + "Failed to remove reaction" : "Αποτυχία αφαίρεσης αντίδρασης", + "Error while uploading file \"{fileName}\"" : "Σφάλμα κατά την μεταφόρτωση του αρχείου \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Δεν επαρκεί ο ελεύθερος χώρος για τη μεταφόρτωση του αρχείου \"{fileName}\"", + "You are not allowed to share files" : "Δεν επιτρέπεται να μοιράζεστε αρχεία", + "Error while sharing file" : "Σφάλμα κατά τον διαμοιρασμό αρχείου", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Ο περιηγητής που χρησιμοποιείτε δεν υποστηρίζεται πλήρως από το Nextcloud Talk. Παρακαλώ χρησιμοποιήστε την τελευταία έκδοση του Mozilla Firefox, Microsoft Edge, Google Chrome ή Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Σε %n ώρα","Σε %n ώρες"], + "_%n minute _::_%n minutes_" : ["%n λεπτό","%n λεπτά"], + "In {hours} and {minutes}" : "Σε {hours} και {minutes}", + "_In %n minute_::_In %n minutes_" : ["Σε %n λεπτό","Σε %n λεπτά"], + "Later today – {timeLocale}" : "Αργότερα σήμερα – {timeLocale}", + "Tomorrow – {timeLocale}" : "Αύριο – {timeLocale}", + "This weekend – {timeLocale}" : "Αυτό το σαββατοκύριακο – {timeLocale}", + "Next week – {timeLocale}" : "Επόμενη εβδομάδα – {timeLocale}", + "Conversation link copied to clipboard" : "Ο σύνδεσμος συνομιλίας αντιγράφηκε στο πρόχειρο", + "The link could not be copied" : "Ο σύνδεσμος δεν μπορούσε να αντιγραφεί", + "Error while parsing a PROPFIND error" : "Σφάλμα κατά την ανάλυση σφάλματος PROPFIND", + "Sending signaling message has failed" : "Η αποστολή μηνύματος σηματοδότησης απέτυχε", + "Lost connection to signaling server. Trying to reconnect." : "Χάθηκε η σύνδεση με τον διακομιστή σηματοδοσίας. Προσπάθεια επανασύνδεσης.", + "Lost connection to signaling server." : "Έχασε η σύνδεση με τον διακομιστή σηματοδότησης.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Ο διαμορφωμένος διακομιστής σηματοδότησης πρέπει να ενημερωθεί για να είναι συμβατός με αυτήν την έκδοση του Talk. Παρακαλούμε επικοινωνήστε με τη διοίκησή σας.", + "Please restart the app." : "Παρακαλούμε επανεκκινήστε την εφαρμογή.", + "Please reload the page." : "Παρακαλούμε φορτώστε ξανά τη σελίδα.", + "Please try to restart the app." : "Παρακαλούμε προσπαθήστε να επανεκκινήσετε την εφαρμογή.", + "Please try to reload the page." : "Παρακαλούμε προσπαθήστε να φορτώσετε ξανά τη σελίδα.", + "Do not disturb" : "Μην ενοχλείτε", + "Away" : "Λείπω", + "Microphone {number}" : "Μικρόφωνο {number}", + "Camera {number}" : "Κάμερα {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Φαίνεται ότι μιλάτε ενώ είστε σε σίγαση, παρακαλώ ενεργοποιήστε τον ήχο σας για να ακουστείτε", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Δεν μπορεί να αποκατασταθεί η σύνδεση με τουλάχιστον ένα συμμετέχοντα. Ένας διακομιστής TURN ίσως απαιτείται για την περίπτωσή σας. Παρακαλώ ρωτήστε τον διαχειριστή σας για εγκατάσταση από τα ακόλουθα {linkstart}τεκμηρίωση{linkstart}", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Διαρκεί περισσότερο από το αναμενόμενο. Τα δικαιώματα των μέσων επικοινωνίας έχουν χορηγηθεί (ή απορριφθεί); Εάν ναι, κάντε επανεκκίνηση του προγράμματος περιήγησής σας, λόγω αποτυχιας του ήχου και του βίντεο", + "Access to microphone & camera is only possible with HTTPS" : "Η πρόσβαση στο μικρόφωνο και στην κάμερα είναι εφικτή μόνο μέσω HTTPS", + "Please move your setup to HTTPS" : "Παρακαλώ μεταφέρεται την εγκατάσταση σας σε HTTPS", + "Access to microphone & camera was denied" : "Άρνηση πρόσβασης στο μικρόφωνο & την κάμερα", + "WebRTC is not supported in your browser" : "Το WebRTC δεν υποστηρίζεται από τον φυλλομετρητή σας", + "Please use a different browser like Firefox or Chrome" : "Παρακαλούμε χρησιμοποιήστε διαφορετικό φυλλομετρητή όπως ο Firefox ή Chrome", + "Error while accessing microphone & camera" : "Σφάλμα κατά την πρόσβαση στο μικρόφωνο & την κάμερα", + "%s Talk on your mobile devices" : "%s Talk στις κινητές συσκευές σας", + "Join conversations at any time, anywhere, on any device." : "Συμμετέχετε σε συνομιλίες πάντα και παντού από όλες τις συσκευές.", + "Android app" : "Εφαρμογή Android", + "iOS app" : "Εφαρμογή iOS", + "__language_name__" : "Ελληνικά", + "Webhook Demo" : "Επίδειξη Webhook", + "Call summary (%s)" : "Περίληψη κλήσης (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Το bot περίληψης κλήσης δημοσιεύει ένα μήνυμα επισκόπησης μετά την κλήση που παραθέτει όλους τους συμμετέχοντες και σκιαγραφεί εργασίες", + "Tasks" : "Εργασίες", + "Notes" : "Σημειώσεις", + "Reports" : "Αναφορές", + "Decisions" : "Αποφάσεις", + "Agenda" : "Ημερήσια διάταξη", + "Call summary" : "Περίληψη κλήσης", + "Call summary - {title}" : "Περίληψη κλήσης - {title}", + "Talk conversation for event" : "Συνομιλία Talk για συμβάν", + "Client Push is installed, this improves the performance of desktop clients." : "Το Client Push είναι εγκατεστημένο, αυτό βελτιώνει την απόδοση των πελατών επιφάνειας εργασίας.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "Το {notify_push} δεν είναι εγκατεστημένο, αυτό μπορεί να οδηγήσει σε προβλήματα απόδοσης όταν χρησιμοποιούνται πελάτες επιφάνειας εργασίας.", + "Next meeting" : "Επόμενη συνάντηση", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Προγραμματίστε μια συνάντηση από το ημερολόγιό σας. Μια συνομιλία Talk πρέπει να οριστεί ως τοποθεσία για να εμφανίζεται εδώ", + "Join conversations from remote Nextcloud servers" : "Συμμετοχή σε συνομιλίες από απομακρυσμένους διακομιστές Nextcloud", + "Your default media state has been saved" : "Η προεπιλεγμένη κατάσταση πολυμέσων σας αποθηκεύτηκε", + "Set reminder for later today" : "Ορισμός υπενθύμισης για αργότερα σήμερα", + "Set reminder for tomorrow" : "Ορισμός υπενθύμισης για αύριο", + "Set reminder for this weekend" : "Ορισμός υπενθύμισης για αυτό το σαββατοκύριακο", + "Set reminder for next week" : "Ορισμός υπενθύμισης για την επόμενη εβδομάδα", + "Generate summary" : "Δημιουργία σύνοψης", + "Open poll • You voted already" : "Άνοιγμα δημοσκόπησης • Έχετε ήδη ψηφίσει", + "Open poll • Click to vote" : "Άνοιγμα δημοσκόπησης • Κάντε κλικ για να ψηφίσετε", + "Poll • Ended" : "Δημοσκόπηση • Ολοκληρώθηκε", + "Talk recording from {time} ({conversation})" : "Εγγραφή ομιλίας από {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Αποτελέσματα δημοσκόπησης • %n ψήφος","Αποτελέσματα δημοσκόπησης • %n ψήφοι"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Ανοιχτή δημοσκόπηση • %n ψήφος","Ανοιχτή δημοσκόπηση • %n ψήφοι"], + "Submit vote" : "Υποβολή ψήφου", + "Your privacy setting has been saved" : "Η ρύθμιση απορρήτου σας έχει αποθηκευτεί", + "Your personal setting has been saved" : "Η προσωπική σας ρύθμιση έχει αποθηκευτεί", + "Failed to save sounds setting" : "Αποτυχία αποθήκευσης της ρύθμισης ήχων", + "Sounds setting saved" : "Η ρύθμιση ήχων αποθηκεύτηκε", + "Nextcloud Talk was updated, you cannot start or join a call." : "Το Nextcloud Talk ενημερώθηκε, δεν μπορείτε να ξεκινήσετε ή να συμμετάσχετε σε κλήση.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Συμμετείχατε στη συνομιλία σε άλλο παράθυρο ή συσκευή. Αυτήν τη στιγμή δεν υποστηρίζεται από το Nextcloud Talk, επομένως αυτή η συνεδρία τερματίστηκε.", + "Nextcloud Talk was updated." : "Το Nextcloud Talk ενημερώθηκε.", + "Nextcloud is in maintenance mode." : "Το Nextcloud βρίσκεται σε λειτουργία συντήρησης.", + "Nextcloud Talk Federation was updated." : "Το Nextcloud Talk Federation ενημερώθηκε." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/el.json b/l10n/el.json new file mode 100644 index 0000000..7ae0e71 --- /dev/null +++ b/l10n/el.json @@ -0,0 +1,2120 @@ +{ "translations": { + "a conversation" : "μια συνομιλία", + "(Duration %s)" : "(Διάρκεια %s)", + "You attended a call with {user1}" : "Παρακολουθήσατε μια κλήση με {user1}", + "_%n guest_::_%n guests_" : ["%n επισκέπτης","%n επισκέπτες"], + "You attended a call with {user1} and {user2}" : "Παρακολουθήσατε μια κλήση με {user1} και {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2} και {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2}, {user3} και {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Παρακολουθήσατε μια κλήση με {user1}, {user2}, {user3}, {user4} και {user5}", + "_%n other_::_%n others_" : ["%n άλλος","%n άλλοι"], + "{actor} invited you to {call}" : "Ο {actor} σας προσκάλεσε σε {call}", + "You were invited to a conversation or had a call" : "Σας προσκάλεσαν για συζήτηση ή είχατε μια κλήση", + "Other activities" : "Άλλες δραστηριότητες", + "Talk" : "Talk", + "Guest" : "Επισκέπτης", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Καλώς ήρθατε στο Nextcloud Talk!\nΣε αυτή τη συνομιλία θα ενημερώνεστε για νέες λειτουργίες που είναι διαθέσιμες στο Nextcloud Talk.", + "## New in Talk %s" : "## Νέα στο Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Το Microsoft Edge και Safari μπορούν να χρησιμοποιηθούν για κλήσεις βίντεο και ήχου", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Οι συνομιλίες ένας προς ένα είναι σταθερές και δεν μπορούν πλέον να μετατραπούν σε ομαδικές συνομιλίες τυχαία. Επίσης, όταν ένας από τους συμμετέχοντες αποχωρήσει από τη συζήτηση, αυτή δε διαγράφεται αυτόματα πλέον. Μόνο εάν και οι δύο συμμετέχοντες αποχωρήσουν, διαγράφεται από το διακομιστή", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Μπορείτε να ενημερώσετε όλους τους συμμετέχοντες γράφοντας \"@all\" στο chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Με το \"βελάκι-πάνω\" ξανά γράφεται το τελευταίο μήνυμα", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Το Talk έχει πλέον εντολές, στείλτε \"/help\" σαν μήνυμα στο chat για να δείτε εάν ο διαχειριστής ρύθμισε κάποιες", + "- With projects you can create quick links between conversations, files and other items" : "- Με τα έργα μπορείτε να δημιουργήσετε γρήγορους συνδέσμους μεταξύ συνομιλιών, αρχείων και άλλων αντικειμένων", + "- You can now mention guests in the chat" : "Μππορείτε πλέον να αναφερθείτε σε επισκέπτες στο chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Οι συνομιλίες έχουν πλέον αίθουσα αναμονής. Αυτό επιτρέπει στους συντονιστές να προετοιμαστούν για την συνάντηση, ενώ οι χρήστες και οι επισκέπτες πρέπει να περιμένουν", + "- You can now directly reply to messages giving the other users more context what your message is about" : "Μπορείτε πλέον να απαντήσετε απευθείας στα μηνύματα άλλων χρηστών δίνοντας άλλο ύφος στον ορισμό των μηνυμάτων", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Η αναζήτηση συζητήσεων και συμμετεχόντων φιλτράρει τις υπάρχουσες συνομιλίες σας, διευκολύνοντας την εύρεση προηγούμενων συνομιλιών", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Τώρα μπορείτε να προσθέσετε προσαρμοσμένες ομάδες χρηστών σε συνομιλίες όταν είναι εγκατεστημένη η εφαρμογή κύκλων", + "- Check out the new grid and call view" : "- Ελέγξτε τη νέα προβολή πλέγματος και κλήσεων", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Τώρα μπορείτε να ανεβάσετε και να σύρετε αρχεία απευθείας από τη συσκευή σας στη συνομιλία γραπτών μηνυμάτων", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Τα κοινόχρηστα αρχεία ανοίγουν τώρα απευθείας μέσα στον χώρο συνομιλίας με τις εφαρμογές προβολής", + "- You can now search for chats and messages in the unified search in the top bar" : "- Τώρα μπορείτε να αναζητήσετε συνομιλίες και μηνύματα στην ενοποιημένη αναζήτηση στην επάνω γραμμή.", + "- Spice up your messages with emojis from the emoji picker" : "- Εμπλουτίστε τα μηνύματά σας με emojis από την επιλογή emoji.", + "- You can now change your camera and microphone while being in a call" : "- Τώρα μπορείτε να αλλάξετε την κάμερα και το μικρόφωνό σας ενώ βρίσκεστε σε κλήση.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Δώστε πλαίσιο στις συνομιλίες σας με μια περιγραφή και ανοίξτε τις ώστε οι συνδεδεμένοι χρήστες να μπορούν να τις βρουν και να συμμετάσχουν μόνοι τους", + "- See a read status and send failed messages again" : "- Δείτε την κατάσταση ανάγνωσης και στείλτε ξανά μηνύματα που απέτυχαν", + "- Raise your hand in a call with the R key" : "Σηκώστε το χέρι σας σε μια κλήση με το πλήκτρο R", + "- Join the same conversation and call from multiple devices" : "- Συμμετέχετε στην ίδια συνομιλία και κλήση από πολλαπλές συσκευές", + "- Send voice messages, share your location or contact details" : "- Στείλτε φωνητικά μηνύματα, μοιραστείτε την τοποθεσία σας ή τα στοιχεία επικοινωνίας", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Προσθέστε ομάδες σε μια συνομιλία και τα νέα μέλη ομάδας θα προστεθούν αυτόματα ως συμμετέχοντες", + "- A preview of your audio and video is shown before joining a call" : "- Μια προεπισκόπηση του ήχου και βίντεό σας εμφανίζεται πριν από τη συμμετοχή σε κλήση", + "- You can now blur your background in the newly designed call view" : "- Μπορείτε τώρα να θολώσετε το φόντο σας στη νέα σχεδιασμένη προβολή κλήσης", + "- Moderators can now assign general and individual permissions to participants" : "- Οι συντονιστές μπορούν τώρα να αναθέτουν γενικά και ατομικά δικαιώματα σε συμμετέχοντες", + "- You can now react to chat messages" : "- Μπορείτε τώρα να αντιδράτε σε μηνύματα συνομιλίας", + "- In the sidebar you can now find an overview of the latest shared items" : "- Στην πλαϊνή γραμμή μπορείτε τώρα να βρείτε μια επισκόπηση των τελευταίων κοινόχρηστων στοιχείων", + "- Use a poll to collect the opinions of others or settle on a date" : "- Χρησιμοποιήστε μια δημοσκόπηση για να συλλέξετε τις απόψεις άλλων ή να κανονίσετε μια ημερομηνία", + "- Configure an expiration time for chat messages" : "- Ρυθμίστε ένα χρόνο λήξης για τα μηνύματα συνομιλίας", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Ξεκινήστε κλήσεις χωρίς ειδοποίηση άλλων σε μεγάλες συνομιλίες. Μπορείτε να στείλετε ατομικές ειδοποιήσεις κλήσης μόλις ξεκινήσει η κλήση.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Στείλτε μηνύματα συνομιλίας χωρίς ειδοποίηση των παραληπτών σε περίπτωση που δεν είναι επείγον", + "- Emojis can now be autocompleted by typing a \":\"" : "- Τα emojis μπορούν τώρα να συμπληρωθούν αυτόματα πληκτρολογώντας \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Συνδέστε διάφορα στοιχεία χρησιμοποιώντας τον νέο έξυπνο επιλογέα πληκτρολογώντας \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Οι συντονιστές μπορούν τώρα να δημιουργούν δωμάτια ομάδων (απαιτείται το High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Οι κλήσεις μπορούν τώρα να εγγράφονται (απαιτείται το High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Οι συνομιλίες μπορούν τώρα να έχουν avatar ή emoji ως εικονίδιο", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Τα εικονικά φόντα είναι τώρα διαθέσιμα εκτός από το θολωμένο φόντο σε κλήσεις βίντεο", + "- Reactions are now available during calls" : "- Οι αντιδράσεις είναι τώρα διαθέσιμες κατά τη διάρκεια κλήσεων", + "- Typing indicators show which users are currently typing a message" : "- Οι δείκτες πληκτρολόγησης δείχνουν ποιοι χρήστες πληκτρολογούν τρέχοντα μήνυμα", + "- Groups can now be mentioned in chats" : "- Οι ομάδες μπορούν τώρα να αναφέρονται σε συνομιλίες", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Οι εγγραφές κλήσεων μεταγράφονται αυτόματα εάν έχει εγγραφεί εφαρμογή πάροχου μεταγραφής", + "- Chat messages can be translated if a translation provider app is registered" : "- Τα μηνύματα συνομιλίας μπορούν να μεταφραστούν εάν έχει εγγραφεί εφαρμογή πάροχου μετάφρασης", + "- **Markdown** can now be used in _chat_ messages" : "- Το **Markdown** μπορεί τώρα να χρησιμοποιηθεί σε μηνύματα _συνομιλίας_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Τα Webhooks είναι τώρα διαθέσιμα για την υλοποίηση bots. Δείτε την τεκμηρίωση για περισσότερες πληροφορίες https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ορίστε υπενθύμιση σε μήνυμα συνομιλίας για να ειδοποιηθείτε ξανά αργότερα", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Χρησιμοποιήστε τη συνομιλία **Σημείωση προς εμένα** για να κρατάτε σημειώσεις και να μοιράζεστε πληροφορίες ανάμεσα στις συσκευές σας", + "- Captions allow to send a message with a file at the same time" : "- Οι λεζάντες επιτρέπουν την αποστολή μηνύματος με αρχείο ταυτόχρονα", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Το βίντεο του ομιλητή είναι τώρα ορατό κατά τη διάρκεια κοινής χρήσης οθόνης και οι αντιδράσεις κλήσης είναι κινούμενες", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Τα μηνύματα μπορούν τώρα να επεξεργαστούν από συνδεδεμένους συγγραφείς και συντονιστές για 6 ώρες", + "- Unsent message drafts are now saved in your browser" : "- Τα μη αποσταλμένα προσχέδια μηνυμάτων αποθηκεύονται τώρα στο πρόγραμμα περιήγησής σας", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Η συνομιλία κειμένου μπορεί τώρα να γίνει με federated τρόπο με άλλους διακομιστές Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Οι συντονιστές μπορούν τώρα να αποκλείσουν λογαριασμούς και επισκέπτες για να τους εμποδίσουν από το να επανέλθουν σε συνομιλία", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Οι επερχόμενες κλήσεις από συνδεδεμένα γεγονότα ημερολογίου και αντικαταστάτες εκτός γραφείου εμφανίζονται τώρα σε συνομιλίες", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Οι κλήσεις μπορούν τώρα να γίνουν με federated τρόπο με άλλους διακομιστές Talk (απαιτείται το High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Παρουσίαση του πελάτη επιφάνειας εργασίας Nextcloud Talk για Windows, macOS και Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Σύνοψη εγγραφών κλήσεων και μη αναγνωσμένων μηνυμάτων σε συνομιλίες με τον Βοηθό Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Βελτιωμένες συναντήσεις με αναγνώριση επισκεπτών που προσκλήθηκαν μέσω διεύθυνσης email, εισαγωγή λιστών συμμετεχόντων, προσχέδια για δημοσκοπήσεις και λήψη λιστών συμμετεχόντων κλήσης", + "- Archive conversations to stay focused" : "- Αρχειοθέτηση συνομιλιών για να παραμείνετε συγκεντρωμένοι", + "- Schedule a meeting into your calendar from within a conversation" : "- Προγραμματίστε μια συνάντηση στο ημερολόγιό σας από μέσα σε μια συνομιλία", + "- Search for messages of the current conversation directly in the right sidebar" : "- Αναζήτηση μηνυμάτων της τρέχουσας συνομιλίας απευθείας στην δεξιά πλαϊνή γραμμή", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Δείτε περισσότερες συνομιλίες με μια πρώτη ματιά με τη νέα συμπαγή λίστα (ενεργοποιήστε στις ρυθμίσεις Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Οι συνομιλίες συναντήσεων συγχρονίζουν τώρα τον τίτλο και την περιγραφή από το ημερολόγιο και είναι κρυφές με ένα φίλτρο αναζήτησης μέχρι να πλησιάσει η ώρα έναρξης", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Σημειώστε συνομιλίες ως ευαίσθητες στις ρυθμίσεις ειδοποιήσεων, για απόκρυψη του περιεχομένου μηνύματος από τη λίστα συνομιλιών και τις ειδοποιήσεις", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Για λήψη push ειδοποιήσεων κατά τη διάρκεια \"Μην ενοχλείτε\", σημειώστε συνομιλίες ως σημαντικές", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Προσθέστε άλλους συμμετέχοντες σε κλήση ένα προς ένα για δημιουργία νέας ομαδικής κλήσης αυτόματα", + "- Use threads to keep your chat and discussions organized" : "- Χρησιμοποιήστε νήματα για να διατηρήσετε τις συνομιλίες και συζητήσεις σας οργανωμένες", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Ζωντανές μεταγραφές τώρα διαθέσιμες κατά τη διάρκεια κλήσης (απαιτείται η εφαρμογή live-transcription ExApp και το High-performance backend)", + "_All %n participant_::_All %n participants_" : ["Όλοι οι %n συμμετέχοντες","Όλοι οι %n συμμετέχοντες"], + "Talk updates ✅" : "Ενημερώσεις Talk ✅", + "Reaction deleted by author" : "Αντίδραση διαγραμμένη από τον συγγραφέα", + "{actor} created the conversation" : "Ο/Η {actor} δημιούργησε την συζήτηση", + "You created the conversation" : "Δημιουργήσατε μια συζήτηση", + "System created the conversation" : "Το σύστημα δημιούργησε τη συνομιλία", + "An administrator created the conversation" : "Ένας διαχειριστής δημιούργησε την συζήτηση", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ο/Η {actor} μετονόμασε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Μετονομάσατε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ένας διαχειριστής μετονόμασε την συζήτηση από \"%1$s\" σε \"%2$s\"", + "{actor} set the description" : "Ο/Η {actor} όρισε την περιγραφή", + "You set the description" : "Ορίσατε την περιγραφή", + "An administrator set the description" : "Ένας διαχειριστής όρισε την περιγραφή", + "{actor} removed the description" : "Ο/Η {actor} κατάργησε την περιγραφή", + "You removed the description" : "Καταργήσατε την περιγραφή", + "An administrator removed the description" : "Ένας διαχειριστής κατάργησε την περιγραφή", + "You started a silent call" : "Ξεκινήσατε μια σιωπηλή κλήση", + "Outgoing silent call" : "Εξερχόμενη σιωπηλή κλήση", + "{actor} started a silent call" : "Ο/Η {actor} ξεκίνησε μια σιωπηλή κλήση", + "Incoming silent call" : "Εισερχόμενη σιωπηλή κλήση", + "You started a call" : "Ξεκινήσατε μια κλήση", + "Outgoing call" : "Εξερχόμενη κλήση", + "{actor} started a call" : "Ο/Η {actor} ξεκίνησε μια κλήση", + "Incoming call" : "Εισερχόμενη κλήση", + "{actor} joined the call" : "Ο/Η {actor} συμμετέχει στην κλήση", + "You joined the call" : "Συμμετείχατε στην κλήση", + "{actor} left the call" : "Ο/Η {actor} αποχώρησε από την κλήση", + "You left the call" : "Αποχωρήσατε από την κλήση", + "{actor} unlocked the conversation" : "Ο/Η {actor} ξεκλείδωσε την συζήτηση", + "You unlocked the conversation" : "Ξεκλειδώσατε την συζήτηση", + "An administrator unlocked the conversation" : "Ένας διαχειριστής ξεκλείδωσε την συζήτηση", + "{actor} locked the conversation" : "Ο/Η {actor} κλείδωσε την συζήτηση", + "You locked the conversation" : "Κλειδώσατε την συζήτηση", + "An administrator locked the conversation" : "Ένας διαχειριστής κλείδωσε την συζήτηση", + "{actor} limited the conversation to the current participants" : "Ο/Η {actor} περιόρισε την συνομιλία στους τρέχοντες συμμετέχοντες", + "You limited the conversation to the current participants" : "Περιορίσατε την συνομιλία στους τρέχοντες συμμετέχοντες", + "An administrator limited the conversation to the current participants" : "Ένας διαχειριστής περιόρισε την συνομιλία στους τρέχοντες συμμετέχοντες", + "{actor} opened the conversation to registered users" : "Ο/Η {actor} άνοιξε την συνομιλία σε εγγεγραμμένους χρήστες", + "You opened the conversation to registered users" : "Ανοίξατε την συνομιλία σε εγγεγραμμένους χρήστες", + "An administrator opened the conversation to registered users" : "Ένας διαχειριστής άνοιξε την συνομιλία για εγγεγραμμένους χρήστες", + "{actor} opened the conversation to registered users and users created with the Guests app" : "Ο {actor} άνοιξε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "You opened the conversation to registered users and users created with the Guests app" : "Ανοίξατε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Ένας διαχειριστής άνοιξε τη συνομιλία σε εγγεγραμμένους χρήστες και χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "The conversation is now open to everyone" : "Η συζήτηση είναι πλέον ανοιχτή για όλους", + "{actor} opened the conversation to everyone" : "Ο/Η {actor} άνοιξε την συζήτηση για όλους", + "You opened the conversation to everyone" : "Ανοίξατε την συζήτηση για όλους", + "{actor} restricted the conversation to moderators" : "Ο/Η {actor} περιόρισε την συζήτηση για συντονιστές", + "You restricted the conversation to moderators" : "Περιορίσατε την συζήτηση για συντονιστές", + "{actor} started breakout rooms" : "Ο/Η {actor} ξεκίνησε τα δωμάτια ομάδων", + "You started breakout rooms" : "Ξεκινήσατε τα δωμάτια ομάδων", + "{actor} stopped breakout rooms" : "Ο/Η {actor} σταμάτησε τα δωμάτια ομάδων", + "You stopped breakout rooms" : "Σταματήσατε τα δωμάτια ομάδων", + "{actor} allowed guests" : "Ο/Η {actor} επέτρεψε τους επισκέπτες", + "You allowed guests" : "Επιτρέψατε τους επισκέπτες", + "An administrator allowed guests" : "Ένας διαχειριστής επέτρεψε τους επισκέπτες", + "{actor} disallowed guests" : "Ο/Η {actor} απαγόρευσε τους επισκέπτες", + "You disallowed guests" : "Απαγορέψατε τους επισκέπτες", + "An administrator disallowed guests" : "Ένας διαχειριστής απαγόρευσε τους επισκέπτες", + "{actor} set a password" : "Ο/Η {actor} όρισε κωδικό", + "You set a password" : "Ορίσατε κωδικό", + "An administrator set a password" : "Ένας διαχειριστής όρισε κωδικό", + "{actor} removed the password" : "Ο/Η {actor} αφαίρεσε τον κωδικό", + "You removed the password" : "Αφαιρέσατε το συνθηματικό", + "An administrator removed the password" : "Ένας διαχειριστής αφαίρεσε το συνθηματικό", + "{actor} added {user}" : "Ο/Η {actor} πρόσθεσε τον/την {user}", + "You joined the conversation" : "Συνδεθήκατε στην συζήτηση", + "{actor} joined the conversation" : "Ο/Η {actor} συνδέθηκε στην συζήτηση", + "You added {user}" : "Προσθέσατε τον/την {user}", + "{actor} added you" : "Ο/Η {actor} σας πρόσθεσε", + "An administrator added you" : "Ένας διαχειριστής σάς πρόσθεσε", + "An administrator added {user}" : "Ένας διαχειριστής πρόσθεσε τον/την χρήστη {user}", + "You left the conversation" : "Αποχωρήσατε από την συζήτηση", + "{actor} left the conversation" : "Ο/Η {actor} αποχώρησε από την συζήτηση", + "{actor} removed {user}" : "Ο/Η {actor} αφαίρεσε τον/την {user}", + "You removed {user}" : "Αφαιρέσατε τον/την {user}", + "{actor} removed you" : "Ο/Η {actor} σας αφαίρεσε", + "An administrator removed you" : "Ένας διαχειριστής σάς αφαίρεσε", + "An administrator removed {user}" : "Ένας διαχειριστής αφαίρεσε τον/την χρήστη {user}", + "{actor} invited {federated_user}" : "Ο {actor} προσκάλεσε τον {federated_user}", + "You invited {federated_user}" : "Προσκαλέσατε τον {federated_user}", + "You accepted the invitation" : "Αποδεχθήκατε την πρόσκληση", + "{actor} invited you" : "Ο {actor} σας προσκάλεσε", + "An administrator invited you" : "Ένας διαχειριστής σας προσκάλεσε", + "An administrator invited {federated_user}" : "Ένας διαχειριστής προσκάλεσε τον/την {federated_user}", + "{federated_user} accepted the invitation" : "Ο/Η {federated_user} αποδέχθηκε την πρόσκληση", + "{actor} removed {federated_user}" : "Ο/Η {actor} αφαίρεσε τον/την {federated_user}", + "You removed {federated_user}" : "Αφαιρέσατε τον {federated_user}", + "You declined the invitation" : "Απορρίψατε την πρόσκληση", + "An administrator removed {federated_user}" : "Ένας διαχειριστής αφαίρεσε τον {federated_user}", + "{federated_user} declined the invitation" : "Ο/Η {federated_user} απέρριψε την πρόσκληση", + "{actor} added group {group}" : "Ο/Η {actor} πρόσθεσε την ομάδα {group}", + "You added group {group}" : "Προσθέσατε την ομάδα {group}", + "An administrator added group {group}" : "Ένας διαχειριστής πρόσθεσε την ομάδα {group}", + "{actor} removed group {group}" : "Ο/Η {actor} αφαίρεσε την ομάδα {group}", + "You removed group {group}" : "Αφαιρέσατε την ομάδα {group}", + "An administrator removed group {group}" : "Ένας διαχειριστής αφαίρεσε την ομάδα {group}", + "{actor} added team {circle}" : "Ο/Η {actor} πρόσθεσε την ομάδα {circle}", + "You added team {circle}" : "Προσθέσατε την ομάδα {circle}", + "An administrator added team {circle}" : "Ένας διαχειριστής πρόσθεσε την ομάδα {circle}", + "{actor} removed team {circle}" : "Ο/Η {actor} αφαίρεσε την ομάδα {circle}", + "You removed team {circle}" : "Αφαιρέσατε την ομάδα {circle}", + "An administrator removed team {circle}" : "Ένας διαχειριστής αφαίρεσε την ομάδα {circle}", + "{actor} added {phone}" : "Ο/Η {actor} πρόσθεσε {phone}", + "You added {phone}" : "Προσθέσατε {phone}", + "An administrator added {phone}" : "Ένας διαχειριστής πρόσθεσε {phone}", + "{actor} removed {phone}" : "Ο/Η {actor} αφαίρεσε {phone}", + "You removed {phone}" : "Αφαιρέσατε {phone}", + "An administrator removed {phone}" : "Ένας διαχειριστής αφαίρεσε {phone}", + "{actor} promoted {user} to moderator" : "Ο {actor} προήγαγε τον {user} σε συντονιστή", + "You promoted {user} to moderator" : "Προάγατε τον {user} σε συντονιστή", + "{actor} promoted you to moderator" : "Ο/Η {actor} σας προήγαγε σε συντονιστή", + "An administrator promoted you to moderator" : "Ένας διαχειριστής σας προήγαγε σε συντονιστή", + "An administrator promoted {user} to moderator" : "Ένας διαχειριστής προήγαγε τον/την {user} σε συντονιστή", + "{actor} demoted {user} from moderator" : "Ο/Η {actor} υποβίβασε τον/την {user} από συντονιστή", + "You demoted {user} from moderator" : "Υποβιβάσατε τον {user} από συντονιστή", + "{actor} demoted you from moderator" : "Ο/Η {actor} σας υποβίβασε από συντονιστή", + "An administrator demoted you from moderator" : "Ένας διαχειριστής σας υποβίβασε από συντονιστή", + "An administrator demoted {user} from moderator" : "Ένας διαχειριστής υποβίβασε τον/την {user} από συντονιστή", + "{actor} shared a file which is no longer available" : "Ο/Η {actor} διαμοίρασε ένα αρχείο που δεν είναι πλέον διαθέσιμο", + "You shared a file which is no longer available" : "Διαμοιράσε αρχείο που δεν είναι πλέον διαθέσιμο", + "File shares are currently not supported in federated conversations" : "Οι κοινόχρηστοι αρχείων δεν υποστηρίζονται προς το παρόν σε federated συνομιλίες", + "The shared location is malformed" : "Η κοινόχρηστη τοποθεσία είναι κακοσχηματισμένη", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "Ο {actor} ρύθμισε το Matterbridge για συγχρονισμό αυτής της συνομιλίας με άλλες συνομιλίες", + "You set up Matterbridge to synchronize this conversation with other chats" : "Ρυθμίσατε το Matterbridge για συγχρονισμό αυτής της συνομιλίας με άλλες συνομιλίες", + "{actor} created thread {title}" : "Ο/Η {actor} δημιούργησε το νήμα {title}", + "You created thread {title}" : "Δημιουργήσατε το νήμα {title}", + "{actor} renamed thread {title}" : "Ο/Η {actor} μετονόμασε το νήμα {title}", + "You renamed thread {title}" : "Μετονομάσατε το νήμα {title}", + "{actor} updated the Matterbridge configuration" : "Ο/Η {actor} ενημέρωσε τη ρύθμιση του Matterbridge", + "You updated the Matterbridge configuration" : "Ενημερώσατε τη ρύθμιση του Matterbridge", + "{actor} removed the Matterbridge configuration" : "Ο/Η {actor} αφαίρεσε τη ρύθμιση του Matterbridge", + "You removed the Matterbridge configuration" : "Αφαιρέσατε τη ρύθμιση του Matterbridge", + "{actor} started Matterbridge" : "Ο/Η {actor} ξεκίνησε το Matterbridge", + "You started Matterbridge" : "Ξεκινήσατε το Matterbridge", + "{actor} stopped Matterbridge" : "Ο/Η {actor} σταμάτησε το Matterbridge", + "You stopped Matterbridge" : "Σταματήσατε το Matterbridge", + "{actor} deleted a message" : "Ο/Η {actor} διέγραψε ένα μήνυμα", + "You deleted a message" : "Διαγράψατε ένα μήνυμα", + "{actor} edited a message" : "Ο/Η {actor} επεξεργάστηκε ένα μήνυμα", + "You edited a message" : "Επεξεργαστήκατε ένα μήνυμα", + "{actor} deleted a reaction" : "Ο/Η {actor} διέγραψε μια αντίδραση", + "You deleted a reaction" : "Διαγράψατε μια αντίδραση", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ορίσατε τη λήξη μηνύματος σε %n εβδομάδα","Ορίσατε τη λήξη μηνύματος σε %n εβδομάδες"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ορίσατε τη λήξη μηνύματος σε %n ημέρα","Ορίσατε τη λήξη μηνύματος σε %n ημέρες"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ορίσατε τη λήξη μηνύματος σε %n ώρα","Ορίσατε τη λήξη μηνύματος σε %n ώρες"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ορίσατε τη λήξη μηνύματος σε %n λεπτό","Ορίσατε τη λήξη μηνύματος σε %n λεπτά"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n εβδομάδα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n εβδομάδες"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ημέρα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ημέρες"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ώρα","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n ώρες"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n λεπτό","Ο/Η {actor} όρισε τη λήξη μηνύματος σε %n λεπτά"], + "{actor} disabled message expiration" : "Ο/Η {actor} απενεργοποίησε τη λήξη μηνυμάτων", + "You disabled message expiration" : "Απενεργοποιήσατε τη λήξη μηνυμάτων", + "{actor} cleared the history of the conversation" : "Ο/Η {actor} εκκαθάρισε το ιστορικό της συνομιλίας", + "You cleared the history of the conversation" : "Εκκαθαρίσατε το ιστορικό της συνομιλίας", + "{actor} set the conversation picture" : "Ο/Η {actor} όρισε την εικόνα συνομιλίας", + "You set the conversation picture" : "Ορίσατε την εικόνα συνομιλίας", + "{actor} removed the conversation picture" : "Ο/Η {actor} αφαίρεσε την εικόνα συνομιλίας", + "You removed the conversation picture" : "Αφαιρέσατε την εικόνα συνομιλίας", + "{actor} ended the poll {poll}" : "Ο/Η {actor} τερμάτισε τη δημοσκόπηση {poll}", + "You ended the poll {poll}" : "Τερματίσατε τη δημοσκόπηση {poll}", + "{actor} started the video recording" : "Ο/Η {actor} ξεκίνησε την εγγραφή βίντεο", + "You started the video recording" : "Ξεκινήσατε την εγγραφή βίντεο", + "{actor} stopped the video recording" : "Ο/Η {actor} σταμάτησε την εγγραφή βίντεο", + "You stopped the video recording" : "Σταματήσατε την εγγραφή βίντεο", + "{actor} started the audio recording" : "Ο/Η {actor} ξεκίνησε την εγγραφή ήχου", + "You started the audio recording" : "Ξεκινήσατε την εγγραφή ήχου", + "{actor} stopped the audio recording" : "Ο/Η {actor} σταμάτησε την εγγραφή ήχου", + "You stopped the audio recording" : "Σταματήσατε την εγγραφή ήχου", + "The recording failed" : "Η εγγραφή απέτυχε", + "Someone voted on the poll {poll}" : "Κάποιος ψήφισε στη δημοσκόπηση {poll}", + "Message deleted by author" : "Το μήνυμα διαγράφηκε από τον συντάκτη", + "Message deleted by {actor}" : "Το μήνυμα διαγράφηκε από {actor}", + "Message deleted by you" : "Το μήνυμα διαγράφηκε από εσάς", + "Deleted user" : "Διαγραμμένος χρήστης", + "Unknown number" : "Άγνωστος αριθμός", + "Administration" : "Διαχείριση", + "System" : "Συστήματος", + "%s (guest)" : "%s (επισκέπτης)", + "Missed call" : "Αναπάντητη κλήση", + "Unanswered call" : "Αναπάντητη κλήση", + "Call ended (Duration {duration})" : "Κλήση τερματίστηκε (Διάρκεια {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "{actor} ended the call (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση (Διάρκεια {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Η κλήση με %n επισκέπτη τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})","Η κλήση με %n επισκέπτες τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Κλήση με %n επισκέπτη τερματίστηκε (Διάρκεια {duration})","Κλήση με %n επισκέπτες τερματίστηκε (Διάρκεια {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["Ο {actor} τερμάτισε την κλήση με %n επισκέπτη (Διάρκεια {duration})","Ο {actor} τερμάτισε την κλήση με %n επισκέπτες (Διάρκεια {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τον {user1} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1} ended (Duration {duration})" : "Κλήση με τον {user1} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τον {user1} (Διάρκεια {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1} και {user2} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Κλήση με τους {user1} και {user2} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1} και {user2} (Διάρκεια {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2} και {user3} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2} και {user3} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1}, {user2} και {user3} (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2}, {user3} και {user4} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2}, {user3} και {user4} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "Ο {actor} τερμάτισε την κλήση με τους {user1}, {user2}, {user3} και {user4} (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Η κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} τερματίστηκε, καθώς έφτασε τη μέγιστη διάρκεια κλήσης (Διάρκεια {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} τερματίστηκε (Διάρκεια {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "Ο/Η {actor} τερμάτισε την κλήση με τους {user1}, {user2}, {user3}, {user4} και {user5} (Διάρκεια {duration})", + "Message of {user} in {conversation}" : "Μήνυμα του {user} στην {conversation}", + "Message of {user}" : "Μήνυμα του {user}", + "Message of a deleted user in {conversation}" : "Μήνυμα διαγεγραμμένου χρήστη στην {conversation}", + "Talk conversations" : "Συνομιλίες με Talk", + "Talk to %s" : "Talk σε %s", + "An error occurred. Please contact your administrator." : "Παρουσιάστηκε σφάλμα. Παρακαλώ επικοινωνήστε με τον διαχειριστή σας.", + "File not found" : "Το αρχείο δεν βρέθηκε", + "File is not shared, or shared but not with the user" : "Το αρχείο δεν είναι κοινόχρηστο, ή δεν μοιράζεται με τον χρήστη", + "No account available to delete." : "Δεν υπάρχει διαθέσιμος λογαριασμός για διαγραφή.", + "Poll" : "Δημοσκόπηση", + "Password needs to be set" : "Απαιτείται ορισμός συνθηματικού", + "Uploading the file failed" : "Η μεταφόρτωση του αρχείου απέτυχε", + "No image file provided" : "Δεν παρέχεται αρχείο εικόνας", + "File is too big" : "Το αρχείο είναι πολύ μεγάλο", + "Invalid file provided" : "Έχει δοθεί μη έγκυρο αρχείο", + "Invalid image" : "Μη έγκυρη εικόνα", + "Unknown filetype" : "Άγνωστος τύπος αρχείου", + "Talk mentions" : "Αναφορές σε ονόματα του Talk", + "More conversations" : "Περισσότερες συνομιλίες", + "Say hi to your friends and colleagues!" : "Πείτε γειά σε φίλους και συνεργάτες!", + "No unread mentions" : "Δεν υπάρχουν μη αναγνωσμένες αναφορές στο όνομά σας", + "Call in progress" : "Κλήση σε εξέλιξη", + "You were mentioned" : "Αναφέρθηκε το όνομά σας", + "Write to conversation" : "Γράψτε στη συνομιλία", + "Writes event information into a conversation of your choice" : "Γράφει πληροφορίες εκδήλωσης μιας συνομιλίας επιλογής σας", + "Missing email field in header line" : "Λείπει το πεδίο email στην γραμμή κεφαλίδας", + "Following lines are invalid: %s" : "Οι ακόλουθες γραμμές είναι μη έγκυρες: %s", + "%1$s invited you to conversation \"%2$s\"." : "Ο %1$s σας προσκάλεσε στη συνομιλία \"%2$s\".", + "You were invited to conversation \"%s\"." : "Προσκληθήκατε στη συνομιλία \"%s\".", + "Conversation invitation" : "Πρόσκληση συζήτησης", + "Scheduled time" : "Προγραμματισμένη ώρα", + "Description" : "Περιγραφή", + "You can also dial-in via phone with the following details" : "Μπορείτε επίσης να καλέσετε μέσω τηλεφώνου με τις ακόλουθες λεπτομέρειες.", + "Dial-in information" : "Πληροφορίες κλήσης", + "Meeting ID" : "Αναγνωριστικό Meeting ", + "Your PIN" : "Το PIN σας", + "Click the button below to join the lobby now." : "Κάντε κλικ στο παρακάτω κουμπί για να συμμετάσχετε τώρα στην αίθουσα αναμονής.", + "Click the link below to join the lobby now." : "Κάντε κλικ στον παρακάτω σύνδεσμο για να συμμετάσχετε τώρα στην αίθουσα αναμονής.", + "Join lobby for \"%s\"" : "Συμμετοχή στην αιθουσα αναμονής για \"%s\"", + "Click the button below to join the conversation now." : "Κάντε κλικ στο παρακάτω κουμπί για να συμμετάσχετε τώρα στη συνομιλία.", + "Click the link below to join the conversation now." : "Κάντε κλικ στον παρακάτω σύνδεσμο για να συμμετάσχετε τώρα στη συνομιλία.", + "Join \"%s\"" : "Συμμετοχή στο \"%s\"", + "Meeting" : "Συνάντηση", + "Password request: %s" : "Αίτημα κωδικού πρόσβασης: %s", + "Private conversation" : "Ιδιωτική συνομιλία", + "Deleted user (%s)" : "Διεγραμμένος χρήστης (%s)", + "Failed to upload call recording" : "Αποτυχία μεταφόρτωσης εγγραφής κλήσης", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Ο διακομιστής εγγραφής απέτυχε να μεταφορτώσει την εγγραφή της κλήσης {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "Share to chat" : "Κοινή χρήση στη συνομιλία", + "Dismiss notification" : "Αποδέσμευση ειδοποίησης", + "Call recording now available" : "Η εγγραφή κλήσης είναι πλέον διαθέσιμη", + "The recording for the call in {call} was uploaded to {file}." : "Η εγγραφή για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Transcript now available" : "Η μεταγραφή είναι πλέον διαθέσιμη", + "The transcript for the call in {call} was uploaded to {file}." : "Η μεταγραφή για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Failed to transcript call recording" : "Αποτυχία μεταγραφής εγγραφής κλήσης", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Ο διακομιστής απέτυχε να μεταγράψει την εγγραφή στο {file} για την κλήση στο {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "Call summary now available" : "Η σύνοψη κλήσης είναι πλέον διαθέσιμη", + "The summary for the call in {call} was uploaded to {file}." : "Η σύνοψη για την κλήση στο {call} μεταφορτώθηκε στο {file}.", + "Failed to summarize call recording" : "Αποτυχία σύνταξης σύνοψης εγγραφής κλήσης", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Ο διακομιστής απέτυχε να συνοψίσει την εγγραφή στο {file} για την κλήση στο {call}. Παρακαλώ επικοινωνήστε με τη διαχείριση.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Ο {user1} σας προσκάλεσε να συμμετάσχετε στο {roomName} στον {remoteServer}", + "Accept" : "Αποδοχή", + "Decline" : "Απόρριψη", + "{user1} invited you to a federated conversation" : "Ο {user1} σας προσκάλεσε σε μια federated συνομιλία", + "Someone reacted" : "Κάποιος αντέδρασε", + "New message" : "Νέο μήνυμα", + "Reminder" : "Υπενθύμιση", + "Someone mentioned you" : "Κάποιος σας ανέφερε", + "Notification" : "Ειδοποίηση", + "Someone reacted in a private conversation" : "Κάποιος αντέδρασε σε μια ιδιωτική συνομιλία", + "You received a message in a private conversation" : "Λάβατε ένα μήνυμα σε μια ιδιωτική συνομιλία", + "Reminder in a private conversation" : "Υπενθύμιση σε μια ιδιωτική συνομιλία", + "Someone mentioned you in a private conversation" : "Κάποιος σας ανέφερε σε μια ιδιωτική συνομιλία", + "Notification in a private conversation" : "Ειδοποίηση σε μια ιδιωτική συνομιλία", + "Reminder: You in {call}" : "Υπενθύμιση: Εσείς στο {call}", + "Reminder: {user} in {call}" : "Υπενθύμιση: {user} στο {call}", + "Reminder: Deleted user in {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης στο {call}", + "Reminder: {guest} (guest) in {call}" : "Υπενθύμιση: {guest} (επισκέπτης) στο {call}", + "Reminder: Guest in {call}" : "Υπενθύμιση: Επισκέπτης στο {call}", + "{user} reacted with {reaction}" : "Ο/Η {user} αντέδρασε με {reaction}", + "{user} reacted with {reaction} in {call}" : "Ο/Η {user} αντέδρασε με {reaction} στο {call}", + "Deleted user reacted with {reaction} in {call}" : "Διεγραμμένος χρήστης αντέδρασε με {reaction} στο {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "Ο/Η {guest} (επισκέπτης) αντέδρασε με {reaction} στο {call}", + "Guest reacted with {reaction} in {call}" : "Επισκέπτης αντέδρασε με {reaction} στο {call}", + "{user} in {call}" : "Ο/Η {user} είναι σε {call}", + "Deleted user in {call}" : "Διαγράφηκε ο χρήστης στην {call}", + "{guest} (guest) in {call}" : "{guest} (επισκέπτης) στην {call}", + "Guest in {call}" : "Επισκέπτης στην {call}", + "{user} sent you a private message" : "Ο/Η {user} σας έστειλε προσωπικό μήνυμα", + "{user} sent a message in conversation {call}" : "Ο/Η {user} έστειλε μήνυμα στην συζήτηση {call}", + "A deleted user sent a message in conversation {call}" : "Ένας διεγραμένος χρήστης έστειλε μήνυμα στην συνομιλία {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (επισκέπτης) έστειλε μήνυμα στην συζήτηση {call}", + "A guest sent a message in conversation {call}" : "Ένας επισκέπτης έστειλε μήνυμα σε μια συνομιλία {call}", + "{user} replied to your private message" : "Ο/Η {user} απάντησε στο προσωπικό μήνυμα σας", + "{user} replied to your message in conversation {call}" : "Ο/Η {user} απάντησε στο μήνυμά σας στην συζήτηση {call}", + "A deleted user replied to your message in conversation {call}" : "Ένας διεγραμένος χρήστης απάντησε στο μήνυμά σας στην συζήτηση {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (επισκέπτης) απάντησε στο μήνυμα σας στην συζήτηση {call}", + "A guest replied to your message in conversation {call}" : "Ένας επισκέπτης απάντησε στο μήνυμα σας στην συζήτηση {call}", + "Reminder: You in private conversation {call}" : "Υπενθύμιση: Εσείς σε ιδιωτική συνομιλία {call}", + "Reminder: A deleted user in private conversation {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης σε ιδιωτική συνομιλία {call}", + "Reminder: {user} in private conversation" : "Υπενθύμιση: {user} σε ιδιωτική συνομιλία", + "Reminder: You in conversation {call}" : "Υπενθύμιση: Εσείς σε συνομιλία {call}", + "Reminder: {user} in conversation {call}" : "Υπενθύμιση: {user} σε συνομιλία {call}", + "Reminder: A deleted user in conversation {call}" : "Υπενθύμιση: Διεγραμμένος χρήστης σε συνομιλία {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Υπενθύμιση: {guest} (επισκέπτης) σε συνομιλία {call}", + "Reminder: A guest in conversation {call}" : "Υπενθύμιση: Επισκέπτης σε συνομιλία {call}", + "{user} reacted with {reaction} to your private message" : "Ο/Η {user} αντέδρασε με {reaction} στο προσωπικό σας μήνυμα", + "{user} reacted with {reaction} to your message in conversation {call}" : "Ο/Η {user} αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ένας διεγραμμένος χρήστης αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "Ο/Η {guest} (επισκέπτης) αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Ένας επισκέπτης αντέδρασε με {reaction} στο μήνυμά σας στη συνομιλία {call}", + "{user} mentioned you in a private conversation" : "Ο/Η {user} σας ανέφερε σε μια ιδιωτική συνομιλία", + "{user} mentioned group {group} in conversation {call}" : "Ο/Η {user} ανέφερε την ομάδα {group} στη συνομιλία {call}", + "{user} mentioned team {team} in conversation {call}" : "Ο/Η {user} ανέφερε την ομάδα {team} στη συνομιλία {call}", + "{user} mentioned everyone in conversation {call}" : "Ο/Η {user} ανέφερε όλους στη συνομιλία {call}", + "{user} mentioned you in conversation {call}" : "Ο/Η {user} σας ανέφερε στη συνομιλία {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε την ομάδα {group} στη συνομιλία {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε την ομάδα {team} στη συνομιλία {call}", + "A deleted user mentioned everyone in conversation {call}" : "Ένας διεγραμμένος χρήστης ανέφερε όλους στη συνομιλία {call}", + "A deleted user mentioned you in conversation {call}" : "Ένας διεγραμμένος χρήστης σας ανέφερε στη συνομιλία {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε την ομάδα {group} στη συνομιλία {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε την ομάδα {team} στη συνομιλία {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Ο/Η {guest} (επισκέπτης) ανέφερε όλους στη συνομιλία {call}", + "{guest} (guest) mentioned you in conversation {call}" : "Ο/Η {guest} (επισκέπτης) σας ανέφερε στη συνομιλία {call}", + "A guest mentioned group {group} in conversation {call}" : "Ένας επισκέπτης ανέφερε την ομάδα {group} στη συνομιλία {call}", + "A guest mentioned team {team} in conversation {call}" : "Ένας επισκέπτης ανέφερε την ομάδα {team} στη συνομιλία {call}", + "A guest mentioned everyone in conversation {call}" : "Ένας επισκέπτης ανέφερε όλους στη συνομιλία {call}", + "A guest mentioned you in conversation {call}" : "Ένας επισκέπτης σας ανέφερε στη συνομιλία {call}", + "View message" : "Προβολή μηνύματος", + "Dismiss reminder" : "Αποδέσμευση υπενθύμισης", + "View chat" : "Εμφάνιση συνομιλίας", + "{user} invited you to a group conversation: {call}" : "Ο/Η {user} σας προσκάλεσε σε ομαδική κλήση: {call}", + "Join call" : "Συμμετοχή σε κλήση", + "Answer call" : "Απάντηση κλήσης", + "{user} would like to talk with you" : "Ο/Η {user} θα ήθελε να μιλήσει μαζί σας", + "Call back" : "Επιστροφή κλήσης", + "You missed a call from {user}" : "Αναπάντητη κλήση από τον {user}", + "Accept call" : "Αποδοχή κλήσης", + "Incoming phone call from {call}" : "Εισερχόμενη τηλεφωνική κλήση από {call}", + "You missed a phone call from {call}" : "Χάσατε μια τηλεφωνική κλήση από {call}", + "A group call has started in {call}" : "Ξεκίνησε ομαδική κλήση σε {call}", + "You missed a group call in {call}" : "Αναπάντητη από ομαδική κλήση {call}", + "{email} is requesting the password to access {file}" : "Αίτηση από το {email} για κωδικό πρόσβασης στο {file}", + "{email} tried to request the password to access {file}" : "Προσπάθεια αίτησης από το {email} για κωδικό πρόσβασης στο {file}", + "Someone is requesting the password to access {file}" : "Κάποιος αιτήθηκε κωδικό πρόσβασης για το {file}", + "Someone tried to request the password to access {file}" : "Κάποιος προσπαθεί να αιτηθεί κωδικό πρόσβασης για το {file}", + "Open settings" : "Άνοιγμα ρυθμίσεων", + "Hosted signaling server added" : "Προστέθηκε φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server is now configured and will be used." : "Ο φιλοξενούμενος διακομιστής σηματοδότησης έχει πλέον ρυθμιστεί και θα χρησιμοποιηθεί.", + "Hosted signaling server removed" : "Αφαιρέθηκε φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server was removed and will not be used anymore." : "Ο φιλοξενούμενος διακομιστής σηματοδότησης καταργήθηκε και δεν θα χρησιμοποιείται πλέον.", + "Hosted signaling server changed" : "Άλλαξε ο φιλοξενούμενος διακομιστής σηματοδότησης", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ο λογαριασμός του φιλοξενούμενου διακομιστή σηματοδότησης άλλαξε την κατάσταση από \"{oldstatus}\" σε \"{newstatus}\".", + "pending" : "εκκρεμεί", + "active" : "ενεργό", + "expired" : "έληξε", + "blocked" : "αποκλεισμένο", + "error" : "σφάλμα", + "The certificate of {host} expires in {days} days" : "Το πιστοποιητικό του {host} λήγει σε {days} ημέρες", + "The certificate of {host} expired" : "Το πιστοποιητικό του {host} έληξε", + "Contact via Talk" : "Επικοινωνία μέσω Talk", + "Open Talk" : "Άνοιγμα του Talk", + "Default" : "Προεπιλεγμένο", + "Presentation" : "Παρουσίαση", + "Conversations" : "Συνομιλίες", + "Messages in current conversation" : "Μηνύματα στην τρέχουσα συνομιλία", + "{user}" : "{user}", + "Messages" : "Μηνύματα", + "{user} in {conversation}" : "Υπάρχουν {user} στην συνομιλία {conversation}", + "Messages in other conversations" : "Μηνύματα σε άλλες συνομιλίες", + "One-to-one rooms always need to show the other users avatar" : "Τα δωμάτια ένα προς ένα πρέπει πάντα να εμφανίζουν το άβαταρ του άλλου χρήστη", + "Invalid emoji character" : "Μη έγκυρος χαρακτήρας emoji", + "Invalid background color" : "Μη έγκυρο χρώμα φόντου", + "Avatar image is not square" : "Η εικόνα του άβαταρ δεν είναι τετράγωνη", + "Room {number}" : "Δωμάτιο {number}", + "Other" : "Άλλο", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Η αίτηση για δοκιμή απέτυχε επειδή δεν ήταν δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Υπάρχει πρόβλημα με τον έλεγχο ταυτότητας αυτής της περίπτωσης. Ίσως δεν είναι προσβάσιμο από έξω για την επαλήθευση της διεύθυνσης URL του.", + "Something unexpected happened." : "Κάτι απροσδόκητο συνέβη.", + "The URL is invalid." : "Η διεύθυνση URL δεν είναι έγκυρη.", + "An HTTPS URL is required." : "Απαιτείται διεύθυνση URL HTTPS.", + "The email address is invalid." : "Η διεύθυνση ηλεκτρονικού ταχυδρομείου δεν είναι έγκυρη.", + "The language is invalid." : "Η γλώσσα δεν είναι έγκυρη.", + "The country is invalid." : "Η χώρα δεν είναι έγκυρη.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Υπάρχει πρόβλημα με το αίτημα της δοκιμής. Ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "Too many requests are send from your servers address. Please try again later." : "Στέλνονται πάρα πολλά αιτήματα από τη διεύθυνση των διακομιστών σας. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "There is already a trial registered for this Nextcloud instance." : "Υπάρχει ήδη μια δοκιμαστική καταχώριση για αυτήν την περίπτωση του Nextcloud.", + "Something unexpected happened. Please try again later." : "Κάτι απροσδόκητο συνέβη. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Η αίτηση για δοκιμή απέτυχε επειδή ο διακομιστής δοκιμής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Trial requested but failed to get account information. Please check back later." : "Ζητήθηκε δοκιμή αλλά απέτυχε να λάβει πληροφορίες λογαριασμού. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Υπάρχει πρόβλημα με τον έλεγχο ταυτότητας αυτού του αιτήματος. Ίσως δεν είναι προσβάσιμο από έξω για την επαλήθευση της διεύθυνσης URL του.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Η ανάκτησης πληροφοριών λογαριασμού απέτυχε επειδή ο δοκιμαστικός διακομιστής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Υπάρχει πρόβλημα με την ανάκτηση των πληροφοριών λογαριασμού. Παρακαλούμε ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "There is no such account registered." : "Δεν έχει καταχωρηθεί τέτοιος λογαριασμός.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Η ανάκτηση πληροφοριών λογαριασμού απέτυχε επειδή δεν είναι δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Deleting the hosted signaling server account failed. Please check back later." : "Η διαγραφή του λογαριασμού του φιλοξενούμενου διακομιστή σηματοδότησης απέτυχε. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Η διαγραφής του λογαριασμού απέτυχε επειδή ο δοκιμαστικός διακομιστής συμπεριφέρθηκε εσφαλμένα. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "There is a problem with deleting the account. Please check your logs for further information." : "Υπάρχει πρόβλημα με τη διαγραφή του λογαριασμού. Παρακαλούμε ελέγξτε τα αρχεία καταγραφής σας για περισσότερες πληροφορίες.", + "Too many requests are sent from your servers address. Please try again later." : "Πάρα πολλά αιτήματα αποστέλλονται από τη διεύθυνση των διακομιστών σας. Παρακαλώ προσπαθήστε ξανά αργότερα.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Η διαγραφής του λογαριασμού απέτυχε επειδή δεν είναι δυνατή η πρόσβαση στον δοκιμαστικό διακομιστή. Παρακαλούμε ελέγξτε ξανά αργότερα.", + "Note to self" : "Σημείωση προς εμένα", + "A place for your private notes, thoughts and ideas" : "Ένας χώρος για τις προσωπικές σας σημειώσεις, σκέψεις και ιδέες", + "Transcript is AI generated and may contain mistakes" : "Η μεταγραφή δημιουργήθηκε από ΤΝ και μπορεί να περιέχει λάθη", + "Summary is AI generated and may contain mistakes" : "Η σύνοψη δημιουργήθηκε από ΤΝ και μπορεί να περιέχει λάθη", + "Let's get started!" : "Ας ξεκινήσουμε!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Το Nextcloud Talk** είναι μια ασφαλής, αυτο-φιλοξενούμενη πλατφόρμα επικοινωνίας που ενσωματώνεται απρόσκοπτα με το οικοσύστημα Nextcloud.\n\n#### Βασικά Χαρακτηριστικά του Nextcloud Talk:\n\n* Συνομιλία και ανταλλαγή μηνυμάτων σε ιδιωτικές και ομαδικές συνομιλίες\n* Κλήσεις φωνής και βίντεο\n* Κοινή χρήση αρχείων και ενσωμάτωση με άλλες εφαρμογές Nextcloud\n* Προσαρμόσιμες ρυθμίσεις συνομιλιών, συντονισμός και έλεγχος απορρήτου\n* Web, επιφάνεια εργασίας και κινητό (iOS και Android)\n* Ιδιωτική & ασφαλής επικοινωνία\n\n Μάθετε περισσότερα στην [τεκμηρίωση χρήστη](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Καλώς ήρθατε στο Nextcloud Talk\n\nΤο Nextcloud Talk είναι μια ιδιωτική και ισχυρή εφαρμογή ανταλλαγής μηνυμάτων που ενσωματώνεται με το Nextcloud. Συνομιλήστε σε ιδιωτικές ή ομαδικές συνομιλίες, συνεργαστείτε μέσω κλήσεων φωνής και βίντεο, οργανώστε webinars και εκδηλώσεις, προσαρμόστε τις συνομιλίες σας και πολλά άλλα.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Μορφοποιήστε κείμενα για να δημιουργήσετε πλούσια μηνύματα\n\nΣτο Nextcloud Talk, μπορείτε να χρησιμοποιήσετε σύνταξη Markdown για να μορφοποιήσετε τα μηνύματά σας. Για παράδειγμα, εφαρμόστε **έντονη** ή *πλάγια* μορφοποίηση, ή `επισημάνετε κείμενα ως κώδικα`. Μπορείτε ακόμα να δημιουργήσετε πίνακες και να προσθέσετε επικεφαλίδες στο κείμενό σας.\n\nΧρειάζεται να διορθώσετε ένα ορθογραφικό λάθος ή να αλλάξετε τη μορφοποίηση; Επεξεργαστείτε το μήνυμά σας κάνοντας κλικ στο \"Επεξεργασία μηνύματος\" στο μενού μηνύματος.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Προσθέστε συνημμένα και συνδέσμους\n\nΕπισυνάψτε αρχεία από το Nextcloud Hub σας χρησιμοποιώντας το κουμπί \"+\". Μοιραστείτε στοιχεία από τα Αρχεία και διάφορες εφαρμογές Nextcloud. Ορισμένες εφαρμογές υποστηρίζουν ακόμα και διαδραστικά widgets, για παράδειγμα, η εφαρμογή Κείμενο.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Αφήστε τις συνομιλίες να ρέουν: αναφέρετε χρήστες, αντιδράστε σε μηνύματα και άλλα\n\nΜπορείτε να αναφέρετε όλους στη συνομιλία χρησιμοποιώντας %s ή να αναφέρετε συγκεκριμένους συμμετέχοντες πληκτρολογώντας \"@\" και επιλέγοντας το όνομά τους από τη λίστα.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Μπορείτε να απαντήσετε σε μηνύματα, να τα προωθήσετε σε άλλες συνομιλίες και άτομα, ή να αντιγράψετε το περιεχόμενο μηνύματος.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Κάντε περισσότερα με τον Έξυπνο Επιλογέα\n\nΑπλώς πληκτρολογήστε \"/\" ή μεταβείτε στο μενού \"+\" για να ανοίξετε τον Έξυπνο Επιλογέα όπου μπορείτε να επισυνάψετε διάφορο περιεχόμενο στα μηνύματά σας. Μπορείτε να ρυθμίσετε τον Έξυπνο Επιλογέα για να μπορείτε να προσθέτετε στοιχεία από εφαρμογές Nextcloud, GIFs, τοποθεσίες χαρτών, περιεχόμενο που δημιουργήθηκε από ΤΝ και πολλά άλλα.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Διαχείριση ρυθμίσεων συνομιλιών\n\nΣτο μενού συνομιλίας, μπορείτε να αποκτήσετε πρόσβαση σε διάφορες ρυθμίσεις για τη διαχείριση των συνομιλιών σας, όπως:\n* Επεξεργασία πληροφοριών συνομιλίας\n* Διαχείριση ειδοποιήσεων\n* Εφαρμογή πολυάριθμων κανόνων συντονισμού\n* Ρύθμιση πρόσβασης και ασφάλειας\n* Ενεργοποίηση bots\n* και πολλά άλλα!", + "Andorra" : "Ανδόρα", + "United Arab Emirates" : "Ηνωμένα Αραβικά Εμιράτα", + "Afghanistan" : "Αφγανιστάν", + "Antigua and Barbuda" : "Αντίκουα και Μπαρμπούντα", + "Anguilla" : "Anguilla", + "Albania" : "Αλβανία", + "Armenia" : "Αρμενία", + "Angola" : "Αγκόλα", + "Antarctica" : "Ανταρκτική", + "Argentina" : "Αργεντινή", + "American Samoa" : "Αμερικανική Σαμόα", + "Austria" : "Αυστρία", + "Australia" : "Αυστραλία", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Αζερμπαϊτζάν", + "Bosnia and Herzegovina" : "Βοσνία και Ερζεγοβίνη", + "Barbados" : "Μπαρμπάντος", + "Bangladesh" : "Μπαγκλαντές ", + "Belgium" : "Βέλγιο", + "Burkina Faso" : "Μπουρκίνα Φάσο", + "Bulgaria" : "Βουλγαρία", + "Bahrain" : "Μπαχρέιν", + "Burundi" : "Μπουρούντι", + "Benin" : "Μπενίν", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Βερμούδα", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Βολιβία, πολυεθνική πολιτεία της", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Βραζιλία", + "Bahamas" : "Μπαχάμες", + "Bhutan" : "Μπουτάν", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Μποτσουάνα", + "Belarus" : "Λευκορωσία", + "Belize" : "Μπελίσε", + "Canada" : "Καναδάς", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Κονγκό, Λαϊκή Δημοκρατία του ", + "Central African Republic" : "Δημοκρατία Κεντρικής Αφρικής", + "Congo" : "Κονγκό", + "Switzerland" : "Ελβετία", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Χιλή", + "Cameroon" : "Καμερούν", + "China" : "Κίνα", + "Colombia" : "Κολομβία", + "Costa Rica" : "Costa Rica", + "Cuba" : "Κούβα", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Νησί των Χριστουγέννων", + "Cyprus" : "Κύπρος", + "Czechia" : "Czechia", + "Germany" : "Γερμανία", + "Djibouti" : "Djibouti", + "Denmark" : "Δανία", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Αλγερία", + "Ecuador" : "Εκουαδόρ", + "Estonia" : "Εσθονία", + "Egypt" : "Αίγυπτος", + "Western Sahara" : "Δυτική Σαχάρα", + "Eritrea" : "Eritrea", + "Spain" : "Ισπανία", + "Ethiopia" : "Αιθιοπία", + "Finland" : "Φινλανδία", + "Fiji" : "Φίτζι", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Μικρονησία, Ομοσπονδιακά κράτη του", + "Faroe Islands" : "Νησιά Φερόε", + "France" : "Γαλλία", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Ηνωμένο Βασίλειο της Μεγάλης Βρετανίας και Βορείου Ιρλανδίας", + "Grenada" : "Γρενάδα", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Γκάμπια", + "Guinea" : "Γουϊνέα", + "Guadeloupe" : "Γουαδελούπη", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Ελλάδα", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Γουατεμάλα", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Κροατία", + "Haiti" : "Haiti", + "Hungary" : "Ουγγαρία", + "Indonesia" : "Ινδονησία", + "Ireland" : "Ιρλανδία", + "Israel" : "Ισραήλ", + "Isle of Man" : "Isle of Man", + "India" : "Ινδία", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Ιράκ", + "Iran, Islamic Republic of" : "Ιράν, Ισλαμική Δημοκρατία του", + "Iceland" : "Ισλανδία", + "Italy" : "Ιταλία", + "Jersey" : "Jersey", + "Jamaica" : "Τζαμάικα", + "Jordan" : "Ιορδανία", + "Japan" : "Ιαπωνία", + "Kenya" : "Κένυα", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Κορέα, Λαϊκή Δημοκρατία της", + "Korea, Republic of" : "Δημοκρατία της Κορέας", + "Kuwait" : "κουβέιτ", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Καζακστάν", + "Lao People's Democratic Republic" : "Λαϊκή Δημοκρατία του Λάος", + "Lebanon" : "Λίβανος", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Λιχτενστάιν", + "Sri Lanka" : "Σρι Λάνκα", + "Liberia" : "Λιβερία", + "Lesotho" : "Λεσότο", + "Lithuania" : "Λιθουανία", + "Luxembourg" : "Λουξεμβούργο", + "Latvia" : "Λετονία", + "Libya" : "Λιβύη", + "Morocco" : "Μαρόκο", + "Monaco" : "Μονακό", + "Moldova, Republic of" : "Δημοκρατία της Μολδαβίας", + "Montenegro" : "Μαυροβούνιο", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Μαδαγασκάρη", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Δημοκρατία της Βόρειας Μακεδονίας", + "Mali" : "Μάλι", + "Myanmar" : "Myanmar", + "Mongolia" : "Μογγολία", + "Macao" : "Μακάο", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Μαρτινίκα", + "Mauritania" : "Μαυριτανία", + "Montserrat" : "Montserrat", + "Malta" : "Μάλτα", + "Mauritius" : "Μαυρίκιος", + "Maldives" : "Μαλδίβες", + "Malawi" : "Μαλάουι", + "Mexico" : "Μεξικό", + "Malaysia" : "Μαλαισία", + "Mozambique" : "Μοζαμβίκη", + "Namibia" : "Ναμίμπια", + "New Caledonia" : "New Caledonia", + "Niger" : "Νίγηρα", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Νιγηρία", + "Nicaragua" : "Νικαράγουα", + "Netherlands" : "Ολλανδία", + "Norway" : "Νορβηγία", + "Nepal" : "Νεπάλ", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Νέα Ζηλανδία", + "Oman" : "Ομάν", + "Panama" : "Παναμάς", + "Peru" : "Περού", + "French Polynesia" : "Γαλλική Πολυνησία", + "Papua New Guinea" : "Παπούα Νέα Γουινέα", + "Philippines" : "Φιλιππίνες", + "Pakistan" : "Πακιστάν", + "Poland" : "Πολωνία", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Πόρτο Ρίκο", + "Palestine, State of" : "Παλαιστίνη, Κράτος της", + "Portugal" : "Πορτογαλία", + "Palau" : "Palau", + "Paraguay" : "Παραγουάη", + "Qatar" : "Κατάρ", + "Réunion" : "Réunion", + "Romania" : "Ρουμανία", + "Serbia" : "Σερβία", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Ρουάντα", + "Saudi Arabia" : "Σαουδική Αραβία", + "Solomon Islands" : "Νησιά Σολομώντα", + "Seychelles" : "Σεϊχέλες", + "Sudan" : "Σουδάν", + "Sweden" : "Σουηδία", + "Singapore" : "Σιγκαπούρη", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Σλοβενία", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Σλοβακία", + "Sierra Leone" : "Σιέρα Λεόνε", + "San Marino" : "Σαν Μαρίνο", + "Senegal" : "Σενεγάλη", + "Somalia" : "Σομαλία", + "Suriname" : "Σουρινάμ", + "South Sudan" : "Νότιο Σουδάν", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "Ελ Σαλβαδόρ", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "Γαλλικά νότια εδάφη", + "Togo" : "Togo", + "Thailand" : "Ταϊλάνδη", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Τουρκμενιστάν", + "Tunisia" : "Τυνησία", + "Tonga" : "Tonga", + "Turkey" : "Τουρκία", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Τουβάλου", + "Taiwan, Province of China" : "Ταϊβάν, επαρχία της Κίνας", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ουκρανία", + "Uganda" : "Ουγκάντα", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Ουρουγουάη", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Βενεζουέλα, Δημοκρατία της Βολιβίας της", + "Virgin Islands, British" : "Παρθένοι Νήσοι, Βρετανικοί", + "Virgin Islands, U.S." : "Παρθένοι Νήσοι, ΗΠΑ", + "Viet Nam" : "Βιετνάμ", + "Vanuatu" : "Βανουάτου", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Σαμόα", + "Yemen" : "Υεμένη", + "Mayotte" : "Mayotte", + "South Africa" : "Νότιος Αφρική", + "Zambia" : "Ζάμπια", + "Zimbabwe" : "Ζιμπάμπουε", + "Background blur" : "Θόλωση φόντου", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Δεν ήταν δυνατός ο έλεγχος υποστήριξης φόρτωσης WASM. Παρακαλώ ελέγξτε χειροκίνητα αν ο διακομιστής ιστού σας εξυπηρετεί αρχεία `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ο διακομιστής ιστού σας δεν είναι σωστά ρυθμισμένος για παράδοση αρχείων `.wasm`. Αυτό είναι τυπικά ένα ζήτημα με τη ρύθμιση του Nginx. Για τη θόλωση φόντου χρειάζεται μια προσαρμογή για να παραδίδει επίσης αρχεία `.wasm`. Συγκρίνετε τη ρύθμιση του Nginx σας με τη συνιστώμενη ρύθμιση στην τεκμηρίωσή μας.", + "Talk configuration values" : "Τιμές ρύθμισης του Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Η εξαναγκασμένη διάρκεια κλήσης υποστηρίζεται μόνο με system cron. Παρακαλώ ενεργοποιήστε το system cron ή αφαιρέστε τη ρύθμιση `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Οι μικρές τιμές `max_call_duration` (τώρα ρυθμισμένες σε %d) δεν είναι επιβλητές λόγω τεχνικών περιορισμών. Η εργασία παρασκηνίου εκτελείται μόνο κάθε 5 λεπτά, οπότε χρησιμοποιήστε με δική σας ευθύνη.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Συνιστάται ιδιαίτερα η ρύθμιση του \"memcache.locking\" όταν το Talk Federation είναι ενεργοποιημένο.", + "High-performance backend" : "Backend υψηλής απόδοσης", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Δεν έχει ρυθμιστεί backend υψηλής απόδοσης - Η λειτουργία του Nextcloud Talk χωρίς το backend υψηλής απόδοσης κλιμακώνεται μόνο για πολύ μικρές κλήσεις (μέγ. 2-3 συμμετέχοντες). Παρακαλώ ρυθμίστε το backend υψηλής απόδοσης για να διασφαλίσετε ότι οι κλήσεις με πολλαπλούς συμμετέχοντες λειτουργούν απρόσκοπτα.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Η λειτουργία \"conversation_cluster\" του backend υψηλής απόδοσης είναι παρωχημένη και δεν θα υποστηρίζεται πλέον στην επερχόμενη έκδοση. Το Backend υψηλής απόδοσης υποστηρίζει πραγματική συστοιχία σήμερα η οποία θα πρέπει να χρησιμοποιηθεί αντ' αυτού.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Ο ορισμός πολλαπλών backends υψηλής απόδοσης είναι παρωχημένος και δεν θα υποστηρίζεται πλέον στην επερχόμενη έκδοση. Αντ' αυτού, θα πρέπει να ρυθμιστεί ένας load-balancer μαζί με συστοιχία διακομιστών σηματοδότησης και να ρυθμιστεί στις ρυθμίσεις του Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Το αποθηκευμένο δημόσιο κλειδί για τον αλγόριθμο %1$s που χρησιμοποιείται δεν ταιριάζει με το αποθηκευμένο ιδιωτικό κλειδί. Εκτελέστε %2$s για να διορθώσετε το ζήτημα.", + "High-performance backend not configured correctly. Run %s for details." : "Το backend υψηλής απόδοσης δεν είναι σωστά ρυθμισμένο. Εκτελέστε %s για λεπτομέρειες.", + "High-performance backend not configured correctly" : "Το backend υψηλής απόδοσης δεν είναι σωστά ρυθμισμένο", + "Error: Cannot connect to server" : "Σφάλμα: Αδυναμία σύνδεσης στο διακομιστή", + "Error: Server did not respond with proper JSON" : "Σφάλμα: Ο διακομιστής ανταποκρίθηκε με λάθος JSON", + "Error: Certificate expired" : "Σφάλμα: Το πιστοποιητικό έληξε", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Σφάλμα: Οι χρόνοι συστήματος του διακομιστή Nextcloud και του διακομιστή backend υψηλής απόδοσης δεν είναι συγχρονισμένοι. Παρακαλώ βεβαιωθείτε ότι και οι δύο διακομιστές είναι συνδεδεμένοι σε έναν διακομιστή χρόνου ή συγχρονίστε χειροκίνητα τον χρόνο τους.", + "Could not get version" : "Δεν ήταν δυνατή η λήψη της έκδοσης", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Σφάλμα: Έκδοση που εκτελείται: {version}; Ο διακομιστής πρέπει να ενημερωθεί για να είναι συμβατός με αυτή την έκδοση του Talk", + "Error: Server responded with: {error}" : "Σφάλμα: Ο διακομιστής απάντησε με: {error}", + "Error: Unknown error occurred" : "Σφάλμα: Παρουσιάστηκε άγνωστο σφάλμα", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Προειδοποίηση: Έκδοση που εκτελείται: {version}; Ο διακομιστής δεν υποστηρίζει όλες τις λειτουργίες αυτής της έκδοσης Talk, λείπουν λειτουργίες: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Συνιστάται ιδιαίτερα η ρύθμιση μιας μνήμης cache όταν εκτελείτε το Nextcloud Talk με ένα backend υψηλής απόδοσης.", + "Client Push" : "Client Push", + "Recording backend" : "Backend εγγραφής", + "Using the recording backend requires a High-performance backend." : "Η χρήση του backend εγγραφής απαιτεί ένα backend υψηλής απόδοσης.", + "No recording backend configured" : "Δεν έχει ρυθμιστεί backend εγγραφής", + "SIP configuration" : "Διαμόρφωση SIP", + "Using the SIP functionality requires a High-performance backend." : "Η χρήση της λειτουργικότητας SIP απαιτεί ένα backend υψηλής απόδοσης.", + "No SIP backend configured" : "Δεν έχει ρυθμιστεί backend SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Μη έγκυρη ημερομηνία, η μορφή της ημερομηνίας πρέπει να είναι YYYY-MM-DD", + "Conversation not found" : "Η συζήτηση δεν βρέθηκε", + "Path is already shared with this conversation" : "Η διαδρομή είναι ήδη κοινόχρηστη με αυτή τη συνομιλία", + "Chat, video & audio-conferencing using WebRTC" : "Συνομιλία, βίντεο & διάσκεψη ήχου χρησιμοποιώντας WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Συνομιλία, βίντεο & διάσκεψη ήχου χρησιμοποιώντας WebRTC\n\n* 💬 **Συνομιλία** Το Nextcloud Talk έρχεται με μια απλή συνομιλία κειμένου, επιτρέποντάς σας να μοιραστείτε ή να μεταφορτώσετε αρχεία από την εφαρμογή Nextcloud Files ή την τοπική συσκευή σας και να αναφέρετε άλλους συμμετέχοντες.\n* 👥 **Ιδιωτικές, ομαδικές, δημόσιες και κωδικοπροστατευμένες κλήσεις!** Προσκαλέστε κάποιον, μια ολόκληρη ομάδα ή στείλτε έναν δημόσιο σύνδεσμο για πρόσκληση σε κλήση.\n* 🌐 **Federated συνομιλίες** Συνομιλήστε με άλλους χρήστες Nextcloud στους διακομιστές τους\n* 💻 **Κοινή χρήση οθόνης!** Μοιραστείτε την οθόνη σας με τους συμμετέχοντες της κλήσης σας.\n* 🚀 **Ενσωμάτωση με άλλες εφαρμογές Nextcloud** όπως Αρχεία, Ημερολόγιο, Κατάσταση χρήστη, Πίνακας ελέγχου, Flow, Χάρτες, Έξυπνος επιλογέας, Επαφές, Deck, και πολλά άλλα.\n* 🌉 **Συγχρονισμός με άλλες λύσεις συνομιλιών** Με το [Matterbridge](https://github.com/42wim/matterbridge/) να είναι ενσωματωμένο στο Talk, μπορείτε εύκολα να συγχρονίσετε πολλές άλλες λύσεις συνομιλιών με το Nextcloud Talk και αντίστροφα.", + "Leave call" : "Αποχώρηση από την κλήση", + "Navigating away from the page will leave the call in {conversation}" : "Η απομάκρυνση από την σελίδα θα αφήσει την κλήση σε {conversation}", + "Stay in call" : "Παραμονή σε κλήση", + "Error occurred when getting the conversation information" : "Παρουσιάστηκε σφάλμα κατά τη λήψη των πληροφοριών συνομιλίας", + "Discuss this file" : "Συζήτηση γι αυτό το αρχείο", + "Share this file with others to discuss it" : "Κοινή χρήση του αρχείου για σχολιασμό του", + "Share this file" : "Κοινή χρήση του αρχείου", + "Join conversation" : "Συμμετοχή στη συνομιλία", + "This conversation is password-protected." : "Αυτή η συνομιλία προστατεύεται με κωδικό.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Εντοπίσαμε πολλές αποτυχημένες προσπάθειες εισαγωγής κωδικού από τη διεύθυνση IP σας. Για αυτό το λόγο, η επόμενη προσπάθειά σας θα καθυστερήσει έως και 30 δευτερόλεπτα.", + "The password is wrong. Try again." : "Το συνθηματικό είναι λανθασμένο. Δοκιμάστε ξανά.", + "Password" : "Συνθηματικό", + "Submit" : "Υποβολή", + "Error requesting the password." : ".Σφάλμα αίτησης κωδικού πρόσβασης.", + "Request password" : "Αίτηση κωδικού πρόσβασης", + "This conversation has ended" : "Η συνομιλία τερματίστηκε", + "Error occurred when joining the conversation" : "Παρουσιάστηκε σφάλμα κατά τη συμμετοχή στη συνομιλία", + "Close Talk sidebar" : "Κλείσιμο πλαϊνής γραμμής Talk", + "Open Talk sidebar" : "Άνοιγμα πλαϊνής γραμμής Talk", + "Everyone" : "Όλοι", + "Users and moderators" : "Χρήστες και συντονιστές", + "Moderators only" : "Συντονιστές μόνο", + "Disable calls" : "Απενεργοποίηση κλήσεων", + "Save changes" : "Αποθήκευση αλλαγών", + "Saving …" : "Αποθηκεύεται …", + "Saved!" : "Αποθηκεύτηκε!", + "Limit to groups" : "Περιορισμός σε ομάδες", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Όταν επιλεγεί μία ομάδα, μόνο τα μέλη της μπορούν να συμμετέχουν.", + "Guests can still join public conversations." : "Οι επισκέπτες μπορούν ακόμη να συμμετέχουν σε συνομιλίες.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Οι χρήστες που δεν μπορούν πλέον να χρησιμοποιήσουν το Talk θα παραμείνουν στη λίστα συμμετεχόντων στις προηγούμενες συνομιλίες τους και τα μηνύματα συνομιλίας τους θα διατηρηθούν.", + "Limit using Talk" : "Περιορισμός χρήσης του Talk", + "Limit creating a public and group conversation" : "Περιορισμός δημιουργίας δημόσιων και ομαδικών συζητήσεων", + "Limit creating conversations" : "Περιορισμός δημιουργίας συζητήσεων", + "Limit starting a call" : "Περιορισμός έναρξης κλήσης", + "Limit starting calls" : "Περιορισμός έναρξης κλήσεων", + "When a call has started, everyone with access to the conversation can join the call." : "Όταν ξεκινήσει μια κλήση, οποιοσδήποτε με πρόσβαση στην συνομιλία μπορεί να συμμετέχει στην κλήση.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Τα ακόλουθα bots είναι εγκατεστημένα σε αυτόν τον διακομιστή. Στην τεκμηρίωση μπορείτε να βρείτε λεπτομέρειες για το πώς να {linkstart1}δημιουργήσετε το δικό σας bot{linkend} ή μια {linkstart2}λίστα bots{linkend} για ενεργοποίηση στο διακομιστή σας.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Δεν υπάρχουν bots εγκατεστημένα σε αυτόν τον διακομιστή. Στην τεκμηρίωση μπορείτε να βρείτε λεπτομέρειες για το πώς να {linkstart1}δημιουργήσετε το δικό σας bot{linkend} ή μια {linkstart2}λίστα bots{linkend} για ενεργοποίηση στο διακομιστή σας.", + "Description is not provided" : "Δεν παρέχεται περιγραφή", + "Locked for moderators" : "Κλειδωμένο για συντονιστές", + "Enabled" : "Ενεργοποιημένο", + "Disabled" : "Απενεργοποιημένο", + "Bots settings" : "Ρυθμίσεις bots", + "State" : "Κατάσταση", + "Name" : "Όνομα", + "Last error" : "Τελευταίο σφάλμα", + "Total errors count" : "Συνολικός αριθμός σφαλμάτων", + "Find more bots" : "Εύρεση περισσότερων bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Οι έμπιστοι διακομιστές μπορούν να ρυθμιστούν στη σελίδα {linkstart}ρυθμίσεων κοινής χρήσης{linkend}.", + "Beta" : "Δοκιμαστικό", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Οι federated συνομιλίες και κλήσεις λειτουργούν ήδη. Η διαχείριση συνημμένων θα έρθει σε μια μελλοντική έκδοση.", + "Enable Federation in Talk app" : "Ενεργοποίηση Federation στην εφαρμογή Talk", + "Permissions" : "Δικαιώματα", + "Allow users to be invited to federated conversations" : "Να επιτρέπεται στους χρήστες να προσκαλούνται σε federated συνομιλίες", + "Allow users to invite federated users into conversation" : "Να επιτρέπεται στους χρήστες να προσκαλούν federated χρήστες σε συνομιλία", + "Only allow to federate with trusted servers" : "Να επιτρέπεται η federation μόνο με έμπιστους διακομιστές", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Όταν επιλεγεί τουλάχιστον μία ομάδα, μόνο τα άτομα των καταχωρημένων ομάδων μπορούν να προσκαλούν federated χρήστες σε συνομιλίες.", + "Groups allowed to invite federated users" : "Ομάδες που επιτρέπεται να προσκαλούν federated χρήστες", + "Select groups …" : "Επιλογή ομάδων …", + "All messages" : "Όλα τα μηνύματα", + "@-mentions only" : "@-mentions μόνο", + "Off" : "Απενεργοποίηση ", + "General settings" : "Γενικές ρυθμίσεις", + "Default notification settings" : "Προεπιλεγμένες ρυθμίσεις ειδοποιήσεων", + "Default group notification" : "Προεπιλεγμένη ομάδα ειδοποιήσεων", + "Default group notification for new groups" : "Προεπιλεγμένη ομάδα ειδοποιήσεων για νέες ομάδες", + "Integration into other apps" : "Ενσωμάτωση σε άλλες εφαρμογές", + "Allow conversations on files" : "Να επιτρέπονται συζητήσεις σε αρχεία", + "Allow conversations on public shares for files" : "Να επιτρέπονται συνομιλίες για δημόσια διαμοιρασμένα αρχεία", + "End-to-end encrypted calls" : "Κρυπτογραφημένες κλήσεις end-to-end", + "Enable encryption" : "Ενεργοποίηση κρυπτογράφησης", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Οι κρυπτογραφημένες κλήσεις end-to-end με ρυθμισμένη γέφυρα SIP απαιτούν νεότερη έκδοση του backend υψηλής απόδοσης και της γέφυρας SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Οι εφαρμογές για κινητές συσκευές προς το παρόν δεν υποστηρίζουν κρυπτογραφημένες κλήσεις από άκρο σε άκρο.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Κάνοντας κλικ στο κουμπί πάνω από τις πληροφορίες στη φόρμα γίνεται αποστολή στους διακομιστές της Struktur AG. Μπορείτε να βρείτε περισσότερες πληροφορίες στη διεύθυνση {linkstart}spreed.eu{linkend}.", + "Pending" : "Εκκρεμεί", + "Error" : "Σφάλμα", + "Blocked" : "Αποκλεισμένος", + "Active" : "Ενεργό", + "Expired" : "Έληξε", + "Never" : "Ποτέ", + "The trial could not be requested. Please try again later." : "Δεν ήταν δυνατή η αίτηση της δοκιμής. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "The account could not be deleted. Please try again later." : "Δεν ήταν δυνατή η διαγραφή του λογαριασμού. Παρακαλούμε δοκιμάστε ξανά αργότερα.", + "Hosted High-performance backend" : "Φιλοξενούμενο backend υψηλής απόδοσης", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Ο συνεργάτης μας Struktur AG παρέχει μια υπηρεσία όπου μπορεί να ζητηθεί ένας φιλοξενούμενος διακομιστής σηματοδότησης. Για αυτό πρέπει να συμπληρώσετε μόνο την παρακάτω φόρμα και το Nextcloud θα το ζητήσει. Μόλις ο διακομιστής ρυθμιστεί για εσάς, τα διαπιστευτήρια θα συμπληρωθούν αυτόματα. Αυτό θα αντικαταστήσει τις υπάρχουσες ρυθμίσεις διακομιστή σηματοδότησης.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Εάν ο λογαριασμός του backend υψηλής απόδοσής σας περιλαμβάνει λειτουργικότητα STUN και/ή TURN, οι ρυθμίσεις θα ενημερωθούν αναλόγως.", + "URL of this Nextcloud instance" : "Διεύθυνση URL αυτής της εγκατάστασης Nextcloud", + "Full name of the user requesting the trial" : "Πλήρες όνομα του χρήστη που αιτείται την δοκιμή", + "Email of the user" : "Το email του χρήστη", + "Language" : "Γλώσσα", + "Country" : "Χώρα", + "Request signaling server trial" : "Αίτηση δοκιμής διακομιστή σηματοδότησης", + "You can see the current status of your hosted signaling server in the following table." : "Μπορείτε να δείτε την τρέχουσα κατάσταση του φιλοξενούμενου διακομιστή σηματοδότησης σας στον παρακάτω πίνακα.", + "Status" : "Κατάσταση", + "Created at" : "Έχει δημιουργηθεί στις", + "Expires at" : "Λήγει στις", + "Limits" : "Όρια", + "STUN included" : "Ο STUN περιλαμβάνεται", + "Yes" : "Ναι", + "No" : "Όχι", + "TURN included" : "Ο TURN περιλαμβάνεται", + "Delete the signaling server account" : "Διαγραφή του λογαριασμού διακομιστή σηματοδότησης", + "_%n user_::_%n users_" : ["%n χρήστης","%n χρήστες"], + "Installed version: {version}" : "Εγκατεστημένη έκδοση: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Μπορείτε να εγκαταστήσετε το Matterbridge για να συνδέσετε το Nextcloud Talk με άλλες υπηρεσίες, επισκεφτείτε τη {linkstart1}σελίδα GitHub{linkend} τους για περισσότερες λεπτομέρειες. Η λήψη και η εγκατάσταση της εφαρμογής μπορεί να πάρει λίγο χρόνο. Σε περίπτωση που λήξει το χρονικό όριο, παρακαλώ εγκαταστήστε το χειροκίνητα από το {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Το δυαδικό Matterbridge έχει εσφαλμένα δικαιώματα. Παρακαλώ βεβαιωθείτε ότι το δυαδικό αρχείο Matterbridge ανήκει στον σωστό χρήστη και μπορεί να εκτελεστεί. Μπορεί να βρεθεί στο \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Το δυαδικό Matterbridge δεν βρέθηκε ή δεν ήταν δυνατό να εκτελεστεί.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Μπορείτε επίσης να ορίσετε τη διαδρομή προς το δυαδικό Matterbridge χειροκίνητα μέσω του config. Ανατρέξτε στην {linkstart} τεκμηρίωση ενσωμάτωσης Matterbridge {linkend} για περισσότερες πληροφορίες.", + "Downloading …" : "Γίνεται λήψη ...", + "Install Talk Matterbridge" : "Εγκατάσταση του Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Παρουσιάστηκε σφάλμα κατά την εγκατάσταση της εφαρμογής Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Παρουσιάστηκε σφάλμα κατά την εγκατάσταση της εφαρμογής Talk Matterbridge.Παρακαλούμε εγκαταστήστε την χειροκίνητα.", + "Failed to execute Matterbridge binary." : "Η εκτέλεση του αλγόριθμου του Matterbridge επέτυχε.", + "Matterbridge integration" : "Ενσωμάτωση του Matterbridge", + "Enable Matterbridge integration" : "Ενεργοποίηση της ενσωμάτωσης του Matterbridge", + "Status: Checking connection" : "Κατάσταση: Έλεγχος σύνδεσης", + "OK: Running version: {version}" : "OK: Τρέχουσα έκδοση: {version}", + "Error: Server seems to be a Signaling server" : "Σφάλμα: Ο διακομιστής φαίνεται να είναι διακομιστής σηματοδότησης", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Σφάλμα: Οι ώρες συστήματος του διακομιστή Nextcloud και του διακομιστή backend εγγραφής δεν είναι συγχρονισμένες. Βεβαιωθείτε ότι και οι δύο διακομιστές είναι συνδεδεμένοι σε έναν διακομιστή ώρας ή συγχρονίστε χειροκίνητα την ώρα τους.", + "Recording backend URL" : "URL καταγραφής backend", + "Validate SSL certificate" : "Επικυρώστε το πιστοποιητικό SSL", + "Delete this server" : "Διαγραφή διακομιστή", + "Test this server" : "Δοκιμή αυτού του διακομιστή", + "Disabled for all calls" : "Απενεργοποιημένο για όλες τις κλήσεις", + "Enabled for all calls" : "Ενεργοποιημένο για όλες τις κλήσεις", + "Configurable on conversation level by moderators" : "Προσαρμόσιμο σε επίπεδο συνομιλίας από τους συντονιστές", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Οι ρυθμίσεις PHP \"upload_max_filesize\" ή \"post_max_size\" θα επιτρέψουν τη μεταφόρτωση αρχείων μέχρι {maxUpload}.", + "Recording backend settings saved" : "Οι ρυθμίσεις του backend εγγραφής αποθηκεύτηκαν", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Οι συντονιστές θα επιτρέπεται να ενεργοποιούν τη συγκατάθεση σε επίπεδο συνομιλίας. Η συγκατάθεση για εγγραφή θα απαιτείται από κάθε συμμετέχοντα πριν από τη συμμετοχή σε κάθε κλήση σε αυτή τη συνομιλία.", + "The consent to be recorded will be required for each participant before joining every call." : "Η συγκατάθεση για εγγραφή θα απαιτείται από κάθε συμμετέχοντα πριν από τη συμμετοχή σε κάθε κλήση.", + "The consent to be recorded is not required." : "Δεν απαιτείται συγκατάθεση για εγγραφή.", + "Recording backend configuration is only possible with a High-performance backend." : "Η ρύθμιση του backend εγγραφής είναι δυνατή μόνο με ένα backend υψηλής απόδοσης.", + "Add a new recording backend server" : "Προσθήκη νέου διακομιστή backend εγγραφής", + "Shared secret" : "Διαμοιρασμένο μυστικό", + "Recording consent" : "Συγκατάθεση εγγραφής", + "Recording transcription" : "Μεταγραφή εγγραφής", + "Automatically transcribe call recordings with a transcription provider" : "Αυτόματη μεταγραφή εγγραφών κλήσεων με πάροχο μεταγραφής", + "Automatically summarize call recordings with transcription and summary providers" : "Αυτόματη σύνταξη σύνοψης εγγραφών κλήσεων με παρόχους μεταγραφής και σύνοψης", + "SIP configuration saved!" : "Η διαμόρφωση SIP αποθηκεύτηκε!", + "SIP configuration is only possible with a High-performance backend." : "Η διαμόρφωση SIP είναι δυνατή μόνο με ένα backend υψηλής απόδοσης.", + "Enable SIP Dial-out option" : "Ενεργοποίηση επιλογής SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Ο διακομιστής σηματοδότησης πρέπει να ενημερωθεί για να υποστηρίζει τη λειτουργία SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Να μην εμφανίζεται ο αριθμός καλούντος SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Ο ανώνυμος αριθμός θα πρέπει να εμφανίζεται ως \"άγνωστος\" ή \"αποκλεισμένος αριθμός\" στον παραλήπτη της κλήσης", + "Dial-out number" : "Αριθμός Dial-out", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Αριθμός μορφοποιημένος E164 που χρησιμοποιείται ως εφεδρικός αριθμός καλούντος για εξερχόμενες κλήσεις", + "Dial-out prefix" : "Πρόθεμα Dial-out", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Πρόθεμα για τον ρυθμισμένο αριθμό χρήστη για εξερχόμενες κλήσεις (προεπιλογή είναι `+`)", + "Restrict SIP configuration" : "Περιορίστε τη διαμόρφωση SIP", + "Enable SIP configuration" : "Ενεργοποίηση διαμόρφωσης SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Μόνο οι χρήστες των ακόλουθων ομάδων μπορούν να ενεργοποιήσουν το SIP σε συνομιλίες που εποπτεύουν.", + "Phone number (Country)" : "Αριθμός τηλεφώνου (Χώρα)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Αυτές οι πληροφορίες αποστέλλονται σε email πρόσκλησης καθώς και παρουσιάζονται στην πλευρική γραμμή σε όλους τους συμμετέχοντες.", + "Nextcloud base URL" : "Βασική διεύθυνση URL Nextcloud", + "Talk Backend URL" : "Διεύθυνση URL Backend Talk", + "WebSocket URL" : "Διεύθυνση URL WebSocket", + "Available features" : "Διαθέσιμες λειτουργίες", + "Error: Websocket connection failed" : "Σφάλμα: Αποτυχία σύνδεσης WebSocket", + "Error code" : "Σφάλμα κωδικού", + "Error message" : "Μήνυμα σφάλματος", + "Error: Websocket connection failed. Check browser console" : "Σφάλμα: Αποτυχία σύνδεσης WebSocket. Ελέγξτε την κονσόλα του προγράμματος περιήγησης", + "High-performance backend URL" : "Διεύθυνση URL backend υψηλής απόδοσης", + "Missing High-performance backend warning hidden" : "Η προειδοποίηση για το ελλειπόμενο backend υψηλής απόδοσης αποκρύφθηκε", + "High-performance backend settings saved" : "Οι ρυθμίσεις του backend υψηλής απόδοσης αποθηκεύτηκαν", + "Nextcloud Talk setup not complete" : "Η ρύθμιση του Nextcloud Talk δεν είναι πλήρης", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Παρακαλώ σημειώστε ότι σε κλήσεις με περισσότερους από 2 συμμετέχοντες χωρίς το backend υψηλής απόδοσης, οι συμμετέχοντες πιθανότατα θα αντιμετωπίσουν προβλήματα σύνδεσης και θα προκαλέσουν υψηλό φόρτο στις συμμετέχουσες συσκευές.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Εγκαταστήστε το backend υψηλής απόδοσης για να διασφαλίσετε ότι οι κλήσεις με πολλαπλούς συμμετέχοντες λειτουργούν απρόσκοπτα.", + "Nextcloud portal" : "Πύλη Nextcloud", + "Quick installation guide" : "Γρήγορος οδηγός εγκατάστασης", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Το backend υψηλής απόδοσης απαιτείται για κλήσεις και συνομιλίες με πολλαπλούς συμμετέχοντες. Χωρίς το backend, όλοι οι συμμετέχοντες πρέπει να μεταφορτώσουν το δικό τους βίντεο ατομικά για κάθε άλλο συμμετέχοντα, κάτι που πιθανότατα θα προκαλέσει προβλήματα σύνδεσης και υψηλό φόρτο στις συμμετέχουσες συσκευές.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Συνιστάται ιδιαίτερα η ρύθμιση μιας κατανεμημένης cache όταν χρησιμοποιείτε το Nextcloud Talk με ένα backend υψηλής απόδοσης.", + "Add High-performance backend server" : "Προσθήκη διακομιστή backend υψηλής απόδοσης", + "Warn about connectivity issues in calls with more than 2 participants" : "Προειδοποίηση για προβλήματα σύνδεσης σε κλήσεις με περισσότερους από 2 συμμετέχοντες", + "STUN server URL" : "URL διακομιστή STUN", + "The server address is invalid" : "Η διεύθυνση του διακομιστή είναι μη έγκυρη", + "STUN settings saved" : "Οι ρυθμίσεις STUN αποθηκεύτηκαν", + "STUN servers" : "Διακομιστές STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Ένας διακομιστής STUN χρησιμοποιείται για τον καθορισμό της δημόσιας διεύθυνσης IP των συμμετεχόντων πίσω από ένα δρομολογητή.", + "Add a new STUN server" : "Προσθήκη νέου διακομιστή STUN", + "{schema} scheme must be used with a domain" : "Το σχήμα {schema} πρέπει να χρησιμοποιείται με έναν domain", + "{option1} and {option2}" : "{option1} και {option2}", + "{option} only" : "μόνο {option}", + "OK: Successful ICE candidates returned by the TURN server" : "ΟΚ: Επιτυχής ανταλλαγή πληροφοριών ICE από τον διακομιστή TURN", + "Error: No working ICE candidates returned by the TURN server" : "Σφάλμα: Μη επιτυχής ανταλλαγή πληροφοριών ICE από τον διακομιστή TURN", + "Testing whether the TURN server returns ICE candidates" : "Δοκιμή ασχέτως εάν ο διακομιστής TURN παρέχει πληροφορίες ICE", + "TURN server schemes" : "Σχήματα διακομιστή TURN", + "TURN server URL" : "URL διακομιστή TURN", + "TURN server secret" : "Μυστικό του διακομιστή TURN", + "TURN server protocols" : "Πρωτόκολλα διακομιστή TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Ένας διακομιστής TURN χρησιμοποιείται για να διαμεσολαβεί την κίνηση από συμμετέχοντες πίσω από ένα firewall. Εάν μεμονωμένοι συμμετέχοντες δεν μπορούν να συνδεθούν με άλλους, πιθανότατα απαιτείται διακομιστής TURN. Δείτε {linkstart}αυτή την τεκμηρίωση{linkend} για οδηγίες ρύθμισης.", + "TURN settings saved" : "Οι ρυθμίσεις TURN αποθηκεύτηκαν", + "TURN servers" : "Διακομιστές TURN", + "Add a new TURN server" : "Προσθήκη νέου διακομιστή TURN", + "Failed" : "Απέτυχε", + "OK" : "OK", + "Checking …" : "Έλεγχος …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Απέτυχε: Το WebAssembly είναι απενεργοποιημένο ή δεν υποστηρίζεται σε αυτό το πρόγραμμα περιήγησης. Παρακαλώ ενεργοποιήστε το WebAssembly ή χρησιμοποιήστε ένα πρόγραμμα περιήγησης με υποστήριξη για να κάνετε τον έλεγχο.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Απέτυχε: Τα αρχεία \".wasm\" και \".tflite\" δεν επέστρεψαν σωστά από τον διακομιστή ιστού. Παρακαλώ ελέγξτε την ενότητα \"Απαιτήσεις συστήματος\" στην τεκμηρίωση Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Τα αρχεία \".wasm\" και \".tflite\" επέστρεψαν σωστά από τον διακομιστή ιστού.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Φαίνεται ότι η διαμόρφωση PHP και Apache δεν είναι συμβατή. Παρακαλώ σημειώστε ότι το PHP μπορεί να χρησιμοποιηθεί μόνο με την ενότητα MPM_PREFORK και το PHP-FPM μπορεί να χρησιμοποιηθεί μόνο με την ενότητα MPM_EVENT.", + "Web server setup checks" : "Έλεγχοι ρύθμισης διακομιστή ιστού", + "Files required for virtual background can be loaded" : "Τα αρχεία που απαιτούνται για εικονικό φόντο μπορούν να φορτωθούν", + "Federated user" : "Federated χρήστης", + "Assign participants to rooms" : "Ανάθεση συμμετεχόντων σε δωμάτια", + "Configure breakout rooms" : "Διαμόρφωση δωματίων ομάδων", + "Number of breakout rooms" : "Αριθμός δωματίων ομάδων", + "You can create from 1 to 20 breakout rooms." : "Μπορείτε να δημιουργήσετε από 1 έως 20 δωμάτια ομάδων.", + "Assignment method" : "Μέθοδος ανάθεσης", + "Automatically assign participants" : "Αυτόματη ανάθεση συμμετεχόντων", + "Manually assign participants" : "Χειροκίνητη ανάθεση συμμετεχόντων", + "Allow participants to choose" : "Να επιτρέπεται στους συμμετέχοντες να επιλέγουν", + "Create rooms" : "Δημιουργία δωματίων", + "Confirm" : "Επιβεβαίωση", + "Create breakout rooms" : "Δημιουργία δωματίων ομάδων", + "Reset" : "Επαναφορά", + "Delete breakout rooms" : "Διαγραφή δωματίων διάσπασης", + "Room {roomNumber}" : "Δωμάτιο {roomNumber}", + "Current breakout rooms and settings will be lost" : "Τα τρέχοντα δωμάτια διάσπασης και οι ρυθμίσεις θα χαθούν", + "Cancel" : "Ακύρωση", + "Unassigned participants" : "Μη αντιστοιχισμένοι συμμετέχοντες", + "Back" : "Πίσω", + "Assign" : "Αντιστοίχιση", + "Add participant \"{user}\"" : "Προσθήκη συμμετέχοντος \"{user}\"", + "Now" : "Τώρα", + "Invalid calendar selected" : "Επιλέχθηκε μη έγκυρο ημερολόγιο", + "Invalid start time selected" : "Επιλέχθηκε μη έγκυρη ώρα έναρξης", + "Invalid end time selected" : "Επιλέχθηκε μη έγκυρη ώρα λήξης", + "Unknown error occurred" : "Παρουσιάστηκε άγνωστο σφάλμα", + "Sending no invitations" : "Δεν αποστέλλονται προσκλήσεις", + "{participant0} will receive an invitation" : "Ο/Η {participant0} θα λάβει πρόσκληση", + "{participant0} and {participant1} will receive invitations" : "Ο/Η {participant0} και ο/η {participant1} θα λάβουν προσκλήσεις", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["Ο/Η {participant0}, ο/η {participant1} και %n ακόμα θα λάβουν προσκλήσεις","Ο/Η {participant0}, ο/η {participant1} και %n ακόμα θα λάβουν προσκλήσεις"], + "Invite {user}" : "Πρόσκληση {user}", + "Invite all users and emails in this conversation" : "Πρόσκληση όλων των χρηστών και email σε αυτή τη συνομιλία", + "Meeting created" : "Η συνάντηση δημιουργήθηκε", + "Upcoming meetings" : "Προσεχείς συναντήσεις", + "Loading …" : "Φόρτωση…", + "No upcoming meetings" : "Δεν υπάρχουν προσεχείς συναντήσεις", + "Schedule a meeting" : "Προγραμματισμός συνάντησης", + "Meeting title" : "Τίτλος συνάντησης", + "From" : "Από", + "To" : "Έως", + "Calendar" : "Ημερολόγιο", + "Attendees" : "Συμμετέχοντες", + "No other participants to send invitations to." : "Δεν υπάρχουν άλλοι συμμετέχοντες για αποστολή προσκλήσεων.", + "Add attendees" : "Προσθήκη συμμετεχόντων", + "Save" : "Αποθήκευση", + "Search participants" : "Αναζήτηση συμμετεχόντων", + "No results" : "Κανένα αποτέλεσμα", + "Done" : "Ολοκληρώθηκε", + "Disable live transcription" : "Απενεργοποίηση ζωντανής μεταγραφής", + "Raise hand" : "Σήκωμα χεριού", + "Raise hand (R)" : "Σήκωμα χεριού (R)", + "Lower hand" : "Κατέβασμα χεριού", + "Lower hand (R)" : "Κατέβασμα χεριού (R)", + "Exit full screen (F)" : "Έξοδος από πλήρη οθόνη (F)", + "Full screen (F)" : "Πλήρης οθόνη (F)", + "Speaker view" : "Προβολή ομιλητή", + "Grid view" : "Προβολή πλέγματος", + "Error when trying to load the available live transcription languages" : "Σφάλμα κατά τη φόρτωση των διαθέσιμων γλωσσών ζωντανής μεταγραφής", + "Failed to enable live transcription" : "Αποτυχία ενεργοποίησης ζωντανής μεταγραφής", + "Recording consent is required" : "Απαιτείται συγκατάθεση για εγγραφή", + "This conversation is read-only" : "Αυτή η συνομιλία είναι μόνο για ανάγνωση", + "Conversation not found or not joined" : "Η συνομιλία δεν βρέθηκε ή δεν έχετε συμμετάσχει", + "Lobby is still active and you're not a moderator" : "Η αίθουσα αναμπνής είναι ακόμα ενεργό και δεν είστε συντονιστής", + "Connection failed" : "Η σύνδεση απέτυχε", + "Reload" : "Επαναφόρτωση", + "{nickName} raised their hand." : "Ο {nickName} σήκωσε το χέρι του.", + "A participant raised their hand." : "Ένας συμμετέχων σήκωσε το χέρι του.", + "Collapse stripe" : "Σύμπτυξη λωρίδας", + "Expand stripe" : "Ανάπτυξη λωρίδας", + "Previous page of videos" : "Προηγούμενη σελίδα βίντεο", + "Next page of videos" : "Επόμενη σελίδα βίντεο", + "Connecting …" : "Σύνδεση ...", + "Calling …" : "Κλήση σε εξέλιξη …", + "Waiting for {user} to join the call" : "Αναμονή για είσοδο του/της {user} στην κλήση", + "Waiting for others to join the call …" : "Αναμονή για είσοδο υπόλοιπων στην κλήση …", + "You can invite others in the participant tab of the sidebar" : "Μπορείτε να προσκαλέσετε άλλους από την καρτέλα συμμετεχόντων της πλευρικής μπάρας", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Μπορείτε να προσκαλέσετε άλλους από την καρτέλα συμμετεχόντων της πλευρικής μπάρας ή να κοινοποιήσετε αυτόν τον σύνδεσμο για να προσκαλέσετε άλλους!", + "Share this link to invite others!" : "Κοινοποιήστε αυτόν τον σύνδεσμο για να προσκαλέσετε άλλους!", + "Copy link" : "Αντιγραφή συνδέσμου", + "You are not allowed to enable audio" : "Δεν επιτρέπεται η ενεργοποίηση του ήχου", + "No audio. Click to select device" : "Χωρίς ήχο. Κάντε κλικ για επιλογή συσκευής", + "Mute audio" : "Σίγαση ήχου", + "Mute audio (M)" : "Σίγαση ήχου (M)", + "Unmute audio" : "Ενεργοποίηση ήχου", + "Unmute audio (M)" : "Ενεργοποίηση ήχου (M)", + "None" : "Κανένα", + "Select a microphone" : "Επιλογή μικροφώνου", + "Select a speaker" : "Επιλογή ηχείου", + "Check devices" : "Έλεγχος συσκευών", + "Access to camera was denied" : "Δεν επιτρέπεται η πρόσβαση στην κάμερα", + "Error while accessing camera: It is likely in use by another program" : "Σφάλμα κατά την πρόσβαση στην κάμερα: Είναι πιθανό να χρησιμοποιείται από άλλο πρόγραμμα", + "Error while accessing camera" : "Σφάλμα κατά την πρόσβαση στην κάμερα", + "You have been muted by a moderator" : "Έχετε σιγαστεί από συντονιστή", + "Hide presenter video" : "Απόκρυψη βίντεο παρουσιαστή", + "You are not allowed to enable video" : "Δεν επιτρέπεται η ενεργοποίηση του βίντεο", + "No video. Click to select device" : "Χωρίς βίντεο. Κάντε κλικ για επιλογή συσκευής", + "Disable video" : "Απενεργοποίηση βίντεο", + "Disable video (V)" : "Απενεργοποίηση βίντεο (V)", + "Enable video" : "Ενεργοποίηση βίντεο", + "Enable video (V)" : "Ενεργοποίηση βίντεο (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο - Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο (V) - Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ενεργοποίηση βίντεο. Η σύνδεσή σας θα διακοπεί σύντομα κατά την ενεργοποίηση του βίντεο για πρώτη φορά", + "Select a video device" : "Επιλογή συσκευής βίντεο", + "Show presenter" : "Εμφάνιση παρουσιαστή", + "You" : "Εσείς", + "Mute" : "Σίγαση", + "Muted" : "Σιγασμένο", + "Show screen" : "Εμφάνιση οθόνης", + "Stop following" : "Διακοπή ακολούθησης", + "Connection could not be established …" : "Δεν ήταν δυνατή η δημιουργία σύνδεσης …", + "Connection was lost and could not be re-established …" : "Η σύνδεση χάθηκε και δεν ήταν δυνατή η επανασύνδεση …", + "Connection could not be established. Trying again …" : "Δεν ήταν δυνατή η δημιουργία σύνδεσης. Νέα προσπάθεια …", + "Connection lost. Trying to reconnect …" : "Χαμένη σύνδεση. Προσπάθεια επανασύνδεσης …", + "Connection problems …" : "Προβλήματα σύνδεσης …", + "Collapse" : "Σύμπτυξη", + "Expand" : "Επεκτείνω", + "You need to be logged in to upload files" : "Πρέπει είστε σε σύνδεση για ανέβασμα αρχείων", + "Drop your files to upload" : "Αποθέστε τα αρχεία σας για ανέβασμα", + "Conversation messages" : "Μηνύματα συνομιλίας", + "Scroll to bottom" : "Μετακινηθείτε προς τα κάτω", + "Post message" : "Δημοσίευση μηνύματος", + "Federated conversation" : "Ομοσπονδιακή συνομιλία", + "Public conversation" : "Δημόσια συνομιλία", + "Favorite" : "Προσθήκη στα αγαπημένα", + "Banned users" : "Αποκλεισμένοι χρήστες", + "Manage the list of banned users in this conversation." : "Διαχείριση της λίστας αποκλεισμένων χρηστών σε αυτή τη συνομιλία.", + "Manage bans" : "Διαχείριση αποκλεισμών", + "No banned users" : "Δεν υπάρχουν αποκλεισμένοι χρήστες", + "Banned by:" : "Αποκλείστηκε από:", + "Date:" : "Ημερομηνία:", + "Note:" : "Σημείωση:", + "Hide details" : "Απόκρυψη λεπτομερειών", + "Show details" : "Εμφάνιση λεπτομερειών", + "Unban" : "Απο-αποκλεισμός", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Μπορείτε να αλλάξετε τον τίτλο και την περιγραφή στο {linkstart}Ημερολόγιο ↗{linkend}.", + "Error while updating conversation name" : "Σφάλμα κατά την ενημέρωση του ονόματος συνομιλίας", + "Error while updating conversation description" : "Σφάλμα κατά την ενημέρωση της περιγραφής συνομιλίας", + "Enter a name for this conversation" : "Εισάγετε ένα όνομα για αυτή τη συνομιλία", + "Edit conversation name" : "Επεξεργασία ονόματος συνομιλίας", + "Edit conversation description" : "Επεξεργασία περιγραφής συνομιλίας", + "Enter a description for this conversation" : "Πληκτρολογήστε μια περιγραφή για αυτήν τη συνομιλία", + "Picture" : "Εικόνα", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Τα ακόλουθα bots μπορούν να ενεργοποιηθούν σε αυτή τη συνομιλία. Επικοινωνήστε με τον διαχειριστή σας για να εγκαταστήσετε περισσότερα bots σε αυτόν τον server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Δεν υπάρχουν εγκατεστημένα bots σε αυτόν τον server. Επικοινωνήστε με τον διαχειριστή σας για να εγκαταστήσετε bots σε αυτόν τον server.", + "Disable" : "Απενεργοποίηση", + "Enable" : "Ενεργοποίηση", + "Breakout rooms" : "Δωμάτια διάσπασης", + "Manage breakout rooms" : "Διαχείριση δωματίων διάσπασης", + "Set up breakout rooms for this conversation" : "Ρύθμιση δωματίων διάσπασης για αυτή τη συνομιλία", + "Please select a valid PNG or JPG file" : "Παρακαλώ επιλέξτε ένα έγκυρο αρχείο PNG ή JPG", + "Choose your conversation picture" : "Επιλέξτε την εικόνα συνομιλίας σας", + "Choose" : "Επιλογή", + "Error setting conversation picture" : "Σφάλμα κατά την ρύθμιση της εικόνας συνομιλίας", + "Could not set the conversation picture: {error}" : "Δεν ήταν δυνατή η ρύθμιση της εικόνας συνομιλίας: {error}", + "Error cropping conversation picture" : "Σφάλμα κατά την περικοπή της εικόνας συνομιλίας", + "Error removing conversation picture" : "Σφάλμα κατά την αφαίρεση της εικόνας συνομιλίας", + "Set emoji as conversation picture" : "Ορισμός emoji ως εικόνας συνομιλίας", + "Set background color for conversation picture" : "Ορισμός χρώματος φόντου για εικόνα συνομιλίας", + "Upload conversation picture" : "Μεταφόρτωση εικόνας συνομιλίας", + "Choose conversation picture from files" : "Επιλογή εικόνας συνομιλίας από αρχεία", + "Remove conversation picture" : "Αφαίρεση εικόνας συνομιλίας", + "The file must be a PNG or JPG" : "Το αρχείο πρέπει να είναι τύπου PNG ή JPG", + "Set picture" : "Ορισμός εικόνας", + "Default permissions modified for {conversationName}" : "Τα προεπιλεγμένα δικαιώματα τροποποιήθηκαν για {conversationName}", + "Could not modify default permissions for {conversationName}" : "Δεν ήταν δυνατή η τροποποίηση των προεπιλεγμένων δικαιωμάτων για {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Επεξεργαστείτε τα προεπιλεγμένα δικαιώματα για τους συμμετέχοντες σε αυτή τη συνομιλία. Αυτές οι ρυθμίσεις δεν επηρεάζουν τους συντονιστές.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Κάθε φορά που τροποποιούνται τα δικαιώματα σε αυτή την ενότητα, τα προσαρμοσμένα δικαιώματα που είχαν ανατεθεί προηγουμένως σε μεμονωμένους συμμετέχοντες θα χαθούν.", + "All permissions" : "Όλα τα δικαιώματα", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Οι συμμετέχοντες έχουν δικαιώματα για έναρξη κλήσης, συμμετοχή σε κλήση, ενεργοποίηση ήχου και βίντεο και κοινή χρήση οθόνης.", + "Restricted" : "Περιορισμένο", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Οι συμμετέχοντες μπορούν να συμμετέχουν σε κλήσεις, αλλά δεν μπορούν να ενεργοποιήσουν τον ήχο ή το βίντεο ούτε να μοιραστούν την οθόνη έως ότου ένας συντονιστής τους εκχωρήσει αυτά τα δικαιώματα.", + "Advanced permissions" : "Προσαρμοσμένα δικαιώματα", + "Edit permissions" : "Επεξεργασία δικαιωμάτων", + "Conversation settings" : "Ρυθμίσεις συνομιλίας", + "Basic Info" : "Βασικές Πληροφορίες", + "Personal" : "Προσωπικός", + "Moderation" : "Συντονισμός", + "Setup overview" : "Επισκόπηση ρύθμισης", + "Live transcription" : "Ζωντανή μεταγραφή", + "Enable live transcription" : "Ενεργοποίηση ζωντανής μεταγραφής", + "Breakout Rooms" : "Δωμάτια Διάσπασης", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Επικίνδυνη ζώνη", + "Archive conversation" : "Αρχειοθέτηση συνομιλίας", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Οι αρχειοθετημένες συνομιλίες είναι κρυφές από την λίστα συνομιλιών από προεπιλογή. Ωστόσο, θα εμφανίζονται όταν αναζητάτε το όνομα της συνομιλίας ή προσπελάσετε μια λίστα αρχειοθετημένων συνομιλιών.", + "Do you really want to leave \"{displayName}\"?" : "Θέλετε πραγματικά να εγκαταλείψετε τη συνομιλία \"{displayName}\";", + "You can archive this conversation instead." : "Μπορείτε να αρχειοθετήσετε αυτή τη συνομιλία αντί αυτού.", + "Leave conversation" : "Εγκατάλειψη συνομιλίας", + "You need to promote a new moderator before you can leave the conversation" : "Πρέπει να προβιβάσετε έναν νέο συντονιστή πριν μπορέσετε να εγκαταλείψετε τη συνομιλία", + "Delete conversation" : "Διαγραφή συνομιλίας", + "Do you really want to delete \"{displayName}\"?" : "Θέλετε σίγουρα να διαγράψετε το \"{displayName}\";", + "Error while deleting conversation" : "Σφάλμα κατά τη διαγραφή της συνομιλίας", + "Delete all chat messages" : "Διαγραφή όλων των μηνυμάτων συνομιλίας", + "Do you really want to delete all messages in \"{displayName}\"?" : "Θέλετε πραγματικά να διαγράψετε όλα τα μηνύματα στο \"{displayName}\";", + "Error while clearing chat history" : "Σφάλμα κατά την εκκαθάριση του ιστορικού συνομιλιών", + "Be careful, these actions cannot be undone." : "Προσέξτε, αυτές οι ενέργειες δεν μπορούν να αναιρεθούν.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Μόλις εγκαταλείψετε μια συνομιλία, για να επανενταχθείτε σε μια κλειστή συνομιλία, απαιτείται πρόσκληση. Μια ανοιχτή συνομιλία μπορεί να επανενταχθεί ανά πάσα στιγμή.", + "Permanently delete this conversation." : "Οριστική διαγραφή αυτής της συνομιλίας.", + "Delete chat messages" : "Διαγραφή μηνυμάτων συνομιλίας", + "Permanently delete all the messages in this conversation." : "Οριστική διαγραφή όλων των μηνυμάτων σε αυτήν τη συνομιλία.", + "_%n hour_::_%n hours_" : ["%n ώρα","%n ώρες"], + "_%n day_::_%n days_" : ["%n ημέρα","%n ημέρες"], + "_%n week_::_%n weeks_" : ["%n εβδομάδα","%n εβδομάδες"], + "Custom expiration time" : "Προσαρμοσμένος χρόνος λήξης", + "Message expiration disabled" : "Η λήξη μηνυμάτων απενεργοποιήθηκε", + "Message expiration set: {duration}" : "Ορίστηκε λήξη μηνυμάτων: {duration}", + "Error when trying to set message expiration" : "Σφάλμα κατά την προσπάθεια ορισμού λήξης μηνυμάτων", + "Message expiration" : "Λήξη μηνυμάτων", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Τα μηνύματα συνομιλίας μπορούν να λήξουν μετά από συγκεκριμένο χρόνο. Σημείωση: Τα αρχεία που κοινοποιούνται στη συνομιλία δεν θα διαγραφούν για τον κάτοχο, αλλά δεν θα κοινοποιούνται πλέον στη συνομιλία.", + "Set message expiration" : "Ορισμός λήξης μηνυμάτων", + "Current message expiration" : "Τρέχουσα λήξη μηνυμάτων", + "Password copied to clipboard" : "Το συνθηματικό αντιγράφηκε στο πρόχειρο", + "Password could not be copied" : "Το συνθηματικό δεν μπορούσε να αντιγραφεί", + "Guest access" : "Πρόσβαση επισκεπτών", + "Breakout rooms are not allowed in public conversations." : "Τα δωμάτια διάσπασης δεν επιτρέπονται σε δημόσιες συνομιλίες.", + "Allow guests to join this conversation via link" : "Να επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία μέσω συνδέσμου", + "Password protection" : "Προστασία συνθηματικού", + "This conversation is password-protected. Guests need password to join" : "Αυτή η συνομιλία προστατεύεται με συνθηματικό. Οι επισκέπτες χρειάζονται συνθηματικό για να συμμετάσχουν", + "Password protection is needed for public conversations" : "Απαιτείται προστασία συνθηματικού για δημόσιες συνομιλίες", + "Set a password" : "Ορισμός συνθηματικού", + "Change password" : "Αλλαγή συνθηματικού", + "Enter new password" : "Εισαγωγή νέου συνθηματικού", + "Save password" : "Αποθήκευση συνθηματικού", + "Copy password" : "Αντιγραφή συνθηματικού", + "Guests are allowed to join this conversation via link" : "Επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία μέσω συνδέσμου", + "Guests are not allowed to join this conversation" : "Δεν επιτρέπεται σε επισκέπτες να συμμετέχουν σε αυτή τη συνομιλία", + "Resend invitations" : "Επαναποστολή προσκλήσεων", + "This conversation is open to both registered users and users created with the Guests app" : "Αυτή η συνομιλία είναι ανοιχτή τόσο σε εγγεγραμμένους χρήστες όσο και σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "This conversation is open to registered users" : "Αυτή η συνομιλία είναι ανοιχτή σε εγγεγραμμένους χρήστες", + "This conversation is limited to the current participants" : "Αυτή η συνομιλία περιορίζεται στους τρέχοντες συμμετέχοντες", + "You opened the conversation to both registered users and users created with the Guests app" : "Ανοίξατε τη συνομιλία τόσο σε εγγεγραμμένους χρήστες όσο και σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "Error occurred when opening or limiting the conversation" : "Συνέβη σφάλμα κατά το άνοιγμα ή τον περιορισμό της συνομιλίας", + "Open conversation to registered users, showing it in search results" : "Άνοιγμα συνομιλίας σε εγγεγραμμένους χρήστες, εμφάνισή της στα αποτελέσματα αναζήτησης", + "Also open to users created with the Guests app" : "Επίσης ανοιχτή σε χρήστες που δημιουργήθηκαν με την εφαρμογή Επισκεπτών", + "Open conversation" : "Άνοιγμα συνομιλίας", + "Set language spoken in calls" : "Ορισμός γλώσσας που ομιλείται στις κλήσεις", + "Languages could not be loaded" : "Οι γλώσσες δεν μπόρεσαν να φορτωθούν", + "Loading languages …" : "Φόρτωση γλωσσών …", + "Invalid language" : "Μη έγκυρη γλώσσα", + "Default language (English)" : "Προεπιλεγμένη γλώσσα (Αγγλικά)", + "Default live transcription language set" : "Ορίστηκε προεπιλεγμένη γλώσσα ζωντανής μεταγραφής", + "Live transcription language set: {languageName}" : "Ορίστηκε γλώσσα ζωντανής μεταγραφής: {languageName}", + "Error when trying to set live transcription language" : "Σφάλμα κατά την προσπάθεια ορισμού γλώσσας ζωντανής μεταγραφής", + "Start time: {date}" : "Ώρα έναρξης: {date}", + "Start time has been updated" : "Η ώρα έναρξης ενημερώθηκε", + "Error occurred while updating start time" : "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της ώρας έναρξης", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Η ενεργοποίηση της αίθουσας αναμονής θα απομακρύνει τους μη συντονιστές από την τρέχουσα κλήση.", + "Enable lobby, restricting the conversation to moderators" : "Ενεργοποίηση αιθουσας αναμονής, περιορίζοντας τη συνομιλία σε συντονιστές", + "Meeting start time" : "Ώρα έναρξης της συνάντησης", + "Start time (optional)" : "Ώρα έναρξης (προαιρετικό)", + "Import email participants" : "Εισαγωγή συμμετεχόντων μέσω email", + "You can import a list of email participants from a CSV file." : "Μπορείτε να εισάγετε μια λίστα συμμετεχόντων μέσω email από ένα αρχείο CSV.", + "Poll drafts" : "Προσχέδια δημοσκοτήσεων", + "Browse poll drafts" : "Περιήγηση στα προσχέδια δημοσκοτήσεων", + "Error occurred when locking the conversation" : "Παρουσιάστηκε σφάλμα κατά το κλείδωμα της συνομιλίας", + "Error occurred when unlocking the conversation" : "Παρουσιάστηκε σφάλμα κατά το ξεκλείδωμα της συνομιλίας", + "Lock conversation" : "Κλειδώστε τη συνομιλία", + "This will also terminate the ongoing call." : "Αυτό θα τερματίσει επίσης την τρέχουσα κλήση.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Κλειδώστε τη συνομιλία για να αποτρέψετε την ανάρτηση μηνυμάτων ή την έναρξη κλήσεων", + "Edit" : "Επεξεργασία", + "More information" : "Περισσότερες πληροφορίες", + "Delete" : "Διαγραφή", + "Add new bridged channel to current conversation" : "Προσθέστε νέο γεφυρωμένο κανάλι στην τρέχουσα συνομιλία", + "unknown state" : "άγνωστη κατάσταση", + "running" : "εκτελείται", + "not running, check Matterbridge log" : "δεν εκτελείται, ελέγξτε το αρχείο καταγραφής Matterbridge", + "not running" : "δεν εκτελείται", + "Bridge saved" : "Η σύνδεση αποθηκεύτηκε", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Μπορείτε να συνδέσετε κανάλια από διάφορα άλλα συστήματα άμεσων μηνυμάτων με το Matterbridge.", + "More info on Matterbridge" : "Περισσότερες πληροφορίες για το Matterbridge", + "Messaging systems" : "Συστήματα ανταλλαγής μηνυμάτων", + "Enable bridge" : "Ενεργοποίηση γέφυρας", + "Show Matterbridge log" : "Εμφάνιση αρχείου καταγραφής Matterbridge", + "Log content" : "Περιεχόμενα αρχείου καταγραφής", + "Only moderators are allowed to mention @all" : "Μόνο οι συντονιστές επιτρέπεται να αναφέρονται σε @all", + "All participants are allowed to mention @all" : "Όλοι οι συμμετέχοντες επιτρέπεται να αναφέρονται σε @all", + "Participants are now allowed to mention @all." : "Οι συμμετέχοντες επιτρέπεται πλέον να αναφέρονται σε @all.", + "Mentioning @all has been limited to moderators." : "Η αναφορά σε @all περιορίστηκε στους συντονιστές.", + "Allow participants to mention @all" : "Να επιτρέπεται στους συμμετέχοντες η αναφορά σε @all", + "Mention permissions" : "Δικαιώματα αναφοράς", + "Notifications" : "Ειδοποιήσεις", + "Notify about calls in this conversation" : "Να ειδοποιούμαι για κλήσεις σε αυτήν τη συνομιλία", + "Important conversation" : "Σημαντική συνομιλία", + "\"Do not disturb\" user status is ignored for important conversations" : "Η κατάσταση χρήστη \"Μην ενοχλείτε\" αγνοείται για σημαντικές συνομιλίες", + "Sensitive conversation" : "Ευαίσθητη συνομιλία", + "Message preview will be disabled in conversation list and notifications" : "Η προεπισκόπηση μηνυμάτων θα απενεργοποιηθεί στη λίστα συνομιλιών και στις ειδοποιήσεις", + "Recording consent is required for calls in this conversation" : "Απαιτείται συγκατάθεση εγγραφής για τις κλήσεις σε αυτή τη συνομιλία", + "Recording consent is not required for calls in this conversation" : "Δεν απαιτείται συγκατάθεση εγγραφής για τις κλήσεις σε αυτή τη συνομιλία", + "Recording consent requirement was updated" : "Η απαίτηση συγκατάθεσης εγγραφής ενημερώθηκε", + "Error occurred while updating recording consent" : "Παρουσιάστηκε σφάλμα κατά την ενημέρωση της συγκατάθεσης εγγραφής", + "Recording Consent" : "Συγκατάθεση Εγγραφής", + "Recording consent cannot be changed once a call or breakout session has started." : "Η συγκατάθεση εγγραφής δεν μπορεί να αλλάξει μόλις ξεκινήσει μια κλήση ή συνεδρία διάσπασης.", + "Require recording consent before joining call in this conversation" : "Απαιτείται συγκατάθεση εγγραφής πριν από τη συμμετοχή σε κλήση σε αυτή τη συνομιλία", + "Recording consent is required for all calls" : "Η συγκατάθεση εγγραφής απαιτείται για όλες τις κλήσεις", + "SIP dial-in is now possible without PIN requirement" : "Το SIP dial-in είναι πλέον δυνατό χωρίς απαίτηση PIN", + "SIP dial-in is now enabled" : "Το SIP dial-in είναι πλέον ενεργοποιημένο", + "SIP dial-in is now disabled" : "Το SIP dial-in είναι πλέον απενεργοποιημένο", + "Error occurred when enabling SIP dial-in" : "Παρουσιάστηκε σφάλμα κατά την ενεργοποίηση του SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Παρουσιάστηκε σφάλμα κατά την απενεργοποίηση του SIP dial-in", + "Phone and SIP dial-in" : "Τηλεφωνική και SIP σύνδεση", + "Enable phone and SIP dial-in" : "Ενεργοποίηση τηλεφωνικής και SIP σύνδεσης", + "Allow to dial-in without a PIN" : "Να επιτρέπεται η σύνδεση χωρίς PIN", + "Ongoing" : "Σε εξέλιξη", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n άτομο δέχτηκε","%n άτομα δέχτηκαν"], + "_%n person declined_::_%n people declined_" : ["%n άτομο απέρριψε","%n άτομα απέρριψαν"], + "_and %n other attachment_::_and %n other attachments_" : ["και %n άλλο συνημμένο","και %n άλλα συνημμένα"], + "With {displayName}" : "Με {displayName}", + "In {conversation}" : "Στη συνομιλία {conversation}", + "View attachment" : "Προβολή συνημμένου", + "Join" : "Συμμετοχή", + "View conversation" : "Προβολή συνομιλίας", + "View event on Calendar" : "Προβολή συμβάντος στο Ημερολόγιο", + "Error while creating the conversation" : "Σφάλμα κατά τη δημιουργία συνομιλίας", + "Hello, {displayName}" : "Γεια σας, {displayName}", + "Start meeting now" : "Έναρξη συνεδρίας τώρα", + "Give your meeting a title" : "Δώστε έναν τίτλο στη συνεδρία σας", + "Create and copy link" : "Δημιουργία και αντιγραφή συνδέσμου", + "Create a new conversation" : "Δημιουργία νέας συνομιλίας", + "Join open conversations" : "Συμμετοχή σε ανοικτές συνομιλίες", + "Call a phone number" : "Κλήση σε αριθμό τηλεφώνου", + "Scroll backward" : "Κύλιση προς τα πίσω", + "Scroll forward" : "Κύλιση προς τα εμπρός", + "Schedule meetings" : "Προγραμματισμός συναντήσεων", + "You don't have any upcoming meetings" : "Δεν έχετε επερχόμενες συναντήσεις", + "Open calendar" : "Άνοιγμα ημερολογίου", + "Unread mentions" : "Αδιάβαστες αναφορές", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Τα μηνύματα όπου αναφερθήκατε θα εμφανίζονται εδώ. Μπορείτε να αναφέρετε άτομα πληκτρολογώντας @ ακολουθούμενο από το όνομά τους", + "Upcoming reminders" : "Επερχόμενες υπενθυμίσεις", + "Message reminders" : "Υπενθυμίσεις μηνυμάτων", + "Set a reminder on a message to be notified" : "Ορίστε μια υπενθύμιση σε ένα μήνυμα για να ειδοποιηθείτε", + "Start a group conversation" : "Έναρξη ομαδικής συνομιλίας", + "Create conversation" : "Δημιουργία συνομιλίας", + "Enter your name" : "Προσθέστε το όνομά σας", + "Submit name and join" : "Υποβολή ονόματος και συμμετοχή", + "Do you already have an account?" : "Έχετε ήδη λογαριασμό;", + "Log in" : "Είσοδος", + "Error while verifying uploaded file" : "Σφάλμα κατά την επαλήθευση του ανεβασμένου αρχείου", + "Uploaded file is verified" : "Το ανεβασμένο αρχείο επαληθεύτηκε", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Η μορφή περιεχομένου είναι τιμές διαχωρισμένες με κόμμα (CSV):
- Απαιτείται γραμμή κεφαλίδας και πρέπει να ταιριάζει με \"name\",\"email\" ή μόνο \"email\"
- Μία εγγραφή ανά γραμμή (π.χ. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Οι συμμετέχοντες προστέθηκαν με επιτυχία", + "Error while adding participants" : "Σφάλμα κατά την προσθήκη συμμετεχόντων", + "Import a file" : "Εισαγωγή αρχείου", + "Browse" : "Περιήγηση", + "Verifying uploaded file …" : "Επαλήθευση ανεβασμένου αρχείου …", + "This might take a moment" : "Αυτό μπορεί να πάρει λίγο χρόνο", + "Send invitations" : "Αποστολή προσκλήσεων", + "_%n invalid email_::_%n invalid emails_" : ["%n μη έγκυρο email","%n μη έγκυρα emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email έχει ήδη εισαχθεί ή είναι διπλότυπο","%n emails έχουν ήδη εισαχθεί ή είναι διπλότυπα"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n πρόσκληση μπορεί να αποσταλεί","%n προσκλήσεις μπορούν να αποσταλούν"], + "An error occurred while calling a phone number" : "Παρουσιάστηκε σφάλμα κατά την κλήση σε αριθμό τηλεφώνου", + "Phone number could not be called: {error}" : "Ο αριθμός τηλεφώνου δεν μπορούσε να καλεστεί: {error}", + "Phone number could not be called" : "Ο αριθμός τηλεφώνου δεν μπορούσε να καλεστεί", + "Search participants or phone numbers" : "Αναζήτηση συμμετεχόντων ή αριθμών τηλεφώνου", + "Creating the conversation …" : "Δημιουργία συνομιλίας …", + "Mark as read" : "Σήμανση ως αναγνωσμένο", + "Mark as unread" : "επισήμανση ως μή-αναγνωσμένο", + "Remove from favorites" : "Αφαίρεση από τα αγαπημένα", + "Add to favorites" : "Προσθήκη στα αγαπημένα ", + "Unarchive conversation" : "Απο-αρχειοθέτηση συνομιλίας", + "Ignore \"Do not disturb\"" : "Αγνόηση \"Μην ενοχλείτε\"", + "You need to promote a new moderator before you can leave the conversation." : "Πρέπει να προάγετε έναν νέο συντονιστή πριν μπορέσετε να αποχωρήσετε από τη συνομιλία.", + "Conversation actions" : "Δράσεις συνομιλιών", + "Notify about calls" : "Ειδοποίηση για κλήσεις", + "Hide message text" : "Απόκρυψη κειμένου μηνύματος", + "Pending invitations" : "Εκκρεμείς προσκλήσεις", + "From {user} at {remoteServer}" : "Από {user} στον {remoteServer}", + "Decline invitation" : "Απόρριψη πρόσκλησης", + "Accept invitation" : "Αποδοχή πρόσκλησης", + "No pending invitations" : "Δεν υπάρχουν εκκρεμείς προσκλήσεις", + "Home" : "Αρχική", + "Unread" : "Μη αναγνωσμένο", + "Mentions" : "Αναφορές", + "Meetings" : "Συναντήσεις", + "Alphabetically" : "Αλφαβητικά", + "No followed threads" : "Δεν υπάρχουν ακολουθούμενες συζητήσεις", + "No matches found" : "Δεν βρέθηκαν αντιστοιχίες", + "No conversations found" : "Δεν βρέθηκαν συνομιλίες", + "You have no archived conversations." : "Δεν έχετε αρχειοθετημένες συνομιλίες.", + "Subscribe to an existing thread or start your own." : "Εγγραφείτε σε μια υπάρχουσα συζήτηση ή ξεκινήστε τη δική σας.", + "You have no unread mentions." : "Δεν έχετε αδιάβαστες αναφορές.", + "You have no unread messages." : "Δεν έχετε αδιάβαστα μηνύματα.", + "An error occurred while performing the search" : "Παρουσιάστηκε σφάλμα κατά την αναζήτηση", + "Conversation list" : "Λίστα συνομιλιών", + "Filter conversations by" : "Φιλτράρισμα συνομιλιών κατά", + "Unread messages" : "Μη αναγνωσμένα μηνύματα", + "Meeting conversations" : "Συνομιλίες συναντήσεων", + "Clear filters" : "Εκκαθάριση φίλτρων", + "New personal note" : "Νέα προσωπική σημείωση", + "Back to conversations" : "Επιστροφή στις συνομιλίες", + "Archived conversations" : "Αρχειοθετημένες συνομιλίες", + "Threads" : "Συζητήσεις", + "Clear filter" : "Εκκαθάριση φίλτρου", + "Show more threads" : "Εμφάνιση περισσότερων συζητήσεων", + "App settings" : "Ρυθμίσεις εφαρμογής", + "Users" : "Χρήστες", + "Groups" : "Ομάδες", + "Teams" : "Ομάδες", + "Federated users" : "Ομοσπονδιακοί χρήστες", + "New private conversation" : "Νέα ιδιωτική συνομιλία", + "Other sources" : "Άλλες πηγές", + "Open conversations" : "Άνοιγμα συνομιλιών", + "No search results" : "Κανένα αποτέλεσμα", + "Users, groups and teams" : "Χρήστες, ομάδες και ομάδες", + "Users and groups" : "Χρήστες και ομάδες", + "Users and teams" : "Χρήστες και ομάδες", + "Groups and teams" : "Ομάδες και ομάδες", + "New group conversation" : "Νέα ομαδική συνομιλία", + "The meeting will start soon" : "Η συνάντηση θα ξεκινήσει σύντομα", + "This meeting is scheduled for {startTime}" : "Αυτή η συνάντηση είναι προγραμματισμένη για {startTime}", + "You are currently waiting in the lobby" : "Βρίσκεστε στην αιθουα αναμονης", + "Select microphone" : "Επιλογή μικροφώνου", + "No microphone available" : "Δεν βρέθηκε μικρόφωνο", + "Select speaker" : "Επιλογή ηχείου", + "No speaker available" : "Δεν υπάρχει διαθέσιμο ηχείο", + "Select camera" : "Επιλογή κάμερας", + "No camera available" : "Δεν υπάρχει διαθέσιμη κάμερα", + "Select a device" : "Επιλογή συσκευής", + "Playing …" : "Αναπαραγωγή …", + "Test speakers" : "Δοκιμή ηχείων", + "Test" : "Δοκιμή", + "Devices" : "Συσκευές", + "Backgrounds" : "Φόντα", + "No audio" : "Χωρίς ήχο", + "No camera" : "Χωρίς κάμερα", + "Display video as you will see it (mirrored)" : "Εμφάνιση βίντεο όπως θα το δείτε (καθρεφτισμένο)", + "Display video as others will see it" : "Εμφάνιση βίντεο όπως θα το δουν οι άλλοι", + "Calls are not supported in your browser" : "Οι κλήσεις δεν υποστηρίζονται στον περιηγητή σας.", + "Access to microphone is only possible with HTTPS" : "Η πρόσβαση στο μικρόφωνο είναι εφικτή μόνο μέσω HTTPS.", + "Access to microphone was denied" : "Δεν επιτρέπεται η πρόσβαση στο μικρόφωνο", + "Error while accessing microphone" : "Σφάλμα κατά την πρόσβαση στο μικρόφωνο.", + "Access to camera is only possible with HTTPS" : "Η πρόσβαση στην κάμερα είναι εφικτή μόνο μέσω HTTPS.", + "The call is being recorded." : "Η κλήση καταγράφεται.", + "The call might be recorded." : "Η κλήση μπορεί να καταγράφεται.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Η εγγραφή μπορεί να περιλαμβάνει τη φωνή σας, βίντεο από την κάμερα και κοινή χρήση οθόνης. Απαιτείται η συγκατάθεσή σας πριν από τη συμμετοχή στην κλήση.", + "Give consent to the recording of this call" : "Δώστε συγκατάθεση για την εγγραφή αυτής της κλήσης", + "Show more info" : "Εμφάνιση περισσότερων πληροφοριών", + "Audio is not available" : "Ο ήχος δεν είναι διαθέσιμος", + "Video is not available" : "Το βίντεο δεν είναι διαθέσιμο", + "Start recording immediately with the call" : "Έναρξη εγγραφής αμέσως με την κλήση", + "Notify all participants about this call" : "Ειδοποίηση όλων των συμμετεχόντων για αυτήν την κλήση", + "Apply settings" : "Εφαρμογή ρυθμίσεων", + "Select virtual office background" : "Επιλογή εικονικού φόντου γραφείου", + "Select virtual home background" : "Επιλογή εικονικού φόντου σπιτιού", + "Select virtual abstract background" : "Επιλογή εικονικού αφηρημένου φόντου", + "Select virtual beach background" : "Επιλογή εικονικού φόντου παραλίας", + "Select virtual park background" : "Επιλογή εικονικού φόντου πάρκου", + "Select virtual theater background" : "Επιλογή εικονικού φόντου θεάτρου", + "Select virtual library background" : "Επιλογή εικονικού φόντου βιβλιοθήκης", + "Select virtual space station background" : "Επιλογή εικονικού φόντου διαστημικού σταθμού", + "Error while uploading the file" : "Σφάλμα κατά τη μεταφόρτωση του αρχείου", + "Select a file" : "Επιλογή αρχείου", + "Invalid path selected" : "Επιλέχθηκε μη έγκυρη διαδρομή", + "Select virtual background from file {fileName}" : "Επιλογή εικονικού φόντου από το αρχείο {fileName}", + "Blur" : "Θόλωμα", + "Upload" : "Μεταφόρτωση", + "Files" : "Αρχεία", + "(editing)" : "(επεξεργασία)", + "(edited)" : "(επεξεργασμένο)", + "The message has expired or has been deleted" : "Το μήνυμα έχει λήξει ή έχει διαγραφεί", + "Cancel quote" : "Ακύρωση παράθεσης", + "24 hours" : "24 ώρες", + "7 days" : "7 ημέρες", + "Clear reminder – {timeLocale}" : "Εκκαθάριση υπενθύμισης – {timeLocale}", + "Edited by {actor}" : "Επεξεργάστηκε από {actor}", + "Message text copied to clipboard" : "Το κείμενο του μηνύματος αντιγράφηκε στο πρόχειρο", + "Message text could not be copied" : "Το κείμενο του μηνύματος δεν μπορούσε να αντιγραφεί", + "Message forwarded to \"Note to self\"" : "Το μήνυμα προωθήθηκε στο \"Σημείωση προς εμένα\"", + "Error while forwarding message to \"Note to self\"" : "Σφάλμα κατά την προώθηση του μηνύματος στο \"Σημείωση προς εμένα\"", + "A reminder was successfully removed" : "Μια υπενθύμιση αφαιρέθηκε με επιτυχία", + "Error occurred when removing a reminder" : "Παρουσιάστηκε σφάλμα κατά την αφαίρεση μιας υπενθύμισης", + "A reminder was successfully set at {datetime}" : "Μια υπενθύμιση ορίστηκε με επιτυχία στις {datetime}", + "Error occurred when creating a reminder" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία μιας υπενθύμισης", + "Add a reaction to this message" : "Προσθήκη αντίδρασης σε αυτό το μήνυμα", + "Reply" : "Απάντηση", + "More actions" : "Περισσότερες ενέργειες", + "Set reminder" : "Προσθήκη υπενθύμισης", + "Reply privately" : "Απάντηση ιδιωτικά", + "Edit message" : "Επεξεργασία μηνύματος", + "Copy message" : "Αντιγραφή μηνύματος", + "Copy message link" : "Αντιγραφή συνδέσμου μηνύματος", + "Go to file" : "Μετάβαση στο αρχείο", + "Download file" : "Λήψη αρχείου", + "Go to thread" : "Μετάβαση στη συζήτηση", + "Edit thread details" : "Επεξεργασία λεπτομερειών συζήτησης", + "Forward message" : "Προώθηση μηνύματος", + "Translate" : "Μετάφραση", + "Set custom reminder" : "Ορισμός προσαρμοσμένης υπενθύμισης", + "Close reactions menu" : "Κλείσιμο μενού αντιδράσεων", + "React with {emoji}" : "Αντίδραση με {emoji}", + "React with another emoji" : "Αντίδραση με άλλο emoji", + "Choose a conversation to forward the selected message." : "Επιλέξτε μια συνομιλία για να προωθήσετε το επιλεγμένο μήνυμα.", + "Error while forwarding message" : "Σφάλμα κατά την προώθηση μηνύματος", + "The message has been forwarded to {selectedConversationName}" : "Το μήνυμα έχει προωθηθεί στο {selectedConversationName}", + "Dismiss" : "Αποδέσμευση", + "Go to conversation" : "Μετάβαση στη συνομιλία", + "Detect language" : "Ανίχνευση γλώσσας", + "The message could not be translated" : "Δεν ήταν δυνατή η μετάφραση του μηνύματος", + "Translation copied to clipboard" : "Η μετάφραση αντιγράφηκε στο πρόχειρο", + "Translation could not be copied" : "Δεν ήταν δυνατή η αντιγραφή της μετάφρασης", + "Translate message" : "Μετάφραση μηνύματος", + "Source language to translate from" : "Γλώσσα πηγής για μετάφραση από", + "Translate from" : "Μετάφραση από", + "Target language to translate into" : "Γλώσσα προορισμού για μετάφραση σε", + "Translate to" : "Μετάφραση σε", + "Translating" : "Μεταφράζεται", + "Copy translated text" : "Αντιγραφή μεταφρασμένου κειμένου", + "Send now" : "Αποστολή τωρα", + "Message read by everyone who shares their reading status" : "Το μήνυμα διαβάστηκε από όλους όσους μοιράζονται την κατάσταση ανάγνωσής τους", + "Message sent" : "Το μήνυμα στάλθηκε", + "Sent without notification" : "Αποστολή χωρίς ειδοποίηση", + "Deleting message" : "Γίνεται διαγραφή μηνύματος", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Το μήνυμα διαγράφηκε με επιτυχία, αλλά έχει ρυθμιστεί ένα bot ή Matterbridge και το μήνυμα μπορεί να έχει ήδη διανεμηθεί σε άλλες υπηρεσίες", + "Message deleted successfully" : "Το μήνυμα διαγράφηκε με επιτυχία", + "Message could not be deleted because it is too old" : "Δεν ήταν δυνατή η διαγραφή του μηνύματος επειδή είναι αρκετά παλιό", + "Only normal chat messages can be deleted" : "Μόνο τα κανονικά μηνύματα συνομιλίας μπορούν να διαγραφούν", + "An error occurred while deleting the message" : "Προέκυψε ένα σφάλμα κατά τη διαγραφή του μηνύματος", + "Your browser does not support playing audio files" : "Το πρόγραμμα περιήγησής σας δεν υποστηρίζει την αναπαραγωγή αρχείων ήχου", + "Contact" : "Επικοινωνία", + "{stack} in {board}" : "{stack} στο {board}", + "Deck Card" : "Κάρτα Deck", + "Remove {fileName}" : "Αφαίρεση {fileName}", + "Open this location in OpenStreetMap" : "Άνοιγμα αυτής της τοποθεσίας στο OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n απάντηση","%n απαντήσεις"], + "Sending message" : "Αποστολή μηνύματος", + "Failed to send the message. Click to try again" : "Αποτυχία αποστολής του μηνύματος. Κάντε κλικ για να δοκιμάσετε ξανά", + "Not enough free space to upload file" : "Δεν επαρκεί ο ελεύθερος χώρος για τη μεταφόρτωση του αρχείου", + "You cannot send messages to this conversation at the moment" : "Δεν μπορείτε να στείλετε μηνύματα σε αυτή τη συνομιλία αυτή τη στιγμή", + "Could not update the message" : "Δεν ήταν δυνατή η ενημέρωση του μηνύματος", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Προσχέδιο δημοσκόπησης • %n επιλογή","Προσχέδιο δημοσκόπησης • %n επιλογές"], + "Edit poll draft" : "Επεξεργασία προσχεδίου δημοσκόπησης", + "Delete poll draft" : "Διαγραφή προσχεδίου δημοσκόπησης", + "Open poll" : "Ανοιχτή δημοσκόπηση", + "See results" : "Προβολή αποτελεσμάτων", + "Reactions" : "Αντιδράσεις", + "No permission to post reactions in this conversation" : "Δεν υπάρχει άδεια δημοσίευσης αντιδράσεων σε αυτή τη συνομιλία", + "and {participant}" : "και {participant}", + "_and %n other participant_::_and %n other participants_" : ["και %n άλλος συμμετέχων","και %n άλλοι συμμετέχοντες"], + "Show all reactions" : "Εμφάνιση όλων των αντιδράσεων", + "Add more reactions" : "Προσθήκη περισσότερων αντιδράσεων", + "Show or collapse system messages" : "Εμφάνιση ή σύμπτυξη μηνυμάτων συστήματος", + "No messages" : "Κανένα μήνυμα", + "All messages have expired or have been deleted." : "Όλα τα μηνύματα έχουν λήξει ή έχουν διαγραφεί.", + "Unpin" : "Ξεκαρφίτσωμα", + "Cancel search" : "Ακύρωση αναζήτησης", + "Add a phone number" : "Προσθήκη αριθμού τηλεφώνου", + "Error: A password is required to create the conversation." : "Σφάλμα: Απαιτείται κωδικός πρόσβασης για τη δημιουργία της συνομιλίας.", + "All set, the conversation \"{conversationName}\" was created." : "Όλα έτοιμα, η συνομιλία \"{conversationName}\" δημιουργήθηκε.", + "Create a new group conversation" : "Δημιουργία νέας ομαδικής συζήτησης", + "Add participants" : "Προσθήκη συμμετεχόντων", + "Maximum length exceeded ({maxlength} characters)" : "Υπέρβαση μέγιστου μήκους ({maxlength} χαρακτήρες)", + "Conversation visibility" : "Ορατότητα συνομιλίας", + "Allow guests to join via link" : "Να επιτρέπεται σε επισκέπτες να συμμετέχουν μέσω συνδέσμου", + "Enter password" : "Εισάγετε συνθηματικό", + "This conversation has been locked" : "Αυτή η συνομιλία έχει κλειδωθεί", + "No permission to post messages in this conversation" : "Δεν επιτρέπεται η δημοσίευση μηνυμάτων σε αυτήν τη συνομιλία", + "Joining conversation …" : "Συμμετοχή σε συνομιλία…", + "Write a message without notification" : "Γράψτε ένα μήνυμα χωρίς ειδοποίηση", + "Create a thread silently" : "Δημιουργία συζήτησης σιωπηλά", + "Create a thread" : "Δημιουργία συζήτησης", + "Send message silently" : "Αποστολή μηνύματος σιωπηλά", + "Send message" : "Αποστολή μηνύματος", + "Send without notification" : "Αποστολή χωρίς ειδοποίηση", + "The participant will not be notified about new messages" : "Ο συμμετέχων δεν θα ειδοποιηθεί για νέα μηνύματα", + "Participants will not be notified about new messages" : "Οι συμμετέχοντες δεν θα ειδοποιηθούν για νέα μηνύματα", + "Thread title is required" : "Απαιτείται τίτλος συζήτησης", + "Message text is required" : "Απαιτείται κείμενο μηνύματος", + "The message could not be edited" : "Δεν ήταν δυνατή η επεξεργασία του μηνύματος", + "File to share" : "Αρχείο για διαμοιρασμό", + "File upload is not available in this conversation" : "Η μεταφόρτωση αρχείων δεν είναι διαθέσιμη σε αυτή τη συνομιλία", + "Add emoji" : "Προσθήκη emoji", + "Adding a mention will only notify users who did not read the message." : "Η προσθήκη αναφοράς θα ειδοποιήσει μόνο χρήστες που δεν έχουν διαβάσει το μήνυμα.", + "Thread title" : "Τίτλος συζήτησης", + "Send later" : "Αποστολή αργότερα", + "Cancel editing" : "Ακύρωση επεξεργασίας", + "{user} is out of office and might not respond." : "Ο {user} είναι εκτός γραφείου και μπορεί να μην απαντήσει.", + "Absence period: {startDate} - {endDate}" : "Περίοδος απουσίας: {startDate} - {endDate}", + "Replacement:" : "Αντικαταστάτης:", + "Share from {nextcloud}" : "Κοινή χρήση από {nextcloud}", + "Share from Files" : "Κοινή χρήση από Αρχεία", + "Share files to the conversation" : "Διαμοιρασμός αρχείων στην συνομιλία", + "Upload from device" : "Μεταφόρτωση από συσκευή", + "Create new poll" : "Δημιουργία νέας ψηφοφορίας", + "Smart picker" : "Έξυπνος επιλογέας", + "Record voice message" : "Εγγραφή φωνητικού μηνύματος", + "End recording and send" : "Τερματισμός εγγραφής και αποστολή", + "Dismiss recording" : "Απόρριψη εγγραφής", + "Access to the microphone was denied" : "Η πρόσβαση στο μικρόφωνο απορρίφθηκε", + "Microphone either not available or disabled in settings" : "Το μικρόφωνο δεν είναι διαθέσιμο ή είναι απενεργοποιημένο στις ρυθμίσεις", + "Error while recording audio" : "Σφάλμα κατά την εγγραφή ήχου", + "Generating summary of unread messages …" : "Δημιουργία σύνοψης μη αναγνωσμένων μηνυμάτων …", + "Summary is AI generated and might contain mistakes" : "Η σύνοψη δημιουργείται από τεχνητή νοημοσύνη και μπορεί να περιέχει λάθη", + "Error occurred during a summary generation" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία σύνοψης", + "New file" : "Νέο αρχείο", + "Blank" : "Κενό", + "Error while creating file" : "Σφάλμα κατά τη δημιουργία αρχείου", + "Create and share a new file" : "Δημιουργία και κοινή χρήση νέου αρχείου", + "Name of the new file" : "Όνομα του νέου αρχείου", + "Create file" : "Δημιουργία αρχείου", + "Someone is typing …" : "Κάποιος πληκτρολογεί …", + "{user1} is typing …" : "Ο {user1} πληκτρολογεί …", + "{user1} and {user2} are typing …" : "Οι {user1} και {user2} πληκτρολογούν …", + "{user1}, {user2} and {user3} are typing …" : "Οι {user1}, {user2} και {user3} πληκτρολογούν …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["Οι {user1}, {user2}, {user3} και %n άλλος πληκτρολογούν …","Οι {user1}, {user2}, {user3} και %n άλλοι πληκτρολογούν …"], + "Add more files" : "Προσθήκη περισσότερων αρχείων", + "Send" : "Αποστολή", + "In this conversation {user} can:" : "Σε αυτή τη συνομιλία ο {user} μπορεί:", + "Edit default permissions for participants in {conversationName}" : "Επεξεργασία προεπιλεγμένων δικαιωμάτων για συμμετέχοντες στο {conversationName}", + "Start a call" : "Έναρξη κλήσης", + "Skip the lobby" : "Παράκαμψη της αίθουσας αναμονής", + "Can post messages and reactions" : "Μπορεί να δημοσιεύει μηνύματα και αντιδράσεις", + "Enable the microphone" : "Ενεργοποίηση μικροφώνου", + "Enable the camera" : "Ενεργοποίηση κάμερας", + "Share the screen" : "Κοινή χρήση οθόνης", + "Update permissions" : "Ενημέρωση αδειών", + "Updating permissions" : "Ενημέρωση δικαιωμάτων", + "No poll drafts" : "Δεν υπάρχουν προσχέδια δημοσκοπήσεων", + "There is no poll drafts yet saved for this conversation" : "Δεν υπάρχουν ακόμη αποθηκευμένα προσχέδια δημοσκοπήσεων για αυτή τη συνομιλία", + "Create poll in {name}" : "Δημιουργία δημοσκόπησης στο {name}", + "Create poll" : "Δημιουργία ψηφοφορίας", + "Error while importing poll" : "Σφάλμα κατά την εισαγωγή δημοσκόπησης", + "Question" : "Ερώτηση", + "Ask a question" : "Κάντε μια ερώτηση", + "Import draft from file" : "Εισαγωγή προσχεδίου από αρχείο", + "Answers" : "Απαντήσεις", + "Answer {option}" : "Απάντηση {option}", + "Delete poll option" : "Διαγραφή επιλογής δημοσκόπησης", + "Add answer" : "Προσθήκη απάντησης", + "Settings" : "Ρυθμίσεις", + "Anonymous poll" : "Ανώνυμη δημοσκόπηση", + "Multiple answers" : "Πολλαπλές απαντήσεις", + "Save as draft" : "Αποθήκευση ως προσχέδιο", + "Export draft to file" : "Εξαγωγή προσχεδίου σε αρχείο", + "You voted for this option" : "Ψηφίσατε για αυτή την επιλογή", + "End poll" : "Τερματισμός δημοσκόπησης", + "Change your vote" : "Αλλαγή ψήφου σας", + "Results" : "Αποτελέσματα", + "Voted participants" : "Συμμετέχοντες που ψήφισαν", + "Send a message to \"{roomName}\"" : "Αποστολή μηνύματος στο \"{roomName}\"", + "Hide list of participants" : "Απόκρυψη λίστας συμμετεχόντων", + "Show list of participants" : "Εμφάνιση λίστας συμμετεχόντων", + "Assistance requested in {roomName}" : "Ζητήθηκε βοήθεια στο {roomName}", + "The message was sent to \"{roomName}\"" : "Το μήνυμα στάλθηκε στο \"{roomName}\"", + "Dismiss request for assistance" : "Απόρριψη αιτήματος βοήθειας", + "Send message to room" : "Αποστολή μηνύματος στην αίθουσα", + "Back to main room" : "Επιστροφή στην κύρια αίθουσα", + "Back to your room" : "Επιστροφή στο δωμάτιό σας", + "Message all rooms" : "Μήνυμα σε όλα τα δωμάτια", + "Start session" : "Έναρξη συνεδρίας", + "Start a call before you start a breakout room session" : "Ξεκινήστε μια κλήση πριν ξεκινήσετε μια συνεδρία δωματίων διάσπασης", + "Stop session" : "Διακοπή συνεδρίας", + "The message was sent to all breakout rooms" : "Το μήνυμα στάλθηκε σε όλα τα δωμάτια διάσπασης", + "Send a message to all breakout rooms" : "Αποστολή μηνύματος σε όλα τα δωμάτια διάσπασης", + "Breakout rooms are not started" : "Τα δωμάτια διάσπασης δεν έχουν ξεκινήσει", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Οι κλήσεις χωρίς υψηλής απόδοσης backend μπορεί να προκαλέσουν προβλήματα σύνδεσης και υψηλό φόρτο σε συσκευές. {linkstart}Μάθετε περισσότερα{linkend}", + "Talk setup incomplete" : "Η ρύθμιση ομιλίας είναι ελλιπής", + "Disable lobby" : "Απενεργοποίηση αίθουσας αναμονής", + "Settings for participant \"{user}\"" : "Ρυθμίσεις για συμμετέχοντα \"{user}\"", + "Participant \"{user}\"" : "Συμμετέχων \"{user}\"", + "moderator" : "συντονιστής", + "bot" : "bot", + "guest" : "Επισκέπτης", + "Ringing …" : "Χτυπάει …", + "Call rejected" : "Η κλήση απορρίφθηκε", + "{time} talking …" : "{time} ομιλία …", + "{time} talking time" : "{time} χρόνος ομιλίας", + "Raised their hand" : "Σήκωσαν το χέρι τους", + "Joined with video" : "Συμμετοχή με βίντεο", + "Joined via phone" : "Συμμετοχή μέσω τηλεφώνου", + "Joined with audio" : "Συμμετοχή με ήχο", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Το κείμενο πρέπει να είναι μικρότερο ή ίσο με {maxLength} χαρακτήρες. Το τρέχον κείμενό σας είναι {charactersCount} χαρακτήρες.", + "Remove group and members" : "Αφαίρεση ομάδας και μελών", + "Remove team and members" : "Αφαίρεση ομάδας και μελών", + "Remove participant" : "Αφαίρεση συμμετέχοντα", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε την ομάδα \"{displayName}\" και τα μέλη της από αυτή τη συνομιλία;", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε την ομάδα \"{displayName}\" και τα μέλη της από αυτή τη συνομιλία;", + "Do you really want to remove {displayName} from this conversation?" : "Θέλετε πραγματικά να αφαιρέσετε τον {displayName} από αυτή τη συνομιλία;", + "Notification was sent to {displayName}" : "Η ειδοποίηση στάλθηκε στον {displayName}", + "Could not send notification to {displayName}" : "Δεν ήταν δυνατή η αποστολή ειδοποίησης στον {displayName}", + "Permissions granted to {displayName}" : "Δικαιώματα που παραχωρήθηκαν στον {displayName}", + "Could not modify permissions for {displayName}" : "Δεν ήταν δυνατή η τροποποίηση δικαιωμάτων για τον {displayName}", + "Permissions removed for {displayName}" : "Δικαιώματα που αφαιρέθηκαν από τον {displayName}", + "Permissions set to default for {displayName}" : "Δικαιώματα που ορίστηκαν σε προεπιλογή για τον {displayName}", + "Phone number could not be hung up" : "Ο αριθμός τηλεφώνου δεν μπορούσε να κλείσει", + "Phone number could not be put on hold" : "Ο αριθμός τηλεφώνου δεν μπορούσε να τεθεί σε αναμονή", + "Phone number could not be muted" : "Ο αριθμός τηλεφώνου δεν μπορούσε να σιγαστεί", + "Phone number could not be unmuted" : "Ο αριθμός τηλεφώνου δεν μπορούσε να ξεσιγαστεί", + "DTMF message could not be sent" : "Το μήνυμα DTMF δεν μπορούσε να αποσταλεί", + "Phone number copied to clipboard" : "Ο αριθμός τηλεφώνου αντιγράφηκε στο πρόχειρο", + "Phone number could not be copied" : "Ο αριθμός τηλεφώνου δεν μπορούσε να αντιγραφεί", + "in the lobby" : "στην αίθουσα αναμονής", + "Dial out phone" : "Κλήση εξωτερικού τηλεφώνου", + "Hang up phone" : "Κλείσιμο τηλεφώνου", + "Move back to lobby" : "Επιστροφή στην αίθουσα αναμονής", + "Move to conversation" : "Μετάβαση σε συνομιλία", + "Dial-in PIN" : "PIN σύνδεσης", + "Demote from moderator" : "Υποβάθμιση από συντονιστή", + "Promote to moderator" : "Προαγωγή από συντονιστή", + "Resend invitation" : "Επαναποστολή πρόσκλησης", + "Send call notification" : "Αποστολή ειδοποίησης κλήσης", + "Dial out phone number" : "Κλήση εξωτερικού αριθμού τηλεφώνου", + "Resume call for phone number" : "Συνέχιση κλήσης για αριθμό τηλεφώνου", + "Put phone number on hold" : "Τοποθέτηση αριθμού τηλεφώνου σε αναμονή", + "Unmute phone number" : "Αποσιγόπηση αριθμού τηλεφώνου", + "Mute phone number" : "Σίγαση αριθμού τηλεφώνου", + "Copy phone number" : "Αντιγραφή αριθμού τηλεφώνου", + "Reset custom permissions" : "Επαναφορά προσαρμοσμένων δικαιωμάτων", + "Grant all permissions" : "Χορήγηση όλων των δικαιωμάτων", + "Remove all permissions" : "Αφαίρεση όλων των δικαιωμάτων", + "Also ban from this conversation" : "Αποκλεισμός και από αυτή τη συνομιλία", + "Internal note (reason to ban)" : "Εσωτερική σημείωση (λόγος αποκλεισμού)", + "Remove" : "Αφαίρεση", + "Permissions modified for {displayName}" : "Τα δικαιώματα τροποποιήθηκαν για τον {displayName}", + "Add users, groups or teams" : "Προσθήκη χρηστών, ομάδων ή ομάδων", + "Add users or groups" : "Προσθήκη χρηστών ή ομάδων", + "Add users or teams" : "Προσθήκη χρηστών ή ομάδων", + "Add users" : "Προσθήκη χρηστών", + "Add groups or teams" : "Προσθήκη ομάδων ή ομάδων", + "Add groups" : "Προσθήκη ομάδων", + "Add teams" : "Προσθήκη ομάδων", + "Add other sources" : "Προσθήκη άλλων πηγών", + "Add emails" : "Προσθήκη emails", + "Integrations" : "Ενσωματώσεις", + "Add federated users" : "Προσθήκη ομοσπονδιακών χρηστών", + "Searching …" : "Αναζήτηση ...", + "Search for more users" : "Αναζήτηση περισσότερων χρηστών", + "You can search or add participants via name, email, or Federated Cloud ID" : "Μπορείτε να αναζητήσετε ή να προσθέσετε συμμετέχοντες μέσω ονόματος, email ή Federated Cloud ID", + "Search or add participants" : "Αναζήτηση ή προσθήκη συμμετεχόντων", + "Invitation was sent to {actorId}" : "Η πρόσκληση στάλθηκε στον {actorId}", + "An error occurred while adding the participants" : "Παρουσιάστηκε σφάλμα κατά την προσθήκη των συμμετεχόντων", + "A new group conversation with selected participant will be created" : "Θα δημιουργηθεί μια νέα ομαδική συνομιλία με τον επιλεγμένο συμμετέχοντα", + "Participants" : "Συμμετέχοντες", + "Participants ({count})" : "Συμμετέχοντες ({count})", + "Open chat" : "Άνοιγμα συνομιλίας", + "You have new unread messages in the chat." : "Έχετε νέα μη αναγνωσμένα μηνύματα στη συνομιλία.", + "You have been mentioned in the chat." : "Έχετε αναφερθεί στη συνομιλία.", + "Search messages" : "Αναζήτηση μηνυμάτων", + "Chat" : "Συνομιλία", + "Details" : "Λεπτομέρειες", + "Shared items" : "Κοινόχρηστα αντικείμενα", + "Search in {name}" : "Αναζήτηση στο {name}", + "Threads in {name}" : "Συζητήσεις στο {name}", + "{actor} in {conversation}" : "{actor} στο {conversation}", + "Search messages …" : "Αναζήτηση μηνυμάτων …", + "Search options" : "Επιλογές αναζήτησης", + "From User" : "Από Χρήστη", + "Since" : "Από", + "Until" : "Μέχρι", + "No results found" : "Δεν βρέθηκαν αποτελέσματα", + "Load more results" : "Φόρτωση περισσοτέρων αποτελεσμάτων", + "Recent threads" : "Πρόσφατες συζητήσεις", + "Projects" : "Έργα", + "No shared items" : "Δεν υπάρχουν κοινόχρηστα αντικείμενα", + "Thread notifications" : "Ειδοποιήσεις συζήτησης", + "Thread actions" : "Ενέργειες συζήτησης", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Σύνδεσμος συνομιλίας", + "No open conversations found" : "Δεν βρέθηκαν ανοιχτές συνομιλίες", + "Either there are no open conversations or you joined all of them." : "Είτε δεν υπάρχουν ανοιχτές συνομιλίες είτε έχετε συμμετάσχει σε όλες.", + "Check spelling or use complete words." : "Ελέγξτε την ορθογραφία ή χρησιμοποιήστε πλήρεις λέξεις.", + "Search conversations or users" : "Αναζήτηση συνομιλιών ή χρηστών", + "Select conversation" : "Επιλέξτε συνομιλία", + "Number length is not valid" : "Το μήκος του αριθμού δεν είναι έγκυρο", + "Region code is not valid" : "Ο κωδικός περιοχής δεν είναι έγκυρος", + "Number length is too short" : "Το μήκος του αριθμού είναι πολύ μικρό", + "Number length is too long" : "Το μήκος του αριθμού είναι πολύ μεγάλο", + "Number is not valid" : "Ο αριθμός δεν είναι έγκυρος", + "Phone numbers" : "Αριθμοί τηλεφώνου", + "Display name: {name}" : "Εμφανιζόμενο όνομα: {name}", + "Edit display name" : "Επεξεργασία εμφανιζόμενου ονόματος", + "Display name (required)" : "Εμφανιζόμενο όνομα (απαιτείται)", + "Save name" : "Αποθήκευση ονόματος", + "Error while setting personal setting" : "Σφάλμα κατά τον ορισμό προσωπικής ρύθμισης", + "Error while saving sounds setting" : "Σφάλμα κατά την αποθήκευση της ρύθμισης ήχων", + "Play sounds when participants join or leave a call" : "Αναπαραγωγή ήχων όταν οι συμμετέχοντες εισέρχονται ή αποχωρούν από μια κλήση", + "Notification settings" : "Ρυθμίσεις ειδοποιήσεων", + "Default language" : "Προεπιλεγμένη γλώσσα", + "Select location for attachments" : "Επιλέξτε τοποθεσία για τα συνημμένα", + "Error while setting attachment folder" : "Σφάλμα κατά την ρύθμιση φακέλου συνημμένων", + "Error while setting read status privacy" : "Σφάλμα κατά τον ορισμό απορρήτου κατάστασης ανάγνωσης", + "Error while setting typing status privacy" : "Σφάλμα κατά τον ορισμό απορρήτου κατάστασης πληκτρολόγησης", + "Error while setting default media state" : "Σφάλμα κατά τη ρύθμιση της προεπιλεγμένης κατάστασης πολυμέσων", + "Privacy" : "Ιδιωτικότητα", + "Attachments folder" : "Φάκελος συνημμένων", + "Toggle full screen" : "Εναλλαγή πλήρους οθόνης", + "Search" : "Αναζήτηση", + "Focus the chat input" : "Εστίασε την είσοδο συνομιλίας", + "Unfocus the chat input to use shortcuts" : "Αποεπιλέξτε την είσοδο συνομιλίας για να χρησιμοποιήσετε συντομεύσεις", + "Edit your last message" : "Επεξεργασία του τελευταίου μηνύματός σας", + "Shortcuts while in a call" : "Συντομεύσεις κατά τη διάρκεια μιας κλήσης", + "Camera on and off" : "Ενεργοποίηση και απενεργοποίηση κάμερας", + "Microphone on and off" : "Ενεργοποίηση και απενεργοποίηση μικροφώνου", + "Raise or lower hand" : "Σηκώστε ή κατεβάστε το χέρι", + "Push to talk or push to mute" : "Πιέστε για να μιλήσετε ή πιέστε για σίγαση", + "Zoom-in / zoom-out a screen share" : "Εστίαση / απομάκρυνση κοινής χρήσης οθόνης", + "Mouse wheel" : "Τροχός ποντικιού", + "Start call silently" : "Έναρξη κλήσης σιωπηλά", + "Start call" : "Έναρξη κλήσης", + "End call" : "Τερματισμός κλήσης", + "This call has just ended" : "Αυτή η κλήση μόλις τελείωσε", + "You will be able to join the call only after a moderator starts it." : "Μπορείτε να συμμετάσχετε στην κλήση μόνο μετά την εκκίνηση από τον συντονιστή.", + "End call for everyone" : "Τερματισμός κλήσης για όλους", + "Starting the recording" : "Έναρξη εγγραφής", + "Recording" : "Καταγραφή", + "The call has been running for one hour." : "Η κλήση εκτελείται για μία ώρα.", + "Cancel recording start" : "Ακύρωση έναρξης εγγραφής", + "Stop recording" : "Διακοπή εγγραφής", + "Send a reaction" : "Αποστολή αντίδρασης", + "React with {reaction}" : "Αντίδραση με {reaction}", + "All tasks done!" : "Όλες οι εργασίες ολοκληρώθηκαν!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} από %n εργασία","{done} από %n εργασίες"], + "Add participants to this call" : "Προσθήκη συμμετεχόντων σε αυτήν την κλήση", + "_%n participant in call_::_%n participants in call_" : ["%n συμμετέχων στην κλήση","%n συμμετέχοντες στην κλήση"], + "You are not allowed to enable screensharing" : "Δεν επιτρέπεται να ενεργοποιήσετε τον διαμοιρασμό οθόνης", + "No screensharing" : "Δεν υπάρχει διαμοιρασμός οθόνης", + "Screensharing options" : "Επιλογές διαμοιρασμού οθόνης", + "Enable screensharing" : "Ενεργοποίηση διαμοιρασμού οθόνης", + "Bad sent video and screen quality." : "Κακή ποιότητα βίντεο και διαμοιρασμού οθόνης.", + "Bad sent screen quality." : "Κακή ποιότητα διαμοιρασμού οθόνης.", + "Bad sent video quality." : "Κακή ποιότητα βίντεο.", + "Bad sent audio, video and screen quality." : "Κακή ποιότητα ήχου, βίντεο και διαμοιρασμού οθόνης.", + "Bad sent audio and screen quality." : "Κακή ποιότητα ήχου και διαμοιρασμού οθόνης.", + "Bad sent audio and video quality." : "Κακή ποιότητα ήχου και βίντεο.", + "Bad sent audio quality." : "Κακή ποιότητα ήχου.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Disable background blur" : "Απενεργοποίηση θολώματος φόντου", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να δουν την οθόνη σας.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας δουν.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας ενώ κάνετε κοινή χρήση οθόνης.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να δουν την οθόνη σας. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε τον διαμοιρασμό οθόνης σας.", + "Disable screenshare" : "Απενεργοποίηση του διαμοιρασμού οθόνης", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το θόλωμα φόντου ή το βίντεό σας.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένος και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν και να σας δουν. Για να βελτιώσετε την κατάσταση προσπαθήστε να απενεργοποιήσετε το βίντεό σας.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Η σύνδεση στο Διαδίκτυο ή ο υπολογιστής σας είναι απασχολημένοι και άλλοι συμμετέχοντες ενδέχεται να μην μπορούν να σας καταλάβουν.", + "Screen sharing is not supported by your browser." : "Η κοινή χρήση οθόνης δεν υποστηρίζεται από τον φυλλομετρητή σας.", + "Screen sharing requires the page to be loaded through HTTPS." : "Για τον διαμοιρασμό οθόνης απαιτείται η χρήση σελίδας με HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Για τον διαμοιρασμό οθόνης απαιτείται η φόρτωση της σελίδας μέσω HTTPS.", + "An error occurred while starting screensharing." : "Προυσιάστηκε σφάλμα κατά την έναρξη του διαμοιρασμού οθόνης.", + "Select virtual background" : "Επιλογή εικονικού φόντου", + "Show your screen" : "Εμφάνιση της οθόνης σας", + "Stop screensharing" : "Διακόψτε την κοινή χρήση της οθόνης", + "Mute others" : "Σίγαση των άλλων", + "Start recording" : "Έναρξη εγγραφής", + "Set up breakout rooms" : "Ρύθμιση δωματίων διάσπασης", + "Download attendance list" : "Λήψη λίστας παρουσιών", + "Open Calendar" : "Άνοιγμα Ημερολογίου", + "Remove participant {name}" : "Αφαίρεση συμμετέχοντα {name}", + "Would you like to delete this conversation?" : "Θέλετε να διαγράψετε αυτή τη συνομιλία;", + "Are you sure you want to delete this conversation?" : "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτή τη συνομιλία;", + "Delete now" : "Διαγραφή τώρα", + "Keep" : "Διατήρηση", + "Open dialpad" : "Άνοιγμα πληκτρολογίου", + "Select a region" : "Επιλογή περιοχής", + "Local time: {time}" : "Τοπική ώρα: {time}", + "Search …" : "Αναζήτηση …", + "Message without mention" : "Μήνυμα χωρίς αναφορά σε κάποιον", + "Mention myself" : "Αναφορά στον εαυτό μου", + "Mention everyone" : "Αναφορά σε όλους", + "Select a conversation" : "Επιλέξτε μια συνομιλία", + "Select a mode" : "Επιλέξτε μια λειτουργία", + "You do not have permissions to access this conversation." : "Δεν έχετε δικαιώματα πρόσβασης σε αυτή τη συνομιλία.", + "Join a different conversation or start a new one." : "Συμμετέχετε σε διαφορετική συνομιλία ή ξεκινήστε μια νέα.", + "The conversation does not exist" : "Η συνομιλία δεν υπάρχει", + "Join a conversation or start a new one!" : "Συμμετέχετε σε συνομιλία ή ξεκινήστε μια νέα!", + "Duplicate session" : "Αντιγραφή συνεδρίας", + "Creating and joining a conversation with \"{userid}\"" : "Δημιουργία και συμμετοχή σε συνομιλία με \"{userid}\"", + "Join a conversation or start a new one" : "Συμμετέχετε σε συνομιλία ή ξεκινήστε μια νέα", + "Error while joining the conversation" : "Σφάλμα κατά τη συμμετοχή στη συνομιλία", + "Nextcloud URL" : "Διεύθυνση URL του Nextcloud", + "Nextcloud user" : "Χρήστης του Nextcloud", + "User password" : "Συνθηματικό χρήστη", + "Talk conversation" : "Συνομιλία στο Talk", + "Skip TLS verification" : "Παράλειψη επαλήθευσης TLS", + "Matrix server URL" : "Διεύθυνση URL διακομιστή Matrix", + "User" : "Χρήστης", + "Matrix channel" : "Κανάλι Matrix", + "Mattermost server URL" : "Διεύθυνση URL διακομιστή Mattermost", + "Mattermost user" : "Χρήστης Mattermost", + "Team name" : "Όνομα ομάδας", + "Channel name" : "Όνομα καναλιού", + "Rocket.Chat server URL" : "Διεύθυνση URL διακομιστή Rocket.Chat", + "User name or email address" : "Όνομα χρήστη ή διεύθυνση email", + "Rocket.Chat channel" : "Κανάλι Rocket.Chat", + "Zulip server URL" : "Διεύθυνση URL διακομιστή Zulip", + "Bot user name" : "Όνομα χρήστη του ρομπότ", + "Bot API key" : "Κλειδί API του ρομπότ", + "Zulip channel" : "Κανάλι Zulip", + "API token" : "Διακριτικό API", + "Slack channel" : "Κανάλι Slack", + "Server ID or name" : "Όνομα ή ταυτότητα διακομιστή", + "Channel ID (prefixed with \"ID:\") or name" : "Αναγνωριστικό καναλιού (με πρόθεμα \"ID:\") ή όνομα", + "Channel" : "Κανάλι", + "Login" : "Είσοδος", + "Chat ID" : "Αναγνωριστικό συνομιλίας", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL διακομιστή IRC (πχ chat.freenode.net:6667)", + "Nickname" : "Παρατσούκλι", + "Connection password" : "Κωδικός πρόσβασης σύνδεσης", + "IRC channel" : "Κανάλι IRC", + "Channel password" : "Κωδικός πρόσβασης καναλιού", + "NickServ nickname" : "Ψευδώνυμο NickServ", + "NickServ password" : "Κωδικός πρόσβασης NickServ", + "Use TLS" : "Χρήση TLS", + "Use SASL" : "Χρήση SASL", + "Tenant ID" : "Ταυτότητα Tenant", + "Client ID" : "ID πελάτη", + "Team ID" : "Ταυτότητα ομάδας", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber διακομιστής URL", + "MUC server URL" : "Διεύθυνση URL διακομιστή MUC", + "Jabber ID" : "Ταυτότητα Jabber", + "Media" : "Μέσα ενημέρωσης", + "Polls" : "Δημοσκοπήσεις", + "Deck cards" : "Καρτέλες Deck", + "Voice messages" : "Φωνητικά μηνύματα", + "Locations" : "Τοποθεσίες", + "Call recordings" : "Εγγραφές κλήσεων", + "Audio" : "Ήχος", + "Show all media" : "Εμφάνιση όλων των πολυμέσων", + "Show all files" : "Εμφάνιση όλων των αρχείων", + "Show all polls" : "Εμφάνιση όλων των δημοσκοπήσεων", + "Show all deck cards" : "Εμφάνιση όλων των καρτελών Deck", + "Show all voice messages" : "Εμφάνιση όλων των φωνητικών μηνυμάτων", + "Show all locations" : "Εμφάνιση όλων των τοποθεσιών", + "Show all call recordings" : "Εμφάνιση όλων των εγγραφών κλήσεων", + "Show all audio" : "Εμφάνιση όλων των ήχων", + "Show all other" : "Εμφάνιση όλων των άλλων", + "Follow conversation settings" : "Ακολούθηση ρυθμίσεων συνομιλίας", + "Group" : "Ομάδα", + "Team" : "Ομάδα", + "You reconnected to the call" : "Επανασυνδεθήκατε στην κλήση", + "{actor} reconnected to the call" : "Ο {actor} επανασυνδέθηκε στην κλήση", + "You added {user0} and {user1}" : "Προσθέσατε τους {user0} και {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Προσθέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Προσθέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "An administrator added you and {user0}" : "Ένας διαχειριστής πρόσθεσε εσάς και τον {user0}", + "{actor} added you and {user0}" : "Ο {actor} πρόσθεσε εσάς και τον {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Ένας διαχειριστής πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["Ο {actor} πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ο {actor} πρόσθεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "An administrator added {user0} and {user1}" : "Ένας διαχειριστής πρόσθεσε τους {user0} και {user1}", + "{actor} added {user0} and {user1}" : "Ο {actor} πρόσθεσε τους {user0} και {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Ένας διαχειριστής πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["Ο {actor} πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ο {actor} πρόσθεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "You removed {user0} and {user1}" : "Αφαιρέσατε τους {user0} και {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Αφαιρέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Αφαιρέσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "An administrator removed you and {user0}" : "Ένας διαχειριστής αφαίρεσε εσάς και τον {user0}", + "{actor} removed you and {user0}" : "Ο {actor} αφαίρεσε εσάς και τον {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Ένας διαχειριστής αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["Ο {actor} αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντα","Ο {actor} αφαίρεσε εσάς, τον {user0} και %n ακόμα συμμετέχοντες"], + "An administrator removed {user0} and {user1}" : "Ένας διαχειριστής αφαίρεσε τους {user0} και {user1}", + "{actor} removed {user0} and {user1}" : "Ο {actor} αφαίρεσε τους {user0} και {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Ένας διαχειριστής αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ένας διαχειριστής αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["Ο {actor} αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντα","Ο {actor} αφαίρεσε τους {user0}, {user1} και %n ακόμα συμμετέχοντες"], + "You and {user0} joined the call" : "Εσείς και ο {user0} συμμετείχατε στην κλήση", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Εσείς, ο {user0} και %n ακόμα συμμετέχοντας συμμετείχατε στην κλήση","Εσείς, ο {user0} και %n ακόμα συμμετέχοντες συμμετείχατε στην κλήση"], + "{user0} and {user1} joined the call" : "Οι {user0} και {user1} συμμετείχατε στην κλήση", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["Οι {user0}, {user1} και %n ακόμα συμμετέχοντας συμμετείχατε στην κλήση","Οι {user0}, {user1} και %n ακόμα συμμετέχοντες συμμετείχατε στην κλήση"], + "You and {user0} left the call" : "Εσείς και ο {user0} αποχωρήσατε από την κλήση", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Εσείς, ο {user0} και %n ακόμα συμμετέχοντας αποχωρήσατε από την κλήση","Εσείς, ο {user0} και %n ακόμα συμμετέχοντες αποχωρήσατε από την κλήση"], + "{user0} and {user1} left the call" : "Οι {user0} και {user1} αποχωρήσατε από την κλήση", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["Οι {user0}, {user1} και %n ακόμα συμμετέχοντας αποχωρήσατε από την κλήση","Οι {user0}, {user1} και %n ακόμα συμμετέχοντες αποχωρήσατε από την κλήση"], + "You promoted {user0} and {user1} to moderators" : "Προήγατε τους {user0} και {user1} σε συντονιστές", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Προήγατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Προήγατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "An administrator promoted you and {user0} to moderators" : "Ένας διαχειριστής σας προήγαγε εσάς και τον {user0} σε συντονιστές", + "{actor} promoted you and {user0} to moderators" : "Ο {actor} σας προήγαγε εσάς και τον {user0} σε συντονιστές", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Ένας διαχειριστής σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντα σε συντονιστές","Ένας διαχειριστής σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["Ο {actor} σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντα σε συντονιστές","Ο {actor} σας προήγαγε εσάς, τον {user0} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "An administrator promoted {user0} and {user1} to moderators" : "Ένας διαχειριστής προήγαγε τους {user0} και {user1} σε συντονιστές", + "{actor} promoted {user0} and {user1} to moderators" : "Ο {actor} προήγαγε τους {user0} και {user1} σε συντονιστές", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Ένας διαχειριστής προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Ένας διαχειριστής προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["Ο {actor} προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντα σε συντονιστές","Ο {actor} προήγαγε τους {user0}, {user1} και %n ακόμα συμμετέχοντες σε συντονιστές"], + "You demoted {user0} and {user1} from moderators" : "Υποβιβάσατε τους {user0} και {user1} από συντονιστές", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Υποβιβάσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Υποβιβάσατε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "An administrator demoted you and {user0} from moderators" : "Ένας διαχειριστής σας υποβίβασε εσάς και τον {user0} από συντονιστές", + "{actor} demoted you and {user0} from moderators" : "Ο {actor} σας υποβίβασε εσάς και τον {user0} από συντονιστές", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Ένας διαχειριστής σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντα από συντονιστές","Ένας διαχειριστής σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντες από συντονιστές"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["Ο {actor} σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντα από συντονιστές","Ο {actor} σας υποβίβασε εσάς, τον {user0} και %n ακόμα συμμετέχοντες από συντονιστές"], + "An administrator demoted {user0} and {user1} from moderators" : "Ένας διαχειριστής υποβίβασε τους {user0} και {user1} από συντονιστές", + "{actor} demoted {user0} and {user1} from moderators" : "Ο {actor} υποβίβασε τους {user0} και {user1} από συντονιστές", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Ένας διαχειριστής υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Ένας διαχειριστής υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["Ο {actor} υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντα από συντονιστές","Ο {actor} υποβίβασε τους {user0}, {user1} και %n ακόμα συμμετέχοντες από συντονιστές"], + "You:" : "Εσείς:", + "You: {lastMessage}" : "Εσείς: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(επεξεργασμένο από εσάς)", + "(edited by a deleted user)" : "(επεξεργασμένο από διαγεγραμμένο χρήστη)", + "(edited by {moderator})" : "(επεξεργασμένο από {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Προσπαθείτε να συμμετάσχετε σε μια συνομιλία ενώ έχετε ενεργή συνεδρία σε άλλο παράθυρο ή συσκευή. Αυτή τη στιγμή δεν υποστηρίζεται αυτό από το Nextcloud Talk. Τι θέλετε να κάνετε;", + "Leave this page" : "Αποχώρηση από την σελίδα", + "Join here" : "Συμμετέχετε εδώ", + "Deck card has been posted to {conversation}" : "Η κάρτα Deck δημοσιεύτηκε στο {conversation}", + "An error occurred while posting deck card to conversation" : "Παρουσιάστηκε σφάλμα κατά τη δημοσίευση της κάρτας Deck στη συνομιλία", + "Post to a conversation" : "Δημοσίευση σε συνομιλία", + "Post to conversation" : "Δημοσίευση σε συνομιλία", + "The recording failed. Please contact your administrator." : "Η εγγραφή απέτυχε. Παρακαλούμε επικοινωνήστε με τον διαχειριστή σας.", + "Location has been posted to {conversation}" : "Η τοποθεσία δημοσιεύτηκε στο {conversation}", + "An error occurred while posting location to conversation" : "Παρουσιάστηκε σφάλμα κατά τη δημοσίευση της τοποθεσίας στη συνομιλία", + "Share to a conversation" : "Κοινή χρήση σε συνομιλία", + "Share to conversation" : "Κοινή χρήση σε συνομιλία", + "In conversation" : "Σε συνομιλία", + "Search in conversation: {conversation}" : "Αναζήτηση στη συνομιλία: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Τα αιτήματά σας περιορίζονται προς το παρόν λόγω προστασίας από brute force", + "Error while clearing conversation history" : "Σφάλμα κατά την εκκαθάριση του ιστορικού συνομιλιών", + "Error occurred while allowing guests" : "Παρουσιάστηκε σφάλμα κατά την άδεια των επισκεπτών", + "Error occurred while disallowing guests" : "Παρουσιάστηκε σφάλμα κατά την απαγόρευση των επισκεπτών", + "Error occurred when restricting the conversation to moderator" : "Παρουσιάστηκε σφάλμα κατά τον περιορισμό της συνομιλίας σε επόπτη", + "Error occurred when opening the conversation to everyone" : "Παρουσιάστηκε σφάλμα κατά το άνοιγμα της συνομιλίας σε όλους", + "Conversation password has been saved" : "Ο κωδικός πρόσβασης συνομιλίας έχει αποθηκευτεί", + "Conversation password has been removed" : "Ο κωδικός πρόσβασης συνομιλίας έχει αφαιρεθεί", + "Error occurred while saving conversation password" : "Παρουσιάστηκε σφάλμα κατά την αποθήκευση του κωδικού πρόσβασης συνομιλίας", + "Call recording is starting." : "Η εγγραφή κλήσης ξεκινά.", + "Call recording stopped while starting." : "Η εγγραφή κλήσης σταμάτησε κατά την εκκίνηση.", + "Call recording stopped. You will be notified once the recording is available." : "Η εγγραφή κλήσης σταμάτησε. Θα ειδοποιηθείτε μόλις η εγγραφή είναι διαθέσιμη.", + "Conversation picture set" : "Ορίστηκε εικόνα συνομιλίας", + "Conversation picture deleted" : "Διαγράφηκε η εικόνα συνομιλίας", + "Could not delete the conversation picture" : "Δεν ήταν δυνατή η διαγραφή της εικόνας συνομιλίας", + "Could not remove the automatic expiration" : "Δεν ήταν δυνατή η αφαίρεση της αυτόματης λήξης", + "Could not post message: {errorMessage}" : "Δεν ήταν δυνατή η δημοσίευση μηνύματος: {errorMessage}", + "Participant is banned successfully" : "Ο συμμετέχων αποκλείστηκε με επιτυχία", + "Error while banning the participant" : "Σφάλμα κατά τον αποκλεισμό του συμμετέχοντα", + "An error occurred while fetching the participants" : "Παρουσιάστηκε σφάλμα κατά την ανάκτηση των συμμετεχόντων", + "Could not send invitation to {actorId}" : "Δεν ήταν δυνατή η αποστολή πρόσκλησης στον {actorId}", + "Invitations sent" : "Η προσκλήσεις στάλθηκαν", + "Error occurred when sending invitations" : "Παρουσιάστηκε σφάλμα κατά την αποστολή προσκλήσεων", + "Failed to join the conversation." : "Αποτυχία συμμετοχής στη συνομιλία.", + "An error occurred while creating breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη δημιουργία δωματίων διάσπασης", + "An error occurred while re-ordering the attendees" : "Παρουσιάστηκε σφάλμα κατά την αναδιάταξη των συμμετεχόντων", + "An error occurred while deleting breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη διαγραφή δωματίων διάσπασης", + "An error occurred while starting breakout rooms" : "Παρουσιάστηκε σφάλμα κατά την έναρξη δωματίων διάσπασης", + "An error occurred while stopping breakout rooms" : "Παρουσιάστηκε σφάλμα κατά τη διακοπή δωματίων διάσπασης", + "An error occurred while sending a message to the breakout rooms" : "Παρουσιάστηκε σφάλμα κατά την αποστολή μηνύματος στα δωμάτια διάσπασης", + "An error occurred while requesting assistance" : "Παρουσιάστηκε σφάλμα κατά την αίτηση βοήθειας", + "An error occurred while resetting the request for assistance" : "Παρουσιάστηκε σφάλμα κατά την επαναφορά της αίτησης βοήθειας", + "An error occurred while joining breakout room" : "Παρουσιάστηκε σφάλμα κατά τη συμμετοχή σε δωμάτιο διάσπασης", + "Failed to rename the thread" : "Αποτυχία μετονομασίας της συζήτησης", + "Error fetching upcoming events" : "Σφάλμα ανάκτησης επερχόμενων συμβάντων", + "Error fetching upcoming reminders" : "Σφάλμα ανάκτησης επερχόμενων υπενθυμίσεων", + "An error occurred while accepting an invitation" : "Παρουσιάστηκε σφάλμα κατά την αποδοχή πρόσκλησης", + "An error occurred while rejecting an invitation" : "Παρουσιάστηκε σφάλμα κατά την απόρριψη πρόσκλησης", + "{guest} (guest)" : "{guest} (επισκέπτης)", + "Poll draft has been saved" : "Το προσχέδιο δημοσκόπησης αποθηκεύτηκε", + "An error occurred while saving the draft" : "Παρουσιάστηκε σφάλμα κατά την αποθήκευση του προσχεδίου", + "An error occurred while submitting your vote" : "Παρουσιάστηκε σφάλμα κατά την υποβολή της ψήφου σας", + "An error occurred while ending the poll" : "Παρουσιάστηκε σφάλμα κατά τον τερματισμό της δημοσκόπησης", + "An error occurred while deleting the poll draft" : "Παρουσιάστηκε σφάλμα κατά τη διαγραφή του προσχεδίου δημοσκόπησης", + "Poll \"{name}\" was created by {user}. Click to vote" : "Η δημοσκόπηση \"{name}\" δημιουργήθηκε από τον {user}. Κάντε κλικ για να ψηφίσετε", + "Failed to add reaction" : "Αποτυχία προσθήκης αντίδρασης", + "Failed to remove reaction" : "Αποτυχία αφαίρεσης αντίδρασης", + "Error while uploading file \"{fileName}\"" : "Σφάλμα κατά την μεταφόρτωση του αρχείου \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Δεν επαρκεί ο ελεύθερος χώρος για τη μεταφόρτωση του αρχείου \"{fileName}\"", + "You are not allowed to share files" : "Δεν επιτρέπεται να μοιράζεστε αρχεία", + "Error while sharing file" : "Σφάλμα κατά τον διαμοιρασμό αρχείου", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Ο περιηγητής που χρησιμοποιείτε δεν υποστηρίζεται πλήρως από το Nextcloud Talk. Παρακαλώ χρησιμοποιήστε την τελευταία έκδοση του Mozilla Firefox, Microsoft Edge, Google Chrome ή Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Σε %n ώρα","Σε %n ώρες"], + "_%n minute _::_%n minutes_" : ["%n λεπτό","%n λεπτά"], + "In {hours} and {minutes}" : "Σε {hours} και {minutes}", + "_In %n minute_::_In %n minutes_" : ["Σε %n λεπτό","Σε %n λεπτά"], + "Later today – {timeLocale}" : "Αργότερα σήμερα – {timeLocale}", + "Tomorrow – {timeLocale}" : "Αύριο – {timeLocale}", + "This weekend – {timeLocale}" : "Αυτό το σαββατοκύριακο – {timeLocale}", + "Next week – {timeLocale}" : "Επόμενη εβδομάδα – {timeLocale}", + "Conversation link copied to clipboard" : "Ο σύνδεσμος συνομιλίας αντιγράφηκε στο πρόχειρο", + "The link could not be copied" : "Ο σύνδεσμος δεν μπορούσε να αντιγραφεί", + "Error while parsing a PROPFIND error" : "Σφάλμα κατά την ανάλυση σφάλματος PROPFIND", + "Sending signaling message has failed" : "Η αποστολή μηνύματος σηματοδότησης απέτυχε", + "Lost connection to signaling server. Trying to reconnect." : "Χάθηκε η σύνδεση με τον διακομιστή σηματοδοσίας. Προσπάθεια επανασύνδεσης.", + "Lost connection to signaling server." : "Έχασε η σύνδεση με τον διακομιστή σηματοδότησης.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Ο διαμορφωμένος διακομιστής σηματοδότησης πρέπει να ενημερωθεί για να είναι συμβατός με αυτήν την έκδοση του Talk. Παρακαλούμε επικοινωνήστε με τη διοίκησή σας.", + "Please restart the app." : "Παρακαλούμε επανεκκινήστε την εφαρμογή.", + "Please reload the page." : "Παρακαλούμε φορτώστε ξανά τη σελίδα.", + "Please try to restart the app." : "Παρακαλούμε προσπαθήστε να επανεκκινήσετε την εφαρμογή.", + "Please try to reload the page." : "Παρακαλούμε προσπαθήστε να φορτώσετε ξανά τη σελίδα.", + "Do not disturb" : "Μην ενοχλείτε", + "Away" : "Λείπω", + "Microphone {number}" : "Μικρόφωνο {number}", + "Camera {number}" : "Κάμερα {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Φαίνεται ότι μιλάτε ενώ είστε σε σίγαση, παρακαλώ ενεργοποιήστε τον ήχο σας για να ακουστείτε", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Δεν μπορεί να αποκατασταθεί η σύνδεση με τουλάχιστον ένα συμμετέχοντα. Ένας διακομιστής TURN ίσως απαιτείται για την περίπτωσή σας. Παρακαλώ ρωτήστε τον διαχειριστή σας για εγκατάσταση από τα ακόλουθα {linkstart}τεκμηρίωση{linkstart}", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Διαρκεί περισσότερο από το αναμενόμενο. Τα δικαιώματα των μέσων επικοινωνίας έχουν χορηγηθεί (ή απορριφθεί); Εάν ναι, κάντε επανεκκίνηση του προγράμματος περιήγησής σας, λόγω αποτυχιας του ήχου και του βίντεο", + "Access to microphone & camera is only possible with HTTPS" : "Η πρόσβαση στο μικρόφωνο και στην κάμερα είναι εφικτή μόνο μέσω HTTPS", + "Please move your setup to HTTPS" : "Παρακαλώ μεταφέρεται την εγκατάσταση σας σε HTTPS", + "Access to microphone & camera was denied" : "Άρνηση πρόσβασης στο μικρόφωνο & την κάμερα", + "WebRTC is not supported in your browser" : "Το WebRTC δεν υποστηρίζεται από τον φυλλομετρητή σας", + "Please use a different browser like Firefox or Chrome" : "Παρακαλούμε χρησιμοποιήστε διαφορετικό φυλλομετρητή όπως ο Firefox ή Chrome", + "Error while accessing microphone & camera" : "Σφάλμα κατά την πρόσβαση στο μικρόφωνο & την κάμερα", + "%s Talk on your mobile devices" : "%s Talk στις κινητές συσκευές σας", + "Join conversations at any time, anywhere, on any device." : "Συμμετέχετε σε συνομιλίες πάντα και παντού από όλες τις συσκευές.", + "Android app" : "Εφαρμογή Android", + "iOS app" : "Εφαρμογή iOS", + "__language_name__" : "Ελληνικά", + "Webhook Demo" : "Επίδειξη Webhook", + "Call summary (%s)" : "Περίληψη κλήσης (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Το bot περίληψης κλήσης δημοσιεύει ένα μήνυμα επισκόπησης μετά την κλήση που παραθέτει όλους τους συμμετέχοντες και σκιαγραφεί εργασίες", + "Tasks" : "Εργασίες", + "Notes" : "Σημειώσεις", + "Reports" : "Αναφορές", + "Decisions" : "Αποφάσεις", + "Agenda" : "Ημερήσια διάταξη", + "Call summary" : "Περίληψη κλήσης", + "Call summary - {title}" : "Περίληψη κλήσης - {title}", + "Talk conversation for event" : "Συνομιλία Talk για συμβάν", + "Client Push is installed, this improves the performance of desktop clients." : "Το Client Push είναι εγκατεστημένο, αυτό βελτιώνει την απόδοση των πελατών επιφάνειας εργασίας.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "Το {notify_push} δεν είναι εγκατεστημένο, αυτό μπορεί να οδηγήσει σε προβλήματα απόδοσης όταν χρησιμοποιούνται πελάτες επιφάνειας εργασίας.", + "Next meeting" : "Επόμενη συνάντηση", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Προγραμματίστε μια συνάντηση από το ημερολόγιό σας. Μια συνομιλία Talk πρέπει να οριστεί ως τοποθεσία για να εμφανίζεται εδώ", + "Join conversations from remote Nextcloud servers" : "Συμμετοχή σε συνομιλίες από απομακρυσμένους διακομιστές Nextcloud", + "Your default media state has been saved" : "Η προεπιλεγμένη κατάσταση πολυμέσων σας αποθηκεύτηκε", + "Set reminder for later today" : "Ορισμός υπενθύμισης για αργότερα σήμερα", + "Set reminder for tomorrow" : "Ορισμός υπενθύμισης για αύριο", + "Set reminder for this weekend" : "Ορισμός υπενθύμισης για αυτό το σαββατοκύριακο", + "Set reminder for next week" : "Ορισμός υπενθύμισης για την επόμενη εβδομάδα", + "Generate summary" : "Δημιουργία σύνοψης", + "Open poll • You voted already" : "Άνοιγμα δημοσκόπησης • Έχετε ήδη ψηφίσει", + "Open poll • Click to vote" : "Άνοιγμα δημοσκόπησης • Κάντε κλικ για να ψηφίσετε", + "Poll • Ended" : "Δημοσκόπηση • Ολοκληρώθηκε", + "Talk recording from {time} ({conversation})" : "Εγγραφή ομιλίας από {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Αποτελέσματα δημοσκόπησης • %n ψήφος","Αποτελέσματα δημοσκόπησης • %n ψήφοι"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Ανοιχτή δημοσκόπηση • %n ψήφος","Ανοιχτή δημοσκόπηση • %n ψήφοι"], + "Submit vote" : "Υποβολή ψήφου", + "Your privacy setting has been saved" : "Η ρύθμιση απορρήτου σας έχει αποθηκευτεί", + "Your personal setting has been saved" : "Η προσωπική σας ρύθμιση έχει αποθηκευτεί", + "Failed to save sounds setting" : "Αποτυχία αποθήκευσης της ρύθμισης ήχων", + "Sounds setting saved" : "Η ρύθμιση ήχων αποθηκεύτηκε", + "Nextcloud Talk was updated, you cannot start or join a call." : "Το Nextcloud Talk ενημερώθηκε, δεν μπορείτε να ξεκινήσετε ή να συμμετάσχετε σε κλήση.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Συμμετείχατε στη συνομιλία σε άλλο παράθυρο ή συσκευή. Αυτήν τη στιγμή δεν υποστηρίζεται από το Nextcloud Talk, επομένως αυτή η συνεδρία τερματίστηκε.", + "Nextcloud Talk was updated." : "Το Nextcloud Talk ενημερώθηκε.", + "Nextcloud is in maintenance mode." : "Το Nextcloud βρίσκεται σε λειτουργία συντήρησης.", + "Nextcloud Talk Federation was updated." : "Το Nextcloud Talk Federation ενημερώθηκε." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/en_GB.js b/l10n/en_GB.js new file mode 100644 index 0000000..9da7101 --- /dev/null +++ b/l10n/en_GB.js @@ -0,0 +1,2260 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n other","%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "Guest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident any more. Also when one of the participants leaves the conversation, the conversation is not automatically deleted any more. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages and share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators can now create breakout rooms (requires the High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Calls can now be recorded (requires the High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Messages can now be edited by logged-in authors and moderators for 6 hours", + "- Unsent message drafts are now saved in your browser" : "- Unsent message drafts are now saved in your browser", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Text chatting can now be done in a federated way with other Talk servers", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists", + "- Archive conversations to stay focused" : "- Archive conversations to stay focused", + "- Schedule a meeting into your calendar from within a conversation" : "- Schedule a meeting into your calendar from within a conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Search for messages of the current conversation directly in the right sidebar", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- See more conversations on a first glance with the new compact list (enable in the Talk settings)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- To receive push notifications during \"Do not disturb\", mark conversations as important", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Add other participants to a one-to-one call to create a new group call on the fly", + "- Use threads to keep your chat and discussions organized" : "- Use threads to keep your chat and discussions organised", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderators can now pin messages so they are kept at the top", + "- Schedule a message to send it at a later time" : "- Schedule a message to send it at a later time", + "_All %n participant_::_All %n participants_" : ["All %n participant","All %n participants"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a silent call" : "You started a silent call", + "Outgoing silent call" : "Outgoing silent call", + "{actor} started a silent call" : "{actor} started a silent call", + "Incoming silent call" : "Incoming silent call", + "You started a call" : "You started a call", + "Outgoing call" : "Outgoing call", + "{actor} started a call" : "{actor} started a call", + "Incoming call" : "Incoming call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "You accepted the invitation" : "You accepted the invitation", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "You declined the invitation" : "You declined the invitation", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added team {circle}" : "{actor} added team {circle}", + "You added team {circle}" : "You added team {circle}", + "An administrator added team {circle}" : "An administrator added team {circle}", + "{actor} removed team {circle}" : "{actor} removed team {circle}", + "You removed team {circle}" : "You removed team {circle}", + "An administrator removed team {circle}" : "An administrator removed team {circle}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "File shares are currently not supported in federated conversations" : "File shares are currently not supported in federated conversations", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} created thread {title}" : "{actor} created thread {title}", + "You created thread {title}" : "You created thread {title}", + "{actor} renamed thread {title}" : "{actor} renamed thread {title}", + "You renamed thread {title}" : "You renamed thread {title}", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} edited a message" : "{actor} edited a message", + "You edited a message" : "You edited a message", + "{actor} pinned a message" : "{actor} pinned a message", + "You pinned a message" : "You pinned a message", + "{actor} unpinned a message" : "{actor} unpinned a message", + "Message was automatically unpinned" : "Message was automatically unpinned", + "You unpinned a message" : "You unpinned a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started video recording", + "You started the video recording" : "You started video recording", + "{actor} stopped the video recording" : "{actor} stopped video recording", + "You stopped the video recording" : "You stopped video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (guest)", + "Missed call" : "Missed call", + "Unanswered call" : "Unanswered call", + "Call ended (Duration {duration})" : "Call ended (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Call was ended, as it reached the maximum call duration (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ended the call (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})","Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guest ended (Duration {duration})","Call with %n guests ended (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Call with {user1} ended (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Call with {user1} and {user2} ended (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Call with {user1}, {user2} and {user3} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "App disabled" : "App disabled", + "Conversation subfolders are disabled" : "Conversation subfolders are disabled", + "Storage quota exceeded" : "Storage quota exceeded", + "Could not prepare conversation folder" : "Could not prepare conversation folder", + "File not found" : "File not found", + "Path must point to a file" : "Path must point to a file", + "File is not inside the conversation draft folder for this room" : "File is not inside the conversation draft folder for this room", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "Password needs to be set" : "Password needs to be set", + "Uploading the file failed" : "Uploading the file failed", + "No image file provided" : "No image file provided", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Talk mentions" : "Talk mentions", + "More conversations" : "More conversations", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Missing email field in header line" : "Missing email field in header line", + "Following lines are invalid: %s" : "Following lines are invalid: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s invited you to conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "You were invited to conversation \"%s\".", + "Conversation invitation" : "Conversation invitation", + "Scheduled time" : "Scheduled time", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Click the button below to join the lobby now." : "Click the button below to join the lobby now.", + "Click the link below to join the lobby now." : "Click the link below to join the lobby now.", + "Join lobby for \"%s\"" : "Join lobby for \"%s\"", + "Click the button below to join the conversation now." : "Click the button below to join the conversation now.", + "Click the link below to join the conversation now." : "Click the link below to join the conversation now.", + "Join \"%s\"" : "Join \"%s\"", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "Dismiss notification", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to create a transcript for call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to create a transcript for the recording at {file} for the call in {call}. Please contact the administrator.", + "Call summary now available" : "Call summary now available", + "The summary for the call in {call} was uploaded to {file}." : "The summary for the call in {call} was uploaded to {file}.", + "Failed to summarize call recording" : "Failed to summarize call recording", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} invited you to join {roomName} on {remoteServer}", + "Accept" : "Accept", + "Decline" : "Decline", + "{user1} invited you to a federated conversation" : "{user1} invited you to a federated conversation", + "Someone reacted" : "Someone reacted", + "New message" : "New message", + "Reminder" : "Reminder", + "Someone mentioned you" : "Someone mentioned you", + "Notification" : "Notification", + "Someone reacted in a private conversation" : "Someone reacted in a private conversation", + "You received a message in a private conversation" : "You received a message in a private conversation", + "Reminder in a private conversation" : "Reminder in a private conversation", + "Someone mentioned you in a private conversation" : "Someone mentioned you in a private conversation", + "Notification in a private conversation" : "Notification in a private conversation", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mentioned team {team} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "A deleted user mentioned team {team} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (guest) mentioned team {team} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "A guest mentioned team {team} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "Accept call" : "Accept call", + "Incoming phone call from {call}" : "Incoming phone call from {call}", + "You missed a phone call from {call}" : "You missed a phone call from {call}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "Open settings", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} has expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "Default", + "Send messages, create threads, and start voice and video calls." : "Send messages, create threads, and start voice and video calls.", + "Presentation" : "Presentation", + "Voice room" : "Voice room", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Directly join the call, ideal for catch-ups or spontaneous meetings.", + "Webinar" : "Webinar", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background colour", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "Other", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Transcript is AI generated and may contain mistakes" : "Transcript is AI generated and may contain mistakes", + "Summary is AI generated and may contain mistakes" : "Summary is AI generated and may contain mistakes", + "Let's get started!" : "Let's get started!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organise webinars and events, customize your conversations and more.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "You can reply to messages, forward them to other chats and people, or copy message content.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "North Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Background blur", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.", + "Talk configuration values" : "Talk configuration values", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend not configured correctly. Run %s for details.", + "High-performance backend not configured correctly" : "High-performance backend not configured correctly", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push is installed, this improves the punctuality of Talk notifications.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} is not installed. This may lead to delayed Talk notifications.", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "Using the recording backend requires a High-performance backend.", + "No recording backend configured" : "No recording backend configured", + "SIP configuration" : "SIP configuration", + "Using the SIP functionality requires a High-performance backend." : "Using the SIP functionality requires a High-performance backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}", + "No SIP backend configured" : "No SIP backend configured", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Path is already shared with this conversation" : "Path is already shared with this conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Error occurred when getting the conversation information" : "Error occurred when getting the conversation information", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "The password is wrong. Try again.", + "Password" : "Password", + "Submit" : "Submit", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "Saving …", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "State", + "Name" : "Name", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated chats and calls work already. Attachment handling is coming in a future version.", + "Enable Federation in Talk app" : "Enable Federation in Talk app", + "Permissions" : "Permissions", + "Allow users to be invited to federated conversations" : "Allow users to be invited to federated conversations", + "Allow users to invite federated users into conversation" : "Allow users to invite federated users into conversation", + "Only allow to federate with trusted servers" : "Only allow to federate with trusted servers", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "When at least one group is selected, only people of the listed groups can invite federated users to conversations.", + "Groups allowed to invite federated users" : "Groups allowed to invite federated users", + "Select groups …" : "Select groups …", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "End-to-end encrypted calls" : "End-to-end encrypted calls", + "Enable encryption" : "Enable encryption", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile clients do not support end-to-end encrypted calls at the moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "Pending", + "Error" : "Error", + "Blocked" : "Blocked", + "Active" : "Active", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "Country", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "STUN included" : "STUN included", + "Yes" : "Yes", + "No" : "No", + "TURN included" : "TURN included", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend configuration is only possible with a High-performance backend.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "Recording transcription" : "Recording transcription", + "Automatically transcribe call recordings with a transcription provider" : "Automatically transcribe call recordings with a transcription provider", + "Automatically summarize call recordings with transcription and summary providers" : "Automatically summarize call recordings with transcription and summary providers", + "SIP configuration saved!" : "SIP configuration saved!", + "SIP configuration is only possible with a High-performance backend." : "SIP configuration is only possible with a High-performance backend.", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Do not show SIP Dial-out caller number" : "Do not show SIP Dial-out caller number", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient", + "Dial-out number" : "Dial-out number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatted number used as a fallback caller number for outgoing calls", + "Dial-out prefix" : "Dial-out prefix", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix to configured user number for outgoing calls (default is `+`)", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Nextcloud base URL" : "Nextcloud base URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Available features", + "Error: Websocket connection failed" : "Error: Websocket connection failed", + "Error code" : "Error code", + "Error message" : "Error message", + "Error: Websocket connection failed. Check browser console" : "Error: Websocket connection failed. Check browser console", + "High-performance backend URL" : "High-performance backend URL", + "Missing High-performance backend warning hidden" : "Missing High-performance backend warning hidden", + "High-performance backend settings saved" : "High-performance backend settings saved", + "Nextcloud Talk setup not complete" : "Nextcloud Talk setup not complete", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Install the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Quick installation guide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend.", + "Add High-performance backend server" : "Add High-performance backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Warn about connectivity issues in calls with more than 2 participants", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "OK", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "Federated user", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "You can create from 1 to 20 breakout rooms." : "You can create from 1 to 20 breakout rooms.", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "Confirm", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "Reset", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "Cancel", + "Unassigned participants" : "Unassigned participants", + "Back" : "Back", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Invalid calendar selected" : "Invalid calendar selected", + "Invalid start time selected" : "Invalid start time selected", + "Invalid end time selected" : "Invalid end time selected", + "Unknown error occurred" : "Unknown error occurred", + "Sending no invitations" : "Sending no invitations", + "{participant0} will receive an invitation" : "{participant0} will receive an invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} and {participant1} will receive invitations", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n other will receive invitations","{participant0}, {participant1} and %n others will receive invitations"], + "Invite {user}" : "Invite {user}", + "Invite all users and emails in this conversation" : "Invite all users and emails in this conversation", + "Meeting created" : "Meeting created", + "Upcoming meetings" : "Upcoming meetings", + "Loading …" : "Loading …", + "No upcoming meetings" : "No upcoming meetings", + "Schedule a meeting" : "Schedule a meeting", + "Meeting title" : "Meeting title", + "From" : "From", + "To" : "To", + "Calendar" : "Calendar", + "Attendees" : "Attendees", + "No other participants to send invitations to." : "No other participants to send invitations to.", + "Add attendees" : "Add attendees", + "Save" : "Save", + "Search participants" : "Search participants", + "No results" : "No results", + "Done" : "Done", + "Disable live transcription" : "Disable live transcription", + "Enable live transcription (generated by AI)" : "Enable live transcription (generated by AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Enable live transcription (Live transcriptions app is not installed)", + "Disable live translation" : "Disable live translation", + "Enable live translation (generated by AI)" : "Enable live translation (generated by AI)", + "Original language" : "Original language", + "Live translations app is not installed" : "Live translations app is not installed", + "Original language: {languageName}" : "Original language: {languageName}", + "Translated language" : "Translated language", + "Translated language: {languageName}" : "Translated language: {languageName}", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "Grid view", + "Error when trying to load the available live transcription languages" : "Error when trying to load the available live transcription languages", + "Failed to enable live transcription" : "Failed to enable live transcription", + "Failed to enable live translations" : "Failed to enable live translations", + "Failed to disable live translations" : "Failed to disable live translations", + "Recording consent is required" : "Recording consent is required", + "This conversation is read-only" : "This conversation is read-only", + "Conversation not found or not joined" : "Conversation not found or not joined", + "Lobby is still active and you're not a moderator" : "Lobby is still active and you're not a moderator", + "Connection failed" : "Connection failed", + "Reload" : "Reload", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "Copy link", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "None", + "Select a microphone" : "Select a microphone", + "Select a speaker" : "Select a speaker", + "Microphone settings" : "Microphone settings", + "Check devices" : "Check devices", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Hide presenter video" : "Hide presenter video", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Select a video device" : "Select a video device", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Federated conversation" : "Federated conversation", + "Public conversation" : "Public conversation", + "Favorite" : "Favourite", + "Banned users" : "Banned users", + "Manage the list of banned users in this conversation." : "Manage the list of banned users in this conversation.", + "Manage bans" : "Manage bans", + "No banned users" : "No banned users", + "Banned by:" : "Banned by:", + "Date:" : "Date:", + "Note:" : "Note:", + "Hide details" : "Hide details", + "Show details" : "Show details", + "Unban" : "Unban", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "You can change the title and the description in {linkstart}Calendar ↗{linkend}.", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "Disable", + "Enable" : "Enable", + "The bot is not available anymore" : "The bot is not available anymore", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "Choose", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background colour for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Participants can use all available features." : "Participants can use all available features.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Participants get a reduced feature set until a moderator manually grants additional permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "Personal", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Live transcription" : "Live transcription", + "Live transcriptions app is not installed" : "Live transcriptions app is not installed", + "Enable live transcription" : "Enable live transcription", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Archive conversation" : "Archive conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations.", + "Do you really want to leave \"{displayName}\"?" : "Do you really want to leave \"{displayName}\"?", + "You can archive this conversation instead." : "You can archive this conversation instead.", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Password copied to clipboard" : "Password copied to clipboard", + "Password could not be copied" : "Password could not be copied", + "Guest access" : "Guest access", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms are not allowed in public conversations.", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "This conversation is password-protected. Guests need password to join" : "This conversation is password-protected. Guests need password to join", + "Password protection is needed for public conversations" : "Password protection is needed for public conversations", + "Set a password" : "Set a password", + "Change password" : "Change password", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Copy password" : "Copy password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Set language spoken in calls" : "Set language spoken in calls", + "Languages could not be loaded" : "Languages could not be loaded", + "Loading languages …" : "Loading languages …", + "Invalid language" : "Invalid language", + "Default language (English)" : "Default language (English)", + "Default live transcription language set" : "Default live transcription language set", + "Live transcription language set: {languageName}" : "Live transcription language set: {languageName}", + "Error when trying to set live transcription language" : "Error when trying to set live transcription language", + "Start time: {date}" : "Start time: {date}", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Import email participants" : "Import email participants", + "You can import a list of email participants from a CSV file." : "You can import a list of email participants from a CSV file.", + "Poll drafts" : "Poll drafts", + "Browse poll drafts" : "Browse poll drafts", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "Edit", + "More information" : "More information", + "Delete" : "Delete", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Messaging systems" : "Messaging systems", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Only moderators are allowed to mention @all" : "Only moderators are allowed to mention @all", + "All participants are allowed to mention @all" : "All participants are allowed to mention @all", + "Participants are now allowed to mention @all." : "Participants are now allowed to mention @all.", + "Mentioning @all has been limited to moderators." : "Mentioning @all has been limited to moderators.", + "Allow participants to mention @all" : "Allow participants to mention @all", + "Mention permissions" : "Mention permissions", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "Important conversation", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Do not disturb\" user status is ignored for important conversations", + "Sensitive conversation" : "Sensitive conversation", + "Message preview will be disabled in conversation list and notifications" : "Message preview will be disabled in conversation list and notifications", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Ongoing" : "Ongoing", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person accepted","%n people accepted"], + "_%n person declined_::_%n people declined_" : ["%n person declined","%n people declined"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachment","and %n other attachments"], + "With {displayName}" : "With {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "View attachment", + "Join" : "Join", + "View conversation" : "View conversation", + "View event on Calendar" : "View event on Calendar", + "Error while creating the conversation" : "Error while creating the conversation", + "Hello, {displayName}" : "Hello, {displayName}", + "Start meeting now" : "Start meeting now", + "Give your meeting a title" : "Give your meeting a title", + "Create and copy link" : "Create and copy link", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Scroll backward" : "Scroll backward", + "Scroll forward" : "Scroll forward", + "Schedule meetings" : "Schedule meetings", + "You don't have any upcoming meetings" : "You don't have any upcoming meetings", + "Calendar events with a conversation link as the location are shown here" : "Calendar events with a conversation link as the location are shown here", + "Open calendar" : "Open calendar", + "Unread mentions" : "Unread mentions", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name", + "Upcoming reminders" : "Upcoming reminders", + "Message reminders" : "Message reminders", + "Set a reminder on a message to be notified" : "Set a reminder on a message to be notified", + "Start a group conversation" : "Start a group conversation", + "Create conversation" : "Create conversation", + "Enter your name" : "Enter your name", + "Submit name and join" : "Submit name and join", + "Do you already have an account?" : "Do you already have an account?", + "Log in" : "Log in", + "Error while verifying uploaded file" : "Error while verifying uploaded file", + "Uploaded file is verified" : "Uploaded file is verified", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Participants added successfully", + "Error while adding participants" : "Error while adding participants", + "Import a file" : "Import a file", + "Browse" : "Browse", + "Verifying uploaded file …" : "Verifying uploaded file …", + "This might take a moment" : "This might take a moment", + "Send invitations" : "Send invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid email","%n invalid emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate","%n emails are already imported or duplicates"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation can be sent","%n invitations can be sent"], + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "Remove from favourites", + "Add to favorites" : "Add to favourites", + "Unarchive conversation" : "Unarchive conversation", + "Ignore \"Do not disturb\"" : "Ignore \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Notify about calls" : "Notify about calls", + "Hide message text" : "Hide message text", + "Pending invitations" : "Pending invitations", + "Join conversations from other servers" : "Join conversations from other servers", + "From {user} at {remoteServer}" : "From {user} at {remoteServer}", + "Decline invitation" : "Decline invitation", + "Accept invitation" : "Accept invitation", + "No pending invitations" : "No pending invitations", + "Home" : "Home", + "Unread" : "Unread", + "Mentions" : "Mentions", + "Meetings" : "Meetings", + "Sort conversations" : "Sort conversations", + "By recent activity" : "By recent activity", + "Alphabetically" : "Alphabetically", + "Do not group by type" : "Do not group by type", + "Show private ones first" : "Show private ones first", + "Show group ones first" : "Show group ones first", + "No followed threads" : "No followed threads", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no archived conversations." : "You have no archived conversations.", + "Subscribe to an existing thread or start your own." : "Subscribe to an existing thread or start your own.", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Filter conversations by" : "Filter conversations by", + "Unread messages" : "Unread messages", + "Meeting conversations" : "Meeting conversations", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "SIP backend is not installed" : "SIP backend is not installed", + "Back to conversations" : "Back to conversations", + "Archived conversations" : "Archived conversations", + "Threads" : "Threads", + "Clear filter" : "Clear filter", + "Show more threads" : "Show more threads", + "App settings" : "App settings", + "Users" : "Users", + "Groups" : "Groups", + "Teams" : "Teams", + "Federated users" : "Federated users", + "New private conversation" : "New private conversation", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users, groups and teams" : "Users, groups and teams", + "Users and groups" : "Users and groups", + "Users and teams" : "Users and teams", + "Groups and teams" : "Groups and teams", + "New group conversation" : "New group conversation", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Enable noise suppression" : "Enable noise suppression", + "Reduce background noises for better voice quality" : "Reduce background noises for better voice quality", + "Enable echo cancellation" : "Enable echo cancellation", + "Minimize echo effect from own surrounding" : "Minimize echo effect from own surrounding", + "Enable auto gain control" : "Enable auto gain control", + "Dynamically adjust microphone volume for consistent level" : "Dynamically adjust microphone volume for consistent level", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select speaker" : "Select speaker", + "No speaker available" : "No speaker available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Select a device" : "Select a device", + "Playing …" : "Playing …", + "Test speakers" : "Test speakers", + "Test" : "Test", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Display video as you will see it (mirrored)" : "Display video as you will see it (mirrored)", + "Display video as others will see it" : "Display video as others will see it", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Show more info" : "Show more info", + "Audio is not available" : "Audio is not available", + "Video is not available" : "Video is not available", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Recording backend is not installed" : "Recording backend is not installed", + "Notify all participants about this call" : "Notify all participants about this call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "Invalid path selected", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "Upload", + "Files" : "Files", + "(editing)" : "(editing)", + "(edited)" : "(edited)", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 hours", + "7 days" : "7 days", + "30 days" : "30 days", + "Until unpin" : "Until unpin", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Edited by {actor}" : "Edited by {actor}", + "Pinned by you" : "Pinned by you", + "Pinned by {actor}" : "Pinned by {actor}", + "Until {absoluteDate}" : "Until {absoluteDate}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Pin message" : "Pin message", + "Unpin message" : "Unpin message", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message" : "Copy message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Download file" : "Download file", + "Go to thread" : "Go to thread", + "Edit thread details" : "Edit thread details", + "Forward message" : "Forward message", + "Translate" : "Translate", + "Set custom reminder" : "Set custom reminder", + "Keep pinned for" : "Keep pinned for", + "Set custom period" : "Set custom period", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "Dismiss", + "Go to conversation" : "Go to conversation", + "Detect language" : "Detect language", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "This translation is AI generated and may contain mistakes." : "This translation is AI generated and may contain mistakes.", + "Copy translated text" : "Copy translated text", + "Error when scheduling the message" : "Error when scheduling the message", + "Reschedule" : "Reschedule", + "Send now" : "Send now", + "Choose a time" : "Choose a time", + "Send at custom time" : "Send at custom time", + "Will be sent without notification" : "Will be sent without notification", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Sent without notification" : "Sent without notification", + "Deleting message" : "Deleting message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Pinned" : "Pinned", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n reply","%n replies"], + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Could not update the message" : "Could not update the message", + "Reply to thread \"{threadTitle}\"" : "Reply to thread \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["You voted • %n vote","You voted • %n votes"], + "You voted" : "You voted", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Click to vote • %n vote","Click to vote • %n votes"], + "Click to vote" : "Click to vote", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n option","Poll draft • %n options"], + "_%n vote_::_%n votes_" : ["%n vote","%n votes"], + "Edit poll draft" : "Edit poll draft", + "Delete poll draft" : "Delete poll draft", + "Open poll" : "Open poll", + "Closed poll" : "Closed poll", + "See results" : "See results", + "Reactions" : "Reactions", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "and {participant}" : "and {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participant","and %n other participants"], + "Show all reactions" : "Show all reactions", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Generate summary with AI" : "Generate summary with AI", + "{author} (pinned by you)" : "{author} (pinned by you)", + "{author} (pinned by {actor})" : "{author} (pinned by {actor})", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "Error: A password is required to create the conversation." : "Error: A password is required to create the conversation.", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Maximum length exceeded ({maxlength} characters)" : "Maximum length exceeded ({maxlength} characters)", + "Conversation type" : "Conversation type", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Write a message without notification" : "Write a message without notification", + "Create a thread silently" : "Create a thread silently", + "Create a thread" : "Create a thread", + "Send message silently" : "Send message silently", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "The participant will not be notified about new messages" : "The participant will not be notified about new messages", + "Participants will not be notified about new messages" : "Participants will not be notified about new messages", + "Message will be sent {datetimeString}" : "Message will be sent {datetimeString}", + "Thread title is required" : "Thread title is required", + "Message text is required" : "Message text is required", + "The message could not be edited" : "The message could not be edited", + "File to share" : "File to share", + "File upload is not available in this conversation" : "File upload is not available in this conversation", + "Message was successfully scheduled" : "Message was successfully scheduled", + "Add emoji" : "Add emoji", + "Adding a mention will only notify users who did not read the message." : "Adding a mention will only notify users who did not read the message.", + "Thread title" : "Thread title", + "Send later" : "Send later", + "Show scheduled messages" : "Show scheduled messages", + "Cancel editing" : "Cancel editing", + "Schedule message" : "Schedule message", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Absence period: {startDate} - {endDate}" : "Absence period: {startDate} - {endDate}", + "Replacement:" : "Replacement:", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "Voice message {time} ({conversation})" : "Voice message {time} ({conversation})", + "Generating summary of unread messages …" : "Generating summary of unread messages …", + "Summary is AI generated and might contain mistakes" : "Summary is AI generated and might contain mistakes", + "Error occurred during a summary generation" : "Error occurred during a summary generation", + "New file" : "New file", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "Send", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages" : "Can post messages", + "Can post messages and reactions" : "Can post messages and reactions", + "Can add reactions" : "Can add reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "No poll drafts" : "No poll drafts", + "There is no poll drafts yet saved for this conversation" : "There is no poll drafts yet saved for this conversation", + "Create poll in {name}" : "Create poll in {name}", + "Create poll" : "Create poll", + "Error while importing poll" : "Error while importing poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Import draft from file" : "Import draft from file", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "Settings", + "Anonymous poll" : "Anonymous poll", + "Multiple answers" : "Multiple answers", + "Save as draft" : "Save as draft", + "Export draft to file" : "Export draft to file", + "_Final results • %n vote_::_Final results • %n votes_" : ["Final results • %n vote","Final results • %n votes"], + "Your vote is anonymous" : "Your vote is anonymous", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Withdraw vote" : "Withdraw vote", + "Results" : "Results", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}", + "Talk setup incomplete" : "Talk setup incomplete", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "guest", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove team and members" : "Remove team and members", + "Remove participant" : "Remove participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Do you really want to remove group \"{displayName}\" and its members from this conversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Do you really want to remove team \"{displayName}\" and its members from this conversation?", + "Do you really want to remove {displayName} from this conversation?" : "Do you really want to remove {displayName} from this conversation?", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "in the lobby" : "in the lobby", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Move back to lobby" : "Move back to lobby", + "Move to conversation" : "Move to conversation", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Also ban from this conversation" : "Also ban from this conversation", + "Internal note (reason to ban)" : "Internal note (reason to ban)", + "Remove" : "Remove", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users, groups or teams" : "Add users, groups or teams", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Add users or teams", + "Add users" : "Add users", + "Add groups or teams" : "Add groups or teams", + "Add groups" : "Add groups", + "Add teams" : "Add teams", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "Searching …", + "Search for more users" : "Search for more users", + "You can search or add participants via name, email, or Federated Cloud ID" : "You can search or add participants via name, email, or Federated Cloud ID", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "A new group conversation with selected participant will be created" : "A new group conversation with selected participant will be created", + "Participants" : "Participants", + "Pinned by a deleted user" : "Pinned by a deleted user", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Search messages" : "Search messages", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Shared items", + "Search in {name}" : "Search in {name}", + "Threads in {name}" : "Threads in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Search messages …", + "Search options" : "Search options", + "From User" : "From User", + "Since" : "Since", + "Until" : "Until", + "No results found" : "No results found", + "Load more results" : "Load more results", + "Recent threads" : "Recent threads", + "Projects" : "Projects", + "No shared items" : "No shared items", + "Thread notifications" : "Thread notifications", + "Thread actions" : "Thread actions", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Display name (required)" : "Display name (required)", + "Save name" : "Save name", + "I picked message bubbles" : "I picked message bubbles", + "I picked the list style" : "I picked the list style", + "Error while setting personal setting" : "Error while setting personal setting", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Compact conversations list" : "Compact conversations list", + "Chat appearance" : "Chat appearance", + "Messages list" : "Messages list", + "Message bubbles" : "Message bubbles", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer", + "Notification settings" : "Notification settings", + "Sounds for chat and call notifications" : "Sounds for chat and call notifications", + "Invalid language ({languageId})" : "Invalid language ({languageId})", + "Default language" : "Default language", + "Default language ({languageName})" : "Default language ({languageName})", + "Error when trying to load the available live translation languages" : "Error when trying to load the available live translation languages", + "Error when trying to set live translation language" : "Error when trying to set live translation language", + "Set language used to show the transcriptions" : "Set language used to show the transcriptions", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Error while setting default media state" : "Error while setting default media state", + "Turn camera and microphone off by default" : "Turn camera and microphone off by default", + "Blur camera background by default" : "Blur camera background by default", + "Skip device preview before joining a call" : "Skip device preview before joining a call", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Camera will be turned off when joining. Always shown if recording consent is required.", + "Appearance & Sounds" : "Appearance & Sounds", + "Privacy" : "Privacy", + "Send read receipts" : "Send read receipts", + "When off, all read statuses will be hidden" : "When off, all read statuses will be hidden", + "Share typing status" : "Share typing status", + "When off, all typing indicators will be hidden" : "When off, all typing indicators will be hidden", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Return to Home screen" : "Return to Home screen", + "Search" : "Search", + "Shortcuts while in a chat" : "Shortcuts while in a chat", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Edit your last message" : "Edit your last message", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Zoom-in / zoom-out a screen share" : "Zoom-in / zoom-out a screen share", + "Mouse wheel" : "Mouse wheel", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "The server was updated, you cannot start or join a call." : "The server was updated, you cannot start or join a call.", + "This call has just ended" : "This call has just ended", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "Note: the call has been going on for an hour already.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "All tasks done!" : "All tasks done!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n task","{done} of %n tasks"], + "Add participants to this call" : "Add participants to this call", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "Scheduled messages" : "Scheduled messages", + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Select virtual background" : "Select virtual background", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Download attendance list" : "Download attendance list", + "Open Calendar" : "Open Calendar", + "Remove participant {name}" : "Remove participant {name}", + "Would you like to delete this conversation?" : "Would you like to delete this conversation?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["This conversation will be automatically deleted for everyone after %n day of inactivity.","This conversation will be automatically deleted for everyone after %n days of inactivity."], + "Are you sure you want to delete this conversation?" : "Are you sure you want to delete this conversation?", + "Delete now" : "Delete now", + "Keep" : "Keep", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Local time: {time}" : "Local time: {time}", + "Scheduled {datetime}" : "Scheduled {datetime}", + "Scheduled for {datetime}" : "Scheduled for {datetime}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "Mention everyone" : "Mention everyone", + "Select a conversation" : "Select a conversation", + "Select a mode" : "Select a mode", + "You do not have permissions to access this conversation." : "You do not have permissions to access this conversation.", + "Join a different conversation or start a new one." : "Join a different conversation or start a new one.", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs.", + "Creating and joining a conversation with \"{userid}\"" : "Creating and joining a conversation with \"{userid}\"", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Error while joining the conversation" : "Error while joining the conversation", + "Another user" : "Another user", + "Hey! Are you using the list style or message bubbles?" : "Hey! Are you using the list style or message bubbles?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel ID (prefixed with \"ID:\") or name" : "Channel ID (prefixed with \"ID:\") or name", + "Channel" : "Channel", + "Login" : "Login", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Pinned messages", + "Media" : "Media", + "Polls" : "Polls", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "Audio", + "Show all pinned messages" : "Show all pinned messages", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Follow conversation settings" : "Follow conversation settings", + "Group" : "Group", + "Team" : "Team", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You removed {user0} and {user1}" : "You removed {user0} and {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participant","You removed {user0}, {user1} and %n more participants"], + "An administrator removed you and {user0}" : "An administrator removed you and {user0}", + "{actor} removed you and {user0}" : "{actor} removed you and {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participant","An administrator removed you, {user0} and %n more participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participant","{actor} removed you, {user0} and %n more participants"], + "An administrator removed {user0} and {user1}" : "An administrator removed {user0} and {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removed {user0} and {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participant","An administrator removed {user0}, {user1} and %n more participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participant","{actor} removed {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You:" : "You:", + "You: {lastMessage}" : "You: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "The server was updated.", + "(edited by you)" : "(edited by you)", + "(edited by a deleted user)" : "(edited by a deleted user)", + "(edited by {moderator})" : "(edited by {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "Location has been posted to {conversation}" : "Location has been posted to {conversation}", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "In conversation" : "In conversation", + "Search in conversation: {conversation}" : "Search in conversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Your requests are throttled at the moment due to brute force protection", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not remove the automatic expiration" : "Could not remove the automatic expiration", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "Participant is banned successfully" : "Participant is banned successfully", + "Error while banning the participant" : "Error while banning the participant", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "Failed to join the conversation." : "Failed to join the conversation.", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "Failed to rename the thread" : "Failed to rename the thread", + "Error fetching upcoming events" : "Error fetching upcoming events", + "Error fetching upcoming reminders" : "Error fetching upcoming reminders", + "An error occurred while accepting an invitation" : "An error occurred while accepting an invitation", + "An error occurred while rejecting an invitation" : "An error occurred while rejecting an invitation", + "{guest} (guest)" : "{guest} (guest)", + "Poll draft has been saved" : "Poll draft has been saved", + "An error occurred while saving the draft" : "An error occurred while saving the draft", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "An error occurred while deleting the poll draft" : "An error occurred while deleting the poll draft", + "Poll \"{name}\" was created by {user}. Click to vote" : "Poll \"{name}\" was created by {user}. Click to vote", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "The server is in maintenance mode." : "The server is in maintenance mode.", + "Federated server was updated." : "Federated server was updated.", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hour","In %n hours"], + "_%n minute _::_%n minutes_" : ["%n minute ","%n minutes"], + "In {hours} and {minutes}" : "In {hours} and {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minute","In %n minutes"], + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Set time for later today" : "Set time for later today", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "Set time for tomorrow" : "Set time for tomorrow", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Set time for this weekend" : "Set time for this weekend", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Set time for next week" : "Set time for next week", + "Message link copied to clipboard" : "Message link copied to clipboard", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Error while parsing a PROPFIND error" : "Error while parsing a PROPFIND error", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "Lost connection to signaling server." : "Lost connection to signaling server.", + "Connecting is taking longer than expected …" : "Connecting is taking longer than expected …", + "Failed to connect. Retrying …" : "Failed to connect. Retrying …", + "Failed to connect. The signaling server may be set up incorrectly" : "Failed to connect. The signaling server may be set up incorrectly", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please restart the app." : "Please restart the app.", + "Please reload the page." : "Please reload the page.", + "Please try to restart the app." : "Please try to restart the app.", + "Please try to reload the page." : "Please try to reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "English (British English)", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Call summary (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "The call summary bot posts an overview message after the call listing all participants and outlining tasks", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Reports" : "Reports", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Call summary", + "Call summary - {title}" : "Call summary - {title}", + "Talk conversation for event" : "Talk conversation for event", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push is installed, this improves the performance of desktop clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} is not installed, this might lead to performance issues when using desktop clients.", + "Next meeting" : "Next meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here", + "Join conversations from remote Nextcloud servers" : "Join conversations from remote Nextcloud servers", + "Your default media state has been saved" : "Your default media state has been saved", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Generate summary" : "Generate summary", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Your personal setting has been saved" : "Your personal setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "Always shown if recording consent is required" : "Always shown if recording consent is required", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk was updated, you cannot start or join a call.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed.", + "Nextcloud Talk was updated." : "Nextcloud Talk was updated.", + "Nextcloud is in maintenance mode." : "Nextcloud is in maintenance mode.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation was updated.", + "Enable live translation" : "Enable live translation", + "I picked list style" : "I picked list style", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Are you using Talk in list style or with message bubbles?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/en_GB.json b/l10n/en_GB.json new file mode 100644 index 0000000..086bf9d --- /dev/null +++ b/l10n/en_GB.json @@ -0,0 +1,2258 @@ +{ "translations": { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n other","%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "Guest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident any more. Also when one of the participants leaves the conversation, the conversation is not automatically deleted any more. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages and share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators can now create breakout rooms (requires the High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Calls can now be recorded (requires the High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Messages can now be edited by logged-in authors and moderators for 6 hours", + "- Unsent message drafts are now saved in your browser" : "- Unsent message drafts are now saved in your browser", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Text chatting can now be done in a federated way with other Talk servers", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists", + "- Archive conversations to stay focused" : "- Archive conversations to stay focused", + "- Schedule a meeting into your calendar from within a conversation" : "- Schedule a meeting into your calendar from within a conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Search for messages of the current conversation directly in the right sidebar", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- See more conversations on a first glance with the new compact list (enable in the Talk settings)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- To receive push notifications during \"Do not disturb\", mark conversations as important", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Add other participants to a one-to-one call to create a new group call on the fly", + "- Use threads to keep your chat and discussions organized" : "- Use threads to keep your chat and discussions organised", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderators can now pin messages so they are kept at the top", + "- Schedule a message to send it at a later time" : "- Schedule a message to send it at a later time", + "_All %n participant_::_All %n participants_" : ["All %n participant","All %n participants"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a silent call" : "You started a silent call", + "Outgoing silent call" : "Outgoing silent call", + "{actor} started a silent call" : "{actor} started a silent call", + "Incoming silent call" : "Incoming silent call", + "You started a call" : "You started a call", + "Outgoing call" : "Outgoing call", + "{actor} started a call" : "{actor} started a call", + "Incoming call" : "Incoming call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "You accepted the invitation" : "You accepted the invitation", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "You declined the invitation" : "You declined the invitation", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added team {circle}" : "{actor} added team {circle}", + "You added team {circle}" : "You added team {circle}", + "An administrator added team {circle}" : "An administrator added team {circle}", + "{actor} removed team {circle}" : "{actor} removed team {circle}", + "You removed team {circle}" : "You removed team {circle}", + "An administrator removed team {circle}" : "An administrator removed team {circle}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "File shares are currently not supported in federated conversations" : "File shares are currently not supported in federated conversations", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} created thread {title}" : "{actor} created thread {title}", + "You created thread {title}" : "You created thread {title}", + "{actor} renamed thread {title}" : "{actor} renamed thread {title}", + "You renamed thread {title}" : "You renamed thread {title}", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} edited a message" : "{actor} edited a message", + "You edited a message" : "You edited a message", + "{actor} pinned a message" : "{actor} pinned a message", + "You pinned a message" : "You pinned a message", + "{actor} unpinned a message" : "{actor} unpinned a message", + "Message was automatically unpinned" : "Message was automatically unpinned", + "You unpinned a message" : "You unpinned a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started video recording", + "You started the video recording" : "You started video recording", + "{actor} stopped the video recording" : "{actor} stopped video recording", + "You stopped the video recording" : "You stopped video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (guest)", + "Missed call" : "Missed call", + "Unanswered call" : "Unanswered call", + "Call ended (Duration {duration})" : "Call ended (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Call was ended, as it reached the maximum call duration (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ended the call (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})","Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guest ended (Duration {duration})","Call with %n guests ended (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Call with {user1} ended (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Call with {user1} and {user2} ended (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Call with {user1}, {user2} and {user3} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "App disabled" : "App disabled", + "Conversation subfolders are disabled" : "Conversation subfolders are disabled", + "Storage quota exceeded" : "Storage quota exceeded", + "Could not prepare conversation folder" : "Could not prepare conversation folder", + "File not found" : "File not found", + "Path must point to a file" : "Path must point to a file", + "File is not inside the conversation draft folder for this room" : "File is not inside the conversation draft folder for this room", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "Password needs to be set" : "Password needs to be set", + "Uploading the file failed" : "Uploading the file failed", + "No image file provided" : "No image file provided", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Talk mentions" : "Talk mentions", + "More conversations" : "More conversations", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Missing email field in header line" : "Missing email field in header line", + "Following lines are invalid: %s" : "Following lines are invalid: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s invited you to conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "You were invited to conversation \"%s\".", + "Conversation invitation" : "Conversation invitation", + "Scheduled time" : "Scheduled time", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Click the button below to join the lobby now." : "Click the button below to join the lobby now.", + "Click the link below to join the lobby now." : "Click the link below to join the lobby now.", + "Join lobby for \"%s\"" : "Join lobby for \"%s\"", + "Click the button below to join the conversation now." : "Click the button below to join the conversation now.", + "Click the link below to join the conversation now." : "Click the link below to join the conversation now.", + "Join \"%s\"" : "Join \"%s\"", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "Dismiss notification", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to create a transcript for call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to create a transcript for the recording at {file} for the call in {call}. Please contact the administrator.", + "Call summary now available" : "Call summary now available", + "The summary for the call in {call} was uploaded to {file}." : "The summary for the call in {call} was uploaded to {file}.", + "Failed to summarize call recording" : "Failed to summarize call recording", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} invited you to join {roomName} on {remoteServer}", + "Accept" : "Accept", + "Decline" : "Decline", + "{user1} invited you to a federated conversation" : "{user1} invited you to a federated conversation", + "Someone reacted" : "Someone reacted", + "New message" : "New message", + "Reminder" : "Reminder", + "Someone mentioned you" : "Someone mentioned you", + "Notification" : "Notification", + "Someone reacted in a private conversation" : "Someone reacted in a private conversation", + "You received a message in a private conversation" : "You received a message in a private conversation", + "Reminder in a private conversation" : "Reminder in a private conversation", + "Someone mentioned you in a private conversation" : "Someone mentioned you in a private conversation", + "Notification in a private conversation" : "Notification in a private conversation", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mentioned team {team} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "A deleted user mentioned team {team} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (guest) mentioned team {team} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "A guest mentioned team {team} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "Accept call" : "Accept call", + "Incoming phone call from {call}" : "Incoming phone call from {call}", + "You missed a phone call from {call}" : "You missed a phone call from {call}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "Open settings", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} has expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "Default", + "Send messages, create threads, and start voice and video calls." : "Send messages, create threads, and start voice and video calls.", + "Presentation" : "Presentation", + "Voice room" : "Voice room", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Directly join the call, ideal for catch-ups or spontaneous meetings.", + "Webinar" : "Webinar", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background colour", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "Other", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Transcript is AI generated and may contain mistakes" : "Transcript is AI generated and may contain mistakes", + "Summary is AI generated and may contain mistakes" : "Summary is AI generated and may contain mistakes", + "Let's get started!" : "Let's get started!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organise webinars and events, customize your conversations and more.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "You can reply to messages, forward them to other chats and people, or copy message content.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "North Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Background blur", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.", + "Talk configuration values" : "Talk configuration values", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend not configured correctly. Run %s for details.", + "High-performance backend not configured correctly" : "High-performance backend not configured correctly", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push is installed, this improves the punctuality of Talk notifications.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} is not installed. This may lead to delayed Talk notifications.", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "Using the recording backend requires a High-performance backend.", + "No recording backend configured" : "No recording backend configured", + "SIP configuration" : "SIP configuration", + "Using the SIP functionality requires a High-performance backend." : "Using the SIP functionality requires a High-performance backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}", + "No SIP backend configured" : "No SIP backend configured", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Path is already shared with this conversation" : "Path is already shared with this conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Error occurred when getting the conversation information" : "Error occurred when getting the conversation information", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "The password is wrong. Try again.", + "Password" : "Password", + "Submit" : "Submit", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "Saving …", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "State", + "Name" : "Name", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated chats and calls work already. Attachment handling is coming in a future version.", + "Enable Federation in Talk app" : "Enable Federation in Talk app", + "Permissions" : "Permissions", + "Allow users to be invited to federated conversations" : "Allow users to be invited to federated conversations", + "Allow users to invite federated users into conversation" : "Allow users to invite federated users into conversation", + "Only allow to federate with trusted servers" : "Only allow to federate with trusted servers", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "When at least one group is selected, only people of the listed groups can invite federated users to conversations.", + "Groups allowed to invite federated users" : "Groups allowed to invite federated users", + "Select groups …" : "Select groups …", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "End-to-end encrypted calls" : "End-to-end encrypted calls", + "Enable encryption" : "Enable encryption", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile clients do not support end-to-end encrypted calls at the moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "Pending", + "Error" : "Error", + "Blocked" : "Blocked", + "Active" : "Active", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "Country", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "STUN included" : "STUN included", + "Yes" : "Yes", + "No" : "No", + "TURN included" : "TURN included", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend configuration is only possible with a High-performance backend.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "Recording transcription" : "Recording transcription", + "Automatically transcribe call recordings with a transcription provider" : "Automatically transcribe call recordings with a transcription provider", + "Automatically summarize call recordings with transcription and summary providers" : "Automatically summarize call recordings with transcription and summary providers", + "SIP configuration saved!" : "SIP configuration saved!", + "SIP configuration is only possible with a High-performance backend." : "SIP configuration is only possible with a High-performance backend.", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Do not show SIP Dial-out caller number" : "Do not show SIP Dial-out caller number", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient", + "Dial-out number" : "Dial-out number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatted number used as a fallback caller number for outgoing calls", + "Dial-out prefix" : "Dial-out prefix", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix to configured user number for outgoing calls (default is `+`)", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Nextcloud base URL" : "Nextcloud base URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Available features", + "Error: Websocket connection failed" : "Error: Websocket connection failed", + "Error code" : "Error code", + "Error message" : "Error message", + "Error: Websocket connection failed. Check browser console" : "Error: Websocket connection failed. Check browser console", + "High-performance backend URL" : "High-performance backend URL", + "Missing High-performance backend warning hidden" : "Missing High-performance backend warning hidden", + "High-performance backend settings saved" : "High-performance backend settings saved", + "Nextcloud Talk setup not complete" : "Nextcloud Talk setup not complete", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Install the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Quick installation guide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend.", + "Add High-performance backend server" : "Add High-performance backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Warn about connectivity issues in calls with more than 2 participants", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "OK", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "Federated user", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "You can create from 1 to 20 breakout rooms." : "You can create from 1 to 20 breakout rooms.", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "Confirm", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "Reset", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "Cancel", + "Unassigned participants" : "Unassigned participants", + "Back" : "Back", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Invalid calendar selected" : "Invalid calendar selected", + "Invalid start time selected" : "Invalid start time selected", + "Invalid end time selected" : "Invalid end time selected", + "Unknown error occurred" : "Unknown error occurred", + "Sending no invitations" : "Sending no invitations", + "{participant0} will receive an invitation" : "{participant0} will receive an invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} and {participant1} will receive invitations", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n other will receive invitations","{participant0}, {participant1} and %n others will receive invitations"], + "Invite {user}" : "Invite {user}", + "Invite all users and emails in this conversation" : "Invite all users and emails in this conversation", + "Meeting created" : "Meeting created", + "Upcoming meetings" : "Upcoming meetings", + "Loading …" : "Loading …", + "No upcoming meetings" : "No upcoming meetings", + "Schedule a meeting" : "Schedule a meeting", + "Meeting title" : "Meeting title", + "From" : "From", + "To" : "To", + "Calendar" : "Calendar", + "Attendees" : "Attendees", + "No other participants to send invitations to." : "No other participants to send invitations to.", + "Add attendees" : "Add attendees", + "Save" : "Save", + "Search participants" : "Search participants", + "No results" : "No results", + "Done" : "Done", + "Disable live transcription" : "Disable live transcription", + "Enable live transcription (generated by AI)" : "Enable live transcription (generated by AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Enable live transcription (Live transcriptions app is not installed)", + "Disable live translation" : "Disable live translation", + "Enable live translation (generated by AI)" : "Enable live translation (generated by AI)", + "Original language" : "Original language", + "Live translations app is not installed" : "Live translations app is not installed", + "Original language: {languageName}" : "Original language: {languageName}", + "Translated language" : "Translated language", + "Translated language: {languageName}" : "Translated language: {languageName}", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "Grid view", + "Error when trying to load the available live transcription languages" : "Error when trying to load the available live transcription languages", + "Failed to enable live transcription" : "Failed to enable live transcription", + "Failed to enable live translations" : "Failed to enable live translations", + "Failed to disable live translations" : "Failed to disable live translations", + "Recording consent is required" : "Recording consent is required", + "This conversation is read-only" : "This conversation is read-only", + "Conversation not found or not joined" : "Conversation not found or not joined", + "Lobby is still active and you're not a moderator" : "Lobby is still active and you're not a moderator", + "Connection failed" : "Connection failed", + "Reload" : "Reload", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "Copy link", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "None", + "Select a microphone" : "Select a microphone", + "Select a speaker" : "Select a speaker", + "Microphone settings" : "Microphone settings", + "Check devices" : "Check devices", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Hide presenter video" : "Hide presenter video", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Select a video device" : "Select a video device", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Federated conversation" : "Federated conversation", + "Public conversation" : "Public conversation", + "Favorite" : "Favourite", + "Banned users" : "Banned users", + "Manage the list of banned users in this conversation." : "Manage the list of banned users in this conversation.", + "Manage bans" : "Manage bans", + "No banned users" : "No banned users", + "Banned by:" : "Banned by:", + "Date:" : "Date:", + "Note:" : "Note:", + "Hide details" : "Hide details", + "Show details" : "Show details", + "Unban" : "Unban", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "You can change the title and the description in {linkstart}Calendar ↗{linkend}.", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "Disable", + "Enable" : "Enable", + "The bot is not available anymore" : "The bot is not available anymore", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "Choose", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background colour for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Participants can use all available features." : "Participants can use all available features.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Participants get a reduced feature set until a moderator manually grants additional permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "Personal", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Live transcription" : "Live transcription", + "Live transcriptions app is not installed" : "Live transcriptions app is not installed", + "Enable live transcription" : "Enable live transcription", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Archive conversation" : "Archive conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations.", + "Do you really want to leave \"{displayName}\"?" : "Do you really want to leave \"{displayName}\"?", + "You can archive this conversation instead." : "You can archive this conversation instead.", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Password copied to clipboard" : "Password copied to clipboard", + "Password could not be copied" : "Password could not be copied", + "Guest access" : "Guest access", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms are not allowed in public conversations.", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "This conversation is password-protected. Guests need password to join" : "This conversation is password-protected. Guests need password to join", + "Password protection is needed for public conversations" : "Password protection is needed for public conversations", + "Set a password" : "Set a password", + "Change password" : "Change password", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Copy password" : "Copy password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Set language spoken in calls" : "Set language spoken in calls", + "Languages could not be loaded" : "Languages could not be loaded", + "Loading languages …" : "Loading languages …", + "Invalid language" : "Invalid language", + "Default language (English)" : "Default language (English)", + "Default live transcription language set" : "Default live transcription language set", + "Live transcription language set: {languageName}" : "Live transcription language set: {languageName}", + "Error when trying to set live transcription language" : "Error when trying to set live transcription language", + "Start time: {date}" : "Start time: {date}", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Import email participants" : "Import email participants", + "You can import a list of email participants from a CSV file." : "You can import a list of email participants from a CSV file.", + "Poll drafts" : "Poll drafts", + "Browse poll drafts" : "Browse poll drafts", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "Edit", + "More information" : "More information", + "Delete" : "Delete", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Messaging systems" : "Messaging systems", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Only moderators are allowed to mention @all" : "Only moderators are allowed to mention @all", + "All participants are allowed to mention @all" : "All participants are allowed to mention @all", + "Participants are now allowed to mention @all." : "Participants are now allowed to mention @all.", + "Mentioning @all has been limited to moderators." : "Mentioning @all has been limited to moderators.", + "Allow participants to mention @all" : "Allow participants to mention @all", + "Mention permissions" : "Mention permissions", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "Important conversation", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Do not disturb\" user status is ignored for important conversations", + "Sensitive conversation" : "Sensitive conversation", + "Message preview will be disabled in conversation list and notifications" : "Message preview will be disabled in conversation list and notifications", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Ongoing" : "Ongoing", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person accepted","%n people accepted"], + "_%n person declined_::_%n people declined_" : ["%n person declined","%n people declined"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachment","and %n other attachments"], + "With {displayName}" : "With {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "View attachment", + "Join" : "Join", + "View conversation" : "View conversation", + "View event on Calendar" : "View event on Calendar", + "Error while creating the conversation" : "Error while creating the conversation", + "Hello, {displayName}" : "Hello, {displayName}", + "Start meeting now" : "Start meeting now", + "Give your meeting a title" : "Give your meeting a title", + "Create and copy link" : "Create and copy link", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Scroll backward" : "Scroll backward", + "Scroll forward" : "Scroll forward", + "Schedule meetings" : "Schedule meetings", + "You don't have any upcoming meetings" : "You don't have any upcoming meetings", + "Calendar events with a conversation link as the location are shown here" : "Calendar events with a conversation link as the location are shown here", + "Open calendar" : "Open calendar", + "Unread mentions" : "Unread mentions", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name", + "Upcoming reminders" : "Upcoming reminders", + "Message reminders" : "Message reminders", + "Set a reminder on a message to be notified" : "Set a reminder on a message to be notified", + "Start a group conversation" : "Start a group conversation", + "Create conversation" : "Create conversation", + "Enter your name" : "Enter your name", + "Submit name and join" : "Submit name and join", + "Do you already have an account?" : "Do you already have an account?", + "Log in" : "Log in", + "Error while verifying uploaded file" : "Error while verifying uploaded file", + "Uploaded file is verified" : "Uploaded file is verified", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Participants added successfully", + "Error while adding participants" : "Error while adding participants", + "Import a file" : "Import a file", + "Browse" : "Browse", + "Verifying uploaded file …" : "Verifying uploaded file …", + "This might take a moment" : "This might take a moment", + "Send invitations" : "Send invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid email","%n invalid emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate","%n emails are already imported or duplicates"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation can be sent","%n invitations can be sent"], + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "Remove from favourites", + "Add to favorites" : "Add to favourites", + "Unarchive conversation" : "Unarchive conversation", + "Ignore \"Do not disturb\"" : "Ignore \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Notify about calls" : "Notify about calls", + "Hide message text" : "Hide message text", + "Pending invitations" : "Pending invitations", + "Join conversations from other servers" : "Join conversations from other servers", + "From {user} at {remoteServer}" : "From {user} at {remoteServer}", + "Decline invitation" : "Decline invitation", + "Accept invitation" : "Accept invitation", + "No pending invitations" : "No pending invitations", + "Home" : "Home", + "Unread" : "Unread", + "Mentions" : "Mentions", + "Meetings" : "Meetings", + "Sort conversations" : "Sort conversations", + "By recent activity" : "By recent activity", + "Alphabetically" : "Alphabetically", + "Do not group by type" : "Do not group by type", + "Show private ones first" : "Show private ones first", + "Show group ones first" : "Show group ones first", + "No followed threads" : "No followed threads", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no archived conversations." : "You have no archived conversations.", + "Subscribe to an existing thread or start your own." : "Subscribe to an existing thread or start your own.", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Filter conversations by" : "Filter conversations by", + "Unread messages" : "Unread messages", + "Meeting conversations" : "Meeting conversations", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "SIP backend is not installed" : "SIP backend is not installed", + "Back to conversations" : "Back to conversations", + "Archived conversations" : "Archived conversations", + "Threads" : "Threads", + "Clear filter" : "Clear filter", + "Show more threads" : "Show more threads", + "App settings" : "App settings", + "Users" : "Users", + "Groups" : "Groups", + "Teams" : "Teams", + "Federated users" : "Federated users", + "New private conversation" : "New private conversation", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users, groups and teams" : "Users, groups and teams", + "Users and groups" : "Users and groups", + "Users and teams" : "Users and teams", + "Groups and teams" : "Groups and teams", + "New group conversation" : "New group conversation", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Enable noise suppression" : "Enable noise suppression", + "Reduce background noises for better voice quality" : "Reduce background noises for better voice quality", + "Enable echo cancellation" : "Enable echo cancellation", + "Minimize echo effect from own surrounding" : "Minimize echo effect from own surrounding", + "Enable auto gain control" : "Enable auto gain control", + "Dynamically adjust microphone volume for consistent level" : "Dynamically adjust microphone volume for consistent level", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select speaker" : "Select speaker", + "No speaker available" : "No speaker available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Select a device" : "Select a device", + "Playing …" : "Playing …", + "Test speakers" : "Test speakers", + "Test" : "Test", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Display video as you will see it (mirrored)" : "Display video as you will see it (mirrored)", + "Display video as others will see it" : "Display video as others will see it", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Show more info" : "Show more info", + "Audio is not available" : "Audio is not available", + "Video is not available" : "Video is not available", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Recording backend is not installed" : "Recording backend is not installed", + "Notify all participants about this call" : "Notify all participants about this call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "Invalid path selected", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "Upload", + "Files" : "Files", + "(editing)" : "(editing)", + "(edited)" : "(edited)", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 hours", + "7 days" : "7 days", + "30 days" : "30 days", + "Until unpin" : "Until unpin", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Edited by {actor}" : "Edited by {actor}", + "Pinned by you" : "Pinned by you", + "Pinned by {actor}" : "Pinned by {actor}", + "Until {absoluteDate}" : "Until {absoluteDate}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Pin message" : "Pin message", + "Unpin message" : "Unpin message", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message" : "Copy message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Download file" : "Download file", + "Go to thread" : "Go to thread", + "Edit thread details" : "Edit thread details", + "Forward message" : "Forward message", + "Translate" : "Translate", + "Set custom reminder" : "Set custom reminder", + "Keep pinned for" : "Keep pinned for", + "Set custom period" : "Set custom period", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "Dismiss", + "Go to conversation" : "Go to conversation", + "Detect language" : "Detect language", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "This translation is AI generated and may contain mistakes." : "This translation is AI generated and may contain mistakes.", + "Copy translated text" : "Copy translated text", + "Error when scheduling the message" : "Error when scheduling the message", + "Reschedule" : "Reschedule", + "Send now" : "Send now", + "Choose a time" : "Choose a time", + "Send at custom time" : "Send at custom time", + "Will be sent without notification" : "Will be sent without notification", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Sent without notification" : "Sent without notification", + "Deleting message" : "Deleting message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Pinned" : "Pinned", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n reply","%n replies"], + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Could not update the message" : "Could not update the message", + "Reply to thread \"{threadTitle}\"" : "Reply to thread \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["You voted • %n vote","You voted • %n votes"], + "You voted" : "You voted", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Click to vote • %n vote","Click to vote • %n votes"], + "Click to vote" : "Click to vote", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n option","Poll draft • %n options"], + "_%n vote_::_%n votes_" : ["%n vote","%n votes"], + "Edit poll draft" : "Edit poll draft", + "Delete poll draft" : "Delete poll draft", + "Open poll" : "Open poll", + "Closed poll" : "Closed poll", + "See results" : "See results", + "Reactions" : "Reactions", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "and {participant}" : "and {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participant","and %n other participants"], + "Show all reactions" : "Show all reactions", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Generate summary with AI" : "Generate summary with AI", + "{author} (pinned by you)" : "{author} (pinned by you)", + "{author} (pinned by {actor})" : "{author} (pinned by {actor})", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "Error: A password is required to create the conversation." : "Error: A password is required to create the conversation.", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Maximum length exceeded ({maxlength} characters)" : "Maximum length exceeded ({maxlength} characters)", + "Conversation type" : "Conversation type", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Write a message without notification" : "Write a message without notification", + "Create a thread silently" : "Create a thread silently", + "Create a thread" : "Create a thread", + "Send message silently" : "Send message silently", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "The participant will not be notified about new messages" : "The participant will not be notified about new messages", + "Participants will not be notified about new messages" : "Participants will not be notified about new messages", + "Message will be sent {datetimeString}" : "Message will be sent {datetimeString}", + "Thread title is required" : "Thread title is required", + "Message text is required" : "Message text is required", + "The message could not be edited" : "The message could not be edited", + "File to share" : "File to share", + "File upload is not available in this conversation" : "File upload is not available in this conversation", + "Message was successfully scheduled" : "Message was successfully scheduled", + "Add emoji" : "Add emoji", + "Adding a mention will only notify users who did not read the message." : "Adding a mention will only notify users who did not read the message.", + "Thread title" : "Thread title", + "Send later" : "Send later", + "Show scheduled messages" : "Show scheduled messages", + "Cancel editing" : "Cancel editing", + "Schedule message" : "Schedule message", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Absence period: {startDate} - {endDate}" : "Absence period: {startDate} - {endDate}", + "Replacement:" : "Replacement:", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "Voice message {time} ({conversation})" : "Voice message {time} ({conversation})", + "Generating summary of unread messages …" : "Generating summary of unread messages …", + "Summary is AI generated and might contain mistakes" : "Summary is AI generated and might contain mistakes", + "Error occurred during a summary generation" : "Error occurred during a summary generation", + "New file" : "New file", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "Send", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages" : "Can post messages", + "Can post messages and reactions" : "Can post messages and reactions", + "Can add reactions" : "Can add reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "No poll drafts" : "No poll drafts", + "There is no poll drafts yet saved for this conversation" : "There is no poll drafts yet saved for this conversation", + "Create poll in {name}" : "Create poll in {name}", + "Create poll" : "Create poll", + "Error while importing poll" : "Error while importing poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Import draft from file" : "Import draft from file", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "Settings", + "Anonymous poll" : "Anonymous poll", + "Multiple answers" : "Multiple answers", + "Save as draft" : "Save as draft", + "Export draft to file" : "Export draft to file", + "_Final results • %n vote_::_Final results • %n votes_" : ["Final results • %n vote","Final results • %n votes"], + "Your vote is anonymous" : "Your vote is anonymous", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Withdraw vote" : "Withdraw vote", + "Results" : "Results", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}", + "Talk setup incomplete" : "Talk setup incomplete", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "guest", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove team and members" : "Remove team and members", + "Remove participant" : "Remove participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Do you really want to remove group \"{displayName}\" and its members from this conversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Do you really want to remove team \"{displayName}\" and its members from this conversation?", + "Do you really want to remove {displayName} from this conversation?" : "Do you really want to remove {displayName} from this conversation?", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "in the lobby" : "in the lobby", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Move back to lobby" : "Move back to lobby", + "Move to conversation" : "Move to conversation", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Also ban from this conversation" : "Also ban from this conversation", + "Internal note (reason to ban)" : "Internal note (reason to ban)", + "Remove" : "Remove", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users, groups or teams" : "Add users, groups or teams", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Add users or teams", + "Add users" : "Add users", + "Add groups or teams" : "Add groups or teams", + "Add groups" : "Add groups", + "Add teams" : "Add teams", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "Searching …", + "Search for more users" : "Search for more users", + "You can search or add participants via name, email, or Federated Cloud ID" : "You can search or add participants via name, email, or Federated Cloud ID", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "A new group conversation with selected participant will be created" : "A new group conversation with selected participant will be created", + "Participants" : "Participants", + "Pinned by a deleted user" : "Pinned by a deleted user", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Search messages" : "Search messages", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Shared items", + "Search in {name}" : "Search in {name}", + "Threads in {name}" : "Threads in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Search messages …", + "Search options" : "Search options", + "From User" : "From User", + "Since" : "Since", + "Until" : "Until", + "No results found" : "No results found", + "Load more results" : "Load more results", + "Recent threads" : "Recent threads", + "Projects" : "Projects", + "No shared items" : "No shared items", + "Thread notifications" : "Thread notifications", + "Thread actions" : "Thread actions", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Display name (required)" : "Display name (required)", + "Save name" : "Save name", + "I picked message bubbles" : "I picked message bubbles", + "I picked the list style" : "I picked the list style", + "Error while setting personal setting" : "Error while setting personal setting", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Compact conversations list" : "Compact conversations list", + "Chat appearance" : "Chat appearance", + "Messages list" : "Messages list", + "Message bubbles" : "Message bubbles", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer", + "Notification settings" : "Notification settings", + "Sounds for chat and call notifications" : "Sounds for chat and call notifications", + "Invalid language ({languageId})" : "Invalid language ({languageId})", + "Default language" : "Default language", + "Default language ({languageName})" : "Default language ({languageName})", + "Error when trying to load the available live translation languages" : "Error when trying to load the available live translation languages", + "Error when trying to set live translation language" : "Error when trying to set live translation language", + "Set language used to show the transcriptions" : "Set language used to show the transcriptions", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Error while setting default media state" : "Error while setting default media state", + "Turn camera and microphone off by default" : "Turn camera and microphone off by default", + "Blur camera background by default" : "Blur camera background by default", + "Skip device preview before joining a call" : "Skip device preview before joining a call", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Camera will be turned off when joining. Always shown if recording consent is required.", + "Appearance & Sounds" : "Appearance & Sounds", + "Privacy" : "Privacy", + "Send read receipts" : "Send read receipts", + "When off, all read statuses will be hidden" : "When off, all read statuses will be hidden", + "Share typing status" : "Share typing status", + "When off, all typing indicators will be hidden" : "When off, all typing indicators will be hidden", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Return to Home screen" : "Return to Home screen", + "Search" : "Search", + "Shortcuts while in a chat" : "Shortcuts while in a chat", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Edit your last message" : "Edit your last message", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Zoom-in / zoom-out a screen share" : "Zoom-in / zoom-out a screen share", + "Mouse wheel" : "Mouse wheel", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "The server was updated, you cannot start or join a call." : "The server was updated, you cannot start or join a call.", + "This call has just ended" : "This call has just ended", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "Note: the call has been going on for an hour already.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "All tasks done!" : "All tasks done!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n task","{done} of %n tasks"], + "Add participants to this call" : "Add participants to this call", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "Scheduled messages" : "Scheduled messages", + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Select virtual background" : "Select virtual background", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Download attendance list" : "Download attendance list", + "Open Calendar" : "Open Calendar", + "Remove participant {name}" : "Remove participant {name}", + "Would you like to delete this conversation?" : "Would you like to delete this conversation?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["This conversation will be automatically deleted for everyone after %n day of inactivity.","This conversation will be automatically deleted for everyone after %n days of inactivity."], + "Are you sure you want to delete this conversation?" : "Are you sure you want to delete this conversation?", + "Delete now" : "Delete now", + "Keep" : "Keep", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Local time: {time}" : "Local time: {time}", + "Scheduled {datetime}" : "Scheduled {datetime}", + "Scheduled for {datetime}" : "Scheduled for {datetime}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "Mention everyone" : "Mention everyone", + "Select a conversation" : "Select a conversation", + "Select a mode" : "Select a mode", + "You do not have permissions to access this conversation." : "You do not have permissions to access this conversation.", + "Join a different conversation or start a new one." : "Join a different conversation or start a new one.", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs.", + "Creating and joining a conversation with \"{userid}\"" : "Creating and joining a conversation with \"{userid}\"", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Error while joining the conversation" : "Error while joining the conversation", + "Another user" : "Another user", + "Hey! Are you using the list style or message bubbles?" : "Hey! Are you using the list style or message bubbles?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel ID (prefixed with \"ID:\") or name" : "Channel ID (prefixed with \"ID:\") or name", + "Channel" : "Channel", + "Login" : "Login", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Pinned messages", + "Media" : "Media", + "Polls" : "Polls", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "Audio", + "Show all pinned messages" : "Show all pinned messages", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Follow conversation settings" : "Follow conversation settings", + "Group" : "Group", + "Team" : "Team", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You removed {user0} and {user1}" : "You removed {user0} and {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participant","You removed {user0}, {user1} and %n more participants"], + "An administrator removed you and {user0}" : "An administrator removed you and {user0}", + "{actor} removed you and {user0}" : "{actor} removed you and {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participant","An administrator removed you, {user0} and %n more participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participant","{actor} removed you, {user0} and %n more participants"], + "An administrator removed {user0} and {user1}" : "An administrator removed {user0} and {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removed {user0} and {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participant","An administrator removed {user0}, {user1} and %n more participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participant","{actor} removed {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You:" : "You:", + "You: {lastMessage}" : "You: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "The server was updated.", + "(edited by you)" : "(edited by you)", + "(edited by a deleted user)" : "(edited by a deleted user)", + "(edited by {moderator})" : "(edited by {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "Location has been posted to {conversation}" : "Location has been posted to {conversation}", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "In conversation" : "In conversation", + "Search in conversation: {conversation}" : "Search in conversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Your requests are throttled at the moment due to brute force protection", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not remove the automatic expiration" : "Could not remove the automatic expiration", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "Participant is banned successfully" : "Participant is banned successfully", + "Error while banning the participant" : "Error while banning the participant", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "Failed to join the conversation." : "Failed to join the conversation.", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "Failed to rename the thread" : "Failed to rename the thread", + "Error fetching upcoming events" : "Error fetching upcoming events", + "Error fetching upcoming reminders" : "Error fetching upcoming reminders", + "An error occurred while accepting an invitation" : "An error occurred while accepting an invitation", + "An error occurred while rejecting an invitation" : "An error occurred while rejecting an invitation", + "{guest} (guest)" : "{guest} (guest)", + "Poll draft has been saved" : "Poll draft has been saved", + "An error occurred while saving the draft" : "An error occurred while saving the draft", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "An error occurred while deleting the poll draft" : "An error occurred while deleting the poll draft", + "Poll \"{name}\" was created by {user}. Click to vote" : "Poll \"{name}\" was created by {user}. Click to vote", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "The server is in maintenance mode." : "The server is in maintenance mode.", + "Federated server was updated." : "Federated server was updated.", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hour","In %n hours"], + "_%n minute _::_%n minutes_" : ["%n minute ","%n minutes"], + "In {hours} and {minutes}" : "In {hours} and {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minute","In %n minutes"], + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Set time for later today" : "Set time for later today", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "Set time for tomorrow" : "Set time for tomorrow", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Set time for this weekend" : "Set time for this weekend", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Set time for next week" : "Set time for next week", + "Message link copied to clipboard" : "Message link copied to clipboard", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Error while parsing a PROPFIND error" : "Error while parsing a PROPFIND error", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "Lost connection to signaling server." : "Lost connection to signaling server.", + "Connecting is taking longer than expected …" : "Connecting is taking longer than expected …", + "Failed to connect. Retrying …" : "Failed to connect. Retrying …", + "Failed to connect. The signaling server may be set up incorrectly" : "Failed to connect. The signaling server may be set up incorrectly", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please restart the app." : "Please restart the app.", + "Please reload the page." : "Please reload the page.", + "Please try to restart the app." : "Please try to restart the app.", + "Please try to reload the page." : "Please try to reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "English (British English)", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Call summary (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "The call summary bot posts an overview message after the call listing all participants and outlining tasks", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Reports" : "Reports", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Call summary", + "Call summary - {title}" : "Call summary - {title}", + "Talk conversation for event" : "Talk conversation for event", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push is installed, this improves the performance of desktop clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} is not installed, this might lead to performance issues when using desktop clients.", + "Next meeting" : "Next meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here", + "Join conversations from remote Nextcloud servers" : "Join conversations from remote Nextcloud servers", + "Your default media state has been saved" : "Your default media state has been saved", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Generate summary" : "Generate summary", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Your personal setting has been saved" : "Your personal setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "Always shown if recording consent is required" : "Always shown if recording consent is required", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk was updated, you cannot start or join a call.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed.", + "Nextcloud Talk was updated." : "Nextcloud Talk was updated.", + "Nextcloud is in maintenance mode." : "Nextcloud is in maintenance mode.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation was updated.", + "Enable live translation" : "Enable live translation", + "I picked list style" : "I picked list style", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hey! Are you using Talk in list style or with message bubbles?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/eo.js b/l10n/eo.js new file mode 100644 index 0000000..a2eefc5 --- /dev/null +++ b/l10n/eo.js @@ -0,0 +1,366 @@ +OC.L10N.register( + "spreed", + { + "Other activities" : "Alia aktivado", + "Talk" : "Paroli", + "Guest" : "Gasto", + "Message deleted by author" : "Mesaĝo estas forigita per aǔtoro", + "Administration" : "Administrado", + "System" : "Sistemo", + "Talk conversations" : "Buŝaj konversacioj", + "Talk to %s" : "Paroli al %s", + "File not found" : "Netrovita dosiero", + "File is too big" : "Dosiero tro grandas", + "Invalid file provided" : "Nevalida dosiero provizita", + "Invalid image" : "Nevalida bildo", + "Unknown filetype" : "Nekonata dosiertipo", + "Description" : "Priskribo", + "Dismiss notification" : "Forsendi sciigon", + "Accept" : "Akcepti", + "Decline" : "Malakcepti", + "New message" : "Nova mesaĝo", + "Notification" : "Atentigo", + "error" : "eraro", + "Default" : "Defaŭlta", + "Avatar image is not square" : "Avatarbildo ne estas kvadrata", + "Other" : "Alia", + "Andorra" : "Andoro", + "United Arab Emirates" : "Unuiĝintaj Arabaj Emirlandoj", + "Afghanistan" : "Afganujo", + "Antigua and Barbuda" : "Antigvo kaj Barbudo", + "Anguilla" : "Angvilo", + "Albania" : "Albanujo", + "Armenia" : "Armenujo", + "Angola" : "Angolo", + "Antarctica" : "Antarkto", + "Argentina" : "Argentino", + "American Samoa" : "Usona Samoo", + "Austria" : "Aŭstrujo", + "Australia" : "Aŭstralio", + "Aruba" : "Arubo", + "Åland Islands" : "Alando", + "Azerbaijan" : "Azerbajĝano", + "Bosnia and Herzegovina" : "Bosnujo kaj Hercegovino", + "Barbados" : "Barbado", + "Bangladesh" : "Bangladeŝo", + "Belgium" : "Belgujo", + "Burkina Faso" : "Burkino", + "Bulgaria" : "Bulgarujo", + "Bahrain" : "Barejno", + "Burundi" : "Burundo", + "Benin" : "Benino", + "Saint Barthélemy" : "Sankta Bartolomeo", + "Bermuda" : "Bermudoj", + "Brunei Darussalam" : "Brunejo", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius kaj Saba", + "Brazil" : "Brazilo", + "Bahamas" : "Bahamoj", + "Bhutan" : "Butano", + "Bouvet Island" : "Buvetinsulo", + "Botswana" : "Bocvano", + "Belarus" : "Belorusujo", + "Belize" : "Belizo", + "Canada" : "Kanado", + "Cocos (Keeling) Islands" : "Kokosinsuloj", + "Central African Republic" : "Centr-Afriko", + "Congo" : "Kongo (Brazavila)", + "Switzerland" : "Svislando", + "Côte d'Ivoire" : "Ebur-Bordo", + "Cook Islands" : "Kukinsuloj", + "Chile" : "Ĉilio", + "Cameroon" : "Kameruno", + "China" : "Ĉinujo", + "Colombia" : "Kolombio", + "Costa Rica" : "Kostariko", + "Cuba" : "Kubo", + "Cabo Verde" : "Kaboverdo", + "Curaçao" : "Kuracao", + "Christmas Island" : "Kristnaskinsulo", + "Cyprus" : "Kipro", + "Czechia" : "Ĉeĥujo", + "Germany" : "Germanujo", + "Djibouti" : "Ĝibutio", + "Denmark" : "Danujo", + "Dominica" : "Dominiko", + "Dominican Republic" : "Dominika Respubliko", + "Algeria" : "Alĝerio", + "Ecuador" : "Ekvadoro", + "Estonia" : "Estonujo", + "Egypt" : "Egiptujo", + "Western Sahara" : "Okcidenta Saharo", + "Eritrea" : "Eritreo", + "Spain" : "Hispanujo", + "Ethiopia" : "Etiopujo", + "Finland" : "Finnlando", + "Fiji" : "Fiĝio", + "Falkland Islands (Malvinas)" : "Falklandoj", + "Faroe Islands" : "Ferooj", + "France" : "Francujo", + "Gabon" : "Gabono", + "United Kingdom of Great Britain and Northern Ireland" : "Britujo", + "Grenada" : "Grenado", + "Georgia" : "Kartvelujo", + "French Guiana" : "Franca Gviano", + "Guernsey" : "Gernezejo", + "Ghana" : "Ganao", + "Gibraltar" : "Ĝibraltaro", + "Greenland" : "Gronlando", + "Gambia" : "Gambio", + "Guinea" : "Gvineo", + "Guadeloupe" : "Gvadelupo", + "Equatorial Guinea" : "Ekvatora Gvineo", + "Greece" : "Grekujo", + "South Georgia and the South Sandwich Islands" : "Sud-Georgio kaj Sud-Sandviĉinsuloj", + "Guatemala" : "Gvatemalo", + "Guam" : "Gvamo", + "Guinea-Bissau" : "Gvineo-Bisaŭo", + "Guyana" : "Gujano", + "Hong Kong" : "Honkongo", + "Heard Island and McDonald Islands" : "Herda kaj Makdonaldaj Insuloj", + "Honduras" : "Honduro", + "Croatia" : "Kroatujo", + "Haiti" : "Haitio", + "Hungary" : "Hungarujo", + "Indonesia" : "Indonezio", + "Ireland" : "Irlando", + "Israel" : "Israelo", + "Isle of Man" : "Manksinsulo", + "India" : "Barato", + "British Indian Ocean Territory" : "Brita Hindoceana Teritorio", + "Iraq" : "Irako", + "Iceland" : "Islando", + "Italy" : "Italujo", + "Jersey" : "Ĵerzejo", + "Jamaica" : "Jamajko", + "Jordan" : "Jordanio", + "Japan" : "Japanujo", + "Kenya" : "Kenjo", + "Kyrgyzstan" : "Kirgizujo", + "Cambodia" : "Kamboĝo", + "Kiribati" : "Kiribato", + "Comoros" : "Komoroj", + "Saint Kitts and Nevis" : "Sankta Kristoforo kaj Neviso", + "Kuwait" : "Kuvajto", + "Cayman Islands" : "Kejmanoj", + "Kazakhstan" : "Kazaĥujo", + "Lao People's Democratic Republic" : "Laoso", + "Lebanon" : "Libano", + "Saint Lucia" : "Sankta Lucio", + "Liechtenstein" : "Liĥtenŝtejno", + "Sri Lanka" : "Srilanko", + "Liberia" : "Liberio", + "Lesotho" : "Lesoto", + "Lithuania" : "Litovujo", + "Luxembourg" : "Luksemburgo", + "Latvia" : "Latvujo", + "Libya" : "Libio", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sankta Marteno (franca)", + "Madagascar" : "Madagaskaro", + "Marshall Islands" : "Marŝaloj", + "Mali" : "Malio", + "Myanmar" : "Birmo", + "Mongolia" : "Mongolujo", + "Macao" : "Makao", + "Northern Mariana Islands" : "Nord-Marianoj", + "Martinique" : "Martiniko", + "Mauritania" : "Maŭritanio", + "Montserrat" : "Moncerato", + "Malta" : "Malto", + "Mauritius" : "Maŭricio", + "Maldives" : "Maldivoj", + "Malawi" : "Malavio", + "Mexico" : "Meksiko", + "Malaysia" : "Malajzio", + "Mozambique" : "Mozambiko", + "Namibia" : "Namibio", + "New Caledonia" : "Nov-Kaledonio", + "Niger" : "Niĝero", + "Norfolk Island" : "Norfolkinsulo", + "Nigeria" : "Niĝerio", + "Nicaragua" : "Nikaragvo", + "Netherlands" : "Nederlando", + "Norway" : "Norvegujo", + "Nepal" : "Nepalo", + "Nauru" : "Nauro", + "Niue" : "Niuo", + "New Zealand" : "Nov-Zelando", + "Oman" : "Omano", + "Panama" : "Panamo", + "Peru" : "Peruo", + "French Polynesia" : "Franca Polinezio", + "Papua New Guinea" : "Papuo-Nov-Gvineo", + "Philippines" : "Filipinoj", + "Pakistan" : "Pakistano", + "Poland" : "Pollando", + "Saint Pierre and Miquelon" : "Sankta Piero kaj Mikelono", + "Pitcairn" : "Pitkarna Insulo", + "Puerto Rico" : "Puertoriko", + "Palestine, State of" : "Palestino", + "Portugal" : "Portugalujo", + "Palau" : "Palaŭo", + "Paraguay" : "Paragvajo", + "Qatar" : "Kataro", + "Réunion" : "Reunio", + "Romania" : "Rumanujo", + "Serbia" : "Serbujo", + "Russian Federation" : "Rusujo", + "Rwanda" : "Ruando", + "Saudi Arabia" : "Sauda Arabujo", + "Solomon Islands" : "Salomonoj", + "Seychelles" : "Sejŝeloj", + "Sudan" : "Sudano", + "Sweden" : "Svedujo", + "Singapore" : "Singapuro", + "Saint Helena, Ascension and Tristan da Cunha" : "Sankta Heleno, Ascension kaj Tristan da Cunha", + "Slovenia" : "Slovenujo", + "Svalbard and Jan Mayen" : "Svalbardo", + "Slovakia" : "Slovakujo", + "Sierra Leone" : "Sieraleono", + "San Marino" : "Sanmarino", + "Senegal" : "Senegalo", + "Somalia" : "Somalujo", + "Suriname" : "Surinamo", + "South Sudan" : "Sud-Sudano", + "Sao Tome and Principe" : "Santomeo kaj Principeo", + "El Salvador" : "Salvadoro", + "Sint Maarten (Dutch part)" : "Sankta Marteno (nederlanda)", + "Syrian Arab Republic" : "Sirio", + "Turks and Caicos Islands" : "Turkoj kaj Kajkoj", + "Chad" : "Ĉado", + "French Southern Territories" : "Francaj Sudaj Teritorioj", + "Togo" : "Togolando", + "Thailand" : "Tajlando", + "Tajikistan" : "Taĝikujo", + "Tokelau" : "Tokelao", + "Timor-Leste" : "Orienta Timoro", + "Turkmenistan" : "Turkmenujo", + "Tunisia" : "Tunizio", + "Tonga" : "Tonga", + "Turkey" : "Turkujo", + "Trinidad and Tobago" : "Trinidado kaj Tobago", + "Tuvalu" : "Tuvalo", + "Tanzania, United Republic of" : "Tanzanio", + "Ukraine" : "Ukrainujo", + "Uganda" : "Ugando", + "United States Minor Outlying Islands" : "Usonaj Malgrandaj Insuloj", + "United States of America" : "Usono", + "Uruguay" : "Urugvajo", + "Uzbekistan" : "Uzbekujo", + "Holy See" : "Sankta Seĝo", + "Saint Vincent and the Grenadines" : "Sankta Vincento kaj Grenadinoj", + "Viet Nam" : "Vjetnamujo", + "Vanuatu" : "Vanuatuo", + "Wallis and Futuna" : "Valiso kaj Futuno", + "Samoa" : "Samoo", + "Yemen" : "Jemeno", + "Mayotte" : "Majoto", + "South Africa" : "Sud-Afriko", + "Zambia" : "Zambio", + "Zimbabwe" : "Zimbabvo", + "Federation" : "Federado", + "Invalid date, date format must be YYYY-MM-DD" : "Nevalida dato; datoformo estu JJJJ-MM-TT", + "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", + "Password" : "Pasvorto", + "Submit" : "Sendi", + "Everyone" : "Ĉiuj", + "Save changes" : "Konservi ŝanĝojn", + "Saving …" : "Konservado...", + "Saved!" : "Konservita!", + "Limit to groups" : "Limigi al grupoj", + "Disabled" : "Malŝaltita", + "Name" : "Nomo", + "Beta" : "Beta", + "Enable encryption" : "Ŝalti ĉifradon", + "Pending" : "Pritraktota", + "Error" : "Eraro", + "Blocked" : "Barita", + "Expired" : "Senvalidiĝis", + "Never" : "Neniam", + "Language" : "Lingvo", + "Country" : "Lando", + "Status" : "Stato", + "Created at" : "Kreita je", + "Yes" : "Jes", + "No" : "Ne", + "OK" : "Bone", + "Confirm" : "Konfirmi", + "Reset" : "Restarigi", + "Cancel" : "Nuligi", + "Back" : "Antaŭen", + "Loading …" : "Ŝargado...", + "From" : "De", + "To" : "Al", + "Calendar" : "Kalendaro", + "Attendees" : "Ĉeestontoj", + "Save" : "Konservi", + "No results" : "Neniu rezulto", + "Done" : "Farita", + "Grid view" : "Krada vido", + "Reload" : "Reŝargi", + "Copy link" : "Kopii ligilon", + "None" : "Nenio", + "You" : "Vi", + "Collapse" : "Maletendi", + "Favorite" : "Pliŝatata", + "Date:" : "Dato:", + "Hide details" : "Kaŝi la detalojn", + "Show details" : "Montri la detalojn", + "Disable" : "Malŝalti", + "Enable" : "Ŝalti", + "Choose" : "Elekti", + "Restricted" : "Limigita", + "Personal" : "Persona", + "Password protection" : "Protektita per pasvorto", + "Edit" : "Modifi", + "Delete" : "Forigi", + "Log content" : "Protokolenhavo", + "Notifications" : "Sciigoj", + "Join" : "Aliĝi", + "Log in" : "Ensaluti", + "Remove from favorites" : "Forigi el pliŝataĵoj", + "Add to favorites" : "Aldoni al pliŝataĵoj", + "Home" : "Hejmo", + "Alphabetically" : "Alfabete", + "Users" : "Uzantoj", + "Groups" : "Grupoj", + "Devices" : "Aparatoj", + "Upload" : "Alŝuti", + "Files" : "Dosieroj", + "24 hours" : "24 horoj", + "Reply" : "Respondi", + "More actions" : "Pliaj agoj", + "Translate" : "Traduku", + "Dismiss" : "Preterpasi", + "Contact" : "Kontakto", + "Create new poll" : "Krei novan enketon", + "Send" : "Sendi", + "Settings" : "Agordoj", + "Anonymous poll" : "Enketo sennoma", + "guest" : "gasto", + "Add users or groups" : "Add users or groups", + "Searching …" : "Serĉado ...", + "Chat" : "Babili", + "Details" : "Detaloj", + "Default language" : "Defaŭlta lingvo", + "Privacy" : "Privateco", + "Search" : "Serĉi", + "Keep" : "Konservi", + "Select a region" : "Elekti regionon", + "User" : "Uzanto", + "API token" : "API-ĵetono", + "Login" : "Login", + "Nickname" : "Kromnomo", + "Client ID" : "Klientidentigilo", + "Polls" : "Enketilo", + "Audio" : "Sonaĵo", + "Group" : "Grupo", + "Please reload the page." : "Bonvolu reŝargi la paĝon.", + "Android app" : "Android-aplikaĵo", + "iOS app" : "iOS-aplikaĵo", + "__language_name__" : "Esperanto", + "Tasks" : "Taskoj" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eo.json b/l10n/eo.json new file mode 100644 index 0000000..3f8f3ab --- /dev/null +++ b/l10n/eo.json @@ -0,0 +1,364 @@ +{ "translations": { + "Other activities" : "Alia aktivado", + "Talk" : "Paroli", + "Guest" : "Gasto", + "Message deleted by author" : "Mesaĝo estas forigita per aǔtoro", + "Administration" : "Administrado", + "System" : "Sistemo", + "Talk conversations" : "Buŝaj konversacioj", + "Talk to %s" : "Paroli al %s", + "File not found" : "Netrovita dosiero", + "File is too big" : "Dosiero tro grandas", + "Invalid file provided" : "Nevalida dosiero provizita", + "Invalid image" : "Nevalida bildo", + "Unknown filetype" : "Nekonata dosiertipo", + "Description" : "Priskribo", + "Dismiss notification" : "Forsendi sciigon", + "Accept" : "Akcepti", + "Decline" : "Malakcepti", + "New message" : "Nova mesaĝo", + "Notification" : "Atentigo", + "error" : "eraro", + "Default" : "Defaŭlta", + "Avatar image is not square" : "Avatarbildo ne estas kvadrata", + "Other" : "Alia", + "Andorra" : "Andoro", + "United Arab Emirates" : "Unuiĝintaj Arabaj Emirlandoj", + "Afghanistan" : "Afganujo", + "Antigua and Barbuda" : "Antigvo kaj Barbudo", + "Anguilla" : "Angvilo", + "Albania" : "Albanujo", + "Armenia" : "Armenujo", + "Angola" : "Angolo", + "Antarctica" : "Antarkto", + "Argentina" : "Argentino", + "American Samoa" : "Usona Samoo", + "Austria" : "Aŭstrujo", + "Australia" : "Aŭstralio", + "Aruba" : "Arubo", + "Åland Islands" : "Alando", + "Azerbaijan" : "Azerbajĝano", + "Bosnia and Herzegovina" : "Bosnujo kaj Hercegovino", + "Barbados" : "Barbado", + "Bangladesh" : "Bangladeŝo", + "Belgium" : "Belgujo", + "Burkina Faso" : "Burkino", + "Bulgaria" : "Bulgarujo", + "Bahrain" : "Barejno", + "Burundi" : "Burundo", + "Benin" : "Benino", + "Saint Barthélemy" : "Sankta Bartolomeo", + "Bermuda" : "Bermudoj", + "Brunei Darussalam" : "Brunejo", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius kaj Saba", + "Brazil" : "Brazilo", + "Bahamas" : "Bahamoj", + "Bhutan" : "Butano", + "Bouvet Island" : "Buvetinsulo", + "Botswana" : "Bocvano", + "Belarus" : "Belorusujo", + "Belize" : "Belizo", + "Canada" : "Kanado", + "Cocos (Keeling) Islands" : "Kokosinsuloj", + "Central African Republic" : "Centr-Afriko", + "Congo" : "Kongo (Brazavila)", + "Switzerland" : "Svislando", + "Côte d'Ivoire" : "Ebur-Bordo", + "Cook Islands" : "Kukinsuloj", + "Chile" : "Ĉilio", + "Cameroon" : "Kameruno", + "China" : "Ĉinujo", + "Colombia" : "Kolombio", + "Costa Rica" : "Kostariko", + "Cuba" : "Kubo", + "Cabo Verde" : "Kaboverdo", + "Curaçao" : "Kuracao", + "Christmas Island" : "Kristnaskinsulo", + "Cyprus" : "Kipro", + "Czechia" : "Ĉeĥujo", + "Germany" : "Germanujo", + "Djibouti" : "Ĝibutio", + "Denmark" : "Danujo", + "Dominica" : "Dominiko", + "Dominican Republic" : "Dominika Respubliko", + "Algeria" : "Alĝerio", + "Ecuador" : "Ekvadoro", + "Estonia" : "Estonujo", + "Egypt" : "Egiptujo", + "Western Sahara" : "Okcidenta Saharo", + "Eritrea" : "Eritreo", + "Spain" : "Hispanujo", + "Ethiopia" : "Etiopujo", + "Finland" : "Finnlando", + "Fiji" : "Fiĝio", + "Falkland Islands (Malvinas)" : "Falklandoj", + "Faroe Islands" : "Ferooj", + "France" : "Francujo", + "Gabon" : "Gabono", + "United Kingdom of Great Britain and Northern Ireland" : "Britujo", + "Grenada" : "Grenado", + "Georgia" : "Kartvelujo", + "French Guiana" : "Franca Gviano", + "Guernsey" : "Gernezejo", + "Ghana" : "Ganao", + "Gibraltar" : "Ĝibraltaro", + "Greenland" : "Gronlando", + "Gambia" : "Gambio", + "Guinea" : "Gvineo", + "Guadeloupe" : "Gvadelupo", + "Equatorial Guinea" : "Ekvatora Gvineo", + "Greece" : "Grekujo", + "South Georgia and the South Sandwich Islands" : "Sud-Georgio kaj Sud-Sandviĉinsuloj", + "Guatemala" : "Gvatemalo", + "Guam" : "Gvamo", + "Guinea-Bissau" : "Gvineo-Bisaŭo", + "Guyana" : "Gujano", + "Hong Kong" : "Honkongo", + "Heard Island and McDonald Islands" : "Herda kaj Makdonaldaj Insuloj", + "Honduras" : "Honduro", + "Croatia" : "Kroatujo", + "Haiti" : "Haitio", + "Hungary" : "Hungarujo", + "Indonesia" : "Indonezio", + "Ireland" : "Irlando", + "Israel" : "Israelo", + "Isle of Man" : "Manksinsulo", + "India" : "Barato", + "British Indian Ocean Territory" : "Brita Hindoceana Teritorio", + "Iraq" : "Irako", + "Iceland" : "Islando", + "Italy" : "Italujo", + "Jersey" : "Ĵerzejo", + "Jamaica" : "Jamajko", + "Jordan" : "Jordanio", + "Japan" : "Japanujo", + "Kenya" : "Kenjo", + "Kyrgyzstan" : "Kirgizujo", + "Cambodia" : "Kamboĝo", + "Kiribati" : "Kiribato", + "Comoros" : "Komoroj", + "Saint Kitts and Nevis" : "Sankta Kristoforo kaj Neviso", + "Kuwait" : "Kuvajto", + "Cayman Islands" : "Kejmanoj", + "Kazakhstan" : "Kazaĥujo", + "Lao People's Democratic Republic" : "Laoso", + "Lebanon" : "Libano", + "Saint Lucia" : "Sankta Lucio", + "Liechtenstein" : "Liĥtenŝtejno", + "Sri Lanka" : "Srilanko", + "Liberia" : "Liberio", + "Lesotho" : "Lesoto", + "Lithuania" : "Litovujo", + "Luxembourg" : "Luksemburgo", + "Latvia" : "Latvujo", + "Libya" : "Libio", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sankta Marteno (franca)", + "Madagascar" : "Madagaskaro", + "Marshall Islands" : "Marŝaloj", + "Mali" : "Malio", + "Myanmar" : "Birmo", + "Mongolia" : "Mongolujo", + "Macao" : "Makao", + "Northern Mariana Islands" : "Nord-Marianoj", + "Martinique" : "Martiniko", + "Mauritania" : "Maŭritanio", + "Montserrat" : "Moncerato", + "Malta" : "Malto", + "Mauritius" : "Maŭricio", + "Maldives" : "Maldivoj", + "Malawi" : "Malavio", + "Mexico" : "Meksiko", + "Malaysia" : "Malajzio", + "Mozambique" : "Mozambiko", + "Namibia" : "Namibio", + "New Caledonia" : "Nov-Kaledonio", + "Niger" : "Niĝero", + "Norfolk Island" : "Norfolkinsulo", + "Nigeria" : "Niĝerio", + "Nicaragua" : "Nikaragvo", + "Netherlands" : "Nederlando", + "Norway" : "Norvegujo", + "Nepal" : "Nepalo", + "Nauru" : "Nauro", + "Niue" : "Niuo", + "New Zealand" : "Nov-Zelando", + "Oman" : "Omano", + "Panama" : "Panamo", + "Peru" : "Peruo", + "French Polynesia" : "Franca Polinezio", + "Papua New Guinea" : "Papuo-Nov-Gvineo", + "Philippines" : "Filipinoj", + "Pakistan" : "Pakistano", + "Poland" : "Pollando", + "Saint Pierre and Miquelon" : "Sankta Piero kaj Mikelono", + "Pitcairn" : "Pitkarna Insulo", + "Puerto Rico" : "Puertoriko", + "Palestine, State of" : "Palestino", + "Portugal" : "Portugalujo", + "Palau" : "Palaŭo", + "Paraguay" : "Paragvajo", + "Qatar" : "Kataro", + "Réunion" : "Reunio", + "Romania" : "Rumanujo", + "Serbia" : "Serbujo", + "Russian Federation" : "Rusujo", + "Rwanda" : "Ruando", + "Saudi Arabia" : "Sauda Arabujo", + "Solomon Islands" : "Salomonoj", + "Seychelles" : "Sejŝeloj", + "Sudan" : "Sudano", + "Sweden" : "Svedujo", + "Singapore" : "Singapuro", + "Saint Helena, Ascension and Tristan da Cunha" : "Sankta Heleno, Ascension kaj Tristan da Cunha", + "Slovenia" : "Slovenujo", + "Svalbard and Jan Mayen" : "Svalbardo", + "Slovakia" : "Slovakujo", + "Sierra Leone" : "Sieraleono", + "San Marino" : "Sanmarino", + "Senegal" : "Senegalo", + "Somalia" : "Somalujo", + "Suriname" : "Surinamo", + "South Sudan" : "Sud-Sudano", + "Sao Tome and Principe" : "Santomeo kaj Principeo", + "El Salvador" : "Salvadoro", + "Sint Maarten (Dutch part)" : "Sankta Marteno (nederlanda)", + "Syrian Arab Republic" : "Sirio", + "Turks and Caicos Islands" : "Turkoj kaj Kajkoj", + "Chad" : "Ĉado", + "French Southern Territories" : "Francaj Sudaj Teritorioj", + "Togo" : "Togolando", + "Thailand" : "Tajlando", + "Tajikistan" : "Taĝikujo", + "Tokelau" : "Tokelao", + "Timor-Leste" : "Orienta Timoro", + "Turkmenistan" : "Turkmenujo", + "Tunisia" : "Tunizio", + "Tonga" : "Tonga", + "Turkey" : "Turkujo", + "Trinidad and Tobago" : "Trinidado kaj Tobago", + "Tuvalu" : "Tuvalo", + "Tanzania, United Republic of" : "Tanzanio", + "Ukraine" : "Ukrainujo", + "Uganda" : "Ugando", + "United States Minor Outlying Islands" : "Usonaj Malgrandaj Insuloj", + "United States of America" : "Usono", + "Uruguay" : "Urugvajo", + "Uzbekistan" : "Uzbekujo", + "Holy See" : "Sankta Seĝo", + "Saint Vincent and the Grenadines" : "Sankta Vincento kaj Grenadinoj", + "Viet Nam" : "Vjetnamujo", + "Vanuatu" : "Vanuatuo", + "Wallis and Futuna" : "Valiso kaj Futuno", + "Samoa" : "Samoo", + "Yemen" : "Jemeno", + "Mayotte" : "Majoto", + "South Africa" : "Sud-Afriko", + "Zambia" : "Zambio", + "Zimbabwe" : "Zimbabvo", + "Federation" : "Federado", + "Invalid date, date format must be YYYY-MM-DD" : "Nevalida dato; datoformo estu JJJJ-MM-TT", + "The password is wrong. Try again." : "La pasvorto malĝustas. Provu denove.", + "Password" : "Pasvorto", + "Submit" : "Sendi", + "Everyone" : "Ĉiuj", + "Save changes" : "Konservi ŝanĝojn", + "Saving …" : "Konservado...", + "Saved!" : "Konservita!", + "Limit to groups" : "Limigi al grupoj", + "Disabled" : "Malŝaltita", + "Name" : "Nomo", + "Beta" : "Beta", + "Enable encryption" : "Ŝalti ĉifradon", + "Pending" : "Pritraktota", + "Error" : "Eraro", + "Blocked" : "Barita", + "Expired" : "Senvalidiĝis", + "Never" : "Neniam", + "Language" : "Lingvo", + "Country" : "Lando", + "Status" : "Stato", + "Created at" : "Kreita je", + "Yes" : "Jes", + "No" : "Ne", + "OK" : "Bone", + "Confirm" : "Konfirmi", + "Reset" : "Restarigi", + "Cancel" : "Nuligi", + "Back" : "Antaŭen", + "Loading …" : "Ŝargado...", + "From" : "De", + "To" : "Al", + "Calendar" : "Kalendaro", + "Attendees" : "Ĉeestontoj", + "Save" : "Konservi", + "No results" : "Neniu rezulto", + "Done" : "Farita", + "Grid view" : "Krada vido", + "Reload" : "Reŝargi", + "Copy link" : "Kopii ligilon", + "None" : "Nenio", + "You" : "Vi", + "Collapse" : "Maletendi", + "Favorite" : "Pliŝatata", + "Date:" : "Dato:", + "Hide details" : "Kaŝi la detalojn", + "Show details" : "Montri la detalojn", + "Disable" : "Malŝalti", + "Enable" : "Ŝalti", + "Choose" : "Elekti", + "Restricted" : "Limigita", + "Personal" : "Persona", + "Password protection" : "Protektita per pasvorto", + "Edit" : "Modifi", + "Delete" : "Forigi", + "Log content" : "Protokolenhavo", + "Notifications" : "Sciigoj", + "Join" : "Aliĝi", + "Log in" : "Ensaluti", + "Remove from favorites" : "Forigi el pliŝataĵoj", + "Add to favorites" : "Aldoni al pliŝataĵoj", + "Home" : "Hejmo", + "Alphabetically" : "Alfabete", + "Users" : "Uzantoj", + "Groups" : "Grupoj", + "Devices" : "Aparatoj", + "Upload" : "Alŝuti", + "Files" : "Dosieroj", + "24 hours" : "24 horoj", + "Reply" : "Respondi", + "More actions" : "Pliaj agoj", + "Translate" : "Traduku", + "Dismiss" : "Preterpasi", + "Contact" : "Kontakto", + "Create new poll" : "Krei novan enketon", + "Send" : "Sendi", + "Settings" : "Agordoj", + "Anonymous poll" : "Enketo sennoma", + "guest" : "gasto", + "Add users or groups" : "Add users or groups", + "Searching …" : "Serĉado ...", + "Chat" : "Babili", + "Details" : "Detaloj", + "Default language" : "Defaŭlta lingvo", + "Privacy" : "Privateco", + "Search" : "Serĉi", + "Keep" : "Konservi", + "Select a region" : "Elekti regionon", + "User" : "Uzanto", + "API token" : "API-ĵetono", + "Login" : "Login", + "Nickname" : "Kromnomo", + "Client ID" : "Klientidentigilo", + "Polls" : "Enketilo", + "Audio" : "Sonaĵo", + "Group" : "Grupo", + "Please reload the page." : "Bonvolu reŝargi la paĝon.", + "Android app" : "Android-aplikaĵo", + "iOS app" : "iOS-aplikaĵo", + "__language_name__" : "Esperanto", + "Tasks" : "Taskoj" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/es.js b/l10n/es.js new file mode 100644 index 0000000..4efd896 --- /dev/null +++ b/l10n/es.js @@ -0,0 +1,2144 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Has participado en una llamada con {user1}", + "_%n guest_::_%n guests_" : ["%n invitado","%n invitados","%n invitados"], + "You attended a call with {user1} and {user2}" : "Has participado en una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Has participado en una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Has participado en una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Has participado en una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","%n otros","%n otros"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a una conversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Talk", + "Guest" : "Invitado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## ¡Le damos la bienvenida a Nextcloud Talk!\nEn esta convesación se le informará sobre las nuevas características disponibles en Nextcloud Talk.", + "## New in Talk %s" : "## Nuevo en Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : " Se puede usar Microsoft Edge y Safari para participar en llamadas de audio y de vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "* Las conversaciones individuales ahora son persistentes y ya no se pueden convertirse en conversaciones de grupo por accidente. Además, cuando uno de los participantes abandone la conversación, esta ya no se borrará automáticamente. Solo si ambos participantes se van, la conversación se borra del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes enviar una notificación a todos los participantes escribiendo \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con la tecla \"flecha hacia arriba\" puedes volver a enviar el último mensaje", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Ahora, Talk dispone de comandos. Envia \"/help\" como un mensaje de chat para comprobar si tu administrador ha configurado alguno", + "- With projects you can create quick links between conversations, files and other items" : "- Con los proyectos, puedes crear enlaces rápidos entre conversaciones, archivos y otros objetos", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a los invitados en la conversación", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Ahora, las conversaciones pueden tener una sala de espera. Esto permite a los moderadores unirse al chat y llamar inmediatamente para preparar la reunión, mientras que los usuarios y los invitados tienen que esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ahora puedes responder directamente a los mensajes, dando a los usuarios más contexto sobre el tema de tu mensaje", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La búsqueda por conversaciones y participantes también filtrará tus conversaciones existentes, haciendo mucho más fácil encontrar conversaciones previas", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Puedes añadir grupos personalizados de usuarios a las conversaciones cuando la app de Círculos está instalada", + "- Check out the new grid and call view" : "- Una nueva cuadrícula y vista de llamadas.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ya puedes subir y arrastrar archivos desde tu dispositivo al chat.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Los archivos compartidos se abrirán ahora dentro del chat con el visor que corresponda.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ahora puedes buscar chats y mensajes en la búsqueda unificada de la barra superior.", + "- Spice up your messages with emojis from the emoji picker" : "- Dales sabor a tus mensajes con emojis desde el selector.", + "- You can now change your camera and microphone while being in a call" : "- Ahora puedes cambiar la cámara y el micrófono mientras estás en una llamada.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- De un cierto contexto a la conversación con una descripción y ábrela para que los usuarios registrados puedan encontrarla y unirse ellos mismos", + "- See a read status and send failed messages again" : "- Ver un estado de lectura y enviar nuevamente los mensajes fallidos ", + "- Raise your hand in a call with the R key" : "- Levante la mano en una llamada con la tecla R", + "- Join the same conversation and call from multiple devices" : "- Únase a la misma conversación y llamada desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envíe mensajes de voz, comparta su ubicación o sus datos de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Añada grupos a una conversación y los nuevos miembros del grupo se añadirán automáticamente como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Una previsualización de su audio y vídeo se mostrará antes de unirse a la llamada", + "- You can now blur your background in the newly designed call view" : "- Ahora puede desenfocar su fondo usando el nuevo diseño de la vista de llamada", + "- Moderators can now assign general and individual permissions to participants" : "- Ahora los moderadores pueden asignar permisos generales e individuales a los participantes", + "- You can now react to chat messages" : "- Ahora puede reaccionar a los mensajes del chat", + "- In the sidebar you can now find an overview of the latest shared items" : "- En la barra lateral ahora podrá encontrar una vista general de los últimos artículos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilice una encuesta para recolectar las opiniones o para acordar una fecha", + "- Configure an expiration time for chat messages" : "- Configure un tiempo de expiración para los mensajes de chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie llamadas sin notificar a otros en conversaciones numerosas. Puede enviar notificaciones de llamada individuales una vez que la llamada ha iniciado.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Enviar mensajes de chat sin notificar a los recipientes en caso de que no sea urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Los emojis pueden ser autocompletados escribiendo \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enlace varios ítems utilizando el nuevo selector inteligente escribiendo una \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Ahora, los moderadores pueden crear salas de grupos (requiere el motor de alto rendimiento)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Las llamadas ahora pueden ser grabadas (requiere el motor de alto rendimiento)", + "- Conversations can now have an avatar or emoji as icon" : "- Ahora, las conversaciones pueden tener como icono un avatar o emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Están disponibles ahora los fondos virtuales, además de los fondos desenfocados en las llamadas de video", + "- Reactions are now available during calls" : "- Las reacciones están ahora disponibles durante las llamadas", + "- Typing indicators show which users are currently typing a message" : "- Los indicadores de escritura muestran que usuarios están escribiendo un mensaje", + "- Groups can now be mentioned in chats" : "- Los grupos ahora pueden ser mencionados en los chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Las grabaciones de llamadas serán automáticamente transcritas si una app que provea transcripciones está registrada", + "- Chat messages can be translated if a translation provider app is registered" : "- Los mensajes de chat pueden ser traducidos si una app que provea transcripciones está registrada", + "- **Markdown** can now be used in _chat_ messages" : "- Ahora se puede usar **Markdown** en mensajes de _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Ya se encuentran disponibles Webhooks para implementar bots. Vea la documentación para más información https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Establecer un recordatorio en un mensaje de chat para que sea notificado nuevamente más tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utiliza la conversación **Nota personal** para tomar notas y compartir información entre tus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- Las leyendas permiten enviar un mensaje con un archivo al mismo tiempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- El video del orador ahora es visible mientras se comparte la pantalla y las reacciones de la llamada están animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Los mensajes pueden ser editados ahora por los administradores y moderadores con sesión iniciada por 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Los borradores de mensajes no enviados se guardan ahora en su navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Se puede chatear por texto de forma federada con otros servidores de Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Los moderadores ahora pueden bloquear tanto a cuentas como a invitados de volver a unirse a una conversación", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Las llamadas entrantes de eventos de calendario enlazados y sustituciones de fuera de la oficina ahora se muestran en las conversaciones", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Las llamadas ahora se pueden hacer de forma federada con otros servidores de Talk (requiere el motor de alto rendimiento)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentando el cliente de escritorio Nextcloud Talk para Windows, macOS y Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resuma grabaciones de llamadas y mensajes de chat no leídos con el Asistente Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reuniones mejoradas con reconocimiento de invitados a través de su dirección de correo, importación de listas de participantes, borradores para encuestas y la posibilidad de descargar la lista de participantes de las llamadas", + "- Archive conversations to stay focused" : "- Archive conversaciones para mantenerse enfocado", + "- Schedule a meeting into your calendar from within a conversation" : "- Agendar reuniones dentro de su calendario directamente desde una conversación", + "- Search for messages of the current conversation directly in the right sidebar" : "- Buscar mensajes de la conversación actual directamente en la barra lateral derecha", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vea más conversaciones de un vistazo con la nueva lista compacta (habilitar en los ajustes de Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Las conversaciones de las Reuniones ahora sincronizan el título y la descripción desde el calendario y están ocultas con un filtro de búsqueda hasta que están por comenzar", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Maque las conversaciones como sensibles en los ajustes de notificaciones, de manera de esconder el contenido del mensaje de la lista de conversaciones y las notificaciones", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para recibir notificaciones push durante el estado \"No molestar\", marque las conversaciones como importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Añada a otros participantes en una llamada uno a uno para crear una nueva llamada grupal al vuelo", + "- Use threads to keep your chat and discussions organized" : "- Use hilos para mantener sus chats y discusiones organizadas", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Las transcripciones en vivo están ahora disponibles durante la llamada (requiere la ExApp de transcripción en vivo y el backend de alto rendimiento)", + "- Moderators can now pin messages so they are kept at the top" : "- Los moderadores ahora pueden fijar mensajes para que se mantengan en la parte superior", + "- Schedule a message to send it at a later time" : "- Programa un mensaje para enviarlo después", + "_All %n participant_::_All %n participants_" : ["%n participante","Todos los %n participantes","Todos los %n participantes"], + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "Reaction deleted by author" : "Reacción borrada por el autor", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Has creado la conversación", + "System created the conversation" : "El sistema creó la conversación", + "An administrator created the conversation" : "Un administrador ha creado la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha renombrado la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Has renombrado la conversación de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador ha cambiado el nombre de la conversación «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} estableció la descripción", + "You set the description" : "Usted estableció la descripción", + "An administrator set the description" : "Un administrador estableció la descripción", + "{actor} removed the description" : "{actor} ha eliminado la descripción", + "You removed the description" : "Has eliminado la descripción", + "An administrator removed the description" : "Un administrador ha eliminado la descripción", + "You started a silent call" : "Ud. inició una llamada silenciosa", + "Outgoing silent call" : "Llamada saliente silenciosa", + "{actor} started a silent call" : "{actor} inició una llamada silenciosa", + "Incoming silent call" : "Llamada entrante silenciosa", + "You started a call" : "Has iniciado una llamada", + "Outgoing call" : "Llamada saliente", + "{actor} started a call" : "{actor} ha iniciado una llamada", + "Incoming call" : "Llamada entrante", + "{actor} joined the call" : "{actor} se ha unido a la llamada", + "You joined the call" : "Te has unido a la llamada", + "{actor} left the call" : "{actor} ha abandonado la llamada", + "You left the call" : "Has abandonado la llamada", + "{actor} unlocked the conversation" : "{actor} ha desbloqueado la conversación", + "You unlocked the conversation" : "Has desbloqueado la conversación", + "An administrator unlocked the conversation" : "Un administrador ha desbloqueado la conversación", + "{actor} locked the conversation" : "{actor} ha bloqueado la conversación", + "You locked the conversation" : "Has bloqueado la conversación", + "An administrator locked the conversation" : "Un administrador ha bloqueado la conversación", + "{actor} limited the conversation to the current participants" : "{actor} limitó la conversación a los participantes actuales", + "You limited the conversation to the current participants" : "Has limitado la conversación a los participantes actuales", + "An administrator limited the conversation to the current participants" : "Un administrador limitó la conversación a los participantes actuales", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a los usuarios registrados", + "You opened the conversation to registered users" : "Has abierto la conversación a los usuarios registrados", + "An administrator opened the conversation to registered users" : "Un administrador abrió la conversación a los usuarios registrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abrió la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "You opened the conversation to registered users and users created with the Guests app" : "Ha abierto la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrador ha abierto la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "The conversation is now open to everyone" : "La conversación ahora está abierta para todo el mundo", + "{actor} opened the conversation to everyone" : "{actor} ha abierto la conversación para todos", + "You opened the conversation to everyone" : "Has abierto la conversación para todo el mundo", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación únicamente a los moderadores", + "You restricted the conversation to moderators" : "Restringiste la conversación únicamente a los moderadores", + "{actor} started breakout rooms" : "{actor} inició las salas de grupos", + "You started breakout rooms" : "Ud. inició las salas de grupos", + "{actor} stopped breakout rooms" : "{actor} detuvo las salas de grupos", + "You stopped breakout rooms" : "Ud. detuvo las salas de grupos", + "{actor} allowed guests" : "{actor} ha permitido invitados", + "You allowed guests" : "Has permitido invitados", + "An administrator allowed guests" : "Un administrador ha permitido invitados", + "{actor} disallowed guests" : "{actor} ha prohibido invitados", + "You disallowed guests" : "Has prohibido invitados", + "An administrator disallowed guests" : "Un administrador ha prohibido invitados", + "{actor} set a password" : "{actor} ha establecido una contraseña", + "You set a password" : "Has establecido una contraseña", + "An administrator set a password" : "Un administrador ha establecido una contraseña", + "{actor} removed the password" : "{actor} ha eliminado la contraseña", + "You removed the password" : "Has eliminado la contraseña", + "An administrator removed the password" : "Un administrador ha eliminado la contraseña", + "{actor} added {user}" : "{actor} ha añadido a {user}", + "You joined the conversation" : "Te has unido a la conversación", + "{actor} joined the conversation" : "{actor} se ha unido a la conversación", + "You added {user}" : "Has añadido a {user}", + "{actor} added you" : "{actor} te ha añadido", + "An administrator added you" : "Un administrador te ha añadido", + "An administrator added {user}" : "Un administrador ha añadido a {user}", + "You left the conversation" : "Has abandonado la conversación", + "{actor} left the conversation" : "{actor} ha abandonado la conversación", + "{actor} removed {user}" : "{actor} ha eliminado a {user}", + "You removed {user}" : "Has eliminado a {user}", + "{actor} removed you" : "{actor} te ha eliminado", + "An administrator removed you" : "Un administrador te ha quitado", + "An administrator removed {user}" : "Un administrador ha quitado a {user}", + "{actor} invited {federated_user}" : "{actor} invitó a {federated_user}", + "You invited {federated_user}" : "Ud. invitó a {federated_user}", + "You accepted the invitation" : "Ud. aceptó la invitación", + "{actor} invited you" : "{actor} lo ha invitado", + "An administrator invited you" : "Un administrador lo ha invitado", + "An administrator invited {federated_user}" : "Un administrador ha invitado a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha aceptado la invitación", + "{actor} removed {federated_user}" : "{actor} ha eliminado a {federated_user}", + "You removed {federated_user}" : "Ha eliminado a {federated_user}", + "You declined the invitation" : "Ud. declinó la invitación", + "An administrator removed {federated_user}" : "Un administrador ha eliminado a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha declinado la invitación", + "{actor} added group {group}" : "{actor} ha añadido el grupo {group}", + "You added group {group}" : "Ud. ha añadido el grupo {group}", + "An administrator added group {group}" : "Un administrador ha añadido el grupo {group}", + "{actor} removed group {group}" : "{actor} ha eliminado el grupo {group}", + "You removed group {group}" : "Ud. ha eliminado el grupo {group}", + "An administrator removed group {group}" : "Un administrador ha eliminado el grupo {group}", + "{actor} added team {circle}" : "{actor} añadió al equipo {circle}", + "You added team {circle}" : "Ud. añadió al equipo {circle}", + "An administrator added team {circle}" : "Un administrador añadió al equipo {circle}", + "{actor} removed team {circle}" : "{actor} eliminó al equipo {circle}", + "You removed team {circle}" : "Ud. eliminó al equipo {circle}", + "An administrator removed team {circle}" : "Un administrador eliminó al equipo {circle}", + "{actor} added {phone}" : "{actor} añadió a {phone}", + "You added {phone}" : "Ud. ha añadido a {phone}", + "An administrator added {phone}" : "Un administrador añadió a {phone}", + "{actor} removed {phone}" : "{actor} eliminó a {phone}", + "You removed {phone}" : "Ud. ha eliminado a {phone}", + "An administrator removed {phone}" : "Un administrador eliminó a {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha ascendido a {user} a moderador", + "You promoted {user} to moderator" : "Has ascendido a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te ha ascendido a moderador", + "An administrator promoted you to moderator" : "Un administrador te ha nombrado moderador", + "An administrator promoted {user} to moderator" : "Un administrador ha nombrado moderador a {user}", + "{actor} demoted {user} from moderator" : "{actor} ha degradado a {user} desde moderador", + "You demoted {user} from moderator" : "Has degradado a {user} desde moderador", + "{actor} demoted you from moderator" : "{actor} te ha degradado desde moderador", + "An administrator demoted you from moderator" : "Un administrador te ha destituido como moderador", + "An administrator demoted {user} from moderator" : "Un administrador ha destituido a {user} como moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Compartiste un archivo que ya no está disponible", + "File shares are currently not supported in federated conversations" : "La compartición de archivos no está actualmente soportada en conversaciones federadas", + "The shared location is malformed" : "La ubicación compartida está malformada", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurado Matterbridge para sincronizar esta conversación con otros chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Tu has configurado Matterbridge para sincronizar esta conversación con otros chats", + "{actor} created thread {title}" : "{actor} creó el hilo {title}", + "You created thread {title}" : "Ud. creó el hilo {title}", + "{actor} renamed thread {title}" : "{actor} renombró el hilo {title}", + "You renamed thread {title}" : "Ud. renombró el hilo {title}", + "{actor} updated the Matterbridge configuration" : "{actor} actualizó la configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Tu actualizaste la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Tu eliminaste la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} inició Matterbridge", + "You started Matterbridge" : "Tu iniciaste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detuvo Matterbridge", + "You stopped Matterbridge" : "Tu detuviste Matterbridge", + "{actor} deleted a message" : "{actor} eliminó un mensaje", + "You deleted a message" : "Has eliminado un mensaje", + "{actor} edited a message" : "{actor} editó un mensaje", + "You edited a message" : "Has editado un mensaje", + "{actor} pinned a message" : "{actor} ha fijado un mensaje", + "You pinned a message" : "Has fijado un mensaje", + "{actor} unpinned a message" : "{actor} ha desfijado un mensaje", + "Message was automatically unpinned" : "El mensaje se ha desfijado automáticamente", + "You unpinned a message" : "Has desfijado un mensaje", + "{actor} deleted a reaction" : "{actor} eliminó una reacción", + "You deleted a reaction" : "Ud. ha borrado una reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ud. ha cambiado la caducidad del mensaje a %n semana","Ud. ha cambiado la caducidad del mensaje a %n semanas","Ud. ha cambiado la caducidad del mensaje a %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ud. ha cambiado la caducidad del mensaje a %n día","Ud. ha cambiado la caducidad del mensaje a %n días","Ud. ha cambiado la caducidad del mensaje a %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ud. ha cambiado la caducidad del mensaje a %n hora","Ud. ha cambiado la caducidad del mensaje a %n horas","Ud. ha cambiado la caducidad del mensaje a %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ud. ha cambiado la caducidad del mensaje a %n minuto","Ud. ha cambiado la caducidad del mensaje a %n minutos","Ud. ha cambiado la caducidad del mensaje a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ha cambiado la caducidad del mensaje a %n semana","{actor} ha cambiado la caducidad del mensaje a %n semanas","{actor} ha cambiado la caducidad del mensaje a %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ha cambiado la caducidad del mensaje a %n día","{actor} ha cambiado la caducidad del mensaje a %n días","{actor} ha cambiado la caducidad del mensaje a %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ha cambiado la caducidad del mensaje a %n hora","{actor} ha cambiado la caducidad del mensaje a %n horas","{actor} ha cambiado la caducidad del mensaje a %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} estableció la expiración de mensaje a %n minuto","{actor} estableció la expiración de mensajes a %n minutos","{actor} estableció la expiración de mensajes a %n minutos"], + "{actor} disabled message expiration" : "{actor} ha desactivado la caducidad del mensaje", + "You disabled message expiration" : "Ud. ha desactivado la caducidad de mensajes", + "{actor} cleared the history of the conversation" : "{actor} ha vaciado el historial de la conversación", + "You cleared the history of the conversation" : "Ud. ha vaciado el historial de la conversación", + "{actor} set the conversation picture" : "{actor} ha establecido la foto de la conversación", + "You set the conversation picture" : "Ud. ha establecido la foto de la conversación", + "{actor} removed the conversation picture" : "{actor} ha eliminado la imagen de la conversación", + "You removed the conversation picture" : "Ud. ha eliminado la imagen de la conversación", + "{actor} ended the poll {poll}" : "{actor} finalizó la encuesta {poll}", + "You ended the poll {poll}" : "Ud. ha finalizado la encuesta {poll}", + "{actor} started the video recording" : "{actor} inició la grabación de video", + "You started the video recording" : "Ud. ha iniciado la grabación de video", + "{actor} stopped the video recording" : "{actor} detuvo la grabación de video", + "You stopped the video recording" : "Ud. ha detenido la grabación de video", + "{actor} started the audio recording" : "{actor} ha iniciado la grabación de audio", + "You started the audio recording" : "Ud. ha iniciado la grabación de audio", + "{actor} stopped the audio recording" : "{actor} detuvo la grabación de audio", + "You stopped the audio recording" : "Ud. ha detenido la grabación de audio", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Alguien votó en la encuesta {poll}", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Message deleted by {actor}" : "Mensaje eliminado por {actor}", + "Message deleted by you" : "Has eliminado este mensaje", + "Deleted user" : "Usuario eliminado", + "Unknown number" : "Número desconocido", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "Missed call" : "Llamada perdida", + "Unanswered call" : "Llamada sin contestar", + "Call ended (Duration {duration})" : "Llamada finalizada (Duración {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha terminado la llamada (Duración {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La llamada con %n invitado ha terminado, porque ha alcanzado la duración máxima (Duración {duration})","La llamada con %n invitados ha terminado, porque ha alcanzado la duración máxima (Duración {duration})","La llamada con %n invitados ha terminado, porque ha alcanzado la duración máxima (Duración {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Llamada con %n invitado finalizada (Duración {duration})","Llamada con %n invitados finalizada (Duración {duration})","Llamada con %n invitados finalizada (Duración {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha terminado la llamada con %n invitado (Duración {duration})","{actor} ha terminado la llamada con %n invitados (Duración {duration})","{actor} ha terminado la llamada con %n invitados (Duración {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1} ended (Duration {duration})" : "Llamada con {user1} finalizada (Duración {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha terminado la llamada con {user1} (Duración {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1} y {user2} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Llamada con {user1} y {user2} finalizada (Duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha terminado la llamada con {user1} y {user2} (Duración {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2} y {user3} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Llamada con {user1}, {user2} y {user3} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2} y {user3} (Duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2}, {user3} y {user4} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Llamada con {user1}, {user2}, {user3} y {user4} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2}, {user3} y {user4} (Duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2}, {user3}, {user4} y {user5} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Llamada con {user1}, {user2}, {user3}, {user4} y {user5} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2}, {user3}, {user4} y {user5} (Duración {duration})", + "Message of {user} in {conversation}" : "Mensaje de {user} en {conversation}", + "Message of {user}" : "Mensaje de {usuario}", + "Message of a deleted user in {conversation}" : "Mensaje de un usuario eliminado en {conversation}", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "An error occurred. Please contact your administrator." : "Ha ocurrido un error. Por favor contacte a su administrador.", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is not shared, or shared but not with the user" : "El archivo no está compartido, o lo está pero no con el usuario", + "No account available to delete." : "No hay cuentas disponibles para borrar.", + "Poll" : "Encuesta", + "Password needs to be set" : "Es necesario establecer la contraseña", + "Uploading the file failed" : "La subida del archivo ha fallado", + "No image file provided" : "No se ha proporcionado un archivo de imagen", + "File is too big" : "El archivo es demasiado grande", + "Invalid file provided" : "Archivo proporcionado no válido", + "Invalid image" : "Imagen no válida", + "Unknown filetype" : "Extensión de archivo desconocida", + "Talk mentions" : "Menciones en Talk", + "More conversations" : "Más conversaciones", + "Say hi to your friends and colleagues!" : "¡Saluda a tus amigos y colegas!", + "No unread mentions" : "No hay menciones sin leer", + "Call in progress" : "Llamada en curso", + "You were mentioned" : "Te han mencionado", + "Write to conversation" : "Escribir en la conversación", + "Writes event information into a conversation of your choice" : "Escribe información del evento en una conversación de su elección", + "Missing email field in header line" : "Falta el campo correo en la cabecera", + "Following lines are invalid: %s" : "Las siguientes líneas son inválidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s le ha invitado a la conversación \"%2$s\".", + "You were invited to conversation \"%s\"." : "Ud. fue invitado a la conversación \"%s\".", + "Conversation invitation" : "Invitación de conversación", + "Scheduled time" : "Hora programada", + "Description" : "Descripción", + "You can also dial-in via phone with the following details" : "También puedes unirte por teléfono con estos datos", + "Dial-in information" : "Información de conexión telefónica", + "Meeting ID" : "ID de reunión", + "Your PIN" : "Tu PIN", + "Click the button below to join the lobby now." : "Haga clic en el botón a continuación para unirse a la sala de espera", + "Click the link below to join the lobby now." : "Haga clic en el botón a continuación para unirse a la sala de espera", + "Join lobby for \"%s\"" : "Unirse a la sala de espera para \"%s\"", + "Click the button below to join the conversation now." : "Haga clic en el botón a continuación para unirse a la conversación ahora.", + "Click the link below to join the conversation now." : "Haga clic en el enlace a continuación para unirse a la conversación ahora.", + "Join \"%s\"" : "Unirse a \"%s\"", + "Meeting" : "Reunión", + "Password request: %s" : "Petición de contraseña: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Borrado el usuario (%s)", + "Failed to upload call recording" : "Fallo al subir la grabación de la llamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de grabación falló al subir la grabación de la llamada {call}. Por favor, comuníquelo a la administración.", + "Share to chat" : "Compartir al chat", + "Dismiss notification" : "Descartar notificación", + "Call recording now available" : "La grabación está disponible", + "The recording for the call in {call} was uploaded to {file}." : "La grabación para llamada en {call} se ha subido a {file}.", + "Transcript now available" : "La transcripción está disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripción para llamada en {call} se ha subido a {file}.", + "Failed to transcript call recording" : "Fallo al transcribir la grabación de la llamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor falló al transcribir la grabación en {file} para la llamada {call}. Por favor, comuníquelo a la administración.", + "Call summary now available" : "El resumen de la llamada está disponible", + "The summary for the call in {call} was uploaded to {file}." : "El resumen de la llamada de {call} se subió a {file}.", + "Failed to summarize call recording" : "Error al resumir la grabación de la llamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor ha fallado al resumir la grabación en {file} de la llamada {call}. Por favor, comuníquelo a la administración.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} le invitó a unirse a la sala {roomName} en {remoteServer}", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "{user1} invited you to a federated conversation" : "{user1} le invitó a una conversación federada", + "Someone reacted" : "Alguien reaccionó", + "New message" : "Nuevo mensaje", + "Reminder" : "Recordatorio", + "Someone mentioned you" : "Alguien te mencionó", + "Notification" : "Notificación", + "Someone reacted in a private conversation" : "Alguien reaccionó en una conversación privada", + "You received a message in a private conversation" : "Recibiste un mensaje en una conversación privada", + "Reminder in a private conversation" : "Recordatorio en una conversación privada", + "Someone mentioned you in a private conversation" : "Alguien te mencionó en una conversación privada", + "Notification in a private conversation" : "Notificación en una conversación privada", + "Reminder: You in {call}" : "Recordatorio: Ud. en {call}", + "Reminder: {user} in {call}" : "Recordatorio: {user} en {call}", + "Reminder: Deleted user in {call}" : "Recordatorio: Se eliminó al usuario en {call}", + "Reminder: {guest} (guest) in {call}" : "Recordatorio: {guest} (invitado) en {call}", + "Reminder: Guest in {call}" : "Recordatorio: Invitado en {call}", + "{user} reacted with {reaction}" : "{user} reaccionó con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reaccionó con {reaction} en {call}", + "Deleted user reacted with {reaction} in {call}" : "Usuario eliminado reaccionó con {reaction} en {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (invitado) reaccionó con {reaction} en {call}", + "Guest reacted with {reaction} in {call}" : "Invitado reaccionó con {reaction} en {call}", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado de {call}", + "{guest} (guest) in {call}" : "{guest} (invitado) en {call}", + "Guest in {call}" : "Invitado en {call}", + "{user} sent you a private message" : "{user} te ha enviado un mensaje privado", + "{user} sent a message in conversation {call}" : "{user} ha enviado un mensaje en la conversación {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado envió un mensaje a la conversación {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) envió un mensaje en la conversación {call}", + "A guest sent a message in conversation {call}" : "Un invitado envió un mensaje a la conversación {call}", + "{user} replied to your private message" : "{user} respondió a su mensaje privado", + "{user} replied to your message in conversation {call}" : "{user} respondió a su mensaje privado en la conversación {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario borrado respondió a a su mensaje en la conversación {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) respondió su mensaje en la conversación {call}", + "A guest replied to your message in conversation {call}" : "Un invitado respondió a su mensaje en la conversación {call}", + "Reminder: You in private conversation {call}" : "Recordatorio: Ud. en la conversación privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Recordatorio: Un usuario eliminado en la conversación privada {call}", + "Reminder: {user} in private conversation" : "Recordatorio: {user} en la conversación privada", + "Reminder: You in conversation {call}" : "Recordatorio: Ud. en la conversación {call}", + "Reminder: {user} in conversation {call}" : "Recordatorio: {user} en la conversación {call}", + "Reminder: A deleted user in conversation {call}" : "Recordatorio: Un usuario eliminado en la conversación {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Recordatorio: {guest} (invitado) en la conversación {call}", + "Reminder: A guest in conversation {call}" : "Recordatorio: Un invitado en la conversación {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionó con {reaction} a su mensaje privado", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionó con {reaction} a su mensaje en la conversación {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionó con {reaction} a su mensaje en la conversación {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invitado) reaccionó con {reaction} a su mensaje en la conversación {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invitado reaccionó con {reaction} a su mensaje en la conversación {call}", + "{user} mentioned you in a private conversation" : "{user} te ha mencionado en una conversación privada", + "{user} mentioned group {group} in conversation {call}" : "el usuario {user} mencionó al grupo {group} en la conversación {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionó al equipo {team} en la conversación {call}", + "{user} mentioned everyone in conversation {call}" : "el usuario {user} mencionó a todos en la conversación {call}", + "{user} mentioned you in conversation {call}" : "{user} te ha mencionado en {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionó al grupo {group} en la conversación {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuario eliminado mencionó al equipo {team} en la conversación {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionó a todos en la conversación {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado te ha mencionado en {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invitado) mencionó al grupo {group} en la conversación {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(Invitado) mencionó al equipo {team} en la conversación {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invitado) mencionó a todos en la conversación {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) te mencionó en la conversación {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invitado mencionó al grupo {group} en la conversación {call}", + "A guest mentioned team {team} in conversation {call}" : "Un invitado mencionó al equipo {team}en la conversación {call}", + "A guest mentioned everyone in conversation {call}" : "Un invitado mencionó a todos en la conversación {call}", + "A guest mentioned you in conversation {call}" : "Un invitado te ha mencionado en {call}", + "View message" : "Ver mensaje", + "Dismiss reminder" : "Descartar recordatorio", + "View chat" : "Ver chat", + "{user} invited you to a group conversation: {call}" : "{user} te ha invitado a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "Answer call" : "Contestar llamada", + "{user} would like to talk with you" : "{user} quiere hablar contigo", + "Call back" : "Devolver llamada", + "You missed a call from {user}" : "Tiene una llamada perdida de {user}", + "Accept call" : "Aceptar llamada", + "Incoming phone call from {call}" : "Llamada telefónica de {call}", + "You missed a phone call from {call}" : "Ud. tiene una llamada perdida de {call}", + "A group call has started in {call}" : "Una llamada de grupo ha comenzado en {call}", + "You missed a group call in {call}" : "Tiene una llamada de grupo perdida en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando la contraseña para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} trató de solicitar la contraseña para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguien ha solicitado la contraseña para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguien intentó solicitar la contraseña para acceder a {file}", + "Open settings" : "Abrir configuración", + "Hosted signaling server added" : "Servidor de señalización alojado añadido", + "The hosted signaling server is now configured and will be used." : "El servidor de señalización gestionado ya está configurado y en uso.", + "Hosted signaling server removed" : "Servidor de señalización alojado eliminado", + "The hosted signaling server was removed and will not be used anymore." : "El servidor de señalización gestionado se ha eliminado y ya no se usará.", + "Hosted signaling server changed" : "Servidor de señalización alojado modificado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "La cuenta del servidor de señalización gestionado ha cambiado el estado de «{oldstatus}» a «{newstatus}».", + "pending" : "pendiente", + "active" : "activo", + "expired" : "caducado", + "blocked" : "bloqueado", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificado de {host} expira en {days} días", + "The certificate of {host} expired" : "El certificado de {host} expiró", + "Contact via Talk" : "Contactar vía Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Conversations" : "Conversaciones", + "Messages in current conversation" : "Mensajes en la conversación actual", + "{user}" : "{user}", + "Messages" : "Mensajes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensajes en otras conversaciones", + "One-to-one rooms always need to show the other users avatar" : "Las salas uno a uno siempre necesitan mostrar los avatars del otro usuario", + "Invalid emoji character" : "Carácter de emoji inválido", + "Invalid background color" : "Color de fondo inválido", + "Avatar image is not square" : "La imagen del avatar no es cuadrada", + "Room {number}" : "Sala {number}", + "Other" : "Otro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No ha sido posible solicitar la prueba porque el servidor de pruebas no está accesible. Inténtalo de nuevo más adelante.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta instancia. Es posible que no sea accesible desde fuera para verificar su URL.", + "Something unexpected happened." : "Ha ocurrido algo inesperado.", + "The URL is invalid." : "La URL no es válida.", + "An HTTPS URL is required." : "Se requiere una URL HTTPS.", + "The email address is invalid." : "La dirección de correo no es válida.", + "The language is invalid." : "El idioma no es válido.", + "The country is invalid." : "El país no es válido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hay un problema con la solicitud de la prueba. Revisa los registros para más información.", + "Too many requests are send from your servers address. Please try again later." : "Se han enviado demasiadas solicitudes desde la dirección de tu servidor. Inténtalo de nuevo más adelante.", + "There is already a trial registered for this Nextcloud instance." : "Ya se ha registrado una prueba para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Ha ocurrido algo inesperado. Inténtalo de nuevo más adelante.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No ha sido posible solicitar la prueba porque el servidor de pruebas no responde bien. Inténtalo de nuevo más adelante.", + "Trial requested but failed to get account information. Please check back later." : "Se ha solicitado la prueba, pero no se ha obtenido la información de la cuenta. Inténtalo de nuevo más adelante.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta solicitud. Es posible que no que no sea accesible desde fuera para verificar su URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No ha sido posible obtener información de la cuenta porque el servidor de pruebas no responde bien. Inténtalo de nuevo más adelante.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hay un problema para obtener la información de la cuenta. Revisa los registros para más información.", + "There is no such account registered." : "Esta cuenta no está registrada.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No ha sido posible obtener la información de la cuenta porque el servidor de pruebas no está accesible. Inténtalo de nuevo más tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "No ha sido posible eliminar la cuenta del servidor de señalización gestionado. Inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No ha sido posible eliminar la cuenta porque el servidor de pruebas no responde bien. Inténtalo de nuevo más tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hay un problema para eliminar la cuenta. Revisa los registros para más información.", + "Too many requests are sent from your servers address. Please try again later." : "Están llegando demasiadas solicitudes desde la dirección de tu servidor. Inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No ha sido posible eliminar la cuenta porque el servidor de pruebas no está accesible. Inténtalo de nuevo más tarde.", + "Note to self" : "Nota personal", + "A place for your private notes, thoughts and ideas" : "Un lugar para sus notas personales, pensamientos e ideas", + "Transcript is AI generated and may contain mistakes" : "La transcripción se genera mediante IA y puede contener errores", + "Summary is AI generated and may contain mistakes" : "El resumen se genera mediante IA y puede contener errores", + "Let's get started!" : "¡Comencemos!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** es una plataforma de comunicación segura y auto-hospedada que se integra completamente de manera transparente con el ecosistema Nextcloud.\n\n#### Características principales de Nextcloud Talk\n\n* Mensajes privados y chats grupales\n* Llamadas y videollamadas\n* Archivos compartidos e integración con otras aplicaciones Nextcloud\n* Ajustes de conversación, moderación y privacidad personalizables\n* Web, escritorio y móvil (iOS y Android)\n* Comunicación privada y segura\n\nDescubra más información en la [documentación de usuario](https://docs.nextcloud.com/server/latest/user_manual/es/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bienvenido/a a Nextcloud Talk\n\nNextcloud Talk es una aplicación de mensajería privada y potente que se integra con Nextcloud. Chatee en privado o en conversaciones grupales, colabore en llamadas de voz y video, organice seminarios web y eventos, personalice sus conversaciones y más.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 De formato al texto para crear mensajes complejos\n\nEn Nextcloud Talk, puede utilizar Markdown para dar formato a sus mensajes. Por ejemplo, puede usar **negrita** o *cursiva*, y también `formato de código`. Incluso puede crear tablas o añadir encabezados a su texto.\n\n¿Quiere corregir un error o cambiar el formato? Edite su mensaje con el botón \"Editar mensaje\" en el menú de mensajes.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Añada archivos adjuntos y enlaces\n\nAdjunte archivos desde Nextcloud Hub mediante el botón \"+\". Comparta recursos desde Archivos y varias apps de Nextcloud. Algunas apps le permiten crear widgets interactivos, como por ejemplo, la aplicación Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deje que las conversaciones fluyan: mencione usuarios, reaccione a mensajes y más\n\nPuede mencionar a todos en la conversación utilizando %s o a participantes específicos escribiendo \"@\" y seleccionando su nombre de la lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Puede responder a mensajes, reenviarlos a otras conversaciones y personas, ó, copiar el contenido del mensaje.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Haga más con el Selector Inteligente\n\nSimplemente escriba \"/\" o vaya al menú \"+\" para abrir el Selector Inteligente, donde podrá adjuntar distintos tipos de contenido a sus mensajes. Puede configurar el Selector Inteligente para que pueda insertar recursos de tus apps de Nextcloud, GIFs, ubicaciones, texto generado por IA y mucho más.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestione los ajustes de la conversación\n\nEn el menú de la conversación, puede acceder a varios ajustes para gestionar sus conversaciones, como:\n* Editar información de la conversación\n* Gestionar notificaciones\n* Aplicar varias reglas de moderación\n* Configurar el acceso y la seguridad\n* Activar bots\n* ¡Y más!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Estadounidense", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islas Åland", + "Azerbaijan" : "Azerbaiyán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Brunéi Darusalam", + "Bolivia, Plurinational State of" : "Bolivia, Estado Plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio y Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Isla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democrática del", + "Central African Republic" : "República Centroafricana", + "Congo" : "Congo", + "Switzerland" : "Suiza", + "Côte d'Ivoire" : "Costa de Marfil", + "Cook Islands" : "Islas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curazao", + "Christmas Island" : "Isla de Navidad", + "Cyprus" : "Chipre", + "Czechia" : "Chequia", + "Germany" : "Alemania", + "Djibouti" : "Yibuti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Argelia", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Western Sahara" : "Sáhara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fiyi", + "Falkland Islands (Malvinas)" : "Islas Malvinas (Falkland)", + "Micronesia, Federated States of" : "Micronesia, Estados Federados de", + "Faroe Islands" : "Islas Faroe", + "France" : "Francia", + "Gabon" : "Gabón", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido de la Gran Bretaña e Irlanda del Norte", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islas Georgias del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isla Heard e Islas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Isla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico del Océano Índico", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica de", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordania", + "Japan" : "Japón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguizistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Comoros" : "Comoras", + "Saint Kitts and Nevis" : "San Cristóbal y Nieves", + "Korea, Democratic People's Republic of" : "Corea, República Democrática Popular de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islas Caimán", + "Kazakhstan" : "Kazajistán", + "Lao People's Democratic Republic" : "República Democrática Popular de Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónaco", + "Moldova, Republic of" : "Moldavia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martín (parte francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islas Marshall", + "North Macedonia" : "Macedonia del norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Islas Marianas del Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níger", + "Norfolk Island" : "Isla Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Bajos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nueva Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Estado de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Catar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Russian Federation" : "Rusia, Federación de", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudí", + "Solomon Islands" : "Islas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Elena, Ascensión y Tristán de Acuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard y Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santo Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "San Martín (parte holandesa)", + "Syrian Arab Republic" : "República Árabe Siria", + "Eswatini" : "Swazilandia", + "Turks and Caicos Islands" : "Islas Turcos y Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Territorios Franceses del Sur", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tayikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Túnez", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidad y Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwán, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, República Unida de", + "Ukraine" : "Ucrania", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islas Ultramarinas Menores Estadounidenses", + "United States of America" : "Estados Unidos de América", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Estado Vaticano", + "Saint Vincent and the Grenadines" : "San Vicente y las Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Islas Vírgenes (Británicas)", + "Virgin Islands, U.S." : "Islas Vírgenes (U.S.)", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis y Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Background blur" : "Desenfocar fondo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "No se ha podido comprobar el soporte para cargar WASM. Por favor, compruebe manualmente si su servidor web sirve archivos '.wasm'.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Su servidor web no está configurado para entregar archivos `.wasm` correctamente. Esto suele ser un problema relacionado con la configuración de Nginx. Asímismo, el desenfoque de fondo también necesita un ajuste para entregar archivos `.wasm`. Compare su configuración de Nginx con la configuración recomendada en nuestra documentación.", + "Talk configuration values" : "Valores de configuración de Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Limitar la duración de las llamadas solo está soportado con el cron del sistema. Por favor, habilite el cron de sistema o elimine la configuración `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Los valores bajos del ajuste `max_call_duration` (que actualmente es %d) no pueden ser impuestos por limitaciones técnicas. La tarea en segundo plano solo se ejecuta cada 5 minutos, así que úselo bajo su propio riesgo.", + "Federation" : "Federación", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es altamente recomendable configurar \"memcache.locking\" cuando la Federación de Talk está habilitada.", + "High-performance backend" : "Motor de alto rendimiento", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No se ha configurado un backend de alto rendimiento - Ejecutar Nextcloud Talk sin utiliizar el backend de alto rendimiento solo escala con llamadas pequeñas (máx. 2-3 participantes). Por favor, configure un backend de alto rendimiento para asegurarse que las llamadas con múltiples participantes funcionen sin interrupciones.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Ejecutar el backend de alto rendimiento en el modo \"conversation_cluster\" está discontinuado y no será soportado en la próxima versión. El backend de alto rendimiento actualmente soporta clustering verdadero y debería ser utilizado en su lugar.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definir múltiples backends de alto rendimiento está discontinuado y no será soportado en la próxima versión. En su lugar, debería configurarse un balanceador de carga con varios servidores de señalización en clúster, y configurado en los ajustes de Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La llave pública almacenada para el algoritmo %1$s no coincide con la llave privada almacenada. Ejecute %2$s para corregir el problema.", + "High-performance backend not configured correctly. Run %s for details." : "El backend de alto rendimiento no ha sido configurado correctamente. Ejecute %s para ver los detalles.", + "High-performance backend not configured correctly" : "El backend de alto rendimiento no ha sido configurado correctamente", + "Error: Cannot connect to server" : "Error: No se puede conectar con el servidor", + "Error: Server did not respond with proper JSON" : "Error: El servidor no ha respondido con JSON correcto", + "Error: Certificate expired" : "Error: Certificado caducado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: los relojes de los servidores Nextcloud y el backend de alto rendimiento están desincronizados. Por favor, asegúrese de que ambos servidores están conectados a un servidor de sincronización de hora o sincronice sus relojes manualmente.", + "Could not get version" : "No se pudo obtener la versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Versión en ejecución: {versión}; El servidor necesita ser actualizado para ser compatible con esta versión de Talk", + "Error: Server responded with: {error}" : "Error: El servidor ha respondido con: {error}", + "Error: Unknown error occurred" : "Error: Ha sucedido un error desconocido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advertencia: Versión en ejecución: {version}; El servidor no soporta todas las características de esta versión de Talk, características que faltan: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es altamente recomendado que se configure un caché de memoria cuando se ejecuta Nextcloud Talk con un backend de alto rendimiento.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push está instalado, esto mejora la puntualidad de las notificaciones de Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} no está instalado. Esto puede llevar a retrasos en las notificaciones de Talk.", + "Recording backend" : "Backend de grabación", + "Using the recording backend requires a High-performance backend." : "Usar el backend de grabación requiere un backend de alto rendimiento.", + "No recording backend configured" : "No se ha configurado un backend de grabación", + "SIP configuration" : "Configuración SIP", + "Using the SIP functionality requires a High-performance backend." : "Usar la funcionalidad SIP requiere un backend de alto rendimiento.", + "No SIP backend configured" : "No se ha configurado un backend SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Fecha no válida, el formato de las fechas debe ser AAAA-MM-DD", + "Conversation not found" : "Conversación no encontrada", + "Path is already shared with this conversation" : "La ruta ya está compartida con esta conversación", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video y audio conferencias mediante WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio conferencias usando WebRTC\n\n* 💬 **Chat** Nextcloud Talk viene con un chat de texto simple, permitiéndole compartir o subir archivos desde la app de Archivos de Nextcloud, o, desde su dispositivo local y mencionar a otros participantes.\n* 👥 **¡Llamadas privadas, grupales, públicas y protegidas por contraseña!** Invite a alguien, a un grupo o envíe un enlace público para invitar a una llamada.\n* 🌐 **Chats federados** Chatee con otros usuarios de Nextcloud en sus servidores\n* 💻 **¡Compartir pantalla!** Comparta su pantalla con los participantes de su llamada.\n* 🚀 **Integración con otras apps de Nextcloud** como Archivos, Calendario, estados de usuario, Tablero, Flujos, Mapas, Seleccionador inteligente, Contactos, Tarjetas, y muchas mas.\n* 🌉 **Sincronización con otras soluciones de mensajería** Estando [Matterbridge](https://github.com/42wim/matterbridge/) integrado en Talk, puede fácilmente sincronizar un sinnúmero de otras soluciones de chat con Talk de Nextcloud y viceversa.", + "Leave call" : "Dejar llamada", + "Navigating away from the page will leave the call in {conversation}" : "Navegar fuera de esta página colgará la llamada en {conversation}", + "Stay in call" : "Permanecer en la llamada", + "Error occurred when getting the conversation information" : "Ocurrió un error al obtener la información de la conversación", + "Discuss this file" : "Discutir sobre este archivo", + "Share this file with others to discuss it" : "Compartir esta archivo con otros para debatirlo", + "Share this file" : "Compartir este archivo", + "Join conversation" : "Unirse a la conversación", + "This conversation is password-protected." : "Esta conversación está protegida con contraseña.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hemos detectado múltiples intentos fallidos de inicio de sesión desde su IP. Por lo tanto, su siguiente inicio de sesión se podría retrasar hasta 30 segundos. ", + "The password is wrong. Try again." : "La contraseña es errónea. Vuelve a intentarlo.", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Error requesting the password." : "Error al solicitar la contraseña", + "Request password" : "Solicitar contraseña", + "This conversation has ended" : "Esta conversación ha finalizado", + "Error occurred when joining the conversation" : "Se ha producido un error al unirse a la conversación", + "Close Talk sidebar" : "Cerrar la barra lateral de Talk", + "Open Talk sidebar" : "Abrir la barra lateral de Talk", + "Everyone" : "Todo el mundo", + "Users and moderators" : "Usuarios y moderadores", + "Moderators only" : "Sólo moderadores", + "Disable calls" : "Deshabilitar llamadas", + "Save changes" : "Guardar cambios", + "Saving …" : "Guardando …", + "Saved!" : "Guardado", + "Limit to groups" : "Limitar para grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cuando se ha seleccionado al menos un grupo, solo personas de los grupos seleccionados pueden ser parte de las conversaciones.", + "Guests can still join public conversations." : "Los invitados todavía pueden unirse a conversaciones públicas", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Los usuarios que ya no puedan usar Talk serán listados como participantes en sus conversaciones previas y también se mantendrán sus mensajes de chat.", + "Limit using Talk" : "Límite al usar Talk", + "Limit creating a public and group conversation" : "Límite al crear una conversación pública y de grupo", + "Limit creating conversations" : "Límite al usar conversaciones", + "Limit starting a call" : "Límite al comenzar una llamada", + "Limit starting calls" : "Límite al comenzar llamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cuando una llamada ha comenzado, todos los que tienen acceso a la conversación pueden unirse a la llamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Se han instalado los siguientes bots en este servidor. En la documentación puede encontrar detalles sobre cómo {linkstart1} crear su propio bot {linkend} o una {linkstart2} lista de bots {linkend} para habilitar en su servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No se han instalado bots en este servidor. En la documentación puede encontrar detalles sobre cómo {linkstart1} crear su propio bot {linkend} o una {linkstart2} lista de bots {linkend} para habilitar en su servidor.", + "Description is not provided" : "No se ha dado una descripción", + "Locked for moderators" : "Bloqueado para moderadores", + "Enabled" : "Habilitado", + "Disabled" : "Desactivado", + "Bots settings" : "Configuración de bots", + "State" : "Estado", + "Name" : "Nombre", + "Last error" : "Último error", + "Total errors count" : "Recuento total de errores", + "Find more bots" : "Encontrar más bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Los servidores de confianza pueden ser configurados en {linkstart}La página de ajustes{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Los chats y llamadas federadas ya funcionan. La gestión de adjuntos llegará en una versión futura.", + "Enable Federation in Talk app" : "Habilitar federación en la app Talk", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permitir a los usuarios ser invitados a conversaciones federadas", + "Allow users to invite federated users into conversation" : "Permitir a los usuarios invitar a los usuarios federados en la conversación", + "Only allow to federate with trusted servers" : "Solo permitir la federación entre servidores de confianza", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Cuando se ha seleccionado al menos un grupo, solo personas de los grupos listados pueden invitar a los usuarios federados a las conversaciones.", + "Groups allowed to invite federated users" : "Grupos que tienen permitido invitar a usuarios federados", + "Select groups …" : "Seleccione los grupos …", + "All messages" : "Todos los mensajes", + "@-mentions only" : "Solo menciones con @", + "Off" : "Off", + "General settings" : "Ajustes generales", + "Default notification settings" : "Configuración por defecto de notificaciones", + "Default group notification" : "Notificación por defecto de grupo", + "Default group notification for new groups" : "Notificación por defecto para grupos nuevos", + "Integration into other apps" : "Integración en otras aplicaciones", + "Allow conversations on files" : "Permitir conversaciones en archivos", + "Allow conversations on public shares for files" : "Permitir conversaciones en recursos compartidos para archivos", + "End-to-end encrypted calls" : "Llamadas cifradas de extremo a extremo", + "Enable encryption" : "Habilitar cifrado", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Las llamadas cifradas de extremo a extremo con un puente SIP configurado necesitan una nueva versión del backend de alto rendimiento y del puente SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Los clientes móviles no soportan las llamadas cfiradas de extremo a extremo en el momento.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Al pulsar el botón de arriba, los datos del formulario se enviarán a los servidores de Struktur AG. Puedes encontrar más información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Terminada", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "No se ha podido solicitar la prueba. Inténtalo de nuevo más adelante.", + "The account could not be deleted. Please try again later." : "No se ha podido eliminar la cuenta. Inténtalo de nuevo más adelante.", + "Hosted High-performance backend" : "Backend de alto rendimiento alojado", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nuestro asociado Struktur AG ofrece un servicio en el que puedes solicitar un servidor de señalización gestionado. Para ello, solo tienes que rellenar el formulario a continuación y tu Nextcloud enviará la solicitud. Cuando el servidor esté configurado, las credenciales se rellenarán automáticamente. Esto sobrescribirá los ajustes actuales del servidor de señalización.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Si su backend de alto rendimiento incluye funcionalidad STUN y/o TURN, los ajustes serán adecuadamente actualizados ", + "URL of this Nextcloud instance" : "URL de esta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nombre completo del usuario que solicita la prueba", + "Email of the user" : "Email del usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar prueba del servidor de señalización", + "You can see the current status of your hosted signaling server in the following table." : "Puedes ver el estado actual de tu servidor de señalización gestionado en la siguiente tabla.", + "Status" : "Estado", + "Created at" : "Creado el", + "Expires at" : "Caduca el", + "Limits" : "Límites", + "STUN included" : "STUN incluido", + "Yes" : "Sí", + "No" : "No", + "TURN included" : "TURN incluido", + "Delete the signaling server account" : "Eliminar la cuenta del servidor de señalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Puede instalar Matterbridge para enlazar Nextcloud Talk con algunos otros servicios, visite su {linkstart1}página de GitHub{linkend} para más detalles. La descarga e instalación de la aplicación puede llevar un tiempo. En caso de que falle por tiempo de espera, haga la instalación manualmente desde la {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "El archivo binario de Matterbridge tiene permisos incorrectos. Por favor, asegúrese de que el archivo binario de Matterbridge pertenece al usuario correcto y se puede ejecutar. Este puede encontrarse en \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "El binario de Matterbridge no se ha encontrado o no se ha podido ejecutar.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "También puede configurar manualmente la ruta al binario de Matterbridge mediante la configuración. Consulte la {linkstart}documentación de integración de Matterbridge{linkend} para más información.", + "Downloading …" : "Descargando …", + "Install Talk Matterbridge" : "Instalar Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Ocurrió un error mientras se instalaba la app Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocurrió un error mientras se instalaba Matterbridge para Talk. Por favor, instale el mismo manualmente", + "Failed to execute Matterbridge binary." : "Fallo al ejecutar el binario de Matterbridge.", + "Matterbridge integration" : "Integración con Matterbridge", + "Enable Matterbridge integration" : "Activar integración con Matterbridge", + "Status: Checking connection" : "Estado: Comprobando conexión", + "OK: Running version: {version}" : "OK: Versión en uso: {version}", + "Error: Server seems to be a Signaling server" : "Error: el servidor parece ser un servidor de señalización", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: los relojes de los servidores Nextcloud y el backend de grabación están desincronizados. Por favor, asegúrese de que ambos servidores están conectados a un servidor de sincronización de hora o sincronice sus relojes manualmente.", + "Recording backend URL" : "URL del backend de grabación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "Disabled for all calls" : "Deshabilitado para todas las llamadas", + "Enabled for all calls" : "Habilitado para todas las llamadas", + "Configurable on conversation level by moderators" : "Configurable a nivel de conversación por los moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Los ajustes PHP \"upload_max_filesize\" ó \"post_max_size\" sólo le permitirán cargar archivos de hasta {maxUpload}.", + "Recording backend settings saved" : "Se guardaron las configuraciones del backend de grabación", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "A los moderadores les será permitido habilitar el consentimiento a nivel de conversación. El consentimiento para ser grabado le será requerido a cada participante antes de unirse a cada una de las llamadas en esta conversación.", + "The consent to be recorded will be required for each participant before joining every call." : "El consentimiento para ser grabado le será requerido a cada participante antes de unirse a cada llamada.", + "The consent to be recorded is not required." : "El consentimiento para ser grabado no es requerido.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuración del backend de grabación solo es posible con el backend de alto rendimiento.", + "Add a new recording backend server" : "Añadir un nuevo servidor de backend de grabación", + "Shared secret" : "Secreto compartido", + "Recording consent" : "Consentimiento de grabación", + "Recording transcription" : "Grabando transcripción", + "Automatically transcribe call recordings with a transcription provider" : "Transcribe automáticamente las llamadas grabadas con un proveedor de transcripciones", + "Automatically summarize call recordings with transcription and summary providers" : "Resume automáticamente las llamadas grabadas con proveedores de transcripción y resumen", + "SIP configuration saved!" : "¡Configuración SIP guardada!", + "SIP configuration is only possible with a High-performance backend." : "La configuración SIP solo es posible con un backend de alto rendimiento.", + "Enable SIP Dial-out option" : "Habilitar opción para para llamadas SIP salientes", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "El servidor de señalización debe ser actualizado para que tenga soporte para llamadas SIP salientes", + "Do not show SIP Dial-out caller number" : "No mostrar el número telefónico en llamadas SIP salientes", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "El número anónimo debe aparecer como \"desconocido\" o \"número privado\" al recipiente de la llamada", + "Dial-out number" : "Número de llamada saliente", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número en formato E164 utilizado como número alternativo para llamadas salientes", + "Dial-out prefix" : "Prefijo para llamadas salientes", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefijo para el número configurado del usuario para llamadas salientes (el predeterminado es `+`)", + "Restrict SIP configuration" : "Restringir la configuración SIP", + "Enable SIP configuration" : "Habilitar configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo los usuarios de los siguientes grupos pueden permitir SIP en las conversaciones que moderen", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información se envía por correo electrónico y se muestra en la barra lateral a todos los participantes.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL del backend Talk", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Características disponibles", + "Error: Websocket connection failed" : "Error: La conexión Websocket falló", + "Error code" : "Código de error", + "Error message" : "Mensaje de error", + "Error: Websocket connection failed. Check browser console" : "Error: la conexión Websocket ha fallado. Compruebe la consola del navegador", + "High-performance backend URL" : "URL del motor de alto rendimiento", + "Missing High-performance backend warning hidden" : "La advertencia de falta de backend de alto rendimiento está oculta", + "High-performance backend settings saved" : "Se guardaron las configuraciones del backend de alto rendimiento", + "Nextcloud Talk setup not complete" : "La configuración de Nextcloud Talk no está completa", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Por favor, tenga en cuenta que en llamadas con más de 2 participantes sin el backend de alto rendimiento, los participantes podrían experimentar problemas de conectividad y causará una carga de trabajo alta en los dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale el backend de alto rendimiento para asegurarse de que las llamadas con múltiples participantes funcionen sin interrupciones.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Guía de instalación rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "El backend de alto rendimiento es requerido para llamadas y conversaciones con múltiples participantes. Sin este backend, todos los participantes tienen que enviar su vídeo individualmente a todos los demás participantes, lo que les creará, probablemente, problemas de conectividad y una carga de trabajo alta en sus dispositivos.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es altamente recomendable configurar una caché distribuida al utilizar Nextcloud Talk con un backend de alto rendimiento.", + "Add High-performance backend server" : "Añadir un servidor backend de alto rendimiento", + "Warn about connectivity issues in calls with more than 2 participants" : "Advertir sobre problemas de conectividad en llamadas con más de 2 participantes.", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "La dirección del servidor no es válida", + "STUN settings saved" : "Configuraciones STUN guardadas", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se usa para determinar la dirección IP pública de participantes que estén tras un router.", + "Add a new STUN server" : "Agregar un servidor STUN nuevo ", + "{schema} scheme must be used with a domain" : "El esquema {schema} debe usarse con un dominio", + "{option1} and {option2}" : "{option1} y {option2}", + "{option} only" : "Solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: El servidor TURN ha devuelto candidatos ICE con éxito", + "Error: No working ICE candidates returned by the TURN server" : "Error: El servidor TURN no ha devuelto candidatos ICE que funcionen", + "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN (Traversal Using Relays around NAT)", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Secreto del servidor TURN", + "TURN server protocols" : "Protocolos de servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para hacer de proxy del tráfico de los participantes trás un firewall. Si los participantes individuales no pueden conectarse a otros, lo más probable es que se necesite un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", + "TURN settings saved" : "Configuraciones TURN guardadas", + "TURN servers" : "Servidores TURN.", + "Add a new TURN server" : "Agregar un servidor TURN nuevo ", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Comprobando …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallo: WebAssembly está deshabilitado o no está soportado por este navegador. Por favor, activa WebAssembly o usa un navegador con soporte para que se haga la comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallo: los archivos \".wasm\" y \".tflite\" no han sido devueltos correctamente por el servidor web. Por favor compruebe la sección \"Requisitos del sistema\" en la documentación de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: los archivos \".wasm\" y \".tflite\" han sido devueltos correctamente por el servidor web", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que la configuración de PHP y Apache no es compatible. Por favor, tenga en cuenta que PHP solo puede usarse con el módulo MPM_PREFORK y que PHP-FPM solo puede usarse con el módulo MPM_EVENT.", + "Web server setup checks" : "Comprobaciones de la configuración del servidor web", + "Files required for virtual background can be loaded" : "Los archivos necesarios para el fondo virtual se pueden cargar", + "Federated user" : "Usuario federado", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas de grupos", + "Number of breakout rooms" : "Número de salas de grupos", + "You can create from 1 to 20 breakout rooms." : "Puede crear desde 1 a 20 salas de grupo.", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar participantes automáticamente", + "Manually assign participants" : "Asignar participantes manualmente", + "Allow participants to choose" : "Permitir a los participantes escoger", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas de grupos", + "Reset" : "Restablecer", + "Delete breakout rooms" : "Eliminar salas de grupos", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Las salas de grupos y las configuraciones actuales se perderán", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes no asignados", + "Back" : "Volver", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Añadir participante «{user}»", + "Now" : "Ahora", + "Invalid calendar selected" : "Se seleccionó un calendario inválido", + "Invalid start time selected" : "Se seleccionó una hora de inicio inválida", + "Invalid end time selected" : "Se seleccionó una hora de finalización inválida", + "Unknown error occurred" : "Ha ocurrido un error desconocido", + "Sending no invitations" : "No se enviarán invitaciones", + "{participant0} will receive an invitation" : "{participant0} recibirá una invitación", + "{participant0} and {participant1} will receive invitations" : "{participant0} y {participant1} recibirán invitaciones", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} y %n otro recibirán invitaciones","{participant0}, {participant1} y %n otros recibirán invitaciones","{participant0}, {participant1} y %n otros recibirán invitaciones"], + "Invite {user}" : "Invitar a {user}", + "Invite all users and emails in this conversation" : "Invitar a todos los usuarios y correos electrónicos en esta conversación", + "Meeting created" : "Reunión creada", + "Upcoming meetings" : "Próximas reuniones", + "Loading …" : "Cargando …", + "No upcoming meetings" : "No hay próximas reuniones", + "Schedule a meeting" : "Programar una reunión", + "Meeting title" : "Título de la reunión", + "From" : "De", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "No other participants to send invitations to." : "No hay otros participantes a los cuales enviar invitaciones.", + "Add attendees" : "Añadir asistentes", + "Save" : "Guardar", + "Search participants" : "Buscar participantes", + "No results" : "Sin resultados", + "Done" : "Listo", + "Disable live transcription" : "Deshabilitar transcripción en vivo", + "Disable live translation" : "Desactivar traducción en vivo", + "Raise hand" : "Levantar la mano", + "Raise hand (R)" : "Levantar mano (R)", + "Lower hand" : "Bajar la mano", + "Lower hand (R)" : "Bajar mano (R)", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista de orador", + "Grid view" : "Vista en cuadrícula", + "Error when trying to load the available live transcription languages" : "Error al intentar cargar los lenguajes de transcripción disponibles", + "Failed to enable live transcription" : "Fallo al habilitar la transcripción en vivo", + "Recording consent is required" : "Es necesario el consentimiento de grabación", + "This conversation is read-only" : "Esta conversación es de solo lectura", + "Conversation not found or not joined" : "No se encuentra la conversación, o no se ha unido a ella", + "Lobby is still active and you're not a moderator" : "La sala de espera sigue activa y Ud. no es un moderador", + "Connection failed" : "La conexión ha fallado", + "Reload" : "Recargar", + "{nickName} raised their hand." : "{nickName} ha levantado la mano", + "A participant raised their hand." : "Alguien ha levantado la mano.", + "Collapse stripe" : "Colapsar franja", + "Expand stripe" : "Expandir franja", + "Previous page of videos" : "Página anterior de vídeos", + "Next page of videos" : "Página siguiente de vídeos", + "Connecting …" : "Conectando …", + "Calling …" : "Llamando …", + "Waiting for {user} to join the call" : "Esperando a que {user} se una a la llamada", + "Waiting for others to join the call …" : "Esperando a otros a unirse a la llamada …", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otros en la pestaña de participantes en la barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puede invitar a otras personas en la pestaña de participantes de la barra lateral o compartir este enlace para invitar a otras personas", + "Share this link to invite others!" : "Comparte este enlace para invitar a otras personas.", + "Copy link" : "Copiar enlace", + "You are not allowed to enable audio" : "No está autorizado a activar el audio", + "No audio. Click to select device" : "Sin audio. Haga click para seleccionar dispositivo", + "Mute audio" : "Silenciar audio", + "Mute audio (M)" : "Silenciar audio (M)", + "Unmute audio" : "Activar audio", + "Unmute audio (M)" : "Escuchar audio (M)", + "None" : "Ninguno", + "Select a microphone" : "Seleccione un micrófono", + "Select a speaker" : "Seleccione un parlante", + "Check devices" : "Comprobar dispositivos", + "Access to camera was denied" : "Se ha denegado el acceso a la cámara", + "Error while accessing camera: It is likely in use by another program" : "Error al acceder a la cámara: puede que la esté usando otro programa", + "Error while accessing camera" : "Error al acceder a la cámara", + "You have been muted by a moderator" : "Has sido silenciado por un moderador", + "Hide presenter video" : "Ocultar video del presentador", + "You are not allowed to enable video" : "No está autorizado a activar el vídeo", + "No video. Click to select device" : "Sin video. Haga click para seleccionar dispositivo", + "Disable video" : "Desactivar video", + "Disable video (V)" : "Desactivar video (V)", + "Enable video" : "Activar vídeo", + "Enable video (V)" : "Activar video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar video - Su conexión será brevemente interrumpida cuando se habilite el video por primera vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar video (V) - Su conexión será interrumpida un instante cuando se active el video por primera vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Active el vídeo. Su conexión será brevemente interrumpida cuando active el vídeo la primera vez", + "Select a video device" : "Seleccione un dispositivo de video", + "Show presenter" : "Mostrar presentador", + "You" : "Tú", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Mostrar pantalla", + "Stop following" : "Dejar de seguir", + "Connection could not be established …" : "No se pudo establecer la conexión …", + "Connection was lost and could not be re-established …" : "Se ha perdido la conexión y no se pudo re-establecer …", + "Connection could not be established. Trying again …" : "No se pudo establecer la conexión. Intentándolo de nuevo …", + "Connection lost. Trying to reconnect …" : "Se ha perdido la conexión. Intentando reconectar …", + "Connection problems …" : "Problemas de conexión …", + "Collapse" : "Colapsar", + "Expand" : "Expendir", + "You need to be logged in to upload files" : "Necesita estar conectado para subir archivos", + "Drop your files to upload" : "Arrastra tus archivos para subir", + "Conversation messages" : "Mensajes de la conversación", + "Scroll to bottom" : "Ir al final", + "Post message" : "Publicar mensaje", + "Federated conversation" : "Conversación federada", + "Public conversation" : "Conversación pública", + "Favorite" : "Favorito", + "Banned users" : "Usuarios bloqueados", + "Manage the list of banned users in this conversation." : "Gestionar la lista de usuarios bloqueados en esta conversación.", + "Manage bans" : "Gestionar bloqueos", + "No banned users" : "No hay usuarios bloqueados", + "Banned by:" : "Bloqueado por:", + "Date:" : "Fecha:", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Unban" : "Desbloquear", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Puede cambiar el título y la descripción en {linkstart} Calendario ↗{linkend}.", + "Error while updating conversation name" : "Error al actualizar el nombre de la conversación", + "Error while updating conversation description" : "Se ha producido un error al actualizar la descripción", + "Enter a name for this conversation" : "Ingrese un nombre para esta conversación", + "Edit conversation name" : "Editar el nombre de la conversación", + "Edit conversation description" : "Editar descripción de la conversación", + "Enter a description for this conversation" : "Introduce una descripción para esta conversación", + "Picture" : "Imagen", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Se pueden habilitar los siguientes bots en esta conversación. Contacte con su administrador para tener más bots instalados en este servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No hay bots instalados en este servidor. Contacte con su administrador para tener más bots instalados en este servidor.", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Salas de grupos", + "Manage breakout rooms" : "Administrar salas de grupos", + "Set up breakout rooms for this conversation" : "Configurar salas de grupos para esta conversación", + "Please select a valid PNG or JPG file" : "Por favor seleccione un archivo PNG o JPG válido.", + "Choose your conversation picture" : "Seleccione su imagen de la conversación", + "Choose" : "Seleccione", + "Error setting conversation picture" : "Error al establecer la imagen de la conversación", + "Could not set the conversation picture: {error}" : "No fue posible establecer la imagen de la conversación: {error}", + "Error cropping conversation picture" : "Error al recortar la imagen de la conversación", + "Error removing conversation picture" : "Error al quitar la imagen de la conversación", + "Set emoji as conversation picture" : "Establecer emoji como imagen de la conversación", + "Set background color for conversation picture" : "Establecer el color de fondo para la imagen de la conversación", + "Upload conversation picture" : "Subir imagen de la conversación", + "Choose conversation picture from files" : "Seleccionar imagen de la conversación desde los archivos", + "Remove conversation picture" : "Eliminar la imagen de la conversación", + "The file must be a PNG or JPG" : "El archivo debe ser un PNG o JPG", + "Set picture" : "Establecer imagen", + "Default permissions modified for {conversationName}" : "Permisos por defecto modificados para {conversationName}", + "Could not modify default permissions for {conversationName}" : "No se pudieron modificar los permisos por defecto para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edita los permisos por defecto de los participantes de esta conversación. Estos ajustes no afectan a los moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen los permisos en esta sección, los permisos personalizados asignados previamente a participantes individuales serán perdidos.", + "All permissions" : "Todos los permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Los participantes tienen permisos para crear una llamada, unirse a una llamada, habilitar audio y vídeo, y compartir su pantalla.", + "Restricted" : "Restringido", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Los participantes pueden unirse a llamadas, pero no pueden habilitar ni su audio ni su vídeo, ni compartir pantalla hasta que un moderador les otorgue estos permisos manualmente.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Ajustes de la conversación", + "Basic Info" : "Información Básica", + "Personal" : "Personal", + "Moderation" : "Moderación", + "Setup overview" : "Resumen de configuración", + "Live transcription" : "Transcripción en vivo", + "Enable live transcription" : "Habilitar transcripción en vivo", + "Breakout Rooms" : "Salas de grupos", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de peligro", + "Archive conversation" : "Archivar conversación", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Las conversaciones archivadas se ocultarán de la lista de conversaciones de forma predeterminada. Sin embargo, aparecerán cuando busque el nombre de la conversación o abra la lista de conversaciones archivadas.", + "Do you really want to leave \"{displayName}\"?" : "¿De verdad quiere abandonar \"{displayName}\"?", + "You can archive this conversation instead." : "Puede archivar esta conversación en su lugar.", + "Leave conversation" : "Abandonar conversación", + "You need to promote a new moderator before you can leave the conversation" : "Debe escoger a un nuevo moderador antes de que pueda abandonar la conversación", + "Delete conversation" : "Borrar conversación", + "Do you really want to delete \"{displayName}\"?" : "¿Estás seguro de que quieres borrar \"{displayName}\"?", + "Error while deleting conversation" : "Error al eliminar una conversación", + "Delete all chat messages" : "Eliminar todos los mensajes del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "¿Realmente desea eliminar todos los mensajes de \"{displayName}\"?", + "Error while clearing chat history" : "Error al borrar el historial del chat", + "Be careful, these actions cannot be undone." : "Tenga cuidado, estas acciones no se pueden deshacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una vez que se abandona una conversación, para reincorporarse a una conversación cerrada se necesita una invitación. Puede volverse a unir a una conversación abierta en cualquier momento.", + "Permanently delete this conversation." : "Eliminar permanentemente esta conversación.", + "Delete chat messages" : "Eliminar los mensajes del chat", + "Permanently delete all the messages in this conversation." : "Eliminar permanentemente todos los mensajes de esta conversación.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días","%n días"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas","%n semanas"], + "Custom expiration time" : "Tiempo de expiración personalizado", + "Message expiration disabled" : "Se deshabilitó la expiración de mensajes", + "Message expiration set: {duration}" : "Se estableció la expiración de mensaje: {duration}", + "Error when trying to set message expiration" : "Se encontró un error al intentar establecer la expiración de mensajes", + "Message expiration" : "Expiración de mensajes", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Los mensajes de chat pueden expirarse luego de cierto tiempo. Nota: Los archivos compartidos en el chat no serán borrados para el propietario, pero no estarán compartidos en la conversación.", + "Set message expiration" : "Establecer la expiración de los mensajes", + "Current message expiration" : "Expiración de los mensajes actual", + "Password copied to clipboard" : "Contraseña copiada al portapapeles", + "Password could not be copied" : "La contraseña no se ha podido copiar", + "Guest access" : "Acceso de invitado", + "Breakout rooms are not allowed in public conversations." : "Las salas de grupos no están permitidas en conversaciones públicas.", + "Allow guests to join this conversation via link" : "Permitir que los invitados se unan a través de un enlace", + "Password protection" : "Protección por contraseña", + "This conversation is password-protected. Guests need password to join" : "Esta conversación está protegida con contraseña. Los invitados necesitan una contraseña para unirse", + "Password protection is needed for public conversations" : "La protección con contraseña es obligatoria para conversaciones públicas", + "Set a password" : "Establecer una contraseña", + "Change password" : "Cambiar contraseña", + "Enter new password" : "Introduzca una nueva contraseña", + "Save password" : "Guardar contraseña", + "Copy password" : "Copiar contraseña", + "Guests are allowed to join this conversation via link" : "Los invitados pueden unirse a esta conversación a través de un enlace", + "Guests are not allowed to join this conversation" : "Los invitados no pueden unirse a esta conversación", + "Resend invitations" : "Reenviar las invitaciones", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversación está abierta a usuarios registrados y a usuarios creados con la app Guests", + "This conversation is open to registered users" : "Esta conversación está abierta a usuarios registrados", + "This conversation is limited to the current participants" : "Esta conversación está limitada a los participantes actuales", + "You opened the conversation to both registered users and users created with the Guests app" : "Ha abierto la conversación tanto a participantes registrados como a usuarios creados con la app Guests", + "Error occurred when opening or limiting the conversation" : "Se ha producido un error al abrir o limitar la conversación", + "Open conversation to registered users, showing it in search results" : "Abrir la conversación a los usuarios registrados, mostrándola en los resultados de búsqueda", + "Also open to users created with the Guests app" : "También abrir la misma a los usuarios creados con la app Guests", + "Open conversation" : "Abrir conversación", + "Set language spoken in calls" : "Establecer el lenguaje hablado en las llamadas", + "Languages could not be loaded" : "Los lenguajes no pudieron ser cargados", + "Loading languages …" : "Cargando lenguajes …", + "Invalid language" : "Idioma inválido", + "Default language (English)" : "Lenguaje predeterminado (Inglés)", + "Default live transcription language set" : "Se ha establecido el lenguaje predeterminado para la transcripción en vivo", + "Live transcription language set: {languageName}" : "Lenguaje de transcripción en vivo establecido: {languageName}", + "Error when trying to set live transcription language" : "Error al intentar establecer el idioma predeterminado de transcripción en vivo", + "Start time: {date}" : "Hora de inicio: {date}", + "Start time has been updated" : "Se ha actualizado la hora de inicio", + "Error occurred while updating start time" : "Se ha producido un error al actualizar la hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Habilitar la sala de espera causará que aquellos usuarios que no sean moderadores sean removidos de la llamada en curso.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar la sala de espera, restringiendo la conversación únicamente a los moderadores", + "Meeting start time" : "Hora de inicio de la reunión", + "Start time (optional)" : "Hora de inicio (opcional)", + "Import email participants" : "Importar participantes por correo electrónico", + "You can import a list of email participants from a CSV file." : "Puede importar una lista de participantes por correo electrónico desde un archivo CSV.", + "Poll drafts" : "Borradores de encuestas", + "Browse poll drafts" : "Explorar borradores de encuestas", + "Error occurred when locking the conversation" : "Se ha producido un error al bloquear la conversación", + "Error occurred when unlocking the conversation" : "Se ha producido un error al desbloquear la conversación", + "Lock conversation" : "Bloquear conversación", + "This will also terminate the ongoing call." : "Esto también terminará la llamada en curso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear la conversación para impedir a cualquiera publicar mensajes o iniciar llamadas.", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Eliminar", + "Add new bridged channel to current conversation" : "Añadir un canal enlazado a la conversación actual", + "unknown state" : "estado desconocido", + "running" : "funcionando", + "not running, check Matterbridge log" : "sin funcionamiento, comprueba el registro de Matterbridge", + "not running" : "sin funcionar", + "Bridge saved" : "Enlace guardado", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puedes enlazar canales de varios sistemas de mensajería instantánea con Matterbridge.", + "More info on Matterbridge" : "Más información sobre Matterbridge", + "Messaging systems" : "Sistemas de mensajería", + "Enable bridge" : "Habilitar enlace", + "Show Matterbridge log" : "Ver registro de Matterbridge", + "Log content" : "Contenido del registro", + "Only moderators are allowed to mention @all" : "Solo los moderadores pueden mencionar a @all", + "All participants are allowed to mention @all" : "Todos los participantes pueden mencionar a @all", + "Participants are now allowed to mention @all." : "Los participantes ahora pueden mencionar a @all", + "Mentioning @all has been limited to moderators." : "La mención a @all ha sido limitada a los moderadores.", + "Allow participants to mention @all" : "Permitir a los participantes mencionar a todos con @all", + "Mention permissions" : "Permisos de mención", + "Notifications" : "Notificaciones", + "Notify about calls in this conversation" : "Notificar llamadas en esta conversación", + "Important conversation" : "Conversación importante", + "\"Do not disturb\" user status is ignored for important conversations" : "El estado \"No molestar\" se ignorará para las conversaciones importantes", + "Sensitive conversation" : "Conversación sensible", + "Message preview will be disabled in conversation list and notifications" : "La vista previa de los mensajes será deshabilitada en la lista de conversaciones y en las notificaciones", + "Recording consent is required for calls in this conversation" : "El consentimiento de grabación es obligatorio para llamadas en esta conversación", + "Recording consent is not required for calls in this conversation" : "El consentimiento de grabación no es obligatorio para llamadas en esta conversación", + "Recording consent requirement was updated" : "Los requisitos de consentimiento de grabación fueron actualizados", + "Error occurred while updating recording consent" : "Error al actualizar los consentimientos de grabación", + "Recording Consent" : "Consentimiento de grabación", + "Recording consent cannot be changed once a call or breakout session has started." : "No se puede cambiar el consentimiento de grabación una vez que una llamada o sesión de salas de grupos ha comenzado", + "Require recording consent before joining call in this conversation" : "Obtener consentimiento de grabación antes de unirse a llamadas en esta conversación", + "Recording consent is required for all calls" : "El consentimiento de grabación es obligatorio para todas las llamadas", + "SIP dial-in is now possible without PIN requirement" : "Ahora es posible la marcación SIP sin necesidad de PIN", + "SIP dial-in is now enabled" : "Se ha habilitado la conexión telefónica SIP", + "SIP dial-in is now disabled" : "Se ha deshabilitado la conexión telefónica SIP", + "Error occurred when enabling SIP dial-in" : "Se ha producido un error al habilitar la conexión telefónica SIP", + "Error occurred when disabling SIP dial-in" : "Se ha producido un error al deshabilitar la conexión telefónica SIP", + "Phone and SIP dial-in" : "Conexión telefónica y marcado SIP ", + "Enable phone and SIP dial-in" : "Habilitar conexión telefónica y marcado SIP", + "Allow to dial-in without a PIN" : "Permitir la marcación sin PIN", + "Ongoing" : "En curso", + "{dayPrefix} {dateTime}" : "{dayPrefix}{dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persona aceptó","%n personas aceptaron","%n personas aceptaron"], + "_%n person declined_::_%n people declined_" : ["%n persona rechazó","%n personas rechazaron","%n personas rechazaron"], + "_and %n other attachment_::_and %n other attachments_" : ["y %n otro adjunto","y otros %n adjuntos","y otros %n adjuntos"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "En {conversation}", + "View attachment" : "Ver adjunto", + "Join" : "Unirse", + "View conversation" : "Ver conversación", + "View event on Calendar" : "Ver evento en Calendar", + "Error while creating the conversation" : "Ocurrió un error al crear la conversación", + "Hello, {displayName}" : "Hola,{displayName}", + "Start meeting now" : "Iniciar reunión ahora", + "Give your meeting a title" : "Asigna un título a tu reunión", + "Create and copy link" : "Crear y copiar enlace", + "Create a new conversation" : "Crear una conversación nueva", + "Join open conversations" : "Unirse a conversaciones abiertas", + "Call a phone number" : "Llamar a un número de teléfono", + "Scroll backward" : "Desplazarse hacia atrás", + "Scroll forward" : "Desplazarse hacia adelante", + "Schedule meetings" : "Programar reuniones", + "You don't have any upcoming meetings" : "No tiene próximas reuniones", + "Open calendar" : "Abrir calendario", + "Unread mentions" : "Menciones sin leer", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Los mensajes donde fue mencionado aparecerán aquí. Puede mencionar a las personas escribiendo @ seguido de su nombre", + "Upcoming reminders" : "Próximos recordatorios", + "Message reminders" : "Recordatorios de mensajes", + "Set a reminder on a message to be notified" : "Establezca un recordatorio en un mensaje para ser notificado", + "Start a group conversation" : "Iniciar una conversación grupal", + "Create conversation" : "Crear conversación", + "Enter your name" : "Escriba su nombre", + "Submit name and join" : "Enviar nombre y unirse", + "Do you already have an account?" : "¿Ya tiene una cuenta?", + "Log in" : "Iniciar sesión", + "Error while verifying uploaded file" : "Error al verificar el archivo cargado", + "Uploaded file is verified" : "El archivo subido ha sido verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "El formato del contenido está separado por comas (CSV):
- Se requiere una línea de cabecera y debe coincidir con \"name\",\"email\" o solamente \"email\"
- Una entrada por línea (p.ej. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Se añadieron los participantes exitosamente", + "Error while adding participants" : "Error al añadir participantes", + "Import a file" : "Importar un archivo", + "Browse" : "Explorar", + "Verifying uploaded file …" : "Verificando el archivo importado …", + "This might take a moment" : "Esto puede tomar un momento", + "Send invitations" : "Enviar invitaciones", + "_%n invalid email_::_%n invalid emails_" : ["%n correo inválido","%n correos inválidos","%n correos inválidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n correo ya importado o duplicado","%n correos ya importados o duplicados","%n correos ya importados o duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitación puede ser enviada","%n invitaciones pueden ser enviadas","%n invitaciones pueden ser enviadas"], + "An error occurred while calling a phone number" : "Ha ocurrido un error al llamar a un número de teléfono", + "Phone number could not be called: {error}" : "No se pudo llamar al número de teléfono: {error}", + "Phone number could not be called" : "No se pudo llamar al número de teléfono", + "Search participants or phone numbers" : "Buscar participantes o números de teléfono", + "Creating the conversation …" : "Creando la conversación …", + "Mark as read" : "Marcar como leído", + "Mark as unread" : "Marcar como no leído", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Añadir a favoritos", + "Unarchive conversation" : "Desarchivar conversación", + "Ignore \"Do not disturb\"" : "Ignorar el estado \"No molestar\"", + "You need to promote a new moderator before you can leave the conversation." : "Necesitas elegir un nuevo moderador antes de que puedas abandonar la conversación", + "Conversation actions" : "Acciones de conversación", + "Notify about calls" : "Notificar sobre llamadas", + "Hide message text" : "Esconder texto del mensaje", + "Pending invitations" : "Invitaciones pendientes", + "From {user} at {remoteServer}" : "De {usuario} en {remoteServer}", + "Decline invitation" : "Declinar invitación", + "Accept invitation" : "Aceptar invitación", + "No pending invitations" : "No hay invitaciones pendientes", + "Home" : "Inicio", + "Unread" : "No leído", + "Mentions" : "Menciones", + "Meetings" : "Reuniones", + "Alphabetically" : "Alfabético", + "No followed threads" : "Sin hilos seguidos", + "No matches found" : "No se han encontrado coincidencias", + "No conversations found" : "No se han encontrado conversaciones", + "You have no archived conversations." : "No tiene conversaciones archivadas.", + "Subscribe to an existing thread or start your own." : "Suscríbase a un hilo existente o inicie uno propio.", + "You have no unread mentions." : "No tiene menciones sin leer.", + "You have no unread messages." : "No tiene mensajes sin leer.", + "An error occurred while performing the search" : "Ha ocurrido un error mientras se realizaba la búsqueda", + "Conversation list" : "Lista de conversaciones", + "Filter conversations by" : "Filtrar conversaciones por", + "Unread messages" : "Mensajes no leídos", + "Meeting conversations" : "Conversaciones de las reuniones", + "Clear filters" : "Limpiar filtros", + "New personal note" : "Nueva nota personal", + "Back to conversations" : "Volver a conversaciones", + "Archived conversations" : "Conversaciones archivadas", + "Threads" : "Hilos", + "Clear filter" : "Borrar filtro", + "Show more threads" : "Mostrar más hilos", + "App settings" : "Configuración de la app", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federados", + "New private conversation" : "Nueva conversación privada", + "Other sources" : "Otras fuentes", + "Open conversations" : "Abrir conversaciones", + "No search results" : "No hay resultados de búsqueda", + "Users, groups and teams" : "Usuarios, grupos y equipos", + "Users and groups" : "Usuarios y grupos", + "Users and teams" : "Usuarios y equipos", + "Groups and teams" : "Grupos y equipos", + "New group conversation" : "Nueva conversación grupal", + "The meeting will start soon" : "La reunión comenzará en breve", + "This meeting is scheduled for {startTime}" : "Esta reunión está programada para {startTime}", + "You are currently waiting in the lobby" : "Ahora estás esperando en la sala de espera.", + "Select microphone" : "Selecciona micrófono", + "No microphone available" : "No hay micrófonos disponibles", + "Select speaker" : "Seleccionar orador", + "No speaker available" : "No hay oradores disponibles", + "Select camera" : "Selecciona cámara", + "No camera available" : "No hay cámaras disponibles", + "Select a device" : "Seleccione un dispositivo", + "Playing …" : "Reproduciendo …", + "Test speakers" : "Probar parlantes", + "Test" : "Prueba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sin sonido", + "No camera" : "No hay cámara", + "Display video as you will see it (mirrored)" : "Mostrar vídeo como Ud. lo verá (espejo)", + "Display video as others will see it" : "Mostrar vídeo como lo verá el resto", + "Calls are not supported in your browser" : "Tu navegador no admite llamadas", + "Access to microphone is only possible with HTTPS" : "El acceso al micrófono solo es posible con HTTPS", + "Access to microphone was denied" : "Se ha denegado el acceso al micrófono", + "Error while accessing microphone" : "Error al acceder al micrófono", + "Access to camera is only possible with HTTPS" : "El acceso a la cámara solo es posible con HTTPS", + "The call is being recorded." : "La llamada está siendo grabada.", + "The call might be recorded." : "La llamada podría ser grabada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La grabación podría incluir su voz, vídeo de su cámara y la pantalla compartida. Es necesario que dé su consentimiento antes de unirse a la llamada.", + "Give consent to the recording of this call" : "Dar mi consentimiento a la grabación de esta llamada", + "Show more info" : "Mostrar más información", + "Audio is not available" : "El audio no está disponible", + "Video is not available" : "El vídeo no está disponible", + "Start recording immediately with the call" : "Iniciar la grabación inmediatamente con la llamada", + "Notify all participants about this call" : "Notificar a todos los participantes de esta llamada", + "Apply settings" : "Aplicar ajustes", + "Select virtual office background" : "Seleccione el fondo virtual de oficina", + "Select virtual home background" : "Seleccione el fondo virtual de casa", + "Select virtual abstract background" : "Seleccione el fondo virtual abstracto", + "Select virtual beach background" : "Seleccione el fondo virtual de playa", + "Select virtual park background" : "Seleccione el fondo virtual de parque", + "Select virtual theater background" : "Seleccione el fondo virtual de teatro", + "Select virtual library background" : "Seleccione el fondo virtual de biblioteca", + "Select virtual space station background" : "Selecicone el fondo virtual de estación espacial", + "Error while uploading the file" : "Ocurrió un error mientras se subía el archivo", + "Select a file" : "Selecciona un archivo", + "Invalid path selected" : "Ruta de archivo seleccionada no válida.", + "Select virtual background from file {fileName}" : "Seleccione el fondo virtual desde el archivo {fileName}", + "Blur" : "Desenfoque", + "Upload" : "Subir", + "Files" : "Archivos", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "El mensaje caducó o ha sido eliminado", + "Cancel quote" : "Cancelar cita", + "24 hours" : "24 horas", + "7 days" : "7 días", + "Until unpin" : "Hasta desfijar", + "Clear reminder – {timeLocale}" : "Quitar recordatorio – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Message text copied to clipboard" : "Texto del mensaje copiado al portapapeles", + "Message text could not be copied" : "El texto del mensaje no pudo ser copiado", + "Message forwarded to \"Note to self\"" : "El mensaje se reenvió a \"Nota personal\"", + "Error while forwarding message to \"Note to self\"" : "Error al reenviar el mensaje a \"Nota personal\"", + "A reminder was successfully removed" : "Se ha eliminado correctamente un recordatorio", + "Error occurred when removing a reminder" : "Ha habido un error al borrar un recordatorio", + "A reminder was successfully set at {datetime}" : "Se ha configurado un recordatorio correctamente a las {datetime}", + "Error occurred when creating a reminder" : "Ocurrió un error al crear un recordatorio", + "Add a reaction to this message" : "Añade una reacción a este mensaje", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Set reminder" : "Establecer recordatorio", + "Pin message" : "Fijar mensaje", + "Unpin message" : "Desfijar mensaje", + "Reply privately" : "Responder en privado", + "Edit message" : "Editar mensaje", + "Copy message" : "Copiar mensaje", + "Copy message link" : "Copiar link del mensaje", + "Go to file" : "Ir al archivo", + "Download file" : "Descargar archivo", + "Go to thread" : "Ir al hilo", + "Edit thread details" : "Editar detalles del hilo", + "Forward message" : "Reenviar mensaje", + "Translate" : "Traducir", + "Set custom reminder" : "Establecer recordatorio personalizado", + "Close reactions menu" : "Cerrar menú de reacciones", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con otro emoji", + "Choose a conversation to forward the selected message." : "Elija una conversación para reenviar el mensaje seleccionado.", + "Error while forwarding message" : "Error al reenviar el mensaje", + "The message has been forwarded to {selectedConversationName}" : "El mensaje ha sido reenviado a {selectedConversationName}", + "Dismiss" : "Descartar", + "Go to conversation" : "Ir a la conversación", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "El mensaje no pudo ser traducido", + "Translation copied to clipboard" : "La traducción se copió al portapapeles", + "Translation could not be copied" : "La traducción no pudo ser copiada", + "Translate message" : "Traducir mensaje", + "Source language to translate from" : "Lenguaje fuente desde el cual traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Lenguaje objetivo al que se hará la traducción", + "Translate to" : "Traducir a", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar texto traducido", + "Send now" : "Enviar ahora", + "Message read by everyone who shares their reading status" : "Mensaje leído por todos los que comparten el estado de lectura", + "Message sent" : "Mensaje enviado", + "Sent without notification" : "Enviado sin notificación", + "Deleting message" : "Eliminando mensaje", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Mensaje eliminado correctamente, pero un robot o Matterbridge está configurado y este mensaje puede haber sido distribuido a otros servicios.", + "Message deleted successfully" : "Mensaje eliminado con éxito", + "Message could not be deleted because it is too old" : "El mensaje no se ha podido eliminar porque es demasiado antiguo", + "Only normal chat messages can be deleted" : "Solo se pueden eliminar mensaje normales del chat", + "An error occurred while deleting the message" : "Ha ocurrido un error al eliminar el mensaje", + "Pinned" : "Fijado", + "Your browser does not support playing audio files" : "Su navegador no admite la reproducción de archivos de audio", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarjeta Deck", + "Remove {fileName}" : "Borrar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n respuesta","%n respuestas","%n respuestas"], + "Sending message" : "Enviando mensaje", + "Failed to send the message. Click to try again" : "No se pudo enviar el mensaje. Haga clic para reintentar", + "Not enough free space to upload file" : "No hay espacio libre suficiente para subir el archivo", + "You cannot send messages to this conversation at the moment" : "No puedes enviar mensajes a esta conversación en este momento", + "Could not update the message" : "No se pudo actualizar el mensaje", + "You voted" : "Has votado", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Borrador de encuesta • %n opción","Borrador de encuesta • %n opciones","Borrador de encuesta • %n opciones"], + "_%n vote_::_%n votes_" : ["%n voto","%n votos","%n votos"], + "Edit poll draft" : "Editar borrador de encuesta", + "Delete poll draft" : "Eliminar borrador de encuesta", + "Open poll" : "Abrir encuesta", + "See results" : "Mostrar resultados", + "Reactions" : "Reacciones", + "No permission to post reactions in this conversation" : "No está permitido publicar reacciones en esta conversación", + "and {participant}" : "y {participant}", + "_and %n other participant_::_and %n other participants_" : ["y %n otro participante","y %n otros participantes","y %n otros participantes"], + "Show all reactions" : "Mostrar todas las reacciones", + "Add more reactions" : "Añadir más reacciones", + "Show or collapse system messages" : "Expandir o contraer mensajes del sistema", + "No messages" : "No hay mensajes", + "All messages have expired or have been deleted." : "Todos los mensajes han expirado o han sido eliminados.", + "{author} (pinned by you)" : "{author} (fijado por ti)", + "Unpin" : "No fijar", + "Cancel search" : "Cancelar búsqueda", + "Add a phone number" : "Añadir un número de teléfono", + "Error: A password is required to create the conversation." : "Error: La contraseña es necesaria para crear la conversación.", + "All set, the conversation \"{conversationName}\" was created." : "Todo listo, la conversación \"{conversationName}\" fue creada.", + "Create a new group conversation" : "Crear nueva conversación en grupo", + "Add participants" : "Añadir participantes", + "Maximum length exceeded ({maxlength} characters)" : "Tamaño máximo excedido ({maxlength} caracteres)", + "Conversation visibility" : "Visibilidad de la conversación", + "Allow guests to join via link" : "Permitir que los invitados se unan a través de un enlace", + "Enter password" : "Introduzca la contraseña", + "This conversation has been locked" : "Se ha bloqueado esta conversación", + "No permission to post messages in this conversation" : "No tienes permiso para publicar mensajes en esta conversación", + "Joining conversation …" : "Uniéndose a la conversación...", + "Write a message without notification" : "Escribir un mensaje sin notificación", + "Create a thread silently" : "Crear un hilo de manera silenciosa", + "Create a thread" : "Crear un hilo", + "Send message silently" : "Enviar mensaje en forma silenciosa", + "Send message" : "Enviar mensaje", + "Send without notification" : "Enviar sin notificación", + "The participant will not be notified about new messages" : "El participante no será notificado de nuevos mensajes", + "Participants will not be notified about new messages" : "Los participantes no serán notificados de nuevos mensajes", + "Thread title is required" : "Se requiere un título para el hilo", + "Message text is required" : "El texto del mensaje es requerido", + "The message could not be edited" : "El mensaje no pudo ser editado", + "File to share" : "Archivo que compartir", + "File upload is not available in this conversation" : "La subida de archivos no está disponible en esta conversación", + "Add emoji" : "Añadir emoji", + "Adding a mention will only notify users who did not read the message." : "Añadir una mención solo notificará a los usuarios que no han leído el mensaje.", + "Thread title" : "Título del hilo", + "Send later" : "Enviar más tarde", + "Cancel editing" : "Cancelar edición", + "Schedule message" : "Programar mensaje", + "{user} is out of office and might not respond." : "{user} está fuera de la oficina y es posible que no responda", + "Absence period: {startDate} - {endDate}" : "Período de ausencia: {startDate} - {endDate}", + "Replacement:" : "Reemplazo:", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde Archivos", + "Share files to the conversation" : "Compartir archivos en la conversación", + "Upload from device" : "Subir desde dispositivo", + "Create new poll" : "Crear nueva votación", + "Smart picker" : "Selector inteligente", + "Record voice message" : "Grabar mensaje de voz", + "End recording and send" : "Finalizar grabación y enviar", + "Dismiss recording" : "Descartar grabación", + "Access to the microphone was denied" : "El acceso al micrófono fue denegado", + "Microphone either not available or disabled in settings" : "El micrófono no está disponible o está desactivado en los ajustes", + "Error while recording audio" : "Error al grabar el audio", + "Generating summary of unread messages …" : "Generando resumen de mensajes no leídos …", + "Summary is AI generated and might contain mistakes" : "El resumen se genera mediante IA y puede contener errores", + "Error occurred during a summary generation" : "Ha ocurrido un error al generar el resumen", + "New file" : "Nuevo archivo", + "Blank" : "Vacío", + "Error while creating file" : "Ha ocurrido un error al crear el archivo", + "Create and share a new file" : "Crear y compartir un archivo nuevo", + "Name of the new file" : "Nombre del archivo nuevo", + "Create file" : "Crear archivo", + "Someone is typing …" : "Alguien está escribiendo …", + "{user1} is typing …" : "{user1} está escribiendo …", + "{user1} and {user2} are typing …" : "{user1} y {user2} están escribiendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} están escribiendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n otro están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …"], + "Add more files" : "Añadir más archivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "En esta conversación {user} puede:", + "Edit default permissions for participants in {conversationName}" : "Editar permisos por defecto para los participantes en {conversationName}", + "Start a call" : "Iniciar una llamada", + "Skip the lobby" : "Saltarse la sala de espera", + "Can post messages and reactions" : "Puede publicar mensajes y reacciones", + "Enable the microphone" : "Habilitar el micrófono", + "Enable the camera" : "Habilitar la cámara", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Actualizar permisos", + "Updating permissions" : "Actualizando permisos", + "No poll drafts" : "No hay borradores de encuestas", + "There is no poll drafts yet saved for this conversation" : "No hay borradores de encuestas guardados todavía para esta conversación", + "Create poll in {name}" : "Crear encuesta en {name}", + "Create poll" : "Crear votación", + "Error while importing poll" : "Error al importar encuesta", + "Question" : "Pregunta", + "Ask a question" : "Hacer una pregunta", + "Import draft from file" : "Importar un borrador desde un archivo", + "Answers" : "Respuestas", + "Answer {option}" : "Respuesta {option}", + "Delete poll option" : "Borrar opción de la encuesta", + "Add answer" : "Añadir respuesta", + "Settings" : "Ajustes", + "Anonymous poll" : "Encuesta anónima", + "Multiple answers" : "Múltiples respuestas", + "Save as draft" : "Guardar como borrador", + "Export draft to file" : "Exportar borrador a archivo", + "You voted for this option" : "Ud. Votó por esta opción", + "End poll" : "Cerrar la encuesta", + "Change your vote" : "Cambiar su voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votados", + "Send a message to \"{roomName}\"" : "Enviar mensaje a \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Mostrar lista de participantes", + "Assistance requested in {roomName}" : "Se solicitó asistencia en {roomName}", + "The message was sent to \"{roomName}\"" : "El mensaje fue enviado a \"{roomName}\"", + "Dismiss request for assistance" : "Descartar solicitud de asistencia", + "Send message to room" : "Enviar mensaje a sala", + "Back to main room" : "Volver a la sala principal", + "Back to your room" : "Volver a su sala", + "Message all rooms" : "Enviar un mensaje a todas las salas", + "Start session" : "Iniciar la sesión", + "Start a call before you start a breakout room session" : "Inicie una llamada antes de iniciar una sesión de salas de grupos", + "Stop session" : "Detener la sesión", + "The message was sent to all breakout rooms" : "El mensaje fue enviado a todas las salas de grupos", + "Send a message to all breakout rooms" : "Enviar mensaje a todas las salas de grupos", + "Breakout rooms are not started" : "No se han iniciado las salas de grupos", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Las llamadas sin el backend de alto rendimiento pueden ocasionar problemas de conectividad y un alto nivel de trabajo en los dispositivos. {linkstart}Más información{linkend} ", + "Talk setup incomplete" : "La configuración de Talk no está completa", + "Disable lobby" : "Desactivar sala de espera", + "Settings for participant \"{user}\"" : "Ajustes para participante «{user}»", + "Participant \"{user}\"" : "Participante «{user}»", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "invitado", + "Ringing …" : "Sonando …", + "Call rejected" : "Llamada rechazada", + "{time} talking …" : "{time} conversando …", + "{time} talking time" : "{time} tiempo de conversación", + "Raised their hand" : "Levantaron la mano", + "Joined with video" : "Participa con vídeo", + "Joined via phone" : "Participa por teléfono", + "Joined with audio" : "Participa con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El texto debe ser menor o igual a {maxLength} caracteres. Su texto actual tiene {charactersCount} caracteres.", + "Remove group and members" : "Eliminar grupo y miembros", + "Remove team and members" : "Eliminar equipo y miembros", + "Remove participant" : "Eliminar participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "¿Realmente desea eliminar el grupo \"{displayName}\" y a todos sus miembros de esta conversación?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "¿Realmente desea eliminar el equipo \"{displayName}\" y a todos sus miembros de esta conversación?", + "Do you really want to remove {displayName} from this conversation?" : "¿Realmente desea eliminar a {displayName} de esta conversación?", + "Notification was sent to {displayName}" : "La notificación fue enviada a {displayName}", + "Could not send notification to {displayName}" : "No se ha podido enviar la notificación a {displayName}", + "Permissions granted to {displayName}" : "Se han otorgado permisos a {displayName}", + "Could not modify permissions for {displayName}" : "No se ha podido modificar los permisos para {displayName}", + "Permissions removed for {displayName}" : "Permisos borrados para {displayName}", + "Permissions set to default for {displayName}" : "Se establecieron los permisos predeterminados para {displayName}", + "Phone number could not be hung up" : "El número de teléfono no se pudo colgar", + "Phone number could not be put on hold" : "El número de teléfono no se pudo poner en espera", + "Phone number could not be muted" : "No se pudo silenciar el número de teléfono", + "Phone number could not be unmuted" : "No se pudo de-silenciar el número de teléfono", + "DTMF message could not be sent" : "No se pudo enviar el mensaje DTMF", + "Phone number copied to clipboard" : "Número de teléfono copiado al portapapeles", + "Phone number could not be copied" : "No se pudo copiar el número de teléfono", + "in the lobby" : "en la sala de espera", + "Dial out phone" : "Teléfono para llamadas salientes", + "Hang up phone" : "Colgar el teléfono", + "Move back to lobby" : "Regresar a la sala de espera", + "Move to conversation" : "Mover a la conversación", + "Dial-in PIN" : "PIN de llamada", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Elevar a moderador", + "Resend invitation" : "Reenviar invitación", + "Send call notification" : "Enviar notificación de llamada", + "Dial out phone number" : "Número de teléfono de llamadas salientes", + "Resume call for phone number" : "Continuar llamada a número de teléfono", + "Put phone number on hold" : "Poner número de teléfono en espera", + "Unmute phone number" : "De-silenciar número de teléfono", + "Mute phone number" : "Silenciar número de teléfono", + "Copy phone number" : "Copia número de teléfono", + "Reset custom permissions" : "Restaurar permisos personalizados", + "Grant all permissions" : "Otorgar todos los permisos", + "Remove all permissions" : "Revocar todos los permisos", + "Also ban from this conversation" : "También bloquear de esta conversación", + "Internal note (reason to ban)" : "Nota interna (razón para el bloqueo)", + "Remove" : "Quitar", + "Permissions modified for {displayName}" : "Permisos modificados para {displayName}", + "Add users, groups or teams" : "Añadir usuarios, grupos o equipos", + "Add users or groups" : "Añadir usuarios o grupos", + "Add users or teams" : "Añadir usuarios o equipos", + "Add users" : "Añadir usuarios", + "Add groups or teams" : "Añadir grupos o equipos", + "Add groups" : "Añadir grupos", + "Add teams" : "Añadir equipos", + "Add other sources" : "Añade otros orígenes", + "Add emails" : "Añade correos electrónicos", + "Integrations" : "Integraciones", + "Add federated users" : "Añadir usuarios federados", + "Searching …" : "Buscando …", + "Search for more users" : "Buscar más usuarios", + "You can search or add participants via name, email, or Federated Cloud ID" : "Puedes buscar o añadir participantes por nombre, correo o ID de nube federada", + "Search or add participants" : "Buscar o añadir participantes", + "Invitation was sent to {actorId}" : "Se ha enviado la invitación a {actorId}.", + "An error occurred while adding the participants" : "Se ha producido un error al añadir los participantes", + "A new group conversation with selected participant will be created" : "Se creará una nueva conversación grupal con el participante seleccionado", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir chat", + "You have new unread messages in the chat." : "Tiene nuevos mensajes sin leer en el chat.", + "You have been mentioned in the chat." : "Se le ha mencionado en el chat.", + "Search messages" : "Buscar mensajes", + "Chat" : "Chat", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "Search in {name}" : "Buscar en {name}", + "Threads in {name}" : "Hilos en {name}", + "{actor} in {conversation}" : "{actor} en {conversation}", + "Search messages …" : "Buscar mensajes …", + "Search options" : "Opciones de búsqueda", + "From User" : "Del usuario", + "Since" : "Desde", + "Until" : "Hasta", + "No results found" : "No se encontraron resultados", + "Load more results" : "Cargar más resultados", + "Recent threads" : "Hilos recientes", + "Projects" : "Proyectos", + "No shared items" : "No hay elementos compartidos", + "Thread notifications" : "Notificaciones para hilos", + "Thread actions" : "Acciones del hilo", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enlace a una conversación", + "No open conversations found" : "No se encontraron conversaciones abiertas", + "Either there are no open conversations or you joined all of them." : "O bien no existen conversaciones abiertas, o, se unió a todas.", + "Check spelling or use complete words." : "Chequee la ortografía o utilice palabras completas.", + "Search conversations or users" : "Buscar conversaciones o usuarios", + "Select conversation" : "Selecciona conversación", + "Number length is not valid" : "La longitud del número no es válida", + "Region code is not valid" : "El código de región no es válido", + "Number length is too short" : "El número es demasiado corto", + "Number length is too long" : "El número es demasiado largo", + "Number is not valid" : "El número no es válido", + "Phone numbers" : "Números de teléfono", + "Display name: {name}" : "Nombre mostrado: {name}", + "Edit display name" : "Editar nombre mostrado", + "Display name (required)" : "Nombre a mostrar (requerido)", + "Save name" : "Guardar nombre", + "Error while setting personal setting" : "Error al guardar sus ajustes personales", + "Error while saving sounds setting" : "Error al guardar la configuración de sonidos", + "Play sounds when participants join or leave a call" : "Reproducir sonidos cuando los participantes se unen o abandonan una llamada", + "Notification settings" : "Configuraciones de notificación", + "Default language" : "Idioma predeterminado", + "Select location for attachments" : "Seleccionar ubicación para los adjuntos", + "Error while setting attachment folder" : "Error al fijar la carpeta para los archivos adjuntos", + "Error while setting read status privacy" : "Error al ajustar la privacidad de la confirmación", + "Error while setting typing status privacy" : "Error al ajustar la privacidad del estado de escritura", + "Error while setting default media state" : "Error al guardar el estado predeterminado de sus dispositivos", + "Privacy" : "Privacidad", + "Attachments folder" : "Carpeta de adjuntos", + "Toggle full screen" : "Cambiar a pantalla completa", + "Search" : "Buscar", + "Focus the chat input" : "Foco en la entrada del chat", + "Unfocus the chat input to use shortcuts" : "Quitar el foco de la entrada del chat para usar atajos", + "Edit your last message" : "Editar su último mensaje", + "Shortcuts while in a call" : "Atajos durante una llamada", + "Camera on and off" : "Encendido y apagado de la cámara", + "Microphone on and off" : "Micrófono encendido y apagado", + "Raise or lower hand" : "Levantar o bajar la mano", + "Push to talk or push to mute" : "Pulsar para hablar o para silenciar", + "Zoom-in / zoom-out a screen share" : "Acercar / Alejar una pantalla compartida", + "Mouse wheel" : "Rueda del ratón", + "Start call silently" : "Iniciar llamada en silencio", + "Start call" : "Comenzar llamada", + "End call" : "Finalizar llamada", + "This call has just ended" : "Esta llamada acaba de finalizar", + "You will be able to join the call only after a moderator starts it." : "Podrás unirte a la llamada cuando la inicie un moderador.", + "End call for everyone" : "Finalizar llamada para todos", + "Starting the recording" : "Empezar la grabación", + "Recording" : "Grabando", + "The call has been running for one hour." : "La llamada ha estado activa por una hora.", + "Cancel recording start" : "Cancelar el inicio de la grabación", + "Stop recording" : "Detener grabación", + "Send a reaction" : "Enviar una reacción", + "React with {reaction}" : "Reaccionar con {reaction}", + "All tasks done!" : "¡Todas las tareas han sido completadas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarea","{done} de %n tareas","{done} de %n tareas"], + "Add participants to this call" : "Añadir participantes a esta llamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante en la llamada","%n participantes en la llamada","%n participantes en la llamada"], + "Scheduled messages" : "Mensajes programados", + "You are not allowed to enable screensharing" : "No está autorizado a activar el uso compartido de la pantalla", + "No screensharing" : "Sin compartición de pantalla", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Activar compartir pantalla", + "Bad sent video and screen quality." : "Mala calidad de vídeo y pantalla compartida.", + "Bad sent screen quality." : "Mala calidad de pantalla compartida.", + "Bad sent video quality." : "Mala calidad de vídeo.", + "Bad sent audio, video and screen quality." : "Mala calidad de audio, vídeo y pantalla compartida.", + "Bad sent audio and screen quality." : "Mala calidad de audio y pantalla compartida.", + "Bad sent audio and video quality." : "Mala calidad de audio y vídeo.", + "Bad sent audio quality." : "Mala calidad de audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Su conexión a internet o su ordenador están saturados y puede que otros participantes no vean su pantalla. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Disable background blur" : "Deshabilitar el desenfoque del fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Su conexión a internet o su ordenador están saturados y puede que otros participantes no vean su pantalla. Para mejorar la situación, intente desactivar su vídeo mientras esté compartiendo su pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan ver tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tu conexión de internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan verte.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle o verle. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte ni verte. Para mejorar la situación, prueba a desactivar el vídeo mientras compartas tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle y verle. Para mejorar esta situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Disable screenshare" : "Deshabilitar compartir pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle o verle. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte ni verte. Para mejorar la situación, prueba a desactivar tu cámara.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte.", + "Screen sharing is not supported by your browser." : "Tu navegador no admite compartir pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página sea cargada a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página sea cargada a través de HTTPS.", + "An error occurred while starting screensharing." : "Ocurrió un error al inciar el compartir pantalla", + "Select virtual background" : "Seleccione fondo virtual", + "Show your screen" : "Muestre su pantalla", + "Stop screensharing" : "Detenga el compartir pantalla", + "Mute others" : "Silenciar a los demás", + "Start recording" : "Empezar a grabar", + "Set up breakout rooms" : "Configurar salas de grupos", + "Download attendance list" : "Descargar lista de asistentes", + "Open Calendar" : "Abrir Calendario", + "Remove participant {name}" : "Quitar participante {name}", + "Would you like to delete this conversation?" : "¿Desea eliminar esta conversación?", + "Are you sure you want to delete this conversation?" : "¿Está seguro que quiere eliminar esta conversación?", + "Delete now" : "Eliminar ahora", + "Keep" : "Conservar", + "Open dialpad" : "Abrir marcador", + "Select a region" : "Seleccione una región", + "Local time: {time}" : "Hora local: {time}", + "Search …" : "Buscar …", + "Message without mention" : "Mensaje sin mencionar", + "Mention myself" : "Mencionarme a mí mismo", + "Mention everyone" : "Mencionar a todos", + "Select a conversation" : "Seleccione una conversación", + "Select a mode" : "Seleccione un modo", + "You do not have permissions to access this conversation." : "No tiene permiso para acceder a esta conversación.", + "Join a different conversation or start a new one." : "Únase a otra conversación o inicie una nueva.", + "The conversation does not exist" : "La conversación no existe", + "Join a conversation or start a new one!" : "¡Únete a una conversación o inicia una nueva!", + "Duplicate session" : "Sesión duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Creando y uniéndose a una conversación con \"{userid}\"", + "Join a conversation or start a new one" : "Únete a una conversación o empieza una nueva", + "Error while joining the conversation" : "Error mientras se unía a la conversación", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contraseña de usuario", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Omitir verificación TLS", + "Matrix server URL" : "URL del servidor de Matrix", + "User" : "Usuario", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nombre del equipo", + "Channel name" : "Nombre del canal", + "Rocket.Chat server URL" : "URL del servidor de RocketChat", + "User name or email address" : "Nombre de usuario o dirección de email", + "Rocket.Chat channel" : "Canal de Rocket.Chat", + "Zulip server URL" : "URL del servidor Zulip", + "Bot user name" : "Nombre de usuario del bot", + "Bot API key" : "Clave de API del bot", + "Zulip channel" : "Canal de Zulip", + "API token" : "Token de API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "Nombre o ID del servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID del canal (con el prefijo \"ID:\") o nombre", + "Channel" : "Canal", + "Login" : "Iniciar sesión", + "Chat ID" : "ID del chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL del servidor IRC (p. ej., chat.freenode.net:6667)", + "Nickname" : "Alias", + "Connection password" : "Contraseña de la conexión", + "IRC channel" : "Canal IRC", + "Channel password" : "Contraseña del canal", + "NickServ nickname" : "Alias de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID de inquilino", + "Client ID" : "ID de cliente", + "Team ID" : "ID del equipo", + "Thread ID" : "ID del hilo", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Medios", + "Polls" : "Encuestas", + "Deck cards" : "Tarjetas Deck", + "Voice messages" : "Mensajes de voz", + "Locations" : "Ubicaciones", + "Call recordings" : "Llamadas grabadas", + "Audio" : "Audio", + "Show all media" : "Mostrar todos los medios", + "Show all files" : "Mostrar todos los archivos", + "Show all polls" : "Mostrar todas las encuestas", + "Show all deck cards" : "Mostrar todas las tarjetas deck", + "Show all voice messages" : "Mostrar todos los mensajes de voz", + "Show all locations" : "Mostrar todas las ubicaciones", + "Show all call recordings" : "Mostrar todas las llamadas grabadas", + "Show all audio" : "Mostrar todo el audio", + "Show all other" : "Mostrar todo lo demás", + "Follow conversation settings" : "Seguir los ajustes de la conversación", + "Group" : "Grupo", + "Team" : "Equipo", + "You reconnected to the call" : "Ud. re-conectó la llamada", + "{actor} reconnected to the call" : "{actor} se ha re-conectado a la llamada", + "You added {user0} and {user1}" : "Añadió a {user0} y {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Añadió a {user0}, {user1} y a %n participante más","Añadió a {user0}, {user1} y a %n participantes más","Añadió a {user0}, {user1} y a %n participantes más"], + "An administrator added you and {user0}" : "Un administrador lo ha añadido a Ud. y a {user0}", + "{actor} added you and {user0}" : "{actor} lo ha añadido a Ud. y a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrador lo ha añadido a Ud., {user0} y a %n participante más","Un administrador lo ha añadido a Ud., {user0} y a %n participantes más","Un administrador lo ha añadido a Ud., {user0} y a %n participantes más"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lo ha añadido a Ud., {user0} y a %n participante más","{actor} lo ha añadido a Ud., {user0} y a %n participantes más","{actor} lo ha añadido a Ud., {user0} y a %n participantes más"], + "An administrator added {user0} and {user1}" : "Un administrador añadió a {user0} y a {user1}", + "{actor} added {user0} and {user1}" : "{actor} añadió a {user0} y a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrador ha añadido a {user0}, {user1} y a %n participante más","Un administrador ha añadido a {user0}, {user1} y a %n participantes más","Un administrador ha añadido a {user0}, {user1} y a %n participantes más"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha añadido a {user0}, {user1} y a %n participante más","{actor} ha añadido a {user0}, {user1} y a %n participantes más","{actor} ha añadido a {user0}, {user1} y a %n participantes más"], + "You removed {user0} and {user1}" : "Ud. eliminó a {user0} y {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Ud. eliminó a {user0} y {user1} y a %n participante más","Ud. eliminó a {user0} y {user1} y a %n participantes más","Ud. eliminó a {user0} y {user1} y a %n participantes más"], + "An administrator removed you and {user0}" : "Un administrador lo eliminó a Ud. y a {user0}", + "{actor} removed you and {user0}" : "{actor} lo eliminó a Ud. y a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrador lo ha eliminado a Ud., a {user0} y a %n participante más","Un administrador lo ha eliminado a Ud., a {user0} y a %n participantes más","Un administrador lo ha eliminado a Ud., a {user0} y a %n participantes más"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} lo ha eliminado a Ud., a {user0} y a %n participante más","{actor} lo ha eliminado a Ud., a {user0} y a %n participantes más","{actor} lo ha eliminado a Ud., a {user0} y a %n participantes más"], + "An administrator removed {user0} and {user1}" : "Un administrador eliminó a {user0} y a {user1}", + "{actor} removed {user0} and {user1}" : "{actor0} eliminó a {user0} y a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrador ha eliminado a {user0}, {user1} y a %n participante más","Un administrador ha eliminado a {user0}, {user1} y a %n participantes más","Un administrador ha eliminado a {user0}, {user1} y a %n participantes más"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eliminó a {user0}, {user1} y a %n participante más","{actor} eliminó a {user0}, {user1} y a %n participantes más","{actor} eliminó a {user0}, {user1} y a %n participantes más"], + "You and {user0} joined the call" : "Ud. y {user0} se unieron a la llamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ud., {user0} y %n participante más se ha unido a la llamada","Ud., {user0} y %n participantes más se han unido a la llamada","Ud., {user0} y %n participantes más se han unido a la llamada"], + "{user0} and {user1} joined the call" : "{user0} y {user1} se unieron a la llamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} y %n participante más se unieron a la llamada","{user0}, {user1} y %n participantes más se unieron a la llamada","{user0}, {user1} y %n participantes más se unieron a la llamada"], + "You and {user0} left the call" : "Ud. y {user0} abandonaron la llamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ud., {user0} y %n participante más abandonaron la llamada","Ud., {user0} y %n participantes más abandonaron la llamada","Ud., {user0} y %n participantes más abandonaron la llamada"], + "{user0} and {user1} left the call" : "{user0} y {user1} abandonaron a la llamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} y %n participante más abandonaron la llamada","{user0}, {user1} y %n participantes más abandonaron la llamada","{user0}, {user1} y %n participantes más abandonaron la llamada"], + "You promoted {user0} and {user1} to moderators" : "Ud. ha ascendido a {user0} y a {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Ud. ha ascendido a {user0}, {user1} y a %n participante más a moderadores","Ud. ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","Ud. ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Un administrador lo ha ascendido a Ud. y a {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} lo ha ascendido a Ud. y a {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrador lo ha ascendido a Ud., {user0} y a %n participante más a moderadores","Un administrador lo ha ascendido a Ud., {user0} y a %n participantes más a moderadores","Un administrador lo ha ascendido a Ud., {user0} y a %n participantes más a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} le ha ascendido a Ud., {user0} y a %n participante más a moderadores","{actor} le ha ascendido a Ud., {user0} y a %n participantes más a moderadores","{actor} le ha ascendido a Ud., {user0} y a %n participantes más a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrador ha ascendido a {user0} y a {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha ascendido a {user0} y a {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrador ha ascendido a {user0}, {user1} y a %n participante más a moderadores","Un administrador ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","Un administrador ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha ascendido a {user0}, {user1} y a %n participante más a moderadores","{actor} ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","{actor} ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Ud. degradó a {user0} y a {user1} de su estatus de moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Ud. degradó a {user0}, {user1} y a %n participante de su estatus de moderadores","Ud. degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores","Ud. degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "An administrator demoted you and {user0} from moderators" : "Un administrador lo ha degradado a Ud. y a {user0} de su estatus de moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} lo ha degradado a Ud. y a {user0} de su estatus de moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrador lo ha degradado a Ud., {user0} y %n participante más de su estatus de moderadores","Un administrador lo ha degradado a Ud., {user0} y %n participantes más de su estatus de moderadores","Un administrador lo ha degradado a Ud., {user0} y %n participantes más de su estatus de moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} lo ha degradado a Ud., {user0} y a %n participante de su estatus de moderadores","{actor} lo ha degradado a Ud., {user0} y a %n participantes más de su estatus de moderadores","{actor} lo ha degradado a Ud., {user0} y a %n participantes más de su estatus de moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrador degradó a {user0} y a {user1} de su estatus de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degradó a {user0} y a {user1} de su estatus de moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrador degradó a {user0}, {user1} y a %n participante más de su estatus de moderadores","Un administrador degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores","Un administrador degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha degradado a {user0}, {user1} y a %n participante más de su estatus de moderadores","{actor} ha degradado a {user0}, {user1} y a %n participantes más de su estatus de moderadores","{actor} ha degradado a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "You:" : "Usted:", + "You: {lastMessage}" : "Tú: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editado por ud.)", + "(edited by a deleted user)" : "(fue editado por un usuario eliminado)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Estás intentando unirte a una conversación mientras tienes activa una sesión en otra ventana o dispositivo. Nextcloud Talk no admite esto en la actualidad. ¿Qué prefieres hacer?", + "Leave this page" : "Abandonar esta página", + "Join here" : "Unirte aquí", + "Deck card has been posted to {conversation}" : "La tarjeta Deck del tablero ha sido publicada a {conversation}", + "An error occurred while posting deck card to conversation" : "Se ha producido un error al publicar la tarjeta de Deck en la conversación", + "Post to a conversation" : "Publicar en una conversación", + "Post to conversation" : "Publicar en la conversación", + "The recording failed. Please contact your administrator." : "La grabación falló. Por favor, contacte a su administrador.", + "Location has been posted to {conversation}" : "La ubicación se ha publicado en {conversation}", + "An error occurred while posting location to conversation" : "Se ha producido un error al publicar la ubicación en la conversación", + "Share to a conversation" : "Compartir en una conversación", + "Share to conversation" : "Compartir en la conversación", + "In conversation" : "En la conversación", + "Search in conversation: {conversation}" : "Buscar en la conversación: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Sus solicitudes están siendo limitadas debido a la protección contra ataques de fuerza bruta", + "Error while clearing conversation history" : "Error al vaciar el historial de conversaciones", + "Error occurred while allowing guests" : "Se ha producido un error al permitir invitados", + "Error occurred while disallowing guests" : "Se ha producido un error al prohibir invitados", + "Error occurred when restricting the conversation to moderator" : "Se ha producido un error al restringir la conversación a los moderadores", + "Error occurred when opening the conversation to everyone" : "Se ha producido un error al abrir la conversación a todo el mundo", + "Conversation password has been saved" : "Se ha guardado la contraseña de la conversación", + "Conversation password has been removed" : "Se ha eliminado la contraseña de la conversación", + "Error occurred while saving conversation password" : "Se ha producido un error al guardar la contraseña", + "Call recording is starting." : "La grabación de la llamada está comenzando.", + "Call recording stopped while starting." : "La grabación de la llamada se detuvo mientras comenzaba.", + "Call recording stopped. You will be notified once the recording is available." : "Se detuvo la grabación de la llamada. Se le notificará cuando la grabación esté disponible.", + "Conversation picture set" : "Se ha establecido la imagen de la conversación", + "Conversation picture deleted" : "Se eliminó la imagen de la conversación", + "Could not delete the conversation picture" : "No fue posible eliminar la imagen de la conversación", + "Could not remove the automatic expiration" : "No se pudo borrar la expiración automática", + "Could not post message: {errorMessage}" : "No se ha podido publicar el mensaje: {errorMessage}", + "Participant is banned successfully" : "El participante fue bloqueado exitosamente", + "Error while banning the participant" : "Error al bloquear al participante", + "An error occurred while fetching the participants" : "Ha ocurrido un error al recuperar los participantes", + "Could not send invitation to {actorId}" : "No se ha enviado la invitación a {actorId}.", + "Invitations sent" : "Invitaciones enviadas", + "Error occurred when sending invitations" : "Se ha producido un error al enviar las invitaciones", + "Failed to join the conversation." : "Error al unirse a la conversación.", + "An error occurred while creating breakout rooms" : "Ocurrió un error mientras se creaban las salas de grupos", + "An error occurred while re-ordering the attendees" : "Ocurrió un error mientras se reordenaban los asistentes", + "An error occurred while deleting breakout rooms" : "Ocurrió un error mientras se eliminaban las salas de grupos", + "An error occurred while starting breakout rooms" : "Ocurrió un error mientras se iniciaban las salas de grupos", + "An error occurred while stopping breakout rooms" : "Ocurrió un error mientras se detenían las salas de grupos", + "An error occurred while sending a message to the breakout rooms" : "Ocurrió un error mientras se enviaba un mensaje a las salas de grupos", + "An error occurred while requesting assistance" : "Ocurrió un error mientras se solicitaba asistencia", + "An error occurred while resetting the request for assistance" : "Ocurrió un error mientras se restablecía la solicitud de asistencia", + "An error occurred while joining breakout room" : "Ha ocurrido un error al unirse a la sala de grupos", + "Failed to rename the thread" : "Fallo al renombrar el hilo", + "Error fetching upcoming events" : "Error al obtener los próximos eventos", + "Error fetching upcoming reminders" : "Error al obtener las próximas notificaciones", + "An error occurred while accepting an invitation" : "Ocurrió un error mientras se aceptaba una invitación", + "An error occurred while rejecting an invitation" : "Ocurrió un error mientras se rechazaba una invitación", + "{guest} (guest)" : "{guest} (invitado)", + "Poll draft has been saved" : "El borrador de la encuesta ha sido guardado", + "An error occurred while saving the draft" : "Ha ocurrido un error al guardar el borrador", + "An error occurred while submitting your vote" : "Ocurrió un error mientras se enviaba su voto", + "An error occurred while ending the poll" : "Ocurrió un error mientras se finalizaba la encuesta", + "An error occurred while deleting the poll draft" : "Ha ocurrido un error mientras se eliminaba el borrador de la encuesta", + "Poll \"{name}\" was created by {user}. Click to vote" : "La encuesta \"{name}\" fue creada por {user}. Haga clic para votar", + "Failed to add reaction" : "Fallo al añadir reacción", + "Failed to remove reaction" : "Fallo al quitar la reacción", + "Error while uploading file \"{fileName}\"" : "Error al subir el archivo \"{fileName}\".", + "Not enough free space to upload file \"{fileName}\"" : "No hay espacio libre suficiente para subir el archivo \"{fileName}\"", + "You are not allowed to share files" : "No estás autorizado a compartir archivos", + "Error while sharing file" : "Error al compartir archivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Este navegador no es completamente compatible con Nextcloud Talk. Por favor, usa la última versión de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n horas","En %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos","%n minutos"], + "In {hours} and {minutes}" : "En {hours} y {minutes}", + "_In %n minute_::_In %n minutes_" : ["En %n minuto","En %n minutos","En %n minutos"], + "Later today – {timeLocale}" : "Hoy, más tarde – {timeLocale}", + "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", + "This weekend – {timeLocale}" : "Este fin de semana – {timeLocale}", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Message link copied to clipboard" : "Link del mensaje copiado al portapapeles.", + "Conversation link copied to clipboard" : "Enlace de la conversación copiado al portapapeles.", + "The link could not be copied" : "No se pudo copiar el enlace", + "Error while parsing a PROPFIND error" : "Error al analizar un error PROPFIND", + "Sending signaling message has failed" : "El envío del mensaje de señalización falló", + "Lost connection to signaling server. Trying to reconnect." : "Se ha perdido la conexión con el servidor de señalización. Intentando reconectar.", + "Lost connection to signaling server." : "Se ha perdido la conexión al servidor de señalización.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de señalización configurado debe ser actualizado para que sea compatible con esta versión de Talk. Por favor, contacte a su administrador.", + "Please restart the app." : "Por favor, reinicie la aplicación.", + "Please reload the page." : "Por favor, recargue la página.", + "Please try to restart the app." : "Por favor, intente reiniciar la aplicación.", + "Please try to reload the page." : "Por favor, intente recargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Altavoz {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que estabas hablando con el micrófono silenciado, por favor desactiva el modo silencio para que los demás te oigan.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No se ha podido establecer conexión con por lo menos un participante. En este caso, puede ser necesario un servidor TURN. Por favor, pregunte a su administrador para configurar uno, siguiendo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Esto está tomando más tiempo de lo esperado. ¿Se han permitido (o rechazado) los permisos multimedia? Si es así, reinicie su navegador por favor, ya que el audio y el vídeo están fallando.", + "Access to microphone & camera is only possible with HTTPS" : "Acceso a micrófono y cámara solo es posible con HTTPS", + "Please move your setup to HTTPS" : "Por favor, cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "Acceso a micrófono y cámara fue rechazado", + "WebRTC is not supported in your browser" : "Tu navegador no es compatible con WebRTC.", + "Please use a different browser like Firefox or Chrome" : "Por favor, usa un navegador diferente, como Firefox o Chrome.", + "Error while accessing microphone & camera" : "Error al acceder al micrófono y la cámara.", + "%s Talk on your mobile devices" : "%s Talk en tus dispositivos móviles", + "Join conversations at any time, anywhere, on any device." : "Únase a conversaciones en cualquier momento, en cualquier lugar, en cualquier dispositivo.", + "Android app" : "App Android", + "iOS app" : "App iOS", + "__language_name__" : "Español (España)", + "Webhook Demo" : "Demostración de Webhooks", + "Call summary (%s)" : "Resumen de la llamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "El bot de resumen de llamada publica un mensaje de visión general listando a todos los participantes y delineando tareas", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Informes", + "Decisions" : "Decisiones", + "Agenda" : "Agenda", + "Call summary" : "Resumen de la llamada", + "Call summary - {title}" : "Resumen de la llamada - {title}", + "Talk conversation for event" : "Conversación de Talk para el evento", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push se encuentra instalado, esto mejorará el rendimiento de los clientes de escritorio.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push}no se encuentra instalado, esto podría conllevar a problemas de rendimiento cuando se utilizan clientes de escritorio.", + "Next meeting" : "Siguiente reunión", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Programe una reunión desde su calendario. Una conversación de Talk deberá ser puesta como ubicación para que sea mostrada aquí", + "Join conversations from remote Nextcloud servers" : "Unirse a conversaciones de servidores Nextcloud remotos", + "Your default media state has been saved" : "Se ha guardado el estado predeterminado de sus dispositivos", + "Set reminder for later today" : "Establecer recordatorio para hoy, más tarde", + "Set reminder for tomorrow" : "Establecer recordatorio para mañana", + "Set reminder for this weekend" : "Establecer recordatorio para este fin de semana", + "Set reminder for next week" : "Establecer recordatorio para la semana que viene", + "Generate summary" : "Generar resumen", + "Open poll • You voted already" : "Encuesta abierta ・ Ya ha votado", + "Open poll • Click to vote" : "Encuesta abierta ・ Haga clic para votar", + "Poll • Ended" : "Votación ・ Finalizada", + "Talk recording from {time} ({conversation})" : "Grabación de la conversación desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados de la encuesta • %n voto","Resultados de la encuesta • %n votos","Resultados de la encuesta • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Encuesta abierta ・ %n voto","Encuesta abierta ・ %n votos","Encuesta abierta ・ %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Se han guardado tus ajustes de privacidad", + "Your personal setting has been saved" : "Sus ajustes personales se han guardado", + "Failed to save sounds setting" : "Fallo al guardar la configuración de sonidos", + "Sounds setting saved" : "Confuguración de sonidos guardada", + "Nextcloud Talk was updated, you cannot start or join a call." : "Se ha actualizado Nextcloud Talk, no puede iniciar o unirse a una llamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Te has unido a la conversación en otra ventana o dispositivo. Nextcloud Talk no soporta esto en la actualidad, por lo que se ha cerrado esta sesión.", + "Nextcloud Talk was updated." : "Se ha actualizado Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud está en modo mantenimiento.", + "Nextcloud Talk Federation was updated." : "Se ha actualizado la federación de Nextcloud Talk.", + "Enable live translation" : "Activar traducción en vivo" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es.json b/l10n/es.json new file mode 100644 index 0000000..6e235bc --- /dev/null +++ b/l10n/es.json @@ -0,0 +1,2142 @@ +{ "translations": { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Has participado en una llamada con {user1}", + "_%n guest_::_%n guests_" : ["%n invitado","%n invitados","%n invitados"], + "You attended a call with {user1} and {user2}" : "Has participado en una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Has participado en una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Has participado en una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Has participado en una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","%n otros","%n otros"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a una conversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Talk", + "Guest" : "Invitado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## ¡Le damos la bienvenida a Nextcloud Talk!\nEn esta convesación se le informará sobre las nuevas características disponibles en Nextcloud Talk.", + "## New in Talk %s" : "## Nuevo en Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : " Se puede usar Microsoft Edge y Safari para participar en llamadas de audio y de vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "* Las conversaciones individuales ahora son persistentes y ya no se pueden convertirse en conversaciones de grupo por accidente. Además, cuando uno de los participantes abandone la conversación, esta ya no se borrará automáticamente. Solo si ambos participantes se van, la conversación se borra del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes enviar una notificación a todos los participantes escribiendo \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con la tecla \"flecha hacia arriba\" puedes volver a enviar el último mensaje", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Ahora, Talk dispone de comandos. Envia \"/help\" como un mensaje de chat para comprobar si tu administrador ha configurado alguno", + "- With projects you can create quick links between conversations, files and other items" : "- Con los proyectos, puedes crear enlaces rápidos entre conversaciones, archivos y otros objetos", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a los invitados en la conversación", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Ahora, las conversaciones pueden tener una sala de espera. Esto permite a los moderadores unirse al chat y llamar inmediatamente para preparar la reunión, mientras que los usuarios y los invitados tienen que esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ahora puedes responder directamente a los mensajes, dando a los usuarios más contexto sobre el tema de tu mensaje", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La búsqueda por conversaciones y participantes también filtrará tus conversaciones existentes, haciendo mucho más fácil encontrar conversaciones previas", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Puedes añadir grupos personalizados de usuarios a las conversaciones cuando la app de Círculos está instalada", + "- Check out the new grid and call view" : "- Una nueva cuadrícula y vista de llamadas.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ya puedes subir y arrastrar archivos desde tu dispositivo al chat.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Los archivos compartidos se abrirán ahora dentro del chat con el visor que corresponda.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ahora puedes buscar chats y mensajes en la búsqueda unificada de la barra superior.", + "- Spice up your messages with emojis from the emoji picker" : "- Dales sabor a tus mensajes con emojis desde el selector.", + "- You can now change your camera and microphone while being in a call" : "- Ahora puedes cambiar la cámara y el micrófono mientras estás en una llamada.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- De un cierto contexto a la conversación con una descripción y ábrela para que los usuarios registrados puedan encontrarla y unirse ellos mismos", + "- See a read status and send failed messages again" : "- Ver un estado de lectura y enviar nuevamente los mensajes fallidos ", + "- Raise your hand in a call with the R key" : "- Levante la mano en una llamada con la tecla R", + "- Join the same conversation and call from multiple devices" : "- Únase a la misma conversación y llamada desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envíe mensajes de voz, comparta su ubicación o sus datos de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Añada grupos a una conversación y los nuevos miembros del grupo se añadirán automáticamente como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Una previsualización de su audio y vídeo se mostrará antes de unirse a la llamada", + "- You can now blur your background in the newly designed call view" : "- Ahora puede desenfocar su fondo usando el nuevo diseño de la vista de llamada", + "- Moderators can now assign general and individual permissions to participants" : "- Ahora los moderadores pueden asignar permisos generales e individuales a los participantes", + "- You can now react to chat messages" : "- Ahora puede reaccionar a los mensajes del chat", + "- In the sidebar you can now find an overview of the latest shared items" : "- En la barra lateral ahora podrá encontrar una vista general de los últimos artículos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilice una encuesta para recolectar las opiniones o para acordar una fecha", + "- Configure an expiration time for chat messages" : "- Configure un tiempo de expiración para los mensajes de chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie llamadas sin notificar a otros en conversaciones numerosas. Puede enviar notificaciones de llamada individuales una vez que la llamada ha iniciado.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Enviar mensajes de chat sin notificar a los recipientes en caso de que no sea urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Los emojis pueden ser autocompletados escribiendo \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enlace varios ítems utilizando el nuevo selector inteligente escribiendo una \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Ahora, los moderadores pueden crear salas de grupos (requiere el motor de alto rendimiento)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Las llamadas ahora pueden ser grabadas (requiere el motor de alto rendimiento)", + "- Conversations can now have an avatar or emoji as icon" : "- Ahora, las conversaciones pueden tener como icono un avatar o emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Están disponibles ahora los fondos virtuales, además de los fondos desenfocados en las llamadas de video", + "- Reactions are now available during calls" : "- Las reacciones están ahora disponibles durante las llamadas", + "- Typing indicators show which users are currently typing a message" : "- Los indicadores de escritura muestran que usuarios están escribiendo un mensaje", + "- Groups can now be mentioned in chats" : "- Los grupos ahora pueden ser mencionados en los chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Las grabaciones de llamadas serán automáticamente transcritas si una app que provea transcripciones está registrada", + "- Chat messages can be translated if a translation provider app is registered" : "- Los mensajes de chat pueden ser traducidos si una app que provea transcripciones está registrada", + "- **Markdown** can now be used in _chat_ messages" : "- Ahora se puede usar **Markdown** en mensajes de _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Ya se encuentran disponibles Webhooks para implementar bots. Vea la documentación para más información https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Establecer un recordatorio en un mensaje de chat para que sea notificado nuevamente más tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utiliza la conversación **Nota personal** para tomar notas y compartir información entre tus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- Las leyendas permiten enviar un mensaje con un archivo al mismo tiempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- El video del orador ahora es visible mientras se comparte la pantalla y las reacciones de la llamada están animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Los mensajes pueden ser editados ahora por los administradores y moderadores con sesión iniciada por 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Los borradores de mensajes no enviados se guardan ahora en su navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Se puede chatear por texto de forma federada con otros servidores de Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Los moderadores ahora pueden bloquear tanto a cuentas como a invitados de volver a unirse a una conversación", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Las llamadas entrantes de eventos de calendario enlazados y sustituciones de fuera de la oficina ahora se muestran en las conversaciones", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Las llamadas ahora se pueden hacer de forma federada con otros servidores de Talk (requiere el motor de alto rendimiento)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentando el cliente de escritorio Nextcloud Talk para Windows, macOS y Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resuma grabaciones de llamadas y mensajes de chat no leídos con el Asistente Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reuniones mejoradas con reconocimiento de invitados a través de su dirección de correo, importación de listas de participantes, borradores para encuestas y la posibilidad de descargar la lista de participantes de las llamadas", + "- Archive conversations to stay focused" : "- Archive conversaciones para mantenerse enfocado", + "- Schedule a meeting into your calendar from within a conversation" : "- Agendar reuniones dentro de su calendario directamente desde una conversación", + "- Search for messages of the current conversation directly in the right sidebar" : "- Buscar mensajes de la conversación actual directamente en la barra lateral derecha", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vea más conversaciones de un vistazo con la nueva lista compacta (habilitar en los ajustes de Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Las conversaciones de las Reuniones ahora sincronizan el título y la descripción desde el calendario y están ocultas con un filtro de búsqueda hasta que están por comenzar", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Maque las conversaciones como sensibles en los ajustes de notificaciones, de manera de esconder el contenido del mensaje de la lista de conversaciones y las notificaciones", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para recibir notificaciones push durante el estado \"No molestar\", marque las conversaciones como importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Añada a otros participantes en una llamada uno a uno para crear una nueva llamada grupal al vuelo", + "- Use threads to keep your chat and discussions organized" : "- Use hilos para mantener sus chats y discusiones organizadas", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Las transcripciones en vivo están ahora disponibles durante la llamada (requiere la ExApp de transcripción en vivo y el backend de alto rendimiento)", + "- Moderators can now pin messages so they are kept at the top" : "- Los moderadores ahora pueden fijar mensajes para que se mantengan en la parte superior", + "- Schedule a message to send it at a later time" : "- Programa un mensaje para enviarlo después", + "_All %n participant_::_All %n participants_" : ["%n participante","Todos los %n participantes","Todos los %n participantes"], + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "Reaction deleted by author" : "Reacción borrada por el autor", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Has creado la conversación", + "System created the conversation" : "El sistema creó la conversación", + "An administrator created the conversation" : "Un administrador ha creado la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha renombrado la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Has renombrado la conversación de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador ha cambiado el nombre de la conversación «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} estableció la descripción", + "You set the description" : "Usted estableció la descripción", + "An administrator set the description" : "Un administrador estableció la descripción", + "{actor} removed the description" : "{actor} ha eliminado la descripción", + "You removed the description" : "Has eliminado la descripción", + "An administrator removed the description" : "Un administrador ha eliminado la descripción", + "You started a silent call" : "Ud. inició una llamada silenciosa", + "Outgoing silent call" : "Llamada saliente silenciosa", + "{actor} started a silent call" : "{actor} inició una llamada silenciosa", + "Incoming silent call" : "Llamada entrante silenciosa", + "You started a call" : "Has iniciado una llamada", + "Outgoing call" : "Llamada saliente", + "{actor} started a call" : "{actor} ha iniciado una llamada", + "Incoming call" : "Llamada entrante", + "{actor} joined the call" : "{actor} se ha unido a la llamada", + "You joined the call" : "Te has unido a la llamada", + "{actor} left the call" : "{actor} ha abandonado la llamada", + "You left the call" : "Has abandonado la llamada", + "{actor} unlocked the conversation" : "{actor} ha desbloqueado la conversación", + "You unlocked the conversation" : "Has desbloqueado la conversación", + "An administrator unlocked the conversation" : "Un administrador ha desbloqueado la conversación", + "{actor} locked the conversation" : "{actor} ha bloqueado la conversación", + "You locked the conversation" : "Has bloqueado la conversación", + "An administrator locked the conversation" : "Un administrador ha bloqueado la conversación", + "{actor} limited the conversation to the current participants" : "{actor} limitó la conversación a los participantes actuales", + "You limited the conversation to the current participants" : "Has limitado la conversación a los participantes actuales", + "An administrator limited the conversation to the current participants" : "Un administrador limitó la conversación a los participantes actuales", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a los usuarios registrados", + "You opened the conversation to registered users" : "Has abierto la conversación a los usuarios registrados", + "An administrator opened the conversation to registered users" : "Un administrador abrió la conversación a los usuarios registrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abrió la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "You opened the conversation to registered users and users created with the Guests app" : "Ha abierto la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrador ha abierto la conversación a usuarios registrados y para aquellos usuarios creados con la aplicación de Invitados", + "The conversation is now open to everyone" : "La conversación ahora está abierta para todo el mundo", + "{actor} opened the conversation to everyone" : "{actor} ha abierto la conversación para todos", + "You opened the conversation to everyone" : "Has abierto la conversación para todo el mundo", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación únicamente a los moderadores", + "You restricted the conversation to moderators" : "Restringiste la conversación únicamente a los moderadores", + "{actor} started breakout rooms" : "{actor} inició las salas de grupos", + "You started breakout rooms" : "Ud. inició las salas de grupos", + "{actor} stopped breakout rooms" : "{actor} detuvo las salas de grupos", + "You stopped breakout rooms" : "Ud. detuvo las salas de grupos", + "{actor} allowed guests" : "{actor} ha permitido invitados", + "You allowed guests" : "Has permitido invitados", + "An administrator allowed guests" : "Un administrador ha permitido invitados", + "{actor} disallowed guests" : "{actor} ha prohibido invitados", + "You disallowed guests" : "Has prohibido invitados", + "An administrator disallowed guests" : "Un administrador ha prohibido invitados", + "{actor} set a password" : "{actor} ha establecido una contraseña", + "You set a password" : "Has establecido una contraseña", + "An administrator set a password" : "Un administrador ha establecido una contraseña", + "{actor} removed the password" : "{actor} ha eliminado la contraseña", + "You removed the password" : "Has eliminado la contraseña", + "An administrator removed the password" : "Un administrador ha eliminado la contraseña", + "{actor} added {user}" : "{actor} ha añadido a {user}", + "You joined the conversation" : "Te has unido a la conversación", + "{actor} joined the conversation" : "{actor} se ha unido a la conversación", + "You added {user}" : "Has añadido a {user}", + "{actor} added you" : "{actor} te ha añadido", + "An administrator added you" : "Un administrador te ha añadido", + "An administrator added {user}" : "Un administrador ha añadido a {user}", + "You left the conversation" : "Has abandonado la conversación", + "{actor} left the conversation" : "{actor} ha abandonado la conversación", + "{actor} removed {user}" : "{actor} ha eliminado a {user}", + "You removed {user}" : "Has eliminado a {user}", + "{actor} removed you" : "{actor} te ha eliminado", + "An administrator removed you" : "Un administrador te ha quitado", + "An administrator removed {user}" : "Un administrador ha quitado a {user}", + "{actor} invited {federated_user}" : "{actor} invitó a {federated_user}", + "You invited {federated_user}" : "Ud. invitó a {federated_user}", + "You accepted the invitation" : "Ud. aceptó la invitación", + "{actor} invited you" : "{actor} lo ha invitado", + "An administrator invited you" : "Un administrador lo ha invitado", + "An administrator invited {federated_user}" : "Un administrador ha invitado a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha aceptado la invitación", + "{actor} removed {federated_user}" : "{actor} ha eliminado a {federated_user}", + "You removed {federated_user}" : "Ha eliminado a {federated_user}", + "You declined the invitation" : "Ud. declinó la invitación", + "An administrator removed {federated_user}" : "Un administrador ha eliminado a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha declinado la invitación", + "{actor} added group {group}" : "{actor} ha añadido el grupo {group}", + "You added group {group}" : "Ud. ha añadido el grupo {group}", + "An administrator added group {group}" : "Un administrador ha añadido el grupo {group}", + "{actor} removed group {group}" : "{actor} ha eliminado el grupo {group}", + "You removed group {group}" : "Ud. ha eliminado el grupo {group}", + "An administrator removed group {group}" : "Un administrador ha eliminado el grupo {group}", + "{actor} added team {circle}" : "{actor} añadió al equipo {circle}", + "You added team {circle}" : "Ud. añadió al equipo {circle}", + "An administrator added team {circle}" : "Un administrador añadió al equipo {circle}", + "{actor} removed team {circle}" : "{actor} eliminó al equipo {circle}", + "You removed team {circle}" : "Ud. eliminó al equipo {circle}", + "An administrator removed team {circle}" : "Un administrador eliminó al equipo {circle}", + "{actor} added {phone}" : "{actor} añadió a {phone}", + "You added {phone}" : "Ud. ha añadido a {phone}", + "An administrator added {phone}" : "Un administrador añadió a {phone}", + "{actor} removed {phone}" : "{actor} eliminó a {phone}", + "You removed {phone}" : "Ud. ha eliminado a {phone}", + "An administrator removed {phone}" : "Un administrador eliminó a {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha ascendido a {user} a moderador", + "You promoted {user} to moderator" : "Has ascendido a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te ha ascendido a moderador", + "An administrator promoted you to moderator" : "Un administrador te ha nombrado moderador", + "An administrator promoted {user} to moderator" : "Un administrador ha nombrado moderador a {user}", + "{actor} demoted {user} from moderator" : "{actor} ha degradado a {user} desde moderador", + "You demoted {user} from moderator" : "Has degradado a {user} desde moderador", + "{actor} demoted you from moderator" : "{actor} te ha degradado desde moderador", + "An administrator demoted you from moderator" : "Un administrador te ha destituido como moderador", + "An administrator demoted {user} from moderator" : "Un administrador ha destituido a {user} como moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Compartiste un archivo que ya no está disponible", + "File shares are currently not supported in federated conversations" : "La compartición de archivos no está actualmente soportada en conversaciones federadas", + "The shared location is malformed" : "La ubicación compartida está malformada", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurado Matterbridge para sincronizar esta conversación con otros chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Tu has configurado Matterbridge para sincronizar esta conversación con otros chats", + "{actor} created thread {title}" : "{actor} creó el hilo {title}", + "You created thread {title}" : "Ud. creó el hilo {title}", + "{actor} renamed thread {title}" : "{actor} renombró el hilo {title}", + "You renamed thread {title}" : "Ud. renombró el hilo {title}", + "{actor} updated the Matterbridge configuration" : "{actor} actualizó la configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Tu actualizaste la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Tu eliminaste la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} inició Matterbridge", + "You started Matterbridge" : "Tu iniciaste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detuvo Matterbridge", + "You stopped Matterbridge" : "Tu detuviste Matterbridge", + "{actor} deleted a message" : "{actor} eliminó un mensaje", + "You deleted a message" : "Has eliminado un mensaje", + "{actor} edited a message" : "{actor} editó un mensaje", + "You edited a message" : "Has editado un mensaje", + "{actor} pinned a message" : "{actor} ha fijado un mensaje", + "You pinned a message" : "Has fijado un mensaje", + "{actor} unpinned a message" : "{actor} ha desfijado un mensaje", + "Message was automatically unpinned" : "El mensaje se ha desfijado automáticamente", + "You unpinned a message" : "Has desfijado un mensaje", + "{actor} deleted a reaction" : "{actor} eliminó una reacción", + "You deleted a reaction" : "Ud. ha borrado una reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ud. ha cambiado la caducidad del mensaje a %n semana","Ud. ha cambiado la caducidad del mensaje a %n semanas","Ud. ha cambiado la caducidad del mensaje a %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ud. ha cambiado la caducidad del mensaje a %n día","Ud. ha cambiado la caducidad del mensaje a %n días","Ud. ha cambiado la caducidad del mensaje a %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ud. ha cambiado la caducidad del mensaje a %n hora","Ud. ha cambiado la caducidad del mensaje a %n horas","Ud. ha cambiado la caducidad del mensaje a %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ud. ha cambiado la caducidad del mensaje a %n minuto","Ud. ha cambiado la caducidad del mensaje a %n minutos","Ud. ha cambiado la caducidad del mensaje a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ha cambiado la caducidad del mensaje a %n semana","{actor} ha cambiado la caducidad del mensaje a %n semanas","{actor} ha cambiado la caducidad del mensaje a %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ha cambiado la caducidad del mensaje a %n día","{actor} ha cambiado la caducidad del mensaje a %n días","{actor} ha cambiado la caducidad del mensaje a %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ha cambiado la caducidad del mensaje a %n hora","{actor} ha cambiado la caducidad del mensaje a %n horas","{actor} ha cambiado la caducidad del mensaje a %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} estableció la expiración de mensaje a %n minuto","{actor} estableció la expiración de mensajes a %n minutos","{actor} estableció la expiración de mensajes a %n minutos"], + "{actor} disabled message expiration" : "{actor} ha desactivado la caducidad del mensaje", + "You disabled message expiration" : "Ud. ha desactivado la caducidad de mensajes", + "{actor} cleared the history of the conversation" : "{actor} ha vaciado el historial de la conversación", + "You cleared the history of the conversation" : "Ud. ha vaciado el historial de la conversación", + "{actor} set the conversation picture" : "{actor} ha establecido la foto de la conversación", + "You set the conversation picture" : "Ud. ha establecido la foto de la conversación", + "{actor} removed the conversation picture" : "{actor} ha eliminado la imagen de la conversación", + "You removed the conversation picture" : "Ud. ha eliminado la imagen de la conversación", + "{actor} ended the poll {poll}" : "{actor} finalizó la encuesta {poll}", + "You ended the poll {poll}" : "Ud. ha finalizado la encuesta {poll}", + "{actor} started the video recording" : "{actor} inició la grabación de video", + "You started the video recording" : "Ud. ha iniciado la grabación de video", + "{actor} stopped the video recording" : "{actor} detuvo la grabación de video", + "You stopped the video recording" : "Ud. ha detenido la grabación de video", + "{actor} started the audio recording" : "{actor} ha iniciado la grabación de audio", + "You started the audio recording" : "Ud. ha iniciado la grabación de audio", + "{actor} stopped the audio recording" : "{actor} detuvo la grabación de audio", + "You stopped the audio recording" : "Ud. ha detenido la grabación de audio", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Alguien votó en la encuesta {poll}", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Message deleted by {actor}" : "Mensaje eliminado por {actor}", + "Message deleted by you" : "Has eliminado este mensaje", + "Deleted user" : "Usuario eliminado", + "Unknown number" : "Número desconocido", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "Missed call" : "Llamada perdida", + "Unanswered call" : "Llamada sin contestar", + "Call ended (Duration {duration})" : "Llamada finalizada (Duración {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha terminado la llamada (Duración {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La llamada con %n invitado ha terminado, porque ha alcanzado la duración máxima (Duración {duration})","La llamada con %n invitados ha terminado, porque ha alcanzado la duración máxima (Duración {duration})","La llamada con %n invitados ha terminado, porque ha alcanzado la duración máxima (Duración {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Llamada con %n invitado finalizada (Duración {duration})","Llamada con %n invitados finalizada (Duración {duration})","Llamada con %n invitados finalizada (Duración {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha terminado la llamada con %n invitado (Duración {duration})","{actor} ha terminado la llamada con %n invitados (Duración {duration})","{actor} ha terminado la llamada con %n invitados (Duración {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1} ended (Duration {duration})" : "Llamada con {user1} finalizada (Duración {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha terminado la llamada con {user1} (Duración {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1} y {user2} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Llamada con {user1} y {user2} finalizada (Duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha terminado la llamada con {user1} y {user2} (Duración {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2} y {user3} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Llamada con {user1}, {user2} y {user3} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2} y {user3} (Duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2}, {user3} y {user4} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Llamada con {user1}, {user2}, {user3} y {user4} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2}, {user3} y {user4} (Duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La llamada con {user1}, {user2}, {user3}, {user4} y {user5} ha terminado, porque ha alcanzado la duración máxima (Duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Llamada con {user1}, {user2}, {user3}, {user4} y {user5} finalizada (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ha terminado la llamada con {user1}, {user2}, {user3}, {user4} y {user5} (Duración {duration})", + "Message of {user} in {conversation}" : "Mensaje de {user} en {conversation}", + "Message of {user}" : "Mensaje de {usuario}", + "Message of a deleted user in {conversation}" : "Mensaje de un usuario eliminado en {conversation}", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "An error occurred. Please contact your administrator." : "Ha ocurrido un error. Por favor contacte a su administrador.", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is not shared, or shared but not with the user" : "El archivo no está compartido, o lo está pero no con el usuario", + "No account available to delete." : "No hay cuentas disponibles para borrar.", + "Poll" : "Encuesta", + "Password needs to be set" : "Es necesario establecer la contraseña", + "Uploading the file failed" : "La subida del archivo ha fallado", + "No image file provided" : "No se ha proporcionado un archivo de imagen", + "File is too big" : "El archivo es demasiado grande", + "Invalid file provided" : "Archivo proporcionado no válido", + "Invalid image" : "Imagen no válida", + "Unknown filetype" : "Extensión de archivo desconocida", + "Talk mentions" : "Menciones en Talk", + "More conversations" : "Más conversaciones", + "Say hi to your friends and colleagues!" : "¡Saluda a tus amigos y colegas!", + "No unread mentions" : "No hay menciones sin leer", + "Call in progress" : "Llamada en curso", + "You were mentioned" : "Te han mencionado", + "Write to conversation" : "Escribir en la conversación", + "Writes event information into a conversation of your choice" : "Escribe información del evento en una conversación de su elección", + "Missing email field in header line" : "Falta el campo correo en la cabecera", + "Following lines are invalid: %s" : "Las siguientes líneas son inválidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s le ha invitado a la conversación \"%2$s\".", + "You were invited to conversation \"%s\"." : "Ud. fue invitado a la conversación \"%s\".", + "Conversation invitation" : "Invitación de conversación", + "Scheduled time" : "Hora programada", + "Description" : "Descripción", + "You can also dial-in via phone with the following details" : "También puedes unirte por teléfono con estos datos", + "Dial-in information" : "Información de conexión telefónica", + "Meeting ID" : "ID de reunión", + "Your PIN" : "Tu PIN", + "Click the button below to join the lobby now." : "Haga clic en el botón a continuación para unirse a la sala de espera", + "Click the link below to join the lobby now." : "Haga clic en el botón a continuación para unirse a la sala de espera", + "Join lobby for \"%s\"" : "Unirse a la sala de espera para \"%s\"", + "Click the button below to join the conversation now." : "Haga clic en el botón a continuación para unirse a la conversación ahora.", + "Click the link below to join the conversation now." : "Haga clic en el enlace a continuación para unirse a la conversación ahora.", + "Join \"%s\"" : "Unirse a \"%s\"", + "Meeting" : "Reunión", + "Password request: %s" : "Petición de contraseña: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Borrado el usuario (%s)", + "Failed to upload call recording" : "Fallo al subir la grabación de la llamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de grabación falló al subir la grabación de la llamada {call}. Por favor, comuníquelo a la administración.", + "Share to chat" : "Compartir al chat", + "Dismiss notification" : "Descartar notificación", + "Call recording now available" : "La grabación está disponible", + "The recording for the call in {call} was uploaded to {file}." : "La grabación para llamada en {call} se ha subido a {file}.", + "Transcript now available" : "La transcripción está disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripción para llamada en {call} se ha subido a {file}.", + "Failed to transcript call recording" : "Fallo al transcribir la grabación de la llamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor falló al transcribir la grabación en {file} para la llamada {call}. Por favor, comuníquelo a la administración.", + "Call summary now available" : "El resumen de la llamada está disponible", + "The summary for the call in {call} was uploaded to {file}." : "El resumen de la llamada de {call} se subió a {file}.", + "Failed to summarize call recording" : "Error al resumir la grabación de la llamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor ha fallado al resumir la grabación en {file} de la llamada {call}. Por favor, comuníquelo a la administración.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} le invitó a unirse a la sala {roomName} en {remoteServer}", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "{user1} invited you to a federated conversation" : "{user1} le invitó a una conversación federada", + "Someone reacted" : "Alguien reaccionó", + "New message" : "Nuevo mensaje", + "Reminder" : "Recordatorio", + "Someone mentioned you" : "Alguien te mencionó", + "Notification" : "Notificación", + "Someone reacted in a private conversation" : "Alguien reaccionó en una conversación privada", + "You received a message in a private conversation" : "Recibiste un mensaje en una conversación privada", + "Reminder in a private conversation" : "Recordatorio en una conversación privada", + "Someone mentioned you in a private conversation" : "Alguien te mencionó en una conversación privada", + "Notification in a private conversation" : "Notificación en una conversación privada", + "Reminder: You in {call}" : "Recordatorio: Ud. en {call}", + "Reminder: {user} in {call}" : "Recordatorio: {user} en {call}", + "Reminder: Deleted user in {call}" : "Recordatorio: Se eliminó al usuario en {call}", + "Reminder: {guest} (guest) in {call}" : "Recordatorio: {guest} (invitado) en {call}", + "Reminder: Guest in {call}" : "Recordatorio: Invitado en {call}", + "{user} reacted with {reaction}" : "{user} reaccionó con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reaccionó con {reaction} en {call}", + "Deleted user reacted with {reaction} in {call}" : "Usuario eliminado reaccionó con {reaction} en {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (invitado) reaccionó con {reaction} en {call}", + "Guest reacted with {reaction} in {call}" : "Invitado reaccionó con {reaction} en {call}", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado de {call}", + "{guest} (guest) in {call}" : "{guest} (invitado) en {call}", + "Guest in {call}" : "Invitado en {call}", + "{user} sent you a private message" : "{user} te ha enviado un mensaje privado", + "{user} sent a message in conversation {call}" : "{user} ha enviado un mensaje en la conversación {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado envió un mensaje a la conversación {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) envió un mensaje en la conversación {call}", + "A guest sent a message in conversation {call}" : "Un invitado envió un mensaje a la conversación {call}", + "{user} replied to your private message" : "{user} respondió a su mensaje privado", + "{user} replied to your message in conversation {call}" : "{user} respondió a su mensaje privado en la conversación {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario borrado respondió a a su mensaje en la conversación {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) respondió su mensaje en la conversación {call}", + "A guest replied to your message in conversation {call}" : "Un invitado respondió a su mensaje en la conversación {call}", + "Reminder: You in private conversation {call}" : "Recordatorio: Ud. en la conversación privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Recordatorio: Un usuario eliminado en la conversación privada {call}", + "Reminder: {user} in private conversation" : "Recordatorio: {user} en la conversación privada", + "Reminder: You in conversation {call}" : "Recordatorio: Ud. en la conversación {call}", + "Reminder: {user} in conversation {call}" : "Recordatorio: {user} en la conversación {call}", + "Reminder: A deleted user in conversation {call}" : "Recordatorio: Un usuario eliminado en la conversación {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Recordatorio: {guest} (invitado) en la conversación {call}", + "Reminder: A guest in conversation {call}" : "Recordatorio: Un invitado en la conversación {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionó con {reaction} a su mensaje privado", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionó con {reaction} a su mensaje en la conversación {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionó con {reaction} a su mensaje en la conversación {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invitado) reaccionó con {reaction} a su mensaje en la conversación {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invitado reaccionó con {reaction} a su mensaje en la conversación {call}", + "{user} mentioned you in a private conversation" : "{user} te ha mencionado en una conversación privada", + "{user} mentioned group {group} in conversation {call}" : "el usuario {user} mencionó al grupo {group} en la conversación {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionó al equipo {team} en la conversación {call}", + "{user} mentioned everyone in conversation {call}" : "el usuario {user} mencionó a todos en la conversación {call}", + "{user} mentioned you in conversation {call}" : "{user} te ha mencionado en {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionó al grupo {group} en la conversación {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuario eliminado mencionó al equipo {team} en la conversación {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionó a todos en la conversación {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado te ha mencionado en {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invitado) mencionó al grupo {group} en la conversación {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(Invitado) mencionó al equipo {team} en la conversación {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invitado) mencionó a todos en la conversación {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) te mencionó en la conversación {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invitado mencionó al grupo {group} en la conversación {call}", + "A guest mentioned team {team} in conversation {call}" : "Un invitado mencionó al equipo {team}en la conversación {call}", + "A guest mentioned everyone in conversation {call}" : "Un invitado mencionó a todos en la conversación {call}", + "A guest mentioned you in conversation {call}" : "Un invitado te ha mencionado en {call}", + "View message" : "Ver mensaje", + "Dismiss reminder" : "Descartar recordatorio", + "View chat" : "Ver chat", + "{user} invited you to a group conversation: {call}" : "{user} te ha invitado a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "Answer call" : "Contestar llamada", + "{user} would like to talk with you" : "{user} quiere hablar contigo", + "Call back" : "Devolver llamada", + "You missed a call from {user}" : "Tiene una llamada perdida de {user}", + "Accept call" : "Aceptar llamada", + "Incoming phone call from {call}" : "Llamada telefónica de {call}", + "You missed a phone call from {call}" : "Ud. tiene una llamada perdida de {call}", + "A group call has started in {call}" : "Una llamada de grupo ha comenzado en {call}", + "You missed a group call in {call}" : "Tiene una llamada de grupo perdida en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando la contraseña para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} trató de solicitar la contraseña para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguien ha solicitado la contraseña para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguien intentó solicitar la contraseña para acceder a {file}", + "Open settings" : "Abrir configuración", + "Hosted signaling server added" : "Servidor de señalización alojado añadido", + "The hosted signaling server is now configured and will be used." : "El servidor de señalización gestionado ya está configurado y en uso.", + "Hosted signaling server removed" : "Servidor de señalización alojado eliminado", + "The hosted signaling server was removed and will not be used anymore." : "El servidor de señalización gestionado se ha eliminado y ya no se usará.", + "Hosted signaling server changed" : "Servidor de señalización alojado modificado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "La cuenta del servidor de señalización gestionado ha cambiado el estado de «{oldstatus}» a «{newstatus}».", + "pending" : "pendiente", + "active" : "activo", + "expired" : "caducado", + "blocked" : "bloqueado", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificado de {host} expira en {days} días", + "The certificate of {host} expired" : "El certificado de {host} expiró", + "Contact via Talk" : "Contactar vía Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Conversations" : "Conversaciones", + "Messages in current conversation" : "Mensajes en la conversación actual", + "{user}" : "{user}", + "Messages" : "Mensajes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensajes en otras conversaciones", + "One-to-one rooms always need to show the other users avatar" : "Las salas uno a uno siempre necesitan mostrar los avatars del otro usuario", + "Invalid emoji character" : "Carácter de emoji inválido", + "Invalid background color" : "Color de fondo inválido", + "Avatar image is not square" : "La imagen del avatar no es cuadrada", + "Room {number}" : "Sala {number}", + "Other" : "Otro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No ha sido posible solicitar la prueba porque el servidor de pruebas no está accesible. Inténtalo de nuevo más adelante.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta instancia. Es posible que no sea accesible desde fuera para verificar su URL.", + "Something unexpected happened." : "Ha ocurrido algo inesperado.", + "The URL is invalid." : "La URL no es válida.", + "An HTTPS URL is required." : "Se requiere una URL HTTPS.", + "The email address is invalid." : "La dirección de correo no es válida.", + "The language is invalid." : "El idioma no es válido.", + "The country is invalid." : "El país no es válido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hay un problema con la solicitud de la prueba. Revisa los registros para más información.", + "Too many requests are send from your servers address. Please try again later." : "Se han enviado demasiadas solicitudes desde la dirección de tu servidor. Inténtalo de nuevo más adelante.", + "There is already a trial registered for this Nextcloud instance." : "Ya se ha registrado una prueba para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Ha ocurrido algo inesperado. Inténtalo de nuevo más adelante.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No ha sido posible solicitar la prueba porque el servidor de pruebas no responde bien. Inténtalo de nuevo más adelante.", + "Trial requested but failed to get account information. Please check back later." : "Se ha solicitado la prueba, pero no se ha obtenido la información de la cuenta. Inténtalo de nuevo más adelante.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta solicitud. Es posible que no que no sea accesible desde fuera para verificar su URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No ha sido posible obtener información de la cuenta porque el servidor de pruebas no responde bien. Inténtalo de nuevo más adelante.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hay un problema para obtener la información de la cuenta. Revisa los registros para más información.", + "There is no such account registered." : "Esta cuenta no está registrada.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No ha sido posible obtener la información de la cuenta porque el servidor de pruebas no está accesible. Inténtalo de nuevo más tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "No ha sido posible eliminar la cuenta del servidor de señalización gestionado. Inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No ha sido posible eliminar la cuenta porque el servidor de pruebas no responde bien. Inténtalo de nuevo más tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hay un problema para eliminar la cuenta. Revisa los registros para más información.", + "Too many requests are sent from your servers address. Please try again later." : "Están llegando demasiadas solicitudes desde la dirección de tu servidor. Inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No ha sido posible eliminar la cuenta porque el servidor de pruebas no está accesible. Inténtalo de nuevo más tarde.", + "Note to self" : "Nota personal", + "A place for your private notes, thoughts and ideas" : "Un lugar para sus notas personales, pensamientos e ideas", + "Transcript is AI generated and may contain mistakes" : "La transcripción se genera mediante IA y puede contener errores", + "Summary is AI generated and may contain mistakes" : "El resumen se genera mediante IA y puede contener errores", + "Let's get started!" : "¡Comencemos!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** es una plataforma de comunicación segura y auto-hospedada que se integra completamente de manera transparente con el ecosistema Nextcloud.\n\n#### Características principales de Nextcloud Talk\n\n* Mensajes privados y chats grupales\n* Llamadas y videollamadas\n* Archivos compartidos e integración con otras aplicaciones Nextcloud\n* Ajustes de conversación, moderación y privacidad personalizables\n* Web, escritorio y móvil (iOS y Android)\n* Comunicación privada y segura\n\nDescubra más información en la [documentación de usuario](https://docs.nextcloud.com/server/latest/user_manual/es/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bienvenido/a a Nextcloud Talk\n\nNextcloud Talk es una aplicación de mensajería privada y potente que se integra con Nextcloud. Chatee en privado o en conversaciones grupales, colabore en llamadas de voz y video, organice seminarios web y eventos, personalice sus conversaciones y más.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 De formato al texto para crear mensajes complejos\n\nEn Nextcloud Talk, puede utilizar Markdown para dar formato a sus mensajes. Por ejemplo, puede usar **negrita** o *cursiva*, y también `formato de código`. Incluso puede crear tablas o añadir encabezados a su texto.\n\n¿Quiere corregir un error o cambiar el formato? Edite su mensaje con el botón \"Editar mensaje\" en el menú de mensajes.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Añada archivos adjuntos y enlaces\n\nAdjunte archivos desde Nextcloud Hub mediante el botón \"+\". Comparta recursos desde Archivos y varias apps de Nextcloud. Algunas apps le permiten crear widgets interactivos, como por ejemplo, la aplicación Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deje que las conversaciones fluyan: mencione usuarios, reaccione a mensajes y más\n\nPuede mencionar a todos en la conversación utilizando %s o a participantes específicos escribiendo \"@\" y seleccionando su nombre de la lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Puede responder a mensajes, reenviarlos a otras conversaciones y personas, ó, copiar el contenido del mensaje.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Haga más con el Selector Inteligente\n\nSimplemente escriba \"/\" o vaya al menú \"+\" para abrir el Selector Inteligente, donde podrá adjuntar distintos tipos de contenido a sus mensajes. Puede configurar el Selector Inteligente para que pueda insertar recursos de tus apps de Nextcloud, GIFs, ubicaciones, texto generado por IA y mucho más.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestione los ajustes de la conversación\n\nEn el menú de la conversación, puede acceder a varios ajustes para gestionar sus conversaciones, como:\n* Editar información de la conversación\n* Gestionar notificaciones\n* Aplicar varias reglas de moderación\n* Configurar el acceso y la seguridad\n* Activar bots\n* ¡Y más!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Estadounidense", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islas Åland", + "Azerbaijan" : "Azerbaiyán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Brunéi Darusalam", + "Bolivia, Plurinational State of" : "Bolivia, Estado Plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio y Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Isla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democrática del", + "Central African Republic" : "República Centroafricana", + "Congo" : "Congo", + "Switzerland" : "Suiza", + "Côte d'Ivoire" : "Costa de Marfil", + "Cook Islands" : "Islas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curazao", + "Christmas Island" : "Isla de Navidad", + "Cyprus" : "Chipre", + "Czechia" : "Chequia", + "Germany" : "Alemania", + "Djibouti" : "Yibuti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Argelia", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Western Sahara" : "Sáhara Occidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fiyi", + "Falkland Islands (Malvinas)" : "Islas Malvinas (Falkland)", + "Micronesia, Federated States of" : "Micronesia, Estados Federados de", + "Faroe Islands" : "Islas Faroe", + "France" : "Francia", + "Gabon" : "Gabón", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido de la Gran Bretaña e Irlanda del Norte", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islas Georgias del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isla Heard e Islas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Isla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico del Océano Índico", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica de", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordania", + "Japan" : "Japón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguizistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Comoros" : "Comoras", + "Saint Kitts and Nevis" : "San Cristóbal y Nieves", + "Korea, Democratic People's Republic of" : "Corea, República Democrática Popular de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islas Caimán", + "Kazakhstan" : "Kazajistán", + "Lao People's Democratic Republic" : "República Democrática Popular de Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónaco", + "Moldova, Republic of" : "Moldavia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martín (parte francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islas Marshall", + "North Macedonia" : "Macedonia del norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Islas Marianas del Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níger", + "Norfolk Island" : "Isla Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Bajos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nueva Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Estado de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Catar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Russian Federation" : "Rusia, Federación de", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudí", + "Solomon Islands" : "Islas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Elena, Ascensión y Tristán de Acuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard y Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santo Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "San Martín (parte holandesa)", + "Syrian Arab Republic" : "República Árabe Siria", + "Eswatini" : "Swazilandia", + "Turks and Caicos Islands" : "Islas Turcos y Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Territorios Franceses del Sur", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tayikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Túnez", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidad y Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwán, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, República Unida de", + "Ukraine" : "Ucrania", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islas Ultramarinas Menores Estadounidenses", + "United States of America" : "Estados Unidos de América", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Estado Vaticano", + "Saint Vincent and the Grenadines" : "San Vicente y las Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Islas Vírgenes (Británicas)", + "Virgin Islands, U.S." : "Islas Vírgenes (U.S.)", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis y Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Background blur" : "Desenfocar fondo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "No se ha podido comprobar el soporte para cargar WASM. Por favor, compruebe manualmente si su servidor web sirve archivos '.wasm'.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Su servidor web no está configurado para entregar archivos `.wasm` correctamente. Esto suele ser un problema relacionado con la configuración de Nginx. Asímismo, el desenfoque de fondo también necesita un ajuste para entregar archivos `.wasm`. Compare su configuración de Nginx con la configuración recomendada en nuestra documentación.", + "Talk configuration values" : "Valores de configuración de Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Limitar la duración de las llamadas solo está soportado con el cron del sistema. Por favor, habilite el cron de sistema o elimine la configuración `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Los valores bajos del ajuste `max_call_duration` (que actualmente es %d) no pueden ser impuestos por limitaciones técnicas. La tarea en segundo plano solo se ejecuta cada 5 minutos, así que úselo bajo su propio riesgo.", + "Federation" : "Federación", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Es altamente recomendable configurar \"memcache.locking\" cuando la Federación de Talk está habilitada.", + "High-performance backend" : "Motor de alto rendimiento", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No se ha configurado un backend de alto rendimiento - Ejecutar Nextcloud Talk sin utiliizar el backend de alto rendimiento solo escala con llamadas pequeñas (máx. 2-3 participantes). Por favor, configure un backend de alto rendimiento para asegurarse que las llamadas con múltiples participantes funcionen sin interrupciones.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Ejecutar el backend de alto rendimiento en el modo \"conversation_cluster\" está discontinuado y no será soportado en la próxima versión. El backend de alto rendimiento actualmente soporta clustering verdadero y debería ser utilizado en su lugar.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definir múltiples backends de alto rendimiento está discontinuado y no será soportado en la próxima versión. En su lugar, debería configurarse un balanceador de carga con varios servidores de señalización en clúster, y configurado en los ajustes de Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La llave pública almacenada para el algoritmo %1$s no coincide con la llave privada almacenada. Ejecute %2$s para corregir el problema.", + "High-performance backend not configured correctly. Run %s for details." : "El backend de alto rendimiento no ha sido configurado correctamente. Ejecute %s para ver los detalles.", + "High-performance backend not configured correctly" : "El backend de alto rendimiento no ha sido configurado correctamente", + "Error: Cannot connect to server" : "Error: No se puede conectar con el servidor", + "Error: Server did not respond with proper JSON" : "Error: El servidor no ha respondido con JSON correcto", + "Error: Certificate expired" : "Error: Certificado caducado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: los relojes de los servidores Nextcloud y el backend de alto rendimiento están desincronizados. Por favor, asegúrese de que ambos servidores están conectados a un servidor de sincronización de hora o sincronice sus relojes manualmente.", + "Could not get version" : "No se pudo obtener la versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Versión en ejecución: {versión}; El servidor necesita ser actualizado para ser compatible con esta versión de Talk", + "Error: Server responded with: {error}" : "Error: El servidor ha respondido con: {error}", + "Error: Unknown error occurred" : "Error: Ha sucedido un error desconocido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advertencia: Versión en ejecución: {version}; El servidor no soporta todas las características de esta versión de Talk, características que faltan: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Es altamente recomendado que se configure un caché de memoria cuando se ejecuta Nextcloud Talk con un backend de alto rendimiento.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push está instalado, esto mejora la puntualidad de las notificaciones de Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} no está instalado. Esto puede llevar a retrasos en las notificaciones de Talk.", + "Recording backend" : "Backend de grabación", + "Using the recording backend requires a High-performance backend." : "Usar el backend de grabación requiere un backend de alto rendimiento.", + "No recording backend configured" : "No se ha configurado un backend de grabación", + "SIP configuration" : "Configuración SIP", + "Using the SIP functionality requires a High-performance backend." : "Usar la funcionalidad SIP requiere un backend de alto rendimiento.", + "No SIP backend configured" : "No se ha configurado un backend SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Fecha no válida, el formato de las fechas debe ser AAAA-MM-DD", + "Conversation not found" : "Conversación no encontrada", + "Path is already shared with this conversation" : "La ruta ya está compartida con esta conversación", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video y audio conferencias mediante WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio conferencias usando WebRTC\n\n* 💬 **Chat** Nextcloud Talk viene con un chat de texto simple, permitiéndole compartir o subir archivos desde la app de Archivos de Nextcloud, o, desde su dispositivo local y mencionar a otros participantes.\n* 👥 **¡Llamadas privadas, grupales, públicas y protegidas por contraseña!** Invite a alguien, a un grupo o envíe un enlace público para invitar a una llamada.\n* 🌐 **Chats federados** Chatee con otros usuarios de Nextcloud en sus servidores\n* 💻 **¡Compartir pantalla!** Comparta su pantalla con los participantes de su llamada.\n* 🚀 **Integración con otras apps de Nextcloud** como Archivos, Calendario, estados de usuario, Tablero, Flujos, Mapas, Seleccionador inteligente, Contactos, Tarjetas, y muchas mas.\n* 🌉 **Sincronización con otras soluciones de mensajería** Estando [Matterbridge](https://github.com/42wim/matterbridge/) integrado en Talk, puede fácilmente sincronizar un sinnúmero de otras soluciones de chat con Talk de Nextcloud y viceversa.", + "Leave call" : "Dejar llamada", + "Navigating away from the page will leave the call in {conversation}" : "Navegar fuera de esta página colgará la llamada en {conversation}", + "Stay in call" : "Permanecer en la llamada", + "Error occurred when getting the conversation information" : "Ocurrió un error al obtener la información de la conversación", + "Discuss this file" : "Discutir sobre este archivo", + "Share this file with others to discuss it" : "Compartir esta archivo con otros para debatirlo", + "Share this file" : "Compartir este archivo", + "Join conversation" : "Unirse a la conversación", + "This conversation is password-protected." : "Esta conversación está protegida con contraseña.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hemos detectado múltiples intentos fallidos de inicio de sesión desde su IP. Por lo tanto, su siguiente inicio de sesión se podría retrasar hasta 30 segundos. ", + "The password is wrong. Try again." : "La contraseña es errónea. Vuelve a intentarlo.", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Error requesting the password." : "Error al solicitar la contraseña", + "Request password" : "Solicitar contraseña", + "This conversation has ended" : "Esta conversación ha finalizado", + "Error occurred when joining the conversation" : "Se ha producido un error al unirse a la conversación", + "Close Talk sidebar" : "Cerrar la barra lateral de Talk", + "Open Talk sidebar" : "Abrir la barra lateral de Talk", + "Everyone" : "Todo el mundo", + "Users and moderators" : "Usuarios y moderadores", + "Moderators only" : "Sólo moderadores", + "Disable calls" : "Deshabilitar llamadas", + "Save changes" : "Guardar cambios", + "Saving …" : "Guardando …", + "Saved!" : "Guardado", + "Limit to groups" : "Limitar para grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cuando se ha seleccionado al menos un grupo, solo personas de los grupos seleccionados pueden ser parte de las conversaciones.", + "Guests can still join public conversations." : "Los invitados todavía pueden unirse a conversaciones públicas", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Los usuarios que ya no puedan usar Talk serán listados como participantes en sus conversaciones previas y también se mantendrán sus mensajes de chat.", + "Limit using Talk" : "Límite al usar Talk", + "Limit creating a public and group conversation" : "Límite al crear una conversación pública y de grupo", + "Limit creating conversations" : "Límite al usar conversaciones", + "Limit starting a call" : "Límite al comenzar una llamada", + "Limit starting calls" : "Límite al comenzar llamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cuando una llamada ha comenzado, todos los que tienen acceso a la conversación pueden unirse a la llamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Se han instalado los siguientes bots en este servidor. En la documentación puede encontrar detalles sobre cómo {linkstart1} crear su propio bot {linkend} o una {linkstart2} lista de bots {linkend} para habilitar en su servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No se han instalado bots en este servidor. En la documentación puede encontrar detalles sobre cómo {linkstart1} crear su propio bot {linkend} o una {linkstart2} lista de bots {linkend} para habilitar en su servidor.", + "Description is not provided" : "No se ha dado una descripción", + "Locked for moderators" : "Bloqueado para moderadores", + "Enabled" : "Habilitado", + "Disabled" : "Desactivado", + "Bots settings" : "Configuración de bots", + "State" : "Estado", + "Name" : "Nombre", + "Last error" : "Último error", + "Total errors count" : "Recuento total de errores", + "Find more bots" : "Encontrar más bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Los servidores de confianza pueden ser configurados en {linkstart}La página de ajustes{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Los chats y llamadas federadas ya funcionan. La gestión de adjuntos llegará en una versión futura.", + "Enable Federation in Talk app" : "Habilitar federación en la app Talk", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permitir a los usuarios ser invitados a conversaciones federadas", + "Allow users to invite federated users into conversation" : "Permitir a los usuarios invitar a los usuarios federados en la conversación", + "Only allow to federate with trusted servers" : "Solo permitir la federación entre servidores de confianza", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Cuando se ha seleccionado al menos un grupo, solo personas de los grupos listados pueden invitar a los usuarios federados a las conversaciones.", + "Groups allowed to invite federated users" : "Grupos que tienen permitido invitar a usuarios federados", + "Select groups …" : "Seleccione los grupos …", + "All messages" : "Todos los mensajes", + "@-mentions only" : "Solo menciones con @", + "Off" : "Off", + "General settings" : "Ajustes generales", + "Default notification settings" : "Configuración por defecto de notificaciones", + "Default group notification" : "Notificación por defecto de grupo", + "Default group notification for new groups" : "Notificación por defecto para grupos nuevos", + "Integration into other apps" : "Integración en otras aplicaciones", + "Allow conversations on files" : "Permitir conversaciones en archivos", + "Allow conversations on public shares for files" : "Permitir conversaciones en recursos compartidos para archivos", + "End-to-end encrypted calls" : "Llamadas cifradas de extremo a extremo", + "Enable encryption" : "Habilitar cifrado", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Las llamadas cifradas de extremo a extremo con un puente SIP configurado necesitan una nueva versión del backend de alto rendimiento y del puente SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Los clientes móviles no soportan las llamadas cfiradas de extremo a extremo en el momento.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Al pulsar el botón de arriba, los datos del formulario se enviarán a los servidores de Struktur AG. Puedes encontrar más información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Terminada", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "No se ha podido solicitar la prueba. Inténtalo de nuevo más adelante.", + "The account could not be deleted. Please try again later." : "No se ha podido eliminar la cuenta. Inténtalo de nuevo más adelante.", + "Hosted High-performance backend" : "Backend de alto rendimiento alojado", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nuestro asociado Struktur AG ofrece un servicio en el que puedes solicitar un servidor de señalización gestionado. Para ello, solo tienes que rellenar el formulario a continuación y tu Nextcloud enviará la solicitud. Cuando el servidor esté configurado, las credenciales se rellenarán automáticamente. Esto sobrescribirá los ajustes actuales del servidor de señalización.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Si su backend de alto rendimiento incluye funcionalidad STUN y/o TURN, los ajustes serán adecuadamente actualizados ", + "URL of this Nextcloud instance" : "URL de esta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nombre completo del usuario que solicita la prueba", + "Email of the user" : "Email del usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar prueba del servidor de señalización", + "You can see the current status of your hosted signaling server in the following table." : "Puedes ver el estado actual de tu servidor de señalización gestionado en la siguiente tabla.", + "Status" : "Estado", + "Created at" : "Creado el", + "Expires at" : "Caduca el", + "Limits" : "Límites", + "STUN included" : "STUN incluido", + "Yes" : "Sí", + "No" : "No", + "TURN included" : "TURN incluido", + "Delete the signaling server account" : "Eliminar la cuenta del servidor de señalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Puede instalar Matterbridge para enlazar Nextcloud Talk con algunos otros servicios, visite su {linkstart1}página de GitHub{linkend} para más detalles. La descarga e instalación de la aplicación puede llevar un tiempo. En caso de que falle por tiempo de espera, haga la instalación manualmente desde la {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "El archivo binario de Matterbridge tiene permisos incorrectos. Por favor, asegúrese de que el archivo binario de Matterbridge pertenece al usuario correcto y se puede ejecutar. Este puede encontrarse en \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "El binario de Matterbridge no se ha encontrado o no se ha podido ejecutar.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "También puede configurar manualmente la ruta al binario de Matterbridge mediante la configuración. Consulte la {linkstart}documentación de integración de Matterbridge{linkend} para más información.", + "Downloading …" : "Descargando …", + "Install Talk Matterbridge" : "Instalar Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Ocurrió un error mientras se instalaba la app Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocurrió un error mientras se instalaba Matterbridge para Talk. Por favor, instale el mismo manualmente", + "Failed to execute Matterbridge binary." : "Fallo al ejecutar el binario de Matterbridge.", + "Matterbridge integration" : "Integración con Matterbridge", + "Enable Matterbridge integration" : "Activar integración con Matterbridge", + "Status: Checking connection" : "Estado: Comprobando conexión", + "OK: Running version: {version}" : "OK: Versión en uso: {version}", + "Error: Server seems to be a Signaling server" : "Error: el servidor parece ser un servidor de señalización", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: los relojes de los servidores Nextcloud y el backend de grabación están desincronizados. Por favor, asegúrese de que ambos servidores están conectados a un servidor de sincronización de hora o sincronice sus relojes manualmente.", + "Recording backend URL" : "URL del backend de grabación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "Disabled for all calls" : "Deshabilitado para todas las llamadas", + "Enabled for all calls" : "Habilitado para todas las llamadas", + "Configurable on conversation level by moderators" : "Configurable a nivel de conversación por los moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Los ajustes PHP \"upload_max_filesize\" ó \"post_max_size\" sólo le permitirán cargar archivos de hasta {maxUpload}.", + "Recording backend settings saved" : "Se guardaron las configuraciones del backend de grabación", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "A los moderadores les será permitido habilitar el consentimiento a nivel de conversación. El consentimiento para ser grabado le será requerido a cada participante antes de unirse a cada una de las llamadas en esta conversación.", + "The consent to be recorded will be required for each participant before joining every call." : "El consentimiento para ser grabado le será requerido a cada participante antes de unirse a cada llamada.", + "The consent to be recorded is not required." : "El consentimiento para ser grabado no es requerido.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuración del backend de grabación solo es posible con el backend de alto rendimiento.", + "Add a new recording backend server" : "Añadir un nuevo servidor de backend de grabación", + "Shared secret" : "Secreto compartido", + "Recording consent" : "Consentimiento de grabación", + "Recording transcription" : "Grabando transcripción", + "Automatically transcribe call recordings with a transcription provider" : "Transcribe automáticamente las llamadas grabadas con un proveedor de transcripciones", + "Automatically summarize call recordings with transcription and summary providers" : "Resume automáticamente las llamadas grabadas con proveedores de transcripción y resumen", + "SIP configuration saved!" : "¡Configuración SIP guardada!", + "SIP configuration is only possible with a High-performance backend." : "La configuración SIP solo es posible con un backend de alto rendimiento.", + "Enable SIP Dial-out option" : "Habilitar opción para para llamadas SIP salientes", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "El servidor de señalización debe ser actualizado para que tenga soporte para llamadas SIP salientes", + "Do not show SIP Dial-out caller number" : "No mostrar el número telefónico en llamadas SIP salientes", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "El número anónimo debe aparecer como \"desconocido\" o \"número privado\" al recipiente de la llamada", + "Dial-out number" : "Número de llamada saliente", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número en formato E164 utilizado como número alternativo para llamadas salientes", + "Dial-out prefix" : "Prefijo para llamadas salientes", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefijo para el número configurado del usuario para llamadas salientes (el predeterminado es `+`)", + "Restrict SIP configuration" : "Restringir la configuración SIP", + "Enable SIP configuration" : "Habilitar configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo los usuarios de los siguientes grupos pueden permitir SIP en las conversaciones que moderen", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información se envía por correo electrónico y se muestra en la barra lateral a todos los participantes.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL del backend Talk", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Características disponibles", + "Error: Websocket connection failed" : "Error: La conexión Websocket falló", + "Error code" : "Código de error", + "Error message" : "Mensaje de error", + "Error: Websocket connection failed. Check browser console" : "Error: la conexión Websocket ha fallado. Compruebe la consola del navegador", + "High-performance backend URL" : "URL del motor de alto rendimiento", + "Missing High-performance backend warning hidden" : "La advertencia de falta de backend de alto rendimiento está oculta", + "High-performance backend settings saved" : "Se guardaron las configuraciones del backend de alto rendimiento", + "Nextcloud Talk setup not complete" : "La configuración de Nextcloud Talk no está completa", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Por favor, tenga en cuenta que en llamadas con más de 2 participantes sin el backend de alto rendimiento, los participantes podrían experimentar problemas de conectividad y causará una carga de trabajo alta en los dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale el backend de alto rendimiento para asegurarse de que las llamadas con múltiples participantes funcionen sin interrupciones.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Guía de instalación rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "El backend de alto rendimiento es requerido para llamadas y conversaciones con múltiples participantes. Sin este backend, todos los participantes tienen que enviar su vídeo individualmente a todos los demás participantes, lo que les creará, probablemente, problemas de conectividad y una carga de trabajo alta en sus dispositivos.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Es altamente recomendable configurar una caché distribuida al utilizar Nextcloud Talk con un backend de alto rendimiento.", + "Add High-performance backend server" : "Añadir un servidor backend de alto rendimiento", + "Warn about connectivity issues in calls with more than 2 participants" : "Advertir sobre problemas de conectividad en llamadas con más de 2 participantes.", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "La dirección del servidor no es válida", + "STUN settings saved" : "Configuraciones STUN guardadas", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se usa para determinar la dirección IP pública de participantes que estén tras un router.", + "Add a new STUN server" : "Agregar un servidor STUN nuevo ", + "{schema} scheme must be used with a domain" : "El esquema {schema} debe usarse con un dominio", + "{option1} and {option2}" : "{option1} y {option2}", + "{option} only" : "Solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: El servidor TURN ha devuelto candidatos ICE con éxito", + "Error: No working ICE candidates returned by the TURN server" : "Error: El servidor TURN no ha devuelto candidatos ICE que funcionen", + "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN (Traversal Using Relays around NAT)", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Secreto del servidor TURN", + "TURN server protocols" : "Protocolos de servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para hacer de proxy del tráfico de los participantes trás un firewall. Si los participantes individuales no pueden conectarse a otros, lo más probable es que se necesite un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", + "TURN settings saved" : "Configuraciones TURN guardadas", + "TURN servers" : "Servidores TURN.", + "Add a new TURN server" : "Agregar un servidor TURN nuevo ", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Comprobando …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallo: WebAssembly está deshabilitado o no está soportado por este navegador. Por favor, activa WebAssembly o usa un navegador con soporte para que se haga la comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallo: los archivos \".wasm\" y \".tflite\" no han sido devueltos correctamente por el servidor web. Por favor compruebe la sección \"Requisitos del sistema\" en la documentación de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: los archivos \".wasm\" y \".tflite\" han sido devueltos correctamente por el servidor web", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que la configuración de PHP y Apache no es compatible. Por favor, tenga en cuenta que PHP solo puede usarse con el módulo MPM_PREFORK y que PHP-FPM solo puede usarse con el módulo MPM_EVENT.", + "Web server setup checks" : "Comprobaciones de la configuración del servidor web", + "Files required for virtual background can be loaded" : "Los archivos necesarios para el fondo virtual se pueden cargar", + "Federated user" : "Usuario federado", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas de grupos", + "Number of breakout rooms" : "Número de salas de grupos", + "You can create from 1 to 20 breakout rooms." : "Puede crear desde 1 a 20 salas de grupo.", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar participantes automáticamente", + "Manually assign participants" : "Asignar participantes manualmente", + "Allow participants to choose" : "Permitir a los participantes escoger", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas de grupos", + "Reset" : "Restablecer", + "Delete breakout rooms" : "Eliminar salas de grupos", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Las salas de grupos y las configuraciones actuales se perderán", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes no asignados", + "Back" : "Volver", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Añadir participante «{user}»", + "Now" : "Ahora", + "Invalid calendar selected" : "Se seleccionó un calendario inválido", + "Invalid start time selected" : "Se seleccionó una hora de inicio inválida", + "Invalid end time selected" : "Se seleccionó una hora de finalización inválida", + "Unknown error occurred" : "Ha ocurrido un error desconocido", + "Sending no invitations" : "No se enviarán invitaciones", + "{participant0} will receive an invitation" : "{participant0} recibirá una invitación", + "{participant0} and {participant1} will receive invitations" : "{participant0} y {participant1} recibirán invitaciones", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} y %n otro recibirán invitaciones","{participant0}, {participant1} y %n otros recibirán invitaciones","{participant0}, {participant1} y %n otros recibirán invitaciones"], + "Invite {user}" : "Invitar a {user}", + "Invite all users and emails in this conversation" : "Invitar a todos los usuarios y correos electrónicos en esta conversación", + "Meeting created" : "Reunión creada", + "Upcoming meetings" : "Próximas reuniones", + "Loading …" : "Cargando …", + "No upcoming meetings" : "No hay próximas reuniones", + "Schedule a meeting" : "Programar una reunión", + "Meeting title" : "Título de la reunión", + "From" : "De", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "No other participants to send invitations to." : "No hay otros participantes a los cuales enviar invitaciones.", + "Add attendees" : "Añadir asistentes", + "Save" : "Guardar", + "Search participants" : "Buscar participantes", + "No results" : "Sin resultados", + "Done" : "Listo", + "Disable live transcription" : "Deshabilitar transcripción en vivo", + "Disable live translation" : "Desactivar traducción en vivo", + "Raise hand" : "Levantar la mano", + "Raise hand (R)" : "Levantar mano (R)", + "Lower hand" : "Bajar la mano", + "Lower hand (R)" : "Bajar mano (R)", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista de orador", + "Grid view" : "Vista en cuadrícula", + "Error when trying to load the available live transcription languages" : "Error al intentar cargar los lenguajes de transcripción disponibles", + "Failed to enable live transcription" : "Fallo al habilitar la transcripción en vivo", + "Recording consent is required" : "Es necesario el consentimiento de grabación", + "This conversation is read-only" : "Esta conversación es de solo lectura", + "Conversation not found or not joined" : "No se encuentra la conversación, o no se ha unido a ella", + "Lobby is still active and you're not a moderator" : "La sala de espera sigue activa y Ud. no es un moderador", + "Connection failed" : "La conexión ha fallado", + "Reload" : "Recargar", + "{nickName} raised their hand." : "{nickName} ha levantado la mano", + "A participant raised their hand." : "Alguien ha levantado la mano.", + "Collapse stripe" : "Colapsar franja", + "Expand stripe" : "Expandir franja", + "Previous page of videos" : "Página anterior de vídeos", + "Next page of videos" : "Página siguiente de vídeos", + "Connecting …" : "Conectando …", + "Calling …" : "Llamando …", + "Waiting for {user} to join the call" : "Esperando a que {user} se una a la llamada", + "Waiting for others to join the call …" : "Esperando a otros a unirse a la llamada …", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otros en la pestaña de participantes en la barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puede invitar a otras personas en la pestaña de participantes de la barra lateral o compartir este enlace para invitar a otras personas", + "Share this link to invite others!" : "Comparte este enlace para invitar a otras personas.", + "Copy link" : "Copiar enlace", + "You are not allowed to enable audio" : "No está autorizado a activar el audio", + "No audio. Click to select device" : "Sin audio. Haga click para seleccionar dispositivo", + "Mute audio" : "Silenciar audio", + "Mute audio (M)" : "Silenciar audio (M)", + "Unmute audio" : "Activar audio", + "Unmute audio (M)" : "Escuchar audio (M)", + "None" : "Ninguno", + "Select a microphone" : "Seleccione un micrófono", + "Select a speaker" : "Seleccione un parlante", + "Check devices" : "Comprobar dispositivos", + "Access to camera was denied" : "Se ha denegado el acceso a la cámara", + "Error while accessing camera: It is likely in use by another program" : "Error al acceder a la cámara: puede que la esté usando otro programa", + "Error while accessing camera" : "Error al acceder a la cámara", + "You have been muted by a moderator" : "Has sido silenciado por un moderador", + "Hide presenter video" : "Ocultar video del presentador", + "You are not allowed to enable video" : "No está autorizado a activar el vídeo", + "No video. Click to select device" : "Sin video. Haga click para seleccionar dispositivo", + "Disable video" : "Desactivar video", + "Disable video (V)" : "Desactivar video (V)", + "Enable video" : "Activar vídeo", + "Enable video (V)" : "Activar video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar video - Su conexión será brevemente interrumpida cuando se habilite el video por primera vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar video (V) - Su conexión será interrumpida un instante cuando se active el video por primera vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Active el vídeo. Su conexión será brevemente interrumpida cuando active el vídeo la primera vez", + "Select a video device" : "Seleccione un dispositivo de video", + "Show presenter" : "Mostrar presentador", + "You" : "Tú", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Mostrar pantalla", + "Stop following" : "Dejar de seguir", + "Connection could not be established …" : "No se pudo establecer la conexión …", + "Connection was lost and could not be re-established …" : "Se ha perdido la conexión y no se pudo re-establecer …", + "Connection could not be established. Trying again …" : "No se pudo establecer la conexión. Intentándolo de nuevo …", + "Connection lost. Trying to reconnect …" : "Se ha perdido la conexión. Intentando reconectar …", + "Connection problems …" : "Problemas de conexión …", + "Collapse" : "Colapsar", + "Expand" : "Expendir", + "You need to be logged in to upload files" : "Necesita estar conectado para subir archivos", + "Drop your files to upload" : "Arrastra tus archivos para subir", + "Conversation messages" : "Mensajes de la conversación", + "Scroll to bottom" : "Ir al final", + "Post message" : "Publicar mensaje", + "Federated conversation" : "Conversación federada", + "Public conversation" : "Conversación pública", + "Favorite" : "Favorito", + "Banned users" : "Usuarios bloqueados", + "Manage the list of banned users in this conversation." : "Gestionar la lista de usuarios bloqueados en esta conversación.", + "Manage bans" : "Gestionar bloqueos", + "No banned users" : "No hay usuarios bloqueados", + "Banned by:" : "Bloqueado por:", + "Date:" : "Fecha:", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Unban" : "Desbloquear", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Puede cambiar el título y la descripción en {linkstart} Calendario ↗{linkend}.", + "Error while updating conversation name" : "Error al actualizar el nombre de la conversación", + "Error while updating conversation description" : "Se ha producido un error al actualizar la descripción", + "Enter a name for this conversation" : "Ingrese un nombre para esta conversación", + "Edit conversation name" : "Editar el nombre de la conversación", + "Edit conversation description" : "Editar descripción de la conversación", + "Enter a description for this conversation" : "Introduce una descripción para esta conversación", + "Picture" : "Imagen", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Se pueden habilitar los siguientes bots en esta conversación. Contacte con su administrador para tener más bots instalados en este servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No hay bots instalados en este servidor. Contacte con su administrador para tener más bots instalados en este servidor.", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Salas de grupos", + "Manage breakout rooms" : "Administrar salas de grupos", + "Set up breakout rooms for this conversation" : "Configurar salas de grupos para esta conversación", + "Please select a valid PNG or JPG file" : "Por favor seleccione un archivo PNG o JPG válido.", + "Choose your conversation picture" : "Seleccione su imagen de la conversación", + "Choose" : "Seleccione", + "Error setting conversation picture" : "Error al establecer la imagen de la conversación", + "Could not set the conversation picture: {error}" : "No fue posible establecer la imagen de la conversación: {error}", + "Error cropping conversation picture" : "Error al recortar la imagen de la conversación", + "Error removing conversation picture" : "Error al quitar la imagen de la conversación", + "Set emoji as conversation picture" : "Establecer emoji como imagen de la conversación", + "Set background color for conversation picture" : "Establecer el color de fondo para la imagen de la conversación", + "Upload conversation picture" : "Subir imagen de la conversación", + "Choose conversation picture from files" : "Seleccionar imagen de la conversación desde los archivos", + "Remove conversation picture" : "Eliminar la imagen de la conversación", + "The file must be a PNG or JPG" : "El archivo debe ser un PNG o JPG", + "Set picture" : "Establecer imagen", + "Default permissions modified for {conversationName}" : "Permisos por defecto modificados para {conversationName}", + "Could not modify default permissions for {conversationName}" : "No se pudieron modificar los permisos por defecto para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edita los permisos por defecto de los participantes de esta conversación. Estos ajustes no afectan a los moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen los permisos en esta sección, los permisos personalizados asignados previamente a participantes individuales serán perdidos.", + "All permissions" : "Todos los permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Los participantes tienen permisos para crear una llamada, unirse a una llamada, habilitar audio y vídeo, y compartir su pantalla.", + "Restricted" : "Restringido", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Los participantes pueden unirse a llamadas, pero no pueden habilitar ni su audio ni su vídeo, ni compartir pantalla hasta que un moderador les otorgue estos permisos manualmente.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Ajustes de la conversación", + "Basic Info" : "Información Básica", + "Personal" : "Personal", + "Moderation" : "Moderación", + "Setup overview" : "Resumen de configuración", + "Live transcription" : "Transcripción en vivo", + "Enable live transcription" : "Habilitar transcripción en vivo", + "Breakout Rooms" : "Salas de grupos", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de peligro", + "Archive conversation" : "Archivar conversación", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Las conversaciones archivadas se ocultarán de la lista de conversaciones de forma predeterminada. Sin embargo, aparecerán cuando busque el nombre de la conversación o abra la lista de conversaciones archivadas.", + "Do you really want to leave \"{displayName}\"?" : "¿De verdad quiere abandonar \"{displayName}\"?", + "You can archive this conversation instead." : "Puede archivar esta conversación en su lugar.", + "Leave conversation" : "Abandonar conversación", + "You need to promote a new moderator before you can leave the conversation" : "Debe escoger a un nuevo moderador antes de que pueda abandonar la conversación", + "Delete conversation" : "Borrar conversación", + "Do you really want to delete \"{displayName}\"?" : "¿Estás seguro de que quieres borrar \"{displayName}\"?", + "Error while deleting conversation" : "Error al eliminar una conversación", + "Delete all chat messages" : "Eliminar todos los mensajes del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "¿Realmente desea eliminar todos los mensajes de \"{displayName}\"?", + "Error while clearing chat history" : "Error al borrar el historial del chat", + "Be careful, these actions cannot be undone." : "Tenga cuidado, estas acciones no se pueden deshacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una vez que se abandona una conversación, para reincorporarse a una conversación cerrada se necesita una invitación. Puede volverse a unir a una conversación abierta en cualquier momento.", + "Permanently delete this conversation." : "Eliminar permanentemente esta conversación.", + "Delete chat messages" : "Eliminar los mensajes del chat", + "Permanently delete all the messages in this conversation." : "Eliminar permanentemente todos los mensajes de esta conversación.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días","%n días"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas","%n semanas"], + "Custom expiration time" : "Tiempo de expiración personalizado", + "Message expiration disabled" : "Se deshabilitó la expiración de mensajes", + "Message expiration set: {duration}" : "Se estableció la expiración de mensaje: {duration}", + "Error when trying to set message expiration" : "Se encontró un error al intentar establecer la expiración de mensajes", + "Message expiration" : "Expiración de mensajes", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Los mensajes de chat pueden expirarse luego de cierto tiempo. Nota: Los archivos compartidos en el chat no serán borrados para el propietario, pero no estarán compartidos en la conversación.", + "Set message expiration" : "Establecer la expiración de los mensajes", + "Current message expiration" : "Expiración de los mensajes actual", + "Password copied to clipboard" : "Contraseña copiada al portapapeles", + "Password could not be copied" : "La contraseña no se ha podido copiar", + "Guest access" : "Acceso de invitado", + "Breakout rooms are not allowed in public conversations." : "Las salas de grupos no están permitidas en conversaciones públicas.", + "Allow guests to join this conversation via link" : "Permitir que los invitados se unan a través de un enlace", + "Password protection" : "Protección por contraseña", + "This conversation is password-protected. Guests need password to join" : "Esta conversación está protegida con contraseña. Los invitados necesitan una contraseña para unirse", + "Password protection is needed for public conversations" : "La protección con contraseña es obligatoria para conversaciones públicas", + "Set a password" : "Establecer una contraseña", + "Change password" : "Cambiar contraseña", + "Enter new password" : "Introduzca una nueva contraseña", + "Save password" : "Guardar contraseña", + "Copy password" : "Copiar contraseña", + "Guests are allowed to join this conversation via link" : "Los invitados pueden unirse a esta conversación a través de un enlace", + "Guests are not allowed to join this conversation" : "Los invitados no pueden unirse a esta conversación", + "Resend invitations" : "Reenviar las invitaciones", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversación está abierta a usuarios registrados y a usuarios creados con la app Guests", + "This conversation is open to registered users" : "Esta conversación está abierta a usuarios registrados", + "This conversation is limited to the current participants" : "Esta conversación está limitada a los participantes actuales", + "You opened the conversation to both registered users and users created with the Guests app" : "Ha abierto la conversación tanto a participantes registrados como a usuarios creados con la app Guests", + "Error occurred when opening or limiting the conversation" : "Se ha producido un error al abrir o limitar la conversación", + "Open conversation to registered users, showing it in search results" : "Abrir la conversación a los usuarios registrados, mostrándola en los resultados de búsqueda", + "Also open to users created with the Guests app" : "También abrir la misma a los usuarios creados con la app Guests", + "Open conversation" : "Abrir conversación", + "Set language spoken in calls" : "Establecer el lenguaje hablado en las llamadas", + "Languages could not be loaded" : "Los lenguajes no pudieron ser cargados", + "Loading languages …" : "Cargando lenguajes …", + "Invalid language" : "Idioma inválido", + "Default language (English)" : "Lenguaje predeterminado (Inglés)", + "Default live transcription language set" : "Se ha establecido el lenguaje predeterminado para la transcripción en vivo", + "Live transcription language set: {languageName}" : "Lenguaje de transcripción en vivo establecido: {languageName}", + "Error when trying to set live transcription language" : "Error al intentar establecer el idioma predeterminado de transcripción en vivo", + "Start time: {date}" : "Hora de inicio: {date}", + "Start time has been updated" : "Se ha actualizado la hora de inicio", + "Error occurred while updating start time" : "Se ha producido un error al actualizar la hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Habilitar la sala de espera causará que aquellos usuarios que no sean moderadores sean removidos de la llamada en curso.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar la sala de espera, restringiendo la conversación únicamente a los moderadores", + "Meeting start time" : "Hora de inicio de la reunión", + "Start time (optional)" : "Hora de inicio (opcional)", + "Import email participants" : "Importar participantes por correo electrónico", + "You can import a list of email participants from a CSV file." : "Puede importar una lista de participantes por correo electrónico desde un archivo CSV.", + "Poll drafts" : "Borradores de encuestas", + "Browse poll drafts" : "Explorar borradores de encuestas", + "Error occurred when locking the conversation" : "Se ha producido un error al bloquear la conversación", + "Error occurred when unlocking the conversation" : "Se ha producido un error al desbloquear la conversación", + "Lock conversation" : "Bloquear conversación", + "This will also terminate the ongoing call." : "Esto también terminará la llamada en curso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear la conversación para impedir a cualquiera publicar mensajes o iniciar llamadas.", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Eliminar", + "Add new bridged channel to current conversation" : "Añadir un canal enlazado a la conversación actual", + "unknown state" : "estado desconocido", + "running" : "funcionando", + "not running, check Matterbridge log" : "sin funcionamiento, comprueba el registro de Matterbridge", + "not running" : "sin funcionar", + "Bridge saved" : "Enlace guardado", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puedes enlazar canales de varios sistemas de mensajería instantánea con Matterbridge.", + "More info on Matterbridge" : "Más información sobre Matterbridge", + "Messaging systems" : "Sistemas de mensajería", + "Enable bridge" : "Habilitar enlace", + "Show Matterbridge log" : "Ver registro de Matterbridge", + "Log content" : "Contenido del registro", + "Only moderators are allowed to mention @all" : "Solo los moderadores pueden mencionar a @all", + "All participants are allowed to mention @all" : "Todos los participantes pueden mencionar a @all", + "Participants are now allowed to mention @all." : "Los participantes ahora pueden mencionar a @all", + "Mentioning @all has been limited to moderators." : "La mención a @all ha sido limitada a los moderadores.", + "Allow participants to mention @all" : "Permitir a los participantes mencionar a todos con @all", + "Mention permissions" : "Permisos de mención", + "Notifications" : "Notificaciones", + "Notify about calls in this conversation" : "Notificar llamadas en esta conversación", + "Important conversation" : "Conversación importante", + "\"Do not disturb\" user status is ignored for important conversations" : "El estado \"No molestar\" se ignorará para las conversaciones importantes", + "Sensitive conversation" : "Conversación sensible", + "Message preview will be disabled in conversation list and notifications" : "La vista previa de los mensajes será deshabilitada en la lista de conversaciones y en las notificaciones", + "Recording consent is required for calls in this conversation" : "El consentimiento de grabación es obligatorio para llamadas en esta conversación", + "Recording consent is not required for calls in this conversation" : "El consentimiento de grabación no es obligatorio para llamadas en esta conversación", + "Recording consent requirement was updated" : "Los requisitos de consentimiento de grabación fueron actualizados", + "Error occurred while updating recording consent" : "Error al actualizar los consentimientos de grabación", + "Recording Consent" : "Consentimiento de grabación", + "Recording consent cannot be changed once a call or breakout session has started." : "No se puede cambiar el consentimiento de grabación una vez que una llamada o sesión de salas de grupos ha comenzado", + "Require recording consent before joining call in this conversation" : "Obtener consentimiento de grabación antes de unirse a llamadas en esta conversación", + "Recording consent is required for all calls" : "El consentimiento de grabación es obligatorio para todas las llamadas", + "SIP dial-in is now possible without PIN requirement" : "Ahora es posible la marcación SIP sin necesidad de PIN", + "SIP dial-in is now enabled" : "Se ha habilitado la conexión telefónica SIP", + "SIP dial-in is now disabled" : "Se ha deshabilitado la conexión telefónica SIP", + "Error occurred when enabling SIP dial-in" : "Se ha producido un error al habilitar la conexión telefónica SIP", + "Error occurred when disabling SIP dial-in" : "Se ha producido un error al deshabilitar la conexión telefónica SIP", + "Phone and SIP dial-in" : "Conexión telefónica y marcado SIP ", + "Enable phone and SIP dial-in" : "Habilitar conexión telefónica y marcado SIP", + "Allow to dial-in without a PIN" : "Permitir la marcación sin PIN", + "Ongoing" : "En curso", + "{dayPrefix} {dateTime}" : "{dayPrefix}{dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persona aceptó","%n personas aceptaron","%n personas aceptaron"], + "_%n person declined_::_%n people declined_" : ["%n persona rechazó","%n personas rechazaron","%n personas rechazaron"], + "_and %n other attachment_::_and %n other attachments_" : ["y %n otro adjunto","y otros %n adjuntos","y otros %n adjuntos"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "En {conversation}", + "View attachment" : "Ver adjunto", + "Join" : "Unirse", + "View conversation" : "Ver conversación", + "View event on Calendar" : "Ver evento en Calendar", + "Error while creating the conversation" : "Ocurrió un error al crear la conversación", + "Hello, {displayName}" : "Hola,{displayName}", + "Start meeting now" : "Iniciar reunión ahora", + "Give your meeting a title" : "Asigna un título a tu reunión", + "Create and copy link" : "Crear y copiar enlace", + "Create a new conversation" : "Crear una conversación nueva", + "Join open conversations" : "Unirse a conversaciones abiertas", + "Call a phone number" : "Llamar a un número de teléfono", + "Scroll backward" : "Desplazarse hacia atrás", + "Scroll forward" : "Desplazarse hacia adelante", + "Schedule meetings" : "Programar reuniones", + "You don't have any upcoming meetings" : "No tiene próximas reuniones", + "Open calendar" : "Abrir calendario", + "Unread mentions" : "Menciones sin leer", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Los mensajes donde fue mencionado aparecerán aquí. Puede mencionar a las personas escribiendo @ seguido de su nombre", + "Upcoming reminders" : "Próximos recordatorios", + "Message reminders" : "Recordatorios de mensajes", + "Set a reminder on a message to be notified" : "Establezca un recordatorio en un mensaje para ser notificado", + "Start a group conversation" : "Iniciar una conversación grupal", + "Create conversation" : "Crear conversación", + "Enter your name" : "Escriba su nombre", + "Submit name and join" : "Enviar nombre y unirse", + "Do you already have an account?" : "¿Ya tiene una cuenta?", + "Log in" : "Iniciar sesión", + "Error while verifying uploaded file" : "Error al verificar el archivo cargado", + "Uploaded file is verified" : "El archivo subido ha sido verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "El formato del contenido está separado por comas (CSV):
- Se requiere una línea de cabecera y debe coincidir con \"name\",\"email\" o solamente \"email\"
- Una entrada por línea (p.ej. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Se añadieron los participantes exitosamente", + "Error while adding participants" : "Error al añadir participantes", + "Import a file" : "Importar un archivo", + "Browse" : "Explorar", + "Verifying uploaded file …" : "Verificando el archivo importado …", + "This might take a moment" : "Esto puede tomar un momento", + "Send invitations" : "Enviar invitaciones", + "_%n invalid email_::_%n invalid emails_" : ["%n correo inválido","%n correos inválidos","%n correos inválidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n correo ya importado o duplicado","%n correos ya importados o duplicados","%n correos ya importados o duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitación puede ser enviada","%n invitaciones pueden ser enviadas","%n invitaciones pueden ser enviadas"], + "An error occurred while calling a phone number" : "Ha ocurrido un error al llamar a un número de teléfono", + "Phone number could not be called: {error}" : "No se pudo llamar al número de teléfono: {error}", + "Phone number could not be called" : "No se pudo llamar al número de teléfono", + "Search participants or phone numbers" : "Buscar participantes o números de teléfono", + "Creating the conversation …" : "Creando la conversación …", + "Mark as read" : "Marcar como leído", + "Mark as unread" : "Marcar como no leído", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Añadir a favoritos", + "Unarchive conversation" : "Desarchivar conversación", + "Ignore \"Do not disturb\"" : "Ignorar el estado \"No molestar\"", + "You need to promote a new moderator before you can leave the conversation." : "Necesitas elegir un nuevo moderador antes de que puedas abandonar la conversación", + "Conversation actions" : "Acciones de conversación", + "Notify about calls" : "Notificar sobre llamadas", + "Hide message text" : "Esconder texto del mensaje", + "Pending invitations" : "Invitaciones pendientes", + "From {user} at {remoteServer}" : "De {usuario} en {remoteServer}", + "Decline invitation" : "Declinar invitación", + "Accept invitation" : "Aceptar invitación", + "No pending invitations" : "No hay invitaciones pendientes", + "Home" : "Inicio", + "Unread" : "No leído", + "Mentions" : "Menciones", + "Meetings" : "Reuniones", + "Alphabetically" : "Alfabético", + "No followed threads" : "Sin hilos seguidos", + "No matches found" : "No se han encontrado coincidencias", + "No conversations found" : "No se han encontrado conversaciones", + "You have no archived conversations." : "No tiene conversaciones archivadas.", + "Subscribe to an existing thread or start your own." : "Suscríbase a un hilo existente o inicie uno propio.", + "You have no unread mentions." : "No tiene menciones sin leer.", + "You have no unread messages." : "No tiene mensajes sin leer.", + "An error occurred while performing the search" : "Ha ocurrido un error mientras se realizaba la búsqueda", + "Conversation list" : "Lista de conversaciones", + "Filter conversations by" : "Filtrar conversaciones por", + "Unread messages" : "Mensajes no leídos", + "Meeting conversations" : "Conversaciones de las reuniones", + "Clear filters" : "Limpiar filtros", + "New personal note" : "Nueva nota personal", + "Back to conversations" : "Volver a conversaciones", + "Archived conversations" : "Conversaciones archivadas", + "Threads" : "Hilos", + "Clear filter" : "Borrar filtro", + "Show more threads" : "Mostrar más hilos", + "App settings" : "Configuración de la app", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federados", + "New private conversation" : "Nueva conversación privada", + "Other sources" : "Otras fuentes", + "Open conversations" : "Abrir conversaciones", + "No search results" : "No hay resultados de búsqueda", + "Users, groups and teams" : "Usuarios, grupos y equipos", + "Users and groups" : "Usuarios y grupos", + "Users and teams" : "Usuarios y equipos", + "Groups and teams" : "Grupos y equipos", + "New group conversation" : "Nueva conversación grupal", + "The meeting will start soon" : "La reunión comenzará en breve", + "This meeting is scheduled for {startTime}" : "Esta reunión está programada para {startTime}", + "You are currently waiting in the lobby" : "Ahora estás esperando en la sala de espera.", + "Select microphone" : "Selecciona micrófono", + "No microphone available" : "No hay micrófonos disponibles", + "Select speaker" : "Seleccionar orador", + "No speaker available" : "No hay oradores disponibles", + "Select camera" : "Selecciona cámara", + "No camera available" : "No hay cámaras disponibles", + "Select a device" : "Seleccione un dispositivo", + "Playing …" : "Reproduciendo …", + "Test speakers" : "Probar parlantes", + "Test" : "Prueba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sin sonido", + "No camera" : "No hay cámara", + "Display video as you will see it (mirrored)" : "Mostrar vídeo como Ud. lo verá (espejo)", + "Display video as others will see it" : "Mostrar vídeo como lo verá el resto", + "Calls are not supported in your browser" : "Tu navegador no admite llamadas", + "Access to microphone is only possible with HTTPS" : "El acceso al micrófono solo es posible con HTTPS", + "Access to microphone was denied" : "Se ha denegado el acceso al micrófono", + "Error while accessing microphone" : "Error al acceder al micrófono", + "Access to camera is only possible with HTTPS" : "El acceso a la cámara solo es posible con HTTPS", + "The call is being recorded." : "La llamada está siendo grabada.", + "The call might be recorded." : "La llamada podría ser grabada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La grabación podría incluir su voz, vídeo de su cámara y la pantalla compartida. Es necesario que dé su consentimiento antes de unirse a la llamada.", + "Give consent to the recording of this call" : "Dar mi consentimiento a la grabación de esta llamada", + "Show more info" : "Mostrar más información", + "Audio is not available" : "El audio no está disponible", + "Video is not available" : "El vídeo no está disponible", + "Start recording immediately with the call" : "Iniciar la grabación inmediatamente con la llamada", + "Notify all participants about this call" : "Notificar a todos los participantes de esta llamada", + "Apply settings" : "Aplicar ajustes", + "Select virtual office background" : "Seleccione el fondo virtual de oficina", + "Select virtual home background" : "Seleccione el fondo virtual de casa", + "Select virtual abstract background" : "Seleccione el fondo virtual abstracto", + "Select virtual beach background" : "Seleccione el fondo virtual de playa", + "Select virtual park background" : "Seleccione el fondo virtual de parque", + "Select virtual theater background" : "Seleccione el fondo virtual de teatro", + "Select virtual library background" : "Seleccione el fondo virtual de biblioteca", + "Select virtual space station background" : "Selecicone el fondo virtual de estación espacial", + "Error while uploading the file" : "Ocurrió un error mientras se subía el archivo", + "Select a file" : "Selecciona un archivo", + "Invalid path selected" : "Ruta de archivo seleccionada no válida.", + "Select virtual background from file {fileName}" : "Seleccione el fondo virtual desde el archivo {fileName}", + "Blur" : "Desenfoque", + "Upload" : "Subir", + "Files" : "Archivos", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "El mensaje caducó o ha sido eliminado", + "Cancel quote" : "Cancelar cita", + "24 hours" : "24 horas", + "7 days" : "7 días", + "Until unpin" : "Hasta desfijar", + "Clear reminder – {timeLocale}" : "Quitar recordatorio – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Message text copied to clipboard" : "Texto del mensaje copiado al portapapeles", + "Message text could not be copied" : "El texto del mensaje no pudo ser copiado", + "Message forwarded to \"Note to self\"" : "El mensaje se reenvió a \"Nota personal\"", + "Error while forwarding message to \"Note to self\"" : "Error al reenviar el mensaje a \"Nota personal\"", + "A reminder was successfully removed" : "Se ha eliminado correctamente un recordatorio", + "Error occurred when removing a reminder" : "Ha habido un error al borrar un recordatorio", + "A reminder was successfully set at {datetime}" : "Se ha configurado un recordatorio correctamente a las {datetime}", + "Error occurred when creating a reminder" : "Ocurrió un error al crear un recordatorio", + "Add a reaction to this message" : "Añade una reacción a este mensaje", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Set reminder" : "Establecer recordatorio", + "Pin message" : "Fijar mensaje", + "Unpin message" : "Desfijar mensaje", + "Reply privately" : "Responder en privado", + "Edit message" : "Editar mensaje", + "Copy message" : "Copiar mensaje", + "Copy message link" : "Copiar link del mensaje", + "Go to file" : "Ir al archivo", + "Download file" : "Descargar archivo", + "Go to thread" : "Ir al hilo", + "Edit thread details" : "Editar detalles del hilo", + "Forward message" : "Reenviar mensaje", + "Translate" : "Traducir", + "Set custom reminder" : "Establecer recordatorio personalizado", + "Close reactions menu" : "Cerrar menú de reacciones", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con otro emoji", + "Choose a conversation to forward the selected message." : "Elija una conversación para reenviar el mensaje seleccionado.", + "Error while forwarding message" : "Error al reenviar el mensaje", + "The message has been forwarded to {selectedConversationName}" : "El mensaje ha sido reenviado a {selectedConversationName}", + "Dismiss" : "Descartar", + "Go to conversation" : "Ir a la conversación", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "El mensaje no pudo ser traducido", + "Translation copied to clipboard" : "La traducción se copió al portapapeles", + "Translation could not be copied" : "La traducción no pudo ser copiada", + "Translate message" : "Traducir mensaje", + "Source language to translate from" : "Lenguaje fuente desde el cual traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Lenguaje objetivo al que se hará la traducción", + "Translate to" : "Traducir a", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar texto traducido", + "Send now" : "Enviar ahora", + "Message read by everyone who shares their reading status" : "Mensaje leído por todos los que comparten el estado de lectura", + "Message sent" : "Mensaje enviado", + "Sent without notification" : "Enviado sin notificación", + "Deleting message" : "Eliminando mensaje", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Mensaje eliminado correctamente, pero un robot o Matterbridge está configurado y este mensaje puede haber sido distribuido a otros servicios.", + "Message deleted successfully" : "Mensaje eliminado con éxito", + "Message could not be deleted because it is too old" : "El mensaje no se ha podido eliminar porque es demasiado antiguo", + "Only normal chat messages can be deleted" : "Solo se pueden eliminar mensaje normales del chat", + "An error occurred while deleting the message" : "Ha ocurrido un error al eliminar el mensaje", + "Pinned" : "Fijado", + "Your browser does not support playing audio files" : "Su navegador no admite la reproducción de archivos de audio", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarjeta Deck", + "Remove {fileName}" : "Borrar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n respuesta","%n respuestas","%n respuestas"], + "Sending message" : "Enviando mensaje", + "Failed to send the message. Click to try again" : "No se pudo enviar el mensaje. Haga clic para reintentar", + "Not enough free space to upload file" : "No hay espacio libre suficiente para subir el archivo", + "You cannot send messages to this conversation at the moment" : "No puedes enviar mensajes a esta conversación en este momento", + "Could not update the message" : "No se pudo actualizar el mensaje", + "You voted" : "Has votado", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Borrador de encuesta • %n opción","Borrador de encuesta • %n opciones","Borrador de encuesta • %n opciones"], + "_%n vote_::_%n votes_" : ["%n voto","%n votos","%n votos"], + "Edit poll draft" : "Editar borrador de encuesta", + "Delete poll draft" : "Eliminar borrador de encuesta", + "Open poll" : "Abrir encuesta", + "See results" : "Mostrar resultados", + "Reactions" : "Reacciones", + "No permission to post reactions in this conversation" : "No está permitido publicar reacciones en esta conversación", + "and {participant}" : "y {participant}", + "_and %n other participant_::_and %n other participants_" : ["y %n otro participante","y %n otros participantes","y %n otros participantes"], + "Show all reactions" : "Mostrar todas las reacciones", + "Add more reactions" : "Añadir más reacciones", + "Show or collapse system messages" : "Expandir o contraer mensajes del sistema", + "No messages" : "No hay mensajes", + "All messages have expired or have been deleted." : "Todos los mensajes han expirado o han sido eliminados.", + "{author} (pinned by you)" : "{author} (fijado por ti)", + "Unpin" : "No fijar", + "Cancel search" : "Cancelar búsqueda", + "Add a phone number" : "Añadir un número de teléfono", + "Error: A password is required to create the conversation." : "Error: La contraseña es necesaria para crear la conversación.", + "All set, the conversation \"{conversationName}\" was created." : "Todo listo, la conversación \"{conversationName}\" fue creada.", + "Create a new group conversation" : "Crear nueva conversación en grupo", + "Add participants" : "Añadir participantes", + "Maximum length exceeded ({maxlength} characters)" : "Tamaño máximo excedido ({maxlength} caracteres)", + "Conversation visibility" : "Visibilidad de la conversación", + "Allow guests to join via link" : "Permitir que los invitados se unan a través de un enlace", + "Enter password" : "Introduzca la contraseña", + "This conversation has been locked" : "Se ha bloqueado esta conversación", + "No permission to post messages in this conversation" : "No tienes permiso para publicar mensajes en esta conversación", + "Joining conversation …" : "Uniéndose a la conversación...", + "Write a message without notification" : "Escribir un mensaje sin notificación", + "Create a thread silently" : "Crear un hilo de manera silenciosa", + "Create a thread" : "Crear un hilo", + "Send message silently" : "Enviar mensaje en forma silenciosa", + "Send message" : "Enviar mensaje", + "Send without notification" : "Enviar sin notificación", + "The participant will not be notified about new messages" : "El participante no será notificado de nuevos mensajes", + "Participants will not be notified about new messages" : "Los participantes no serán notificados de nuevos mensajes", + "Thread title is required" : "Se requiere un título para el hilo", + "Message text is required" : "El texto del mensaje es requerido", + "The message could not be edited" : "El mensaje no pudo ser editado", + "File to share" : "Archivo que compartir", + "File upload is not available in this conversation" : "La subida de archivos no está disponible en esta conversación", + "Add emoji" : "Añadir emoji", + "Adding a mention will only notify users who did not read the message." : "Añadir una mención solo notificará a los usuarios que no han leído el mensaje.", + "Thread title" : "Título del hilo", + "Send later" : "Enviar más tarde", + "Cancel editing" : "Cancelar edición", + "Schedule message" : "Programar mensaje", + "{user} is out of office and might not respond." : "{user} está fuera de la oficina y es posible que no responda", + "Absence period: {startDate} - {endDate}" : "Período de ausencia: {startDate} - {endDate}", + "Replacement:" : "Reemplazo:", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde Archivos", + "Share files to the conversation" : "Compartir archivos en la conversación", + "Upload from device" : "Subir desde dispositivo", + "Create new poll" : "Crear nueva votación", + "Smart picker" : "Selector inteligente", + "Record voice message" : "Grabar mensaje de voz", + "End recording and send" : "Finalizar grabación y enviar", + "Dismiss recording" : "Descartar grabación", + "Access to the microphone was denied" : "El acceso al micrófono fue denegado", + "Microphone either not available or disabled in settings" : "El micrófono no está disponible o está desactivado en los ajustes", + "Error while recording audio" : "Error al grabar el audio", + "Generating summary of unread messages …" : "Generando resumen de mensajes no leídos …", + "Summary is AI generated and might contain mistakes" : "El resumen se genera mediante IA y puede contener errores", + "Error occurred during a summary generation" : "Ha ocurrido un error al generar el resumen", + "New file" : "Nuevo archivo", + "Blank" : "Vacío", + "Error while creating file" : "Ha ocurrido un error al crear el archivo", + "Create and share a new file" : "Crear y compartir un archivo nuevo", + "Name of the new file" : "Nombre del archivo nuevo", + "Create file" : "Crear archivo", + "Someone is typing …" : "Alguien está escribiendo …", + "{user1} is typing …" : "{user1} está escribiendo …", + "{user1} and {user2} are typing …" : "{user1} y {user2} están escribiendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} están escribiendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n otro están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …"], + "Add more files" : "Añadir más archivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "En esta conversación {user} puede:", + "Edit default permissions for participants in {conversationName}" : "Editar permisos por defecto para los participantes en {conversationName}", + "Start a call" : "Iniciar una llamada", + "Skip the lobby" : "Saltarse la sala de espera", + "Can post messages and reactions" : "Puede publicar mensajes y reacciones", + "Enable the microphone" : "Habilitar el micrófono", + "Enable the camera" : "Habilitar la cámara", + "Share the screen" : "Compartir la pantalla", + "Update permissions" : "Actualizar permisos", + "Updating permissions" : "Actualizando permisos", + "No poll drafts" : "No hay borradores de encuestas", + "There is no poll drafts yet saved for this conversation" : "No hay borradores de encuestas guardados todavía para esta conversación", + "Create poll in {name}" : "Crear encuesta en {name}", + "Create poll" : "Crear votación", + "Error while importing poll" : "Error al importar encuesta", + "Question" : "Pregunta", + "Ask a question" : "Hacer una pregunta", + "Import draft from file" : "Importar un borrador desde un archivo", + "Answers" : "Respuestas", + "Answer {option}" : "Respuesta {option}", + "Delete poll option" : "Borrar opción de la encuesta", + "Add answer" : "Añadir respuesta", + "Settings" : "Ajustes", + "Anonymous poll" : "Encuesta anónima", + "Multiple answers" : "Múltiples respuestas", + "Save as draft" : "Guardar como borrador", + "Export draft to file" : "Exportar borrador a archivo", + "You voted for this option" : "Ud. Votó por esta opción", + "End poll" : "Cerrar la encuesta", + "Change your vote" : "Cambiar su voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votados", + "Send a message to \"{roomName}\"" : "Enviar mensaje a \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Mostrar lista de participantes", + "Assistance requested in {roomName}" : "Se solicitó asistencia en {roomName}", + "The message was sent to \"{roomName}\"" : "El mensaje fue enviado a \"{roomName}\"", + "Dismiss request for assistance" : "Descartar solicitud de asistencia", + "Send message to room" : "Enviar mensaje a sala", + "Back to main room" : "Volver a la sala principal", + "Back to your room" : "Volver a su sala", + "Message all rooms" : "Enviar un mensaje a todas las salas", + "Start session" : "Iniciar la sesión", + "Start a call before you start a breakout room session" : "Inicie una llamada antes de iniciar una sesión de salas de grupos", + "Stop session" : "Detener la sesión", + "The message was sent to all breakout rooms" : "El mensaje fue enviado a todas las salas de grupos", + "Send a message to all breakout rooms" : "Enviar mensaje a todas las salas de grupos", + "Breakout rooms are not started" : "No se han iniciado las salas de grupos", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Las llamadas sin el backend de alto rendimiento pueden ocasionar problemas de conectividad y un alto nivel de trabajo en los dispositivos. {linkstart}Más información{linkend} ", + "Talk setup incomplete" : "La configuración de Talk no está completa", + "Disable lobby" : "Desactivar sala de espera", + "Settings for participant \"{user}\"" : "Ajustes para participante «{user}»", + "Participant \"{user}\"" : "Participante «{user}»", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "invitado", + "Ringing …" : "Sonando …", + "Call rejected" : "Llamada rechazada", + "{time} talking …" : "{time} conversando …", + "{time} talking time" : "{time} tiempo de conversación", + "Raised their hand" : "Levantaron la mano", + "Joined with video" : "Participa con vídeo", + "Joined via phone" : "Participa por teléfono", + "Joined with audio" : "Participa con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El texto debe ser menor o igual a {maxLength} caracteres. Su texto actual tiene {charactersCount} caracteres.", + "Remove group and members" : "Eliminar grupo y miembros", + "Remove team and members" : "Eliminar equipo y miembros", + "Remove participant" : "Eliminar participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "¿Realmente desea eliminar el grupo \"{displayName}\" y a todos sus miembros de esta conversación?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "¿Realmente desea eliminar el equipo \"{displayName}\" y a todos sus miembros de esta conversación?", + "Do you really want to remove {displayName} from this conversation?" : "¿Realmente desea eliminar a {displayName} de esta conversación?", + "Notification was sent to {displayName}" : "La notificación fue enviada a {displayName}", + "Could not send notification to {displayName}" : "No se ha podido enviar la notificación a {displayName}", + "Permissions granted to {displayName}" : "Se han otorgado permisos a {displayName}", + "Could not modify permissions for {displayName}" : "No se ha podido modificar los permisos para {displayName}", + "Permissions removed for {displayName}" : "Permisos borrados para {displayName}", + "Permissions set to default for {displayName}" : "Se establecieron los permisos predeterminados para {displayName}", + "Phone number could not be hung up" : "El número de teléfono no se pudo colgar", + "Phone number could not be put on hold" : "El número de teléfono no se pudo poner en espera", + "Phone number could not be muted" : "No se pudo silenciar el número de teléfono", + "Phone number could not be unmuted" : "No se pudo de-silenciar el número de teléfono", + "DTMF message could not be sent" : "No se pudo enviar el mensaje DTMF", + "Phone number copied to clipboard" : "Número de teléfono copiado al portapapeles", + "Phone number could not be copied" : "No se pudo copiar el número de teléfono", + "in the lobby" : "en la sala de espera", + "Dial out phone" : "Teléfono para llamadas salientes", + "Hang up phone" : "Colgar el teléfono", + "Move back to lobby" : "Regresar a la sala de espera", + "Move to conversation" : "Mover a la conversación", + "Dial-in PIN" : "PIN de llamada", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Elevar a moderador", + "Resend invitation" : "Reenviar invitación", + "Send call notification" : "Enviar notificación de llamada", + "Dial out phone number" : "Número de teléfono de llamadas salientes", + "Resume call for phone number" : "Continuar llamada a número de teléfono", + "Put phone number on hold" : "Poner número de teléfono en espera", + "Unmute phone number" : "De-silenciar número de teléfono", + "Mute phone number" : "Silenciar número de teléfono", + "Copy phone number" : "Copia número de teléfono", + "Reset custom permissions" : "Restaurar permisos personalizados", + "Grant all permissions" : "Otorgar todos los permisos", + "Remove all permissions" : "Revocar todos los permisos", + "Also ban from this conversation" : "También bloquear de esta conversación", + "Internal note (reason to ban)" : "Nota interna (razón para el bloqueo)", + "Remove" : "Quitar", + "Permissions modified for {displayName}" : "Permisos modificados para {displayName}", + "Add users, groups or teams" : "Añadir usuarios, grupos o equipos", + "Add users or groups" : "Añadir usuarios o grupos", + "Add users or teams" : "Añadir usuarios o equipos", + "Add users" : "Añadir usuarios", + "Add groups or teams" : "Añadir grupos o equipos", + "Add groups" : "Añadir grupos", + "Add teams" : "Añadir equipos", + "Add other sources" : "Añade otros orígenes", + "Add emails" : "Añade correos electrónicos", + "Integrations" : "Integraciones", + "Add federated users" : "Añadir usuarios federados", + "Searching …" : "Buscando …", + "Search for more users" : "Buscar más usuarios", + "You can search or add participants via name, email, or Federated Cloud ID" : "Puedes buscar o añadir participantes por nombre, correo o ID de nube federada", + "Search or add participants" : "Buscar o añadir participantes", + "Invitation was sent to {actorId}" : "Se ha enviado la invitación a {actorId}.", + "An error occurred while adding the participants" : "Se ha producido un error al añadir los participantes", + "A new group conversation with selected participant will be created" : "Se creará una nueva conversación grupal con el participante seleccionado", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir chat", + "You have new unread messages in the chat." : "Tiene nuevos mensajes sin leer en el chat.", + "You have been mentioned in the chat." : "Se le ha mencionado en el chat.", + "Search messages" : "Buscar mensajes", + "Chat" : "Chat", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "Search in {name}" : "Buscar en {name}", + "Threads in {name}" : "Hilos en {name}", + "{actor} in {conversation}" : "{actor} en {conversation}", + "Search messages …" : "Buscar mensajes …", + "Search options" : "Opciones de búsqueda", + "From User" : "Del usuario", + "Since" : "Desde", + "Until" : "Hasta", + "No results found" : "No se encontraron resultados", + "Load more results" : "Cargar más resultados", + "Recent threads" : "Hilos recientes", + "Projects" : "Proyectos", + "No shared items" : "No hay elementos compartidos", + "Thread notifications" : "Notificaciones para hilos", + "Thread actions" : "Acciones del hilo", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enlace a una conversación", + "No open conversations found" : "No se encontraron conversaciones abiertas", + "Either there are no open conversations or you joined all of them." : "O bien no existen conversaciones abiertas, o, se unió a todas.", + "Check spelling or use complete words." : "Chequee la ortografía o utilice palabras completas.", + "Search conversations or users" : "Buscar conversaciones o usuarios", + "Select conversation" : "Selecciona conversación", + "Number length is not valid" : "La longitud del número no es válida", + "Region code is not valid" : "El código de región no es válido", + "Number length is too short" : "El número es demasiado corto", + "Number length is too long" : "El número es demasiado largo", + "Number is not valid" : "El número no es válido", + "Phone numbers" : "Números de teléfono", + "Display name: {name}" : "Nombre mostrado: {name}", + "Edit display name" : "Editar nombre mostrado", + "Display name (required)" : "Nombre a mostrar (requerido)", + "Save name" : "Guardar nombre", + "Error while setting personal setting" : "Error al guardar sus ajustes personales", + "Error while saving sounds setting" : "Error al guardar la configuración de sonidos", + "Play sounds when participants join or leave a call" : "Reproducir sonidos cuando los participantes se unen o abandonan una llamada", + "Notification settings" : "Configuraciones de notificación", + "Default language" : "Idioma predeterminado", + "Select location for attachments" : "Seleccionar ubicación para los adjuntos", + "Error while setting attachment folder" : "Error al fijar la carpeta para los archivos adjuntos", + "Error while setting read status privacy" : "Error al ajustar la privacidad de la confirmación", + "Error while setting typing status privacy" : "Error al ajustar la privacidad del estado de escritura", + "Error while setting default media state" : "Error al guardar el estado predeterminado de sus dispositivos", + "Privacy" : "Privacidad", + "Attachments folder" : "Carpeta de adjuntos", + "Toggle full screen" : "Cambiar a pantalla completa", + "Search" : "Buscar", + "Focus the chat input" : "Foco en la entrada del chat", + "Unfocus the chat input to use shortcuts" : "Quitar el foco de la entrada del chat para usar atajos", + "Edit your last message" : "Editar su último mensaje", + "Shortcuts while in a call" : "Atajos durante una llamada", + "Camera on and off" : "Encendido y apagado de la cámara", + "Microphone on and off" : "Micrófono encendido y apagado", + "Raise or lower hand" : "Levantar o bajar la mano", + "Push to talk or push to mute" : "Pulsar para hablar o para silenciar", + "Zoom-in / zoom-out a screen share" : "Acercar / Alejar una pantalla compartida", + "Mouse wheel" : "Rueda del ratón", + "Start call silently" : "Iniciar llamada en silencio", + "Start call" : "Comenzar llamada", + "End call" : "Finalizar llamada", + "This call has just ended" : "Esta llamada acaba de finalizar", + "You will be able to join the call only after a moderator starts it." : "Podrás unirte a la llamada cuando la inicie un moderador.", + "End call for everyone" : "Finalizar llamada para todos", + "Starting the recording" : "Empezar la grabación", + "Recording" : "Grabando", + "The call has been running for one hour." : "La llamada ha estado activa por una hora.", + "Cancel recording start" : "Cancelar el inicio de la grabación", + "Stop recording" : "Detener grabación", + "Send a reaction" : "Enviar una reacción", + "React with {reaction}" : "Reaccionar con {reaction}", + "All tasks done!" : "¡Todas las tareas han sido completadas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarea","{done} de %n tareas","{done} de %n tareas"], + "Add participants to this call" : "Añadir participantes a esta llamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante en la llamada","%n participantes en la llamada","%n participantes en la llamada"], + "Scheduled messages" : "Mensajes programados", + "You are not allowed to enable screensharing" : "No está autorizado a activar el uso compartido de la pantalla", + "No screensharing" : "Sin compartición de pantalla", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Activar compartir pantalla", + "Bad sent video and screen quality." : "Mala calidad de vídeo y pantalla compartida.", + "Bad sent screen quality." : "Mala calidad de pantalla compartida.", + "Bad sent video quality." : "Mala calidad de vídeo.", + "Bad sent audio, video and screen quality." : "Mala calidad de audio, vídeo y pantalla compartida.", + "Bad sent audio and screen quality." : "Mala calidad de audio y pantalla compartida.", + "Bad sent audio and video quality." : "Mala calidad de audio y vídeo.", + "Bad sent audio quality." : "Mala calidad de audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Su conexión a internet o su ordenador están saturados y puede que otros participantes no vean su pantalla. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Disable background blur" : "Deshabilitar el desenfoque del fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Su conexión a internet o su ordenador están saturados y puede que otros participantes no vean su pantalla. Para mejorar la situación, intente desactivar su vídeo mientras esté compartiendo su pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan ver tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tu conexión de internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan verte.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle o verle. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte ni verte. Para mejorar la situación, prueba a desactivar el vídeo mientras compartas tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle y verle. Para mejorar esta situación, intente desactivar el desenfoque del fondo o su vídeo mientras esté compartiendo su pantalla.", + "Disable screenshare" : "Deshabilitar compartir pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Su conexión a internet o su ordenador están saturados y quizás otros participantes no puedan entenderle o verle. Para mejorar la situación, intente desactivar el desenfoque del fondo o su vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte ni verte. Para mejorar la situación, prueba a desactivar tu cámara.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tu conexión a internet o tu ordenador tienen demasiada carga y quizás algunos participantes no puedan oírte.", + "Screen sharing is not supported by your browser." : "Tu navegador no admite compartir pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página sea cargada a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página sea cargada a través de HTTPS.", + "An error occurred while starting screensharing." : "Ocurrió un error al inciar el compartir pantalla", + "Select virtual background" : "Seleccione fondo virtual", + "Show your screen" : "Muestre su pantalla", + "Stop screensharing" : "Detenga el compartir pantalla", + "Mute others" : "Silenciar a los demás", + "Start recording" : "Empezar a grabar", + "Set up breakout rooms" : "Configurar salas de grupos", + "Download attendance list" : "Descargar lista de asistentes", + "Open Calendar" : "Abrir Calendario", + "Remove participant {name}" : "Quitar participante {name}", + "Would you like to delete this conversation?" : "¿Desea eliminar esta conversación?", + "Are you sure you want to delete this conversation?" : "¿Está seguro que quiere eliminar esta conversación?", + "Delete now" : "Eliminar ahora", + "Keep" : "Conservar", + "Open dialpad" : "Abrir marcador", + "Select a region" : "Seleccione una región", + "Local time: {time}" : "Hora local: {time}", + "Search …" : "Buscar …", + "Message without mention" : "Mensaje sin mencionar", + "Mention myself" : "Mencionarme a mí mismo", + "Mention everyone" : "Mencionar a todos", + "Select a conversation" : "Seleccione una conversación", + "Select a mode" : "Seleccione un modo", + "You do not have permissions to access this conversation." : "No tiene permiso para acceder a esta conversación.", + "Join a different conversation or start a new one." : "Únase a otra conversación o inicie una nueva.", + "The conversation does not exist" : "La conversación no existe", + "Join a conversation or start a new one!" : "¡Únete a una conversación o inicia una nueva!", + "Duplicate session" : "Sesión duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Creando y uniéndose a una conversación con \"{userid}\"", + "Join a conversation or start a new one" : "Únete a una conversación o empieza una nueva", + "Error while joining the conversation" : "Error mientras se unía a la conversación", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contraseña de usuario", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Omitir verificación TLS", + "Matrix server URL" : "URL del servidor de Matrix", + "User" : "Usuario", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nombre del equipo", + "Channel name" : "Nombre del canal", + "Rocket.Chat server URL" : "URL del servidor de RocketChat", + "User name or email address" : "Nombre de usuario o dirección de email", + "Rocket.Chat channel" : "Canal de Rocket.Chat", + "Zulip server URL" : "URL del servidor Zulip", + "Bot user name" : "Nombre de usuario del bot", + "Bot API key" : "Clave de API del bot", + "Zulip channel" : "Canal de Zulip", + "API token" : "Token de API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "Nombre o ID del servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID del canal (con el prefijo \"ID:\") o nombre", + "Channel" : "Canal", + "Login" : "Iniciar sesión", + "Chat ID" : "ID del chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL del servidor IRC (p. ej., chat.freenode.net:6667)", + "Nickname" : "Alias", + "Connection password" : "Contraseña de la conexión", + "IRC channel" : "Canal IRC", + "Channel password" : "Contraseña del canal", + "NickServ nickname" : "Alias de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID de inquilino", + "Client ID" : "ID de cliente", + "Team ID" : "ID del equipo", + "Thread ID" : "ID del hilo", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Medios", + "Polls" : "Encuestas", + "Deck cards" : "Tarjetas Deck", + "Voice messages" : "Mensajes de voz", + "Locations" : "Ubicaciones", + "Call recordings" : "Llamadas grabadas", + "Audio" : "Audio", + "Show all media" : "Mostrar todos los medios", + "Show all files" : "Mostrar todos los archivos", + "Show all polls" : "Mostrar todas las encuestas", + "Show all deck cards" : "Mostrar todas las tarjetas deck", + "Show all voice messages" : "Mostrar todos los mensajes de voz", + "Show all locations" : "Mostrar todas las ubicaciones", + "Show all call recordings" : "Mostrar todas las llamadas grabadas", + "Show all audio" : "Mostrar todo el audio", + "Show all other" : "Mostrar todo lo demás", + "Follow conversation settings" : "Seguir los ajustes de la conversación", + "Group" : "Grupo", + "Team" : "Equipo", + "You reconnected to the call" : "Ud. re-conectó la llamada", + "{actor} reconnected to the call" : "{actor} se ha re-conectado a la llamada", + "You added {user0} and {user1}" : "Añadió a {user0} y {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Añadió a {user0}, {user1} y a %n participante más","Añadió a {user0}, {user1} y a %n participantes más","Añadió a {user0}, {user1} y a %n participantes más"], + "An administrator added you and {user0}" : "Un administrador lo ha añadido a Ud. y a {user0}", + "{actor} added you and {user0}" : "{actor} lo ha añadido a Ud. y a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrador lo ha añadido a Ud., {user0} y a %n participante más","Un administrador lo ha añadido a Ud., {user0} y a %n participantes más","Un administrador lo ha añadido a Ud., {user0} y a %n participantes más"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lo ha añadido a Ud., {user0} y a %n participante más","{actor} lo ha añadido a Ud., {user0} y a %n participantes más","{actor} lo ha añadido a Ud., {user0} y a %n participantes más"], + "An administrator added {user0} and {user1}" : "Un administrador añadió a {user0} y a {user1}", + "{actor} added {user0} and {user1}" : "{actor} añadió a {user0} y a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrador ha añadido a {user0}, {user1} y a %n participante más","Un administrador ha añadido a {user0}, {user1} y a %n participantes más","Un administrador ha añadido a {user0}, {user1} y a %n participantes más"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha añadido a {user0}, {user1} y a %n participante más","{actor} ha añadido a {user0}, {user1} y a %n participantes más","{actor} ha añadido a {user0}, {user1} y a %n participantes más"], + "You removed {user0} and {user1}" : "Ud. eliminó a {user0} y {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Ud. eliminó a {user0} y {user1} y a %n participante más","Ud. eliminó a {user0} y {user1} y a %n participantes más","Ud. eliminó a {user0} y {user1} y a %n participantes más"], + "An administrator removed you and {user0}" : "Un administrador lo eliminó a Ud. y a {user0}", + "{actor} removed you and {user0}" : "{actor} lo eliminó a Ud. y a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrador lo ha eliminado a Ud., a {user0} y a %n participante más","Un administrador lo ha eliminado a Ud., a {user0} y a %n participantes más","Un administrador lo ha eliminado a Ud., a {user0} y a %n participantes más"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} lo ha eliminado a Ud., a {user0} y a %n participante más","{actor} lo ha eliminado a Ud., a {user0} y a %n participantes más","{actor} lo ha eliminado a Ud., a {user0} y a %n participantes más"], + "An administrator removed {user0} and {user1}" : "Un administrador eliminó a {user0} y a {user1}", + "{actor} removed {user0} and {user1}" : "{actor0} eliminó a {user0} y a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrador ha eliminado a {user0}, {user1} y a %n participante más","Un administrador ha eliminado a {user0}, {user1} y a %n participantes más","Un administrador ha eliminado a {user0}, {user1} y a %n participantes más"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eliminó a {user0}, {user1} y a %n participante más","{actor} eliminó a {user0}, {user1} y a %n participantes más","{actor} eliminó a {user0}, {user1} y a %n participantes más"], + "You and {user0} joined the call" : "Ud. y {user0} se unieron a la llamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ud., {user0} y %n participante más se ha unido a la llamada","Ud., {user0} y %n participantes más se han unido a la llamada","Ud., {user0} y %n participantes más se han unido a la llamada"], + "{user0} and {user1} joined the call" : "{user0} y {user1} se unieron a la llamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} y %n participante más se unieron a la llamada","{user0}, {user1} y %n participantes más se unieron a la llamada","{user0}, {user1} y %n participantes más se unieron a la llamada"], + "You and {user0} left the call" : "Ud. y {user0} abandonaron la llamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ud., {user0} y %n participante más abandonaron la llamada","Ud., {user0} y %n participantes más abandonaron la llamada","Ud., {user0} y %n participantes más abandonaron la llamada"], + "{user0} and {user1} left the call" : "{user0} y {user1} abandonaron a la llamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} y %n participante más abandonaron la llamada","{user0}, {user1} y %n participantes más abandonaron la llamada","{user0}, {user1} y %n participantes más abandonaron la llamada"], + "You promoted {user0} and {user1} to moderators" : "Ud. ha ascendido a {user0} y a {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Ud. ha ascendido a {user0}, {user1} y a %n participante más a moderadores","Ud. ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","Ud. ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Un administrador lo ha ascendido a Ud. y a {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} lo ha ascendido a Ud. y a {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrador lo ha ascendido a Ud., {user0} y a %n participante más a moderadores","Un administrador lo ha ascendido a Ud., {user0} y a %n participantes más a moderadores","Un administrador lo ha ascendido a Ud., {user0} y a %n participantes más a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} le ha ascendido a Ud., {user0} y a %n participante más a moderadores","{actor} le ha ascendido a Ud., {user0} y a %n participantes más a moderadores","{actor} le ha ascendido a Ud., {user0} y a %n participantes más a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrador ha ascendido a {user0} y a {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha ascendido a {user0} y a {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrador ha ascendido a {user0}, {user1} y a %n participante más a moderadores","Un administrador ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","Un administrador ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha ascendido a {user0}, {user1} y a %n participante más a moderadores","{actor} ha ascendido a {user0}, {user1} y a %n participantes más a moderadores","{actor} ha ascendido a {user0}, {user1} y a %n participantes más a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Ud. degradó a {user0} y a {user1} de su estatus de moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Ud. degradó a {user0}, {user1} y a %n participante de su estatus de moderadores","Ud. degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores","Ud. degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "An administrator demoted you and {user0} from moderators" : "Un administrador lo ha degradado a Ud. y a {user0} de su estatus de moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} lo ha degradado a Ud. y a {user0} de su estatus de moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrador lo ha degradado a Ud., {user0} y %n participante más de su estatus de moderadores","Un administrador lo ha degradado a Ud., {user0} y %n participantes más de su estatus de moderadores","Un administrador lo ha degradado a Ud., {user0} y %n participantes más de su estatus de moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} lo ha degradado a Ud., {user0} y a %n participante de su estatus de moderadores","{actor} lo ha degradado a Ud., {user0} y a %n participantes más de su estatus de moderadores","{actor} lo ha degradado a Ud., {user0} y a %n participantes más de su estatus de moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrador degradó a {user0} y a {user1} de su estatus de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degradó a {user0} y a {user1} de su estatus de moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrador degradó a {user0}, {user1} y a %n participante más de su estatus de moderadores","Un administrador degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores","Un administrador degradó a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha degradado a {user0}, {user1} y a %n participante más de su estatus de moderadores","{actor} ha degradado a {user0}, {user1} y a %n participantes más de su estatus de moderadores","{actor} ha degradado a {user0}, {user1} y a %n participantes más de su estatus de moderadores"], + "You:" : "Usted:", + "You: {lastMessage}" : "Tú: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editado por ud.)", + "(edited by a deleted user)" : "(fue editado por un usuario eliminado)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Estás intentando unirte a una conversación mientras tienes activa una sesión en otra ventana o dispositivo. Nextcloud Talk no admite esto en la actualidad. ¿Qué prefieres hacer?", + "Leave this page" : "Abandonar esta página", + "Join here" : "Unirte aquí", + "Deck card has been posted to {conversation}" : "La tarjeta Deck del tablero ha sido publicada a {conversation}", + "An error occurred while posting deck card to conversation" : "Se ha producido un error al publicar la tarjeta de Deck en la conversación", + "Post to a conversation" : "Publicar en una conversación", + "Post to conversation" : "Publicar en la conversación", + "The recording failed. Please contact your administrator." : "La grabación falló. Por favor, contacte a su administrador.", + "Location has been posted to {conversation}" : "La ubicación se ha publicado en {conversation}", + "An error occurred while posting location to conversation" : "Se ha producido un error al publicar la ubicación en la conversación", + "Share to a conversation" : "Compartir en una conversación", + "Share to conversation" : "Compartir en la conversación", + "In conversation" : "En la conversación", + "Search in conversation: {conversation}" : "Buscar en la conversación: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Sus solicitudes están siendo limitadas debido a la protección contra ataques de fuerza bruta", + "Error while clearing conversation history" : "Error al vaciar el historial de conversaciones", + "Error occurred while allowing guests" : "Se ha producido un error al permitir invitados", + "Error occurred while disallowing guests" : "Se ha producido un error al prohibir invitados", + "Error occurred when restricting the conversation to moderator" : "Se ha producido un error al restringir la conversación a los moderadores", + "Error occurred when opening the conversation to everyone" : "Se ha producido un error al abrir la conversación a todo el mundo", + "Conversation password has been saved" : "Se ha guardado la contraseña de la conversación", + "Conversation password has been removed" : "Se ha eliminado la contraseña de la conversación", + "Error occurred while saving conversation password" : "Se ha producido un error al guardar la contraseña", + "Call recording is starting." : "La grabación de la llamada está comenzando.", + "Call recording stopped while starting." : "La grabación de la llamada se detuvo mientras comenzaba.", + "Call recording stopped. You will be notified once the recording is available." : "Se detuvo la grabación de la llamada. Se le notificará cuando la grabación esté disponible.", + "Conversation picture set" : "Se ha establecido la imagen de la conversación", + "Conversation picture deleted" : "Se eliminó la imagen de la conversación", + "Could not delete the conversation picture" : "No fue posible eliminar la imagen de la conversación", + "Could not remove the automatic expiration" : "No se pudo borrar la expiración automática", + "Could not post message: {errorMessage}" : "No se ha podido publicar el mensaje: {errorMessage}", + "Participant is banned successfully" : "El participante fue bloqueado exitosamente", + "Error while banning the participant" : "Error al bloquear al participante", + "An error occurred while fetching the participants" : "Ha ocurrido un error al recuperar los participantes", + "Could not send invitation to {actorId}" : "No se ha enviado la invitación a {actorId}.", + "Invitations sent" : "Invitaciones enviadas", + "Error occurred when sending invitations" : "Se ha producido un error al enviar las invitaciones", + "Failed to join the conversation." : "Error al unirse a la conversación.", + "An error occurred while creating breakout rooms" : "Ocurrió un error mientras se creaban las salas de grupos", + "An error occurred while re-ordering the attendees" : "Ocurrió un error mientras se reordenaban los asistentes", + "An error occurred while deleting breakout rooms" : "Ocurrió un error mientras se eliminaban las salas de grupos", + "An error occurred while starting breakout rooms" : "Ocurrió un error mientras se iniciaban las salas de grupos", + "An error occurred while stopping breakout rooms" : "Ocurrió un error mientras se detenían las salas de grupos", + "An error occurred while sending a message to the breakout rooms" : "Ocurrió un error mientras se enviaba un mensaje a las salas de grupos", + "An error occurred while requesting assistance" : "Ocurrió un error mientras se solicitaba asistencia", + "An error occurred while resetting the request for assistance" : "Ocurrió un error mientras se restablecía la solicitud de asistencia", + "An error occurred while joining breakout room" : "Ha ocurrido un error al unirse a la sala de grupos", + "Failed to rename the thread" : "Fallo al renombrar el hilo", + "Error fetching upcoming events" : "Error al obtener los próximos eventos", + "Error fetching upcoming reminders" : "Error al obtener las próximas notificaciones", + "An error occurred while accepting an invitation" : "Ocurrió un error mientras se aceptaba una invitación", + "An error occurred while rejecting an invitation" : "Ocurrió un error mientras se rechazaba una invitación", + "{guest} (guest)" : "{guest} (invitado)", + "Poll draft has been saved" : "El borrador de la encuesta ha sido guardado", + "An error occurred while saving the draft" : "Ha ocurrido un error al guardar el borrador", + "An error occurred while submitting your vote" : "Ocurrió un error mientras se enviaba su voto", + "An error occurred while ending the poll" : "Ocurrió un error mientras se finalizaba la encuesta", + "An error occurred while deleting the poll draft" : "Ha ocurrido un error mientras se eliminaba el borrador de la encuesta", + "Poll \"{name}\" was created by {user}. Click to vote" : "La encuesta \"{name}\" fue creada por {user}. Haga clic para votar", + "Failed to add reaction" : "Fallo al añadir reacción", + "Failed to remove reaction" : "Fallo al quitar la reacción", + "Error while uploading file \"{fileName}\"" : "Error al subir el archivo \"{fileName}\".", + "Not enough free space to upload file \"{fileName}\"" : "No hay espacio libre suficiente para subir el archivo \"{fileName}\"", + "You are not allowed to share files" : "No estás autorizado a compartir archivos", + "Error while sharing file" : "Error al compartir archivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Este navegador no es completamente compatible con Nextcloud Talk. Por favor, usa la última versión de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n horas","En %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos","%n minutos"], + "In {hours} and {minutes}" : "En {hours} y {minutes}", + "_In %n minute_::_In %n minutes_" : ["En %n minuto","En %n minutos","En %n minutos"], + "Later today – {timeLocale}" : "Hoy, más tarde – {timeLocale}", + "Tomorrow – {timeLocale}" : "Mañana – {timeLocale}", + "This weekend – {timeLocale}" : "Este fin de semana – {timeLocale}", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Message link copied to clipboard" : "Link del mensaje copiado al portapapeles.", + "Conversation link copied to clipboard" : "Enlace de la conversación copiado al portapapeles.", + "The link could not be copied" : "No se pudo copiar el enlace", + "Error while parsing a PROPFIND error" : "Error al analizar un error PROPFIND", + "Sending signaling message has failed" : "El envío del mensaje de señalización falló", + "Lost connection to signaling server. Trying to reconnect." : "Se ha perdido la conexión con el servidor de señalización. Intentando reconectar.", + "Lost connection to signaling server." : "Se ha perdido la conexión al servidor de señalización.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de señalización configurado debe ser actualizado para que sea compatible con esta versión de Talk. Por favor, contacte a su administrador.", + "Please restart the app." : "Por favor, reinicie la aplicación.", + "Please reload the page." : "Por favor, recargue la página.", + "Please try to restart the app." : "Por favor, intente reiniciar la aplicación.", + "Please try to reload the page." : "Por favor, intente recargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Altavoz {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que estabas hablando con el micrófono silenciado, por favor desactiva el modo silencio para que los demás te oigan.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No se ha podido establecer conexión con por lo menos un participante. En este caso, puede ser necesario un servidor TURN. Por favor, pregunte a su administrador para configurar uno, siguiendo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Esto está tomando más tiempo de lo esperado. ¿Se han permitido (o rechazado) los permisos multimedia? Si es así, reinicie su navegador por favor, ya que el audio y el vídeo están fallando.", + "Access to microphone & camera is only possible with HTTPS" : "Acceso a micrófono y cámara solo es posible con HTTPS", + "Please move your setup to HTTPS" : "Por favor, cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "Acceso a micrófono y cámara fue rechazado", + "WebRTC is not supported in your browser" : "Tu navegador no es compatible con WebRTC.", + "Please use a different browser like Firefox or Chrome" : "Por favor, usa un navegador diferente, como Firefox o Chrome.", + "Error while accessing microphone & camera" : "Error al acceder al micrófono y la cámara.", + "%s Talk on your mobile devices" : "%s Talk en tus dispositivos móviles", + "Join conversations at any time, anywhere, on any device." : "Únase a conversaciones en cualquier momento, en cualquier lugar, en cualquier dispositivo.", + "Android app" : "App Android", + "iOS app" : "App iOS", + "__language_name__" : "Español (España)", + "Webhook Demo" : "Demostración de Webhooks", + "Call summary (%s)" : "Resumen de la llamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "El bot de resumen de llamada publica un mensaje de visión general listando a todos los participantes y delineando tareas", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Informes", + "Decisions" : "Decisiones", + "Agenda" : "Agenda", + "Call summary" : "Resumen de la llamada", + "Call summary - {title}" : "Resumen de la llamada - {title}", + "Talk conversation for event" : "Conversación de Talk para el evento", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push se encuentra instalado, esto mejorará el rendimiento de los clientes de escritorio.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push}no se encuentra instalado, esto podría conllevar a problemas de rendimiento cuando se utilizan clientes de escritorio.", + "Next meeting" : "Siguiente reunión", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Programe una reunión desde su calendario. Una conversación de Talk deberá ser puesta como ubicación para que sea mostrada aquí", + "Join conversations from remote Nextcloud servers" : "Unirse a conversaciones de servidores Nextcloud remotos", + "Your default media state has been saved" : "Se ha guardado el estado predeterminado de sus dispositivos", + "Set reminder for later today" : "Establecer recordatorio para hoy, más tarde", + "Set reminder for tomorrow" : "Establecer recordatorio para mañana", + "Set reminder for this weekend" : "Establecer recordatorio para este fin de semana", + "Set reminder for next week" : "Establecer recordatorio para la semana que viene", + "Generate summary" : "Generar resumen", + "Open poll • You voted already" : "Encuesta abierta ・ Ya ha votado", + "Open poll • Click to vote" : "Encuesta abierta ・ Haga clic para votar", + "Poll • Ended" : "Votación ・ Finalizada", + "Talk recording from {time} ({conversation})" : "Grabación de la conversación desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados de la encuesta • %n voto","Resultados de la encuesta • %n votos","Resultados de la encuesta • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Encuesta abierta ・ %n voto","Encuesta abierta ・ %n votos","Encuesta abierta ・ %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Se han guardado tus ajustes de privacidad", + "Your personal setting has been saved" : "Sus ajustes personales se han guardado", + "Failed to save sounds setting" : "Fallo al guardar la configuración de sonidos", + "Sounds setting saved" : "Confuguración de sonidos guardada", + "Nextcloud Talk was updated, you cannot start or join a call." : "Se ha actualizado Nextcloud Talk, no puede iniciar o unirse a una llamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Te has unido a la conversación en otra ventana o dispositivo. Nextcloud Talk no soporta esto en la actualidad, por lo que se ha cerrado esta sesión.", + "Nextcloud Talk was updated." : "Se ha actualizado Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud está en modo mantenimiento.", + "Nextcloud Talk Federation was updated." : "Se ha actualizado la federación de Nextcloud Talk.", + "Enable live translation" : "Activar traducción en vivo" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_419.js b/l10n/es_419.js new file mode 100644 index 0000000..55b93ec --- /dev/null +++ b/l10n/es_419.js @@ -0,0 +1,154 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Si", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restaurar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Volver a cargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Change password" : "Cambiar password", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Latin America)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_419.json b/l10n/es_419.json new file mode 100644 index 0000000..5817458 --- /dev/null +++ b/l10n/es_419.json @@ -0,0 +1,152 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Si", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restaurar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Volver a cargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Change password" : "Cambiar password", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Latin America)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_AR.js b/l10n/es_AR.js new file mode 100644 index 0000000..891f228 --- /dev/null +++ b/l10n/es_AR.js @@ -0,0 +1,154 @@ +OC.L10N.register( + "spreed", + { + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Eliminar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Open settings" : "Abrir opciones", + "error" : "error", + "Default" : "Predeterminado", + "Messages" : "Mensajes", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "Error en la contraseña. Inténtelo de nuevo.", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "Off" : "Apagado", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Sí", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Error", + "OK" : "OK", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Sin resultados", + "Done" : "Terminado", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Recargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "Copy link" : "Copiar enlace", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "You" : "Usted", + "Collapse" : "Colapsar", + "Favorite" : "Favorito", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Activar", + "Choose" : "Elige", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Eliminar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Eliminar", + "Log content" : "Contenido del registro", + "Notifications" : "Notificaciones", + "Log in" : "Iniciar sesión", + "Remove from favorites" : "Eliminado de favoritos", + "Add to favorites" : "Agregar a favoritos", + "Home" : "Casa", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "Translate" : "Traducir", + "Dismiss" : "Despedir", + "Contact" : "Contacto", + "Send message" : "Enviar mensaje", + "New file" : "Nuevo archivo", + "Send" : "Enviar", + "Settings" : "Ajustes", + "Remove" : "Eliminar", + "Add users or groups" : "Agregar usuarios o grupos", + "Searching …" : "Buscando ...", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Load more results" : "Cargar más resultados", + "Notification settings" : "Configuración de las notificaciones", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar su pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Inicio de sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Media", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Favor de volver a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Lejos", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en su navegador", + "Please use a different browser like Firefox or Chrome" : "Favor de usar un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Argentina)", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Reportes" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_AR.json b/l10n/es_AR.json new file mode 100644 index 0000000..c629ff8 --- /dev/null +++ b/l10n/es_AR.json @@ -0,0 +1,152 @@ +{ "translations": { + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Eliminar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Open settings" : "Abrir opciones", + "error" : "error", + "Default" : "Predeterminado", + "Messages" : "Mensajes", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, favor de seguir el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "Error en la contraseña. Inténtelo de nuevo.", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "Off" : "Apagado", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Sí", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Error", + "OK" : "OK", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Sin resultados", + "Done" : "Terminado", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Recargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "Copy link" : "Copiar enlace", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "You" : "Usted", + "Collapse" : "Colapsar", + "Favorite" : "Favorito", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Activar", + "Choose" : "Elige", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Eliminar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "More information" : "Más información", + "Delete" : "Eliminar", + "Log content" : "Contenido del registro", + "Notifications" : "Notificaciones", + "Log in" : "Iniciar sesión", + "Remove from favorites" : "Eliminado de favoritos", + "Add to favorites" : "Agregar a favoritos", + "Home" : "Casa", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "Translate" : "Traducir", + "Dismiss" : "Despedir", + "Contact" : "Contacto", + "Send message" : "Enviar mensaje", + "New file" : "Nuevo archivo", + "Send" : "Enviar", + "Settings" : "Ajustes", + "Remove" : "Eliminar", + "Add users or groups" : "Agregar usuarios o grupos", + "Searching …" : "Buscando ...", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Load more results" : "Cargar más resultados", + "Notification settings" : "Configuración de las notificaciones", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar su pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Inicio de sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Media", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Favor de volver a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Lejos", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en su navegador", + "Please use a different browser like Firefox or Chrome" : "Favor de usar un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Argentina)", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Reportes" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_CL.js b/l10n/es_CL.js new file mode 100644 index 0000000..beb5f3c --- /dev/null +++ b/l10n/es_CL.js @@ -0,0 +1,168 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Si", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Remover", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Chile)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CL.json b/l10n/es_CL.json new file mode 100644 index 0000000..a2bd559 --- /dev/null +++ b/l10n/es_CL.json @@ -0,0 +1,166 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Yes" : "Si", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Ususarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Remover", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Chile)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_CO.js b/l10n/es_CO.js new file mode 100644 index 0000000..014caba --- /dev/null +++ b/l10n/es_CO.js @@ -0,0 +1,174 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Te invitaron a una conversación o recibiste una llamada", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Spice up your messages with emojis from the emoji picker" : "Dale sabor a tus mensajes con emojis del selector de emoji", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Medios de comunicación", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Colombia)", + "Tasks" : "Tareas", + "Notes" : "Notas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CO.json b/l10n/es_CO.json new file mode 100644 index 0000000..c86df74 --- /dev/null +++ b/l10n/es_CO.json @@ -0,0 +1,172 @@ +{ "translations": { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Te invitaron a una conversación o recibiste una llamada", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Spice up your messages with emojis from the emoji picker" : "Dale sabor a tus mensajes con emojis del selector de emoji", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Medios de comunicación", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Colombia)", + "Tasks" : "Tareas", + "Notes" : "Notas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_CR.js b/l10n/es_CR.js new file mode 100644 index 0000000..c0b791f --- /dev/null +++ b/l10n/es_CR.js @@ -0,0 +1,163 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Costa Rica)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_CR.json b/l10n/es_CR.json new file mode 100644 index 0000000..007236a --- /dev/null +++ b/l10n/es_CR.json @@ -0,0 +1,161 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Message deleted by author" : "Mensaje borrado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Costa Rica)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_DO.js b/l10n/es_DO.js new file mode 100644 index 0000000..ba660b3 --- /dev/null +++ b/l10n/es_DO.js @@ -0,0 +1,165 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Lejos", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Dominican Republic)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_DO.json b/l10n/es_DO.json new file mode 100644 index 0000000..22c343d --- /dev/null +++ b/l10n/es_DO.json @@ -0,0 +1,163 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Lejos", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Dominican Republic)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_EC.js b/l10n/es_EC.js new file mode 100644 index 0000000..8758e7c --- /dev/null +++ b/l10n/es_EC.js @@ -0,0 +1,1422 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Atendiste una llamada de {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Atendiste una llamada de {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Atendiste una llamada de {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Atendiste una llamada de {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Atendiste una llamada de {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","%n otros","%n otros"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a una conversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge y Safari ahora se pueden usar para participar en llamadas de audio y video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Las conversaciones uno a uno ahora son persistentes y ya no se pueden convertir en conversaciones grupales accidentalmente. Además, cuando uno de los participantes abandona la conversación, la conversación ya no se elimina automáticamente. Solo si ambos participantes salen, la conversación se elimina del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes notificar a todos los participantes publicando \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con la tecla \"flecha arriba\" puedes volver a publicar tu último mensaje", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ahora puede tener comandos, envía \"/help\" como mensaje de chat para ver si tu administrador configuró alguno", + "- With projects you can create quick links between conversations, files and other items" : "- Con proyectos puedes crear enlaces rápidos entre conversaciones, archivos y otros elementos", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a invitados en el chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Las conversaciones ahora pueden tener un lobby. Esto permitirá que los moderadores se unan al chat y llamen para preparar la reunión mientras los usuarios y los invitados esperan.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ahora puedes responder directamente a mensajes dando a los otros usuarios más contexto sobre tu mensaje", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La búsqueda de conversaciones y participantes ahora también filtrará tus conversaciones existentes, lo que facilita encontrar conversaciones anteriores", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ahora puedes agregar grupos de usuarios personalizados a conversaciones cuando la aplicación \"Circles\" está instalada", + "- Check out the new grid and call view" : "- Echa un vistazo a la nueva cuadrícula y a la vista de llamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ahora puedes cargar y arrastrar archivos directamente desde tu dispositivo al chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Los archivos compartidos se abren directamente en la vista del chat con las aplicaciones de visor", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ahora puedes buscar chats y mensajes en la búsqueda unificada en la barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Dale vida a tus mensajes con emojis del selector de emojis", + "- You can now change your camera and microphone while being in a call" : "- Ahora usted puede cambiar su cámara y micrófono mientras está en una llamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Da contexto a tus conversaciones con una descripción y ábrelas para que los usuarios registrados puedan encontrarlas y unirse", + "- See a read status and send failed messages again" : "- Ver el estado de lectura y volver a enviar mensajes que fallaron", + "- Raise your hand in a call with the R key" : "- Levanta la mano en una llamada con la tecla R", + "- Join the same conversation and call from multiple devices" : "- Únase a la misma conversación y llamada desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envía mensajes de voz, comparte tu ubicación o detalles de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Agregue grupos a una conversación y los nuevos miembros del grupo se agregarán automáticamente como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Se muestra una vista previa de tu audio y video antes de unirte a una llamada", + "- You can now blur your background in the newly designed call view" : "- Ahora puedes desenfocar el fondo en la nueva vista de llamada diseñada", + "- Moderators can now assign general and individual permissions to participants" : "- Los moderadores ahora pueden asignar permisos generales e individuales a los participantes", + "- In the sidebar you can now find an overview of the latest shared items" : "- En la barra lateral, ahora puedes encontrar una descripción general de los últimos elementos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utiliza una encuesta para recopilar las opiniones de otros o acordar una fecha", + "- Configure an expiration time for chat messages" : "- Configura un tiempo de caducidad para los mensajes de chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicia llamadas sin notificar a los demás en conversaciones grandes. Puedes enviar notificaciones individuales una vez que la llamada haya comenzado.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envía mensajes de chat sin notificar a los destinatarios en caso de que no sea urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Los emojis ahora se pueden autocompletar escribiendo \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enlaza varios elementos utilizando el nuevo selector inteligente escribiendo \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Ahora las conversaciones pueden tener un avatar o emoji como icono", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ahora están disponibles los fondos virtuales además del fondo desenfocado en las videollamadas", + "- Reactions are now available during calls" : "- Ahora están disponibles las reacciones durante las llamadas", + "- Typing indicators show which users are currently typing a message" : "- Los indicadores de escritura muestran qué usuarios están escribiendo actualmente un mensaje", + "- Groups can now be mentioned in chats" : "- Ahora se pueden mencionar grupos en los chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Las grabaciones de llamadas se transcriben automáticamente si está registrada una aplicación de transcripción", + "- Chat messages can be translated if a translation provider app is registered" : "- Los mensajes de chat se pueden traducir si está registrada una aplicación de traducción", + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "Reaction deleted by author" : "Reacción eliminada por el autor", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Tú creaste la conversación", + "An administrator created the conversation" : "Un administrador creó la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} cambió el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tú cambiaste el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador cambió el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} estableció la descripción", + "You set the description" : "Tú estableciste la descripción", + "An administrator set the description" : "Un administrador estableció la descripción", + "{actor} removed the description" : "{actor} eliminó la descripción", + "You removed the description" : "Tú eliminaste la descripción", + "An administrator removed the description" : "Un administrador eliminó la descripción", + "You started a call" : "Usted inició una llamada", + "{actor} started a call" : "{actor} inició una llamada", + "{actor} joined the call" : "{actor} se unió a una llamada", + "You joined the call" : "Usted se unió a una llamada", + "{actor} left the call" : "{actor} dejó la llamada", + "You left the call" : "Usted dejó la llamada", + "{actor} unlocked the conversation" : "{actor} desbloqueó la conversación", + "You unlocked the conversation" : "Tú desbloqueaste la conversación", + "An administrator unlocked the conversation" : "Un administrador desbloqueó la conversación", + "{actor} locked the conversation" : "{actor} bloqueó la conversación", + "You locked the conversation" : "Tú bloqueaste la conversación", + "An administrator locked the conversation" : "Un administrador bloqueó la conversación", + "{actor} limited the conversation to the current participants" : "{actor} limitó la conversación a los participantes actuales", + "You limited the conversation to the current participants" : "Tú limitaste la conversación a los participantes actuales", + "An administrator limited the conversation to the current participants" : "Un administrador limitó la conversación a los participantes actuales", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a usuarios registrados", + "You opened the conversation to registered users" : "Tú abriste la conversación a usuarios registrados", + "An administrator opened the conversation to registered users" : "Un administrador abrió la conversación a usuarios registrados", + "The conversation is now open to everyone" : "La conversación ahora está abierta para todos", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación para todos", + "You opened the conversation to everyone" : "Tú abriste la conversación para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación a moderadores", + "You restricted the conversation to moderators" : "Tú restringiste la conversación a moderadores", + "{actor} started breakout rooms" : "{actor} inició salas de reuniones", + "You started breakout rooms" : "Tú iniciaste salas de reuniones", + "{actor} stopped breakout rooms" : "{actor} detuvo las salas de reuniones", + "You stopped breakout rooms" : "Tú detuviste las salas de reuniones", + "{actor} allowed guests" : "{actor} permitió invitados", + "You allowed guests" : "Tú permitiste invitados", + "An administrator allowed guests" : "Un administrador permitió invitados", + "{actor} disallowed guests" : "{actor} deshabilitó invitados", + "You disallowed guests" : "Tú deshabilitaste invitados", + "An administrator disallowed guests" : "Un administrador deshabilitó invitados", + "{actor} set a password" : "{actor} estableció una contraseña", + "You set a password" : "Tú estableciste una contraseña", + "An administrator set a password" : "Un administrador estableció una contraseña", + "{actor} removed the password" : "{actor} eliminó la contraseña", + "You removed the password" : "Tú eliminaste la contraseña", + "An administrator removed the password" : "Un administrador eliminó la contraseña", + "{actor} added {user}" : "{actor} añadió a {user}", + "You joined the conversation" : "Tú te uniste a la conversación", + "{actor} joined the conversation" : "{actor} se unió a la conversación", + "You added {user}" : "Tú añadiste a {user}", + "{actor} added you" : "{actor} te añadió", + "An administrator added you" : "Un administrador te añadió", + "An administrator added {user}" : "Un administrador añadió a {user}", + "You left the conversation" : "Tú dejaste la conversación", + "{actor} left the conversation" : "{actor} dejó la conversación", + "{actor} removed {user}" : "{actor} eliminó a {user}", + "You removed {user}" : "Tú eliminaste a {user}", + "{actor} removed you" : "{actor} te eliminó", + "An administrator removed you" : "Un administrador te eliminó", + "An administrator removed {user}" : "Un administrador eliminó a {user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptó la invitación", + "{actor} removed {federated_user}" : "{actor} eliminó a {federated_user}", + "You removed {federated_user}" : "Tú eliminaste a {federated_user}", + "An administrator removed {federated_user}" : "Un administrador eliminó a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} rechazó la invitación", + "{actor} added group {group}" : "{actor} agregó al grupo {group}", + "You added group {group}" : "Tú agregaste al grupo {group}", + "An administrator added group {group}" : "Un administrador agregó al grupo {group}", + "{actor} removed group {group}" : "{actor} eliminó al grupo {group}", + "You removed group {group}" : "Tú eliminaste al grupo {group}", + "An administrator removed group {group}" : "Un administrador eliminó al grupo {group}", + "{actor} promoted {user} to moderator" : "{actor} promovió a {user} a moderador", + "You promoted {user} to moderator" : "Tú promoviste a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te promovió a moderador", + "An administrator promoted you to moderator" : "Un administrador te promovió a moderador", + "An administrator promoted {user} to moderator" : "Un administrador promovió a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} degradó a {user} de moderador", + "You demoted {user} from moderator" : "Tú degradaste a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} te degradó de moderador", + "An administrator demoted you from moderator" : "Un administrador te degradó de moderador", + "An administrator demoted {user} from moderator" : "Un administrador degradó a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Tú compartiste un archivo que ya no está disponible", + "The shared location is malformed" : "La ubicación compartida está mal formada", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configuró Matterbridge para sincronizar esta conversación con otros chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Tú configuraste Matterbridge para sincronizar esta conversación con otros chats", + "{actor} updated the Matterbridge configuration" : "{actor} actualizó la configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Tú actualizaste la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} eliminó la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Tú eliminaste la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} inició Matterbridge", + "You started Matterbridge" : "Tú iniciaste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detuvo Matterbridge", + "You stopped Matterbridge" : "Tú detuviste Matterbridge", + "{actor} deleted a message" : "{actor} eliminó un mensaje", + "You deleted a message" : "Tú eliminaste un mensaje", + "{actor} deleted a reaction" : "{actor} eliminó una reacción", + "You deleted a reaction" : "Tú eliminaste una reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Estableciste la expiración del mensaje a %n semana","Estableciste la expiración del mensaje a %n semanas","Estableciste la expiración del mensaje a %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Estableciste la expiración del mensaje a %n día","Estableciste la expiración del mensaje a %n días","Estableciste la expiración del mensaje a %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Estableciste la expiración del mensaje a %n hora","Estableciste la expiración del mensaje a %n horas","Estableciste la expiración del mensaje a %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Estableciste la expiración del mensaje a %n minuto","Estableciste la expiración del mensaje a %n minutos","Estableciste la expiración del mensaje a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} estableció la expiración del mensaje a %n semana","{actor} estableció la expiración del mensaje a %n semanas","{actor} estableció la expiración del mensaje a %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} estableció la expiración del mensaje a %n día","{actor} estableció la expiración del mensaje a %n días","{actor} estableció la expiración del mensaje a %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} estableció la expiración del mensaje a %n hora","{actor} estableció la expiración del mensaje a %n horas","{actor} estableció la expiración del mensaje a %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} estableció la expiración del mensaje a %n minuto","{actor} estableció la expiración del mensaje a %n minutos","{actor} estableció la expiración del mensaje a %n minutos"], + "{actor} disabled message expiration" : "{actor} deshabilitó la expiración del mensaje", + "You disabled message expiration" : "Tú deshabilitaste la expiración del mensaje", + "{actor} cleared the history of the conversation" : "{actor} borró el historial de la conversación", + "You cleared the history of the conversation" : "Tú borraste el historial de la conversación", + "{actor} set the conversation picture" : "{actor} estableció la imagen de la conversación", + "You set the conversation picture" : "Tú estableciste la imagen de la conversación", + "{actor} removed the conversation picture" : "{actor} eliminó la imagen de la conversación", + "You removed the conversation picture" : "Tú eliminaste la imagen de la conversación", + "{actor} ended the poll {poll}" : "{actor} finalizó la encuesta {poll}", + "You ended the poll {poll}" : "Tú finalizaste la encuesta {poll}", + "{actor} started the video recording" : "{actor} inició la grabación de video", + "You started the video recording" : "Tú iniciaste la grabación de video", + "{actor} stopped the video recording" : "{actor} detuvo la grabación de video", + "You stopped the video recording" : "Tú detuviste la grabación de video", + "{actor} started the audio recording" : "{actor} inició la grabación de audio", + "You started the audio recording" : "Tú iniciaste la grabación de audio", + "{actor} stopped the audio recording" : "{actor} detuvo la grabación de audio", + "You stopped the audio recording" : "Tú detuviste la grabación de audio", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Alguien votó en la encuesta {poll}", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Message deleted by {actor}" : "Mensaje eliminado por {actor}", + "Message deleted by you" : "Mensaje eliminado por ti", + "Deleted user" : "Usuario eliminado", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} finalizó la llamada con %n invitado (Duración {duration})","{actor} finalizó la llamada con %n invitados (Duración {duration})","{actor} finalizó la llamada con %n invitados (Duración {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} finalizó la llamada con {user1} (Duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} finalizó la llamada con {user1} y {user2} (Duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2} y {user3} (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2}, {user3} y {user4} (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2}, {user3}, {user4} y {user5} (Duración {duration})", + "Message of {user} in {conversation}" : "Mensaje de {user} en {conversation}", + "Message of {user}" : "Mensaje de {user}", + "Message of a deleted user in {conversation}" : "Mensaje de un usuario eliminado en {conversation}", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "An error occurred. Please contact your administrator." : "Ocurrió un error. Por favor, contacta al administrador.", + "File is not shared, or shared but not with the user" : "El archivo no está compartido, o está compartido pero no con el usuario", + "No account available to delete." : "No hay una cuenta disponible para eliminar.", + "Poll" : "Encuesta", + "No image file provided" : "No se proporcionó un archivo de imagen", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Talk mentions" : "Menciones de Talk", + "Say hi to your friends and colleagues!" : "¡Saluda a tus amigos y colegas!", + "No unread mentions" : "Sin menciones no leídas", + "Call in progress" : "Llamada en progreso", + "You were mentioned" : "Fuiste mencionado", + "Write to conversation" : "Escribe en la conversación", + "Writes event information into a conversation of your choice" : "Escribe información del evento en una conversación de tu elección", + "Conversation invitation" : "Invitación a la conversación", + "Description" : "Descripción", + "You can also dial-in via phone with the following details" : "También puedes llamar por teléfono con los siguientes detalles", + "Dial-in information" : "Información para llamar", + "Meeting ID" : "ID de la reunión", + "Your PIN" : "Tu PIN", + "Meeting" : "Reunión", + "Password request: %s" : "Solicitud de contraseña: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Failed to upload call recording" : "Error al cargar la grabación de llamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de grabación falló al cargar la grabación de la llamada {call}. Por favor, comunícalo a la administración.", + "Share to chat" : "Compartir en el chat", + "Dismiss notification" : "Descartar notificación", + "Call recording now available" : "Grabación de la llamada disponible ahora", + "The recording for the call in {call} was uploaded to {file}." : "La grabación de la llamada en {call} se ha cargado en {file}.", + "Transcript now available" : "Transcripción disponible ahora", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripción de la llamada en {call} se ha cargado en {file}.", + "Failed to transcript call recording" : "Error en la transcripción de la grabación de llamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor falló en transcribir la grabación en {file} para la llamada en {call}. Por favor, comunícalo a la administración.", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Reminder" : "Recordatorio", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado de {call}", + "{guest} (guest) in {call}" : "{guest} (invitado) en {call}", + "Guest in {call}" : "Invitado en {call}", + "{user} sent you a private message" : "{user} te envió un mensaje privado", + "{user} sent a message in conversation {call}" : "{user} envió un mensaje a la conversación {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado envió un mensaje a la conversación {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) envió un mensaje a la conversación {call}", + "A guest sent a message in conversation {call}" : "Un invitado envió un mensaje a la conversación {call}", + "{user} replied to your private message" : "{user} respondió a tu mensaje privado", + "{user} replied to your message in conversation {call}" : "{user} respondió su mensaje privado en la conversación {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario eliminado respondió a tu mensaje en la conversación {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (invitado) respondió a tu mensaje en la conversación {call}", + "A guest replied to your message in conversation {call}" : "Un invitado respondió a tu mensaje en la conversación {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionó con {reaction} a tu mensaje privado", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionó con {reaction} a tu mensaje en la conversación {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionó con {reaction} a tu mensaje en la conversación {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invitado) reaccionó con {reaction} a tu mensaje en la conversación {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invitado reaccionó con {reaction} a tu mensaje en la conversación {call}", + "{user} mentioned you in a private conversation" : "{user} te mencionó en una conversación privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionó al grupo {group} en la conversación {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionó a todos en la conversación {call}", + "{user} mentioned you in conversation {call}" : "{user} te mencionó en la conversación {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionó al grupo {group} en la conversación {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionó a todos en la conversación {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado te mencionó en la conversación {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invitado) mencionó al grupo {group} en la conversación {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invitado) mencionó a todos en la conversación {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (invitado) te mencionó en la conversación {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invitado mencionó al grupo {group} en la conversación {call}", + "A guest mentioned everyone in conversation {call}" : "Un invitado mencionó a todos en la conversación {call}", + "A guest mentioned you in conversation {call}" : "Un invitado te mencionó en la conversación {call}", + "View chat" : "Ver chat", + "{user} invited you to a group conversation: {call}" : "{user} te invitó a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "Answer call" : "Responder llamada", + "{user} would like to talk with you" : "{user} desea hablar contigo", + "Call back" : "Devolver llamada", + "You missed a call from {user}" : "Perdiste una llamada de {user}", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "You missed a group call in {call}" : "Te perdiste una llamada de grupo en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando la contraseña para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} intentó solicitar la contraseña para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguien está solicitando la contraseña para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguien intentó solicitar la contraseña para acceder a {file}", + "Open settings" : "Abrir configuraciones", + "The hosted signaling server is now configured and will be used." : "El servidor de señalización alojado ahora está configurado y se utilizará.", + "The hosted signaling server was removed and will not be used anymore." : "Se eliminó el servidor de señalización alojado y ya no se utilizará.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "El estado de la cuenta del servidor de señalización alojado cambió de \"{oldstatus}\" a \"{newstatus}\".", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificado de {host} expira en {days} días", + "The certificate of {host} expired" : "El certificado de {host} expiró", + "Contact via Talk" : "Contacto a través de Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Webinar" : "Seminario web", + "Conversations" : "Conversaciones", + "{user}" : "{user}", + "Messages" : "Mensajes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensajes en otras conversaciones", + "One-to-one rooms always need to show the other users avatar" : "Las salas de uno a uno siempre necesitan mostrar el avatar de los otros usuarios", + "Invalid emoji character" : "Carácter de emoji no válido", + "Invalid background color" : "Color de fondo no válido", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Room {number}" : "Sala {number}", + "Other" : "Otro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Error al solicitar la prueba porque el servidor de prueba no se puede alcanzar. Por favor, inténtalo de nuevo más tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta instancia. Tal vez no se puede alcanzar desde el exterior para verificar su URL.", + "Something unexpected happened." : "Algo inesperado ocurrió.", + "The URL is invalid." : "La URL no es válida.", + "An HTTPS URL is required." : "Se requiere una URL HTTPS.", + "The email address is invalid." : "La dirección de correo electrónico no es válida.", + "The language is invalid." : "El idioma no es válido.", + "The country is invalid." : "El país no es válido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hay un problema con la solicitud de prueba. Por favor, revisa tus registros para obtener más información.", + "Too many requests are send from your servers address. Please try again later." : "Se están enviando demasiadas solicitudes desde la dirección de tu servidor. Por favor, inténtalo de nuevo más tarde.", + "There is already a trial registered for this Nextcloud instance." : "Ya hay un registro de prueba para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Algo inesperado ocurrió. Por favor, inténtalo de nuevo más tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Error al solicitar la prueba porque el servidor de prueba se comportó de manera incorrecta. Por favor, inténtalo de nuevo más tarde.", + "Trial requested but failed to get account information. Please check back later." : "Se solicitó la prueba pero no se pudo obtener la información de la cuenta. Por favor, revisa más tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta solicitud. Tal vez no se pueda alcanzar desde el exterior para verificar su URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No se pudo obtener la información de la cuenta porque el servidor de prueba se comportó de manera incorrecta. Por favor, revisa más tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hay un problema con la obtención de la información de la cuenta. Por favor, revisa tus registros para obtener más información.", + "There is no such account registered." : "No existe esa cuenta registrada.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No se pudo obtener la información de la cuenta porque el servidor de prueba no se puede alcanzar. Por favor, revisa más tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "Error al eliminar la cuenta del servidor de señalización alojado. Por favor, revisa más tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No se pudo eliminar la cuenta porque el servidor de prueba se comportó de manera incorrecta. Por favor, revisa más tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hay un problema con la eliminación de la cuenta. Por favor, revisa tus registros para obtener más información.", + "Too many requests are sent from your servers address. Please try again later." : "Se están enviando demasiadas solicitudes desde la dirección de tu servidor. Por favor, inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No se pudo eliminar la cuenta porque el servidor de prueba no se puede alcanzar. Por favor, revisa más tarde.", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Estado Plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, República Democrática del", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Estados Federados de Micronesia", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica de", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "República Popular Democrática de Corea", + "Korea, Republic of" : "Corea del Sur", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Macedonia del Norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Esuatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwán, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Islas Vírgenes Británicas", + "Virgin Islands, U.S." : "Islas Vírgenes de los Estados Unidos", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federación", + "High-performance backend" : "Backend de alto rendimiento", + "Error: Cannot connect to server" : "Error: No se puede conectar al servidor", + "Error: Server did not respond with proper JSON" : "Error: El servidor no respondió con un JSON adecuado", + "Error: Certificate expired" : "Error: Certificado caducado", + "Could not get version" : "No se pudo obtener la versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Versión en ejecución: {version}; El servidor debe actualizarse para ser compatible con esta versión de Talk", + "Error: Server responded with: {error}" : "Error: El servidor respondió con: {error}", + "Error: Unknown error occurred" : "Error: Ocurrió un error desconocido", + "Recording backend" : "Backend de grabación", + "SIP configuration" : "Configuración SIP", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Conversation not found" : "Conversación no encontrada", + "Chat, video & audio-conferencing using WebRTC" : "Chat, videoconferencia y audioconferencia utilizando WebRTC", + "Leave call" : "Dejar la llamada", + "Navigating away from the page will leave the call in {conversation}" : "Al salir de la página, dejarás la llamada en {conversation}", + "Stay in call" : "Permanecer en la llamada", + "Discuss this file" : "Discutir este archivo", + "Share this file with others to discuss it" : "Comparte este archivo con otros para discutirlo", + "Share this file" : "Compartir este archivo", + "Join conversation" : "Unirse a la conversación", + "This conversation is password-protected." : "Esta conversación está protegida con contraseña.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hemos detectado varios intentos de contraseña no válidos desde tu dirección IP. Por lo tanto, tu próximo intento está limitado a 30 segundos.", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Error requesting the password." : "Error al solicitar la contraseña.", + "Request password" : "Solicitar contraseña", + "This conversation has ended" : "Esta conversación ha terminado", + "Error occurred when joining the conversation" : "Ocurrió un error al unirse a la conversación", + "Close Talk sidebar" : "Cerrar barra lateral de Talk", + "Open Talk sidebar" : "Abrir barra lateral de Talk", + "Everyone" : "Todos", + "Users and moderators" : "Usuarios y moderadores", + "Moderators only" : "Solo moderadores", + "Disable calls" : "Desactivar llamadas", + "Save changes" : "Guardar cambios", + "Saving …" : "Saving …", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cuando se selecciona al menos un grupo, solo las personas de los grupos listados pueden ser parte de las conversaciones.", + "Guests can still join public conversations." : "Los invitados aún pueden unirse a conversaciones públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Los usuarios que ya no pueden usar Talk aún aparecerán como participantes en sus conversaciones anteriores y también se conservarán sus mensajes de chat.", + "Limit using Talk" : "Limitar uso de Talk", + "Limit creating a public and group conversation" : "Limitar creación de conversaciones públicas y de grupo", + "Limit creating conversations" : "Limitar creación de conversaciones", + "Limit starting a call" : "Limitar inicio de llamada", + "Limit starting calls" : "Limitar inicio de llamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cuando una llamada ha comenzado, todos con acceso a la conversación pueden unirse a la llamada.", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "All messages" : "Todos los mensajes", + "@-mentions only" : "Solo @-menciones", + "Off" : "Apagado", + "General settings" : "Configuraciones generales", + "Default notification settings" : "Configuración de notificaciones predeterminadas", + "Default group notification" : "Notificación de grupo predeterminada", + "Default group notification for new groups" : "Notificación de grupo predeterminada para nuevos grupos", + "Integration into other apps" : "Integración en otras aplicaciones", + "Allow conversations on files" : "Permitir conversaciones en archivos", + "Allow conversations on public shares for files" : "Permitir conversaciones en comparticiones públicas para archivos", + "Enable encryption" : "Habilitar encripción", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Haciendo clic en el botón de arriba, la información del formulario se envía a los servidores de Struktur AG. Puedes encontrar más información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Expirado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "No se pudo solicitar la prueba. Por favor, inténtalo de nuevo más tarde.", + "The account could not be deleted. Please try again later." : "No se pudo eliminar la cuenta. Por favor, inténtalo de nuevo más tarde.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nuestro socio Struktur AG ofrece un servicio donde se puede solicitar un servidor de señalización alojado. Para ello, solo necesitas completar el siguiente formulario y tu Nextcloud lo solicitará. Una vez que se configure el servidor para ti, las credenciales se llenarán automáticamente. Esto sobrescribirá la configuración actual del servidor de señalización.", + "URL of this Nextcloud instance" : "URL de esta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nombre completo del usuario que solicita la prueba", + "Email of the user" : "Correo electrónico del usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar prueba del servidor de señalización", + "You can see the current status of your hosted signaling server in the following table." : "Puedes ver el estado actual de tu servidor de señalización alojado en la siguiente tabla.", + "Status" : "Estatus", + "Created at" : "Creado en", + "Expires at" : "Expira en", + "Limits" : "Límites", + "Delete the signaling server account" : "Eliminar la cuenta del servidor de señalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Puedes instalar Matterbridge para enlazar Nextcloud Talk con otros servicios, visita su {linkstart1}página de GitHub{linkend} para obtener más detalles. La descarga e instalación de la aplicación pueden llevar un tiempo. En caso de que expire, por favor, instálala manualmente desde la {linkstart2}Tienda de aplicaciones de Nextcloud{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "No se encontró o no se pudo ejecutar el archivo binario de Matterbridge.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "También puedes configurar manualmente la ruta del archivo binario de Matterbridge a través de la configuración. Consulta la {linkstart}documentación de integración de Matterbridge{linkend} para obtener más información.", + "Downloading …" : "Descargando…", + "Install Talk Matterbridge" : "Instalar Matterbridge de Talk", + "An error occurred while installing the Matterbridge app" : "Ocurrió un error durante la instalación de la aplicación Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocurrió un error durante la instalación de Talk Matterbridge. Por favor, instálala manualmente.", + "Failed to execute Matterbridge binary." : "Error al ejecutar el archivo binario de Matterbridge.", + "Matterbridge integration" : "Integración de Matterbridge", + "Enable Matterbridge integration" : "Habilitar integración de Matterbridge", + "Status: Checking connection" : "Estado: Comprobando la conexión", + "OK: Running version: {version}" : "OK: Versión en ejecución: {version}", + "Recording backend URL" : "URL del servidor de grabación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Las configuraciones PHP \"upload_max_filesize\" o \"post_max_size\" solo permitirán cargar archivos de hasta {maxUpload}.", + "Recording backend settings saved" : "Configuración del backend de grabación guardada", + "Add a new recording backend server" : "Agregar un nuevo servidor de backend de grabación", + "Shared secret" : "Secreto compartido", + "SIP configuration saved!" : "Configuración SIP guardada", + "Restrict SIP configuration" : "Restringir la configuración SIP", + "Enable SIP configuration" : "Habilitar la configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo los usuarios de los siguientes grupos pueden habilitar SIP en las conversaciones que moderan", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información se envía en los correos electrónicos de invitación y se muestra en la barra lateral a todos los participantes.", + "Error code" : "Código de error", + "High-performance backend URL" : "URL del backend de alto rendimiento", + "High-performance backend settings saved" : "Configuración del backend de alto rendimiento guardada", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "La dirección del servidor no es válida", + "STUN settings saved" : "Configuración STUN guardada", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "Add a new STUN server" : "Agregar un nuevo servidor STUN", + "{schema} scheme must be used with a domain" : "El esquema {schema} debe usarse con un dominio", + "{option1} and {option2}" : "{option1} y {option2}", + "{option} only" : "Solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Se han devuelto con éxito candidatos ICE por el servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Error: El servidor TURN no devolvió candidatos ICE válidos", + "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", + "TURN server schemes" : "Esquemas del servidor TURN", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Secreto del servidor TURN", + "TURN server protocols" : "Protocolos del servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para proxificar el tráfico de los participantes detrás de un cortafuegos. Si los participantes individuales no pueden conectarse a otros, probablemente se requiera un servidor TURN. Consulta {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", + "TURN settings saved" : "Configuración TURN guardada", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Agregar un nuevo servidor TURN", + "Failed" : "Error", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Error: WebAssembly está deshabilitado o no es compatible con este navegador. Por favor, habilita WebAssembly o utiliza un navegador con soporte para realizar la comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Error: Los archivos \".wasm\" y \".tflite\" no se devolvieron correctamente por el servidor web. Por favor, revisa la sección de \"Requisitos del sistema\" en la documentación de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Los archivos \".wasm\" y \".tflite\" se devolvieron correctamente por el servidor web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que la configuración de PHP y Apache no es compatible. Ten en cuenta que PHP solo se puede usar con el módulo MPM_PREFORK y PHP-FPM solo se puede usar con el módulo MPM_EVENT.", + "Web server setup checks" : "Comprobaciones de configuración del servidor web", + "Files required for virtual background can be loaded" : "Se pueden cargar los archivos necesarios para el fondo virtual", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas separadas", + "Number of breakout rooms" : "Número de salas separadas", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar automáticamente a los participantes", + "Manually assign participants" : "Asignar manualmente a los participantes", + "Allow participants to choose" : "Permitir que los participantes elijan", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas separadas", + "Reset" : "Restablecer", + "Delete breakout rooms" : "Eliminar salas separadas", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Las salas separadas y la configuración actual se perderán", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes no asignados", + "Back" : "Atrás", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Agregar participante \"{user}\"", + "Now" : "Ahora", + "Loading …" : "Cargando...", + "From" : "De", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "Search participants" : "Buscar participantes", + "No results" : "No hay resultados", + "Done" : "Hecho", + "Raise hand" : "Levantar la mano", + "Raise hand (R)" : "Levantar la mano (R)", + "Lower hand" : "Bajar la mano", + "Lower hand (R)" : "Bajar la mano (R)", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista de orador", + "Grid view" : "Vista de cuadrícula", + "This conversation is read-only" : "Esta conversación es de solo lectura", + "{nickName} raised their hand." : "{nickName} levantó la mano.", + "A participant raised their hand." : "Un participante levantó la mano.", + "Collapse stripe" : "Ocultar franja", + "Expand stripe" : "Expandir franja", + "Previous page of videos" : "Página anterior de videos", + "Next page of videos" : "Página siguiente de videos", + "Connecting …" : "Conectando...", + "Waiting for {user} to join the call" : "Esperando a que {user} se una a la llamada", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "You are not allowed to enable audio" : "No tienes permiso para habilitar el audio", + "No audio. Click to select device" : "Sin audio. Haz clic para seleccionar el dispositivo", + "Mute audio" : "Silenciar audio", + "Mute audio (M)" : "Silenciar audio (M)", + "Unmute audio" : "Activar audio", + "Unmute audio (M)" : "Activar audio (M)", + "None" : "Ninguno", + "Access to camera was denied" : "Fue denegado el acceso a la cámara", + "Error while accessing camera: It is likely in use by another program" : "Error al acceder a la cámara: Es probable que esté siendo utilizada por otro programa", + "Error while accessing camera" : "Error mientras se accede a la cámara", + "You have been muted by a moderator" : "Tienes el micrófono desactivado por un moderador", + "You are not allowed to enable video" : "No tienes permiso para habilitar el video", + "No video. Click to select device" : "Sin video. Haz clic para seleccionar el dispositivo", + "Disable video" : "Deshabilitar video", + "Disable video (V)" : "Desactivar video (V)", + "Enable video" : "Habilitar el video", + "Enable video (V)" : "Habilitar video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video: Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video (V): Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video: Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "You" : "Tú", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Mostrar pantalla", + "Stop following" : "Dejar de seguir", + "Connection could not be established …" : "No se pudo establecer la conexión…", + "Connection was lost and could not be re-established …" : "Se perdió la conexión y no se pudo restablecer…", + "Connection could not be established. Trying again …" : "No se pudo establecer la conexión. Intentando nuevamente…", + "Connection lost. Trying to reconnect …" : "Se perdió la conexión. Intentando reconectar…", + "Connection problems …" : "Problemas de conexión…", + "Collapse" : "Colapsar", + "Expand" : "Expandir", + "You need to be logged in to upload files" : "Necesitas estar registrado para subir archivos", + "Drop your files to upload" : "Suelta tus archivos para subirlos", + "Conversation messages" : "Mensajes de la conversación", + "Scroll to bottom" : "Desplazarse hasta abajo", + "Post message" : "Enviar mensaje", + "Favorite" : "Hacer favorito", + "Date:" : "Fecha:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Error while updating conversation name" : "Error al actualizar el nombre de la conversación", + "Error while updating conversation description" : "Error al actualizar la descripción de la conversación", + "Enter a name for this conversation" : "Ingresa un nombre para esta conversación", + "Edit conversation name" : "Editar nombre de la conversación", + "Edit conversation description" : "Editar descripción de la conversación", + "Enter a description for this conversation" : "Ingresa una descripción para esta conversación", + "Picture" : "Imagen", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Salas separadas", + "Manage breakout rooms" : "Gestionar salas de grupos", + "Set up breakout rooms for this conversation" : "Configurar salas separadas para esta conversación", + "Please select a valid PNG or JPG file" : "Por favor, selecciona un archivo PNG o JPG válido", + "Choose your conversation picture" : "Elegir imagen de la conversación", + "Choose" : "Seleccionar", + "Error setting conversation picture" : "Error al establecer la imagen de la conversación", + "Could not set the conversation picture: {error}" : "Error al recortar la imagen de la conversación", + "Error cropping conversation picture" : "No se pudo establecer la imagen de la conversación: {error}", + "Error removing conversation picture" : "Error al eliminar la imagen de la conversación", + "Set emoji as conversation picture" : "Establecer un emoji como imagen de la conversación", + "Set background color for conversation picture" : "Establecer el color de fondo para la imagen de la conversación", + "Upload conversation picture" : "Subir imagen de la conversación", + "Choose conversation picture from files" : "Elegir imagen de la conversación desde archivos", + "Remove conversation picture" : "Eliminar imagen de la conversación", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Set picture" : "Establecer imagen", + "Default permissions modified for {conversationName}" : "Permisos predeterminados modificados para {nombreConversación}", + "Could not modify default permissions for {conversationName}" : "No se pudieron modificar los permisos predeterminados para {nombreConversación}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editar los permisos predeterminados para los participantes en esta conversación. Estas configuraciones no afectan a los moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen los permisos en esta sección, se perderán los permisos personalizados asignados previamente a los participantes individuales.", + "All permissions" : "Todos los permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Los participantes tienen permisos para iniciar una llamada, unirse a una llamada, habilitar el audio y video, y compartir pantalla.", + "Restricted" : "Restringido", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Los participantes pueden unirse a las llamadas, pero no pueden habilitar el audio ni el video ni compartir pantalla hasta que un moderador les otorgue permisos manualmente.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Configuración de la conversación", + "Basic Info" : "Información básica", + "Personal" : "Personal", + "Moderation" : "Moderación", + "Breakout Rooms" : "Salas separadas", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zona peligrosa", + "Leave conversation" : "Dejar la conversación", + "You need to promote a new moderator before you can leave the conversation" : "Necesitas promover un nuevo moderador antes de poder abandonar la conversación", + "Delete conversation" : "Borrar conversación", + "Do you really want to delete \"{displayName}\"?" : "¿Realmente quieres eliminar \"{nombreCompleto}\"?", + "Error while deleting conversation" : "Error al eliminar la conversación", + "Delete all chat messages" : "Eliminar todos los mensajes del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "¿Realmente quieres eliminar todos los mensajes en \"{nombreCompleto}\"?", + "Error while clearing chat history" : "Error al borrar el historial del chat", + "Be careful, these actions cannot be undone." : "Ten cuidado, estas acciones no se pueden deshacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una vez que se abandona una conversación, para volver a unirse a una conversación cerrada, se necesita una invitación. Una conversación abierta se puede volver a unir en cualquier momento.", + "Permanently delete this conversation." : "Eliminar permanentemente esta conversación.", + "Delete chat messages" : "Eliminar mensajes del chat", + "Permanently delete all the messages in this conversation." : "Eliminar permanentemente todos los mensajes en esta conversación.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n day","%n days","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks","%n weeks"], + "Custom expiration time" : "Hora de vencimiento personalizada", + "Message expiration disabled" : "Vencimiento del mensaje deshabilitado", + "Message expiration set: {duration}" : "Vencimiento del mensaje establecido: {duration}", + "Error when trying to set message expiration" : "Error al intentar establecer el vencimiento del mensaje", + "Message expiration" : "Vencimiento del mensaje", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Los mensajes de chat pueden vencer después de cierto tiempo. Nota: Los archivos compartidos en el chat no se eliminarán para el propietario, pero ya no se compartirán en la conversación.", + "Guest access" : "Acceso de invitado", + "Allow guests to join this conversation via link" : "Permitir que los invitados se unan a esta conversación a través de un enlace", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Enter new password" : "Ingresa una nueva contraseña", + "Save password" : "Guardar contraseña", + "Resend invitations" : "Volver a enviar invitaciones", + "Error occurred when opening or limiting the conversation" : "Error al abrir o limitar la conversación", + "Open conversation to registered users, showing it in search results" : "Abrir la conversación a usuarios registrados, mostrándola en los resultados de búsqueda", + "Start time has been updated" : "La hora de inicio se ha actualizado", + "Error occurred while updating start time" : "Error al actualizar la hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Al habilitar el vestíbulo, los no moderadores se eliminarán de la llamada en curso.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar el vestíbulo, restringiendo la conversación a los moderadores", + "Meeting start time" : "Hora de inicio de la reunión", + "Start time (optional)" : "Hora de inicio (opcional)", + "Error occurred when locking the conversation" : "Error al bloquear la conversación", + "Error occurred when unlocking the conversation" : "Error al desbloquear la conversación", + "Lock conversation" : "Bloquear conversación", + "This will also terminate the ongoing call." : "Esto también terminará la llamada en curso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear la conversación para evitar que alguien publique mensajes o inicie llamadas", + "Edit" : "Editar", + "More information" : "More information", + "Delete" : "Borrar", + "Add new bridged channel to current conversation" : "Agregar nuevo canal vinculado a la conversación actual", + "unknown state" : "estado desconocido", + "running" : "ejecutándose", + "not running, check Matterbridge log" : "no se está ejecutando, revisa el registro de Matterbridge", + "not running" : "no se está ejecutando", + "Bridge saved" : "Puente guardado", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puedes vincular canales de varios sistemas de mensajería instantánea con Matterbridge.", + "More info on Matterbridge" : "Más información sobre Matterbridge", + "Enable bridge" : "Habilitar puente", + "Show Matterbridge log" : "Mostrar registro de Matterbridge", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Notify about calls in this conversation" : "Notificar sobre llamadas en esta conversación", + "Important conversation" : "Conversación importante", + "SIP dial-in is now possible without PIN requirement" : "Ahora es posible el acceso telefónico SIP sin requerimiento de PIN", + "SIP dial-in is now enabled" : "El acceso telefónico SIP ahora está habilitado", + "SIP dial-in is now disabled" : "El acceso telefónico SIP ahora está deshabilitado", + "Error occurred when enabling SIP dial-in" : "Se produjo un error al habilitar el acceso telefónico SIP", + "Error occurred when disabling SIP dial-in" : "Se produjo un error al deshabilitar el acceso telefónico SIP", + "Phone and SIP dial-in" : "Marcar y acceso telefónico SIP", + "Enable phone and SIP dial-in" : "Habilitar marcar y acceso telefónico SIP", + "Allow to dial-in without a PIN" : "Permitir marcar y acceder sin PIN", + "In {conversation}" : "En {conversation}", + "Join" : "Unirse", + "Error while creating the conversation" : "Error al crear la conversación", + "Unread mentions" : "Menciones no leídas", + "Create conversation" : "Crear conversación", + "Log in" : "Ingresar", + "Mark as read" : "Marcar como leído", + "Mark as unread" : "Marcar como no leído", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "You need to promote a new moderator before you can leave the conversation." : "Necesitas promover un nuevo moderador antes de abandonar la conversación.", + "Conversation actions" : "Acciones de la conversación", + "Home" : "Inicio", + "Unread" : "No leído", + "Alphabetically" : "Alfabéticamente", + "No matches found" : "No se encontraron coincidencias", + "No conversations found" : "No se encontraron conversaciones", + "An error occurred while performing the search" : "Se produjo un error al realizar la búsqueda", + "Conversation list" : "Lista de conversaciones", + "Unread messages" : "Mensajes no leídos", + "Clear filters" : "Borrar filtros", + "Threads" : "Hilos", + "Clear filter" : "Borrar filtro", + "App settings" : "Configuraciones de la aplicación", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Other sources" : "Otras fuentes", + "Open conversations" : "Conversaciones abiertas", + "No search results" : "No hay resultados de búsqueda", + "Users and groups" : "Usuarios y grupos", + "The meeting will start soon" : "La reunión comenzará pronto", + "This meeting is scheduled for {startTime}" : "Esta reunión está programada para {startTime}", + "You are currently waiting in the lobby" : "Actualmente estás esperando en el vestíbulo", + "Select microphone" : "Seleccionar micrófono", + "No microphone available" : "No hay micrófono disponible", + "Select camera" : "Seleccione la cámara", + "No camera available" : "No hay cámara disponible", + "Test" : "Prueba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sin audio", + "No camera" : "No hay cámara", + "Calls are not supported in your browser" : "Las llamadas no son compatibles en tu navegador", + "Access to microphone is only possible with HTTPS" : "El acceso al micrófono solo es posible con HTTPS", + "Access to microphone was denied" : "Se denegó el acceso al micrófono", + "Error while accessing microphone" : "Error al acceder al micrófono", + "Access to camera is only possible with HTTPS" : "El acceso a la cámara sólo es posible con HTTPS", + "The call is being recorded." : "La llamada está siendo grabada.", + "Select virtual office background" : "Seleccionar fondo de oficina virtual", + "Select virtual home background" : "Seleccionar fondo de hogar virtual", + "Select virtual abstract background" : "Seleccionar fondo abstracto virtual", + "Select virtual beach background" : "Seleccionar fondo de playa virtual", + "Select virtual park background" : "Seleccionar fondo de parque virtual", + "Select virtual theater background" : "Seleccionar fondo de teatro virtual", + "Select virtual library background" : "Seleccionar fondo de biblioteca virtual", + "Select virtual space station background" : "Seleccionar fondo de estación espacial virtual", + "Error while uploading the file" : "Error al cargar el archivo", + "Select a file" : "Seleccionar un archivo", + "Invalid path selected" : "Ruta seleccionada no válida.", + "Select virtual background from file {fileName}" : "Seleccionar fondo virtual del archivo {fileName}", + "Blur" : "Desenfoque", + "Upload" : "Cargar", + "Files" : "Archivos", + "The message has expired or has been deleted" : "El mensaje ha caducado o ha sido eliminado", + "Cancel quote" : "Cancelar cotización", + "24 hours" : "24 horas", + "7 days" : "7 días", + "Add a reaction to this message" : "Agregar una reacción a este mensaje", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Reply privately" : "Responder de forma privada", + "Edit message" : "Editar mensaje", + "Copy message link" : "Copiar enlace del mensaje", + "Go to file" : "Ir al archivo", + "Forward message" : "Reenviar mensaje", + "Translate" : "Traducir", + "Close reactions menu" : "Cerrar menú de reacciones", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con otro emoji", + "Choose a conversation to forward the selected message." : "Elige una conversación para reenviar el mensaje seleccionado.", + "Error while forwarding message" : "Error al reenviar el mensaje", + "The message has been forwarded to {selectedConversationName}" : "El mensaje ha sido reenviado a {selectedConversationName}", + "Dismiss" : "Descartar", + "Go to conversation" : "Ir a la conversación", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "No se pudo traducir el mensaje", + "Translation copied to clipboard" : "Traducción copiada al portapapeles", + "Translation could not be copied" : "No se pudo copiar la traducción", + "Translate message" : "Traducir mensaje", + "Source language to translate from" : "Idioma de origen para traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Idioma de destino para la traducción", + "Translate to" : "Traducir a", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar texto traducido", + "Send now" : "Enviar ahora", + "Message read by everyone who shares their reading status" : "Mensaje leído por todos los que comparten su estado de lectura", + "Message sent" : "Mensaje enviado", + "Deleting message" : "Borrando mensaje", + "Message deleted successfully" : "Mensaje eliminado correctamente", + "Message could not be deleted because it is too old" : "No se pudo eliminar el mensaje porque es demasiado antiguo", + "Only normal chat messages can be deleted" : "Solo los mensajes de chat normales se pueden eliminar", + "An error occurred while deleting the message" : "Se produjo un error al eliminar el mensaje", + "Your browser does not support playing audio files" : "Tu navegador no admite la reproducción de archivos de audio", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarjeta de mazo", + "Remove {fileName}" : "Eliminar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", + "Sending message" : "Enviando mensaje", + "Failed to send the message. Click to try again" : "No se pudo enviar el mensaje. Haz clic para intentar nuevamente", + "Not enough free space to upload file" : "No hay suficiente espacio libre para subir el archivo", + "You cannot send messages to this conversation at the moment" : "No puedes enviar mensajes a esta conversación en este momento", + "You voted" : "Votaste", + "_%n vote_::_%n votes_" : ["%n voto","%n votos","%n votos"], + "Open poll" : "Encuesta abierta", + "See results" : "Ver resultados", + "No permission to post reactions in this conversation" : "No tienes permiso para publicar reacciones en esta conversación", + "Add more reactions" : "Agregar más reacciones", + "No messages" : "Sin mensajes", + "All messages have expired or have been deleted." : "Todos los mensajes han caducado o han sido eliminados.", + "Unpin" : "Desanclar", + "Cancel search" : "Cancelar búsqueda", + "Create a new group conversation" : "Crear una nueva conversación grupal", + "Add participants" : "Agregar participantes", + "Conversation visibility" : "Visibilidad de la conversación", + "Allow guests to join via link" : "Permitir que los invitados se unan mediante enlace", + "Enter password" : "Introducir contraseña", + "This conversation has been locked" : "Esta conversación ha sido bloqueada", + "No permission to post messages in this conversation" : "No tienes permiso para enviar mensajes en esta conversación", + "Joining conversation …" : "Unirse a la conversación ...", + "Send message" : "Enviar mensaje", + "Send without notification" : "Enviar sin notificación", + "File to share" : "Archivo para compartir", + "Add emoji" : "Añadir emoji", + "Send later" : "Enviar más tarde", + "Cancel editing" : "Cancelar edición", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde Archivos", + "Share files to the conversation" : "Compartir archivos en la conversación", + "Upload from device" : "Subir desde el dispositivo", + "Create new poll" : "Crear nueva encuesta", + "Smart picker" : "Selector inteligente", + "Record voice message" : "Grabar mensaje de voz", + "End recording and send" : "Finalizar grabación y enviar", + "Dismiss recording" : "Descartar grabación", + "Access to the microphone was denied" : "Se ha denegado el acceso al micrófono", + "Microphone either not available or disabled in settings" : "El micrófono no está disponible o está desactivado en la configuración", + "Error while recording audio" : "Error al grabar audio", + "New file" : "Nuevo archivo", + "Blank" : "En blanco", + "Error while creating file" : "Error al crear el archivo", + "Create and share a new file" : "Crear y compartir un nuevo archivo", + "Name of the new file" : "Nombre del nuevo archivo", + "Create file" : "Crear archivo", + "Someone is typing …" : "Alguien está escribiendo …", + "{user1} is typing …" : "{user1} está escribiendo …", + "{user1} and {user2} are typing …" : "{user1} y {user2} están escribiendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} están escribiendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n otro están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …"], + "Add more files" : "Agregar más archivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "En esta conversación {user} puede:", + "Edit default permissions for participants in {conversationName}" : "Editar permisos predeterminados para los participantes en {conversationName}", + "Start a call" : "Iniciar una llamada", + "Skip the lobby" : "Saltar el vestíbulo", + "Can post messages and reactions" : "Puede publicar mensajes y reacciones", + "Enable the microphone" : "Habilitar el micrófono", + "Enable the camera" : "Habilitar la cámara", + "Share the screen" : "Compartir pantalla", + "Update permissions" : "Actualizar permisos", + "Updating permissions" : "Actualizando permisos", + "Create poll" : "Crear encuesta", + "Question" : "Pregunta", + "Ask a question" : "Hacer una pregunta", + "Answers" : "Respuestas", + "Answer {option}" : "Responder {option}", + "Delete poll option" : "Eliminar opción de encuesta", + "Add answer" : "Agregar respuesta", + "Settings" : "Configuraciones ", + "Anonymous poll" : "Encuesta anónima", + "Multiple answers" : "Respuestas múltiples", + "You voted for this option" : "Has votado por esta opción", + "End poll" : "Finalizar encuesta", + "Change your vote" : "Cambiar tu voto", + "Results" : "Resultados", + "Voted participants" : "Participantes que votaron", + "Send a message to \"{roomName}\"" : "Enviar un mensaje a \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Mostrar lista de participantes", + "Assistance requested in {roomName}" : "Asistencia solicitada en {roomName}", + "The message was sent to \"{roomName}\"" : "El mensaje se envió a \"{roomName}\"", + "Dismiss request for assistance" : "Descartar solicitud de asistencia", + "Send message to room" : "Enviar mensaje a la sala", + "Back to main room" : "Volver a la sala principal", + "Back to your room" : "Volver a tu sala", + "Message all rooms" : "Enviar mensaje a todas las salas", + "Start session" : "Iniciar sesión", + "Start a call before you start a breakout room session" : "Iniciar una llamada antes de comenzar la sesión de salas de grupos", + "Stop session" : "Detener sesión", + "The message was sent to all breakout rooms" : "El mensaje se envió a todas las salas separadas", + "Send a message to all breakout rooms" : "Enviar un mensaje a todas las salas separadas", + "Breakout rooms are not started" : "Las salas de grupos no han sido iniciadas", + "Disable lobby" : "Deshabilitar vestíbulo", + "Settings for participant \"{user}\"" : "Configuración para el participante \"{user}\"", + "Participant \"{user}\"" : "Participante \"{user}\"", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "invitado/a", + "Raised their hand" : "Levantó la mano", + "Joined with video" : "Se unió con video", + "Joined via phone" : "Se unió a través del teléfono", + "Joined with audio" : "Se unió con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El texto debe tener una longitud menor o igual a {maxLength} caracteres. Tu texto actual tiene {charactersCount} caracteres.", + "Remove group and members" : "Eliminar grupo y miembros", + "Remove participant" : "Eliminar participante", + "Notification was sent to {displayName}" : "Se envió una notificación a {displayName}", + "Could not send notification to {displayName}" : "No se pudo enviar la notificación a {displayName}", + "Permissions granted to {displayName}" : "Permisos otorgados a {displayName}", + "Could not modify permissions for {displayName}" : "No se pudieron modificar los permisos para {displayName}", + "Permissions removed for {displayName}" : "Permisos eliminados para {displayName}", + "Permissions set to default for {displayName}" : "Permisos restablecidos a los valores predeterminados para {displayName}", + "Dial-in PIN" : "PIN para marcar desde teléfono", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Reenviar invitación", + "Send call notification" : "Enviar notificación de llamada", + "Reset custom permissions" : "Restablecer permisos personalizados", + "Grant all permissions" : "Otorgar todos los permisos", + "Remove all permissions" : "Eliminar todos los permisos", + "Permissions modified for {displayName}" : "Permisos modificados para {displayName}", + "Add users or groups" : "Agregar usuarios o grupos", + "Add users" : "Agregar usuarios", + "Add groups" : "Agregar grupos", + "Add other sources" : "Agregar otras fuentes", + "Add emails" : "Agregar correos electrónicos", + "Integrations" : "Integraciones", + "Add federated users" : "Agregar usuarios federados", + "Searching …" : "Buscando...", + "Search for more users" : "Buscar más usuarios", + "Search or add participants" : "Buscar o agregar participantes", + "Invitation was sent to {actorId}" : "La invitación fue enviada a {actorId}", + "An error occurred while adding the participants" : "Se produjo un error al agregar los participantes", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir chat", + "You have new unread messages in the chat." : "Tienes nuevos mensajes no leídos en el chat.", + "You have been mentioned in the chat." : "Has sido mencionado en el chat.", + "Chat" : "Chat", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "No results found" : "No se encontraron resultados", + "Load more results" : "Cargar más resultados", + "Projects" : "Proyectos", + "No shared items" : "No hay elementos compartidos", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enlace a una conversación", + "Search conversations or users" : "Buscar conversaciones o usuarios", + "Select conversation" : "Seleccionar conversación", + "Display name: {name}" : "Nombre de visualización: {name}", + "Edit display name" : "Editar nombre para mostrar", + "Save name" : "Guardar nombre", + "Error while saving sounds setting" : "Error al guardar la configuración de sonidos", + "Play sounds when participants join or leave a call" : "Reproducir sonidos cuando los participantes se unan o salgan de una llamada", + "Notification settings" : "Configuración de notificaciones", + "Default language" : "Idioma predeterminado", + "Select location for attachments" : "Seleccionar ubicación para archivos adjuntos", + "Error while setting attachment folder" : "Error al configurar la carpeta de archivos adjuntos", + "Error while setting read status privacy" : "Error al configurar la privacidad del estado de lectura", + "Error while setting typing status privacy" : "Error al configurar la privacidad del estado de escritura", + "Privacy" : "Privacidad", + "Attachments folder" : "Carpeta de archivos adjuntos", + "Toggle full screen" : "Alternar pantalla completa", + "Search" : "Buscar", + "Focus the chat input" : "Enfocar el área de chat", + "Unfocus the chat input to use shortcuts" : "Desenfocar el área de chat para usar atajos", + "Shortcuts while in a call" : "Atajos mientras estás en una llamada", + "Camera on and off" : "Encender y apagar la cámara", + "Microphone on and off" : "Encender y apagar el micrófono", + "Raise or lower hand" : "Levantar o bajar la mano", + "Push to talk or push to mute" : "Pulsar para hablar o pulsar para silenciar", + "Start call silently" : "Iniciar llamada en silencio", + "Start call" : "Iniciar llamada", + "You will be able to join the call only after a moderator starts it." : "Solo podrás unirte a la llamada después de que un moderador la inicie.", + "End call for everyone" : "Finalizar llamada para todos", + "Starting the recording" : "Iniciando la grabación", + "Recording" : "Grabación", + "Cancel recording start" : "Cancelar inicio de grabación", + "Stop recording" : "Detener grabación", + "Send a reaction" : "Enviar una reacción", + "React with {reaction}" : "Reaccionar con {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participante en llamada","%n participantes en llamada","%n participantes en llamada"], + "You are not allowed to enable screensharing" : "No tienes permiso para activar el intercambio de pantallas", + "No screensharing" : "Sin intercambio de pantallas", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Bad sent video and screen quality." : "Mala calidad de video y pantalla enviados.", + "Bad sent screen quality." : "Mala calidad de pantalla enviada.", + "Bad sent video quality." : "Mala calidad de video enviada.", + "Bad sent audio, video and screen quality." : "Mala calidad de audio, video y pantalla enviados.", + "Bad sent audio and screen quality." : "Mala calidad de audio y pantalla enviados.", + "Bad sent audio and video quality." : "Mala calidad de audio y video enviados.", + "Bad sent audio quality." : "Mala calidad de audio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video mientras compartes pantalla.", + "Disable background blur" : "Deshabilitar desenfoque de fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla. Para mejorar la situación, intenta desactivar tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan verte.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y ver tu pantalla. Para mejorar la situación, intenta desactivar tu compartición de pantalla.", + "Disable screenshare" : "Desactivar compartición de pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar tu video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte.", + "Screen sharing is not supported by your browser." : "El intercambio de pantalla no es compatible con tu navegador.", + "Screen sharing requires the page to be loaded through HTTPS." : "El intercambio de pantalla requiere que la página se cargue a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Mute others" : "Silenciar a otros", + "Start recording" : "Iniciar grabación", + "Set up breakout rooms" : "Configurar salas de grupos", + "Remove participant {name}" : "Eliminar participante {name}", + "Keep" : "Mantén", + "Select a region" : "Selecciona una región", + "Search …" : "Buscar...", + "Message without mention" : "Mensaje sin mencionar", + "Mention myself" : "Mencionarme a mí mismo", + "The conversation does not exist" : "La conversación no existe", + "Join a conversation or start a new one!" : "Únete a una conversación o inicia una nueva", + "Duplicate session" : "Sesión duplicada", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contraseña de usuario", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Omitir verificación TLS", + "Matrix server URL" : "URL del servidor de Matrix", + "User" : "Usuario", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nombre del equipo", + "Channel name" : "Nombre del canal", + "Rocket.Chat server URL" : "URL del servidor de Rocket.Chat", + "User name or email address" : "Nombre de usuario o dirección de correo electrónico", + "Rocket.Chat channel" : "Canal de Rocket.Chat", + "Zulip server URL" : "URL del servidor de Zulip", + "Bot user name" : "Nombre de usuario del bot", + "Bot API key" : "Clave de API del bot", + "Zulip channel" : "Canal de Zulip", + "API token" : "Ficha del API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "ID o nombre del servidor", + "Channel" : "Canal", + "Login" : "Iniciar sesión", + "Chat ID" : "ID de chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL del servidor de IRC (por ejemplo, chat.freenode.net:6667)", + "Nickname" : "Apodo", + "Connection password" : "Contraseña de conexión", + "IRC channel" : "Canal de IRC", + "Channel password" : "Contraseña del canal", + "NickServ nickname" : "Apodo de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID de inquilino", + "Client ID" : "ID del cliente", + "Team ID" : "ID de equipo", + "Thread ID" : "ID de hilo", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Multimedia", + "Polls" : "Encuestas", + "Deck cards" : "Tarjetas de mazo", + "Voice messages" : "Mensajes de voz", + "Locations" : "Ubicaciones", + "Call recordings" : "Grabaciones de llamadas", + "Audio" : "Audio", + "Show all media" : "Mostrar todos los archivos adjuntos", + "Show all files" : "Mostrar todos los archivos", + "Show all polls" : "Mostrar todas las encuestas", + "Show all deck cards" : "Mostrar todas las tarjetas de mazo", + "Show all voice messages" : "Mostrar todos los mensajes de voz", + "Show all locations" : "Mostrar todas las ubicaciones", + "Show all call recordings" : "Mostrar todas las grabaciones de llamadas", + "Show all audio" : "Mostrar todo el audio", + "Show all other" : "Mostrar todo lo demás", + "Group" : "Grupo", + "You: {lastMessage}" : "Tú: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Estás intentando unirte a una conversación mientras tienes una sesión activa en otra ventana o dispositivo. Actualmente, esto no es compatible con Nextcloud Talk. ¿Qué quieres hacer?", + "Leave this page" : "Salir de esta página", + "Join here" : "Unirse aquí", + "An error occurred while posting deck card to conversation" : "Se produjo un error al publicar la tarjeta de mazo en la conversación", + "Post to a conversation" : "Publicar en una conversación", + "Post to conversation" : "Publicar en la conversación", + "The recording failed. Please contact your administrator." : "La grabación falló. Por favor, contacta a tu administrador.", + "An error occurred while posting location to conversation" : "Se produjo un error al publicar la ubicación en la conversación", + "Share to a conversation" : "Compartir en una conversación", + "Share to conversation" : "Compartir en la conversación", + "Error while clearing conversation history" : "Error al borrar el historial de conversación", + "Error occurred while allowing guests" : "Error al permitir invitados", + "Error occurred while disallowing guests" : "Error al denegar invitados", + "Error occurred when restricting the conversation to moderator" : "Error al restringir la conversación a los moderadores", + "Error occurred when opening the conversation to everyone" : "Error al abrir la conversación a todos", + "Conversation password has been saved" : "La contraseña de la conversación se ha guardado", + "Conversation password has been removed" : "La contraseña de la conversación se ha eliminado", + "Error occurred while saving conversation password" : "Error al guardar la contraseña de la conversación", + "Call recording is starting." : "La grabación de la llamada está comenzando.", + "Call recording stopped while starting." : "La grabación de la llamada se detuvo al iniciar.", + "Call recording stopped. You will be notified once the recording is available." : "La grabación de la llamada se detuvo. Se te notificará una vez que la grabación esté disponible.", + "Conversation picture set" : "Imagen de la conversación establecida", + "Conversation picture deleted" : "Imagen de la conversación eliminada", + "Could not delete the conversation picture" : "No se pudo eliminar la imagen de la conversación", + "Could not post message: {errorMessage}" : "No se pudo enviar el mensaje: {errorMessage}", + "An error occurred while fetching the participants" : "Se produjo un error al obtener los participantes", + "Could not send invitation to {actorId}" : "No se pudo enviar la invitación a {actorId}", + "Invitations sent" : "Invitaciones enviadas", + "Error occurred when sending invitations" : "Error al enviar las invitaciones", + "An error occurred while creating breakout rooms" : "Se produjo un error al crear salas de grupos", + "An error occurred while re-ordering the attendees" : "Se produjo un error al reordenar los asistentes", + "An error occurred while deleting breakout rooms" : "Se produjo un error al eliminar las salas de grupos", + "An error occurred while starting breakout rooms" : "Se produjo un error al iniciar las salas de grupos", + "An error occurred while stopping breakout rooms" : "Se produjo un error al detener las salas de grupos", + "An error occurred while sending a message to the breakout rooms" : "Se produjo un error al enviar un mensaje a las salas de grupos", + "An error occurred while requesting assistance" : "Se produjo un error al solicitar asistencia", + "An error occurred while resetting the request for assistance" : "Se produjo un error al restablecer la solicitud de asistencia", + "An error occurred while joining breakout room" : "Se produjo un error al unirse a la sala de grupos", + "{guest} (guest)" : "{guest} (invitado)", + "An error occurred while submitting your vote" : "Se produjo un error al enviar tu voto", + "An error occurred while ending the poll" : "Se produjo un error al finalizar la encuesta", + "Failed to add reaction" : "Error al agregar una reacción", + "Failed to remove reaction" : "Error al eliminar una reacción", + "Error while uploading file \"{fileName}\"" : "Error al cargar el archivo \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "No hay suficiente espacio libre para cargar el archivo \"{fileName}\"", + "You are not allowed to share files" : "No tienes permiso para compartir archivos", + "Error while sharing file" : "Error al compartir el archivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "El navegador que estás utilizando no es completamente compatible con Nextcloud Talk. Utiliza la última versión de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "Message link copied to clipboard" : "Enlace del mensaje copiado al portapapeles", + "Conversation link copied to clipboard" : "Enlace de la conversación copiado al portapapeles", + "The link could not be copied" : "No se pudo copiar el enlace", + "Sending signaling message has failed" : "La entrega del mensaje de señalización ha fallado", + "Lost connection to signaling server. Trying to reconnect." : "Se perdió la conexión con el servidor de señalización. Intentando reconectar.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de señalización configurado necesita ser actualizado para ser compatible con esta versión de Talk. Por favor, contacta a tu administrador.", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Altavoz {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que estás hablando estando silenciado/a, por favor, activa tu micrófono para que los demás puedan escucharte", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No se pudo establecer una conexión con al menos un participante. Es posible que se necesite un servidor TURN para tu escenario. Por favor, pide a tu administrador que lo configure siguiendo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Esto está tardando más de lo esperado. ¿Se han concedido (o rechazado) ya los permisos de medios? Si es así, por favor, reinicia tu navegador, ya que el audio y el video pueden estar fallando", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "%s Talk on your mobile devices" : "%s Talk en tus dispositivos móviles", + "Join conversations at any time, anywhere, on any device." : "Únete a conversaciones en cualquier momento y lugar, desde cualquier dispositivo.", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "__language_name__", + "Tasks" : "Tareas", + "Reports" : "Informes", + "Open poll • You voted already" : "Encuesta abierta • Ya has votado", + "Open poll • Click to vote" : "Encuesta abierta • Haz clic para votar", + "Poll • Ended" : "Encuesta • Finalizada", + "Talk recording from {time} ({conversation})" : "Grabación de Talk desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados de la encuesta • %n voto","Resultados de la encuesta • %n votos","Resultados de la encuesta • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Encuesta abierta • %n voto","Encuesta abierta • %n votos","Encuesta abierta • %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Tu configuración de privacidad ha sido guardada", + "Failed to save sounds setting" : "Error al guardar la configuración de sonidos", + "Sounds setting saved" : "Configuración de sonidos guardada", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Te uniste a la conversación en otra ventana o dispositivo. Actualmente, Nextcloud Talk no admite esto, por lo que esta sesión se cerró." +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_EC.json b/l10n/es_EC.json new file mode 100644 index 0000000..6bbc350 --- /dev/null +++ b/l10n/es_EC.json @@ -0,0 +1,1420 @@ +{ "translations": { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Atendiste una llamada de {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Atendiste una llamada de {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Atendiste una llamada de {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Atendiste una llamada de {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Atendiste una llamada de {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","%n otros","%n otros"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a una conversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge y Safari ahora se pueden usar para participar en llamadas de audio y video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Las conversaciones uno a uno ahora son persistentes y ya no se pueden convertir en conversaciones grupales accidentalmente. Además, cuando uno de los participantes abandona la conversación, la conversación ya no se elimina automáticamente. Solo si ambos participantes salen, la conversación se elimina del servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes notificar a todos los participantes publicando \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con la tecla \"flecha arriba\" puedes volver a publicar tu último mensaje", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ahora puede tener comandos, envía \"/help\" como mensaje de chat para ver si tu administrador configuró alguno", + "- With projects you can create quick links between conversations, files and other items" : "- Con proyectos puedes crear enlaces rápidos entre conversaciones, archivos y otros elementos", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a invitados en el chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Las conversaciones ahora pueden tener un lobby. Esto permitirá que los moderadores se unan al chat y llamen para preparar la reunión mientras los usuarios y los invitados esperan.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ahora puedes responder directamente a mensajes dando a los otros usuarios más contexto sobre tu mensaje", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La búsqueda de conversaciones y participantes ahora también filtrará tus conversaciones existentes, lo que facilita encontrar conversaciones anteriores", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ahora puedes agregar grupos de usuarios personalizados a conversaciones cuando la aplicación \"Circles\" está instalada", + "- Check out the new grid and call view" : "- Echa un vistazo a la nueva cuadrícula y a la vista de llamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ahora puedes cargar y arrastrar archivos directamente desde tu dispositivo al chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Los archivos compartidos se abren directamente en la vista del chat con las aplicaciones de visor", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ahora puedes buscar chats y mensajes en la búsqueda unificada en la barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Dale vida a tus mensajes con emojis del selector de emojis", + "- You can now change your camera and microphone while being in a call" : "- Ahora usted puede cambiar su cámara y micrófono mientras está en una llamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Da contexto a tus conversaciones con una descripción y ábrelas para que los usuarios registrados puedan encontrarlas y unirse", + "- See a read status and send failed messages again" : "- Ver el estado de lectura y volver a enviar mensajes que fallaron", + "- Raise your hand in a call with the R key" : "- Levanta la mano en una llamada con la tecla R", + "- Join the same conversation and call from multiple devices" : "- Únase a la misma conversación y llamada desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envía mensajes de voz, comparte tu ubicación o detalles de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Agregue grupos a una conversación y los nuevos miembros del grupo se agregarán automáticamente como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Se muestra una vista previa de tu audio y video antes de unirte a una llamada", + "- You can now blur your background in the newly designed call view" : "- Ahora puedes desenfocar el fondo en la nueva vista de llamada diseñada", + "- Moderators can now assign general and individual permissions to participants" : "- Los moderadores ahora pueden asignar permisos generales e individuales a los participantes", + "- In the sidebar you can now find an overview of the latest shared items" : "- En la barra lateral, ahora puedes encontrar una descripción general de los últimos elementos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utiliza una encuesta para recopilar las opiniones de otros o acordar una fecha", + "- Configure an expiration time for chat messages" : "- Configura un tiempo de caducidad para los mensajes de chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicia llamadas sin notificar a los demás en conversaciones grandes. Puedes enviar notificaciones individuales una vez que la llamada haya comenzado.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envía mensajes de chat sin notificar a los destinatarios en caso de que no sea urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Los emojis ahora se pueden autocompletar escribiendo \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Enlaza varios elementos utilizando el nuevo selector inteligente escribiendo \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Ahora las conversaciones pueden tener un avatar o emoji como icono", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ahora están disponibles los fondos virtuales además del fondo desenfocado en las videollamadas", + "- Reactions are now available during calls" : "- Ahora están disponibles las reacciones durante las llamadas", + "- Typing indicators show which users are currently typing a message" : "- Los indicadores de escritura muestran qué usuarios están escribiendo actualmente un mensaje", + "- Groups can now be mentioned in chats" : "- Ahora se pueden mencionar grupos en los chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Las grabaciones de llamadas se transcriben automáticamente si está registrada una aplicación de transcripción", + "- Chat messages can be translated if a translation provider app is registered" : "- Los mensajes de chat se pueden traducir si está registrada una aplicación de traducción", + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "Reaction deleted by author" : "Reacción eliminada por el autor", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Tú creaste la conversación", + "An administrator created the conversation" : "Un administrador creó la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} cambió el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tú cambiaste el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrador cambió el nombre de la conversación de \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} estableció la descripción", + "You set the description" : "Tú estableciste la descripción", + "An administrator set the description" : "Un administrador estableció la descripción", + "{actor} removed the description" : "{actor} eliminó la descripción", + "You removed the description" : "Tú eliminaste la descripción", + "An administrator removed the description" : "Un administrador eliminó la descripción", + "You started a call" : "Usted inició una llamada", + "{actor} started a call" : "{actor} inició una llamada", + "{actor} joined the call" : "{actor} se unió a una llamada", + "You joined the call" : "Usted se unió a una llamada", + "{actor} left the call" : "{actor} dejó la llamada", + "You left the call" : "Usted dejó la llamada", + "{actor} unlocked the conversation" : "{actor} desbloqueó la conversación", + "You unlocked the conversation" : "Tú desbloqueaste la conversación", + "An administrator unlocked the conversation" : "Un administrador desbloqueó la conversación", + "{actor} locked the conversation" : "{actor} bloqueó la conversación", + "You locked the conversation" : "Tú bloqueaste la conversación", + "An administrator locked the conversation" : "Un administrador bloqueó la conversación", + "{actor} limited the conversation to the current participants" : "{actor} limitó la conversación a los participantes actuales", + "You limited the conversation to the current participants" : "Tú limitaste la conversación a los participantes actuales", + "An administrator limited the conversation to the current participants" : "Un administrador limitó la conversación a los participantes actuales", + "{actor} opened the conversation to registered users" : "{actor} abrió la conversación a usuarios registrados", + "You opened the conversation to registered users" : "Tú abriste la conversación a usuarios registrados", + "An administrator opened the conversation to registered users" : "Un administrador abrió la conversación a usuarios registrados", + "The conversation is now open to everyone" : "La conversación ahora está abierta para todos", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación para todos", + "You opened the conversation to everyone" : "Tú abriste la conversación para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación a moderadores", + "You restricted the conversation to moderators" : "Tú restringiste la conversación a moderadores", + "{actor} started breakout rooms" : "{actor} inició salas de reuniones", + "You started breakout rooms" : "Tú iniciaste salas de reuniones", + "{actor} stopped breakout rooms" : "{actor} detuvo las salas de reuniones", + "You stopped breakout rooms" : "Tú detuviste las salas de reuniones", + "{actor} allowed guests" : "{actor} permitió invitados", + "You allowed guests" : "Tú permitiste invitados", + "An administrator allowed guests" : "Un administrador permitió invitados", + "{actor} disallowed guests" : "{actor} deshabilitó invitados", + "You disallowed guests" : "Tú deshabilitaste invitados", + "An administrator disallowed guests" : "Un administrador deshabilitó invitados", + "{actor} set a password" : "{actor} estableció una contraseña", + "You set a password" : "Tú estableciste una contraseña", + "An administrator set a password" : "Un administrador estableció una contraseña", + "{actor} removed the password" : "{actor} eliminó la contraseña", + "You removed the password" : "Tú eliminaste la contraseña", + "An administrator removed the password" : "Un administrador eliminó la contraseña", + "{actor} added {user}" : "{actor} añadió a {user}", + "You joined the conversation" : "Tú te uniste a la conversación", + "{actor} joined the conversation" : "{actor} se unió a la conversación", + "You added {user}" : "Tú añadiste a {user}", + "{actor} added you" : "{actor} te añadió", + "An administrator added you" : "Un administrador te añadió", + "An administrator added {user}" : "Un administrador añadió a {user}", + "You left the conversation" : "Tú dejaste la conversación", + "{actor} left the conversation" : "{actor} dejó la conversación", + "{actor} removed {user}" : "{actor} eliminó a {user}", + "You removed {user}" : "Tú eliminaste a {user}", + "{actor} removed you" : "{actor} te eliminó", + "An administrator removed you" : "Un administrador te eliminó", + "An administrator removed {user}" : "Un administrador eliminó a {user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptó la invitación", + "{actor} removed {federated_user}" : "{actor} eliminó a {federated_user}", + "You removed {federated_user}" : "Tú eliminaste a {federated_user}", + "An administrator removed {federated_user}" : "Un administrador eliminó a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} rechazó la invitación", + "{actor} added group {group}" : "{actor} agregó al grupo {group}", + "You added group {group}" : "Tú agregaste al grupo {group}", + "An administrator added group {group}" : "Un administrador agregó al grupo {group}", + "{actor} removed group {group}" : "{actor} eliminó al grupo {group}", + "You removed group {group}" : "Tú eliminaste al grupo {group}", + "An administrator removed group {group}" : "Un administrador eliminó al grupo {group}", + "{actor} promoted {user} to moderator" : "{actor} promovió a {user} a moderador", + "You promoted {user} to moderator" : "Tú promoviste a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te promovió a moderador", + "An administrator promoted you to moderator" : "Un administrador te promovió a moderador", + "An administrator promoted {user} to moderator" : "Un administrador promovió a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} degradó a {user} de moderador", + "You demoted {user} from moderator" : "Tú degradaste a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} te degradó de moderador", + "An administrator demoted you from moderator" : "Un administrador te degradó de moderador", + "An administrator demoted {user} from moderator" : "Un administrador degradó a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Tú compartiste un archivo que ya no está disponible", + "The shared location is malformed" : "La ubicación compartida está mal formada", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configuró Matterbridge para sincronizar esta conversación con otros chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Tú configuraste Matterbridge para sincronizar esta conversación con otros chats", + "{actor} updated the Matterbridge configuration" : "{actor} actualizó la configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Tú actualizaste la configuración de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} eliminó la configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Tú eliminaste la configuración de Matterbridge", + "{actor} started Matterbridge" : "{actor} inició Matterbridge", + "You started Matterbridge" : "Tú iniciaste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detuvo Matterbridge", + "You stopped Matterbridge" : "Tú detuviste Matterbridge", + "{actor} deleted a message" : "{actor} eliminó un mensaje", + "You deleted a message" : "Tú eliminaste un mensaje", + "{actor} deleted a reaction" : "{actor} eliminó una reacción", + "You deleted a reaction" : "Tú eliminaste una reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Estableciste la expiración del mensaje a %n semana","Estableciste la expiración del mensaje a %n semanas","Estableciste la expiración del mensaje a %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Estableciste la expiración del mensaje a %n día","Estableciste la expiración del mensaje a %n días","Estableciste la expiración del mensaje a %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Estableciste la expiración del mensaje a %n hora","Estableciste la expiración del mensaje a %n horas","Estableciste la expiración del mensaje a %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Estableciste la expiración del mensaje a %n minuto","Estableciste la expiración del mensaje a %n minutos","Estableciste la expiración del mensaje a %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} estableció la expiración del mensaje a %n semana","{actor} estableció la expiración del mensaje a %n semanas","{actor} estableció la expiración del mensaje a %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} estableció la expiración del mensaje a %n día","{actor} estableció la expiración del mensaje a %n días","{actor} estableció la expiración del mensaje a %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} estableció la expiración del mensaje a %n hora","{actor} estableció la expiración del mensaje a %n horas","{actor} estableció la expiración del mensaje a %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} estableció la expiración del mensaje a %n minuto","{actor} estableció la expiración del mensaje a %n minutos","{actor} estableció la expiración del mensaje a %n minutos"], + "{actor} disabled message expiration" : "{actor} deshabilitó la expiración del mensaje", + "You disabled message expiration" : "Tú deshabilitaste la expiración del mensaje", + "{actor} cleared the history of the conversation" : "{actor} borró el historial de la conversación", + "You cleared the history of the conversation" : "Tú borraste el historial de la conversación", + "{actor} set the conversation picture" : "{actor} estableció la imagen de la conversación", + "You set the conversation picture" : "Tú estableciste la imagen de la conversación", + "{actor} removed the conversation picture" : "{actor} eliminó la imagen de la conversación", + "You removed the conversation picture" : "Tú eliminaste la imagen de la conversación", + "{actor} ended the poll {poll}" : "{actor} finalizó la encuesta {poll}", + "You ended the poll {poll}" : "Tú finalizaste la encuesta {poll}", + "{actor} started the video recording" : "{actor} inició la grabación de video", + "You started the video recording" : "Tú iniciaste la grabación de video", + "{actor} stopped the video recording" : "{actor} detuvo la grabación de video", + "You stopped the video recording" : "Tú detuviste la grabación de video", + "{actor} started the audio recording" : "{actor} inició la grabación de audio", + "You started the audio recording" : "Tú iniciaste la grabación de audio", + "{actor} stopped the audio recording" : "{actor} detuvo la grabación de audio", + "You stopped the audio recording" : "Tú detuviste la grabación de audio", + "The recording failed" : "La grabación falló", + "Someone voted on the poll {poll}" : "Alguien votó en la encuesta {poll}", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Message deleted by {actor}" : "Mensaje eliminado por {actor}", + "Message deleted by you" : "Mensaje eliminado por ti", + "Deleted user" : "Usuario eliminado", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} finalizó la llamada con %n invitado (Duración {duration})","{actor} finalizó la llamada con %n invitados (Duración {duration})","{actor} finalizó la llamada con %n invitados (Duración {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} finalizó la llamada con {user1} (Duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} finalizó la llamada con {user1} y {user2} (Duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2} y {user3} (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2}, {user3} y {user4} (Duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} finalizó la llamada con {user1}, {user2}, {user3}, {user4} y {user5} (Duración {duration})", + "Message of {user} in {conversation}" : "Mensaje de {user} en {conversation}", + "Message of {user}" : "Mensaje de {user}", + "Message of a deleted user in {conversation}" : "Mensaje de un usuario eliminado en {conversation}", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "An error occurred. Please contact your administrator." : "Ocurrió un error. Por favor, contacta al administrador.", + "File is not shared, or shared but not with the user" : "El archivo no está compartido, o está compartido pero no con el usuario", + "No account available to delete." : "No hay una cuenta disponible para eliminar.", + "Poll" : "Encuesta", + "No image file provided" : "No se proporcionó un archivo de imagen", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Talk mentions" : "Menciones de Talk", + "Say hi to your friends and colleagues!" : "¡Saluda a tus amigos y colegas!", + "No unread mentions" : "Sin menciones no leídas", + "Call in progress" : "Llamada en progreso", + "You were mentioned" : "Fuiste mencionado", + "Write to conversation" : "Escribe en la conversación", + "Writes event information into a conversation of your choice" : "Escribe información del evento en una conversación de tu elección", + "Conversation invitation" : "Invitación a la conversación", + "Description" : "Descripción", + "You can also dial-in via phone with the following details" : "También puedes llamar por teléfono con los siguientes detalles", + "Dial-in information" : "Información para llamar", + "Meeting ID" : "ID de la reunión", + "Your PIN" : "Tu PIN", + "Meeting" : "Reunión", + "Password request: %s" : "Solicitud de contraseña: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Failed to upload call recording" : "Error al cargar la grabación de llamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "El servidor de grabación falló al cargar la grabación de la llamada {call}. Por favor, comunícalo a la administración.", + "Share to chat" : "Compartir en el chat", + "Dismiss notification" : "Descartar notificación", + "Call recording now available" : "Grabación de la llamada disponible ahora", + "The recording for the call in {call} was uploaded to {file}." : "La grabación de la llamada en {call} se ha cargado en {file}.", + "Transcript now available" : "Transcripción disponible ahora", + "The transcript for the call in {call} was uploaded to {file}." : "La transcripción de la llamada en {call} se ha cargado en {file}.", + "Failed to transcript call recording" : "Error en la transcripción de la grabación de llamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "El servidor falló en transcribir la grabación en {file} para la llamada en {call}. Por favor, comunícalo a la administración.", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Reminder" : "Recordatorio", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado de {call}", + "{guest} (guest) in {call}" : "{guest} (invitado) en {call}", + "Guest in {call}" : "Invitado en {call}", + "{user} sent you a private message" : "{user} te envió un mensaje privado", + "{user} sent a message in conversation {call}" : "{user} envió un mensaje a la conversación {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado envió un mensaje a la conversación {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) envió un mensaje a la conversación {call}", + "A guest sent a message in conversation {call}" : "Un invitado envió un mensaje a la conversación {call}", + "{user} replied to your private message" : "{user} respondió a tu mensaje privado", + "{user} replied to your message in conversation {call}" : "{user} respondió su mensaje privado en la conversación {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario eliminado respondió a tu mensaje en la conversación {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (invitado) respondió a tu mensaje en la conversación {call}", + "A guest replied to your message in conversation {call}" : "Un invitado respondió a tu mensaje en la conversación {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionó con {reaction} a tu mensaje privado", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionó con {reaction} a tu mensaje en la conversación {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionó con {reaction} a tu mensaje en la conversación {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invitado) reaccionó con {reaction} a tu mensaje en la conversación {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invitado reaccionó con {reaction} a tu mensaje en la conversación {call}", + "{user} mentioned you in a private conversation" : "{user} te mencionó en una conversación privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionó al grupo {group} en la conversación {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionó a todos en la conversación {call}", + "{user} mentioned you in conversation {call}" : "{user} te mencionó en la conversación {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionó al grupo {group} en la conversación {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionó a todos en la conversación {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado te mencionó en la conversación {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invitado) mencionó al grupo {group} en la conversación {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invitado) mencionó a todos en la conversación {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (invitado) te mencionó en la conversación {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invitado mencionó al grupo {group} en la conversación {call}", + "A guest mentioned everyone in conversation {call}" : "Un invitado mencionó a todos en la conversación {call}", + "A guest mentioned you in conversation {call}" : "Un invitado te mencionó en la conversación {call}", + "View chat" : "Ver chat", + "{user} invited you to a group conversation: {call}" : "{user} te invitó a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "Answer call" : "Responder llamada", + "{user} would like to talk with you" : "{user} desea hablar contigo", + "Call back" : "Devolver llamada", + "You missed a call from {user}" : "Perdiste una llamada de {user}", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "You missed a group call in {call}" : "Te perdiste una llamada de grupo en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando la contraseña para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} intentó solicitar la contraseña para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguien está solicitando la contraseña para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguien intentó solicitar la contraseña para acceder a {file}", + "Open settings" : "Abrir configuraciones", + "The hosted signaling server is now configured and will be used." : "El servidor de señalización alojado ahora está configurado y se utilizará.", + "The hosted signaling server was removed and will not be used anymore." : "Se eliminó el servidor de señalización alojado y ya no se utilizará.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "El estado de la cuenta del servidor de señalización alojado cambió de \"{oldstatus}\" a \"{newstatus}\".", + "error" : "error", + "The certificate of {host} expires in {days} days" : "El certificado de {host} expira en {days} días", + "The certificate of {host} expired" : "El certificado de {host} expiró", + "Contact via Talk" : "Contacto a través de Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Webinar" : "Seminario web", + "Conversations" : "Conversaciones", + "{user}" : "{user}", + "Messages" : "Mensajes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensajes en otras conversaciones", + "One-to-one rooms always need to show the other users avatar" : "Las salas de uno a uno siempre necesitan mostrar el avatar de los otros usuarios", + "Invalid emoji character" : "Carácter de emoji no válido", + "Invalid background color" : "Color de fondo no válido", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Room {number}" : "Sala {number}", + "Other" : "Otro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Error al solicitar la prueba porque el servidor de prueba no se puede alcanzar. Por favor, inténtalo de nuevo más tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta instancia. Tal vez no se puede alcanzar desde el exterior para verificar su URL.", + "Something unexpected happened." : "Algo inesperado ocurrió.", + "The URL is invalid." : "La URL no es válida.", + "An HTTPS URL is required." : "Se requiere una URL HTTPS.", + "The email address is invalid." : "La dirección de correo electrónico no es válida.", + "The language is invalid." : "El idioma no es válido.", + "The country is invalid." : "El país no es válido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hay un problema con la solicitud de prueba. Por favor, revisa tus registros para obtener más información.", + "Too many requests are send from your servers address. Please try again later." : "Se están enviando demasiadas solicitudes desde la dirección de tu servidor. Por favor, inténtalo de nuevo más tarde.", + "There is already a trial registered for this Nextcloud instance." : "Ya hay un registro de prueba para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Algo inesperado ocurrió. Por favor, inténtalo de nuevo más tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Error al solicitar la prueba porque el servidor de prueba se comportó de manera incorrecta. Por favor, inténtalo de nuevo más tarde.", + "Trial requested but failed to get account information. Please check back later." : "Se solicitó la prueba pero no se pudo obtener la información de la cuenta. Por favor, revisa más tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hay un problema con la autenticación de esta solicitud. Tal vez no se pueda alcanzar desde el exterior para verificar su URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No se pudo obtener la información de la cuenta porque el servidor de prueba se comportó de manera incorrecta. Por favor, revisa más tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hay un problema con la obtención de la información de la cuenta. Por favor, revisa tus registros para obtener más información.", + "There is no such account registered." : "No existe esa cuenta registrada.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No se pudo obtener la información de la cuenta porque el servidor de prueba no se puede alcanzar. Por favor, revisa más tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "Error al eliminar la cuenta del servidor de señalización alojado. Por favor, revisa más tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No se pudo eliminar la cuenta porque el servidor de prueba se comportó de manera incorrecta. Por favor, revisa más tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hay un problema con la eliminación de la cuenta. Por favor, revisa tus registros para obtener más información.", + "Too many requests are sent from your servers address. Please try again later." : "Se están enviando demasiadas solicitudes desde la dirección de tu servidor. Por favor, inténtalo de nuevo más tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No se pudo eliminar la cuenta porque el servidor de prueba no se puede alcanzar. Por favor, revisa más tarde.", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Estado Plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, República Democrática del", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Estados Federados de Micronesia", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica de", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "República Popular Democrática de Corea", + "Korea, Republic of" : "Corea del Sur", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavia, República de", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Macedonia del Norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Esuatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwán, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Islas Vírgenes Británicas", + "Virgin Islands, U.S." : "Islas Vírgenes de los Estados Unidos", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federación", + "High-performance backend" : "Backend de alto rendimiento", + "Error: Cannot connect to server" : "Error: No se puede conectar al servidor", + "Error: Server did not respond with proper JSON" : "Error: El servidor no respondió con un JSON adecuado", + "Error: Certificate expired" : "Error: Certificado caducado", + "Could not get version" : "No se pudo obtener la versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Versión en ejecución: {version}; El servidor debe actualizarse para ser compatible con esta versión de Talk", + "Error: Server responded with: {error}" : "Error: El servidor respondió con: {error}", + "Error: Unknown error occurred" : "Error: Ocurrió un error desconocido", + "Recording backend" : "Backend de grabación", + "SIP configuration" : "Configuración SIP", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Conversation not found" : "Conversación no encontrada", + "Chat, video & audio-conferencing using WebRTC" : "Chat, videoconferencia y audioconferencia utilizando WebRTC", + "Leave call" : "Dejar la llamada", + "Navigating away from the page will leave the call in {conversation}" : "Al salir de la página, dejarás la llamada en {conversation}", + "Stay in call" : "Permanecer en la llamada", + "Discuss this file" : "Discutir este archivo", + "Share this file with others to discuss it" : "Comparte este archivo con otros para discutirlo", + "Share this file" : "Compartir este archivo", + "Join conversation" : "Unirse a la conversación", + "This conversation is password-protected." : "Esta conversación está protegida con contraseña.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Hemos detectado varios intentos de contraseña no válidos desde tu dirección IP. Por lo tanto, tu próximo intento está limitado a 30 segundos.", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Error requesting the password." : "Error al solicitar la contraseña.", + "Request password" : "Solicitar contraseña", + "This conversation has ended" : "Esta conversación ha terminado", + "Error occurred when joining the conversation" : "Ocurrió un error al unirse a la conversación", + "Close Talk sidebar" : "Cerrar barra lateral de Talk", + "Open Talk sidebar" : "Abrir barra lateral de Talk", + "Everyone" : "Todos", + "Users and moderators" : "Usuarios y moderadores", + "Moderators only" : "Solo moderadores", + "Disable calls" : "Desactivar llamadas", + "Save changes" : "Guardar cambios", + "Saving …" : "Saving …", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cuando se selecciona al menos un grupo, solo las personas de los grupos listados pueden ser parte de las conversaciones.", + "Guests can still join public conversations." : "Los invitados aún pueden unirse a conversaciones públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Los usuarios que ya no pueden usar Talk aún aparecerán como participantes en sus conversaciones anteriores y también se conservarán sus mensajes de chat.", + "Limit using Talk" : "Limitar uso de Talk", + "Limit creating a public and group conversation" : "Limitar creación de conversaciones públicas y de grupo", + "Limit creating conversations" : "Limitar creación de conversaciones", + "Limit starting a call" : "Limitar inicio de llamada", + "Limit starting calls" : "Limitar inicio de llamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cuando una llamada ha comenzado, todos con acceso a la conversación pueden unirse a la llamada.", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "All messages" : "Todos los mensajes", + "@-mentions only" : "Solo @-menciones", + "Off" : "Apagado", + "General settings" : "Configuraciones generales", + "Default notification settings" : "Configuración de notificaciones predeterminadas", + "Default group notification" : "Notificación de grupo predeterminada", + "Default group notification for new groups" : "Notificación de grupo predeterminada para nuevos grupos", + "Integration into other apps" : "Integración en otras aplicaciones", + "Allow conversations on files" : "Permitir conversaciones en archivos", + "Allow conversations on public shares for files" : "Permitir conversaciones en comparticiones públicas para archivos", + "Enable encryption" : "Habilitar encripción", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Haciendo clic en el botón de arriba, la información del formulario se envía a los servidores de Struktur AG. Puedes encontrar más información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Expirado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "No se pudo solicitar la prueba. Por favor, inténtalo de nuevo más tarde.", + "The account could not be deleted. Please try again later." : "No se pudo eliminar la cuenta. Por favor, inténtalo de nuevo más tarde.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nuestro socio Struktur AG ofrece un servicio donde se puede solicitar un servidor de señalización alojado. Para ello, solo necesitas completar el siguiente formulario y tu Nextcloud lo solicitará. Una vez que se configure el servidor para ti, las credenciales se llenarán automáticamente. Esto sobrescribirá la configuración actual del servidor de señalización.", + "URL of this Nextcloud instance" : "URL de esta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nombre completo del usuario que solicita la prueba", + "Email of the user" : "Correo electrónico del usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar prueba del servidor de señalización", + "You can see the current status of your hosted signaling server in the following table." : "Puedes ver el estado actual de tu servidor de señalización alojado en la siguiente tabla.", + "Status" : "Estatus", + "Created at" : "Creado en", + "Expires at" : "Expira en", + "Limits" : "Límites", + "Delete the signaling server account" : "Eliminar la cuenta del servidor de señalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Puedes instalar Matterbridge para enlazar Nextcloud Talk con otros servicios, visita su {linkstart1}página de GitHub{linkend} para obtener más detalles. La descarga e instalación de la aplicación pueden llevar un tiempo. En caso de que expire, por favor, instálala manualmente desde la {linkstart2}Tienda de aplicaciones de Nextcloud{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "No se encontró o no se pudo ejecutar el archivo binario de Matterbridge.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "También puedes configurar manualmente la ruta del archivo binario de Matterbridge a través de la configuración. Consulta la {linkstart}documentación de integración de Matterbridge{linkend} para obtener más información.", + "Downloading …" : "Descargando…", + "Install Talk Matterbridge" : "Instalar Matterbridge de Talk", + "An error occurred while installing the Matterbridge app" : "Ocurrió un error durante la instalación de la aplicación Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocurrió un error durante la instalación de Talk Matterbridge. Por favor, instálala manualmente.", + "Failed to execute Matterbridge binary." : "Error al ejecutar el archivo binario de Matterbridge.", + "Matterbridge integration" : "Integración de Matterbridge", + "Enable Matterbridge integration" : "Habilitar integración de Matterbridge", + "Status: Checking connection" : "Estado: Comprobando la conexión", + "OK: Running version: {version}" : "OK: Versión en ejecución: {version}", + "Recording backend URL" : "URL del servidor de grabación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Las configuraciones PHP \"upload_max_filesize\" o \"post_max_size\" solo permitirán cargar archivos de hasta {maxUpload}.", + "Recording backend settings saved" : "Configuración del backend de grabación guardada", + "Add a new recording backend server" : "Agregar un nuevo servidor de backend de grabación", + "Shared secret" : "Secreto compartido", + "SIP configuration saved!" : "Configuración SIP guardada", + "Restrict SIP configuration" : "Restringir la configuración SIP", + "Enable SIP configuration" : "Habilitar la configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo los usuarios de los siguientes grupos pueden habilitar SIP en las conversaciones que moderan", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información se envía en los correos electrónicos de invitación y se muestra en la barra lateral a todos los participantes.", + "Error code" : "Código de error", + "High-performance backend URL" : "URL del backend de alto rendimiento", + "High-performance backend settings saved" : "Configuración del backend de alto rendimiento guardada", + "STUN server URL" : "URL del servidor STUN", + "The server address is invalid" : "La dirección del servidor no es válida", + "STUN settings saved" : "Configuración STUN guardada", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "Add a new STUN server" : "Agregar un nuevo servidor STUN", + "{schema} scheme must be used with a domain" : "El esquema {schema} debe usarse con un dominio", + "{option1} and {option2}" : "{option1} y {option2}", + "{option} only" : "Solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Se han devuelto con éxito candidatos ICE por el servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Error: El servidor TURN no devolvió candidatos ICE válidos", + "Testing whether the TURN server returns ICE candidates" : "Probando si el servidor TURN devuelve candidatos ICE", + "TURN server schemes" : "Esquemas del servidor TURN", + "TURN server URL" : "URL del servidor TURN", + "TURN server secret" : "Secreto del servidor TURN", + "TURN server protocols" : "Protocolos del servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un servidor TURN se utiliza para proxificar el tráfico de los participantes detrás de un cortafuegos. Si los participantes individuales no pueden conectarse a otros, probablemente se requiera un servidor TURN. Consulta {linkstart}esta documentación{linkend} para obtener instrucciones de configuración.", + "TURN settings saved" : "Configuración TURN guardada", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Agregar un nuevo servidor TURN", + "Failed" : "Error", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Error: WebAssembly está deshabilitado o no es compatible con este navegador. Por favor, habilita WebAssembly o utiliza un navegador con soporte para realizar la comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Error: Los archivos \".wasm\" y \".tflite\" no se devolvieron correctamente por el servidor web. Por favor, revisa la sección de \"Requisitos del sistema\" en la documentación de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Los archivos \".wasm\" y \".tflite\" se devolvieron correctamente por el servidor web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que la configuración de PHP y Apache no es compatible. Ten en cuenta que PHP solo se puede usar con el módulo MPM_PREFORK y PHP-FPM solo se puede usar con el módulo MPM_EVENT.", + "Web server setup checks" : "Comprobaciones de configuración del servidor web", + "Files required for virtual background can be loaded" : "Se pueden cargar los archivos necesarios para el fondo virtual", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas separadas", + "Number of breakout rooms" : "Número de salas separadas", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar automáticamente a los participantes", + "Manually assign participants" : "Asignar manualmente a los participantes", + "Allow participants to choose" : "Permitir que los participantes elijan", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas separadas", + "Reset" : "Restablecer", + "Delete breakout rooms" : "Eliminar salas separadas", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Las salas separadas y la configuración actual se perderán", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes no asignados", + "Back" : "Atrás", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Agregar participante \"{user}\"", + "Now" : "Ahora", + "Loading …" : "Cargando...", + "From" : "De", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "Search participants" : "Buscar participantes", + "No results" : "No hay resultados", + "Done" : "Hecho", + "Raise hand" : "Levantar la mano", + "Raise hand (R)" : "Levantar la mano (R)", + "Lower hand" : "Bajar la mano", + "Lower hand (R)" : "Bajar la mano (R)", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista de orador", + "Grid view" : "Vista de cuadrícula", + "This conversation is read-only" : "Esta conversación es de solo lectura", + "{nickName} raised their hand." : "{nickName} levantó la mano.", + "A participant raised their hand." : "Un participante levantó la mano.", + "Collapse stripe" : "Ocultar franja", + "Expand stripe" : "Expandir franja", + "Previous page of videos" : "Página anterior de videos", + "Next page of videos" : "Página siguiente de videos", + "Connecting …" : "Conectando...", + "Waiting for {user} to join the call" : "Esperando a que {user} se una a la llamada", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "You are not allowed to enable audio" : "No tienes permiso para habilitar el audio", + "No audio. Click to select device" : "Sin audio. Haz clic para seleccionar el dispositivo", + "Mute audio" : "Silenciar audio", + "Mute audio (M)" : "Silenciar audio (M)", + "Unmute audio" : "Activar audio", + "Unmute audio (M)" : "Activar audio (M)", + "None" : "Ninguno", + "Access to camera was denied" : "Fue denegado el acceso a la cámara", + "Error while accessing camera: It is likely in use by another program" : "Error al acceder a la cámara: Es probable que esté siendo utilizada por otro programa", + "Error while accessing camera" : "Error mientras se accede a la cámara", + "You have been muted by a moderator" : "Tienes el micrófono desactivado por un moderador", + "You are not allowed to enable video" : "No tienes permiso para habilitar el video", + "No video. Click to select device" : "Sin video. Haz clic para seleccionar el dispositivo", + "Disable video" : "Deshabilitar video", + "Disable video (V)" : "Desactivar video (V)", + "Enable video" : "Habilitar el video", + "Enable video (V)" : "Habilitar video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video: Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video (V): Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Habilitar video: Tu conexión se interrumpirá brevemente al habilitar el video por primera vez", + "You" : "Tú", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Mostrar pantalla", + "Stop following" : "Dejar de seguir", + "Connection could not be established …" : "No se pudo establecer la conexión…", + "Connection was lost and could not be re-established …" : "Se perdió la conexión y no se pudo restablecer…", + "Connection could not be established. Trying again …" : "No se pudo establecer la conexión. Intentando nuevamente…", + "Connection lost. Trying to reconnect …" : "Se perdió la conexión. Intentando reconectar…", + "Connection problems …" : "Problemas de conexión…", + "Collapse" : "Colapsar", + "Expand" : "Expandir", + "You need to be logged in to upload files" : "Necesitas estar registrado para subir archivos", + "Drop your files to upload" : "Suelta tus archivos para subirlos", + "Conversation messages" : "Mensajes de la conversación", + "Scroll to bottom" : "Desplazarse hasta abajo", + "Post message" : "Enviar mensaje", + "Favorite" : "Hacer favorito", + "Date:" : "Fecha:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Error while updating conversation name" : "Error al actualizar el nombre de la conversación", + "Error while updating conversation description" : "Error al actualizar la descripción de la conversación", + "Enter a name for this conversation" : "Ingresa un nombre para esta conversación", + "Edit conversation name" : "Editar nombre de la conversación", + "Edit conversation description" : "Editar descripción de la conversación", + "Enter a description for this conversation" : "Ingresa una descripción para esta conversación", + "Picture" : "Imagen", + "Disable" : "Deshabilitar", + "Enable" : "Habilitar", + "Breakout rooms" : "Salas separadas", + "Manage breakout rooms" : "Gestionar salas de grupos", + "Set up breakout rooms for this conversation" : "Configurar salas separadas para esta conversación", + "Please select a valid PNG or JPG file" : "Por favor, selecciona un archivo PNG o JPG válido", + "Choose your conversation picture" : "Elegir imagen de la conversación", + "Choose" : "Seleccionar", + "Error setting conversation picture" : "Error al establecer la imagen de la conversación", + "Could not set the conversation picture: {error}" : "Error al recortar la imagen de la conversación", + "Error cropping conversation picture" : "No se pudo establecer la imagen de la conversación: {error}", + "Error removing conversation picture" : "Error al eliminar la imagen de la conversación", + "Set emoji as conversation picture" : "Establecer un emoji como imagen de la conversación", + "Set background color for conversation picture" : "Establecer el color de fondo para la imagen de la conversación", + "Upload conversation picture" : "Subir imagen de la conversación", + "Choose conversation picture from files" : "Elegir imagen de la conversación desde archivos", + "Remove conversation picture" : "Eliminar imagen de la conversación", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Set picture" : "Establecer imagen", + "Default permissions modified for {conversationName}" : "Permisos predeterminados modificados para {nombreConversación}", + "Could not modify default permissions for {conversationName}" : "No se pudieron modificar los permisos predeterminados para {nombreConversación}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editar los permisos predeterminados para los participantes en esta conversación. Estas configuraciones no afectan a los moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen los permisos en esta sección, se perderán los permisos personalizados asignados previamente a los participantes individuales.", + "All permissions" : "Todos los permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Los participantes tienen permisos para iniciar una llamada, unirse a una llamada, habilitar el audio y video, y compartir pantalla.", + "Restricted" : "Restringido", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Los participantes pueden unirse a las llamadas, pero no pueden habilitar el audio ni el video ni compartir pantalla hasta que un moderador les otorgue permisos manualmente.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Configuración de la conversación", + "Basic Info" : "Información básica", + "Personal" : "Personal", + "Moderation" : "Moderación", + "Breakout Rooms" : "Salas separadas", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zona peligrosa", + "Leave conversation" : "Dejar la conversación", + "You need to promote a new moderator before you can leave the conversation" : "Necesitas promover un nuevo moderador antes de poder abandonar la conversación", + "Delete conversation" : "Borrar conversación", + "Do you really want to delete \"{displayName}\"?" : "¿Realmente quieres eliminar \"{nombreCompleto}\"?", + "Error while deleting conversation" : "Error al eliminar la conversación", + "Delete all chat messages" : "Eliminar todos los mensajes del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "¿Realmente quieres eliminar todos los mensajes en \"{nombreCompleto}\"?", + "Error while clearing chat history" : "Error al borrar el historial del chat", + "Be careful, these actions cannot be undone." : "Ten cuidado, estas acciones no se pueden deshacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una vez que se abandona una conversación, para volver a unirse a una conversación cerrada, se necesita una invitación. Una conversación abierta se puede volver a unir en cualquier momento.", + "Permanently delete this conversation." : "Eliminar permanentemente esta conversación.", + "Delete chat messages" : "Eliminar mensajes del chat", + "Permanently delete all the messages in this conversation." : "Eliminar permanentemente todos los mensajes en esta conversación.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n day","%n days","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks","%n weeks"], + "Custom expiration time" : "Hora de vencimiento personalizada", + "Message expiration disabled" : "Vencimiento del mensaje deshabilitado", + "Message expiration set: {duration}" : "Vencimiento del mensaje establecido: {duration}", + "Error when trying to set message expiration" : "Error al intentar establecer el vencimiento del mensaje", + "Message expiration" : "Vencimiento del mensaje", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Los mensajes de chat pueden vencer después de cierto tiempo. Nota: Los archivos compartidos en el chat no se eliminarán para el propietario, pero ya no se compartirán en la conversación.", + "Guest access" : "Acceso de invitado", + "Allow guests to join this conversation via link" : "Permitir que los invitados se unan a esta conversación a través de un enlace", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Enter new password" : "Ingresa una nueva contraseña", + "Save password" : "Guardar contraseña", + "Resend invitations" : "Volver a enviar invitaciones", + "Error occurred when opening or limiting the conversation" : "Error al abrir o limitar la conversación", + "Open conversation to registered users, showing it in search results" : "Abrir la conversación a usuarios registrados, mostrándola en los resultados de búsqueda", + "Start time has been updated" : "La hora de inicio se ha actualizado", + "Error occurred while updating start time" : "Error al actualizar la hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Al habilitar el vestíbulo, los no moderadores se eliminarán de la llamada en curso.", + "Enable lobby, restricting the conversation to moderators" : "Habilitar el vestíbulo, restringiendo la conversación a los moderadores", + "Meeting start time" : "Hora de inicio de la reunión", + "Start time (optional)" : "Hora de inicio (opcional)", + "Error occurred when locking the conversation" : "Error al bloquear la conversación", + "Error occurred when unlocking the conversation" : "Error al desbloquear la conversación", + "Lock conversation" : "Bloquear conversación", + "This will also terminate the ongoing call." : "Esto también terminará la llamada en curso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear la conversación para evitar que alguien publique mensajes o inicie llamadas", + "Edit" : "Editar", + "More information" : "More information", + "Delete" : "Borrar", + "Add new bridged channel to current conversation" : "Agregar nuevo canal vinculado a la conversación actual", + "unknown state" : "estado desconocido", + "running" : "ejecutándose", + "not running, check Matterbridge log" : "no se está ejecutando, revisa el registro de Matterbridge", + "not running" : "no se está ejecutando", + "Bridge saved" : "Puente guardado", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puedes vincular canales de varios sistemas de mensajería instantánea con Matterbridge.", + "More info on Matterbridge" : "Más información sobre Matterbridge", + "Enable bridge" : "Habilitar puente", + "Show Matterbridge log" : "Mostrar registro de Matterbridge", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Notify about calls in this conversation" : "Notificar sobre llamadas en esta conversación", + "Important conversation" : "Conversación importante", + "SIP dial-in is now possible without PIN requirement" : "Ahora es posible el acceso telefónico SIP sin requerimiento de PIN", + "SIP dial-in is now enabled" : "El acceso telefónico SIP ahora está habilitado", + "SIP dial-in is now disabled" : "El acceso telefónico SIP ahora está deshabilitado", + "Error occurred when enabling SIP dial-in" : "Se produjo un error al habilitar el acceso telefónico SIP", + "Error occurred when disabling SIP dial-in" : "Se produjo un error al deshabilitar el acceso telefónico SIP", + "Phone and SIP dial-in" : "Marcar y acceso telefónico SIP", + "Enable phone and SIP dial-in" : "Habilitar marcar y acceso telefónico SIP", + "Allow to dial-in without a PIN" : "Permitir marcar y acceder sin PIN", + "In {conversation}" : "En {conversation}", + "Join" : "Unirse", + "Error while creating the conversation" : "Error al crear la conversación", + "Unread mentions" : "Menciones no leídas", + "Create conversation" : "Crear conversación", + "Log in" : "Ingresar", + "Mark as read" : "Marcar como leído", + "Mark as unread" : "Marcar como no leído", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "You need to promote a new moderator before you can leave the conversation." : "Necesitas promover un nuevo moderador antes de abandonar la conversación.", + "Conversation actions" : "Acciones de la conversación", + "Home" : "Inicio", + "Unread" : "No leído", + "Alphabetically" : "Alfabéticamente", + "No matches found" : "No se encontraron coincidencias", + "No conversations found" : "No se encontraron conversaciones", + "An error occurred while performing the search" : "Se produjo un error al realizar la búsqueda", + "Conversation list" : "Lista de conversaciones", + "Unread messages" : "Mensajes no leídos", + "Clear filters" : "Borrar filtros", + "Threads" : "Hilos", + "Clear filter" : "Borrar filtro", + "App settings" : "Configuraciones de la aplicación", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Other sources" : "Otras fuentes", + "Open conversations" : "Conversaciones abiertas", + "No search results" : "No hay resultados de búsqueda", + "Users and groups" : "Usuarios y grupos", + "The meeting will start soon" : "La reunión comenzará pronto", + "This meeting is scheduled for {startTime}" : "Esta reunión está programada para {startTime}", + "You are currently waiting in the lobby" : "Actualmente estás esperando en el vestíbulo", + "Select microphone" : "Seleccionar micrófono", + "No microphone available" : "No hay micrófono disponible", + "Select camera" : "Seleccione la cámara", + "No camera available" : "No hay cámara disponible", + "Test" : "Prueba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sin audio", + "No camera" : "No hay cámara", + "Calls are not supported in your browser" : "Las llamadas no son compatibles en tu navegador", + "Access to microphone is only possible with HTTPS" : "El acceso al micrófono solo es posible con HTTPS", + "Access to microphone was denied" : "Se denegó el acceso al micrófono", + "Error while accessing microphone" : "Error al acceder al micrófono", + "Access to camera is only possible with HTTPS" : "El acceso a la cámara sólo es posible con HTTPS", + "The call is being recorded." : "La llamada está siendo grabada.", + "Select virtual office background" : "Seleccionar fondo de oficina virtual", + "Select virtual home background" : "Seleccionar fondo de hogar virtual", + "Select virtual abstract background" : "Seleccionar fondo abstracto virtual", + "Select virtual beach background" : "Seleccionar fondo de playa virtual", + "Select virtual park background" : "Seleccionar fondo de parque virtual", + "Select virtual theater background" : "Seleccionar fondo de teatro virtual", + "Select virtual library background" : "Seleccionar fondo de biblioteca virtual", + "Select virtual space station background" : "Seleccionar fondo de estación espacial virtual", + "Error while uploading the file" : "Error al cargar el archivo", + "Select a file" : "Seleccionar un archivo", + "Invalid path selected" : "Ruta seleccionada no válida.", + "Select virtual background from file {fileName}" : "Seleccionar fondo virtual del archivo {fileName}", + "Blur" : "Desenfoque", + "Upload" : "Cargar", + "Files" : "Archivos", + "The message has expired or has been deleted" : "El mensaje ha caducado o ha sido eliminado", + "Cancel quote" : "Cancelar cotización", + "24 hours" : "24 horas", + "7 days" : "7 días", + "Add a reaction to this message" : "Agregar una reacción a este mensaje", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Reply privately" : "Responder de forma privada", + "Edit message" : "Editar mensaje", + "Copy message link" : "Copiar enlace del mensaje", + "Go to file" : "Ir al archivo", + "Forward message" : "Reenviar mensaje", + "Translate" : "Traducir", + "Close reactions menu" : "Cerrar menú de reacciones", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con otro emoji", + "Choose a conversation to forward the selected message." : "Elige una conversación para reenviar el mensaje seleccionado.", + "Error while forwarding message" : "Error al reenviar el mensaje", + "The message has been forwarded to {selectedConversationName}" : "El mensaje ha sido reenviado a {selectedConversationName}", + "Dismiss" : "Descartar", + "Go to conversation" : "Ir a la conversación", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "No se pudo traducir el mensaje", + "Translation copied to clipboard" : "Traducción copiada al portapapeles", + "Translation could not be copied" : "No se pudo copiar la traducción", + "Translate message" : "Traducir mensaje", + "Source language to translate from" : "Idioma de origen para traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Idioma de destino para la traducción", + "Translate to" : "Traducir a", + "Translating" : "Traduciendo", + "Copy translated text" : "Copiar texto traducido", + "Send now" : "Enviar ahora", + "Message read by everyone who shares their reading status" : "Mensaje leído por todos los que comparten su estado de lectura", + "Message sent" : "Mensaje enviado", + "Deleting message" : "Borrando mensaje", + "Message deleted successfully" : "Mensaje eliminado correctamente", + "Message could not be deleted because it is too old" : "No se pudo eliminar el mensaje porque es demasiado antiguo", + "Only normal chat messages can be deleted" : "Solo los mensajes de chat normales se pueden eliminar", + "An error occurred while deleting the message" : "Se produjo un error al eliminar el mensaje", + "Your browser does not support playing audio files" : "Tu navegador no admite la reproducción de archivos de audio", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarjeta de mazo", + "Remove {fileName}" : "Eliminar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta ubicación en OpenStreetMap", + "Sending message" : "Enviando mensaje", + "Failed to send the message. Click to try again" : "No se pudo enviar el mensaje. Haz clic para intentar nuevamente", + "Not enough free space to upload file" : "No hay suficiente espacio libre para subir el archivo", + "You cannot send messages to this conversation at the moment" : "No puedes enviar mensajes a esta conversación en este momento", + "You voted" : "Votaste", + "_%n vote_::_%n votes_" : ["%n voto","%n votos","%n votos"], + "Open poll" : "Encuesta abierta", + "See results" : "Ver resultados", + "No permission to post reactions in this conversation" : "No tienes permiso para publicar reacciones en esta conversación", + "Add more reactions" : "Agregar más reacciones", + "No messages" : "Sin mensajes", + "All messages have expired or have been deleted." : "Todos los mensajes han caducado o han sido eliminados.", + "Unpin" : "Desanclar", + "Cancel search" : "Cancelar búsqueda", + "Create a new group conversation" : "Crear una nueva conversación grupal", + "Add participants" : "Agregar participantes", + "Conversation visibility" : "Visibilidad de la conversación", + "Allow guests to join via link" : "Permitir que los invitados se unan mediante enlace", + "Enter password" : "Introducir contraseña", + "This conversation has been locked" : "Esta conversación ha sido bloqueada", + "No permission to post messages in this conversation" : "No tienes permiso para enviar mensajes en esta conversación", + "Joining conversation …" : "Unirse a la conversación ...", + "Send message" : "Enviar mensaje", + "Send without notification" : "Enviar sin notificación", + "File to share" : "Archivo para compartir", + "Add emoji" : "Añadir emoji", + "Send later" : "Enviar más tarde", + "Cancel editing" : "Cancelar edición", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde Archivos", + "Share files to the conversation" : "Compartir archivos en la conversación", + "Upload from device" : "Subir desde el dispositivo", + "Create new poll" : "Crear nueva encuesta", + "Smart picker" : "Selector inteligente", + "Record voice message" : "Grabar mensaje de voz", + "End recording and send" : "Finalizar grabación y enviar", + "Dismiss recording" : "Descartar grabación", + "Access to the microphone was denied" : "Se ha denegado el acceso al micrófono", + "Microphone either not available or disabled in settings" : "El micrófono no está disponible o está desactivado en la configuración", + "Error while recording audio" : "Error al grabar audio", + "New file" : "Nuevo archivo", + "Blank" : "En blanco", + "Error while creating file" : "Error al crear el archivo", + "Create and share a new file" : "Crear y compartir un nuevo archivo", + "Name of the new file" : "Nombre del nuevo archivo", + "Create file" : "Crear archivo", + "Someone is typing …" : "Alguien está escribiendo …", + "{user1} is typing …" : "{user1} está escribiendo …", + "{user1} and {user2} are typing …" : "{user1} y {user2} están escribiendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} y {user3} están escribiendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} y %n otro están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …","{user1}, {user2}, {user3} y %n otros están escribiendo …"], + "Add more files" : "Agregar más archivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "En esta conversación {user} puede:", + "Edit default permissions for participants in {conversationName}" : "Editar permisos predeterminados para los participantes en {conversationName}", + "Start a call" : "Iniciar una llamada", + "Skip the lobby" : "Saltar el vestíbulo", + "Can post messages and reactions" : "Puede publicar mensajes y reacciones", + "Enable the microphone" : "Habilitar el micrófono", + "Enable the camera" : "Habilitar la cámara", + "Share the screen" : "Compartir pantalla", + "Update permissions" : "Actualizar permisos", + "Updating permissions" : "Actualizando permisos", + "Create poll" : "Crear encuesta", + "Question" : "Pregunta", + "Ask a question" : "Hacer una pregunta", + "Answers" : "Respuestas", + "Answer {option}" : "Responder {option}", + "Delete poll option" : "Eliminar opción de encuesta", + "Add answer" : "Agregar respuesta", + "Settings" : "Configuraciones ", + "Anonymous poll" : "Encuesta anónima", + "Multiple answers" : "Respuestas múltiples", + "You voted for this option" : "Has votado por esta opción", + "End poll" : "Finalizar encuesta", + "Change your vote" : "Cambiar tu voto", + "Results" : "Resultados", + "Voted participants" : "Participantes que votaron", + "Send a message to \"{roomName}\"" : "Enviar un mensaje a \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Mostrar lista de participantes", + "Assistance requested in {roomName}" : "Asistencia solicitada en {roomName}", + "The message was sent to \"{roomName}\"" : "El mensaje se envió a \"{roomName}\"", + "Dismiss request for assistance" : "Descartar solicitud de asistencia", + "Send message to room" : "Enviar mensaje a la sala", + "Back to main room" : "Volver a la sala principal", + "Back to your room" : "Volver a tu sala", + "Message all rooms" : "Enviar mensaje a todas las salas", + "Start session" : "Iniciar sesión", + "Start a call before you start a breakout room session" : "Iniciar una llamada antes de comenzar la sesión de salas de grupos", + "Stop session" : "Detener sesión", + "The message was sent to all breakout rooms" : "El mensaje se envió a todas las salas separadas", + "Send a message to all breakout rooms" : "Enviar un mensaje a todas las salas separadas", + "Breakout rooms are not started" : "Las salas de grupos no han sido iniciadas", + "Disable lobby" : "Deshabilitar vestíbulo", + "Settings for participant \"{user}\"" : "Configuración para el participante \"{user}\"", + "Participant \"{user}\"" : "Participante \"{user}\"", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "invitado/a", + "Raised their hand" : "Levantó la mano", + "Joined with video" : "Se unió con video", + "Joined via phone" : "Se unió a través del teléfono", + "Joined with audio" : "Se unió con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "El texto debe tener una longitud menor o igual a {maxLength} caracteres. Tu texto actual tiene {charactersCount} caracteres.", + "Remove group and members" : "Eliminar grupo y miembros", + "Remove participant" : "Eliminar participante", + "Notification was sent to {displayName}" : "Se envió una notificación a {displayName}", + "Could not send notification to {displayName}" : "No se pudo enviar la notificación a {displayName}", + "Permissions granted to {displayName}" : "Permisos otorgados a {displayName}", + "Could not modify permissions for {displayName}" : "No se pudieron modificar los permisos para {displayName}", + "Permissions removed for {displayName}" : "Permisos eliminados para {displayName}", + "Permissions set to default for {displayName}" : "Permisos restablecidos a los valores predeterminados para {displayName}", + "Dial-in PIN" : "PIN para marcar desde teléfono", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Reenviar invitación", + "Send call notification" : "Enviar notificación de llamada", + "Reset custom permissions" : "Restablecer permisos personalizados", + "Grant all permissions" : "Otorgar todos los permisos", + "Remove all permissions" : "Eliminar todos los permisos", + "Permissions modified for {displayName}" : "Permisos modificados para {displayName}", + "Add users or groups" : "Agregar usuarios o grupos", + "Add users" : "Agregar usuarios", + "Add groups" : "Agregar grupos", + "Add other sources" : "Agregar otras fuentes", + "Add emails" : "Agregar correos electrónicos", + "Integrations" : "Integraciones", + "Add federated users" : "Agregar usuarios federados", + "Searching …" : "Buscando...", + "Search for more users" : "Buscar más usuarios", + "Search or add participants" : "Buscar o agregar participantes", + "Invitation was sent to {actorId}" : "La invitación fue enviada a {actorId}", + "An error occurred while adding the participants" : "Se produjo un error al agregar los participantes", + "Participants" : "Participantes", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir chat", + "You have new unread messages in the chat." : "Tienes nuevos mensajes no leídos en el chat.", + "You have been mentioned in the chat." : "Has sido mencionado en el chat.", + "Chat" : "Chat", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "No results found" : "No se encontraron resultados", + "Load more results" : "Cargar más resultados", + "Projects" : "Proyectos", + "No shared items" : "No hay elementos compartidos", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Enlace a una conversación", + "Search conversations or users" : "Buscar conversaciones o usuarios", + "Select conversation" : "Seleccionar conversación", + "Display name: {name}" : "Nombre de visualización: {name}", + "Edit display name" : "Editar nombre para mostrar", + "Save name" : "Guardar nombre", + "Error while saving sounds setting" : "Error al guardar la configuración de sonidos", + "Play sounds when participants join or leave a call" : "Reproducir sonidos cuando los participantes se unan o salgan de una llamada", + "Notification settings" : "Configuración de notificaciones", + "Default language" : "Idioma predeterminado", + "Select location for attachments" : "Seleccionar ubicación para archivos adjuntos", + "Error while setting attachment folder" : "Error al configurar la carpeta de archivos adjuntos", + "Error while setting read status privacy" : "Error al configurar la privacidad del estado de lectura", + "Error while setting typing status privacy" : "Error al configurar la privacidad del estado de escritura", + "Privacy" : "Privacidad", + "Attachments folder" : "Carpeta de archivos adjuntos", + "Toggle full screen" : "Alternar pantalla completa", + "Search" : "Buscar", + "Focus the chat input" : "Enfocar el área de chat", + "Unfocus the chat input to use shortcuts" : "Desenfocar el área de chat para usar atajos", + "Shortcuts while in a call" : "Atajos mientras estás en una llamada", + "Camera on and off" : "Encender y apagar la cámara", + "Microphone on and off" : "Encender y apagar el micrófono", + "Raise or lower hand" : "Levantar o bajar la mano", + "Push to talk or push to mute" : "Pulsar para hablar o pulsar para silenciar", + "Start call silently" : "Iniciar llamada en silencio", + "Start call" : "Iniciar llamada", + "You will be able to join the call only after a moderator starts it." : "Solo podrás unirte a la llamada después de que un moderador la inicie.", + "End call for everyone" : "Finalizar llamada para todos", + "Starting the recording" : "Iniciando la grabación", + "Recording" : "Grabación", + "Cancel recording start" : "Cancelar inicio de grabación", + "Stop recording" : "Detener grabación", + "Send a reaction" : "Enviar una reacción", + "React with {reaction}" : "Reaccionar con {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participante en llamada","%n participantes en llamada","%n participantes en llamada"], + "You are not allowed to enable screensharing" : "No tienes permiso para activar el intercambio de pantallas", + "No screensharing" : "Sin intercambio de pantallas", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Bad sent video and screen quality." : "Mala calidad de video y pantalla enviados.", + "Bad sent screen quality." : "Mala calidad de pantalla enviada.", + "Bad sent video quality." : "Mala calidad de video enviada.", + "Bad sent audio, video and screen quality." : "Mala calidad de audio, video y pantalla enviados.", + "Bad sent audio and screen quality." : "Mala calidad de audio y pantalla enviados.", + "Bad sent audio and video quality." : "Mala calidad de audio y video enviados.", + "Bad sent audio quality." : "Mala calidad de audio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video mientras compartes pantalla.", + "Disable background blur" : "Deshabilitar desenfoque de fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla. Para mejorar la situación, intenta desactivar tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan ver tu pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan verte.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar tu video mientras compartes pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y ver tu pantalla. Para mejorar la situación, intenta desactivar tu compartición de pantalla.", + "Disable screenshare" : "Desactivar compartición de pantalla", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar el desenfoque de fondo o tu video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte y verte. Para mejorar la situación, intenta desactivar tu video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tu conexión a internet o tu computadora están ocupados, y es posible que otros participantes no puedan entenderte.", + "Screen sharing is not supported by your browser." : "El intercambio de pantalla no es compatible con tu navegador.", + "Screen sharing requires the page to be loaded through HTTPS." : "El intercambio de pantalla requiere que la página se cargue a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Mute others" : "Silenciar a otros", + "Start recording" : "Iniciar grabación", + "Set up breakout rooms" : "Configurar salas de grupos", + "Remove participant {name}" : "Eliminar participante {name}", + "Keep" : "Mantén", + "Select a region" : "Selecciona una región", + "Search …" : "Buscar...", + "Message without mention" : "Mensaje sin mencionar", + "Mention myself" : "Mencionarme a mí mismo", + "The conversation does not exist" : "La conversación no existe", + "Join a conversation or start a new one!" : "Únete a una conversación o inicia una nueva", + "Duplicate session" : "Sesión duplicada", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contraseña de usuario", + "Talk conversation" : "Conversación de Talk", + "Skip TLS verification" : "Omitir verificación TLS", + "Matrix server URL" : "URL del servidor de Matrix", + "User" : "Usuario", + "Matrix channel" : "Canal de Matrix", + "Mattermost server URL" : "URL del servidor de Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nombre del equipo", + "Channel name" : "Nombre del canal", + "Rocket.Chat server URL" : "URL del servidor de Rocket.Chat", + "User name or email address" : "Nombre de usuario o dirección de correo electrónico", + "Rocket.Chat channel" : "Canal de Rocket.Chat", + "Zulip server URL" : "URL del servidor de Zulip", + "Bot user name" : "Nombre de usuario del bot", + "Bot API key" : "Clave de API del bot", + "Zulip channel" : "Canal de Zulip", + "API token" : "Ficha del API", + "Slack channel" : "Canal de Slack", + "Server ID or name" : "ID o nombre del servidor", + "Channel" : "Canal", + "Login" : "Iniciar sesión", + "Chat ID" : "ID de chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL del servidor de IRC (por ejemplo, chat.freenode.net:6667)", + "Nickname" : "Apodo", + "Connection password" : "Contraseña de conexión", + "IRC channel" : "Canal de IRC", + "Channel password" : "Contraseña del canal", + "NickServ nickname" : "Apodo de NickServ", + "NickServ password" : "Contraseña de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID de inquilino", + "Client ID" : "ID del cliente", + "Team ID" : "ID de equipo", + "Thread ID" : "ID de hilo", + "XMPP/Jabber server URL" : "URL del servidor XMPP/Jabber", + "MUC server URL" : "URL del servidor MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Multimedia", + "Polls" : "Encuestas", + "Deck cards" : "Tarjetas de mazo", + "Voice messages" : "Mensajes de voz", + "Locations" : "Ubicaciones", + "Call recordings" : "Grabaciones de llamadas", + "Audio" : "Audio", + "Show all media" : "Mostrar todos los archivos adjuntos", + "Show all files" : "Mostrar todos los archivos", + "Show all polls" : "Mostrar todas las encuestas", + "Show all deck cards" : "Mostrar todas las tarjetas de mazo", + "Show all voice messages" : "Mostrar todos los mensajes de voz", + "Show all locations" : "Mostrar todas las ubicaciones", + "Show all call recordings" : "Mostrar todas las grabaciones de llamadas", + "Show all audio" : "Mostrar todo el audio", + "Show all other" : "Mostrar todo lo demás", + "Group" : "Grupo", + "You: {lastMessage}" : "Tú: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Estás intentando unirte a una conversación mientras tienes una sesión activa en otra ventana o dispositivo. Actualmente, esto no es compatible con Nextcloud Talk. ¿Qué quieres hacer?", + "Leave this page" : "Salir de esta página", + "Join here" : "Unirse aquí", + "An error occurred while posting deck card to conversation" : "Se produjo un error al publicar la tarjeta de mazo en la conversación", + "Post to a conversation" : "Publicar en una conversación", + "Post to conversation" : "Publicar en la conversación", + "The recording failed. Please contact your administrator." : "La grabación falló. Por favor, contacta a tu administrador.", + "An error occurred while posting location to conversation" : "Se produjo un error al publicar la ubicación en la conversación", + "Share to a conversation" : "Compartir en una conversación", + "Share to conversation" : "Compartir en la conversación", + "Error while clearing conversation history" : "Error al borrar el historial de conversación", + "Error occurred while allowing guests" : "Error al permitir invitados", + "Error occurred while disallowing guests" : "Error al denegar invitados", + "Error occurred when restricting the conversation to moderator" : "Error al restringir la conversación a los moderadores", + "Error occurred when opening the conversation to everyone" : "Error al abrir la conversación a todos", + "Conversation password has been saved" : "La contraseña de la conversación se ha guardado", + "Conversation password has been removed" : "La contraseña de la conversación se ha eliminado", + "Error occurred while saving conversation password" : "Error al guardar la contraseña de la conversación", + "Call recording is starting." : "La grabación de la llamada está comenzando.", + "Call recording stopped while starting." : "La grabación de la llamada se detuvo al iniciar.", + "Call recording stopped. You will be notified once the recording is available." : "La grabación de la llamada se detuvo. Se te notificará una vez que la grabación esté disponible.", + "Conversation picture set" : "Imagen de la conversación establecida", + "Conversation picture deleted" : "Imagen de la conversación eliminada", + "Could not delete the conversation picture" : "No se pudo eliminar la imagen de la conversación", + "Could not post message: {errorMessage}" : "No se pudo enviar el mensaje: {errorMessage}", + "An error occurred while fetching the participants" : "Se produjo un error al obtener los participantes", + "Could not send invitation to {actorId}" : "No se pudo enviar la invitación a {actorId}", + "Invitations sent" : "Invitaciones enviadas", + "Error occurred when sending invitations" : "Error al enviar las invitaciones", + "An error occurred while creating breakout rooms" : "Se produjo un error al crear salas de grupos", + "An error occurred while re-ordering the attendees" : "Se produjo un error al reordenar los asistentes", + "An error occurred while deleting breakout rooms" : "Se produjo un error al eliminar las salas de grupos", + "An error occurred while starting breakout rooms" : "Se produjo un error al iniciar las salas de grupos", + "An error occurred while stopping breakout rooms" : "Se produjo un error al detener las salas de grupos", + "An error occurred while sending a message to the breakout rooms" : "Se produjo un error al enviar un mensaje a las salas de grupos", + "An error occurred while requesting assistance" : "Se produjo un error al solicitar asistencia", + "An error occurred while resetting the request for assistance" : "Se produjo un error al restablecer la solicitud de asistencia", + "An error occurred while joining breakout room" : "Se produjo un error al unirse a la sala de grupos", + "{guest} (guest)" : "{guest} (invitado)", + "An error occurred while submitting your vote" : "Se produjo un error al enviar tu voto", + "An error occurred while ending the poll" : "Se produjo un error al finalizar la encuesta", + "Failed to add reaction" : "Error al agregar una reacción", + "Failed to remove reaction" : "Error al eliminar una reacción", + "Error while uploading file \"{fileName}\"" : "Error al cargar el archivo \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "No hay suficiente espacio libre para cargar el archivo \"{fileName}\"", + "You are not allowed to share files" : "No tienes permiso para compartir archivos", + "Error while sharing file" : "Error al compartir el archivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "El navegador que estás utilizando no es completamente compatible con Nextcloud Talk. Utiliza la última versión de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "Message link copied to clipboard" : "Enlace del mensaje copiado al portapapeles", + "Conversation link copied to clipboard" : "Enlace de la conversación copiado al portapapeles", + "The link could not be copied" : "No se pudo copiar el enlace", + "Sending signaling message has failed" : "La entrega del mensaje de señalización ha fallado", + "Lost connection to signaling server. Trying to reconnect." : "Se perdió la conexión con el servidor de señalización. Intentando reconectar.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "El servidor de señalización configurado necesita ser actualizado para ser compatible con esta versión de Talk. Por favor, contacta a tu administrador.", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Altavoz {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que estás hablando estando silenciado/a, por favor, activa tu micrófono para que los demás puedan escucharte", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No se pudo establecer una conexión con al menos un participante. Es posible que se necesite un servidor TURN para tu escenario. Por favor, pide a tu administrador que lo configure siguiendo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Esto está tardando más de lo esperado. ¿Se han concedido (o rechazado) ya los permisos de medios? Si es así, por favor, reinicia tu navegador, ya que el audio y el video pueden estar fallando", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "%s Talk on your mobile devices" : "%s Talk en tus dispositivos móviles", + "Join conversations at any time, anywhere, on any device." : "Únete a conversaciones en cualquier momento y lugar, desde cualquier dispositivo.", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "__language_name__", + "Tasks" : "Tareas", + "Reports" : "Informes", + "Open poll • You voted already" : "Encuesta abierta • Ya has votado", + "Open poll • Click to vote" : "Encuesta abierta • Haz clic para votar", + "Poll • Ended" : "Encuesta • Finalizada", + "Talk recording from {time} ({conversation})" : "Grabación de Talk desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados de la encuesta • %n voto","Resultados de la encuesta • %n votos","Resultados de la encuesta • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Encuesta abierta • %n voto","Encuesta abierta • %n votos","Encuesta abierta • %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Tu configuración de privacidad ha sido guardada", + "Failed to save sounds setting" : "Error al guardar la configuración de sonidos", + "Sounds setting saved" : "Configuración de sonidos guardada", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Te uniste a la conversación en otra ventana o dispositivo. Actualmente, Nextcloud Talk no admite esto, por lo que esta sesión se cerró." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_GT.js b/l10n/es_GT.js new file mode 100644 index 0000000..6d79279 --- /dev/null +++ b/l10n/es_GT.js @@ -0,0 +1,165 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "No messages" : "No hay mensajes", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Guatemala)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_GT.json b/l10n/es_GT.json new file mode 100644 index 0000000..f8725a5 --- /dev/null +++ b/l10n/es_GT.json @@ -0,0 +1,163 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "No messages" : "No hay mensajes", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Guatemala)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_HN.js b/l10n/es_HN.js new file mode 100644 index 0000000..1adffab --- /dev/null +++ b/l10n/es_HN.js @@ -0,0 +1,151 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Honduras)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_HN.json b/l10n/es_HN.json new file mode 100644 index 0000000..b3260ce --- /dev/null +++ b/l10n/es_HN.json @@ -0,0 +1,149 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Honduras)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_MX.js b/l10n/es_MX.js new file mode 100644 index 0000000..5416ec6 --- /dev/null +++ b/l10n/es_MX.js @@ -0,0 +1,522 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a unaconversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge y Safari ahora pueden ser usados para participar en llamdas de audio y video llamadas", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes notificar a todos los participantes comentando \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Puedes reenviar tu último mensaje con la tecla \"flecha arriba\"", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ahora puede recibir comandos, envia \"/help\" como mensaje en el chat para ver si tu administrador configuro algunos", + "- With projects you can create quick links between conversations, files and other items" : "- Con projects puedes crear ligas entre conversaciones, archivos y otros artículos.", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a invitados en el chat", + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Creaste la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renombró la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Renombraste la conversación de \"%1$s\" a \"%2$s\"", + "You started a call" : "Iniciaste una llamada", + "{actor} started a call" : "{actor} inició una llamada", + "{actor} joined the call" : "{actor} se unió a la llamada", + "You joined the call" : "Te uniste a la llamada", + "{actor} left the call" : "{actor} abandonó la llamada", + "You left the call" : "Abandonaste la llamada", + "{actor} unlocked the conversation" : "{actor} desbloqueó la conversación", + "You unlocked the conversation" : "Desbloqueaste la conversación", + "{actor} locked the conversation" : "{actor} bloqueó la conversación", + "You locked the conversation" : "Bloqueaste la conversación", + "The conversation is now open to everyone" : "La conversación está abierta para todos", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación para todos", + "You opened the conversation to everyone" : "Abriste la conversación para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación a moderadores", + "You restricted the conversation to moderators" : "Restringiste la conversación a moderadores", + "{actor} allowed guests" : "{actor} permitió a invitados", + "You allowed guests" : "Permitiste a invitados", + "{actor} disallowed guests" : "{actor} restringió a invitados", + "You disallowed guests" : "Restringiste a invitados", + "{actor} set a password" : "{actor} configuró una contraseña", + "You set a password" : "Configuraste una contraseña", + "{actor} removed the password" : "{actor} eliminó la contraseña", + "You removed the password" : "Eliminaste la contraseña", + "{actor} added {user}" : "{actor} agregó a {user}", + "You joined the conversation" : "Te uniste a la conversación", + "{actor} joined the conversation" : "{actor} se unió a la conversación", + "You added {user}" : "Agregaste a {user}", + "{actor} added you" : "{actor} te agregó", + "You left the conversation" : "Abandonaste la conversación", + "{actor} left the conversation" : "{actor} abandonó la conversación", + "{actor} removed {user}" : "{actor} eliminó a {user}", + "You removed {user}" : "Eliminaste a {user}", + "{actor} removed you" : "{actor} te eliminó", + "{actor} promoted {user} to moderator" : "{actor} promovió a {user} a moderador", + "You promoted {user} to moderator" : "Promoviste a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te promovió a moderador", + "{actor} demoted {user} from moderator" : "{actor} degradó a {user} de moderador", + "You demoted {user} from moderator" : "Degradaste a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} te degradó de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Compartiste un archivo que ya no está disponible", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is not shared, or shared but not with the user" : "Archivo no compartido, o compartido pero no con el usuario.", + "File is too big" : "El archivo es demasiado grande", + "Invalid file provided" : "Se proporcionó un archivo invalido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Talk mentions" : "Menciones en Talk", + "No unread mentions" : "No hay menciones sin leer", + "Conversation invitation" : "invitación a una conversación", + "Description" : "Descripción", + "Meeting" : "Reunión", + "Password request: %s" : "Solicitud de Password: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Rechazar", + "New message" : "Mensaje nuevo", + "Reminder" : "Recordatorio", + "{user} sent you a private message" : "{user} te envió un mensaje privado", + "{user} mentioned you in a private conversation" : "{user} te mencionó en una conversación privada", + "{user} invited you to a group conversation: {call}" : "{user} te invitó a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afghanistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islas Åland", + "Azerbaijan" : "Azerbaiyán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Bermudas", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio y Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Isla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islas Cocos (Keeling)", + "Central African Republic" : "República Centroafricana", + "Congo" : "Congo", + "Switzerland" : "Suiza", + "Cook Islands" : "Islas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curazao", + "Christmas Island" : "Islas Navidad", + "Cyprus" : "Chipre", + "Germany" : "Alemania", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Faroe Islands" : "Islas Faroe", + "France" : "Francia", + "Gabon" : "Gabón", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islas Georgia del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isla Heard e Islas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Isla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico del Océano Índico", + "Iraq" : "Iraq", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jamaica" : "Jamaica", + "Jordan" : "Jordania", + "Japan" : "Japón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "San Cristóbal y Nieves", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islas Caimán", + "Kazakhstan" : "Kazajistán", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islas Marshall", + "Mali" : "Malí", + "Myanmar" : "Birmania", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Islas Marianas del Norte", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níger", + "Norfolk Island" : "Isla Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Bajos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nueva Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Catar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Islas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Elena, Ascensión y Tristán de Acuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard y Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santo Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Islas Turcas y Caicos", + "Chad" : "Chad", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tayikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Túnez", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidad y Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucrania", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islas menores alejadas de los Estados Unidos", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Santa Sede", + "Saint Vincent and the Grenadines" : "San Vicente y las Granadinas", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saving …" : "Guardando ...", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "@-mentions only" : "Solo menciones con @", + "Off" : "Desactivado", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Expirado", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "Error code" : "Código de error", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Federated user" : "Usuario federado", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Loading …" : "Cargando …", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Sin resultados", + "Done" : "Terminado", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Recargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Drop your files to upload" : "Arrastre sus archivos para cargar", + "Favorite" : "Hacer favorito", + "Date:" : "Fecha:", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Activar", + "Choose" : "Seleccionar", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días","%n días"], + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Invalid language" : "Idioma inválido", + "Edit" : "Editar", + "Delete" : "Eliminar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Unread mentions" : "Menciones sin leer", + "Enter your name" : "Ingrese su nombre", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a favoritos", + "Home" : "Inicio", + "Unread" : "No leído", + "Alphabetically" : "Alfabéticamente", + "Clear filter" : "Limpiar filtro", + "Users" : " Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "No search results" : "No hay resultados de búsqueda", + "Select a device" : "Seleccionar un dispositivo", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Invalid path selected" : "Ruta seleccionada no válida.", + "Blur" : "Difuminar", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Set reminder" : "Establecer recordatorio", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Detect language" : "Detectar idioma", + "Translate from" : "Traducir desde", + "Send now" : "Enviar ahora", + "Contact" : "Contacto", + "You voted" : "Votaste", + "No messages" : "Sin mensajes", + "Send later" : "Enviar más tarde", + "Share from Files" : "Compartir desde Archivos", + "Upload from device" : "Cargar desde el dispositivo", + "Create new poll" : "Crear nueva encuesta", + "Smart picker" : "Selector inteligente", + "New file" : "Archivo nuevo", + "Blank" : "Vacío", + "Add more files" : "Añadir más archivos", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "Results" : "Resultados", + "moderator" : "moderador", + "guest" : "invitado", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Borrar", + "Add users or groups" : "Agregar usuarios o grupos", + "Searching …" : "Buscando …", + "Search for more users" : "Buscar más usuarios", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Load more results" : "Cargar más resultados", + "Projects" : "Proyectos", + "Edit display name" : "Editar el nombre para mostrar", + "Default language" : "Idioma predeterminado", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "Talk conversation" : "Conversación de Talk", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Multimedia", + "Polls" : "Encuestas", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Show all files" : "Mostrar todos los archivos", + "Group" : "Grupo", + "Team" : "Equipo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Error al compartir el archivo", + "Error while parsing a PROPFIND error" : "Error al analizar un error PROPFIND", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "%s Talk on your mobile devices" : "%s Habla en tus dispositivos móviles", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (México)", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Informes", + "Set reminder for later today" : "Configurar recordatorio para hoy, más tarde", + "Set reminder for tomorrow" : "Configurar recordatorio para mañana", + "Set reminder for this weekend" : "Configurar recordatorio para este fin de semana", + "Set reminder for next week" : "Configurar recordatorio para la próxima semana" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_MX.json b/l10n/es_MX.json new file mode 100644 index 0000000..19a7a34 --- /dev/null +++ b/l10n/es_MX.json @@ -0,0 +1,520 @@ +{ "translations": { + "a conversation" : "una conversación", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "You were invited to a conversation or had a call" : "Fuiste invitado a unaconversación o tuviste una llamada", + "Other activities" : "Otras actividades", + "Talk" : "Hablar", + "Guest" : "Invitado", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge y Safari ahora pueden ser usados para participar en llamdas de audio y video llamadas", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ahora puedes notificar a todos los participantes comentando \"@all\" en el chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Puedes reenviar tu último mensaje con la tecla \"flecha arriba\"", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ahora puede recibir comandos, envia \"/help\" como mensaje en el chat para ver si tu administrador configuro algunos", + "- With projects you can create quick links between conversations, files and other items" : "- Con projects puedes crear ligas entre conversaciones, archivos y otros artículos.", + "- You can now mention guests in the chat" : "- Ahora puedes mencionar a invitados en el chat", + "Talk updates ✅" : "Actualizaciones de Talk ✅", + "{actor} created the conversation" : "{actor} creó la conversación", + "You created the conversation" : "Creaste la conversación", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renombró la conversación de \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Renombraste la conversación de \"%1$s\" a \"%2$s\"", + "You started a call" : "Iniciaste una llamada", + "{actor} started a call" : "{actor} inició una llamada", + "{actor} joined the call" : "{actor} se unió a la llamada", + "You joined the call" : "Te uniste a la llamada", + "{actor} left the call" : "{actor} abandonó la llamada", + "You left the call" : "Abandonaste la llamada", + "{actor} unlocked the conversation" : "{actor} desbloqueó la conversación", + "You unlocked the conversation" : "Desbloqueaste la conversación", + "{actor} locked the conversation" : "{actor} bloqueó la conversación", + "You locked the conversation" : "Bloqueaste la conversación", + "The conversation is now open to everyone" : "La conversación está abierta para todos", + "{actor} opened the conversation to everyone" : "{actor} abrió la conversación para todos", + "You opened the conversation to everyone" : "Abriste la conversación para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringió la conversación a moderadores", + "You restricted the conversation to moderators" : "Restringiste la conversación a moderadores", + "{actor} allowed guests" : "{actor} permitió a invitados", + "You allowed guests" : "Permitiste a invitados", + "{actor} disallowed guests" : "{actor} restringió a invitados", + "You disallowed guests" : "Restringiste a invitados", + "{actor} set a password" : "{actor} configuró una contraseña", + "You set a password" : "Configuraste una contraseña", + "{actor} removed the password" : "{actor} eliminó la contraseña", + "You removed the password" : "Eliminaste la contraseña", + "{actor} added {user}" : "{actor} agregó a {user}", + "You joined the conversation" : "Te uniste a la conversación", + "{actor} joined the conversation" : "{actor} se unió a la conversación", + "You added {user}" : "Agregaste a {user}", + "{actor} added you" : "{actor} te agregó", + "You left the conversation" : "Abandonaste la conversación", + "{actor} left the conversation" : "{actor} abandonó la conversación", + "{actor} removed {user}" : "{actor} eliminó a {user}", + "You removed {user}" : "Eliminaste a {user}", + "{actor} removed you" : "{actor} te eliminó", + "{actor} promoted {user} to moderator" : "{actor} promovió a {user} a moderador", + "You promoted {user} to moderator" : "Promoviste a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} te promovió a moderador", + "{actor} demoted {user} from moderator" : "{actor} degradó a {user} de moderador", + "You demoted {user} from moderator" : "Degradaste a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} te degradó de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartió un archivo que ya no está disponible", + "You shared a file which is no longer available" : "Compartiste un archivo que ya no está disponible", + "Message deleted by author" : "Mensaje eliminado por el autor", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (invitado)", + "Talk conversations" : "Conversaciones de Talk", + "Talk to %s" : "Hablar con %s", + "Storage quota exceeded" : "Se excedió la cuota de almacenamiento", + "File not found" : "Archivo no encontrado", + "File is not shared, or shared but not with the user" : "Archivo no compartido, o compartido pero no con el usuario.", + "File is too big" : "El archivo es demasiado grande", + "Invalid file provided" : "Se proporcionó un archivo invalido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Talk mentions" : "Menciones en Talk", + "No unread mentions" : "No hay menciones sin leer", + "Conversation invitation" : "invitación a una conversación", + "Description" : "Descripción", + "Meeting" : "Reunión", + "Password request: %s" : "Solicitud de Password: %s", + "Private conversation" : "Conversación privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Rechazar", + "New message" : "Mensaje nuevo", + "Reminder" : "Recordatorio", + "{user} sent you a private message" : "{user} te envió un mensaje privado", + "{user} mentioned you in a private conversation" : "{user} te mencionó en una conversación privada", + "{user} invited you to a group conversation: {call}" : "{user} te invitó a una conversación de grupo: {call}", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afghanistán", + "Antigua and Barbuda" : "Antigua y Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Islas Åland", + "Azerbaijan" : "Azerbaiyán", + "Bosnia and Herzegovina" : "Bosnia y Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baréin", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomé", + "Bermuda" : "Bermudas", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio y Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Isla Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Bielorrusia", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Islas Cocos (Keeling)", + "Central African Republic" : "República Centroafricana", + "Congo" : "Congo", + "Switzerland" : "Suiza", + "Cook Islands" : "Islas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curazao", + "Christmas Island" : "Islas Navidad", + "Cyprus" : "Chipre", + "Germany" : "Alemania", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Faroe Islands" : "Islas Faroe", + "France" : "Francia", + "Gabon" : "Gabón", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Francesa", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Islas Georgia del Sur y Sandwich del Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isla Heard e Islas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Isla de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico del Océano Índico", + "Iraq" : "Iraq", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jamaica" : "Jamaica", + "Jordan" : "Jordania", + "Japan" : "Japón", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirguistán", + "Cambodia" : "Camboya", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "San Cristóbal y Nieves", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Islas Caimán", + "Kazakhstan" : "Kazajistán", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marruecos", + "Monaco" : "Mónaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Islas Marshall", + "Mali" : "Malí", + "Myanmar" : "Birmania", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Islas Marianas del Norte", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nueva Caledonia", + "Niger" : "Níger", + "Norfolk Island" : "Isla Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Bajos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nueva Zelanda", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nueva Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro y Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Catar", + "Réunion" : "Reunión", + "Romania" : "Rumanía", + "Serbia" : "Serbia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Islas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Elena, Ascensión y Tristán de Acuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard y Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudán del Sur", + "Sao Tome and Principe" : "Santo Tomé y Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Islas Turcas y Caicos", + "Chad" : "Chad", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tayikistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Oriental", + "Turkmenistan" : "Turkmenistán", + "Tunisia" : "Túnez", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidad y Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucrania", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Islas menores alejadas de los Estados Unidos", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistán", + "Holy See" : "Santa Sede", + "Saint Vincent and the Grenadines" : "San Vicente y las Granadinas", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudáfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabue", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saving …" : "Guardando ...", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "State" : "Estado", + "Name" : "Nombre", + "Beta" : "Beta", + "Permissions" : "Permisos", + "@-mentions only" : "Solo menciones con @", + "Off" : "Desactivado", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Expirado", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "Error code" : "Código de error", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "Failed" : "Falló", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Federated user" : "Usuario federado", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Loading …" : "Cargando …", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "Sin resultados", + "Done" : "Terminado", + "Exit full screen (F)" : "Salir de pantalla completa (F)", + "Grid view" : "Vista de cuadrícula", + "Reload" : "Recargar", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Drop your files to upload" : "Arrastre sus archivos para cargar", + "Favorite" : "Hacer favorito", + "Date:" : "Fecha:", + "Note:" : "Nota:", + "Hide details" : "Ocultar detalles", + "Show details" : "Mostrar detalles", + "Disable" : "Deshabilitar", + "Enable" : "Activar", + "Choose" : "Seleccionar", + "The file must be a PNG or JPG" : "El archivo debe ser PNG o JPG", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días","%n días"], + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Invalid language" : "Idioma inválido", + "Edit" : "Editar", + "Delete" : "Eliminar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Unread mentions" : "Menciones sin leer", + "Enter your name" : "Ingrese su nombre", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a favoritos", + "Home" : "Inicio", + "Unread" : "No leído", + "Alphabetically" : "Alfabéticamente", + "Clear filter" : "Limpiar filtro", + "Users" : " Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "No search results" : "No hay resultados de búsqueda", + "Select a device" : "Seleccionar un dispositivo", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Invalid path selected" : "Ruta seleccionada no válida.", + "Blur" : "Difuminar", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Set reminder" : "Establecer recordatorio", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Detect language" : "Detectar idioma", + "Translate from" : "Traducir desde", + "Send now" : "Enviar ahora", + "Contact" : "Contacto", + "You voted" : "Votaste", + "No messages" : "Sin mensajes", + "Send later" : "Enviar más tarde", + "Share from Files" : "Compartir desde Archivos", + "Upload from device" : "Cargar desde el dispositivo", + "Create new poll" : "Crear nueva encuesta", + "Smart picker" : "Selector inteligente", + "New file" : "Archivo nuevo", + "Blank" : "Vacío", + "Add more files" : "Añadir más archivos", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "Results" : "Resultados", + "moderator" : "moderador", + "guest" : "invitado", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Borrar", + "Add users or groups" : "Agregar usuarios o grupos", + "Searching …" : "Buscando …", + "Search for more users" : "Buscar más usuarios", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Load more results" : "Cargar más resultados", + "Projects" : "Proyectos", + "Edit display name" : "Editar el nombre para mostrar", + "Default language" : "Idioma predeterminado", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Keep" : "Mantener", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "Talk conversation" : "Conversación de Talk", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Media" : "Multimedia", + "Polls" : "Encuestas", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Show all files" : "Mostrar todos los archivos", + "Group" : "Grupo", + "Team" : "Equipo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Error al compartir el archivo", + "Error while parsing a PROPFIND error" : "Error al analizar un error PROPFIND", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Do not disturb" : "No molestar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "%s Talk on your mobile devices" : "%s Habla en tus dispositivos móviles", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (México)", + "Tasks" : "Tareas", + "Notes" : "Notas", + "Reports" : "Informes", + "Set reminder for later today" : "Configurar recordatorio para hoy, más tarde", + "Set reminder for tomorrow" : "Configurar recordatorio para mañana", + "Set reminder for this weekend" : "Configurar recordatorio para este fin de semana", + "Set reminder for next week" : "Configurar recordatorio para la próxima semana" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_NI.js b/l10n/es_NI.js new file mode 100644 index 0000000..52f07e5 --- /dev/null +++ b/l10n/es_NI.js @@ -0,0 +1,150 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Nicaragua)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_NI.json b/l10n/es_NI.json new file mode 100644 index 0000000..5d7364f --- /dev/null +++ b/l10n/es_NI.json @@ -0,0 +1,148 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Nicaragua)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_PA.js b/l10n/es_PA.js new file mode 100644 index 0000000..586289e --- /dev/null +++ b/l10n/es_PA.js @@ -0,0 +1,152 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Panama)", + "Tasks" : "Tareas", + "Notes" : "Notas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PA.json b/l10n/es_PA.json new file mode 100644 index 0000000..fbb8d78 --- /dev/null +++ b/l10n/es_PA.json @@ -0,0 +1,150 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Panama)", + "Tasks" : "Tareas", + "Notes" : "Notas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_PE.js b/l10n/es_PE.js new file mode 100644 index 0000000..1b8c980 --- /dev/null +++ b/l10n/es_PE.js @@ -0,0 +1,156 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Now" : "Ahora", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Send message" : "Enviar mensaje", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Peru)", + "Tasks" : "Tareas", + "Notes" : "Notas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PE.json b/l10n/es_PE.json new file mode 100644 index 0000000..5433a1c --- /dev/null +++ b/l10n/es_PE.json @@ -0,0 +1,154 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Dismiss notification" : "Descartar notificación", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Now" : "Ahora", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Send message" : "Enviar mensaje", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Peru)", + "Tasks" : "Tareas", + "Notes" : "Notas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_PR.js b/l10n/es_PR.js new file mode 100644 index 0000000..1bc3955 --- /dev/null +++ b/l10n/es_PR.js @@ -0,0 +1,151 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Puerto Rico)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PR.json b/l10n/es_PR.json new file mode 100644 index 0000000..60bdba4 --- /dev/null +++ b/l10n/es_PR.json @@ -0,0 +1,149 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Ususario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Puerto Rico)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_PY.js b/l10n/es_PY.js new file mode 100644 index 0000000..06412ec --- /dev/null +++ b/l10n/es_PY.js @@ -0,0 +1,151 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Paraguay)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_PY.json b/l10n/es_PY.json new file mode 100644 index 0000000..d1237ef --- /dev/null +++ b/l10n/es_PY.json @@ -0,0 +1,149 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Locations" : "Ubicaciones", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Paraguay)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_SV.js b/l10n/es_SV.js new file mode 100644 index 0000000..4c8fb56 --- /dev/null +++ b/l10n/es_SV.js @@ -0,0 +1,163 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (El Salvador)", + "Tasks" : "Tareas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_SV.json b/l10n/es_SV.json new file mode 100644 index 0000000..8b60a43 --- /dev/null +++ b/l10n/es_SV.json @@ -0,0 +1,161 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "error" : "error", + "Default" : "Predeterminado", + "Conversations" : "Conversaciones", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "This conversation has ended" : "Esta conversación ha terminado", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "¡Puedes invitar a otros usando la pestaña de participante de la barra lateral o compartiendo esta liga para invitar a otras personas!", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Leave conversation" : "Dejar la conversación", + "Delete conversation" : "Borrar conversación", + "Password protection" : "Protección con contraseña", + "Set a password" : "Establecer una contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "No audio" : "Sin audio", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "Join a conversation or start a new one" : "Únete a la conversación o incia una nueva", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Please move your setup to HTTPS" : "Por favor cambia tu configuración a HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación Android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (El Salvador)", + "Tasks" : "Tareas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/es_UY.js b/l10n/es_UY.js new file mode 100644 index 0000000..f4324f3 --- /dev/null +++ b/l10n/es_UY.js @@ -0,0 +1,153 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Uruguay)", + "Tasks" : "Tareas", + "Notes" : "Notas" +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/es_UY.json b/l10n/es_UY.json new file mode 100644 index 0000000..8f6ef67 --- /dev/null +++ b/l10n/es_UY.json @@ -0,0 +1,151 @@ +{ "translations": { + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Tomaste una llamda con {user1}", + "_%n guest_::_%n guests_" : ["%n inivitado","%n inivitados","%n inivitados"], + "You attended a call with {user1} and {user2}" : "Tuviste una llamada con {user1} y {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tuviste una llamada con {user1}, {user2} y {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tuviste una llamada con {user1}, {user2}, {user3} y {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tuviste una llamada con {user1}, {user2}, {user3}, {user4} y {user5}", + "_%n other_::_%n others_" : ["%n otro","otros %n","otros %n"], + "{actor} invited you to {call}" : "{actor} te ha invitado a {call}", + "Talk" : "Hablar", + "Guest" : "Invitado", + "Administration" : "Administración", + "System" : "Sistema", + "Talk to %s" : "Hablar con %s", + "File not found" : "Archivo no encontrado", + "File is too big" : "El archivo es demasiado grande.", + "Invalid file provided" : "Archivo proporcionado inválido", + "Invalid image" : "Imagen inválida", + "Unknown filetype" : "Tipo de archivo desconocido", + "Description" : "Descripción", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "New message" : "Mensaje nuevo", + "Join call" : "Unirse a la llamada", + "A group call has started in {call}" : "Una llamada en grupo ha iniciado en {call}", + "Open settings" : "Abrir configuraciones", + "Default" : "Predeterminado", + "Avatar image is not square" : "La imagen del avatar no es un cuadrado", + "Other" : "Otro", + "Federation" : "Federación", + "Invalid date, date format must be YYYY-MM-DD" : "La fecha es inválida, por favor sigue el formato AAAA-MM-DD", + "Leave call" : "Dejar la llamada", + "The password is wrong. Try again." : "La contraseña está equivoada. Por favor vuelve a intentarlo. ", + "Password" : "Contraseña", + "Submit" : "Enviar", + "Everyone" : "Todos", + "Save changes" : "Guardar cambios", + "Saved!" : "¡Guardado!", + "Limit to groups" : "Limitar a grupos", + "Enabled" : "Habilitado", + "Disabled" : "Deshabilitado", + "Name" : "Nombre", + "Permissions" : "Permisos", + "General settings" : "Configuraciones generales", + "Enable encryption" : "Habilitar encripción", + "Pending" : "Pendiente", + "Error" : "Error", + "Blocked" : "Bloqueado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estatus", + "Created at" : "Creado en", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Secreto compartido", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un servidor STUN se está usando para determinar la IP pública de los participantes que estén detrás de un ruteador. ", + "TURN server protocols" : "Protocolos del servidor TURN", + "OK" : "OK", + "Checking …" : "Verificando ...", + "Confirm" : "Confirmar", + "Reset" : "Restablecer", + "Cancel" : "Cancelar", + "Back" : "Atrás", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "Save" : "Guardar", + "No results" : "No hay resultados", + "Grid view" : "Vista de cuadrícula", + "Waiting for others to join the call …" : "Esperando a que los demás se unan a la llamada ...", + "You can invite others in the participant tab of the sidebar" : "Puedes invitar a otras personas en la pestaña de participante del menú lateral", + "Share this link to invite others!" : "¡Comparte esta liga para invitar a otras personas!", + "Copy link" : "Copiar liga", + "Mute audio" : "Silenciar audio", + "None" : "Ninguno", + "Disable video" : "Deshabilitar video", + "Enable video" : "Habilitar el video", + "You" : "Tú", + "Show screen" : "Mostrar pantalla", + "Collapse" : "Colapsar", + "Favorite" : "Hacer favorito", + "Hide details" : "Ocultar detalles", + "Disable" : "Deshabilitar", + "Choose" : "Seleccionar", + "Restricted" : "Restringido", + "Personal" : "Personal", + "Password protection" : "Protección con contraseña", + "Edit" : "Editar", + "Delete" : "Borrar", + "Log content" : "Contenido de bitácoras", + "Notifications" : "Notificaciones", + "Log in" : "Ingresar", + "Remove from favorites" : "Eliminar de favoritos", + "Add to favorites" : "Agregar a tus favoritos", + "Home" : "Inicio", + "Alphabetically" : "Alfabéticamente", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Devices" : "Dispositivos", + "Upload" : "Cargar", + "Files" : "Archivos", + "24 hours" : "24 horas", + "Reply" : "Responder", + "More actions" : "Más acciones", + "Translate" : "Traducir", + "Dismiss" : "Descartar", + "Contact" : "Contacto", + "You voted" : "Votaste", + "Create new poll" : "Crear nueva encuesta", + "Send" : "Enviar", + "Create poll" : "Crear encuesta", + "Settings" : "Configuraciones ", + "moderator" : "moderador", + "Remove participant" : "Eliminar participante", + "Demote from moderator" : "Degradar de moderador", + "Promote to moderator" : "Promover a moderador", + "Add users or groups" : "Agregar usuarios o grupos", + "Participants" : "Participantes", + "Chat" : "Chat", + "Details" : "Detalles", + "Privacy" : "Privacidad", + "Search" : "Buscar", + "Screensharing options" : "Opciones de compartir pantalla", + "Enable screensharing" : "Habilitar compartir pantalla", + "Screensharing requires the page to be loaded through HTTPS." : "Compartir pantalla requiere que la página se cargue a través de HTTPS.", + "An error occurred while starting screensharing." : "Se presentó un error al comenzar a compartir la pantalla. ", + "Show your screen" : "Mostrar tu pantalla", + "Stop screensharing" : "Dejar de compartir la pantalla", + "User" : "Usuario", + "API token" : "Ficha del API", + "Login" : "Iniciar sesión", + "Nickname" : "Apodo", + "Client ID" : "ID del cliente", + "Polls" : "Encuestas", + "Audio" : "Audio", + "Group" : "Grupo", + "Please reload the page." : "Por favor vuelve a cargar la página.", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "El acceso al micrófono & cámara sólo es posible mediante HTTPS", + "Access to microphone & camera was denied" : "El acceso al micrófono & cámara fue denegado", + "WebRTC is not supported in your browser" : "WebRTC no está soportado en tu navegador", + "Please use a different browser like Firefox or Chrome" : "Por favor usa un navegador diferente como Firefox o Chrome", + "Error while accessing microphone & camera" : "Se pressentó un error al acceder al micrófono & cámara", + "Android app" : "Aplicación android", + "iOS app" : "Aplicación iOS", + "__language_name__" : "Español (Uruguay)", + "Tasks" : "Tareas", + "Notes" : "Notas" +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/et_EE.js b/l10n/et_EE.js new file mode 100644 index 0000000..c249deb --- /dev/null +++ b/l10n/et_EE.js @@ -0,0 +1,2235 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "vestlus", + "(Duration %s)" : "(kestus %s)", + "You attended a call with {user1}" : "Sa osalesid kõnes kasutajaga {user1}", + "_%n guest_::_%n guests_" : ["%n külaline","%n külalist"], + "You attended a call with {user1} and {user2}" : "Sa osalesid kõnes kasutajatega {user1} ja {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Sa osalesid kõnes kasutajatega {user1}, {user2} ja {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sa osalesid kõnes kasutajatega {user1}, {user2}, {user3} ja {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sa osalesid kõnes kasutajatega {user1}, {user2}, {user3}, {user4} ja {user5}", + "_%n other_::_%n others_" : ["%n muu","%n muud"], + "{actor} invited you to {call}" : "{actor} kutsus sind osalema „{call}“ kõnes ", + "You were invited to a conversation or had a call" : "Sa said kutse osalema vestluses või pidasid ühe kõne", + "Other activities" : "Muud tegevused", + "Talk" : "Talk", + "Guest" : "Külaline", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Tere tulemast kasutama Nextcloudi kõnerakendust!\nSelles vestluses saad teavet Nextcloudi kõnerakenduse uute funktsionaalsuste kohta.", + "## New in Talk %s" : "## Mida on uut Nextcloudi kõnerakenduses %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Hääl- ja videovestluses osalemiseks saad nüüd kasutada Microsoft Edge'i ja Safari veebibrausereid", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Kirjutades „@all“ saad nüüd mainida kõiki vestluses osalejaid", + "- With the \"arrow-up\" key you can repost your last message" : "- „Nool üles“ nupuga saad oma eelmist sõnumit uuesti saada", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Kõnerakenduses on nüüd olemas käsud - nägemaks, mida sinu peakasutaja on seadistanud, kirjuta „/Help“", + "- With projects you can create quick links between conversations, files and other items" : "- Projektirakendusega saad kiiresti luua linke vestluste, failide ja muude objektide vahel", + "- You can now mention guests in the chat" : "- Nüüd saad mainida vestlustes külalisi", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Vestlustel on nüüd ooteruum. See võimaldab moderaatoritel liituda ettevalmistamiseks vestluse või kõnega ning muud osalejad ja külalised asuvad seni ooteruumis,", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Kui tiimide rakendus on paigaldatud, siis saad omaloodud gruppe lisada vestlusesse", + "- Check out the new grid and call view" : "- Vaata meie uut ruudustikuvaadet ja kõnevaadet", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nüüd saadfaile üles laadida, ka lohistades, otse vestlusest", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Jagatud failid avatakse nüüd vajaliku rakendusega otse vestluse sees", + "- You can now search for chats and messages in the unified search in the top bar" : "- Saad nüüd otsida ülal asuvast ühiselt otsinguväljalt nii vestlusi kui sõnumeid", + "- Spice up your messages with emojis from the emoji picker" : "- Emojide valijast saad nüüd lisada emojisid ja oma vestlusi ilmestada", + "- You can now change your camera and microphone while being in a call" : "- Nüüd saad kõne kestel vahetada oma kaamerat ja mikrofoni", + "- See a read status and send failed messages again" : "- Näed lugemisteatisi ja saad ebaõnnestunult saadetud sõnumeid uuesti saata", + "- Raise your hand in a call with the R key" : "- Kõne ajal saad R-klahvi vajutusega anda märku käe tõstmisest", + "- Join the same conversation and call from multiple devices" : "- Ühe vestluse ja kõnega liitumise võimalus mitmest seadmest", + "- Send voice messages, share your location or contact details" : "- Häälsõnumite saatmine, oma asukoha või kontaktide jagamine", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Grupi lisamisel vestusele lisatakse selle liikmed automaatselt osalejateks", + "- A preview of your audio and video is shown before joining a call" : "- Enne kõnega liitumist näed ja kuuled nüüd oma video ja heli ja eelvaadet", + "- You can now blur your background in the newly designed call view" : "- Ümberkujundatud kõnevaates saad nüüd oma tausta hägustada", + "- Moderators can now assign general and individual permissions to participants" : "- Moderaatorid võivad nüüd kasutajatele määrata üldisi ja isiklikke õigusi", + "- You can now react to chat messages" : "- Vestluse sõnumitele saad nüüd reageerida", + "- In the sidebar you can now find an overview of the latest shared items" : "- Vestlusrakenduse külgribal leiad nüüd viimase jaosmeedia ülevaate", + "- Use a poll to collect the opinions of others or settle on a date" : "- Kasuta küsimustikku teiste osalejate arvamuse selgitamiseks või kuupäeva kokkuleppimiseks", + "- Configure an expiration time for chat messages" : "- Seadista vestluse sõnumite aegumist", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Algata suurtes vestlustes kõnesid nii, et kõik ei saa sellekohast teavitust. Kõne kestel saad saada üksikuid teavitusi saata vastavalt vaajadusele.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Kui sisu pole kiire või oluline, siis saada vestluse sõnumeid ilma teavituseta", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojid lõpetatakse automaatselt „:“ kirjutamisel", + "- Link various items using the new smart-picker by typing a \"/\"" : "- „/“ käivitab uue nutivalija, mis võimaldab erinevaid objekte linkida", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderaatorid saavad nüüd luua virtuaalseid töötube (kasutusel peab olema suure jõudlusega taustateenus)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Kõnesid on nüüd võimalik salvestada (kasutusel peab olema suure jõudlusega taustateenus)", + "- Conversations can now have an avatar or emoji as icon" : "- Vestluste ikooniks saab nüüd olla tunnuspilt või emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Videokõnede hägustatud taustadele lisaks on nüüd saadaval virtuaalsed taustad", + "- Reactions are now available during calls" : "- Kõnede ajal saad nüüd kasutada reaktsioone", + "- Typing indicators show which users are currently typing a message" : "- Kirjutamisteatised näitavad nüüd, kui teised osalejad midagi kirjutavad", + "- Groups can now be mentioned in chats" : "- Nüüd saad vestlustes mainida gruppe", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Kui kõnede üleskirjutuse rakendus on registreeritud, siis kõnesalvestustest tehakse üleskirjutused automaatselt", + "- Chat messages can be translated if a translation provider app is registered" : "- Kui kõnede tõlkerakendus on registreeritud, siis vestluse sõnumid tõlgitakse automaatselt", + "- **Markdown** can now be used in _chat_ messages" : "- _Vestluse_ sõnumites saad nüüd kasutada **Markdown-märkekeelt**", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Nüüd saad kasutada Webhooks-liidestust robotite ehitamiseks. Lisateavet ning juhendi leiad siiat: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Vestlusesse saad lisada meeldetuletuse hilisema teavituse jaoks", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Nüüd saad kasutada **Märkmed endale** vestlust märkmete koostamiseks ja teabe jagamiseks oma seadmete vahel", + "- Captions allow to send a message with a file at the same time" : "- Failile saad nüüd lisada alapealkirja ja neid korraga saata", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Ekraani jagamisel on nüüd näha esineja videovoog ja kõnes saad kasutada animeeritud reaktsioone", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Moderaatorid ja sisseloginud kasutajad savad nüüd sõnumeid muuta 6 tunni jooksul", + "- Unsent message drafts are now saved in your browser" : "- Brauser oskab nüüd salvestada saatmata sõnumite kavandeid", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Tekstivestlused toimivad nüüd liitpilves teiste vestlusserveritega", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Takistamaks neil uuesti liitumist võivad moderaatorid nüüd kasutajakontodele ja külalistele määrata suhtluskeelu", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Vestlustes on nüüd näha kalendrisündmustest ja äraoleku teadetest lingitud tulevased kõned", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Kõned toimivad nüüd liitpilves teiste vestlusserveritega (kasutusel peab olema suure jõudlusega taustateenus)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Nüüd on Nextcloudi kõnerakenduse töölauaklient olemas Windowsi, macOS-i ja Linuxi jaoks: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloudi Abiline oskab nüüd teha kokkuvõtet kõnesalvestistest ja vestluste lugemata sõnumitest", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Tõhusamad kohtumised, kus korduskülalised tuntakse ära e-posti aadressi alusel, osalejate loendid on imporditavad, küsitluste kavandid on loodavad ja osalejate loendid on allalaaditavad", + "- Archive conversations to stay focused" : "- Et fookus ei kaoks, saad vanad vestlused arhiveerida", + "- Schedule a meeting into your calendar from within a conversation" : "- Kohtumise kalendrisse lisamise võimalus otse vestlusest", + "- Search for messages of the current conversation directly in the right sidebar" : "- Käsil oleva vestluse sõnumite otsing otse paremalt külgribalt", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Esmane ülevaade paljudest vestlustest kompaktse loendina (eeldusel, et lülitad selle sisse kõnerakenduse seadistustest)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Kohtumiste vestlused nüüd sünkroniseerivad pealkirja ja kirjelduse kalendrist ja on vaikimisi otsingufiltrist peidetud kuni algusaeg hakkab lähenema", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Teavituste seadistustes saab nüüd vestlust märkida delikaatseks ja sellega peita vestluste sisu vestluste loendist ja teavitustest", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Tõuketeavituste saamise võimalus „Ära sega“ võrguolekus ning vestluste olulisteks märkimise võimalus", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Võimalus lisada osalejaid kahepoolsele kõnele ja sellega kõne muutmine grupikõneks", + "- Use threads to keep your chat and discussions organized" : "- Nüüd saad vestlusi koondada jutulõngadesse ning sellega hoida sisu ülevaatlikumas ja hallatavamas vormis", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Nüüd on saadaval kõne ajal tehtud ülestähendused (eeldab et, „live-transcription“ ExApp on paigaldatud ja suure jõudlusega taustateenus kasutusel)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderaatorid saavad nüüd tõsta sõnumeid esile ja need kuvatakse vestluse ülaosas", + "- Schedule a message to send it at a later time" : "- Sõnumite saatmise ajastamine hilisemaks ajaks", + "_All %n participant_::_All %n participants_" : ["%n osaleja","Kõik %n osalejat"], + "Talk updates ✅" : "Kõnerakenduse uuendused ✅", + "Reaction deleted by author" : "Autor kustutas oma reaktsiooni", + "{actor} created the conversation" : "{actor} lõi selles vestluse", + "You created the conversation" : "Sina lõid selle vestluse", + "System created the conversation" : "Süsteemi loodud vestlus", + "An administrator created the conversation" : "Peakasutaja lõi vestluse", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} muutis vestluse nime: „%1$s“ → „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sina muutsid vestluse nime: „%1$s“ → „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Peakasutaja muutis vestluse nime: „%1$s“ → „%2$s“", + "{actor} set the description" : "„{actor}“ sisestas kirjelduse", + "You set the description" : "Sina sisestasid vestluse kirjelduse", + "An administrator set the description" : "Peakasutaja sisestas kirjelduse", + "{actor} removed the description" : "{actor} eemaldas kirjelduse", + "You removed the description" : "Sina eemaldasid kirjelduse", + "An administrator removed the description" : "Peakasutaja eemaldas kirjelduse", + "You started a silent call" : "Sa helistasid vaikselt", + "Outgoing silent call" : "Väljuv vaikne kõne", + "{actor} started a silent call" : "{actor} helistas vaikselt", + "Incoming silent call" : "Sissetulev vaikne kõne", + "You started a call" : "Sina helistasid", + "Outgoing call" : "Väljuv kõne", + "{actor} started a call" : "{actor} helistas", + "Incoming call" : "Sissetulev kõne", + "{actor} joined the call" : "{actor} liitus kõnega", + "You joined the call" : "Sina liitusid kõnega", + "{actor} left the call" : "{actor} lahkus kõnest", + "You left the call" : "Sina lahkusid kõnest", + "{actor} unlocked the conversation" : "{actor} eemaldas selle vestluse lukustuse", + "You unlocked the conversation" : "Sina eemaldasid selle vestluse lukustuse", + "An administrator unlocked the conversation" : "Peakasutaja eemaldas vestluse lukustuse", + "{actor} locked the conversation" : "{actor} lukustas selle vestluse", + "You locked the conversation" : "Sina lukustasid selle vestluse", + "An administrator locked the conversation" : "Peakasutaja lukustas vestluse", + "{actor} limited the conversation to the current participants" : "{actor} lubas ligipääsu vestlusele vaid praegustele kasutajatele", + "You limited the conversation to the current participants" : "Sina lubasid ligipääsu vestlusele vaid praegustele kasutajatele", + "An administrator limited the conversation to the current participants" : "Peakasutaja lubas ligipääsu vestlusele vaid praegustele kasutajatele", + "{actor} opened the conversation to registered users" : "{actor} avas vestluse registreeritud kasutajatele", + "You opened the conversation to registered users" : "Sa avasid vestluse registreeritud kasutajatele", + "An administrator opened the conversation to registered users" : "Peakasutaja avas vestluse registreeritud kasutajatele", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} avas vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "You opened the conversation to registered users and users created with the Guests app" : "Sina avasid vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Peakasutaja avas vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "The conversation is now open to everyone" : "See vestlus on avatud nüüd kõikidele kasutajatele", + "{actor} opened the conversation to everyone" : "{actor} avas vestluse kõikidele kasutajatele", + "You opened the conversation to everyone" : "Sa avasid vestluse kõikidele kasutajatele", + "{actor} restricted the conversation to moderators" : "{actor} piiras vestluses osalemise vaid moderaatoritega", + "You restricted the conversation to moderators" : "Sina piirasid vestluses osalemise vaid moderaatoritega", + "{actor} started breakout rooms" : "{actor} käivitas virtuaalsed töötoad", + "You started breakout rooms" : "Sina käivitasid virtuaalsed töötoad", + "{actor} stopped breakout rooms" : "{actor} peatas virtuaalsed töötoad", + "You stopped breakout rooms" : "Sina peatasid virtuaalsed töötoad", + "{actor} allowed guests" : "{actor} lubas ligipääsu külalistele", + "You allowed guests" : "Sina lubasid ligipääsu külalistele", + "An administrator allowed guests" : "Peakasutaja lubas külaliskasutajatel liituda", + "{actor} disallowed guests" : "{actor} keelas ligipääsu külalistele", + "You disallowed guests" : "Sina keelasid ligipääsu külalistele", + "An administrator disallowed guests" : "Peakasutaja keeelas külaliskasutajatel liituda", + "{actor} set a password" : "{actor} lisas salasõna", + "You set a password" : "Sina lisasid salasõna", + "An administrator set a password" : "Peakasutaja lisas salasõna", + "{actor} removed the password" : "{actor} eemaldas salasõna", + "You removed the password" : "Sina eemaldasid salasõna", + "An administrator removed the password" : "Peakasutaja eemaldas salasõna", + "{actor} added {user}" : "{actor} lisas kasutaja „{user}“", + "You joined the conversation" : "Sina liitusid vestlusega", + "{actor} joined the conversation" : "{actor} liitus vestlusega", + "You added {user}" : "Sina lisasid kasutaja {user}", + "{actor} added you" : "{actor} lisas sinu", + "An administrator added you" : "Peakasutaja lisas sinu", + "An administrator added {user}" : "Peakasutaja lisas „{user}“ kasutaja", + "You left the conversation" : "Sina lahkusid vestlusest", + "{actor} left the conversation" : "{actor} lahkus sellest vestlusest", + "{actor} removed {user}" : "{actor} eemaldas kasutaja {user}", + "You removed {user}" : "Sina eemaldasid kasutaja {user}", + "{actor} removed you" : "{actor} eemaldas sinu", + "An administrator removed you" : "Peakasutaja eemaldas sinu", + "An administrator removed {user}" : "Peakasutaja eemaldas kasutaja {user}", + "{actor} invited {federated_user}" : "{actor} saatis kutse {federated_user} kasutajale liitpilves", + "You invited {federated_user}" : "Sina saatsid kutse {federated_user} kasutajale liitpilves", + "You accepted the invitation" : "Sa võtsid kutse vastu", + "{actor} invited you" : "{actor} saatis sulle kutse", + "An administrator invited you" : "Peakasutaja saatis sulle kutse", + "An administrator invited {federated_user}" : "Peakasutaja saatis kutse {federated_user} kasutajale liitpilves", + "{federated_user} accepted the invitation" : "Liitvõrgu kasutaja {federated_user} võttis kutse vastu", + "{actor} removed {federated_user}" : "{actor} eemaldas kasutaja {federated_user}", + "You removed {federated_user}" : "Sina eemaldasid kasutaja {federated_user}", + "You declined the invitation" : "Sa lükkasid kutse tagasi", + "An administrator removed {federated_user}" : "Peakasutaja eemaldas kasutaja {federated_user}", + "{federated_user} declined the invitation" : "Liitvõrgu kasutaja {federated_user} lükkas kutse tagasi", + "{actor} added group {group}" : "{actor} lisas „{group}“ grupi", + "You added group {group}" : "Sina lisasid „{group}“ grupi", + "An administrator added group {group}" : "Peakasutaja lisas „{group}“ grupi", + "{actor} removed group {group}" : "{actor} eemaldas „{group}“ grupi", + "You removed group {group}" : "Sina eemaldasid „{group}“ grupi", + "An administrator removed group {group}" : "Peakasutaja eemaldas „{group}“ grupi", + "{actor} added team {circle}" : "{actor} lisas „{circle}“ tiimi", + "You added team {circle}" : "Sina lisasid „{circle}“ tiimi", + "An administrator added team {circle}" : "Peakasutaja lisas „{circle}“ tiimi", + "{actor} removed team {circle}" : "{actor} eemaldas tiimi „{circle}“", + "You removed team {circle}" : "Sina eemaldasid „{circle}“ tiimi", + "An administrator removed team {circle}" : "Peakasutaja eemaldas „{circle}“ tiimi", + "{actor} added {phone}" : "{actor} lisas telefoni „{phone}“", + "You added {phone}" : "Sina lisasid telefoni „{phone}“", + "An administrator added {phone}" : "Peakasutaja lisas „{phone}“ kasutaja", + "{actor} removed {phone}" : "{actor} eemaldas {phone}", + "You removed {phone}" : "Sina eemaldasid {phone}", + "An administrator removed {phone}" : "Peakasutaja eemaldas {phone}", + "{actor} promoted {user} to moderator" : "{actor} määras kasutaja {user} moderaatoriks", + "You promoted {user} to moderator" : "Sina määrasid kasutaja {user} moderaatoriks", + "{actor} promoted you to moderator" : "{actor} määras sinu moderaatoriks", + "An administrator promoted you to moderator" : "Peakasutaja määras sinu moderaatoriks", + "An administrator promoted {user} to moderator" : "Peakasutaja määras kasutaja {user} moderaatoriks", + "{actor} demoted {user} from moderator" : "{actor} võttis kasutajalt „{user}“ moderaatori õigused ära", + "You demoted {user} from moderator" : "Sina võtsid kasutajalt „{user}“ moderaatori õigused ära", + "{actor} demoted you from moderator" : "{actor} võttis sinult moderaatori õigused ära", + "An administrator demoted you from moderator" : "Peakasutaja võttis sinult moderaatori õigused ära", + "An administrator demoted {user} from moderator" : "Peakasutaja võttis kasutajalt „{user}“ moderaatori õigused ära", + "{actor} shared a file which is no longer available" : "{actor} jagas faili, mida pole enam olemas", + "You shared a file which is no longer available" : "Sina jagasid faili, mida pole enam olemas", + "File shares are currently not supported in federated conversations" : "Vestluste puhul, kus osalevad kasutajad liitpilvest, pole failide jagamine hetkel lubatud", + "The shared location is malformed" : "Jagatud asukoht on vigaselt vormindatud", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} seadistas Matterbridge'i võrgusilla jagamaks seda vestlust muude suhtluslahendustega", + "You set up Matterbridge to synchronize this conversation with other chats" : "Sa seadistasid Matterbridge'i võrgusilla jagamaks seda vestlust muude suhtluslahendustega", + "{actor} created thread {title}" : "{actor} alustas {title} jutulõnga", + "You created thread {title}" : "Sinas alustasid {title} jutulõnga", + "{actor} renamed thread {title}" : "{actor} muutis {title} jutulõnga nime", + "You renamed thread {title}" : "Sina muutsid {title} jutulõnga nime", + "{actor} updated the Matterbridge configuration" : "{actor} uuendas Matterbridge'i võrgusilla seadistusi", + "You updated the Matterbridge configuration" : "Sa uuendasid Matterbridge'i võrgusilla seadistusi", + "{actor} removed the Matterbridge configuration" : "{actor} eemaldas Matterbridge'i võrgusilla seadistused", + "You removed the Matterbridge configuration" : "Sina eemaldasid Matterbridge'i võrgusilla seadistused", + "{actor} started Matterbridge" : "{actor} käivitas Matterbridge'i võrgusilla", + "You started Matterbridge" : "Sa käivitasid Matterbridge'i võrgusilla", + "{actor} stopped Matterbridge" : "{actor} peatas Matterbridge'i võrgusilla", + "You stopped Matterbridge" : "Sa peatasid Matterbridge'i võrgusilla", + "{actor} deleted a message" : "{actor} kustutas sõnumi", + "You deleted a message" : "Sina kustutasid sõnumi", + "{actor} edited a message" : "{actor} muutis sõnumit", + "You edited a message" : "Sina muutsid sõnumit", + "{actor} pinned a message" : "{actor} tõstis sõnumi esile", + "You pinned a message" : "Sina tõstsid sõnumi esile", + "{actor} unpinned a message" : "{actor} lõpetas sõnumi esiletõstmise", + "Message was automatically unpinned" : "Sõnumi esiletõstmine on automaatselt lõpetatud", + "You unpinned a message" : "Sina lõpetasid sõnumi esiletõstmise", + "{actor} deleted a reaction" : "{actor} kustutas reaktsiooni", + "You deleted a reaction" : "Sina kustutasid reaktsiooni", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Sina seadistasid sõnumi aeguma %n nädala möödudes","Sina seadistasid sõnumi aeguma %n nädala möödudes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Sina seadistasid sõnumi aeguma %n päeva möödudes","Sina seadistasid sõnumi aeguma %n päeva möödudes"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Sina seadistasid sõnumi aeguma %n tunni möödudes","Sina seadistasid sõnumi aeguma %n tunni möödudes"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Sina seadistasid sõnumi aeguma %n minuti möödudes","Sina seadistasid sõnumi aeguma %n minuti möödudes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} seadistas sõnumi aeguma %n nädala möödudes","{actor} seadistas sõnumi aeguma %n nädala möödudes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} seadistas sõnumi aeguma %n päeva möödudes","{actor} seadistas sõnumi aeguma %n päeva möödudes"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} seadistas sõnumi aeguma %n tunni möödudes","{actor} seadistas sõnumi aeguma %n tunni möödudes"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} seadistas sõnumi aeguma %n minuti möödudes","{actor} seadistas sõnumi aeguma %n minuti möödudes"], + "{actor} disabled message expiration" : "{actor} keelas sõnumi aegumise", + "You disabled message expiration" : "Sina keelasid sõnumi aegumise", + "{actor} cleared the history of the conversation" : "„{actor}“ kustutas vestluse ajaloo", + "You cleared the history of the conversation" : "Sa kustutasid vestluse ajaloo", + "{actor} set the conversation picture" : "{actor} lisas vestluse pildi", + "You set the conversation picture" : "Sina lisasid vestluse pildi", + "{actor} removed the conversation picture" : "{actor} eemaldas vestluse pildi", + "You removed the conversation picture" : "Sina eemaldasid vestluse pildi", + "{actor} ended the poll {poll}" : "{actor} lõpetas „{poll}“ küsitluse", + "You ended the poll {poll}" : "Sina lõpetasid „{poll}“ küsitluse", + "{actor} started the video recording" : "{actor} alustas videosalvestust", + "You started the video recording" : "Sina alustasid videosalvestust", + "{actor} stopped the video recording" : "{actor} lõpetas videosalvestuse", + "You stopped the video recording" : "Sina lõpetasid videosalvestuse", + "{actor} started the audio recording" : "{actor} alustas helisalvestust", + "You started the audio recording" : "Sina alustasid helisalvestust", + "{actor} stopped the audio recording" : "{actor} lõpetas helisalvestuse", + "You stopped the audio recording" : "Sina lõpetasid helisalvestuse", + "The recording failed" : "Salvestamine ei õnnestunud", + "Someone voted on the poll {poll}" : "Keegi kääletas „{poll}“ küsitluses", + "Message deleted by author" : "Sõnum autori poolt kustutatud", + "Message deleted by {actor}" : "{actor} kustutas sõnumi", + "Message deleted by you" : "Sina kustutasid sõnumi", + "Deleted user" : "Kustutatud kasutaja", + "Unknown number" : "Tundmatu number", + "Administration" : "Haldus", + "System" : "Süsteem", + "%s (guest)" : "%s (külaline)", + "Missed call" : "Märkamata kõne", + "Unanswered call" : "Vastamata kõne", + "Call ended (Duration {duration})" : "Kõne lõppes (kestus {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne lõppes (kestus {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} lõpetas kõne (kestus {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Kuna pikim lubatud kestus jõudis kätte, siis kõne %n külalisega lõppes (kestus {duration})","Kuna pikim lubatud kestus jõudis kätte, siis kõne %n külalisega lõppes (kestus {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Kõne %n külalisega lõppes (kestus {duration})","Kõne %n külalisega lõppes (kestus {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} lõpetas kõne %n külalisega (kestus {duration})","{actor} lõpetas kõne %n külalisega (kestus {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajaga {user1} lõppes (kestus {duration})", + "Call with {user1} ended (Duration {duration})" : "Kõne kasutajaga „{user1}“ lõppes (kestus {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} lõpetas kõne kasutajaga „{user1}“ (kestus {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“ ja „{user2}“ lõppes (kestus {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Kõne osalejatega {user1} ja {user2} lõppes (kestus {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“ ja „{user2}“ (kestus {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“ ja „{user3}“ lõppes (kestus {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2} ja {user3} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“ ja „{user3}“ (kestus {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“, „{user3}“ ja „{user4}“ lõppes (kestus {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2}, {user3} ja {user4} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“, „{user3}“ ja „{user4}“ (kestus {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“, „{user3}“, „{user4}“ ja „{user5}“ lõppes (kestus {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2}, {user3}, {user4} ja {user5} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“, „{user3}“, „{user4}“ ja „{user5}“ (kestus {duration})", + "Message of {user} in {conversation}" : "Sõnum kasutajalt „{user}“ „{conversation}“ vestluses", + "Message of {user}" : "Sõnum kasutajalt {user}", + "Message of a deleted user in {conversation}" : "Sõnum kustutatud kasutajalt „{conversation}“ vestluses", + "Talk conversations" : "Vestlused kõnerakenduses Talk", + "Talk to %s" : "Suhtle: %s", + "An error occurred. Please contact your administrator." : "Tekkis viga. Palun võta ühendust oma peakasutajaga.", + "App disabled" : "Rakendus on kasutuselt eemaldatud", + "Conversation subfolders are disabled" : "Vestluse alamkaustad pole kasutusel", + "Storage quota exceeded" : "Andmeruumi kvoot on ületatud", + "Could not prepare conversation folder" : "Vestluse kausta ettevalmistamine ei õnnestunud", + "File not found" : "Faili ei leidu", + "Path must point to a file" : "Asukoht peab viitama failile", + "File is not inside the conversation draft folder for this room" : "Fail pole selle jututoa vestluste kavandite kaustas", + "File is not shared, or shared but not with the user" : "Faili kas pole jagatud või kui on jagatud, siis mitte selle kasutajaga", + "No account available to delete." : "Pole kasutajakontot, mida kustutada.", + "Poll" : "Küsitlus", + "Password needs to be set" : "Salasõna peab olema lisatud", + "Uploading the file failed" : "Faili ei õnnestunud üles laadida", + "No image file provided" : "Pilt on lisamata", + "File is too big" : "Fail on liiga suur", + "Invalid file provided" : "Vigane fail", + "Invalid image" : "Vigane pilt", + "Unknown filetype" : "Tundmatu failitüüp", + "Talk mentions" : "Mainimised kõnerakenduses", + "More conversations" : "Veel vestlusi", + "Say hi to your friends and colleagues!" : "Ütle tere oma sõpradele ja kolleegidele!", + "No unread mentions" : "Pole lugemata mainimisi", + "Call in progress" : "Kõne on pooleli", + "You were mentioned" : "Sind on mainitud", + "Write to conversation" : "Kirjuta vestlusesse", + "Writes event information into a conversation of your choice" : "Saadab sündmuse teabe sinu valitud vestlusesse", + "Missing email field in header line" : "Päises on puudu e-posti aadressi väli", + "Following lines are invalid: %s" : "Järgnevad read on vigased: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s kutsus sind „%2$s“ vestlusesse.", + "You were invited to conversation \"%s\"." : "Sa said kutse „%s“ vestlusesse.", + "Conversation invitation" : "Kutse vestlusesse", + "Scheduled time" : "Plaanitud aeg", + "Description" : "Kirjeldus", + "You can also dial-in via phone with the following details" : "Sa võid kasutada ka telefoniga sissehelistamisvõimalust järgmiste andmetega", + "Dial-in information" : "Sissehelistamisteenuse teave", + "Meeting ID" : "Kohtumise tunnus", + "Your PIN" : "Sinu PIN-kood", + "Click the button below to join the lobby now." : "Ooteruumiga liitumiseks vajuta allolevat nuppu.", + "Click the link below to join the lobby now." : "Ooteruumiga liitumiseks vajuta allolevat linki.", + "Join lobby for \"%s\"" : "Sisene „%s“ ooteruumi", + "Click the button below to join the conversation now." : "Vestlusega liitumiseks vajuta allolevat nuppu.", + "Click the link below to join the conversation now." : "Vestlusega liitumiseks vajuta allolevat linki.", + "Join \"%s\"" : "Liitu: „%s“", + "Meeting" : "Kohtumine", + "Password request: %s" : "Salasõnapäring: %s", + "Private conversation" : "Privaatne vestlus", + "Deleted user (%s)" : "Kustutatud kasutaja (%s)", + "Failed to upload call recording" : "Ei õnnestu üles laadida kõnesalvestust", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Serveril ei õnnestunud üles laadida „{call}“ kõne salvestust. Palun küsi abi peakasutajalt.", + "Share to chat" : "Jaga vestlusesse", + "Dismiss notification" : "Sulge teavitus", + "Call recording now available" : "Kõnesalvestus on nüüd saadaval", + "The recording for the call in {call} was uploaded to {file}." : "„{call}“ kõne salvestus on üleslaaditud „{file}“ faili.", + "Transcript now available" : "Üleskirjutus on nüüd saadaval", + "The transcript for the call in {call} was uploaded to {file}." : "„{call}“ kõne üleskirjutus on salvestatud ja üleslaaditud „{file}“ faili.", + "Failed to transcript call recording" : "Kõnesalvestuse üleskirjutamine ei õnnestunud", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveril ei õnnestunud üles kirjutada „{call}“ kõne salvestust failist „{file}“. Palun küsi abi peakasutajalt.", + "Call summary now available" : "Kõne kokkuvõte on nüüd saadaval", + "The summary for the call in {call} was uploaded to {file}." : "Kokkuvõte „{call}“ kõnest on nüüd üles laaditus „{file}“ failina.", + "Failed to summarize call recording" : "Kõnest kokkuvõtte tegemine ei õnnestu", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveril ei õnnestunud teha kokkuvõtet „{call}“ kõne salvestusest failis „{file}“. Palun küsi abi peakasutajalt.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} saatis sulle kutse „{roomName}“ jututuppa liitpilve serveris „{remoteServer}“", + "Accept" : "Võta vastu", + "Decline" : "Keeldu", + "{user1} invited you to a federated conversation" : "{user1} saatis sulle kutse vestlusele liitpilves", + "Someone reacted" : "Keegi reageeris", + "New message" : "Uus sõnum", + "Reminder" : "Meeldetuletused", + "Someone mentioned you" : "Keegi mainis sind", + "Notification" : "Teavitus", + "Someone reacted in a private conversation" : "Keegi reageeris privaatses vestluses", + "You received a message in a private conversation" : "Sina said privaatses vestluses sõnumi", + "Reminder in a private conversation" : "Meeldetuletus privaatses vestluses", + "Someone mentioned you in a private conversation" : "Keegi mainis sind privaatses vestluses", + "Notification in a private conversation" : "Teavitus privaatses vestluses", + "Reminder: You in {call}" : "Meeldetuletus: sina „{call}“ kõnes", + "Reminder: {user} in {call}" : "Meeldetuletus: {user} „{call}“ kõnes", + "Reminder: Deleted user in {call}" : "Meeldetuletus: kustutatud kasutaja „{call}“ kõnes", + "Reminder: {guest} (guest) in {call}" : "Meeldetuletus: „{guest}“ (külaline) „{call}“ kõnes", + "Reminder: Guest in {call}" : "Meeldetuletus: külaline „{call}“ kõnes", + "{user} reacted with {reaction}" : "{user} reageeris: {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reageeris {call} kõnes: {reaction}", + "Deleted user reacted with {reaction} in {call}" : "Kustutatud kasutaja reageeris {call} kõnes: {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (külaline) reageeris {call} kõnes: {reaction}", + "Guest reacted with {reaction} in {call}" : "Külaline reageeris {call} kõnes: {reaction}", + "{user} in {call}" : "„{user}“ kasutaja „{call}“ kõnes", + "Deleted user in {call}" : "Kustutatud kasutaja „{call}“ kõnes", + "{guest} (guest) in {call}" : "„{guest}“ (külaline) „{call}“ kõnes", + "Guest in {call}" : "Külaline „{call}“ kõnes", + "{user} sent you a private message" : "{user} saatis sulle privaatse sõnumi", + "{user} sent a message in conversation {call}" : "{user} saatis „{call}“ vestluses sõnumi", + "A deleted user sent a message in conversation {call}" : "Kustutatud kasutaja saatis „{call}“ vestluses sõnumi", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (külaline) saatis „{call}“ vestluses sõnumi", + "A guest sent a message in conversation {call}" : "Külaline saatis „{call}“ vestluses sõnumi", + "{user} replied to your private message" : "{user} vastas sinu privaatsele sõnumile", + "{user} replied to your message in conversation {call}" : "{user} vastas „{call}“ vestluses sinu sõnumile", + "A deleted user replied to your message in conversation {call}" : "Kustutatud kasutaja vastas „{call}“ vestluses sinu sõnumile", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (külaline) vastas „{call}“ vestluses sinu sõnumile", + "A guest replied to your message in conversation {call}" : "Külaline vastas „{call}“ vestluses sinu sõnumile", + "Reminder: You in private conversation {call}" : "Meeldetuletus: sina privaatses vestluses „{call}“", + "Reminder: A deleted user in private conversation {call}" : "Meeldetuletus: kustutatud kasutaja privaatses vestluses „{call}“", + "Reminder: {user} in private conversation" : "Meeldetuletus: {user} privaatses vestluses", + "Reminder: You in conversation {call}" : "Meeldetuletus: sina vestluses „{call}“", + "Reminder: {user} in conversation {call}" : "Meeldetuletus: {user} vestluses „{call}“", + "Reminder: A deleted user in conversation {call}" : "Meeldetuletus: kustutatud kasutaja vestluses „{call}“", + "Reminder: {guest} (guest) in conversation {call}" : "Meeldetuletus: {guest} (külaline) vestluses „{call}“", + "Reminder: A guest in conversation {call}" : "Meeldetuletus: külaline vestluses „{call}“", + "{user} reacted with {reaction} to your private message" : "{user} reageeris sinu privaatsele sõnumile {reaction} emojiga", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Kustutatud kasutaja reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (külaline) reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "A guest reacted with {reaction} to your message in conversation {call}" : "Külaline reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "{user} mentioned you in a private conversation" : "{user} mainis sind privaatses vestluses", + "{user} mentioned group {group} in conversation {call}" : "{user} mainis „{group}“ gruppi „{call}“ vestluses", + "{user} mentioned team {team} in conversation {call}" : "{user} mainis „{team}“ tiimi „{call}“ vestluses", + "{user} mentioned everyone in conversation {call}" : "{user} mainis „{call}“ vestluses kõiki", + "{user} mentioned you in conversation {call}" : "{user} mainis sind „{call}“ vestluses", + "A deleted user mentioned group {group} in conversation {call}" : "Kustutatud kasutaja mainis „{group}“ gruppi „{call}“ vestluses", + "A deleted user mentioned team {team} in conversation {call}" : "Kustutatud kasutaja mainis „{team}“ tiimi „{call}“ vestluses", + "A deleted user mentioned everyone in conversation {call}" : "Kustutatud kasutaja mainis „{call}“ vestluses kõiki", + "A deleted user mentioned you in conversation {call}" : "Kustutatud kasutaja mainis sind „{call}“ vestluses", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (külaline) mainis „{group}“ gruppi „{call}“ vestluses", + "{guest} (guest) mentioned team {team} in conversation {call}" : "„{guest}“ (külaline) mainis „{call}“ vestluses „{team}“ tiimi", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (külaline) mainis „{call}“ vestluses kõiki", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (külaline) mainis sind „{call}“ vestluses", + "A guest mentioned group {group} in conversation {call}" : "Külaline mainis „{group}“ gruppi „{call}“ vestluses", + "A guest mentioned team {team} in conversation {call}" : "Külaline mainis „{call}“ vestluses „{team}“ tiimi", + "A guest mentioned everyone in conversation {call}" : "Külaline mainis „{call}“ vestluses kõiki", + "A guest mentioned you in conversation {call}" : "Külaline mainis sind „{call}“ vestluses", + "View message" : "Vaata sõnumit", + "Dismiss reminder" : "Loobu meeldetuletusest", + "View chat" : "Vaata vestlust", + "{user} invited you to a group conversation: {call}" : "{user} kutsus sind osalema rühmavestluses: {call}", + "Join call" : "Liitu kõnega", + "Answer call" : "Vastama kõnele", + "{user} would like to talk with you" : "{user} soovib sinuga rääkida", + "Call back" : "Helista tagasi", + "You missed a call from {user}" : "Vastamata kõne kasutajalt {user}", + "Accept call" : "Võta kõne vastu", + "Incoming phone call from {call}" : "Saabuv kõne kasutajalt „{call}“", + "You missed a phone call from {call}" : "Kasutaja „{call}“ kõne jäi sul märkamata", + "A group call has started in {call}" : "Rühmakõne algas siin: {call}", + "You missed a group call in {call}" : "Vastamata kõne grupis {call}", + "{email} is requesting the password to access {file}" : "„{email}“ soovib ligipääsuks „{file}“ failile salasõna", + "{email} tried to request the password to access {file}" : "„{email}“ soovis ligipääsuks „{file}“ failile küsida salasõna", + "Someone is requesting the password to access {file}" : "Keegi soovib ligipääsuks „{file}“ failile salasõna", + "Someone tried to request the password to access {file}" : "Keegi soovis ligipääsuks „{file}“ failile küsida salasõna", + "Open settings" : "Ava seadistused", + "Hosted signaling server added" : "Teenusepakkuja kõnehõlbustusserver on lisatud", + "The hosted signaling server is now configured and will be used." : "Väline kõnehõlbustusserver on nüüd seadistatud ja kasutusel.", + "Hosted signaling server removed" : "Teenusepakkuja kõnehõlbustusserver on eemaldatud", + "The hosted signaling server was removed and will not be used anymore." : "Väline kõnehõlbustusserver on nüüd eemaldatud ja pole enam kasutusel.", + "Hosted signaling server changed" : "Teenusepakkuja kõnehõlbustusserver on muutunud", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Teenusepakkuja kõnehõlbustusserveri kasutajakonto olek on muutunud: „{oldstatus}“ → „{newstatus}“.", + "pending" : "ootel", + "active" : "aktiivne", + "expired" : "aegunud", + "blocked" : "blokeeritud", + "error" : "viga", + "The certificate of {host} expires in {days} days" : "{host} serveri sertifikaat aegub {days} päeva pärast", + "The certificate of {host} expired" : "{host} serveri sertifikaat on aegunud", + "Contact via Talk" : "Suhtle Kõnerakenduses", + "Open Talk" : "Ava kõnerakendus", + "Default" : "Vaikeväärtus", + "Send messages, create threads, and start voice and video calls." : "Saada sõnumeid, koosta jutulõngu ja helista tava- või videokõnena.", + "Presentation" : "Esitlus", + "Voice room" : "Jututuba häälkõnede jaoks", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Liitumine kõnega otse, ideaalne jätkusündmuste ja spontaansete kohtumiste jaoks.", + "Webinar" : "Veebiseminar", + "Conversations" : "Vestlused", + "Messages in current conversation" : "Sõnumid selles vestlustes", + "{user}" : "{user}", + "Messages" : "Sõnumid", + "{user} in {conversation}" : "„{user}“ kasutaja „{conversation}“ kõnes", + "Messages in other conversations" : "Sõnumid muudes vestlustes", + "One-to-one rooms always need to show the other users avatar" : "Kahepoolsetes vestlustes on osalejate tunnuspildid alati kuvatud", + "Invalid emoji character" : "Vigane emoji tähemärk", + "Invalid background color" : "Vigane taustavärv", + "Avatar image is not square" : "Avatari pilt pole ruut", + "Room {number}" : "Ruum: {number}", + "Other" : "Muu", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Kuna testserver polnud leitav, siis testperioodi taotlemine polnud võimalik. Palun proovi hiljem uuesti.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Selle serveri autentimisel tekkis viga. Võibolla ei saa talle väljastpoolt ligi ja seega võrguaadress pole kontrollitav.", + "Something unexpected happened." : "Juhtus midagi ootamatut.", + "The URL is invalid." : "Antud võrguaadress on vigane.", + "An HTTPS URL is required." : "HTTPS-protokolliga võrguaadress on nõutav.", + "The email address is invalid." : "See e-posti aadress on vigane.", + "The language is invalid." : "Antud keel on vale.", + "The country is invalid." : "Antud maa on vigane.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Prooviversiooni päringuga on üks probleem. Täpsemat teavet leiad logidest.", + "Too many requests are send from your servers address. Please try again later." : "Sinu serveri aadressilt on saadetud liiga palju päringuid. Palun proovi hiljem uuesti.", + "There is already a trial registered for this Nextcloud instance." : "Selle Nexctcloudi serveri jaoks on prooviperiood juba registreeritud.", + "Something unexpected happened. Please try again later." : "Juhtus midagi ootamatut. Palun proovi hiljem uuesti.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Kuna testserver toimis valesti, siis testperioodi taotlemine polnud võimalik. Palun proovi hiljem uuesti.", + "Trial requested but failed to get account information. Please check back later." : "Prooviperiood on registreeritud, kuid kasutajakonto andmeid pole võimalik laadida. Palun proovi hiljem uuesti.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Selle päringu autentimisel tekkis viga. Võibolla ei saa talle väljastpoolt ligi ja seega võrguaadress pole kontrollitav.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kuna testserver toimis valesti, siis kasutajakonto laadimine polnud võimalik. Palun proovi hiljem uuesti.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kasutajakonto teabe laadimisel on üks probleem. Täpsemat teavet leiad logidest.", + "There is no such account registered." : "Sellist registreeritud kasutajakontot pole.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kuna testserver polnud leitav, siis kasutajakonto andmete laadimine polnud võimalik. Palun proovi hiljem uuesti.", + "Deleting the hosted signaling server account failed. Please check back later." : "Ei õnnestunud kustutada kõnehõlbustusserveri kasutajakontot. Palun proovi hiljem uuesti.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kuna testserver toimis valesti, siis testperioodi kasutajakonto kustutamine polnud võimalik. Palun proovi hiljem uuesti.", + "Too many requests are sent from your servers address. Please try again later." : "Sinu serveri aadressilt on saadetud liiga palju päringuid. Palun proovi hiljem uuesti.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kuna testserver polnud leitav, siis kasutajakonto kustutamine polnud võimalik. Palun proovi hiljem uuesti.", + "Note to self" : "Minu märkmed", + "A place for your private notes, thoughts and ideas" : "Koht isiklike märkmete, mõtete ja ideede jaoks", + "Transcript is AI generated and may contain mistakes" : "See üleskirjutus on tehisaru koostatud ja võib sisaldada vigu.", + "Summary is AI generated and may contain mistakes" : "See kokkuvõte on tehisaru koostatud ja võib sisaldada vigu", + "Let's get started!" : "Alustame!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** on turvaline ja sinu omas serveris töötav suhtlusplatvorm, mis lõimub sujuvalt muu Nextcloudi ökosüsteemiga.\n\n#### Nextcloudi vestlustakenduse võimalused:\n\n* Kahepoolsed ja rühmavestlused\n* Hääl- ja videokõned\n* Failide jagamine ja lõimingud muude Nextcloudi rakendustega\n* Kohendatavad vestluse seadistused, modereerimise ja turvalisuse haldus\n* Kasutatav veebibrauseris, töölaual ja nutiseadmes (iOS ja Android)\n* Privaatne ja turvaline suhtlus\n\nLisateavet leiad [juhendist](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Tere tulemast - see on Nextcloud Talk\n\nNextcloudi vestlusrakendus on turvaline ja võimas suhtlusplatvorm, mis lõimub sujuvalt muu Nextcloudi ökosüsteemiga. Kasuta kahepoolset või rühmavestlust, lihtsusta koostööd hääl- ja videokõnede abil, korralda vebinare ja sündmusi, kohenda vestlusi vastavalt vajadusele ja palju muud.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Lisa manuseid ja linke\n\n+ ikoonist saad lisada oma faile oma Nextcloudi serverist. Failirakendusest ja erinevatest Nextcloudi rakendustest saad jagada sisu. Mõned rakendused, nagu tekstirakendus, toetavad ka interaktiivsete vidinate kasutamist.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lase vestlusel kulgeda: maini kasutajaid, reageeri sõnumitele ja palju muud\n\nVestluses saadi mainida kõiki „%s“ abil või ühte konkreetset osalejat sisestades „@“ valides loendist soovitud nime.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Sa võid sõnumitele vastata, neid teistesse vestlustesse või teistele kasutajatele edastada ning kopeerida sõnumite sisu.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Vestluse seadistuste haldus\n\nVestluse menüüst leiad erinevaid võimalusi vestluste haldamiseks, näiteks:\n* Vestluse teabe muutmine\n* Teavituste haldus\n* Modereerimisreeglite kasutus\n* Ligipääsu ja turvalisuse seadistused\n* Robotite kasutus\n* ja palju muud!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Araabia Ühendemiraadid", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ja Barbuda ", + "Anguilla" : "Anguilla", + "Albania" : "Albaania", + "Armenia" : "Armeenia", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Ameerika Samoa", + "Austria" : "Austria", + "Australia" : "Austraalia", + "Aruba" : "Aruba", + "Åland Islands" : "Ahvenamaa", + "Azerbaijan" : "Aserbaidžaan", + "Bosnia and Herzegovina" : "Bosnia ja Hertsegoviina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Boliivia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ja Saba", + "Brazil" : "Brasiilia", + "Bahamas" : "Bahama", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet' saar", + "Botswana" : "Botswana", + "Belarus" : "Valgevene", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kookossaared", + "Congo, the Democratic Republic of the" : "Kongo DV", + "Central African Republic" : "Kesk-Aafrika Vabariik", + "Congo" : "Kongo Vabariik", + "Switzerland" : "Šveits", + "Côte d'Ivoire" : "Elevandiluurannik", + "Cook Islands" : "Cooki saared", + "Chile" : "Tšiili", + "Cameroon" : "Kamerun", + "China" : "Hiina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuuba", + "Cabo Verde" : "Roheneemesaared", + "Curaçao" : "Curaçao", + "Christmas Island" : "Jõulusaar", + "Cyprus" : "Küpros", + "Czechia" : "Tšehhi", + "Germany" : "Saksamaa", + "Djibouti" : "Djibouti", + "Denmark" : "Taani", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikaani Vabariik", + "Algeria" : "Alžeeria", + "Ecuador" : "Ecuador", + "Estonia" : "Eesti", + "Egypt" : "Egiptus", + "Western Sahara" : "Lääne-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Hispaania", + "Ethiopia" : "Etioopia", + "Finland" : "Soome", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandi (Malviini) saared", + "Micronesia, Federated States of" : "Mikroneesia", + "Faroe Islands" : "Fääri saared", + "France" : "Prantsusmaa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Suurbritannia", + "Grenada" : "Grenada", + "Georgia" : "Gruusia", + "French Guiana" : "Prantsuse Guajaana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Gröönimaa", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatoriaal-Guinea", + "Greece" : "Kreeka", + "South Georgia and the South Sandwich Islands" : "Lõuna-Georgia ja Lõuna-Sandwichi saared", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard ja McDonald", + "Honduras" : "Honduras", + "Croatia" : "Horvaatia", + "Haiti" : "Haiti", + "Hungary" : "Ungari", + "Indonesia" : "Indoneesia", + "Ireland" : "Iirimaa", + "Israel" : "Iisrael", + "Isle of Man" : "Mani saar", + "India" : "India", + "British Indian Ocean Territory" : "Briti India ookeani ala", + "Iraq" : "Iraag", + "Iran, Islamic Republic of" : "Iraan", + "Iceland" : "Island", + "Italy" : "Itaalia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordaania", + "Japan" : "Jaapan", + "Kenya" : "Keenia", + "Kyrgyzstan" : "Kõrgõzstan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komoorid", + "Saint Kitts and Nevis" : "Saint Kitts ja Nevis", + "Korea, Democratic People's Republic of" : "Põhja-Korea", + "Korea, Republic of" : "Lõuna-Korea", + "Kuwait" : "Kuveit", + "Cayman Islands" : "Kaimanisaared", + "Kazakhstan" : "Kasahstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Liibanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libeeria", + "Lesotho" : "Lesotho", + "Lithuania" : "Leedu", + "Luxembourg" : "Luksemburg", + "Latvia" : "Läti", + "Libya" : "Liibia", + "Morocco" : "Maroko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint-Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalli Saared", + "North Macedonia" : "Põhja-Makedoonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Põhja-Mariaanid", + "Martinique" : "Martinique", + "Mauritania" : "Mauritaania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiivid", + "Malawi" : "Malawi", + "Mexico" : "Mehhiko", + "Malaysia" : "Malaisia", + "Mozambique" : "Mosambiik", + "Namibia" : "Namiibia", + "New Caledonia" : "Uus-Kaledoonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk", + "Nigeria" : "Nigeeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holland", + "Norway" : "Norra", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Uus-Meremaa", + "Oman" : "Omaan", + "Panama" : "Panama", + "Peru" : "Peruu", + "French Polynesia" : "Prantsuse Polüneesia", + "Papua New Guinea" : "Paapua Uus-Guinea", + "Philippines" : "Filipiinid", + "Pakistan" : "Pakistan", + "Poland" : "Poola", + "Saint Pierre and Miquelon" : "Saint-Pierre ja Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestiina", + "Portugal" : "Portugal", + "Palau" : "Belau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumeenia", + "Serbia" : "Serbia", + "Russian Federation" : "Venemaa", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Araabia", + "Solomon Islands" : "Saalomoni Saared", + "Seychelles" : "Seišellid", + "Sudan" : "Sudaan", + "Sweden" : "Rootsi", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ja Tristan da Cunha", + "Slovenia" : "Sloveenia", + "Svalbard and Jan Mayen" : "Svalbard ja Jan Mayen", + "Slovakia" : "Slovakkia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somaalia", + "Suriname" : "Suriname", + "South Sudan" : "Lõuna-Sudaan", + "Sao Tome and Principe" : "São Tomé ja Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Süüria", + "Eswatini" : "Svaasimaa", + "Turks and Caicos Islands" : "Turks ja Caicos", + "Chad" : "Tšaad", + "French Southern Territories" : "Prantsuse Lõunaalad", + "Togo" : "Togo", + "Thailand" : "Tai", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Ida-Timor", + "Turkmenistan" : "Türkmenistan", + "Tunisia" : "Tuneesia", + "Tonga" : "Tonga", + "Turkey" : "Türgi", + "Trinidad and Tobago" : "Trinidad ja Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansaania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ühendriikide hajasaared", + "United States of America" : "Ameerika Ühendriigid", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikan", + "Saint Vincent and the Grenadines" : "Saint Vincent ja Grenadiinid", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Briti Neitsisaared", + "Virgin Islands, U.S." : "USA Neitsisaared", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ja Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jeemen", + "Mayotte" : "Mayotte", + "South Africa" : "Lõuna-Aafrika Vabariik", + "Zambia" : "Sambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Tausta hägustamine", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Ei õnnestunud kontrollida, kas WASM-failide tugi toimib. Palun kontrolli käsitsi, kas sinu veebiserver suudab edastada .wasm faile.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Sinu veebiserver ei edasta korrektselt „.wasm“ faile. See on tüüpiline viga, mis võib tekkida Nginxi serverites. Tausta hägustamise jaoks aga on selliste failide saadavus vajalik. Palun võrdle oma Nginxi serveri seadistusi juhendis näidatuga.", + "Talk configuration values" : "Talk kõnerakenduse seadistused", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Kõne maksimumkestuse jõustamine toimib vaid siis, kui kasutusel on süstmne cron. Seega palun võta cron kasutusele või eemalda seadistustest „max_call_duration“.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Väga väikesed kõne maksimumkestused („max_call_duration“, praeguse väärtusega %d) pole tegelikkuses jõustatavad. Taustateenus, mis seda kontrollib, käivitub vaid iga 5 minuti järel, seega palun arvesta sellega.", + "Federation" : "Liitpilv", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Kui kõnerakendus on liitpilvele avatud, siis me soovitame, et seadistad „memcache.locking“ tingimuse.", + "High-performance backend" : "Suure jõudlusega taustateenus", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Suure jõudlusega taustateenus pole seadistatud. Nextcloudi kõnerakenduse käitamine ilma selle teenuseta skaleerub vaid väga väikese osalejate arvuga kõnedele (2-3 osalejat). Tagamaks, et paljude osalejatega kõned toimivad sujuvalt, palun seadista Suure jõudlusega taustateenus.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Suure jõudlusega taustateenuse käitamine vestlusklastri režiimis (conversation_cluster) on aegunud ja see pole enam järgmises versioonis toetatud. Selle asemel peaks suure jõudlusega taustateenuse puhul kasutama tänapäeval asjakohast päris klasterdusrežiimi.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Mitme suure jõudlusega taustateenuse kasutamine on aegunud ja see pole enam järgmises versioonis toetatud. Selle asemel peaksid seadistama koormuse tasakaalustamisteenuse koos klasterdatud signaliseerimisserveriga ning seadistama need kõnerakenduse seadistustes.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "%1$s algoritmi salvestatud avalik võti ei vasta salvestatud privaatvõtmele. Vea parandamiseks käivita: %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "Suure jõudlusega taustateenus pole korrektselt seadistatud. Üksikasjalikku teavet saad, kui käivitad: %s.", + "High-performance backend not configured correctly" : "Suure jõudlusega taustateenus pole korrektselt seadistatud", + "Error: Cannot connect to server" : "Viga: serveriga ühenduse loomine ei õnnestu", + "Error: Server did not respond with proper JSON" : "Viga: Serveri vastuseks polnud korrektne json", + "Error: Certificate expired" : "Viga: sertifikaat on aegunud", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Viga: Nextcloudi severi ja suure jõudlusega taustateenuse süsteemsed kellaajad pole sünkroonis. Palun kontrolli, et mõlemas serveris oleks seadistatud ajateenuse kasutamine või sünkrooni nende kellaajad käsitsi.", + "Could not get version" : "Ei õnnestunud tuvastada versiooni", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Viga: Kasutusel olev versioon on {version}, aga server vajab selle Talki versiooniga ühilduvuse nimel uuendamist ", + "Error: Server responded with: {error}" : "Viga: serveri vastuseks on {error}", + "Error: Unknown error occurred" : "Viga: tekkis tundmatu viga", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Hoiatus: töötav versioon on {version}; server ei toeta kõiki kõnerakenduse funktsionaalsusi, neist on puudu: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Kui kasutad Nextcloudi vestlusrakendust suure jõudlusega taustateenusega, siis soovitame, et seadistad ka mälupuhverduse.", + "Client Push" : "Tõuketeenused kliendile", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Tõuketeenused kliendile on paigaldatud ja see parandab vestlusrakenduste teavituste liikumise kiirust.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} pole paigaldatud ja see võib vestlusrakenduse klientide puhul tekitada viivitusi sõnumite edastamisel.", + "Recording backend" : "Salvestuse taustateenus", + "Using the recording backend requires a High-performance backend." : "Salvestuse funktsionaalsuse kasutamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "No recording backend configured" : "Ühtegi salvestuse taustateenust pole seadistatud", + "SIP configuration" : "SIP-i seadistused", + "Using the SIP functionality requires a High-performance backend." : "SIP-i funktsionaalsuse kasutamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "No SIP backend configured" : "Ühtegi SIP-i taustateenust pole seadistatud", + "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, vorming peab olema YYYY-MM-DD", + "Conversation not found" : "Vestlust ei leidu", + "Path is already shared with this conversation" : "Asukoht on selle vestlusega juba jagatud", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC-liidetusel põhinevad vestlused, kõned ning videokohtumised", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Vestlused ja WebRTC vahendusel toimivad video- ja audiokonverentsid * 💬 **Vestlus** Nextcloudi kõnerakenduses (Nextcloud Talk) leidub lihtne vestluslahendus võimalusega jagada faile Nextcloudi failirakendusest või laadida neid üles oma kohalikust seadmest - kõike seda koos teiste osalejate mainimise võimlusega.* 👥 **Privaatsed kahepoolsed ja rühmakõned nii avalikuna kui salasõnaga kaitstuna!** Kutsu kõnes osalema ükshaaval või grupi kaupa või hoopis saada kõnega liitumiseks avalik kutse.* 🌐 **Födereeritud vestlused** Vestle kasutajatega muudes Nextcloudi serverites* 💻 **Ekraani jagamine!** Jaga oma seadme ekraani teiste kõnes osalejatega.* 🚀 **Lõiming muude Nextcloudi rakendustega** nagu näiteks Failid, Kalender, Kasutajate olek, Juhtpaneel, Töövoog, Kaardid, Nutivalija, Kontaktid, Kanban ja muud.* 🌉 **Sünkrooni muude vestlusrakendustega** Kasutades [Matterbridge'i](https://github.com/42wim/matterbridge/) lõimingut vestlusrakenduses, saad mugavasti mõlemas suunas suhelda muude vestlusrakendustega.", + "Leave call" : "Lahku kõnest", + "Navigating away from the page will leave the call in {conversation}" : "Kui lahkud sellelt lehelt, siis lahkud ka „{conversation}“ vestluse kõnest", + "Stay in call" : "Püsi kõnes", + "Error occurred when getting the conversation information" : "Vestluse teabe laadimisel tekkis viga", + "Discuss this file" : "Vestle faili sisu teemal", + "Share this file with others to discuss it" : "Jaga seda faili teistega ning saad kõikide osalejatega faili sisu arutada", + "Share this file" : "Jaga seda faili", + "Join conversation" : "Liitu vestlusega", + "This conversation is password-protected." : "See vestlus on kaitstud salasõnaga", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Me oleme tuvastanud mitu vigast salasõna sisestust sinu ip-aadressilt. Seetõttu kasutame nüüd 30-sekundilist hingamishetke.", + "The password is wrong. Try again." : "Salasõna on vale. Proovi uuesti.", + "Password" : "Salasõna", + "Submit" : "Saada", + "Error requesting the password." : "Viga salasõna küsimisel", + "Request password" : "Küsi salasõna", + "This conversation has ended" : "See vestlus on lõppenud", + "Error occurred when joining the conversation" : "Viga kõnega liitumisel", + "Close Talk sidebar" : "Sulge vestlusrakenduse külgriba", + "Open Talk sidebar" : "Ava vestlusrakenduse külgriba", + "Everyone" : "Igaüks", + "Users and moderators" : "Kasutajad ja moderaatorid", + "Moderators only" : "Vaid moderaatorid", + "Disable calls" : "Lülita kõned välja", + "Save changes" : "Salvesta muudatused", + "Saving …" : "Salvestamine …", + "Saved!" : "Salvestatud!", + "Limit to groups" : "Luba gruppidele", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Kui vähemalt üks grupp on valitud, siis vaid loetletud grupi/gruppide liikmed saavad osaleda vestlustes.", + "Guests can still join public conversations." : "Külalised saavad jätkuvalt liituda avalike vestlustega.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Kasutajad, kes enam ei saa kõnerakendust kasutada, on jätkuvalt kirjas oma varasemate vestluste osalejatena ning ka nende sõnumid on jätkuvalt nähtavad.", + "Limit using Talk" : "Piira kõnerakenduse kasutamist", + "Limit creating a public and group conversation" : "Piira avalike ja rühmavestluste loomist", + "Limit creating conversations" : "Piira vestluste loomist", + "Limit starting a call" : "Piira helistamist", + "Limit starting calls" : "Piira helistamist", + "When a call has started, everyone with access to the conversation can join the call." : "Kui kõne on alanud, siis kõik, kellel on ligipääs lubatud, saavad kõnega liituda.", + "Description is not provided" : "Kirjeldus on lisamata", + "Locked for moderators" : "Lukustatud moderaatorite jaoks", + "Enabled" : "Sisse lülitatud", + "Disabled" : "Keelatud", + "Bots settings" : "Robotite seadistused", + "State" : "Olek", + "Name" : "Nimi", + "Last error" : "Viimane viga", + "Total errors count" : "Vigu kokku", + "Find more bots" : "Otsi veel roboteid", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Usaldusväärseid servereid saab seadistada siin: {linkstart} Jagamisleht on {linkend}.", + "Beta" : "Beetaversioon", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Vestlused ja kõned toimivad ka liitpilves. Manuste saatmine lisandub tulevases versioonis.", + "Enable Federation in Talk app" : "Lülita kõnerakenduses sisse liitpilve kasutamine", + "Permissions" : "Õigused", + "Allow users to be invited to federated conversations" : "Luba kasutajate liitumist vestlustega liitpilves", + "Allow users to invite federated users into conversation" : "Luba kasutajatel saata vestluskutseid kasutajatele liitpilves", + "Only allow to federate with trusted servers" : "Luba liitvõrgus kasutada vaid usaldusväärseid servereid", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Kui vähemalt üks grupp on valitud, siis vaid loetletud grupi/gruppide liikmed saavad saata vestluskutseid kasutajatele liitpilves.", + "Groups allowed to invite federated users" : "Grupid, mille liikmed võivad saata kutseit kasutajatele liitpilves", + "Select groups …" : "Vali grupid…", + "All messages" : "Kõik sõnumid", + "@-mentions only" : "Vaid @-mainimised", + "Off" : "Pole kasutusel", + "General settings" : "Üldised seadistusted", + "Default notification settings" : "Vaikimisi teavituste seadistused", + "Default group notification" : "Vaikimisi grupiteavitus", + "Default group notification for new groups" : "Vaikimisi grupiteavitus uute gruppide jaoks", + "Integration into other apps" : "Lõiming muude rakendustega", + "Allow conversations on files" : "Luba failide teisendamine", + "Allow conversations on public shares for files" : "Luba avalikult jagatud failide teisendamist", + "End-to-end encrypted calls" : "Läbivalt krüptitud kõned", + "Enable encryption" : "Luba krüptimine", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Seadistatud SIP-i võrgusilla vahendusel tehtavad läbivalt krüptitud kõned eeldavad uuema suure jõudlusega taustateenuse ja SIP-i võrgusilla kasutamist.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Nutiseadmete kliendid hetkel ei toeta läbivalt krüptitud kõnesid", + "Pending" : "Ootel", + "Error" : "Viga", + "Blocked" : "Blokeeritud", + "Active" : "Aktiivne", + "Expired" : "Aegunud", + "Never" : "Mitte kunagi", + "The trial could not be requested. Please try again later." : "Testperioodi päringut polnud võimalik saata. Palun proovi hiljem uuesti.", + "The account could not be deleted. Please try again later." : "Seda kasutajakontot polnud võimalik kustutada. Palun proovi hiljem uuesti.", + "Hosted High-performance backend" : "Suure jõudlusega taustateenus välise teenusepakkuja poolt", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Kui hetkel kasutatav suure jõudlusega taustateenuses leidub ka STUN- ja/või TURN-komponendid, siis seadistused muutuvad vastavalt.", + "URL of this Nextcloud instance" : "Selle Nextcloudi serveri võrguaadress", + "Full name of the user requesting the trial" : "Testperioodi taotluse esitaja täisnimi", + "Email of the user" : "Kasutaja e-posti aadress", + "Language" : "Keel", + "Country" : "Maa", + "Request signaling server trial" : "Taotle testperioodi kõnehõlbustusserveris", + "You can see the current status of your hosted signaling server in the following table." : "Järgnevas tabelis näed oma kõnehõlbustusserveri praegust olekut.", + "Status" : "Staatus", + "Created at" : "Loodud", + "Expires at" : "Aegub", + "Limits" : "Piirangud", + "STUN included" : "STUN on olemas", + "Yes" : "Ja", + "No" : "Ei", + "TURN included" : "TURN on olemas", + "Delete the signaling server account" : "Kustuta kasutajakonto kõnehõlbustusserveris", + "_%n user_::_%n users_" : ["%n kasutaja","%n kasutajat"], + "Installed version: {version}" : "Paigaldatud versioon: {version}", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge'i käivitusfauilil on vigased õigused. Palun kontrolli, et Matterbridge'i käivitusfaili omanik on korrektne ja ta saab seda käivitada. Leiad ta siit: „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge'i programmi kas ei leidunud või polnud seda võimalik käivitada.", + "Downloading …" : "Laadin alla…", + "Install Talk Matterbridge" : "Paigalda Matterbridge Nextcloudi kõnerakenduse jaoks", + "An error occurred while installing the Matterbridge app" : "Matterbridge'i rakenduse paigaldamisel tekkis viga", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Matterbridge'i võrgusilla paigaldamisel kõnerakendusse tekkis viga. Palun paigalda ta käsitsi.", + "Failed to execute Matterbridge binary." : "Matterbridge'i programmi ei õnnestunud käivitada.", + "Matterbridge integration" : "Matterbridge'i lõiming", + "Enable Matterbridge integration" : "Võta Matterbridge'i lõiming kasutusele", + "Status: Checking connection" : "Olek: Kontrollin ühendust", + "OK: Running version: {version}" : "OK: Töötav versioon: {version}", + "Error: Server seems to be a Signaling server" : "Viga: server tundub olema kõnehõlbustusserver", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Viga: Nextcloudi severi ja salvestusserveri süsteemsed kellaajad pole sünkroonis. Palun kontrolli, et mõlemas serveris oleks seadistatud ajateenuse kasutamine või sünkrooni nende kellaajad käsitsi.", + "Recording backend URL" : "Salvestuse taustateenuse võrguaadress", + "Validate SSL certificate" : "Kontrolli SSL-sertifikaadi kehtivust", + "Delete this server" : "Kustuta see server", + "Test this server" : "Testi seda serverit", + "Disabled for all calls" : "Keelatud kõikide kõnede puhul", + "Enabled for all calls" : "Lubatud kõikide kõnede puhul", + "Configurable on conversation level by moderators" : "Seadistatav vestlusekohaselt moderaatorite poolt", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP seadistused „upload_max_filesize“ või „post_max_size“ lubavad üles laadida vaid kuni {maxUpload} suuruses faile.", + "Recording backend settings saved" : "Salvestuse taustateenuse seadistused on salvestatud", + "The consent to be recorded will be required for each participant before joining every call." : "Iga osaleja nõusolek salvestamiseks on vajalik enne iga kõnega liitumist.", + "The consent to be recorded is not required." : "Vajalik on nõusoleks salvestamiseks.", + "Recording backend configuration is only possible with a High-performance backend." : "Salvestamise taustateenuse seadistamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "Add a new recording backend server" : "Lisa uus salvestuse taustateenuse server", + "Shared secret" : "Jagatud saladus", + "Recording consent" : "Nõusolek salvestamisega", + "Recording transcription" : "Salvestise üleskirjutus", + "Automatically transcribe call recordings with a transcription provider" : "Tee kõnesalvestistest üleskirjutuse teenusepakkuja abil automaatne üleskirjutus", + "Automatically summarize call recordings with transcription and summary providers" : "Tee kõnesalvestistest üleskirjutuse ja kokkuvõtte teenusepakkujate abil automaatne kokkuvõte", + "SIP configuration saved!" : "SIP-i seadistused on salvestatud!", + "SIP configuration is only possible with a High-performance backend." : "SIP-i funktsionaalsuse seadistamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "Enable SIP Dial-out option" : "Lülita sisse SIP-i põhise väljahelistamisteenuse võimalus", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Et väljahelistamine SIP-i teenusega (SIP Dial-out) toimiks, siis kõnehõlbustusserver vajab uuendamist.", + "Do not show SIP Dial-out caller number" : "Ära näita SIP-i teenusega väljahelistaja numbrit", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Kõne vastuvõtja näeb helistaja numbrit anonüümsena", + "Dial-out number" : "Väljahelistaja number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-vormingus helistaja tagavaranumber väljuvate kõnede jaoks", + "Dial-out prefix" : "Väljuvate kõnede eesliide", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Väljuvate kõnede eesliide (vaikimisi +)", + "Restrict SIP configuration" : "Piira SIP-i seadistusi", + "Enable SIP configuration" : "Kasuta SIP-i seadistusi", + "Phone number (Country)" : "Telefonunumber (Maa)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "See teave on lisatud kõikidesse kutsekirjadesse ning kuvatud ka kõikide osalejate külgpaanil.", + "Nextcloud base URL" : "Nextcloudi põhiline võrguaadress", + "Talk Backend URL" : "Nextcloudi vestlusrakenduse taustateenuse võrguaadress", + "WebSocket URL" : "WebSocketi võrguaadress", + "Available features" : "Saadaval funktsionaalsused", + "Error: Websocket connection failed" : "Viga: Websocketi-põhist ühendust ei õnnestunud luua", + "Error code" : "Veakood", + "Error message" : "Veateade", + "Error: Websocket connection failed. Check browser console" : "Viga: Websocketi-põhist ühendust ei õnnestunud luua. Lisateavet leiad veebibrauseri konsoolist", + "High-performance backend URL" : "Suure jõudlusega taustateenuse võrguaadress", + "Missing High-performance backend warning hidden" : "Puuduva suure jõudlusega taustateenuse hoiatus on peidetud", + "High-performance backend settings saved" : "Suure jõudlusega taustateenus seadistused on salvestatud", + "Nextcloud Talk setup not complete" : "Talk kõnerakenduse paigaldus on poolik", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Palun arvesta, et kui kõnes on üle 2 kasutaja ning suure jõudlusega taustateenus pole kasutusel, siis osalejatel võib tekkida ühendusprobleeme ning osalevad seadmed võivad sattuda suure koormuse alla.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Et mitme osalejaga kõned toimiks korralikult palun paigalda suure jõudlusega taustateenus.", + "Nextcloud portal" : "Nextcloudi portaal", + "Quick installation guide" : "Paigalduse kiirjuhend", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Suure jõudlusega taustateenus on vajalik mitmete osalejatega kõnede ja vestluste jaoks. Ilma taustateenuseta peavad kõik kasutajad eraldi laadima videovoo üles kõikide kasutajate jaoks ning see võib paratamatult kõikide kasutajate puhul tekitada võrguühenduse ja jõudluse probleeme.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Kui kasutad Nextcloudi vestlusrakendust suure jõudlusega taustateenusega, siis tungivalt soovitame, et seadistad ka hajutatud puhverduse.", + "Add High-performance backend server" : "Lisa suure jõudlusega taustateenuse server", + "Warn about connectivity issues in calls with more than 2 participants" : "Palun hoiata võrguühenduse probleemide eest, kui kõnes on üle kahe osaleja", + "STUN server URL" : "STUN-serveri võrguaadress", + "The server address is invalid" : "Serveri aadress on vigane", + "STUN settings saved" : "STUN-i seadistused on salvestatud", + "STUN servers" : "STUN-i serverid", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-i server on kasutusel selliste kasutajate avaliku IP-aadressi tuvastamiseks, kes asuvad tulemüüri taga.", + "Add a new STUN server" : "Lisa uus STUN-i server", + "{schema} scheme must be used with a domain" : "{schema} peab olema kasutatud koos domeeniga", + "{option1} and {option2}" : "{option1} ja {option2}", + "{option} only" : "vaid {option}", + "TURN server URL" : "TURN-serveri võrguaadress", + "TURN server secret" : "TURN-i serveri saladus", + "TURN server protocols" : "TURN-serveri protokollid", + "TURN settings saved" : "TURN-i seadistused on salvestatud", + "TURN servers" : "TURN-i serverid", + "Add a new TURN server" : "Lisa uus TURN-i server", + "Failed" : "Ebaõnnestus", + "OK" : "Sobib", + "Checking …" : "Kontrollin…", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Tundub, et serveris on PHP ja Apache paigaldused omavahel vastuolus. Palun arvesta, et PHP kasutamisel peab olema kasutusel MPM_PREFORK moodul ning PHP-FPM-i kasutamisel MPM_EVENT moodul.", + "Web server setup checks" : "Veebiserveri paigalduskontrollid", + "Files required for virtual background can be loaded" : "Virtuaalse tausta jaoks vajalikud failid on nüüd laaditavad", + "Federated user" : "Kasutaja liitpilves", + "Assign participants to rooms" : "Määra osalejad jututubadesse", + "Configure breakout rooms" : "Seadista virtuaalseid töötube", + "Number of breakout rooms" : "Virtuaalsete töötubade arv", + "You can create from 1 to 20 breakout rooms." : "Sa võid luua 1 kuni 20 virtuaalset töötuba.", + "Assignment method" : "Määramise meetod", + "Automatically assign participants" : "Määra osalejad automaatselt", + "Manually assign participants" : "Määra osalejad käsitsi", + "Allow participants to choose" : "Luba osalejatel valida", + "Create rooms" : "Loo jututoad", + "Confirm" : "Kinnita", + "Create breakout rooms" : "Loo virtuaalseid töötube", + "Reset" : "Lähtesta", + "Delete breakout rooms" : "Kustuta virtuaalsed töötoad", + "Room {roomNumber}" : "Ruum: {roomNumber}", + "Current breakout rooms and settings will be lost" : "Kõik praegused virtuaalsed töötoad ja nende seadistused lähevad kaotsi", + "Cancel" : "Loobu", + "Unassigned participants" : "Määramata osalejad", + "Back" : "Tagasi", + "Assign" : "Määra", + "Add participant \"{user}\"" : "Lisa osaleja „{user}“", + "Now" : "Praegu", + "Invalid calendar selected" : "Valisid vale kalendri", + "Invalid start time selected" : "Valisid vale algusaja", + "Invalid end time selected" : "Valisid vale lõpuaja", + "Unknown error occurred" : "Tekkis tundmatu viga", + "Sending no invitations" : "Kutseid ei saadeta", + "{participant0} will receive an invitation" : "{participant0} saab kutse", + "{participant0} and {participant1} will receive invitations" : "{participant0} ja {participant1} saavad kutse", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ja %n muu kasutaja saavad kutse","{participant0}, {participant1} ja %n muud kasutajat saavad kutse"], + "Invite {user}" : "Saada kutse kasutajale {user}", + "Invite all users and emails in this conversation" : "Saada kutse kõikidele selle vestluse kasutajatele ja e-posti aadressidele", + "Meeting created" : "Kohtumine on loodud", + "Upcoming meetings" : "Tulekul kohtumised", + "Loading …" : "Laadimisel...", + "No upcoming meetings" : "Tulekul kohtumisi pole", + "Schedule a meeting" : "Ajasta kohtumine", + "Meeting title" : "Kohtumise nimi", + "From" : "Saatja", + "To" : "Saaja", + "Calendar" : "Kalender", + "Attendees" : "Osalejad", + "No other participants to send invitations to." : "Pole ühtegi teist osalejat, kellele kutset saata.", + "Add attendees" : "Lisa osalejaid", + "Save" : "Salvesta", + "Search participants" : "Otsi osalejaid", + "No results" : "Vasteid ei leitud", + "Done" : "Valmis", + "Disable live transcription" : "Ära kasuta ülestähendamist reaalajas", + "Enable live transcription (generated by AI)" : "Lülita reaalajas üleskirjutus sisse (loodud tehisaru abil)", + "Enable live transcription (Live transcriptions app is not installed)" : "Lülita reaalajas üleskirjutamine sisse (reaalajas üleskirjutamise rakendus pole paigaldatud)", + "Disable live translation" : "Lülita reaalajas tõlge välja", + "Enable live translation (generated by AI)" : "Lülita reaalajas tõlge sisse (loodud tehisaru abil)", + "Original language" : "Lähtekeel", + "Live translations app is not installed" : "Reaalajas tõlkimise rakendus pole paigaldatud", + "Original language: {languageName}" : "Algne keel: {languageName}", + "Translated language" : "Tõlkekeel", + "Translated language: {languageName}" : "Tõlkekeel: {languageName}", + "Raise hand" : "Anna käega märku", + "Raise hand (R)" : "Anna käega märku (R)", + "Lower hand" : "Lase käsi alla", + "Lower hand (R)" : "Lase käsi alla (R)", + "Exit full screen (F)" : "Välju täisekraanilt (F)", + "Full screen (F)" : "Täisekraan (F)", + "Speaker view" : "Esineja vaade", + "Grid view" : "Ruudustikvaade", + "Error when trying to load the available live transcription languages" : "Viga sõnumi reaalajas ülestähendamise keele laadimisel", + "Failed to enable live transcription" : "Viga reaalajas ülestähendamise kasutuselevõtmisel", + "Failed to enable live translations" : "Reaalajas tõlge sisselülitamine ei õnnestunud", + "Failed to disable live translations" : "Reaalajas tõlge väljalülitamine ei õnnestunud", + "Recording consent is required" : "Vajalik on nõusolek salvestamiseks", + "This conversation is read-only" : "See vestlus on vaid loetav", + "Conversation not found or not joined" : "Vestlust ei leidu või sa pole sellega liitunud", + "Lobby is still active and you're not a moderator" : "Ooteruum on jätkuvalt kasutusel ja sina pole moderaator", + "Connection failed" : "Ühenduse viga", + "Reload" : "Laadi uuesti", + "{nickName} raised their hand." : "{nickName} andis käega märku.", + "A participant raised their hand." : "Üks osaleja andis käega märku", + "Collapse stripe" : "Ahenda riba", + "Expand stripe" : "Laienda riba", + "Previous page of videos" : "Videote eelmine leht", + "Next page of videos" : "Videote järgmine leht", + "Connecting …" : "Ühendan…", + "Calling …" : "Helistan…", + "Waiting for {user} to join the call" : "Ootan, et kasutaja „{user}“ liituks kõnega", + "Waiting for others to join the call …" : "Ootan, kuni teised liituvad kõnega…", + "You can invite others in the participant tab of the sidebar" : "Saad uutele osalejatele kutset saata külgribalt osalejate vahekaardilt", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Saad uutele osalejatele kutset saata külgribalt osalejate vahekaardilt või lihtsalt jagad seda linki!", + "Share this link to invite others!" : "Kutse saatmiseks jaga seda linki!", + "Copy link" : "Kopeeri link", + "You are not allowed to enable audio" : "Sul pole lubatud heliriba sisse lülitada", + "No audio. Click to select device" : "Heli puudub. Seadme valimiseks klõpsa", + "Mute audio" : "Summuta heli", + "Mute audio (M)" : "Summuta heli (M)", + "Unmute audio" : "Lõpeta heli summutamine", + "Unmute audio (M)" : "Lõpeta heli summutamine (M)", + "None" : "Pole", + "Select a microphone" : "Vali mkrofon", + "Select a speaker" : "Vali kõlar", + "Microphone settings" : "Mikrofoni seadistused", + "Check devices" : "Kontrolli seadmeid", + "Access to camera was denied" : "Ligipääs kaamerale on keelatud", + "Error while accessing camera: It is likely in use by another program" : "Viga ligipääsul kaamerale: ta ilmselt on kasutusel mõne muu rakenduse poolt", + "Error while accessing camera" : "Viga ligipääsul kaamerale", + "You have been muted by a moderator" : "Moderaator summutas sinu heli", + "Hide presenter video" : "Peida esineja video", + "You are not allowed to enable video" : "Sul pole lubatud videot sisse lülitada", + "No video. Click to select device" : "Video puudub. Seadme valimiseks klõpsa", + "Disable video" : "Lülita video välja", + "Disable video (V)" : "Lülita videovoog välja (V)", + "Enable video" : "Lülita video sisse", + "Enable video (V)" : "Lülita videovoog sisse (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse. Tehes seda esimest korda katkeb korraks ühendus.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse (V). Tehes seda esimest korda katkeb korraks ühendus.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse. Tehes seda esimest korda katkeb korraks ühendus.", + "Select a video device" : "Vali videoseade", + "Show presenter" : "Näita esinejat", + "You" : "Sina", + "Mute" : "Summuta", + "Muted" : "Summutatud", + "Show screen" : "Näita ekraani", + "Stop following" : "Lõpeta järgimine", + "Connection could not be established …" : "Ei suuda luua ühendust…", + "Connection was lost and could not be re-established …" : "Ühendus katkes ja sead polnud võimalik taastada…", + "Connection could not be established. Trying again …" : "Ei õnnestunud ühendada. Proovin uuesti…", + "Connection lost. Trying to reconnect …" : "Ühendus katkes. Proovin uuesti ühenduda.", + "Connection problems …" : "Ühenduse vead…", + "Collapse" : "Sulge", + "Expand" : "Laienda", + "You need to be logged in to upload files" : "Failide üleslaadimiseks pead olema sisseloginud", + "Drop your files to upload" : "Üleslaadimiseks lohista failid siia", + "Conversation messages" : "Vestluse sõnumid", + "Scroll to bottom" : "Keri alla äärde", + "Post message" : "Saada sõnum", + "Federated conversation" : "Vestlus liitpilves", + "Public conversation" : "Avalik vestlus", + "Favorite" : "Lemmik", + "Banned users" : "Suhtluskeeluga kasutajad", + "Manage the list of banned users in this conversation." : "Halda suhtluskeeluga kasutajate loendit selles vestluses", + "Manage bans" : "Halda suhtluskeelde", + "No banned users" : "Suhtluskeeluga kasutajaid pole", + "Banned by:" : "Suhtluskeelu seadis:", + "Date:" : "Kuupäev:", + "Note:" : "Märkus:", + "Hide details" : "Peida üksikasjad", + "Show details" : "Näita üksikasju", + "Unban" : "Eemalda suhtluskeeld", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Sa võid pealkirja kirjeldust muuta {linkstart}Kalendris ↗{linkend}.", + "Error while updating conversation name" : "Viga vestluse nime uuendamisel", + "Error while updating conversation description" : "Viga vestluse kirjelduse uuendamisel", + "Enter a name for this conversation" : "Sisesta nimi selle vestluse jaoks", + "Edit conversation name" : "Muuda vestluse nime", + "Edit conversation description" : "Muuda vestluse kirjeldust", + "Enter a description for this conversation" : "Sisesta vestluse kirjeldus", + "Picture" : "Pilt", + "Disable" : "Lülita välja", + "Enable" : "Lülita sisse", + "The bot is not available anymore" : "See robot pole enam saadaval", + "Breakout rooms" : "Virtuaalsed töötoad", + "Manage breakout rooms" : "Halda virtuaalseid töötube", + "Set up breakout rooms for this conversation" : "Seadista selle vestluse jaoks virtuaalseid töötube", + "Please select a valid PNG or JPG file" : "Palun vali korrektne png või jpg fail", + "Choose your conversation picture" : "Vali oma vestluse pilt", + "Choose" : "Vali", + "Error setting conversation picture" : "Viga vestluse pildi lisamisel", + "Could not set the conversation picture: {error}" : "Vestluse pildi lisamine ei õnnestunud: {error}", + "Error cropping conversation picture" : "Viga vestluse pildi kadreerimisel", + "Error removing conversation picture" : "Viga vestluse pildi eemaldamisel", + "Set emoji as conversation picture" : "Lisa emoji vestluse pildiks", + "Set background color for conversation picture" : "Lisa taustavärv vestluse pildiks", + "Upload conversation picture" : "Laadi vestluse pilt üles", + "Choose conversation picture from files" : "Vali vestluse pilt galeriist", + "Remove conversation picture" : "Eemalda vestluse pilt", + "The file must be a PNG or JPG" : "Fail peab olema png või jpg vormingus", + "Set picture" : "Lisa pilt", + "Default permissions modified for {conversationName}" : "„{conversationName}“ vaikimisi õigused on muudetud", + "Could not modify default permissions for {conversationName}" : "„{conversationName}“ vaikimisi õigusi polnud võimalik muuta", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Muuda kasutajate vaikimisi õigusi siin vestluses. See ei mõjuuta moderaatorite õigusi.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Igal siin valikus õiguste muutmisel lähevad kaotsi senised kasutajakohased õiguste seadistused.", + "All permissions" : "Kõik õigused", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Osalejatel on õigus helistada, liituda kõnega, kasutada heli- ja videoedastust ning jagada oma ekraanivaadet.", + "Participants can use all available features." : "Osalejad saavad kasutada kõiki saadavalolevaid funktsionaalsusi.", + "Restricted" : "Piiratud", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Osalejatel on liituda kõnega, kuid ei saa kasutada heli- ja videoedastust ning jagada oma ekraanivaadet enne, kui moderaator on seda käsitsi lubanud.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Seni kuni moderaator pole käsitsi täiendavaid õigusi lisanud, saavad osalejad kasutada saadavalolevaid funktsionaalsusi osaliselt.", + "Advanced permissions" : "Täiendavad õigused", + "Edit permissions" : "Muuda õigusi", + "Conversation settings" : "Vestluse seadistused", + "Basic Info" : "Põhiteave", + "Personal" : "Isiklik", + "Moderation" : "Modereerimine", + "Setup overview" : "Seadistuse ülevaade", + "Live transcription" : "Ülestähendus reaalajas", + "Live transcriptions app is not installed" : "Reaalajas üleskirjutamise rakendus pole paigaldatud", + "Enable live transcription" : "Kasuta ülestähendamist reaalajas", + "Breakout Rooms" : "Virtuaalsed töötoad", + "Matterbridge" : "Matterbridge", + "Bots" : "Võrgurobotid", + "Danger zone" : "Ohtlik - siin ole ettevaatlik", + "Archive conversation" : "Arhiveeri vestlus", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Vaikimisi on arhiveeritud vestlused üldloendist peidetud. Nad on leitavad siis, kui otsid vestluse nime või avad arhiveeritud vestluste loendi.", + "Do you really want to leave \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoast lahkuda?", + "You can archive this conversation instead." : "Selle asemel võid antud vestluse arhiveerida.", + "Leave conversation" : "Lahku vestlusest", + "You need to promote a new moderator before you can leave the conversation" : "Pead määrama uue moderaatori enne siit vestlusest lahkumist", + "Delete conversation" : "Kustuta vestlus", + "Do you really want to delete \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoa kustutada?", + "Error while deleting conversation" : "Viga vestluse kustutamisel", + "Delete all chat messages" : "Kustuta kõik vestluse sõnumid", + "Do you really want to delete all messages in \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoast kõik vestlused kustutada?", + "Error while clearing chat history" : "Viga vestluse ajaloo kustutamisel", + "Be careful, these actions cannot be undone." : "Palun ole ettevaatlik - neid tegevusi ei saa tagasi pöörata.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Kui lahkud kinnisest vestlusest, siis vajad uuesti liitumiseks luba. Avatud vestlusega saad liituda omal äranägemisel.", + "Permanently delete this conversation." : "Kustuta see vestlus jäädavalt.", + "Delete chat messages" : "Kustuta vestluse sõnumid", + "Permanently delete all the messages in this conversation." : "Kustuta jäädavalt kõik selle vestluse sõnumid.", + "_%n hour_::_%n hours_" : ["%n tund","%n tundi"], + "_%n day_::_%n days_" : ["%n päev","%n päeva"], + "_%n week_::_%n weeks_" : ["%n nädal","%n nädalat"], + "Custom expiration time" : "Sinu valitud aegumine", + "Message expiration disabled" : "Sõnumi aegumine pole kasutusel", + "Message expiration set: {duration}" : "Sõnum aegub: {duration}", + "Error when trying to set message expiration" : "Viga sõnumi aegumise määramisel", + "Message expiration" : "Sõnumi aegumine", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Vestluse sõnumid saad määrata kustuma etteantud aja järel. Palun arvesta, et sel juhul vestluses jagatud failid jäävad omaniku jaoks nähtavaks, aga pole enam vestluse jaoks jagatud.", + "Set message expiration" : "Määra sõnumi aegumine", + "Current message expiration" : "Sõnumi aegumine", + "Password copied to clipboard" : "Salasõna on kopeeritud lõikelauale.", + "Password could not be copied" : "Salasõna ei õnnestunud lõikelauale kopeerida.", + "Guest access" : "Ligipääs külalistele", + "Breakout rooms are not allowed in public conversations." : "Virtuaalsed töötad pole avalike vestluste puhul lubatud.", + "Allow guests to join this conversation via link" : "Luba külalistel selle vestlusega lingi alusel liituda", + "Password protection" : "Kaitstud salasõnaga", + "This conversation is password-protected. Guests need password to join" : "See vestlus on kaitstud salasõnaga. Külalised vajavad liitumiseks salasõna", + "Password protection is needed for public conversations" : "Kaitstus salasõnaga on kohustuslik avalike vestluste puhul", + "Set a password" : "Lisa salasõna", + "Change password" : "Muuda salasõna", + "Enter new password" : "Sisesta uus salasõna", + "Save password" : "Salvesta salasõna", + "Copy password" : "Kopeeri salasõna", + "Guests are allowed to join this conversation via link" : "Külalised võivad selle vestlusega lingi alusel liituda", + "Guests are not allowed to join this conversation" : "Külalised ei või selle vestlusega liituda", + "Resend invitations" : "Saada kutsed uuesti", + "This conversation is open to both registered users and users created with the Guests app" : "Vestlus on avatud registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "This conversation is open to registered users" : "See vestlus on avatud registreeritud kasutajatele", + "This conversation is limited to the current participants" : "Vaid praegustel kasutajatel on ligipääs sellele vestlusele", + "You opened the conversation to both registered users and users created with the Guests app" : "Sina avasid vestluse nii registreeritud kasutajatele kui ka külaliste rakenduses lisatud kasutajatele", + "Error occurred when opening or limiting the conversation" : "Vestluse ligipääsu laiendamisel või kitsendamisel tekkis viga", + "Open conversation to registered users, showing it in search results" : "Ava vestlus registreeritud kasutajatele ning seega luba seda otsingutulemustes kuvada", + "Also open to users created with the Guests app" : "Lisaks on avatud külaliste rakenduses lisatud kasutajatele", + "Open conversation" : "Avatud vestlus", + "Set language spoken in calls" : "Määra vestlemisel kasutatav keel", + "Languages could not be loaded" : "Keelte laadimine ei õnnestunud", + "Loading languages …" : "Laadin keeli…", + "Invalid language" : "Vigane keel", + "Default language (English)" : "Vaikimisi keel (inglise keel)", + "Default live transcription language set" : "Reaalajas tehtava ülestähenduse vaikimisi keel on määratud", + "Live transcription language set: {languageName}" : "Reaalajas tehtava ülestähenduse vaikimisi keel on määratud kui: {languageName}", + "Error when trying to set live transcription language" : "Viga sõnumi reaalajas ülestähendamise keele määramisel", + "Start time: {date}" : "Algusaeg: {date}", + "Start time has been updated" : "Algusaeg on uuendatud", + "Error occurred while updating start time" : "Algusaja muutmisel tekkis viga", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ooteruumi sisselülitamine selle kõne jaoks eemaldab kõik tavakasutajad (i.e. kes pole moderaatorid) sellest pooleliolevast kõnest.", + "Enable lobby, restricting the conversation to moderators" : "Lülita sisse ooteruum ja piira osalemine vaid moderaatoritega", + "Meeting start time" : "Kohtumise algusaeg", + "Start time (optional)" : "Algusaeg (valikuline)", + "Import email participants" : "Impordi osalejate e-posti aadressid", + "You can import a list of email participants from a CSV file." : "Osalejate e-posti aadresse saad importida CSV-failist.", + "Poll drafts" : "Küsitluste kavandid", + "Browse poll drafts" : "Sirvi küsitluse kavandeid", + "Error occurred when locking the conversation" : "Vestluse lukustamisel tekkis viga", + "Error occurred when unlocking the conversation" : "Vestluse lukustuse eemaldamisel tekkis viga", + "Lock conversation" : "Lukusta vestlus", + "This will also terminate the ongoing call." : "See lõpetab ka poolelioleva kõne.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lukusta vestlus ja keela sellaga kõigil sõnumite saatmine ja kõnede alustamine", + "Edit" : "Muuda", + "More information" : "Lisateave", + "Delete" : "Kustuta", + "Add new bridged channel to current conversation" : "Lisa sellele vestlusele uus võrgusild", + "unknown state" : "Tundmatu olek", + "running" : "töötab", + "not running, check Matterbridge log" : "ei tööta, vaata Matterbridge'i logi", + "not running" : "ei tööta", + "Bridge saved" : "Võrgusild on salvestatud", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge võimaldab sul kasutada võrgusildu erinevate vestlusplatvormide vahel.", + "More info on Matterbridge" : "Lisateave Matterbridge'i võrgusilla kohta", + "Messaging systems" : "Sõnumisüsteemid", + "Enable bridge" : "Võta võrgusild kasutusele", + "Show Matterbridge log" : "Näita Matterbridge'i logi", + "Log content" : "Logi sisu", + "Only moderators are allowed to mention @all" : "Vaid moderaatoritel on võimalus mainida kõiki @all stiilis", + "All participants are allowed to mention @all" : "Kõikidel osalejatel on võimalus mainida kõiki @all stiilis", + "Participants are now allowed to mention @all." : "Osalejatel on võimalus mainida kõiki @all stiilis", + "Mentioning @all has been limited to moderators." : "Kõikide osalejate mainimine @all stiilis on lubatud vaid moderaatoritele.", + "Allow participants to mention @all" : "Luba osalejatel mainida kõiki @all stiilis", + "Mention permissions" : "Mainimiste õigused", + "Notifications" : "Teavitused", + "Notify about calls in this conversation" : "Teata kõnedest selles vestluses", + "Important conversation" : "Oluline vestlus", + "\"Do not disturb\" user status is ignored for important conversations" : "„Ära sega“ olek on oluliste vestluste puhul eiratud", + "Sensitive conversation" : "Vestlus tundlikul teemal", + "Message preview will be disabled in conversation list and notifications" : "Sõnumite eelvaated saava vestluste loendis ja teavitustes olema peidetud", + "Recording consent is required for calls in this conversation" : "Selle vestluse kõnede puhul on vajalik, et nõustud salvestamisega", + "Recording consent is not required for calls in this conversation" : "Selle vestluse kõnede puhul pole vajalik, et nõustud salvestamisega", + "Recording consent requirement was updated" : "Salvestamisega nõustumise nõue on uuendatud", + "Error occurred while updating recording consent" : "Salvestamisega nõustumise nõude uuendamisel tekkis viga", + "Recording Consent" : "Nõusolek salvestamisega", + "Recording consent cannot be changed once a call or breakout session has started." : "Peale kõne algust või virtuaalse töötoa sessiooni algust ei saa salvestamise nõusolekut enam muuta.", + "Require recording consent before joining call in this conversation" : "Selle vestlusega liitumisel eelda nõustumist salvestamisega", + "Recording consent is required for all calls" : "Kõnega liitumiseks on vajalik, et nõustud salvestamisega", + "SIP dial-in is now possible without PIN requirement" : "SIP-protokolli alusel on nüüd võimalik sisse helistada ilma PIN-koodi kasutamata", + "SIP dial-in is now enabled" : "SIP-i põhise sissehelistamisvõimalus on nüüd kasutusel", + "SIP dial-in is now disabled" : "SIP-i põhise sissehelistamisvõimalus pole enam kasutusel", + "Error occurred when enabling SIP dial-in" : "SIP-i põhise sissehelistamisvõimaluse kasutuselevõtmisel tekkis viga", + "Error occurred when disabling SIP dial-in" : "SIP-i põhise sissehelistamisvõimaluse kasutuselt eemaldamisel tekkis viga", + "Phone and SIP dial-in" : "Sissehelistamine tavatelefoni ja SIP-liidestusega", + "Enable phone and SIP dial-in" : "Luba sissehelistamist tavatelefoni ja SIP-liidestusega", + "Allow to dial-in without a PIN" : "Luba sissehelistamise võimalus ilma PIN-koodita", + "Ongoing" : "Toimumas", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n kasutaja võtis vastu","%n kasutajat võtsid vastu"], + "_%n person declined_::_%n people declined_" : ["%n kasutaja keeldus","%n kasutajat keeldusid"], + "_and %n other attachment_::_and %n other attachments_" : ["ja %n muu manus","ja %n muud manust"], + "With {displayName}" : "{displayName} kasutajaga", + "In {conversation}" : "{conversation} vestluses", + "View attachment" : "Vaata manust", + "Join" : "Liitu", + "View conversation" : "Vaata vestlust", + "View event on Calendar" : "Vaata sündmust kalendris", + "Error while creating the conversation" : "Viga vestluse loomisel", + "Hello, {displayName}" : "Tere, {displayName}", + "Start meeting now" : "Alusta kohtumist nüüd", + "Give your meeting a title" : "Lisa kohtumisele pealkiri", + "Create and copy link" : "Loo ja kopeeri link", + "Create a new conversation" : "Loo uus vestlus", + "Join open conversations" : "Liitu avalike vestlustega", + "Call a phone number" : "Helista telefonile", + "Scroll backward" : "Keri tagasi", + "Scroll forward" : "Keri edasi", + "Schedule meetings" : "Ajasta kohtumisi", + "You don't have any upcoming meetings" : "Sul pole tulekul kohtumisi", + "Calendar events with a conversation link as the location are shown here" : "Kui nad märgivad asukohta, siis vestluslingiga kalendrisündmused näidatakse siin", + "Open calendar" : "Ava kalender", + "Unread mentions" : "Lugemata mainimised", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Siin saavad olema nähtaval sõnumid, kus sind on mainitud. Selleks pead nende nime ette lisama @-märgi.", + "Upcoming reminders" : "Järgmised meeldetuletused", + "Message reminders" : "Sõnumite meeldetuletused", + "Set a reminder on a message to be notified" : "Lisa meeldetuletus hilisemaks teavituseks", + "Start a group conversation" : "Alusta rühmavestlust", + "Create conversation" : "Loo vestlus", + "Enter your name" : "Sisesta oma nimi", + "Submit name and join" : "Sisesta nimi ja liitu", + "Do you already have an account?" : "Kas sul juba on kasutajakonto olemas?", + "Log in" : "Logi sisse", + "Error while verifying uploaded file" : "Viga üleslaaditud faili kontrollimisel", + "Uploaded file is verified" : "Üleslaaditud fail on kontrollitud", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Sisuvorming on tavaline CSV-fail, kus komad on väljade eraldajateks:
- Päiserida on nõutav ja peab olema kas\"name\",\"email\" või lihtsalt \"email\"
- Sisus peab olema üks kirje rea kohta (nt. \"Kadri Maasikas\",\"kadri@torefirma.ee\")", + "Participants added successfully" : "Osalejate lisamine õnnestus", + "Error while adding participants" : "Viga osalejate lisamisel", + "Import a file" : "Impordi failist", + "Browse" : "Sirvi", + "Verifying uploaded file …" : "Kontrollin üleslaaditud faili…", + "This might take a moment" : "Selleks võib kuluda mõni hetk", + "Send invitations" : "Saada kutseid", + "_%n invalid email_::_%n invalid emails_" : ["%n vigane e-posti aadress","%n vigast e-posti aadressi"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-posti aadress on juba imporditud või on topeltkirje","%n e-posti aadressi on juba imporditud või on topeltkirjed"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Võid saata %n kutse","Võid saata %n kutset"], + "An error occurred while calling a phone number" : "Helistamisel telefoninumbrile tekkis viga", + "Phone number could not be called: {error}" : "Sellele telefoninumbrile polnud võimalik helistada: {error}", + "Phone number could not be called" : "Sellele telefoninumbrile polnud võimalik helistada", + "Search participants or phone numbers" : "Otsi osalejaid või telefoninumbreid", + "Creating the conversation …" : "Loon vestlust…", + "Mark as read" : "Märgi loetuks", + "Mark as unread" : "Märgi mitteloetuks", + "Remove from favorites" : "Eemalda lemmikutest", + "Add to favorites" : "Lisa lemmikutesse", + "Unarchive conversation" : "Võta vestlus arhiivist välja", + "Ignore \"Do not disturb\"" : "Eira „Ära sega“ olekut", + "You need to promote a new moderator before you can leave the conversation." : "Pead määrama uue moderaatori enne siit vestlusest lahkumist.", + "Conversation actions" : "Toimingud vestlusega", + "Notify about calls" : "Teavita kõnedest", + "Hide message text" : "Peida sõnumi tekst", + "Pending invitations" : "Ootel kutsed", + "Join conversations from other servers" : "Liitu vestlustega teistes serverites", + "From {user} at {remoteServer}" : "Kasutajalt {user} serveris {remoteServer}", + "Decline invitation" : "Lükka kutse tagasi", + "Accept invitation" : "Võta kutse vastu", + "No pending invitations" : "Ootel kutseid pole", + "Home" : "Avaleht", + "Unread" : "Lugemata", + "Mentions" : "Mainimised", + "Meetings" : "Kohtumised", + "Sort conversations" : "Järjesta vestlusi", + "By recent activity" : "Hiljutise tegevuse alusel", + "Alphabetically" : "Tähestiku järjekorras", + "Do not group by type" : "Ära rühmita tüübi alusel", + "Show private ones first" : "Esmalt näita privaatseid", + "Show group ones first" : "Esmalt näita rühma omi", + "No followed threads" : "Jälgitavaid jutulõngu pole", + "No matches found" : "Vasteid ei leidu", + "No conversations found" : "Vestlusi ei leidu", + "You have no archived conversations." : "Sul pole arhiveeritud vestlusi.", + "Subscribe to an existing thread or start your own." : "Alusta olemasoleva jutulõnga jälgimist või koosta enda oma.", + "You have no unread mentions." : "Sul pole lugemata mainimisi.", + "You have no unread messages." : "Sul pole lugemata sõnumeid.", + "An error occurred while performing the search" : "Otsimisel tekkis viga", + "Conversation list" : "Vestluste loend", + "Filter conversations by" : "Filtreeri vestlusi", + "Unread messages" : "Lugemata sõnumid", + "Meeting conversations" : "Kohtumiste vestlused", + "Clear filters" : "Eemalda filtrid", + "New personal note" : "Uus isiklik märge", + "SIP backend is not installed" : "SIP-i taustateenus pole paigaldatud", + "Back to conversations" : "Tagasi vestluste juurde", + "Archived conversations" : "Arhiveeritud vestlused", + "Threads" : "Jutulõngad", + "Clear filter" : "Tühjenda filter", + "Show more threads" : "Näita veel jutulõngu", + "App settings" : "Rakenduse seadistused", + "Users" : "Kasutajad", + "Groups" : "Grupid", + "Teams" : "Tiimid", + "Federated users" : "Kasutajad liitpilves", + "New private conversation" : "Uus privaatne vestlus", + "Other sources" : "Muud allikad", + "Open conversations" : "Avatud vestlused", + "No search results" : "Otsingul pole tulemusi", + "Users, groups and teams" : "Kasutajad, grupid ja tiimid", + "Users and groups" : "Kasutajad ja grupid", + "Users and teams" : "Kasutajad ja tiimid", + "Groups and teams" : "Grupid ja tiimid", + "New group conversation" : "Uus grupivestlus", + "The meeting will start soon" : "Kohtumine algab varsti", + "This meeting is scheduled for {startTime}" : "Selle kohtumise algusaeg on {startTime}", + "You are currently waiting in the lobby" : "Sa asud hetkel ooteruumis", + "Enable noise suppression" : "Lülita müra summutamine sisse", + "Reduce background noises for better voice quality" : "Parema helikvaliteedi nimel vähenda taustamüra", + "Enable echo cancellation" : "Lülita kaja summutamine sisse", + "Minimize echo effect from own surrounding" : "Vähenda enda ümbruskonnast tulenevat kajaefekti", + "Enable auto gain control" : "Lülita automaatne võimenduse reguleerimine sisse", + "Dynamically adjust microphone volume for consistent level" : "Mikrofoni helivaljuse dünaamiline reguleerimine ühtlase taseme saavutamiseks", + "Select microphone" : "Vali mkrofon", + "No microphone available" : "Ühtegi mikrofoni pole saadaval", + "Select speaker" : "Vali kõlar", + "No speaker available" : "Kõlarit pole saadaval", + "Select camera" : "Vali kaamera", + "No camera available" : "Ühtegi kaamerat pole saadaval", + "Select a device" : "Vali seade", + "Playing …" : "Esitamisel…", + "Test speakers" : "Testi kõlareid", + "Test" : "Katseta", + "Devices" : "Seadmed", + "Backgrounds" : "Taustad", + "No audio" : "Heli puudub", + "No camera" : "Kaamerat pole", + "Display video as you will see it (mirrored)" : "Näita videot nii, nagu sina seda näed (peegelpildis)", + "Display video as others will see it" : "Näita videot nii, nagu teised seda näevad", + "Calls are not supported in your browser" : "Kõned pole sinu veebibrauseris toetatud", + "Access to microphone is only possible with HTTPS" : "Ligipääs mikrofonile toimib vaid siis, kui kasutusel on https-protokoll", + "Access to microphone was denied" : "Ligipääs mikrofonile on keelatud", + "Error while accessing microphone" : "Viga ligipääsul mikrofonile", + "Access to camera is only possible with HTTPS" : "Ligipääs kaamerale toimib vaid siis, kui kasutusel on https-protokoll", + "The call is being recorded." : "See kõne salvestatakse.", + "The call might be recorded." : "Kõne võib olla salvestatud.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Salvestuses võib olla kuulda sinu häält, pilti sinu kaamerast ja ekraanivaatest. Enne kõnega liitumist on vajalik sinu nõusolek.", + "Give consent to the recording of this call" : "Nõustu selle kõne salvestamisega", + "Show more info" : "Näita lisateavet", + "Audio is not available" : "Heliedastus pole saadaval", + "Video is not available" : "Videoedastus pole saadaval", + "Start recording immediately with the call" : "Alusta salvestamist koos kõne alustamisega", + "Recording backend is not installed" : "Salvestamise taustateenus pole paigaldatud", + "Notify all participants about this call" : "Teavita sellest kõnest kõiki osalejaid", + "Apply settings" : "Rakenda seadistused", + "Select virtual office background" : "Vali virtuaalne kontroritaust", + "Select virtual home background" : "Vali virtuaalne kodutaust", + "Select virtual abstract background" : "Vali virtuaalne abstraktne taust", + "Select virtual beach background" : "Vali virtuaalne rannataust", + "Select virtual park background" : "Vali virtuaalne pargitaust", + "Select virtual theater background" : "Vali virtuaalne teatritaust", + "Select virtual library background" : "Vali virtuaalne raamatukogu taust", + "Select virtual space station background" : "Vali virtuaalne kosmosejaama taust", + "Error while uploading the file" : "Viga faili üles laadimisel.", + "Select a file" : "Vali fail", + "Invalid path selected" : "Vigane asukoht on valitud", + "Select virtual background from file {fileName}" : "Vali virtuaalne taust failist „{fileName}“", + "Blur" : "Hägusus", + "Upload" : "Laadi üles", + "Files" : "Failid", + "(editing)" : "(muutmisel)", + "(edited)" : "(muudetud)", + "The message has expired or has been deleted" : "See sõnum on kas aegunud või kustutatud", + "Cancel quote" : "Loobu tsiteerimisest", + "24 hours" : "24 tundi", + "7 days" : "7 päeva", + "30 days" : "30 päeva", + "Until unpin" : "Kuni esiletõstmise lõpetamiseni", + "Clear reminder – {timeLocale}" : "Eemalda meeldetuletus – {timeLocale}", + "Edited by {actor}" : "{actor} muutis sõnumit", + "Pinned by you" : "Esiletõstetud sinu poolt", + "Pinned by {actor}" : "Esiletõstja: {actor}", + "Until {absoluteDate}" : "Kuni {absoluteDate}", + "Message text copied to clipboard" : "Sõnumi tekst on kopeeritud lõikelauale", + "Message text could not be copied" : "Sõnumi teksti kopeerimine ei õnnestunud", + "Message forwarded to \"Note to self\"" : "Sõnum on edastatud vestlusesse „Minu märkmed“", + "Error while forwarding message to \"Note to self\"" : "Viga sõnumi edastatamisel vestlusesse „Minu märkmed“", + "A reminder was successfully removed" : "Meeldetuletuse eemaldamine õnnestus", + "Error occurred when removing a reminder" : "Meeldetuletuse eemaldamisel tekkis viga", + "A reminder was successfully set at {datetime}" : "Meeldetuletuse ajastamine õnnestus: {datetime}", + "Error occurred when creating a reminder" : "Meeldetuletuse loomisel tekkis viga", + "Add a reaction to this message" : "Reageeri sellele sõnumile", + "Reply" : "Vasta", + "More actions" : "Täiendavad tegevused", + "Set reminder" : "Lisa meeldetuletus", + "Pin message" : "Tõsta sõnum esile", + "Unpin message" : "Lõpeta sõnumi esiletõstmine", + "Reply privately" : "Vasta privaatselt", + "Edit message" : "Muuda sõnumit", + "Copy message" : "Kopeeri sõnum", + "Copy message link" : "Kopeeri sõnumi link", + "Go to file" : "Mine faili juurde", + "Download file" : "Laadi fail alla", + "Go to thread" : "Ava jutulõng", + "Edit thread details" : "Muuda jutulõnga üksikasju", + "Forward message" : "Edasta sõnum", + "Translate" : "Tõlgi", + "Set custom reminder" : "Lisa enda valitud meeldetuletus", + "Keep pinned for" : "Hoia esiletõstetuna", + "Set custom period" : "Sisesta oma ajavahemik", + "Close reactions menu" : "Sulge reakstioonide menüü", + "React with {emoji}" : "Reageeri {emoji} emojiga", + "React with another emoji" : "Reageeri mõne muu emojiga", + "Choose a conversation to forward the selected message." : "Vali vestlus, kuhu soovid sõnumit edastada.", + "Error while forwarding message" : "Viga sõnumi edastamisel", + "The message has been forwarded to {selectedConversationName}" : "See sõnum on edastatud vestlusesse „{selectedConversationName}“", + "Dismiss" : "Jäta vahele", + "Go to conversation" : "Mine vestluse juurde", + "Detect language" : "Tuvasta keel", + "The message could not be translated" : "E-kirja tõlkimine ei õnnestunud", + "Translation copied to clipboard" : "Tõlge on kopeeritud lõikelauale", + "Translation could not be copied" : "Tõlke kopeerimine ei õnnestunud", + "Translate message" : "Tõlgi e-kiri", + "Source language to translate from" : "Tõlke lähtekeel", + "Translate from" : "Lähtekeel tõlkimisel", + "Target language to translate into" : "Sihtkeel tõlkimisel", + "Translate to" : "Tõlke sihtkeel", + "Translating" : "Tõlkimisel", + "This translation is AI generated and may contain mistakes." : "See tõlge on tehisaru koostatud ja võib sisaldada vigu.", + "Copy translated text" : "Kopeeri tõlgitud tekst", + "Error when scheduling the message" : "Viga sõnumi ajastamisel", + "Reschedule" : "Muuda ajastamist", + "Send now" : "Saada kohe", + "Choose a time" : "Vali aeg", + "Send at custom time" : "Saada sinu valitud ajal", + "Will be sent without notification" : "Saadetakse ilma täiendava teavituseta", + "Message read by everyone who shares their reading status" : "Sõnum on loetud kõigi poolt, kes jagab oma lugemisteatisi", + "Message sent" : "Sõnum on saadetud", + "Sent without notification" : "Saadetud ilma teavituseta", + "Deleting message" : "Sõnum on kustutamisel", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Sõnumi kustutamine õnnestus, aga kasutusel on võrgurobot või Matterbridge'i võrgusild ja sõnum võib juba olla teistele vestlusteenustele edasi saadetud", + "Message deleted successfully" : "Sõnumi kustutamine õnnestus", + "Message could not be deleted because it is too old" : "Kuna sõnum on liiga vana, siis teda ei saa kustutada", + "Only normal chat messages can be deleted" : "Kustutada saad vaid vestluste tavasõnumeid", + "An error occurred while deleting the message" : "Sõnumi kustutamisel tekkis viga", + "Pinned" : "Esiletõstetud", + "Your browser does not support playing audio files" : "Su brauser ei toeta helifailide esitamist", + "Contact" : "Kontakt", + "{stack} in {board}" : "„{stack}“ kasutaja „{board}“ kõnes", + "Deck Card" : "Kanbani kaart", + "Remove {fileName}" : "Eemalda fail: „{fileName}“", + "Open this location in OpenStreetMap" : "Ava see asukoht OpenStreetMapis", + "_%n reply_::_%n replies_" : ["%n vastus","%n vastust"], + "Sending message" : "Saadan sõnumit", + "Failed to send the message. Click to try again" : "Sõnumi saatmine ei õnnestunud. Uuesti proovimiseks klõpsi", + "Not enough free space to upload file" : "Faili üleslaadimiseks pole piisavalt vaba ruumi", + "You cannot send messages to this conversation at the moment" : "Sa ei saa siin vestluses hetkel sõnumeid koostada", + "Could not update the message" : "Sõnumit polnud võimalik uuendada", + "Reply to thread \"{threadTitle}\"" : "Vasta „{threadTitle}“ jutulõngas", + "_You voted • %n vote_::_You voted • %n votes_" : ["Sa oled hääletanud • %n hääl","Sa oled hääletanud • %n häält"], + "You voted" : "Sa oled hääletanud", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Hääletamiseks klõpsa • %n hääl","Hääletamiseks klõpsa • %n häält"], + "Click to vote" : "Hääletamiseks klõpsa", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Küsitluse kavand • %n küsimus","Küsitluse kavand • %n küsimust"], + "_%n vote_::_%n votes_" : ["%n hääl","%n häält"], + "Edit poll draft" : "Muuda küsitluse kavandit", + "Delete poll draft" : "Kustuta küsitluse kavand", + "Open poll" : "Avalik küsitlus", + "Closed poll" : "Hääletus on lõppenud", + "See results" : "Vaata tulemusi", + "Reactions" : "Reageerimised", + "No permission to post reactions in this conversation" : "Pole õigust selles vestluses reageerida", + "and {participant}" : "ja {participant}", + "_and %n other participant_::_and %n other participants_" : ["ja %n muu osaleja","ja %n muud osalejat"], + "Show all reactions" : "Näita kõiki reaktsioone", + "Add more reactions" : "Lisa veel reaktsioone", + "Show or collapse system messages" : "Näita süsteemi sõnumeid või peida nad", + "No messages" : "Sõnumeid pole", + "All messages have expired or have been deleted." : "Kõik sõnumid on kas aegunud või kustutatud", + "Generate summary with AI" : "Koosta kokkuvõte tehisaru abil", + "{author} (pinned by you)" : "{author} (esiletõstetud sinu poolt)", + "{author} (pinned by {actor})" : "{author} ({actor} tõstis esile)", + "Unpin" : "Lõpeta esiletõstmine", + "Cancel search" : "Katkesta otsing", + "Add a phone number" : "Lisa telefoninumber", + "Error: A password is required to create the conversation." : "Viga: vestluse loomiseks on vajalik salasõna", + "All set, the conversation \"{conversationName}\" was created." : "Kõik on tehtud ja „{conversationName}“ vestus sai loodud.", + "Create a new group conversation" : "Loo uus vestlusgrupp", + "Add participants" : "Lisa osalejaid", + "Maximum length exceeded ({maxlength} characters)" : "Maksimaalne lubatud pikkus on ületatud ({maxlength} tähemärki)", + "Conversation type" : "Vestluse tüüp", + "Conversation visibility" : "Vestluse nähtavus", + "Allow guests to join via link" : "Luba külalistel lingi alusel liitumist", + "Enter password" : "Sisesta salasõna", + "This conversation has been locked" : "See vestlus on lukustatud", + "No permission to post messages in this conversation" : "Pole õigust siia vestlusesse sõnumeid saata", + "Joining conversation …" : "Liitun vestlusega…", + "Write a message without notification" : "Koosta sõnum ilma teavituseta", + "Create a thread silently" : "Alusta jutulõnga vaikselt", + "Create a thread" : "Alusta jutulõnga", + "Send message silently" : "Saada sõnum vaikselt", + "Send message" : "Saada sõnum", + "Send without notification" : "Saada ilma teavituseta", + "The participant will not be notified about new messages" : "Osaleja ei saa teavitust uute sõnumite kohta", + "Participants will not be notified about new messages" : "Osalejad ei saa teavitust uute sõnumite kohta", + "Message will be sent {datetimeString}" : "Sõnum saadetakse {datetimeString}", + "Thread title is required" : "Jutulõngal peab olema nimi", + "Message text is required" : "Sõnumi sisu on nõutav", + "The message could not be edited" : "Sõnumi muutmine ei õnnestunud", + "File to share" : "Jagatav fail", + "File upload is not available in this conversation" : "Siia vestlusesse ei saa faile üles laadida", + "Message was successfully scheduled" : "Sõnumi ajastamine õnnestus", + "Add emoji" : "Lisa emoji", + "Adding a mention will only notify users who did not read the message." : "Mainimise lisamine teavitab vaid neid kasutajaid, kes veel pole seda sõnumit lugenud.", + "Thread title" : "Jutulõnga pealkiri", + "Send later" : "Saada hiljem", + "Show scheduled messages" : "Näita ajastatud sõnumeid", + "Cancel editing" : "Katkesta muutmine", + "Schedule message" : "Ajasta sõnum", + "{user} is out of office and might not respond." : "{user} pole kohal ja ei pruugi vastata.", + "Absence period: {startDate} - {endDate}" : "Äraoleku ajavahemik: {startDate} - {endDate}", + "Replacement:" : "Asendus:", + "Share from {nextcloud}" : "Jaga teenusest {nextcloud}", + "Share from Files" : "Jaga failirakendusest", + "Share files to the conversation" : "Jaga vestlusesse faile", + "Upload from device" : "Laadi üles seadmest", + "Create new poll" : "Loo uus küsitlus", + "Smart picker" : "Nutivalija", + "Record voice message" : "Salvesta häälsõnum", + "End recording and send" : "Lõpeta salvestamine ja saada", + "Dismiss recording" : "Loobu salvestamisest", + "Access to the microphone was denied" : "Ligipääs mikrofonile on keelatud", + "Microphone either not available or disabled in settings" : "Mikrofoni kas pole olemas või ta on seadistustest välja lülitatud", + "Error while recording audio" : "Viga heli salvestamisel", + "Voice message {time} ({conversation})" : "Häälsõnum {time} ({conversation})", + "Generating summary of unread messages …" : "Koostan lugemata sõnumite ülevaadet…", + "Summary is AI generated and might contain mistakes" : "See kokkuvõte on tehisaru koostatud ja võib sisaldada vigu.", + "Error occurred during a summary generation" : "Kokkuvõtte koostamisel tekkis viga", + "New file" : "Uus fail", + "Blank" : "Tühi", + "Error while creating file" : "Viga faili loomisel", + "Create and share a new file" : "Loo uus fail ning jaga teda", + "Name of the new file" : "Uue faili nimi", + "Create file" : "Loo uus fail", + "Someone is typing …" : "Keegi kirjutab…", + "{user1} is typing …" : "{user1} kirjutab…", + "{user1} and {user2} are typing …" : "{user1} ja {user2} kirjutavad…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ja {user3} kirjutavad…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ja veel %n kasutaja kirjutavad…","{user1}, {user2}, {user3} ja veel %n kasutajat kirjutavad…"], + "Add more files" : "Lisa veel faile", + "Send" : "Saada", + "In this conversation {user} can:" : "Selles vestluses „{user}“ kasutaja saab:", + "Edit default permissions for participants in {conversationName}" : "Muuda kasutajate vaikimisi õigusi vestluses {conversationName}", + "Start a call" : "Helista", + "Skip the lobby" : "Jäta ooteruum vahele", + "Can post messages" : "Võib postitada", + "Can post messages and reactions" : "Võib koostada sõnumeid ja neile reageerida", + "Can add reactions" : "Võib reageerida", + "Enable the microphone" : "Lülita mikrofon sisse", + "Enable the camera" : "Lülita kaamera sisse", + "Share the screen" : "Jagada ekraani", + "Update permissions" : "Uuendada õigusi", + "Updating permissions" : "Õigused on uuendamisel", + "No poll drafts" : "Küsitluste kavandeid pole", + "There is no poll drafts yet saved for this conversation" : "Selle vestluse jaoks pole veel küsitluste kavandeid salvestatud", + "Create poll in {name}" : "Loo siin küsitlus: {name}", + "Create poll" : "Loo küsitlus", + "Error while importing poll" : "Viga küsitluse importimisel", + "Question" : "Küsimus", + "Ask a question" : "Küsi", + "Import draft from file" : "Impordi kavand failist.", + "Answers" : "Vastused", + "Answer {option}" : "{option}. vastus", + "Delete poll option" : "Kustuta küsitluse valik", + "Add answer" : "Lisa vastus", + "Settings" : "Seadistused", + "Anonymous poll" : "Anonüümne küsitlus", + "Multiple answers" : "Mitu vastust", + "Save as draft" : "Salvesta kavandina", + "Export draft to file" : "Ekspordi kavand faili.", + "_Final results • %n vote_::_Final results • %n votes_" : ["Lõpptulemused • %n hääl","Lõpptulemused • %n häält"], + "Your vote is anonymous" : "Sinu hääl on anonüümne", + "You voted for this option" : "Sina hääletasid selle eelistuse poolt", + "End poll" : "Lõpeta küsitlus", + "Change your vote" : "Muuda oma häält", + "Withdraw vote" : "Võta antud hääl tagasi", + "Results" : "Tulemused", + "Download as spreadsheet" : "Laadi alla andmetabelina", + "Download as CSV" : "Laadi CSV-failina", + "Voted participants" : "Hääletanud osalejad", + "Send a message to \"{roomName}\"" : "Saada sõnum „{roomName}“ jututuppa", + "Hide list of participants" : "Peida osalejate loend", + "Show list of participants" : "Näita osalejate loendit", + "Assistance requested in {roomName}" : "Abi on vajalik „{roomName}“ jututoas", + "The message was sent to \"{roomName}\"" : "Sõnum on saadetud „{roomName}“ jututuppa", + "Dismiss request for assistance" : "Loobu abipäringust", + "Send message to room" : "Saada sõnum jututuppa", + "Back to main room" : "Tagasi põhilisse jututuppa", + "Back to your room" : "Tagasi sinu jututuppa", + "Message all rooms" : "Saada sõnum kõikidesse jututubadesse", + "Start session" : "Alusta sessiooni", + "Start a call before you start a breakout room session" : "Enne virtuaalse töötoa käivitamist pead kõne algatama", + "Stop session" : "Lõpeta sessioon", + "The message was sent to all breakout rooms" : "Sõnum on saadetud kõikidesse virtuaalsetesse töötubadesse", + "Send a message to all breakout rooms" : "Saada sõnum kõikidesse virtuaalsetesse töötubadesse", + "Breakout rooms are not started" : "Virtuaalsed töötoad pole veel käivitatud", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Kõned, kus pole kasutusel suure jõudlusega taustateenust, võivad põhjustada osalevates seadmetes ühendusprobleeme ja suurt koormust. {linkstart}Lisateave{linkend}", + "Talk setup incomplete" : "Talk kõnerakenduse paigaldus on poolik", + "Disable lobby" : "Lülita ooteruumi kasutamine välja", + "Settings for participant \"{user}\"" : "Osaleja „{user}“ seadsitused", + "Participant \"{user}\"" : "Osaleja „{user}“", + "moderator" : "moderaator", + "bot" : "robot", + "guest" : "külaline", + "Ringing …" : "Heliseb…", + "Call rejected" : "Kõne jäi vastu võtmata", + "{time} talking …" : "kestus {time}…", + "{time} talking time" : "kõneaeg {time}", + "Raised their hand" : "Andis käega märku", + "Joined with video" : "Liitus videovaatega", + "Joined via phone" : "Liitus telefonist", + "Joined with audio" : "Liitus vaid heliga", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Hetkel on teksti pikkus {charactersCount} tähemärki, kuid ta peaks olema sama või vähem kui {maxLength} tähemärki pikk. ", + "Remove group and members" : "Eemalda gruppe ja liikmeid", + "Remove team and members" : "Eemalda tiime ja liikmeid", + "Remove participant" : "Eemalda osaleja", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ grupi koos oma liikmetega sellest vestlusest?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ tiimi koos oma liikmetega sellest vestlusest?", + "Do you really want to remove {displayName} from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ sellest vestlusest?", + "Notification was sent to {displayName}" : "Teavitus on saadetud kasutajale {displayName}", + "Could not send notification to {displayName}" : "Ei õnnestunud saata teavitust kasutajale {displayName}", + "Permissions granted to {displayName}" : "Õigused on antud kasutajale {displayName}", + "Could not modify permissions for {displayName}" : "„{displayName}“ õigusi ei õnnestunud muuta", + "Permissions removed for {displayName}" : "Õigused on eemaldatud kasutajalt {displayName}", + "Permissions set to default for {displayName}" : "Vaikimisi õigused „{displayName}“ jaoks", + "Phone number could not be hung up" : "Kõne lõpetamine ei õnnestunud", + "Phone number could not be put on hold" : "Telefoninumbri ootele panek ei õnnestunud", + "Phone number could not be muted" : "Telefoninumbri summutamine ei õnnestunud", + "Phone number could not be unmuted" : "Telefoninumbri summutamise lõpetamine ei õnnestunud", + "DTMF message could not be sent" : "DTMF sõnumi saatmine ei õnnestunud", + "Phone number copied to clipboard" : "Telefoninumber on lõikelauale kopeeritud", + "Phone number could not be copied" : "Telefoninumbri kopeerimine ei õnnestunud", + "in the lobby" : "ooteruumis", + "Dial out phone" : "Telefon väljahelistamiseks", + "Hang up phone" : "Lõpeta kõne", + "Move back to lobby" : "Suundu tagasi ooteruumi", + "Move to conversation" : "Teisalda vestlusesse", + "Dial-in PIN" : "Sissehelistamisteenuse PIN-kood", + "Demote from moderator" : "Võta moderaatori õigused ära", + "Promote to moderator" : "Määra moderaatoriks", + "Resend invitation" : "Saada kutse uuesti", + "Send call notification" : "Saada kõneteavitus", + "Dial out phone number" : "Väljahelistamisteenuse number", + "Resume call for phone number" : "Jätka telefoninumbri kõnet", + "Put phone number on hold" : "Pane telefoninumber ootele", + "Unmute phone number" : "Lõpeta telefoninumbri summutamine", + "Mute phone number" : "Summuta telefoninumber", + "Copy phone number" : "Kopeeri telefoninumber", + "Reset custom permissions" : "Lähtesta kohandatud õigused", + "Grant all permissions" : "Annada kõik õigused", + "Remove all permissions" : "Eemaldada kõiki õigused", + "Also ban from this conversation" : "Samaga sea suhtluskeeld siin vestluses", + "Internal note (reason to ban)" : "Sisemine märge (suhtluskeelu põhjus)", + "Remove" : "Eemalda", + "Permissions modified for {displayName}" : "„{displayName}“ õigused on muudetud", + "Add users, groups or teams" : "Lisa kasutajaid, gruppe või tiime", + "Add users or groups" : "Lisa kasutajaid või gruppe", + "Add users or teams" : "Lisa kasutajaid või tiime", + "Add users" : "Lisa kasutajaid", + "Add groups or teams" : "Lisa gruppe või tiime", + "Add groups" : "Lisa gruppe", + "Add teams" : "Lisa tiime", + "Add other sources" : "Lisa veel allikaid", + "Add emails" : "Lisa e-posti aadresse", + "Integrations" : "Lõimingud", + "Add federated users" : "Lisa kasutajaid liitpilvest", + "Searching …" : "Otsin ...", + "Search for more users" : "Otsi veel kasutajaid", + "You can search or add participants via name, email, or Federated Cloud ID" : "Sa võid otsida või lisada osalejaid nime, e-posti aadressi või kasutajatunnuse alusel liitpilves", + "Search or add participants" : "Otsi või lisa osalejaid", + "Invitation was sent to {actorId}" : "Kutse on saadetud kasutajale {actorId}", + "An error occurred while adding the participants" : "Osalejate lisamisel tekkis viga", + "A new group conversation with selected participant will be created" : "Järgnevaga luuakse valitud osalejaga uus rühmavestlus", + "Participants" : "Osalejad", + "Pinned by a deleted user" : "Esiletõstetud kustutatud kasutaja poolt", + "Participants ({count})" : "Osalejad ({count})", + "Open chat" : "Ava vestlus", + "You have new unread messages in the chat." : "Sul on vestluses uusi lugemata sõnumeid", + "You have been mentioned in the chat." : "Sind on vestluses mainitud", + "Search messages" : "Otsi sõnumeid", + "Chat" : "Vestle", + "Details" : "Üksikasjad", + "Shared items" : "Jagatud objektid", + "Search in {name}" : "Otsi siin: {name}", + "Threads in {name}" : "Jutulõngad: {name}", + "{actor} in {conversation}" : "{actor} vestluses „{conversation}“", + "Search messages …" : "Otsi sõnumeid…", + "Search options" : "Otsinguvalikud", + "From User" : "Kasutajalt", + "Since" : "Alates", + "Until" : "Kuni", + "No results found" : "Otsingutulemusi ei leidu", + "Load more results" : "Laadi veel tulemusi", + "Recent threads" : "Hiljutised jutulõngad", + "Projects" : "Projektid", + "No shared items" : "Jaosmeediat ei leidu", + "Thread notifications" : "Jutulõngade teavitused", + "Thread actions" : "Tegevused jutulõngaga", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link vestlusele", + "No open conversations found" : "Avalikke vestlusei ei leidu", + "Either there are no open conversations or you joined all of them." : "Avalikke vestlusi ei leidu või sa oled kõikide nendega juba liitunud.", + "Check spelling or use complete words." : "Palun kontrolli õigekirja või kasuta terveid sõnu.", + "Search conversations or users" : "Otsi vestlusi või kasutajaid", + "Select conversation" : "Vali vestlus", + "Number length is not valid" : "Numbri pikkus pole korrektne", + "Region code is not valid" : "Suunanumber pole korrektne", + "Number length is too short" : "Numbri pikkus on liiga väike", + "Number length is too long" : "Numbri pikkus on liiga suur", + "Number is not valid" : "Number pole korrektne", + "Phone numbers" : "Telefoninumbrid", + "Display name: {name}" : "Kuvatav nimi: {name}", + "Edit display name" : "Muuda kuvatavat nime", + "Display name (required)" : "Kuvatav nimii (nõutav)", + "Save name" : "Salvesta nimi", + "I picked message bubbles" : "Ma valisin jutumullid", + "I picked the list style" : "Ma valisin loendivaate", + "Error while setting personal setting" : "Viga isikliku seadistuste salvestamisel", + "Error while saving sounds setting" : "Viga helide seadistuste salvestamisel", + "Compact conversations list" : "Vestluste kompaktne loend", + "Chat appearance" : "Vestluse välimus", + "Messages list" : "Sõnumid loendina", + "Message bubbles" : "Sõnumid jutumullidena", + "Play sounds when participants join or leave a call" : "Kui osalejad liituvad kõnega või lahkuvad sealt, siis anna kõlliga märku", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Tootja poolt seatud piirangute tõttu pole see hetkel saadaval ei iPadis ega iPhone'is", + "Notification settings" : "Teavituse seadistused", + "Sounds for chat and call notifications" : "Vestluste ja kõneteavituste jaoks kasutatavad helid", + "Invalid language ({languageId})" : "Vigane keel ({languageId})", + "Default language" : "Vaikimisi keel", + "Default language ({languageName})" : "Vaikimisi keel ({languageName})", + "Error when trying to load the available live translation languages" : "Viga saadaval keelte laadimine reaalajas tõlkimiseks", + "Error when trying to set live translation language" : "Viga reaalajas tõlkimise keele seadistamisel", + "Set language used to show the transcriptions" : "Seadista ülestähendatu kuvamise keel", + "Select location for attachments" : "Vali asukoht manuste jaoks", + "Error while setting attachment folder" : "Manuste kausta määramisel tekkis viga", + "Error while setting read status privacy" : "Lugemisteatiste oleku privaatsuse määramisel tekkis viga", + "Error while setting typing status privacy" : "Kirjutusteatiste oleku privaatsuse määramisel tekkis viga", + "Error while setting default media state" : "Vaikimisi meediumioleku salvestamisel tekkis viga", + "Turn camera and microphone off by default" : "Vaikimisi lülita kaamera ja mikrofon välja", + "Blur camera background by default" : "Vaikimisi hägusta kaamera taust", + "Skip device preview before joining a call" : "Enne kõnega liitumist ära näita seadme ekraani eelvaadet", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Kaamera lülitatakse liitumisel välja. Näidatakse alati, kui salvestamise nõusolek on nõutav.", + "Appearance & Sounds" : "Välimus ja heli", + "Privacy" : "Privaatsus", + "Send read receipts" : "Saada lugemiskinnitusi", + "When off, all read statuses will be hidden" : "Kui see eelistus on lülitatud välja, siis lugemiste olekuteated peidetakse", + "Share typing status" : "Jaga kirjutamisteatisi", + "When off, all typing indicators will be hidden" : "Kui see eelistus on lülitatud välja, siis kirjutamisteatised peidetakse", + "Attachments folder" : "Manuste kaust", + "Toggle full screen" : "Lülita täisekraan sisse/välja", + "Return to Home screen" : "Tagasi avalehele", + "Search" : "Otsi", + "Shortcuts while in a chat" : "Kiirklahvid vestluse ajal", + "Focus the chat input" : "Fookus vestluse sisendile", + "Unfocus the chat input to use shortcuts" : "Kiirklahvide kasutamiseks eemalda fookus vestluse sisendilt", + "Edit your last message" : "Muuda oma viimast sõnumit", + "Shortcuts while in a call" : "Kiirklahvid kõne ajal", + "Camera on and off" : "Kaamera sisse/välja", + "Microphone on and off" : "Mikrofon sisse/välja", + "Raise or lower hand" : "Anna käega märku või lõpeta märguandmine", + "Push to talk or push to mute" : "Vajuta rääkimiseks või summutamiseks", + "Zoom-in / zoom-out a screen share" : "Suumi jagatavas ekraanis sisse/välja", + "Mouse wheel" : "Hiire ratas", + "Start call silently" : "Helista vaikselt", + "Start call" : "Helista", + "End call" : "Lõpeta kõne", + "The server was updated, you cannot start or join a call." : "Server on uuendatud, sa ei saa helistada ega kõnega liituda.", + "This call has just ended" : "Kõne on just lõppenud", + "You will be able to join the call only after a moderator starts it." : "Sa saad kõnega liituda pärast seda, kui moderaator on kõne algatanud.", + "End call for everyone" : "Lõpeta kõne kõigi jaoks", + "Starting the recording" : "Alustan salvestamist", + "Recording" : "Salvestan", + "The call has been running for one hour." : "Kõne on kestnud üle tunni.", + "Cancel recording start" : "Katkesta salvestamise alustamine", + "Stop recording" : "Lõpeta salvestamine", + "Send a reaction" : "Reageeri", + "React with {reaction}" : "Reageeri {reaction} emojiga", + "All tasks done!" : "Kõik ülesanded on täidetud!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n ülesanne","{done} / %n ülesannet"], + "Add participants to this call" : "Lisa sellele kõnele osalejaid", + "_%n participant in call_::_%n participants in call_" : ["Kõnes on %n osaleja","Kõnes on %n osalejat"], + "Scheduled messages" : "Ajastatud sõnumid", + "You are not allowed to enable screensharing" : "Sul pole luba ekraanijagamise käivitamiseks", + "No screensharing" : "Ekraanijagamist pole", + "Screensharing options" : "Ekraanijagamise valikud", + "Enable screensharing" : "Luba ekraanijagamine", + "Bad sent video and screen quality." : "Edastatud video ja ekraanivaate kehv kvaliteet.", + "Bad sent screen quality." : "Edastatud ekraanivaate kehv kvaliteet.", + "Bad sent video quality." : "Edastatud video kehv kvaliteet.", + "Bad sent audio, video and screen quality." : "Edastatud heliriba, video ja ekraanivaate kehv kvaliteet.", + "Bad sent audio and screen quality." : "Edastatud heliriba ja ekraanivaate kehv kvaliteet.", + "Bad sent audio and video quality." : "Edastatud heliriba ja video kehv kvaliteet.", + "Bad sent audio quality." : "Edastatud heli kehv kvaliteet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sinu jagatud ekraani selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal tausta hägustamine või videovoog tervikuna välja lülitada.", + "Disable background blur" : "Lülita tausta hägustamine välja", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sinu ekraanivaadet selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi näha sinu jagatud ekraani.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind selgelt näha. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal tausta hägustamine või videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamine välja lülitada.", + "Disable screenshare" : "Lülita ekraanijagamine välja", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi tausta hägustamine või videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista.", + "Screen sharing is not supported by your browser." : "Ekraani jagamine pole sinu veebibrauseris toetatud", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekraani jagamiseks pead kasutama HTTPS protokolli.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekraanijagamiseks tuleb leht laadida üle HTTPS protokolli.", + "An error occurred while starting screensharing." : "Ekraanijagamise alustamisel tekkis viga.", + "Select virtual background" : "Vali virtuaalne taust", + "Show your screen" : "Näita oma ekraani", + "Stop screensharing" : "Lõpeta ekraanijagamine", + "Mute others" : "Summuta muud", + "Start recording" : "Alusta salvestamist", + "Set up breakout rooms" : "Seadista virtuaalseid töötube", + "Download attendance list" : "Laadi alla osalejate loend", + "Open Calendar" : "Ava kalender", + "Remove participant {name}" : "Eemalda osaleja {name}", + "Would you like to delete this conversation?" : "Kas sa sooviksid selle vestluse kustutada?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["See vestlus kustutatakse kõigi jaoks %n päeva möödudes automaatselt.","See vestlus kustutatakse kõigi jaoks %n päeva möödudes automaatselt."], + "Are you sure you want to delete this conversation?" : "Kas oled kindel, et soovid selle vestluse kustutada?", + "Delete now" : "Kustuta kohe", + "Keep" : "Hoia alles", + "Open dialpad" : "Ava numbriklahvistik", + "Select a region" : "Vali maa või piirkond", + "Local time: {time}" : "Kohalik aeg: {time}", + "Scheduled {datetime}" : "Ajastatud: {datetime}", + "Scheduled for {datetime}" : "Ajastatud: {datetime}", + "Search …" : "Otsi…", + "Message without mention" : "Ilma mainimiseta sõnum", + "Mention myself" : "Maini iseennast", + "Mention everyone" : "Maini kõiki", + "Select a conversation" : "Vali vestlus", + "Select a mode" : "Vali režiim", + "You do not have permissions to access this conversation." : "Sul puuduvad õigused selles vestluses osalemiseks.", + "Join a different conversation or start a new one." : "Liitu mõne muu vestlusega või alusta uut.", + "The conversation does not exist" : "Seda vestlust pole olemas", + "Join a conversation or start a new one!" : "Liitu vestlusega või alusta uut!", + "Duplicate session" : "Topetsessioon", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "See vestlus on avatud muul vahekaardil. Hetkel kasutatav serveri versioon ei toeta sama vestluse avamist mitmel vahekaardil.", + "Creating and joining a conversation with \"{userid}\"" : "Loon vestluse kasutajaga „{userid}“ ning liitun sellega", + "Join a conversation or start a new one" : "Liitu vestlusega või alusta uut", + "Error while joining the conversation" : "Viga vestlusega liitumisel", + "Another user" : "Muu kasutaja", + "Hey! Are you using the list style or message bubbles?" : "Hei! Kas sa kasutad loendivaadet või jutumullide vaatet?", + "Nextcloud URL" : "Nextcloudi võrguaadress", + "Nextcloud user" : "Nextcloudi kasutaja", + "User password" : "Kasutaja salasõna", + "Talk conversation" : "Vestlus kõnerakenduses", + "Skip TLS verification" : "Jäta TLS-ühenduse verifitseerimine vahele", + "Matrix server URL" : "Matrixi serveri võrguaadress", + "User" : "Kasutaja", + "Matrix channel" : "Matrixi kanal", + "Mattermost server URL" : "Mattermosti serveri võrguaadress", + "Mattermost user" : "Mattermosti kasutaja", + "Team name" : "Tiimi nimi", + "Channel name" : "Kanali nimi", + "Rocket.Chat server URL" : "Rocket.Chati serveri võrguaadress", + "User name or email address" : "Kasutaja nimi või e-posti aadress", + "Rocket.Chat channel" : "Rocket.Chati kanal", + "Zulip server URL" : "Zulipi serveri võrguaadress", + "Bot user name" : "Roboti kasutajanimi", + "Bot API key" : "Roboti liidestuse võti", + "Zulip channel" : "Zulipi kanal", + "API token" : "API tunnusluba", + "Slack channel" : "Slacki kanal", + "Server ID or name" : "Serveri tunnus või nimi", + "Channel ID (prefixed with \"ID:\") or name" : "Kanali tunnus/ID (eesliiteks „ID:“) või nimi", + "Channel" : "Kanal", + "Login" : "Kasutajanimi", + "Chat ID" : "Vestluse tunnus", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC serveri võrguaadress (nt. chat.freenode.net:6667)", + "Nickname" : "Hüüdnimi", + "Connection password" : "Ühenduse salasõna", + "IRC channel" : "IRC kanal", + "Channel password" : "Kanali salasõna", + "NickServ nickname" : "Hüüdnimi NickServis", + "NickServ password" : "NickServi salasõna", + "Use TLS" : "Kasuta TLS-i", + "Use SASL" : "Kasuta SASL-i", + "Tenant ID" : "Klienditunnus (Tenant ID)", + "Client ID" : "Kliendi tunnus", + "Team ID" : "Tiimi tunnus", + "Thread ID" : "Jutulõnga tunnus", + "XMPP/Jabber server URL" : "XMPP/Jabberi serveri võrguaadress", + "MUC server URL" : "XMPP jututoa (Multiuser chat) serveri võrguaadress", + "Jabber ID" : "XMPP kasutajatunnus (Jabber ID)", + "Pinned messages" : "Esiletõstetud sõnumid", + "Media" : "Meedia", + "Polls" : "Küsitlused", + "Deck cards" : "Kanbani kaardid", + "Voice messages" : "Häälsõnumid", + "Locations" : "Asukohad", + "Call recordings" : "Kõnede salvestused", + "Audio" : "Helid", + "Show all pinned messages" : "Näita kõiki esiletõstetud sõnumeid", + "Show all media" : "Näita kõike meediat", + "Show all files" : "Näita kõiki faile", + "Show all polls" : "Näita kõiki küsitlusi", + "Show all deck cards" : "Näita kõiki kanbani kaarte", + "Show all voice messages" : "Näita kõiki häälsõnumeid", + "Show all locations" : "Näita kõiki asukohti", + "Show all call recordings" : "Näita kõiki kõnesalvestusi", + "Show all audio" : "Näita kõiki helifaile", + "Show all other" : "Näita kõike muud", + "Follow conversation settings" : "Järgi vestluse seadistusi", + "Group" : "Grupp", + "Team" : "Tiim", + "You reconnected to the call" : "Sina liitusid uuesti kõnega", + "{actor} reconnected to the call" : "{actor} liitus uuesti kõnega", + "You added {user0} and {user1}" : "Sina lisasid kasutajad {user0} ja {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Sina lisasid kasutajad {user0}, {user1} ja veel %n osaleja","Sina lisasid kasutajad {user0}, {user1} ja veel %n osalejat"], + "An administrator added you and {user0}" : "Peakasutaja lisas sinu ja kasutaja {user0}", + "{actor} added you and {user0}" : "{actor} lisas sinu ja kasutaja {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Peakasutaja lisas sinu, {user0} ja veel %n osaleja","Peakasutaja lisas sinu, {user0} ja veel %n osalejat"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lisas sinu, {user0} ja veel %n osaleja","{actor} lisas sinu, {user0} ja veel %n osalejat"], + "An administrator added {user0} and {user1}" : "Peakasutaja lisas kasutajad „{user0}“ ja „{user1}“", + "{actor} added {user0} and {user1}" : "{actor} lisas kasutajad „{user0}“ ja „{user1}“", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Peakasutaja lisas {user0}, {user1} ja veel %n osaleja","Peakasutaja lisas {user0}, {user1} ja veel %n osalejat"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} lisas {user0}, {user1} ja veel %n osaleja","{actor} lisas {user0}, {user1} ja veel %n osalejat"], + "You removed {user0} and {user1}" : "Sina eemaldasid osalejad {user0} ja {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Sina eemaldasid kasutajad {user0}, {user1} ja veel %n osaleja","Sina eemaldasid kasutajad {user0}, {user1} ja veel %n osalejat"], + "An administrator removed you and {user0}" : "Peakasutaja eemaldas sinu ja kasutaja {user0}", + "{actor} removed you and {user0}" : "{actor} eemaldas sinu ja kasutaja {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Peakasutaja eemaldas sinu, {user0} ja veel %n osaleja","Peakasutaja eemaldas sinu, {user0} ja veel %n osalejat"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} eemaldas sinu, {user0} ja veel %n osaleja","{actor} eemaldas sinu, {user0} ja veel %n osalejat"], + "An administrator removed {user0} and {user1}" : "Peakasutaja eemaldas kasutajad {user0} ja {user1} ", + "{actor} removed {user0} and {user1}" : "{actor} eemaldas osalejad {user0} ja {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Peakasutaja eemaldas osalejad {user0} ja {user1} ning veel %n osaleja","Peakasutaja eemaldas osalejad {user0} ja {user1} ning veel %n osalejat"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eemaldas osalejad {user0} ja {user1} ning veel %n osaleja","{actor} eemaldas osalejad {user0} ja {user1} ning veel %n osalejat"], + "You and {user0} joined the call" : "Sina ja {user0} liitusid kõnega", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Sina, {user0} ja veel %n osaleja liitusid kõnega","Sina, {user0} ja veel %n osalejat liitusid kõnega"], + "{user0} and {user1} joined the call" : "{user0} ja {user1} liitusid kõnega", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ja veel %n osaleja liitus kõnega","{user0}, {user1} ja veel %n osalejat liitusid kõnega"], + "You and {user0} left the call" : "Sina ja {user0} lahkusid kõnest", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Sina, {user0} ja veel %n osaleja lahkus kõnest","Sina, {user0} ja veel %n osalejat lahkusid kõnest"], + "{user0} and {user1} left the call" : "{user0} ja {user1} lahkusid kõnest", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ja veel %n osaleja lahkus kõnest","{user0}, {user1} ja veel %n osalejat lahkusid kõnest"], + "You promoted {user0} and {user1} to moderators" : "Sina määrasid kasutajad {user0} ja {user1} moderaatoriteks", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Sina määrasid kasutajad {user0}, {user1} ja veel %n osaleja moderaatoriteks","Sina määrasid kasutajad {user0}, {user1} ja veel %n osalejat moderaatoriteks"], + "An administrator promoted you and {user0} to moderators" : "Peakasutaja määras sinu ja kasutaja {user0} moderaatoriteks", + "{actor} promoted you and {user0} to moderators" : "{actor} määras sinu ja kasutaja {user0} moderaatoriteks", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Peakasutaja määras sinu, „{user0}“ ja veel %n osaleja moderaatoriteks","Peakasutaja määras sinu, „{user0}“ ja veel %n osalejat moderaatoriteks"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} määras sinu, {user0} ja veel %n osaleja moderaatoriteks","{actor} määras sinu, „{user0}“ ja veel %n osalejat moderaatoriteks"], + "An administrator promoted {user0} and {user1} to moderators" : "Peakasutaja määras kasutajad „{user0}“ ja „{user1}“ moderaatoriteks", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} määras kasutajad „{user0}“ ja „{user1}“ moderaatoriteks", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Peakasutaja määras kasutajad {user0} ja {user1} ning veel %n osaleja moderaatoriteks","Peakasutaja määras kasutajad „{user0}“ ja „{user1}“ ning veel %n osalejat moderaatoriteks"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} määras kasutajad {user0}, {user1} ja veel %n osaleja moderaatoriteks","{actor} määras kasutajad „{user0}“, „{user1}“ ja veel %n osalejat moderaatoriteks"], + "You demoted {user0} and {user1} from moderators" : "Sina võtsid kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Sina võtsid kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","Sina võtsid kasutajatelt „{user0}“, „{user1}“ ja veel %n osalejalt moderaatori õigused ära"], + "An administrator demoted you and {user0} from moderators" : "Peakasutaja võttis sinult ja veel kasutajalt „{user0}“ moderaatori õigused ära", + "{actor} demoted you and {user0} from moderators" : "{actor} võttis sinult ja veel kasutajalt „{user0}“ moderaatori õigused ära", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Peakasutaja võttis sinult, kasutajalt „{user0}“ ja veel %n osaleja moderaatori õigused ära","Peakasutaja võttis sinult, kasutajalt „{user0}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} võttis sinult, kasutajalt „{user0}“ ja veel %n osaleja moderaatori õigused ära","{actor} võttis sinult, kasutajalt „{user0}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "An administrator demoted {user0} and {user1} from moderators" : "Peakasutaja võttis kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} võttis kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Peakasutaja võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","Peakasutaja võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","{actor} võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "You:" : "Sina:", + "You: {lastMessage}" : "Sina: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serveri tarkvara on uuendatud.", + "(edited by you)" : "(muudetud sinu poolt)", + "(edited by a deleted user)" : "(muudetud kustutatud kasutaja poolt)", + "(edited by {moderator})" : "(muudetud {moderator} moderaatori poolt)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Sa proovid selle vestlusega liituda, kui samal ajal juba muus aknas või seadmes toimib sama vestluse aktiivne sessioon. Selline võimalus pole hetkel Nextcloudi kõnerakenduses toetatud. Kuidas sa sooviksid jätkata?.", + "Leave this page" : "Lahku sellelt lehelt", + "Join here" : "Liitu siin", + "Deck card has been posted to {conversation}" : "Kanbani kaart on lisatud „{conversation}“ vestlusesse", + "An error occurred while posting deck card to conversation" : "Kanbani kaardi postitamisel vestlusesse tekkis viga", + "Post to a conversation" : "Postita vestlusesse", + "Post to conversation" : "Postita vestlusesse", + "The recording failed. Please contact your administrator." : "Kõne salvestamine ei õnnestunud. Palun võta ühendust oma peakasutajaga.", + "Location has been posted to {conversation}" : "Asukoht on saadetud „{conversation}“ vestlusesse", + "An error occurred while posting location to conversation" : "Asukoha postitamisel vestlusesse tekkis viga", + "Share to a conversation" : "Jaga vestlusesse", + "Share to conversation" : "Jaga vestlusesse", + "In conversation" : "Vestluses", + "Search in conversation: {conversation}" : "Otsi vestlusest: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Sinu seadmest lubatud päringute arv on hetkel piiratud jõuründevastase reeglite alusel", + "Error while clearing conversation history" : "Viga vestluse ajaloo kustutamisel", + "Error occurred while allowing guests" : "Külaliste lubamisel tekkis viga", + "Error occurred while disallowing guests" : "Külaliste keelamisel tekkis viga", + "Error occurred when restricting the conversation to moderator" : "Vestluse piiramisel vaid moderaatoritega tekkis viga", + "Error occurred when opening the conversation to everyone" : "Vestluse avamisel kõigi jaoks tekkis viga", + "Conversation password has been saved" : "Vestluse salasõna on salvestatud", + "Conversation password has been removed" : "Vestluse salasõna on eemaldatud", + "Error occurred while saving conversation password" : "Vestluse salasõna salvestamisel tekkis viga", + "Call recording is starting." : "Kõne salvestamine algab.", + "Call recording stopped while starting." : "Kõne salvestamine peatus alustamisel.", + "Call recording stopped. You will be notified once the recording is available." : "Kõne salvestamine on lõppenud. Sa saad teate, kui salvestis on saadaval.", + "Conversation picture set" : "Vestluse pilt on salvestatud", + "Conversation picture deleted" : "Vestluse pilt on kustutatud", + "Could not delete the conversation picture" : "Vestluse pildi kustutamine ei õnnestunud", + "Could not remove the automatic expiration" : "Ei õnnestunud eemaldada automaatset aegumist", + "Could not post message: {errorMessage}" : "Sõnumi saatmine polnud võimalik: {errorMessage}", + "Participant is banned successfully" : "Osalejale suhtluskeelu seadmine õnnestus", + "Error while banning the participant" : "Osalejale suhtluskeelu seadmisel tekkis viga", + "An error occurred while fetching the participants" : "Osalejate laadimisel tekkis viga", + "Could not send invitation to {actorId}" : "Kasutajale {actorId} polnud võimalik kutset saata", + "Invitations sent" : "Kutsed on saadetud", + "Error occurred when sending invitations" : "Kutsete saatmisel tekkis viga", + "Failed to join the conversation." : "Vestlusega ei õnnestunud liituda.", + "An error occurred while creating breakout rooms" : "Virtuaalsete töötubade loomisel tekkis viga", + "An error occurred while re-ordering the attendees" : "Osalejate järjestuse muutmisel tekkis viga", + "An error occurred while deleting breakout rooms" : "Virtuaalsete töötubade kustutamisel tekkis viga", + "An error occurred while starting breakout rooms" : "Virtuaalsete töötubade käivitamisel tekkis viga", + "An error occurred while stopping breakout rooms" : "Virtuaalsete töötubade peatamisel tekkis viga", + "An error occurred while sending a message to the breakout rooms" : "Virtuaalsetesse töötubadesse sõnumi saatmisel tekkis viga", + "An error occurred while requesting assistance" : "Abi küsimisel tekkis viga", + "An error occurred while resetting the request for assistance" : "Abiküsimise päringu tühistamisel tekkis viga", + "An error occurred while joining breakout room" : "Virtuaalse töötoaga liitumisel tekkis viga", + "Failed to rename the thread" : "Jutulõnga nime muutmine ei õnnestunud", + "Error fetching upcoming events" : "Järgmiste sündmuste laadimisel tekkis viga", + "Error fetching upcoming reminders" : "Järgmiste meeldetuletuste laadimisel tekkis viga", + "An error occurred while accepting an invitation" : "Kutse vastuvõtmisel tekkis viga", + "An error occurred while rejecting an invitation" : "Kõne vastuvõtmata jätmisel tekkis viga", + "{guest} (guest)" : "{guest} (külaline)", + "Poll draft has been saved" : "Küsitluse kavand on salvestatud", + "An error occurred while saving the draft" : "Küsitluse kavandi salvestamisel tekkis viga", + "An error occurred while submitting your vote" : "Hääletamisel tekkis viga", + "An error occurred while ending the poll" : "Küsitluse lõpetamisel tekkis viga", + "An error occurred while deleting the poll draft" : "Küsitluse kavandi kustutamisel tekkis viga", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} koostas „{name}“ küsitluse. Hääletamiseks klõpsi", + "Failed to add reaction" : "Ei õnnestunud lisada reakstiooni", + "Failed to remove reaction" : "Regeerimise eemaldamine ei õnnestunud", + "The server is in maintenance mode." : "Server on hooldusrežiimis.", + "Federated server was updated." : "Liitpilve serveri tarkvara on uuendatud.", + "Error while uploading file \"{fileName}\"" : "„{fileName}“ faili üleslaadimisel tekkis viga", + "Not enough free space to upload file \"{fileName}\"" : "„{fileName}“ faili üleslaadimiseks pole piisavalt vaba ruumi", + "You are not allowed to share files" : "Sul pole luba failide jagamiseks", + "Error while sharing file" : "Viga faili jagamisel", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Sinu kasutatav veebibrausel pole Nextcloud Talki poolt täies mahus toetatud. palun kasuta järgnevate brauserte viimaseid versioone: Mozilla Firefox, Microsoft Edge, Google Chrome, Opera või Apple Safari.", + "_In %n hour_::_In %n hours_" : ["%n tunni pärast","%n tunni pärast"], + "_%n minute _::_%n minutes_" : ["%n minut","%n minutit"], + "In {hours} and {minutes}" : "{hours} tunni ja {minutes} minuti pärast", + "_In %n minute_::_In %n minutes_" : ["%n minuti pärast","%n minuti pärast"], + "Later today – {timeLocale}" : "Täna hiljem – {timeLocale}", + "Set time for later today" : "Lisa aeg tänaseks hilisemaks ajaks", + "Tomorrow – {timeLocale}" : "Homme – {timeLocale}", + "Set time for tomorrow" : "Lisa aeg homseks", + "This weekend – {timeLocale}" : "Sel nädalavahetusel – {timeLocale}", + "Set time for this weekend" : "Lisa aeg selleks nädalavahetuseks", + "Next week – {timeLocale}" : "Järgmisel nädalal – {timeLocale}", + "Set time for next week" : "Lisa aeg selleks nädalaks", + "Message link copied to clipboard" : "Sõnumi link on kopeeritud lõikelauale ", + "Conversation link copied to clipboard" : "Vestluse link on kopeeritud lõikelauale.", + "The link could not be copied" : "Lingi kopeerimine ei õnnestunud", + "Error while parsing a PROPFIND error" : "Viga PROPFIND-meetodi vea töötlemisel", + "Sending signaling message has failed" : "Kõnehõlbussõnumi saatmine ei õnnestunud", + "Lost connection to signaling server. Trying to reconnect." : "Kadus ühendus kõnehõlbustusserveriga. Proovi, kas ühenduse uuesti loomine aitab.", + "Lost connection to signaling server." : "Kadus ühendus kõnehõlbustusserveriga.", + "Connecting is taking longer than expected …" : "Ühendamiseks kulub rohkem aega, kui peaks…", + "Failed to connect. Retrying …" : "Ühendamine ei õnnestunud. Proovin uuesti…", + "Failed to connect. The signaling server may be set up incorrectly" : "Ühendamine ei õnnestunud. Kõnehõlbustusserver võib olla valesti seadistatud", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Kasutusel olev kõnehõlbustusserver vajab selle Talki versiooniga ühilduvuse nimel uuendamist. Palun võta ühendust oma serveri peakasutajaga.", + "Please restart the app." : "Palun käivita rakendus uuesti.", + "Please reload the page." : "Palun laadi leht uuesti.", + "Please try to restart the app." : "Palun proovi rakenduse uuesti käivtamist.", + "Please try to reload the page." : "Palun proovi lehe uuesti laadimist.", + "Do not disturb" : "Ära sega", + "Away" : "Eemal", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kaamera {number}", + "Speaker {number}" : "Kõlar {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Tundub, et räägid, aga sinu mikrofon on summutatud. Kui tahad, et teised sind kuuleks, siis palun lülita mikrofon uuesti sisse", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Selleks kulub rohkem aega, kui me eeldasime. Kas meediaõigused on juba olemas (või keelatud)? Kui vastus on jah, siis palun käivita brauser või töölauarakendus uuesti - heli ja video enam ei toimi korraliukult.", + "Access to microphone & camera is only possible with HTTPS" : "Ligipääs mikrofonile ja kaamerale toimib vaid siis, kui server kasutab https-protokolli", + "Please move your setup to HTTPS" : "Palun seadista server kasutajama https-protokolli või palu, et peakasutaja teeks seda", + "Access to microphone & camera was denied" : "Ligipääs mikrofonile ja kaamerale on keelatud", + "WebRTC is not supported in your browser" : "WebRTC pole sinu veebibrauseris toetatud", + "Please use a different browser like Firefox or Chrome" : "Palun kasuta mõnda muud veebibrauserit nagu Firefox või Chrome", + "Error while accessing microphone & camera" : "Viga ligipääsul mikrofonile ja kaamerale", + "%s Talk on your mobile devices" : "%s Talk sinu nutiseadmes", + "Join conversations at any time, anywhere, on any device." : "Liitu vestlusega igal ajal, igast asukohast ja igast seadmest.", + "Android app" : "Androidi rakendus", + "iOS app" : "iOS-i rakendus", + "__language_name__" : "Eesti", + "Webhook Demo" : "Webhooki demo", + "Call summary (%s)" : "Kõne kokkuvõte (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "See robot postitab kõne lõppedes kõikidele kõnes osalejatele ülevaatliku sõnumi, osalejate ja ülesannete andmetega", + "Tasks" : "Ülesanded", + "Notes" : "Märkmed", + "Reports" : "Aruanded", + "Decisions" : "Otsused", + "Agenda" : "Päevakava", + "Call summary" : "Kõne kokkuvõte", + "Call summary - {title}" : "Kõne kokkuvõte - {title}", + "Talk conversation for event" : "Talki vestlus ürituse jaoks", + "Client Push is installed, this improves the performance of desktop clients." : "Tõuketeenused kliendile on paigaldatud ja see parandab töölauaklientide jõudlust.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} pole paigaldatud ja see võib töölauaklientide puhul tekitada jõudlusprobleeme.", + "Next meeting" : "Järgmine kohtumine", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Lisa kohtumine oma kalendrisse. Kui kohtumispaigast on määratud kõnerakendus, siis saab ta olema siin nähtaval.", + "Join conversations from remote Nextcloud servers" : "Liitu vestlusega muus Nextcloudi serveris", + "Your default media state has been saved" : "Sinu vaikimisi meediumiolek on salvestatud", + "Set reminder for later today" : "Lisa meeldetuletus tänaseks hilisemaks ajaks", + "Set reminder for tomorrow" : "Lisa meeldetuletus homseks", + "Set reminder for this weekend" : "Lisa meeldetuletus selleks nädalavahetuseks", + "Set reminder for next week" : "Lisa meeldetuletus järgmiseks nädalaks", + "Generate summary" : "Koosta kokkuvõte", + "Open poll • You voted already" : "Avalik küsitlus • Sa oled juba hääletanud", + "Open poll • Click to vote" : "Avalik küsitlus • Hääletamiseks klõpsi", + "Poll • Ended" : "Küsitlus on lõppenud", + "Talk recording from {time} ({conversation})" : "Salvestus: {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Küsitluse tulemused • %n hääl","Küsitluse tulemused • %n häält"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Avalik küsitlus • %n hääletamine","Avalik küsitlus • %n hääletamist"], + "Submit vote" : "Hääleta", + "Your privacy setting has been saved" : "Sinu privaatsuse seadistus on salvestatud", + "Your personal setting has been saved" : "Sinu isiklik seadistus on salvestatud", + "Failed to save sounds setting" : "Ei õnnestu salvestada helide seadistusi", + "Sounds setting saved" : "Helide seadistused on salvestatud", + "Always shown if recording consent is required" : "Kui nõusolek salvestamiseks on vajalik, siis seda ikkagi näidatakse", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk on uuendatud, sa ei saa helistada ega kõnega liituda.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Sa liitusid selle vestlusega muus aknas või seadmes. Selline võimalus pole hetkel Nextcloudi kõnerakenduses toetatud ja seega sessioon sai suletud.", + "Nextcloud Talk was updated." : "Nextcloud Talk on uuendatud.", + "Nextcloud is in maintenance mode." : "Nextcloud on hooldusrežiimis.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk liitpilves on uuendatud.", + "Enable live translation" : "Lülita reaalajas tõlge sisse", + "I picked list style" : "Ma valisin loendi", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hei! Kas sa kasutad vestlusrakendust loendivaates või jutumullide vaates?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/et_EE.json b/l10n/et_EE.json new file mode 100644 index 0000000..fd807cb --- /dev/null +++ b/l10n/et_EE.json @@ -0,0 +1,2233 @@ +{ "translations": { + "a conversation" : "vestlus", + "(Duration %s)" : "(kestus %s)", + "You attended a call with {user1}" : "Sa osalesid kõnes kasutajaga {user1}", + "_%n guest_::_%n guests_" : ["%n külaline","%n külalist"], + "You attended a call with {user1} and {user2}" : "Sa osalesid kõnes kasutajatega {user1} ja {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Sa osalesid kõnes kasutajatega {user1}, {user2} ja {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sa osalesid kõnes kasutajatega {user1}, {user2}, {user3} ja {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sa osalesid kõnes kasutajatega {user1}, {user2}, {user3}, {user4} ja {user5}", + "_%n other_::_%n others_" : ["%n muu","%n muud"], + "{actor} invited you to {call}" : "{actor} kutsus sind osalema „{call}“ kõnes ", + "You were invited to a conversation or had a call" : "Sa said kutse osalema vestluses või pidasid ühe kõne", + "Other activities" : "Muud tegevused", + "Talk" : "Talk", + "Guest" : "Külaline", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Tere tulemast kasutama Nextcloudi kõnerakendust!\nSelles vestluses saad teavet Nextcloudi kõnerakenduse uute funktsionaalsuste kohta.", + "## New in Talk %s" : "## Mida on uut Nextcloudi kõnerakenduses %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Hääl- ja videovestluses osalemiseks saad nüüd kasutada Microsoft Edge'i ja Safari veebibrausereid", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Kirjutades „@all“ saad nüüd mainida kõiki vestluses osalejaid", + "- With the \"arrow-up\" key you can repost your last message" : "- „Nool üles“ nupuga saad oma eelmist sõnumit uuesti saada", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Kõnerakenduses on nüüd olemas käsud - nägemaks, mida sinu peakasutaja on seadistanud, kirjuta „/Help“", + "- With projects you can create quick links between conversations, files and other items" : "- Projektirakendusega saad kiiresti luua linke vestluste, failide ja muude objektide vahel", + "- You can now mention guests in the chat" : "- Nüüd saad mainida vestlustes külalisi", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Vestlustel on nüüd ooteruum. See võimaldab moderaatoritel liituda ettevalmistamiseks vestluse või kõnega ning muud osalejad ja külalised asuvad seni ooteruumis,", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Kui tiimide rakendus on paigaldatud, siis saad omaloodud gruppe lisada vestlusesse", + "- Check out the new grid and call view" : "- Vaata meie uut ruudustikuvaadet ja kõnevaadet", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nüüd saadfaile üles laadida, ka lohistades, otse vestlusest", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Jagatud failid avatakse nüüd vajaliku rakendusega otse vestluse sees", + "- You can now search for chats and messages in the unified search in the top bar" : "- Saad nüüd otsida ülal asuvast ühiselt otsinguväljalt nii vestlusi kui sõnumeid", + "- Spice up your messages with emojis from the emoji picker" : "- Emojide valijast saad nüüd lisada emojisid ja oma vestlusi ilmestada", + "- You can now change your camera and microphone while being in a call" : "- Nüüd saad kõne kestel vahetada oma kaamerat ja mikrofoni", + "- See a read status and send failed messages again" : "- Näed lugemisteatisi ja saad ebaõnnestunult saadetud sõnumeid uuesti saata", + "- Raise your hand in a call with the R key" : "- Kõne ajal saad R-klahvi vajutusega anda märku käe tõstmisest", + "- Join the same conversation and call from multiple devices" : "- Ühe vestluse ja kõnega liitumise võimalus mitmest seadmest", + "- Send voice messages, share your location or contact details" : "- Häälsõnumite saatmine, oma asukoha või kontaktide jagamine", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Grupi lisamisel vestusele lisatakse selle liikmed automaatselt osalejateks", + "- A preview of your audio and video is shown before joining a call" : "- Enne kõnega liitumist näed ja kuuled nüüd oma video ja heli ja eelvaadet", + "- You can now blur your background in the newly designed call view" : "- Ümberkujundatud kõnevaates saad nüüd oma tausta hägustada", + "- Moderators can now assign general and individual permissions to participants" : "- Moderaatorid võivad nüüd kasutajatele määrata üldisi ja isiklikke õigusi", + "- You can now react to chat messages" : "- Vestluse sõnumitele saad nüüd reageerida", + "- In the sidebar you can now find an overview of the latest shared items" : "- Vestlusrakenduse külgribal leiad nüüd viimase jaosmeedia ülevaate", + "- Use a poll to collect the opinions of others or settle on a date" : "- Kasuta küsimustikku teiste osalejate arvamuse selgitamiseks või kuupäeva kokkuleppimiseks", + "- Configure an expiration time for chat messages" : "- Seadista vestluse sõnumite aegumist", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Algata suurtes vestlustes kõnesid nii, et kõik ei saa sellekohast teavitust. Kõne kestel saad saada üksikuid teavitusi saata vastavalt vaajadusele.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Kui sisu pole kiire või oluline, siis saada vestluse sõnumeid ilma teavituseta", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojid lõpetatakse automaatselt „:“ kirjutamisel", + "- Link various items using the new smart-picker by typing a \"/\"" : "- „/“ käivitab uue nutivalija, mis võimaldab erinevaid objekte linkida", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderaatorid saavad nüüd luua virtuaalseid töötube (kasutusel peab olema suure jõudlusega taustateenus)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Kõnesid on nüüd võimalik salvestada (kasutusel peab olema suure jõudlusega taustateenus)", + "- Conversations can now have an avatar or emoji as icon" : "- Vestluste ikooniks saab nüüd olla tunnuspilt või emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Videokõnede hägustatud taustadele lisaks on nüüd saadaval virtuaalsed taustad", + "- Reactions are now available during calls" : "- Kõnede ajal saad nüüd kasutada reaktsioone", + "- Typing indicators show which users are currently typing a message" : "- Kirjutamisteatised näitavad nüüd, kui teised osalejad midagi kirjutavad", + "- Groups can now be mentioned in chats" : "- Nüüd saad vestlustes mainida gruppe", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Kui kõnede üleskirjutuse rakendus on registreeritud, siis kõnesalvestustest tehakse üleskirjutused automaatselt", + "- Chat messages can be translated if a translation provider app is registered" : "- Kui kõnede tõlkerakendus on registreeritud, siis vestluse sõnumid tõlgitakse automaatselt", + "- **Markdown** can now be used in _chat_ messages" : "- _Vestluse_ sõnumites saad nüüd kasutada **Markdown-märkekeelt**", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Nüüd saad kasutada Webhooks-liidestust robotite ehitamiseks. Lisateavet ning juhendi leiad siiat: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Vestlusesse saad lisada meeldetuletuse hilisema teavituse jaoks", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Nüüd saad kasutada **Märkmed endale** vestlust märkmete koostamiseks ja teabe jagamiseks oma seadmete vahel", + "- Captions allow to send a message with a file at the same time" : "- Failile saad nüüd lisada alapealkirja ja neid korraga saata", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Ekraani jagamisel on nüüd näha esineja videovoog ja kõnes saad kasutada animeeritud reaktsioone", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Moderaatorid ja sisseloginud kasutajad savad nüüd sõnumeid muuta 6 tunni jooksul", + "- Unsent message drafts are now saved in your browser" : "- Brauser oskab nüüd salvestada saatmata sõnumite kavandeid", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Tekstivestlused toimivad nüüd liitpilves teiste vestlusserveritega", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Takistamaks neil uuesti liitumist võivad moderaatorid nüüd kasutajakontodele ja külalistele määrata suhtluskeelu", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Vestlustes on nüüd näha kalendrisündmustest ja äraoleku teadetest lingitud tulevased kõned", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Kõned toimivad nüüd liitpilves teiste vestlusserveritega (kasutusel peab olema suure jõudlusega taustateenus)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Nüüd on Nextcloudi kõnerakenduse töölauaklient olemas Windowsi, macOS-i ja Linuxi jaoks: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloudi Abiline oskab nüüd teha kokkuvõtet kõnesalvestistest ja vestluste lugemata sõnumitest", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Tõhusamad kohtumised, kus korduskülalised tuntakse ära e-posti aadressi alusel, osalejate loendid on imporditavad, küsitluste kavandid on loodavad ja osalejate loendid on allalaaditavad", + "- Archive conversations to stay focused" : "- Et fookus ei kaoks, saad vanad vestlused arhiveerida", + "- Schedule a meeting into your calendar from within a conversation" : "- Kohtumise kalendrisse lisamise võimalus otse vestlusest", + "- Search for messages of the current conversation directly in the right sidebar" : "- Käsil oleva vestluse sõnumite otsing otse paremalt külgribalt", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Esmane ülevaade paljudest vestlustest kompaktse loendina (eeldusel, et lülitad selle sisse kõnerakenduse seadistustest)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Kohtumiste vestlused nüüd sünkroniseerivad pealkirja ja kirjelduse kalendrist ja on vaikimisi otsingufiltrist peidetud kuni algusaeg hakkab lähenema", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Teavituste seadistustes saab nüüd vestlust märkida delikaatseks ja sellega peita vestluste sisu vestluste loendist ja teavitustest", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Tõuketeavituste saamise võimalus „Ära sega“ võrguolekus ning vestluste olulisteks märkimise võimalus", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Võimalus lisada osalejaid kahepoolsele kõnele ja sellega kõne muutmine grupikõneks", + "- Use threads to keep your chat and discussions organized" : "- Nüüd saad vestlusi koondada jutulõngadesse ning sellega hoida sisu ülevaatlikumas ja hallatavamas vormis", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Nüüd on saadaval kõne ajal tehtud ülestähendused (eeldab et, „live-transcription“ ExApp on paigaldatud ja suure jõudlusega taustateenus kasutusel)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderaatorid saavad nüüd tõsta sõnumeid esile ja need kuvatakse vestluse ülaosas", + "- Schedule a message to send it at a later time" : "- Sõnumite saatmise ajastamine hilisemaks ajaks", + "_All %n participant_::_All %n participants_" : ["%n osaleja","Kõik %n osalejat"], + "Talk updates ✅" : "Kõnerakenduse uuendused ✅", + "Reaction deleted by author" : "Autor kustutas oma reaktsiooni", + "{actor} created the conversation" : "{actor} lõi selles vestluse", + "You created the conversation" : "Sina lõid selle vestluse", + "System created the conversation" : "Süsteemi loodud vestlus", + "An administrator created the conversation" : "Peakasutaja lõi vestluse", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} muutis vestluse nime: „%1$s“ → „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sina muutsid vestluse nime: „%1$s“ → „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Peakasutaja muutis vestluse nime: „%1$s“ → „%2$s“", + "{actor} set the description" : "„{actor}“ sisestas kirjelduse", + "You set the description" : "Sina sisestasid vestluse kirjelduse", + "An administrator set the description" : "Peakasutaja sisestas kirjelduse", + "{actor} removed the description" : "{actor} eemaldas kirjelduse", + "You removed the description" : "Sina eemaldasid kirjelduse", + "An administrator removed the description" : "Peakasutaja eemaldas kirjelduse", + "You started a silent call" : "Sa helistasid vaikselt", + "Outgoing silent call" : "Väljuv vaikne kõne", + "{actor} started a silent call" : "{actor} helistas vaikselt", + "Incoming silent call" : "Sissetulev vaikne kõne", + "You started a call" : "Sina helistasid", + "Outgoing call" : "Väljuv kõne", + "{actor} started a call" : "{actor} helistas", + "Incoming call" : "Sissetulev kõne", + "{actor} joined the call" : "{actor} liitus kõnega", + "You joined the call" : "Sina liitusid kõnega", + "{actor} left the call" : "{actor} lahkus kõnest", + "You left the call" : "Sina lahkusid kõnest", + "{actor} unlocked the conversation" : "{actor} eemaldas selle vestluse lukustuse", + "You unlocked the conversation" : "Sina eemaldasid selle vestluse lukustuse", + "An administrator unlocked the conversation" : "Peakasutaja eemaldas vestluse lukustuse", + "{actor} locked the conversation" : "{actor} lukustas selle vestluse", + "You locked the conversation" : "Sina lukustasid selle vestluse", + "An administrator locked the conversation" : "Peakasutaja lukustas vestluse", + "{actor} limited the conversation to the current participants" : "{actor} lubas ligipääsu vestlusele vaid praegustele kasutajatele", + "You limited the conversation to the current participants" : "Sina lubasid ligipääsu vestlusele vaid praegustele kasutajatele", + "An administrator limited the conversation to the current participants" : "Peakasutaja lubas ligipääsu vestlusele vaid praegustele kasutajatele", + "{actor} opened the conversation to registered users" : "{actor} avas vestluse registreeritud kasutajatele", + "You opened the conversation to registered users" : "Sa avasid vestluse registreeritud kasutajatele", + "An administrator opened the conversation to registered users" : "Peakasutaja avas vestluse registreeritud kasutajatele", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} avas vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "You opened the conversation to registered users and users created with the Guests app" : "Sina avasid vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Peakasutaja avas vestluse registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "The conversation is now open to everyone" : "See vestlus on avatud nüüd kõikidele kasutajatele", + "{actor} opened the conversation to everyone" : "{actor} avas vestluse kõikidele kasutajatele", + "You opened the conversation to everyone" : "Sa avasid vestluse kõikidele kasutajatele", + "{actor} restricted the conversation to moderators" : "{actor} piiras vestluses osalemise vaid moderaatoritega", + "You restricted the conversation to moderators" : "Sina piirasid vestluses osalemise vaid moderaatoritega", + "{actor} started breakout rooms" : "{actor} käivitas virtuaalsed töötoad", + "You started breakout rooms" : "Sina käivitasid virtuaalsed töötoad", + "{actor} stopped breakout rooms" : "{actor} peatas virtuaalsed töötoad", + "You stopped breakout rooms" : "Sina peatasid virtuaalsed töötoad", + "{actor} allowed guests" : "{actor} lubas ligipääsu külalistele", + "You allowed guests" : "Sina lubasid ligipääsu külalistele", + "An administrator allowed guests" : "Peakasutaja lubas külaliskasutajatel liituda", + "{actor} disallowed guests" : "{actor} keelas ligipääsu külalistele", + "You disallowed guests" : "Sina keelasid ligipääsu külalistele", + "An administrator disallowed guests" : "Peakasutaja keeelas külaliskasutajatel liituda", + "{actor} set a password" : "{actor} lisas salasõna", + "You set a password" : "Sina lisasid salasõna", + "An administrator set a password" : "Peakasutaja lisas salasõna", + "{actor} removed the password" : "{actor} eemaldas salasõna", + "You removed the password" : "Sina eemaldasid salasõna", + "An administrator removed the password" : "Peakasutaja eemaldas salasõna", + "{actor} added {user}" : "{actor} lisas kasutaja „{user}“", + "You joined the conversation" : "Sina liitusid vestlusega", + "{actor} joined the conversation" : "{actor} liitus vestlusega", + "You added {user}" : "Sina lisasid kasutaja {user}", + "{actor} added you" : "{actor} lisas sinu", + "An administrator added you" : "Peakasutaja lisas sinu", + "An administrator added {user}" : "Peakasutaja lisas „{user}“ kasutaja", + "You left the conversation" : "Sina lahkusid vestlusest", + "{actor} left the conversation" : "{actor} lahkus sellest vestlusest", + "{actor} removed {user}" : "{actor} eemaldas kasutaja {user}", + "You removed {user}" : "Sina eemaldasid kasutaja {user}", + "{actor} removed you" : "{actor} eemaldas sinu", + "An administrator removed you" : "Peakasutaja eemaldas sinu", + "An administrator removed {user}" : "Peakasutaja eemaldas kasutaja {user}", + "{actor} invited {federated_user}" : "{actor} saatis kutse {federated_user} kasutajale liitpilves", + "You invited {federated_user}" : "Sina saatsid kutse {federated_user} kasutajale liitpilves", + "You accepted the invitation" : "Sa võtsid kutse vastu", + "{actor} invited you" : "{actor} saatis sulle kutse", + "An administrator invited you" : "Peakasutaja saatis sulle kutse", + "An administrator invited {federated_user}" : "Peakasutaja saatis kutse {federated_user} kasutajale liitpilves", + "{federated_user} accepted the invitation" : "Liitvõrgu kasutaja {federated_user} võttis kutse vastu", + "{actor} removed {federated_user}" : "{actor} eemaldas kasutaja {federated_user}", + "You removed {federated_user}" : "Sina eemaldasid kasutaja {federated_user}", + "You declined the invitation" : "Sa lükkasid kutse tagasi", + "An administrator removed {federated_user}" : "Peakasutaja eemaldas kasutaja {federated_user}", + "{federated_user} declined the invitation" : "Liitvõrgu kasutaja {federated_user} lükkas kutse tagasi", + "{actor} added group {group}" : "{actor} lisas „{group}“ grupi", + "You added group {group}" : "Sina lisasid „{group}“ grupi", + "An administrator added group {group}" : "Peakasutaja lisas „{group}“ grupi", + "{actor} removed group {group}" : "{actor} eemaldas „{group}“ grupi", + "You removed group {group}" : "Sina eemaldasid „{group}“ grupi", + "An administrator removed group {group}" : "Peakasutaja eemaldas „{group}“ grupi", + "{actor} added team {circle}" : "{actor} lisas „{circle}“ tiimi", + "You added team {circle}" : "Sina lisasid „{circle}“ tiimi", + "An administrator added team {circle}" : "Peakasutaja lisas „{circle}“ tiimi", + "{actor} removed team {circle}" : "{actor} eemaldas tiimi „{circle}“", + "You removed team {circle}" : "Sina eemaldasid „{circle}“ tiimi", + "An administrator removed team {circle}" : "Peakasutaja eemaldas „{circle}“ tiimi", + "{actor} added {phone}" : "{actor} lisas telefoni „{phone}“", + "You added {phone}" : "Sina lisasid telefoni „{phone}“", + "An administrator added {phone}" : "Peakasutaja lisas „{phone}“ kasutaja", + "{actor} removed {phone}" : "{actor} eemaldas {phone}", + "You removed {phone}" : "Sina eemaldasid {phone}", + "An administrator removed {phone}" : "Peakasutaja eemaldas {phone}", + "{actor} promoted {user} to moderator" : "{actor} määras kasutaja {user} moderaatoriks", + "You promoted {user} to moderator" : "Sina määrasid kasutaja {user} moderaatoriks", + "{actor} promoted you to moderator" : "{actor} määras sinu moderaatoriks", + "An administrator promoted you to moderator" : "Peakasutaja määras sinu moderaatoriks", + "An administrator promoted {user} to moderator" : "Peakasutaja määras kasutaja {user} moderaatoriks", + "{actor} demoted {user} from moderator" : "{actor} võttis kasutajalt „{user}“ moderaatori õigused ära", + "You demoted {user} from moderator" : "Sina võtsid kasutajalt „{user}“ moderaatori õigused ära", + "{actor} demoted you from moderator" : "{actor} võttis sinult moderaatori õigused ära", + "An administrator demoted you from moderator" : "Peakasutaja võttis sinult moderaatori õigused ära", + "An administrator demoted {user} from moderator" : "Peakasutaja võttis kasutajalt „{user}“ moderaatori õigused ära", + "{actor} shared a file which is no longer available" : "{actor} jagas faili, mida pole enam olemas", + "You shared a file which is no longer available" : "Sina jagasid faili, mida pole enam olemas", + "File shares are currently not supported in federated conversations" : "Vestluste puhul, kus osalevad kasutajad liitpilvest, pole failide jagamine hetkel lubatud", + "The shared location is malformed" : "Jagatud asukoht on vigaselt vormindatud", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} seadistas Matterbridge'i võrgusilla jagamaks seda vestlust muude suhtluslahendustega", + "You set up Matterbridge to synchronize this conversation with other chats" : "Sa seadistasid Matterbridge'i võrgusilla jagamaks seda vestlust muude suhtluslahendustega", + "{actor} created thread {title}" : "{actor} alustas {title} jutulõnga", + "You created thread {title}" : "Sinas alustasid {title} jutulõnga", + "{actor} renamed thread {title}" : "{actor} muutis {title} jutulõnga nime", + "You renamed thread {title}" : "Sina muutsid {title} jutulõnga nime", + "{actor} updated the Matterbridge configuration" : "{actor} uuendas Matterbridge'i võrgusilla seadistusi", + "You updated the Matterbridge configuration" : "Sa uuendasid Matterbridge'i võrgusilla seadistusi", + "{actor} removed the Matterbridge configuration" : "{actor} eemaldas Matterbridge'i võrgusilla seadistused", + "You removed the Matterbridge configuration" : "Sina eemaldasid Matterbridge'i võrgusilla seadistused", + "{actor} started Matterbridge" : "{actor} käivitas Matterbridge'i võrgusilla", + "You started Matterbridge" : "Sa käivitasid Matterbridge'i võrgusilla", + "{actor} stopped Matterbridge" : "{actor} peatas Matterbridge'i võrgusilla", + "You stopped Matterbridge" : "Sa peatasid Matterbridge'i võrgusilla", + "{actor} deleted a message" : "{actor} kustutas sõnumi", + "You deleted a message" : "Sina kustutasid sõnumi", + "{actor} edited a message" : "{actor} muutis sõnumit", + "You edited a message" : "Sina muutsid sõnumit", + "{actor} pinned a message" : "{actor} tõstis sõnumi esile", + "You pinned a message" : "Sina tõstsid sõnumi esile", + "{actor} unpinned a message" : "{actor} lõpetas sõnumi esiletõstmise", + "Message was automatically unpinned" : "Sõnumi esiletõstmine on automaatselt lõpetatud", + "You unpinned a message" : "Sina lõpetasid sõnumi esiletõstmise", + "{actor} deleted a reaction" : "{actor} kustutas reaktsiooni", + "You deleted a reaction" : "Sina kustutasid reaktsiooni", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Sina seadistasid sõnumi aeguma %n nädala möödudes","Sina seadistasid sõnumi aeguma %n nädala möödudes"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Sina seadistasid sõnumi aeguma %n päeva möödudes","Sina seadistasid sõnumi aeguma %n päeva möödudes"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Sina seadistasid sõnumi aeguma %n tunni möödudes","Sina seadistasid sõnumi aeguma %n tunni möödudes"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Sina seadistasid sõnumi aeguma %n minuti möödudes","Sina seadistasid sõnumi aeguma %n minuti möödudes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} seadistas sõnumi aeguma %n nädala möödudes","{actor} seadistas sõnumi aeguma %n nädala möödudes"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} seadistas sõnumi aeguma %n päeva möödudes","{actor} seadistas sõnumi aeguma %n päeva möödudes"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} seadistas sõnumi aeguma %n tunni möödudes","{actor} seadistas sõnumi aeguma %n tunni möödudes"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} seadistas sõnumi aeguma %n minuti möödudes","{actor} seadistas sõnumi aeguma %n minuti möödudes"], + "{actor} disabled message expiration" : "{actor} keelas sõnumi aegumise", + "You disabled message expiration" : "Sina keelasid sõnumi aegumise", + "{actor} cleared the history of the conversation" : "„{actor}“ kustutas vestluse ajaloo", + "You cleared the history of the conversation" : "Sa kustutasid vestluse ajaloo", + "{actor} set the conversation picture" : "{actor} lisas vestluse pildi", + "You set the conversation picture" : "Sina lisasid vestluse pildi", + "{actor} removed the conversation picture" : "{actor} eemaldas vestluse pildi", + "You removed the conversation picture" : "Sina eemaldasid vestluse pildi", + "{actor} ended the poll {poll}" : "{actor} lõpetas „{poll}“ küsitluse", + "You ended the poll {poll}" : "Sina lõpetasid „{poll}“ küsitluse", + "{actor} started the video recording" : "{actor} alustas videosalvestust", + "You started the video recording" : "Sina alustasid videosalvestust", + "{actor} stopped the video recording" : "{actor} lõpetas videosalvestuse", + "You stopped the video recording" : "Sina lõpetasid videosalvestuse", + "{actor} started the audio recording" : "{actor} alustas helisalvestust", + "You started the audio recording" : "Sina alustasid helisalvestust", + "{actor} stopped the audio recording" : "{actor} lõpetas helisalvestuse", + "You stopped the audio recording" : "Sina lõpetasid helisalvestuse", + "The recording failed" : "Salvestamine ei õnnestunud", + "Someone voted on the poll {poll}" : "Keegi kääletas „{poll}“ küsitluses", + "Message deleted by author" : "Sõnum autori poolt kustutatud", + "Message deleted by {actor}" : "{actor} kustutas sõnumi", + "Message deleted by you" : "Sina kustutasid sõnumi", + "Deleted user" : "Kustutatud kasutaja", + "Unknown number" : "Tundmatu number", + "Administration" : "Haldus", + "System" : "Süsteem", + "%s (guest)" : "%s (külaline)", + "Missed call" : "Märkamata kõne", + "Unanswered call" : "Vastamata kõne", + "Call ended (Duration {duration})" : "Kõne lõppes (kestus {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne lõppes (kestus {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} lõpetas kõne (kestus {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Kuna pikim lubatud kestus jõudis kätte, siis kõne %n külalisega lõppes (kestus {duration})","Kuna pikim lubatud kestus jõudis kätte, siis kõne %n külalisega lõppes (kestus {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Kõne %n külalisega lõppes (kestus {duration})","Kõne %n külalisega lõppes (kestus {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} lõpetas kõne %n külalisega (kestus {duration})","{actor} lõpetas kõne %n külalisega (kestus {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajaga {user1} lõppes (kestus {duration})", + "Call with {user1} ended (Duration {duration})" : "Kõne kasutajaga „{user1}“ lõppes (kestus {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} lõpetas kõne kasutajaga „{user1}“ (kestus {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“ ja „{user2}“ lõppes (kestus {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Kõne osalejatega {user1} ja {user2} lõppes (kestus {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“ ja „{user2}“ (kestus {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“ ja „{user3}“ lõppes (kestus {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2} ja {user3} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“ ja „{user3}“ (kestus {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“, „{user3}“ ja „{user4}“ lõppes (kestus {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2}, {user3} ja {user4} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“, „{user3}“ ja „{user4}“ (kestus {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Kuna pikim lubatud kestus jõudis kätte, siis kõne kasutajatega „{user1}“, „{user2}“, „{user3}“, „{user4}“ ja „{user5}“ lõppes (kestus {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Kõne osalejatega {user1}, {user2}, {user3}, {user4} ja {user5} lõppes (kestus {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} lõpetas kõne kasutajatega „{user1}“, „{user2}“, „{user3}“, „{user4}“ ja „{user5}“ (kestus {duration})", + "Message of {user} in {conversation}" : "Sõnum kasutajalt „{user}“ „{conversation}“ vestluses", + "Message of {user}" : "Sõnum kasutajalt {user}", + "Message of a deleted user in {conversation}" : "Sõnum kustutatud kasutajalt „{conversation}“ vestluses", + "Talk conversations" : "Vestlused kõnerakenduses Talk", + "Talk to %s" : "Suhtle: %s", + "An error occurred. Please contact your administrator." : "Tekkis viga. Palun võta ühendust oma peakasutajaga.", + "App disabled" : "Rakendus on kasutuselt eemaldatud", + "Conversation subfolders are disabled" : "Vestluse alamkaustad pole kasutusel", + "Storage quota exceeded" : "Andmeruumi kvoot on ületatud", + "Could not prepare conversation folder" : "Vestluse kausta ettevalmistamine ei õnnestunud", + "File not found" : "Faili ei leidu", + "Path must point to a file" : "Asukoht peab viitama failile", + "File is not inside the conversation draft folder for this room" : "Fail pole selle jututoa vestluste kavandite kaustas", + "File is not shared, or shared but not with the user" : "Faili kas pole jagatud või kui on jagatud, siis mitte selle kasutajaga", + "No account available to delete." : "Pole kasutajakontot, mida kustutada.", + "Poll" : "Küsitlus", + "Password needs to be set" : "Salasõna peab olema lisatud", + "Uploading the file failed" : "Faili ei õnnestunud üles laadida", + "No image file provided" : "Pilt on lisamata", + "File is too big" : "Fail on liiga suur", + "Invalid file provided" : "Vigane fail", + "Invalid image" : "Vigane pilt", + "Unknown filetype" : "Tundmatu failitüüp", + "Talk mentions" : "Mainimised kõnerakenduses", + "More conversations" : "Veel vestlusi", + "Say hi to your friends and colleagues!" : "Ütle tere oma sõpradele ja kolleegidele!", + "No unread mentions" : "Pole lugemata mainimisi", + "Call in progress" : "Kõne on pooleli", + "You were mentioned" : "Sind on mainitud", + "Write to conversation" : "Kirjuta vestlusesse", + "Writes event information into a conversation of your choice" : "Saadab sündmuse teabe sinu valitud vestlusesse", + "Missing email field in header line" : "Päises on puudu e-posti aadressi väli", + "Following lines are invalid: %s" : "Järgnevad read on vigased: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s kutsus sind „%2$s“ vestlusesse.", + "You were invited to conversation \"%s\"." : "Sa said kutse „%s“ vestlusesse.", + "Conversation invitation" : "Kutse vestlusesse", + "Scheduled time" : "Plaanitud aeg", + "Description" : "Kirjeldus", + "You can also dial-in via phone with the following details" : "Sa võid kasutada ka telefoniga sissehelistamisvõimalust järgmiste andmetega", + "Dial-in information" : "Sissehelistamisteenuse teave", + "Meeting ID" : "Kohtumise tunnus", + "Your PIN" : "Sinu PIN-kood", + "Click the button below to join the lobby now." : "Ooteruumiga liitumiseks vajuta allolevat nuppu.", + "Click the link below to join the lobby now." : "Ooteruumiga liitumiseks vajuta allolevat linki.", + "Join lobby for \"%s\"" : "Sisene „%s“ ooteruumi", + "Click the button below to join the conversation now." : "Vestlusega liitumiseks vajuta allolevat nuppu.", + "Click the link below to join the conversation now." : "Vestlusega liitumiseks vajuta allolevat linki.", + "Join \"%s\"" : "Liitu: „%s“", + "Meeting" : "Kohtumine", + "Password request: %s" : "Salasõnapäring: %s", + "Private conversation" : "Privaatne vestlus", + "Deleted user (%s)" : "Kustutatud kasutaja (%s)", + "Failed to upload call recording" : "Ei õnnestu üles laadida kõnesalvestust", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Serveril ei õnnestunud üles laadida „{call}“ kõne salvestust. Palun küsi abi peakasutajalt.", + "Share to chat" : "Jaga vestlusesse", + "Dismiss notification" : "Sulge teavitus", + "Call recording now available" : "Kõnesalvestus on nüüd saadaval", + "The recording for the call in {call} was uploaded to {file}." : "„{call}“ kõne salvestus on üleslaaditud „{file}“ faili.", + "Transcript now available" : "Üleskirjutus on nüüd saadaval", + "The transcript for the call in {call} was uploaded to {file}." : "„{call}“ kõne üleskirjutus on salvestatud ja üleslaaditud „{file}“ faili.", + "Failed to transcript call recording" : "Kõnesalvestuse üleskirjutamine ei õnnestunud", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveril ei õnnestunud üles kirjutada „{call}“ kõne salvestust failist „{file}“. Palun küsi abi peakasutajalt.", + "Call summary now available" : "Kõne kokkuvõte on nüüd saadaval", + "The summary for the call in {call} was uploaded to {file}." : "Kokkuvõte „{call}“ kõnest on nüüd üles laaditus „{file}“ failina.", + "Failed to summarize call recording" : "Kõnest kokkuvõtte tegemine ei õnnestu", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveril ei õnnestunud teha kokkuvõtet „{call}“ kõne salvestusest failis „{file}“. Palun küsi abi peakasutajalt.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} saatis sulle kutse „{roomName}“ jututuppa liitpilve serveris „{remoteServer}“", + "Accept" : "Võta vastu", + "Decline" : "Keeldu", + "{user1} invited you to a federated conversation" : "{user1} saatis sulle kutse vestlusele liitpilves", + "Someone reacted" : "Keegi reageeris", + "New message" : "Uus sõnum", + "Reminder" : "Meeldetuletused", + "Someone mentioned you" : "Keegi mainis sind", + "Notification" : "Teavitus", + "Someone reacted in a private conversation" : "Keegi reageeris privaatses vestluses", + "You received a message in a private conversation" : "Sina said privaatses vestluses sõnumi", + "Reminder in a private conversation" : "Meeldetuletus privaatses vestluses", + "Someone mentioned you in a private conversation" : "Keegi mainis sind privaatses vestluses", + "Notification in a private conversation" : "Teavitus privaatses vestluses", + "Reminder: You in {call}" : "Meeldetuletus: sina „{call}“ kõnes", + "Reminder: {user} in {call}" : "Meeldetuletus: {user} „{call}“ kõnes", + "Reminder: Deleted user in {call}" : "Meeldetuletus: kustutatud kasutaja „{call}“ kõnes", + "Reminder: {guest} (guest) in {call}" : "Meeldetuletus: „{guest}“ (külaline) „{call}“ kõnes", + "Reminder: Guest in {call}" : "Meeldetuletus: külaline „{call}“ kõnes", + "{user} reacted with {reaction}" : "{user} reageeris: {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reageeris {call} kõnes: {reaction}", + "Deleted user reacted with {reaction} in {call}" : "Kustutatud kasutaja reageeris {call} kõnes: {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (külaline) reageeris {call} kõnes: {reaction}", + "Guest reacted with {reaction} in {call}" : "Külaline reageeris {call} kõnes: {reaction}", + "{user} in {call}" : "„{user}“ kasutaja „{call}“ kõnes", + "Deleted user in {call}" : "Kustutatud kasutaja „{call}“ kõnes", + "{guest} (guest) in {call}" : "„{guest}“ (külaline) „{call}“ kõnes", + "Guest in {call}" : "Külaline „{call}“ kõnes", + "{user} sent you a private message" : "{user} saatis sulle privaatse sõnumi", + "{user} sent a message in conversation {call}" : "{user} saatis „{call}“ vestluses sõnumi", + "A deleted user sent a message in conversation {call}" : "Kustutatud kasutaja saatis „{call}“ vestluses sõnumi", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (külaline) saatis „{call}“ vestluses sõnumi", + "A guest sent a message in conversation {call}" : "Külaline saatis „{call}“ vestluses sõnumi", + "{user} replied to your private message" : "{user} vastas sinu privaatsele sõnumile", + "{user} replied to your message in conversation {call}" : "{user} vastas „{call}“ vestluses sinu sõnumile", + "A deleted user replied to your message in conversation {call}" : "Kustutatud kasutaja vastas „{call}“ vestluses sinu sõnumile", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (külaline) vastas „{call}“ vestluses sinu sõnumile", + "A guest replied to your message in conversation {call}" : "Külaline vastas „{call}“ vestluses sinu sõnumile", + "Reminder: You in private conversation {call}" : "Meeldetuletus: sina privaatses vestluses „{call}“", + "Reminder: A deleted user in private conversation {call}" : "Meeldetuletus: kustutatud kasutaja privaatses vestluses „{call}“", + "Reminder: {user} in private conversation" : "Meeldetuletus: {user} privaatses vestluses", + "Reminder: You in conversation {call}" : "Meeldetuletus: sina vestluses „{call}“", + "Reminder: {user} in conversation {call}" : "Meeldetuletus: {user} vestluses „{call}“", + "Reminder: A deleted user in conversation {call}" : "Meeldetuletus: kustutatud kasutaja vestluses „{call}“", + "Reminder: {guest} (guest) in conversation {call}" : "Meeldetuletus: {guest} (külaline) vestluses „{call}“", + "Reminder: A guest in conversation {call}" : "Meeldetuletus: külaline vestluses „{call}“", + "{user} reacted with {reaction} to your private message" : "{user} reageeris sinu privaatsele sõnumile {reaction} emojiga", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Kustutatud kasutaja reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (külaline) reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "A guest reacted with {reaction} to your message in conversation {call}" : "Külaline reageeris sinu sõnumile „{call}“ vestluses {reaction} emojiga", + "{user} mentioned you in a private conversation" : "{user} mainis sind privaatses vestluses", + "{user} mentioned group {group} in conversation {call}" : "{user} mainis „{group}“ gruppi „{call}“ vestluses", + "{user} mentioned team {team} in conversation {call}" : "{user} mainis „{team}“ tiimi „{call}“ vestluses", + "{user} mentioned everyone in conversation {call}" : "{user} mainis „{call}“ vestluses kõiki", + "{user} mentioned you in conversation {call}" : "{user} mainis sind „{call}“ vestluses", + "A deleted user mentioned group {group} in conversation {call}" : "Kustutatud kasutaja mainis „{group}“ gruppi „{call}“ vestluses", + "A deleted user mentioned team {team} in conversation {call}" : "Kustutatud kasutaja mainis „{team}“ tiimi „{call}“ vestluses", + "A deleted user mentioned everyone in conversation {call}" : "Kustutatud kasutaja mainis „{call}“ vestluses kõiki", + "A deleted user mentioned you in conversation {call}" : "Kustutatud kasutaja mainis sind „{call}“ vestluses", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (külaline) mainis „{group}“ gruppi „{call}“ vestluses", + "{guest} (guest) mentioned team {team} in conversation {call}" : "„{guest}“ (külaline) mainis „{call}“ vestluses „{team}“ tiimi", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (külaline) mainis „{call}“ vestluses kõiki", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (külaline) mainis sind „{call}“ vestluses", + "A guest mentioned group {group} in conversation {call}" : "Külaline mainis „{group}“ gruppi „{call}“ vestluses", + "A guest mentioned team {team} in conversation {call}" : "Külaline mainis „{call}“ vestluses „{team}“ tiimi", + "A guest mentioned everyone in conversation {call}" : "Külaline mainis „{call}“ vestluses kõiki", + "A guest mentioned you in conversation {call}" : "Külaline mainis sind „{call}“ vestluses", + "View message" : "Vaata sõnumit", + "Dismiss reminder" : "Loobu meeldetuletusest", + "View chat" : "Vaata vestlust", + "{user} invited you to a group conversation: {call}" : "{user} kutsus sind osalema rühmavestluses: {call}", + "Join call" : "Liitu kõnega", + "Answer call" : "Vastama kõnele", + "{user} would like to talk with you" : "{user} soovib sinuga rääkida", + "Call back" : "Helista tagasi", + "You missed a call from {user}" : "Vastamata kõne kasutajalt {user}", + "Accept call" : "Võta kõne vastu", + "Incoming phone call from {call}" : "Saabuv kõne kasutajalt „{call}“", + "You missed a phone call from {call}" : "Kasutaja „{call}“ kõne jäi sul märkamata", + "A group call has started in {call}" : "Rühmakõne algas siin: {call}", + "You missed a group call in {call}" : "Vastamata kõne grupis {call}", + "{email} is requesting the password to access {file}" : "„{email}“ soovib ligipääsuks „{file}“ failile salasõna", + "{email} tried to request the password to access {file}" : "„{email}“ soovis ligipääsuks „{file}“ failile küsida salasõna", + "Someone is requesting the password to access {file}" : "Keegi soovib ligipääsuks „{file}“ failile salasõna", + "Someone tried to request the password to access {file}" : "Keegi soovis ligipääsuks „{file}“ failile küsida salasõna", + "Open settings" : "Ava seadistused", + "Hosted signaling server added" : "Teenusepakkuja kõnehõlbustusserver on lisatud", + "The hosted signaling server is now configured and will be used." : "Väline kõnehõlbustusserver on nüüd seadistatud ja kasutusel.", + "Hosted signaling server removed" : "Teenusepakkuja kõnehõlbustusserver on eemaldatud", + "The hosted signaling server was removed and will not be used anymore." : "Väline kõnehõlbustusserver on nüüd eemaldatud ja pole enam kasutusel.", + "Hosted signaling server changed" : "Teenusepakkuja kõnehõlbustusserver on muutunud", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Teenusepakkuja kõnehõlbustusserveri kasutajakonto olek on muutunud: „{oldstatus}“ → „{newstatus}“.", + "pending" : "ootel", + "active" : "aktiivne", + "expired" : "aegunud", + "blocked" : "blokeeritud", + "error" : "viga", + "The certificate of {host} expires in {days} days" : "{host} serveri sertifikaat aegub {days} päeva pärast", + "The certificate of {host} expired" : "{host} serveri sertifikaat on aegunud", + "Contact via Talk" : "Suhtle Kõnerakenduses", + "Open Talk" : "Ava kõnerakendus", + "Default" : "Vaikeväärtus", + "Send messages, create threads, and start voice and video calls." : "Saada sõnumeid, koosta jutulõngu ja helista tava- või videokõnena.", + "Presentation" : "Esitlus", + "Voice room" : "Jututuba häälkõnede jaoks", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Liitumine kõnega otse, ideaalne jätkusündmuste ja spontaansete kohtumiste jaoks.", + "Webinar" : "Veebiseminar", + "Conversations" : "Vestlused", + "Messages in current conversation" : "Sõnumid selles vestlustes", + "{user}" : "{user}", + "Messages" : "Sõnumid", + "{user} in {conversation}" : "„{user}“ kasutaja „{conversation}“ kõnes", + "Messages in other conversations" : "Sõnumid muudes vestlustes", + "One-to-one rooms always need to show the other users avatar" : "Kahepoolsetes vestlustes on osalejate tunnuspildid alati kuvatud", + "Invalid emoji character" : "Vigane emoji tähemärk", + "Invalid background color" : "Vigane taustavärv", + "Avatar image is not square" : "Avatari pilt pole ruut", + "Room {number}" : "Ruum: {number}", + "Other" : "Muu", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Kuna testserver polnud leitav, siis testperioodi taotlemine polnud võimalik. Palun proovi hiljem uuesti.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Selle serveri autentimisel tekkis viga. Võibolla ei saa talle väljastpoolt ligi ja seega võrguaadress pole kontrollitav.", + "Something unexpected happened." : "Juhtus midagi ootamatut.", + "The URL is invalid." : "Antud võrguaadress on vigane.", + "An HTTPS URL is required." : "HTTPS-protokolliga võrguaadress on nõutav.", + "The email address is invalid." : "See e-posti aadress on vigane.", + "The language is invalid." : "Antud keel on vale.", + "The country is invalid." : "Antud maa on vigane.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Prooviversiooni päringuga on üks probleem. Täpsemat teavet leiad logidest.", + "Too many requests are send from your servers address. Please try again later." : "Sinu serveri aadressilt on saadetud liiga palju päringuid. Palun proovi hiljem uuesti.", + "There is already a trial registered for this Nextcloud instance." : "Selle Nexctcloudi serveri jaoks on prooviperiood juba registreeritud.", + "Something unexpected happened. Please try again later." : "Juhtus midagi ootamatut. Palun proovi hiljem uuesti.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Kuna testserver toimis valesti, siis testperioodi taotlemine polnud võimalik. Palun proovi hiljem uuesti.", + "Trial requested but failed to get account information. Please check back later." : "Prooviperiood on registreeritud, kuid kasutajakonto andmeid pole võimalik laadida. Palun proovi hiljem uuesti.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Selle päringu autentimisel tekkis viga. Võibolla ei saa talle väljastpoolt ligi ja seega võrguaadress pole kontrollitav.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kuna testserver toimis valesti, siis kasutajakonto laadimine polnud võimalik. Palun proovi hiljem uuesti.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kasutajakonto teabe laadimisel on üks probleem. Täpsemat teavet leiad logidest.", + "There is no such account registered." : "Sellist registreeritud kasutajakontot pole.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kuna testserver polnud leitav, siis kasutajakonto andmete laadimine polnud võimalik. Palun proovi hiljem uuesti.", + "Deleting the hosted signaling server account failed. Please check back later." : "Ei õnnestunud kustutada kõnehõlbustusserveri kasutajakontot. Palun proovi hiljem uuesti.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kuna testserver toimis valesti, siis testperioodi kasutajakonto kustutamine polnud võimalik. Palun proovi hiljem uuesti.", + "Too many requests are sent from your servers address. Please try again later." : "Sinu serveri aadressilt on saadetud liiga palju päringuid. Palun proovi hiljem uuesti.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kuna testserver polnud leitav, siis kasutajakonto kustutamine polnud võimalik. Palun proovi hiljem uuesti.", + "Note to self" : "Minu märkmed", + "A place for your private notes, thoughts and ideas" : "Koht isiklike märkmete, mõtete ja ideede jaoks", + "Transcript is AI generated and may contain mistakes" : "See üleskirjutus on tehisaru koostatud ja võib sisaldada vigu.", + "Summary is AI generated and may contain mistakes" : "See kokkuvõte on tehisaru koostatud ja võib sisaldada vigu", + "Let's get started!" : "Alustame!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** on turvaline ja sinu omas serveris töötav suhtlusplatvorm, mis lõimub sujuvalt muu Nextcloudi ökosüsteemiga.\n\n#### Nextcloudi vestlustakenduse võimalused:\n\n* Kahepoolsed ja rühmavestlused\n* Hääl- ja videokõned\n* Failide jagamine ja lõimingud muude Nextcloudi rakendustega\n* Kohendatavad vestluse seadistused, modereerimise ja turvalisuse haldus\n* Kasutatav veebibrauseris, töölaual ja nutiseadmes (iOS ja Android)\n* Privaatne ja turvaline suhtlus\n\nLisateavet leiad [juhendist](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Tere tulemast - see on Nextcloud Talk\n\nNextcloudi vestlusrakendus on turvaline ja võimas suhtlusplatvorm, mis lõimub sujuvalt muu Nextcloudi ökosüsteemiga. Kasuta kahepoolset või rühmavestlust, lihtsusta koostööd hääl- ja videokõnede abil, korralda vebinare ja sündmusi, kohenda vestlusi vastavalt vajadusele ja palju muud.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Lisa manuseid ja linke\n\n+ ikoonist saad lisada oma faile oma Nextcloudi serverist. Failirakendusest ja erinevatest Nextcloudi rakendustest saad jagada sisu. Mõned rakendused, nagu tekstirakendus, toetavad ka interaktiivsete vidinate kasutamist.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lase vestlusel kulgeda: maini kasutajaid, reageeri sõnumitele ja palju muud\n\nVestluses saadi mainida kõiki „%s“ abil või ühte konkreetset osalejat sisestades „@“ valides loendist soovitud nime.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Sa võid sõnumitele vastata, neid teistesse vestlustesse või teistele kasutajatele edastada ning kopeerida sõnumite sisu.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Vestluse seadistuste haldus\n\nVestluse menüüst leiad erinevaid võimalusi vestluste haldamiseks, näiteks:\n* Vestluse teabe muutmine\n* Teavituste haldus\n* Modereerimisreeglite kasutus\n* Ligipääsu ja turvalisuse seadistused\n* Robotite kasutus\n* ja palju muud!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Araabia Ühendemiraadid", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ja Barbuda ", + "Anguilla" : "Anguilla", + "Albania" : "Albaania", + "Armenia" : "Armeenia", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Ameerika Samoa", + "Austria" : "Austria", + "Australia" : "Austraalia", + "Aruba" : "Aruba", + "Åland Islands" : "Ahvenamaa", + "Azerbaijan" : "Aserbaidžaan", + "Bosnia and Herzegovina" : "Bosnia ja Hertsegoviina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Boliivia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ja Saba", + "Brazil" : "Brasiilia", + "Bahamas" : "Bahama", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet' saar", + "Botswana" : "Botswana", + "Belarus" : "Valgevene", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kookossaared", + "Congo, the Democratic Republic of the" : "Kongo DV", + "Central African Republic" : "Kesk-Aafrika Vabariik", + "Congo" : "Kongo Vabariik", + "Switzerland" : "Šveits", + "Côte d'Ivoire" : "Elevandiluurannik", + "Cook Islands" : "Cooki saared", + "Chile" : "Tšiili", + "Cameroon" : "Kamerun", + "China" : "Hiina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuuba", + "Cabo Verde" : "Roheneemesaared", + "Curaçao" : "Curaçao", + "Christmas Island" : "Jõulusaar", + "Cyprus" : "Küpros", + "Czechia" : "Tšehhi", + "Germany" : "Saksamaa", + "Djibouti" : "Djibouti", + "Denmark" : "Taani", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikaani Vabariik", + "Algeria" : "Alžeeria", + "Ecuador" : "Ecuador", + "Estonia" : "Eesti", + "Egypt" : "Egiptus", + "Western Sahara" : "Lääne-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Hispaania", + "Ethiopia" : "Etioopia", + "Finland" : "Soome", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandi (Malviini) saared", + "Micronesia, Federated States of" : "Mikroneesia", + "Faroe Islands" : "Fääri saared", + "France" : "Prantsusmaa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Suurbritannia", + "Grenada" : "Grenada", + "Georgia" : "Gruusia", + "French Guiana" : "Prantsuse Guajaana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Gröönimaa", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatoriaal-Guinea", + "Greece" : "Kreeka", + "South Georgia and the South Sandwich Islands" : "Lõuna-Georgia ja Lõuna-Sandwichi saared", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hongkong", + "Heard Island and McDonald Islands" : "Heard ja McDonald", + "Honduras" : "Honduras", + "Croatia" : "Horvaatia", + "Haiti" : "Haiti", + "Hungary" : "Ungari", + "Indonesia" : "Indoneesia", + "Ireland" : "Iirimaa", + "Israel" : "Iisrael", + "Isle of Man" : "Mani saar", + "India" : "India", + "British Indian Ocean Territory" : "Briti India ookeani ala", + "Iraq" : "Iraag", + "Iran, Islamic Republic of" : "Iraan", + "Iceland" : "Island", + "Italy" : "Itaalia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordaania", + "Japan" : "Jaapan", + "Kenya" : "Keenia", + "Kyrgyzstan" : "Kõrgõzstan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komoorid", + "Saint Kitts and Nevis" : "Saint Kitts ja Nevis", + "Korea, Democratic People's Republic of" : "Põhja-Korea", + "Korea, Republic of" : "Lõuna-Korea", + "Kuwait" : "Kuveit", + "Cayman Islands" : "Kaimanisaared", + "Kazakhstan" : "Kasahstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Liibanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libeeria", + "Lesotho" : "Lesotho", + "Lithuania" : "Leedu", + "Luxembourg" : "Luksemburg", + "Latvia" : "Läti", + "Libya" : "Liibia", + "Morocco" : "Maroko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint-Martin", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshalli Saared", + "North Macedonia" : "Põhja-Makedoonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Põhja-Mariaanid", + "Martinique" : "Martinique", + "Mauritania" : "Mauritaania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiivid", + "Malawi" : "Malawi", + "Mexico" : "Mehhiko", + "Malaysia" : "Malaisia", + "Mozambique" : "Mosambiik", + "Namibia" : "Namiibia", + "New Caledonia" : "Uus-Kaledoonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk", + "Nigeria" : "Nigeeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holland", + "Norway" : "Norra", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Uus-Meremaa", + "Oman" : "Omaan", + "Panama" : "Panama", + "Peru" : "Peruu", + "French Polynesia" : "Prantsuse Polüneesia", + "Papua New Guinea" : "Paapua Uus-Guinea", + "Philippines" : "Filipiinid", + "Pakistan" : "Pakistan", + "Poland" : "Poola", + "Saint Pierre and Miquelon" : "Saint-Pierre ja Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestiina", + "Portugal" : "Portugal", + "Palau" : "Belau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumeenia", + "Serbia" : "Serbia", + "Russian Federation" : "Venemaa", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Araabia", + "Solomon Islands" : "Saalomoni Saared", + "Seychelles" : "Seišellid", + "Sudan" : "Sudaan", + "Sweden" : "Rootsi", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ja Tristan da Cunha", + "Slovenia" : "Sloveenia", + "Svalbard and Jan Mayen" : "Svalbard ja Jan Mayen", + "Slovakia" : "Slovakkia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somaalia", + "Suriname" : "Suriname", + "South Sudan" : "Lõuna-Sudaan", + "Sao Tome and Principe" : "São Tomé ja Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Süüria", + "Eswatini" : "Svaasimaa", + "Turks and Caicos Islands" : "Turks ja Caicos", + "Chad" : "Tšaad", + "French Southern Territories" : "Prantsuse Lõunaalad", + "Togo" : "Togo", + "Thailand" : "Tai", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Ida-Timor", + "Turkmenistan" : "Türkmenistan", + "Tunisia" : "Tuneesia", + "Tonga" : "Tonga", + "Turkey" : "Türgi", + "Trinidad and Tobago" : "Trinidad ja Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tansaania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ühendriikide hajasaared", + "United States of America" : "Ameerika Ühendriigid", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Usbekistan", + "Holy See" : "Vatikan", + "Saint Vincent and the Grenadines" : "Saint Vincent ja Grenadiinid", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Briti Neitsisaared", + "Virgin Islands, U.S." : "USA Neitsisaared", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ja Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jeemen", + "Mayotte" : "Mayotte", + "South Africa" : "Lõuna-Aafrika Vabariik", + "Zambia" : "Sambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Tausta hägustamine", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Ei õnnestunud kontrollida, kas WASM-failide tugi toimib. Palun kontrolli käsitsi, kas sinu veebiserver suudab edastada .wasm faile.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Sinu veebiserver ei edasta korrektselt „.wasm“ faile. See on tüüpiline viga, mis võib tekkida Nginxi serverites. Tausta hägustamise jaoks aga on selliste failide saadavus vajalik. Palun võrdle oma Nginxi serveri seadistusi juhendis näidatuga.", + "Talk configuration values" : "Talk kõnerakenduse seadistused", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Kõne maksimumkestuse jõustamine toimib vaid siis, kui kasutusel on süstmne cron. Seega palun võta cron kasutusele või eemalda seadistustest „max_call_duration“.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Väga väikesed kõne maksimumkestused („max_call_duration“, praeguse väärtusega %d) pole tegelikkuses jõustatavad. Taustateenus, mis seda kontrollib, käivitub vaid iga 5 minuti järel, seega palun arvesta sellega.", + "Federation" : "Liitpilv", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Kui kõnerakendus on liitpilvele avatud, siis me soovitame, et seadistad „memcache.locking“ tingimuse.", + "High-performance backend" : "Suure jõudlusega taustateenus", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Suure jõudlusega taustateenus pole seadistatud. Nextcloudi kõnerakenduse käitamine ilma selle teenuseta skaleerub vaid väga väikese osalejate arvuga kõnedele (2-3 osalejat). Tagamaks, et paljude osalejatega kõned toimivad sujuvalt, palun seadista Suure jõudlusega taustateenus.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Suure jõudlusega taustateenuse käitamine vestlusklastri režiimis (conversation_cluster) on aegunud ja see pole enam järgmises versioonis toetatud. Selle asemel peaks suure jõudlusega taustateenuse puhul kasutama tänapäeval asjakohast päris klasterdusrežiimi.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Mitme suure jõudlusega taustateenuse kasutamine on aegunud ja see pole enam järgmises versioonis toetatud. Selle asemel peaksid seadistama koormuse tasakaalustamisteenuse koos klasterdatud signaliseerimisserveriga ning seadistama need kõnerakenduse seadistustes.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "%1$s algoritmi salvestatud avalik võti ei vasta salvestatud privaatvõtmele. Vea parandamiseks käivita: %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "Suure jõudlusega taustateenus pole korrektselt seadistatud. Üksikasjalikku teavet saad, kui käivitad: %s.", + "High-performance backend not configured correctly" : "Suure jõudlusega taustateenus pole korrektselt seadistatud", + "Error: Cannot connect to server" : "Viga: serveriga ühenduse loomine ei õnnestu", + "Error: Server did not respond with proper JSON" : "Viga: Serveri vastuseks polnud korrektne json", + "Error: Certificate expired" : "Viga: sertifikaat on aegunud", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Viga: Nextcloudi severi ja suure jõudlusega taustateenuse süsteemsed kellaajad pole sünkroonis. Palun kontrolli, et mõlemas serveris oleks seadistatud ajateenuse kasutamine või sünkrooni nende kellaajad käsitsi.", + "Could not get version" : "Ei õnnestunud tuvastada versiooni", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Viga: Kasutusel olev versioon on {version}, aga server vajab selle Talki versiooniga ühilduvuse nimel uuendamist ", + "Error: Server responded with: {error}" : "Viga: serveri vastuseks on {error}", + "Error: Unknown error occurred" : "Viga: tekkis tundmatu viga", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Hoiatus: töötav versioon on {version}; server ei toeta kõiki kõnerakenduse funktsionaalsusi, neist on puudu: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Kui kasutad Nextcloudi vestlusrakendust suure jõudlusega taustateenusega, siis soovitame, et seadistad ka mälupuhverduse.", + "Client Push" : "Tõuketeenused kliendile", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Tõuketeenused kliendile on paigaldatud ja see parandab vestlusrakenduste teavituste liikumise kiirust.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} pole paigaldatud ja see võib vestlusrakenduse klientide puhul tekitada viivitusi sõnumite edastamisel.", + "Recording backend" : "Salvestuse taustateenus", + "Using the recording backend requires a High-performance backend." : "Salvestuse funktsionaalsuse kasutamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "No recording backend configured" : "Ühtegi salvestuse taustateenust pole seadistatud", + "SIP configuration" : "SIP-i seadistused", + "Using the SIP functionality requires a High-performance backend." : "SIP-i funktsionaalsuse kasutamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "No SIP backend configured" : "Ühtegi SIP-i taustateenust pole seadistatud", + "Invalid date, date format must be YYYY-MM-DD" : "Vigane kuupäev, vorming peab olema YYYY-MM-DD", + "Conversation not found" : "Vestlust ei leidu", + "Path is already shared with this conversation" : "Asukoht on selle vestlusega juba jagatud", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC-liidetusel põhinevad vestlused, kõned ning videokohtumised", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Vestlused ja WebRTC vahendusel toimivad video- ja audiokonverentsid * 💬 **Vestlus** Nextcloudi kõnerakenduses (Nextcloud Talk) leidub lihtne vestluslahendus võimalusega jagada faile Nextcloudi failirakendusest või laadida neid üles oma kohalikust seadmest - kõike seda koos teiste osalejate mainimise võimlusega.* 👥 **Privaatsed kahepoolsed ja rühmakõned nii avalikuna kui salasõnaga kaitstuna!** Kutsu kõnes osalema ükshaaval või grupi kaupa või hoopis saada kõnega liitumiseks avalik kutse.* 🌐 **Födereeritud vestlused** Vestle kasutajatega muudes Nextcloudi serverites* 💻 **Ekraani jagamine!** Jaga oma seadme ekraani teiste kõnes osalejatega.* 🚀 **Lõiming muude Nextcloudi rakendustega** nagu näiteks Failid, Kalender, Kasutajate olek, Juhtpaneel, Töövoog, Kaardid, Nutivalija, Kontaktid, Kanban ja muud.* 🌉 **Sünkrooni muude vestlusrakendustega** Kasutades [Matterbridge'i](https://github.com/42wim/matterbridge/) lõimingut vestlusrakenduses, saad mugavasti mõlemas suunas suhelda muude vestlusrakendustega.", + "Leave call" : "Lahku kõnest", + "Navigating away from the page will leave the call in {conversation}" : "Kui lahkud sellelt lehelt, siis lahkud ka „{conversation}“ vestluse kõnest", + "Stay in call" : "Püsi kõnes", + "Error occurred when getting the conversation information" : "Vestluse teabe laadimisel tekkis viga", + "Discuss this file" : "Vestle faili sisu teemal", + "Share this file with others to discuss it" : "Jaga seda faili teistega ning saad kõikide osalejatega faili sisu arutada", + "Share this file" : "Jaga seda faili", + "Join conversation" : "Liitu vestlusega", + "This conversation is password-protected." : "See vestlus on kaitstud salasõnaga", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Me oleme tuvastanud mitu vigast salasõna sisestust sinu ip-aadressilt. Seetõttu kasutame nüüd 30-sekundilist hingamishetke.", + "The password is wrong. Try again." : "Salasõna on vale. Proovi uuesti.", + "Password" : "Salasõna", + "Submit" : "Saada", + "Error requesting the password." : "Viga salasõna küsimisel", + "Request password" : "Küsi salasõna", + "This conversation has ended" : "See vestlus on lõppenud", + "Error occurred when joining the conversation" : "Viga kõnega liitumisel", + "Close Talk sidebar" : "Sulge vestlusrakenduse külgriba", + "Open Talk sidebar" : "Ava vestlusrakenduse külgriba", + "Everyone" : "Igaüks", + "Users and moderators" : "Kasutajad ja moderaatorid", + "Moderators only" : "Vaid moderaatorid", + "Disable calls" : "Lülita kõned välja", + "Save changes" : "Salvesta muudatused", + "Saving …" : "Salvestamine …", + "Saved!" : "Salvestatud!", + "Limit to groups" : "Luba gruppidele", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Kui vähemalt üks grupp on valitud, siis vaid loetletud grupi/gruppide liikmed saavad osaleda vestlustes.", + "Guests can still join public conversations." : "Külalised saavad jätkuvalt liituda avalike vestlustega.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Kasutajad, kes enam ei saa kõnerakendust kasutada, on jätkuvalt kirjas oma varasemate vestluste osalejatena ning ka nende sõnumid on jätkuvalt nähtavad.", + "Limit using Talk" : "Piira kõnerakenduse kasutamist", + "Limit creating a public and group conversation" : "Piira avalike ja rühmavestluste loomist", + "Limit creating conversations" : "Piira vestluste loomist", + "Limit starting a call" : "Piira helistamist", + "Limit starting calls" : "Piira helistamist", + "When a call has started, everyone with access to the conversation can join the call." : "Kui kõne on alanud, siis kõik, kellel on ligipääs lubatud, saavad kõnega liituda.", + "Description is not provided" : "Kirjeldus on lisamata", + "Locked for moderators" : "Lukustatud moderaatorite jaoks", + "Enabled" : "Sisse lülitatud", + "Disabled" : "Keelatud", + "Bots settings" : "Robotite seadistused", + "State" : "Olek", + "Name" : "Nimi", + "Last error" : "Viimane viga", + "Total errors count" : "Vigu kokku", + "Find more bots" : "Otsi veel roboteid", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Usaldusväärseid servereid saab seadistada siin: {linkstart} Jagamisleht on {linkend}.", + "Beta" : "Beetaversioon", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Vestlused ja kõned toimivad ka liitpilves. Manuste saatmine lisandub tulevases versioonis.", + "Enable Federation in Talk app" : "Lülita kõnerakenduses sisse liitpilve kasutamine", + "Permissions" : "Õigused", + "Allow users to be invited to federated conversations" : "Luba kasutajate liitumist vestlustega liitpilves", + "Allow users to invite federated users into conversation" : "Luba kasutajatel saata vestluskutseid kasutajatele liitpilves", + "Only allow to federate with trusted servers" : "Luba liitvõrgus kasutada vaid usaldusväärseid servereid", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Kui vähemalt üks grupp on valitud, siis vaid loetletud grupi/gruppide liikmed saavad saata vestluskutseid kasutajatele liitpilves.", + "Groups allowed to invite federated users" : "Grupid, mille liikmed võivad saata kutseit kasutajatele liitpilves", + "Select groups …" : "Vali grupid…", + "All messages" : "Kõik sõnumid", + "@-mentions only" : "Vaid @-mainimised", + "Off" : "Pole kasutusel", + "General settings" : "Üldised seadistusted", + "Default notification settings" : "Vaikimisi teavituste seadistused", + "Default group notification" : "Vaikimisi grupiteavitus", + "Default group notification for new groups" : "Vaikimisi grupiteavitus uute gruppide jaoks", + "Integration into other apps" : "Lõiming muude rakendustega", + "Allow conversations on files" : "Luba failide teisendamine", + "Allow conversations on public shares for files" : "Luba avalikult jagatud failide teisendamist", + "End-to-end encrypted calls" : "Läbivalt krüptitud kõned", + "Enable encryption" : "Luba krüptimine", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Seadistatud SIP-i võrgusilla vahendusel tehtavad läbivalt krüptitud kõned eeldavad uuema suure jõudlusega taustateenuse ja SIP-i võrgusilla kasutamist.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Nutiseadmete kliendid hetkel ei toeta läbivalt krüptitud kõnesid", + "Pending" : "Ootel", + "Error" : "Viga", + "Blocked" : "Blokeeritud", + "Active" : "Aktiivne", + "Expired" : "Aegunud", + "Never" : "Mitte kunagi", + "The trial could not be requested. Please try again later." : "Testperioodi päringut polnud võimalik saata. Palun proovi hiljem uuesti.", + "The account could not be deleted. Please try again later." : "Seda kasutajakontot polnud võimalik kustutada. Palun proovi hiljem uuesti.", + "Hosted High-performance backend" : "Suure jõudlusega taustateenus välise teenusepakkuja poolt", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Kui hetkel kasutatav suure jõudlusega taustateenuses leidub ka STUN- ja/või TURN-komponendid, siis seadistused muutuvad vastavalt.", + "URL of this Nextcloud instance" : "Selle Nextcloudi serveri võrguaadress", + "Full name of the user requesting the trial" : "Testperioodi taotluse esitaja täisnimi", + "Email of the user" : "Kasutaja e-posti aadress", + "Language" : "Keel", + "Country" : "Maa", + "Request signaling server trial" : "Taotle testperioodi kõnehõlbustusserveris", + "You can see the current status of your hosted signaling server in the following table." : "Järgnevas tabelis näed oma kõnehõlbustusserveri praegust olekut.", + "Status" : "Staatus", + "Created at" : "Loodud", + "Expires at" : "Aegub", + "Limits" : "Piirangud", + "STUN included" : "STUN on olemas", + "Yes" : "Ja", + "No" : "Ei", + "TURN included" : "TURN on olemas", + "Delete the signaling server account" : "Kustuta kasutajakonto kõnehõlbustusserveris", + "_%n user_::_%n users_" : ["%n kasutaja","%n kasutajat"], + "Installed version: {version}" : "Paigaldatud versioon: {version}", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge'i käivitusfauilil on vigased õigused. Palun kontrolli, et Matterbridge'i käivitusfaili omanik on korrektne ja ta saab seda käivitada. Leiad ta siit: „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge'i programmi kas ei leidunud või polnud seda võimalik käivitada.", + "Downloading …" : "Laadin alla…", + "Install Talk Matterbridge" : "Paigalda Matterbridge Nextcloudi kõnerakenduse jaoks", + "An error occurred while installing the Matterbridge app" : "Matterbridge'i rakenduse paigaldamisel tekkis viga", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Matterbridge'i võrgusilla paigaldamisel kõnerakendusse tekkis viga. Palun paigalda ta käsitsi.", + "Failed to execute Matterbridge binary." : "Matterbridge'i programmi ei õnnestunud käivitada.", + "Matterbridge integration" : "Matterbridge'i lõiming", + "Enable Matterbridge integration" : "Võta Matterbridge'i lõiming kasutusele", + "Status: Checking connection" : "Olek: Kontrollin ühendust", + "OK: Running version: {version}" : "OK: Töötav versioon: {version}", + "Error: Server seems to be a Signaling server" : "Viga: server tundub olema kõnehõlbustusserver", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Viga: Nextcloudi severi ja salvestusserveri süsteemsed kellaajad pole sünkroonis. Palun kontrolli, et mõlemas serveris oleks seadistatud ajateenuse kasutamine või sünkrooni nende kellaajad käsitsi.", + "Recording backend URL" : "Salvestuse taustateenuse võrguaadress", + "Validate SSL certificate" : "Kontrolli SSL-sertifikaadi kehtivust", + "Delete this server" : "Kustuta see server", + "Test this server" : "Testi seda serverit", + "Disabled for all calls" : "Keelatud kõikide kõnede puhul", + "Enabled for all calls" : "Lubatud kõikide kõnede puhul", + "Configurable on conversation level by moderators" : "Seadistatav vestlusekohaselt moderaatorite poolt", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP seadistused „upload_max_filesize“ või „post_max_size“ lubavad üles laadida vaid kuni {maxUpload} suuruses faile.", + "Recording backend settings saved" : "Salvestuse taustateenuse seadistused on salvestatud", + "The consent to be recorded will be required for each participant before joining every call." : "Iga osaleja nõusolek salvestamiseks on vajalik enne iga kõnega liitumist.", + "The consent to be recorded is not required." : "Vajalik on nõusoleks salvestamiseks.", + "Recording backend configuration is only possible with a High-performance backend." : "Salvestamise taustateenuse seadistamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "Add a new recording backend server" : "Lisa uus salvestuse taustateenuse server", + "Shared secret" : "Jagatud saladus", + "Recording consent" : "Nõusolek salvestamisega", + "Recording transcription" : "Salvestise üleskirjutus", + "Automatically transcribe call recordings with a transcription provider" : "Tee kõnesalvestistest üleskirjutuse teenusepakkuja abil automaatne üleskirjutus", + "Automatically summarize call recordings with transcription and summary providers" : "Tee kõnesalvestistest üleskirjutuse ja kokkuvõtte teenusepakkujate abil automaatne kokkuvõte", + "SIP configuration saved!" : "SIP-i seadistused on salvestatud!", + "SIP configuration is only possible with a High-performance backend." : "SIP-i funktsionaalsuse seadistamine eeldab serveris suure jõudlusega taustateenuse olemasolu.", + "Enable SIP Dial-out option" : "Lülita sisse SIP-i põhise väljahelistamisteenuse võimalus", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Et väljahelistamine SIP-i teenusega (SIP Dial-out) toimiks, siis kõnehõlbustusserver vajab uuendamist.", + "Do not show SIP Dial-out caller number" : "Ära näita SIP-i teenusega väljahelistaja numbrit", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Kõne vastuvõtja näeb helistaja numbrit anonüümsena", + "Dial-out number" : "Väljahelistaja number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-vormingus helistaja tagavaranumber väljuvate kõnede jaoks", + "Dial-out prefix" : "Väljuvate kõnede eesliide", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Väljuvate kõnede eesliide (vaikimisi +)", + "Restrict SIP configuration" : "Piira SIP-i seadistusi", + "Enable SIP configuration" : "Kasuta SIP-i seadistusi", + "Phone number (Country)" : "Telefonunumber (Maa)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "See teave on lisatud kõikidesse kutsekirjadesse ning kuvatud ka kõikide osalejate külgpaanil.", + "Nextcloud base URL" : "Nextcloudi põhiline võrguaadress", + "Talk Backend URL" : "Nextcloudi vestlusrakenduse taustateenuse võrguaadress", + "WebSocket URL" : "WebSocketi võrguaadress", + "Available features" : "Saadaval funktsionaalsused", + "Error: Websocket connection failed" : "Viga: Websocketi-põhist ühendust ei õnnestunud luua", + "Error code" : "Veakood", + "Error message" : "Veateade", + "Error: Websocket connection failed. Check browser console" : "Viga: Websocketi-põhist ühendust ei õnnestunud luua. Lisateavet leiad veebibrauseri konsoolist", + "High-performance backend URL" : "Suure jõudlusega taustateenuse võrguaadress", + "Missing High-performance backend warning hidden" : "Puuduva suure jõudlusega taustateenuse hoiatus on peidetud", + "High-performance backend settings saved" : "Suure jõudlusega taustateenus seadistused on salvestatud", + "Nextcloud Talk setup not complete" : "Talk kõnerakenduse paigaldus on poolik", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Palun arvesta, et kui kõnes on üle 2 kasutaja ning suure jõudlusega taustateenus pole kasutusel, siis osalejatel võib tekkida ühendusprobleeme ning osalevad seadmed võivad sattuda suure koormuse alla.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Et mitme osalejaga kõned toimiks korralikult palun paigalda suure jõudlusega taustateenus.", + "Nextcloud portal" : "Nextcloudi portaal", + "Quick installation guide" : "Paigalduse kiirjuhend", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Suure jõudlusega taustateenus on vajalik mitmete osalejatega kõnede ja vestluste jaoks. Ilma taustateenuseta peavad kõik kasutajad eraldi laadima videovoo üles kõikide kasutajate jaoks ning see võib paratamatult kõikide kasutajate puhul tekitada võrguühenduse ja jõudluse probleeme.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Kui kasutad Nextcloudi vestlusrakendust suure jõudlusega taustateenusega, siis tungivalt soovitame, et seadistad ka hajutatud puhverduse.", + "Add High-performance backend server" : "Lisa suure jõudlusega taustateenuse server", + "Warn about connectivity issues in calls with more than 2 participants" : "Palun hoiata võrguühenduse probleemide eest, kui kõnes on üle kahe osaleja", + "STUN server URL" : "STUN-serveri võrguaadress", + "The server address is invalid" : "Serveri aadress on vigane", + "STUN settings saved" : "STUN-i seadistused on salvestatud", + "STUN servers" : "STUN-i serverid", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-i server on kasutusel selliste kasutajate avaliku IP-aadressi tuvastamiseks, kes asuvad tulemüüri taga.", + "Add a new STUN server" : "Lisa uus STUN-i server", + "{schema} scheme must be used with a domain" : "{schema} peab olema kasutatud koos domeeniga", + "{option1} and {option2}" : "{option1} ja {option2}", + "{option} only" : "vaid {option}", + "TURN server URL" : "TURN-serveri võrguaadress", + "TURN server secret" : "TURN-i serveri saladus", + "TURN server protocols" : "TURN-serveri protokollid", + "TURN settings saved" : "TURN-i seadistused on salvestatud", + "TURN servers" : "TURN-i serverid", + "Add a new TURN server" : "Lisa uus TURN-i server", + "Failed" : "Ebaõnnestus", + "OK" : "Sobib", + "Checking …" : "Kontrollin…", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Tundub, et serveris on PHP ja Apache paigaldused omavahel vastuolus. Palun arvesta, et PHP kasutamisel peab olema kasutusel MPM_PREFORK moodul ning PHP-FPM-i kasutamisel MPM_EVENT moodul.", + "Web server setup checks" : "Veebiserveri paigalduskontrollid", + "Files required for virtual background can be loaded" : "Virtuaalse tausta jaoks vajalikud failid on nüüd laaditavad", + "Federated user" : "Kasutaja liitpilves", + "Assign participants to rooms" : "Määra osalejad jututubadesse", + "Configure breakout rooms" : "Seadista virtuaalseid töötube", + "Number of breakout rooms" : "Virtuaalsete töötubade arv", + "You can create from 1 to 20 breakout rooms." : "Sa võid luua 1 kuni 20 virtuaalset töötuba.", + "Assignment method" : "Määramise meetod", + "Automatically assign participants" : "Määra osalejad automaatselt", + "Manually assign participants" : "Määra osalejad käsitsi", + "Allow participants to choose" : "Luba osalejatel valida", + "Create rooms" : "Loo jututoad", + "Confirm" : "Kinnita", + "Create breakout rooms" : "Loo virtuaalseid töötube", + "Reset" : "Lähtesta", + "Delete breakout rooms" : "Kustuta virtuaalsed töötoad", + "Room {roomNumber}" : "Ruum: {roomNumber}", + "Current breakout rooms and settings will be lost" : "Kõik praegused virtuaalsed töötoad ja nende seadistused lähevad kaotsi", + "Cancel" : "Loobu", + "Unassigned participants" : "Määramata osalejad", + "Back" : "Tagasi", + "Assign" : "Määra", + "Add participant \"{user}\"" : "Lisa osaleja „{user}“", + "Now" : "Praegu", + "Invalid calendar selected" : "Valisid vale kalendri", + "Invalid start time selected" : "Valisid vale algusaja", + "Invalid end time selected" : "Valisid vale lõpuaja", + "Unknown error occurred" : "Tekkis tundmatu viga", + "Sending no invitations" : "Kutseid ei saadeta", + "{participant0} will receive an invitation" : "{participant0} saab kutse", + "{participant0} and {participant1} will receive invitations" : "{participant0} ja {participant1} saavad kutse", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ja %n muu kasutaja saavad kutse","{participant0}, {participant1} ja %n muud kasutajat saavad kutse"], + "Invite {user}" : "Saada kutse kasutajale {user}", + "Invite all users and emails in this conversation" : "Saada kutse kõikidele selle vestluse kasutajatele ja e-posti aadressidele", + "Meeting created" : "Kohtumine on loodud", + "Upcoming meetings" : "Tulekul kohtumised", + "Loading …" : "Laadimisel...", + "No upcoming meetings" : "Tulekul kohtumisi pole", + "Schedule a meeting" : "Ajasta kohtumine", + "Meeting title" : "Kohtumise nimi", + "From" : "Saatja", + "To" : "Saaja", + "Calendar" : "Kalender", + "Attendees" : "Osalejad", + "No other participants to send invitations to." : "Pole ühtegi teist osalejat, kellele kutset saata.", + "Add attendees" : "Lisa osalejaid", + "Save" : "Salvesta", + "Search participants" : "Otsi osalejaid", + "No results" : "Vasteid ei leitud", + "Done" : "Valmis", + "Disable live transcription" : "Ära kasuta ülestähendamist reaalajas", + "Enable live transcription (generated by AI)" : "Lülita reaalajas üleskirjutus sisse (loodud tehisaru abil)", + "Enable live transcription (Live transcriptions app is not installed)" : "Lülita reaalajas üleskirjutamine sisse (reaalajas üleskirjutamise rakendus pole paigaldatud)", + "Disable live translation" : "Lülita reaalajas tõlge välja", + "Enable live translation (generated by AI)" : "Lülita reaalajas tõlge sisse (loodud tehisaru abil)", + "Original language" : "Lähtekeel", + "Live translations app is not installed" : "Reaalajas tõlkimise rakendus pole paigaldatud", + "Original language: {languageName}" : "Algne keel: {languageName}", + "Translated language" : "Tõlkekeel", + "Translated language: {languageName}" : "Tõlkekeel: {languageName}", + "Raise hand" : "Anna käega märku", + "Raise hand (R)" : "Anna käega märku (R)", + "Lower hand" : "Lase käsi alla", + "Lower hand (R)" : "Lase käsi alla (R)", + "Exit full screen (F)" : "Välju täisekraanilt (F)", + "Full screen (F)" : "Täisekraan (F)", + "Speaker view" : "Esineja vaade", + "Grid view" : "Ruudustikvaade", + "Error when trying to load the available live transcription languages" : "Viga sõnumi reaalajas ülestähendamise keele laadimisel", + "Failed to enable live transcription" : "Viga reaalajas ülestähendamise kasutuselevõtmisel", + "Failed to enable live translations" : "Reaalajas tõlge sisselülitamine ei õnnestunud", + "Failed to disable live translations" : "Reaalajas tõlge väljalülitamine ei õnnestunud", + "Recording consent is required" : "Vajalik on nõusolek salvestamiseks", + "This conversation is read-only" : "See vestlus on vaid loetav", + "Conversation not found or not joined" : "Vestlust ei leidu või sa pole sellega liitunud", + "Lobby is still active and you're not a moderator" : "Ooteruum on jätkuvalt kasutusel ja sina pole moderaator", + "Connection failed" : "Ühenduse viga", + "Reload" : "Laadi uuesti", + "{nickName} raised their hand." : "{nickName} andis käega märku.", + "A participant raised their hand." : "Üks osaleja andis käega märku", + "Collapse stripe" : "Ahenda riba", + "Expand stripe" : "Laienda riba", + "Previous page of videos" : "Videote eelmine leht", + "Next page of videos" : "Videote järgmine leht", + "Connecting …" : "Ühendan…", + "Calling …" : "Helistan…", + "Waiting for {user} to join the call" : "Ootan, et kasutaja „{user}“ liituks kõnega", + "Waiting for others to join the call …" : "Ootan, kuni teised liituvad kõnega…", + "You can invite others in the participant tab of the sidebar" : "Saad uutele osalejatele kutset saata külgribalt osalejate vahekaardilt", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Saad uutele osalejatele kutset saata külgribalt osalejate vahekaardilt või lihtsalt jagad seda linki!", + "Share this link to invite others!" : "Kutse saatmiseks jaga seda linki!", + "Copy link" : "Kopeeri link", + "You are not allowed to enable audio" : "Sul pole lubatud heliriba sisse lülitada", + "No audio. Click to select device" : "Heli puudub. Seadme valimiseks klõpsa", + "Mute audio" : "Summuta heli", + "Mute audio (M)" : "Summuta heli (M)", + "Unmute audio" : "Lõpeta heli summutamine", + "Unmute audio (M)" : "Lõpeta heli summutamine (M)", + "None" : "Pole", + "Select a microphone" : "Vali mkrofon", + "Select a speaker" : "Vali kõlar", + "Microphone settings" : "Mikrofoni seadistused", + "Check devices" : "Kontrolli seadmeid", + "Access to camera was denied" : "Ligipääs kaamerale on keelatud", + "Error while accessing camera: It is likely in use by another program" : "Viga ligipääsul kaamerale: ta ilmselt on kasutusel mõne muu rakenduse poolt", + "Error while accessing camera" : "Viga ligipääsul kaamerale", + "You have been muted by a moderator" : "Moderaator summutas sinu heli", + "Hide presenter video" : "Peida esineja video", + "You are not allowed to enable video" : "Sul pole lubatud videot sisse lülitada", + "No video. Click to select device" : "Video puudub. Seadme valimiseks klõpsa", + "Disable video" : "Lülita video välja", + "Disable video (V)" : "Lülita videovoog välja (V)", + "Enable video" : "Lülita video sisse", + "Enable video (V)" : "Lülita videovoog sisse (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse. Tehes seda esimest korda katkeb korraks ühendus.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse (V). Tehes seda esimest korda katkeb korraks ühendus.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Lülita videovoog sisse. Tehes seda esimest korda katkeb korraks ühendus.", + "Select a video device" : "Vali videoseade", + "Show presenter" : "Näita esinejat", + "You" : "Sina", + "Mute" : "Summuta", + "Muted" : "Summutatud", + "Show screen" : "Näita ekraani", + "Stop following" : "Lõpeta järgimine", + "Connection could not be established …" : "Ei suuda luua ühendust…", + "Connection was lost and could not be re-established …" : "Ühendus katkes ja sead polnud võimalik taastada…", + "Connection could not be established. Trying again …" : "Ei õnnestunud ühendada. Proovin uuesti…", + "Connection lost. Trying to reconnect …" : "Ühendus katkes. Proovin uuesti ühenduda.", + "Connection problems …" : "Ühenduse vead…", + "Collapse" : "Sulge", + "Expand" : "Laienda", + "You need to be logged in to upload files" : "Failide üleslaadimiseks pead olema sisseloginud", + "Drop your files to upload" : "Üleslaadimiseks lohista failid siia", + "Conversation messages" : "Vestluse sõnumid", + "Scroll to bottom" : "Keri alla äärde", + "Post message" : "Saada sõnum", + "Federated conversation" : "Vestlus liitpilves", + "Public conversation" : "Avalik vestlus", + "Favorite" : "Lemmik", + "Banned users" : "Suhtluskeeluga kasutajad", + "Manage the list of banned users in this conversation." : "Halda suhtluskeeluga kasutajate loendit selles vestluses", + "Manage bans" : "Halda suhtluskeelde", + "No banned users" : "Suhtluskeeluga kasutajaid pole", + "Banned by:" : "Suhtluskeelu seadis:", + "Date:" : "Kuupäev:", + "Note:" : "Märkus:", + "Hide details" : "Peida üksikasjad", + "Show details" : "Näita üksikasju", + "Unban" : "Eemalda suhtluskeeld", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Sa võid pealkirja kirjeldust muuta {linkstart}Kalendris ↗{linkend}.", + "Error while updating conversation name" : "Viga vestluse nime uuendamisel", + "Error while updating conversation description" : "Viga vestluse kirjelduse uuendamisel", + "Enter a name for this conversation" : "Sisesta nimi selle vestluse jaoks", + "Edit conversation name" : "Muuda vestluse nime", + "Edit conversation description" : "Muuda vestluse kirjeldust", + "Enter a description for this conversation" : "Sisesta vestluse kirjeldus", + "Picture" : "Pilt", + "Disable" : "Lülita välja", + "Enable" : "Lülita sisse", + "The bot is not available anymore" : "See robot pole enam saadaval", + "Breakout rooms" : "Virtuaalsed töötoad", + "Manage breakout rooms" : "Halda virtuaalseid töötube", + "Set up breakout rooms for this conversation" : "Seadista selle vestluse jaoks virtuaalseid töötube", + "Please select a valid PNG or JPG file" : "Palun vali korrektne png või jpg fail", + "Choose your conversation picture" : "Vali oma vestluse pilt", + "Choose" : "Vali", + "Error setting conversation picture" : "Viga vestluse pildi lisamisel", + "Could not set the conversation picture: {error}" : "Vestluse pildi lisamine ei õnnestunud: {error}", + "Error cropping conversation picture" : "Viga vestluse pildi kadreerimisel", + "Error removing conversation picture" : "Viga vestluse pildi eemaldamisel", + "Set emoji as conversation picture" : "Lisa emoji vestluse pildiks", + "Set background color for conversation picture" : "Lisa taustavärv vestluse pildiks", + "Upload conversation picture" : "Laadi vestluse pilt üles", + "Choose conversation picture from files" : "Vali vestluse pilt galeriist", + "Remove conversation picture" : "Eemalda vestluse pilt", + "The file must be a PNG or JPG" : "Fail peab olema png või jpg vormingus", + "Set picture" : "Lisa pilt", + "Default permissions modified for {conversationName}" : "„{conversationName}“ vaikimisi õigused on muudetud", + "Could not modify default permissions for {conversationName}" : "„{conversationName}“ vaikimisi õigusi polnud võimalik muuta", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Muuda kasutajate vaikimisi õigusi siin vestluses. See ei mõjuuta moderaatorite õigusi.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Igal siin valikus õiguste muutmisel lähevad kaotsi senised kasutajakohased õiguste seadistused.", + "All permissions" : "Kõik õigused", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Osalejatel on õigus helistada, liituda kõnega, kasutada heli- ja videoedastust ning jagada oma ekraanivaadet.", + "Participants can use all available features." : "Osalejad saavad kasutada kõiki saadavalolevaid funktsionaalsusi.", + "Restricted" : "Piiratud", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Osalejatel on liituda kõnega, kuid ei saa kasutada heli- ja videoedastust ning jagada oma ekraanivaadet enne, kui moderaator on seda käsitsi lubanud.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Seni kuni moderaator pole käsitsi täiendavaid õigusi lisanud, saavad osalejad kasutada saadavalolevaid funktsionaalsusi osaliselt.", + "Advanced permissions" : "Täiendavad õigused", + "Edit permissions" : "Muuda õigusi", + "Conversation settings" : "Vestluse seadistused", + "Basic Info" : "Põhiteave", + "Personal" : "Isiklik", + "Moderation" : "Modereerimine", + "Setup overview" : "Seadistuse ülevaade", + "Live transcription" : "Ülestähendus reaalajas", + "Live transcriptions app is not installed" : "Reaalajas üleskirjutamise rakendus pole paigaldatud", + "Enable live transcription" : "Kasuta ülestähendamist reaalajas", + "Breakout Rooms" : "Virtuaalsed töötoad", + "Matterbridge" : "Matterbridge", + "Bots" : "Võrgurobotid", + "Danger zone" : "Ohtlik - siin ole ettevaatlik", + "Archive conversation" : "Arhiveeri vestlus", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Vaikimisi on arhiveeritud vestlused üldloendist peidetud. Nad on leitavad siis, kui otsid vestluse nime või avad arhiveeritud vestluste loendi.", + "Do you really want to leave \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoast lahkuda?", + "You can archive this conversation instead." : "Selle asemel võid antud vestluse arhiveerida.", + "Leave conversation" : "Lahku vestlusest", + "You need to promote a new moderator before you can leave the conversation" : "Pead määrama uue moderaatori enne siit vestlusest lahkumist", + "Delete conversation" : "Kustuta vestlus", + "Do you really want to delete \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoa kustutada?", + "Error while deleting conversation" : "Viga vestluse kustutamisel", + "Delete all chat messages" : "Kustuta kõik vestluse sõnumid", + "Do you really want to delete all messages in \"{displayName}\"?" : "Kas sa kindlasti soovid „{displayName}“ jututoast kõik vestlused kustutada?", + "Error while clearing chat history" : "Viga vestluse ajaloo kustutamisel", + "Be careful, these actions cannot be undone." : "Palun ole ettevaatlik - neid tegevusi ei saa tagasi pöörata.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Kui lahkud kinnisest vestlusest, siis vajad uuesti liitumiseks luba. Avatud vestlusega saad liituda omal äranägemisel.", + "Permanently delete this conversation." : "Kustuta see vestlus jäädavalt.", + "Delete chat messages" : "Kustuta vestluse sõnumid", + "Permanently delete all the messages in this conversation." : "Kustuta jäädavalt kõik selle vestluse sõnumid.", + "_%n hour_::_%n hours_" : ["%n tund","%n tundi"], + "_%n day_::_%n days_" : ["%n päev","%n päeva"], + "_%n week_::_%n weeks_" : ["%n nädal","%n nädalat"], + "Custom expiration time" : "Sinu valitud aegumine", + "Message expiration disabled" : "Sõnumi aegumine pole kasutusel", + "Message expiration set: {duration}" : "Sõnum aegub: {duration}", + "Error when trying to set message expiration" : "Viga sõnumi aegumise määramisel", + "Message expiration" : "Sõnumi aegumine", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Vestluse sõnumid saad määrata kustuma etteantud aja järel. Palun arvesta, et sel juhul vestluses jagatud failid jäävad omaniku jaoks nähtavaks, aga pole enam vestluse jaoks jagatud.", + "Set message expiration" : "Määra sõnumi aegumine", + "Current message expiration" : "Sõnumi aegumine", + "Password copied to clipboard" : "Salasõna on kopeeritud lõikelauale.", + "Password could not be copied" : "Salasõna ei õnnestunud lõikelauale kopeerida.", + "Guest access" : "Ligipääs külalistele", + "Breakout rooms are not allowed in public conversations." : "Virtuaalsed töötad pole avalike vestluste puhul lubatud.", + "Allow guests to join this conversation via link" : "Luba külalistel selle vestlusega lingi alusel liituda", + "Password protection" : "Kaitstud salasõnaga", + "This conversation is password-protected. Guests need password to join" : "See vestlus on kaitstud salasõnaga. Külalised vajavad liitumiseks salasõna", + "Password protection is needed for public conversations" : "Kaitstus salasõnaga on kohustuslik avalike vestluste puhul", + "Set a password" : "Lisa salasõna", + "Change password" : "Muuda salasõna", + "Enter new password" : "Sisesta uus salasõna", + "Save password" : "Salvesta salasõna", + "Copy password" : "Kopeeri salasõna", + "Guests are allowed to join this conversation via link" : "Külalised võivad selle vestlusega lingi alusel liituda", + "Guests are not allowed to join this conversation" : "Külalised ei või selle vestlusega liituda", + "Resend invitations" : "Saada kutsed uuesti", + "This conversation is open to both registered users and users created with the Guests app" : "Vestlus on avatud registreeritud kasutajatele ning külaliste rakenduses lisatud kasutajatele", + "This conversation is open to registered users" : "See vestlus on avatud registreeritud kasutajatele", + "This conversation is limited to the current participants" : "Vaid praegustel kasutajatel on ligipääs sellele vestlusele", + "You opened the conversation to both registered users and users created with the Guests app" : "Sina avasid vestluse nii registreeritud kasutajatele kui ka külaliste rakenduses lisatud kasutajatele", + "Error occurred when opening or limiting the conversation" : "Vestluse ligipääsu laiendamisel või kitsendamisel tekkis viga", + "Open conversation to registered users, showing it in search results" : "Ava vestlus registreeritud kasutajatele ning seega luba seda otsingutulemustes kuvada", + "Also open to users created with the Guests app" : "Lisaks on avatud külaliste rakenduses lisatud kasutajatele", + "Open conversation" : "Avatud vestlus", + "Set language spoken in calls" : "Määra vestlemisel kasutatav keel", + "Languages could not be loaded" : "Keelte laadimine ei õnnestunud", + "Loading languages …" : "Laadin keeli…", + "Invalid language" : "Vigane keel", + "Default language (English)" : "Vaikimisi keel (inglise keel)", + "Default live transcription language set" : "Reaalajas tehtava ülestähenduse vaikimisi keel on määratud", + "Live transcription language set: {languageName}" : "Reaalajas tehtava ülestähenduse vaikimisi keel on määratud kui: {languageName}", + "Error when trying to set live transcription language" : "Viga sõnumi reaalajas ülestähendamise keele määramisel", + "Start time: {date}" : "Algusaeg: {date}", + "Start time has been updated" : "Algusaeg on uuendatud", + "Error occurred while updating start time" : "Algusaja muutmisel tekkis viga", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ooteruumi sisselülitamine selle kõne jaoks eemaldab kõik tavakasutajad (i.e. kes pole moderaatorid) sellest pooleliolevast kõnest.", + "Enable lobby, restricting the conversation to moderators" : "Lülita sisse ooteruum ja piira osalemine vaid moderaatoritega", + "Meeting start time" : "Kohtumise algusaeg", + "Start time (optional)" : "Algusaeg (valikuline)", + "Import email participants" : "Impordi osalejate e-posti aadressid", + "You can import a list of email participants from a CSV file." : "Osalejate e-posti aadresse saad importida CSV-failist.", + "Poll drafts" : "Küsitluste kavandid", + "Browse poll drafts" : "Sirvi küsitluse kavandeid", + "Error occurred when locking the conversation" : "Vestluse lukustamisel tekkis viga", + "Error occurred when unlocking the conversation" : "Vestluse lukustuse eemaldamisel tekkis viga", + "Lock conversation" : "Lukusta vestlus", + "This will also terminate the ongoing call." : "See lõpetab ka poolelioleva kõne.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lukusta vestlus ja keela sellaga kõigil sõnumite saatmine ja kõnede alustamine", + "Edit" : "Muuda", + "More information" : "Lisateave", + "Delete" : "Kustuta", + "Add new bridged channel to current conversation" : "Lisa sellele vestlusele uus võrgusild", + "unknown state" : "Tundmatu olek", + "running" : "töötab", + "not running, check Matterbridge log" : "ei tööta, vaata Matterbridge'i logi", + "not running" : "ei tööta", + "Bridge saved" : "Võrgusild on salvestatud", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge võimaldab sul kasutada võrgusildu erinevate vestlusplatvormide vahel.", + "More info on Matterbridge" : "Lisateave Matterbridge'i võrgusilla kohta", + "Messaging systems" : "Sõnumisüsteemid", + "Enable bridge" : "Võta võrgusild kasutusele", + "Show Matterbridge log" : "Näita Matterbridge'i logi", + "Log content" : "Logi sisu", + "Only moderators are allowed to mention @all" : "Vaid moderaatoritel on võimalus mainida kõiki @all stiilis", + "All participants are allowed to mention @all" : "Kõikidel osalejatel on võimalus mainida kõiki @all stiilis", + "Participants are now allowed to mention @all." : "Osalejatel on võimalus mainida kõiki @all stiilis", + "Mentioning @all has been limited to moderators." : "Kõikide osalejate mainimine @all stiilis on lubatud vaid moderaatoritele.", + "Allow participants to mention @all" : "Luba osalejatel mainida kõiki @all stiilis", + "Mention permissions" : "Mainimiste õigused", + "Notifications" : "Teavitused", + "Notify about calls in this conversation" : "Teata kõnedest selles vestluses", + "Important conversation" : "Oluline vestlus", + "\"Do not disturb\" user status is ignored for important conversations" : "„Ära sega“ olek on oluliste vestluste puhul eiratud", + "Sensitive conversation" : "Vestlus tundlikul teemal", + "Message preview will be disabled in conversation list and notifications" : "Sõnumite eelvaated saava vestluste loendis ja teavitustes olema peidetud", + "Recording consent is required for calls in this conversation" : "Selle vestluse kõnede puhul on vajalik, et nõustud salvestamisega", + "Recording consent is not required for calls in this conversation" : "Selle vestluse kõnede puhul pole vajalik, et nõustud salvestamisega", + "Recording consent requirement was updated" : "Salvestamisega nõustumise nõue on uuendatud", + "Error occurred while updating recording consent" : "Salvestamisega nõustumise nõude uuendamisel tekkis viga", + "Recording Consent" : "Nõusolek salvestamisega", + "Recording consent cannot be changed once a call or breakout session has started." : "Peale kõne algust või virtuaalse töötoa sessiooni algust ei saa salvestamise nõusolekut enam muuta.", + "Require recording consent before joining call in this conversation" : "Selle vestlusega liitumisel eelda nõustumist salvestamisega", + "Recording consent is required for all calls" : "Kõnega liitumiseks on vajalik, et nõustud salvestamisega", + "SIP dial-in is now possible without PIN requirement" : "SIP-protokolli alusel on nüüd võimalik sisse helistada ilma PIN-koodi kasutamata", + "SIP dial-in is now enabled" : "SIP-i põhise sissehelistamisvõimalus on nüüd kasutusel", + "SIP dial-in is now disabled" : "SIP-i põhise sissehelistamisvõimalus pole enam kasutusel", + "Error occurred when enabling SIP dial-in" : "SIP-i põhise sissehelistamisvõimaluse kasutuselevõtmisel tekkis viga", + "Error occurred when disabling SIP dial-in" : "SIP-i põhise sissehelistamisvõimaluse kasutuselt eemaldamisel tekkis viga", + "Phone and SIP dial-in" : "Sissehelistamine tavatelefoni ja SIP-liidestusega", + "Enable phone and SIP dial-in" : "Luba sissehelistamist tavatelefoni ja SIP-liidestusega", + "Allow to dial-in without a PIN" : "Luba sissehelistamise võimalus ilma PIN-koodita", + "Ongoing" : "Toimumas", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n kasutaja võtis vastu","%n kasutajat võtsid vastu"], + "_%n person declined_::_%n people declined_" : ["%n kasutaja keeldus","%n kasutajat keeldusid"], + "_and %n other attachment_::_and %n other attachments_" : ["ja %n muu manus","ja %n muud manust"], + "With {displayName}" : "{displayName} kasutajaga", + "In {conversation}" : "{conversation} vestluses", + "View attachment" : "Vaata manust", + "Join" : "Liitu", + "View conversation" : "Vaata vestlust", + "View event on Calendar" : "Vaata sündmust kalendris", + "Error while creating the conversation" : "Viga vestluse loomisel", + "Hello, {displayName}" : "Tere, {displayName}", + "Start meeting now" : "Alusta kohtumist nüüd", + "Give your meeting a title" : "Lisa kohtumisele pealkiri", + "Create and copy link" : "Loo ja kopeeri link", + "Create a new conversation" : "Loo uus vestlus", + "Join open conversations" : "Liitu avalike vestlustega", + "Call a phone number" : "Helista telefonile", + "Scroll backward" : "Keri tagasi", + "Scroll forward" : "Keri edasi", + "Schedule meetings" : "Ajasta kohtumisi", + "You don't have any upcoming meetings" : "Sul pole tulekul kohtumisi", + "Calendar events with a conversation link as the location are shown here" : "Kui nad märgivad asukohta, siis vestluslingiga kalendrisündmused näidatakse siin", + "Open calendar" : "Ava kalender", + "Unread mentions" : "Lugemata mainimised", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Siin saavad olema nähtaval sõnumid, kus sind on mainitud. Selleks pead nende nime ette lisama @-märgi.", + "Upcoming reminders" : "Järgmised meeldetuletused", + "Message reminders" : "Sõnumite meeldetuletused", + "Set a reminder on a message to be notified" : "Lisa meeldetuletus hilisemaks teavituseks", + "Start a group conversation" : "Alusta rühmavestlust", + "Create conversation" : "Loo vestlus", + "Enter your name" : "Sisesta oma nimi", + "Submit name and join" : "Sisesta nimi ja liitu", + "Do you already have an account?" : "Kas sul juba on kasutajakonto olemas?", + "Log in" : "Logi sisse", + "Error while verifying uploaded file" : "Viga üleslaaditud faili kontrollimisel", + "Uploaded file is verified" : "Üleslaaditud fail on kontrollitud", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Sisuvorming on tavaline CSV-fail, kus komad on väljade eraldajateks:
- Päiserida on nõutav ja peab olema kas\"name\",\"email\" või lihtsalt \"email\"
- Sisus peab olema üks kirje rea kohta (nt. \"Kadri Maasikas\",\"kadri@torefirma.ee\")", + "Participants added successfully" : "Osalejate lisamine õnnestus", + "Error while adding participants" : "Viga osalejate lisamisel", + "Import a file" : "Impordi failist", + "Browse" : "Sirvi", + "Verifying uploaded file …" : "Kontrollin üleslaaditud faili…", + "This might take a moment" : "Selleks võib kuluda mõni hetk", + "Send invitations" : "Saada kutseid", + "_%n invalid email_::_%n invalid emails_" : ["%n vigane e-posti aadress","%n vigast e-posti aadressi"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-posti aadress on juba imporditud või on topeltkirje","%n e-posti aadressi on juba imporditud või on topeltkirjed"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Võid saata %n kutse","Võid saata %n kutset"], + "An error occurred while calling a phone number" : "Helistamisel telefoninumbrile tekkis viga", + "Phone number could not be called: {error}" : "Sellele telefoninumbrile polnud võimalik helistada: {error}", + "Phone number could not be called" : "Sellele telefoninumbrile polnud võimalik helistada", + "Search participants or phone numbers" : "Otsi osalejaid või telefoninumbreid", + "Creating the conversation …" : "Loon vestlust…", + "Mark as read" : "Märgi loetuks", + "Mark as unread" : "Märgi mitteloetuks", + "Remove from favorites" : "Eemalda lemmikutest", + "Add to favorites" : "Lisa lemmikutesse", + "Unarchive conversation" : "Võta vestlus arhiivist välja", + "Ignore \"Do not disturb\"" : "Eira „Ära sega“ olekut", + "You need to promote a new moderator before you can leave the conversation." : "Pead määrama uue moderaatori enne siit vestlusest lahkumist.", + "Conversation actions" : "Toimingud vestlusega", + "Notify about calls" : "Teavita kõnedest", + "Hide message text" : "Peida sõnumi tekst", + "Pending invitations" : "Ootel kutsed", + "Join conversations from other servers" : "Liitu vestlustega teistes serverites", + "From {user} at {remoteServer}" : "Kasutajalt {user} serveris {remoteServer}", + "Decline invitation" : "Lükka kutse tagasi", + "Accept invitation" : "Võta kutse vastu", + "No pending invitations" : "Ootel kutseid pole", + "Home" : "Avaleht", + "Unread" : "Lugemata", + "Mentions" : "Mainimised", + "Meetings" : "Kohtumised", + "Sort conversations" : "Järjesta vestlusi", + "By recent activity" : "Hiljutise tegevuse alusel", + "Alphabetically" : "Tähestiku järjekorras", + "Do not group by type" : "Ära rühmita tüübi alusel", + "Show private ones first" : "Esmalt näita privaatseid", + "Show group ones first" : "Esmalt näita rühma omi", + "No followed threads" : "Jälgitavaid jutulõngu pole", + "No matches found" : "Vasteid ei leidu", + "No conversations found" : "Vestlusi ei leidu", + "You have no archived conversations." : "Sul pole arhiveeritud vestlusi.", + "Subscribe to an existing thread or start your own." : "Alusta olemasoleva jutulõnga jälgimist või koosta enda oma.", + "You have no unread mentions." : "Sul pole lugemata mainimisi.", + "You have no unread messages." : "Sul pole lugemata sõnumeid.", + "An error occurred while performing the search" : "Otsimisel tekkis viga", + "Conversation list" : "Vestluste loend", + "Filter conversations by" : "Filtreeri vestlusi", + "Unread messages" : "Lugemata sõnumid", + "Meeting conversations" : "Kohtumiste vestlused", + "Clear filters" : "Eemalda filtrid", + "New personal note" : "Uus isiklik märge", + "SIP backend is not installed" : "SIP-i taustateenus pole paigaldatud", + "Back to conversations" : "Tagasi vestluste juurde", + "Archived conversations" : "Arhiveeritud vestlused", + "Threads" : "Jutulõngad", + "Clear filter" : "Tühjenda filter", + "Show more threads" : "Näita veel jutulõngu", + "App settings" : "Rakenduse seadistused", + "Users" : "Kasutajad", + "Groups" : "Grupid", + "Teams" : "Tiimid", + "Federated users" : "Kasutajad liitpilves", + "New private conversation" : "Uus privaatne vestlus", + "Other sources" : "Muud allikad", + "Open conversations" : "Avatud vestlused", + "No search results" : "Otsingul pole tulemusi", + "Users, groups and teams" : "Kasutajad, grupid ja tiimid", + "Users and groups" : "Kasutajad ja grupid", + "Users and teams" : "Kasutajad ja tiimid", + "Groups and teams" : "Grupid ja tiimid", + "New group conversation" : "Uus grupivestlus", + "The meeting will start soon" : "Kohtumine algab varsti", + "This meeting is scheduled for {startTime}" : "Selle kohtumise algusaeg on {startTime}", + "You are currently waiting in the lobby" : "Sa asud hetkel ooteruumis", + "Enable noise suppression" : "Lülita müra summutamine sisse", + "Reduce background noises for better voice quality" : "Parema helikvaliteedi nimel vähenda taustamüra", + "Enable echo cancellation" : "Lülita kaja summutamine sisse", + "Minimize echo effect from own surrounding" : "Vähenda enda ümbruskonnast tulenevat kajaefekti", + "Enable auto gain control" : "Lülita automaatne võimenduse reguleerimine sisse", + "Dynamically adjust microphone volume for consistent level" : "Mikrofoni helivaljuse dünaamiline reguleerimine ühtlase taseme saavutamiseks", + "Select microphone" : "Vali mkrofon", + "No microphone available" : "Ühtegi mikrofoni pole saadaval", + "Select speaker" : "Vali kõlar", + "No speaker available" : "Kõlarit pole saadaval", + "Select camera" : "Vali kaamera", + "No camera available" : "Ühtegi kaamerat pole saadaval", + "Select a device" : "Vali seade", + "Playing …" : "Esitamisel…", + "Test speakers" : "Testi kõlareid", + "Test" : "Katseta", + "Devices" : "Seadmed", + "Backgrounds" : "Taustad", + "No audio" : "Heli puudub", + "No camera" : "Kaamerat pole", + "Display video as you will see it (mirrored)" : "Näita videot nii, nagu sina seda näed (peegelpildis)", + "Display video as others will see it" : "Näita videot nii, nagu teised seda näevad", + "Calls are not supported in your browser" : "Kõned pole sinu veebibrauseris toetatud", + "Access to microphone is only possible with HTTPS" : "Ligipääs mikrofonile toimib vaid siis, kui kasutusel on https-protokoll", + "Access to microphone was denied" : "Ligipääs mikrofonile on keelatud", + "Error while accessing microphone" : "Viga ligipääsul mikrofonile", + "Access to camera is only possible with HTTPS" : "Ligipääs kaamerale toimib vaid siis, kui kasutusel on https-protokoll", + "The call is being recorded." : "See kõne salvestatakse.", + "The call might be recorded." : "Kõne võib olla salvestatud.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Salvestuses võib olla kuulda sinu häält, pilti sinu kaamerast ja ekraanivaatest. Enne kõnega liitumist on vajalik sinu nõusolek.", + "Give consent to the recording of this call" : "Nõustu selle kõne salvestamisega", + "Show more info" : "Näita lisateavet", + "Audio is not available" : "Heliedastus pole saadaval", + "Video is not available" : "Videoedastus pole saadaval", + "Start recording immediately with the call" : "Alusta salvestamist koos kõne alustamisega", + "Recording backend is not installed" : "Salvestamise taustateenus pole paigaldatud", + "Notify all participants about this call" : "Teavita sellest kõnest kõiki osalejaid", + "Apply settings" : "Rakenda seadistused", + "Select virtual office background" : "Vali virtuaalne kontroritaust", + "Select virtual home background" : "Vali virtuaalne kodutaust", + "Select virtual abstract background" : "Vali virtuaalne abstraktne taust", + "Select virtual beach background" : "Vali virtuaalne rannataust", + "Select virtual park background" : "Vali virtuaalne pargitaust", + "Select virtual theater background" : "Vali virtuaalne teatritaust", + "Select virtual library background" : "Vali virtuaalne raamatukogu taust", + "Select virtual space station background" : "Vali virtuaalne kosmosejaama taust", + "Error while uploading the file" : "Viga faili üles laadimisel.", + "Select a file" : "Vali fail", + "Invalid path selected" : "Vigane asukoht on valitud", + "Select virtual background from file {fileName}" : "Vali virtuaalne taust failist „{fileName}“", + "Blur" : "Hägusus", + "Upload" : "Laadi üles", + "Files" : "Failid", + "(editing)" : "(muutmisel)", + "(edited)" : "(muudetud)", + "The message has expired or has been deleted" : "See sõnum on kas aegunud või kustutatud", + "Cancel quote" : "Loobu tsiteerimisest", + "24 hours" : "24 tundi", + "7 days" : "7 päeva", + "30 days" : "30 päeva", + "Until unpin" : "Kuni esiletõstmise lõpetamiseni", + "Clear reminder – {timeLocale}" : "Eemalda meeldetuletus – {timeLocale}", + "Edited by {actor}" : "{actor} muutis sõnumit", + "Pinned by you" : "Esiletõstetud sinu poolt", + "Pinned by {actor}" : "Esiletõstja: {actor}", + "Until {absoluteDate}" : "Kuni {absoluteDate}", + "Message text copied to clipboard" : "Sõnumi tekst on kopeeritud lõikelauale", + "Message text could not be copied" : "Sõnumi teksti kopeerimine ei õnnestunud", + "Message forwarded to \"Note to self\"" : "Sõnum on edastatud vestlusesse „Minu märkmed“", + "Error while forwarding message to \"Note to self\"" : "Viga sõnumi edastatamisel vestlusesse „Minu märkmed“", + "A reminder was successfully removed" : "Meeldetuletuse eemaldamine õnnestus", + "Error occurred when removing a reminder" : "Meeldetuletuse eemaldamisel tekkis viga", + "A reminder was successfully set at {datetime}" : "Meeldetuletuse ajastamine õnnestus: {datetime}", + "Error occurred when creating a reminder" : "Meeldetuletuse loomisel tekkis viga", + "Add a reaction to this message" : "Reageeri sellele sõnumile", + "Reply" : "Vasta", + "More actions" : "Täiendavad tegevused", + "Set reminder" : "Lisa meeldetuletus", + "Pin message" : "Tõsta sõnum esile", + "Unpin message" : "Lõpeta sõnumi esiletõstmine", + "Reply privately" : "Vasta privaatselt", + "Edit message" : "Muuda sõnumit", + "Copy message" : "Kopeeri sõnum", + "Copy message link" : "Kopeeri sõnumi link", + "Go to file" : "Mine faili juurde", + "Download file" : "Laadi fail alla", + "Go to thread" : "Ava jutulõng", + "Edit thread details" : "Muuda jutulõnga üksikasju", + "Forward message" : "Edasta sõnum", + "Translate" : "Tõlgi", + "Set custom reminder" : "Lisa enda valitud meeldetuletus", + "Keep pinned for" : "Hoia esiletõstetuna", + "Set custom period" : "Sisesta oma ajavahemik", + "Close reactions menu" : "Sulge reakstioonide menüü", + "React with {emoji}" : "Reageeri {emoji} emojiga", + "React with another emoji" : "Reageeri mõne muu emojiga", + "Choose a conversation to forward the selected message." : "Vali vestlus, kuhu soovid sõnumit edastada.", + "Error while forwarding message" : "Viga sõnumi edastamisel", + "The message has been forwarded to {selectedConversationName}" : "See sõnum on edastatud vestlusesse „{selectedConversationName}“", + "Dismiss" : "Jäta vahele", + "Go to conversation" : "Mine vestluse juurde", + "Detect language" : "Tuvasta keel", + "The message could not be translated" : "E-kirja tõlkimine ei õnnestunud", + "Translation copied to clipboard" : "Tõlge on kopeeritud lõikelauale", + "Translation could not be copied" : "Tõlke kopeerimine ei õnnestunud", + "Translate message" : "Tõlgi e-kiri", + "Source language to translate from" : "Tõlke lähtekeel", + "Translate from" : "Lähtekeel tõlkimisel", + "Target language to translate into" : "Sihtkeel tõlkimisel", + "Translate to" : "Tõlke sihtkeel", + "Translating" : "Tõlkimisel", + "This translation is AI generated and may contain mistakes." : "See tõlge on tehisaru koostatud ja võib sisaldada vigu.", + "Copy translated text" : "Kopeeri tõlgitud tekst", + "Error when scheduling the message" : "Viga sõnumi ajastamisel", + "Reschedule" : "Muuda ajastamist", + "Send now" : "Saada kohe", + "Choose a time" : "Vali aeg", + "Send at custom time" : "Saada sinu valitud ajal", + "Will be sent without notification" : "Saadetakse ilma täiendava teavituseta", + "Message read by everyone who shares their reading status" : "Sõnum on loetud kõigi poolt, kes jagab oma lugemisteatisi", + "Message sent" : "Sõnum on saadetud", + "Sent without notification" : "Saadetud ilma teavituseta", + "Deleting message" : "Sõnum on kustutamisel", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Sõnumi kustutamine õnnestus, aga kasutusel on võrgurobot või Matterbridge'i võrgusild ja sõnum võib juba olla teistele vestlusteenustele edasi saadetud", + "Message deleted successfully" : "Sõnumi kustutamine õnnestus", + "Message could not be deleted because it is too old" : "Kuna sõnum on liiga vana, siis teda ei saa kustutada", + "Only normal chat messages can be deleted" : "Kustutada saad vaid vestluste tavasõnumeid", + "An error occurred while deleting the message" : "Sõnumi kustutamisel tekkis viga", + "Pinned" : "Esiletõstetud", + "Your browser does not support playing audio files" : "Su brauser ei toeta helifailide esitamist", + "Contact" : "Kontakt", + "{stack} in {board}" : "„{stack}“ kasutaja „{board}“ kõnes", + "Deck Card" : "Kanbani kaart", + "Remove {fileName}" : "Eemalda fail: „{fileName}“", + "Open this location in OpenStreetMap" : "Ava see asukoht OpenStreetMapis", + "_%n reply_::_%n replies_" : ["%n vastus","%n vastust"], + "Sending message" : "Saadan sõnumit", + "Failed to send the message. Click to try again" : "Sõnumi saatmine ei õnnestunud. Uuesti proovimiseks klõpsi", + "Not enough free space to upload file" : "Faili üleslaadimiseks pole piisavalt vaba ruumi", + "You cannot send messages to this conversation at the moment" : "Sa ei saa siin vestluses hetkel sõnumeid koostada", + "Could not update the message" : "Sõnumit polnud võimalik uuendada", + "Reply to thread \"{threadTitle}\"" : "Vasta „{threadTitle}“ jutulõngas", + "_You voted • %n vote_::_You voted • %n votes_" : ["Sa oled hääletanud • %n hääl","Sa oled hääletanud • %n häält"], + "You voted" : "Sa oled hääletanud", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Hääletamiseks klõpsa • %n hääl","Hääletamiseks klõpsa • %n häält"], + "Click to vote" : "Hääletamiseks klõpsa", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Küsitluse kavand • %n küsimus","Küsitluse kavand • %n küsimust"], + "_%n vote_::_%n votes_" : ["%n hääl","%n häält"], + "Edit poll draft" : "Muuda küsitluse kavandit", + "Delete poll draft" : "Kustuta küsitluse kavand", + "Open poll" : "Avalik küsitlus", + "Closed poll" : "Hääletus on lõppenud", + "See results" : "Vaata tulemusi", + "Reactions" : "Reageerimised", + "No permission to post reactions in this conversation" : "Pole õigust selles vestluses reageerida", + "and {participant}" : "ja {participant}", + "_and %n other participant_::_and %n other participants_" : ["ja %n muu osaleja","ja %n muud osalejat"], + "Show all reactions" : "Näita kõiki reaktsioone", + "Add more reactions" : "Lisa veel reaktsioone", + "Show or collapse system messages" : "Näita süsteemi sõnumeid või peida nad", + "No messages" : "Sõnumeid pole", + "All messages have expired or have been deleted." : "Kõik sõnumid on kas aegunud või kustutatud", + "Generate summary with AI" : "Koosta kokkuvõte tehisaru abil", + "{author} (pinned by you)" : "{author} (esiletõstetud sinu poolt)", + "{author} (pinned by {actor})" : "{author} ({actor} tõstis esile)", + "Unpin" : "Lõpeta esiletõstmine", + "Cancel search" : "Katkesta otsing", + "Add a phone number" : "Lisa telefoninumber", + "Error: A password is required to create the conversation." : "Viga: vestluse loomiseks on vajalik salasõna", + "All set, the conversation \"{conversationName}\" was created." : "Kõik on tehtud ja „{conversationName}“ vestus sai loodud.", + "Create a new group conversation" : "Loo uus vestlusgrupp", + "Add participants" : "Lisa osalejaid", + "Maximum length exceeded ({maxlength} characters)" : "Maksimaalne lubatud pikkus on ületatud ({maxlength} tähemärki)", + "Conversation type" : "Vestluse tüüp", + "Conversation visibility" : "Vestluse nähtavus", + "Allow guests to join via link" : "Luba külalistel lingi alusel liitumist", + "Enter password" : "Sisesta salasõna", + "This conversation has been locked" : "See vestlus on lukustatud", + "No permission to post messages in this conversation" : "Pole õigust siia vestlusesse sõnumeid saata", + "Joining conversation …" : "Liitun vestlusega…", + "Write a message without notification" : "Koosta sõnum ilma teavituseta", + "Create a thread silently" : "Alusta jutulõnga vaikselt", + "Create a thread" : "Alusta jutulõnga", + "Send message silently" : "Saada sõnum vaikselt", + "Send message" : "Saada sõnum", + "Send without notification" : "Saada ilma teavituseta", + "The participant will not be notified about new messages" : "Osaleja ei saa teavitust uute sõnumite kohta", + "Participants will not be notified about new messages" : "Osalejad ei saa teavitust uute sõnumite kohta", + "Message will be sent {datetimeString}" : "Sõnum saadetakse {datetimeString}", + "Thread title is required" : "Jutulõngal peab olema nimi", + "Message text is required" : "Sõnumi sisu on nõutav", + "The message could not be edited" : "Sõnumi muutmine ei õnnestunud", + "File to share" : "Jagatav fail", + "File upload is not available in this conversation" : "Siia vestlusesse ei saa faile üles laadida", + "Message was successfully scheduled" : "Sõnumi ajastamine õnnestus", + "Add emoji" : "Lisa emoji", + "Adding a mention will only notify users who did not read the message." : "Mainimise lisamine teavitab vaid neid kasutajaid, kes veel pole seda sõnumit lugenud.", + "Thread title" : "Jutulõnga pealkiri", + "Send later" : "Saada hiljem", + "Show scheduled messages" : "Näita ajastatud sõnumeid", + "Cancel editing" : "Katkesta muutmine", + "Schedule message" : "Ajasta sõnum", + "{user} is out of office and might not respond." : "{user} pole kohal ja ei pruugi vastata.", + "Absence period: {startDate} - {endDate}" : "Äraoleku ajavahemik: {startDate} - {endDate}", + "Replacement:" : "Asendus:", + "Share from {nextcloud}" : "Jaga teenusest {nextcloud}", + "Share from Files" : "Jaga failirakendusest", + "Share files to the conversation" : "Jaga vestlusesse faile", + "Upload from device" : "Laadi üles seadmest", + "Create new poll" : "Loo uus küsitlus", + "Smart picker" : "Nutivalija", + "Record voice message" : "Salvesta häälsõnum", + "End recording and send" : "Lõpeta salvestamine ja saada", + "Dismiss recording" : "Loobu salvestamisest", + "Access to the microphone was denied" : "Ligipääs mikrofonile on keelatud", + "Microphone either not available or disabled in settings" : "Mikrofoni kas pole olemas või ta on seadistustest välja lülitatud", + "Error while recording audio" : "Viga heli salvestamisel", + "Voice message {time} ({conversation})" : "Häälsõnum {time} ({conversation})", + "Generating summary of unread messages …" : "Koostan lugemata sõnumite ülevaadet…", + "Summary is AI generated and might contain mistakes" : "See kokkuvõte on tehisaru koostatud ja võib sisaldada vigu.", + "Error occurred during a summary generation" : "Kokkuvõtte koostamisel tekkis viga", + "New file" : "Uus fail", + "Blank" : "Tühi", + "Error while creating file" : "Viga faili loomisel", + "Create and share a new file" : "Loo uus fail ning jaga teda", + "Name of the new file" : "Uue faili nimi", + "Create file" : "Loo uus fail", + "Someone is typing …" : "Keegi kirjutab…", + "{user1} is typing …" : "{user1} kirjutab…", + "{user1} and {user2} are typing …" : "{user1} ja {user2} kirjutavad…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ja {user3} kirjutavad…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ja veel %n kasutaja kirjutavad…","{user1}, {user2}, {user3} ja veel %n kasutajat kirjutavad…"], + "Add more files" : "Lisa veel faile", + "Send" : "Saada", + "In this conversation {user} can:" : "Selles vestluses „{user}“ kasutaja saab:", + "Edit default permissions for participants in {conversationName}" : "Muuda kasutajate vaikimisi õigusi vestluses {conversationName}", + "Start a call" : "Helista", + "Skip the lobby" : "Jäta ooteruum vahele", + "Can post messages" : "Võib postitada", + "Can post messages and reactions" : "Võib koostada sõnumeid ja neile reageerida", + "Can add reactions" : "Võib reageerida", + "Enable the microphone" : "Lülita mikrofon sisse", + "Enable the camera" : "Lülita kaamera sisse", + "Share the screen" : "Jagada ekraani", + "Update permissions" : "Uuendada õigusi", + "Updating permissions" : "Õigused on uuendamisel", + "No poll drafts" : "Küsitluste kavandeid pole", + "There is no poll drafts yet saved for this conversation" : "Selle vestluse jaoks pole veel küsitluste kavandeid salvestatud", + "Create poll in {name}" : "Loo siin küsitlus: {name}", + "Create poll" : "Loo küsitlus", + "Error while importing poll" : "Viga küsitluse importimisel", + "Question" : "Küsimus", + "Ask a question" : "Küsi", + "Import draft from file" : "Impordi kavand failist.", + "Answers" : "Vastused", + "Answer {option}" : "{option}. vastus", + "Delete poll option" : "Kustuta küsitluse valik", + "Add answer" : "Lisa vastus", + "Settings" : "Seadistused", + "Anonymous poll" : "Anonüümne küsitlus", + "Multiple answers" : "Mitu vastust", + "Save as draft" : "Salvesta kavandina", + "Export draft to file" : "Ekspordi kavand faili.", + "_Final results • %n vote_::_Final results • %n votes_" : ["Lõpptulemused • %n hääl","Lõpptulemused • %n häält"], + "Your vote is anonymous" : "Sinu hääl on anonüümne", + "You voted for this option" : "Sina hääletasid selle eelistuse poolt", + "End poll" : "Lõpeta küsitlus", + "Change your vote" : "Muuda oma häält", + "Withdraw vote" : "Võta antud hääl tagasi", + "Results" : "Tulemused", + "Download as spreadsheet" : "Laadi alla andmetabelina", + "Download as CSV" : "Laadi CSV-failina", + "Voted participants" : "Hääletanud osalejad", + "Send a message to \"{roomName}\"" : "Saada sõnum „{roomName}“ jututuppa", + "Hide list of participants" : "Peida osalejate loend", + "Show list of participants" : "Näita osalejate loendit", + "Assistance requested in {roomName}" : "Abi on vajalik „{roomName}“ jututoas", + "The message was sent to \"{roomName}\"" : "Sõnum on saadetud „{roomName}“ jututuppa", + "Dismiss request for assistance" : "Loobu abipäringust", + "Send message to room" : "Saada sõnum jututuppa", + "Back to main room" : "Tagasi põhilisse jututuppa", + "Back to your room" : "Tagasi sinu jututuppa", + "Message all rooms" : "Saada sõnum kõikidesse jututubadesse", + "Start session" : "Alusta sessiooni", + "Start a call before you start a breakout room session" : "Enne virtuaalse töötoa käivitamist pead kõne algatama", + "Stop session" : "Lõpeta sessioon", + "The message was sent to all breakout rooms" : "Sõnum on saadetud kõikidesse virtuaalsetesse töötubadesse", + "Send a message to all breakout rooms" : "Saada sõnum kõikidesse virtuaalsetesse töötubadesse", + "Breakout rooms are not started" : "Virtuaalsed töötoad pole veel käivitatud", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Kõned, kus pole kasutusel suure jõudlusega taustateenust, võivad põhjustada osalevates seadmetes ühendusprobleeme ja suurt koormust. {linkstart}Lisateave{linkend}", + "Talk setup incomplete" : "Talk kõnerakenduse paigaldus on poolik", + "Disable lobby" : "Lülita ooteruumi kasutamine välja", + "Settings for participant \"{user}\"" : "Osaleja „{user}“ seadsitused", + "Participant \"{user}\"" : "Osaleja „{user}“", + "moderator" : "moderaator", + "bot" : "robot", + "guest" : "külaline", + "Ringing …" : "Heliseb…", + "Call rejected" : "Kõne jäi vastu võtmata", + "{time} talking …" : "kestus {time}…", + "{time} talking time" : "kõneaeg {time}", + "Raised their hand" : "Andis käega märku", + "Joined with video" : "Liitus videovaatega", + "Joined via phone" : "Liitus telefonist", + "Joined with audio" : "Liitus vaid heliga", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Hetkel on teksti pikkus {charactersCount} tähemärki, kuid ta peaks olema sama või vähem kui {maxLength} tähemärki pikk. ", + "Remove group and members" : "Eemalda gruppe ja liikmeid", + "Remove team and members" : "Eemalda tiime ja liikmeid", + "Remove participant" : "Eemalda osaleja", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ grupi koos oma liikmetega sellest vestlusest?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ tiimi koos oma liikmetega sellest vestlusest?", + "Do you really want to remove {displayName} from this conversation?" : "Kas sa kindlasti soovid eemaldada „{displayName}“ sellest vestlusest?", + "Notification was sent to {displayName}" : "Teavitus on saadetud kasutajale {displayName}", + "Could not send notification to {displayName}" : "Ei õnnestunud saata teavitust kasutajale {displayName}", + "Permissions granted to {displayName}" : "Õigused on antud kasutajale {displayName}", + "Could not modify permissions for {displayName}" : "„{displayName}“ õigusi ei õnnestunud muuta", + "Permissions removed for {displayName}" : "Õigused on eemaldatud kasutajalt {displayName}", + "Permissions set to default for {displayName}" : "Vaikimisi õigused „{displayName}“ jaoks", + "Phone number could not be hung up" : "Kõne lõpetamine ei õnnestunud", + "Phone number could not be put on hold" : "Telefoninumbri ootele panek ei õnnestunud", + "Phone number could not be muted" : "Telefoninumbri summutamine ei õnnestunud", + "Phone number could not be unmuted" : "Telefoninumbri summutamise lõpetamine ei õnnestunud", + "DTMF message could not be sent" : "DTMF sõnumi saatmine ei õnnestunud", + "Phone number copied to clipboard" : "Telefoninumber on lõikelauale kopeeritud", + "Phone number could not be copied" : "Telefoninumbri kopeerimine ei õnnestunud", + "in the lobby" : "ooteruumis", + "Dial out phone" : "Telefon väljahelistamiseks", + "Hang up phone" : "Lõpeta kõne", + "Move back to lobby" : "Suundu tagasi ooteruumi", + "Move to conversation" : "Teisalda vestlusesse", + "Dial-in PIN" : "Sissehelistamisteenuse PIN-kood", + "Demote from moderator" : "Võta moderaatori õigused ära", + "Promote to moderator" : "Määra moderaatoriks", + "Resend invitation" : "Saada kutse uuesti", + "Send call notification" : "Saada kõneteavitus", + "Dial out phone number" : "Väljahelistamisteenuse number", + "Resume call for phone number" : "Jätka telefoninumbri kõnet", + "Put phone number on hold" : "Pane telefoninumber ootele", + "Unmute phone number" : "Lõpeta telefoninumbri summutamine", + "Mute phone number" : "Summuta telefoninumber", + "Copy phone number" : "Kopeeri telefoninumber", + "Reset custom permissions" : "Lähtesta kohandatud õigused", + "Grant all permissions" : "Annada kõik õigused", + "Remove all permissions" : "Eemaldada kõiki õigused", + "Also ban from this conversation" : "Samaga sea suhtluskeeld siin vestluses", + "Internal note (reason to ban)" : "Sisemine märge (suhtluskeelu põhjus)", + "Remove" : "Eemalda", + "Permissions modified for {displayName}" : "„{displayName}“ õigused on muudetud", + "Add users, groups or teams" : "Lisa kasutajaid, gruppe või tiime", + "Add users or groups" : "Lisa kasutajaid või gruppe", + "Add users or teams" : "Lisa kasutajaid või tiime", + "Add users" : "Lisa kasutajaid", + "Add groups or teams" : "Lisa gruppe või tiime", + "Add groups" : "Lisa gruppe", + "Add teams" : "Lisa tiime", + "Add other sources" : "Lisa veel allikaid", + "Add emails" : "Lisa e-posti aadresse", + "Integrations" : "Lõimingud", + "Add federated users" : "Lisa kasutajaid liitpilvest", + "Searching …" : "Otsin ...", + "Search for more users" : "Otsi veel kasutajaid", + "You can search or add participants via name, email, or Federated Cloud ID" : "Sa võid otsida või lisada osalejaid nime, e-posti aadressi või kasutajatunnuse alusel liitpilves", + "Search or add participants" : "Otsi või lisa osalejaid", + "Invitation was sent to {actorId}" : "Kutse on saadetud kasutajale {actorId}", + "An error occurred while adding the participants" : "Osalejate lisamisel tekkis viga", + "A new group conversation with selected participant will be created" : "Järgnevaga luuakse valitud osalejaga uus rühmavestlus", + "Participants" : "Osalejad", + "Pinned by a deleted user" : "Esiletõstetud kustutatud kasutaja poolt", + "Participants ({count})" : "Osalejad ({count})", + "Open chat" : "Ava vestlus", + "You have new unread messages in the chat." : "Sul on vestluses uusi lugemata sõnumeid", + "You have been mentioned in the chat." : "Sind on vestluses mainitud", + "Search messages" : "Otsi sõnumeid", + "Chat" : "Vestle", + "Details" : "Üksikasjad", + "Shared items" : "Jagatud objektid", + "Search in {name}" : "Otsi siin: {name}", + "Threads in {name}" : "Jutulõngad: {name}", + "{actor} in {conversation}" : "{actor} vestluses „{conversation}“", + "Search messages …" : "Otsi sõnumeid…", + "Search options" : "Otsinguvalikud", + "From User" : "Kasutajalt", + "Since" : "Alates", + "Until" : "Kuni", + "No results found" : "Otsingutulemusi ei leidu", + "Load more results" : "Laadi veel tulemusi", + "Recent threads" : "Hiljutised jutulõngad", + "Projects" : "Projektid", + "No shared items" : "Jaosmeediat ei leidu", + "Thread notifications" : "Jutulõngade teavitused", + "Thread actions" : "Tegevused jutulõngaga", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link vestlusele", + "No open conversations found" : "Avalikke vestlusei ei leidu", + "Either there are no open conversations or you joined all of them." : "Avalikke vestlusi ei leidu või sa oled kõikide nendega juba liitunud.", + "Check spelling or use complete words." : "Palun kontrolli õigekirja või kasuta terveid sõnu.", + "Search conversations or users" : "Otsi vestlusi või kasutajaid", + "Select conversation" : "Vali vestlus", + "Number length is not valid" : "Numbri pikkus pole korrektne", + "Region code is not valid" : "Suunanumber pole korrektne", + "Number length is too short" : "Numbri pikkus on liiga väike", + "Number length is too long" : "Numbri pikkus on liiga suur", + "Number is not valid" : "Number pole korrektne", + "Phone numbers" : "Telefoninumbrid", + "Display name: {name}" : "Kuvatav nimi: {name}", + "Edit display name" : "Muuda kuvatavat nime", + "Display name (required)" : "Kuvatav nimii (nõutav)", + "Save name" : "Salvesta nimi", + "I picked message bubbles" : "Ma valisin jutumullid", + "I picked the list style" : "Ma valisin loendivaate", + "Error while setting personal setting" : "Viga isikliku seadistuste salvestamisel", + "Error while saving sounds setting" : "Viga helide seadistuste salvestamisel", + "Compact conversations list" : "Vestluste kompaktne loend", + "Chat appearance" : "Vestluse välimus", + "Messages list" : "Sõnumid loendina", + "Message bubbles" : "Sõnumid jutumullidena", + "Play sounds when participants join or leave a call" : "Kui osalejad liituvad kõnega või lahkuvad sealt, siis anna kõlliga märku", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Tootja poolt seatud piirangute tõttu pole see hetkel saadaval ei iPadis ega iPhone'is", + "Notification settings" : "Teavituse seadistused", + "Sounds for chat and call notifications" : "Vestluste ja kõneteavituste jaoks kasutatavad helid", + "Invalid language ({languageId})" : "Vigane keel ({languageId})", + "Default language" : "Vaikimisi keel", + "Default language ({languageName})" : "Vaikimisi keel ({languageName})", + "Error when trying to load the available live translation languages" : "Viga saadaval keelte laadimine reaalajas tõlkimiseks", + "Error when trying to set live translation language" : "Viga reaalajas tõlkimise keele seadistamisel", + "Set language used to show the transcriptions" : "Seadista ülestähendatu kuvamise keel", + "Select location for attachments" : "Vali asukoht manuste jaoks", + "Error while setting attachment folder" : "Manuste kausta määramisel tekkis viga", + "Error while setting read status privacy" : "Lugemisteatiste oleku privaatsuse määramisel tekkis viga", + "Error while setting typing status privacy" : "Kirjutusteatiste oleku privaatsuse määramisel tekkis viga", + "Error while setting default media state" : "Vaikimisi meediumioleku salvestamisel tekkis viga", + "Turn camera and microphone off by default" : "Vaikimisi lülita kaamera ja mikrofon välja", + "Blur camera background by default" : "Vaikimisi hägusta kaamera taust", + "Skip device preview before joining a call" : "Enne kõnega liitumist ära näita seadme ekraani eelvaadet", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Kaamera lülitatakse liitumisel välja. Näidatakse alati, kui salvestamise nõusolek on nõutav.", + "Appearance & Sounds" : "Välimus ja heli", + "Privacy" : "Privaatsus", + "Send read receipts" : "Saada lugemiskinnitusi", + "When off, all read statuses will be hidden" : "Kui see eelistus on lülitatud välja, siis lugemiste olekuteated peidetakse", + "Share typing status" : "Jaga kirjutamisteatisi", + "When off, all typing indicators will be hidden" : "Kui see eelistus on lülitatud välja, siis kirjutamisteatised peidetakse", + "Attachments folder" : "Manuste kaust", + "Toggle full screen" : "Lülita täisekraan sisse/välja", + "Return to Home screen" : "Tagasi avalehele", + "Search" : "Otsi", + "Shortcuts while in a chat" : "Kiirklahvid vestluse ajal", + "Focus the chat input" : "Fookus vestluse sisendile", + "Unfocus the chat input to use shortcuts" : "Kiirklahvide kasutamiseks eemalda fookus vestluse sisendilt", + "Edit your last message" : "Muuda oma viimast sõnumit", + "Shortcuts while in a call" : "Kiirklahvid kõne ajal", + "Camera on and off" : "Kaamera sisse/välja", + "Microphone on and off" : "Mikrofon sisse/välja", + "Raise or lower hand" : "Anna käega märku või lõpeta märguandmine", + "Push to talk or push to mute" : "Vajuta rääkimiseks või summutamiseks", + "Zoom-in / zoom-out a screen share" : "Suumi jagatavas ekraanis sisse/välja", + "Mouse wheel" : "Hiire ratas", + "Start call silently" : "Helista vaikselt", + "Start call" : "Helista", + "End call" : "Lõpeta kõne", + "The server was updated, you cannot start or join a call." : "Server on uuendatud, sa ei saa helistada ega kõnega liituda.", + "This call has just ended" : "Kõne on just lõppenud", + "You will be able to join the call only after a moderator starts it." : "Sa saad kõnega liituda pärast seda, kui moderaator on kõne algatanud.", + "End call for everyone" : "Lõpeta kõne kõigi jaoks", + "Starting the recording" : "Alustan salvestamist", + "Recording" : "Salvestan", + "The call has been running for one hour." : "Kõne on kestnud üle tunni.", + "Cancel recording start" : "Katkesta salvestamise alustamine", + "Stop recording" : "Lõpeta salvestamine", + "Send a reaction" : "Reageeri", + "React with {reaction}" : "Reageeri {reaction} emojiga", + "All tasks done!" : "Kõik ülesanded on täidetud!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n ülesanne","{done} / %n ülesannet"], + "Add participants to this call" : "Lisa sellele kõnele osalejaid", + "_%n participant in call_::_%n participants in call_" : ["Kõnes on %n osaleja","Kõnes on %n osalejat"], + "Scheduled messages" : "Ajastatud sõnumid", + "You are not allowed to enable screensharing" : "Sul pole luba ekraanijagamise käivitamiseks", + "No screensharing" : "Ekraanijagamist pole", + "Screensharing options" : "Ekraanijagamise valikud", + "Enable screensharing" : "Luba ekraanijagamine", + "Bad sent video and screen quality." : "Edastatud video ja ekraanivaate kehv kvaliteet.", + "Bad sent screen quality." : "Edastatud ekraanivaate kehv kvaliteet.", + "Bad sent video quality." : "Edastatud video kehv kvaliteet.", + "Bad sent audio, video and screen quality." : "Edastatud heliriba, video ja ekraanivaate kehv kvaliteet.", + "Bad sent audio and screen quality." : "Edastatud heliriba ja ekraanivaate kehv kvaliteet.", + "Bad sent audio and video quality." : "Edastatud heliriba ja video kehv kvaliteet.", + "Bad sent audio quality." : "Edastatud heli kehv kvaliteet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sinu jagatud ekraani selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal tausta hägustamine või videovoog tervikuna välja lülitada.", + "Disable background blur" : "Lülita tausta hägustamine välja", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sinu ekraanivaadet selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi näha sinu jagatud ekraani.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind selgelt näha. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal tausta hägustamine või videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamise ajal videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi ekraanijagamine välja lülitada.", + "Disable screenshare" : "Lülita ekraanijagamine välja", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi tausta hägustamine või videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista ja selgelt näha. Olukorra parandamiseks proovi videovoog välja lülitada.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sinu arvuti jõudlus on väike või on internetiühendus hõivatud ning teised kasutajad ei pruugi sind korrektselt mõista.", + "Screen sharing is not supported by your browser." : "Ekraani jagamine pole sinu veebibrauseris toetatud", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekraani jagamiseks pead kasutama HTTPS protokolli.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekraanijagamiseks tuleb leht laadida üle HTTPS protokolli.", + "An error occurred while starting screensharing." : "Ekraanijagamise alustamisel tekkis viga.", + "Select virtual background" : "Vali virtuaalne taust", + "Show your screen" : "Näita oma ekraani", + "Stop screensharing" : "Lõpeta ekraanijagamine", + "Mute others" : "Summuta muud", + "Start recording" : "Alusta salvestamist", + "Set up breakout rooms" : "Seadista virtuaalseid töötube", + "Download attendance list" : "Laadi alla osalejate loend", + "Open Calendar" : "Ava kalender", + "Remove participant {name}" : "Eemalda osaleja {name}", + "Would you like to delete this conversation?" : "Kas sa sooviksid selle vestluse kustutada?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["See vestlus kustutatakse kõigi jaoks %n päeva möödudes automaatselt.","See vestlus kustutatakse kõigi jaoks %n päeva möödudes automaatselt."], + "Are you sure you want to delete this conversation?" : "Kas oled kindel, et soovid selle vestluse kustutada?", + "Delete now" : "Kustuta kohe", + "Keep" : "Hoia alles", + "Open dialpad" : "Ava numbriklahvistik", + "Select a region" : "Vali maa või piirkond", + "Local time: {time}" : "Kohalik aeg: {time}", + "Scheduled {datetime}" : "Ajastatud: {datetime}", + "Scheduled for {datetime}" : "Ajastatud: {datetime}", + "Search …" : "Otsi…", + "Message without mention" : "Ilma mainimiseta sõnum", + "Mention myself" : "Maini iseennast", + "Mention everyone" : "Maini kõiki", + "Select a conversation" : "Vali vestlus", + "Select a mode" : "Vali režiim", + "You do not have permissions to access this conversation." : "Sul puuduvad õigused selles vestluses osalemiseks.", + "Join a different conversation or start a new one." : "Liitu mõne muu vestlusega või alusta uut.", + "The conversation does not exist" : "Seda vestlust pole olemas", + "Join a conversation or start a new one!" : "Liitu vestlusega või alusta uut!", + "Duplicate session" : "Topetsessioon", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "See vestlus on avatud muul vahekaardil. Hetkel kasutatav serveri versioon ei toeta sama vestluse avamist mitmel vahekaardil.", + "Creating and joining a conversation with \"{userid}\"" : "Loon vestluse kasutajaga „{userid}“ ning liitun sellega", + "Join a conversation or start a new one" : "Liitu vestlusega või alusta uut", + "Error while joining the conversation" : "Viga vestlusega liitumisel", + "Another user" : "Muu kasutaja", + "Hey! Are you using the list style or message bubbles?" : "Hei! Kas sa kasutad loendivaadet või jutumullide vaatet?", + "Nextcloud URL" : "Nextcloudi võrguaadress", + "Nextcloud user" : "Nextcloudi kasutaja", + "User password" : "Kasutaja salasõna", + "Talk conversation" : "Vestlus kõnerakenduses", + "Skip TLS verification" : "Jäta TLS-ühenduse verifitseerimine vahele", + "Matrix server URL" : "Matrixi serveri võrguaadress", + "User" : "Kasutaja", + "Matrix channel" : "Matrixi kanal", + "Mattermost server URL" : "Mattermosti serveri võrguaadress", + "Mattermost user" : "Mattermosti kasutaja", + "Team name" : "Tiimi nimi", + "Channel name" : "Kanali nimi", + "Rocket.Chat server URL" : "Rocket.Chati serveri võrguaadress", + "User name or email address" : "Kasutaja nimi või e-posti aadress", + "Rocket.Chat channel" : "Rocket.Chati kanal", + "Zulip server URL" : "Zulipi serveri võrguaadress", + "Bot user name" : "Roboti kasutajanimi", + "Bot API key" : "Roboti liidestuse võti", + "Zulip channel" : "Zulipi kanal", + "API token" : "API tunnusluba", + "Slack channel" : "Slacki kanal", + "Server ID or name" : "Serveri tunnus või nimi", + "Channel ID (prefixed with \"ID:\") or name" : "Kanali tunnus/ID (eesliiteks „ID:“) või nimi", + "Channel" : "Kanal", + "Login" : "Kasutajanimi", + "Chat ID" : "Vestluse tunnus", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC serveri võrguaadress (nt. chat.freenode.net:6667)", + "Nickname" : "Hüüdnimi", + "Connection password" : "Ühenduse salasõna", + "IRC channel" : "IRC kanal", + "Channel password" : "Kanali salasõna", + "NickServ nickname" : "Hüüdnimi NickServis", + "NickServ password" : "NickServi salasõna", + "Use TLS" : "Kasuta TLS-i", + "Use SASL" : "Kasuta SASL-i", + "Tenant ID" : "Klienditunnus (Tenant ID)", + "Client ID" : "Kliendi tunnus", + "Team ID" : "Tiimi tunnus", + "Thread ID" : "Jutulõnga tunnus", + "XMPP/Jabber server URL" : "XMPP/Jabberi serveri võrguaadress", + "MUC server URL" : "XMPP jututoa (Multiuser chat) serveri võrguaadress", + "Jabber ID" : "XMPP kasutajatunnus (Jabber ID)", + "Pinned messages" : "Esiletõstetud sõnumid", + "Media" : "Meedia", + "Polls" : "Küsitlused", + "Deck cards" : "Kanbani kaardid", + "Voice messages" : "Häälsõnumid", + "Locations" : "Asukohad", + "Call recordings" : "Kõnede salvestused", + "Audio" : "Helid", + "Show all pinned messages" : "Näita kõiki esiletõstetud sõnumeid", + "Show all media" : "Näita kõike meediat", + "Show all files" : "Näita kõiki faile", + "Show all polls" : "Näita kõiki küsitlusi", + "Show all deck cards" : "Näita kõiki kanbani kaarte", + "Show all voice messages" : "Näita kõiki häälsõnumeid", + "Show all locations" : "Näita kõiki asukohti", + "Show all call recordings" : "Näita kõiki kõnesalvestusi", + "Show all audio" : "Näita kõiki helifaile", + "Show all other" : "Näita kõike muud", + "Follow conversation settings" : "Järgi vestluse seadistusi", + "Group" : "Grupp", + "Team" : "Tiim", + "You reconnected to the call" : "Sina liitusid uuesti kõnega", + "{actor} reconnected to the call" : "{actor} liitus uuesti kõnega", + "You added {user0} and {user1}" : "Sina lisasid kasutajad {user0} ja {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Sina lisasid kasutajad {user0}, {user1} ja veel %n osaleja","Sina lisasid kasutajad {user0}, {user1} ja veel %n osalejat"], + "An administrator added you and {user0}" : "Peakasutaja lisas sinu ja kasutaja {user0}", + "{actor} added you and {user0}" : "{actor} lisas sinu ja kasutaja {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Peakasutaja lisas sinu, {user0} ja veel %n osaleja","Peakasutaja lisas sinu, {user0} ja veel %n osalejat"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lisas sinu, {user0} ja veel %n osaleja","{actor} lisas sinu, {user0} ja veel %n osalejat"], + "An administrator added {user0} and {user1}" : "Peakasutaja lisas kasutajad „{user0}“ ja „{user1}“", + "{actor} added {user0} and {user1}" : "{actor} lisas kasutajad „{user0}“ ja „{user1}“", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Peakasutaja lisas {user0}, {user1} ja veel %n osaleja","Peakasutaja lisas {user0}, {user1} ja veel %n osalejat"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} lisas {user0}, {user1} ja veel %n osaleja","{actor} lisas {user0}, {user1} ja veel %n osalejat"], + "You removed {user0} and {user1}" : "Sina eemaldasid osalejad {user0} ja {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Sina eemaldasid kasutajad {user0}, {user1} ja veel %n osaleja","Sina eemaldasid kasutajad {user0}, {user1} ja veel %n osalejat"], + "An administrator removed you and {user0}" : "Peakasutaja eemaldas sinu ja kasutaja {user0}", + "{actor} removed you and {user0}" : "{actor} eemaldas sinu ja kasutaja {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Peakasutaja eemaldas sinu, {user0} ja veel %n osaleja","Peakasutaja eemaldas sinu, {user0} ja veel %n osalejat"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} eemaldas sinu, {user0} ja veel %n osaleja","{actor} eemaldas sinu, {user0} ja veel %n osalejat"], + "An administrator removed {user0} and {user1}" : "Peakasutaja eemaldas kasutajad {user0} ja {user1} ", + "{actor} removed {user0} and {user1}" : "{actor} eemaldas osalejad {user0} ja {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Peakasutaja eemaldas osalejad {user0} ja {user1} ning veel %n osaleja","Peakasutaja eemaldas osalejad {user0} ja {user1} ning veel %n osalejat"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eemaldas osalejad {user0} ja {user1} ning veel %n osaleja","{actor} eemaldas osalejad {user0} ja {user1} ning veel %n osalejat"], + "You and {user0} joined the call" : "Sina ja {user0} liitusid kõnega", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Sina, {user0} ja veel %n osaleja liitusid kõnega","Sina, {user0} ja veel %n osalejat liitusid kõnega"], + "{user0} and {user1} joined the call" : "{user0} ja {user1} liitusid kõnega", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ja veel %n osaleja liitus kõnega","{user0}, {user1} ja veel %n osalejat liitusid kõnega"], + "You and {user0} left the call" : "Sina ja {user0} lahkusid kõnest", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Sina, {user0} ja veel %n osaleja lahkus kõnest","Sina, {user0} ja veel %n osalejat lahkusid kõnest"], + "{user0} and {user1} left the call" : "{user0} ja {user1} lahkusid kõnest", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ja veel %n osaleja lahkus kõnest","{user0}, {user1} ja veel %n osalejat lahkusid kõnest"], + "You promoted {user0} and {user1} to moderators" : "Sina määrasid kasutajad {user0} ja {user1} moderaatoriteks", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Sina määrasid kasutajad {user0}, {user1} ja veel %n osaleja moderaatoriteks","Sina määrasid kasutajad {user0}, {user1} ja veel %n osalejat moderaatoriteks"], + "An administrator promoted you and {user0} to moderators" : "Peakasutaja määras sinu ja kasutaja {user0} moderaatoriteks", + "{actor} promoted you and {user0} to moderators" : "{actor} määras sinu ja kasutaja {user0} moderaatoriteks", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Peakasutaja määras sinu, „{user0}“ ja veel %n osaleja moderaatoriteks","Peakasutaja määras sinu, „{user0}“ ja veel %n osalejat moderaatoriteks"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} määras sinu, {user0} ja veel %n osaleja moderaatoriteks","{actor} määras sinu, „{user0}“ ja veel %n osalejat moderaatoriteks"], + "An administrator promoted {user0} and {user1} to moderators" : "Peakasutaja määras kasutajad „{user0}“ ja „{user1}“ moderaatoriteks", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} määras kasutajad „{user0}“ ja „{user1}“ moderaatoriteks", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Peakasutaja määras kasutajad {user0} ja {user1} ning veel %n osaleja moderaatoriteks","Peakasutaja määras kasutajad „{user0}“ ja „{user1}“ ning veel %n osalejat moderaatoriteks"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} määras kasutajad {user0}, {user1} ja veel %n osaleja moderaatoriteks","{actor} määras kasutajad „{user0}“, „{user1}“ ja veel %n osalejat moderaatoriteks"], + "You demoted {user0} and {user1} from moderators" : "Sina võtsid kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Sina võtsid kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","Sina võtsid kasutajatelt „{user0}“, „{user1}“ ja veel %n osalejalt moderaatori õigused ära"], + "An administrator demoted you and {user0} from moderators" : "Peakasutaja võttis sinult ja veel kasutajalt „{user0}“ moderaatori õigused ära", + "{actor} demoted you and {user0} from moderators" : "{actor} võttis sinult ja veel kasutajalt „{user0}“ moderaatori õigused ära", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Peakasutaja võttis sinult, kasutajalt „{user0}“ ja veel %n osaleja moderaatori õigused ära","Peakasutaja võttis sinult, kasutajalt „{user0}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} võttis sinult, kasutajalt „{user0}“ ja veel %n osaleja moderaatori õigused ära","{actor} võttis sinult, kasutajalt „{user0}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "An administrator demoted {user0} and {user1} from moderators" : "Peakasutaja võttis kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} võttis kasutajatelt „{user0}“ ja „{user1}“ moderaatori õigused ära", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Peakasutaja võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","Peakasutaja võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n osaleja moderaatori õigused ära","{actor} võttis kasutajatelt „{user0}“, „{user1}“ ja veel %n-lt osalejalt moderaatori õigused ära"], + "You:" : "Sina:", + "You: {lastMessage}" : "Sina: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serveri tarkvara on uuendatud.", + "(edited by you)" : "(muudetud sinu poolt)", + "(edited by a deleted user)" : "(muudetud kustutatud kasutaja poolt)", + "(edited by {moderator})" : "(muudetud {moderator} moderaatori poolt)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Sa proovid selle vestlusega liituda, kui samal ajal juba muus aknas või seadmes toimib sama vestluse aktiivne sessioon. Selline võimalus pole hetkel Nextcloudi kõnerakenduses toetatud. Kuidas sa sooviksid jätkata?.", + "Leave this page" : "Lahku sellelt lehelt", + "Join here" : "Liitu siin", + "Deck card has been posted to {conversation}" : "Kanbani kaart on lisatud „{conversation}“ vestlusesse", + "An error occurred while posting deck card to conversation" : "Kanbani kaardi postitamisel vestlusesse tekkis viga", + "Post to a conversation" : "Postita vestlusesse", + "Post to conversation" : "Postita vestlusesse", + "The recording failed. Please contact your administrator." : "Kõne salvestamine ei õnnestunud. Palun võta ühendust oma peakasutajaga.", + "Location has been posted to {conversation}" : "Asukoht on saadetud „{conversation}“ vestlusesse", + "An error occurred while posting location to conversation" : "Asukoha postitamisel vestlusesse tekkis viga", + "Share to a conversation" : "Jaga vestlusesse", + "Share to conversation" : "Jaga vestlusesse", + "In conversation" : "Vestluses", + "Search in conversation: {conversation}" : "Otsi vestlusest: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Sinu seadmest lubatud päringute arv on hetkel piiratud jõuründevastase reeglite alusel", + "Error while clearing conversation history" : "Viga vestluse ajaloo kustutamisel", + "Error occurred while allowing guests" : "Külaliste lubamisel tekkis viga", + "Error occurred while disallowing guests" : "Külaliste keelamisel tekkis viga", + "Error occurred when restricting the conversation to moderator" : "Vestluse piiramisel vaid moderaatoritega tekkis viga", + "Error occurred when opening the conversation to everyone" : "Vestluse avamisel kõigi jaoks tekkis viga", + "Conversation password has been saved" : "Vestluse salasõna on salvestatud", + "Conversation password has been removed" : "Vestluse salasõna on eemaldatud", + "Error occurred while saving conversation password" : "Vestluse salasõna salvestamisel tekkis viga", + "Call recording is starting." : "Kõne salvestamine algab.", + "Call recording stopped while starting." : "Kõne salvestamine peatus alustamisel.", + "Call recording stopped. You will be notified once the recording is available." : "Kõne salvestamine on lõppenud. Sa saad teate, kui salvestis on saadaval.", + "Conversation picture set" : "Vestluse pilt on salvestatud", + "Conversation picture deleted" : "Vestluse pilt on kustutatud", + "Could not delete the conversation picture" : "Vestluse pildi kustutamine ei õnnestunud", + "Could not remove the automatic expiration" : "Ei õnnestunud eemaldada automaatset aegumist", + "Could not post message: {errorMessage}" : "Sõnumi saatmine polnud võimalik: {errorMessage}", + "Participant is banned successfully" : "Osalejale suhtluskeelu seadmine õnnestus", + "Error while banning the participant" : "Osalejale suhtluskeelu seadmisel tekkis viga", + "An error occurred while fetching the participants" : "Osalejate laadimisel tekkis viga", + "Could not send invitation to {actorId}" : "Kasutajale {actorId} polnud võimalik kutset saata", + "Invitations sent" : "Kutsed on saadetud", + "Error occurred when sending invitations" : "Kutsete saatmisel tekkis viga", + "Failed to join the conversation." : "Vestlusega ei õnnestunud liituda.", + "An error occurred while creating breakout rooms" : "Virtuaalsete töötubade loomisel tekkis viga", + "An error occurred while re-ordering the attendees" : "Osalejate järjestuse muutmisel tekkis viga", + "An error occurred while deleting breakout rooms" : "Virtuaalsete töötubade kustutamisel tekkis viga", + "An error occurred while starting breakout rooms" : "Virtuaalsete töötubade käivitamisel tekkis viga", + "An error occurred while stopping breakout rooms" : "Virtuaalsete töötubade peatamisel tekkis viga", + "An error occurred while sending a message to the breakout rooms" : "Virtuaalsetesse töötubadesse sõnumi saatmisel tekkis viga", + "An error occurred while requesting assistance" : "Abi küsimisel tekkis viga", + "An error occurred while resetting the request for assistance" : "Abiküsimise päringu tühistamisel tekkis viga", + "An error occurred while joining breakout room" : "Virtuaalse töötoaga liitumisel tekkis viga", + "Failed to rename the thread" : "Jutulõnga nime muutmine ei õnnestunud", + "Error fetching upcoming events" : "Järgmiste sündmuste laadimisel tekkis viga", + "Error fetching upcoming reminders" : "Järgmiste meeldetuletuste laadimisel tekkis viga", + "An error occurred while accepting an invitation" : "Kutse vastuvõtmisel tekkis viga", + "An error occurred while rejecting an invitation" : "Kõne vastuvõtmata jätmisel tekkis viga", + "{guest} (guest)" : "{guest} (külaline)", + "Poll draft has been saved" : "Küsitluse kavand on salvestatud", + "An error occurred while saving the draft" : "Küsitluse kavandi salvestamisel tekkis viga", + "An error occurred while submitting your vote" : "Hääletamisel tekkis viga", + "An error occurred while ending the poll" : "Küsitluse lõpetamisel tekkis viga", + "An error occurred while deleting the poll draft" : "Küsitluse kavandi kustutamisel tekkis viga", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} koostas „{name}“ küsitluse. Hääletamiseks klõpsi", + "Failed to add reaction" : "Ei õnnestunud lisada reakstiooni", + "Failed to remove reaction" : "Regeerimise eemaldamine ei õnnestunud", + "The server is in maintenance mode." : "Server on hooldusrežiimis.", + "Federated server was updated." : "Liitpilve serveri tarkvara on uuendatud.", + "Error while uploading file \"{fileName}\"" : "„{fileName}“ faili üleslaadimisel tekkis viga", + "Not enough free space to upload file \"{fileName}\"" : "„{fileName}“ faili üleslaadimiseks pole piisavalt vaba ruumi", + "You are not allowed to share files" : "Sul pole luba failide jagamiseks", + "Error while sharing file" : "Viga faili jagamisel", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Sinu kasutatav veebibrausel pole Nextcloud Talki poolt täies mahus toetatud. palun kasuta järgnevate brauserte viimaseid versioone: Mozilla Firefox, Microsoft Edge, Google Chrome, Opera või Apple Safari.", + "_In %n hour_::_In %n hours_" : ["%n tunni pärast","%n tunni pärast"], + "_%n minute _::_%n minutes_" : ["%n minut","%n minutit"], + "In {hours} and {minutes}" : "{hours} tunni ja {minutes} minuti pärast", + "_In %n minute_::_In %n minutes_" : ["%n minuti pärast","%n minuti pärast"], + "Later today – {timeLocale}" : "Täna hiljem – {timeLocale}", + "Set time for later today" : "Lisa aeg tänaseks hilisemaks ajaks", + "Tomorrow – {timeLocale}" : "Homme – {timeLocale}", + "Set time for tomorrow" : "Lisa aeg homseks", + "This weekend – {timeLocale}" : "Sel nädalavahetusel – {timeLocale}", + "Set time for this weekend" : "Lisa aeg selleks nädalavahetuseks", + "Next week – {timeLocale}" : "Järgmisel nädalal – {timeLocale}", + "Set time for next week" : "Lisa aeg selleks nädalaks", + "Message link copied to clipboard" : "Sõnumi link on kopeeritud lõikelauale ", + "Conversation link copied to clipboard" : "Vestluse link on kopeeritud lõikelauale.", + "The link could not be copied" : "Lingi kopeerimine ei õnnestunud", + "Error while parsing a PROPFIND error" : "Viga PROPFIND-meetodi vea töötlemisel", + "Sending signaling message has failed" : "Kõnehõlbussõnumi saatmine ei õnnestunud", + "Lost connection to signaling server. Trying to reconnect." : "Kadus ühendus kõnehõlbustusserveriga. Proovi, kas ühenduse uuesti loomine aitab.", + "Lost connection to signaling server." : "Kadus ühendus kõnehõlbustusserveriga.", + "Connecting is taking longer than expected …" : "Ühendamiseks kulub rohkem aega, kui peaks…", + "Failed to connect. Retrying …" : "Ühendamine ei õnnestunud. Proovin uuesti…", + "Failed to connect. The signaling server may be set up incorrectly" : "Ühendamine ei õnnestunud. Kõnehõlbustusserver võib olla valesti seadistatud", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Kasutusel olev kõnehõlbustusserver vajab selle Talki versiooniga ühilduvuse nimel uuendamist. Palun võta ühendust oma serveri peakasutajaga.", + "Please restart the app." : "Palun käivita rakendus uuesti.", + "Please reload the page." : "Palun laadi leht uuesti.", + "Please try to restart the app." : "Palun proovi rakenduse uuesti käivtamist.", + "Please try to reload the page." : "Palun proovi lehe uuesti laadimist.", + "Do not disturb" : "Ära sega", + "Away" : "Eemal", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kaamera {number}", + "Speaker {number}" : "Kõlar {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Tundub, et räägid, aga sinu mikrofon on summutatud. Kui tahad, et teised sind kuuleks, siis palun lülita mikrofon uuesti sisse", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Selleks kulub rohkem aega, kui me eeldasime. Kas meediaõigused on juba olemas (või keelatud)? Kui vastus on jah, siis palun käivita brauser või töölauarakendus uuesti - heli ja video enam ei toimi korraliukult.", + "Access to microphone & camera is only possible with HTTPS" : "Ligipääs mikrofonile ja kaamerale toimib vaid siis, kui server kasutab https-protokolli", + "Please move your setup to HTTPS" : "Palun seadista server kasutajama https-protokolli või palu, et peakasutaja teeks seda", + "Access to microphone & camera was denied" : "Ligipääs mikrofonile ja kaamerale on keelatud", + "WebRTC is not supported in your browser" : "WebRTC pole sinu veebibrauseris toetatud", + "Please use a different browser like Firefox or Chrome" : "Palun kasuta mõnda muud veebibrauserit nagu Firefox või Chrome", + "Error while accessing microphone & camera" : "Viga ligipääsul mikrofonile ja kaamerale", + "%s Talk on your mobile devices" : "%s Talk sinu nutiseadmes", + "Join conversations at any time, anywhere, on any device." : "Liitu vestlusega igal ajal, igast asukohast ja igast seadmest.", + "Android app" : "Androidi rakendus", + "iOS app" : "iOS-i rakendus", + "__language_name__" : "Eesti", + "Webhook Demo" : "Webhooki demo", + "Call summary (%s)" : "Kõne kokkuvõte (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "See robot postitab kõne lõppedes kõikidele kõnes osalejatele ülevaatliku sõnumi, osalejate ja ülesannete andmetega", + "Tasks" : "Ülesanded", + "Notes" : "Märkmed", + "Reports" : "Aruanded", + "Decisions" : "Otsused", + "Agenda" : "Päevakava", + "Call summary" : "Kõne kokkuvõte", + "Call summary - {title}" : "Kõne kokkuvõte - {title}", + "Talk conversation for event" : "Talki vestlus ürituse jaoks", + "Client Push is installed, this improves the performance of desktop clients." : "Tõuketeenused kliendile on paigaldatud ja see parandab töölauaklientide jõudlust.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} pole paigaldatud ja see võib töölauaklientide puhul tekitada jõudlusprobleeme.", + "Next meeting" : "Järgmine kohtumine", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Lisa kohtumine oma kalendrisse. Kui kohtumispaigast on määratud kõnerakendus, siis saab ta olema siin nähtaval.", + "Join conversations from remote Nextcloud servers" : "Liitu vestlusega muus Nextcloudi serveris", + "Your default media state has been saved" : "Sinu vaikimisi meediumiolek on salvestatud", + "Set reminder for later today" : "Lisa meeldetuletus tänaseks hilisemaks ajaks", + "Set reminder for tomorrow" : "Lisa meeldetuletus homseks", + "Set reminder for this weekend" : "Lisa meeldetuletus selleks nädalavahetuseks", + "Set reminder for next week" : "Lisa meeldetuletus järgmiseks nädalaks", + "Generate summary" : "Koosta kokkuvõte", + "Open poll • You voted already" : "Avalik küsitlus • Sa oled juba hääletanud", + "Open poll • Click to vote" : "Avalik küsitlus • Hääletamiseks klõpsi", + "Poll • Ended" : "Küsitlus on lõppenud", + "Talk recording from {time} ({conversation})" : "Salvestus: {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Küsitluse tulemused • %n hääl","Küsitluse tulemused • %n häält"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Avalik küsitlus • %n hääletamine","Avalik küsitlus • %n hääletamist"], + "Submit vote" : "Hääleta", + "Your privacy setting has been saved" : "Sinu privaatsuse seadistus on salvestatud", + "Your personal setting has been saved" : "Sinu isiklik seadistus on salvestatud", + "Failed to save sounds setting" : "Ei õnnestu salvestada helide seadistusi", + "Sounds setting saved" : "Helide seadistused on salvestatud", + "Always shown if recording consent is required" : "Kui nõusolek salvestamiseks on vajalik, siis seda ikkagi näidatakse", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk on uuendatud, sa ei saa helistada ega kõnega liituda.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Sa liitusid selle vestlusega muus aknas või seadmes. Selline võimalus pole hetkel Nextcloudi kõnerakenduses toetatud ja seega sessioon sai suletud.", + "Nextcloud Talk was updated." : "Nextcloud Talk on uuendatud.", + "Nextcloud is in maintenance mode." : "Nextcloud on hooldusrežiimis.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk liitpilves on uuendatud.", + "Enable live translation" : "Lülita reaalajas tõlge sisse", + "I picked list style" : "Ma valisin loendi", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hei! Kas sa kasutad vestlusrakendust loendivaates või jutumullide vaates?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/eu.js b/l10n/eu.js new file mode 100644 index 0000000..24da1c9 --- /dev/null +++ b/l10n/eu.js @@ -0,0 +1,1607 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "elkarrizketa bat", + "(Duration %s)" : "(Iraupena %s)", + "You attended a call with {user1}" : "Dei batean parte hartu duzu {user1} erabiltzailearekin", + "_%n guest_::_%n guests_" : ["%n gonbidatu","%n gonbidatu"], + "You attended a call with {user1} and {user2}" : "Dei batean parte hartu duzu {user1} eta {user2} erabiltzaileekin", + "You attended a call with {user1}, {user2} and {user3}" : "Dei batean parte hartu duzu {user1}, {user2} eta {user3} erabiltzaileekin", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Dei batean parte hartu duzu {user1}, {user2}, {user3} eta {user4} erabiltzaileekin", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Dei batean parte hartu duzu {user1}, {user2}, {user3}, {user4} eta {user5} erabiltzaileekin", + "_%n other_::_%n others_" : ["beste %n ","beste %n "], + "{actor} invited you to {call}" : "{actor} erabiltzaileak {call} deira gonbidatu zaitu", + "You were invited to a conversation or had a call" : " Elkarrizketa batera gonbidatu zaituzte edo dei bat jaso duzu", + "Other activities" : "Beste jarduerak", + "Talk" : "Hizketaldia", + "Guest" : "Gonbidatua", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Ongi etorri Nextcloud Talk-era!\nElkarrizketa honetan ezaugarri berrien berri emango zaizu.", + "## New in Talk %s" : "## Berria Talk%s-n", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Orain Microsoft Edge eta Safari erabili daitezke audio eta bideo deietan parte hartzeko", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Orain bi pertsonaren arteko elkarrizketak iraunkorrak dira eta ezin dira nahi gabe talde-elkarrizketa bihurtu. Horretaz gain, parte-hartzaile batek elkarrizketa uzten duenean, ez da lehen bezala elkarrizketa automatikoki ezabatzen. Bi parte-hartzaileek uzten dutenean soilik ezabatzen da elkarrizketa zerbitzaritik", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Orain jakinarazpen bat bidal diezaiekezu txateko parte-hartzaile guztiei \"@all\" bidaliz", + "- With the \"arrow-up\" key you can repost your last message" : "- \"gora gezia\" erabiliz zure azken mezua berriz bidali dezakezu", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Orain Talk-ek komando berriak ditu, bidali \"/help\" txateko mezu bezala zure administratzaileak batere konfiguratu duen ikusteko", + "- With projects you can create quick links between conversations, files and other items" : "- Proiektuekin esteka azkarrak sor ditzakezu elkarrizketa, fitxategi eta bestelako elementuetara", + "- You can now mention guests in the chat" : "- Orain gonbidatuak aipatu ditzakezu txatean", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Orain elkarrizketek atondo bat eduki dezakete. Honek aukera ematen die moderatzaileei txat eta deira batu eta bilera prestatzeko, erabiltzaile eta gonbidatuek itxaron behar duten bitartean", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Orain mezuei erantzuna zuzenean eman diezaiekezu, besteei zure mezuari buruzko testuinguru gehiago emateko", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Orain elkarrizketa eta parte-hartzaileak bilatzean zure aurreko elkarrizketak ere iragaziko ditu, aurreko elkarrizketak bilatzea asko erraztuz", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Orain erabiltzaile talde pertsonalizatuak gehitu ditzakezu elkarrizketetara, zirkuluak aplikazioa instalatuta badago", + "- Check out the new grid and call view" : "- Eman begiratua sareta berriari eta deien ikuspegiari", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Orain zure gailutik txatera zuzenean igo eta arrastatu ta jaregin ditzakezu fitxategiak", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Partekaturiko fitxategiak orain zuzenean irekitzen dira txatean ikuspegi aplikazioekin", + "- You can now search for chats and messages in the unified search in the top bar" : "- Txatak eta mezuak goiko barrako bilaketa bateratuan bila ditzakezu", + "- Spice up your messages with emojis from the emoji picker" : "- Apaindu zure mezuak emotikono-hautatzailearen emotikonoekin", + "- You can now change your camera and microphone while being in a call" : "- Orain kamera eta mikrofonoa aldatu ditzakezu dei batean zaudenean", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Eman zure elkarrizketei testuinguru bat deskribapenaren bitartez eta ireki saioa hasita duten erabiltzaileek aurkitu eta bat egin dezaten", + "- See a read status and send failed messages again" : "- Ikusi irakurritako egoera eta bidali berriro huts egindako mezuak", + "- Raise your hand in a call with the R key" : "- Goratu eskua dei batean R teklarekin ", + "- Join the same conversation and call from multiple devices" : "- Batu elkarrizketa berera eta deitu gailu anitzetik", + "- Send voice messages, share your location or contact details" : "- Bidali ahots-mezuak, partekatu zure kokalekua edo kontaktu-xehetasunak", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Gehitu taldeak elkarrizketa batera eta talde berriaren kideak partehartzaile bezala gehituko dira automatikoki", + "- A preview of your audio and video is shown before joining a call" : "- Zure audio eta bideoaren aurrebista erakutsiko da deira sartu baino lehen", + "- You can now blur your background in the newly designed call view" : "- Orain zure atzeko planoa lausotu dezakezu diseinatu berri den deien ikuspegian", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatzaileek orain baimen orokorrak eta indibidualak esleitu ahal dizkiete parte-hartzaileei", + "- You can now react to chat messages" : "- Txat-mezueri erreakzionatu diezaiokezu orain", + "- In the sidebar you can now find an overview of the latest shared items" : "- Alboko barran orain partekatutako azken elementuen ikuspegi orokorra aurki dezakezu", + "- Use a poll to collect the opinions of others or settle on a date" : "- Erabili galdetegi bat besteen iritziak batzeko edo data bat ezartzeko", + "- Configure an expiration time for chat messages" : "- Konfiguratu txat-mezuen iraungitze-ordua", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Hasi deiak elkarrizketa handietan besteei jakinarazi gabe. Deia hasitakoan banakako deien jakinarazpenak bidal ditzakezu.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Bidali txat mezuak hartzaileei jakinarazi gabe premiazkoa ez bada", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojiak automatikoki osa daitezke orain \":\" bat idatzita", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Lotu hainbat elementu erabiliz hautatzaile adimendun berria \"/\" bat idatzita", + "- Conversations can now have an avatar or emoji as icon" : "- Elkarrizketek avatar edo emoji bat izan dezakete ikono gisa", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Atzeko plano birtualak ere eskuragarri daude orain bideo deietan, atzeko plano lausotuaz gain", + "- Reactions are now available during calls" : "- Erreakzioak eskuragarri daude orain deietan zehar", + "- Typing indicators show which users are currently typing a message" : "- Idazketa-adierazleek mezu bat idazten duten erabiltzaileek erakusten dute", + "- Groups can now be mentioned in chats" : "- Taldeak txatetan aipa daitezke orain", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Deien grabazioak automatikoki transkribatzen dira transkripzioen hornitzaile-aplikazio bat erregistratuta badago", + "- Chat messages can be translated if a translation provider app is registered" : "- Txat-mezuak itzulpenen hornitzaile-aplikazio erabiliz itzul daitezke bat erregistratuta badago", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** orain _txat_ mezuetan erabil daiteke", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook-ak eskuragarri daude orain bot-ak ezartzeko. Ikusi dokumentazioa informazio gehiagorako https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ezarri gogorarazpen bat txat-mezu batean, geroago berriro jakinarazteko", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Erabili **Oharrak niretzat** elkarrizketa oharrak hartzeko eta zure gailuen artean informazioa partekatzeko", + "- Captions allow to send a message with a file at the same time" : "- Epigrafeek fitxategi batekin mezu bat bidaltzeko aukera ematen dute aldi berean", + "_All %n participant_::_All %n participants_" : ["Parte-hartzaile %n","%n parte-hartzaile guztiak"], + "Talk updates ✅" : "Talk eguneraketak ✅", + "Reaction deleted by author" : "Egileak erreakzioa ezabatu du", + "{actor} created the conversation" : "{actor} erabiltzaileak elkarrizketa sortu du", + "You created the conversation" : "Elkarrizketa zuk sortu duzu", + "System created the conversation" : "Sistemak elkarrizketa sortu du", + "An administrator created the conversation" : "Administratzaile batek elkarrizketa sortu du", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} erabiltzaileak elkarrizketa berrizendatu du: \"%1$s\" -> \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Zuk elkarrizketa berrizendatu duzu: \"%1$s\" -> \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administratzaile batek elkarrizketaren izena aldatu du \"%1$s\" tik \"%2$s\"ra", + "{actor} set the description" : "{actor} deskribapena ezarri du", + "You set the description" : "Deskribapena ezarri duzu", + "An administrator set the description" : "Administratzaile batek deskribapena ezarri du", + "{actor} removed the description" : "{actor} erabiltzaileak deskribapena kendu du", + "You removed the description" : "Deskribapena kendu duzu", + "An administrator removed the description" : "Administratzaile batek deskribapena kendu du", + "You started a silent call" : "Dei isil bat hasi duzu", + "{actor} started a silent call" : "{actor}(e)k dei isil bat hasi du", + "You started a call" : "Dei bat hasi duzu", + "{actor} started a call" : "{actor} erabiltzaileak dei bat hasi du", + "{actor} joined the call" : "{actor} deira batu da", + "You joined the call" : "Deira batu zara", + "{actor} left the call" : "{actor} erabiltzaileak deia utzi du", + "You left the call" : "Deia utzi duzu", + "{actor} unlocked the conversation" : "{actor} erabiltzaileak elkarrizketa desblokeatu du", + "You unlocked the conversation" : "Elkarrizketa desblokeatu duzu", + "An administrator unlocked the conversation" : "Administratzaile batek elkarrizketa desblokeatu du", + "{actor} locked the conversation" : "{actor} erabiltzaileak elkarrizketa blokeatu du", + "You locked the conversation" : "Elkarrizketa blokeatu duzu", + "An administrator locked the conversation" : "Administratzaile batek elkarrizketa blokeatu du", + "{actor} limited the conversation to the current participants" : "{actor} erabiltzaileak uneko parte-hartzaileen muga ezarri dio elkarrizketari", + "You limited the conversation to the current participants" : "Uneko parte-hartzaileen muga ezarri diozu elkarrizketari", + "An administrator limited the conversation to the current participants" : "Administratzaile batek uneko parte-hartzaileen muga ezarri dio elkarrizketari", + "{actor} opened the conversation to registered users" : "{actor} erabiltzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat", + "You opened the conversation to registered users" : "Elkarrizketa ireki duzu erregistraturiko erabiltzaileentzat", + "An administrator opened the conversation to registered users" : "Administratzaile batek elkarrizketa ireki du erregistraturiko erabiltzaileentzat", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} erabiltzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "You opened the conversation to registered users and users created with the Guests app" : "Elkarrizketa ireki duzu erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administratzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "The conversation is now open to everyone" : "Orain elkarrizketa irekia dago edozeinentzat", + "{actor} opened the conversation to everyone" : "{actor} erabiltzaileak elkarrizketa ireki du edozeinentzat", + "You opened the conversation to everyone" : "Elkarrizketa ireki duzu edozeinentzat", + "{actor} restricted the conversation to moderators" : "{actor} erabiltzaileak elkarrizketa moderatzaileentzako murriztu du", + "You restricted the conversation to moderators" : "Elkarrizketa moderatzaileentzako murriztu duzu", + "{actor} started breakout rooms" : "{actor}-(e)k taldekako gelak hasi ditu", + "You started breakout rooms" : "Taldekako gelak hasi dituzu", + "{actor} stopped breakout rooms" : "{actor}-(e)k taldekako gelak geldiarazi ditu", + "You stopped breakout rooms" : "Taldekako gelak geldiarazi dituzu", + "{actor} allowed guests" : "{actor} erabiltzaileak gonbidatuak baimendu ditu", + "You allowed guests" : "Gonbidatuak baimendu dituzu", + "An administrator allowed guests" : "Administratzaile batek gonbidatuak baimendu ditu", + "{actor} disallowed guests" : "{actor} erabiltzaileak gonbidatuei baimena kendu die", + "You disallowed guests" : "Gonbidatuei baimena kendu diezu", + "An administrator disallowed guests" : "Administratzaile batek gonbidatuak debekatu ditu", + "{actor} set a password" : "{actor} erabiltzaileak pasahitz bat ezarri du", + "You set a password" : "Pasahitz bat ezarri duzu", + "An administrator set a password" : "Administratzaile batek pasahitza ezarri du", + "{actor} removed the password" : "{actor} erabiltzaileak pasahitza kendu du", + "You removed the password" : "Pasahitza kendu duzu", + "An administrator removed the password" : "Administratzaile batek pasahitza kendu du", + "{actor} added {user}" : "{actor} erabiltzaileak {user} gehitu du", + "You joined the conversation" : "Elkarrizketara batu zara", + "{actor} joined the conversation" : "{actor} elkarrizketara batu da", + "You added {user}" : "{user} gehitu duzu", + "{actor} added you" : "{actor} erabiltzaileak zu gehitu zaitu", + "An administrator added you" : "Administratzaile batek gehitu egin zaitu", + "An administrator added {user}" : "Administratzaile batek {user} gehitu du", + "You left the conversation" : "Elkarrizketatik atera zara", + "{actor} left the conversation" : "{actor} erabiltzaileak elkarrizketa utzi du", + "{actor} removed {user}" : "{actor} erabiltzaileak {user} kendu du", + "You removed {user}" : "{user} erabiltzailea kendu duzu", + "{actor} removed you" : "{actor} erabiltzaileak kendu egin zaitu", + "An administrator removed you" : "Administratzaile batek kanporatu egin zaitu", + "An administrator removed {user}" : "Administratzaile batek {user} kanporatu du", + "{actor} invited {federated_user}" : "{actor}erabiltzaileak {federated_user} gonbidatu du", + "You invited {federated_user}" : "{federated_user} gonbidatu duzu", + "You accepted the invitation" : "Gonbidapena onartu duzu", + "{actor} invited you" : "{actor} erabiltzaileak gonbidatu zaitu", + "An administrator invited you" : "Administratzaile batek gonbidatu zaitu", + "An administrator invited {federated_user}" : "Administratzaile batek {federated_user} gonbidatu du", + "{federated_user} accepted the invitation" : "{federated_user}-(e)k gonbidapena onartu du", + "{actor} removed {federated_user}" : "{actor}-(e)k {federated_user} kendu du", + "You removed {federated_user}" : "{federated_user} kendu duzu", + "An administrator removed {federated_user}" : "Administratzaile batek {federated_user} kendu du", + "{federated_user} declined the invitation" : "{federated_user} gonbidapena ukatu du", + "{actor} added group {group}" : "{actor} erabiltzaileak {group} taldea gehitu du", + "You added group {group}" : "{group} taldea gehitu duzu", + "An administrator added group {group}" : "Administratzaile batek {group} taldea gehitu du", + "{actor} removed group {group}" : "{actor} erabiltzaileak {group} taldea kendu du", + "You removed group {group}" : "{group} taldea kendu duzu", + "An administrator removed group {group}" : "Administratzaile batek {group} taldea kendu du", + "{actor} added team {circle}" : "{actor} erabiltzaileak {circle} lantaldea gehitu du ", + "You added team {circle}" : "{circle} lantaldea gehitu duzu", + "An administrator added team {circle}" : "Administratzaile batek {circle} lantaldea gehitu du", + "{actor} removed team {circle}" : "{actor} erabiltzaileak {circle} lantaldea kendu du", + "You removed team {circle}" : "{circle} lantaldea kendu duzu", + "An administrator removed team {circle}" : "Administratzaile batek {circle} lantaldea kendu du", + "{actor} added {phone}" : "{actor} erabiltzaileak {phone} gehitu du", + "You added {phone}" : "{phone} gehitu duzu", + "An administrator added {phone}" : "Administratzaile batek {phone} gehitu du", + "{actor} removed {phone}" : "{actor} erabiltzaileak {phone} kendu du", + "You removed {phone}" : "{phone} kendu duzu", + "An administrator removed {phone}" : "Administratzaile batek {phone} kendu du", + "{actor} promoted {user} to moderator" : "{actor} erabiltzaileak {user} moderatzaile egin du", + "You promoted {user} to moderator" : "{user} moderatzaile egin duzu", + "{actor} promoted you to moderator" : "{actor} erabiltzaileak moderatzaile egin zaitu", + "An administrator promoted you to moderator" : "Administratzaile batek moderatzaile egin zaitu", + "An administrator promoted {user} to moderator" : "Administratzaile batek {user} moderatzaile egin du", + "{actor} demoted {user} from moderator" : "{actor} erabiltzaileak moderatzaile rola kendu dio {user} erabiltzaileari", + "You demoted {user} from moderator" : "{user} erabiltzaileari moderatzaile rola kendu diozu", + "{actor} demoted you from moderator" : "{actor} erabiltzaileak moderatzaile rola kendu dizu", + "An administrator demoted you from moderator" : "Administratzaile batek moderatzaile rola kendu dizu", + "An administrator demoted {user} from moderator" : "Administratzaile batek {user} erabiltzaileari moderatzaile rola kendu dio", + "{actor} shared a file which is no longer available" : "{actor} erabiltzaileak erabilgarri ez dagoen fitxategi bat partekatu du", + "You shared a file which is no longer available" : "Eskuragarri ez dagoen fitxategi bat partekatu duzu", + "File shares are currently not supported in federated conversations" : "Fitxategien partekatzeak une honetan ez dira onartzen federatutako elkarrizketetan", + "The shared location is malformed" : "Partekatutako kokalekua gaizki osatuta dago", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} erabiltzaileak Matterbridge konfiguratu du elkarrizketa hau beste txat batzuekin sinkronizatzeko", + "You set up Matterbridge to synchronize this conversation with other chats" : "Matterbridge konfiguratu duzu elkarrizketa hau beste txat batzuekin sinkronizatzeko", + "{actor} updated the Matterbridge configuration" : "{actor} erabiltzaileak Matterbridge konfigurazioa eguneratu du", + "You updated the Matterbridge configuration" : "Matterbridge konfigurazioa eguneratu duzu", + "{actor} removed the Matterbridge configuration" : "{actor} erabiltzaileak Matterbridge konfigurazioa kendu du", + "You removed the Matterbridge configuration" : "Matterbridge konfigurazioa kendu duzu", + "{actor} started Matterbridge" : "{actor} Matterbridge hasi du", + "You started Matterbridge" : "Matterbridge hasi duzu", + "{actor} stopped Matterbridge" : "{actor} erabiltzaileak Matterbridge gelditu du", + "You stopped Matterbridge" : "Matterbridge gelditu duzu", + "{actor} deleted a message" : "{actor}(e)k mezua ezabatu du", + "You deleted a message" : "Mezu bat ezabatu duzu", + "{actor} edited a message" : "{actor} erabiltzaileak mezu bat editatu du", + "You edited a message" : "Mezu bat editatu duzu", + "{actor} deleted a reaction" : "{actor}-(e)k erreakzio bat ezabatu du", + "You deleted a reaction" : "Erreakzio bat ezabatu duzu", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Mezuaren iraungitzea aste %nera aldatu duzu","Mezuaren iraungitzea %n astetara aldatu duzu"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Mezuaren iraungitzea egun%nera aldatu duzu","Mezuaren iraungitzea %n egunetara aldatu duzu"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Mezuaren iraungitzea ordu %nera aldatu duzu","Mezuaren iraungitzea %n ordutara aldatu duzu"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Mezuaren iraungitzea %nminututara aldatu duzu","Mezuaren iraungitzea%nminututara aldatu duzu"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}-(e)k mezuaren iraungitzea aste %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n astetara aldatu du"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}-(e)k mezuaren iraungitzea ordu %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n egunetara aldatu du"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}-(e)k mezuaren iraungitzea ordu %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n ordutara aldatu du"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["actor}-(e)k mezuaren iraungitzea%nminututara aldatu du","actor}-(e)k mezuaren iraungitzea %nminututara aldatu du"], + "{actor} disabled message expiration" : "{actor}-(e)k mezuaren iraungitzea desgaitu du", + "You disabled message expiration" : "Mezuaren iraungitzea desgaitu duzu", + "{actor} cleared the history of the conversation" : "{actor} elkarrizketaren historia ezabatu du", + "You cleared the history of the conversation" : "Elkarrizketaren historia ezabatu duzu", + "{actor} set the conversation picture" : "{actor}-(e)k ezarri du elkarrizketaren argazkia", + "You set the conversation picture" : " Ezarri duzu elkarrizketaren argazkia", + "{actor} removed the conversation picture" : "{actor}-(e)k elkarrizketaren argazkia kendu du", + "You removed the conversation picture" : "Elkarrizketaren argazkia kendu duzu", + "{actor} ended the poll {poll}" : "{actor}(e)k {poll} galdeketa bukatu du", + "You ended the poll {poll}" : "{poll} galdeketa bukatu duzu", + "{actor} started the video recording" : "{actor} bideoa grabatzen hasi da", + "You started the video recording" : "Bideoa grabatzen hasi zara", + "{actor} stopped the video recording" : "{actor}-(e)k bideoaren grabazioa gelditu du", + "You stopped the video recording" : "bideoaren grabazioa gelditu duzu", + "{actor} started the audio recording" : "{actor}-(e)k audio-grabazioa hasi du", + "You started the audio recording" : "Audio-grabazioa hasi duzu", + "{actor} stopped the audio recording" : "{actor}-(e)k audio-grabaketa gelditu du", + "You stopped the audio recording" : "Audio-grabaketa gelditu duzu", + "The recording failed" : "Grabaketak huts egin du", + "Someone voted on the poll {poll}" : "Norbaitek {poll} galdeketan bozkatu du.", + "Message deleted by author" : "Egileak mezua ezabatu du", + "Message deleted by {actor}" : "{actor} erabiltzaileak mezua ezabatu du", + "Message deleted by you" : "Mezua ezabatu duzu", + "Deleted user" : "Ezabatutako erabiltzaileak", + "Unknown number" : "Zenbaki ezezaguna", + "Administration" : "Administrazioa", + "System" : "Sistema", + "%s (guest)" : "%s (gonbidatua)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} deia bukatu du %n gonbidatuarekin (Iraupena {duration})","{actor} deia bukatu du %n gonbidatuekin (Iraupena {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} deia bukatu du {user1} erabiltzailearekin (Iraupena {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} deia bukatu du {user1} eta {user2} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2} eta {user3} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2}, {user3} eta {user4} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2}, {user3}, {user4} eta {user5} erabiltzaileekin (Iraupena {duration})", + "Message of {user} in {conversation}" : "{user}-ren mezua {conversation}-n", + "Message of {user}" : "{user} erabiltzailearen mezua", + "Message of a deleted user in {conversation}" : "Ezabatutako erabiltzaile baten mezua {elkarrizketa} atalean", + "Talk conversations" : "Talk elkarrizketak", + "Talk to %s" : "Hitz egin %s erabiltzailearekin", + "An error occurred. Please contact your administrator." : "Errore bat gertatu da. Jarri zure administratzailearekin harremanetan mesedez.", + "Storage quota exceeded" : "Biltegiratze kuota gainditu da", + "File not found" : "Ez da fitxategia aurkitu", + "File is not shared, or shared but not with the user" : "Fitxategia ez dago partekatua, edo partekatu da baina ez erabiltzailearekin", + "No account available to delete." : "Ez dago konturik eskuragarri ezabatzeko.", + "Poll" : "Galdeketa", + "No image file provided" : "Ez da irudi fitxategirik eman", + "File is too big" : "Fitxategia handiegia da", + "Invalid file provided" : "Baliogabeko fitxategia eman da", + "Invalid image" : "Irudi baliogabea", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Talk mentions" : "Talk aipamenak", + "More conversations" : "Elkarrizketa gehiago", + "Say hi to your friends and colleagues!" : "Esan kaixo zure lagun eta lankideei!", + "No unread mentions" : "Ez dago irakurri gabeko aipamenik", + "Call in progress" : "Deia abian da", + "You were mentioned" : "Aipatu egin zaituzte", + "Write to conversation" : "Idatzi elkarrizketan", + "Writes event information into a conversation of your choice" : "Gertaeraren informazioa idazten du zuk hautatutako elkarrizketan", + "Conversation invitation" : "Gonbidapena elkarrizketara", + "Description" : "Deskribapena", + "You can also dial-in via phone with the following details" : "Markatzea telefono bidez ere egin dezakezu, honako xehetasunekin", + "Dial-in information" : "Markatze informazioa", + "Meeting ID" : "Bileraren IDa", + "Your PIN" : "Zure PINa", + "Meeting" : "Bilera", + "Password request: %s" : "Pasahitz eskaera: %s", + "Private conversation" : "Elkarrizketa pribatua", + "Deleted user (%s)" : "Ezabatutako erabiltzailea (%s)", + "Failed to upload call recording" : "Deien grabaketaren igotzeak huts egin du", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Grabaketa-zerbitzariak huts egin du {call} deiaren grabazioa igotzean. Jarri harremanetan administrazioarekin.", + "Share to chat" : "Partekatu txatarekin", + "Dismiss notification" : "Baztertu jakinarazpena", + "Call recording now available" : "Deien grabaketa ez dago erabilgarri", + "The recording for the call in {call} was uploaded to {file}." : "{deia} deiaren grabazioa {file}-ra igo da.", + "Transcript now available" : "Transkripzioa eskuragarri dago", + "The transcript for the call in {call} was uploaded to {file}." : "{call} deiaren transkripzioa {file} fitxategira kargatu da.", + "Failed to transcript call recording" : "Dei grabaketa transkribatzeak huts egin du", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Zerbitzariak huts egin du {call}deiaren {file} fitxategiko grabaketa transkribatzean. Jarri harremanetan administratzailearekin.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} erabiltzaileak {remoteServer} zerbitzariko {roomName} gelara gonbidatu zaitu", + "Accept" : "Onartu", + "Decline" : "Uko egin", + "{user1} invited you to a federated conversation" : "{user1} erabiltzaileak elkarrizketa federatu batera gonbidatu zaitu", + "New message" : "Mezu berria", + "Reminder" : "Gogorarazpena", + "Notification" : "Jakinarazpena", + "{user} reacted with {reaction}" : "{user}(e)k {reaction} adierazi du", + "{user} reacted with {reaction} in {call}" : "{user}(e)k {reaction} adierazi du {call} deian", + "Deleted user reacted with {reaction} in {call}" : "Ezabatutako erabiltzaile batek {reaction} adierazi du {call} deian", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} gonbidatuak {reaction} adierazi du {call} deian", + "Guest reacted with {reaction} in {call}" : "Gonbidatu batek {reaction} adierazi du {call} deian", + "{user} in {call}" : "{user} erabiltzailea {call} deian", + "Deleted user in {call}" : "Erabiltzailea ezabatu da {call} deian", + "{guest} (guest) in {call}" : "{guest} (guest) gonbidatua(k) {call} deian", + "Guest in {call}" : "Gonbidatua {call} deian", + "{user} sent you a private message" : "{user} erabiltzaileak mezu pribatu bat bidali dizu", + "{user} sent a message in conversation {call}" : "{user} erabiltzaileak mezu bat bidali du {call} deian", + "A deleted user sent a message in conversation {call}" : "Ezabatutako erabiltzaile batek mezu bat bidali du {call} deian", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak mezu bat bidali du {call} deian", + "A guest sent a message in conversation {call}" : "Gonbidatu batek mezu bat bidali du {call} deian", + "{user} replied to your private message" : "{user} erabiltzaileak zure mezu pribatuari erantzun dio", + "{user} replied to your message in conversation {call}" : "{user} erabiltzaileak zure mezuari erantzun dio {call} deian", + "A deleted user replied to your message in conversation {call}" : "Ezabatutako erabiltzaile batek zure mezuari erantzun dio {call} deian", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak zure mezu bati erantzun dio {call} deian", + "A guest replied to your message in conversation {call}" : "Gonbidatu batek zure mezuari erantzun dio {call} deian", + "{user} reacted with {reaction} to your private message" : "{user}-k {reaction} erabili du zure mezu pribatuari erreakzionatzeko", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}-k {reaction} erabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ezabatutako erabiltzaile batek {reaction} erabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{gonbidatua} (gonbidatua) {reaction} erabili du zure mezuari {deia} elkarrizketan erreakzionatzeko", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gonbidatu batek {reaction} rabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "{user} mentioned you in a private conversation" : "{user} erabiltzaileak elkarrizketa pribatu batean aipatu zaitu", + "{user} mentioned group {group} in conversation {call}" : "{user}-(e)k taldea {group} aipatu du {call} elkarrizketan", + "{user} mentioned everyone in conversation {call}" : "{user}-(e)k guztiak aipatu ditu {call} elkarrizketan", + "{user} mentioned you in conversation {call}" : "{user} erabiltzaileak aipatu zaitu {call} deian", + "A deleted user mentioned group {group} in conversation {call}" : "Ezabatutako erabiltzaile batek {group} taldea aipatu du {call} elkarrizketan", + "A deleted user mentioned everyone in conversation {call}" : "Ezabatutako erabiltzaile batek {call} elkarrizketan guztiak aipatu ditu", + "A deleted user mentioned you in conversation {call}" : "Ezabatutako erabiltzaile batek aipatu zaitu {call} deian", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gonbidatuak) {group} taldea aipatu du {call} elkarrizketan", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gonbidatuak) {group} guztiak aipatu ditu {call} elkarrizketan", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak aipatu zaitu {call} deian", + "A guest mentioned group {group} in conversation {call}" : "Gonbidatu batek {group} taldea aipatu du {call} elkarrizketan", + "A guest mentioned everyone in conversation {call}" : "Gonbidatu batek {call} elkarrizketan guztiak aipatu ditu ", + "A guest mentioned you in conversation {call}" : "Gonbidatu batek aipatu zaitu {call} deian", + "View message" : "Ikusi mezua", + "Dismiss reminder" : "Baztertu gogorarazpena", + "View chat" : "Ikusi txata", + "{user} invited you to a group conversation: {call}" : "{user} erabiltzaileak talde-elkarrizketa batera gonbidatu zaitu: {call}", + "Join call" : "Batu deira", + "Answer call" : "Erantzun deia", + "{user} would like to talk with you" : "{user} zurekin hitz egin nahi du", + "Call back" : "Itzuli deia", + "You missed a call from {user}" : "{user} erabiltzailearen dei bat galdu duzu", + "A group call has started in {call}" : "Talde dei bat hasi da {call} elkarrizketan", + "You missed a group call in {call}" : "Talde dei bat huts egin duzu {call} elkarrizketan", + "{email} is requesting the password to access {file}" : "{email} pasahitza eskatzen ari da {file} fitxategira sarbidea izateko", + "{email} tried to request the password to access {file}" : "{email} {file} fitxategira sarbidea izateko pasahitza eskatzen saiatu da", + "Someone is requesting the password to access {file}" : "Norbait {file} fitxategira sarbidea izateko pasahitza eskatzen ari da", + "Someone tried to request the password to access {file}" : "Norbait {file} fitxategira sarbidea izateko pasahitza eskatzen saiatu da", + "Open settings" : "Ireki ezarpenak", + "The hosted signaling server is now configured and will be used." : "Ostataturiko seinalizazio zerbitzaria konfiguratu da eta erabili egingo da.", + "The hosted signaling server was removed and will not be used anymore." : "Ostataturiko seinalizazio zerbitzaria kendu egin da eta ez da gehiago erabiliko.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ostataturiko seinalizazio zerbitzariaren kontua aldatu egin da \"{oldstatus}\" izatetik \"{newstatus}\" izatera.", + "pending" : "zain", + "active" : "aktibo", + "expired" : "iraungita", + "blocked" : "blokeatuta", + "error" : "errorea", + "Contact via Talk" : "Jarri harremanetan Talk bidez", + "Open Talk" : "Ireki Talk", + "Default" : "Lehenetsia", + "Presentation" : "Aurkezpena", + "Conversations" : "Elkarrizketak", + "Messages in current conversation" : "Uneko elkarrizketako mezuak", + "{user}" : "{user}", + "Messages" : "Mezuak", + "{user} in {conversation}" : "{user} erabiltzailea {conversation} elkarrizketan", + "Messages in other conversations" : "Mezuak beste elkarrizketa batzuetan", + "One-to-one rooms always need to show the other users avatar" : "Batetik baterako gelek beti erakutsi behar dute beste erabiltzaileen avatarra", + "Invalid emoji character" : "Emoji karaktere baliogabea", + "Invalid background color" : "Atzeko planoko kolore baliogabea", + "Avatar image is not square" : "Abatarreko irudia ez da karratua", + "Room {number}" : "{number} gela", + "Other" : "Bestelakoa", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Proba eskaerak huts egin du ezin delako atzitu probako zerbitzaria. Saiatu berriro beranduago.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Arazo bat dago instantzia honen autentifikazioarekin. Agian ez dago irisgarritasunik kanpoaldetik URLa egiaztatzeko.", + "Something unexpected happened." : "Espero ez zen zerbait gertatu da.", + "The URL is invalid." : "URLa baliogabea da.", + "An HTTPS URL is required." : "HTTPS URL bat behar da.", + "The email address is invalid." : "E-posta helbidea baliogabea da.", + "The language is invalid." : "Hizkuntza baliogabea da.", + "The country is invalid." : "Herrialdea baliogabea da.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Arazo bat dago proba eskaerarekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "Too many requests are send from your servers address. Please try again later." : "Eskaera gehiegi bidali dira zure zerbitzari helbidetik. Saiatu berriro beranduago.", + "There is already a trial registered for this Nextcloud instance." : "Dagoeneko badago proba bat erregistratuta Nextcloud instantzia honetatik.", + "Something unexpected happened. Please try again later." : "Espero ez zen zerbait gertatu da. Saiatu berriro beranduago.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Proba eskatzeak huts egin du proba zerbitzariak oker jokatu duelako. Saiatu berriro beranduago.", + "Trial requested but failed to get account information. Please check back later." : "Proba eskatu da, baina kontuaren informazioa eskuratzeak huts egin du. Egiaztatu berriro beranduago.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Arazo bat dago eskaera honen autentifikazioarekin. Agian ez dago irisgarritasunik kanpoaldetik URLa egiaztatzeko.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kontuaren informazioa eskuratzeak huts egin du proba zerbitzariak oker jokatu duelako. Egiaztatu berriro beranduago.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Arazo bat dago kontuaren informazioa eskuratzearekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "There is no such account registered." : "Kontu hori ez dago erregistratuta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontuaren informazioa eskuratzeak huts egin du proba zerbitzaria ez dagoelako eskuragarri. Egiaztatu berriro beranduago.", + "Deleting the hosted signaling server account failed. Please check back later." : "Ostataturiko seinalizazio zerbitzaria ezabatzeak huts egin du. Saiatu berriro beranduago.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kontua ezabatzeak huts egin du proba zerbitzariak oker jokatu duelako. Egiaztatu berriro beranduago.", + "There is a problem with deleting the account. Please check your logs for further information." : "Arazo bat dago kontua ezabatzearekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "Too many requests are sent from your servers address. Please try again later." : "Eskaera gehiegi bidali dira zure zerbitzari helbidetik. Saiatu berriro beranduago.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kontua ezabatzeak huts egin du proba zerbitzaria ez dagoelako eskuragarri. Egiaztatu berriro beranduago.", + "Note to self" : "Nire oharrak", + "A place for your private notes, thoughts and ideas" : "Zure ohar, hausnarketa eta ideientzako leku pribatua", + "Andorra" : "Andorra", + "United Arab Emirates" : "Arabiar Emirerri Batuak", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua eta Barbuda", + "Anguilla" : "Aingira", + "Albania" : "Albaniera", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartika", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Estatubatuarra", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Aland Uharteak", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia-Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Boliviako Estatu Plurinazionala", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustakio eta Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamak", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet uhartea", + "Botswana" : "Botswana", + "Belarus" : "Bielorrusia", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) uharteak", + "Congo, the Democratic Republic of the" : "Kongoko Errepublika Demokratikoa", + "Central African Republic" : "Afrika Erdiko Errepublika", + "Congo" : "Kongo", + "Switzerland" : "Suitza", + "Côte d'Ivoire" : "Boli Kosta", + "Cook Islands" : "Cook uharteak", + "Chile" : "Txile", + "Cameroon" : "Kamerun", + "China" : "Txina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas uhartea", + "Cyprus" : "Zipre", + "Czechia" : "Txekia", + "Germany" : "Alemania", + "Djibouti" : "Djibuti", + "Denmark" : "Danimarka", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikar Errepublika", + "Algeria" : "Algeria", + "Ecuador" : "Ekuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Western Sahara" : "Mendebaldeko Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Espainia", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland uharteak (Malvinak)", + "Micronesia, Federated States of" : "Mikronesiako Estatu Federatuak", + "Faroe Islands" : "Faroe uharteak", + "France" : "Frantzia", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Britainia Handiko eta Ipar Irlandako Erresuma Batua", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Frantsesa", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Ginea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Ekuatore Ginea", + "Greece" : "Grezia", + "South Georgia and the South Sandwich Islands" : "Hegoaldeko Georgia eta Hegoaldeko Sandwich uharteak", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Ginea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard eta McDonald uharteak", + "Honduras" : "Honduras", + "Croatia" : "Kroazia", + "Haiti" : "Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Man uhartea", + "India" : "India", + "British Indian Ocean Territory" : "Indiako Ozeanoko Britainiar Lurraldea", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irango Islamiar Errepublika", + "Iceland" : "Islandia", + "Italy" : "Itali", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordania", + "Japan" : "Japonia", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kanbodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komoreak", + "Saint Kitts and Nevis" : "Saint Kitts eta Nevis", + "Korea, Democratic People's Republic of" : "Koreako Herri Errepublika Demokratikoa", + "Korea, Republic of" : "Koreako Errepublika", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaiman uharteak", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laosko Herri Errepublika Demokratikoa", + "Lebanon" : "Libano", + "Saint Lucia" : "Santa Luzia", + "Liechtenstein" : "Liechtestein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldaviako Errepublika", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martin (Frantziako eremua)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall uharteak", + "North Macedonia" : "Ipar Mazedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Mariana uharteak", + "Martinique" : "Martinika", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurizio", + "Maldives" : "Maldivak", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambike", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia Berria", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk uhartea", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Herbehereak", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Zeelanda berria", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinesia Frantsesa", + "Papua New Guinea" : "Papua Ginea Berria", + "Philippines" : "Filipinak", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint-Pierre eta Mikelune", + "Pitcairn" : "Pitcairn uharteak", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestinako Estatua", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Errumania", + "Serbia" : "Serbia", + "Russian Federation" : "Errusiar Federakundea", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Salomon Uharteak", + "Seychelles" : "Seychelleak", + "Sudan" : "Sudan", + "Sweden" : "Suedia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascension eta Tristan da Cunha", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard eta Jan Mayen uharteak", + "Slovakia" : "Eslovakia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Hego Sudan", + "Sao Tome and Principe" : "Sao Tome eta Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Alemaniako eremua)", + "Syrian Arab Republic" : "Siriako Arabiar Errepublika", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turk eta Caico uharteak", + "Chad" : "Txad", + "French Southern Territories" : "Hegoaldeko lurralde frantsesak", + "Togo" : "Togo", + "Thailand" : "Thailandia", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Ekialdeko Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkia", + "Trinidad and Tobago" : "Trinidad eta Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzaniako Errepublika Batua", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ameriketako Estatu Batuetako itsasoz haraindiko uharteak", + "United States of America" : "Ameriketako Estatu Batuak", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Vatikanoa", + "Saint Vincent and the Grenadines" : "Saint Vincent eta Grenadinak", + "Venezuela, Bolivarian Republic of" : "Venezuelako Bolibartar Errepublika", + "Virgin Islands, British" : "Birjina Uharte Britaniarrak", + "Virgin Islands, U.S." : "Birjina Uharte Estatubatuarrak", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis eta Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Hegoafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Atzeko planoaren lausotzea", + "Federation" : "Federazioa", + "High-performance backend" : "Errendimendu handiko motorra", + "Error: Cannot connect to server" : "Errorea: Ezin da zerbitzarira konektatu", + "Error: Server did not respond with proper JSON" : "Errorea: zerbitzariak ez du JSON egokiarekin erantzun", + "Error: Certificate expired" : "Errorea: Ziurtagiria iraungi da", + "Could not get version" : "Ezin bertsioa lortu", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Errorea: exekutatzen ari den bertsioa: {version}; Zerbitzaria eguneratu egin behar da Talk-en bertsio honekin bateragarria izan dadin", + "Error: Server responded with: {error}" : "Errorea: zerbitzariak {error} errorearekin erantzun du", + "Error: Unknown error occurred" : "Errorea: errore ezezaguna gertatu da", + "Recording backend" : "Atzealdeko grabaketa", + "SIP configuration" : "SIP konfigurazioa", + "Invalid date, date format must be YYYY-MM-DD" : "Data baliogabea, dataren formatuak UUUU-HH-EE izan behar du", + "Conversation not found" : "Elkarrizketa ez da aurkitu", + "Path is already shared with this conversation" : "Bidea dagoeneko partekatu da elkarrizketa honekin", + "Chat, video & audio-conferencing using WebRTC" : "Txata, bideo-konferentziak eta audio-konferentziak WebRTC erabiliz", + "Leave call" : "Utzi deia", + "Navigating away from the page will leave the call in {conversation}" : "Orritik kanpora nabigatzeak {conversation}(e)ko deitik ateratzea eragingo du", + "Stay in call" : "Mantendu deian", + "Discuss this file" : "Eztabaidatu fitxategi hau", + "Share this file with others to discuss it" : "Partekatu fitxategi hau besteekin eztabaidatzeko", + "Share this file" : "Partekatu fitxategi hau", + "Join conversation" : "Batu elkarrizketara", + "This conversation is password-protected." : "Elkarrizketa hau pasahitz bidez babestua dago.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Saioa hasteko hainbat saiakera baliogabe jaso ditugu zure IPtik. Ondorioz, zure hurrengo saio hasiera 30 segundo atzeratuko da.", + "The password is wrong. Try again." : "Pasahitza okerra da. Saiatu berriro.", + "Password" : "Pasahitza", + "Submit" : "Bidali", + "Error requesting the password." : "Errorea pasahitza eskatzean.", + "Request password" : "Eskatu pasahitza", + "This conversation has ended" : "Elkarrizketa hau amaitu da", + "Error occurred when joining the conversation" : "Errorea gertatu da elkarrizketara sartzean", + "Close Talk sidebar" : "Itxi Talk alboko barra", + "Open Talk sidebar" : "Ireki Talk alboko barra", + "Everyone" : "Edonor", + "Users and moderators" : "Erabiltzaileak eta moderatzaileak", + "Moderators only" : "Moderatzaileak soilik", + "Disable calls" : "Desgaitu deiak", + "Save changes" : "Gorde aldaketak", + "Saving …" : "Gordetzen …", + "Saved!" : "Gordeta!", + "Limit to groups" : "Mugatu taldeetara", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Gutxienez talde bat hautatuta badago, zerrendatutako taldeetako pertsonek soilik parte har dezakete elkarrizketetan.", + "Guests can still join public conversations." : "Gonbidatuek elkarrizketa publikoekin bat egin dezakete hala ere.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Jada Talk erabili ezin duten erabiltzaileak parte-hartzaile bezala agertuko dira beren aurreko elkarrizketetan eta beren txateko mezuak ere gordeko dira.", + "Limit using Talk" : "Mugatu Elkarrizketen erabilera", + "Limit creating a public and group conversation" : "Mugatu elkarrizketa publikoak eta talde-elkarrizketak sortzea", + "Limit creating conversations" : "Mugatu elkarrizketen sortzea", + "Limit starting a call" : "Mugatu dei bat hastea", + "Limit starting calls" : "Mugatu deiak hastea", + "When a call has started, everyone with access to the conversation can join the call." : "Dei bat hastean, elkarrizketara sarbidea duen edonork bat egin dezake deiarekin.", + "Description is not provided" : "Ez da deskribapenik eskaini", + "Locked for moderators" : "Moderatzaileentzat blokeatuta", + "Enabled" : "Gaituta", + "Disabled" : "Desaktibatua", + "Bots settings" : "Bots ezarpenak", + "State" : "Egoera", + "Name" : "Izena", + "Last error" : "Azken errorea", + "Total errors count" : "Errore zenbaki totala", + "Find more bots" : "Bilatu bot gehiago", + "Beta" : "Beta", + "Enable Federation in Talk app" : "Gaitu federazioa Talk aplikazioan", + "Permissions" : "Baimenak", + "Allow users to be invited to federated conversations" : "Eman baimena zure erabiltzaileei elkarrizketa federatuetara joateko", + "Allow users to invite federated users into conversation" : "Eman baimena zure erabiltzaileei beste erabiltzaile federatu batzuk elkarrizketara gonbidatzeko", + "Only allow to federate with trusted servers" : "Fidagarritzat jotako zerbitzariekin bakarrik baimendu federazioa", + "Select groups …" : "Hautatu taldeak ...", + "All messages" : "Mezu guztiak", + "@-mentions only" : "@ aipamenak soilik", + "Off" : "Desaktibatu", + "General settings" : "Ezarpen orokorrak", + "Default notification settings" : "Jakinarazpenen ezarpen lehenetsiak", + "Default group notification" : "Taldeen ezarpen lehenetsiak", + "Default group notification for new groups" : "Taldeen ezarpen lehenetsiak talde berrientzat", + "Integration into other apps" : "Beste aplikazioetan integrazioa", + "Allow conversations on files" : "Baimendu elkarrizketak fitxategietan", + "Allow conversations on public shares for files" : "Baimendu elkarrizketak fitxategien partekatze publikoetan", + "Enable encryption" : "Gaitu zifratzea", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Goiko botoian klik eginez inprimakiko informazioa Struktur AG-ren zerbitzarietara bidaltzen da. Informazio gehiago jaso dezakezu hemen {linkstart}spreed.eu{linkend}.", + "Pending" : "Zain", + "Error" : "Errorea", + "Blocked" : "Blokeatuta", + "Active" : "Aktiboa", + "Expired" : "Iraungita", + "Never" : "Inoiz ez", + "The trial could not be requested. Please try again later." : "Ezin izan da proba eskaera egin. Saiatu berriro beranduago.", + "The account could not be deleted. Please try again later." : "Ezin izan da kontua ezabatu. Saiatu berriro beranduago.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Gure kide Struktur AG-ek eskaintzen duen zerbitzuaren baitan, ostataturiko seinalizazio zerbitzaria eska daiteke. Horretarako, beheko inprimakia betetzea besterik ez duzu eta zure Nextcloudak eskaera egingo du. Zerbitzaria konfiguratzen denean kredentzialak automatikoki beteko dira. Honek uneko seinalizazio zerbitzariaren ezarpenak gainidatziko ditu.", + "URL of this Nextcloud instance" : "Nextcloud instantzia honen URLa", + "Full name of the user requesting the trial" : "Proba eskatzen duen erabiltzailearen izen osoa", + "Email of the user" : "Erabiltzailearen e-posta", + "Language" : "Hizkuntza", + "Country" : "Herrialdea", + "Request signaling server trial" : "Eskatu seinalizazio zerbitzari proba", + "You can see the current status of your hosted signaling server in the following table." : "Ondorengo taulan ikus dezakezu zure ostataturiko seinalizazio zerbitzariaren uneko egoera.", + "Status" : "Egoera", + "Created at" : "Sortua", + "Expires at" : "Iraungitze data", + "Limits" : "Mugak", + "Yes" : "Bai", + "No" : "Ez", + "Delete the signaling server account" : "Ezabatu seinalizazio zerbitzariaren kontua", + "_%n user_::_%n users_" : ["erabiltzaile %n ","%n erabiltzaile"], + "Installed version: {version}" : "Instalaturiko bertsioa: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridge instala dezakezu Nextcloud Talk beste zerbitzu batzuekin lotzeko, joan {linkstart1}GitHub orrira{linkend} xehetasun gehiagorako. Aplikazioak deskargatu eta instalatzeko denbora behar lezake. Denbora-muga gainditzen badu, saiatu eskuz instalatzen {linkstart2}appstoretik{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge bitarra ez da aurkitu edo ezin izan da exekutatu.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Matterbridge bitarrerako bidea eskuz ere konfigura dezakezu konfigurazioaren bidez. Informazio gehiago lortzeko, begiratu {linkstart}Matterbridge integrazio dokumentazioa {linkend}.", + "Downloading …" : "Deskargatzen...", + "Install Talk Matterbridge" : "Instalatu Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Errore bat gertatu da Matterbridge aplikazioa instalatzean", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Errore bat gertatu da Talk Matterbridge instalatzean. Instala ezazu eskuz", + "Failed to execute Matterbridge binary." : "Matterbridge bitarra exekutatzeak huts egin du.", + "Matterbridge integration" : "Matterbridge integrazioa", + "Enable Matterbridge integration" : "Gaitu Matterbridge integrazioa", + "Status: Checking connection" : "Egoera: konexioa egiaztatzen", + "OK: Running version: {version}" : "OK: {version} bertsioa exekutatzen", + "Recording backend URL" : "Atzealdeko URLa grabatzen", + "Validate SSL certificate" : "Balioztatu SSL ziurtagiria", + "Delete this server" : "Ezabatu zerbitzari hau", + "Test this server" : "Probatu zerbitzari hau", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "\"upload_max_filesize\" edo \"post_max_size\" PHP ezarpenek {maxUpload} arteko fitxategiak igotzeko aukera emango dute soilik.", + "Recording backend settings saved" : "Atzealdeko grabaketa ezarpena gordeta", + "Add a new recording backend server" : "Gehitu atzealdeko zerbitzari grabaketa berri bat", + "Shared secret" : "Partekatutako sekretua", + "Recording consent" : "Grabatzeko baimena", + "Recording transcription" : "Transkripzioa grabatzen", + "SIP configuration saved!" : "SIP konfigurazioa gorde da!", + "Restrict SIP configuration" : "Murriztu SIP konfigurazioa", + "Enable SIP configuration" : "Gaitu SIP konfigurazioa", + "Only users of the following groups can enable SIP in conversations they moderate" : "Honako taldeetako erabiltzaileek bakarrik gaitu dezakete SIP, beraiek moderatzen dituzten elkarrizketetan", + "Phone number (Country)" : "Telefono zenbakia (Herrialdea)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Informazio hau gonbidapen emailetan bidaltzen da eta parte-hartzaile guztiei bistaratzen zaie alboko barran.", + "Error code" : "Errore kodea", + "High-performance backend URL" : "Errendimendu handiko motorraren URLa", + "High-performance backend settings saved" : "Errendimendu handiko atzealdekoaren ezarpenak gorde dira", + "STUN server URL" : "STUN zerbitzariaren URLa", + "The server address is invalid" : "Zerbitzariaren helbidea baliogabea da", + "STUN settings saved" : "STUN ezarpenak gorde dira", + "STUN servers" : "STUN zerbitzariak", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN zerbitzaria bideratzaile baten atzean dauden parte-hartzaileen IP helbideak zehazteko erabiltzen da.", + "Add a new STUN server" : "Gehitu STUN zerbitzari berri bat", + "{schema} scheme must be used with a domain" : "{schema} eskema domeinu batekin erabili behar da", + "{option1} and {option2}" : "{option1} eta {option2}", + "{option} only" : "{option} soilik", + "OK: Successful ICE candidates returned by the TURN server" : "OK: baliozko ICE hautagaiak itzuli ditu TURN zerbitzariak", + "Error: No working ICE candidates returned by the TURN server" : "Errorea: TURN zerbitzariak ez du baliozko ICE hautagairik itzuli", + "Testing whether the TURN server returns ICE candidates" : "TURN zerbitzariak ICE hautagairik itzultzen duen aztertzen", + "TURN server schemes" : "TURN zerbitzariaren eskemak", + "TURN server URL" : "TURN zerbitzariaren URLa", + "TURN server secret" : "TURN zerbitzariaren sekretua", + "TURN server protocols" : "TURN zerbitzariaren protokoloak", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN zerbitzariak suhesi baten atzeko partaideen trafikoa bideratzeko erabiltzen dira. Partaideek ezin badute beraien artean konektatu, TURN zerbitzari bat beharrezkoa da seguru aski. Ikusi {linkstart}dokumentazio hau{linkend} konfigurazio jarraibideak jasotzeko.", + "TURN settings saved" : "TURN ezarpenak gorde dira", + "TURN servers" : "TURN zerbitzariak", + "Add a new TURN server" : "Gehitu TURN zerbitzari berri bat", + "Failed" : "Huts egin du", + "OK" : "Ados", + "Checking …" : "Egiaztatzen ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Huts egin du: WebAssembly desgaituta dago edo ez da onartzen arakatzaile honetan. Gaitu WebAssembly edo erabili hartarako laguntza duen arakatzaile bat egiaztapena egiteko.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Huts egin du: \".wasm\" eta \".tflite\" fitxategiak ez ditu behar bezala itzuli web zerbitzariak. Egiaztatu Talk-en dokumentazioan \"Sistemaren eskakizunak\" atala.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Ados: \".wasm\" eta \".tflite\" fitxategiak behar bezala itzuli ditu web zerbitzariak.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Badirudi PHP eta Apache konfigurazioa ez dela bateragarria. Mesedez, kontuan hartu PHP MPM_PREFORK moduluarekin soilik erabili daitekela and PHP-FPM MPM_EVENT moduluarekin erabili daitekela.", + "Web server setup checks" : "Web zerbitzariaren konfigurazio egiaztapenak", + "Federated user" : "Erabiltzaile federatua", + "Assign participants to rooms" : "Esleitu parte-hartzaileak geletara", + "Configure breakout rooms" : "Konfiguratu taldekako gelak", + "Number of breakout rooms" : "Taldekako-gela kopurua", + "Assignment method" : "Esleitzeko modua", + "Automatically assign participants" : "Parte-hartzaileak automatikoki esleitu", + "Manually assign participants" : "Parte-hartzaileak eskuz esleitu ", + "Allow participants to choose" : "Baimendu parte-hartzaileek aukera dezaten", + "Create rooms" : "Sortu gelak", + "Confirm" : "Berretsi", + "Create breakout rooms" : "Sortu taldekako gelak", + "Reset" : "Berrezarri", + "Delete breakout rooms" : "Ezabatu taldekako gelak", + "Room {roomNumber}" : "{roomNumber} gela", + "Current breakout rooms and settings will be lost" : "Uneko taldekako gelak eta ezarpenak galduko dira", + "Cancel" : "Utzi", + "Unassigned participants" : "Esleitu gabeko parte-hartzaileak", + "Back" : "Atzera", + "Assign" : "Esleitu", + "Add participant \"{user}\"" : "Gehitu \"{user}\" parte-hartzailea", + "Now" : "Orain", + "Loading …" : "Kargatzen ...", + "From" : "Nork", + "To" : "Nori", + "Calendar" : "Egutegia", + "Attendees" : "Partaideak", + "Save" : "Gorde", + "Search participants" : "Bilatu parte-hartzaileak", + "No results" : "Emaitzarik ez", + "Done" : "Egina", + "Raise hand" : "Jaso eskua", + "Raise hand (R)" : "Jaso eskua (R)", + "Lower hand" : "Jaitsi eskua", + "Lower hand (R)" : "Jaitsi eskua (R)", + "Exit full screen (F)" : "Irten pantaila osotik (F)", + "Full screen (F)" : "Pantaila osoa (F)", + "Speaker view" : "Hizlari ikuspegia", + "Grid view" : "Sareta ikuspegia", + "Recording consent is required" : "Grabatzeko baimena behar da", + "This conversation is read-only" : "Elkarrizketa hau irakurtzeko soilik da", + "Conversation not found or not joined" : "Elkarrizketa ez da aurkitu edo ez da sartu", + "Connection failed" : "Konexioak huts egin du", + "Reload" : "Birkargatu", + "{nickName} raised their hand." : "{nickName} eskua jaso du.", + "A participant raised their hand." : "Parte-hartzaile batek eskua jaso du", + "Collapse stripe" : "Tolestu marra", + "Expand stripe" : "Zabaldu marra", + "Previous page of videos" : "Bideoen aurreko orria", + "Next page of videos" : "Bideoen hurrengo orria", + "Connecting …" : "Konektatzen ...", + "Calling …" : "Deitzen ...", + "Waiting for {user} to join the call" : "{user} deian sartzeko zain", + "Waiting for others to join the call …" : "Besteak deira batzeko itxaroten...", + "You can invite others in the participant tab of the sidebar" : "Besteak gonbidatu ditzakezu alboko barrako parte-hartzaileak fitxan", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Besteak gonbidatu ditzakezu alboko barrako parte-hartzaileak fitxan edo esteka hau partekatuz!", + "Share this link to invite others!" : "Partekatu esteka hau besteak gonbidatzeko!", + "Copy link" : "Kopiatu esteka", + "You are not allowed to enable audio" : "Ez duzu baimenik audioa gaitzeko", + "No audio. Click to select device" : "Audiorik ez. Egin klik gailua hautatzeko", + "Mute audio" : "Mututu audioa", + "Mute audio (M)" : "Isildu audioa (M)", + "Unmute audio" : "Gaitu audioa", + "Unmute audio (M)" : "Aktibatu audioa (M)", + "None" : "Bat ere ez", + "Access to camera was denied" : "Kamerara sarbidea ukatu da", + "Error while accessing camera: It is likely in use by another program" : "Errorea kamera atzitzean: litekeena da beste programa bat hura erabiltzen aritzea", + "Error while accessing camera" : "Errorea kamera atzitzean", + "You have been muted by a moderator" : "Moderatzaile batek isilarazi zaitu", + "Hide presenter video" : "Ezkutatu aurkezlearen bideoa", + "You are not allowed to enable video" : "Ez duzu baimenik bideoa gaitzeko", + "No video. Click to select device" : "Bideorik ez. Egin klik gailua hautatzeko", + "Disable video" : "Desgaitu bideoa", + "Disable video (V)" : "Desgaitu bideoa (V)", + "Enable video" : "Gaitu bideoa", + "Enable video (V)" : "Gaitu bideoa (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa - Zure konexioa momentu bat etengo da bideoa lehenengo aldiz gaitzean", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa (V) - Zure konexioa une labur batez etengo da bideoa lehen aldiz gaitzean", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa. Zure konexioa momentu bat etengo da bideoa lehenengo aldiz gaitzean", + "Show presenter" : "Erakutsi aurkezlea", + "You" : "Zu ", + "Mute" : "Isilarazi", + "Muted" : "Isilduta", + "Show screen" : "Erakutsi pantaila", + "Stop following" : "Utzi jarraitzeari", + "Connection could not be established …" : "Ezin izan da konexioa ezarri ...", + "Connection was lost and could not be re-established …" : "Konexioa galdu da eta ezin izan da berriro ezarri ...", + "Connection could not be established. Trying again …" : "Konexioa ezin izan da ezarri. Berriro saiatzen ...", + "Connection lost. Trying to reconnect …" : "Konexioa galdu da. Birkonektatzen saiatzen ...", + "Connection problems …" : "Konexio arazoak ...", + "Collapse" : "Tolestu", + "Expand" : "Zabaldu", + "You need to be logged in to upload files" : "Fitxategiak igo ahal izateko saioa hasi behar duzu", + "Drop your files to upload" : "Jaregin zure fitxategiak igotzeko", + "Conversation messages" : "Elkarrizketa mezuak", + "Scroll to bottom" : "Korritu beherantz", + "Post message" : "Argitaratu mezua", + "Federated conversation" : "Elkarrizketa federatua", + "Public conversation" : "Elkarrizketa publikoa", + "Favorite" : "Gogokoa", + "Banned users" : "Debekatutako erabiltzaileak", + "Manage bans" : "Kudeatu debekuak", + "No banned users" : "Ez dago debekatutako erabiltzailerik", + "Banned by:" : "Honek debekatuta:", + "Date:" : "Data:", + "Note:" : "Oharra:", + "Hide details" : "Ezkutatu xehetasunak", + "Show details" : "Erakutsi xehetasunak", + "Unban" : "Debekua kendu", + "Error while updating conversation name" : "Errore bat gertatu da elkarrizketaren izena eguneratzean", + "Error while updating conversation description" : "Errorea elkarrizketa deskribapena eguneratzen", + "Enter a name for this conversation" : "Idatzi izen bat elkarrizketa honetarako", + "Edit conversation name" : "Editatu elkarrizketaren izena", + "Edit conversation description" : "Editatu elkarrizketaren deskribapena", + "Enter a description for this conversation" : "Sartu deskribapen bat elkarrrizketa honentzat", + "Picture" : "Irudia", + "Disable" : "Desaktibatu", + "Enable" : "Aktibatu", + "Breakout rooms" : "Taldekako gelak", + "Manage breakout rooms" : "Kudeatu taldekako gelak", + "Set up breakout rooms for this conversation" : "Konfiguratu taldekako gelak elkarrizketa honetarako", + "Please select a valid PNG or JPG file" : "Mesedez, hautatu baliozko PNG edo JPG fitxategi bat", + "Choose your conversation picture" : "Aukeratu zure elkarrizketaren irudia", + "Choose" : "Aukeratu", + "Error setting conversation picture" : "Errorea elkarrizketaren irudia ezartzean", + "Set emoji as conversation picture" : "Ezarri emojia elkarrizketa-irudi gisa", + "Upload conversation picture" : "Igo elkarrizketaren irudia", + "Choose conversation picture from files" : "Aukeratu elkarrizketaren irudia fitxategietatik", + "Remove conversation picture" : "Kendu elkarrizketaren irudia", + "The file must be a PNG or JPG" : "Fitxategiak PNG edo JPG izan behar du", + "Set picture" : "Ezarri irudia", + "Default permissions modified for {conversationName}" : "Lehenetsitako baimenak aldatu dira {conversationName}(r)entzat", + "Could not modify default permissions for {conversationName}" : "Ezin izan dira {conversationName}(r)en baimenak aldatu", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editatu elkarrizketa honen baimen lehenetsiak parte-hartzaileentzat. Ezarpen hauek ez dituzte moderatzaileen baimenak aldatzen.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Atal honetako baimenak aldatzen diren bakoitzean, parte-hartzaileei esleitutako baimen pertsonalizatuak galduko dira.", + "All permissions" : "Baimen guztiak", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Parte-hartzaileek dei bat hasi, sartu, audioa eta bideoa gaitu eta pantaila partekatzeko baimenak dituzte.", + "Restricted" : "Mugatua", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Parte-hartzaileek deietara sartzeko baimena dute, baina ezin dute audio edo bideoa gaitu edo pantaila partekatu moderatzaile batek baimen hauek eman arte.", + "Advanced permissions" : "Baimen aurreratuak", + "Edit permissions" : "Editatu baimenak", + "Conversation settings" : "Elkarrizketaren ezarpenak", + "Basic Info" : "Oinarrizko informazioa", + "Personal" : "Pertsonala", + "Moderation" : "Moderazioa", + "Setup overview" : "Konfigurazioaren ikuspegi orokorra", + "Breakout Rooms" : "Taldekako gelak", + "Matterbridge" : "Matterbridge", + "Bots" : "Bot-ak", + "Danger zone" : "Arrisku eremua", + "Archive conversation" : "Artxibatu elkarrizketa", + "Leave conversation" : "Atera elkarrizketatik", + "You need to promote a new moderator before you can leave the conversation" : "Moderatzaile berri bat sustatu behar duzu elkarrizketatik irten aurretik", + "Delete conversation" : "Ezabatu elkarrizketa", + "Do you really want to delete \"{displayName}\"?" : "Ziur zaude \"{displayName}\" ezabatu nahi duzula?", + "Error while deleting conversation" : "Errorea elkarrizketa ezabatzen", + "Delete all chat messages" : "Ezabatu txateko mezu guztiak", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ziur zaude \"{displayName}\" elkarrizketako mezu guztiak ezabatu nahi dituzula?", + "Error while clearing chat history" : "Errorea txataren historia garbitzen", + "Be careful, these actions cannot be undone." : "Kontuz ibili, ekintza hauek ezin dira desegin.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Elkarrizketa uzten denean, elkarrizketa itxi batera berriro sartzeko, gonbidapen bat behar da. Elkarrizketa ireki batean edozein unetan sar daiteke berriro.", + "Permanently delete this conversation." : "Betirako ezabatu elkarrizketa hau.", + "Delete chat messages" : "Ezabatu txateko mezuak", + "Permanently delete all the messages in this conversation." : "Ezabatu betirako elkarrizketa honen mezu guztiak.", + "_%n hour_::_%n hours_" : ["%nordu","%n"], + "_%n day_::_%n days_" : ["egun %n","%n egun"], + "_%n week_::_%n weeks_" : ["aste %n","%n aste"], + "Custom expiration time" : "Iraungitze denbora pertsonalizatua", + "Message expiration disabled" : "Mezua iraungitzea desgaituta dago", + "Message expiration set: {duration}" : "Mezuaren iraungitze ezarria: {duration}", + "Error when trying to set message expiration" : "Errore bat gertatu da mezu-iraungipena ezartzen saiatzean", + "Message expiration" : "Mezuen iraungitzea", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Txat-mezuak denbora jakin baten ondoren iraungi daitezke. Oharra: txatean partekatutako fitxategiak ez dira jabearentzat ezabatuko, baina ez dira gehiago elkarrizketan partekatuko.", + "Set message expiration" : "Ezarri mezuaren iraungitzea", + "Current message expiration" : "Uneko mezuaren iraungitzea", + "Guest access" : "Gonbidatuen sarbidea", + "Allow guests to join this conversation via link" : "Onartu gonbidatuei elkarrizketa honetan esteka bidez sartzea", + "Password protection" : "Pasahitz bidezko babesa", + "Set a password" : "Ezarri pasahitz bat", + "Change password" : "Pasahitza aldatu", + "Enter new password" : "Sartu pasahitz berria", + "Save password" : "Gorde pasahitza", + "Copy password" : "Kopiatu pasahitza", + "Guests are allowed to join this conversation via link" : "Gonbidatuek baimena dute elkarrizketa honetan sartzeko esteka bidez", + "Guests are not allowed to join this conversation" : "Gonbidatuek ezin dute elkarrizketa honetan sartu esteka bidez", + "Resend invitations" : "Birbidali gonbidapenak", + "This conversation is open to both registered users and users created with the Guests app" : "Elkarrizketa hau irekita dago bai erregistraturiko erabiltzaileentzat eta baita Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat ere", + "You opened the conversation to both registered users and users created with the Guests app" : "Elkarrizketa ireki duzu bai erregistraturiko erabiltzaileentzat eta baita Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat ere", + "Error occurred when opening or limiting the conversation" : "Errorea gertatu da elkarrizketa mugatu edo irekitzean", + "Open conversation to registered users, showing it in search results" : "Ireki elkarrizketa erregistratutako erabiltzaileei, bilaketen emaitzetan erakutsiaz.", + "Also open to users created with the Guests app" : "Irekita dago baita ere Gonbidatuak aplikazioak sorturiko erabiltzaileentzat", + "Open conversation" : "Ireki elkarrizketa", + "Invalid language" : "Hizkuntza baliogabea", + "Start time: {date}" : "Hasiera-ordua: {date}", + "Start time has been updated" : "Hasiera-data aldatu da", + "Error occurred while updating start time" : "Errorea gertatu da hasiera ordua eguneratzean", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ataria gaitzean uneko deiko ez-moderatzaileak kanporatuko dira.", + "Enable lobby, restricting the conversation to moderators" : "Gaitu ataria, elkarrizketa moderatzaileetara murriztuz", + "Meeting start time" : "Bileraren hasiera-ordua", + "Start time (optional)" : "Hasiera-ordua (hautazkoa)", + "Import email participants" : "Inportatu e-postako partaideak", + "Poll drafts" : "Galdeketa zirriborroak", + "Browse poll drafts" : "Arakatu galdeketa-zirriborroak", + "Error occurred when locking the conversation" : "Errorea gertatu da elkarrizketa blokeatzean", + "Error occurred when unlocking the conversation" : "Errorea gertatu da elkarrizketa desblokeatzean", + "Lock conversation" : "Blokeatu elkarrizketa", + "This will also terminate the ongoing call." : "Honek hasita dagoen deia ere bukatuko du.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blokeatu elkarrizketa edonork mezuak idatzi edo deiak egitea ekiditeko", + "Edit" : "Editatu", + "More information" : "Informazio gehiago", + "Delete" : "Ezabatu", + "Add new bridged channel to current conversation" : "Gehitu zubidun kanal berria uneko elkarrizketari", + "unknown state" : "egoera ezezaguna", + "running" : "Exekutatzen", + "not running, check Matterbridge log" : "ez dabil, egiaztatu Matterbridge erregistroa", + "not running" : "Ez da exekutatzen ari", + "Bridge saved" : "Zubia ondo gorde da", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Berehalako mezularitza sistema ugaritako kanalen artean zubiak ezar ditzakezu Matterbridge erabiliz.", + "More info on Matterbridge" : "Informazio gehiago Matterbridge-en", + "Messaging systems" : "Mezularitza sistema", + "Enable bridge" : "Gaitu zubia", + "Show Matterbridge log" : "Erakutsi Matterbridge erregistroa", + "Log content" : "Log edukia", + "Allow participants to mention @all" : "Baimendu parte-hartzaileek @all aipatu dezaten", + "Mention permissions" : "Aipatze-baimenak", + "Notifications" : "Jakinarazpenak", + "Notify about calls in this conversation" : "Jakinarazi elkarrizketa honen deiei buruz", + "Important conversation" : "Elkarrizketa garrantzitsua", + "Recording Consent" : "Grabatzeko baimena", + "Require recording consent before joining call in this conversation" : "Eskatu grabatzeko baimena elkarrizketa honetako deian sartu aurretik", + "Recording consent is required for all calls" : "Dei guztietan grabatzeko baimena behar da", + "SIP dial-in is now possible without PIN requirement" : "SIP markatzea posible da orain PIN baldintzarik gabe", + "SIP dial-in is now enabled" : "SIP markatzea gaituta dago", + "SIP dial-in is now disabled" : "SIP markatzea desgaituta dago", + "Error occurred when enabling SIP dial-in" : "Errorea gertatu da SIP markatzea gaitzean", + "Error occurred when disabling SIP dial-in" : "Errorea gertatu da SIP markatzea desgaitzean", + "Phone and SIP dial-in" : "Telefonoa eta SIP markatzea", + "Enable phone and SIP dial-in" : "Gaitu telefonoa eta SIP markatzea", + "Allow to dial-in without a PIN" : "Baimendu PINik gabe deitzeko", + "Join" : "Batu", + "Error while creating the conversation" : "Errorea elkarrizketa sortzean", + "Create a new conversation" : "Sortu elkarrizketa berri bat", + "Join open conversations" : "Sartu elkarrizketa irekietara", + "Unread mentions" : "Irakurri gabeko aipamenak", + "Create conversation" : "Sortu elkarrizketa", + "Enter your name" : "Sartu zure izena", + "Submit name and join" : "Bidali izena eta sartu", + "Log in" : "Izena eman", + "Import a file" : "Inportatu fitxategi bat", + "Browse" : "Arakatu", + "This might take a moment" : "Momentu bat beharko da", + "Send invitations" : "Bidali gonbidapenak", + "Mark as read" : "Markatu irakurri gisa", + "Mark as unread" : "Markatu ez irakurri gisa", + "Remove from favorites" : "Kendu gogokoetatik", + "Add to favorites" : "Gehitu gogokoetara", + "Unarchive conversation" : "Desartxibatu elkarrizketa", + "You need to promote a new moderator before you can leave the conversation." : "Moderatzaile berri bat izendatu behar duzu elkarrizketa utzi ahal izateko.", + "Conversation actions" : "Elkarrizketa ekintzak", + "Notify about calls" : "Jakinarazi deiei buruz", + "Pending invitations" : "Bidaltzeko gonbidapenak", + "Decline invitation" : "Bazteztu gonbidapena", + "Accept invitation" : "Onartu gonbidapena", + "No pending invitations" : "Ez duzu gonbidapenik zain", + "Home" : "Etxea", + "Unread" : "Irakurri gabe", + "Alphabetically" : "Alfabetikoki", + "No matches found" : "Ez dira emaitzarik aurkitu", + "No conversations found" : "Ez da elkarrizketarik aurkitu", + "An error occurred while performing the search" : "Errore bat gertatu da bilaketa egitean", + "Conversation list" : "Elkarrizketa zerrenda", + "Unread messages" : "Irakurri gabeko mezuak", + "Clear filters" : "Garbitu iragazkiak", + "New personal note" : "Nota pertsonal berria", + "Back to conversations" : "Itzuli elkarrizketetara", + "Archived conversations" : "Artxibatutako elkarrizketak", + "Clear filter" : "Garbitu iragazkia", + "App settings" : "Aplikazioaren ezarpenak", + "Users" : "Erabiltzaileak", + "Groups" : "Taldeak", + "Teams" : "Lantaldeak", + "Federated users" : "Erabiltzaile federatuak", + "New private conversation" : "Elkarrizketa pribatu berria", + "Other sources" : "Beste iturburuak", + "Open conversations" : "Ireki elkarrizketak", + "No search results" : "Ez dago bilaketaren emaitzarik", + "Users, groups and teams" : "Erabiltzaileak, taldeak eta lantaldeak", + "Users and groups" : "Erabiltzaileak eta taldeak", + "Users and teams" : "Erabiltzaileak eta lantaldeak", + "Groups and teams" : "Taldeak eta lantaldeak", + "New group conversation" : "Talde elkarrizketa berria", + "The meeting will start soon" : "Bilera laster hasiko da", + "This meeting is scheduled for {startTime}" : "Bilera hau {startTime}-rako programatuta dago", + "You are currently waiting in the lobby" : "Une honetan atondoan itxaroten ari zara", + "Select microphone" : "Hautatu mikrofonoa", + "No microphone available" : "Ez dago mikrofonorik eskuragarri", + "Select camera" : "Hautatu kamera", + "No camera available" : "Ez dago kamerarik eskuragarri", + "Select a device" : "Hautatu gailu bat", + "Playing …" : "Erreproduzitzen ...", + "Test speakers" : "Probatu bozgorailuak", + "Test" : "Proba", + "Devices" : "Gailuak", + "Backgrounds" : "Atzeko planoak", + "No audio" : "Audiorik ez", + "No camera" : "Kamerarik ez", + "Calls are not supported in your browser" : "Deiak ez dira onartzen zure nabigatzailean", + "Access to microphone is only possible with HTTPS" : "Mikrofonoa atzitzeko modu bakarra HTTPS bidez da", + "Access to microphone was denied" : "Mikrofonora sarbidea ukatua da", + "Error while accessing microphone" : "Errorea kamera atzitzean", + "Access to camera is only possible with HTTPS" : "Kamera atzitzeko modu bakarra HTTPS bidez da", + "The call might be recorded." : "Baliteke deia grabatzea.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Baliteke grabazioan zure ahotsa, kamerako bideoa eta pantaila partekatzea. Zure baimena beharrezkoa da deian sartu aurretik.", + "Apply settings" : "Aplikatu ezarpenak", + "Select a file" : "Hautatu fitxategi bat", + "Invalid path selected" : "Bide baliogabea hautatuta", + "Blur" : "Lausotu", + "Upload" : "Igo", + "Files" : "Fitxategiak", + "(editing)" : "(editatzen)", + "(edited)" : "(editatuta)", + "The message has expired or has been deleted" : "Mezua iraungi egin da edo ezabatu egin da", + "Cancel quote" : "Utzi eskaintza", + "24 hours" : "24 ordu", + "7 days" : "7 egun", + "Clear reminder – {timeLocale}" : "Garbitu gogorarazpena – {timeLocale}", + "Edited by {actor}" : "{actor}-(e)k editatuta", + "A reminder was successfully removed" : "Gogorarazpena ondo ezabatu da", + "Error occurred when removing a reminder" : "Errorea gertatu da gogorarazpena ezabatzean", + "A reminder was successfully set at {datetime}" : "Gogorarazpena ondo ezarri da {datetime}(e)rako", + "Error occurred when creating a reminder" : "Errorea gertatu da gogorarazpena sortzean", + "Add a reaction to this message" : "Gehitu erreakzioa mezu honi", + "Reply" : "Erantzun", + "More actions" : "Ekintza gehiago", + "Set reminder" : "Ezarri gogorarazpena", + "Reply privately" : "Erantzun pribatuki", + "Edit message" : "Editatu mezua", + "Copy message link" : "Kopiatu mezuaren esteka", + "Go to file" : "Joan fitxategira", + "Download file" : "Deskargatu fitxategia", + "Forward message" : "Birbidali mezua", + "Translate" : "Itzuli", + "Set custom reminder" : "Ezarri gogorarazpen pertsonalizatua", + "Close reactions menu" : "Itxi erreakzio menua", + "React with {emoji}" : "Erreakzionatu {emoji}-(r)ekin", + "React with another emoji" : "Erreakzionatu beste emoji batekin", + "Choose a conversation to forward the selected message." : "Hautatu elkarrizketa bat hurrengo mezua birbidaltzeko.", + "Error while forwarding message" : "Errorea mezua birbidaltzen", + "The message has been forwarded to {selectedConversationName}" : "Mezua {selectedConversationName}(e)ra birbidali da", + "Dismiss" : "Baztertu", + "Go to conversation" : "Joan elkarrizketara", + "Detect language" : "Detektatu hizkuntza", + "The message could not be translated" : "Ezin izan da mezu hau itzuli", + "Translation copied to clipboard" : "Itzulpena arbelera kopiatu da", + "Translation could not be copied" : "Ezin izan da itzulpena kopiatu", + "Translate message" : "Itzuli mezua", + "Translate from" : "Itzuli honetatik", + "Translate to" : "Itzuli honetara", + "Translating" : "Itzultzen", + "Copy translated text" : "Kopiatu itzulitako testua", + "Send now" : "Bidali orain", + "Message read by everyone who shares their reading status" : "Irakurtze-egoera partekatzen duten guztiek irakurri dute mezua", + "Message sent" : "Mezua bidalita", + "Sent without notification" : "Jakinarazpenik gabe bidalita", + "Deleting message" : "Mezua ezabatzen", + "Message deleted successfully" : "Mezua ondo ezabatu da", + "Message could not be deleted because it is too old" : "Mezua ezin izan da ezabatu zaharregia delako", + "Only normal chat messages can be deleted" : "Txat mezu normalak soilik ezabatu daitezke", + "An error occurred while deleting the message" : "Errore bat gertatu da mezua ezabatzean", + "Your browser does not support playing audio files" : "Zure nabigatzaileak ez du audio fitxategiak erreproduzitzeko euskarririk", + "Contact" : "Kontaktua", + "{stack} in {board}" : "{stack} {board}-(e)n", + "Deck Card" : "Deck txartela", + "Remove {fileName}" : "Kendu {fileName}", + "Open this location in OpenStreetMap" : "Ireki kokaleku hau OpenStreetMap-en", + "Sending message" : "Mezua bidaltzen", + "Failed to send the message. Click to try again" : "Mezua bidaltzeak huts egin du. Egin klik berriro saiatzeko", + "Not enough free space to upload file" : "Ez dago nahikoa leku librerik fitxategia igotzeko", + "You cannot send messages to this conversation at the moment" : "Une honetan ezin duzu mezurik bidali elkarrizketa honetara", + "_%n vote_::_%n votes_" : ["Boto %n","%n boto"], + "Delete poll draft" : "Ezabatu galdeketaren zirriborroa", + "Open poll" : "Galdeketa irekia", + "See results" : "Ikusi emaitzak", + "Reactions" : "Erreakzioak", + "No permission to post reactions in this conversation" : "Ez dago baimenik elkarrizketa honetan erreakzioak argitaratzeko", + "and {participant}" : "eta {participant}", + "Show all reactions" : "Erakutsi erreakzio guztiak", + "Add more reactions" : "Gehitu erreakzio gehiago", + "No messages" : "Mezurik ez", + "All messages have expired or have been deleted." : "Mezu guztiak iraungita daude edo ezabatuak izan dira.", + "Unpin" : "Kendu aingura", + "Cancel search" : "Utzi bilaketa", + "Create a new group conversation" : "Sortu talde-elkarrizketa berria", + "Add participants" : "Gehitu parte-hartzaileak", + "Conversation visibility" : "Elkarrizketaren ikusgarritasuna", + "Allow guests to join via link" : "Baimendu gonbidatuak esteka bidez batzea", + "Enter password" : "Sartu pasahitza", + "This conversation has been locked" : "Elkarrizketa hau blokeatu da", + "No permission to post messages in this conversation" : "Ez duzu baimenik mezuak argitaratzeko elkarrizketa honetan", + "Joining conversation …" : "Elkarrizketara batzen ...", + "Send message silently" : "Bidali mezua modu isilean", + "Send message" : "Bidali mezua", + "Send without notification" : "Bidali jakinarazpenik gabe", + "File to share" : "Partekatuko den fitxategia", + "Add emoji" : "Gehitu emojia", + "Send later" : "Bidali geroago", + "Cancel editing" : "Utzi editatzeari", + "Share from {nextcloud}" : "Partekatu {nextcloud} bidez", + "Share from Files" : "Partekatu Fitxategiak-etik", + "Share files to the conversation" : "Partekatu fitxategiak elkarrizketan", + "Upload from device" : "Igo gailutik", + "Create new poll" : "Sortu inkesta berria", + "Smart picker" : "Hautatzaile adimenduna", + "Record voice message" : "Grabatu ahots mezua", + "End recording and send" : "Amaitu grabazioa eta bidali", + "Dismiss recording" : "Baztertu grabazioa", + "Access to the microphone was denied" : "Mikrofonoa atzitzeko baimena ukatu da", + "Microphone either not available or disabled in settings" : "Mikrofonoa ezin da atzitu edo desgaituta dago ezarpenetan", + "Error while recording audio" : "Errorea audioa grabatzean", + "New file" : "Fitxategi berria", + "Blank" : "Hutsik", + "Error while creating file" : "Errorea fitxategia sortzen", + "Create and share a new file" : "Sortu eta partekatu fitxategi berri bat", + "Name of the new file" : "Fitxategiaren izen berria", + "Create file" : "Sortu fitxategia", + "Someone is typing …" : "Norbait idazten ari da ...", + "{user1} is typing …" : "{user1} idazten ari da …", + "{user1} and {user2} are typing …" : "{user1} eta {user2} idazten ari dira …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} eta {user3} idazten ari dira …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} eta beste %n idazten ari dira …","{user1}, {user2}, {user3} eta beste %n idazten ari dira …"], + "Add more files" : "Gehitu fitxategi gehiago", + "Send" : "Bidali", + "In this conversation {user} can:" : "Elkarrizketa honetan {user} ekintza hauek egin ditzake:", + "Edit default permissions for participants in {conversationName}" : "Editatu lehenetsitako baimenak {conversationName} elkarrizketako parte-hartzaileentzat", + "Start a call" : "Hasi dei bat", + "Skip the lobby" : "Saltatu ataria", + "Can post messages and reactions" : "Mezuak eta erreakzioak bidal daitezke", + "Enable the microphone" : "Gaitu mikrofonoa", + "Enable the camera" : "Gaitu kamera", + "Share the screen" : "Partekatu pantaila", + "Update permissions" : "Eguneratu baimenak", + "Updating permissions" : "Baimenak eguneratzen", + "No poll drafts" : "Ez dago galdeketa zirriborrorik", + "Create poll" : "Sortu galdeketa", + "Question" : "Galdera", + "Ask a question" : "Egin galdera bat", + "Answers" : "Erantzunak", + "Answer {option}" : "Galdera (aukera)", + "Delete poll option" : "Ezabatu galdeketaren aukera", + "Add answer" : "Gehitu erantzuna", + "Settings" : "Ezarpenak", + "Anonymous poll" : "Galdeketa anonimoa", + "Multiple answers" : "Erantzun anitz", + "Save as draft" : "Gorde zirriborro bezala", + "You voted for this option" : "Aukera hau bozkatu duzu", + "End poll" : "Amaitu galdeketa", + "Change your vote" : "Aldatu zure botoa", + "Results" : "Emaitzak", + "Voted participants" : "Botoa eman duten parte-hartzaileak", + "Send a message to \"{roomName}\"" : "Bidali mezu bat \"{roomName}\"-(e)ra", + "Hide list of participants" : "Ezkutatu parte-hartzaile zerrenda", + "Show list of participants" : "Erakutsi parte-hartzaile zerrenda", + "The message was sent to \"{roomName}\"" : "Mezua \"{roomName}\"-(e)ra bidali da", + "Send message to room" : "Bidali mezua gelara", + "Back to main room" : "Itzuli gela nagusira", + "Back to your room" : "Itzuli zure gelara", + "Message all rooms" : "Bidali mezua gela guztietara", + "Start session" : "Hasi saioa", + "Stop session" : "Gelditu saioa", + "The message was sent to all breakout rooms" : "Mezua taldekako gela guztietara bidali da", + "Send a message to all breakout rooms" : "Bidali mezu bat taldekako gela guztietara", + "Disable lobby" : "Desgaitu ataria", + "Settings for participant \"{user}\"" : "\"{user}\" parte-hartzailearen ezarpenak", + "Participant \"{user}\"" : "\"{user}\" parte-hartzailea", + "moderator" : "moderatzailea", + "bot" : "bot", + "guest" : "gonbidatua", + "Ringing …" : "Komunikatzen ...", + "Call rejected" : "Deia baztertu da", + "{time} talking …" : "{time} hitz egiten ...", + "{time} talking time" : "{time} hitzegite-denbora", + "Raised their hand" : "Eskua jaso dute", + "Joined with video" : "Bideoarekin batuta", + "Joined via phone" : "Telefonoarekin batuta", + "Joined with audio" : "Audioarekin batuta", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Testuak {maxLength} karaktere baino txikiagoa edo berdina izan behar du. Uneko testuak {charactersCount} karaktere ditu.", + "Remove group and members" : "Kendu taldea eta kideak", + "Remove team and members" : "Kendu lantaldea eta kideak", + "Remove participant" : "Kendu parte-hartzailea", + "Notification was sent to {displayName}" : "{displayName}-(e)ri jakinarazpena bidali zaio", + "Could not send notification to {displayName}" : "Ezin izan da jakinarazpena bidali {displayName}-ra", + "Permissions granted to {displayName}" : "Baimenak emanda {displayName}(r)i", + "Could not modify permissions for {displayName}" : "Ezin izan dira {displayName}(r)en baimenak aldatu", + "Permissions removed for {displayName}" : "Baimenak kendu zaizkio {displayName}(r)i", + "Permissions set to default for {displayName}" : "Baimenak lehenetsira ezarri dira {displayName}-rentzat", + "Phone number could not be muted" : "Ezin izan da telefono zenbakia isilarazi", + "Phone number could not be unmuted" : "Ezin izan da telefono zenbakia gaitu", + "in the lobby" : "atarian", + "Dial out phone" : "Telefonoa itzali", + "Hang up phone" : "Telefonoa eskegi", + "Move to conversation" : "Mugitu elkarrizketara", + "Dial-in PIN" : "Markatzen PINa", + "Demote from moderator" : "Kendu moderatzaile rola", + "Promote to moderator" : "Egin moderatzaile", + "Resend invitation" : "Birbidali gonbidapena", + "Send call notification" : "Bidali dei jakinarazpena", + "Unmute phone number" : "Telefono zenbakia gaitu", + "Mute phone number" : "Mututu telefono zenbakia", + "Copy phone number" : "Kopiatu telefono zenbakia", + "Reset custom permissions" : "Berezarri baimen pertsonalizatuak", + "Grant all permissions" : "Eman baimen guztiak", + "Remove all permissions" : "Kendu baimen guztiak", + "Remove" : "Kendu", + "Permissions modified for {displayName}" : "Baimenak aldatu dira {displayName}(r)entzat", + "Add users, groups or teams" : "Gehitu erabiltzaileak, taldeak edo lantaldeak", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Gehitu erabiltzaileak edo lantaldeak", + "Add users" : "Gehitu erabiltzailea", + "Add groups or teams" : "Gehitu taldeak edo lantaldeak", + "Add groups" : "Gehitu taldeak", + "Add teams" : "Gehitu lantaldeak", + "Add other sources" : "Gehitu beste iturburuak", + "Add emails" : "Gehitu helbide elektronikoa", + "Integrations" : "Integrazioak", + "Add federated users" : "Gehitu erabiltzaile federatuak", + "Searching …" : "Bilatzen …", + "Search for more users" : "Bilatu erabiltzaile gehiago", + "Search or add participants" : "Bilatu edo gehitu parte-hartzaileak", + "Invitation was sent to {actorId}" : "{actorId}-(e)ri gonbidapena bidali zaio", + "An error occurred while adding the participants" : "Errore bat gertatu da parte-hartzaileak gehitzean", + "Participants" : "Parte-hartzaileak", + "Participants ({count})" : "Parte-hartzaileak ({count})", + "Open chat" : "Ireki txata", + "You have new unread messages in the chat." : "Irakurri gabeko mezu berriak dauzkazu txatean.", + "You have been mentioned in the chat." : "Txatean aipatu egin zaituzte.", + "Chat" : "Txata", + "Details" : "Xehetasunak", + "Shared items" : "Partekatutako elementuak", + "Until" : "Arte", + "No results found" : "Ez da emaitzarik aurkitu", + "Load more results" : "Kargatu emaitza gehiago ", + "Projects" : "Proiektuak", + "No shared items" : "Ez dago partekatutako elementurik", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Esteka elkarrizketara", + "Search conversations or users" : "Bilatu elkarrizketak edo erabiltzaileak", + "Select conversation" : "Hautatu elkarrizketa", + "Phone numbers" : "Telefono zenbakiak", + "Display name: {name}" : "Pantaila-izena: {name}", + "Edit display name" : "Editatu erakutsiko den izena", + "Save name" : "Gorde izena", + "Error while saving sounds setting" : "Errorea soinu ezarpenak gordetzean", + "Play sounds when participants join or leave a call" : "Soinuak egin parte-hartzaileak deira etortzean edo joatean", + "Notification settings" : "Jakinarazpen-ezarpenak", + "Default language" : "Hizkuntza lehenetsia", + "Select location for attachments" : "Hautatu kokalekua eranskinentzat", + "Error while setting attachment folder" : "Errorea eranskinen karpeta ezartzean", + "Error while setting read status privacy" : "Errorea irakurtze-egoera pribatutasun ezarpenak konfiguratzean", + "Privacy" : "Pribatutasuna", + "Attachments folder" : "Eranskinen karpeta", + "Toggle full screen" : "Txandakatu pantaila osoa", + "Search" : "Bilatu", + "Focus the chat input" : "Fokuratu txat sarrera", + "Unfocus the chat input to use shortcuts" : "Utzi txat sarrera fokuratzeari lasterbideak erabiltzeko", + "Shortcuts while in a call" : "Lasterbideak deian zehar", + "Camera on and off" : "Kamera gaitu eta desgaitu", + "Microphone on and off" : "Mikrofonoa aktibatu eta desaktibatu", + "Raise or lower hand" : "Jaso edo jaitsi eskua", + "Push to talk or push to mute" : "Sakatu hitz egiteko edo mututzeko", + "Start call silently" : "Hasi deia modu isilean", + "Start call" : "Hasi deia", + "End call" : "Amaitu deia", + "You will be able to join the call only after a moderator starts it." : "Moderatzaile batek deia hasten duenean bakarrik batu ahalko zara.", + "End call for everyone" : "Amaitu deia denontzat", + "Starting the recording" : "Grabaketa hasten", + "Recording" : "Grabatzea", + "The call has been running for one hour." : "Deia ordubetez egon da martxan.", + "Cancel recording start" : "Utzi grabaketaren hasiera", + "Stop recording" : "Utzi grabaketa", + "Send a reaction" : "Bidali erreakzioa", + "React with {reaction}" : "Erreakzionatu {reaction}-(r)ekin", + "All tasks done!" : "Zeregin guztiak eginda!", + "You are not allowed to enable screensharing" : "Ez duzu baimenik pantaila partekatzea gaitzeko", + "No screensharing" : "Pantaila partekatzerik ez", + "Screensharing options" : "Pantaila partekatzeko aukerak", + "Enable screensharing" : "Gaitu pantaila partekatzea", + "Bad sent video and screen quality." : "Bidaltze bideo eta pantaila kalitate txarra.", + "Bad sent screen quality." : "Bidaltze pantaila kalitate txarra.", + "Bad sent video quality." : "Bidaltze bideo kalitate txarra.", + "Bad sent audio, video and screen quality." : "Bidaltze audio, bideo eta pantaila kalitate txarra.", + "Bad sent audio and screen quality." : "Bidaltze audio eta pantaila kalitate txarra.", + "Bad sent audio and video quality." : "Bidaltze audio eta bideo kalitate txarra.", + "Bad sent audio quality." : "Bidaltze audio kalitate txarra.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea edo bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Disable background blur" : "Desgaitu atzeko planoko lausotzea", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Zure internet konexioa lanpetuta dago eta baliteke beste partaideek zu ez ikustea. Egoera hobetzeko saiatu zure bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zure pantaila ez ikustea.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ez ikustea.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea edo bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo zure pantaila ikusteko zailtasunak izatea. Egoera hobetzeko saiatu pantaila partekatu gabe aritzen.", + "Disable screenshare" : "Utzi pantaila partekatzeari", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea desgaitzen zure bideoan.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure bideoa desgaitzen.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertzeko zailtasunak izatea.", + "Screen sharing is not supported by your browser." : "Zure nabigatzaileak ez du pantaila partekatzea onartzen.", + "Screen sharing requires the page to be loaded through HTTPS." : "Pantaila partekatu ahal izateko orria HTTPS bidez kargatu behar da.", + "Screensharing requires the page to be loaded through HTTPS." : "Pantaila partekatu ahal izateko orria HTTPS bidez kargatu behar da.", + "An error occurred while starting screensharing." : "Pantaila partekatzen hastean errore bat gertatu da.", + "Show your screen" : "Erakutsi zure pantaila", + "Stop screensharing" : "Utzi pantaila partekatzeari", + "Mute others" : "Mututu besteak", + "Start recording" : "Hasi grabatzen", + "Set up breakout rooms" : "Konfiguratu taldekako gelak", + "Open Calendar" : "Ireki egutegia", + "Remove participant {name}" : "Kendu {name} parte-hartzailea", + "Open dialpad" : "Ireki markatze-teklatua", + "Select a region" : "Hautatu eskualde bat", + "Search …" : "Bilatu …", + "Message without mention" : "Aipamenik gabeko mezua", + "Mention myself" : "Aipatu ni", + "Mention everyone" : "Aipatu denak", + "Select a conversation" : "Hautatu elkarrizketa bat", + "Select a mode" : "Hautatu modu bat", + "The conversation does not exist" : "Elkarrizketa ez da existitzen", + "Join a conversation or start a new one!" : "Batu elkarrizketa batera edo hasi berri bat!", + "Duplicate session" : "Bikoiztu saioa", + "Join a conversation or start a new one" : "Batu elkarrizketa batera edo hasi berri bat", + "Nextcloud URL" : "Nextcloud URLa", + "Nextcloud user" : "Nextcloud erabiltzailea", + "User password" : "Erabiltzaile pasahitza", + "Talk conversation" : "Talk elkarrizketa", + "Skip TLS verification" : "Ez egiaztatu TLS", + "Matrix server URL" : "Matrix zerbitzariaren URLa", + "User" : "Erabiltzailea", + "Matrix channel" : "Matrix kanala", + "Mattermost server URL" : "Mattermost zerbitzariaren URLa", + "Mattermost user" : "Mattermost erabiltzailea", + "Team name" : "Lantaldearen izena", + "Channel name" : "Kanalaren izena", + "Rocket.Chat server URL" : "Rocket.Chat zerbitzariraren URLa", + "User name or email address" : "Erabiltzaile-izena edo e-posta helbidea", + "Rocket.Chat channel" : "Rocket.Chat kanala", + "Zulip server URL" : "Zulip zerbitzariaren URLa", + "Bot user name" : "Bot-aren erabiltzaile izena", + "Bot API key" : "Bot-aren API gakoa", + "Zulip channel" : "Zulip kanala", + "API token" : "API tokena", + "Slack channel" : "Slack kanala", + "Server ID or name" : "Zerbitzariaren IDa edo izena", + "Channel" : "Kanala", + "Login" : "Hasi saioa", + "Chat ID" : "Txataren IDa", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC zerbitzariaren URLa (adib. chat.freenode.net:6667)", + "Nickname" : "Ezizena", + "Connection password" : "Konexio pasahitza", + "IRC channel" : "IRC kanala", + "Channel password" : "Kanalaren pasahitza", + "NickServ nickname" : "NickServ ezizena", + "NickServ password" : "NickServ pasahitza", + "Use TLS" : "Erabili TLS", + "Use SASL" : "Erabili SASL", + "Tenant ID" : "Tenant IDa", + "Client ID" : "Bezeroaren IDa", + "Team ID" : "Lantaldearen IDa", + "Thread ID" : "Hariaren IDa", + "XMPP/Jabber server URL" : "XMPP/Jabber zerbitzariaren URLa", + "MUC server URL" : "MUC zerbitzariaren URLa", + "Jabber ID" : "Jabber IDa", + "Media" : "Media", + "Polls" : "Bozketak", + "Deck cards" : "Deck txartelak", + "Voice messages" : "Ahots-mezuak", + "Locations" : "Kokapenak", + "Call recordings" : "Deien grabaketak", + "Audio" : "Audioa", + "Show all media" : "Erakutsi multimedia guztia", + "Show all files" : "Erakustsi fitxategi guztiak", + "Show all polls" : "Erakutsi galdeketa guztiak", + "Show all deck cards" : "Erakutsi txartel sorta guztiak", + "Show all voice messages" : "Erakutsi ahots-mezu guztiak", + "Show all locations" : "Erakutsi kokaleku guztiak", + "Show all audio" : "Erakutsi audio guztia", + "Show all other" : "Erakutsi beste guztiak", + "Group" : "Taldea", + "Team" : "Lantaldea", + "You reconnected to the call" : "Deira berriro konektatu zara", + "You added {user0} and {user1}" : "{user0} eta {user1} gehitu dituzu", + "An administrator added you and {user0}" : "Administratzaile batek zu eta {user0} gehitu zaituzte", + "An administrator added {user0} and {user1}" : "Administratzaile batek {user0} eta {user1} gehitu ditu", + "You removed {user0} and {user1}" : "{user0} eta {user1} kendu dituzu", + "An administrator removed you and {user0}" : "Administratzaile batek zu eta {user0} kendu zaituzte", + "An administrator removed {user0} and {user1}" : "Administratzaile batek {user0} eta {user1} kendu ditu", + "You promoted {user0} and {user1} to moderators" : "{user0} eta {user1} moderatzaile bihurtu dituzu", + "An administrator promoted you and {user0} to moderators" : "Administratzaile batek zu eta {user0} moderatzaile egin zaituzte", + "An administrator promoted {user0} and {user1} to moderators" : "Administratzaile batek {user0} eta {user1} moderatzaile egin ditu", + "You demoted {user0} and {user1} from moderators" : "{user0} eta {user1} moderatzaileetatik kendu dituzu", + "An administrator demoted you and {user0} from moderators" : "Administratzaile batek zu eta {user0} moderatzaileetatik kendu zaituzte", + "An administrator demoted {user0} and {user1} from moderators" : "Administratzaile batek {user0} eta {user1} moderatzaileetatik kendu ditu", + "You: {lastMessage}" : "Zu: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(zuk editatuta)", + "(edited by {moderator})" : "({moderator}-(e)k editatuta)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Elkarrizketa batera batu nahi duzu aldi berean saioa aktibaturik beste leiho edo gailu batean. Nextcloud Talkek ez du hau onartzen une honetan. Zer egin nahi duzu?", + "Leave this page" : "Orri hau utzi", + "Join here" : "Hemen bat egin", + "An error occurred while posting deck card to conversation" : "Errore bat gertatu da elkarrizketan deck txartela argitaratzean", + "Post to a conversation" : "Argitaratu elkarrizketa batera", + "Post to conversation" : "Argitaratu elkarrizketan", + "The recording failed. Please contact your administrator." : "Utzi grabaketaren hasiera", + "An error occurred while posting location to conversation" : "Errorea gertatu da elkarrizketara kokalekua bidaltzean", + "Share to a conversation" : "Partekatu elkarrizketa batera", + "Share to conversation" : "Partekatu elkarrizketara", + "In conversation" : "Elkarrizketan", + "Error while clearing conversation history" : "Errorea elkarrizketaren historia garbitzen", + "Error occurred while allowing guests" : "Errorea gertatu da gonbidatuak baimentzean", + "Error occurred while disallowing guests" : "Errorea gertatu da gonbidatuei baimena kentzean", + "Error occurred when restricting the conversation to moderator" : "Errorea gertatu da elkarrizketari moderatzaile muga jartzean", + "Error occurred when opening the conversation to everyone" : "Errorea gertatu da elkarrizketa edonorentzat irekitzean", + "Conversation password has been saved" : "Elkarrizketaren pasahitza gorde da", + "Conversation password has been removed" : "Elkarrizketaren pasahitza kendu da", + "Error occurred while saving conversation password" : "Errore bat gertatu da elkarrizketaren pasahitza gordetzean", + "Call recording is starting." : "Deiaren grabaketa hasten ari da.", + "Conversation picture set" : "Elkarrizketa-irudia ezarrita", + "Conversation picture deleted" : "Elkarrizketa-irudia ezabatuta", + "Could not delete the conversation picture" : "Ezin izan da elkarrizketaren argazkia ezabatu", + "Could not post message: {errorMessage}" : "Ezin izan da mezua argitaratu: {errorMessage}", + "An error occurred while fetching the participants" : "Errore bat gertatu da parte-hartzaileak eskuratzean", + "Could not send invitation to {actorId}" : "Ezin izan da gonbidapena {actorId}(r)i bidali", + "Invitations sent" : "Gonbidapenak bidalita", + "Error occurred when sending invitations" : "Errorea gonbidapenak bidaltzean", + "{guest} (guest)" : "{guest} (gonbidatua)", + "An error occurred while submitting your vote" : "Errore bat gertatu da botoa bidaltzean", + "An error occurred while ending the poll" : "Errore bat gertatu da galdeketa bukatzean", + "Failed to add reaction" : "Huts egin du erreakzioa gehitzean", + "Failed to remove reaction" : "Huts egin du erreakzioa kentzean", + "Error while uploading file \"{fileName}\"" : "Errorea \"{fileName}\" fitxategia igotzerakoan", + "Not enough free space to upload file \"{fileName}\"" : "Ez dago nahikoa leku librerik \"{fileName}\" fitxategia igotzeko", + "You are not allowed to share files" : "Ez duzu baimenik fitxategiak partekatzeko", + "Error while sharing file" : "Errorea fitxategia partekatzean", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talkek ez dauka erabateko euskarria erabiltzen ari zaren nabigatzailearentzat. Erabili Mozilla Firefox, Microsoft Edge, Google Chrome, Opera edo Apple Safari nabigatzaileen bertsio berriena.", + "_In %n hour_::_In %n hours_" : ["ordu %n barru","%n ordu barru"], + "_%n minute _::_%n minutes_" : ["Minutu %n","%n minutu"], + "_In %n minute_::_In %n minutes_" : ["minutu %nean","%n minutu barru"], + "Later today – {timeLocale}" : "Beranduago gaur – {timeLocale}", + "Tomorrow – {timeLocale}" : "Bihar – {timeLocale}", + "This weekend – {timeLocale}" : "Hurrengo asteburua – {timeLocale}", + "Next week – {timeLocale}" : "Hurrengo astea – {timeLocale}", + "Message link copied to clipboard" : "Mezuaren esteka arbelera kopiatu da", + "Conversation link copied to clipboard" : "Elkarrizketaren esteka arbelera kopiatu da", + "The link could not be copied" : "Ezin izan da esteka kopiatu", + "Error while parsing a PROPFIND error" : "Errore bat gertatu da PROPFIND errore bat analizatzean", + "Lost connection to signaling server. Trying to reconnect." : "Konexioa galdu da seinalizazio zerbitzariarekin. Berriro konektatzen saiatzen.", + "Please reload the page." : "Mesedez birkargatu orria.", + "Do not disturb" : "Ez molestatu", + "Away" : "Kanpoan", + "Microphone {number}" : "{number} mikrofonoa", + "Camera {number}" : "{number} kamera", + "Speaker {number}" : "{number} bozgorailua", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Audioa desaktibatuta duzula hitz egiten ari zarela dirudi, aktibatu audioa besteek entzun zaitzaten", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ezin izan da konexioa ezarri partaide batekin gutxienez. Zure egoeran TURN zerbitzari bat beharrezkoa izan liteke. Eskatu zure administratzaileari horrelako bat konfiguratzeko {linkstart}this documentazio hau{linkend} erabiliz.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Hau uste baino denbora gehiago hartzen ari da. Multimedia baimenak emanda (edo ukatuta) daude jada? Hala bada, berrabiarazi zure nabigatzailea, audioa eta bideoa huts egiten ari baitira", + "Access to microphone & camera is only possible with HTTPS" : "Kamera eta mikrofonoak atzitzeko modu bakarra HTTPS bidez da", + "Please move your setup to HTTPS" : "Aldatu zure konfigurazioa HTTPSra", + "Access to microphone & camera was denied" : "Kamera eta mikrofonora sarbidea ukatu da", + "WebRTC is not supported in your browser" : "Zure nabigatzaileak ez du WebRTC onartzen", + "Please use a different browser like Firefox or Chrome" : "Beste nabigatzaile bat erabil ezazu: Firefox edo Chrome.", + "Error while accessing microphone & camera" : "Errorea mikrofonoa eta kamara atzitzean", + "%s Talk on your mobile devices" : "%s Hitz egin zure gailu mugikorretan", + "Join conversations at any time, anywhere, on any device." : "Batu elkarrizketetara edonoiz, edonondik, edozein gailutatik.", + "Android app" : "Android aplikazioa", + "iOS app" : "iOS aplikazioa", + "__language_name__" : "Euskara", + "Call summary (%s)" : "Deiaren laburpena (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Deiaren laburpen bot-ak deiaren ondoren laburpen mezu bat argitaratzen du partaide guztiak zerrendatu eta zereginak zehazten dituena", + "Tasks" : "Zereginak", + "Notes" : "Oharrak", + "Reports" : "Txostenak", + "Decisions" : "Erabakiak", + "Agenda" : "Agenda", + "Call summary" : "Deiaren laburpena", + "Call summary - {title}" : "Deiaren laburpena - {title}", + "Next meeting" : "Hurrengo bilera", + "Set reminder for later today" : "Ezarri gogorarazpena gaur beranduagorako", + "Set reminder for tomorrow" : "Ezarri gogorarazpena biharko", + "Set reminder for this weekend" : "Ezarri gogorarazpena asteburu honetarako", + "Set reminder for next week" : "Ezarri gogorarazpena hurrengo asterako", + "Generate summary" : "Sortu laburpena", + "Open poll • You voted already" : "Galdeketa irekia • Botoa dagoeneko eman duzu", + "Open poll • Click to vote" : "Galdeketa irekia・ Egin klik botoa emateko", + "Poll • Ended" : "Galdeketa ・ Bukatuta", + "Talk recording from {time} ({conversation})" : "Solasaldi grabazioa {time} -tik aurrera ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Galdeketaren emaitzak • %n boto","Galdeketaren emaitzak • %nboto"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Galdeketa irekia・Boto %n","Galdeketa irekia・%n boto"], + "Submit vote" : "Bidali botoa", + "Your privacy setting has been saved" : "Zure pribatutasun ezarpenak gorde dira", + "Failed to save sounds setting" : "Soinu ezarpenak gordetzeak huts egin du", + "Sounds setting saved" : "Soinu ezarpenak gordeta", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Elkarrizketara batu zara beste leiho edo gailu batean. Nextcloud Talkek ez du hau onartzen une honetan, beraz saioa itxi egin da." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/eu.json b/l10n/eu.json new file mode 100644 index 0000000..a10f65c --- /dev/null +++ b/l10n/eu.json @@ -0,0 +1,1605 @@ +{ "translations": { + "a conversation" : "elkarrizketa bat", + "(Duration %s)" : "(Iraupena %s)", + "You attended a call with {user1}" : "Dei batean parte hartu duzu {user1} erabiltzailearekin", + "_%n guest_::_%n guests_" : ["%n gonbidatu","%n gonbidatu"], + "You attended a call with {user1} and {user2}" : "Dei batean parte hartu duzu {user1} eta {user2} erabiltzaileekin", + "You attended a call with {user1}, {user2} and {user3}" : "Dei batean parte hartu duzu {user1}, {user2} eta {user3} erabiltzaileekin", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Dei batean parte hartu duzu {user1}, {user2}, {user3} eta {user4} erabiltzaileekin", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Dei batean parte hartu duzu {user1}, {user2}, {user3}, {user4} eta {user5} erabiltzaileekin", + "_%n other_::_%n others_" : ["beste %n ","beste %n "], + "{actor} invited you to {call}" : "{actor} erabiltzaileak {call} deira gonbidatu zaitu", + "You were invited to a conversation or had a call" : " Elkarrizketa batera gonbidatu zaituzte edo dei bat jaso duzu", + "Other activities" : "Beste jarduerak", + "Talk" : "Hizketaldia", + "Guest" : "Gonbidatua", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Ongi etorri Nextcloud Talk-era!\nElkarrizketa honetan ezaugarri berrien berri emango zaizu.", + "## New in Talk %s" : "## Berria Talk%s-n", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Orain Microsoft Edge eta Safari erabili daitezke audio eta bideo deietan parte hartzeko", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Orain bi pertsonaren arteko elkarrizketak iraunkorrak dira eta ezin dira nahi gabe talde-elkarrizketa bihurtu. Horretaz gain, parte-hartzaile batek elkarrizketa uzten duenean, ez da lehen bezala elkarrizketa automatikoki ezabatzen. Bi parte-hartzaileek uzten dutenean soilik ezabatzen da elkarrizketa zerbitzaritik", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Orain jakinarazpen bat bidal diezaiekezu txateko parte-hartzaile guztiei \"@all\" bidaliz", + "- With the \"arrow-up\" key you can repost your last message" : "- \"gora gezia\" erabiliz zure azken mezua berriz bidali dezakezu", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Orain Talk-ek komando berriak ditu, bidali \"/help\" txateko mezu bezala zure administratzaileak batere konfiguratu duen ikusteko", + "- With projects you can create quick links between conversations, files and other items" : "- Proiektuekin esteka azkarrak sor ditzakezu elkarrizketa, fitxategi eta bestelako elementuetara", + "- You can now mention guests in the chat" : "- Orain gonbidatuak aipatu ditzakezu txatean", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Orain elkarrizketek atondo bat eduki dezakete. Honek aukera ematen die moderatzaileei txat eta deira batu eta bilera prestatzeko, erabiltzaile eta gonbidatuek itxaron behar duten bitartean", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Orain mezuei erantzuna zuzenean eman diezaiekezu, besteei zure mezuari buruzko testuinguru gehiago emateko", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Orain elkarrizketa eta parte-hartzaileak bilatzean zure aurreko elkarrizketak ere iragaziko ditu, aurreko elkarrizketak bilatzea asko erraztuz", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Orain erabiltzaile talde pertsonalizatuak gehitu ditzakezu elkarrizketetara, zirkuluak aplikazioa instalatuta badago", + "- Check out the new grid and call view" : "- Eman begiratua sareta berriari eta deien ikuspegiari", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Orain zure gailutik txatera zuzenean igo eta arrastatu ta jaregin ditzakezu fitxategiak", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Partekaturiko fitxategiak orain zuzenean irekitzen dira txatean ikuspegi aplikazioekin", + "- You can now search for chats and messages in the unified search in the top bar" : "- Txatak eta mezuak goiko barrako bilaketa bateratuan bila ditzakezu", + "- Spice up your messages with emojis from the emoji picker" : "- Apaindu zure mezuak emotikono-hautatzailearen emotikonoekin", + "- You can now change your camera and microphone while being in a call" : "- Orain kamera eta mikrofonoa aldatu ditzakezu dei batean zaudenean", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Eman zure elkarrizketei testuinguru bat deskribapenaren bitartez eta ireki saioa hasita duten erabiltzaileek aurkitu eta bat egin dezaten", + "- See a read status and send failed messages again" : "- Ikusi irakurritako egoera eta bidali berriro huts egindako mezuak", + "- Raise your hand in a call with the R key" : "- Goratu eskua dei batean R teklarekin ", + "- Join the same conversation and call from multiple devices" : "- Batu elkarrizketa berera eta deitu gailu anitzetik", + "- Send voice messages, share your location or contact details" : "- Bidali ahots-mezuak, partekatu zure kokalekua edo kontaktu-xehetasunak", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Gehitu taldeak elkarrizketa batera eta talde berriaren kideak partehartzaile bezala gehituko dira automatikoki", + "- A preview of your audio and video is shown before joining a call" : "- Zure audio eta bideoaren aurrebista erakutsiko da deira sartu baino lehen", + "- You can now blur your background in the newly designed call view" : "- Orain zure atzeko planoa lausotu dezakezu diseinatu berri den deien ikuspegian", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatzaileek orain baimen orokorrak eta indibidualak esleitu ahal dizkiete parte-hartzaileei", + "- You can now react to chat messages" : "- Txat-mezueri erreakzionatu diezaiokezu orain", + "- In the sidebar you can now find an overview of the latest shared items" : "- Alboko barran orain partekatutako azken elementuen ikuspegi orokorra aurki dezakezu", + "- Use a poll to collect the opinions of others or settle on a date" : "- Erabili galdetegi bat besteen iritziak batzeko edo data bat ezartzeko", + "- Configure an expiration time for chat messages" : "- Konfiguratu txat-mezuen iraungitze-ordua", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Hasi deiak elkarrizketa handietan besteei jakinarazi gabe. Deia hasitakoan banakako deien jakinarazpenak bidal ditzakezu.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Bidali txat mezuak hartzaileei jakinarazi gabe premiazkoa ez bada", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojiak automatikoki osa daitezke orain \":\" bat idatzita", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Lotu hainbat elementu erabiliz hautatzaile adimendun berria \"/\" bat idatzita", + "- Conversations can now have an avatar or emoji as icon" : "- Elkarrizketek avatar edo emoji bat izan dezakete ikono gisa", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Atzeko plano birtualak ere eskuragarri daude orain bideo deietan, atzeko plano lausotuaz gain", + "- Reactions are now available during calls" : "- Erreakzioak eskuragarri daude orain deietan zehar", + "- Typing indicators show which users are currently typing a message" : "- Idazketa-adierazleek mezu bat idazten duten erabiltzaileek erakusten dute", + "- Groups can now be mentioned in chats" : "- Taldeak txatetan aipa daitezke orain", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Deien grabazioak automatikoki transkribatzen dira transkripzioen hornitzaile-aplikazio bat erregistratuta badago", + "- Chat messages can be translated if a translation provider app is registered" : "- Txat-mezuak itzulpenen hornitzaile-aplikazio erabiliz itzul daitezke bat erregistratuta badago", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** orain _txat_ mezuetan erabil daiteke", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook-ak eskuragarri daude orain bot-ak ezartzeko. Ikusi dokumentazioa informazio gehiagorako https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ezarri gogorarazpen bat txat-mezu batean, geroago berriro jakinarazteko", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Erabili **Oharrak niretzat** elkarrizketa oharrak hartzeko eta zure gailuen artean informazioa partekatzeko", + "- Captions allow to send a message with a file at the same time" : "- Epigrafeek fitxategi batekin mezu bat bidaltzeko aukera ematen dute aldi berean", + "_All %n participant_::_All %n participants_" : ["Parte-hartzaile %n","%n parte-hartzaile guztiak"], + "Talk updates ✅" : "Talk eguneraketak ✅", + "Reaction deleted by author" : "Egileak erreakzioa ezabatu du", + "{actor} created the conversation" : "{actor} erabiltzaileak elkarrizketa sortu du", + "You created the conversation" : "Elkarrizketa zuk sortu duzu", + "System created the conversation" : "Sistemak elkarrizketa sortu du", + "An administrator created the conversation" : "Administratzaile batek elkarrizketa sortu du", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} erabiltzaileak elkarrizketa berrizendatu du: \"%1$s\" -> \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Zuk elkarrizketa berrizendatu duzu: \"%1$s\" -> \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administratzaile batek elkarrizketaren izena aldatu du \"%1$s\" tik \"%2$s\"ra", + "{actor} set the description" : "{actor} deskribapena ezarri du", + "You set the description" : "Deskribapena ezarri duzu", + "An administrator set the description" : "Administratzaile batek deskribapena ezarri du", + "{actor} removed the description" : "{actor} erabiltzaileak deskribapena kendu du", + "You removed the description" : "Deskribapena kendu duzu", + "An administrator removed the description" : "Administratzaile batek deskribapena kendu du", + "You started a silent call" : "Dei isil bat hasi duzu", + "{actor} started a silent call" : "{actor}(e)k dei isil bat hasi du", + "You started a call" : "Dei bat hasi duzu", + "{actor} started a call" : "{actor} erabiltzaileak dei bat hasi du", + "{actor} joined the call" : "{actor} deira batu da", + "You joined the call" : "Deira batu zara", + "{actor} left the call" : "{actor} erabiltzaileak deia utzi du", + "You left the call" : "Deia utzi duzu", + "{actor} unlocked the conversation" : "{actor} erabiltzaileak elkarrizketa desblokeatu du", + "You unlocked the conversation" : "Elkarrizketa desblokeatu duzu", + "An administrator unlocked the conversation" : "Administratzaile batek elkarrizketa desblokeatu du", + "{actor} locked the conversation" : "{actor} erabiltzaileak elkarrizketa blokeatu du", + "You locked the conversation" : "Elkarrizketa blokeatu duzu", + "An administrator locked the conversation" : "Administratzaile batek elkarrizketa blokeatu du", + "{actor} limited the conversation to the current participants" : "{actor} erabiltzaileak uneko parte-hartzaileen muga ezarri dio elkarrizketari", + "You limited the conversation to the current participants" : "Uneko parte-hartzaileen muga ezarri diozu elkarrizketari", + "An administrator limited the conversation to the current participants" : "Administratzaile batek uneko parte-hartzaileen muga ezarri dio elkarrizketari", + "{actor} opened the conversation to registered users" : "{actor} erabiltzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat", + "You opened the conversation to registered users" : "Elkarrizketa ireki duzu erregistraturiko erabiltzaileentzat", + "An administrator opened the conversation to registered users" : "Administratzaile batek elkarrizketa ireki du erregistraturiko erabiltzaileentzat", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} erabiltzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "You opened the conversation to registered users and users created with the Guests app" : "Elkarrizketa ireki duzu erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administratzaileak elkarrizketa ireki du erregistraturiko erabiltzaileentzat eta Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat", + "The conversation is now open to everyone" : "Orain elkarrizketa irekia dago edozeinentzat", + "{actor} opened the conversation to everyone" : "{actor} erabiltzaileak elkarrizketa ireki du edozeinentzat", + "You opened the conversation to everyone" : "Elkarrizketa ireki duzu edozeinentzat", + "{actor} restricted the conversation to moderators" : "{actor} erabiltzaileak elkarrizketa moderatzaileentzako murriztu du", + "You restricted the conversation to moderators" : "Elkarrizketa moderatzaileentzako murriztu duzu", + "{actor} started breakout rooms" : "{actor}-(e)k taldekako gelak hasi ditu", + "You started breakout rooms" : "Taldekako gelak hasi dituzu", + "{actor} stopped breakout rooms" : "{actor}-(e)k taldekako gelak geldiarazi ditu", + "You stopped breakout rooms" : "Taldekako gelak geldiarazi dituzu", + "{actor} allowed guests" : "{actor} erabiltzaileak gonbidatuak baimendu ditu", + "You allowed guests" : "Gonbidatuak baimendu dituzu", + "An administrator allowed guests" : "Administratzaile batek gonbidatuak baimendu ditu", + "{actor} disallowed guests" : "{actor} erabiltzaileak gonbidatuei baimena kendu die", + "You disallowed guests" : "Gonbidatuei baimena kendu diezu", + "An administrator disallowed guests" : "Administratzaile batek gonbidatuak debekatu ditu", + "{actor} set a password" : "{actor} erabiltzaileak pasahitz bat ezarri du", + "You set a password" : "Pasahitz bat ezarri duzu", + "An administrator set a password" : "Administratzaile batek pasahitza ezarri du", + "{actor} removed the password" : "{actor} erabiltzaileak pasahitza kendu du", + "You removed the password" : "Pasahitza kendu duzu", + "An administrator removed the password" : "Administratzaile batek pasahitza kendu du", + "{actor} added {user}" : "{actor} erabiltzaileak {user} gehitu du", + "You joined the conversation" : "Elkarrizketara batu zara", + "{actor} joined the conversation" : "{actor} elkarrizketara batu da", + "You added {user}" : "{user} gehitu duzu", + "{actor} added you" : "{actor} erabiltzaileak zu gehitu zaitu", + "An administrator added you" : "Administratzaile batek gehitu egin zaitu", + "An administrator added {user}" : "Administratzaile batek {user} gehitu du", + "You left the conversation" : "Elkarrizketatik atera zara", + "{actor} left the conversation" : "{actor} erabiltzaileak elkarrizketa utzi du", + "{actor} removed {user}" : "{actor} erabiltzaileak {user} kendu du", + "You removed {user}" : "{user} erabiltzailea kendu duzu", + "{actor} removed you" : "{actor} erabiltzaileak kendu egin zaitu", + "An administrator removed you" : "Administratzaile batek kanporatu egin zaitu", + "An administrator removed {user}" : "Administratzaile batek {user} kanporatu du", + "{actor} invited {federated_user}" : "{actor}erabiltzaileak {federated_user} gonbidatu du", + "You invited {federated_user}" : "{federated_user} gonbidatu duzu", + "You accepted the invitation" : "Gonbidapena onartu duzu", + "{actor} invited you" : "{actor} erabiltzaileak gonbidatu zaitu", + "An administrator invited you" : "Administratzaile batek gonbidatu zaitu", + "An administrator invited {federated_user}" : "Administratzaile batek {federated_user} gonbidatu du", + "{federated_user} accepted the invitation" : "{federated_user}-(e)k gonbidapena onartu du", + "{actor} removed {federated_user}" : "{actor}-(e)k {federated_user} kendu du", + "You removed {federated_user}" : "{federated_user} kendu duzu", + "An administrator removed {federated_user}" : "Administratzaile batek {federated_user} kendu du", + "{federated_user} declined the invitation" : "{federated_user} gonbidapena ukatu du", + "{actor} added group {group}" : "{actor} erabiltzaileak {group} taldea gehitu du", + "You added group {group}" : "{group} taldea gehitu duzu", + "An administrator added group {group}" : "Administratzaile batek {group} taldea gehitu du", + "{actor} removed group {group}" : "{actor} erabiltzaileak {group} taldea kendu du", + "You removed group {group}" : "{group} taldea kendu duzu", + "An administrator removed group {group}" : "Administratzaile batek {group} taldea kendu du", + "{actor} added team {circle}" : "{actor} erabiltzaileak {circle} lantaldea gehitu du ", + "You added team {circle}" : "{circle} lantaldea gehitu duzu", + "An administrator added team {circle}" : "Administratzaile batek {circle} lantaldea gehitu du", + "{actor} removed team {circle}" : "{actor} erabiltzaileak {circle} lantaldea kendu du", + "You removed team {circle}" : "{circle} lantaldea kendu duzu", + "An administrator removed team {circle}" : "Administratzaile batek {circle} lantaldea kendu du", + "{actor} added {phone}" : "{actor} erabiltzaileak {phone} gehitu du", + "You added {phone}" : "{phone} gehitu duzu", + "An administrator added {phone}" : "Administratzaile batek {phone} gehitu du", + "{actor} removed {phone}" : "{actor} erabiltzaileak {phone} kendu du", + "You removed {phone}" : "{phone} kendu duzu", + "An administrator removed {phone}" : "Administratzaile batek {phone} kendu du", + "{actor} promoted {user} to moderator" : "{actor} erabiltzaileak {user} moderatzaile egin du", + "You promoted {user} to moderator" : "{user} moderatzaile egin duzu", + "{actor} promoted you to moderator" : "{actor} erabiltzaileak moderatzaile egin zaitu", + "An administrator promoted you to moderator" : "Administratzaile batek moderatzaile egin zaitu", + "An administrator promoted {user} to moderator" : "Administratzaile batek {user} moderatzaile egin du", + "{actor} demoted {user} from moderator" : "{actor} erabiltzaileak moderatzaile rola kendu dio {user} erabiltzaileari", + "You demoted {user} from moderator" : "{user} erabiltzaileari moderatzaile rola kendu diozu", + "{actor} demoted you from moderator" : "{actor} erabiltzaileak moderatzaile rola kendu dizu", + "An administrator demoted you from moderator" : "Administratzaile batek moderatzaile rola kendu dizu", + "An administrator demoted {user} from moderator" : "Administratzaile batek {user} erabiltzaileari moderatzaile rola kendu dio", + "{actor} shared a file which is no longer available" : "{actor} erabiltzaileak erabilgarri ez dagoen fitxategi bat partekatu du", + "You shared a file which is no longer available" : "Eskuragarri ez dagoen fitxategi bat partekatu duzu", + "File shares are currently not supported in federated conversations" : "Fitxategien partekatzeak une honetan ez dira onartzen federatutako elkarrizketetan", + "The shared location is malformed" : "Partekatutako kokalekua gaizki osatuta dago", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} erabiltzaileak Matterbridge konfiguratu du elkarrizketa hau beste txat batzuekin sinkronizatzeko", + "You set up Matterbridge to synchronize this conversation with other chats" : "Matterbridge konfiguratu duzu elkarrizketa hau beste txat batzuekin sinkronizatzeko", + "{actor} updated the Matterbridge configuration" : "{actor} erabiltzaileak Matterbridge konfigurazioa eguneratu du", + "You updated the Matterbridge configuration" : "Matterbridge konfigurazioa eguneratu duzu", + "{actor} removed the Matterbridge configuration" : "{actor} erabiltzaileak Matterbridge konfigurazioa kendu du", + "You removed the Matterbridge configuration" : "Matterbridge konfigurazioa kendu duzu", + "{actor} started Matterbridge" : "{actor} Matterbridge hasi du", + "You started Matterbridge" : "Matterbridge hasi duzu", + "{actor} stopped Matterbridge" : "{actor} erabiltzaileak Matterbridge gelditu du", + "You stopped Matterbridge" : "Matterbridge gelditu duzu", + "{actor} deleted a message" : "{actor}(e)k mezua ezabatu du", + "You deleted a message" : "Mezu bat ezabatu duzu", + "{actor} edited a message" : "{actor} erabiltzaileak mezu bat editatu du", + "You edited a message" : "Mezu bat editatu duzu", + "{actor} deleted a reaction" : "{actor}-(e)k erreakzio bat ezabatu du", + "You deleted a reaction" : "Erreakzio bat ezabatu duzu", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Mezuaren iraungitzea aste %nera aldatu duzu","Mezuaren iraungitzea %n astetara aldatu duzu"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Mezuaren iraungitzea egun%nera aldatu duzu","Mezuaren iraungitzea %n egunetara aldatu duzu"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Mezuaren iraungitzea ordu %nera aldatu duzu","Mezuaren iraungitzea %n ordutara aldatu duzu"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Mezuaren iraungitzea %nminututara aldatu duzu","Mezuaren iraungitzea%nminututara aldatu duzu"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}-(e)k mezuaren iraungitzea aste %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n astetara aldatu du"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}-(e)k mezuaren iraungitzea ordu %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n egunetara aldatu du"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}-(e)k mezuaren iraungitzea ordu %nera aldatu du","{actor}-(e)k mezuaren iraungitzea %n ordutara aldatu du"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["actor}-(e)k mezuaren iraungitzea%nminututara aldatu du","actor}-(e)k mezuaren iraungitzea %nminututara aldatu du"], + "{actor} disabled message expiration" : "{actor}-(e)k mezuaren iraungitzea desgaitu du", + "You disabled message expiration" : "Mezuaren iraungitzea desgaitu duzu", + "{actor} cleared the history of the conversation" : "{actor} elkarrizketaren historia ezabatu du", + "You cleared the history of the conversation" : "Elkarrizketaren historia ezabatu duzu", + "{actor} set the conversation picture" : "{actor}-(e)k ezarri du elkarrizketaren argazkia", + "You set the conversation picture" : " Ezarri duzu elkarrizketaren argazkia", + "{actor} removed the conversation picture" : "{actor}-(e)k elkarrizketaren argazkia kendu du", + "You removed the conversation picture" : "Elkarrizketaren argazkia kendu duzu", + "{actor} ended the poll {poll}" : "{actor}(e)k {poll} galdeketa bukatu du", + "You ended the poll {poll}" : "{poll} galdeketa bukatu duzu", + "{actor} started the video recording" : "{actor} bideoa grabatzen hasi da", + "You started the video recording" : "Bideoa grabatzen hasi zara", + "{actor} stopped the video recording" : "{actor}-(e)k bideoaren grabazioa gelditu du", + "You stopped the video recording" : "bideoaren grabazioa gelditu duzu", + "{actor} started the audio recording" : "{actor}-(e)k audio-grabazioa hasi du", + "You started the audio recording" : "Audio-grabazioa hasi duzu", + "{actor} stopped the audio recording" : "{actor}-(e)k audio-grabaketa gelditu du", + "You stopped the audio recording" : "Audio-grabaketa gelditu duzu", + "The recording failed" : "Grabaketak huts egin du", + "Someone voted on the poll {poll}" : "Norbaitek {poll} galdeketan bozkatu du.", + "Message deleted by author" : "Egileak mezua ezabatu du", + "Message deleted by {actor}" : "{actor} erabiltzaileak mezua ezabatu du", + "Message deleted by you" : "Mezua ezabatu duzu", + "Deleted user" : "Ezabatutako erabiltzaileak", + "Unknown number" : "Zenbaki ezezaguna", + "Administration" : "Administrazioa", + "System" : "Sistema", + "%s (guest)" : "%s (gonbidatua)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} deia bukatu du %n gonbidatuarekin (Iraupena {duration})","{actor} deia bukatu du %n gonbidatuekin (Iraupena {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} deia bukatu du {user1} erabiltzailearekin (Iraupena {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} deia bukatu du {user1} eta {user2} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2} eta {user3} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2}, {user3} eta {user4} erabiltzaileekin (Iraupena {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} deia bukatu du {user1}, {user2}, {user3}, {user4} eta {user5} erabiltzaileekin (Iraupena {duration})", + "Message of {user} in {conversation}" : "{user}-ren mezua {conversation}-n", + "Message of {user}" : "{user} erabiltzailearen mezua", + "Message of a deleted user in {conversation}" : "Ezabatutako erabiltzaile baten mezua {elkarrizketa} atalean", + "Talk conversations" : "Talk elkarrizketak", + "Talk to %s" : "Hitz egin %s erabiltzailearekin", + "An error occurred. Please contact your administrator." : "Errore bat gertatu da. Jarri zure administratzailearekin harremanetan mesedez.", + "Storage quota exceeded" : "Biltegiratze kuota gainditu da", + "File not found" : "Ez da fitxategia aurkitu", + "File is not shared, or shared but not with the user" : "Fitxategia ez dago partekatua, edo partekatu da baina ez erabiltzailearekin", + "No account available to delete." : "Ez dago konturik eskuragarri ezabatzeko.", + "Poll" : "Galdeketa", + "No image file provided" : "Ez da irudi fitxategirik eman", + "File is too big" : "Fitxategia handiegia da", + "Invalid file provided" : "Baliogabeko fitxategia eman da", + "Invalid image" : "Irudi baliogabea", + "Unknown filetype" : "Fitxategi mota ezezaguna", + "Talk mentions" : "Talk aipamenak", + "More conversations" : "Elkarrizketa gehiago", + "Say hi to your friends and colleagues!" : "Esan kaixo zure lagun eta lankideei!", + "No unread mentions" : "Ez dago irakurri gabeko aipamenik", + "Call in progress" : "Deia abian da", + "You were mentioned" : "Aipatu egin zaituzte", + "Write to conversation" : "Idatzi elkarrizketan", + "Writes event information into a conversation of your choice" : "Gertaeraren informazioa idazten du zuk hautatutako elkarrizketan", + "Conversation invitation" : "Gonbidapena elkarrizketara", + "Description" : "Deskribapena", + "You can also dial-in via phone with the following details" : "Markatzea telefono bidez ere egin dezakezu, honako xehetasunekin", + "Dial-in information" : "Markatze informazioa", + "Meeting ID" : "Bileraren IDa", + "Your PIN" : "Zure PINa", + "Meeting" : "Bilera", + "Password request: %s" : "Pasahitz eskaera: %s", + "Private conversation" : "Elkarrizketa pribatua", + "Deleted user (%s)" : "Ezabatutako erabiltzailea (%s)", + "Failed to upload call recording" : "Deien grabaketaren igotzeak huts egin du", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Grabaketa-zerbitzariak huts egin du {call} deiaren grabazioa igotzean. Jarri harremanetan administrazioarekin.", + "Share to chat" : "Partekatu txatarekin", + "Dismiss notification" : "Baztertu jakinarazpena", + "Call recording now available" : "Deien grabaketa ez dago erabilgarri", + "The recording for the call in {call} was uploaded to {file}." : "{deia} deiaren grabazioa {file}-ra igo da.", + "Transcript now available" : "Transkripzioa eskuragarri dago", + "The transcript for the call in {call} was uploaded to {file}." : "{call} deiaren transkripzioa {file} fitxategira kargatu da.", + "Failed to transcript call recording" : "Dei grabaketa transkribatzeak huts egin du", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Zerbitzariak huts egin du {call}deiaren {file} fitxategiko grabaketa transkribatzean. Jarri harremanetan administratzailearekin.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} erabiltzaileak {remoteServer} zerbitzariko {roomName} gelara gonbidatu zaitu", + "Accept" : "Onartu", + "Decline" : "Uko egin", + "{user1} invited you to a federated conversation" : "{user1} erabiltzaileak elkarrizketa federatu batera gonbidatu zaitu", + "New message" : "Mezu berria", + "Reminder" : "Gogorarazpena", + "Notification" : "Jakinarazpena", + "{user} reacted with {reaction}" : "{user}(e)k {reaction} adierazi du", + "{user} reacted with {reaction} in {call}" : "{user}(e)k {reaction} adierazi du {call} deian", + "Deleted user reacted with {reaction} in {call}" : "Ezabatutako erabiltzaile batek {reaction} adierazi du {call} deian", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} gonbidatuak {reaction} adierazi du {call} deian", + "Guest reacted with {reaction} in {call}" : "Gonbidatu batek {reaction} adierazi du {call} deian", + "{user} in {call}" : "{user} erabiltzailea {call} deian", + "Deleted user in {call}" : "Erabiltzailea ezabatu da {call} deian", + "{guest} (guest) in {call}" : "{guest} (guest) gonbidatua(k) {call} deian", + "Guest in {call}" : "Gonbidatua {call} deian", + "{user} sent you a private message" : "{user} erabiltzaileak mezu pribatu bat bidali dizu", + "{user} sent a message in conversation {call}" : "{user} erabiltzaileak mezu bat bidali du {call} deian", + "A deleted user sent a message in conversation {call}" : "Ezabatutako erabiltzaile batek mezu bat bidali du {call} deian", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak mezu bat bidali du {call} deian", + "A guest sent a message in conversation {call}" : "Gonbidatu batek mezu bat bidali du {call} deian", + "{user} replied to your private message" : "{user} erabiltzaileak zure mezu pribatuari erantzun dio", + "{user} replied to your message in conversation {call}" : "{user} erabiltzaileak zure mezuari erantzun dio {call} deian", + "A deleted user replied to your message in conversation {call}" : "Ezabatutako erabiltzaile batek zure mezuari erantzun dio {call} deian", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak zure mezu bati erantzun dio {call} deian", + "A guest replied to your message in conversation {call}" : "Gonbidatu batek zure mezuari erantzun dio {call} deian", + "{user} reacted with {reaction} to your private message" : "{user}-k {reaction} erabili du zure mezu pribatuari erreakzionatzeko", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}-k {reaction} erabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ezabatutako erabiltzaile batek {reaction} erabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{gonbidatua} (gonbidatua) {reaction} erabili du zure mezuari {deia} elkarrizketan erreakzionatzeko", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gonbidatu batek {reaction} rabili du zure mezuari {call} elkarrizketan erreakzionatzeko", + "{user} mentioned you in a private conversation" : "{user} erabiltzaileak elkarrizketa pribatu batean aipatu zaitu", + "{user} mentioned group {group} in conversation {call}" : "{user}-(e)k taldea {group} aipatu du {call} elkarrizketan", + "{user} mentioned everyone in conversation {call}" : "{user}-(e)k guztiak aipatu ditu {call} elkarrizketan", + "{user} mentioned you in conversation {call}" : "{user} erabiltzaileak aipatu zaitu {call} deian", + "A deleted user mentioned group {group} in conversation {call}" : "Ezabatutako erabiltzaile batek {group} taldea aipatu du {call} elkarrizketan", + "A deleted user mentioned everyone in conversation {call}" : "Ezabatutako erabiltzaile batek {call} elkarrizketan guztiak aipatu ditu", + "A deleted user mentioned you in conversation {call}" : "Ezabatutako erabiltzaile batek aipatu zaitu {call} deian", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gonbidatuak) {group} taldea aipatu du {call} elkarrizketan", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gonbidatuak) {group} guztiak aipatu ditu {call} elkarrizketan", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gonbidatua) erabiltzaileak aipatu zaitu {call} deian", + "A guest mentioned group {group} in conversation {call}" : "Gonbidatu batek {group} taldea aipatu du {call} elkarrizketan", + "A guest mentioned everyone in conversation {call}" : "Gonbidatu batek {call} elkarrizketan guztiak aipatu ditu ", + "A guest mentioned you in conversation {call}" : "Gonbidatu batek aipatu zaitu {call} deian", + "View message" : "Ikusi mezua", + "Dismiss reminder" : "Baztertu gogorarazpena", + "View chat" : "Ikusi txata", + "{user} invited you to a group conversation: {call}" : "{user} erabiltzaileak talde-elkarrizketa batera gonbidatu zaitu: {call}", + "Join call" : "Batu deira", + "Answer call" : "Erantzun deia", + "{user} would like to talk with you" : "{user} zurekin hitz egin nahi du", + "Call back" : "Itzuli deia", + "You missed a call from {user}" : "{user} erabiltzailearen dei bat galdu duzu", + "A group call has started in {call}" : "Talde dei bat hasi da {call} elkarrizketan", + "You missed a group call in {call}" : "Talde dei bat huts egin duzu {call} elkarrizketan", + "{email} is requesting the password to access {file}" : "{email} pasahitza eskatzen ari da {file} fitxategira sarbidea izateko", + "{email} tried to request the password to access {file}" : "{email} {file} fitxategira sarbidea izateko pasahitza eskatzen saiatu da", + "Someone is requesting the password to access {file}" : "Norbait {file} fitxategira sarbidea izateko pasahitza eskatzen ari da", + "Someone tried to request the password to access {file}" : "Norbait {file} fitxategira sarbidea izateko pasahitza eskatzen saiatu da", + "Open settings" : "Ireki ezarpenak", + "The hosted signaling server is now configured and will be used." : "Ostataturiko seinalizazio zerbitzaria konfiguratu da eta erabili egingo da.", + "The hosted signaling server was removed and will not be used anymore." : "Ostataturiko seinalizazio zerbitzaria kendu egin da eta ez da gehiago erabiliko.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Ostataturiko seinalizazio zerbitzariaren kontua aldatu egin da \"{oldstatus}\" izatetik \"{newstatus}\" izatera.", + "pending" : "zain", + "active" : "aktibo", + "expired" : "iraungita", + "blocked" : "blokeatuta", + "error" : "errorea", + "Contact via Talk" : "Jarri harremanetan Talk bidez", + "Open Talk" : "Ireki Talk", + "Default" : "Lehenetsia", + "Presentation" : "Aurkezpena", + "Conversations" : "Elkarrizketak", + "Messages in current conversation" : "Uneko elkarrizketako mezuak", + "{user}" : "{user}", + "Messages" : "Mezuak", + "{user} in {conversation}" : "{user} erabiltzailea {conversation} elkarrizketan", + "Messages in other conversations" : "Mezuak beste elkarrizketa batzuetan", + "One-to-one rooms always need to show the other users avatar" : "Batetik baterako gelek beti erakutsi behar dute beste erabiltzaileen avatarra", + "Invalid emoji character" : "Emoji karaktere baliogabea", + "Invalid background color" : "Atzeko planoko kolore baliogabea", + "Avatar image is not square" : "Abatarreko irudia ez da karratua", + "Room {number}" : "{number} gela", + "Other" : "Bestelakoa", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Proba eskaerak huts egin du ezin delako atzitu probako zerbitzaria. Saiatu berriro beranduago.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Arazo bat dago instantzia honen autentifikazioarekin. Agian ez dago irisgarritasunik kanpoaldetik URLa egiaztatzeko.", + "Something unexpected happened." : "Espero ez zen zerbait gertatu da.", + "The URL is invalid." : "URLa baliogabea da.", + "An HTTPS URL is required." : "HTTPS URL bat behar da.", + "The email address is invalid." : "E-posta helbidea baliogabea da.", + "The language is invalid." : "Hizkuntza baliogabea da.", + "The country is invalid." : "Herrialdea baliogabea da.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Arazo bat dago proba eskaerarekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "Too many requests are send from your servers address. Please try again later." : "Eskaera gehiegi bidali dira zure zerbitzari helbidetik. Saiatu berriro beranduago.", + "There is already a trial registered for this Nextcloud instance." : "Dagoeneko badago proba bat erregistratuta Nextcloud instantzia honetatik.", + "Something unexpected happened. Please try again later." : "Espero ez zen zerbait gertatu da. Saiatu berriro beranduago.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Proba eskatzeak huts egin du proba zerbitzariak oker jokatu duelako. Saiatu berriro beranduago.", + "Trial requested but failed to get account information. Please check back later." : "Proba eskatu da, baina kontuaren informazioa eskuratzeak huts egin du. Egiaztatu berriro beranduago.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Arazo bat dago eskaera honen autentifikazioarekin. Agian ez dago irisgarritasunik kanpoaldetik URLa egiaztatzeko.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kontuaren informazioa eskuratzeak huts egin du proba zerbitzariak oker jokatu duelako. Egiaztatu berriro beranduago.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Arazo bat dago kontuaren informazioa eskuratzearekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "There is no such account registered." : "Kontu hori ez dago erregistratuta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kontuaren informazioa eskuratzeak huts egin du proba zerbitzaria ez dagoelako eskuragarri. Egiaztatu berriro beranduago.", + "Deleting the hosted signaling server account failed. Please check back later." : "Ostataturiko seinalizazio zerbitzaria ezabatzeak huts egin du. Saiatu berriro beranduago.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kontua ezabatzeak huts egin du proba zerbitzariak oker jokatu duelako. Egiaztatu berriro beranduago.", + "There is a problem with deleting the account. Please check your logs for further information." : "Arazo bat dago kontua ezabatzearekin. Egiaztatu zure erregistroak informazio gehiagorako.", + "Too many requests are sent from your servers address. Please try again later." : "Eskaera gehiegi bidali dira zure zerbitzari helbidetik. Saiatu berriro beranduago.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kontua ezabatzeak huts egin du proba zerbitzaria ez dagoelako eskuragarri. Egiaztatu berriro beranduago.", + "Note to self" : "Nire oharrak", + "A place for your private notes, thoughts and ideas" : "Zure ohar, hausnarketa eta ideientzako leku pribatua", + "Andorra" : "Andorra", + "United Arab Emirates" : "Arabiar Emirerri Batuak", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua eta Barbuda", + "Anguilla" : "Aingira", + "Albania" : "Albaniera", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartika", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Estatubatuarra", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Aland Uharteak", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia-Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Boliviako Estatu Plurinazionala", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustakio eta Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamak", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet uhartea", + "Botswana" : "Botswana", + "Belarus" : "Bielorrusia", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) uharteak", + "Congo, the Democratic Republic of the" : "Kongoko Errepublika Demokratikoa", + "Central African Republic" : "Afrika Erdiko Errepublika", + "Congo" : "Kongo", + "Switzerland" : "Suitza", + "Côte d'Ivoire" : "Boli Kosta", + "Cook Islands" : "Cook uharteak", + "Chile" : "Txile", + "Cameroon" : "Kamerun", + "China" : "Txina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas uhartea", + "Cyprus" : "Zipre", + "Czechia" : "Txekia", + "Germany" : "Alemania", + "Djibouti" : "Djibuti", + "Denmark" : "Danimarka", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikar Errepublika", + "Algeria" : "Algeria", + "Ecuador" : "Ekuador", + "Estonia" : "Estonia", + "Egypt" : "Egipto", + "Western Sahara" : "Mendebaldeko Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Espainia", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland uharteak (Malvinak)", + "Micronesia, Federated States of" : "Mikronesiako Estatu Federatuak", + "Faroe Islands" : "Faroe uharteak", + "France" : "Frantzia", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Britainia Handiko eta Ipar Irlandako Erresuma Batua", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Frantsesa", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Ginea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Ekuatore Ginea", + "Greece" : "Grezia", + "South Georgia and the South Sandwich Islands" : "Hegoaldeko Georgia eta Hegoaldeko Sandwich uharteak", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Ginea Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard eta McDonald uharteak", + "Honduras" : "Honduras", + "Croatia" : "Kroazia", + "Haiti" : "Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Man uhartea", + "India" : "India", + "British Indian Ocean Territory" : "Indiako Ozeanoko Britainiar Lurraldea", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irango Islamiar Errepublika", + "Iceland" : "Islandia", + "Italy" : "Itali", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordania", + "Japan" : "Japonia", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kanbodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komoreak", + "Saint Kitts and Nevis" : "Saint Kitts eta Nevis", + "Korea, Democratic People's Republic of" : "Koreako Herri Errepublika Demokratikoa", + "Korea, Republic of" : "Koreako Errepublika", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kaiman uharteak", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laosko Herri Errepublika Demokratikoa", + "Lebanon" : "Libano", + "Saint Lucia" : "Santa Luzia", + "Liechtenstein" : "Liechtestein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldaviako Errepublika", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martin (Frantziako eremua)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall uharteak", + "North Macedonia" : "Ipar Mazedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Mariana uharteak", + "Martinique" : "Martinika", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurizio", + "Maldives" : "Maldivak", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambike", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia Berria", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk uhartea", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Herbehereak", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Zeelanda berria", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinesia Frantsesa", + "Papua New Guinea" : "Papua Ginea Berria", + "Philippines" : "Filipinak", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint-Pierre eta Mikelune", + "Pitcairn" : "Pitcairn uharteak", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestinako Estatua", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Errumania", + "Serbia" : "Serbia", + "Russian Federation" : "Errusiar Federakundea", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Salomon Uharteak", + "Seychelles" : "Seychelleak", + "Sudan" : "Sudan", + "Sweden" : "Suedia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascension eta Tristan da Cunha", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard eta Jan Mayen uharteak", + "Slovakia" : "Eslovakia", + "Sierra Leone" : "Sierra Leona", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Hego Sudan", + "Sao Tome and Principe" : "Sao Tome eta Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Alemaniako eremua)", + "Syrian Arab Republic" : "Siriako Arabiar Errepublika", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turk eta Caico uharteak", + "Chad" : "Txad", + "French Southern Territories" : "Hegoaldeko lurralde frantsesak", + "Togo" : "Togo", + "Thailand" : "Thailandia", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Ekialdeko Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkia", + "Trinidad and Tobago" : "Trinidad eta Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzaniako Errepublika Batua", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ameriketako Estatu Batuetako itsasoz haraindiko uharteak", + "United States of America" : "Ameriketako Estatu Batuak", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Vatikanoa", + "Saint Vincent and the Grenadines" : "Saint Vincent eta Grenadinak", + "Venezuela, Bolivarian Republic of" : "Venezuelako Bolibartar Errepublika", + "Virgin Islands, British" : "Birjina Uharte Britaniarrak", + "Virgin Islands, U.S." : "Birjina Uharte Estatubatuarrak", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis eta Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Hegoafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Atzeko planoaren lausotzea", + "Federation" : "Federazioa", + "High-performance backend" : "Errendimendu handiko motorra", + "Error: Cannot connect to server" : "Errorea: Ezin da zerbitzarira konektatu", + "Error: Server did not respond with proper JSON" : "Errorea: zerbitzariak ez du JSON egokiarekin erantzun", + "Error: Certificate expired" : "Errorea: Ziurtagiria iraungi da", + "Could not get version" : "Ezin bertsioa lortu", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Errorea: exekutatzen ari den bertsioa: {version}; Zerbitzaria eguneratu egin behar da Talk-en bertsio honekin bateragarria izan dadin", + "Error: Server responded with: {error}" : "Errorea: zerbitzariak {error} errorearekin erantzun du", + "Error: Unknown error occurred" : "Errorea: errore ezezaguna gertatu da", + "Recording backend" : "Atzealdeko grabaketa", + "SIP configuration" : "SIP konfigurazioa", + "Invalid date, date format must be YYYY-MM-DD" : "Data baliogabea, dataren formatuak UUUU-HH-EE izan behar du", + "Conversation not found" : "Elkarrizketa ez da aurkitu", + "Path is already shared with this conversation" : "Bidea dagoeneko partekatu da elkarrizketa honekin", + "Chat, video & audio-conferencing using WebRTC" : "Txata, bideo-konferentziak eta audio-konferentziak WebRTC erabiliz", + "Leave call" : "Utzi deia", + "Navigating away from the page will leave the call in {conversation}" : "Orritik kanpora nabigatzeak {conversation}(e)ko deitik ateratzea eragingo du", + "Stay in call" : "Mantendu deian", + "Discuss this file" : "Eztabaidatu fitxategi hau", + "Share this file with others to discuss it" : "Partekatu fitxategi hau besteekin eztabaidatzeko", + "Share this file" : "Partekatu fitxategi hau", + "Join conversation" : "Batu elkarrizketara", + "This conversation is password-protected." : "Elkarrizketa hau pasahitz bidez babestua dago.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Saioa hasteko hainbat saiakera baliogabe jaso ditugu zure IPtik. Ondorioz, zure hurrengo saio hasiera 30 segundo atzeratuko da.", + "The password is wrong. Try again." : "Pasahitza okerra da. Saiatu berriro.", + "Password" : "Pasahitza", + "Submit" : "Bidali", + "Error requesting the password." : "Errorea pasahitza eskatzean.", + "Request password" : "Eskatu pasahitza", + "This conversation has ended" : "Elkarrizketa hau amaitu da", + "Error occurred when joining the conversation" : "Errorea gertatu da elkarrizketara sartzean", + "Close Talk sidebar" : "Itxi Talk alboko barra", + "Open Talk sidebar" : "Ireki Talk alboko barra", + "Everyone" : "Edonor", + "Users and moderators" : "Erabiltzaileak eta moderatzaileak", + "Moderators only" : "Moderatzaileak soilik", + "Disable calls" : "Desgaitu deiak", + "Save changes" : "Gorde aldaketak", + "Saving …" : "Gordetzen …", + "Saved!" : "Gordeta!", + "Limit to groups" : "Mugatu taldeetara", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Gutxienez talde bat hautatuta badago, zerrendatutako taldeetako pertsonek soilik parte har dezakete elkarrizketetan.", + "Guests can still join public conversations." : "Gonbidatuek elkarrizketa publikoekin bat egin dezakete hala ere.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Jada Talk erabili ezin duten erabiltzaileak parte-hartzaile bezala agertuko dira beren aurreko elkarrizketetan eta beren txateko mezuak ere gordeko dira.", + "Limit using Talk" : "Mugatu Elkarrizketen erabilera", + "Limit creating a public and group conversation" : "Mugatu elkarrizketa publikoak eta talde-elkarrizketak sortzea", + "Limit creating conversations" : "Mugatu elkarrizketen sortzea", + "Limit starting a call" : "Mugatu dei bat hastea", + "Limit starting calls" : "Mugatu deiak hastea", + "When a call has started, everyone with access to the conversation can join the call." : "Dei bat hastean, elkarrizketara sarbidea duen edonork bat egin dezake deiarekin.", + "Description is not provided" : "Ez da deskribapenik eskaini", + "Locked for moderators" : "Moderatzaileentzat blokeatuta", + "Enabled" : "Gaituta", + "Disabled" : "Desaktibatua", + "Bots settings" : "Bots ezarpenak", + "State" : "Egoera", + "Name" : "Izena", + "Last error" : "Azken errorea", + "Total errors count" : "Errore zenbaki totala", + "Find more bots" : "Bilatu bot gehiago", + "Beta" : "Beta", + "Enable Federation in Talk app" : "Gaitu federazioa Talk aplikazioan", + "Permissions" : "Baimenak", + "Allow users to be invited to federated conversations" : "Eman baimena zure erabiltzaileei elkarrizketa federatuetara joateko", + "Allow users to invite federated users into conversation" : "Eman baimena zure erabiltzaileei beste erabiltzaile federatu batzuk elkarrizketara gonbidatzeko", + "Only allow to federate with trusted servers" : "Fidagarritzat jotako zerbitzariekin bakarrik baimendu federazioa", + "Select groups …" : "Hautatu taldeak ...", + "All messages" : "Mezu guztiak", + "@-mentions only" : "@ aipamenak soilik", + "Off" : "Desaktibatu", + "General settings" : "Ezarpen orokorrak", + "Default notification settings" : "Jakinarazpenen ezarpen lehenetsiak", + "Default group notification" : "Taldeen ezarpen lehenetsiak", + "Default group notification for new groups" : "Taldeen ezarpen lehenetsiak talde berrientzat", + "Integration into other apps" : "Beste aplikazioetan integrazioa", + "Allow conversations on files" : "Baimendu elkarrizketak fitxategietan", + "Allow conversations on public shares for files" : "Baimendu elkarrizketak fitxategien partekatze publikoetan", + "Enable encryption" : "Gaitu zifratzea", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Goiko botoian klik eginez inprimakiko informazioa Struktur AG-ren zerbitzarietara bidaltzen da. Informazio gehiago jaso dezakezu hemen {linkstart}spreed.eu{linkend}.", + "Pending" : "Zain", + "Error" : "Errorea", + "Blocked" : "Blokeatuta", + "Active" : "Aktiboa", + "Expired" : "Iraungita", + "Never" : "Inoiz ez", + "The trial could not be requested. Please try again later." : "Ezin izan da proba eskaera egin. Saiatu berriro beranduago.", + "The account could not be deleted. Please try again later." : "Ezin izan da kontua ezabatu. Saiatu berriro beranduago.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Gure kide Struktur AG-ek eskaintzen duen zerbitzuaren baitan, ostataturiko seinalizazio zerbitzaria eska daiteke. Horretarako, beheko inprimakia betetzea besterik ez duzu eta zure Nextcloudak eskaera egingo du. Zerbitzaria konfiguratzen denean kredentzialak automatikoki beteko dira. Honek uneko seinalizazio zerbitzariaren ezarpenak gainidatziko ditu.", + "URL of this Nextcloud instance" : "Nextcloud instantzia honen URLa", + "Full name of the user requesting the trial" : "Proba eskatzen duen erabiltzailearen izen osoa", + "Email of the user" : "Erabiltzailearen e-posta", + "Language" : "Hizkuntza", + "Country" : "Herrialdea", + "Request signaling server trial" : "Eskatu seinalizazio zerbitzari proba", + "You can see the current status of your hosted signaling server in the following table." : "Ondorengo taulan ikus dezakezu zure ostataturiko seinalizazio zerbitzariaren uneko egoera.", + "Status" : "Egoera", + "Created at" : "Sortua", + "Expires at" : "Iraungitze data", + "Limits" : "Mugak", + "Yes" : "Bai", + "No" : "Ez", + "Delete the signaling server account" : "Ezabatu seinalizazio zerbitzariaren kontua", + "_%n user_::_%n users_" : ["erabiltzaile %n ","%n erabiltzaile"], + "Installed version: {version}" : "Instalaturiko bertsioa: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridge instala dezakezu Nextcloud Talk beste zerbitzu batzuekin lotzeko, joan {linkstart1}GitHub orrira{linkend} xehetasun gehiagorako. Aplikazioak deskargatu eta instalatzeko denbora behar lezake. Denbora-muga gainditzen badu, saiatu eskuz instalatzen {linkstart2}appstoretik{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge bitarra ez da aurkitu edo ezin izan da exekutatu.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Matterbridge bitarrerako bidea eskuz ere konfigura dezakezu konfigurazioaren bidez. Informazio gehiago lortzeko, begiratu {linkstart}Matterbridge integrazio dokumentazioa {linkend}.", + "Downloading …" : "Deskargatzen...", + "Install Talk Matterbridge" : "Instalatu Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Errore bat gertatu da Matterbridge aplikazioa instalatzean", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Errore bat gertatu da Talk Matterbridge instalatzean. Instala ezazu eskuz", + "Failed to execute Matterbridge binary." : "Matterbridge bitarra exekutatzeak huts egin du.", + "Matterbridge integration" : "Matterbridge integrazioa", + "Enable Matterbridge integration" : "Gaitu Matterbridge integrazioa", + "Status: Checking connection" : "Egoera: konexioa egiaztatzen", + "OK: Running version: {version}" : "OK: {version} bertsioa exekutatzen", + "Recording backend URL" : "Atzealdeko URLa grabatzen", + "Validate SSL certificate" : "Balioztatu SSL ziurtagiria", + "Delete this server" : "Ezabatu zerbitzari hau", + "Test this server" : "Probatu zerbitzari hau", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "\"upload_max_filesize\" edo \"post_max_size\" PHP ezarpenek {maxUpload} arteko fitxategiak igotzeko aukera emango dute soilik.", + "Recording backend settings saved" : "Atzealdeko grabaketa ezarpena gordeta", + "Add a new recording backend server" : "Gehitu atzealdeko zerbitzari grabaketa berri bat", + "Shared secret" : "Partekatutako sekretua", + "Recording consent" : "Grabatzeko baimena", + "Recording transcription" : "Transkripzioa grabatzen", + "SIP configuration saved!" : "SIP konfigurazioa gorde da!", + "Restrict SIP configuration" : "Murriztu SIP konfigurazioa", + "Enable SIP configuration" : "Gaitu SIP konfigurazioa", + "Only users of the following groups can enable SIP in conversations they moderate" : "Honako taldeetako erabiltzaileek bakarrik gaitu dezakete SIP, beraiek moderatzen dituzten elkarrizketetan", + "Phone number (Country)" : "Telefono zenbakia (Herrialdea)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Informazio hau gonbidapen emailetan bidaltzen da eta parte-hartzaile guztiei bistaratzen zaie alboko barran.", + "Error code" : "Errore kodea", + "High-performance backend URL" : "Errendimendu handiko motorraren URLa", + "High-performance backend settings saved" : "Errendimendu handiko atzealdekoaren ezarpenak gorde dira", + "STUN server URL" : "STUN zerbitzariaren URLa", + "The server address is invalid" : "Zerbitzariaren helbidea baliogabea da", + "STUN settings saved" : "STUN ezarpenak gorde dira", + "STUN servers" : "STUN zerbitzariak", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN zerbitzaria bideratzaile baten atzean dauden parte-hartzaileen IP helbideak zehazteko erabiltzen da.", + "Add a new STUN server" : "Gehitu STUN zerbitzari berri bat", + "{schema} scheme must be used with a domain" : "{schema} eskema domeinu batekin erabili behar da", + "{option1} and {option2}" : "{option1} eta {option2}", + "{option} only" : "{option} soilik", + "OK: Successful ICE candidates returned by the TURN server" : "OK: baliozko ICE hautagaiak itzuli ditu TURN zerbitzariak", + "Error: No working ICE candidates returned by the TURN server" : "Errorea: TURN zerbitzariak ez du baliozko ICE hautagairik itzuli", + "Testing whether the TURN server returns ICE candidates" : "TURN zerbitzariak ICE hautagairik itzultzen duen aztertzen", + "TURN server schemes" : "TURN zerbitzariaren eskemak", + "TURN server URL" : "TURN zerbitzariaren URLa", + "TURN server secret" : "TURN zerbitzariaren sekretua", + "TURN server protocols" : "TURN zerbitzariaren protokoloak", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN zerbitzariak suhesi baten atzeko partaideen trafikoa bideratzeko erabiltzen dira. Partaideek ezin badute beraien artean konektatu, TURN zerbitzari bat beharrezkoa da seguru aski. Ikusi {linkstart}dokumentazio hau{linkend} konfigurazio jarraibideak jasotzeko.", + "TURN settings saved" : "TURN ezarpenak gorde dira", + "TURN servers" : "TURN zerbitzariak", + "Add a new TURN server" : "Gehitu TURN zerbitzari berri bat", + "Failed" : "Huts egin du", + "OK" : "Ados", + "Checking …" : "Egiaztatzen ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Huts egin du: WebAssembly desgaituta dago edo ez da onartzen arakatzaile honetan. Gaitu WebAssembly edo erabili hartarako laguntza duen arakatzaile bat egiaztapena egiteko.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Huts egin du: \".wasm\" eta \".tflite\" fitxategiak ez ditu behar bezala itzuli web zerbitzariak. Egiaztatu Talk-en dokumentazioan \"Sistemaren eskakizunak\" atala.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Ados: \".wasm\" eta \".tflite\" fitxategiak behar bezala itzuli ditu web zerbitzariak.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Badirudi PHP eta Apache konfigurazioa ez dela bateragarria. Mesedez, kontuan hartu PHP MPM_PREFORK moduluarekin soilik erabili daitekela and PHP-FPM MPM_EVENT moduluarekin erabili daitekela.", + "Web server setup checks" : "Web zerbitzariaren konfigurazio egiaztapenak", + "Federated user" : "Erabiltzaile federatua", + "Assign participants to rooms" : "Esleitu parte-hartzaileak geletara", + "Configure breakout rooms" : "Konfiguratu taldekako gelak", + "Number of breakout rooms" : "Taldekako-gela kopurua", + "Assignment method" : "Esleitzeko modua", + "Automatically assign participants" : "Parte-hartzaileak automatikoki esleitu", + "Manually assign participants" : "Parte-hartzaileak eskuz esleitu ", + "Allow participants to choose" : "Baimendu parte-hartzaileek aukera dezaten", + "Create rooms" : "Sortu gelak", + "Confirm" : "Berretsi", + "Create breakout rooms" : "Sortu taldekako gelak", + "Reset" : "Berrezarri", + "Delete breakout rooms" : "Ezabatu taldekako gelak", + "Room {roomNumber}" : "{roomNumber} gela", + "Current breakout rooms and settings will be lost" : "Uneko taldekako gelak eta ezarpenak galduko dira", + "Cancel" : "Utzi", + "Unassigned participants" : "Esleitu gabeko parte-hartzaileak", + "Back" : "Atzera", + "Assign" : "Esleitu", + "Add participant \"{user}\"" : "Gehitu \"{user}\" parte-hartzailea", + "Now" : "Orain", + "Loading …" : "Kargatzen ...", + "From" : "Nork", + "To" : "Nori", + "Calendar" : "Egutegia", + "Attendees" : "Partaideak", + "Save" : "Gorde", + "Search participants" : "Bilatu parte-hartzaileak", + "No results" : "Emaitzarik ez", + "Done" : "Egina", + "Raise hand" : "Jaso eskua", + "Raise hand (R)" : "Jaso eskua (R)", + "Lower hand" : "Jaitsi eskua", + "Lower hand (R)" : "Jaitsi eskua (R)", + "Exit full screen (F)" : "Irten pantaila osotik (F)", + "Full screen (F)" : "Pantaila osoa (F)", + "Speaker view" : "Hizlari ikuspegia", + "Grid view" : "Sareta ikuspegia", + "Recording consent is required" : "Grabatzeko baimena behar da", + "This conversation is read-only" : "Elkarrizketa hau irakurtzeko soilik da", + "Conversation not found or not joined" : "Elkarrizketa ez da aurkitu edo ez da sartu", + "Connection failed" : "Konexioak huts egin du", + "Reload" : "Birkargatu", + "{nickName} raised their hand." : "{nickName} eskua jaso du.", + "A participant raised their hand." : "Parte-hartzaile batek eskua jaso du", + "Collapse stripe" : "Tolestu marra", + "Expand stripe" : "Zabaldu marra", + "Previous page of videos" : "Bideoen aurreko orria", + "Next page of videos" : "Bideoen hurrengo orria", + "Connecting …" : "Konektatzen ...", + "Calling …" : "Deitzen ...", + "Waiting for {user} to join the call" : "{user} deian sartzeko zain", + "Waiting for others to join the call …" : "Besteak deira batzeko itxaroten...", + "You can invite others in the participant tab of the sidebar" : "Besteak gonbidatu ditzakezu alboko barrako parte-hartzaileak fitxan", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Besteak gonbidatu ditzakezu alboko barrako parte-hartzaileak fitxan edo esteka hau partekatuz!", + "Share this link to invite others!" : "Partekatu esteka hau besteak gonbidatzeko!", + "Copy link" : "Kopiatu esteka", + "You are not allowed to enable audio" : "Ez duzu baimenik audioa gaitzeko", + "No audio. Click to select device" : "Audiorik ez. Egin klik gailua hautatzeko", + "Mute audio" : "Mututu audioa", + "Mute audio (M)" : "Isildu audioa (M)", + "Unmute audio" : "Gaitu audioa", + "Unmute audio (M)" : "Aktibatu audioa (M)", + "None" : "Bat ere ez", + "Access to camera was denied" : "Kamerara sarbidea ukatu da", + "Error while accessing camera: It is likely in use by another program" : "Errorea kamera atzitzean: litekeena da beste programa bat hura erabiltzen aritzea", + "Error while accessing camera" : "Errorea kamera atzitzean", + "You have been muted by a moderator" : "Moderatzaile batek isilarazi zaitu", + "Hide presenter video" : "Ezkutatu aurkezlearen bideoa", + "You are not allowed to enable video" : "Ez duzu baimenik bideoa gaitzeko", + "No video. Click to select device" : "Bideorik ez. Egin klik gailua hautatzeko", + "Disable video" : "Desgaitu bideoa", + "Disable video (V)" : "Desgaitu bideoa (V)", + "Enable video" : "Gaitu bideoa", + "Enable video (V)" : "Gaitu bideoa (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa - Zure konexioa momentu bat etengo da bideoa lehenengo aldiz gaitzean", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa (V) - Zure konexioa une labur batez etengo da bideoa lehen aldiz gaitzean", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Gaitu bideoa. Zure konexioa momentu bat etengo da bideoa lehenengo aldiz gaitzean", + "Show presenter" : "Erakutsi aurkezlea", + "You" : "Zu ", + "Mute" : "Isilarazi", + "Muted" : "Isilduta", + "Show screen" : "Erakutsi pantaila", + "Stop following" : "Utzi jarraitzeari", + "Connection could not be established …" : "Ezin izan da konexioa ezarri ...", + "Connection was lost and could not be re-established …" : "Konexioa galdu da eta ezin izan da berriro ezarri ...", + "Connection could not be established. Trying again …" : "Konexioa ezin izan da ezarri. Berriro saiatzen ...", + "Connection lost. Trying to reconnect …" : "Konexioa galdu da. Birkonektatzen saiatzen ...", + "Connection problems …" : "Konexio arazoak ...", + "Collapse" : "Tolestu", + "Expand" : "Zabaldu", + "You need to be logged in to upload files" : "Fitxategiak igo ahal izateko saioa hasi behar duzu", + "Drop your files to upload" : "Jaregin zure fitxategiak igotzeko", + "Conversation messages" : "Elkarrizketa mezuak", + "Scroll to bottom" : "Korritu beherantz", + "Post message" : "Argitaratu mezua", + "Federated conversation" : "Elkarrizketa federatua", + "Public conversation" : "Elkarrizketa publikoa", + "Favorite" : "Gogokoa", + "Banned users" : "Debekatutako erabiltzaileak", + "Manage bans" : "Kudeatu debekuak", + "No banned users" : "Ez dago debekatutako erabiltzailerik", + "Banned by:" : "Honek debekatuta:", + "Date:" : "Data:", + "Note:" : "Oharra:", + "Hide details" : "Ezkutatu xehetasunak", + "Show details" : "Erakutsi xehetasunak", + "Unban" : "Debekua kendu", + "Error while updating conversation name" : "Errore bat gertatu da elkarrizketaren izena eguneratzean", + "Error while updating conversation description" : "Errorea elkarrizketa deskribapena eguneratzen", + "Enter a name for this conversation" : "Idatzi izen bat elkarrizketa honetarako", + "Edit conversation name" : "Editatu elkarrizketaren izena", + "Edit conversation description" : "Editatu elkarrizketaren deskribapena", + "Enter a description for this conversation" : "Sartu deskribapen bat elkarrrizketa honentzat", + "Picture" : "Irudia", + "Disable" : "Desaktibatu", + "Enable" : "Aktibatu", + "Breakout rooms" : "Taldekako gelak", + "Manage breakout rooms" : "Kudeatu taldekako gelak", + "Set up breakout rooms for this conversation" : "Konfiguratu taldekako gelak elkarrizketa honetarako", + "Please select a valid PNG or JPG file" : "Mesedez, hautatu baliozko PNG edo JPG fitxategi bat", + "Choose your conversation picture" : "Aukeratu zure elkarrizketaren irudia", + "Choose" : "Aukeratu", + "Error setting conversation picture" : "Errorea elkarrizketaren irudia ezartzean", + "Set emoji as conversation picture" : "Ezarri emojia elkarrizketa-irudi gisa", + "Upload conversation picture" : "Igo elkarrizketaren irudia", + "Choose conversation picture from files" : "Aukeratu elkarrizketaren irudia fitxategietatik", + "Remove conversation picture" : "Kendu elkarrizketaren irudia", + "The file must be a PNG or JPG" : "Fitxategiak PNG edo JPG izan behar du", + "Set picture" : "Ezarri irudia", + "Default permissions modified for {conversationName}" : "Lehenetsitako baimenak aldatu dira {conversationName}(r)entzat", + "Could not modify default permissions for {conversationName}" : "Ezin izan dira {conversationName}(r)en baimenak aldatu", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editatu elkarrizketa honen baimen lehenetsiak parte-hartzaileentzat. Ezarpen hauek ez dituzte moderatzaileen baimenak aldatzen.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Atal honetako baimenak aldatzen diren bakoitzean, parte-hartzaileei esleitutako baimen pertsonalizatuak galduko dira.", + "All permissions" : "Baimen guztiak", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Parte-hartzaileek dei bat hasi, sartu, audioa eta bideoa gaitu eta pantaila partekatzeko baimenak dituzte.", + "Restricted" : "Mugatua", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Parte-hartzaileek deietara sartzeko baimena dute, baina ezin dute audio edo bideoa gaitu edo pantaila partekatu moderatzaile batek baimen hauek eman arte.", + "Advanced permissions" : "Baimen aurreratuak", + "Edit permissions" : "Editatu baimenak", + "Conversation settings" : "Elkarrizketaren ezarpenak", + "Basic Info" : "Oinarrizko informazioa", + "Personal" : "Pertsonala", + "Moderation" : "Moderazioa", + "Setup overview" : "Konfigurazioaren ikuspegi orokorra", + "Breakout Rooms" : "Taldekako gelak", + "Matterbridge" : "Matterbridge", + "Bots" : "Bot-ak", + "Danger zone" : "Arrisku eremua", + "Archive conversation" : "Artxibatu elkarrizketa", + "Leave conversation" : "Atera elkarrizketatik", + "You need to promote a new moderator before you can leave the conversation" : "Moderatzaile berri bat sustatu behar duzu elkarrizketatik irten aurretik", + "Delete conversation" : "Ezabatu elkarrizketa", + "Do you really want to delete \"{displayName}\"?" : "Ziur zaude \"{displayName}\" ezabatu nahi duzula?", + "Error while deleting conversation" : "Errorea elkarrizketa ezabatzen", + "Delete all chat messages" : "Ezabatu txateko mezu guztiak", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ziur zaude \"{displayName}\" elkarrizketako mezu guztiak ezabatu nahi dituzula?", + "Error while clearing chat history" : "Errorea txataren historia garbitzen", + "Be careful, these actions cannot be undone." : "Kontuz ibili, ekintza hauek ezin dira desegin.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Elkarrizketa uzten denean, elkarrizketa itxi batera berriro sartzeko, gonbidapen bat behar da. Elkarrizketa ireki batean edozein unetan sar daiteke berriro.", + "Permanently delete this conversation." : "Betirako ezabatu elkarrizketa hau.", + "Delete chat messages" : "Ezabatu txateko mezuak", + "Permanently delete all the messages in this conversation." : "Ezabatu betirako elkarrizketa honen mezu guztiak.", + "_%n hour_::_%n hours_" : ["%nordu","%n"], + "_%n day_::_%n days_" : ["egun %n","%n egun"], + "_%n week_::_%n weeks_" : ["aste %n","%n aste"], + "Custom expiration time" : "Iraungitze denbora pertsonalizatua", + "Message expiration disabled" : "Mezua iraungitzea desgaituta dago", + "Message expiration set: {duration}" : "Mezuaren iraungitze ezarria: {duration}", + "Error when trying to set message expiration" : "Errore bat gertatu da mezu-iraungipena ezartzen saiatzean", + "Message expiration" : "Mezuen iraungitzea", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Txat-mezuak denbora jakin baten ondoren iraungi daitezke. Oharra: txatean partekatutako fitxategiak ez dira jabearentzat ezabatuko, baina ez dira gehiago elkarrizketan partekatuko.", + "Set message expiration" : "Ezarri mezuaren iraungitzea", + "Current message expiration" : "Uneko mezuaren iraungitzea", + "Guest access" : "Gonbidatuen sarbidea", + "Allow guests to join this conversation via link" : "Onartu gonbidatuei elkarrizketa honetan esteka bidez sartzea", + "Password protection" : "Pasahitz bidezko babesa", + "Set a password" : "Ezarri pasahitz bat", + "Change password" : "Pasahitza aldatu", + "Enter new password" : "Sartu pasahitz berria", + "Save password" : "Gorde pasahitza", + "Copy password" : "Kopiatu pasahitza", + "Guests are allowed to join this conversation via link" : "Gonbidatuek baimena dute elkarrizketa honetan sartzeko esteka bidez", + "Guests are not allowed to join this conversation" : "Gonbidatuek ezin dute elkarrizketa honetan sartu esteka bidez", + "Resend invitations" : "Birbidali gonbidapenak", + "This conversation is open to both registered users and users created with the Guests app" : "Elkarrizketa hau irekita dago bai erregistraturiko erabiltzaileentzat eta baita Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat ere", + "You opened the conversation to both registered users and users created with the Guests app" : "Elkarrizketa ireki duzu bai erregistraturiko erabiltzaileentzat eta baita Gonbidatuak aplikazioaren bidez sorturiko erabiltzaileentzat ere", + "Error occurred when opening or limiting the conversation" : "Errorea gertatu da elkarrizketa mugatu edo irekitzean", + "Open conversation to registered users, showing it in search results" : "Ireki elkarrizketa erregistratutako erabiltzaileei, bilaketen emaitzetan erakutsiaz.", + "Also open to users created with the Guests app" : "Irekita dago baita ere Gonbidatuak aplikazioak sorturiko erabiltzaileentzat", + "Open conversation" : "Ireki elkarrizketa", + "Invalid language" : "Hizkuntza baliogabea", + "Start time: {date}" : "Hasiera-ordua: {date}", + "Start time has been updated" : "Hasiera-data aldatu da", + "Error occurred while updating start time" : "Errorea gertatu da hasiera ordua eguneratzean", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ataria gaitzean uneko deiko ez-moderatzaileak kanporatuko dira.", + "Enable lobby, restricting the conversation to moderators" : "Gaitu ataria, elkarrizketa moderatzaileetara murriztuz", + "Meeting start time" : "Bileraren hasiera-ordua", + "Start time (optional)" : "Hasiera-ordua (hautazkoa)", + "Import email participants" : "Inportatu e-postako partaideak", + "Poll drafts" : "Galdeketa zirriborroak", + "Browse poll drafts" : "Arakatu galdeketa-zirriborroak", + "Error occurred when locking the conversation" : "Errorea gertatu da elkarrizketa blokeatzean", + "Error occurred when unlocking the conversation" : "Errorea gertatu da elkarrizketa desblokeatzean", + "Lock conversation" : "Blokeatu elkarrizketa", + "This will also terminate the ongoing call." : "Honek hasita dagoen deia ere bukatuko du.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blokeatu elkarrizketa edonork mezuak idatzi edo deiak egitea ekiditeko", + "Edit" : "Editatu", + "More information" : "Informazio gehiago", + "Delete" : "Ezabatu", + "Add new bridged channel to current conversation" : "Gehitu zubidun kanal berria uneko elkarrizketari", + "unknown state" : "egoera ezezaguna", + "running" : "Exekutatzen", + "not running, check Matterbridge log" : "ez dabil, egiaztatu Matterbridge erregistroa", + "not running" : "Ez da exekutatzen ari", + "Bridge saved" : "Zubia ondo gorde da", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Berehalako mezularitza sistema ugaritako kanalen artean zubiak ezar ditzakezu Matterbridge erabiliz.", + "More info on Matterbridge" : "Informazio gehiago Matterbridge-en", + "Messaging systems" : "Mezularitza sistema", + "Enable bridge" : "Gaitu zubia", + "Show Matterbridge log" : "Erakutsi Matterbridge erregistroa", + "Log content" : "Log edukia", + "Allow participants to mention @all" : "Baimendu parte-hartzaileek @all aipatu dezaten", + "Mention permissions" : "Aipatze-baimenak", + "Notifications" : "Jakinarazpenak", + "Notify about calls in this conversation" : "Jakinarazi elkarrizketa honen deiei buruz", + "Important conversation" : "Elkarrizketa garrantzitsua", + "Recording Consent" : "Grabatzeko baimena", + "Require recording consent before joining call in this conversation" : "Eskatu grabatzeko baimena elkarrizketa honetako deian sartu aurretik", + "Recording consent is required for all calls" : "Dei guztietan grabatzeko baimena behar da", + "SIP dial-in is now possible without PIN requirement" : "SIP markatzea posible da orain PIN baldintzarik gabe", + "SIP dial-in is now enabled" : "SIP markatzea gaituta dago", + "SIP dial-in is now disabled" : "SIP markatzea desgaituta dago", + "Error occurred when enabling SIP dial-in" : "Errorea gertatu da SIP markatzea gaitzean", + "Error occurred when disabling SIP dial-in" : "Errorea gertatu da SIP markatzea desgaitzean", + "Phone and SIP dial-in" : "Telefonoa eta SIP markatzea", + "Enable phone and SIP dial-in" : "Gaitu telefonoa eta SIP markatzea", + "Allow to dial-in without a PIN" : "Baimendu PINik gabe deitzeko", + "Join" : "Batu", + "Error while creating the conversation" : "Errorea elkarrizketa sortzean", + "Create a new conversation" : "Sortu elkarrizketa berri bat", + "Join open conversations" : "Sartu elkarrizketa irekietara", + "Unread mentions" : "Irakurri gabeko aipamenak", + "Create conversation" : "Sortu elkarrizketa", + "Enter your name" : "Sartu zure izena", + "Submit name and join" : "Bidali izena eta sartu", + "Log in" : "Izena eman", + "Import a file" : "Inportatu fitxategi bat", + "Browse" : "Arakatu", + "This might take a moment" : "Momentu bat beharko da", + "Send invitations" : "Bidali gonbidapenak", + "Mark as read" : "Markatu irakurri gisa", + "Mark as unread" : "Markatu ez irakurri gisa", + "Remove from favorites" : "Kendu gogokoetatik", + "Add to favorites" : "Gehitu gogokoetara", + "Unarchive conversation" : "Desartxibatu elkarrizketa", + "You need to promote a new moderator before you can leave the conversation." : "Moderatzaile berri bat izendatu behar duzu elkarrizketa utzi ahal izateko.", + "Conversation actions" : "Elkarrizketa ekintzak", + "Notify about calls" : "Jakinarazi deiei buruz", + "Pending invitations" : "Bidaltzeko gonbidapenak", + "Decline invitation" : "Bazteztu gonbidapena", + "Accept invitation" : "Onartu gonbidapena", + "No pending invitations" : "Ez duzu gonbidapenik zain", + "Home" : "Etxea", + "Unread" : "Irakurri gabe", + "Alphabetically" : "Alfabetikoki", + "No matches found" : "Ez dira emaitzarik aurkitu", + "No conversations found" : "Ez da elkarrizketarik aurkitu", + "An error occurred while performing the search" : "Errore bat gertatu da bilaketa egitean", + "Conversation list" : "Elkarrizketa zerrenda", + "Unread messages" : "Irakurri gabeko mezuak", + "Clear filters" : "Garbitu iragazkiak", + "New personal note" : "Nota pertsonal berria", + "Back to conversations" : "Itzuli elkarrizketetara", + "Archived conversations" : "Artxibatutako elkarrizketak", + "Clear filter" : "Garbitu iragazkia", + "App settings" : "Aplikazioaren ezarpenak", + "Users" : "Erabiltzaileak", + "Groups" : "Taldeak", + "Teams" : "Lantaldeak", + "Federated users" : "Erabiltzaile federatuak", + "New private conversation" : "Elkarrizketa pribatu berria", + "Other sources" : "Beste iturburuak", + "Open conversations" : "Ireki elkarrizketak", + "No search results" : "Ez dago bilaketaren emaitzarik", + "Users, groups and teams" : "Erabiltzaileak, taldeak eta lantaldeak", + "Users and groups" : "Erabiltzaileak eta taldeak", + "Users and teams" : "Erabiltzaileak eta lantaldeak", + "Groups and teams" : "Taldeak eta lantaldeak", + "New group conversation" : "Talde elkarrizketa berria", + "The meeting will start soon" : "Bilera laster hasiko da", + "This meeting is scheduled for {startTime}" : "Bilera hau {startTime}-rako programatuta dago", + "You are currently waiting in the lobby" : "Une honetan atondoan itxaroten ari zara", + "Select microphone" : "Hautatu mikrofonoa", + "No microphone available" : "Ez dago mikrofonorik eskuragarri", + "Select camera" : "Hautatu kamera", + "No camera available" : "Ez dago kamerarik eskuragarri", + "Select a device" : "Hautatu gailu bat", + "Playing …" : "Erreproduzitzen ...", + "Test speakers" : "Probatu bozgorailuak", + "Test" : "Proba", + "Devices" : "Gailuak", + "Backgrounds" : "Atzeko planoak", + "No audio" : "Audiorik ez", + "No camera" : "Kamerarik ez", + "Calls are not supported in your browser" : "Deiak ez dira onartzen zure nabigatzailean", + "Access to microphone is only possible with HTTPS" : "Mikrofonoa atzitzeko modu bakarra HTTPS bidez da", + "Access to microphone was denied" : "Mikrofonora sarbidea ukatua da", + "Error while accessing microphone" : "Errorea kamera atzitzean", + "Access to camera is only possible with HTTPS" : "Kamera atzitzeko modu bakarra HTTPS bidez da", + "The call might be recorded." : "Baliteke deia grabatzea.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Baliteke grabazioan zure ahotsa, kamerako bideoa eta pantaila partekatzea. Zure baimena beharrezkoa da deian sartu aurretik.", + "Apply settings" : "Aplikatu ezarpenak", + "Select a file" : "Hautatu fitxategi bat", + "Invalid path selected" : "Bide baliogabea hautatuta", + "Blur" : "Lausotu", + "Upload" : "Igo", + "Files" : "Fitxategiak", + "(editing)" : "(editatzen)", + "(edited)" : "(editatuta)", + "The message has expired or has been deleted" : "Mezua iraungi egin da edo ezabatu egin da", + "Cancel quote" : "Utzi eskaintza", + "24 hours" : "24 ordu", + "7 days" : "7 egun", + "Clear reminder – {timeLocale}" : "Garbitu gogorarazpena – {timeLocale}", + "Edited by {actor}" : "{actor}-(e)k editatuta", + "A reminder was successfully removed" : "Gogorarazpena ondo ezabatu da", + "Error occurred when removing a reminder" : "Errorea gertatu da gogorarazpena ezabatzean", + "A reminder was successfully set at {datetime}" : "Gogorarazpena ondo ezarri da {datetime}(e)rako", + "Error occurred when creating a reminder" : "Errorea gertatu da gogorarazpena sortzean", + "Add a reaction to this message" : "Gehitu erreakzioa mezu honi", + "Reply" : "Erantzun", + "More actions" : "Ekintza gehiago", + "Set reminder" : "Ezarri gogorarazpena", + "Reply privately" : "Erantzun pribatuki", + "Edit message" : "Editatu mezua", + "Copy message link" : "Kopiatu mezuaren esteka", + "Go to file" : "Joan fitxategira", + "Download file" : "Deskargatu fitxategia", + "Forward message" : "Birbidali mezua", + "Translate" : "Itzuli", + "Set custom reminder" : "Ezarri gogorarazpen pertsonalizatua", + "Close reactions menu" : "Itxi erreakzio menua", + "React with {emoji}" : "Erreakzionatu {emoji}-(r)ekin", + "React with another emoji" : "Erreakzionatu beste emoji batekin", + "Choose a conversation to forward the selected message." : "Hautatu elkarrizketa bat hurrengo mezua birbidaltzeko.", + "Error while forwarding message" : "Errorea mezua birbidaltzen", + "The message has been forwarded to {selectedConversationName}" : "Mezua {selectedConversationName}(e)ra birbidali da", + "Dismiss" : "Baztertu", + "Go to conversation" : "Joan elkarrizketara", + "Detect language" : "Detektatu hizkuntza", + "The message could not be translated" : "Ezin izan da mezu hau itzuli", + "Translation copied to clipboard" : "Itzulpena arbelera kopiatu da", + "Translation could not be copied" : "Ezin izan da itzulpena kopiatu", + "Translate message" : "Itzuli mezua", + "Translate from" : "Itzuli honetatik", + "Translate to" : "Itzuli honetara", + "Translating" : "Itzultzen", + "Copy translated text" : "Kopiatu itzulitako testua", + "Send now" : "Bidali orain", + "Message read by everyone who shares their reading status" : "Irakurtze-egoera partekatzen duten guztiek irakurri dute mezua", + "Message sent" : "Mezua bidalita", + "Sent without notification" : "Jakinarazpenik gabe bidalita", + "Deleting message" : "Mezua ezabatzen", + "Message deleted successfully" : "Mezua ondo ezabatu da", + "Message could not be deleted because it is too old" : "Mezua ezin izan da ezabatu zaharregia delako", + "Only normal chat messages can be deleted" : "Txat mezu normalak soilik ezabatu daitezke", + "An error occurred while deleting the message" : "Errore bat gertatu da mezua ezabatzean", + "Your browser does not support playing audio files" : "Zure nabigatzaileak ez du audio fitxategiak erreproduzitzeko euskarririk", + "Contact" : "Kontaktua", + "{stack} in {board}" : "{stack} {board}-(e)n", + "Deck Card" : "Deck txartela", + "Remove {fileName}" : "Kendu {fileName}", + "Open this location in OpenStreetMap" : "Ireki kokaleku hau OpenStreetMap-en", + "Sending message" : "Mezua bidaltzen", + "Failed to send the message. Click to try again" : "Mezua bidaltzeak huts egin du. Egin klik berriro saiatzeko", + "Not enough free space to upload file" : "Ez dago nahikoa leku librerik fitxategia igotzeko", + "You cannot send messages to this conversation at the moment" : "Une honetan ezin duzu mezurik bidali elkarrizketa honetara", + "_%n vote_::_%n votes_" : ["Boto %n","%n boto"], + "Delete poll draft" : "Ezabatu galdeketaren zirriborroa", + "Open poll" : "Galdeketa irekia", + "See results" : "Ikusi emaitzak", + "Reactions" : "Erreakzioak", + "No permission to post reactions in this conversation" : "Ez dago baimenik elkarrizketa honetan erreakzioak argitaratzeko", + "and {participant}" : "eta {participant}", + "Show all reactions" : "Erakutsi erreakzio guztiak", + "Add more reactions" : "Gehitu erreakzio gehiago", + "No messages" : "Mezurik ez", + "All messages have expired or have been deleted." : "Mezu guztiak iraungita daude edo ezabatuak izan dira.", + "Unpin" : "Kendu aingura", + "Cancel search" : "Utzi bilaketa", + "Create a new group conversation" : "Sortu talde-elkarrizketa berria", + "Add participants" : "Gehitu parte-hartzaileak", + "Conversation visibility" : "Elkarrizketaren ikusgarritasuna", + "Allow guests to join via link" : "Baimendu gonbidatuak esteka bidez batzea", + "Enter password" : "Sartu pasahitza", + "This conversation has been locked" : "Elkarrizketa hau blokeatu da", + "No permission to post messages in this conversation" : "Ez duzu baimenik mezuak argitaratzeko elkarrizketa honetan", + "Joining conversation …" : "Elkarrizketara batzen ...", + "Send message silently" : "Bidali mezua modu isilean", + "Send message" : "Bidali mezua", + "Send without notification" : "Bidali jakinarazpenik gabe", + "File to share" : "Partekatuko den fitxategia", + "Add emoji" : "Gehitu emojia", + "Send later" : "Bidali geroago", + "Cancel editing" : "Utzi editatzeari", + "Share from {nextcloud}" : "Partekatu {nextcloud} bidez", + "Share from Files" : "Partekatu Fitxategiak-etik", + "Share files to the conversation" : "Partekatu fitxategiak elkarrizketan", + "Upload from device" : "Igo gailutik", + "Create new poll" : "Sortu inkesta berria", + "Smart picker" : "Hautatzaile adimenduna", + "Record voice message" : "Grabatu ahots mezua", + "End recording and send" : "Amaitu grabazioa eta bidali", + "Dismiss recording" : "Baztertu grabazioa", + "Access to the microphone was denied" : "Mikrofonoa atzitzeko baimena ukatu da", + "Microphone either not available or disabled in settings" : "Mikrofonoa ezin da atzitu edo desgaituta dago ezarpenetan", + "Error while recording audio" : "Errorea audioa grabatzean", + "New file" : "Fitxategi berria", + "Blank" : "Hutsik", + "Error while creating file" : "Errorea fitxategia sortzen", + "Create and share a new file" : "Sortu eta partekatu fitxategi berri bat", + "Name of the new file" : "Fitxategiaren izen berria", + "Create file" : "Sortu fitxategia", + "Someone is typing …" : "Norbait idazten ari da ...", + "{user1} is typing …" : "{user1} idazten ari da …", + "{user1} and {user2} are typing …" : "{user1} eta {user2} idazten ari dira …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} eta {user3} idazten ari dira …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} eta beste %n idazten ari dira …","{user1}, {user2}, {user3} eta beste %n idazten ari dira …"], + "Add more files" : "Gehitu fitxategi gehiago", + "Send" : "Bidali", + "In this conversation {user} can:" : "Elkarrizketa honetan {user} ekintza hauek egin ditzake:", + "Edit default permissions for participants in {conversationName}" : "Editatu lehenetsitako baimenak {conversationName} elkarrizketako parte-hartzaileentzat", + "Start a call" : "Hasi dei bat", + "Skip the lobby" : "Saltatu ataria", + "Can post messages and reactions" : "Mezuak eta erreakzioak bidal daitezke", + "Enable the microphone" : "Gaitu mikrofonoa", + "Enable the camera" : "Gaitu kamera", + "Share the screen" : "Partekatu pantaila", + "Update permissions" : "Eguneratu baimenak", + "Updating permissions" : "Baimenak eguneratzen", + "No poll drafts" : "Ez dago galdeketa zirriborrorik", + "Create poll" : "Sortu galdeketa", + "Question" : "Galdera", + "Ask a question" : "Egin galdera bat", + "Answers" : "Erantzunak", + "Answer {option}" : "Galdera (aukera)", + "Delete poll option" : "Ezabatu galdeketaren aukera", + "Add answer" : "Gehitu erantzuna", + "Settings" : "Ezarpenak", + "Anonymous poll" : "Galdeketa anonimoa", + "Multiple answers" : "Erantzun anitz", + "Save as draft" : "Gorde zirriborro bezala", + "You voted for this option" : "Aukera hau bozkatu duzu", + "End poll" : "Amaitu galdeketa", + "Change your vote" : "Aldatu zure botoa", + "Results" : "Emaitzak", + "Voted participants" : "Botoa eman duten parte-hartzaileak", + "Send a message to \"{roomName}\"" : "Bidali mezu bat \"{roomName}\"-(e)ra", + "Hide list of participants" : "Ezkutatu parte-hartzaile zerrenda", + "Show list of participants" : "Erakutsi parte-hartzaile zerrenda", + "The message was sent to \"{roomName}\"" : "Mezua \"{roomName}\"-(e)ra bidali da", + "Send message to room" : "Bidali mezua gelara", + "Back to main room" : "Itzuli gela nagusira", + "Back to your room" : "Itzuli zure gelara", + "Message all rooms" : "Bidali mezua gela guztietara", + "Start session" : "Hasi saioa", + "Stop session" : "Gelditu saioa", + "The message was sent to all breakout rooms" : "Mezua taldekako gela guztietara bidali da", + "Send a message to all breakout rooms" : "Bidali mezu bat taldekako gela guztietara", + "Disable lobby" : "Desgaitu ataria", + "Settings for participant \"{user}\"" : "\"{user}\" parte-hartzailearen ezarpenak", + "Participant \"{user}\"" : "\"{user}\" parte-hartzailea", + "moderator" : "moderatzailea", + "bot" : "bot", + "guest" : "gonbidatua", + "Ringing …" : "Komunikatzen ...", + "Call rejected" : "Deia baztertu da", + "{time} talking …" : "{time} hitz egiten ...", + "{time} talking time" : "{time} hitzegite-denbora", + "Raised their hand" : "Eskua jaso dute", + "Joined with video" : "Bideoarekin batuta", + "Joined via phone" : "Telefonoarekin batuta", + "Joined with audio" : "Audioarekin batuta", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Testuak {maxLength} karaktere baino txikiagoa edo berdina izan behar du. Uneko testuak {charactersCount} karaktere ditu.", + "Remove group and members" : "Kendu taldea eta kideak", + "Remove team and members" : "Kendu lantaldea eta kideak", + "Remove participant" : "Kendu parte-hartzailea", + "Notification was sent to {displayName}" : "{displayName}-(e)ri jakinarazpena bidali zaio", + "Could not send notification to {displayName}" : "Ezin izan da jakinarazpena bidali {displayName}-ra", + "Permissions granted to {displayName}" : "Baimenak emanda {displayName}(r)i", + "Could not modify permissions for {displayName}" : "Ezin izan dira {displayName}(r)en baimenak aldatu", + "Permissions removed for {displayName}" : "Baimenak kendu zaizkio {displayName}(r)i", + "Permissions set to default for {displayName}" : "Baimenak lehenetsira ezarri dira {displayName}-rentzat", + "Phone number could not be muted" : "Ezin izan da telefono zenbakia isilarazi", + "Phone number could not be unmuted" : "Ezin izan da telefono zenbakia gaitu", + "in the lobby" : "atarian", + "Dial out phone" : "Telefonoa itzali", + "Hang up phone" : "Telefonoa eskegi", + "Move to conversation" : "Mugitu elkarrizketara", + "Dial-in PIN" : "Markatzen PINa", + "Demote from moderator" : "Kendu moderatzaile rola", + "Promote to moderator" : "Egin moderatzaile", + "Resend invitation" : "Birbidali gonbidapena", + "Send call notification" : "Bidali dei jakinarazpena", + "Unmute phone number" : "Telefono zenbakia gaitu", + "Mute phone number" : "Mututu telefono zenbakia", + "Copy phone number" : "Kopiatu telefono zenbakia", + "Reset custom permissions" : "Berezarri baimen pertsonalizatuak", + "Grant all permissions" : "Eman baimen guztiak", + "Remove all permissions" : "Kendu baimen guztiak", + "Remove" : "Kendu", + "Permissions modified for {displayName}" : "Baimenak aldatu dira {displayName}(r)entzat", + "Add users, groups or teams" : "Gehitu erabiltzaileak, taldeak edo lantaldeak", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Gehitu erabiltzaileak edo lantaldeak", + "Add users" : "Gehitu erabiltzailea", + "Add groups or teams" : "Gehitu taldeak edo lantaldeak", + "Add groups" : "Gehitu taldeak", + "Add teams" : "Gehitu lantaldeak", + "Add other sources" : "Gehitu beste iturburuak", + "Add emails" : "Gehitu helbide elektronikoa", + "Integrations" : "Integrazioak", + "Add federated users" : "Gehitu erabiltzaile federatuak", + "Searching …" : "Bilatzen …", + "Search for more users" : "Bilatu erabiltzaile gehiago", + "Search or add participants" : "Bilatu edo gehitu parte-hartzaileak", + "Invitation was sent to {actorId}" : "{actorId}-(e)ri gonbidapena bidali zaio", + "An error occurred while adding the participants" : "Errore bat gertatu da parte-hartzaileak gehitzean", + "Participants" : "Parte-hartzaileak", + "Participants ({count})" : "Parte-hartzaileak ({count})", + "Open chat" : "Ireki txata", + "You have new unread messages in the chat." : "Irakurri gabeko mezu berriak dauzkazu txatean.", + "You have been mentioned in the chat." : "Txatean aipatu egin zaituzte.", + "Chat" : "Txata", + "Details" : "Xehetasunak", + "Shared items" : "Partekatutako elementuak", + "Until" : "Arte", + "No results found" : "Ez da emaitzarik aurkitu", + "Load more results" : "Kargatu emaitza gehiago ", + "Projects" : "Proiektuak", + "No shared items" : "Ez dago partekatutako elementurik", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Esteka elkarrizketara", + "Search conversations or users" : "Bilatu elkarrizketak edo erabiltzaileak", + "Select conversation" : "Hautatu elkarrizketa", + "Phone numbers" : "Telefono zenbakiak", + "Display name: {name}" : "Pantaila-izena: {name}", + "Edit display name" : "Editatu erakutsiko den izena", + "Save name" : "Gorde izena", + "Error while saving sounds setting" : "Errorea soinu ezarpenak gordetzean", + "Play sounds when participants join or leave a call" : "Soinuak egin parte-hartzaileak deira etortzean edo joatean", + "Notification settings" : "Jakinarazpen-ezarpenak", + "Default language" : "Hizkuntza lehenetsia", + "Select location for attachments" : "Hautatu kokalekua eranskinentzat", + "Error while setting attachment folder" : "Errorea eranskinen karpeta ezartzean", + "Error while setting read status privacy" : "Errorea irakurtze-egoera pribatutasun ezarpenak konfiguratzean", + "Privacy" : "Pribatutasuna", + "Attachments folder" : "Eranskinen karpeta", + "Toggle full screen" : "Txandakatu pantaila osoa", + "Search" : "Bilatu", + "Focus the chat input" : "Fokuratu txat sarrera", + "Unfocus the chat input to use shortcuts" : "Utzi txat sarrera fokuratzeari lasterbideak erabiltzeko", + "Shortcuts while in a call" : "Lasterbideak deian zehar", + "Camera on and off" : "Kamera gaitu eta desgaitu", + "Microphone on and off" : "Mikrofonoa aktibatu eta desaktibatu", + "Raise or lower hand" : "Jaso edo jaitsi eskua", + "Push to talk or push to mute" : "Sakatu hitz egiteko edo mututzeko", + "Start call silently" : "Hasi deia modu isilean", + "Start call" : "Hasi deia", + "End call" : "Amaitu deia", + "You will be able to join the call only after a moderator starts it." : "Moderatzaile batek deia hasten duenean bakarrik batu ahalko zara.", + "End call for everyone" : "Amaitu deia denontzat", + "Starting the recording" : "Grabaketa hasten", + "Recording" : "Grabatzea", + "The call has been running for one hour." : "Deia ordubetez egon da martxan.", + "Cancel recording start" : "Utzi grabaketaren hasiera", + "Stop recording" : "Utzi grabaketa", + "Send a reaction" : "Bidali erreakzioa", + "React with {reaction}" : "Erreakzionatu {reaction}-(r)ekin", + "All tasks done!" : "Zeregin guztiak eginda!", + "You are not allowed to enable screensharing" : "Ez duzu baimenik pantaila partekatzea gaitzeko", + "No screensharing" : "Pantaila partekatzerik ez", + "Screensharing options" : "Pantaila partekatzeko aukerak", + "Enable screensharing" : "Gaitu pantaila partekatzea", + "Bad sent video and screen quality." : "Bidaltze bideo eta pantaila kalitate txarra.", + "Bad sent screen quality." : "Bidaltze pantaila kalitate txarra.", + "Bad sent video quality." : "Bidaltze bideo kalitate txarra.", + "Bad sent audio, video and screen quality." : "Bidaltze audio, bideo eta pantaila kalitate txarra.", + "Bad sent audio and screen quality." : "Bidaltze audio eta pantaila kalitate txarra.", + "Bad sent audio and video quality." : "Bidaltze audio eta bideo kalitate txarra.", + "Bad sent audio quality." : "Bidaltze audio kalitate txarra.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea edo bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Disable background blur" : "Desgaitu atzeko planoko lausotzea", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Zure internet konexioa lanpetuta dago eta baliteke beste partaideek zu ez ikustea. Egoera hobetzeko saiatu zure bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zure pantaila ez ikustea.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ez ikustea.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea edo bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure bideoa desgaitzen pantaila partekatzen ari zarenean.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo zure pantaila ikusteko zailtasunak izatea. Egoera hobetzeko saiatu pantaila partekatu gabe aritzen.", + "Disable screenshare" : "Utzi pantaila partekatzeari", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure atzeko planoko lausotzea desgaitzen zure bideoan.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertu edo ikusteko zailtasunak izatea. Egoera hobetzeko saiatu zure bideoa desgaitzen.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Zure internet konexioa edo ordenagailua lanpetuta daude eta baliteke beste partaideek zu ulertzeko zailtasunak izatea.", + "Screen sharing is not supported by your browser." : "Zure nabigatzaileak ez du pantaila partekatzea onartzen.", + "Screen sharing requires the page to be loaded through HTTPS." : "Pantaila partekatu ahal izateko orria HTTPS bidez kargatu behar da.", + "Screensharing requires the page to be loaded through HTTPS." : "Pantaila partekatu ahal izateko orria HTTPS bidez kargatu behar da.", + "An error occurred while starting screensharing." : "Pantaila partekatzen hastean errore bat gertatu da.", + "Show your screen" : "Erakutsi zure pantaila", + "Stop screensharing" : "Utzi pantaila partekatzeari", + "Mute others" : "Mututu besteak", + "Start recording" : "Hasi grabatzen", + "Set up breakout rooms" : "Konfiguratu taldekako gelak", + "Open Calendar" : "Ireki egutegia", + "Remove participant {name}" : "Kendu {name} parte-hartzailea", + "Open dialpad" : "Ireki markatze-teklatua", + "Select a region" : "Hautatu eskualde bat", + "Search …" : "Bilatu …", + "Message without mention" : "Aipamenik gabeko mezua", + "Mention myself" : "Aipatu ni", + "Mention everyone" : "Aipatu denak", + "Select a conversation" : "Hautatu elkarrizketa bat", + "Select a mode" : "Hautatu modu bat", + "The conversation does not exist" : "Elkarrizketa ez da existitzen", + "Join a conversation or start a new one!" : "Batu elkarrizketa batera edo hasi berri bat!", + "Duplicate session" : "Bikoiztu saioa", + "Join a conversation or start a new one" : "Batu elkarrizketa batera edo hasi berri bat", + "Nextcloud URL" : "Nextcloud URLa", + "Nextcloud user" : "Nextcloud erabiltzailea", + "User password" : "Erabiltzaile pasahitza", + "Talk conversation" : "Talk elkarrizketa", + "Skip TLS verification" : "Ez egiaztatu TLS", + "Matrix server URL" : "Matrix zerbitzariaren URLa", + "User" : "Erabiltzailea", + "Matrix channel" : "Matrix kanala", + "Mattermost server URL" : "Mattermost zerbitzariaren URLa", + "Mattermost user" : "Mattermost erabiltzailea", + "Team name" : "Lantaldearen izena", + "Channel name" : "Kanalaren izena", + "Rocket.Chat server URL" : "Rocket.Chat zerbitzariraren URLa", + "User name or email address" : "Erabiltzaile-izena edo e-posta helbidea", + "Rocket.Chat channel" : "Rocket.Chat kanala", + "Zulip server URL" : "Zulip zerbitzariaren URLa", + "Bot user name" : "Bot-aren erabiltzaile izena", + "Bot API key" : "Bot-aren API gakoa", + "Zulip channel" : "Zulip kanala", + "API token" : "API tokena", + "Slack channel" : "Slack kanala", + "Server ID or name" : "Zerbitzariaren IDa edo izena", + "Channel" : "Kanala", + "Login" : "Hasi saioa", + "Chat ID" : "Txataren IDa", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC zerbitzariaren URLa (adib. chat.freenode.net:6667)", + "Nickname" : "Ezizena", + "Connection password" : "Konexio pasahitza", + "IRC channel" : "IRC kanala", + "Channel password" : "Kanalaren pasahitza", + "NickServ nickname" : "NickServ ezizena", + "NickServ password" : "NickServ pasahitza", + "Use TLS" : "Erabili TLS", + "Use SASL" : "Erabili SASL", + "Tenant ID" : "Tenant IDa", + "Client ID" : "Bezeroaren IDa", + "Team ID" : "Lantaldearen IDa", + "Thread ID" : "Hariaren IDa", + "XMPP/Jabber server URL" : "XMPP/Jabber zerbitzariaren URLa", + "MUC server URL" : "MUC zerbitzariaren URLa", + "Jabber ID" : "Jabber IDa", + "Media" : "Media", + "Polls" : "Bozketak", + "Deck cards" : "Deck txartelak", + "Voice messages" : "Ahots-mezuak", + "Locations" : "Kokapenak", + "Call recordings" : "Deien grabaketak", + "Audio" : "Audioa", + "Show all media" : "Erakutsi multimedia guztia", + "Show all files" : "Erakustsi fitxategi guztiak", + "Show all polls" : "Erakutsi galdeketa guztiak", + "Show all deck cards" : "Erakutsi txartel sorta guztiak", + "Show all voice messages" : "Erakutsi ahots-mezu guztiak", + "Show all locations" : "Erakutsi kokaleku guztiak", + "Show all audio" : "Erakutsi audio guztia", + "Show all other" : "Erakutsi beste guztiak", + "Group" : "Taldea", + "Team" : "Lantaldea", + "You reconnected to the call" : "Deira berriro konektatu zara", + "You added {user0} and {user1}" : "{user0} eta {user1} gehitu dituzu", + "An administrator added you and {user0}" : "Administratzaile batek zu eta {user0} gehitu zaituzte", + "An administrator added {user0} and {user1}" : "Administratzaile batek {user0} eta {user1} gehitu ditu", + "You removed {user0} and {user1}" : "{user0} eta {user1} kendu dituzu", + "An administrator removed you and {user0}" : "Administratzaile batek zu eta {user0} kendu zaituzte", + "An administrator removed {user0} and {user1}" : "Administratzaile batek {user0} eta {user1} kendu ditu", + "You promoted {user0} and {user1} to moderators" : "{user0} eta {user1} moderatzaile bihurtu dituzu", + "An administrator promoted you and {user0} to moderators" : "Administratzaile batek zu eta {user0} moderatzaile egin zaituzte", + "An administrator promoted {user0} and {user1} to moderators" : "Administratzaile batek {user0} eta {user1} moderatzaile egin ditu", + "You demoted {user0} and {user1} from moderators" : "{user0} eta {user1} moderatzaileetatik kendu dituzu", + "An administrator demoted you and {user0} from moderators" : "Administratzaile batek zu eta {user0} moderatzaileetatik kendu zaituzte", + "An administrator demoted {user0} and {user1} from moderators" : "Administratzaile batek {user0} eta {user1} moderatzaileetatik kendu ditu", + "You: {lastMessage}" : "Zu: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(zuk editatuta)", + "(edited by {moderator})" : "({moderator}-(e)k editatuta)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Elkarrizketa batera batu nahi duzu aldi berean saioa aktibaturik beste leiho edo gailu batean. Nextcloud Talkek ez du hau onartzen une honetan. Zer egin nahi duzu?", + "Leave this page" : "Orri hau utzi", + "Join here" : "Hemen bat egin", + "An error occurred while posting deck card to conversation" : "Errore bat gertatu da elkarrizketan deck txartela argitaratzean", + "Post to a conversation" : "Argitaratu elkarrizketa batera", + "Post to conversation" : "Argitaratu elkarrizketan", + "The recording failed. Please contact your administrator." : "Utzi grabaketaren hasiera", + "An error occurred while posting location to conversation" : "Errorea gertatu da elkarrizketara kokalekua bidaltzean", + "Share to a conversation" : "Partekatu elkarrizketa batera", + "Share to conversation" : "Partekatu elkarrizketara", + "In conversation" : "Elkarrizketan", + "Error while clearing conversation history" : "Errorea elkarrizketaren historia garbitzen", + "Error occurred while allowing guests" : "Errorea gertatu da gonbidatuak baimentzean", + "Error occurred while disallowing guests" : "Errorea gertatu da gonbidatuei baimena kentzean", + "Error occurred when restricting the conversation to moderator" : "Errorea gertatu da elkarrizketari moderatzaile muga jartzean", + "Error occurred when opening the conversation to everyone" : "Errorea gertatu da elkarrizketa edonorentzat irekitzean", + "Conversation password has been saved" : "Elkarrizketaren pasahitza gorde da", + "Conversation password has been removed" : "Elkarrizketaren pasahitza kendu da", + "Error occurred while saving conversation password" : "Errore bat gertatu da elkarrizketaren pasahitza gordetzean", + "Call recording is starting." : "Deiaren grabaketa hasten ari da.", + "Conversation picture set" : "Elkarrizketa-irudia ezarrita", + "Conversation picture deleted" : "Elkarrizketa-irudia ezabatuta", + "Could not delete the conversation picture" : "Ezin izan da elkarrizketaren argazkia ezabatu", + "Could not post message: {errorMessage}" : "Ezin izan da mezua argitaratu: {errorMessage}", + "An error occurred while fetching the participants" : "Errore bat gertatu da parte-hartzaileak eskuratzean", + "Could not send invitation to {actorId}" : "Ezin izan da gonbidapena {actorId}(r)i bidali", + "Invitations sent" : "Gonbidapenak bidalita", + "Error occurred when sending invitations" : "Errorea gonbidapenak bidaltzean", + "{guest} (guest)" : "{guest} (gonbidatua)", + "An error occurred while submitting your vote" : "Errore bat gertatu da botoa bidaltzean", + "An error occurred while ending the poll" : "Errore bat gertatu da galdeketa bukatzean", + "Failed to add reaction" : "Huts egin du erreakzioa gehitzean", + "Failed to remove reaction" : "Huts egin du erreakzioa kentzean", + "Error while uploading file \"{fileName}\"" : "Errorea \"{fileName}\" fitxategia igotzerakoan", + "Not enough free space to upload file \"{fileName}\"" : "Ez dago nahikoa leku librerik \"{fileName}\" fitxategia igotzeko", + "You are not allowed to share files" : "Ez duzu baimenik fitxategiak partekatzeko", + "Error while sharing file" : "Errorea fitxategia partekatzean", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talkek ez dauka erabateko euskarria erabiltzen ari zaren nabigatzailearentzat. Erabili Mozilla Firefox, Microsoft Edge, Google Chrome, Opera edo Apple Safari nabigatzaileen bertsio berriena.", + "_In %n hour_::_In %n hours_" : ["ordu %n barru","%n ordu barru"], + "_%n minute _::_%n minutes_" : ["Minutu %n","%n minutu"], + "_In %n minute_::_In %n minutes_" : ["minutu %nean","%n minutu barru"], + "Later today – {timeLocale}" : "Beranduago gaur – {timeLocale}", + "Tomorrow – {timeLocale}" : "Bihar – {timeLocale}", + "This weekend – {timeLocale}" : "Hurrengo asteburua – {timeLocale}", + "Next week – {timeLocale}" : "Hurrengo astea – {timeLocale}", + "Message link copied to clipboard" : "Mezuaren esteka arbelera kopiatu da", + "Conversation link copied to clipboard" : "Elkarrizketaren esteka arbelera kopiatu da", + "The link could not be copied" : "Ezin izan da esteka kopiatu", + "Error while parsing a PROPFIND error" : "Errore bat gertatu da PROPFIND errore bat analizatzean", + "Lost connection to signaling server. Trying to reconnect." : "Konexioa galdu da seinalizazio zerbitzariarekin. Berriro konektatzen saiatzen.", + "Please reload the page." : "Mesedez birkargatu orria.", + "Do not disturb" : "Ez molestatu", + "Away" : "Kanpoan", + "Microphone {number}" : "{number} mikrofonoa", + "Camera {number}" : "{number} kamera", + "Speaker {number}" : "{number} bozgorailua", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Audioa desaktibatuta duzula hitz egiten ari zarela dirudi, aktibatu audioa besteek entzun zaitzaten", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ezin izan da konexioa ezarri partaide batekin gutxienez. Zure egoeran TURN zerbitzari bat beharrezkoa izan liteke. Eskatu zure administratzaileari horrelako bat konfiguratzeko {linkstart}this documentazio hau{linkend} erabiliz.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Hau uste baino denbora gehiago hartzen ari da. Multimedia baimenak emanda (edo ukatuta) daude jada? Hala bada, berrabiarazi zure nabigatzailea, audioa eta bideoa huts egiten ari baitira", + "Access to microphone & camera is only possible with HTTPS" : "Kamera eta mikrofonoak atzitzeko modu bakarra HTTPS bidez da", + "Please move your setup to HTTPS" : "Aldatu zure konfigurazioa HTTPSra", + "Access to microphone & camera was denied" : "Kamera eta mikrofonora sarbidea ukatu da", + "WebRTC is not supported in your browser" : "Zure nabigatzaileak ez du WebRTC onartzen", + "Please use a different browser like Firefox or Chrome" : "Beste nabigatzaile bat erabil ezazu: Firefox edo Chrome.", + "Error while accessing microphone & camera" : "Errorea mikrofonoa eta kamara atzitzean", + "%s Talk on your mobile devices" : "%s Hitz egin zure gailu mugikorretan", + "Join conversations at any time, anywhere, on any device." : "Batu elkarrizketetara edonoiz, edonondik, edozein gailutatik.", + "Android app" : "Android aplikazioa", + "iOS app" : "iOS aplikazioa", + "__language_name__" : "Euskara", + "Call summary (%s)" : "Deiaren laburpena (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Deiaren laburpen bot-ak deiaren ondoren laburpen mezu bat argitaratzen du partaide guztiak zerrendatu eta zereginak zehazten dituena", + "Tasks" : "Zereginak", + "Notes" : "Oharrak", + "Reports" : "Txostenak", + "Decisions" : "Erabakiak", + "Agenda" : "Agenda", + "Call summary" : "Deiaren laburpena", + "Call summary - {title}" : "Deiaren laburpena - {title}", + "Next meeting" : "Hurrengo bilera", + "Set reminder for later today" : "Ezarri gogorarazpena gaur beranduagorako", + "Set reminder for tomorrow" : "Ezarri gogorarazpena biharko", + "Set reminder for this weekend" : "Ezarri gogorarazpena asteburu honetarako", + "Set reminder for next week" : "Ezarri gogorarazpena hurrengo asterako", + "Generate summary" : "Sortu laburpena", + "Open poll • You voted already" : "Galdeketa irekia • Botoa dagoeneko eman duzu", + "Open poll • Click to vote" : "Galdeketa irekia・ Egin klik botoa emateko", + "Poll • Ended" : "Galdeketa ・ Bukatuta", + "Talk recording from {time} ({conversation})" : "Solasaldi grabazioa {time} -tik aurrera ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Galdeketaren emaitzak • %n boto","Galdeketaren emaitzak • %nboto"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Galdeketa irekia・Boto %n","Galdeketa irekia・%n boto"], + "Submit vote" : "Bidali botoa", + "Your privacy setting has been saved" : "Zure pribatutasun ezarpenak gorde dira", + "Failed to save sounds setting" : "Soinu ezarpenak gordetzeak huts egin du", + "Sounds setting saved" : "Soinu ezarpenak gordeta", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Elkarrizketara batu zara beste leiho edo gailu batean. Nextcloud Talkek ez du hau onartzen une honetan, beraz saioa itxi egin da." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/fa.js b/l10n/fa.js new file mode 100644 index 0000000..7b9836b --- /dev/null +++ b/l10n/fa.js @@ -0,0 +1,1534 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "مکالمه", + "(Duration %s)" : "(مدت زمان %s )", + "You attended a call with {user1}" : "شما در تماس تلفنی با {user1} شرکت کردید", + "_%n guest_::_%n guests_" : ["میهمان %n","میهمان ها %n"], + "You attended a call with {user1} and {user2}" : "شما در یک تماس با {user1} و {user2} حضور پیدا کردید", + "You attended a call with {user1}, {user2} and {user3}" : "شما در یک تماس با {user1} ، {user2} و {user3} شرکت کردید.", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "شما در یک تماس با {user1} ، {user2} و {user3} و {user4} شرکت کردید.", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "شما در یک تماس با {user1} ، {user2} ، {user3} ، {user4} و {user5} شرکت کردید.", + "_%n other_::_%n others_" : ["دیگر %n","دیگران %n"], + "{actor} invited you to {call}" : "{actor} شما را به {call} دعوت کرد", + "You were invited to a conversation or had a call" : "شما به یک مکالمه دعوت شده اید یا تماس گرفته اید", + "Other activities" : "سایر فعالیت ها", + "Talk" : "گفتگو", + "Guest" : "مهمان", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "اکنون می توان از Microsoft Edge و Safari برای شرکت در تماس های صوتی و تصویری استفاده کرد", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- اکنون می توانید با ارسال \"@all\" در گپ ، به همه شرکت کنندگان اطلاع دهید", + "- With the \"arrow-up\" key you can repost your last message" : "- با کلید \"جهت بالا\" می توانید آخرین پیام خود را دوباره ارسال کنید", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- - بحث اکنون می تواند دستوراتی داشته باشد ، \"/ help\" را به عنوان یک پیام چت ارسال کنید تا ببینید سرپرست شما برخی از آنها را پیکربندی کرده است یا خیر", + "- With projects you can create quick links between conversations, files and other items" : "- با پروژه ها می توانید پیوندهای سریع بین مکالمات ، پرونده ها و موارد دیگر ایجاد کنید", + "- You can now mention guests in the chat" : "- اکنون می توانید از مهمان ها در چت یاد کنید", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "Talk updates ✅" : "به روزرسانی های Talk✅ ", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} گفتگو را ایجاد کرد", + "You created the conversation" : "شما گفتگو را ایجاد کردید", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} این گفتگو را از \" %1$s \" به \"%2$s\" تغییر نام داد", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "شما این گفتگو را از \"%1$s \" به \"%2$s\" تغییر نام داد", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a call" : "شما یک تماس را شروع کردید", + "{actor} started a call" : "{actor} یک تماس را شروع کرد", + "Incoming call" : "تماس ورودی", + "{actor} joined the call" : "{actor} به تماس پیوست", + "You joined the call" : "شما به تماس پیوستید", + "{actor} left the call" : "{actor} تماس را ترک کرد", + "You left the call" : "شما تماس را ترک کردید", + "{actor} unlocked the conversation" : "{actor} مکالمه را باز کرد", + "You unlocked the conversation" : "شما مکالمه را باز کردید", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} مکالمه را قفل کرد", + "You locked the conversation" : "شما مکالمه را قفل کرد", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "The conversation is now open to everyone" : "اکنون این گفتگو برای همه باز است", + "{actor} opened the conversation to everyone" : "{actor} گفتگو را برای همه باز کرد", + "You opened the conversation to everyone" : "شما گفتگو را برای همه باز کردید", + "{actor} restricted the conversation to moderators" : "{actor} گفتگو را محدود به ناظران کرد", + "You restricted the conversation to moderators" : "شما گفتگو را محدود به ناظران کردید", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} مهمان مجاز است", + "You allowed guests" : "شما به مهمان ها اجازه دادید.", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} مهمانان مجاز نیستند", + "You disallowed guests" : "شما میهمانان را مجاز نکردید", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} یک رمزعبور تنظیم می کنید", + "You set a password" : "شما یک رمزعبور تنظیم می کنید", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} رمز عبور را حذف کرد", + "You removed the password" : "شما رمز عبور را حذف کردید", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} کاربر {user} را اضافه کرد", + "You joined the conversation" : "شما به گفتگو پیوستید", + "{actor} joined the conversation" : "{actor} به گفتگو پیوست", + "You added {user}" : "شما {user} را اضافه کردید", + "{actor} added you" : "{actor} شما را اضافه کرد", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "گفتگو را ترک کردید", + "{actor} left the conversation" : "{actor} گفتگو را ترک کرد", + "{actor} removed {user}" : "{actor} {user} را حذف کرد", + "You removed {user}" : "شما {user} را حذف کردید", + "{actor} removed you" : "{actor} شما را حذف کرد", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} promoted {user} to moderator" : "{actor} {user} را به عنوان ناظر تبلیغ کرد", + "You promoted {user} to moderator" : "شما {user} را به عنوان مجری تبلیغ کردید", + "{actor} promoted you to moderator" : "{actor} شما را به سمت مجری ارتقاء داد", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} {user} را از مجری دور کرد", + "You demoted {user} from moderator" : "شما {user} را از مجری خلع کردید", + "{actor} demoted you from moderator" : "{actor} شما را از مجری دور کرد", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} فایلی را به اشتراک گذاشت که دیگر در دسترس نیست", + "You shared a file which is no longer available" : "شما یک پرونده را به اشتراک گذاشتید که دیگر در دسترس نیست", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Administration" : "مدیریت", + "System" : "سیستم", + "%s (guest)" : "%s (مهمان)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "مکالمات صحبت کنید", + "Talk to %s" : "صحبت کردن %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "از سهمیه فضای ذخیره سازی فراتر رفت", + "File not found" : "فایل یافت نشد", + "File is not shared, or shared but not with the user" : "پرونده به اشتراک گذاشته نمی شود ، یا به اشتراک گذاشته اما با کاربر به اشتراک گذاشته نمی شود", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "No image file provided" : "No image file provided", + "File is too big" : "فایل خیلی بزرگ است", + "Invalid file provided" : "فایل داده‌شده نا معتبر است", + "Invalid image" : "عکس نامعتبر", + "Unknown filetype" : "نوع فایل ناشناخته", + "Talk mentions" : "Talk mentions", + "Say hi to your friends and colleagues!" : "به رفقا و هم‌قطاران‌تان سلام کنید!", + "No unread mentions" : "اشاره‌ی خوانده‌نشده‌ای نیست", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "برای مکالمه بنویسید", + "Writes event information into a conversation of your choice" : "اطلاعات رویداد را در گفتگوی مورد نظر شما می نویسد", + "Conversation invitation" : "Conversation invitation", + "Description" : "توضیحات", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Meeting" : "ملاقات", + "Password request: %s" : "Password request: %s", + "Private conversation" : "مکالمه خصوصی", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "رد کردن اعلان", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Accept" : "تایید", + "Decline" : "کاهش می یابد", + "New message" : "پیام جدید", + "Reminder" : "Reminder", + "Notification" : "آگاهی", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} شما را به یک گفتگو گروهی دعوت کرد: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "تنظیمات را باز کنید", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "error" : "خطا", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "پیش‌گزیده", + "Presentation" : "ارائه", + "Conversations" : "گفتگو", + "{user}" : "{user}", + "Messages" : "پیام ها", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "تصویر آواتار مربع نیست", + "Room {number}" : "Room {number}", + "Other" : "اعلان‌ها", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "این حساب کاربری ثبت نام نشده است.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Andorra" : "Andorra", + "United Arab Emirates" : "امارات متحده عربی", + "Afghanistan" : "افغانستان", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "آلبانی", + "Armenia" : "ارمنستان", + "Angola" : "آنگولا", + "Antarctica" : "Antarctica", + "Argentina" : "آرژانتین", + "American Samoa" : "American Samoa", + "Austria" : "استرالیا", + "Australia" : "استرالیا", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "آذربایجان", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "بنگلادش", + "Belgium" : "بلژیک", + "Burkina Faso" : "بورکینافاسو", + "Bulgaria" : "بلغارستان", + "Bahrain" : "Bahrain", + "Burundi" : "بوروندی", + "Benin" : "بنین", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "برزیل", + "Bahamas" : "باهاما", + "Bhutan" : "بوتان", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "بوتسوانا", + "Belarus" : "بلاروس", + "Belize" : "بلیز", + "Canada" : "کانادا", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "جمهوری آفریقای مرکزی", + "Congo" : "کنگو", + "Switzerland" : "سوئیس", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "شیلی", + "Cameroon" : "کامرون", + "China" : "چین", + "Colombia" : "کلومبیا", + "Costa Rica" : "کاستاریکا", + "Cuba" : "کوبا", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "قبرس", + "Czechia" : "Czechia", + "Germany" : "آلمان", + "Djibouti" : "جیبوتی", + "Denmark" : "دانمارک", + "Dominica" : "Dominica", + "Dominican Republic" : "جمهوری دومینیکن", + "Algeria" : "الجزایر", + "Ecuador" : "اکوادور", + "Estonia" : "استونی", + "Egypt" : "مصر", + "Western Sahara" : "Western Sahara", + "Eritrea" : "اریتره", + "Spain" : "اسپانیا", + "Ethiopia" : "اتیوپی", + "Finland" : "فنلاند", + "Fiji" : "فیجی", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "فرانسه", + "Gabon" : "گابن", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "جورجیا", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "غنا", + "Gibraltar" : "Gibraltar", + "Greenland" : "گرینلند", + "Gambia" : "گامبیا", + "Guinea" : "گینه", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "گینه استوایی", + "Greece" : "یونان", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "گواتمالا", + "Guam" : "Guam", + "Guinea-Bissau" : "گینه بیسائو", + "Guyana" : "گویان", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "هندوراس", + "Croatia" : "کرواسی", + "Haiti" : "هائیتی", + "Hungary" : "مجارستان", + "Indonesia" : "اندونزی", + "Ireland" : "ایرلند", + "Israel" : "اسرائیل", + "Isle of Man" : "Isle of Man", + "India" : "هند", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "عراق", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "ایسلند", + "Italy" : "ایتالیا", + "Jersey" : "Jersey", + "Jamaica" : "جامایکا", + "Jordan" : "جردن", + "Japan" : "ژاپن", + "Kenya" : "کنیا", + "Kyrgyzstan" : "قرقیزستان", + "Cambodia" : "کمبوج", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "کویت", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "قزاقستان", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "لبنان", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "سریلانکا", + "Liberia" : "لیبریا", + "Lesotho" : "لسوتو", + "Lithuania" : "لیتوانی", + "Luxembourg" : "لوکزامبورگ", + "Latvia" : "لتونی", + "Libya" : "لیبی", + "Morocco" : "مراکش", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "مونتنگرو", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "ماداگاسکار", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "North Macedonia", + "Mali" : "مالی", + "Myanmar" : "میانمار", + "Mongolia" : "مغولستان", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "موریتانی", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "مالاوی", + "Mexico" : "مکزیک", + "Malaysia" : "مالزی", + "Mozambique" : "موزامبیک", + "Namibia" : "ناميبيا", + "New Caledonia" : "کالدونیای جدید", + "Niger" : "نیجر", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "نیجرا", + "Nicaragua" : "نیجریه", + "Netherlands" : "هلند", + "Norway" : "نروژ", + "Nepal" : "نپال", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "نیوزلند", + "Oman" : "عمان", + "Panama" : "پاناما", + "Peru" : "پرو", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "پاپوا گینه نو", + "Philippines" : "فلیپین", + "Pakistan" : "پاکستان", + "Poland" : "لهستان", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "پورتوریکو", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "پرتغال", + "Palau" : "Palau", + "Paraguay" : "پاروگیه", + "Qatar" : "قطر", + "Réunion" : "Réunion", + "Romania" : "رومانی", + "Serbia" : "صربستان", + "Russian Federation" : "Russian Federation", + "Rwanda" : "رواندا", + "Saudi Arabia" : "عربستان", + "Solomon Islands" : "جزایر سلیمان", + "Seychelles" : "Seychelles", + "Sudan" : "سودان", + "Sweden" : "سوئد", + "Singapore" : "سنگاپور", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "اسلونی", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "اسلواکی", + "Sierra Leone" : "سیرا لئون", + "San Marino" : "San Marino", + "Senegal" : "سنگال", + "Somalia" : "سومالی", + "Suriname" : "سوریه", + "South Sudan" : "سومالی شمالی", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "سلوادور", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "چد", + "French Southern Territories" : "French Southern Territories", + "Togo" : "توگو", + "Thailand" : "تایلند", + "Tajikistan" : "تاجیکستان", + "Tokelau" : "Tokelau", + "Timor-Leste" : "تیمور-لست", + "Turkmenistan" : "ترکمنستان", + "Tunisia" : "تونس", + "Tonga" : "تونگا", + "Turkey" : "jv;di", + "Trinidad and Tobago" : "ترینیداد و توباگو", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "اوکراین", + "Uganda" : "اوگاندا", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "اوروگویه", + "Uzbekistan" : "اوزبکستان", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "وانتویو", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "یمن", + "Mayotte" : "Mayotte", + "South Africa" : "آفریقا شمالی", + "Zambia" : "زامبی", + "Zimbabwe" : "زیمباوه", + "Federation" : "Federation", + "High-performance backend" : "High-performance backend", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Recording backend" : "Recording backend", + "SIP configuration" : "SIP configuration", + "Invalid date, date format must be YYYY-MM-DD" : "تاریخ نامعتبر است ، قالب تاریخ باید YYYY-MM-DD باشد", + "Conversation not found" : "Conversation not found", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "عضویت در گفتگو", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.", + "Password" : "گذرواژه", + "Submit" : "ارسال", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "همه", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "ذخیره تغییرات", + "Saving …" : "ذخیره کردن …", + "Saved!" : "ذخیره!", + "Limit to groups" : "محدود کردن به گروه ها", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "فعال شده", + "Disabled" : "غیرفعال شده", + "Bots settings" : "Bots settings", + "State" : "وضعیت", + "Name" : "نام", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Beta" : "بتا", + "Permissions" : "مجوزها", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "خاموش", + "General settings" : "تنظیمات عمومی", + "Default notification settings" : "تنظیمات اعلان پیش‌فرض", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "Enable encryption" : "فعال کردن رمزگذاری", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "در انتظار", + "Error" : "خطا", + "Blocked" : "مسدود کردن", + "Active" : "فعال کردن", + "Expired" : "منقضی شده", + "Never" : "هرگز", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "زبان", + "Country" : "کشور", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "وضعیت", + "Created at" : "ایجاد شده در", + "Expires at" : "Expires at", + "Limits" : "Limits", + "Yes" : "بله", + "No" : "خیر", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "SIP configuration saved!" : "SIP configuration saved!", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Error code" : "Error code", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend settings saved", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "تایید", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "کاربر فدرال.", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "تائید", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "بازنشاندن", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "لغو", + "Unassigned participants" : "Unassigned participants", + "Back" : "بازگشت", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Loading …" : "در حال بارگذاری...", + "From" : "از", + "To" : "به", + "Calendar" : "تقویم", + "Attendees" : "شرکت کنندگان", + "Save" : "ذخیره", + "Search participants" : "Search participants", + "No results" : "نتیجه ای یافت نشد", + "Done" : "Done", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "نمایش گرید", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "بار کردن دوباره", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "شما می‌توانید دیگران را از زبانه اعضا در نوارکناری دعوت کنید", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "این پیوند را به اشتراک بگذارید تا دیگران را دعوت کنید!", + "Copy link" : "کپی کردن لینک", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "هیچ‌کدام", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "You" : "شما", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "فروکش کردن", + "Expand" : "بسط دادن", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "برای بارگذاری، پرونده‌ها را اینجا رها کنید", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Favorite" : "برگزیده", + "Date:" : "تاریخ:", + "Note:" : "یادداشت: ", + "Hide details" : "مخفی کردن جزئیات", + "Show details" : "Show details", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "غیرفعال کردن", + "Enable" : "فعالسازی", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "انتخاب کنید", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "فرمت فایل باید PNG یا JPG باشد", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "تنظیمات گفتگو", + "Basic Info" : "Basic Info", + "Personal" : "شخصی", + "Moderation" : "Moderation", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Leave conversation" : "ترک صحبت", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "مکالمه را حذف کنید", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Guest access" : "Guest access", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "Set a password" : "رمزعبور تنظیم کنید", + "Change password" : "تغییر گذرواژه", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Resend invitations" : "Resend invitations", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Invalid language" : "Invalid language", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "ویرایش", + "More information" : "More information", + "Delete" : "حذف", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "محتوا را وارد کنید", + "Notifications" : "آگاهی‌ها", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "گفتگوی مهم", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Join" : "ملحق شدن", + "Error while creating the conversation" : "Error while creating the conversation", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Unread mentions" : "اشاره‌های خوانده‌نشده", + "Create conversation" : "Create conversation", + "Enter your name" : "اسمت را وارد کن", + "Log in" : "ورود", + "Mark as read" : "علامت به عنوان خوانده‌شده", + "Mark as unread" : "علامت به عنوان خوانده‌نشده", + "Remove from favorites" : "حذف از برگزیده‌ها", + "Add to favorites" : "افزودن به برگزیده‌ها", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Home" : "خانه", + "Unread" : "خوانده‌نشده", + "Alphabetically" : "الفبایی", + "No matches found" : "جستجو حاصلی دربرنداشت", + "No conversations found" : "No conversations found", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Unread messages" : "پیام‌های خوانده نشده", + "Clear filters" : "Clear filters", + "Clear filter" : "پاک کردن پالایه", + "App settings" : "App settings", + "Users" : "کاربران", + "Groups" : "گروه ها", + "Teams" : "تیم‌ها", + "Other sources" : "Other sources", + "Open conversations" : "مکالمه جدید", + "No search results" : "جستجو نتیجه‌ای نداشت", + "Users and groups" : "Users and groups", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Test" : "Test", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "مسیر نامعتبر انتخاب شده است", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "بارگذاری", + "Files" : "فایل ها", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 ساعت", + "7 days" : "7 روز", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "پاسخ", + "More actions" : "اقدامات بیشتر.", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Forward message" : "Forward message", + "Translate" : "ترجمه", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "پنهان کن", + "Go to conversation" : "Go to conversation", + "Detect language" : "تشخیص زبان", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "پیام ارسال شد", + "Deleting message" : "Deleting message", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "مخاطب", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "_%n vote_::_%n votes_" : ["%n vote","%n رای"], + "Open poll" : "Open poll", + "See results" : "See results", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "پین را بردارید", + "Cancel search" : "Cancel search", + "Create a new group conversation" : "ساخت گفتگوی گروهی جدید", + "Add participants" : "افزودن عضو", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Send message" : "پیام فرستادن", + "Send without notification" : "Send without notification", + "File to share" : "فایل برای اشتراک‌گذاری", + "Add emoji" : "Add emoji", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "اشتراک‌گذاری از فایل‌ها", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "نظرسنجی جدید ایجاد کنید", + "Smart picker" : "Smart picker", + "Record voice message" : "ضبط پیام صوتی", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "New file" : "پروندهٔ تازه", + "Blank" : "جای خالی", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "ارسال", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "Create poll" : "Create poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "تنظیمات", + "Anonymous poll" : "نظرسنجی ناشناس", + "Multiple answers" : "Multiple answers", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "نتایج.", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "میهمان", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove participant" : "شرکت کننده را حذف کنید", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "عزل از مدیر", + "Promote to moderator" : "ترفیع به مدیر", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Remove" : "حذف", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users or groups" : "کاربران یا گروه ها را اضافه کنید", + "Add users" : "Add users", + "Add groups" : "Add groups", + "Add teams" : "افزودن گروه‌ها", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "یکپارچگی‌ها", + "Add federated users" : "Add federated users", + "Searching …" : "جستجوکردن …", + "Search for more users" : "Search for more users", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "Participants" : "شركت كنندگان", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Chat" : "Chat", + "Details" : "جزئیات", + "Shared items" : "Shared items", + "Load more results" : "بار کردن نتیحه‌های بیش‌تر", + "Projects" : "پروژه ها", + "No shared items" : "No shared items", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "مکالمات یا کاربران را جستجو کنید", + "Select conversation" : "مکالمه را انتخاب کنید", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Save name" : "Save name", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Notification settings" : "تنظیمات اعلان", + "Default language" : "زبان پیش فرض", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Privacy" : "حریم خصوصی", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Search" : "جستجو کردن", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "ضبط جلسه", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Remove participant {name}" : "Remove participant {name}", + "Keep" : "نگاه داشتن", + "Select a region" : "Select a region", + "Local time: {time}" : "زمان محلی: {time}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "عضو یک گفتگو شوید یا یک گفتگو جدید شروع کنید!", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "عضو یک گفتگو شوید یا یک گفتگو جدید شروع کنید", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel" : "Channel", + "Login" : "ورود", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "نام مستعار", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "شناسه مشتری", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "رسانه‌ها", + "Polls" : "نظرسنجی ها", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "مکان‌ها", + "Call recordings" : "Call recordings", + "Audio" : "صدا", + "Show all media" : "Show all media", + "Show all files" : "نمایش همه پرونده ها", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Group" : "گروه", + "Team" : "تیم", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You: {lastMessage}" : "You: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Message link copied to clipboard" : "Message link copied to clipboard", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please reload the page." : "لطفا صفحه را دوباره بارگیری کنید.", + "Do not disturb" : "مزاحم نشوید", + "Away" : "دور", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "اپ اندروید", + "iOS app" : "اپ iOS", + "__language_name__" : "فارسى", + "Call summary (%s)" : "خلاصه تماس (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "ربات خلاصه تماس یک پیام کلی را پس از تماس ارسال می کند که همه شرکت کنندگان را فهرست می کند و وظایف را مشخص می کند", + "Tasks" : "وظایف", + "Notes" : "یادداشت‌ها", + "Reports" : "Reports", + "Call summary" : "خلاصه تماس", + "Call summary - {title}" : "خلاصه تماس - {title}", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/fa.json b/l10n/fa.json new file mode 100644 index 0000000..11a641f --- /dev/null +++ b/l10n/fa.json @@ -0,0 +1,1532 @@ +{ "translations": { + "a conversation" : "مکالمه", + "(Duration %s)" : "(مدت زمان %s )", + "You attended a call with {user1}" : "شما در تماس تلفنی با {user1} شرکت کردید", + "_%n guest_::_%n guests_" : ["میهمان %n","میهمان ها %n"], + "You attended a call with {user1} and {user2}" : "شما در یک تماس با {user1} و {user2} حضور پیدا کردید", + "You attended a call with {user1}, {user2} and {user3}" : "شما در یک تماس با {user1} ، {user2} و {user3} شرکت کردید.", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "شما در یک تماس با {user1} ، {user2} و {user3} و {user4} شرکت کردید.", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "شما در یک تماس با {user1} ، {user2} ، {user3} ، {user4} و {user5} شرکت کردید.", + "_%n other_::_%n others_" : ["دیگر %n","دیگران %n"], + "{actor} invited you to {call}" : "{actor} شما را به {call} دعوت کرد", + "You were invited to a conversation or had a call" : "شما به یک مکالمه دعوت شده اید یا تماس گرفته اید", + "Other activities" : "سایر فعالیت ها", + "Talk" : "گفتگو", + "Guest" : "مهمان", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "اکنون می توان از Microsoft Edge و Safari برای شرکت در تماس های صوتی و تصویری استفاده کرد", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- اکنون می توانید با ارسال \"@all\" در گپ ، به همه شرکت کنندگان اطلاع دهید", + "- With the \"arrow-up\" key you can repost your last message" : "- با کلید \"جهت بالا\" می توانید آخرین پیام خود را دوباره ارسال کنید", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- - بحث اکنون می تواند دستوراتی داشته باشد ، \"/ help\" را به عنوان یک پیام چت ارسال کنید تا ببینید سرپرست شما برخی از آنها را پیکربندی کرده است یا خیر", + "- With projects you can create quick links between conversations, files and other items" : "- با پروژه ها می توانید پیوندهای سریع بین مکالمات ، پرونده ها و موارد دیگر ایجاد کنید", + "- You can now mention guests in the chat" : "- اکنون می توانید از مهمان ها در چت یاد کنید", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "Talk updates ✅" : "به روزرسانی های Talk✅ ", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} گفتگو را ایجاد کرد", + "You created the conversation" : "شما گفتگو را ایجاد کردید", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} این گفتگو را از \" %1$s \" به \"%2$s\" تغییر نام داد", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "شما این گفتگو را از \"%1$s \" به \"%2$s\" تغییر نام داد", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a call" : "شما یک تماس را شروع کردید", + "{actor} started a call" : "{actor} یک تماس را شروع کرد", + "Incoming call" : "تماس ورودی", + "{actor} joined the call" : "{actor} به تماس پیوست", + "You joined the call" : "شما به تماس پیوستید", + "{actor} left the call" : "{actor} تماس را ترک کرد", + "You left the call" : "شما تماس را ترک کردید", + "{actor} unlocked the conversation" : "{actor} مکالمه را باز کرد", + "You unlocked the conversation" : "شما مکالمه را باز کردید", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} مکالمه را قفل کرد", + "You locked the conversation" : "شما مکالمه را قفل کرد", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "The conversation is now open to everyone" : "اکنون این گفتگو برای همه باز است", + "{actor} opened the conversation to everyone" : "{actor} گفتگو را برای همه باز کرد", + "You opened the conversation to everyone" : "شما گفتگو را برای همه باز کردید", + "{actor} restricted the conversation to moderators" : "{actor} گفتگو را محدود به ناظران کرد", + "You restricted the conversation to moderators" : "شما گفتگو را محدود به ناظران کردید", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} مهمان مجاز است", + "You allowed guests" : "شما به مهمان ها اجازه دادید.", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} مهمانان مجاز نیستند", + "You disallowed guests" : "شما میهمانان را مجاز نکردید", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} یک رمزعبور تنظیم می کنید", + "You set a password" : "شما یک رمزعبور تنظیم می کنید", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} رمز عبور را حذف کرد", + "You removed the password" : "شما رمز عبور را حذف کردید", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} کاربر {user} را اضافه کرد", + "You joined the conversation" : "شما به گفتگو پیوستید", + "{actor} joined the conversation" : "{actor} به گفتگو پیوست", + "You added {user}" : "شما {user} را اضافه کردید", + "{actor} added you" : "{actor} شما را اضافه کرد", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "گفتگو را ترک کردید", + "{actor} left the conversation" : "{actor} گفتگو را ترک کرد", + "{actor} removed {user}" : "{actor} {user} را حذف کرد", + "You removed {user}" : "شما {user} را حذف کردید", + "{actor} removed you" : "{actor} شما را حذف کرد", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} promoted {user} to moderator" : "{actor} {user} را به عنوان ناظر تبلیغ کرد", + "You promoted {user} to moderator" : "شما {user} را به عنوان مجری تبلیغ کردید", + "{actor} promoted you to moderator" : "{actor} شما را به سمت مجری ارتقاء داد", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} {user} را از مجری دور کرد", + "You demoted {user} from moderator" : "شما {user} را از مجری خلع کردید", + "{actor} demoted you from moderator" : "{actor} شما را از مجری دور کرد", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} فایلی را به اشتراک گذاشت که دیگر در دسترس نیست", + "You shared a file which is no longer available" : "شما یک پرونده را به اشتراک گذاشتید که دیگر در دسترس نیست", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Administration" : "مدیریت", + "System" : "سیستم", + "%s (guest)" : "%s (مهمان)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "مکالمات صحبت کنید", + "Talk to %s" : "صحبت کردن %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "از سهمیه فضای ذخیره سازی فراتر رفت", + "File not found" : "فایل یافت نشد", + "File is not shared, or shared but not with the user" : "پرونده به اشتراک گذاشته نمی شود ، یا به اشتراک گذاشته اما با کاربر به اشتراک گذاشته نمی شود", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "No image file provided" : "No image file provided", + "File is too big" : "فایل خیلی بزرگ است", + "Invalid file provided" : "فایل داده‌شده نا معتبر است", + "Invalid image" : "عکس نامعتبر", + "Unknown filetype" : "نوع فایل ناشناخته", + "Talk mentions" : "Talk mentions", + "Say hi to your friends and colleagues!" : "به رفقا و هم‌قطاران‌تان سلام کنید!", + "No unread mentions" : "اشاره‌ی خوانده‌نشده‌ای نیست", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "برای مکالمه بنویسید", + "Writes event information into a conversation of your choice" : "اطلاعات رویداد را در گفتگوی مورد نظر شما می نویسد", + "Conversation invitation" : "Conversation invitation", + "Description" : "توضیحات", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Meeting" : "ملاقات", + "Password request: %s" : "Password request: %s", + "Private conversation" : "مکالمه خصوصی", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "رد کردن اعلان", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Accept" : "تایید", + "Decline" : "کاهش می یابد", + "New message" : "پیام جدید", + "Reminder" : "Reminder", + "Notification" : "آگاهی", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} شما را به یک گفتگو گروهی دعوت کرد: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "تنظیمات را باز کنید", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "error" : "خطا", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "پیش‌گزیده", + "Presentation" : "ارائه", + "Conversations" : "گفتگو", + "{user}" : "{user}", + "Messages" : "پیام ها", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "تصویر آواتار مربع نیست", + "Room {number}" : "Room {number}", + "Other" : "اعلان‌ها", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "این حساب کاربری ثبت نام نشده است.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Andorra" : "Andorra", + "United Arab Emirates" : "امارات متحده عربی", + "Afghanistan" : "افغانستان", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "آلبانی", + "Armenia" : "ارمنستان", + "Angola" : "آنگولا", + "Antarctica" : "Antarctica", + "Argentina" : "آرژانتین", + "American Samoa" : "American Samoa", + "Austria" : "استرالیا", + "Australia" : "استرالیا", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "آذربایجان", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "بنگلادش", + "Belgium" : "بلژیک", + "Burkina Faso" : "بورکینافاسو", + "Bulgaria" : "بلغارستان", + "Bahrain" : "Bahrain", + "Burundi" : "بوروندی", + "Benin" : "بنین", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "برزیل", + "Bahamas" : "باهاما", + "Bhutan" : "بوتان", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "بوتسوانا", + "Belarus" : "بلاروس", + "Belize" : "بلیز", + "Canada" : "کانادا", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "جمهوری آفریقای مرکزی", + "Congo" : "کنگو", + "Switzerland" : "سوئیس", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "شیلی", + "Cameroon" : "کامرون", + "China" : "چین", + "Colombia" : "کلومبیا", + "Costa Rica" : "کاستاریکا", + "Cuba" : "کوبا", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "قبرس", + "Czechia" : "Czechia", + "Germany" : "آلمان", + "Djibouti" : "جیبوتی", + "Denmark" : "دانمارک", + "Dominica" : "Dominica", + "Dominican Republic" : "جمهوری دومینیکن", + "Algeria" : "الجزایر", + "Ecuador" : "اکوادور", + "Estonia" : "استونی", + "Egypt" : "مصر", + "Western Sahara" : "Western Sahara", + "Eritrea" : "اریتره", + "Spain" : "اسپانیا", + "Ethiopia" : "اتیوپی", + "Finland" : "فنلاند", + "Fiji" : "فیجی", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "فرانسه", + "Gabon" : "گابن", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "جورجیا", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "غنا", + "Gibraltar" : "Gibraltar", + "Greenland" : "گرینلند", + "Gambia" : "گامبیا", + "Guinea" : "گینه", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "گینه استوایی", + "Greece" : "یونان", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "گواتمالا", + "Guam" : "Guam", + "Guinea-Bissau" : "گینه بیسائو", + "Guyana" : "گویان", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "هندوراس", + "Croatia" : "کرواسی", + "Haiti" : "هائیتی", + "Hungary" : "مجارستان", + "Indonesia" : "اندونزی", + "Ireland" : "ایرلند", + "Israel" : "اسرائیل", + "Isle of Man" : "Isle of Man", + "India" : "هند", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "عراق", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "ایسلند", + "Italy" : "ایتالیا", + "Jersey" : "Jersey", + "Jamaica" : "جامایکا", + "Jordan" : "جردن", + "Japan" : "ژاپن", + "Kenya" : "کنیا", + "Kyrgyzstan" : "قرقیزستان", + "Cambodia" : "کمبوج", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "کویت", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "قزاقستان", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "لبنان", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "سریلانکا", + "Liberia" : "لیبریا", + "Lesotho" : "لسوتو", + "Lithuania" : "لیتوانی", + "Luxembourg" : "لوکزامبورگ", + "Latvia" : "لتونی", + "Libya" : "لیبی", + "Morocco" : "مراکش", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "مونتنگرو", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "ماداگاسکار", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "North Macedonia", + "Mali" : "مالی", + "Myanmar" : "میانمار", + "Mongolia" : "مغولستان", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "موریتانی", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "مالاوی", + "Mexico" : "مکزیک", + "Malaysia" : "مالزی", + "Mozambique" : "موزامبیک", + "Namibia" : "ناميبيا", + "New Caledonia" : "کالدونیای جدید", + "Niger" : "نیجر", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "نیجرا", + "Nicaragua" : "نیجریه", + "Netherlands" : "هلند", + "Norway" : "نروژ", + "Nepal" : "نپال", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "نیوزلند", + "Oman" : "عمان", + "Panama" : "پاناما", + "Peru" : "پرو", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "پاپوا گینه نو", + "Philippines" : "فلیپین", + "Pakistan" : "پاکستان", + "Poland" : "لهستان", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "پورتوریکو", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "پرتغال", + "Palau" : "Palau", + "Paraguay" : "پاروگیه", + "Qatar" : "قطر", + "Réunion" : "Réunion", + "Romania" : "رومانی", + "Serbia" : "صربستان", + "Russian Federation" : "Russian Federation", + "Rwanda" : "رواندا", + "Saudi Arabia" : "عربستان", + "Solomon Islands" : "جزایر سلیمان", + "Seychelles" : "Seychelles", + "Sudan" : "سودان", + "Sweden" : "سوئد", + "Singapore" : "سنگاپور", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "اسلونی", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "اسلواکی", + "Sierra Leone" : "سیرا لئون", + "San Marino" : "San Marino", + "Senegal" : "سنگال", + "Somalia" : "سومالی", + "Suriname" : "سوریه", + "South Sudan" : "سومالی شمالی", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "سلوادور", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "چد", + "French Southern Territories" : "French Southern Territories", + "Togo" : "توگو", + "Thailand" : "تایلند", + "Tajikistan" : "تاجیکستان", + "Tokelau" : "Tokelau", + "Timor-Leste" : "تیمور-لست", + "Turkmenistan" : "ترکمنستان", + "Tunisia" : "تونس", + "Tonga" : "تونگا", + "Turkey" : "jv;di", + "Trinidad and Tobago" : "ترینیداد و توباگو", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "اوکراین", + "Uganda" : "اوگاندا", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "اوروگویه", + "Uzbekistan" : "اوزبکستان", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "وانتویو", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "یمن", + "Mayotte" : "Mayotte", + "South Africa" : "آفریقا شمالی", + "Zambia" : "زامبی", + "Zimbabwe" : "زیمباوه", + "Federation" : "Federation", + "High-performance backend" : "High-performance backend", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Recording backend" : "Recording backend", + "SIP configuration" : "SIP configuration", + "Invalid date, date format must be YYYY-MM-DD" : "تاریخ نامعتبر است ، قالب تاریخ باید YYYY-MM-DD باشد", + "Conversation not found" : "Conversation not found", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "عضویت در گفتگو", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "رمزعبور اشتباه می باشد. دوباره امتحان کنید.", + "Password" : "گذرواژه", + "Submit" : "ارسال", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "همه", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "ذخیره تغییرات", + "Saving …" : "ذخیره کردن …", + "Saved!" : "ذخیره!", + "Limit to groups" : "محدود کردن به گروه ها", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "فعال شده", + "Disabled" : "غیرفعال شده", + "Bots settings" : "Bots settings", + "State" : "وضعیت", + "Name" : "نام", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Beta" : "بتا", + "Permissions" : "مجوزها", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "خاموش", + "General settings" : "تنظیمات عمومی", + "Default notification settings" : "تنظیمات اعلان پیش‌فرض", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "Enable encryption" : "فعال کردن رمزگذاری", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "در انتظار", + "Error" : "خطا", + "Blocked" : "مسدود کردن", + "Active" : "فعال کردن", + "Expired" : "منقضی شده", + "Never" : "هرگز", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "زبان", + "Country" : "کشور", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "وضعیت", + "Created at" : "ایجاد شده در", + "Expires at" : "Expires at", + "Limits" : "Limits", + "Yes" : "بله", + "No" : "خیر", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "SIP configuration saved!" : "SIP configuration saved!", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Error code" : "Error code", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend settings saved", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "تایید", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "کاربر فدرال.", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "تائید", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "بازنشاندن", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "لغو", + "Unassigned participants" : "Unassigned participants", + "Back" : "بازگشت", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Loading …" : "در حال بارگذاری...", + "From" : "از", + "To" : "به", + "Calendar" : "تقویم", + "Attendees" : "شرکت کنندگان", + "Save" : "ذخیره", + "Search participants" : "Search participants", + "No results" : "نتیجه ای یافت نشد", + "Done" : "Done", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "نمایش گرید", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "بار کردن دوباره", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "شما می‌توانید دیگران را از زبانه اعضا در نوارکناری دعوت کنید", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "این پیوند را به اشتراک بگذارید تا دیگران را دعوت کنید!", + "Copy link" : "کپی کردن لینک", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "هیچ‌کدام", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "You" : "شما", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "فروکش کردن", + "Expand" : "بسط دادن", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "برای بارگذاری، پرونده‌ها را اینجا رها کنید", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Favorite" : "برگزیده", + "Date:" : "تاریخ:", + "Note:" : "یادداشت: ", + "Hide details" : "مخفی کردن جزئیات", + "Show details" : "Show details", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "غیرفعال کردن", + "Enable" : "فعالسازی", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "انتخاب کنید", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "فرمت فایل باید PNG یا JPG باشد", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "تنظیمات گفتگو", + "Basic Info" : "Basic Info", + "Personal" : "شخصی", + "Moderation" : "Moderation", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Leave conversation" : "ترک صحبت", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "مکالمه را حذف کنید", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Guest access" : "Guest access", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "Set a password" : "رمزعبور تنظیم کنید", + "Change password" : "تغییر گذرواژه", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Resend invitations" : "Resend invitations", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Invalid language" : "Invalid language", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "ویرایش", + "More information" : "More information", + "Delete" : "حذف", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "محتوا را وارد کنید", + "Notifications" : "آگاهی‌ها", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "گفتگوی مهم", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Join" : "ملحق شدن", + "Error while creating the conversation" : "Error while creating the conversation", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Unread mentions" : "اشاره‌های خوانده‌نشده", + "Create conversation" : "Create conversation", + "Enter your name" : "اسمت را وارد کن", + "Log in" : "ورود", + "Mark as read" : "علامت به عنوان خوانده‌شده", + "Mark as unread" : "علامت به عنوان خوانده‌نشده", + "Remove from favorites" : "حذف از برگزیده‌ها", + "Add to favorites" : "افزودن به برگزیده‌ها", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Home" : "خانه", + "Unread" : "خوانده‌نشده", + "Alphabetically" : "الفبایی", + "No matches found" : "جستجو حاصلی دربرنداشت", + "No conversations found" : "No conversations found", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Unread messages" : "پیام‌های خوانده نشده", + "Clear filters" : "Clear filters", + "Clear filter" : "پاک کردن پالایه", + "App settings" : "App settings", + "Users" : "کاربران", + "Groups" : "گروه ها", + "Teams" : "تیم‌ها", + "Other sources" : "Other sources", + "Open conversations" : "مکالمه جدید", + "No search results" : "جستجو نتیجه‌ای نداشت", + "Users and groups" : "Users and groups", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Test" : "Test", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "مسیر نامعتبر انتخاب شده است", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "بارگذاری", + "Files" : "فایل ها", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 ساعت", + "7 days" : "7 روز", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "پاسخ", + "More actions" : "اقدامات بیشتر.", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Forward message" : "Forward message", + "Translate" : "ترجمه", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "پنهان کن", + "Go to conversation" : "Go to conversation", + "Detect language" : "تشخیص زبان", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "پیام ارسال شد", + "Deleting message" : "Deleting message", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "مخاطب", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "_%n vote_::_%n votes_" : ["%n vote","%n رای"], + "Open poll" : "Open poll", + "See results" : "See results", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "پین را بردارید", + "Cancel search" : "Cancel search", + "Create a new group conversation" : "ساخت گفتگوی گروهی جدید", + "Add participants" : "افزودن عضو", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Send message" : "پیام فرستادن", + "Send without notification" : "Send without notification", + "File to share" : "فایل برای اشتراک‌گذاری", + "Add emoji" : "Add emoji", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "اشتراک‌گذاری از فایل‌ها", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "نظرسنجی جدید ایجاد کنید", + "Smart picker" : "Smart picker", + "Record voice message" : "ضبط پیام صوتی", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "New file" : "پروندهٔ تازه", + "Blank" : "جای خالی", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "ارسال", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "Create poll" : "Create poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "تنظیمات", + "Anonymous poll" : "نظرسنجی ناشناس", + "Multiple answers" : "Multiple answers", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "نتایج.", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "میهمان", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove participant" : "شرکت کننده را حذف کنید", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "عزل از مدیر", + "Promote to moderator" : "ترفیع به مدیر", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Remove" : "حذف", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users or groups" : "کاربران یا گروه ها را اضافه کنید", + "Add users" : "Add users", + "Add groups" : "Add groups", + "Add teams" : "افزودن گروه‌ها", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "یکپارچگی‌ها", + "Add federated users" : "Add federated users", + "Searching …" : "جستجوکردن …", + "Search for more users" : "Search for more users", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "Participants" : "شركت كنندگان", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Chat" : "Chat", + "Details" : "جزئیات", + "Shared items" : "Shared items", + "Load more results" : "بار کردن نتیحه‌های بیش‌تر", + "Projects" : "پروژه ها", + "No shared items" : "No shared items", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "مکالمات یا کاربران را جستجو کنید", + "Select conversation" : "مکالمه را انتخاب کنید", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Save name" : "Save name", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Notification settings" : "تنظیمات اعلان", + "Default language" : "زبان پیش فرض", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Privacy" : "حریم خصوصی", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Search" : "جستجو کردن", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "ضبط جلسه", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Remove participant {name}" : "Remove participant {name}", + "Keep" : "نگاه داشتن", + "Select a region" : "Select a region", + "Local time: {time}" : "زمان محلی: {time}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "عضو یک گفتگو شوید یا یک گفتگو جدید شروع کنید!", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "عضو یک گفتگو شوید یا یک گفتگو جدید شروع کنید", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel" : "Channel", + "Login" : "ورود", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "نام مستعار", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "شناسه مشتری", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "رسانه‌ها", + "Polls" : "نظرسنجی ها", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "مکان‌ها", + "Call recordings" : "Call recordings", + "Audio" : "صدا", + "Show all media" : "Show all media", + "Show all files" : "نمایش همه پرونده ها", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Group" : "گروه", + "Team" : "تیم", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You: {lastMessage}" : "You: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Message link copied to clipboard" : "Message link copied to clipboard", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please reload the page." : "لطفا صفحه را دوباره بارگیری کنید.", + "Do not disturb" : "مزاحم نشوید", + "Away" : "دور", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "اپ اندروید", + "iOS app" : "اپ iOS", + "__language_name__" : "فارسى", + "Call summary (%s)" : "خلاصه تماس (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "ربات خلاصه تماس یک پیام کلی را پس از تماس ارسال می کند که همه شرکت کنندگان را فهرست می کند و وظایف را مشخص می کند", + "Tasks" : "وظایف", + "Notes" : "یادداشت‌ها", + "Reports" : "Reports", + "Call summary" : "خلاصه تماس", + "Call summary - {title}" : "خلاصه تماس - {title}", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/fi.js b/l10n/fi.js new file mode 100644 index 0000000..98b8d11 --- /dev/null +++ b/l10n/fi.js @@ -0,0 +1,1336 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "keskustelu", + "(Duration %s)" : "(Kesto %s)", + "You attended a call with {user1}" : "Osallistuit puheluun käyttäjän {user1} kanssa", + "_%n guest_::_%n guests_" : ["%n vieras","%n vierasta"], + "You attended a call with {user1} and {user2}" : "Osallistuit puheluun käyttäjien {user1} ja {user2} kanssa", + "You attended a call with {user1}, {user2} and {user3}" : "Osallistuit puheluun käyttäjien {user1}, {user2} ja {user3} kanssa", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Osallistuit puheluun käyttäjien {user1}, {user2}, {user3} ja {user4} kanssa", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Osallistuit puheluun käyttäjien {user1}, {user2}, {user3}, {user4} ja {user5} kanssa", + "_%n other_::_%n others_" : ["%n muu","%n muuta"], + "{actor} invited you to {call}" : "{actor} kutsui sinut puheluun {call}", + "You were invited to a conversation or had a call" : "Sinut kutsuttiin keskusteluun tai olit puhelussa", + "Other activities" : "Muut tapahtumat", + "Talk" : "Talk", + "Guest" : "Vieras", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Tervetuloa, tämä on Nextcloud Talk!\nTässä keskustelussa sinulle kerrotaan, mitä uusia ominaisuuksia Nextcloud Talk sisältää.", + "## New in Talk %s" : "## Uutta Talkin versiossa %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Voit käyttää Microsoft Edgeä ja Safaria ääni- ja videopuheluihin osallistumiseen", + "- Raise your hand in a call with the R key" : "- Nosta kätesi puhelussa R-näppäimellä", + "- In the sidebar you can now find an overview of the latest shared items" : "- Löydät sivupalkista yleiskatsauksen viimeksi jaettuihin kohteisiin", + "- Set a reminder on a chat message to be notified later again" : "- Aseta keskustelussa olevaan viestiin muistutus, jotta saat siitä ilmoituksen myöhemmin", + "Talk updates ✅" : "Talk-päivitykset ✅", + "{actor} created the conversation" : "{actor} loi keskustelun", + "You created the conversation" : "Sinä loit keskustelun", + "System created the conversation" : "Järjestelmä loi keskustelun", + "An administrator created the conversation" : "Ylläpitäjä loi keskustelun", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} muutti keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sinä muutit keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ylläpitäjä muutti keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "{actor} set the description" : "{actor} asetti kuvauksen", + "You set the description" : "Sinä asetit kuvauksen", + "An administrator set the description" : "Ylläpitäjä asetti kuvauksen", + "{actor} removed the description" : "{actor} poisti kuvauksen", + "You removed the description" : "Sinä poistit kuvauksen", + "An administrator removed the description" : "Ylläpitäjä poisti kuvauksen", + "You started a call" : "Sinä aloitit puhelun", + "{actor} started a call" : "{actor} aloitti puhelun", + "{actor} joined the call" : "{actor} liittyi puheluun", + "You joined the call" : "Sinä liityit puheluun", + "{actor} left the call" : "{actor} poistui puhelusta", + "You left the call" : "Sinä poistuit puhelusta", + "{actor} unlocked the conversation" : "{actor} poisti keskustelun lukituksen", + "You unlocked the conversation" : "Poistit keskustelun lukituksen", + "An administrator unlocked the conversation" : "Ylläpitäjä poisti keskustelun lukituksen", + "{actor} locked the conversation" : "{actor} lukitsi keskustelun", + "You locked the conversation" : "Sinä lukitsit keskustelun", + "An administrator locked the conversation" : "Ylläpitäjä lukitsi keskustelun", + "{actor} limited the conversation to the current participants" : "{actor} rajoitti keskustelun nykyisiin osallistujiin", + "You limited the conversation to the current participants" : "Rajoitit keskustelun nykyisiin osallistujiin", + "An administrator limited the conversation to the current participants" : "Ylläpitäjä rajoitti keskustelun nykyisiin osallistujiin", + "{actor} opened the conversation to registered users" : "{actor} avasi keskustelun rekisteröityneille käyttäjille", + "You opened the conversation to registered users" : "Avasit keskustelun rekisteröityneille käyttäjille", + "An administrator opened the conversation to registered users" : "Ylläpitäjä avasi keskustelun rekisteröityneille käyttäjille", + "The conversation is now open to everyone" : "Keskustelu on nyt avoin kaikille", + "{actor} opened the conversation to everyone" : "{actor} avasi keskustelun kaikille", + "You opened the conversation to everyone" : "Avasit uuden keskustelun kaikille", + "{actor} restricted the conversation to moderators" : "{actor} rajoitti keskustelun moderaattoreille", + "You restricted the conversation to moderators" : "Rajoitit keskustelun moderaattoreille", + "{actor} started breakout rooms" : "{actor} käynnisti pienryhmätilat", + "You started breakout rooms" : "Käynnistit pienryhmätilat", + "{actor} stopped breakout rooms" : "{actor} pysäytti pienryhmätilat", + "You stopped breakout rooms" : "Pysäytit pienryhmätilat", + "{actor} allowed guests" : "{actor} salli vieraat", + "You allowed guests" : "Sinä sallit vieraat", + "An administrator allowed guests" : "Ylläpitäjä salli vieraat", + "{actor} disallowed guests" : "{actor} esti vieraat", + "You disallowed guests" : "Sinä estit vieraat", + "An administrator disallowed guests" : "Ylläpitäjä ei sallinut vieraita", + "{actor} set a password" : "{actor} asetti salasanan", + "You set a password" : "Sinä asetit salasanan", + "An administrator set a password" : "Ylläpitäjä asetti salasanan", + "{actor} removed the password" : "{actor} poisti salasanan", + "You removed the password" : "Sinä poistit salasanan", + "An administrator removed the password" : "Ylläpitäjä poisti salasanan", + "{actor} added {user}" : "{actor} lisäsi käyttäjän {user}", + "You joined the conversation" : "Liityit keskusteluun", + "{actor} joined the conversation" : "{actor} liittyi keskusteluun", + "You added {user}" : "Sinä lisäsit käyttäjän {user}", + "{actor} added you" : "{actor} lisäsi sinut", + "An administrator added you" : "Ylläpitäjä lisäsi sinut", + "An administrator added {user}" : "Ylläpitäjä lisäsi käyttäjän {user}", + "You left the conversation" : "Poistuit keskustelusta", + "{actor} left the conversation" : "{actor} poistui keskustelusta", + "{actor} removed {user}" : "{actor} poisti käyttäjän {user}", + "You removed {user}" : "Sinä poistit käyttäjän {user}", + "{actor} removed you" : "{actor} poisti sinut", + "An administrator removed you" : "Ylläpitäjä lisäsi sinut", + "An administrator removed {user}" : "Ylläpitäjä poisti käyttäjän {user}", + "{actor} invited {federated_user}" : "{actor} kutsui käyttäjän {federated_user}", + "You invited {federated_user}" : "Kutsuit käyttäjän {federated_user}", + "You accepted the invitation" : "Hyväksyit kutsun", + "{actor} invited you" : "{actor} kutsui sinut", + "An administrator invited you" : "Ylläpitäjä kutsui sinut", + "An administrator invited {federated_user}" : "Ylläpitäjä kutsui käyttäjän {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} hyväksyi kutsun", + "{actor} removed {federated_user}" : "{actor} poisti käyttäjän {federated_user}", + "You removed {federated_user}" : "Poistit käyttäjän {federated_user}", + "An administrator removed {federated_user}" : "Ylläpitäjä poisti käyttäjän {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} kieltäytyi kutsusta", + "{actor} added group {group}" : "{actor} lisäsi ryhmän {group}", + "You added group {group}" : "Lisäsit ryhmän {group}", + "An administrator added group {group}" : "Ylläpitäjä lisäsi ryhmän {group}", + "{actor} removed group {group}" : "{actor} poisti ryhmän {group}", + "You removed group {group}" : "Poistit ryhmän {group}", + "An administrator removed group {group}" : "Ylläpitäjä poisti ryhmän {group}", + "{actor} added team {circle}" : "{actor} lisäsi tiimin {circle}", + "You added team {circle}" : "Lisäsit tiimin {circle}", + "An administrator added team {circle}" : "Ylläpitäjä lisäsi tiimin {circle}", + "{actor} removed team {circle}" : "{actor} poisti tiimin {circle}", + "You removed team {circle}" : "Poistit tiimin {circle}", + "An administrator removed team {circle}" : "Ylläpitäjä poisti tiimin {circle}", + "{actor} added {phone}" : "{actor} lisäsi puhelimen {phone}", + "You added {phone}" : "Lisäsit puhelimen {phone}", + "An administrator added {phone}" : "Ylläpitäjä lisäsi puhelimen {phone}", + "{actor} removed {phone}" : "{actor} poisti puhelimen {phone}", + "You removed {phone}" : "Poistit puhelimen {phone}", + "An administrator removed {phone}" : "Ylläpitäjä poisti puhelimen {phone}", + "{actor} promoted {user} to moderator" : "{actor} nosti käyttäjän {user} moderaattoriksi", + "You promoted {user} to moderator" : "Sinä nostit käyttäjän {user} moderaattoriksi", + "{actor} promoted you to moderator" : "{actor} nosti sinut moderaattoriksi", + "An administrator promoted you to moderator" : "Ylläpitäjä nosti sinut moderaattoriksi", + "An administrator promoted {user} to moderator" : "Ylläpitäjä nosti käyttäjän {user} moderaattoriksi", + "{actor} demoted {user} from moderator" : "{actor} poisti moderaattorin oikeudet käyttäjältä {user}", + "You demoted {user} from moderator" : "Sinä poistit moderaattorin oikeudet käyttäjältä {user}", + "{actor} demoted you from moderator" : "{actor} poisti sinulta moderaattorin oikeudet", + "{actor} shared a file which is no longer available" : "{actor} jakoi kanssasi tiedoston, joka ei ole enää saatavilla", + "You shared a file which is no longer available" : "Jaoit tiedoston, joka ei ole enää saatavilla", + "{actor} updated the Matterbridge configuration" : "{actor} päivitti Matterbridge-kokoonpanon", + "You updated the Matterbridge configuration" : "Päivitit Matterbridge-kokoonpanon", + "{actor} removed the Matterbridge configuration" : "{actor} poisti Matterbridge-kokoonpanon", + "You removed the Matterbridge configuration" : "Poistit Matterbridge-kokoonpanon", + "{actor} started Matterbridge" : "{actor} käynnisti Matterbridgen", + "You started Matterbridge" : "Käynnistit Matterbridgen", + "{actor} stopped Matterbridge" : "{actor} pysäytti Matterbridgen", + "You stopped Matterbridge" : "Pysäytit Matterbridgen", + "{actor} deleted a message" : "{actor} poisti viestin", + "You deleted a message" : "Sinä poistit viestin", + "{actor} edited a message" : "{actor} muokkasi viestiä", + "You edited a message" : "Sinä muokkasit viestiä", + "{actor} deleted a reaction" : "{actor} poisti reaktion", + "You deleted a reaction" : "Poistit reaktion", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Asetit viestin vanhenemisen %n viikkoon","Asetit viestin vanhenemisen %n viikkoon"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Asetit viestin vanhenemisen %n päivään","Asetit viestin vanhenemisen %n päivään"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Asetit viestin vanhenemisen %n tuntiin","Asetit viestin vanhenemisen %n tuntiin"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Asetit viestin vanhenemisen %n minuuttiin","Asetit viestin vanhenemisen %n minuuttiin"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} asetti viestin vanhenemisen %n viikkoon","{actor} asetti viesti vanhenemisen %n viikkoon"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} asetti viesti vanhenemisen %n päivään","{actor} asetti viesti vanhenemisen %n päivään"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} asetti viesti vanhenemisen %n tuntiin","{actor} asetti viesti vanhenemisen %n tuntiin"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} asetti viesti vanhenemisen %n minuuttiin","{actor} asetti viesti vanhenemisen %n minuuttiin"], + "{actor} disabled message expiration" : "{actor} poisti käytöstä viestien vanhenemisen", + "You disabled message expiration" : "Poistit käytöstä viestien vanhenemisen", + "{actor} cleared the history of the conversation" : "{actor} tyhjensi keskusteluhistorian", + "You cleared the history of the conversation" : "Sinä tyhjensit keskusteluhistorian", + "{actor} set the conversation picture" : "{actor} asetti keskustelun kuvan", + "You set the conversation picture" : "Asetit keskustelun kuvan", + "{actor} removed the conversation picture" : "{actor} poisti keskustelun kuvan", + "You removed the conversation picture" : "Poistit keskustelun kuvan", + "{actor} ended the poll {poll}" : "{actor} lopetti kyselyn {poll}", + "You ended the poll {poll}" : "Lopetit kyselyn {poll}", + "{actor} started the video recording" : "{actor} aloitti videotallennuksen", + "You started the video recording" : "Aloitit videotallennuksen", + "{actor} stopped the video recording" : "{actor} lopetti videotallennuksen", + "You stopped the video recording" : "Lopetit videotallennuksen", + "{actor} started the audio recording" : "{actor} aloitti äänitallennuksen", + "You started the audio recording" : "Aloitit äänitallennuksen", + "{actor} stopped the audio recording" : "{actor} lopetti äänitallennuksen", + "You stopped the audio recording" : "Lopetit äänitallennuksen", + "The recording failed" : "Tallenne epäonnistui", + "Someone voted on the poll {poll}" : "Joku äänesti kyselyssä {poll}", + "Message deleted by author" : "Viestin lähettäjä poisti viestin", + "Deleted user" : "Poistettu käyttäjä", + "Unknown number" : "Tuntematon numero", + "Administration" : "Ylläpito", + "System" : "Järjestelmä", + "%s (guest)" : "%s (vieras)", + "Message of {user} in {conversation}" : "Käyttäjän {user} viesti keskustelussa {conversation}", + "Message of {user}" : "Käyttäjän {user} viesti", + "Message of a deleted user in {conversation}" : "Poistetun käyttäjän viesti keskustelussa {conversation}", + "Talk conversations" : "Talk-keskustelut", + "An error occurred. Please contact your administrator." : "Tapahtui virhe. Ole yhteydessä ylläpitäjään.", + "Storage quota exceeded" : "Tallennustilan kiintiö täynnä", + "File not found" : "Tiedostoa ei löytynyt", + "File is not shared, or shared but not with the user" : "Tiedosto ei ole jaettu, tai jaettu mutta ei kyseisen käyttäjän kanssa", + "Poll" : "Kysely", + "No image file provided" : "Kuvatiedostoa ei määritetty", + "File is too big" : "Tiedosto on liian suuri", + "Invalid file provided" : "Virheellinen tiedosto määritetty", + "Invalid image" : "Virheellinen kuva", + "Unknown filetype" : "Tuntematon tiedostotyyppi", + "Talk mentions" : "Talk-maininnat", + "Say hi to your friends and colleagues!" : "Sano hei ystävillesi ja työkavereillesi!", + "No unread mentions" : "Ei lukemattomia mainintoja", + "Call in progress" : "Puhelu meneillään", + "You were mentioned" : "Sinut mainittiin", + "Write to conversation" : "Kirjoita keskusteluun", + "Conversation invitation" : "Keskustelukutsu", + "Description" : "Kuvaus", + "You can also dial-in via phone with the following details" : "Voit myös yhdistää puhelimella seuraavin tiedoin", + "Dial-in information" : "Puhelintiedot", + "Meeting ID" : "Tapaamisen tunniste", + "Your PIN" : "PIN-koodisi", + "Meeting" : "Kokous", + "Password request: %s" : "Salasanapyyntö: %s", + "Private conversation" : "Yksityinen keskustelu", + "Deleted user (%s)" : "Poistettiin käyttäjä (%s)", + "Share to chat" : "Jaa keskusteluun", + "Dismiss notification" : "Hylkää ilmoitus", + "Call recording now available" : "Puhelutallenne on nyt saatavilla", + "The recording for the call in {call} was uploaded to {file}." : "Puhelun {call} tallenne on nyt saatavilla tiedostona {file}.", + "Transcript now available" : "Transkriptio on nyt saatavilla", + "The transcript for the call in {call} was uploaded to {file}." : "Puhelun {call} transkriptio on nyt tiedostossa {file}.", + "Failed to transcript call recording" : "Puhelutallenteen transkriptio epäonnistui", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} kutsui sinut huoneeseen {roomName} palvelimella {remoteServer}", + "Accept" : "Hyväksy", + "Decline" : "Kieltäydy", + "{user1} invited you to a federated conversation" : "{user1} kutsui sinut federoituun keskusteluun", + "New message" : "Uusi viesti", + "Reminder" : "Muistutus", + "Notification" : "Ilmoitus", + "{user} in {call}" : "{user} puhelussa {call}", + "{guest} (guest) in {call}" : "{guest} (vieras) puhelussa {call}", + "Guest in {call}" : "Vieras puhelussa {call}", + "{user} sent you a private message" : "{user} lähetti sinulle yksityisviestin", + "{user} sent a message in conversation {call}" : "{user} lähetti viestin keskusteluun {call}", + "A deleted user sent a message in conversation {call}" : "Poistettu käyttäjä lähetti viestin keskusteluun {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (vieras) lähetti viestin keskusteluun {call}", + "A guest sent a message in conversation {call}" : "Vieras lähetti viestin keskusteluun {call}", + "{user} replied to your private message" : "{user} vastasi yksityisviestiisi", + "{user} replied to your message in conversation {call}" : "{user} vastasi viestiisi keskustelussa {call}", + "A guest replied to your message in conversation {call}" : "Vieras vastasi viestiisi keskustelussa {call}", + "{user} reacted with {reaction} to your private message" : "{user} vastasi reaktiolla {reaction} yksityisviestiisi", + "{user} mentioned you in a private conversation" : "{user} mainitsi sinut yksityiskeskustelussa", + "{user} mentioned group {group} in conversation {call}" : "{user} mainitsi ryhmän {group} keskustelussa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mainitsi kaikki keskustelussa {call}", + "{user} mentioned you in conversation {call}" : "{user} mainitsi sinut keskustelussa {call}", + "A deleted user mentioned you in conversation {call}" : "Poistettu käyttäjä mainitsi sinut keskustelussa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (vieras) mainitsi sinut keskustelussa {call}", + "A guest mentioned you in conversation {call}" : "Vieras mainitsi sinut keskustelussa {call}", + "View message" : "Näytä viesti", + "Dismiss reminder" : "Hylkää muistutus", + "View chat" : "Näytä keskustelu", + "{user} invited you to a group conversation: {call}" : "{user} kutsui sinut ryhmäkeskusteluun: {call}", + "Join call" : "Liity puheluun", + "Answer call" : "Vastaa puheluun", + "{user} would like to talk with you" : "{user} haluaa puhua kanssasi", + "Call back" : "Soita takaisin", + "You missed a call from {user}" : "Sinulta jäi vastaamatta puhelu käyttäjältä {user}", + "A group call has started in {call}" : "Ryhmäpuhelu on alkanut puhelussa {call}", + "{email} is requesting the password to access {file}" : "{email} pyytää salasanaa saadakseen pääsyn tiedostoon {file}", + "{email} tried to request the password to access {file}" : "{email} yritti pyytää salasanaa päästäkseen tiedostoon {file}", + "Someone is requesting the password to access {file}" : "Joku pyytää salasanaa päästäkseen tiedostoon {file}", + "Open settings" : "Avaa asetukset", + "error" : "virhe", + "The certificate of {host} expires in {days} days" : "Palvelimen {host} varmenne vanhenee {days} päivän kuluttua", + "The certificate of {host} expired" : "Palvelimen {host} varmenne vanheni", + "Open Talk" : "Avaa Talk", + "Default" : "Oletus", + "Presentation" : "Esitys", + "Conversations" : "Keskustelut", + "Messages in current conversation" : "Viestit nykyisessä keskustelussa", + "{user}" : "{user}", + "Messages" : "Viestit", + "{user} in {conversation}" : "{user} keskustelussa {conversation}", + "Messages in other conversations" : "Viestit muissa keskusteluissa", + "Invalid emoji character" : "Virheellinen emojimerkki", + "Invalid background color" : "Virheellinen taustaväri", + "Avatar image is not square" : "Avatar-kuva ei ole neliö", + "Room {number}" : "Huone {number}", + "Other" : "Muu", + "Something unexpected happened." : "Jotain odottamatonta tapahtui.", + "The URL is invalid." : "URL-osoite on virheellinen.", + "An HTTPS URL is required." : "URL-osoitteen on oltava HTTPS-muodossa.", + "The email address is invalid." : "Sähköpostiosoite on virheellinen.", + "The language is invalid." : "Kieli on virheellinen.", + "The country is invalid." : "Maa on virheellinen.", + "Something unexpected happened. Please try again later." : "Jotain odottamatonta tapahtui. Yritä myöhemmin uudelleen.", + "There is no such account registered." : "Kyseistä tiliä ei ole rekisteröity.", + "Note to self" : "Muistutus itselle", + "A place for your private notes, thoughts and ideas" : "Paikka henkilökohtaisille muistutuksille, ajatuksille ja ideoille", + "Andorra" : "Andorra", + "United Arab Emirates" : "Yhdistyneet arabiemiirikunnat", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ja Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Etelämanner", + "Argentina" : "Argentiina", + "American Samoa" : "Amerikan Samoa", + "Austria" : "Itävalta", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Ahvenanmaa", + "Azerbaijan" : "Azerbaidžan", + "Bosnia and Herzegovina" : "Bosnia ja Hertsegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ja Saba", + "Brazil" : "Brasilia", + "Bahamas" : "Bahamasaaret", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet'nsaari", + "Botswana" : "Botswana", + "Belarus" : "Valko-Venäjä", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kookossaaret", + "Central African Republic" : "Keski-Afrikan tasavalta", + "Congo" : "Kongo", + "Switzerland" : "Sveitsi", + "Côte d'Ivoire" : "Norsunluurannikko", + "Cook Islands" : "Cookinsaaret", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kiina", + "Colombia" : "Kolumbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Joulusaari", + "Cyprus" : "Kypros", + "Czechia" : "Tšekki", + "Germany" : "Saksa", + "Djibouti" : "Djibouti", + "Denmark" : "Tanska", + "Dominican Republic" : "Dominikaaninen tasavalta", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Viro", + "Egypt" : "Egypti", + "Eritrea" : "Eritrea", + "Spain" : "Espanja", + "Ethiopia" : "Etiopia", + "Finland" : "Suomi", + "Fiji" : "Fidži", + "Faroe Islands" : "Färsaaret", + "France" : "Ranska", + "Gabon" : "Gabon", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Ranskan Guayana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönlanti", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Päiväntasaajan Guinea", + "Greece" : "Kreikka", + "South Georgia and the South Sandwich Islands" : "Etelä-Georgia ja Eteläiset Sandwichsaaret", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard ja McDonaldinsaaret", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Unkari", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanti", + "Israel" : "Israel", + "Isle of Man" : "Mansaari", + "India" : "Intia", + "British Indian Ocean Territory" : "Brittiläinen Intian valtameren alue", + "Iraq" : "Irak", + "Iceland" : "Islanti", + "Italy" : "Italia", + "Jamaica" : "Jamaika", + "Jordan" : "Jordan", + "Japan" : "Japani", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgisia", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "Saint Kitts ja Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Caymansaaret", + "Kazakhstan" : "Kazakhstan", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Liettua", + "Luxembourg" : "Luxemburg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshallinsaaret", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Pohjois-Mariaanit", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediivit", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Malesia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Uusi-Kaledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsaari", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Alankomaat", + "Norway" : "Norja", + "Nepal" : "Nepali", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Uusi-Seelanti", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Ranskan Polynesia", + "Papua New Guinea" : "Papua-Uusi-Guinea", + "Philippines" : "Filippiinit", + "Pakistan" : "Pakistan", + "Poland" : "Puola", + "Saint Pierre and Miquelon" : "Saint Pierre ja Miquelon", + "Pitcairn" : "Pitcairnsaaret", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugali", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Venäjä", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabia", + "Solomon Islands" : "Salomonsaaret", + "Seychelles" : "Seychellit", + "Sudan" : "Sudan", + "Sweden" : "Ruotsi", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ja Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Huippuvuoret ja Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Etelä-Sudan", + "Sao Tome and Principe" : "São Tomé ja Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Turks- ja Caicossaaret", + "Chad" : "Tšad", + "Togo" : "Togo", + "Thailand" : "Thaimaa", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Itä-Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkki", + "Trinidad and Tobago" : "Trinidad ja Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Yhdysvaltojen pienet syrjäiset saaret", + "United States of America" : "Yhdysvallat", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Saint Vincent and the Grenadines" : "Saint Vincent ja Grenadiinit", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ja Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Etelä-Afrikka", + "Zambia" : "Sambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federaatio", + "Error: Cannot connect to server" : "Virhe: Ei voi yhdistää palvelimeen", + "Error: Server did not respond with proper JSON" : "Virhe: Palvelin ei vastannut kelvollisella JSON:illa", + "Error: Certificate expired" : "Virhe: varmenne vanhentunut", + "Could not get version" : "Versiota ei saatu", + "Error: Server responded with: {error}" : "Virhe: palvelin vastasi: {error}", + "Error: Unknown error occurred" : "Virhe: Tuntematon virhe", + "SIP configuration" : "SIP-määritys", + "Invalid date, date format must be YYYY-MM-DD" : "Virheellinen päiväys, päiväyksen muoto tulee olla YYYY-MM-DD", + "Conversation not found" : "Keskustelua ei löydy", + "Chat, video & audio-conferencing using WebRTC" : "Keskustelu ja video- sekä äänineuvottelut WebRTC:tä käyttäen", + "Leave call" : "Poistu puhelusta", + "Navigating away from the page will leave the call in {conversation}" : "Sivulta poistuminen päättää puhelun keskustelussa {conversation}", + "Stay in call" : "Pysy puhelussa", + "Discuss this file" : "Keskustele tästä tiedostosta", + "Share this file with others to discuss it" : "Jaa tämä tiedosto muiden kanssa keskustellaksesi siitä", + "Share this file" : "Jaa tämä tiedosto", + "Join conversation" : "Liity keskusteluun", + "This conversation is password-protected." : "Tämä keskustelu on suojattu salasanalla.", + "The password is wrong. Try again." : "Salasana on väärin. Yritä uudelleen.", + "Password" : "Salasana", + "Submit" : "Lähetä", + "Error requesting the password." : "Virhe pyytäessä salasanaa.", + "Request password" : "Pyydä salasana", + "This conversation has ended" : "Tämä keskustelu on päättynyt", + "Error occurred when joining the conversation" : "Keskusteluun liittyessä tapahtui virhe", + "Close Talk sidebar" : "Sulje Talkin sivupalkki", + "Open Talk sidebar" : "Avaa Talkin sivupalkki", + "Everyone" : "Kaikki", + "Users and moderators" : "Käyttäjät ja moderaattorit", + "Moderators only" : "Vain moderaattorit", + "Disable calls" : "Poista puhelut käytöstä", + "Save changes" : "Tallenna muutokset", + "Saving …" : "Tallennetaan…", + "Saved!" : "Tallennettu!", + "Limit to groups" : "Rajoita ryhmiin", + "Guests can still join public conversations." : "Vieraat voivat silti liittyä julkisiin keskusteluihin.", + "Limit using Talk" : "Rajoita Talkin käyttöä", + "Limit creating a public and group conversation" : "Rajoita julkisten ja ryhmäkeskustelujen luomista", + "Limit creating conversations" : "Rajoita keskustelujen luomista", + "Limit starting a call" : "Rajoita puhelun aloittamista", + "Limit starting calls" : "Rajoita puhelujen aloittamista", + "Description is not provided" : "Kuvausta ei ole annettu", + "Enabled" : "Käytössä", + "Disabled" : "Pois käytöstä", + "Bots settings" : "Bottien asetukset", + "State" : "Tila", + "Name" : "Nimi", + "Last error" : "Viimeisin virhe", + "Total errors count" : "Virheitä yhteensä", + "Find more bots" : "Etsi lisää botteja", + "Beta" : "Beta", + "Permissions" : "Oikeudet", + "Select groups …" : "Valitse ryhmät…", + "All messages" : "Kaikki viestit", + "@-mentions only" : "Vain @-maininnat", + "Off" : "Pois", + "General settings" : "Yleiset asetukset", + "Default notification settings" : "Ilmoitusten oletusasetukset", + "Default group notification" : "Ryhmän oletusilmoitus", + "Integration into other apps" : "Integraatio muihin sovelluksiin", + "Allow conversations on files" : "Salli keskustelut tiedostoista", + "Allow conversations on public shares for files" : "Salli keskustelut tiedostojen julkisissa jaoissa", + "Enable encryption" : "Käytä salausta", + "Pending" : "Odottaa", + "Error" : "Virhe", + "Blocked" : "Estetty", + "Active" : "Aktiivinen", + "Expired" : "Vanhentunut", + "Never" : "Ei koskaan", + "The account could not be deleted. Please try again later." : "Tätä tiliä ei voitu poistaa. Yritä myöhemmin uudelleen.", + "URL of this Nextcloud instance" : "Tämän Nextcloud-instanssin URL-osoite", + "Email of the user" : "Käyttäjän sähköpostiosoite", + "Language" : "Kieli", + "Country" : "Maa", + "Status" : "Tila", + "Created at" : "Luotu", + "Expires at" : "Vanhenee", + "Yes" : "Kyllä", + "No" : "Ei", + "_%n user_::_%n users_" : ["%n käyttäjä","%n käyttäjää"], + "Installed version: {version}" : "Asennettu versio: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge-binääriä ei löytynyt tai sitä ei voitu suorittaa.", + "Downloading …" : "Ladataan…", + "Install Talk Matterbridge" : "Asenna Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Matterbridge-binäärin suorittaminen epäonnistui.", + "Matterbridge integration" : "Matterbridge-integraatio", + "Enable Matterbridge integration" : "Käytä Matterbridge-integraatiota", + "Status: Checking connection" : "Tila: Tarkistetaan yhteyttä", + "OK: Running version: {version}" : "OK: Suoritetaan versiota: {version}", + "Validate SSL certificate" : "Vahvista SSL-varmenne", + "Delete this server" : "Poista tämä palvelin", + "Test this server" : "Testaa tämä palvelin", + "Shared secret" : "Jaettu salaisuus", + "SIP configuration saved!" : "SIP-määritykset tallennettu!", + "Phone number (Country)" : "Puhelinnumero (maa)", + "STUN server URL" : "STUN-palvelimen osoite", + "The server address is invalid" : "Palvelimen osoite on virheellinen", + "STUN settings saved" : "STUN-asetukset tallennettu", + "STUN servers" : "STUN-palvelimet", + "Add a new STUN server" : "Lisää uusi STUN-palvelin", + "{option1} and {option2}" : "{option1} ja {option2}", + "{option} only" : "vain {option}", + "TURN server schemes" : "TURN-palvelimen skeemat", + "TURN server URL" : "TURN-palvelimen osoite", + "TURN server secret" : "TURN-palvelimen salaisuus", + "TURN server protocols" : "TURN-palvelimen protokollat", + "TURN settings saved" : "TURN-asetukset tallennettu", + "TURN servers" : "TURN-palvelin", + "Add a new TURN server" : "Lisää uusi TURN-palvelin", + "Failed" : "Epäonnistui", + "OK" : "OK", + "Checking …" : "Tarkistetaan…", + "Federated user" : "Federoitu käyttäjä", + "Assign participants to rooms" : "Määritä osallistujat huoneisiin", + "Configure breakout rooms" : "Määritä pienryhmätilat", + "Number of breakout rooms" : "Pienryhmätilojen määrä", + "Automatically assign participants" : "Määritä osallistujat automaattisesti", + "Manually assign participants" : "Määritä osallistujat manuaalisesti", + "Allow participants to choose" : "Salli osallistujien valinta", + "Create rooms" : "Luo pienryhmätilat", + "Confirm" : "Vahvista", + "Create breakout rooms" : "Luo pienryhmätilat", + "Reset" : "Palauta", + "Delete breakout rooms" : "Poista pienryhmätilat", + "Room {roomNumber}" : "Huone {roomNumber}", + "Current breakout rooms and settings will be lost" : "Nykyisen pienryhmätilat ja asetukset katoavat", + "Cancel" : "Peruuta", + "Unassigned participants" : "Osallistujat joita ei ole määritetty", + "Back" : "Takaisin", + "Add participant \"{user}\"" : "Lisää osallistuja \"{user}\"", + "Now" : "Nyt", + "Loading …" : "Ladataan…", + "From" : "Lähettäjä", + "To" : "Vastaanottaja", + "Calendar" : "Kalenteri", + "Attendees" : "Osallistujat", + "Save" : "Tallenna", + "Search participants" : "Etsi osallistujia", + "No results" : "Ei tuloksia", + "Done" : "Valmis", + "Raise hand" : "Nosta käsi", + "Raise hand (R)" : "Nosta käsi (R)", + "Lower hand" : "Laske käsi", + "Lower hand (R)" : "Laske käsi (R)", + "Exit full screen (F)" : "Poistu koko näytön tilasta (F)", + "Full screen (F)" : "Koko näyttö (F)", + "Speaker view" : "Puhujan näkymä", + "Grid view" : "Ruudukkonäkymä", + "This conversation is read-only" : "Keskustelu on \"vain luku\"-tilassa", + "Reload" : "Päivitä", + "{nickName} raised their hand." : "{nickName} nosti kätensä.", + "A participant raised their hand." : "Osallistuja nosti kätensä.", + "Previous page of videos" : "Videoiden edellinen sivu", + "Next page of videos" : "Videoiden seuraava sivu", + "Connecting …" : "Yhdistetään…", + "Calling …" : "Soitetaan…", + "Waiting for {user} to join the call" : "Odotetaan käyttäjän {user} liittyvän puheluun", + "Waiting for others to join the call …" : "Odotetaan muiden liittymistä puheluun...", + "You can invite others in the participant tab of the sidebar" : "Voit kutsua muita sivupalkissa olevan Osallistujat-välilehden kautta", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Voit kutsua muita sivupalkissa olevan Osallistujat-välilehden kautta tai jakamalla tämän linkin!", + "Share this link to invite others!" : "Jaa tämä linkki kutsuaksesi muita!", + "Copy link" : "Kopioi linkki", + "You are not allowed to enable audio" : "Sinulla ei ole oikeutta jakaa ääntä", + "No audio. Click to select device" : "Ei ääntä. Napsauta valitaksesi laitteen", + "Mute audio" : "Mykistä ääni", + "Mute audio (M)" : "Mykistä äänet (M)", + "Unmute audio" : "Palauta äänet", + "Unmute audio (M)" : "Palauta äänet (M)", + "None" : "Ei mitään", + "Check devices" : "Tarkista laitteet", + "Access to camera was denied" : "Pääsy kameraan estettiin", + "Error while accessing camera: It is likely in use by another program" : "Virhe yrittäessä käyttää kameraa: se on luultavasti toisen ohjelman käytössä", + "Error while accessing camera" : "Virhe käyttäessä kameraa", + "You have been muted by a moderator" : "Moderaattori on mykistänyt sinut", + "Hide presenter video" : "Piilota esittäjän video", + "You are not allowed to enable video" : "Sinulla ei ole oikeutta ottaa videota käyttöön", + "No video. Click to select device" : "Ei videota. Napsauta valitaksesi laitteen", + "Disable video" : "Poista video käytöstä", + "Disable video (V)" : "Poista video käytöstä (V)", + "Enable video" : "Käytä videota", + "Enable video (V)" : "Ota video käyttöön (v)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ota video käyttöön (V) - Yhteys keskeytyy hetkeksi, kun otat videon käyttöön ensimmäisen kerran", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ota video käyttöön. Yhteys keskeytyy hetkeksi, kun otat videon käyttöön ensimmäisen kerran", + "Show presenter" : "Näytä esittäjä", + "You" : "Sinä", + "Mute" : "Mykistä", + "Muted" : "Mykistetty", + "Show screen" : "Näytä näyttö", + "Stop following" : "Lopeta seuraaminen", + "Connection could not be established …" : "Yhteyttä ei voitu muodostaa…", + "Connection was lost and could not be re-established …" : "Yhteys katkesi eikä sitä voitu muodostaa uudelleen…", + "Connection could not be established. Trying again …" : "Yhteyttä ei voitu muodostaa. Yritetään uudelleen…", + "Connection lost. Trying to reconnect …" : "Yhteys katkesi. Yritetään muodostaa yhteys uudelleen…", + "Connection problems …" : "Ongelmia yhteydessä…", + "Collapse" : "Kutista näkymää", + "Expand" : "Laajenna", + "You need to be logged in to upload files" : "Sinun tulee olla kirjautunut sisään, jotta voit lähettää tiedostoja", + "Drop your files to upload" : "Pudota tiedostot lähettääksesi ne", + "Conversation messages" : "Keskustelun viestit", + "Scroll to bottom" : "Vieritä alas", + "Post message" : "Lähetä viesti", + "Federated conversation" : "Federoitu keskustelu", + "Public conversation" : "Julkinen keskustelu", + "Favorite" : "Suosikki", + "Manage bans" : "Hallitse estoja", + "No banned users" : "Ei estettyjä käyttäjiä", + "Date:" : "Päivämäärä:", + "Note:" : "Huomioi:", + "Hide details" : "Piilota tiedot", + "Show details" : "Näytä lisätiedot", + "Error while updating conversation name" : "Virhe keskustelun nimeä päivittäessä", + "Error while updating conversation description" : "Virhe keskustelun kuvausta päivittäessä", + "Enter a name for this conversation" : "Anna nimi tälle keskustelulle", + "Edit conversation name" : "Muokkaa keskustelun nimeä", + "Edit conversation description" : "Muokkaa keskustelun kuvausta", + "Enter a description for this conversation" : "Anna kuvaus tälle keskustelulle", + "Picture" : "Kuva", + "Disable" : "Poista käytöstä", + "Enable" : "Käytä", + "Breakout rooms" : "Pienryhmätilat", + "Manage breakout rooms" : "Hallitse pienryhmätiloja", + "Set up breakout rooms for this conversation" : "Määritä tämän keskustelun pienryhmätilat", + "Please select a valid PNG or JPG file" : "Valitse kelvollinen PNG- tai JPG-tiedosto", + "Choose your conversation picture" : "Valitse keskustelukuva", + "Choose" : "Valitse", + "Error setting conversation picture" : "Virhe keskustelukuvaa asettaessa", + "Could not set the conversation picture: {error}" : "Keskustelun kuvaa ei voitu asettaa: {error}", + "Error cropping conversation picture" : "Virhe keskustelukuvaa rajattaessa", + "Error removing conversation picture" : "Virhe keskustelukuvaa poistaessa", + "Set emoji as conversation picture" : "Aseta emoji keskustelukuvaksi", + "Set background color for conversation picture" : "Aseta taustaväri keskustelukuvalle", + "Upload conversation picture" : "Lähetä keskustelukuva", + "Choose conversation picture from files" : "Valitse keskustelukuva tiedostoista", + "Remove conversation picture" : "Aseta keskustelukuva", + "The file must be a PNG or JPG" : "Tiedoston tulee olla PNG tai JPG", + "Set picture" : "Aseta kuva", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Muokkaa tähän keskusteluun osallistuvien oletusoikeuksia. Nämä asetukset eivät vaikuta moderaattoreihin.", + "All permissions" : "Kaikki oikeudet", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Osallistujilla on oikeus aloittaa puhelu, liittyä puheluun, ottaa ääni ja video käyttöön sekä jakaa näytön sisältö.", + "Restricted" : "Rajoitettu", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Osallistujat voivat liittyä puheluihin, mutta eivät voi ottaa ääntä tai videota käyttöön tai jakaa näyttönsä sisältöä, ennen kuin moderaattori on antanut siihen luvan.", + "Advanced permissions" : "Edistyneet oikeudet", + "Edit permissions" : "Muokkaa oikeuksia", + "Conversation settings" : "Keskustelun asetukset", + "Basic Info" : "Perustiedot", + "Personal" : "Henkilökohtainen", + "Moderation" : "Moderaatio", + "Breakout Rooms" : "Pienryhmätilat", + "Matterbridge" : "Matterbridge", + "Bots" : "Botit", + "Danger zone" : "Vaaravyöhyke", + "Leave conversation" : "Poistu keskustelusta", + "Delete conversation" : "Poista keskustelu", + "Do you really want to delete \"{displayName}\"?" : "Poistetaanko \"{displayName}\"?", + "Error while deleting conversation" : "Virhe keskustelua poistaessa", + "Delete all chat messages" : "Poista kaikki keskustelun viestit", + "Error while clearing chat history" : "Virhe keskusteluhistoriaa siivotessa", + "Be careful, these actions cannot be undone." : "Ole varovainen, näitä toimintoja ei voi perua.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Kun olet kerran poistunut suljetusta keskustelusta, tarvitset kutsun liittyäksesi uudelleen siihen. Avoimeen keskusteluun on mahdollista liittyä milloin hyvänsä.", + "Permanently delete this conversation." : "Poista tämä keskustelu pysyvästi.", + "Delete chat messages" : "Poista keskustelun viestit", + "Permanently delete all the messages in this conversation." : "Poista pysyvästi kaikki tämän keskustelun viestit.", + "_%n hour_::_%n hours_" : ["%n tunti","%n tuntia"], + "_%n day_::_%n days_" : ["%n päivä","%n päivää"], + "_%n week_::_%n weeks_" : ["%n viikko","%n viikkoa"], + "Custom expiration time" : "Mukautettu vanhenemisaika", + "Message expiration disabled" : "Viestien vanheneminen poistettu käytöstä", + "Message expiration set: {duration}" : "Viestien vanhenemiseksi asetettu: {duration}", + "Error when trying to set message expiration" : "Virhe yrittäessä asettaa viestin vanhenemista", + "Message expiration" : "Viestin vanheneminen", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Keskusteluviestit on mahdollista vanhentaa tietyn ajan jälkeen. Huomio: Keskustelussa jaetut tiedostot eivät poistu omistajalta, mutta ne eivät ole enää jaettu keskustelussa.", + "Set message expiration" : "Aseta viestin vanheneminen", + "Current message expiration" : "Nykyinen viestin vanheneminen", + "Guest access" : "Vieraspääsy", + "Allow guests to join this conversation via link" : "Salli vieraiden liittyä tähän keskusteluun linkin kautta", + "Password protection" : "Salasanasuojaus", + "Set a password" : "Aseta salasana", + "Change password" : "Vaihda salasana", + "Enter new password" : "Kirjoita uusi salasana", + "Save password" : "Tallenna salasana", + "Guests are allowed to join this conversation via link" : "Vieraat voivat liittyä tähän keskusteluun linkin kautta", + "Guests are not allowed to join this conversation" : "Vierailla ei ole oikeutta liittyä tähän keskusteluun", + "Resend invitations" : "Lähetä kutsut uudelleen", + "This conversation is open to registered users" : "Avaa keskustelu on avoinna rekisteröityneille käyttäjille", + "Open conversation to registered users, showing it in search results" : "Avaa keskustelu rekisteröityneille käyttäjille, näytetään hakutuloksissa", + "Open conversation" : "Avaa keskustelu", + "Start time: {date}" : "Aloitusaika: {date}", + "Start time has been updated" : "Aloitusaika on päivitetty", + "Error occurred while updating start time" : "Virhe aloitusaikaa päivittäessä", + "Meeting start time" : "Tapaamisen alotusaika", + "Start time (optional)" : "Aloitusaika (valinnainen)", + "Error occurred when locking the conversation" : "Keskustelun lukitsemisessa tapahtui virhe", + "Lock conversation" : "Lukitse keskustelu", + "This will also terminate the ongoing call." : "Tämä lopettaa meneillään olevan puhelun ̣", + "Edit" : "Muokkaa", + "More information" : "Lisää tietoa", + "Delete" : "Poista", + "Add new bridged channel to current conversation" : "Lisää uusi sillattu kanava nykyiseen keskusteluun", + "unknown state" : "tuntematon tila", + "running" : "käynnissä", + "not running, check Matterbridge log" : "ei käynnistä, tarkista Matterbridge-loki", + "not running" : "ei käynnissä", + "Bridge saved" : "Silta tallennettu", + "More info on Matterbridge" : "Lisätietoa Matterbridgestä", + "Enable bridge" : "Ota silta käyttöön", + "Show Matterbridge log" : "Näytä Matterbridge-loki", + "Log content" : "Lokin sisältö", + "Notifications" : "Ilmoitukset", + "Notify about calls in this conversation" : "llmoita puheluista tässä keskustelussa", + "Important conversation" : "Tärkeä keskustelu", + "SIP dial-in is now possible without PIN requirement" : "SIP-sisäänsoitto on nyt mahdollista ilman PIN-koodin vaatimusta", + "SIP dial-in is now enabled" : "SIP-sisäänsoitto on nyt käytössä", + "SIP dial-in is now disabled" : "SIP-sisäänsoitto on nyt pois käytöstä", + "Phone and SIP dial-in" : "Puhelin- ja SIP-sisäänsoitto", + "Enable phone and SIP dial-in" : "Käytä puhelimella ja SIP:illä sisäänsoittoa", + "Allow to dial-in without a PIN" : "Salli sisäänsoitto ilman PIN-koodia", + "Join" : "Liity", + "Error while creating the conversation" : "Virhe keskustelua luotaessa", + "Create a new conversation" : "Luo uusi keskustelu", + "Join open conversations" : "Liity avoimiin keskusteluihin", + "Call a phone number" : "Soita puhelinnumeroon", + "Schedule meetings" : "Sovi tapaamisia", + "You don't have any upcoming meetings" : "Sinulla ei ole tulevia tapaamisia", + "Open calendar" : "Avaa kalenteri", + "Unread mentions" : "Lukemattomat maininnat", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Viestit, joissa sinut on mainittu, näkyvät tässä. Voit mainita henkilöitä kirjoittamalla @ -merkin ja sitten heidän nimensä", + "Message reminders" : "Viestimuistutukset", + "Set a reminder on a message to be notified" : "Aseta muistutus viestiin, jotta saat siitä ilmoituksen", + "Create conversation" : "Luo keskustelu", + "Enter your name" : "Kirjoita nimesi", + "Log in" : "Kirjaudu sisään", + "Creating the conversation …" : "Luodaan keskustelu…", + "Mark as read" : "Merkitse luetuksi", + "Mark as unread" : "Merkitse lukemattomaksi", + "Remove from favorites" : "Poista suosikeista", + "Add to favorites" : "Lisää suosikkeihin", + "Conversation actions" : "Keskustelun toiminnot", + "Pending invitations" : "Odottavat kutsut", + "From {user} at {remoteServer}" : "Käyttäjältä {user} palvelimelta {remoteServer}", + "Decline invitation" : "Kieltäydy kutsusta", + "Accept invitation" : "Hyväksy kutsu", + "No pending invitations" : "Ei odottavia kutsuja", + "Home" : "Koti", + "Unread" : "Lukematon", + "Alphabetically" : "Aakkosjärjestys", + "No followed threads" : "Ei seurattuja keskusteluketjuja", + "No matches found" : "Ei tuloksia", + "No conversations found" : "Keskusteluja ei löytynyt", + "Subscribe to an existing thread or start your own." : "Seuraa olemassa olevaa keskusteluketjua tai aloita omasi.", + "You have no unread mentions." : "Sinulla ei ole lukemattomia mainintoja.", + "You have no unread messages." : "Sinulla ei ole lukemattomia viestejä.", + "An error occurred while performing the search" : "Hakua suorittaessa tapahtui virhe", + "Conversation list" : "Keskustelulista", + "Filter conversations by" : "Suodata keskusteluja", + "Unread messages" : "Lukemattomat viestit", + "Meeting conversations" : "Kokouskeskustelut", + "Clear filters" : "Tyhjennä suodattimet", + "New personal note" : "Uusi henkilökohtainen muistiinpano", + "Back to conversations" : "Palaa keskusteluihin", + "Threads" : "Keskusteluketjut", + "Clear filter" : "Tyhjennä suodatin", + "App settings" : "Sovelluksen asetukset", + "Users" : "Käyttäjät", + "Groups" : "Ryhmät", + "Teams" : "Tiimit", + "Federated users" : "Federoidut käyttäjät", + "New private conversation" : "Uusi yksityinen keskustelu", + "Other sources" : "Muut lähteet", + "Open conversations" : "Avaa keskustelut", + "No search results" : "Ei hakutuloksia", + "Users, groups and teams" : "Käyttäjät, ryhmät ja tiimit", + "Users and groups" : "Käyttäjät ja ryhmät", + "Users and teams" : "Käyttäjät ja tiimit", + "Groups and teams" : "Ryhmät ja tiimit", + "New group conversation" : "Uusi ryhmäkeskustelu", + "The meeting will start soon" : "Tämä kokous alkaa pian", + "This meeting is scheduled for {startTime}" : "Kokous on ajoitettu alkavaksi {startTime}", + "You are currently waiting in the lobby" : "Odotat parhaillaan aulassa", + "Select microphone" : "Valitse mikrofoni", + "No microphone available" : "Ei mikrofonia saatavilla", + "Select camera" : "Valitse kamera", + "No camera available" : "Ei kameraa saatavilla", + "Select a device" : "Valitse laite", + "Playing …" : "Toistetaan…", + "Test speakers" : "Testaa kaiuttimia", + "Test" : "Kokeile", + "Devices" : "Laitteet", + "Backgrounds" : "Taustakuvat", + "No audio" : "Ei ääntä", + "No camera" : "Ei kameraa", + "Calls are not supported in your browser" : "Selaimesi ei tue puheluja", + "Access to microphone is only possible with HTTPS" : "Mikrofonin käyttäminen on mahdollista vain HTTPS-yhteydellä", + "Access to microphone was denied" : "Pääsy mikrofoniin estettiin", + "Error while accessing microphone" : "Virhe yrittäessä käyttää mikrofonia", + "Access to camera is only possible with HTTPS" : "Kameran käyttäminen on mahdollista vain HTTPS-yhteydellä", + "The call is being recorded." : "Tämä puhelu tallennetaan.", + "Apply settings" : "Toteuta asetukset", + "Select virtual office background" : "Valitse virtuaalinen toimistotaustakuva", + "Select virtual home background" : "Valitse virtuaalinen kotitaustakuva", + "Select virtual abstract background" : "Valitse virtuaalinen abstraktitaustakuva", + "Select virtual beach background" : "Valitse virtuaalinen rantataustakuva", + "Select virtual park background" : "Valitse virtuaalinen puistotaustakuva", + "Select virtual theater background" : "Valitse virtuaalinen teatteritaustakuva", + "Select virtual library background" : "Valitse virtuaalinen kirjastotaustakuva", + "Select virtual space station background" : "Valitse virtuaalinen avaruusasemataustakuva", + "Error while uploading the file" : "Virhe tiedostoa lähettäessä", + "Select a file" : "Valitse tiedosto", + "Invalid path selected" : "Valittu virheellinen polku", + "Select virtual background from file {fileName}" : "Valitse virtuaalinen taustakuva tiedostosta {fileName}", + "Blur" : "Sumennus", + "Upload" : "Lähetä", + "Files" : "Tiedostot", + "(edited)" : "(muokattu)", + "The message has expired or has been deleted" : "Tämä viesti on vanhentunut tai se on poistettu", + "Cancel quote" : "Peruuta lainaus", + "24 hours" : "24 tuntia", + "7 days" : "7 päivää", + "Clear reminder – {timeLocale}" : "Tyhjennä muistutus – {timeLocale}", + "Message text copied to clipboard" : "Viestin teksti kopioitu leikepöydälle", + "Message text could not be copied" : "Viestin tekstiä ei voitu kopioida", + "Add a reaction to this message" : "Lisää reaktio tähän viestiin", + "Reply" : "Vastaa", + "More actions" : "Lisää toimintoja", + "Set reminder" : "Aseta muistutus", + "Reply privately" : "Vastaa yksityisesti", + "Edit message" : "Muokkaa viestiä", + "Copy message link" : "Kopioi viestin linkki", + "Go to file" : "Siirry tiedostoon", + "Forward message" : "Lähetä edelleen", + "Translate" : "Käännä", + "Set custom reminder" : "Aseta mukautettu muistutus", + "Close reactions menu" : "Sulje reaktiovalikko", + "React with {emoji}" : "Reagoi emojilla {emoji}", + "React with another emoji" : "Reagoi toisella emojilla", + "Choose a conversation to forward the selected message." : "Valitse keskustelu, johon valittu viesti edelleenlähetetään.", + "Error while forwarding message" : "Virhe edelleenlähettäessä viestiä", + "The message has been forwarded to {selectedConversationName}" : "Viesti on lähetetty edelleen keskusteluun {selectedConversationName}", + "Dismiss" : "Hylkää", + "Go to conversation" : "Mene keskusteluun", + "Detect language" : "Havaitse kieli", + "The message could not be translated" : "Viestiä ei voitu kääntää", + "Translation copied to clipboard" : "Käännös kopioitu leikepöydälle", + "Translation could not be copied" : "Käännöstä ei voitu kopioida", + "Translate message" : "Käännä viesti", + "Source language to translate from" : "Lähdekieli, josta käännetään", + "Translate from" : "Lähdekieli", + "Target language to translate into" : "Kohdekieli, jolle käännetään", + "Translate to" : "Kohdekieli", + "Translating" : "Käännetään", + "Copy translated text" : "Kopioi käännetty teksti", + "Send now" : "Lähetä nyt", + "Message read by everyone who shares their reading status" : "Viesti luettu kaikkien niiden kanssa, jotka jakavat lukutilapäivityksensä", + "Message sent" : "Viesti lähetetty", + "Deleting message" : "Poistetaan viestiä", + "Message deleted successfully" : "Viesti poistettu onnistuneesti", + "Message could not be deleted because it is too old" : "Viestiä ei voitu poistaa, koska se on liian vanha", + "Only normal chat messages can be deleted" : "Vain normaaleja keskustelun viestejä on mahdollista poistaa", + "An error occurred while deleting the message" : "Virhe viestiä poistaessa", + "Your browser does not support playing audio files" : "Selaimesi ei tue äänitiedostojen toistamista", + "Contact" : "Yhteystieto", + "Remove {fileName}" : "Poista {fileName}", + "Open this location in OpenStreetMap" : "Avaa tämä sijainti OpenStreetMapissa", + "Sending message" : "Lähetetään viestiä", + "Failed to send the message. Click to try again" : "Viestin lähettäminen epäonnistui. Paina yrittääksesi uudelleen", + "Not enough free space to upload file" : "Ei riittävästi vapaata tilaa tiedoston lähettämiseksi", + "You cannot send messages to this conversation at the moment" : "Et voi lähettää viestejä tähän keskusteluun tällä hetkellä", + "You voted" : "Äänestit", + "_%n vote_::_%n votes_" : ["%n ääni","%n ääntä"], + "See results" : "Näytä tulokset", + "Reactions" : "Reaktiot", + "No permission to post reactions in this conversation" : "Ei oikeutta lähettää reaktioita tähän keskusteluun", + "Show all reactions" : "Näytä kaikki reaktiot", + "Add more reactions" : "Lisää enemmän reaktioita", + "Show or collapse system messages" : "Näytä tai piilota järjestelmäviestit", + "No messages" : "Ei viestejä", + "All messages have expired or have been deleted." : "Kaikki viestit ovat vanhentuneet tai ne on poistettu.", + "Unpin" : "Poista kiinnitys", + "Cancel search" : "Peruuta haku", + "Add a phone number" : "Lisää puhelinnumero", + "All set, the conversation \"{conversationName}\" was created." : "Kaikki valmista, keskustelu \"{conversationName}\" luotu.", + "Create a new group conversation" : "Luo uusi ryhmäkeskustelu", + "Add participants" : "Lisää osallistujat", + "Conversation visibility" : "Keskustelun näkyvyys", + "Allow guests to join via link" : "Salli vieraiden liittyä linkin kautta", + "Enter password" : "Anna salasana", + "This conversation has been locked" : "Tämä keskustelu on lukittu", + "No permission to post messages in this conversation" : "Ei oikeutta lähettää viestejä tässä keskustelussa", + "Joining conversation …" : "Liitytään keskusteluun…", + "Send message" : "Lähetä viesti", + "Send without notification" : "Lähetä ilman ilmoitusta", + "File to share" : "Jaettava tiedosto", + "Add emoji" : "Lisää emoji", + "Send later" : "Lähetä myöhemmin", + "Cancel editing" : "Peruuta muokkaus", + "Share from {nextcloud}" : "Jaa lähteestä {nextcloud}", + "Share from Files" : "Jaa tiedostoista", + "Share files to the conversation" : "Jaa tiedostoja keskusteluun", + "Upload from device" : "Lähetä laitteelta", + "Create new poll" : "Luo uusi kysely", + "Smart picker" : "Älykäs valitsin", + "Record voice message" : "Äänitä ääniviesti", + "End recording and send" : "Lopeta äänitys ja lähetä", + "Dismiss recording" : "Hylkää äänitallenne", + "Access to the microphone was denied" : "Pääsy mikrofoniin estettiin", + "Microphone either not available or disabled in settings" : "Mikrofoni ei ole käytettävissä tai se on poistettu käytöstä asetuksista", + "Error while recording audio" : "Virhe äänittäessä", + "New file" : "Uusi tiedosto", + "Blank" : "Tyhjä", + "Error while creating file" : "Virhe tiedostoa luotaessa", + "Create and share a new file" : "Luo ja jaa uusi tiedosto", + "Name of the new file" : "Uuden tiedoston nimi", + "Create file" : "Luo tiedosto", + "Someone is typing …" : "Joku kirjoittaa…", + "{user1} is typing …" : "{user1} kirjoittaa…", + "{user1} and {user2} are typing …" : "{user1} ja {user2} kirjoittavat…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ja {user3} kirjoittavat…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ja %n muu kirjoittavat…","{user1}, {user2}, {user3} ja %n muuta kirjoittavat…"], + "Add more files" : "Lisää enemmän tiedostoja", + "Send" : "Lähetä", + "In this conversation {user} can:" : "Tässä keskustelussa käyttäjä {user} voi:", + "Start a call" : "Aloita puhelu", + "Skip the lobby" : "Ohita aula", + "Can post messages and reactions" : "Voi lähettää viestejä ja reaktioita", + "Enable the microphone" : "Ota mikrofoni käyttöön", + "Enable the camera" : "Ota kamera käyttöön", + "Share the screen" : "Jaa näyttö", + "Update permissions" : "Päivitä oikeudet", + "Updating permissions" : "Päivitetään oikeudet", + "Create poll" : "Luo kysely", + "Question" : "Kysymys", + "Ask a question" : "Esitä kysymys", + "Answers" : "Vastaukset", + "Answer {option}" : "Vastaus {option}", + "Add answer" : "Lisää vastaus", + "Settings" : "Asetukset", + "Anonymous poll" : "Anonyymi kysely", + "Multiple answers" : "Useita vastauksia", + "You voted for this option" : "Äänestit tätä vaihtoehtoa", + "End poll" : "Lopeta kysely", + "Change your vote" : "Muuta antamaasi ääntä", + "Results" : "Tulokset", + "Send a message to \"{roomName}\"" : "Lähetä viesti huoneeseen \"{roomName}\"", + "Hide list of participants" : "Piilota osallistujaluettelo", + "Show list of participants" : "Näytä osallistujaluettelo", + "Assistance requested in {roomName}" : "Apua pyydetty pienryhmätilassa {roomName}", + "The message was sent to \"{roomName}\"" : "Viesti lähetettiin huoneeseen \"{roomName}\"", + "Send message to room" : "Lähetä viesti huoneeseen", + "Back to main room" : "Takaisin päähuoneeseen", + "Back to your room" : "Takaisin omaan huoneeseen", + "Message all rooms" : "Viesti kaikkiin huoneisiin", + "Start session" : "Aloita istunto", + "Stop session" : "Pysäytä istunto", + "The message was sent to all breakout rooms" : "Viesti lähetettiin kaikkiin pienryhmätiloihin.", + "Send a message to all breakout rooms" : "Lähetä viesti kaikkiin pienryhmätiloihin", + "Disable lobby" : "Poista aula käytöstä", + "Settings for participant \"{user}\"" : "Osallistujen \"{user}\" asetukset", + "Participant \"{user}\"" : "Osallistuja \"{user}\"", + "moderator" : "moderaattori", + "guest" : "vieras", + "Ringing …" : "Soitetaan…", + "Call rejected" : "Puhelu hylätty", + "Raised their hand" : "Nosti kätensä", + "Joined with video" : "Liittyi videon kera", + "Joined via phone" : "Liittyi puhelimen kautta", + "Joined with audio" : "Liittyi äänen kera", + "Remove group and members" : "Poista ryhmä ja jäsenet", + "Remove team and members" : "Poista tiimi ja jäsenet", + "Remove participant" : "Poista osallistuja", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Haluatko varmasti poistaa ryhmän \"{displayName}\" ja sen jäsenet tästä kesksutelusta?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Haluatko varmasti poistaa tiimin \"{displayName}\" ja sen jäsenet tästä kesksutelusta?", + "Notification was sent to {displayName}" : "Ilmoitus lähetettiin käyttäjälle {displayName}", + "Phone number copied to clipboard" : "Puhelinnumero kopioitu leikepöydälle", + "Phone number could not be copied" : "Puhelinnumeroa ei voitu kopioida", + "Dial-in PIN" : "Sisäänsoiton PIN-koodi", + "Demote from moderator" : "Alenna moderaattorista", + "Promote to moderator" : "Ylennä moderaattoriksi", + "Resend invitation" : "Lähetä kutsu uudelleen", + "Send call notification" : "Lähetä puheluilmoitus", + "Put phone number on hold" : "Aseta puhelinnumero pitoon", + "Mute phone number" : "Mykistä puhelinnumero", + "Copy phone number" : "Kopioi puhelinnumero", + "Grant all permissions" : "Myönnä kaikki oikeudet", + "Remove all permissions" : "Poista kaikki oikeudet", + "Remove" : "Poista", + "Add users, groups or teams" : "Lisää käyttäjiä, ryhmiä tai tiimejä", + "Add users or groups" : "Lisää käyttäjiä tai ryhmiä", + "Add users or teams" : "Lisää käyttäjiä tai tiimejä", + "Add users" : "Lisää käyttäjiä", + "Add groups or teams" : "Lisää ryhmiä tai tiimejä", + "Add groups" : "Lisää ryhmiä", + "Add teams" : "Lisää tiimejä", + "Add other sources" : "Lisää muita lähteitä", + "Add emails" : "Lisää sähköpostiosoitteita", + "Integrations" : "Integraatiot", + "Add federated users" : "Lisää federoituja käyttäjiä", + "Searching …" : "Haetaan…", + "Search for more users" : "Etsi lisää käyttäjiä", + "Search or add participants" : "Etsi tai lisää osallistujia", + "Invitation was sent to {actorId}" : "Kutsu lähetettiin käyttäjälle {actorId}", + "An error occurred while adding the participants" : "Virhe osallistujia lisätessä", + "Participants" : "Osallistujat", + "Participants ({count})" : "Osallistujat ({count})", + "Open chat" : "Avaa keskustelu", + "You have new unread messages in the chat." : "Keskustelussa on uusia lukemattomia viestejä.", + "You have been mentioned in the chat." : "Sinut on mainittu keskustelussa.", + "Chat" : "Keskustelu", + "Details" : "Tiedot", + "Shared items" : "Jaetut tietueet", + "No results found" : "Ei tuloksia", + "Load more results" : "Lataa lisää tuloksia", + "Projects" : "Projektit", + "No shared items" : "Ei jaettuja kohteita", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Linkki keskusteluun", + "No open conversations found" : "Avoimia keskusteluja ei löytynyt", + "Search conversations or users" : "Hae keskusteluja tai käyttäjiä", + "Select conversation" : "Valitse keskustelu", + "Number length is not valid" : "Numeron pituus on virheellinen", + "Number is not valid" : "Numero ei ole kelvollinen", + "Phone numbers" : "Puhelinnumerot", + "Display name: {name}" : "Näyttönimi: {name}", + "Edit display name" : "Muokkaa näyttönimeä", + "Save name" : "Tallenna nimi", + "Error while saving sounds setting" : "Virhe ääniasetuksia tallentaessa", + "Compact conversations list" : "Tiivis keskustelunäkymä", + "Chat appearance" : "Keskustelun ulkoasu", + "Play sounds when participants join or leave a call" : "Toista ääni kun osallistuja liittyy tai poistuu puhelusta", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Ei saatavilla tällä hetkellä iPhonelle tai iPadille valmistajan asettamien teknisten rajoitusten vuoksi", + "Notification settings" : "Ilmoitusasetukset", + "Sounds for chat and call notifications" : "Ääniasetukset keskustelu- ja puheluilmoituksille", + "Default language" : "Oletuskieli", + "Select location for attachments" : "Valitse sijainti liitteille", + "Error while setting attachment folder" : "Virhe asettaessa liitekansiota", + "Turn camera and microphone off by default" : "Kamera ja mikrofoni oletuksena pois päältä", + "Blur camera background by default" : "Kameran taustan sumennus oletuksena", + "Skip device preview before joining a call" : "Ohita laiteasetusten esikatselu ennen puheluun liittymistä", + "Appearance & Sounds" : "Ulkoasu & äänet", + "Privacy" : "Yksityisyys", + "Send read receipts" : "Lähetä \"luettu\" -kuittaukset", + "When off, all read statuses will be hidden" : "Kun pois päältä, kaikki viestien \"luettu\" -kuittaukset piilotetaan", + "Share typing status" : "Jaa \"kirjoittaa\" -ilmoitukset", + "When off, all typing indicators will be hidden" : "Kun pois päältä, kaikki \"kirjoittaa\" -ilmoitukset piilotetaan", + "Attachments folder" : "Liitteiden kansio", + "Toggle full screen" : "Koko näyttö päälle/pois", + "Return to Home screen" : "Palaa kotinäkymään", + "Search" : "Etsi", + "Shortcuts while in a chat" : "Pikanäppäimet keskustelussa", + "Focus the chat input" : "Kohdista keskustelun syötteeseen", + "Unfocus the chat input to use shortcuts" : "Poista kohdistus keskustelusta käyttääksesi pikanäppäimiä", + "Edit your last message" : "Muokkaa viimeistä viestiäsi", + "Shortcuts while in a call" : "Pikanäppäimet puhelun aikana", + "Camera on and off" : "Kamera päälle tai pois päältä", + "Microphone on and off" : "Mikrofoni päälle tai pois päältä", + "Raise or lower hand" : "Nosta tai laske käsi", + "Push to talk or push to mute" : "Paina puhuaksesi tai mykistääksesi", + "Zoom-in / zoom-out a screen share" : "Lähennä tai loitonna näytönjakoa", + "Start call silently" : "Aloita puhelu hiljennettynä", + "Start call" : "Aloita puhelu", + "End call" : "Lopeta puhelu", + "End call for everyone" : "Päätä puhelu kaikkien osalta", + "The call has been running for one hour." : "Tämä puhelu on kestänyt yhden tunnin.", + "Stop recording" : "Lopeta tallennus", + "Send a reaction" : "Lähetä reaktio", + "React with {reaction}" : "Reagoi käyttäen {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n osallistuja puhelussa","%n osallistujaa puhelussa"], + "You are not allowed to enable screensharing" : "Sinulla ei ole oikeutta ottaa näytönjakamista käyttöön", + "No screensharing" : "Ei näytönjakamista", + "Screensharing options" : "Näytönjakamisen valinnat", + "Enable screensharing" : "Ota käyttöön näytönjakaminen", + "Bad sent video and screen quality." : "Heikko lähetetyn videon ja näytön laatu.", + "Bad sent screen quality." : "Heikko lähetetyn näytön laatu.", + "Bad sent video quality." : "Heikko lähetetyn videon laatu.", + "Bad sent audio, video and screen quality." : "Heikko lähetetyn äänen, videon ja näytön laatu.", + "Bad sent audio and screen quality." : "Heikko lähetetyn äänen ja näytön laatu.", + "Bad sent audio and video quality." : "Heikko lähetetyn äänen ja videon laatu.", + "Bad sent audio quality." : "Heikko lähetetyn äänen laatu.", + "Disable background blur" : "Poista taustan sumennus käytöstä", + "Disable screenshare" : "Poista käytöstä näytönjakaminen", + "Screen sharing is not supported by your browser." : "Selaimesi ei tue näytönjakoa.", + "Screen sharing requires the page to be loaded through HTTPS." : "Näytön jakaminen vaatii sivun lataamista HTTPS-protokollalla.", + "Screensharing requires the page to be loaded through HTTPS." : "Näytön jakaminen vaatii sivun lataamista HTTPS-protokollalla.", + "An error occurred while starting screensharing." : "Virhe aloitettaessa näytön jakamista.", + "Show your screen" : "Näytä oma näyttösi", + "Stop screensharing" : "Lopeta näytön jakaminen", + "Mute others" : "Mykistä muut", + "Start recording" : "Käynnistä tallennus", + "Set up breakout rooms" : "Määritä pienryhmätilat", + "Open Calendar" : "Avaa kalenteri", + "Remove participant {name}" : "Poista osallistuja {name}", + "Open dialpad" : "Avaa numeronäppäimistö", + "Select a region" : "Valitse alue", + "Search …" : "Hae…", + "Message without mention" : "Viesti ilman mainintaa", + "Mention myself" : "Mainitse itsesi", + "Mention everyone" : "Mainitse kaikki", + "Select a conversation" : "Valitse keskustelu", + "The conversation does not exist" : "Tätä keskustelua ei ole olemassa", + "Join a conversation or start a new one!" : "Liity keskusteluun tai aloita uusi keskustelu!", + "Join a conversation or start a new one" : "Liity keskusteluun tai aloita uusi", + "Nextcloud URL" : "Nextcloudin URL-osoite", + "Nextcloud user" : "Nextcloud-käyttäjä", + "User password" : "Käyttäjän salasana", + "Talk conversation" : "Talk-keskustelu", + "Skip TLS verification" : "Ohita TLS-vahvistus", + "Matrix server URL" : "Matrix-palvelimen URL-osoite", + "User" : "Käyttäjä", + "Matrix channel" : "Matrix-kanava", + "Mattermost server URL" : "Mattermost-palvelimen URL-osoite", + "Mattermost user" : "Mattermost-käyttäjä", + "Team name" : "Tiimin nimi", + "Channel name" : "Kanavan nimi", + "Rocket.Chat server URL" : "Rocket.Chat-palvelimen URL-osoite", + "User name or email address" : "Käyttäjänimi tai sähköpostiosoite", + "Rocket.Chat channel" : "Rocket.Chat-kanava", + "Zulip server URL" : "Zulip-palvelimen URL-osoite", + "Bot user name" : "Botin käyttäjätunnus", + "Bot API key" : "Botin rajapinta-avain", + "API token" : "API-poletti", + "Slack channel" : "Slack-kanava", + "Channel" : "Kanava", + "Login" : "Kirjaudu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC-palvelimen URL-osoite (e.g. chat.freenode.net:6667)", + "Nickname" : "Nimimerkki", + "Connection password" : "Yhteyden salasana", + "IRC channel" : "IRC-kanava", + "Channel password" : "Kanavan salasana", + "NickServ nickname" : "NickServ-nimimerkki", + "NickServ password" : "NickServ-salasana", + "Use TLS" : "Käytä TLS:ää", + "Use SASL" : "Käytä SASL:ia", + "Client ID" : "Asiakkaan tunniste", + "XMPP/Jabber server URL" : "XMPP-/Jabber-palvelimen URL-osoite", + "MUC server URL" : "MUC-palvelimen URL-osoite", + "Media" : "Media", + "Polls" : "Kyselyt", + "Voice messages" : "Ääniviestit", + "Locations" : "Sijainnit", + "Call recordings" : "Puhelutallenteet", + "Audio" : "Ääni", + "Show all media" : "Näytä kaikki media", + "Show all files" : "Näytä kaikki tiedostot", + "Show all polls" : "Näytä kaikki kyselyt", + "Show all voice messages" : "Näytä kaikki ääniviestit", + "Show all locations" : "Näytä kaikki sijainnit", + "Show all call recordings" : "Näytä kaikki puhelutallenteet", + "Show all audio" : "Näytä kaikki ääni", + "Show all other" : "Näytä kaikki muu", + "Group" : "Ryhmä", + "Team" : "Tiimi", + "You reconnected to the call" : "Yhdistit uudelleen puheluun", + "{actor} reconnected to the call" : "{actor} yhdisti uudelleen puheluun", + "You added {user0} and {user1}" : "Lisäsit käyttäjät {user0} ja {user1}", + "{user0} and {user1} joined the call" : "{user0} ja {user1} liittyivät puheluun", + "You: {lastMessage}" : "Sinä: {lastMessage}", + "(edited by you)" : "(muokattu toimestasi)", + "(edited by a deleted user)" : "(muokattu poistetun käyttäjän toimesta)", + "Leave this page" : "Poistu tältä sivulta", + "Join here" : "Liity tähän", + "Post to a conversation" : "Lähetä keskusteluun", + "Post to conversation" : "Lähetä keskusteluun", + "The recording failed. Please contact your administrator." : "Tallennus epäonnistui. Ole yhteydessä ylläpitoon.", + "Share to a conversation" : "Jaa keskusteluun", + "Share to conversation" : "Jaa keskusteluun", + "Search in conversation: {conversation}" : "Etsi keskustelusta: {conversation}", + "Error while clearing conversation history" : "Virhe keskusteluhistoriaa siivotessa", + "Error occurred while allowing guests" : "Virhe vieraita salliessa", + "Conversation password has been saved" : "Keskustelun salasana on tallennettu", + "Conversation password has been removed" : "Keskustelun salasana on poistettu", + "Error occurred while saving conversation password" : "Virhe tallentaessa keskustelun salasanaa", + "Call recording is starting." : "Puhelun tallennus käynnistyy.", + "Call recording stopped. You will be notified once the recording is available." : "Puhelun tallennus lopetettiin. Saat ilmoituksen, kun tallenne on saatavilla.", + "Conversation picture set" : "Keskustelun kuva asetettu", + "Conversation picture deleted" : "Keskustelun kuva poistettu", + "Could not delete the conversation picture" : "Keskustelun kuvaa ei voitu poistaa", + "Could not post message: {errorMessage}" : "Ei voitu lähettää viestiä: {errorMessage}", + "An error occurred while fetching the participants" : "Virhe osallistujia noudettaessa", + "Invitations sent" : "Kutsut lähetetty", + "Error occurred when sending invitations" : "Kutsujen lähetyksessä tapahtui virhe", + "An error occurred while creating breakout rooms" : "Pienryhmätiloja luotaessa tapahtui virhe", + "{guest} (guest)" : "{guest} (vieras)", + "Failed to add reaction" : "Reaktion lisääminen epäonnistui", + "Failed to remove reaction" : "Reaktion poistaminen epäonnistui", + "Error while uploading file \"{fileName}\"" : "Virhe lähettäessä tiedostoa \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Ei riittävästi tallennustilaa tiedoston \"{fileName}\" lähettämiseksi", + "You are not allowed to share files" : "Sinulla ei ole oikeutta jakaa tiedostoja", + "Error while sharing file" : "Virhe tiedostoa jakaessa", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk ei tue täysin käyttämääsi selainta. Käytä uusinta versiota Mozilla Firefoxista, Microsoft Edgestä, Google Chromesta, Operasta tai Apple Safarista.", + "Later today – {timeLocale}" : "Myöhemmin tänään – {timeLocale}", + "Tomorrow – {timeLocale}" : "Huomenna – {timeLocale}", + "This weekend – {timeLocale}" : "Tämä viikonloppu – {timeLocale}", + "Next week – {timeLocale}" : "Ensi viikko – {timeLocale}", + "Message link copied to clipboard" : "Viestin linkki kopioitu leikepöydälle", + "Conversation link copied to clipboard" : "Keskustelulinkki kopioitu leikepöydälle", + "The link could not be copied" : "Linkkiä ei voitu kopioida", + "Please reload the page." : "Päivitä sivu.", + "Do not disturb" : "Älä häiritse", + "Away" : "Poissa", + "Microphone {number}" : "Mikrofoni {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Kaiutin {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Vaikuttaa siltä, että puhut vaikka sinut on mykistetty. Poista mykistys, jotta muut kuulevat sinut", + "Access to microphone & camera is only possible with HTTPS" : "Kameran ja mikrofonin käyttäminen on mahdollista vain käytettäessä HTTPS-protokollaa", + "Please move your setup to HTTPS" : "Siirrä asetuksesi HTTPS:n taakse", + "Access to microphone & camera was denied" : "Yhteys mikrofoniin ja kameraan estettiin", + "WebRTC is not supported in your browser" : "WebRTC ei ole tuettuna selaimessasi", + "Please use a different browser like Firefox or Chrome" : "Käytä jotain toista selainta, kuten Firefoxia tai Chromea", + "Error while accessing microphone & camera" : "Virhe yhdistettäessä mikrofoniin ja kameraan", + "%s Talk on your mobile devices" : "%s Keskustele mobiililaitteillasi", + "Join conversations at any time, anywhere, on any device." : "Liity keskusteluihin milloin tahansa, mistä tahansa ja miltä tahansa laitteelta.", + "Android app" : "Android-sovellus", + "iOS app" : "iOS-sovellus", + "__language_name__" : "suomi", + "Call summary (%s)" : "Puhelun yhteenveto (%s)", + "Tasks" : "Tehtävät", + "Notes" : "Muistiinpanot", + "Reports" : "Raportit", + "Call summary" : "Puhelun yhteenveto", + "Call summary - {title}" : "Puhelun yhteenveto - {title}", + "Talk conversation for event" : "Tapahtuman Talk-keskustelu", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Sovi tapaaminen kalenterissasi. Talk-keskustelu pitää asettaa sijainniksi, jotta se näkyy tässä", + "Set reminder for later today" : "Aseta muistutus myöhemmälle ajankohdalle tälle päivälle", + "Set reminder for tomorrow" : "Aseta muistutus huomiselle", + "Set reminder for this weekend" : "Aseta muistutus tälle viikonlopulle", + "Set reminder for next week" : "Aseta muistutus seuraavalle viikolle", + "Talk recording from {time} ({conversation})" : "Äänitallenne {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Kyselyn tulokset • %n ääni","Kyselyn tulokset • %n ääntä"], + "Submit vote" : "Lähetä ääni", + "Your privacy setting has been saved" : "Yksityisyysasetuksesi on tallennettu", + "Failed to save sounds setting" : "Ääniasetusten tallentaminen epäonnistui", + "Sounds setting saved" : "Ääniasetukset tallennettu", + "Always shown if recording consent is required" : "Näytetään aina, jos tarvitaan suostumus äänitykseen", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Liityit keskusteluun toisessa ikkunassa tai toisella laitteella. Tämä ei ole tällä hetkellä tuettua Nextcloud Talkissa, joten tämä istunto suljettiin." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/fi.json b/l10n/fi.json new file mode 100644 index 0000000..dff4281 --- /dev/null +++ b/l10n/fi.json @@ -0,0 +1,1334 @@ +{ "translations": { + "a conversation" : "keskustelu", + "(Duration %s)" : "(Kesto %s)", + "You attended a call with {user1}" : "Osallistuit puheluun käyttäjän {user1} kanssa", + "_%n guest_::_%n guests_" : ["%n vieras","%n vierasta"], + "You attended a call with {user1} and {user2}" : "Osallistuit puheluun käyttäjien {user1} ja {user2} kanssa", + "You attended a call with {user1}, {user2} and {user3}" : "Osallistuit puheluun käyttäjien {user1}, {user2} ja {user3} kanssa", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Osallistuit puheluun käyttäjien {user1}, {user2}, {user3} ja {user4} kanssa", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Osallistuit puheluun käyttäjien {user1}, {user2}, {user3}, {user4} ja {user5} kanssa", + "_%n other_::_%n others_" : ["%n muu","%n muuta"], + "{actor} invited you to {call}" : "{actor} kutsui sinut puheluun {call}", + "You were invited to a conversation or had a call" : "Sinut kutsuttiin keskusteluun tai olit puhelussa", + "Other activities" : "Muut tapahtumat", + "Talk" : "Talk", + "Guest" : "Vieras", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Tervetuloa, tämä on Nextcloud Talk!\nTässä keskustelussa sinulle kerrotaan, mitä uusia ominaisuuksia Nextcloud Talk sisältää.", + "## New in Talk %s" : "## Uutta Talkin versiossa %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Voit käyttää Microsoft Edgeä ja Safaria ääni- ja videopuheluihin osallistumiseen", + "- Raise your hand in a call with the R key" : "- Nosta kätesi puhelussa R-näppäimellä", + "- In the sidebar you can now find an overview of the latest shared items" : "- Löydät sivupalkista yleiskatsauksen viimeksi jaettuihin kohteisiin", + "- Set a reminder on a chat message to be notified later again" : "- Aseta keskustelussa olevaan viestiin muistutus, jotta saat siitä ilmoituksen myöhemmin", + "Talk updates ✅" : "Talk-päivitykset ✅", + "{actor} created the conversation" : "{actor} loi keskustelun", + "You created the conversation" : "Sinä loit keskustelun", + "System created the conversation" : "Järjestelmä loi keskustelun", + "An administrator created the conversation" : "Ylläpitäjä loi keskustelun", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} muutti keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Sinä muutit keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ylläpitäjä muutti keskustelun \"%1$s\" uudeksi nimeksi \"%2$s\"", + "{actor} set the description" : "{actor} asetti kuvauksen", + "You set the description" : "Sinä asetit kuvauksen", + "An administrator set the description" : "Ylläpitäjä asetti kuvauksen", + "{actor} removed the description" : "{actor} poisti kuvauksen", + "You removed the description" : "Sinä poistit kuvauksen", + "An administrator removed the description" : "Ylläpitäjä poisti kuvauksen", + "You started a call" : "Sinä aloitit puhelun", + "{actor} started a call" : "{actor} aloitti puhelun", + "{actor} joined the call" : "{actor} liittyi puheluun", + "You joined the call" : "Sinä liityit puheluun", + "{actor} left the call" : "{actor} poistui puhelusta", + "You left the call" : "Sinä poistuit puhelusta", + "{actor} unlocked the conversation" : "{actor} poisti keskustelun lukituksen", + "You unlocked the conversation" : "Poistit keskustelun lukituksen", + "An administrator unlocked the conversation" : "Ylläpitäjä poisti keskustelun lukituksen", + "{actor} locked the conversation" : "{actor} lukitsi keskustelun", + "You locked the conversation" : "Sinä lukitsit keskustelun", + "An administrator locked the conversation" : "Ylläpitäjä lukitsi keskustelun", + "{actor} limited the conversation to the current participants" : "{actor} rajoitti keskustelun nykyisiin osallistujiin", + "You limited the conversation to the current participants" : "Rajoitit keskustelun nykyisiin osallistujiin", + "An administrator limited the conversation to the current participants" : "Ylläpitäjä rajoitti keskustelun nykyisiin osallistujiin", + "{actor} opened the conversation to registered users" : "{actor} avasi keskustelun rekisteröityneille käyttäjille", + "You opened the conversation to registered users" : "Avasit keskustelun rekisteröityneille käyttäjille", + "An administrator opened the conversation to registered users" : "Ylläpitäjä avasi keskustelun rekisteröityneille käyttäjille", + "The conversation is now open to everyone" : "Keskustelu on nyt avoin kaikille", + "{actor} opened the conversation to everyone" : "{actor} avasi keskustelun kaikille", + "You opened the conversation to everyone" : "Avasit uuden keskustelun kaikille", + "{actor} restricted the conversation to moderators" : "{actor} rajoitti keskustelun moderaattoreille", + "You restricted the conversation to moderators" : "Rajoitit keskustelun moderaattoreille", + "{actor} started breakout rooms" : "{actor} käynnisti pienryhmätilat", + "You started breakout rooms" : "Käynnistit pienryhmätilat", + "{actor} stopped breakout rooms" : "{actor} pysäytti pienryhmätilat", + "You stopped breakout rooms" : "Pysäytit pienryhmätilat", + "{actor} allowed guests" : "{actor} salli vieraat", + "You allowed guests" : "Sinä sallit vieraat", + "An administrator allowed guests" : "Ylläpitäjä salli vieraat", + "{actor} disallowed guests" : "{actor} esti vieraat", + "You disallowed guests" : "Sinä estit vieraat", + "An administrator disallowed guests" : "Ylläpitäjä ei sallinut vieraita", + "{actor} set a password" : "{actor} asetti salasanan", + "You set a password" : "Sinä asetit salasanan", + "An administrator set a password" : "Ylläpitäjä asetti salasanan", + "{actor} removed the password" : "{actor} poisti salasanan", + "You removed the password" : "Sinä poistit salasanan", + "An administrator removed the password" : "Ylläpitäjä poisti salasanan", + "{actor} added {user}" : "{actor} lisäsi käyttäjän {user}", + "You joined the conversation" : "Liityit keskusteluun", + "{actor} joined the conversation" : "{actor} liittyi keskusteluun", + "You added {user}" : "Sinä lisäsit käyttäjän {user}", + "{actor} added you" : "{actor} lisäsi sinut", + "An administrator added you" : "Ylläpitäjä lisäsi sinut", + "An administrator added {user}" : "Ylläpitäjä lisäsi käyttäjän {user}", + "You left the conversation" : "Poistuit keskustelusta", + "{actor} left the conversation" : "{actor} poistui keskustelusta", + "{actor} removed {user}" : "{actor} poisti käyttäjän {user}", + "You removed {user}" : "Sinä poistit käyttäjän {user}", + "{actor} removed you" : "{actor} poisti sinut", + "An administrator removed you" : "Ylläpitäjä lisäsi sinut", + "An administrator removed {user}" : "Ylläpitäjä poisti käyttäjän {user}", + "{actor} invited {federated_user}" : "{actor} kutsui käyttäjän {federated_user}", + "You invited {federated_user}" : "Kutsuit käyttäjän {federated_user}", + "You accepted the invitation" : "Hyväksyit kutsun", + "{actor} invited you" : "{actor} kutsui sinut", + "An administrator invited you" : "Ylläpitäjä kutsui sinut", + "An administrator invited {federated_user}" : "Ylläpitäjä kutsui käyttäjän {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} hyväksyi kutsun", + "{actor} removed {federated_user}" : "{actor} poisti käyttäjän {federated_user}", + "You removed {federated_user}" : "Poistit käyttäjän {federated_user}", + "An administrator removed {federated_user}" : "Ylläpitäjä poisti käyttäjän {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} kieltäytyi kutsusta", + "{actor} added group {group}" : "{actor} lisäsi ryhmän {group}", + "You added group {group}" : "Lisäsit ryhmän {group}", + "An administrator added group {group}" : "Ylläpitäjä lisäsi ryhmän {group}", + "{actor} removed group {group}" : "{actor} poisti ryhmän {group}", + "You removed group {group}" : "Poistit ryhmän {group}", + "An administrator removed group {group}" : "Ylläpitäjä poisti ryhmän {group}", + "{actor} added team {circle}" : "{actor} lisäsi tiimin {circle}", + "You added team {circle}" : "Lisäsit tiimin {circle}", + "An administrator added team {circle}" : "Ylläpitäjä lisäsi tiimin {circle}", + "{actor} removed team {circle}" : "{actor} poisti tiimin {circle}", + "You removed team {circle}" : "Poistit tiimin {circle}", + "An administrator removed team {circle}" : "Ylläpitäjä poisti tiimin {circle}", + "{actor} added {phone}" : "{actor} lisäsi puhelimen {phone}", + "You added {phone}" : "Lisäsit puhelimen {phone}", + "An administrator added {phone}" : "Ylläpitäjä lisäsi puhelimen {phone}", + "{actor} removed {phone}" : "{actor} poisti puhelimen {phone}", + "You removed {phone}" : "Poistit puhelimen {phone}", + "An administrator removed {phone}" : "Ylläpitäjä poisti puhelimen {phone}", + "{actor} promoted {user} to moderator" : "{actor} nosti käyttäjän {user} moderaattoriksi", + "You promoted {user} to moderator" : "Sinä nostit käyttäjän {user} moderaattoriksi", + "{actor} promoted you to moderator" : "{actor} nosti sinut moderaattoriksi", + "An administrator promoted you to moderator" : "Ylläpitäjä nosti sinut moderaattoriksi", + "An administrator promoted {user} to moderator" : "Ylläpitäjä nosti käyttäjän {user} moderaattoriksi", + "{actor} demoted {user} from moderator" : "{actor} poisti moderaattorin oikeudet käyttäjältä {user}", + "You demoted {user} from moderator" : "Sinä poistit moderaattorin oikeudet käyttäjältä {user}", + "{actor} demoted you from moderator" : "{actor} poisti sinulta moderaattorin oikeudet", + "{actor} shared a file which is no longer available" : "{actor} jakoi kanssasi tiedoston, joka ei ole enää saatavilla", + "You shared a file which is no longer available" : "Jaoit tiedoston, joka ei ole enää saatavilla", + "{actor} updated the Matterbridge configuration" : "{actor} päivitti Matterbridge-kokoonpanon", + "You updated the Matterbridge configuration" : "Päivitit Matterbridge-kokoonpanon", + "{actor} removed the Matterbridge configuration" : "{actor} poisti Matterbridge-kokoonpanon", + "You removed the Matterbridge configuration" : "Poistit Matterbridge-kokoonpanon", + "{actor} started Matterbridge" : "{actor} käynnisti Matterbridgen", + "You started Matterbridge" : "Käynnistit Matterbridgen", + "{actor} stopped Matterbridge" : "{actor} pysäytti Matterbridgen", + "You stopped Matterbridge" : "Pysäytit Matterbridgen", + "{actor} deleted a message" : "{actor} poisti viestin", + "You deleted a message" : "Sinä poistit viestin", + "{actor} edited a message" : "{actor} muokkasi viestiä", + "You edited a message" : "Sinä muokkasit viestiä", + "{actor} deleted a reaction" : "{actor} poisti reaktion", + "You deleted a reaction" : "Poistit reaktion", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Asetit viestin vanhenemisen %n viikkoon","Asetit viestin vanhenemisen %n viikkoon"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Asetit viestin vanhenemisen %n päivään","Asetit viestin vanhenemisen %n päivään"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Asetit viestin vanhenemisen %n tuntiin","Asetit viestin vanhenemisen %n tuntiin"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Asetit viestin vanhenemisen %n minuuttiin","Asetit viestin vanhenemisen %n minuuttiin"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} asetti viestin vanhenemisen %n viikkoon","{actor} asetti viesti vanhenemisen %n viikkoon"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} asetti viesti vanhenemisen %n päivään","{actor} asetti viesti vanhenemisen %n päivään"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} asetti viesti vanhenemisen %n tuntiin","{actor} asetti viesti vanhenemisen %n tuntiin"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} asetti viesti vanhenemisen %n minuuttiin","{actor} asetti viesti vanhenemisen %n minuuttiin"], + "{actor} disabled message expiration" : "{actor} poisti käytöstä viestien vanhenemisen", + "You disabled message expiration" : "Poistit käytöstä viestien vanhenemisen", + "{actor} cleared the history of the conversation" : "{actor} tyhjensi keskusteluhistorian", + "You cleared the history of the conversation" : "Sinä tyhjensit keskusteluhistorian", + "{actor} set the conversation picture" : "{actor} asetti keskustelun kuvan", + "You set the conversation picture" : "Asetit keskustelun kuvan", + "{actor} removed the conversation picture" : "{actor} poisti keskustelun kuvan", + "You removed the conversation picture" : "Poistit keskustelun kuvan", + "{actor} ended the poll {poll}" : "{actor} lopetti kyselyn {poll}", + "You ended the poll {poll}" : "Lopetit kyselyn {poll}", + "{actor} started the video recording" : "{actor} aloitti videotallennuksen", + "You started the video recording" : "Aloitit videotallennuksen", + "{actor} stopped the video recording" : "{actor} lopetti videotallennuksen", + "You stopped the video recording" : "Lopetit videotallennuksen", + "{actor} started the audio recording" : "{actor} aloitti äänitallennuksen", + "You started the audio recording" : "Aloitit äänitallennuksen", + "{actor} stopped the audio recording" : "{actor} lopetti äänitallennuksen", + "You stopped the audio recording" : "Lopetit äänitallennuksen", + "The recording failed" : "Tallenne epäonnistui", + "Someone voted on the poll {poll}" : "Joku äänesti kyselyssä {poll}", + "Message deleted by author" : "Viestin lähettäjä poisti viestin", + "Deleted user" : "Poistettu käyttäjä", + "Unknown number" : "Tuntematon numero", + "Administration" : "Ylläpito", + "System" : "Järjestelmä", + "%s (guest)" : "%s (vieras)", + "Message of {user} in {conversation}" : "Käyttäjän {user} viesti keskustelussa {conversation}", + "Message of {user}" : "Käyttäjän {user} viesti", + "Message of a deleted user in {conversation}" : "Poistetun käyttäjän viesti keskustelussa {conversation}", + "Talk conversations" : "Talk-keskustelut", + "An error occurred. Please contact your administrator." : "Tapahtui virhe. Ole yhteydessä ylläpitäjään.", + "Storage quota exceeded" : "Tallennustilan kiintiö täynnä", + "File not found" : "Tiedostoa ei löytynyt", + "File is not shared, or shared but not with the user" : "Tiedosto ei ole jaettu, tai jaettu mutta ei kyseisen käyttäjän kanssa", + "Poll" : "Kysely", + "No image file provided" : "Kuvatiedostoa ei määritetty", + "File is too big" : "Tiedosto on liian suuri", + "Invalid file provided" : "Virheellinen tiedosto määritetty", + "Invalid image" : "Virheellinen kuva", + "Unknown filetype" : "Tuntematon tiedostotyyppi", + "Talk mentions" : "Talk-maininnat", + "Say hi to your friends and colleagues!" : "Sano hei ystävillesi ja työkavereillesi!", + "No unread mentions" : "Ei lukemattomia mainintoja", + "Call in progress" : "Puhelu meneillään", + "You were mentioned" : "Sinut mainittiin", + "Write to conversation" : "Kirjoita keskusteluun", + "Conversation invitation" : "Keskustelukutsu", + "Description" : "Kuvaus", + "You can also dial-in via phone with the following details" : "Voit myös yhdistää puhelimella seuraavin tiedoin", + "Dial-in information" : "Puhelintiedot", + "Meeting ID" : "Tapaamisen tunniste", + "Your PIN" : "PIN-koodisi", + "Meeting" : "Kokous", + "Password request: %s" : "Salasanapyyntö: %s", + "Private conversation" : "Yksityinen keskustelu", + "Deleted user (%s)" : "Poistettiin käyttäjä (%s)", + "Share to chat" : "Jaa keskusteluun", + "Dismiss notification" : "Hylkää ilmoitus", + "Call recording now available" : "Puhelutallenne on nyt saatavilla", + "The recording for the call in {call} was uploaded to {file}." : "Puhelun {call} tallenne on nyt saatavilla tiedostona {file}.", + "Transcript now available" : "Transkriptio on nyt saatavilla", + "The transcript for the call in {call} was uploaded to {file}." : "Puhelun {call} transkriptio on nyt tiedostossa {file}.", + "Failed to transcript call recording" : "Puhelutallenteen transkriptio epäonnistui", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} kutsui sinut huoneeseen {roomName} palvelimella {remoteServer}", + "Accept" : "Hyväksy", + "Decline" : "Kieltäydy", + "{user1} invited you to a federated conversation" : "{user1} kutsui sinut federoituun keskusteluun", + "New message" : "Uusi viesti", + "Reminder" : "Muistutus", + "Notification" : "Ilmoitus", + "{user} in {call}" : "{user} puhelussa {call}", + "{guest} (guest) in {call}" : "{guest} (vieras) puhelussa {call}", + "Guest in {call}" : "Vieras puhelussa {call}", + "{user} sent you a private message" : "{user} lähetti sinulle yksityisviestin", + "{user} sent a message in conversation {call}" : "{user} lähetti viestin keskusteluun {call}", + "A deleted user sent a message in conversation {call}" : "Poistettu käyttäjä lähetti viestin keskusteluun {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (vieras) lähetti viestin keskusteluun {call}", + "A guest sent a message in conversation {call}" : "Vieras lähetti viestin keskusteluun {call}", + "{user} replied to your private message" : "{user} vastasi yksityisviestiisi", + "{user} replied to your message in conversation {call}" : "{user} vastasi viestiisi keskustelussa {call}", + "A guest replied to your message in conversation {call}" : "Vieras vastasi viestiisi keskustelussa {call}", + "{user} reacted with {reaction} to your private message" : "{user} vastasi reaktiolla {reaction} yksityisviestiisi", + "{user} mentioned you in a private conversation" : "{user} mainitsi sinut yksityiskeskustelussa", + "{user} mentioned group {group} in conversation {call}" : "{user} mainitsi ryhmän {group} keskustelussa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mainitsi kaikki keskustelussa {call}", + "{user} mentioned you in conversation {call}" : "{user} mainitsi sinut keskustelussa {call}", + "A deleted user mentioned you in conversation {call}" : "Poistettu käyttäjä mainitsi sinut keskustelussa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (vieras) mainitsi sinut keskustelussa {call}", + "A guest mentioned you in conversation {call}" : "Vieras mainitsi sinut keskustelussa {call}", + "View message" : "Näytä viesti", + "Dismiss reminder" : "Hylkää muistutus", + "View chat" : "Näytä keskustelu", + "{user} invited you to a group conversation: {call}" : "{user} kutsui sinut ryhmäkeskusteluun: {call}", + "Join call" : "Liity puheluun", + "Answer call" : "Vastaa puheluun", + "{user} would like to talk with you" : "{user} haluaa puhua kanssasi", + "Call back" : "Soita takaisin", + "You missed a call from {user}" : "Sinulta jäi vastaamatta puhelu käyttäjältä {user}", + "A group call has started in {call}" : "Ryhmäpuhelu on alkanut puhelussa {call}", + "{email} is requesting the password to access {file}" : "{email} pyytää salasanaa saadakseen pääsyn tiedostoon {file}", + "{email} tried to request the password to access {file}" : "{email} yritti pyytää salasanaa päästäkseen tiedostoon {file}", + "Someone is requesting the password to access {file}" : "Joku pyytää salasanaa päästäkseen tiedostoon {file}", + "Open settings" : "Avaa asetukset", + "error" : "virhe", + "The certificate of {host} expires in {days} days" : "Palvelimen {host} varmenne vanhenee {days} päivän kuluttua", + "The certificate of {host} expired" : "Palvelimen {host} varmenne vanheni", + "Open Talk" : "Avaa Talk", + "Default" : "Oletus", + "Presentation" : "Esitys", + "Conversations" : "Keskustelut", + "Messages in current conversation" : "Viestit nykyisessä keskustelussa", + "{user}" : "{user}", + "Messages" : "Viestit", + "{user} in {conversation}" : "{user} keskustelussa {conversation}", + "Messages in other conversations" : "Viestit muissa keskusteluissa", + "Invalid emoji character" : "Virheellinen emojimerkki", + "Invalid background color" : "Virheellinen taustaväri", + "Avatar image is not square" : "Avatar-kuva ei ole neliö", + "Room {number}" : "Huone {number}", + "Other" : "Muu", + "Something unexpected happened." : "Jotain odottamatonta tapahtui.", + "The URL is invalid." : "URL-osoite on virheellinen.", + "An HTTPS URL is required." : "URL-osoitteen on oltava HTTPS-muodossa.", + "The email address is invalid." : "Sähköpostiosoite on virheellinen.", + "The language is invalid." : "Kieli on virheellinen.", + "The country is invalid." : "Maa on virheellinen.", + "Something unexpected happened. Please try again later." : "Jotain odottamatonta tapahtui. Yritä myöhemmin uudelleen.", + "There is no such account registered." : "Kyseistä tiliä ei ole rekisteröity.", + "Note to self" : "Muistutus itselle", + "A place for your private notes, thoughts and ideas" : "Paikka henkilökohtaisille muistutuksille, ajatuksille ja ideoille", + "Andorra" : "Andorra", + "United Arab Emirates" : "Yhdistyneet arabiemiirikunnat", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ja Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Etelämanner", + "Argentina" : "Argentiina", + "American Samoa" : "Amerikan Samoa", + "Austria" : "Itävalta", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Ahvenanmaa", + "Azerbaijan" : "Azerbaidžan", + "Bosnia and Herzegovina" : "Bosnia ja Hertsegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ja Saba", + "Brazil" : "Brasilia", + "Bahamas" : "Bahamasaaret", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet'nsaari", + "Botswana" : "Botswana", + "Belarus" : "Valko-Venäjä", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kookossaaret", + "Central African Republic" : "Keski-Afrikan tasavalta", + "Congo" : "Kongo", + "Switzerland" : "Sveitsi", + "Côte d'Ivoire" : "Norsunluurannikko", + "Cook Islands" : "Cookinsaaret", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kiina", + "Colombia" : "Kolumbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Joulusaari", + "Cyprus" : "Kypros", + "Czechia" : "Tšekki", + "Germany" : "Saksa", + "Djibouti" : "Djibouti", + "Denmark" : "Tanska", + "Dominican Republic" : "Dominikaaninen tasavalta", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Viro", + "Egypt" : "Egypti", + "Eritrea" : "Eritrea", + "Spain" : "Espanja", + "Ethiopia" : "Etiopia", + "Finland" : "Suomi", + "Fiji" : "Fidži", + "Faroe Islands" : "Färsaaret", + "France" : "Ranska", + "Gabon" : "Gabon", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Ranskan Guayana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönlanti", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Päiväntasaajan Guinea", + "Greece" : "Kreikka", + "South Georgia and the South Sandwich Islands" : "Etelä-Georgia ja Eteläiset Sandwichsaaret", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard ja McDonaldinsaaret", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Unkari", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanti", + "Israel" : "Israel", + "Isle of Man" : "Mansaari", + "India" : "Intia", + "British Indian Ocean Territory" : "Brittiläinen Intian valtameren alue", + "Iraq" : "Irak", + "Iceland" : "Islanti", + "Italy" : "Italia", + "Jamaica" : "Jamaika", + "Jordan" : "Jordan", + "Japan" : "Japani", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgisia", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Saint Kitts and Nevis" : "Saint Kitts ja Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Caymansaaret", + "Kazakhstan" : "Kazakhstan", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Liettua", + "Luxembourg" : "Luxemburg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshallinsaaret", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Pohjois-Mariaanit", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediivit", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Malesia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Uusi-Kaledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkinsaari", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Alankomaat", + "Norway" : "Norja", + "Nepal" : "Nepali", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Uusi-Seelanti", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Ranskan Polynesia", + "Papua New Guinea" : "Papua-Uusi-Guinea", + "Philippines" : "Filippiinit", + "Pakistan" : "Pakistan", + "Poland" : "Puola", + "Saint Pierre and Miquelon" : "Saint Pierre ja Miquelon", + "Pitcairn" : "Pitcairnsaaret", + "Puerto Rico" : "Puerto Rico", + "Portugal" : "Portugali", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Venäjä", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudi-Arabia", + "Solomon Islands" : "Salomonsaaret", + "Seychelles" : "Seychellit", + "Sudan" : "Sudan", + "Sweden" : "Ruotsi", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ja Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Huippuvuoret ja Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Etelä-Sudan", + "Sao Tome and Principe" : "São Tomé ja Príncipe", + "El Salvador" : "El Salvador", + "Turks and Caicos Islands" : "Turks- ja Caicossaaret", + "Chad" : "Tšad", + "Togo" : "Togo", + "Thailand" : "Thaimaa", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Itä-Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkki", + "Trinidad and Tobago" : "Trinidad ja Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Yhdysvaltojen pienet syrjäiset saaret", + "United States of America" : "Yhdysvallat", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Saint Vincent and the Grenadines" : "Saint Vincent ja Grenadiinit", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ja Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Etelä-Afrikka", + "Zambia" : "Sambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federaatio", + "Error: Cannot connect to server" : "Virhe: Ei voi yhdistää palvelimeen", + "Error: Server did not respond with proper JSON" : "Virhe: Palvelin ei vastannut kelvollisella JSON:illa", + "Error: Certificate expired" : "Virhe: varmenne vanhentunut", + "Could not get version" : "Versiota ei saatu", + "Error: Server responded with: {error}" : "Virhe: palvelin vastasi: {error}", + "Error: Unknown error occurred" : "Virhe: Tuntematon virhe", + "SIP configuration" : "SIP-määritys", + "Invalid date, date format must be YYYY-MM-DD" : "Virheellinen päiväys, päiväyksen muoto tulee olla YYYY-MM-DD", + "Conversation not found" : "Keskustelua ei löydy", + "Chat, video & audio-conferencing using WebRTC" : "Keskustelu ja video- sekä äänineuvottelut WebRTC:tä käyttäen", + "Leave call" : "Poistu puhelusta", + "Navigating away from the page will leave the call in {conversation}" : "Sivulta poistuminen päättää puhelun keskustelussa {conversation}", + "Stay in call" : "Pysy puhelussa", + "Discuss this file" : "Keskustele tästä tiedostosta", + "Share this file with others to discuss it" : "Jaa tämä tiedosto muiden kanssa keskustellaksesi siitä", + "Share this file" : "Jaa tämä tiedosto", + "Join conversation" : "Liity keskusteluun", + "This conversation is password-protected." : "Tämä keskustelu on suojattu salasanalla.", + "The password is wrong. Try again." : "Salasana on väärin. Yritä uudelleen.", + "Password" : "Salasana", + "Submit" : "Lähetä", + "Error requesting the password." : "Virhe pyytäessä salasanaa.", + "Request password" : "Pyydä salasana", + "This conversation has ended" : "Tämä keskustelu on päättynyt", + "Error occurred when joining the conversation" : "Keskusteluun liittyessä tapahtui virhe", + "Close Talk sidebar" : "Sulje Talkin sivupalkki", + "Open Talk sidebar" : "Avaa Talkin sivupalkki", + "Everyone" : "Kaikki", + "Users and moderators" : "Käyttäjät ja moderaattorit", + "Moderators only" : "Vain moderaattorit", + "Disable calls" : "Poista puhelut käytöstä", + "Save changes" : "Tallenna muutokset", + "Saving …" : "Tallennetaan…", + "Saved!" : "Tallennettu!", + "Limit to groups" : "Rajoita ryhmiin", + "Guests can still join public conversations." : "Vieraat voivat silti liittyä julkisiin keskusteluihin.", + "Limit using Talk" : "Rajoita Talkin käyttöä", + "Limit creating a public and group conversation" : "Rajoita julkisten ja ryhmäkeskustelujen luomista", + "Limit creating conversations" : "Rajoita keskustelujen luomista", + "Limit starting a call" : "Rajoita puhelun aloittamista", + "Limit starting calls" : "Rajoita puhelujen aloittamista", + "Description is not provided" : "Kuvausta ei ole annettu", + "Enabled" : "Käytössä", + "Disabled" : "Pois käytöstä", + "Bots settings" : "Bottien asetukset", + "State" : "Tila", + "Name" : "Nimi", + "Last error" : "Viimeisin virhe", + "Total errors count" : "Virheitä yhteensä", + "Find more bots" : "Etsi lisää botteja", + "Beta" : "Beta", + "Permissions" : "Oikeudet", + "Select groups …" : "Valitse ryhmät…", + "All messages" : "Kaikki viestit", + "@-mentions only" : "Vain @-maininnat", + "Off" : "Pois", + "General settings" : "Yleiset asetukset", + "Default notification settings" : "Ilmoitusten oletusasetukset", + "Default group notification" : "Ryhmän oletusilmoitus", + "Integration into other apps" : "Integraatio muihin sovelluksiin", + "Allow conversations on files" : "Salli keskustelut tiedostoista", + "Allow conversations on public shares for files" : "Salli keskustelut tiedostojen julkisissa jaoissa", + "Enable encryption" : "Käytä salausta", + "Pending" : "Odottaa", + "Error" : "Virhe", + "Blocked" : "Estetty", + "Active" : "Aktiivinen", + "Expired" : "Vanhentunut", + "Never" : "Ei koskaan", + "The account could not be deleted. Please try again later." : "Tätä tiliä ei voitu poistaa. Yritä myöhemmin uudelleen.", + "URL of this Nextcloud instance" : "Tämän Nextcloud-instanssin URL-osoite", + "Email of the user" : "Käyttäjän sähköpostiosoite", + "Language" : "Kieli", + "Country" : "Maa", + "Status" : "Tila", + "Created at" : "Luotu", + "Expires at" : "Vanhenee", + "Yes" : "Kyllä", + "No" : "Ei", + "_%n user_::_%n users_" : ["%n käyttäjä","%n käyttäjää"], + "Installed version: {version}" : "Asennettu versio: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge-binääriä ei löytynyt tai sitä ei voitu suorittaa.", + "Downloading …" : "Ladataan…", + "Install Talk Matterbridge" : "Asenna Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Matterbridge-binäärin suorittaminen epäonnistui.", + "Matterbridge integration" : "Matterbridge-integraatio", + "Enable Matterbridge integration" : "Käytä Matterbridge-integraatiota", + "Status: Checking connection" : "Tila: Tarkistetaan yhteyttä", + "OK: Running version: {version}" : "OK: Suoritetaan versiota: {version}", + "Validate SSL certificate" : "Vahvista SSL-varmenne", + "Delete this server" : "Poista tämä palvelin", + "Test this server" : "Testaa tämä palvelin", + "Shared secret" : "Jaettu salaisuus", + "SIP configuration saved!" : "SIP-määritykset tallennettu!", + "Phone number (Country)" : "Puhelinnumero (maa)", + "STUN server URL" : "STUN-palvelimen osoite", + "The server address is invalid" : "Palvelimen osoite on virheellinen", + "STUN settings saved" : "STUN-asetukset tallennettu", + "STUN servers" : "STUN-palvelimet", + "Add a new STUN server" : "Lisää uusi STUN-palvelin", + "{option1} and {option2}" : "{option1} ja {option2}", + "{option} only" : "vain {option}", + "TURN server schemes" : "TURN-palvelimen skeemat", + "TURN server URL" : "TURN-palvelimen osoite", + "TURN server secret" : "TURN-palvelimen salaisuus", + "TURN server protocols" : "TURN-palvelimen protokollat", + "TURN settings saved" : "TURN-asetukset tallennettu", + "TURN servers" : "TURN-palvelin", + "Add a new TURN server" : "Lisää uusi TURN-palvelin", + "Failed" : "Epäonnistui", + "OK" : "OK", + "Checking …" : "Tarkistetaan…", + "Federated user" : "Federoitu käyttäjä", + "Assign participants to rooms" : "Määritä osallistujat huoneisiin", + "Configure breakout rooms" : "Määritä pienryhmätilat", + "Number of breakout rooms" : "Pienryhmätilojen määrä", + "Automatically assign participants" : "Määritä osallistujat automaattisesti", + "Manually assign participants" : "Määritä osallistujat manuaalisesti", + "Allow participants to choose" : "Salli osallistujien valinta", + "Create rooms" : "Luo pienryhmätilat", + "Confirm" : "Vahvista", + "Create breakout rooms" : "Luo pienryhmätilat", + "Reset" : "Palauta", + "Delete breakout rooms" : "Poista pienryhmätilat", + "Room {roomNumber}" : "Huone {roomNumber}", + "Current breakout rooms and settings will be lost" : "Nykyisen pienryhmätilat ja asetukset katoavat", + "Cancel" : "Peruuta", + "Unassigned participants" : "Osallistujat joita ei ole määritetty", + "Back" : "Takaisin", + "Add participant \"{user}\"" : "Lisää osallistuja \"{user}\"", + "Now" : "Nyt", + "Loading …" : "Ladataan…", + "From" : "Lähettäjä", + "To" : "Vastaanottaja", + "Calendar" : "Kalenteri", + "Attendees" : "Osallistujat", + "Save" : "Tallenna", + "Search participants" : "Etsi osallistujia", + "No results" : "Ei tuloksia", + "Done" : "Valmis", + "Raise hand" : "Nosta käsi", + "Raise hand (R)" : "Nosta käsi (R)", + "Lower hand" : "Laske käsi", + "Lower hand (R)" : "Laske käsi (R)", + "Exit full screen (F)" : "Poistu koko näytön tilasta (F)", + "Full screen (F)" : "Koko näyttö (F)", + "Speaker view" : "Puhujan näkymä", + "Grid view" : "Ruudukkonäkymä", + "This conversation is read-only" : "Keskustelu on \"vain luku\"-tilassa", + "Reload" : "Päivitä", + "{nickName} raised their hand." : "{nickName} nosti kätensä.", + "A participant raised their hand." : "Osallistuja nosti kätensä.", + "Previous page of videos" : "Videoiden edellinen sivu", + "Next page of videos" : "Videoiden seuraava sivu", + "Connecting …" : "Yhdistetään…", + "Calling …" : "Soitetaan…", + "Waiting for {user} to join the call" : "Odotetaan käyttäjän {user} liittyvän puheluun", + "Waiting for others to join the call …" : "Odotetaan muiden liittymistä puheluun...", + "You can invite others in the participant tab of the sidebar" : "Voit kutsua muita sivupalkissa olevan Osallistujat-välilehden kautta", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Voit kutsua muita sivupalkissa olevan Osallistujat-välilehden kautta tai jakamalla tämän linkin!", + "Share this link to invite others!" : "Jaa tämä linkki kutsuaksesi muita!", + "Copy link" : "Kopioi linkki", + "You are not allowed to enable audio" : "Sinulla ei ole oikeutta jakaa ääntä", + "No audio. Click to select device" : "Ei ääntä. Napsauta valitaksesi laitteen", + "Mute audio" : "Mykistä ääni", + "Mute audio (M)" : "Mykistä äänet (M)", + "Unmute audio" : "Palauta äänet", + "Unmute audio (M)" : "Palauta äänet (M)", + "None" : "Ei mitään", + "Check devices" : "Tarkista laitteet", + "Access to camera was denied" : "Pääsy kameraan estettiin", + "Error while accessing camera: It is likely in use by another program" : "Virhe yrittäessä käyttää kameraa: se on luultavasti toisen ohjelman käytössä", + "Error while accessing camera" : "Virhe käyttäessä kameraa", + "You have been muted by a moderator" : "Moderaattori on mykistänyt sinut", + "Hide presenter video" : "Piilota esittäjän video", + "You are not allowed to enable video" : "Sinulla ei ole oikeutta ottaa videota käyttöön", + "No video. Click to select device" : "Ei videota. Napsauta valitaksesi laitteen", + "Disable video" : "Poista video käytöstä", + "Disable video (V)" : "Poista video käytöstä (V)", + "Enable video" : "Käytä videota", + "Enable video (V)" : "Ota video käyttöön (v)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ota video käyttöön (V) - Yhteys keskeytyy hetkeksi, kun otat videon käyttöön ensimmäisen kerran", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ota video käyttöön. Yhteys keskeytyy hetkeksi, kun otat videon käyttöön ensimmäisen kerran", + "Show presenter" : "Näytä esittäjä", + "You" : "Sinä", + "Mute" : "Mykistä", + "Muted" : "Mykistetty", + "Show screen" : "Näytä näyttö", + "Stop following" : "Lopeta seuraaminen", + "Connection could not be established …" : "Yhteyttä ei voitu muodostaa…", + "Connection was lost and could not be re-established …" : "Yhteys katkesi eikä sitä voitu muodostaa uudelleen…", + "Connection could not be established. Trying again …" : "Yhteyttä ei voitu muodostaa. Yritetään uudelleen…", + "Connection lost. Trying to reconnect …" : "Yhteys katkesi. Yritetään muodostaa yhteys uudelleen…", + "Connection problems …" : "Ongelmia yhteydessä…", + "Collapse" : "Kutista näkymää", + "Expand" : "Laajenna", + "You need to be logged in to upload files" : "Sinun tulee olla kirjautunut sisään, jotta voit lähettää tiedostoja", + "Drop your files to upload" : "Pudota tiedostot lähettääksesi ne", + "Conversation messages" : "Keskustelun viestit", + "Scroll to bottom" : "Vieritä alas", + "Post message" : "Lähetä viesti", + "Federated conversation" : "Federoitu keskustelu", + "Public conversation" : "Julkinen keskustelu", + "Favorite" : "Suosikki", + "Manage bans" : "Hallitse estoja", + "No banned users" : "Ei estettyjä käyttäjiä", + "Date:" : "Päivämäärä:", + "Note:" : "Huomioi:", + "Hide details" : "Piilota tiedot", + "Show details" : "Näytä lisätiedot", + "Error while updating conversation name" : "Virhe keskustelun nimeä päivittäessä", + "Error while updating conversation description" : "Virhe keskustelun kuvausta päivittäessä", + "Enter a name for this conversation" : "Anna nimi tälle keskustelulle", + "Edit conversation name" : "Muokkaa keskustelun nimeä", + "Edit conversation description" : "Muokkaa keskustelun kuvausta", + "Enter a description for this conversation" : "Anna kuvaus tälle keskustelulle", + "Picture" : "Kuva", + "Disable" : "Poista käytöstä", + "Enable" : "Käytä", + "Breakout rooms" : "Pienryhmätilat", + "Manage breakout rooms" : "Hallitse pienryhmätiloja", + "Set up breakout rooms for this conversation" : "Määritä tämän keskustelun pienryhmätilat", + "Please select a valid PNG or JPG file" : "Valitse kelvollinen PNG- tai JPG-tiedosto", + "Choose your conversation picture" : "Valitse keskustelukuva", + "Choose" : "Valitse", + "Error setting conversation picture" : "Virhe keskustelukuvaa asettaessa", + "Could not set the conversation picture: {error}" : "Keskustelun kuvaa ei voitu asettaa: {error}", + "Error cropping conversation picture" : "Virhe keskustelukuvaa rajattaessa", + "Error removing conversation picture" : "Virhe keskustelukuvaa poistaessa", + "Set emoji as conversation picture" : "Aseta emoji keskustelukuvaksi", + "Set background color for conversation picture" : "Aseta taustaväri keskustelukuvalle", + "Upload conversation picture" : "Lähetä keskustelukuva", + "Choose conversation picture from files" : "Valitse keskustelukuva tiedostoista", + "Remove conversation picture" : "Aseta keskustelukuva", + "The file must be a PNG or JPG" : "Tiedoston tulee olla PNG tai JPG", + "Set picture" : "Aseta kuva", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Muokkaa tähän keskusteluun osallistuvien oletusoikeuksia. Nämä asetukset eivät vaikuta moderaattoreihin.", + "All permissions" : "Kaikki oikeudet", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Osallistujilla on oikeus aloittaa puhelu, liittyä puheluun, ottaa ääni ja video käyttöön sekä jakaa näytön sisältö.", + "Restricted" : "Rajoitettu", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Osallistujat voivat liittyä puheluihin, mutta eivät voi ottaa ääntä tai videota käyttöön tai jakaa näyttönsä sisältöä, ennen kuin moderaattori on antanut siihen luvan.", + "Advanced permissions" : "Edistyneet oikeudet", + "Edit permissions" : "Muokkaa oikeuksia", + "Conversation settings" : "Keskustelun asetukset", + "Basic Info" : "Perustiedot", + "Personal" : "Henkilökohtainen", + "Moderation" : "Moderaatio", + "Breakout Rooms" : "Pienryhmätilat", + "Matterbridge" : "Matterbridge", + "Bots" : "Botit", + "Danger zone" : "Vaaravyöhyke", + "Leave conversation" : "Poistu keskustelusta", + "Delete conversation" : "Poista keskustelu", + "Do you really want to delete \"{displayName}\"?" : "Poistetaanko \"{displayName}\"?", + "Error while deleting conversation" : "Virhe keskustelua poistaessa", + "Delete all chat messages" : "Poista kaikki keskustelun viestit", + "Error while clearing chat history" : "Virhe keskusteluhistoriaa siivotessa", + "Be careful, these actions cannot be undone." : "Ole varovainen, näitä toimintoja ei voi perua.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Kun olet kerran poistunut suljetusta keskustelusta, tarvitset kutsun liittyäksesi uudelleen siihen. Avoimeen keskusteluun on mahdollista liittyä milloin hyvänsä.", + "Permanently delete this conversation." : "Poista tämä keskustelu pysyvästi.", + "Delete chat messages" : "Poista keskustelun viestit", + "Permanently delete all the messages in this conversation." : "Poista pysyvästi kaikki tämän keskustelun viestit.", + "_%n hour_::_%n hours_" : ["%n tunti","%n tuntia"], + "_%n day_::_%n days_" : ["%n päivä","%n päivää"], + "_%n week_::_%n weeks_" : ["%n viikko","%n viikkoa"], + "Custom expiration time" : "Mukautettu vanhenemisaika", + "Message expiration disabled" : "Viestien vanheneminen poistettu käytöstä", + "Message expiration set: {duration}" : "Viestien vanhenemiseksi asetettu: {duration}", + "Error when trying to set message expiration" : "Virhe yrittäessä asettaa viestin vanhenemista", + "Message expiration" : "Viestin vanheneminen", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Keskusteluviestit on mahdollista vanhentaa tietyn ajan jälkeen. Huomio: Keskustelussa jaetut tiedostot eivät poistu omistajalta, mutta ne eivät ole enää jaettu keskustelussa.", + "Set message expiration" : "Aseta viestin vanheneminen", + "Current message expiration" : "Nykyinen viestin vanheneminen", + "Guest access" : "Vieraspääsy", + "Allow guests to join this conversation via link" : "Salli vieraiden liittyä tähän keskusteluun linkin kautta", + "Password protection" : "Salasanasuojaus", + "Set a password" : "Aseta salasana", + "Change password" : "Vaihda salasana", + "Enter new password" : "Kirjoita uusi salasana", + "Save password" : "Tallenna salasana", + "Guests are allowed to join this conversation via link" : "Vieraat voivat liittyä tähän keskusteluun linkin kautta", + "Guests are not allowed to join this conversation" : "Vierailla ei ole oikeutta liittyä tähän keskusteluun", + "Resend invitations" : "Lähetä kutsut uudelleen", + "This conversation is open to registered users" : "Avaa keskustelu on avoinna rekisteröityneille käyttäjille", + "Open conversation to registered users, showing it in search results" : "Avaa keskustelu rekisteröityneille käyttäjille, näytetään hakutuloksissa", + "Open conversation" : "Avaa keskustelu", + "Start time: {date}" : "Aloitusaika: {date}", + "Start time has been updated" : "Aloitusaika on päivitetty", + "Error occurred while updating start time" : "Virhe aloitusaikaa päivittäessä", + "Meeting start time" : "Tapaamisen alotusaika", + "Start time (optional)" : "Aloitusaika (valinnainen)", + "Error occurred when locking the conversation" : "Keskustelun lukitsemisessa tapahtui virhe", + "Lock conversation" : "Lukitse keskustelu", + "This will also terminate the ongoing call." : "Tämä lopettaa meneillään olevan puhelun ̣", + "Edit" : "Muokkaa", + "More information" : "Lisää tietoa", + "Delete" : "Poista", + "Add new bridged channel to current conversation" : "Lisää uusi sillattu kanava nykyiseen keskusteluun", + "unknown state" : "tuntematon tila", + "running" : "käynnissä", + "not running, check Matterbridge log" : "ei käynnistä, tarkista Matterbridge-loki", + "not running" : "ei käynnissä", + "Bridge saved" : "Silta tallennettu", + "More info on Matterbridge" : "Lisätietoa Matterbridgestä", + "Enable bridge" : "Ota silta käyttöön", + "Show Matterbridge log" : "Näytä Matterbridge-loki", + "Log content" : "Lokin sisältö", + "Notifications" : "Ilmoitukset", + "Notify about calls in this conversation" : "llmoita puheluista tässä keskustelussa", + "Important conversation" : "Tärkeä keskustelu", + "SIP dial-in is now possible without PIN requirement" : "SIP-sisäänsoitto on nyt mahdollista ilman PIN-koodin vaatimusta", + "SIP dial-in is now enabled" : "SIP-sisäänsoitto on nyt käytössä", + "SIP dial-in is now disabled" : "SIP-sisäänsoitto on nyt pois käytöstä", + "Phone and SIP dial-in" : "Puhelin- ja SIP-sisäänsoitto", + "Enable phone and SIP dial-in" : "Käytä puhelimella ja SIP:illä sisäänsoittoa", + "Allow to dial-in without a PIN" : "Salli sisäänsoitto ilman PIN-koodia", + "Join" : "Liity", + "Error while creating the conversation" : "Virhe keskustelua luotaessa", + "Create a new conversation" : "Luo uusi keskustelu", + "Join open conversations" : "Liity avoimiin keskusteluihin", + "Call a phone number" : "Soita puhelinnumeroon", + "Schedule meetings" : "Sovi tapaamisia", + "You don't have any upcoming meetings" : "Sinulla ei ole tulevia tapaamisia", + "Open calendar" : "Avaa kalenteri", + "Unread mentions" : "Lukemattomat maininnat", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Viestit, joissa sinut on mainittu, näkyvät tässä. Voit mainita henkilöitä kirjoittamalla @ -merkin ja sitten heidän nimensä", + "Message reminders" : "Viestimuistutukset", + "Set a reminder on a message to be notified" : "Aseta muistutus viestiin, jotta saat siitä ilmoituksen", + "Create conversation" : "Luo keskustelu", + "Enter your name" : "Kirjoita nimesi", + "Log in" : "Kirjaudu sisään", + "Creating the conversation …" : "Luodaan keskustelu…", + "Mark as read" : "Merkitse luetuksi", + "Mark as unread" : "Merkitse lukemattomaksi", + "Remove from favorites" : "Poista suosikeista", + "Add to favorites" : "Lisää suosikkeihin", + "Conversation actions" : "Keskustelun toiminnot", + "Pending invitations" : "Odottavat kutsut", + "From {user} at {remoteServer}" : "Käyttäjältä {user} palvelimelta {remoteServer}", + "Decline invitation" : "Kieltäydy kutsusta", + "Accept invitation" : "Hyväksy kutsu", + "No pending invitations" : "Ei odottavia kutsuja", + "Home" : "Koti", + "Unread" : "Lukematon", + "Alphabetically" : "Aakkosjärjestys", + "No followed threads" : "Ei seurattuja keskusteluketjuja", + "No matches found" : "Ei tuloksia", + "No conversations found" : "Keskusteluja ei löytynyt", + "Subscribe to an existing thread or start your own." : "Seuraa olemassa olevaa keskusteluketjua tai aloita omasi.", + "You have no unread mentions." : "Sinulla ei ole lukemattomia mainintoja.", + "You have no unread messages." : "Sinulla ei ole lukemattomia viestejä.", + "An error occurred while performing the search" : "Hakua suorittaessa tapahtui virhe", + "Conversation list" : "Keskustelulista", + "Filter conversations by" : "Suodata keskusteluja", + "Unread messages" : "Lukemattomat viestit", + "Meeting conversations" : "Kokouskeskustelut", + "Clear filters" : "Tyhjennä suodattimet", + "New personal note" : "Uusi henkilökohtainen muistiinpano", + "Back to conversations" : "Palaa keskusteluihin", + "Threads" : "Keskusteluketjut", + "Clear filter" : "Tyhjennä suodatin", + "App settings" : "Sovelluksen asetukset", + "Users" : "Käyttäjät", + "Groups" : "Ryhmät", + "Teams" : "Tiimit", + "Federated users" : "Federoidut käyttäjät", + "New private conversation" : "Uusi yksityinen keskustelu", + "Other sources" : "Muut lähteet", + "Open conversations" : "Avaa keskustelut", + "No search results" : "Ei hakutuloksia", + "Users, groups and teams" : "Käyttäjät, ryhmät ja tiimit", + "Users and groups" : "Käyttäjät ja ryhmät", + "Users and teams" : "Käyttäjät ja tiimit", + "Groups and teams" : "Ryhmät ja tiimit", + "New group conversation" : "Uusi ryhmäkeskustelu", + "The meeting will start soon" : "Tämä kokous alkaa pian", + "This meeting is scheduled for {startTime}" : "Kokous on ajoitettu alkavaksi {startTime}", + "You are currently waiting in the lobby" : "Odotat parhaillaan aulassa", + "Select microphone" : "Valitse mikrofoni", + "No microphone available" : "Ei mikrofonia saatavilla", + "Select camera" : "Valitse kamera", + "No camera available" : "Ei kameraa saatavilla", + "Select a device" : "Valitse laite", + "Playing …" : "Toistetaan…", + "Test speakers" : "Testaa kaiuttimia", + "Test" : "Kokeile", + "Devices" : "Laitteet", + "Backgrounds" : "Taustakuvat", + "No audio" : "Ei ääntä", + "No camera" : "Ei kameraa", + "Calls are not supported in your browser" : "Selaimesi ei tue puheluja", + "Access to microphone is only possible with HTTPS" : "Mikrofonin käyttäminen on mahdollista vain HTTPS-yhteydellä", + "Access to microphone was denied" : "Pääsy mikrofoniin estettiin", + "Error while accessing microphone" : "Virhe yrittäessä käyttää mikrofonia", + "Access to camera is only possible with HTTPS" : "Kameran käyttäminen on mahdollista vain HTTPS-yhteydellä", + "The call is being recorded." : "Tämä puhelu tallennetaan.", + "Apply settings" : "Toteuta asetukset", + "Select virtual office background" : "Valitse virtuaalinen toimistotaustakuva", + "Select virtual home background" : "Valitse virtuaalinen kotitaustakuva", + "Select virtual abstract background" : "Valitse virtuaalinen abstraktitaustakuva", + "Select virtual beach background" : "Valitse virtuaalinen rantataustakuva", + "Select virtual park background" : "Valitse virtuaalinen puistotaustakuva", + "Select virtual theater background" : "Valitse virtuaalinen teatteritaustakuva", + "Select virtual library background" : "Valitse virtuaalinen kirjastotaustakuva", + "Select virtual space station background" : "Valitse virtuaalinen avaruusasemataustakuva", + "Error while uploading the file" : "Virhe tiedostoa lähettäessä", + "Select a file" : "Valitse tiedosto", + "Invalid path selected" : "Valittu virheellinen polku", + "Select virtual background from file {fileName}" : "Valitse virtuaalinen taustakuva tiedostosta {fileName}", + "Blur" : "Sumennus", + "Upload" : "Lähetä", + "Files" : "Tiedostot", + "(edited)" : "(muokattu)", + "The message has expired or has been deleted" : "Tämä viesti on vanhentunut tai se on poistettu", + "Cancel quote" : "Peruuta lainaus", + "24 hours" : "24 tuntia", + "7 days" : "7 päivää", + "Clear reminder – {timeLocale}" : "Tyhjennä muistutus – {timeLocale}", + "Message text copied to clipboard" : "Viestin teksti kopioitu leikepöydälle", + "Message text could not be copied" : "Viestin tekstiä ei voitu kopioida", + "Add a reaction to this message" : "Lisää reaktio tähän viestiin", + "Reply" : "Vastaa", + "More actions" : "Lisää toimintoja", + "Set reminder" : "Aseta muistutus", + "Reply privately" : "Vastaa yksityisesti", + "Edit message" : "Muokkaa viestiä", + "Copy message link" : "Kopioi viestin linkki", + "Go to file" : "Siirry tiedostoon", + "Forward message" : "Lähetä edelleen", + "Translate" : "Käännä", + "Set custom reminder" : "Aseta mukautettu muistutus", + "Close reactions menu" : "Sulje reaktiovalikko", + "React with {emoji}" : "Reagoi emojilla {emoji}", + "React with another emoji" : "Reagoi toisella emojilla", + "Choose a conversation to forward the selected message." : "Valitse keskustelu, johon valittu viesti edelleenlähetetään.", + "Error while forwarding message" : "Virhe edelleenlähettäessä viestiä", + "The message has been forwarded to {selectedConversationName}" : "Viesti on lähetetty edelleen keskusteluun {selectedConversationName}", + "Dismiss" : "Hylkää", + "Go to conversation" : "Mene keskusteluun", + "Detect language" : "Havaitse kieli", + "The message could not be translated" : "Viestiä ei voitu kääntää", + "Translation copied to clipboard" : "Käännös kopioitu leikepöydälle", + "Translation could not be copied" : "Käännöstä ei voitu kopioida", + "Translate message" : "Käännä viesti", + "Source language to translate from" : "Lähdekieli, josta käännetään", + "Translate from" : "Lähdekieli", + "Target language to translate into" : "Kohdekieli, jolle käännetään", + "Translate to" : "Kohdekieli", + "Translating" : "Käännetään", + "Copy translated text" : "Kopioi käännetty teksti", + "Send now" : "Lähetä nyt", + "Message read by everyone who shares their reading status" : "Viesti luettu kaikkien niiden kanssa, jotka jakavat lukutilapäivityksensä", + "Message sent" : "Viesti lähetetty", + "Deleting message" : "Poistetaan viestiä", + "Message deleted successfully" : "Viesti poistettu onnistuneesti", + "Message could not be deleted because it is too old" : "Viestiä ei voitu poistaa, koska se on liian vanha", + "Only normal chat messages can be deleted" : "Vain normaaleja keskustelun viestejä on mahdollista poistaa", + "An error occurred while deleting the message" : "Virhe viestiä poistaessa", + "Your browser does not support playing audio files" : "Selaimesi ei tue äänitiedostojen toistamista", + "Contact" : "Yhteystieto", + "Remove {fileName}" : "Poista {fileName}", + "Open this location in OpenStreetMap" : "Avaa tämä sijainti OpenStreetMapissa", + "Sending message" : "Lähetetään viestiä", + "Failed to send the message. Click to try again" : "Viestin lähettäminen epäonnistui. Paina yrittääksesi uudelleen", + "Not enough free space to upload file" : "Ei riittävästi vapaata tilaa tiedoston lähettämiseksi", + "You cannot send messages to this conversation at the moment" : "Et voi lähettää viestejä tähän keskusteluun tällä hetkellä", + "You voted" : "Äänestit", + "_%n vote_::_%n votes_" : ["%n ääni","%n ääntä"], + "See results" : "Näytä tulokset", + "Reactions" : "Reaktiot", + "No permission to post reactions in this conversation" : "Ei oikeutta lähettää reaktioita tähän keskusteluun", + "Show all reactions" : "Näytä kaikki reaktiot", + "Add more reactions" : "Lisää enemmän reaktioita", + "Show or collapse system messages" : "Näytä tai piilota järjestelmäviestit", + "No messages" : "Ei viestejä", + "All messages have expired or have been deleted." : "Kaikki viestit ovat vanhentuneet tai ne on poistettu.", + "Unpin" : "Poista kiinnitys", + "Cancel search" : "Peruuta haku", + "Add a phone number" : "Lisää puhelinnumero", + "All set, the conversation \"{conversationName}\" was created." : "Kaikki valmista, keskustelu \"{conversationName}\" luotu.", + "Create a new group conversation" : "Luo uusi ryhmäkeskustelu", + "Add participants" : "Lisää osallistujat", + "Conversation visibility" : "Keskustelun näkyvyys", + "Allow guests to join via link" : "Salli vieraiden liittyä linkin kautta", + "Enter password" : "Anna salasana", + "This conversation has been locked" : "Tämä keskustelu on lukittu", + "No permission to post messages in this conversation" : "Ei oikeutta lähettää viestejä tässä keskustelussa", + "Joining conversation …" : "Liitytään keskusteluun…", + "Send message" : "Lähetä viesti", + "Send without notification" : "Lähetä ilman ilmoitusta", + "File to share" : "Jaettava tiedosto", + "Add emoji" : "Lisää emoji", + "Send later" : "Lähetä myöhemmin", + "Cancel editing" : "Peruuta muokkaus", + "Share from {nextcloud}" : "Jaa lähteestä {nextcloud}", + "Share from Files" : "Jaa tiedostoista", + "Share files to the conversation" : "Jaa tiedostoja keskusteluun", + "Upload from device" : "Lähetä laitteelta", + "Create new poll" : "Luo uusi kysely", + "Smart picker" : "Älykäs valitsin", + "Record voice message" : "Äänitä ääniviesti", + "End recording and send" : "Lopeta äänitys ja lähetä", + "Dismiss recording" : "Hylkää äänitallenne", + "Access to the microphone was denied" : "Pääsy mikrofoniin estettiin", + "Microphone either not available or disabled in settings" : "Mikrofoni ei ole käytettävissä tai se on poistettu käytöstä asetuksista", + "Error while recording audio" : "Virhe äänittäessä", + "New file" : "Uusi tiedosto", + "Blank" : "Tyhjä", + "Error while creating file" : "Virhe tiedostoa luotaessa", + "Create and share a new file" : "Luo ja jaa uusi tiedosto", + "Name of the new file" : "Uuden tiedoston nimi", + "Create file" : "Luo tiedosto", + "Someone is typing …" : "Joku kirjoittaa…", + "{user1} is typing …" : "{user1} kirjoittaa…", + "{user1} and {user2} are typing …" : "{user1} ja {user2} kirjoittavat…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ja {user3} kirjoittavat…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ja %n muu kirjoittavat…","{user1}, {user2}, {user3} ja %n muuta kirjoittavat…"], + "Add more files" : "Lisää enemmän tiedostoja", + "Send" : "Lähetä", + "In this conversation {user} can:" : "Tässä keskustelussa käyttäjä {user} voi:", + "Start a call" : "Aloita puhelu", + "Skip the lobby" : "Ohita aula", + "Can post messages and reactions" : "Voi lähettää viestejä ja reaktioita", + "Enable the microphone" : "Ota mikrofoni käyttöön", + "Enable the camera" : "Ota kamera käyttöön", + "Share the screen" : "Jaa näyttö", + "Update permissions" : "Päivitä oikeudet", + "Updating permissions" : "Päivitetään oikeudet", + "Create poll" : "Luo kysely", + "Question" : "Kysymys", + "Ask a question" : "Esitä kysymys", + "Answers" : "Vastaukset", + "Answer {option}" : "Vastaus {option}", + "Add answer" : "Lisää vastaus", + "Settings" : "Asetukset", + "Anonymous poll" : "Anonyymi kysely", + "Multiple answers" : "Useita vastauksia", + "You voted for this option" : "Äänestit tätä vaihtoehtoa", + "End poll" : "Lopeta kysely", + "Change your vote" : "Muuta antamaasi ääntä", + "Results" : "Tulokset", + "Send a message to \"{roomName}\"" : "Lähetä viesti huoneeseen \"{roomName}\"", + "Hide list of participants" : "Piilota osallistujaluettelo", + "Show list of participants" : "Näytä osallistujaluettelo", + "Assistance requested in {roomName}" : "Apua pyydetty pienryhmätilassa {roomName}", + "The message was sent to \"{roomName}\"" : "Viesti lähetettiin huoneeseen \"{roomName}\"", + "Send message to room" : "Lähetä viesti huoneeseen", + "Back to main room" : "Takaisin päähuoneeseen", + "Back to your room" : "Takaisin omaan huoneeseen", + "Message all rooms" : "Viesti kaikkiin huoneisiin", + "Start session" : "Aloita istunto", + "Stop session" : "Pysäytä istunto", + "The message was sent to all breakout rooms" : "Viesti lähetettiin kaikkiin pienryhmätiloihin.", + "Send a message to all breakout rooms" : "Lähetä viesti kaikkiin pienryhmätiloihin", + "Disable lobby" : "Poista aula käytöstä", + "Settings for participant \"{user}\"" : "Osallistujen \"{user}\" asetukset", + "Participant \"{user}\"" : "Osallistuja \"{user}\"", + "moderator" : "moderaattori", + "guest" : "vieras", + "Ringing …" : "Soitetaan…", + "Call rejected" : "Puhelu hylätty", + "Raised their hand" : "Nosti kätensä", + "Joined with video" : "Liittyi videon kera", + "Joined via phone" : "Liittyi puhelimen kautta", + "Joined with audio" : "Liittyi äänen kera", + "Remove group and members" : "Poista ryhmä ja jäsenet", + "Remove team and members" : "Poista tiimi ja jäsenet", + "Remove participant" : "Poista osallistuja", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Haluatko varmasti poistaa ryhmän \"{displayName}\" ja sen jäsenet tästä kesksutelusta?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Haluatko varmasti poistaa tiimin \"{displayName}\" ja sen jäsenet tästä kesksutelusta?", + "Notification was sent to {displayName}" : "Ilmoitus lähetettiin käyttäjälle {displayName}", + "Phone number copied to clipboard" : "Puhelinnumero kopioitu leikepöydälle", + "Phone number could not be copied" : "Puhelinnumeroa ei voitu kopioida", + "Dial-in PIN" : "Sisäänsoiton PIN-koodi", + "Demote from moderator" : "Alenna moderaattorista", + "Promote to moderator" : "Ylennä moderaattoriksi", + "Resend invitation" : "Lähetä kutsu uudelleen", + "Send call notification" : "Lähetä puheluilmoitus", + "Put phone number on hold" : "Aseta puhelinnumero pitoon", + "Mute phone number" : "Mykistä puhelinnumero", + "Copy phone number" : "Kopioi puhelinnumero", + "Grant all permissions" : "Myönnä kaikki oikeudet", + "Remove all permissions" : "Poista kaikki oikeudet", + "Remove" : "Poista", + "Add users, groups or teams" : "Lisää käyttäjiä, ryhmiä tai tiimejä", + "Add users or groups" : "Lisää käyttäjiä tai ryhmiä", + "Add users or teams" : "Lisää käyttäjiä tai tiimejä", + "Add users" : "Lisää käyttäjiä", + "Add groups or teams" : "Lisää ryhmiä tai tiimejä", + "Add groups" : "Lisää ryhmiä", + "Add teams" : "Lisää tiimejä", + "Add other sources" : "Lisää muita lähteitä", + "Add emails" : "Lisää sähköpostiosoitteita", + "Integrations" : "Integraatiot", + "Add federated users" : "Lisää federoituja käyttäjiä", + "Searching …" : "Haetaan…", + "Search for more users" : "Etsi lisää käyttäjiä", + "Search or add participants" : "Etsi tai lisää osallistujia", + "Invitation was sent to {actorId}" : "Kutsu lähetettiin käyttäjälle {actorId}", + "An error occurred while adding the participants" : "Virhe osallistujia lisätessä", + "Participants" : "Osallistujat", + "Participants ({count})" : "Osallistujat ({count})", + "Open chat" : "Avaa keskustelu", + "You have new unread messages in the chat." : "Keskustelussa on uusia lukemattomia viestejä.", + "You have been mentioned in the chat." : "Sinut on mainittu keskustelussa.", + "Chat" : "Keskustelu", + "Details" : "Tiedot", + "Shared items" : "Jaetut tietueet", + "No results found" : "Ei tuloksia", + "Load more results" : "Lataa lisää tuloksia", + "Projects" : "Projektit", + "No shared items" : "Ei jaettuja kohteita", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Linkki keskusteluun", + "No open conversations found" : "Avoimia keskusteluja ei löytynyt", + "Search conversations or users" : "Hae keskusteluja tai käyttäjiä", + "Select conversation" : "Valitse keskustelu", + "Number length is not valid" : "Numeron pituus on virheellinen", + "Number is not valid" : "Numero ei ole kelvollinen", + "Phone numbers" : "Puhelinnumerot", + "Display name: {name}" : "Näyttönimi: {name}", + "Edit display name" : "Muokkaa näyttönimeä", + "Save name" : "Tallenna nimi", + "Error while saving sounds setting" : "Virhe ääniasetuksia tallentaessa", + "Compact conversations list" : "Tiivis keskustelunäkymä", + "Chat appearance" : "Keskustelun ulkoasu", + "Play sounds when participants join or leave a call" : "Toista ääni kun osallistuja liittyy tai poistuu puhelusta", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Ei saatavilla tällä hetkellä iPhonelle tai iPadille valmistajan asettamien teknisten rajoitusten vuoksi", + "Notification settings" : "Ilmoitusasetukset", + "Sounds for chat and call notifications" : "Ääniasetukset keskustelu- ja puheluilmoituksille", + "Default language" : "Oletuskieli", + "Select location for attachments" : "Valitse sijainti liitteille", + "Error while setting attachment folder" : "Virhe asettaessa liitekansiota", + "Turn camera and microphone off by default" : "Kamera ja mikrofoni oletuksena pois päältä", + "Blur camera background by default" : "Kameran taustan sumennus oletuksena", + "Skip device preview before joining a call" : "Ohita laiteasetusten esikatselu ennen puheluun liittymistä", + "Appearance & Sounds" : "Ulkoasu & äänet", + "Privacy" : "Yksityisyys", + "Send read receipts" : "Lähetä \"luettu\" -kuittaukset", + "When off, all read statuses will be hidden" : "Kun pois päältä, kaikki viestien \"luettu\" -kuittaukset piilotetaan", + "Share typing status" : "Jaa \"kirjoittaa\" -ilmoitukset", + "When off, all typing indicators will be hidden" : "Kun pois päältä, kaikki \"kirjoittaa\" -ilmoitukset piilotetaan", + "Attachments folder" : "Liitteiden kansio", + "Toggle full screen" : "Koko näyttö päälle/pois", + "Return to Home screen" : "Palaa kotinäkymään", + "Search" : "Etsi", + "Shortcuts while in a chat" : "Pikanäppäimet keskustelussa", + "Focus the chat input" : "Kohdista keskustelun syötteeseen", + "Unfocus the chat input to use shortcuts" : "Poista kohdistus keskustelusta käyttääksesi pikanäppäimiä", + "Edit your last message" : "Muokkaa viimeistä viestiäsi", + "Shortcuts while in a call" : "Pikanäppäimet puhelun aikana", + "Camera on and off" : "Kamera päälle tai pois päältä", + "Microphone on and off" : "Mikrofoni päälle tai pois päältä", + "Raise or lower hand" : "Nosta tai laske käsi", + "Push to talk or push to mute" : "Paina puhuaksesi tai mykistääksesi", + "Zoom-in / zoom-out a screen share" : "Lähennä tai loitonna näytönjakoa", + "Start call silently" : "Aloita puhelu hiljennettynä", + "Start call" : "Aloita puhelu", + "End call" : "Lopeta puhelu", + "End call for everyone" : "Päätä puhelu kaikkien osalta", + "The call has been running for one hour." : "Tämä puhelu on kestänyt yhden tunnin.", + "Stop recording" : "Lopeta tallennus", + "Send a reaction" : "Lähetä reaktio", + "React with {reaction}" : "Reagoi käyttäen {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n osallistuja puhelussa","%n osallistujaa puhelussa"], + "You are not allowed to enable screensharing" : "Sinulla ei ole oikeutta ottaa näytönjakamista käyttöön", + "No screensharing" : "Ei näytönjakamista", + "Screensharing options" : "Näytönjakamisen valinnat", + "Enable screensharing" : "Ota käyttöön näytönjakaminen", + "Bad sent video and screen quality." : "Heikko lähetetyn videon ja näytön laatu.", + "Bad sent screen quality." : "Heikko lähetetyn näytön laatu.", + "Bad sent video quality." : "Heikko lähetetyn videon laatu.", + "Bad sent audio, video and screen quality." : "Heikko lähetetyn äänen, videon ja näytön laatu.", + "Bad sent audio and screen quality." : "Heikko lähetetyn äänen ja näytön laatu.", + "Bad sent audio and video quality." : "Heikko lähetetyn äänen ja videon laatu.", + "Bad sent audio quality." : "Heikko lähetetyn äänen laatu.", + "Disable background blur" : "Poista taustan sumennus käytöstä", + "Disable screenshare" : "Poista käytöstä näytönjakaminen", + "Screen sharing is not supported by your browser." : "Selaimesi ei tue näytönjakoa.", + "Screen sharing requires the page to be loaded through HTTPS." : "Näytön jakaminen vaatii sivun lataamista HTTPS-protokollalla.", + "Screensharing requires the page to be loaded through HTTPS." : "Näytön jakaminen vaatii sivun lataamista HTTPS-protokollalla.", + "An error occurred while starting screensharing." : "Virhe aloitettaessa näytön jakamista.", + "Show your screen" : "Näytä oma näyttösi", + "Stop screensharing" : "Lopeta näytön jakaminen", + "Mute others" : "Mykistä muut", + "Start recording" : "Käynnistä tallennus", + "Set up breakout rooms" : "Määritä pienryhmätilat", + "Open Calendar" : "Avaa kalenteri", + "Remove participant {name}" : "Poista osallistuja {name}", + "Open dialpad" : "Avaa numeronäppäimistö", + "Select a region" : "Valitse alue", + "Search …" : "Hae…", + "Message without mention" : "Viesti ilman mainintaa", + "Mention myself" : "Mainitse itsesi", + "Mention everyone" : "Mainitse kaikki", + "Select a conversation" : "Valitse keskustelu", + "The conversation does not exist" : "Tätä keskustelua ei ole olemassa", + "Join a conversation or start a new one!" : "Liity keskusteluun tai aloita uusi keskustelu!", + "Join a conversation or start a new one" : "Liity keskusteluun tai aloita uusi", + "Nextcloud URL" : "Nextcloudin URL-osoite", + "Nextcloud user" : "Nextcloud-käyttäjä", + "User password" : "Käyttäjän salasana", + "Talk conversation" : "Talk-keskustelu", + "Skip TLS verification" : "Ohita TLS-vahvistus", + "Matrix server URL" : "Matrix-palvelimen URL-osoite", + "User" : "Käyttäjä", + "Matrix channel" : "Matrix-kanava", + "Mattermost server URL" : "Mattermost-palvelimen URL-osoite", + "Mattermost user" : "Mattermost-käyttäjä", + "Team name" : "Tiimin nimi", + "Channel name" : "Kanavan nimi", + "Rocket.Chat server URL" : "Rocket.Chat-palvelimen URL-osoite", + "User name or email address" : "Käyttäjänimi tai sähköpostiosoite", + "Rocket.Chat channel" : "Rocket.Chat-kanava", + "Zulip server URL" : "Zulip-palvelimen URL-osoite", + "Bot user name" : "Botin käyttäjätunnus", + "Bot API key" : "Botin rajapinta-avain", + "API token" : "API-poletti", + "Slack channel" : "Slack-kanava", + "Channel" : "Kanava", + "Login" : "Kirjaudu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC-palvelimen URL-osoite (e.g. chat.freenode.net:6667)", + "Nickname" : "Nimimerkki", + "Connection password" : "Yhteyden salasana", + "IRC channel" : "IRC-kanava", + "Channel password" : "Kanavan salasana", + "NickServ nickname" : "NickServ-nimimerkki", + "NickServ password" : "NickServ-salasana", + "Use TLS" : "Käytä TLS:ää", + "Use SASL" : "Käytä SASL:ia", + "Client ID" : "Asiakkaan tunniste", + "XMPP/Jabber server URL" : "XMPP-/Jabber-palvelimen URL-osoite", + "MUC server URL" : "MUC-palvelimen URL-osoite", + "Media" : "Media", + "Polls" : "Kyselyt", + "Voice messages" : "Ääniviestit", + "Locations" : "Sijainnit", + "Call recordings" : "Puhelutallenteet", + "Audio" : "Ääni", + "Show all media" : "Näytä kaikki media", + "Show all files" : "Näytä kaikki tiedostot", + "Show all polls" : "Näytä kaikki kyselyt", + "Show all voice messages" : "Näytä kaikki ääniviestit", + "Show all locations" : "Näytä kaikki sijainnit", + "Show all call recordings" : "Näytä kaikki puhelutallenteet", + "Show all audio" : "Näytä kaikki ääni", + "Show all other" : "Näytä kaikki muu", + "Group" : "Ryhmä", + "Team" : "Tiimi", + "You reconnected to the call" : "Yhdistit uudelleen puheluun", + "{actor} reconnected to the call" : "{actor} yhdisti uudelleen puheluun", + "You added {user0} and {user1}" : "Lisäsit käyttäjät {user0} ja {user1}", + "{user0} and {user1} joined the call" : "{user0} ja {user1} liittyivät puheluun", + "You: {lastMessage}" : "Sinä: {lastMessage}", + "(edited by you)" : "(muokattu toimestasi)", + "(edited by a deleted user)" : "(muokattu poistetun käyttäjän toimesta)", + "Leave this page" : "Poistu tältä sivulta", + "Join here" : "Liity tähän", + "Post to a conversation" : "Lähetä keskusteluun", + "Post to conversation" : "Lähetä keskusteluun", + "The recording failed. Please contact your administrator." : "Tallennus epäonnistui. Ole yhteydessä ylläpitoon.", + "Share to a conversation" : "Jaa keskusteluun", + "Share to conversation" : "Jaa keskusteluun", + "Search in conversation: {conversation}" : "Etsi keskustelusta: {conversation}", + "Error while clearing conversation history" : "Virhe keskusteluhistoriaa siivotessa", + "Error occurred while allowing guests" : "Virhe vieraita salliessa", + "Conversation password has been saved" : "Keskustelun salasana on tallennettu", + "Conversation password has been removed" : "Keskustelun salasana on poistettu", + "Error occurred while saving conversation password" : "Virhe tallentaessa keskustelun salasanaa", + "Call recording is starting." : "Puhelun tallennus käynnistyy.", + "Call recording stopped. You will be notified once the recording is available." : "Puhelun tallennus lopetettiin. Saat ilmoituksen, kun tallenne on saatavilla.", + "Conversation picture set" : "Keskustelun kuva asetettu", + "Conversation picture deleted" : "Keskustelun kuva poistettu", + "Could not delete the conversation picture" : "Keskustelun kuvaa ei voitu poistaa", + "Could not post message: {errorMessage}" : "Ei voitu lähettää viestiä: {errorMessage}", + "An error occurred while fetching the participants" : "Virhe osallistujia noudettaessa", + "Invitations sent" : "Kutsut lähetetty", + "Error occurred when sending invitations" : "Kutsujen lähetyksessä tapahtui virhe", + "An error occurred while creating breakout rooms" : "Pienryhmätiloja luotaessa tapahtui virhe", + "{guest} (guest)" : "{guest} (vieras)", + "Failed to add reaction" : "Reaktion lisääminen epäonnistui", + "Failed to remove reaction" : "Reaktion poistaminen epäonnistui", + "Error while uploading file \"{fileName}\"" : "Virhe lähettäessä tiedostoa \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Ei riittävästi tallennustilaa tiedoston \"{fileName}\" lähettämiseksi", + "You are not allowed to share files" : "Sinulla ei ole oikeutta jakaa tiedostoja", + "Error while sharing file" : "Virhe tiedostoa jakaessa", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk ei tue täysin käyttämääsi selainta. Käytä uusinta versiota Mozilla Firefoxista, Microsoft Edgestä, Google Chromesta, Operasta tai Apple Safarista.", + "Later today – {timeLocale}" : "Myöhemmin tänään – {timeLocale}", + "Tomorrow – {timeLocale}" : "Huomenna – {timeLocale}", + "This weekend – {timeLocale}" : "Tämä viikonloppu – {timeLocale}", + "Next week – {timeLocale}" : "Ensi viikko – {timeLocale}", + "Message link copied to clipboard" : "Viestin linkki kopioitu leikepöydälle", + "Conversation link copied to clipboard" : "Keskustelulinkki kopioitu leikepöydälle", + "The link could not be copied" : "Linkkiä ei voitu kopioida", + "Please reload the page." : "Päivitä sivu.", + "Do not disturb" : "Älä häiritse", + "Away" : "Poissa", + "Microphone {number}" : "Mikrofoni {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Kaiutin {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Vaikuttaa siltä, että puhut vaikka sinut on mykistetty. Poista mykistys, jotta muut kuulevat sinut", + "Access to microphone & camera is only possible with HTTPS" : "Kameran ja mikrofonin käyttäminen on mahdollista vain käytettäessä HTTPS-protokollaa", + "Please move your setup to HTTPS" : "Siirrä asetuksesi HTTPS:n taakse", + "Access to microphone & camera was denied" : "Yhteys mikrofoniin ja kameraan estettiin", + "WebRTC is not supported in your browser" : "WebRTC ei ole tuettuna selaimessasi", + "Please use a different browser like Firefox or Chrome" : "Käytä jotain toista selainta, kuten Firefoxia tai Chromea", + "Error while accessing microphone & camera" : "Virhe yhdistettäessä mikrofoniin ja kameraan", + "%s Talk on your mobile devices" : "%s Keskustele mobiililaitteillasi", + "Join conversations at any time, anywhere, on any device." : "Liity keskusteluihin milloin tahansa, mistä tahansa ja miltä tahansa laitteelta.", + "Android app" : "Android-sovellus", + "iOS app" : "iOS-sovellus", + "__language_name__" : "suomi", + "Call summary (%s)" : "Puhelun yhteenveto (%s)", + "Tasks" : "Tehtävät", + "Notes" : "Muistiinpanot", + "Reports" : "Raportit", + "Call summary" : "Puhelun yhteenveto", + "Call summary - {title}" : "Puhelun yhteenveto - {title}", + "Talk conversation for event" : "Tapahtuman Talk-keskustelu", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Sovi tapaaminen kalenterissasi. Talk-keskustelu pitää asettaa sijainniksi, jotta se näkyy tässä", + "Set reminder for later today" : "Aseta muistutus myöhemmälle ajankohdalle tälle päivälle", + "Set reminder for tomorrow" : "Aseta muistutus huomiselle", + "Set reminder for this weekend" : "Aseta muistutus tälle viikonlopulle", + "Set reminder for next week" : "Aseta muistutus seuraavalle viikolle", + "Talk recording from {time} ({conversation})" : "Äänitallenne {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Kyselyn tulokset • %n ääni","Kyselyn tulokset • %n ääntä"], + "Submit vote" : "Lähetä ääni", + "Your privacy setting has been saved" : "Yksityisyysasetuksesi on tallennettu", + "Failed to save sounds setting" : "Ääniasetusten tallentaminen epäonnistui", + "Sounds setting saved" : "Ääniasetukset tallennettu", + "Always shown if recording consent is required" : "Näytetään aina, jos tarvitaan suostumus äänitykseen", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Liityit keskusteluun toisessa ikkunassa tai toisella laitteella. Tämä ei ole tällä hetkellä tuettua Nextcloud Talkissa, joten tämä istunto suljettiin." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/fr.js b/l10n/fr.js new file mode 100644 index 0000000..627ea15 --- /dev/null +++ b/l10n/fr.js @@ -0,0 +1,2213 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "une conversation", + "(Duration %s)" : "(Durée %s)", + "You attended a call with {user1}" : "Vous avez participé à un appel avec {user1}", + "_%n guest_::_%n guests_" : ["%n invité","%n invités","%n invités"], + "You attended a call with {user1} and {user2}" : "Vous avez participé à un appel avec {user1} et {user2} ", + "You attended a call with {user1}, {user2} and {user3}" : "Vous avez participé à un appel avec {user1}, {user2} et {user3} ", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Vous avez participé à un appel avec {user1}, {user2}, {user3} et {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Vous avez participé à un appel avec {user1}, {user2}, {user3}, {user4} et {user5}", + "_%n other_::_%n others_" : ["%n autre","%n autres","%n autres"], + "{actor} invited you to {call}" : "{actor} vous a invité à {call}", + "You were invited to a conversation or had a call" : "Vous avez été invité·e à une conversation ou avez eu un appel", + "Other activities" : "Autres activités", + "Talk" : "Talk", + "Guest" : "Invité", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bienvenue sur Nextcloud Talk !\nDans cette conversation, vous serez informé des nouvelles fonctionnalités disponibles sur Nextcloud Talk.", + "## New in Talk %s" : "## Nouveau sur Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge et Safari peuvent désormais être utilisés pour participer aux appels audio et vidéo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Les conversations un-à-un sont désormais persistantes et ne peuvent plus être transformées en conversations de groupe par accident. De plus, lorsque l'un des participants quitte la conversation, celle-ci n'est plus automatiquement supprimée. Ce n'est que si les deux participants quittent la conversation que celle-ci est supprimée du serveur.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Vous pouvez notifier tous les participants en écrivant \"@all\" dans la discussion", + "- With the \"arrow-up\" key you can repost your last message" : "- Avec la touche \"flèche du haut\" vous pouvez renvoyer votre dernier message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk peut maintenant utiliser des commandes, envoyez \"/help\" comme un message dans le chat pour vérifier si l'administrateur en a configuré", + "- With projects you can create quick links between conversations, files and other items" : "- Avec les projets vous pouvez créer des liens rapides entre des conversations, des fichiers et d'autres éléments", + "- You can now mention guests in the chat" : "- Désormais vous pouvez mentionner les invités dans la discussion", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Les conversations peuvent désormais avoir une salle d'attente. Cela permet aux modérateurs de rejoindre la conversation et l'appel afin de préparer la réunion pendant que les invités attendent", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Vous pouvez maintenant répondre directement aux messages, ce qui permet aux autres utilisateurs de mieux comprendre le contexte de votre message", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La recherche de conversations et de participants permet désormais de filtrer vos conversations existantes, ce qui facilite considérablement la recherche de conversations antérieures", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Vous pouvez désormais ajouter des groupes d'utilisateurs aux conversations lorsque l'application Cercles est installée", + "- Check out the new grid and call view" : "- Découvrez la nouvelle vue en grille des appels", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Vous pouvez maintenant téléverser et glisser-déposer des fichiers directement depuis votre appareil vers la discussion.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "Les fichiers partagés sont maintenant ouverts directement à l'intérieur de la conversation avec les applications de visionnage", + "- You can now search for chats and messages in the unified search in the top bar" : "- Vous pouvez maintenant rechercher dans les discussions et les messages depuis la recherche unifiée de la barre supérieure", + "- Spice up your messages with emojis from the emoji picker" : "- Mettez du piment dans vos messages avec les émojis du sélecteur d'émojis", + "- You can now change your camera and microphone while being in a call" : "- Vous pouvez maintenant modifier votre microphone et votre caméra pendant l'appel", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Donnez à vos conversations un contexte avec une description et ouvrez-les pour que les utilisateurs connectés puissent les trouver et s'y joindre.", + "- See a read status and send failed messages again" : "- Voir un statut de lecture et renvoyer les messages échoués", + "- Raise your hand in a call with the R key" : "- Lever la main lors d'un appel avec la touche R", + "- Join the same conversation and call from multiple devices" : "- Participez à la même conversation et appel depuis plusieurs appareils", + "- Send voice messages, share your location or contact details" : "- Envoyez des messages vocaux, partagez votre emplacement ou vos coordonnées", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Ajoutez des groupes à une conversation et les nouveaux membres du groupe seront automatiquement ajoutés en tant que participants", + "- A preview of your audio and video is shown before joining a call" : "- Une prévisualisation de vos flux audio et vidéo est montrée avant de rejoindre un appel", + "- You can now blur your background in the newly designed call view" : "- Vous pouvez maintenant flouter l'arrière-plan dans la nouvelle disposition de la fenêtre d'appel", + "- Moderators can now assign general and individual permissions to participants" : "- Les modérateurs peuvent maintenant donner des permissions générales et individuelles aux participants", + "- You can now react to chat messages" : "- Vous pouvez maintenant réagir aux messages instantanés", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dans le panneau latéral, vous pouvez désormais trouver une vue globale des derniers éléments partagés", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utiliser un sondage pour connaître l'opinion des autres ou définir une date", + "- Configure an expiration time for chat messages" : "- Configurer une durée d'expiration pour les messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Lancez les appels sans notifier les autres dans les grandes conversations. Vous pouvez envoyer une notification d'appel individuel une fois que l'appel a commencé.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envoi des messages sans notifier les destinataires si ce n'est pas urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Les émojis peuvent maintenant être autocomplétés en tapant un « : »", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Liez divers éléments grâce au sélecteur intelligent en tapant un « / »", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Les modérateurs peuvent maintenant créer des salles de sous-groupe (nécessite un serveur haute performance)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Les appels peuvent maintenant être enregistrés (nécessite un serveur haute performance)", + "- Conversations can now have an avatar or emoji as icon" : "- Les conversations peuvent maintenant avoir comme icône un avatar ou un emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- des fonds d'écran virtuels sont maintenant disponibles en plus du fond flouté pour les appels vidéos", + "- Reactions are now available during calls" : "- Les réactions sont maintenant possible pendant les appels", + "- Typing indicators show which users are currently typing a message" : "- Des indicateurs montrent quels utilisateurs sont actuellement en train d'écrire des messages", + "- Groups can now be mentioned in chats" : "- Les groupes peuvent maintenant être mentionnés dans les conversations", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Les enregistrements d'appel sont automatiquement retranscrits si une application de transcription est configurée", + "- Chat messages can be translated if a translation provider app is registered" : "- Les messages peuvent être traduits automatiquement si une application de traduction est configurée", + "- **Markdown** can now be used in _chat_ messages" : "- La syntaxe **Markdown** peut maintenant être utilisée dans la messagerie instantanée", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Les Webhooks sont maintenant disponibles pour créer des robots conversationnels. Voir la documentation pour plus d'informations : https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Définir un rappel sur un message pour être notifié à nouveau plus tard", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utiliser la conversation \"Note à soi-même\" pour prendre des notes et partager des infos entre vos appareils", + "- Captions allow to send a message with a file at the same time" : "- Légendes permet d'envoyer un message avec un fichier en même temps", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- La vidéo de l’intervenant est maintenant visible quand le partage d’écran est activé et les réactions sont animées", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Les messages peuvent maintenant être modifiés par les auteurs connectés et les modérateurs pendant 6 heures", + "- Unsent message drafts are now saved in your browser" : "- Les messages non envoyés sont maintenant sauvegardés dans votre navigateur", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Le chat textuel peut désormais être effectué de manière fédérée avec d'autres serveurs Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Les modérateurs peuvent maintenant bannir les comptes et les invités pour éviter qu'ils ne rejoignent à nouveau une conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Les prochaines réunions fixées dans les évènements liés du calendrier et les remplaçants pendant les absences sont maintenant visibles dans les conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Les appels peuvent désormais être effectués de manière fédérée avec d'autres serveurs Talk (nécessite le backend hautes performances)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introduction du client Nextcloud Talk pour Windows, macOS et Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Résume les enregistrements d'appel et les messages non lus dans les discussions avec l'Assistant Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Réunions améliorées avec la reconnaissance des invités via leur adresse e-mail, l'import de liste de participants, des brouillons pour les sondages et le téléchargement de la liste des participants à un appel.", + "- Archive conversations to stay focused" : "- Archivage des conversations pour rester concentré", + "- Schedule a meeting into your calendar from within a conversation" : "- Planifier une réunion dans votre calendrier depuis une conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Rechercher des messages de la conversation actuelle directement depuis le panneau latéral de droite", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Voir plus de conversations d'un seul coup d'oeil avec la nouvelle liste compacte (à activer dans les paramètres de Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Les conversations liées à des réunions ont maintenant leur titre et description synchronisée avec le calendrier et son masquées avec un filtre de recherche jusqu'à ce que leur date de début approche.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marquez les conversations comme sensibles dans les paramètres de notification, pour cacher les contenus des messages de la liste des conversations et des notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Pour recevoir des notifications push en mode \"Ne pas déranger\", marquer les conversations comme importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Ajouter des participants à une conversation privée pour créer un nouvel appel de groupe à la volée", + "- Use threads to keep your chat and discussions organized" : "- Utilisez les fils de discussion pour organiser vos conversations et vos discussions", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Les transcriptions en direct sont désormais disponibles pendant l'appel (nécessite l'application ExApp de transcription en direct et le backend haute performance)", + "- Moderators can now pin messages so they are kept at the top" : "- Les modérateurs peuvent désormais épingler des messages afin qu'ils restent en haut de la page. ", + "- Schedule a message to send it at a later time" : "- Programmer un message pour l'envoyer plus tard", + "_All %n participant_::_All %n participants_" : ["Le participant","Les %n participants","Les %n participants"], + "Talk updates ✅" : "Mises à jour de Talk ✅", + "Reaction deleted by author" : "Réaction supprimée par son auteur", + "{actor} created the conversation" : "{actor} a créé la conversation", + "You created the conversation" : "Vous avez créé la conversation", + "System created the conversation" : "Le système a créé la conversation", + "An administrator created the conversation" : "Un administrateur a créé la conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a renommé la conversation de \"%1$s\" à \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Vous avez renommé la conversation de \"%1$s\" à \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrateur a renommé la conversation de \"%1$s\" à \"%2$s\"", + "{actor} set the description" : "{actor} a renseigné la description", + "You set the description" : "Vous avez renseigné la description", + "An administrator set the description" : "Un administrateur a renseigné la description", + "{actor} removed the description" : "{actor} a supprimé la description", + "You removed the description" : "Vous avez supprimé la description", + "An administrator removed the description" : "Un administrateur a supprimé la description", + "You started a silent call" : "Vous avez lancé un appel silencieux", + "Outgoing silent call" : "Appel silencieux sortant", + "{actor} started a silent call" : "{actor} a lancé un appel silencieux", + "Incoming silent call" : "Appel silencieux entrant", + "You started a call" : "Vous avez lancé un appel", + "Outgoing call" : "Appel sortant", + "{actor} started a call" : "{actor} a lancé un appel", + "Incoming call" : "Appel entrant", + "{actor} joined the call" : "{actor} a rejoint l'appel", + "You joined the call" : "Vous avez rejoint l'appel", + "{actor} left the call" : "{actor} a quitté l'appel", + "You left the call" : "Vous avez quitté l'appel", + "{actor} unlocked the conversation" : "{actor} a déverrouillé la conversation", + "You unlocked the conversation" : "Vous avez déverrouillé la conversation", + "An administrator unlocked the conversation" : "Un administrateur a déverrouillé la conversation", + "{actor} locked the conversation" : "{actor} a verrouillé la conversation", + "You locked the conversation" : "Vous avez verrouillé la conversation", + "An administrator locked the conversation" : "Un administrateur a verrouillé la conversation", + "{actor} limited the conversation to the current participants" : "{actor} a restreint la conversation aux participants actuels", + "You limited the conversation to the current participants" : "Vous avez restreint la conversation aux participants actuels", + "An administrator limited the conversation to the current participants" : "Un administrateur a restreint la conversation aux participants actuels", + "{actor} opened the conversation to registered users" : "{actor} a ouvert la conversation aux utilisateurs enregistrés", + "You opened the conversation to registered users" : "Vous avez ouvert la conversation aux utilisateurs enregistrés", + "An administrator opened the conversation to registered users" : "Un administrateur a ouvert la conversation aux utilisateurs enregistrés", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} a ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités.", + "You opened the conversation to registered users and users created with the Guests app" : "Vous avez ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrateur a ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités.", + "The conversation is now open to everyone" : "La conversation est maintenant ouverte à tout le monde", + "{actor} opened the conversation to everyone" : "{actor} a ouvert la conversation à tout le monde", + "You opened the conversation to everyone" : "Vous avez ouvert la conversation à tout le monde.", + "{actor} restricted the conversation to moderators" : "{actor} a restreint la conversation aux modérateurs", + "You restricted the conversation to moderators" : "Vous avez restreint la conversation aux modérateurs", + "{actor} started breakout rooms" : "{actor} a démarré les salles de sous-groupes", + "You started breakout rooms" : "Vous avez démarré les salles de sous-groupes", + "{actor} stopped breakout rooms" : "{actor} a stoppé les salles de sous-groupes", + "You stopped breakout rooms" : "Vous avez mis fin aux salles de sous-groupes", + "{actor} allowed guests" : "{actor} a autorisé les invités", + "You allowed guests" : "Vous avez autorisé les invités", + "An administrator allowed guests" : "Un administrateur a autorisé les invités", + "{actor} disallowed guests" : "{actor} a désactivé les invités", + "You disallowed guests" : "Vous avez désactivé les invités", + "An administrator disallowed guests" : "Un administrateur a désactivé les invités", + "{actor} set a password" : "{actor} a défini un mot de passe", + "You set a password" : "Vous avez défini un mot de passe", + "An administrator set a password" : "Un administrateur a défini un mot de passe", + "{actor} removed the password" : "{actor} a supprimé le mot de passe", + "You removed the password" : "Vous avez supprimé le mot de passe", + "An administrator removed the password" : "Un administrateur a supprimé le mot de passe", + "{actor} added {user}" : "{actor} a ajouté {user}", + "You joined the conversation" : "Vous avez rejoint la conversation", + "{actor} joined the conversation" : "{actor} a rejoint la conversation", + "You added {user}" : "Vous avez ajouté {user}", + "{actor} added you" : "{actor} vous a ajouté", + "An administrator added you" : "Un administrateur vous a ajouté", + "An administrator added {user}" : "Un administrateur a ajouté {user}", + "You left the conversation" : "Vous avez quitté la conversation", + "{actor} left the conversation" : "{actor} a quitté la discussion", + "{actor} removed {user}" : "{actor} a retiré {user}", + "You removed {user}" : "Vous avez retiré {user}", + "{actor} removed you" : "{actor} vous a retiré", + "An administrator removed you" : "Un administrateur vous a retiré", + "An administrator removed {user}" : "Un administrateur a retiré {user}", + "{actor} invited {federated_user}" : "{actor} a invité {federated_user}", + "You invited {federated_user}" : "Vous avez invité {federated_user}", + "You accepted the invitation" : "Vous avez accepté l'invitation", + "{actor} invited you" : "{actor} vous a invité", + "An administrator invited you" : "Un administrateur vous a invité", + "An administrator invited {federated_user}" : "Un administrateur a invité {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} a accepté l'invitation", + "{actor} removed {federated_user}" : "{actor} a retiré {federated_user}", + "You removed {federated_user}" : "Vous avez retiré {federated_user}", + "You declined the invitation" : "Vous avez décliné l'invitation", + "An administrator removed {federated_user}" : "Un administrateur a retiré {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} a refusé l'invitation", + "{actor} added group {group}" : "{actor} a ajouté le groupe {group}", + "You added group {group}" : "Vous avez ajouté le groupe {group}", + "An administrator added group {group}" : "Un administrateur a ajouté le groupe {group}", + "{actor} removed group {group}" : "{actor} a supprimé le groupe {group}", + "You removed group {group}" : "Vous avez supprimé le groupe {group}", + "An administrator removed group {group}" : "Un administrateur a supprimé le groupe {group}", + "{actor} added team {circle}" : "{actor} a ajouté l’équipe {circle}", + "You added team {circle}" : "Vous avez ajouté l’équipe {circle}", + "An administrator added team {circle}" : "Un administrateur a ajouté l’équipe {circle}", + "{actor} removed team {circle}" : "{actor} a supprimé l’équipe {circle}", + "You removed team {circle}" : "Vous avez supprimé l’équipe {circle}", + "An administrator removed team {circle}" : "Un administrateur a supprimé l’équipe {circle}", + "{actor} added {phone}" : "{actor} a ajouté {phone}", + "You added {phone}" : "Vous avez ajouté {phone}", + "An administrator added {phone}" : "Un administrateur a ajouté {phone}", + "{actor} removed {phone}" : "{actor} a supprimé {phone}", + "You removed {phone}" : "Vous avez supprimé {phone}", + "An administrator removed {phone}" : "Un administrateur a supprimé {phone}", + "{actor} promoted {user} to moderator" : "{actor} a promu {user} modérateur", + "You promoted {user} to moderator" : "Vous avez promu {user} modérateur", + "{actor} promoted you to moderator" : "{actor} vous a promu modérateur", + "An administrator promoted you to moderator" : "Un administrateur vous a promu modérateur", + "An administrator promoted {user} to moderator" : "Un administrateur a promu {user} modérateur", + "{actor} demoted {user} from moderator" : "{actor} a retiré à {user} le rôle de modérateur", + "You demoted {user} from moderator" : "Vous avez retiré à {user} son rôle de modérateur", + "{actor} demoted you from moderator" : "{actor} vous a retiré le rôle de modérateur", + "An administrator demoted you from moderator" : "Un administrateur vous a retiré le rôle de modérateur", + "An administrator demoted {user} from moderator" : "Un administrateur a retiré à {user} le rôle de modérateur", + "{actor} shared a file which is no longer available" : "{actor} a partagé un fichier qui n'est plus disponible", + "You shared a file which is no longer available" : "Vous avez partagé un fichier qui n'est plus disponible", + "File shares are currently not supported in federated conversations" : "Le partage de fichiers n'est actuellement pas supporté dans les conversations fédérées", + "The shared location is malformed" : "L'emplacement partagé est mal formaté", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} a configuré Matterbridge pour synchroniser la conversation avec d'autres messageries instantanées", + "You set up Matterbridge to synchronize this conversation with other chats" : "Vous avez configuré Matterbridge pour synchroniser la conversation avec d'autres messageries instantanées", + "{actor} created thread {title}" : "{actor} a créé le fil de discussion {title}", + "You created thread {title}" : "Vous avez créé le fil de discussion {title}", + "{actor} renamed thread {title}" : "{actor} a renommé le fil de discussion {title}", + "You renamed thread {title}" : "Vous avez renommé le fil de discussion {title}", + "{actor} updated the Matterbridge configuration" : "{actor} a mis à jour la configuration de Matterbridge", + "You updated the Matterbridge configuration" : "Vous avez modifié la configuration de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} a supprimé la configuration de Matterbridge", + "You removed the Matterbridge configuration" : "Vous avez supprimé la configuration de Matterbridge", + "{actor} started Matterbridge" : "{actor} a démarré Matterbridge", + "You started Matterbridge" : "Vous avez démarré Matterbridge", + "{actor} stopped Matterbridge" : "{actor} a arrêté Matterbridge", + "You stopped Matterbridge" : "Vous avez arrêté Matterbridge", + "{actor} deleted a message" : "{actor} a supprimé un message", + "You deleted a message" : "Vous avez supprimé un message", + "{actor} edited a message" : "{actor} a modifié un message", + "You edited a message" : "Vous avez modifié un message", + "{actor} pinned a message" : "{actor} a épinglé un message", + "You pinned a message" : "Vous avez épinglé un message", + "{actor} unpinned a message" : "{actor} a désépinglé un message", + "Message was automatically unpinned" : "Le message a été désépinglé automatiquement", + "You unpinned a message" : "Vous avez désépinglé un message", + "{actor} deleted a reaction" : "{actor} a supprimé une réaction", + "You deleted a reaction" : "Vous avez supprimé une réaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Vous avez défini l'expiration des messages à %n semaine","Vous avez défini l'expiration des messages à %n semaines","Vous avez défini l'expiration des messages à %n semaines"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Vous avez défini l'expiration des messages à %n jour","Vous avez défini l'expiration des messages à %n jours","Vous avez défini l'expiration des messages à %n jours"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Vous avez défini l'expiration des messages à %n heure","Vous avez défini l'expiration des messages à %n heures","Vous avez défini l'expiration des messages à %n heures"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Vous avez défini l'expiration des messages à %n minute","Vous avez défini l'expiration des messages à %n minutes","Vous avez défini l'expiration des messages à %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} a défini l'expiration des messages à %n semaine","{actor} a défini l'expiration des messages à %n semaines","{actor} a défini l'expiration des messages à %n semaines"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} a défini l'expiration des messages à %n jour","{actor} a défini l'expiration des messages à %n jours","{actor} a défini l'expiration des messages à %n jours"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} a défini l'expiration des messages à %n heure","{actor} a défini l'expiration des messages à %n heures","{actor} a défini l'expiration des messages à %n heures"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} a défini l'expiration des messages à %n minute","{actor} a défini l'expiration des messages à %n minutes","{actor} a défini l'expiration des messages à %n minutes"], + "{actor} disabled message expiration" : "{actor} a désactivé l'expiration des messages", + "You disabled message expiration" : "Vous avez désactivé l'expiration des messages", + "{actor} cleared the history of the conversation" : "{actor} a effacé l'historique de la conversation", + "You cleared the history of the conversation" : "Vous avez effacé l'historique de la conversation", + "{actor} set the conversation picture" : "{actor} a défini l'image de la conversation", + "You set the conversation picture" : "Vous avez sélectionné une image pour la conversation", + "{actor} removed the conversation picture" : "{actor} a supprimé l'image de la conversation", + "You removed the conversation picture" : "Vous avez supprimé l'image de la conversation", + "{actor} ended the poll {poll}" : "{actor} a mis fin au sondage {poll}", + "You ended the poll {poll}" : "Vous avez mis fin au sondage {poll}", + "{actor} started the video recording" : "{actor} a lancé l'enregistrement vidéo", + "You started the video recording" : "Vous avez lancé l'enregistrement vidéo", + "{actor} stopped the video recording" : "{actor} a stoppé l'enregistrement vidéo", + "You stopped the video recording" : "Vous avez stoppé l'enregistrement vidéo", + "{actor} started the audio recording" : "{actor} a lancé l'enregistrement audio", + "You started the audio recording" : "Vous avez lancé l'enregistrement audio", + "{actor} stopped the audio recording" : "{actor} a stoppé l'enregistrement audio", + "You stopped the audio recording" : "Vous avez stoppé l'enregistrement audio", + "The recording failed" : "L'enregistrement a échoué", + "Someone voted on the poll {poll}" : "Quelqu'un a participé au sondage {poll}", + "Message deleted by author" : "Message supprimé par l'auteur", + "Message deleted by {actor}" : "Message supprimé par {actor}", + "Message deleted by you" : "Message supprimé par vous", + "Deleted user" : "Utilisateur supprimé", + "Unknown number" : "Numéro inconnu", + "Administration" : "Administration", + "System" : "Système", + "%s (guest)" : "%s (invité)", + "Missed call" : "Appel manqué", + "Unanswered call" : "Appel sans réponse", + "Call ended (Duration {duration})" : "L'appel a pris fin (Durée {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel a pris fin, car il a atteint la durée maximale (Durée {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} a mis fin à l'appel (Durée {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["L'appel avec %n invité a pris fin, car il a atteint la durée maximale (Durée {duration})","L'appel avec %n invités a pris fin, car il a atteint la durée maximale (Durée {duration})","L'appel avec %n invités a pris fin, car il a atteint la durée maximale (Durée {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["L'appel avec %n invité a pris fin (Durée {duration})","L'appel avec %n invités a pris fin (Durée {duration})","L'appel avec %n invités a pris fin (Durée {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} a terminé l'appel avec %n invité (Durée {duration})","{actor} a terminé l'appel avec %n invités (Durée {duration})","{actor} a terminé l'appel avec %n invités (Durée {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1} ended (Duration {duration})" : "Fin de l'appel avec {user1} (Durée {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} a terminé l'appel avec {user1} (Durée {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1} et {user2} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "L'appel avec {user1} et {user2} a pris fin (Durée {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1} et {user2} (Durée {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2} et {user3} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "L'appel avec {user1}, {user2} et {user3} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2} et {user3} (Durée {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3} et {user4} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3} et {user4} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2}, {user3} et {user4} (Durée {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3}, {user4} et {user5} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3}, {user4} et {user5} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2}, {user3}, {user4} et {user5} (Durée {duration})", + "Message of {user} in {conversation}" : "Message de {user} dans {conversation}", + "Message of {user}" : "Message de {user}", + "Message of a deleted user in {conversation}" : "Message d'un utilisateur supprimé dans {conversation}", + "Talk conversations" : "Conversations orales", + "Talk to %s" : "Discuter avec %s", + "An error occurred. Please contact your administrator." : "Une erreur est survenue. Merci de contacter votre administrateur.", + "Storage quota exceeded" : "Quota de stockage dépassé", + "File not found" : "Fichier non trouvé", + "File is not shared, or shared but not with the user" : "Le fichier n'est pas partagé, ou partagé mais pas avec cet utilisateur", + "No account available to delete." : "Aucun compte disponible à supprimer", + "Poll" : "Sondage", + "Password needs to be set" : "Le mot de passe doit être défini", + "Uploading the file failed" : "Le téléversement du fichier a échoué", + "No image file provided" : "Aucun fichier image fourni", + "File is too big" : "Le fichier est trop gros", + "Invalid file provided" : "Fichier invalide fourni", + "Invalid image" : "Image invalide", + "Unknown filetype" : "Type de fichier inconnu", + "Talk mentions" : "Mentions sur Talk", + "More conversations" : "Plus de conversations", + "Say hi to your friends and colleagues!" : "Dites bonjour à vos amis et collègues !", + "No unread mentions" : "Aucune mention non lue", + "Call in progress" : "Appel en cours", + "You were mentioned" : "Vous avez été mentionné·e", + "Write to conversation" : "Écrire dans la conversation", + "Writes event information into a conversation of your choice" : "Écrit l'évènement dans une conversation de votre choix", + "Missing email field in header line" : "Le champ e-mail est absent dans la ligne d'entête", + "Following lines are invalid: %s" : "Les lignes suivantes sont invalides : %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vous a invité à la conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "Vous avez été invité·e à la conversation \"%s\".", + "Conversation invitation" : "Invitation à une discussion", + "Scheduled time" : "Horaire programmé", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "Vous pouvez aussi appeler au téléphone en utilisant les informations suivantes", + "Dial-in information" : "Informations d'appel", + "Meeting ID" : "ID de réunion", + "Your PIN" : "Votre PIN", + "Click the button below to join the lobby now." : "Cliquez sur le bouton ci-dessous pour rejoindre la salle d'attente dès maintenant.", + "Click the link below to join the lobby now." : "Cliquez sur le lien ci-dessous pour rejoindre la salle d'attente dès maintenant.", + "Join lobby for \"%s\"" : "Rejoignez le hall \"%s\"", + "Click the button below to join the conversation now." : "Cliquez le bouton ci-dessous pour rejoindre la conversation maintenant.", + "Click the link below to join the conversation now." : "Cliquez sur le lien ci-dessous pour rejoindre la conversation maintenant.", + "Join \"%s\"" : "Rejoindre \"%s\"", + "Meeting" : "Réunion", + "Password request: %s" : "Demande de mot de passe : %s", + "Private conversation" : "Conversation privée", + "Deleted user (%s)" : "Utilisateur supprimé (%s)", + "Failed to upload call recording" : "Le téléversement de l'enregistrement de l'appel a échoué", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Le serveur d'enregistrement n'a pas réussi à téléverser l'enregistrement de l'appel {call}. Veuillez contacter l'administrateur.", + "Share to chat" : "Partager pour discuter", + "Dismiss notification" : "Ignorer la notification", + "Call recording now available" : "Enregistrement de l'appel maintenant disponible", + "The recording for the call in {call} was uploaded to {file}." : "L'enregistrement de l'appel dans {call} a été téléversé vers {file}.", + "Transcript now available" : "Transcription maintenant disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcription de l'appel {call} a été téléversé vers {file}.", + "Failed to transcript call recording" : "Impossible de transcrire l'enregistrement d'appel", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Le serveur n'est pas parvenu à transcrire l'enregistrement vers {file} pour l'appel {call}. Merci de contacter l'administrateur.", + "Call summary now available" : "Le résumé de l'appel est maintenant disponible", + "The summary for the call in {call} was uploaded to {file}." : "Le résumé de l'appel dans la conversation {call} a été téléversé dans {file}.", + "Failed to summarize call recording" : "Échec du résumé de l'enregistrement de l'appel", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Le serveur n'a pas réussi à résumer l'enregistrement dans {file} pour l'appel dans la conversation {call}. Merci de contacter l'administrateur.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vous a invité à rejoindre {roomName} sur {remoteServer}", + "Accept" : "Accepter", + "Decline" : "Décliner", + "{user1} invited you to a federated conversation" : "{user1} vous a invité dans une conversation fédérée", + "Someone reacted" : "Quelqu'un a réagi", + "New message" : "Nouveau message", + "Reminder" : "Rappel", + "Someone mentioned you" : "Quelqu'un vous a mentionné", + "Notification" : "Notification", + "Someone reacted in a private conversation" : "Quelqu'un a réagi dans une conversation privée", + "You received a message in a private conversation" : "Vous avez reçu un message dans une conversation privée", + "Reminder in a private conversation" : "Rappel dans une conversation privée", + "Someone mentioned you in a private conversation" : "Quelqu'un vous a mentionné dans une conversation privée", + "Notification in a private conversation" : "Notification dans une conversation privée", + "Reminder: You in {call}" : "Rappel : vous dans {call}", + "Reminder: {user} in {call}" : "Rappel : {user} dans {call}", + "Reminder: Deleted user in {call}" : "Rappel : utilisateur supprimé dans {call}", + "Reminder: {guest} (guest) in {call}" : "Rappel : {guest} (invité) dans {call}", + "Reminder: Guest in {call}" : "Rappel : invité dans {call}", + "{user} reacted with {reaction}" : "{user} a réagi avec {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a réagi avec {reaction} dans {call}", + "Deleted user reacted with {reaction} in {call}" : "Un utilisateur supprimé a réagi avec {reaction} dans {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (invité) a réagi avec {reaction} dans {call}", + "Guest reacted with {reaction} in {call}" : "Un invité a réagi avec {reaction} dans {call}", + "{user} in {call}" : "{user} dans {call}", + "Deleted user in {call}" : "Utilisateur supprimé dans {call}", + "{guest} (guest) in {call}" : "{guest} (invité) dans {call}", + "Guest in {call}" : "Invité dans {call}", + "{user} sent you a private message" : "{user} vous a envoyé un message privé", + "{user} sent a message in conversation {call}" : "{user} a envoyé un message dans la conversation {call}", + "A deleted user sent a message in conversation {call}" : "Un utilisateur (maintenant supprimé) a envoyé un message dans la conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) a publié un message dans la conversation {call}", + "A guest sent a message in conversation {call}" : "Un invité a envoyé un message dans la conversation {call}", + "{user} replied to your private message" : "{user} a répondu à votre message privé", + "{user} replied to your message in conversation {call}" : "{user} a répondu à votre message dans la conversation {call}", + "A deleted user replied to your message in conversation {call}" : "Un utilisateur supprimé a répondu à votre message dans la conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) a répondu à votre message dans la conversation {call}", + "A guest replied to your message in conversation {call}" : "Un invité a répondu à votre message dans la conversation {call}", + "Reminder: You in private conversation {call}" : "Rappel : vous dans la conversation privée {call}", + "Reminder: A deleted user in private conversation {call}" : "Rappel : un utilisateur supprimé dans la conversation privée {call}", + "Reminder: {user} in private conversation" : "Rappel : {user} dans une conversation privée", + "Reminder: You in conversation {call}" : "Rappel : vous dans la conversation {call}", + "Reminder: {user} in conversation {call}" : "Rappel : {user} dans la conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Rappel : un utilisateur supprimé dans la conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Rappel : {guest} (invité) dans la conversation {call}", + "Reminder: A guest in conversation {call}" : "Rappel : un invité dans la conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} a réagi avec {reaction} à votre message privé", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a réagi avec {reaction} à votre message dans la conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utilisateur supprimé a réagi avec {reaction} à votre message dans la conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invité) a réagi avec {reaction} à votre message dans la conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invité a réagi avec {reaction} à votre message dans la conversation {call}", + "{user} mentioned you in a private conversation" : "{user} vous a mentionné dans une conversation privée", + "{user} mentioned group {group} in conversation {call}" : "{user} a mentionné le groupe {group} dans la conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} a mentionné l'équipe {team} dans la conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} a mentionné tout le monde dans la conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} vous a mentionné dans la conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un utilisateur supprimé a mentionné le groupe {group} dans la conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un utilisateur supprimé a mentionné l'équipe {team} dans la conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un utilisateur supprimé a mentionné tout le monde dans la conversation {call}", + "A deleted user mentioned you in conversation {call}" : "Un utilisateur (maintenant supprimé) vous a mentionné dans la conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invité) a mentionné le groupe {group} dans la conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (invité) a mentionné l'équipe {team} dans la conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invité) a mentionné tout le monde dans la conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) vous a mentionné dans la conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invité a mentionné le groupe {group} dans la conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "Un invité a mentionné l'équipe {team} dans la conversation {call}", + "A guest mentioned everyone in conversation {call}" : "Un invité a mentionné tout le monde dans la conversation {call}", + "A guest mentioned you in conversation {call}" : "Un invité vous a mentionné dans la conversation {call}", + "View message" : "Voir message", + "Dismiss reminder" : "Faire disparaître le rappel", + "View chat" : "Afficher la discussion", + "{user} invited you to a group conversation: {call}" : "{user} vous a invité dans une conversation de groupe : {call}", + "Join call" : "Rejoindre l'appel", + "Answer call" : "Répondre à l'appel", + "{user} would like to talk with you" : "{user} souhaite vous parler", + "Call back" : "Rappeler", + "You missed a call from {user}" : "Vous avez manqué l'appel de {user}", + "Accept call" : "Accepter l'appel", + "Incoming phone call from {call}" : "Appel téléphonique de {call}", + "You missed a phone call from {call}" : "Vous avez raté un appel téléphonique de {call}", + "A group call has started in {call}" : "Un appel de groupe a été lancé dans {call}", + "You missed a group call in {call}" : "Vous avez manqué l'appel de groupe {call}", + "{email} is requesting the password to access {file}" : "{email} demande le mot de passe pour accéder au fichier {file}", + "{email} tried to request the password to access {file}" : "{email} a essayé d'obtenir le mot de passe pour accéder au fichier {file}", + "Someone is requesting the password to access {file}" : "Quelqu'un demande le mot de passe pour accéder au fichier {file}", + "Someone tried to request the password to access {file}" : "Quelqu'un a essayé d'obtenir le mot de passe pour accéder au fichier {file}", + "Open settings" : "Ouvrir les paramètres", + "Hosted signaling server added" : "Le signaling server hébergé a été ajouté ", + "The hosted signaling server is now configured and will be used." : "Le serveur de signalement hébergé est maintenant configuré et sera utilisé.", + "Hosted signaling server removed" : "Le signaling server hébergé a été supprimé", + "The hosted signaling server was removed and will not be used anymore." : "Le serveur de signalement hébergé a été supprimé et ne sera plus utilisé.", + "Hosted signaling server changed" : "Le signaling server hébergé a changé", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Le compte du serveur de signalisation hébergé a changé le statut de \"{oldstatus}\" à \"{newstatus}\".", + "pending" : "en attente", + "active" : "actif", + "expired" : "expiré", + "blocked" : "bloqué", + "error" : "erreur", + "The certificate of {host} expires in {days} days" : "Le certificat de {host} expire dans {days} jours", + "The certificate of {host} expired" : "Le certificat de {host} a expiré", + "Contact via Talk" : "Contacter via Talk", + "Open Talk" : "Ouvrir Talk", + "Default" : "Par défaut", + "Presentation" : "Présentation", + "Voice room" : "Salon vocal", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages dans la conversation actuelle", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} dans {conversation}", + "Messages in other conversations" : "Messages dans les autres conversations", + "One-to-one rooms always need to show the other users avatar" : "Les conversations en tête à tête nécessitent l'affichage des avatars des autres utilisateurs", + "Invalid emoji character" : "Caractère emoji invalide", + "Invalid background color" : "Couleur de fond invalide", + "Avatar image is not square" : "L'image d'avatar n'est pas carré", + "Room {number}" : "Salle {number}", + "Other" : "Autre", + "Failed to request trial because the trial server is unreachable. Please try again later." : "La requête de période d'essai a échouée car le serveur d'essai est injoignable. Merci d'essayer plus tard. ", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Il y a un problème d'authentification de cette instance. Il est possible qu'elle ne soit pas accessible depuis l'extérieur pour vérifier son URL.", + "Something unexpected happened." : "Quelque chose d’inattendu est survenu.", + "The URL is invalid." : "L'adresse est invalide.", + "An HTTPS URL is required." : "Une adresse HTTPS est exigée.", + "The email address is invalid." : "L'adresse e-mail est invalide.", + "The language is invalid." : "La langue est invalide.", + "The country is invalid." : "Le pays est invalide.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Il y a un problème avec la requête de la période d'essai. Veuillez vérifier les logs pour de plus amples informations.", + "Too many requests are send from your servers address. Please try again later." : "Trop de requêtes ont été envoyées depuis l'adresse de votre serveur. Veuillez essayer plus tard.", + "There is already a trial registered for this Nextcloud instance." : "Il y a déjà un compte d'essai enregistré pour cette instance Nextcloud.", + "Something unexpected happened. Please try again later." : "Quelque chose d’inattendu est survenu. Veuillez essayer plus tard.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "La requête de période d'essai a échouée car le comportement du serveur d'essai a été inapproprié. Merci d'essayer plus tard. ", + "Trial requested but failed to get account information. Please check back later." : "La requête de période d'essai a été soumise mais n'a pas pu obtenir l'information sur le compte. Merci de vérifier à nouveau plus tard.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Il y a un problème d'authentification de cette requête. Il est possible qu'elle ne soit pas accessible depuis l'extérieur pour vérifier son URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "La récupération des informations du compte a échoué car le serveur d'essai se comporte étrangement. Veuillez essayer à nouveau plus tard.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Il y a un problème avec la récupération des informations du compte. Veuillez vérifier les logs pour de plus amples informations.", + "There is no such account registered." : "Il n'y a pas de tel compte enregistré.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "La récupération des informations du compte a échoué car le serveur d'essai est injoignable. Veuillez essayer à nouveau plus tard.", + "Deleting the hosted signaling server account failed. Please check back later." : "La suppression du compte du serveur de signal a échoué. Veuillez essayer à nouveau plus tard. ", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "La suppression du compte a échoué car le serveur d'essai se comporte étrangement. Veuillez essayer à nouveau plus tard.", + "There is a problem with deleting the account. Please check your logs for further information." : "Il y a un problème avec la suppression du compte. Veuillez vérifier les logs pour de plus amples informations.", + "Too many requests are sent from your servers address. Please try again later." : "Trop de requêtes sont envoyées depuis l'adresse de votre serveur. Veuillez réessayer plus tard.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "La suppression du compte a échoué car le serveur d'essai est injoignable. Veuillez essayer à nouveau plus tard.", + "Note to self" : "Note à soi-même", + "A place for your private notes, thoughts and ideas" : "Un endroit pour vos notes privées, vos pensées et vos idées", + "Transcript is AI generated and may contain mistakes" : "La retranscription est générée par une intelligence artificielle et peut contenir des erreurs", + "Summary is AI generated and may contain mistakes" : "Le résumé est généré par une intelligence artificielle et peut contenir des erreurs.", + "Let's get started!" : "Allons-y !", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** est une plateforme de communication sécurisé et auto-hébergée qui s'intègre complètement dans l'écosystème Nextcloud\n\n#### Fonctionnalités clés de Nextcloud Talk:\n\n* Chat et messagerie dans des groupes privés et publics\n* Appels audio et vidéo\n* Partage de fichiers et intégration avec d'autres applications Nextcloud\n* Paramètres de la conversation, modération et contrôle de la vie privée personnalisables\n* Client Web, de bureau et mobile (iOS et Android)\n* Communication sécurisée & privée\n\nPlus d'informations dans [la documentation utilisateur](https://docs.nextcloud.com/server/latest/user_manual/fr/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bienvenue dans Nextcloud Talk\n\nNextcloud Talk est une application de messagerie instantanée puissante et privée qui s'intègre dans Nextcloud. Discutez avec des groupes publics et privés, collaborez avec des appels audio et vidéo, organisez des webinaires et des événements, personnalisez vos conversations et plus encore.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formater vos textes pour créer des messages mis en forme\n\nDans Nextcloud Talk, vous pouvez utiliser la syntaxe Markdown pour formater vos messages. Par exemple, appliquer un formatage **gras** ou *italique*, ou `présentez le texte comme du code`. Vous pouvez même créer des tableaux et ajouter des titres à votre texte.\n\nBesoin de corriger une faute de frappe ou changer la mise en forme ? Éditez votre message en cliquant \"Éditer le message\" dans le menu contextuel du message.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Ajoutez des liens et des pièces jointes\n\nAjoutez des fichiers depuis votre espace Nextcloud en utilisant le bouton \"+\". Partagez des éléments depuis Fichiers et d'autres applications Nextcloud. Certaines applications supportent même l'intégration interactive, par exemple l'application Text", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Suivez le flux des conversations : mentionnez les utilisateurs, réagissez à leur message et plus encore\n\nVous pouvez mentionner tout le monde dans la conversation en utilisant %s ou mentionner des participants spécifiques en tapant \"@\" et en sélectionnant leur nom dans la liste.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Vous pouvez répondre aux messages, les transférer dans d'autres conversations et à d'autres personnes, ou copier le contenu d'un message.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faites-en encore plus avec le sélecteur intelligent\n\nTapez simplement \"/\" ou allez sur le menu \"+\" pour ouvrir le sélecteur intelligent où vous pouvez ajouter du contenu varié à vos messages. Vous pouvez configurer le sélecteur intelligent pour être capable d'ajouter des éléments d'autres applications Nextcloud, des GIFs, des cartes, du contenu généré par intelligence artificielle et bien d'autres encore.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gérer les paramètres de conversattion\n\nDans le menu de la conversation, vous pouvez accéder à différents paramètres pour gérer vos conversations, comme : \n* Éditer les infos de la conversation\n* Gérer les notifications\n* Appliquer des règles de modération\n* Configurer l'accès et la sécurité\n* Activer des robots de conversation\n* et plus encore !", + "Andorra" : "Andorre", + "United Arab Emirates" : "Émirats Arabes Unis", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua et Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanie", + "Armenia" : "Arménie", + "Angola" : "Angola", + "Antarctica" : "Antarctique", + "Argentina" : "Argentine", + "American Samoa" : "Samoa américaines", + "Austria" : "Autriche", + "Australia" : "Australie", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaïdjan", + "Bosnia and Herzegovina" : "Bosnie-Herzégovine", + "Barbados" : " La Barbade", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgique", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarie", + "Bahrain" : "Bahreïn", + "Burundi" : "Burundi", + "Benin" : "Bénin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : " Les Bermudes", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivie, État plurinational de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saint-Eustache et Saba", + "Brazil" : "Brésil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoutan", + "Bouvet Island" : "Île Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Biélorussie", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Îles Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, République Démocratique du", + "Central African Republic" : "République centrafricaine", + "Congo" : "Congo", + "Switzerland" : "Suisse", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Îles Cook", + "Chile" : "Chili", + "Cameroon" : "Cameroun", + "China" : "Chine", + "Colombia" : "Colombie", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cap-Vert", + "Curaçao" : "Curaçao", + "Christmas Island" : "Île Christmas", + "Cyprus" : "Chypre", + "Czechia" : "République tchèque", + "Germany" : "Allemagne", + "Djibouti" : "Djibouti", + "Denmark" : "Danemark", + "Dominica" : "Dominique", + "Dominican Republic" : "République Dominicaine", + "Algeria" : "Algérie", + "Ecuador" : "Équateur", + "Estonia" : "Estonie", + "Egypt" : "Égypte", + "Western Sahara" : "Sahara occidental", + "Eritrea" : "Érythrée", + "Spain" : "Espagne", + "Ethiopia" : "Éthiopie", + "Finland" : "Finlande", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Îles Malouines (ou Falkland)", + "Micronesia, Federated States of" : "Micronésie, États fédérés de", + "Faroe Islands" : "Îles Féroé", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Royaume-Uni", + "Grenada" : "Grenade", + "Georgia" : "Géorgie", + "French Guiana" : "Guyane française", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambie", + "Guinea" : "Guinée", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinée Équatoriale", + "Greece" : "Grèce", + "South Georgia and the South Sandwich Islands" : "Géorgie du Sud et les îles Sandwich du Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinée-Bissau", + "Guyana" : "Guyane", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Îles Heard-et-MacDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatie", + "Haiti" : "Haïti", + "Hungary" : "Hongrie", + "Indonesia" : "Indonésie", + "Ireland" : "Irlande", + "Israel" : "Israël", + "Isle of Man" : "Île de Man", + "India" : "Inde", + "British Indian Ocean Territory" : "Territoire britannique de l'océan Indien", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, République islamique d'", + "Iceland" : "Islande", + "Italy" : "Italie", + "Jersey" : "Jersey", + "Jamaica" : "Jamaïque", + "Jordan" : "Jordanie", + "Japan" : "Japon", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirghizstan", + "Cambodia" : "Cambodge", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "Saint-Christophe-et-Niévès", + "Korea, Democratic People's Republic of" : "Corée du Nord, République populaire et démocratique de", + "Korea, Republic of" : "Corée, République de", + "Kuwait" : "Koweït", + "Cayman Islands" : "Îles Caïmans", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos, République démocratique populaire du", + "Lebanon" : "Liban", + "Saint Lucia" : "Sainte-Lucie", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituanie", + "Luxembourg" : "Luxembourg", + "Latvia" : "Lettonie", + "Libya" : "Libye", + "Morocco" : "Maroc", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavie, République de", + "Montenegro" : "Monténégro", + "Saint Martin (French part)" : "Saint Martin (Partie française)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Îles Marshall", + "North Macedonia" : "Macédoine du Nord", + "Mali" : "Mali", + "Myanmar" : "Birmanie", + "Mongolia" : "Mongolie", + "Macao" : "Macao", + "Northern Mariana Islands" : "Îles Mariannes du Nord", + "Martinique" : "Martinique", + "Mauritania" : "Mauritanie", + "Montserrat" : "Montserrat", + "Malta" : "Malte", + "Mauritius" : "Île Maurice", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexique", + "Malaysia" : "Malaisie", + "Mozambique" : "Mozambique", + "Namibia" : "Namibie", + "New Caledonia" : "Nouvelle-Calédonie", + "Niger" : "Niger", + "Norfolk Island" : "Île Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Pays-Bas", + "Norway" : "Norvège", + "Nepal" : "Népal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nouvelle-Zélande", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Pérou", + "French Polynesia" : "Polynésie française", + "Papua New Guinea" : "Papouasie-Nouvelle-Guinée", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Pologne", + "Saint Pierre and Miquelon" : "Saint Pierre et Miquelon", + "Pitcairn" : "Île Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestine, État de", + "Portugal" : "Portugal", + "Palau" : "Palaos", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Roumanie", + "Serbia" : "Serbie", + "Russian Federation" : "Russie, Fédération de", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabie Saoudite", + "Solomon Islands" : "Îles Salomon", + "Seychelles" : "Seychelles", + "Sudan" : "Soudan", + "Sweden" : "Suède", + "Singapore" : "Singapour", + "Saint Helena, Ascension and Tristan da Cunha" : "Sainte-Hélène, Ascension et Tristan da Cunha", + "Slovenia" : "Slovénie", + "Svalbard and Jan Mayen" : "Svalbard et Jan Mayen", + "Slovakia" : "Slovaquie", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Saint Marin", + "Senegal" : "Sénégal", + "Somalia" : "Somalie", + "Suriname" : "Suriname", + "South Sudan" : "Soudan du Sud", + "Sao Tome and Principe" : "Sao Tomé-et-Principe", + "El Salvador" : "Salvador", + "Sint Maarten (Dutch part)" : "Saint Martin (Partie néerlandaise)", + "Syrian Arab Republic" : "Syrie, République Arabe Syrienne", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Îles Turques-et-Caïques", + "Chad" : "Tchad", + "French Southern Territories" : "Terres australes et antarctiques françaises", + "Togo" : "Togo", + "Thailand" : "Thaïlande", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor oriental", + "Turkmenistan" : "Turkménistan", + "Tunisia" : "Tunisie", + "Tonga" : "Tonga", + "Turkey" : "Turquie", + "Trinidad and Tobago" : "Trinité-et-Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taïwan, Province de Chine", + "Tanzania, United Republic of" : "Tanzanie, République unie de", + "Ukraine" : "Ukraine", + "Uganda" : "Ouganda", + "United States Minor Outlying Islands" : "Îles mineures éloignées des États-Unis", + "United States of America" : "États-Unis d'Amérique", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Ouzbékistan", + "Holy See" : "Vatican", + "Saint Vincent and the Grenadines" : "Saint Vincent et les Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, République bolivarienne du", + "Virgin Islands, British" : "Îles Vierges britanniques", + "Virgin Islands, U.S." : "Îles Vierges des États-Unis", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis et Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yémen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrique du Sud", + "Zambia" : "Zambie", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Flou d'arrière-plan", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Impossible de vérifier la prise en charge du chargement WASM. Veuillez vérifier manuellement si votre serveur Web sert des fichiers `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Votre serveur Web n'est pas correctement configuré pour fournir les fichiers `.wasm`. Il s'agit généralement d'un problème lié à la configuration de Nginx. Pour le flou d'arrière-plan, un ajustement est nécessaire pour fournir également les fichiers `.wasm`. Comparez votre configuration Nginx à la configuration recommandée dans notre documentation.", + "Talk configuration values" : "Valeurs de configuration de Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Le forçage d'une durée d'appel n'est pris en charge qu'avec le système cron. Veuillez activer le système cron ou supprimer la configuration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Les petites valeurs `max_call_duration` (actuellement définies sur %d) ne sont pas applicables en raison de limitations techniques. La tâche en arrière-plan n'est exécutée que toutes les 5 minutes, utilisez-la donc à vos risques et périls.", + "Federation" : "Fédération", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Il est fortement recommandé de configurer \"memcache.locking\" lorsque Talk Federation est activé.", + "High-performance backend" : "Infrastructure de haute performance", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Aucun serveur haute performance configuré - Utiliser Nextcloud Talk sans serveur haute performance n'est possible que pour les appels limités à quelques personnes (maximum 2-3 participants). Merci de configurer un serveur haute performance pour permettre des appels entre de multiples participants sans ralentissements.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'exécution du mode \"conversation_cluster\" du backend hautes performances est obsolète et ne sera plus prise en charge dans la prochaine version. Le backend hautes performances prend désormais en charge le clustering réel, qui devrait être utilisé à la place.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La définition de plusieurs backends hautes performances est obsolète et ne sera plus prise en charge dans la prochaine version. À la place, un équilibreur de charge doit être configuré avec des serveurs de signalisation en cluster et configuré dans les paramètres Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La clé publique utilisée par l’algorithme %1$s ne correspond pas avec la clé privée enregistrée. Exécutez %2$s pour corriger le problème.", + "High-performance backend not configured correctly. Run %s for details." : "Le serveur Haute Performance n'est pas configuré correctement. Lancez %s pour plus de détails.", + "High-performance backend not configured correctly" : "Serveur haute-performance non correctement configuré", + "Error: Cannot connect to server" : "Erreur : impossible de se connecter au serveur", + "Error: Server did not respond with proper JSON" : "Erreur: Le serveur n'a pas répondu avec un JSON correct", + "Error: Certificate expired" : "Erreur : Certificat expiré", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erreur : les horloges du serveur Nextcloud et du serveur haute performance sont désynchronisées. Merci de vous assurer que les deux serveurs sont connectés à un serveur de temps ou synchronisez manuellement leurs horloges.", + "Could not get version" : "Impossible d'obtenir la version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erreur : version en cours {version} ; le serveur a besoin d'être mis à jour pour être compatible avec cette version de Talk", + "Error: Server responded with: {error}" : "Erreur: Le serveur a répondu avec: {error}", + "Error: Unknown error occurred" : "Erreur: Une erreur inconnue est survenue", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Attention : version actuelle : {version}; Le serveur ne supporte pas toutes les fonctionnalités de cette version de Talk , fonctionnalités manquantes : {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Il est fortement recommandé de configurer un cache mémoire lors de l'exécution de Nextcloud Talk avec un backend haute performance.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push est installé, cela améliore la ponctualité des notifications Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} n'est pas installé. Cela peut entraîner un retard dans les notifications Talk.", + "Recording backend" : "Moteur d'enregistrement", + "Using the recording backend requires a High-performance backend." : "L'utilisation d'un serveur d'enregistrement nécessite un serveur haute-performance.", + "No recording backend configured" : "Aucun serveur d'enregistrement configuré", + "SIP configuration" : "Configuration SIP", + "Using the SIP functionality requires a High-performance backend." : "L'utilisation de la fonctionnalité SIP nécessite un backend de hautes performances.", + "No SIP backend configured" : "Aucun serveur SIP configuré", + "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format de date doit être YYYY-MM-DD", + "Conversation not found" : "Discussion non trouvée", + "Path is already shared with this conversation" : "Le chemin est déjà partagé avec cette conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, conférence vidéo et audio utilisant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Discussions instantanées, vidéo et audioconférence utilisant WebRTC\n\n* 💬 **Discussions instantanées** Nextcloud Talk est livré avec un simple chat texte, vous permettant de partager ou de téléverser des fichiers depuis votre application Nextcloud Fichiers ou votre appareil local et de mentionner d’autres participants.\n* 👥 **Appels privés, de groupe, publics et protégés par mot de passe !** Invitez quelqu’un, un groupe entier ou envoyez un lien public pour inviter à un appel.\n* 🌐 ''Discussions instantanées fédérées** Discutez avec d’autres utilisateurs Nextcloud sur leurs serveurs\n* 💻 **Partage d’écran !** Partagez votre écran avec les participants de votre appel.\n* 🚀 **Intégration avec d’autres applications Nextcloud comme Fichiers, Agenda, Statut utilisateur, Tableau de bord, Flux, Cartes, Sélecteur intelligent, Contacts, Deck et bien d’autres encore.\n* 🌉 **Synchronisation avec d’autres solutions de discussions instantanées** Avec [Matterbridge](https://github.com/42wim/matterbridge/) intégré à Talk, vous pouvez facilement synchroniser de nombreuses autres solutions de chat avec Nextcloud Talk et vice-versa.", + "Leave call" : "Quitter l'appel", + "Navigating away from the page will leave the call in {conversation}" : "En quittant cette page, vous quitterez l'appel dans {conversation}", + "Stay in call" : "Rester en ligne", + "Error occurred when getting the conversation information" : "Une erreur est survenue lors de la récupération des informations de la conversation", + "Discuss this file" : "Discuter de ce fichier", + "Share this file with others to discuss it" : "Partagez ce fichier avec d'autres personnes pour en discuter", + "Share this file" : "Partager ce fichier", + "Join conversation" : "Rejoindre la conversation", + "This conversation is password-protected." : "Cette conversation est protégée par un mot de passe", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Nous avons détecté plusieurs tentatives de connexion invalides depuis votre adresse IP. Par conséquent, votre prochain tentative de connexion sera retardée de 30 secondes.", + "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", + "Password" : "Mot de passe", + "Submit" : "Soumettre", + "Error requesting the password." : "Erreur lors de la demande du mot de passe", + "Request password" : "Demande de mot de passe", + "This conversation has ended" : "Cette conversation a pris fin", + "Error occurred when joining the conversation" : "Une erreur est survenue au moment de rejoindre la conversation", + "Close Talk sidebar" : "Fermer le panneau latéral de Talk", + "Open Talk sidebar" : "Ouvrir le panneau latéral de Talk", + "Everyone" : "Tout le monde", + "Users and moderators" : "Utilisateurs et modérateurs", + "Moderators only" : "Seulement les modérateurs", + "Disable calls" : "Désactiver les appels", + "Save changes" : "Enregistrer les modifications", + "Saving …" : "Enregistrement...", + "Saved!" : "Enregistré !", + "Limit to groups" : "Limiter à des groupes", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Lorsqu'au moins un groupe est sélectionné, seules les personnes des groupes répertoriés peuvent participer aux conversations.", + "Guests can still join public conversations." : "Les invités peuvent toujours rejoindre les conversations publiques.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Les utilisateurs qui ne peuvent plus utiliser Talk seront toujours listés comme participants dans leur précédentes conversations et leurs messages instantanés seront conservés.", + "Limit using Talk" : "Limiter l'utilisation de Talk", + "Limit creating a public and group conversation" : "Limiter la création de conversation publique et de groupe", + "Limit creating conversations" : "Limiter la création de conversations", + "Limit starting a call" : "Limiter le lancement d'appel", + "Limit starting calls" : "Limiter le lancement des appels", + "When a call has started, everyone with access to the conversation can join the call." : "Lorsqu'un appel a commencé, toutes les personnes ayant accès à la conversation peuvent se joindre à l'appel.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Les robots suivants sont installés sur ce serveur. Dans la documentation vous pouvez trouver comment {linkstart1}construire votre propre robot{linkend} ou une {linkstart2}liste de robots{linkend} à activer sur votre serveur.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Aucun robot n'est installé sur ce serveur. Dans la documentation vous pouvez trouver comment {linkstart1}créer votre propre robot{linkend} ou une {linkstart2}liste de robots{linkend} à activer sur votre serveur.", + "Description is not provided" : "Description non fournie", + "Locked for moderators" : "Verrouillé pour les modérateurs", + "Enabled" : "Activé", + "Disabled" : "Désactivé", + "Bots settings" : "Paramètres des robots", + "State" : "État", + "Name" : "Nom", + "Last error" : "Dernière erreur", + "Total errors count" : "Nombre total d'erreurs", + "Find more bots" : "Chercher d'autres robots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Les serveurs de confiance peuvent être configurés sur la {linkstart}page des paramètres de partage{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Les discussions et les appels fédérés fonctionnent déjà. La gestion des pièces jointes sera disponible dans une future version.", + "Enable Federation in Talk app" : "Activer Fédération dans l'app Talk", + "Permissions" : "Permissions", + "Allow users to be invited to federated conversations" : "Autoriser les utilisateurs à être invité dans des conversations fédérées", + "Allow users to invite federated users into conversation" : "Autoriser les utilisateurs à inviter des utilisateurs fédérées dans la conversation", + "Only allow to federate with trusted servers" : "N'autoriser la fédération qu'avec les serveurs de confiance", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Lorsqu'au moins un groupe est sélectionné, seules les personnes des groupes répertoriés peuvent inviter des utilisateurs fédérés aux conversations.", + "Groups allowed to invite federated users" : "Groupes autorisés à inviter des utilisateurs fédérés", + "Select groups …" : "Sélectionner les groupes...", + "All messages" : "Tous les messages", + "@-mentions only" : "Seulement les mentions @", + "Off" : "Désactiver", + "General settings" : "Paramètres généraux", + "Default notification settings" : "Paramètres de notification par défaut", + "Default group notification" : "Notification de groupe par défaut", + "Default group notification for new groups" : "Notification de groupe par défaut pour les nouveaux groupes", + "Integration into other apps" : "Intégration dans d'autres applications", + "Allow conversations on files" : "Autoriser les conversations sur les fichiers", + "Allow conversations on public shares for files" : "Autoriser les conversations sur les partages publics pour les fichiers", + "End-to-end encrypted calls" : "Appels chiffrés de bout en bout", + "Enable encryption" : "Activer le chiffrement", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Les appels chiffrés de bout en bout avec une passerelle SIP nécessitent une nouvelle version du serveur haute-performance et de la passerelle SIP", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Les clients mobiles ne supportent pas les appels chiffrés de bout en bout pour le moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En cliquant sur le bouton ci-dessus, les informations dans le formulaire sont envoyées aux serveurs de Struktur AG. Vous pouvez trouver plus d'informations ici : {linkstart}spreed.eu{linkend}.", + "Pending" : "En attente", + "Error" : "Erreur", + "Blocked" : "Bloqué", + "Active" : "Actif", + "Expired" : "Expiré", + "Never" : "Jamais", + "The trial could not be requested. Please try again later." : "La période d'essai n'a pas pu être demandé. Veuillez réessayer plus tard.", + "The account could not be deleted. Please try again later." : "Le compte n'a pas pu être supprimé. Veuillez réessayer plus tard.", + "Hosted High-performance backend" : "Serveur haute performance hébergé", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Notre partenaire Struktur AG fournit un service dans lequel un serveur de signalisation hébergé peut être demandé. Pour cela il vous suffit de renseigner le formulaire ci-dessous et votre Nextcloud le demandera. Une fois le serveur configuré pour vous les identifiants seront automatiquement renseignés. Ceci écrasera les actuels réglages du serveur de signalement.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Si votre compte backend haute performance inclut les fonctionnalités STUN et/ou TURN, les paramètres seront mis à jour en conséquence.", + "URL of this Nextcloud instance" : "URL de cette instance Nextcloud", + "Full name of the user requesting the trial" : "Nom complet de l'utilisateur qui demande la période d'essai", + "Email of the user" : "E-mail de l'utilisateur", + "Language" : "Langue", + "Country" : "Pays", + "Request signaling server trial" : "Demande de période d'essai pour un serveur de signalement", + "You can see the current status of your hosted signaling server in the following table." : "Vous pouvez voir le statut actuel de votre serveur de signalement hébergé dans le tableau suivant.", + "Status" : "État", + "Created at" : "Créé le", + "Expires at" : "Expire à", + "Limits" : "Limites", + "STUN included" : "STUN inclus", + "Yes" : "Oui", + "No" : "Non", + "TURN included" : "TURN inclus", + "Delete the signaling server account" : "Supprimer le compte de serveur de signalisation", + "_%n user_::_%n users_" : ["%n utilisateur","%n utilisateurs","%n utilisateurs"], + "Installed version: {version}" : "Version installée : {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Vous pouvez installer Matterbridge pour relier Nextcloud Talk à d'autres services, visiter leur {linkstart1}page GitHub{linkend} pour plus de détails. Télécharger et installer l'application peut prendre un certain temps. Si cela échoue, merci de l'installer manuellement depuis le {linkstart2}magasin d'applications Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Le binaire Matterbridge a des permissions incorrectes. Merci de vous assurer que le binaire Matterbridge appartient au bon utilisateur et qu'il peut être exécuté. Il peut être trouvé dans \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Le binaire Matterbridge est introuvable ou n'a pas pu être exécuté.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Vous pouvez aussi définir le chemin vers le binaire Matterbridge manuellement via les options. Consultez la {linkstart}documentation d'intégration Matterbridge{linkend} pour plus d'information.", + "Downloading …" : "Téléchargement …", + "Install Talk Matterbridge" : "Installer Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Une erreur est survenue lors de l'installation de l'application Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Une erreur est survenue lors de l'installation de Talk Matterbridge. Veuillez l'installer manuellement.", + "Failed to execute Matterbridge binary." : "Impossible d'exécuter le binaire Matterbridge.", + "Matterbridge integration" : "Intégration de Matterbridge", + "Enable Matterbridge integration" : "Activer l'intégration de Matterbridge", + "Status: Checking connection" : "Statut : vérification de la connexion...", + "OK: Running version: {version}" : "OK : version actuelle : {version}", + "Error: Server seems to be a Signaling server" : "Erreur : le serveur semble être un serveur de signalement", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erreur : les horloges du serveur Nextcloud et du serveur d'enregistrement sont désynchronisées. Merci de vous assurer que les deux serveurs sont connectés à un serveur de temps ou synchronisez manuellement leurs horloges.", + "Recording backend URL" : "URL du moteur d'enregistrement", + "Validate SSL certificate" : "Valider le certificat SSL", + "Delete this server" : "Supprimer ce serveur", + "Test this server" : "Tester ce serveur", + "Disabled for all calls" : "Désactivé pour tous les appels", + "Enabled for all calls" : "Activé pour tous les appels", + "Configurable on conversation level by moderators" : "Configuration au niveau de la conversation par les modérateurs", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Les paramètres PHP \"upload_max_filesize\" ou \"post_max_size\" permettront de ne téléverser que des fichiers jusqu'à {maxUpload}.", + "Recording backend settings saved" : "Paramètres du moteur d'enregistrement enregistrés", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Les modérateurs seront autorisés à activer le consentement au niveau de la conversation. Le consentement à être enregistré sera exigé pour chaque participant avant de rejoindre n'importe quel appel dans cette conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "Le consentement à être enregistré sera exigé pour chaque participant avant de rejoindre n'importe quel appel.", + "The consent to be recorded is not required." : "Le consentement à être enregistré n'est pas exigé.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuration d'un serveur d'enregistrement est possible seulement avec un serveur haute performance.", + "Add a new recording backend server" : "Ajouter un nouveau moteur d'enregistrement", + "Shared secret" : "Secret partagé", + "Recording consent" : "Consentement à l'enregistrement", + "Recording transcription" : "Enregistrement de la transcription", + "Automatically transcribe call recordings with a transcription provider" : "Transcrire automatiquement les enregistrements avec un fournisseur de transcription", + "Automatically summarize call recordings with transcription and summary providers" : "Résumer automatiquement les enregistrements avec des fournisseurs de résumé et de transcription", + "SIP configuration saved!" : "Configuration SIP sauvegardée !", + "SIP configuration is only possible with a High-performance backend." : "La configuration SIP n'est possible qu'avec un serveur haute performance.", + "Enable SIP Dial-out option" : "Activer l'option de composition SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Le serveur de signalement doit être mis à jour pour supporter la fonctionnalité de composition SIP", + "Do not show SIP Dial-out caller number" : "Ne pas afficher le numéro de l'appelant SIP sortant", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Le numéro anonyme doit apparaître comme \"inconnu\" ou \"numéro masqué\" pour appeler le destinataire.", + "Dial-out number" : "Numéro sortant", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numéro au format E164 utilisé comme numéro d'appelant de secours pour les appels sortants", + "Dial-out prefix" : "Préfixe de numérotation sortante", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Préfixe ajouté au numéro d'utilisateur configuré pour les appels sortants (la valeur par défaut est \"+\")", + "Restrict SIP configuration" : "Restreindre la configuration SIP", + "Enable SIP configuration" : "Activer la configuration SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Seuls les utilisateurs des groupes suivants peuvent activer SIP dans les conversations dont ils sont modérateurs", + "Phone number (Country)" : "Numéro de téléphone (pays)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Cette information est présente dans les e-mails d'invitation et affichée à tous les participants dans le panneau latéral.", + "Nextcloud base URL" : "URL de base de Nextcloud", + "Talk Backend URL" : "URL du serveur Talk", + "WebSocket URL" : "URL de la WebSocket", + "Available features" : "Fonctionnalités disponibles", + "Error: Websocket connection failed" : "Erreur : Connexion Websocket échouée", + "Error code" : "Code d'erreur", + "Error message" : "Message d'erreur", + "Error: Websocket connection failed. Check browser console" : "Erreur : La connexion à la WebSocket a échoué. Vérifier la console web.", + "High-performance backend URL" : "URL vers l'infrastructure de haute performance", + "Missing High-performance backend warning hidden" : "Avertissement sur l'absence de serveur haute performance caché", + "High-performance backend settings saved" : "Paramètres du serveur haute performance sauvegardés", + "Nextcloud Talk setup not complete" : "La configuration de Nextcloud Talk n'est pas terminée", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Merci de noter que lors des appels avec plus de 2 participants sans le serveur haute performance, les participants vont vraisemblablement subir des latences et leurs appareils une charge importante.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installer le serveur haute performance pour que les appels avec de multiples participants fonctionnent sans ralentissement.", + "Nextcloud portal" : "Portail Nextcloud", + "Quick installation guide" : "Guide d'installation rapide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Un serveur haute performance est requis pour les appels et conversations avec de multiples participants. Sans ce serveur, tous les participants doivent envoyer leur propre vidéo à tous les autres participants, ce qui causera probablement des problèmes de latence et une charge importante sur les appareils des participants.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Il est hautement recommandé de configurer un cache distribué quand vous utilisez Nextcloud Talk avec un serveur haute performance.", + "Add High-performance backend server" : "Ajouter un serveur haute performance", + "Warn about connectivity issues in calls with more than 2 participants" : "Avertir à propos des problèmes de connectivité dans les appels avec plus de 2 participants", + "STUN server URL" : "URL du serveur STUN", + "The server address is invalid" : "L'adresse du serveur est invalide", + "STUN settings saved" : "Paramètres STUN sauvegardés", + "STUN servers" : "Serveurs STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un serveur STUN est utilisé pour déterminer l'adresse publique des participants situés derrière un routeur.", + "Add a new STUN server" : "Ajouter un nouveau serveur STUN", + "{schema} scheme must be used with a domain" : "Le schéma {schema} doit être utilisé avec un domaine", + "{option1} and {option2}" : "{option1} et {option2}", + "{option} only" : "{option} seulement", + "OK: Successful ICE candidates returned by the TURN server" : "OK : Le serveur TURN a retourné des candidats ICE avec succès", + "Error: No working ICE candidates returned by the TURN server" : "Erreur : Le serveur TURN n'a pas retourné de candidats ICE fonctionnels", + "Testing whether the TURN server returns ICE candidates" : "En cours de test du retour de candidats ICE par le serveur TURN", + "TURN server schemes" : "Schémas du serveur TURN", + "TURN server URL" : "URL du serveur TURN", + "TURN server secret" : "Mot de passe du serveur TURN", + "TURN server protocols" : "Protocoles du serveur TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un serveur TURN est utilisé comme proxy pour les participants derrière un parefeu. Si des participants ne peuvent pas se connecter avec les autres, un serveur TURN est très probablement nécessaire. Consultez {linkstart}cette documentation{linkend} pour les instructions de configuration.", + "TURN settings saved" : "Paramètres TURN sauvegardés", + "TURN servers" : "Serveurs TURN", + "Add a new TURN server" : "Ajouter un nouveau serveur TURN", + "Failed" : "Échec", + "OK" : "OK", + "Checking …" : "Vérification...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Échec : WebAssembly est désactivé ou n'est pas supporté dans ce navigateur. Merci d'activer WebAssembly ou d'utiliser un navigateur compatible pour lancer la vérification.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Échec : les fichiers « .wasm » et « .tflite » ne sont pas traités correctement par le serveur web. Merci de vérifier la section « Pré-requis techniques » de la documentation de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK : les fichiers \".wasm\" et \".tflite\" ont été correctement renvoyés par le serveur web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Il semble que la configuration Apache et PHP n'est pas compatible. Veuillez noter que PHP peut seulement être utilisé avec le module MPM_PREFORK et PHP-FPM peut seulement être utilisé avec le module MPM_EVENT", + "Web server setup checks" : "Vérification de la configuration du serveur web", + "Files required for virtual background can be loaded" : "Les fichiers nécessaires à l'arrière-plan virtuel peuvent être chargés", + "Federated user" : "Utilisateur fédéré", + "Assign participants to rooms" : "Assigner les participants aux salles", + "Configure breakout rooms" : "Configurer les salles de sous-groupes", + "Number of breakout rooms" : "Nombre de salles de sous-groupes", + "You can create from 1 to 20 breakout rooms." : "Vous pouvez créer entre 1 et 20 salles de discussion.", + "Assignment method" : "Méthode d'affectation", + "Automatically assign participants" : "Assigner automatiquement les participants", + "Manually assign participants" : "Assigner manuellement les participants", + "Allow participants to choose" : "Autoriser les participants à choisir", + "Create rooms" : "Créer une salle", + "Confirm" : "Confirmer", + "Create breakout rooms" : "Créer des salles de sous-groupes", + "Reset" : "Réinitialiser", + "Delete breakout rooms" : "Supprimer les salles de sous-groupes", + "Room {roomNumber}" : "Salle {roomNumber}", + "Current breakout rooms and settings will be lost" : "Les salles de sous-groupes actuelles et leurs paramètres seront perdus", + "Cancel" : "Annuler", + "Unassigned participants" : "Participants non attribués", + "Back" : "Retour", + "Assign" : "Attribuer", + "Add participant \"{user}\"" : "Ajouter le participant \"{user}\"", + "Now" : "Maintenant", + "Invalid calendar selected" : "Calendrier sélectionné invalide", + "Invalid start time selected" : "Date de début sélectionnée invalide", + "Invalid end time selected" : "Date de fin sélectionnée invalide", + "Unknown error occurred" : "Une erreur inconnue est survenue", + "Sending no invitations" : "Envoi d'aucune invitation", + "{participant0} will receive an invitation" : "{participant0} va recevoir une invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} et {participant1} vont recevoir une invitation", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} et %n autre vont recevoir des invitations","{participant0}, {participant1} et %n autres vont recevoir des invitations","{participant0}, {participant1} et %n autres vont recevoir des invitations"], + "Invite {user}" : "Inviter {user}", + "Invite all users and emails in this conversation" : "Inviter tous les utilisateurs et emails de cette conversation", + "Meeting created" : "Réunion créée", + "Upcoming meetings" : "Réunions à venir", + "Loading …" : "Chargement…", + "No upcoming meetings" : "Pas de réunion à venir", + "Schedule a meeting" : "Planifier une réunion", + "Meeting title" : "Objet de la réunion", + "From" : "De", + "To" : "À", + "Calendar" : "Agenda", + "Attendees" : "Participants", + "No other participants to send invitations to." : "Pas d'autres participants à qui envoyer des invitations.", + "Add attendees" : "Ajouter des participants", + "Save" : "Enregistrer", + "Search participants" : "Rechercher les participants", + "No results" : "Aucun résultat", + "Done" : "Fait", + "Disable live transcription" : "Désactiver la transcription en direct", + "Disable live translation" : "Désactiver la traduction en direct", + "Original language: {languageName}" : "Langue d'origine : {languageName}", + "Translated language" : "Langue traduite", + "Translated language: {languageName}" : "Langue traduite : {languageName}", + "Raise hand" : "Lever la main", + "Raise hand (R)" : "Lever la main (R)", + "Lower hand" : "Baisser la main", + "Lower hand (R)" : "Baisser la main (R)", + "Exit full screen (F)" : "Quitter le mode plein écran (F)", + "Full screen (F)" : "Mode plein écran (F)", + "Speaker view" : "Vue intervenant", + "Grid view" : "Vue en grille", + "Error when trying to load the available live transcription languages" : "Erreur lors du chargement des langues disponibles pour la transcription en direct", + "Failed to enable live transcription" : "Échec de l'activation de la transcription en direct", + "Failed to enable live translations" : "Échec de l'activation des traductions en direct", + "Failed to disable live translations" : "Échec de la désactivation des traductions en direct", + "Recording consent is required" : "Le consentement à l'enregistrement est requis", + "This conversation is read-only" : "Cette conversation est en lecture seule", + "Conversation not found or not joined" : "Conversation introuvable ou non jointe", + "Lobby is still active and you're not a moderator" : "La salle d'attente est toujours active et vous n'êtes pas modérateur", + "Connection failed" : "Échec de la connexion", + "Reload" : "Recharger", + "{nickName} raised their hand." : "{nickName} a levé la main.", + "A participant raised their hand." : "Un participant a levé la main.", + "Collapse stripe" : "Réduire le bandeau", + "Expand stripe" : "Étendre le bandeau", + "Previous page of videos" : "Page précédente de vidéos", + "Next page of videos" : "Page suivante de vidéos", + "Connecting …" : "Connexion …", + "Calling …" : "Appel en cours...", + "Waiting for {user} to join the call" : "En attente de l'arrivée de {user}", + "Waiting for others to join the call …" : "En attente que les autres rejoignent l'appel…", + "You can invite others in the participant tab of the sidebar" : "Vous pouvez inviter d'autres personnes dans l'onglet des participants du panneau latéral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Vous pouvez inviter d'autres personnes dans l'onglet des participants du panneau latéral ou partager ce lien pour inviter d'autres personnes !", + "Share this link to invite others!" : "Partagez ce lien pour inviter les autres !", + "Copy link" : "Copier le lien", + "You are not allowed to enable audio" : "Vous n'êtes pas autorisé à activer l'audio", + "No audio. Click to select device" : "Pas d'audio. Cliquez pour sélectionner le périphérique", + "Mute audio" : "Couper le son", + "Mute audio (M)" : "Couper le son (M)", + "Unmute audio" : "Activer le son", + "Unmute audio (M)" : "Activer le son (M)", + "None" : "Aucun", + "Select a microphone" : "Sélectionner un microphone", + "Select a speaker" : "Sélectionner un haut-parleur", + "Microphone settings" : "Réglages du microphone", + "Check devices" : "Vérifier les périphériques", + "Access to camera was denied" : "L'accès à la caméra a été refusé", + "Error while accessing camera: It is likely in use by another program" : "Erreur en essayant d'accéder à la caméra : elle est probablement utilisée par un autre programme", + "Error while accessing camera" : "Erreur en accédant à la caméra", + "You have been muted by a moderator" : "Vous avez été rendu·e muet par un modérateur. ", + "Hide presenter video" : "Masquer la vidéo du présentateur", + "You are not allowed to enable video" : "Vous n'êtes pas autorisé à activer la vidéo", + "No video. Click to select device" : "Pas d'audio. Cliquez pour sélectionner le périphérique", + "Disable video" : "Désactiver la vidéo", + "Disable video (V)" : "Désactiver la vidéo (V)", + "Enable video" : "Activer la vidéo", + "Enable video (V)" : "Activer la vidéo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo. Votre connexion va être brièvement interrompue lors de l'activation de la vidéo pour la première fois", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo (V) - La conversation est brièvement interrompue lorsque vous activez la vidéo pour la première fois.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo. Votre connexion sera brièvement interrompue lorsque vous activez la vidéo pour la première fois.", + "Select a video device" : "Sélectionner une caméra", + "Show presenter" : "Afficher le présentateur", + "You" : "Vous", + "Mute" : "Mettre en sourdine", + "Muted" : "Mis en sourdine", + "Show screen" : "Afficher l'écran", + "Stop following" : "Arrêter de suivre", + "Connection could not be established …" : "La connexion n'a pas pu être établie...", + "Connection was lost and could not be re-established …" : "La connexion a été perdue et n'a pas pu être rétablie...", + "Connection could not be established. Trying again …" : "La connexion n'a pas pu être établie. Nouvelle tentative...", + "Connection lost. Trying to reconnect …" : "Connexion perdue. Tentative de reconnexion...", + "Connection problems …" : "Problèmes de connexion...", + "Collapse" : "Replier", + "Expand" : "Étendre", + "You need to be logged in to upload files" : "Vous devez être connecté pour téléverser des fichiers", + "Drop your files to upload" : "Glissez vos fichiers pour les téléverser", + "Conversation messages" : "Messages de la conversation", + "Scroll to bottom" : "Défiler jusqu'en bas", + "Post message" : "Envoyer le message", + "Federated conversation" : "Conversation fédérée", + "Public conversation" : "Conversation publique", + "Favorite" : "Favori", + "Banned users" : "Utilisateurs bannis", + "Manage the list of banned users in this conversation." : "Gérer les utilisateurs bannis de cette conversation", + "Manage bans" : "Gestion des bannissements", + "No banned users" : "Aucun utilisateur banni", + "Banned by:" : "Banni par : ", + "Date:" : "Date :", + "Note:" : "Note :", + "Hide details" : "Masquer les détails", + "Show details" : "Afficher les détails", + "Unban" : "Débloquer", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Vous pouvez changer le titre et la description dans l'application {linkstart}Agenda ↗{linkend}.", + "Error while updating conversation name" : "Erreur lors de la mise à jour du nom de la conversation", + "Error while updating conversation description" : "Erreur lors de la mise à jour de la description de la conversation", + "Enter a name for this conversation" : "Saisissez un nom pour cette conversation", + "Edit conversation name" : "Modifier le nom de la conversation", + "Edit conversation description" : "Modifier la description de la conversation", + "Enter a description for this conversation" : "Ajoutez une description à cette conversation", + "Picture" : "Image", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Les robots suivants peuvent être activés dans cette conversation. Contactez votre administrateur pour installer d'autres robots sur ce serveur.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Aucun robot n'est installé sur ce serveur. Contactez votre administrateur pour installer des robots sur ce serveur.", + "Disable" : "Désactiver", + "Enable" : "Activer", + "Breakout rooms" : "Salles de sous-groupes", + "Manage breakout rooms" : "Gérer les salles de sous-groupes", + "Set up breakout rooms for this conversation" : "Configurer les salles de sous-groupes pour cette conversation", + "Please select a valid PNG or JPG file" : "Veuillez sélectionner un fichier PNG ou JPG valide.", + "Choose your conversation picture" : "Choisir votre icône de conversation", + "Choose" : "Choisir", + "Error setting conversation picture" : "Erreur à la définition de l'icône de conversation", + "Could not set the conversation picture: {error}" : "Impossible de définir l'icône de conversation : {error}", + "Error cropping conversation picture" : "Erreur au redimensionnement de l'icône de conversation", + "Error removing conversation picture" : "Erreur à la suppression de l'icône de conversation", + "Set emoji as conversation picture" : "Définir l'emoji comme icône de la conversation", + "Set background color for conversation picture" : "Définir la couleur de fond pour l'icône de la conversation", + "Upload conversation picture" : "Téléverser une image de conversation", + "Choose conversation picture from files" : "Choisir une image de conversation depuis Fichiers", + "Remove conversation picture" : "Supprimer l'image de conversation", + "The file must be a PNG or JPG" : "Le fichier doit être au format PNG ou JPG", + "Set picture" : "Définir l'image", + "Default permissions modified for {conversationName}" : "Permissions par défaut modifiées pour {conversationName}", + "Could not modify default permissions for {conversationName}" : "Impossible de modifier les permissions par défaut pour {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Modification des permissions par défaut pour les participants de cette conversation. Ces paramètres n'affectent pas les modérateurs.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Chaque fois que les permissions sont modifiées dans cette section, les permissions personnalisées précédemment attribuées aux participants individuellement seront écrasées.", + "All permissions" : "Toutes les permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Les participants ont le droit de lancer un appel, de rejoindre un appel, d'activer l'audio et la vidéo et de partager leur écran.", + "Restricted" : "Restreint", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Les participants ont le droit de rejoindre un appel, mais ils ne peuvent ni activer l'audio et la vidéo, ni partager leur écran tant qu'un modérateur ne leur donne pas manuellement la permission de le faire.", + "Advanced permissions" : "Permissions avancées", + "Edit permissions" : "Modifier les permissions", + "Conversation settings" : "Paramètres de la conversation", + "Basic Info" : "Informations de base", + "Personal" : "Personnel", + "Moderation" : "Modération", + "Setup overview" : "Aperçu de la configuration", + "Live transcription" : "Transcription en direct", + "Enable live transcription" : "Activer la transcription en direct", + "Breakout Rooms" : "Salles de sous-groupes", + "Matterbridge" : "Matterbridge", + "Bots" : "Robots", + "Danger zone" : "Zone de danger", + "Archive conversation" : "Archiver la conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Les conversations archivées sont cachés de la liste des conversations par défaut. Cependant, elles continueront d'apparaître quand vous recherchez une conversation par son nom ou accédez à une liste de conversations archivées.", + "Do you really want to leave \"{displayName}\"?" : "Voulez-vous vraiment quitter \"{displayName}\"?", + "You can archive this conversation instead." : "Vous pouvez plutôt archiver cette conversation.", + "Leave conversation" : "Quitter la conversation", + "You need to promote a new moderator before you can leave the conversation" : "Vous devez promouvoir un nouveau modérateur avant de pouvoir quitter la conversation.", + "Delete conversation" : "Supprimer la conversation", + "Do you really want to delete \"{displayName}\"?" : "Souhaitez-vous réellement supprimer \"{displayName}\" ?", + "Error while deleting conversation" : "Erreur lors de la suppression d'une conversation", + "Delete all chat messages" : "Suppression de tous les messages instantanés", + "Do you really want to delete all messages in \"{displayName}\"?" : "Voulez-vous vraiment supprimer tous les messages dans « {displayName} » ?", + "Error while clearing chat history" : "Erreur lors de la suppression de l'historique de messagerie", + "Be careful, these actions cannot be undone." : "Attention, ces actions ne peuvent être annulées.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Après avoir quitté la conversation, une invitation est nécessaire pour rejoindre une conversation privée. Une conversation ouverte peut être rejointe à tout moment.", + "Permanently delete this conversation." : "Supprimer définitivement cette conversation", + "Delete chat messages" : "Supprimer les messages instantanés", + "Permanently delete all the messages in this conversation." : "Supprimer définitivement tous les messages de cette conversation", + "_%n hour_::_%n hours_" : ["%n heure","%n heures","%n heures"], + "_%n day_::_%n days_" : ["%n jour","%n jours","%n jours"], + "_%n week_::_%n weeks_" : ["%n semaine","%n semaines","%n semaines"], + "Custom expiration time" : "Délai d'expiration personnalisé", + "Message expiration disabled" : "L'expiration des messages est désactivée", + "Message expiration set: {duration}" : "Délai d'expiration des messages défini : {duration}", + "Error when trying to set message expiration" : "Erreur au paramétrage de l'expiration du message", + "Message expiration" : "Expiration du message", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Les messages instantanés peuvent expirer après un certain temps. Note : les fichiers partagés dans la discussion ne seront pas effacés pour leur propriétaire, mais ils ne seront plus partagés dans la conversation.", + "Set message expiration" : "Configurer l'expiration du message", + "Current message expiration" : "Expiration du message actuel", + "Password copied to clipboard" : "Mot de passe copié dans le presse-papiers", + "Password could not be copied" : "Le mot de passe n'a pas pu être copié", + "Guest access" : "Accès invité", + "Breakout rooms are not allowed in public conversations." : "Les salles de sous-groupes ne sont pas autorisées dans les conversations publiques.", + "Allow guests to join this conversation via link" : "Autoriser les invités à joindre cette conversation par un lien", + "Password protection" : "Protection par mot de passe", + "This conversation is password-protected. Guests need password to join" : "Cette conversation est protégée par un mot de passe. Les invités ont besoin d'un mot de passe pour la rejoindre", + "Password protection is needed for public conversations" : "La protection par mot de passe est nécessaire pour les conversations publiques", + "Set a password" : "Saisir un mot de passe", + "Change password" : "Modifier le mot de passe", + "Enter new password" : "Saisir un nouveau mot de passe", + "Save password" : "Enregistrer le mot de passe", + "Copy password" : "Copier le mot de passe", + "Guests are allowed to join this conversation via link" : "Les invités sont autorisés à rejoindre cette conversation via un lien", + "Guests are not allowed to join this conversation" : "Les invités ne sont pas autorisés à rejoindre cette conversation", + "Resend invitations" : "Renvoyer les invitations", + "This conversation is open to both registered users and users created with the Guests app" : "Cette conversation est ouvert aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "This conversation is open to registered users" : "Cette conversation est ouverte aux utilisateurs enregistrés", + "This conversation is limited to the current participants" : "La conversation est limitée aux participants actuels", + "You opened the conversation to both registered users and users created with the Guests app" : "Vous avez ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "Error occurred when opening or limiting the conversation" : "Une erreur est survenue lors de l'ouverture ou de la limitation de la conversation", + "Open conversation to registered users, showing it in search results" : "Ouvrir la conversation aux utilisateurs enregistrés, en la montrant dans les résultats de recherche", + "Also open to users created with the Guests app" : "Aussi ouvrir aux utilisateurs créés avec l'application Invités", + "Open conversation" : "Ouvrir la conversation", + "Set language spoken in calls" : "Définir la langue des appels", + "Languages could not be loaded" : "Les langues n'ont pas pu être chargées", + "Loading languages …" : "Chargement des langues...", + "Invalid language" : "Langue non valide", + "Default language (English)" : "Langue par défaut (Anglais)", + "Default live transcription language set" : "Langue par défaut de la transcription en direct définie", + "Live transcription language set: {languageName}" : "Langue de la transcription en direct définie : {languageName}", + "Error when trying to set live transcription language" : "Erreur lors de la configuration de la langue de transcription en direct", + "Start time: {date}" : "Heure de début : {date}", + "Start time has been updated" : "L'heure de début a été mise à jour", + "Error occurred while updating start time" : "Une erreur est survenue lors de la mise à jour de l'heure de début", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Activer la salle d'attente va retirer les non-modérateurs de l'appel en cours.", + "Enable lobby, restricting the conversation to moderators" : "Activer la salle d'attente, restreignant la conversation aux modérateurs", + "Meeting start time" : "Heure de début de la réunion", + "Start time (optional)" : "Heure de début (optionnelle)", + "Import email participants" : "Importer des adresses e-mail de participants", + "You can import a list of email participants from a CSV file." : "Vous pouvez importer une liste d'adresses e-mail de participants depuis un fichier CSV.", + "Poll drafts" : "Brouillons de sondage", + "Browse poll drafts" : "Parcourir les brouillons de sondage", + "Error occurred when locking the conversation" : "Une erreur est survenue lors du verrouillage de la conversation", + "Error occurred when unlocking the conversation" : "Une erreur est survenue lors du déverrouillage de la conversation", + "Lock conversation" : "Verrouiller la conversation", + "This will also terminate the ongoing call." : "Cela mettra également fin à l'appel en cours.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Verrouiller la conversation pour éviter que quiconque n'écrive des messages ou ne lance des appels", + "Edit" : "Modifier", + "More information" : "Plus d'informations", + "Delete" : "Effacer", + "Add new bridged channel to current conversation" : "Ajouter un nouveau canal ponté à la conversation en cours", + "unknown state" : "état inconnu", + "running" : "en cours", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "inactif", + "Bridge saved" : "Lien enregistré", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Vous pouvez lier des salles de plusieurs autres systèmes de messagerie instantanée avec Matterbridge.", + "More info on Matterbridge" : "Plus d'informations sur Matterbridge", + "Messaging systems" : "Systèmes de messagerie", + "Enable bridge" : "Activer le pont", + "Show Matterbridge log" : "Afficher le log Matterbridge", + "Log content" : "Contenu du registre", + "Only moderators are allowed to mention @all" : "Seuls les modérateurs peuvent mentionner @all", + "All participants are allowed to mention @all" : "Tous les participants peuvent mentionner @all", + "Participants are now allowed to mention @all." : "Les participants sont maintenant autorisés à mentionner @all.", + "Mentioning @all has been limited to moderators." : "Seuls les modérateurs ont été autorisés à mentionner @all.", + "Allow participants to mention @all" : "Permettre aux participants de mentionner @all", + "Mention permissions" : "Permissions de mention", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notification pour les appels de cette conversation", + "Important conversation" : "Conversation importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Le statut utilisateur \"Ne pas déranger\" est ignoré pour les conversations importantes.", + "Sensitive conversation" : "Conversation sensible", + "Message preview will be disabled in conversation list and notifications" : "La prévisualisation des messages sera désactivée dans la liste des conversations et les notifications", + "Recording consent is required for calls in this conversation" : "Le consentement à l'enregistrement est exigé pour les appels dans cette conversation", + "Recording consent is not required for calls in this conversation" : "Le consentement à l'enregistrement n'est pas exigé pour les appels dans cette conversation", + "Recording consent requirement was updated" : "L'exigence de consentement à l'enregistrement a été mis à jour", + "Error occurred while updating recording consent" : "Une erreur est survenue lors de la mise à jour du consentement à l'enregistrement", + "Recording Consent" : "Consentement à l'enregistrement", + "Recording consent cannot be changed once a call or breakout session has started." : "Le consentement à l'enregistrement ne peut pas être modifié lorsque l'appel ou une salle en sous-groupe a commencé. ", + "Require recording consent before joining call in this conversation" : "Exiger le consentement à l'enregistrement avant de rejoindre l'appel dans cette conversation", + "Recording consent is required for all calls" : "Le consentement à l'enregistrement est exigé pour tous les appels", + "SIP dial-in is now possible without PIN requirement" : "La numérotation SIP est maintenant possible sans code PIN", + "SIP dial-in is now enabled" : "La numérotation SIP est maintenant activée", + "SIP dial-in is now disabled" : "La numérotation SIP est maintenant désactivée", + "Error occurred when enabling SIP dial-in" : "Une erreur est survenue lors de l'activation de la numérotation SIP", + "Error occurred when disabling SIP dial-in" : "Une erreur est survenue lors de la désactivation de la numérotation SIP", + "Phone and SIP dial-in" : "Numérotation téléphonique et SIP", + "Enable phone and SIP dial-in" : "Activer la numérotation téléphonique et SIP", + "Allow to dial-in without a PIN" : "Autoriser la numérotation sans code PIN", + "Ongoing" : "En cours", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n personne a accepté","%n personnes ont accepté","%n personnes ont accepté"], + "_%n person declined_::_%n people declined_" : ["%n personne a décliné","%n personnes ont décliné","%n personnes ont décliné"], + "_and %n other attachment_::_and %n other attachments_" : ["et %n autre pièce jointe","et %n autres pièces jointes","et %n autres pièces jointes"], + "With {displayName}" : "Avec {displayName}", + "In {conversation}" : "Dans {conversation}", + "View attachment" : "Voir la pièce jointe", + "Join" : "Rejoindre", + "View conversation" : "Voir la conversation", + "View event on Calendar" : "Voir l'événement dans l'Agenda", + "Error while creating the conversation" : "Erreur lors de la création de la conversation", + "Hello, {displayName}" : "Bonjour, {displayName}", + "Start meeting now" : "Commencer une réunion maintenant", + "Give your meeting a title" : "Donnez un titre à votre réunion", + "Create and copy link" : "Créer et copier le lien", + "Create a new conversation" : "Créer une nouvelle conversation", + "Join open conversations" : "Rejoindre des conversations publiques", + "Call a phone number" : "Appeler un numéro de téléphone", + "Scroll backward" : "Défiler vers l'arrière", + "Scroll forward" : "Défiler vers l'avant", + "Schedule meetings" : "Planifier des réunions", + "You don't have any upcoming meetings" : "Vous n'avez aucune réunion prévue", + "Open calendar" : "Ouvrir l'agenda", + "Unread mentions" : "Mentions non lues", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Les messages dans lesquels vous avez été mentionné·e s'afficheront ici. Vous pouvez mentionner des personnes en tapant @ suivi de leur nom.", + "Upcoming reminders" : "Rappels à venir", + "Message reminders" : "Rappels de messages", + "Set a reminder on a message to be notified" : "Définir un rappel sur un message pour être averti", + "Start a group conversation" : "Commencer une conversation de groupe", + "Create conversation" : "Créer la conversation", + "Enter your name" : "Saisissez votre nom", + "Submit name and join" : "Valider le nom et rejoindre", + "Do you already have an account?" : "Avez-vous déjà un compte ?", + "Log in" : "Se connecter", + "Error while verifying uploaded file" : "Erreur lors de la vérification du fichier téléversé", + "Uploaded file is verified" : "Le fichier téléversé est vérifié", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Le format du contenu est constitué de valeurs séparées par des virgules (CSV):
- La ligne d'en-tête est obligatoire et doit correspondre à \"name\",\"email\" ou juste \"email\"
- Une entrée par ligne (ex : \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Les participants ont été ajoutés avec succès", + "Error while adding participants" : "Erreur lors de l'ajout des participants", + "Import a file" : "Importer un fichier", + "Browse" : "Parcourir", + "Verifying uploaded file …" : "Vérification du fichier téléversé...", + "This might take a moment" : "Cela peut prendre un moment", + "Send invitations" : "Envoyer les invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n adresse e-mail invalide","%n adresses e-mail invalides","%n adresses e-mail invalides"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adresse e-mail est déjà importée ou en doublon","%n adresses e-mail sont déjà importées ou en doublon","%n adresses e-mail sont déjà importées ou en doublon"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation peut être envoyée","%ninvitations peuvent être envoyées","%n invitations peuvent être envoyées"], + "An error occurred while calling a phone number" : "Une erreur est survenue en appelant un numéro de téléphone", + "Phone number could not be called: {error}" : "Le numéro de téléphone n'a pas pu être appelé : {error}", + "Phone number could not be called" : "Le numéro de téléphone n'a pas pu être appelé", + "Search participants or phone numbers" : "Rechercher des participants ou des numéros de téléphone", + "Creating the conversation …" : "Création de la conversation...", + "Mark as read" : "Marquer comme lu", + "Mark as unread" : "Marquer comme non lu", + "Remove from favorites" : "Retirer des favoris", + "Add to favorites" : "Ajouter aux favoris", + "Unarchive conversation" : "Désarchiver la conversation", + "Ignore \"Do not disturb\"" : "Ignorer le mode \"Ne pas déranger\"", + "You need to promote a new moderator before you can leave the conversation." : "Vous devez désigner un nouveau modérateur avant de quitter la conversation.", + "Conversation actions" : "Actions de la conversation", + "Notify about calls" : "Notifier lors des appels", + "Hide message text" : "Cacher le contenu du message", + "Pending invitations" : "Invitations en attente", + "From {user} at {remoteServer}" : "De {user} sur {remoteServer}", + "Decline invitation" : "Décliner l'invitation", + "Accept invitation" : "Accepter l'invitation", + "No pending invitations" : "Aucune invitation en attente", + "Home" : "Accueil", + "Unread" : "Non lu", + "Mentions" : "Mentions", + "Meetings" : "Réunions", + "Alphabetically" : "Ordre alphabétique", + "No followed threads" : "Aucun fil de discussion suivi", + "No matches found" : "Aucun résultat trouvé", + "No conversations found" : "Aucune conversation trouvée", + "You have no archived conversations." : "Vous n'avez pas de conversations archivées.", + "Subscribe to an existing thread or start your own." : "Abonnez-vous à un fil de discussion existant ou créez le vôtre.", + "You have no unread mentions." : "Vous n'avez pas de mentions non lues.", + "You have no unread messages." : "Vous n'avez pas de messages non lus.", + "An error occurred while performing the search" : "Une erreur est survenue pendant la recherche", + "Conversation list" : "Liste des conversations", + "Filter conversations by" : "Filtrer les conversations par", + "Unread messages" : "Messages non lus", + "Meeting conversations" : "Conversations de réunion", + "Clear filters" : "Effacer les filtres", + "New personal note" : "Nouvelle note personnelle", + "Back to conversations" : "Retour aux conversations", + "Archived conversations" : "Conversations archivées", + "Threads" : "Fils de discussion", + "Clear filter" : "Supprimer le filtre", + "Show more threads" : "Afficher plus de fils de discussion", + "App settings" : "Paramètres de l'application", + "Users" : "Utilisateurs", + "Groups" : "Groupes", + "Teams" : "Équipes", + "Federated users" : "Utilisateurs fédérés", + "New private conversation" : "Nouvelle conversation privée", + "Other sources" : "Autres sources", + "Open conversations" : "Ouvrir des conversations", + "No search results" : "Aucun résultat", + "Users, groups and teams" : "Utilisateurs, groupes et équipes", + "Users and groups" : "Utilisateurs et groupes", + "Users and teams" : "Utilisateurs et équipes", + "Groups and teams" : "Groupes et équipes", + "New group conversation" : "Nouvelle conversation de groupe", + "The meeting will start soon" : "La réunion va bientôt démarrer", + "This meeting is scheduled for {startTime}" : "La réunion est planifiée pour {startTime}", + "You are currently waiting in the lobby" : "Vous patientez actuellement dans la salle d'attente", + "Enable noise suppression" : "Activer la suppression du bruit", + "Reduce background noises for better voice quality" : "Réduisez les bruits de fond pour une meilleure qualité vocale", + "Enable echo cancellation" : "Activer la suppression de l'écho", + "Minimize echo effect from own surrounding" : "Minimiser l'effet d'écho provenant de l'environnement", + "Enable auto gain control" : "Activer le contrôle automatique du gain", + "Dynamically adjust microphone volume for consistent level" : "Ajuster dynamiquement le volume du microphone pour un niveau constant", + "Select microphone" : "Sélectionnez un microphone", + "No microphone available" : "Aucun microphone disponible", + "Select speaker" : "Choisir le micro", + "No speaker available" : "Aucun micro disponible", + "Select camera" : "Sélectionnez une caméra", + "No camera available" : "Aucune caméra disponible", + "Select a device" : "Sélectionner un appareil", + "Playing …" : "Lecture...", + "Test speakers" : "Tester les haut-parleurs", + "Test" : "Test", + "Devices" : "Périphériques", + "Backgrounds" : "Arrière-plan", + "No audio" : "Pas de son", + "No camera" : "Pas de caméra", + "Display video as you will see it (mirrored)" : "Montrer la vidéo comme vous la verrez (mode miroir)", + "Display video as others will see it" : "Montrer la vidéo comme les autres la verront", + "Calls are not supported in your browser" : "Les appels téléphoniques ne sont pas pris en charge par votre navigateur web", + "Access to microphone is only possible with HTTPS" : "L'accès au microphone est seulement possible en HTTPS", + "Access to microphone was denied" : "L'accès au microphone a été refusé", + "Error while accessing microphone" : "Erreur d'accès au microphone", + "Access to camera is only possible with HTTPS" : "L'accès à la caméra est seulement possible en HTTPS", + "The call is being recorded." : "L'appel est en cours d'enregistrement.", + "The call might be recorded." : "L'appel peut être enregistré.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "L'enregistrement peut inclure votre voix, la vidéo de votre caméra et le partage d'écran. Votre consentement est requis avant de rejoindre l'appel.", + "Give consent to the recording of this call" : "Consentir à l'enregistrement de cet appel", + "Show more info" : "Afficher plus d'informations", + "Audio is not available" : "L'audio n'est pas disponible", + "Video is not available" : "La vidéo n'est pas disponible", + "Start recording immediately with the call" : "Lancer l'enregistrement en même temps que l'appel", + "Notify all participants about this call" : "Notifier tous les participants de cet appel", + "Apply settings" : "Appliquer les paramètres", + "Select virtual office background" : "Sélectionnez l'arrière-plan virtuel \"bureau\"", + "Select virtual home background" : "Sélectionnez l'arrière-plan virtuel \"maison\"", + "Select virtual abstract background" : "Sélectionnez l'arrière-plan virtuel \"abstrait\"", + "Select virtual beach background" : "Sélectionnez l'arrière-plan virtuel \"plage\"", + "Select virtual park background" : "Sélectionnez l'arrière-plan virtuel \"parc\"", + "Select virtual theater background" : "Sélectionnez l'arrière-plan virtuel \"cinéma\"", + "Select virtual library background" : "Sélectionnez l'arrière-plan virtuel \"bibliothèque\"", + "Select virtual space station background" : "Sélectionnez l'arrière-plan virtuel \"station spatiale\"", + "Error while uploading the file" : "Erreur pendant le téléversement du fichier", + "Select a file" : "Sélectionner un fichier", + "Invalid path selected" : "Chemin sélectionné non valide", + "Select virtual background from file {fileName}" : "Sélectionnez l'arrière-plan virtuel depuis le fichier {fileName}", + "Blur" : "Flou", + "Upload" : "Téléverser", + "Files" : "Fichiers", + "(editing)" : "(édition)", + "(edited)" : "(modifié)", + "The message has expired or has been deleted" : "Le message a expiré ou a été supprimé", + "Cancel quote" : "Annuler la citation", + "24 hours" : "24 heures", + "7 days" : "7 jours", + "30 days" : "30 jours", + "Until unpin" : "Jusqu'au désépinglage", + "Clear reminder – {timeLocale}" : "Effacer le rappel – {timeLocale}", + "Edited by {actor}" : "Modifié par {actor}", + "Pinned by you" : "Épinglé par vous", + "Pinned by {actor}" : "Épinglé par {actor}", + "Until {absoluteDate}" : "Jusqu'au {absoluteDate}", + "Message text copied to clipboard" : "Texte du message copié dans le presse-papier", + "Message text could not be copied" : "Le texte du message n'a pas pu être copié", + "Message forwarded to \"Note to self\"" : "Message transféré dans les « Notes à soi-même »", + "Error while forwarding message to \"Note to self\"" : "Erreur pendant le transfert vers les « Notes à soi-même »", + "A reminder was successfully removed" : "Un rappel a été supprimé avec succès", + "Error occurred when removing a reminder" : "Une erreur est survenue à la suppression d'un rappel", + "A reminder was successfully set at {datetime}" : "Un rappel a été placé avec succès le {datetime}", + "Error occurred when creating a reminder" : "Une erreur est survenue à la création du rappel", + "Add a reaction to this message" : "Ajouter une réaction à ce message", + "Reply" : "Répondre", + "More actions" : "Plus d'actions", + "Set reminder" : "Définir un rappel", + "Pin message" : "Épingler le message", + "Unpin message" : "Désépingler le message", + "Reply privately" : "Répondre en privé", + "Edit message" : "Modifier le message", + "Copy message" : "Copier le message", + "Copy message link" : "Copier le lien du message", + "Go to file" : "Aller au fichier", + "Download file" : "Télécharger le fichier", + "Go to thread" : "Aller au fil de discussion", + "Edit thread details" : "Modifier les détails du fil de discussion", + "Forward message" : "Transférer le message", + "Translate" : "Traduire", + "Set custom reminder" : "Configurer un rappel spécifique", + "Keep pinned for" : "Garder épinglé pendant", + "Set custom period" : "Choisir une période spécifique", + "Close reactions menu" : "Fermer le menu des réactions", + "React with {emoji}" : "Réagir avec {emoji}", + "React with another emoji" : "Réagir avec un autre emoji", + "Choose a conversation to forward the selected message." : "Choisissez une conversation où transférer le message sélectionné.", + "Error while forwarding message" : "Erreur lors du transfert du message", + "The message has been forwarded to {selectedConversationName}" : "Le message a été transféré sur {selectedConversationName}", + "Dismiss" : "Rejeter", + "Go to conversation" : "Aller à la conversation", + "Detect language" : "Détecter la langue", + "The message could not be translated" : "Le message n'a pas pu être traduit", + "Translation copied to clipboard" : "Traduction copiée dans le presse-papier", + "Translation could not be copied" : "La traduction n'a pas pu être copiée", + "Translate message" : "Traduire le message", + "Source language to translate from" : "Langue source pour la traduction", + "Translate from" : "Traduire depuis", + "Target language to translate into" : "Langue cible pour la traduction", + "Translate to" : "Traduire vers", + "Translating" : "Traduction", + "Copy translated text" : "Copier le texte traduit", + "Error when scheduling the message" : "Erreur lors de la planification du message", + "Reschedule" : "Reprogrammer", + "Send now" : "Envoyer immédiatement", + "Choose a time" : "Choisir un horaire", + "Send at custom time" : "Envoyer à un horaire spécifique", + "Will be sent without notification" : "Sera envoyé sans notification", + "Message read by everyone who shares their reading status" : "Message lu par tous ceux qui partagent leur statut de lecture", + "Message sent" : "Message envoyé", + "Sent without notification" : "Envoyé sans notification", + "Deleting message" : "Suppression d'un message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Le message a été supprimé, mais un robot ou Matterbridge est configuré et le message a pu être déjà distribué à d'autres services", + "Message deleted successfully" : "Message supprimé", + "Message could not be deleted because it is too old" : "Ce message ne peut pas être supprimé car il est trop ancien", + "Only normal chat messages can be deleted" : "Seuls les messages instantanés standards peuvent être supprimés", + "An error occurred while deleting the message" : "Une erreur est survenue pendant la suppression du message", + "Pinned" : "Épinglé", + "Your browser does not support playing audio files" : "Votre navigateur ne prend pas en charge la lecture de fichiers audio", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} dans {board}", + "Deck Card" : "Carte Deck", + "Remove {fileName}" : "Supprimer {fileName}", + "Open this location in OpenStreetMap" : "Ouvrir ce lieu sur OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n réponse","%n réponses","%n réponses"], + "Sending message" : "Envoi du message", + "Failed to send the message. Click to try again" : "Échec de l'envoi du message. Cliquez pour réessayer", + "Not enough free space to upload file" : "Espace libre insuffisant pour téléverser le fichier", + "You cannot send messages to this conversation at the moment" : "Vous ne pouvez pas envoyer de message dans cette conversation actuellement", + "Could not update the message" : "Impossible de mettre à jour le message", + "Reply to thread \"{threadTitle}\"" : "Répondre dans le fil de discussion \"{threadTitle}\"", + "You voted" : "Vous avez voté", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Brouillon de sondage • %n option","Brouillon de sondage • %n options","Brouillon de sondage • %n options"], + "_%n vote_::_%n votes_" : ["%n vote","%n votes","%n votes"], + "Edit poll draft" : "Éditer le brouillon du sondage", + "Delete poll draft" : "Supprimer le brouillon du sondage", + "Open poll" : "Sondage ouvert", + "See results" : "Voir les résultats", + "Reactions" : "Réactions", + "No permission to post reactions in this conversation" : "Interdiction de poster des réactions dans cette conversation", + "and {participant}" : "et {participant}", + "_and %n other participant_::_and %n other participants_" : ["et %n autre participant ","et %n autres participants","et %n autres participants"], + "Show all reactions" : "Afficher toutes les réactions", + "Add more reactions" : "Ajouter plus de réactions", + "Show or collapse system messages" : "Afficher ou cacher les messages système", + "No messages" : "Aucun message", + "All messages have expired or have been deleted." : "Tous les messages ont expiré ou ont été supprimés.", + "{author} (pinned by you)" : "{author} (épinglé par vous)", + "{author} (pinned by {actor})" : "{author} (épinglé par {actor})", + "Unpin" : "Détacher", + "Cancel search" : "Annuler la recherche", + "Add a phone number" : "Ajouter un numéro de téléphone", + "Error: A password is required to create the conversation." : "Erreur : Un mot de passe est requis pour créer la conversation.", + "All set, the conversation \"{conversationName}\" was created." : "Tout est prêt, la conversation « {conversationName} » a été créée.", + "Create a new group conversation" : "Créer une nouvelle conversation de groupe", + "Add participants" : "Ajouter des participants", + "Maximum length exceeded ({maxlength} characters)" : "Longueur maximale dépassée ({maxlength} caractères)", + "Conversation visibility" : "Visibilité de la conversation", + "Allow guests to join via link" : "Permettre aux invités de rejoindre via un lien", + "Enter password" : "Saisir le mot de passe", + "This conversation has been locked" : "Cette conversation a été verrouillée", + "No permission to post messages in this conversation" : "Interdit de publier un message dans cette conversation", + "Joining conversation …" : "Rejoindre la conversation…", + "Write a message without notification" : "Écrire un message sans notification", + "Create a thread silently" : "Créer silencieusement un fil de discussion", + "Create a thread" : "Créer un fil de discussion", + "Send message silently" : "Envoyer le message silencieusement", + "Send message" : "Envoyer un message", + "Send without notification" : "Envoyer sans notification", + "The participant will not be notified about new messages" : "Les participants ne seront pas notifiés de nouveaux messages", + "Participants will not be notified about new messages" : "Les participants seront pas notifiés de nouveaux messages", + "Message will be sent {datetimeString}" : "Le message sera envoyé le {datetimeString}", + "Thread title is required" : "Un titre de fil de discussion est obligatoire", + "Message text is required" : "Le texte du message est obligatoire", + "The message could not be edited" : "Le message n'a pas pu être modifié", + "File to share" : "Fichier à partager", + "File upload is not available in this conversation" : "Le téléversement de fichier n'est pas disponible dans cette conversation", + "Message was successfully scheduled" : "Message programmé avec succès", + "Add emoji" : "Ajouter un emoji", + "Adding a mention will only notify users who did not read the message." : "Ajouter une mention notifiera les utilisateurs qui n'ont pas lu le message.", + "Thread title" : "Titre du fil de discussion", + "Send later" : "Envoyer ultérieurement", + "Show scheduled messages" : "Montrer les messages programmés", + "Cancel editing" : "Annuler la modification", + "Schedule message" : "Programmer le message", + "{user} is out of office and might not respond." : "{user} est absent et pourrait ne pas répondre.", + "Absence period: {startDate} - {endDate}" : "Période d'absence du {startDate} au {endDate}", + "Replacement:" : "Remplaçant : ", + "Share from {nextcloud}" : "Partager depuis {nextcloud}", + "Share from Files" : "Partager depuis Fichiers", + "Share files to the conversation" : "Partager des fichiers à cette conversation", + "Upload from device" : "Téléverser depuis l'appareil", + "Create new poll" : "Créer un nouveau sondage", + "Smart picker" : "Sélecteur intelligent", + "Record voice message" : "Enregistrer un message vocal", + "End recording and send" : "Terminer l'enregistrement et l'envoyer", + "Dismiss recording" : "Annuler l'enregistrement", + "Access to the microphone was denied" : "L'accès au microphone n'est pas autorisé", + "Microphone either not available or disabled in settings" : "Le microphone n'est pas disponible ou il est désactivé dans les paramètres", + "Error while recording audio" : "Erreur pendant l'enregistrement de l'audio", + "Generating summary of unread messages …" : "Génération du résumé des messages non lus...", + "Summary is AI generated and might contain mistakes" : "Le résumé est généré par une intelligence artificielle et peut contenir des erreurs", + "Error occurred during a summary generation" : "Une erreur est survenue pendant la génération du résumé", + "New file" : "Nouveau fichier", + "Blank" : "Vide", + "Error while creating file" : "Erreur à la création du fichier", + "Create and share a new file" : "Créer et partager un nouveau fichier", + "Name of the new file" : "Nom du nouveau fichier", + "Create file" : "Créer un fichier", + "Someone is typing …" : "Quelqu'un est en train d'écrire...", + "{user1} is typing …" : "{user1} est en train d'écrire...", + "{user1} and {user2} are typing …" : "{user1} et {user2} sont en train d'écrire...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} et {user3} sont en train d'écrire...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} et %n autre participant écrivent …","{user1}, {user2}, {user3} et %n autres participants écrivent …","{user1}, {user2}, {user3} et %n autres participants sont en train d'écrire..."], + "Add more files" : "Ajouter d'autres fichiers", + "Send" : "Envoyer", + "In this conversation {user} can:" : "Dans cette conversation {user} peut :", + "Edit default permissions for participants in {conversationName}" : "Modifier les permissions par défaut pour les participants de la conversation {conversationName}", + "Start a call" : "Lancer un appel", + "Skip the lobby" : "Ignorer la salle d'attente", + "Can post messages" : "Les messages ne peuvent pas être envoyés", + "Can post messages and reactions" : "Autoriser à poster des messages et à envoyer des réactions", + "Can add reactions" : "Les réactions ne peuvent être ajoutés", + "Enable the microphone" : "Activer le microphone", + "Enable the camera" : "Activer la caméra", + "Share the screen" : "Partager l'écran", + "Update permissions" : "Mettre à jour les permissions", + "Updating permissions" : "Mise à jour des permissions", + "No poll drafts" : "Aucun brouillon de sondage", + "There is no poll drafts yet saved for this conversation" : "Il n'y a pas encore de brouillon de sondage enregistré pour cette conversation", + "Create poll in {name}" : "Créer un sondage dans {name}", + "Create poll" : "Créer le sondage", + "Error while importing poll" : "Erreur lors de l'import du sondage", + "Question" : "Question", + "Ask a question" : "Poser une question", + "Import draft from file" : "Importer un brouillon à partir du fichier", + "Answers" : "Réponses", + "Answer {option}" : "Réponse {option}", + "Delete poll option" : "Supprimer l'option de sondage", + "Add answer" : "Ajouter une réponse", + "Settings" : "Paramètres", + "Anonymous poll" : "Sondage anonyme", + "Multiple answers" : "Réponses multiples", + "Save as draft" : "Enregistrer comme brouillon", + "Export draft to file" : "Exporter le brouillon vers un fichier", + "You voted for this option" : "Vous avez voté pour cette option", + "End poll" : "Mettre fin au sondage", + "Change your vote" : "Changer votre vote", + "Results" : "Résultats", + "Voted participants" : "Participants qui ont voté", + "Send a message to \"{roomName}\"" : "Envoyer un message à la salle \"{roomName}\"", + "Hide list of participants" : "Masquer la liste des participants", + "Show list of participants" : "Montrer la liste des participants", + "Assistance requested in {roomName}" : "Assistance demandée dans {roomName}", + "The message was sent to \"{roomName}\"" : "Le message a été posté dans \"{roomName}\"", + "Dismiss request for assistance" : "Ignorer la demande d'assistance", + "Send message to room" : "Envoyer un message à la salle", + "Back to main room" : "Retour à la salle principale", + "Back to your room" : "Retour à votre salle", + "Message all rooms" : "Envoyer un message à toutes les salles", + "Start session" : "Démarrer une session", + "Start a call before you start a breakout room session" : "Lancer un appel avant de démarrer une salle de sous-groupe", + "Stop session" : "Terminer une session", + "The message was sent to all breakout rooms" : "Le message a été envoyé à toutes les salles de sous-groupes", + "Send a message to all breakout rooms" : "Envoyer un message à toutes les salles de sous-groupes", + "Breakout rooms are not started" : "Les salles de sous-groupes ne sont pas démarrées", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Les appels sans serveur haute performance peuvent entraîner des problèmes de connectivité et une charge importante sur les appareils. {linkstart}En savoir plus {linkend}", + "Talk setup incomplete" : "Configuration de Talk incomplète", + "Disable lobby" : "Désactiver la salle d'attente", + "Settings for participant \"{user}\"" : "Paramètres du participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "modérateur", + "bot" : "robot", + "guest" : "invité", + "Ringing …" : "Ça sonne...", + "Call rejected" : "Appel rejeté", + "{time} talking …" : "{time} est en train de parler…", + "{time} talking time" : "{time} de temps de parole", + "Raised their hand" : "A levé la main", + "Joined with video" : "A rejoint avec vidéo", + "Joined via phone" : "Connecté par téléphone", + "Joined with audio" : "A rejoint avec audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Le texte doit être inférieur ou égal à {maxLength} caractères. Votre texte actuel comporte {charactersCount} caractères.", + "Remove group and members" : "Retirer le groupe et ses membres", + "Remove team and members" : "Supprimer l'équipe et ses membres", + "Remove participant" : "Retirer le participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Voulez-vous vraiment retirer le groupe \"{displayName}\" et ses membres de cette conversation ?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Voulez-vous vraiment retirer l'équipe \"{displayName}\" et ses membres de cette conversation ?", + "Do you really want to remove {displayName} from this conversation?" : "Voulez-vous vraiment retirer {displayName} de cette conversation ?", + "Notification was sent to {displayName}" : "La notification a été envoyée à {displayName}", + "Could not send notification to {displayName}" : "Impossible d'envoyer la notification à {displayName}", + "Permissions granted to {displayName}" : "Permissions accordées à {displayName}", + "Could not modify permissions for {displayName}" : "Impossible de modifier les permissions pour {displayName}", + "Permissions removed for {displayName}" : "Permissions retirées pour {displayName}", + "Permissions set to default for {displayName}" : "Permissions réinitialisées pour {displayName}", + "Phone number could not be hung up" : "Le numéro de téléphone n'a pas pu être raccroché", + "Phone number could not be put on hold" : "Impossible de mettre en attente le numéro de téléphone", + "Phone number could not be muted" : "Impossible de mettre en sourdine le numéro de téléphone", + "Phone number could not be unmuted" : "Impossible de réactiver le numéro de téléphone", + "DTMF message could not be sent" : "Impossible d’envoyer le message DTMF", + "Phone number copied to clipboard" : "Numéro de téléphone copié dans le presse-papier", + "Phone number could not be copied" : "Le numéro de téléphone n’a pas pu être copié dans le presse-papiers", + "in the lobby" : "dans la salle d'attente", + "Dial out phone" : "Composer un numéro de téléphone", + "Hang up phone" : "Raccrocher le téléphone", + "Move back to lobby" : "Retourner à la salle d'attente", + "Move to conversation" : "Déplacer dans la conversation", + "Dial-in PIN" : "Code PIN", + "Demote from moderator" : "Retirer le statut de modérateur", + "Promote to moderator" : "Promouvoir comme modérateur", + "Resend invitation" : "Renvoyer l'invitation", + "Send call notification" : "Envoyer une notification d'appel", + "Dial out phone number" : "Composer un numéro de téléphone", + "Resume call for phone number" : "Reprendre l'appel pour le numéro de téléphone", + "Put phone number on hold" : "Mettre le numéro de téléphone en attente", + "Unmute phone number" : "Activer le son du numéro de téléphone", + "Mute phone number" : "Masquer le numéro de téléphone", + "Copy phone number" : "Copier le numéro de téléphone", + "Reset custom permissions" : "Réinitialiser les permissions personnalisées", + "Grant all permissions" : "Accorder toutes les permissions", + "Remove all permissions" : "Retirer toutes les permissions", + "Also ban from this conversation" : "Bannir aussi de cette conversation", + "Internal note (reason to ban)" : "Note interne (raison du bannissement)", + "Remove" : "Retirer", + "Permissions modified for {displayName}" : "Permissions modifiées pour {displayName}", + "Add users, groups or teams" : "Ajouter des utilisateurs, des groupes ou des équipes", + "Add users or groups" : "Ajouter des utilisateurs ou des groupes", + "Add users or teams" : "Ajouter des utilisateurs ou des équipes", + "Add users" : "Ajouter des utilisateurs", + "Add groups or teams" : "Ajouter des groupes ou des équipes", + "Add groups" : "Ajouter des groupes", + "Add teams" : "Ajouter des équipes", + "Add other sources" : "Ajouter d'autres sources", + "Add emails" : "Ajouter des adresses e-mails", + "Integrations" : "Intégrations", + "Add federated users" : "Ajouter des utilisateurs fédérés", + "Searching …" : "Recherche …", + "Search for more users" : "Rechercher d'autres utilisateurs", + "You can search or add participants via name, email, or Federated Cloud ID" : "Vous pouvez rechercher ou ajouter des participants par nom, e-mail ou ID de cloud fédéré.", + "Search or add participants" : "Rechercher ou ajouter des participants", + "Invitation was sent to {actorId}" : "L'invitation a été envoyée à {actorId}", + "An error occurred while adding the participants" : "Une erreur est survenue lors de l’ajout de participants", + "A new group conversation with selected participant will be created" : "Une nouvelle conversation de groupe avec les participants sélectionnés va être créée", + "Participants" : "Participants", + "Pinned by a deleted user" : "Épinglé par un utilisateur supprimé", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Ouvrir la discussion instantanée", + "You have new unread messages in the chat." : "Vous avez des messages non lus dans la discussion.", + "You have been mentioned in the chat." : "Vous avez été mentionné·e dans la discussion.", + "Search messages" : "Rechercher des messages", + "Chat" : "Discussion", + "Details" : "Details", + "Shared items" : "Éléments partagés", + "Search in {name}" : "Rechercher dans {name}", + "Threads in {name}" : "Fils de discussion dans {name}", + "{actor} in {conversation}" : "{actor} dans {conversation}", + "Search messages …" : "Recherche de messages …", + "Search options" : "Options de recherche", + "From User" : "De l'utilisateur", + "Since" : "Depuis", + "Until" : "Jusqu'au", + "No results found" : "Aucun résultat", + "Load more results" : "Charger plus de résultats", + "Recent threads" : "Fils de discussion récents", + "Projects" : "Projets", + "No shared items" : "Aucun élément partagé", + "Thread notifications" : "Notifications de fil de discussion", + "Thread actions" : "Actions du fil de discussion", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Relier à une conversation", + "No open conversations found" : "Aucune conversation publique n'a été trouvée", + "Either there are no open conversations or you joined all of them." : "Soit il n'y a pas de conversations publiques, soit vous les avez toutes rejointes.", + "Check spelling or use complete words." : "Vérifier l'orthographe ou utiliser les mots complets.", + "Search conversations or users" : "Rechercher des conversations ou des utilisateurs", + "Select conversation" : "Sélectionnez la conversation", + "Number length is not valid" : "La longueur du numéro est invalide", + "Region code is not valid" : "L'indicatif téléphonique est invalide", + "Number length is too short" : "La longueur du numéro est trop courte", + "Number length is too long" : "La longueur du numéro est trop longue", + "Number is not valid" : "Le numéro est invalide", + "Phone numbers" : "Numéros de téléphone", + "Display name: {name}" : "Nom affiché : {name}", + "Edit display name" : "Modifier le nom d'affichage", + "Display name (required)" : "Display name (obligatoire)", + "Save name" : "Sauvegarder le nom", + "I picked message bubbles" : "J'ai choisi des bulles de message", + "Error while setting personal setting" : "Erreur lors de la prise en compte de vos paramètres personnels", + "Error while saving sounds setting" : "Erreur lors de l'enregistrement des paramètres audio", + "Compact conversations list" : "Liste compacte des conversations", + "Chat appearance" : "Apparence de la discussion", + "Messages list" : "Liste de messages", + "Message bubbles" : "Bulles de message", + "Play sounds when participants join or leave a call" : "Jouer un son lorsque des participants rejoignent ou quittent un appel", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Actuellement non disponible sur iPhone et iPad en raison de restrictions techniques par le fabricant", + "Notification settings" : "Paramètres de notification", + "Sounds for chat and call notifications" : "Sons pour les notifications d'appel et de conversation", + "Invalid language ({languageId})" : "Langue invalide ({languageId})", + "Default language" : "Langue par défaut", + "Default language ({languageName})" : "Langue par défaut ({languageName})", + "Error when trying to load the available live translation languages" : "Erreur lors du chargement des langues disponibles pour la traduction en direct", + "Error when trying to set live translation language" : "Erreur lors de la tentative de configuration de la langue de traduction en direct", + "Set language used to show the transcriptions" : "Définir la langue utilisée pour afficher les transcriptions", + "Select location for attachments" : "Sélectionnez l'emplacement des pièces jointes", + "Error while setting attachment folder" : "Erreur lors de la définition du dossier pour la pièce jointe", + "Error while setting read status privacy" : "Erreur lors de la définition de la confidentialité de l'état de lecture", + "Error while setting typing status privacy" : "Erreur au paramétrage du partage du statut de saisie", + "Error while setting default media state" : "Erreur lors de la définition de l'état par défaut des médias", + "Turn camera and microphone off by default" : "Désactiver par défaut la caméra et le microphone", + "Blur camera background by default" : "Flouter l'arrière-plan de la caméra par défaut", + "Skip device preview before joining a call" : "Ignorer l'aperçu du périphérique avant de rejoindre un appel", + "Appearance & Sounds" : "Apparence et sons", + "Privacy" : "Confidentialité", + "Send read receipts" : "Envoyer des accusés de lecture", + "When off, all read statuses will be hidden" : "Si désactivé, tous les statuts de lecture seront cachés", + "Share typing status" : "Partager le statut de frappe", + "When off, all typing indicators will be hidden" : "Si désactivé, tous les statuts de frappe seront cachés", + "Attachments folder" : "Dossier des pièces jointes", + "Toggle full screen" : "Basculer en mode plein écran", + "Return to Home screen" : "Retourner à l'écran d'accueil", + "Search" : "Rechercher", + "Shortcuts while in a chat" : "Raccourci pendant la conversation", + "Focus the chat input" : "Maintenir le focus sur la zone de saisie", + "Unfocus the chat input to use shortcuts" : "Libérer le focus sur la zone de saisie pour utiliser les raccourcis", + "Edit your last message" : "Modifier votre dernier message", + "Shortcuts while in a call" : "Raccourcis pendant un appel", + "Camera on and off" : "Activer ou désactiver la webcam", + "Microphone on and off" : "Activer ou désactiver le microphone", + "Raise or lower hand" : "Lever ou baisser la main", + "Push to talk or push to mute" : "Appuyer pour parler ou pour mettre en silence", + "Zoom-in / zoom-out a screen share" : "Zoomer / Dézoomer un partage d'écran", + "Mouse wheel" : "Molette de souris", + "Start call silently" : "Lancer silencieusement l'appel", + "Start call" : "Lancer l'appel", + "End call" : "Terminer l'appel", + "This call has just ended" : "Cet appel vient de se terminer", + "You will be able to join the call only after a moderator starts it." : "Vous pourrez rejoindre l'appel seulement après son lancement par un modérateur.", + "End call for everyone" : "Mettre fin à l'appel pour tout le monde", + "Starting the recording" : "Lancement de l'enregistrement", + "Recording" : "Enregistrement", + "The call has been running for one hour." : "L'appel a duré une heure.", + "Cancel recording start" : "Annuler le lancement de l'enregistrement", + "Stop recording" : "Arrêter l'enregistrement", + "Send a reaction" : "Envoyer une réaction", + "React with {reaction}" : "Réagir avec {reaction}", + "All tasks done!" : "Toutes les tâches sont terminées !", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} tâche sur %n","{done} tâches sur %n","{done} tâches sur %n"], + "Add participants to this call" : "Ajouter des participants à cet appel", + "_%n participant in call_::_%n participants in call_" : ["%n participant dans cet appel","%n participants dans cet appel","%n participants dans cet appel"], + "Scheduled messages" : "Messages programmés", + "You are not allowed to enable screensharing" : "Vous n'êtes pas autorisé à partager l'écran", + "No screensharing" : "Aucun partage d'écran", + "Screensharing options" : "Options du partage d'écran", + "Enable screensharing" : "Activer le partage d'écran", + "Bad sent video and screen quality." : "Mauvaise qualité de la vidéo et du partage d'écran.", + "Bad sent screen quality." : "Mauvaise qualité du partage d'écran.", + "Bad sent video quality." : "Mauvaise qualité de la vidéo.", + "Bad sent audio, video and screen quality." : "Mauvaise qualité de l'audio, de la vidéo et du partage d'écran.", + "Bad sent audio and screen quality." : "Mauvaise qualité de l'audio et du partage d'écran.", + "Bad sent audio and video quality." : "Mauvaise qualité de l'audio et de la vidéo.", + "Bad sent audio quality." : "Mauvaise qualité de l'audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Disable background blur" : "Désactiver le flou d'arrière-plan", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous voir.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à voir votre écran. Pour améliorer la situation, essayez de désactiver votre partage d'écran.", + "Disable screenshare" : "Désactiver le partage d'écran", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver votre vidéo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants peuvent avoir du mal à vous comprendre.", + "Screen sharing is not supported by your browser." : "Le partage d'écran n'est pas pris en charge par votre navigateur.", + "Screen sharing requires the page to be loaded through HTTPS." : "Le partage d'écran nécessite que la page soit chargée en HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Le partage d’écran nécessite que la page soit chargée en HTTPS.", + "An error occurred while starting screensharing." : "Une erreur est survenue lors du démarrage du partage d’écran.", + "Select virtual background" : "Sélectionner un arrière-plan virtuel", + "Show your screen" : "Afficher votre écran", + "Stop screensharing" : "Terminer le partage d'écran", + "Mute others" : "Mettre en sourdine les autres", + "Start recording" : "Lancer l'enregistrement", + "Set up breakout rooms" : "Configurer les salles de sous-groupes", + "Download attendance list" : "Télécharger la liste de présence", + "Open Calendar" : "Ouvrir Agenda", + "Remove participant {name}" : "Retirer le participant nommé {name}", + "Would you like to delete this conversation?" : "Souhaitez-vous supprimer cette conversation ?", + "Are you sure you want to delete this conversation?" : "Êtes-vous sûr de vouloir supprimer cette conversation ?", + "Delete now" : "Supprimer maintenant", + "Keep" : "Conserver", + "Open dialpad" : "Ouvrir le clavier de composition du numéro", + "Select a region" : "Sélectionner une région", + "Local time: {time}" : "Heure locale : {time}", + "Scheduled {datetime}" : "Programmé {datetime}", + "Scheduled for {datetime}" : "Programmé pour {datetime}", + "Search …" : "Recherche…", + "Message without mention" : "Message sans mention", + "Mention myself" : "Me mentionner", + "Mention everyone" : "Mentionner tout le monde", + "Select a conversation" : "Sélectionner une conversation", + "Select a mode" : "Sélectionner un mode", + "You do not have permissions to access this conversation." : "Vous n'avez pas le droit d'accéder à cette conversation.", + "Join a different conversation or start a new one." : "Rejoindre une conversation ou en commencer une nouvelle.", + "The conversation does not exist" : "La conversation n'existe pas", + "Join a conversation or start a new one!" : "Rejoignez une conversation ou démarrez-en une nouvelle", + "Duplicate session" : "Session en double", + "Creating and joining a conversation with \"{userid}\"" : "Création et intégration d’une conversation avec « {userid} »", + "Join a conversation or start a new one" : "Rejoignez une conversation ou démarrez-en une nouvelle", + "Error while joining the conversation" : "Erreur lors de l’intégration à la conversation", + "Another user" : "Autre utilisateur", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utilisateur Nextcloud", + "User password" : "Mot de passe utilisateur", + "Talk conversation" : "Conversation Talk", + "Skip TLS verification" : "Ignorer la vérification TLS", + "Matrix server URL" : "URL du serveur Matrix", + "User" : "Utilisateur", + "Matrix channel" : "Canal Matrix", + "Mattermost server URL" : "URL du serveur Mattermost", + "Mattermost user" : "Utilisateur Mattermost", + "Team name" : "Nom d'équipe", + "Channel name" : "Nom du canal", + "Rocket.Chat server URL" : "URL du serveur Rocket.Chat", + "User name or email address" : "Identifiant ou adresse e-mail", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL du serveur Zulip", + "Bot user name" : "Nom d'utilisateur du bot", + "Bot API key" : "Clé API du bot", + "Zulip channel" : "Canal Zulip", + "API token" : "Jeton d'API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "Identifiant ou nom du serveur", + "Channel ID (prefixed with \"ID:\") or name" : "Nom du canal ou ID (préfixé par \"ID:\")", + "Channel" : "Canal", + "Login" : "S’identifier", + "Chat ID" : "Identifiant de la discussion", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL du serveur IRC (ex. chat.freenode.net:6667)", + "Nickname" : "Surnom", + "Connection password" : "Mot de passe de connexion", + "IRC channel" : "Canal IRC", + "Channel password" : "Mot de passe du canal", + "NickServ nickname" : "Nom d'utilisateur NickServ", + "NickServ password" : "Mot de passe NickServ", + "Use TLS" : "Utiliser TLS", + "Use SASL" : "Utiliser SASL", + "Tenant ID" : "Identifiant Tenant", + "Client ID" : "ID Client", + "Team ID" : "Identifiant Team", + "Thread ID" : "Identifiant du fil de discussion", + "XMPP/Jabber server URL" : "URL du serveur XMPP/Jabber", + "MUC server URL" : "URL du serveur MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Messages épinglés", + "Media" : "Médias", + "Polls" : "Sondages", + "Deck cards" : "Cartes Deck", + "Voice messages" : "Messages vocaux", + "Locations" : "Lieux", + "Call recordings" : "Enregistrements des appels", + "Audio" : "Son", + "Show all pinned messages" : "Montrer tous les messages épinglés", + "Show all media" : "Montrer tous les médias", + "Show all files" : "Afficher tous les fichiers", + "Show all polls" : "Afficher tous les sondages", + "Show all deck cards" : "Montrer toutes les cartes Deck", + "Show all voice messages" : "Afficher tous les messages vocaux", + "Show all locations" : "Montrer tous les emplacements", + "Show all call recordings" : "Afficher tous les enregistrements d'appels", + "Show all audio" : "Montrer tous les audio", + "Show all other" : "Montrer tous les autres", + "Follow conversation settings" : "Utiliser les paramètres de la conversation", + "Group" : "Groupe", + "Team" : "Équipe", + "You reconnected to the call" : "Vous avez rejoint l'appel à nouveau", + "{actor} reconnected to the call" : "{actor} a rejoint l'appel à nouveau", + "You added {user0} and {user1}" : "Vous avez ajouté {user0} et {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Vous avez ajouté {user0}, {user1} et %n autre participant","Vous avez ajouté {user0}, {user1} et %n autres participants","Vous avez ajouté {user0}, {user1} et %n autres participants"], + "An administrator added you and {user0}" : "Un administrateur a ajouté {user0} et vous", + "{actor} added you and {user0}" : "{actor} a ajouté {user0} et vous", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrateur a ajouté {user0}, vous et %n autre participant","Un administrateur a ajouté {user0}, vous et %n autres participants","Un administrateur a ajouté {user0}, vous et %n autres participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} a ajouté {user0}, vous et %n autre participant","{actor} a ajouté {user0}, vous et %n autres participants","{actor} a ajouté {user0}, vous et %n autres participants"], + "An administrator added {user0} and {user1}" : "Un administrateur a ajouté {user0} et {user1}", + "{actor} added {user0} and {user1}" : "{actor} a ajouté {user0} et {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrateur a ajouté {user0}, {user1} et %n autre participant","Un administrateur a ajouté {user0}, {user1} et %n autres participants","Un administrateur a ajouté {user0}, {user1} et %n autres participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} a ajouté {user0}, {user1} et %n autre participant","{actor} a ajouté {user0}, {user1} et %n autres participants","{actor} a ajouté {user0}, {user1} et %n autres participants"], + "You removed {user0} and {user1}" : "Vous avez retiré {user0} et {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Vous avez retiré {user0}, {user1} et %n autre participant","Vous avez retiré {user0}, {user1} et %n autres participants","Vous avez retiré {user0}, {user1} et %n autres participants"], + "An administrator removed you and {user0}" : "Un administrateur vous a retiré et {user0}", + "{actor} removed you and {user0}" : "{actor} vous a retiré et {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrateur vous a retiré, {user0} et %n autre participant","Un administrateur vous a retiré, {user0} et %n autres participants","Un administrateur vous a retiré, {user0} et %n autres participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} vous a retiré, {user0} et %n autre participant","{actor} vous a retiré, {user0} et %n autres participants","{actor} vous a retiré, {user0} et %n autres participants"], + "An administrator removed {user0} and {user1}" : "Un administrateur a retiré {user0} et {user1}", + "{actor} removed {user0} and {user1}" : "{actor} a retiré {user0} et {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrateur a retiré {user0}, {user1} et %n autre participant","Un administrateur a retiré {user0}, {user1} et %n autres participants","Un administrateur a retiré {user0}, {user1} et %n autres participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} a retiré {user0}, {user1} et %n autre participant","{actor} a retiré {user0}, {user1} et %n autres participants","{actor} a retiré {user0}, {user1} et %n autres participants"], + "You and {user0} joined the call" : "Vous et {user0}avez rejoint l'appel", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vous, {user0} et %n autre participant avez rejoint l'appel","Vous, {user0} et %n autres participants avez rejoint l'appel","Vous, {user0} et %n autres participants avez rejoint l'appel"], + "{user0} and {user1} joined the call" : "{user0} et {user1} ont rejoint l'appel", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} et %n autre participant ont rejoint l'appel","{user0}, {user1} et %n autres participants ont rejoint l'appel","{user0}, {user1} et %n autres participants ont rejoint l'appel"], + "You and {user0} left the call" : "Vous et {user0} avez quitté l'appel", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["{user0}, %n autre participant et vous avez quitté l'appel","{user0}, %n autres participants et vous avez quitté l'appel","Vous, {user0}, %n autres participants avez quitté l'appel"], + "{user0} and {user1} left the call" : "{user0} et {user1} ont quitté l'appel", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} et %n autre participant ont quitté l'appel","{user0}, {user1} et %n autres participants ont quitté l'appel","{user0}, {user1} et %n autres participants ont quitté l'appel"], + "You promoted {user0} and {user1} to moderators" : "Vous avez promu {user0} et {user1} modérateurs", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Vous avez promu {user0}, {user1} et %n autre participant modérateurs","Vous avez promu {user0}, {user1} et %n autres participants modérateurs","Vous avez promu {user0}, {user1} et %n autres participants modérateurs"], + "An administrator promoted you and {user0} to moderators" : "Un administrateur vous a promu modérateur ainsi que {user0}", + "{actor} promoted you and {user0} to moderators" : "{actor} vous a promu modérateur ainsi que {user0}", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrateur a promu {user0}, %n autre participant et vous modérateurs","Un administrateur a promu {user0}, %n autres participants et vous modérateurs","Un administrateur vous a promu modérateur ainsi que {user0} et %n autres participants"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} a promu {user0}, %n autre participant et vous modérateurs","{actor} a promu {user0}, %n autres participants et vous modérateurs","{actor} vous a promu modérateur ainsi que {user0} et %n autres participants"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrateur a promu {user0} et {user1} modérateurs", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} a promu {user0} et {user1} modérateurs", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrateur a promu {user0}, {user1} et %n autre participant modérateurs","Un administrateur a promu {user0}, {user1} et %n autres participants modérateurs","Un administrateur a promu {user0}, {user1} et %n autres participants modérateurs"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} a promu {user0}, {user1} et %n autre participant modérateurs","{actor} a promu {user0}, {user1} et %n autres participants modérateurs","{actor} a promu {user0}, {user1} et %n autres participants modérateurs"], + "You demoted {user0} and {user1} from moderators" : "Vous avez retiré {user0} et {user1} de la liste des modérateurs", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Vous avez retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","Vous avez retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","Vous avez retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "An administrator demoted you and {user0} from moderators" : "Un administrateur vous a retiré de la liste des modérateurs ainsi que {user0} ", + "{actor} demoted you and {user0} from moderators" : "{actor} vous a retiré de la liste des modérateurs ainsi que {user0}", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrateur vous a retiré la liste des modérateurs ainsi que {user0} et %n autre participant","Un administrateur vous a retiré de la liste des modérateurs ainsi que{user0} et %n autres participants","Un administrateur vous a retiré de la liste des modérateurs ainsi que{user0} et %n autres participants"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autre participant","{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autres participants","{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autres participants"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrateur a retiré {user0} et {user1} de la liste des modérateurs", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} a retiré {user0} et {user1} de la liste des modérateurs", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrateur a retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","Un administrateur a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","Un administrateur a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} a retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","{actor} a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","{actor} a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "You:" : "Vous : ", + "You: {lastMessage}" : "Moi : {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(modifié par vous)", + "(edited by a deleted user)" : "(modifié par un utilisateur supprimé)", + "(edited by {moderator})" : "(modifié par {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Vous essayez de rejoindre une conversation mais vous avez déjà une session ouverte sur une autre fenêtre ou un autre périphérique. Ce n'est pas possible pour l'instant dans Nextcloud Talk : que voulez-vous faire ?", + "Leave this page" : "Quitter cette page", + "Join here" : "Rejoignez la conversation", + "Deck card has been posted to {conversation}" : "Une carte Deck a été postée dans {conversation}", + "An error occurred while posting deck card to conversation" : "Une erreur est survenue lors de la publication de la carte Deck dans la conversation.", + "Post to a conversation" : "Envoyer dans une conversation", + "Post to conversation" : "Envoyer dans la conversation", + "The recording failed. Please contact your administrator." : "L'enregistrement a échoué. Veuillez contacter votre administrateur.", + "Location has been posted to {conversation}" : "L'emplacement a été posté dans {conversation}", + "An error occurred while posting location to conversation" : "Une erreur est survenue lors de la publication de l'emplacement dans la conversation", + "Share to a conversation" : "Partager dans une conversation", + "Share to conversation" : "Partager dans la conversation", + "In conversation" : "Dans une conversation", + "Search in conversation: {conversation}" : "Rechercher dans la conversation : {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vos requêtes sont bridées pour le moment par la protection anti force brute", + "Error while clearing conversation history" : "Erreur à la suppression de l'historique de la conversation", + "Error occurred while allowing guests" : "Une erreur est survenue lors de l'autorisation des invités", + "Error occurred while disallowing guests" : "Une erreur est survenue lors de l'interdiction des invités", + "Error occurred when restricting the conversation to moderator" : "Une erreur est survenue lors de la restriction de la conversation au modérateur", + "Error occurred when opening the conversation to everyone" : "Une erreur est survenue lors de l'ouverture de la conversation à tout le monde", + "Conversation password has been saved" : "Le mot de passe de cette conversation a été enregistré", + "Conversation password has been removed" : "Le mot de passe de cette conversation a été supprimé", + "Error occurred while saving conversation password" : "Une erreur est survenue lors de l'enregistrement du mot de passe de la conversation", + "Call recording is starting." : "L'enregistrement de l'appel est lancé.", + "Call recording stopped while starting." : "L'enregistrement de l'appel s'est arrêté durant son lancement.", + "Call recording stopped. You will be notified once the recording is available." : "Enregistrement d'appel stoppé. Vous serez averti quand l'enregistrement sera disponible.", + "Conversation picture set" : "L'image de conversation a été définie", + "Conversation picture deleted" : "L'image de conversation a été supprimée", + "Could not delete the conversation picture" : "Impossible de supprimer l'image de cette conversation.", + "Could not remove the automatic expiration" : "Impossible de retirer l'expiration automatique", + "Could not post message: {errorMessage}" : "Impossible de publier le message : {errorMessage}", + "Participant is banned successfully" : "Le participant a été banni avec succès", + "Error while banning the participant" : "Erreur lors de l'exclusion du participant", + "An error occurred while fetching the participants" : "Une erreur est survenue pendant la récupération des participants", + "Could not send invitation to {actorId}" : "Impossible d'envoyer une invitation à {actorId}", + "Invitations sent" : "Invitations envoyées", + "Error occurred when sending invitations" : "Une erreur est survenue lors de l'envoi d'invitations", + "Failed to join the conversation." : "Impossible de rejoindre la conversation.", + "An error occurred while creating breakout rooms" : "Une erreur est survenue lors de la création des salles de sous-groupes", + "An error occurred while re-ordering the attendees" : "Une erreur est survenue lors de la réorganisation des participants", + "An error occurred while deleting breakout rooms" : "Une erreur est survenue lors de la suppression des salles de sous-groupes", + "An error occurred while starting breakout rooms" : "Une erreur est survenue lors du démarrage des salles de sous-groupes", + "An error occurred while stopping breakout rooms" : "Une erreur est survenue lors de l'arrêt des salles de sous-groupes", + "An error occurred while sending a message to the breakout rooms" : "Une erreur est survenue lors de l'envoi d'un message aux salles de sous-groupes", + "An error occurred while requesting assistance" : "Une erreur est survenue lors de la demande d'assistance", + "An error occurred while resetting the request for assistance" : "Une erreur est survenue lors de l'annulation de la demande d'assistance", + "An error occurred while joining breakout room" : "Une erreur est survenue lors de la connexion au salon privé", + "Failed to rename the thread" : "Impossible de renommer le fil de discussion", + "Error fetching upcoming events" : "Erreur à la récupération des événements à venir", + "Error fetching upcoming reminders" : "Erreur à la récupération des rappels à venir", + "An error occurred while accepting an invitation" : "Une erreur est survenue lors de l'acceptation d'une invitation", + "An error occurred while rejecting an invitation" : "Une erreur est survenue lors du rejet d'une invitation", + "{guest} (guest)" : "{guest} (invité)", + "Poll draft has been saved" : "Le brouillon du sondage a été enregistré", + "An error occurred while saving the draft" : "Une erreur est survenue lors de l'enregistrement du brouillon", + "An error occurred while submitting your vote" : "Une erreur est survenue lors de votre participation au sondage", + "An error occurred while ending the poll" : "Une erreur est survenue au moment de terminer le sondage", + "An error occurred while deleting the poll draft" : "Une erreur est survenue lors de la suppression du brouillon du sondage", + "Poll \"{name}\" was created by {user}. Click to vote" : "Le sondage « {name} » a été créé par {user}. Cliquez pour voter", + "Failed to add reaction" : "Impossible d'ajouter la réaction", + "Failed to remove reaction" : "Impossible de supprimer la réaction", + "Error while uploading file \"{fileName}\"" : "Erreur lors du téléversement du fichier \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Espace libre insuffisant pour téléverser le fichier \"{fileName}\"", + "You are not allowed to share files" : "Vous n'êtes pas autorisé à partager des fichiers", + "Error while sharing file" : "Erreur lors du partage du fichier", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Le navigateur que vous utilisez n'est pas entièrement pris en charge par Nextcloud Talk. Veuillez utiliser la dernière version de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Dans %n heure","Dans %n heures","Dans %n heures"], + "_%n minute _::_%n minutes_" : ["%n minute","%n minutes","%n minutes"], + "In {hours} and {minutes}" : "Dans {hours} et {minutes}", + "_In %n minute_::_In %n minutes_" : ["Dans %n minute","Dans %n minutes","Dans %n minutes"], + "Later today – {timeLocale}" : "Plus tard aujourd'hui – {timeLocale}", + "Set time for later today" : "Sélectionner l'horaire pour plus tard aujourd'hui", + "Tomorrow – {timeLocale}" : "Demain – {timeLocale}", + "Set time for tomorrow" : "Sélectionner l'horaire pour demain", + "This weekend – {timeLocale}" : "Ce week-end – {timeLocale}", + "Set time for this weekend" : "Sélectionner l'horaire pour ce week-end", + "Next week – {timeLocale}" : "Semaine prochaine – {timeLocale}", + "Set time for next week" : "Sélectionner l'horaire pour la semaine prochaine", + "Message link copied to clipboard" : "Le lien vers le message a été copié dans le presse-papier", + "Conversation link copied to clipboard" : "Lien de la conversation copié dans le presse-papier", + "The link could not be copied" : "Le lien n'a pas pu être copié", + "Error while parsing a PROPFIND error" : "Erreur lors de l'analyse d'une erreur PROPFIND", + "Sending signaling message has failed" : "L'envoi du message de signalement a échoué", + "Lost connection to signaling server. Trying to reconnect." : "Connexion au serveur perdue. Essayez de vous reconnecter", + "Lost connection to signaling server." : "Connexion au serveur de signalement perdue.", + "Connecting is taking longer than expected …" : "La connexion prend plus de temps que prévu…", + "Failed to connect. Retrying …" : "Échec de la connexion. Nouvel essai…", + "Failed to connect. The signaling server may be set up incorrectly" : "Échec de la connexion. Le serveur de signalisation est peut-être mal configuré.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Le serveur de signalement configuré doit être mis à jour pour être compatible avec cette version de Talk. Veuillez contacter votre administrateur.", + "Please restart the app." : "Merci de redémarrer l'application.", + "Please reload the page." : "Veuillez recharger la page.", + "Please try to restart the app." : "Merci d'essayer de redémarrer l'application.", + "Please try to reload the page." : "Merci d'essayer de recharger la page.", + "Do not disturb" : "Ne pas déranger", + "Away" : "Absent", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Caméra {number}", + "Speaker {number}" : "Haut-parleur {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Vous semblez parler avec le micro coupé, s'il vous plaît, rétablissez votre son pour que les autres vous entendent", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Impossible d'établir une connexion avec au moins un participant. un serveur TURN est probablement nécessaire. Veuillez demander à votre administrateur d'en installer un, en suivant {linkstart}cette documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "L'opération dure plus longtemps que prévu. Si les autorisations média (audio et vidéo) ont déjà été données, re-démarrez votre navigateur web.", + "Access to microphone & camera is only possible with HTTPS" : "L'accès au microphone et à la caméra est seulement possible en HTTPS", + "Please move your setup to HTTPS" : "Veuillez modifier votre installation afin d'utiliser HTTPS", + "Access to microphone & camera was denied" : "L'accès au microphone et à la caméra a été refusé", + "WebRTC is not supported in your browser" : "WebRTC n'est pas pris en charge par votre navigateur", + "Please use a different browser like Firefox or Chrome" : "Veuillez utiliser un autre navigateur comme Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erreur lors de l'accès au microphone et à la caméra", + "%s Talk on your mobile devices" : "%s Talk sur vos appareils mobiles", + "Join conversations at any time, anywhere, on any device." : "Rejoignez des conversations n'importe quand, n'importe où, depuis n'importe quel appareil.", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "__language_name__" : "Français", + "Webhook Demo" : "Démo Webhook", + "Call summary (%s)" : "Résumé de l'appel (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Le robot chargé de résumer l'appel publie un message de synthèse après l'appel, énumérant tous les participants et décrivant les tâches à accomplir.", + "Tasks" : "Tâches", + "Notes" : "Notes", + "Reports" : "Rapports", + "Decisions" : "Décisions", + "Agenda" : "Agenda", + "Call summary" : "Résumé de l'appel", + "Call summary - {title}" : "Résumé de l'appel - {title}", + "Talk conversation for event" : "Conversation Talk pour l'événement", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push est installé, cela améliore les performances des clients de synchronisation.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} n'est pas installé, cela peut entraîner des problèmes de performances lors de l'utilisation de clients de synchronisation.", + "Next meeting" : "Prochaine réunion", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Planifiez une réunion à partir de votre calendrier. Une conversation Talk doit être définie comme emplacement pour apparaître ici.", + "Join conversations from remote Nextcloud servers" : "Rejoindre les conversations des serveurs Nextcloud distants", + "Your default media state has been saved" : "L'état par défaut des médias a été sauvegardé", + "Set reminder for later today" : "Placer un rappel pour plus tard aujourd'hui", + "Set reminder for tomorrow" : "Placer un rappel pour demain", + "Set reminder for this weekend" : "Placer un rappel pour ce week-end", + "Set reminder for next week" : "Placer un rappel pour la semaine prochaine", + "Generate summary" : "Générer un résumé", + "Open poll • You voted already" : "Sondage ouvert • Vous avez déjà voté", + "Open poll • Click to vote" : "Sondage ouvert • Cliquez pour voter", + "Poll • Ended" : "Sondage • Terminé", + "Talk recording from {time} ({conversation})" : "Enregistrement de la conversation à partir de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Résultats du sondage • %n vote","Résultats du sondage • %n votes","Résultats du sondage • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Sondage ouvert • %n vote","Sondage ouvert • %n votes","Sondage ouvert • %n votes"], + "Submit vote" : "Valider le vote", + "Your privacy setting has been saved" : "Vos paramètres de confidentialité ont été enregistrés", + "Your personal setting has been saved" : "Vos paramètres personnels ont été sauvegardés", + "Failed to save sounds setting" : "Impossible d'enregistrer les paramètres audio", + "Sounds setting saved" : "Paramètres audio enregistrés", + "Always shown if recording consent is required" : "Toujours visible si le consentement à l'enregistrement est requis", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk a été mis à jour, vous ne pouvez pas démarrer ou rejoindre un appel.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Vous avez déjà ouvert une conversation dans une autre fenêtre ou sur un autre périphérique. Ce n'est pas supporté pour l'instant dans Nextcloud Talk, votre session a été fermée. ", + "Nextcloud Talk was updated." : "Nextcloud Talk a été mis à jour.", + "Nextcloud is in maintenance mode." : "Nextcloud est en mode maintenance.", + "Nextcloud Talk Federation was updated." : "La fédération Nextcloud Talk a été mise à jour.", + "Enable live translation" : "Activer la traduction en direct", + "I picked list style" : "J'ai choisi le style liste", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hé ! Utilisez-vous Talk en mode liste ou avec des bulles de message ?" +}, +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/fr.json b/l10n/fr.json new file mode 100644 index 0000000..1299ad2 --- /dev/null +++ b/l10n/fr.json @@ -0,0 +1,2211 @@ +{ "translations": { + "a conversation" : "une conversation", + "(Duration %s)" : "(Durée %s)", + "You attended a call with {user1}" : "Vous avez participé à un appel avec {user1}", + "_%n guest_::_%n guests_" : ["%n invité","%n invités","%n invités"], + "You attended a call with {user1} and {user2}" : "Vous avez participé à un appel avec {user1} et {user2} ", + "You attended a call with {user1}, {user2} and {user3}" : "Vous avez participé à un appel avec {user1}, {user2} et {user3} ", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Vous avez participé à un appel avec {user1}, {user2}, {user3} et {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Vous avez participé à un appel avec {user1}, {user2}, {user3}, {user4} et {user5}", + "_%n other_::_%n others_" : ["%n autre","%n autres","%n autres"], + "{actor} invited you to {call}" : "{actor} vous a invité à {call}", + "You were invited to a conversation or had a call" : "Vous avez été invité·e à une conversation ou avez eu un appel", + "Other activities" : "Autres activités", + "Talk" : "Talk", + "Guest" : "Invité", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bienvenue sur Nextcloud Talk !\nDans cette conversation, vous serez informé des nouvelles fonctionnalités disponibles sur Nextcloud Talk.", + "## New in Talk %s" : "## Nouveau sur Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge et Safari peuvent désormais être utilisés pour participer aux appels audio et vidéo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Les conversations un-à-un sont désormais persistantes et ne peuvent plus être transformées en conversations de groupe par accident. De plus, lorsque l'un des participants quitte la conversation, celle-ci n'est plus automatiquement supprimée. Ce n'est que si les deux participants quittent la conversation que celle-ci est supprimée du serveur.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Vous pouvez notifier tous les participants en écrivant \"@all\" dans la discussion", + "- With the \"arrow-up\" key you can repost your last message" : "- Avec la touche \"flèche du haut\" vous pouvez renvoyer votre dernier message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk peut maintenant utiliser des commandes, envoyez \"/help\" comme un message dans le chat pour vérifier si l'administrateur en a configuré", + "- With projects you can create quick links between conversations, files and other items" : "- Avec les projets vous pouvez créer des liens rapides entre des conversations, des fichiers et d'autres éléments", + "- You can now mention guests in the chat" : "- Désormais vous pouvez mentionner les invités dans la discussion", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Les conversations peuvent désormais avoir une salle d'attente. Cela permet aux modérateurs de rejoindre la conversation et l'appel afin de préparer la réunion pendant que les invités attendent", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Vous pouvez maintenant répondre directement aux messages, ce qui permet aux autres utilisateurs de mieux comprendre le contexte de votre message", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La recherche de conversations et de participants permet désormais de filtrer vos conversations existantes, ce qui facilite considérablement la recherche de conversations antérieures", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Vous pouvez désormais ajouter des groupes d'utilisateurs aux conversations lorsque l'application Cercles est installée", + "- Check out the new grid and call view" : "- Découvrez la nouvelle vue en grille des appels", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Vous pouvez maintenant téléverser et glisser-déposer des fichiers directement depuis votre appareil vers la discussion.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "Les fichiers partagés sont maintenant ouverts directement à l'intérieur de la conversation avec les applications de visionnage", + "- You can now search for chats and messages in the unified search in the top bar" : "- Vous pouvez maintenant rechercher dans les discussions et les messages depuis la recherche unifiée de la barre supérieure", + "- Spice up your messages with emojis from the emoji picker" : "- Mettez du piment dans vos messages avec les émojis du sélecteur d'émojis", + "- You can now change your camera and microphone while being in a call" : "- Vous pouvez maintenant modifier votre microphone et votre caméra pendant l'appel", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Donnez à vos conversations un contexte avec une description et ouvrez-les pour que les utilisateurs connectés puissent les trouver et s'y joindre.", + "- See a read status and send failed messages again" : "- Voir un statut de lecture et renvoyer les messages échoués", + "- Raise your hand in a call with the R key" : "- Lever la main lors d'un appel avec la touche R", + "- Join the same conversation and call from multiple devices" : "- Participez à la même conversation et appel depuis plusieurs appareils", + "- Send voice messages, share your location or contact details" : "- Envoyez des messages vocaux, partagez votre emplacement ou vos coordonnées", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Ajoutez des groupes à une conversation et les nouveaux membres du groupe seront automatiquement ajoutés en tant que participants", + "- A preview of your audio and video is shown before joining a call" : "- Une prévisualisation de vos flux audio et vidéo est montrée avant de rejoindre un appel", + "- You can now blur your background in the newly designed call view" : "- Vous pouvez maintenant flouter l'arrière-plan dans la nouvelle disposition de la fenêtre d'appel", + "- Moderators can now assign general and individual permissions to participants" : "- Les modérateurs peuvent maintenant donner des permissions générales et individuelles aux participants", + "- You can now react to chat messages" : "- Vous pouvez maintenant réagir aux messages instantanés", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dans le panneau latéral, vous pouvez désormais trouver une vue globale des derniers éléments partagés", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utiliser un sondage pour connaître l'opinion des autres ou définir une date", + "- Configure an expiration time for chat messages" : "- Configurer une durée d'expiration pour les messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Lancez les appels sans notifier les autres dans les grandes conversations. Vous pouvez envoyer une notification d'appel individuel une fois que l'appel a commencé.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envoi des messages sans notifier les destinataires si ce n'est pas urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Les émojis peuvent maintenant être autocomplétés en tapant un « : »", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Liez divers éléments grâce au sélecteur intelligent en tapant un « / »", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Les modérateurs peuvent maintenant créer des salles de sous-groupe (nécessite un serveur haute performance)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Les appels peuvent maintenant être enregistrés (nécessite un serveur haute performance)", + "- Conversations can now have an avatar or emoji as icon" : "- Les conversations peuvent maintenant avoir comme icône un avatar ou un emoji", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- des fonds d'écran virtuels sont maintenant disponibles en plus du fond flouté pour les appels vidéos", + "- Reactions are now available during calls" : "- Les réactions sont maintenant possible pendant les appels", + "- Typing indicators show which users are currently typing a message" : "- Des indicateurs montrent quels utilisateurs sont actuellement en train d'écrire des messages", + "- Groups can now be mentioned in chats" : "- Les groupes peuvent maintenant être mentionnés dans les conversations", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Les enregistrements d'appel sont automatiquement retranscrits si une application de transcription est configurée", + "- Chat messages can be translated if a translation provider app is registered" : "- Les messages peuvent être traduits automatiquement si une application de traduction est configurée", + "- **Markdown** can now be used in _chat_ messages" : "- La syntaxe **Markdown** peut maintenant être utilisée dans la messagerie instantanée", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Les Webhooks sont maintenant disponibles pour créer des robots conversationnels. Voir la documentation pour plus d'informations : https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Définir un rappel sur un message pour être notifié à nouveau plus tard", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utiliser la conversation \"Note à soi-même\" pour prendre des notes et partager des infos entre vos appareils", + "- Captions allow to send a message with a file at the same time" : "- Légendes permet d'envoyer un message avec un fichier en même temps", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- La vidéo de l’intervenant est maintenant visible quand le partage d’écran est activé et les réactions sont animées", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Les messages peuvent maintenant être modifiés par les auteurs connectés et les modérateurs pendant 6 heures", + "- Unsent message drafts are now saved in your browser" : "- Les messages non envoyés sont maintenant sauvegardés dans votre navigateur", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Le chat textuel peut désormais être effectué de manière fédérée avec d'autres serveurs Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Les modérateurs peuvent maintenant bannir les comptes et les invités pour éviter qu'ils ne rejoignent à nouveau une conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Les prochaines réunions fixées dans les évènements liés du calendrier et les remplaçants pendant les absences sont maintenant visibles dans les conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Les appels peuvent désormais être effectués de manière fédérée avec d'autres serveurs Talk (nécessite le backend hautes performances)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introduction du client Nextcloud Talk pour Windows, macOS et Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Résume les enregistrements d'appel et les messages non lus dans les discussions avec l'Assistant Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Réunions améliorées avec la reconnaissance des invités via leur adresse e-mail, l'import de liste de participants, des brouillons pour les sondages et le téléchargement de la liste des participants à un appel.", + "- Archive conversations to stay focused" : "- Archivage des conversations pour rester concentré", + "- Schedule a meeting into your calendar from within a conversation" : "- Planifier une réunion dans votre calendrier depuis une conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Rechercher des messages de la conversation actuelle directement depuis le panneau latéral de droite", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Voir plus de conversations d'un seul coup d'oeil avec la nouvelle liste compacte (à activer dans les paramètres de Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Les conversations liées à des réunions ont maintenant leur titre et description synchronisée avec le calendrier et son masquées avec un filtre de recherche jusqu'à ce que leur date de début approche.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marquez les conversations comme sensibles dans les paramètres de notification, pour cacher les contenus des messages de la liste des conversations et des notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Pour recevoir des notifications push en mode \"Ne pas déranger\", marquer les conversations comme importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Ajouter des participants à une conversation privée pour créer un nouvel appel de groupe à la volée", + "- Use threads to keep your chat and discussions organized" : "- Utilisez les fils de discussion pour organiser vos conversations et vos discussions", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Les transcriptions en direct sont désormais disponibles pendant l'appel (nécessite l'application ExApp de transcription en direct et le backend haute performance)", + "- Moderators can now pin messages so they are kept at the top" : "- Les modérateurs peuvent désormais épingler des messages afin qu'ils restent en haut de la page. ", + "- Schedule a message to send it at a later time" : "- Programmer un message pour l'envoyer plus tard", + "_All %n participant_::_All %n participants_" : ["Le participant","Les %n participants","Les %n participants"], + "Talk updates ✅" : "Mises à jour de Talk ✅", + "Reaction deleted by author" : "Réaction supprimée par son auteur", + "{actor} created the conversation" : "{actor} a créé la conversation", + "You created the conversation" : "Vous avez créé la conversation", + "System created the conversation" : "Le système a créé la conversation", + "An administrator created the conversation" : "Un administrateur a créé la conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a renommé la conversation de \"%1$s\" à \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Vous avez renommé la conversation de \"%1$s\" à \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrateur a renommé la conversation de \"%1$s\" à \"%2$s\"", + "{actor} set the description" : "{actor} a renseigné la description", + "You set the description" : "Vous avez renseigné la description", + "An administrator set the description" : "Un administrateur a renseigné la description", + "{actor} removed the description" : "{actor} a supprimé la description", + "You removed the description" : "Vous avez supprimé la description", + "An administrator removed the description" : "Un administrateur a supprimé la description", + "You started a silent call" : "Vous avez lancé un appel silencieux", + "Outgoing silent call" : "Appel silencieux sortant", + "{actor} started a silent call" : "{actor} a lancé un appel silencieux", + "Incoming silent call" : "Appel silencieux entrant", + "You started a call" : "Vous avez lancé un appel", + "Outgoing call" : "Appel sortant", + "{actor} started a call" : "{actor} a lancé un appel", + "Incoming call" : "Appel entrant", + "{actor} joined the call" : "{actor} a rejoint l'appel", + "You joined the call" : "Vous avez rejoint l'appel", + "{actor} left the call" : "{actor} a quitté l'appel", + "You left the call" : "Vous avez quitté l'appel", + "{actor} unlocked the conversation" : "{actor} a déverrouillé la conversation", + "You unlocked the conversation" : "Vous avez déverrouillé la conversation", + "An administrator unlocked the conversation" : "Un administrateur a déverrouillé la conversation", + "{actor} locked the conversation" : "{actor} a verrouillé la conversation", + "You locked the conversation" : "Vous avez verrouillé la conversation", + "An administrator locked the conversation" : "Un administrateur a verrouillé la conversation", + "{actor} limited the conversation to the current participants" : "{actor} a restreint la conversation aux participants actuels", + "You limited the conversation to the current participants" : "Vous avez restreint la conversation aux participants actuels", + "An administrator limited the conversation to the current participants" : "Un administrateur a restreint la conversation aux participants actuels", + "{actor} opened the conversation to registered users" : "{actor} a ouvert la conversation aux utilisateurs enregistrés", + "You opened the conversation to registered users" : "Vous avez ouvert la conversation aux utilisateurs enregistrés", + "An administrator opened the conversation to registered users" : "Un administrateur a ouvert la conversation aux utilisateurs enregistrés", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} a ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités.", + "You opened the conversation to registered users and users created with the Guests app" : "Vous avez ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un administrateur a ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités.", + "The conversation is now open to everyone" : "La conversation est maintenant ouverte à tout le monde", + "{actor} opened the conversation to everyone" : "{actor} a ouvert la conversation à tout le monde", + "You opened the conversation to everyone" : "Vous avez ouvert la conversation à tout le monde.", + "{actor} restricted the conversation to moderators" : "{actor} a restreint la conversation aux modérateurs", + "You restricted the conversation to moderators" : "Vous avez restreint la conversation aux modérateurs", + "{actor} started breakout rooms" : "{actor} a démarré les salles de sous-groupes", + "You started breakout rooms" : "Vous avez démarré les salles de sous-groupes", + "{actor} stopped breakout rooms" : "{actor} a stoppé les salles de sous-groupes", + "You stopped breakout rooms" : "Vous avez mis fin aux salles de sous-groupes", + "{actor} allowed guests" : "{actor} a autorisé les invités", + "You allowed guests" : "Vous avez autorisé les invités", + "An administrator allowed guests" : "Un administrateur a autorisé les invités", + "{actor} disallowed guests" : "{actor} a désactivé les invités", + "You disallowed guests" : "Vous avez désactivé les invités", + "An administrator disallowed guests" : "Un administrateur a désactivé les invités", + "{actor} set a password" : "{actor} a défini un mot de passe", + "You set a password" : "Vous avez défini un mot de passe", + "An administrator set a password" : "Un administrateur a défini un mot de passe", + "{actor} removed the password" : "{actor} a supprimé le mot de passe", + "You removed the password" : "Vous avez supprimé le mot de passe", + "An administrator removed the password" : "Un administrateur a supprimé le mot de passe", + "{actor} added {user}" : "{actor} a ajouté {user}", + "You joined the conversation" : "Vous avez rejoint la conversation", + "{actor} joined the conversation" : "{actor} a rejoint la conversation", + "You added {user}" : "Vous avez ajouté {user}", + "{actor} added you" : "{actor} vous a ajouté", + "An administrator added you" : "Un administrateur vous a ajouté", + "An administrator added {user}" : "Un administrateur a ajouté {user}", + "You left the conversation" : "Vous avez quitté la conversation", + "{actor} left the conversation" : "{actor} a quitté la discussion", + "{actor} removed {user}" : "{actor} a retiré {user}", + "You removed {user}" : "Vous avez retiré {user}", + "{actor} removed you" : "{actor} vous a retiré", + "An administrator removed you" : "Un administrateur vous a retiré", + "An administrator removed {user}" : "Un administrateur a retiré {user}", + "{actor} invited {federated_user}" : "{actor} a invité {federated_user}", + "You invited {federated_user}" : "Vous avez invité {federated_user}", + "You accepted the invitation" : "Vous avez accepté l'invitation", + "{actor} invited you" : "{actor} vous a invité", + "An administrator invited you" : "Un administrateur vous a invité", + "An administrator invited {federated_user}" : "Un administrateur a invité {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} a accepté l'invitation", + "{actor} removed {federated_user}" : "{actor} a retiré {federated_user}", + "You removed {federated_user}" : "Vous avez retiré {federated_user}", + "You declined the invitation" : "Vous avez décliné l'invitation", + "An administrator removed {federated_user}" : "Un administrateur a retiré {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} a refusé l'invitation", + "{actor} added group {group}" : "{actor} a ajouté le groupe {group}", + "You added group {group}" : "Vous avez ajouté le groupe {group}", + "An administrator added group {group}" : "Un administrateur a ajouté le groupe {group}", + "{actor} removed group {group}" : "{actor} a supprimé le groupe {group}", + "You removed group {group}" : "Vous avez supprimé le groupe {group}", + "An administrator removed group {group}" : "Un administrateur a supprimé le groupe {group}", + "{actor} added team {circle}" : "{actor} a ajouté l’équipe {circle}", + "You added team {circle}" : "Vous avez ajouté l’équipe {circle}", + "An administrator added team {circle}" : "Un administrateur a ajouté l’équipe {circle}", + "{actor} removed team {circle}" : "{actor} a supprimé l’équipe {circle}", + "You removed team {circle}" : "Vous avez supprimé l’équipe {circle}", + "An administrator removed team {circle}" : "Un administrateur a supprimé l’équipe {circle}", + "{actor} added {phone}" : "{actor} a ajouté {phone}", + "You added {phone}" : "Vous avez ajouté {phone}", + "An administrator added {phone}" : "Un administrateur a ajouté {phone}", + "{actor} removed {phone}" : "{actor} a supprimé {phone}", + "You removed {phone}" : "Vous avez supprimé {phone}", + "An administrator removed {phone}" : "Un administrateur a supprimé {phone}", + "{actor} promoted {user} to moderator" : "{actor} a promu {user} modérateur", + "You promoted {user} to moderator" : "Vous avez promu {user} modérateur", + "{actor} promoted you to moderator" : "{actor} vous a promu modérateur", + "An administrator promoted you to moderator" : "Un administrateur vous a promu modérateur", + "An administrator promoted {user} to moderator" : "Un administrateur a promu {user} modérateur", + "{actor} demoted {user} from moderator" : "{actor} a retiré à {user} le rôle de modérateur", + "You demoted {user} from moderator" : "Vous avez retiré à {user} son rôle de modérateur", + "{actor} demoted you from moderator" : "{actor} vous a retiré le rôle de modérateur", + "An administrator demoted you from moderator" : "Un administrateur vous a retiré le rôle de modérateur", + "An administrator demoted {user} from moderator" : "Un administrateur a retiré à {user} le rôle de modérateur", + "{actor} shared a file which is no longer available" : "{actor} a partagé un fichier qui n'est plus disponible", + "You shared a file which is no longer available" : "Vous avez partagé un fichier qui n'est plus disponible", + "File shares are currently not supported in federated conversations" : "Le partage de fichiers n'est actuellement pas supporté dans les conversations fédérées", + "The shared location is malformed" : "L'emplacement partagé est mal formaté", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} a configuré Matterbridge pour synchroniser la conversation avec d'autres messageries instantanées", + "You set up Matterbridge to synchronize this conversation with other chats" : "Vous avez configuré Matterbridge pour synchroniser la conversation avec d'autres messageries instantanées", + "{actor} created thread {title}" : "{actor} a créé le fil de discussion {title}", + "You created thread {title}" : "Vous avez créé le fil de discussion {title}", + "{actor} renamed thread {title}" : "{actor} a renommé le fil de discussion {title}", + "You renamed thread {title}" : "Vous avez renommé le fil de discussion {title}", + "{actor} updated the Matterbridge configuration" : "{actor} a mis à jour la configuration de Matterbridge", + "You updated the Matterbridge configuration" : "Vous avez modifié la configuration de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} a supprimé la configuration de Matterbridge", + "You removed the Matterbridge configuration" : "Vous avez supprimé la configuration de Matterbridge", + "{actor} started Matterbridge" : "{actor} a démarré Matterbridge", + "You started Matterbridge" : "Vous avez démarré Matterbridge", + "{actor} stopped Matterbridge" : "{actor} a arrêté Matterbridge", + "You stopped Matterbridge" : "Vous avez arrêté Matterbridge", + "{actor} deleted a message" : "{actor} a supprimé un message", + "You deleted a message" : "Vous avez supprimé un message", + "{actor} edited a message" : "{actor} a modifié un message", + "You edited a message" : "Vous avez modifié un message", + "{actor} pinned a message" : "{actor} a épinglé un message", + "You pinned a message" : "Vous avez épinglé un message", + "{actor} unpinned a message" : "{actor} a désépinglé un message", + "Message was automatically unpinned" : "Le message a été désépinglé automatiquement", + "You unpinned a message" : "Vous avez désépinglé un message", + "{actor} deleted a reaction" : "{actor} a supprimé une réaction", + "You deleted a reaction" : "Vous avez supprimé une réaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Vous avez défini l'expiration des messages à %n semaine","Vous avez défini l'expiration des messages à %n semaines","Vous avez défini l'expiration des messages à %n semaines"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Vous avez défini l'expiration des messages à %n jour","Vous avez défini l'expiration des messages à %n jours","Vous avez défini l'expiration des messages à %n jours"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Vous avez défini l'expiration des messages à %n heure","Vous avez défini l'expiration des messages à %n heures","Vous avez défini l'expiration des messages à %n heures"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Vous avez défini l'expiration des messages à %n minute","Vous avez défini l'expiration des messages à %n minutes","Vous avez défini l'expiration des messages à %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} a défini l'expiration des messages à %n semaine","{actor} a défini l'expiration des messages à %n semaines","{actor} a défini l'expiration des messages à %n semaines"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} a défini l'expiration des messages à %n jour","{actor} a défini l'expiration des messages à %n jours","{actor} a défini l'expiration des messages à %n jours"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} a défini l'expiration des messages à %n heure","{actor} a défini l'expiration des messages à %n heures","{actor} a défini l'expiration des messages à %n heures"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} a défini l'expiration des messages à %n minute","{actor} a défini l'expiration des messages à %n minutes","{actor} a défini l'expiration des messages à %n minutes"], + "{actor} disabled message expiration" : "{actor} a désactivé l'expiration des messages", + "You disabled message expiration" : "Vous avez désactivé l'expiration des messages", + "{actor} cleared the history of the conversation" : "{actor} a effacé l'historique de la conversation", + "You cleared the history of the conversation" : "Vous avez effacé l'historique de la conversation", + "{actor} set the conversation picture" : "{actor} a défini l'image de la conversation", + "You set the conversation picture" : "Vous avez sélectionné une image pour la conversation", + "{actor} removed the conversation picture" : "{actor} a supprimé l'image de la conversation", + "You removed the conversation picture" : "Vous avez supprimé l'image de la conversation", + "{actor} ended the poll {poll}" : "{actor} a mis fin au sondage {poll}", + "You ended the poll {poll}" : "Vous avez mis fin au sondage {poll}", + "{actor} started the video recording" : "{actor} a lancé l'enregistrement vidéo", + "You started the video recording" : "Vous avez lancé l'enregistrement vidéo", + "{actor} stopped the video recording" : "{actor} a stoppé l'enregistrement vidéo", + "You stopped the video recording" : "Vous avez stoppé l'enregistrement vidéo", + "{actor} started the audio recording" : "{actor} a lancé l'enregistrement audio", + "You started the audio recording" : "Vous avez lancé l'enregistrement audio", + "{actor} stopped the audio recording" : "{actor} a stoppé l'enregistrement audio", + "You stopped the audio recording" : "Vous avez stoppé l'enregistrement audio", + "The recording failed" : "L'enregistrement a échoué", + "Someone voted on the poll {poll}" : "Quelqu'un a participé au sondage {poll}", + "Message deleted by author" : "Message supprimé par l'auteur", + "Message deleted by {actor}" : "Message supprimé par {actor}", + "Message deleted by you" : "Message supprimé par vous", + "Deleted user" : "Utilisateur supprimé", + "Unknown number" : "Numéro inconnu", + "Administration" : "Administration", + "System" : "Système", + "%s (guest)" : "%s (invité)", + "Missed call" : "Appel manqué", + "Unanswered call" : "Appel sans réponse", + "Call ended (Duration {duration})" : "L'appel a pris fin (Durée {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel a pris fin, car il a atteint la durée maximale (Durée {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} a mis fin à l'appel (Durée {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["L'appel avec %n invité a pris fin, car il a atteint la durée maximale (Durée {duration})","L'appel avec %n invités a pris fin, car il a atteint la durée maximale (Durée {duration})","L'appel avec %n invités a pris fin, car il a atteint la durée maximale (Durée {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["L'appel avec %n invité a pris fin (Durée {duration})","L'appel avec %n invités a pris fin (Durée {duration})","L'appel avec %n invités a pris fin (Durée {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} a terminé l'appel avec %n invité (Durée {duration})","{actor} a terminé l'appel avec %n invités (Durée {duration})","{actor} a terminé l'appel avec %n invités (Durée {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1} ended (Duration {duration})" : "Fin de l'appel avec {user1} (Durée {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} a terminé l'appel avec {user1} (Durée {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1} et {user2} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "L'appel avec {user1} et {user2} a pris fin (Durée {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1} et {user2} (Durée {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2} et {user3} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "L'appel avec {user1}, {user2} et {user3} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2} et {user3} (Durée {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3} et {user4} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3} et {user4} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2}, {user3} et {user4} (Durée {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3}, {user4} et {user5} a pris fin, car il a atteint la durée maximale (Durée {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "L'appel avec {user1}, {user2}, {user3}, {user4} et {user5} a pris fin (Durée {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} a mis fin à l'appel avec {user1}, {user2}, {user3}, {user4} et {user5} (Durée {duration})", + "Message of {user} in {conversation}" : "Message de {user} dans {conversation}", + "Message of {user}" : "Message de {user}", + "Message of a deleted user in {conversation}" : "Message d'un utilisateur supprimé dans {conversation}", + "Talk conversations" : "Conversations orales", + "Talk to %s" : "Discuter avec %s", + "An error occurred. Please contact your administrator." : "Une erreur est survenue. Merci de contacter votre administrateur.", + "Storage quota exceeded" : "Quota de stockage dépassé", + "File not found" : "Fichier non trouvé", + "File is not shared, or shared but not with the user" : "Le fichier n'est pas partagé, ou partagé mais pas avec cet utilisateur", + "No account available to delete." : "Aucun compte disponible à supprimer", + "Poll" : "Sondage", + "Password needs to be set" : "Le mot de passe doit être défini", + "Uploading the file failed" : "Le téléversement du fichier a échoué", + "No image file provided" : "Aucun fichier image fourni", + "File is too big" : "Le fichier est trop gros", + "Invalid file provided" : "Fichier invalide fourni", + "Invalid image" : "Image invalide", + "Unknown filetype" : "Type de fichier inconnu", + "Talk mentions" : "Mentions sur Talk", + "More conversations" : "Plus de conversations", + "Say hi to your friends and colleagues!" : "Dites bonjour à vos amis et collègues !", + "No unread mentions" : "Aucune mention non lue", + "Call in progress" : "Appel en cours", + "You were mentioned" : "Vous avez été mentionné·e", + "Write to conversation" : "Écrire dans la conversation", + "Writes event information into a conversation of your choice" : "Écrit l'évènement dans une conversation de votre choix", + "Missing email field in header line" : "Le champ e-mail est absent dans la ligne d'entête", + "Following lines are invalid: %s" : "Les lignes suivantes sont invalides : %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vous a invité à la conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "Vous avez été invité·e à la conversation \"%s\".", + "Conversation invitation" : "Invitation à une discussion", + "Scheduled time" : "Horaire programmé", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "Vous pouvez aussi appeler au téléphone en utilisant les informations suivantes", + "Dial-in information" : "Informations d'appel", + "Meeting ID" : "ID de réunion", + "Your PIN" : "Votre PIN", + "Click the button below to join the lobby now." : "Cliquez sur le bouton ci-dessous pour rejoindre la salle d'attente dès maintenant.", + "Click the link below to join the lobby now." : "Cliquez sur le lien ci-dessous pour rejoindre la salle d'attente dès maintenant.", + "Join lobby for \"%s\"" : "Rejoignez le hall \"%s\"", + "Click the button below to join the conversation now." : "Cliquez le bouton ci-dessous pour rejoindre la conversation maintenant.", + "Click the link below to join the conversation now." : "Cliquez sur le lien ci-dessous pour rejoindre la conversation maintenant.", + "Join \"%s\"" : "Rejoindre \"%s\"", + "Meeting" : "Réunion", + "Password request: %s" : "Demande de mot de passe : %s", + "Private conversation" : "Conversation privée", + "Deleted user (%s)" : "Utilisateur supprimé (%s)", + "Failed to upload call recording" : "Le téléversement de l'enregistrement de l'appel a échoué", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Le serveur d'enregistrement n'a pas réussi à téléverser l'enregistrement de l'appel {call}. Veuillez contacter l'administrateur.", + "Share to chat" : "Partager pour discuter", + "Dismiss notification" : "Ignorer la notification", + "Call recording now available" : "Enregistrement de l'appel maintenant disponible", + "The recording for the call in {call} was uploaded to {file}." : "L'enregistrement de l'appel dans {call} a été téléversé vers {file}.", + "Transcript now available" : "Transcription maintenant disponible", + "The transcript for the call in {call} was uploaded to {file}." : "La transcription de l'appel {call} a été téléversé vers {file}.", + "Failed to transcript call recording" : "Impossible de transcrire l'enregistrement d'appel", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Le serveur n'est pas parvenu à transcrire l'enregistrement vers {file} pour l'appel {call}. Merci de contacter l'administrateur.", + "Call summary now available" : "Le résumé de l'appel est maintenant disponible", + "The summary for the call in {call} was uploaded to {file}." : "Le résumé de l'appel dans la conversation {call} a été téléversé dans {file}.", + "Failed to summarize call recording" : "Échec du résumé de l'enregistrement de l'appel", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Le serveur n'a pas réussi à résumer l'enregistrement dans {file} pour l'appel dans la conversation {call}. Merci de contacter l'administrateur.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vous a invité à rejoindre {roomName} sur {remoteServer}", + "Accept" : "Accepter", + "Decline" : "Décliner", + "{user1} invited you to a federated conversation" : "{user1} vous a invité dans une conversation fédérée", + "Someone reacted" : "Quelqu'un a réagi", + "New message" : "Nouveau message", + "Reminder" : "Rappel", + "Someone mentioned you" : "Quelqu'un vous a mentionné", + "Notification" : "Notification", + "Someone reacted in a private conversation" : "Quelqu'un a réagi dans une conversation privée", + "You received a message in a private conversation" : "Vous avez reçu un message dans une conversation privée", + "Reminder in a private conversation" : "Rappel dans une conversation privée", + "Someone mentioned you in a private conversation" : "Quelqu'un vous a mentionné dans une conversation privée", + "Notification in a private conversation" : "Notification dans une conversation privée", + "Reminder: You in {call}" : "Rappel : vous dans {call}", + "Reminder: {user} in {call}" : "Rappel : {user} dans {call}", + "Reminder: Deleted user in {call}" : "Rappel : utilisateur supprimé dans {call}", + "Reminder: {guest} (guest) in {call}" : "Rappel : {guest} (invité) dans {call}", + "Reminder: Guest in {call}" : "Rappel : invité dans {call}", + "{user} reacted with {reaction}" : "{user} a réagi avec {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a réagi avec {reaction} dans {call}", + "Deleted user reacted with {reaction} in {call}" : "Un utilisateur supprimé a réagi avec {reaction} dans {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (invité) a réagi avec {reaction} dans {call}", + "Guest reacted with {reaction} in {call}" : "Un invité a réagi avec {reaction} dans {call}", + "{user} in {call}" : "{user} dans {call}", + "Deleted user in {call}" : "Utilisateur supprimé dans {call}", + "{guest} (guest) in {call}" : "{guest} (invité) dans {call}", + "Guest in {call}" : "Invité dans {call}", + "{user} sent you a private message" : "{user} vous a envoyé un message privé", + "{user} sent a message in conversation {call}" : "{user} a envoyé un message dans la conversation {call}", + "A deleted user sent a message in conversation {call}" : "Un utilisateur (maintenant supprimé) a envoyé un message dans la conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) a publié un message dans la conversation {call}", + "A guest sent a message in conversation {call}" : "Un invité a envoyé un message dans la conversation {call}", + "{user} replied to your private message" : "{user} a répondu à votre message privé", + "{user} replied to your message in conversation {call}" : "{user} a répondu à votre message dans la conversation {call}", + "A deleted user replied to your message in conversation {call}" : "Un utilisateur supprimé a répondu à votre message dans la conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) a répondu à votre message dans la conversation {call}", + "A guest replied to your message in conversation {call}" : "Un invité a répondu à votre message dans la conversation {call}", + "Reminder: You in private conversation {call}" : "Rappel : vous dans la conversation privée {call}", + "Reminder: A deleted user in private conversation {call}" : "Rappel : un utilisateur supprimé dans la conversation privée {call}", + "Reminder: {user} in private conversation" : "Rappel : {user} dans une conversation privée", + "Reminder: You in conversation {call}" : "Rappel : vous dans la conversation {call}", + "Reminder: {user} in conversation {call}" : "Rappel : {user} dans la conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Rappel : un utilisateur supprimé dans la conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Rappel : {guest} (invité) dans la conversation {call}", + "Reminder: A guest in conversation {call}" : "Rappel : un invité dans la conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} a réagi avec {reaction} à votre message privé", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a réagi avec {reaction} à votre message dans la conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utilisateur supprimé a réagi avec {reaction} à votre message dans la conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (invité) a réagi avec {reaction} à votre message dans la conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un invité a réagi avec {reaction} à votre message dans la conversation {call}", + "{user} mentioned you in a private conversation" : "{user} vous a mentionné dans une conversation privée", + "{user} mentioned group {group} in conversation {call}" : "{user} a mentionné le groupe {group} dans la conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} a mentionné l'équipe {team} dans la conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} a mentionné tout le monde dans la conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} vous a mentionné dans la conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un utilisateur supprimé a mentionné le groupe {group} dans la conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un utilisateur supprimé a mentionné l'équipe {team} dans la conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un utilisateur supprimé a mentionné tout le monde dans la conversation {call}", + "A deleted user mentioned you in conversation {call}" : "Un utilisateur (maintenant supprimé) vous a mentionné dans la conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (invité) a mentionné le groupe {group} dans la conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (invité) a mentionné l'équipe {team} dans la conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (invité) a mentionné tout le monde dans la conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) vous a mentionné dans la conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "Un invité a mentionné le groupe {group} dans la conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "Un invité a mentionné l'équipe {team} dans la conversation {call}", + "A guest mentioned everyone in conversation {call}" : "Un invité a mentionné tout le monde dans la conversation {call}", + "A guest mentioned you in conversation {call}" : "Un invité vous a mentionné dans la conversation {call}", + "View message" : "Voir message", + "Dismiss reminder" : "Faire disparaître le rappel", + "View chat" : "Afficher la discussion", + "{user} invited you to a group conversation: {call}" : "{user} vous a invité dans une conversation de groupe : {call}", + "Join call" : "Rejoindre l'appel", + "Answer call" : "Répondre à l'appel", + "{user} would like to talk with you" : "{user} souhaite vous parler", + "Call back" : "Rappeler", + "You missed a call from {user}" : "Vous avez manqué l'appel de {user}", + "Accept call" : "Accepter l'appel", + "Incoming phone call from {call}" : "Appel téléphonique de {call}", + "You missed a phone call from {call}" : "Vous avez raté un appel téléphonique de {call}", + "A group call has started in {call}" : "Un appel de groupe a été lancé dans {call}", + "You missed a group call in {call}" : "Vous avez manqué l'appel de groupe {call}", + "{email} is requesting the password to access {file}" : "{email} demande le mot de passe pour accéder au fichier {file}", + "{email} tried to request the password to access {file}" : "{email} a essayé d'obtenir le mot de passe pour accéder au fichier {file}", + "Someone is requesting the password to access {file}" : "Quelqu'un demande le mot de passe pour accéder au fichier {file}", + "Someone tried to request the password to access {file}" : "Quelqu'un a essayé d'obtenir le mot de passe pour accéder au fichier {file}", + "Open settings" : "Ouvrir les paramètres", + "Hosted signaling server added" : "Le signaling server hébergé a été ajouté ", + "The hosted signaling server is now configured and will be used." : "Le serveur de signalement hébergé est maintenant configuré et sera utilisé.", + "Hosted signaling server removed" : "Le signaling server hébergé a été supprimé", + "The hosted signaling server was removed and will not be used anymore." : "Le serveur de signalement hébergé a été supprimé et ne sera plus utilisé.", + "Hosted signaling server changed" : "Le signaling server hébergé a changé", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Le compte du serveur de signalisation hébergé a changé le statut de \"{oldstatus}\" à \"{newstatus}\".", + "pending" : "en attente", + "active" : "actif", + "expired" : "expiré", + "blocked" : "bloqué", + "error" : "erreur", + "The certificate of {host} expires in {days} days" : "Le certificat de {host} expire dans {days} jours", + "The certificate of {host} expired" : "Le certificat de {host} a expiré", + "Contact via Talk" : "Contacter via Talk", + "Open Talk" : "Ouvrir Talk", + "Default" : "Par défaut", + "Presentation" : "Présentation", + "Voice room" : "Salon vocal", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages dans la conversation actuelle", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} dans {conversation}", + "Messages in other conversations" : "Messages dans les autres conversations", + "One-to-one rooms always need to show the other users avatar" : "Les conversations en tête à tête nécessitent l'affichage des avatars des autres utilisateurs", + "Invalid emoji character" : "Caractère emoji invalide", + "Invalid background color" : "Couleur de fond invalide", + "Avatar image is not square" : "L'image d'avatar n'est pas carré", + "Room {number}" : "Salle {number}", + "Other" : "Autre", + "Failed to request trial because the trial server is unreachable. Please try again later." : "La requête de période d'essai a échouée car le serveur d'essai est injoignable. Merci d'essayer plus tard. ", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Il y a un problème d'authentification de cette instance. Il est possible qu'elle ne soit pas accessible depuis l'extérieur pour vérifier son URL.", + "Something unexpected happened." : "Quelque chose d’inattendu est survenu.", + "The URL is invalid." : "L'adresse est invalide.", + "An HTTPS URL is required." : "Une adresse HTTPS est exigée.", + "The email address is invalid." : "L'adresse e-mail est invalide.", + "The language is invalid." : "La langue est invalide.", + "The country is invalid." : "Le pays est invalide.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Il y a un problème avec la requête de la période d'essai. Veuillez vérifier les logs pour de plus amples informations.", + "Too many requests are send from your servers address. Please try again later." : "Trop de requêtes ont été envoyées depuis l'adresse de votre serveur. Veuillez essayer plus tard.", + "There is already a trial registered for this Nextcloud instance." : "Il y a déjà un compte d'essai enregistré pour cette instance Nextcloud.", + "Something unexpected happened. Please try again later." : "Quelque chose d’inattendu est survenu. Veuillez essayer plus tard.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "La requête de période d'essai a échouée car le comportement du serveur d'essai a été inapproprié. Merci d'essayer plus tard. ", + "Trial requested but failed to get account information. Please check back later." : "La requête de période d'essai a été soumise mais n'a pas pu obtenir l'information sur le compte. Merci de vérifier à nouveau plus tard.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Il y a un problème d'authentification de cette requête. Il est possible qu'elle ne soit pas accessible depuis l'extérieur pour vérifier son URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "La récupération des informations du compte a échoué car le serveur d'essai se comporte étrangement. Veuillez essayer à nouveau plus tard.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Il y a un problème avec la récupération des informations du compte. Veuillez vérifier les logs pour de plus amples informations.", + "There is no such account registered." : "Il n'y a pas de tel compte enregistré.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "La récupération des informations du compte a échoué car le serveur d'essai est injoignable. Veuillez essayer à nouveau plus tard.", + "Deleting the hosted signaling server account failed. Please check back later." : "La suppression du compte du serveur de signal a échoué. Veuillez essayer à nouveau plus tard. ", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "La suppression du compte a échoué car le serveur d'essai se comporte étrangement. Veuillez essayer à nouveau plus tard.", + "There is a problem with deleting the account. Please check your logs for further information." : "Il y a un problème avec la suppression du compte. Veuillez vérifier les logs pour de plus amples informations.", + "Too many requests are sent from your servers address. Please try again later." : "Trop de requêtes sont envoyées depuis l'adresse de votre serveur. Veuillez réessayer plus tard.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "La suppression du compte a échoué car le serveur d'essai est injoignable. Veuillez essayer à nouveau plus tard.", + "Note to self" : "Note à soi-même", + "A place for your private notes, thoughts and ideas" : "Un endroit pour vos notes privées, vos pensées et vos idées", + "Transcript is AI generated and may contain mistakes" : "La retranscription est générée par une intelligence artificielle et peut contenir des erreurs", + "Summary is AI generated and may contain mistakes" : "Le résumé est généré par une intelligence artificielle et peut contenir des erreurs.", + "Let's get started!" : "Allons-y !", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** est une plateforme de communication sécurisé et auto-hébergée qui s'intègre complètement dans l'écosystème Nextcloud\n\n#### Fonctionnalités clés de Nextcloud Talk:\n\n* Chat et messagerie dans des groupes privés et publics\n* Appels audio et vidéo\n* Partage de fichiers et intégration avec d'autres applications Nextcloud\n* Paramètres de la conversation, modération et contrôle de la vie privée personnalisables\n* Client Web, de bureau et mobile (iOS et Android)\n* Communication sécurisée & privée\n\nPlus d'informations dans [la documentation utilisateur](https://docs.nextcloud.com/server/latest/user_manual/fr/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bienvenue dans Nextcloud Talk\n\nNextcloud Talk est une application de messagerie instantanée puissante et privée qui s'intègre dans Nextcloud. Discutez avec des groupes publics et privés, collaborez avec des appels audio et vidéo, organisez des webinaires et des événements, personnalisez vos conversations et plus encore.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formater vos textes pour créer des messages mis en forme\n\nDans Nextcloud Talk, vous pouvez utiliser la syntaxe Markdown pour formater vos messages. Par exemple, appliquer un formatage **gras** ou *italique*, ou `présentez le texte comme du code`. Vous pouvez même créer des tableaux et ajouter des titres à votre texte.\n\nBesoin de corriger une faute de frappe ou changer la mise en forme ? Éditez votre message en cliquant \"Éditer le message\" dans le menu contextuel du message.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Ajoutez des liens et des pièces jointes\n\nAjoutez des fichiers depuis votre espace Nextcloud en utilisant le bouton \"+\". Partagez des éléments depuis Fichiers et d'autres applications Nextcloud. Certaines applications supportent même l'intégration interactive, par exemple l'application Text", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Suivez le flux des conversations : mentionnez les utilisateurs, réagissez à leur message et plus encore\n\nVous pouvez mentionner tout le monde dans la conversation en utilisant %s ou mentionner des participants spécifiques en tapant \"@\" et en sélectionnant leur nom dans la liste.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Vous pouvez répondre aux messages, les transférer dans d'autres conversations et à d'autres personnes, ou copier le contenu d'un message.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faites-en encore plus avec le sélecteur intelligent\n\nTapez simplement \"/\" ou allez sur le menu \"+\" pour ouvrir le sélecteur intelligent où vous pouvez ajouter du contenu varié à vos messages. Vous pouvez configurer le sélecteur intelligent pour être capable d'ajouter des éléments d'autres applications Nextcloud, des GIFs, des cartes, du contenu généré par intelligence artificielle et bien d'autres encore.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gérer les paramètres de conversattion\n\nDans le menu de la conversation, vous pouvez accéder à différents paramètres pour gérer vos conversations, comme : \n* Éditer les infos de la conversation\n* Gérer les notifications\n* Appliquer des règles de modération\n* Configurer l'accès et la sécurité\n* Activer des robots de conversation\n* et plus encore !", + "Andorra" : "Andorre", + "United Arab Emirates" : "Émirats Arabes Unis", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua et Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanie", + "Armenia" : "Arménie", + "Angola" : "Angola", + "Antarctica" : "Antarctique", + "Argentina" : "Argentine", + "American Samoa" : "Samoa américaines", + "Austria" : "Autriche", + "Australia" : "Australie", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaïdjan", + "Bosnia and Herzegovina" : "Bosnie-Herzégovine", + "Barbados" : " La Barbade", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgique", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarie", + "Bahrain" : "Bahreïn", + "Burundi" : "Burundi", + "Benin" : "Bénin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : " Les Bermudes", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivie, État plurinational de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Saint-Eustache et Saba", + "Brazil" : "Brésil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhoutan", + "Bouvet Island" : "Île Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Biélorussie", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Îles Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, République Démocratique du", + "Central African Republic" : "République centrafricaine", + "Congo" : "Congo", + "Switzerland" : "Suisse", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Îles Cook", + "Chile" : "Chili", + "Cameroon" : "Cameroun", + "China" : "Chine", + "Colombia" : "Colombie", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cap-Vert", + "Curaçao" : "Curaçao", + "Christmas Island" : "Île Christmas", + "Cyprus" : "Chypre", + "Czechia" : "République tchèque", + "Germany" : "Allemagne", + "Djibouti" : "Djibouti", + "Denmark" : "Danemark", + "Dominica" : "Dominique", + "Dominican Republic" : "République Dominicaine", + "Algeria" : "Algérie", + "Ecuador" : "Équateur", + "Estonia" : "Estonie", + "Egypt" : "Égypte", + "Western Sahara" : "Sahara occidental", + "Eritrea" : "Érythrée", + "Spain" : "Espagne", + "Ethiopia" : "Éthiopie", + "Finland" : "Finlande", + "Fiji" : "Fidji", + "Falkland Islands (Malvinas)" : "Îles Malouines (ou Falkland)", + "Micronesia, Federated States of" : "Micronésie, États fédérés de", + "Faroe Islands" : "Îles Féroé", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Royaume-Uni", + "Grenada" : "Grenade", + "Georgia" : "Géorgie", + "French Guiana" : "Guyane française", + "Guernsey" : "Guernesey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambie", + "Guinea" : "Guinée", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinée Équatoriale", + "Greece" : "Grèce", + "South Georgia and the South Sandwich Islands" : "Géorgie du Sud et les îles Sandwich du Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinée-Bissau", + "Guyana" : "Guyane", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Îles Heard-et-MacDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatie", + "Haiti" : "Haïti", + "Hungary" : "Hongrie", + "Indonesia" : "Indonésie", + "Ireland" : "Irlande", + "Israel" : "Israël", + "Isle of Man" : "Île de Man", + "India" : "Inde", + "British Indian Ocean Territory" : "Territoire britannique de l'océan Indien", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, République islamique d'", + "Iceland" : "Islande", + "Italy" : "Italie", + "Jersey" : "Jersey", + "Jamaica" : "Jamaïque", + "Jordan" : "Jordanie", + "Japan" : "Japon", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirghizstan", + "Cambodia" : "Cambodge", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "Saint-Christophe-et-Niévès", + "Korea, Democratic People's Republic of" : "Corée du Nord, République populaire et démocratique de", + "Korea, Republic of" : "Corée, République de", + "Kuwait" : "Koweït", + "Cayman Islands" : "Îles Caïmans", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos, République démocratique populaire du", + "Lebanon" : "Liban", + "Saint Lucia" : "Sainte-Lucie", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituanie", + "Luxembourg" : "Luxembourg", + "Latvia" : "Lettonie", + "Libya" : "Libye", + "Morocco" : "Maroc", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavie, République de", + "Montenegro" : "Monténégro", + "Saint Martin (French part)" : "Saint Martin (Partie française)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Îles Marshall", + "North Macedonia" : "Macédoine du Nord", + "Mali" : "Mali", + "Myanmar" : "Birmanie", + "Mongolia" : "Mongolie", + "Macao" : "Macao", + "Northern Mariana Islands" : "Îles Mariannes du Nord", + "Martinique" : "Martinique", + "Mauritania" : "Mauritanie", + "Montserrat" : "Montserrat", + "Malta" : "Malte", + "Mauritius" : "Île Maurice", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexique", + "Malaysia" : "Malaisie", + "Mozambique" : "Mozambique", + "Namibia" : "Namibie", + "New Caledonia" : "Nouvelle-Calédonie", + "Niger" : "Niger", + "Norfolk Island" : "Île Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Pays-Bas", + "Norway" : "Norvège", + "Nepal" : "Népal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nouvelle-Zélande", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Pérou", + "French Polynesia" : "Polynésie française", + "Papua New Guinea" : "Papouasie-Nouvelle-Guinée", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Pologne", + "Saint Pierre and Miquelon" : "Saint Pierre et Miquelon", + "Pitcairn" : "Île Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestine, État de", + "Portugal" : "Portugal", + "Palau" : "Palaos", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Roumanie", + "Serbia" : "Serbie", + "Russian Federation" : "Russie, Fédération de", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabie Saoudite", + "Solomon Islands" : "Îles Salomon", + "Seychelles" : "Seychelles", + "Sudan" : "Soudan", + "Sweden" : "Suède", + "Singapore" : "Singapour", + "Saint Helena, Ascension and Tristan da Cunha" : "Sainte-Hélène, Ascension et Tristan da Cunha", + "Slovenia" : "Slovénie", + "Svalbard and Jan Mayen" : "Svalbard et Jan Mayen", + "Slovakia" : "Slovaquie", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Saint Marin", + "Senegal" : "Sénégal", + "Somalia" : "Somalie", + "Suriname" : "Suriname", + "South Sudan" : "Soudan du Sud", + "Sao Tome and Principe" : "Sao Tomé-et-Principe", + "El Salvador" : "Salvador", + "Sint Maarten (Dutch part)" : "Saint Martin (Partie néerlandaise)", + "Syrian Arab Republic" : "Syrie, République Arabe Syrienne", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Îles Turques-et-Caïques", + "Chad" : "Tchad", + "French Southern Territories" : "Terres australes et antarctiques françaises", + "Togo" : "Togo", + "Thailand" : "Thaïlande", + "Tajikistan" : "Tadjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor oriental", + "Turkmenistan" : "Turkménistan", + "Tunisia" : "Tunisie", + "Tonga" : "Tonga", + "Turkey" : "Turquie", + "Trinidad and Tobago" : "Trinité-et-Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taïwan, Province de Chine", + "Tanzania, United Republic of" : "Tanzanie, République unie de", + "Ukraine" : "Ukraine", + "Uganda" : "Ouganda", + "United States Minor Outlying Islands" : "Îles mineures éloignées des États-Unis", + "United States of America" : "États-Unis d'Amérique", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Ouzbékistan", + "Holy See" : "Vatican", + "Saint Vincent and the Grenadines" : "Saint Vincent et les Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, République bolivarienne du", + "Virgin Islands, British" : "Îles Vierges britanniques", + "Virgin Islands, U.S." : "Îles Vierges des États-Unis", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis et Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yémen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrique du Sud", + "Zambia" : "Zambie", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Flou d'arrière-plan", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Impossible de vérifier la prise en charge du chargement WASM. Veuillez vérifier manuellement si votre serveur Web sert des fichiers `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Votre serveur Web n'est pas correctement configuré pour fournir les fichiers `.wasm`. Il s'agit généralement d'un problème lié à la configuration de Nginx. Pour le flou d'arrière-plan, un ajustement est nécessaire pour fournir également les fichiers `.wasm`. Comparez votre configuration Nginx à la configuration recommandée dans notre documentation.", + "Talk configuration values" : "Valeurs de configuration de Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Le forçage d'une durée d'appel n'est pris en charge qu'avec le système cron. Veuillez activer le système cron ou supprimer la configuration `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Les petites valeurs `max_call_duration` (actuellement définies sur %d) ne sont pas applicables en raison de limitations techniques. La tâche en arrière-plan n'est exécutée que toutes les 5 minutes, utilisez-la donc à vos risques et périls.", + "Federation" : "Fédération", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Il est fortement recommandé de configurer \"memcache.locking\" lorsque Talk Federation est activé.", + "High-performance backend" : "Infrastructure de haute performance", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Aucun serveur haute performance configuré - Utiliser Nextcloud Talk sans serveur haute performance n'est possible que pour les appels limités à quelques personnes (maximum 2-3 participants). Merci de configurer un serveur haute performance pour permettre des appels entre de multiples participants sans ralentissements.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'exécution du mode \"conversation_cluster\" du backend hautes performances est obsolète et ne sera plus prise en charge dans la prochaine version. Le backend hautes performances prend désormais en charge le clustering réel, qui devrait être utilisé à la place.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La définition de plusieurs backends hautes performances est obsolète et ne sera plus prise en charge dans la prochaine version. À la place, un équilibreur de charge doit être configuré avec des serveurs de signalisation en cluster et configuré dans les paramètres Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La clé publique utilisée par l’algorithme %1$s ne correspond pas avec la clé privée enregistrée. Exécutez %2$s pour corriger le problème.", + "High-performance backend not configured correctly. Run %s for details." : "Le serveur Haute Performance n'est pas configuré correctement. Lancez %s pour plus de détails.", + "High-performance backend not configured correctly" : "Serveur haute-performance non correctement configuré", + "Error: Cannot connect to server" : "Erreur : impossible de se connecter au serveur", + "Error: Server did not respond with proper JSON" : "Erreur: Le serveur n'a pas répondu avec un JSON correct", + "Error: Certificate expired" : "Erreur : Certificat expiré", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erreur : les horloges du serveur Nextcloud et du serveur haute performance sont désynchronisées. Merci de vous assurer que les deux serveurs sont connectés à un serveur de temps ou synchronisez manuellement leurs horloges.", + "Could not get version" : "Impossible d'obtenir la version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erreur : version en cours {version} ; le serveur a besoin d'être mis à jour pour être compatible avec cette version de Talk", + "Error: Server responded with: {error}" : "Erreur: Le serveur a répondu avec: {error}", + "Error: Unknown error occurred" : "Erreur: Une erreur inconnue est survenue", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Attention : version actuelle : {version}; Le serveur ne supporte pas toutes les fonctionnalités de cette version de Talk , fonctionnalités manquantes : {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Il est fortement recommandé de configurer un cache mémoire lors de l'exécution de Nextcloud Talk avec un backend haute performance.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push est installé, cela améliore la ponctualité des notifications Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} n'est pas installé. Cela peut entraîner un retard dans les notifications Talk.", + "Recording backend" : "Moteur d'enregistrement", + "Using the recording backend requires a High-performance backend." : "L'utilisation d'un serveur d'enregistrement nécessite un serveur haute-performance.", + "No recording backend configured" : "Aucun serveur d'enregistrement configuré", + "SIP configuration" : "Configuration SIP", + "Using the SIP functionality requires a High-performance backend." : "L'utilisation de la fonctionnalité SIP nécessite un backend de hautes performances.", + "No SIP backend configured" : "Aucun serveur SIP configuré", + "Invalid date, date format must be YYYY-MM-DD" : "Date invalide, le format de date doit être YYYY-MM-DD", + "Conversation not found" : "Discussion non trouvée", + "Path is already shared with this conversation" : "Le chemin est déjà partagé avec cette conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, conférence vidéo et audio utilisant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Discussions instantanées, vidéo et audioconférence utilisant WebRTC\n\n* 💬 **Discussions instantanées** Nextcloud Talk est livré avec un simple chat texte, vous permettant de partager ou de téléverser des fichiers depuis votre application Nextcloud Fichiers ou votre appareil local et de mentionner d’autres participants.\n* 👥 **Appels privés, de groupe, publics et protégés par mot de passe !** Invitez quelqu’un, un groupe entier ou envoyez un lien public pour inviter à un appel.\n* 🌐 ''Discussions instantanées fédérées** Discutez avec d’autres utilisateurs Nextcloud sur leurs serveurs\n* 💻 **Partage d’écran !** Partagez votre écran avec les participants de votre appel.\n* 🚀 **Intégration avec d’autres applications Nextcloud comme Fichiers, Agenda, Statut utilisateur, Tableau de bord, Flux, Cartes, Sélecteur intelligent, Contacts, Deck et bien d’autres encore.\n* 🌉 **Synchronisation avec d’autres solutions de discussions instantanées** Avec [Matterbridge](https://github.com/42wim/matterbridge/) intégré à Talk, vous pouvez facilement synchroniser de nombreuses autres solutions de chat avec Nextcloud Talk et vice-versa.", + "Leave call" : "Quitter l'appel", + "Navigating away from the page will leave the call in {conversation}" : "En quittant cette page, vous quitterez l'appel dans {conversation}", + "Stay in call" : "Rester en ligne", + "Error occurred when getting the conversation information" : "Une erreur est survenue lors de la récupération des informations de la conversation", + "Discuss this file" : "Discuter de ce fichier", + "Share this file with others to discuss it" : "Partagez ce fichier avec d'autres personnes pour en discuter", + "Share this file" : "Partager ce fichier", + "Join conversation" : "Rejoindre la conversation", + "This conversation is password-protected." : "Cette conversation est protégée par un mot de passe", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Nous avons détecté plusieurs tentatives de connexion invalides depuis votre adresse IP. Par conséquent, votre prochain tentative de connexion sera retardée de 30 secondes.", + "The password is wrong. Try again." : "Le mot de passe est incorrect. Veuillez réessayer.", + "Password" : "Mot de passe", + "Submit" : "Soumettre", + "Error requesting the password." : "Erreur lors de la demande du mot de passe", + "Request password" : "Demande de mot de passe", + "This conversation has ended" : "Cette conversation a pris fin", + "Error occurred when joining the conversation" : "Une erreur est survenue au moment de rejoindre la conversation", + "Close Talk sidebar" : "Fermer le panneau latéral de Talk", + "Open Talk sidebar" : "Ouvrir le panneau latéral de Talk", + "Everyone" : "Tout le monde", + "Users and moderators" : "Utilisateurs et modérateurs", + "Moderators only" : "Seulement les modérateurs", + "Disable calls" : "Désactiver les appels", + "Save changes" : "Enregistrer les modifications", + "Saving …" : "Enregistrement...", + "Saved!" : "Enregistré !", + "Limit to groups" : "Limiter à des groupes", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Lorsqu'au moins un groupe est sélectionné, seules les personnes des groupes répertoriés peuvent participer aux conversations.", + "Guests can still join public conversations." : "Les invités peuvent toujours rejoindre les conversations publiques.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Les utilisateurs qui ne peuvent plus utiliser Talk seront toujours listés comme participants dans leur précédentes conversations et leurs messages instantanés seront conservés.", + "Limit using Talk" : "Limiter l'utilisation de Talk", + "Limit creating a public and group conversation" : "Limiter la création de conversation publique et de groupe", + "Limit creating conversations" : "Limiter la création de conversations", + "Limit starting a call" : "Limiter le lancement d'appel", + "Limit starting calls" : "Limiter le lancement des appels", + "When a call has started, everyone with access to the conversation can join the call." : "Lorsqu'un appel a commencé, toutes les personnes ayant accès à la conversation peuvent se joindre à l'appel.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Les robots suivants sont installés sur ce serveur. Dans la documentation vous pouvez trouver comment {linkstart1}construire votre propre robot{linkend} ou une {linkstart2}liste de robots{linkend} à activer sur votre serveur.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Aucun robot n'est installé sur ce serveur. Dans la documentation vous pouvez trouver comment {linkstart1}créer votre propre robot{linkend} ou une {linkstart2}liste de robots{linkend} à activer sur votre serveur.", + "Description is not provided" : "Description non fournie", + "Locked for moderators" : "Verrouillé pour les modérateurs", + "Enabled" : "Activé", + "Disabled" : "Désactivé", + "Bots settings" : "Paramètres des robots", + "State" : "État", + "Name" : "Nom", + "Last error" : "Dernière erreur", + "Total errors count" : "Nombre total d'erreurs", + "Find more bots" : "Chercher d'autres robots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Les serveurs de confiance peuvent être configurés sur la {linkstart}page des paramètres de partage{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Les discussions et les appels fédérés fonctionnent déjà. La gestion des pièces jointes sera disponible dans une future version.", + "Enable Federation in Talk app" : "Activer Fédération dans l'app Talk", + "Permissions" : "Permissions", + "Allow users to be invited to federated conversations" : "Autoriser les utilisateurs à être invité dans des conversations fédérées", + "Allow users to invite federated users into conversation" : "Autoriser les utilisateurs à inviter des utilisateurs fédérées dans la conversation", + "Only allow to federate with trusted servers" : "N'autoriser la fédération qu'avec les serveurs de confiance", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Lorsqu'au moins un groupe est sélectionné, seules les personnes des groupes répertoriés peuvent inviter des utilisateurs fédérés aux conversations.", + "Groups allowed to invite federated users" : "Groupes autorisés à inviter des utilisateurs fédérés", + "Select groups …" : "Sélectionner les groupes...", + "All messages" : "Tous les messages", + "@-mentions only" : "Seulement les mentions @", + "Off" : "Désactiver", + "General settings" : "Paramètres généraux", + "Default notification settings" : "Paramètres de notification par défaut", + "Default group notification" : "Notification de groupe par défaut", + "Default group notification for new groups" : "Notification de groupe par défaut pour les nouveaux groupes", + "Integration into other apps" : "Intégration dans d'autres applications", + "Allow conversations on files" : "Autoriser les conversations sur les fichiers", + "Allow conversations on public shares for files" : "Autoriser les conversations sur les partages publics pour les fichiers", + "End-to-end encrypted calls" : "Appels chiffrés de bout en bout", + "Enable encryption" : "Activer le chiffrement", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Les appels chiffrés de bout en bout avec une passerelle SIP nécessitent une nouvelle version du serveur haute-performance et de la passerelle SIP", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Les clients mobiles ne supportent pas les appels chiffrés de bout en bout pour le moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "En cliquant sur le bouton ci-dessus, les informations dans le formulaire sont envoyées aux serveurs de Struktur AG. Vous pouvez trouver plus d'informations ici : {linkstart}spreed.eu{linkend}.", + "Pending" : "En attente", + "Error" : "Erreur", + "Blocked" : "Bloqué", + "Active" : "Actif", + "Expired" : "Expiré", + "Never" : "Jamais", + "The trial could not be requested. Please try again later." : "La période d'essai n'a pas pu être demandé. Veuillez réessayer plus tard.", + "The account could not be deleted. Please try again later." : "Le compte n'a pas pu être supprimé. Veuillez réessayer plus tard.", + "Hosted High-performance backend" : "Serveur haute performance hébergé", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Notre partenaire Struktur AG fournit un service dans lequel un serveur de signalisation hébergé peut être demandé. Pour cela il vous suffit de renseigner le formulaire ci-dessous et votre Nextcloud le demandera. Une fois le serveur configuré pour vous les identifiants seront automatiquement renseignés. Ceci écrasera les actuels réglages du serveur de signalement.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Si votre compte backend haute performance inclut les fonctionnalités STUN et/ou TURN, les paramètres seront mis à jour en conséquence.", + "URL of this Nextcloud instance" : "URL de cette instance Nextcloud", + "Full name of the user requesting the trial" : "Nom complet de l'utilisateur qui demande la période d'essai", + "Email of the user" : "E-mail de l'utilisateur", + "Language" : "Langue", + "Country" : "Pays", + "Request signaling server trial" : "Demande de période d'essai pour un serveur de signalement", + "You can see the current status of your hosted signaling server in the following table." : "Vous pouvez voir le statut actuel de votre serveur de signalement hébergé dans le tableau suivant.", + "Status" : "État", + "Created at" : "Créé le", + "Expires at" : "Expire à", + "Limits" : "Limites", + "STUN included" : "STUN inclus", + "Yes" : "Oui", + "No" : "Non", + "TURN included" : "TURN inclus", + "Delete the signaling server account" : "Supprimer le compte de serveur de signalisation", + "_%n user_::_%n users_" : ["%n utilisateur","%n utilisateurs","%n utilisateurs"], + "Installed version: {version}" : "Version installée : {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Vous pouvez installer Matterbridge pour relier Nextcloud Talk à d'autres services, visiter leur {linkstart1}page GitHub{linkend} pour plus de détails. Télécharger et installer l'application peut prendre un certain temps. Si cela échoue, merci de l'installer manuellement depuis le {linkstart2}magasin d'applications Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Le binaire Matterbridge a des permissions incorrectes. Merci de vous assurer que le binaire Matterbridge appartient au bon utilisateur et qu'il peut être exécuté. Il peut être trouvé dans \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Le binaire Matterbridge est introuvable ou n'a pas pu être exécuté.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Vous pouvez aussi définir le chemin vers le binaire Matterbridge manuellement via les options. Consultez la {linkstart}documentation d'intégration Matterbridge{linkend} pour plus d'information.", + "Downloading …" : "Téléchargement …", + "Install Talk Matterbridge" : "Installer Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Une erreur est survenue lors de l'installation de l'application Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Une erreur est survenue lors de l'installation de Talk Matterbridge. Veuillez l'installer manuellement.", + "Failed to execute Matterbridge binary." : "Impossible d'exécuter le binaire Matterbridge.", + "Matterbridge integration" : "Intégration de Matterbridge", + "Enable Matterbridge integration" : "Activer l'intégration de Matterbridge", + "Status: Checking connection" : "Statut : vérification de la connexion...", + "OK: Running version: {version}" : "OK : version actuelle : {version}", + "Error: Server seems to be a Signaling server" : "Erreur : le serveur semble être un serveur de signalement", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erreur : les horloges du serveur Nextcloud et du serveur d'enregistrement sont désynchronisées. Merci de vous assurer que les deux serveurs sont connectés à un serveur de temps ou synchronisez manuellement leurs horloges.", + "Recording backend URL" : "URL du moteur d'enregistrement", + "Validate SSL certificate" : "Valider le certificat SSL", + "Delete this server" : "Supprimer ce serveur", + "Test this server" : "Tester ce serveur", + "Disabled for all calls" : "Désactivé pour tous les appels", + "Enabled for all calls" : "Activé pour tous les appels", + "Configurable on conversation level by moderators" : "Configuration au niveau de la conversation par les modérateurs", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Les paramètres PHP \"upload_max_filesize\" ou \"post_max_size\" permettront de ne téléverser que des fichiers jusqu'à {maxUpload}.", + "Recording backend settings saved" : "Paramètres du moteur d'enregistrement enregistrés", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Les modérateurs seront autorisés à activer le consentement au niveau de la conversation. Le consentement à être enregistré sera exigé pour chaque participant avant de rejoindre n'importe quel appel dans cette conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "Le consentement à être enregistré sera exigé pour chaque participant avant de rejoindre n'importe quel appel.", + "The consent to be recorded is not required." : "Le consentement à être enregistré n'est pas exigé.", + "Recording backend configuration is only possible with a High-performance backend." : "La configuration d'un serveur d'enregistrement est possible seulement avec un serveur haute performance.", + "Add a new recording backend server" : "Ajouter un nouveau moteur d'enregistrement", + "Shared secret" : "Secret partagé", + "Recording consent" : "Consentement à l'enregistrement", + "Recording transcription" : "Enregistrement de la transcription", + "Automatically transcribe call recordings with a transcription provider" : "Transcrire automatiquement les enregistrements avec un fournisseur de transcription", + "Automatically summarize call recordings with transcription and summary providers" : "Résumer automatiquement les enregistrements avec des fournisseurs de résumé et de transcription", + "SIP configuration saved!" : "Configuration SIP sauvegardée !", + "SIP configuration is only possible with a High-performance backend." : "La configuration SIP n'est possible qu'avec un serveur haute performance.", + "Enable SIP Dial-out option" : "Activer l'option de composition SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Le serveur de signalement doit être mis à jour pour supporter la fonctionnalité de composition SIP", + "Do not show SIP Dial-out caller number" : "Ne pas afficher le numéro de l'appelant SIP sortant", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Le numéro anonyme doit apparaître comme \"inconnu\" ou \"numéro masqué\" pour appeler le destinataire.", + "Dial-out number" : "Numéro sortant", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numéro au format E164 utilisé comme numéro d'appelant de secours pour les appels sortants", + "Dial-out prefix" : "Préfixe de numérotation sortante", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Préfixe ajouté au numéro d'utilisateur configuré pour les appels sortants (la valeur par défaut est \"+\")", + "Restrict SIP configuration" : "Restreindre la configuration SIP", + "Enable SIP configuration" : "Activer la configuration SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Seuls les utilisateurs des groupes suivants peuvent activer SIP dans les conversations dont ils sont modérateurs", + "Phone number (Country)" : "Numéro de téléphone (pays)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Cette information est présente dans les e-mails d'invitation et affichée à tous les participants dans le panneau latéral.", + "Nextcloud base URL" : "URL de base de Nextcloud", + "Talk Backend URL" : "URL du serveur Talk", + "WebSocket URL" : "URL de la WebSocket", + "Available features" : "Fonctionnalités disponibles", + "Error: Websocket connection failed" : "Erreur : Connexion Websocket échouée", + "Error code" : "Code d'erreur", + "Error message" : "Message d'erreur", + "Error: Websocket connection failed. Check browser console" : "Erreur : La connexion à la WebSocket a échoué. Vérifier la console web.", + "High-performance backend URL" : "URL vers l'infrastructure de haute performance", + "Missing High-performance backend warning hidden" : "Avertissement sur l'absence de serveur haute performance caché", + "High-performance backend settings saved" : "Paramètres du serveur haute performance sauvegardés", + "Nextcloud Talk setup not complete" : "La configuration de Nextcloud Talk n'est pas terminée", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Merci de noter que lors des appels avec plus de 2 participants sans le serveur haute performance, les participants vont vraisemblablement subir des latences et leurs appareils une charge importante.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installer le serveur haute performance pour que les appels avec de multiples participants fonctionnent sans ralentissement.", + "Nextcloud portal" : "Portail Nextcloud", + "Quick installation guide" : "Guide d'installation rapide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Un serveur haute performance est requis pour les appels et conversations avec de multiples participants. Sans ce serveur, tous les participants doivent envoyer leur propre vidéo à tous les autres participants, ce qui causera probablement des problèmes de latence et une charge importante sur les appareils des participants.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Il est hautement recommandé de configurer un cache distribué quand vous utilisez Nextcloud Talk avec un serveur haute performance.", + "Add High-performance backend server" : "Ajouter un serveur haute performance", + "Warn about connectivity issues in calls with more than 2 participants" : "Avertir à propos des problèmes de connectivité dans les appels avec plus de 2 participants", + "STUN server URL" : "URL du serveur STUN", + "The server address is invalid" : "L'adresse du serveur est invalide", + "STUN settings saved" : "Paramètres STUN sauvegardés", + "STUN servers" : "Serveurs STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un serveur STUN est utilisé pour déterminer l'adresse publique des participants situés derrière un routeur.", + "Add a new STUN server" : "Ajouter un nouveau serveur STUN", + "{schema} scheme must be used with a domain" : "Le schéma {schema} doit être utilisé avec un domaine", + "{option1} and {option2}" : "{option1} et {option2}", + "{option} only" : "{option} seulement", + "OK: Successful ICE candidates returned by the TURN server" : "OK : Le serveur TURN a retourné des candidats ICE avec succès", + "Error: No working ICE candidates returned by the TURN server" : "Erreur : Le serveur TURN n'a pas retourné de candidats ICE fonctionnels", + "Testing whether the TURN server returns ICE candidates" : "En cours de test du retour de candidats ICE par le serveur TURN", + "TURN server schemes" : "Schémas du serveur TURN", + "TURN server URL" : "URL du serveur TURN", + "TURN server secret" : "Mot de passe du serveur TURN", + "TURN server protocols" : "Protocoles du serveur TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un serveur TURN est utilisé comme proxy pour les participants derrière un parefeu. Si des participants ne peuvent pas se connecter avec les autres, un serveur TURN est très probablement nécessaire. Consultez {linkstart}cette documentation{linkend} pour les instructions de configuration.", + "TURN settings saved" : "Paramètres TURN sauvegardés", + "TURN servers" : "Serveurs TURN", + "Add a new TURN server" : "Ajouter un nouveau serveur TURN", + "Failed" : "Échec", + "OK" : "OK", + "Checking …" : "Vérification...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Échec : WebAssembly est désactivé ou n'est pas supporté dans ce navigateur. Merci d'activer WebAssembly ou d'utiliser un navigateur compatible pour lancer la vérification.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Échec : les fichiers « .wasm » et « .tflite » ne sont pas traités correctement par le serveur web. Merci de vérifier la section « Pré-requis techniques » de la documentation de Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK : les fichiers \".wasm\" et \".tflite\" ont été correctement renvoyés par le serveur web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Il semble que la configuration Apache et PHP n'est pas compatible. Veuillez noter que PHP peut seulement être utilisé avec le module MPM_PREFORK et PHP-FPM peut seulement être utilisé avec le module MPM_EVENT", + "Web server setup checks" : "Vérification de la configuration du serveur web", + "Files required for virtual background can be loaded" : "Les fichiers nécessaires à l'arrière-plan virtuel peuvent être chargés", + "Federated user" : "Utilisateur fédéré", + "Assign participants to rooms" : "Assigner les participants aux salles", + "Configure breakout rooms" : "Configurer les salles de sous-groupes", + "Number of breakout rooms" : "Nombre de salles de sous-groupes", + "You can create from 1 to 20 breakout rooms." : "Vous pouvez créer entre 1 et 20 salles de discussion.", + "Assignment method" : "Méthode d'affectation", + "Automatically assign participants" : "Assigner automatiquement les participants", + "Manually assign participants" : "Assigner manuellement les participants", + "Allow participants to choose" : "Autoriser les participants à choisir", + "Create rooms" : "Créer une salle", + "Confirm" : "Confirmer", + "Create breakout rooms" : "Créer des salles de sous-groupes", + "Reset" : "Réinitialiser", + "Delete breakout rooms" : "Supprimer les salles de sous-groupes", + "Room {roomNumber}" : "Salle {roomNumber}", + "Current breakout rooms and settings will be lost" : "Les salles de sous-groupes actuelles et leurs paramètres seront perdus", + "Cancel" : "Annuler", + "Unassigned participants" : "Participants non attribués", + "Back" : "Retour", + "Assign" : "Attribuer", + "Add participant \"{user}\"" : "Ajouter le participant \"{user}\"", + "Now" : "Maintenant", + "Invalid calendar selected" : "Calendrier sélectionné invalide", + "Invalid start time selected" : "Date de début sélectionnée invalide", + "Invalid end time selected" : "Date de fin sélectionnée invalide", + "Unknown error occurred" : "Une erreur inconnue est survenue", + "Sending no invitations" : "Envoi d'aucune invitation", + "{participant0} will receive an invitation" : "{participant0} va recevoir une invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} et {participant1} vont recevoir une invitation", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} et %n autre vont recevoir des invitations","{participant0}, {participant1} et %n autres vont recevoir des invitations","{participant0}, {participant1} et %n autres vont recevoir des invitations"], + "Invite {user}" : "Inviter {user}", + "Invite all users and emails in this conversation" : "Inviter tous les utilisateurs et emails de cette conversation", + "Meeting created" : "Réunion créée", + "Upcoming meetings" : "Réunions à venir", + "Loading …" : "Chargement…", + "No upcoming meetings" : "Pas de réunion à venir", + "Schedule a meeting" : "Planifier une réunion", + "Meeting title" : "Objet de la réunion", + "From" : "De", + "To" : "À", + "Calendar" : "Agenda", + "Attendees" : "Participants", + "No other participants to send invitations to." : "Pas d'autres participants à qui envoyer des invitations.", + "Add attendees" : "Ajouter des participants", + "Save" : "Enregistrer", + "Search participants" : "Rechercher les participants", + "No results" : "Aucun résultat", + "Done" : "Fait", + "Disable live transcription" : "Désactiver la transcription en direct", + "Disable live translation" : "Désactiver la traduction en direct", + "Original language: {languageName}" : "Langue d'origine : {languageName}", + "Translated language" : "Langue traduite", + "Translated language: {languageName}" : "Langue traduite : {languageName}", + "Raise hand" : "Lever la main", + "Raise hand (R)" : "Lever la main (R)", + "Lower hand" : "Baisser la main", + "Lower hand (R)" : "Baisser la main (R)", + "Exit full screen (F)" : "Quitter le mode plein écran (F)", + "Full screen (F)" : "Mode plein écran (F)", + "Speaker view" : "Vue intervenant", + "Grid view" : "Vue en grille", + "Error when trying to load the available live transcription languages" : "Erreur lors du chargement des langues disponibles pour la transcription en direct", + "Failed to enable live transcription" : "Échec de l'activation de la transcription en direct", + "Failed to enable live translations" : "Échec de l'activation des traductions en direct", + "Failed to disable live translations" : "Échec de la désactivation des traductions en direct", + "Recording consent is required" : "Le consentement à l'enregistrement est requis", + "This conversation is read-only" : "Cette conversation est en lecture seule", + "Conversation not found or not joined" : "Conversation introuvable ou non jointe", + "Lobby is still active and you're not a moderator" : "La salle d'attente est toujours active et vous n'êtes pas modérateur", + "Connection failed" : "Échec de la connexion", + "Reload" : "Recharger", + "{nickName} raised their hand." : "{nickName} a levé la main.", + "A participant raised their hand." : "Un participant a levé la main.", + "Collapse stripe" : "Réduire le bandeau", + "Expand stripe" : "Étendre le bandeau", + "Previous page of videos" : "Page précédente de vidéos", + "Next page of videos" : "Page suivante de vidéos", + "Connecting …" : "Connexion …", + "Calling …" : "Appel en cours...", + "Waiting for {user} to join the call" : "En attente de l'arrivée de {user}", + "Waiting for others to join the call …" : "En attente que les autres rejoignent l'appel…", + "You can invite others in the participant tab of the sidebar" : "Vous pouvez inviter d'autres personnes dans l'onglet des participants du panneau latéral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Vous pouvez inviter d'autres personnes dans l'onglet des participants du panneau latéral ou partager ce lien pour inviter d'autres personnes !", + "Share this link to invite others!" : "Partagez ce lien pour inviter les autres !", + "Copy link" : "Copier le lien", + "You are not allowed to enable audio" : "Vous n'êtes pas autorisé à activer l'audio", + "No audio. Click to select device" : "Pas d'audio. Cliquez pour sélectionner le périphérique", + "Mute audio" : "Couper le son", + "Mute audio (M)" : "Couper le son (M)", + "Unmute audio" : "Activer le son", + "Unmute audio (M)" : "Activer le son (M)", + "None" : "Aucun", + "Select a microphone" : "Sélectionner un microphone", + "Select a speaker" : "Sélectionner un haut-parleur", + "Microphone settings" : "Réglages du microphone", + "Check devices" : "Vérifier les périphériques", + "Access to camera was denied" : "L'accès à la caméra a été refusé", + "Error while accessing camera: It is likely in use by another program" : "Erreur en essayant d'accéder à la caméra : elle est probablement utilisée par un autre programme", + "Error while accessing camera" : "Erreur en accédant à la caméra", + "You have been muted by a moderator" : "Vous avez été rendu·e muet par un modérateur. ", + "Hide presenter video" : "Masquer la vidéo du présentateur", + "You are not allowed to enable video" : "Vous n'êtes pas autorisé à activer la vidéo", + "No video. Click to select device" : "Pas d'audio. Cliquez pour sélectionner le périphérique", + "Disable video" : "Désactiver la vidéo", + "Disable video (V)" : "Désactiver la vidéo (V)", + "Enable video" : "Activer la vidéo", + "Enable video (V)" : "Activer la vidéo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo. Votre connexion va être brièvement interrompue lors de l'activation de la vidéo pour la première fois", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo (V) - La conversation est brièvement interrompue lorsque vous activez la vidéo pour la première fois.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activer la vidéo. Votre connexion sera brièvement interrompue lorsque vous activez la vidéo pour la première fois.", + "Select a video device" : "Sélectionner une caméra", + "Show presenter" : "Afficher le présentateur", + "You" : "Vous", + "Mute" : "Mettre en sourdine", + "Muted" : "Mis en sourdine", + "Show screen" : "Afficher l'écran", + "Stop following" : "Arrêter de suivre", + "Connection could not be established …" : "La connexion n'a pas pu être établie...", + "Connection was lost and could not be re-established …" : "La connexion a été perdue et n'a pas pu être rétablie...", + "Connection could not be established. Trying again …" : "La connexion n'a pas pu être établie. Nouvelle tentative...", + "Connection lost. Trying to reconnect …" : "Connexion perdue. Tentative de reconnexion...", + "Connection problems …" : "Problèmes de connexion...", + "Collapse" : "Replier", + "Expand" : "Étendre", + "You need to be logged in to upload files" : "Vous devez être connecté pour téléverser des fichiers", + "Drop your files to upload" : "Glissez vos fichiers pour les téléverser", + "Conversation messages" : "Messages de la conversation", + "Scroll to bottom" : "Défiler jusqu'en bas", + "Post message" : "Envoyer le message", + "Federated conversation" : "Conversation fédérée", + "Public conversation" : "Conversation publique", + "Favorite" : "Favori", + "Banned users" : "Utilisateurs bannis", + "Manage the list of banned users in this conversation." : "Gérer les utilisateurs bannis de cette conversation", + "Manage bans" : "Gestion des bannissements", + "No banned users" : "Aucun utilisateur banni", + "Banned by:" : "Banni par : ", + "Date:" : "Date :", + "Note:" : "Note :", + "Hide details" : "Masquer les détails", + "Show details" : "Afficher les détails", + "Unban" : "Débloquer", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Vous pouvez changer le titre et la description dans l'application {linkstart}Agenda ↗{linkend}.", + "Error while updating conversation name" : "Erreur lors de la mise à jour du nom de la conversation", + "Error while updating conversation description" : "Erreur lors de la mise à jour de la description de la conversation", + "Enter a name for this conversation" : "Saisissez un nom pour cette conversation", + "Edit conversation name" : "Modifier le nom de la conversation", + "Edit conversation description" : "Modifier la description de la conversation", + "Enter a description for this conversation" : "Ajoutez une description à cette conversation", + "Picture" : "Image", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Les robots suivants peuvent être activés dans cette conversation. Contactez votre administrateur pour installer d'autres robots sur ce serveur.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Aucun robot n'est installé sur ce serveur. Contactez votre administrateur pour installer des robots sur ce serveur.", + "Disable" : "Désactiver", + "Enable" : "Activer", + "Breakout rooms" : "Salles de sous-groupes", + "Manage breakout rooms" : "Gérer les salles de sous-groupes", + "Set up breakout rooms for this conversation" : "Configurer les salles de sous-groupes pour cette conversation", + "Please select a valid PNG or JPG file" : "Veuillez sélectionner un fichier PNG ou JPG valide.", + "Choose your conversation picture" : "Choisir votre icône de conversation", + "Choose" : "Choisir", + "Error setting conversation picture" : "Erreur à la définition de l'icône de conversation", + "Could not set the conversation picture: {error}" : "Impossible de définir l'icône de conversation : {error}", + "Error cropping conversation picture" : "Erreur au redimensionnement de l'icône de conversation", + "Error removing conversation picture" : "Erreur à la suppression de l'icône de conversation", + "Set emoji as conversation picture" : "Définir l'emoji comme icône de la conversation", + "Set background color for conversation picture" : "Définir la couleur de fond pour l'icône de la conversation", + "Upload conversation picture" : "Téléverser une image de conversation", + "Choose conversation picture from files" : "Choisir une image de conversation depuis Fichiers", + "Remove conversation picture" : "Supprimer l'image de conversation", + "The file must be a PNG or JPG" : "Le fichier doit être au format PNG ou JPG", + "Set picture" : "Définir l'image", + "Default permissions modified for {conversationName}" : "Permissions par défaut modifiées pour {conversationName}", + "Could not modify default permissions for {conversationName}" : "Impossible de modifier les permissions par défaut pour {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Modification des permissions par défaut pour les participants de cette conversation. Ces paramètres n'affectent pas les modérateurs.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Chaque fois que les permissions sont modifiées dans cette section, les permissions personnalisées précédemment attribuées aux participants individuellement seront écrasées.", + "All permissions" : "Toutes les permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Les participants ont le droit de lancer un appel, de rejoindre un appel, d'activer l'audio et la vidéo et de partager leur écran.", + "Restricted" : "Restreint", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Les participants ont le droit de rejoindre un appel, mais ils ne peuvent ni activer l'audio et la vidéo, ni partager leur écran tant qu'un modérateur ne leur donne pas manuellement la permission de le faire.", + "Advanced permissions" : "Permissions avancées", + "Edit permissions" : "Modifier les permissions", + "Conversation settings" : "Paramètres de la conversation", + "Basic Info" : "Informations de base", + "Personal" : "Personnel", + "Moderation" : "Modération", + "Setup overview" : "Aperçu de la configuration", + "Live transcription" : "Transcription en direct", + "Enable live transcription" : "Activer la transcription en direct", + "Breakout Rooms" : "Salles de sous-groupes", + "Matterbridge" : "Matterbridge", + "Bots" : "Robots", + "Danger zone" : "Zone de danger", + "Archive conversation" : "Archiver la conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Les conversations archivées sont cachés de la liste des conversations par défaut. Cependant, elles continueront d'apparaître quand vous recherchez une conversation par son nom ou accédez à une liste de conversations archivées.", + "Do you really want to leave \"{displayName}\"?" : "Voulez-vous vraiment quitter \"{displayName}\"?", + "You can archive this conversation instead." : "Vous pouvez plutôt archiver cette conversation.", + "Leave conversation" : "Quitter la conversation", + "You need to promote a new moderator before you can leave the conversation" : "Vous devez promouvoir un nouveau modérateur avant de pouvoir quitter la conversation.", + "Delete conversation" : "Supprimer la conversation", + "Do you really want to delete \"{displayName}\"?" : "Souhaitez-vous réellement supprimer \"{displayName}\" ?", + "Error while deleting conversation" : "Erreur lors de la suppression d'une conversation", + "Delete all chat messages" : "Suppression de tous les messages instantanés", + "Do you really want to delete all messages in \"{displayName}\"?" : "Voulez-vous vraiment supprimer tous les messages dans « {displayName} » ?", + "Error while clearing chat history" : "Erreur lors de la suppression de l'historique de messagerie", + "Be careful, these actions cannot be undone." : "Attention, ces actions ne peuvent être annulées.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Après avoir quitté la conversation, une invitation est nécessaire pour rejoindre une conversation privée. Une conversation ouverte peut être rejointe à tout moment.", + "Permanently delete this conversation." : "Supprimer définitivement cette conversation", + "Delete chat messages" : "Supprimer les messages instantanés", + "Permanently delete all the messages in this conversation." : "Supprimer définitivement tous les messages de cette conversation", + "_%n hour_::_%n hours_" : ["%n heure","%n heures","%n heures"], + "_%n day_::_%n days_" : ["%n jour","%n jours","%n jours"], + "_%n week_::_%n weeks_" : ["%n semaine","%n semaines","%n semaines"], + "Custom expiration time" : "Délai d'expiration personnalisé", + "Message expiration disabled" : "L'expiration des messages est désactivée", + "Message expiration set: {duration}" : "Délai d'expiration des messages défini : {duration}", + "Error when trying to set message expiration" : "Erreur au paramétrage de l'expiration du message", + "Message expiration" : "Expiration du message", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Les messages instantanés peuvent expirer après un certain temps. Note : les fichiers partagés dans la discussion ne seront pas effacés pour leur propriétaire, mais ils ne seront plus partagés dans la conversation.", + "Set message expiration" : "Configurer l'expiration du message", + "Current message expiration" : "Expiration du message actuel", + "Password copied to clipboard" : "Mot de passe copié dans le presse-papiers", + "Password could not be copied" : "Le mot de passe n'a pas pu être copié", + "Guest access" : "Accès invité", + "Breakout rooms are not allowed in public conversations." : "Les salles de sous-groupes ne sont pas autorisées dans les conversations publiques.", + "Allow guests to join this conversation via link" : "Autoriser les invités à joindre cette conversation par un lien", + "Password protection" : "Protection par mot de passe", + "This conversation is password-protected. Guests need password to join" : "Cette conversation est protégée par un mot de passe. Les invités ont besoin d'un mot de passe pour la rejoindre", + "Password protection is needed for public conversations" : "La protection par mot de passe est nécessaire pour les conversations publiques", + "Set a password" : "Saisir un mot de passe", + "Change password" : "Modifier le mot de passe", + "Enter new password" : "Saisir un nouveau mot de passe", + "Save password" : "Enregistrer le mot de passe", + "Copy password" : "Copier le mot de passe", + "Guests are allowed to join this conversation via link" : "Les invités sont autorisés à rejoindre cette conversation via un lien", + "Guests are not allowed to join this conversation" : "Les invités ne sont pas autorisés à rejoindre cette conversation", + "Resend invitations" : "Renvoyer les invitations", + "This conversation is open to both registered users and users created with the Guests app" : "Cette conversation est ouvert aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "This conversation is open to registered users" : "Cette conversation est ouverte aux utilisateurs enregistrés", + "This conversation is limited to the current participants" : "La conversation est limitée aux participants actuels", + "You opened the conversation to both registered users and users created with the Guests app" : "Vous avez ouvert la conversation aux utilisateurs enregistrés et aux utilisateurs créés avec l'application Invités", + "Error occurred when opening or limiting the conversation" : "Une erreur est survenue lors de l'ouverture ou de la limitation de la conversation", + "Open conversation to registered users, showing it in search results" : "Ouvrir la conversation aux utilisateurs enregistrés, en la montrant dans les résultats de recherche", + "Also open to users created with the Guests app" : "Aussi ouvrir aux utilisateurs créés avec l'application Invités", + "Open conversation" : "Ouvrir la conversation", + "Set language spoken in calls" : "Définir la langue des appels", + "Languages could not be loaded" : "Les langues n'ont pas pu être chargées", + "Loading languages …" : "Chargement des langues...", + "Invalid language" : "Langue non valide", + "Default language (English)" : "Langue par défaut (Anglais)", + "Default live transcription language set" : "Langue par défaut de la transcription en direct définie", + "Live transcription language set: {languageName}" : "Langue de la transcription en direct définie : {languageName}", + "Error when trying to set live transcription language" : "Erreur lors de la configuration de la langue de transcription en direct", + "Start time: {date}" : "Heure de début : {date}", + "Start time has been updated" : "L'heure de début a été mise à jour", + "Error occurred while updating start time" : "Une erreur est survenue lors de la mise à jour de l'heure de début", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Activer la salle d'attente va retirer les non-modérateurs de l'appel en cours.", + "Enable lobby, restricting the conversation to moderators" : "Activer la salle d'attente, restreignant la conversation aux modérateurs", + "Meeting start time" : "Heure de début de la réunion", + "Start time (optional)" : "Heure de début (optionnelle)", + "Import email participants" : "Importer des adresses e-mail de participants", + "You can import a list of email participants from a CSV file." : "Vous pouvez importer une liste d'adresses e-mail de participants depuis un fichier CSV.", + "Poll drafts" : "Brouillons de sondage", + "Browse poll drafts" : "Parcourir les brouillons de sondage", + "Error occurred when locking the conversation" : "Une erreur est survenue lors du verrouillage de la conversation", + "Error occurred when unlocking the conversation" : "Une erreur est survenue lors du déverrouillage de la conversation", + "Lock conversation" : "Verrouiller la conversation", + "This will also terminate the ongoing call." : "Cela mettra également fin à l'appel en cours.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Verrouiller la conversation pour éviter que quiconque n'écrive des messages ou ne lance des appels", + "Edit" : "Modifier", + "More information" : "Plus d'informations", + "Delete" : "Effacer", + "Add new bridged channel to current conversation" : "Ajouter un nouveau canal ponté à la conversation en cours", + "unknown state" : "état inconnu", + "running" : "en cours", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "inactif", + "Bridge saved" : "Lien enregistré", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Vous pouvez lier des salles de plusieurs autres systèmes de messagerie instantanée avec Matterbridge.", + "More info on Matterbridge" : "Plus d'informations sur Matterbridge", + "Messaging systems" : "Systèmes de messagerie", + "Enable bridge" : "Activer le pont", + "Show Matterbridge log" : "Afficher le log Matterbridge", + "Log content" : "Contenu du registre", + "Only moderators are allowed to mention @all" : "Seuls les modérateurs peuvent mentionner @all", + "All participants are allowed to mention @all" : "Tous les participants peuvent mentionner @all", + "Participants are now allowed to mention @all." : "Les participants sont maintenant autorisés à mentionner @all.", + "Mentioning @all has been limited to moderators." : "Seuls les modérateurs ont été autorisés à mentionner @all.", + "Allow participants to mention @all" : "Permettre aux participants de mentionner @all", + "Mention permissions" : "Permissions de mention", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notification pour les appels de cette conversation", + "Important conversation" : "Conversation importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Le statut utilisateur \"Ne pas déranger\" est ignoré pour les conversations importantes.", + "Sensitive conversation" : "Conversation sensible", + "Message preview will be disabled in conversation list and notifications" : "La prévisualisation des messages sera désactivée dans la liste des conversations et les notifications", + "Recording consent is required for calls in this conversation" : "Le consentement à l'enregistrement est exigé pour les appels dans cette conversation", + "Recording consent is not required for calls in this conversation" : "Le consentement à l'enregistrement n'est pas exigé pour les appels dans cette conversation", + "Recording consent requirement was updated" : "L'exigence de consentement à l'enregistrement a été mis à jour", + "Error occurred while updating recording consent" : "Une erreur est survenue lors de la mise à jour du consentement à l'enregistrement", + "Recording Consent" : "Consentement à l'enregistrement", + "Recording consent cannot be changed once a call or breakout session has started." : "Le consentement à l'enregistrement ne peut pas être modifié lorsque l'appel ou une salle en sous-groupe a commencé. ", + "Require recording consent before joining call in this conversation" : "Exiger le consentement à l'enregistrement avant de rejoindre l'appel dans cette conversation", + "Recording consent is required for all calls" : "Le consentement à l'enregistrement est exigé pour tous les appels", + "SIP dial-in is now possible without PIN requirement" : "La numérotation SIP est maintenant possible sans code PIN", + "SIP dial-in is now enabled" : "La numérotation SIP est maintenant activée", + "SIP dial-in is now disabled" : "La numérotation SIP est maintenant désactivée", + "Error occurred when enabling SIP dial-in" : "Une erreur est survenue lors de l'activation de la numérotation SIP", + "Error occurred when disabling SIP dial-in" : "Une erreur est survenue lors de la désactivation de la numérotation SIP", + "Phone and SIP dial-in" : "Numérotation téléphonique et SIP", + "Enable phone and SIP dial-in" : "Activer la numérotation téléphonique et SIP", + "Allow to dial-in without a PIN" : "Autoriser la numérotation sans code PIN", + "Ongoing" : "En cours", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n personne a accepté","%n personnes ont accepté","%n personnes ont accepté"], + "_%n person declined_::_%n people declined_" : ["%n personne a décliné","%n personnes ont décliné","%n personnes ont décliné"], + "_and %n other attachment_::_and %n other attachments_" : ["et %n autre pièce jointe","et %n autres pièces jointes","et %n autres pièces jointes"], + "With {displayName}" : "Avec {displayName}", + "In {conversation}" : "Dans {conversation}", + "View attachment" : "Voir la pièce jointe", + "Join" : "Rejoindre", + "View conversation" : "Voir la conversation", + "View event on Calendar" : "Voir l'événement dans l'Agenda", + "Error while creating the conversation" : "Erreur lors de la création de la conversation", + "Hello, {displayName}" : "Bonjour, {displayName}", + "Start meeting now" : "Commencer une réunion maintenant", + "Give your meeting a title" : "Donnez un titre à votre réunion", + "Create and copy link" : "Créer et copier le lien", + "Create a new conversation" : "Créer une nouvelle conversation", + "Join open conversations" : "Rejoindre des conversations publiques", + "Call a phone number" : "Appeler un numéro de téléphone", + "Scroll backward" : "Défiler vers l'arrière", + "Scroll forward" : "Défiler vers l'avant", + "Schedule meetings" : "Planifier des réunions", + "You don't have any upcoming meetings" : "Vous n'avez aucune réunion prévue", + "Open calendar" : "Ouvrir l'agenda", + "Unread mentions" : "Mentions non lues", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Les messages dans lesquels vous avez été mentionné·e s'afficheront ici. Vous pouvez mentionner des personnes en tapant @ suivi de leur nom.", + "Upcoming reminders" : "Rappels à venir", + "Message reminders" : "Rappels de messages", + "Set a reminder on a message to be notified" : "Définir un rappel sur un message pour être averti", + "Start a group conversation" : "Commencer une conversation de groupe", + "Create conversation" : "Créer la conversation", + "Enter your name" : "Saisissez votre nom", + "Submit name and join" : "Valider le nom et rejoindre", + "Do you already have an account?" : "Avez-vous déjà un compte ?", + "Log in" : "Se connecter", + "Error while verifying uploaded file" : "Erreur lors de la vérification du fichier téléversé", + "Uploaded file is verified" : "Le fichier téléversé est vérifié", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Le format du contenu est constitué de valeurs séparées par des virgules (CSV):
- La ligne d'en-tête est obligatoire et doit correspondre à \"name\",\"email\" ou juste \"email\"
- Une entrée par ligne (ex : \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Les participants ont été ajoutés avec succès", + "Error while adding participants" : "Erreur lors de l'ajout des participants", + "Import a file" : "Importer un fichier", + "Browse" : "Parcourir", + "Verifying uploaded file …" : "Vérification du fichier téléversé...", + "This might take a moment" : "Cela peut prendre un moment", + "Send invitations" : "Envoyer les invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n adresse e-mail invalide","%n adresses e-mail invalides","%n adresses e-mail invalides"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adresse e-mail est déjà importée ou en doublon","%n adresses e-mail sont déjà importées ou en doublon","%n adresses e-mail sont déjà importées ou en doublon"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation peut être envoyée","%ninvitations peuvent être envoyées","%n invitations peuvent être envoyées"], + "An error occurred while calling a phone number" : "Une erreur est survenue en appelant un numéro de téléphone", + "Phone number could not be called: {error}" : "Le numéro de téléphone n'a pas pu être appelé : {error}", + "Phone number could not be called" : "Le numéro de téléphone n'a pas pu être appelé", + "Search participants or phone numbers" : "Rechercher des participants ou des numéros de téléphone", + "Creating the conversation …" : "Création de la conversation...", + "Mark as read" : "Marquer comme lu", + "Mark as unread" : "Marquer comme non lu", + "Remove from favorites" : "Retirer des favoris", + "Add to favorites" : "Ajouter aux favoris", + "Unarchive conversation" : "Désarchiver la conversation", + "Ignore \"Do not disturb\"" : "Ignorer le mode \"Ne pas déranger\"", + "You need to promote a new moderator before you can leave the conversation." : "Vous devez désigner un nouveau modérateur avant de quitter la conversation.", + "Conversation actions" : "Actions de la conversation", + "Notify about calls" : "Notifier lors des appels", + "Hide message text" : "Cacher le contenu du message", + "Pending invitations" : "Invitations en attente", + "From {user} at {remoteServer}" : "De {user} sur {remoteServer}", + "Decline invitation" : "Décliner l'invitation", + "Accept invitation" : "Accepter l'invitation", + "No pending invitations" : "Aucune invitation en attente", + "Home" : "Accueil", + "Unread" : "Non lu", + "Mentions" : "Mentions", + "Meetings" : "Réunions", + "Alphabetically" : "Ordre alphabétique", + "No followed threads" : "Aucun fil de discussion suivi", + "No matches found" : "Aucun résultat trouvé", + "No conversations found" : "Aucune conversation trouvée", + "You have no archived conversations." : "Vous n'avez pas de conversations archivées.", + "Subscribe to an existing thread or start your own." : "Abonnez-vous à un fil de discussion existant ou créez le vôtre.", + "You have no unread mentions." : "Vous n'avez pas de mentions non lues.", + "You have no unread messages." : "Vous n'avez pas de messages non lus.", + "An error occurred while performing the search" : "Une erreur est survenue pendant la recherche", + "Conversation list" : "Liste des conversations", + "Filter conversations by" : "Filtrer les conversations par", + "Unread messages" : "Messages non lus", + "Meeting conversations" : "Conversations de réunion", + "Clear filters" : "Effacer les filtres", + "New personal note" : "Nouvelle note personnelle", + "Back to conversations" : "Retour aux conversations", + "Archived conversations" : "Conversations archivées", + "Threads" : "Fils de discussion", + "Clear filter" : "Supprimer le filtre", + "Show more threads" : "Afficher plus de fils de discussion", + "App settings" : "Paramètres de l'application", + "Users" : "Utilisateurs", + "Groups" : "Groupes", + "Teams" : "Équipes", + "Federated users" : "Utilisateurs fédérés", + "New private conversation" : "Nouvelle conversation privée", + "Other sources" : "Autres sources", + "Open conversations" : "Ouvrir des conversations", + "No search results" : "Aucun résultat", + "Users, groups and teams" : "Utilisateurs, groupes et équipes", + "Users and groups" : "Utilisateurs et groupes", + "Users and teams" : "Utilisateurs et équipes", + "Groups and teams" : "Groupes et équipes", + "New group conversation" : "Nouvelle conversation de groupe", + "The meeting will start soon" : "La réunion va bientôt démarrer", + "This meeting is scheduled for {startTime}" : "La réunion est planifiée pour {startTime}", + "You are currently waiting in the lobby" : "Vous patientez actuellement dans la salle d'attente", + "Enable noise suppression" : "Activer la suppression du bruit", + "Reduce background noises for better voice quality" : "Réduisez les bruits de fond pour une meilleure qualité vocale", + "Enable echo cancellation" : "Activer la suppression de l'écho", + "Minimize echo effect from own surrounding" : "Minimiser l'effet d'écho provenant de l'environnement", + "Enable auto gain control" : "Activer le contrôle automatique du gain", + "Dynamically adjust microphone volume for consistent level" : "Ajuster dynamiquement le volume du microphone pour un niveau constant", + "Select microphone" : "Sélectionnez un microphone", + "No microphone available" : "Aucun microphone disponible", + "Select speaker" : "Choisir le micro", + "No speaker available" : "Aucun micro disponible", + "Select camera" : "Sélectionnez une caméra", + "No camera available" : "Aucune caméra disponible", + "Select a device" : "Sélectionner un appareil", + "Playing …" : "Lecture...", + "Test speakers" : "Tester les haut-parleurs", + "Test" : "Test", + "Devices" : "Périphériques", + "Backgrounds" : "Arrière-plan", + "No audio" : "Pas de son", + "No camera" : "Pas de caméra", + "Display video as you will see it (mirrored)" : "Montrer la vidéo comme vous la verrez (mode miroir)", + "Display video as others will see it" : "Montrer la vidéo comme les autres la verront", + "Calls are not supported in your browser" : "Les appels téléphoniques ne sont pas pris en charge par votre navigateur web", + "Access to microphone is only possible with HTTPS" : "L'accès au microphone est seulement possible en HTTPS", + "Access to microphone was denied" : "L'accès au microphone a été refusé", + "Error while accessing microphone" : "Erreur d'accès au microphone", + "Access to camera is only possible with HTTPS" : "L'accès à la caméra est seulement possible en HTTPS", + "The call is being recorded." : "L'appel est en cours d'enregistrement.", + "The call might be recorded." : "L'appel peut être enregistré.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "L'enregistrement peut inclure votre voix, la vidéo de votre caméra et le partage d'écran. Votre consentement est requis avant de rejoindre l'appel.", + "Give consent to the recording of this call" : "Consentir à l'enregistrement de cet appel", + "Show more info" : "Afficher plus d'informations", + "Audio is not available" : "L'audio n'est pas disponible", + "Video is not available" : "La vidéo n'est pas disponible", + "Start recording immediately with the call" : "Lancer l'enregistrement en même temps que l'appel", + "Notify all participants about this call" : "Notifier tous les participants de cet appel", + "Apply settings" : "Appliquer les paramètres", + "Select virtual office background" : "Sélectionnez l'arrière-plan virtuel \"bureau\"", + "Select virtual home background" : "Sélectionnez l'arrière-plan virtuel \"maison\"", + "Select virtual abstract background" : "Sélectionnez l'arrière-plan virtuel \"abstrait\"", + "Select virtual beach background" : "Sélectionnez l'arrière-plan virtuel \"plage\"", + "Select virtual park background" : "Sélectionnez l'arrière-plan virtuel \"parc\"", + "Select virtual theater background" : "Sélectionnez l'arrière-plan virtuel \"cinéma\"", + "Select virtual library background" : "Sélectionnez l'arrière-plan virtuel \"bibliothèque\"", + "Select virtual space station background" : "Sélectionnez l'arrière-plan virtuel \"station spatiale\"", + "Error while uploading the file" : "Erreur pendant le téléversement du fichier", + "Select a file" : "Sélectionner un fichier", + "Invalid path selected" : "Chemin sélectionné non valide", + "Select virtual background from file {fileName}" : "Sélectionnez l'arrière-plan virtuel depuis le fichier {fileName}", + "Blur" : "Flou", + "Upload" : "Téléverser", + "Files" : "Fichiers", + "(editing)" : "(édition)", + "(edited)" : "(modifié)", + "The message has expired or has been deleted" : "Le message a expiré ou a été supprimé", + "Cancel quote" : "Annuler la citation", + "24 hours" : "24 heures", + "7 days" : "7 jours", + "30 days" : "30 jours", + "Until unpin" : "Jusqu'au désépinglage", + "Clear reminder – {timeLocale}" : "Effacer le rappel – {timeLocale}", + "Edited by {actor}" : "Modifié par {actor}", + "Pinned by you" : "Épinglé par vous", + "Pinned by {actor}" : "Épinglé par {actor}", + "Until {absoluteDate}" : "Jusqu'au {absoluteDate}", + "Message text copied to clipboard" : "Texte du message copié dans le presse-papier", + "Message text could not be copied" : "Le texte du message n'a pas pu être copié", + "Message forwarded to \"Note to self\"" : "Message transféré dans les « Notes à soi-même »", + "Error while forwarding message to \"Note to self\"" : "Erreur pendant le transfert vers les « Notes à soi-même »", + "A reminder was successfully removed" : "Un rappel a été supprimé avec succès", + "Error occurred when removing a reminder" : "Une erreur est survenue à la suppression d'un rappel", + "A reminder was successfully set at {datetime}" : "Un rappel a été placé avec succès le {datetime}", + "Error occurred when creating a reminder" : "Une erreur est survenue à la création du rappel", + "Add a reaction to this message" : "Ajouter une réaction à ce message", + "Reply" : "Répondre", + "More actions" : "Plus d'actions", + "Set reminder" : "Définir un rappel", + "Pin message" : "Épingler le message", + "Unpin message" : "Désépingler le message", + "Reply privately" : "Répondre en privé", + "Edit message" : "Modifier le message", + "Copy message" : "Copier le message", + "Copy message link" : "Copier le lien du message", + "Go to file" : "Aller au fichier", + "Download file" : "Télécharger le fichier", + "Go to thread" : "Aller au fil de discussion", + "Edit thread details" : "Modifier les détails du fil de discussion", + "Forward message" : "Transférer le message", + "Translate" : "Traduire", + "Set custom reminder" : "Configurer un rappel spécifique", + "Keep pinned for" : "Garder épinglé pendant", + "Set custom period" : "Choisir une période spécifique", + "Close reactions menu" : "Fermer le menu des réactions", + "React with {emoji}" : "Réagir avec {emoji}", + "React with another emoji" : "Réagir avec un autre emoji", + "Choose a conversation to forward the selected message." : "Choisissez une conversation où transférer le message sélectionné.", + "Error while forwarding message" : "Erreur lors du transfert du message", + "The message has been forwarded to {selectedConversationName}" : "Le message a été transféré sur {selectedConversationName}", + "Dismiss" : "Rejeter", + "Go to conversation" : "Aller à la conversation", + "Detect language" : "Détecter la langue", + "The message could not be translated" : "Le message n'a pas pu être traduit", + "Translation copied to clipboard" : "Traduction copiée dans le presse-papier", + "Translation could not be copied" : "La traduction n'a pas pu être copiée", + "Translate message" : "Traduire le message", + "Source language to translate from" : "Langue source pour la traduction", + "Translate from" : "Traduire depuis", + "Target language to translate into" : "Langue cible pour la traduction", + "Translate to" : "Traduire vers", + "Translating" : "Traduction", + "Copy translated text" : "Copier le texte traduit", + "Error when scheduling the message" : "Erreur lors de la planification du message", + "Reschedule" : "Reprogrammer", + "Send now" : "Envoyer immédiatement", + "Choose a time" : "Choisir un horaire", + "Send at custom time" : "Envoyer à un horaire spécifique", + "Will be sent without notification" : "Sera envoyé sans notification", + "Message read by everyone who shares their reading status" : "Message lu par tous ceux qui partagent leur statut de lecture", + "Message sent" : "Message envoyé", + "Sent without notification" : "Envoyé sans notification", + "Deleting message" : "Suppression d'un message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Le message a été supprimé, mais un robot ou Matterbridge est configuré et le message a pu être déjà distribué à d'autres services", + "Message deleted successfully" : "Message supprimé", + "Message could not be deleted because it is too old" : "Ce message ne peut pas être supprimé car il est trop ancien", + "Only normal chat messages can be deleted" : "Seuls les messages instantanés standards peuvent être supprimés", + "An error occurred while deleting the message" : "Une erreur est survenue pendant la suppression du message", + "Pinned" : "Épinglé", + "Your browser does not support playing audio files" : "Votre navigateur ne prend pas en charge la lecture de fichiers audio", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} dans {board}", + "Deck Card" : "Carte Deck", + "Remove {fileName}" : "Supprimer {fileName}", + "Open this location in OpenStreetMap" : "Ouvrir ce lieu sur OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n réponse","%n réponses","%n réponses"], + "Sending message" : "Envoi du message", + "Failed to send the message. Click to try again" : "Échec de l'envoi du message. Cliquez pour réessayer", + "Not enough free space to upload file" : "Espace libre insuffisant pour téléverser le fichier", + "You cannot send messages to this conversation at the moment" : "Vous ne pouvez pas envoyer de message dans cette conversation actuellement", + "Could not update the message" : "Impossible de mettre à jour le message", + "Reply to thread \"{threadTitle}\"" : "Répondre dans le fil de discussion \"{threadTitle}\"", + "You voted" : "Vous avez voté", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Brouillon de sondage • %n option","Brouillon de sondage • %n options","Brouillon de sondage • %n options"], + "_%n vote_::_%n votes_" : ["%n vote","%n votes","%n votes"], + "Edit poll draft" : "Éditer le brouillon du sondage", + "Delete poll draft" : "Supprimer le brouillon du sondage", + "Open poll" : "Sondage ouvert", + "See results" : "Voir les résultats", + "Reactions" : "Réactions", + "No permission to post reactions in this conversation" : "Interdiction de poster des réactions dans cette conversation", + "and {participant}" : "et {participant}", + "_and %n other participant_::_and %n other participants_" : ["et %n autre participant ","et %n autres participants","et %n autres participants"], + "Show all reactions" : "Afficher toutes les réactions", + "Add more reactions" : "Ajouter plus de réactions", + "Show or collapse system messages" : "Afficher ou cacher les messages système", + "No messages" : "Aucun message", + "All messages have expired or have been deleted." : "Tous les messages ont expiré ou ont été supprimés.", + "{author} (pinned by you)" : "{author} (épinglé par vous)", + "{author} (pinned by {actor})" : "{author} (épinglé par {actor})", + "Unpin" : "Détacher", + "Cancel search" : "Annuler la recherche", + "Add a phone number" : "Ajouter un numéro de téléphone", + "Error: A password is required to create the conversation." : "Erreur : Un mot de passe est requis pour créer la conversation.", + "All set, the conversation \"{conversationName}\" was created." : "Tout est prêt, la conversation « {conversationName} » a été créée.", + "Create a new group conversation" : "Créer une nouvelle conversation de groupe", + "Add participants" : "Ajouter des participants", + "Maximum length exceeded ({maxlength} characters)" : "Longueur maximale dépassée ({maxlength} caractères)", + "Conversation visibility" : "Visibilité de la conversation", + "Allow guests to join via link" : "Permettre aux invités de rejoindre via un lien", + "Enter password" : "Saisir le mot de passe", + "This conversation has been locked" : "Cette conversation a été verrouillée", + "No permission to post messages in this conversation" : "Interdit de publier un message dans cette conversation", + "Joining conversation …" : "Rejoindre la conversation…", + "Write a message without notification" : "Écrire un message sans notification", + "Create a thread silently" : "Créer silencieusement un fil de discussion", + "Create a thread" : "Créer un fil de discussion", + "Send message silently" : "Envoyer le message silencieusement", + "Send message" : "Envoyer un message", + "Send without notification" : "Envoyer sans notification", + "The participant will not be notified about new messages" : "Les participants ne seront pas notifiés de nouveaux messages", + "Participants will not be notified about new messages" : "Les participants seront pas notifiés de nouveaux messages", + "Message will be sent {datetimeString}" : "Le message sera envoyé le {datetimeString}", + "Thread title is required" : "Un titre de fil de discussion est obligatoire", + "Message text is required" : "Le texte du message est obligatoire", + "The message could not be edited" : "Le message n'a pas pu être modifié", + "File to share" : "Fichier à partager", + "File upload is not available in this conversation" : "Le téléversement de fichier n'est pas disponible dans cette conversation", + "Message was successfully scheduled" : "Message programmé avec succès", + "Add emoji" : "Ajouter un emoji", + "Adding a mention will only notify users who did not read the message." : "Ajouter une mention notifiera les utilisateurs qui n'ont pas lu le message.", + "Thread title" : "Titre du fil de discussion", + "Send later" : "Envoyer ultérieurement", + "Show scheduled messages" : "Montrer les messages programmés", + "Cancel editing" : "Annuler la modification", + "Schedule message" : "Programmer le message", + "{user} is out of office and might not respond." : "{user} est absent et pourrait ne pas répondre.", + "Absence period: {startDate} - {endDate}" : "Période d'absence du {startDate} au {endDate}", + "Replacement:" : "Remplaçant : ", + "Share from {nextcloud}" : "Partager depuis {nextcloud}", + "Share from Files" : "Partager depuis Fichiers", + "Share files to the conversation" : "Partager des fichiers à cette conversation", + "Upload from device" : "Téléverser depuis l'appareil", + "Create new poll" : "Créer un nouveau sondage", + "Smart picker" : "Sélecteur intelligent", + "Record voice message" : "Enregistrer un message vocal", + "End recording and send" : "Terminer l'enregistrement et l'envoyer", + "Dismiss recording" : "Annuler l'enregistrement", + "Access to the microphone was denied" : "L'accès au microphone n'est pas autorisé", + "Microphone either not available or disabled in settings" : "Le microphone n'est pas disponible ou il est désactivé dans les paramètres", + "Error while recording audio" : "Erreur pendant l'enregistrement de l'audio", + "Generating summary of unread messages …" : "Génération du résumé des messages non lus...", + "Summary is AI generated and might contain mistakes" : "Le résumé est généré par une intelligence artificielle et peut contenir des erreurs", + "Error occurred during a summary generation" : "Une erreur est survenue pendant la génération du résumé", + "New file" : "Nouveau fichier", + "Blank" : "Vide", + "Error while creating file" : "Erreur à la création du fichier", + "Create and share a new file" : "Créer et partager un nouveau fichier", + "Name of the new file" : "Nom du nouveau fichier", + "Create file" : "Créer un fichier", + "Someone is typing …" : "Quelqu'un est en train d'écrire...", + "{user1} is typing …" : "{user1} est en train d'écrire...", + "{user1} and {user2} are typing …" : "{user1} et {user2} sont en train d'écrire...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} et {user3} sont en train d'écrire...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} et %n autre participant écrivent …","{user1}, {user2}, {user3} et %n autres participants écrivent …","{user1}, {user2}, {user3} et %n autres participants sont en train d'écrire..."], + "Add more files" : "Ajouter d'autres fichiers", + "Send" : "Envoyer", + "In this conversation {user} can:" : "Dans cette conversation {user} peut :", + "Edit default permissions for participants in {conversationName}" : "Modifier les permissions par défaut pour les participants de la conversation {conversationName}", + "Start a call" : "Lancer un appel", + "Skip the lobby" : "Ignorer la salle d'attente", + "Can post messages" : "Les messages ne peuvent pas être envoyés", + "Can post messages and reactions" : "Autoriser à poster des messages et à envoyer des réactions", + "Can add reactions" : "Les réactions ne peuvent être ajoutés", + "Enable the microphone" : "Activer le microphone", + "Enable the camera" : "Activer la caméra", + "Share the screen" : "Partager l'écran", + "Update permissions" : "Mettre à jour les permissions", + "Updating permissions" : "Mise à jour des permissions", + "No poll drafts" : "Aucun brouillon de sondage", + "There is no poll drafts yet saved for this conversation" : "Il n'y a pas encore de brouillon de sondage enregistré pour cette conversation", + "Create poll in {name}" : "Créer un sondage dans {name}", + "Create poll" : "Créer le sondage", + "Error while importing poll" : "Erreur lors de l'import du sondage", + "Question" : "Question", + "Ask a question" : "Poser une question", + "Import draft from file" : "Importer un brouillon à partir du fichier", + "Answers" : "Réponses", + "Answer {option}" : "Réponse {option}", + "Delete poll option" : "Supprimer l'option de sondage", + "Add answer" : "Ajouter une réponse", + "Settings" : "Paramètres", + "Anonymous poll" : "Sondage anonyme", + "Multiple answers" : "Réponses multiples", + "Save as draft" : "Enregistrer comme brouillon", + "Export draft to file" : "Exporter le brouillon vers un fichier", + "You voted for this option" : "Vous avez voté pour cette option", + "End poll" : "Mettre fin au sondage", + "Change your vote" : "Changer votre vote", + "Results" : "Résultats", + "Voted participants" : "Participants qui ont voté", + "Send a message to \"{roomName}\"" : "Envoyer un message à la salle \"{roomName}\"", + "Hide list of participants" : "Masquer la liste des participants", + "Show list of participants" : "Montrer la liste des participants", + "Assistance requested in {roomName}" : "Assistance demandée dans {roomName}", + "The message was sent to \"{roomName}\"" : "Le message a été posté dans \"{roomName}\"", + "Dismiss request for assistance" : "Ignorer la demande d'assistance", + "Send message to room" : "Envoyer un message à la salle", + "Back to main room" : "Retour à la salle principale", + "Back to your room" : "Retour à votre salle", + "Message all rooms" : "Envoyer un message à toutes les salles", + "Start session" : "Démarrer une session", + "Start a call before you start a breakout room session" : "Lancer un appel avant de démarrer une salle de sous-groupe", + "Stop session" : "Terminer une session", + "The message was sent to all breakout rooms" : "Le message a été envoyé à toutes les salles de sous-groupes", + "Send a message to all breakout rooms" : "Envoyer un message à toutes les salles de sous-groupes", + "Breakout rooms are not started" : "Les salles de sous-groupes ne sont pas démarrées", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Les appels sans serveur haute performance peuvent entraîner des problèmes de connectivité et une charge importante sur les appareils. {linkstart}En savoir plus {linkend}", + "Talk setup incomplete" : "Configuration de Talk incomplète", + "Disable lobby" : "Désactiver la salle d'attente", + "Settings for participant \"{user}\"" : "Paramètres du participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "modérateur", + "bot" : "robot", + "guest" : "invité", + "Ringing …" : "Ça sonne...", + "Call rejected" : "Appel rejeté", + "{time} talking …" : "{time} est en train de parler…", + "{time} talking time" : "{time} de temps de parole", + "Raised their hand" : "A levé la main", + "Joined with video" : "A rejoint avec vidéo", + "Joined via phone" : "Connecté par téléphone", + "Joined with audio" : "A rejoint avec audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Le texte doit être inférieur ou égal à {maxLength} caractères. Votre texte actuel comporte {charactersCount} caractères.", + "Remove group and members" : "Retirer le groupe et ses membres", + "Remove team and members" : "Supprimer l'équipe et ses membres", + "Remove participant" : "Retirer le participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Voulez-vous vraiment retirer le groupe \"{displayName}\" et ses membres de cette conversation ?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Voulez-vous vraiment retirer l'équipe \"{displayName}\" et ses membres de cette conversation ?", + "Do you really want to remove {displayName} from this conversation?" : "Voulez-vous vraiment retirer {displayName} de cette conversation ?", + "Notification was sent to {displayName}" : "La notification a été envoyée à {displayName}", + "Could not send notification to {displayName}" : "Impossible d'envoyer la notification à {displayName}", + "Permissions granted to {displayName}" : "Permissions accordées à {displayName}", + "Could not modify permissions for {displayName}" : "Impossible de modifier les permissions pour {displayName}", + "Permissions removed for {displayName}" : "Permissions retirées pour {displayName}", + "Permissions set to default for {displayName}" : "Permissions réinitialisées pour {displayName}", + "Phone number could not be hung up" : "Le numéro de téléphone n'a pas pu être raccroché", + "Phone number could not be put on hold" : "Impossible de mettre en attente le numéro de téléphone", + "Phone number could not be muted" : "Impossible de mettre en sourdine le numéro de téléphone", + "Phone number could not be unmuted" : "Impossible de réactiver le numéro de téléphone", + "DTMF message could not be sent" : "Impossible d’envoyer le message DTMF", + "Phone number copied to clipboard" : "Numéro de téléphone copié dans le presse-papier", + "Phone number could not be copied" : "Le numéro de téléphone n’a pas pu être copié dans le presse-papiers", + "in the lobby" : "dans la salle d'attente", + "Dial out phone" : "Composer un numéro de téléphone", + "Hang up phone" : "Raccrocher le téléphone", + "Move back to lobby" : "Retourner à la salle d'attente", + "Move to conversation" : "Déplacer dans la conversation", + "Dial-in PIN" : "Code PIN", + "Demote from moderator" : "Retirer le statut de modérateur", + "Promote to moderator" : "Promouvoir comme modérateur", + "Resend invitation" : "Renvoyer l'invitation", + "Send call notification" : "Envoyer une notification d'appel", + "Dial out phone number" : "Composer un numéro de téléphone", + "Resume call for phone number" : "Reprendre l'appel pour le numéro de téléphone", + "Put phone number on hold" : "Mettre le numéro de téléphone en attente", + "Unmute phone number" : "Activer le son du numéro de téléphone", + "Mute phone number" : "Masquer le numéro de téléphone", + "Copy phone number" : "Copier le numéro de téléphone", + "Reset custom permissions" : "Réinitialiser les permissions personnalisées", + "Grant all permissions" : "Accorder toutes les permissions", + "Remove all permissions" : "Retirer toutes les permissions", + "Also ban from this conversation" : "Bannir aussi de cette conversation", + "Internal note (reason to ban)" : "Note interne (raison du bannissement)", + "Remove" : "Retirer", + "Permissions modified for {displayName}" : "Permissions modifiées pour {displayName}", + "Add users, groups or teams" : "Ajouter des utilisateurs, des groupes ou des équipes", + "Add users or groups" : "Ajouter des utilisateurs ou des groupes", + "Add users or teams" : "Ajouter des utilisateurs ou des équipes", + "Add users" : "Ajouter des utilisateurs", + "Add groups or teams" : "Ajouter des groupes ou des équipes", + "Add groups" : "Ajouter des groupes", + "Add teams" : "Ajouter des équipes", + "Add other sources" : "Ajouter d'autres sources", + "Add emails" : "Ajouter des adresses e-mails", + "Integrations" : "Intégrations", + "Add federated users" : "Ajouter des utilisateurs fédérés", + "Searching …" : "Recherche …", + "Search for more users" : "Rechercher d'autres utilisateurs", + "You can search or add participants via name, email, or Federated Cloud ID" : "Vous pouvez rechercher ou ajouter des participants par nom, e-mail ou ID de cloud fédéré.", + "Search or add participants" : "Rechercher ou ajouter des participants", + "Invitation was sent to {actorId}" : "L'invitation a été envoyée à {actorId}", + "An error occurred while adding the participants" : "Une erreur est survenue lors de l’ajout de participants", + "A new group conversation with selected participant will be created" : "Une nouvelle conversation de groupe avec les participants sélectionnés va être créée", + "Participants" : "Participants", + "Pinned by a deleted user" : "Épinglé par un utilisateur supprimé", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Ouvrir la discussion instantanée", + "You have new unread messages in the chat." : "Vous avez des messages non lus dans la discussion.", + "You have been mentioned in the chat." : "Vous avez été mentionné·e dans la discussion.", + "Search messages" : "Rechercher des messages", + "Chat" : "Discussion", + "Details" : "Details", + "Shared items" : "Éléments partagés", + "Search in {name}" : "Rechercher dans {name}", + "Threads in {name}" : "Fils de discussion dans {name}", + "{actor} in {conversation}" : "{actor} dans {conversation}", + "Search messages …" : "Recherche de messages …", + "Search options" : "Options de recherche", + "From User" : "De l'utilisateur", + "Since" : "Depuis", + "Until" : "Jusqu'au", + "No results found" : "Aucun résultat", + "Load more results" : "Charger plus de résultats", + "Recent threads" : "Fils de discussion récents", + "Projects" : "Projets", + "No shared items" : "Aucun élément partagé", + "Thread notifications" : "Notifications de fil de discussion", + "Thread actions" : "Actions du fil de discussion", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Relier à une conversation", + "No open conversations found" : "Aucune conversation publique n'a été trouvée", + "Either there are no open conversations or you joined all of them." : "Soit il n'y a pas de conversations publiques, soit vous les avez toutes rejointes.", + "Check spelling or use complete words." : "Vérifier l'orthographe ou utiliser les mots complets.", + "Search conversations or users" : "Rechercher des conversations ou des utilisateurs", + "Select conversation" : "Sélectionnez la conversation", + "Number length is not valid" : "La longueur du numéro est invalide", + "Region code is not valid" : "L'indicatif téléphonique est invalide", + "Number length is too short" : "La longueur du numéro est trop courte", + "Number length is too long" : "La longueur du numéro est trop longue", + "Number is not valid" : "Le numéro est invalide", + "Phone numbers" : "Numéros de téléphone", + "Display name: {name}" : "Nom affiché : {name}", + "Edit display name" : "Modifier le nom d'affichage", + "Display name (required)" : "Display name (obligatoire)", + "Save name" : "Sauvegarder le nom", + "I picked message bubbles" : "J'ai choisi des bulles de message", + "Error while setting personal setting" : "Erreur lors de la prise en compte de vos paramètres personnels", + "Error while saving sounds setting" : "Erreur lors de l'enregistrement des paramètres audio", + "Compact conversations list" : "Liste compacte des conversations", + "Chat appearance" : "Apparence de la discussion", + "Messages list" : "Liste de messages", + "Message bubbles" : "Bulles de message", + "Play sounds when participants join or leave a call" : "Jouer un son lorsque des participants rejoignent ou quittent un appel", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Actuellement non disponible sur iPhone et iPad en raison de restrictions techniques par le fabricant", + "Notification settings" : "Paramètres de notification", + "Sounds for chat and call notifications" : "Sons pour les notifications d'appel et de conversation", + "Invalid language ({languageId})" : "Langue invalide ({languageId})", + "Default language" : "Langue par défaut", + "Default language ({languageName})" : "Langue par défaut ({languageName})", + "Error when trying to load the available live translation languages" : "Erreur lors du chargement des langues disponibles pour la traduction en direct", + "Error when trying to set live translation language" : "Erreur lors de la tentative de configuration de la langue de traduction en direct", + "Set language used to show the transcriptions" : "Définir la langue utilisée pour afficher les transcriptions", + "Select location for attachments" : "Sélectionnez l'emplacement des pièces jointes", + "Error while setting attachment folder" : "Erreur lors de la définition du dossier pour la pièce jointe", + "Error while setting read status privacy" : "Erreur lors de la définition de la confidentialité de l'état de lecture", + "Error while setting typing status privacy" : "Erreur au paramétrage du partage du statut de saisie", + "Error while setting default media state" : "Erreur lors de la définition de l'état par défaut des médias", + "Turn camera and microphone off by default" : "Désactiver par défaut la caméra et le microphone", + "Blur camera background by default" : "Flouter l'arrière-plan de la caméra par défaut", + "Skip device preview before joining a call" : "Ignorer l'aperçu du périphérique avant de rejoindre un appel", + "Appearance & Sounds" : "Apparence et sons", + "Privacy" : "Confidentialité", + "Send read receipts" : "Envoyer des accusés de lecture", + "When off, all read statuses will be hidden" : "Si désactivé, tous les statuts de lecture seront cachés", + "Share typing status" : "Partager le statut de frappe", + "When off, all typing indicators will be hidden" : "Si désactivé, tous les statuts de frappe seront cachés", + "Attachments folder" : "Dossier des pièces jointes", + "Toggle full screen" : "Basculer en mode plein écran", + "Return to Home screen" : "Retourner à l'écran d'accueil", + "Search" : "Rechercher", + "Shortcuts while in a chat" : "Raccourci pendant la conversation", + "Focus the chat input" : "Maintenir le focus sur la zone de saisie", + "Unfocus the chat input to use shortcuts" : "Libérer le focus sur la zone de saisie pour utiliser les raccourcis", + "Edit your last message" : "Modifier votre dernier message", + "Shortcuts while in a call" : "Raccourcis pendant un appel", + "Camera on and off" : "Activer ou désactiver la webcam", + "Microphone on and off" : "Activer ou désactiver le microphone", + "Raise or lower hand" : "Lever ou baisser la main", + "Push to talk or push to mute" : "Appuyer pour parler ou pour mettre en silence", + "Zoom-in / zoom-out a screen share" : "Zoomer / Dézoomer un partage d'écran", + "Mouse wheel" : "Molette de souris", + "Start call silently" : "Lancer silencieusement l'appel", + "Start call" : "Lancer l'appel", + "End call" : "Terminer l'appel", + "This call has just ended" : "Cet appel vient de se terminer", + "You will be able to join the call only after a moderator starts it." : "Vous pourrez rejoindre l'appel seulement après son lancement par un modérateur.", + "End call for everyone" : "Mettre fin à l'appel pour tout le monde", + "Starting the recording" : "Lancement de l'enregistrement", + "Recording" : "Enregistrement", + "The call has been running for one hour." : "L'appel a duré une heure.", + "Cancel recording start" : "Annuler le lancement de l'enregistrement", + "Stop recording" : "Arrêter l'enregistrement", + "Send a reaction" : "Envoyer une réaction", + "React with {reaction}" : "Réagir avec {reaction}", + "All tasks done!" : "Toutes les tâches sont terminées !", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} tâche sur %n","{done} tâches sur %n","{done} tâches sur %n"], + "Add participants to this call" : "Ajouter des participants à cet appel", + "_%n participant in call_::_%n participants in call_" : ["%n participant dans cet appel","%n participants dans cet appel","%n participants dans cet appel"], + "Scheduled messages" : "Messages programmés", + "You are not allowed to enable screensharing" : "Vous n'êtes pas autorisé à partager l'écran", + "No screensharing" : "Aucun partage d'écran", + "Screensharing options" : "Options du partage d'écran", + "Enable screensharing" : "Activer le partage d'écran", + "Bad sent video and screen quality." : "Mauvaise qualité de la vidéo et du partage d'écran.", + "Bad sent screen quality." : "Mauvaise qualité du partage d'écran.", + "Bad sent video quality." : "Mauvaise qualité de la vidéo.", + "Bad sent audio, video and screen quality." : "Mauvaise qualité de l'audio, de la vidéo et du partage d'écran.", + "Bad sent audio and screen quality." : "Mauvaise qualité de l'audio et du partage d'écran.", + "Bad sent audio and video quality." : "Mauvaise qualité de l'audio et de la vidéo.", + "Bad sent audio quality." : "Mauvaise qualité de l'audio.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Disable background blur" : "Désactiver le flou d'arrière-plan", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient ne pas voir votre écran.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous voir.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver votre vidéo pendant le partage d'écran.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à voir votre écran. Pour améliorer la situation, essayez de désactiver votre partage d'écran.", + "Disable screenshare" : "Désactiver le partage d'écran", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver le flou d'arrière-plan ou votre vidéo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants pourraient avoir du mal à vous comprendre et à vous voir. Pour améliorer la situation, essayez de désactiver votre vidéo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Votre connexion internet ou votre ordinateur sont surchargés et les autres participants peuvent avoir du mal à vous comprendre.", + "Screen sharing is not supported by your browser." : "Le partage d'écran n'est pas pris en charge par votre navigateur.", + "Screen sharing requires the page to be loaded through HTTPS." : "Le partage d'écran nécessite que la page soit chargée en HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Le partage d’écran nécessite que la page soit chargée en HTTPS.", + "An error occurred while starting screensharing." : "Une erreur est survenue lors du démarrage du partage d’écran.", + "Select virtual background" : "Sélectionner un arrière-plan virtuel", + "Show your screen" : "Afficher votre écran", + "Stop screensharing" : "Terminer le partage d'écran", + "Mute others" : "Mettre en sourdine les autres", + "Start recording" : "Lancer l'enregistrement", + "Set up breakout rooms" : "Configurer les salles de sous-groupes", + "Download attendance list" : "Télécharger la liste de présence", + "Open Calendar" : "Ouvrir Agenda", + "Remove participant {name}" : "Retirer le participant nommé {name}", + "Would you like to delete this conversation?" : "Souhaitez-vous supprimer cette conversation ?", + "Are you sure you want to delete this conversation?" : "Êtes-vous sûr de vouloir supprimer cette conversation ?", + "Delete now" : "Supprimer maintenant", + "Keep" : "Conserver", + "Open dialpad" : "Ouvrir le clavier de composition du numéro", + "Select a region" : "Sélectionner une région", + "Local time: {time}" : "Heure locale : {time}", + "Scheduled {datetime}" : "Programmé {datetime}", + "Scheduled for {datetime}" : "Programmé pour {datetime}", + "Search …" : "Recherche…", + "Message without mention" : "Message sans mention", + "Mention myself" : "Me mentionner", + "Mention everyone" : "Mentionner tout le monde", + "Select a conversation" : "Sélectionner une conversation", + "Select a mode" : "Sélectionner un mode", + "You do not have permissions to access this conversation." : "Vous n'avez pas le droit d'accéder à cette conversation.", + "Join a different conversation or start a new one." : "Rejoindre une conversation ou en commencer une nouvelle.", + "The conversation does not exist" : "La conversation n'existe pas", + "Join a conversation or start a new one!" : "Rejoignez une conversation ou démarrez-en une nouvelle", + "Duplicate session" : "Session en double", + "Creating and joining a conversation with \"{userid}\"" : "Création et intégration d’une conversation avec « {userid} »", + "Join a conversation or start a new one" : "Rejoignez une conversation ou démarrez-en une nouvelle", + "Error while joining the conversation" : "Erreur lors de l’intégration à la conversation", + "Another user" : "Autre utilisateur", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utilisateur Nextcloud", + "User password" : "Mot de passe utilisateur", + "Talk conversation" : "Conversation Talk", + "Skip TLS verification" : "Ignorer la vérification TLS", + "Matrix server URL" : "URL du serveur Matrix", + "User" : "Utilisateur", + "Matrix channel" : "Canal Matrix", + "Mattermost server URL" : "URL du serveur Mattermost", + "Mattermost user" : "Utilisateur Mattermost", + "Team name" : "Nom d'équipe", + "Channel name" : "Nom du canal", + "Rocket.Chat server URL" : "URL du serveur Rocket.Chat", + "User name or email address" : "Identifiant ou adresse e-mail", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL du serveur Zulip", + "Bot user name" : "Nom d'utilisateur du bot", + "Bot API key" : "Clé API du bot", + "Zulip channel" : "Canal Zulip", + "API token" : "Jeton d'API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "Identifiant ou nom du serveur", + "Channel ID (prefixed with \"ID:\") or name" : "Nom du canal ou ID (préfixé par \"ID:\")", + "Channel" : "Canal", + "Login" : "S’identifier", + "Chat ID" : "Identifiant de la discussion", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL du serveur IRC (ex. chat.freenode.net:6667)", + "Nickname" : "Surnom", + "Connection password" : "Mot de passe de connexion", + "IRC channel" : "Canal IRC", + "Channel password" : "Mot de passe du canal", + "NickServ nickname" : "Nom d'utilisateur NickServ", + "NickServ password" : "Mot de passe NickServ", + "Use TLS" : "Utiliser TLS", + "Use SASL" : "Utiliser SASL", + "Tenant ID" : "Identifiant Tenant", + "Client ID" : "ID Client", + "Team ID" : "Identifiant Team", + "Thread ID" : "Identifiant du fil de discussion", + "XMPP/Jabber server URL" : "URL du serveur XMPP/Jabber", + "MUC server URL" : "URL du serveur MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Messages épinglés", + "Media" : "Médias", + "Polls" : "Sondages", + "Deck cards" : "Cartes Deck", + "Voice messages" : "Messages vocaux", + "Locations" : "Lieux", + "Call recordings" : "Enregistrements des appels", + "Audio" : "Son", + "Show all pinned messages" : "Montrer tous les messages épinglés", + "Show all media" : "Montrer tous les médias", + "Show all files" : "Afficher tous les fichiers", + "Show all polls" : "Afficher tous les sondages", + "Show all deck cards" : "Montrer toutes les cartes Deck", + "Show all voice messages" : "Afficher tous les messages vocaux", + "Show all locations" : "Montrer tous les emplacements", + "Show all call recordings" : "Afficher tous les enregistrements d'appels", + "Show all audio" : "Montrer tous les audio", + "Show all other" : "Montrer tous les autres", + "Follow conversation settings" : "Utiliser les paramètres de la conversation", + "Group" : "Groupe", + "Team" : "Équipe", + "You reconnected to the call" : "Vous avez rejoint l'appel à nouveau", + "{actor} reconnected to the call" : "{actor} a rejoint l'appel à nouveau", + "You added {user0} and {user1}" : "Vous avez ajouté {user0} et {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Vous avez ajouté {user0}, {user1} et %n autre participant","Vous avez ajouté {user0}, {user1} et %n autres participants","Vous avez ajouté {user0}, {user1} et %n autres participants"], + "An administrator added you and {user0}" : "Un administrateur a ajouté {user0} et vous", + "{actor} added you and {user0}" : "{actor} a ajouté {user0} et vous", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un administrateur a ajouté {user0}, vous et %n autre participant","Un administrateur a ajouté {user0}, vous et %n autres participants","Un administrateur a ajouté {user0}, vous et %n autres participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} a ajouté {user0}, vous et %n autre participant","{actor} a ajouté {user0}, vous et %n autres participants","{actor} a ajouté {user0}, vous et %n autres participants"], + "An administrator added {user0} and {user1}" : "Un administrateur a ajouté {user0} et {user1}", + "{actor} added {user0} and {user1}" : "{actor} a ajouté {user0} et {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un administrateur a ajouté {user0}, {user1} et %n autre participant","Un administrateur a ajouté {user0}, {user1} et %n autres participants","Un administrateur a ajouté {user0}, {user1} et %n autres participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} a ajouté {user0}, {user1} et %n autre participant","{actor} a ajouté {user0}, {user1} et %n autres participants","{actor} a ajouté {user0}, {user1} et %n autres participants"], + "You removed {user0} and {user1}" : "Vous avez retiré {user0} et {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Vous avez retiré {user0}, {user1} et %n autre participant","Vous avez retiré {user0}, {user1} et %n autres participants","Vous avez retiré {user0}, {user1} et %n autres participants"], + "An administrator removed you and {user0}" : "Un administrateur vous a retiré et {user0}", + "{actor} removed you and {user0}" : "{actor} vous a retiré et {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un administrateur vous a retiré, {user0} et %n autre participant","Un administrateur vous a retiré, {user0} et %n autres participants","Un administrateur vous a retiré, {user0} et %n autres participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} vous a retiré, {user0} et %n autre participant","{actor} vous a retiré, {user0} et %n autres participants","{actor} vous a retiré, {user0} et %n autres participants"], + "An administrator removed {user0} and {user1}" : "Un administrateur a retiré {user0} et {user1}", + "{actor} removed {user0} and {user1}" : "{actor} a retiré {user0} et {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un administrateur a retiré {user0}, {user1} et %n autre participant","Un administrateur a retiré {user0}, {user1} et %n autres participants","Un administrateur a retiré {user0}, {user1} et %n autres participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} a retiré {user0}, {user1} et %n autre participant","{actor} a retiré {user0}, {user1} et %n autres participants","{actor} a retiré {user0}, {user1} et %n autres participants"], + "You and {user0} joined the call" : "Vous et {user0}avez rejoint l'appel", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vous, {user0} et %n autre participant avez rejoint l'appel","Vous, {user0} et %n autres participants avez rejoint l'appel","Vous, {user0} et %n autres participants avez rejoint l'appel"], + "{user0} and {user1} joined the call" : "{user0} et {user1} ont rejoint l'appel", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} et %n autre participant ont rejoint l'appel","{user0}, {user1} et %n autres participants ont rejoint l'appel","{user0}, {user1} et %n autres participants ont rejoint l'appel"], + "You and {user0} left the call" : "Vous et {user0} avez quitté l'appel", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["{user0}, %n autre participant et vous avez quitté l'appel","{user0}, %n autres participants et vous avez quitté l'appel","Vous, {user0}, %n autres participants avez quitté l'appel"], + "{user0} and {user1} left the call" : "{user0} et {user1} ont quitté l'appel", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} et %n autre participant ont quitté l'appel","{user0}, {user1} et %n autres participants ont quitté l'appel","{user0}, {user1} et %n autres participants ont quitté l'appel"], + "You promoted {user0} and {user1} to moderators" : "Vous avez promu {user0} et {user1} modérateurs", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Vous avez promu {user0}, {user1} et %n autre participant modérateurs","Vous avez promu {user0}, {user1} et %n autres participants modérateurs","Vous avez promu {user0}, {user1} et %n autres participants modérateurs"], + "An administrator promoted you and {user0} to moderators" : "Un administrateur vous a promu modérateur ainsi que {user0}", + "{actor} promoted you and {user0} to moderators" : "{actor} vous a promu modérateur ainsi que {user0}", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un administrateur a promu {user0}, %n autre participant et vous modérateurs","Un administrateur a promu {user0}, %n autres participants et vous modérateurs","Un administrateur vous a promu modérateur ainsi que {user0} et %n autres participants"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} a promu {user0}, %n autre participant et vous modérateurs","{actor} a promu {user0}, %n autres participants et vous modérateurs","{actor} vous a promu modérateur ainsi que {user0} et %n autres participants"], + "An administrator promoted {user0} and {user1} to moderators" : "Un administrateur a promu {user0} et {user1} modérateurs", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} a promu {user0} et {user1} modérateurs", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un administrateur a promu {user0}, {user1} et %n autre participant modérateurs","Un administrateur a promu {user0}, {user1} et %n autres participants modérateurs","Un administrateur a promu {user0}, {user1} et %n autres participants modérateurs"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} a promu {user0}, {user1} et %n autre participant modérateurs","{actor} a promu {user0}, {user1} et %n autres participants modérateurs","{actor} a promu {user0}, {user1} et %n autres participants modérateurs"], + "You demoted {user0} and {user1} from moderators" : "Vous avez retiré {user0} et {user1} de la liste des modérateurs", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Vous avez retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","Vous avez retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","Vous avez retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "An administrator demoted you and {user0} from moderators" : "Un administrateur vous a retiré de la liste des modérateurs ainsi que {user0} ", + "{actor} demoted you and {user0} from moderators" : "{actor} vous a retiré de la liste des modérateurs ainsi que {user0}", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un administrateur vous a retiré la liste des modérateurs ainsi que {user0} et %n autre participant","Un administrateur vous a retiré de la liste des modérateurs ainsi que{user0} et %n autres participants","Un administrateur vous a retiré de la liste des modérateurs ainsi que{user0} et %n autres participants"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autre participant","{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autres participants","{actor} vous a retiré de la liste des modérateurs ainsi que {user0} et %n autres participants"], + "An administrator demoted {user0} and {user1} from moderators" : "Un administrateur a retiré {user0} et {user1} de la liste des modérateurs", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} a retiré {user0} et {user1} de la liste des modérateurs", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un administrateur a retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","Un administrateur a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","Un administrateur a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} a retiré {user0}, {user1} et %n autre participant de la liste des modérateurs","{actor} a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs","{actor} a retiré {user0}, {user1} et %n autres participants de la liste des modérateurs"], + "You:" : "Vous : ", + "You: {lastMessage}" : "Moi : {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(modifié par vous)", + "(edited by a deleted user)" : "(modifié par un utilisateur supprimé)", + "(edited by {moderator})" : "(modifié par {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Vous essayez de rejoindre une conversation mais vous avez déjà une session ouverte sur une autre fenêtre ou un autre périphérique. Ce n'est pas possible pour l'instant dans Nextcloud Talk : que voulez-vous faire ?", + "Leave this page" : "Quitter cette page", + "Join here" : "Rejoignez la conversation", + "Deck card has been posted to {conversation}" : "Une carte Deck a été postée dans {conversation}", + "An error occurred while posting deck card to conversation" : "Une erreur est survenue lors de la publication de la carte Deck dans la conversation.", + "Post to a conversation" : "Envoyer dans une conversation", + "Post to conversation" : "Envoyer dans la conversation", + "The recording failed. Please contact your administrator." : "L'enregistrement a échoué. Veuillez contacter votre administrateur.", + "Location has been posted to {conversation}" : "L'emplacement a été posté dans {conversation}", + "An error occurred while posting location to conversation" : "Une erreur est survenue lors de la publication de l'emplacement dans la conversation", + "Share to a conversation" : "Partager dans une conversation", + "Share to conversation" : "Partager dans la conversation", + "In conversation" : "Dans une conversation", + "Search in conversation: {conversation}" : "Rechercher dans la conversation : {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vos requêtes sont bridées pour le moment par la protection anti force brute", + "Error while clearing conversation history" : "Erreur à la suppression de l'historique de la conversation", + "Error occurred while allowing guests" : "Une erreur est survenue lors de l'autorisation des invités", + "Error occurred while disallowing guests" : "Une erreur est survenue lors de l'interdiction des invités", + "Error occurred when restricting the conversation to moderator" : "Une erreur est survenue lors de la restriction de la conversation au modérateur", + "Error occurred when opening the conversation to everyone" : "Une erreur est survenue lors de l'ouverture de la conversation à tout le monde", + "Conversation password has been saved" : "Le mot de passe de cette conversation a été enregistré", + "Conversation password has been removed" : "Le mot de passe de cette conversation a été supprimé", + "Error occurred while saving conversation password" : "Une erreur est survenue lors de l'enregistrement du mot de passe de la conversation", + "Call recording is starting." : "L'enregistrement de l'appel est lancé.", + "Call recording stopped while starting." : "L'enregistrement de l'appel s'est arrêté durant son lancement.", + "Call recording stopped. You will be notified once the recording is available." : "Enregistrement d'appel stoppé. Vous serez averti quand l'enregistrement sera disponible.", + "Conversation picture set" : "L'image de conversation a été définie", + "Conversation picture deleted" : "L'image de conversation a été supprimée", + "Could not delete the conversation picture" : "Impossible de supprimer l'image de cette conversation.", + "Could not remove the automatic expiration" : "Impossible de retirer l'expiration automatique", + "Could not post message: {errorMessage}" : "Impossible de publier le message : {errorMessage}", + "Participant is banned successfully" : "Le participant a été banni avec succès", + "Error while banning the participant" : "Erreur lors de l'exclusion du participant", + "An error occurred while fetching the participants" : "Une erreur est survenue pendant la récupération des participants", + "Could not send invitation to {actorId}" : "Impossible d'envoyer une invitation à {actorId}", + "Invitations sent" : "Invitations envoyées", + "Error occurred when sending invitations" : "Une erreur est survenue lors de l'envoi d'invitations", + "Failed to join the conversation." : "Impossible de rejoindre la conversation.", + "An error occurred while creating breakout rooms" : "Une erreur est survenue lors de la création des salles de sous-groupes", + "An error occurred while re-ordering the attendees" : "Une erreur est survenue lors de la réorganisation des participants", + "An error occurred while deleting breakout rooms" : "Une erreur est survenue lors de la suppression des salles de sous-groupes", + "An error occurred while starting breakout rooms" : "Une erreur est survenue lors du démarrage des salles de sous-groupes", + "An error occurred while stopping breakout rooms" : "Une erreur est survenue lors de l'arrêt des salles de sous-groupes", + "An error occurred while sending a message to the breakout rooms" : "Une erreur est survenue lors de l'envoi d'un message aux salles de sous-groupes", + "An error occurred while requesting assistance" : "Une erreur est survenue lors de la demande d'assistance", + "An error occurred while resetting the request for assistance" : "Une erreur est survenue lors de l'annulation de la demande d'assistance", + "An error occurred while joining breakout room" : "Une erreur est survenue lors de la connexion au salon privé", + "Failed to rename the thread" : "Impossible de renommer le fil de discussion", + "Error fetching upcoming events" : "Erreur à la récupération des événements à venir", + "Error fetching upcoming reminders" : "Erreur à la récupération des rappels à venir", + "An error occurred while accepting an invitation" : "Une erreur est survenue lors de l'acceptation d'une invitation", + "An error occurred while rejecting an invitation" : "Une erreur est survenue lors du rejet d'une invitation", + "{guest} (guest)" : "{guest} (invité)", + "Poll draft has been saved" : "Le brouillon du sondage a été enregistré", + "An error occurred while saving the draft" : "Une erreur est survenue lors de l'enregistrement du brouillon", + "An error occurred while submitting your vote" : "Une erreur est survenue lors de votre participation au sondage", + "An error occurred while ending the poll" : "Une erreur est survenue au moment de terminer le sondage", + "An error occurred while deleting the poll draft" : "Une erreur est survenue lors de la suppression du brouillon du sondage", + "Poll \"{name}\" was created by {user}. Click to vote" : "Le sondage « {name} » a été créé par {user}. Cliquez pour voter", + "Failed to add reaction" : "Impossible d'ajouter la réaction", + "Failed to remove reaction" : "Impossible de supprimer la réaction", + "Error while uploading file \"{fileName}\"" : "Erreur lors du téléversement du fichier \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Espace libre insuffisant pour téléverser le fichier \"{fileName}\"", + "You are not allowed to share files" : "Vous n'êtes pas autorisé à partager des fichiers", + "Error while sharing file" : "Erreur lors du partage du fichier", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Le navigateur que vous utilisez n'est pas entièrement pris en charge par Nextcloud Talk. Veuillez utiliser la dernière version de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Dans %n heure","Dans %n heures","Dans %n heures"], + "_%n minute _::_%n minutes_" : ["%n minute","%n minutes","%n minutes"], + "In {hours} and {minutes}" : "Dans {hours} et {minutes}", + "_In %n minute_::_In %n minutes_" : ["Dans %n minute","Dans %n minutes","Dans %n minutes"], + "Later today – {timeLocale}" : "Plus tard aujourd'hui – {timeLocale}", + "Set time for later today" : "Sélectionner l'horaire pour plus tard aujourd'hui", + "Tomorrow – {timeLocale}" : "Demain – {timeLocale}", + "Set time for tomorrow" : "Sélectionner l'horaire pour demain", + "This weekend – {timeLocale}" : "Ce week-end – {timeLocale}", + "Set time for this weekend" : "Sélectionner l'horaire pour ce week-end", + "Next week – {timeLocale}" : "Semaine prochaine – {timeLocale}", + "Set time for next week" : "Sélectionner l'horaire pour la semaine prochaine", + "Message link copied to clipboard" : "Le lien vers le message a été copié dans le presse-papier", + "Conversation link copied to clipboard" : "Lien de la conversation copié dans le presse-papier", + "The link could not be copied" : "Le lien n'a pas pu être copié", + "Error while parsing a PROPFIND error" : "Erreur lors de l'analyse d'une erreur PROPFIND", + "Sending signaling message has failed" : "L'envoi du message de signalement a échoué", + "Lost connection to signaling server. Trying to reconnect." : "Connexion au serveur perdue. Essayez de vous reconnecter", + "Lost connection to signaling server." : "Connexion au serveur de signalement perdue.", + "Connecting is taking longer than expected …" : "La connexion prend plus de temps que prévu…", + "Failed to connect. Retrying …" : "Échec de la connexion. Nouvel essai…", + "Failed to connect. The signaling server may be set up incorrectly" : "Échec de la connexion. Le serveur de signalisation est peut-être mal configuré.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Le serveur de signalement configuré doit être mis à jour pour être compatible avec cette version de Talk. Veuillez contacter votre administrateur.", + "Please restart the app." : "Merci de redémarrer l'application.", + "Please reload the page." : "Veuillez recharger la page.", + "Please try to restart the app." : "Merci d'essayer de redémarrer l'application.", + "Please try to reload the page." : "Merci d'essayer de recharger la page.", + "Do not disturb" : "Ne pas déranger", + "Away" : "Absent", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Caméra {number}", + "Speaker {number}" : "Haut-parleur {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Vous semblez parler avec le micro coupé, s'il vous plaît, rétablissez votre son pour que les autres vous entendent", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Impossible d'établir une connexion avec au moins un participant. un serveur TURN est probablement nécessaire. Veuillez demander à votre administrateur d'en installer un, en suivant {linkstart}cette documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "L'opération dure plus longtemps que prévu. Si les autorisations média (audio et vidéo) ont déjà été données, re-démarrez votre navigateur web.", + "Access to microphone & camera is only possible with HTTPS" : "L'accès au microphone et à la caméra est seulement possible en HTTPS", + "Please move your setup to HTTPS" : "Veuillez modifier votre installation afin d'utiliser HTTPS", + "Access to microphone & camera was denied" : "L'accès au microphone et à la caméra a été refusé", + "WebRTC is not supported in your browser" : "WebRTC n'est pas pris en charge par votre navigateur", + "Please use a different browser like Firefox or Chrome" : "Veuillez utiliser un autre navigateur comme Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erreur lors de l'accès au microphone et à la caméra", + "%s Talk on your mobile devices" : "%s Talk sur vos appareils mobiles", + "Join conversations at any time, anywhere, on any device." : "Rejoignez des conversations n'importe quand, n'importe où, depuis n'importe quel appareil.", + "Android app" : "Application Android", + "iOS app" : "Application iOS", + "__language_name__" : "Français", + "Webhook Demo" : "Démo Webhook", + "Call summary (%s)" : "Résumé de l'appel (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Le robot chargé de résumer l'appel publie un message de synthèse après l'appel, énumérant tous les participants et décrivant les tâches à accomplir.", + "Tasks" : "Tâches", + "Notes" : "Notes", + "Reports" : "Rapports", + "Decisions" : "Décisions", + "Agenda" : "Agenda", + "Call summary" : "Résumé de l'appel", + "Call summary - {title}" : "Résumé de l'appel - {title}", + "Talk conversation for event" : "Conversation Talk pour l'événement", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push est installé, cela améliore les performances des clients de synchronisation.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} n'est pas installé, cela peut entraîner des problèmes de performances lors de l'utilisation de clients de synchronisation.", + "Next meeting" : "Prochaine réunion", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Planifiez une réunion à partir de votre calendrier. Une conversation Talk doit être définie comme emplacement pour apparaître ici.", + "Join conversations from remote Nextcloud servers" : "Rejoindre les conversations des serveurs Nextcloud distants", + "Your default media state has been saved" : "L'état par défaut des médias a été sauvegardé", + "Set reminder for later today" : "Placer un rappel pour plus tard aujourd'hui", + "Set reminder for tomorrow" : "Placer un rappel pour demain", + "Set reminder for this weekend" : "Placer un rappel pour ce week-end", + "Set reminder for next week" : "Placer un rappel pour la semaine prochaine", + "Generate summary" : "Générer un résumé", + "Open poll • You voted already" : "Sondage ouvert • Vous avez déjà voté", + "Open poll • Click to vote" : "Sondage ouvert • Cliquez pour voter", + "Poll • Ended" : "Sondage • Terminé", + "Talk recording from {time} ({conversation})" : "Enregistrement de la conversation à partir de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Résultats du sondage • %n vote","Résultats du sondage • %n votes","Résultats du sondage • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Sondage ouvert • %n vote","Sondage ouvert • %n votes","Sondage ouvert • %n votes"], + "Submit vote" : "Valider le vote", + "Your privacy setting has been saved" : "Vos paramètres de confidentialité ont été enregistrés", + "Your personal setting has been saved" : "Vos paramètres personnels ont été sauvegardés", + "Failed to save sounds setting" : "Impossible d'enregistrer les paramètres audio", + "Sounds setting saved" : "Paramètres audio enregistrés", + "Always shown if recording consent is required" : "Toujours visible si le consentement à l'enregistrement est requis", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk a été mis à jour, vous ne pouvez pas démarrer ou rejoindre un appel.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Vous avez déjà ouvert une conversation dans une autre fenêtre ou sur un autre périphérique. Ce n'est pas supporté pour l'instant dans Nextcloud Talk, votre session a été fermée. ", + "Nextcloud Talk was updated." : "Nextcloud Talk a été mis à jour.", + "Nextcloud is in maintenance mode." : "Nextcloud est en mode maintenance.", + "Nextcloud Talk Federation was updated." : "La fédération Nextcloud Talk a été mise à jour.", + "Enable live translation" : "Activer la traduction en direct", + "I picked list style" : "J'ai choisi le style liste", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hé ! Utilisez-vous Talk en mode liste ou avec des bulles de message ?" +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/ga.js b/l10n/ga.js new file mode 100644 index 0000000..7794dfc --- /dev/null +++ b/l10n/ga.js @@ -0,0 +1,2262 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "comhrá", + "(Duration %s)" : "(Ré %s)", + "You attended a call with {user1}" : "D'fhreastail tú ar ghlao le {user1}", + "_%n guest_::_%n guests_" : ["%n aoi","%n aíonna","%n aíonna","%n aíonna","%n aíonna"], + "You attended a call with {user1} and {user2}" : "D'fhreastail tú ar ghlao le {user1} agus {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "D'fhreastail tú ar ghlao le {user1}, {user2} agus {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "D'fhreastail tú ar ghlao le {user1}, {user2}, {user3} agus {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "D'fhreastail tú ar ghlao le {user1}, {user2}, {user3}, {user4} agus {user5}", + "_%n other_::_%n others_" : ["%n eile","%n eile","%n eile","%n eile","%n eile"], + "{actor} invited you to {call}" : "Thug {actor} cuireadh duit {call}", + "You were invited to a conversation or had a call" : "Tugadh cuireadh duit chuig chomhránó bhí glaochagat", + "Other activities" : "Gníomhaíochtaí eile", + "Talk" : "Caint", + "Guest" : "Aoi", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "##Fáilte go Nextcloud Talk!\nSa chomhrá seo cuirfear ar an eolas thú faoi ghnéithe nua atá ar fáil in Nextcloud Talk.", + "## New in Talk %s" : "## Nua i gCaint %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Is féidir Microsoft Edge agus Safari a úsáid anois chun páirt a ghlacadh i nglaonna fuaime agus físe", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Bíonn comhráite duine le duine leanúnach anois agus ní féidir iad a iompú ina gcomhráite grúpa trí thimpiste a thuilleadh. Chomh maith leis sin nuair a fhágann duine de na rannpháirtithe an comhrá, ní scriostar an comhrá go huathoibríoch a thuilleadh. Ach amháin má fhágann an dá rannpháirtí, scriostar an comhrá ón bhfreastalaí", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Is féidir leat na rannpháirtithe go léir a chur ar an eolas anois trí \"@all\" a phostáil isteach sa chomhrá", + "- With the \"arrow-up\" key you can repost your last message" : "- Leis an eochair \"arrow-up\" is féidir leat do theachtaireacht dheireanach a athphostáil", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Is féidir orduithe a bheith ag Talk anois, seol \"/help\" mar theachtaireacht chomhrá féachaint an bhfuil roinnt cumraithe ag do riarthóir", + "- With projects you can create quick links between conversations, files and other items" : "- Le tionscadail is féidir leat naisc thapa a chruthú idir comhráite, comhaid agus míreanna eile", + "- You can now mention guests in the chat" : "- Is féidir leat aíonna a lua sa chomhrá anois", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Is féidir stocaireacht a bheith ag comhráite anois. Tabharfaidh sé seo deis do mhodhnóirí a bheith páirteach sa chomhrá agus glaoch a chur orthu cheana féin chun an cruinniú a ullmhú, fad a bheidh ar úsáideoirí agus ar aíonna fanacht", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Is féidir leat anois freagra díreach a thabhairt ar theachtaireachtaí a thugann níos mó comhthéacs do na húsáideoirí eile cad faoi do theachtaireacht", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Déanfaidh cuardach do chomhráite agus do rannpháirtithe na comhráite atá agat cheana féin a scagadh freisin, rud a fhágfaidh go mbeidh sé i bhfad níos éasca teacht ar chomhráite roimhe seo", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Is féidir leat grúpaí úsáideoirí saincheaptha a chur le comhráite anois nuair a bhíonn an aip ciorcail suiteáilte", + "- Check out the new grid and call view" : "- Amharc ar an eangach nua agus an radharc glaonna", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Is féidir leat comhaid a uaslódáil anois agus a tharraingt agus a scaoil go díreach ó do ghléas isteach sa chomhrá", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Osclaítear comhaid roinnte go díreach laistigh den radharc comhrá leis na haipeanna breathnóireachta", + "- You can now search for chats and messages in the unified search in the top bar" : "- Is féidir leat comhráite agus teachtaireachtaí a chuardach anois sa chuardach aontaithe sa bharra barr", + "- Spice up your messages with emojis from the emoji picker" : "- Spice suas do theachtaireachtaí le emojis ón roghnóir emoji", + "- You can now change your camera and microphone while being in a call" : "- Is féidir leat do cheamara agus micreafón a athrú anois agus tú ar ghlao", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Tabhair comhthéacs éigin le cur síos do do chuid comhráite agus oscail suas é ionas gur féidir le húsáideoirí logáilte isteach é a aimsiú agus dul isteach iontu féin", + "- See a read status and send failed messages again" : "- Féach ar stádas léite agus seol teachtaireachtaí teipthe arís", + "- Raise your hand in a call with the R key" : "- Ardaigh do lámh i nglao leis an eochair R", + "- Join the same conversation and call from multiple devices" : "- Glac páirt sa chomhrá céanna agus glaoigh ó ilfheistí", + "- Send voice messages, share your location or contact details" : "- Seol teachtaireachtaí gutha, roinn do shuíomh nó sonraí teagmhála", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Cuir grúpaí le comhrá agus cuirfear baill nua den ghrúpa leis go huathoibríoch mar rannpháirtithe", + "- A preview of your audio and video is shown before joining a call" : "- Taispeántar réamhamharc ar do chuid fuaime agus físe sula nglacann tú páirt i nglao", + "- You can now blur your background in the newly designed call view" : "- Is féidir leat do chúlra a gheamhú anois san amharc glaonna nua-dheartha", + "- Moderators can now assign general and individual permissions to participants" : "- Is féidir le modhnóirí ceadanna ginearálta agus aonair a shannadh do rannpháirtithe anois", + "- You can now react to chat messages" : "- Is féidir leat freagairt anois do theachtaireachtaí comhrá", + "- In the sidebar you can now find an overview of the latest shared items" : "- Sa bharra taoibh is féidir leat forbhreathnú a fháil anois ar na míreanna comhroinnte is déanaí", + "- Use a poll to collect the opinions of others or settle on a date" : "- Úsáid vótaíocht chun tuairimí daoine eile a bhailiú nó socrú ar dháta", + "- Configure an expiration time for chat messages" : "- Cumraigh am éaga le haghaidh teachtaireachtaí comhrá", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Tosaigh glaonna gan daoine eile a chur ar an eolas i gcomhráite móra. Is féidir leat fógraí glaonna aonair a sheoladh nuair a bheidh an glao tosaithe.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Seol teachtaireachtaí comhrá gan fógra a thabhairt do na faighteoirí ar eagla nach bhfuil sé práinneach", + "- Emojis can now be autocompleted by typing a \":\"" : "- Seol teachtaireachtaí comhrá gan fógra a thabhairt do na faighteoirí ar eagla nach bhfuil sé práinneach", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Nasc míreanna éagsúla ag baint úsáide as an roghnóir cliste nua trí \"/\" a chlóscríobh", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Is féidir le modhnóirí seomraí ar leithligh a chruthú anois (tá an t-inneall Ardfheidhmíochta ag teastáil)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Is féidir glaonna a thaifeadadh anois (tá an t-Inneall Ardfheidhmíochta ag teastáil)", + "- Conversations can now have an avatar or emoji as icon" : "- Is féidir avatar nó emoji a bheith mar dheilbhín anois ag comhráite", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Tá cúlraí fíorúla ar fáil anois chomh maith leis an gcúlra doiléir i bhfísghlaonna", + "- Reactions are now available during calls" : "- Tá frithghníomhartha ar fáil anois le linn glaonna", + "- Typing indicators show which users are currently typing a message" : "- Léiríonn táscairí clóscríofa cé na húsáideoirí atá ag clóscríobh teachtaireachta faoi láthair", + "- Groups can now be mentioned in chats" : "- Is féidir grúpaí a lua anois i gcomhráite", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Déantar taifeadtaí glaonna a thrascríobh go huathoibríoch má tá aip soláthraí trascríobh cláraithe", + "- Chat messages can be translated if a translation provider app is registered" : "- Is féidir teachtaireachtaí comhrá a aistriú má tá aip soláthraí aistriúcháin cláraithe", + "- **Markdown** can now be used in _chat_ messages" : "- Is féidir **Markdown** a úsáid anois i dteachtaireachtaí _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Tá webooks ar fáil anois chun róbónna a chur i bhfeidhm. Féach an doiciméadú le haghaidh tuilleadh eolais https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Socraigh meabhrúchán ar theachtaireacht chomhrá le cur ar an eolas níos déanaí arís", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Úsáid an comhrá **Nóta le do thoil féin** chun nótaí a ghlacadh agus faisnéis a roinnt idir do ghléasanna", + "- Captions allow to send a message with a file at the same time" : "- Ceadaíonn fotheidil teachtaireacht a sheoladh le comhad ag an am céanna", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Tá físeán an chainteora le feiceáil anois agus an scáileán á roinnt agus déantar freagairtí glaonna a bheochan", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Is féidir le húdair agus modhnóirí logáilte isteach teachtaireachtaí a chur in eagar anois ar feadh 6 huaire", + "- Unsent message drafts are now saved in your browser" : "- Déantar dréachtaí teachtaireachta nár seoladh a shábháil i do bhrabhsálaí anois", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Is féidir comhrá téacs a dhéanamh anois ar bhealach cónasctha le freastalaithe Talk eile", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Is féidir le modhnóirí cuntais agus aíonna a thoirmeasc anois chun iad a chosc ó dhul isteach arís i gcomhrá", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Taispeántar glaonna atá le teacht ó imeachtaí féilire nasctha agus athsholáthairtí lasmuigh den oifig sna comhráite anois", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Is féidir glaonna a dhéanamh anois ar bhealach cónasctha le freastalaithe Talk eile (tá an t-inneall Ardfheidhmíochta ag teastáil)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Cliant deisce Nextcloud Talk do Windows, macOS agus Linux a thabhairt isteach: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Déan achoimre ar thaifeadtaí glaonna agus teachtaireachtaí neamhléite i gcomhráite leis an Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Cruinnithe feabhsaithe le haíonna a dtugtar cuireadh dóibh trína seoladh ríomhphoist, iompórtáil liostaí rannpháirtithe, dréachtaí le haghaidh pobalbhreithe agus íoslódáil liostaí rannpháirtithe glaonna", + "- Archive conversations to stay focused" : "- Cuir comhráite sa chartlann chun fanacht dírithe", + "- Schedule a meeting into your calendar from within a conversation" : "- Sceidealaigh cruinniú isteach i d'fhéilire ó laistigh de chomhrá", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cuardaigh teachtaireachtaí an chomhrá reatha go díreach sa bharra taoibh ar dheis", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Féach ar níos mó comhrá ar an gcéad amharc leis an liosta dlúth nua (cumasaigh sna socruithe Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Sioncrónaíonn comhráite cruinnithe an teideal agus an cur síos ón bhféilire anois agus folaítear iad le scagaire cuardaigh go dtí go mbíonn siad gar don tús.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marcáil comhráite mar íogair sna socruithe fógraí, chun ábhar an teachtaireachta a cheilt ón liosta comhráite agus ó na fógraí", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Chun fógraí brú a fháil le linn \"Ná cuir isteach\", marcáil comhráite mar thábhachtacha", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Cuir rannpháirtithe eile le glao duine le duine chun glao grúpa nua a chruthú láithreach", + "- Use threads to keep your chat and discussions organized" : "- Bain úsáid as snáitheanna chun do chomhrá agus do phlé a choinneáil eagraithe", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Trascríbhinní beo ar fáil anois le linn an ghlao (éilíonn sé seo an ExApp tras-scríofa beo agus an cúltaca ardfheidhmíochta)", + "- Moderators can now pin messages so they are kept at the top" : "- Is féidir le modhnóirí teachtaireachtaí a phionáil anois ionas go gcoimeádtar iad ag an mbarr", + "- Schedule a message to send it at a later time" : "- Sceideal teachtaireacht le seoladh ag am níos déanaí", + "_All %n participant_::_All %n participants_" : ["Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí"], + "Talk updates ✅" : "Labhair nuashonruithe ✅", + "Reaction deleted by author" : "An t-imoibriú scriosta ag an údar", + "{actor} created the conversation" : "Chruthaigh {aisteoir} an comhrá", + "You created the conversation" : "Chruthaigh tú an comhrá", + "System created the conversation" : "Chruthaigh an córas an comhrá", + "An administrator created the conversation" : "Chruthaigh riarthóir an comhrá", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh {actor} an comhrá ó \"%1$s\" go \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh tú an comhrá ó \"%1$s\" go \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh riarthóir an comhrá ó \"%1$s\" go \"%2$s\"", + "{actor} set the description" : "socraigh {actor} an cur síos", + "You set the description" : "Shocraigh tú an cur síos", + "An administrator set the description" : "Shocraigh riarthóir an cur síos", + "{actor} removed the description" : "bhain {actor} an cur síos", + "You removed the description" : "Bhain tú an cur síos", + "An administrator removed the description" : "Bhain riarthóir an cur síos", + "You started a silent call" : "Chuir tú tús le glao ciúin", + "Outgoing silent call" : "Glao ciúin amach", + "{actor} started a silent call" : "chuir {actor} tús le glao ciúin", + "Incoming silent call" : "Glao ciúin ag teacht isteach", + "You started a call" : "Thosaigh tú glao", + "Outgoing call" : "Glao amach", + "{actor} started a call" : "Chuir {actor} tús le glao", + "Incoming call" : "Glao ag teacht isteach", + "{actor} joined the call" : "Chuaigh {actor} isteach sa ghlao", + "You joined the call" : "Ghlac tú páirt sa ghlao", + "{actor} left the call" : "D'fhág {actor} an glao", + "You left the call" : "D'fhág tú an glao", + "{actor} unlocked the conversation" : "Dhíghlasáil {actor} an comhrá", + "You unlocked the conversation" : "Dhíghlasáil tú an comhrá", + "An administrator unlocked the conversation" : "Dhíghlasáil riarthóir an comhrá", + "{actor} locked the conversation" : "ghlas {actor} an comhrá", + "You locked the conversation" : "Chuir tú glas ar an gcomhrá", + "An administrator locked the conversation" : "Chuir riarthóir faoi ghlas an comhrá", + "{actor} limited the conversation to the current participants" : "Chuir {actor} an comhrá teoranta do na rannpháirtithe reatha", + "You limited the conversation to the current participants" : "Chuir tú teorainn leis an gcomhrá do na rannpháirtithe reatha", + "An administrator limited the conversation to the current participants" : "Chuir riarthóir teorainn leis an gcomhrá do na rannpháirtithe reatha", + "{actor} opened the conversation to registered users" : "D'oscail {actor} an comhrá d'úsáideoirí cláraithe", + "You opened the conversation to registered users" : "D'oscail tú an comhrá d'úsáideoirí cláraithe", + "An administrator opened the conversation to registered users" : "D'oscail riarthóir an comhrá d'úsáideoirí cláraithe", + "{actor} opened the conversation to registered users and users created with the Guests app" : "D'oscail {actor} an comhrá d'úsáideoirí cláraithe agus d'úsáideoirí a cruthaíodh leis an aip Guests", + "You opened the conversation to registered users and users created with the Guests app" : "D’oscail tú an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Guests", + "An administrator opened the conversation to registered users and users created with the Guests app" : "D’oscail riarthóir an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Guests", + "The conversation is now open to everyone" : "Tá an comhrá oscailte do chách anois", + "{actor} opened the conversation to everyone" : "D'oscail {actor} an comhrá do gach duine", + "You opened the conversation to everyone" : "D'oscail tú an comhrá do gach duine", + "{actor} restricted the conversation to moderators" : "Chuir {actor} srian ar an gcomhrá do mhodhnóirí", + "You restricted the conversation to moderators" : "Chuir tú srian ar an gcomhrá do mhodhnóirí", + "{actor} started breakout rooms" : "Chuir {actor} tús le seomraí ar leithligh", + "You started breakout rooms" : "Chuir tú tús le seomraí ar leithligh", + "{actor} stopped breakout rooms" : "Chuir {aisteoir} seomraí ar leithligh stoptha", + "You stopped breakout rooms" : "Chuir tú deireadh le seomraí ar leithligh", + "{actor} allowed guests" : "Tá cead ag {aisteoir} aíonna", + "You allowed guests" : "Cheadaigh tú aíonna", + "An administrator allowed guests" : "Cheadaigh riarthóir aíonna", + "{actor} disallowed guests" : "{aisteoir} aíonna dícheadaithe", + "You disallowed guests" : "Dhícheadaigh tú aíonna", + "An administrator disallowed guests" : "Dhícheadaigh riarthóir aíonna", + "{actor} set a password" : "Shocraigh {aisteoir} pasfhocal", + "You set a password" : "Shocraigh tú pasfhocal", + "An administrator set a password" : "Shocraigh riarthóir pasfhocal", + "{actor} removed the password" : "Bhain {actor} an pasfhocal", + "You removed the password" : "Bhain tú an focal faire", + "An administrator removed the password" : "Bhain riarthóir an focal faire", + "{actor} added {user}" : "Chuir {actor} {user} leis", + "You joined the conversation" : "Ghlac tú páirt sa chomhrá", + "{actor} joined the conversation" : "Tháinig {actor} isteach sa chomhrá", + "You added {user}" : "Chuir tú {user} leis", + "{actor} added you" : "Chuir {actor} tú leis", + "An administrator added you" : "Chuir riarthóir thú leis", + "An administrator added {user}" : "Chuir riarthóir {user} leis", + "You left the conversation" : "D'fhág tú an comhrá", + "{actor} left the conversation" : "D'fhág {actor} an comhrá", + "{actor} removed {user}" : "Bhain {actor} {user}", + "You removed {user}" : "Bhain tú {user}", + "{actor} removed you" : "Bhain {actor} thú", + "An administrator removed you" : "Bhain riarthóir thú", + "An administrator removed {user}" : "Bhain riarthóir {user}", + "{actor} invited {federated_user}" : "Thug {actor} cuireadh do {federated_user}", + "You invited {federated_user}" : "Thug tú cuireadh do {federated_user}", + "You accepted the invitation" : "Ghlac tú leis an gcuireadh", + "{actor} invited you" : "Thug {actor} cuireadh duit", + "An administrator invited you" : "Thug riarthóir cuireadh duit", + "An administrator invited {federated_user}" : "Thug riarthóir cuireadh do {federed_user}", + "{federated_user} accepted the invitation" : "Ghlac {federed_user} leis an gcuireadh", + "{actor} removed {federated_user}" : "Bhain {actor} {federated_user}", + "You removed {federated_user}" : "Bhain tú {federated_user}", + "You declined the invitation" : "Dhiúltaigh tú don chuireadh", + "An administrator removed {federated_user}" : "Bhain riarthóir {federated_user}", + "{federated_user} declined the invitation" : "Dhiúltaigh {federated_user} an cuireadh", + "{actor} added group {group}" : "Chuir {actor} grúpa {group} leis", + "You added group {group}" : "Chuir tú grúpa {group} leis", + "An administrator added group {group}" : "Chuir riarthóir grúpa {group} leis", + "{actor} removed group {group}" : "Bhain {actor} grúpa {group}", + "You removed group {group}" : "Bhain tú grúpa {group}", + "An administrator removed group {group}" : "Bhain riarthóir grúpa {group}", + "{actor} added team {circle}" : "Chuir {aisteoir} foireann {circle} leis", + "You added team {circle}" : "Chuir tú {circle} leis an bhfoireann", + "An administrator added team {circle}" : "Chuir riarthóir foireann {circle} leis", + "{actor} removed team {circle}" : "Bhain {actor} foireann {circle}", + "You removed team {circle}" : "Bhain tú an fhoireann {circle}", + "An administrator removed team {circle}" : "Bhain riarthóir foireann {circle}", + "{actor} added {phone}" : "Chuir {actor} {phone} leis", + "You added {phone}" : "Chuir tú {phone} leis", + "An administrator added {phone}" : "Chuir riarthóir {phone} leis", + "{actor} removed {phone}" : "Bhain {actor} {phone}", + "You removed {phone}" : "Bhain tú {phone}", + "An administrator removed {phone}" : "Bhain riarthóir {phone}", + "{actor} promoted {user} to moderator" : "Chuir {actor} {user} chun cinn chuig modhnóir", + "You promoted {user} to moderator" : "Chuir tú {user} chun cinn mar mhodhnóir", + "{actor} promoted you to moderator" : "Thug {actor} ardú céime duit go modhnóir", + "An administrator promoted you to moderator" : "Thug riarthóir ardú céime duit go modhnóir", + "An administrator promoted {user} to moderator" : "Chuir riarthóir {user} chun cinn chuig modhnóir", + "{actor} demoted {user} from moderator" : "Bhain {actor} {user} ón modhnóir", + "You demoted {user} from moderator" : "Bhain tú síos {user} ón modhnóir", + "{actor} demoted you from moderator" : "Dhírigh {actor} ón mhodhnóir tú", + "An administrator demoted you from moderator" : "Dhealraigh riarthóir thú ón modhnóir", + "An administrator demoted {user} from moderator" : "Bhain riarthóir {user} as an modhnóir", + "{actor} shared a file which is no longer available" : "Roinn {actor} comhad nach bhfuil ar fáil a thuilleadh", + "You shared a file which is no longer available" : "Roinn tú comhad nach bhfuil ar fáil a thuilleadh", + "File shares are currently not supported in federated conversations" : "Ní thacaítear le comhroinnt comhaid i gcomhráite cónasctha faoi láthair", + "The shared location is malformed" : "Tá an suíomh roinnte míchumtha", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "Shocraigh {actor} Matterbridge chun an comhrá seo a shioncronú le comhráite eile", + "You set up Matterbridge to synchronize this conversation with other chats" : "Shocraigh tú Matterbridge chun an comhrá seo a shioncronú le comhráite eile", + "{actor} created thread {title}" : "Chruthaigh {actor} an snáithe {title}", + "You created thread {title}" : "Chruthaigh tú snáithe {title}", + "{actor} renamed thread {title}" : "athainmníodh an snáithe le {actor} mar {title}", + "You renamed thread {title}" : "Athainmnigh tú an snáithe {title}", + "{actor} updated the Matterbridge configuration" : "Nuashonraigh {actor} cumraíocht Matterbridge", + "You updated the Matterbridge configuration" : "Nuashonraigh tú cumraíocht Matterbridge", + "{actor} removed the Matterbridge configuration" : "Bhain {actor} cumraíocht Matterbridge", + "You removed the Matterbridge configuration" : "Bhain tú cumraíocht Matterbridge", + "{actor} started Matterbridge" : "Thosaigh {actor} Matterbridge", + "You started Matterbridge" : "Thosaigh tú Matterbridge", + "{actor} stopped Matterbridge" : "Chuir {actor} stop le Matterbridge", + "You stopped Matterbridge" : "Stop tú Matterbridge", + "{actor} deleted a message" : "Scrios {actor} teachtaireacht", + "You deleted a message" : "Scrios tú teachtaireacht", + "{actor} edited a message" : "Chuir {actor} teachtaireacht in eagar", + "You edited a message" : "Chuir tú teachtaireacht in eagar", + "{actor} pinned a message" : "Chuir {actor} teachtaireacht i bpriontáil", + "You pinned a message" : "Chuir tú teachtaireacht i bpriontáil", + "{actor} unpinned a message" : "Dhíphionáil {actor} teachtaireacht", + "Message was automatically unpinned" : "Díphionáladh an teachtaireacht go huathoibríoch", + "You unpinned a message" : "Dhíphionáil tú teachtaireacht", + "{actor} deleted a reaction" : "Scrios {actor} imoibriú", + "You deleted a reaction" : "Scrios tú imoibriú", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtain","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n lá","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uair an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n nóiméad","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtain","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n lá","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uair an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n nóiméad","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid"], + "{actor} disabled message expiration" : "Dhíchumasaigh {actor} teachtaireacht in éag", + "You disabled message expiration" : "Dhíchumasaigh tú dul in éag na teachtaireachta", + "{actor} cleared the history of the conversation" : "Ghlan {actor} stair an chomhrá", + "You cleared the history of the conversation" : "Ghlan tú stair an chomhrá", + "{actor} set the conversation picture" : "Socraigh {aisteoir} pictiúr an chomhrá", + "You set the conversation picture" : "Shocraigh tú pictiúr an chomhrá", + "{actor} removed the conversation picture" : "Bhain {actor} pictiúr an chomhrá", + "You removed the conversation picture" : "Bhain tú an pictiúr comhrá", + "{actor} ended the poll {poll}" : "Chuir {actor} deireadh leis an vótaíocht {poll}", + "You ended the poll {poll}" : "Chuir tú deireadh leis an vótaíocht {poll}", + "{actor} started the video recording" : "Chuir {actor} tús leis an bhfístaifeadadh", + "You started the video recording" : "Chuir tú tús leis an bhfístaifeadadh", + "{actor} stopped the video recording" : "Chuir {actor} stop leis an bhfístaifeadadh", + "You stopped the video recording" : "Chuir tú stop leis an bhfístaifeadadh", + "{actor} started the audio recording" : "Chuir {actor} tús leis an taifeadadh fuaime", + "You started the audio recording" : "Chuir tú tús leis an taifeadadh fuaime", + "{actor} stopped the audio recording" : "Chuir {actor} stop leis an taifeadadh fuaime", + "You stopped the audio recording" : "Chuir tú stop leis an taifeadadh fuaime", + "The recording failed" : "Theip ar an taifeadadh", + "Someone voted on the poll {poll}" : "Vótáil duine éigin ar an vótaíocht {poll}", + "Message deleted by author" : "Scrios an t-údar an teachtaireacht", + "Message deleted by {actor}" : "Scrios {actor} an teachtaireacht", + "Message deleted by you" : "Scrios tú an teachtaireacht", + "Deleted user" : "Úsáideoir scriosta", + "Unknown number" : "Uimhir anaithnid", + "Administration" : "Riarachán", + "System" : "Córas", + "%s (guest)" : "%s (aoi)", + "Missed call" : "Glao caillte", + "Unanswered call" : "Glao gan freagra", + "Call ended (Duration {duration})" : "Cuireadh deireadh leis an nglao (Fad {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao, toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} chríochnaigh an glao (Fad {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Cuireadh deireadh leis an nglao le%n aoi (Fad{duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["Chuir {actor} deireadh leis an nglao le %n aoi (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1} (Fad {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1} (Fad {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1} agus {user2} toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1}agus{user2} (Fad {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1} agus {user2} (Fad {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2} agus {user3} toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2} agus{user3} (Fad{duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2} agus {user3} (Fad {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2}, {user3} agus {user4}, toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2},{user3} agus{user4} (Fad{duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2}, {user3} agus {user4} (Fad {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2}, {user3}, {user4} agus {user5}, toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2},{user3},{user4} agus{user5} (Fad {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2}, {user3}, {user4} agus {user5} (Fad {duration})", + "Message of {user} in {conversation}" : "Teachtaireacht ó {user} i {conversation}", + "Message of {user}" : "Teachtaireacht ó {user}", + "Message of a deleted user in {conversation}" : "Teachtaireacht ó úsáideora scriosta i {conversation}", + "Talk conversations" : "Déan comhráite", + "Talk to %s" : "Labhair le %s", + "An error occurred. Please contact your administrator." : "Tharla earráid. Déan teagmháil le do riarthóir le do thoil.", + "App disabled" : "Aip díchumasaithe", + "Conversation subfolders are disabled" : "Tá fo-fhillteáin chomhráite díchumasaithe", + "Storage quota exceeded" : "Sáraíodh an cuóta stórála", + "Could not prepare conversation folder" : "Níorbh fhéidir fillteán comhrá a ullmhú", + "File not found" : "Comhad gan aimsiú", + "Path must point to a file" : "Caithfidh an cosán pointeáil chuig comhad", + "File is not inside the conversation draft folder for this room" : "Níl an comhad laistigh den fhillteán dréachta comhrá don seomra seo", + "File is not shared, or shared but not with the user" : "Níl an comhad roinnte, nó roinnte ach ní leis an úsáideoir", + "No account available to delete." : "Níl aon chuntas ar fáil le scriosadh.", + "Poll" : "Vótaíocht", + "Password needs to be set" : "Ní mór pasfhocal a shocrú", + "Uploading the file failed" : "Theip ar uaslódáil an chomhaid", + "No image file provided" : "Níor soláthraíodh aon chomhad íomhá", + "File is too big" : "Tá an comhad ró-mhór.", + "Invalid file provided" : "Comhad neamhbhailí curtha ar fáil", + "Invalid image" : "Íomhá neamhbhailí", + "Unknown filetype" : "Cineál comhaid anaithnid", + "Talk mentions" : "Luann caint", + "More conversations" : "Tuilleadh comhráite", + "Say hi to your friends and colleagues!" : "Abair Dia duit a chairde agus a chomhghleacaithe!", + "No unread mentions" : "Uimh tagairtí neamhléite", + "Call in progress" : "Glao ar siúl", + "You were mentioned" : "Bhí tú luaite", + "Write to conversation" : "Scríobh chuig comhrá", + "Writes event information into a conversation of your choice" : "Scríobhann sé faisnéis imeachtaí isteach i gcomhrá de do rogha féin", + "Missing email field in header line" : "Réimse ríomhphoist in easnamh sa líne ceanntásca", + "Following lines are invalid: %s" : "Tá na línte seo a leanas neamhbhailí: %s", + "%1$s invited you to conversation \"%2$s\"." : "Thug %1$s cuireadh duit chuig comhrá \"%2$s\".", + "You were invited to conversation \"%s\"." : "Tugadh cuireadh duit chuig comhrá \"%s\".", + "Conversation invitation" : "Cuireadh comhrá", + "Scheduled time" : "Am sceidealta", + "Description" : "Cur síos", + "You can also dial-in via phone with the following details" : "Is féidir leat scairt a chur ar an bhfón freisin leis na sonraí seo a leanas", + "Dial-in information" : "Diailiú isteach faisnéise", + "Meeting ID" : "Aitheantas an chruinnithe", + "Your PIN" : "Do UAP", + "Click the button below to join the lobby now." : "Cliceáil an cnaipe thíos chun páirt a ghlacadh sa stocaireacht anois.", + "Click the link below to join the lobby now." : "Cliceáil ar an nasc thíos chun páirt a ghlacadh sa stocaireacht anois.", + "Join lobby for \"%s\"" : "Glac páirt sa stocaireacht le haghaidh \"%s\"", + "Click the button below to join the conversation now." : "Cliceáil ar an gcnaipe thíos chun páirt a ghlacadh sa chomhrá anois.", + "Click the link below to join the conversation now." : "Cliceáil ar an nasc thíos chun páirt a ghlacadh sa chomhrá anois.", + "Join \"%s\"" : "Glac páirt i \"%s\"", + "Meeting" : "Cruinniú", + "Password request: %s" : "Iarratas pasfhocail: %s", + "Private conversation" : "Comhrá príobháideach", + "Deleted user (%s)" : "Úsáideoir scriosta (%s)", + "Failed to upload call recording" : "Theip ar thaifeadadh glaonna a uaslódáil", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí taifeadta taifeadadh an ghlao {call} a uaslódáil. Déan teagmháil leis an riarachán le do thoil.", + "Share to chat" : "Roinn le comhrá", + "Dismiss notification" : "Déan an fógra a dhíbhe", + "Call recording now available" : "Taifeadadh glaonna ar fáil anois", + "The recording for the call in {call} was uploaded to {file}." : "Uaslódáladh an taifeadadh don ghlao i {call} chuig {file}.", + "Transcript now available" : "Athscríbhinn ar fáil anois", + "The transcript for the call in {call} was uploaded to {file}." : "Uaslódáladh an tras-scríbhinn don ghlao i {call} chuig {file}.", + "Failed to transcript call recording" : "Theip ar thaifeadadh na nglaonna a thrascríobh", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí an taifeadadh a thrascríobh ag {file} don ghlao i {call}. Déan teagmháil leis an riarachán le do thoil.", + "Call summary now available" : "Achoimre glaonna ar fáil anois", + "The summary for the call in {call} was uploaded to {file}." : "Uaslódáladh an achoimre don ghlao i{call} chuig {file}.", + "Failed to summarize call recording" : "Theip ar an taifeadadh glaonna a achoimriú", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí achoimre a dhéanamh ar an taifeadadh ag {file} don ghlao i{call}. Déan teagmháil leis an riarachán le do thoil.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Thug {user1} cuireadh duit páirt a ghlacadh in {roomName} ar {remoteServer}", + "Accept" : "Glac", + "Decline" : "Meath", + "{user1} invited you to a federated conversation" : "Thug {user1} cuireadh duit chuig comhrá cónasctha", + "Someone reacted" : "D’fhreagair duine éigin", + "New message" : "Teachtaireacht nua", + "Reminder" : "Meabhrúchán", + "Someone mentioned you" : "Luaigh duine éigin thú", + "Notification" : "Fógraí", + "Someone reacted in a private conversation" : "D’fhreagair duine éigin i gcomhrá príobháideach", + "You received a message in a private conversation" : "Fuair ​​tú teachtaireacht i gcomhrá príobháideach", + "Reminder in a private conversation" : "Meabhrúchán i gcomhrá príobháideach", + "Someone mentioned you in a private conversation" : "Luaigh duine éigin thú i gcomhrá príobháideach", + "Notification in a private conversation" : "Fógra i gcomhrá príobháideach", + "Reminder: You in {call}" : "Meabhrúchán: Tú i {call}", + "Reminder: {user} in {call}" : "Meabhrúchán: {user} i {call}", + "Reminder: Deleted user in {call}" : "Meabhrúchán: úsáideoir scriosta i {call}", + "Reminder: {guest} (guest) in {call}" : "Meabhrúchán: {guest} (aoi) i {call}", + "Reminder: Guest in {call}" : "Meabhrúchán: Aoi i {call}", + "{user} reacted with {reaction}" : "D'fhreagair {user} le {reaction}", + "{user} reacted with {reaction} in {call}" : "D'fhreagair {user} le {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "D'fhreagair úsáideoir scriosta le {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "D'fhreagair {guest} (aoi) le {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "D'fhreagair an t-aoi le {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Scriosadh an t-úsáideoir i {call}", + "{guest} (guest) in {call}" : "{guest} (aoi) i {call}", + "Guest in {call}" : "Aoi i {call}", + "{user} sent you a private message" : "Sheol {user} teachtaireacht phríobháideach chugat", + "{user} sent a message in conversation {call}" : "Sheol {user} teachtaireacht i gcomhrá {call}", + "A deleted user sent a message in conversation {call}" : "Sheol úsáideoir scriosta teachtaireacht i gcomhrá {call}", + "{guest} (guest) sent a message in conversation {call}" : "Sheol {guest} (aoi) teachtaireacht i gcomhrá {call}", + "A guest sent a message in conversation {call}" : "Sheol aoi teachtaireacht i gcomhrá {call}", + "{user} replied to your private message" : "D'fhreagair {úsáideoir} do theachtaireacht phríobháideach", + "{user} replied to your message in conversation {call}" : "D'fhreagair {user} do theachtaireacht i gcomhrá {call}", + "A deleted user replied to your message in conversation {call}" : "D'fhreagair úsáideoir scriosta do theachtaireacht i gcomhrá {call}", + "{guest} (guest) replied to your message in conversation {call}" : "D'fhreagair {guest} (aoi) do theachtaireacht i gcomhrá {call}", + "A guest replied to your message in conversation {call}" : "D'fhreagair aoi do theachtaireacht i gcomhrá {call}", + "Reminder: You in private conversation {call}" : "Meabhrúchán: Tú i gcomhrá príobháideach {call}", + "Reminder: A deleted user in private conversation {call}" : "Meabhrúchán: Úsáideoir scriosta i gcomhrá príobháideach {call}", + "Reminder: {user} in private conversation" : "Meabhrúchán: {user} i gcomhrá príobháideach", + "Reminder: You in conversation {call}" : "Meabhrúchán: Tú i gcomhrá {call}", + "Reminder: {user} in conversation {call}" : "Meabhrúchán: {user} i gcomhrá {call}", + "Reminder: A deleted user in conversation {call}" : "Meabhrúchán: Úsáideoir scriosta i gcomhrá {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Meabhrúchán: {guest} (aoi) i gcomhrá {call}", + "Reminder: A guest in conversation {call}" : "Meabhrúchán: Aoi i gcomhrá {call}", + "{user} reacted with {reaction} to your private message" : "D'fhreagair {user} le {reaction} do do theachtaireacht phríobháideach", + "{user} reacted with {reaction} to your message in conversation {call}" : "D'fhreagair {user} le {reaction} do do theachtaireacht i gcomhrá {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "D'fhreagair úsáideoir scriosta le {reaction} do do theachtaireacht i gcomhrá {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "D'fhreagair {guest} (aoi) le {reaction} le do theachtaireacht i gcomhrá {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "D'fhreagair aoi le {reaction} do do theachtaireacht i gcomhrá {call}", + "{user} mentioned you in a private conversation" : "Luaigh {user} tú i gcomhrá príobháideach", + "{user} mentioned group {group} in conversation {call}" : "Luaigh {user} grúpa {group} i gcomhrá {call}", + "{user} mentioned team {team} in conversation {call}" : "Luaigh {user}foireann {team}i gcomhrá {call}", + "{user} mentioned everyone in conversation {call}" : "Luaigh {user} gach duine sa chomhrá {call}", + "{user} mentioned you in conversation {call}" : "Luaigh {user} tú sa chomhrá {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Luaigh úsáideoir scriosta grúpa {group} i gcomhrá {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Luaigh úsáideoir scriosta foireann {team} i gcomhrá {call}", + "A deleted user mentioned everyone in conversation {call}" : "Luaigh úsáideoir scriosta gach duine sa chomhrá {call}", + "A deleted user mentioned you in conversation {call}" : "Luaigh úsáideoir scriosta tú sa chomhrá {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "Luaigh {guest} (aoi) grúpa {group} i gcomhrá {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "Luaigh{guest} (aoi) foireann {team}i gcomhrá{call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Luaigh {guest} (aoi) gach duine i gcomhrá {call}", + "{guest} (guest) mentioned you in conversation {call}" : "Luaigh {guest} (aoi) tú i gcomhrá {call}", + "A guest mentioned group {group} in conversation {call}" : "Luaigh aoi grúpa {group} i gcomhrá {call}", + "A guest mentioned team {team} in conversation {call}" : "Luaigh aoi foireann {team} i gcomhrá {call}", + "A guest mentioned everyone in conversation {call}" : "Luaigh aoi gach duine sa chomhrá {call}", + "A guest mentioned you in conversation {call}" : "Luaigh aoi tú i gcomhrá {call}", + "View message" : "Féach ar an teachtaireacht", + "Dismiss reminder" : "Ruaig meabhrúchán", + "View chat" : "Féach ar an gcomhrá", + "{user} invited you to a group conversation: {call}" : "Thug {user} cuireadh duit chuig comhrá grúpa: {call}", + "Join call" : "Glac páirt sa ghlao", + "Answer call" : "Freagair glao", + "{user} would like to talk with you" : "Ba mhaith le {user} labhairt leat", + "Call back" : "Glaoch ar ais", + "You missed a call from {user}" : "Chaill tú glao ó {user}", + "Accept call" : "Glac leis an nglao", + "Incoming phone call from {call}" : "Glao gutháin isteach ó {call}", + "You missed a phone call from {call}" : "Chaill tú glao gutháin ó {call}", + "A group call has started in {call}" : "Cuireadh tús le glao grúpa i {call}", + "You missed a group call in {call}" : "Chaill tú glao grúpa i {call}", + "{email} is requesting the password to access {file}" : "Tá an pasfhocal á iarraidh ag {email} chun {file} a rochtain", + "{email} tried to request the password to access {file}" : "Rinne {email} iarracht an pasfhocal a iarraidh chun rochtain a fháil ar {file}", + "Someone is requesting the password to access {file}" : "Tá an pasfhocal á iarraidh ag duine éigin chun {file} a rochtain", + "Someone tried to request the password to access {file}" : "Rinne duine éigin iarracht an pasfhocal a iarraidh chun {file} a rochtain", + "Open settings" : "Oscail socruithe", + "Hosted signaling server added" : "Cuireadh freastalaí comharthaíochta óstáilte leis", + "The hosted signaling server is now configured and will be used." : "Tá an freastalaí comharthaíochta óstáilte cumraithe anois agus úsáidfear é.", + "Hosted signaling server removed" : "Baineadh an freastalaí comharthaíochta óstáilte", + "The hosted signaling server was removed and will not be used anymore." : "Baineadh an freastalaí comharthaíochta óstáilte agus ní úsáidfear é a thuilleadh.", + "Hosted signaling server changed" : "Athraíodh an freastalaí comharthaíochta óstáilte", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "D'athraigh cuntas an fhreastalaí comharthaíochta óstáilte an stádas ó \"{oldstatus}\" go \"{newstatus}\".", + "pending" : "ar feitheamh", + "active" : "gníomhach", + "expired" : "imithe in éag", + "blocked" : "bac", + "error" : "earráid", + "The certificate of {host} expires in {days} days" : "Rachaidh teastas {host} in éag i gceann {days} lá", + "The certificate of {host} expired" : "Chuaigh teastas {host} in éag", + "Contact via Talk" : "Déan teagmháil trí Talk", + "Open Talk" : "Caint Oscailte", + "Default" : "Réamhshocrú", + "Send messages, create threads, and start voice and video calls." : "Seol teachtaireachtaí, cruthaigh snáitheanna, agus cuir tús le glaonna gutha agus físe.", + "Presentation" : "Cur i láthair", + "Voice room" : "Seomra gutha", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Glac páirt go díreach sa ghlao, rud atá iontach maith le haghaidh comhráite nó cruinnithe spontáineacha.", + "Webinar" : "webinar", + "Conversations" : "Comhráite", + "Messages in current conversation" : "Teachtaireachtaí sa chomhrá reatha", + "{user}" : "{user}", + "Messages" : "Teachtaireachtaí", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Teachtaireachtaí i gcomhráite eile", + "One-to-one rooms always need to show the other users avatar" : "Ní mór do sheomraí duine le duine avatar na n-úsáideoirí eile a thaispeáint i gcónaí", + "Invalid emoji character" : "Carachtar emoji neamhbhailí", + "Invalid background color" : "Dath cúlra neamhbhailí", + "Avatar image is not square" : "Níl an íomhá avatar cearnach", + "Room {number}" : "Seomra {number}", + "Other" : "Eile", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Theip ar thriail a iarraidh toisc nach féidir teacht ar an bhfreastalaí trialach. Bain triail eile as ar ball le do thoil.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Tá fadhb ann le fíordheimhniú an ásc seo. B'fhéidir nach bhfuil sé inrochtana ón taobh amuigh chun a URL a fhíorú.", + "Something unexpected happened." : "Tharla rud gan choinne.", + "The URL is invalid." : "Tá an URL neamhbhailí.", + "An HTTPS URL is required." : "Tá URL HTTPS ag teastáil.", + "The email address is invalid." : "Tá an seoladh ríomhphoist neamhbhailí.", + "The language is invalid." : "Tá an teanga neamhbhailí.", + "The country is invalid." : "Tá an tír neamhbhailí.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Tá fadhb ann le hiarratas na trialach. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "Too many requests are send from your servers address. Please try again later." : "Seoltar an iomarca iarratas ó do sheoladh freastalaithe. Bain triail eile as ar ball le do thoil.", + "There is already a trial registered for this Nextcloud instance." : "Tá triail cláraithe cheana féin don ásc Nextcloud seo.", + "Something unexpected happened. Please try again later." : "Tharla rud gan choinne. Bain triail eile as ar ball le do thoil.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Theip ar thriail a iarraidh toisc gur iompar mícheart é an freastalaí trialach. Bain triail eile as ar ball le do thoil.", + "Trial requested but failed to get account information. Please check back later." : "Iarradh an triail ach níor éirigh leis faisnéis chuntais a fháil. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Tá fadhb ann le fíordheimhniú an iarratais seo. B'fhéidir nach bhfuil sé inrochtana ón taobh amuigh chun a URL a fhíorú.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Níorbh fhéidir faisnéis chuntais a fháil toisc gur iompar mícheart é an freastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Tá fadhb ann le faisnéis an chuntais a fháil. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "There is no such account registered." : "Níl aon chuntas den sórt sin cláraithe.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Níorbh fhéidir faisnéis chuntais a fháil toisc nach féidir teacht ar an bhfreastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "Deleting the hosted signaling server account failed. Please check back later." : "Theip ar scriosadh an chuntais freastalaí comharthaíochta óstáilte. Seiceáil ar ais ar ball le do thoil.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Theip ar an gcuntas a scriosadh toisc gur iompar mícheart é an freastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with deleting the account. Please check your logs for further information." : "Tá fadhb ann leis an gcuntas a scriosadh. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "Too many requests are sent from your servers address. Please try again later." : "Seoltar an iomarca iarratas ó do sheoladh freastalaithe. Bain triail eile as ar ball le do thoil.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Theip ar an gcuntas a scriosadh toisc nach féidir teacht ar an bhfreastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "Note to self" : "Nóta dó féin", + "A place for your private notes, thoughts and ideas" : "Áit le haghaidh do chuid nótaí príobháideacha, smaointe agus smaointe", + "Transcript is AI generated and may contain mistakes" : "Gintear AI an tras-scríbhinn agus d’fhéadfadh botúin a bheith ann", + "Summary is AI generated and may contain mistakes" : "Gintear achoimre ar AI agus d’fhéadfadh botúin a bheith ann", + "Let's get started!" : "Cuirimis tús leis!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "Is ardán cumarsáide slán féin-óstach é **Nextcloud Talk** a chomhtháthaíonn gan uaim le héiceachóras Nextcloud.\n\n#### Príomhghnéithe de Nextcloud Talk:\n\n* Comhrá agus teachtaireachtaí i gcomhráite príobháideacha agus grúpa\n* Glaonna gutha agus físe\n* Comhroinnt agus comhtháthú le haipeanna eile Nextcloud\n* Socruithe comhrá saincheaptha, modhnóireacht agus rialuithe príobháideachais\n* Gréasán, deasc agus soghluaiste (iOS agus Android)\n* Cumarsáid phríobháideach agus shlán\n\nFaigh tuilleadh eolais sa [dhoiciméadú úsáideora](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Fáilte go Nextcloud Talk\n\nIs aip teachtaireachtaí príobháideach agus cumhachtach é Nextcloud Talk a chomhtháthaíonn le Nextcloud. Déan comhrá i gcomhráite príobháideacha nó grúpa, comhoibrigh thar ghlaonna gutha agus físe, eagraigh seimineáir agus imeachtaí, saincheap do chomhráite agus go leor eile.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formáidigh téacsanna chun teachtaireachtaí saibhir a chruthú\n\nIn Nextcloud Talk, is féidir leat comhréir Markdown a úsáid chun do theachtaireachtaí a fhormáidiú. Mar shampla, cuir formáidiú **trom** nó *iodálach* i bhfeidhm, nó 'béim ar théacsanna mar chód`. Is féidir leat fiú táblaí a chruthú agus ceannteidil a chur le do théacs.\n\nAn gá clóscríobh a shocrú nó formáidiú a athrú? Cuir do theachtaireacht in eagar trí \"Cuir teachtaireacht in eagar\" a chliceáil sa roghchlár teachtaireachta.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Cuir ceangaltáin agus naisc leis\n\nCeangail comhaid ó do Mhol Nextcloud ag baint úsáide as an gcnaipe \"+\". Comhroinn míreanna ó Chomhaid agus aipeanna éagsúla Nextcloud. Tacaíonn roinnt apps fiú le giuirléidí idirghníomhacha, mar shampla, an app Téacs.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lig do na comhráite sreabhadh: luaigh úsáideoirí, freagair do theachtaireachtaí agus tuilleadh\n\nIs féidir leat gach duine sa chomhrá a lua trí %s a úsáid nó rannpháirtithe sonracha a lua trí \"@\" a chlóscríobh agus a n-ainm a roghnú ón liosta.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Is féidir leat freagra a thabhairt ar theachtaireachtaí, iad a chur ar aghaidh chuig comhráite agus daoine eile, nó ábhar na teachtaireachta a chóipeáil.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Déan níos mó le Smart Picker\n\nNíl ort ach clóscríobh \"/\" nó téigh go dtí an roghchlár \"+\" chun an Piocálaí Cliste a oscailt áit ar féidir leat ábhar éagsúla a cheangal le do theachtaireachtaí. Is féidir leat an Roghnóir Cliste a chumrú le bheith in ann míreanna a chur leis ó aipeanna Nextcloud, GIFs, láithreacha léarscáileanna, ábhar a ghintear le AI agus go leor eile.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Bainistigh socruithe comhrá\n\nSa roghchlár comhrá, is féidir leat rochtain a fháil ar shocruithe éagsúla chun do chomhráite a bhainistiú, mar shampla:\n* Cuir eolas an chomhrá in eagar\n* Bainistigh fógraí\n* Cuir go leor rialacha modhnóireachta i bhfeidhm\n* Cumraigh rochtain agus slándáil\n* Cumasaigh róbónna\n* agus níos mó!", + "Andorra" : "Andóra", + "United Arab Emirates" : "Aontas na nÉimíríochtaí Arabacha", + "Afghanistan" : "Afganastáin", + "Antigua and Barbuda" : "Antigua agus Barbúda", + "Anguilla" : "Anguilla", + "Albania" : "an Albáin", + "Armenia" : "Airméin", + "Angola" : "Angóla", + "Antarctica" : "Antartaice", + "Argentina" : "an Airgintín", + "American Samoa" : "Samó Meiriceánach", + "Austria" : "Ostair", + "Australia" : "Astráil", + "Aruba" : "Aruba", + "Åland Islands" : "Oileáin Åland", + "Azerbaijan" : "Asarbaiseáin", + "Bosnia and Herzegovina" : "An Bhoisnia agus an Heirseagaivéin", + "Barbados" : "Barbadós", + "Bangladesh" : "Bhanglaidéis", + "Belgium" : "an Bheilg", + "Burkina Faso" : "Buircíne Fasó", + "Bulgaria" : "an Bhulgáir", + "Bahrain" : "Bairéin", + "Burundi" : "An Bhurúin", + "Benin" : "Beinin", + "Saint Barthélemy" : "Naomh Barthélemy", + "Bermuda" : "Beirmiúda", + "Brunei Darussalam" : "Brúiné Dárasalám", + "Bolivia, Plurinational State of" : "An Bholaiv, Stát Iolrnáisiúnta na", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius agus Saba", + "Brazil" : "an Bhrasaíl", + "Bahamas" : "Bahámaí", + "Bhutan" : "Bhútáin", + "Bouvet Island" : "Oileán Bouvet", + "Botswana" : "Bhotsuáin", + "Belarus" : "Bhealarúis", + "Belize" : "Bheilís", + "Canada" : "Ceanada", + "Cocos (Keeling) Islands" : "Oileáin Cocos (Keeling).", + "Congo, the Democratic Republic of the" : "an Chongó, Poblacht Dhaonlathach an", + "Central African Republic" : "Poblacht na hAfraice Láir", + "Congo" : "Chongó", + "Switzerland" : "Eilvéis", + "Côte d'Ivoire" : "Cósta Eabhair", + "Cook Islands" : "Oileáin Cook", + "Chile" : "an tSile", + "Cameroon" : "Camarún", + "China" : "tSín", + "Colombia" : "an Cholóim", + "Costa Rica" : "Cósta Ríce", + "Cuba" : "Cúba", + "Cabo Verde" : "Rinn Verde", + "Curaçao" : "Curacao", + "Christmas Island" : "Oileán na Nollag", + "Cyprus" : "an Chipir", + "Czechia" : "Seicis", + "Germany" : "an Ghearmáin", + "Djibouti" : "Djibútí", + "Denmark" : "an Danmhairg", + "Dominica" : "Doiminic", + "Dominican Republic" : "An Phoblacht Dhoiminiceach", + "Algeria" : "Ailgéir", + "Ecuador" : "Eacuadór", + "Estonia" : "an Eastóin", + "Egypt" : "Éigipt", + "Western Sahara" : "Sahára Thiar", + "Eritrea" : "Eiritré", + "Spain" : "an Spáinn", + "Ethiopia" : "Aetóip", + "Finland" : "an Fhionlainn", + "Fiji" : "Fidsí", + "Falkland Islands (Malvinas)" : "Oileáin Fháclainne (Malvinas)", + "Micronesia, Federated States of" : "Micrinéise, Stáit Chónaidhme na", + "Faroe Islands" : "Oileáin Fharó", + "France" : "Fhrainc", + "Gabon" : "Ghabúin", + "United Kingdom of Great Britain and Northern Ireland" : "Ríocht Aontaithe na Breataine Móire agus Thuaisceart Éireann", + "Grenada" : "Greanáda", + "Georgia" : "An tSeoirsia", + "French Guiana" : "Guáin na Fraince", + "Guernsey" : "Geansaí", + "Ghana" : "Gána", + "Gibraltar" : "Giobráltar", + "Greenland" : "Ghraonlainn", + "Gambia" : "An Ghaimbia", + "Guinea" : "Ghuine", + "Guadeloupe" : "Guadalúip", + "Equatorial Guinea" : "An Ghuine Mheánchriosach", + "Greece" : "an Ghréig", + "South Georgia and the South Sandwich Islands" : "An tSeoirsia Theas agus na hOileáin Sandwich Theas", + "Guatemala" : "Guatamala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guine Bhissau", + "Guyana" : "Ghuáin", + "Hong Kong" : "Hong Cong", + "Heard Island and McDonald Islands" : "Oileán Heard agus Oileáin McDonald", + "Honduras" : "Hondúras", + "Croatia" : "an Chróit", + "Haiti" : "Háití", + "Hungary" : "an Ungáir", + "Indonesia" : "Indinéis", + "Ireland" : "Éire", + "Israel" : "Iosrael", + "Isle of Man" : "Oileán Mhanann", + "India" : "India", + "British Indian Ocean Territory" : "Críoch Aigéan Indiach na Breataine", + "Iraq" : "Iaráic", + "Iran, Islamic Republic of" : "Iaráin, Poblacht Ioslamach na", + "Iceland" : "Íoslainn", + "Italy" : "an Iodáil", + "Jersey" : "Geirsí", + "Jamaica" : "Iamáice", + "Jordan" : "an Iordáin", + "Japan" : "an tSeapáin", + "Kenya" : "an Chéinia", + "Kyrgyzstan" : "Chirgeastáin", + "Cambodia" : "an Chambóid", + "Kiribati" : "Ciribeas", + "Comoros" : "Oileáin Chomóra", + "Saint Kitts and Nevis" : "San Críostóir-Nimheas", + "Korea, Democratic People's Republic of" : "An Chóiré, Daon-Phoblacht Dhaonlathach na", + "Korea, Republic of" : "An Chóiré, Poblacht na", + "Kuwait" : "Cuáit", + "Cayman Islands" : "Oileáin Cayman", + "Kazakhstan" : "Chasacstáin", + "Lao People's Democratic Republic" : "Daon-Phoblacht Dhaonlathach Lao", + "Lebanon" : "an Liobáin", + "Saint Lucia" : "Naomh Lucia", + "Liechtenstein" : "Lichtinstéin", + "Sri Lanka" : "Srí Lanca", + "Liberia" : "Libéir", + "Lesotho" : "Leosóta", + "Lithuania" : "an Liotuáin", + "Luxembourg" : "Lucsamburg", + "Latvia" : "an Laitvia", + "Libya" : "Libia", + "Morocco" : "Maracó", + "Monaco" : "Monacó", + "Moldova, Republic of" : "Mholdóiv, Poblacht na", + "Montenegro" : "Montainéagró", + "Saint Martin (French part)" : "Naomh Máirtín (cuid Fraincise)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Oileáin Mharshall", + "North Macedonia" : "An Mhacadóin Thuaidh", + "Mali" : "Mailí", + "Myanmar" : "Maenmar", + "Mongolia" : "an Mhongóil", + "Macao" : "Macao", + "Northern Mariana Islands" : "Oileáin Mariana Thuaidh", + "Martinique" : "Mairtíreach", + "Mauritania" : "Mháratáin", + "Montserrat" : "Montsarat", + "Malta" : "an Mhálta", + "Mauritius" : "Oileán Mhuirís", + "Maldives" : "Oileáin Mhaildíve", + "Malawi" : "an Mhaláiv", + "Mexico" : "Meicsiceo", + "Malaysia" : "Mhalaeisia", + "Mozambique" : "Mósaimbíc", + "Namibia" : "Namaib", + "New Caledonia" : "An Nua-Chaladóin", + "Niger" : "Nígir", + "Norfolk Island" : "Oileán Norfolk", + "Nigeria" : "Nigéir", + "Nicaragua" : "Nicearagua", + "Netherlands" : "an Ísiltír", + "Norway" : "an Iorua", + "Nepal" : "Neipeal", + "Nauru" : "Nárú", + "Niue" : "Niue", + "New Zealand" : "An Nua-Shéalainn", + "Oman" : "Óman", + "Panama" : "Panama", + "Peru" : "Peiriú", + "French Polynesia" : "Polainéis na Fraince", + "Papua New Guinea" : "Nua-Ghuine Phapua", + "Philippines" : "hOileáin Fhilipíneacha", + "Pakistan" : "an Phacastáin", + "Poland" : "an Pholainn", + "Saint Pierre and Miquelon" : "Naomh Pierre agus Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Pórtó Ríce", + "Palestine, State of" : "Phalaistín, Stát", + "Portugal" : "an Phortaingéil", + "Palau" : "Palau", + "Paraguay" : "Paragua", + "Qatar" : "Catar", + "Réunion" : "Réunion", + "Romania" : " an Rómáin", + "Serbia" : "an tSeirbia", + "Russian Federation" : "Cónaidhm na Rúise", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "An Araib Shádach", + "Solomon Islands" : "Oileáin Sholamón", + "Seychelles" : "Na Séiséil", + "Sudan" : "an tSúdáin", + "Sweden" : "an tSualainn", + "Singapore" : "Singeapór", + "Saint Helena, Ascension and Tristan da Cunha" : "San Héilin, Ascension agus Tristan da Cunha", + "Slovenia" : "an tSlóivéin", + "Svalbard and Jan Mayen" : "Svalbard agus Jan Mayen", + "Slovakia" : "an tSlóvaic", + "Sierra Leone" : "Siarra Leon", + "San Marino" : "San Mairíne", + "Senegal" : "an tSeineagáil", + "Somalia" : "an tSomáil", + "Suriname" : "Suranam", + "South Sudan" : "an tSúdáin Theas", + "Sao Tome and Principe" : "Sao Tome agus Principe", + "El Salvador" : "an tSalvadóir", + "Sint Maarten (Dutch part)" : "Sint Maarten (an chuid Ollainnis)", + "Syrian Arab Republic" : "Poblacht Arabach na Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Oileáin na dTurcach agus na Caicos", + "Chad" : "Sead", + "French Southern Territories" : "Críocha Theas na Fraince", + "Togo" : "Tóga", + "Thailand" : "an Téalainn", + "Tajikistan" : "Táidsíceastáin", + "Tokelau" : "Tócalainn", + "Timor-Leste" : "Tíomór-Leste", + "Turkmenistan" : "Tuircméanastáin", + "Tunisia" : "an Túinéis", + "Tonga" : "Tonga", + "Turkey" : "n Tuirc", + "Trinidad and Tobago" : "Oileán na Tríonóide agus Tobága", + "Tuvalu" : "Túvalú", + "Taiwan, Province of China" : "Taiwan, Cúige na Síne", + "Tanzania, United Republic of" : "An Tansáin, Poblacht Aontaithe na", + "Ukraine" : "an Úcráin", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Mionoileáin Imeallacha na Stát Aontaithe", + "United States of America" : "Stáit Aontaithe Mhéiriceá", + "Uruguay" : "Uragua", + "Uzbekistan" : "Úisbéiceastáin", + "Holy See" : "Suí Naofa", + "Saint Vincent and the Grenadines" : "San Uinseann agus na Greanáidíní", + "Venezuela, Bolivarian Republic of" : "Veiniséala, Poblacht Bolivarian na", + "Virgin Islands, British" : "Oileáin na Maighdean, na Breataine", + "Virgin Islands, U.S." : "Oileáin na Maighdean, U.S.", + "Viet Nam" : "Vítneam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis agus Futúna", + "Samoa" : "Samó", + "Yemen" : "Éimin", + "Mayotte" : "Maigh Eo", + "South Africa" : "an Afraic Theas", + "Zambia" : "an tSaimbia", + "Zimbabwe" : "An tSiombáib", + "Background blur" : "Geamhú an chúlra", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Níorbh fhéidir tacaíocht lódála WASM a sheiceáil. Seiceáil le do thoil de láimh an bhfreastalaíonn do fhreastalaí gréasáin ar chomhaid `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Níl do fhreastalaí gréasáin socraithe i gceart chun comhaid `.wasm` a sheachadadh. De ghnáth is saincheist é seo le cumraíocht Nginx. Le haghaidh doiléir an chúlra ní mór é a choigeartú chun comhaid `.wasm` a sheachadadh freisin. Déan do chumraíocht Nginx a chur i gcomparáid leis an gcumraíocht mholta inár gcáipéisíocht.", + "Talk configuration values" : "Labhair luachanna cumraíochta", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Ní thacaítear ach le córas cron a chur iallach ar ghlao. Cumasaigh cron an chórais nó bain an chumraíocht `max_call_dration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Níl luachanna beaga `max_call_duration` (socraithe go%dfaoi láthair) infheidhmithe de bharr srianta teicniúla. Ní dhéantar an post cúlra ach amháin gach 5 nóiméad, mar sin bain úsáid as ar do phriacal féin.", + "Federation" : "Cónaidhm", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Moltar go mór \"memcache.locking\" a chumrú nuair atá Talk Federation cumasaithe.", + "High-performance backend" : "Inneall ardfheidhmíochta", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Gan Inneall Ardfheidhmíochta cumraithe - Nextcloud Talk a Rith gan na scálaí Inneall Ardfheidhmíochta amháin le haghaidh glaonna an-bheag (2-3 rannpháirtí ar a mhéad). Socraigh le do thoil an t-Inneall Ardfheidhmíochta chun a chinntiú go n-oibríonn glaonna le rannpháirtithe iolracha gan stró.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Ní cheadaítear an modh \"conversation_cluster\" Inneall Ardfheidhmíochta a rith agus ní thacófar leis a thuilleadh sa leagan atá le teacht. Tacaíonn an t-Inneall Ardfheidhmíochta le fíorchnuasaigh sa lá atá inniu ann ar cheart a úsáid ina ionad.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Ní dhéanfar aon inneall ardfheidhmíochta iolrach a shainiú agus ní thacófar leis a thuilleadh sa leagan atá le teacht. Ina áit sin ba cheart cothromóir ualaigh a shocrú in éineacht le freastalaithe comharthaíochta cnuasaithe agus é a chumrú sna socruithe Plé.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Ní hionann an eochair phoiblí stóráilte don algartam %1$s a úsáideadh agus an eochair phríobháideach stóráilte. Rith %2$s chun an fhadhb a réiteach.", + "High-performance backend not configured correctly. Run %s for details." : "Níl an cúltaca ardfheidhmíochta cumraithe i gceart. Rith %s le haghaidh sonraí.", + "High-performance backend not configured correctly" : "Inneall ardfheidhmíochta gan a bheith cumraithe i gceart", + "Error: Cannot connect to server" : "Earráid: Ní féidir ceangal leis an bhfreastalaí", + "Error: Server did not respond with proper JSON" : "Earráid: Níor fhreagair an freastalaí leis an JSON cuí", + "Error: Certificate expired" : "Earráid: Deimhniú imithe in éag", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Earráid: Níl amanna córais fhreastalaí Nextcloud agus freastalaí Inneall Ardfheidhmíochta as sioncronú. Cinntigh le do thoil go bhfuil an dá fhreastalaí ceangailte le freastalaí ama nó sioncrónaigh a gcuid ama de láimh.", + "Could not get version" : "Níorbh fhéidir an leagan a fháil", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Earráid: Leagan rith: {version}; Ní mór an freastalaí a nuashonrú le bheith comhoiriúnach leis an leagan seo de Talk", + "Error: Server responded with: {error}" : "Earráid: D'fhreagair an freastalaí le: {error}", + "Error: Unknown error occurred" : "Earráid: Tharla earráid anaithnid", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Rabhadh: Leagan reatha: {version}; Ní thacaíonn an freastalaí le gach gné den leagan Talk seo, tá gnéithe in easnamh: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Moltar go mór taisce cuimhne a chumrú agus Nextcloud Talk á rith le hInneall Ardfheidhmíochta.", + "Client Push" : "Brúigh Cliant", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Tá Client Push suiteáilte, feabhsaíonn sé seo poncúlacht fógraí Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "Níl {notify_push} suiteáilte. D’fhéadfadh sé seo moill a chur ar fhógraí Talk.", + "Recording backend" : "Inneall taifeadta", + "Using the recording backend requires a High-performance backend." : "Teastaíonn inneall Ardfheidhmíochta chun an t-inneall taifeadta a úsáid.", + "No recording backend configured" : "Níl aon inneall taifeadta cumraithe", + "SIP configuration" : "Cumraíocht SIP", + "Using the SIP functionality requires a High-performance backend." : "Teastaíonn inneall Ardfheidhmíochta chun feidhmiúlacht SIP a úsáid.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Ní féidir uimhreacha gutháin Sannta Comhrá a thosú le + ná 0. Bain nó nuashonraigh na huimhreacha seo a leanas le do thoil:\n{list}", + "No SIP backend configured" : "Níl aon inneall SIP cumraithe", + "Invalid date, date format must be YYYY-MM-DD" : "Dáta neamhbhailí, caithfidh formáid an dáta a bheith BBBB-MM-DD", + "Conversation not found" : "Comhrá gan aimsiú", + "Path is already shared with this conversation" : "Tá an chonair roinnte leis an gcomhrá seo cheana féin", + "Chat, video & audio-conferencing using WebRTC" : "Comhrá, físchomhdháil & closchomhdháil ag úsáid WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Comhrá, físchomhdháil & closchomhdháil ag úsáid WebRTC\n\n* 💬 **Comhrá** Tagann Nextcloud Talk le comhrá téacs simplí, a ligeann duit comhaid a roinnt nó a uaslódáil ó d’aip nó do ghléas áitiúil Nextcloud Files agus rannpháirtithe eile a lua.\n* 👥 **Glaonna príobháideacha, grúpa, poiblí agus cosanta ag pasfhocal!** Tabhair cuireadh do dhuine éigin, do ghrúpa iomlán nó seol nasc poiblí chun cuireadh a thabhairt do ghlao.\n* 🌐 **Comhráite Cónaidhme** Déan comhrá le húsáideoirí eile Nextcloud ar a bhfreastalaithe\n* 💻 **Scáileán a roinnt!** Roinn do scáileán le rannpháirtithe do ghlao.\n* 🚀 ** Comhtháthú le haipeanna Nextcloud eile** cosúil le Comhaid, Féilire, Stádas Úsáideora, Painéal na nIonstraimí, Sreabhadh, Léarscáileanna, Roghnóir Cliste, Teagmhálacha, Deic, agus go leor eile.\n* 🌉 **Sioncronaigh le réitigh chomhrá eile** Agus [Matterbridge](https://github.com/42wim/matterbridge/) á chomhtháthú in Talk, is féidir leat go leor réitigh comhrá eile a shioncronú go héasca le Nextcloud Talk agus vice- versa.", + "Leave call" : "Fág glaoch", + "Navigating away from the page will leave the call in {conversation}" : "Má sheolann tú amach ón leathanach fágfar an glao i {conversation}", + "Stay in call" : "Fan ar glaoch", + "Error occurred when getting the conversation information" : "Tharla earráid agus faisnéis an chomhrá á fáil", + "Discuss this file" : "Pléigh an comhad seo", + "Share this file with others to discuss it" : "Roinn an comhad seo le daoine eile chun é a phlé", + "Share this file" : "Roinn an comhad seo", + "Join conversation" : "Glac páirt sa chomhrá", + "This conversation is password-protected." : "Tá an comhrá seo cosanta ag pasfhocal.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Bhraitheamar go leor iarrachtaí pasfhocail neamhbhailí ó do IP. Dá bhrí sin tá do chéad iarracht eile throttled suas go dtí 30 soicind.", + "The password is wrong. Try again." : "Tá an focal faire mícheart. Déan iarracht arís.", + "Password" : "Pasfhocal", + "Submit" : "Cuir isteach", + "Error requesting the password." : "Earráid agus an focal faire á iarraidh.", + "Request password" : "Iarr pasfhocal", + "This conversation has ended" : "Tá deireadh leis an gcomhrá seo", + "Error occurred when joining the conversation" : "Tharla earráid agus tú ag glacadh páirte sa chomhrá", + "Close Talk sidebar" : "Dún an barra taoibh Talk", + "Open Talk sidebar" : "Oscail barra taoibh Talk", + "Everyone" : "Gach duine", + "Users and moderators" : "Úsáideoirí agus modhnóirí", + "Moderators only" : "Modhnóirí amháin", + "Disable calls" : "Díchumasaigh glaonna", + "Save changes" : "Sabháil na hathruithe", + "Saving …" : "Shábháil …", + "Saved!" : "Shábháil!", + "Limit to groups" : "Teorainn do ghrúpaí", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Nuair a roghnaítear grúpa amháin ar a laghad, ní féidir ach le daoine de na grúpaí liostaithe a bheith mar chuid de chomhráite.", + "Guests can still join public conversations." : "Is féidir le haíonna páirt a ghlacadh i gcomhráite poiblí fós.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Déanfar úsáideoirí nach bhfuil in ann Plé a úsáid a thuilleadh a liostú mar rannpháirtithe ina gcomhráite roimhe seo agus coimeádfar a dteachtaireachtaí comhrá freisin.", + "Limit using Talk" : "Teorainn ag baint úsáide as Talk", + "Limit creating a public and group conversation" : "Cuir teorainn le comhrá poiblí agus comhrá grúpa a chruthú", + "Limit creating conversations" : "Cuir teorainn le cruthú comhráite", + "Limit starting a call" : "Cuir teorainn le glao a thosú", + "Limit starting calls" : "Cuir teorainn le glaonna tosaithe", + "When a call has started, everyone with access to the conversation can join the call." : "Nuair a chuirtear tús le glao, is féidir le gach duine a bhfuil rochtain acu ar an gcomhrá páirt a ghlacadh sa ghlao.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Tá na róbónna seo a leanas suiteáilte ar an bhfreastalaí seo. Sna doiciméid is féidir leat sonraí a fháil maidir le conas {linkstart1}do bhota féin a thógáil{linkend} nó {linkstart2}liosta róbónna{linkend} le cumasú ar do fhreastalaí.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Níl aon róbónna suiteáilte ar an bhfreastalaí seo. Sna doiciméid is féidir leat sonraí a fháil maidir le conas {linkstart1}do bhota féin a thógáil{linkend} nó {linkstart2}liosta róbónna{linkend} le cumasú ar do fhreastalaí.", + "Description is not provided" : "Ní thugtar tuairisc", + "Locked for moderators" : "Faoi ghlas le haghaidh modhnóirí", + "Enabled" : "Cumasaithe", + "Disabled" : "Faoi mhíchumas", + "Bots settings" : "Socruithe róbónna", + "State" : "Stáit", + "Name" : "Ainm", + "Last error" : "Earráid dheireanach", + "Total errors count" : "Áireamh earráidí iomlána", + "Find more bots" : "Faigh tuilleadh róbónna", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Is féidir freastalaithe iontaofa a chumrú ag {linkstart}Leathanach na socruithe a roinnt{linkedin}.", + "Beta" : "Béite", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Oibríonn comhráite agus glaonna cónaidhme cheana féin. Tá láimhseáil ceangaltán ag teacht i leagan amach anseo.", + "Enable Federation in Talk app" : "Cumasaigh Federation in Talk aip", + "Permissions" : "Ceadanna", + "Allow users to be invited to federated conversations" : "Ceadaigh cuireadh a thabhairt d'úsáideoirí chuig comhráite cónasctha", + "Allow users to invite federated users into conversation" : "Lig d'úsáideoirí cuireadh a thabhairt d'úsáideoirí cónasctha chun comhrá a dhéanamh", + "Only allow to federate with trusted servers" : "Ná ceadaigh ach cónascadh le freastalaithe iontaofa", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Nuair a roghnaítear grúpa amháin ar a laghad, ní féidir ach le daoine de na grúpaí liostaithe cuireadh a thabhairt d’úsáideoirí cónasctha chuig comhráite.", + "Groups allowed to invite federated users" : "Tá cead ag grúpaí cuireadh a thabhairt d'úsáideoirí cónasctha", + "Select groups …" : "Roghnaigh grúpaí…", + "All messages" : "Gach teachtaireacht", + "@-mentions only" : "@-luaite amháin", + "Off" : "as", + "General settings" : "Socruithe Ginearálta", + "Default notification settings" : "Socruithe fógra réamhshocraithe", + "Default group notification" : "Fógra grúpa réamhshocraithe", + "Default group notification for new groups" : "Fógra grúpa réamhshocraithe do ghrúpaí nua", + "Integration into other apps" : "Comhtháthú le haipeanna eile", + "Allow conversations on files" : "Ceadaigh comhráite ar chomhaid", + "Allow conversations on public shares for files" : "Ceadaigh comhráite ar scaireanna poiblí do chomhaid", + "End-to-end encrypted calls" : "Glaonna criptithe ó cheann go ceann", + "Enable encryption" : "Cumasaigh criptiú", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Teastaíonn leagan níos nuaí den Inneall Ardfheidhmíochta agus droichead SIP le glaonna criptithe ceann go ceann le droichead SIP cumraithe.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Ní thacaíonn cliaint shoghluaiste le glaonna criptithe ceann go ceann faoi láthair.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Trí chliceáil ar an gcnaipe thuas seoltar an fhaisnéis san fhoirm chuig freastalaithe Struktur AG. Is féidir leat tuilleadh faisnéise a fháil ag {linkstart}spreed.eu{linkend}.", + "Pending" : "Ar feitheamh", + "Error" : "Earráid", + "Blocked" : "Bactha", + "Active" : "Gníomhach", + "Expired" : "Imithe in éag", + "Never" : "Riamh", + "The trial could not be requested. Please try again later." : "Níorbh fhéidir an triail a iarraidh. Bain triail eile as ar ball le do thoil.", + "The account could not be deleted. Please try again later." : "Níorbh fhéidir an cuntas a scriosadh. Bain triail eile as ar ball le do thoil.", + "Hosted High-performance backend" : "Inneall Ardfheidhmíochta arna óstáil", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Soláthraíonn ár gcomhpháirtí Struktur AG seirbhís inar féidir freastalaí comharthaíochta óstáilte a iarraidh. Chuige seo ní gá duit ach an fhoirm thíos a líonadh agus iarrfaidh do Nextcloud í. Nuair a bheidh an freastalaí socraithe duit líonfar na dintiúir go huathoibríoch. Forscríobhfaidh sé seo na socruithe freastalaí comharthaíochta atá ann cheana féin.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Má tá feidhmiúlacht STUN agus/nó TURN i do chuntas cúil ardfheidhmíochta, déanfar na socruithe a nuashonrú dá réir.", + "URL of this Nextcloud instance" : "URL an ásc Nextcloud seo", + "Full name of the user requesting the trial" : "Ainm iomlán an úsáideora a iarrann an triail", + "Email of the user" : "Ríomhphost an úsáideora", + "Language" : "Teanga", + "Country" : "Tír", + "Request signaling server trial" : "Iarr triail freastalaí comharthaíochta", + "You can see the current status of your hosted signaling server in the following table." : "Is féidir leat stádas reatha do fhreastalaí comharthaíochta óstáilte a fheiceáil sa tábla seo a leanas.", + "Status" : "Stádas", + "Created at" : "Cruthaithe ag", + "Expires at" : "In éag ag", + "Limits" : "Teorainneacha", + "STUN included" : "STUN san áireamh", + "Yes" : "Tá", + "No" : "Níl", + "TURN included" : "TURN san áireamh", + "Delete the signaling server account" : "Scrios an cuntas freastalaí comharthaíochta", + "_%n user_::_%n users_" : ["%n úsáideoir","%n úsáideoirí","%n úsáideoirí","%n úsáideoirí","%n úsáideoirí"], + "Installed version: {version}" : "Leagan suiteáilte: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Is féidir leat an Matterbridge a shuiteáil chun Nextcloud Talk a nascadh le roinnt seirbhísí eile, tabhair cuairt ar a {linkstart1}leathanach GitHub{linkend} le haghaidh tuilleadh sonraí. Is féidir go dtógfaidh sé tamall an aip a íoslódáil agus a shuiteáil. Ar eagla go mbeidh teorainn leis, suiteáil de láimh é ón {linkstart2}Nextcloud Siopa Aip{linkend} le do thoil.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Tá ceadanna míchearta ag dénártha Matterbridge. Cinntigh le do thoil gur leis an úsáideoir ceart an comhad dénártha Matterbridge agus gur féidir é a fhorghníomhú. Is féidir é a fháil in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Níor aimsíodh dénártha Matterbridge nó níorbh fhéidir é a fhorghníomhú.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Is féidir leat an cosán chuig dénártha Matterbridge a shocrú de láimh freisin tríd an config. Seiceáil an {linkstart}doiciméadú comhtháthú Matterbridge{linkend} le haghaidh tuilleadh faisnéise.", + "Downloading …" : "Ag íosluchtú…", + "Install Talk Matterbridge" : "Suiteáil Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Tharla earráid agus an aip Matterbridge á shuiteáil", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Tharla earráid agus an Talk Matterbridge á shuiteáil. Suiteáil de láimh é le do thoil", + "Failed to execute Matterbridge binary." : "Theip ar dhénártha Matterbridge a rith.", + "Matterbridge integration" : "Comhtháthú Matterbridge", + "Enable Matterbridge integration" : "Cumasaigh comhtháthú Matterbridge", + "Status: Checking connection" : "Stádas: Ag seiceáil an nasc", + "OK: Running version: {version}" : "OK: Leagan reatha: {version}", + "Error: Server seems to be a Signaling server" : "Earráid: Is cosúil gur freastalaí Comharthaíochta é an freastalaí", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Earráid: Níl amanna córais fhreastalaí Nextcloud agus freastalaí Inneall Taifeadta as sioncronú. Cinntigh le do thoil go bhfuil an dá fhreastalaí ceangailte le freastalaí ama nó sioncrónaigh a gcuid ama de láimh.", + "Recording backend URL" : "URL inneall taifeadta", + "Validate SSL certificate" : "Bailíochtaigh teastas SSL", + "Delete this server" : "Scrios an freastalaí seo", + "Test this server" : "Tástáil an freastalaí seo", + "Disabled for all calls" : "Díchumasaithe do gach glaoch", + "Enabled for all calls" : "Cumasaithe do gach glao", + "Configurable on conversation level by moderators" : "Cumraithe ag modhnóirí ar leibhéal an chomhrá", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Ní cheadóidh na socruithe PHP \"upload_max_filesize\" nó \"post_max_size\" ach comhaid suas go dtí {maxUpload} a uaslódáil.", + "Recording backend settings saved" : "Sábháladh socruithe inneall taifeadta", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Beidh cead ag modhnóirí toiliú a chumasú ar leibhéal an chomhrá. Beidh toiliú le taifeadadh ag teastáil ó gach rannpháirtí sula nglacann siad le gach glao sa chomhrá seo.", + "The consent to be recorded will be required for each participant before joining every call." : "Beidh toiliú le taifeadadh ag teastáil ó gach rannpháirtí sula nglacfaidh sé páirt i ngach glao.", + "The consent to be recorded is not required." : "Níl an toiliú le taifeadadh riachtanach.", + "Recording backend configuration is only possible with a High-performance backend." : "Ní féidir cumraíocht inneall a thaifeadadh ach le hInneall Ardfheidhmíochta.", + "Add a new recording backend server" : "Cuir freastalaí inneall taifeadta nua leis", + "Shared secret" : "Rún comhroinnte", + "Recording consent" : "Toiliú taifeadta", + "Recording transcription" : "Trascríobh taifeadta", + "Automatically transcribe call recordings with a transcription provider" : "Trascríobh taifeadtaí glaonna go huathoibríoch le soláthraí trascríobh", + "Automatically summarize call recordings with transcription and summary providers" : "Déan achoimre uathoibríoch ar thaifeadtaí glaonna le soláthraithe trascríobh agus achoimre", + "SIP configuration saved!" : "Cumraíocht SIP sábháilte!", + "SIP configuration is only possible with a High-performance backend." : "Ní féidir cumraíocht SIP a dhéanamh ach amháin le hInneall Ardfheidhmíochta.", + "Enable SIP Dial-out option" : "Cumasaigh an rogha Dial Amach SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Ní mór an freastalaí comharthaíochta a nuashonrú go dtí an ghné Dial Amach SIP a fhaigheann tacaíocht.", + "Do not show SIP Dial-out caller number" : "Ná taispeáin uimhir ghlaoiteora SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Ba chóir uimhir gan ainm a bheith le feiceáil mar \"anaithnid\" nó \"uimhir faoi cheilt\" chun glaoch ar an bhfaighteoir", + "Dial-out number" : "Uimhir dhiailiú amach", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Uimhir fhormáidithe E164 a úsáidtear mar uimhir ghlaoiteora taca le haghaidh glaonna amach", + "Dial-out prefix" : "Réimír dial-amach", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Réimír chuig uimhir úsáideora cumraithe le haghaidh glaonna amach (is é `+` an réamhshocrú)", + "Restrict SIP configuration" : "Srian a chur ar chumraíocht SIP", + "Enable SIP configuration" : "Cumasaigh cumraíocht SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Ní féidir ach le húsáideoirí na ngrúpaí seo a leanas SIP a chumasú i gcomhráite a mhodhnóidh siad", + "Phone number (Country)" : "Uimhir ghutháin (Tír)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Seoltar an fhaisnéis seo i ríomhphoist cuireadh agus taispeántar í sa bharra taoibh chuig gach rannpháirtí.", + "Nextcloud base URL" : "URL bonn Nextcloud", + "Talk Backend URL" : "URL Cúil an Chórais Comhrá", + "WebSocket URL" : "URL WebSocket", + "Available features" : "Gnéithe atá ar fáil", + "Error: Websocket connection failed" : "Earráid: Theip ar nasc Websocket", + "Error code" : "Cód earráide", + "Error message" : "Teachtaireacht earráide", + "Error: Websocket connection failed. Check browser console" : "Earráid: Theip ar cheangal Websocket. Seiceáil consól brabhsálaí", + "High-performance backend URL" : "URL inneall ardfheidhmíochta", + "Missing High-performance backend warning hidden" : "Rabhadh inneall ardfheidhmíochta ar iarraidh i bhfolach", + "High-performance backend settings saved" : "Sábháladh socruithe inneall ardfheidhmíochta", + "Nextcloud Talk setup not complete" : "Níl socrú Nextcloud Talk críochnaithe", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tabhair faoi deara le do thoil, i nglaonna le níos mó ná 2 rannpháirtí gan an t-Inneall Ardfheidhmíochta, is dóichí go mbeidh fadhbanna nascachta ag rannpháirtithe agus go mbeidh siad ina gcúis le hualach ard ar ghléasanna rannpháirteacha.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Suiteáil an t-Inneall Ardfheidhmíochta chun a chinntiú go n-oibríonn glaonna le rannpháirtithe iolracha gan uaim.", + "Nextcloud portal" : "Tairseach Nextcloud", + "Quick installation guide" : "Treoir suiteála tapa", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Tá an t-inneall Ardfheidhmíochta ag teastáil le haghaidh glaonna agus comhráite le rannpháirtithe iolracha. Gan an t-innill, caithfidh na rannpháirtithe go léir a bhfíseán féin a uaslódáil ina n-aonar le haghaidh gach rannpháirtí eile, rud is dócha a bheidh ina chúis le saincheisteanna nascachta agus ualach ard ar ghléasanna rannpháirteacha.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Moltar go mór taisce dáilte a chur ar bun agus Nextcloud Talk ag baint úsáide as inneall ardfheidhmíochta.", + "Add High-performance backend server" : "Cuir freastalaí inneall Ardfheidhmíochta leis", + "Warn about connectivity issues in calls with more than 2 participants" : "Tabhair rabhadh faoi cheisteanna nascachta i nglaonna le níos mó ná 2 rannpháirtí", + "STUN server URL" : "URL an fhreastalaí STUN", + "The server address is invalid" : "Tá seoladh an fhreastalaí neamhbhailí", + "STUN settings saved" : "Socruithe STUN sábháilte", + "STUN servers" : "Freastalaithe STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Úsáidtear freastalaí STUN chun seoladh IP poiblí na rannpháirtithe taobh thiar de ródaire a chinneadh.", + "Add a new STUN server" : "Cuir freastalaí STUN nua leis", + "{schema} scheme must be used with a domain" : "Ní mór scéim {schema} a úsáid le fearann", + "{option1} and {option2}" : "{option1} agus {option2}", + "{option} only" : "{option} amháin", + "OK: Successful ICE candidates returned by the TURN server" : "Ceart go leor: Chuir an freastalaí TURN na hiarrthóirí rathúla ICE ar ais", + "Error: No working ICE candidates returned by the TURN server" : "Earráid: Níor chuir an freastalaí TURN iarrthóirí ICE ar ais", + "Testing whether the TURN server returns ICE candidates" : "Ag tástáil cibé an dtugann an freastalaí TURN iarrthóirí ICE ar ais", + "TURN server schemes" : "TURN scéimeanna freastalaí", + "TURN server URL" : "TURN URL an fhreastalaí", + "TURN server secret" : "TURN rúnda freastalaí", + "TURN server protocols" : "TURN prótacail freastalaí", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Úsáidtear freastalaí TURN chun seachfhreastalaí a dhéanamh ar an trácht ó rannpháirtithe taobh thiar de bhalla dóiteáin. Murar féidir le rannpháirtithe aonair nascadh le daoine eile is dócha go mbeidh freastalaí TURN ag teastáil. Féach {linkstart}an doiciméadú seo{linkend} le haghaidh treoracha cumraíochta.", + "TURN settings saved" : "TURN socruithe sábháilte", + "TURN servers" : "TURN freastalaithe", + "Add a new TURN server" : "Cuir freastalaí TURN nua leis", + "Failed" : "Theip", + "OK" : "Ceart go leor", + "Checking …" : "Ag seiceáil…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Theip: tá WebAssembly díchumasaithe nó ní thacaítear leis sa bhrabhsálaí seo. Cumasaigh WebAssembly le do thoil nó bain úsáid as brabhsálaí a thacaíonn leis chun an tseiceáil a dhéanamh.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Theip: níor chuir an freastalaí gréasáin comhaid \".wasm\" agus \".tflite\" ar ais i gceart. Seiceáil le do thoil an rannán \"Riachtanais chórais\" i gcáipéisíocht Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: chuir an freastalaí gréasáin comhaid \".wasm\" agus \".tflite\" ar ais i gceart.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Dealraíonn sé nach bhfuil cumraíocht PHP agus Apache comhoiriúnach. Tabhair faoi deara nach féidir PHP a úsáid ach leis an modúl MPM_PREFORK agus ní féidir PHP-FPM a úsáid ach leis an modúl MPM_EVENT.", + "Web server setup checks" : "Seiceálacha socruithe freastalaí gréasáin", + "Files required for virtual background can be loaded" : "Is féidir comhaid a theastaíonn le haghaidh cúlra fíorúil a luchtú", + "Federated user" : "Úsáideoir cónaidhme", + "Assign participants to rooms" : "Rannpháirtithe a shannadh do seomraí", + "Configure breakout rooms" : "Cumraigh seomraí ar leithligh", + "Number of breakout rooms" : "Líon na seomraí ar leithligh", + "You can create from 1 to 20 breakout rooms." : "Is féidir leat idir 1 agus 20 seomra ar leithligh a chruthú.", + "Assignment method" : "Modh sannta", + "Automatically assign participants" : "Rannpháirtithe a shannadh go huathoibríoch", + "Manually assign participants" : "Rannpháirtithe a shannadh de láimh", + "Allow participants to choose" : "Lig do rannpháirtithe rogha a dhéanamh", + "Create rooms" : "Cruthaigh seomraí", + "Confirm" : "Deimhnigh", + "Create breakout rooms" : "Cruthaigh seomraí ar leithligh", + "Reset" : "Athshocraigh", + "Delete breakout rooms" : "Scrios seomraí ar leithligh", + "Room {roomNumber}" : "Seomra {roomNumber}", + "Current breakout rooms and settings will be lost" : "Caillfear seomraí ar leithligh agus socruithe reatha", + "Cancel" : "Cealaigh", + "Unassigned participants" : "Rannpháirtithe neamhshannta", + "Back" : "Ar ais", + "Assign" : "Sann", + "Add participant \"{user}\"" : "Cuir rannpháirtí \"{user}\" leis", + "Now" : "Anois", + "Invalid calendar selected" : "Féilire neamhbhailí roghnaithe", + "Invalid start time selected" : "Am tosaithe neamhbhailí roghnaithe", + "Invalid end time selected" : "Am críochnaithe neamhbhailí roghnaithe", + "Unknown error occurred" : "Tharla earráid anaithnid", + "Sending no invitations" : "Gan aon chuirí a sheoladh", + "{participant0} will receive an invitation" : "{participant0} gheobhaidh sé cuireadh", + "{participant0} and {participant1} will receive invitations" : "Gheobhaidh{participant0} agus {participant1} cuirí", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["Gheobhaidh{participant0}, {participant1} agus %n eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí"], + "Invite {user}" : "Cuireadh {user}", + "Invite all users and emails in this conversation" : "Tabhair cuireadh do gach úsáideoir agus ríomhphost sa chomhrá seo", + "Meeting created" : "Cruthaíodh cruinniú", + "Upcoming meetings" : "Cruinnithe le teacht", + "Loading …" : "Á lódáil…", + "No upcoming meetings" : "Gan aon chruinnithe atá le teacht", + "Schedule a meeting" : "Cruinniú a sceidealú", + "Meeting title" : "Teideal an chruinnithe", + "From" : "Ó", + "To" : "Chun", + "Calendar" : "Féilire", + "Attendees" : "Lucht freastail", + "No other participants to send invitations to." : "Níl aon rannpháirtí eile chun cuirí a sheoladh chucu.", + "Add attendees" : "Cuir lucht freastail leis", + "Save" : "Sábháil", + "Search participants" : "Cuardaigh rannpháirtithe", + "No results" : "Gan torthaí", + "Done" : "Déanta", + "Disable live transcription" : "Díchumasaigh trascríobh beo", + "Enable live transcription (generated by AI)" : "Cumasaigh trascríobh beo (ginte ag AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Cumasaigh trascríobh beo (Níl an aip trascríobh beo suiteáilte)", + "Disable live translation" : "Díchumasaigh aistriúchán beo", + "Enable live translation (generated by AI)" : "Cumasaigh aistriúchán beo (ginte ag AI)", + "Original language" : "Teanga bhunaidh", + "Live translations app is not installed" : "Níl an aip aistriúcháin bheo suiteáilte", + "Original language: {languageName}" : "Teanga bhunaidh: {languageName}", + "Translated language" : "Teanga aistrithe", + "Translated language: {languageName}" : "Teanga aistrithe: {languageName}", + "Raise hand" : "Ardaigh lámh", + "Raise hand (R)" : "Ardaigh lámh (R)", + "Lower hand" : "Lámh íochtair", + "Lower hand (R)" : "Lámh íochtair (R)", + "Exit full screen (F)" : "Scoir scáileán iomlán (F)", + "Full screen (F)" : "Scáileán iomlán (F)", + "Speaker view" : "Amharc cainteoir", + "Grid view" : "Radharc greille", + "Error when trying to load the available live transcription languages" : "Earráid agus iarracht á déanamh na teangacha trascríobh beo atá ar fáil a luchtú", + "Failed to enable live transcription" : "Theip ar thrascríobh beo a chumasú", + "Failed to enable live translations" : "Theip ar aistriúcháin bheo a chumasú", + "Failed to disable live translations" : "Theip ar aistriúcháin bheo a dhíchumasú", + "Recording consent is required" : "Tá toiliú taifeadta ag teastáil", + "This conversation is read-only" : "Tá an comhrá seo inléite amháin", + "Conversation not found or not joined" : "Níor aimsíodh an comhrá nó níor cuireadh isteach ann é", + "Lobby is still active and you're not a moderator" : "Tá an stocaireacht fós gníomhach agus ní modhnóir tú", + "Connection failed" : "Theip ar an gceangal", + "Reload" : "Athlódáil", + "{nickName} raised their hand." : "D'ardaigh {nickName} a lámh.", + "A participant raised their hand." : "D'ardaigh rannpháirtí a lámh.", + "Collapse stripe" : "Laghdaigh stríoc", + "Expand stripe" : "Leathnaigh stríoc", + "Previous page of videos" : "An leathanach físeáin roimhe seo", + "Next page of videos" : "An chéad leathanach eile d'fhíseáin", + "Connecting …" : "Ag nascadh…", + "Calling …" : "Ag glaoch…", + "Waiting for {user} to join the call" : "Ag fanacht le {user} páirt a ghlacadh sa ghlao", + "Waiting for others to join the call …" : "Ag fanacht le daoine eile a bheith páirteach sa ghlao…", + "You can invite others in the participant tab of the sidebar" : "Is féidir leat cuireadh a thabhairt do dhaoine eile sa chluaisín rannpháirtí ar an mbarra taoibh", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Is féidir leat cuireadh a thabhairt do dhaoine eile sa chluaisín rannpháirtí ar an mbarra taoibh nó an nasc seo a roinnt chun cuireadh a thabhairt do dhaoine eile!", + "Share this link to invite others!" : "Roinn an nasc seo le cuireadh a thabhairt do dhaoine eile!", + "Copy link" : "Cóipeáil an nasc", + "You are not allowed to enable audio" : "Níl cead agat fuaim a chumasú", + "No audio. Click to select device" : "Gan fuaim. Cliceáil chun gléas a roghnú", + "Mute audio" : "Balbhaigh fuaime", + "Mute audio (M)" : "Balbhaigh an fhuaim (M)", + "Unmute audio" : "Díbhalbhaigh an fhuaim", + "Unmute audio (M)" : "Díbhalbhaigh an fhuaim (M)", + "None" : "aon cheann", + "Select a microphone" : "Roghnaigh micreafón", + "Select a speaker" : "Roghnaigh cainteoir", + "Microphone settings" : "Socruithe micreafóin", + "Check devices" : "Seiceáil gléasanna", + "Access to camera was denied" : "Diúltaíodh rochtain ar cheamara", + "Error while accessing camera: It is likely in use by another program" : "Earráid agus tú ag rochtain ceamara: Is dócha go mbeidh sé in úsáid ag ríomhchlár eile", + "Error while accessing camera" : "Earráid agus an ceamara á rochtain", + "You have been muted by a moderator" : "Tá modhnóir balbhaithe thú", + "Hide presenter video" : "Folaigh físeán an láithreoir", + "You are not allowed to enable video" : "Níl cead agat físeáin a chumasú", + "No video. Click to select device" : "Gan físeán. Cliceáil chun gléas a roghnú", + "Disable video" : "Físeán a dhíchumasú", + "Disable video (V)" : "Díchumasaigh an físeán (V)", + "Enable video" : "Cumasaigh físeán", + "Enable video (V)" : "Cumasaigh físeán (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán - Cuirfear isteach go hachomair ar do nasc agus an físeán á chumasú den chéad uair", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán (V) - Cuirfear isteach go hachomair ar do nasc agus an físeán á chumasú den chéad uair", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán. Cuirfear isteach ar do nasc go hachomair agus an físeán á chumasú den chéad uair", + "Select a video device" : "Roghnaigh gléas físe", + "Show presenter" : "Taispeáin láithreoir", + "You" : "tu", + "Mute" : "Balbhaigh", + "Muted" : "Balbhaithe", + "Show screen" : "Taispeáin scáileán", + "Stop following" : "Stop ag leanúint", + "Connection could not be established …" : "Níorbh fhéidir ceangal a bhunú…", + "Connection was lost and could not be re-established …" : "Cailleadh an nasc agus níorbh fhéidir é a athbhunú …", + "Connection could not be established. Trying again …" : "Níorbh fhéidir ceangal a bhunú. Ag iarraidh arís…", + "Connection lost. Trying to reconnect …" : "Ceangal caillte. Ag iarraidh athcheangail…", + "Connection problems …" : "Fadhbanna ceangail…", + "Collapse" : "Laghdaigh", + "Expand" : "Leathnaigh", + "You need to be logged in to upload files" : "Ní mór duit a bheith logáilte isteach chun comhaid a uaslódáil", + "Drop your files to upload" : "Scaoil do chuid comhad le huaslódáil", + "Conversation messages" : "Teachtaireachtaí comhrá", + "Scroll to bottom" : "Scrollaigh go bun", + "Post message" : "Teachtaireacht a phostáil", + "Federated conversation" : "Comhrá cónaidhme", + "Public conversation" : "Comhrá poiblí", + "Favorite" : "is fearr leat", + "Banned users" : "Úsáideoirí toirmiscthe", + "Manage the list of banned users in this conversation." : "Bainistigh liosta na n-úsáideoirí toirmiscthe sa chomhrá seo.", + "Manage bans" : "Bainistigh toirmisc", + "No banned users" : "Uimh úsáideoirí toirmeasc", + "Banned by:" : "Toirmiscthe ag:", + "Date:" : "Dáta:", + "Note:" : "Nóta:", + "Hide details" : "Folaigh sonraí", + "Show details" : "Sonraí a thaispeáint", + "Unban" : "Dícosc", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Is féidir leat an teideal agus an cur síos a athrú i {linkstart}Féilire ↗{linkend}.", + "Error while updating conversation name" : "Earráid agus ainm an chomhrá á nuashonrú", + "Error while updating conversation description" : "Earráid agus cur síos an chomhrá á nuashonrú", + "Enter a name for this conversation" : "Cuir isteach ainm don chomhrá seo", + "Edit conversation name" : "Cuir ainm an chomhrá in eagar", + "Edit conversation description" : "Cuir cur síos ar an gcomhrá in eagar", + "Enter a description for this conversation" : "Cuir isteach cur síos ar an gcomhrá seo", + "Picture" : "Pictiúr", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Is féidir na róbónna seo a leanas a chumasú sa chomhrá seo. Déan teagmháil le do riarachán chun tuilleadh róbónna a shuiteáil ar an bhfreastalaí seo.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Níl aon róbónna suiteáilte ar an bhfreastalaí seo. Déan teagmháil le do riarachán chun róbónna a shuiteáil ar an bhfreastalaí seo.", + "Disable" : "Díchumasaigh", + "Enable" : "Cumasaigh", + "The bot is not available anymore" : "Níl an bot ar fáil a thuilleadh", + "Breakout rooms" : "Seomraí ar leithligh", + "Manage breakout rooms" : "Bainistigh seomraí ar leithligh", + "Set up breakout rooms for this conversation" : "Socraigh seomraí ar leithligh don chomhrá seo", + "Please select a valid PNG or JPG file" : "Roghnaigh comhad bailí PNG nó JPG le do thoil", + "Choose your conversation picture" : "Roghnaigh do phictiúr comhrá", + "Choose" : "Roghnaigh", + "Error setting conversation picture" : "Earráid agus pictiúr an chomhrá á shocrú", + "Could not set the conversation picture: {error}" : "Níorbh fhéidir pictiúr an chomhrá a shocrú: {error}", + "Error cropping conversation picture" : "Earráid agus pictiúr an chomhrá á bhearradh", + "Error removing conversation picture" : "Earráid agus an pictiúr comhrá á bhaint", + "Set emoji as conversation picture" : "Socraigh emoji mar phictiúr comhrá", + "Set background color for conversation picture" : "Socraigh dath cúlra le haghaidh pictiúr comhrá", + "Upload conversation picture" : "Íosluchtaigh pictiúr comhráite", + "Choose conversation picture from files" : "Roghnaigh pictiúr comhrá ó chomhaid", + "Remove conversation picture" : "Bain pictiúr an chomhrá", + "The file must be a PNG or JPG" : "Caithfidh an comhad a bheith ina PNG nó JPG", + "Set picture" : "Socraigh pictiúr", + "Default permissions modified for {conversationName}" : "Athraíodh na ceadanna réamhshocraithe le haghaidh {conversationName}", + "Could not modify default permissions for {conversationName}" : "Níorbh fhéidir na ceadanna réamhshocraithe do {conversationName} a mhionathrú", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Cuir na ceadanna réamhshocraithe do rannpháirtithe sa chomhrá seo in eagar. Ní chuireann na socruithe seo isteach ar mhodhnóirí.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Gach uair a athraítear ceadanna sa chuid seo, caillfear ceadanna saincheaptha a tugadh do rannpháirtithe aonair roimhe seo.", + "All permissions" : "Gach cead", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Tá cead ag rannpháirtithe glao a thosú, páirt a ghlacadh i nglao, fuaim agus físeáin a chumasú, agus scáileán a roinnt.", + "Participants can use all available features." : "Is féidir le rannpháirtithe gach gné atá ar fáil a úsáid.", + "Restricted" : "Srianta", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Is féidir le rannpháirtithe páirt a ghlacadh i nglaonna, ach ní féidir leo fuaime ná físe a chumasú ná scáileán a chomhroinnt go dtí go dtugann modhnóir ceadanna de láimh dóibh.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Gheobhaidh rannpháirtithe sraith gnéithe laghdaithe go dtí go dtabharfaidh modhnóir ceadanna breise de láimh.", + "Advanced permissions" : "Ceadanna chun cinn", + "Edit permissions" : "Cuir ceadanna in eagar", + "Conversation settings" : "Socruithe comhrá", + "Basic Info" : "Eolas Bunúsach", + "Personal" : "Pearsanta", + "Moderation" : "Measarthacht", + "Setup overview" : "Forbhreathnú ar an socrú", + "Live transcription" : "Tras-scríobh beo", + "Live transcriptions app is not installed" : "Níl an aip trascríbhinní beo suiteáilte", + "Enable live transcription" : "Cumasaigh trascríobh beo", + "Breakout Rooms" : "Seomraí ar leithligh", + "Matterbridge" : "Droichead an Mhatha", + "Bots" : "Róbónna", + "Danger zone" : "Crios contúirte", + "Archive conversation" : "Comhrá cartlainne", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Tá comhráite cartlainne folaithe ón liosta comhráite de réir réamhshocraithe. Mar sin féin, beidh siad fós le feiceáil nuair a chuardaíonn tú ainm an chomhrá nó nuair a gheobhaidh tú rochtain ar liosta de chomhráite cartlainne.", + "Do you really want to leave \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat \"{displayName}\" a fhágáil?", + "You can archive this conversation instead." : "Is féidir leat an comhrá seo a chur i gcartlann ina ionad sin.", + "Leave conversation" : "Fág an comhrá", + "You need to promote a new moderator before you can leave the conversation" : "Ní mór duit modhnóir nua a chur chun cinn sula bhféadfaidh tú an comhrá a fhágáil", + "Delete conversation" : "Scrios an comhrá", + "Do you really want to delete \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat \"{displayName}\" a scriosadh?", + "Error while deleting conversation" : "Earráid agus an comhrá á scriosadh", + "Delete all chat messages" : "Scrios gach teachtaireacht comhrá", + "Do you really want to delete all messages in \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat gach teachtaireacht i \"{displayName}\" a scriosadh?", + "Error while clearing chat history" : "Earráid agus stair comhrá á glanadh", + "Be careful, these actions cannot be undone." : "Bí cúramach, ní féidir na gníomhartha seo a chealú.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nuair atá comhrá fágtha, chun páirt a ghlacadh arís i gcomhrá dúnta, tá cuireadh ag teastáil. Is féidir páirt a ghlacadh arís i gcomhrá oscailte am ar bith.", + "Permanently delete this conversation." : "Scrios an comhrá seo go buan.", + "Delete chat messages" : "Scrios teachtaireachtaí comhrá", + "Permanently delete all the messages in this conversation." : "Scrios go buan gach teachtaireacht sa chomhrá seo.", + "_%n hour_::_%n hours_" : ["%n uair an chloig","%n uair an chloig","%n uair an chloig","%n uair an chloig","%n uair an chloig"], + "_%n day_::_%n days_" : ["%n lá","%n laethanta","%n laethanta","%n laethanta","%n laethanta"], + "_%n week_::_%n weeks_" : ["%n seachtain","%n seachtainí","%n seachtainí","%n seachtainí","%n seachtainí"], + "Custom expiration time" : "Am éaga saincheaptha", + "Message expiration disabled" : "Díchumasaíodh dul in éag na teachtaireachta", + "Message expiration set: {duration}" : "Socraigh dul in éag na teachtaireachta: {duration}", + "Error when trying to set message expiration" : "Earráid agus iarracht á dhéanamh dul in éag na teachtaireachta a shocrú", + "Message expiration" : "Teachtaireacht in éag", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Is féidir teachtaireachtaí comhrá a bheith imithe in éag tar éis am áirithe. Nóta: Ní scriosfar comhaid a roinntear sa chomhrá don úinéir, ach ní roinnfear iad sa chomhrá a thuilleadh.", + "Set message expiration" : "Socraigh éag na teachtaireachta", + "Current message expiration" : "Tá an teachtaireacht reatha imithe in éag", + "Password copied to clipboard" : "Cóipeáladh an pasfhocal chuig an ngearrthaisce", + "Password could not be copied" : "Níorbh fhéidir an pasfhocal a chóipeáil", + "Guest access" : "Rochtain aoi", + "Breakout rooms are not allowed in public conversations." : "Ní cheadaítear seomraí ar leithligh i gcomhráite poiblí.", + "Allow guests to join this conversation via link" : "Lig d'aíonna páirt a ghlacadh sa chomhrá seo trí nasc", + "Password protection" : "Cosaint pasfhocal", + "This conversation is password-protected. Guests need password to join" : "Tá an comhrá seo cosanta ag pasfhocal. Teastaíonn pasfhocal ó aíonna le bheith páirteach", + "Password protection is needed for public conversations" : "Tá cosaint pasfhocail ag teastáil le haghaidh comhráite poiblí", + "Set a password" : "Socraigh focal faire", + "Change password" : "Athraigh do phasfhocal", + "Enter new password" : "Cuir isteach pasfhocal nua", + "Save password" : "Sábháil pasfhocal", + "Copy password" : "Cóipeáil pasfhocal", + "Guests are allowed to join this conversation via link" : "Tá cead ag aíonna páirt a ghlacadh sa chomhrá seo trí nasc", + "Guests are not allowed to join this conversation" : "Níl cead ag aíonna páirt a ghlacadh sa chomhrá seo", + "Resend invitations" : "Cuir cuirí ar ais", + "This conversation is open to both registered users and users created with the Guests app" : "Tá an comhrá seo oscailte d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Aíonna", + "This conversation is open to registered users" : "Tá an comhrá seo oscailte d'úsáideoirí cláraithe", + "This conversation is limited to the current participants" : "Tá an comhrá seo teoranta do na rannpháirtithe reatha", + "You opened the conversation to both registered users and users created with the Guests app" : "D’oscail tú an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Aíonna", + "Error occurred when opening or limiting the conversation" : "Tharla earráid agus an comhrá á oscailt nó á theorannú", + "Open conversation to registered users, showing it in search results" : "Oscail an comhrá d'úsáideoirí cláraithe, agus é á thaispeáint i dtorthaí cuardaigh", + "Also open to users created with the Guests app" : "Ar oscailt freisin d'úsáideoirí a cruthaíodh leis an aip Aíonna", + "Open conversation" : "Oscail comhrá", + "Set language spoken in calls" : "Socraigh an teanga a labhraítear i nglaonna", + "Languages could not be loaded" : "Níorbh fhéidir teangacha a luchtú", + "Loading languages …" : "Teangacha á lódáil …", + "Invalid language" : "Teanga neamhbhailí", + "Default language (English)" : "Teanga réamhshocraithe (Béarla)", + "Default live transcription language set" : "Socrú teanga réamhshocraithe trascríobh beo", + "Live transcription language set: {languageName}" : "Tacar teanga trascríobh beo: {languageName}", + "Error when trying to set live transcription language" : "Earráid agus iarracht á déanamh teanga trascríobh beo a shocrú", + "Start time: {date}" : "Am tosaithe: {date}", + "Start time has been updated" : "Nuashonraíodh an t-am tosaithe", + "Error occurred while updating start time" : "Tharla earráid agus an t-am tosaithe á nuashonrú", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Má dhéantar an brústocaireacht a chumasú, bainfear daoine nach modhnóirí iad den ghlao leanúnach.", + "Enable lobby, restricting the conversation to moderators" : "Cumasaigh stocaireacht, ag srianadh an chomhrá do mhodhnóirí", + "Meeting start time" : "Am tosaithe cruinnithe", + "Start time (optional)" : "Am tosaithe (roghnach)", + "Import email participants" : "Iompórtáil rannpháirtithe ríomhphoist", + "You can import a list of email participants from a CSV file." : "Is féidir leat liosta rannpháirtithe ríomhphoist a allmhairiú ó chomhad CSV.", + "Poll drafts" : "Dréachtanna vótaíochta", + "Browse poll drafts" : "Brabhsáil dréachtaí vótaíochta", + "Error occurred when locking the conversation" : "Tharla earráid agus an comhrá á ghlasáil", + "Error occurred when unlocking the conversation" : "Tharla earráid agus an comhrá á dhíghlasáil", + "Lock conversation" : "Cuir glas ar an gcomhrá", + "This will also terminate the ongoing call." : "Cuirfidh sé seo deireadh leis an nglao leanúnach freisin.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Cuir glas ar an gcomhrá chun cosc ​​a chur ar aon duine teachtaireachtaí a phostáil nó glaonna a thosú", + "Edit" : "Cuir in eagar", + "More information" : "Tuilleadh eolais", + "Delete" : "Scrios", + "Add new bridged channel to current conversation" : "Cuir cainéal nua droichid leis an gcomhrá reatha", + "unknown state" : "Stát anaithnid", + "running" : "Ag rith", + "not running, check Matterbridge log" : "Nach bhfuil ag rith, seiceáil logáil Matterbridge", + "not running" : "Gan rith", + "Bridge saved" : "Droichead shábháil", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Is féidir leat cainéil ó chórais teachtaireachtaí meandracha éagsúla a dhroicheadú le Matterbridge.", + "More info on Matterbridge" : "Tuilleadh eolais ar Matterbridge", + "Messaging systems" : "Córais teachtaireachta", + "Enable bridge" : "Cumasaigh droichead", + "Show Matterbridge log" : "Taispeáin loga Matterbridge", + "Log content" : "Ábhar logála", + "Only moderators are allowed to mention @all" : "Ní cheadaítear ach do mhodhnóirí @all a lua", + "All participants are allowed to mention @all" : "Tá cead ag gach rannpháirtí @all a lua", + "Participants are now allowed to mention @all." : "Tá cead anois ag rannpháirtithe @all a lua.", + "Mentioning @all has been limited to moderators." : "Tá tagairt do @all teoranta do mhodhnóirí.", + "Allow participants to mention @all" : "Lig do rannpháirtithe @all a lua", + "Mention permissions" : "Luaigh ceadanna", + "Notifications" : "Fógraí", + "Notify about calls in this conversation" : "Cuir glaonna ar an eolas sa chomhrá seo", + "Important conversation" : "Comhrá tábhachtach", + "\"Do not disturb\" user status is ignored for important conversations" : "Déantar neamhaird ar stádas an úsáideora \"Ná cuir isteach\" i gcás comhráite tábhachtacha", + "Sensitive conversation" : "Comhrá íogair", + "Message preview will be disabled in conversation list and notifications" : "Díchumasófar réamhamharc teachtaireachta sa liosta comhráite agus sna fógraí", + "Recording consent is required for calls in this conversation" : "Tá toiliú taifeadta ag teastáil le haghaidh glaonna sa chomhrá seo", + "Recording consent is not required for calls in this conversation" : "Níl toiliú taifeadta ag teastáil le haghaidh glaonna sa chomhrá seo", + "Recording consent requirement was updated" : "Nuashonraíodh an riachtanas um thoiliú taifeadta", + "Error occurred while updating recording consent" : "Tharla earráid agus an toiliú taifeadta á nuashonrú", + "Recording Consent" : "Toiliú Taifeadta", + "Recording consent cannot be changed once a call or breakout session has started." : "Ní féidir toiliú taifeadta a athrú nuair a bheidh glao nó seisiún ar leithligh tosaithe.", + "Require recording consent before joining call in this conversation" : "Teastaíonn toiliú taifeadta sula nglacann tú páirt sa ghlao seo", + "Recording consent is required for all calls" : "Tá toiliú taifeadta ag teastáil le haghaidh gach glao", + "SIP dial-in is now possible without PIN requirement" : "Is féidir SIP a dhiailiú isteach anois gan riachtanas PIN", + "SIP dial-in is now enabled" : "Tá diail isteach SIP cumasaithe anois", + "SIP dial-in is now disabled" : "Tá an dhiailiú isteach SIP díchumasaithe anois", + "Error occurred when enabling SIP dial-in" : "Tharla earráid agus an diail-isteach SIP á chumasú", + "Error occurred when disabling SIP dial-in" : "Tharla earráid agus an dhiailiú isteach SIP á dhíchumasú", + "Phone and SIP dial-in" : "Fón agus SIP dhiailiú-i", + "Enable phone and SIP dial-in" : "Cumasaigh guthán agus SIP diailithe", + "Allow to dial-in without a PIN" : "Ceadaigh diailiú isteach gan UAP", + "Ongoing" : "Ar siúl", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n duine glactha","%n duine glactha","%n duine glactha","%n duine glactha","%n duine glactha"], + "_%n person declined_::_%n people declined_" : ["Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine"], + "_and %n other attachment_::_and %n other attachments_" : ["agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile"], + "With {displayName}" : "Le {displayName}", + "In {conversation}" : "I {conversation}", + "View attachment" : "Féach ar an gceangaltán", + "Join" : "Glac páirt", + "View conversation" : "Féach ar an gcomhrá", + "View event on Calendar" : "Féach ar an imeacht ar an bhFéilire", + "Error while creating the conversation" : "Earráid agus an comhrá á chruthú", + "Hello, {displayName}" : "Haigh, {displayName}", + "Start meeting now" : "Tosaigh ag cruinniú anois", + "Give your meeting a title" : "Tabhair teideal do do chruinniú", + "Create and copy link" : "Cruthaigh agus cóipeáil nasc", + "Create a new conversation" : "Cruthaigh comhrá nua", + "Join open conversations" : "Glac páirt i gcomhráite oscailte", + "Call a phone number" : "Cuir glaoch ar uimhir theileafóin", + "Scroll backward" : "Scrollaigh siar", + "Scroll forward" : "Scrollaigh ar aghaidh", + "Schedule meetings" : "Sceideal cruinnithe", + "You don't have any upcoming meetings" : "Níl aon chruinnithe atá le teacht agat", + "Calendar events with a conversation link as the location are shown here" : "Taispeántar imeachtaí féilire le nasc comhrá mar shuíomh anseo", + "Open calendar" : "Oscail an féilire", + "Unread mentions" : "Luaite gan léamh", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Beidh teachtaireachtaí inar luadh thú le feiceáil anseo. Is féidir leat daoine a lua trí @ a chlóscríobh agus a n-ainm ina dhiaidh sin", + "Upcoming reminders" : "Meabhrúcháin atá le teacht", + "Message reminders" : "Meabhrúcháin teachtaireachtaí", + "Set a reminder on a message to be notified" : "Socraigh meabhrúchán ar theachtaireacht le fógra a fháil", + "Start a group conversation" : "Cuir tús le comhrá grúpa", + "Create conversation" : "Cruthaigh comhrá", + "Enter your name" : "Cuir isteach d'ainm", + "Submit name and join" : "Cuir isteach ainm agus páirt a ghlacadh", + "Do you already have an account?" : "An bhfuil cuntas agat cheana féin?", + "Log in" : "Logáil isteach", + "Error while verifying uploaded file" : "Earráid agus an comhad uaslódáilte á fhíorú", + "Uploaded file is verified" : "Tá an comhad uaslódáilte fíoraithe", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Is éard atá i bhformáid ábhair ná luachanna camógdheighilte (CSV):
- Tá líne ceanntásca ag teastáil agus ní mór \"ainm\",\"ríomhphost\" nó díreach \"ríomhphost\"
- Iontráil amháin in aghaidh an líne a mheaitseáil (m.sh. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "D'éirigh leis na rannpháirtithe a chur leis", + "Error while adding participants" : "Earráid agus rannpháirtithe á gcur leis", + "Import a file" : "Iompórtáil comhad", + "Browse" : "Brabhsáil", + "Verifying uploaded file …" : "Comhad uaslódáilte á fhíorú…", + "This might take a moment" : "Seans go dtógfaidh sé seo nóiméad", + "Send invitations" : "Seol cuirí", + "_%n invalid email_::_%n invalid emails_" : ["%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["Tá %n ríomhphost iompórtáilte cheana nó ina dhúblach","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh"], + "An error occurred while calling a phone number" : "Tharla earráid agus glaoch ar uimhir theileafóin", + "Phone number could not be called: {error}" : "Níorbh fhéidir uimhir theileafóin a ghlaoch: {error}", + "Phone number could not be called" : "Níorbh fhéidir uimhir theileafóin a ghlaoch", + "Search participants or phone numbers" : "Cuardaigh rannpháirtithe nó uimhreacha gutháin", + "Creating the conversation …" : "Ag cruthú an chomhrá…", + "Mark as read" : "Marcáil mar léite", + "Mark as unread" : "Marcáil mar neamhléite", + "Remove from favorites" : "Bain ó cheanáin", + "Add to favorites" : "Cuir le ceanáin", + "Unarchive conversation" : "Comhrá gan chartlann", + "Ignore \"Do not disturb\"" : "Déan neamhaird de \"Ná cuir isteach\"", + "You need to promote a new moderator before you can leave the conversation." : "Ní mór duit modhnóir nua a chur chun cinn sula bhféadfaidh tú an comhrá a fhágáil.", + "Conversation actions" : "Gníomhartha comhrá", + "Notify about calls" : "Fógra a thabhairt faoi ghlaonna", + "Hide message text" : "Folaigh téacs an teachtaireachta", + "Pending invitations" : "Cuirí ar feitheamh", + "Join conversations from other servers" : "Glac páirt i gcomhráite ó fhreastalaithe eile", + "From {user} at {remoteServer}" : "Ó {user} ag {remoteServer}", + "Decline invitation" : "Diúltaigh cuireadh", + "Accept invitation" : "Glac le cuireadh", + "No pending invitations" : "Níl aon chuirí ar feitheamh", + "Home" : "Baile", + "Unread" : "Neamhléite", + "Mentions" : "Luann", + "Meetings" : "Cruinnithe", + "Sort conversations" : "Sórtáil comhráite", + "By recent activity" : "De réir gníomhaíochta le déanaí", + "Alphabetically" : "In ord aibítre", + "Do not group by type" : "Ná grúpáil de réir cineáil", + "Show private ones first" : "Taispeáin cinn phríobháideacha ar dtús", + "Show group ones first" : "Taispeáin cinn na ngrúpaí ar dtús", + "No followed threads" : "Gan aon snáitheanna le leanúint", + "No matches found" : "Níor aimsíodh aon mheaitseáil", + "No conversations found" : "Níor aimsíodh aon chomhrá", + "You have no archived conversations." : "Níl aon chomhráite sa chartlann agat.", + "Subscribe to an existing thread or start your own." : "Liostáil le snáithe atá ann cheana féin nó tosaigh do cheann féin.", + "You have no unread mentions." : "Níl aon tagairtí neamhléite agat.", + "You have no unread messages." : "Níl aon teachtaireachtaí neamhléite agat.", + "An error occurred while performing the search" : "Tharla earráid agus an cuardach á dhéanamh", + "Conversation list" : "Liosta comhráite", + "Filter conversations by" : "Scag comhráite de réir", + "Unread messages" : "Teachtaireachtaí gan léamh", + "Meeting conversations" : "Comhráite cruinnithe", + "Clear filters" : "Glan na scagairí", + "New personal note" : "Nóta pearsanta nua", + "SIP backend is not installed" : "Níl an cúltaca SIP suiteáilte", + "Back to conversations" : "Ar ais chuig comhráite", + "Archived conversations" : "Comhráite cartlainne", + "Threads" : "Snáitheanna", + "Clear filter" : "Glan an scagaire", + "Show more threads" : "Taispeáin níos mó snáitheanna", + "App settings" : "Socruithe aip", + "Users" : "Úsáideoirí", + "Groups" : "Grúpaí", + "Teams" : "Foirne", + "Federated users" : "Úsáideoirí Cónaidhme", + "New private conversation" : "Comhrá príobháideach nua", + "Other sources" : "Foinsí eile", + "Open conversations" : "Oscail comhráite", + "No search results" : "Gan torthaí cuardaigh", + "Users, groups and teams" : "Úsáideoirí, grúpaí agus foirne", + "Users and groups" : "Úsáideoirí agus grúpaí", + "Users and teams" : "Úsáideoirí agus foirne", + "Groups and teams" : "Grúpaí agus foirne", + "New group conversation" : "Comhrá grúpa nua", + "The meeting will start soon" : "Cuirfear tús leis an gcruinniú go luath", + "This meeting is scheduled for {startTime}" : "Tá an cruinniú seo sceidealaithe le haghaidh {startTime}", + "You are currently waiting in the lobby" : "Tá tú ag fanacht sa stocaireacht faoi láthair", + "Enable noise suppression" : "Cumasaigh cosc ​​torainn", + "Reduce background noises for better voice quality" : "Laghdaigh torann cúlra le haghaidh caighdeán gutha níos fearr", + "Enable echo cancellation" : "Cumasaigh cealú macalla", + "Minimize echo effect from own surrounding" : "Íoslaghdaigh éifeacht macalla ón timpeallacht féin", + "Enable auto gain control" : "Cumasaigh rialú uathoibríoch gnóthachain", + "Dynamically adjust microphone volume for consistent level" : "Coigeartaigh toirt an mhicreafóin go dinimiciúil le haghaidh leibhéal comhsheasmhach", + "Select microphone" : "Roghnaigh micreafón", + "No microphone available" : "Níl micreafón ar fáil", + "Select speaker" : "Roghnaigh cainteoir", + "No speaker available" : "Níl aon chainteoir ar fáil", + "Select camera" : "Roghnaigh ceamara", + "No camera available" : "Níl ceamara ar fáil", + "Select a device" : "Roghnaigh gléas", + "Playing …" : "Ag imirt…", + "Test speakers" : "Cainteoirí tástála", + "Test" : "Scrúdú", + "Devices" : "Gléasanna", + "Backgrounds" : "Cúlra", + "No audio" : "Gan fuaim", + "No camera" : "Gan ceamara", + "Display video as you will see it (mirrored)" : "Taispeáin físeán mar a fheicfidh tú é (scáthánaithe)", + "Display video as others will see it" : "Taispeáin físeán mar a fheicfidh daoine eile é", + "Calls are not supported in your browser" : "Ní thacaítear le glaonna i do bhrabhsálaí", + "Access to microphone is only possible with HTTPS" : "Ní féidir rochtain ar mhicreafón ach amháin le HTTPS", + "Access to microphone was denied" : "Diúltaíodh rochtain ar mhicreafón", + "Error while accessing microphone" : "Earráid agus an micreafón á rochtain", + "Access to camera is only possible with HTTPS" : "Ní féidir rochtain ar cheamara ach amháin le HTTPS", + "The call is being recorded." : "Tá an glao á thaifeadadh.", + "The call might be recorded." : "Seans go ndéanfar an glao a thaifeadadh.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Seans go gcuimseodh an taifeadadh do ghuth, físeáin ó cheamara, agus comhroinnt scáileáin. Tá do thoiliú ag teastáil sula nglacann tú páirt sa ghlao.", + "Give consent to the recording of this call" : "Toiliú le taifeadadh an ghlao seo", + "Show more info" : "Taispeáin tuilleadh eolais", + "Audio is not available" : "Níl fuaim ar fáil", + "Video is not available" : "Níl físeán ar fáil", + "Start recording immediately with the call" : "Tosaigh ag taifeadadh láithreach leis an nglao", + "Recording backend is not installed" : "Níl an chúltaca taifeadta suiteáilte", + "Notify all participants about this call" : "Cuir na rannpháirtithe uile ar an eolas faoin nglao seo", + "Apply settings" : "Cuir socruithe i bhfeidhm", + "Select virtual office background" : "Roghnaigh cúlra oifige fíorúil", + "Select virtual home background" : "Roghnaigh cúlra baile fíorúil", + "Select virtual abstract background" : "Roghnaigh cúlra teibí fíorúil", + "Select virtual beach background" : "Roghnaigh cúlra trá fíorúil", + "Select virtual park background" : "Roghnaigh cúlra páirce fíorúil", + "Select virtual theater background" : "Roghnaigh cúlra amharclainne fíorúil", + "Select virtual library background" : "Roghnaigh cúlra leabharlainne fíorúil", + "Select virtual space station background" : "Roghnaigh cúlra stáisiún spáis fíorúil", + "Error while uploading the file" : "Earráid agus an comhad á uaslódáil", + "Select a file" : "Roghnaigh comhad", + "Invalid path selected" : "Conair neamhbhailí roghnaithe", + "Select virtual background from file {fileName}" : "Roghnaigh cúlra fíorúil ó chomhad {fileName}", + "Blur" : "Doiléirigh", + "Upload" : "Uaslódáil", + "Files" : "Comhaid", + "(editing)" : "(eagarthóireacht)", + "(edited)" : "(in eagar)", + "The message has expired or has been deleted" : "Tá an teachtaireacht imithe in éag nó scriosta", + "Cancel quote" : "Cealaigh an luachan", + "24 hours" : "24 huaire", + "7 days" : "7 lá", + "30 days" : "30 lá", + "Until unpin" : "Go dtí go ndíphionálfar", + "Clear reminder – {timeLocale}" : "Glan meabhrúchán - {timeLocale}", + "Edited by {actor}" : "Arna chur in eagar ag {actor}", + "Pinned by you" : "Bioránta agatsa", + "Pinned by {actor}" : "Bioránta ag {actor}", + "Until {absoluteDate}" : "Go dtí {absoluteDate}", + "Message text copied to clipboard" : "Cóipeáladh téacs na teachtaireachta chuig an ngearrthaisce", + "Message text could not be copied" : "Níorbh fhéidir téacs na teachtaireachta a chóipeáil", + "Message forwarded to \"Note to self\"" : "Cuireadh an teachtaireacht ar aghaidh chuig \"Nóta duit féin\"", + "Error while forwarding message to \"Note to self\"" : "Earráid agus teachtaireacht á cur ar aghaidh chuig \"Nóta duit féin\"", + "A reminder was successfully removed" : "Baineadh meabhrúchán go rathúil", + "Error occurred when removing a reminder" : "Tharla earráid agus meabhrúchán á bhaint", + "A reminder was successfully set at {datetime}" : "Socraíodh meabhrúchán ag {datetime}", + "Error occurred when creating a reminder" : "Tharla earráid agus meabhrúchán á chruthú", + "Add a reaction to this message" : "Cuir imoibriú leis an teachtaireacht seo", + "Reply" : "Freagra", + "More actions" : "Tuilleadh gníomhartha", + "Set reminder" : "Socraigh meabhrúchán", + "Pin message" : "Teachtaireacht bioráin", + "Unpin message" : "Bain teachtaireacht den bhiorán ", + "Reply privately" : "Freagair go príobháideach", + "Edit message" : "Cuir teachtaireacht in eagar", + "Copy message" : "Cóipeáil teachtaireacht", + "Copy message link" : "Cóipeáil nasc na teachtaireachta", + "Go to file" : "Téigh go dtí an comhad", + "Download file" : "Íoslódáil an comhad", + "Go to thread" : "Téigh go dtí an snáithe", + "Edit thread details" : "Cuir sonraí an snáithe in eagar", + "Forward message" : "Teachtaireacht ar aghaidh", + "Translate" : "Aistrigh", + "Set custom reminder" : "Socraigh meabhrúchán saincheaptha", + "Keep pinned for" : "Coinnigh bioránta le haghaidh", + "Set custom period" : "Socraigh tréimhse saincheaptha", + "Close reactions menu" : "Dún an roghchlár imoibrithe", + "React with {emoji}" : "Freagair le {emoji}", + "React with another emoji" : "Freagair le emoji eile", + "Choose a conversation to forward the selected message." : "Roghnaigh comhrá chun an teachtaireacht roghnaithe a chur ar aghaidh.", + "Error while forwarding message" : "Earráid agus an teachtaireacht á cur ar aghaidh", + "The message has been forwarded to {selectedConversationName}" : "Cuireadh an teachtaireacht ar aghaidh chuig {selectedConversationName}", + "Dismiss" : "Díbhe", + "Go to conversation" : "Téigh chuig comhrá", + "Detect language" : "Braith teanga", + "The message could not be translated" : "Níorbh fhéidir an teachtaireacht a aistriú", + "Translation copied to clipboard" : "Cóipeáladh an t-aistriúchán chuig an ngearrthaisce", + "Translation could not be copied" : "Níorbh fhéidir an t-aistriúchán a chóipeáil", + "Translate message" : "Aistrigh teachtaireacht", + "Source language to translate from" : "Teanga foinse le haistriú uaidh", + "Translate from" : "Aistrigh ó", + "Target language to translate into" : "Sprioctheanga le haistriú go", + "Translate to" : "Aistrigh go", + "Translating" : "Ag aistriú", + "This translation is AI generated and may contain mistakes." : "Is aistriúchán ginte ag hintleacht shaorga é seo agus d’fhéadfadh botúin a bheith ann.", + "Copy translated text" : "Cóipeáil téacs aistrithe", + "Error when scheduling the message" : "Earráid agus an teachtaireacht á sceidealú", + "Reschedule" : "Athsceidealú", + "Send now" : "Seol anois", + "Choose a time" : "Roghnaigh am", + "Send at custom time" : "Seol ag am saincheaptha", + "Will be sent without notification" : "Seolfar gan fógra", + "Message read by everyone who shares their reading status" : "Teachtaireacht léite ag gach duine a roinneann a stádas léitheoireachta", + "Message sent" : "Teachtaireacht seolta", + "Sent without notification" : "Seolta gan fógra", + "Deleting message" : "Teachtaireacht á scriosadh", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "D'éirigh leis an teachtaireacht a scriosadh, ach tá bot nó Matterbridge cumraithe agus seans go mbeidh an teachtaireacht scaipthe cheana féin ar sheirbhísí eile", + "Message deleted successfully" : "D'éirigh leis an teachtaireacht a scriosadh", + "Message could not be deleted because it is too old" : "Níorbh fhéidir an teachtaireacht a scriosadh toisc go bhfuil sé ró-shean", + "Only normal chat messages can be deleted" : "Ní féidir ach gnáth-theachtaireachtaí comhrá a scriosadh", + "An error occurred while deleting the message" : "Tharla earráid agus an teachtaireacht á scriosadh", + "Pinned" : "Bioránta", + "Your browser does not support playing audio files" : "Ní thacaíonn do bhrabhsálaí le comhaid fuaime a sheinm", + "Contact" : "Teagmháil", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Cárta Deic", + "Remove {fileName}" : "Bain {fileName}", + "Open this location in OpenStreetMap" : "Oscail an suíomh seo in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n freagra","%n freagraí","%n freagraí","%n freagraí","%n freagraí"], + "Sending message" : "Teachtaireacht á seoladh", + "Failed to send the message. Click to try again" : "Theip ar an teachtaireacht a sheoladh. Cliceáil chun triail eile a bhaint as", + "Not enough free space to upload file" : "Níl go leor spás saor chun an comhad a uaslódáil", + "You cannot send messages to this conversation at the moment" : "Ní féidir leat teachtaireachtaí a sheoladh chuig an gcomhrá seo faoi láthair", + "Could not update the message" : "Níorbh fhéidir an teachtaireacht a nuashonrú", + "Reply to thread \"{threadTitle}\"" : "Freagra ar an snáithe \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Vótáil tú • %n vóta","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí"], + "You voted" : "Vótáil tú", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Cliceáil chun vótáil • %n vóta","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí"], + "Click to vote" : "Cliceáil chun vótáil", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha"], + "_%n vote_::_%n votes_" : ["%n vóta","%n vótaí","%n vótaí","%n vótaí","%n vótaí"], + "Edit poll draft" : "Cuir dréacht vótaíochta in eagar", + "Delete poll draft" : "Scrios an dréacht vótaíochta", + "Open poll" : "Vótaíocht oscailte", + "Closed poll" : "Vótaíocht dúnta", + "See results" : "Féach torthaí", + "Reactions" : "Imoibrithe", + "No permission to post reactions in this conversation" : "Níl cead frithghníomhartha a phostáil sa chomhrá seo", + "and {participant}" : "agus {participant}", + "_and %n other participant_::_and %n other participants_" : ["agus %n rannpháirtí eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile"], + "Show all reactions" : "Taispeáin gach imoibriú", + "Add more reactions" : "Cuir tuilleadh imoibrithe leis", + "Show or collapse system messages" : "Taispeáin nó laghdaigh teachtaireachtaí córais", + "No messages" : "Gan teachtaireachtaí", + "All messages have expired or have been deleted." : "Tá gach teachtaireacht imithe in éag nó scriosta.", + "Generate summary with AI" : "Achoimre a ghiniúint le hintleacht shaorga", + "{author} (pinned by you)" : "{author} (bioránta agatsa)", + "{author} (pinned by {actor})" : "{author} (bioránta ag {actor})", + "Unpin" : "Díbhioráil", + "Cancel search" : "Cealaigh an cuardach", + "Add a phone number" : "Cuir uimhir theileafóin leis", + "Error: A password is required to create the conversation." : "Earráid: Tá pasfhocal ag teastáil chun an comhrá a chruthú.", + "All set, the conversation \"{conversationName}\" was created." : "Gach socraithe, cruthaíodh an comhrá \"{conversationName}\".", + "Create a new group conversation" : "Cruthaigh comhrá grúpa nua", + "Add participants" : "Cuir rannpháirtithe leis", + "Maximum length exceeded ({maxlength} characters)" : "Sáraíodh an t-uasfhad ({maxlength} carachtar)", + "Conversation type" : "Cineál comhrá", + "Conversation visibility" : "Infheictheacht an chomhrá", + "Allow guests to join via link" : "Lig do aíonna páirt a ghlacadh tríd an nasc", + "Enter password" : "Cuir isteach pasfhocal", + "This conversation has been locked" : "Tá an comhrá seo glasáilte", + "No permission to post messages in this conversation" : "Níl cead teachtaireachtaí a phostáil sa chomhrá seo", + "Joining conversation …" : "Ag glacadh páirte sa chomhrá…", + "Write a message without notification" : "Scríobh teachtaireacht gan fógra", + "Create a thread silently" : "Cruthaigh snáithe go ciúin", + "Create a thread" : "Cruthaigh snáithe", + "Send message silently" : "Seol teachtaireacht go ciúin", + "Send message" : "Seol teachtaireacht", + "Send without notification" : "Seol gan fógra", + "The participant will not be notified about new messages" : "Ní thabharfar fógra don rannpháirtí faoi theachtaireachtaí nua", + "Participants will not be notified about new messages" : "Ní thabharfar fógra do rannpháirtithe faoi theachtaireachtaí nua", + "Message will be sent {datetimeString}" : "Seolfar an teachtaireacht chuig {datetimeString}", + "Thread title is required" : "Tá teideal an tsnáithe riachtanach", + "Message text is required" : "Tá téacs an teachtaireachta ag teastáil", + "The message could not be edited" : "Níorbh fhéidir an teachtaireacht a chur in eagar", + "File to share" : "Comhad le roinnt", + "File upload is not available in this conversation" : "Níl uaslódáil comhad ar fáil sa chomhrá seo", + "Message was successfully scheduled" : "Sceidealaíodh an teachtaireacht go rathúil", + "Add emoji" : "Cuir emoji leis", + "Adding a mention will only notify users who did not read the message." : "Má chuirtear tagairt leis, ní chuirfear in iúl ach d'úsáideoirí nár léigh an teachtaireacht.", + "Thread title" : "Teideal an snáithe", + "Send later" : "Seol níos déanaí", + "Show scheduled messages" : "Taispeáin teachtaireachtaí sceidealaithe", + "Cancel editing" : "Cealaigh eagarthóireacht", + "Schedule message" : "Teachtaireacht sceidealaithe", + "{user} is out of office and might not respond." : "Tá {user} as an oifig agus seans nach bhfreagróidh sé.", + "Absence period: {startDate} - {endDate}" : "Tréimhse neamhláithreachta: {startDate} - {endDate}", + "Replacement:" : "Athsholáthar:", + "Share from {nextcloud}" : "Roinn ó {nextcloud}", + "Share from Files" : "Comhroinn ó Chomhaid", + "Share files to the conversation" : "Roinn comhaid leis an gcomhrá", + "Upload from device" : "Íosluchtaigh ó gléas", + "Create new poll" : "Cruthaigh vótaíocht nua", + "Smart picker" : "Roghnóir cliste", + "Record voice message" : "Taifead teachtaireacht gutha", + "End recording and send" : "Cuir deireadh leis an taifeadadh agus seol", + "Dismiss recording" : "Ruaig an taifeadadh", + "Access to the microphone was denied" : "Diúltaíodh rochtain ar an micreafón", + "Microphone either not available or disabled in settings" : "Níl an micreafón ar fáil nó díchumasaithe sna socruithe", + "Error while recording audio" : "Earráid agus an fhuaim á taifeadadh", + "Voice message {time} ({conversation})" : "Teachtaireacht ghutha {time} ({conversation})", + "Generating summary of unread messages …" : "Achoimre ar theachtaireachtaí neamhléite á giniúint…", + "Summary is AI generated and might contain mistakes" : "Gintear achoimre ar AI agus d’fhéadfadh botúin a bheith ann", + "Error occurred during a summary generation" : "Tharla earráid le linn glúin achomair", + "New file" : "Comhad nua", + "Blank" : "Bán", + "Error while creating file" : "Earráid agus comhad á chruthú", + "Create and share a new file" : "Cruthaigh agus roinn comhad nua", + "Name of the new file" : "Ainm an chomhaid nua", + "Create file" : "Cruthaigh comhad", + "Someone is typing …" : "Tá duine éigin ag clóscríobh…", + "{user1} is typing …" : "Tá {user1} ag clóscríobh…", + "{user1} and {user2} are typing …" : "Tá {user1} agus {user2} ag clóscríobh…", + "{user1}, {user2} and {user3} are typing …" : "Tá {user1}, {user2} agus {user3} ag clóscríobh…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["Tá {user1}, {user2}, {user3} agus %n eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…"], + "Add more files" : "Cuir tuilleadh comhad leis", + "Send" : "Seol", + "In this conversation {user} can:" : "Sa chomhrá seo is féidir le{user}:", + "Edit default permissions for participants in {conversationName}" : "Cuir ceadanna réamhshocraithe do rannpháirtithe in {conversationName}in eagar", + "Start a call" : "Cuir tús le glaoch", + "Skip the lobby" : "Léim an stocaireacht", + "Can post messages" : "Is féidir teachtaireachtaí a phostáil", + "Can post messages and reactions" : "Is féidir teachtaireachtaí agus freagraí a phostáil", + "Can add reactions" : "Is féidir imoibrithe a chur leis", + "Enable the microphone" : "Cumasaigh an micreafón", + "Enable the camera" : "Cumasaigh an ceamara", + "Share the screen" : "Roinn an scáileán", + "Update permissions" : "Nuashonraigh ceadanna", + "Updating permissions" : "Ceadanna á nuashonrú", + "No poll drafts" : "Uimh dréachtaí vótaíochta", + "There is no poll drafts yet saved for this conversation" : "Níl aon dréachtaí vótaíochta sábháilte don chomhrá seo fós", + "Create poll in {name}" : "Cruthaigh vótaíocht isteach{name}", + "Create poll" : "Cruthaigh vótaíocht", + "Error while importing poll" : "Earráid agus vótaíocht á hiompórtáil", + "Question" : "Ceist", + "Ask a question" : "Ceist a chur", + "Import draft from file" : "Iompórtáil dréacht ó chomhad", + "Answers" : "Freagraí", + "Answer {option}" : "Freagair {option}", + "Delete poll option" : "Scrios an rogha vótaíochta", + "Add answer" : "Cuir freagra leis", + "Settings" : "Socruithe", + "Anonymous poll" : "Pobalbhreith gan ainm", + "Multiple answers" : "Freagraí iolracha", + "Save as draft" : "Sábháil mar dhréacht", + "Export draft to file" : "Easpórtáil dréacht go comhad", + "_Final results • %n vote_::_Final results • %n votes_" : ["Torthaí deiridh • %n vóta","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí"], + "Your vote is anonymous" : "Tá do vóta gan ainm", + "You voted for this option" : "Vótáil tú ar son an rogha seo", + "End poll" : "Deireadh vótaíocht", + "Change your vote" : "Athraigh do vóta", + "Withdraw vote" : "Tarraing siar vóta", + "Results" : "Torthaí", + "Download as spreadsheet" : "Íoslódáil mar scarbhileog", + "Download as CSV" : "Íoslódáil mar CSV", + "Voted participants" : "Rannpháirtithe vótáilte", + "Send a message to \"{roomName}\"" : "Seol teachtaireacht chuig \"{roomName}\"", + "Hide list of participants" : "Folaigh liosta na rannpháirtithe", + "Show list of participants" : "Taispeáin liosta na rannpháirtithe", + "Assistance requested in {roomName}" : "Iarradh cúnamh in {roomName}", + "The message was sent to \"{roomName}\"" : "Seoladh an teachtaireacht chuig \"{roomName}\"", + "Dismiss request for assistance" : "Déan iarratas ar chúnamh a dhíbhe", + "Send message to room" : "Seol teachtaireacht chuig an seomra", + "Back to main room" : "Ar ais go dtí an príomhsheomra", + "Back to your room" : "Ar ais go dtí do sheomra", + "Message all rooms" : "Cuir teachtaireacht chuig gach seomra", + "Start session" : "Tosaigh seisiún", + "Start a call before you start a breakout room session" : "Cuir tús le glao sula dtosaíonn tú ar sheisiún seomra ar leithligh", + "Stop session" : "Stop seisiún", + "The message was sent to all breakout rooms" : "Seoladh an teachtaireacht chuig gach seomra ar leithligh", + "Send a message to all breakout rooms" : "Seol teachtaireacht chuig gach seomra ar leithligh", + "Breakout rooms are not started" : "Níl seomraí ar leithligh tosaithe", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Is féidir le glaonna gan Inneall Ardfheidhmíochta a bheith ina gcúis le saincheisteanna nascachta agus ualach ard ar fheistí. {linkstart}Foghlaim tuilleadh{linkend}", + "Talk setup incomplete" : "Níl an socrú cainte críochnaithe", + "Disable lobby" : "Díchumasaigh an stocaireacht", + "Settings for participant \"{user}\"" : "Socruithe don rannpháirtí \"{user}\"", + "Participant \"{user}\"" : "Rannpháirtí \"{user}\"", + "moderator" : "modhnóir", + "bot" : "bota", + "guest" : "aoi", + "Ringing …" : "Ag glaoch…", + "Call rejected" : "Glao diúltaithe", + "{time} talking …" : "{time} ag caint…", + "{time} talking time" : "{time} am cainte", + "Raised their hand" : "Ardaíodh a lámh", + "Joined with video" : "Glacadh le físeán", + "Joined via phone" : "Glacadh leis ar an teileafón", + "Joined with audio" : "Glacadh le fuaime", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Caithfidh an téacs a bheith níos lú ná nó cothrom le {maxLength} carachtair ar fad. Tá {charactersCount} carachtar fada sa téacs reatha.", + "Remove group and members" : "Bain grúpa agus baill", + "Remove team and members" : "Bain foireann agus baill", + "Remove participant" : "Bain rannpháirtí", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "An bhfuil tú cinnte gur mhaith leat an grúpa \"{displayName}\" agus a bhaill a bhaint den chomhrá seo?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "An bhfuil tú cinnte gur mhaith leat foireann \"{displayName}\" agus a baill a bhaint den chomhrá seo?", + "Do you really want to remove {displayName} from this conversation?" : "An bhfuil tú cinnte gur mhaith leat {displayName} a bhaint den chomhrá seo?", + "Notification was sent to {displayName}" : "Seoladh fógra chuig {displayName}", + "Could not send notification to {displayName}" : "Níorbh fhéidir fógra a sheoladh chuig {displayName}", + "Permissions granted to {displayName}" : "Ceadanna tugtha do {displayName}", + "Could not modify permissions for {displayName}" : "Níorbh fhéidir ceadanna {displayName} a mhionathrú", + "Permissions removed for {displayName}" : "Baineadh ceadanna le haghaidh {displayName}", + "Permissions set to default for {displayName}" : "Ceadanna socraithe mar réamhshocrú le haghaidh {displayName}", + "Phone number could not be hung up" : "Níorbh fhéidir uimhir theileafóin a chrochadh", + "Phone number could not be put on hold" : "Níorbh fhéidir uimhir theileafóin a chur ar fionraí", + "Phone number could not be muted" : "Níorbh fhéidir an uimhir theileafóin a bhalbhú", + "Phone number could not be unmuted" : "Níorbh fhéidir an uimhir theileafóin a dhíbhalbhú", + "DTMF message could not be sent" : "Níorbh fhéidir an teachtaireacht DTMF a sheoladh", + "Phone number copied to clipboard" : "Cóipeáladh an uimhir theileafóin chuig an ngearrthaisce", + "Phone number could not be copied" : "Níorbh fhéidir uimhir theileafóin a chóipeáil", + "in the lobby" : "sa stocaireacht", + "Dial out phone" : "Diailigh fón", + "Hang up phone" : "Croch suas fón", + "Move back to lobby" : "Téigh ar ais chuig an stocaireacht", + "Move to conversation" : "Bog go comhrá", + "Dial-in PIN" : "UAP dhiailiú-i", + "Demote from moderator" : "Léim as an modhnóir", + "Promote to moderator" : "Cur chun cinn chuig modhnóir", + "Resend invitation" : "Seol cuireadh arís", + "Send call notification" : "Seol fógra glao", + "Dial out phone number" : "Diailigh uimhir theileafóin", + "Resume call for phone number" : "Lean glaoch ar uimhir theileafóin arís", + "Put phone number on hold" : "Cuir uimhir theileafóin ar feitheamh", + "Unmute phone number" : "Díbhalbhaigh uimhir theileafóin", + "Mute phone number" : "Balbhaigh uimhir theileafóin", + "Copy phone number" : "Cóipeáil uimhir theileafóin", + "Reset custom permissions" : "Athshocraigh ceadanna saincheaptha", + "Grant all permissions" : "Deonaigh gach cead", + "Remove all permissions" : "Bain gach cead", + "Also ban from this conversation" : "Cosc ón gcomhrá seo freisin", + "Internal note (reason to ban)" : "Nóta inmheánach (cúis le cosc)", + "Remove" : "Bain", + "Permissions modified for {displayName}" : "Athraíodh na ceadanna le haghaidh {displayName}", + "Add users, groups or teams" : "Cuir úsáideoirí, grúpaí nó foirne leis", + "Add users or groups" : "Cuir úsáideoirí nó grúpaí leis", + "Add users or teams" : "Cuir úsáideoirí nó foirne leis", + "Add users" : "Cuir úsáideoirí leis", + "Add groups or teams" : "Cuir grúpaí nó foirne leis", + "Add groups" : "Cuir grúpaí leis", + "Add teams" : "Cuir foirne leis", + "Add other sources" : "Cuir foinsí eile leis", + "Add emails" : "Cuir ríomhphoist leis", + "Integrations" : "Comhtháthaithe", + "Add federated users" : "Cuir úsáideoirí cónasctha leis", + "Searching …" : "Ag cuardach…", + "Search for more users" : "Cuardaigh le haghaidh níos mó úsáideoirí", + "You can search or add participants via name, email, or Federated Cloud ID" : "Is féidir leat rannpháirtithe a chuardach nó a chur leis trí ainm, ríomhphost nó ID Néal Cónaidhme", + "Search or add participants" : "Cuardaigh nó cuir rannpháirtithe leis", + "Invitation was sent to {actorId}" : "Seoladh cuireadh chuig {actorId}", + "An error occurred while adding the participants" : "Tharla earráid agus na rannpháirtithe á gcur leis", + "A new group conversation with selected participant will be created" : "Cruthófar comhrá grúpa nua le rannpháirtí roghnaithe", + "Participants" : "Rannpháirtithe", + "Pinned by a deleted user" : "Bioránta ag úsáideoir scriosta", + "Participants ({count})" : "Rannpháirtithe ({count})", + "Open chat" : "Oscail comhrá", + "You have new unread messages in the chat." : "Tá teachtaireachtaí nua neamhléite agat sa chomhrá.", + "You have been mentioned in the chat." : "Tá tú luaite sa chomhrá.", + "Search messages" : "Cuardaigh teachtaireachtaí", + "Chat" : "Comhrá", + "Details" : "Sonraí", + "Shared items" : "Míreanna roinnte", + "Search in {name}" : "Cuardaigh isteach {name}", + "Threads in {name}" : "Snáitheanna i {name}", + "{actor} in {conversation}" : "{actor} i {conversation}", + "Search messages …" : "Cuardaigh teachtaireachtaí…", + "Search options" : "Roghanna cuardaigh", + "From User" : "Ó Úsáideoir", + "Since" : "Ós rud é", + "Until" : "Go dtí", + "No results found" : "Níor aimsíodh aon torthaí", + "Load more results" : "Íoslódáil níos mó torthaí", + "Recent threads" : "Snáitheanna le déanaí", + "Projects" : "Tionscadail", + "No shared items" : "Níl aon mhír roinnte", + "Thread notifications" : "Fógraí snáithe", + "Thread actions" : "Gníomhartha snáithe", + "{actor}: {lastMessage}" : "{aisteoir}: {lastMessage}", + "Link to a conversation" : "Nasc le comhrá", + "No open conversations found" : "Níor aimsíodh aon chomhrá oscailte", + "Either there are no open conversations or you joined all of them." : "Níl aon chomhráite oscailte ann nó chuir tú isteach orthu go léir.", + "Check spelling or use complete words." : "Seiceáil an litriú nó bain úsáid as focail iomlána.", + "Search conversations or users" : "Cuardaigh comhráite nó úsáideoirí", + "Select conversation" : "Roghnaigh comhrá", + "Number length is not valid" : "Níl fad uimhreach bailí", + "Region code is not valid" : "Níl an cód réigiúin bailí", + "Number length is too short" : "Tá fad uimhreach ró-ghearr", + "Number length is too long" : "Tá fad uimhreach ró-fhada", + "Number is not valid" : "Níl an uimhir bailí", + "Phone numbers" : "Uimhreacha gutháin", + "Display name: {name}" : "Ainm taispeána: {name}", + "Edit display name" : "Cuir ainm taispeána in eagar", + "Display name (required)" : "Ainm taispeána (riachtanach)", + "Save name" : "Sábháil ainm", + "I picked message bubbles" : "Roghnaigh mé boilgeoga teachtaireachta", + "I picked the list style" : "Roghnaigh mé an stíl liosta", + "Error while setting personal setting" : "Earráid agus socrú pearsanta á shocrú", + "Error while saving sounds setting" : "Earráid agus socrú fuaimeanna á sábháil", + "Compact conversations list" : "Liosta comhráite dlúth", + "Chat appearance" : "Cuma comhrá", + "Messages list" : "Liosta teachtaireachtaí", + "Message bubbles" : "Bolgáin teachtaireachta", + "Play sounds when participants join or leave a call" : "Seinn fuaimeanna nuair a thagann rannpháirtithe isteach nó nuair a fhágann siad glao", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Níl sé ar fáil faoi láthair ar iPhone agus iPad mar gheall ar shrianta teicniúla ón monaróir", + "Notification settings" : "Socruithe fógra", + "Sounds for chat and call notifications" : "Fuaimeanna le haghaidh fógraí comhrá agus glaonna", + "Invalid language ({languageId})" : "Teanga neamhbhailí ({languageId})", + "Default language" : "Teanga réamhshocraithe", + "Default language ({languageName})" : "Teanga réamhshocraithe ({languageName})", + "Error when trying to load the available live translation languages" : "Earráid agus iarracht á déanamh na teangacha aistriúcháin bheo atá ar fáil a luchtú", + "Error when trying to set live translation language" : "Earráid agus iarracht á déanamh teanga aistriúcháin bheo a shocrú", + "Set language used to show the transcriptions" : "Socraigh an teanga a úsáidtear chun na trascríbhinní a thaispeáint", + "Select location for attachments" : "Roghnaigh suíomh le haghaidh ceangaltán", + "Error while setting attachment folder" : "Earráid agus fillteán ceangaltáin á shocrú", + "Error while setting read status privacy" : "Earráid agus príobháideacht stádais léite á shocrú", + "Error while setting typing status privacy" : "Earráid agus príobháideacht stádais á chlóscríobh", + "Error while setting default media state" : "Earráid agus an stát meán réamhshocraithe á shocrú", + "Turn camera and microphone off by default" : "Múch an ceamara agus an micreafón de réir réamhshocraithe", + "Blur camera background by default" : "Doiléirigh cúlra an cheamara de réir réamhshocraithe", + "Skip device preview before joining a call" : "Seachain réamhamharc gléis sula dtéann tú isteach i nglao", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Múchfar an ceamara nuair a bheidh tú ag glacadh páirte. Taispeántar i gcónaí é má tá toiliú taifeadta ag teastáil.", + "Appearance & Sounds" : "Dealramh & Fuaimeanna", + "Privacy" : "Príobháideacht", + "Send read receipts" : "Seol admhálacha léite", + "When off, all read statuses will be hidden" : "Nuair a bhíonn sé múchta, beidh gach stádas léite i bhfolach", + "Share typing status" : "Comhroinn stádas clóscríofa", + "When off, all typing indicators will be hidden" : "Nuair a bhíonn sé múchta, beidh na táscairí clóscríofa go léir i bhfolach", + "Attachments folder" : "Fillteán ceangaltáin", + "Toggle full screen" : "Scoránaigh scáileán iomlán", + "Return to Home screen" : "Fill ar ais go dtí an scáileán baile", + "Search" : "Cuardach", + "Shortcuts while in a chat" : "Aicearraí agus tú i gcomhrá", + "Focus the chat input" : "Dírigh an t-ionchur comhrá", + "Unfocus the chat input to use shortcuts" : "Dífhócas an t-ionchur comhrá chun aicearraí a úsáid", + "Edit your last message" : "Cuir do theachtaireacht dheireanach in eagar", + "Shortcuts while in a call" : "Aicearraí agus tú ar ghlao", + "Camera on and off" : "Ceamara ar siúl agus as", + "Microphone on and off" : "Micreafón ar siúl agus as", + "Raise or lower hand" : "Ardaigh nó lámh níos ísle", + "Push to talk or push to mute" : "Brúigh chun cainte nó brú chun balbhaigh", + "Zoom-in / zoom-out a screen share" : "Súmáil isteach / zúmáil amach sciar scáileáin", + "Mouse wheel" : "Roth luiche", + "Start call silently" : "Tosaigh glaoch go ciúin", + "Start call" : "Tosaigh glao", + "End call" : "Cuir deireadh leis an nglao", + "The server was updated, you cannot start or join a call." : "Nuashonraíodh an freastalaí, ní féidir leat glao a thosú ná páirt a ghlacadh ann.", + "This call has just ended" : "Tá deireadh leis an nglao seo", + "You will be able to join the call only after a moderator starts it." : "Ní bheidh tú in ann páirt a ghlacadh sa ghlao ach amháin tar éis do mhodhnóir é a thosú.", + "End call for everyone" : "Cuir deireadh leis an nglao do chách", + "Starting the recording" : "An taifeadadh a thosú", + "Recording" : "Taifeadadh", + "The call has been running for one hour." : "Tá an glao ar siúl ar feadh uair an chloig.", + "Cancel recording start" : "Cealaigh tús an taifeadta", + "Stop recording" : "Stop taifeadadh", + "Send a reaction" : "Seol imoibriú", + "React with {reaction}" : "Freagair le {rection}", + "All tasks done!" : "Gach tasc déanta!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tasc","{done}de %n tascanna","{done}de %n tascanna","{done}de %n tascanna","{done}de %n tascanna"], + "Add participants to this call" : "Cuir rannpháirtithe leis an nglao seo", + "_%n participant in call_::_%n participants in call_" : ["%n rannpháirtí sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao"], + "Scheduled messages" : "Teachtaireachtaí sceidealaithe", + "You are not allowed to enable screensharing" : "Níl cead agat comhroinnt scáileáin a chumasú", + "No screensharing" : "Gan comhroinnt scáileáin", + "Screensharing options" : "Roghanna comhroinnte scáileáin", + "Enable screensharing" : "Cumasaigh comhroinnt scáileáin", + "Bad sent video and screen quality." : "Físeán seolta agus droch-chaighdeán scáileáin.", + "Bad sent screen quality." : "Droch-chaighdeán scáileáin seolta.", + "Bad sent video quality." : "Droch-chaighdeán físeán seolta.", + "Bad sent audio, video and screen quality." : "Droch-chaighdeán fuaime, físeáin agus scáileáin seolta.", + "Bad sent audio and screen quality." : "Droch-chaighdeán fuaime seolta agus scáileáin.", + "Bad sent audio and video quality." : "Droch-chaighdeán fuaime agus físe seolta.", + "Bad sent audio quality." : "Droch-chaighdeán fuaime seolta.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Disable background blur" : "Díchumasaigh geamhú an chúlra", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a fheiceáil.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht do chomhroinnt scáileáin a dhíchumasú.", + "Disable screenshare" : "Díchumasaigh comhroinnt scáileáin", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht do fhíseán a dhíchumasú.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint.", + "Screen sharing is not supported by your browser." : "Ní thacaíonn do bhrabhsálaí le comhroinnt scáileáin.", + "Screen sharing requires the page to be loaded through HTTPS." : "Éilíonn comhroinnt scáileáin an leathanach a luchtú trí HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Éilíonn comhroinnt scáileáin an leathanach a luchtú trí HTTPS.", + "An error occurred while starting screensharing." : "Tharla earráid agus comhroinnt scáileáin á thosú.", + "Select virtual background" : "Roghnaigh cúlra fíorúil", + "Show your screen" : "Taispeáin do scáileán", + "Stop screensharing" : "Cuir stop le comhroinnt scáileáin", + "Mute others" : "Balbhaigh daoine eile", + "Start recording" : "Tosaigh taifeadadh", + "Set up breakout rooms" : "Socraigh seomraí ar leithligh", + "Download attendance list" : "Íoslódáil liosta freastalaithe", + "Open Calendar" : "Oscail Féilire", + "Remove participant {name}" : "Bain rannpháirtí {name}", + "Would you like to delete this conversation?" : "Ar mhaith leat an comhrá seo a scriosadh?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta."], + "Are you sure you want to delete this conversation?" : "An bhfuil tú cinnte gur mian leat an comhrá seo a scriosadh?", + "Delete now" : "Scrios anois", + "Keep" : "Coinnigh", + "Open dialpad" : "Oscail dialpad", + "Select a region" : "Roghnaigh réigiún", + "Local time: {time}" : "Am áitiúil: {time}", + "Scheduled {datetime}" : "Sceidealaithe {datetime}", + "Scheduled for {datetime}" : "Sceidealaithe do {datetime}", + "Search …" : "Cuardaigh…", + "Message without mention" : "Teachtaireacht gan trácht", + "Mention myself" : "Luaigh mé féin", + "Mention everyone" : "Luaigh gach duine", + "Select a conversation" : "Roghnaigh comhrá", + "Select a mode" : "Roghnaigh mód", + "You do not have permissions to access this conversation." : "Níl cead agat an comhrá seo a rochtain.", + "Join a different conversation or start a new one." : "Glac páirt i gcomhrá eile nó cuir tús le ceann nua.", + "The conversation does not exist" : "Níl an comhrá ann", + "Join a conversation or start a new one!" : "Glac páirt i gcomhrá nó cuir tús le ceann nua!", + "Duplicate session" : "Seisiún dúblach", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Osclaíodh an comhrá seo i gcluaisín eile. Ní thacaíonn an leagan reatha den fhreastalaí le comhrá a oscailt i roinnt cluaisíní.", + "Creating and joining a conversation with \"{userid}\"" : "Ag cruthú agus ag glacadh páirte i gcomhrá le \"{userid}\"", + "Join a conversation or start a new one" : "Glac páirt i gcomhrá nó cuir tús le ceann nua", + "Error while joining the conversation" : "Earráid agus tú páirteach sa chomhrá", + "Another user" : "Úsáideoir eile", + "Hey! Are you using the list style or message bubbles?" : "Haigh! An bhfuil tú ag úsáid an stíl liosta nó boilgeoga teachtaireachta?", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Úsáideoir Nextcloud", + "User password" : "Pasfhocal úsáideora", + "Talk conversation" : "Labhair comhrá", + "Skip TLS verification" : "Léim thar fhíorú TLS", + "Matrix server URL" : "URL freastalaí maitrís", + "User" : "Úsáideoir", + "Matrix channel" : "Cainéal maitrís", + "Mattermost server URL" : "URL an fhreastalaí is tábhachtaí", + "Mattermost user" : "Úsáideoir is tábhachtaí", + "Team name" : "Ainm foirne", + "Channel name" : "Ainm an chainéil", + "Rocket.Chat server URL" : "URL freastalaí Rocket.Chat", + "User name or email address" : "Ainm úsáideora nó seoladh ríomhphoist", + "Rocket.Chat channel" : "Rocket.Chat cainéal", + "Zulip server URL" : "URL freastalaí Zulip", + "Bot user name" : "Ainm úsáideora bot", + "Bot API key" : "Eochair bot API", + "Zulip channel" : "Cainéal Zulip", + "API token" : "Comhartha API", + "Slack channel" : "Cainéal caol", + "Server ID or name" : "Aitheantas nó ainm an fhreastalaí", + "Channel ID (prefixed with \"ID:\") or name" : "Aitheantas an chainéil (le \"ID:\") nó ainm", + "Channel" : "Cainéal", + "Login" : "Logáil isteach", + "Chat ID" : "ID comhrá", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL an fhreastalaí IRC (m.sh. chat.freenode.net: 6667)", + "Nickname" : "Leasainm", + "Connection password" : "Pasfhocal ceangail", + "IRC channel" : "Cainéal IRC", + "Channel password" : "Pasfhocal cainéal", + "NickServ nickname" : "leasainm Freastalaí", + "NickServ password" : "Pasfhocal NickServ", + "Use TLS" : "Úsáid TLS", + "Use SASL" : "Úsáid SASL", + "Tenant ID" : "ID an Tionónta", + "Client ID" : "Aitheantas Cliant", + "Team ID" : "Aitheantas foirne", + "Thread ID" : "Aitheantas Snáithe", + "XMPP/Jabber server URL" : "URL freastalaí XMPP/Jabber", + "MUC server URL" : "URL freastalaí MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Teachtaireachtaí bioránta", + "Media" : "Meáin", + "Polls" : "Pobalbhreith", + "Deck cards" : "Cártaí deic", + "Voice messages" : "Teachtaireachtaí gutha", + "Locations" : "Suímh", + "Call recordings" : "Taifeadtaí glaonna", + "Audio" : "Fuaime", + "Show all pinned messages" : "Taispeáin na teachtaireachtaí uile atá bioránta", + "Show all media" : "Taispeáin na meáin go léir", + "Show all files" : "Taispeáin gach comhad", + "Show all polls" : "Taispeáin gach pobalbhreith", + "Show all deck cards" : "Taispeáin gach cárta deic", + "Show all voice messages" : "Taispeáin gach teachtaireacht gutha", + "Show all locations" : "Taispeáin gach suíomh", + "Show all call recordings" : "Taispeáin gach taifeadadh glaonna", + "Show all audio" : "Taispeáin gach fuaime", + "Show all other" : "Taispeáin gach ceann eile", + "Follow conversation settings" : "Lean socruithe comhrá", + "Group" : "Grúpa", + "Team" : "Foireann", + "You reconnected to the call" : "D'athcheangail tú leis an nglao", + "{actor} reconnected to the call" : "D'athcheangail {actor} leis an nglao", + "You added {user0} and {user1}" : "Chuir tú {user0} agus {user1} leis", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Chuir tú {user0}, {user1} agus %n rannpháirtí eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis"], + "An administrator added you and {user0}" : "Chuir riarthóir thú agus {user0} leis", + "{actor} added you and {user0}" : "Chuir {actor} tú agus {user0} leis", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Chuir riarthóir thú, {user0} agus %n rannpháirtí eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["Chuir {actor} tú, {user0} agus %n rannpháirtí eile leis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis"], + "An administrator added {user0} and {user1}" : "Chuir riarthóir {user0} agus {user1} leis", + "{actor} added {user0} and {user1}" : "Chuir {actor} {user0} agus {user1} leis", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Chuir riarthóir {user0}, {user1} agus %n rannpháirtí eile leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis"], + "You removed {user0} and {user1}" : "Bhain tú {user0} agus {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile"], + "An administrator removed you and {user0}" : "Bhain riarthóir thú agus {user0}", + "{actor} removed you and {user0}" : "Bhain {actor} thú agus {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile"], + "An administrator removed {user0} and {user1}" : "Bhain riarthóir {user0} agus {user1}", + "{actor} removed {user0} and {user1}" : "Bhain {actor} {user0} agus {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Bhain riarthóir {user0}, {user1} agus %n rannpháirtí eile","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["Bhain {actor} {user0}, {user1} agus %n rannpháirtí eile","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis"], + "You and {user0} joined the call" : "Ghlac tú féin agus {user0} páirt sa ghlao", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao"], + "{user0} and {user1} joined the call" : "Tháinig {user0} agus {user1} isteach sa ghlao", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao"], + "You and {user0} left the call" : "D'fhág tú féin agus {user0} an glao", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao"], + "{user0} and {user1} left the call" : "D'fhág {user0} agus {user1} an glao", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao"], + "You promoted {user0} and {user1} to moderators" : "Chuir tú {user0} agus {user1} chun cinn do mhodhnóirí", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir tú {user0}, {user1} agus %n rannpháirtí eile chun cinn chuig modhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí"], + "An administrator promoted you and {user0} to moderators" : "Chuir riarthóir thú agus {user0} chun cinn mar mhodhnóirí", + "{actor} promoted you and {user0} to moderators" : "Chuir {actor} tú agus {user0} chun cinn mar mhodhnóirí", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["Chuir {actor} thú chun cinn, {user0} agus %n rannpháirtí eile chuig modhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí"], + "An administrator promoted {user0} and {user1} to moderators" : "Chuir riarthóir {user0} agus {user1} chun cinn do mhodhnóirí", + "{actor} promoted {user0} and {user1} to moderators" : "chuir {actor} {user0} agus {user1} chun cinn do mhodhnóirí", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí"], + "You demoted {user0} and {user1} from moderators" : "Bhain tú síos {user0} agus {user1} ó mhodhnóirí", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain tú síos {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí"], + "An administrator demoted you and {user0} from moderators" : "Rinne riarthóir tú féin agus {user0} a dhíscriosadh ó mhodhnóirí", + "{actor} demoted you and {user0} from moderators" : "Bhain {actor} tú féin agus {user0} ó mhodhnóirí", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí"], + "An administrator demoted {user0} and {user1} from moderators" : "Bhain riarthóir {user0} agus {user1} ó mhodhnóirí", + "{actor} demoted {user0} and {user1} from moderators" : "Bhain {actor} {user0} agus {user1} ó mhodhnóirí", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain {actor} {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí"], + "You:" : "Tusa:", + "You: {lastMessage}" : "Tusa: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Nuashonraíodh an freastalaí.", + "(edited by you)" : "(arna chur in eagar ag tú)", + "(edited by a deleted user)" : "(arna chur in eagar ag úsáideoir scriosta)", + "(edited by {moderator})" : "(curtha in eagar ag {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Tá tú ag iarraidh páirt a ghlacadh i gcomhrá agus seisiún gníomhach agat i bhfuinneog nó gléas eile. Ní thacaíonn Nextcloud Talk leis seo faoi láthair. Cad ba mhaith leat a dhéanamh?", + "Leave this page" : "Fág an leathanach seo", + "Join here" : "Glac páirt anseo", + "Deck card has been posted to {conversation}" : "Postáladh cárta deic chuig {conversation}", + "An error occurred while posting deck card to conversation" : "Tharla earráid agus cártaí deic á bpostáil chuig comhrá", + "Post to a conversation" : "Postáil chuig comhrá", + "Post to conversation" : "Postáil chuig an gcomhrá", + "The recording failed. Please contact your administrator." : "Theip ar an taifeadadh. Déan teagmháil le do riarthóir le do thoil.", + "Location has been posted to {conversation}" : "Postáladh an suíomh chuig {conversation}", + "An error occurred while posting location to conversation" : "Tharla earráid agus suíomh á phostáil chuig comhrá", + "Share to a conversation" : "Comhroinn le comhrá", + "Share to conversation" : "Roinn chuig an gcomhrá", + "In conversation" : "I gcomhrá", + "Search in conversation: {conversation}" : "Cuardaigh i gcomhrá: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Tá d’iarratais sáite faoi láthair mar gheall ar chosaint fórsa brúidiúil", + "Error while clearing conversation history" : "Earráid agus an stair chomhrá á glanadh", + "Error occurred while allowing guests" : "Tharla earráid agus aíonna á gceadú", + "Error occurred while disallowing guests" : "Tharla earráid agus aíonna á ndícheadú", + "Error occurred when restricting the conversation to moderator" : "Tharla earráid agus an comhrá á srianadh go modhnóir", + "Error occurred when opening the conversation to everyone" : "Tharla earráid agus an comhrá á oscailt do gach duine", + "Conversation password has been saved" : "Sábháladh pasfhocal an chomhrá", + "Conversation password has been removed" : "Baineadh pasfhocal an chomhrá", + "Error occurred while saving conversation password" : "Tharla earráid agus pasfhocal an chomhrá á shábháil", + "Call recording is starting." : "Tá taifeadadh glaonna ag tosú.", + "Call recording stopped while starting." : "Stopadh taifeadadh glaonna agus é ag tosú.", + "Call recording stopped. You will be notified once the recording is available." : "Stopadh taifeadadh glaonna. Cuirfear ar an eolas tú nuair a bheidh an taifeadadh ar fáil.", + "Conversation picture set" : "Sraith pictiúr comhrá", + "Conversation picture deleted" : "Scriosadh pictiúr an chomhrá", + "Could not delete the conversation picture" : "Níorbh fhéidir pictiúr an chomhrá a scriosadh", + "Could not remove the automatic expiration" : "Níorbh fhéidir an dul in éag uathoibríoch a bhaint", + "Could not post message: {errorMessage}" : "Níorbh fhéidir an teachtaireacht a phostáil: {errorMessage}", + "Participant is banned successfully" : "Tá toirmeasc rathúil ar rannpháirtí", + "Error while banning the participant" : "Earráid agus an rannpháirtí á thoirmeasc", + "An error occurred while fetching the participants" : "Tharla earráid agus na rannpháirtithe á nglacadh", + "Could not send invitation to {actorId}" : "Níorbh fhéidir cuireadh a sheoladh chuig {actorId}", + "Invitations sent" : "Cuirí seolta", + "Error occurred when sending invitations" : "Tharla earráid agus cuirí á seoladh", + "Failed to join the conversation." : "Theip ar páirt a ghlacadh sa chomhrá.", + "An error occurred while creating breakout rooms" : "Tharla earráid agus seomraí ar leithligh á gcruthú", + "An error occurred while re-ordering the attendees" : "Tharla earráid agus an lucht freastail á athordú", + "An error occurred while deleting breakout rooms" : "Tharla earráid agus seomraí ar leithligh á scriosadh", + "An error occurred while starting breakout rooms" : "Tharla earráid agus seomraí ar leithligh á thosú", + "An error occurred while stopping breakout rooms" : "Tharla earráid agus seomraí ar leithligh á stopadh", + "An error occurred while sending a message to the breakout rooms" : "Tharla earráid agus teachtaireacht á seoladh chuig na seomraí ar leithligh", + "An error occurred while requesting assistance" : "Tharla earráid agus cúnamh á iarraidh", + "An error occurred while resetting the request for assistance" : "Tharla earráid agus an t-iarratas ar chúnamh á athshocrú", + "An error occurred while joining breakout room" : "Tharla earráid agus tú ag glacadh páirte sa seomra ar leithligh", + "Failed to rename the thread" : "Theip ar athainmniú an snáithe", + "Error fetching upcoming events" : "Earráid ag fáil imeachtaí atá le teacht", + "Error fetching upcoming reminders" : "Earráid ag fáil meabhrúcháin atá le teacht", + "An error occurred while accepting an invitation" : "Tharla earráid agus cuireadh á ghlacadh", + "An error occurred while rejecting an invitation" : "Tharla earráid agus cuireadh á dhiúltú", + "{guest} (guest)" : "{guest} (aoi)", + "Poll draft has been saved" : "Tá an dréacht vótaíochta sábháilte", + "An error occurred while saving the draft" : "Tharla earráid agus an dréacht á shábháil", + "An error occurred while submitting your vote" : "Tharla earráid agus do vóta á chur isteach", + "An error occurred while ending the poll" : "Tharla earráid agus an pobalbhreith á críochnú", + "An error occurred while deleting the poll draft" : "Tharla earráid agus an dréacht vótaíochta á scriosadh", + "Poll \"{name}\" was created by {user}. Click to vote" : "Chruthaigh {user} an vótaíocht \"{name}\". Cliceáil chun vótáil", + "Failed to add reaction" : "Theip ar imoibriú a chur leis", + "Failed to remove reaction" : "Theip ar an imoibriú a bhaint", + "The server is in maintenance mode." : "Tá an freastalaí i mód cothabhála.", + "Federated server was updated." : "Nuashonraíodh an freastalaí cónaidhme.", + "Error while uploading file \"{fileName}\"" : "Earráid agus comhad \"{fileName}\" á uaslódáil", + "Not enough free space to upload file \"{fileName}\"" : "Níl go leor spáis in aisce chun an comhad \"{fileName}\" a uaslódáil", + "You are not allowed to share files" : "Níl cead agat comhaid a roinnt", + "Error while sharing file" : "Earráid agus an comhad á roinnt", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Níl tacaíocht iomlán ag Nextcloud Talk don bhrabhsálaí atá in úsáid agat. Bain úsáid as an leagan is déanaí de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera nó Apple Safari.", + "_In %n hour_::_In %n hours_" : ["I %n uair","In %n hoursI %n uair","I %n uair","I %n uair","I %n uair"], + "_%n minute _::_%n minutes_" : ["%n nóiméad","%n nóiméad","%n nóiméad","%n nóiméad","%n nóiméad"], + "In {hours} and {minutes}" : "I {uair an chloig} agus {nóiméid}", + "_In %n minute_::_In %n minutes_" : ["I %n nóiméad","I %n nóiméad","I %n nóiméad","I %n nóiméad","I %n nóiméad"], + "Later today – {timeLocale}" : "Níos déanaí inniu - {timeLocale}", + "Set time for later today" : "Socraigh am don lá atá inniu ann", + "Tomorrow – {timeLocale}" : "Amárach - {timeLocale}", + "Set time for tomorrow" : "Socraigh am don lá amárach", + "This weekend – {timeLocale}" : "An deireadh seachtaine seo - {timeLocale}", + "Set time for this weekend" : "Socraigh am don deireadh seachtaine seo", + "Next week – {timeLocale}" : "An tseachtain seo chugainn – {timeLocale}An tseachtain seo chugainn – {timeLocale}", + "Set time for next week" : "Socraigh am don tseachtain seo chugainn", + "Message link copied to clipboard" : "Nasc teachtaireachta cóipeáilte chuig an ghearrthaisce", + "Conversation link copied to clipboard" : "Cóipeáladh an nasc comhrá chuig an ngearrthaisce", + "The link could not be copied" : "Níorbh fhéidir an nasc a chóipeáil", + "Error while parsing a PROPFIND error" : "Earráid agus earráid PROPFIND á parsáil", + "Sending signaling message has failed" : "Theip ar sheoladh na teachtaireachta comharthaíochta", + "Lost connection to signaling server. Trying to reconnect." : "Ceangal caillte leis an bhfreastalaí comharthaíochta. Ag iarraidh a athcheangal.", + "Lost connection to signaling server." : "Ceangal caillte leis an bhfreastalaí comharthaíochta.", + "Connecting is taking longer than expected …" : "Tá an nasc ag glacadh níos faide ná mar a bhíothas ag súil leis …", + "Failed to connect. Retrying …" : "Theip ar an nascadh. Ag iarraidh arís …", + "Failed to connect. The signaling server may be set up incorrectly" : "Theip ar an nascadh. Seans go bhfuil an freastalaí comharthaíochta socraithe go mícheart.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Ní mór an freastalaí comharthaíochta cumraithe a nuashonrú le bheith comhoiriúnach leis an leagan seo de Talk. Déan teagmháil le do riarachán, le do thoil.", + "Please restart the app." : "Atosaigh an aip le do thoil.", + "Please reload the page." : "Athlódáil an leathanach le do thoil.", + "Please try to restart the app." : "Déan iarracht an aip a atosú le do thoil.", + "Please try to reload the page." : "Déan iarracht an leathanach a athlódáil.", + "Do not disturb" : "Ná cur as", + "Away" : "Amach", + "Microphone {number}" : "Micreafón {uimhir}", + "Camera {number}" : "{uimhir} ceamara", + "Speaker {number}" : "Cainteoir {uimhir}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Is cosúil go bhfuil tú ag caint agus tú balbh, le do thoil díbhalbhaigh tú féin le go gcloisfidh daoine eile thú", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Níorbh fhéidir nasc a bhunú le rannpháirtí amháin ar a laghad. Seans go mbeidh freastalaí TURN ag teastáil le haghaidh do chás. Iarr ar do riarthóir ceann a shocrú tar éis {linkstart}an doiciméadú seo{linkend} le do thoil.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tá sé seo ag glacadh níos faide ná mar a ceapadh. An bhfuil na ceadanna meán tugtha (nó diúltaithe) cheana féin? Má tá, atosaigh do bhrabhsálaí le do thoil, toisc go bhfuil teipthe ar fhuaim agus ar fhís", + "Access to microphone & camera is only possible with HTTPS" : "Ní féidir rochtain ar mhicreafón & ceamara ach amháin le HTTPS", + "Please move your setup to HTTPS" : "Bog do shocrú go HTTPS le do thoil", + "Access to microphone & camera was denied" : "Diúltaíodh rochtain ar mhicreafón & ceamara", + "WebRTC is not supported in your browser" : "Ní thacaítear le WebRTC i do bhrabhsálaí", + "Please use a different browser like Firefox or Chrome" : "Bain úsáid as brabhsálaí eile ar nós Firefox nó Chrome le do thoil", + "Error while accessing microphone & camera" : "Earráid agus an micreafón agus an ceamara á rochtain", + "%s Talk on your mobile devices" : "%s Labhair ar do ghléasanna móibíleacha", + "Join conversations at any time, anywhere, on any device." : "Glac páirt i gcomhráite am ar bith, áit ar bith, ar ghléas ar bith.", + "Android app" : "Aip Android", + "iOS app" : "aip iOS", + "__language_name__" : "__ainm_teanga__", + "Webhook Demo" : "Taispeántas Webook", + "Call summary (%s)" : "Achoimre ar an nglao (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Postálann an bot achoimre glaonna teachtaireacht forbhreathnú tar éis an ghlao ina liostaítear na rannpháirtithe go léir agus ag cur síos ar na tascanna", + "Tasks" : "Tascanna", + "Notes" : "Nótaí", + "Reports" : "Tuairiscí", + "Decisions" : "Cinntí", + "Agenda" : "Clár oibre", + "Call summary" : "Achoimre glaonna", + "Call summary - {title}" : "Achoimre ar an nglao - {teideal}", + "Talk conversation for event" : "Labhair comhrá don imeacht", + "Client Push is installed, this improves the performance of desktop clients." : "Tá Client Push suiteáilte, feabhsaíonn sé seo feidhmíocht na gcliant deisce.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "Níl {notify_push}suiteáilte, d'fhéadfadh fadhbanna feidhmíochta a bheith mar thoradh air seo agus cliaint deisce in úsáid.", + "Next meeting" : "An chéad chruinniú eile", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Sceideal cruinniú ó do fhéilire. Ní mór comhrá Talk a shocrú mar shuíomh le go dtaispeánfar é anseo.", + "Join conversations from remote Nextcloud servers" : "Glac páirt i gcomhráite ó fhreastalaithe cianda Nextcloud", + "Your default media state has been saved" : "Sábháladh do staid meán réamhshocraithe", + "Set reminder for later today" : "Socraigh meabhrúchán le haghaidh níos déanaí inniu", + "Set reminder for tomorrow" : "Socraigh meabhrúchán don lá amárach", + "Set reminder for this weekend" : "Socraigh meabhrúchán don deireadh seachtaine seo", + "Set reminder for next week" : "Socraigh meabhrúchán don tseachtain seo chugainn", + "Generate summary" : "Gin achoimre", + "Open poll • You voted already" : "Vótaíocht oscailte • Vótáil tú cheana féin", + "Open poll • Click to vote" : "Oscail vótaíocht • Cliceáil chun vótáil", + "Poll • Ended" : "• Tháinig deireadh leis an vótaíocht", + "Talk recording from {time} ({conversation})" : "Taifeadadh cainte ó {time} ({ conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Torthaí na vótaíochta • %n vóta","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Vótaíocht oscailte • %n vóta","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí"], + "Submit vote" : "Cuir vóta isteach", + "Your privacy setting has been saved" : "Sábháladh do shocrú príobháideachta", + "Your personal setting has been saved" : "Sábháladh do shocrú pearsanta", + "Failed to save sounds setting" : "Theip ar an socrú fuaimeanna a shábháil", + "Sounds setting saved" : "Socrú fuaimeanna sábháilte", + "Always shown if recording consent is required" : "Taispeántar i gcónaí má tá toiliú taifeadta ag teastáil", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nuashonraíodh Nextcloud Talk, ní féidir leat glao a thosú nó páirt a ghlacadh ann.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Chuaigh tú isteach sa chomhrá i bhfuinneog nó gléas eile. Ní thacaíonn Nextcloud Talk leis seo faoi láthair mar sin dúnadh an seisiún seo.", + "Nextcloud Talk was updated." : "Nuashonraíodh Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Tá Nextcloud i mód cothabhála.", + "Nextcloud Talk Federation was updated." : "Nuashonraíodh Cónaidhm Nextcloud Talk.", + "Enable live translation" : "Cumasaigh aistriúchán beo", + "I picked list style" : "Roghnaigh mé stíl liosta", + "Hey! Are you using Talk in list style or with message bubbles?" : "Haigh! An bhfuil tú ag úsáid Talk i stíl liosta nó le boilgeoga teachtaireachta?" +}, +"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);"); diff --git a/l10n/ga.json b/l10n/ga.json new file mode 100644 index 0000000..4ca8fcb --- /dev/null +++ b/l10n/ga.json @@ -0,0 +1,2260 @@ +{ "translations": { + "a conversation" : "comhrá", + "(Duration %s)" : "(Ré %s)", + "You attended a call with {user1}" : "D'fhreastail tú ar ghlao le {user1}", + "_%n guest_::_%n guests_" : ["%n aoi","%n aíonna","%n aíonna","%n aíonna","%n aíonna"], + "You attended a call with {user1} and {user2}" : "D'fhreastail tú ar ghlao le {user1} agus {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "D'fhreastail tú ar ghlao le {user1}, {user2} agus {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "D'fhreastail tú ar ghlao le {user1}, {user2}, {user3} agus {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "D'fhreastail tú ar ghlao le {user1}, {user2}, {user3}, {user4} agus {user5}", + "_%n other_::_%n others_" : ["%n eile","%n eile","%n eile","%n eile","%n eile"], + "{actor} invited you to {call}" : "Thug {actor} cuireadh duit {call}", + "You were invited to a conversation or had a call" : "Tugadh cuireadh duit chuig chomhránó bhí glaochagat", + "Other activities" : "Gníomhaíochtaí eile", + "Talk" : "Caint", + "Guest" : "Aoi", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "##Fáilte go Nextcloud Talk!\nSa chomhrá seo cuirfear ar an eolas thú faoi ghnéithe nua atá ar fáil in Nextcloud Talk.", + "## New in Talk %s" : "## Nua i gCaint %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Is féidir Microsoft Edge agus Safari a úsáid anois chun páirt a ghlacadh i nglaonna fuaime agus físe", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Bíonn comhráite duine le duine leanúnach anois agus ní féidir iad a iompú ina gcomhráite grúpa trí thimpiste a thuilleadh. Chomh maith leis sin nuair a fhágann duine de na rannpháirtithe an comhrá, ní scriostar an comhrá go huathoibríoch a thuilleadh. Ach amháin má fhágann an dá rannpháirtí, scriostar an comhrá ón bhfreastalaí", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Is féidir leat na rannpháirtithe go léir a chur ar an eolas anois trí \"@all\" a phostáil isteach sa chomhrá", + "- With the \"arrow-up\" key you can repost your last message" : "- Leis an eochair \"arrow-up\" is féidir leat do theachtaireacht dheireanach a athphostáil", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Is féidir orduithe a bheith ag Talk anois, seol \"/help\" mar theachtaireacht chomhrá féachaint an bhfuil roinnt cumraithe ag do riarthóir", + "- With projects you can create quick links between conversations, files and other items" : "- Le tionscadail is féidir leat naisc thapa a chruthú idir comhráite, comhaid agus míreanna eile", + "- You can now mention guests in the chat" : "- Is féidir leat aíonna a lua sa chomhrá anois", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Is féidir stocaireacht a bheith ag comhráite anois. Tabharfaidh sé seo deis do mhodhnóirí a bheith páirteach sa chomhrá agus glaoch a chur orthu cheana féin chun an cruinniú a ullmhú, fad a bheidh ar úsáideoirí agus ar aíonna fanacht", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Is féidir leat anois freagra díreach a thabhairt ar theachtaireachtaí a thugann níos mó comhthéacs do na húsáideoirí eile cad faoi do theachtaireacht", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Déanfaidh cuardach do chomhráite agus do rannpháirtithe na comhráite atá agat cheana féin a scagadh freisin, rud a fhágfaidh go mbeidh sé i bhfad níos éasca teacht ar chomhráite roimhe seo", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Is féidir leat grúpaí úsáideoirí saincheaptha a chur le comhráite anois nuair a bhíonn an aip ciorcail suiteáilte", + "- Check out the new grid and call view" : "- Amharc ar an eangach nua agus an radharc glaonna", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Is féidir leat comhaid a uaslódáil anois agus a tharraingt agus a scaoil go díreach ó do ghléas isteach sa chomhrá", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Osclaítear comhaid roinnte go díreach laistigh den radharc comhrá leis na haipeanna breathnóireachta", + "- You can now search for chats and messages in the unified search in the top bar" : "- Is féidir leat comhráite agus teachtaireachtaí a chuardach anois sa chuardach aontaithe sa bharra barr", + "- Spice up your messages with emojis from the emoji picker" : "- Spice suas do theachtaireachtaí le emojis ón roghnóir emoji", + "- You can now change your camera and microphone while being in a call" : "- Is féidir leat do cheamara agus micreafón a athrú anois agus tú ar ghlao", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Tabhair comhthéacs éigin le cur síos do do chuid comhráite agus oscail suas é ionas gur féidir le húsáideoirí logáilte isteach é a aimsiú agus dul isteach iontu féin", + "- See a read status and send failed messages again" : "- Féach ar stádas léite agus seol teachtaireachtaí teipthe arís", + "- Raise your hand in a call with the R key" : "- Ardaigh do lámh i nglao leis an eochair R", + "- Join the same conversation and call from multiple devices" : "- Glac páirt sa chomhrá céanna agus glaoigh ó ilfheistí", + "- Send voice messages, share your location or contact details" : "- Seol teachtaireachtaí gutha, roinn do shuíomh nó sonraí teagmhála", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Cuir grúpaí le comhrá agus cuirfear baill nua den ghrúpa leis go huathoibríoch mar rannpháirtithe", + "- A preview of your audio and video is shown before joining a call" : "- Taispeántar réamhamharc ar do chuid fuaime agus físe sula nglacann tú páirt i nglao", + "- You can now blur your background in the newly designed call view" : "- Is féidir leat do chúlra a gheamhú anois san amharc glaonna nua-dheartha", + "- Moderators can now assign general and individual permissions to participants" : "- Is féidir le modhnóirí ceadanna ginearálta agus aonair a shannadh do rannpháirtithe anois", + "- You can now react to chat messages" : "- Is féidir leat freagairt anois do theachtaireachtaí comhrá", + "- In the sidebar you can now find an overview of the latest shared items" : "- Sa bharra taoibh is féidir leat forbhreathnú a fháil anois ar na míreanna comhroinnte is déanaí", + "- Use a poll to collect the opinions of others or settle on a date" : "- Úsáid vótaíocht chun tuairimí daoine eile a bhailiú nó socrú ar dháta", + "- Configure an expiration time for chat messages" : "- Cumraigh am éaga le haghaidh teachtaireachtaí comhrá", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Tosaigh glaonna gan daoine eile a chur ar an eolas i gcomhráite móra. Is féidir leat fógraí glaonna aonair a sheoladh nuair a bheidh an glao tosaithe.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Seol teachtaireachtaí comhrá gan fógra a thabhairt do na faighteoirí ar eagla nach bhfuil sé práinneach", + "- Emojis can now be autocompleted by typing a \":\"" : "- Seol teachtaireachtaí comhrá gan fógra a thabhairt do na faighteoirí ar eagla nach bhfuil sé práinneach", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Nasc míreanna éagsúla ag baint úsáide as an roghnóir cliste nua trí \"/\" a chlóscríobh", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Is féidir le modhnóirí seomraí ar leithligh a chruthú anois (tá an t-inneall Ardfheidhmíochta ag teastáil)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Is féidir glaonna a thaifeadadh anois (tá an t-Inneall Ardfheidhmíochta ag teastáil)", + "- Conversations can now have an avatar or emoji as icon" : "- Is féidir avatar nó emoji a bheith mar dheilbhín anois ag comhráite", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Tá cúlraí fíorúla ar fáil anois chomh maith leis an gcúlra doiléir i bhfísghlaonna", + "- Reactions are now available during calls" : "- Tá frithghníomhartha ar fáil anois le linn glaonna", + "- Typing indicators show which users are currently typing a message" : "- Léiríonn táscairí clóscríofa cé na húsáideoirí atá ag clóscríobh teachtaireachta faoi láthair", + "- Groups can now be mentioned in chats" : "- Is féidir grúpaí a lua anois i gcomhráite", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Déantar taifeadtaí glaonna a thrascríobh go huathoibríoch má tá aip soláthraí trascríobh cláraithe", + "- Chat messages can be translated if a translation provider app is registered" : "- Is féidir teachtaireachtaí comhrá a aistriú má tá aip soláthraí aistriúcháin cláraithe", + "- **Markdown** can now be used in _chat_ messages" : "- Is féidir **Markdown** a úsáid anois i dteachtaireachtaí _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Tá webooks ar fáil anois chun róbónna a chur i bhfeidhm. Féach an doiciméadú le haghaidh tuilleadh eolais https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Socraigh meabhrúchán ar theachtaireacht chomhrá le cur ar an eolas níos déanaí arís", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Úsáid an comhrá **Nóta le do thoil féin** chun nótaí a ghlacadh agus faisnéis a roinnt idir do ghléasanna", + "- Captions allow to send a message with a file at the same time" : "- Ceadaíonn fotheidil teachtaireacht a sheoladh le comhad ag an am céanna", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Tá físeán an chainteora le feiceáil anois agus an scáileán á roinnt agus déantar freagairtí glaonna a bheochan", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Is féidir le húdair agus modhnóirí logáilte isteach teachtaireachtaí a chur in eagar anois ar feadh 6 huaire", + "- Unsent message drafts are now saved in your browser" : "- Déantar dréachtaí teachtaireachta nár seoladh a shábháil i do bhrabhsálaí anois", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Is féidir comhrá téacs a dhéanamh anois ar bhealach cónasctha le freastalaithe Talk eile", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Is féidir le modhnóirí cuntais agus aíonna a thoirmeasc anois chun iad a chosc ó dhul isteach arís i gcomhrá", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Taispeántar glaonna atá le teacht ó imeachtaí féilire nasctha agus athsholáthairtí lasmuigh den oifig sna comhráite anois", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Is féidir glaonna a dhéanamh anois ar bhealach cónasctha le freastalaithe Talk eile (tá an t-inneall Ardfheidhmíochta ag teastáil)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Cliant deisce Nextcloud Talk do Windows, macOS agus Linux a thabhairt isteach: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Déan achoimre ar thaifeadtaí glaonna agus teachtaireachtaí neamhléite i gcomhráite leis an Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Cruinnithe feabhsaithe le haíonna a dtugtar cuireadh dóibh trína seoladh ríomhphoist, iompórtáil liostaí rannpháirtithe, dréachtaí le haghaidh pobalbhreithe agus íoslódáil liostaí rannpháirtithe glaonna", + "- Archive conversations to stay focused" : "- Cuir comhráite sa chartlann chun fanacht dírithe", + "- Schedule a meeting into your calendar from within a conversation" : "- Sceidealaigh cruinniú isteach i d'fhéilire ó laistigh de chomhrá", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cuardaigh teachtaireachtaí an chomhrá reatha go díreach sa bharra taoibh ar dheis", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Féach ar níos mó comhrá ar an gcéad amharc leis an liosta dlúth nua (cumasaigh sna socruithe Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Sioncrónaíonn comhráite cruinnithe an teideal agus an cur síos ón bhféilire anois agus folaítear iad le scagaire cuardaigh go dtí go mbíonn siad gar don tús.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marcáil comhráite mar íogair sna socruithe fógraí, chun ábhar an teachtaireachta a cheilt ón liosta comhráite agus ó na fógraí", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Chun fógraí brú a fháil le linn \"Ná cuir isteach\", marcáil comhráite mar thábhachtacha", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Cuir rannpháirtithe eile le glao duine le duine chun glao grúpa nua a chruthú láithreach", + "- Use threads to keep your chat and discussions organized" : "- Bain úsáid as snáitheanna chun do chomhrá agus do phlé a choinneáil eagraithe", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Trascríbhinní beo ar fáil anois le linn an ghlao (éilíonn sé seo an ExApp tras-scríofa beo agus an cúltaca ardfheidhmíochta)", + "- Moderators can now pin messages so they are kept at the top" : "- Is féidir le modhnóirí teachtaireachtaí a phionáil anois ionas go gcoimeádtar iad ag an mbarr", + "- Schedule a message to send it at a later time" : "- Sceideal teachtaireacht le seoladh ag am níos déanaí", + "_All %n participant_::_All %n participants_" : ["Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí","Gach %n rannpháirtí"], + "Talk updates ✅" : "Labhair nuashonruithe ✅", + "Reaction deleted by author" : "An t-imoibriú scriosta ag an údar", + "{actor} created the conversation" : "Chruthaigh {aisteoir} an comhrá", + "You created the conversation" : "Chruthaigh tú an comhrá", + "System created the conversation" : "Chruthaigh an córas an comhrá", + "An administrator created the conversation" : "Chruthaigh riarthóir an comhrá", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh {actor} an comhrá ó \"%1$s\" go \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh tú an comhrá ó \"%1$s\" go \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "D'athainmnigh riarthóir an comhrá ó \"%1$s\" go \"%2$s\"", + "{actor} set the description" : "socraigh {actor} an cur síos", + "You set the description" : "Shocraigh tú an cur síos", + "An administrator set the description" : "Shocraigh riarthóir an cur síos", + "{actor} removed the description" : "bhain {actor} an cur síos", + "You removed the description" : "Bhain tú an cur síos", + "An administrator removed the description" : "Bhain riarthóir an cur síos", + "You started a silent call" : "Chuir tú tús le glao ciúin", + "Outgoing silent call" : "Glao ciúin amach", + "{actor} started a silent call" : "chuir {actor} tús le glao ciúin", + "Incoming silent call" : "Glao ciúin ag teacht isteach", + "You started a call" : "Thosaigh tú glao", + "Outgoing call" : "Glao amach", + "{actor} started a call" : "Chuir {actor} tús le glao", + "Incoming call" : "Glao ag teacht isteach", + "{actor} joined the call" : "Chuaigh {actor} isteach sa ghlao", + "You joined the call" : "Ghlac tú páirt sa ghlao", + "{actor} left the call" : "D'fhág {actor} an glao", + "You left the call" : "D'fhág tú an glao", + "{actor} unlocked the conversation" : "Dhíghlasáil {actor} an comhrá", + "You unlocked the conversation" : "Dhíghlasáil tú an comhrá", + "An administrator unlocked the conversation" : "Dhíghlasáil riarthóir an comhrá", + "{actor} locked the conversation" : "ghlas {actor} an comhrá", + "You locked the conversation" : "Chuir tú glas ar an gcomhrá", + "An administrator locked the conversation" : "Chuir riarthóir faoi ghlas an comhrá", + "{actor} limited the conversation to the current participants" : "Chuir {actor} an comhrá teoranta do na rannpháirtithe reatha", + "You limited the conversation to the current participants" : "Chuir tú teorainn leis an gcomhrá do na rannpháirtithe reatha", + "An administrator limited the conversation to the current participants" : "Chuir riarthóir teorainn leis an gcomhrá do na rannpháirtithe reatha", + "{actor} opened the conversation to registered users" : "D'oscail {actor} an comhrá d'úsáideoirí cláraithe", + "You opened the conversation to registered users" : "D'oscail tú an comhrá d'úsáideoirí cláraithe", + "An administrator opened the conversation to registered users" : "D'oscail riarthóir an comhrá d'úsáideoirí cláraithe", + "{actor} opened the conversation to registered users and users created with the Guests app" : "D'oscail {actor} an comhrá d'úsáideoirí cláraithe agus d'úsáideoirí a cruthaíodh leis an aip Guests", + "You opened the conversation to registered users and users created with the Guests app" : "D’oscail tú an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Guests", + "An administrator opened the conversation to registered users and users created with the Guests app" : "D’oscail riarthóir an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Guests", + "The conversation is now open to everyone" : "Tá an comhrá oscailte do chách anois", + "{actor} opened the conversation to everyone" : "D'oscail {actor} an comhrá do gach duine", + "You opened the conversation to everyone" : "D'oscail tú an comhrá do gach duine", + "{actor} restricted the conversation to moderators" : "Chuir {actor} srian ar an gcomhrá do mhodhnóirí", + "You restricted the conversation to moderators" : "Chuir tú srian ar an gcomhrá do mhodhnóirí", + "{actor} started breakout rooms" : "Chuir {actor} tús le seomraí ar leithligh", + "You started breakout rooms" : "Chuir tú tús le seomraí ar leithligh", + "{actor} stopped breakout rooms" : "Chuir {aisteoir} seomraí ar leithligh stoptha", + "You stopped breakout rooms" : "Chuir tú deireadh le seomraí ar leithligh", + "{actor} allowed guests" : "Tá cead ag {aisteoir} aíonna", + "You allowed guests" : "Cheadaigh tú aíonna", + "An administrator allowed guests" : "Cheadaigh riarthóir aíonna", + "{actor} disallowed guests" : "{aisteoir} aíonna dícheadaithe", + "You disallowed guests" : "Dhícheadaigh tú aíonna", + "An administrator disallowed guests" : "Dhícheadaigh riarthóir aíonna", + "{actor} set a password" : "Shocraigh {aisteoir} pasfhocal", + "You set a password" : "Shocraigh tú pasfhocal", + "An administrator set a password" : "Shocraigh riarthóir pasfhocal", + "{actor} removed the password" : "Bhain {actor} an pasfhocal", + "You removed the password" : "Bhain tú an focal faire", + "An administrator removed the password" : "Bhain riarthóir an focal faire", + "{actor} added {user}" : "Chuir {actor} {user} leis", + "You joined the conversation" : "Ghlac tú páirt sa chomhrá", + "{actor} joined the conversation" : "Tháinig {actor} isteach sa chomhrá", + "You added {user}" : "Chuir tú {user} leis", + "{actor} added you" : "Chuir {actor} tú leis", + "An administrator added you" : "Chuir riarthóir thú leis", + "An administrator added {user}" : "Chuir riarthóir {user} leis", + "You left the conversation" : "D'fhág tú an comhrá", + "{actor} left the conversation" : "D'fhág {actor} an comhrá", + "{actor} removed {user}" : "Bhain {actor} {user}", + "You removed {user}" : "Bhain tú {user}", + "{actor} removed you" : "Bhain {actor} thú", + "An administrator removed you" : "Bhain riarthóir thú", + "An administrator removed {user}" : "Bhain riarthóir {user}", + "{actor} invited {federated_user}" : "Thug {actor} cuireadh do {federated_user}", + "You invited {federated_user}" : "Thug tú cuireadh do {federated_user}", + "You accepted the invitation" : "Ghlac tú leis an gcuireadh", + "{actor} invited you" : "Thug {actor} cuireadh duit", + "An administrator invited you" : "Thug riarthóir cuireadh duit", + "An administrator invited {federated_user}" : "Thug riarthóir cuireadh do {federed_user}", + "{federated_user} accepted the invitation" : "Ghlac {federed_user} leis an gcuireadh", + "{actor} removed {federated_user}" : "Bhain {actor} {federated_user}", + "You removed {federated_user}" : "Bhain tú {federated_user}", + "You declined the invitation" : "Dhiúltaigh tú don chuireadh", + "An administrator removed {federated_user}" : "Bhain riarthóir {federated_user}", + "{federated_user} declined the invitation" : "Dhiúltaigh {federated_user} an cuireadh", + "{actor} added group {group}" : "Chuir {actor} grúpa {group} leis", + "You added group {group}" : "Chuir tú grúpa {group} leis", + "An administrator added group {group}" : "Chuir riarthóir grúpa {group} leis", + "{actor} removed group {group}" : "Bhain {actor} grúpa {group}", + "You removed group {group}" : "Bhain tú grúpa {group}", + "An administrator removed group {group}" : "Bhain riarthóir grúpa {group}", + "{actor} added team {circle}" : "Chuir {aisteoir} foireann {circle} leis", + "You added team {circle}" : "Chuir tú {circle} leis an bhfoireann", + "An administrator added team {circle}" : "Chuir riarthóir foireann {circle} leis", + "{actor} removed team {circle}" : "Bhain {actor} foireann {circle}", + "You removed team {circle}" : "Bhain tú an fhoireann {circle}", + "An administrator removed team {circle}" : "Bhain riarthóir foireann {circle}", + "{actor} added {phone}" : "Chuir {actor} {phone} leis", + "You added {phone}" : "Chuir tú {phone} leis", + "An administrator added {phone}" : "Chuir riarthóir {phone} leis", + "{actor} removed {phone}" : "Bhain {actor} {phone}", + "You removed {phone}" : "Bhain tú {phone}", + "An administrator removed {phone}" : "Bhain riarthóir {phone}", + "{actor} promoted {user} to moderator" : "Chuir {actor} {user} chun cinn chuig modhnóir", + "You promoted {user} to moderator" : "Chuir tú {user} chun cinn mar mhodhnóir", + "{actor} promoted you to moderator" : "Thug {actor} ardú céime duit go modhnóir", + "An administrator promoted you to moderator" : "Thug riarthóir ardú céime duit go modhnóir", + "An administrator promoted {user} to moderator" : "Chuir riarthóir {user} chun cinn chuig modhnóir", + "{actor} demoted {user} from moderator" : "Bhain {actor} {user} ón modhnóir", + "You demoted {user} from moderator" : "Bhain tú síos {user} ón modhnóir", + "{actor} demoted you from moderator" : "Dhírigh {actor} ón mhodhnóir tú", + "An administrator demoted you from moderator" : "Dhealraigh riarthóir thú ón modhnóir", + "An administrator demoted {user} from moderator" : "Bhain riarthóir {user} as an modhnóir", + "{actor} shared a file which is no longer available" : "Roinn {actor} comhad nach bhfuil ar fáil a thuilleadh", + "You shared a file which is no longer available" : "Roinn tú comhad nach bhfuil ar fáil a thuilleadh", + "File shares are currently not supported in federated conversations" : "Ní thacaítear le comhroinnt comhaid i gcomhráite cónasctha faoi láthair", + "The shared location is malformed" : "Tá an suíomh roinnte míchumtha", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "Shocraigh {actor} Matterbridge chun an comhrá seo a shioncronú le comhráite eile", + "You set up Matterbridge to synchronize this conversation with other chats" : "Shocraigh tú Matterbridge chun an comhrá seo a shioncronú le comhráite eile", + "{actor} created thread {title}" : "Chruthaigh {actor} an snáithe {title}", + "You created thread {title}" : "Chruthaigh tú snáithe {title}", + "{actor} renamed thread {title}" : "athainmníodh an snáithe le {actor} mar {title}", + "You renamed thread {title}" : "Athainmnigh tú an snáithe {title}", + "{actor} updated the Matterbridge configuration" : "Nuashonraigh {actor} cumraíocht Matterbridge", + "You updated the Matterbridge configuration" : "Nuashonraigh tú cumraíocht Matterbridge", + "{actor} removed the Matterbridge configuration" : "Bhain {actor} cumraíocht Matterbridge", + "You removed the Matterbridge configuration" : "Bhain tú cumraíocht Matterbridge", + "{actor} started Matterbridge" : "Thosaigh {actor} Matterbridge", + "You started Matterbridge" : "Thosaigh tú Matterbridge", + "{actor} stopped Matterbridge" : "Chuir {actor} stop le Matterbridge", + "You stopped Matterbridge" : "Stop tú Matterbridge", + "{actor} deleted a message" : "Scrios {actor} teachtaireacht", + "You deleted a message" : "Scrios tú teachtaireacht", + "{actor} edited a message" : "Chuir {actor} teachtaireacht in eagar", + "You edited a message" : "Chuir tú teachtaireacht in eagar", + "{actor} pinned a message" : "Chuir {actor} teachtaireacht i bpriontáil", + "You pinned a message" : "Chuir tú teachtaireacht i bpriontáil", + "{actor} unpinned a message" : "Dhíphionáil {actor} teachtaireacht", + "Message was automatically unpinned" : "Díphionáladh an teachtaireacht go huathoibríoch", + "You unpinned a message" : "Dhíphionáil tú teachtaireacht", + "{actor} deleted a reaction" : "Scrios {actor} imoibriú", + "You deleted a reaction" : "Scrios tú imoibriú", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtain","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n lá","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n laethanta"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uair an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n nóiméad","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh tú go dtiocfadh deireadh leis an teachtaireacht i %n noiméid"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtain","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n seachtainí"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n lá","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n laethanta"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uair an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n uaireanta an chloig"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n nóiméad","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid","Shocraigh {actor} go dtiocfadh deireadh leis an teachtaireacht i %n noiméid"], + "{actor} disabled message expiration" : "Dhíchumasaigh {actor} teachtaireacht in éag", + "You disabled message expiration" : "Dhíchumasaigh tú dul in éag na teachtaireachta", + "{actor} cleared the history of the conversation" : "Ghlan {actor} stair an chomhrá", + "You cleared the history of the conversation" : "Ghlan tú stair an chomhrá", + "{actor} set the conversation picture" : "Socraigh {aisteoir} pictiúr an chomhrá", + "You set the conversation picture" : "Shocraigh tú pictiúr an chomhrá", + "{actor} removed the conversation picture" : "Bhain {actor} pictiúr an chomhrá", + "You removed the conversation picture" : "Bhain tú an pictiúr comhrá", + "{actor} ended the poll {poll}" : "Chuir {actor} deireadh leis an vótaíocht {poll}", + "You ended the poll {poll}" : "Chuir tú deireadh leis an vótaíocht {poll}", + "{actor} started the video recording" : "Chuir {actor} tús leis an bhfístaifeadadh", + "You started the video recording" : "Chuir tú tús leis an bhfístaifeadadh", + "{actor} stopped the video recording" : "Chuir {actor} stop leis an bhfístaifeadadh", + "You stopped the video recording" : "Chuir tú stop leis an bhfístaifeadadh", + "{actor} started the audio recording" : "Chuir {actor} tús leis an taifeadadh fuaime", + "You started the audio recording" : "Chuir tú tús leis an taifeadadh fuaime", + "{actor} stopped the audio recording" : "Chuir {actor} stop leis an taifeadadh fuaime", + "You stopped the audio recording" : "Chuir tú stop leis an taifeadadh fuaime", + "The recording failed" : "Theip ar an taifeadadh", + "Someone voted on the poll {poll}" : "Vótáil duine éigin ar an vótaíocht {poll}", + "Message deleted by author" : "Scrios an t-údar an teachtaireacht", + "Message deleted by {actor}" : "Scrios {actor} an teachtaireacht", + "Message deleted by you" : "Scrios tú an teachtaireacht", + "Deleted user" : "Úsáideoir scriosta", + "Unknown number" : "Uimhir anaithnid", + "Administration" : "Riarachán", + "System" : "Córas", + "%s (guest)" : "%s (aoi)", + "Missed call" : "Glao caillte", + "Unanswered call" : "Glao gan freagra", + "Call ended (Duration {duration})" : "Cuireadh deireadh leis an nglao (Fad {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao, toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} chríochnaigh an glao (Fad {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})","Cuireadh deireadh leis an nglao le %n aoi, toisc gur shroich sé uasfhad an ghlao (Aga {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Cuireadh deireadh leis an nglao le%n aoi (Fad{duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})","Cuireadh deireadh leis an nglao le%n aoi (Fad {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["Chuir {actor} deireadh leis an nglao le %n aoi (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})","Chuir {actor} deireadh leis an nglao le %n aíonna (Fad {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1} (Fad {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1} (Fad {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1} agus {user2} toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1}agus{user2} (Fad {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1} agus {user2} (Fad {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2} agus {user3} toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2} agus{user3} (Fad{duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2} agus {user3} (Fad {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2}, {user3} agus {user4}, toisc gur shroich sé uasfhad an ghlao (Fad {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2},{user3} agus{user4} (Fad{duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2}, {user3} agus {user4} (Fad {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Cuireadh deireadh leis an nglao le {user1}, {user2}, {user3}, {user4} agus {user5}, toisc gur shroich sé uasfhad an ghlao (Aga {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Cuireadh deireadh leis an nglao le{user1},{user2},{user3},{user4} agus{user5} (Fad {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "Chuir {actor} deireadh leis an nglao le {user1}, {user2}, {user3}, {user4} agus {user5} (Fad {duration})", + "Message of {user} in {conversation}" : "Teachtaireacht ó {user} i {conversation}", + "Message of {user}" : "Teachtaireacht ó {user}", + "Message of a deleted user in {conversation}" : "Teachtaireacht ó úsáideora scriosta i {conversation}", + "Talk conversations" : "Déan comhráite", + "Talk to %s" : "Labhair le %s", + "An error occurred. Please contact your administrator." : "Tharla earráid. Déan teagmháil le do riarthóir le do thoil.", + "App disabled" : "Aip díchumasaithe", + "Conversation subfolders are disabled" : "Tá fo-fhillteáin chomhráite díchumasaithe", + "Storage quota exceeded" : "Sáraíodh an cuóta stórála", + "Could not prepare conversation folder" : "Níorbh fhéidir fillteán comhrá a ullmhú", + "File not found" : "Comhad gan aimsiú", + "Path must point to a file" : "Caithfidh an cosán pointeáil chuig comhad", + "File is not inside the conversation draft folder for this room" : "Níl an comhad laistigh den fhillteán dréachta comhrá don seomra seo", + "File is not shared, or shared but not with the user" : "Níl an comhad roinnte, nó roinnte ach ní leis an úsáideoir", + "No account available to delete." : "Níl aon chuntas ar fáil le scriosadh.", + "Poll" : "Vótaíocht", + "Password needs to be set" : "Ní mór pasfhocal a shocrú", + "Uploading the file failed" : "Theip ar uaslódáil an chomhaid", + "No image file provided" : "Níor soláthraíodh aon chomhad íomhá", + "File is too big" : "Tá an comhad ró-mhór.", + "Invalid file provided" : "Comhad neamhbhailí curtha ar fáil", + "Invalid image" : "Íomhá neamhbhailí", + "Unknown filetype" : "Cineál comhaid anaithnid", + "Talk mentions" : "Luann caint", + "More conversations" : "Tuilleadh comhráite", + "Say hi to your friends and colleagues!" : "Abair Dia duit a chairde agus a chomhghleacaithe!", + "No unread mentions" : "Uimh tagairtí neamhléite", + "Call in progress" : "Glao ar siúl", + "You were mentioned" : "Bhí tú luaite", + "Write to conversation" : "Scríobh chuig comhrá", + "Writes event information into a conversation of your choice" : "Scríobhann sé faisnéis imeachtaí isteach i gcomhrá de do rogha féin", + "Missing email field in header line" : "Réimse ríomhphoist in easnamh sa líne ceanntásca", + "Following lines are invalid: %s" : "Tá na línte seo a leanas neamhbhailí: %s", + "%1$s invited you to conversation \"%2$s\"." : "Thug %1$s cuireadh duit chuig comhrá \"%2$s\".", + "You were invited to conversation \"%s\"." : "Tugadh cuireadh duit chuig comhrá \"%s\".", + "Conversation invitation" : "Cuireadh comhrá", + "Scheduled time" : "Am sceidealta", + "Description" : "Cur síos", + "You can also dial-in via phone with the following details" : "Is féidir leat scairt a chur ar an bhfón freisin leis na sonraí seo a leanas", + "Dial-in information" : "Diailiú isteach faisnéise", + "Meeting ID" : "Aitheantas an chruinnithe", + "Your PIN" : "Do UAP", + "Click the button below to join the lobby now." : "Cliceáil an cnaipe thíos chun páirt a ghlacadh sa stocaireacht anois.", + "Click the link below to join the lobby now." : "Cliceáil ar an nasc thíos chun páirt a ghlacadh sa stocaireacht anois.", + "Join lobby for \"%s\"" : "Glac páirt sa stocaireacht le haghaidh \"%s\"", + "Click the button below to join the conversation now." : "Cliceáil ar an gcnaipe thíos chun páirt a ghlacadh sa chomhrá anois.", + "Click the link below to join the conversation now." : "Cliceáil ar an nasc thíos chun páirt a ghlacadh sa chomhrá anois.", + "Join \"%s\"" : "Glac páirt i \"%s\"", + "Meeting" : "Cruinniú", + "Password request: %s" : "Iarratas pasfhocail: %s", + "Private conversation" : "Comhrá príobháideach", + "Deleted user (%s)" : "Úsáideoir scriosta (%s)", + "Failed to upload call recording" : "Theip ar thaifeadadh glaonna a uaslódáil", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí taifeadta taifeadadh an ghlao {call} a uaslódáil. Déan teagmháil leis an riarachán le do thoil.", + "Share to chat" : "Roinn le comhrá", + "Dismiss notification" : "Déan an fógra a dhíbhe", + "Call recording now available" : "Taifeadadh glaonna ar fáil anois", + "The recording for the call in {call} was uploaded to {file}." : "Uaslódáladh an taifeadadh don ghlao i {call} chuig {file}.", + "Transcript now available" : "Athscríbhinn ar fáil anois", + "The transcript for the call in {call} was uploaded to {file}." : "Uaslódáladh an tras-scríbhinn don ghlao i {call} chuig {file}.", + "Failed to transcript call recording" : "Theip ar thaifeadadh na nglaonna a thrascríobh", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí an taifeadadh a thrascríobh ag {file} don ghlao i {call}. Déan teagmháil leis an riarachán le do thoil.", + "Call summary now available" : "Achoimre glaonna ar fáil anois", + "The summary for the call in {call} was uploaded to {file}." : "Uaslódáladh an achoimre don ghlao i{call} chuig {file}.", + "Failed to summarize call recording" : "Theip ar an taifeadadh glaonna a achoimriú", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Theip ar an bhfreastalaí achoimre a dhéanamh ar an taifeadadh ag {file} don ghlao i{call}. Déan teagmháil leis an riarachán le do thoil.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Thug {user1} cuireadh duit páirt a ghlacadh in {roomName} ar {remoteServer}", + "Accept" : "Glac", + "Decline" : "Meath", + "{user1} invited you to a federated conversation" : "Thug {user1} cuireadh duit chuig comhrá cónasctha", + "Someone reacted" : "D’fhreagair duine éigin", + "New message" : "Teachtaireacht nua", + "Reminder" : "Meabhrúchán", + "Someone mentioned you" : "Luaigh duine éigin thú", + "Notification" : "Fógraí", + "Someone reacted in a private conversation" : "D’fhreagair duine éigin i gcomhrá príobháideach", + "You received a message in a private conversation" : "Fuair ​​tú teachtaireacht i gcomhrá príobháideach", + "Reminder in a private conversation" : "Meabhrúchán i gcomhrá príobháideach", + "Someone mentioned you in a private conversation" : "Luaigh duine éigin thú i gcomhrá príobháideach", + "Notification in a private conversation" : "Fógra i gcomhrá príobháideach", + "Reminder: You in {call}" : "Meabhrúchán: Tú i {call}", + "Reminder: {user} in {call}" : "Meabhrúchán: {user} i {call}", + "Reminder: Deleted user in {call}" : "Meabhrúchán: úsáideoir scriosta i {call}", + "Reminder: {guest} (guest) in {call}" : "Meabhrúchán: {guest} (aoi) i {call}", + "Reminder: Guest in {call}" : "Meabhrúchán: Aoi i {call}", + "{user} reacted with {reaction}" : "D'fhreagair {user} le {reaction}", + "{user} reacted with {reaction} in {call}" : "D'fhreagair {user} le {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "D'fhreagair úsáideoir scriosta le {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "D'fhreagair {guest} (aoi) le {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "D'fhreagair an t-aoi le {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Scriosadh an t-úsáideoir i {call}", + "{guest} (guest) in {call}" : "{guest} (aoi) i {call}", + "Guest in {call}" : "Aoi i {call}", + "{user} sent you a private message" : "Sheol {user} teachtaireacht phríobháideach chugat", + "{user} sent a message in conversation {call}" : "Sheol {user} teachtaireacht i gcomhrá {call}", + "A deleted user sent a message in conversation {call}" : "Sheol úsáideoir scriosta teachtaireacht i gcomhrá {call}", + "{guest} (guest) sent a message in conversation {call}" : "Sheol {guest} (aoi) teachtaireacht i gcomhrá {call}", + "A guest sent a message in conversation {call}" : "Sheol aoi teachtaireacht i gcomhrá {call}", + "{user} replied to your private message" : "D'fhreagair {úsáideoir} do theachtaireacht phríobháideach", + "{user} replied to your message in conversation {call}" : "D'fhreagair {user} do theachtaireacht i gcomhrá {call}", + "A deleted user replied to your message in conversation {call}" : "D'fhreagair úsáideoir scriosta do theachtaireacht i gcomhrá {call}", + "{guest} (guest) replied to your message in conversation {call}" : "D'fhreagair {guest} (aoi) do theachtaireacht i gcomhrá {call}", + "A guest replied to your message in conversation {call}" : "D'fhreagair aoi do theachtaireacht i gcomhrá {call}", + "Reminder: You in private conversation {call}" : "Meabhrúchán: Tú i gcomhrá príobháideach {call}", + "Reminder: A deleted user in private conversation {call}" : "Meabhrúchán: Úsáideoir scriosta i gcomhrá príobháideach {call}", + "Reminder: {user} in private conversation" : "Meabhrúchán: {user} i gcomhrá príobháideach", + "Reminder: You in conversation {call}" : "Meabhrúchán: Tú i gcomhrá {call}", + "Reminder: {user} in conversation {call}" : "Meabhrúchán: {user} i gcomhrá {call}", + "Reminder: A deleted user in conversation {call}" : "Meabhrúchán: Úsáideoir scriosta i gcomhrá {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Meabhrúchán: {guest} (aoi) i gcomhrá {call}", + "Reminder: A guest in conversation {call}" : "Meabhrúchán: Aoi i gcomhrá {call}", + "{user} reacted with {reaction} to your private message" : "D'fhreagair {user} le {reaction} do do theachtaireacht phríobháideach", + "{user} reacted with {reaction} to your message in conversation {call}" : "D'fhreagair {user} le {reaction} do do theachtaireacht i gcomhrá {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "D'fhreagair úsáideoir scriosta le {reaction} do do theachtaireacht i gcomhrá {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "D'fhreagair {guest} (aoi) le {reaction} le do theachtaireacht i gcomhrá {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "D'fhreagair aoi le {reaction} do do theachtaireacht i gcomhrá {call}", + "{user} mentioned you in a private conversation" : "Luaigh {user} tú i gcomhrá príobháideach", + "{user} mentioned group {group} in conversation {call}" : "Luaigh {user} grúpa {group} i gcomhrá {call}", + "{user} mentioned team {team} in conversation {call}" : "Luaigh {user}foireann {team}i gcomhrá {call}", + "{user} mentioned everyone in conversation {call}" : "Luaigh {user} gach duine sa chomhrá {call}", + "{user} mentioned you in conversation {call}" : "Luaigh {user} tú sa chomhrá {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Luaigh úsáideoir scriosta grúpa {group} i gcomhrá {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Luaigh úsáideoir scriosta foireann {team} i gcomhrá {call}", + "A deleted user mentioned everyone in conversation {call}" : "Luaigh úsáideoir scriosta gach duine sa chomhrá {call}", + "A deleted user mentioned you in conversation {call}" : "Luaigh úsáideoir scriosta tú sa chomhrá {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "Luaigh {guest} (aoi) grúpa {group} i gcomhrá {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "Luaigh{guest} (aoi) foireann {team}i gcomhrá{call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Luaigh {guest} (aoi) gach duine i gcomhrá {call}", + "{guest} (guest) mentioned you in conversation {call}" : "Luaigh {guest} (aoi) tú i gcomhrá {call}", + "A guest mentioned group {group} in conversation {call}" : "Luaigh aoi grúpa {group} i gcomhrá {call}", + "A guest mentioned team {team} in conversation {call}" : "Luaigh aoi foireann {team} i gcomhrá {call}", + "A guest mentioned everyone in conversation {call}" : "Luaigh aoi gach duine sa chomhrá {call}", + "A guest mentioned you in conversation {call}" : "Luaigh aoi tú i gcomhrá {call}", + "View message" : "Féach ar an teachtaireacht", + "Dismiss reminder" : "Ruaig meabhrúchán", + "View chat" : "Féach ar an gcomhrá", + "{user} invited you to a group conversation: {call}" : "Thug {user} cuireadh duit chuig comhrá grúpa: {call}", + "Join call" : "Glac páirt sa ghlao", + "Answer call" : "Freagair glao", + "{user} would like to talk with you" : "Ba mhaith le {user} labhairt leat", + "Call back" : "Glaoch ar ais", + "You missed a call from {user}" : "Chaill tú glao ó {user}", + "Accept call" : "Glac leis an nglao", + "Incoming phone call from {call}" : "Glao gutháin isteach ó {call}", + "You missed a phone call from {call}" : "Chaill tú glao gutháin ó {call}", + "A group call has started in {call}" : "Cuireadh tús le glao grúpa i {call}", + "You missed a group call in {call}" : "Chaill tú glao grúpa i {call}", + "{email} is requesting the password to access {file}" : "Tá an pasfhocal á iarraidh ag {email} chun {file} a rochtain", + "{email} tried to request the password to access {file}" : "Rinne {email} iarracht an pasfhocal a iarraidh chun rochtain a fháil ar {file}", + "Someone is requesting the password to access {file}" : "Tá an pasfhocal á iarraidh ag duine éigin chun {file} a rochtain", + "Someone tried to request the password to access {file}" : "Rinne duine éigin iarracht an pasfhocal a iarraidh chun {file} a rochtain", + "Open settings" : "Oscail socruithe", + "Hosted signaling server added" : "Cuireadh freastalaí comharthaíochta óstáilte leis", + "The hosted signaling server is now configured and will be used." : "Tá an freastalaí comharthaíochta óstáilte cumraithe anois agus úsáidfear é.", + "Hosted signaling server removed" : "Baineadh an freastalaí comharthaíochta óstáilte", + "The hosted signaling server was removed and will not be used anymore." : "Baineadh an freastalaí comharthaíochta óstáilte agus ní úsáidfear é a thuilleadh.", + "Hosted signaling server changed" : "Athraíodh an freastalaí comharthaíochta óstáilte", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "D'athraigh cuntas an fhreastalaí comharthaíochta óstáilte an stádas ó \"{oldstatus}\" go \"{newstatus}\".", + "pending" : "ar feitheamh", + "active" : "gníomhach", + "expired" : "imithe in éag", + "blocked" : "bac", + "error" : "earráid", + "The certificate of {host} expires in {days} days" : "Rachaidh teastas {host} in éag i gceann {days} lá", + "The certificate of {host} expired" : "Chuaigh teastas {host} in éag", + "Contact via Talk" : "Déan teagmháil trí Talk", + "Open Talk" : "Caint Oscailte", + "Default" : "Réamhshocrú", + "Send messages, create threads, and start voice and video calls." : "Seol teachtaireachtaí, cruthaigh snáitheanna, agus cuir tús le glaonna gutha agus físe.", + "Presentation" : "Cur i láthair", + "Voice room" : "Seomra gutha", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Glac páirt go díreach sa ghlao, rud atá iontach maith le haghaidh comhráite nó cruinnithe spontáineacha.", + "Webinar" : "webinar", + "Conversations" : "Comhráite", + "Messages in current conversation" : "Teachtaireachtaí sa chomhrá reatha", + "{user}" : "{user}", + "Messages" : "Teachtaireachtaí", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Teachtaireachtaí i gcomhráite eile", + "One-to-one rooms always need to show the other users avatar" : "Ní mór do sheomraí duine le duine avatar na n-úsáideoirí eile a thaispeáint i gcónaí", + "Invalid emoji character" : "Carachtar emoji neamhbhailí", + "Invalid background color" : "Dath cúlra neamhbhailí", + "Avatar image is not square" : "Níl an íomhá avatar cearnach", + "Room {number}" : "Seomra {number}", + "Other" : "Eile", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Theip ar thriail a iarraidh toisc nach féidir teacht ar an bhfreastalaí trialach. Bain triail eile as ar ball le do thoil.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Tá fadhb ann le fíordheimhniú an ásc seo. B'fhéidir nach bhfuil sé inrochtana ón taobh amuigh chun a URL a fhíorú.", + "Something unexpected happened." : "Tharla rud gan choinne.", + "The URL is invalid." : "Tá an URL neamhbhailí.", + "An HTTPS URL is required." : "Tá URL HTTPS ag teastáil.", + "The email address is invalid." : "Tá an seoladh ríomhphoist neamhbhailí.", + "The language is invalid." : "Tá an teanga neamhbhailí.", + "The country is invalid." : "Tá an tír neamhbhailí.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Tá fadhb ann le hiarratas na trialach. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "Too many requests are send from your servers address. Please try again later." : "Seoltar an iomarca iarratas ó do sheoladh freastalaithe. Bain triail eile as ar ball le do thoil.", + "There is already a trial registered for this Nextcloud instance." : "Tá triail cláraithe cheana féin don ásc Nextcloud seo.", + "Something unexpected happened. Please try again later." : "Tharla rud gan choinne. Bain triail eile as ar ball le do thoil.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Theip ar thriail a iarraidh toisc gur iompar mícheart é an freastalaí trialach. Bain triail eile as ar ball le do thoil.", + "Trial requested but failed to get account information. Please check back later." : "Iarradh an triail ach níor éirigh leis faisnéis chuntais a fháil. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Tá fadhb ann le fíordheimhniú an iarratais seo. B'fhéidir nach bhfuil sé inrochtana ón taobh amuigh chun a URL a fhíorú.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Níorbh fhéidir faisnéis chuntais a fháil toisc gur iompar mícheart é an freastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Tá fadhb ann le faisnéis an chuntais a fháil. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "There is no such account registered." : "Níl aon chuntas den sórt sin cláraithe.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Níorbh fhéidir faisnéis chuntais a fháil toisc nach féidir teacht ar an bhfreastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "Deleting the hosted signaling server account failed. Please check back later." : "Theip ar scriosadh an chuntais freastalaí comharthaíochta óstáilte. Seiceáil ar ais ar ball le do thoil.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Theip ar an gcuntas a scriosadh toisc gur iompar mícheart é an freastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "There is a problem with deleting the account. Please check your logs for further information." : "Tá fadhb ann leis an gcuntas a scriosadh. Seiceáil do logaí le haghaidh tuilleadh eolais.", + "Too many requests are sent from your servers address. Please try again later." : "Seoltar an iomarca iarratas ó do sheoladh freastalaithe. Bain triail eile as ar ball le do thoil.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Theip ar an gcuntas a scriosadh toisc nach féidir teacht ar an bhfreastalaí trialach. Seiceáil ar ais ar ball le do thoil.", + "Note to self" : "Nóta dó féin", + "A place for your private notes, thoughts and ideas" : "Áit le haghaidh do chuid nótaí príobháideacha, smaointe agus smaointe", + "Transcript is AI generated and may contain mistakes" : "Gintear AI an tras-scríbhinn agus d’fhéadfadh botúin a bheith ann", + "Summary is AI generated and may contain mistakes" : "Gintear achoimre ar AI agus d’fhéadfadh botúin a bheith ann", + "Let's get started!" : "Cuirimis tús leis!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "Is ardán cumarsáide slán féin-óstach é **Nextcloud Talk** a chomhtháthaíonn gan uaim le héiceachóras Nextcloud.\n\n#### Príomhghnéithe de Nextcloud Talk:\n\n* Comhrá agus teachtaireachtaí i gcomhráite príobháideacha agus grúpa\n* Glaonna gutha agus físe\n* Comhroinnt agus comhtháthú le haipeanna eile Nextcloud\n* Socruithe comhrá saincheaptha, modhnóireacht agus rialuithe príobháideachais\n* Gréasán, deasc agus soghluaiste (iOS agus Android)\n* Cumarsáid phríobháideach agus shlán\n\nFaigh tuilleadh eolais sa [dhoiciméadú úsáideora](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Fáilte go Nextcloud Talk\n\nIs aip teachtaireachtaí príobháideach agus cumhachtach é Nextcloud Talk a chomhtháthaíonn le Nextcloud. Déan comhrá i gcomhráite príobháideacha nó grúpa, comhoibrigh thar ghlaonna gutha agus físe, eagraigh seimineáir agus imeachtaí, saincheap do chomhráite agus go leor eile.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formáidigh téacsanna chun teachtaireachtaí saibhir a chruthú\n\nIn Nextcloud Talk, is féidir leat comhréir Markdown a úsáid chun do theachtaireachtaí a fhormáidiú. Mar shampla, cuir formáidiú **trom** nó *iodálach* i bhfeidhm, nó 'béim ar théacsanna mar chód`. Is féidir leat fiú táblaí a chruthú agus ceannteidil a chur le do théacs.\n\nAn gá clóscríobh a shocrú nó formáidiú a athrú? Cuir do theachtaireacht in eagar trí \"Cuir teachtaireacht in eagar\" a chliceáil sa roghchlár teachtaireachta.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Cuir ceangaltáin agus naisc leis\n\nCeangail comhaid ó do Mhol Nextcloud ag baint úsáide as an gcnaipe \"+\". Comhroinn míreanna ó Chomhaid agus aipeanna éagsúla Nextcloud. Tacaíonn roinnt apps fiú le giuirléidí idirghníomhacha, mar shampla, an app Téacs.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Lig do na comhráite sreabhadh: luaigh úsáideoirí, freagair do theachtaireachtaí agus tuilleadh\n\nIs féidir leat gach duine sa chomhrá a lua trí %s a úsáid nó rannpháirtithe sonracha a lua trí \"@\" a chlóscríobh agus a n-ainm a roghnú ón liosta.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Is féidir leat freagra a thabhairt ar theachtaireachtaí, iad a chur ar aghaidh chuig comhráite agus daoine eile, nó ábhar na teachtaireachta a chóipeáil.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Déan níos mó le Smart Picker\n\nNíl ort ach clóscríobh \"/\" nó téigh go dtí an roghchlár \"+\" chun an Piocálaí Cliste a oscailt áit ar féidir leat ábhar éagsúla a cheangal le do theachtaireachtaí. Is féidir leat an Roghnóir Cliste a chumrú le bheith in ann míreanna a chur leis ó aipeanna Nextcloud, GIFs, láithreacha léarscáileanna, ábhar a ghintear le AI agus go leor eile.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Bainistigh socruithe comhrá\n\nSa roghchlár comhrá, is féidir leat rochtain a fháil ar shocruithe éagsúla chun do chomhráite a bhainistiú, mar shampla:\n* Cuir eolas an chomhrá in eagar\n* Bainistigh fógraí\n* Cuir go leor rialacha modhnóireachta i bhfeidhm\n* Cumraigh rochtain agus slándáil\n* Cumasaigh róbónna\n* agus níos mó!", + "Andorra" : "Andóra", + "United Arab Emirates" : "Aontas na nÉimíríochtaí Arabacha", + "Afghanistan" : "Afganastáin", + "Antigua and Barbuda" : "Antigua agus Barbúda", + "Anguilla" : "Anguilla", + "Albania" : "an Albáin", + "Armenia" : "Airméin", + "Angola" : "Angóla", + "Antarctica" : "Antartaice", + "Argentina" : "an Airgintín", + "American Samoa" : "Samó Meiriceánach", + "Austria" : "Ostair", + "Australia" : "Astráil", + "Aruba" : "Aruba", + "Åland Islands" : "Oileáin Åland", + "Azerbaijan" : "Asarbaiseáin", + "Bosnia and Herzegovina" : "An Bhoisnia agus an Heirseagaivéin", + "Barbados" : "Barbadós", + "Bangladesh" : "Bhanglaidéis", + "Belgium" : "an Bheilg", + "Burkina Faso" : "Buircíne Fasó", + "Bulgaria" : "an Bhulgáir", + "Bahrain" : "Bairéin", + "Burundi" : "An Bhurúin", + "Benin" : "Beinin", + "Saint Barthélemy" : "Naomh Barthélemy", + "Bermuda" : "Beirmiúda", + "Brunei Darussalam" : "Brúiné Dárasalám", + "Bolivia, Plurinational State of" : "An Bholaiv, Stát Iolrnáisiúnta na", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius agus Saba", + "Brazil" : "an Bhrasaíl", + "Bahamas" : "Bahámaí", + "Bhutan" : "Bhútáin", + "Bouvet Island" : "Oileán Bouvet", + "Botswana" : "Bhotsuáin", + "Belarus" : "Bhealarúis", + "Belize" : "Bheilís", + "Canada" : "Ceanada", + "Cocos (Keeling) Islands" : "Oileáin Cocos (Keeling).", + "Congo, the Democratic Republic of the" : "an Chongó, Poblacht Dhaonlathach an", + "Central African Republic" : "Poblacht na hAfraice Láir", + "Congo" : "Chongó", + "Switzerland" : "Eilvéis", + "Côte d'Ivoire" : "Cósta Eabhair", + "Cook Islands" : "Oileáin Cook", + "Chile" : "an tSile", + "Cameroon" : "Camarún", + "China" : "tSín", + "Colombia" : "an Cholóim", + "Costa Rica" : "Cósta Ríce", + "Cuba" : "Cúba", + "Cabo Verde" : "Rinn Verde", + "Curaçao" : "Curacao", + "Christmas Island" : "Oileán na Nollag", + "Cyprus" : "an Chipir", + "Czechia" : "Seicis", + "Germany" : "an Ghearmáin", + "Djibouti" : "Djibútí", + "Denmark" : "an Danmhairg", + "Dominica" : "Doiminic", + "Dominican Republic" : "An Phoblacht Dhoiminiceach", + "Algeria" : "Ailgéir", + "Ecuador" : "Eacuadór", + "Estonia" : "an Eastóin", + "Egypt" : "Éigipt", + "Western Sahara" : "Sahára Thiar", + "Eritrea" : "Eiritré", + "Spain" : "an Spáinn", + "Ethiopia" : "Aetóip", + "Finland" : "an Fhionlainn", + "Fiji" : "Fidsí", + "Falkland Islands (Malvinas)" : "Oileáin Fháclainne (Malvinas)", + "Micronesia, Federated States of" : "Micrinéise, Stáit Chónaidhme na", + "Faroe Islands" : "Oileáin Fharó", + "France" : "Fhrainc", + "Gabon" : "Ghabúin", + "United Kingdom of Great Britain and Northern Ireland" : "Ríocht Aontaithe na Breataine Móire agus Thuaisceart Éireann", + "Grenada" : "Greanáda", + "Georgia" : "An tSeoirsia", + "French Guiana" : "Guáin na Fraince", + "Guernsey" : "Geansaí", + "Ghana" : "Gána", + "Gibraltar" : "Giobráltar", + "Greenland" : "Ghraonlainn", + "Gambia" : "An Ghaimbia", + "Guinea" : "Ghuine", + "Guadeloupe" : "Guadalúip", + "Equatorial Guinea" : "An Ghuine Mheánchriosach", + "Greece" : "an Ghréig", + "South Georgia and the South Sandwich Islands" : "An tSeoirsia Theas agus na hOileáin Sandwich Theas", + "Guatemala" : "Guatamala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guine Bhissau", + "Guyana" : "Ghuáin", + "Hong Kong" : "Hong Cong", + "Heard Island and McDonald Islands" : "Oileán Heard agus Oileáin McDonald", + "Honduras" : "Hondúras", + "Croatia" : "an Chróit", + "Haiti" : "Háití", + "Hungary" : "an Ungáir", + "Indonesia" : "Indinéis", + "Ireland" : "Éire", + "Israel" : "Iosrael", + "Isle of Man" : "Oileán Mhanann", + "India" : "India", + "British Indian Ocean Territory" : "Críoch Aigéan Indiach na Breataine", + "Iraq" : "Iaráic", + "Iran, Islamic Republic of" : "Iaráin, Poblacht Ioslamach na", + "Iceland" : "Íoslainn", + "Italy" : "an Iodáil", + "Jersey" : "Geirsí", + "Jamaica" : "Iamáice", + "Jordan" : "an Iordáin", + "Japan" : "an tSeapáin", + "Kenya" : "an Chéinia", + "Kyrgyzstan" : "Chirgeastáin", + "Cambodia" : "an Chambóid", + "Kiribati" : "Ciribeas", + "Comoros" : "Oileáin Chomóra", + "Saint Kitts and Nevis" : "San Críostóir-Nimheas", + "Korea, Democratic People's Republic of" : "An Chóiré, Daon-Phoblacht Dhaonlathach na", + "Korea, Republic of" : "An Chóiré, Poblacht na", + "Kuwait" : "Cuáit", + "Cayman Islands" : "Oileáin Cayman", + "Kazakhstan" : "Chasacstáin", + "Lao People's Democratic Republic" : "Daon-Phoblacht Dhaonlathach Lao", + "Lebanon" : "an Liobáin", + "Saint Lucia" : "Naomh Lucia", + "Liechtenstein" : "Lichtinstéin", + "Sri Lanka" : "Srí Lanca", + "Liberia" : "Libéir", + "Lesotho" : "Leosóta", + "Lithuania" : "an Liotuáin", + "Luxembourg" : "Lucsamburg", + "Latvia" : "an Laitvia", + "Libya" : "Libia", + "Morocco" : "Maracó", + "Monaco" : "Monacó", + "Moldova, Republic of" : "Mholdóiv, Poblacht na", + "Montenegro" : "Montainéagró", + "Saint Martin (French part)" : "Naomh Máirtín (cuid Fraincise)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Oileáin Mharshall", + "North Macedonia" : "An Mhacadóin Thuaidh", + "Mali" : "Mailí", + "Myanmar" : "Maenmar", + "Mongolia" : "an Mhongóil", + "Macao" : "Macao", + "Northern Mariana Islands" : "Oileáin Mariana Thuaidh", + "Martinique" : "Mairtíreach", + "Mauritania" : "Mháratáin", + "Montserrat" : "Montsarat", + "Malta" : "an Mhálta", + "Mauritius" : "Oileán Mhuirís", + "Maldives" : "Oileáin Mhaildíve", + "Malawi" : "an Mhaláiv", + "Mexico" : "Meicsiceo", + "Malaysia" : "Mhalaeisia", + "Mozambique" : "Mósaimbíc", + "Namibia" : "Namaib", + "New Caledonia" : "An Nua-Chaladóin", + "Niger" : "Nígir", + "Norfolk Island" : "Oileán Norfolk", + "Nigeria" : "Nigéir", + "Nicaragua" : "Nicearagua", + "Netherlands" : "an Ísiltír", + "Norway" : "an Iorua", + "Nepal" : "Neipeal", + "Nauru" : "Nárú", + "Niue" : "Niue", + "New Zealand" : "An Nua-Shéalainn", + "Oman" : "Óman", + "Panama" : "Panama", + "Peru" : "Peiriú", + "French Polynesia" : "Polainéis na Fraince", + "Papua New Guinea" : "Nua-Ghuine Phapua", + "Philippines" : "hOileáin Fhilipíneacha", + "Pakistan" : "an Phacastáin", + "Poland" : "an Pholainn", + "Saint Pierre and Miquelon" : "Naomh Pierre agus Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Pórtó Ríce", + "Palestine, State of" : "Phalaistín, Stát", + "Portugal" : "an Phortaingéil", + "Palau" : "Palau", + "Paraguay" : "Paragua", + "Qatar" : "Catar", + "Réunion" : "Réunion", + "Romania" : " an Rómáin", + "Serbia" : "an tSeirbia", + "Russian Federation" : "Cónaidhm na Rúise", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "An Araib Shádach", + "Solomon Islands" : "Oileáin Sholamón", + "Seychelles" : "Na Séiséil", + "Sudan" : "an tSúdáin", + "Sweden" : "an tSualainn", + "Singapore" : "Singeapór", + "Saint Helena, Ascension and Tristan da Cunha" : "San Héilin, Ascension agus Tristan da Cunha", + "Slovenia" : "an tSlóivéin", + "Svalbard and Jan Mayen" : "Svalbard agus Jan Mayen", + "Slovakia" : "an tSlóvaic", + "Sierra Leone" : "Siarra Leon", + "San Marino" : "San Mairíne", + "Senegal" : "an tSeineagáil", + "Somalia" : "an tSomáil", + "Suriname" : "Suranam", + "South Sudan" : "an tSúdáin Theas", + "Sao Tome and Principe" : "Sao Tome agus Principe", + "El Salvador" : "an tSalvadóir", + "Sint Maarten (Dutch part)" : "Sint Maarten (an chuid Ollainnis)", + "Syrian Arab Republic" : "Poblacht Arabach na Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Oileáin na dTurcach agus na Caicos", + "Chad" : "Sead", + "French Southern Territories" : "Críocha Theas na Fraince", + "Togo" : "Tóga", + "Thailand" : "an Téalainn", + "Tajikistan" : "Táidsíceastáin", + "Tokelau" : "Tócalainn", + "Timor-Leste" : "Tíomór-Leste", + "Turkmenistan" : "Tuircméanastáin", + "Tunisia" : "an Túinéis", + "Tonga" : "Tonga", + "Turkey" : "n Tuirc", + "Trinidad and Tobago" : "Oileán na Tríonóide agus Tobága", + "Tuvalu" : "Túvalú", + "Taiwan, Province of China" : "Taiwan, Cúige na Síne", + "Tanzania, United Republic of" : "An Tansáin, Poblacht Aontaithe na", + "Ukraine" : "an Úcráin", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Mionoileáin Imeallacha na Stát Aontaithe", + "United States of America" : "Stáit Aontaithe Mhéiriceá", + "Uruguay" : "Uragua", + "Uzbekistan" : "Úisbéiceastáin", + "Holy See" : "Suí Naofa", + "Saint Vincent and the Grenadines" : "San Uinseann agus na Greanáidíní", + "Venezuela, Bolivarian Republic of" : "Veiniséala, Poblacht Bolivarian na", + "Virgin Islands, British" : "Oileáin na Maighdean, na Breataine", + "Virgin Islands, U.S." : "Oileáin na Maighdean, U.S.", + "Viet Nam" : "Vítneam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis agus Futúna", + "Samoa" : "Samó", + "Yemen" : "Éimin", + "Mayotte" : "Maigh Eo", + "South Africa" : "an Afraic Theas", + "Zambia" : "an tSaimbia", + "Zimbabwe" : "An tSiombáib", + "Background blur" : "Geamhú an chúlra", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Níorbh fhéidir tacaíocht lódála WASM a sheiceáil. Seiceáil le do thoil de láimh an bhfreastalaíonn do fhreastalaí gréasáin ar chomhaid `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Níl do fhreastalaí gréasáin socraithe i gceart chun comhaid `.wasm` a sheachadadh. De ghnáth is saincheist é seo le cumraíocht Nginx. Le haghaidh doiléir an chúlra ní mór é a choigeartú chun comhaid `.wasm` a sheachadadh freisin. Déan do chumraíocht Nginx a chur i gcomparáid leis an gcumraíocht mholta inár gcáipéisíocht.", + "Talk configuration values" : "Labhair luachanna cumraíochta", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Ní thacaítear ach le córas cron a chur iallach ar ghlao. Cumasaigh cron an chórais nó bain an chumraíocht `max_call_dration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Níl luachanna beaga `max_call_duration` (socraithe go%dfaoi láthair) infheidhmithe de bharr srianta teicniúla. Ní dhéantar an post cúlra ach amháin gach 5 nóiméad, mar sin bain úsáid as ar do phriacal féin.", + "Federation" : "Cónaidhm", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Moltar go mór \"memcache.locking\" a chumrú nuair atá Talk Federation cumasaithe.", + "High-performance backend" : "Inneall ardfheidhmíochta", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Gan Inneall Ardfheidhmíochta cumraithe - Nextcloud Talk a Rith gan na scálaí Inneall Ardfheidhmíochta amháin le haghaidh glaonna an-bheag (2-3 rannpháirtí ar a mhéad). Socraigh le do thoil an t-Inneall Ardfheidhmíochta chun a chinntiú go n-oibríonn glaonna le rannpháirtithe iolracha gan stró.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Ní cheadaítear an modh \"conversation_cluster\" Inneall Ardfheidhmíochta a rith agus ní thacófar leis a thuilleadh sa leagan atá le teacht. Tacaíonn an t-Inneall Ardfheidhmíochta le fíorchnuasaigh sa lá atá inniu ann ar cheart a úsáid ina ionad.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Ní dhéanfar aon inneall ardfheidhmíochta iolrach a shainiú agus ní thacófar leis a thuilleadh sa leagan atá le teacht. Ina áit sin ba cheart cothromóir ualaigh a shocrú in éineacht le freastalaithe comharthaíochta cnuasaithe agus é a chumrú sna socruithe Plé.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Ní hionann an eochair phoiblí stóráilte don algartam %1$s a úsáideadh agus an eochair phríobháideach stóráilte. Rith %2$s chun an fhadhb a réiteach.", + "High-performance backend not configured correctly. Run %s for details." : "Níl an cúltaca ardfheidhmíochta cumraithe i gceart. Rith %s le haghaidh sonraí.", + "High-performance backend not configured correctly" : "Inneall ardfheidhmíochta gan a bheith cumraithe i gceart", + "Error: Cannot connect to server" : "Earráid: Ní féidir ceangal leis an bhfreastalaí", + "Error: Server did not respond with proper JSON" : "Earráid: Níor fhreagair an freastalaí leis an JSON cuí", + "Error: Certificate expired" : "Earráid: Deimhniú imithe in éag", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Earráid: Níl amanna córais fhreastalaí Nextcloud agus freastalaí Inneall Ardfheidhmíochta as sioncronú. Cinntigh le do thoil go bhfuil an dá fhreastalaí ceangailte le freastalaí ama nó sioncrónaigh a gcuid ama de láimh.", + "Could not get version" : "Níorbh fhéidir an leagan a fháil", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Earráid: Leagan rith: {version}; Ní mór an freastalaí a nuashonrú le bheith comhoiriúnach leis an leagan seo de Talk", + "Error: Server responded with: {error}" : "Earráid: D'fhreagair an freastalaí le: {error}", + "Error: Unknown error occurred" : "Earráid: Tharla earráid anaithnid", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Rabhadh: Leagan reatha: {version}; Ní thacaíonn an freastalaí le gach gné den leagan Talk seo, tá gnéithe in easnamh: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Moltar go mór taisce cuimhne a chumrú agus Nextcloud Talk á rith le hInneall Ardfheidhmíochta.", + "Client Push" : "Brúigh Cliant", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Tá Client Push suiteáilte, feabhsaíonn sé seo poncúlacht fógraí Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "Níl {notify_push} suiteáilte. D’fhéadfadh sé seo moill a chur ar fhógraí Talk.", + "Recording backend" : "Inneall taifeadta", + "Using the recording backend requires a High-performance backend." : "Teastaíonn inneall Ardfheidhmíochta chun an t-inneall taifeadta a úsáid.", + "No recording backend configured" : "Níl aon inneall taifeadta cumraithe", + "SIP configuration" : "Cumraíocht SIP", + "Using the SIP functionality requires a High-performance backend." : "Teastaíonn inneall Ardfheidhmíochta chun feidhmiúlacht SIP a úsáid.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Ní féidir uimhreacha gutháin Sannta Comhrá a thosú le + ná 0. Bain nó nuashonraigh na huimhreacha seo a leanas le do thoil:\n{list}", + "No SIP backend configured" : "Níl aon inneall SIP cumraithe", + "Invalid date, date format must be YYYY-MM-DD" : "Dáta neamhbhailí, caithfidh formáid an dáta a bheith BBBB-MM-DD", + "Conversation not found" : "Comhrá gan aimsiú", + "Path is already shared with this conversation" : "Tá an chonair roinnte leis an gcomhrá seo cheana féin", + "Chat, video & audio-conferencing using WebRTC" : "Comhrá, físchomhdháil & closchomhdháil ag úsáid WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Comhrá, físchomhdháil & closchomhdháil ag úsáid WebRTC\n\n* 💬 **Comhrá** Tagann Nextcloud Talk le comhrá téacs simplí, a ligeann duit comhaid a roinnt nó a uaslódáil ó d’aip nó do ghléas áitiúil Nextcloud Files agus rannpháirtithe eile a lua.\n* 👥 **Glaonna príobháideacha, grúpa, poiblí agus cosanta ag pasfhocal!** Tabhair cuireadh do dhuine éigin, do ghrúpa iomlán nó seol nasc poiblí chun cuireadh a thabhairt do ghlao.\n* 🌐 **Comhráite Cónaidhme** Déan comhrá le húsáideoirí eile Nextcloud ar a bhfreastalaithe\n* 💻 **Scáileán a roinnt!** Roinn do scáileán le rannpháirtithe do ghlao.\n* 🚀 ** Comhtháthú le haipeanna Nextcloud eile** cosúil le Comhaid, Féilire, Stádas Úsáideora, Painéal na nIonstraimí, Sreabhadh, Léarscáileanna, Roghnóir Cliste, Teagmhálacha, Deic, agus go leor eile.\n* 🌉 **Sioncronaigh le réitigh chomhrá eile** Agus [Matterbridge](https://github.com/42wim/matterbridge/) á chomhtháthú in Talk, is féidir leat go leor réitigh comhrá eile a shioncronú go héasca le Nextcloud Talk agus vice- versa.", + "Leave call" : "Fág glaoch", + "Navigating away from the page will leave the call in {conversation}" : "Má sheolann tú amach ón leathanach fágfar an glao i {conversation}", + "Stay in call" : "Fan ar glaoch", + "Error occurred when getting the conversation information" : "Tharla earráid agus faisnéis an chomhrá á fáil", + "Discuss this file" : "Pléigh an comhad seo", + "Share this file with others to discuss it" : "Roinn an comhad seo le daoine eile chun é a phlé", + "Share this file" : "Roinn an comhad seo", + "Join conversation" : "Glac páirt sa chomhrá", + "This conversation is password-protected." : "Tá an comhrá seo cosanta ag pasfhocal.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Bhraitheamar go leor iarrachtaí pasfhocail neamhbhailí ó do IP. Dá bhrí sin tá do chéad iarracht eile throttled suas go dtí 30 soicind.", + "The password is wrong. Try again." : "Tá an focal faire mícheart. Déan iarracht arís.", + "Password" : "Pasfhocal", + "Submit" : "Cuir isteach", + "Error requesting the password." : "Earráid agus an focal faire á iarraidh.", + "Request password" : "Iarr pasfhocal", + "This conversation has ended" : "Tá deireadh leis an gcomhrá seo", + "Error occurred when joining the conversation" : "Tharla earráid agus tú ag glacadh páirte sa chomhrá", + "Close Talk sidebar" : "Dún an barra taoibh Talk", + "Open Talk sidebar" : "Oscail barra taoibh Talk", + "Everyone" : "Gach duine", + "Users and moderators" : "Úsáideoirí agus modhnóirí", + "Moderators only" : "Modhnóirí amháin", + "Disable calls" : "Díchumasaigh glaonna", + "Save changes" : "Sabháil na hathruithe", + "Saving …" : "Shábháil …", + "Saved!" : "Shábháil!", + "Limit to groups" : "Teorainn do ghrúpaí", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Nuair a roghnaítear grúpa amháin ar a laghad, ní féidir ach le daoine de na grúpaí liostaithe a bheith mar chuid de chomhráite.", + "Guests can still join public conversations." : "Is féidir le haíonna páirt a ghlacadh i gcomhráite poiblí fós.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Déanfar úsáideoirí nach bhfuil in ann Plé a úsáid a thuilleadh a liostú mar rannpháirtithe ina gcomhráite roimhe seo agus coimeádfar a dteachtaireachtaí comhrá freisin.", + "Limit using Talk" : "Teorainn ag baint úsáide as Talk", + "Limit creating a public and group conversation" : "Cuir teorainn le comhrá poiblí agus comhrá grúpa a chruthú", + "Limit creating conversations" : "Cuir teorainn le cruthú comhráite", + "Limit starting a call" : "Cuir teorainn le glao a thosú", + "Limit starting calls" : "Cuir teorainn le glaonna tosaithe", + "When a call has started, everyone with access to the conversation can join the call." : "Nuair a chuirtear tús le glao, is féidir le gach duine a bhfuil rochtain acu ar an gcomhrá páirt a ghlacadh sa ghlao.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Tá na róbónna seo a leanas suiteáilte ar an bhfreastalaí seo. Sna doiciméid is féidir leat sonraí a fháil maidir le conas {linkstart1}do bhota féin a thógáil{linkend} nó {linkstart2}liosta róbónna{linkend} le cumasú ar do fhreastalaí.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Níl aon róbónna suiteáilte ar an bhfreastalaí seo. Sna doiciméid is féidir leat sonraí a fháil maidir le conas {linkstart1}do bhota féin a thógáil{linkend} nó {linkstart2}liosta róbónna{linkend} le cumasú ar do fhreastalaí.", + "Description is not provided" : "Ní thugtar tuairisc", + "Locked for moderators" : "Faoi ghlas le haghaidh modhnóirí", + "Enabled" : "Cumasaithe", + "Disabled" : "Faoi mhíchumas", + "Bots settings" : "Socruithe róbónna", + "State" : "Stáit", + "Name" : "Ainm", + "Last error" : "Earráid dheireanach", + "Total errors count" : "Áireamh earráidí iomlána", + "Find more bots" : "Faigh tuilleadh róbónna", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Is féidir freastalaithe iontaofa a chumrú ag {linkstart}Leathanach na socruithe a roinnt{linkedin}.", + "Beta" : "Béite", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Oibríonn comhráite agus glaonna cónaidhme cheana féin. Tá láimhseáil ceangaltán ag teacht i leagan amach anseo.", + "Enable Federation in Talk app" : "Cumasaigh Federation in Talk aip", + "Permissions" : "Ceadanna", + "Allow users to be invited to federated conversations" : "Ceadaigh cuireadh a thabhairt d'úsáideoirí chuig comhráite cónasctha", + "Allow users to invite federated users into conversation" : "Lig d'úsáideoirí cuireadh a thabhairt d'úsáideoirí cónasctha chun comhrá a dhéanamh", + "Only allow to federate with trusted servers" : "Ná ceadaigh ach cónascadh le freastalaithe iontaofa", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Nuair a roghnaítear grúpa amháin ar a laghad, ní féidir ach le daoine de na grúpaí liostaithe cuireadh a thabhairt d’úsáideoirí cónasctha chuig comhráite.", + "Groups allowed to invite federated users" : "Tá cead ag grúpaí cuireadh a thabhairt d'úsáideoirí cónasctha", + "Select groups …" : "Roghnaigh grúpaí…", + "All messages" : "Gach teachtaireacht", + "@-mentions only" : "@-luaite amháin", + "Off" : "as", + "General settings" : "Socruithe Ginearálta", + "Default notification settings" : "Socruithe fógra réamhshocraithe", + "Default group notification" : "Fógra grúpa réamhshocraithe", + "Default group notification for new groups" : "Fógra grúpa réamhshocraithe do ghrúpaí nua", + "Integration into other apps" : "Comhtháthú le haipeanna eile", + "Allow conversations on files" : "Ceadaigh comhráite ar chomhaid", + "Allow conversations on public shares for files" : "Ceadaigh comhráite ar scaireanna poiblí do chomhaid", + "End-to-end encrypted calls" : "Glaonna criptithe ó cheann go ceann", + "Enable encryption" : "Cumasaigh criptiú", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Teastaíonn leagan níos nuaí den Inneall Ardfheidhmíochta agus droichead SIP le glaonna criptithe ceann go ceann le droichead SIP cumraithe.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Ní thacaíonn cliaint shoghluaiste le glaonna criptithe ceann go ceann faoi láthair.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Trí chliceáil ar an gcnaipe thuas seoltar an fhaisnéis san fhoirm chuig freastalaithe Struktur AG. Is féidir leat tuilleadh faisnéise a fháil ag {linkstart}spreed.eu{linkend}.", + "Pending" : "Ar feitheamh", + "Error" : "Earráid", + "Blocked" : "Bactha", + "Active" : "Gníomhach", + "Expired" : "Imithe in éag", + "Never" : "Riamh", + "The trial could not be requested. Please try again later." : "Níorbh fhéidir an triail a iarraidh. Bain triail eile as ar ball le do thoil.", + "The account could not be deleted. Please try again later." : "Níorbh fhéidir an cuntas a scriosadh. Bain triail eile as ar ball le do thoil.", + "Hosted High-performance backend" : "Inneall Ardfheidhmíochta arna óstáil", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Soláthraíonn ár gcomhpháirtí Struktur AG seirbhís inar féidir freastalaí comharthaíochta óstáilte a iarraidh. Chuige seo ní gá duit ach an fhoirm thíos a líonadh agus iarrfaidh do Nextcloud í. Nuair a bheidh an freastalaí socraithe duit líonfar na dintiúir go huathoibríoch. Forscríobhfaidh sé seo na socruithe freastalaí comharthaíochta atá ann cheana féin.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Má tá feidhmiúlacht STUN agus/nó TURN i do chuntas cúil ardfheidhmíochta, déanfar na socruithe a nuashonrú dá réir.", + "URL of this Nextcloud instance" : "URL an ásc Nextcloud seo", + "Full name of the user requesting the trial" : "Ainm iomlán an úsáideora a iarrann an triail", + "Email of the user" : "Ríomhphost an úsáideora", + "Language" : "Teanga", + "Country" : "Tír", + "Request signaling server trial" : "Iarr triail freastalaí comharthaíochta", + "You can see the current status of your hosted signaling server in the following table." : "Is féidir leat stádas reatha do fhreastalaí comharthaíochta óstáilte a fheiceáil sa tábla seo a leanas.", + "Status" : "Stádas", + "Created at" : "Cruthaithe ag", + "Expires at" : "In éag ag", + "Limits" : "Teorainneacha", + "STUN included" : "STUN san áireamh", + "Yes" : "Tá", + "No" : "Níl", + "TURN included" : "TURN san áireamh", + "Delete the signaling server account" : "Scrios an cuntas freastalaí comharthaíochta", + "_%n user_::_%n users_" : ["%n úsáideoir","%n úsáideoirí","%n úsáideoirí","%n úsáideoirí","%n úsáideoirí"], + "Installed version: {version}" : "Leagan suiteáilte: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Is féidir leat an Matterbridge a shuiteáil chun Nextcloud Talk a nascadh le roinnt seirbhísí eile, tabhair cuairt ar a {linkstart1}leathanach GitHub{linkend} le haghaidh tuilleadh sonraí. Is féidir go dtógfaidh sé tamall an aip a íoslódáil agus a shuiteáil. Ar eagla go mbeidh teorainn leis, suiteáil de láimh é ón {linkstart2}Nextcloud Siopa Aip{linkend} le do thoil.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Tá ceadanna míchearta ag dénártha Matterbridge. Cinntigh le do thoil gur leis an úsáideoir ceart an comhad dénártha Matterbridge agus gur féidir é a fhorghníomhú. Is féidir é a fháil in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Níor aimsíodh dénártha Matterbridge nó níorbh fhéidir é a fhorghníomhú.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Is féidir leat an cosán chuig dénártha Matterbridge a shocrú de láimh freisin tríd an config. Seiceáil an {linkstart}doiciméadú comhtháthú Matterbridge{linkend} le haghaidh tuilleadh faisnéise.", + "Downloading …" : "Ag íosluchtú…", + "Install Talk Matterbridge" : "Suiteáil Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Tharla earráid agus an aip Matterbridge á shuiteáil", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Tharla earráid agus an Talk Matterbridge á shuiteáil. Suiteáil de láimh é le do thoil", + "Failed to execute Matterbridge binary." : "Theip ar dhénártha Matterbridge a rith.", + "Matterbridge integration" : "Comhtháthú Matterbridge", + "Enable Matterbridge integration" : "Cumasaigh comhtháthú Matterbridge", + "Status: Checking connection" : "Stádas: Ag seiceáil an nasc", + "OK: Running version: {version}" : "OK: Leagan reatha: {version}", + "Error: Server seems to be a Signaling server" : "Earráid: Is cosúil gur freastalaí Comharthaíochta é an freastalaí", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Earráid: Níl amanna córais fhreastalaí Nextcloud agus freastalaí Inneall Taifeadta as sioncronú. Cinntigh le do thoil go bhfuil an dá fhreastalaí ceangailte le freastalaí ama nó sioncrónaigh a gcuid ama de láimh.", + "Recording backend URL" : "URL inneall taifeadta", + "Validate SSL certificate" : "Bailíochtaigh teastas SSL", + "Delete this server" : "Scrios an freastalaí seo", + "Test this server" : "Tástáil an freastalaí seo", + "Disabled for all calls" : "Díchumasaithe do gach glaoch", + "Enabled for all calls" : "Cumasaithe do gach glao", + "Configurable on conversation level by moderators" : "Cumraithe ag modhnóirí ar leibhéal an chomhrá", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Ní cheadóidh na socruithe PHP \"upload_max_filesize\" nó \"post_max_size\" ach comhaid suas go dtí {maxUpload} a uaslódáil.", + "Recording backend settings saved" : "Sábháladh socruithe inneall taifeadta", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Beidh cead ag modhnóirí toiliú a chumasú ar leibhéal an chomhrá. Beidh toiliú le taifeadadh ag teastáil ó gach rannpháirtí sula nglacann siad le gach glao sa chomhrá seo.", + "The consent to be recorded will be required for each participant before joining every call." : "Beidh toiliú le taifeadadh ag teastáil ó gach rannpháirtí sula nglacfaidh sé páirt i ngach glao.", + "The consent to be recorded is not required." : "Níl an toiliú le taifeadadh riachtanach.", + "Recording backend configuration is only possible with a High-performance backend." : "Ní féidir cumraíocht inneall a thaifeadadh ach le hInneall Ardfheidhmíochta.", + "Add a new recording backend server" : "Cuir freastalaí inneall taifeadta nua leis", + "Shared secret" : "Rún comhroinnte", + "Recording consent" : "Toiliú taifeadta", + "Recording transcription" : "Trascríobh taifeadta", + "Automatically transcribe call recordings with a transcription provider" : "Trascríobh taifeadtaí glaonna go huathoibríoch le soláthraí trascríobh", + "Automatically summarize call recordings with transcription and summary providers" : "Déan achoimre uathoibríoch ar thaifeadtaí glaonna le soláthraithe trascríobh agus achoimre", + "SIP configuration saved!" : "Cumraíocht SIP sábháilte!", + "SIP configuration is only possible with a High-performance backend." : "Ní féidir cumraíocht SIP a dhéanamh ach amháin le hInneall Ardfheidhmíochta.", + "Enable SIP Dial-out option" : "Cumasaigh an rogha Dial Amach SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Ní mór an freastalaí comharthaíochta a nuashonrú go dtí an ghné Dial Amach SIP a fhaigheann tacaíocht.", + "Do not show SIP Dial-out caller number" : "Ná taispeáin uimhir ghlaoiteora SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Ba chóir uimhir gan ainm a bheith le feiceáil mar \"anaithnid\" nó \"uimhir faoi cheilt\" chun glaoch ar an bhfaighteoir", + "Dial-out number" : "Uimhir dhiailiú amach", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Uimhir fhormáidithe E164 a úsáidtear mar uimhir ghlaoiteora taca le haghaidh glaonna amach", + "Dial-out prefix" : "Réimír dial-amach", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Réimír chuig uimhir úsáideora cumraithe le haghaidh glaonna amach (is é `+` an réamhshocrú)", + "Restrict SIP configuration" : "Srian a chur ar chumraíocht SIP", + "Enable SIP configuration" : "Cumasaigh cumraíocht SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Ní féidir ach le húsáideoirí na ngrúpaí seo a leanas SIP a chumasú i gcomhráite a mhodhnóidh siad", + "Phone number (Country)" : "Uimhir ghutháin (Tír)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Seoltar an fhaisnéis seo i ríomhphoist cuireadh agus taispeántar í sa bharra taoibh chuig gach rannpháirtí.", + "Nextcloud base URL" : "URL bonn Nextcloud", + "Talk Backend URL" : "URL Cúil an Chórais Comhrá", + "WebSocket URL" : "URL WebSocket", + "Available features" : "Gnéithe atá ar fáil", + "Error: Websocket connection failed" : "Earráid: Theip ar nasc Websocket", + "Error code" : "Cód earráide", + "Error message" : "Teachtaireacht earráide", + "Error: Websocket connection failed. Check browser console" : "Earráid: Theip ar cheangal Websocket. Seiceáil consól brabhsálaí", + "High-performance backend URL" : "URL inneall ardfheidhmíochta", + "Missing High-performance backend warning hidden" : "Rabhadh inneall ardfheidhmíochta ar iarraidh i bhfolach", + "High-performance backend settings saved" : "Sábháladh socruithe inneall ardfheidhmíochta", + "Nextcloud Talk setup not complete" : "Níl socrú Nextcloud Talk críochnaithe", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tabhair faoi deara le do thoil, i nglaonna le níos mó ná 2 rannpháirtí gan an t-Inneall Ardfheidhmíochta, is dóichí go mbeidh fadhbanna nascachta ag rannpháirtithe agus go mbeidh siad ina gcúis le hualach ard ar ghléasanna rannpháirteacha.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Suiteáil an t-Inneall Ardfheidhmíochta chun a chinntiú go n-oibríonn glaonna le rannpháirtithe iolracha gan uaim.", + "Nextcloud portal" : "Tairseach Nextcloud", + "Quick installation guide" : "Treoir suiteála tapa", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Tá an t-inneall Ardfheidhmíochta ag teastáil le haghaidh glaonna agus comhráite le rannpháirtithe iolracha. Gan an t-innill, caithfidh na rannpháirtithe go léir a bhfíseán féin a uaslódáil ina n-aonar le haghaidh gach rannpháirtí eile, rud is dócha a bheidh ina chúis le saincheisteanna nascachta agus ualach ard ar ghléasanna rannpháirteacha.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Moltar go mór taisce dáilte a chur ar bun agus Nextcloud Talk ag baint úsáide as inneall ardfheidhmíochta.", + "Add High-performance backend server" : "Cuir freastalaí inneall Ardfheidhmíochta leis", + "Warn about connectivity issues in calls with more than 2 participants" : "Tabhair rabhadh faoi cheisteanna nascachta i nglaonna le níos mó ná 2 rannpháirtí", + "STUN server URL" : "URL an fhreastalaí STUN", + "The server address is invalid" : "Tá seoladh an fhreastalaí neamhbhailí", + "STUN settings saved" : "Socruithe STUN sábháilte", + "STUN servers" : "Freastalaithe STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Úsáidtear freastalaí STUN chun seoladh IP poiblí na rannpháirtithe taobh thiar de ródaire a chinneadh.", + "Add a new STUN server" : "Cuir freastalaí STUN nua leis", + "{schema} scheme must be used with a domain" : "Ní mór scéim {schema} a úsáid le fearann", + "{option1} and {option2}" : "{option1} agus {option2}", + "{option} only" : "{option} amháin", + "OK: Successful ICE candidates returned by the TURN server" : "Ceart go leor: Chuir an freastalaí TURN na hiarrthóirí rathúla ICE ar ais", + "Error: No working ICE candidates returned by the TURN server" : "Earráid: Níor chuir an freastalaí TURN iarrthóirí ICE ar ais", + "Testing whether the TURN server returns ICE candidates" : "Ag tástáil cibé an dtugann an freastalaí TURN iarrthóirí ICE ar ais", + "TURN server schemes" : "TURN scéimeanna freastalaí", + "TURN server URL" : "TURN URL an fhreastalaí", + "TURN server secret" : "TURN rúnda freastalaí", + "TURN server protocols" : "TURN prótacail freastalaí", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Úsáidtear freastalaí TURN chun seachfhreastalaí a dhéanamh ar an trácht ó rannpháirtithe taobh thiar de bhalla dóiteáin. Murar féidir le rannpháirtithe aonair nascadh le daoine eile is dócha go mbeidh freastalaí TURN ag teastáil. Féach {linkstart}an doiciméadú seo{linkend} le haghaidh treoracha cumraíochta.", + "TURN settings saved" : "TURN socruithe sábháilte", + "TURN servers" : "TURN freastalaithe", + "Add a new TURN server" : "Cuir freastalaí TURN nua leis", + "Failed" : "Theip", + "OK" : "Ceart go leor", + "Checking …" : "Ag seiceáil…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Theip: tá WebAssembly díchumasaithe nó ní thacaítear leis sa bhrabhsálaí seo. Cumasaigh WebAssembly le do thoil nó bain úsáid as brabhsálaí a thacaíonn leis chun an tseiceáil a dhéanamh.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Theip: níor chuir an freastalaí gréasáin comhaid \".wasm\" agus \".tflite\" ar ais i gceart. Seiceáil le do thoil an rannán \"Riachtanais chórais\" i gcáipéisíocht Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: chuir an freastalaí gréasáin comhaid \".wasm\" agus \".tflite\" ar ais i gceart.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Dealraíonn sé nach bhfuil cumraíocht PHP agus Apache comhoiriúnach. Tabhair faoi deara nach féidir PHP a úsáid ach leis an modúl MPM_PREFORK agus ní féidir PHP-FPM a úsáid ach leis an modúl MPM_EVENT.", + "Web server setup checks" : "Seiceálacha socruithe freastalaí gréasáin", + "Files required for virtual background can be loaded" : "Is féidir comhaid a theastaíonn le haghaidh cúlra fíorúil a luchtú", + "Federated user" : "Úsáideoir cónaidhme", + "Assign participants to rooms" : "Rannpháirtithe a shannadh do seomraí", + "Configure breakout rooms" : "Cumraigh seomraí ar leithligh", + "Number of breakout rooms" : "Líon na seomraí ar leithligh", + "You can create from 1 to 20 breakout rooms." : "Is féidir leat idir 1 agus 20 seomra ar leithligh a chruthú.", + "Assignment method" : "Modh sannta", + "Automatically assign participants" : "Rannpháirtithe a shannadh go huathoibríoch", + "Manually assign participants" : "Rannpháirtithe a shannadh de láimh", + "Allow participants to choose" : "Lig do rannpháirtithe rogha a dhéanamh", + "Create rooms" : "Cruthaigh seomraí", + "Confirm" : "Deimhnigh", + "Create breakout rooms" : "Cruthaigh seomraí ar leithligh", + "Reset" : "Athshocraigh", + "Delete breakout rooms" : "Scrios seomraí ar leithligh", + "Room {roomNumber}" : "Seomra {roomNumber}", + "Current breakout rooms and settings will be lost" : "Caillfear seomraí ar leithligh agus socruithe reatha", + "Cancel" : "Cealaigh", + "Unassigned participants" : "Rannpháirtithe neamhshannta", + "Back" : "Ar ais", + "Assign" : "Sann", + "Add participant \"{user}\"" : "Cuir rannpháirtí \"{user}\" leis", + "Now" : "Anois", + "Invalid calendar selected" : "Féilire neamhbhailí roghnaithe", + "Invalid start time selected" : "Am tosaithe neamhbhailí roghnaithe", + "Invalid end time selected" : "Am críochnaithe neamhbhailí roghnaithe", + "Unknown error occurred" : "Tharla earráid anaithnid", + "Sending no invitations" : "Gan aon chuirí a sheoladh", + "{participant0} will receive an invitation" : "{participant0} gheobhaidh sé cuireadh", + "{participant0} and {participant1} will receive invitations" : "Gheobhaidh{participant0} agus {participant1} cuirí", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["Gheobhaidh{participant0}, {participant1} agus %n eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí","Gheobhaidh{participant0}, {participant1} agus %n duine eile cuirí"], + "Invite {user}" : "Cuireadh {user}", + "Invite all users and emails in this conversation" : "Tabhair cuireadh do gach úsáideoir agus ríomhphost sa chomhrá seo", + "Meeting created" : "Cruthaíodh cruinniú", + "Upcoming meetings" : "Cruinnithe le teacht", + "Loading …" : "Á lódáil…", + "No upcoming meetings" : "Gan aon chruinnithe atá le teacht", + "Schedule a meeting" : "Cruinniú a sceidealú", + "Meeting title" : "Teideal an chruinnithe", + "From" : "Ó", + "To" : "Chun", + "Calendar" : "Féilire", + "Attendees" : "Lucht freastail", + "No other participants to send invitations to." : "Níl aon rannpháirtí eile chun cuirí a sheoladh chucu.", + "Add attendees" : "Cuir lucht freastail leis", + "Save" : "Sábháil", + "Search participants" : "Cuardaigh rannpháirtithe", + "No results" : "Gan torthaí", + "Done" : "Déanta", + "Disable live transcription" : "Díchumasaigh trascríobh beo", + "Enable live transcription (generated by AI)" : "Cumasaigh trascríobh beo (ginte ag AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Cumasaigh trascríobh beo (Níl an aip trascríobh beo suiteáilte)", + "Disable live translation" : "Díchumasaigh aistriúchán beo", + "Enable live translation (generated by AI)" : "Cumasaigh aistriúchán beo (ginte ag AI)", + "Original language" : "Teanga bhunaidh", + "Live translations app is not installed" : "Níl an aip aistriúcháin bheo suiteáilte", + "Original language: {languageName}" : "Teanga bhunaidh: {languageName}", + "Translated language" : "Teanga aistrithe", + "Translated language: {languageName}" : "Teanga aistrithe: {languageName}", + "Raise hand" : "Ardaigh lámh", + "Raise hand (R)" : "Ardaigh lámh (R)", + "Lower hand" : "Lámh íochtair", + "Lower hand (R)" : "Lámh íochtair (R)", + "Exit full screen (F)" : "Scoir scáileán iomlán (F)", + "Full screen (F)" : "Scáileán iomlán (F)", + "Speaker view" : "Amharc cainteoir", + "Grid view" : "Radharc greille", + "Error when trying to load the available live transcription languages" : "Earráid agus iarracht á déanamh na teangacha trascríobh beo atá ar fáil a luchtú", + "Failed to enable live transcription" : "Theip ar thrascríobh beo a chumasú", + "Failed to enable live translations" : "Theip ar aistriúcháin bheo a chumasú", + "Failed to disable live translations" : "Theip ar aistriúcháin bheo a dhíchumasú", + "Recording consent is required" : "Tá toiliú taifeadta ag teastáil", + "This conversation is read-only" : "Tá an comhrá seo inléite amháin", + "Conversation not found or not joined" : "Níor aimsíodh an comhrá nó níor cuireadh isteach ann é", + "Lobby is still active and you're not a moderator" : "Tá an stocaireacht fós gníomhach agus ní modhnóir tú", + "Connection failed" : "Theip ar an gceangal", + "Reload" : "Athlódáil", + "{nickName} raised their hand." : "D'ardaigh {nickName} a lámh.", + "A participant raised their hand." : "D'ardaigh rannpháirtí a lámh.", + "Collapse stripe" : "Laghdaigh stríoc", + "Expand stripe" : "Leathnaigh stríoc", + "Previous page of videos" : "An leathanach físeáin roimhe seo", + "Next page of videos" : "An chéad leathanach eile d'fhíseáin", + "Connecting …" : "Ag nascadh…", + "Calling …" : "Ag glaoch…", + "Waiting for {user} to join the call" : "Ag fanacht le {user} páirt a ghlacadh sa ghlao", + "Waiting for others to join the call …" : "Ag fanacht le daoine eile a bheith páirteach sa ghlao…", + "You can invite others in the participant tab of the sidebar" : "Is féidir leat cuireadh a thabhairt do dhaoine eile sa chluaisín rannpháirtí ar an mbarra taoibh", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Is féidir leat cuireadh a thabhairt do dhaoine eile sa chluaisín rannpháirtí ar an mbarra taoibh nó an nasc seo a roinnt chun cuireadh a thabhairt do dhaoine eile!", + "Share this link to invite others!" : "Roinn an nasc seo le cuireadh a thabhairt do dhaoine eile!", + "Copy link" : "Cóipeáil an nasc", + "You are not allowed to enable audio" : "Níl cead agat fuaim a chumasú", + "No audio. Click to select device" : "Gan fuaim. Cliceáil chun gléas a roghnú", + "Mute audio" : "Balbhaigh fuaime", + "Mute audio (M)" : "Balbhaigh an fhuaim (M)", + "Unmute audio" : "Díbhalbhaigh an fhuaim", + "Unmute audio (M)" : "Díbhalbhaigh an fhuaim (M)", + "None" : "aon cheann", + "Select a microphone" : "Roghnaigh micreafón", + "Select a speaker" : "Roghnaigh cainteoir", + "Microphone settings" : "Socruithe micreafóin", + "Check devices" : "Seiceáil gléasanna", + "Access to camera was denied" : "Diúltaíodh rochtain ar cheamara", + "Error while accessing camera: It is likely in use by another program" : "Earráid agus tú ag rochtain ceamara: Is dócha go mbeidh sé in úsáid ag ríomhchlár eile", + "Error while accessing camera" : "Earráid agus an ceamara á rochtain", + "You have been muted by a moderator" : "Tá modhnóir balbhaithe thú", + "Hide presenter video" : "Folaigh físeán an láithreoir", + "You are not allowed to enable video" : "Níl cead agat físeáin a chumasú", + "No video. Click to select device" : "Gan físeán. Cliceáil chun gléas a roghnú", + "Disable video" : "Físeán a dhíchumasú", + "Disable video (V)" : "Díchumasaigh an físeán (V)", + "Enable video" : "Cumasaigh físeán", + "Enable video (V)" : "Cumasaigh físeán (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán - Cuirfear isteach go hachomair ar do nasc agus an físeán á chumasú den chéad uair", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán (V) - Cuirfear isteach go hachomair ar do nasc agus an físeán á chumasú den chéad uair", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Cumasaigh físeán. Cuirfear isteach ar do nasc go hachomair agus an físeán á chumasú den chéad uair", + "Select a video device" : "Roghnaigh gléas físe", + "Show presenter" : "Taispeáin láithreoir", + "You" : "tu", + "Mute" : "Balbhaigh", + "Muted" : "Balbhaithe", + "Show screen" : "Taispeáin scáileán", + "Stop following" : "Stop ag leanúint", + "Connection could not be established …" : "Níorbh fhéidir ceangal a bhunú…", + "Connection was lost and could not be re-established …" : "Cailleadh an nasc agus níorbh fhéidir é a athbhunú …", + "Connection could not be established. Trying again …" : "Níorbh fhéidir ceangal a bhunú. Ag iarraidh arís…", + "Connection lost. Trying to reconnect …" : "Ceangal caillte. Ag iarraidh athcheangail…", + "Connection problems …" : "Fadhbanna ceangail…", + "Collapse" : "Laghdaigh", + "Expand" : "Leathnaigh", + "You need to be logged in to upload files" : "Ní mór duit a bheith logáilte isteach chun comhaid a uaslódáil", + "Drop your files to upload" : "Scaoil do chuid comhad le huaslódáil", + "Conversation messages" : "Teachtaireachtaí comhrá", + "Scroll to bottom" : "Scrollaigh go bun", + "Post message" : "Teachtaireacht a phostáil", + "Federated conversation" : "Comhrá cónaidhme", + "Public conversation" : "Comhrá poiblí", + "Favorite" : "is fearr leat", + "Banned users" : "Úsáideoirí toirmiscthe", + "Manage the list of banned users in this conversation." : "Bainistigh liosta na n-úsáideoirí toirmiscthe sa chomhrá seo.", + "Manage bans" : "Bainistigh toirmisc", + "No banned users" : "Uimh úsáideoirí toirmeasc", + "Banned by:" : "Toirmiscthe ag:", + "Date:" : "Dáta:", + "Note:" : "Nóta:", + "Hide details" : "Folaigh sonraí", + "Show details" : "Sonraí a thaispeáint", + "Unban" : "Dícosc", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Is féidir leat an teideal agus an cur síos a athrú i {linkstart}Féilire ↗{linkend}.", + "Error while updating conversation name" : "Earráid agus ainm an chomhrá á nuashonrú", + "Error while updating conversation description" : "Earráid agus cur síos an chomhrá á nuashonrú", + "Enter a name for this conversation" : "Cuir isteach ainm don chomhrá seo", + "Edit conversation name" : "Cuir ainm an chomhrá in eagar", + "Edit conversation description" : "Cuir cur síos ar an gcomhrá in eagar", + "Enter a description for this conversation" : "Cuir isteach cur síos ar an gcomhrá seo", + "Picture" : "Pictiúr", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Is féidir na róbónna seo a leanas a chumasú sa chomhrá seo. Déan teagmháil le do riarachán chun tuilleadh róbónna a shuiteáil ar an bhfreastalaí seo.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Níl aon róbónna suiteáilte ar an bhfreastalaí seo. Déan teagmháil le do riarachán chun róbónna a shuiteáil ar an bhfreastalaí seo.", + "Disable" : "Díchumasaigh", + "Enable" : "Cumasaigh", + "The bot is not available anymore" : "Níl an bot ar fáil a thuilleadh", + "Breakout rooms" : "Seomraí ar leithligh", + "Manage breakout rooms" : "Bainistigh seomraí ar leithligh", + "Set up breakout rooms for this conversation" : "Socraigh seomraí ar leithligh don chomhrá seo", + "Please select a valid PNG or JPG file" : "Roghnaigh comhad bailí PNG nó JPG le do thoil", + "Choose your conversation picture" : "Roghnaigh do phictiúr comhrá", + "Choose" : "Roghnaigh", + "Error setting conversation picture" : "Earráid agus pictiúr an chomhrá á shocrú", + "Could not set the conversation picture: {error}" : "Níorbh fhéidir pictiúr an chomhrá a shocrú: {error}", + "Error cropping conversation picture" : "Earráid agus pictiúr an chomhrá á bhearradh", + "Error removing conversation picture" : "Earráid agus an pictiúr comhrá á bhaint", + "Set emoji as conversation picture" : "Socraigh emoji mar phictiúr comhrá", + "Set background color for conversation picture" : "Socraigh dath cúlra le haghaidh pictiúr comhrá", + "Upload conversation picture" : "Íosluchtaigh pictiúr comhráite", + "Choose conversation picture from files" : "Roghnaigh pictiúr comhrá ó chomhaid", + "Remove conversation picture" : "Bain pictiúr an chomhrá", + "The file must be a PNG or JPG" : "Caithfidh an comhad a bheith ina PNG nó JPG", + "Set picture" : "Socraigh pictiúr", + "Default permissions modified for {conversationName}" : "Athraíodh na ceadanna réamhshocraithe le haghaidh {conversationName}", + "Could not modify default permissions for {conversationName}" : "Níorbh fhéidir na ceadanna réamhshocraithe do {conversationName} a mhionathrú", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Cuir na ceadanna réamhshocraithe do rannpháirtithe sa chomhrá seo in eagar. Ní chuireann na socruithe seo isteach ar mhodhnóirí.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Gach uair a athraítear ceadanna sa chuid seo, caillfear ceadanna saincheaptha a tugadh do rannpháirtithe aonair roimhe seo.", + "All permissions" : "Gach cead", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Tá cead ag rannpháirtithe glao a thosú, páirt a ghlacadh i nglao, fuaim agus físeáin a chumasú, agus scáileán a roinnt.", + "Participants can use all available features." : "Is féidir le rannpháirtithe gach gné atá ar fáil a úsáid.", + "Restricted" : "Srianta", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Is féidir le rannpháirtithe páirt a ghlacadh i nglaonna, ach ní féidir leo fuaime ná físe a chumasú ná scáileán a chomhroinnt go dtí go dtugann modhnóir ceadanna de láimh dóibh.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Gheobhaidh rannpháirtithe sraith gnéithe laghdaithe go dtí go dtabharfaidh modhnóir ceadanna breise de láimh.", + "Advanced permissions" : "Ceadanna chun cinn", + "Edit permissions" : "Cuir ceadanna in eagar", + "Conversation settings" : "Socruithe comhrá", + "Basic Info" : "Eolas Bunúsach", + "Personal" : "Pearsanta", + "Moderation" : "Measarthacht", + "Setup overview" : "Forbhreathnú ar an socrú", + "Live transcription" : "Tras-scríobh beo", + "Live transcriptions app is not installed" : "Níl an aip trascríbhinní beo suiteáilte", + "Enable live transcription" : "Cumasaigh trascríobh beo", + "Breakout Rooms" : "Seomraí ar leithligh", + "Matterbridge" : "Droichead an Mhatha", + "Bots" : "Róbónna", + "Danger zone" : "Crios contúirte", + "Archive conversation" : "Comhrá cartlainne", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Tá comhráite cartlainne folaithe ón liosta comhráite de réir réamhshocraithe. Mar sin féin, beidh siad fós le feiceáil nuair a chuardaíonn tú ainm an chomhrá nó nuair a gheobhaidh tú rochtain ar liosta de chomhráite cartlainne.", + "Do you really want to leave \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat \"{displayName}\" a fhágáil?", + "You can archive this conversation instead." : "Is féidir leat an comhrá seo a chur i gcartlann ina ionad sin.", + "Leave conversation" : "Fág an comhrá", + "You need to promote a new moderator before you can leave the conversation" : "Ní mór duit modhnóir nua a chur chun cinn sula bhféadfaidh tú an comhrá a fhágáil", + "Delete conversation" : "Scrios an comhrá", + "Do you really want to delete \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat \"{displayName}\" a scriosadh?", + "Error while deleting conversation" : "Earráid agus an comhrá á scriosadh", + "Delete all chat messages" : "Scrios gach teachtaireacht comhrá", + "Do you really want to delete all messages in \"{displayName}\"?" : "An bhfuil tú cinnte gur mhaith leat gach teachtaireacht i \"{displayName}\" a scriosadh?", + "Error while clearing chat history" : "Earráid agus stair comhrá á glanadh", + "Be careful, these actions cannot be undone." : "Bí cúramach, ní féidir na gníomhartha seo a chealú.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nuair atá comhrá fágtha, chun páirt a ghlacadh arís i gcomhrá dúnta, tá cuireadh ag teastáil. Is féidir páirt a ghlacadh arís i gcomhrá oscailte am ar bith.", + "Permanently delete this conversation." : "Scrios an comhrá seo go buan.", + "Delete chat messages" : "Scrios teachtaireachtaí comhrá", + "Permanently delete all the messages in this conversation." : "Scrios go buan gach teachtaireacht sa chomhrá seo.", + "_%n hour_::_%n hours_" : ["%n uair an chloig","%n uair an chloig","%n uair an chloig","%n uair an chloig","%n uair an chloig"], + "_%n day_::_%n days_" : ["%n lá","%n laethanta","%n laethanta","%n laethanta","%n laethanta"], + "_%n week_::_%n weeks_" : ["%n seachtain","%n seachtainí","%n seachtainí","%n seachtainí","%n seachtainí"], + "Custom expiration time" : "Am éaga saincheaptha", + "Message expiration disabled" : "Díchumasaíodh dul in éag na teachtaireachta", + "Message expiration set: {duration}" : "Socraigh dul in éag na teachtaireachta: {duration}", + "Error when trying to set message expiration" : "Earráid agus iarracht á dhéanamh dul in éag na teachtaireachta a shocrú", + "Message expiration" : "Teachtaireacht in éag", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Is féidir teachtaireachtaí comhrá a bheith imithe in éag tar éis am áirithe. Nóta: Ní scriosfar comhaid a roinntear sa chomhrá don úinéir, ach ní roinnfear iad sa chomhrá a thuilleadh.", + "Set message expiration" : "Socraigh éag na teachtaireachta", + "Current message expiration" : "Tá an teachtaireacht reatha imithe in éag", + "Password copied to clipboard" : "Cóipeáladh an pasfhocal chuig an ngearrthaisce", + "Password could not be copied" : "Níorbh fhéidir an pasfhocal a chóipeáil", + "Guest access" : "Rochtain aoi", + "Breakout rooms are not allowed in public conversations." : "Ní cheadaítear seomraí ar leithligh i gcomhráite poiblí.", + "Allow guests to join this conversation via link" : "Lig d'aíonna páirt a ghlacadh sa chomhrá seo trí nasc", + "Password protection" : "Cosaint pasfhocal", + "This conversation is password-protected. Guests need password to join" : "Tá an comhrá seo cosanta ag pasfhocal. Teastaíonn pasfhocal ó aíonna le bheith páirteach", + "Password protection is needed for public conversations" : "Tá cosaint pasfhocail ag teastáil le haghaidh comhráite poiblí", + "Set a password" : "Socraigh focal faire", + "Change password" : "Athraigh do phasfhocal", + "Enter new password" : "Cuir isteach pasfhocal nua", + "Save password" : "Sábháil pasfhocal", + "Copy password" : "Cóipeáil pasfhocal", + "Guests are allowed to join this conversation via link" : "Tá cead ag aíonna páirt a ghlacadh sa chomhrá seo trí nasc", + "Guests are not allowed to join this conversation" : "Níl cead ag aíonna páirt a ghlacadh sa chomhrá seo", + "Resend invitations" : "Cuir cuirí ar ais", + "This conversation is open to both registered users and users created with the Guests app" : "Tá an comhrá seo oscailte d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Aíonna", + "This conversation is open to registered users" : "Tá an comhrá seo oscailte d'úsáideoirí cláraithe", + "This conversation is limited to the current participants" : "Tá an comhrá seo teoranta do na rannpháirtithe reatha", + "You opened the conversation to both registered users and users created with the Guests app" : "D’oscail tú an comhrá d’úsáideoirí cláraithe agus d’úsáideoirí a cruthaíodh leis an aip Aíonna", + "Error occurred when opening or limiting the conversation" : "Tharla earráid agus an comhrá á oscailt nó á theorannú", + "Open conversation to registered users, showing it in search results" : "Oscail an comhrá d'úsáideoirí cláraithe, agus é á thaispeáint i dtorthaí cuardaigh", + "Also open to users created with the Guests app" : "Ar oscailt freisin d'úsáideoirí a cruthaíodh leis an aip Aíonna", + "Open conversation" : "Oscail comhrá", + "Set language spoken in calls" : "Socraigh an teanga a labhraítear i nglaonna", + "Languages could not be loaded" : "Níorbh fhéidir teangacha a luchtú", + "Loading languages …" : "Teangacha á lódáil …", + "Invalid language" : "Teanga neamhbhailí", + "Default language (English)" : "Teanga réamhshocraithe (Béarla)", + "Default live transcription language set" : "Socrú teanga réamhshocraithe trascríobh beo", + "Live transcription language set: {languageName}" : "Tacar teanga trascríobh beo: {languageName}", + "Error when trying to set live transcription language" : "Earráid agus iarracht á déanamh teanga trascríobh beo a shocrú", + "Start time: {date}" : "Am tosaithe: {date}", + "Start time has been updated" : "Nuashonraíodh an t-am tosaithe", + "Error occurred while updating start time" : "Tharla earráid agus an t-am tosaithe á nuashonrú", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Má dhéantar an brústocaireacht a chumasú, bainfear daoine nach modhnóirí iad den ghlao leanúnach.", + "Enable lobby, restricting the conversation to moderators" : "Cumasaigh stocaireacht, ag srianadh an chomhrá do mhodhnóirí", + "Meeting start time" : "Am tosaithe cruinnithe", + "Start time (optional)" : "Am tosaithe (roghnach)", + "Import email participants" : "Iompórtáil rannpháirtithe ríomhphoist", + "You can import a list of email participants from a CSV file." : "Is féidir leat liosta rannpháirtithe ríomhphoist a allmhairiú ó chomhad CSV.", + "Poll drafts" : "Dréachtanna vótaíochta", + "Browse poll drafts" : "Brabhsáil dréachtaí vótaíochta", + "Error occurred when locking the conversation" : "Tharla earráid agus an comhrá á ghlasáil", + "Error occurred when unlocking the conversation" : "Tharla earráid agus an comhrá á dhíghlasáil", + "Lock conversation" : "Cuir glas ar an gcomhrá", + "This will also terminate the ongoing call." : "Cuirfidh sé seo deireadh leis an nglao leanúnach freisin.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Cuir glas ar an gcomhrá chun cosc ​​a chur ar aon duine teachtaireachtaí a phostáil nó glaonna a thosú", + "Edit" : "Cuir in eagar", + "More information" : "Tuilleadh eolais", + "Delete" : "Scrios", + "Add new bridged channel to current conversation" : "Cuir cainéal nua droichid leis an gcomhrá reatha", + "unknown state" : "Stát anaithnid", + "running" : "Ag rith", + "not running, check Matterbridge log" : "Nach bhfuil ag rith, seiceáil logáil Matterbridge", + "not running" : "Gan rith", + "Bridge saved" : "Droichead shábháil", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Is féidir leat cainéil ó chórais teachtaireachtaí meandracha éagsúla a dhroicheadú le Matterbridge.", + "More info on Matterbridge" : "Tuilleadh eolais ar Matterbridge", + "Messaging systems" : "Córais teachtaireachta", + "Enable bridge" : "Cumasaigh droichead", + "Show Matterbridge log" : "Taispeáin loga Matterbridge", + "Log content" : "Ábhar logála", + "Only moderators are allowed to mention @all" : "Ní cheadaítear ach do mhodhnóirí @all a lua", + "All participants are allowed to mention @all" : "Tá cead ag gach rannpháirtí @all a lua", + "Participants are now allowed to mention @all." : "Tá cead anois ag rannpháirtithe @all a lua.", + "Mentioning @all has been limited to moderators." : "Tá tagairt do @all teoranta do mhodhnóirí.", + "Allow participants to mention @all" : "Lig do rannpháirtithe @all a lua", + "Mention permissions" : "Luaigh ceadanna", + "Notifications" : "Fógraí", + "Notify about calls in this conversation" : "Cuir glaonna ar an eolas sa chomhrá seo", + "Important conversation" : "Comhrá tábhachtach", + "\"Do not disturb\" user status is ignored for important conversations" : "Déantar neamhaird ar stádas an úsáideora \"Ná cuir isteach\" i gcás comhráite tábhachtacha", + "Sensitive conversation" : "Comhrá íogair", + "Message preview will be disabled in conversation list and notifications" : "Díchumasófar réamhamharc teachtaireachta sa liosta comhráite agus sna fógraí", + "Recording consent is required for calls in this conversation" : "Tá toiliú taifeadta ag teastáil le haghaidh glaonna sa chomhrá seo", + "Recording consent is not required for calls in this conversation" : "Níl toiliú taifeadta ag teastáil le haghaidh glaonna sa chomhrá seo", + "Recording consent requirement was updated" : "Nuashonraíodh an riachtanas um thoiliú taifeadta", + "Error occurred while updating recording consent" : "Tharla earráid agus an toiliú taifeadta á nuashonrú", + "Recording Consent" : "Toiliú Taifeadta", + "Recording consent cannot be changed once a call or breakout session has started." : "Ní féidir toiliú taifeadta a athrú nuair a bheidh glao nó seisiún ar leithligh tosaithe.", + "Require recording consent before joining call in this conversation" : "Teastaíonn toiliú taifeadta sula nglacann tú páirt sa ghlao seo", + "Recording consent is required for all calls" : "Tá toiliú taifeadta ag teastáil le haghaidh gach glao", + "SIP dial-in is now possible without PIN requirement" : "Is féidir SIP a dhiailiú isteach anois gan riachtanas PIN", + "SIP dial-in is now enabled" : "Tá diail isteach SIP cumasaithe anois", + "SIP dial-in is now disabled" : "Tá an dhiailiú isteach SIP díchumasaithe anois", + "Error occurred when enabling SIP dial-in" : "Tharla earráid agus an diail-isteach SIP á chumasú", + "Error occurred when disabling SIP dial-in" : "Tharla earráid agus an dhiailiú isteach SIP á dhíchumasú", + "Phone and SIP dial-in" : "Fón agus SIP dhiailiú-i", + "Enable phone and SIP dial-in" : "Cumasaigh guthán agus SIP diailithe", + "Allow to dial-in without a PIN" : "Ceadaigh diailiú isteach gan UAP", + "Ongoing" : "Ar siúl", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n duine glactha","%n duine glactha","%n duine glactha","%n duine glactha","%n duine glactha"], + "_%n person declined_::_%n people declined_" : ["Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine","Dhiúltaigh %n duine"], + "_and %n other attachment_::_and %n other attachments_" : ["agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile","agus %n ceangaltán eile"], + "With {displayName}" : "Le {displayName}", + "In {conversation}" : "I {conversation}", + "View attachment" : "Féach ar an gceangaltán", + "Join" : "Glac páirt", + "View conversation" : "Féach ar an gcomhrá", + "View event on Calendar" : "Féach ar an imeacht ar an bhFéilire", + "Error while creating the conversation" : "Earráid agus an comhrá á chruthú", + "Hello, {displayName}" : "Haigh, {displayName}", + "Start meeting now" : "Tosaigh ag cruinniú anois", + "Give your meeting a title" : "Tabhair teideal do do chruinniú", + "Create and copy link" : "Cruthaigh agus cóipeáil nasc", + "Create a new conversation" : "Cruthaigh comhrá nua", + "Join open conversations" : "Glac páirt i gcomhráite oscailte", + "Call a phone number" : "Cuir glaoch ar uimhir theileafóin", + "Scroll backward" : "Scrollaigh siar", + "Scroll forward" : "Scrollaigh ar aghaidh", + "Schedule meetings" : "Sceideal cruinnithe", + "You don't have any upcoming meetings" : "Níl aon chruinnithe atá le teacht agat", + "Calendar events with a conversation link as the location are shown here" : "Taispeántar imeachtaí féilire le nasc comhrá mar shuíomh anseo", + "Open calendar" : "Oscail an féilire", + "Unread mentions" : "Luaite gan léamh", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Beidh teachtaireachtaí inar luadh thú le feiceáil anseo. Is féidir leat daoine a lua trí @ a chlóscríobh agus a n-ainm ina dhiaidh sin", + "Upcoming reminders" : "Meabhrúcháin atá le teacht", + "Message reminders" : "Meabhrúcháin teachtaireachtaí", + "Set a reminder on a message to be notified" : "Socraigh meabhrúchán ar theachtaireacht le fógra a fháil", + "Start a group conversation" : "Cuir tús le comhrá grúpa", + "Create conversation" : "Cruthaigh comhrá", + "Enter your name" : "Cuir isteach d'ainm", + "Submit name and join" : "Cuir isteach ainm agus páirt a ghlacadh", + "Do you already have an account?" : "An bhfuil cuntas agat cheana féin?", + "Log in" : "Logáil isteach", + "Error while verifying uploaded file" : "Earráid agus an comhad uaslódáilte á fhíorú", + "Uploaded file is verified" : "Tá an comhad uaslódáilte fíoraithe", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Is éard atá i bhformáid ábhair ná luachanna camógdheighilte (CSV):
- Tá líne ceanntásca ag teastáil agus ní mór \"ainm\",\"ríomhphost\" nó díreach \"ríomhphost\"
- Iontráil amháin in aghaidh an líne a mheaitseáil (m.sh. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "D'éirigh leis na rannpháirtithe a chur leis", + "Error while adding participants" : "Earráid agus rannpháirtithe á gcur leis", + "Import a file" : "Iompórtáil comhad", + "Browse" : "Brabhsáil", + "Verifying uploaded file …" : "Comhad uaslódáilte á fhíorú…", + "This might take a moment" : "Seans go dtógfaidh sé seo nóiméad", + "Send invitations" : "Seol cuirí", + "_%n invalid email_::_%n invalid emails_" : ["%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí","%n ríomhphost neamhbhailí"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["Tá %n ríomhphost iompórtáilte cheana nó ina dhúblach","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana","Tá %n ríomhphost iompórtáilte nó dúblach cheana"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh","Is féidir %n cuireadh a sheoladh"], + "An error occurred while calling a phone number" : "Tharla earráid agus glaoch ar uimhir theileafóin", + "Phone number could not be called: {error}" : "Níorbh fhéidir uimhir theileafóin a ghlaoch: {error}", + "Phone number could not be called" : "Níorbh fhéidir uimhir theileafóin a ghlaoch", + "Search participants or phone numbers" : "Cuardaigh rannpháirtithe nó uimhreacha gutháin", + "Creating the conversation …" : "Ag cruthú an chomhrá…", + "Mark as read" : "Marcáil mar léite", + "Mark as unread" : "Marcáil mar neamhléite", + "Remove from favorites" : "Bain ó cheanáin", + "Add to favorites" : "Cuir le ceanáin", + "Unarchive conversation" : "Comhrá gan chartlann", + "Ignore \"Do not disturb\"" : "Déan neamhaird de \"Ná cuir isteach\"", + "You need to promote a new moderator before you can leave the conversation." : "Ní mór duit modhnóir nua a chur chun cinn sula bhféadfaidh tú an comhrá a fhágáil.", + "Conversation actions" : "Gníomhartha comhrá", + "Notify about calls" : "Fógra a thabhairt faoi ghlaonna", + "Hide message text" : "Folaigh téacs an teachtaireachta", + "Pending invitations" : "Cuirí ar feitheamh", + "Join conversations from other servers" : "Glac páirt i gcomhráite ó fhreastalaithe eile", + "From {user} at {remoteServer}" : "Ó {user} ag {remoteServer}", + "Decline invitation" : "Diúltaigh cuireadh", + "Accept invitation" : "Glac le cuireadh", + "No pending invitations" : "Níl aon chuirí ar feitheamh", + "Home" : "Baile", + "Unread" : "Neamhléite", + "Mentions" : "Luann", + "Meetings" : "Cruinnithe", + "Sort conversations" : "Sórtáil comhráite", + "By recent activity" : "De réir gníomhaíochta le déanaí", + "Alphabetically" : "In ord aibítre", + "Do not group by type" : "Ná grúpáil de réir cineáil", + "Show private ones first" : "Taispeáin cinn phríobháideacha ar dtús", + "Show group ones first" : "Taispeáin cinn na ngrúpaí ar dtús", + "No followed threads" : "Gan aon snáitheanna le leanúint", + "No matches found" : "Níor aimsíodh aon mheaitseáil", + "No conversations found" : "Níor aimsíodh aon chomhrá", + "You have no archived conversations." : "Níl aon chomhráite sa chartlann agat.", + "Subscribe to an existing thread or start your own." : "Liostáil le snáithe atá ann cheana féin nó tosaigh do cheann féin.", + "You have no unread mentions." : "Níl aon tagairtí neamhléite agat.", + "You have no unread messages." : "Níl aon teachtaireachtaí neamhléite agat.", + "An error occurred while performing the search" : "Tharla earráid agus an cuardach á dhéanamh", + "Conversation list" : "Liosta comhráite", + "Filter conversations by" : "Scag comhráite de réir", + "Unread messages" : "Teachtaireachtaí gan léamh", + "Meeting conversations" : "Comhráite cruinnithe", + "Clear filters" : "Glan na scagairí", + "New personal note" : "Nóta pearsanta nua", + "SIP backend is not installed" : "Níl an cúltaca SIP suiteáilte", + "Back to conversations" : "Ar ais chuig comhráite", + "Archived conversations" : "Comhráite cartlainne", + "Threads" : "Snáitheanna", + "Clear filter" : "Glan an scagaire", + "Show more threads" : "Taispeáin níos mó snáitheanna", + "App settings" : "Socruithe aip", + "Users" : "Úsáideoirí", + "Groups" : "Grúpaí", + "Teams" : "Foirne", + "Federated users" : "Úsáideoirí Cónaidhme", + "New private conversation" : "Comhrá príobháideach nua", + "Other sources" : "Foinsí eile", + "Open conversations" : "Oscail comhráite", + "No search results" : "Gan torthaí cuardaigh", + "Users, groups and teams" : "Úsáideoirí, grúpaí agus foirne", + "Users and groups" : "Úsáideoirí agus grúpaí", + "Users and teams" : "Úsáideoirí agus foirne", + "Groups and teams" : "Grúpaí agus foirne", + "New group conversation" : "Comhrá grúpa nua", + "The meeting will start soon" : "Cuirfear tús leis an gcruinniú go luath", + "This meeting is scheduled for {startTime}" : "Tá an cruinniú seo sceidealaithe le haghaidh {startTime}", + "You are currently waiting in the lobby" : "Tá tú ag fanacht sa stocaireacht faoi láthair", + "Enable noise suppression" : "Cumasaigh cosc ​​torainn", + "Reduce background noises for better voice quality" : "Laghdaigh torann cúlra le haghaidh caighdeán gutha níos fearr", + "Enable echo cancellation" : "Cumasaigh cealú macalla", + "Minimize echo effect from own surrounding" : "Íoslaghdaigh éifeacht macalla ón timpeallacht féin", + "Enable auto gain control" : "Cumasaigh rialú uathoibríoch gnóthachain", + "Dynamically adjust microphone volume for consistent level" : "Coigeartaigh toirt an mhicreafóin go dinimiciúil le haghaidh leibhéal comhsheasmhach", + "Select microphone" : "Roghnaigh micreafón", + "No microphone available" : "Níl micreafón ar fáil", + "Select speaker" : "Roghnaigh cainteoir", + "No speaker available" : "Níl aon chainteoir ar fáil", + "Select camera" : "Roghnaigh ceamara", + "No camera available" : "Níl ceamara ar fáil", + "Select a device" : "Roghnaigh gléas", + "Playing …" : "Ag imirt…", + "Test speakers" : "Cainteoirí tástála", + "Test" : "Scrúdú", + "Devices" : "Gléasanna", + "Backgrounds" : "Cúlra", + "No audio" : "Gan fuaim", + "No camera" : "Gan ceamara", + "Display video as you will see it (mirrored)" : "Taispeáin físeán mar a fheicfidh tú é (scáthánaithe)", + "Display video as others will see it" : "Taispeáin físeán mar a fheicfidh daoine eile é", + "Calls are not supported in your browser" : "Ní thacaítear le glaonna i do bhrabhsálaí", + "Access to microphone is only possible with HTTPS" : "Ní féidir rochtain ar mhicreafón ach amháin le HTTPS", + "Access to microphone was denied" : "Diúltaíodh rochtain ar mhicreafón", + "Error while accessing microphone" : "Earráid agus an micreafón á rochtain", + "Access to camera is only possible with HTTPS" : "Ní féidir rochtain ar cheamara ach amháin le HTTPS", + "The call is being recorded." : "Tá an glao á thaifeadadh.", + "The call might be recorded." : "Seans go ndéanfar an glao a thaifeadadh.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Seans go gcuimseodh an taifeadadh do ghuth, físeáin ó cheamara, agus comhroinnt scáileáin. Tá do thoiliú ag teastáil sula nglacann tú páirt sa ghlao.", + "Give consent to the recording of this call" : "Toiliú le taifeadadh an ghlao seo", + "Show more info" : "Taispeáin tuilleadh eolais", + "Audio is not available" : "Níl fuaim ar fáil", + "Video is not available" : "Níl físeán ar fáil", + "Start recording immediately with the call" : "Tosaigh ag taifeadadh láithreach leis an nglao", + "Recording backend is not installed" : "Níl an chúltaca taifeadta suiteáilte", + "Notify all participants about this call" : "Cuir na rannpháirtithe uile ar an eolas faoin nglao seo", + "Apply settings" : "Cuir socruithe i bhfeidhm", + "Select virtual office background" : "Roghnaigh cúlra oifige fíorúil", + "Select virtual home background" : "Roghnaigh cúlra baile fíorúil", + "Select virtual abstract background" : "Roghnaigh cúlra teibí fíorúil", + "Select virtual beach background" : "Roghnaigh cúlra trá fíorúil", + "Select virtual park background" : "Roghnaigh cúlra páirce fíorúil", + "Select virtual theater background" : "Roghnaigh cúlra amharclainne fíorúil", + "Select virtual library background" : "Roghnaigh cúlra leabharlainne fíorúil", + "Select virtual space station background" : "Roghnaigh cúlra stáisiún spáis fíorúil", + "Error while uploading the file" : "Earráid agus an comhad á uaslódáil", + "Select a file" : "Roghnaigh comhad", + "Invalid path selected" : "Conair neamhbhailí roghnaithe", + "Select virtual background from file {fileName}" : "Roghnaigh cúlra fíorúil ó chomhad {fileName}", + "Blur" : "Doiléirigh", + "Upload" : "Uaslódáil", + "Files" : "Comhaid", + "(editing)" : "(eagarthóireacht)", + "(edited)" : "(in eagar)", + "The message has expired or has been deleted" : "Tá an teachtaireacht imithe in éag nó scriosta", + "Cancel quote" : "Cealaigh an luachan", + "24 hours" : "24 huaire", + "7 days" : "7 lá", + "30 days" : "30 lá", + "Until unpin" : "Go dtí go ndíphionálfar", + "Clear reminder – {timeLocale}" : "Glan meabhrúchán - {timeLocale}", + "Edited by {actor}" : "Arna chur in eagar ag {actor}", + "Pinned by you" : "Bioránta agatsa", + "Pinned by {actor}" : "Bioránta ag {actor}", + "Until {absoluteDate}" : "Go dtí {absoluteDate}", + "Message text copied to clipboard" : "Cóipeáladh téacs na teachtaireachta chuig an ngearrthaisce", + "Message text could not be copied" : "Níorbh fhéidir téacs na teachtaireachta a chóipeáil", + "Message forwarded to \"Note to self\"" : "Cuireadh an teachtaireacht ar aghaidh chuig \"Nóta duit féin\"", + "Error while forwarding message to \"Note to self\"" : "Earráid agus teachtaireacht á cur ar aghaidh chuig \"Nóta duit féin\"", + "A reminder was successfully removed" : "Baineadh meabhrúchán go rathúil", + "Error occurred when removing a reminder" : "Tharla earráid agus meabhrúchán á bhaint", + "A reminder was successfully set at {datetime}" : "Socraíodh meabhrúchán ag {datetime}", + "Error occurred when creating a reminder" : "Tharla earráid agus meabhrúchán á chruthú", + "Add a reaction to this message" : "Cuir imoibriú leis an teachtaireacht seo", + "Reply" : "Freagra", + "More actions" : "Tuilleadh gníomhartha", + "Set reminder" : "Socraigh meabhrúchán", + "Pin message" : "Teachtaireacht bioráin", + "Unpin message" : "Bain teachtaireacht den bhiorán ", + "Reply privately" : "Freagair go príobháideach", + "Edit message" : "Cuir teachtaireacht in eagar", + "Copy message" : "Cóipeáil teachtaireacht", + "Copy message link" : "Cóipeáil nasc na teachtaireachta", + "Go to file" : "Téigh go dtí an comhad", + "Download file" : "Íoslódáil an comhad", + "Go to thread" : "Téigh go dtí an snáithe", + "Edit thread details" : "Cuir sonraí an snáithe in eagar", + "Forward message" : "Teachtaireacht ar aghaidh", + "Translate" : "Aistrigh", + "Set custom reminder" : "Socraigh meabhrúchán saincheaptha", + "Keep pinned for" : "Coinnigh bioránta le haghaidh", + "Set custom period" : "Socraigh tréimhse saincheaptha", + "Close reactions menu" : "Dún an roghchlár imoibrithe", + "React with {emoji}" : "Freagair le {emoji}", + "React with another emoji" : "Freagair le emoji eile", + "Choose a conversation to forward the selected message." : "Roghnaigh comhrá chun an teachtaireacht roghnaithe a chur ar aghaidh.", + "Error while forwarding message" : "Earráid agus an teachtaireacht á cur ar aghaidh", + "The message has been forwarded to {selectedConversationName}" : "Cuireadh an teachtaireacht ar aghaidh chuig {selectedConversationName}", + "Dismiss" : "Díbhe", + "Go to conversation" : "Téigh chuig comhrá", + "Detect language" : "Braith teanga", + "The message could not be translated" : "Níorbh fhéidir an teachtaireacht a aistriú", + "Translation copied to clipboard" : "Cóipeáladh an t-aistriúchán chuig an ngearrthaisce", + "Translation could not be copied" : "Níorbh fhéidir an t-aistriúchán a chóipeáil", + "Translate message" : "Aistrigh teachtaireacht", + "Source language to translate from" : "Teanga foinse le haistriú uaidh", + "Translate from" : "Aistrigh ó", + "Target language to translate into" : "Sprioctheanga le haistriú go", + "Translate to" : "Aistrigh go", + "Translating" : "Ag aistriú", + "This translation is AI generated and may contain mistakes." : "Is aistriúchán ginte ag hintleacht shaorga é seo agus d’fhéadfadh botúin a bheith ann.", + "Copy translated text" : "Cóipeáil téacs aistrithe", + "Error when scheduling the message" : "Earráid agus an teachtaireacht á sceidealú", + "Reschedule" : "Athsceidealú", + "Send now" : "Seol anois", + "Choose a time" : "Roghnaigh am", + "Send at custom time" : "Seol ag am saincheaptha", + "Will be sent without notification" : "Seolfar gan fógra", + "Message read by everyone who shares their reading status" : "Teachtaireacht léite ag gach duine a roinneann a stádas léitheoireachta", + "Message sent" : "Teachtaireacht seolta", + "Sent without notification" : "Seolta gan fógra", + "Deleting message" : "Teachtaireacht á scriosadh", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "D'éirigh leis an teachtaireacht a scriosadh, ach tá bot nó Matterbridge cumraithe agus seans go mbeidh an teachtaireacht scaipthe cheana féin ar sheirbhísí eile", + "Message deleted successfully" : "D'éirigh leis an teachtaireacht a scriosadh", + "Message could not be deleted because it is too old" : "Níorbh fhéidir an teachtaireacht a scriosadh toisc go bhfuil sé ró-shean", + "Only normal chat messages can be deleted" : "Ní féidir ach gnáth-theachtaireachtaí comhrá a scriosadh", + "An error occurred while deleting the message" : "Tharla earráid agus an teachtaireacht á scriosadh", + "Pinned" : "Bioránta", + "Your browser does not support playing audio files" : "Ní thacaíonn do bhrabhsálaí le comhaid fuaime a sheinm", + "Contact" : "Teagmháil", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Cárta Deic", + "Remove {fileName}" : "Bain {fileName}", + "Open this location in OpenStreetMap" : "Oscail an suíomh seo in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n freagra","%n freagraí","%n freagraí","%n freagraí","%n freagraí"], + "Sending message" : "Teachtaireacht á seoladh", + "Failed to send the message. Click to try again" : "Theip ar an teachtaireacht a sheoladh. Cliceáil chun triail eile a bhaint as", + "Not enough free space to upload file" : "Níl go leor spás saor chun an comhad a uaslódáil", + "You cannot send messages to this conversation at the moment" : "Ní féidir leat teachtaireachtaí a sheoladh chuig an gcomhrá seo faoi láthair", + "Could not update the message" : "Níorbh fhéidir an teachtaireacht a nuashonrú", + "Reply to thread \"{threadTitle}\"" : "Freagra ar an snáithe \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Vótáil tú • %n vóta","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí","Vótáil tú • %n vótaí"], + "You voted" : "Vótáil tú", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Cliceáil chun vótáil • %n vóta","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí","Cliceáil chun vótáil • %n vótaí"], + "Click to vote" : "Cliceáil chun vótáil", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha","Dréacht vótaíochta • %n rogha"], + "_%n vote_::_%n votes_" : ["%n vóta","%n vótaí","%n vótaí","%n vótaí","%n vótaí"], + "Edit poll draft" : "Cuir dréacht vótaíochta in eagar", + "Delete poll draft" : "Scrios an dréacht vótaíochta", + "Open poll" : "Vótaíocht oscailte", + "Closed poll" : "Vótaíocht dúnta", + "See results" : "Féach torthaí", + "Reactions" : "Imoibrithe", + "No permission to post reactions in this conversation" : "Níl cead frithghníomhartha a phostáil sa chomhrá seo", + "and {participant}" : "agus {participant}", + "_and %n other participant_::_and %n other participants_" : ["agus %n rannpháirtí eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile","agus %n rannpháirtithe eile"], + "Show all reactions" : "Taispeáin gach imoibriú", + "Add more reactions" : "Cuir tuilleadh imoibrithe leis", + "Show or collapse system messages" : "Taispeáin nó laghdaigh teachtaireachtaí córais", + "No messages" : "Gan teachtaireachtaí", + "All messages have expired or have been deleted." : "Tá gach teachtaireacht imithe in éag nó scriosta.", + "Generate summary with AI" : "Achoimre a ghiniúint le hintleacht shaorga", + "{author} (pinned by you)" : "{author} (bioránta agatsa)", + "{author} (pinned by {actor})" : "{author} (bioránta ag {actor})", + "Unpin" : "Díbhioráil", + "Cancel search" : "Cealaigh an cuardach", + "Add a phone number" : "Cuir uimhir theileafóin leis", + "Error: A password is required to create the conversation." : "Earráid: Tá pasfhocal ag teastáil chun an comhrá a chruthú.", + "All set, the conversation \"{conversationName}\" was created." : "Gach socraithe, cruthaíodh an comhrá \"{conversationName}\".", + "Create a new group conversation" : "Cruthaigh comhrá grúpa nua", + "Add participants" : "Cuir rannpháirtithe leis", + "Maximum length exceeded ({maxlength} characters)" : "Sáraíodh an t-uasfhad ({maxlength} carachtar)", + "Conversation type" : "Cineál comhrá", + "Conversation visibility" : "Infheictheacht an chomhrá", + "Allow guests to join via link" : "Lig do aíonna páirt a ghlacadh tríd an nasc", + "Enter password" : "Cuir isteach pasfhocal", + "This conversation has been locked" : "Tá an comhrá seo glasáilte", + "No permission to post messages in this conversation" : "Níl cead teachtaireachtaí a phostáil sa chomhrá seo", + "Joining conversation …" : "Ag glacadh páirte sa chomhrá…", + "Write a message without notification" : "Scríobh teachtaireacht gan fógra", + "Create a thread silently" : "Cruthaigh snáithe go ciúin", + "Create a thread" : "Cruthaigh snáithe", + "Send message silently" : "Seol teachtaireacht go ciúin", + "Send message" : "Seol teachtaireacht", + "Send without notification" : "Seol gan fógra", + "The participant will not be notified about new messages" : "Ní thabharfar fógra don rannpháirtí faoi theachtaireachtaí nua", + "Participants will not be notified about new messages" : "Ní thabharfar fógra do rannpháirtithe faoi theachtaireachtaí nua", + "Message will be sent {datetimeString}" : "Seolfar an teachtaireacht chuig {datetimeString}", + "Thread title is required" : "Tá teideal an tsnáithe riachtanach", + "Message text is required" : "Tá téacs an teachtaireachta ag teastáil", + "The message could not be edited" : "Níorbh fhéidir an teachtaireacht a chur in eagar", + "File to share" : "Comhad le roinnt", + "File upload is not available in this conversation" : "Níl uaslódáil comhad ar fáil sa chomhrá seo", + "Message was successfully scheduled" : "Sceidealaíodh an teachtaireacht go rathúil", + "Add emoji" : "Cuir emoji leis", + "Adding a mention will only notify users who did not read the message." : "Má chuirtear tagairt leis, ní chuirfear in iúl ach d'úsáideoirí nár léigh an teachtaireacht.", + "Thread title" : "Teideal an snáithe", + "Send later" : "Seol níos déanaí", + "Show scheduled messages" : "Taispeáin teachtaireachtaí sceidealaithe", + "Cancel editing" : "Cealaigh eagarthóireacht", + "Schedule message" : "Teachtaireacht sceidealaithe", + "{user} is out of office and might not respond." : "Tá {user} as an oifig agus seans nach bhfreagróidh sé.", + "Absence period: {startDate} - {endDate}" : "Tréimhse neamhláithreachta: {startDate} - {endDate}", + "Replacement:" : "Athsholáthar:", + "Share from {nextcloud}" : "Roinn ó {nextcloud}", + "Share from Files" : "Comhroinn ó Chomhaid", + "Share files to the conversation" : "Roinn comhaid leis an gcomhrá", + "Upload from device" : "Íosluchtaigh ó gléas", + "Create new poll" : "Cruthaigh vótaíocht nua", + "Smart picker" : "Roghnóir cliste", + "Record voice message" : "Taifead teachtaireacht gutha", + "End recording and send" : "Cuir deireadh leis an taifeadadh agus seol", + "Dismiss recording" : "Ruaig an taifeadadh", + "Access to the microphone was denied" : "Diúltaíodh rochtain ar an micreafón", + "Microphone either not available or disabled in settings" : "Níl an micreafón ar fáil nó díchumasaithe sna socruithe", + "Error while recording audio" : "Earráid agus an fhuaim á taifeadadh", + "Voice message {time} ({conversation})" : "Teachtaireacht ghutha {time} ({conversation})", + "Generating summary of unread messages …" : "Achoimre ar theachtaireachtaí neamhléite á giniúint…", + "Summary is AI generated and might contain mistakes" : "Gintear achoimre ar AI agus d’fhéadfadh botúin a bheith ann", + "Error occurred during a summary generation" : "Tharla earráid le linn glúin achomair", + "New file" : "Comhad nua", + "Blank" : "Bán", + "Error while creating file" : "Earráid agus comhad á chruthú", + "Create and share a new file" : "Cruthaigh agus roinn comhad nua", + "Name of the new file" : "Ainm an chomhaid nua", + "Create file" : "Cruthaigh comhad", + "Someone is typing …" : "Tá duine éigin ag clóscríobh…", + "{user1} is typing …" : "Tá {user1} ag clóscríobh…", + "{user1} and {user2} are typing …" : "Tá {user1} agus {user2} ag clóscríobh…", + "{user1}, {user2} and {user3} are typing …" : "Tá {user1}, {user2} agus {user3} ag clóscríobh…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["Tá {user1}, {user2}, {user3} agus %n eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…","Tá {user1}, {user2}, {user3} agus %n duine eile ag clóscríobh…"], + "Add more files" : "Cuir tuilleadh comhad leis", + "Send" : "Seol", + "In this conversation {user} can:" : "Sa chomhrá seo is féidir le{user}:", + "Edit default permissions for participants in {conversationName}" : "Cuir ceadanna réamhshocraithe do rannpháirtithe in {conversationName}in eagar", + "Start a call" : "Cuir tús le glaoch", + "Skip the lobby" : "Léim an stocaireacht", + "Can post messages" : "Is féidir teachtaireachtaí a phostáil", + "Can post messages and reactions" : "Is féidir teachtaireachtaí agus freagraí a phostáil", + "Can add reactions" : "Is féidir imoibrithe a chur leis", + "Enable the microphone" : "Cumasaigh an micreafón", + "Enable the camera" : "Cumasaigh an ceamara", + "Share the screen" : "Roinn an scáileán", + "Update permissions" : "Nuashonraigh ceadanna", + "Updating permissions" : "Ceadanna á nuashonrú", + "No poll drafts" : "Uimh dréachtaí vótaíochta", + "There is no poll drafts yet saved for this conversation" : "Níl aon dréachtaí vótaíochta sábháilte don chomhrá seo fós", + "Create poll in {name}" : "Cruthaigh vótaíocht isteach{name}", + "Create poll" : "Cruthaigh vótaíocht", + "Error while importing poll" : "Earráid agus vótaíocht á hiompórtáil", + "Question" : "Ceist", + "Ask a question" : "Ceist a chur", + "Import draft from file" : "Iompórtáil dréacht ó chomhad", + "Answers" : "Freagraí", + "Answer {option}" : "Freagair {option}", + "Delete poll option" : "Scrios an rogha vótaíochta", + "Add answer" : "Cuir freagra leis", + "Settings" : "Socruithe", + "Anonymous poll" : "Pobalbhreith gan ainm", + "Multiple answers" : "Freagraí iolracha", + "Save as draft" : "Sábháil mar dhréacht", + "Export draft to file" : "Easpórtáil dréacht go comhad", + "_Final results • %n vote_::_Final results • %n votes_" : ["Torthaí deiridh • %n vóta","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí","Torthaí deiridh • %n vótaí"], + "Your vote is anonymous" : "Tá do vóta gan ainm", + "You voted for this option" : "Vótáil tú ar son an rogha seo", + "End poll" : "Deireadh vótaíocht", + "Change your vote" : "Athraigh do vóta", + "Withdraw vote" : "Tarraing siar vóta", + "Results" : "Torthaí", + "Download as spreadsheet" : "Íoslódáil mar scarbhileog", + "Download as CSV" : "Íoslódáil mar CSV", + "Voted participants" : "Rannpháirtithe vótáilte", + "Send a message to \"{roomName}\"" : "Seol teachtaireacht chuig \"{roomName}\"", + "Hide list of participants" : "Folaigh liosta na rannpháirtithe", + "Show list of participants" : "Taispeáin liosta na rannpháirtithe", + "Assistance requested in {roomName}" : "Iarradh cúnamh in {roomName}", + "The message was sent to \"{roomName}\"" : "Seoladh an teachtaireacht chuig \"{roomName}\"", + "Dismiss request for assistance" : "Déan iarratas ar chúnamh a dhíbhe", + "Send message to room" : "Seol teachtaireacht chuig an seomra", + "Back to main room" : "Ar ais go dtí an príomhsheomra", + "Back to your room" : "Ar ais go dtí do sheomra", + "Message all rooms" : "Cuir teachtaireacht chuig gach seomra", + "Start session" : "Tosaigh seisiún", + "Start a call before you start a breakout room session" : "Cuir tús le glao sula dtosaíonn tú ar sheisiún seomra ar leithligh", + "Stop session" : "Stop seisiún", + "The message was sent to all breakout rooms" : "Seoladh an teachtaireacht chuig gach seomra ar leithligh", + "Send a message to all breakout rooms" : "Seol teachtaireacht chuig gach seomra ar leithligh", + "Breakout rooms are not started" : "Níl seomraí ar leithligh tosaithe", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Is féidir le glaonna gan Inneall Ardfheidhmíochta a bheith ina gcúis le saincheisteanna nascachta agus ualach ard ar fheistí. {linkstart}Foghlaim tuilleadh{linkend}", + "Talk setup incomplete" : "Níl an socrú cainte críochnaithe", + "Disable lobby" : "Díchumasaigh an stocaireacht", + "Settings for participant \"{user}\"" : "Socruithe don rannpháirtí \"{user}\"", + "Participant \"{user}\"" : "Rannpháirtí \"{user}\"", + "moderator" : "modhnóir", + "bot" : "bota", + "guest" : "aoi", + "Ringing …" : "Ag glaoch…", + "Call rejected" : "Glao diúltaithe", + "{time} talking …" : "{time} ag caint…", + "{time} talking time" : "{time} am cainte", + "Raised their hand" : "Ardaíodh a lámh", + "Joined with video" : "Glacadh le físeán", + "Joined via phone" : "Glacadh leis ar an teileafón", + "Joined with audio" : "Glacadh le fuaime", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Caithfidh an téacs a bheith níos lú ná nó cothrom le {maxLength} carachtair ar fad. Tá {charactersCount} carachtar fada sa téacs reatha.", + "Remove group and members" : "Bain grúpa agus baill", + "Remove team and members" : "Bain foireann agus baill", + "Remove participant" : "Bain rannpháirtí", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "An bhfuil tú cinnte gur mhaith leat an grúpa \"{displayName}\" agus a bhaill a bhaint den chomhrá seo?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "An bhfuil tú cinnte gur mhaith leat foireann \"{displayName}\" agus a baill a bhaint den chomhrá seo?", + "Do you really want to remove {displayName} from this conversation?" : "An bhfuil tú cinnte gur mhaith leat {displayName} a bhaint den chomhrá seo?", + "Notification was sent to {displayName}" : "Seoladh fógra chuig {displayName}", + "Could not send notification to {displayName}" : "Níorbh fhéidir fógra a sheoladh chuig {displayName}", + "Permissions granted to {displayName}" : "Ceadanna tugtha do {displayName}", + "Could not modify permissions for {displayName}" : "Níorbh fhéidir ceadanna {displayName} a mhionathrú", + "Permissions removed for {displayName}" : "Baineadh ceadanna le haghaidh {displayName}", + "Permissions set to default for {displayName}" : "Ceadanna socraithe mar réamhshocrú le haghaidh {displayName}", + "Phone number could not be hung up" : "Níorbh fhéidir uimhir theileafóin a chrochadh", + "Phone number could not be put on hold" : "Níorbh fhéidir uimhir theileafóin a chur ar fionraí", + "Phone number could not be muted" : "Níorbh fhéidir an uimhir theileafóin a bhalbhú", + "Phone number could not be unmuted" : "Níorbh fhéidir an uimhir theileafóin a dhíbhalbhú", + "DTMF message could not be sent" : "Níorbh fhéidir an teachtaireacht DTMF a sheoladh", + "Phone number copied to clipboard" : "Cóipeáladh an uimhir theileafóin chuig an ngearrthaisce", + "Phone number could not be copied" : "Níorbh fhéidir uimhir theileafóin a chóipeáil", + "in the lobby" : "sa stocaireacht", + "Dial out phone" : "Diailigh fón", + "Hang up phone" : "Croch suas fón", + "Move back to lobby" : "Téigh ar ais chuig an stocaireacht", + "Move to conversation" : "Bog go comhrá", + "Dial-in PIN" : "UAP dhiailiú-i", + "Demote from moderator" : "Léim as an modhnóir", + "Promote to moderator" : "Cur chun cinn chuig modhnóir", + "Resend invitation" : "Seol cuireadh arís", + "Send call notification" : "Seol fógra glao", + "Dial out phone number" : "Diailigh uimhir theileafóin", + "Resume call for phone number" : "Lean glaoch ar uimhir theileafóin arís", + "Put phone number on hold" : "Cuir uimhir theileafóin ar feitheamh", + "Unmute phone number" : "Díbhalbhaigh uimhir theileafóin", + "Mute phone number" : "Balbhaigh uimhir theileafóin", + "Copy phone number" : "Cóipeáil uimhir theileafóin", + "Reset custom permissions" : "Athshocraigh ceadanna saincheaptha", + "Grant all permissions" : "Deonaigh gach cead", + "Remove all permissions" : "Bain gach cead", + "Also ban from this conversation" : "Cosc ón gcomhrá seo freisin", + "Internal note (reason to ban)" : "Nóta inmheánach (cúis le cosc)", + "Remove" : "Bain", + "Permissions modified for {displayName}" : "Athraíodh na ceadanna le haghaidh {displayName}", + "Add users, groups or teams" : "Cuir úsáideoirí, grúpaí nó foirne leis", + "Add users or groups" : "Cuir úsáideoirí nó grúpaí leis", + "Add users or teams" : "Cuir úsáideoirí nó foirne leis", + "Add users" : "Cuir úsáideoirí leis", + "Add groups or teams" : "Cuir grúpaí nó foirne leis", + "Add groups" : "Cuir grúpaí leis", + "Add teams" : "Cuir foirne leis", + "Add other sources" : "Cuir foinsí eile leis", + "Add emails" : "Cuir ríomhphoist leis", + "Integrations" : "Comhtháthaithe", + "Add federated users" : "Cuir úsáideoirí cónasctha leis", + "Searching …" : "Ag cuardach…", + "Search for more users" : "Cuardaigh le haghaidh níos mó úsáideoirí", + "You can search or add participants via name, email, or Federated Cloud ID" : "Is féidir leat rannpháirtithe a chuardach nó a chur leis trí ainm, ríomhphost nó ID Néal Cónaidhme", + "Search or add participants" : "Cuardaigh nó cuir rannpháirtithe leis", + "Invitation was sent to {actorId}" : "Seoladh cuireadh chuig {actorId}", + "An error occurred while adding the participants" : "Tharla earráid agus na rannpháirtithe á gcur leis", + "A new group conversation with selected participant will be created" : "Cruthófar comhrá grúpa nua le rannpháirtí roghnaithe", + "Participants" : "Rannpháirtithe", + "Pinned by a deleted user" : "Bioránta ag úsáideoir scriosta", + "Participants ({count})" : "Rannpháirtithe ({count})", + "Open chat" : "Oscail comhrá", + "You have new unread messages in the chat." : "Tá teachtaireachtaí nua neamhléite agat sa chomhrá.", + "You have been mentioned in the chat." : "Tá tú luaite sa chomhrá.", + "Search messages" : "Cuardaigh teachtaireachtaí", + "Chat" : "Comhrá", + "Details" : "Sonraí", + "Shared items" : "Míreanna roinnte", + "Search in {name}" : "Cuardaigh isteach {name}", + "Threads in {name}" : "Snáitheanna i {name}", + "{actor} in {conversation}" : "{actor} i {conversation}", + "Search messages …" : "Cuardaigh teachtaireachtaí…", + "Search options" : "Roghanna cuardaigh", + "From User" : "Ó Úsáideoir", + "Since" : "Ós rud é", + "Until" : "Go dtí", + "No results found" : "Níor aimsíodh aon torthaí", + "Load more results" : "Íoslódáil níos mó torthaí", + "Recent threads" : "Snáitheanna le déanaí", + "Projects" : "Tionscadail", + "No shared items" : "Níl aon mhír roinnte", + "Thread notifications" : "Fógraí snáithe", + "Thread actions" : "Gníomhartha snáithe", + "{actor}: {lastMessage}" : "{aisteoir}: {lastMessage}", + "Link to a conversation" : "Nasc le comhrá", + "No open conversations found" : "Níor aimsíodh aon chomhrá oscailte", + "Either there are no open conversations or you joined all of them." : "Níl aon chomhráite oscailte ann nó chuir tú isteach orthu go léir.", + "Check spelling or use complete words." : "Seiceáil an litriú nó bain úsáid as focail iomlána.", + "Search conversations or users" : "Cuardaigh comhráite nó úsáideoirí", + "Select conversation" : "Roghnaigh comhrá", + "Number length is not valid" : "Níl fad uimhreach bailí", + "Region code is not valid" : "Níl an cód réigiúin bailí", + "Number length is too short" : "Tá fad uimhreach ró-ghearr", + "Number length is too long" : "Tá fad uimhreach ró-fhada", + "Number is not valid" : "Níl an uimhir bailí", + "Phone numbers" : "Uimhreacha gutháin", + "Display name: {name}" : "Ainm taispeána: {name}", + "Edit display name" : "Cuir ainm taispeána in eagar", + "Display name (required)" : "Ainm taispeána (riachtanach)", + "Save name" : "Sábháil ainm", + "I picked message bubbles" : "Roghnaigh mé boilgeoga teachtaireachta", + "I picked the list style" : "Roghnaigh mé an stíl liosta", + "Error while setting personal setting" : "Earráid agus socrú pearsanta á shocrú", + "Error while saving sounds setting" : "Earráid agus socrú fuaimeanna á sábháil", + "Compact conversations list" : "Liosta comhráite dlúth", + "Chat appearance" : "Cuma comhrá", + "Messages list" : "Liosta teachtaireachtaí", + "Message bubbles" : "Bolgáin teachtaireachta", + "Play sounds when participants join or leave a call" : "Seinn fuaimeanna nuair a thagann rannpháirtithe isteach nó nuair a fhágann siad glao", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Níl sé ar fáil faoi láthair ar iPhone agus iPad mar gheall ar shrianta teicniúla ón monaróir", + "Notification settings" : "Socruithe fógra", + "Sounds for chat and call notifications" : "Fuaimeanna le haghaidh fógraí comhrá agus glaonna", + "Invalid language ({languageId})" : "Teanga neamhbhailí ({languageId})", + "Default language" : "Teanga réamhshocraithe", + "Default language ({languageName})" : "Teanga réamhshocraithe ({languageName})", + "Error when trying to load the available live translation languages" : "Earráid agus iarracht á déanamh na teangacha aistriúcháin bheo atá ar fáil a luchtú", + "Error when trying to set live translation language" : "Earráid agus iarracht á déanamh teanga aistriúcháin bheo a shocrú", + "Set language used to show the transcriptions" : "Socraigh an teanga a úsáidtear chun na trascríbhinní a thaispeáint", + "Select location for attachments" : "Roghnaigh suíomh le haghaidh ceangaltán", + "Error while setting attachment folder" : "Earráid agus fillteán ceangaltáin á shocrú", + "Error while setting read status privacy" : "Earráid agus príobháideacht stádais léite á shocrú", + "Error while setting typing status privacy" : "Earráid agus príobháideacht stádais á chlóscríobh", + "Error while setting default media state" : "Earráid agus an stát meán réamhshocraithe á shocrú", + "Turn camera and microphone off by default" : "Múch an ceamara agus an micreafón de réir réamhshocraithe", + "Blur camera background by default" : "Doiléirigh cúlra an cheamara de réir réamhshocraithe", + "Skip device preview before joining a call" : "Seachain réamhamharc gléis sula dtéann tú isteach i nglao", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Múchfar an ceamara nuair a bheidh tú ag glacadh páirte. Taispeántar i gcónaí é má tá toiliú taifeadta ag teastáil.", + "Appearance & Sounds" : "Dealramh & Fuaimeanna", + "Privacy" : "Príobháideacht", + "Send read receipts" : "Seol admhálacha léite", + "When off, all read statuses will be hidden" : "Nuair a bhíonn sé múchta, beidh gach stádas léite i bhfolach", + "Share typing status" : "Comhroinn stádas clóscríofa", + "When off, all typing indicators will be hidden" : "Nuair a bhíonn sé múchta, beidh na táscairí clóscríofa go léir i bhfolach", + "Attachments folder" : "Fillteán ceangaltáin", + "Toggle full screen" : "Scoránaigh scáileán iomlán", + "Return to Home screen" : "Fill ar ais go dtí an scáileán baile", + "Search" : "Cuardach", + "Shortcuts while in a chat" : "Aicearraí agus tú i gcomhrá", + "Focus the chat input" : "Dírigh an t-ionchur comhrá", + "Unfocus the chat input to use shortcuts" : "Dífhócas an t-ionchur comhrá chun aicearraí a úsáid", + "Edit your last message" : "Cuir do theachtaireacht dheireanach in eagar", + "Shortcuts while in a call" : "Aicearraí agus tú ar ghlao", + "Camera on and off" : "Ceamara ar siúl agus as", + "Microphone on and off" : "Micreafón ar siúl agus as", + "Raise or lower hand" : "Ardaigh nó lámh níos ísle", + "Push to talk or push to mute" : "Brúigh chun cainte nó brú chun balbhaigh", + "Zoom-in / zoom-out a screen share" : "Súmáil isteach / zúmáil amach sciar scáileáin", + "Mouse wheel" : "Roth luiche", + "Start call silently" : "Tosaigh glaoch go ciúin", + "Start call" : "Tosaigh glao", + "End call" : "Cuir deireadh leis an nglao", + "The server was updated, you cannot start or join a call." : "Nuashonraíodh an freastalaí, ní féidir leat glao a thosú ná páirt a ghlacadh ann.", + "This call has just ended" : "Tá deireadh leis an nglao seo", + "You will be able to join the call only after a moderator starts it." : "Ní bheidh tú in ann páirt a ghlacadh sa ghlao ach amháin tar éis do mhodhnóir é a thosú.", + "End call for everyone" : "Cuir deireadh leis an nglao do chách", + "Starting the recording" : "An taifeadadh a thosú", + "Recording" : "Taifeadadh", + "The call has been running for one hour." : "Tá an glao ar siúl ar feadh uair an chloig.", + "Cancel recording start" : "Cealaigh tús an taifeadta", + "Stop recording" : "Stop taifeadadh", + "Send a reaction" : "Seol imoibriú", + "React with {reaction}" : "Freagair le {rection}", + "All tasks done!" : "Gach tasc déanta!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tasc","{done}de %n tascanna","{done}de %n tascanna","{done}de %n tascanna","{done}de %n tascanna"], + "Add participants to this call" : "Cuir rannpháirtithe leis an nglao seo", + "_%n participant in call_::_%n participants in call_" : ["%n rannpháirtí sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao","%n rannpháirtithe sa ghlao"], + "Scheduled messages" : "Teachtaireachtaí sceidealaithe", + "You are not allowed to enable screensharing" : "Níl cead agat comhroinnt scáileáin a chumasú", + "No screensharing" : "Gan comhroinnt scáileáin", + "Screensharing options" : "Roghanna comhroinnte scáileáin", + "Enable screensharing" : "Cumasaigh comhroinnt scáileáin", + "Bad sent video and screen quality." : "Físeán seolta agus droch-chaighdeán scáileáin.", + "Bad sent screen quality." : "Droch-chaighdeán scáileáin seolta.", + "Bad sent video quality." : "Droch-chaighdeán físeán seolta.", + "Bad sent audio, video and screen quality." : "Droch-chaighdeán fuaime, físeáin agus scáileáin seolta.", + "Bad sent audio and screen quality." : "Droch-chaighdeán fuaime seolta agus scáileáin.", + "Bad sent audio and video quality." : "Droch-chaighdeán fuaime agus físe seolta.", + "Bad sent audio quality." : "Droch-chaighdeán fuaime seolta.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Disable background blur" : "Díchumasaigh geamhú an chúlra", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann do scáileán a fheiceáil.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Tá do nasc idirlín nó ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a fheiceáil.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht d'fhíseán a dhíchumasú agus comhroinnt scáileáin á dhéanamh agat.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus do scáileán a fheiceáil. Chun an scéal a fheabhsú déan iarracht do chomhroinnt scáileáin a dhíchumasú.", + "Disable screenshare" : "Díchumasaigh comhroinnt scáileáin", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht doiléir an chúlra nó d'fhíseán a dhíchumasú.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint agus a fheiceáil. Chun an scéal a fheabhsú déan iarracht do fhíseán a dhíchumasú.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Tá do nasc idirlín nó do ríomhaire gnóthach agus seans nach mbeidh rannpháirtithe eile in ann tú a thuiscint.", + "Screen sharing is not supported by your browser." : "Ní thacaíonn do bhrabhsálaí le comhroinnt scáileáin.", + "Screen sharing requires the page to be loaded through HTTPS." : "Éilíonn comhroinnt scáileáin an leathanach a luchtú trí HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Éilíonn comhroinnt scáileáin an leathanach a luchtú trí HTTPS.", + "An error occurred while starting screensharing." : "Tharla earráid agus comhroinnt scáileáin á thosú.", + "Select virtual background" : "Roghnaigh cúlra fíorúil", + "Show your screen" : "Taispeáin do scáileán", + "Stop screensharing" : "Cuir stop le comhroinnt scáileáin", + "Mute others" : "Balbhaigh daoine eile", + "Start recording" : "Tosaigh taifeadadh", + "Set up breakout rooms" : "Socraigh seomraí ar leithligh", + "Download attendance list" : "Íoslódáil liosta freastalaithe", + "Open Calendar" : "Oscail Féilire", + "Remove participant {name}" : "Bain rannpháirtí {name}", + "Would you like to delete this conversation?" : "Ar mhaith leat an comhrá seo a scriosadh?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta.","Scriosfar an comhrá seo go huathoibríoch do gach duine tar éis %n lá neamhghníomhaíochta."], + "Are you sure you want to delete this conversation?" : "An bhfuil tú cinnte gur mian leat an comhrá seo a scriosadh?", + "Delete now" : "Scrios anois", + "Keep" : "Coinnigh", + "Open dialpad" : "Oscail dialpad", + "Select a region" : "Roghnaigh réigiún", + "Local time: {time}" : "Am áitiúil: {time}", + "Scheduled {datetime}" : "Sceidealaithe {datetime}", + "Scheduled for {datetime}" : "Sceidealaithe do {datetime}", + "Search …" : "Cuardaigh…", + "Message without mention" : "Teachtaireacht gan trácht", + "Mention myself" : "Luaigh mé féin", + "Mention everyone" : "Luaigh gach duine", + "Select a conversation" : "Roghnaigh comhrá", + "Select a mode" : "Roghnaigh mód", + "You do not have permissions to access this conversation." : "Níl cead agat an comhrá seo a rochtain.", + "Join a different conversation or start a new one." : "Glac páirt i gcomhrá eile nó cuir tús le ceann nua.", + "The conversation does not exist" : "Níl an comhrá ann", + "Join a conversation or start a new one!" : "Glac páirt i gcomhrá nó cuir tús le ceann nua!", + "Duplicate session" : "Seisiún dúblach", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Osclaíodh an comhrá seo i gcluaisín eile. Ní thacaíonn an leagan reatha den fhreastalaí le comhrá a oscailt i roinnt cluaisíní.", + "Creating and joining a conversation with \"{userid}\"" : "Ag cruthú agus ag glacadh páirte i gcomhrá le \"{userid}\"", + "Join a conversation or start a new one" : "Glac páirt i gcomhrá nó cuir tús le ceann nua", + "Error while joining the conversation" : "Earráid agus tú páirteach sa chomhrá", + "Another user" : "Úsáideoir eile", + "Hey! Are you using the list style or message bubbles?" : "Haigh! An bhfuil tú ag úsáid an stíl liosta nó boilgeoga teachtaireachta?", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Úsáideoir Nextcloud", + "User password" : "Pasfhocal úsáideora", + "Talk conversation" : "Labhair comhrá", + "Skip TLS verification" : "Léim thar fhíorú TLS", + "Matrix server URL" : "URL freastalaí maitrís", + "User" : "Úsáideoir", + "Matrix channel" : "Cainéal maitrís", + "Mattermost server URL" : "URL an fhreastalaí is tábhachtaí", + "Mattermost user" : "Úsáideoir is tábhachtaí", + "Team name" : "Ainm foirne", + "Channel name" : "Ainm an chainéil", + "Rocket.Chat server URL" : "URL freastalaí Rocket.Chat", + "User name or email address" : "Ainm úsáideora nó seoladh ríomhphoist", + "Rocket.Chat channel" : "Rocket.Chat cainéal", + "Zulip server URL" : "URL freastalaí Zulip", + "Bot user name" : "Ainm úsáideora bot", + "Bot API key" : "Eochair bot API", + "Zulip channel" : "Cainéal Zulip", + "API token" : "Comhartha API", + "Slack channel" : "Cainéal caol", + "Server ID or name" : "Aitheantas nó ainm an fhreastalaí", + "Channel ID (prefixed with \"ID:\") or name" : "Aitheantas an chainéil (le \"ID:\") nó ainm", + "Channel" : "Cainéal", + "Login" : "Logáil isteach", + "Chat ID" : "ID comhrá", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL an fhreastalaí IRC (m.sh. chat.freenode.net: 6667)", + "Nickname" : "Leasainm", + "Connection password" : "Pasfhocal ceangail", + "IRC channel" : "Cainéal IRC", + "Channel password" : "Pasfhocal cainéal", + "NickServ nickname" : "leasainm Freastalaí", + "NickServ password" : "Pasfhocal NickServ", + "Use TLS" : "Úsáid TLS", + "Use SASL" : "Úsáid SASL", + "Tenant ID" : "ID an Tionónta", + "Client ID" : "Aitheantas Cliant", + "Team ID" : "Aitheantas foirne", + "Thread ID" : "Aitheantas Snáithe", + "XMPP/Jabber server URL" : "URL freastalaí XMPP/Jabber", + "MUC server URL" : "URL freastalaí MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Teachtaireachtaí bioránta", + "Media" : "Meáin", + "Polls" : "Pobalbhreith", + "Deck cards" : "Cártaí deic", + "Voice messages" : "Teachtaireachtaí gutha", + "Locations" : "Suímh", + "Call recordings" : "Taifeadtaí glaonna", + "Audio" : "Fuaime", + "Show all pinned messages" : "Taispeáin na teachtaireachtaí uile atá bioránta", + "Show all media" : "Taispeáin na meáin go léir", + "Show all files" : "Taispeáin gach comhad", + "Show all polls" : "Taispeáin gach pobalbhreith", + "Show all deck cards" : "Taispeáin gach cárta deic", + "Show all voice messages" : "Taispeáin gach teachtaireacht gutha", + "Show all locations" : "Taispeáin gach suíomh", + "Show all call recordings" : "Taispeáin gach taifeadadh glaonna", + "Show all audio" : "Taispeáin gach fuaime", + "Show all other" : "Taispeáin gach ceann eile", + "Follow conversation settings" : "Lean socruithe comhrá", + "Group" : "Grúpa", + "Team" : "Foireann", + "You reconnected to the call" : "D'athcheangail tú leis an nglao", + "{actor} reconnected to the call" : "D'athcheangail {actor} leis an nglao", + "You added {user0} and {user1}" : "Chuir tú {user0} agus {user1} leis", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Chuir tú {user0}, {user1} agus %n rannpháirtí eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis","Chuir tú {user0}, {user1} agus %n rannpháirtithe eile leis"], + "An administrator added you and {user0}" : "Chuir riarthóir thú agus {user0} leis", + "{actor} added you and {user0}" : "Chuir {actor} tú agus {user0} leis", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Chuir riarthóir thú, {user0} agus %n rannpháirtí eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis","Chuir riarthóir tú féin, {user0} agus %n rannpháirtithe eile leis"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["Chuir {actor} tú, {user0} agus %n rannpháirtí eile leis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis","Chuir {actor} tú, {user0} agus %n rannpháirtí sa bhreis"], + "An administrator added {user0} and {user1}" : "Chuir riarthóir {user0} agus {user1} leis", + "{actor} added {user0} and {user1}" : "Chuir {actor} {user0} agus {user1} leis", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Chuir riarthóir {user0}, {user1} agus %n rannpháirtí eile leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis leis"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis","Chuir {actor} {user0}, {user1} agus %n rannpháirtí eile leis"], + "You removed {user0} and {user1}" : "Bhain tú {user0} agus {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile","Bhain tú {user0}, {user1} agus %n rannpháirtí eile"], + "An administrator removed you and {user0}" : "Bhain riarthóir thú agus {user0}", + "{actor} removed you and {user0}" : "Bhain {actor} thú agus {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile","Bhain riarthóir thú, {user0} agus %n rannpháirtí eile"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile","Bhain {actor} thú, {user0} agus %n rannpháirtí eile"], + "An administrator removed {user0} and {user1}" : "Bhain riarthóir {user0} agus {user1}", + "{actor} removed {user0} and {user1}" : "Bhain {actor} {user0} agus {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Bhain riarthóir {user0}, {user1} agus %n rannpháirtí eile","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["Bhain {actor} {user0}, {user1} agus %n rannpháirtí eile","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis","Bhain {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis"], + "You and {user0} joined the call" : "Ghlac tú féin agus {user0} páirt sa ghlao", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao","Tháinig tusa, {user0} agus %n rannpháirtí sa bhreis isteach sa ghlao"], + "{user0} and {user1} joined the call" : "Tháinig {user0} agus {user1} isteach sa ghlao", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao","Tháinig {user0}, {user1} agus %n rannpháirtí sa bhreis ar an nglao"], + "You and {user0} left the call" : "D'fhág tú féin agus {user0} an glao", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao","D'fhág tusa, {user0} agus %n rannpháirtí sa bhreis an glao"], + "{user0} and {user1} left the call" : "D'fhág {user0} agus {user1} an glao", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao","D'fhág {user0}, {user1} agus %n rannpháirtí sa bhreis an glao"], + "You promoted {user0} and {user1} to moderators" : "Chuir tú {user0} agus {user1} chun cinn do mhodhnóirí", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir tú {user0}, {user1} agus %n rannpháirtí eile chun cinn chuig modhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí","Chuir tú {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn do mhodhnóirí"], + "An administrator promoted you and {user0} to moderators" : "Chuir riarthóir thú agus {user0} chun cinn mar mhodhnóirí", + "{actor} promoted you and {user0} to moderators" : "Chuir {actor} tú agus {user0} chun cinn mar mhodhnóirí", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir riarthóir thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["Chuir {actor} thú chun cinn, {user0} agus %n rannpháirtí eile chuig modhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí","Chuir {actor} thú, {user0} agus %n rannpháirtí eile chun cinn mar mhodhnóirí"], + "An administrator promoted {user0} and {user1} to moderators" : "Chuir riarthóir {user0} agus {user1} chun cinn do mhodhnóirí", + "{actor} promoted {user0} and {user1} to moderators" : "chuir {actor} {user0} agus {user1} chun cinn do mhodhnóirí", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir riarthóir {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí","Chuir {actor} {user0}, {user1} agus %n rannpháirtí sa bhreis chun cinn chuig modhnóirí"], + "You demoted {user0} and {user1} from moderators" : "Bhain tú síos {user0} agus {user1} ó mhodhnóirí", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain tú síos {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain tú {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí"], + "An administrator demoted you and {user0} from moderators" : "Rinne riarthóir tú féin agus {user0} a dhíscriosadh ó mhodhnóirí", + "{actor} demoted you and {user0} from moderators" : "Bhain {actor} tú féin agus {user0} ó mhodhnóirí", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Dhealraigh riarthóir tú, {user0} agus %n rannpháirtí eile ó mhodhnóirí"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} thú, {user0} agus %n rannpháirtí eile ó mhodhnóirí"], + "An administrator demoted {user0} and {user1} from moderators" : "Bhain riarthóir {user0} agus {user1} ó mhodhnóirí", + "{actor} demoted {user0} and {user1} from moderators" : "Bhain {actor} {user0} agus {user1} ó mhodhnóirí", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain riarthóir {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["Bhain {actor} {user0}, {user1} agus %n rannpháirtí eile ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí","Bhain {actor} {user0}, {user1} agus %n rannpháirtí breise ó mhodhnóirí"], + "You:" : "Tusa:", + "You: {lastMessage}" : "Tusa: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Nuashonraíodh an freastalaí.", + "(edited by you)" : "(arna chur in eagar ag tú)", + "(edited by a deleted user)" : "(arna chur in eagar ag úsáideoir scriosta)", + "(edited by {moderator})" : "(curtha in eagar ag {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Tá tú ag iarraidh páirt a ghlacadh i gcomhrá agus seisiún gníomhach agat i bhfuinneog nó gléas eile. Ní thacaíonn Nextcloud Talk leis seo faoi láthair. Cad ba mhaith leat a dhéanamh?", + "Leave this page" : "Fág an leathanach seo", + "Join here" : "Glac páirt anseo", + "Deck card has been posted to {conversation}" : "Postáladh cárta deic chuig {conversation}", + "An error occurred while posting deck card to conversation" : "Tharla earráid agus cártaí deic á bpostáil chuig comhrá", + "Post to a conversation" : "Postáil chuig comhrá", + "Post to conversation" : "Postáil chuig an gcomhrá", + "The recording failed. Please contact your administrator." : "Theip ar an taifeadadh. Déan teagmháil le do riarthóir le do thoil.", + "Location has been posted to {conversation}" : "Postáladh an suíomh chuig {conversation}", + "An error occurred while posting location to conversation" : "Tharla earráid agus suíomh á phostáil chuig comhrá", + "Share to a conversation" : "Comhroinn le comhrá", + "Share to conversation" : "Roinn chuig an gcomhrá", + "In conversation" : "I gcomhrá", + "Search in conversation: {conversation}" : "Cuardaigh i gcomhrá: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Tá d’iarratais sáite faoi láthair mar gheall ar chosaint fórsa brúidiúil", + "Error while clearing conversation history" : "Earráid agus an stair chomhrá á glanadh", + "Error occurred while allowing guests" : "Tharla earráid agus aíonna á gceadú", + "Error occurred while disallowing guests" : "Tharla earráid agus aíonna á ndícheadú", + "Error occurred when restricting the conversation to moderator" : "Tharla earráid agus an comhrá á srianadh go modhnóir", + "Error occurred when opening the conversation to everyone" : "Tharla earráid agus an comhrá á oscailt do gach duine", + "Conversation password has been saved" : "Sábháladh pasfhocal an chomhrá", + "Conversation password has been removed" : "Baineadh pasfhocal an chomhrá", + "Error occurred while saving conversation password" : "Tharla earráid agus pasfhocal an chomhrá á shábháil", + "Call recording is starting." : "Tá taifeadadh glaonna ag tosú.", + "Call recording stopped while starting." : "Stopadh taifeadadh glaonna agus é ag tosú.", + "Call recording stopped. You will be notified once the recording is available." : "Stopadh taifeadadh glaonna. Cuirfear ar an eolas tú nuair a bheidh an taifeadadh ar fáil.", + "Conversation picture set" : "Sraith pictiúr comhrá", + "Conversation picture deleted" : "Scriosadh pictiúr an chomhrá", + "Could not delete the conversation picture" : "Níorbh fhéidir pictiúr an chomhrá a scriosadh", + "Could not remove the automatic expiration" : "Níorbh fhéidir an dul in éag uathoibríoch a bhaint", + "Could not post message: {errorMessage}" : "Níorbh fhéidir an teachtaireacht a phostáil: {errorMessage}", + "Participant is banned successfully" : "Tá toirmeasc rathúil ar rannpháirtí", + "Error while banning the participant" : "Earráid agus an rannpháirtí á thoirmeasc", + "An error occurred while fetching the participants" : "Tharla earráid agus na rannpháirtithe á nglacadh", + "Could not send invitation to {actorId}" : "Níorbh fhéidir cuireadh a sheoladh chuig {actorId}", + "Invitations sent" : "Cuirí seolta", + "Error occurred when sending invitations" : "Tharla earráid agus cuirí á seoladh", + "Failed to join the conversation." : "Theip ar páirt a ghlacadh sa chomhrá.", + "An error occurred while creating breakout rooms" : "Tharla earráid agus seomraí ar leithligh á gcruthú", + "An error occurred while re-ordering the attendees" : "Tharla earráid agus an lucht freastail á athordú", + "An error occurred while deleting breakout rooms" : "Tharla earráid agus seomraí ar leithligh á scriosadh", + "An error occurred while starting breakout rooms" : "Tharla earráid agus seomraí ar leithligh á thosú", + "An error occurred while stopping breakout rooms" : "Tharla earráid agus seomraí ar leithligh á stopadh", + "An error occurred while sending a message to the breakout rooms" : "Tharla earráid agus teachtaireacht á seoladh chuig na seomraí ar leithligh", + "An error occurred while requesting assistance" : "Tharla earráid agus cúnamh á iarraidh", + "An error occurred while resetting the request for assistance" : "Tharla earráid agus an t-iarratas ar chúnamh á athshocrú", + "An error occurred while joining breakout room" : "Tharla earráid agus tú ag glacadh páirte sa seomra ar leithligh", + "Failed to rename the thread" : "Theip ar athainmniú an snáithe", + "Error fetching upcoming events" : "Earráid ag fáil imeachtaí atá le teacht", + "Error fetching upcoming reminders" : "Earráid ag fáil meabhrúcháin atá le teacht", + "An error occurred while accepting an invitation" : "Tharla earráid agus cuireadh á ghlacadh", + "An error occurred while rejecting an invitation" : "Tharla earráid agus cuireadh á dhiúltú", + "{guest} (guest)" : "{guest} (aoi)", + "Poll draft has been saved" : "Tá an dréacht vótaíochta sábháilte", + "An error occurred while saving the draft" : "Tharla earráid agus an dréacht á shábháil", + "An error occurred while submitting your vote" : "Tharla earráid agus do vóta á chur isteach", + "An error occurred while ending the poll" : "Tharla earráid agus an pobalbhreith á críochnú", + "An error occurred while deleting the poll draft" : "Tharla earráid agus an dréacht vótaíochta á scriosadh", + "Poll \"{name}\" was created by {user}. Click to vote" : "Chruthaigh {user} an vótaíocht \"{name}\". Cliceáil chun vótáil", + "Failed to add reaction" : "Theip ar imoibriú a chur leis", + "Failed to remove reaction" : "Theip ar an imoibriú a bhaint", + "The server is in maintenance mode." : "Tá an freastalaí i mód cothabhála.", + "Federated server was updated." : "Nuashonraíodh an freastalaí cónaidhme.", + "Error while uploading file \"{fileName}\"" : "Earráid agus comhad \"{fileName}\" á uaslódáil", + "Not enough free space to upload file \"{fileName}\"" : "Níl go leor spáis in aisce chun an comhad \"{fileName}\" a uaslódáil", + "You are not allowed to share files" : "Níl cead agat comhaid a roinnt", + "Error while sharing file" : "Earráid agus an comhad á roinnt", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Níl tacaíocht iomlán ag Nextcloud Talk don bhrabhsálaí atá in úsáid agat. Bain úsáid as an leagan is déanaí de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera nó Apple Safari.", + "_In %n hour_::_In %n hours_" : ["I %n uair","In %n hoursI %n uair","I %n uair","I %n uair","I %n uair"], + "_%n minute _::_%n minutes_" : ["%n nóiméad","%n nóiméad","%n nóiméad","%n nóiméad","%n nóiméad"], + "In {hours} and {minutes}" : "I {uair an chloig} agus {nóiméid}", + "_In %n minute_::_In %n minutes_" : ["I %n nóiméad","I %n nóiméad","I %n nóiméad","I %n nóiméad","I %n nóiméad"], + "Later today – {timeLocale}" : "Níos déanaí inniu - {timeLocale}", + "Set time for later today" : "Socraigh am don lá atá inniu ann", + "Tomorrow – {timeLocale}" : "Amárach - {timeLocale}", + "Set time for tomorrow" : "Socraigh am don lá amárach", + "This weekend – {timeLocale}" : "An deireadh seachtaine seo - {timeLocale}", + "Set time for this weekend" : "Socraigh am don deireadh seachtaine seo", + "Next week – {timeLocale}" : "An tseachtain seo chugainn – {timeLocale}An tseachtain seo chugainn – {timeLocale}", + "Set time for next week" : "Socraigh am don tseachtain seo chugainn", + "Message link copied to clipboard" : "Nasc teachtaireachta cóipeáilte chuig an ghearrthaisce", + "Conversation link copied to clipboard" : "Cóipeáladh an nasc comhrá chuig an ngearrthaisce", + "The link could not be copied" : "Níorbh fhéidir an nasc a chóipeáil", + "Error while parsing a PROPFIND error" : "Earráid agus earráid PROPFIND á parsáil", + "Sending signaling message has failed" : "Theip ar sheoladh na teachtaireachta comharthaíochta", + "Lost connection to signaling server. Trying to reconnect." : "Ceangal caillte leis an bhfreastalaí comharthaíochta. Ag iarraidh a athcheangal.", + "Lost connection to signaling server." : "Ceangal caillte leis an bhfreastalaí comharthaíochta.", + "Connecting is taking longer than expected …" : "Tá an nasc ag glacadh níos faide ná mar a bhíothas ag súil leis …", + "Failed to connect. Retrying …" : "Theip ar an nascadh. Ag iarraidh arís …", + "Failed to connect. The signaling server may be set up incorrectly" : "Theip ar an nascadh. Seans go bhfuil an freastalaí comharthaíochta socraithe go mícheart.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Ní mór an freastalaí comharthaíochta cumraithe a nuashonrú le bheith comhoiriúnach leis an leagan seo de Talk. Déan teagmháil le do riarachán, le do thoil.", + "Please restart the app." : "Atosaigh an aip le do thoil.", + "Please reload the page." : "Athlódáil an leathanach le do thoil.", + "Please try to restart the app." : "Déan iarracht an aip a atosú le do thoil.", + "Please try to reload the page." : "Déan iarracht an leathanach a athlódáil.", + "Do not disturb" : "Ná cur as", + "Away" : "Amach", + "Microphone {number}" : "Micreafón {uimhir}", + "Camera {number}" : "{uimhir} ceamara", + "Speaker {number}" : "Cainteoir {uimhir}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Is cosúil go bhfuil tú ag caint agus tú balbh, le do thoil díbhalbhaigh tú féin le go gcloisfidh daoine eile thú", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Níorbh fhéidir nasc a bhunú le rannpháirtí amháin ar a laghad. Seans go mbeidh freastalaí TURN ag teastáil le haghaidh do chás. Iarr ar do riarthóir ceann a shocrú tar éis {linkstart}an doiciméadú seo{linkend} le do thoil.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tá sé seo ag glacadh níos faide ná mar a ceapadh. An bhfuil na ceadanna meán tugtha (nó diúltaithe) cheana féin? Má tá, atosaigh do bhrabhsálaí le do thoil, toisc go bhfuil teipthe ar fhuaim agus ar fhís", + "Access to microphone & camera is only possible with HTTPS" : "Ní féidir rochtain ar mhicreafón & ceamara ach amháin le HTTPS", + "Please move your setup to HTTPS" : "Bog do shocrú go HTTPS le do thoil", + "Access to microphone & camera was denied" : "Diúltaíodh rochtain ar mhicreafón & ceamara", + "WebRTC is not supported in your browser" : "Ní thacaítear le WebRTC i do bhrabhsálaí", + "Please use a different browser like Firefox or Chrome" : "Bain úsáid as brabhsálaí eile ar nós Firefox nó Chrome le do thoil", + "Error while accessing microphone & camera" : "Earráid agus an micreafón agus an ceamara á rochtain", + "%s Talk on your mobile devices" : "%s Labhair ar do ghléasanna móibíleacha", + "Join conversations at any time, anywhere, on any device." : "Glac páirt i gcomhráite am ar bith, áit ar bith, ar ghléas ar bith.", + "Android app" : "Aip Android", + "iOS app" : "aip iOS", + "__language_name__" : "__ainm_teanga__", + "Webhook Demo" : "Taispeántas Webook", + "Call summary (%s)" : "Achoimre ar an nglao (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Postálann an bot achoimre glaonna teachtaireacht forbhreathnú tar éis an ghlao ina liostaítear na rannpháirtithe go léir agus ag cur síos ar na tascanna", + "Tasks" : "Tascanna", + "Notes" : "Nótaí", + "Reports" : "Tuairiscí", + "Decisions" : "Cinntí", + "Agenda" : "Clár oibre", + "Call summary" : "Achoimre glaonna", + "Call summary - {title}" : "Achoimre ar an nglao - {teideal}", + "Talk conversation for event" : "Labhair comhrá don imeacht", + "Client Push is installed, this improves the performance of desktop clients." : "Tá Client Push suiteáilte, feabhsaíonn sé seo feidhmíocht na gcliant deisce.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "Níl {notify_push}suiteáilte, d'fhéadfadh fadhbanna feidhmíochta a bheith mar thoradh air seo agus cliaint deisce in úsáid.", + "Next meeting" : "An chéad chruinniú eile", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Sceideal cruinniú ó do fhéilire. Ní mór comhrá Talk a shocrú mar shuíomh le go dtaispeánfar é anseo.", + "Join conversations from remote Nextcloud servers" : "Glac páirt i gcomhráite ó fhreastalaithe cianda Nextcloud", + "Your default media state has been saved" : "Sábháladh do staid meán réamhshocraithe", + "Set reminder for later today" : "Socraigh meabhrúchán le haghaidh níos déanaí inniu", + "Set reminder for tomorrow" : "Socraigh meabhrúchán don lá amárach", + "Set reminder for this weekend" : "Socraigh meabhrúchán don deireadh seachtaine seo", + "Set reminder for next week" : "Socraigh meabhrúchán don tseachtain seo chugainn", + "Generate summary" : "Gin achoimre", + "Open poll • You voted already" : "Vótaíocht oscailte • Vótáil tú cheana féin", + "Open poll • Click to vote" : "Oscail vótaíocht • Cliceáil chun vótáil", + "Poll • Ended" : "• Tháinig deireadh leis an vótaíocht", + "Talk recording from {time} ({conversation})" : "Taifeadadh cainte ó {time} ({ conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Torthaí na vótaíochta • %n vóta","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí","Torthaí na vótaíochta • %n vótaí"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Vótaíocht oscailte • %n vóta","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí","Vótaíocht oscailte • %n vótaí"], + "Submit vote" : "Cuir vóta isteach", + "Your privacy setting has been saved" : "Sábháladh do shocrú príobháideachta", + "Your personal setting has been saved" : "Sábháladh do shocrú pearsanta", + "Failed to save sounds setting" : "Theip ar an socrú fuaimeanna a shábháil", + "Sounds setting saved" : "Socrú fuaimeanna sábháilte", + "Always shown if recording consent is required" : "Taispeántar i gcónaí má tá toiliú taifeadta ag teastáil", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nuashonraíodh Nextcloud Talk, ní féidir leat glao a thosú nó páirt a ghlacadh ann.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Chuaigh tú isteach sa chomhrá i bhfuinneog nó gléas eile. Ní thacaíonn Nextcloud Talk leis seo faoi láthair mar sin dúnadh an seisiún seo.", + "Nextcloud Talk was updated." : "Nuashonraíodh Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Tá Nextcloud i mód cothabhála.", + "Nextcloud Talk Federation was updated." : "Nuashonraíodh Cónaidhm Nextcloud Talk.", + "Enable live translation" : "Cumasaigh aistriúchán beo", + "I picked list style" : "Roghnaigh mé stíl liosta", + "Hey! Are you using Talk in list style or with message bubbles?" : "Haigh! An bhfuil tú ag úsáid Talk i stíl liosta nó le boilgeoga teachtaireachta?" +},"pluralForm" :"nplurals=5; plural=(n==1 ? 0 : n==2 ? 1 : n<7 ? 2 : n<11 ? 3 : 4);" +} \ No newline at end of file diff --git a/l10n/gl.js b/l10n/gl.js new file mode 100644 index 0000000..5e6d5e9 --- /dev/null +++ b/l10n/gl.js @@ -0,0 +1,2213 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "unha conversa", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Participou nunha chamada con {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados"], + "You attended a call with {user1} and {user2}" : "Participou nunha chamada con {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Participou nunha chamada con {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Participou nunha chamada con {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Participou nunha chamada con {user1}, {user2}, {user3}, {user4}e {user5}", + "_%n other_::_%n others_" : ["outro","outros %n"], + "{actor} invited you to {call}" : "{actor} convidouno á {call}", + "You were invited to a conversation or had a call" : "Foi convidado a unha conversa ou tivo unha chamada", + "Other activities" : "Outras actividades", + "Talk" : "Parladoiro", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dámoslle a benvida a Parladoiro de Nextcloud!\nNesta conversa estará informado sobre as novas funcións dispoñíbeis no Parladoiro de Nextcloud.", + "## New in Talk %s" : "## Novo en Parladoiro %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora poden empregarse Microsoft Edge e Safari para participar en chamadas de voz e vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- As conversas individuais son agora persistentes e xa non se poden converter en conversas grupais por accidente. Ademais, cando un dos participantes abandona a conversa, a conversa xa non se elimina automaticamente. Só se os dous participantes abandonan, a conversa é eliminada do servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora pode notificar a todos os participantes publicando «@all» na parola", + "- With the \"arrow-up\" key you can repost your last message" : "- Coa tecla «frecha arriba» pode responder a súa última mensaxe", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Parladoiro xa admite ordes, envíe «/help» como mensaxe da parola para ver se a administración desta instancia configurou algunha", + "- With projects you can create quick links between conversations, files and other items" : "- Cos proxectos pode crear ligazóns rápidas entre conversas, ficheiros e outros elementos", + "- You can now mention guests in the chat" : "- Agora pode mencionar convidados na parola", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- As conversas agora poden ter un ástrago. Isto permitirá aos moderadores unirse á parola e chamar xa para preparar a reunión, mentres que os usuarios e convidados teñen que agardar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Agora pode responder directamente ás mensaxes fornecendolle aos demais usuarios máis contexto sobre o que trata a súa mensaxe", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A busca de conversas e participantes agora tamén filtrarán as conversas existentes, polo que é moito máis doado atopar conversas anteriores", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Agora pode engadir grupos de usuarios personalizados ás conversas cando a aplicación de círculos está instalada", + "- Check out the new grid and call view" : "- Bótelle unha ollada á nova grade e á vista de chamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Agora pode enviar e arrastrar e soltar ficheiros directamente desde o seu dispositivo á parola", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Os ficheiros compartidos ábrense agora dentro da vista da parola coas aplicacións de visor", + "- You can now search for chats and messages in the unified search in the top bar" : "- Agora pode buscar parolas e mensaxes na busca unificada na barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Adube as súas mensaxes con «emojis» do selector de «emoji»", + "- You can now change your camera and microphone while being in a call" : "- Agora pode cambiar de cámara e de micrófono mentres está nunha chamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Déalle ás súas conversas un contexto cunha descrición e ábraas para que os usuarios conectados poidan atopalas e unirse a elas", + "- See a read status and send failed messages again" : "- Vexa o estado de lectura e envíe de novo as mensaxes falladas", + "- Raise your hand in a call with the R key" : "- Erga a man nunha chamada coa tecla R.", + "- Join the same conversation and call from multiple devices" : "- Únase á mesma conversa e chame desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envíe mensaxes de voz, comparta a súa localización ou os datos de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Engada grupos a unha conversa e engadiranse automaticamente novos membros ao grupo como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Amosase unha vista previa do seu son e vídeo antes de unirse a unha chamada", + "- You can now blur your background in the newly designed call view" : "- Agora pode esvaer o seu fondo na vista de chamada de novo deseño", + "- Moderators can now assign general and individual permissions to participants" : "- Os moderadores agora poden asignar permisos xerais e individuais aos participantes", + "- You can now react to chat messages" : "- Agora pode reaccionar ás mensaxes de parola", + "- In the sidebar you can now find an overview of the latest shared items" : "- Agora pode atopar na barra lateral unha vista xeral dos últimos elementos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use unha enquisa para recoller as opinións dos demais ou definir unha cita", + "- Configure an expiration time for chat messages" : "- Configure un tempo de caducidade para as mensaxes de parola", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie chamadas sen notificar aos demais en grandes conversas. Pode enviar notificacións de chamadas individuais unha vez iniciada a chamada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envíe mensaxes de parola sen avisar aos destinatarios por se non é urxente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Agora os «emojis» pódense completar automaticamente escribindo «:»", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Ligar varios elementos usando o novo selector intelixente escribindo unha «/»", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Agora os moderadores poden crear salas parciais (precisa dunha infraestrutura de alto rendemento)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Agora pódense gravar as chamadas (precisa dunha infraestrutura de alto rendemento)", + "- Conversations can now have an avatar or emoji as icon" : "- Agora as conversas poden ter un avatar ou un «emoji» como icona", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Agora están dispoñíbeis fondos virtuais ademais do fondo esvaído nas videochamadas", + "- Reactions are now available during calls" : "- Agora as reaccións están dispoñíbeis durante as chamadas", + "- Typing indicators show which users are currently typing a message" : "- Os indicadores de escritura amosan cales son os usuarios que están a escribiren unha mensaxe", + "- Groups can now be mentioned in chats" : "- Agora pódense mencionar grupos nas parolas", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- As gravacións de chamadas transcríbense automaticamente se se rexistra unha aplicación de provedor de transcrición", + "- Chat messages can be translated if a translation provider app is registered" : "- As mensaxes da parola pódense traducir se se rexistra unha aplicación de provedor de tradución", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** agora pódese usar en mensaxes de _parola_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Xa están dispoñíbeis os puntos de ancoraxe web para implementar bots. Consulte a documentación para obter máis información en https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Definir un lembrete nunha mensaxe de parola para volver ser notificado máis tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use a conversa **Notas para un mesmo** para tomar notas e compartir información entre os teus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- As lendas permiten enviar unha mensaxe cun ficheiro ao mesmo tempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Agora é visíbel o vídeo do relator mentres se comparte a pantalla e as reaccións ás chamadas están animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Agora os autores e moderadores que teñan accedido poden editar as mensaxes durante 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Os borradores de mensaxes sen enviar agora gárdanse no seu navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- A parola de texto agora pódese facer de xeito federado con outros servidores de Parladoiro", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Agora os moderadores poden prohibir contas e convidados para evitar que se reincorporen a unha conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- As próximas chamadas de eventos de calendario vinculados e as substitucións «fóra da oficina» agora amosanse nas conversas", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- As chamadas agora pódense facer de xeito federado con outros servidores de Parladoiro (precisa dunha infraestrutura de alto rendemento)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentación do cliente de escritorio Parladoiro de Nextcloud para Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resume as gravacións de chamadas e as mensaxes non lidas nas parolas co Asistente de Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Xuntanzas melloradas co recoñecemento de convidados a través do seu enderezo de correo-e, importación de listas de participantes, borradores para enquisas e descarga de listas de participantes nas chamadas", + "- Archive conversations to stay focused" : "- Arquivar as conversas para manter a focalización", + "- Schedule a meeting into your calendar from within a conversation" : "- Programe unha xuntanza no seu calendario desde unha conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Busque mensaxes da conversa actual directamente na barra lateral dereita", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vexa máis conversas na primeira ollada coa nova lista compacta (activala nos axustes de Parladoiro)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- As conversas de xuntanza agora sincronizan o título e a descrición do calendario e están agochadas cun filtro de busca ata que estean preto do comezo", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marcar as conversas como sensíbels na configuración de notificacións, para agochar o contido da mensaxe da lista de conversas e notificacións", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para recibir notificacións emerxentes durante o modo «Non molestar» marque as conversas como importantes.", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Engadir outros participantes a unha chamada individualizada para crear unha nova chamada de grupo sobre a marcha", + "- Use threads to keep your chat and discussions organized" : "- Use fíos para manter a parola e os debates organizados", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Agora están dispoñíbeis as transcricións en directo durante a chamada (precisa da ExApp de transcrición en directo e dunha infraestrutura de alto rendemento)", + "- Moderators can now pin messages so they are kept at the top" : "- Agora os moderadores poden fixar mensaxes para mantelas na parte superior", + "- Schedule a message to send it at a later time" : "- Programar unha mensaxe para enviala máis tarde", + "_All %n participant_::_All %n participants_" : ["O único (%n) participante","Os %n participantes"], + "Talk updates ✅" : "Actualizacións de Parladoiro ✅", + "Reaction deleted by author" : "Reacción eliminada polo autor", + "{actor} created the conversation" : "{actor} creou a conversa", + "You created the conversation" : "Vde. creou a conversa", + "System created the conversation" : "O sistema creou a conversa", + "An administrator created the conversation" : "Alguén da administración do sitio creou a conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomeou a conversa de «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Vde. renomeou a conversa de «%1$s» a «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Alguén da administración do sitio renomeou a conversa de «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} definiu a descrición", + "You set the description" : "Definiu a descrición", + "An administrator set the description" : "Alguén da administración do sitio definiu a descrición", + "{actor} removed the description" : "{actor} retirou a descrición", + "You removed the description" : "Vde. retirou a descrición", + "An administrator removed the description" : "Alguén da administración do sitio retirou a descrición", + "You started a silent call" : "Vde. iniciou unha chamada silandeira", + "Outgoing silent call" : "Chamada silandeira saínte", + "{actor} started a silent call" : "{actor} iniciou unha chamada silandeira", + "Incoming silent call" : "Chamada silandeira entrante", + "You started a call" : "Vde. iniciou unha chamada", + "Outgoing call" : "Chamada saínte", + "{actor} started a call" : "{actor} iniciou unha chamada", + "Incoming call" : "Chamada entrante", + "{actor} joined the call" : "{actor} uniuse á chamada", + "You joined the call" : "Vde. uniuse á chamada", + "{actor} left the call" : "{actor} deixou a chamada", + "You left the call" : "Vde. deixou a chamada", + "{actor} unlocked the conversation" : "{actor} desbloqueou a conversa", + "You unlocked the conversation" : "Vde. desbloqueou a conversa", + "An administrator unlocked the conversation" : "Alguén da administración do sitio desbloqueou a conversa", + "{actor} locked the conversation" : "{actor} bloqueou a conversa", + "You locked the conversation" : "Vde. bloqueou a conversa", + "An administrator locked the conversation" : "Alguén da administración do sitio bloqueou a conversa", + "{actor} limited the conversation to the current participants" : "{actor} limitou a conversa aos participantes actuais", + "You limited the conversation to the current participants" : "Vde. limitou a conversa aos participantes actuais", + "An administrator limited the conversation to the current participants" : "Alguén da administración do sitio limitou a conversa aos participantes actuais", + "{actor} opened the conversation to registered users" : "{actor} abriu a conversa aos usuarios rexistrados", + "You opened the conversation to registered users" : "Vde. abriu a conversa aos usuarios rexistrados", + "An administrator opened the conversation to registered users" : "Alguén da administración do sitio abriu a conversa aos usuarios rexistrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "You opened the conversation to registered users and users created with the Guests app" : "Vde. abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Alguén da administración do sitio abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "The conversation is now open to everyone" : "A conversa agora está aberta a todos", + "{actor} opened the conversation to everyone" : "{actor} abriu a conversa a todos", + "You opened the conversation to everyone" : "Vde. abriu a conversa a todos", + "{actor} restricted the conversation to moderators" : "{actor} restrinxiu a conversa aos moderadores", + "You restricted the conversation to moderators" : "Vde. restrinxiu a conversa aos moderadores", + "{actor} started breakout rooms" : "{actor} iniciou salas parciais", + "You started breakout rooms" : "Vde. iniciou salas parciais", + "{actor} stopped breakout rooms" : "{actor} detivo as salas parciais", + "You stopped breakout rooms" : "Vde. detivo as salas parciais", + "{actor} allowed guests" : "{actor} permitiu convidados", + "You allowed guests" : "Vde. permitiu convidados", + "An administrator allowed guests" : "Alguén da administración do sitio permitiu convidados", + "{actor} disallowed guests" : "{actor} retirou o permiso de convidados", + "You disallowed guests" : "Vde. retirou o permiso de convidados", + "An administrator disallowed guests" : "Alguén da administración do sitio retirou o permiso de convidados", + "{actor} set a password" : "{actor} definiu un contrasinal", + "You set a password" : "Vde. definiu un contrasinal", + "An administrator set a password" : "Alguén da administración do sitio definiu un contrasinal", + "{actor} removed the password" : "{actor} retirou o contrasinal", + "You removed the password" : "Vde. retirou o contrasinal", + "An administrator removed the password" : "Alguén da administración do sitio retirou o contrasinal", + "{actor} added {user}" : "{actor} engadiu a {user}", + "You joined the conversation" : "Vde. uniuse á conversa", + "{actor} joined the conversation" : "{actor} uniuse á conversa", + "You added {user}" : "Vde. engadiu a {user}", + "{actor} added you" : "{actor} engadiuno a Vde.", + "An administrator added you" : "Alguén da administración do sitio engadiuno a Vde.", + "An administrator added {user}" : "Alguén da administración do sitio engadiu a {user}", + "You left the conversation" : "Vde. deixou a conversa", + "{actor} left the conversation" : "{actor} deixou a conversa", + "{actor} removed {user}" : "{actor} retirou a {user}", + "You removed {user}" : "Vde. retirou a {user}", + "{actor} removed you" : "{actor} retirouno. a Vde.", + "An administrator removed you" : "Alguén da administración do sitio retirouno a Vde.", + "An administrator removed {user}" : "Alguén da administración do sitio retirou a {user}", + "{actor} invited {federated_user}" : "{actor} convidou a {federated_user}", + "You invited {federated_user}" : "Vde. convidou a {federated_user}", + "You accepted the invitation" : "Vde. aceptou o convite", + "{actor} invited you" : "Vde. foi convidado por {actor}", + "An administrator invited you" : "Vde. foi convidado por unha persoa de administración", + "An administrator invited {federated_user}" : "Alguén da administración do sitio convidou a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptou o convite", + "{actor} removed {federated_user}" : "{actor} retirou a {federated_user}", + "You removed {federated_user}" : "Vde. retirou a {federated_user}", + "You declined the invitation" : "Vde. declinou o convite", + "An administrator removed {federated_user}" : "Alguén da administración do sitio retirou a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declinou o convite", + "{actor} added group {group}" : "{actor} engadiu o grupo {group}", + "You added group {group}" : "Vde. engadiu o grupo {group}", + "An administrator added group {group}" : "Alguén da administración do sitio engadiu o grupo {group}", + "{actor} removed group {group}" : "{actor} retirou o grupo {group}", + "You removed group {group}" : "Vde. retirou o grupo {group}", + "An administrator removed group {group}" : "Alguén da administración do sitio retirou o grupo {group}", + "{actor} added team {circle}" : "{actor} engadiu o equipo {circle}", + "You added team {circle}" : "Vde. engadiu o equipo {circle}", + "An administrator added team {circle}" : "Alguén da administración do sitio engadiu o equipo {circle}", + "{actor} removed team {circle}" : "{actor} retirou o equipo {circle}", + "You removed team {circle}" : "Vde. retirou o equipo {circle}", + "An administrator removed team {circle}" : "Alguén da administración do sitio retirou o equipo {circle}", + "{actor} added {phone}" : "{actor} engadiu a {phone}", + "You added {phone}" : "Vde. engadiu a {phone}", + "An administrator added {phone}" : "Alguén da administración do sitio engadiu a {phone}", + "{actor} removed {phone}" : "{actor} retirou a {phone}", + "You removed {phone}" : "Vde. retirou a {phone}", + "An administrator removed {phone}" : "Alguén da administración do sitio retirou a {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoveu a {user} a moderador", + "You promoted {user} to moderator" : "Vde. promoveu a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} promoveuno a Vde. a moderador", + "An administrator promoted you to moderator" : "Alguén da administración do sitio promoveuno a Vde. a moderador", + "An administrator promoted {user} to moderator" : "Alguén da administración do sitio promoveuno a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} relegou a {user} de moderador", + "You demoted {user} from moderator" : "Vde. relegou a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} relegouno a Vde. de moderador", + "An administrator demoted you from moderator" : "Alguén da administración do sitio relegouno a Vde. de moderador", + "An administrator demoted {user} from moderator" : "Alguén da administración do sitio relegou a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartiu un ficheiro que xa non está dispoñíbel", + "You shared a file which is no longer available" : "Vde. compartiu un ficheiro que xa non está dispoñíbel", + "File shares are currently not supported in federated conversations" : "A compartición de ficheiros non está admitida actualmente nas conversas federadas", + "The shared location is malformed" : "A localización compartida ten un formato incorrecto", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurou Matterbridge para sincronizar esta conversa con outras salas de parolas", + "You set up Matterbridge to synchronize this conversation with other chats" : "Vde. configurou Matterbridge para sincronizar esta conversa con outras salas de parolas", + "{actor} created thread {title}" : "{actor} creou o fío {title}", + "You created thread {title}" : "Vde. creou o fío {title}", + "{actor} renamed thread {title}" : "{actor} renomeou o fío {title}", + "You renamed thread {title}" : "Vde. renomeou o fío {title}", + "{actor} updated the Matterbridge configuration" : "{actor} actualizou a configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Vde. actualizou a configuración do Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} retirou a configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Vde. retirou a configuración do Matterbridge", + "{actor} started Matterbridge" : "{actor} iniciou Matterbridge", + "You started Matterbridge" : "Vde. iniciou Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detivo Matterbridge", + "You stopped Matterbridge" : "Vde. detivo Matterbridge", + "{actor} deleted a message" : "{actor} eliminou unha", + "You deleted a message" : "Vde. eliminou unha mensaxe", + "{actor} edited a message" : "{actor} editou unha mensaxe", + "You edited a message" : "Vde. editou unha mensaxe", + "{actor} pinned a message" : "{actor} fixou unha mensaxe", + "You pinned a message" : "Vde. fixou unha mensaxe", + "{actor} unpinned a message" : "{actor} desprendeu unha mensaxe", + "Message was automatically unpinned" : "A mensaxe foi desprendida automaticamente", + "You unpinned a message" : "Vde. desprendeu unha mensaxe", + "{actor} deleted a reaction" : "{actor} eliminou unha reacción", + "You deleted a reaction" : "Vde. eliminou unha reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Definiu a caducidade da mensaxe en %n semana","Definiu a caducidade da mensaxe en %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Definiu a caducidade da mensaxe en %n día","Definiu a caducidade da mensaxe en %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Definiu a caducidade da mensaxe en %n hora","Definiu a caducidade da mensaxe en %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Definiu a caducidade da mensaxe en %n minuto","Definiu a caducidade da mensaxe en %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} definiu a caducidade da mensaxe en %n semana","{actor} definiu a caducidade da mensaxe en %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} definiu a caducidade da mensaxe en %n día","{actor} definiu a caducidade da mensaxe en %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} definiu a caducidade da mensaxe en %n hora","{actor} definiu a caducidade da mensaxe en %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} definiu a caducidade da mensaxe en %n minuto","{actor} definiu a caducidade da mensaxe en %n minutos"], + "{actor} disabled message expiration" : "{actor} desactivou a caducidade da mensaxe", + "You disabled message expiration" : "Vde. desactivou a caducidade da mensaxe", + "{actor} cleared the history of the conversation" : "{actor} limpou o historial da conversa", + "You cleared the history of the conversation" : "Vde. limpou o historial da conversa", + "{actor} set the conversation picture" : "{actor} definiu a imaxe da conversa", + "You set the conversation picture" : "Vde. definiu a imaxe da conversa", + "{actor} removed the conversation picture" : "{actor} retirou a imaxe da conversa", + "You removed the conversation picture" : "Vde. retirou a imaxe da conversa", + "{actor} ended the poll {poll}" : "{actor} rematou a enquisa {poll}", + "You ended the poll {poll}" : "Vde. rematou a enquisa {poll}", + "{actor} started the video recording" : "{actor} iniciou a gravación en vídeo", + "You started the video recording" : "Vde. iniciou a gravación en vídeo", + "{actor} stopped the video recording" : "{actor} detivo a gravación en vídeo", + "You stopped the video recording" : "Vde. detivo a gravación en vídeo", + "{actor} started the audio recording" : "{actor} iniciou a gravación do son", + "You started the audio recording" : "Vde. comezou a gravación do son", + "{actor} stopped the audio recording" : "{actor} parou a gravación do son", + "You stopped the audio recording" : "Vde. parou a gravación do son", + "The recording failed" : "Produciuse un fallo na gravación", + "Someone voted on the poll {poll}" : "Alguén votou na enquisa {poll}", + "Message deleted by author" : "Mensaxe eliminada polo autor", + "Message deleted by {actor}" : "Mensaxe eliminada por {actor}", + "Message deleted by you" : "Mensaxe eliminada por Vde.", + "Deleted user" : "Usuario eliminado", + "Unknown number" : "Número descoñecido", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (convidado)", + "Missed call" : "Chamada perdida", + "Unanswered call" : "Chamada sen resposta", + "Call ended (Duration {duration})" : "Chamada rematada (Duración {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada rematou, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} rematou a chamada (duración {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Rematou a chamada con %n convidado, por mor de ter acadado a duración máxima da chamada (duración {duration})","Rematou a chamada con %n convidados, por mor de ter acadado a duración máxima da chamada (duración {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Rematou a chamada con %n convidado (duración {duration})","Rematou a chamada con %n convidados (duración {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} rematou a chamada con %n convidado (duración {duration})","{actor} rematou a chamada con %n convidados (duración {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1} ended (Duration {duration})" : "Rematou a chamada con {user1} (duración {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} rematou a chamada con {user1} (duración {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1} e {user2}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Rematou a chamada con {user1} e {user2} (duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} rematou a chamada con {user1} e {user2} (duración {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2} e {user3}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2} e {user3} (duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2} e {user3} (duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3} e {user4}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3} e {user4} (duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2}, {user3} e {user4} (duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5} (duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5} (duración {duration})", + "Message of {user} in {conversation}" : "Mensaxe de {user} en {conversation}", + "Message of {user}" : "Mensaxe de {user}", + "Message of a deleted user in {conversation}" : "Mensaxe dun usuario eliminado en {conversation}", + "Talk conversations" : "Conversas no Parladoiro", + "Talk to %s" : "Parladoiro con %s", + "An error occurred. Please contact your administrator." : "Produciuse un erro. Póñase en contacto cua administración desta instancia.", + "Storage quota exceeded" : "Superouse a cota de almacenamento", + "File not found" : "Non se atopou o ficheiro", + "File is not shared, or shared but not with the user" : "O ficheiro non está compartido, ou compartido, pero non co usuario", + "No account available to delete." : "Non hai conta dispoñíbel para eliminar.", + "Poll" : "Enquisa", + "Password needs to be set" : "É necesario definir o contrasinal", + "Uploading the file failed" : "Produciuse un fallo ao enviar o ficheiro", + "No image file provided" : "Non se forneceu ningún ficheiro de imaxe", + "File is too big" : "O ficheiro é grande de máis", + "Invalid file provided" : "O ficheiro fornecido non é válido", + "Invalid image" : "Imaxe incorrecta", + "Unknown filetype" : "Tipo de ficheiro descoñecido", + "Talk mentions" : "Mencións en Parladoiro", + "More conversations" : "Máis conversas", + "Say hi to your friends and colleagues!" : "Saúde aos seus amigos e compañeiros!", + "No unread mentions" : "Non hai mencións sen ler", + "Call in progress" : "Chamada en proceso", + "You were mentioned" : "Vde. foi mencionado", + "Write to conversation" : "Escribir á conversa", + "Writes event information into a conversation of your choice" : "Escribe a información do evento nunha conversa da súa escolla", + "Missing email field in header line" : "Falta o campo de correo-e na liña de cabeceira", + "Following lines are invalid: %s" : "As seguintes liñas non son válidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s convidouno á conversa «%2$s».", + "You were invited to conversation \"%s\"." : "Foi convidado á conversa «%s».", + "Conversation invitation" : "Convite á conversa", + "Scheduled time" : "Hora programada", + "Description" : "Descrición", + "You can also dial-in via phone with the following details" : "Tamén pode chamar por teléfono cos seguintes detalles", + "Dial-in information" : "Información sobre a marcación", + "Meeting ID" : "ID da xuntanza", + "Your PIN" : "O seu PIN", + "Click the button below to join the lobby now." : "Prema no botón de embaixo para unirse agora ao ástrago.", + "Click the link below to join the lobby now." : "Prema na ligazón de embaixo para unirse agora ao ástrago.", + "Join lobby for \"%s\"" : "Unirse ao ástrago de «%s»", + "Click the button below to join the conversation now." : "Prema no botón de embaixo para unirse agora á conversa.", + "Click the link below to join the conversation now." : "Prema na ligazón de embaixo para unirse agora á conversa.", + "Join \"%s\"" : "Unirse a «%s»", + "Meeting" : "Xuntanza", + "Password request: %s" : "Solicitude de contrasinal: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Failed to upload call recording" : "Produciuse un fallo ao enviar a gravación da chamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "O servidor de gravación non foi quen de enviar a gravación da chamada {call}. Póñase en contacto coa administración da instancia.", + "Share to chat" : "Compartir na parola", + "Dismiss notification" : "Rexeitar a notificación", + "Call recording now available" : "Xa está dispoñíbel a gravación de chamadas", + "The recording for the call in {call} was uploaded to {file}." : "A gravación da chamada en {call} foi enviada a {file}.", + "Transcript now available" : "Xa está dispoñíbel a transcrición", + "The transcript for the call in {call} was uploaded to {file}." : "A transcrición da chamada en {call} foi enviada a {file}.", + "Failed to transcript call recording" : "Produciuse un fallo ao transcribir a gravación da chamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor non foi quen de transcribir a gravación en {file} para a chamada en {call}. Póñase en contacto coa administración.", + "Call summary now available" : "Xa está dispoñíbel o resumo da chamada", + "The summary for the call in {call} was uploaded to {file}." : "O resumo da chamada en {call} foi enviada a {file}.", + "Failed to summarize call recording" : "Produciuse un fallo ao resumir a gravación da chamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor non foi quen de resumir a gravación en {file} para a chamada en {call}. Póñase en contacto coa administración.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} convidouno a unirse a {roomName} en {remoteServer}", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "{user1} invited you to a federated conversation" : "{user} convidouno a unha conversa federada", + "Someone reacted" : "Alguén reaccionou", + "New message" : "Nova mensaxe", + "Reminder" : "Lembrete", + "Someone mentioned you" : "Alguén mencionouno a Vde.", + "Notification" : "Notificación", + "Someone reacted in a private conversation" : "Alguén reaccionou nunha conversa privada", + "You received a message in a private conversation" : "Recibíu unha mensaxe nunha conversa privada", + "Reminder in a private conversation" : "Lembrete nunha conversa privada", + "Someone mentioned you in a private conversation" : "Alguén mencionouno nunha conversa privada", + "Notification in a private conversation" : "Notificación nunha conversa privada", + "Reminder: You in {call}" : "Lembrete: Vde. está na chamada {call}", + "Reminder: {user} in {call}" : "Lembrete: {user} está na chamada {call}", + "Reminder: Deleted user in {call}" : "Lembrete: usuario eliminado da chamada {call}", + "Reminder: {guest} (guest) in {call}" : "Lembrete {guest} (convidado) na chamada {call}", + "Reminder: Guest in {call}" : "Lembrete: convidado na chamada {call}", + "{user} reacted with {reaction}" : "{user} reaccionou con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reaccionou con {reaction} en {call}", + "Deleted user reacted with {reaction} in {call}" : "O usuario eliminado reaccionou con {reaction} en {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidado) reaccionou con {reaction} en {call}", + "Guest reacted with {reaction} in {call}" : "O convidado reaccionou con {reaction} en {call}", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado en {call}", + "{guest} (guest) in {call}" : "{guest} (convidado) en {call}", + "Guest in {call}" : "Convidado en {call}", + "{user} sent you a private message" : "{user} envioulle unha mensaxe privada", + "{user} sent a message in conversation {call}" : "{user} enviou unha mensaxe na conversa {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado enviou unha mensaxe na conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (convidado) enviou unha mensaxe na conversa {call}", + "A guest sent a message in conversation {call}" : "Un convidado enviou unha mensaxe na conversa {call}", + "{user} replied to your private message" : "{user} respondeu á súa mensaxe privada", + "{user} replied to your message in conversation {call}" : "{user} respondeu á súa mensaxe na conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario eliminado respondeu á súa mensaxe na conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidado) respondeu á súa mensaxe na conversa {call}", + "A guest replied to your message in conversation {call}" : "Un convidado respondeu á súa mensaxe na conversa {call}", + "Reminder: You in private conversation {call}" : "Lembrete: Vde. está nunha conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Lembrete: un usuario eliminado da conversa privada {call}", + "Reminder: {user} in private conversation" : "Lembrete: {user} está nunha conversa privada {call}", + "Reminder: You in conversation {call}" : "Lembrete: Vde. está na conversa {call}", + "Reminder: {user} in conversation {call}" : "Lembrete: {user} está na conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Lembrete: un usuario eliminado da conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Lembrete: {guest} (convidado) está na conversa {call}", + "Reminder: A guest in conversation {call}" : "Lembrete: un convidado na conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionou con {reaction} á súa mensaxe privada", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionou con {reaction} á súa mensaxe na conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionou con {reaction} á súa mensaxe na conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidado) reaccionou con {reaction} á súa mensaxe na conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidado reaccionou con {reaction} á túa mensaxe na conversa {call}", + "{user} mentioned you in a private conversation" : "{user} mencionouno nunha conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionou o grupo {group} na conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionou o equipo {team} na conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionou a todos na conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} mencionouno na conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionou o grupo {group} na conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuario eliminado mencionou o equipo {team} na conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionou a todos na conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado mencionouno na conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidado) mencionou ao grupo {group} na conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidado) mencionou o equipo {team} na conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidado) mencionou a todos na conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (convidado) mencionouno na conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Un convidado mencionou ao grupo {group} na conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Un convidado mencionou o equipo {team} na conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Un convidado mencionou a todos na conversa {call}", + "A guest mentioned you in conversation {call}" : "Un convidado mencionouno na conversa {call}", + "View message" : "Ver a mensaxe", + "Dismiss reminder" : "Rexeitar o lembrete", + "View chat" : "Ver a parola", + "{user} invited you to a group conversation: {call}" : "{user} convidouno a unha conversa de grupo: {call}", + "Join call" : "Unirse á chamada", + "Answer call" : "Responder á chamada", + "{user} would like to talk with you" : "A {user} gustaríalle conversar con Vde.", + "Call back" : "Devolver a chamada", + "You missed a call from {user}" : "Perdeu unha chamada de {user}", + "Accept call" : "Aceptar a chamada", + "Incoming phone call from {call}" : "Chamada de teléfono entrante de {call}", + "You missed a phone call from {call}" : "Perdeu unha chamada de teléfono de {call}", + "A group call has started in {call}" : "Iniciouse unha chamada de grupo en {call}", + "You missed a group call in {call}" : "Perdeu unha chamada de grupo en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando o contrasinal para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} tentou solicitar o contrasinal para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguén está solicitando o contrasinal para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguén tentou solicitar o contrasinal para acceder a {file}", + "Open settings" : "Abrir os axustes", + "Hosted signaling server added" : "Engadiuse o servidor de sinalización aloxado", + "The hosted signaling server is now configured and will be used." : "O servidor de sinalización aloxado agora está configurado e vai ser empregado.", + "Hosted signaling server removed" : "Retirouse o servidor de sinalización aloxado", + "The hosted signaling server was removed and will not be used anymore." : "Foi retirado o servidor de sinalización aloxado e xa non vai ser usado.", + "Hosted signaling server changed" : "Cargouse servidor de sinalización aloxado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "A conta do servidor de sinalización aloxado cambiou o estado de «{oldstatus}» a «{newstatus}»", + "pending" : "pendente", + "active" : "activa", + "expired" : "caducada", + "blocked" : "bloqueada", + "error" : "erro", + "The certificate of {host} expires in {days} days" : "O certificado de {host} caduca en {days} días", + "The certificate of {host} expired" : "Caducou o certificado de {host}", + "Contact via Talk" : "Contacte mediante Parladoiro", + "Open Talk" : "Abrir Parladoiro", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Webinar" : "Seminario web", + "Conversations" : "Conversas", + "Messages in current conversation" : "Mensaxes na conversa actual", + "{user}" : "{user}", + "Messages" : "Mensaxes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensaxes noutras conversas", + "One-to-one rooms always need to show the other users avatar" : "As salas individuais sempre deben amosar o avatar dos outros usuarios", + "Invalid emoji character" : "Carácter «emoji» non válido", + "Invalid background color" : "Cor de fondo non válida", + "Avatar image is not square" : "A imaxe do avatar non é cadrada", + "Room {number}" : "Sala {number}", + "Other" : "Outro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Produciuse un fallo na solicitude de proba porque o servidor de proba non é accesíbel. Ténteo de novo máis tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hai un problema coa autenticación desta instancia. Quizais non sexa accesíbel desde o exterior para verificar o seu URL.", + "Something unexpected happened." : "Ocorreu algo non agardado.", + "The URL is invalid." : "O URL non é valido", + "An HTTPS URL is required." : "Precísase dun URL HTTPS", + "The email address is invalid." : "O enderezo de correo-e non é válido", + "The language is invalid." : "O idioma non é valido", + "The country is invalid." : "O país non é valido", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hai un problema coa petición de proba. Verifique os seus rexistros para obter máis información.", + "Too many requests are send from your servers address. Please try again later." : "Envíanse demasiadas solicitudes desde o enderezo do servidor. Ténteo de novo máis tarde.", + "There is already a trial registered for this Nextcloud instance." : "Xa hai unha proba rexistrada para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Ocorreu algo non previsto. Ténteo de novo máis tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Produciuse un fallo na solicitude de proba porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "Trial requested but failed to get account information. Please check back later." : "Proba solicitada pero non conseguiu a información da conta. Ténteo de novo máis tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hai un problema coa autenticación desta solicitude. Quizais non sexa accesíbel desde o exterior para verificar o seu URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Produciuse un fallo ao recuperar información da conta porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hai un problema ao recuperar a información da conta. Verifique os seus rexistros para recuperar máis información.", + "There is no such account registered." : "Non hai rexistrada unha conta deste tipo.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Produciuse un fallo ao recuperar información da conta porque non é posibel acadar o servidor de proba. Ténteo de novo máis tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "Produciuse un fallo ao eliminar a conta do servidor de sinalización aloxado. Ténteo de novo máis tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Produciuse un fallo ao eliminar a conta porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hai un problema ao eliminar a conta. Verifique os seus rexistros para obter máis información.", + "Too many requests are sent from your servers address. Please try again later." : "Envíanse demasiadas solicitudes desde o enderezo do servidor. Ténteo de novo máis tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Produciuse un fallo ao eliminar a conta porque non é posíbel acadar o servidor de proba. Ténteo de novo máis tarde.", + "Note to self" : "Notas para un mesmo", + "A place for your private notes, thoughts and ideas" : "Un lugar para as súas notas, pensamentos e ideas privadas", + "Transcript is AI generated and may contain mistakes" : "A transcrición é xerada por IA e pode conter erros", + "Summary is AI generated and may contain mistakes" : "O resumo é xerado por IA e pode conter erros", + "Let's get started!" : "Comecemos!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Parladoiro de Nextcloud** é unha plataforma de comunicación segura en aloxamento autónomo que se integra perfectamente co ecosistema NextCloud.\n\n#### Funcionalidades principais de Parladoiro de NextCloud:\n\n* Parola e mensaxería en parolas privadas e en grupo\n* Chamadas de vox e vídeo\n* Compartir ficheiros e integración con outras aplicacións NextCloud\n* Axustes personalizábeis de conversa, moderación e controis de privacidade\n* Web, escritorio e móbil (iOS e Android)\n* Comunicación privada e segura\n\nObteña máis información na [Documentación do usuario](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Dámoslle a benvida a Parladoiro de Nextcloud\n\nParladoiro de Nextcloud é unha aplicación de mensaxería privada e potente que se integra con NextCloud. Parole en conversas privadas ou en grupo, participe en chamadas de voz e vídeo, organice seminarios e eventos, personalice as súas conversas e moito máis.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatar textos para crear mensaxes melloradas\n\nEn Parladoiro de Nextcloud, pode usar a sintaxe Markdown para formatar as súas mensaxes. Por exemplo, aplique o formatado como **grosa** ou *cursiva*, ou `destaque textos como código`. Pode incluso crear táboas e engadir títulos ao seu texto.\n\nNecesita arranxar un erro de escritura ou cambiar o formatado? Edite a mensaxe premendo en «Editar mensaxe» no menú da mensaxe.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Engada anexos e ligazóns\n\nEngada ficheiros do seu NextCloud Hub empregando o botón «+». Comparta elementos de ficheiros e varias aplicacións de NextCloud. Algunhas aplicacións incluso admiten trebellos interactivos, por exemplo, a aplicación de Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deixe que as conversas flúan: mencione aos usuarios, reaccione ás mensaxes e máis…\n\nPode mencionar a todos nunha conversa empregando %s ou mencionar participantes específicos escribindo «@» e seleccionando o seu nome da lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Pode responder mensaxes, reenvialas a outras parolas e persoas ou copiar o contido da mensaxe.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faga máis cousas co Selector intelixente\n\nSó ten que escribir «/» ou ir ao menú «+» para abrir o selector intelixente onde pode achegar diversos contidos ás súas mensaxes. Pode configurar o selector intelixente para poder engadir elementos de aplicacións de NextCloud, GIF, localizacións de mapas, contido xerado por IA e moito máis.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Xestionar os axustes da conversa\n\nNo menú de conversas, pode acceder a varios axustes para xestionar as súas conversas, como:\n* Editar a información da conversa\n* Xestionar as notificacións\n* Aplicar numerosas regras de moderación\n* Configurar o acceso e a seguranza\n* Activar bots\n* E moito máis!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antiga e Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Arxentina", + "American Samoa" : "Samoa americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Illas de Åland", + "Azerbaijan" : "Acerbaixán", + "Bosnia and Herzegovina" : "Bosnia e Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélxica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Barein", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomeu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Sultanato de Brunei", + "Bolivia, Plurinational State of" : "Bolivia, Estado plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio e Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Belarús", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Illas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República democrática do", + "Central African Republic" : "República Centro Africana", + "Congo" : "Congo", + "Switzerland" : "Suíza", + "Côte d'Ivoire" : "Costa do Marfin", + "Cook Islands" : "Illas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Nadal", + "Cyprus" : "Chipre", + "Czechia" : "República Checa", + "Germany" : "Alemaña", + "Djibouti" : "Xibutí", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Alxeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Exipto", + "Western Sahara" : "Sáhara Ocidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fidxi", + "Falkland Islands (Malvinas)" : "Illas Malvinas (Falkland)", + "Micronesia, Federated States of" : "Micronesia, Estados Federados da", + "Faroe Islands" : "Illas Feroe", + "France" : "Francia", + "Gabon" : "Gabón", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido da Gran Bretaña e Irlanda do Norte", + "Grenada" : "Granada", + "Georgia" : "Xeorxia", + "French Guiana" : "Guaiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Xibraltar", + "Greenland" : "Grenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Illas Xeorxia do Sur e Sandwich do Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bisau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illa Heard e Illas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico do Océano Índico", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica do", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Xersei", + "Jamaica" : "Xamaica", + "Jordan" : "Xordania", + "Japan" : "Xapón", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Quirguistán", + "Cambodia" : "Camboxa", + "Kiribati" : "Kiribatí", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "San Cristovo e Nevis", + "Korea, Democratic People's Republic of" : "Corea, República democrática popular de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Illas Caimán", + "Kazakhstan" : "Cazaquistán", + "Lao People's Democratic Republic" : "República Popular Democrática de Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marrocos", + "Monaco" : "Mónaco", + "Moldova, Republic of" : "Moldavia, República da", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martín (parte francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illas Marshall", + "North Macedonia" : "Macedonia do Norte", + "Mali" : "Malí", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Illas Marianas do Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nova Caledonia", + "Niger" : "Níxer", + "Norfolk Island" : "Illa Norfolk", + "Nigeria" : "Nixeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Baixos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Celandia", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nova Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro e Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Estado de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Reunión", + "Romania" : "Romanía", + "Serbia" : "Serbia", + "Russian Federation" : "Federación Rusa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Illas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascension e Tristán da Cuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Illas Svalbard e Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudán do Sur", + "Sao Tome and Principe" : "San Tomé e Príncipe", + "El Salvador" : "O Salvador", + "Sint Maarten (Dutch part)" : "San Martín (parte neerlandesa)", + "Syrian Arab Republic" : "República Árabe de Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Illas Turcas e Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Territorios Franceses do Sur", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Taxiquistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor do Leste", + "Turkmenistan" : "Turquemenistán", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidade e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, República Unida de", + "Ukraine" : "Ucraína", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Illas exteriores menores dos Estados Unidos", + "United States of America" : "Estados Unidos de America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekuistán", + "Holy See" : "Santa Sé (Vaticano)", + "Saint Vincent and the Grenadines" : "San Vicente e as Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Illas Virxes, Británicas", + "Virgin Islands, U.S." : "Illas Virxes, EE.UU.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Illas Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "Mayotte" : "Maiote", + "South Africa" : "Suráfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Cimbabue", + "Background blur" : "Esvaer o fondo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Non foi posíbel comprobar a compatibilidade de carga de WASM. Comprobe manualmente se o seu servidor web serve ficheiros «.wasm».", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "O seu servidor web non está configurado correctamente para entregar ficheiros «.wasm». Este é normalmente un problema coa configuración de Nginx. Para o esvaemento do fondo, necesita un axuste para entregar tamén ficheiros «.wasm». Compare a súa configuración de Nginx coa configuración recomendada na nosa documentación.", + "Talk configuration values" : "Valores de configuración de Parladoiro", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forzar a duración dunha chamada só é posíbel co cron do sistema. Active o cron do sistema ou retirar a configuración «max_call_duration».", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Os valores pequenos de «max_call_duration» (actualmente definidos en %d) non son aplicábeis por mor de limitacións técnicas. O traballo en segundo plano só se executa cada 5 minutos, úseo baixo a súa responsabilidade.", + "Federation" : "Federación", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Recoméndase encarecidamente configurar «memcache.locking» cando estea activada a federación de Parladoiro.", + "High-performance backend" : "Infraestrutura de alto rendemento", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "A infraestrutura de alto rendemento está sen configurar: a execución de Parladoiro de Nextcloud sen a infraestrutura de alto rendemento só se adapta a chamadas moi pequenas (máx. 2-3 participantes). Configure a infraestrutura de alto rendemento para garantir que as chamadas con varios participantes funcionen sen problemas.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Executar a infraestrutura de alto rendemento en modo «conversation_cluster» está obsoleto e non vai estar admitido na próxima versión. Hoxe en día, a infraestrutura de alto rendemento admite a agrupación en clústeres reais, que é o que debería ser empregado.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "A definición de varias infraestruturas de alto rendemento está en desuso e xa non se admitirá na próxima versión. En troques, débese configurar un balanceador de carga xunto cos servidores de sinalización en clúster e configurarse nos axustes de Parladoiro.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A chave pública almacenada para o algoritmo usado %1$s non coincide coa chave privada almacenada. Execute %2$s para arranxar o problema.", + "High-performance backend not configured correctly. Run %s for details." : "A infraestrutura de alto rendemento non está configurada correctamente. Execute %s para obter detalles-", + "High-performance backend not configured correctly" : "A infraestrutura de alto rendemento non está configurada correctamente", + "Error: Cannot connect to server" : "Erro: Non foi posíbel conectar co servidor", + "Error: Server did not respond with proper JSON" : "Erro: o servidor non respondeu con JSON axeitado", + "Error: Certificate expired" : "Erro: caducou o certificado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: a hora do sistema do servidor Nextcloud e do servidor da infraestrutura de alto rendemento non están sincronizadas. Asegúrese de que ambos os servidores estean conectados a un servidor de hora ou sincronice manualmente a súa hora.", + "Could not get version" : "Non foi posíbel obter a versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erro: Versión en execución: {version}; Debe actualizar o servidor para que sexa compatíbel con esta versión de Parladoiro", + "Error: Server responded with: {error}" : "Erro: o servidor respondeu con: {error}", + "Error: Unknown error occurred" : "Erro: produciuse un erro descoñecido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advertencia: Versión en execución: {versión}; O servidor non admite todas as funcionalidades desta versión de Talk, faltan as funcionalidades: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "É moi recomendábel configurar unha memoria tobo cando se executa Parladoiro de Nextcloud cunha infraestrutura de alto rendemento.", + "Client Push" : "Notificación automática ao cliente", + "Client Push is installed, this improves the punctuality of Talk notifications." : "A notificación automática ao cliente está instalada, isto mellora a puntualidade das notificacións de Parladoiro.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} non está instalada. Isto pode provocar un atraso nas notificacións de Parladoiro.", + "Recording backend" : "Infraestrutura de gravación", + "Using the recording backend requires a High-performance backend." : "O uso da infraestrutura de gravación precisa dunha infraestrutura de alto rendemento.", + "No recording backend configured" : "Non hai ningunha infraestrutura de gravación configurada", + "SIP configuration" : "Configuración SIP", + "Using the SIP functionality requires a High-performance backend." : "O uso da funcionalidade SIP precisa dunha infraestrutura de alto rendemento.", + "No SIP backend configured" : "Non hai ningunha infraestrutura SIP configurada", + "Invalid date, date format must be YYYY-MM-DD" : "Data incorrecta, o formato da data debe ser AAAA-MM-DD", + "Conversation not found" : "Non se atopou a conversa", + "Path is already shared with this conversation" : "A ruta xa está compartida con esta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Parolas, conferencias de vídeo e son empregando WebRTC ", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Parolas, conferencias de vídeo e son empregando WebRTC \n\n* 💬 **Parolar** Parladoiro de Nextcloud inclúe parolas de texto simple, que lle permite compartir ou enviar ficheiros desde a súa aplicación Nextcloud Ficeiros ou dispositivo local e mencionar a outros participantes.\n* 👥 **Chamadas privadas, grupais, públicas e protexidas por contrasinal!** Convide a alguén, a todo un grupo ou envíe unha ligazón pública para convidar a unha chamada.\n* 🌐 **Parolas federadas** Parole con outros usuarios de Nextcloud nos seus servidores\n* 💻 **Compartir pantalla!** Comparta a súa pantalla cos participantes na súa chamada.\n* 🚀 **Integración con outras aplicacións de Nextcloud** como Ficheiros, Calendario, Estado do usuario, Taboleiro, Fluxo, Mapas, Selector intelixente, Contactos, Gabeta e moitos máis.\n* 🌉 **Sincronizar con outras solucións de parola** Con [Matterbridge]https://github.com/42wim/matterbridge/) integrado en Parladoiro, pode sincronizar de xeito doado moitas outras solucións de parolas con Parladoiro de Nextcloud e viceversa.", + "Leave call" : "Abandonar a chamada", + "Navigating away from the page will leave the call in {conversation}" : "A navegación fora da páxina provocará o abandono da chamada en {conversation}", + "Stay in call" : "Mantérse na chamada", + "Error occurred when getting the conversation information" : "Produciuse un erro ao obter a información da conversa", + "Discuss this file" : "Debater sobre este ficheiro", + "Share this file with others to discuss it" : "Comparta este ficheiro cos demais para debater sobre el", + "Share this file" : "Compartir este ficheiro", + "Join conversation" : "Unirse á conversa", + "This conversation is password-protected." : "Esta conversa está protexida con contrasinal.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Detectamos varios intentos de contrasinal non válidos desde o seu IP. Por mor diso, o seu próximo intento estará limitado a 30 segundos.", + "The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.", + "Password" : "Contrasinal", + "Submit" : "Enviar", + "Error requesting the password." : "Produciuse un erro ao solicitar o contrasinal.", + "Request password" : "Solicitar contrasinal", + "This conversation has ended" : "Esta conversa rematou", + "Error occurred when joining the conversation" : "Produciuse un erro ao unirse á conversa", + "Close Talk sidebar" : "Pechar a barra lateral de Parladoiro", + "Open Talk sidebar" : "Abrir a barra lateral de Parladoiro", + "Everyone" : "Todos", + "Users and moderators" : "Usuarios e moderadores", + "Moderators only" : "Só os moderadores", + "Disable calls" : "Desactivar chamadas", + "Save changes" : "Gardar cambios", + "Saving …" : "Gardando…", + "Saved!" : "Gardado!", + "Limit to groups" : "Límite para grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cando se selecciona polo menos un grupo, só as persoas dos grupos listados poden formar parte das conversas.", + "Guests can still join public conversations." : "Os convidados aínda poden unirse a conversas públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Os usuarios que xa non poidan usar Parladoiro seguirán figurando como participantes nas súas conversas anteriores e tamén se conservarán as súas mensaxes de parolas.", + "Limit using Talk" : "Limitar o uso de Parladoiro", + "Limit creating a public and group conversation" : "Limitar a creación dunha conversa pública e de grupo", + "Limit creating conversations" : "Limitar a creación de conversas", + "Limit starting a call" : "Limitar o inicio dunha chamada", + "Limit starting calls" : "Limitar o inicio de chamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cando inicia unha chamada, todos os que teñen acceso á conversa poden unirse á chamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Neste servidor están instalados os seguintes bots. Na documentación pode atopar detalles sobre como {linkstart1}construír o seu propio bot{linkend} ou unha {linkstart2}lista de bots{linkend} para activar no seu servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Non hai ningún bot instalado neste servidor. Na documentación pode atopar detalles sobre como {linkstart1}construír o seu propio bot{linkend} ou unha {linkstart2}lista de bots{linkend} para activar no seu servidor.", + "Description is not provided" : "Non se fornece a descrición", + "Locked for moderators" : "Bloqueado para moderadores", + "Enabled" : "Activado", + "Disabled" : "Desactivado", + "Bots settings" : "Axustes dos bots", + "State" : "Estado", + "Name" : "Nome", + "Last error" : "Último erro", + "Total errors count" : "Reconto total de erros", + "Find more bots" : "Atopar máis bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Os servidores de confianza pódense configurar na {linkstart}Páxina de axustes da compartición{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "As parolas e as chamadas federadas xa funcionan. O manexo de anexos chegará nunha versión futura.", + "Enable Federation in Talk app" : "Activar a federación na aplicación Parladoiro", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permitir que os usuarios sexan convidados a conversas federadas", + "Allow users to invite federated users into conversation" : "Permitir que os usuarios conviden a usuarios federados á conversa", + "Only allow to federate with trusted servers" : "Permitir federarse só con servidores de confianza", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Cando se selecciona polo menos un grupo, só as persoas dos grupos listados poden convidar usuarios federados a conversas.", + "Groups allowed to invite federated users" : "Grupos autorizados para convidar usuarios federados", + "Select groups …" : "Seleccionar grupos…", + "All messages" : "Todas as mensaxes", + "@-mentions only" : "Só as mencións con @", + "Off" : "Apagado", + "General settings" : "Axustes xerais", + "Default notification settings" : "Axustes predeterminados das notificacións", + "Default group notification" : "Notificación predeterminada de grupo", + "Default group notification for new groups" : "Notificación predeterminada de grupo para novos grupos", + "Integration into other apps" : "Integración noutras aplicacións", + "Allow conversations on files" : "Permitir conversas en ficheiros", + "Allow conversations on public shares for files" : "Permitir conversas en comparticións públicas de ficheiros", + "End-to-end encrypted calls" : "Chamadas cifradas de extremo a extremo", + "Enable encryption" : "Activar a cifraxe", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "As chamadas cifradas de extremo a extremo cunha ponte SIP configurada precisan dunha versión máis recente da infraestrutura de alto rendemento e da ponte SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Os clientes móbiles non admiten chamadas cifradas de extremo a extremo polo momento.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Premendo no botón superior á información do formulario envíase aos servidores de Struktur AG. Pode atopar máis información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendentes", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Caducado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "Non foi posíbel solicitar a proba. Ténteo de novo máis tarde.", + "The account could not be deleted. Please try again later." : "Non foi posíbel eliminar a conta. Ténteo de novo máis tarde.", + "Hosted High-performance backend" : "Infraestrutura de alto rendemento aloxada", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "O noso socio Struktur AG ofrece un servizo onde se pode solicitar un servidor de sinalización aloxado. Para isto, só ten que cumprimentar o seguinte formulario e o seu Nextcloud solicitarao. Unha vez que o servidor estea configurado para Vde., as credenciais encheranse automaticamente. Isto sobrescribirá os axustes do servidor de sinalización existente.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se a súa conta de infraestrutura de alto rendemento inclúe a funcionalidade STUN e/ou TURN, actualizaranse os axustes en consecuencia.", + "URL of this Nextcloud instance" : "URL desta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nome completo do usuario que solicita a proba", + "Email of the user" : "Correo-e do usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar a proba do servidor de sinalización", + "You can see the current status of your hosted signaling server in the following table." : "Pode ver o estado actual do servidor de sinalización aloxado na seguinte táboa.", + "Status" : "Estado", + "Created at" : "Creado ás", + "Expires at" : "Caduca ás", + "Limits" : "Limites", + "STUN included" : "STUN incluído", + "Yes" : "Si", + "No" : "Non", + "TURN included" : "TURN incluído", + "Delete the signaling server account" : "Eliminar a conta do servidor de sinalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Pode instalar Matterbridge para vincular Parladoiro de Nextcloud con outros servizos, visite a súa {linkstart1}páxina de GitHub{linkend} para obter máis detalles. A descarga e a instalación da aplicación pode levar un tempo. No caso de que se esgote, instáleo manualmente desde a {linkstart2}tenda de aplicacións de Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "O binario do Matterbridge ten permisos incorrectos. Asegúrese de que o ficheiro binario do Matterbridge é propiedade do usuario correcto e que se pode executar. Pódeo atopar en «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Non se atopou o binario do Matterbridge ou non foi posíbel executalo.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Tamén pode configurar a ruta ao binario d Matterbridge manualmente a través da configuración. Consulte a {linkstart}documentación de integración con Matterbridge{linkend} para obter máis información.", + "Downloading …" : "Descargando…", + "Install Talk Matterbridge" : "Instalar «Talk Matterbridge»", + "An error occurred while installing the Matterbridge app" : "Produciuse un erro ao instalar a aplicación Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Produciuse un erro ao instalar «Talk Matterbridge». Instáleo manualmente", + "Failed to execute Matterbridge binary." : "Produciuse un fallo ao executar o binario de Matterbridge.", + "Matterbridge integration" : "Integración de Matterbridge", + "Enable Matterbridge integration" : "Activar a integración de Matterbridge", + "Status: Checking connection" : "Estado: comprobando a conexión", + "OK: Running version: {version}" : "Correcto: executando a versión: {version}", + "Error: Server seems to be a Signaling server" : "Erro: o servidor parece ser un servidor de sinalización", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: os tempos do sistema do servidor Nextcloud e do servidor da infraestrutura de gravación non están sincronizados. Asegúrese de que ambos os servidores estean conectados a un servidor de tempo ou sincronice manualmente a súa hora.", + "Recording backend URL" : "URL da infraestrutura de gravación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "Disabled for all calls" : "Desactivado para todas as chamadas", + "Enabled for all calls" : "Activado para todas as chamadas", + "Configurable on conversation level by moderators" : "Configurábel a nivel de conversa polos moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "O axuste de PHP «upload_max_filesize» ou «post_max_size» só permitirá enviar ficheiros ata {maxUpload}.", + "Recording backend settings saved" : "Gardáronse os axustes da infraestrutura de gravación", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Os moderadores poderán activar o consentimento a nivel de conversa. O consentimento para gravar será necesario para cada participante antes de unirse a cada chamada desta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "O consentimento para ser gravado será necesario para cada participante antes de unirse a cada chamada.", + "The consent to be recorded is not required." : "Non é necesario o consentimento para ser gravado.", + "Recording backend configuration is only possible with a High-performance backend." : "A configuración da infraestrutura de gravación só é posíbel cunha infraestrutura de alto rendemento.", + "Add a new recording backend server" : "Engadir un novo servidor de infraestrutura de gravación", + "Shared secret" : "Segredo compartido", + "Recording consent" : "Consentimento de gravación", + "Recording transcription" : "Transcrición da gravación", + "Automatically transcribe call recordings with a transcription provider" : "Transcribe automaticamente as gravacións de chamadas cun provedor de transcrición", + "Automatically summarize call recordings with transcription and summary providers" : "Resume automaticamente as gravacións de chamadas con provedores de transcrición e resumo", + "SIP configuration saved!" : "Configuración SIP gardada!", + "SIP configuration is only possible with a High-performance backend." : "A configuración SIP só é posíbel cunha infraestrutura de alto rendemento.", + "Enable SIP Dial-out option" : "Activar a opción de marcación SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "O servidor de sinalización ten que ser actualizado para a funcionalidade de marcación SIP compatíbel.", + "Do not show SIP Dial-out caller number" : "Non amosar o número de chamada saínte de SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "O número anónimo debe aparecer como «descoñecido» ou «número agochado» para o destinatario da chamada", + "Dial-out number" : "Número de chamada saínte", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número con formato E164 usado como número de chamada alternativo para chamadas saíntes", + "Dial-out prefix" : "Prefixo de marcado", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefixo ao número de usuario configurado para as chamadas saíntes (o predeterminado é «+»)", + "Restrict SIP configuration" : "Restrinxir a configuración SIP", + "Enable SIP configuration" : "Activar a configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Só os usuarios dos seguintes grupos poden activar SIP nas conversas que moderan", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información envíase en correos-e de convite e amosase na barra lateral a todos os participantes.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL da infraestrutura de Parladoiro", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Funcionalidades dispoñíbeis", + "Error: Websocket connection failed" : "Erro: produciuse un fallo na conexión de Websocket.", + "Error code" : "Código de erro", + "Error message" : "Mensaxe de erro", + "Error: Websocket connection failed. Check browser console" : "Erro: produciuse un fallo na conexión de Websocket. Comprobe a consola do navegador", + "High-performance backend URL" : "URL da infraestrutura de alto rendemento", + "Missing High-performance backend warning hidden" : "Falta a advertencia de infraestrutura de alto rendemento agochada", + "High-performance backend settings saved" : "Gardáronse os axustes da infraestrutura de alto rendemento", + "Nextcloud Talk setup not complete" : "A configuración de Parladoiro de Nextcloud non está completa", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Teña en conta que nas chamadas con máis de 2 participantes sen a infraestrutura de alto rendemento, é probábel que os participantes experimenten problemas de conectividade e provoquen unha gran carga nos dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale a infraestrutura de alto rendemento para garantir que as chamadas con varios participantes funcionen sen problemas.", + "Nextcloud portal" : "Portal de Nextcloud", + "Quick installation guide" : "Guía de instalación rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "A infraestrutura de alto rendemento é necesaria para chamadas e conversas con varios participantes. Sen a infraestrutura, todos os participantes teñen que enviar o seu propio vídeo individualmente para cada outro participante, o que probabelmente causará problemas de conectividade e unha alta carga nos dispositivos participantes.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "É moi recomendábel configurar unha memoria tobo distribuída cando se use Parladoiro de Nextcloud xunto cunha infraestrutura de alto rendemento.", + "Add High-performance backend server" : "Engadir un servidor de infraestrutura de alto rendemento", + "Warn about connectivity issues in calls with more than 2 participants" : "Avisar sobre problemas de conectividade nas chamadas con máis de 2 participantes", + "STUN server URL" : "URL do servidor STUN", + "The server address is invalid" : "O enderezo do servidor non é válido", + "STUN settings saved" : "Gardáronse os axustes de STUN", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "O servidor STUN usase para determinar o enderezo IP público dos participantes que se atopan detrás dun encamiñador.", + "Add a new STUN server" : "Engadir un novo servidor STUN", + "{schema} scheme must be used with a domain" : "O esquema {schema} debe usarse cun dominio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "Só {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Correcto: o servidor TURN devolveu satisfactoriamente candidatos ICE", + "Error: No working ICE candidates returned by the TURN server" : "Erro: o servidor TURN non devolveu ningún candidato ICE traballando", + "Testing whether the TURN server returns ICE candidates" : "Probe se o servidor TURN devolve candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN", + "TURN server URL" : "URL do servidor TURN", + "TURN server secret" : "Servidor TURN segredo", + "TURN server protocols" : "Protocolos de servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Utilízase un servidor TURN para proxy do tráfico dos participantes detrás dunha devasa. Se os participantes individuais non poden conectarse con outros, probabelmente sexa preciso un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obter instrucións de configuración.", + "TURN settings saved" : "Gardáronse os axustes de TURN", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Engadir un novo servidor TURN", + "Failed" : "Fallado", + "OK" : "Aceptar", + "Checking …" : "Comprobando…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallo: WebAssembly está desactivado ou non é compatíbel neste navegador. Active WebAssembly ou utilice un navegador compatíbel con el para facer a comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallo: O servidor web non devolveu correctamente os ficheiros «.wasm» e «.tflite». Consulte a sección «Requisitos do sistema» na documentación de Parladoiro.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Conforme: Os ficheiros «.wasm» e «.tflite» foron devoltos correctamente polo servidor web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Semella que a configuración de PHP e Apache non é compatíbel. Teña en conta que PHP só se pode usar co módulo MPM_PREFORK e PHP-FPM só se pode usar co módulo MPM_EVENT.", + "Web server setup checks" : "Comprobacións da configuración do servidor web", + "Files required for virtual background can be loaded" : "Pódense cargar os ficheiros necesarios para o fondo virtual", + "Federated user" : "Usuario federado", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas parciais", + "Number of breakout rooms" : "Número de salas parciais", + "You can create from 1 to 20 breakout rooms." : "Vde. pode crear de 1 a 20 salas parciais.", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar automaticamente os participantes", + "Manually assign participants" : "Asignar manualmente os participantes", + "Allow participants to choose" : "Permitir que os participantes escollan", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas parciais", + "Reset" : "Restabelecer", + "Delete breakout rooms" : "Eliminar salas parciais", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Perderanse as salas parciais e os axustes actuais", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes sen asignar", + "Back" : "Atrás", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Engadir o participante «{user}»", + "Now" : "Agora", + "Invalid calendar selected" : "Seleccionou un calendario incorrecto", + "Invalid start time selected" : "Seleccionou unha hora de inicio incorrecta", + "Invalid end time selected" : "Seleccionou unha hora de remate incorrecta", + "Unknown error occurred" : "Produciuse un erro descoñecido", + "Sending no invitations" : "Non enviar convites", + "{participant0} will receive an invitation" : "{participant0} recibirá un convite", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} recibirán un convite", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e %n máis recibirán un convite","{participant0}, {participant1} e outros %n máis recibirán un convite"], + "Invite {user}" : "Convidar a {user}", + "Invite all users and emails in this conversation" : "Convidar a todos os usuarios e correos-e nesta conversa", + "Meeting created" : "Xuntanza creada", + "Upcoming meetings" : "Próximas xuntanzas", + "Loading …" : "Cargando…", + "No upcoming meetings" : "Non hai xuntanzas próximas", + "Schedule a meeting" : "Programar unha xuntanza", + "Meeting title" : "Título da xuntanza", + "From" : "Desde", + "To" : "Ata", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "No other participants to send invitations to." : "Non hai outros participantes aos que enviar convites.", + "Add attendees" : "Engadir asistentes", + "Save" : "Gardar", + "Search participants" : "Buscar participantes", + "No results" : "Sen resultados", + "Done" : "Feito", + "Disable live transcription" : "Desactivar a transcrición en directo", + "Disable live translation" : "Desactivar a tradución en directo", + "Original language: {languageName}" : "Idioma orixinal ({languageName})", + "Translated language" : "Idioma traducido", + "Translated language: {languageName}" : "Idioma traducido ({languageName})", + "Raise hand" : "Erguer a man", + "Raise hand (R)" : "Erguer a man (R)", + "Lower hand" : "Baixar a man", + "Lower hand (R)" : "Baixar a man (R)", + "Exit full screen (F)" : "Saír da pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista do relator", + "Grid view" : "Ver como grade", + "Error when trying to load the available live transcription languages" : "Produciuse un erro ao tentar cargar os idiomas de transcrición en directo dispoñíbeis", + "Failed to enable live transcription" : "Produciuse un fallo ao activar a transcrición en directo", + "Failed to enable live translations" : "Produciuse un fallo ao activar a tradución en directo", + "Failed to disable live translations" : "Produciuse un fallo ao desactivar a tradución en directo", + "Recording consent is required" : "É necesario o consentimento para gravar", + "This conversation is read-only" : "Esta conversa é só de lectura", + "Conversation not found or not joined" : "Non se atopou a conversa ou non se uniu a ela", + "Lobby is still active and you're not a moderator" : "O ástrago segue activo e Vde. non é un moderador", + "Connection failed" : "Produciuse un fallo de conexión", + "Reload" : "Volver cargar", + "{nickName} raised their hand." : "{nickName} ergueu a man.", + "A participant raised their hand." : "Un participante ergueu a man.", + "Collapse stripe" : "Contraer pola raia", + "Expand stripe" : "Estender a franxa", + "Previous page of videos" : "Páxina anterior de vídeos", + "Next page of videos" : "Seguinte páxina de vídeos", + "Connecting …" : "Conectando…", + "Calling …" : "Chamando…", + "Waiting for {user} to join the call" : "Agardando a que {user} se una á chamada", + "Waiting for others to join the call …" : "Agardando que outros se unan á chamada…", + "You can invite others in the participant tab of the sidebar" : "Pode convidar a outros na lapela do participante da barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Pode convidar a outros na lapela do participante da barra lateral ou compartir esta ligazón para convidalos!", + "Share this link to invite others!" : "Comparta esta ligazón para convidar a outros!", + "Copy link" : "Copiar a ligazón", + "You are not allowed to enable audio" : "Vde. non ten permiso para activar o son", + "No audio. Click to select device" : "Sen son. Prema para seleccionar o dispositivo", + "Mute audio" : "Silenciar", + "Mute audio (M)" : "Silenciar (M)", + "Unmute audio" : "Desactivar o silencio", + "Unmute audio (M)" : "Desactivar o silencio (M)", + "None" : "Ningún", + "Select a microphone" : "Seleccione un micrófono", + "Select a speaker" : "Seleccione un altofalante", + "Microphone settings" : "Axustes do micrófono", + "Check devices" : "Comprobar os dispositivos", + "Access to camera was denied" : "Foi denegado o acceso á cámara", + "Error while accessing camera: It is likely in use by another program" : "Produciuse un erro ao acceder á cámara: é probábel que estea en uso por outro programa", + "Error while accessing camera" : "Produciuse un erro ao acceder á cámara", + "You have been muted by a moderator" : "Vde. foi silenciado por un moderador", + "Hide presenter video" : "Agochar o vídeo do presentador", + "You are not allowed to enable video" : "Vde. non ten permiso para activar o vídeo", + "No video. Click to select device" : "Sen vídeo. Prema para seleccionar o dispositivo", + "Disable video" : "Desactivar o vídeo", + "Disable video (V)" : "Desactivar o vídeo (V)", + "Enable video" : "Activar o vídeo", + "Enable video (V)" : "Activar o vídeo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar o vídeo — A súa conexión interromperase brevemente ao activar o vídeo por primeira vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar o vídeo (V) — A súa conexión interromperase brevemente ao activar o vídeo por primeira vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activar vídeo. A súa conexión será interrompida brevemente ao activar o vídeo por primeira vez", + "Select a video device" : "Seleccione un dispositivo de vídeo", + "Show presenter" : "Amosar o presentador", + "You" : "Vde.", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Amosar a súa pantalla", + "Stop following" : "Deixar de seguir", + "Connection could not be established …" : "Non foi posíbel estabelecer a conexión…", + "Connection was lost and could not be re-established …" : "Perdeuse a conexión e non foi posíbel restabelecela…", + "Connection could not be established. Trying again …" : "Non foi posíbel estabelecer a conexión. Tentando de novo…", + "Connection lost. Trying to reconnect …" : "Perdeuse a conexión. Tentando conectar de novo…", + "Connection problems …" : "Problemas de conexión…", + "Collapse" : "Contraer", + "Expand" : "Estender", + "You need to be logged in to upload files" : "Ten que ter accedido para enviar ficheiros", + "Drop your files to upload" : "Arrastre os seus ficheiros para envialos", + "Conversation messages" : "Mensaxes de conversa", + "Scroll to bottom" : "Desprazarse ata o final", + "Post message" : "Publicar a mensaxe", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Favorito", + "Banned users" : "Usuarios expulsados", + "Manage the list of banned users in this conversation." : "Xestionar a lista de usuarios expulsados desta conversa.", + "Manage bans" : "Xestionar as expulsións", + "No banned users" : "Non hai ningún usuario expulsado", + "Banned by:" : "Expulsado por:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Agochar os detalles", + "Show details" : "Amosar os detalles", + "Unban" : "Retirar a expulsión", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Pode cambiar o título e a descrición no {linkstart}Calendario ↗{linkend}.", + "Error while updating conversation name" : "Produciuse un erro ao actualizar o nome da conversa", + "Error while updating conversation description" : "Produciuse un erro ao actualizar a descrición da conversa", + "Enter a name for this conversation" : "Introduza un nome para esta conversa", + "Edit conversation name" : "Editar o nome da conversa", + "Edit conversation description" : "Editar a descrición da conversa", + "Enter a description for this conversation" : "Introduza unha descrición para esta conversa", + "Picture" : "Imaxe", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Nesta conversa é posíbel activar estes bots. Póñase en contacto coa administración da súa instancia para instalar máis bots neste servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Neste servidor non hai bots instalados. Póñase en contacto coa administración da súa instancia para instalar bots neste servidor.", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Breakout rooms" : "Salas parciais", + "Manage breakout rooms" : "Xestionar as salas parciais", + "Set up breakout rooms for this conversation" : "Preparar as salas parciais para esta conversa", + "Please select a valid PNG or JPG file" : "Seleccione un ficheiro PNG ou JPG válido", + "Choose your conversation picture" : "Escolla a imaxe da súa conversa", + "Choose" : "Escoller", + "Error setting conversation picture" : "Produciuse un erro ao axustar a imaxe da conversa", + "Could not set the conversation picture: {error}" : "Non foi posíbel definir a imaxe da conversa: {error}", + "Error cropping conversation picture" : "Produciuse un erro ao recortar a imaxe da conversa", + "Error removing conversation picture" : "Produciuse un erro ao retirar a imaxe da conversa", + "Set emoji as conversation picture" : "Definir o «emoji» como imaxe da conversa", + "Set background color for conversation picture" : "Definir a cor de fondo para a imaxe da conversa", + "Upload conversation picture" : "Enviar a imaxe da conversa", + "Choose conversation picture from files" : "Escoller a imaxe da conversa dos ficheiros", + "Remove conversation picture" : "Retirar a imaxe da conversa", + "The file must be a PNG or JPG" : "O ficheiro debe ser PNG ou JPG", + "Set picture" : "Definir a imaxe", + "Default permissions modified for {conversationName}" : "Modificáronse os permisos predeterminados para {conversationName}", + "Could not modify default permissions for {conversationName}" : "Non foi posíbel modificar os permisos predeterminados para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editar os permisos predeterminados dos participantes nesta conversa. Estes axustes non afectan aos moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen os permisos nesta sección, perderanse os permisos personalizados previamente asignados aos participantes individuais.", + "All permissions" : "Todos os permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Os participantes teñen permisos para iniciar unha chamada, unirse a unha chamada, activar o son e o vídeo e compartir a pantalla.", + "Restricted" : "Restrinxida", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Os participantes poden unirse ás chamadas, mais non poden activar o son nin o vídeo nin compartir a pantalla ata que un moderador lles conceda manualmente os permisos.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Axustes da conversa", + "Basic Info" : "Información básica", + "Personal" : "Persoal", + "Moderation" : "Moderación", + "Setup overview" : "Vista xeral da configuración", + "Live transcription" : "Transcrición en directo", + "Enable live transcription" : "Activar a transcrición en directo", + "Breakout Rooms" : "Salas parciais", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de perigo", + "Archive conversation" : "Arquivar a conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "As conversas arquivadas agóchanse da lista de conversas de xeito predeterminado. Porén, seguirán a aparecer cando busque o nome da conversa ou acceda a unha lista de conversas arquivadas.", + "Do you really want to leave \"{displayName}\"?" : "Confirma que quere abandonar «{displayName}»?", + "You can archive this conversation instead." : "En troques, pode arquivar esta conversa.", + "Leave conversation" : "Abandonar a conversa", + "You need to promote a new moderator before you can leave the conversation" : "Debe promover un novo moderador antes de poder abandonar a conversa", + "Delete conversation" : "Eliminar a conversa", + "Do you really want to delete \"{displayName}\"?" : "Confirma que quere eliminar «{displayName}»?", + "Error while deleting conversation" : "Produciuse un erro ao eliminar a conversa", + "Delete all chat messages" : "Eliminar todas as mensaxes da parola", + "Do you really want to delete all messages in \"{displayName}\"?" : "Confirma que quere eliminar todas as mensaxes de «{displayName}»?", + "Error while clearing chat history" : "Produciuse un erro ao limpar o historial da parola", + "Be careful, these actions cannot be undone." : "Vaia a modo, estas accións non se poden desfacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Unha vez que se sae dunha conversación, para unirse de novo a unha conversa pechada, é necesario un convite. Pódese volver a unir a unha conversa aberta en calquera momento.", + "Permanently delete this conversation." : "Eliminar definitivamente esta conversa.", + "Delete chat messages" : "Eliminar as mensaxes das parolas", + "Permanently delete all the messages in this conversation." : "Eliminar definitivamente todas as mensaxes desta conversa.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas"], + "Custom expiration time" : "Tempo de caducidade personalizado", + "Message expiration disabled" : "Foi desactivada a caducidade da mensaxe", + "Message expiration set: {duration}" : "Definición da caducidade da mensaxe: {duration}", + "Error when trying to set message expiration" : "Produciuse un erro ao tentar definir a caducidade da mensaxe", + "Message expiration" : "Caducidade da mensaxe", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensaxes das parolas poden caducar após dun tempo determinado. Nota: Os ficheiros compartidos na parola non se eliminarán para o propietario, mais xa non se compartirán na conversa.", + "Set message expiration" : "Definir a caducidade da mensaxe", + "Current message expiration" : "Caducidade actual das mensaxes", + "Password copied to clipboard" : "O contrasinal foi copiado no portapapeis", + "Password could not be copied" : "Non foi posíbel copiar o contrasinal", + "Guest access" : "Acceso de convidado", + "Breakout rooms are not allowed in public conversations." : "Non se permiten as salas de parciais nas conversas públicas.", + "Allow guests to join this conversation via link" : "Permite que os convidados se unan a esta conversa mediante unha ligazón", + "Password protection" : "Protección por contrasinal", + "This conversation is password-protected. Guests need password to join" : "Esta conversa está protexida con contrasinal. Os convidados necesitan un contrasinal para unirse", + "Password protection is needed for public conversations" : "A protección por contrasinal é necesaria para as conversas públicas", + "Set a password" : "Definir un contrasinal", + "Change password" : "Cambiar o contrasinal", + "Enter new password" : "Introduza un novo contrasinal", + "Save password" : "Gardar o contrasinal", + "Copy password" : "Copiar o contrasinal", + "Guests are allowed to join this conversation via link" : "Os convidados poden unirse a esta conversa mediante a ligazón", + "Guests are not allowed to join this conversation" : "Os convidados non poden unirse a esta conversa", + "Resend invitations" : "Volver enviar os convites", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversa está aberta tanto para usuarios rexistrados como para usuarios creados coa aplicación Convidados (Guests)", + "This conversation is open to registered users" : "Esta conversa está aberta a usuarios rexistrados", + "This conversation is limited to the current participants" : "Esta conversa está limitada aos participantes actuais", + "You opened the conversation to both registered users and users created with the Guests app" : "Vde. abriu a conversa tanto aos usuarios rexistrados coma aos usuarios creados coa aplicación de Convidados (Guests)", + "Error occurred when opening or limiting the conversation" : "Produciuse un erro ao abrir ou limitar a conversa", + "Open conversation to registered users, showing it in search results" : "Abrir a conversa aos usuarios rexistrados, amosándoa nos resultados da busca", + "Also open to users created with the Guests app" : "Aberta tamén a usuarios creados coa aplicación Convidados (Guests)", + "Open conversation" : "Conversa aberta", + "Set language spoken in calls" : "Definir o idioma falado nas chamadas", + "Languages could not be loaded" : "Non foi posíbel cargar os idiomas", + "Loading languages …" : "Cargando os idiomas…", + "Invalid language" : "Idioma non válido", + "Default language (English)" : "Idioma predeterminado (Inglés)", + "Default live transcription language set" : "Definir o idioma predeterminado de transcrición en directo", + "Live transcription language set: {languageName}" : "Idioma de transcrición en directo definido: {languageName}", + "Error when trying to set live transcription language" : "Produciuse un erro ao tentar definir o idioma de transcrición en directo", + "Start time: {date}" : "Hora de inicio: {data}", + "Start time has been updated" : "Actualizouse a hora de inicio", + "Error occurred while updating start time" : "Produciuse un erro ao actualizar a hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ao activar o ástrago, os que non son moderadores serán retirados da chamada en proceso.", + "Enable lobby, restricting the conversation to moderators" : "Activar o ástrago, limitando a conversa aos moderadores", + "Meeting start time" : "Hora de inicio da xuntanza", + "Start time (optional)" : "Hora de inicio (opcional)", + "Import email participants" : "Importar participantes polo correo-e", + "You can import a list of email participants from a CSV file." : "Pode importar unha lista de participantes polo correo-e desde un ficheiro CSV.", + "Poll drafts" : "Borradores de enquisas", + "Browse poll drafts" : "Examinar os borradores de enquisas", + "Error occurred when locking the conversation" : "Produciuse un erro ao bloquear a conversa", + "Error occurred when unlocking the conversation" : "Produciuse un erro ao desbloquear a conversa", + "Lock conversation" : "Bloquear a conversa", + "This will also terminate the ongoing call." : "Isto tamén rematará a chamada en proceso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear a conversa para evitar que ninguén publique mensaxes ou inicie chamadas", + "Edit" : "Editar", + "More information" : "Máis información", + "Delete" : "Eliminar", + "Add new bridged channel to current conversation" : "Engadir unha nova canle ponte á conversa actual", + "unknown state" : "estado descoñecido", + "running" : "en execución", + "not running, check Matterbridge log" : "non esta en execución, comprobe o rexistro de Matterbridge", + "not running" : "non se está a executar", + "Bridge saved" : "Ponte gardada", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Co Matterbridge pode pontear canles de varios sistemas de mensaxería instantánea.", + "More info on Matterbridge" : "Máis información en Matterbridge.", + "Messaging systems" : "Sistemas de mensaxería", + "Enable bridge" : "Activar a ponte", + "Show Matterbridge log" : "Amosar o rexistro do Matterbridge", + "Log content" : "Contido do rexistro", + "Only moderators are allowed to mention @all" : "Só a moderación pode mencionar a @todos", + "All participants are allowed to mention @all" : "Todos os participantes poden mencionar a @todos", + "Participants are now allowed to mention @all." : "Agora os participantes poden mencionar a @todos.", + "Mentioning @all has been limited to moderators." : "A mención @todos foi limitada para a moderación.", + "Allow participants to mention @all" : "Permitir que os participantes mencionen a @todos", + "Mention permissions" : "Permisos de mención", + "Notifications" : "Notificacións", + "Notify about calls in this conversation" : "Notificar sobre as chamadas nesta conversa", + "Important conversation" : "Conversa importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Nas conversas importantes, ignorarase o estado «Non molestar»", + "Sensitive conversation" : "Conversa sensíbel", + "Message preview will be disabled in conversation list and notifications" : "A vista previa da mensaxe estará desactivada na lista de conversas e nas notificacións", + "Recording consent is required for calls in this conversation" : "É necesario o consentimento de gravación para as chamadas nesta conversa", + "Recording consent is not required for calls in this conversation" : "Non é necesario o consentimento de gravación para as chamadas nesta conversa", + "Recording consent requirement was updated" : "Actualizouse o requisito de consentimento de gravación", + "Error occurred while updating recording consent" : "Produciuse un fallo ao actualizar o consentimento de gravación", + "Recording Consent" : "Consentimento de gravación", + "Recording consent cannot be changed once a call or breakout session has started." : "Non é posíbel cambiar o consentimento de gravación unha vez que se inicia unha chamada ou unha sesión parcial.", + "Require recording consent before joining call in this conversation" : "Esixir o consentimento de gravación antes de unirse á chamada nesta conversa", + "Recording consent is required for all calls" : "O consentimento de gravación é necesario para todas as chamadas", + "SIP dial-in is now possible without PIN requirement" : "Agora non se precisa dun PIN para a marcación SIP", + "SIP dial-in is now enabled" : "Agora está activada a marcación SIP", + "SIP dial-in is now disabled" : "Agora está desactivada a marcación SIP", + "Error occurred when enabling SIP dial-in" : "Produciuse un erro ao activar a marcación SIP", + "Error occurred when disabling SIP dial-in" : "Produciuse un erro ao desactivar a marcación SIP", + "Phone and SIP dial-in" : "Marcación de teléfono e SIP", + "Enable phone and SIP dial-in" : "Activar a marcación de teléfono e SIP", + "Allow to dial-in without a PIN" : "Permitir marcar sen PIN", + "Ongoing" : "En proceso", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persoa aceptou","%n persoas aceptaron"], + "_%n person declined_::_%n people declined_" : ["%n persoa declinou","%n persoas declinaron"], + "_and %n other attachment_::_and %n other attachments_" : ["e outro anexo","e outros %n anexos"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "En {conversation}", + "View attachment" : "Ver o anexo", + "Join" : "Unirse", + "View conversation" : "Ver a conversa", + "View event on Calendar" : "Ver o evento no Calendario", + "Error while creating the conversation" : "Produciuse un erro ao crear a conversa", + "Hello, {displayName}" : "Ola, {displayName}", + "Start meeting now" : "Comezar a xuntanza agora", + "Give your meeting a title" : "Asígnelle un título á xuntanza", + "Create and copy link" : "Crear e copiar a ligazón", + "Create a new conversation" : "Crear unha nova conversa", + "Join open conversations" : "Unirse a conversas abertas", + "Call a phone number" : "Chamar a un número de teléfono", + "Scroll backward" : "Desprazarse cara atrás", + "Scroll forward" : "Desprazarse cara adiante", + "Schedule meetings" : "Programar xuntanzas", + "You don't have any upcoming meetings" : "Vde. non ten xuntanzas proximamente", + "Open calendar" : "Abre o calendario", + "Unread mentions" : "Mencións sen ler", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "As mensaxes nas que foi mencionado amosaranse aquí. Pode mencionar ás persoas escribindo @ seguido do seu nome", + "Upcoming reminders" : "Próximos lembretes", + "Message reminders" : "Lembretes de mensaxes", + "Set a reminder on a message to be notified" : "Defina un lembrete nunha mensaxe para ser notificado", + "Start a group conversation" : "Iniciar unha conversa en grupo", + "Create conversation" : "Crear conversa", + "Enter your name" : "Introduza o seu nome", + "Submit name and join" : "Envíe o nome e únase", + "Do you already have an account?" : "Xa ten unha conta?", + "Log in" : "Acceder", + "Error while verifying uploaded file" : "Produciuse un erro ao verificar o ficheiro enviado", + "Uploaded file is verified" : "O ficheiro enviado foi verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "O formato de contido é de valores separados por comas (CSV):
— A liña de cabeceira é necesaria e debe coincidir con «nome»,«correo» ou só «correo»
— Unha entrada por liña (p. ex., «Xan Carallás»,«xan@example.tld»)", + "Participants added successfully" : "Os participantes foron engadidos correctamente", + "Error while adding participants" : "Produciuse un erro ao engadir os participantes", + "Import a file" : "Importar un ficheiro", + "Browse" : "Examinar", + "Verifying uploaded file …" : "Verificando o ficheiro enviado…", + "This might take a moment" : "Isto pode levar un tempo", + "Send invitations" : "Enviando os convites", + "_%n invalid email_::_%n invalid emails_" : ["%n correo non válido","%n correos non válidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n correos xa foi importado ou duplicado","%n correos xa foron importados ou duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Enviouse %n convite","Enviáronse %n convites"], + "An error occurred while calling a phone number" : "Produciuse un erro ao chamar a un número de teléfono", + "Phone number could not be called: {error}" : "Non foi posíbel chamar ao número de teléfono: {error}", + "Phone number could not be called" : "Non foi posíbel chamar ao número de teléfono", + "Search participants or phone numbers" : "Buscar participantes ou números de teléfono", + "Creating the conversation …" : "Creando a conversa…", + "Mark as read" : "Marcar como lido", + "Mark as unread" : "Marcar como sen ler", + "Remove from favorites" : "Retirar de favoritos", + "Add to favorites" : "Engadir a favoritos", + "Unarchive conversation" : "Desarquivar a conversa", + "Ignore \"Do not disturb\"" : "Ignorar «Non molestar»", + "You need to promote a new moderator before you can leave the conversation." : "Debe promover un novo moderador antes de poder abandonar a conversa.", + "Conversation actions" : "Accións de conversa", + "Notify about calls" : "Notificar sobre as chamadas", + "Hide message text" : "Agochar o texto da mensaxe", + "Pending invitations" : "Convites pendentes", + "From {user} at {remoteServer}" : "De {user} en {remoteServer}", + "Decline invitation" : "Declinar o convite", + "Accept invitation" : "Aceptar o convite", + "No pending invitations" : "Non hai convites pendentes", + "Home" : "Inicio", + "Unread" : "Sen ler", + "Mentions" : "Mencións", + "Meetings" : "Xuntanzas", + "Alphabetically" : "Alfabeticamente", + "No followed threads" : "Ningún fío seguido", + "No matches found" : "Non se atopou ningunha coincidencia", + "No conversations found" : "Non se atopou ningunha conversa", + "You have no archived conversations." : "Vde. non ten conversas arquivadas.", + "Subscribe to an existing thread or start your own." : "Subscríbase a un fío existente ou inicie un propio", + "You have no unread mentions." : "Vde. non ten mencións sen ler.", + "You have no unread messages." : "Vde. non ten mensaxes sen ler.", + "An error occurred while performing the search" : "Produciuse un erro ao realizar a busca", + "Conversation list" : "Lista de conversas", + "Filter conversations by" : "Filtrar conversas por", + "Unread messages" : "Mensaxes sen ler", + "Meeting conversations" : "Conversas das xuntanzas", + "Clear filters" : "Limpar os filtros", + "New personal note" : "Nova nota persoal", + "Back to conversations" : "Volver ás conversas", + "Archived conversations" : "Conversas arquivadas", + "Threads" : "Fíos", + "Clear filter" : "Limpar o filtro", + "Show more threads" : "Amosar máis fíos", + "App settings" : "Axustes da aplicación", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federados", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Outras orixes", + "Open conversations" : "Conversas abertas", + "No search results" : "Sen resultados de busca", + "Users, groups and teams" : "Usuarios, grupos e equipos", + "Users and groups" : "Usuarios e grupos", + "Users and teams" : "Usuarios e equipos", + "Groups and teams" : "Grupos e equipos", + "New group conversation" : "Nova conversa en grupo", + "The meeting will start soon" : "A xuntanza comezará decontado", + "This meeting is scheduled for {startTime}" : "Esta xuntanza está programada para as {startTime}", + "You are currently waiting in the lobby" : "Agora está agardando no ástrago.", + "Enable noise suppression" : "Activar a supresión do ruído", + "Reduce background noises for better voice quality" : "Reducir os ruídos de fondo para mellorar a calidade da voz", + "Enable echo cancellation" : "Activar cancelación de eco", + "Minimize echo effect from own surrounding" : "Minimizar o efecto de eco do seu propio contorno", + "Enable auto gain control" : "Activar o control automático de ganancia", + "Dynamically adjust microphone volume for consistent level" : "Axusta dinamicamente o volume do micrófono para un nivel constante", + "Select microphone" : "Seleccione o micrófono", + "No microphone available" : "Non hai micrófonos dispoñíbeis", + "Select speaker" : "Seleccione o altofalante", + "No speaker available" : "Non hai ningún altofalante dispoñíbel", + "Select camera" : "Seleccione a cámara", + "No camera available" : "Non hai cámaras dispoñíbeis", + "Select a device" : "Seleccione un dispositivo", + "Playing …" : "Reproducindo…", + "Test speakers" : "Probar os altofalantes", + "Test" : "Proba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sen son", + "No camera" : "Sen cámara", + "Display video as you will see it (mirrored)" : "Amosa o vídeo tal e como o verá (reflectido)", + "Display video as others will see it" : "Amosa o vídeo tal e como o verán os demais", + "Calls are not supported in your browser" : "O seu navegador non admite chamadas", + "Access to microphone is only possible with HTTPS" : "O acceso ao micrófono só é posíbel con HTTPS", + "Access to microphone was denied" : "Foi denegado o acceso ao micrófono", + "Error while accessing microphone" : "Produciuse un erro ao acceder ao micrófono", + "Access to camera is only possible with HTTPS" : "O acceso á cámara só é posíbel con HTTPS", + "The call is being recorded." : "Estase a gravar a chamada.", + "The call might be recorded." : "É posíbel que a chamada sexa gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A gravación pode incluír a súa voz, o vídeo da cámara e da pantalla compartida. É preciso o seu consentimento antes de unirse á chamada.", + "Give consent to the recording of this call" : "Dar consentimento para a gravación desta chamada", + "Show more info" : "Amosar máis información", + "Audio is not available" : "O son non está dispoñíbel", + "Video is not available" : "O vídeo non está dispoñíbel", + "Start recording immediately with the call" : "Comezar a gravar inmediatamente coa chamada", + "Notify all participants about this call" : "Notificar a todos os participantes sobre esta chamada", + "Apply settings" : "Aplicar os axustes", + "Select virtual office background" : "Seleccione o fondo virtual de oficina", + "Select virtual home background" : "Seleccione o fondo virtual de vivenda", + "Select virtual abstract background" : "Seleccione o fondo virtual abstracto", + "Select virtual beach background" : "Seleccione o fondo virtual de praia", + "Select virtual park background" : "Seleccione o fondo virtual de parque", + "Select virtual theater background" : "Seleccione o fondo virtual de teatro", + "Select virtual library background" : "Seleccione o fondo virtual de biblioteca", + "Select virtual space station background" : "Seleccione o fondo virtual de estación espacial", + "Error while uploading the file" : "Produciuse un erro ao enviar o ficheiro", + "Select a file" : "Seleccione un ficheiro", + "Invalid path selected" : "Seleccionou unha ruta incorrecta.", + "Select virtual background from file {fileName}" : "Seleccione un fondo virtual desde o ficheiro {fileName}", + "Blur" : "Esvaer", + "Upload" : "Enviar", + "Files" : "Ficheiros", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "A mensaxe caducou ou foi eliminada", + "Cancel quote" : "Cancelar a mención", + "24 hours" : "24 horas", + "7 days" : "7 días", + "30 days" : "30 días", + "Until unpin" : "Ata que se desprenda", + "Clear reminder – {timeLocale}" : "Limpar o lembrete – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Pinned by you" : "Fixado por vostede", + "Pinned by {actor}" : "Fixado por {actor}", + "Until {absoluteDate}" : "Ata {absoluteDate}", + "Message text copied to clipboard" : "Copiouse o texto da mensaxe no portapapeis", + "Message text could not be copied" : "Non foi posíbel copiar o texto da mensaxe", + "Message forwarded to \"Note to self\"" : "Reenviouse a mensaxe a «Notas para un mesmo»", + "Error while forwarding message to \"Note to self\"" : "Produciuse un erro ao reenviar a mensaxe a «Notas para un mesmo»", + "A reminder was successfully removed" : "Retirouse correctamente un lembrete", + "Error occurred when removing a reminder" : "Produciuse un erro ao retirar un lembrete", + "A reminder was successfully set at {datetime}" : "Definiuse correctamente un lembrete para {datetime}", + "Error occurred when creating a reminder" : "Produciuse un erro ao crear un lembrete", + "Add a reaction to this message" : "Engadir unha reacción a esta mensaxe", + "Reply" : "Responder", + "More actions" : "Máis accións", + "Set reminder" : "Definir un lembrete", + "Pin message" : "Fixar a mensaxe", + "Unpin message" : "Desprender a mensaxe", + "Reply privately" : "Responder en privado", + "Edit message" : "Editar a mensaxe", + "Copy message" : "Copiar a mensaxe", + "Copy message link" : "Copiar a ligazón da mensaxe", + "Go to file" : "Ir ao ficheiro", + "Download file" : "Descargar ficheiro", + "Go to thread" : "Ir ao fío", + "Edit thread details" : "Editar os detalles do fío", + "Forward message" : "Reenviar mensaxe", + "Translate" : "Traducir", + "Set custom reminder" : "Definir un lembrete personalizado", + "Keep pinned for" : "Manter fixado para", + "Set custom period" : "Definir un período personalizado", + "Close reactions menu" : "Pechar o menú de reaccións", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con outro «emoji»", + "Choose a conversation to forward the selected message." : "Escolla unha conversa a que reenviar a mensaxe seleccionada.", + "Error while forwarding message" : "Produciuse un erro ao reenviar a mensaxe", + "The message has been forwarded to {selectedConversationName}" : "A mensaxe foi reenviada a {selectedConversationName}", + "Dismiss" : "Rexeitar", + "Go to conversation" : "Ir á conversa", + "Detect language" : "Detectar o idioma", + "The message could not be translated" : "Non foi posíbel traducir a mensaxe", + "Translation copied to clipboard" : "A tradución foi copiada no portapapeis.", + "Translation could not be copied" : "Non foi posíbel copiar a tradución", + "Translate message" : "Traducir a mensaxe", + "Source language to translate from" : "Idioma de orixe do que traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Idioma de destino ao que traducir", + "Translate to" : "Traducir a", + "Translating" : "Traducindo", + "Copy translated text" : "Copiar o texto traducido", + "Error when scheduling the message" : "Produciuse un erro ao programar a mensaxe", + "Reschedule" : "Reprogramar", + "Send now" : "Enviar agora", + "Choose a time" : "Escolla unha hora", + "Send at custom time" : "Enviar a unha hora personalizada", + "Will be sent without notification" : "Enviarase sen notificación", + "Message read by everyone who shares their reading status" : "Mensaxe lida por todos os que comparten o seu estado de lectura", + "Message sent" : "Mensaxe enviada", + "Sent without notification" : "Enviar sen notificación", + "Deleting message" : "Eliminando a mensaxe", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "A mensaxe foi eliminada correctamente, mais está configurado un bot ou Matterbridge e a mensaxe podería estar xa distribuída a outros servizos", + "Message deleted successfully" : "A mensaxe foi eliminada satisfactoriamente", + "Message could not be deleted because it is too old" : "Non foi posíbel eliminar a mensaxe porque é demasiado antiga", + "Only normal chat messages can be deleted" : "Só é posíbel eliminar as mensaxes normais da parola", + "An error occurred while deleting the message" : "Produciuse un erro ao eliminar a mensaxe", + "Pinned" : "Fixada", + "Your browser does not support playing audio files" : "O seu navegador non admite a reprodución de ficheiros de son", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarxeta de Gabeta", + "Remove {fileName}" : "Retirar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta localización en OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n resposta","%n respostas"], + "Sending message" : "Enviando a mensaxe", + "Failed to send the message. Click to try again" : "Produciuse un fallo ao enviar a mensaxe. Prema para tentalo de novo", + "Not enough free space to upload file" : "Non hai espazo libre abondo para enviar un ficheiro", + "You cannot send messages to this conversation at the moment" : "Non pode enviar mensaxes a esta conversa polo momento", + "Could not update the message" : "Non foi posíbel actualizar a mensaxe", + "Reply to thread \"{threadTitle}\"" : "Responder ao fío «{threadTitle}»", + "You voted" : "Votou", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Borrador da enquisa • %n opción","Borrador da enquisa • %n opcións"], + "_%n vote_::_%n votes_" : ["%n voto","%n votos"], + "Edit poll draft" : "Editar o borrador da enquisa", + "Delete poll draft" : "Eliminar o borrador da enquisa", + "Open poll" : "Enquisa aberta", + "See results" : "Ver os resultados", + "Reactions" : "Reaccións", + "No permission to post reactions in this conversation" : "Non ten permiso para publicar reaccións nesta conversa", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e outro participante","e outros %n participantes"], + "Show all reactions" : "Amosar todas as reaccións", + "Add more reactions" : "Engadir máis reaccións", + "Show or collapse system messages" : "Amosar ou contraer as mensaxes do sistema", + "No messages" : "Non hai mensaxes", + "All messages have expired or have been deleted." : "Todas as mensaxes caducaron ou foron eliminadas.", + "{author} (pinned by you)" : "{author} (fixada por vostede)", + "{author} (pinned by {actor})" : "{author} (fixada por {actor})", + "Unpin" : "Desprender", + "Cancel search" : "Cancelar a busca", + "Add a phone number" : "Engadir un número de teléfono", + "Error: A password is required to create the conversation." : "Erro: é necesario un contrasinal para crear a conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Todo listo, creouse a conversa «{conversationName}».", + "Create a new group conversation" : "Crear unha nova conversa en grupo", + "Add participants" : "Engadir participantes", + "Maximum length exceeded ({maxlength} characters)" : "Excedeuse a lonxitude máxima ({maxlength} caracteres)", + "Conversation visibility" : "Visibilidade da conversa", + "Allow guests to join via link" : "Permitir que os convidados se unan a través de ligazón", + "Enter password" : "Introduza o contrasinal", + "This conversation has been locked" : "Esta conversa foi bloqueada", + "No permission to post messages in this conversation" : "Non ten permiso para publicar mensaxes nesta conversa", + "Joining conversation …" : "Uníndose á conversa…", + "Write a message without notification" : "Escribir unha mensaxe sen notificación", + "Create a thread silently" : "Crear un fío de xeito silandeiro", + "Create a thread" : "Crear un fío", + "Send message silently" : "Enviar unha mensaxe silandeira", + "Send message" : "Enviar a mensaxe", + "Send without notification" : "Enviar sen notificación", + "The participant will not be notified about new messages" : "O participante non recibirá notificacións sobre novas mensaxes", + "Participants will not be notified about new messages" : "Os participantes non recibirán notificacións sobre novas mensaxes", + "Message will be sent {datetimeString}" : "A mensaxe enviarase o/ás {datetimeString}", + "Thread title is required" : "Precisase un título para o fío", + "Message text is required" : "Precisase o texto da mensaxe", + "The message could not be edited" : "Non foi posíbel editar a mensaxe", + "File to share" : "Ficheiro para compartir", + "File upload is not available in this conversation" : "O envío de ficheiros non está dispoñíbel nesta conversa", + "Message was successfully scheduled" : "A mensaxe foi programada satisfactoriamente", + "Add emoji" : "Engadir un «emoji»", + "Adding a mention will only notify users who did not read the message." : "Engadir unha mención só notificará aos usuarios que non leron a mensaxe.", + "Thread title" : "Título do fío", + "Send later" : "Enviar máis tarde", + "Show scheduled messages" : "Amosar as mensaxes programadas", + "Cancel editing" : "Cancelar a edición", + "Schedule message" : "Mensaxe programada", + "{user} is out of office and might not respond." : "{usuario} está fóra da oficina e é posíbel que non responda.", + "Absence period: {startDate} - {endDate}" : "Período de ausencia: {startDate} — {endDate}", + "Replacement:" : "Substitución:", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde «Ficheiros»", + "Share files to the conversation" : "Compartir ficheiros na conversa", + "Upload from device" : "Enviar desde o dispositivo", + "Create new poll" : "Crear unha enquisa nova", + "Smart picker" : "Selector intelixente", + "Record voice message" : "Gravar mensaxe de voz", + "End recording and send" : "Finalizar a gravación e enviar", + "Dismiss recording" : "Rexeitar a gravación", + "Access to the microphone was denied" : "Foi denegado o acceso ao micrófono", + "Microphone either not available or disabled in settings" : "O micrófono non está dispoñíbel ou está desactivado nos axustes", + "Error while recording audio" : "Produciuse un erro ao gravar o son", + "Generating summary of unread messages …" : "Xerando un resumo das mensaxes sen ler…", + "Summary is AI generated and might contain mistakes" : "O resumo é xerado por IA e pode conter erros", + "Error occurred during a summary generation" : "Produciuse un erro durante a xeración dun resumo", + "New file" : "Novo ficheiro", + "Blank" : "Baleiro", + "Error while creating file" : "Produciuse un erro ao crear o ficheiro", + "Create and share a new file" : "Crear e compartir un ficheiro novo", + "Name of the new file" : "Nome do novo ficheiro", + "Create file" : "Crear ficheiro", + "Someone is typing …" : "Alguén está escribindo…", + "{user1} is typing …" : " {user1} está escribindo…", + "{user1} and {user2} are typing …" : " {user1} e {user2} están escribindo…", + "{user1}, {user2} and {user3} are typing …" : " {user1}, {user2} e {user3} están escribindo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : [" {user1}, {user2}, {user3} e %n máis están escribindo…"," {user1}, {user2}, {user3} e outros %n están escribindo…"], + "Add more files" : "Engadir máis ficheiros", + "Send" : "Enviar", + "In this conversation {user} can:" : "Nesta conversa {user} pode:", + "Edit default permissions for participants in {conversationName}" : "Editar os permisos predeterminados dos participantes en {conversationName}", + "Start a call" : "Iniciar unha chamada", + "Skip the lobby" : "Saltarse o ástrago", + "Can post messages" : "Pode publicar mensaxes", + "Can post messages and reactions" : "Pode publicar mensaxes e reaccións", + "Can add reactions" : "Pode engadir reaccións", + "Enable the microphone" : "Activar o micrófono", + "Enable the camera" : "Activar a cámara", + "Share the screen" : "Compartir a pantalla", + "Update permissions" : "Actualizar os permisos", + "Updating permissions" : "Actualizando os permisos", + "No poll drafts" : "Non hai ningún borrador de enquisa", + "There is no poll drafts yet saved for this conversation" : "Aínda non hai ningún borrador de enquisa gardado para esta conversa", + "Create poll in {name}" : "Crear enquisa en {name}", + "Create poll" : "Crear enquisa", + "Error while importing poll" : "Produciuse un erro ao importar a enquisa", + "Question" : "Pregunta", + "Ask a question" : "Facer unha pregunta", + "Import draft from file" : "Importar o borrador do ficheiro", + "Answers" : "Respostas", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Eliminar opción de enquisa", + "Add answer" : "Engadir a resposta", + "Settings" : "Axustes", + "Anonymous poll" : "Enquisa anónima", + "Multiple answers" : "Varias respostas", + "Save as draft" : "Gardar como borrador", + "Export draft to file" : "Exportar o borrador ao ficheiro", + "You voted for this option" : "Vde. votou por esta opción", + "End poll" : "Finalizar a enquisa", + "Change your vote" : "Cambiar o seu voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votados", + "Send a message to \"{roomName}\"" : "Enviar unha mensaxe a «{roomName}»", + "Hide list of participants" : "Agochar a lista de participantes", + "Show list of participants" : "Amosar a lista de participantes", + "Assistance requested in {roomName}" : "Solicitouse asistancia en {roomName}", + "The message was sent to \"{roomName}\"" : "A mensaxe foi enviada a «{roomName}»", + "Dismiss request for assistance" : "Rexeitar a solicitude de axuda", + "Send message to room" : "Enviar mensaxe á sala", + "Back to main room" : "Volver á sala principal", + "Back to your room" : "Volver á súa sala", + "Message all rooms" : "Mensaxes a todas as salas", + "Start session" : "Iniciar sesión", + "Start a call before you start a breakout room session" : "Iniciar unha chamada antes de iniciar unha sesión en sala parcial", + "Stop session" : "Deter a sesión", + "The message was sent to all breakout rooms" : "A mensaxe foi enviada a todas as salas parciais", + "Send a message to all breakout rooms" : "Enviar unha mensaxe a todas as salas parciais", + "Breakout rooms are not started" : "Non se iniciaron as salas parciais", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "As chamadas sen infraestrutura de alto rendemento poden causar problemas de conectividade e provocar unha carga moi alta nos dispositivos. {linkstart}Máis información{linkend}", + "Talk setup incomplete" : "Configuración de Parladoiro incompleta", + "Disable lobby" : "Desactivar o ástrago", + "Settings for participant \"{user}\"" : "Axustes para o participante «{user}»", + "Participant \"{user}\"" : "Participante «{user}»", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "convidado", + "Ringing …" : "Soando…", + "Call rejected" : "Chamada rexeitada", + "{time} talking …" : "{time} falando…", + "{time} talking time" : "Tempo de conversa: {time}", + "Raised their hand" : "Ergueron a man", + "Joined with video" : "Uniuse con vídeo", + "Joined via phone" : "Uniuse a través do teléfono", + "Joined with audio" : "Uniuse con son", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "O texto debe ser menor ou igual a {maxLength} caracteres. O seu texto actual ten {charactersCount} caracteres.", + "Remove group and members" : "Retirar grupo e membros", + "Remove team and members" : "Retirar equipo e membros", + "Remove participant" : "Retirar participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Confirma que quere retirar o grupo «{displayName}» e os seus membros desta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Confirma que quere retirar o equipo «{displayName}» e os seus membros desta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Confirma que quere retirar a {displayName} desta conversa?", + "Notification was sent to {displayName}" : "Enviouse a notificación a {displayName}", + "Could not send notification to {displayName}" : "Non foi posíbel enviar a notificación a {displayName}", + "Permissions granted to {displayName}" : "Concedéronse os permisos a {displayName}", + "Could not modify permissions for {displayName}" : "Non foi posíbel modificar os permisos de {displayName}", + "Permissions removed for {displayName}" : "Retiráronse os permisos de {displayName}", + "Permissions set to default for {displayName}" : "Permisos estabelecidos como predeterminados para {displayName}", + "Phone number could not be hung up" : "Non foi posíbel colgar o número de teléfono", + "Phone number could not be put on hold" : "Non foi posíbel por en espera o número de teléfono", + "Phone number could not be muted" : "Non foi posíbel silenciar o número de teléfono", + "Phone number could not be unmuted" : "Non foi posíbel desactivar o silencio ao número de teléfono", + "DTMF message could not be sent" : "Non foi posíbel enviar a mensaxe DTMF", + "Phone number copied to clipboard" : "Número de teléfono copiado no portapapeis", + "Phone number could not be copied" : "Non foi posíbel copiar o número de teléfono", + "in the lobby" : "no ástrago", + "Dial out phone" : "Marcar o número de teléfono", + "Hang up phone" : "Colgar o teléfono", + "Move back to lobby" : "Volver ao ástrago", + "Move to conversation" : "Mover á conversa", + "Dial-in PIN" : "PIN de marcación", + "Demote from moderator" : "Relegar de moderador", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Volver enviar o convite", + "Send call notification" : "Enviar notificación de chamada", + "Dial out phone number" : "Marcar o número de teléfono", + "Resume call for phone number" : "Retomar a chamada para o número de teléfono", + "Put phone number on hold" : "Poñer o número de teléfono en espera", + "Unmute phone number" : "Desactivar o silencio ao número de teléfono", + "Mute phone number" : "Silenciar o número de teléfono", + "Copy phone number" : "Copiar o número de teléfono", + "Reset custom permissions" : "Restabelecer os permisos personalizados", + "Grant all permissions" : "Conceder todos os permisos", + "Remove all permissions" : "Retirar todos os permisos", + "Also ban from this conversation" : "Expulsar tamén desta conversa", + "Internal note (reason to ban)" : "Nota interna (motivo da expulsión)", + "Remove" : "Retirar", + "Permissions modified for {displayName}" : "Modificáronse os permisos de {displayName}", + "Add users, groups or teams" : "Engadir usuarios, grupos ou equipos", + "Add users or groups" : "Engadir usuarios ou grupos", + "Add users or teams" : "Engadir usuarios ou equipos", + "Add users" : "Engadir usuarios", + "Add groups or teams" : "Engadir grupos ou equipos", + "Add groups" : "Engadir grupos", + "Add teams" : "Engadir equipos", + "Add other sources" : "Engadir outras orixes", + "Add emails" : "Engadir correos", + "Integrations" : "Integracións", + "Add federated users" : "Engadir usuarios federados", + "Searching …" : "Buscando…", + "Search for more users" : "Buscar máis usuarios", + "You can search or add participants via name, email, or Federated Cloud ID" : "Pode buscar ou engadir participantes a través do seu nome, correo-e ou ID de nube federada", + "Search or add participants" : "Buscar ou engadir participantes", + "Invitation was sent to {actorId}" : "Enviouse o convite a {actorId}", + "An error occurred while adding the participants" : "Produciuse un erro ao engdir os participantes", + "A new group conversation with selected participant will be created" : "Crearase unha nova conversa de grupo co participante seleccionado", + "Participants" : "Participantes", + "Pinned by a deleted user" : "Fixado por un usuario eliminado", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir unha parola", + "You have new unread messages in the chat." : "Ten novas mensaxes sen ler na parola", + "You have been mentioned in the chat." : "Mencionárono na parola.", + "Search messages" : "Buscar mensaxes", + "Chat" : "Parola", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "Search in {name}" : "Buscar en {name}", + "Threads in {name}" : "Fíos en {name}", + "{actor} in {conversation}" : "{actor} en {conversation}", + "Search messages …" : "Buscar mensaxes…", + "Search options" : "Opcións de busca", + "From User" : "Desde o usuario", + "Since" : "Desde", + "Until" : "Ata", + "No results found" : "Non se atopou ningún resultado", + "Load more results" : "Cargando máis resultados", + "Recent threads" : "Fíos recentes", + "Projects" : "Proxectos", + "No shared items" : "Non hai elementos compartidos", + "Thread notifications" : "Notificacións de fíos", + "Thread actions" : "Accións do fío", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Ligazón a unha conversa", + "No open conversations found" : "Non se atopou ningunha conversa aberta", + "Either there are no open conversations or you joined all of them." : "Ou non hai conversas abertas ou uniuse a todas.", + "Check spelling or use complete words." : "Revise a ortografía ou use palabras completas.", + "Search conversations or users" : "Buscar conversas ou usuarios", + "Select conversation" : "Seleccionar conversa", + "Number length is not valid" : "A lonxitude do número non é correcta", + "Region code is not valid" : "O código de área non é correcto", + "Number length is too short" : "O número é demasiado curto", + "Number length is too long" : "O número é demasiado longo", + "Number is not valid" : "O número non é correcto", + "Phone numbers" : "Números de teléfono", + "Display name: {name}" : "Nome para amosar: {name}", + "Edit display name" : "Editar o nome para amosar", + "Display name (required)" : "Nome para amosar (necesario)", + "Save name" : "Gardar o nome", + "I picked message bubbles" : "Escollín globos de mensaxe", + "Error while setting personal setting" : "Produciuse un erro ao gardar o axuste persoal", + "Error while saving sounds setting" : "Produciuse un erro ao gardar os axustes de son", + "Compact conversations list" : "Lista compacta de conversas", + "Chat appearance" : "Aparencia da parola", + "Messages list" : "Lista de mensaxes", + "Message bubbles" : "Globos de mensaxe", + "Play sounds when participants join or leave a call" : "Reproducir sons cando os participantes se unan ou abandonen unha chamada", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Actualmente non está dispoñíbel para iPhone e iPad por mor das restricións técnicas do fabricante", + "Notification settings" : "Axustes de notificación", + "Sounds for chat and call notifications" : "Sons para notificacións de parola e chamadas", + "Invalid language ({languageId})" : "Idioma non válido {languageId}", + "Default language" : "Idioma predeterminado", + "Default language ({languageName})" : "Idioma predeterminado ({languageName})", + "Error when trying to load the available live translation languages" : "Produciuse un erro ao tentar cargar os idiomas de tradución en directo dispoñíbeis", + "Error when trying to set live translation language" : "Produciuse un erro ao tentar definir o idioma de tradución en directo", + "Set language used to show the transcriptions" : "Definir o idioma empregado para amosar as transcricións", + "Select location for attachments" : "Seleccionar a localización dos ficheiros anexos", + "Error while setting attachment folder" : "Produciuse un erro ao axustar o cartafol de anexos", + "Error while setting read status privacy" : "Produciuse un erro ao axustar a privacidade do estado de lectura", + "Error while setting typing status privacy" : "Produciuse un erro ao axustar a privacidade do estado de escritura", + "Error while setting default media state" : "Produciuse un erro ao axustar o estado multimedia predeterminado", + "Turn camera and microphone off by default" : "Desactivar a cámara e o micrófono de xeito predeterminado", + "Blur camera background by default" : "Desenfocar o fondo da cámara de xeito predeterminado", + "Skip device preview before joining a call" : "Omitir a vista previa do dispositivo antes de unirse a unha chamada", + "Appearance & Sounds" : "Aparencia e sons", + "Privacy" : "Privacidade", + "Send read receipts" : "Enviar acuses de recibimento", + "When off, all read statuses will be hidden" : "Cando estea desactivado, agocharanse todos os estados de lectura", + "Share typing status" : "Compartir o estado de escritura", + "When off, all typing indicators will be hidden" : "Cando estea desactivado, agocharanse todos os indicadores de escritura", + "Attachments folder" : "Cartafol de anexos", + "Toggle full screen" : "Alternar a pantalla completa", + "Return to Home screen" : "Volver á pantalla de inicio", + "Search" : "Buscar", + "Shortcuts while in a chat" : "Atallos nunha parola", + "Focus the chat input" : "Poñer en foco a entrada da parola", + "Unfocus the chat input to use shortcuts" : "Retirar do foco a entrada da parola para usar atallos", + "Edit your last message" : "Editar a súa última mensaxe", + "Shortcuts while in a call" : "Atallos nunha chamada", + "Camera on and off" : "Acendido e apagado da cámara", + "Microphone on and off" : "Acendido e apagado do micrófono", + "Raise or lower hand" : "Erguer ou baixar a man", + "Push to talk or push to mute" : "Premer para falar ou premer para silenciar", + "Zoom-in / zoom-out a screen share" : "Achegar/afastar a pantalla compartida", + "Mouse wheel" : "Roda do rato", + "Start call silently" : "Comezar a chamada silandeiramente", + "Start call" : "Iniciar chamada", + "End call" : "Finalizar a chamada", + "This call has just ended" : "Esta chamada ven de rematar", + "You will be able to join the call only after a moderator starts it." : "Só poderá unirse á chamada após que a inicie un moderador.", + "End call for everyone" : "Finalizar a chamada para todos", + "Starting the recording" : "Iniciando a gravación", + "Recording" : "Gravando", + "The call has been running for one hour." : "A chamada leva unha hora en proceso.", + "Cancel recording start" : "Cancelar o inicio da gravación", + "Stop recording" : "Deter a gravación", + "Send a reaction" : "Envíar unha reacción", + "React with {reaction}" : "Reaccionar con {reacción}", + "All tasks done!" : "Feitas todas as tarefas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarefa","{done} de %n tarefas"], + "Add participants to this call" : "Engadir participantes a esta chamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante na chamada","%n participantes na chamada"], + "Scheduled messages" : "Mensaxes programadas", + "You are not allowed to enable screensharing" : "Non ten permiso para activar o uso compartido de pantalla", + "No screensharing" : "Non hai uso compartido de pantalla", + "Screensharing options" : "Opcións para compartir pantalla", + "Enable screensharing" : "Activar a compartición da pantalla", + "Bad sent video and screen quality." : "Mala calidade de vídeo e pantalla enviados.", + "Bad sent screen quality." : "Mala calidade de pantalla enviada.", + "Bad sent video quality." : "Mala calidade do vídeo enviado.", + "Bad sent audio, video and screen quality." : "Mala calidade do son, vídeo e pantalla enviados.", + "Bad sent audio and screen quality." : "Mala calidade do son e da pantalla enviados.", + "Bad sent audio and video quality." : "Mala calidade do son e vídeo enviados.", + "Bad sent audio quality." : "Mala calidade do son enviado.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ou súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non poidan ver a súa pantalla. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo mentres comparte a pantalla.", + "Disable background blur" : "Desactivar o esvaemento do fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ou a súa conexión a Internet ou o computador están ocupados e pode que outros participantes non sexan quen de ver a súa pantalla. Para mellorar a situación, tente desactivar o seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non poidan ver a súa pantalla. ", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non poidan velo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ou súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non sexan quen de entendelo nin velo. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e velo. Para mellorar a situación, tente desactivar o seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e ver a súa pantalla. Para mellorar a situación, tente desactivar a súa pantalla compartida.", + "Disable screenshare" : "Desactivar a pantalla compartida", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ou a súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non sexan quen de entendelo nin velo. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e velo. Para mellorar a situación, tente desactivar o seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo.", + "Screen sharing is not supported by your browser." : "O navegador non admite a compartición de pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "A compartición de pantalla precisa que a páxina sexa cargada a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing precisa que a páxina sexa cargada a través de HTTPS.", + "An error occurred while starting screensharing." : "Produciuse un erro ao iniciar a compartición da pantalla.", + "Select virtual background" : "Seleccione o fondo virtual", + "Show your screen" : "Amosar a súa pantalla", + "Stop screensharing" : "Deixar de compartir a pantalla", + "Mute others" : "Silenciar aos outros", + "Start recording" : "Comezar a gravar", + "Set up breakout rooms" : "Preparar as salas parciais", + "Download attendance list" : "Descargar lista de asistencia", + "Open Calendar" : "Abre o calendario", + "Remove participant {name}" : "Retirar o participante {name}", + "Would you like to delete this conversation?" : "Quere eliminar esta conversa?", + "Are you sure you want to delete this conversation?" : "Confirma que quere eliminar esta conversa?", + "Delete now" : "Eliminar agora", + "Keep" : "Conservar", + "Open dialpad" : "Abrir o dial de marcación", + "Select a region" : "Seleccione unha rexión", + "Local time: {time}" : "Hora local: {time}", + "Scheduled {datetime}" : "Programada o/ás {datetime}", + "Scheduled for {datetime}" : "Programada para {datetime}", + "Search …" : "Buscar…", + "Message without mention" : "Mensaxe sen mención", + "Mention myself" : "Mencioname", + "Mention everyone" : "Mencionar a todos", + "Select a conversation" : "Seleccionar unha conversa", + "Select a mode" : "Seleccionar un modo", + "You do not have permissions to access this conversation." : "Vde. non ten permiso para acceder a esta conversa.", + "Join a different conversation or start a new one." : "Únase a outra conversa ou inicie unha nova.", + "The conversation does not exist" : "Non existe a conversa", + "Join a conversation or start a new one!" : "Únase a unha conversa ou inicie unha nova!", + "Duplicate session" : "Sesión duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Crear e unirse a unha conversa con «{userid}»", + "Join a conversation or start a new one" : "Únase a unha conversa ou inicie unha nova", + "Error while joining the conversation" : "Produciuse un erro ao unirse á conversa", + "Another user" : "Outro usuario", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contrasinal do usuario", + "Talk conversation" : "Conversa no Parladoiro", + "Skip TLS verification" : "Omitir a verificación TLS", + "Matrix server URL" : "URL do servidor Matrix", + "User" : "Usuario", + "Matrix channel" : "Canle do Matrix", + "Mattermost server URL" : "URL do servidor Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nome do equipo", + "Channel name" : "Nome da canle", + "Rocket.Chat server URL" : "URL do servidor Rocket.Chat", + "User name or email address" : "Nome de usuario ou enderezo de correo-e", + "Rocket.Chat channel" : "Canle do Rocket.Chat", + "Zulip server URL" : "URL do servidor Zulip", + "Bot user name" : "Nome de usuario do bot", + "Bot API key" : "Chave da API do bot", + "Zulip channel" : "Canle do Zulip", + "API token" : "Testemuño da API", + "Slack channel" : "Canle do Slack", + "Server ID or name" : "ID ou nome do servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID da canle (co prefixo «ID:») ou nome", + "Channel" : "Canle", + "Login" : "Acceder", + "Chat ID" : "ID da parola", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL do servidor IRC (p. ex., chat.freenode.net:6667)", + "Nickname" : "Alcume", + "Connection password" : "Contrasinal de conexión", + "IRC channel" : "Canle do IRC", + "Channel password" : "Contrasinal da canle", + "NickServ nickname" : "Alcume NickServ", + "NickServ password" : "Contrasinal de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID do cesionario", + "Client ID" : "ID de cliente", + "Team ID" : "ID do equipo", + "Thread ID" : "ID do fío", + "XMPP/Jabber server URL" : "URL do servidor XMPP/Jabber", + "MUC server URL" : "URL do servidor MUC", + "Jabber ID" : "ID do Jabber", + "Pinned messages" : "Mensaxes fixadas", + "Media" : "Multimedia", + "Polls" : "Enquisas", + "Deck cards" : "Tarxetas de Gabeta", + "Voice messages" : "Mensaxes de voz", + "Locations" : "Localizacións", + "Call recordings" : "Gravacións de chamadas", + "Audio" : "Son", + "Show all pinned messages" : "Amosar todas as mensaxes fixadas", + "Show all media" : "Amosar todos os medios", + "Show all files" : "Amosar todos os ficheiros", + "Show all polls" : "Amosar todas as enquisas", + "Show all deck cards" : "Amosar todas as tarxetas da Gabeta", + "Show all voice messages" : "Amosar todas as mensaxes de voz", + "Show all locations" : "Amosar todas as localizacións", + "Show all call recordings" : "Amosar todas as gravacións de chamadas", + "Show all audio" : "Amosar todo o son", + "Show all other" : "Amosar todos os demais", + "Follow conversation settings" : "Seguir os axustes da conversa", + "Group" : "Grupo", + "Team" : "Equipo", + "You reconnected to the call" : "Vde. volveu conectarse á chamada", + "{actor} reconnected to the call" : "{actor} volveu conectarse á chamada", + "You added {user0} and {user1}" : "Vde. engadiu a {user0} e a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Vde. engadiu a {user0}, a {user1} e a %n participante máis","Vde. engadiu a {user0}, a {user1} e a %n participantes máis"], + "An administrator added you and {user0}" : "Alguén da administración do sitio engadiuno a Vde. e a {user0}", + "{actor} added you and {user0}" : "{actor} engadiuno a Vde. e a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Alguén da administración do sitio engadiuno a Vde., a {user0} e a %n participante máis","Alguén da administración do sitio engadiuno a Vde., a {user0} e a %n participantes máis"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} engadiuno a Vde., a {user0} e a %n participante máis","{actor} engadiuno a Vde., a {user0} e a %n participantes máis"], + "An administrator added {user0} and {user1}" : "Alguén da administración do sitio engadiu a {user0} e a {user1}", + "{actor} added {user0} and {user1}" : "{actor} engadiu a {user0} e a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Alguén da administración do sitio engadiu a {user0}, a {user1} e a %n participante máis","Alguén da administración do sitio engadiu a {user0}, a {user1} e a %n participantes máis"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} engadiu a {user0}, a {user1} e a %n participante máis","{actor} engadiu a {user0}, a {user1} e a %n participantes máis"], + "You removed {user0} and {user1}" : "Vde. retirou a {user0} e a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Vde. retirou a {user0}, a {user1} e a %n participante máis","Vde. retirou a {user0}, a {user1} e a %n participantes máis"], + "An administrator removed you and {user0}" : "Alguén da administración retirouno a Vde. e a {user0}", + "{actor} removed you and {user0}" : "{actor} retirouno a Vde. e a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Alguén da administración do sitio retirouno a Vde., a {user0} e a %n participante máis","Alguén da administración do sitio retirouno a Vde., a {user0} e a %n participantes máis"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} retirouno a Vde., a {user0} e a %n participante máis","{actor} retirouno a Vde., a {user0} e a %n participantes máis"], + "An administrator removed {user0} and {user1}" : "Alguén da administración retirou a {user0} e a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} retirou a {user0} e a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Alguén da administración do sitio retirou a {user0}, a {user1} e a %n participante máis","Alguén da administración do sitio retirou a {user0}, a {user1} e a %n participantes máis"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} retirou a {user0}, a {user1} e a %n participante máis","{actor} retirou a {user0}, a {user1} e a %n participantes máis"], + "You and {user0} joined the call" : "Vde. e {user0} uníronse á chamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vde., {user0} e %n participante máis uníronse á chamada","Vde., {user0} e %n participantes máis uníronse á chamada"], + "{user0} and {user1} joined the call" : "{user0} e {user1} uníronse á chamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e %n participante máis uníronse á chamada","{user0}, {user1} e %n máis participantes uníronse á chamada"], + "You and {user0} left the call" : "Vde. e {user0} deixaron á chamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vde., {user0} e %n participante máis deixaron á chamada","Vde., {user0} e %n participantes máis deixaron á chamada"], + "{user0} and {user1} left the call" : "{user0} e {user1} deixaron á chamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e %n participante máis deixaron á chamada","{user0}, {user1} e %n máis participantes deixaron á chamada"], + "You promoted {user0} and {user1} to moderators" : "Vde. promoveu a {user0} e a {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Vde. promoveu a {user0}, a {user1} e a %n participante máis a moderadores","Vde. promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Alguén da administración do sitio promoveuno a Vde. e a {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveuno a Vde. e a {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Alguén da administración do sitio promoveu a Vde., a {user0} e a %n participante máis a moderadores","Alguén da administración do sitio promoveu a Vde., a {user0} e a %n participantes máis a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoveu a Vde., a {user0} e a %n participante máis a moderadores","{actor} promoveu a Vde., a {user0} e a %n participantes máis a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Alguén da administración do sitio promoveuno a {user0} e a {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoveu a {user0} e a {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Alguén da administración do sitio promoveu a {user0}, a {user1} e a %n participante máis a moderadores","Alguén da administración do sitio promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoveu a {user0}, a {user1} e a %n participante máis a moderadores","{actor} promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Vde. relegou a {user0} e {user1} dos moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Vde. relegou a {user0}, a {user1} e a %n participante máis dos moderadores","Vde. relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "An administrator demoted you and {user0} from moderators" : "Alguén da administración do sitio relegouno a Vde. e a {user0} dos moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} relegouno a Vde. e a {user0} dos moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Alguén da administración do sitio relegouno a Vde., a {user0} e a %n participante máis dos moderadores","Alguén da administración do sitio relegouno a Vde., a {user0} e a %n participantes máis dos moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} relegouno a Vde., a {user0} e a %n participante máis dos moderadores","{actor} relegouno a Vde., a {user0} e a %n participantes máis dos moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Alguén da administración do sitio relegou a {user0} e a {user1} de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} relegou a {user0} e {user1} dos moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Alguén da administración do sitio relegou a {user0}, a {user1} e a %n participante máis dos moderadores","Alguén da administración do sitio relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} relegou a {user0}, a {user1} e a %n participante máis dos moderadores","{actor} relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "You:" : "Vde.:", + "You: {lastMessage}" : "Vde.: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editado por Vde.)", + "(edited by a deleted user)" : "(editado por un usuario eliminado)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Está a tentar unirse a unha conversa mentres ten unha sesión activa noutra xanela ou dispositivo. Isto non é compatíbel actualmente con Parladoiro de Nextcloud. Que quere facer?", + "Leave this page" : "Abandonar esta páxina", + "Join here" : "Únase aquí", + "Deck card has been posted to {conversation}" : "A tarxeta de Gabeta foi publicada en {conversation}", + "An error occurred while posting deck card to conversation" : "Produciuse un erro ao publicar a tarxeta na conversa", + "Post to a conversation" : "Publicar nunha conversa", + "Post to conversation" : "Publicar na conversa", + "The recording failed. Please contact your administrator." : "Produciuse un fallo de gravación. Póñase en contacto coa administración desta instancia.", + "Location has been posted to {conversation}" : "A localización publicouse en {conversation}", + "An error occurred while posting location to conversation" : "Produciuse un erro ao publicar a localización na conversa.", + "Share to a conversation" : "Compartir nunha conversa", + "Share to conversation" : "Compartir na conversa", + "In conversation" : "Na conversa", + "Search in conversation: {conversation}" : "Buscar na conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "As súas solicitudes están limitadas polo momento por mor da protección da forza bruta", + "Error while clearing conversation history" : "Produciuse un erro ao limpar o historial da conversa", + "Error occurred while allowing guests" : "Produciuse un erro ao permitir convidados", + "Error occurred while disallowing guests" : "Produciuse un erro ao deixar de permitir convidados", + "Error occurred when restricting the conversation to moderator" : "Produciuse un erro ao restrinxir a conversa ao moderador", + "Error occurred when opening the conversation to everyone" : "Produciuse un erro ao abrir a conversa a todos", + "Conversation password has been saved" : "Gardouse o contrasinal da conversa", + "Conversation password has been removed" : "Retirouse o contrasinal de conversa", + "Error occurred while saving conversation password" : "Produciuse un erro ao gardar o contrasinal da conversa", + "Call recording is starting." : "A gravación de chamadas está comezando.", + "Call recording stopped while starting." : "A gravación de chamadas detívose ao iniciarse.", + "Call recording stopped. You will be notified once the recording is available." : "Detívose a gravación da chamada. Recibirá unha notificación cando a gravación estea dispoñíbel.", + "Conversation picture set" : "Definiuse a imaxe da conversa", + "Conversation picture deleted" : "Eliminouse a imaxe da conversa", + "Could not delete the conversation picture" : "Non foi posíbel eliminar a imaxe da conversa", + "Could not remove the automatic expiration" : "Non foi posíbel retirarlle a caducidade automática", + "Could not post message: {errorMessage}" : "Non foi posíbel publicar a mensaxe: {errorMessage}", + "Participant is banned successfully" : "O participante foi expulsado correctamente", + "Error while banning the participant" : "Produciuse un erro ao expulsar o participante", + "An error occurred while fetching the participants" : "Produciuse un erro ao recuperar os participantes", + "Could not send invitation to {actorId}" : "Non foi posíbel enviar o convite a {actorId}", + "Invitations sent" : "Convites enviados", + "Error occurred when sending invitations" : "Produciuse un erro ao enviar os convites", + "Failed to join the conversation." : "Produciuse un fallo ao unirse á conversa.", + "An error occurred while creating breakout rooms" : "Produciuse un erro ao crear as salas parciais", + "An error occurred while re-ordering the attendees" : "Produciuse un erro ao reordenar os asistentes", + "An error occurred while deleting breakout rooms" : "Produciuse un erro ao eliminar as salas parciais", + "An error occurred while starting breakout rooms" : "Produciuse un erro ao iniciar as salas parciais", + "An error occurred while stopping breakout rooms" : "Produciuse un erro ao deter as salas parciais", + "An error occurred while sending a message to the breakout rooms" : "Produciuse un erro ao enviar unha mensaxe ás salas parciais", + "An error occurred while requesting assistance" : "Produciuse un erro ao solicitar asistencia", + "An error occurred while resetting the request for assistance" : "Produciuse un erro ao restabelecer a solicitude de asistencia", + "An error occurred while joining breakout room" : "Produciuse un erro ao entrar na sala parcial", + "Failed to rename the thread" : "Produciuse un fallo ao cambiarlle o nome ao fío", + "Error fetching upcoming events" : "Produciuse un erro ao recuperar os próximos eventos", + "Error fetching upcoming reminders" : "Produciuse un erro ao recuperar os próximos lembretes", + "An error occurred while accepting an invitation" : "Produciuse un erro ao aceptar un convite", + "An error occurred while rejecting an invitation" : "Produciuse un erro ao rexeitar un convite", + "{guest} (guest)" : "{guest} (convidado)", + "Poll draft has been saved" : "Gardouse o borrador da enquisa", + "An error occurred while saving the draft" : "Produciuse un erro ao gardar o borrador", + "An error occurred while submitting your vote" : "Produciuse un erro ao enviar o seu voto", + "An error occurred while ending the poll" : "Produciuse un erro ao finalizar a enquisa", + "An error occurred while deleting the poll draft" : "Produciuse un erro ao eliminar o borrador da enquisa", + "Poll \"{name}\" was created by {user}. Click to vote" : "A enquisa «{name}» foi creada por {user}. Prema para votar", + "Failed to add reaction" : "Produciuse un fallo ao engadir a reacción", + "Failed to remove reaction" : "Produciuse un fallo ao retirar a reacción", + "Error while uploading file \"{fileName}\"" : "Produciuse un erro ao enviar o ficheiro «{fileName}».", + "Not enough free space to upload file \"{fileName}\"" : "Non hai espazo libre abondo para enviar o ficheiro «{fileName}»", + "You are not allowed to share files" : "Vde. non ten permiso para compartir ficheiros", + "Error while sharing file" : "Produciuse un erro ao compartir o ficheiro", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Parladoiro de Nextcloud non é totalmente compatíbel co navegador que está a usar. Utilice a versión máis recente de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos"], + "In {hours} and {minutes}" : "En {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["En %n minuto","En %n minutos"], + "Later today – {timeLocale}" : "Hoxe máis tarde – {timeLocale}", + "Set time for later today" : "Definir a hora para hoxe máis tarde", + "Tomorrow – {timeLocale}" : "Mañá – {timeLocale}", + "Set time for tomorrow" : "Definir a hora para mañá", + "This weekend – {timeLocale}" : "Esta semana – {timeLocale}", + "Set time for this weekend" : "Definir a hora para este fin de semana", + "Next week – {timeLocale}" : "Semana seguinte – {timeLocale}", + "Set time for next week" : "Definir a hora para a semana seguinte", + "Message link copied to clipboard" : "A ligazón da mensaxe foi copiada no portapapeis", + "Conversation link copied to clipboard" : "A ligazón da conversa foi copiada no portapapeis", + "The link could not be copied" : "Non foi posíbel copiar a ligazón.", + "Error while parsing a PROPFIND error" : "Produciuse un erro ao analizar un erro PROPFIND", + "Sending signaling message has failed" : "Produciuse un fallo no envío da mensaxe de sinalización", + "Lost connection to signaling server. Trying to reconnect." : "Perdeuse a conexión co servidor de sinalización. Tentando volver conectar.", + "Lost connection to signaling server." : "Perdeuse a conexión co servidor de sinalización.", + "Connecting is taking longer than expected …" : "A conexión está a levar máis tempo do agardado…", + "Failed to connect. Retrying …" : "Produciuse un fallo ao conectar. Tentándoo de novo…", + "Failed to connect. The signaling server may be set up incorrectly" : "Produciuse un fallo ao conectar O servidor de sinalización pode estar configurado incorrectamente", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "O servidor de sinalización configurado debe ser actualizado para ser compatíbel con esta versión de Parladoiro. Póñase en contacto coa súa administración.", + "Please restart the app." : "Reinicie a aplicación", + "Please reload the page." : "Volva cargar a páxina.", + "Please try to restart the app." : "Tente reiniciar a aplicación.", + "Please try to reload the page." : "Tente volver cargar a páxina.", + "Do not disturb" : "Non molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Relator {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Semella que está a falar mentres esta silenciado, desactive o silencio para que os demais o escoiten", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Non foi posíbel definir unha conexión con polo menos un participante. Pode ser necesario un servidor TURN para o seu escenario. Pídalle á administración do seu Nextcloud que configure un segundo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Isto está levando máis tempo do esperado. Os permisos dos multimedia xa están concedidos (ou rexeitados)? En caso afirmativo, reinicie o navegador, xa que o son e o vídeo están fallando", + "Access to microphone & camera is only possible with HTTPS" : "O acceso ao micrófono e a cámara só é posíbel con HTTPS", + "Please move your setup to HTTPS" : "Cambie a súa configuración a HTTPS", + "Access to microphone & camera was denied" : "Foi denegado o acceso ao micrófono e a cámara", + "WebRTC is not supported in your browser" : "O seu navegador non admite WebRTC", + "Please use a different browser like Firefox or Chrome" : "Use un navegador diferente como Firefox ou Chrome", + "Error while accessing microphone & camera" : "Produciuse un erro ao acceder ao micrófono e á cámara", + "%s Talk on your mobile devices" : "Parladoiro de %s nos seus dispositivos móbiles", + "Join conversations at any time, anywhere, on any device." : "Únase a conversas en calquera momento, en calquera lugar, con calquera dispositivo.", + "Android app" : "Aplicación de Android", + "iOS app" : "Aplicación de iOS", + "__language_name__" : "Galego", + "Webhook Demo" : "Demostración do punto de ancoraxe web", + "Call summary (%s)" : "Resumo da chamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "O bot de resumo de chamadas publica unha mensaxe de resumo após a chamada coa lista de todos os participantes e describindo as tarefas", + "Tasks" : "Tarefas", + "Notes" : "Notas", + "Reports" : "Informes", + "Decisions" : "Decisións", + "Agenda" : "Axenda", + "Call summary" : "Resumo da chamada", + "Call summary - {title}" : "Resumo da chamada — {title}", + "Talk conversation for event" : "Conversa en Parladoiro para o evento", + "Client Push is installed, this improves the performance of desktop clients." : "A notificación automática ao cliente está instalada, isto mellora o rendemento dos clientes de escritorio.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} non está instalada, isto pode levar a problemas de rendemento ao usar clientes de escritorio.", + "Next meeting" : "Seguinte xuntanza", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Programe unha xuntanza desde o seu calendario. Debe definir unha conversa de Parladoiro como ubicación para que sexa amosada aquí", + "Join conversations from remote Nextcloud servers" : "Únase a conversas desde servidores remotos de Nextcloud", + "Your default media state has been saved" : "Gardouse o seu estado multimedia predeterminado", + "Set reminder for later today" : "Definir un lembrete para hoxe máis tarde", + "Set reminder for tomorrow" : "Definir un lembrete para mañá", + "Set reminder for this weekend" : "Definir un lembrete para este fin de semana", + "Set reminder for next week" : "Definir un lembrete para a seguinte semana", + "Generate summary" : "Xerar un resumo", + "Open poll • You voted already" : "Enquisa aberta • Vde. xa votou", + "Open poll • Click to vote" : "Enquisa aberta • Prema para votar", + "Poll • Ended" : "Enquisa • Finalizada", + "Talk recording from {time} ({conversation})" : "Gravación da conversa desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados da enquisa • %n voto","Resultados da enquisa • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquisa aberta • %n voto","Enquisa aberta • %n votos"], + "Submit vote" : "Enviar o voto", + "Your privacy setting has been saved" : "Gardouse o seu axuste de privacidade", + "Your personal setting has been saved" : "Gardouse o seu axuste persoal", + "Failed to save sounds setting" : "Produciuse un fallo ao gardar os axustes de son", + "Sounds setting saved" : "Gardáronse os axustes de son", + "Always shown if recording consent is required" : "Amosar sempre se é necesario o consentimento da gravación", + "Nextcloud Talk was updated, you cannot start or join a call." : "Parladoiro de Nextcloud foi actualizada, non pode comezar nin unirse a unha chamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Uniuse á conversa noutra xanela ou dispositivo. Isto non é compatíbel actualmente con Parladoiro de Nextcloud polo que esta sesión pechouse.", + "Nextcloud Talk was updated." : "Parladoiro de Nextcloud foi actualizada", + "Nextcloud is in maintenance mode." : "Nextcloud está en modo de mantemento.", + "Nextcloud Talk Federation was updated." : "Foi actualizada a federación de Parladoiro de Nextcloud", + "Enable live translation" : "Activar a tradución en directo", + "I picked list style" : "Escollín o estilo de lista", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ei! Estás a usar Parladoiro en formato de lista ou con globos de mensaxe?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/gl.json b/l10n/gl.json new file mode 100644 index 0000000..ddad4aa --- /dev/null +++ b/l10n/gl.json @@ -0,0 +1,2211 @@ +{ "translations": { + "a conversation" : "unha conversa", + "(Duration %s)" : "(Duración %s)", + "You attended a call with {user1}" : "Participou nunha chamada con {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados"], + "You attended a call with {user1} and {user2}" : "Participou nunha chamada con {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Participou nunha chamada con {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Participou nunha chamada con {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Participou nunha chamada con {user1}, {user2}, {user3}, {user4}e {user5}", + "_%n other_::_%n others_" : ["outro","outros %n"], + "{actor} invited you to {call}" : "{actor} convidouno á {call}", + "You were invited to a conversation or had a call" : "Foi convidado a unha conversa ou tivo unha chamada", + "Other activities" : "Outras actividades", + "Talk" : "Parladoiro", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dámoslle a benvida a Parladoiro de Nextcloud!\nNesta conversa estará informado sobre as novas funcións dispoñíbeis no Parladoiro de Nextcloud.", + "## New in Talk %s" : "## Novo en Parladoiro %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora poden empregarse Microsoft Edge e Safari para participar en chamadas de voz e vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- As conversas individuais son agora persistentes e xa non se poden converter en conversas grupais por accidente. Ademais, cando un dos participantes abandona a conversa, a conversa xa non se elimina automaticamente. Só se os dous participantes abandonan, a conversa é eliminada do servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora pode notificar a todos os participantes publicando «@all» na parola", + "- With the \"arrow-up\" key you can repost your last message" : "- Coa tecla «frecha arriba» pode responder a súa última mensaxe", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Parladoiro xa admite ordes, envíe «/help» como mensaxe da parola para ver se a administración desta instancia configurou algunha", + "- With projects you can create quick links between conversations, files and other items" : "- Cos proxectos pode crear ligazóns rápidas entre conversas, ficheiros e outros elementos", + "- You can now mention guests in the chat" : "- Agora pode mencionar convidados na parola", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- As conversas agora poden ter un ástrago. Isto permitirá aos moderadores unirse á parola e chamar xa para preparar a reunión, mentres que os usuarios e convidados teñen que agardar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Agora pode responder directamente ás mensaxes fornecendolle aos demais usuarios máis contexto sobre o que trata a súa mensaxe", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A busca de conversas e participantes agora tamén filtrarán as conversas existentes, polo que é moito máis doado atopar conversas anteriores", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Agora pode engadir grupos de usuarios personalizados ás conversas cando a aplicación de círculos está instalada", + "- Check out the new grid and call view" : "- Bótelle unha ollada á nova grade e á vista de chamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Agora pode enviar e arrastrar e soltar ficheiros directamente desde o seu dispositivo á parola", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Os ficheiros compartidos ábrense agora dentro da vista da parola coas aplicacións de visor", + "- You can now search for chats and messages in the unified search in the top bar" : "- Agora pode buscar parolas e mensaxes na busca unificada na barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Adube as súas mensaxes con «emojis» do selector de «emoji»", + "- You can now change your camera and microphone while being in a call" : "- Agora pode cambiar de cámara e de micrófono mentres está nunha chamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Déalle ás súas conversas un contexto cunha descrición e ábraas para que os usuarios conectados poidan atopalas e unirse a elas", + "- See a read status and send failed messages again" : "- Vexa o estado de lectura e envíe de novo as mensaxes falladas", + "- Raise your hand in a call with the R key" : "- Erga a man nunha chamada coa tecla R.", + "- Join the same conversation and call from multiple devices" : "- Únase á mesma conversa e chame desde varios dispositivos", + "- Send voice messages, share your location or contact details" : "- Envíe mensaxes de voz, comparta a súa localización ou os datos de contacto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Engada grupos a unha conversa e engadiranse automaticamente novos membros ao grupo como participantes", + "- A preview of your audio and video is shown before joining a call" : "- Amosase unha vista previa do seu son e vídeo antes de unirse a unha chamada", + "- You can now blur your background in the newly designed call view" : "- Agora pode esvaer o seu fondo na vista de chamada de novo deseño", + "- Moderators can now assign general and individual permissions to participants" : "- Os moderadores agora poden asignar permisos xerais e individuais aos participantes", + "- You can now react to chat messages" : "- Agora pode reaccionar ás mensaxes de parola", + "- In the sidebar you can now find an overview of the latest shared items" : "- Agora pode atopar na barra lateral unha vista xeral dos últimos elementos compartidos", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use unha enquisa para recoller as opinións dos demais ou definir unha cita", + "- Configure an expiration time for chat messages" : "- Configure un tempo de caducidade para as mensaxes de parola", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie chamadas sen notificar aos demais en grandes conversas. Pode enviar notificacións de chamadas individuais unha vez iniciada a chamada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envíe mensaxes de parola sen avisar aos destinatarios por se non é urxente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Agora os «emojis» pódense completar automaticamente escribindo «:»", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Ligar varios elementos usando o novo selector intelixente escribindo unha «/»", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Agora os moderadores poden crear salas parciais (precisa dunha infraestrutura de alto rendemento)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Agora pódense gravar as chamadas (precisa dunha infraestrutura de alto rendemento)", + "- Conversations can now have an avatar or emoji as icon" : "- Agora as conversas poden ter un avatar ou un «emoji» como icona", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Agora están dispoñíbeis fondos virtuais ademais do fondo esvaído nas videochamadas", + "- Reactions are now available during calls" : "- Agora as reaccións están dispoñíbeis durante as chamadas", + "- Typing indicators show which users are currently typing a message" : "- Os indicadores de escritura amosan cales son os usuarios que están a escribiren unha mensaxe", + "- Groups can now be mentioned in chats" : "- Agora pódense mencionar grupos nas parolas", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- As gravacións de chamadas transcríbense automaticamente se se rexistra unha aplicación de provedor de transcrición", + "- Chat messages can be translated if a translation provider app is registered" : "- As mensaxes da parola pódense traducir se se rexistra unha aplicación de provedor de tradución", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** agora pódese usar en mensaxes de _parola_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Xa están dispoñíbeis os puntos de ancoraxe web para implementar bots. Consulte a documentación para obter máis información en https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Definir un lembrete nunha mensaxe de parola para volver ser notificado máis tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use a conversa **Notas para un mesmo** para tomar notas e compartir información entre os teus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- As lendas permiten enviar unha mensaxe cun ficheiro ao mesmo tempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Agora é visíbel o vídeo do relator mentres se comparte a pantalla e as reaccións ás chamadas están animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Agora os autores e moderadores que teñan accedido poden editar as mensaxes durante 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Os borradores de mensaxes sen enviar agora gárdanse no seu navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- A parola de texto agora pódese facer de xeito federado con outros servidores de Parladoiro", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Agora os moderadores poden prohibir contas e convidados para evitar que se reincorporen a unha conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- As próximas chamadas de eventos de calendario vinculados e as substitucións «fóra da oficina» agora amosanse nas conversas", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- As chamadas agora pódense facer de xeito federado con outros servidores de Parladoiro (precisa dunha infraestrutura de alto rendemento)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentación do cliente de escritorio Parladoiro de Nextcloud para Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resume as gravacións de chamadas e as mensaxes non lidas nas parolas co Asistente de Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Xuntanzas melloradas co recoñecemento de convidados a través do seu enderezo de correo-e, importación de listas de participantes, borradores para enquisas e descarga de listas de participantes nas chamadas", + "- Archive conversations to stay focused" : "- Arquivar as conversas para manter a focalización", + "- Schedule a meeting into your calendar from within a conversation" : "- Programe unha xuntanza no seu calendario desde unha conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Busque mensaxes da conversa actual directamente na barra lateral dereita", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Vexa máis conversas na primeira ollada coa nova lista compacta (activala nos axustes de Parladoiro)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- As conversas de xuntanza agora sincronizan o título e a descrición do calendario e están agochadas cun filtro de busca ata que estean preto do comezo", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marcar as conversas como sensíbels na configuración de notificacións, para agochar o contido da mensaxe da lista de conversas e notificacións", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para recibir notificacións emerxentes durante o modo «Non molestar» marque as conversas como importantes.", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Engadir outros participantes a unha chamada individualizada para crear unha nova chamada de grupo sobre a marcha", + "- Use threads to keep your chat and discussions organized" : "- Use fíos para manter a parola e os debates organizados", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Agora están dispoñíbeis as transcricións en directo durante a chamada (precisa da ExApp de transcrición en directo e dunha infraestrutura de alto rendemento)", + "- Moderators can now pin messages so they are kept at the top" : "- Agora os moderadores poden fixar mensaxes para mantelas na parte superior", + "- Schedule a message to send it at a later time" : "- Programar unha mensaxe para enviala máis tarde", + "_All %n participant_::_All %n participants_" : ["O único (%n) participante","Os %n participantes"], + "Talk updates ✅" : "Actualizacións de Parladoiro ✅", + "Reaction deleted by author" : "Reacción eliminada polo autor", + "{actor} created the conversation" : "{actor} creou a conversa", + "You created the conversation" : "Vde. creou a conversa", + "System created the conversation" : "O sistema creou a conversa", + "An administrator created the conversation" : "Alguén da administración do sitio creou a conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomeou a conversa de «%1$s» a «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Vde. renomeou a conversa de «%1$s» a «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Alguén da administración do sitio renomeou a conversa de «%1$s» a «%2$s»", + "{actor} set the description" : "{actor} definiu a descrición", + "You set the description" : "Definiu a descrición", + "An administrator set the description" : "Alguén da administración do sitio definiu a descrición", + "{actor} removed the description" : "{actor} retirou a descrición", + "You removed the description" : "Vde. retirou a descrición", + "An administrator removed the description" : "Alguén da administración do sitio retirou a descrición", + "You started a silent call" : "Vde. iniciou unha chamada silandeira", + "Outgoing silent call" : "Chamada silandeira saínte", + "{actor} started a silent call" : "{actor} iniciou unha chamada silandeira", + "Incoming silent call" : "Chamada silandeira entrante", + "You started a call" : "Vde. iniciou unha chamada", + "Outgoing call" : "Chamada saínte", + "{actor} started a call" : "{actor} iniciou unha chamada", + "Incoming call" : "Chamada entrante", + "{actor} joined the call" : "{actor} uniuse á chamada", + "You joined the call" : "Vde. uniuse á chamada", + "{actor} left the call" : "{actor} deixou a chamada", + "You left the call" : "Vde. deixou a chamada", + "{actor} unlocked the conversation" : "{actor} desbloqueou a conversa", + "You unlocked the conversation" : "Vde. desbloqueou a conversa", + "An administrator unlocked the conversation" : "Alguén da administración do sitio desbloqueou a conversa", + "{actor} locked the conversation" : "{actor} bloqueou a conversa", + "You locked the conversation" : "Vde. bloqueou a conversa", + "An administrator locked the conversation" : "Alguén da administración do sitio bloqueou a conversa", + "{actor} limited the conversation to the current participants" : "{actor} limitou a conversa aos participantes actuais", + "You limited the conversation to the current participants" : "Vde. limitou a conversa aos participantes actuais", + "An administrator limited the conversation to the current participants" : "Alguén da administración do sitio limitou a conversa aos participantes actuais", + "{actor} opened the conversation to registered users" : "{actor} abriu a conversa aos usuarios rexistrados", + "You opened the conversation to registered users" : "Vde. abriu a conversa aos usuarios rexistrados", + "An administrator opened the conversation to registered users" : "Alguén da administración do sitio abriu a conversa aos usuarios rexistrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "You opened the conversation to registered users and users created with the Guests app" : "Vde. abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Alguén da administración do sitio abriu a conversa aos usuarios rexistrados e aos usuarios creados coa aplicación de Convidados (Guests)", + "The conversation is now open to everyone" : "A conversa agora está aberta a todos", + "{actor} opened the conversation to everyone" : "{actor} abriu a conversa a todos", + "You opened the conversation to everyone" : "Vde. abriu a conversa a todos", + "{actor} restricted the conversation to moderators" : "{actor} restrinxiu a conversa aos moderadores", + "You restricted the conversation to moderators" : "Vde. restrinxiu a conversa aos moderadores", + "{actor} started breakout rooms" : "{actor} iniciou salas parciais", + "You started breakout rooms" : "Vde. iniciou salas parciais", + "{actor} stopped breakout rooms" : "{actor} detivo as salas parciais", + "You stopped breakout rooms" : "Vde. detivo as salas parciais", + "{actor} allowed guests" : "{actor} permitiu convidados", + "You allowed guests" : "Vde. permitiu convidados", + "An administrator allowed guests" : "Alguén da administración do sitio permitiu convidados", + "{actor} disallowed guests" : "{actor} retirou o permiso de convidados", + "You disallowed guests" : "Vde. retirou o permiso de convidados", + "An administrator disallowed guests" : "Alguén da administración do sitio retirou o permiso de convidados", + "{actor} set a password" : "{actor} definiu un contrasinal", + "You set a password" : "Vde. definiu un contrasinal", + "An administrator set a password" : "Alguén da administración do sitio definiu un contrasinal", + "{actor} removed the password" : "{actor} retirou o contrasinal", + "You removed the password" : "Vde. retirou o contrasinal", + "An administrator removed the password" : "Alguén da administración do sitio retirou o contrasinal", + "{actor} added {user}" : "{actor} engadiu a {user}", + "You joined the conversation" : "Vde. uniuse á conversa", + "{actor} joined the conversation" : "{actor} uniuse á conversa", + "You added {user}" : "Vde. engadiu a {user}", + "{actor} added you" : "{actor} engadiuno a Vde.", + "An administrator added you" : "Alguén da administración do sitio engadiuno a Vde.", + "An administrator added {user}" : "Alguén da administración do sitio engadiu a {user}", + "You left the conversation" : "Vde. deixou a conversa", + "{actor} left the conversation" : "{actor} deixou a conversa", + "{actor} removed {user}" : "{actor} retirou a {user}", + "You removed {user}" : "Vde. retirou a {user}", + "{actor} removed you" : "{actor} retirouno. a Vde.", + "An administrator removed you" : "Alguén da administración do sitio retirouno a Vde.", + "An administrator removed {user}" : "Alguén da administración do sitio retirou a {user}", + "{actor} invited {federated_user}" : "{actor} convidou a {federated_user}", + "You invited {federated_user}" : "Vde. convidou a {federated_user}", + "You accepted the invitation" : "Vde. aceptou o convite", + "{actor} invited you" : "Vde. foi convidado por {actor}", + "An administrator invited you" : "Vde. foi convidado por unha persoa de administración", + "An administrator invited {federated_user}" : "Alguén da administración do sitio convidou a {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceptou o convite", + "{actor} removed {federated_user}" : "{actor} retirou a {federated_user}", + "You removed {federated_user}" : "Vde. retirou a {federated_user}", + "You declined the invitation" : "Vde. declinou o convite", + "An administrator removed {federated_user}" : "Alguén da administración do sitio retirou a {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declinou o convite", + "{actor} added group {group}" : "{actor} engadiu o grupo {group}", + "You added group {group}" : "Vde. engadiu o grupo {group}", + "An administrator added group {group}" : "Alguén da administración do sitio engadiu o grupo {group}", + "{actor} removed group {group}" : "{actor} retirou o grupo {group}", + "You removed group {group}" : "Vde. retirou o grupo {group}", + "An administrator removed group {group}" : "Alguén da administración do sitio retirou o grupo {group}", + "{actor} added team {circle}" : "{actor} engadiu o equipo {circle}", + "You added team {circle}" : "Vde. engadiu o equipo {circle}", + "An administrator added team {circle}" : "Alguén da administración do sitio engadiu o equipo {circle}", + "{actor} removed team {circle}" : "{actor} retirou o equipo {circle}", + "You removed team {circle}" : "Vde. retirou o equipo {circle}", + "An administrator removed team {circle}" : "Alguén da administración do sitio retirou o equipo {circle}", + "{actor} added {phone}" : "{actor} engadiu a {phone}", + "You added {phone}" : "Vde. engadiu a {phone}", + "An administrator added {phone}" : "Alguén da administración do sitio engadiu a {phone}", + "{actor} removed {phone}" : "{actor} retirou a {phone}", + "You removed {phone}" : "Vde. retirou a {phone}", + "An administrator removed {phone}" : "Alguén da administración do sitio retirou a {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoveu a {user} a moderador", + "You promoted {user} to moderator" : "Vde. promoveu a {user} a moderador", + "{actor} promoted you to moderator" : "{actor} promoveuno a Vde. a moderador", + "An administrator promoted you to moderator" : "Alguén da administración do sitio promoveuno a Vde. a moderador", + "An administrator promoted {user} to moderator" : "Alguén da administración do sitio promoveuno a {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} relegou a {user} de moderador", + "You demoted {user} from moderator" : "Vde. relegou a {user} de moderador", + "{actor} demoted you from moderator" : "{actor} relegouno a Vde. de moderador", + "An administrator demoted you from moderator" : "Alguén da administración do sitio relegouno a Vde. de moderador", + "An administrator demoted {user} from moderator" : "Alguén da administración do sitio relegou a {user} de moderador", + "{actor} shared a file which is no longer available" : "{actor} compartiu un ficheiro que xa non está dispoñíbel", + "You shared a file which is no longer available" : "Vde. compartiu un ficheiro que xa non está dispoñíbel", + "File shares are currently not supported in federated conversations" : "A compartición de ficheiros non está admitida actualmente nas conversas federadas", + "The shared location is malformed" : "A localización compartida ten un formato incorrecto", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurou Matterbridge para sincronizar esta conversa con outras salas de parolas", + "You set up Matterbridge to synchronize this conversation with other chats" : "Vde. configurou Matterbridge para sincronizar esta conversa con outras salas de parolas", + "{actor} created thread {title}" : "{actor} creou o fío {title}", + "You created thread {title}" : "Vde. creou o fío {title}", + "{actor} renamed thread {title}" : "{actor} renomeou o fío {title}", + "You renamed thread {title}" : "Vde. renomeou o fío {title}", + "{actor} updated the Matterbridge configuration" : "{actor} actualizou a configuración de Matterbridge", + "You updated the Matterbridge configuration" : "Vde. actualizou a configuración do Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} retirou a configuración de Matterbridge", + "You removed the Matterbridge configuration" : "Vde. retirou a configuración do Matterbridge", + "{actor} started Matterbridge" : "{actor} iniciou Matterbridge", + "You started Matterbridge" : "Vde. iniciou Matterbridge", + "{actor} stopped Matterbridge" : "{actor} detivo Matterbridge", + "You stopped Matterbridge" : "Vde. detivo Matterbridge", + "{actor} deleted a message" : "{actor} eliminou unha", + "You deleted a message" : "Vde. eliminou unha mensaxe", + "{actor} edited a message" : "{actor} editou unha mensaxe", + "You edited a message" : "Vde. editou unha mensaxe", + "{actor} pinned a message" : "{actor} fixou unha mensaxe", + "You pinned a message" : "Vde. fixou unha mensaxe", + "{actor} unpinned a message" : "{actor} desprendeu unha mensaxe", + "Message was automatically unpinned" : "A mensaxe foi desprendida automaticamente", + "You unpinned a message" : "Vde. desprendeu unha mensaxe", + "{actor} deleted a reaction" : "{actor} eliminou unha reacción", + "You deleted a reaction" : "Vde. eliminou unha reacción", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Definiu a caducidade da mensaxe en %n semana","Definiu a caducidade da mensaxe en %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Definiu a caducidade da mensaxe en %n día","Definiu a caducidade da mensaxe en %n días"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Definiu a caducidade da mensaxe en %n hora","Definiu a caducidade da mensaxe en %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Definiu a caducidade da mensaxe en %n minuto","Definiu a caducidade da mensaxe en %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} definiu a caducidade da mensaxe en %n semana","{actor} definiu a caducidade da mensaxe en %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} definiu a caducidade da mensaxe en %n día","{actor} definiu a caducidade da mensaxe en %n días"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} definiu a caducidade da mensaxe en %n hora","{actor} definiu a caducidade da mensaxe en %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} definiu a caducidade da mensaxe en %n minuto","{actor} definiu a caducidade da mensaxe en %n minutos"], + "{actor} disabled message expiration" : "{actor} desactivou a caducidade da mensaxe", + "You disabled message expiration" : "Vde. desactivou a caducidade da mensaxe", + "{actor} cleared the history of the conversation" : "{actor} limpou o historial da conversa", + "You cleared the history of the conversation" : "Vde. limpou o historial da conversa", + "{actor} set the conversation picture" : "{actor} definiu a imaxe da conversa", + "You set the conversation picture" : "Vde. definiu a imaxe da conversa", + "{actor} removed the conversation picture" : "{actor} retirou a imaxe da conversa", + "You removed the conversation picture" : "Vde. retirou a imaxe da conversa", + "{actor} ended the poll {poll}" : "{actor} rematou a enquisa {poll}", + "You ended the poll {poll}" : "Vde. rematou a enquisa {poll}", + "{actor} started the video recording" : "{actor} iniciou a gravación en vídeo", + "You started the video recording" : "Vde. iniciou a gravación en vídeo", + "{actor} stopped the video recording" : "{actor} detivo a gravación en vídeo", + "You stopped the video recording" : "Vde. detivo a gravación en vídeo", + "{actor} started the audio recording" : "{actor} iniciou a gravación do son", + "You started the audio recording" : "Vde. comezou a gravación do son", + "{actor} stopped the audio recording" : "{actor} parou a gravación do son", + "You stopped the audio recording" : "Vde. parou a gravación do son", + "The recording failed" : "Produciuse un fallo na gravación", + "Someone voted on the poll {poll}" : "Alguén votou na enquisa {poll}", + "Message deleted by author" : "Mensaxe eliminada polo autor", + "Message deleted by {actor}" : "Mensaxe eliminada por {actor}", + "Message deleted by you" : "Mensaxe eliminada por Vde.", + "Deleted user" : "Usuario eliminado", + "Unknown number" : "Número descoñecido", + "Administration" : "Administración", + "System" : "Sistema", + "%s (guest)" : "%s (convidado)", + "Missed call" : "Chamada perdida", + "Unanswered call" : "Chamada sen resposta", + "Call ended (Duration {duration})" : "Chamada rematada (Duración {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada rematou, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} rematou a chamada (duración {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Rematou a chamada con %n convidado, por mor de ter acadado a duración máxima da chamada (duración {duration})","Rematou a chamada con %n convidados, por mor de ter acadado a duración máxima da chamada (duración {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Rematou a chamada con %n convidado (duración {duration})","Rematou a chamada con %n convidados (duración {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} rematou a chamada con %n convidado (duración {duration})","{actor} rematou a chamada con %n convidados (duración {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1} ended (Duration {duration})" : "Rematou a chamada con {user1} (duración {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} rematou a chamada con {user1} (duración {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1} e {user2}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Rematou a chamada con {user1} e {user2} (duración {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} rematou a chamada con {user1} e {user2} (duración {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2} e {user3}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2} e {user3} (duración {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2} e {user3} (duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3} e {user4}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3} e {user4} (duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2}, {user3} e {user4} (duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5}, por mor de ter acadado a duración máxima da chamada (duración {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5} (duración {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} rematou a chamada con {user1}, {user2}, {user3}, {user4} e {user5} (duración {duration})", + "Message of {user} in {conversation}" : "Mensaxe de {user} en {conversation}", + "Message of {user}" : "Mensaxe de {user}", + "Message of a deleted user in {conversation}" : "Mensaxe dun usuario eliminado en {conversation}", + "Talk conversations" : "Conversas no Parladoiro", + "Talk to %s" : "Parladoiro con %s", + "An error occurred. Please contact your administrator." : "Produciuse un erro. Póñase en contacto cua administración desta instancia.", + "Storage quota exceeded" : "Superouse a cota de almacenamento", + "File not found" : "Non se atopou o ficheiro", + "File is not shared, or shared but not with the user" : "O ficheiro non está compartido, ou compartido, pero non co usuario", + "No account available to delete." : "Non hai conta dispoñíbel para eliminar.", + "Poll" : "Enquisa", + "Password needs to be set" : "É necesario definir o contrasinal", + "Uploading the file failed" : "Produciuse un fallo ao enviar o ficheiro", + "No image file provided" : "Non se forneceu ningún ficheiro de imaxe", + "File is too big" : "O ficheiro é grande de máis", + "Invalid file provided" : "O ficheiro fornecido non é válido", + "Invalid image" : "Imaxe incorrecta", + "Unknown filetype" : "Tipo de ficheiro descoñecido", + "Talk mentions" : "Mencións en Parladoiro", + "More conversations" : "Máis conversas", + "Say hi to your friends and colleagues!" : "Saúde aos seus amigos e compañeiros!", + "No unread mentions" : "Non hai mencións sen ler", + "Call in progress" : "Chamada en proceso", + "You were mentioned" : "Vde. foi mencionado", + "Write to conversation" : "Escribir á conversa", + "Writes event information into a conversation of your choice" : "Escribe a información do evento nunha conversa da súa escolla", + "Missing email field in header line" : "Falta o campo de correo-e na liña de cabeceira", + "Following lines are invalid: %s" : "As seguintes liñas non son válidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s convidouno á conversa «%2$s».", + "You were invited to conversation \"%s\"." : "Foi convidado á conversa «%s».", + "Conversation invitation" : "Convite á conversa", + "Scheduled time" : "Hora programada", + "Description" : "Descrición", + "You can also dial-in via phone with the following details" : "Tamén pode chamar por teléfono cos seguintes detalles", + "Dial-in information" : "Información sobre a marcación", + "Meeting ID" : "ID da xuntanza", + "Your PIN" : "O seu PIN", + "Click the button below to join the lobby now." : "Prema no botón de embaixo para unirse agora ao ástrago.", + "Click the link below to join the lobby now." : "Prema na ligazón de embaixo para unirse agora ao ástrago.", + "Join lobby for \"%s\"" : "Unirse ao ástrago de «%s»", + "Click the button below to join the conversation now." : "Prema no botón de embaixo para unirse agora á conversa.", + "Click the link below to join the conversation now." : "Prema na ligazón de embaixo para unirse agora á conversa.", + "Join \"%s\"" : "Unirse a «%s»", + "Meeting" : "Xuntanza", + "Password request: %s" : "Solicitude de contrasinal: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Usuario eliminado (%s)", + "Failed to upload call recording" : "Produciuse un fallo ao enviar a gravación da chamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "O servidor de gravación non foi quen de enviar a gravación da chamada {call}. Póñase en contacto coa administración da instancia.", + "Share to chat" : "Compartir na parola", + "Dismiss notification" : "Rexeitar a notificación", + "Call recording now available" : "Xa está dispoñíbel a gravación de chamadas", + "The recording for the call in {call} was uploaded to {file}." : "A gravación da chamada en {call} foi enviada a {file}.", + "Transcript now available" : "Xa está dispoñíbel a transcrición", + "The transcript for the call in {call} was uploaded to {file}." : "A transcrición da chamada en {call} foi enviada a {file}.", + "Failed to transcript call recording" : "Produciuse un fallo ao transcribir a gravación da chamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor non foi quen de transcribir a gravación en {file} para a chamada en {call}. Póñase en contacto coa administración.", + "Call summary now available" : "Xa está dispoñíbel o resumo da chamada", + "The summary for the call in {call} was uploaded to {file}." : "O resumo da chamada en {call} foi enviada a {file}.", + "Failed to summarize call recording" : "Produciuse un fallo ao resumir a gravación da chamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor non foi quen de resumir a gravación en {file} para a chamada en {call}. Póñase en contacto coa administración.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} convidouno a unirse a {roomName} en {remoteServer}", + "Accept" : "Aceptar", + "Decline" : "Declinar", + "{user1} invited you to a federated conversation" : "{user} convidouno a unha conversa federada", + "Someone reacted" : "Alguén reaccionou", + "New message" : "Nova mensaxe", + "Reminder" : "Lembrete", + "Someone mentioned you" : "Alguén mencionouno a Vde.", + "Notification" : "Notificación", + "Someone reacted in a private conversation" : "Alguén reaccionou nunha conversa privada", + "You received a message in a private conversation" : "Recibíu unha mensaxe nunha conversa privada", + "Reminder in a private conversation" : "Lembrete nunha conversa privada", + "Someone mentioned you in a private conversation" : "Alguén mencionouno nunha conversa privada", + "Notification in a private conversation" : "Notificación nunha conversa privada", + "Reminder: You in {call}" : "Lembrete: Vde. está na chamada {call}", + "Reminder: {user} in {call}" : "Lembrete: {user} está na chamada {call}", + "Reminder: Deleted user in {call}" : "Lembrete: usuario eliminado da chamada {call}", + "Reminder: {guest} (guest) in {call}" : "Lembrete {guest} (convidado) na chamada {call}", + "Reminder: Guest in {call}" : "Lembrete: convidado na chamada {call}", + "{user} reacted with {reaction}" : "{user} reaccionou con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reaccionou con {reaction} en {call}", + "Deleted user reacted with {reaction} in {call}" : "O usuario eliminado reaccionou con {reaction} en {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidado) reaccionou con {reaction} en {call}", + "Guest reacted with {reaction} in {call}" : "O convidado reaccionou con {reaction} en {call}", + "{user} in {call}" : "{user} en {call}", + "Deleted user in {call}" : "Usuario eliminado en {call}", + "{guest} (guest) in {call}" : "{guest} (convidado) en {call}", + "Guest in {call}" : "Convidado en {call}", + "{user} sent you a private message" : "{user} envioulle unha mensaxe privada", + "{user} sent a message in conversation {call}" : "{user} enviou unha mensaxe na conversa {call}", + "A deleted user sent a message in conversation {call}" : "Un usuario eliminado enviou unha mensaxe na conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (convidado) enviou unha mensaxe na conversa {call}", + "A guest sent a message in conversation {call}" : "Un convidado enviou unha mensaxe na conversa {call}", + "{user} replied to your private message" : "{user} respondeu á súa mensaxe privada", + "{user} replied to your message in conversation {call}" : "{user} respondeu á súa mensaxe na conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Un usuario eliminado respondeu á súa mensaxe na conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidado) respondeu á súa mensaxe na conversa {call}", + "A guest replied to your message in conversation {call}" : "Un convidado respondeu á súa mensaxe na conversa {call}", + "Reminder: You in private conversation {call}" : "Lembrete: Vde. está nunha conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Lembrete: un usuario eliminado da conversa privada {call}", + "Reminder: {user} in private conversation" : "Lembrete: {user} está nunha conversa privada {call}", + "Reminder: You in conversation {call}" : "Lembrete: Vde. está na conversa {call}", + "Reminder: {user} in conversation {call}" : "Lembrete: {user} está na conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Lembrete: un usuario eliminado da conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Lembrete: {guest} (convidado) está na conversa {call}", + "Reminder: A guest in conversation {call}" : "Lembrete: un convidado na conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} reaccionou con {reaction} á súa mensaxe privada", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reaccionou con {reaction} á súa mensaxe na conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un usuario eliminado reaccionou con {reaction} á súa mensaxe na conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidado) reaccionou con {reaction} á súa mensaxe na conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidado reaccionou con {reaction} á túa mensaxe na conversa {call}", + "{user} mentioned you in a private conversation" : "{user} mencionouno nunha conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionou o grupo {group} na conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionou o equipo {team} na conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionou a todos na conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} mencionouno na conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un usuario eliminado mencionou o grupo {group} na conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un usuario eliminado mencionou o equipo {team} na conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un usuario eliminado mencionou a todos na conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Un usuario eliminado mencionouno na conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidado) mencionou ao grupo {group} na conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidado) mencionou o equipo {team} na conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidado) mencionou a todos na conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (convidado) mencionouno na conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Un convidado mencionou ao grupo {group} na conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Un convidado mencionou o equipo {team} na conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Un convidado mencionou a todos na conversa {call}", + "A guest mentioned you in conversation {call}" : "Un convidado mencionouno na conversa {call}", + "View message" : "Ver a mensaxe", + "Dismiss reminder" : "Rexeitar o lembrete", + "View chat" : "Ver a parola", + "{user} invited you to a group conversation: {call}" : "{user} convidouno a unha conversa de grupo: {call}", + "Join call" : "Unirse á chamada", + "Answer call" : "Responder á chamada", + "{user} would like to talk with you" : "A {user} gustaríalle conversar con Vde.", + "Call back" : "Devolver a chamada", + "You missed a call from {user}" : "Perdeu unha chamada de {user}", + "Accept call" : "Aceptar a chamada", + "Incoming phone call from {call}" : "Chamada de teléfono entrante de {call}", + "You missed a phone call from {call}" : "Perdeu unha chamada de teléfono de {call}", + "A group call has started in {call}" : "Iniciouse unha chamada de grupo en {call}", + "You missed a group call in {call}" : "Perdeu unha chamada de grupo en {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando o contrasinal para acceder a {file}", + "{email} tried to request the password to access {file}" : "{email} tentou solicitar o contrasinal para acceder a {file}", + "Someone is requesting the password to access {file}" : "Alguén está solicitando o contrasinal para acceder a {file}", + "Someone tried to request the password to access {file}" : "Alguén tentou solicitar o contrasinal para acceder a {file}", + "Open settings" : "Abrir os axustes", + "Hosted signaling server added" : "Engadiuse o servidor de sinalización aloxado", + "The hosted signaling server is now configured and will be used." : "O servidor de sinalización aloxado agora está configurado e vai ser empregado.", + "Hosted signaling server removed" : "Retirouse o servidor de sinalización aloxado", + "The hosted signaling server was removed and will not be used anymore." : "Foi retirado o servidor de sinalización aloxado e xa non vai ser usado.", + "Hosted signaling server changed" : "Cargouse servidor de sinalización aloxado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "A conta do servidor de sinalización aloxado cambiou o estado de «{oldstatus}» a «{newstatus}»", + "pending" : "pendente", + "active" : "activa", + "expired" : "caducada", + "blocked" : "bloqueada", + "error" : "erro", + "The certificate of {host} expires in {days} days" : "O certificado de {host} caduca en {days} días", + "The certificate of {host} expired" : "Caducou o certificado de {host}", + "Contact via Talk" : "Contacte mediante Parladoiro", + "Open Talk" : "Abrir Parladoiro", + "Default" : "Predeterminado", + "Presentation" : "Presentación", + "Webinar" : "Seminario web", + "Conversations" : "Conversas", + "Messages in current conversation" : "Mensaxes na conversa actual", + "{user}" : "{user}", + "Messages" : "Mensaxes", + "{user} in {conversation}" : "{user} en {conversation}", + "Messages in other conversations" : "Mensaxes noutras conversas", + "One-to-one rooms always need to show the other users avatar" : "As salas individuais sempre deben amosar o avatar dos outros usuarios", + "Invalid emoji character" : "Carácter «emoji» non válido", + "Invalid background color" : "Cor de fondo non válida", + "Avatar image is not square" : "A imaxe do avatar non é cadrada", + "Room {number}" : "Sala {number}", + "Other" : "Outro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Produciuse un fallo na solicitude de proba porque o servidor de proba non é accesíbel. Ténteo de novo máis tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Hai un problema coa autenticación desta instancia. Quizais non sexa accesíbel desde o exterior para verificar o seu URL.", + "Something unexpected happened." : "Ocorreu algo non agardado.", + "The URL is invalid." : "O URL non é valido", + "An HTTPS URL is required." : "Precísase dun URL HTTPS", + "The email address is invalid." : "O enderezo de correo-e non é válido", + "The language is invalid." : "O idioma non é valido", + "The country is invalid." : "O país non é valido", + "There is a problem with the request of the trial. Please check your logs for further information." : "Hai un problema coa petición de proba. Verifique os seus rexistros para obter máis información.", + "Too many requests are send from your servers address. Please try again later." : "Envíanse demasiadas solicitudes desde o enderezo do servidor. Ténteo de novo máis tarde.", + "There is already a trial registered for this Nextcloud instance." : "Xa hai unha proba rexistrada para esta instancia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Ocorreu algo non previsto. Ténteo de novo máis tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Produciuse un fallo na solicitude de proba porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "Trial requested but failed to get account information. Please check back later." : "Proba solicitada pero non conseguiu a información da conta. Ténteo de novo máis tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Hai un problema coa autenticación desta solicitude. Quizais non sexa accesíbel desde o exterior para verificar o seu URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Produciuse un fallo ao recuperar información da conta porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hai un problema ao recuperar a información da conta. Verifique os seus rexistros para recuperar máis información.", + "There is no such account registered." : "Non hai rexistrada unha conta deste tipo.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Produciuse un fallo ao recuperar información da conta porque non é posibel acadar o servidor de proba. Ténteo de novo máis tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "Produciuse un fallo ao eliminar a conta do servidor de sinalización aloxado. Ténteo de novo máis tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Produciuse un fallo ao eliminar a conta porque o servidor de proba comportouse erroneamente. Ténteo de novo máis tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hai un problema ao eliminar a conta. Verifique os seus rexistros para obter máis información.", + "Too many requests are sent from your servers address. Please try again later." : "Envíanse demasiadas solicitudes desde o enderezo do servidor. Ténteo de novo máis tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Produciuse un fallo ao eliminar a conta porque non é posíbel acadar o servidor de proba. Ténteo de novo máis tarde.", + "Note to self" : "Notas para un mesmo", + "A place for your private notes, thoughts and ideas" : "Un lugar para as súas notas, pensamentos e ideas privadas", + "Transcript is AI generated and may contain mistakes" : "A transcrición é xerada por IA e pode conter erros", + "Summary is AI generated and may contain mistakes" : "O resumo é xerado por IA e pode conter erros", + "Let's get started!" : "Comecemos!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Parladoiro de Nextcloud** é unha plataforma de comunicación segura en aloxamento autónomo que se integra perfectamente co ecosistema NextCloud.\n\n#### Funcionalidades principais de Parladoiro de NextCloud:\n\n* Parola e mensaxería en parolas privadas e en grupo\n* Chamadas de vox e vídeo\n* Compartir ficheiros e integración con outras aplicacións NextCloud\n* Axustes personalizábeis de conversa, moderación e controis de privacidade\n* Web, escritorio e móbil (iOS e Android)\n* Comunicación privada e segura\n\nObteña máis información na [Documentación do usuario](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Dámoslle a benvida a Parladoiro de Nextcloud\n\nParladoiro de Nextcloud é unha aplicación de mensaxería privada e potente que se integra con NextCloud. Parole en conversas privadas ou en grupo, participe en chamadas de voz e vídeo, organice seminarios e eventos, personalice as súas conversas e moito máis.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatar textos para crear mensaxes melloradas\n\nEn Parladoiro de Nextcloud, pode usar a sintaxe Markdown para formatar as súas mensaxes. Por exemplo, aplique o formatado como **grosa** ou *cursiva*, ou `destaque textos como código`. Pode incluso crear táboas e engadir títulos ao seu texto.\n\nNecesita arranxar un erro de escritura ou cambiar o formatado? Edite a mensaxe premendo en «Editar mensaxe» no menú da mensaxe.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Engada anexos e ligazóns\n\nEngada ficheiros do seu NextCloud Hub empregando o botón «+». Comparta elementos de ficheiros e varias aplicacións de NextCloud. Algunhas aplicacións incluso admiten trebellos interactivos, por exemplo, a aplicación de Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deixe que as conversas flúan: mencione aos usuarios, reaccione ás mensaxes e máis…\n\nPode mencionar a todos nunha conversa empregando %s ou mencionar participantes específicos escribindo «@» e seleccionando o seu nome da lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Pode responder mensaxes, reenvialas a outras parolas e persoas ou copiar o contido da mensaxe.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faga máis cousas co Selector intelixente\n\nSó ten que escribir «/» ou ir ao menú «+» para abrir o selector intelixente onde pode achegar diversos contidos ás súas mensaxes. Pode configurar o selector intelixente para poder engadir elementos de aplicacións de NextCloud, GIF, localizacións de mapas, contido xerado por IA e moito máis.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Xestionar os axustes da conversa\n\nNo menú de conversas, pode acceder a varios axustes para xestionar as súas conversas, como:\n* Editar a información da conversa\n* Xestionar as notificacións\n* Aplicar numerosas regras de moderación\n* Configurar o acceso e a seguranza\n* Activar bots\n* E moito máis!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratos Árabes Unidos", + "Afghanistan" : "Afganistán", + "Antigua and Barbuda" : "Antiga e Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antártida", + "Argentina" : "Arxentina", + "American Samoa" : "Samoa americana", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Illas de Åland", + "Azerbaijan" : "Acerbaixán", + "Bosnia and Herzegovina" : "Bosnia e Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélxica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Barein", + "Burundi" : "Burundi", + "Benin" : "Benín", + "Saint Barthélemy" : "San Bartolomeu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Sultanato de Brunei", + "Bolivia, Plurinational State of" : "Bolivia, Estado plurinacional de", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, San Eustaquio e Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bután", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Belarús", + "Belize" : "Belice", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Illas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República democrática do", + "Central African Republic" : "República Centro Africana", + "Congo" : "Congo", + "Switzerland" : "Suíza", + "Côte d'Ivoire" : "Costa do Marfin", + "Cook Islands" : "Illas Cook", + "Chile" : "Chile", + "Cameroon" : "Camerún", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Nadal", + "Cyprus" : "Chipre", + "Czechia" : "República Checa", + "Germany" : "Alemaña", + "Djibouti" : "Xibutí", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Alxeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Exipto", + "Western Sahara" : "Sáhara Ocidental", + "Eritrea" : "Eritrea", + "Spain" : "España", + "Ethiopia" : "Etiopía", + "Finland" : "Finlandia", + "Fiji" : "Fidxi", + "Falkland Islands (Malvinas)" : "Illas Malvinas (Falkland)", + "Micronesia, Federated States of" : "Micronesia, Estados Federados da", + "Faroe Islands" : "Illas Feroe", + "France" : "Francia", + "Gabon" : "Gabón", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido da Gran Bretaña e Irlanda do Norte", + "Grenada" : "Granada", + "Georgia" : "Xeorxia", + "French Guiana" : "Guaiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Xibraltar", + "Greenland" : "Grenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guinea Ecuatorial", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Illas Xeorxia do Sur e Sandwich do Sur", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bisau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illa Heard e Illas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croacia", + "Haiti" : "Haití", + "Hungary" : "Hungría", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Británico do Océano Índico", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Irán, República Islámica do", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Xersei", + "Jamaica" : "Xamaica", + "Jordan" : "Xordania", + "Japan" : "Xapón", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Quirguistán", + "Cambodia" : "Camboxa", + "Kiribati" : "Kiribatí", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "San Cristovo e Nevis", + "Korea, Democratic People's Republic of" : "Corea, República democrática popular de", + "Korea, Republic of" : "Corea, República de", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Illas Caimán", + "Kazakhstan" : "Cazaquistán", + "Lao People's Democratic Republic" : "República Popular Democrática de Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lucía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letonia", + "Libya" : "Libia", + "Morocco" : "Marrocos", + "Monaco" : "Mónaco", + "Moldova, Republic of" : "Moldavia, República da", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "San Martín (parte francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illas Marshall", + "North Macedonia" : "Macedonia do Norte", + "Mali" : "Malí", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Illas Marianas do Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricio", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nova Caledonia", + "Niger" : "Níxer", + "Norfolk Island" : "Illa Norfolk", + "Nigeria" : "Nixeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Países Baixos", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Celandia", + "Oman" : "Omán", + "Panama" : "Panamá", + "Peru" : "Perú", + "French Polynesia" : "Polinesia Francesa", + "Papua New Guinea" : "Papúa Nova Guinea", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistán", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "San Pedro e Miquelón", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Estado de", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "Reunión", + "Romania" : "Romanía", + "Serbia" : "Serbia", + "Russian Federation" : "Federación Rusa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Illas Salomón", + "Seychelles" : "Seychelles", + "Sudan" : "Sudán", + "Sweden" : "Suecia", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascension e Tristán da Cuña", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Illas Svalbard e Jan Mayen", + "Slovakia" : "Eslovaquia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudán do Sur", + "Sao Tome and Principe" : "San Tomé e Príncipe", + "El Salvador" : "O Salvador", + "Sint Maarten (Dutch part)" : "San Martín (parte neerlandesa)", + "Syrian Arab Republic" : "República Árabe de Siria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Illas Turcas e Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Territorios Franceses do Sur", + "Togo" : "Togo", + "Thailand" : "Tailandia", + "Tajikistan" : "Taxiquistán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor do Leste", + "Turkmenistan" : "Turquemenistán", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turquía", + "Trinidad and Tobago" : "Trinidade e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Provincia de China", + "Tanzania, United Republic of" : "Tanzania, República Unida de", + "Ukraine" : "Ucraína", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Illas exteriores menores dos Estados Unidos", + "United States of America" : "Estados Unidos de America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbekuistán", + "Holy See" : "Santa Sé (Vaticano)", + "Saint Vincent and the Grenadines" : "San Vicente e as Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana de", + "Virgin Islands, British" : "Illas Virxes, Británicas", + "Virgin Islands, U.S." : "Illas Virxes, EE.UU.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Illas Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "Mayotte" : "Maiote", + "South Africa" : "Suráfrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Cimbabue", + "Background blur" : "Esvaer o fondo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Non foi posíbel comprobar a compatibilidade de carga de WASM. Comprobe manualmente se o seu servidor web serve ficheiros «.wasm».", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "O seu servidor web non está configurado correctamente para entregar ficheiros «.wasm». Este é normalmente un problema coa configuración de Nginx. Para o esvaemento do fondo, necesita un axuste para entregar tamén ficheiros «.wasm». Compare a súa configuración de Nginx coa configuración recomendada na nosa documentación.", + "Talk configuration values" : "Valores de configuración de Parladoiro", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forzar a duración dunha chamada só é posíbel co cron do sistema. Active o cron do sistema ou retirar a configuración «max_call_duration».", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Os valores pequenos de «max_call_duration» (actualmente definidos en %d) non son aplicábeis por mor de limitacións técnicas. O traballo en segundo plano só se executa cada 5 minutos, úseo baixo a súa responsabilidade.", + "Federation" : "Federación", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Recoméndase encarecidamente configurar «memcache.locking» cando estea activada a federación de Parladoiro.", + "High-performance backend" : "Infraestrutura de alto rendemento", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "A infraestrutura de alto rendemento está sen configurar: a execución de Parladoiro de Nextcloud sen a infraestrutura de alto rendemento só se adapta a chamadas moi pequenas (máx. 2-3 participantes). Configure a infraestrutura de alto rendemento para garantir que as chamadas con varios participantes funcionen sen problemas.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Executar a infraestrutura de alto rendemento en modo «conversation_cluster» está obsoleto e non vai estar admitido na próxima versión. Hoxe en día, a infraestrutura de alto rendemento admite a agrupación en clústeres reais, que é o que debería ser empregado.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "A definición de varias infraestruturas de alto rendemento está en desuso e xa non se admitirá na próxima versión. En troques, débese configurar un balanceador de carga xunto cos servidores de sinalización en clúster e configurarse nos axustes de Parladoiro.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A chave pública almacenada para o algoritmo usado %1$s non coincide coa chave privada almacenada. Execute %2$s para arranxar o problema.", + "High-performance backend not configured correctly. Run %s for details." : "A infraestrutura de alto rendemento non está configurada correctamente. Execute %s para obter detalles-", + "High-performance backend not configured correctly" : "A infraestrutura de alto rendemento non está configurada correctamente", + "Error: Cannot connect to server" : "Erro: Non foi posíbel conectar co servidor", + "Error: Server did not respond with proper JSON" : "Erro: o servidor non respondeu con JSON axeitado", + "Error: Certificate expired" : "Erro: caducou o certificado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: a hora do sistema do servidor Nextcloud e do servidor da infraestrutura de alto rendemento non están sincronizadas. Asegúrese de que ambos os servidores estean conectados a un servidor de hora ou sincronice manualmente a súa hora.", + "Could not get version" : "Non foi posíbel obter a versión", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erro: Versión en execución: {version}; Debe actualizar o servidor para que sexa compatíbel con esta versión de Parladoiro", + "Error: Server responded with: {error}" : "Erro: o servidor respondeu con: {error}", + "Error: Unknown error occurred" : "Erro: produciuse un erro descoñecido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advertencia: Versión en execución: {versión}; O servidor non admite todas as funcionalidades desta versión de Talk, faltan as funcionalidades: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "É moi recomendábel configurar unha memoria tobo cando se executa Parladoiro de Nextcloud cunha infraestrutura de alto rendemento.", + "Client Push" : "Notificación automática ao cliente", + "Client Push is installed, this improves the punctuality of Talk notifications." : "A notificación automática ao cliente está instalada, isto mellora a puntualidade das notificacións de Parladoiro.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} non está instalada. Isto pode provocar un atraso nas notificacións de Parladoiro.", + "Recording backend" : "Infraestrutura de gravación", + "Using the recording backend requires a High-performance backend." : "O uso da infraestrutura de gravación precisa dunha infraestrutura de alto rendemento.", + "No recording backend configured" : "Non hai ningunha infraestrutura de gravación configurada", + "SIP configuration" : "Configuración SIP", + "Using the SIP functionality requires a High-performance backend." : "O uso da funcionalidade SIP precisa dunha infraestrutura de alto rendemento.", + "No SIP backend configured" : "Non hai ningunha infraestrutura SIP configurada", + "Invalid date, date format must be YYYY-MM-DD" : "Data incorrecta, o formato da data debe ser AAAA-MM-DD", + "Conversation not found" : "Non se atopou a conversa", + "Path is already shared with this conversation" : "A ruta xa está compartida con esta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Parolas, conferencias de vídeo e son empregando WebRTC ", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Parolas, conferencias de vídeo e son empregando WebRTC \n\n* 💬 **Parolar** Parladoiro de Nextcloud inclúe parolas de texto simple, que lle permite compartir ou enviar ficheiros desde a súa aplicación Nextcloud Ficeiros ou dispositivo local e mencionar a outros participantes.\n* 👥 **Chamadas privadas, grupais, públicas e protexidas por contrasinal!** Convide a alguén, a todo un grupo ou envíe unha ligazón pública para convidar a unha chamada.\n* 🌐 **Parolas federadas** Parole con outros usuarios de Nextcloud nos seus servidores\n* 💻 **Compartir pantalla!** Comparta a súa pantalla cos participantes na súa chamada.\n* 🚀 **Integración con outras aplicacións de Nextcloud** como Ficheiros, Calendario, Estado do usuario, Taboleiro, Fluxo, Mapas, Selector intelixente, Contactos, Gabeta e moitos máis.\n* 🌉 **Sincronizar con outras solucións de parola** Con [Matterbridge]https://github.com/42wim/matterbridge/) integrado en Parladoiro, pode sincronizar de xeito doado moitas outras solucións de parolas con Parladoiro de Nextcloud e viceversa.", + "Leave call" : "Abandonar a chamada", + "Navigating away from the page will leave the call in {conversation}" : "A navegación fora da páxina provocará o abandono da chamada en {conversation}", + "Stay in call" : "Mantérse na chamada", + "Error occurred when getting the conversation information" : "Produciuse un erro ao obter a información da conversa", + "Discuss this file" : "Debater sobre este ficheiro", + "Share this file with others to discuss it" : "Comparta este ficheiro cos demais para debater sobre el", + "Share this file" : "Compartir este ficheiro", + "Join conversation" : "Unirse á conversa", + "This conversation is password-protected." : "Esta conversa está protexida con contrasinal.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Detectamos varios intentos de contrasinal non válidos desde o seu IP. Por mor diso, o seu próximo intento estará limitado a 30 segundos.", + "The password is wrong. Try again." : "O contrasinal é incorrecto. Ténteo de novo.", + "Password" : "Contrasinal", + "Submit" : "Enviar", + "Error requesting the password." : "Produciuse un erro ao solicitar o contrasinal.", + "Request password" : "Solicitar contrasinal", + "This conversation has ended" : "Esta conversa rematou", + "Error occurred when joining the conversation" : "Produciuse un erro ao unirse á conversa", + "Close Talk sidebar" : "Pechar a barra lateral de Parladoiro", + "Open Talk sidebar" : "Abrir a barra lateral de Parladoiro", + "Everyone" : "Todos", + "Users and moderators" : "Usuarios e moderadores", + "Moderators only" : "Só os moderadores", + "Disable calls" : "Desactivar chamadas", + "Save changes" : "Gardar cambios", + "Saving …" : "Gardando…", + "Saved!" : "Gardado!", + "Limit to groups" : "Límite para grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cando se selecciona polo menos un grupo, só as persoas dos grupos listados poden formar parte das conversas.", + "Guests can still join public conversations." : "Os convidados aínda poden unirse a conversas públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Os usuarios que xa non poidan usar Parladoiro seguirán figurando como participantes nas súas conversas anteriores e tamén se conservarán as súas mensaxes de parolas.", + "Limit using Talk" : "Limitar o uso de Parladoiro", + "Limit creating a public and group conversation" : "Limitar a creación dunha conversa pública e de grupo", + "Limit creating conversations" : "Limitar a creación de conversas", + "Limit starting a call" : "Limitar o inicio dunha chamada", + "Limit starting calls" : "Limitar o inicio de chamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Cando inicia unha chamada, todos os que teñen acceso á conversa poden unirse á chamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Neste servidor están instalados os seguintes bots. Na documentación pode atopar detalles sobre como {linkstart1}construír o seu propio bot{linkend} ou unha {linkstart2}lista de bots{linkend} para activar no seu servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Non hai ningún bot instalado neste servidor. Na documentación pode atopar detalles sobre como {linkstart1}construír o seu propio bot{linkend} ou unha {linkstart2}lista de bots{linkend} para activar no seu servidor.", + "Description is not provided" : "Non se fornece a descrición", + "Locked for moderators" : "Bloqueado para moderadores", + "Enabled" : "Activado", + "Disabled" : "Desactivado", + "Bots settings" : "Axustes dos bots", + "State" : "Estado", + "Name" : "Nome", + "Last error" : "Último erro", + "Total errors count" : "Reconto total de erros", + "Find more bots" : "Atopar máis bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Os servidores de confianza pódense configurar na {linkstart}Páxina de axustes da compartición{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "As parolas e as chamadas federadas xa funcionan. O manexo de anexos chegará nunha versión futura.", + "Enable Federation in Talk app" : "Activar a federación na aplicación Parladoiro", + "Permissions" : "Permisos", + "Allow users to be invited to federated conversations" : "Permitir que os usuarios sexan convidados a conversas federadas", + "Allow users to invite federated users into conversation" : "Permitir que os usuarios conviden a usuarios federados á conversa", + "Only allow to federate with trusted servers" : "Permitir federarse só con servidores de confianza", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Cando se selecciona polo menos un grupo, só as persoas dos grupos listados poden convidar usuarios federados a conversas.", + "Groups allowed to invite federated users" : "Grupos autorizados para convidar usuarios federados", + "Select groups …" : "Seleccionar grupos…", + "All messages" : "Todas as mensaxes", + "@-mentions only" : "Só as mencións con @", + "Off" : "Apagado", + "General settings" : "Axustes xerais", + "Default notification settings" : "Axustes predeterminados das notificacións", + "Default group notification" : "Notificación predeterminada de grupo", + "Default group notification for new groups" : "Notificación predeterminada de grupo para novos grupos", + "Integration into other apps" : "Integración noutras aplicacións", + "Allow conversations on files" : "Permitir conversas en ficheiros", + "Allow conversations on public shares for files" : "Permitir conversas en comparticións públicas de ficheiros", + "End-to-end encrypted calls" : "Chamadas cifradas de extremo a extremo", + "Enable encryption" : "Activar a cifraxe", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "As chamadas cifradas de extremo a extremo cunha ponte SIP configurada precisan dunha versión máis recente da infraestrutura de alto rendemento e da ponte SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Os clientes móbiles non admiten chamadas cifradas de extremo a extremo polo momento.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Premendo no botón superior á información do formulario envíase aos servidores de Struktur AG. Pode atopar máis información en {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendentes", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Active" : "Activo", + "Expired" : "Caducado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "Non foi posíbel solicitar a proba. Ténteo de novo máis tarde.", + "The account could not be deleted. Please try again later." : "Non foi posíbel eliminar a conta. Ténteo de novo máis tarde.", + "Hosted High-performance backend" : "Infraestrutura de alto rendemento aloxada", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "O noso socio Struktur AG ofrece un servizo onde se pode solicitar un servidor de sinalización aloxado. Para isto, só ten que cumprimentar o seguinte formulario e o seu Nextcloud solicitarao. Unha vez que o servidor estea configurado para Vde., as credenciais encheranse automaticamente. Isto sobrescribirá os axustes do servidor de sinalización existente.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se a súa conta de infraestrutura de alto rendemento inclúe a funcionalidade STUN e/ou TURN, actualizaranse os axustes en consecuencia.", + "URL of this Nextcloud instance" : "URL desta instancia de Nextcloud", + "Full name of the user requesting the trial" : "Nome completo do usuario que solicita a proba", + "Email of the user" : "Correo-e do usuario", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar a proba do servidor de sinalización", + "You can see the current status of your hosted signaling server in the following table." : "Pode ver o estado actual do servidor de sinalización aloxado na seguinte táboa.", + "Status" : "Estado", + "Created at" : "Creado ás", + "Expires at" : "Caduca ás", + "Limits" : "Limites", + "STUN included" : "STUN incluído", + "Yes" : "Si", + "No" : "Non", + "TURN included" : "TURN incluído", + "Delete the signaling server account" : "Eliminar a conta do servidor de sinalización", + "_%n user_::_%n users_" : ["%n usuario","%n usuarios"], + "Installed version: {version}" : "Versión instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Pode instalar Matterbridge para vincular Parladoiro de Nextcloud con outros servizos, visite a súa {linkstart1}páxina de GitHub{linkend} para obter máis detalles. A descarga e a instalación da aplicación pode levar un tempo. No caso de que se esgote, instáleo manualmente desde a {linkstart2}tenda de aplicacións de Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "O binario do Matterbridge ten permisos incorrectos. Asegúrese de que o ficheiro binario do Matterbridge é propiedade do usuario correcto e que se pode executar. Pódeo atopar en «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Non se atopou o binario do Matterbridge ou non foi posíbel executalo.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Tamén pode configurar a ruta ao binario d Matterbridge manualmente a través da configuración. Consulte a {linkstart}documentación de integración con Matterbridge{linkend} para obter máis información.", + "Downloading …" : "Descargando…", + "Install Talk Matterbridge" : "Instalar «Talk Matterbridge»", + "An error occurred while installing the Matterbridge app" : "Produciuse un erro ao instalar a aplicación Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Produciuse un erro ao instalar «Talk Matterbridge». Instáleo manualmente", + "Failed to execute Matterbridge binary." : "Produciuse un fallo ao executar o binario de Matterbridge.", + "Matterbridge integration" : "Integración de Matterbridge", + "Enable Matterbridge integration" : "Activar a integración de Matterbridge", + "Status: Checking connection" : "Estado: comprobando a conexión", + "OK: Running version: {version}" : "Correcto: executando a versión: {version}", + "Error: Server seems to be a Signaling server" : "Erro: o servidor parece ser un servidor de sinalización", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: os tempos do sistema do servidor Nextcloud e do servidor da infraestrutura de gravación non están sincronizados. Asegúrese de que ambos os servidores estean conectados a un servidor de tempo ou sincronice manualmente a súa hora.", + "Recording backend URL" : "URL da infraestrutura de gravación", + "Validate SSL certificate" : "Validar certificado SSL", + "Delete this server" : "Eliminar este servidor", + "Test this server" : "Probar este servidor", + "Disabled for all calls" : "Desactivado para todas as chamadas", + "Enabled for all calls" : "Activado para todas as chamadas", + "Configurable on conversation level by moderators" : "Configurábel a nivel de conversa polos moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "O axuste de PHP «upload_max_filesize» ou «post_max_size» só permitirá enviar ficheiros ata {maxUpload}.", + "Recording backend settings saved" : "Gardáronse os axustes da infraestrutura de gravación", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Os moderadores poderán activar o consentimento a nivel de conversa. O consentimento para gravar será necesario para cada participante antes de unirse a cada chamada desta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "O consentimento para ser gravado será necesario para cada participante antes de unirse a cada chamada.", + "The consent to be recorded is not required." : "Non é necesario o consentimento para ser gravado.", + "Recording backend configuration is only possible with a High-performance backend." : "A configuración da infraestrutura de gravación só é posíbel cunha infraestrutura de alto rendemento.", + "Add a new recording backend server" : "Engadir un novo servidor de infraestrutura de gravación", + "Shared secret" : "Segredo compartido", + "Recording consent" : "Consentimento de gravación", + "Recording transcription" : "Transcrición da gravación", + "Automatically transcribe call recordings with a transcription provider" : "Transcribe automaticamente as gravacións de chamadas cun provedor de transcrición", + "Automatically summarize call recordings with transcription and summary providers" : "Resume automaticamente as gravacións de chamadas con provedores de transcrición e resumo", + "SIP configuration saved!" : "Configuración SIP gardada!", + "SIP configuration is only possible with a High-performance backend." : "A configuración SIP só é posíbel cunha infraestrutura de alto rendemento.", + "Enable SIP Dial-out option" : "Activar a opción de marcación SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "O servidor de sinalización ten que ser actualizado para a funcionalidade de marcación SIP compatíbel.", + "Do not show SIP Dial-out caller number" : "Non amosar o número de chamada saínte de SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "O número anónimo debe aparecer como «descoñecido» ou «número agochado» para o destinatario da chamada", + "Dial-out number" : "Número de chamada saínte", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número con formato E164 usado como número de chamada alternativo para chamadas saíntes", + "Dial-out prefix" : "Prefixo de marcado", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefixo ao número de usuario configurado para as chamadas saíntes (o predeterminado é «+»)", + "Restrict SIP configuration" : "Restrinxir a configuración SIP", + "Enable SIP configuration" : "Activar a configuración SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Só os usuarios dos seguintes grupos poden activar SIP nas conversas que moderan", + "Phone number (Country)" : "Número de teléfono (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Esta información envíase en correos-e de convite e amosase na barra lateral a todos os participantes.", + "Nextcloud base URL" : "URL base de Nextcloud", + "Talk Backend URL" : "URL da infraestrutura de Parladoiro", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Funcionalidades dispoñíbeis", + "Error: Websocket connection failed" : "Erro: produciuse un fallo na conexión de Websocket.", + "Error code" : "Código de erro", + "Error message" : "Mensaxe de erro", + "Error: Websocket connection failed. Check browser console" : "Erro: produciuse un fallo na conexión de Websocket. Comprobe a consola do navegador", + "High-performance backend URL" : "URL da infraestrutura de alto rendemento", + "Missing High-performance backend warning hidden" : "Falta a advertencia de infraestrutura de alto rendemento agochada", + "High-performance backend settings saved" : "Gardáronse os axustes da infraestrutura de alto rendemento", + "Nextcloud Talk setup not complete" : "A configuración de Parladoiro de Nextcloud non está completa", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Teña en conta que nas chamadas con máis de 2 participantes sen a infraestrutura de alto rendemento, é probábel que os participantes experimenten problemas de conectividade e provoquen unha gran carga nos dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale a infraestrutura de alto rendemento para garantir que as chamadas con varios participantes funcionen sen problemas.", + "Nextcloud portal" : "Portal de Nextcloud", + "Quick installation guide" : "Guía de instalación rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "A infraestrutura de alto rendemento é necesaria para chamadas e conversas con varios participantes. Sen a infraestrutura, todos os participantes teñen que enviar o seu propio vídeo individualmente para cada outro participante, o que probabelmente causará problemas de conectividade e unha alta carga nos dispositivos participantes.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "É moi recomendábel configurar unha memoria tobo distribuída cando se use Parladoiro de Nextcloud xunto cunha infraestrutura de alto rendemento.", + "Add High-performance backend server" : "Engadir un servidor de infraestrutura de alto rendemento", + "Warn about connectivity issues in calls with more than 2 participants" : "Avisar sobre problemas de conectividade nas chamadas con máis de 2 participantes", + "STUN server URL" : "URL do servidor STUN", + "The server address is invalid" : "O enderezo do servidor non é válido", + "STUN settings saved" : "Gardáronse os axustes de STUN", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "O servidor STUN usase para determinar o enderezo IP público dos participantes que se atopan detrás dun encamiñador.", + "Add a new STUN server" : "Engadir un novo servidor STUN", + "{schema} scheme must be used with a domain" : "O esquema {schema} debe usarse cun dominio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "Só {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Correcto: o servidor TURN devolveu satisfactoriamente candidatos ICE", + "Error: No working ICE candidates returned by the TURN server" : "Erro: o servidor TURN non devolveu ningún candidato ICE traballando", + "Testing whether the TURN server returns ICE candidates" : "Probe se o servidor TURN devolve candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN", + "TURN server URL" : "URL do servidor TURN", + "TURN server secret" : "Servidor TURN segredo", + "TURN server protocols" : "Protocolos de servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Utilízase un servidor TURN para proxy do tráfico dos participantes detrás dunha devasa. Se os participantes individuais non poden conectarse con outros, probabelmente sexa preciso un servidor TURN. Consulte {linkstart}esta documentación{linkend} para obter instrucións de configuración.", + "TURN settings saved" : "Gardáronse os axustes de TURN", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Engadir un novo servidor TURN", + "Failed" : "Fallado", + "OK" : "Aceptar", + "Checking …" : "Comprobando…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallo: WebAssembly está desactivado ou non é compatíbel neste navegador. Active WebAssembly ou utilice un navegador compatíbel con el para facer a comprobación.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallo: O servidor web non devolveu correctamente os ficheiros «.wasm» e «.tflite». Consulte a sección «Requisitos do sistema» na documentación de Parladoiro.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Conforme: Os ficheiros «.wasm» e «.tflite» foron devoltos correctamente polo servidor web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Semella que a configuración de PHP e Apache non é compatíbel. Teña en conta que PHP só se pode usar co módulo MPM_PREFORK e PHP-FPM só se pode usar co módulo MPM_EVENT.", + "Web server setup checks" : "Comprobacións da configuración do servidor web", + "Files required for virtual background can be loaded" : "Pódense cargar os ficheiros necesarios para o fondo virtual", + "Federated user" : "Usuario federado", + "Assign participants to rooms" : "Asignar participantes a salas", + "Configure breakout rooms" : "Configurar salas parciais", + "Number of breakout rooms" : "Número de salas parciais", + "You can create from 1 to 20 breakout rooms." : "Vde. pode crear de 1 a 20 salas parciais.", + "Assignment method" : "Método de asignación", + "Automatically assign participants" : "Asignar automaticamente os participantes", + "Manually assign participants" : "Asignar manualmente os participantes", + "Allow participants to choose" : "Permitir que os participantes escollan", + "Create rooms" : "Crear salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Crear salas parciais", + "Reset" : "Restabelecer", + "Delete breakout rooms" : "Eliminar salas parciais", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "Perderanse as salas parciais e os axustes actuais", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes sen asignar", + "Back" : "Atrás", + "Assign" : "Asignar", + "Add participant \"{user}\"" : "Engadir o participante «{user}»", + "Now" : "Agora", + "Invalid calendar selected" : "Seleccionou un calendario incorrecto", + "Invalid start time selected" : "Seleccionou unha hora de inicio incorrecta", + "Invalid end time selected" : "Seleccionou unha hora de remate incorrecta", + "Unknown error occurred" : "Produciuse un erro descoñecido", + "Sending no invitations" : "Non enviar convites", + "{participant0} will receive an invitation" : "{participant0} recibirá un convite", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} recibirán un convite", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e %n máis recibirán un convite","{participant0}, {participant1} e outros %n máis recibirán un convite"], + "Invite {user}" : "Convidar a {user}", + "Invite all users and emails in this conversation" : "Convidar a todos os usuarios e correos-e nesta conversa", + "Meeting created" : "Xuntanza creada", + "Upcoming meetings" : "Próximas xuntanzas", + "Loading …" : "Cargando…", + "No upcoming meetings" : "Non hai xuntanzas próximas", + "Schedule a meeting" : "Programar unha xuntanza", + "Meeting title" : "Título da xuntanza", + "From" : "Desde", + "To" : "Ata", + "Calendar" : "Calendario", + "Attendees" : "Asistentes", + "No other participants to send invitations to." : "Non hai outros participantes aos que enviar convites.", + "Add attendees" : "Engadir asistentes", + "Save" : "Gardar", + "Search participants" : "Buscar participantes", + "No results" : "Sen resultados", + "Done" : "Feito", + "Disable live transcription" : "Desactivar a transcrición en directo", + "Disable live translation" : "Desactivar a tradución en directo", + "Original language: {languageName}" : "Idioma orixinal ({languageName})", + "Translated language" : "Idioma traducido", + "Translated language: {languageName}" : "Idioma traducido ({languageName})", + "Raise hand" : "Erguer a man", + "Raise hand (R)" : "Erguer a man (R)", + "Lower hand" : "Baixar a man", + "Lower hand (R)" : "Baixar a man (R)", + "Exit full screen (F)" : "Saír da pantalla completa (F)", + "Full screen (F)" : "Pantalla completa (F)", + "Speaker view" : "Vista do relator", + "Grid view" : "Ver como grade", + "Error when trying to load the available live transcription languages" : "Produciuse un erro ao tentar cargar os idiomas de transcrición en directo dispoñíbeis", + "Failed to enable live transcription" : "Produciuse un fallo ao activar a transcrición en directo", + "Failed to enable live translations" : "Produciuse un fallo ao activar a tradución en directo", + "Failed to disable live translations" : "Produciuse un fallo ao desactivar a tradución en directo", + "Recording consent is required" : "É necesario o consentimento para gravar", + "This conversation is read-only" : "Esta conversa é só de lectura", + "Conversation not found or not joined" : "Non se atopou a conversa ou non se uniu a ela", + "Lobby is still active and you're not a moderator" : "O ástrago segue activo e Vde. non é un moderador", + "Connection failed" : "Produciuse un fallo de conexión", + "Reload" : "Volver cargar", + "{nickName} raised their hand." : "{nickName} ergueu a man.", + "A participant raised their hand." : "Un participante ergueu a man.", + "Collapse stripe" : "Contraer pola raia", + "Expand stripe" : "Estender a franxa", + "Previous page of videos" : "Páxina anterior de vídeos", + "Next page of videos" : "Seguinte páxina de vídeos", + "Connecting …" : "Conectando…", + "Calling …" : "Chamando…", + "Waiting for {user} to join the call" : "Agardando a que {user} se una á chamada", + "Waiting for others to join the call …" : "Agardando que outros se unan á chamada…", + "You can invite others in the participant tab of the sidebar" : "Pode convidar a outros na lapela do participante da barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Pode convidar a outros na lapela do participante da barra lateral ou compartir esta ligazón para convidalos!", + "Share this link to invite others!" : "Comparta esta ligazón para convidar a outros!", + "Copy link" : "Copiar a ligazón", + "You are not allowed to enable audio" : "Vde. non ten permiso para activar o son", + "No audio. Click to select device" : "Sen son. Prema para seleccionar o dispositivo", + "Mute audio" : "Silenciar", + "Mute audio (M)" : "Silenciar (M)", + "Unmute audio" : "Desactivar o silencio", + "Unmute audio (M)" : "Desactivar o silencio (M)", + "None" : "Ningún", + "Select a microphone" : "Seleccione un micrófono", + "Select a speaker" : "Seleccione un altofalante", + "Microphone settings" : "Axustes do micrófono", + "Check devices" : "Comprobar os dispositivos", + "Access to camera was denied" : "Foi denegado o acceso á cámara", + "Error while accessing camera: It is likely in use by another program" : "Produciuse un erro ao acceder á cámara: é probábel que estea en uso por outro programa", + "Error while accessing camera" : "Produciuse un erro ao acceder á cámara", + "You have been muted by a moderator" : "Vde. foi silenciado por un moderador", + "Hide presenter video" : "Agochar o vídeo do presentador", + "You are not allowed to enable video" : "Vde. non ten permiso para activar o vídeo", + "No video. Click to select device" : "Sen vídeo. Prema para seleccionar o dispositivo", + "Disable video" : "Desactivar o vídeo", + "Disable video (V)" : "Desactivar o vídeo (V)", + "Enable video" : "Activar o vídeo", + "Enable video (V)" : "Activar o vídeo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar o vídeo — A súa conexión interromperase brevemente ao activar o vídeo por primeira vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar o vídeo (V) — A súa conexión interromperase brevemente ao activar o vídeo por primeira vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Activar vídeo. A súa conexión será interrompida brevemente ao activar o vídeo por primeira vez", + "Select a video device" : "Seleccione un dispositivo de vídeo", + "Show presenter" : "Amosar o presentador", + "You" : "Vde.", + "Mute" : "Silenciar", + "Muted" : "Silenciado", + "Show screen" : "Amosar a súa pantalla", + "Stop following" : "Deixar de seguir", + "Connection could not be established …" : "Non foi posíbel estabelecer a conexión…", + "Connection was lost and could not be re-established …" : "Perdeuse a conexión e non foi posíbel restabelecela…", + "Connection could not be established. Trying again …" : "Non foi posíbel estabelecer a conexión. Tentando de novo…", + "Connection lost. Trying to reconnect …" : "Perdeuse a conexión. Tentando conectar de novo…", + "Connection problems …" : "Problemas de conexión…", + "Collapse" : "Contraer", + "Expand" : "Estender", + "You need to be logged in to upload files" : "Ten que ter accedido para enviar ficheiros", + "Drop your files to upload" : "Arrastre os seus ficheiros para envialos", + "Conversation messages" : "Mensaxes de conversa", + "Scroll to bottom" : "Desprazarse ata o final", + "Post message" : "Publicar a mensaxe", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Favorito", + "Banned users" : "Usuarios expulsados", + "Manage the list of banned users in this conversation." : "Xestionar a lista de usuarios expulsados desta conversa.", + "Manage bans" : "Xestionar as expulsións", + "No banned users" : "Non hai ningún usuario expulsado", + "Banned by:" : "Expulsado por:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Agochar os detalles", + "Show details" : "Amosar os detalles", + "Unban" : "Retirar a expulsión", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Pode cambiar o título e a descrición no {linkstart}Calendario ↗{linkend}.", + "Error while updating conversation name" : "Produciuse un erro ao actualizar o nome da conversa", + "Error while updating conversation description" : "Produciuse un erro ao actualizar a descrición da conversa", + "Enter a name for this conversation" : "Introduza un nome para esta conversa", + "Edit conversation name" : "Editar o nome da conversa", + "Edit conversation description" : "Editar a descrición da conversa", + "Enter a description for this conversation" : "Introduza unha descrición para esta conversa", + "Picture" : "Imaxe", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Nesta conversa é posíbel activar estes bots. Póñase en contacto coa administración da súa instancia para instalar máis bots neste servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Neste servidor non hai bots instalados. Póñase en contacto coa administración da súa instancia para instalar bots neste servidor.", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Breakout rooms" : "Salas parciais", + "Manage breakout rooms" : "Xestionar as salas parciais", + "Set up breakout rooms for this conversation" : "Preparar as salas parciais para esta conversa", + "Please select a valid PNG or JPG file" : "Seleccione un ficheiro PNG ou JPG válido", + "Choose your conversation picture" : "Escolla a imaxe da súa conversa", + "Choose" : "Escoller", + "Error setting conversation picture" : "Produciuse un erro ao axustar a imaxe da conversa", + "Could not set the conversation picture: {error}" : "Non foi posíbel definir a imaxe da conversa: {error}", + "Error cropping conversation picture" : "Produciuse un erro ao recortar a imaxe da conversa", + "Error removing conversation picture" : "Produciuse un erro ao retirar a imaxe da conversa", + "Set emoji as conversation picture" : "Definir o «emoji» como imaxe da conversa", + "Set background color for conversation picture" : "Definir a cor de fondo para a imaxe da conversa", + "Upload conversation picture" : "Enviar a imaxe da conversa", + "Choose conversation picture from files" : "Escoller a imaxe da conversa dos ficheiros", + "Remove conversation picture" : "Retirar a imaxe da conversa", + "The file must be a PNG or JPG" : "O ficheiro debe ser PNG ou JPG", + "Set picture" : "Definir a imaxe", + "Default permissions modified for {conversationName}" : "Modificáronse os permisos predeterminados para {conversationName}", + "Could not modify default permissions for {conversationName}" : "Non foi posíbel modificar os permisos predeterminados para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Editar os permisos predeterminados dos participantes nesta conversa. Estes axustes non afectan aos moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Cada vez que se modifiquen os permisos nesta sección, perderanse os permisos personalizados previamente asignados aos participantes individuais.", + "All permissions" : "Todos os permisos", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Os participantes teñen permisos para iniciar unha chamada, unirse a unha chamada, activar o son e o vídeo e compartir a pantalla.", + "Restricted" : "Restrinxida", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Os participantes poden unirse ás chamadas, mais non poden activar o son nin o vídeo nin compartir a pantalla ata que un moderador lles conceda manualmente os permisos.", + "Advanced permissions" : "Permisos avanzados", + "Edit permissions" : "Editar permisos", + "Conversation settings" : "Axustes da conversa", + "Basic Info" : "Información básica", + "Personal" : "Persoal", + "Moderation" : "Moderación", + "Setup overview" : "Vista xeral da configuración", + "Live transcription" : "Transcrición en directo", + "Enable live transcription" : "Activar a transcrición en directo", + "Breakout Rooms" : "Salas parciais", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de perigo", + "Archive conversation" : "Arquivar a conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "As conversas arquivadas agóchanse da lista de conversas de xeito predeterminado. Porén, seguirán a aparecer cando busque o nome da conversa ou acceda a unha lista de conversas arquivadas.", + "Do you really want to leave \"{displayName}\"?" : "Confirma que quere abandonar «{displayName}»?", + "You can archive this conversation instead." : "En troques, pode arquivar esta conversa.", + "Leave conversation" : "Abandonar a conversa", + "You need to promote a new moderator before you can leave the conversation" : "Debe promover un novo moderador antes de poder abandonar a conversa", + "Delete conversation" : "Eliminar a conversa", + "Do you really want to delete \"{displayName}\"?" : "Confirma que quere eliminar «{displayName}»?", + "Error while deleting conversation" : "Produciuse un erro ao eliminar a conversa", + "Delete all chat messages" : "Eliminar todas as mensaxes da parola", + "Do you really want to delete all messages in \"{displayName}\"?" : "Confirma que quere eliminar todas as mensaxes de «{displayName}»?", + "Error while clearing chat history" : "Produciuse un erro ao limpar o historial da parola", + "Be careful, these actions cannot be undone." : "Vaia a modo, estas accións non se poden desfacer.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Unha vez que se sae dunha conversación, para unirse de novo a unha conversa pechada, é necesario un convite. Pódese volver a unir a unha conversa aberta en calquera momento.", + "Permanently delete this conversation." : "Eliminar definitivamente esta conversa.", + "Delete chat messages" : "Eliminar as mensaxes das parolas", + "Permanently delete all the messages in this conversation." : "Eliminar definitivamente todas as mensaxes desta conversa.", + "_%n hour_::_%n hours_" : ["%n hora","%n horas"], + "_%n day_::_%n days_" : ["%n día","%n días"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas"], + "Custom expiration time" : "Tempo de caducidade personalizado", + "Message expiration disabled" : "Foi desactivada a caducidade da mensaxe", + "Message expiration set: {duration}" : "Definición da caducidade da mensaxe: {duration}", + "Error when trying to set message expiration" : "Produciuse un erro ao tentar definir a caducidade da mensaxe", + "Message expiration" : "Caducidade da mensaxe", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensaxes das parolas poden caducar após dun tempo determinado. Nota: Os ficheiros compartidos na parola non se eliminarán para o propietario, mais xa non se compartirán na conversa.", + "Set message expiration" : "Definir a caducidade da mensaxe", + "Current message expiration" : "Caducidade actual das mensaxes", + "Password copied to clipboard" : "O contrasinal foi copiado no portapapeis", + "Password could not be copied" : "Non foi posíbel copiar o contrasinal", + "Guest access" : "Acceso de convidado", + "Breakout rooms are not allowed in public conversations." : "Non se permiten as salas de parciais nas conversas públicas.", + "Allow guests to join this conversation via link" : "Permite que os convidados se unan a esta conversa mediante unha ligazón", + "Password protection" : "Protección por contrasinal", + "This conversation is password-protected. Guests need password to join" : "Esta conversa está protexida con contrasinal. Os convidados necesitan un contrasinal para unirse", + "Password protection is needed for public conversations" : "A protección por contrasinal é necesaria para as conversas públicas", + "Set a password" : "Definir un contrasinal", + "Change password" : "Cambiar o contrasinal", + "Enter new password" : "Introduza un novo contrasinal", + "Save password" : "Gardar o contrasinal", + "Copy password" : "Copiar o contrasinal", + "Guests are allowed to join this conversation via link" : "Os convidados poden unirse a esta conversa mediante a ligazón", + "Guests are not allowed to join this conversation" : "Os convidados non poden unirse a esta conversa", + "Resend invitations" : "Volver enviar os convites", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversa está aberta tanto para usuarios rexistrados como para usuarios creados coa aplicación Convidados (Guests)", + "This conversation is open to registered users" : "Esta conversa está aberta a usuarios rexistrados", + "This conversation is limited to the current participants" : "Esta conversa está limitada aos participantes actuais", + "You opened the conversation to both registered users and users created with the Guests app" : "Vde. abriu a conversa tanto aos usuarios rexistrados coma aos usuarios creados coa aplicación de Convidados (Guests)", + "Error occurred when opening or limiting the conversation" : "Produciuse un erro ao abrir ou limitar a conversa", + "Open conversation to registered users, showing it in search results" : "Abrir a conversa aos usuarios rexistrados, amosándoa nos resultados da busca", + "Also open to users created with the Guests app" : "Aberta tamén a usuarios creados coa aplicación Convidados (Guests)", + "Open conversation" : "Conversa aberta", + "Set language spoken in calls" : "Definir o idioma falado nas chamadas", + "Languages could not be loaded" : "Non foi posíbel cargar os idiomas", + "Loading languages …" : "Cargando os idiomas…", + "Invalid language" : "Idioma non válido", + "Default language (English)" : "Idioma predeterminado (Inglés)", + "Default live transcription language set" : "Definir o idioma predeterminado de transcrición en directo", + "Live transcription language set: {languageName}" : "Idioma de transcrición en directo definido: {languageName}", + "Error when trying to set live transcription language" : "Produciuse un erro ao tentar definir o idioma de transcrición en directo", + "Start time: {date}" : "Hora de inicio: {data}", + "Start time has been updated" : "Actualizouse a hora de inicio", + "Error occurred while updating start time" : "Produciuse un erro ao actualizar a hora de inicio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ao activar o ástrago, os que non son moderadores serán retirados da chamada en proceso.", + "Enable lobby, restricting the conversation to moderators" : "Activar o ástrago, limitando a conversa aos moderadores", + "Meeting start time" : "Hora de inicio da xuntanza", + "Start time (optional)" : "Hora de inicio (opcional)", + "Import email participants" : "Importar participantes polo correo-e", + "You can import a list of email participants from a CSV file." : "Pode importar unha lista de participantes polo correo-e desde un ficheiro CSV.", + "Poll drafts" : "Borradores de enquisas", + "Browse poll drafts" : "Examinar os borradores de enquisas", + "Error occurred when locking the conversation" : "Produciuse un erro ao bloquear a conversa", + "Error occurred when unlocking the conversation" : "Produciuse un erro ao desbloquear a conversa", + "Lock conversation" : "Bloquear a conversa", + "This will also terminate the ongoing call." : "Isto tamén rematará a chamada en proceso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Bloquear a conversa para evitar que ninguén publique mensaxes ou inicie chamadas", + "Edit" : "Editar", + "More information" : "Máis información", + "Delete" : "Eliminar", + "Add new bridged channel to current conversation" : "Engadir unha nova canle ponte á conversa actual", + "unknown state" : "estado descoñecido", + "running" : "en execución", + "not running, check Matterbridge log" : "non esta en execución, comprobe o rexistro de Matterbridge", + "not running" : "non se está a executar", + "Bridge saved" : "Ponte gardada", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Co Matterbridge pode pontear canles de varios sistemas de mensaxería instantánea.", + "More info on Matterbridge" : "Máis información en Matterbridge.", + "Messaging systems" : "Sistemas de mensaxería", + "Enable bridge" : "Activar a ponte", + "Show Matterbridge log" : "Amosar o rexistro do Matterbridge", + "Log content" : "Contido do rexistro", + "Only moderators are allowed to mention @all" : "Só a moderación pode mencionar a @todos", + "All participants are allowed to mention @all" : "Todos os participantes poden mencionar a @todos", + "Participants are now allowed to mention @all." : "Agora os participantes poden mencionar a @todos.", + "Mentioning @all has been limited to moderators." : "A mención @todos foi limitada para a moderación.", + "Allow participants to mention @all" : "Permitir que os participantes mencionen a @todos", + "Mention permissions" : "Permisos de mención", + "Notifications" : "Notificacións", + "Notify about calls in this conversation" : "Notificar sobre as chamadas nesta conversa", + "Important conversation" : "Conversa importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Nas conversas importantes, ignorarase o estado «Non molestar»", + "Sensitive conversation" : "Conversa sensíbel", + "Message preview will be disabled in conversation list and notifications" : "A vista previa da mensaxe estará desactivada na lista de conversas e nas notificacións", + "Recording consent is required for calls in this conversation" : "É necesario o consentimento de gravación para as chamadas nesta conversa", + "Recording consent is not required for calls in this conversation" : "Non é necesario o consentimento de gravación para as chamadas nesta conversa", + "Recording consent requirement was updated" : "Actualizouse o requisito de consentimento de gravación", + "Error occurred while updating recording consent" : "Produciuse un fallo ao actualizar o consentimento de gravación", + "Recording Consent" : "Consentimento de gravación", + "Recording consent cannot be changed once a call or breakout session has started." : "Non é posíbel cambiar o consentimento de gravación unha vez que se inicia unha chamada ou unha sesión parcial.", + "Require recording consent before joining call in this conversation" : "Esixir o consentimento de gravación antes de unirse á chamada nesta conversa", + "Recording consent is required for all calls" : "O consentimento de gravación é necesario para todas as chamadas", + "SIP dial-in is now possible without PIN requirement" : "Agora non se precisa dun PIN para a marcación SIP", + "SIP dial-in is now enabled" : "Agora está activada a marcación SIP", + "SIP dial-in is now disabled" : "Agora está desactivada a marcación SIP", + "Error occurred when enabling SIP dial-in" : "Produciuse un erro ao activar a marcación SIP", + "Error occurred when disabling SIP dial-in" : "Produciuse un erro ao desactivar a marcación SIP", + "Phone and SIP dial-in" : "Marcación de teléfono e SIP", + "Enable phone and SIP dial-in" : "Activar a marcación de teléfono e SIP", + "Allow to dial-in without a PIN" : "Permitir marcar sen PIN", + "Ongoing" : "En proceso", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persoa aceptou","%n persoas aceptaron"], + "_%n person declined_::_%n people declined_" : ["%n persoa declinou","%n persoas declinaron"], + "_and %n other attachment_::_and %n other attachments_" : ["e outro anexo","e outros %n anexos"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "En {conversation}", + "View attachment" : "Ver o anexo", + "Join" : "Unirse", + "View conversation" : "Ver a conversa", + "View event on Calendar" : "Ver o evento no Calendario", + "Error while creating the conversation" : "Produciuse un erro ao crear a conversa", + "Hello, {displayName}" : "Ola, {displayName}", + "Start meeting now" : "Comezar a xuntanza agora", + "Give your meeting a title" : "Asígnelle un título á xuntanza", + "Create and copy link" : "Crear e copiar a ligazón", + "Create a new conversation" : "Crear unha nova conversa", + "Join open conversations" : "Unirse a conversas abertas", + "Call a phone number" : "Chamar a un número de teléfono", + "Scroll backward" : "Desprazarse cara atrás", + "Scroll forward" : "Desprazarse cara adiante", + "Schedule meetings" : "Programar xuntanzas", + "You don't have any upcoming meetings" : "Vde. non ten xuntanzas proximamente", + "Open calendar" : "Abre o calendario", + "Unread mentions" : "Mencións sen ler", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "As mensaxes nas que foi mencionado amosaranse aquí. Pode mencionar ás persoas escribindo @ seguido do seu nome", + "Upcoming reminders" : "Próximos lembretes", + "Message reminders" : "Lembretes de mensaxes", + "Set a reminder on a message to be notified" : "Defina un lembrete nunha mensaxe para ser notificado", + "Start a group conversation" : "Iniciar unha conversa en grupo", + "Create conversation" : "Crear conversa", + "Enter your name" : "Introduza o seu nome", + "Submit name and join" : "Envíe o nome e únase", + "Do you already have an account?" : "Xa ten unha conta?", + "Log in" : "Acceder", + "Error while verifying uploaded file" : "Produciuse un erro ao verificar o ficheiro enviado", + "Uploaded file is verified" : "O ficheiro enviado foi verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "O formato de contido é de valores separados por comas (CSV):
— A liña de cabeceira é necesaria e debe coincidir con «nome»,«correo» ou só «correo»
— Unha entrada por liña (p. ex., «Xan Carallás»,«xan@example.tld»)", + "Participants added successfully" : "Os participantes foron engadidos correctamente", + "Error while adding participants" : "Produciuse un erro ao engadir os participantes", + "Import a file" : "Importar un ficheiro", + "Browse" : "Examinar", + "Verifying uploaded file …" : "Verificando o ficheiro enviado…", + "This might take a moment" : "Isto pode levar un tempo", + "Send invitations" : "Enviando os convites", + "_%n invalid email_::_%n invalid emails_" : ["%n correo non válido","%n correos non válidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n correos xa foi importado ou duplicado","%n correos xa foron importados ou duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Enviouse %n convite","Enviáronse %n convites"], + "An error occurred while calling a phone number" : "Produciuse un erro ao chamar a un número de teléfono", + "Phone number could not be called: {error}" : "Non foi posíbel chamar ao número de teléfono: {error}", + "Phone number could not be called" : "Non foi posíbel chamar ao número de teléfono", + "Search participants or phone numbers" : "Buscar participantes ou números de teléfono", + "Creating the conversation …" : "Creando a conversa…", + "Mark as read" : "Marcar como lido", + "Mark as unread" : "Marcar como sen ler", + "Remove from favorites" : "Retirar de favoritos", + "Add to favorites" : "Engadir a favoritos", + "Unarchive conversation" : "Desarquivar a conversa", + "Ignore \"Do not disturb\"" : "Ignorar «Non molestar»", + "You need to promote a new moderator before you can leave the conversation." : "Debe promover un novo moderador antes de poder abandonar a conversa.", + "Conversation actions" : "Accións de conversa", + "Notify about calls" : "Notificar sobre as chamadas", + "Hide message text" : "Agochar o texto da mensaxe", + "Pending invitations" : "Convites pendentes", + "From {user} at {remoteServer}" : "De {user} en {remoteServer}", + "Decline invitation" : "Declinar o convite", + "Accept invitation" : "Aceptar o convite", + "No pending invitations" : "Non hai convites pendentes", + "Home" : "Inicio", + "Unread" : "Sen ler", + "Mentions" : "Mencións", + "Meetings" : "Xuntanzas", + "Alphabetically" : "Alfabeticamente", + "No followed threads" : "Ningún fío seguido", + "No matches found" : "Non se atopou ningunha coincidencia", + "No conversations found" : "Non se atopou ningunha conversa", + "You have no archived conversations." : "Vde. non ten conversas arquivadas.", + "Subscribe to an existing thread or start your own." : "Subscríbase a un fío existente ou inicie un propio", + "You have no unread mentions." : "Vde. non ten mencións sen ler.", + "You have no unread messages." : "Vde. non ten mensaxes sen ler.", + "An error occurred while performing the search" : "Produciuse un erro ao realizar a busca", + "Conversation list" : "Lista de conversas", + "Filter conversations by" : "Filtrar conversas por", + "Unread messages" : "Mensaxes sen ler", + "Meeting conversations" : "Conversas das xuntanzas", + "Clear filters" : "Limpar os filtros", + "New personal note" : "Nova nota persoal", + "Back to conversations" : "Volver ás conversas", + "Archived conversations" : "Conversas arquivadas", + "Threads" : "Fíos", + "Clear filter" : "Limpar o filtro", + "Show more threads" : "Amosar máis fíos", + "App settings" : "Axustes da aplicación", + "Users" : "Usuarios", + "Groups" : "Grupos", + "Teams" : "Equipos", + "Federated users" : "Usuarios federados", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Outras orixes", + "Open conversations" : "Conversas abertas", + "No search results" : "Sen resultados de busca", + "Users, groups and teams" : "Usuarios, grupos e equipos", + "Users and groups" : "Usuarios e grupos", + "Users and teams" : "Usuarios e equipos", + "Groups and teams" : "Grupos e equipos", + "New group conversation" : "Nova conversa en grupo", + "The meeting will start soon" : "A xuntanza comezará decontado", + "This meeting is scheduled for {startTime}" : "Esta xuntanza está programada para as {startTime}", + "You are currently waiting in the lobby" : "Agora está agardando no ástrago.", + "Enable noise suppression" : "Activar a supresión do ruído", + "Reduce background noises for better voice quality" : "Reducir os ruídos de fondo para mellorar a calidade da voz", + "Enable echo cancellation" : "Activar cancelación de eco", + "Minimize echo effect from own surrounding" : "Minimizar o efecto de eco do seu propio contorno", + "Enable auto gain control" : "Activar o control automático de ganancia", + "Dynamically adjust microphone volume for consistent level" : "Axusta dinamicamente o volume do micrófono para un nivel constante", + "Select microphone" : "Seleccione o micrófono", + "No microphone available" : "Non hai micrófonos dispoñíbeis", + "Select speaker" : "Seleccione o altofalante", + "No speaker available" : "Non hai ningún altofalante dispoñíbel", + "Select camera" : "Seleccione a cámara", + "No camera available" : "Non hai cámaras dispoñíbeis", + "Select a device" : "Seleccione un dispositivo", + "Playing …" : "Reproducindo…", + "Test speakers" : "Probar os altofalantes", + "Test" : "Proba", + "Devices" : "Dispositivos", + "Backgrounds" : "Fondos", + "No audio" : "Sen son", + "No camera" : "Sen cámara", + "Display video as you will see it (mirrored)" : "Amosa o vídeo tal e como o verá (reflectido)", + "Display video as others will see it" : "Amosa o vídeo tal e como o verán os demais", + "Calls are not supported in your browser" : "O seu navegador non admite chamadas", + "Access to microphone is only possible with HTTPS" : "O acceso ao micrófono só é posíbel con HTTPS", + "Access to microphone was denied" : "Foi denegado o acceso ao micrófono", + "Error while accessing microphone" : "Produciuse un erro ao acceder ao micrófono", + "Access to camera is only possible with HTTPS" : "O acceso á cámara só é posíbel con HTTPS", + "The call is being recorded." : "Estase a gravar a chamada.", + "The call might be recorded." : "É posíbel que a chamada sexa gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A gravación pode incluír a súa voz, o vídeo da cámara e da pantalla compartida. É preciso o seu consentimento antes de unirse á chamada.", + "Give consent to the recording of this call" : "Dar consentimento para a gravación desta chamada", + "Show more info" : "Amosar máis información", + "Audio is not available" : "O son non está dispoñíbel", + "Video is not available" : "O vídeo non está dispoñíbel", + "Start recording immediately with the call" : "Comezar a gravar inmediatamente coa chamada", + "Notify all participants about this call" : "Notificar a todos os participantes sobre esta chamada", + "Apply settings" : "Aplicar os axustes", + "Select virtual office background" : "Seleccione o fondo virtual de oficina", + "Select virtual home background" : "Seleccione o fondo virtual de vivenda", + "Select virtual abstract background" : "Seleccione o fondo virtual abstracto", + "Select virtual beach background" : "Seleccione o fondo virtual de praia", + "Select virtual park background" : "Seleccione o fondo virtual de parque", + "Select virtual theater background" : "Seleccione o fondo virtual de teatro", + "Select virtual library background" : "Seleccione o fondo virtual de biblioteca", + "Select virtual space station background" : "Seleccione o fondo virtual de estación espacial", + "Error while uploading the file" : "Produciuse un erro ao enviar o ficheiro", + "Select a file" : "Seleccione un ficheiro", + "Invalid path selected" : "Seleccionou unha ruta incorrecta.", + "Select virtual background from file {fileName}" : "Seleccione un fondo virtual desde o ficheiro {fileName}", + "Blur" : "Esvaer", + "Upload" : "Enviar", + "Files" : "Ficheiros", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "A mensaxe caducou ou foi eliminada", + "Cancel quote" : "Cancelar a mención", + "24 hours" : "24 horas", + "7 days" : "7 días", + "30 days" : "30 días", + "Until unpin" : "Ata que se desprenda", + "Clear reminder – {timeLocale}" : "Limpar o lembrete – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Pinned by you" : "Fixado por vostede", + "Pinned by {actor}" : "Fixado por {actor}", + "Until {absoluteDate}" : "Ata {absoluteDate}", + "Message text copied to clipboard" : "Copiouse o texto da mensaxe no portapapeis", + "Message text could not be copied" : "Non foi posíbel copiar o texto da mensaxe", + "Message forwarded to \"Note to self\"" : "Reenviouse a mensaxe a «Notas para un mesmo»", + "Error while forwarding message to \"Note to self\"" : "Produciuse un erro ao reenviar a mensaxe a «Notas para un mesmo»", + "A reminder was successfully removed" : "Retirouse correctamente un lembrete", + "Error occurred when removing a reminder" : "Produciuse un erro ao retirar un lembrete", + "A reminder was successfully set at {datetime}" : "Definiuse correctamente un lembrete para {datetime}", + "Error occurred when creating a reminder" : "Produciuse un erro ao crear un lembrete", + "Add a reaction to this message" : "Engadir unha reacción a esta mensaxe", + "Reply" : "Responder", + "More actions" : "Máis accións", + "Set reminder" : "Definir un lembrete", + "Pin message" : "Fixar a mensaxe", + "Unpin message" : "Desprender a mensaxe", + "Reply privately" : "Responder en privado", + "Edit message" : "Editar a mensaxe", + "Copy message" : "Copiar a mensaxe", + "Copy message link" : "Copiar a ligazón da mensaxe", + "Go to file" : "Ir ao ficheiro", + "Download file" : "Descargar ficheiro", + "Go to thread" : "Ir ao fío", + "Edit thread details" : "Editar os detalles do fío", + "Forward message" : "Reenviar mensaxe", + "Translate" : "Traducir", + "Set custom reminder" : "Definir un lembrete personalizado", + "Keep pinned for" : "Manter fixado para", + "Set custom period" : "Definir un período personalizado", + "Close reactions menu" : "Pechar o menú de reaccións", + "React with {emoji}" : "Reaccionar con {emoji}", + "React with another emoji" : "Reaccionar con outro «emoji»", + "Choose a conversation to forward the selected message." : "Escolla unha conversa a que reenviar a mensaxe seleccionada.", + "Error while forwarding message" : "Produciuse un erro ao reenviar a mensaxe", + "The message has been forwarded to {selectedConversationName}" : "A mensaxe foi reenviada a {selectedConversationName}", + "Dismiss" : "Rexeitar", + "Go to conversation" : "Ir á conversa", + "Detect language" : "Detectar o idioma", + "The message could not be translated" : "Non foi posíbel traducir a mensaxe", + "Translation copied to clipboard" : "A tradución foi copiada no portapapeis.", + "Translation could not be copied" : "Non foi posíbel copiar a tradución", + "Translate message" : "Traducir a mensaxe", + "Source language to translate from" : "Idioma de orixe do que traducir", + "Translate from" : "Traducir desde", + "Target language to translate into" : "Idioma de destino ao que traducir", + "Translate to" : "Traducir a", + "Translating" : "Traducindo", + "Copy translated text" : "Copiar o texto traducido", + "Error when scheduling the message" : "Produciuse un erro ao programar a mensaxe", + "Reschedule" : "Reprogramar", + "Send now" : "Enviar agora", + "Choose a time" : "Escolla unha hora", + "Send at custom time" : "Enviar a unha hora personalizada", + "Will be sent without notification" : "Enviarase sen notificación", + "Message read by everyone who shares their reading status" : "Mensaxe lida por todos os que comparten o seu estado de lectura", + "Message sent" : "Mensaxe enviada", + "Sent without notification" : "Enviar sen notificación", + "Deleting message" : "Eliminando a mensaxe", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "A mensaxe foi eliminada correctamente, mais está configurado un bot ou Matterbridge e a mensaxe podería estar xa distribuída a outros servizos", + "Message deleted successfully" : "A mensaxe foi eliminada satisfactoriamente", + "Message could not be deleted because it is too old" : "Non foi posíbel eliminar a mensaxe porque é demasiado antiga", + "Only normal chat messages can be deleted" : "Só é posíbel eliminar as mensaxes normais da parola", + "An error occurred while deleting the message" : "Produciuse un erro ao eliminar a mensaxe", + "Pinned" : "Fixada", + "Your browser does not support playing audio files" : "O seu navegador non admite a reprodución de ficheiros de son", + "Contact" : "Contacto", + "{stack} in {board}" : "{stack} en {board}", + "Deck Card" : "Tarxeta de Gabeta", + "Remove {fileName}" : "Retirar {fileName}", + "Open this location in OpenStreetMap" : "Abrir esta localización en OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n resposta","%n respostas"], + "Sending message" : "Enviando a mensaxe", + "Failed to send the message. Click to try again" : "Produciuse un fallo ao enviar a mensaxe. Prema para tentalo de novo", + "Not enough free space to upload file" : "Non hai espazo libre abondo para enviar un ficheiro", + "You cannot send messages to this conversation at the moment" : "Non pode enviar mensaxes a esta conversa polo momento", + "Could not update the message" : "Non foi posíbel actualizar a mensaxe", + "Reply to thread \"{threadTitle}\"" : "Responder ao fío «{threadTitle}»", + "You voted" : "Votou", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Borrador da enquisa • %n opción","Borrador da enquisa • %n opcións"], + "_%n vote_::_%n votes_" : ["%n voto","%n votos"], + "Edit poll draft" : "Editar o borrador da enquisa", + "Delete poll draft" : "Eliminar o borrador da enquisa", + "Open poll" : "Enquisa aberta", + "See results" : "Ver os resultados", + "Reactions" : "Reaccións", + "No permission to post reactions in this conversation" : "Non ten permiso para publicar reaccións nesta conversa", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e outro participante","e outros %n participantes"], + "Show all reactions" : "Amosar todas as reaccións", + "Add more reactions" : "Engadir máis reaccións", + "Show or collapse system messages" : "Amosar ou contraer as mensaxes do sistema", + "No messages" : "Non hai mensaxes", + "All messages have expired or have been deleted." : "Todas as mensaxes caducaron ou foron eliminadas.", + "{author} (pinned by you)" : "{author} (fixada por vostede)", + "{author} (pinned by {actor})" : "{author} (fixada por {actor})", + "Unpin" : "Desprender", + "Cancel search" : "Cancelar a busca", + "Add a phone number" : "Engadir un número de teléfono", + "Error: A password is required to create the conversation." : "Erro: é necesario un contrasinal para crear a conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Todo listo, creouse a conversa «{conversationName}».", + "Create a new group conversation" : "Crear unha nova conversa en grupo", + "Add participants" : "Engadir participantes", + "Maximum length exceeded ({maxlength} characters)" : "Excedeuse a lonxitude máxima ({maxlength} caracteres)", + "Conversation visibility" : "Visibilidade da conversa", + "Allow guests to join via link" : "Permitir que os convidados se unan a través de ligazón", + "Enter password" : "Introduza o contrasinal", + "This conversation has been locked" : "Esta conversa foi bloqueada", + "No permission to post messages in this conversation" : "Non ten permiso para publicar mensaxes nesta conversa", + "Joining conversation …" : "Uníndose á conversa…", + "Write a message without notification" : "Escribir unha mensaxe sen notificación", + "Create a thread silently" : "Crear un fío de xeito silandeiro", + "Create a thread" : "Crear un fío", + "Send message silently" : "Enviar unha mensaxe silandeira", + "Send message" : "Enviar a mensaxe", + "Send without notification" : "Enviar sen notificación", + "The participant will not be notified about new messages" : "O participante non recibirá notificacións sobre novas mensaxes", + "Participants will not be notified about new messages" : "Os participantes non recibirán notificacións sobre novas mensaxes", + "Message will be sent {datetimeString}" : "A mensaxe enviarase o/ás {datetimeString}", + "Thread title is required" : "Precisase un título para o fío", + "Message text is required" : "Precisase o texto da mensaxe", + "The message could not be edited" : "Non foi posíbel editar a mensaxe", + "File to share" : "Ficheiro para compartir", + "File upload is not available in this conversation" : "O envío de ficheiros non está dispoñíbel nesta conversa", + "Message was successfully scheduled" : "A mensaxe foi programada satisfactoriamente", + "Add emoji" : "Engadir un «emoji»", + "Adding a mention will only notify users who did not read the message." : "Engadir unha mención só notificará aos usuarios que non leron a mensaxe.", + "Thread title" : "Título do fío", + "Send later" : "Enviar máis tarde", + "Show scheduled messages" : "Amosar as mensaxes programadas", + "Cancel editing" : "Cancelar a edición", + "Schedule message" : "Mensaxe programada", + "{user} is out of office and might not respond." : "{usuario} está fóra da oficina e é posíbel que non responda.", + "Absence period: {startDate} - {endDate}" : "Período de ausencia: {startDate} — {endDate}", + "Replacement:" : "Substitución:", + "Share from {nextcloud}" : "Compartir desde {nextcloud}", + "Share from Files" : "Compartir desde «Ficheiros»", + "Share files to the conversation" : "Compartir ficheiros na conversa", + "Upload from device" : "Enviar desde o dispositivo", + "Create new poll" : "Crear unha enquisa nova", + "Smart picker" : "Selector intelixente", + "Record voice message" : "Gravar mensaxe de voz", + "End recording and send" : "Finalizar a gravación e enviar", + "Dismiss recording" : "Rexeitar a gravación", + "Access to the microphone was denied" : "Foi denegado o acceso ao micrófono", + "Microphone either not available or disabled in settings" : "O micrófono non está dispoñíbel ou está desactivado nos axustes", + "Error while recording audio" : "Produciuse un erro ao gravar o son", + "Generating summary of unread messages …" : "Xerando un resumo das mensaxes sen ler…", + "Summary is AI generated and might contain mistakes" : "O resumo é xerado por IA e pode conter erros", + "Error occurred during a summary generation" : "Produciuse un erro durante a xeración dun resumo", + "New file" : "Novo ficheiro", + "Blank" : "Baleiro", + "Error while creating file" : "Produciuse un erro ao crear o ficheiro", + "Create and share a new file" : "Crear e compartir un ficheiro novo", + "Name of the new file" : "Nome do novo ficheiro", + "Create file" : "Crear ficheiro", + "Someone is typing …" : "Alguén está escribindo…", + "{user1} is typing …" : " {user1} está escribindo…", + "{user1} and {user2} are typing …" : " {user1} e {user2} están escribindo…", + "{user1}, {user2} and {user3} are typing …" : " {user1}, {user2} e {user3} están escribindo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : [" {user1}, {user2}, {user3} e %n máis están escribindo…"," {user1}, {user2}, {user3} e outros %n están escribindo…"], + "Add more files" : "Engadir máis ficheiros", + "Send" : "Enviar", + "In this conversation {user} can:" : "Nesta conversa {user} pode:", + "Edit default permissions for participants in {conversationName}" : "Editar os permisos predeterminados dos participantes en {conversationName}", + "Start a call" : "Iniciar unha chamada", + "Skip the lobby" : "Saltarse o ástrago", + "Can post messages" : "Pode publicar mensaxes", + "Can post messages and reactions" : "Pode publicar mensaxes e reaccións", + "Can add reactions" : "Pode engadir reaccións", + "Enable the microphone" : "Activar o micrófono", + "Enable the camera" : "Activar a cámara", + "Share the screen" : "Compartir a pantalla", + "Update permissions" : "Actualizar os permisos", + "Updating permissions" : "Actualizando os permisos", + "No poll drafts" : "Non hai ningún borrador de enquisa", + "There is no poll drafts yet saved for this conversation" : "Aínda non hai ningún borrador de enquisa gardado para esta conversa", + "Create poll in {name}" : "Crear enquisa en {name}", + "Create poll" : "Crear enquisa", + "Error while importing poll" : "Produciuse un erro ao importar a enquisa", + "Question" : "Pregunta", + "Ask a question" : "Facer unha pregunta", + "Import draft from file" : "Importar o borrador do ficheiro", + "Answers" : "Respostas", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Eliminar opción de enquisa", + "Add answer" : "Engadir a resposta", + "Settings" : "Axustes", + "Anonymous poll" : "Enquisa anónima", + "Multiple answers" : "Varias respostas", + "Save as draft" : "Gardar como borrador", + "Export draft to file" : "Exportar o borrador ao ficheiro", + "You voted for this option" : "Vde. votou por esta opción", + "End poll" : "Finalizar a enquisa", + "Change your vote" : "Cambiar o seu voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votados", + "Send a message to \"{roomName}\"" : "Enviar unha mensaxe a «{roomName}»", + "Hide list of participants" : "Agochar a lista de participantes", + "Show list of participants" : "Amosar a lista de participantes", + "Assistance requested in {roomName}" : "Solicitouse asistancia en {roomName}", + "The message was sent to \"{roomName}\"" : "A mensaxe foi enviada a «{roomName}»", + "Dismiss request for assistance" : "Rexeitar a solicitude de axuda", + "Send message to room" : "Enviar mensaxe á sala", + "Back to main room" : "Volver á sala principal", + "Back to your room" : "Volver á súa sala", + "Message all rooms" : "Mensaxes a todas as salas", + "Start session" : "Iniciar sesión", + "Start a call before you start a breakout room session" : "Iniciar unha chamada antes de iniciar unha sesión en sala parcial", + "Stop session" : "Deter a sesión", + "The message was sent to all breakout rooms" : "A mensaxe foi enviada a todas as salas parciais", + "Send a message to all breakout rooms" : "Enviar unha mensaxe a todas as salas parciais", + "Breakout rooms are not started" : "Non se iniciaron as salas parciais", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "As chamadas sen infraestrutura de alto rendemento poden causar problemas de conectividade e provocar unha carga moi alta nos dispositivos. {linkstart}Máis información{linkend}", + "Talk setup incomplete" : "Configuración de Parladoiro incompleta", + "Disable lobby" : "Desactivar o ástrago", + "Settings for participant \"{user}\"" : "Axustes para o participante «{user}»", + "Participant \"{user}\"" : "Participante «{user}»", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "convidado", + "Ringing …" : "Soando…", + "Call rejected" : "Chamada rexeitada", + "{time} talking …" : "{time} falando…", + "{time} talking time" : "Tempo de conversa: {time}", + "Raised their hand" : "Ergueron a man", + "Joined with video" : "Uniuse con vídeo", + "Joined via phone" : "Uniuse a través do teléfono", + "Joined with audio" : "Uniuse con son", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "O texto debe ser menor ou igual a {maxLength} caracteres. O seu texto actual ten {charactersCount} caracteres.", + "Remove group and members" : "Retirar grupo e membros", + "Remove team and members" : "Retirar equipo e membros", + "Remove participant" : "Retirar participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Confirma que quere retirar o grupo «{displayName}» e os seus membros desta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Confirma que quere retirar o equipo «{displayName}» e os seus membros desta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Confirma que quere retirar a {displayName} desta conversa?", + "Notification was sent to {displayName}" : "Enviouse a notificación a {displayName}", + "Could not send notification to {displayName}" : "Non foi posíbel enviar a notificación a {displayName}", + "Permissions granted to {displayName}" : "Concedéronse os permisos a {displayName}", + "Could not modify permissions for {displayName}" : "Non foi posíbel modificar os permisos de {displayName}", + "Permissions removed for {displayName}" : "Retiráronse os permisos de {displayName}", + "Permissions set to default for {displayName}" : "Permisos estabelecidos como predeterminados para {displayName}", + "Phone number could not be hung up" : "Non foi posíbel colgar o número de teléfono", + "Phone number could not be put on hold" : "Non foi posíbel por en espera o número de teléfono", + "Phone number could not be muted" : "Non foi posíbel silenciar o número de teléfono", + "Phone number could not be unmuted" : "Non foi posíbel desactivar o silencio ao número de teléfono", + "DTMF message could not be sent" : "Non foi posíbel enviar a mensaxe DTMF", + "Phone number copied to clipboard" : "Número de teléfono copiado no portapapeis", + "Phone number could not be copied" : "Non foi posíbel copiar o número de teléfono", + "in the lobby" : "no ástrago", + "Dial out phone" : "Marcar o número de teléfono", + "Hang up phone" : "Colgar o teléfono", + "Move back to lobby" : "Volver ao ástrago", + "Move to conversation" : "Mover á conversa", + "Dial-in PIN" : "PIN de marcación", + "Demote from moderator" : "Relegar de moderador", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Volver enviar o convite", + "Send call notification" : "Enviar notificación de chamada", + "Dial out phone number" : "Marcar o número de teléfono", + "Resume call for phone number" : "Retomar a chamada para o número de teléfono", + "Put phone number on hold" : "Poñer o número de teléfono en espera", + "Unmute phone number" : "Desactivar o silencio ao número de teléfono", + "Mute phone number" : "Silenciar o número de teléfono", + "Copy phone number" : "Copiar o número de teléfono", + "Reset custom permissions" : "Restabelecer os permisos personalizados", + "Grant all permissions" : "Conceder todos os permisos", + "Remove all permissions" : "Retirar todos os permisos", + "Also ban from this conversation" : "Expulsar tamén desta conversa", + "Internal note (reason to ban)" : "Nota interna (motivo da expulsión)", + "Remove" : "Retirar", + "Permissions modified for {displayName}" : "Modificáronse os permisos de {displayName}", + "Add users, groups or teams" : "Engadir usuarios, grupos ou equipos", + "Add users or groups" : "Engadir usuarios ou grupos", + "Add users or teams" : "Engadir usuarios ou equipos", + "Add users" : "Engadir usuarios", + "Add groups or teams" : "Engadir grupos ou equipos", + "Add groups" : "Engadir grupos", + "Add teams" : "Engadir equipos", + "Add other sources" : "Engadir outras orixes", + "Add emails" : "Engadir correos", + "Integrations" : "Integracións", + "Add federated users" : "Engadir usuarios federados", + "Searching …" : "Buscando…", + "Search for more users" : "Buscar máis usuarios", + "You can search or add participants via name, email, or Federated Cloud ID" : "Pode buscar ou engadir participantes a través do seu nome, correo-e ou ID de nube federada", + "Search or add participants" : "Buscar ou engadir participantes", + "Invitation was sent to {actorId}" : "Enviouse o convite a {actorId}", + "An error occurred while adding the participants" : "Produciuse un erro ao engdir os participantes", + "A new group conversation with selected participant will be created" : "Crearase unha nova conversa de grupo co participante seleccionado", + "Participants" : "Participantes", + "Pinned by a deleted user" : "Fixado por un usuario eliminado", + "Participants ({count})" : "Participantes ({count})", + "Open chat" : "Abrir unha parola", + "You have new unread messages in the chat." : "Ten novas mensaxes sen ler na parola", + "You have been mentioned in the chat." : "Mencionárono na parola.", + "Search messages" : "Buscar mensaxes", + "Chat" : "Parola", + "Details" : "Detalles", + "Shared items" : "Elementos compartidos", + "Search in {name}" : "Buscar en {name}", + "Threads in {name}" : "Fíos en {name}", + "{actor} in {conversation}" : "{actor} en {conversation}", + "Search messages …" : "Buscar mensaxes…", + "Search options" : "Opcións de busca", + "From User" : "Desde o usuario", + "Since" : "Desde", + "Until" : "Ata", + "No results found" : "Non se atopou ningún resultado", + "Load more results" : "Cargando máis resultados", + "Recent threads" : "Fíos recentes", + "Projects" : "Proxectos", + "No shared items" : "Non hai elementos compartidos", + "Thread notifications" : "Notificacións de fíos", + "Thread actions" : "Accións do fío", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Ligazón a unha conversa", + "No open conversations found" : "Non se atopou ningunha conversa aberta", + "Either there are no open conversations or you joined all of them." : "Ou non hai conversas abertas ou uniuse a todas.", + "Check spelling or use complete words." : "Revise a ortografía ou use palabras completas.", + "Search conversations or users" : "Buscar conversas ou usuarios", + "Select conversation" : "Seleccionar conversa", + "Number length is not valid" : "A lonxitude do número non é correcta", + "Region code is not valid" : "O código de área non é correcto", + "Number length is too short" : "O número é demasiado curto", + "Number length is too long" : "O número é demasiado longo", + "Number is not valid" : "O número non é correcto", + "Phone numbers" : "Números de teléfono", + "Display name: {name}" : "Nome para amosar: {name}", + "Edit display name" : "Editar o nome para amosar", + "Display name (required)" : "Nome para amosar (necesario)", + "Save name" : "Gardar o nome", + "I picked message bubbles" : "Escollín globos de mensaxe", + "Error while setting personal setting" : "Produciuse un erro ao gardar o axuste persoal", + "Error while saving sounds setting" : "Produciuse un erro ao gardar os axustes de son", + "Compact conversations list" : "Lista compacta de conversas", + "Chat appearance" : "Aparencia da parola", + "Messages list" : "Lista de mensaxes", + "Message bubbles" : "Globos de mensaxe", + "Play sounds when participants join or leave a call" : "Reproducir sons cando os participantes se unan ou abandonen unha chamada", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Actualmente non está dispoñíbel para iPhone e iPad por mor das restricións técnicas do fabricante", + "Notification settings" : "Axustes de notificación", + "Sounds for chat and call notifications" : "Sons para notificacións de parola e chamadas", + "Invalid language ({languageId})" : "Idioma non válido {languageId}", + "Default language" : "Idioma predeterminado", + "Default language ({languageName})" : "Idioma predeterminado ({languageName})", + "Error when trying to load the available live translation languages" : "Produciuse un erro ao tentar cargar os idiomas de tradución en directo dispoñíbeis", + "Error when trying to set live translation language" : "Produciuse un erro ao tentar definir o idioma de tradución en directo", + "Set language used to show the transcriptions" : "Definir o idioma empregado para amosar as transcricións", + "Select location for attachments" : "Seleccionar a localización dos ficheiros anexos", + "Error while setting attachment folder" : "Produciuse un erro ao axustar o cartafol de anexos", + "Error while setting read status privacy" : "Produciuse un erro ao axustar a privacidade do estado de lectura", + "Error while setting typing status privacy" : "Produciuse un erro ao axustar a privacidade do estado de escritura", + "Error while setting default media state" : "Produciuse un erro ao axustar o estado multimedia predeterminado", + "Turn camera and microphone off by default" : "Desactivar a cámara e o micrófono de xeito predeterminado", + "Blur camera background by default" : "Desenfocar o fondo da cámara de xeito predeterminado", + "Skip device preview before joining a call" : "Omitir a vista previa do dispositivo antes de unirse a unha chamada", + "Appearance & Sounds" : "Aparencia e sons", + "Privacy" : "Privacidade", + "Send read receipts" : "Enviar acuses de recibimento", + "When off, all read statuses will be hidden" : "Cando estea desactivado, agocharanse todos os estados de lectura", + "Share typing status" : "Compartir o estado de escritura", + "When off, all typing indicators will be hidden" : "Cando estea desactivado, agocharanse todos os indicadores de escritura", + "Attachments folder" : "Cartafol de anexos", + "Toggle full screen" : "Alternar a pantalla completa", + "Return to Home screen" : "Volver á pantalla de inicio", + "Search" : "Buscar", + "Shortcuts while in a chat" : "Atallos nunha parola", + "Focus the chat input" : "Poñer en foco a entrada da parola", + "Unfocus the chat input to use shortcuts" : "Retirar do foco a entrada da parola para usar atallos", + "Edit your last message" : "Editar a súa última mensaxe", + "Shortcuts while in a call" : "Atallos nunha chamada", + "Camera on and off" : "Acendido e apagado da cámara", + "Microphone on and off" : "Acendido e apagado do micrófono", + "Raise or lower hand" : "Erguer ou baixar a man", + "Push to talk or push to mute" : "Premer para falar ou premer para silenciar", + "Zoom-in / zoom-out a screen share" : "Achegar/afastar a pantalla compartida", + "Mouse wheel" : "Roda do rato", + "Start call silently" : "Comezar a chamada silandeiramente", + "Start call" : "Iniciar chamada", + "End call" : "Finalizar a chamada", + "This call has just ended" : "Esta chamada ven de rematar", + "You will be able to join the call only after a moderator starts it." : "Só poderá unirse á chamada após que a inicie un moderador.", + "End call for everyone" : "Finalizar a chamada para todos", + "Starting the recording" : "Iniciando a gravación", + "Recording" : "Gravando", + "The call has been running for one hour." : "A chamada leva unha hora en proceso.", + "Cancel recording start" : "Cancelar o inicio da gravación", + "Stop recording" : "Deter a gravación", + "Send a reaction" : "Envíar unha reacción", + "React with {reaction}" : "Reaccionar con {reacción}", + "All tasks done!" : "Feitas todas as tarefas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarefa","{done} de %n tarefas"], + "Add participants to this call" : "Engadir participantes a esta chamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante na chamada","%n participantes na chamada"], + "Scheduled messages" : "Mensaxes programadas", + "You are not allowed to enable screensharing" : "Non ten permiso para activar o uso compartido de pantalla", + "No screensharing" : "Non hai uso compartido de pantalla", + "Screensharing options" : "Opcións para compartir pantalla", + "Enable screensharing" : "Activar a compartición da pantalla", + "Bad sent video and screen quality." : "Mala calidade de vídeo e pantalla enviados.", + "Bad sent screen quality." : "Mala calidade de pantalla enviada.", + "Bad sent video quality." : "Mala calidade do vídeo enviado.", + "Bad sent audio, video and screen quality." : "Mala calidade do son, vídeo e pantalla enviados.", + "Bad sent audio and screen quality." : "Mala calidade do son e da pantalla enviados.", + "Bad sent audio and video quality." : "Mala calidade do son e vídeo enviados.", + "Bad sent audio quality." : "Mala calidade do son enviado.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ou súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non poidan ver a súa pantalla. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo mentres comparte a pantalla.", + "Disable background blur" : "Desactivar o esvaemento do fondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ou a súa conexión a Internet ou o computador están ocupados e pode que outros participantes non sexan quen de ver a súa pantalla. Para mellorar a situación, tente desactivar o seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non poidan ver a súa pantalla. ", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non poidan velo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ou súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non sexan quen de entendelo nin velo. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e velo. Para mellorar a situación, tente desactivar o seu vídeo mentres comparte a pantalla.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e ver a súa pantalla. Para mellorar a situación, tente desactivar a súa pantalla compartida.", + "Disable screenshare" : "Desactivar a pantalla compartida", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ou a súa conexión a Internet ou o seu computador están ocupados e é posíbel que outros participantes non sexan quen de entendelo nin velo. Para mellorar a situación, tente desactivar o esvaemento do fondo ou do seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo e velo. Para mellorar a situación, tente desactivar o seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ou a súa conexión a internet ou o computador están ocupados e pode que outros participantes non sexan quen de entendelo.", + "Screen sharing is not supported by your browser." : "O navegador non admite a compartición de pantalla.", + "Screen sharing requires the page to be loaded through HTTPS." : "A compartición de pantalla precisa que a páxina sexa cargada a través de HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing precisa que a páxina sexa cargada a través de HTTPS.", + "An error occurred while starting screensharing." : "Produciuse un erro ao iniciar a compartición da pantalla.", + "Select virtual background" : "Seleccione o fondo virtual", + "Show your screen" : "Amosar a súa pantalla", + "Stop screensharing" : "Deixar de compartir a pantalla", + "Mute others" : "Silenciar aos outros", + "Start recording" : "Comezar a gravar", + "Set up breakout rooms" : "Preparar as salas parciais", + "Download attendance list" : "Descargar lista de asistencia", + "Open Calendar" : "Abre o calendario", + "Remove participant {name}" : "Retirar o participante {name}", + "Would you like to delete this conversation?" : "Quere eliminar esta conversa?", + "Are you sure you want to delete this conversation?" : "Confirma que quere eliminar esta conversa?", + "Delete now" : "Eliminar agora", + "Keep" : "Conservar", + "Open dialpad" : "Abrir o dial de marcación", + "Select a region" : "Seleccione unha rexión", + "Local time: {time}" : "Hora local: {time}", + "Scheduled {datetime}" : "Programada o/ás {datetime}", + "Scheduled for {datetime}" : "Programada para {datetime}", + "Search …" : "Buscar…", + "Message without mention" : "Mensaxe sen mención", + "Mention myself" : "Mencioname", + "Mention everyone" : "Mencionar a todos", + "Select a conversation" : "Seleccionar unha conversa", + "Select a mode" : "Seleccionar un modo", + "You do not have permissions to access this conversation." : "Vde. non ten permiso para acceder a esta conversa.", + "Join a different conversation or start a new one." : "Únase a outra conversa ou inicie unha nova.", + "The conversation does not exist" : "Non existe a conversa", + "Join a conversation or start a new one!" : "Únase a unha conversa ou inicie unha nova!", + "Duplicate session" : "Sesión duplicada", + "Creating and joining a conversation with \"{userid}\"" : "Crear e unirse a unha conversa con «{userid}»", + "Join a conversation or start a new one" : "Únase a unha conversa ou inicie unha nova", + "Error while joining the conversation" : "Produciuse un erro ao unirse á conversa", + "Another user" : "Outro usuario", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Usuario de Nextcloud", + "User password" : "Contrasinal do usuario", + "Talk conversation" : "Conversa no Parladoiro", + "Skip TLS verification" : "Omitir a verificación TLS", + "Matrix server URL" : "URL do servidor Matrix", + "User" : "Usuario", + "Matrix channel" : "Canle do Matrix", + "Mattermost server URL" : "URL do servidor Mattermost", + "Mattermost user" : "Usuario de Mattermost", + "Team name" : "Nome do equipo", + "Channel name" : "Nome da canle", + "Rocket.Chat server URL" : "URL do servidor Rocket.Chat", + "User name or email address" : "Nome de usuario ou enderezo de correo-e", + "Rocket.Chat channel" : "Canle do Rocket.Chat", + "Zulip server URL" : "URL do servidor Zulip", + "Bot user name" : "Nome de usuario do bot", + "Bot API key" : "Chave da API do bot", + "Zulip channel" : "Canle do Zulip", + "API token" : "Testemuño da API", + "Slack channel" : "Canle do Slack", + "Server ID or name" : "ID ou nome do servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID da canle (co prefixo «ID:») ou nome", + "Channel" : "Canle", + "Login" : "Acceder", + "Chat ID" : "ID da parola", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL do servidor IRC (p. ex., chat.freenode.net:6667)", + "Nickname" : "Alcume", + "Connection password" : "Contrasinal de conexión", + "IRC channel" : "Canle do IRC", + "Channel password" : "Contrasinal da canle", + "NickServ nickname" : "Alcume NickServ", + "NickServ password" : "Contrasinal de NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID do cesionario", + "Client ID" : "ID de cliente", + "Team ID" : "ID do equipo", + "Thread ID" : "ID do fío", + "XMPP/Jabber server URL" : "URL do servidor XMPP/Jabber", + "MUC server URL" : "URL do servidor MUC", + "Jabber ID" : "ID do Jabber", + "Pinned messages" : "Mensaxes fixadas", + "Media" : "Multimedia", + "Polls" : "Enquisas", + "Deck cards" : "Tarxetas de Gabeta", + "Voice messages" : "Mensaxes de voz", + "Locations" : "Localizacións", + "Call recordings" : "Gravacións de chamadas", + "Audio" : "Son", + "Show all pinned messages" : "Amosar todas as mensaxes fixadas", + "Show all media" : "Amosar todos os medios", + "Show all files" : "Amosar todos os ficheiros", + "Show all polls" : "Amosar todas as enquisas", + "Show all deck cards" : "Amosar todas as tarxetas da Gabeta", + "Show all voice messages" : "Amosar todas as mensaxes de voz", + "Show all locations" : "Amosar todas as localizacións", + "Show all call recordings" : "Amosar todas as gravacións de chamadas", + "Show all audio" : "Amosar todo o son", + "Show all other" : "Amosar todos os demais", + "Follow conversation settings" : "Seguir os axustes da conversa", + "Group" : "Grupo", + "Team" : "Equipo", + "You reconnected to the call" : "Vde. volveu conectarse á chamada", + "{actor} reconnected to the call" : "{actor} volveu conectarse á chamada", + "You added {user0} and {user1}" : "Vde. engadiu a {user0} e a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Vde. engadiu a {user0}, a {user1} e a %n participante máis","Vde. engadiu a {user0}, a {user1} e a %n participantes máis"], + "An administrator added you and {user0}" : "Alguén da administración do sitio engadiuno a Vde. e a {user0}", + "{actor} added you and {user0}" : "{actor} engadiuno a Vde. e a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Alguén da administración do sitio engadiuno a Vde., a {user0} e a %n participante máis","Alguén da administración do sitio engadiuno a Vde., a {user0} e a %n participantes máis"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} engadiuno a Vde., a {user0} e a %n participante máis","{actor} engadiuno a Vde., a {user0} e a %n participantes máis"], + "An administrator added {user0} and {user1}" : "Alguén da administración do sitio engadiu a {user0} e a {user1}", + "{actor} added {user0} and {user1}" : "{actor} engadiu a {user0} e a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Alguén da administración do sitio engadiu a {user0}, a {user1} e a %n participante máis","Alguén da administración do sitio engadiu a {user0}, a {user1} e a %n participantes máis"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} engadiu a {user0}, a {user1} e a %n participante máis","{actor} engadiu a {user0}, a {user1} e a %n participantes máis"], + "You removed {user0} and {user1}" : "Vde. retirou a {user0} e a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Vde. retirou a {user0}, a {user1} e a %n participante máis","Vde. retirou a {user0}, a {user1} e a %n participantes máis"], + "An administrator removed you and {user0}" : "Alguén da administración retirouno a Vde. e a {user0}", + "{actor} removed you and {user0}" : "{actor} retirouno a Vde. e a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Alguén da administración do sitio retirouno a Vde., a {user0} e a %n participante máis","Alguén da administración do sitio retirouno a Vde., a {user0} e a %n participantes máis"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} retirouno a Vde., a {user0} e a %n participante máis","{actor} retirouno a Vde., a {user0} e a %n participantes máis"], + "An administrator removed {user0} and {user1}" : "Alguén da administración retirou a {user0} e a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} retirou a {user0} e a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Alguén da administración do sitio retirou a {user0}, a {user1} e a %n participante máis","Alguén da administración do sitio retirou a {user0}, a {user1} e a %n participantes máis"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} retirou a {user0}, a {user1} e a %n participante máis","{actor} retirou a {user0}, a {user1} e a %n participantes máis"], + "You and {user0} joined the call" : "Vde. e {user0} uníronse á chamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vde., {user0} e %n participante máis uníronse á chamada","Vde., {user0} e %n participantes máis uníronse á chamada"], + "{user0} and {user1} joined the call" : "{user0} e {user1} uníronse á chamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e %n participante máis uníronse á chamada","{user0}, {user1} e %n máis participantes uníronse á chamada"], + "You and {user0} left the call" : "Vde. e {user0} deixaron á chamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vde., {user0} e %n participante máis deixaron á chamada","Vde., {user0} e %n participantes máis deixaron á chamada"], + "{user0} and {user1} left the call" : "{user0} e {user1} deixaron á chamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e %n participante máis deixaron á chamada","{user0}, {user1} e %n máis participantes deixaron á chamada"], + "You promoted {user0} and {user1} to moderators" : "Vde. promoveu a {user0} e a {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Vde. promoveu a {user0}, a {user1} e a %n participante máis a moderadores","Vde. promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Alguén da administración do sitio promoveuno a Vde. e a {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveuno a Vde. e a {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Alguén da administración do sitio promoveu a Vde., a {user0} e a %n participante máis a moderadores","Alguén da administración do sitio promoveu a Vde., a {user0} e a %n participantes máis a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoveu a Vde., a {user0} e a %n participante máis a moderadores","{actor} promoveu a Vde., a {user0} e a %n participantes máis a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Alguén da administración do sitio promoveuno a {user0} e a {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoveu a {user0} e a {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Alguén da administración do sitio promoveu a {user0}, a {user1} e a %n participante máis a moderadores","Alguén da administración do sitio promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoveu a {user0}, a {user1} e a %n participante máis a moderadores","{actor} promoveu a {user0}, a {user1} e a %n participantes máis a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Vde. relegou a {user0} e {user1} dos moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Vde. relegou a {user0}, a {user1} e a %n participante máis dos moderadores","Vde. relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "An administrator demoted you and {user0} from moderators" : "Alguén da administración do sitio relegouno a Vde. e a {user0} dos moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} relegouno a Vde. e a {user0} dos moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Alguén da administración do sitio relegouno a Vde., a {user0} e a %n participante máis dos moderadores","Alguén da administración do sitio relegouno a Vde., a {user0} e a %n participantes máis dos moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} relegouno a Vde., a {user0} e a %n participante máis dos moderadores","{actor} relegouno a Vde., a {user0} e a %n participantes máis dos moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Alguén da administración do sitio relegou a {user0} e a {user1} de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} relegou a {user0} e {user1} dos moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Alguén da administración do sitio relegou a {user0}, a {user1} e a %n participante máis dos moderadores","Alguén da administración do sitio relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} relegou a {user0}, a {user1} e a %n participante máis dos moderadores","{actor} relegou a {user0}, a {user1} e a %n participantes máis dos moderadores"], + "You:" : "Vde.:", + "You: {lastMessage}" : "Vde.: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(editado por Vde.)", + "(edited by a deleted user)" : "(editado por un usuario eliminado)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Está a tentar unirse a unha conversa mentres ten unha sesión activa noutra xanela ou dispositivo. Isto non é compatíbel actualmente con Parladoiro de Nextcloud. Que quere facer?", + "Leave this page" : "Abandonar esta páxina", + "Join here" : "Únase aquí", + "Deck card has been posted to {conversation}" : "A tarxeta de Gabeta foi publicada en {conversation}", + "An error occurred while posting deck card to conversation" : "Produciuse un erro ao publicar a tarxeta na conversa", + "Post to a conversation" : "Publicar nunha conversa", + "Post to conversation" : "Publicar na conversa", + "The recording failed. Please contact your administrator." : "Produciuse un fallo de gravación. Póñase en contacto coa administración desta instancia.", + "Location has been posted to {conversation}" : "A localización publicouse en {conversation}", + "An error occurred while posting location to conversation" : "Produciuse un erro ao publicar a localización na conversa.", + "Share to a conversation" : "Compartir nunha conversa", + "Share to conversation" : "Compartir na conversa", + "In conversation" : "Na conversa", + "Search in conversation: {conversation}" : "Buscar na conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "As súas solicitudes están limitadas polo momento por mor da protección da forza bruta", + "Error while clearing conversation history" : "Produciuse un erro ao limpar o historial da conversa", + "Error occurred while allowing guests" : "Produciuse un erro ao permitir convidados", + "Error occurred while disallowing guests" : "Produciuse un erro ao deixar de permitir convidados", + "Error occurred when restricting the conversation to moderator" : "Produciuse un erro ao restrinxir a conversa ao moderador", + "Error occurred when opening the conversation to everyone" : "Produciuse un erro ao abrir a conversa a todos", + "Conversation password has been saved" : "Gardouse o contrasinal da conversa", + "Conversation password has been removed" : "Retirouse o contrasinal de conversa", + "Error occurred while saving conversation password" : "Produciuse un erro ao gardar o contrasinal da conversa", + "Call recording is starting." : "A gravación de chamadas está comezando.", + "Call recording stopped while starting." : "A gravación de chamadas detívose ao iniciarse.", + "Call recording stopped. You will be notified once the recording is available." : "Detívose a gravación da chamada. Recibirá unha notificación cando a gravación estea dispoñíbel.", + "Conversation picture set" : "Definiuse a imaxe da conversa", + "Conversation picture deleted" : "Eliminouse a imaxe da conversa", + "Could not delete the conversation picture" : "Non foi posíbel eliminar a imaxe da conversa", + "Could not remove the automatic expiration" : "Non foi posíbel retirarlle a caducidade automática", + "Could not post message: {errorMessage}" : "Non foi posíbel publicar a mensaxe: {errorMessage}", + "Participant is banned successfully" : "O participante foi expulsado correctamente", + "Error while banning the participant" : "Produciuse un erro ao expulsar o participante", + "An error occurred while fetching the participants" : "Produciuse un erro ao recuperar os participantes", + "Could not send invitation to {actorId}" : "Non foi posíbel enviar o convite a {actorId}", + "Invitations sent" : "Convites enviados", + "Error occurred when sending invitations" : "Produciuse un erro ao enviar os convites", + "Failed to join the conversation." : "Produciuse un fallo ao unirse á conversa.", + "An error occurred while creating breakout rooms" : "Produciuse un erro ao crear as salas parciais", + "An error occurred while re-ordering the attendees" : "Produciuse un erro ao reordenar os asistentes", + "An error occurred while deleting breakout rooms" : "Produciuse un erro ao eliminar as salas parciais", + "An error occurred while starting breakout rooms" : "Produciuse un erro ao iniciar as salas parciais", + "An error occurred while stopping breakout rooms" : "Produciuse un erro ao deter as salas parciais", + "An error occurred while sending a message to the breakout rooms" : "Produciuse un erro ao enviar unha mensaxe ás salas parciais", + "An error occurred while requesting assistance" : "Produciuse un erro ao solicitar asistencia", + "An error occurred while resetting the request for assistance" : "Produciuse un erro ao restabelecer a solicitude de asistencia", + "An error occurred while joining breakout room" : "Produciuse un erro ao entrar na sala parcial", + "Failed to rename the thread" : "Produciuse un fallo ao cambiarlle o nome ao fío", + "Error fetching upcoming events" : "Produciuse un erro ao recuperar os próximos eventos", + "Error fetching upcoming reminders" : "Produciuse un erro ao recuperar os próximos lembretes", + "An error occurred while accepting an invitation" : "Produciuse un erro ao aceptar un convite", + "An error occurred while rejecting an invitation" : "Produciuse un erro ao rexeitar un convite", + "{guest} (guest)" : "{guest} (convidado)", + "Poll draft has been saved" : "Gardouse o borrador da enquisa", + "An error occurred while saving the draft" : "Produciuse un erro ao gardar o borrador", + "An error occurred while submitting your vote" : "Produciuse un erro ao enviar o seu voto", + "An error occurred while ending the poll" : "Produciuse un erro ao finalizar a enquisa", + "An error occurred while deleting the poll draft" : "Produciuse un erro ao eliminar o borrador da enquisa", + "Poll \"{name}\" was created by {user}. Click to vote" : "A enquisa «{name}» foi creada por {user}. Prema para votar", + "Failed to add reaction" : "Produciuse un fallo ao engadir a reacción", + "Failed to remove reaction" : "Produciuse un fallo ao retirar a reacción", + "Error while uploading file \"{fileName}\"" : "Produciuse un erro ao enviar o ficheiro «{fileName}».", + "Not enough free space to upload file \"{fileName}\"" : "Non hai espazo libre abondo para enviar o ficheiro «{fileName}»", + "You are not allowed to share files" : "Vde. non ten permiso para compartir ficheiros", + "Error while sharing file" : "Produciuse un erro ao compartir o ficheiro", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Parladoiro de Nextcloud non é totalmente compatíbel co navegador que está a usar. Utilice a versión máis recente de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["En %n hora","En %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos"], + "In {hours} and {minutes}" : "En {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["En %n minuto","En %n minutos"], + "Later today – {timeLocale}" : "Hoxe máis tarde – {timeLocale}", + "Set time for later today" : "Definir a hora para hoxe máis tarde", + "Tomorrow – {timeLocale}" : "Mañá – {timeLocale}", + "Set time for tomorrow" : "Definir a hora para mañá", + "This weekend – {timeLocale}" : "Esta semana – {timeLocale}", + "Set time for this weekend" : "Definir a hora para este fin de semana", + "Next week – {timeLocale}" : "Semana seguinte – {timeLocale}", + "Set time for next week" : "Definir a hora para a semana seguinte", + "Message link copied to clipboard" : "A ligazón da mensaxe foi copiada no portapapeis", + "Conversation link copied to clipboard" : "A ligazón da conversa foi copiada no portapapeis", + "The link could not be copied" : "Non foi posíbel copiar a ligazón.", + "Error while parsing a PROPFIND error" : "Produciuse un erro ao analizar un erro PROPFIND", + "Sending signaling message has failed" : "Produciuse un fallo no envío da mensaxe de sinalización", + "Lost connection to signaling server. Trying to reconnect." : "Perdeuse a conexión co servidor de sinalización. Tentando volver conectar.", + "Lost connection to signaling server." : "Perdeuse a conexión co servidor de sinalización.", + "Connecting is taking longer than expected …" : "A conexión está a levar máis tempo do agardado…", + "Failed to connect. Retrying …" : "Produciuse un fallo ao conectar. Tentándoo de novo…", + "Failed to connect. The signaling server may be set up incorrectly" : "Produciuse un fallo ao conectar O servidor de sinalización pode estar configurado incorrectamente", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "O servidor de sinalización configurado debe ser actualizado para ser compatíbel con esta versión de Parladoiro. Póñase en contacto coa súa administración.", + "Please restart the app." : "Reinicie a aplicación", + "Please reload the page." : "Volva cargar a páxina.", + "Please try to restart the app." : "Tente reiniciar a aplicación.", + "Please try to reload the page." : "Tente volver cargar a páxina.", + "Do not disturb" : "Non molestar", + "Away" : "Ausente", + "Microphone {number}" : "Micrófono {number}", + "Camera {number}" : "Cámara {number}", + "Speaker {number}" : "Relator {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Semella que está a falar mentres esta silenciado, desactive o silencio para que os demais o escoiten", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Non foi posíbel definir unha conexión con polo menos un participante. Pode ser necesario un servidor TURN para o seu escenario. Pídalle á administración do seu Nextcloud que configure un segundo {linkstart}esta documentación{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Isto está levando máis tempo do esperado. Os permisos dos multimedia xa están concedidos (ou rexeitados)? En caso afirmativo, reinicie o navegador, xa que o son e o vídeo están fallando", + "Access to microphone & camera is only possible with HTTPS" : "O acceso ao micrófono e a cámara só é posíbel con HTTPS", + "Please move your setup to HTTPS" : "Cambie a súa configuración a HTTPS", + "Access to microphone & camera was denied" : "Foi denegado o acceso ao micrófono e a cámara", + "WebRTC is not supported in your browser" : "O seu navegador non admite WebRTC", + "Please use a different browser like Firefox or Chrome" : "Use un navegador diferente como Firefox ou Chrome", + "Error while accessing microphone & camera" : "Produciuse un erro ao acceder ao micrófono e á cámara", + "%s Talk on your mobile devices" : "Parladoiro de %s nos seus dispositivos móbiles", + "Join conversations at any time, anywhere, on any device." : "Únase a conversas en calquera momento, en calquera lugar, con calquera dispositivo.", + "Android app" : "Aplicación de Android", + "iOS app" : "Aplicación de iOS", + "__language_name__" : "Galego", + "Webhook Demo" : "Demostración do punto de ancoraxe web", + "Call summary (%s)" : "Resumo da chamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "O bot de resumo de chamadas publica unha mensaxe de resumo após a chamada coa lista de todos os participantes e describindo as tarefas", + "Tasks" : "Tarefas", + "Notes" : "Notas", + "Reports" : "Informes", + "Decisions" : "Decisións", + "Agenda" : "Axenda", + "Call summary" : "Resumo da chamada", + "Call summary - {title}" : "Resumo da chamada — {title}", + "Talk conversation for event" : "Conversa en Parladoiro para o evento", + "Client Push is installed, this improves the performance of desktop clients." : "A notificación automática ao cliente está instalada, isto mellora o rendemento dos clientes de escritorio.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} non está instalada, isto pode levar a problemas de rendemento ao usar clientes de escritorio.", + "Next meeting" : "Seguinte xuntanza", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Programe unha xuntanza desde o seu calendario. Debe definir unha conversa de Parladoiro como ubicación para que sexa amosada aquí", + "Join conversations from remote Nextcloud servers" : "Únase a conversas desde servidores remotos de Nextcloud", + "Your default media state has been saved" : "Gardouse o seu estado multimedia predeterminado", + "Set reminder for later today" : "Definir un lembrete para hoxe máis tarde", + "Set reminder for tomorrow" : "Definir un lembrete para mañá", + "Set reminder for this weekend" : "Definir un lembrete para este fin de semana", + "Set reminder for next week" : "Definir un lembrete para a seguinte semana", + "Generate summary" : "Xerar un resumo", + "Open poll • You voted already" : "Enquisa aberta • Vde. xa votou", + "Open poll • Click to vote" : "Enquisa aberta • Prema para votar", + "Poll • Ended" : "Enquisa • Finalizada", + "Talk recording from {time} ({conversation})" : "Gravación da conversa desde {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultados da enquisa • %n voto","Resultados da enquisa • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquisa aberta • %n voto","Enquisa aberta • %n votos"], + "Submit vote" : "Enviar o voto", + "Your privacy setting has been saved" : "Gardouse o seu axuste de privacidade", + "Your personal setting has been saved" : "Gardouse o seu axuste persoal", + "Failed to save sounds setting" : "Produciuse un fallo ao gardar os axustes de son", + "Sounds setting saved" : "Gardáronse os axustes de son", + "Always shown if recording consent is required" : "Amosar sempre se é necesario o consentimento da gravación", + "Nextcloud Talk was updated, you cannot start or join a call." : "Parladoiro de Nextcloud foi actualizada, non pode comezar nin unirse a unha chamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Uniuse á conversa noutra xanela ou dispositivo. Isto non é compatíbel actualmente con Parladoiro de Nextcloud polo que esta sesión pechouse.", + "Nextcloud Talk was updated." : "Parladoiro de Nextcloud foi actualizada", + "Nextcloud is in maintenance mode." : "Nextcloud está en modo de mantemento.", + "Nextcloud Talk Federation was updated." : "Foi actualizada a federación de Parladoiro de Nextcloud", + "Enable live translation" : "Activar a tradución en directo", + "I picked list style" : "Escollín o estilo de lista", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ei! Estás a usar Parladoiro en formato de lista ou con globos de mensaxe?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/he.js b/l10n/he.js new file mode 100644 index 0000000..bc6c606 --- /dev/null +++ b/l10n/he.js @@ -0,0 +1,622 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "דיון", + "(Duration %s)" : "(משך %s)", + "You attended a call with {user1}" : "הצטרפת לשיחה עם {user1}", + "_%n guest_::_%n guests_" : ["אורח/ת 1","%n אורחים","%n אורחים","%n אורחים"], + "You attended a call with {user1} and {user2}" : "השתתפת בשיחה עם {user1} ועם {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "השתתפת בשיחה עם {user1}, {user2} ועם {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "השתתפת בשיחה עם {user1}, {user2}, {user3} ועם {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "השתתפת בשיחה עם {user1}, {user2}, {user3}, {user4} ועם {user5}", + "_%n other_::_%n others_" : ["מישהו נוסף","%n נוספים","%n נוספים"], + "{actor} invited you to {call}" : "הוזמנת אל {call} על ידי {actor}", + "You were invited to a conversation or had a call" : "הוזמנת לדיון או שקיבלת שיחה", + "Other activities" : "פעילויות אחרות", + "Talk" : "שיחה", + "Guest" : "אורח/ת", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- ניתן מעתה להשתמש ב־Microsoft Edge וב־Safari כדי להשתת, בשיחות שמע ווידאו", + "{actor} created the conversation" : "הדיון נוצר על ידי {actor}", + "You created the conversation" : "יצרת את הדיון", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "השם של הדיון השתנה מ־„%1$s” ל־„%2$s” על ידי {actor}", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "שינית את שם הדיון מהשם „%1$s” לשם „%2$s”", + "You started a call" : "התחלת שיחה", + "{actor} started a call" : "שיחה החלה על ידי {actor}", + "{actor} joined the call" : "{actor} מעכשיו בשיחה", + "You joined the call" : "הצטרפת לשיחה", + "{actor} left the call" : "{actor} לא בשיחה עוד", + "You left the call" : "עזבת את השיחה", + "{actor} unlocked the conversation" : "הדיון שוחרר על ידי {actor}", + "You unlocked the conversation" : "שחררת את הדיון", + "{actor} locked the conversation" : "הדיון ננעל על ידי {actor}", + "You locked the conversation" : "נעלת את הדיון", + "The conversation is now open to everyone" : "הדיון מעתה פתוח לכול", + "{actor} opened the conversation to everyone" : "הדיון נפתח לכול על ידי {actor}", + "You opened the conversation to everyone" : "פתחת את הדיון לכול", + "{actor} restricted the conversation to moderators" : "הדיון הוגבל למפקחים על ידי {actor}", + "You restricted the conversation to moderators" : "הגבלת את הדיון למפקחים", + "{actor} allowed guests" : "אורחים הורשו על ידי {actor}", + "You allowed guests" : "הרשית אורחים", + "An administrator allowed guests" : "ההנהלה איפשרה אורחים", + "{actor} disallowed guests" : "אורחים נאסרו על ידי {actor}", + "You disallowed guests" : "אסרת אורחים", + "An administrator disallowed guests" : "ההנהלה אסרה על אורחים", + "{actor} set a password" : "הוגדרה ססמה על ידי {actor}", + "You set a password" : "הגדרת ססמה", + "An administrator set a password" : "ההנהלה הגדירה ססמה", + "{actor} removed the password" : "הססמה הוסרה על ידי {actor}", + "You removed the password" : "הסרת את הססמה", + "An administrator removed the password" : "הססמה הוסרה על ידי ההנהלה", + "{actor} added {user}" : "ההוספה של {user} בוצעה על ידי {actor}", + "You joined the conversation" : "הצטרפת לדיון", + "{actor} joined the conversation" : "הצטרפות של {actor} לדיון", + "You added {user}" : "הוספת את {user}", + "{actor} added you" : "נוספת על ידי {actor}", + "An administrator added you" : "נוספת על ידי ההנהלה", + "An administrator added {user}" : "ההנהלה הוסיפה את {user}", + "You left the conversation" : "עזבת את הדיון", + "You removed group {group}" : "הסרת את הקבוצה {group}", + "An administrator removed group {group}" : "ההנהלה הסירה את הקבוצה {group}", + "You shared a file which is no longer available" : "שיתפת קובץ שאינו זמין עוד", + "You updated the Matterbridge configuration" : "עדכנת את הגדרות ה־Matterbridge", + "You stopped Matterbridge" : "עצרת את Matterbridge", + "{actor} deleted a message" : "הודעה נמחקה על ידי {actor}", + "You deleted a message" : "מחקת הודעה", + "Message deleted by author" : "ההודעה נמחקה על ידי מי שפרסם אותה", + "Deleted user" : "משתמש מחוק", + "Administration" : "ניהול", + "System" : "מערכת", + "Talk conversations" : "דיוני שיח", + "File not found" : "קובץ לא נמצא", + "File is too big" : "הקובץ גדול מדי", + "Invalid file provided" : "הקובץ שסופק שגוי", + "Invalid image" : "תמונה לא חוקית", + "Unknown filetype" : "סוג קובץ לא מוכר", + "Say hi to your friends and colleagues!" : "על הדרך לראות מה עם חבריך לעבודה!", + "No unread mentions" : "אין אזכורים שלא נקראו", + "Call in progress" : "מתנהלת שיחה", + "Conversation invitation" : "הזמנה לדיון", + "Description" : "תיאור", + "Meeting ID" : "מזהה פגישה", + "Meeting" : "מפגש", + "Password request: %s" : "בקשת ססמה: %s", + "Private conversation" : "דיון פרטי", + "Deleted user (%s)" : "משתמש שנמחק (%s)", + "Dismiss notification" : "התעלמות מהתראה", + "Accept" : "אשר", + "Decline" : "דחייה", + "New message" : "הודעה חדשה", + "Notification" : "הוֹדָעָה", + "{user} sent you a private message" : "התקבלה הודעה פרטית מאת {user}", + "{user} invited you to a group conversation: {call}" : "הוזמנת על ידי {user} לדיון קבוצתי: {call}", + "Join call" : "הצטרפות לשיחה", + "Answer call" : "לענות לשיחה", + "Call back" : "להתקשר בחזרה", + "You missed a call from {user}" : "החמצת שיחה עם {user}", + "A group call has started in {call}" : "החלה שיחה קבוצתית תחת {call}", + "Open settings" : "פתיחת הגדרות", + "error" : "שגיאה", + "Default" : "בררת מחדל", + "Presentation" : "מצגת", + "Conversations" : "דיונים", + "{user}" : "{user}", + "Messages" : "הודעות", + "Messages in other conversations" : "הודעות בדיונים אחרים", + "Avatar image is not square" : "התמונה המייצגת אינה מרובעת", + "Other" : "אחר", + "The email address is invalid." : "כתובת הדוא״ל שגויה.", + "Andorra" : "אנדורה", + "United Arab Emirates" : "איחוד האמירויות הערביות", + "Afghanistan" : "אפגניסטן", + "Antigua and Barbuda" : "אנטיגואה וברבודה", + "Anguilla" : "אנגווילה", + "Albania" : "אלבניה", + "Armenia" : "ארמניה", + "Angola" : "אנגולה", + "Antarctica" : "אנטארקטיקה", + "Argentina" : "ארגנטינה", + "American Samoa" : "סמואה האמריקנית", + "Austria" : "אוסטריה", + "Australia" : "אוסטרליה", + "Aruba" : "ארובה", + "Åland Islands" : "איי אולנד", + "Azerbaijan" : "אזרבייג׳ן", + "Bosnia and Herzegovina" : "בוסניה והרצגובינה", + "Barbados" : "ברבדוס", + "Bangladesh" : "בנגלדש", + "Belgium" : "בלגיה", + "Burkina Faso" : "בורקינה פאסו", + "Bulgaria" : "בולגריה", + "Bahrain" : "בחריין", + "Burundi" : "בורונדי", + "Benin" : "בנין", + "Saint Barthélemy" : "סן ברתלמי", + "Bermuda" : "ברמודה", + "Brunei Darussalam" : "ברוניי משכן השלום", + "Bonaire, Sint Eustatius and Saba" : "בונייר, סנט אוסטתיוס וסאבא", + "Brazil" : "ברזיל", + "Bahamas" : "איי בהאמה", + "Bhutan" : "בהוטן", + "Bouvet Island" : "האי בּוּבֶה", + "Botswana" : "בוטסואנה", + "Belarus" : "בלרוס", + "Belize" : "בליז", + "Canada" : "קנדה", + "Cocos (Keeling) Islands" : "איי קוקוס קילינג", + "Central African Republic" : "הרפובליקה המרכז-אפריקאית", + "Congo" : "קונגו", + "Switzerland" : "שווייץ", + "Côte d'Ivoire" : "קוט דיוואר (חוף השנהב)", + "Cook Islands" : "איי קוק", + "Chile" : "צ׳ילה", + "Cameroon" : "קמרון", + "China" : "סין", + "Colombia" : "קולומביה", + "Costa Rica" : "קוסטה ריקה", + "Cuba" : "קובה", + "Cabo Verde" : "כף ורדה", + "Curaçao" : "קוראסאו", + "Christmas Island" : "אי חג המולד", + "Cyprus" : "קפריסין", + "Czechia" : "צ׳כיה", + "Germany" : "גרמניה", + "Djibouti" : "ג׳יבוטי", + "Denmark" : "דנמרק", + "Dominica" : "דומיניקה", + "Dominican Republic" : "הרפובליקה הדומיניקנית", + "Algeria" : "אלג׳יריה", + "Ecuador" : "אקוודור", + "Estonia" : "אסטוניה", + "Egypt" : "מצרים", + "Western Sahara" : "סהרה המערבית", + "Eritrea" : "אריתריאה", + "Spain" : "ספרד", + "Ethiopia" : "אתיופיה", + "Finland" : "פינלנד", + "Fiji" : "פיג׳י", + "Falkland Islands (Malvinas)" : "איי פוקלנד (מלווינאס)", + "Faroe Islands" : "איי פארו", + "France" : "צרפת", + "Gabon" : "גבון", + "United Kingdom of Great Britain and Northern Ireland" : "הממלכה המאוחדת של בריטניה הגדולה וצפון אירלנד", + "Grenada" : "גרנדה", + "Georgia" : "גאורגיה", + "French Guiana" : "גיאנה הצרפתית", + "Guernsey" : "גרנזי", + "Ghana" : "גאנה", + "Gibraltar" : "גיברלטר", + "Greenland" : "גרינלנד", + "Gambia" : "גמביה", + "Guinea" : "גינאה", + "Guadeloupe" : "גוואדלופ", + "Equatorial Guinea" : "גינאה המשוונית", + "Greece" : "יוון", + "South Georgia and the South Sandwich Islands" : "איי ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים", + "Guatemala" : "גואטמלה", + "Guam" : "גואם", + "Guinea-Bissau" : "גינאה ביסאו", + "Guyana" : "גיאנה", + "Hong Kong" : "הונג קונג", + "Heard Island and McDonald Islands" : "האי הרד ואיי מקדונלד", + "Honduras" : "הונדורס", + "Croatia" : "קרואטיה", + "Haiti" : "האיטי", + "Hungary" : "הונגריה", + "Indonesia" : "אינדונזיה", + "Ireland" : "אירלנד", + "Israel" : "ישראל", + "Isle of Man" : "האי מאן", + "India" : "הודו", + "British Indian Ocean Territory" : "הטריטוריה הבריטית באוקיינוס ההודי", + "Iraq" : "עיראק", + "Iceland" : "איסלנד", + "Italy" : "איטליה", + "Jersey" : "ג׳רזי", + "Jamaica" : "ג׳מייקה", + "Jordan" : "ירדן", + "Japan" : "יפן", + "Kenya" : "קניה", + "Kyrgyzstan" : "קירגיסטן", + "Cambodia" : "קמבודיה", + "Kiribati" : "קיריבטי", + "Comoros" : "קומורוס", + "Saint Kitts and Nevis" : "סנט קיטס ונוויס", + "Korea, Republic of" : "קוריאה, הרפובליקה של", + "Kuwait" : "כווית", + "Cayman Islands" : "איי קיימן", + "Kazakhstan" : "קזחסטן", + "Lao People's Democratic Republic" : "הרפובליקה הדמוקרטית העממית של אנשי הלאו", + "Lebanon" : "לבנון", + "Saint Lucia" : "סנט לוסיה", + "Liechtenstein" : "ליכטנשטיין", + "Sri Lanka" : "סרי לנקה", + "Liberia" : "ליבריה", + "Lesotho" : "לסוטו", + "Lithuania" : "ליטא", + "Luxembourg" : "לוקסמבורג", + "Latvia" : "לטביה", + "Libya" : "לוב", + "Morocco" : "מרוקו", + "Monaco" : "מונקו", + "Moldova, Republic of" : "מודלובה, הרפובליקה של", + "Montenegro" : "מונטנגרו", + "Saint Martin (French part)" : "סן מרטן (העבר הצרפתי)", + "Madagascar" : "מדגסקר", + "Marshall Islands" : "איי מרשל", + "North Macedonia" : "מקדוניה הצפונית", + "Mali" : "מאלי", + "Myanmar" : "מיאנמר", + "Mongolia" : "מונגוליה", + "Macao" : "מקאו", + "Northern Mariana Islands" : "איי מריאנה הצפוניים", + "Martinique" : "מרטיניק", + "Mauritania" : "מאוריטניה", + "Montserrat" : "מונטסראט", + "Malta" : "מלטא", + "Mauritius" : "מאוריציוס", + "Maldives" : "האיים המלדיביים", + "Malawi" : "מלאווי", + "Mexico" : "מקסיקו", + "Malaysia" : "מלזיה", + "Mozambique" : "מוזמביק", + "Namibia" : "נמיביה", + "New Caledonia" : "קלדוניה החדשה", + "Niger" : "ניז׳ר", + "Norfolk Island" : "האי נורפוק", + "Nigeria" : "ניגריה", + "Nicaragua" : "ניקרגואה", + "Netherlands" : "הולנד", + "Norway" : "נורווגיה", + "Nepal" : "נפאל", + "Nauru" : "נאורו", + "Niue" : "ניואה", + "New Zealand" : "ניו זילנד", + "Oman" : "עומאן", + "Panama" : "פנמה", + "Peru" : "פרו", + "French Polynesia" : "פולינזיה הצרפתית", + "Papua New Guinea" : "פפואה גינאה החדשה", + "Philippines" : "הפיליפינים", + "Pakistan" : "פקיסטן", + "Poland" : "פולין", + "Saint Pierre and Miquelon" : "סן-פייר ומיקלון", + "Pitcairn" : "פיטקרן", + "Puerto Rico" : "פוארטו ריקו", + "Palestine, State of" : "הרשות הפלסטינית", + "Portugal" : "פורטוגל", + "Palau" : "פלאו", + "Paraguay" : "פרגוואי", + "Qatar" : "קטאר", + "Réunion" : "ראוניון", + "Romania" : "רומניה", + "Serbia" : "סרביה", + "Russian Federation" : "הפדרציה הרוסית", + "Rwanda" : "רואנדה", + "Saudi Arabia" : "ערב הסעודית", + "Solomon Islands" : "איי שלמה", + "Seychelles" : "איי סיישל", + "Sudan" : "סודאן", + "Sweden" : "שוודיה", + "Singapore" : "סינגפור", + "Saint Helena, Ascension and Tristan da Cunha" : "סנט הלנה, אסנשן וטריסטן דה קונה", + "Slovenia" : "סלובניה", + "Svalbard and Jan Mayen" : "סבאלברד ויאן מאיין", + "Slovakia" : "סלובקיה", + "Sierra Leone" : "סיירה לאון", + "San Marino" : "סן מרינו", + "Senegal" : "סנגל", + "Somalia" : "סומליה", + "Suriname" : "סורינאם", + "South Sudan" : "דרום סודאן", + "Sao Tome and Principe" : "סאו טומה ופרינסיפה", + "El Salvador" : "אל סלוודור", + "Sint Maarten (Dutch part)" : "סנט מארטן (העבר ההולנדי)", + "Syrian Arab Republic" : "הרפובליקה הערבית הסורית", + "Eswatini" : "אסוואטיני", + "Turks and Caicos Islands" : "איי טרקס וקייקוס", + "Chad" : "צ׳אד", + "French Southern Territories" : "הארצות הדרומיות והאנטארקטיות של צרפת", + "Togo" : "טוגו", + "Thailand" : "תאילנד", + "Tajikistan" : "טג׳יקיסטן", + "Tokelau" : "טוקלאו", + "Timor-Leste" : "מזרח טימור", + "Turkmenistan" : "טורקמניסטן", + "Tunisia" : "תוניסיה", + "Tonga" : "טונגאית", + "Turkey" : "טורקיה", + "Trinidad and Tobago" : "טרינידד וטובגו", + "Tuvalu" : "טובאלו", + "Taiwan, Province of China" : "טאיוואן (מחוז סיני)", + "Tanzania, United Republic of" : "טנזניה, הרפובליקה המאוחדת של", + "Ukraine" : "אוקראינה", + "Uganda" : "אוגנדה", + "United States Minor Outlying Islands" : "האיים המרוחקים הקטנים של ארה״ב", + "United States of America" : "ארצות הברית", + "Uruguay" : "אורוגוואי", + "Uzbekistan" : "אוזבקיסטן", + "Holy See" : "הכס הקדוש", + "Saint Vincent and the Grenadines" : "סנט וינסנט והגרנדינים", + "Viet Nam" : "וייטנאם", + "Vanuatu" : "ונואטו", + "Wallis and Futuna" : "ואליס ופוטונה", + "Samoa" : "סמואה", + "Yemen" : "תימן", + "Mayotte" : "מָיוֹט", + "South Africa" : "דרום אפריקה", + "Zambia" : "זמביה", + "Zimbabwe" : "זימבבואה", + "Federation" : "איגוד", + "Invalid date, date format must be YYYY-MM-DD" : "תאריך לא חוקי, תבנית התאריך חייבת להיות YYYY-MM-DD", + "Conversation not found" : "הדיון לא נמצא", + "Leave call" : "יציאה מהשיחה", + "Navigating away from the page will leave the call in {conversation}" : "ניווט מחוץ לעמוד תנתק את השיחה שב־{conversation}", + "Stay in call" : "להישאר בשיחה", + "Discuss this file" : "לדון על הקובץ הזה", + "Share this file with others to discuss it" : "שיתוף הקובץ הזה לדיונם של אחרים", + "Share this file" : "שיתוף הקובץ הזה", + "Join conversation" : "הצטרפות לדיון", + "The password is wrong. Try again." : "הססמה שגויה. נא לנסות שוב.", + "Password" : "ססמה", + "Submit" : "שליחה", + "Error requesting the password." : "בקשת הססמה נכשלה.", + "Request password" : "בקשת ססמה", + "This conversation has ended" : "הדיון הסתיים", + "Everyone" : "כולם", + "Users and moderators" : "משתמשים ומפקחים", + "Moderators only" : "מפקחים בלבד", + "Save changes" : "שמירת שינויים", + "Saving …" : "מתבצעת שמירה…", + "Saved!" : "נשמר!", + "Limit to groups" : "הגבלה לקבוצות", + "Limit starting a call" : "הגבלת התחלת שיחה", + "Limit starting calls" : "הגבלת התחלת שיחות", + "Enabled" : "מופעל", + "Disabled" : "מושבת", + "State" : "מצב", + "Name" : "שם", + "Beta" : "בטא", + "Permissions" : "הרשאות", + "All messages" : "כל ההודעות", + "Off" : "כבוי", + "General settings" : "הגדרות כלליות", + "Enable encryption" : "אפשר הצפנה", + "Pending" : "בהמתנה", + "Error" : "שגיאה", + "Blocked" : "נחסם", + "Active" : "פעיל", + "Expired" : "פג", + "Never" : "מעולם לא", + "Language" : "שפה", + "Country" : "מדינה", + "Status" : "מצב", + "Created at" : "נוצר ב־", + "Installed version: {version}" : "גרסה מותקנת: {version}", + "Downloading …" : "מתבצעת הורדה…", + "Failed to execute Matterbridge binary." : "הפעלת הבינרי של Matterbridge נכשלה.", + "Matterbridge integration" : "שילוב עם Matterbridge", + "Enable Matterbridge integration" : "הפעלת שילוב עם Matterbridge", + "Validate SSL certificate" : "אימות אישור SSL", + "Delete this server" : "מחיקת השרת הזה", + "Test this server" : "בדיקת השרת הזה", + "Shared secret" : "סוד משותף", + "STUN server URL" : "כתובת שרת STUN", + "STUN servers" : "שרתי STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "שרת STUN משמש לאיתור כתובת ה־IP הציבורית של המשתמשים מאחורי נתב.", + "TURN server URL" : "כתובת שרת TURN", + "TURN server protocols" : "פרוטוקולים לשרתים מסוג TURN", + "TURN servers" : "שרתי TURN", + "OK" : "אישור", + "Checking …" : "מתבצעת בדיקה…", + "Confirm" : "אימות", + "Reset" : "איפוס", + "Cancel" : "ביטול", + "Back" : "חזרה", + "Loading …" : "בטעינה…", + "From" : "מאת", + "To" : "אל", + "Calendar" : "לוח שנה", + "Attendees" : "משתתפים", + "Save" : "שמירה", + "Search participants" : "חיפוש משתתפים", + "No results" : "אין תוצאות", + "Done" : "הסתיים", + "Speaker view" : "תצוגת דובר", + "Grid view" : "תצוגת טבלה", + "Reload" : "טעינה מחדש", + "Waiting for others to join the call …" : "בהמתנה לאחרים להצטרף לשיחה…", + "You can invite others in the participant tab of the sidebar" : "ניתן להזמין אחרים בלשונית המשתתפים בסרגל הצד", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "ניתן להזמין אחרים דרך לשונית המשתפים בסרגל הצד או לשתף את הקישור הזה כדי להזמין אחרים!", + "Share this link to invite others!" : "יש לשתף את הקישור הזה כדי להזמין אחרים!", + "Copy link" : "העתקת קישור", + "Mute audio" : "השתקת שמע", + "None" : "אין", + "Disable video" : "השבתת וידאו", + "Enable video" : "הפעלת וידאו", + "You" : "אני", + "Show screen" : "הצגת מסך", + "Collapse" : "קיווץ", + "Expand" : "הרחבה", + "Drop your files to upload" : "יש לגרור לכאן קבצים כדי להעלות", + "Favorite" : "סימון כמועדף", + "Date:" : "בתאריך:", + "Note:" : "הערה:", + "Hide details" : "הסתרת פרטים", + "Show details" : "הצגת פרטים", + "Disable" : "השבתה", + "Choose" : "בחר", + "Restricted" : "מוגבלת", + "Conversation settings" : "הגדרות דיון", + "Personal" : "אישי", + "Leave conversation" : "יציאה מהדיון", + "Delete conversation" : "מחיקת דיון", + "_%n hour_::_%n hours_" : ["שעה","שעתיים","%n שעות"], + "_%n day_::_%n days_" : ["יום","יומיים","%n ימים"], + "Password protection" : "הגנה בססמה", + "Set a password" : "הגדרת ססמה", + "Change password" : "שינוי ססמה", + "Start time (optional)" : "מועד התחלה (רשות)", + "Edit" : "עריכה", + "More information" : "מידע נוסף", + "Delete" : "מחיקה", + "unknown state" : "מצב לא ידוע", + "Bridge saved" : "הגישור נשמר", + "Log content" : "תוכן הרישום", + "Notifications" : "התראות", + "Important conversation" : "דיון חשוב", + "In {conversation}" : "בתוך {conversation}", + "Join" : "הצטרף", + "Error while creating the conversation" : "שגיאה ביצירת הדיון", + "Create conversation" : "יצירת דיון", + "Enter your name" : "נא למלא את שמך", + "Log in" : "כניסה", + "Mark as read" : "סימון כנקרא", + "Mark as unread" : "סימון כלא נקרא", + "Remove from favorites" : "הסרה מהמועדפים", + "Add to favorites" : "הוספה למועדפים", + "Home" : "בית", + "Unread" : "לא נקרא", + "Alphabetically" : "בסדר האלף-בית", + "No matches found" : "לא נמצאו התאמות", + "An error occurred while performing the search" : "אירעה שגיאה בעת ביצוע החיפוש", + "Unread messages" : "הודעות שלא נקראו", + "Threads" : "שרשורים", + "Clear filter" : "מחיקת מסנן", + "Users" : "משתמשים", + "Groups" : "קבוצות", + "Other sources" : "מקורות אחרים", + "You are currently waiting in the lobby" : "הנך בהמתנה בלובי", + "Test" : "בדיקה", + "Devices" : "מכשירים", + "No audio" : "אין שמע", + "Calls are not supported in your browser" : "אין תמיכה בשיחות בדפדפן שלך", + "Access to microphone was denied" : "הגישה למיקרופון נדחתה", + "Invalid path selected" : "הנתיב שנבחר שגוי", + "Upload" : "העלאה", + "Files" : "קבצים", + "24 hours" : "24 שעות", + "Reply" : "תגובה", + "More actions" : "פעולות נוספות", + "Go to file" : "מעבר לקובץ", + "Translate" : "תרגום", + "React with {emoji}" : "הגיבו עם {emoji}", + "Dismiss" : "התעלמות", + "Message sent" : "הודעה נשלחה", + "Deleting message" : "ההודעה נמחקה", + "Contact" : "איש/אשת קשר", + "_%n reply_::_%n replies_" : ["תגובה אחת","%n תגובות","%n תגובות"], + "No messages" : "אין הודעות", + "Create a new group conversation" : "יצירת דיון קבוצתי חדש", + "Add participants" : "הוספת משתתפים", + "Send message" : "שליחת הודעה", + "File to share" : "קובץ לשיתוף", + "Add emoji" : "הוספת אמוג׳י", + "Share from Files" : "שיתוף מקבצים", + "Share files to the conversation" : "שיתוף קבצים לדיון", + "Create new poll" : "יצירת סקר חדש", + "New file" : "קובץ חדש", + "Add more files" : "הוספת קבצים נוספים", + "Send" : "שליחה", + "Create poll" : "יצירת סקר", + "Settings" : "הגדרות", + "Anonymous poll" : "סקר אלמוני", + "moderator" : "מפקח/ת", + "guest" : "אורח", + "Remove group and members" : "הסרת קבוצה וחברים", + "Remove participant" : "הסרת משתתף", + "Demote from moderator" : "הורדה מדרגת פיקוח", + "Promote to moderator" : "קידום לדרגת פיקוח", + "Remove" : "הסרה", + "Add users or groups" : "הוספת משתמשים או קבוצות", + "Add groups" : "הוספת קבוצות", + "Add other sources" : "הוספת מקורות אחרים", + "Add emails" : "הוספת כתובות דוא״ל", + "Integrations" : "שילובים", + "Searching …" : "מתבצע חיפוש…", + "Participants" : "משתתפים", + "Chat" : "צ׳אט", + "Details" : "פרטים", + "No results found" : "לא נמצאו תוצאות", + "Load more results" : "לטעון עוד תוצאות", + "Projects" : "מיזמים", + "Link to a conversation" : "קישור לדיון", + "Select conversation" : "בחירת דיון", + "Notification settings" : "הגדרות התראה", + "Default language" : "שפת בררת מחדל", + "Select location for attachments" : "בחירת מיקום לקבצים מצורפים", + "Privacy" : "פרטיות", + "Attachments folder" : "תיקיית הקבצים המצורפים", + "Search" : "חיפוש", + "Shortcuts while in a call" : "קיצורי דרך בזמן שיחה", + "Start call" : "התחלת שיחה", + "React with {reaction}" : "הגיבו עם {reaction}", + "Screensharing options" : "אפשרויות שיתוף מסך", + "Enable screensharing" : "הפעלת שיתוף מסך", + "Screensharing requires the page to be loaded through HTTPS." : "לטובת שיתוף מסך יש לטעון את העמוד דרך HTTPS.", + "An error occurred while starting screensharing." : "אירעה שגיאה בעת התחלת שיתוף המסך.", + "Show your screen" : "הצגת המסך שלך", + "Stop screensharing" : "הפסקת שיתוף המסך", + "Mute others" : "השתקה של אחרים", + "Keep" : "שימור", + "Select a region" : "נא לבחור איזור", + "Message without mention" : "הודעה ללא אזכור", + "Mention myself" : "אזכור עצמי", + "The conversation does not exist" : "הדיון לא קיים", + "Join a conversation or start a new one!" : "הצטרפות לדיון או ליצור אחד חדש!", + "Duplicate session" : "שכפול הפעלה", + "Join a conversation or start a new one" : "ניתן להצטרף לדיון או להתחיל באחד חדש.", + "Nextcloud URL" : "כתובת Nextcloud", + "Nextcloud user" : "משתמש Nextcloud", + "User password" : "ססמת משתמש", + "Matrix server URL" : "כתובת שרת Matrix", + "User" : "משתמש", + "Matrix channel" : "ערוץ Matrix", + "Mattermost server URL" : "כתובת שרת Mattermost", + "Mattermost user" : "משתמש Mattermost", + "Team name" : "שם צוות", + "Channel name" : "שם ערוץ", + "Rocket.Chat server URL" : "כתובת שרת Rocket.Chat", + "Rocket.Chat channel" : "ערוץ Rocket.Chat", + "Zulip server URL" : "כתובת שרת Zulip", + "Bot user name" : "שם המשתמש של הבוט", + "Bot API key" : "מפתח ה־API של הבוט", + "Zulip channel" : "ערוץ Zulip", + "API token" : "אסימון API", + "Slack channel" : "ערוץ Slack", + "Server ID or name" : "מזהה או שם שרת", + "Channel" : "ערוץ", + "Login" : "התחבר", + "Chat ID" : "מזהה צ׳אט", + "Nickname" : "כינוי", + "Connection password" : "ססמת התחברות", + "IRC channel" : "ערוץ IRC", + "Client ID" : "מזהה לקו", + "Team ID" : "מזהה הקבוצה", + "Thread ID" : "מזהה שרשור", + "MUC server URL" : "כתובת שרת MUC", + "Jabber ID" : "מזהה Jabber", + "Media" : "מדיה", + "Polls" : "סקרים", + "Locations" : "מיקומים", + "Audio" : "שמע", + "Group" : "קבוצה", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "An error occurred while fetching the participants" : "אירעה שגיאה במהלך קבלת המשתתפים", + "Error while sharing file" : "שגיאה בשיתוף הקובץ", + "Please reload the page." : "יש להעלות מחדש דף זה.", + "Do not disturb" : "לא להפריע", + "Away" : "לא פה", + "Speaker {number}" : "רמקול {number}", + "Access to microphone & camera is only possible with HTTPS" : "גישה למיקרופון ולמצלמה אפשרית רק עם HTTPS", + "Please move your setup to HTTPS" : "נא להעביר את התצורה שלך ל־HTTPS", + "Access to microphone & camera was denied" : "הגישה למיקרופון ולמצלמה נדחתה", + "WebRTC is not supported in your browser" : "בדפדפן שלך אין תמיכה ב־WebRTC", + "Please use a different browser like Firefox or Chrome" : "נא להשתמש בדפדפן אחר כגון Firefox או Chrome", + "Error while accessing microphone & camera" : "אירעה שגיאה בעת גישה למיקרופון ולמצלמה", + "Android app" : "יישומון ל־Android", + "iOS app" : "יישומון ל־iOS", + "__language_name__" : "עברית", + "Tasks" : "משימות", + "Notes" : "פתקים" +}, +"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;"); diff --git a/l10n/he.json b/l10n/he.json new file mode 100644 index 0000000..af57555 --- /dev/null +++ b/l10n/he.json @@ -0,0 +1,620 @@ +{ "translations": { + "a conversation" : "דיון", + "(Duration %s)" : "(משך %s)", + "You attended a call with {user1}" : "הצטרפת לשיחה עם {user1}", + "_%n guest_::_%n guests_" : ["אורח/ת 1","%n אורחים","%n אורחים","%n אורחים"], + "You attended a call with {user1} and {user2}" : "השתתפת בשיחה עם {user1} ועם {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "השתתפת בשיחה עם {user1}, {user2} ועם {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "השתתפת בשיחה עם {user1}, {user2}, {user3} ועם {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "השתתפת בשיחה עם {user1}, {user2}, {user3}, {user4} ועם {user5}", + "_%n other_::_%n others_" : ["מישהו נוסף","%n נוספים","%n נוספים"], + "{actor} invited you to {call}" : "הוזמנת אל {call} על ידי {actor}", + "You were invited to a conversation or had a call" : "הוזמנת לדיון או שקיבלת שיחה", + "Other activities" : "פעילויות אחרות", + "Talk" : "שיחה", + "Guest" : "אורח/ת", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- ניתן מעתה להשתמש ב־Microsoft Edge וב־Safari כדי להשתת, בשיחות שמע ווידאו", + "{actor} created the conversation" : "הדיון נוצר על ידי {actor}", + "You created the conversation" : "יצרת את הדיון", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "השם של הדיון השתנה מ־„%1$s” ל־„%2$s” על ידי {actor}", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "שינית את שם הדיון מהשם „%1$s” לשם „%2$s”", + "You started a call" : "התחלת שיחה", + "{actor} started a call" : "שיחה החלה על ידי {actor}", + "{actor} joined the call" : "{actor} מעכשיו בשיחה", + "You joined the call" : "הצטרפת לשיחה", + "{actor} left the call" : "{actor} לא בשיחה עוד", + "You left the call" : "עזבת את השיחה", + "{actor} unlocked the conversation" : "הדיון שוחרר על ידי {actor}", + "You unlocked the conversation" : "שחררת את הדיון", + "{actor} locked the conversation" : "הדיון ננעל על ידי {actor}", + "You locked the conversation" : "נעלת את הדיון", + "The conversation is now open to everyone" : "הדיון מעתה פתוח לכול", + "{actor} opened the conversation to everyone" : "הדיון נפתח לכול על ידי {actor}", + "You opened the conversation to everyone" : "פתחת את הדיון לכול", + "{actor} restricted the conversation to moderators" : "הדיון הוגבל למפקחים על ידי {actor}", + "You restricted the conversation to moderators" : "הגבלת את הדיון למפקחים", + "{actor} allowed guests" : "אורחים הורשו על ידי {actor}", + "You allowed guests" : "הרשית אורחים", + "An administrator allowed guests" : "ההנהלה איפשרה אורחים", + "{actor} disallowed guests" : "אורחים נאסרו על ידי {actor}", + "You disallowed guests" : "אסרת אורחים", + "An administrator disallowed guests" : "ההנהלה אסרה על אורחים", + "{actor} set a password" : "הוגדרה ססמה על ידי {actor}", + "You set a password" : "הגדרת ססמה", + "An administrator set a password" : "ההנהלה הגדירה ססמה", + "{actor} removed the password" : "הססמה הוסרה על ידי {actor}", + "You removed the password" : "הסרת את הססמה", + "An administrator removed the password" : "הססמה הוסרה על ידי ההנהלה", + "{actor} added {user}" : "ההוספה של {user} בוצעה על ידי {actor}", + "You joined the conversation" : "הצטרפת לדיון", + "{actor} joined the conversation" : "הצטרפות של {actor} לדיון", + "You added {user}" : "הוספת את {user}", + "{actor} added you" : "נוספת על ידי {actor}", + "An administrator added you" : "נוספת על ידי ההנהלה", + "An administrator added {user}" : "ההנהלה הוסיפה את {user}", + "You left the conversation" : "עזבת את הדיון", + "You removed group {group}" : "הסרת את הקבוצה {group}", + "An administrator removed group {group}" : "ההנהלה הסירה את הקבוצה {group}", + "You shared a file which is no longer available" : "שיתפת קובץ שאינו זמין עוד", + "You updated the Matterbridge configuration" : "עדכנת את הגדרות ה־Matterbridge", + "You stopped Matterbridge" : "עצרת את Matterbridge", + "{actor} deleted a message" : "הודעה נמחקה על ידי {actor}", + "You deleted a message" : "מחקת הודעה", + "Message deleted by author" : "ההודעה נמחקה על ידי מי שפרסם אותה", + "Deleted user" : "משתמש מחוק", + "Administration" : "ניהול", + "System" : "מערכת", + "Talk conversations" : "דיוני שיח", + "File not found" : "קובץ לא נמצא", + "File is too big" : "הקובץ גדול מדי", + "Invalid file provided" : "הקובץ שסופק שגוי", + "Invalid image" : "תמונה לא חוקית", + "Unknown filetype" : "סוג קובץ לא מוכר", + "Say hi to your friends and colleagues!" : "על הדרך לראות מה עם חבריך לעבודה!", + "No unread mentions" : "אין אזכורים שלא נקראו", + "Call in progress" : "מתנהלת שיחה", + "Conversation invitation" : "הזמנה לדיון", + "Description" : "תיאור", + "Meeting ID" : "מזהה פגישה", + "Meeting" : "מפגש", + "Password request: %s" : "בקשת ססמה: %s", + "Private conversation" : "דיון פרטי", + "Deleted user (%s)" : "משתמש שנמחק (%s)", + "Dismiss notification" : "התעלמות מהתראה", + "Accept" : "אשר", + "Decline" : "דחייה", + "New message" : "הודעה חדשה", + "Notification" : "הוֹדָעָה", + "{user} sent you a private message" : "התקבלה הודעה פרטית מאת {user}", + "{user} invited you to a group conversation: {call}" : "הוזמנת על ידי {user} לדיון קבוצתי: {call}", + "Join call" : "הצטרפות לשיחה", + "Answer call" : "לענות לשיחה", + "Call back" : "להתקשר בחזרה", + "You missed a call from {user}" : "החמצת שיחה עם {user}", + "A group call has started in {call}" : "החלה שיחה קבוצתית תחת {call}", + "Open settings" : "פתיחת הגדרות", + "error" : "שגיאה", + "Default" : "בררת מחדל", + "Presentation" : "מצגת", + "Conversations" : "דיונים", + "{user}" : "{user}", + "Messages" : "הודעות", + "Messages in other conversations" : "הודעות בדיונים אחרים", + "Avatar image is not square" : "התמונה המייצגת אינה מרובעת", + "Other" : "אחר", + "The email address is invalid." : "כתובת הדוא״ל שגויה.", + "Andorra" : "אנדורה", + "United Arab Emirates" : "איחוד האמירויות הערביות", + "Afghanistan" : "אפגניסטן", + "Antigua and Barbuda" : "אנטיגואה וברבודה", + "Anguilla" : "אנגווילה", + "Albania" : "אלבניה", + "Armenia" : "ארמניה", + "Angola" : "אנגולה", + "Antarctica" : "אנטארקטיקה", + "Argentina" : "ארגנטינה", + "American Samoa" : "סמואה האמריקנית", + "Austria" : "אוסטריה", + "Australia" : "אוסטרליה", + "Aruba" : "ארובה", + "Åland Islands" : "איי אולנד", + "Azerbaijan" : "אזרבייג׳ן", + "Bosnia and Herzegovina" : "בוסניה והרצגובינה", + "Barbados" : "ברבדוס", + "Bangladesh" : "בנגלדש", + "Belgium" : "בלגיה", + "Burkina Faso" : "בורקינה פאסו", + "Bulgaria" : "בולגריה", + "Bahrain" : "בחריין", + "Burundi" : "בורונדי", + "Benin" : "בנין", + "Saint Barthélemy" : "סן ברתלמי", + "Bermuda" : "ברמודה", + "Brunei Darussalam" : "ברוניי משכן השלום", + "Bonaire, Sint Eustatius and Saba" : "בונייר, סנט אוסטתיוס וסאבא", + "Brazil" : "ברזיל", + "Bahamas" : "איי בהאמה", + "Bhutan" : "בהוטן", + "Bouvet Island" : "האי בּוּבֶה", + "Botswana" : "בוטסואנה", + "Belarus" : "בלרוס", + "Belize" : "בליז", + "Canada" : "קנדה", + "Cocos (Keeling) Islands" : "איי קוקוס קילינג", + "Central African Republic" : "הרפובליקה המרכז-אפריקאית", + "Congo" : "קונגו", + "Switzerland" : "שווייץ", + "Côte d'Ivoire" : "קוט דיוואר (חוף השנהב)", + "Cook Islands" : "איי קוק", + "Chile" : "צ׳ילה", + "Cameroon" : "קמרון", + "China" : "סין", + "Colombia" : "קולומביה", + "Costa Rica" : "קוסטה ריקה", + "Cuba" : "קובה", + "Cabo Verde" : "כף ורדה", + "Curaçao" : "קוראסאו", + "Christmas Island" : "אי חג המולד", + "Cyprus" : "קפריסין", + "Czechia" : "צ׳כיה", + "Germany" : "גרמניה", + "Djibouti" : "ג׳יבוטי", + "Denmark" : "דנמרק", + "Dominica" : "דומיניקה", + "Dominican Republic" : "הרפובליקה הדומיניקנית", + "Algeria" : "אלג׳יריה", + "Ecuador" : "אקוודור", + "Estonia" : "אסטוניה", + "Egypt" : "מצרים", + "Western Sahara" : "סהרה המערבית", + "Eritrea" : "אריתריאה", + "Spain" : "ספרד", + "Ethiopia" : "אתיופיה", + "Finland" : "פינלנד", + "Fiji" : "פיג׳י", + "Falkland Islands (Malvinas)" : "איי פוקלנד (מלווינאס)", + "Faroe Islands" : "איי פארו", + "France" : "צרפת", + "Gabon" : "גבון", + "United Kingdom of Great Britain and Northern Ireland" : "הממלכה המאוחדת של בריטניה הגדולה וצפון אירלנד", + "Grenada" : "גרנדה", + "Georgia" : "גאורגיה", + "French Guiana" : "גיאנה הצרפתית", + "Guernsey" : "גרנזי", + "Ghana" : "גאנה", + "Gibraltar" : "גיברלטר", + "Greenland" : "גרינלנד", + "Gambia" : "גמביה", + "Guinea" : "גינאה", + "Guadeloupe" : "גוואדלופ", + "Equatorial Guinea" : "גינאה המשוונית", + "Greece" : "יוון", + "South Georgia and the South Sandwich Islands" : "איי ג׳ורג׳יה הדרומית ואיי סנדוויץ׳ הדרומיים", + "Guatemala" : "גואטמלה", + "Guam" : "גואם", + "Guinea-Bissau" : "גינאה ביסאו", + "Guyana" : "גיאנה", + "Hong Kong" : "הונג קונג", + "Heard Island and McDonald Islands" : "האי הרד ואיי מקדונלד", + "Honduras" : "הונדורס", + "Croatia" : "קרואטיה", + "Haiti" : "האיטי", + "Hungary" : "הונגריה", + "Indonesia" : "אינדונזיה", + "Ireland" : "אירלנד", + "Israel" : "ישראל", + "Isle of Man" : "האי מאן", + "India" : "הודו", + "British Indian Ocean Territory" : "הטריטוריה הבריטית באוקיינוס ההודי", + "Iraq" : "עיראק", + "Iceland" : "איסלנד", + "Italy" : "איטליה", + "Jersey" : "ג׳רזי", + "Jamaica" : "ג׳מייקה", + "Jordan" : "ירדן", + "Japan" : "יפן", + "Kenya" : "קניה", + "Kyrgyzstan" : "קירגיסטן", + "Cambodia" : "קמבודיה", + "Kiribati" : "קיריבטי", + "Comoros" : "קומורוס", + "Saint Kitts and Nevis" : "סנט קיטס ונוויס", + "Korea, Republic of" : "קוריאה, הרפובליקה של", + "Kuwait" : "כווית", + "Cayman Islands" : "איי קיימן", + "Kazakhstan" : "קזחסטן", + "Lao People's Democratic Republic" : "הרפובליקה הדמוקרטית העממית של אנשי הלאו", + "Lebanon" : "לבנון", + "Saint Lucia" : "סנט לוסיה", + "Liechtenstein" : "ליכטנשטיין", + "Sri Lanka" : "סרי לנקה", + "Liberia" : "ליבריה", + "Lesotho" : "לסוטו", + "Lithuania" : "ליטא", + "Luxembourg" : "לוקסמבורג", + "Latvia" : "לטביה", + "Libya" : "לוב", + "Morocco" : "מרוקו", + "Monaco" : "מונקו", + "Moldova, Republic of" : "מודלובה, הרפובליקה של", + "Montenegro" : "מונטנגרו", + "Saint Martin (French part)" : "סן מרטן (העבר הצרפתי)", + "Madagascar" : "מדגסקר", + "Marshall Islands" : "איי מרשל", + "North Macedonia" : "מקדוניה הצפונית", + "Mali" : "מאלי", + "Myanmar" : "מיאנמר", + "Mongolia" : "מונגוליה", + "Macao" : "מקאו", + "Northern Mariana Islands" : "איי מריאנה הצפוניים", + "Martinique" : "מרטיניק", + "Mauritania" : "מאוריטניה", + "Montserrat" : "מונטסראט", + "Malta" : "מלטא", + "Mauritius" : "מאוריציוס", + "Maldives" : "האיים המלדיביים", + "Malawi" : "מלאווי", + "Mexico" : "מקסיקו", + "Malaysia" : "מלזיה", + "Mozambique" : "מוזמביק", + "Namibia" : "נמיביה", + "New Caledonia" : "קלדוניה החדשה", + "Niger" : "ניז׳ר", + "Norfolk Island" : "האי נורפוק", + "Nigeria" : "ניגריה", + "Nicaragua" : "ניקרגואה", + "Netherlands" : "הולנד", + "Norway" : "נורווגיה", + "Nepal" : "נפאל", + "Nauru" : "נאורו", + "Niue" : "ניואה", + "New Zealand" : "ניו זילנד", + "Oman" : "עומאן", + "Panama" : "פנמה", + "Peru" : "פרו", + "French Polynesia" : "פולינזיה הצרפתית", + "Papua New Guinea" : "פפואה גינאה החדשה", + "Philippines" : "הפיליפינים", + "Pakistan" : "פקיסטן", + "Poland" : "פולין", + "Saint Pierre and Miquelon" : "סן-פייר ומיקלון", + "Pitcairn" : "פיטקרן", + "Puerto Rico" : "פוארטו ריקו", + "Palestine, State of" : "הרשות הפלסטינית", + "Portugal" : "פורטוגל", + "Palau" : "פלאו", + "Paraguay" : "פרגוואי", + "Qatar" : "קטאר", + "Réunion" : "ראוניון", + "Romania" : "רומניה", + "Serbia" : "סרביה", + "Russian Federation" : "הפדרציה הרוסית", + "Rwanda" : "רואנדה", + "Saudi Arabia" : "ערב הסעודית", + "Solomon Islands" : "איי שלמה", + "Seychelles" : "איי סיישל", + "Sudan" : "סודאן", + "Sweden" : "שוודיה", + "Singapore" : "סינגפור", + "Saint Helena, Ascension and Tristan da Cunha" : "סנט הלנה, אסנשן וטריסטן דה קונה", + "Slovenia" : "סלובניה", + "Svalbard and Jan Mayen" : "סבאלברד ויאן מאיין", + "Slovakia" : "סלובקיה", + "Sierra Leone" : "סיירה לאון", + "San Marino" : "סן מרינו", + "Senegal" : "סנגל", + "Somalia" : "סומליה", + "Suriname" : "סורינאם", + "South Sudan" : "דרום סודאן", + "Sao Tome and Principe" : "סאו טומה ופרינסיפה", + "El Salvador" : "אל סלוודור", + "Sint Maarten (Dutch part)" : "סנט מארטן (העבר ההולנדי)", + "Syrian Arab Republic" : "הרפובליקה הערבית הסורית", + "Eswatini" : "אסוואטיני", + "Turks and Caicos Islands" : "איי טרקס וקייקוס", + "Chad" : "צ׳אד", + "French Southern Territories" : "הארצות הדרומיות והאנטארקטיות של צרפת", + "Togo" : "טוגו", + "Thailand" : "תאילנד", + "Tajikistan" : "טג׳יקיסטן", + "Tokelau" : "טוקלאו", + "Timor-Leste" : "מזרח טימור", + "Turkmenistan" : "טורקמניסטן", + "Tunisia" : "תוניסיה", + "Tonga" : "טונגאית", + "Turkey" : "טורקיה", + "Trinidad and Tobago" : "טרינידד וטובגו", + "Tuvalu" : "טובאלו", + "Taiwan, Province of China" : "טאיוואן (מחוז סיני)", + "Tanzania, United Republic of" : "טנזניה, הרפובליקה המאוחדת של", + "Ukraine" : "אוקראינה", + "Uganda" : "אוגנדה", + "United States Minor Outlying Islands" : "האיים המרוחקים הקטנים של ארה״ב", + "United States of America" : "ארצות הברית", + "Uruguay" : "אורוגוואי", + "Uzbekistan" : "אוזבקיסטן", + "Holy See" : "הכס הקדוש", + "Saint Vincent and the Grenadines" : "סנט וינסנט והגרנדינים", + "Viet Nam" : "וייטנאם", + "Vanuatu" : "ונואטו", + "Wallis and Futuna" : "ואליס ופוטונה", + "Samoa" : "סמואה", + "Yemen" : "תימן", + "Mayotte" : "מָיוֹט", + "South Africa" : "דרום אפריקה", + "Zambia" : "זמביה", + "Zimbabwe" : "זימבבואה", + "Federation" : "איגוד", + "Invalid date, date format must be YYYY-MM-DD" : "תאריך לא חוקי, תבנית התאריך חייבת להיות YYYY-MM-DD", + "Conversation not found" : "הדיון לא נמצא", + "Leave call" : "יציאה מהשיחה", + "Navigating away from the page will leave the call in {conversation}" : "ניווט מחוץ לעמוד תנתק את השיחה שב־{conversation}", + "Stay in call" : "להישאר בשיחה", + "Discuss this file" : "לדון על הקובץ הזה", + "Share this file with others to discuss it" : "שיתוף הקובץ הזה לדיונם של אחרים", + "Share this file" : "שיתוף הקובץ הזה", + "Join conversation" : "הצטרפות לדיון", + "The password is wrong. Try again." : "הססמה שגויה. נא לנסות שוב.", + "Password" : "ססמה", + "Submit" : "שליחה", + "Error requesting the password." : "בקשת הססמה נכשלה.", + "Request password" : "בקשת ססמה", + "This conversation has ended" : "הדיון הסתיים", + "Everyone" : "כולם", + "Users and moderators" : "משתמשים ומפקחים", + "Moderators only" : "מפקחים בלבד", + "Save changes" : "שמירת שינויים", + "Saving …" : "מתבצעת שמירה…", + "Saved!" : "נשמר!", + "Limit to groups" : "הגבלה לקבוצות", + "Limit starting a call" : "הגבלת התחלת שיחה", + "Limit starting calls" : "הגבלת התחלת שיחות", + "Enabled" : "מופעל", + "Disabled" : "מושבת", + "State" : "מצב", + "Name" : "שם", + "Beta" : "בטא", + "Permissions" : "הרשאות", + "All messages" : "כל ההודעות", + "Off" : "כבוי", + "General settings" : "הגדרות כלליות", + "Enable encryption" : "אפשר הצפנה", + "Pending" : "בהמתנה", + "Error" : "שגיאה", + "Blocked" : "נחסם", + "Active" : "פעיל", + "Expired" : "פג", + "Never" : "מעולם לא", + "Language" : "שפה", + "Country" : "מדינה", + "Status" : "מצב", + "Created at" : "נוצר ב־", + "Installed version: {version}" : "גרסה מותקנת: {version}", + "Downloading …" : "מתבצעת הורדה…", + "Failed to execute Matterbridge binary." : "הפעלת הבינרי של Matterbridge נכשלה.", + "Matterbridge integration" : "שילוב עם Matterbridge", + "Enable Matterbridge integration" : "הפעלת שילוב עם Matterbridge", + "Validate SSL certificate" : "אימות אישור SSL", + "Delete this server" : "מחיקת השרת הזה", + "Test this server" : "בדיקת השרת הזה", + "Shared secret" : "סוד משותף", + "STUN server URL" : "כתובת שרת STUN", + "STUN servers" : "שרתי STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "שרת STUN משמש לאיתור כתובת ה־IP הציבורית של המשתמשים מאחורי נתב.", + "TURN server URL" : "כתובת שרת TURN", + "TURN server protocols" : "פרוטוקולים לשרתים מסוג TURN", + "TURN servers" : "שרתי TURN", + "OK" : "אישור", + "Checking …" : "מתבצעת בדיקה…", + "Confirm" : "אימות", + "Reset" : "איפוס", + "Cancel" : "ביטול", + "Back" : "חזרה", + "Loading …" : "בטעינה…", + "From" : "מאת", + "To" : "אל", + "Calendar" : "לוח שנה", + "Attendees" : "משתתפים", + "Save" : "שמירה", + "Search participants" : "חיפוש משתתפים", + "No results" : "אין תוצאות", + "Done" : "הסתיים", + "Speaker view" : "תצוגת דובר", + "Grid view" : "תצוגת טבלה", + "Reload" : "טעינה מחדש", + "Waiting for others to join the call …" : "בהמתנה לאחרים להצטרף לשיחה…", + "You can invite others in the participant tab of the sidebar" : "ניתן להזמין אחרים בלשונית המשתתפים בסרגל הצד", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "ניתן להזמין אחרים דרך לשונית המשתפים בסרגל הצד או לשתף את הקישור הזה כדי להזמין אחרים!", + "Share this link to invite others!" : "יש לשתף את הקישור הזה כדי להזמין אחרים!", + "Copy link" : "העתקת קישור", + "Mute audio" : "השתקת שמע", + "None" : "אין", + "Disable video" : "השבתת וידאו", + "Enable video" : "הפעלת וידאו", + "You" : "אני", + "Show screen" : "הצגת מסך", + "Collapse" : "קיווץ", + "Expand" : "הרחבה", + "Drop your files to upload" : "יש לגרור לכאן קבצים כדי להעלות", + "Favorite" : "סימון כמועדף", + "Date:" : "בתאריך:", + "Note:" : "הערה:", + "Hide details" : "הסתרת פרטים", + "Show details" : "הצגת פרטים", + "Disable" : "השבתה", + "Choose" : "בחר", + "Restricted" : "מוגבלת", + "Conversation settings" : "הגדרות דיון", + "Personal" : "אישי", + "Leave conversation" : "יציאה מהדיון", + "Delete conversation" : "מחיקת דיון", + "_%n hour_::_%n hours_" : ["שעה","שעתיים","%n שעות"], + "_%n day_::_%n days_" : ["יום","יומיים","%n ימים"], + "Password protection" : "הגנה בססמה", + "Set a password" : "הגדרת ססמה", + "Change password" : "שינוי ססמה", + "Start time (optional)" : "מועד התחלה (רשות)", + "Edit" : "עריכה", + "More information" : "מידע נוסף", + "Delete" : "מחיקה", + "unknown state" : "מצב לא ידוע", + "Bridge saved" : "הגישור נשמר", + "Log content" : "תוכן הרישום", + "Notifications" : "התראות", + "Important conversation" : "דיון חשוב", + "In {conversation}" : "בתוך {conversation}", + "Join" : "הצטרף", + "Error while creating the conversation" : "שגיאה ביצירת הדיון", + "Create conversation" : "יצירת דיון", + "Enter your name" : "נא למלא את שמך", + "Log in" : "כניסה", + "Mark as read" : "סימון כנקרא", + "Mark as unread" : "סימון כלא נקרא", + "Remove from favorites" : "הסרה מהמועדפים", + "Add to favorites" : "הוספה למועדפים", + "Home" : "בית", + "Unread" : "לא נקרא", + "Alphabetically" : "בסדר האלף-בית", + "No matches found" : "לא נמצאו התאמות", + "An error occurred while performing the search" : "אירעה שגיאה בעת ביצוע החיפוש", + "Unread messages" : "הודעות שלא נקראו", + "Threads" : "שרשורים", + "Clear filter" : "מחיקת מסנן", + "Users" : "משתמשים", + "Groups" : "קבוצות", + "Other sources" : "מקורות אחרים", + "You are currently waiting in the lobby" : "הנך בהמתנה בלובי", + "Test" : "בדיקה", + "Devices" : "מכשירים", + "No audio" : "אין שמע", + "Calls are not supported in your browser" : "אין תמיכה בשיחות בדפדפן שלך", + "Access to microphone was denied" : "הגישה למיקרופון נדחתה", + "Invalid path selected" : "הנתיב שנבחר שגוי", + "Upload" : "העלאה", + "Files" : "קבצים", + "24 hours" : "24 שעות", + "Reply" : "תגובה", + "More actions" : "פעולות נוספות", + "Go to file" : "מעבר לקובץ", + "Translate" : "תרגום", + "React with {emoji}" : "הגיבו עם {emoji}", + "Dismiss" : "התעלמות", + "Message sent" : "הודעה נשלחה", + "Deleting message" : "ההודעה נמחקה", + "Contact" : "איש/אשת קשר", + "_%n reply_::_%n replies_" : ["תגובה אחת","%n תגובות","%n תגובות"], + "No messages" : "אין הודעות", + "Create a new group conversation" : "יצירת דיון קבוצתי חדש", + "Add participants" : "הוספת משתתפים", + "Send message" : "שליחת הודעה", + "File to share" : "קובץ לשיתוף", + "Add emoji" : "הוספת אמוג׳י", + "Share from Files" : "שיתוף מקבצים", + "Share files to the conversation" : "שיתוף קבצים לדיון", + "Create new poll" : "יצירת סקר חדש", + "New file" : "קובץ חדש", + "Add more files" : "הוספת קבצים נוספים", + "Send" : "שליחה", + "Create poll" : "יצירת סקר", + "Settings" : "הגדרות", + "Anonymous poll" : "סקר אלמוני", + "moderator" : "מפקח/ת", + "guest" : "אורח", + "Remove group and members" : "הסרת קבוצה וחברים", + "Remove participant" : "הסרת משתתף", + "Demote from moderator" : "הורדה מדרגת פיקוח", + "Promote to moderator" : "קידום לדרגת פיקוח", + "Remove" : "הסרה", + "Add users or groups" : "הוספת משתמשים או קבוצות", + "Add groups" : "הוספת קבוצות", + "Add other sources" : "הוספת מקורות אחרים", + "Add emails" : "הוספת כתובות דוא״ל", + "Integrations" : "שילובים", + "Searching …" : "מתבצע חיפוש…", + "Participants" : "משתתפים", + "Chat" : "צ׳אט", + "Details" : "פרטים", + "No results found" : "לא נמצאו תוצאות", + "Load more results" : "לטעון עוד תוצאות", + "Projects" : "מיזמים", + "Link to a conversation" : "קישור לדיון", + "Select conversation" : "בחירת דיון", + "Notification settings" : "הגדרות התראה", + "Default language" : "שפת בררת מחדל", + "Select location for attachments" : "בחירת מיקום לקבצים מצורפים", + "Privacy" : "פרטיות", + "Attachments folder" : "תיקיית הקבצים המצורפים", + "Search" : "חיפוש", + "Shortcuts while in a call" : "קיצורי דרך בזמן שיחה", + "Start call" : "התחלת שיחה", + "React with {reaction}" : "הגיבו עם {reaction}", + "Screensharing options" : "אפשרויות שיתוף מסך", + "Enable screensharing" : "הפעלת שיתוף מסך", + "Screensharing requires the page to be loaded through HTTPS." : "לטובת שיתוף מסך יש לטעון את העמוד דרך HTTPS.", + "An error occurred while starting screensharing." : "אירעה שגיאה בעת התחלת שיתוף המסך.", + "Show your screen" : "הצגת המסך שלך", + "Stop screensharing" : "הפסקת שיתוף המסך", + "Mute others" : "השתקה של אחרים", + "Keep" : "שימור", + "Select a region" : "נא לבחור איזור", + "Message without mention" : "הודעה ללא אזכור", + "Mention myself" : "אזכור עצמי", + "The conversation does not exist" : "הדיון לא קיים", + "Join a conversation or start a new one!" : "הצטרפות לדיון או ליצור אחד חדש!", + "Duplicate session" : "שכפול הפעלה", + "Join a conversation or start a new one" : "ניתן להצטרף לדיון או להתחיל באחד חדש.", + "Nextcloud URL" : "כתובת Nextcloud", + "Nextcloud user" : "משתמש Nextcloud", + "User password" : "ססמת משתמש", + "Matrix server URL" : "כתובת שרת Matrix", + "User" : "משתמש", + "Matrix channel" : "ערוץ Matrix", + "Mattermost server URL" : "כתובת שרת Mattermost", + "Mattermost user" : "משתמש Mattermost", + "Team name" : "שם צוות", + "Channel name" : "שם ערוץ", + "Rocket.Chat server URL" : "כתובת שרת Rocket.Chat", + "Rocket.Chat channel" : "ערוץ Rocket.Chat", + "Zulip server URL" : "כתובת שרת Zulip", + "Bot user name" : "שם המשתמש של הבוט", + "Bot API key" : "מפתח ה־API של הבוט", + "Zulip channel" : "ערוץ Zulip", + "API token" : "אסימון API", + "Slack channel" : "ערוץ Slack", + "Server ID or name" : "מזהה או שם שרת", + "Channel" : "ערוץ", + "Login" : "התחבר", + "Chat ID" : "מזהה צ׳אט", + "Nickname" : "כינוי", + "Connection password" : "ססמת התחברות", + "IRC channel" : "ערוץ IRC", + "Client ID" : "מזהה לקו", + "Team ID" : "מזהה הקבוצה", + "Thread ID" : "מזהה שרשור", + "MUC server URL" : "כתובת שרת MUC", + "Jabber ID" : "מזהה Jabber", + "Media" : "מדיה", + "Polls" : "סקרים", + "Locations" : "מיקומים", + "Audio" : "שמע", + "Group" : "קבוצה", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "An error occurred while fetching the participants" : "אירעה שגיאה במהלך קבלת המשתתפים", + "Error while sharing file" : "שגיאה בשיתוף הקובץ", + "Please reload the page." : "יש להעלות מחדש דף זה.", + "Do not disturb" : "לא להפריע", + "Away" : "לא פה", + "Speaker {number}" : "רמקול {number}", + "Access to microphone & camera is only possible with HTTPS" : "גישה למיקרופון ולמצלמה אפשרית רק עם HTTPS", + "Please move your setup to HTTPS" : "נא להעביר את התצורה שלך ל־HTTPS", + "Access to microphone & camera was denied" : "הגישה למיקרופון ולמצלמה נדחתה", + "WebRTC is not supported in your browser" : "בדפדפן שלך אין תמיכה ב־WebRTC", + "Please use a different browser like Firefox or Chrome" : "נא להשתמש בדפדפן אחר כגון Firefox או Chrome", + "Error while accessing microphone & camera" : "אירעה שגיאה בעת גישה למיקרופון ולמצלמה", + "Android app" : "יישומון ל־Android", + "iOS app" : "יישומון ל־iOS", + "__language_name__" : "עברית", + "Tasks" : "משימות", + "Notes" : "פתקים" +},"pluralForm" :"nplurals=3; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % 1 == 0) ? 1: 2;" +} \ No newline at end of file diff --git a/l10n/hr.js b/l10n/hr.js new file mode 100644 index 0000000..8aae4e7 --- /dev/null +++ b/l10n/hr.js @@ -0,0 +1,2245 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "razgovor", + "(Duration %s)" : "(Trajanje %s)", + "You attended a call with {user1}" : "Sudjelovali ste u pozivu s {user1}", + "_%n guest_::_%n guests_" : ["%n gost","%n gostiju","%n gostiju"], + "You attended a call with {user1} and {user2}" : "Sudjelovali ste u pozivu s {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Sudjelovali ste u pozivu s {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sudjelovali ste u pozivu s {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sudjelovali ste u pozivu s {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["još %n","još %n","još %n"], + "{actor} invited you to {call}" : "{actor} vas je pozvao u {call}", + "You were invited to a conversation or had a call" : "Pozvani ste u razgovor ili ste sudjelovali u pozivu", + "Other activities" : "Druge aktivnosti", + "Talk" : "Razgovor", + "Guest" : "Gost", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dobro došli u Nextcloud Talk!\nU ovom razgovoru bit ćete obaviješteni o novim značajkama dostupnima u Nextcloud Talku.", + "## New in Talk %s" : "## Novo u Talku %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Sada možete upotrebljavati Microsoft Edge i Safari za sudjelovanje u glasovnim i videopozivima", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Razgovori jedan na jedan sada su zaštićeni i više se ne mogu slučajno pretvoriti u grupne razgovore. Također se razgovor više ne briše automatski ako jedan od sudionika napusti razgovor. Razgovor se briše s poslužitelja samo ako ga napuste oba sudionika", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sada možete obavijestiti sve sudionike slanjem „@all” u prozor za razmjenu poruka", + "- With the \"arrow-up\" key you can repost your last message" : "- Možete ponovno objaviti posljednju poruku s pomoću tipke sa strelicom prema gore", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sada ima naredbe, unesite „/help” u prozor za razmjenu poruka kako biste vidjeli naredbe koje je konfigurirao vaš administrator", + "- With projects you can create quick links between conversations, files and other items" : "- Koristite se projektima za stvaranje brzih poveznica između razgovora, datoteka i drugih stavki", + "- You can now mention guests in the chat" : "- Sada možete navesti goste u prozoru za razmjenu poruka", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Razgovori sada mogu imati predvorje. To omogućuje moderatorima da se priključe razmjeni poruka i pozivima kako bi pripremili sastanak dok korisnici i gosti čekaju", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sada možete izravno odgovarati na poruke kako biste drugim korisnicima pružili dodatni kontekst za svoje poruke", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Značajka traženja razgovora i sudionika sada će filtrirati vaše postojeće razgovore radi lakšeg traženja prethodnih razgovora", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Sada možete dodati prilagođene grupe korisnika u razgovore ako je instalirana aplikacija za upravljanje krugovima", + "- Check out the new grid and call view" : "- Isprobajte nove prikaze rešetke i poziva", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sada možete otpremati i povlačiti datoteke izravno sa svog uređaja u prozor za razmjenu poruka", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Dijeljene datoteke sada možete otvarati izravno u prikazu za razmjenu poruka s pomoću odgovarajućih preglednika", + "- You can now search for chats and messages in the unified search in the top bar" : "- sada možete pretraživati poruke putem objedinjenog pretraživača u gornjoj traci", + "- Spice up your messages with emojis from the emoji picker" : "- začinite svoje poruke emojijima iz alata za odabir emojija", + "- You can now change your camera and microphone while being in a call" : "- sada možete promijeniti kameru i mikrofon tijekom poziva", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Predstavite svoje razgovore unosom opisa i otvorite ih kako bi ih prijavljeni korisnici mogli pronaći i pridružiti se", + "- See a read status and send failed messages again" : "- Prikaži status čitanja i ponovno pošalji neuspješne poruke", + "- Raise your hand in a call with the R key" : "- Podignite ruku u pozivu pritiskom gumba R", + "- Join the same conversation and call from multiple devices" : "- Pridružite se istom razgovoru i zovite s više uređaja", + "- Send voice messages, share your location or contact details" : "- Šaljite glasovne poruke, dijelite svoju lokaciju ili podatke za kontakt", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodajte grupe u razgovor i novi će se članovi grupe automatski dodati kao sudionici", + "- A preview of your audio and video is shown before joining a call" : "- Prije pridruživanja pozivu prikazuje se pregled vašeg zvuka i videa", + "- You can now blur your background in the newly designed call view" : "- Sada možete zamutiti pozadinu u novo dizajniranom prikazu poziva", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatori sada mogu dodijeliti opća i pojedinačna dopuštenja sudionicima", + "- You can now react to chat messages" : "- Sada možete reagirati na poruke u chatu", + "- In the sidebar you can now find an overview of the latest shared items" : "- U bočnoj traci sada možete pronaći pregled najnovijih dijeljenih stavki", + "- Use a poll to collect the opinions of others or settle on a date" : "- Upotrijebite anketu za prikupljanje mišljenja drugih ili dogovor oko datuma", + "- Configure an expiration time for chat messages" : "- Postavite vrijeme isteka za poruke u chatu", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Pokrenite pozive bez obavještavanja drugih u velikim razgovorima. Pojedinačne obavijesti o pozivu možete poslati nakon što poziv započne.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Šaljite poruke u chatu bez obavještavanja primatelja ako nije hitno", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojiji se sada mogu automatski dovršavati upisivanjem \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Povežite razne stavke pomoću novog pametnog birača upisivanjem \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatori sada mogu stvarati sobe za odvajanje (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Pozivi se sada mogu snimati (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Conversations can now have an avatar or emoji as icon" : "- Razgovori sada mogu imati avatar ili emoji kao ikonu", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtualne pozadine sada su dostupne uz zamućenu pozadinu u videopozivima", + "- Reactions are now available during calls" : "- Reakcije su sada dostupne tijekom poziva", + "- Typing indicators show which users are currently typing a message" : "- Indikatori tipkanja prikazuju koji korisnici trenutačno pišu poruku", + "- Groups can now be mentioned in chats" : "- Grupe se sada mogu spominjati u chatovima", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Snimke poziva automatski se pretvaraju u tekst ako je registrirana aplikacija za pružatelja pretvatanja", + "- Chat messages can be translated if a translation provider app is registered" : "- Poruke u chatu mogu se prevoditi ako je registrirana aplikacija za pružatelja prijevoda", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** se sada može koristiti u porukama _chata_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhookovi su sada dostupni za implementaciju botova. Više informacija potražite u dokumentaciji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Postavite podsjetnik na poruku u chatu kako biste kasnije ponovno dobili obavijest", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Upotrijebite razgovor **Bilješka za sebe** za bilješke i dijeljenje informacija između svojih uređaja", + "- Captions allow to send a message with a file at the same time" : "- Natpisi omogućuju slanje poruke i datoteke istodobno", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video govornika sada je vidljiv tijekom dijeljenja zaslona, a reakcije u pozivu su animirane", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Poruke sada mogu uređivati prijavljeni autori i moderatori tijekom 6 sati", + "- Unsent message drafts are now saved in your browser" : "- Nacrti neposlanih poruka sada se spremaju u vašem pregledniku", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Tekstualni chat sada se može voditi udruženo s drugim Talk poslužiteljima", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatori sada mogu zabraniti račune i goste kako bi spriječili ponovno pridruživanje razgovoru", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadolazeći pozivi iz povezanih događaja u kalendaru i zamjene tijekom odsutnosti sada su prikazani u razgovorima", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Pozivi se sada mogu obavljati udruženo s drugim Talk poslužiteljima (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Predstavljamo Nextcloud Talk desktop klijent za Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Sažmite snimke poziva i nepročitane poruke u chatovima uz Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Poboljšani sastanci uz prepoznavanje gostiju pozvanih putem e‑pošte, uvoz popisa sudionika, skice za ankete i preuzimanje popisa sudionika poziva", + "- Archive conversations to stay focused" : "- Arhivirajte razgovore kako biste ostali fokusirani", + "- Schedule a meeting into your calendar from within a conversation" : "- Zakažite sastanak u svoj kalendar izravno iz razgovora", + "- Search for messages of the current conversation directly in the right sidebar" : "- Pretražujte poruke trenutnog razgovora izravno u desnoj bočnoj traci", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Na prvi pogled vidite više razgovora uz novi kompaktni popis (omogućite u postavkama Talka)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Razgovori o sastancima sada sinkroniziraju naslov i opis iz kalendara te su skriveni filtrom pretraživanja dok se ne približe početku", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označite razgovore kao osjetljive u postavkama obavijesti kako biste sakrili sadržaj poruka na popisu razgovora i u obavijestima", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Kako biste primali push obavijesti tijekom opcije „Ne ometaj”, označite razgovore kao važne", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Dodajte druge sudionike u poziv jedan‑na‑jedan i u hodu stvorite novi grupni poziv", + "- Use threads to keep your chat and discussions organized" : "- Koristite niti kako bi chat i rasprave bile organizirane", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Pretvaranje snimke u tekst uživo sada je dostupna tijekom poziva (zahtijeva ExApp za pretvanje uživo i visokoučinkoviti pozadinski sustav)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatori sada mogu prikvačiti poruke kako bi ostale na vrhu", + "- Schedule a message to send it at a later time" : "- Zakažite slanje poruke u kasnije vrijeme", + "_All %n participant_::_All %n participants_" : ["Svi sudionici (%n)","Svi sudionici (%n)","Svi sudionici (%n)"], + "Talk updates ✅" : "Ažuriranja aplikacije Talk ✅", + "Reaction deleted by author" : "Reakciju je obrisao autor", + "{actor} created the conversation" : "{actor} je stvorio razgovor", + "You created the conversation" : "Stvorili ste razgovor", + "System created the conversation" : "Sustav je stvorio razgovor", + "An administrator created the conversation" : "Administrator je stvorio razgovor", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} je preimenovao razgovor iz „%1$s” u „%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Preimenovali ste razgovor iz „%1$s” u „%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrator je preimenovao razgovor iz „%1$s” u „%2$s”", + "{actor} set the description" : "{actor} je postavio opis", + "You set the description" : "Vi ste postavili opis", + "An administrator set the description" : "Administrator je postavio opis", + "{actor} removed the description" : "{actor} je uklonio opis", + "You removed the description" : "Vi ste uklonili opis", + "An administrator removed the description" : "Administrator je uklonio opis", + "You started a silent call" : "Pokrenuli ste tihi poziv", + "Outgoing silent call" : "Odlazni tihi poziv", + "{actor} started a silent call" : "{actor} je pokrenuo tihi poziv", + "Incoming silent call" : "Dolazni tihi poziv", + "You started a call" : "Pokrenuli ste poziv", + "Outgoing call" : "Odlazni poziv", + "{actor} started a call" : "{actor} je pokrenuo poziv", + "Incoming call" : "Dolazni poziv", + "{actor} joined the call" : "{actor} se pridružio pozivu", + "You joined the call" : "Pridružili ste se pozivu", + "{actor} left the call" : "{actor} je napustio poziv", + "You left the call" : "Napustili ste poziv", + "{actor} unlocked the conversation" : "{actor} je otključao razgovor", + "You unlocked the conversation" : "Otključali ste razgovor", + "An administrator unlocked the conversation" : "Administrator je otključao razgovor", + "{actor} locked the conversation" : "{actor} je zaključao razgovor", + "You locked the conversation" : "Zaključali ste razgovor", + "An administrator locked the conversation" : "Administrator je zaključao razgovor", + "{actor} limited the conversation to the current participants" : "{actor} je ograničio razgovor na trenutne sudionike", + "You limited the conversation to the current participants" : "Ograničili ste razgovor na trenutne sudionike", + "An administrator limited the conversation to the current participants" : "Administrator je ograničio razgovor na trenutne sudionike", + "{actor} opened the conversation to registered users" : "{actor} je otvorio razgovor registriranim korisnicima", + "You opened the conversation to registered users" : "Otvorili ste razgovor registriranim korisnicima", + "An administrator opened the conversation to registered users" : "Administrator je otvorio razgovor registriranim korisnicima", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} je otvorio razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "You opened the conversation to registered users and users created with the Guests app" : "Otvorili ste razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrator je otvorio razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "The conversation is now open to everyone" : "Razgovor je sada otvoren svima", + "{actor} opened the conversation to everyone" : "{actor} je otvorio razgovor svima", + "You opened the conversation to everyone" : "Vi ste otvorili razgovor svima", + "{actor} restricted the conversation to moderators" : "{actor} je ograničio razgovor samo na moderatore", + "You restricted the conversation to moderators" : "Vi ste ograničili razgovor samo na moderatore", + "{actor} started breakout rooms" : "{actor} je pokrenuo sobe za odvajanje", + "You started breakout rooms" : "Pokrenuli ste sobe za odvajanje", + "{actor} stopped breakout rooms" : "{actor} je zaustavio sobe za odvajanje", + "You stopped breakout rooms" : "Zaustavili ste sobe za odvajanje", + "{actor} allowed guests" : "{actor} je dopustio pristup gostima", + "You allowed guests" : "Dopustili ste pristup gostima", + "An administrator allowed guests" : "Administrator je dopustio pristup gostima", + "{actor} disallowed guests" : "{actor} je zabranio pristup gostima", + "You disallowed guests" : "Zabranili ste pristup gostima", + "An administrator disallowed guests" : "Administrator je zabranio pristup gostima", + "{actor} set a password" : "{actor} je postavio zaporku", + "You set a password" : "Postavili ste zaporku", + "An administrator set a password" : "Administrator je postavio zaporku", + "{actor} removed the password" : "{actor} je uklonio zaporku", + "You removed the password" : "Uklonili ste zaporku", + "An administrator removed the password" : "Administrator je uklonio zaporku", + "{actor} added {user}" : "{actor} je dodao {user}", + "You joined the conversation" : "Pridružili ste se razgovoru", + "{actor} joined the conversation" : "{actor} se pridružio razgovoru", + "You added {user}" : "Dodali ste {user}", + "{actor} added you" : "Dodao vas je {actor}", + "An administrator added you" : "Administrator vas je dodao", + "An administrator added {user}" : "Administrator je dodao {user}", + "You left the conversation" : "Napustili ste razgovor", + "{actor} left the conversation" : "{actor} je napustio razgovor", + "{actor} removed {user}" : "{actor} je uklonio {user}", + "You removed {user}" : "Uklonili ste {user}", + "{actor} removed you" : "{actor} vas je uklonio", + "An administrator removed you" : "Administrator vas je uklonio", + "An administrator removed {user}" : "Administrator je uklonio {user}", + "{actor} invited {federated_user}" : "{actor} je pozvao {federated_user}", + "You invited {federated_user}" : "Pozvali ste {federated_user}", + "You accepted the invitation" : "Prihvatili ste poziv", + "{actor} invited you" : "{actor} vas je pozvao", + "An administrator invited you" : "Administrator vas je pozvao", + "An administrator invited {federated_user}" : "Administrator je pozvao {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} je prihvatio poziv", + "{actor} removed {federated_user}" : "{actor} je uklonio {federated_user}", + "You removed {federated_user}" : "Uklonili ste {federated_user}", + "You declined the invitation" : "Odbili ste poziv", + "An administrator removed {federated_user}" : "Administrator je uklonio {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} je odbio poziv", + "{actor} added group {group}" : "{actor} je dodao grupu {group}", + "You added group {group}" : "Dodali ste grupu {group}", + "An administrator added group {group}" : "Administrator je dodao grupu {group}", + "{actor} removed group {group}" : "{actor} je uklonio grupu {group}", + "You removed group {group}" : "Uklonili ste grupu {group}", + "An administrator removed group {group}" : "Administrator je uklonio grupu {group}", + "{actor} added team {circle}" : "{actor} je dodao tim {circle}", + "You added team {circle}" : "Dodali ste tim {circle}", + "An administrator added team {circle}" : "Administrator je dodao tim {circle}", + "{actor} removed team {circle}" : "{actor} je uklonio tim {circle}", + "You removed team {circle}" : "Uklonili ste tim {circle}", + "An administrator removed team {circle}" : "Administrator je uklonio tim {circle}", + "{actor} added {phone}" : "{actor} je dodao {phone}", + "You added {phone}" : "Dodali ste {phone}", + "An administrator added {phone}" : "Administrator je dodao {phone}", + "{actor} removed {phone}" : "{actor} je uklonio {phone}", + "You removed {phone}" : "Uklonili ste {phone}", + "An administrator removed {phone}" : "Administrator je uklonio {phone}", + "{actor} promoted {user} to moderator" : "{actor} je unaprijedio {user} u moderatora", + "You promoted {user} to moderator" : "Unaprijedili ste {user} u moderatora", + "{actor} promoted you to moderator" : "{actor} vas je unaprijedio u moderatora", + "An administrator promoted you to moderator" : "Administrator vas je unaprijedio u moderatora", + "An administrator promoted {user} to moderator" : "Administrator je unaprijedio {user} u moderatora", + "{actor} demoted {user} from moderator" : "{actor} je oduzeo status moderatora {korisnik}", + "You demoted {user} from moderator" : "Oduzeli ste status moderatora {user}", + "{actor} demoted you from moderator" : "{actor} vam je oduzeo status moderatora", + "An administrator demoted you from moderator" : "Administrator vam je oduzeo status moderatora", + "An administrator demoted {user} from moderator" : "Administrator je oduzeo {user} status moderatora", + "{actor} shared a file which is no longer available" : "{actor} dijeli datoteku koja više nije dostupna", + "You shared a file which is no longer available" : "Dijelite datoteku koja više nije dostupna", + "File shares are currently not supported in federated conversations" : "Dijeljenja datoteka trenutačno nisu podržana u udruženim razgovorima", + "The shared location is malformed" : "Dijeljena lokacija je pogrešno oblikovana", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} je postavio Matterbridge kako bi sinkronizirao ovaj razgovor s drugim razmjenama poruka", + "You set up Matterbridge to synchronize this conversation with other chats" : "Postavili ste Matterbridge kako biste sinkronizirali ovaj razgovor s drugim razmjenama poruka", + "{actor} created thread {title}" : "{actor} je stvorio nit {title}", + "You created thread {title}" : "Stvorili ste nit {title}", + "{actor} renamed thread {title}" : "{actor} je preimenovao nit {title}", + "You renamed thread {title}" : "Preimenovali ste nit {title}", + "{actor} updated the Matterbridge configuration" : "{actor} je ažurirao konfiguraciju Matterbridgea", + "You updated the Matterbridge configuration" : "Ažurirali ste konfiguraciju Matterbridgea", + "{actor} removed the Matterbridge configuration" : "{actor} je uklonio konfiguraciju Matterbridgea", + "You removed the Matterbridge configuration" : "Uklonili ste konfiguraciju Matterbridgea", + "{actor} started Matterbridge" : "{actor} je pokrenuo Matterbridge", + "You started Matterbridge" : "Vi ste pokrenuli Matterbridge", + "{actor} stopped Matterbridge" : "{actor} je zaustavio Matterbridge", + "You stopped Matterbridge" : "Vi ste zaustavili Matterbridge", + "{actor} deleted a message" : "{actor} je izbrisao poruku", + "You deleted a message" : "Izbrisali ste poruku", + "{actor} edited a message" : "{actor} je uredio poruku", + "You edited a message" : "Uredili ste poruku", + "{actor} pinned a message" : "{actor} je prikvačio poruku", + "You pinned a message" : "Prikvačili ste poruku", + "{actor} unpinned a message" : "{actor} je otkvačio poruku", + "Message was automatically unpinned" : "Poruka je automatski otkvačena", + "You unpinned a message" : "Otkačili ste poruku", + "{actor} deleted a reaction" : "{actor} je obrisao reakciju", + "You deleted a reaction" : "Obrisali ste reakciju", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Postavili ste istjecanje poruka na %n tjedan","Postavili ste istjecanje poruka na %n tjedna","Postavili ste istjecanje poruka na %n tjedana"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Postavili ste istjecanje poruka na %n dan","Postavili ste istjecanje poruka na %n dana","Postavili ste istjecanje poruka na %n dana"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Postavili ste istjecanje poruka na %n sat","Postavili ste istjecanje poruka na %n sata","Postavili ste istjecanje poruka na %n sati"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Postavili ste istjecanje poruka na %n minutu","Postavili ste istjecanje poruka na %n minute","Postavili ste istjecanje poruka na %n minuta"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} je postavio istjecanje poruka na %n tjedan","{actor} je postavio istjecanje poruka na %n tjedna","{actor} je postavio istjecanje poruka na %n tjedana"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} je postavio istjecanje poruka na %n dan","{actor} je postavio istjecanje poruka na %n dana","{actor} je postavio istjecanje poruka na %n dana"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} je postavio istjecanje poruka na %n sat","{actor} je postavio istjecanje poruka na %n sata","{actor} je postavio istjecanje poruka na %n sati"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} je postavio istjecanje poruka na %n minutu","{actor} je postavio istjecanje poruka na %n minute","{actor} je postavio istjecanje poruka na %n minuta"], + "{actor} disabled message expiration" : "{actor} je onemogućio istjecanje poruka", + "You disabled message expiration" : "Onemogućili ste istjecanje poruka", + "{actor} cleared the history of the conversation" : "{actor} je obrisao povijest razgovora", + "You cleared the history of the conversation" : "Obrisali ste povijest razgovora", + "{actor} set the conversation picture" : "{actor} je postavio sliku razgovora", + "You set the conversation picture" : "Postavili ste sliku razgovora", + "{actor} removed the conversation picture" : "{actor} je uklonio sliku razgovora", + "You removed the conversation picture" : "Uklonili ste sliku razgovora", + "{actor} ended the poll {poll}" : "{actor} je završio anketu {poll}", + "You ended the poll {poll}" : "Završili ste anketu {poll}", + "{actor} started the video recording" : "{actor} je pokrenuo snimanje videa", + "You started the video recording" : "Pokrenuli ste snimanje videa", + "{actor} stopped the video recording" : "{actor} je zaustavio snimanje videa", + "You stopped the video recording" : "Zaustavili ste snimanje videa", + "{actor} started the audio recording" : "{actor} je pokrenuo snimanje zvuka", + "You started the audio recording" : "Pokrenuli ste snimanje zvuka", + "{actor} stopped the audio recording" : "{actor} je zaustavio snimanje zvuka", + "You stopped the audio recording" : "Zaustavili ste snimanje zvuka", + "The recording failed" : "Snimanje nije uspjelo", + "Someone voted on the poll {poll}" : "Netko je glasao u anketi {poll}", + "Message deleted by author" : "Autor je izbrisao poruku", + "Message deleted by {actor}" : "Poruku je izbrisao {actor}", + "Message deleted by you" : "Poruku ste vi izbrisali", + "Deleted user" : "Izbrisan korisnik", + "Unknown number" : "Nepoznati broj", + "Administration" : "Administracija", + "System" : "Sustav", + "%s (guest)" : "%s (gost)", + "Missed call" : "Propušten poziv", + "Unanswered call" : "Neodgovoreni poziv", + "Call ended (Duration {duration})" : "Poziv je završen (trajanje {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} je završio poziv (trajanje {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Poziv s %n gostom je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})","Poziv s %n gosta je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})","Poziv s %n gostiju je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Poziv s %n gostom je završen (trajanje {duration})","Poziv s %n gosta je završen (trajanje {duration})","Poziv s %n gostiju je završen (trajanje {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} je završio poziv s %n gostom (Trajanje {duration})","{actor} je završio poziv s %n gosta (Trajanje {duration})","{actor} je završio poziv s %n gostiju (Trajanje {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1} ended (Duration {duration})" : "Poziv s {user1} je završen (trajanje {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} je završio poziv s {user1} (Trajanje {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1} i {user2} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Poziv s {user1} i {user2} je završen (trajanje {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} je završio poziv s {user1} i {user2} (Trajanje {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2} i {user3} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Poziv s {user1}, {user2} i {user3} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2} i {user3} (Trajanje {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2}, {user3} i {user4} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Poziv s {user1}, {user2}, {user3} i {user4} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2}, {user3} i {user4} (Trajanje {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2}, {user3}, {user4} i {user5} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Poziv s {user1}, {user2}, {user3}, {user4} i {user5} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2}, {user3}, {user4} i {user5} (Trajanje {duration})", + "Message of {user} in {conversation}" : "Poruka korisnika {user} u {conversation}", + "Message of {user}" : "Poruka korisnika {user}", + "Message of a deleted user in {conversation}" : "Poruka obrisanog korisnika u {conversation}", + "Talk conversations" : "Razgovori u alatu Talk", + "Talk to %s" : "Razgovarajte s %s", + "An error occurred. Please contact your administrator." : "Došlo je do pogreške. Obratite se administratoru.", + "Storage quota exceeded" : "Kvote je premašena", + "File not found" : "Datoteka nije pronađena", + "File is not shared, or shared but not with the user" : "Datoteka se ne dijeli ili se ne dijeli samo s korisnikom", + "No account available to delete." : "Nema računa za brisanje.", + "Poll" : "Anketa", + "Password needs to be set" : "Potrebno je postaviti lozinku", + "Uploading the file failed" : "Prijenos datoteke nije uspio", + "No image file provided" : "Nijedna slika nije dobavljena", + "File is too big" : "Datoteka je prevelika", + "Invalid file provided" : "Nevažeća datoteka", + "Invalid image" : "Slika neispravna", + "Unknown filetype" : "Vrsta datoteke nepoznata", + "Talk mentions" : "Spominjanja u alatu Talk", + "More conversations" : "Više razgovora", + "Say hi to your friends and colleagues!" : "Pozdravi svoje prijatelje i kolege!", + "No unread mentions" : "Nema nepročitanih spominjanja", + "Call in progress" : "Poziv u tijeku", + "You were mentioned" : "Spomenuti ste", + "Write to conversation" : "Napiši u razgovor", + "Writes event information into a conversation of your choice" : "Upisuje informacije o događaju u željeni razgovor", + "Missing email field in header line" : "Nedostaje polje e-pošte u retku zaglavlja", + "Following lines are invalid: %s" : "Sljedeći redci nisu valjani: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vas je pozvao u razgovor \"%2$s\".", + "You were invited to conversation \"%s\"." : "Pozvani ste u razgovor \"%s\".", + "Conversation invitation" : "Poziv u razgovor", + "Scheduled time" : "Zakazano vrijeme", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Također se možete povezati putem telefona sa sljedećim podacima", + "Dial-in information" : "Podaci za povezivanje putem telefona", + "Meeting ID" : "ID sastanka", + "Your PIN" : "Vaš PIN", + "Click the button below to join the lobby now." : "Kliknite gumb ispod da se sada pridružite predvorju.", + "Click the link below to join the lobby now." : "Kliknite poveznicu ispod da se sada pridružite predvorju.", + "Join lobby for \"%s\"" : "Pridružite se predvorju za \"%s\"", + "Click the button below to join the conversation now." : "Kliknite gumb ispod da se sada pridružite razgovoru.", + "Click the link below to join the conversation now." : "Kliknite poveznicu ispod da se sada pridružite razgovoru.", + "Join \"%s\"" : "Pridružite se \"%s\"", + "Meeting" : "Sastanak", + "Password request: %s" : "Zaporka: %s", + "Private conversation" : "Privatni razgovor", + "Deleted user (%s)" : "Izbrisan korisnik (%s)", + "Failed to upload call recording" : "Prijenos snimke poziva nije uspio", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Poslužitelj za snimanje nije uspio prenijeti snimku poziva {call}. Obratite se administratoru.", + "Share to chat" : "Podijeli u chat", + "Dismiss notification" : "Zanemari obavijest", + "Call recording now available" : "Snimka poziva je sada dostupna", + "The recording for the call in {call} was uploaded to {file}." : "Snimka poziva u {call} prenesena je u {file}.", + "Transcript now available" : "Pretvaranje snimke u tekst je sada dostupno", + "The transcript for the call in {call} was uploaded to {file}." : "Pretvarenje snimke poziva u tekst u {call} prenesen je u {file}.", + "Failed to transcript call recording" : "Pretvaranje snimke poziva u tekst nije uspjelo", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Poslužitelj nije uspio pretvoriti u tekst snimku na {file} za poziv u {call}. Obratite se administratoru.", + "Call summary now available" : "Sažetak poziva je sada dostupan", + "The summary for the call in {call} was uploaded to {file}." : "Sažetak poziva u {call} prenesen je u {file}.", + "Failed to summarize call recording" : "Sažimanje snimke poziva nije uspjelo", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Poslužitelj nije uspio sažeti snimku na {file} za poziv u {call}. Obratite se administratoru.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vas je pozvao da se pridružite {roomName} na {remoteServer}", + "Accept" : "Prihvati", + "Decline" : "Odbij", + "{user1} invited you to a federated conversation" : "{user1} vas je pozvao u udruženi razgovor", + "Someone reacted" : "Netko je reagirao", + "New message" : "Nova poruka", + "Reminder" : "Podsjetnik", + "Someone mentioned you" : "Netko vas je spomenuo", + "Notification" : "Obavijest", + "Someone reacted in a private conversation" : "Netko je reagirao u privatnom razgovoru", + "You received a message in a private conversation" : "Primili ste poruku u privatnom razgovoru", + "Reminder in a private conversation" : "Podsjetnik u privatnom razgovoru", + "Someone mentioned you in a private conversation" : "Netko vas je spomenuo u privatnom razgovoru", + "Notification in a private conversation" : "Obavijest u privatnom razgovoru", + "Reminder: You in {call}" : "Podsjetnik: Vi u {call}", + "Reminder: {user} in {call}" : "Podsjetnik: {user} u {call}", + "Reminder: Deleted user in {call}" : "Podsjetnik: Obrisani korisnik u {call}", + "Reminder: {guest} (guest) in {call}" : "Podsjetnik: {guest} (gost) u {call}", + "Reminder: Guest in {call}" : "Podsjetnik: Gost u {call}", + "{user} reacted with {reaction}" : "{user} je reagirao s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} je reagirao s {reaction} u {call}", + "Deleted user reacted with {reaction} in {call}" : "Obrisani korisnik je reagirao s {reaction} u {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gost) je reagirao s {reaction} u {call}", + "Guest reacted with {reaction} in {call}" : "Gost je reagirao s {reaction} u {call}", + "{user} in {call}" : "{user} u {call}", + "Deleted user in {call}" : "Izbrisan korisnik u {call}", + "{guest} (guest) in {call}" : "{guest} (gost) u {call}", + "Guest in {call}" : "Gost u {call}", + "{user} sent you a private message" : "{user} vam je poslao privatnu poruku", + "{user} sent a message in conversation {call}" : "{user} je poslao poruku u razgovoru {call}", + "A deleted user sent a message in conversation {call}" : "Izbrisani korisnik poslao je poruku u razgovoru {call}", + "{guest} (guest) sent a message in conversation {call}" : "(gost) {guest} je poslao poruku u razgovoru {call}", + "A guest sent a message in conversation {call}" : "Gost je poslao poruku u razgovoru {call}", + "{user} replied to your private message" : "{user} je odgovorio na vašu privatnu poruku", + "{user} replied to your message in conversation {call}" : "{user} je odgovorio na vašu poruku u razgovoru {call}", + "A deleted user replied to your message in conversation {call}" : "Izbrisani korisnik odgovorio je na vašu poruku u razgovoru {call}", + "{guest} (guest) replied to your message in conversation {call}" : "(gost) {guest} je odgovorio na vašu poruku u razgovoru {call}", + "A guest replied to your message in conversation {call}" : "Gost je odgovorio na vašu poruku u razgovoru {call}", + "Reminder: You in private conversation {call}" : "Podsjetnik: Vi u privatnom razgovoru {call}", + "Reminder: A deleted user in private conversation {call}" : "Podsjetnik: Obrisani korisnik u privatnom razgovoru {call}", + "Reminder: {user} in private conversation" : "Podsjetnik: {user} u privatnom razgovoru", + "Reminder: You in conversation {call}" : "Podsjetnik: Vi u razgovoru {call}", + "Reminder: {user} in conversation {call}" : "Podsjetnik: {user} u razgovoru {call}", + "Reminder: A deleted user in conversation {call}" : "Podsjetnik: Obrisani korisnik u razgovoru {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Podsjetnik: {guest} (gost) u razgovoru {call}", + "Reminder: A guest in conversation {call}" : "Podsjetnik: Gost u razgovoru {call}", + "{user} reacted with {reaction} to your private message" : "{user} je reagirao s {reaction} na vašu privatnu poruku", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Obrisani korisnik je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gost) je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gost je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "{user} mentioned you in a private conversation" : "{user} vas je spomenuo u privatnom razgovoru", + "{user} mentioned group {group} in conversation {call}" : "{user} je spomenuo grupu {group} u razgovoru {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} je spomenuo tim {team} u razgovoru {call}", + "{user} mentioned everyone in conversation {call}" : "{user} je spomenuo sve sudionike u razgovoru {call}", + "{user} mentioned you in conversation {call}" : "{user} vas je spomenuo u razgovoru {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Obrisani korisnik je spomenuo grupu {group} u razgovoru {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Obrisani korisnik je spomenuo tim {team} u razgovoru {call}", + "A deleted user mentioned everyone in conversation {call}" : "Obrisani korisnik je spomenuo sve sudionike u razgovoru {call}", + "A deleted user mentioned you in conversation {call}" : "Izbrisani korisnik spomenuo vas je u razgovoru {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gost) je spomenuo grupu {group} u razgovoru {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gost) je spomenuo tim {team} u razgovoru {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gost) je spomenuo sve sudionike u razgovoru {call}", + "{guest} (guest) mentioned you in conversation {call}" : "(gost) {guest} vas je spomenuo u razgovoru {call}", + "A guest mentioned group {group} in conversation {call}" : "Gost je spomenuo grupu {group} u razgovoru {call}", + "A guest mentioned team {team} in conversation {call}" : "Gost je spomenuo tim {team} u razgovoru {call}", + "A guest mentioned everyone in conversation {call}" : "Gost je spomenuo sve sudionike u razgovoru {call}", + "A guest mentioned you in conversation {call}" : "Gost vas je spomenuo u razgovoru {call}", + "View message" : "Prikaži poruku", + "Dismiss reminder" : "Odbaci podsjetnik", + "View chat" : "Prikaži razmjenu poruka", + "{user} invited you to a group conversation: {call}" : "{user} vas je pozvao u grupni razgovor: {call}", + "Join call" : "Pridruži se pozivu", + "Answer call" : "Odgovori na poziv", + "{user} would like to talk with you" : "{user} želi razgovarati s vama", + "Call back" : "Nazovi natrag", + "You missed a call from {user}" : "Propustili ste poziv od {user}", + "Accept call" : "Prihvati poziv", + "Incoming phone call from {call}" : "Dolazni telefonski poziv od {call}", + "You missed a phone call from {call}" : "Propustili ste telefonski poziv od {call}", + "A group call has started in {call}" : "Grupni poziv je pokrenut u {call}", + "You missed a group call in {call}" : "Propustili ste grupni poziv u {call}", + "{email} is requesting the password to access {file}" : "{email} traži zaporku za pristup {file}", + "{email} tried to request the password to access {file}" : "{email} je pokušao zatražiti zaporku za pristup {file}", + "Someone is requesting the password to access {file}" : "Netko traži zaporku za pristup {file}", + "Someone tried to request the password to access {file}" : "Netko je pokušao zatražiti zaporku za pristup {file}", + "Open settings" : "Otvori postavke", + "Hosted signaling server added" : "Dodan je signalni poslužitelj", + "The hosted signaling server is now configured and will be used." : "Signalni poslužitelj je konfiguriran i spreman za upotrebu.", + "Hosted signaling server removed" : "Uklonjen je signalni poslužitelj", + "The hosted signaling server was removed and will not be used anymore." : "Signalni poslužitelj je uklonjen i neće se upotrebljavati.", + "Hosted signaling server changed" : "Promijenjen je signalni poslužitelj", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Račun signalnog poslužitelja je promijenio status iz „{oldstatus}” u „{newstatus}”.", + "pending" : "na čekanju", + "active" : "aktivno", + "expired" : "isteklo", + "blocked" : "blokirano", + "error" : "pogreška", + "The certificate of {host} expires in {days} days" : "Certifikat za {host} istječe za {days} dana", + "The certificate of {host} expired" : "Certifikat za {host} je istekao", + "Contact via Talk" : "Kontaktirajte putem aplikacije Talk", + "Open Talk" : "Otvori Talk", + "Default" : "Zadano", + "Presentation" : "Prezentacija", + "Voice room" : "Glasovna soba", + "Webinar" : "Webinar", + "Conversations" : "Razgovori", + "Messages in current conversation" : "Poruke u trenutnom razgovoru", + "{user}" : "{user}", + "Messages" : "Poruke", + "{user} in {conversation}" : "{user} u {conversation}", + "Messages in other conversations" : "Poruke u ostalim razgovorima", + "One-to-one rooms always need to show the other users avatar" : "Sobe jedan-na-jedan uvijek moraju prikazivati avatar drugog korisnika", + "Invalid emoji character" : "Neispravan emoji znak", + "Invalid background color" : "Neispravna boja pozadine", + "Avatar image is not square" : "Slika avatara nije kvadratna", + "Room {number}" : "Soba {number}", + "Other" : "Drugo", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Zahtjev za probni rad nije upućen jer probni poslužitelj nije dostupan. Pokušajte ponovo kasnije.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Došlo je do poteškoća s autentifikacijom za ovu instancu. Možda joj nije moguće pristupiti izvana kako bi se provjerio njen URL.", + "Something unexpected happened." : "Nešto se neočekivano dogodilo.", + "The URL is invalid." : "URL je nevažeći.", + "An HTTPS URL is required." : "Potreban je HTTPS URL.", + "The email address is invalid." : "Nevažeća adresa e-pošte.", + "The language is invalid." : "Jezik nije valjan.", + "The country is invalid." : "Nevažeća država.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Došlo je do poteškoća s upućivanjem zahtjeva za probni rad. Provjerite zapisnike za više informacija.", + "Too many requests are send from your servers address. Please try again later." : "S adrese poslužitelja šalje se previše zahtjeva. Pokušajte ponovo kasnije.", + "There is already a trial registered for this Nextcloud instance." : "Za ovu instancu Nextclouda već postoji registriran probni račun.", + "Something unexpected happened. Please try again later." : "Došlo je do neočekivane situacije. Pokušajte ponovo kasnije.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Zahtjev za probni rad nije upućen jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "Trial requested but failed to get account information. Please check back later." : "Probni rad je zatražen, ali nisu dohvaćene informacije o računu. Pokušajte kasnije.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Došlo je do poteškoća s autentifikacijom za ovaj zahtjev. Možda joj nije moguće pristupiti izvana kako bi se provjerio njen URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Informacije o računu nisu dohvaćene jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Došlo je do poteškoća s dohvaćanjem informacija o računu. Provjerite zapisnike za više informacija.", + "There is no such account registered." : "Račun nije registriran.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Informacije o računu nisu dohvaćene jer je probni poslužitelj nedostupan. Pokušajte ponovo kasnije.", + "Deleting the hosted signaling server account failed. Please check back later." : "Brisanje računa pohranjenog signalnog poslužitelja nije uspjelo. Pokušajte kasnije.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Brisanje računa nije uspjelo jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "There is a problem with deleting the account. Please check your logs for further information." : "Došlo je do poteškoća pri brisanju računa. Provjerite zapisnike za više informacija.", + "Too many requests are sent from your servers address. Please try again later." : "S adrese poslužitelja šalje se previše zahtjeva. Pokušajte ponovo kasnije.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Brisanje računa nije uspjelo jer je probni poslužitelj nedostupan. Pokušajte ponovo kasnije.", + "Note to self" : "Bilješka za sebe", + "A place for your private notes, thoughts and ideas" : "Mjesto za vaše privatne bilješke, misli i ideje", + "Transcript is AI generated and may contain mistakes" : "Pretvatanje snimke u tekst je generirala umjetna inteligencija i može sadržavati pogreške", + "Summary is AI generated and may contain mistakes" : "Sažetak je generirala umjetna inteligencija i može sadržavati pogreške", + "Let's get started!" : "Krenimo!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je sigurna, samostalno hostana komunikacijska platforma koja se besprijekorno integrira s ekosustavom Nextcloud.\n\n#### Ključne značajke Nextcloud Talka:\n\n* Chat i razmjena poruka u privatnim i grupnim razgovorima\n* Glasovni i videopozivi\n* Dijeljenje datoteka i integracija s drugim Nextcloud aplikacijama\n* Prilagodljive postavke razgovora, moderiranje i kontrole privatnosti\n* Web, desktop i mobilno (iOS i Android)\n* Privatna i sigurna komunikacija\n\nSaznajte više u [korisničkoj dokumentaciji](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Dobro došli u Nextcloud Talk\n\nNextcloud Talk je privatna i moćna aplikacija za razmjenu poruka koja se integrira s Nextcloudom. Chatajte u privatnim ili grupnim razgovorima, surađujte putem glasovnih i videopoziva, organizirajte webinare i događaje, prilagodite svoje razgovore i još mnogo toga.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatirajte tekst za bogate poruke\n\nU Nextcloud Talku možete koristiti Markdown sintaksu za formatiranje poruka. Primjerice, primijenite **podebljano** ili *kurziv* formatiranje ili `istaknite tekst kao kod`. Možete čak izrađivati tablice i dodavati naslove u tekst.\n\nTreba ispraviti tipfeler ili promijeniti formatiranje? Uredite poruku klikom na \"Uredi poruku\" u izborniku poruke.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dodajte privitke i poveznice\n\nPriložite datoteke iz svojeg Nextcloud Huba pomoću gumba \"+\". Dijelite stavke iz Datoteka i raznih Nextcloud aplikacija. Neke aplikacije podržavaju i interaktivne widgete, primjerice aplikacija Tekst.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Neka razgovori teku: spominjite korisnike, reagirajte na poruke i još mnogo toga\n\nMožete spomenuti sve u razgovoru koristeći %s ili spomenuti određene sudionike tako da upišete \"@\" i odaberete njihovo ime s popisa.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Možete odgovoriti na poruke, proslijediti ih u druge chatove i osobama ili kopirati sadržaj poruke.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Učinite više uz Pametni birač\n\nJednostavno upišite \"/\" ili otvorite izbornik \"+\" da biste otvorili Pametni birač, gdje možete priložiti razni sadržaj u poruke. Pametni birač možete podesiti tako da dodaje stavke iz Nextcloud aplikacija, GIF-ove, lokacije na karti, sadržaj koji generira AI i još mnogo toga.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Upravljajte postavkama razgovora\n\nU izborniku razgovora možete pristupiti raznim postavkama za upravljanje razgovorima, kao što su:\n* Uređivanje informacija o razgovoru\n* Upravljanje obavijestima\n* Primjena brojnih pravila moderiranja\n* Postavljanje pristupa i sigurnosti\n* Omogućavanje botova\n* i još mnogo toga!", + "Andorra" : "Andora", + "United Arab Emirates" : "Ujedinjeni Arapski Emirati", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigva i Barbuda", + "Anguilla" : "Angvila", + "Albania" : "Albanija", + "Armenia" : "Armenija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Američka Samoa", + "Austria" : "Austrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandski otoci", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna i Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeš", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bugarska", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sveti Bartolomej", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunej Darussalam", + "Bolivia, Plurinational State of" : "Bolivija, Višenacionalna Država", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sveti Eustahije i Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahami", + "Bhutan" : "Butan", + "Bouvet Island" : "Otok Bouvet", + "Botswana" : "Bocvana", + "Belarus" : "Bjelorusija", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosov (Keeling) otok", + "Congo, the Democratic Republic of the" : "Kongo, Demokratska Republika", + "Central African Republic" : "Srednjoafrička Republika", + "Congo" : "Kongo", + "Switzerland" : "Švicarska", + "Côte d'Ivoire" : "Obala Bjelokosti", + "Cook Islands" : "Cookovo Otočje", + "Chile" : "Čile", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Zelenortska Republika", + "Curaçao" : "Curaçao", + "Christmas Island" : "Božićni Otok", + "Cyprus" : "Cipar", + "Czechia" : "Češka", + "Germany" : "Njemačka", + "Djibouti" : "Džibuti", + "Denmark" : "Danska", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikanska Republika", + "Algeria" : "Alžir", + "Ecuador" : "Ekvador", + "Estonia" : "Estonija", + "Egypt" : "Egipat", + "Western Sahara" : "Zapadna Sahara", + "Eritrea" : "Eritreja", + "Spain" : "Španjolska", + "Ethiopia" : "Etiopija", + "Finland" : "Finska", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandski otoci (Malvinas)", + "Micronesia, Federated States of" : "Mikronezija, Federativne Države", + "Faroe Islands" : "Farski otoci", + "France" : "Francuska", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Ujedinjeno Kraljevstvo Velike Britanije i Sjeverne Irske", + "Grenada" : "Grenada", + "Georgia" : "Gruzija", + "French Guiana" : "Francuska Gvajana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenland", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Gvadalupa", + "Equatorial Guinea" : "Ekvatorijalna Gvineja", + "Greece" : "Grčka", + "South Georgia and the South Sandwich Islands" : "Južna Georgija i otočje Južni Sandwich", + "Guatemala" : "Gvatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gvineja Bisau", + "Guyana" : "Gvajana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Otok Heard i otočje McDonald", + "Honduras" : "Honduras", + "Croatia" : "Hrvatska", + "Haiti" : "Haiti", + "Hungary" : "Mađarska", + "Indonesia" : "Indonezija", + "Ireland" : "Irska", + "Israel" : "Izrael", + "Isle of Man" : "Otok Man", + "India" : "Indija", + "British Indian Ocean Territory" : "Britanski Indijskooceanski teritorij", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska Republika", + "Iceland" : "Island", + "Italy" : "Italija", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komori", + "Saint Kitts and Nevis" : "Sveti Kristofor i Nevis", + "Korea, Democratic People's Republic of" : "Koreja, Demokratska Narodna Republika", + "Korea, Republic of" : "Koreja, Republika", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanski Otoci", + "Kazakhstan" : "Kazahstan", + "Lao People's Democratic Republic" : "Laoska Narodna Demokratska Republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sveta Lucija", + "Liechtenstein" : "Lihtenštajn", + "Sri Lanka" : "Šri Lanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesoto", + "Lithuania" : "Litva", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavija, Republika", + "Montenegro" : "Crna Gora", + "Saint Martin (French part)" : "Sveti Martin (francuski dio)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovi Otoci", + "North Macedonia" : "Sjeverna Makedonija", + "Mali" : "Mali", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Sjevernomarijanski otoci", + "Martinique" : "Martinik", + "Mauritania" : "Mauritanija", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricijus", + "Maldives" : "Maldivi", + "Malawi" : "Malavi", + "Mexico" : "Meksiko", + "Malaysia" : "Malezija", + "Mozambique" : "Mozambik", + "Namibia" : "Namibija", + "New Caledonia" : "Nova Kaledonija", + "Niger" : "Niger", + "Norfolk Island" : "Otok Norfolk", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nizozemska", + "Norway" : "Norveška", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Novi Zeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francuska Polinezija", + "Papua New Guinea" : "Papua Nova Gvineja", + "Philippines" : "Filipini", + "Pakistan" : "Pakistan", + "Poland" : "Poljska", + "Saint Pierre and Miquelon" : "Sveti Petar i Mikelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina, Država", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paragvaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunjska", + "Serbia" : "Srbija", + "Russian Federation" : "Ruska Federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudijska Arabija", + "Solomon Islands" : "Salomonski Otoci", + "Seychelles" : "Sejšeli", + "Sudan" : "Sudan", + "Sweden" : "Švedska", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Sveta Helena, Ascension i Tristan da Cunha", + "Slovenia" : "Slovenija", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Slovačka", + "Sierra Leone" : "Sijera Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalija", + "Suriname" : "Surinam", + "South Sudan" : "Južni Sudan", + "Sao Tome and Principe" : "Sveti Toma i Princip", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (nizozemski dio)", + "Syrian Arab Republic" : "Sirijska Arapska Republika", + "Eswatini" : "Esvatini", + "Turks and Caicos Islands" : "Otoci Turks i Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francuski južni teritoriji", + "Togo" : "Togo", + "Thailand" : "Tajland", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Istočni Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Turska", + "Trinidad and Tobago" : "Trinidad i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan, Provincija NR Kine", + "Tanzania, United Republic of" : "Ujedinjena Republika Tanzanija", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Mali udaljeni otoci SAD-a", + "United States of America" : "Sjedinjene Američke Države", + "Uruguay" : "Urugvaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Sveta Stolica", + "Saint Vincent and the Grenadines" : "Sveti Vincent i Grenadini", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarijska Republika", + "Virgin Islands, British" : "Djevičanski otoci, britanski", + "Virgin Islands, U.S." : "Djevičanski otoci, SAD", + "Viet Nam" : "Vijetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Južna Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Background blur" : "Zamućenje pozadine", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nije moguće provjeriti podršku za učitavanje WASM-a. Ručno provjerite poslužuje li vaš web-poslužitelj datoteke `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Vaš web-poslužitelj nije ispravno podešen za isporuku datoteka `.wasm`. To je obično problem u konfiguraciji Nginxa. Za zamućenje pozadine potrebno je prilagoditi konfiguraciju tako da također poslužuje datoteke `.wasm`. Usporedite svoju Nginx konfiguraciju s preporučenom konfiguracijom u našoj dokumentaciji.", + "Talk configuration values" : "Vrijednosti konfiguracije Talka", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Prisiljavanje trajanja poziva podržano je samo uz sistemski cron. Omogućite sistemski cron ili uklonite konfiguraciju `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Male vrijednosti `max_call_duration` (trenutačno postavljeno na %d) nije moguće provesti zbog tehničkih ograničenja. Pozadinski posao izvršava se samo svakih 5 minuta, pa koristite na vlastitu odgovornost.", + "Federation" : "Udruženje", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Preporučuje se konfigurirati \"memcache.locking\" kada je omogućena Talk udruženje.", + "High-performance backend" : "Visokoučinkovit pozadinski sustav", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nije konfiguriran visokoučinkoviti pozadinski sustav – pokretanje Nextcloud Talka bez visokoučinkovitog pozadinskog sustava skalira samo za vrlo male pozive (najviše 2–3 sudionika). Postavite visokoučinkoviti pozadinski sustav kako bi pozivi s više sudionika radili besprijekorno.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Pokretanje visokoučinkovitog pozadinskog sustava u načinu \"conversation_cluster\" je zastarjelo i više neće biti podržano u nadolazećoj verziji. Visokoučinkoviti pozadinski sustav danas podržava pravo klasteriranje i to bi se trebalo koristiti umjesto toga.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definiranje više visokoučinkovitih pozadinskih sustava je zastarjelo i više neće biti podržano u nadolazećoj verziji. Umjesto toga treba postaviti uravnoteživač opterećenja zajedno s klasteriranim signalnim poslužiteljima i konfigurirati ga u postavkama Talka.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Spremljeni javni ključ za korišteni algoritam %1$s ne odgovara spremljenom privatnom ključu. Pokrenite %2$s da biste ispravili problem.", + "High-performance backend not configured correctly. Run %s for details." : "Visokoučinkoviti pozadinski sustav nije ispravno konfiguriran. Pokrenite %s za detalje.", + "High-performance backend not configured correctly" : "Visokoučinkoviti pozadinski sustav nije ispravno konfiguriran", + "Error: Cannot connect to server" : "Pogreška: povezivanje s poslužiteljem nije uspjelo", + "Error: Server did not respond with proper JSON" : "Pogreška: poslužitelj nije vratio točan JSON", + "Error: Certificate expired" : "Pogreška: Certifikat je istekao", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Pogreška: Sustavna vremena Nextcloud poslužitelja i poslužitelja visokoučinkovitog pozadinskog sustava nisu usklađena. Provjerite jesu li oba poslužitelja povezana s poslužiteljem vremena ili ručno sinkronizirajte vrijeme.", + "Could not get version" : "Nije moguće dohvatiti verziju", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Pogreška: Pokrenuta verzija: {version}; poslužitelj se mora ažurirati kako bi bio kompatibilan s ovom verzijom Talka", + "Error: Server responded with: {error}" : "Pogreška: poslužitelj je vratio: {error}", + "Error: Unknown error occurred" : "Pogreška: došlo je do nepoznate pogreške", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Upozorenje: Pokrenuta verzija: {version}; poslužitelj ne podržava sve značajke ove verzije Talka, nedostaju značajke: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Preporučuje se konfigurirati memorijsku predmemoriju pri pokretanju Nextcloud Talka s visokoučinkovitim pozadinskim sustavom.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push je instaliran, što poboljšava pravovremenost Talk obavijesti.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nije instaliran. To može dovesti do odgođenih Talk obavijesti.", + "Recording backend" : "Pozadinski sustav za snimanje", + "Using the recording backend requires a High-performance backend." : "Korištenje pozadinskog sustava za snimanje zahtijeva visokoučinkoviti pozadinski sustav.", + "No recording backend configured" : "Nije konfiguriran pozadinski sustav za snimanje", + "SIP configuration" : "Konfiguracija SIP-a", + "Using the SIP functionality requires a High-performance backend." : "Korištenje SIP funkcionalnosti zahtijeva visokoučinkoviti pozadinski sustav.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Dodijeljeni telefonski brojevi za Talk ne smiju započinjati s + ili 0. Uklonite ili ažurirajte sljedeće brojeve:\n{list}", + "No SIP backend configured" : "Nije konfiguriran SIP pozadinski sustav", + "Invalid date, date format must be YYYY-MM-DD" : "Nevažeći datum, oblik datuma mora biti GGGG-MM-DD", + "Conversation not found" : "Razgovor nije pronađen", + "Path is already shared with this conversation" : "Putanja je već dijeljena s ovim razgovorom", + "Chat, video & audio-conferencing using WebRTC" : "Razmjena poruka, videopozivi i glasovne konferencije putem WebRTC-a", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video i audiokonferencije putem WebRTC-a\n\n* 💬 **Chat** Nextcloud Talk dolazi s jednostavnim tekstualnim chatom koji vam omogućuje dijeljenje ili prijenos datoteka iz aplikacije Nextcloud Datoteke ili s lokalnog uređaja te spominjanje drugih sudionika.\n* 👥 **Privatni, grupni, javni i lozinkom zaštićeni pozivi!** Pozovite nekoga, cijelu grupu ili pošaljite javnu poveznicu za poziv.\n* 🌐 **Udruženi chatovi** Chatajte s drugim Nextcloud korisnicima na njihovim poslužiteljima\n* 💻 **Dijeljenje zaslona!** Podijelite svoj zaslon sa sudionicima poziva.\n* 🚀 **Integracija s drugim Nextcloud aplikacijama** kao što su Datoteke, Kalendar, Status korisnika, Nadzorna ploča, Flow, Karte, Pametni birač, Kontakti, Deck i mnoge druge.\n* 🌉 **Sinkronizacija s drugim chat rješenjima** Budući da je [Matterbridge](https://github.com/42wim/matterbridge/) integriran u Talk, možete jednostavno sinkronizirati mnoga druga chat rješenja s Nextcloud Talkom i obrnuto.", + "Leave call" : "Napusti poziv", + "Navigating away from the page will leave the call in {conversation}" : "Zatvaranjem stranice napustit ćete poziv u {conversation}", + "Stay in call" : "Ostani u pozivu", + "Error occurred when getting the conversation information" : "Došlo je do pogreške pri dohvaćanju informacija o razgovoru", + "Discuss this file" : "Raspravi o ovoj datoteci", + "Share this file with others to discuss it" : "Podijeli ovu datoteku s drugima radi rasprave", + "Share this file" : "Dijeli ovu datoteku", + "Join conversation" : "Pridruži se razgovoru", + "This conversation is password-protected." : "Ovaj razgovor je zaštićen lozinkom.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Otkrili smo više neispravnih pokušaja unosa lozinke s vaše IP adrese. Stoga je vaš sljedeći pokušaj ograničen do 30 sekundi.", + "The password is wrong. Try again." : "Pogrešna zaporka. Pokušajte ponovno.", + "Password" : "Zaporka", + "Submit" : "Šalji", + "Error requesting the password." : "Pogreška pri traženju zaporke.", + "Request password" : "Zatraži zaporku", + "This conversation has ended" : "Ovaj je razgovor završio", + "Error occurred when joining the conversation" : "Došlo je do pogreške pri pridruživanju razgovoru", + "Close Talk sidebar" : "Zatvori Talk bočnu traku", + "Open Talk sidebar" : "Otvori Talk bočnu traku", + "Everyone" : "Svi", + "Users and moderators" : "Korisnici i moderatori", + "Moderators only" : "Samo moderatori", + "Disable calls" : "Onemogući pozive", + "Save changes" : "Spremi promjene", + "Saving …" : "Spremanje...", + "Saved!" : "Spremljeno!", + "Limit to groups" : "Ograniči na grupe", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Kada je odabrana barem jedna grupa, samo članovi navedenih grupa mogu sudjelovati u razgovorima.", + "Guests can still join public conversations." : "Gosti se i dalje mogu pridružiti javnim razgovorima.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Korisnici koji više ne mogu upotrebljavati aplikaciju Talk i dalje će biti navedeni kao sudionici u svojim završenim razgovorima i čuvat će se njihove razmijenjene poruke.", + "Limit using Talk" : "Ograniči korištenje aplikacije Talk", + "Limit creating a public and group conversation" : "Ograniči stvaranje javnih i grupnih razgovora", + "Limit creating conversations" : "Ograniči stvaranje razgovora", + "Limit starting a call" : "Ograniči upućivanje poziva", + "Limit starting calls" : "Ograniči upućivanje poziva", + "When a call has started, everyone with access to the conversation can join the call." : "Nakon uspostavljanja, pozivu se može pridružiti svatko kome je odobren pristup razgovoru.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Sljedeći botovi instalirani su na ovom poslužitelju. U dokumentaciji možete pronaći detalje kako {linkstart1}izraditi vlastitog bota{linkend} ili {linkstart2}popis botova{linkend} koje možete omogućiti na poslužitelju.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na ovom poslužitelju nisu instalirani botovi. U dokumentaciji možete pronaći detalje kako {linkstart1}izraditi vlastitog bota{linkend} ili {linkstart2}popis botova{linkend} koje možete omogućiti na poslužitelju.", + "Description is not provided" : "Opis nije naveden", + "Locked for moderators" : "Zaključano za moderatore", + "Enabled" : "Omogućeno", + "Disabled" : "Onemogućeno", + "Bots settings" : "Postavke botova", + "State" : "Stanje", + "Name" : "Naziv", + "Last error" : "Zadnja pogreška", + "Total errors count" : "Ukupan broj pogrešaka", + "Find more bots" : "Pronađi više botova", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Pouzdani poslužitelji mogu se konfigurirati na {linkstart}stranici postavki dijeljenja{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Udruženi chatovi i pozivi već rade. Rukovanje privicima dolazi u budućoj verziji.", + "Enable Federation in Talk app" : "Omogući udruživanje u aplikaciji Talk", + "Permissions" : "Dopuštenja", + "Allow users to be invited to federated conversations" : "Dopusti pozivanje korisnika u udružene razgovore", + "Allow users to invite federated users into conversation" : "Dopusti korisnicima pozivanje udruženih korisnika u razgovor", + "Only allow to federate with trusted servers" : "Dopusti udruženje samo s pouzdanim poslužiteljima", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Kada je odabrana barem jedna grupa, samo osobe iz navedenih grupa mogu pozivati udružene korisnike u razgovore.", + "Groups allowed to invite federated users" : "Grupe koje smiju pozivati udružene korisnike", + "Select groups …" : "Odaberite grupe …", + "All messages" : "Sve poruke", + "@-mentions only" : "Samo @-spominjanja", + "Off" : "Isključeno", + "General settings" : "Opće postavke", + "Default notification settings" : "Zadane postavke obavijesti", + "Default group notification" : "Zadane obavijesti grupe", + "Default group notification for new groups" : "Zadane obavijesti grupe za nove grupe", + "Integration into other apps" : "Integracija s drugim aplikacijama", + "Allow conversations on files" : "Dopusti razgovore na datotekama", + "Allow conversations on public shares for files" : "Dopusti razgovore na javnim dijeljenjima za datoteke", + "End-to-end encrypted calls" : "Pozivi s end-to-end enkripcijom", + "Enable encryption" : "Omogući šifriranje", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Pozivi s end-to-end enkripcijom uz konfiguriran SIP most zahtijevaju noviju verziju visokoučinkovitog pozadinskog sustava i SIP mosta.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilni klijenti trenutačno ne podržavaju pozive s end-to-end enkripcijom.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Informacije iz obrasca poslat će se tvrtki Struktur AG ako kliknete na gumb iznad. Više informacija možete pronaći na {linkstart}spreed.eu{linkend}.", + "Pending" : "Na čekanju", + "Error" : "Pogreška", + "Blocked" : "Blokiran", + "Active" : "Aktivan", + "Expired" : "Istekao", + "Never" : "Nikad", + "The trial could not be requested. Please try again later." : "Nije moguće zatražiti probni rad. Pokušajte ponovo kasnije.", + "The account could not be deleted. Please try again later." : "Nije moguće izbrisati račun. Pokušajte ponovo kasnije.", + "Hosted High-performance backend" : "Visokoučinkoviti pozadinski sustav na poslužitelju", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Naš partner Struktur AG pruža uslugu putem koje možete zatražiti signalni poslužitelj. Trebate ispuniti obrazac u nastavku i vaš će Nextcloud zatražiti signalni poslužitelj. Vjerodajnice se automatski popunjavaju nakon postavljanja poslužitelja. Time ćete prebrisati postavke postojećeg signalnog poslužitelja.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ako vaš račun visokoučinkovitog pozadinskog sustava uključuje STUN i/ili TURN funkcionalnost, postavke će se ažurirati u skladu s tim.", + "URL of this Nextcloud instance" : "URL ove instance Nextclouda", + "Full name of the user requesting the trial" : "Puno ime korisnika koji je zatražio probu", + "Email of the user" : "Adresa e-pošte korisnika", + "Language" : "Jezik", + "Country" : "Država", + "Request signaling server trial" : "Zatraži probu signalnog poslužitelja", + "You can see the current status of your hosted signaling server in the following table." : "Trenutni status signalnog poslužitelja možete pronaći u sljedećoj tablici.", + "Status" : "Status", + "Created at" : "Stvoreno", + "Expires at" : "Istječe u", + "Limits" : "Ograničenja", + "STUN included" : "STUN uključen", + "Yes" : "Da", + "No" : "Ne", + "TURN included" : "TURN uključen", + "Delete the signaling server account" : "Brisanje računa signalnog poslužitelja", + "_%n user_::_%n users_" : ["%n korisnik","%n korisnika","%n korisnika"], + "Installed version: {version}" : "Instalirana inačica: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Možete instalirati Matterbridge kako biste povezali Nextcloud Talk s nekim drugim uslugama. Posjetite njihovu {linkstart1}GitHub stranicu{linkend} za više detalja. Preuzimanje i instalacija aplikacije može potrajati. Ako dođe do isteka vremena, instalirajte je ručno iz {linkstart2}Nextcloud App Storea{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binarna datoteka ima neispravna dopuštenja. Provjerite je li binarna datoteka Matterbridge u vlasništvu ispravnog korisnika i može li se izvršavati. Nalazi se u \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Binarna datoteka Matterbridge nije pronađena ili se ne može izvršiti.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Put do binarnog programa Matterbridge također možete ručno postaviti u samoj konfiguraciji. Dodatne informacije potražite u {linkstart}dokumentaciji za integraciju Matterbridgea{linkend}.", + "Downloading …" : "Preuzimanje…", + "Install Talk Matterbridge" : "Instalirajte Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Došlo je do pogreške pri instalaciji aplikacije Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Došlo je do pogreške pri instalaciji Talk Matterbridgea. Instalirajte ga ručno", + "Failed to execute Matterbridge binary." : "Izvršavanje binarne datoteke Matterbridge nije uspjelo.", + "Matterbridge integration" : "Matterbridge integracija", + "Enable Matterbridge integration" : "Omogućite Matterbridge integraciju", + "Status: Checking connection" : "Status: provjeravanje veze", + "OK: Running version: {version}" : "U redu: trenutna inačica: {version}", + "Error: Server seems to be a Signaling server" : "Pogreška: Poslužitelj se čini signalnim poslužiteljem", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Pogreška: Sustavna vremena Nextcloud poslužitelja i poslužitelja pozadinskog sustava za snimanje nisu usklađena. Provjerite jesu li oba poslužitelja povezana s poslužiteljem vremena ili ručno sinkronizirajte vrijeme.", + "Recording backend URL" : "URL pozadinskog sustava za snimanje", + "Validate SSL certificate" : "Potvrdi vjerodajnicu SSL-a", + "Delete this server" : "Izbriši ovaj poslužitelj", + "Test this server" : "Ispitaj ovaj poslužitelj", + "Disabled for all calls" : "Onemogućeno za sve pozive", + "Enabled for all calls" : "Omogućeno za sve pozive", + "Configurable on conversation level by moderators" : "Moguće je podesiti na razini razgovora od strane moderatora", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP postavke \"upload_max_filesize\" ili \"post_max_size\" omogućit će prijenos datoteka samo do {maxUpload}.", + "Recording backend settings saved" : "Postavke pozadinskog sustava za snimanje su spremljene", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorima će biti dopušteno omogućiti privolu na razini razgovora. Privola za snimanje bit će potrebna za svakog sudionika prije pridruživanja svakom pozivu u ovom razgovoru.", + "The consent to be recorded will be required for each participant before joining every call." : "Privola za snimanje bit će potrebna za svakog sudionika prije pridruživanja svakom pozivu.", + "The consent to be recorded is not required." : "Privola za snimanje nije potrebna.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfiguracija pozadinskog sustava za snimanje moguća je samo uz visokoučinkoviti pozadinski sustav.", + "Add a new recording backend server" : "Dodaj novi poslužitelj pozadinskog sustava za snimanje", + "Shared secret" : "Dijeljen tajni ključ", + "Recording consent" : "Privola za snimanje", + "Recording transcription" : "Pretvaranje snimke u tekst", + "Automatically transcribe call recordings with a transcription provider" : "Automatski pretvori snimke poziva u tekst uz pružatelja", + "Automatically summarize call recordings with transcription and summary providers" : "Automatski sažmi snimke poziva uz pružatelje pretvanja u tekst i sažetaka", + "SIP configuration saved!" : "SIP konfiguracija je spremljena!", + "SIP configuration is only possible with a High-performance backend." : "SIP konfiguracija moguća je samo uz visokoučinkoviti pozadinski sustav.", + "Enable SIP Dial-out option" : "Omogući opciju SIP biranja prema van", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalni poslužitelj mora se ažurirati kako bi podržavao značajku SIP biranja prema van.", + "Do not show SIP Dial-out caller number" : "Ne prikazuj broj pozivatelja za SIP biranje prema van", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anoniman broj trebao bi se primatelju poziva prikazati kao \"unknown\" ili \"withheld number\"", + "Dial-out number" : "Broj za biranje prema van", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Broj u E164 formatu koji se koristi kao rezervni broj pozivatelja za odlazne pozive", + "Dial-out prefix" : "Prefiks biranja prema van", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefiks koji se dodaje na konfigurirani korisnički broj za odlazne pozive (zadano je `+`)", + "Restrict SIP configuration" : "Ograniči konfiguraciju SIP-a", + "Enable SIP configuration" : "Omogući konfiguraciju SIP-a", + "Only users of the following groups can enable SIP in conversations they moderate" : "Samo korisnici iz sljedećih grupa mogu omogućiti SIP u razgovorima koje moderiraju", + "Phone number (Country)" : "Broj telefona (država)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ove se informacije šalju u porukama e-pošte s pozivnicama i prikazuju se u bočnoj traci sudionika.", + "Nextcloud base URL" : "Osnovni URL Nextclouda", + "Talk Backend URL" : "URL Talk pozadinskog sustava", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Dostupne značajke", + "Error: Websocket connection failed" : "Pogreška: WebSocket veza nije uspjela", + "Error code" : "Kôd pogreške", + "Error message" : "Poruka o pogrešci", + "Error: Websocket connection failed. Check browser console" : "Pogreška: WebSocket veza nije uspjela. Provjerite konzolu preglednika", + "High-performance backend URL" : "URL visokoučinkovitog pozadinskog sustava", + "Missing High-performance backend warning hidden" : "Upozorenje o nedostajućem visokoučinkovitom pozadinskom sustavu je skriveno", + "High-performance backend settings saved" : "Postavke visokoučinkovitog pozadinskog sustava su spremljene", + "Nextcloud Talk setup not complete" : "Postavljanje Nextcloud Talka nije dovršeno", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Napomena: u pozivima s više od 2 sudionika bez visokoučinkovitog pozadinskog sustava sudionici će vrlo vjerojatno imati probleme s povezivošću, a sudjelujući uređaji bit će snažno opterećeni.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instalirajte visokoučinkoviti pozadinski sustav kako bi pozivi s više sudionika radili besprijekorno.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Kratki vodič za instalaciju", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Visokoučinkoviti pozadinski sustav potreban je za pozive i razgovore s više sudionika. Bez pozadinskog sustava svi sudionici moraju zasebno slati vlastiti video svakom drugom sudioniku, što će vrlo vjerojatno uzrokovati probleme s povezivošću i veliko opterećenje sudjelujućih uređaja.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Preporučuje se postaviti distribuiranu predmemoriju pri korištenju Nextcloud Talka s visokoučinkovitim pozadinskim sustavom.", + "Add High-performance backend server" : "Dodaj poslužitelj visokoučinkovitog pozadinskog sustava", + "Warn about connectivity issues in calls with more than 2 participants" : "Upozori na probleme s povezivošću u pozivima s više od 2 sudionika", + "STUN server URL" : "URL poslužitelja STUN", + "The server address is invalid" : "Adresa poslužitelja nije valjana", + "STUN settings saved" : "STUN postavke su spremljene", + "STUN servers" : "Poslužitelji STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Poslužitelj STUN upotrebljava se za određivanje javne IP adrese sudionika iza usmjerivača.", + "Add a new STUN server" : "Dodaj novi STUN poslužitelj", + "{schema} scheme must be used with a domain" : "Shema {schema} mora se upotrebljavati s domenom", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "Samo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "U redu: poslužitelj TURN vratio je uspješne ICE kandidate", + "Error: No working ICE candidates returned by the TURN server" : "Pogreška: poslužitelj TURN nije vratio ispravne ICE kandidate", + "Testing whether the TURN server returns ICE candidates" : "Ispitivanje hoće li poslužitelj TURN vratiti ICE kandidate", + "TURN server schemes" : "Sheme poslužitelja TURN", + "TURN server URL" : "URL poslužitelja TURN", + "TURN server secret" : "Tajni ključ poslužitelja TURN", + "TURN server protocols" : "Protokoli poslužitelja TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Poslužitelj TURN upotrebljava se za usmjeravanje prometa sudionika iza vatrozida. Ako se pojedini sudionici ne mogu povezati s drugim sudionicima, vjerojatno je potreban poslužitelj TURN. Upute za postavljanje poslužitelja možete pronaći u {linkstart}ovoj dokumentaciji{linkend}.", + "TURN settings saved" : "TURN postavke su spremljene", + "TURN servers" : "Poslužitelji TURN", + "Add a new TURN server" : "Dodaj novi TURN poslužitelj", + "Failed" : "Neuspjelo", + "OK" : "U redu", + "Checking …" : "Provjera …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Neuspjelo: WebAssembly je onemogućen ili ga ovaj preglednik ne podržava. Omogućite WebAssembly ili koristite preglednik koji ga podržava kako biste proveli provjeru.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Neuspjelo: web-poslužitelj nije ispravno vratio datoteke \".wasm\" i \".tflite\". Provjerite odjeljak \"Sistemski zahtjevi\" u Talk dokumentaciji.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "U redu: web-poslužitelj je ispravno vratio datoteke \".wasm\" i \".tflite\".", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Čini se da PHP i Apache konfiguracija nisu kompatibilne. Imajte na umu da se PHP može koristiti samo s modulom MPM_PREFORK, a PHP-FPM samo s modulom MPM_EVENT.", + "Web server setup checks" : "Provjere postavljanja web-poslužitelja", + "Files required for virtual background can be loaded" : "Datoteke potrebne za virtualnu pozadinu mogu se učitati", + "Federated user" : "Udruženi korisnik", + "Assign participants to rooms" : "Dodijeli sudionike u sobe", + "Configure breakout rooms" : "Konfiguriraj sobe za odvajanje", + "Number of breakout rooms" : "Broj soba za odvajanje", + "You can create from 1 to 20 breakout rooms." : "Možete stvoriti od 1 do 20 soba za odvajanje.", + "Assignment method" : "Način dodjele", + "Automatically assign participants" : "Automatski dodijeli sudionike", + "Manually assign participants" : "Ručno dodijeli sudionike", + "Allow participants to choose" : "Dopusti sudionicima odabir", + "Create rooms" : "Stvori sobe", + "Confirm" : "Potvrdi", + "Create breakout rooms" : "Stvori sobe za odvajanje", + "Reset" : "Resetiraj", + "Delete breakout rooms" : "Izbriši sobe za odvajanje", + "Room {roomNumber}" : "Soba {roomNumber}", + "Current breakout rooms and settings will be lost" : "Trenutačne sobe za odvajanje i postavke bit će izgubljene", + "Cancel" : "Odustani", + "Unassigned participants" : "Nedodijeljeni sudionici", + "Back" : "Natrag", + "Assign" : "Dodijeli", + "Add participant \"{user}\"" : "Dodaj sudionika „{user}”", + "Now" : "Sada", + "Invalid calendar selected" : "Odabran je neispravan kalendar", + "Invalid start time selected" : "Odabrano je neispravno vrijeme početka", + "Invalid end time selected" : "Odabrano je neispravno vrijeme završetka", + "Unknown error occurred" : "Došlo je do nepoznate pogreške", + "Sending no invitations" : "Ne šalju se pozivnice", + "{participant0} will receive an invitation" : "{participant0} će primiti pozivnicu", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} će primiti pozivnice", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i još %n osoba primit će pozivnicu","{participant0}, {participant1} i još %n osobe primit će pozivnice","{participant0}, {participant1} i još %n osoba primit će pozivnice"], + "Invite {user}" : "Pozovi {user}", + "Invite all users and emails in this conversation" : "Pozovi sve korisnike i adrese e-pošte u ovom razgovoru", + "Meeting created" : "Sastanak je stvoren", + "Upcoming meetings" : "Nadolazeći sastanci", + "Loading …" : "Učitavanje…", + "No upcoming meetings" : "Nema nadolazećih sastanaka", + "Schedule a meeting" : "Zakaži sastanak", + "Meeting title" : "Naslov sastanka", + "From" : "Od", + "To" : "Za", + "Calendar" : "Kalendar", + "Attendees" : "Sudionici", + "No other participants to send invitations to." : "Nema drugih sudionika kojima bi se poslale pozivnice.", + "Add attendees" : "Dodaj sudionike", + "Save" : "Spremi", + "Search participants" : "Pretraži sudionike", + "No results" : "Nema rezultata", + "Done" : "Gotovo", + "Disable live transcription" : "Onemogući pretvaranje u tekst uživo", + "Enable live transcription (generated by AI)" : "Omogući pretvaranje u tekst uživo (generirano umjetnom inteligencijom)", + "Enable live transcription (Live transcriptions app is not installed)" : "Omogući pretvaranje u tekst uživo (Aplikacija generiranja umjetnom inteligencijom nije instalirana)", + "Disable live translation" : "Onemogući prijevod uživo", + "Enable live translation (generated by AI)" : "Omogući prijevod uživo (generirano umjetnom inteligencijom)", + "Original language" : "Originalni jezik", + "Live translations app is not installed" : "Aplikacija za prijevod uživo nije instalirana", + "Original language: {languageName}" : "Izvorni jezik: {languageName}", + "Translated language" : "Prevedeni jezik", + "Translated language: {languageName}" : "Prevedeni jezik: {languageName}", + "Raise hand" : "Podigni ruku", + "Raise hand (R)" : "Podigni ruku (R)", + "Lower hand" : "Spusti ruku", + "Lower hand (R)" : "Spusti ruku (R)", + "Exit full screen (F)" : "Izađi iz prikaza preko cijelog zaslona (F)", + "Full screen (F)" : "Prikaz preko cijelog zaslona (F)", + "Speaker view" : "Prikaz govornika", + "Grid view" : "Prikaz rešetke", + "Error when trying to load the available live transcription languages" : "Pogreška pri učitavanju dostupnih jezika za pretvaranje u tekst uživo", + "Failed to enable live transcription" : "Nije uspjelo omogućiti pretvaranje u tekst uživo", + "Failed to enable live translations" : "Nije uspjelo omogućiti prijevode uživo", + "Failed to disable live translations" : "Nije uspjelo onemogućiti prijevode uživo", + "Recording consent is required" : "Potrebna je privola za snimanje", + "This conversation is read-only" : "Ovaj razgovor je samo za čitanje", + "Conversation not found or not joined" : "Razgovor nije pronađen ili mu niste pristupili", + "Lobby is still active and you're not a moderator" : "Predvorje je još aktivno, a vi niste moderator", + "Connection failed" : "Povezivanje nije uspjelo", + "Reload" : "Ponovno učitaj", + "{nickName} raised their hand." : "{nickName} je podigao ruku.", + "A participant raised their hand." : "Sudionik je podigao ruku.", + "Collapse stripe" : "Sakrij traku", + "Expand stripe" : "Proširi traku", + "Previous page of videos" : "Prethodna stranica s videozapisima", + "Next page of videos" : "Sljedeća stranica s videozapisima", + "Connecting …" : "Povezivanje…", + "Calling …" : "Pozivanje …", + "Waiting for {user} to join the call" : "Čeka se da se {user} pridruži pozivu", + "Waiting for others to join the call …" : "Čekaju se drugi sudionici da se pridruže pozivu...", + "You can invite others in the participant tab of the sidebar" : "Druge sudionike možete pozvati putem kartice sudionika na bočnoj traci", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Druge sudionike možete pozvati putem kartice sudionika na bočnoj traci ili slanjem ove poveznice!", + "Share this link to invite others!" : "Podijelite ovu poveznicu kako biste pozvali ostale sudionike!", + "Copy link" : "Kopiraj poveznicu", + "You are not allowed to enable audio" : "Nije vam dopušteno omogućiti zvuk", + "No audio. Click to select device" : "Nema zvuka. Kliknite za odabir uređaja", + "Mute audio" : "Isključi zvuk", + "Mute audio (M)" : "Isključi zvuk (M)", + "Unmute audio" : "Uključi zvuk", + "Unmute audio (M)" : "Uključi zvuk (M)", + "None" : "Nema", + "Select a microphone" : "Odaberite mikrofon", + "Select a speaker" : "Odaberite zvučnik", + "Microphone settings" : "Postavke mikrofona", + "Check devices" : "Provjeri uređaje", + "Access to camera was denied" : "Pristup kameri je odbijen", + "Error while accessing camera: It is likely in use by another program" : "Pogreška pri pristupu kameri: vjerojatno je koristi drugi program", + "Error while accessing camera" : "Došlo je do pogreške pri pristupanju kameri", + "You have been muted by a moderator" : "Utišao vas je moderator", + "Hide presenter video" : "Sakrij video prezentera", + "You are not allowed to enable video" : "Nije vam dopušteno omogućiti videoprijenos", + "No video. Click to select device" : "Nema videa. Kliknite za odabir uređaja", + "Disable video" : "Onemogući videoprijenos", + "Disable video (V)" : "Onemogući videoprijenos (V)", + "Enable video" : "Omogući videoprijenos", + "Enable video (V)" : "Omogući videoprijenos (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući video – vaša će se veza kratko prekinuti pri prvom uključivanju videa", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući videoprijenos (V) – veza će se nakratko prekinuti pri prvom omogućivanju videoprijenosa", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući videoprijenos. Veza će se nakratko prekinuti pri prvom omogućivanju videoprijenosa", + "Select a video device" : "Odaberite video uređaj", + "Show presenter" : "Prikaži prezentera", + "You" : "Vi", + "Mute" : "Utišaj", + "Muted" : "Isključeno", + "Show screen" : "Prikaži zaslon", + "Stop following" : "Prekini praćenje", + "Connection could not be established …" : "Nije moguće uspostaviti vezu …", + "Connection was lost and could not be re-established …" : "Veza je izgubljena i nije je moguće ponovno uspostaviti …", + "Connection could not be established. Trying again …" : "Nije moguće uspostaviti vezu. Pokušavam ponovno …", + "Connection lost. Trying to reconnect …" : "Veza je izgubljena. Pokušavam ponovno povezivanje …", + "Connection problems …" : "Problemi s vezom …", + "Collapse" : "Sakrij", + "Expand" : "Proširi", + "You need to be logged in to upload files" : "Morate biti prijavljeni kako biste otpremali datoteke", + "Drop your files to upload" : "Ispustite datoteke za otpremu", + "Conversation messages" : "Poruke razgovora", + "Scroll to bottom" : "Pomakni se na dno", + "Post message" : "Objavi poruku", + "Federated conversation" : "Udruženi razgovor", + "Public conversation" : "Javni razgovor", + "Favorite" : "Favorit", + "Banned users" : "Zabranjeni korisnici", + "Manage the list of banned users in this conversation." : "Upravljajte popisom zabranjenih korisnika u ovom razgovoru.", + "Manage bans" : "Upravljanje zabranama", + "No banned users" : "Nema zabranjenih korisnika", + "Banned by:" : "Zabranio:", + "Date:" : "Datum:", + "Note:" : "Napomena:", + "Hide details" : "Sakrij pojedinosti", + "Show details" : "Prikaži pojedinosti", + "Unban" : "Ukloni zabranu", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Naslov i opis možete promijeniti u {linkstart}Kalendaru ↗{linkend}.", + "Error while updating conversation name" : "Pogreška pri ažuriranju naziva razgovora", + "Error while updating conversation description" : "Pogreška pri ažuriranju opisa razgovora", + "Enter a name for this conversation" : "Unesite naziv za ovaj razgovor", + "Edit conversation name" : "Uredi naziv razgovora", + "Edit conversation description" : "Opis uređivanja razgovora", + "Enter a description for this conversation" : "Unesite opis ovog razgovora", + "Picture" : "Slika", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Sljedeći botovi mogu se omogućiti u ovom razgovoru. Obratite se administraciji da instalira više botova na ovom poslužitelju.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na ovom poslužitelju nisu instalirani botovi. Obratite se administraciji da instalira botove na ovom poslužitelju.", + "Disable" : "Onemogući", + "Enable" : "Omogući", + "Breakout rooms" : "Sobe za odvajanje", + "Manage breakout rooms" : "Upravljanje sobama za odvajanje", + "Set up breakout rooms for this conversation" : "Postavite sobe za odvajanje za ovaj razgovor", + "Please select a valid PNG or JPG file" : "Odaberite valjanu PNG ili JPG datoteku", + "Choose your conversation picture" : "Odaberite sliku razgovora", + "Choose" : "Odaberite", + "Error setting conversation picture" : "Pogreška pri postavljanju slike razgovora", + "Could not set the conversation picture: {error}" : "Nije moguće postaviti sliku razgovora: {error}", + "Error cropping conversation picture" : "Pogreška pri obrezivanju slike razgovora", + "Error removing conversation picture" : "Pogreška pri uklanjanju slike razgovora", + "Set emoji as conversation picture" : "Postavi emoji kao sliku razgovora", + "Set background color for conversation picture" : "Postavi boju pozadine za sliku razgovora", + "Upload conversation picture" : "Prenesi sliku razgovora", + "Choose conversation picture from files" : "Odaberite sliku razgovora iz datoteka", + "Remove conversation picture" : "Ukloni sliku razgovora", + "The file must be a PNG or JPG" : "Datoteka mora biti PNG ili JPG", + "Set picture" : "Postavi sliku", + "Default permissions modified for {conversationName}" : "Izmijenjena su zadana dopuštenja za {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nije moguće izmijeniti zadana dopuštenja za {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Uredite zadana dopuštenja za sudionike ovog razgovora. Ove postavke ne utječu na moderatore.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Svaki put kada se u ovom odjeljku izmijene dopuštenja, izgubit će se prilagođena dopuštenja koja su prethodno dodijeljena pojedinim sudionicima.", + "All permissions" : "Sva dopuštenja", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Sudionici imaju dopuštenja za pokretanje poziva, pridruživanje pozivu, uključivanje zvuka i videa te dijeljenje zaslona.", + "Restricted" : "Ograničeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Sudionici se mogu pridružiti pozivima, ali ne mogu uključiti zvuk ni video niti dijeliti zaslon dok im moderator ručno ne dodijeli dopuštenja.", + "Advanced permissions" : "Napredna dopuštenja", + "Edit permissions" : "Uredi dopuštenja", + "Conversation settings" : "Postavke razgovora", + "Basic Info" : "Osnovne informacije", + "Personal" : "Osobno", + "Moderation" : "Moderiranje", + "Setup overview" : "Pregled postavljanja", + "Live transcription" : "Pretvaranje u tekst uživo", + "Live transcriptions app is not installed" : "Aplikacija za pretvaranje u tekst nije instaliranja", + "Enable live transcription" : "Omogući pretvaranje u tekst uživo", + "Breakout Rooms" : "Sobe za odvajanje", + "Matterbridge" : "Matterbridge", + "Bots" : "Botovi", + "Danger zone" : "Zona opasnosti", + "Archive conversation" : "Arhiviraj razgovor", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arhivirani razgovori zadano su skriveni s popisa razgovora. Ipak, i dalje će se pojaviti kada pretražujete naziv razgovora ili pristupite popisu arhiviranih razgovora.", + "Do you really want to leave \"{displayName}\"?" : "Želite li zaista napustiti „{displayName}”?", + "You can archive this conversation instead." : "Umjesto toga možete arhivirati ovaj razgovor.", + "Leave conversation" : "Napusti razgovor", + "You need to promote a new moderator before you can leave the conversation" : "Prije nego što možete napustiti razgovor, morate promovirati novog moderatora", + "Delete conversation" : "Izbriši razgovor", + "Do you really want to delete \"{displayName}\"?" : "Želite li zaista izbrisati „{displayName}“?", + "Error while deleting conversation" : "Pogreška pri brisanju razgovora", + "Delete all chat messages" : "Izbriši sve razmijenjene poruke", + "Do you really want to delete all messages in \"{displayName}\"?" : "Želite li zaista izbrisati sve poruke u „{displayName}“?", + "Error while clearing chat history" : "Pogreška pri brisanju povijesti razmjene poruka", + "Be careful, these actions cannot be undone." : "Pažljivo nastavite jer ove radnje nije moguće poništiti.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nakon izlaska iz razgovora za ponovni pristup zatvorenom razgovoru potreban je poziv. Otvorenom razgovoru možete se ponovno pridružiti u bilo kojem trenutku.", + "Permanently delete this conversation." : "Trajno izbrišite ovaj razgovor.", + "Delete chat messages" : "Izbriši razmijenjene poruke", + "Permanently delete all the messages in this conversation." : "Trajno izbrišite sve poruke u ovom razgovoru.", + "_%n hour_::_%n hours_" : ["%n sat","%n sata","%n sati"], + "_%n day_::_%n days_" : ["%n dan","%n dana","%n dana"], + "_%n week_::_%n weeks_" : ["%n tjedan","%n tjedna","%n tjedana"], + "Custom expiration time" : "Prilagođeno vrijeme isteka", + "Message expiration disabled" : "Istjecanje poruka je onemogućeno", + "Message expiration set: {duration}" : "Istjecanje poruka postavljeno: {duration}", + "Error when trying to set message expiration" : "Pogreška pri postavljanju istjecanja poruka", + "Message expiration" : "Istjecanje poruka", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Poruke u chatu mogu isteći nakon određenog vremena. Napomena: datoteke podijeljene u chatu neće biti obrisane vlasniku, ali se više neće dijeliti u razgovoru.", + "Set message expiration" : "Postavi istjecanje poruka", + "Current message expiration" : "Trenutačno istjecanje poruka", + "Password copied to clipboard" : "Lozinka je kopirana u međuspremnik", + "Password could not be copied" : "Lozinku nije moguće kopirati", + "Guest access" : "Pristup gostiju", + "Breakout rooms are not allowed in public conversations." : "Sobe za odvajanje nisu dopuštene u javnim razgovorima.", + "Allow guests to join this conversation via link" : "Dopusti gostima pridruživanje ovom razgovoru putem poveznice", + "Password protection" : "Zaštita zaporkom", + "This conversation is password-protected. Guests need password to join" : "Ovaj razgovor je zaštićen lozinkom. Gosti trebaju lozinku za pridruživanje", + "Password protection is needed for public conversations" : "Za javne razgovore potrebna je zaštita lozinkom", + "Set a password" : "Postavi lozinku", + "Change password" : "Promijeni lozinku", + "Enter new password" : "Unesite novu lozinku", + "Save password" : "Spremi zaporku", + "Copy password" : "Kopiraj lozinku", + "Guests are allowed to join this conversation via link" : "Gostima je dopušteno pridružiti se ovom razgovoru putem poveznice", + "Guests are not allowed to join this conversation" : "Gostima nije dopušteno pridružiti se ovom razgovoru", + "Resend invitations" : "Ponovno pošalji pozivnice", + "This conversation is open to both registered users and users created with the Guests app" : "Ovaj je razgovor otvoren i za registrirane korisnike i za korisnike stvorene aplikacijom Gosti", + "This conversation is open to registered users" : "Ovaj je razgovor otvoren za registrirane korisnike", + "This conversation is limited to the current participants" : "Ovaj je razgovor ograničen na trenutačne sudionike", + "You opened the conversation to both registered users and users created with the Guests app" : "Otvorili ste razgovor i za registrirane korisnike i za korisnike stvorene aplikacijom Gosti", + "Error occurred when opening or limiting the conversation" : "Došlo je do pogreške pri otvaranju ili ograničavanju razgovora", + "Open conversation to registered users, showing it in search results" : "Otvori razgovor za registrirane korisnike, uz prikaz u rezultatima pretraživanja", + "Also open to users created with the Guests app" : "Također otvoreno za korisnike stvorene aplikacijom Gosti", + "Open conversation" : "Otvori razgovor", + "Set language spoken in calls" : "Postavi jezik koji se govori u pozivima", + "Languages could not be loaded" : "Nije moguće učitati jezike", + "Loading languages …" : "Učitavanje jezika …", + "Invalid language" : "Nevažeći jezik", + "Default language (English)" : "Zadani jezik (engleski)", + "Default live transcription language set" : "Zadani jezik pretvaranja u tekst uživo je postavljen", + "Live transcription language set: {languageName}" : "Jezik pretvaranja u tekst uživo postavljen: {languageName}", + "Error when trying to set live transcription language" : "Pogreška pri postavljanju jezika pretvaranja u tekst uživo", + "Start time: {date}" : "Vrijeme početka: {date}", + "Start time has been updated" : "Vrijeme početka je ažurirano", + "Error occurred while updating start time" : "Došlo je do pogreške pri ažuriranju vremena početka", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Omogućavanje predvorja uklonit će ne-moderatore iz poziva koji je u tijeku.", + "Enable lobby, restricting the conversation to moderators" : "Omogući predvorje, ograniči razgovor na moderatore", + "Meeting start time" : "Vrijeme početka sastanka", + "Start time (optional)" : "Vrijeme početka (neobvezno)", + "Import email participants" : "Uvezi sudionike putem e-pošte", + "You can import a list of email participants from a CSV file." : "Možete uvesti popis sudionika putem e-pošte iz CSV datoteke.", + "Poll drafts" : "Skice anketa", + "Browse poll drafts" : "Pregledaj skice anketa", + "Error occurred when locking the conversation" : "Došlo je do pogreške pri zaključavanju razgovora", + "Error occurred when unlocking the conversation" : "Došlo je do pogreške pri otključavanju razgovora", + "Lock conversation" : "Zaključaj razgovor", + "This will also terminate the ongoing call." : "Ovime ćete također prekinuti poziv.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zaključajte razgovor kako biste spriječili bilo koga da objavljuje poruke ili pokreće pozive", + "Edit" : "Uredi", + "More information" : "Više informacija", + "Delete" : "Izbriši", + "Add new bridged channel to current conversation" : "Dodaj novi povezani kanal u trenutačni razgovor", + "unknown state" : "nepoznato stanje", + "running" : "radi", + "not running, check Matterbridge log" : "nije pokrenuto, provjeri zapisnik Matterbridgea", + "not running" : "ne radi", + "Bridge saved" : "Veza spašena", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Zahvaljujući aplikaciji Matterbridge možete povezati kanale iz različitih sustava razmjene kratkih poruka.", + "More info on Matterbridge" : "Više informacija o Matterbridgeu", + "Messaging systems" : "Sustavi za razmjenu poruka", + "Enable bridge" : "Omogući povezivanje", + "Show Matterbridge log" : "Prikaži zapisnik Matterbridgea", + "Log content" : "Sadržaj zapisa", + "Only moderators are allowed to mention @all" : "Samo moderatori smiju spominjati @all", + "All participants are allowed to mention @all" : "Svi sudionici smiju spominjati @all", + "Participants are now allowed to mention @all." : "Sudionicima je sada dopušteno spominjati @all.", + "Mentioning @all has been limited to moderators." : "Spominjanje @all ograničeno je na moderatore.", + "Allow participants to mention @all" : "Dopusti sudionicima spominjanje @all", + "Mention permissions" : "Dopuštenja za spominjanje", + "Notifications" : "Obavijesti", + "Notify about calls in this conversation" : "Obavijesti o pozivima u ovom razgovoru", + "Important conversation" : "Važan razgovor", + "\"Do not disturb\" user status is ignored for important conversations" : "Status korisnika „Ne ometaj” zanemaruje se za važne razgovore", + "Sensitive conversation" : "Osjetljiv razgovor", + "Message preview will be disabled in conversation list and notifications" : "Pregled poruke bit će onemogućen na popisu razgovora i u obavijestima", + "Recording consent is required for calls in this conversation" : "Privola za snimanje potrebna je za pozive u ovom razgovoru", + "Recording consent is not required for calls in this conversation" : "Privola za snimanje nije potrebna za pozive u ovom razgovoru", + "Recording consent requirement was updated" : "Zahtjev za privolu za snimanje je ažuriran", + "Error occurred while updating recording consent" : "Došlo je do pogreške pri ažuriranju privole za snimanje", + "Recording Consent" : "Privola za snimanje", + "Recording consent cannot be changed once a call or breakout session has started." : "Privola za snimanje ne može se mijenjati nakon što je poziv ili sesija soba za odvajanje započela.", + "Require recording consent before joining call in this conversation" : "Zahtijevaj privolu za snimanje prije pridruživanja pozivu u ovom razgovoru", + "Recording consent is required for all calls" : "Privola za snimanje potrebna je za sve pozive", + "SIP dial-in is now possible without PIN requirement" : "SIP biranje prema unutra sada je moguće bez potrebe za PIN-om", + "SIP dial-in is now enabled" : "Povezivanje putem SIP-a je omogućeno", + "SIP dial-in is now disabled" : "Povezivanje putem SIP-a je onemogućeno", + "Error occurred when enabling SIP dial-in" : "Došlo je do pogreške pri omogućavanju povezivanja putem SIP-a", + "Error occurred when disabling SIP dial-in" : "Došlo je do pogreške pri onemogućavanju povezivanja putem SIP-a", + "Phone and SIP dial-in" : "Telefonsko i SIP biranje prema unutra", + "Enable phone and SIP dial-in" : "Omogući telefonsko i SIP biranje prema unutra", + "Allow to dial-in without a PIN" : "Dopusti biranje prema unutra bez PIN-a", + "Ongoing" : "U tijeku", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba je prihvatila","%n osobe su prihvatile","%n osoba je prihvatilo"], + "_%n person declined_::_%n people declined_" : ["%n osoba je odbila","%n osobe su odbile","%n osoba je odbilo"], + "_and %n other attachment_::_and %n other attachments_" : ["i još %n drugi privitak","i još %n druga privitka","i još %n drugih privitaka"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "U {conversation}", + "View attachment" : "Prikaži privitak", + "Join" : "Pridruži se", + "View conversation" : "Prikaži razgovor", + "View event on Calendar" : "Prikaži događaj u Kalendaru", + "Error while creating the conversation" : "Pogreška pri stvaranju razgovora", + "Hello, {displayName}" : "Pozdrav, {displayName}", + "Start meeting now" : "Pokreni sastanak sada", + "Give your meeting a title" : "Dajte sastanku naslov", + "Create and copy link" : "Stvori i kopiraj poveznicu", + "Create a new conversation" : "Stvori novi razgovor", + "Join open conversations" : "Pridruži se otvorenim razgovorima", + "Call a phone number" : "Nazovi telefonski broj", + "Scroll backward" : "Pomakni unatrag", + "Scroll forward" : "Pomakni naprijed", + "Schedule meetings" : "Zakaži sastanke", + "You don't have any upcoming meetings" : "Nemate nadolazećih sastanaka", + "Open calendar" : "Otvori kalendar", + "Unread mentions" : "Nepročitana spominjanja", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Poruke u kojima ste spomenuti prikazat će se ovdje. Osobe možete spomenuti upisivanjem @ nakon čega slijedi njihovo ime", + "Upcoming reminders" : "Nadolazeći podsjetnici", + "Message reminders" : "Podsjetnici poruka", + "Set a reminder on a message to be notified" : "Postavite podsjetnik na poruku kako biste dobili obavijest", + "Start a group conversation" : "Pokreni grupni razgovor", + "Create conversation" : "Stvori razgovor", + "Enter your name" : "Unesite svoje ime", + "Submit name and join" : "Pošalji ime i pridruži se", + "Do you already have an account?" : "Imate li već račun?", + "Log in" : "Prijavite se", + "Error while verifying uploaded file" : "Pogreška pri provjeri prenesene datoteke", + "Uploaded file is verified" : "Prenesena datoteka je provjerena", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Format sadržaja je CSV (vrijednosti odvojene zarezom):
- Redak zaglavlja je obvezan i mora odgovarati \"name\",\"email\" ili samo \"email\"
- Jedan unos po retku (npr. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Sudionici su uspješno dodani", + "Error while adding participants" : "Pogreška pri dodavanju sudionika", + "Import a file" : "Uvezi datoteku", + "Browse" : "Pregledaj", + "Verifying uploaded file …" : "Provjera prenesene datoteke …", + "This might take a moment" : "To može potrajati trenutak", + "Send invitations" : "Pošalji pozivnice", + "_%n invalid email_::_%n invalid emails_" : ["%n neispravna adresa e-pošte","%n neispravne adrese e-pošte","%n neispravnih adresa e-pošte"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adresa e-pošte već je uvezena ili je duplikat","%n adrese e-pošte već su uvezene ili su duplikati","%n adresa e-pošte već je uvezeno ili su duplikati"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n pozivnica se može poslati","%n pozivnice se mogu poslati","%n pozivnica se može poslati"], + "An error occurred while calling a phone number" : "Došlo je do pogreške pri pozivanju telefonskog broja", + "Phone number could not be called: {error}" : "Telefonski broj nije moguće pozvati: {error}", + "Phone number could not be called" : "Telefonski broj nije moguće pozvati", + "Search participants or phone numbers" : "Pretraži sudionike ili telefonske brojeve", + "Creating the conversation …" : "Stvaranje razgovora …", + "Mark as read" : "Označi kao pročitano", + "Mark as unread" : "Označi kao nepročitano", + "Remove from favorites" : "Ukloni iz favorita", + "Add to favorites" : "Dodaj u favorite", + "Unarchive conversation" : "Dearhiviraj razgovor", + "Ignore \"Do not disturb\"" : "Zanemari \"Ne ometaj\"", + "You need to promote a new moderator before you can leave the conversation." : "Morate odabrati novog moderatora prije nego što napustite razgovor.", + "Conversation actions" : "Radnje razgovora", + "Notify about calls" : "Obavijesti o pozivima", + "Hide message text" : "Sakrij tekst poruke", + "Pending invitations" : "Pozivnice na čekanju", + "Join conversations from other servers" : "Pridruži se razgovorima s drugih poslužitelja", + "From {user} at {remoteServer}" : "Od {user} na {remoteServer}", + "Decline invitation" : "Odbij pozivnicu", + "Accept invitation" : "Prihvati pozivnicu", + "No pending invitations" : "Nema pozivnica na čekanju", + "Home" : "Početna", + "Unread" : "Nepročitano", + "Mentions" : "Spominjanja", + "Meetings" : "Sastanci", + "Sort conversations" : "Sortiraj razgovore", + "By recent activity" : "Prema nedavnoj aktivnosti", + "Alphabetically" : "Abecedno", + "Do not group by type" : "Ne grupiraj po tipu", + "Show private ones first" : "Prvo prikaži privatne", + "Show group ones first" : "Prvo prikaži grupne", + "No followed threads" : "Nema praćenih niti", + "No matches found" : "Nema pronađenih podudaranja", + "No conversations found" : "Nije pronađen nijedan razgovor", + "You have no archived conversations." : "Nemate arhiviranih razgovora.", + "Subscribe to an existing thread or start your own." : "Pretplatite se na postojeću nit ili pokrenite vlastitu.", + "You have no unread mentions." : "Nemate nepročitanih spominjanja.", + "You have no unread messages." : "Nemate nepročitanih poruka.", + "An error occurred while performing the search" : "Došlo je do pogreške pri pretraživanju", + "Conversation list" : "Popis razgovora", + "Filter conversations by" : "Filtriraj razgovore prema", + "Unread messages" : "Nepročitane poruke", + "Meeting conversations" : "Razgovori u sastancima", + "Clear filters" : "Očisti filtre", + "New personal note" : "Nova osobna bilješka", + "SIP backend is not installed" : "SIP pozadinski sustav nije instaliran", + "Back to conversations" : "Natrag na razgovore", + "Archived conversations" : "Arhivirani razgovori", + "Threads" : "Niti", + "Clear filter" : "Ukloni filtar", + "Show more threads" : "Prikaži više niti", + "App settings" : "Postavke aplikacije", + "Users" : "Korisnici", + "Groups" : "Grupe", + "Teams" : "Timovi", + "Federated users" : "Udruženi korisnici", + "New private conversation" : "Novi privatni razgovor", + "Other sources" : "Drugi izvori", + "Open conversations" : "Otvori razgovore", + "No search results" : "Nema rezultata pretraživanja", + "Users, groups and teams" : "Korisnici, grupe i timovi", + "Users and groups" : "Korisnici i grupe", + "Users and teams" : "Korisnici i timovi", + "Groups and teams" : "Grupe i timovi", + "New group conversation" : "Novi grupni razgovor", + "The meeting will start soon" : "Sastanak počinje uskoro", + "This meeting is scheduled for {startTime}" : "Sastanak počinje u {startTime}", + "You are currently waiting in the lobby" : "Trenutno čekate u predvorju", + "Enable noise suppression" : "Omogući uklanjanje šuma", + "Reduce background noises for better voice quality" : "Smanjite pozadinske šumove za bolju kvalitetu glasa", + "Enable echo cancellation" : "Omogući poništavanje jeke", + "Minimize echo effect from own surrounding" : "Smanjite učinak jeke iz okoline", + "Enable auto gain control" : "Omogući automatsku kontrolu pojačanja", + "Dynamically adjust microphone volume for consistent level" : "Dinamički prilagođava glasnoću mikrofona za ujednačenu razinu", + "Select microphone" : "Odaberi mikrofon", + "No microphone available" : "Nema dostupnih mikrofona", + "Select speaker" : "Odaberite zvučnik", + "No speaker available" : "Nema dostupnog zvučnika", + "Select camera" : "Odaberi kameru", + "No camera available" : "Nema dostupnih kamera", + "Select a device" : "Odaberi uređaj", + "Playing …" : "Reprodukcija …", + "Test speakers" : "Testiraj zvučnike", + "Test" : "Ispitivanje", + "Devices" : "Uređaji", + "Backgrounds" : "Pozadine", + "No audio" : "Nema zvuka", + "No camera" : "Nema kamere", + "Display video as you will see it (mirrored)" : "Prikaži video kako ćete ga vi vidjeti (zrcaljeno)", + "Display video as others will see it" : "Prikaži video kako će ga drugi vidjeti", + "Calls are not supported in your browser" : "Vaš preglednik ne podržava pozive", + "Access to microphone is only possible with HTTPS" : "Pristup mikrofonu moguć je samo putem HTTPS-a", + "Access to microphone was denied" : "Pristup mikrofonu je odbijen", + "Error while accessing microphone" : "Došlo je do pogreške pri pristupanju mikrofonu", + "Access to camera is only possible with HTTPS" : "Pristup kameri moguć je samo putem HTTPS-a", + "The call is being recorded." : "Poziv se snima.", + "The call might be recorded." : "Poziv se možda snima.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Snimka može uključivati vaš glas, video s kamere i dijeljenje zaslona. Prije pridruživanja pozivu potrebna je vaša privola.", + "Give consent to the recording of this call" : "Dajem privolu za snimanje ovog poziva", + "Show more info" : "Prikaži više informacija", + "Audio is not available" : "Zvuk nije dostupan", + "Video is not available" : "Video nije dostupan", + "Start recording immediately with the call" : "Započni snimanje odmah s pozivom", + "Recording backend is not installed" : "Pozadinski sustav za snimanje nije instaliran", + "Notify all participants about this call" : "Obavijesti sve sudionike o ovom pozivu", + "Apply settings" : "Primijeni postavke", + "Select virtual office background" : "Odaberite virtualnu uredsku pozadinu", + "Select virtual home background" : "Odaberite virtualnu kućnu pozadinu", + "Select virtual abstract background" : "Odaberite virtualnu apstraktnu pozadinu", + "Select virtual beach background" : "Odaberite virtualnu pozadinu plaže", + "Select virtual park background" : "Odaberite virtualnu pozadinu parka", + "Select virtual theater background" : "Odaberite virtualnu pozadinu kazališta", + "Select virtual library background" : "Odaberite virtualnu pozadinu knjižnice", + "Select virtual space station background" : "Odaberite virtualnu pozadinu svemirske postaje", + "Error while uploading the file" : "Pogreška pri prijenosu datoteke", + "Select a file" : "Odaberite datoteku", + "Invalid path selected" : "Odabran nevažeći put", + "Select virtual background from file {fileName}" : "Odaberite virtualnu pozadinu iz datoteke {fileName}", + "Blur" : "Zamućenje", + "Upload" : "Učitaj", + "Files" : "Datoteke", + "(editing)" : "(uređivanje)", + "(edited)" : "(uređeno)", + "The message has expired or has been deleted" : "Poruka je istekla ili je obrisana", + "Cancel quote" : "Odustani od citiranja", + "24 hours" : "24 sata", + "7 days" : "7 dana", + "30 days" : "30 dana", + "Until unpin" : "Do otkvačivanja", + "Clear reminder – {timeLocale}" : "Ukloni podsjetnik – {timeLocale}", + "Edited by {actor}" : "Uredio {actor}", + "Pinned by you" : "Prikvačili ste", + "Pinned by {actor}" : "Prikvačio {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Tekst poruke kopiran je u međuspremnik", + "Message text could not be copied" : "Tekst poruke nije moguće kopirati", + "Message forwarded to \"Note to self\"" : "Poruka je proslijeđena u \"Bilješka za sebe\"", + "Error while forwarding message to \"Note to self\"" : "Pogreška pri prosljeđivanju poruke u \"Bilješka za sebe\"", + "A reminder was successfully removed" : "Podsjetnik je uspješno uklonjen", + "Error occurred when removing a reminder" : "Došlo je do pogreške pri uklanjanju podsjetnika", + "A reminder was successfully set at {datetime}" : "Podsjetnik je uspješno postavljen za {datetime}", + "Error occurred when creating a reminder" : "Došlo je do pogreške pri stvaranju podsjetnika", + "Add a reaction to this message" : "Dodaj reakciju na ovu poruku", + "Reply" : "Odgovori", + "More actions" : "Dodatne radnje", + "Set reminder" : "Postavi podsjetnik", + "Pin message" : "Prikvači poruku", + "Unpin message" : "Otkvači poruku", + "Reply privately" : "Odgovori privatno", + "Edit message" : "Uredi poruku", + "Copy message" : "Kopiraj poruku", + "Copy message link" : "Kopiraj poveznicu poruke", + "Go to file" : "Idi na datoteku", + "Download file" : "Preuzmi datoteku", + "Go to thread" : "Idi na nit", + "Edit thread details" : "Uredi detalje niti", + "Forward message" : "Proslijedi poruku", + "Translate" : "Prevedi", + "Set custom reminder" : "Postavi prilagođeni podsjetnik", + "Keep pinned for" : "Zadrži prikvačeno", + "Set custom period" : "Postavi prilagođeno razdoblje", + "Close reactions menu" : "Zatvori izbornik reakcija", + "React with {emoji}" : "Reagiraj s {emoji}", + "React with another emoji" : "Reagiraj drugim emojijem", + "Choose a conversation to forward the selected message." : "Odaberite razgovor u koji ćete proslijediti odabranu poruku.", + "Error while forwarding message" : "Pogreška pri prosljeđivanju poruke", + "The message has been forwarded to {selectedConversationName}" : "Poruka je proslijeđena u {selectedConversationName}", + "Dismiss" : "Zanemari", + "Go to conversation" : "Idi na razgovor", + "The message could not be translated" : "Poruku nije moguće prevesti", + "Translation copied to clipboard" : "Prijevod je kopiran u međuspremnik", + "Translation could not be copied" : "Prijevod nije moguće kopirati", + "Translate message" : "Prevedi poruku", + "Source language to translate from" : "Izvorni jezik za prijevod", + "Translate from" : "Prevedi s", + "Target language to translate into" : "Ciljni jezik prijevoda", + "Translate to" : "Prevedi na", + "Translating" : "Prevođenje", + "Copy translated text" : "Kopiraj prevedeni tekst", + "Error when scheduling the message" : "Pogreška pri zakazivanju poruke", + "Reschedule" : "Ponovno zakaži", + "Send now" : "Pošalji sada", + "Choose a time" : "Odaberite vrijeme", + "Send at custom time" : "Pošalji u prilagođeno vrijeme", + "Will be sent without notification" : "Bit će poslano bez obavijesti", + "Message read by everyone who shares their reading status" : "Poruku je pročitao svatko tko dijeli status čitanja", + "Message sent" : "Poruka poslana", + "Sent without notification" : "Poslano bez obavijesti", + "Deleting message" : "Brisanje poruke", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Poruka je uspješno obrisana, ali je konfiguriran bot ili Matterbridge pa je poruka možda već proslijeđena drugim uslugama", + "Message deleted successfully" : "Poruka je uspješno izbrisana", + "Message could not be deleted because it is too old" : "Poruku nije moguće izbrisati jer je prestara", + "Only normal chat messages can be deleted" : "Mogu se izbrisati samo uobičajene razmijenjene poruke", + "An error occurred while deleting the message" : "Došlo je do pogreške pri brisanju poruke", + "Pinned" : "Prikvačeno", + "Your browser does not support playing audio files" : "Vaš preglednik ne podržava reprodukciju zvučnih datoteka", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} u {board}", + "Deck Card" : "Deck kartica", + "Remove {fileName}" : "Ukloni {fileName}", + "Open this location in OpenStreetMap" : "Otvorite ovu lokaciju u aplikaciji OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odgovor","%n odgovora","%n odgovora"], + "Sending message" : "Slanje poruke", + "Failed to send the message. Click to try again" : "Slanje poruke nije uspjelo. Kliknite kako biste ponovno pokušali", + "Not enough free space to upload file" : "Nema dovoljno slobodnog prostora za otpremanje datoteke", + "You cannot send messages to this conversation at the moment" : "Trenutno ne možete slati poruke u ovaj razgovor", + "Could not update the message" : "Nije moguće ažurirati poruku", + "Reply to thread \"{threadTitle}\"" : "Odgovori u niti \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Glasali ste • %n glas","Glasali ste • %n glasa","Glasali ste • %n glasova"], + "You voted" : "Glasali ste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Glasajte • %n glas","Glasajte • %n glasa","Glasajte • %n glasova"], + "Click to vote" : "Klikni za glasanje", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Skica ankete • %n opcija","Skica ankete • %n opcije","Skica ankete • %n opcija"], + "_%n vote_::_%n votes_" : ["%n glas","%n glasa","%n glasova"], + "Edit poll draft" : "Uredi skicu ankete", + "Delete poll draft" : "Izbriši skicu ankete", + "Open poll" : "Otvorena anketa", + "Closed poll" : "Zatvorena anketa", + "See results" : "Prikaži rezultate", + "Reactions" : "Reakcije", + "No permission to post reactions in this conversation" : "Nemate dopuštenje za objavljivanje reakcija u ovom razgovoru", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i još %n drugi sudionik","i još %n druga sudionika","i još %n drugih sudionika"], + "Show all reactions" : "Prikaži sve reakcije", + "Add more reactions" : "Dodaj još reakcija", + "Show or collapse system messages" : "Prikaži ili sažmi sistemske poruke", + "No messages" : "Nema poruka", + "All messages have expired or have been deleted." : "Sve poruke su istekle ili su obrisane.", + "Generate summary with AI" : "Generiraj sažetak pomoću umjetne inteligencije", + "{author} (pinned by you)" : "{author} (prikvačeno od vas)", + "{author} (pinned by {actor})" : "{author} (prikvačio {actor})", + "Unpin" : "Otkvači", + "Cancel search" : "Odustani od pretraživanja", + "Add a phone number" : "Dodaj telefonski broj", + "Error: A password is required to create the conversation." : "Pogreška: Za stvaranje razgovora potrebna je lozinka.", + "All set, the conversation \"{conversationName}\" was created." : "Sve je spremno, razgovor \"{conversationName}\" je stvoren.", + "Create a new group conversation" : "Stvori novi grupni razgovor", + "Add participants" : "Dodaj sudionike", + "Maximum length exceeded ({maxlength} characters)" : "Prekoračena je maksimalna duljina ({maxlength} znakova)", + "Conversation visibility" : "Vidljivost razgovora", + "Allow guests to join via link" : "Dopusti pridruživanje gostiju putem pozivnice", + "Enter password" : "Unesi zaporku", + "This conversation has been locked" : "Ovaj je razgovor zaključan", + "No permission to post messages in this conversation" : "Nije dopušteno objavljivanje poruka u ovom razgovoru", + "Joining conversation …" : "Pridruživanje razgovoru...", + "Write a message without notification" : "Napiši poruku bez obavijesti", + "Create a thread silently" : "Stvori nit tiho", + "Create a thread" : "Stvori nit", + "Send message silently" : "Pošalji poruku tiho", + "Send message" : "Pošalji poruku", + "Send without notification" : "Pošalji bez obavijesti", + "The participant will not be notified about new messages" : "Sudionik neće biti obaviješten o novim porukama", + "Participants will not be notified about new messages" : "Sudionici neće biti obaviješteni o novim porukama", + "Message will be sent {datetimeString}" : "Poruka će biti poslana {datetimeString}", + "Thread title is required" : "Naslov niti je obvezan", + "Message text is required" : "Tekst poruke je obvezan", + "The message could not be edited" : "Poruku nije moguće urediti", + "File to share" : "Datoteka za dijeljenje", + "File upload is not available in this conversation" : "Prijenos datoteka nije dostupan u ovom razgovoru", + "Message was successfully scheduled" : "Poruka je uspješno zakazana", + "Add emoji" : "Dodaj emoji", + "Adding a mention will only notify users who did not read the message." : "Dodavanje spominjanja obavijestit će samo korisnike koji nisu pročitali poruku.", + "Thread title" : "Naslov niti", + "Send later" : "Pošalji kasnije", + "Show scheduled messages" : "Prikaži zakazane poruke", + "Cancel editing" : "Odustani od uređivanja", + "Schedule message" : "Zakaži poruku", + "{user} is out of office and might not respond." : "{user} je izvan ureda i možda neće odgovoriti.", + "Absence period: {startDate} - {endDate}" : "Razdoblje odsutnosti: {startDate} – {endDate}", + "Replacement:" : "Zamjena:", + "Share from {nextcloud}" : "Dijeli iz {nextcloud}", + "Share from Files" : "Dijeli iz datoteka", + "Share files to the conversation" : "Dijeli datoteke u razgovor", + "Upload from device" : "Prenesi s uređaja", + "Create new poll" : "Stvori novu anketu", + "Smart picker" : "Pametni odabir", + "Record voice message" : "Snimi glasovnu poruku", + "End recording and send" : "Završi snimak i pošalji", + "Dismiss recording" : "Odbaci snimak", + "Access to the microphone was denied" : "Pristup mikrofonu je odbijen", + "Microphone either not available or disabled in settings" : "Mikrofon nije raspoloživ ili je onemogućen u postavkama", + "Error while recording audio" : "Pogreška tijekom snimanja zvuka", + "Voice message {time} ({conversation})" : "Glasovna poruka {time} ({conversation})", + "Generating summary of unread messages …" : "Generiranje sažetka nepročitanih poruka …", + "Summary is AI generated and might contain mistakes" : "Sažetak je generirala umjetna inteligencija i može sadržavati pogreške", + "Error occurred during a summary generation" : "Došlo je do pogreške tijekom generiranja sažetka", + "New file" : "Nova datoteka", + "Blank" : "Prazno", + "Error while creating file" : "Pogreška pri stvaranju datoteke", + "Create and share a new file" : "Stvori i podijeli novu datoteku", + "Name of the new file" : "Naziv nove datoteke", + "Create file" : "Stvori datoteku", + "Someone is typing …" : "Netko piše …", + "{user1} is typing …" : "{user1} piše …", + "{user1} and {user2} are typing …" : "{user1} i {user2} pišu …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} pišu …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i još %n osoba pišu …","{user1}, {user2}, {user3} i još %n osobe pišu …","{user1}, {user2}, {user3} i još %n osoba pišu …"], + "Add more files" : "Dodaj više datoteka", + "Send" : "Pošalji", + "In this conversation {user} can:" : "U ovom razgovoru {user} može:", + "Edit default permissions for participants in {conversationName}" : "Uredite zadana dopuštenja za sudionike u {conversationName}", + "Start a call" : "Uputi poziv", + "Skip the lobby" : "Preskoči predvorje", + "Can post messages" : "Može slati poruke", + "Can post messages and reactions" : "Može slati poruke i reakcije", + "Can add reactions" : "Može dodavati reakcije", + "Enable the microphone" : "Omogućite mikrofon", + "Enable the camera" : "Omogućite kameru", + "Share the screen" : "Dijelite zaslon", + "Update permissions" : "Ažuriraj dopuštenja", + "Updating permissions" : "Ažuriranje dopuštenja", + "No poll drafts" : "Nema skica anketa", + "There is no poll drafts yet saved for this conversation" : "Još nema spremljenih skica anketa za ovaj razgovor", + "Create poll in {name}" : "Stvori anketu u {name}", + "Create poll" : "Stvori anketu", + "Error while importing poll" : "Pogreška pri uvozu ankete", + "Question" : "Pitanje", + "Ask a question" : "Postavite pitanje", + "Import draft from file" : "Uvezi skicu iz datoteke", + "Answers" : "Odgovori", + "Answer {option}" : "Odgovor {option}", + "Delete poll option" : "Izbriši opciju ankete", + "Add answer" : "Dodaj odgovor", + "Settings" : "Postavke", + "Anonymous poll" : "Anonimna anketa", + "Multiple answers" : "Više odgovora", + "Save as draft" : "Spremi kao skicu", + "Export draft to file" : "Izvezi skicu u datoteku", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konačni rezultati • %n glas","Konačni rezultati • %n glasa","Konačni rezultati • %n glasova"], + "Your vote is anonymous" : "Vaš glas je anoniman", + "You voted for this option" : "Glasali ste za ovu opciju", + "End poll" : "Završi anketu", + "Change your vote" : "Promijeni glas", + "Withdraw vote" : "Povuci glas", + "Results" : "Rezultati", + "Voted participants" : "Sudionici koji su glasali", + "Send a message to \"{roomName}\"" : "Pošalji poruku u \"{roomName}\"", + "Hide list of participants" : "Sakrij popis sudionika", + "Show list of participants" : "Prikaži popis sudionika", + "Assistance requested in {roomName}" : "Zatražena je pomoć u {roomName}", + "The message was sent to \"{roomName}\"" : "Poruka je poslana u \"{roomName}\"", + "Dismiss request for assistance" : "Odbaci zahtjev za pomoć", + "Send message to room" : "Pošalji poruku u sobu", + "Back to main room" : "Natrag u glavnu sobu", + "Back to your room" : "Natrag u vašu sobu", + "Message all rooms" : "Poruka svim sobama", + "Start session" : "Pokreni sesiju", + "Start a call before you start a breakout room session" : "Pokrenite poziv prije nego što pokrenete sesiju soba za odvajanje", + "Stop session" : "Zaustavi sesiju", + "The message was sent to all breakout rooms" : "Poruka je poslana u sve sobe za odvajanje", + "Send a message to all breakout rooms" : "Pošalji poruku u sve sobe za odvajanje", + "Breakout rooms are not started" : "Sobe za odvajanje nisu pokrenute", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Pozivi bez visokoučinkovitog pozadinskog sustava mogu uzrokovati probleme s povezivošću i veliko opterećenje uređaja. {linkstart}Saznajte više{linkend}", + "Talk setup incomplete" : "Postavljanje Talka nije dovršeno", + "Disable lobby" : "Onemogući predvorje", + "Settings for participant \"{user}\"" : "Postavke sudionika „{user}”", + "Participant \"{user}\"" : "Sudionik „{user}”", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gost", + "Ringing …" : "Zvoni …", + "Call rejected" : "Poziv je odbijen", + "{time} talking …" : "{time} razgovor …", + "{time} talking time" : "{time} vrijeme razgovora", + "Raised their hand" : "Podigli ruke", + "Joined with video" : "Pridružen putem videoveze", + "Joined via phone" : "Pridružen putem telefona", + "Joined with audio" : "Pridružen putem audioveze", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Tekst mora imati najviše {maxLength} znakova. Vaš trenutačni tekst ima {charactersCount} znakova.", + "Remove group and members" : "Ukloni grupu i članove", + "Remove team and members" : "Ukloni tim i članove", + "Remove participant" : "Ukloni sudionika", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Želite li zaista ukloniti grupu \"{displayName}\" i njezine članove iz ovog razgovora?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Želite li zaista ukloniti tim \"{displayName}\" i njegove članove iz ovog razgovora?", + "Do you really want to remove {displayName} from this conversation?" : "Želite li zaista ukloniti {displayName} iz ovog razgovora?", + "Notification was sent to {displayName}" : "Obavijest je poslana korisniku {displayName}", + "Could not send notification to {displayName}" : "Nije moguće poslati obavijest korisniku {displayName}", + "Permissions granted to {displayName}" : "Dopuštenja dodijeljena {displayName}", + "Could not modify permissions for {displayName}" : "Nije moguće izmijeniti dopuštenja za {displayName}", + "Permissions removed for {displayName}" : "Uklonjena su dopuštenja za {displayName}", + "Permissions set to default for {displayName}" : "Dopuštenja su vraćena na zadana za {displayName}", + "Phone number could not be hung up" : "Telefonski broj nije moguće prekinuti", + "Phone number could not be put on hold" : "Telefonski broj nije moguće staviti na čekanje", + "Phone number could not be muted" : "Telefonski broj nije moguće utišati", + "Phone number could not be unmuted" : "Telefonski broj nije moguće uključiti", + "DTMF message could not be sent" : "Nije moguće poslati DTMF poruku", + "Phone number copied to clipboard" : "Telefonski broj je kopiran u međuspremnik", + "Phone number could not be copied" : "Telefonski broj nije moguće kopirati", + "in the lobby" : "u predvorju", + "Dial out phone" : "Biraj prema van", + "Hang up phone" : "Prekini poziv", + "Move back to lobby" : "Vrati u predvorje", + "Move to conversation" : "Premjesti u razgovor", + "Dial-in PIN" : "PIN za povezivanje putem telefona", + "Demote from moderator" : "Ukloni moderatora", + "Promote to moderator" : "Unaprijedi u moderatora", + "Resend invitation" : "Ponovno pošalji pozivnicu", + "Send call notification" : "Pošalji obavijest o pozivu", + "Dial out phone number" : "Biraj telefonski broj prema van", + "Resume call for phone number" : "Nastavi poziv za telefonski broj", + "Put phone number on hold" : "Stavi telefonski broj na čekanje", + "Unmute phone number" : "Uključi telefonski broj", + "Mute phone number" : "Utišaj telefonski broj", + "Copy phone number" : "Kopiraj telefonski broj", + "Reset custom permissions" : "Poništi prilagođena dopuštenja", + "Grant all permissions" : "Dodijeli sva dopuštenja", + "Remove all permissions" : "Ukloni sva dopuštenja", + "Also ban from this conversation" : "Također zabrani u ovom razgovoru", + "Internal note (reason to ban)" : "Interna bilješka (razlog zabrane)", + "Remove" : "Ukloni", + "Permissions modified for {displayName}" : "Izmijenjena su dopuštenja za {displayName}", + "Add users, groups or teams" : "Dodaj korisnike, grupe ili timove", + "Add users or groups" : "Dodaj korisnike ili grupe", + "Add users or teams" : "Dodaj korisnike ili timove", + "Add users" : "Dodaj korisnike", + "Add groups or teams" : "Dodaj grupe ili timove", + "Add groups" : "Dodaj grupe", + "Add teams" : "Dodaj timove", + "Add other sources" : "Dodaj druge izvore", + "Add emails" : "Dodaj adrese e-pošte", + "Integrations" : "Integracije", + "Add federated users" : "Dodaj udružene korisnike", + "Searching …" : "Traženje…", + "Search for more users" : "Potraži još korisnika", + "You can search or add participants via name, email, or Federated Cloud ID" : "Možete pretraživati ili dodati sudionike prema imenu, e-pošti ili udruženom ID-u oblaka", + "Search or add participants" : "Traži ili dodaj sudionike", + "Invitation was sent to {actorId}" : "Pozivnica je poslana korisniku {actorId}", + "An error occurred while adding the participants" : "Došlo je do pogreške pri dodavanju sudionika", + "A new group conversation with selected participant will be created" : "Stvorit će se novi grupni razgovor s odabranim sudionikom", + "Participants" : "Sudionici", + "Pinned by a deleted user" : "Prikvačio obrisani korisnik", + "Participants ({count})" : "Sudionici ({count})", + "Open chat" : "Otvori prozor za razmjenu poruka", + "You have new unread messages in the chat." : "Imate nove nepročitane poruke u prozoru za razmjenu poruka.", + "You have been mentioned in the chat." : "Spomenuti ste u razmijenjenim porukama.", + "Search messages" : "Pretraži poruke", + "Chat" : "Razmjena poruka", + "Details" : "Pojedinosti", + "Shared items" : "Dijeljene stavke", + "Search in {name}" : "Pretraži u {name}", + "Threads in {name}" : "Niti u {name}", + "{actor} in {conversation}" : "{actor} u {conversation}", + "Search messages …" : "Pretraživanje poruka …", + "Search options" : "Mogućnosti pretraživanja", + "From User" : "Od korisnika", + "Since" : "Od", + "Until" : "Do", + "No results found" : "Nema rezultata", + "Load more results" : "Učitaj više rezultata", + "Recent threads" : "Nedavne niti", + "Projects" : "Projekti", + "No shared items" : "Nema dijeljenih stavki", + "Thread notifications" : "Obavijesti niti", + "Thread actions" : "Radnje niti", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Poveznica za sudjelovanje u razgovoru", + "No open conversations found" : "Nisu pronađeni otvoreni razgovori", + "Either there are no open conversations or you joined all of them." : "Ili nema otvorenih razgovora ili ste se pridružili svima.", + "Check spelling or use complete words." : "Provjerite pravopis ili upotrijebite cijele riječi.", + "Search conversations or users" : "Pretraži razgovore ili korisnike", + "Select conversation" : "Odaberi razgovor", + "Number length is not valid" : "Duljina broja nije valjana", + "Region code is not valid" : "Pozivni broj regije nije valjan", + "Number length is too short" : "Duljina broja je prekratka", + "Number length is too long" : "Duljina broja je preduga", + "Number is not valid" : "Broj nije valjan", + "Phone numbers" : "Telefonski brojevi", + "Display name: {name}" : "Prikazano ime: {name}", + "Edit display name" : "Uredi prikazano ime", + "Display name (required)" : "Prikazano ime (obvezno)", + "Save name" : "Spremi ime", + "I picked message bubbles" : "Odabrao sam oblačiće poruka", + "I picked the list style" : "Odabrao sam stil popisa", + "Error while setting personal setting" : "Pogreška pri postavljanju osobne postavke", + "Error while saving sounds setting" : "Pogreška pri spremanju postavke zvukova", + "Compact conversations list" : "Kompaktni popis razgovora", + "Chat appearance" : "Izgled chata", + "Messages list" : "Popis poruka", + "Message bubbles" : "Oblačići poruka", + "Play sounds when participants join or leave a call" : "Reproduciraj zvukove kad se sudionici pridruže ili napuste poziv", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Trenutačno nije dostupno na iPhoneu i iPadu zbog tehničkih ograničenja proizvođača", + "Notification settings" : "Postavke obavijesti", + "Sounds for chat and call notifications" : "Zvukovi za obavijesti chata i poziva", + "Invalid language ({languageId})" : "Neispravan jezik ({languageId})", + "Default language" : "Zadani jezik", + "Default language ({languageName})" : "Zadani jezik ({languageName})", + "Error when trying to load the available live translation languages" : "Pogreška pri učitavanju dostupnih jezika za prijevod uživo", + "Error when trying to set live translation language" : "Pogreška pri postavljanju jezika prijevoda uživo", + "Set language used to show the transcriptions" : "Postavi jezik za prikaz pretvorenih tekstova", + "Select location for attachments" : "Odaberite lokaciju privitaka", + "Error while setting attachment folder" : "Pogreška pri postavljanju mape za privitke", + "Error while setting read status privacy" : "Pogreška pri postavljanju privatnosti statusa čitanja", + "Error while setting typing status privacy" : "Pogreška pri postavljanju privatnosti statusa tipkanja", + "Error while setting default media state" : "Pogreška pri postavljanju zadanog stanja medija", + "Turn camera and microphone off by default" : "Zadano isključi kameru i mikrofon", + "Blur camera background by default" : "Zadano zamuti pozadinu kamere", + "Skip device preview before joining a call" : "Preskoči pregled uređaja prije pridruživanja pozivu", + "Appearance & Sounds" : "Izgled i zvukovi", + "Privacy" : "Privatnost", + "Send read receipts" : "Šalji potvrde čitanja", + "When off, all read statuses will be hidden" : "Ako je isključeno, svi statusi čitanja bit će skriveni", + "Share typing status" : "Dijeli status tipkanja", + "When off, all typing indicators will be hidden" : "Ako je isključeno, svi indikatori tipkanja bit će skriveni", + "Attachments folder" : "Mapa s privicima", + "Toggle full screen" : "Uključi/isključi prikaz preko cijelog zaslona", + "Return to Home screen" : "Vrati se na početni zaslon", + "Search" : "Traži", + "Shortcuts while in a chat" : "Prečaci u chatu", + "Focus the chat input" : "Fokusirajte ulazne poruke", + "Unfocus the chat input to use shortcuts" : "Odfokusirajte ulazne poruke kako biste iskoristili prečace", + "Edit your last message" : "Uredi svoju posljednju poruku", + "Shortcuts while in a call" : "Prečaci tijekom poziva", + "Camera on and off" : "Uključi/isključi kameru", + "Microphone on and off" : "Mikrofon uključen i isključen", + "Raise or lower hand" : "Podigni ili spusti ruku", + "Push to talk or push to mute" : "Pritisni za govor ili pritisni za utišavanje", + "Zoom-in / zoom-out a screen share" : "Povećaj / smanji dijeljenje zaslona", + "Mouse wheel" : "Kotačić miša", + "Start call silently" : "Pokreni poziv tiho", + "Start call" : "Uputi poziv", + "End call" : "Završi poziv", + "The server was updated, you cannot start or join a call." : "Poslužitelj je ažuriran, ne možete pokrenuti ni pridružiti se pozivu.", + "This call has just ended" : "Ovaj je poziv upravo završio", + "You will be able to join the call only after a moderator starts it." : "Pozivu ćete se moći pridružiti tek nakon što ga moderator pokrene.", + "End call for everyone" : "Završi poziv za sve", + "Starting the recording" : "Pokretanje snimanja", + "Recording" : "Snimanje", + "The call has been running for one hour." : "Poziv traje već jedan sat.", + "Cancel recording start" : "Otkaži pokretanje snimanja", + "Stop recording" : "Zaustavi snimanje", + "Send a reaction" : "Pošalji reakciju", + "React with {reaction}" : "Reagiraj s {reaction}", + "All tasks done!" : "Svi zadaci su dovršeni!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} od %n zadatka","{done} od %n zadatka","{done} od %n zadataka"], + "Add participants to this call" : "Dodaj sudionike u ovaj poziv", + "_%n participant in call_::_%n participants in call_" : ["%n sudionik u pozivu","%n sudionika u pozivu","%n sudionika u pozivu"], + "Scheduled messages" : "Zakazane poruke", + "You are not allowed to enable screensharing" : "Nije vam dopušteno omogućiti dijeljenje zaslona", + "No screensharing" : "Nema dijeljenja zaslona", + "Screensharing options" : "Mogućnosti dijeljenja zaslona", + "Enable screensharing" : "Omogući dijeljenje zaslona", + "Bad sent video and screen quality." : "Nekvalitetan videozapis i prikaz.", + "Bad sent screen quality." : "Nekvalitetan prikaz.", + "Bad sent video quality." : "Nekvalitetan videozapis.", + "Bad sent audio, video and screen quality." : "Nekvalitetan audiozapis, videozapis i prikaz.", + "Bad sent audio and screen quality." : "Nekvalitetan audiozapis i prikaz.", + "Bad sent audio and video quality." : "Nekvalitetan audiozapis i videozapis.", + "Bad sent audio quality." : "Nekvalitetan audiozapis.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaša internetska veza ili računalo su opterećeni pa drugi sudionici možda neće moći vidjeti vaš zaslon. Kako biste poboljšali situaciju, pokušajte isključiti zamućenje pozadine ili svoj video tijekom dijeljenja zaslona.", + "Disable background blur" : "Onemogući zamućenje pozadine", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa drugi sudionici možda neće vidjeti vaš zaslon. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaša internetska veza ili računalo je zauzeto pa drugi sudionici možda neće vidjeti vaš zaslon.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti zamućenje pozadine ili prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti niti vidjeti vaš zaslon. Kako biste otklonili poteškoće, pokušajte onemogućiti dijeljenje zaslona.", + "Disable screenshare" : "Onemogući dijeljenje zaslona", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti zamućenje pozadine ili prijenos videozapisa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće razumjeti.", + "Screen sharing is not supported by your browser." : "Vaš preglednik ne podržava dijeljenje zaslona.", + "Screen sharing requires the page to be loaded through HTTPS." : "Dijeljenje zaslona zahtijeva učitavanje stranice putem HTTPS-a.", + "Screensharing requires the page to be loaded through HTTPS." : "Dijeljenje zaslona zahtijeva učitavanje stranice putem HTTPS-a.", + "An error occurred while starting screensharing." : "Došlo je do pogreške pri pokretanju dijeljenja zaslona.", + "Select virtual background" : "Odaberite virtualnu pozadinu", + "Show your screen" : "Pokaži svoj zaslon", + "Stop screensharing" : "Prekini dijeljenje zaslona", + "Mute others" : "Utišaj druge", + "Start recording" : "Započni snimanje", + "Set up breakout rooms" : "Postavi sobe za odvajanje", + "Download attendance list" : "Preuzmi popis prisutnosti", + "Open Calendar" : "Otvori Kalendar", + "Remove participant {name}" : "Ukloni sudionika {name}", + "Would you like to delete this conversation?" : "Želite li izbrisati ovaj razgovor?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ovaj će razgovor biti automatski izbrisan za sve nakon %n dan neaktivnosti.","Ovaj će razgovor biti automatski izbrisan za sve nakon %n dana neaktivnosti.","Ovaj će razgovor biti automatski izbrisan za sve nakon %n dana neaktivnosti."], + "Are you sure you want to delete this conversation?" : "Jeste li sigurni da želite izbrisati ovaj razgovor?", + "Delete now" : "Izbriši odmah", + "Keep" : "Zadrži", + "Open dialpad" : "Otvori tipkovnicu za biranje", + "Select a region" : "Odaberite regiju", + "Local time: {time}" : "Lokalno vrijeme: {time}", + "Scheduled {datetime}" : "Zakazano {datetime}", + "Scheduled for {datetime}" : "Zakazano za {datetime}", + "Search …" : "Traži …", + "Message without mention" : "Poruka bez spominjanja", + "Mention myself" : "Spomeni sebe", + "Mention everyone" : "Spomeni sve", + "Select a conversation" : "Odaberite razgovor", + "Select a mode" : "Odaberite način", + "You do not have permissions to access this conversation." : "Nemate dopuštenja za pristup ovom razgovoru.", + "Join a different conversation or start a new one." : "Pridružite se drugom razgovoru ili pokrenite novi.", + "The conversation does not exist" : "Razgovor ne postoji", + "Join a conversation or start a new one!" : "Pridružite se razgovoru ili započnite novi!", + "Duplicate session" : "Udvostruči sesiju", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ovaj razgovor je otvoren u drugoj kartici. Trenutna verzija poslužitelja ne podržava otvaranje razgovora u više kartica.", + "Creating and joining a conversation with \"{userid}\"" : "Stvaranje i pridruživanje razgovoru s \"{userid}\"", + "Join a conversation or start a new one" : "Pridružite se razgovoru ili započnite novi", + "Error while joining the conversation" : "Pogreška pri pridruživanju razgovoru", + "Another user" : "Drugi korisnik", + "Hey! Are you using the list style or message bubbles?" : "Hej! Koristite li prikaz u obliku popisa ili oblačiće poruka?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud korisnik", + "User password" : "Korisnička lozinka", + "Talk conversation" : "Razgovori u alatu Talk", + "Skip TLS verification" : "Preskoči TLS provjeru", + "Matrix server URL" : "URL poslužitelja Matrix", + "User" : "Korisnik", + "Matrix channel" : "Matrix kanal", + "Mattermost server URL" : "URL poslužitelja Mattermost", + "Mattermost user" : "Mattermost korisnik", + "Team name" : "Naziv tima", + "Channel name" : "Naziv kanala", + "Rocket.Chat server URL" : "URL poslužitelja Rocket.Chat", + "User name or email address" : "Korisničko ime ili adresa e-pošte", + "Rocket.Chat channel" : "Rocket.Chat kanal", + "Zulip server URL" : "URL poslužitelja Zulip", + "Bot user name" : "Korisničko ime Bota", + "Bot API key" : "Ključ API-ja Bot", + "Zulip channel" : "Zulip kanal", + "API token" : "API token", + "Slack channel" : "Slack kanal", + "Server ID or name" : "ID ili naziv poslužitelja", + "Channel ID (prefixed with \"ID:\") or name" : "ID kanala (s prefiksom \"ID:\") ili naziv", + "Channel" : "Kanal", + "Login" : "Prijava", + "Chat ID" : "ID alata za razmjenu poruka", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC poslužitelja (npr. chat.freenode.net:6667)", + "Nickname" : "Nadimak", + "Connection password" : "Lozinka veze", + "IRC channel" : "IRC kanal", + "Channel password" : "Lozinka za kanal", + "NickServ nickname" : "NickServ nadimak", + "NickServ password" : "NickServ lozinka", + "Use TLS" : "Koristi TLS", + "Use SASL" : "Koristi SASL", + "Tenant ID" : "ID stanara", + "Client ID" : "ID klijenta", + "Team ID" : "ID tima", + "Thread ID" : "ID dretve", + "XMPP/Jabber server URL" : "URL poslužitelja XMPP/Jabber", + "MUC server URL" : "URL poslužitelja MUC", + "Jabber ID" : "ID Jabbera", + "Pinned messages" : "Prikvačene poruke", + "Media" : "Medij", + "Polls" : "Ankete", + "Deck cards" : "Deck kartice", + "Voice messages" : "Glasovne poruke", + "Locations" : "Lokacije", + "Call recordings" : "Snimke poziva", + "Audio" : "Audio", + "Show all pinned messages" : "Prikaži sve prikvačene poruke", + "Show all media" : "Prikaži sve medijske datoteke", + "Show all files" : "Prikaži sve datoteke", + "Show all polls" : "Prikaži sve ankete", + "Show all deck cards" : "Prikaži sve Deck kartice", + "Show all voice messages" : "Prikaži sve glasovne poruke", + "Show all locations" : "Prikaži sve lokacije", + "Show all call recordings" : "Prikaži sve snimke poziva", + "Show all audio" : "Prikaži sve zvukove", + "Show all other" : "Prikaži sve ostalo", + "Follow conversation settings" : "Slijedi postavke razgovora", + "Group" : "Grupa", + "Team" : "Tim", + "You reconnected to the call" : "Ponovno ste se povezali na poziv", + "{actor} reconnected to the call" : "{actor} se ponovno povezao na poziv", + "You added {user0} and {user1}" : "Dodali ste {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Dodali ste {user0}, {user1} i još %n sudionika","Dodali ste {user0}, {user1} i još %n sudionika","Dodali ste {user0}, {user1} i još %n sudionika"], + "An administrator added you and {user0}" : "Administrator je dodao vas i {user0}", + "{actor} added you and {user0}" : "{actor} je dodao vas i {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrator je dodao vas, {user0} i još %n sudionika","Administrator je dodao vas, {user0} i još %n sudionika","Administrator je dodao vas, {user0} i još %n sudionika"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} je dodao vas, {user0} i još %n sudionika","{actor} je dodao vas, {user0} i još %n sudionika","{actor} je dodao vas, {user0} i još %n sudionika"], + "An administrator added {user0} and {user1}" : "Administrator je dodao {user0} i {user1}", + "{actor} added {user0} and {user1}" : "{actor} je dodao {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrator je dodao {user0}, {user1} i još %n sudionika","Administrator je dodao {user0}, {user1} i još %n sudionika","Administrator je dodao {user0}, {user1} i još %n sudionika"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} je dodao {user0}, {user1} i još %n sudionika","{actor} je dodao {user0}, {user1} i još %n sudionika","{actor} je dodao {user0}, {user1} i još %n sudionika"], + "You removed {user0} and {user1}" : "Uklonili ste {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Uklonili ste {user0}, {user1} i još %n sudionika","Uklonili ste {user0}, {user1} i još %n sudionika","Uklonili ste {user0}, {user1} i još %n sudionika"], + "An administrator removed you and {user0}" : "Administrator je uklonio vas i {user0}", + "{actor} removed you and {user0}" : "{actor} je uklonio vas i {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrator je uklonio vas, {user0} i još %n sudionika","Administrator je uklonio vas, {user0} i još %n sudionika","Administrator je uklonio vas, {user0} i još %n sudionika"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} je uklonio vas, {user0} i još %n sudionika","{actor} je uklonio vas, {user0} i još %n sudionika","{actor} je uklonio vas, {user0} i još %n sudionika"], + "An administrator removed {user0} and {user1}" : "Administrator je uklonio {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} je uklonio {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrator je uklonio {user0}, {user1} i još %n sudionika","Administrator je uklonio {user0}, {user1} i još %n sudionika","Administrator je uklonio {user0}, {user1} i još %n sudionika"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} je uklonio {user0}, {user1} i još %n sudionika","{actor} je uklonio {user0}, {user1} i još %n sudionika","{actor} je uklonio {user0}, {user1} i još %n sudionika"], + "You and {user0} joined the call" : "Vi i {user0} pridružili ste se pozivu", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vi, {user0} i još %n sudionik pridružili ste se pozivu","Vi, {user0} i još %n sudionika pridružili ste se pozivu","Vi, {user0} i još %n sudionika pridružili ste se pozivu"], + "{user0} and {user1} joined the call" : "{user0} i {user1} pridružili su se pozivu", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i još %n sudionik pridružili su se pozivu","{user0}, {user1} i još %n sudionika pridružili su se pozivu","{user0}, {user1} i još %n sudionika pridružili su se pozivu"], + "You and {user0} left the call" : "Vi i {user0} napustili ste poziv", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vi, {user0} i još %n sudionik napustili ste poziv","Vi, {user0} i još %n sudionika napustili ste poziv","Vi, {user0} i još %n sudionika napustili ste poziv"], + "{user0} and {user1} left the call" : "{user0} i {user1} napustili su poziv", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i još %n sudionik napustili su poziv","{user0}, {user1} i još %n sudionika napustili su poziv","{user0}, {user1} i još %n sudionika napustili su poziv"], + "You promoted {user0} and {user1} to moderators" : "Postavili ste {user0} i {user1} za moderatore", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Postavili ste {user0}, {user1} i još %n sudionika za moderatore","Postavili ste {user0}, {user1} i još %n sudionika za moderatore","Postavili ste {user0}, {user1} i još %n sudionika za moderatore"], + "An administrator promoted you and {user0} to moderators" : "Administrator je postavio vas i {user0} za moderatore", + "{actor} promoted you and {user0} to moderators" : "{actor} je postavio vas i {user0} za moderatore", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrator je postavio vas, {user0} i još %n sudionika za moderatore","Administrator je postavio vas, {user0} i još %n sudionika za moderatore","Administrator je postavio vas, {user0} i još %n sudionika za moderatore"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} je postavio vas, {user0} i još %n sudionika za moderatore","{actor} je postavio vas, {user0} i još %n sudionika za moderatore","{actor} je postavio vas, {user0} i još %n sudionika za moderatore"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrator je postavio {user0} i {user1} za moderatore", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} je postavio {user0} i {user1} za moderatore", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore","Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore","Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore","{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore","{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore"], + "You demoted {user0} and {user1} from moderators" : "Uklonili ste {user0} i {user1} s uloge moderatora", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora","Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora","Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora"], + "An administrator demoted you and {user0} from moderators" : "Administrator je uklonio vas i {user0} s uloge moderatora", + "{actor} demoted you and {user0} from moderators" : "{actor} je uklonio vas i {user0} s uloge moderatora", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora","Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora","Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora","{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora","{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrator je uklonio {user0} i {user1} s uloge moderatora", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} je uklonio {user0} i {user1} s uloge moderatora", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora"], + "You:" : "Vi:", + "You: {lastMessage}" : "Vi: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Poslužitelj je ažuriran.", + "(edited by you)" : "(uredili ste vi)", + "(edited by a deleted user)" : "(uredio obrisani korisnik)", + "(edited by {moderator})" : "(uredio {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pokušavate se pridružiti razgovoru dok imate otvorenu sesiju u drugom prozoru ili na drugom uređaju. Nextcloud Talk trenutačno ne podržava tu radnju. Što želite učiniti?", + "Leave this page" : "Napusti ovu stranicu", + "Join here" : "Pridruži se ovdje", + "Deck card has been posted to {conversation}" : "Deck kartica je objavljena u {conversation}", + "An error occurred while posting deck card to conversation" : "Došlo je do pogreške pri objavi Deck kartice u razgovor", + "Post to a conversation" : "Objavite u razgovoru", + "Post to conversation" : "Objavi u razgovoru", + "The recording failed. Please contact your administrator." : "Snimanje nije uspjelo. Obratite se administratoru.", + "Location has been posted to {conversation}" : "Lokacija je objavljena u {conversation}", + "An error occurred while posting location to conversation" : "Došlo je do pogreške pri objavi lokacije u razgovor", + "Share to a conversation" : "Podijeli u razgovor", + "Share to conversation" : "Podijeli u razgovor", + "In conversation" : "U razgovoru", + "Search in conversation: {conversation}" : "Pretraži u razgovoru: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vaši su zahtjevi trenutačno ograničeni zbog zaštite od brute force napada", + "Error while clearing conversation history" : "Pogreška pri brisanju povijesti razgovora", + "Error occurred while allowing guests" : "Došlo je do pogreške pri omogućavanju pristupa gostima", + "Error occurred while disallowing guests" : "Došlo je do pogreške pri onemogućavanju pristupa gostima", + "Error occurred when restricting the conversation to moderator" : "Došlo je do pogreške pri ograničavanju razgovora samo na moderatore", + "Error occurred when opening the conversation to everyone" : "Došlo je do pogreške pri otvaranju razgovora svima", + "Conversation password has been saved" : "Zaporka razgovora je spremljena", + "Conversation password has been removed" : "Zaporka razgovora je uklonjena", + "Error occurred while saving conversation password" : "Došlo je do pogreške pri spremanju zaporke razgovora", + "Call recording is starting." : "Snimanje poziva započinje.", + "Call recording stopped while starting." : "Snimanje poziva je zaustavljeno tijekom pokretanja.", + "Call recording stopped. You will be notified once the recording is available." : "Snimanje poziva je zaustavljeno. Bit ćete obaviješteni kada snimka bude dostupna.", + "Conversation picture set" : "Slika razgovora je postavljena", + "Conversation picture deleted" : "Slika razgovora je obrisana", + "Could not delete the conversation picture" : "Nije moguće obrisati sliku razgovora", + "Could not remove the automatic expiration" : "Nije moguće ukloniti automatsko istjecanje", + "Could not post message: {errorMessage}" : "Nije moguće objaviti poruku: {errorMessage}", + "Participant is banned successfully" : "Sudionik je uspješno zabranjen", + "Error while banning the participant" : "Pogreška pri zabrani sudionika", + "An error occurred while fetching the participants" : "Došlo je do pogreške pri dohvaćanju sudionika", + "Could not send invitation to {actorId}" : "Nije moguće poslati pozivnicu za {actorId}", + "Invitations sent" : "Pozivnice su poslane", + "Error occurred when sending invitations" : "Došlo je do pogreške pri slanju pozivnica", + "Failed to join the conversation." : "Nije se uspjelo pridružiti razgovoru.", + "An error occurred while creating breakout rooms" : "Došlo je do pogreške pri stvaranju soba za odvajanje", + "An error occurred while re-ordering the attendees" : "Došlo je do pogreške pri promjeni redoslijeda sudionika", + "An error occurred while deleting breakout rooms" : "Došlo je do pogreške pri brisanju soba za odvajanje", + "An error occurred while starting breakout rooms" : "Došlo je do pogreške pri pokretanju soba za odvajanje", + "An error occurred while stopping breakout rooms" : "Došlo je do pogreške pri zaustavljanju soba za odvajanje", + "An error occurred while sending a message to the breakout rooms" : "Došlo je do pogreške pri slanju poruke u sobe za odvajanje", + "An error occurred while requesting assistance" : "Došlo je do pogreške pri traženju pomoći", + "An error occurred while resetting the request for assistance" : "Došlo je do pogreške pri poništavanju zahtjeva za pomoć", + "An error occurred while joining breakout room" : "Došlo je do pogreške pri pridruživanju sobi za odvajanje", + "Failed to rename the thread" : "Nije uspjelo preimenovati nit", + "Error fetching upcoming events" : "Pogreška pri dohvaćanju nadolazećih događaja", + "Error fetching upcoming reminders" : "Pogreška pri dohvaćanju nadolazećih podsjetnika", + "An error occurred while accepting an invitation" : "Došlo je do pogreške pri prihvaćanju pozivnice", + "An error occurred while rejecting an invitation" : "Došlo je do pogreške pri odbijanju pozivnice", + "{guest} (guest)" : "{guest} (gost)", + "Poll draft has been saved" : "Skica ankete je spremljena", + "An error occurred while saving the draft" : "Došlo je do pogreške pri spremanju skice", + "An error occurred while submitting your vote" : "Došlo je do pogreške pri slanju vašeg glasa", + "An error occurred while ending the poll" : "Došlo je do pogreške pri završavanju ankete", + "An error occurred while deleting the poll draft" : "Došlo je do pogreške pri brisanju skice ankete", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketu \"{name}\" stvorio je {user}. Kliknite za glasanje", + "Failed to add reaction" : "Nije uspjelo dodati reakciju", + "Failed to remove reaction" : "Nije uspjelo ukloniti reakciju", + "The server is in maintenance mode." : "Poslužitelj je u načinu održavanja.", + "Federated server was updated." : "Udruženi poslužitelj je ažuriran.", + "Error while uploading file \"{fileName}\"" : "Pogreška pri otpremanju datoteke „{fileName}”", + "Not enough free space to upload file \"{fileName}\"" : "Nema dovoljno slobodnog prostora za otpremanje datoteke „{fileName}”", + "You are not allowed to share files" : "Nije vam dopušteno dijeliti datoteke", + "Error while sharing file" : "Pogreška pri dijeljenju datoteke", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk ne podržava trenutni preglednik. Preuzmite najnoviju inačicu preglednika Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ili Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Za %n sat","Za %n sata","Za %n sati"], + "_%n minute _::_%n minutes_" : ["%n minuta","%n minute","%n minuta"], + "In {hours} and {minutes}" : "Za {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["Za %n minutu","Za %n minute","Za %n minuta"], + "Later today – {timeLocale}" : "Kasnije danas – {timeLocale}", + "Set time for later today" : "Postavi vrijeme za kasnije danas", + "Tomorrow – {timeLocale}" : "Sutra – {timeLocale}", + "Set time for tomorrow" : "Postavi vrijeme za sutra", + "This weekend – {timeLocale}" : "Ovaj vikend – {timeLocale}", + "Set time for this weekend" : "Postavi vrijeme za ovaj vikend", + "Next week – {timeLocale}" : "Sljedeći tjedan – {timeLocale}", + "Set time for next week" : "Postavi vrijeme za sljedeći tjedan", + "Message link copied to clipboard" : "Poveznica iz poruke kopirana je u međuspremnik", + "Conversation link copied to clipboard" : "Poveznica razgovora kopirana je u međuspremnik", + "The link could not be copied" : "Poveznicu nije moguće kopirati", + "Error while parsing a PROPFIND error" : "Pogreška pri obradi PROPFIND pogreške", + "Sending signaling message has failed" : "Slanje signalne poruke nije uspjelo", + "Lost connection to signaling server. Trying to reconnect." : "Veza sa signalnim poslužiteljem je prekinuta. Pokušavam se ponovno povezati.", + "Lost connection to signaling server." : "Izgubljena je veza sa signalnim poslužiteljem.", + "Connecting is taking longer than expected …" : "Povezivanje traje dulje nego što se očekivalo …", + "Failed to connect. Retrying …" : "Povezivanje nije uspjelo. Pokušavam ponovno …", + "Failed to connect. The signaling server may be set up incorrectly" : "Povezivanje nije uspjelo. Signalni poslužitelj možda je pogrešno postavljen", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Konfigurirani signalni poslužitelj mora se ažurirati kako bi bio kompatibilan s ovom verzijom Talka. Obratite se administraciji.", + "Please restart the app." : "Ponovno pokrenite aplikaciju.", + "Please reload the page." : "Ponovno učitajte stranicu.", + "Please try to restart the app." : "Pokušajte ponovno pokrenuti aplikaciju.", + "Please try to reload the page." : "Pokušajte ponovno učitati stranicu.", + "Do not disturb" : "Ne ometaj", + "Away" : "Odsutan", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Zvučnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Pričate dok je utišan zvuk, isključite utišavanje zvuka kako bi vas čuli drugi sudionici razgovora", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nije uspostavljena veza s najmanje jednim sudionikom. Vjerojatno vam je potreban poslužitelj TURN. Obratite se svom administratoru i zatražite da omogući korištenje poslužitelja TURN u skladu s {linkstart}ovom dokumentacijom{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Radnja traje duže od očekivanog. Jesu li postavljena (ili odbijena) dopuštenja za pristupanje medijima? Ako jesu, ponovno pokrenite preglednik jer nema prijenosa zvuka i videosignala", + "Access to microphone & camera is only possible with HTTPS" : "Pristup mikrofonu i kameri moguć je samo putem HTTPS-a", + "Please move your setup to HTTPS" : "Prebacite postavku na HTTPS", + "Access to microphone & camera was denied" : "Pristup mikrofonu i kameri je odbijen", + "WebRTC is not supported in your browser" : "Vaš preglednik ne podržava WebRTC", + "Please use a different browser like Firefox or Chrome" : "Koristite se drugim preglednikom kao što je Firefox ili Chrome", + "Error while accessing microphone & camera" : "Došlo je do pogreške pri pristupanju mikrofonu i kameri", + "%s Talk on your mobile devices" : "%s aplikacija Talk na vašim mobilnim uređajima", + "Join conversations at any time, anywhere, on any device." : "Pridružite se razgovorima u bilo koje vrijeme, bilo gdje, na bilo kojem uređaju.", + "Android app" : "Aplikacija za Android", + "iOS app" : "Aplikacija za iOS", + "__language_name__" : "Hrvatski", + "Webhook Demo" : "Demo webhooka", + "Call summary (%s)" : "Sažetak poziva (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot za sažetak poziva objavljuje poruku s pregledom nakon poziva, navodi sve sudionike i ističe zadatke", + "Tasks" : "Zadaci", + "Notes" : "Bilješke", + "Reports" : "Izvješća", + "Decisions" : "Odluke", + "Agenda" : "Dnevni red", + "Call summary" : "Sažetak poziva", + "Call summary - {title}" : "Sažetak poziva – {title}", + "Talk conversation for event" : "Talk razgovor za događaj", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push je instaliran, što poboljšava performanse desktop klijenata.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nije instaliran, to može dovesti do problema s performansama pri korištenju desktop klijenata.", + "Next meeting" : "Sljedeći sastanak", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Zakažite sastanak iz svojeg kalendara. Talk razgovor mora biti postavljen kao lokacija da bi se ovdje prikazao", + "Join conversations from remote Nextcloud servers" : "Pridruži se razgovorima s udaljenih Nextcloud poslužitelja", + "Your default media state has been saved" : "Vaše zadano stanje medija je spremljeno", + "Set reminder for later today" : "Postavi podsjetnik za kasnije danas", + "Set reminder for tomorrow" : "Postavi podsjetnik za sutra", + "Set reminder for this weekend" : "Postavi podsjetnik za ovaj vikend", + "Set reminder for next week" : "Postavi podsjetnik na sljedeći tjedan", + "Generate summary" : "Generiraj sažetak", + "Open poll • You voted already" : "Otvorena anketa • Već ste glasali", + "Open poll • Click to vote" : "Otvorena anketa • Kliknite za glasanje", + "Poll • Ended" : "Anketa • Završena", + "Talk recording from {time} ({conversation})" : "Snimak iz aplikacije Talk od {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Rezultati ankete • %n glas","Rezultati ankete • %n glasa","Rezultati ankete • %n glasova"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otvorena anketa • %n glas","Otvorena anketa • %n glasa","Otvorena anketa • %n glasova"], + "Submit vote" : "Pošalji glas", + "Your privacy setting has been saved" : "Postavka privatnosti je spremljena", + "Your personal setting has been saved" : "Vaša osobna postavka je spremljena", + "Failed to save sounds setting" : "Spremanje postavki zvukova nije uspjelo", + "Sounds setting saved" : "Postavka zvukova je spremljena", + "Always shown if recording consent is required" : "Uvijek se prikazuje ako je potrebna privola za snimanje", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk je ažuriran; ne možete pokrenuti ni pridružiti se pozivu.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pridružili ste se razgovoru u drugom prozoru ili na drugom uređaju. Nextcloud Talk trenutačno ne podržava tu radnju pa je ova sesija zatvorena.", + "Nextcloud Talk was updated." : "Nextcloud Talk je ažuriran.", + "Nextcloud is in maintenance mode." : "Nextcloud je u načinu održavanja.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk udruženje je ažurirano.", + "Enable live translation" : "Omogući prijevod uživo", + "I picked list style" : "Odabrao sam stil popisa", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Koristite li Talk u prikazu popisa ili s oblačićima poruka?" +}, +"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;"); diff --git a/l10n/hr.json b/l10n/hr.json new file mode 100644 index 0000000..b587b67 --- /dev/null +++ b/l10n/hr.json @@ -0,0 +1,2243 @@ +{ "translations": { + "a conversation" : "razgovor", + "(Duration %s)" : "(Trajanje %s)", + "You attended a call with {user1}" : "Sudjelovali ste u pozivu s {user1}", + "_%n guest_::_%n guests_" : ["%n gost","%n gostiju","%n gostiju"], + "You attended a call with {user1} and {user2}" : "Sudjelovali ste u pozivu s {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Sudjelovali ste u pozivu s {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Sudjelovali ste u pozivu s {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Sudjelovali ste u pozivu s {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["još %n","još %n","još %n"], + "{actor} invited you to {call}" : "{actor} vas je pozvao u {call}", + "You were invited to a conversation or had a call" : "Pozvani ste u razgovor ili ste sudjelovali u pozivu", + "Other activities" : "Druge aktivnosti", + "Talk" : "Razgovor", + "Guest" : "Gost", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dobro došli u Nextcloud Talk!\nU ovom razgovoru bit ćete obaviješteni o novim značajkama dostupnima u Nextcloud Talku.", + "## New in Talk %s" : "## Novo u Talku %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Sada možete upotrebljavati Microsoft Edge i Safari za sudjelovanje u glasovnim i videopozivima", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Razgovori jedan na jedan sada su zaštićeni i više se ne mogu slučajno pretvoriti u grupne razgovore. Također se razgovor više ne briše automatski ako jedan od sudionika napusti razgovor. Razgovor se briše s poslužitelja samo ako ga napuste oba sudionika", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sada možete obavijestiti sve sudionike slanjem „@all” u prozor za razmjenu poruka", + "- With the \"arrow-up\" key you can repost your last message" : "- Možete ponovno objaviti posljednju poruku s pomoću tipke sa strelicom prema gore", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sada ima naredbe, unesite „/help” u prozor za razmjenu poruka kako biste vidjeli naredbe koje je konfigurirao vaš administrator", + "- With projects you can create quick links between conversations, files and other items" : "- Koristite se projektima za stvaranje brzih poveznica između razgovora, datoteka i drugih stavki", + "- You can now mention guests in the chat" : "- Sada možete navesti goste u prozoru za razmjenu poruka", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Razgovori sada mogu imati predvorje. To omogućuje moderatorima da se priključe razmjeni poruka i pozivima kako bi pripremili sastanak dok korisnici i gosti čekaju", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sada možete izravno odgovarati na poruke kako biste drugim korisnicima pružili dodatni kontekst za svoje poruke", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Značajka traženja razgovora i sudionika sada će filtrirati vaše postojeće razgovore radi lakšeg traženja prethodnih razgovora", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Sada možete dodati prilagođene grupe korisnika u razgovore ako je instalirana aplikacija za upravljanje krugovima", + "- Check out the new grid and call view" : "- Isprobajte nove prikaze rešetke i poziva", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sada možete otpremati i povlačiti datoteke izravno sa svog uređaja u prozor za razmjenu poruka", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Dijeljene datoteke sada možete otvarati izravno u prikazu za razmjenu poruka s pomoću odgovarajućih preglednika", + "- You can now search for chats and messages in the unified search in the top bar" : "- sada možete pretraživati poruke putem objedinjenog pretraživača u gornjoj traci", + "- Spice up your messages with emojis from the emoji picker" : "- začinite svoje poruke emojijima iz alata za odabir emojija", + "- You can now change your camera and microphone while being in a call" : "- sada možete promijeniti kameru i mikrofon tijekom poziva", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Predstavite svoje razgovore unosom opisa i otvorite ih kako bi ih prijavljeni korisnici mogli pronaći i pridružiti se", + "- See a read status and send failed messages again" : "- Prikaži status čitanja i ponovno pošalji neuspješne poruke", + "- Raise your hand in a call with the R key" : "- Podignite ruku u pozivu pritiskom gumba R", + "- Join the same conversation and call from multiple devices" : "- Pridružite se istom razgovoru i zovite s više uređaja", + "- Send voice messages, share your location or contact details" : "- Šaljite glasovne poruke, dijelite svoju lokaciju ili podatke za kontakt", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodajte grupe u razgovor i novi će se članovi grupe automatski dodati kao sudionici", + "- A preview of your audio and video is shown before joining a call" : "- Prije pridruživanja pozivu prikazuje se pregled vašeg zvuka i videa", + "- You can now blur your background in the newly designed call view" : "- Sada možete zamutiti pozadinu u novo dizajniranom prikazu poziva", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatori sada mogu dodijeliti opća i pojedinačna dopuštenja sudionicima", + "- You can now react to chat messages" : "- Sada možete reagirati na poruke u chatu", + "- In the sidebar you can now find an overview of the latest shared items" : "- U bočnoj traci sada možete pronaći pregled najnovijih dijeljenih stavki", + "- Use a poll to collect the opinions of others or settle on a date" : "- Upotrijebite anketu za prikupljanje mišljenja drugih ili dogovor oko datuma", + "- Configure an expiration time for chat messages" : "- Postavite vrijeme isteka za poruke u chatu", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Pokrenite pozive bez obavještavanja drugih u velikim razgovorima. Pojedinačne obavijesti o pozivu možete poslati nakon što poziv započne.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Šaljite poruke u chatu bez obavještavanja primatelja ako nije hitno", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojiji se sada mogu automatski dovršavati upisivanjem \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Povežite razne stavke pomoću novog pametnog birača upisivanjem \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatori sada mogu stvarati sobe za odvajanje (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Pozivi se sada mogu snimati (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Conversations can now have an avatar or emoji as icon" : "- Razgovori sada mogu imati avatar ili emoji kao ikonu", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtualne pozadine sada su dostupne uz zamućenu pozadinu u videopozivima", + "- Reactions are now available during calls" : "- Reakcije su sada dostupne tijekom poziva", + "- Typing indicators show which users are currently typing a message" : "- Indikatori tipkanja prikazuju koji korisnici trenutačno pišu poruku", + "- Groups can now be mentioned in chats" : "- Grupe se sada mogu spominjati u chatovima", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Snimke poziva automatski se pretvaraju u tekst ako je registrirana aplikacija za pružatelja pretvatanja", + "- Chat messages can be translated if a translation provider app is registered" : "- Poruke u chatu mogu se prevoditi ako je registrirana aplikacija za pružatelja prijevoda", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** se sada može koristiti u porukama _chata_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhookovi su sada dostupni za implementaciju botova. Više informacija potražite u dokumentaciji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Postavite podsjetnik na poruku u chatu kako biste kasnije ponovno dobili obavijest", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Upotrijebite razgovor **Bilješka za sebe** za bilješke i dijeljenje informacija između svojih uređaja", + "- Captions allow to send a message with a file at the same time" : "- Natpisi omogućuju slanje poruke i datoteke istodobno", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video govornika sada je vidljiv tijekom dijeljenja zaslona, a reakcije u pozivu su animirane", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Poruke sada mogu uređivati prijavljeni autori i moderatori tijekom 6 sati", + "- Unsent message drafts are now saved in your browser" : "- Nacrti neposlanih poruka sada se spremaju u vašem pregledniku", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Tekstualni chat sada se može voditi udruženo s drugim Talk poslužiteljima", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatori sada mogu zabraniti račune i goste kako bi spriječili ponovno pridruživanje razgovoru", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadolazeći pozivi iz povezanih događaja u kalendaru i zamjene tijekom odsutnosti sada su prikazani u razgovorima", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Pozivi se sada mogu obavljati udruženo s drugim Talk poslužiteljima (zahtijeva visokoučinkoviti pozadinski sustav)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Predstavljamo Nextcloud Talk desktop klijent za Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Sažmite snimke poziva i nepročitane poruke u chatovima uz Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Poboljšani sastanci uz prepoznavanje gostiju pozvanih putem e‑pošte, uvoz popisa sudionika, skice za ankete i preuzimanje popisa sudionika poziva", + "- Archive conversations to stay focused" : "- Arhivirajte razgovore kako biste ostali fokusirani", + "- Schedule a meeting into your calendar from within a conversation" : "- Zakažite sastanak u svoj kalendar izravno iz razgovora", + "- Search for messages of the current conversation directly in the right sidebar" : "- Pretražujte poruke trenutnog razgovora izravno u desnoj bočnoj traci", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Na prvi pogled vidite više razgovora uz novi kompaktni popis (omogućite u postavkama Talka)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Razgovori o sastancima sada sinkroniziraju naslov i opis iz kalendara te su skriveni filtrom pretraživanja dok se ne približe početku", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označite razgovore kao osjetljive u postavkama obavijesti kako biste sakrili sadržaj poruka na popisu razgovora i u obavijestima", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Kako biste primali push obavijesti tijekom opcije „Ne ometaj”, označite razgovore kao važne", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Dodajte druge sudionike u poziv jedan‑na‑jedan i u hodu stvorite novi grupni poziv", + "- Use threads to keep your chat and discussions organized" : "- Koristite niti kako bi chat i rasprave bile organizirane", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Pretvaranje snimke u tekst uživo sada je dostupna tijekom poziva (zahtijeva ExApp za pretvanje uživo i visokoučinkoviti pozadinski sustav)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatori sada mogu prikvačiti poruke kako bi ostale na vrhu", + "- Schedule a message to send it at a later time" : "- Zakažite slanje poruke u kasnije vrijeme", + "_All %n participant_::_All %n participants_" : ["Svi sudionici (%n)","Svi sudionici (%n)","Svi sudionici (%n)"], + "Talk updates ✅" : "Ažuriranja aplikacije Talk ✅", + "Reaction deleted by author" : "Reakciju je obrisao autor", + "{actor} created the conversation" : "{actor} je stvorio razgovor", + "You created the conversation" : "Stvorili ste razgovor", + "System created the conversation" : "Sustav je stvorio razgovor", + "An administrator created the conversation" : "Administrator je stvorio razgovor", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} je preimenovao razgovor iz „%1$s” u „%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Preimenovali ste razgovor iz „%1$s” u „%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrator je preimenovao razgovor iz „%1$s” u „%2$s”", + "{actor} set the description" : "{actor} je postavio opis", + "You set the description" : "Vi ste postavili opis", + "An administrator set the description" : "Administrator je postavio opis", + "{actor} removed the description" : "{actor} je uklonio opis", + "You removed the description" : "Vi ste uklonili opis", + "An administrator removed the description" : "Administrator je uklonio opis", + "You started a silent call" : "Pokrenuli ste tihi poziv", + "Outgoing silent call" : "Odlazni tihi poziv", + "{actor} started a silent call" : "{actor} je pokrenuo tihi poziv", + "Incoming silent call" : "Dolazni tihi poziv", + "You started a call" : "Pokrenuli ste poziv", + "Outgoing call" : "Odlazni poziv", + "{actor} started a call" : "{actor} je pokrenuo poziv", + "Incoming call" : "Dolazni poziv", + "{actor} joined the call" : "{actor} se pridružio pozivu", + "You joined the call" : "Pridružili ste se pozivu", + "{actor} left the call" : "{actor} je napustio poziv", + "You left the call" : "Napustili ste poziv", + "{actor} unlocked the conversation" : "{actor} je otključao razgovor", + "You unlocked the conversation" : "Otključali ste razgovor", + "An administrator unlocked the conversation" : "Administrator je otključao razgovor", + "{actor} locked the conversation" : "{actor} je zaključao razgovor", + "You locked the conversation" : "Zaključali ste razgovor", + "An administrator locked the conversation" : "Administrator je zaključao razgovor", + "{actor} limited the conversation to the current participants" : "{actor} je ograničio razgovor na trenutne sudionike", + "You limited the conversation to the current participants" : "Ograničili ste razgovor na trenutne sudionike", + "An administrator limited the conversation to the current participants" : "Administrator je ograničio razgovor na trenutne sudionike", + "{actor} opened the conversation to registered users" : "{actor} je otvorio razgovor registriranim korisnicima", + "You opened the conversation to registered users" : "Otvorili ste razgovor registriranim korisnicima", + "An administrator opened the conversation to registered users" : "Administrator je otvorio razgovor registriranim korisnicima", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} je otvorio razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "You opened the conversation to registered users and users created with the Guests app" : "Otvorili ste razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrator je otvorio razgovor za registrirane korisnike i korisnike stvorene aplikacijom Gosti", + "The conversation is now open to everyone" : "Razgovor je sada otvoren svima", + "{actor} opened the conversation to everyone" : "{actor} je otvorio razgovor svima", + "You opened the conversation to everyone" : "Vi ste otvorili razgovor svima", + "{actor} restricted the conversation to moderators" : "{actor} je ograničio razgovor samo na moderatore", + "You restricted the conversation to moderators" : "Vi ste ograničili razgovor samo na moderatore", + "{actor} started breakout rooms" : "{actor} je pokrenuo sobe za odvajanje", + "You started breakout rooms" : "Pokrenuli ste sobe za odvajanje", + "{actor} stopped breakout rooms" : "{actor} je zaustavio sobe za odvajanje", + "You stopped breakout rooms" : "Zaustavili ste sobe za odvajanje", + "{actor} allowed guests" : "{actor} je dopustio pristup gostima", + "You allowed guests" : "Dopustili ste pristup gostima", + "An administrator allowed guests" : "Administrator je dopustio pristup gostima", + "{actor} disallowed guests" : "{actor} je zabranio pristup gostima", + "You disallowed guests" : "Zabranili ste pristup gostima", + "An administrator disallowed guests" : "Administrator je zabranio pristup gostima", + "{actor} set a password" : "{actor} je postavio zaporku", + "You set a password" : "Postavili ste zaporku", + "An administrator set a password" : "Administrator je postavio zaporku", + "{actor} removed the password" : "{actor} je uklonio zaporku", + "You removed the password" : "Uklonili ste zaporku", + "An administrator removed the password" : "Administrator je uklonio zaporku", + "{actor} added {user}" : "{actor} je dodao {user}", + "You joined the conversation" : "Pridružili ste se razgovoru", + "{actor} joined the conversation" : "{actor} se pridružio razgovoru", + "You added {user}" : "Dodali ste {user}", + "{actor} added you" : "Dodao vas je {actor}", + "An administrator added you" : "Administrator vas je dodao", + "An administrator added {user}" : "Administrator je dodao {user}", + "You left the conversation" : "Napustili ste razgovor", + "{actor} left the conversation" : "{actor} je napustio razgovor", + "{actor} removed {user}" : "{actor} je uklonio {user}", + "You removed {user}" : "Uklonili ste {user}", + "{actor} removed you" : "{actor} vas je uklonio", + "An administrator removed you" : "Administrator vas je uklonio", + "An administrator removed {user}" : "Administrator je uklonio {user}", + "{actor} invited {federated_user}" : "{actor} je pozvao {federated_user}", + "You invited {federated_user}" : "Pozvali ste {federated_user}", + "You accepted the invitation" : "Prihvatili ste poziv", + "{actor} invited you" : "{actor} vas je pozvao", + "An administrator invited you" : "Administrator vas je pozvao", + "An administrator invited {federated_user}" : "Administrator je pozvao {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} je prihvatio poziv", + "{actor} removed {federated_user}" : "{actor} je uklonio {federated_user}", + "You removed {federated_user}" : "Uklonili ste {federated_user}", + "You declined the invitation" : "Odbili ste poziv", + "An administrator removed {federated_user}" : "Administrator je uklonio {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} je odbio poziv", + "{actor} added group {group}" : "{actor} je dodao grupu {group}", + "You added group {group}" : "Dodali ste grupu {group}", + "An administrator added group {group}" : "Administrator je dodao grupu {group}", + "{actor} removed group {group}" : "{actor} je uklonio grupu {group}", + "You removed group {group}" : "Uklonili ste grupu {group}", + "An administrator removed group {group}" : "Administrator je uklonio grupu {group}", + "{actor} added team {circle}" : "{actor} je dodao tim {circle}", + "You added team {circle}" : "Dodali ste tim {circle}", + "An administrator added team {circle}" : "Administrator je dodao tim {circle}", + "{actor} removed team {circle}" : "{actor} je uklonio tim {circle}", + "You removed team {circle}" : "Uklonili ste tim {circle}", + "An administrator removed team {circle}" : "Administrator je uklonio tim {circle}", + "{actor} added {phone}" : "{actor} je dodao {phone}", + "You added {phone}" : "Dodali ste {phone}", + "An administrator added {phone}" : "Administrator je dodao {phone}", + "{actor} removed {phone}" : "{actor} je uklonio {phone}", + "You removed {phone}" : "Uklonili ste {phone}", + "An administrator removed {phone}" : "Administrator je uklonio {phone}", + "{actor} promoted {user} to moderator" : "{actor} je unaprijedio {user} u moderatora", + "You promoted {user} to moderator" : "Unaprijedili ste {user} u moderatora", + "{actor} promoted you to moderator" : "{actor} vas je unaprijedio u moderatora", + "An administrator promoted you to moderator" : "Administrator vas je unaprijedio u moderatora", + "An administrator promoted {user} to moderator" : "Administrator je unaprijedio {user} u moderatora", + "{actor} demoted {user} from moderator" : "{actor} je oduzeo status moderatora {korisnik}", + "You demoted {user} from moderator" : "Oduzeli ste status moderatora {user}", + "{actor} demoted you from moderator" : "{actor} vam je oduzeo status moderatora", + "An administrator demoted you from moderator" : "Administrator vam je oduzeo status moderatora", + "An administrator demoted {user} from moderator" : "Administrator je oduzeo {user} status moderatora", + "{actor} shared a file which is no longer available" : "{actor} dijeli datoteku koja više nije dostupna", + "You shared a file which is no longer available" : "Dijelite datoteku koja više nije dostupna", + "File shares are currently not supported in federated conversations" : "Dijeljenja datoteka trenutačno nisu podržana u udruženim razgovorima", + "The shared location is malformed" : "Dijeljena lokacija je pogrešno oblikovana", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} je postavio Matterbridge kako bi sinkronizirao ovaj razgovor s drugim razmjenama poruka", + "You set up Matterbridge to synchronize this conversation with other chats" : "Postavili ste Matterbridge kako biste sinkronizirali ovaj razgovor s drugim razmjenama poruka", + "{actor} created thread {title}" : "{actor} je stvorio nit {title}", + "You created thread {title}" : "Stvorili ste nit {title}", + "{actor} renamed thread {title}" : "{actor} je preimenovao nit {title}", + "You renamed thread {title}" : "Preimenovali ste nit {title}", + "{actor} updated the Matterbridge configuration" : "{actor} je ažurirao konfiguraciju Matterbridgea", + "You updated the Matterbridge configuration" : "Ažurirali ste konfiguraciju Matterbridgea", + "{actor} removed the Matterbridge configuration" : "{actor} je uklonio konfiguraciju Matterbridgea", + "You removed the Matterbridge configuration" : "Uklonili ste konfiguraciju Matterbridgea", + "{actor} started Matterbridge" : "{actor} je pokrenuo Matterbridge", + "You started Matterbridge" : "Vi ste pokrenuli Matterbridge", + "{actor} stopped Matterbridge" : "{actor} je zaustavio Matterbridge", + "You stopped Matterbridge" : "Vi ste zaustavili Matterbridge", + "{actor} deleted a message" : "{actor} je izbrisao poruku", + "You deleted a message" : "Izbrisali ste poruku", + "{actor} edited a message" : "{actor} je uredio poruku", + "You edited a message" : "Uredili ste poruku", + "{actor} pinned a message" : "{actor} je prikvačio poruku", + "You pinned a message" : "Prikvačili ste poruku", + "{actor} unpinned a message" : "{actor} je otkvačio poruku", + "Message was automatically unpinned" : "Poruka je automatski otkvačena", + "You unpinned a message" : "Otkačili ste poruku", + "{actor} deleted a reaction" : "{actor} je obrisao reakciju", + "You deleted a reaction" : "Obrisali ste reakciju", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Postavili ste istjecanje poruka na %n tjedan","Postavili ste istjecanje poruka na %n tjedna","Postavili ste istjecanje poruka na %n tjedana"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Postavili ste istjecanje poruka na %n dan","Postavili ste istjecanje poruka na %n dana","Postavili ste istjecanje poruka na %n dana"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Postavili ste istjecanje poruka na %n sat","Postavili ste istjecanje poruka na %n sata","Postavili ste istjecanje poruka na %n sati"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Postavili ste istjecanje poruka na %n minutu","Postavili ste istjecanje poruka na %n minute","Postavili ste istjecanje poruka na %n minuta"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} je postavio istjecanje poruka na %n tjedan","{actor} je postavio istjecanje poruka na %n tjedna","{actor} je postavio istjecanje poruka na %n tjedana"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} je postavio istjecanje poruka na %n dan","{actor} je postavio istjecanje poruka na %n dana","{actor} je postavio istjecanje poruka na %n dana"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} je postavio istjecanje poruka na %n sat","{actor} je postavio istjecanje poruka na %n sata","{actor} je postavio istjecanje poruka na %n sati"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} je postavio istjecanje poruka na %n minutu","{actor} je postavio istjecanje poruka na %n minute","{actor} je postavio istjecanje poruka na %n minuta"], + "{actor} disabled message expiration" : "{actor} je onemogućio istjecanje poruka", + "You disabled message expiration" : "Onemogućili ste istjecanje poruka", + "{actor} cleared the history of the conversation" : "{actor} je obrisao povijest razgovora", + "You cleared the history of the conversation" : "Obrisali ste povijest razgovora", + "{actor} set the conversation picture" : "{actor} je postavio sliku razgovora", + "You set the conversation picture" : "Postavili ste sliku razgovora", + "{actor} removed the conversation picture" : "{actor} je uklonio sliku razgovora", + "You removed the conversation picture" : "Uklonili ste sliku razgovora", + "{actor} ended the poll {poll}" : "{actor} je završio anketu {poll}", + "You ended the poll {poll}" : "Završili ste anketu {poll}", + "{actor} started the video recording" : "{actor} je pokrenuo snimanje videa", + "You started the video recording" : "Pokrenuli ste snimanje videa", + "{actor} stopped the video recording" : "{actor} je zaustavio snimanje videa", + "You stopped the video recording" : "Zaustavili ste snimanje videa", + "{actor} started the audio recording" : "{actor} je pokrenuo snimanje zvuka", + "You started the audio recording" : "Pokrenuli ste snimanje zvuka", + "{actor} stopped the audio recording" : "{actor} je zaustavio snimanje zvuka", + "You stopped the audio recording" : "Zaustavili ste snimanje zvuka", + "The recording failed" : "Snimanje nije uspjelo", + "Someone voted on the poll {poll}" : "Netko je glasao u anketi {poll}", + "Message deleted by author" : "Autor je izbrisao poruku", + "Message deleted by {actor}" : "Poruku je izbrisao {actor}", + "Message deleted by you" : "Poruku ste vi izbrisali", + "Deleted user" : "Izbrisan korisnik", + "Unknown number" : "Nepoznati broj", + "Administration" : "Administracija", + "System" : "Sustav", + "%s (guest)" : "%s (gost)", + "Missed call" : "Propušten poziv", + "Unanswered call" : "Neodgovoreni poziv", + "Call ended (Duration {duration})" : "Poziv je završen (trajanje {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} je završio poziv (trajanje {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Poziv s %n gostom je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})","Poziv s %n gosta je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})","Poziv s %n gostiju je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Poziv s %n gostom je završen (trajanje {duration})","Poziv s %n gosta je završen (trajanje {duration})","Poziv s %n gostiju je završen (trajanje {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} je završio poziv s %n gostom (Trajanje {duration})","{actor} je završio poziv s %n gosta (Trajanje {duration})","{actor} je završio poziv s %n gostiju (Trajanje {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1} ended (Duration {duration})" : "Poziv s {user1} je završen (trajanje {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} je završio poziv s {user1} (Trajanje {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1} i {user2} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Poziv s {user1} i {user2} je završen (trajanje {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} je završio poziv s {user1} i {user2} (Trajanje {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2} i {user3} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Poziv s {user1}, {user2} i {user3} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2} i {user3} (Trajanje {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2}, {user3} i {user4} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Poziv s {user1}, {user2}, {user3} i {user4} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2}, {user3} i {user4} (Trajanje {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Poziv s {user1}, {user2}, {user3}, {user4} i {user5} je završen jer je dosegnuto maksimalno trajanje poziva (trajanje {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Poziv s {user1}, {user2}, {user3}, {user4} i {user5} je završen (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} je završio poziv s {user1}, {user2}, {user3}, {user4} i {user5} (Trajanje {duration})", + "Message of {user} in {conversation}" : "Poruka korisnika {user} u {conversation}", + "Message of {user}" : "Poruka korisnika {user}", + "Message of a deleted user in {conversation}" : "Poruka obrisanog korisnika u {conversation}", + "Talk conversations" : "Razgovori u alatu Talk", + "Talk to %s" : "Razgovarajte s %s", + "An error occurred. Please contact your administrator." : "Došlo je do pogreške. Obratite se administratoru.", + "Storage quota exceeded" : "Kvote je premašena", + "File not found" : "Datoteka nije pronađena", + "File is not shared, or shared but not with the user" : "Datoteka se ne dijeli ili se ne dijeli samo s korisnikom", + "No account available to delete." : "Nema računa za brisanje.", + "Poll" : "Anketa", + "Password needs to be set" : "Potrebno je postaviti lozinku", + "Uploading the file failed" : "Prijenos datoteke nije uspio", + "No image file provided" : "Nijedna slika nije dobavljena", + "File is too big" : "Datoteka je prevelika", + "Invalid file provided" : "Nevažeća datoteka", + "Invalid image" : "Slika neispravna", + "Unknown filetype" : "Vrsta datoteke nepoznata", + "Talk mentions" : "Spominjanja u alatu Talk", + "More conversations" : "Više razgovora", + "Say hi to your friends and colleagues!" : "Pozdravi svoje prijatelje i kolege!", + "No unread mentions" : "Nema nepročitanih spominjanja", + "Call in progress" : "Poziv u tijeku", + "You were mentioned" : "Spomenuti ste", + "Write to conversation" : "Napiši u razgovor", + "Writes event information into a conversation of your choice" : "Upisuje informacije o događaju u željeni razgovor", + "Missing email field in header line" : "Nedostaje polje e-pošte u retku zaglavlja", + "Following lines are invalid: %s" : "Sljedeći redci nisu valjani: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s vas je pozvao u razgovor \"%2$s\".", + "You were invited to conversation \"%s\"." : "Pozvani ste u razgovor \"%s\".", + "Conversation invitation" : "Poziv u razgovor", + "Scheduled time" : "Zakazano vrijeme", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Također se možete povezati putem telefona sa sljedećim podacima", + "Dial-in information" : "Podaci za povezivanje putem telefona", + "Meeting ID" : "ID sastanka", + "Your PIN" : "Vaš PIN", + "Click the button below to join the lobby now." : "Kliknite gumb ispod da se sada pridružite predvorju.", + "Click the link below to join the lobby now." : "Kliknite poveznicu ispod da se sada pridružite predvorju.", + "Join lobby for \"%s\"" : "Pridružite se predvorju za \"%s\"", + "Click the button below to join the conversation now." : "Kliknite gumb ispod da se sada pridružite razgovoru.", + "Click the link below to join the conversation now." : "Kliknite poveznicu ispod da se sada pridružite razgovoru.", + "Join \"%s\"" : "Pridružite se \"%s\"", + "Meeting" : "Sastanak", + "Password request: %s" : "Zaporka: %s", + "Private conversation" : "Privatni razgovor", + "Deleted user (%s)" : "Izbrisan korisnik (%s)", + "Failed to upload call recording" : "Prijenos snimke poziva nije uspio", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Poslužitelj za snimanje nije uspio prenijeti snimku poziva {call}. Obratite se administratoru.", + "Share to chat" : "Podijeli u chat", + "Dismiss notification" : "Zanemari obavijest", + "Call recording now available" : "Snimka poziva je sada dostupna", + "The recording for the call in {call} was uploaded to {file}." : "Snimka poziva u {call} prenesena je u {file}.", + "Transcript now available" : "Pretvaranje snimke u tekst je sada dostupno", + "The transcript for the call in {call} was uploaded to {file}." : "Pretvarenje snimke poziva u tekst u {call} prenesen je u {file}.", + "Failed to transcript call recording" : "Pretvaranje snimke poziva u tekst nije uspjelo", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Poslužitelj nije uspio pretvoriti u tekst snimku na {file} za poziv u {call}. Obratite se administratoru.", + "Call summary now available" : "Sažetak poziva je sada dostupan", + "The summary for the call in {call} was uploaded to {file}." : "Sažetak poziva u {call} prenesen je u {file}.", + "Failed to summarize call recording" : "Sažimanje snimke poziva nije uspjelo", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Poslužitelj nije uspio sažeti snimku na {file} za poziv u {call}. Obratite se administratoru.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} vas je pozvao da se pridružite {roomName} na {remoteServer}", + "Accept" : "Prihvati", + "Decline" : "Odbij", + "{user1} invited you to a federated conversation" : "{user1} vas je pozvao u udruženi razgovor", + "Someone reacted" : "Netko je reagirao", + "New message" : "Nova poruka", + "Reminder" : "Podsjetnik", + "Someone mentioned you" : "Netko vas je spomenuo", + "Notification" : "Obavijest", + "Someone reacted in a private conversation" : "Netko je reagirao u privatnom razgovoru", + "You received a message in a private conversation" : "Primili ste poruku u privatnom razgovoru", + "Reminder in a private conversation" : "Podsjetnik u privatnom razgovoru", + "Someone mentioned you in a private conversation" : "Netko vas je spomenuo u privatnom razgovoru", + "Notification in a private conversation" : "Obavijest u privatnom razgovoru", + "Reminder: You in {call}" : "Podsjetnik: Vi u {call}", + "Reminder: {user} in {call}" : "Podsjetnik: {user} u {call}", + "Reminder: Deleted user in {call}" : "Podsjetnik: Obrisani korisnik u {call}", + "Reminder: {guest} (guest) in {call}" : "Podsjetnik: {guest} (gost) u {call}", + "Reminder: Guest in {call}" : "Podsjetnik: Gost u {call}", + "{user} reacted with {reaction}" : "{user} je reagirao s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} je reagirao s {reaction} u {call}", + "Deleted user reacted with {reaction} in {call}" : "Obrisani korisnik je reagirao s {reaction} u {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gost) je reagirao s {reaction} u {call}", + "Guest reacted with {reaction} in {call}" : "Gost je reagirao s {reaction} u {call}", + "{user} in {call}" : "{user} u {call}", + "Deleted user in {call}" : "Izbrisan korisnik u {call}", + "{guest} (guest) in {call}" : "{guest} (gost) u {call}", + "Guest in {call}" : "Gost u {call}", + "{user} sent you a private message" : "{user} vam je poslao privatnu poruku", + "{user} sent a message in conversation {call}" : "{user} je poslao poruku u razgovoru {call}", + "A deleted user sent a message in conversation {call}" : "Izbrisani korisnik poslao je poruku u razgovoru {call}", + "{guest} (guest) sent a message in conversation {call}" : "(gost) {guest} je poslao poruku u razgovoru {call}", + "A guest sent a message in conversation {call}" : "Gost je poslao poruku u razgovoru {call}", + "{user} replied to your private message" : "{user} je odgovorio na vašu privatnu poruku", + "{user} replied to your message in conversation {call}" : "{user} je odgovorio na vašu poruku u razgovoru {call}", + "A deleted user replied to your message in conversation {call}" : "Izbrisani korisnik odgovorio je na vašu poruku u razgovoru {call}", + "{guest} (guest) replied to your message in conversation {call}" : "(gost) {guest} je odgovorio na vašu poruku u razgovoru {call}", + "A guest replied to your message in conversation {call}" : "Gost je odgovorio na vašu poruku u razgovoru {call}", + "Reminder: You in private conversation {call}" : "Podsjetnik: Vi u privatnom razgovoru {call}", + "Reminder: A deleted user in private conversation {call}" : "Podsjetnik: Obrisani korisnik u privatnom razgovoru {call}", + "Reminder: {user} in private conversation" : "Podsjetnik: {user} u privatnom razgovoru", + "Reminder: You in conversation {call}" : "Podsjetnik: Vi u razgovoru {call}", + "Reminder: {user} in conversation {call}" : "Podsjetnik: {user} u razgovoru {call}", + "Reminder: A deleted user in conversation {call}" : "Podsjetnik: Obrisani korisnik u razgovoru {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Podsjetnik: {guest} (gost) u razgovoru {call}", + "Reminder: A guest in conversation {call}" : "Podsjetnik: Gost u razgovoru {call}", + "{user} reacted with {reaction} to your private message" : "{user} je reagirao s {reaction} na vašu privatnu poruku", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Obrisani korisnik je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gost) je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gost je reagirao s {reaction} na vašu poruku u razgovoru {call}", + "{user} mentioned you in a private conversation" : "{user} vas je spomenuo u privatnom razgovoru", + "{user} mentioned group {group} in conversation {call}" : "{user} je spomenuo grupu {group} u razgovoru {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} je spomenuo tim {team} u razgovoru {call}", + "{user} mentioned everyone in conversation {call}" : "{user} je spomenuo sve sudionike u razgovoru {call}", + "{user} mentioned you in conversation {call}" : "{user} vas je spomenuo u razgovoru {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Obrisani korisnik je spomenuo grupu {group} u razgovoru {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Obrisani korisnik je spomenuo tim {team} u razgovoru {call}", + "A deleted user mentioned everyone in conversation {call}" : "Obrisani korisnik je spomenuo sve sudionike u razgovoru {call}", + "A deleted user mentioned you in conversation {call}" : "Izbrisani korisnik spomenuo vas je u razgovoru {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gost) je spomenuo grupu {group} u razgovoru {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gost) je spomenuo tim {team} u razgovoru {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gost) je spomenuo sve sudionike u razgovoru {call}", + "{guest} (guest) mentioned you in conversation {call}" : "(gost) {guest} vas je spomenuo u razgovoru {call}", + "A guest mentioned group {group} in conversation {call}" : "Gost je spomenuo grupu {group} u razgovoru {call}", + "A guest mentioned team {team} in conversation {call}" : "Gost je spomenuo tim {team} u razgovoru {call}", + "A guest mentioned everyone in conversation {call}" : "Gost je spomenuo sve sudionike u razgovoru {call}", + "A guest mentioned you in conversation {call}" : "Gost vas je spomenuo u razgovoru {call}", + "View message" : "Prikaži poruku", + "Dismiss reminder" : "Odbaci podsjetnik", + "View chat" : "Prikaži razmjenu poruka", + "{user} invited you to a group conversation: {call}" : "{user} vas je pozvao u grupni razgovor: {call}", + "Join call" : "Pridruži se pozivu", + "Answer call" : "Odgovori na poziv", + "{user} would like to talk with you" : "{user} želi razgovarati s vama", + "Call back" : "Nazovi natrag", + "You missed a call from {user}" : "Propustili ste poziv od {user}", + "Accept call" : "Prihvati poziv", + "Incoming phone call from {call}" : "Dolazni telefonski poziv od {call}", + "You missed a phone call from {call}" : "Propustili ste telefonski poziv od {call}", + "A group call has started in {call}" : "Grupni poziv je pokrenut u {call}", + "You missed a group call in {call}" : "Propustili ste grupni poziv u {call}", + "{email} is requesting the password to access {file}" : "{email} traži zaporku za pristup {file}", + "{email} tried to request the password to access {file}" : "{email} je pokušao zatražiti zaporku za pristup {file}", + "Someone is requesting the password to access {file}" : "Netko traži zaporku za pristup {file}", + "Someone tried to request the password to access {file}" : "Netko je pokušao zatražiti zaporku za pristup {file}", + "Open settings" : "Otvori postavke", + "Hosted signaling server added" : "Dodan je signalni poslužitelj", + "The hosted signaling server is now configured and will be used." : "Signalni poslužitelj je konfiguriran i spreman za upotrebu.", + "Hosted signaling server removed" : "Uklonjen je signalni poslužitelj", + "The hosted signaling server was removed and will not be used anymore." : "Signalni poslužitelj je uklonjen i neće se upotrebljavati.", + "Hosted signaling server changed" : "Promijenjen je signalni poslužitelj", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Račun signalnog poslužitelja je promijenio status iz „{oldstatus}” u „{newstatus}”.", + "pending" : "na čekanju", + "active" : "aktivno", + "expired" : "isteklo", + "blocked" : "blokirano", + "error" : "pogreška", + "The certificate of {host} expires in {days} days" : "Certifikat za {host} istječe za {days} dana", + "The certificate of {host} expired" : "Certifikat za {host} je istekao", + "Contact via Talk" : "Kontaktirajte putem aplikacije Talk", + "Open Talk" : "Otvori Talk", + "Default" : "Zadano", + "Presentation" : "Prezentacija", + "Voice room" : "Glasovna soba", + "Webinar" : "Webinar", + "Conversations" : "Razgovori", + "Messages in current conversation" : "Poruke u trenutnom razgovoru", + "{user}" : "{user}", + "Messages" : "Poruke", + "{user} in {conversation}" : "{user} u {conversation}", + "Messages in other conversations" : "Poruke u ostalim razgovorima", + "One-to-one rooms always need to show the other users avatar" : "Sobe jedan-na-jedan uvijek moraju prikazivati avatar drugog korisnika", + "Invalid emoji character" : "Neispravan emoji znak", + "Invalid background color" : "Neispravna boja pozadine", + "Avatar image is not square" : "Slika avatara nije kvadratna", + "Room {number}" : "Soba {number}", + "Other" : "Drugo", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Zahtjev za probni rad nije upućen jer probni poslužitelj nije dostupan. Pokušajte ponovo kasnije.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Došlo je do poteškoća s autentifikacijom za ovu instancu. Možda joj nije moguće pristupiti izvana kako bi se provjerio njen URL.", + "Something unexpected happened." : "Nešto se neočekivano dogodilo.", + "The URL is invalid." : "URL je nevažeći.", + "An HTTPS URL is required." : "Potreban je HTTPS URL.", + "The email address is invalid." : "Nevažeća adresa e-pošte.", + "The language is invalid." : "Jezik nije valjan.", + "The country is invalid." : "Nevažeća država.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Došlo je do poteškoća s upućivanjem zahtjeva za probni rad. Provjerite zapisnike za više informacija.", + "Too many requests are send from your servers address. Please try again later." : "S adrese poslužitelja šalje se previše zahtjeva. Pokušajte ponovo kasnije.", + "There is already a trial registered for this Nextcloud instance." : "Za ovu instancu Nextclouda već postoji registriran probni račun.", + "Something unexpected happened. Please try again later." : "Došlo je do neočekivane situacije. Pokušajte ponovo kasnije.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Zahtjev za probni rad nije upućen jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "Trial requested but failed to get account information. Please check back later." : "Probni rad je zatražen, ali nisu dohvaćene informacije o računu. Pokušajte kasnije.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Došlo je do poteškoća s autentifikacijom za ovaj zahtjev. Možda joj nije moguće pristupiti izvana kako bi se provjerio njen URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Informacije o računu nisu dohvaćene jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Došlo je do poteškoća s dohvaćanjem informacija o računu. Provjerite zapisnike za više informacija.", + "There is no such account registered." : "Račun nije registriran.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Informacije o računu nisu dohvaćene jer je probni poslužitelj nedostupan. Pokušajte ponovo kasnije.", + "Deleting the hosted signaling server account failed. Please check back later." : "Brisanje računa pohranjenog signalnog poslužitelja nije uspjelo. Pokušajte kasnije.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Brisanje računa nije uspjelo jer je probni poslužitelj neispravan. Pokušajte ponovo kasnije.", + "There is a problem with deleting the account. Please check your logs for further information." : "Došlo je do poteškoća pri brisanju računa. Provjerite zapisnike za više informacija.", + "Too many requests are sent from your servers address. Please try again later." : "S adrese poslužitelja šalje se previše zahtjeva. Pokušajte ponovo kasnije.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Brisanje računa nije uspjelo jer je probni poslužitelj nedostupan. Pokušajte ponovo kasnije.", + "Note to self" : "Bilješka za sebe", + "A place for your private notes, thoughts and ideas" : "Mjesto za vaše privatne bilješke, misli i ideje", + "Transcript is AI generated and may contain mistakes" : "Pretvatanje snimke u tekst je generirala umjetna inteligencija i može sadržavati pogreške", + "Summary is AI generated and may contain mistakes" : "Sažetak je generirala umjetna inteligencija i može sadržavati pogreške", + "Let's get started!" : "Krenimo!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je sigurna, samostalno hostana komunikacijska platforma koja se besprijekorno integrira s ekosustavom Nextcloud.\n\n#### Ključne značajke Nextcloud Talka:\n\n* Chat i razmjena poruka u privatnim i grupnim razgovorima\n* Glasovni i videopozivi\n* Dijeljenje datoteka i integracija s drugim Nextcloud aplikacijama\n* Prilagodljive postavke razgovora, moderiranje i kontrole privatnosti\n* Web, desktop i mobilno (iOS i Android)\n* Privatna i sigurna komunikacija\n\nSaznajte više u [korisničkoj dokumentaciji](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Dobro došli u Nextcloud Talk\n\nNextcloud Talk je privatna i moćna aplikacija za razmjenu poruka koja se integrira s Nextcloudom. Chatajte u privatnim ili grupnim razgovorima, surađujte putem glasovnih i videopoziva, organizirajte webinare i događaje, prilagodite svoje razgovore i još mnogo toga.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatirajte tekst za bogate poruke\n\nU Nextcloud Talku možete koristiti Markdown sintaksu za formatiranje poruka. Primjerice, primijenite **podebljano** ili *kurziv* formatiranje ili `istaknite tekst kao kod`. Možete čak izrađivati tablice i dodavati naslove u tekst.\n\nTreba ispraviti tipfeler ili promijeniti formatiranje? Uredite poruku klikom na \"Uredi poruku\" u izborniku poruke.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dodajte privitke i poveznice\n\nPriložite datoteke iz svojeg Nextcloud Huba pomoću gumba \"+\". Dijelite stavke iz Datoteka i raznih Nextcloud aplikacija. Neke aplikacije podržavaju i interaktivne widgete, primjerice aplikacija Tekst.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Neka razgovori teku: spominjite korisnike, reagirajte na poruke i još mnogo toga\n\nMožete spomenuti sve u razgovoru koristeći %s ili spomenuti određene sudionike tako da upišete \"@\" i odaberete njihovo ime s popisa.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Možete odgovoriti na poruke, proslijediti ih u druge chatove i osobama ili kopirati sadržaj poruke.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Učinite više uz Pametni birač\n\nJednostavno upišite \"/\" ili otvorite izbornik \"+\" da biste otvorili Pametni birač, gdje možete priložiti razni sadržaj u poruke. Pametni birač možete podesiti tako da dodaje stavke iz Nextcloud aplikacija, GIF-ove, lokacije na karti, sadržaj koji generira AI i još mnogo toga.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Upravljajte postavkama razgovora\n\nU izborniku razgovora možete pristupiti raznim postavkama za upravljanje razgovorima, kao što su:\n* Uređivanje informacija o razgovoru\n* Upravljanje obavijestima\n* Primjena brojnih pravila moderiranja\n* Postavljanje pristupa i sigurnosti\n* Omogućavanje botova\n* i još mnogo toga!", + "Andorra" : "Andora", + "United Arab Emirates" : "Ujedinjeni Arapski Emirati", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigva i Barbuda", + "Anguilla" : "Angvila", + "Albania" : "Albanija", + "Armenia" : "Armenija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Američka Samoa", + "Austria" : "Austrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandski otoci", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna i Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeš", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bugarska", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sveti Bartolomej", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunej Darussalam", + "Bolivia, Plurinational State of" : "Bolivija, Višenacionalna Država", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sveti Eustahije i Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahami", + "Bhutan" : "Butan", + "Bouvet Island" : "Otok Bouvet", + "Botswana" : "Bocvana", + "Belarus" : "Bjelorusija", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosov (Keeling) otok", + "Congo, the Democratic Republic of the" : "Kongo, Demokratska Republika", + "Central African Republic" : "Srednjoafrička Republika", + "Congo" : "Kongo", + "Switzerland" : "Švicarska", + "Côte d'Ivoire" : "Obala Bjelokosti", + "Cook Islands" : "Cookovo Otočje", + "Chile" : "Čile", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Zelenortska Republika", + "Curaçao" : "Curaçao", + "Christmas Island" : "Božićni Otok", + "Cyprus" : "Cipar", + "Czechia" : "Češka", + "Germany" : "Njemačka", + "Djibouti" : "Džibuti", + "Denmark" : "Danska", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikanska Republika", + "Algeria" : "Alžir", + "Ecuador" : "Ekvador", + "Estonia" : "Estonija", + "Egypt" : "Egipat", + "Western Sahara" : "Zapadna Sahara", + "Eritrea" : "Eritreja", + "Spain" : "Španjolska", + "Ethiopia" : "Etiopija", + "Finland" : "Finska", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandski otoci (Malvinas)", + "Micronesia, Federated States of" : "Mikronezija, Federativne Države", + "Faroe Islands" : "Farski otoci", + "France" : "Francuska", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Ujedinjeno Kraljevstvo Velike Britanije i Sjeverne Irske", + "Grenada" : "Grenada", + "Georgia" : "Gruzija", + "French Guiana" : "Francuska Gvajana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenland", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Gvadalupa", + "Equatorial Guinea" : "Ekvatorijalna Gvineja", + "Greece" : "Grčka", + "South Georgia and the South Sandwich Islands" : "Južna Georgija i otočje Južni Sandwich", + "Guatemala" : "Gvatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gvineja Bisau", + "Guyana" : "Gvajana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Otok Heard i otočje McDonald", + "Honduras" : "Honduras", + "Croatia" : "Hrvatska", + "Haiti" : "Haiti", + "Hungary" : "Mađarska", + "Indonesia" : "Indonezija", + "Ireland" : "Irska", + "Israel" : "Izrael", + "Isle of Man" : "Otok Man", + "India" : "Indija", + "British Indian Ocean Territory" : "Britanski Indijskooceanski teritorij", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska Republika", + "Iceland" : "Island", + "Italy" : "Italija", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komori", + "Saint Kitts and Nevis" : "Sveti Kristofor i Nevis", + "Korea, Democratic People's Republic of" : "Koreja, Demokratska Narodna Republika", + "Korea, Republic of" : "Koreja, Republika", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanski Otoci", + "Kazakhstan" : "Kazahstan", + "Lao People's Democratic Republic" : "Laoska Narodna Demokratska Republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sveta Lucija", + "Liechtenstein" : "Lihtenštajn", + "Sri Lanka" : "Šri Lanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesoto", + "Lithuania" : "Litva", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavija, Republika", + "Montenegro" : "Crna Gora", + "Saint Martin (French part)" : "Sveti Martin (francuski dio)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovi Otoci", + "North Macedonia" : "Sjeverna Makedonija", + "Mali" : "Mali", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Sjevernomarijanski otoci", + "Martinique" : "Martinik", + "Mauritania" : "Mauritanija", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauricijus", + "Maldives" : "Maldivi", + "Malawi" : "Malavi", + "Mexico" : "Meksiko", + "Malaysia" : "Malezija", + "Mozambique" : "Mozambik", + "Namibia" : "Namibija", + "New Caledonia" : "Nova Kaledonija", + "Niger" : "Niger", + "Norfolk Island" : "Otok Norfolk", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nizozemska", + "Norway" : "Norveška", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Novi Zeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francuska Polinezija", + "Papua New Guinea" : "Papua Nova Gvineja", + "Philippines" : "Filipini", + "Pakistan" : "Pakistan", + "Poland" : "Poljska", + "Saint Pierre and Miquelon" : "Sveti Petar i Mikelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina, Država", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paragvaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunjska", + "Serbia" : "Srbija", + "Russian Federation" : "Ruska Federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudijska Arabija", + "Solomon Islands" : "Salomonski Otoci", + "Seychelles" : "Sejšeli", + "Sudan" : "Sudan", + "Sweden" : "Švedska", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Sveta Helena, Ascension i Tristan da Cunha", + "Slovenia" : "Slovenija", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Slovačka", + "Sierra Leone" : "Sijera Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalija", + "Suriname" : "Surinam", + "South Sudan" : "Južni Sudan", + "Sao Tome and Principe" : "Sveti Toma i Princip", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (nizozemski dio)", + "Syrian Arab Republic" : "Sirijska Arapska Republika", + "Eswatini" : "Esvatini", + "Turks and Caicos Islands" : "Otoci Turks i Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francuski južni teritoriji", + "Togo" : "Togo", + "Thailand" : "Tajland", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Istočni Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Turska", + "Trinidad and Tobago" : "Trinidad i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan, Provincija NR Kine", + "Tanzania, United Republic of" : "Ujedinjena Republika Tanzanija", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Mali udaljeni otoci SAD-a", + "United States of America" : "Sjedinjene Američke Države", + "Uruguay" : "Urugvaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Sveta Stolica", + "Saint Vincent and the Grenadines" : "Sveti Vincent i Grenadini", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarijska Republika", + "Virgin Islands, British" : "Djevičanski otoci, britanski", + "Virgin Islands, U.S." : "Djevičanski otoci, SAD", + "Viet Nam" : "Vijetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Južna Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Background blur" : "Zamućenje pozadine", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nije moguće provjeriti podršku za učitavanje WASM-a. Ručno provjerite poslužuje li vaš web-poslužitelj datoteke `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Vaš web-poslužitelj nije ispravno podešen za isporuku datoteka `.wasm`. To je obično problem u konfiguraciji Nginxa. Za zamućenje pozadine potrebno je prilagoditi konfiguraciju tako da također poslužuje datoteke `.wasm`. Usporedite svoju Nginx konfiguraciju s preporučenom konfiguracijom u našoj dokumentaciji.", + "Talk configuration values" : "Vrijednosti konfiguracije Talka", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Prisiljavanje trajanja poziva podržano je samo uz sistemski cron. Omogućite sistemski cron ili uklonite konfiguraciju `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Male vrijednosti `max_call_duration` (trenutačno postavljeno na %d) nije moguće provesti zbog tehničkih ograničenja. Pozadinski posao izvršava se samo svakih 5 minuta, pa koristite na vlastitu odgovornost.", + "Federation" : "Udruženje", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Preporučuje se konfigurirati \"memcache.locking\" kada je omogućena Talk udruženje.", + "High-performance backend" : "Visokoučinkovit pozadinski sustav", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nije konfiguriran visokoučinkoviti pozadinski sustav – pokretanje Nextcloud Talka bez visokoučinkovitog pozadinskog sustava skalira samo za vrlo male pozive (najviše 2–3 sudionika). Postavite visokoučinkoviti pozadinski sustav kako bi pozivi s više sudionika radili besprijekorno.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Pokretanje visokoučinkovitog pozadinskog sustava u načinu \"conversation_cluster\" je zastarjelo i više neće biti podržano u nadolazećoj verziji. Visokoučinkoviti pozadinski sustav danas podržava pravo klasteriranje i to bi se trebalo koristiti umjesto toga.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definiranje više visokoučinkovitih pozadinskih sustava je zastarjelo i više neće biti podržano u nadolazećoj verziji. Umjesto toga treba postaviti uravnoteživač opterećenja zajedno s klasteriranim signalnim poslužiteljima i konfigurirati ga u postavkama Talka.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Spremljeni javni ključ za korišteni algoritam %1$s ne odgovara spremljenom privatnom ključu. Pokrenite %2$s da biste ispravili problem.", + "High-performance backend not configured correctly. Run %s for details." : "Visokoučinkoviti pozadinski sustav nije ispravno konfiguriran. Pokrenite %s za detalje.", + "High-performance backend not configured correctly" : "Visokoučinkoviti pozadinski sustav nije ispravno konfiguriran", + "Error: Cannot connect to server" : "Pogreška: povezivanje s poslužiteljem nije uspjelo", + "Error: Server did not respond with proper JSON" : "Pogreška: poslužitelj nije vratio točan JSON", + "Error: Certificate expired" : "Pogreška: Certifikat je istekao", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Pogreška: Sustavna vremena Nextcloud poslužitelja i poslužitelja visokoučinkovitog pozadinskog sustava nisu usklađena. Provjerite jesu li oba poslužitelja povezana s poslužiteljem vremena ili ručno sinkronizirajte vrijeme.", + "Could not get version" : "Nije moguće dohvatiti verziju", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Pogreška: Pokrenuta verzija: {version}; poslužitelj se mora ažurirati kako bi bio kompatibilan s ovom verzijom Talka", + "Error: Server responded with: {error}" : "Pogreška: poslužitelj je vratio: {error}", + "Error: Unknown error occurred" : "Pogreška: došlo je do nepoznate pogreške", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Upozorenje: Pokrenuta verzija: {version}; poslužitelj ne podržava sve značajke ove verzije Talka, nedostaju značajke: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Preporučuje se konfigurirati memorijsku predmemoriju pri pokretanju Nextcloud Talka s visokoučinkovitim pozadinskim sustavom.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push je instaliran, što poboljšava pravovremenost Talk obavijesti.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nije instaliran. To može dovesti do odgođenih Talk obavijesti.", + "Recording backend" : "Pozadinski sustav za snimanje", + "Using the recording backend requires a High-performance backend." : "Korištenje pozadinskog sustava za snimanje zahtijeva visokoučinkoviti pozadinski sustav.", + "No recording backend configured" : "Nije konfiguriran pozadinski sustav za snimanje", + "SIP configuration" : "Konfiguracija SIP-a", + "Using the SIP functionality requires a High-performance backend." : "Korištenje SIP funkcionalnosti zahtijeva visokoučinkoviti pozadinski sustav.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Dodijeljeni telefonski brojevi za Talk ne smiju započinjati s + ili 0. Uklonite ili ažurirajte sljedeće brojeve:\n{list}", + "No SIP backend configured" : "Nije konfiguriran SIP pozadinski sustav", + "Invalid date, date format must be YYYY-MM-DD" : "Nevažeći datum, oblik datuma mora biti GGGG-MM-DD", + "Conversation not found" : "Razgovor nije pronađen", + "Path is already shared with this conversation" : "Putanja je već dijeljena s ovim razgovorom", + "Chat, video & audio-conferencing using WebRTC" : "Razmjena poruka, videopozivi i glasovne konferencije putem WebRTC-a", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video i audiokonferencije putem WebRTC-a\n\n* 💬 **Chat** Nextcloud Talk dolazi s jednostavnim tekstualnim chatom koji vam omogućuje dijeljenje ili prijenos datoteka iz aplikacije Nextcloud Datoteke ili s lokalnog uređaja te spominjanje drugih sudionika.\n* 👥 **Privatni, grupni, javni i lozinkom zaštićeni pozivi!** Pozovite nekoga, cijelu grupu ili pošaljite javnu poveznicu za poziv.\n* 🌐 **Udruženi chatovi** Chatajte s drugim Nextcloud korisnicima na njihovim poslužiteljima\n* 💻 **Dijeljenje zaslona!** Podijelite svoj zaslon sa sudionicima poziva.\n* 🚀 **Integracija s drugim Nextcloud aplikacijama** kao što su Datoteke, Kalendar, Status korisnika, Nadzorna ploča, Flow, Karte, Pametni birač, Kontakti, Deck i mnoge druge.\n* 🌉 **Sinkronizacija s drugim chat rješenjima** Budući da je [Matterbridge](https://github.com/42wim/matterbridge/) integriran u Talk, možete jednostavno sinkronizirati mnoga druga chat rješenja s Nextcloud Talkom i obrnuto.", + "Leave call" : "Napusti poziv", + "Navigating away from the page will leave the call in {conversation}" : "Zatvaranjem stranice napustit ćete poziv u {conversation}", + "Stay in call" : "Ostani u pozivu", + "Error occurred when getting the conversation information" : "Došlo je do pogreške pri dohvaćanju informacija o razgovoru", + "Discuss this file" : "Raspravi o ovoj datoteci", + "Share this file with others to discuss it" : "Podijeli ovu datoteku s drugima radi rasprave", + "Share this file" : "Dijeli ovu datoteku", + "Join conversation" : "Pridruži se razgovoru", + "This conversation is password-protected." : "Ovaj razgovor je zaštićen lozinkom.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Otkrili smo više neispravnih pokušaja unosa lozinke s vaše IP adrese. Stoga je vaš sljedeći pokušaj ograničen do 30 sekundi.", + "The password is wrong. Try again." : "Pogrešna zaporka. Pokušajte ponovno.", + "Password" : "Zaporka", + "Submit" : "Šalji", + "Error requesting the password." : "Pogreška pri traženju zaporke.", + "Request password" : "Zatraži zaporku", + "This conversation has ended" : "Ovaj je razgovor završio", + "Error occurred when joining the conversation" : "Došlo je do pogreške pri pridruživanju razgovoru", + "Close Talk sidebar" : "Zatvori Talk bočnu traku", + "Open Talk sidebar" : "Otvori Talk bočnu traku", + "Everyone" : "Svi", + "Users and moderators" : "Korisnici i moderatori", + "Moderators only" : "Samo moderatori", + "Disable calls" : "Onemogući pozive", + "Save changes" : "Spremi promjene", + "Saving …" : "Spremanje...", + "Saved!" : "Spremljeno!", + "Limit to groups" : "Ograniči na grupe", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Kada je odabrana barem jedna grupa, samo članovi navedenih grupa mogu sudjelovati u razgovorima.", + "Guests can still join public conversations." : "Gosti se i dalje mogu pridružiti javnim razgovorima.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Korisnici koji više ne mogu upotrebljavati aplikaciju Talk i dalje će biti navedeni kao sudionici u svojim završenim razgovorima i čuvat će se njihove razmijenjene poruke.", + "Limit using Talk" : "Ograniči korištenje aplikacije Talk", + "Limit creating a public and group conversation" : "Ograniči stvaranje javnih i grupnih razgovora", + "Limit creating conversations" : "Ograniči stvaranje razgovora", + "Limit starting a call" : "Ograniči upućivanje poziva", + "Limit starting calls" : "Ograniči upućivanje poziva", + "When a call has started, everyone with access to the conversation can join the call." : "Nakon uspostavljanja, pozivu se može pridružiti svatko kome je odobren pristup razgovoru.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Sljedeći botovi instalirani su na ovom poslužitelju. U dokumentaciji možete pronaći detalje kako {linkstart1}izraditi vlastitog bota{linkend} ili {linkstart2}popis botova{linkend} koje možete omogućiti na poslužitelju.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na ovom poslužitelju nisu instalirani botovi. U dokumentaciji možete pronaći detalje kako {linkstart1}izraditi vlastitog bota{linkend} ili {linkstart2}popis botova{linkend} koje možete omogućiti na poslužitelju.", + "Description is not provided" : "Opis nije naveden", + "Locked for moderators" : "Zaključano za moderatore", + "Enabled" : "Omogućeno", + "Disabled" : "Onemogućeno", + "Bots settings" : "Postavke botova", + "State" : "Stanje", + "Name" : "Naziv", + "Last error" : "Zadnja pogreška", + "Total errors count" : "Ukupan broj pogrešaka", + "Find more bots" : "Pronađi više botova", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Pouzdani poslužitelji mogu se konfigurirati na {linkstart}stranici postavki dijeljenja{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Udruženi chatovi i pozivi već rade. Rukovanje privicima dolazi u budućoj verziji.", + "Enable Federation in Talk app" : "Omogući udruživanje u aplikaciji Talk", + "Permissions" : "Dopuštenja", + "Allow users to be invited to federated conversations" : "Dopusti pozivanje korisnika u udružene razgovore", + "Allow users to invite federated users into conversation" : "Dopusti korisnicima pozivanje udruženih korisnika u razgovor", + "Only allow to federate with trusted servers" : "Dopusti udruženje samo s pouzdanim poslužiteljima", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Kada je odabrana barem jedna grupa, samo osobe iz navedenih grupa mogu pozivati udružene korisnike u razgovore.", + "Groups allowed to invite federated users" : "Grupe koje smiju pozivati udružene korisnike", + "Select groups …" : "Odaberite grupe …", + "All messages" : "Sve poruke", + "@-mentions only" : "Samo @-spominjanja", + "Off" : "Isključeno", + "General settings" : "Opće postavke", + "Default notification settings" : "Zadane postavke obavijesti", + "Default group notification" : "Zadane obavijesti grupe", + "Default group notification for new groups" : "Zadane obavijesti grupe za nove grupe", + "Integration into other apps" : "Integracija s drugim aplikacijama", + "Allow conversations on files" : "Dopusti razgovore na datotekama", + "Allow conversations on public shares for files" : "Dopusti razgovore na javnim dijeljenjima za datoteke", + "End-to-end encrypted calls" : "Pozivi s end-to-end enkripcijom", + "Enable encryption" : "Omogući šifriranje", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Pozivi s end-to-end enkripcijom uz konfiguriran SIP most zahtijevaju noviju verziju visokoučinkovitog pozadinskog sustava i SIP mosta.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilni klijenti trenutačno ne podržavaju pozive s end-to-end enkripcijom.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Informacije iz obrasca poslat će se tvrtki Struktur AG ako kliknete na gumb iznad. Više informacija možete pronaći na {linkstart}spreed.eu{linkend}.", + "Pending" : "Na čekanju", + "Error" : "Pogreška", + "Blocked" : "Blokiran", + "Active" : "Aktivan", + "Expired" : "Istekao", + "Never" : "Nikad", + "The trial could not be requested. Please try again later." : "Nije moguće zatražiti probni rad. Pokušajte ponovo kasnije.", + "The account could not be deleted. Please try again later." : "Nije moguće izbrisati račun. Pokušajte ponovo kasnije.", + "Hosted High-performance backend" : "Visokoučinkoviti pozadinski sustav na poslužitelju", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Naš partner Struktur AG pruža uslugu putem koje možete zatražiti signalni poslužitelj. Trebate ispuniti obrazac u nastavku i vaš će Nextcloud zatražiti signalni poslužitelj. Vjerodajnice se automatski popunjavaju nakon postavljanja poslužitelja. Time ćete prebrisati postavke postojećeg signalnog poslužitelja.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ako vaš račun visokoučinkovitog pozadinskog sustava uključuje STUN i/ili TURN funkcionalnost, postavke će se ažurirati u skladu s tim.", + "URL of this Nextcloud instance" : "URL ove instance Nextclouda", + "Full name of the user requesting the trial" : "Puno ime korisnika koji je zatražio probu", + "Email of the user" : "Adresa e-pošte korisnika", + "Language" : "Jezik", + "Country" : "Država", + "Request signaling server trial" : "Zatraži probu signalnog poslužitelja", + "You can see the current status of your hosted signaling server in the following table." : "Trenutni status signalnog poslužitelja možete pronaći u sljedećoj tablici.", + "Status" : "Status", + "Created at" : "Stvoreno", + "Expires at" : "Istječe u", + "Limits" : "Ograničenja", + "STUN included" : "STUN uključen", + "Yes" : "Da", + "No" : "Ne", + "TURN included" : "TURN uključen", + "Delete the signaling server account" : "Brisanje računa signalnog poslužitelja", + "_%n user_::_%n users_" : ["%n korisnik","%n korisnika","%n korisnika"], + "Installed version: {version}" : "Instalirana inačica: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Možete instalirati Matterbridge kako biste povezali Nextcloud Talk s nekim drugim uslugama. Posjetite njihovu {linkstart1}GitHub stranicu{linkend} za više detalja. Preuzimanje i instalacija aplikacije može potrajati. Ako dođe do isteka vremena, instalirajte je ručno iz {linkstart2}Nextcloud App Storea{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binarna datoteka ima neispravna dopuštenja. Provjerite je li binarna datoteka Matterbridge u vlasništvu ispravnog korisnika i može li se izvršavati. Nalazi se u \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Binarna datoteka Matterbridge nije pronađena ili se ne može izvršiti.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Put do binarnog programa Matterbridge također možete ručno postaviti u samoj konfiguraciji. Dodatne informacije potražite u {linkstart}dokumentaciji za integraciju Matterbridgea{linkend}.", + "Downloading …" : "Preuzimanje…", + "Install Talk Matterbridge" : "Instalirajte Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Došlo je do pogreške pri instalaciji aplikacije Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Došlo je do pogreške pri instalaciji Talk Matterbridgea. Instalirajte ga ručno", + "Failed to execute Matterbridge binary." : "Izvršavanje binarne datoteke Matterbridge nije uspjelo.", + "Matterbridge integration" : "Matterbridge integracija", + "Enable Matterbridge integration" : "Omogućite Matterbridge integraciju", + "Status: Checking connection" : "Status: provjeravanje veze", + "OK: Running version: {version}" : "U redu: trenutna inačica: {version}", + "Error: Server seems to be a Signaling server" : "Pogreška: Poslužitelj se čini signalnim poslužiteljem", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Pogreška: Sustavna vremena Nextcloud poslužitelja i poslužitelja pozadinskog sustava za snimanje nisu usklađena. Provjerite jesu li oba poslužitelja povezana s poslužiteljem vremena ili ručno sinkronizirajte vrijeme.", + "Recording backend URL" : "URL pozadinskog sustava za snimanje", + "Validate SSL certificate" : "Potvrdi vjerodajnicu SSL-a", + "Delete this server" : "Izbriši ovaj poslužitelj", + "Test this server" : "Ispitaj ovaj poslužitelj", + "Disabled for all calls" : "Onemogućeno za sve pozive", + "Enabled for all calls" : "Omogućeno za sve pozive", + "Configurable on conversation level by moderators" : "Moguće je podesiti na razini razgovora od strane moderatora", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP postavke \"upload_max_filesize\" ili \"post_max_size\" omogućit će prijenos datoteka samo do {maxUpload}.", + "Recording backend settings saved" : "Postavke pozadinskog sustava za snimanje su spremljene", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorima će biti dopušteno omogućiti privolu na razini razgovora. Privola za snimanje bit će potrebna za svakog sudionika prije pridruživanja svakom pozivu u ovom razgovoru.", + "The consent to be recorded will be required for each participant before joining every call." : "Privola za snimanje bit će potrebna za svakog sudionika prije pridruživanja svakom pozivu.", + "The consent to be recorded is not required." : "Privola za snimanje nije potrebna.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfiguracija pozadinskog sustava za snimanje moguća je samo uz visokoučinkoviti pozadinski sustav.", + "Add a new recording backend server" : "Dodaj novi poslužitelj pozadinskog sustava za snimanje", + "Shared secret" : "Dijeljen tajni ključ", + "Recording consent" : "Privola za snimanje", + "Recording transcription" : "Pretvaranje snimke u tekst", + "Automatically transcribe call recordings with a transcription provider" : "Automatski pretvori snimke poziva u tekst uz pružatelja", + "Automatically summarize call recordings with transcription and summary providers" : "Automatski sažmi snimke poziva uz pružatelje pretvanja u tekst i sažetaka", + "SIP configuration saved!" : "SIP konfiguracija je spremljena!", + "SIP configuration is only possible with a High-performance backend." : "SIP konfiguracija moguća je samo uz visokoučinkoviti pozadinski sustav.", + "Enable SIP Dial-out option" : "Omogući opciju SIP biranja prema van", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalni poslužitelj mora se ažurirati kako bi podržavao značajku SIP biranja prema van.", + "Do not show SIP Dial-out caller number" : "Ne prikazuj broj pozivatelja za SIP biranje prema van", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anoniman broj trebao bi se primatelju poziva prikazati kao \"unknown\" ili \"withheld number\"", + "Dial-out number" : "Broj za biranje prema van", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Broj u E164 formatu koji se koristi kao rezervni broj pozivatelja za odlazne pozive", + "Dial-out prefix" : "Prefiks biranja prema van", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefiks koji se dodaje na konfigurirani korisnički broj za odlazne pozive (zadano je `+`)", + "Restrict SIP configuration" : "Ograniči konfiguraciju SIP-a", + "Enable SIP configuration" : "Omogući konfiguraciju SIP-a", + "Only users of the following groups can enable SIP in conversations they moderate" : "Samo korisnici iz sljedećih grupa mogu omogućiti SIP u razgovorima koje moderiraju", + "Phone number (Country)" : "Broj telefona (država)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ove se informacije šalju u porukama e-pošte s pozivnicama i prikazuju se u bočnoj traci sudionika.", + "Nextcloud base URL" : "Osnovni URL Nextclouda", + "Talk Backend URL" : "URL Talk pozadinskog sustava", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Dostupne značajke", + "Error: Websocket connection failed" : "Pogreška: WebSocket veza nije uspjela", + "Error code" : "Kôd pogreške", + "Error message" : "Poruka o pogrešci", + "Error: Websocket connection failed. Check browser console" : "Pogreška: WebSocket veza nije uspjela. Provjerite konzolu preglednika", + "High-performance backend URL" : "URL visokoučinkovitog pozadinskog sustava", + "Missing High-performance backend warning hidden" : "Upozorenje o nedostajućem visokoučinkovitom pozadinskom sustavu je skriveno", + "High-performance backend settings saved" : "Postavke visokoučinkovitog pozadinskog sustava su spremljene", + "Nextcloud Talk setup not complete" : "Postavljanje Nextcloud Talka nije dovršeno", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Napomena: u pozivima s više od 2 sudionika bez visokoučinkovitog pozadinskog sustava sudionici će vrlo vjerojatno imati probleme s povezivošću, a sudjelujući uređaji bit će snažno opterećeni.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instalirajte visokoučinkoviti pozadinski sustav kako bi pozivi s više sudionika radili besprijekorno.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Kratki vodič za instalaciju", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Visokoučinkoviti pozadinski sustav potreban je za pozive i razgovore s više sudionika. Bez pozadinskog sustava svi sudionici moraju zasebno slati vlastiti video svakom drugom sudioniku, što će vrlo vjerojatno uzrokovati probleme s povezivošću i veliko opterećenje sudjelujućih uređaja.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Preporučuje se postaviti distribuiranu predmemoriju pri korištenju Nextcloud Talka s visokoučinkovitim pozadinskim sustavom.", + "Add High-performance backend server" : "Dodaj poslužitelj visokoučinkovitog pozadinskog sustava", + "Warn about connectivity issues in calls with more than 2 participants" : "Upozori na probleme s povezivošću u pozivima s više od 2 sudionika", + "STUN server URL" : "URL poslužitelja STUN", + "The server address is invalid" : "Adresa poslužitelja nije valjana", + "STUN settings saved" : "STUN postavke su spremljene", + "STUN servers" : "Poslužitelji STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Poslužitelj STUN upotrebljava se za određivanje javne IP adrese sudionika iza usmjerivača.", + "Add a new STUN server" : "Dodaj novi STUN poslužitelj", + "{schema} scheme must be used with a domain" : "Shema {schema} mora se upotrebljavati s domenom", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "Samo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "U redu: poslužitelj TURN vratio je uspješne ICE kandidate", + "Error: No working ICE candidates returned by the TURN server" : "Pogreška: poslužitelj TURN nije vratio ispravne ICE kandidate", + "Testing whether the TURN server returns ICE candidates" : "Ispitivanje hoće li poslužitelj TURN vratiti ICE kandidate", + "TURN server schemes" : "Sheme poslužitelja TURN", + "TURN server URL" : "URL poslužitelja TURN", + "TURN server secret" : "Tajni ključ poslužitelja TURN", + "TURN server protocols" : "Protokoli poslužitelja TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Poslužitelj TURN upotrebljava se za usmjeravanje prometa sudionika iza vatrozida. Ako se pojedini sudionici ne mogu povezati s drugim sudionicima, vjerojatno je potreban poslužitelj TURN. Upute za postavljanje poslužitelja možete pronaći u {linkstart}ovoj dokumentaciji{linkend}.", + "TURN settings saved" : "TURN postavke su spremljene", + "TURN servers" : "Poslužitelji TURN", + "Add a new TURN server" : "Dodaj novi TURN poslužitelj", + "Failed" : "Neuspjelo", + "OK" : "U redu", + "Checking …" : "Provjera …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Neuspjelo: WebAssembly je onemogućen ili ga ovaj preglednik ne podržava. Omogućite WebAssembly ili koristite preglednik koji ga podržava kako biste proveli provjeru.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Neuspjelo: web-poslužitelj nije ispravno vratio datoteke \".wasm\" i \".tflite\". Provjerite odjeljak \"Sistemski zahtjevi\" u Talk dokumentaciji.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "U redu: web-poslužitelj je ispravno vratio datoteke \".wasm\" i \".tflite\".", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Čini se da PHP i Apache konfiguracija nisu kompatibilne. Imajte na umu da se PHP može koristiti samo s modulom MPM_PREFORK, a PHP-FPM samo s modulom MPM_EVENT.", + "Web server setup checks" : "Provjere postavljanja web-poslužitelja", + "Files required for virtual background can be loaded" : "Datoteke potrebne za virtualnu pozadinu mogu se učitati", + "Federated user" : "Udruženi korisnik", + "Assign participants to rooms" : "Dodijeli sudionike u sobe", + "Configure breakout rooms" : "Konfiguriraj sobe za odvajanje", + "Number of breakout rooms" : "Broj soba za odvajanje", + "You can create from 1 to 20 breakout rooms." : "Možete stvoriti od 1 do 20 soba za odvajanje.", + "Assignment method" : "Način dodjele", + "Automatically assign participants" : "Automatski dodijeli sudionike", + "Manually assign participants" : "Ručno dodijeli sudionike", + "Allow participants to choose" : "Dopusti sudionicima odabir", + "Create rooms" : "Stvori sobe", + "Confirm" : "Potvrdi", + "Create breakout rooms" : "Stvori sobe za odvajanje", + "Reset" : "Resetiraj", + "Delete breakout rooms" : "Izbriši sobe za odvajanje", + "Room {roomNumber}" : "Soba {roomNumber}", + "Current breakout rooms and settings will be lost" : "Trenutačne sobe za odvajanje i postavke bit će izgubljene", + "Cancel" : "Odustani", + "Unassigned participants" : "Nedodijeljeni sudionici", + "Back" : "Natrag", + "Assign" : "Dodijeli", + "Add participant \"{user}\"" : "Dodaj sudionika „{user}”", + "Now" : "Sada", + "Invalid calendar selected" : "Odabran je neispravan kalendar", + "Invalid start time selected" : "Odabrano je neispravno vrijeme početka", + "Invalid end time selected" : "Odabrano je neispravno vrijeme završetka", + "Unknown error occurred" : "Došlo je do nepoznate pogreške", + "Sending no invitations" : "Ne šalju se pozivnice", + "{participant0} will receive an invitation" : "{participant0} će primiti pozivnicu", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} će primiti pozivnice", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i još %n osoba primit će pozivnicu","{participant0}, {participant1} i još %n osobe primit će pozivnice","{participant0}, {participant1} i još %n osoba primit će pozivnice"], + "Invite {user}" : "Pozovi {user}", + "Invite all users and emails in this conversation" : "Pozovi sve korisnike i adrese e-pošte u ovom razgovoru", + "Meeting created" : "Sastanak je stvoren", + "Upcoming meetings" : "Nadolazeći sastanci", + "Loading …" : "Učitavanje…", + "No upcoming meetings" : "Nema nadolazećih sastanaka", + "Schedule a meeting" : "Zakaži sastanak", + "Meeting title" : "Naslov sastanka", + "From" : "Od", + "To" : "Za", + "Calendar" : "Kalendar", + "Attendees" : "Sudionici", + "No other participants to send invitations to." : "Nema drugih sudionika kojima bi se poslale pozivnice.", + "Add attendees" : "Dodaj sudionike", + "Save" : "Spremi", + "Search participants" : "Pretraži sudionike", + "No results" : "Nema rezultata", + "Done" : "Gotovo", + "Disable live transcription" : "Onemogući pretvaranje u tekst uživo", + "Enable live transcription (generated by AI)" : "Omogući pretvaranje u tekst uživo (generirano umjetnom inteligencijom)", + "Enable live transcription (Live transcriptions app is not installed)" : "Omogući pretvaranje u tekst uživo (Aplikacija generiranja umjetnom inteligencijom nije instalirana)", + "Disable live translation" : "Onemogući prijevod uživo", + "Enable live translation (generated by AI)" : "Omogući prijevod uživo (generirano umjetnom inteligencijom)", + "Original language" : "Originalni jezik", + "Live translations app is not installed" : "Aplikacija za prijevod uživo nije instalirana", + "Original language: {languageName}" : "Izvorni jezik: {languageName}", + "Translated language" : "Prevedeni jezik", + "Translated language: {languageName}" : "Prevedeni jezik: {languageName}", + "Raise hand" : "Podigni ruku", + "Raise hand (R)" : "Podigni ruku (R)", + "Lower hand" : "Spusti ruku", + "Lower hand (R)" : "Spusti ruku (R)", + "Exit full screen (F)" : "Izađi iz prikaza preko cijelog zaslona (F)", + "Full screen (F)" : "Prikaz preko cijelog zaslona (F)", + "Speaker view" : "Prikaz govornika", + "Grid view" : "Prikaz rešetke", + "Error when trying to load the available live transcription languages" : "Pogreška pri učitavanju dostupnih jezika za pretvaranje u tekst uživo", + "Failed to enable live transcription" : "Nije uspjelo omogućiti pretvaranje u tekst uživo", + "Failed to enable live translations" : "Nije uspjelo omogućiti prijevode uživo", + "Failed to disable live translations" : "Nije uspjelo onemogućiti prijevode uživo", + "Recording consent is required" : "Potrebna je privola za snimanje", + "This conversation is read-only" : "Ovaj razgovor je samo za čitanje", + "Conversation not found or not joined" : "Razgovor nije pronađen ili mu niste pristupili", + "Lobby is still active and you're not a moderator" : "Predvorje je još aktivno, a vi niste moderator", + "Connection failed" : "Povezivanje nije uspjelo", + "Reload" : "Ponovno učitaj", + "{nickName} raised their hand." : "{nickName} je podigao ruku.", + "A participant raised their hand." : "Sudionik je podigao ruku.", + "Collapse stripe" : "Sakrij traku", + "Expand stripe" : "Proširi traku", + "Previous page of videos" : "Prethodna stranica s videozapisima", + "Next page of videos" : "Sljedeća stranica s videozapisima", + "Connecting …" : "Povezivanje…", + "Calling …" : "Pozivanje …", + "Waiting for {user} to join the call" : "Čeka se da se {user} pridruži pozivu", + "Waiting for others to join the call …" : "Čekaju se drugi sudionici da se pridruže pozivu...", + "You can invite others in the participant tab of the sidebar" : "Druge sudionike možete pozvati putem kartice sudionika na bočnoj traci", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Druge sudionike možete pozvati putem kartice sudionika na bočnoj traci ili slanjem ove poveznice!", + "Share this link to invite others!" : "Podijelite ovu poveznicu kako biste pozvali ostale sudionike!", + "Copy link" : "Kopiraj poveznicu", + "You are not allowed to enable audio" : "Nije vam dopušteno omogućiti zvuk", + "No audio. Click to select device" : "Nema zvuka. Kliknite za odabir uređaja", + "Mute audio" : "Isključi zvuk", + "Mute audio (M)" : "Isključi zvuk (M)", + "Unmute audio" : "Uključi zvuk", + "Unmute audio (M)" : "Uključi zvuk (M)", + "None" : "Nema", + "Select a microphone" : "Odaberite mikrofon", + "Select a speaker" : "Odaberite zvučnik", + "Microphone settings" : "Postavke mikrofona", + "Check devices" : "Provjeri uređaje", + "Access to camera was denied" : "Pristup kameri je odbijen", + "Error while accessing camera: It is likely in use by another program" : "Pogreška pri pristupu kameri: vjerojatno je koristi drugi program", + "Error while accessing camera" : "Došlo je do pogreške pri pristupanju kameri", + "You have been muted by a moderator" : "Utišao vas je moderator", + "Hide presenter video" : "Sakrij video prezentera", + "You are not allowed to enable video" : "Nije vam dopušteno omogućiti videoprijenos", + "No video. Click to select device" : "Nema videa. Kliknite za odabir uređaja", + "Disable video" : "Onemogući videoprijenos", + "Disable video (V)" : "Onemogući videoprijenos (V)", + "Enable video" : "Omogući videoprijenos", + "Enable video (V)" : "Omogući videoprijenos (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući video – vaša će se veza kratko prekinuti pri prvom uključivanju videa", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući videoprijenos (V) – veza će se nakratko prekinuti pri prvom omogućivanju videoprijenosa", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Omogući videoprijenos. Veza će se nakratko prekinuti pri prvom omogućivanju videoprijenosa", + "Select a video device" : "Odaberite video uređaj", + "Show presenter" : "Prikaži prezentera", + "You" : "Vi", + "Mute" : "Utišaj", + "Muted" : "Isključeno", + "Show screen" : "Prikaži zaslon", + "Stop following" : "Prekini praćenje", + "Connection could not be established …" : "Nije moguće uspostaviti vezu …", + "Connection was lost and could not be re-established …" : "Veza je izgubljena i nije je moguće ponovno uspostaviti …", + "Connection could not be established. Trying again …" : "Nije moguće uspostaviti vezu. Pokušavam ponovno …", + "Connection lost. Trying to reconnect …" : "Veza je izgubljena. Pokušavam ponovno povezivanje …", + "Connection problems …" : "Problemi s vezom …", + "Collapse" : "Sakrij", + "Expand" : "Proširi", + "You need to be logged in to upload files" : "Morate biti prijavljeni kako biste otpremali datoteke", + "Drop your files to upload" : "Ispustite datoteke za otpremu", + "Conversation messages" : "Poruke razgovora", + "Scroll to bottom" : "Pomakni se na dno", + "Post message" : "Objavi poruku", + "Federated conversation" : "Udruženi razgovor", + "Public conversation" : "Javni razgovor", + "Favorite" : "Favorit", + "Banned users" : "Zabranjeni korisnici", + "Manage the list of banned users in this conversation." : "Upravljajte popisom zabranjenih korisnika u ovom razgovoru.", + "Manage bans" : "Upravljanje zabranama", + "No banned users" : "Nema zabranjenih korisnika", + "Banned by:" : "Zabranio:", + "Date:" : "Datum:", + "Note:" : "Napomena:", + "Hide details" : "Sakrij pojedinosti", + "Show details" : "Prikaži pojedinosti", + "Unban" : "Ukloni zabranu", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Naslov i opis možete promijeniti u {linkstart}Kalendaru ↗{linkend}.", + "Error while updating conversation name" : "Pogreška pri ažuriranju naziva razgovora", + "Error while updating conversation description" : "Pogreška pri ažuriranju opisa razgovora", + "Enter a name for this conversation" : "Unesite naziv za ovaj razgovor", + "Edit conversation name" : "Uredi naziv razgovora", + "Edit conversation description" : "Opis uređivanja razgovora", + "Enter a description for this conversation" : "Unesite opis ovog razgovora", + "Picture" : "Slika", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Sljedeći botovi mogu se omogućiti u ovom razgovoru. Obratite se administraciji da instalira više botova na ovom poslužitelju.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na ovom poslužitelju nisu instalirani botovi. Obratite se administraciji da instalira botove na ovom poslužitelju.", + "Disable" : "Onemogući", + "Enable" : "Omogući", + "Breakout rooms" : "Sobe za odvajanje", + "Manage breakout rooms" : "Upravljanje sobama za odvajanje", + "Set up breakout rooms for this conversation" : "Postavite sobe za odvajanje za ovaj razgovor", + "Please select a valid PNG or JPG file" : "Odaberite valjanu PNG ili JPG datoteku", + "Choose your conversation picture" : "Odaberite sliku razgovora", + "Choose" : "Odaberite", + "Error setting conversation picture" : "Pogreška pri postavljanju slike razgovora", + "Could not set the conversation picture: {error}" : "Nije moguće postaviti sliku razgovora: {error}", + "Error cropping conversation picture" : "Pogreška pri obrezivanju slike razgovora", + "Error removing conversation picture" : "Pogreška pri uklanjanju slike razgovora", + "Set emoji as conversation picture" : "Postavi emoji kao sliku razgovora", + "Set background color for conversation picture" : "Postavi boju pozadine za sliku razgovora", + "Upload conversation picture" : "Prenesi sliku razgovora", + "Choose conversation picture from files" : "Odaberite sliku razgovora iz datoteka", + "Remove conversation picture" : "Ukloni sliku razgovora", + "The file must be a PNG or JPG" : "Datoteka mora biti PNG ili JPG", + "Set picture" : "Postavi sliku", + "Default permissions modified for {conversationName}" : "Izmijenjena su zadana dopuštenja za {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nije moguće izmijeniti zadana dopuštenja za {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Uredite zadana dopuštenja za sudionike ovog razgovora. Ove postavke ne utječu na moderatore.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Svaki put kada se u ovom odjeljku izmijene dopuštenja, izgubit će se prilagođena dopuštenja koja su prethodno dodijeljena pojedinim sudionicima.", + "All permissions" : "Sva dopuštenja", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Sudionici imaju dopuštenja za pokretanje poziva, pridruživanje pozivu, uključivanje zvuka i videa te dijeljenje zaslona.", + "Restricted" : "Ograničeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Sudionici se mogu pridružiti pozivima, ali ne mogu uključiti zvuk ni video niti dijeliti zaslon dok im moderator ručno ne dodijeli dopuštenja.", + "Advanced permissions" : "Napredna dopuštenja", + "Edit permissions" : "Uredi dopuštenja", + "Conversation settings" : "Postavke razgovora", + "Basic Info" : "Osnovne informacije", + "Personal" : "Osobno", + "Moderation" : "Moderiranje", + "Setup overview" : "Pregled postavljanja", + "Live transcription" : "Pretvaranje u tekst uživo", + "Live transcriptions app is not installed" : "Aplikacija za pretvaranje u tekst nije instaliranja", + "Enable live transcription" : "Omogući pretvaranje u tekst uživo", + "Breakout Rooms" : "Sobe za odvajanje", + "Matterbridge" : "Matterbridge", + "Bots" : "Botovi", + "Danger zone" : "Zona opasnosti", + "Archive conversation" : "Arhiviraj razgovor", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arhivirani razgovori zadano su skriveni s popisa razgovora. Ipak, i dalje će se pojaviti kada pretražujete naziv razgovora ili pristupite popisu arhiviranih razgovora.", + "Do you really want to leave \"{displayName}\"?" : "Želite li zaista napustiti „{displayName}”?", + "You can archive this conversation instead." : "Umjesto toga možete arhivirati ovaj razgovor.", + "Leave conversation" : "Napusti razgovor", + "You need to promote a new moderator before you can leave the conversation" : "Prije nego što možete napustiti razgovor, morate promovirati novog moderatora", + "Delete conversation" : "Izbriši razgovor", + "Do you really want to delete \"{displayName}\"?" : "Želite li zaista izbrisati „{displayName}“?", + "Error while deleting conversation" : "Pogreška pri brisanju razgovora", + "Delete all chat messages" : "Izbriši sve razmijenjene poruke", + "Do you really want to delete all messages in \"{displayName}\"?" : "Želite li zaista izbrisati sve poruke u „{displayName}“?", + "Error while clearing chat history" : "Pogreška pri brisanju povijesti razmjene poruka", + "Be careful, these actions cannot be undone." : "Pažljivo nastavite jer ove radnje nije moguće poništiti.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Nakon izlaska iz razgovora za ponovni pristup zatvorenom razgovoru potreban je poziv. Otvorenom razgovoru možete se ponovno pridružiti u bilo kojem trenutku.", + "Permanently delete this conversation." : "Trajno izbrišite ovaj razgovor.", + "Delete chat messages" : "Izbriši razmijenjene poruke", + "Permanently delete all the messages in this conversation." : "Trajno izbrišite sve poruke u ovom razgovoru.", + "_%n hour_::_%n hours_" : ["%n sat","%n sata","%n sati"], + "_%n day_::_%n days_" : ["%n dan","%n dana","%n dana"], + "_%n week_::_%n weeks_" : ["%n tjedan","%n tjedna","%n tjedana"], + "Custom expiration time" : "Prilagođeno vrijeme isteka", + "Message expiration disabled" : "Istjecanje poruka je onemogućeno", + "Message expiration set: {duration}" : "Istjecanje poruka postavljeno: {duration}", + "Error when trying to set message expiration" : "Pogreška pri postavljanju istjecanja poruka", + "Message expiration" : "Istjecanje poruka", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Poruke u chatu mogu isteći nakon određenog vremena. Napomena: datoteke podijeljene u chatu neće biti obrisane vlasniku, ali se više neće dijeliti u razgovoru.", + "Set message expiration" : "Postavi istjecanje poruka", + "Current message expiration" : "Trenutačno istjecanje poruka", + "Password copied to clipboard" : "Lozinka je kopirana u međuspremnik", + "Password could not be copied" : "Lozinku nije moguće kopirati", + "Guest access" : "Pristup gostiju", + "Breakout rooms are not allowed in public conversations." : "Sobe za odvajanje nisu dopuštene u javnim razgovorima.", + "Allow guests to join this conversation via link" : "Dopusti gostima pridruživanje ovom razgovoru putem poveznice", + "Password protection" : "Zaštita zaporkom", + "This conversation is password-protected. Guests need password to join" : "Ovaj razgovor je zaštićen lozinkom. Gosti trebaju lozinku za pridruživanje", + "Password protection is needed for public conversations" : "Za javne razgovore potrebna je zaštita lozinkom", + "Set a password" : "Postavi lozinku", + "Change password" : "Promijeni lozinku", + "Enter new password" : "Unesite novu lozinku", + "Save password" : "Spremi zaporku", + "Copy password" : "Kopiraj lozinku", + "Guests are allowed to join this conversation via link" : "Gostima je dopušteno pridružiti se ovom razgovoru putem poveznice", + "Guests are not allowed to join this conversation" : "Gostima nije dopušteno pridružiti se ovom razgovoru", + "Resend invitations" : "Ponovno pošalji pozivnice", + "This conversation is open to both registered users and users created with the Guests app" : "Ovaj je razgovor otvoren i za registrirane korisnike i za korisnike stvorene aplikacijom Gosti", + "This conversation is open to registered users" : "Ovaj je razgovor otvoren za registrirane korisnike", + "This conversation is limited to the current participants" : "Ovaj je razgovor ograničen na trenutačne sudionike", + "You opened the conversation to both registered users and users created with the Guests app" : "Otvorili ste razgovor i za registrirane korisnike i za korisnike stvorene aplikacijom Gosti", + "Error occurred when opening or limiting the conversation" : "Došlo je do pogreške pri otvaranju ili ograničavanju razgovora", + "Open conversation to registered users, showing it in search results" : "Otvori razgovor za registrirane korisnike, uz prikaz u rezultatima pretraživanja", + "Also open to users created with the Guests app" : "Također otvoreno za korisnike stvorene aplikacijom Gosti", + "Open conversation" : "Otvori razgovor", + "Set language spoken in calls" : "Postavi jezik koji se govori u pozivima", + "Languages could not be loaded" : "Nije moguće učitati jezike", + "Loading languages …" : "Učitavanje jezika …", + "Invalid language" : "Nevažeći jezik", + "Default language (English)" : "Zadani jezik (engleski)", + "Default live transcription language set" : "Zadani jezik pretvaranja u tekst uživo je postavljen", + "Live transcription language set: {languageName}" : "Jezik pretvaranja u tekst uživo postavljen: {languageName}", + "Error when trying to set live transcription language" : "Pogreška pri postavljanju jezika pretvaranja u tekst uživo", + "Start time: {date}" : "Vrijeme početka: {date}", + "Start time has been updated" : "Vrijeme početka je ažurirano", + "Error occurred while updating start time" : "Došlo je do pogreške pri ažuriranju vremena početka", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Omogućavanje predvorja uklonit će ne-moderatore iz poziva koji je u tijeku.", + "Enable lobby, restricting the conversation to moderators" : "Omogući predvorje, ograniči razgovor na moderatore", + "Meeting start time" : "Vrijeme početka sastanka", + "Start time (optional)" : "Vrijeme početka (neobvezno)", + "Import email participants" : "Uvezi sudionike putem e-pošte", + "You can import a list of email participants from a CSV file." : "Možete uvesti popis sudionika putem e-pošte iz CSV datoteke.", + "Poll drafts" : "Skice anketa", + "Browse poll drafts" : "Pregledaj skice anketa", + "Error occurred when locking the conversation" : "Došlo je do pogreške pri zaključavanju razgovora", + "Error occurred when unlocking the conversation" : "Došlo je do pogreške pri otključavanju razgovora", + "Lock conversation" : "Zaključaj razgovor", + "This will also terminate the ongoing call." : "Ovime ćete također prekinuti poziv.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zaključajte razgovor kako biste spriječili bilo koga da objavljuje poruke ili pokreće pozive", + "Edit" : "Uredi", + "More information" : "Više informacija", + "Delete" : "Izbriši", + "Add new bridged channel to current conversation" : "Dodaj novi povezani kanal u trenutačni razgovor", + "unknown state" : "nepoznato stanje", + "running" : "radi", + "not running, check Matterbridge log" : "nije pokrenuto, provjeri zapisnik Matterbridgea", + "not running" : "ne radi", + "Bridge saved" : "Veza spašena", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Zahvaljujući aplikaciji Matterbridge možete povezati kanale iz različitih sustava razmjene kratkih poruka.", + "More info on Matterbridge" : "Više informacija o Matterbridgeu", + "Messaging systems" : "Sustavi za razmjenu poruka", + "Enable bridge" : "Omogući povezivanje", + "Show Matterbridge log" : "Prikaži zapisnik Matterbridgea", + "Log content" : "Sadržaj zapisa", + "Only moderators are allowed to mention @all" : "Samo moderatori smiju spominjati @all", + "All participants are allowed to mention @all" : "Svi sudionici smiju spominjati @all", + "Participants are now allowed to mention @all." : "Sudionicima je sada dopušteno spominjati @all.", + "Mentioning @all has been limited to moderators." : "Spominjanje @all ograničeno je na moderatore.", + "Allow participants to mention @all" : "Dopusti sudionicima spominjanje @all", + "Mention permissions" : "Dopuštenja za spominjanje", + "Notifications" : "Obavijesti", + "Notify about calls in this conversation" : "Obavijesti o pozivima u ovom razgovoru", + "Important conversation" : "Važan razgovor", + "\"Do not disturb\" user status is ignored for important conversations" : "Status korisnika „Ne ometaj” zanemaruje se za važne razgovore", + "Sensitive conversation" : "Osjetljiv razgovor", + "Message preview will be disabled in conversation list and notifications" : "Pregled poruke bit će onemogućen na popisu razgovora i u obavijestima", + "Recording consent is required for calls in this conversation" : "Privola za snimanje potrebna je za pozive u ovom razgovoru", + "Recording consent is not required for calls in this conversation" : "Privola za snimanje nije potrebna za pozive u ovom razgovoru", + "Recording consent requirement was updated" : "Zahtjev za privolu za snimanje je ažuriran", + "Error occurred while updating recording consent" : "Došlo je do pogreške pri ažuriranju privole za snimanje", + "Recording Consent" : "Privola za snimanje", + "Recording consent cannot be changed once a call or breakout session has started." : "Privola za snimanje ne može se mijenjati nakon što je poziv ili sesija soba za odvajanje započela.", + "Require recording consent before joining call in this conversation" : "Zahtijevaj privolu za snimanje prije pridruživanja pozivu u ovom razgovoru", + "Recording consent is required for all calls" : "Privola za snimanje potrebna je za sve pozive", + "SIP dial-in is now possible without PIN requirement" : "SIP biranje prema unutra sada je moguće bez potrebe za PIN-om", + "SIP dial-in is now enabled" : "Povezivanje putem SIP-a je omogućeno", + "SIP dial-in is now disabled" : "Povezivanje putem SIP-a je onemogućeno", + "Error occurred when enabling SIP dial-in" : "Došlo je do pogreške pri omogućavanju povezivanja putem SIP-a", + "Error occurred when disabling SIP dial-in" : "Došlo je do pogreške pri onemogućavanju povezivanja putem SIP-a", + "Phone and SIP dial-in" : "Telefonsko i SIP biranje prema unutra", + "Enable phone and SIP dial-in" : "Omogući telefonsko i SIP biranje prema unutra", + "Allow to dial-in without a PIN" : "Dopusti biranje prema unutra bez PIN-a", + "Ongoing" : "U tijeku", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba je prihvatila","%n osobe su prihvatile","%n osoba je prihvatilo"], + "_%n person declined_::_%n people declined_" : ["%n osoba je odbila","%n osobe su odbile","%n osoba je odbilo"], + "_and %n other attachment_::_and %n other attachments_" : ["i još %n drugi privitak","i još %n druga privitka","i još %n drugih privitaka"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "U {conversation}", + "View attachment" : "Prikaži privitak", + "Join" : "Pridruži se", + "View conversation" : "Prikaži razgovor", + "View event on Calendar" : "Prikaži događaj u Kalendaru", + "Error while creating the conversation" : "Pogreška pri stvaranju razgovora", + "Hello, {displayName}" : "Pozdrav, {displayName}", + "Start meeting now" : "Pokreni sastanak sada", + "Give your meeting a title" : "Dajte sastanku naslov", + "Create and copy link" : "Stvori i kopiraj poveznicu", + "Create a new conversation" : "Stvori novi razgovor", + "Join open conversations" : "Pridruži se otvorenim razgovorima", + "Call a phone number" : "Nazovi telefonski broj", + "Scroll backward" : "Pomakni unatrag", + "Scroll forward" : "Pomakni naprijed", + "Schedule meetings" : "Zakaži sastanke", + "You don't have any upcoming meetings" : "Nemate nadolazećih sastanaka", + "Open calendar" : "Otvori kalendar", + "Unread mentions" : "Nepročitana spominjanja", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Poruke u kojima ste spomenuti prikazat će se ovdje. Osobe možete spomenuti upisivanjem @ nakon čega slijedi njihovo ime", + "Upcoming reminders" : "Nadolazeći podsjetnici", + "Message reminders" : "Podsjetnici poruka", + "Set a reminder on a message to be notified" : "Postavite podsjetnik na poruku kako biste dobili obavijest", + "Start a group conversation" : "Pokreni grupni razgovor", + "Create conversation" : "Stvori razgovor", + "Enter your name" : "Unesite svoje ime", + "Submit name and join" : "Pošalji ime i pridruži se", + "Do you already have an account?" : "Imate li već račun?", + "Log in" : "Prijavite se", + "Error while verifying uploaded file" : "Pogreška pri provjeri prenesene datoteke", + "Uploaded file is verified" : "Prenesena datoteka je provjerena", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Format sadržaja je CSV (vrijednosti odvojene zarezom):
- Redak zaglavlja je obvezan i mora odgovarati \"name\",\"email\" ili samo \"email\"
- Jedan unos po retku (npr. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Sudionici su uspješno dodani", + "Error while adding participants" : "Pogreška pri dodavanju sudionika", + "Import a file" : "Uvezi datoteku", + "Browse" : "Pregledaj", + "Verifying uploaded file …" : "Provjera prenesene datoteke …", + "This might take a moment" : "To može potrajati trenutak", + "Send invitations" : "Pošalji pozivnice", + "_%n invalid email_::_%n invalid emails_" : ["%n neispravna adresa e-pošte","%n neispravne adrese e-pošte","%n neispravnih adresa e-pošte"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adresa e-pošte već je uvezena ili je duplikat","%n adrese e-pošte već su uvezene ili su duplikati","%n adresa e-pošte već je uvezeno ili su duplikati"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n pozivnica se može poslati","%n pozivnice se mogu poslati","%n pozivnica se može poslati"], + "An error occurred while calling a phone number" : "Došlo je do pogreške pri pozivanju telefonskog broja", + "Phone number could not be called: {error}" : "Telefonski broj nije moguće pozvati: {error}", + "Phone number could not be called" : "Telefonski broj nije moguće pozvati", + "Search participants or phone numbers" : "Pretraži sudionike ili telefonske brojeve", + "Creating the conversation …" : "Stvaranje razgovora …", + "Mark as read" : "Označi kao pročitano", + "Mark as unread" : "Označi kao nepročitano", + "Remove from favorites" : "Ukloni iz favorita", + "Add to favorites" : "Dodaj u favorite", + "Unarchive conversation" : "Dearhiviraj razgovor", + "Ignore \"Do not disturb\"" : "Zanemari \"Ne ometaj\"", + "You need to promote a new moderator before you can leave the conversation." : "Morate odabrati novog moderatora prije nego što napustite razgovor.", + "Conversation actions" : "Radnje razgovora", + "Notify about calls" : "Obavijesti o pozivima", + "Hide message text" : "Sakrij tekst poruke", + "Pending invitations" : "Pozivnice na čekanju", + "Join conversations from other servers" : "Pridruži se razgovorima s drugih poslužitelja", + "From {user} at {remoteServer}" : "Od {user} na {remoteServer}", + "Decline invitation" : "Odbij pozivnicu", + "Accept invitation" : "Prihvati pozivnicu", + "No pending invitations" : "Nema pozivnica na čekanju", + "Home" : "Početna", + "Unread" : "Nepročitano", + "Mentions" : "Spominjanja", + "Meetings" : "Sastanci", + "Sort conversations" : "Sortiraj razgovore", + "By recent activity" : "Prema nedavnoj aktivnosti", + "Alphabetically" : "Abecedno", + "Do not group by type" : "Ne grupiraj po tipu", + "Show private ones first" : "Prvo prikaži privatne", + "Show group ones first" : "Prvo prikaži grupne", + "No followed threads" : "Nema praćenih niti", + "No matches found" : "Nema pronađenih podudaranja", + "No conversations found" : "Nije pronađen nijedan razgovor", + "You have no archived conversations." : "Nemate arhiviranih razgovora.", + "Subscribe to an existing thread or start your own." : "Pretplatite se na postojeću nit ili pokrenite vlastitu.", + "You have no unread mentions." : "Nemate nepročitanih spominjanja.", + "You have no unread messages." : "Nemate nepročitanih poruka.", + "An error occurred while performing the search" : "Došlo je do pogreške pri pretraživanju", + "Conversation list" : "Popis razgovora", + "Filter conversations by" : "Filtriraj razgovore prema", + "Unread messages" : "Nepročitane poruke", + "Meeting conversations" : "Razgovori u sastancima", + "Clear filters" : "Očisti filtre", + "New personal note" : "Nova osobna bilješka", + "SIP backend is not installed" : "SIP pozadinski sustav nije instaliran", + "Back to conversations" : "Natrag na razgovore", + "Archived conversations" : "Arhivirani razgovori", + "Threads" : "Niti", + "Clear filter" : "Ukloni filtar", + "Show more threads" : "Prikaži više niti", + "App settings" : "Postavke aplikacije", + "Users" : "Korisnici", + "Groups" : "Grupe", + "Teams" : "Timovi", + "Federated users" : "Udruženi korisnici", + "New private conversation" : "Novi privatni razgovor", + "Other sources" : "Drugi izvori", + "Open conversations" : "Otvori razgovore", + "No search results" : "Nema rezultata pretraživanja", + "Users, groups and teams" : "Korisnici, grupe i timovi", + "Users and groups" : "Korisnici i grupe", + "Users and teams" : "Korisnici i timovi", + "Groups and teams" : "Grupe i timovi", + "New group conversation" : "Novi grupni razgovor", + "The meeting will start soon" : "Sastanak počinje uskoro", + "This meeting is scheduled for {startTime}" : "Sastanak počinje u {startTime}", + "You are currently waiting in the lobby" : "Trenutno čekate u predvorju", + "Enable noise suppression" : "Omogući uklanjanje šuma", + "Reduce background noises for better voice quality" : "Smanjite pozadinske šumove za bolju kvalitetu glasa", + "Enable echo cancellation" : "Omogući poništavanje jeke", + "Minimize echo effect from own surrounding" : "Smanjite učinak jeke iz okoline", + "Enable auto gain control" : "Omogući automatsku kontrolu pojačanja", + "Dynamically adjust microphone volume for consistent level" : "Dinamički prilagođava glasnoću mikrofona za ujednačenu razinu", + "Select microphone" : "Odaberi mikrofon", + "No microphone available" : "Nema dostupnih mikrofona", + "Select speaker" : "Odaberite zvučnik", + "No speaker available" : "Nema dostupnog zvučnika", + "Select camera" : "Odaberi kameru", + "No camera available" : "Nema dostupnih kamera", + "Select a device" : "Odaberi uređaj", + "Playing …" : "Reprodukcija …", + "Test speakers" : "Testiraj zvučnike", + "Test" : "Ispitivanje", + "Devices" : "Uređaji", + "Backgrounds" : "Pozadine", + "No audio" : "Nema zvuka", + "No camera" : "Nema kamere", + "Display video as you will see it (mirrored)" : "Prikaži video kako ćete ga vi vidjeti (zrcaljeno)", + "Display video as others will see it" : "Prikaži video kako će ga drugi vidjeti", + "Calls are not supported in your browser" : "Vaš preglednik ne podržava pozive", + "Access to microphone is only possible with HTTPS" : "Pristup mikrofonu moguć je samo putem HTTPS-a", + "Access to microphone was denied" : "Pristup mikrofonu je odbijen", + "Error while accessing microphone" : "Došlo je do pogreške pri pristupanju mikrofonu", + "Access to camera is only possible with HTTPS" : "Pristup kameri moguć je samo putem HTTPS-a", + "The call is being recorded." : "Poziv se snima.", + "The call might be recorded." : "Poziv se možda snima.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Snimka može uključivati vaš glas, video s kamere i dijeljenje zaslona. Prije pridruživanja pozivu potrebna je vaša privola.", + "Give consent to the recording of this call" : "Dajem privolu za snimanje ovog poziva", + "Show more info" : "Prikaži više informacija", + "Audio is not available" : "Zvuk nije dostupan", + "Video is not available" : "Video nije dostupan", + "Start recording immediately with the call" : "Započni snimanje odmah s pozivom", + "Recording backend is not installed" : "Pozadinski sustav za snimanje nije instaliran", + "Notify all participants about this call" : "Obavijesti sve sudionike o ovom pozivu", + "Apply settings" : "Primijeni postavke", + "Select virtual office background" : "Odaberite virtualnu uredsku pozadinu", + "Select virtual home background" : "Odaberite virtualnu kućnu pozadinu", + "Select virtual abstract background" : "Odaberite virtualnu apstraktnu pozadinu", + "Select virtual beach background" : "Odaberite virtualnu pozadinu plaže", + "Select virtual park background" : "Odaberite virtualnu pozadinu parka", + "Select virtual theater background" : "Odaberite virtualnu pozadinu kazališta", + "Select virtual library background" : "Odaberite virtualnu pozadinu knjižnice", + "Select virtual space station background" : "Odaberite virtualnu pozadinu svemirske postaje", + "Error while uploading the file" : "Pogreška pri prijenosu datoteke", + "Select a file" : "Odaberite datoteku", + "Invalid path selected" : "Odabran nevažeći put", + "Select virtual background from file {fileName}" : "Odaberite virtualnu pozadinu iz datoteke {fileName}", + "Blur" : "Zamućenje", + "Upload" : "Učitaj", + "Files" : "Datoteke", + "(editing)" : "(uređivanje)", + "(edited)" : "(uređeno)", + "The message has expired or has been deleted" : "Poruka je istekla ili je obrisana", + "Cancel quote" : "Odustani od citiranja", + "24 hours" : "24 sata", + "7 days" : "7 dana", + "30 days" : "30 dana", + "Until unpin" : "Do otkvačivanja", + "Clear reminder – {timeLocale}" : "Ukloni podsjetnik – {timeLocale}", + "Edited by {actor}" : "Uredio {actor}", + "Pinned by you" : "Prikvačili ste", + "Pinned by {actor}" : "Prikvačio {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Tekst poruke kopiran je u međuspremnik", + "Message text could not be copied" : "Tekst poruke nije moguće kopirati", + "Message forwarded to \"Note to self\"" : "Poruka je proslijeđena u \"Bilješka za sebe\"", + "Error while forwarding message to \"Note to self\"" : "Pogreška pri prosljeđivanju poruke u \"Bilješka za sebe\"", + "A reminder was successfully removed" : "Podsjetnik je uspješno uklonjen", + "Error occurred when removing a reminder" : "Došlo je do pogreške pri uklanjanju podsjetnika", + "A reminder was successfully set at {datetime}" : "Podsjetnik je uspješno postavljen za {datetime}", + "Error occurred when creating a reminder" : "Došlo je do pogreške pri stvaranju podsjetnika", + "Add a reaction to this message" : "Dodaj reakciju na ovu poruku", + "Reply" : "Odgovori", + "More actions" : "Dodatne radnje", + "Set reminder" : "Postavi podsjetnik", + "Pin message" : "Prikvači poruku", + "Unpin message" : "Otkvači poruku", + "Reply privately" : "Odgovori privatno", + "Edit message" : "Uredi poruku", + "Copy message" : "Kopiraj poruku", + "Copy message link" : "Kopiraj poveznicu poruke", + "Go to file" : "Idi na datoteku", + "Download file" : "Preuzmi datoteku", + "Go to thread" : "Idi na nit", + "Edit thread details" : "Uredi detalje niti", + "Forward message" : "Proslijedi poruku", + "Translate" : "Prevedi", + "Set custom reminder" : "Postavi prilagođeni podsjetnik", + "Keep pinned for" : "Zadrži prikvačeno", + "Set custom period" : "Postavi prilagođeno razdoblje", + "Close reactions menu" : "Zatvori izbornik reakcija", + "React with {emoji}" : "Reagiraj s {emoji}", + "React with another emoji" : "Reagiraj drugim emojijem", + "Choose a conversation to forward the selected message." : "Odaberite razgovor u koji ćete proslijediti odabranu poruku.", + "Error while forwarding message" : "Pogreška pri prosljeđivanju poruke", + "The message has been forwarded to {selectedConversationName}" : "Poruka je proslijeđena u {selectedConversationName}", + "Dismiss" : "Zanemari", + "Go to conversation" : "Idi na razgovor", + "The message could not be translated" : "Poruku nije moguće prevesti", + "Translation copied to clipboard" : "Prijevod je kopiran u međuspremnik", + "Translation could not be copied" : "Prijevod nije moguće kopirati", + "Translate message" : "Prevedi poruku", + "Source language to translate from" : "Izvorni jezik za prijevod", + "Translate from" : "Prevedi s", + "Target language to translate into" : "Ciljni jezik prijevoda", + "Translate to" : "Prevedi na", + "Translating" : "Prevođenje", + "Copy translated text" : "Kopiraj prevedeni tekst", + "Error when scheduling the message" : "Pogreška pri zakazivanju poruke", + "Reschedule" : "Ponovno zakaži", + "Send now" : "Pošalji sada", + "Choose a time" : "Odaberite vrijeme", + "Send at custom time" : "Pošalji u prilagođeno vrijeme", + "Will be sent without notification" : "Bit će poslano bez obavijesti", + "Message read by everyone who shares their reading status" : "Poruku je pročitao svatko tko dijeli status čitanja", + "Message sent" : "Poruka poslana", + "Sent without notification" : "Poslano bez obavijesti", + "Deleting message" : "Brisanje poruke", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Poruka je uspješno obrisana, ali je konfiguriran bot ili Matterbridge pa je poruka možda već proslijeđena drugim uslugama", + "Message deleted successfully" : "Poruka je uspješno izbrisana", + "Message could not be deleted because it is too old" : "Poruku nije moguće izbrisati jer je prestara", + "Only normal chat messages can be deleted" : "Mogu se izbrisati samo uobičajene razmijenjene poruke", + "An error occurred while deleting the message" : "Došlo je do pogreške pri brisanju poruke", + "Pinned" : "Prikvačeno", + "Your browser does not support playing audio files" : "Vaš preglednik ne podržava reprodukciju zvučnih datoteka", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} u {board}", + "Deck Card" : "Deck kartica", + "Remove {fileName}" : "Ukloni {fileName}", + "Open this location in OpenStreetMap" : "Otvorite ovu lokaciju u aplikaciji OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odgovor","%n odgovora","%n odgovora"], + "Sending message" : "Slanje poruke", + "Failed to send the message. Click to try again" : "Slanje poruke nije uspjelo. Kliknite kako biste ponovno pokušali", + "Not enough free space to upload file" : "Nema dovoljno slobodnog prostora za otpremanje datoteke", + "You cannot send messages to this conversation at the moment" : "Trenutno ne možete slati poruke u ovaj razgovor", + "Could not update the message" : "Nije moguće ažurirati poruku", + "Reply to thread \"{threadTitle}\"" : "Odgovori u niti \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Glasali ste • %n glas","Glasali ste • %n glasa","Glasali ste • %n glasova"], + "You voted" : "Glasali ste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Glasajte • %n glas","Glasajte • %n glasa","Glasajte • %n glasova"], + "Click to vote" : "Klikni za glasanje", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Skica ankete • %n opcija","Skica ankete • %n opcije","Skica ankete • %n opcija"], + "_%n vote_::_%n votes_" : ["%n glas","%n glasa","%n glasova"], + "Edit poll draft" : "Uredi skicu ankete", + "Delete poll draft" : "Izbriši skicu ankete", + "Open poll" : "Otvorena anketa", + "Closed poll" : "Zatvorena anketa", + "See results" : "Prikaži rezultate", + "Reactions" : "Reakcije", + "No permission to post reactions in this conversation" : "Nemate dopuštenje za objavljivanje reakcija u ovom razgovoru", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i još %n drugi sudionik","i još %n druga sudionika","i još %n drugih sudionika"], + "Show all reactions" : "Prikaži sve reakcije", + "Add more reactions" : "Dodaj još reakcija", + "Show or collapse system messages" : "Prikaži ili sažmi sistemske poruke", + "No messages" : "Nema poruka", + "All messages have expired or have been deleted." : "Sve poruke su istekle ili su obrisane.", + "Generate summary with AI" : "Generiraj sažetak pomoću umjetne inteligencije", + "{author} (pinned by you)" : "{author} (prikvačeno od vas)", + "{author} (pinned by {actor})" : "{author} (prikvačio {actor})", + "Unpin" : "Otkvači", + "Cancel search" : "Odustani od pretraživanja", + "Add a phone number" : "Dodaj telefonski broj", + "Error: A password is required to create the conversation." : "Pogreška: Za stvaranje razgovora potrebna je lozinka.", + "All set, the conversation \"{conversationName}\" was created." : "Sve je spremno, razgovor \"{conversationName}\" je stvoren.", + "Create a new group conversation" : "Stvori novi grupni razgovor", + "Add participants" : "Dodaj sudionike", + "Maximum length exceeded ({maxlength} characters)" : "Prekoračena je maksimalna duljina ({maxlength} znakova)", + "Conversation visibility" : "Vidljivost razgovora", + "Allow guests to join via link" : "Dopusti pridruživanje gostiju putem pozivnice", + "Enter password" : "Unesi zaporku", + "This conversation has been locked" : "Ovaj je razgovor zaključan", + "No permission to post messages in this conversation" : "Nije dopušteno objavljivanje poruka u ovom razgovoru", + "Joining conversation …" : "Pridruživanje razgovoru...", + "Write a message without notification" : "Napiši poruku bez obavijesti", + "Create a thread silently" : "Stvori nit tiho", + "Create a thread" : "Stvori nit", + "Send message silently" : "Pošalji poruku tiho", + "Send message" : "Pošalji poruku", + "Send without notification" : "Pošalji bez obavijesti", + "The participant will not be notified about new messages" : "Sudionik neće biti obaviješten o novim porukama", + "Participants will not be notified about new messages" : "Sudionici neće biti obaviješteni o novim porukama", + "Message will be sent {datetimeString}" : "Poruka će biti poslana {datetimeString}", + "Thread title is required" : "Naslov niti je obvezan", + "Message text is required" : "Tekst poruke je obvezan", + "The message could not be edited" : "Poruku nije moguće urediti", + "File to share" : "Datoteka za dijeljenje", + "File upload is not available in this conversation" : "Prijenos datoteka nije dostupan u ovom razgovoru", + "Message was successfully scheduled" : "Poruka je uspješno zakazana", + "Add emoji" : "Dodaj emoji", + "Adding a mention will only notify users who did not read the message." : "Dodavanje spominjanja obavijestit će samo korisnike koji nisu pročitali poruku.", + "Thread title" : "Naslov niti", + "Send later" : "Pošalji kasnije", + "Show scheduled messages" : "Prikaži zakazane poruke", + "Cancel editing" : "Odustani od uređivanja", + "Schedule message" : "Zakaži poruku", + "{user} is out of office and might not respond." : "{user} je izvan ureda i možda neće odgovoriti.", + "Absence period: {startDate} - {endDate}" : "Razdoblje odsutnosti: {startDate} – {endDate}", + "Replacement:" : "Zamjena:", + "Share from {nextcloud}" : "Dijeli iz {nextcloud}", + "Share from Files" : "Dijeli iz datoteka", + "Share files to the conversation" : "Dijeli datoteke u razgovor", + "Upload from device" : "Prenesi s uređaja", + "Create new poll" : "Stvori novu anketu", + "Smart picker" : "Pametni odabir", + "Record voice message" : "Snimi glasovnu poruku", + "End recording and send" : "Završi snimak i pošalji", + "Dismiss recording" : "Odbaci snimak", + "Access to the microphone was denied" : "Pristup mikrofonu je odbijen", + "Microphone either not available or disabled in settings" : "Mikrofon nije raspoloživ ili je onemogućen u postavkama", + "Error while recording audio" : "Pogreška tijekom snimanja zvuka", + "Voice message {time} ({conversation})" : "Glasovna poruka {time} ({conversation})", + "Generating summary of unread messages …" : "Generiranje sažetka nepročitanih poruka …", + "Summary is AI generated and might contain mistakes" : "Sažetak je generirala umjetna inteligencija i može sadržavati pogreške", + "Error occurred during a summary generation" : "Došlo je do pogreške tijekom generiranja sažetka", + "New file" : "Nova datoteka", + "Blank" : "Prazno", + "Error while creating file" : "Pogreška pri stvaranju datoteke", + "Create and share a new file" : "Stvori i podijeli novu datoteku", + "Name of the new file" : "Naziv nove datoteke", + "Create file" : "Stvori datoteku", + "Someone is typing …" : "Netko piše …", + "{user1} is typing …" : "{user1} piše …", + "{user1} and {user2} are typing …" : "{user1} i {user2} pišu …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} pišu …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i još %n osoba pišu …","{user1}, {user2}, {user3} i još %n osobe pišu …","{user1}, {user2}, {user3} i još %n osoba pišu …"], + "Add more files" : "Dodaj više datoteka", + "Send" : "Pošalji", + "In this conversation {user} can:" : "U ovom razgovoru {user} može:", + "Edit default permissions for participants in {conversationName}" : "Uredite zadana dopuštenja za sudionike u {conversationName}", + "Start a call" : "Uputi poziv", + "Skip the lobby" : "Preskoči predvorje", + "Can post messages" : "Može slati poruke", + "Can post messages and reactions" : "Može slati poruke i reakcije", + "Can add reactions" : "Može dodavati reakcije", + "Enable the microphone" : "Omogućite mikrofon", + "Enable the camera" : "Omogućite kameru", + "Share the screen" : "Dijelite zaslon", + "Update permissions" : "Ažuriraj dopuštenja", + "Updating permissions" : "Ažuriranje dopuštenja", + "No poll drafts" : "Nema skica anketa", + "There is no poll drafts yet saved for this conversation" : "Još nema spremljenih skica anketa za ovaj razgovor", + "Create poll in {name}" : "Stvori anketu u {name}", + "Create poll" : "Stvori anketu", + "Error while importing poll" : "Pogreška pri uvozu ankete", + "Question" : "Pitanje", + "Ask a question" : "Postavite pitanje", + "Import draft from file" : "Uvezi skicu iz datoteke", + "Answers" : "Odgovori", + "Answer {option}" : "Odgovor {option}", + "Delete poll option" : "Izbriši opciju ankete", + "Add answer" : "Dodaj odgovor", + "Settings" : "Postavke", + "Anonymous poll" : "Anonimna anketa", + "Multiple answers" : "Više odgovora", + "Save as draft" : "Spremi kao skicu", + "Export draft to file" : "Izvezi skicu u datoteku", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konačni rezultati • %n glas","Konačni rezultati • %n glasa","Konačni rezultati • %n glasova"], + "Your vote is anonymous" : "Vaš glas je anoniman", + "You voted for this option" : "Glasali ste za ovu opciju", + "End poll" : "Završi anketu", + "Change your vote" : "Promijeni glas", + "Withdraw vote" : "Povuci glas", + "Results" : "Rezultati", + "Voted participants" : "Sudionici koji su glasali", + "Send a message to \"{roomName}\"" : "Pošalji poruku u \"{roomName}\"", + "Hide list of participants" : "Sakrij popis sudionika", + "Show list of participants" : "Prikaži popis sudionika", + "Assistance requested in {roomName}" : "Zatražena je pomoć u {roomName}", + "The message was sent to \"{roomName}\"" : "Poruka je poslana u \"{roomName}\"", + "Dismiss request for assistance" : "Odbaci zahtjev za pomoć", + "Send message to room" : "Pošalji poruku u sobu", + "Back to main room" : "Natrag u glavnu sobu", + "Back to your room" : "Natrag u vašu sobu", + "Message all rooms" : "Poruka svim sobama", + "Start session" : "Pokreni sesiju", + "Start a call before you start a breakout room session" : "Pokrenite poziv prije nego što pokrenete sesiju soba za odvajanje", + "Stop session" : "Zaustavi sesiju", + "The message was sent to all breakout rooms" : "Poruka je poslana u sve sobe za odvajanje", + "Send a message to all breakout rooms" : "Pošalji poruku u sve sobe za odvajanje", + "Breakout rooms are not started" : "Sobe za odvajanje nisu pokrenute", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Pozivi bez visokoučinkovitog pozadinskog sustava mogu uzrokovati probleme s povezivošću i veliko opterećenje uređaja. {linkstart}Saznajte više{linkend}", + "Talk setup incomplete" : "Postavljanje Talka nije dovršeno", + "Disable lobby" : "Onemogući predvorje", + "Settings for participant \"{user}\"" : "Postavke sudionika „{user}”", + "Participant \"{user}\"" : "Sudionik „{user}”", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gost", + "Ringing …" : "Zvoni …", + "Call rejected" : "Poziv je odbijen", + "{time} talking …" : "{time} razgovor …", + "{time} talking time" : "{time} vrijeme razgovora", + "Raised their hand" : "Podigli ruke", + "Joined with video" : "Pridružen putem videoveze", + "Joined via phone" : "Pridružen putem telefona", + "Joined with audio" : "Pridružen putem audioveze", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Tekst mora imati najviše {maxLength} znakova. Vaš trenutačni tekst ima {charactersCount} znakova.", + "Remove group and members" : "Ukloni grupu i članove", + "Remove team and members" : "Ukloni tim i članove", + "Remove participant" : "Ukloni sudionika", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Želite li zaista ukloniti grupu \"{displayName}\" i njezine članove iz ovog razgovora?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Želite li zaista ukloniti tim \"{displayName}\" i njegove članove iz ovog razgovora?", + "Do you really want to remove {displayName} from this conversation?" : "Želite li zaista ukloniti {displayName} iz ovog razgovora?", + "Notification was sent to {displayName}" : "Obavijest je poslana korisniku {displayName}", + "Could not send notification to {displayName}" : "Nije moguće poslati obavijest korisniku {displayName}", + "Permissions granted to {displayName}" : "Dopuštenja dodijeljena {displayName}", + "Could not modify permissions for {displayName}" : "Nije moguće izmijeniti dopuštenja za {displayName}", + "Permissions removed for {displayName}" : "Uklonjena su dopuštenja za {displayName}", + "Permissions set to default for {displayName}" : "Dopuštenja su vraćena na zadana za {displayName}", + "Phone number could not be hung up" : "Telefonski broj nije moguće prekinuti", + "Phone number could not be put on hold" : "Telefonski broj nije moguće staviti na čekanje", + "Phone number could not be muted" : "Telefonski broj nije moguće utišati", + "Phone number could not be unmuted" : "Telefonski broj nije moguće uključiti", + "DTMF message could not be sent" : "Nije moguće poslati DTMF poruku", + "Phone number copied to clipboard" : "Telefonski broj je kopiran u međuspremnik", + "Phone number could not be copied" : "Telefonski broj nije moguće kopirati", + "in the lobby" : "u predvorju", + "Dial out phone" : "Biraj prema van", + "Hang up phone" : "Prekini poziv", + "Move back to lobby" : "Vrati u predvorje", + "Move to conversation" : "Premjesti u razgovor", + "Dial-in PIN" : "PIN za povezivanje putem telefona", + "Demote from moderator" : "Ukloni moderatora", + "Promote to moderator" : "Unaprijedi u moderatora", + "Resend invitation" : "Ponovno pošalji pozivnicu", + "Send call notification" : "Pošalji obavijest o pozivu", + "Dial out phone number" : "Biraj telefonski broj prema van", + "Resume call for phone number" : "Nastavi poziv za telefonski broj", + "Put phone number on hold" : "Stavi telefonski broj na čekanje", + "Unmute phone number" : "Uključi telefonski broj", + "Mute phone number" : "Utišaj telefonski broj", + "Copy phone number" : "Kopiraj telefonski broj", + "Reset custom permissions" : "Poništi prilagođena dopuštenja", + "Grant all permissions" : "Dodijeli sva dopuštenja", + "Remove all permissions" : "Ukloni sva dopuštenja", + "Also ban from this conversation" : "Također zabrani u ovom razgovoru", + "Internal note (reason to ban)" : "Interna bilješka (razlog zabrane)", + "Remove" : "Ukloni", + "Permissions modified for {displayName}" : "Izmijenjena su dopuštenja za {displayName}", + "Add users, groups or teams" : "Dodaj korisnike, grupe ili timove", + "Add users or groups" : "Dodaj korisnike ili grupe", + "Add users or teams" : "Dodaj korisnike ili timove", + "Add users" : "Dodaj korisnike", + "Add groups or teams" : "Dodaj grupe ili timove", + "Add groups" : "Dodaj grupe", + "Add teams" : "Dodaj timove", + "Add other sources" : "Dodaj druge izvore", + "Add emails" : "Dodaj adrese e-pošte", + "Integrations" : "Integracije", + "Add federated users" : "Dodaj udružene korisnike", + "Searching …" : "Traženje…", + "Search for more users" : "Potraži još korisnika", + "You can search or add participants via name, email, or Federated Cloud ID" : "Možete pretraživati ili dodati sudionike prema imenu, e-pošti ili udruženom ID-u oblaka", + "Search or add participants" : "Traži ili dodaj sudionike", + "Invitation was sent to {actorId}" : "Pozivnica je poslana korisniku {actorId}", + "An error occurred while adding the participants" : "Došlo je do pogreške pri dodavanju sudionika", + "A new group conversation with selected participant will be created" : "Stvorit će se novi grupni razgovor s odabranim sudionikom", + "Participants" : "Sudionici", + "Pinned by a deleted user" : "Prikvačio obrisani korisnik", + "Participants ({count})" : "Sudionici ({count})", + "Open chat" : "Otvori prozor za razmjenu poruka", + "You have new unread messages in the chat." : "Imate nove nepročitane poruke u prozoru za razmjenu poruka.", + "You have been mentioned in the chat." : "Spomenuti ste u razmijenjenim porukama.", + "Search messages" : "Pretraži poruke", + "Chat" : "Razmjena poruka", + "Details" : "Pojedinosti", + "Shared items" : "Dijeljene stavke", + "Search in {name}" : "Pretraži u {name}", + "Threads in {name}" : "Niti u {name}", + "{actor} in {conversation}" : "{actor} u {conversation}", + "Search messages …" : "Pretraživanje poruka …", + "Search options" : "Mogućnosti pretraživanja", + "From User" : "Od korisnika", + "Since" : "Od", + "Until" : "Do", + "No results found" : "Nema rezultata", + "Load more results" : "Učitaj više rezultata", + "Recent threads" : "Nedavne niti", + "Projects" : "Projekti", + "No shared items" : "Nema dijeljenih stavki", + "Thread notifications" : "Obavijesti niti", + "Thread actions" : "Radnje niti", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Poveznica za sudjelovanje u razgovoru", + "No open conversations found" : "Nisu pronađeni otvoreni razgovori", + "Either there are no open conversations or you joined all of them." : "Ili nema otvorenih razgovora ili ste se pridružili svima.", + "Check spelling or use complete words." : "Provjerite pravopis ili upotrijebite cijele riječi.", + "Search conversations or users" : "Pretraži razgovore ili korisnike", + "Select conversation" : "Odaberi razgovor", + "Number length is not valid" : "Duljina broja nije valjana", + "Region code is not valid" : "Pozivni broj regije nije valjan", + "Number length is too short" : "Duljina broja je prekratka", + "Number length is too long" : "Duljina broja je preduga", + "Number is not valid" : "Broj nije valjan", + "Phone numbers" : "Telefonski brojevi", + "Display name: {name}" : "Prikazano ime: {name}", + "Edit display name" : "Uredi prikazano ime", + "Display name (required)" : "Prikazano ime (obvezno)", + "Save name" : "Spremi ime", + "I picked message bubbles" : "Odabrao sam oblačiće poruka", + "I picked the list style" : "Odabrao sam stil popisa", + "Error while setting personal setting" : "Pogreška pri postavljanju osobne postavke", + "Error while saving sounds setting" : "Pogreška pri spremanju postavke zvukova", + "Compact conversations list" : "Kompaktni popis razgovora", + "Chat appearance" : "Izgled chata", + "Messages list" : "Popis poruka", + "Message bubbles" : "Oblačići poruka", + "Play sounds when participants join or leave a call" : "Reproduciraj zvukove kad se sudionici pridruže ili napuste poziv", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Trenutačno nije dostupno na iPhoneu i iPadu zbog tehničkih ograničenja proizvođača", + "Notification settings" : "Postavke obavijesti", + "Sounds for chat and call notifications" : "Zvukovi za obavijesti chata i poziva", + "Invalid language ({languageId})" : "Neispravan jezik ({languageId})", + "Default language" : "Zadani jezik", + "Default language ({languageName})" : "Zadani jezik ({languageName})", + "Error when trying to load the available live translation languages" : "Pogreška pri učitavanju dostupnih jezika za prijevod uživo", + "Error when trying to set live translation language" : "Pogreška pri postavljanju jezika prijevoda uživo", + "Set language used to show the transcriptions" : "Postavi jezik za prikaz pretvorenih tekstova", + "Select location for attachments" : "Odaberite lokaciju privitaka", + "Error while setting attachment folder" : "Pogreška pri postavljanju mape za privitke", + "Error while setting read status privacy" : "Pogreška pri postavljanju privatnosti statusa čitanja", + "Error while setting typing status privacy" : "Pogreška pri postavljanju privatnosti statusa tipkanja", + "Error while setting default media state" : "Pogreška pri postavljanju zadanog stanja medija", + "Turn camera and microphone off by default" : "Zadano isključi kameru i mikrofon", + "Blur camera background by default" : "Zadano zamuti pozadinu kamere", + "Skip device preview before joining a call" : "Preskoči pregled uređaja prije pridruživanja pozivu", + "Appearance & Sounds" : "Izgled i zvukovi", + "Privacy" : "Privatnost", + "Send read receipts" : "Šalji potvrde čitanja", + "When off, all read statuses will be hidden" : "Ako je isključeno, svi statusi čitanja bit će skriveni", + "Share typing status" : "Dijeli status tipkanja", + "When off, all typing indicators will be hidden" : "Ako je isključeno, svi indikatori tipkanja bit će skriveni", + "Attachments folder" : "Mapa s privicima", + "Toggle full screen" : "Uključi/isključi prikaz preko cijelog zaslona", + "Return to Home screen" : "Vrati se na početni zaslon", + "Search" : "Traži", + "Shortcuts while in a chat" : "Prečaci u chatu", + "Focus the chat input" : "Fokusirajte ulazne poruke", + "Unfocus the chat input to use shortcuts" : "Odfokusirajte ulazne poruke kako biste iskoristili prečace", + "Edit your last message" : "Uredi svoju posljednju poruku", + "Shortcuts while in a call" : "Prečaci tijekom poziva", + "Camera on and off" : "Uključi/isključi kameru", + "Microphone on and off" : "Mikrofon uključen i isključen", + "Raise or lower hand" : "Podigni ili spusti ruku", + "Push to talk or push to mute" : "Pritisni za govor ili pritisni za utišavanje", + "Zoom-in / zoom-out a screen share" : "Povećaj / smanji dijeljenje zaslona", + "Mouse wheel" : "Kotačić miša", + "Start call silently" : "Pokreni poziv tiho", + "Start call" : "Uputi poziv", + "End call" : "Završi poziv", + "The server was updated, you cannot start or join a call." : "Poslužitelj je ažuriran, ne možete pokrenuti ni pridružiti se pozivu.", + "This call has just ended" : "Ovaj je poziv upravo završio", + "You will be able to join the call only after a moderator starts it." : "Pozivu ćete se moći pridružiti tek nakon što ga moderator pokrene.", + "End call for everyone" : "Završi poziv za sve", + "Starting the recording" : "Pokretanje snimanja", + "Recording" : "Snimanje", + "The call has been running for one hour." : "Poziv traje već jedan sat.", + "Cancel recording start" : "Otkaži pokretanje snimanja", + "Stop recording" : "Zaustavi snimanje", + "Send a reaction" : "Pošalji reakciju", + "React with {reaction}" : "Reagiraj s {reaction}", + "All tasks done!" : "Svi zadaci su dovršeni!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} od %n zadatka","{done} od %n zadatka","{done} od %n zadataka"], + "Add participants to this call" : "Dodaj sudionike u ovaj poziv", + "_%n participant in call_::_%n participants in call_" : ["%n sudionik u pozivu","%n sudionika u pozivu","%n sudionika u pozivu"], + "Scheduled messages" : "Zakazane poruke", + "You are not allowed to enable screensharing" : "Nije vam dopušteno omogućiti dijeljenje zaslona", + "No screensharing" : "Nema dijeljenja zaslona", + "Screensharing options" : "Mogućnosti dijeljenja zaslona", + "Enable screensharing" : "Omogući dijeljenje zaslona", + "Bad sent video and screen quality." : "Nekvalitetan videozapis i prikaz.", + "Bad sent screen quality." : "Nekvalitetan prikaz.", + "Bad sent video quality." : "Nekvalitetan videozapis.", + "Bad sent audio, video and screen quality." : "Nekvalitetan audiozapis, videozapis i prikaz.", + "Bad sent audio and screen quality." : "Nekvalitetan audiozapis i prikaz.", + "Bad sent audio and video quality." : "Nekvalitetan audiozapis i videozapis.", + "Bad sent audio quality." : "Nekvalitetan audiozapis.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaša internetska veza ili računalo su opterećeni pa drugi sudionici možda neće moći vidjeti vaš zaslon. Kako biste poboljšali situaciju, pokušajte isključiti zamućenje pozadine ili svoj video tijekom dijeljenja zaslona.", + "Disable background blur" : "Onemogući zamućenje pozadine", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa drugi sudionici možda neće vidjeti vaš zaslon. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaša internetska veza ili računalo je zauzeto pa drugi sudionici možda neće vidjeti vaš zaslon.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti zamućenje pozadine ili prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa dok dijelite zaslon.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti niti vidjeti vaš zaslon. Kako biste otklonili poteškoće, pokušajte onemogućiti dijeljenje zaslona.", + "Disable screenshare" : "Onemogući dijeljenje zaslona", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti zamućenje pozadine ili prijenos videozapisa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće vidjeti i razumjeti. Kako biste otklonili poteškoće, pokušajte onemogućiti prijenos videozapisa.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaša internetska veza ili računalo je zauzeto pa vas drugi sudionici možda neće razumjeti.", + "Screen sharing is not supported by your browser." : "Vaš preglednik ne podržava dijeljenje zaslona.", + "Screen sharing requires the page to be loaded through HTTPS." : "Dijeljenje zaslona zahtijeva učitavanje stranice putem HTTPS-a.", + "Screensharing requires the page to be loaded through HTTPS." : "Dijeljenje zaslona zahtijeva učitavanje stranice putem HTTPS-a.", + "An error occurred while starting screensharing." : "Došlo je do pogreške pri pokretanju dijeljenja zaslona.", + "Select virtual background" : "Odaberite virtualnu pozadinu", + "Show your screen" : "Pokaži svoj zaslon", + "Stop screensharing" : "Prekini dijeljenje zaslona", + "Mute others" : "Utišaj druge", + "Start recording" : "Započni snimanje", + "Set up breakout rooms" : "Postavi sobe za odvajanje", + "Download attendance list" : "Preuzmi popis prisutnosti", + "Open Calendar" : "Otvori Kalendar", + "Remove participant {name}" : "Ukloni sudionika {name}", + "Would you like to delete this conversation?" : "Želite li izbrisati ovaj razgovor?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ovaj će razgovor biti automatski izbrisan za sve nakon %n dan neaktivnosti.","Ovaj će razgovor biti automatski izbrisan za sve nakon %n dana neaktivnosti.","Ovaj će razgovor biti automatski izbrisan za sve nakon %n dana neaktivnosti."], + "Are you sure you want to delete this conversation?" : "Jeste li sigurni da želite izbrisati ovaj razgovor?", + "Delete now" : "Izbriši odmah", + "Keep" : "Zadrži", + "Open dialpad" : "Otvori tipkovnicu za biranje", + "Select a region" : "Odaberite regiju", + "Local time: {time}" : "Lokalno vrijeme: {time}", + "Scheduled {datetime}" : "Zakazano {datetime}", + "Scheduled for {datetime}" : "Zakazano za {datetime}", + "Search …" : "Traži …", + "Message without mention" : "Poruka bez spominjanja", + "Mention myself" : "Spomeni sebe", + "Mention everyone" : "Spomeni sve", + "Select a conversation" : "Odaberite razgovor", + "Select a mode" : "Odaberite način", + "You do not have permissions to access this conversation." : "Nemate dopuštenja za pristup ovom razgovoru.", + "Join a different conversation or start a new one." : "Pridružite se drugom razgovoru ili pokrenite novi.", + "The conversation does not exist" : "Razgovor ne postoji", + "Join a conversation or start a new one!" : "Pridružite se razgovoru ili započnite novi!", + "Duplicate session" : "Udvostruči sesiju", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ovaj razgovor je otvoren u drugoj kartici. Trenutna verzija poslužitelja ne podržava otvaranje razgovora u više kartica.", + "Creating and joining a conversation with \"{userid}\"" : "Stvaranje i pridruživanje razgovoru s \"{userid}\"", + "Join a conversation or start a new one" : "Pridružite se razgovoru ili započnite novi", + "Error while joining the conversation" : "Pogreška pri pridruživanju razgovoru", + "Another user" : "Drugi korisnik", + "Hey! Are you using the list style or message bubbles?" : "Hej! Koristite li prikaz u obliku popisa ili oblačiće poruka?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud korisnik", + "User password" : "Korisnička lozinka", + "Talk conversation" : "Razgovori u alatu Talk", + "Skip TLS verification" : "Preskoči TLS provjeru", + "Matrix server URL" : "URL poslužitelja Matrix", + "User" : "Korisnik", + "Matrix channel" : "Matrix kanal", + "Mattermost server URL" : "URL poslužitelja Mattermost", + "Mattermost user" : "Mattermost korisnik", + "Team name" : "Naziv tima", + "Channel name" : "Naziv kanala", + "Rocket.Chat server URL" : "URL poslužitelja Rocket.Chat", + "User name or email address" : "Korisničko ime ili adresa e-pošte", + "Rocket.Chat channel" : "Rocket.Chat kanal", + "Zulip server URL" : "URL poslužitelja Zulip", + "Bot user name" : "Korisničko ime Bota", + "Bot API key" : "Ključ API-ja Bot", + "Zulip channel" : "Zulip kanal", + "API token" : "API token", + "Slack channel" : "Slack kanal", + "Server ID or name" : "ID ili naziv poslužitelja", + "Channel ID (prefixed with \"ID:\") or name" : "ID kanala (s prefiksom \"ID:\") ili naziv", + "Channel" : "Kanal", + "Login" : "Prijava", + "Chat ID" : "ID alata za razmjenu poruka", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC poslužitelja (npr. chat.freenode.net:6667)", + "Nickname" : "Nadimak", + "Connection password" : "Lozinka veze", + "IRC channel" : "IRC kanal", + "Channel password" : "Lozinka za kanal", + "NickServ nickname" : "NickServ nadimak", + "NickServ password" : "NickServ lozinka", + "Use TLS" : "Koristi TLS", + "Use SASL" : "Koristi SASL", + "Tenant ID" : "ID stanara", + "Client ID" : "ID klijenta", + "Team ID" : "ID tima", + "Thread ID" : "ID dretve", + "XMPP/Jabber server URL" : "URL poslužitelja XMPP/Jabber", + "MUC server URL" : "URL poslužitelja MUC", + "Jabber ID" : "ID Jabbera", + "Pinned messages" : "Prikvačene poruke", + "Media" : "Medij", + "Polls" : "Ankete", + "Deck cards" : "Deck kartice", + "Voice messages" : "Glasovne poruke", + "Locations" : "Lokacije", + "Call recordings" : "Snimke poziva", + "Audio" : "Audio", + "Show all pinned messages" : "Prikaži sve prikvačene poruke", + "Show all media" : "Prikaži sve medijske datoteke", + "Show all files" : "Prikaži sve datoteke", + "Show all polls" : "Prikaži sve ankete", + "Show all deck cards" : "Prikaži sve Deck kartice", + "Show all voice messages" : "Prikaži sve glasovne poruke", + "Show all locations" : "Prikaži sve lokacije", + "Show all call recordings" : "Prikaži sve snimke poziva", + "Show all audio" : "Prikaži sve zvukove", + "Show all other" : "Prikaži sve ostalo", + "Follow conversation settings" : "Slijedi postavke razgovora", + "Group" : "Grupa", + "Team" : "Tim", + "You reconnected to the call" : "Ponovno ste se povezali na poziv", + "{actor} reconnected to the call" : "{actor} se ponovno povezao na poziv", + "You added {user0} and {user1}" : "Dodali ste {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Dodali ste {user0}, {user1} i još %n sudionika","Dodali ste {user0}, {user1} i još %n sudionika","Dodali ste {user0}, {user1} i još %n sudionika"], + "An administrator added you and {user0}" : "Administrator je dodao vas i {user0}", + "{actor} added you and {user0}" : "{actor} je dodao vas i {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrator je dodao vas, {user0} i još %n sudionika","Administrator je dodao vas, {user0} i još %n sudionika","Administrator je dodao vas, {user0} i još %n sudionika"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} je dodao vas, {user0} i još %n sudionika","{actor} je dodao vas, {user0} i još %n sudionika","{actor} je dodao vas, {user0} i još %n sudionika"], + "An administrator added {user0} and {user1}" : "Administrator je dodao {user0} i {user1}", + "{actor} added {user0} and {user1}" : "{actor} je dodao {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrator je dodao {user0}, {user1} i još %n sudionika","Administrator je dodao {user0}, {user1} i još %n sudionika","Administrator je dodao {user0}, {user1} i još %n sudionika"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} je dodao {user0}, {user1} i još %n sudionika","{actor} je dodao {user0}, {user1} i još %n sudionika","{actor} je dodao {user0}, {user1} i još %n sudionika"], + "You removed {user0} and {user1}" : "Uklonili ste {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Uklonili ste {user0}, {user1} i još %n sudionika","Uklonili ste {user0}, {user1} i još %n sudionika","Uklonili ste {user0}, {user1} i još %n sudionika"], + "An administrator removed you and {user0}" : "Administrator je uklonio vas i {user0}", + "{actor} removed you and {user0}" : "{actor} je uklonio vas i {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrator je uklonio vas, {user0} i još %n sudionika","Administrator je uklonio vas, {user0} i još %n sudionika","Administrator je uklonio vas, {user0} i još %n sudionika"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} je uklonio vas, {user0} i još %n sudionika","{actor} je uklonio vas, {user0} i još %n sudionika","{actor} je uklonio vas, {user0} i još %n sudionika"], + "An administrator removed {user0} and {user1}" : "Administrator je uklonio {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} je uklonio {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrator je uklonio {user0}, {user1} i još %n sudionika","Administrator je uklonio {user0}, {user1} i još %n sudionika","Administrator je uklonio {user0}, {user1} i još %n sudionika"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} je uklonio {user0}, {user1} i još %n sudionika","{actor} je uklonio {user0}, {user1} i još %n sudionika","{actor} je uklonio {user0}, {user1} i još %n sudionika"], + "You and {user0} joined the call" : "Vi i {user0} pridružili ste se pozivu", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vi, {user0} i još %n sudionik pridružili ste se pozivu","Vi, {user0} i još %n sudionika pridružili ste se pozivu","Vi, {user0} i još %n sudionika pridružili ste se pozivu"], + "{user0} and {user1} joined the call" : "{user0} i {user1} pridružili su se pozivu", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i još %n sudionik pridružili su se pozivu","{user0}, {user1} i još %n sudionika pridružili su se pozivu","{user0}, {user1} i još %n sudionika pridružili su se pozivu"], + "You and {user0} left the call" : "Vi i {user0} napustili ste poziv", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vi, {user0} i još %n sudionik napustili ste poziv","Vi, {user0} i još %n sudionika napustili ste poziv","Vi, {user0} i još %n sudionika napustili ste poziv"], + "{user0} and {user1} left the call" : "{user0} i {user1} napustili su poziv", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i još %n sudionik napustili su poziv","{user0}, {user1} i još %n sudionika napustili su poziv","{user0}, {user1} i još %n sudionika napustili su poziv"], + "You promoted {user0} and {user1} to moderators" : "Postavili ste {user0} i {user1} za moderatore", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Postavili ste {user0}, {user1} i još %n sudionika za moderatore","Postavili ste {user0}, {user1} i još %n sudionika za moderatore","Postavili ste {user0}, {user1} i još %n sudionika za moderatore"], + "An administrator promoted you and {user0} to moderators" : "Administrator je postavio vas i {user0} za moderatore", + "{actor} promoted you and {user0} to moderators" : "{actor} je postavio vas i {user0} za moderatore", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrator je postavio vas, {user0} i još %n sudionika za moderatore","Administrator je postavio vas, {user0} i još %n sudionika za moderatore","Administrator je postavio vas, {user0} i još %n sudionika za moderatore"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} je postavio vas, {user0} i još %n sudionika za moderatore","{actor} je postavio vas, {user0} i još %n sudionika za moderatore","{actor} je postavio vas, {user0} i još %n sudionika za moderatore"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrator je postavio {user0} i {user1} za moderatore", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} je postavio {user0} i {user1} za moderatore", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore","Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore","Administrator je postavio {user0}, {user1} i još %n sudionika za moderatore"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore","{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore","{actor} je postavio {user0}, {user1} i još %n sudionika za moderatore"], + "You demoted {user0} and {user1} from moderators" : "Uklonili ste {user0} i {user1} s uloge moderatora", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora","Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora","Uklonili ste {user0}, {user1} i još %n sudionika s uloge moderatora"], + "An administrator demoted you and {user0} from moderators" : "Administrator je uklonio vas i {user0} s uloge moderatora", + "{actor} demoted you and {user0} from moderators" : "{actor} je uklonio vas i {user0} s uloge moderatora", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora","Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora","Administrator je uklonio vas, {user0} i još %n sudionika s uloge moderatora"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora","{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora","{actor} je uklonio vas, {user0} i još %n sudionika s uloge moderatora"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrator je uklonio {user0} i {user1} s uloge moderatora", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} je uklonio {user0} i {user1} s uloge moderatora", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","Administrator je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora","{actor} je uklonio {user0}, {user1} i još %n sudionika s uloge moderatora"], + "You:" : "Vi:", + "You: {lastMessage}" : "Vi: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Poslužitelj je ažuriran.", + "(edited by you)" : "(uredili ste vi)", + "(edited by a deleted user)" : "(uredio obrisani korisnik)", + "(edited by {moderator})" : "(uredio {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pokušavate se pridružiti razgovoru dok imate otvorenu sesiju u drugom prozoru ili na drugom uređaju. Nextcloud Talk trenutačno ne podržava tu radnju. Što želite učiniti?", + "Leave this page" : "Napusti ovu stranicu", + "Join here" : "Pridruži se ovdje", + "Deck card has been posted to {conversation}" : "Deck kartica je objavljena u {conversation}", + "An error occurred while posting deck card to conversation" : "Došlo je do pogreške pri objavi Deck kartice u razgovor", + "Post to a conversation" : "Objavite u razgovoru", + "Post to conversation" : "Objavi u razgovoru", + "The recording failed. Please contact your administrator." : "Snimanje nije uspjelo. Obratite se administratoru.", + "Location has been posted to {conversation}" : "Lokacija je objavljena u {conversation}", + "An error occurred while posting location to conversation" : "Došlo je do pogreške pri objavi lokacije u razgovor", + "Share to a conversation" : "Podijeli u razgovor", + "Share to conversation" : "Podijeli u razgovor", + "In conversation" : "U razgovoru", + "Search in conversation: {conversation}" : "Pretraži u razgovoru: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vaši su zahtjevi trenutačno ograničeni zbog zaštite od brute force napada", + "Error while clearing conversation history" : "Pogreška pri brisanju povijesti razgovora", + "Error occurred while allowing guests" : "Došlo je do pogreške pri omogućavanju pristupa gostima", + "Error occurred while disallowing guests" : "Došlo je do pogreške pri onemogućavanju pristupa gostima", + "Error occurred when restricting the conversation to moderator" : "Došlo je do pogreške pri ograničavanju razgovora samo na moderatore", + "Error occurred when opening the conversation to everyone" : "Došlo je do pogreške pri otvaranju razgovora svima", + "Conversation password has been saved" : "Zaporka razgovora je spremljena", + "Conversation password has been removed" : "Zaporka razgovora je uklonjena", + "Error occurred while saving conversation password" : "Došlo je do pogreške pri spremanju zaporke razgovora", + "Call recording is starting." : "Snimanje poziva započinje.", + "Call recording stopped while starting." : "Snimanje poziva je zaustavljeno tijekom pokretanja.", + "Call recording stopped. You will be notified once the recording is available." : "Snimanje poziva je zaustavljeno. Bit ćete obaviješteni kada snimka bude dostupna.", + "Conversation picture set" : "Slika razgovora je postavljena", + "Conversation picture deleted" : "Slika razgovora je obrisana", + "Could not delete the conversation picture" : "Nije moguće obrisati sliku razgovora", + "Could not remove the automatic expiration" : "Nije moguće ukloniti automatsko istjecanje", + "Could not post message: {errorMessage}" : "Nije moguće objaviti poruku: {errorMessage}", + "Participant is banned successfully" : "Sudionik je uspješno zabranjen", + "Error while banning the participant" : "Pogreška pri zabrani sudionika", + "An error occurred while fetching the participants" : "Došlo je do pogreške pri dohvaćanju sudionika", + "Could not send invitation to {actorId}" : "Nije moguće poslati pozivnicu za {actorId}", + "Invitations sent" : "Pozivnice su poslane", + "Error occurred when sending invitations" : "Došlo je do pogreške pri slanju pozivnica", + "Failed to join the conversation." : "Nije se uspjelo pridružiti razgovoru.", + "An error occurred while creating breakout rooms" : "Došlo je do pogreške pri stvaranju soba za odvajanje", + "An error occurred while re-ordering the attendees" : "Došlo je do pogreške pri promjeni redoslijeda sudionika", + "An error occurred while deleting breakout rooms" : "Došlo je do pogreške pri brisanju soba za odvajanje", + "An error occurred while starting breakout rooms" : "Došlo je do pogreške pri pokretanju soba za odvajanje", + "An error occurred while stopping breakout rooms" : "Došlo je do pogreške pri zaustavljanju soba za odvajanje", + "An error occurred while sending a message to the breakout rooms" : "Došlo je do pogreške pri slanju poruke u sobe za odvajanje", + "An error occurred while requesting assistance" : "Došlo je do pogreške pri traženju pomoći", + "An error occurred while resetting the request for assistance" : "Došlo je do pogreške pri poništavanju zahtjeva za pomoć", + "An error occurred while joining breakout room" : "Došlo je do pogreške pri pridruživanju sobi za odvajanje", + "Failed to rename the thread" : "Nije uspjelo preimenovati nit", + "Error fetching upcoming events" : "Pogreška pri dohvaćanju nadolazećih događaja", + "Error fetching upcoming reminders" : "Pogreška pri dohvaćanju nadolazećih podsjetnika", + "An error occurred while accepting an invitation" : "Došlo je do pogreške pri prihvaćanju pozivnice", + "An error occurred while rejecting an invitation" : "Došlo je do pogreške pri odbijanju pozivnice", + "{guest} (guest)" : "{guest} (gost)", + "Poll draft has been saved" : "Skica ankete je spremljena", + "An error occurred while saving the draft" : "Došlo je do pogreške pri spremanju skice", + "An error occurred while submitting your vote" : "Došlo je do pogreške pri slanju vašeg glasa", + "An error occurred while ending the poll" : "Došlo je do pogreške pri završavanju ankete", + "An error occurred while deleting the poll draft" : "Došlo je do pogreške pri brisanju skice ankete", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketu \"{name}\" stvorio je {user}. Kliknite za glasanje", + "Failed to add reaction" : "Nije uspjelo dodati reakciju", + "Failed to remove reaction" : "Nije uspjelo ukloniti reakciju", + "The server is in maintenance mode." : "Poslužitelj je u načinu održavanja.", + "Federated server was updated." : "Udruženi poslužitelj je ažuriran.", + "Error while uploading file \"{fileName}\"" : "Pogreška pri otpremanju datoteke „{fileName}”", + "Not enough free space to upload file \"{fileName}\"" : "Nema dovoljno slobodnog prostora za otpremanje datoteke „{fileName}”", + "You are not allowed to share files" : "Nije vam dopušteno dijeliti datoteke", + "Error while sharing file" : "Pogreška pri dijeljenju datoteke", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk ne podržava trenutni preglednik. Preuzmite najnoviju inačicu preglednika Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ili Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Za %n sat","Za %n sata","Za %n sati"], + "_%n minute _::_%n minutes_" : ["%n minuta","%n minute","%n minuta"], + "In {hours} and {minutes}" : "Za {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["Za %n minutu","Za %n minute","Za %n minuta"], + "Later today – {timeLocale}" : "Kasnije danas – {timeLocale}", + "Set time for later today" : "Postavi vrijeme za kasnije danas", + "Tomorrow – {timeLocale}" : "Sutra – {timeLocale}", + "Set time for tomorrow" : "Postavi vrijeme za sutra", + "This weekend – {timeLocale}" : "Ovaj vikend – {timeLocale}", + "Set time for this weekend" : "Postavi vrijeme za ovaj vikend", + "Next week – {timeLocale}" : "Sljedeći tjedan – {timeLocale}", + "Set time for next week" : "Postavi vrijeme za sljedeći tjedan", + "Message link copied to clipboard" : "Poveznica iz poruke kopirana je u međuspremnik", + "Conversation link copied to clipboard" : "Poveznica razgovora kopirana je u međuspremnik", + "The link could not be copied" : "Poveznicu nije moguće kopirati", + "Error while parsing a PROPFIND error" : "Pogreška pri obradi PROPFIND pogreške", + "Sending signaling message has failed" : "Slanje signalne poruke nije uspjelo", + "Lost connection to signaling server. Trying to reconnect." : "Veza sa signalnim poslužiteljem je prekinuta. Pokušavam se ponovno povezati.", + "Lost connection to signaling server." : "Izgubljena je veza sa signalnim poslužiteljem.", + "Connecting is taking longer than expected …" : "Povezivanje traje dulje nego što se očekivalo …", + "Failed to connect. Retrying …" : "Povezivanje nije uspjelo. Pokušavam ponovno …", + "Failed to connect. The signaling server may be set up incorrectly" : "Povezivanje nije uspjelo. Signalni poslužitelj možda je pogrešno postavljen", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Konfigurirani signalni poslužitelj mora se ažurirati kako bi bio kompatibilan s ovom verzijom Talka. Obratite se administraciji.", + "Please restart the app." : "Ponovno pokrenite aplikaciju.", + "Please reload the page." : "Ponovno učitajte stranicu.", + "Please try to restart the app." : "Pokušajte ponovno pokrenuti aplikaciju.", + "Please try to reload the page." : "Pokušajte ponovno učitati stranicu.", + "Do not disturb" : "Ne ometaj", + "Away" : "Odsutan", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Zvučnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Pričate dok je utišan zvuk, isključite utišavanje zvuka kako bi vas čuli drugi sudionici razgovora", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nije uspostavljena veza s najmanje jednim sudionikom. Vjerojatno vam je potreban poslužitelj TURN. Obratite se svom administratoru i zatražite da omogući korištenje poslužitelja TURN u skladu s {linkstart}ovom dokumentacijom{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Radnja traje duže od očekivanog. Jesu li postavljena (ili odbijena) dopuštenja za pristupanje medijima? Ako jesu, ponovno pokrenite preglednik jer nema prijenosa zvuka i videosignala", + "Access to microphone & camera is only possible with HTTPS" : "Pristup mikrofonu i kameri moguć je samo putem HTTPS-a", + "Please move your setup to HTTPS" : "Prebacite postavku na HTTPS", + "Access to microphone & camera was denied" : "Pristup mikrofonu i kameri je odbijen", + "WebRTC is not supported in your browser" : "Vaš preglednik ne podržava WebRTC", + "Please use a different browser like Firefox or Chrome" : "Koristite se drugim preglednikom kao što je Firefox ili Chrome", + "Error while accessing microphone & camera" : "Došlo je do pogreške pri pristupanju mikrofonu i kameri", + "%s Talk on your mobile devices" : "%s aplikacija Talk na vašim mobilnim uređajima", + "Join conversations at any time, anywhere, on any device." : "Pridružite se razgovorima u bilo koje vrijeme, bilo gdje, na bilo kojem uređaju.", + "Android app" : "Aplikacija za Android", + "iOS app" : "Aplikacija za iOS", + "__language_name__" : "Hrvatski", + "Webhook Demo" : "Demo webhooka", + "Call summary (%s)" : "Sažetak poziva (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot za sažetak poziva objavljuje poruku s pregledom nakon poziva, navodi sve sudionike i ističe zadatke", + "Tasks" : "Zadaci", + "Notes" : "Bilješke", + "Reports" : "Izvješća", + "Decisions" : "Odluke", + "Agenda" : "Dnevni red", + "Call summary" : "Sažetak poziva", + "Call summary - {title}" : "Sažetak poziva – {title}", + "Talk conversation for event" : "Talk razgovor za događaj", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push je instaliran, što poboljšava performanse desktop klijenata.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nije instaliran, to može dovesti do problema s performansama pri korištenju desktop klijenata.", + "Next meeting" : "Sljedeći sastanak", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Zakažite sastanak iz svojeg kalendara. Talk razgovor mora biti postavljen kao lokacija da bi se ovdje prikazao", + "Join conversations from remote Nextcloud servers" : "Pridruži se razgovorima s udaljenih Nextcloud poslužitelja", + "Your default media state has been saved" : "Vaše zadano stanje medija je spremljeno", + "Set reminder for later today" : "Postavi podsjetnik za kasnije danas", + "Set reminder for tomorrow" : "Postavi podsjetnik za sutra", + "Set reminder for this weekend" : "Postavi podsjetnik za ovaj vikend", + "Set reminder for next week" : "Postavi podsjetnik na sljedeći tjedan", + "Generate summary" : "Generiraj sažetak", + "Open poll • You voted already" : "Otvorena anketa • Već ste glasali", + "Open poll • Click to vote" : "Otvorena anketa • Kliknite za glasanje", + "Poll • Ended" : "Anketa • Završena", + "Talk recording from {time} ({conversation})" : "Snimak iz aplikacije Talk od {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Rezultati ankete • %n glas","Rezultati ankete • %n glasa","Rezultati ankete • %n glasova"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otvorena anketa • %n glas","Otvorena anketa • %n glasa","Otvorena anketa • %n glasova"], + "Submit vote" : "Pošalji glas", + "Your privacy setting has been saved" : "Postavka privatnosti je spremljena", + "Your personal setting has been saved" : "Vaša osobna postavka je spremljena", + "Failed to save sounds setting" : "Spremanje postavki zvukova nije uspjelo", + "Sounds setting saved" : "Postavka zvukova je spremljena", + "Always shown if recording consent is required" : "Uvijek se prikazuje ako je potrebna privola za snimanje", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk je ažuriran; ne možete pokrenuti ni pridružiti se pozivu.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pridružili ste se razgovoru u drugom prozoru ili na drugom uređaju. Nextcloud Talk trenutačno ne podržava tu radnju pa je ova sesija zatvorena.", + "Nextcloud Talk was updated." : "Nextcloud Talk je ažuriran.", + "Nextcloud is in maintenance mode." : "Nextcloud je u načinu održavanja.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk udruženje je ažurirano.", + "Enable live translation" : "Omogući prijevod uživo", + "I picked list style" : "Odabrao sam stil popisa", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Koristite li Talk u prikazu popisa ili s oblačićima poruka?" +},"pluralForm" :"nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/hu.js b/l10n/hu.js new file mode 100644 index 0000000..d24a4f1 --- /dev/null +++ b/l10n/hu.js @@ -0,0 +1,2246 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "egy beszélgetés", + "(Duration %s)" : "(Időtartam: %s)", + "You attended a call with {user1}" : "Részt vett egy hívásban vele: {user1}", + "_%n guest_::_%n guests_" : ["%n vendég","%n vendég"], + "You attended a call with {user1} and {user2}" : "Részt vett egy hívásban velük: {user1} és {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Részt vett egy hívásban velük: {user1}, {user2} és {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Részt vett egy hívásban velük: {user1}, {user2}, {user3} és {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Részt vett egy hívásban velük: {user1}, {user2}, {user3}, {user4} és {user5}", + "_%n other_::_%n others_" : ["még %n emberrel","még %n emberrel"], + "{actor} invited you to {call}" : "{actor} meghívta ide: {call}", + "You were invited to a conversation or had a call" : "Meghívták egy beszélgetésbe, vagy hívása volt", + "Other activities" : "Egyéb tevékenységek", + "Talk" : "Beszélgetés", + "Guest" : "Vendég", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Üdvözöljük a Nextcloud Beszélgetésben!\nEbben a beszélgetésben tájékoztatást kap a Nextcloud Beszélgetés új funkcióiról.", + "## New in Talk %s" : "## A Beszélgetés %s újdonságai", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- A Microsoft Edge és a Safari mostantól használható hang- és videohívásokhoz", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- A négyszemközti beszélgetések most már tartósak, és nem lehet véletlenül csoportos beszélgetéssé alakítani őket. Emellett ha egy résztvevő elhagyja a beszélgetést, akkor most már nem kerül automatikusan törlésre. Csak ha mindkét fél elhagyja a beszélgetést, akkor kerül törlésre a kiszolgálóról", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Most már értesítheti az összes résztvevőt az *@all* beírásával a csevegésbe", + "- With the \"arrow-up\" key you can repost your last message" : "- A „felfele nyíl” billentyűvel újraküldheti az előző üzenetét", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- A Beszélgetés most már kezel parancsokat, küldje el a „/help” üzenetet a csevegésbe, és nézze meg, hogy a rendszergazda állított-e be", + "- With projects you can create quick links between conversations, files and other items" : "- A projektekkel gyors hivatkozásokat hozhat létre beszélgetések, fájlok és egyéb elemek között", + "- You can now mention guests in the chat" : "- Most már megemlíthet vendégeket a csevegésben", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- A beszélgetéseknek most már lehet várójuk. Ez lehetővé teszi a moderátoroknak, hogy csatlakozzanak a csevegéshez, és már hívják egymást a találkozó előkészítéséhez, míg a felhasználóknak és a vendégeknek várniuk kell", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Most már közvetlenül válaszolhat az üzenetekre, így a többi felhasználónak kontextusba helyezheti, miről szól az üzenete", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A beszélgetések és a résztvevők keresése mostantól a meglévő beszélgetéseket is kiszűri, így sokkal könnyebb megtalálni a korábbi beszélgetéseket", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Mostantól, hozzáadhat egyéni felhasználói csoportokat a beszélgetésekhez, amennyiben a CIrcles alkalmazás telepítve van", + "- Check out the new grid and call view" : "- Nézze meg az új rács és hívás nézeteket", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Mostantól közvetlenül feltöltheti az eszközéről a fájlokat, és áthúzhatja őket a csevegésbe", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- A megosztott fájlok most a megtekintő alkalmazásokkal közvetlenül a chat nézetben nyílnak meg", + "- You can now search for chats and messages in the unified search in the top bar" : "- Mostantól a felső sáv egységes keresőben kereshet csevegéseket és üzeneteket", + "- Spice up your messages with emojis from the emoji picker" : "- Fűszerezze üzeneteit hangulatjelekkel az emoji kiválasztóból", + "- You can now change your camera and microphone while being in a call" : "- Most már megváltoztathatja a fényképezőgépet és a mikrofont hívás közben", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Adjon néhány beszélgetést a leírásához, és nyissa meg, hogy a bejelentkezett felhasználók megtalálhassák és csatlakozhassanak", + "- See a read status and send failed messages again" : "- Lásd az olvasási állapotot és küldje el ismét a sikertelen üzeneteket", + "- Raise your hand in a call with the R key" : "- Emelje fel a kezét hívás közben az R gombbal", + "- Join the same conversation and call from multiple devices" : "- Csatlakozzon ugyanazon beszélgetéshez és híváshoz több eszközzel", + "- Send voice messages, share your location or contact details" : "- Küldjön hangüzeneteket, ossza meg a helyét vagy névjegyadatait", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Adjon csoportokat egy beszélgetéshez, és az új csoporttagok automatikusan hozzáadásra kerülnek résztvevőként", + "- A preview of your audio and video is shown before joining a call" : "- Megjelenik a hang és a videó előnézete, mielőtt csatlakozik a híváshoz", + "- You can now blur your background in the newly designed call view" : "- Már elhomályosíthatja a hátteret az újratervezett hívásnézetben", + "- Moderators can now assign general and individual permissions to participants" : "- A moderátorok most már általános és egyéni jogosultságokat is hozzárendelhetnek a résztvevőkhöz", + "- You can now react to chat messages" : "- Most már reagálhat a csevegőüzenetekre", + "- In the sidebar you can now find an overview of the latest shared items" : "- Az oldalsávban megtalálhatja a legutóbb megosztott elemeket", + "- Use a poll to collect the opinions of others or settle on a date" : "- Használjon egy szavazást, hogy összegyűjtse a többiek véleményét, vagy hogy megegyezzenek egy dátumban", + "- Configure an expiration time for chat messages" : "- Állítson be elévülési időt a csevegőüzenetekhez", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Indítson hívásokat anélkül, hogy értesítené a nagy beszélgetésekben lévőket. A hívás elindítása után külön hívásértesítéseket küldhet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Küldjön csevegőüzenetet a címzettek értesítése nélkül, ha nem sürgős", + "- Emojis can now be autocompleted by typing a \":\"" : "- Az emodzsik mostantól automatikusan kiegészíthetők egy „:” begépelésével", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Különböző elemek hivatkozása az új okos kiválasztóval, egy „/” begépelésével", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- A moderátorok mostantól szobabontást hozhatnak létre (a nagy teljesítményű háttérrendszert igényli)", + "- Calls can now be recorded (requires the High-performance backend)" : "- A hívások mostantól felvehetőek (a nagy teljesítményű háttérrendszert igényli)", + "- Conversations can now have an avatar or emoji as icon" : "- A beszélgetéseknek most már lehet profilképük vagy emodzsit használó ikonjuk", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- A videóhívásoknál a virtuális hátterek már elérhetők az elhomályosított háttér mellett", + "- Reactions are now available during calls" : "- A reakciók most már hívás közben is elérhetők", + "- Typing indicators show which users are currently typing a message" : "- Gépelésjelzők mutatják, ha a felhasználók épp gépelnek", + "- Groups can now be mentioned in chats" : "- A csoportok most már megemlíthetők a csevegésekben", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- A hívásrögzítések automatikusan leiratozásra kerülnek, ha van leiratozási szolgáltató alkalmazás regisztrálva", + "- Chat messages can be translated if a translation provider app is registered" : "- A csevegőüzenet lefordíthatók, ha van fordítási szolgáltató alkalmazás regisztrálva", + "- **Markdown** can now be used in _chat_ messages" : "- A **Markdown** most már használható a _csevegőüzenetekben_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- A webhookok már elérhetőek a botok megvalósításához. További részletekért tekintse meg a dokumentációt: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Időzítő beállítsa egy csevegőüzenetnél, hogy később újra értesítést kapjon róla", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Saját jegyzet** a beszélgetésekben, hogy jegyzeteljen és információt osszon meg az eszközei közt", + "- Captions allow to send a message with a file at the same time" : "- Feliratok, hogy egyszerre fájlt és üzenetet is lehessen küldeni", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- A beszélő videója most már látható képernyőmegosztás közben is, és a hívásreakciók animálva vannak", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Az üzeneteket 6 óráig szerkeszthetik a bejelentkezett szerzők és moderátorok", + "- Unsent message drafts are now saved in your browser" : "- A mentetlen vázlatok most már mentésre kerülnek a böngészőben", + "- Text chatting can now be done in a federated way with other Talk servers" : "- A szöveges csevegés most már más Beszélgetés kiszolgálókkal föderálva is elérhető", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- A moderátorok most már úgy is kitilthatnak fiókokat és vendégeket, hogy nem tudnak újból csatlakozni", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Most már látszódnak a következő hívások az összekapcsolt naptáreseményekből, és a helyettesítések is megjelennek a beszélgetésekben", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- A hívások most már föderálhatóak más Beszélgetés-kiszolgálókkal (Nagy teljesítményű háttérrendszert igényel)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Bemutatkozik az asztali Nextcloud Beszélgetés alkalmazás Windowsra, macOS-re és Linuxra: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- A hívásfelvételek és a csevegések olvasatlan üzeneteinek összefoglalása a Nextcloud Asszisztens használatával", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Továbbfejlesztett találkozók az e-mail-címmel meghívott vendégek felismerésével, résztvevőlisták importálásával, szavazásvázlatokkal és a hívások résztvevői listájának letöltésével", + "- Archive conversations to stay focused" : "- Beszélgetések archiválása, hogy fókuszált maradjon", + "- Schedule a meeting into your calendar from within a conversation" : "- Találkozó ütemezése a naptárába közvetlenül egy beszélgetésből", + "- Search for messages of the current conversation directly in the right sidebar" : "- Üzenetek keresése a jelenlegi beszélgetésben közvetlenül a jobb oldali oldalsávból", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- További beszélgetések áttekintése az első pillantáskor, az új kompakt listának köszönhetően (a Beszélgetés beállításaiban engedélyezhető)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- A találkozók beszélgetései most már szinkronizálják a címet és a leírást a naptárból, és szűrő rejti őket addig, amíg nem közeledik a kezdetük", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Beszélgetések megjelelölése bizalmasként az értesítési beállításokban, hogy ne jelenjen meg üzenettartalom a beszélgetések és az értesítések közt", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Hogy „Ne zavarjanak” állapotban is megkapja a leküldéses értesítéseket, jelölje fontosnak a beszélgetéseket", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Egyéb résztvevők hozzáadása a négyszemközti beszélgetésekhez, amely röptében új csoportos hívást hoz létre", + "- Use threads to keep your chat and discussions organized" : "- Szálak használata a beszélgetések és témák szervezetten tartásához", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Elérhető az élő leiratozás a hívások során (az élő leiratozási ExApp, és a Nagy teljesítményű háttérrendszer szükséges hozzá)", + "- Moderators can now pin messages so they are kept at the top" : "- A moderátorok most már kitűzhetnek bejegyzéseket, így felül maradnak", + "- Schedule a message to send it at a later time" : "- Üzenet ütemezése későbbi elküldésre", + "_All %n participant_::_All %n participants_" : ["Mind a(z) %n résztvevő","Mind a(z) %n résztvevő"], + "Talk updates ✅" : "Beszélgetés frissítések ✅", + "Reaction deleted by author" : "A reakciót törölte a szerző", + "{actor} created the conversation" : "{actor} létrehozta a beszélgetést", + "You created the conversation" : "Beszélgetést hozott létre", + "System created the conversation" : "A rendszer hozta létre a beszélgetést", + "An administrator created the conversation" : "Egy rendszergazda létrehozta a beszélgetést", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Egy rendszergazda átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "{actor} set the description" : "{actor} beállította a leírást", + "You set the description" : "Beállította a leírást", + "An administrator set the description" : "Egy rendszergazda beállította a leírást", + "{actor} removed the description" : "{actor} eltávolította a leírást", + "You removed the description" : "Eltávolította a leírást", + "An administrator removed the description" : "Egy rendszergazda eltávolította a leírást", + "You started a silent call" : "Néma hívást indított", + "Outgoing silent call" : "Folyamatban lévő néma hívás", + "{actor} started a silent call" : "{actor} néma hívást indított", + "Incoming silent call" : "Bejövő néma hívás", + "You started a call" : "Hívást indított", + "Outgoing call" : "Kimenő hívás", + "{actor} started a call" : "{actor} hívást indított", + "Incoming call" : "Bejövő hívás", + "{actor} joined the call" : "{actor} bekapcsolódott a hívásba", + "You joined the call" : "Csatlakozott a híváshoz", + "{actor} left the call" : "{actor} elhagyta a hívást", + "You left the call" : "Kilépett a hívásból", + "{actor} unlocked the conversation" : "{actor} feloldotta a beszélgetést", + "You unlocked the conversation" : "Feloldotta a beszélgetést", + "An administrator unlocked the conversation" : "Egy rendszergazda feloldotta a beszélgetést", + "{actor} locked the conversation" : "{actor} zárolta a beszélgetést", + "You locked the conversation" : "Zárolta a beszélgetést", + "An administrator locked the conversation" : "A beszélgetést egy rendszergazda zárolta", + "{actor} limited the conversation to the current participants" : "{actor} a beszélgetést a jelenlegi résztvevőkre korlátozta", + "You limited the conversation to the current participants" : "A beszélgetést a jelenlegi résztvevőkre korlátozta", + "An administrator limited the conversation to the current participants" : "Egy rendszergazda a beszélgetést a jelenlegi résztvevőkre korlátozta", + "{actor} opened the conversation to registered users" : "{actor} megnyitotta beszélgetést a regisztrált felhasználók számára", + "You opened the conversation to registered users" : "Megnyitotta beszélgetést a regisztrált felhasználók számára", + "An administrator opened the conversation to registered users" : "Egy rendszergazda megnyitotta beszélgetést a regisztrált felhasználók számára", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "You opened the conversation to registered users and users created with the Guests app" : "Elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Egy rendszergazda elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "The conversation is now open to everyone" : "A beszélgetés most már mindenki számára nyitva áll", + "{actor} opened the conversation to everyone" : "{actor} megnyitotta beszélgetést mindenki számára", + "You opened the conversation to everyone" : "Megnyitotta beszélgetést mindenki számára", + "{actor} restricted the conversation to moderators" : "{actor} a moderátorokra korlátozta a beszélgetést", + "You restricted the conversation to moderators" : "A moderátorokra korlátozta a beszélgetést", + "{actor} started breakout rooms" : "{actor} elindította a szobabontást", + "You started breakout rooms" : "Elindította a szobabontást", + "{actor} stopped breakout rooms" : "{actor} leállította a szobabontást", + "You stopped breakout rooms" : "Leállította a szobabontást", + "{actor} allowed guests" : "{actor} engedélyezte a vendégeket", + "You allowed guests" : "Engedélyezte a vendégeket", + "An administrator allowed guests" : "Egy rendszergazda engedélyezte a vendégeket", + "{actor} disallowed guests" : "{actor} letiltotta a vendégeket", + "You disallowed guests" : "Letiltotta a vendégeket", + "An administrator disallowed guests" : "Egy rendszergazda letiltotta a vendégeket", + "{actor} set a password" : "{actor} jelszót állított be", + "You set a password" : "Jelszót állított be", + "An administrator set a password" : "Egy rendszergazda jelszót állított be", + "{actor} removed the password" : "{actor} eltávolította a jelszót", + "You removed the password" : "Eltávolította a jelszót", + "An administrator removed the password" : "Egy rendszergazda eltávolította a jelszót", + "{actor} added {user}" : "{actor} hozzáadta: {user}", + "You joined the conversation" : "Csatlakozott a beszélgetéshez", + "{actor} joined the conversation" : "{actor} csatlakozott a beszélgetéshez", + "You added {user}" : "Hozzáadta: {user}", + "{actor} added you" : "{actor} hozzáadta Önt", + "An administrator added you" : "A rendszergazda hozzáadta Önt", + "An administrator added {user}" : "A rendszergazda hozzáadta {user} felhasználót", + "You left the conversation" : "Elhagyta a beszélgetést", + "{actor} left the conversation" : "{actor} elhagyta a beszélgetést", + "{actor} removed {user}" : "{actor} eltávolította: {user}", + "You removed {user}" : "Eltávolította: {user}", + "{actor} removed you" : "{actor} eltávolította", + "An administrator removed you" : "Egy rendszergazda eltávolította Önt", + "An administrator removed {user}" : "Egy rendszergazda eltávolította {user} felhasználót", + "{actor} invited {federated_user}" : "{actor} meghívta: {federated_user}", + "You invited {federated_user}" : "Meghívta: {federated_user}", + "You accepted the invitation" : "Elfogadta a meghívást", + "{actor} invited you" : "{actor} meghívta", + "An administrator invited you" : "Egy rendszergazda meghívta", + "An administrator invited {federated_user}" : "Egy rendszergazda meghívta: {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} elfogadta a meghívást", + "{actor} removed {federated_user}" : "{actor} eltávolította: {federated_user}", + "You removed {federated_user}" : "Eltávolította: {federated_user}", + "You declined the invitation" : "Elutasította a meghívást", + "An administrator removed {federated_user}" : "Egy rendszergazda eltávolította {federated_user} felhasználót", + "{federated_user} declined the invitation" : "{federated_user} elfogadta a meghívást", + "{actor} added group {group}" : "{actor} hozzáadta a(z) {group} csoportot", + "You added group {group}" : "Hozzáadta a(z) {group} csoportot", + "An administrator added group {group}" : "Egy rendszergazda hozzáadta a(z) {group} csoportot", + "{actor} removed group {group}" : "{actor} eltávolította a(z) {group} csoportot", + "You removed group {group}" : "Eltávolította a(z) {group} csoportot", + "An administrator removed group {group}" : "Egy rendszergazda eltávolította a(z) {group} csoportot", + "{actor} added team {circle}" : "{actor} hozzáadta a(z) {circle} csapatot", + "You added team {circle}" : "Hozzáadta a(z) {circle} csapatot", + "An administrator added team {circle}" : "Egy rendszergazda hozzáadta a(z) {circle} csapatot", + "{actor} removed team {circle}" : "{actor} eltávolította a(z) {circle} csapatot", + "You removed team {circle}" : "Eltávolította a(z) {circle} csapatot", + "An administrator removed team {circle}" : "Egy rendszergazda eltávolította a(z) {circle} csapatot", + "{actor} added {phone}" : "{actor} hozzáadta: {phone}", + "You added {phone}" : "Hozzáadta: {phone}", + "An administrator added {phone}" : "Egy rendszergazda hozzáadta: {phone}", + "{actor} removed {phone}" : "{actor} eltávolította: {phone}", + "You removed {phone}" : "Eltálvolította: {phone}", + "An administrator removed {phone}" : "Egy rendszergazda eltávolította: {phone}", + "{actor} promoted {user} to moderator" : "{actor} moderátorrá léptette elő: {user}", + "You promoted {user} to moderator" : "Moderátorrá léptette elő: {user}", + "{actor} promoted you to moderator" : "{actor} moderátorrá léptette elő", + "An administrator promoted you to moderator" : "Egy rendszergazda moderátorrá léptette elő", + "An administrator promoted {user} to moderator" : "Egy rendszergazda moderátorrá léptette elő {user} felhasználót", + "{actor} demoted {user} from moderator" : "{actor} visszavonta {user} moderátori előléptetését", + "You demoted {user} from moderator" : "Visszavonta {user} moderátori kinevezését", + "{actor} demoted you from moderator" : "{actor} visszavonta a moderátori kinevezését", + "An administrator demoted you from moderator" : "Egy rendszergazda visszavonta a moderátori kinevezését", + "An administrator demoted {user} from moderator" : "Egy rendszergazda visszavonta {user} moderátori előléptetését", + "{actor} shared a file which is no longer available" : "{actor} megosztott egy fájlt, ami már nem érhető el", + "You shared a file which is no longer available" : "Megosztott egy fájlt, ami már nem érhető el", + "File shares are currently not supported in federated conversations" : "A fájlmegosztások jelenleg nem támogatottak a föderált beszélgetésekben", + "The shared location is malformed" : "A megosztott hely hibásan formázott", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} beállította a Matterbridge-dzset, hogy szinkronizálja ezt a beszélgetést más beszélgetésekkel", + "You set up Matterbridge to synchronize this conversation with other chats" : "Beállította a Matterbridge-dzset, hogy szinkronizálja ezt a beszélgetést más beszélgetésekkel", + "{actor} created thread {title}" : "{actor} létrehozta a(z) {title} szálat", + "You created thread {title}" : "Létrehozta a(z) {title} szálat", + "{actor} renamed thread {title}" : "{actor} átnevezte a(z) {title} szálat", + "You renamed thread {title}" : "Átnevezte a(z) {title} szálat", + "{actor} updated the Matterbridge configuration" : "{actor} frissítette a Matterbridge beállításokat", + "You updated the Matterbridge configuration" : "Frissítette a Matterbridge beállításokat", + "{actor} removed the Matterbridge configuration" : "{actor} eltávolította a Matterbridge beállításokat", + "You removed the Matterbridge configuration" : "Eltávolította a Matterbridge beállításokat", + "{actor} started Matterbridge" : "{actor} elindította a Matterbridge-dzset", + "You started Matterbridge" : "Elindította a Matterbridge-et", + "{actor} stopped Matterbridge" : "{actor} leállította a Matterbridge-et", + "You stopped Matterbridge" : "Leállította Matterbridge-et", + "{actor} deleted a message" : "{actor} törölt egy üzenetet", + "You deleted a message" : "Törölt egy üzenetet", + "{actor} edited a message" : "{actor} szerkesztett egy üzenetet", + "You edited a message" : "Szerkesztett egy üzenetet", + "{actor} pinned a message" : "{actor} kitűzött egy üzenetet", + "You pinned a message" : "Kitűzött egy üzenetet", + "{actor} unpinned a message" : "{actor} megszüntette egy üzenet kitűzését", + "Message was automatically unpinned" : "Az üzenet kitűzése automatikusan megszűnt", + "You unpinned a message" : "Megszüntette egy üzenet kitűzését", + "{actor} deleted a reaction" : "{actor} törölt egy reakciót", + "You deleted a reaction" : "Törölt egy reakciót", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["%n hetesre állította az üzenetek elévülését","%n hetesre állította az üzenetek elévülését"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["%n naposra állította az üzenetek elévülését","%n naposra állította az üzenetek elévülését"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["%n órásra állította az üzenetek elévülését","%n órásra állította az üzenetek elévülését"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["%n percesre állította az üzenetek elévülését","%n percesre állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} %n hetesre állította az üzenetek elévülését","{actor} %n hetesre állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} %n naposra állította az üzenetek elévülését","{actor} %n naposra állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} %n órásra állította az üzenetek elévülését","{actor} %n órásra állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} %n percesre állította az üzenetek elévülését","{actor} %n percesre állította az üzenetek elévülését"], + "{actor} disabled message expiration" : "{actor} kikapcsolta az üzenetek elévülését", + "You disabled message expiration" : "Kikapcsolta az üzenetek elévülését", + "{actor} cleared the history of the conversation" : "{actor} törölte a beszélgetés előzményeit", + "You cleared the history of the conversation" : "Törölte a beszélgetés előzményeit", + "{actor} set the conversation picture" : "{actor} beállította a beszélgetés képét", + "You set the conversation picture" : "Beállította a beszélgetés képét", + "{actor} removed the conversation picture" : "{actor} eltávolította a beszélgetés képét", + "You removed the conversation picture" : "Eltávolította a beszélgetés képét", + "{actor} ended the poll {poll}" : "{actor} befejezte a(z) {poll} szavazást", + "You ended the poll {poll}" : "Befejezte a(z) {poll} szavazást", + "{actor} started the video recording" : "{actor} elindította a videófelvételt", + "You started the video recording" : "Elindította a videófelvételt", + "{actor} stopped the video recording" : "{actor} leállította a videófelvételt", + "You stopped the video recording" : "Leállította a videófelvételt", + "{actor} started the audio recording" : "{actor} elindította a videófelvételt", + "You started the audio recording" : "Elindította a videófelvételt", + "{actor} stopped the audio recording" : "{actor} leállította a hangfelvételt", + "You stopped the audio recording" : "Leállította a hangfelvételt", + "The recording failed" : "A felvétel sikertelen", + "Someone voted on the poll {poll}" : "Valaki szavazott a(z) {poll} szavazásban", + "Message deleted by author" : "Az üzenetet a szerző törölte", + "Message deleted by {actor}" : "{actor} törölte az üzenetet", + "Message deleted by you" : "Törölte az üzenetet", + "Deleted user" : "Törölt felhasználó", + "Unknown number" : "Ismeretlen szám", + "Administration" : "Adminisztráció", + "System" : "Rendszer", + "%s (guest)" : "%s (vendég)", + "Missed call" : "Nem fogadott hívás", + "Unanswered call" : "Nem megválaszolt hívás", + "Call ended (Duration {duration})" : "A hívás véget ért (hossz: {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a maximális híváshossz elérése miatt véget ért (hossz: {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} befejezte a hívást (hossz: {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["A hívás %n vendéggel a maximális híváshossz elérése miatt befejeződött (hossz: {duration})","A hívás %n vendéggel a maximális híváshossz elérése miatt befejeződött (hossz: {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["A hívás %n vendéggel befejeződött (hossz: {duration})","A hívás %n vendéggel befejeződött (hossz: {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} befejezte a hívást %n vendéggel (hossz: {duration})","{actor} befejezte a hívást %n vendéggel (hossz: {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következővel a maximális híváshossz elérése miatt befejeződött: {user1} (hossz: {duration})", + "Call with {user1} ended (Duration {duration})" : "A hívás a következővel bejeződött: {user1} (hossz: {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} befejezte a hívást a következővel: {user1} (hossz: {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1} és {user2} (hossz: {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1} és {user2} (hossz: {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1} és {user2} (Időtartam: {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás {user1}, {user2} és {user3} felhasználóval a maximális híváshossz elérése miatt befejeződött (hossz: {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2} és {user3} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2} és {user3} (hossz: {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1}, {user2}, {user3} és {user4} (hossz: {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2}, {user3} és {user4} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2}, {user3} és {user4} (Időtartam: {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "Message of {user} in {conversation}" : "{user} üzenete a(z) {conversation} beszélgetésben", + "Message of {user}" : "{user} üzenete", + "Message of a deleted user in {conversation}" : "Egy törölt felhasználó üzenete a(z) {conversation} beszélgetésben", + "Talk conversations" : "Beszélgetések", + "Talk to %s" : "Beszélgetés vele: %s", + "An error occurred. Please contact your administrator." : "Hiba történt. Lépjen kapcsolatba a rendszergazdával.", + "Storage quota exceeded" : "Tárhelykvóta túllépve", + "File not found" : "A fájl nem található", + "File is not shared, or shared but not with the user" : "A fájl nincs megosztva, vagy meg van, de nem a felhasználóval", + "No account available to delete." : "Nincs törölhető fiók.", + "Poll" : "Szavazás", + "Password needs to be set" : "A jelszót meg kell adni", + "Uploading the file failed" : "Nem sikerült feltölteni a fájlt", + "No image file provided" : "Nincs képfájl megadva", + "File is too big" : "A fájl túl nagy", + "Invalid file provided" : "Érvénytelen fájl van megadva", + "Invalid image" : "Érvénytelen kép", + "Unknown filetype" : "Ismeretlen fájltípus", + "Talk mentions" : "Beszélgetés említések", + "More conversations" : "További beszélgetések", + "Say hi to your friends and colleagues!" : "Köszönjön a barátainak és munkatársainak!", + "No unread mentions" : "Nincsenek olvasatlan említések", + "Call in progress" : "Hívás folyamatban", + "You were mentioned" : "Megemlítették Önt", + "Write to conversation" : "Írjon a beszélgetésbe", + "Writes event information into a conversation of your choice" : "Beírja az esemény adatait egy választott beszélgetésbe", + "Missing email field in header line" : "Hiányzó e-mail-mező a fejlécsorban", + "Following lines are invalid: %s" : "A következő sorok érvénytelenek: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s meghívta a(z) „%2$s” beszélgetésbe.", + "You were invited to conversation \"%s\"." : "Meghívták a(z) „%s” beszélgetésbe.", + "Conversation invitation" : "Beszélgetés-meghívó", + "Scheduled time" : "Ütemezett időpont", + "Description" : "Leírás", + "You can also dial-in via phone with the following details" : "Telefonon keresztül is be tudja tárcsázni a következő részleteket", + "Dial-in information" : "Telefonos információk", + "Meeting ID" : "Értekezlet azonosítója", + "Your PIN" : "Az Ön PIN-kódja", + "Click the button below to join the lobby now." : "Kattintson a lenti gombra a váróhoz való csatlakozáshoz.", + "Click the link below to join the lobby now." : "Kattintson a lenti hivatkozásra a váróhoz való csatlakozáshoz.", + "Join lobby for \"%s\"" : "Csatlakozás a(z) „%s” várójához", + "Click the button below to join the conversation now." : "Kattintson a lenti gombra a beszélgetéshez való csatlakozáshoz.", + "Click the link below to join the conversation now." : "Kattintson a lenti hivatkozásra a beszélgetéshez való csatlakozáshoz.", + "Join \"%s\"" : "Csatlakozás ehhez: „%s”", + "Meeting" : "Találkozó", + "Password request: %s" : "Jelszókérés: %s", + "Private conversation" : "Privát beszélgetés", + "Deleted user (%s)" : "Törölt felhasználó (%s)", + "Failed to upload call recording" : "A hívásfelvétel feltöltése sikertelen", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "A felvételi kiszolgáló nem tudta feltölteni a következő hívást: {call}. Vegye fel a kapcsolatot a rendszergazdákkal.", + "Share to chat" : "Megosztás csevegésben", + "Dismiss notification" : "Értesítés mellőzése", + "Call recording now available" : "A hívásfelvétel már elérhető", + "The recording for the call in {call} was uploaded to {file}." : "A(z) {call} hívás felvétele feltöltésre került ide: {file}.", + "Transcript now available" : "A leiratozás elérhető", + "The transcript for the call in {call} was uploaded to {file}." : "A(z) {call} hívás leirata feltöltésre került ide: {file}.", + "Failed to transcript call recording" : "A hívásfelvétel leiratozása sikertelen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "A kiszolgáló nem tudta leiratozni a(z) {call} hívás a következő helyre: {file}. Vegye fel a kapcsolatot a rendszergazdával.", + "Call summary now available" : "A hívásösszefoglaló most már elérhető", + "The summary for the call in {call} was uploaded to {file}." : "A(z) {call} hívásösszefoglalója ide lett feltöltve: {file}.", + "Failed to summarize call recording" : "Nem sikerült összefoglalni a hívást", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "A kiszolgáló nem tudta összefoglalni a(z) {call} hívást itt: {file}. Lépjen kapcsolatba a rendszergazdákkal.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} meghívta, hogy csatlakozzon a(z) {roomName} szobához itt: {remoteServer}", + "Accept" : "Elfogadás", + "Decline" : "Elutasítás", + "{user1} invited you to a federated conversation" : "{user1} meghívta egy föderált beszélgetésbe", + "Someone reacted" : "Valaki reagált", + "New message" : "Új üzenet", + "Reminder" : "Emlékeztető", + "Someone mentioned you" : "Valaki megemlítette", + "Notification" : "Értesítés", + "Someone reacted in a private conversation" : "Valaki reagált egy privát beszélgetésben", + "You received a message in a private conversation" : "Kapott egy üzenetet egy privát beszélgetésben", + "Reminder in a private conversation" : "Emlékeztető egy privát beszélgetésben", + "Someone mentioned you in a private conversation" : "Valaki megemlítette egy privát beszélgetésben", + "Notification in a private conversation" : "Értesítés egy privát beszélgetésben", + "Reminder: You in {call}" : "Emlékeztető: {call}", + "Reminder: {user} in {call}" : "Emlékeztető: {user} {call}", + "Reminder: Deleted user in {call}" : "Felhasználó törölve a következőben: {call}", + "Reminder: {guest} (guest) in {call}" : "Emlékeztető: {guest} (vendég) itt: {call}", + "Reminder: Guest in {call}" : "Emlékeztető: Vendég itt: {call}", + "{user} reacted with {reaction}" : "{user} a következővel reagált: {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a következővel reagált: {reaction} itt: {call}", + "Deleted user reacted with {reaction} in {call}" : "Egy törölt felhasználó a következővel reagált: {reaction} itt: {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (vendég) ezzel reagált: {reaction}, ebben: {call}", + "Guest reacted with {reaction} in {call}" : "Egy vendég ezzel reagált: {reaction} itt: {call}", + "{user} in {call}" : "{user} itt: {call}", + "Deleted user in {call}" : "Felhasználó törölve a következőben: {call}", + "{guest} (guest) in {call}" : "{guest} (vendég) itt: {call}", + "Guest in {call}" : "Vendég a(z) {call} hívásban", + "{user} sent you a private message" : "{user} privát üzenetet küldött", + "{user} sent a message in conversation {call}" : "{user} üzenetet küldött a(z) {call} beszélgetésben", + "A deleted user sent a message in conversation {call}" : "Egy törölt felhasználó üzenetet küldött a(z) {call} beszélgetésben", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (vendég) üzenetet küldött a(z) {call} beszélgetésben", + "A guest sent a message in conversation {call}" : "Egy vendég üzenetet küldött a(z) {call} beszélgetésben", + "{user} replied to your private message" : "{user} válaszolt a privát üzenetére", + "{user} replied to your message in conversation {call}" : "{user} válaszolt az üzenetedre a(z) {call} beszélgetésben", + "A deleted user replied to your message in conversation {call}" : "Egy törölt felhasználó válaszolt az üzenetére a(z) {call} beszélgetésben", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (vendég) válaszolt az üzenetére a(z) {call} beszélgetésben", + "A guest replied to your message in conversation {call}" : "Egy vendég válaszolt az üzenetére a(z) {call} beszélgetésben", + "Reminder: You in private conversation {call}" : "Emlékeztető: Ön a(z) {call} magánbeszélgetésben", + "Reminder: A deleted user in private conversation {call}" : "Emlékeztető: törölt felhasználó a(z) {call} magánbeszélgetésben", + "Reminder: {user} in private conversation" : "Emlékeztető: {user} egy magánbeszélgetésben", + "Reminder: You in conversation {call}" : "Emlékeztető: Ön a(z) {call} beszélgetésben", + "Reminder: {user} in conversation {call}" : "Emlékeztető: {user} a(z) {call} beszélgetésben)", + "Reminder: A deleted user in conversation {call}" : "Emlékeztető: egy törölt felhasználó a(z) {call} beszélgetésben", + "Reminder: {guest} (guest) in conversation {call}" : "Emlékeztető: {guest} (vendég) a(z) {call} beszélgetésben", + "Reminder: A guest in conversation {call}" : "Emlékeztető: egy vendég a(z) {call} beszélgetésben", + "{user} reacted with {reaction} to your private message" : "{user} ezzel reagált a privát üzenetére: {reaction}", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Egy törölt felhasználó ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (vendég) ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Egy vendég ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "{user} mentioned you in a private conversation" : "{user} megemlítette egy privát beszélgetésben", + "{user} mentioned group {group} in conversation {call}" : "{user} megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "{user} mentioned team {team} in conversation {call}" : "{user} megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "{user} mentioned everyone in conversation {call}" : "{user} megemlített mindenkit a(z) {call} beszélgetésben", + "{user} mentioned you in conversation {call}" : "{user} megemlítette a(z) {call} beszélgetésben", + "A deleted user mentioned group {group} in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "A deleted user mentioned team {team} in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "A deleted user mentioned everyone in conversation {call}" : "Egy törölt felhasználó megemlített mindenkit a(z) {call} beszélgetésben", + "A deleted user mentioned you in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {call} beszélgetésben", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (vendég) megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (vendég) megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (vendég) megemlített mindenkit a(z) {call} beszélgetésben", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (vendég) megemlítette a(z) {call} beszélgetésben", + "A guest mentioned group {group} in conversation {call}" : "Egy vendég megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "A guest mentioned team {team} in conversation {call}" : "Egy vendég megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "A guest mentioned everyone in conversation {call}" : "Egy vendég megemlített mindenkit a(z) {call} beszélgetésben", + "A guest mentioned you in conversation {call}" : "Egy vendég megemlítette a(z) {call} beszélgetésben", + "View message" : "Üzenet megtekintése", + "Dismiss reminder" : "Emlékeztető elvetése", + "View chat" : "Csevegés megtekintése", + "{user} invited you to a group conversation: {call}" : "{user} meghívta a következő csoportos beszélgetésbe: {call}", + "Join call" : "Csatlakozás a híváshoz", + "Answer call" : "Válasz a hívásra", + "{user} would like to talk with you" : "{user} szeretne Önnel beszélni", + "Call back" : "Visszahívás", + "You missed a call from {user}" : "Nem fogadott hívás tőle: {user}", + "Accept call" : "Hívás fogadása", + "Incoming phone call from {call}" : "Bejövő telefonhívás innen: {call}", + "You missed a phone call from {call}" : "Nem fogadott egy telefonhívást innen: {call}", + "A group call has started in {call}" : "Csoportos hívás kezdődött itt: {call}", + "You missed a group call in {call}" : "Nem fogadott csoportos hívás itt: {call}", + "{email} is requesting the password to access {file}" : "{email} jelszót kér ehhez: {file}", + "{email} tried to request the password to access {file}" : "{email} megpróbált jelszót kérni ehhez: {file}", + "Someone is requesting the password to access {file}" : "Valaki jelszót kér ehhez: {file}", + "Someone tried to request the password to access {file}" : "Valaki megpróbál jelszót kérni ehhez: {file}", + "Open settings" : "Beállítások megnyitása", + "Hosted signaling server added" : "Külső jelzőkiszolgáló hozzáadva", + "The hosted signaling server is now configured and will be used." : "A külső jelzőkiszolgáló beállításra került, és az lesz használva.", + "Hosted signaling server removed" : "Külső jelzőkiszolgáló eltávolítva", + "The hosted signaling server was removed and will not be used anymore." : "A külső jelzőkiszolgáló beállításra került, és az lesz használva.", + "Hosted signaling server changed" : "Külső jelzőkiszolgáló megváltoztatva", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "A külső jelzőkiszolgáló fiókja „{oldstatus}” állapotról erre változott: „{newstatus}”.", + "pending" : "függőben", + "active" : "aktív", + "expired" : "lejárva", + "blocked" : "blokkolva", + "error" : "hiba", + "The certificate of {host} expires in {days} days" : "A(z) {host} tanúsítványa {days} nap múlva lejár", + "The certificate of {host} expired" : "A(z) {host} tanúsítványa lejárt", + "Contact via Talk" : "Beszélgetés", + "Open Talk" : "Beszélgetés megnyitása", + "Default" : "Alapértelmezett", + "Presentation" : "Bemutató", + "Voice room" : "Hangos szoba", + "Webinar" : "Webinár", + "Conversations" : "Beszélgetések", + "Messages in current conversation" : "Üzenetek a jelenlegi beszélgetésben", + "{user}" : "{user}", + "Messages" : "Üzenetek", + "{user} in {conversation}" : "{user} csatlakozott a(z) {conversation} beszélgetéshez", + "Messages in other conversations" : "Üzenetek más beszélgetésekben", + "One-to-one rooms always need to show the other users avatar" : "A négyszemközti beszélgetések szobáinak mindig a másik felhasználó profilképét kell megjelenítenie", + "Invalid emoji character" : "Érvénytelen emodzsi karakter", + "Invalid background color" : "Érvénytelen háttérszín", + "Avatar image is not square" : "A profilkép nem négyzetes", + "Room {number}" : "{number}. szoba", + "Other" : "Egyebek", + "Failed to request trial because the trial server is unreachable. Please try again later." : "A próbaverzió kérése nem sikerült, mert a próbakiszolgáló nem érhető el. Próbálja újra később.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Probléma van a példány hitelesítésével. Lehet, hogy kívülről nem érhető el az URL az ellenőrzéséhez.", + "Something unexpected happened." : "Valami váratlan történt.", + "The URL is invalid." : "Az URL érvénytelen.", + "An HTTPS URL is required." : "Egy HTTPS URL szükséges.", + "The email address is invalid." : "Az e-mail-cím érvénytelen.", + "The language is invalid." : "A nyelv érvénytelen.", + "The country is invalid." : "Az ország érvénytelen.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Probléma van a próbaverzió kérésével. További információkért ellenőrizze a naplóit.", + "Too many requests are send from your servers address. Please try again later." : "Probléma van a példány hitelesítésével. Lehet, hogy kívülről nem érhető el az URL ellenőrzéséhez.", + "There is already a trial registered for this Nextcloud instance." : "Már regisztrált egy próbaverziót ehhez a Nextcloud példányhoz.", + "Something unexpected happened. Please try again later." : "Valami váratlan történt. Próbálja újra később.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nem sikerült próbaverziót kérni, mert a próbakiszolgáló helytelenül viselkedett. Próbálja újra később.", + "Trial requested but failed to get account information. Please check back later." : "Próbaverziót kért, de nem sikerült lekérni a fiókadatait. Nézzen vissza később.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Probléma van a kérés hitelesítésével. Lehet, hogy kívülről nem érhető el az URL az ellenőrzéséhez.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nem sikerült lekérni a fiókadatokat, mert a próbakiszolgáló helytelenül viselkedett. Nézzen vissza később.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Probléma van a fiókadatok lekérésével. További információkért ellenőrizze a naplóit.", + "There is no such account registered." : "Nincs ilyen fiók regisztrálva.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nem sikerült lekérni a fiókadatokat, mert a próbakiszolgáló nem érhető el. Nézzen vissza később.", + "Deleting the hosted signaling server account failed. Please check back later." : "A külső jelzőkiszolgáló fiókjának törlése nem sikerült. Nézzen vissza később.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nem sikerült törölni a fiókot, mert a próbakiszolgáló helytelenül viselkedett. Nézzen vissza később.", + "There is a problem with deleting the account. Please check your logs for further information." : "Probléma van a fiók törlésével. További információkért ellenőrizze a naplóit.", + "Too many requests are sent from your servers address. Please try again later." : "Túl sok kérés lett küldve a kiszolgáló címéről. Próbálja újra később.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nem sikerült törölni a fiókot, mert a próbakiszolgáló nem érhető el. Nézzen vissza később.", + "Note to self" : "Saját jegyzet", + "A place for your private notes, thoughts and ideas" : "Egy hely a saját jegyzeteknek, gondolatoknak, ötleteknek", + "Transcript is AI generated and may contain mistakes" : "A leirat MI által lett előállítva, és hibákat tartalmazhat", + "Summary is AI generated and may contain mistakes" : "Az összefoglaló MI által lett előállítva, és hibákat tartalmazhat", + "Let's get started!" : "Kezdjünk neki!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "A **Nextcloud Beszélgetés** egy biztonságos, saját kiszolgálású kommunikációs platform, amely zökkenőmentesen épül be a Nextcloud ökoszisztémába.\\An\n\n#### A Nextcloud Beszélgetés kulcsfontosságú funkciói:\n\n* Csevegés privát és csoportos beszélgetésekkel\n* Hang- és videóhívás\n* Fájlmegosztás, és integráció más nextcloudos alkalmazással\n* Testreszabható beszélgetésbeállítások, moderálási és adatvédelmi eszközök\n* Webre, asztali és mobilos (iOS és Android) alkalmazásként\n* Privát és biztonságos kommunikáció\n\n Tudjon meg többet a [felhasználói dokumentációból](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Üdvözöljük a Nextcloud Beszélgetésben\n\nA Nextcloud Beszélgetés egy privát és sokoldalú üzenetküldő alkalmazás, amely beépül a Nextcloudba. Csevegjen privát vagy csoportos beszélgetésekben, működjön együtt hang- és videóhívások használatával, szervezzen webinárokat és eseményeket, szabja testre a beszélgetéseit, és ez csak a kezdte.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formázza gazdagon a szöveget\n\nA Nextcloud Beszélgetésben használhatja a Markdown szintaxist az üzenetek formázásához. Például, alkalmazzon **félkövér** vagy *dőlt* formázást, esetleg `emelje ki a szöveget kódként`. Akár táblázatokat és címsorokat is hozzáadhat a szövegéhez.\n\nJavítania kell egy elírást, vagy módosítaná a formázást? Szerkessze az üzenetmenü „Üzenet szerkesztése” lehetőségével.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Adjon hozzá mellékleteket és hivatkozásokat\n\nMellékeljen fájlokat a Nextcloud Központból a „+” gomb használatával. Osszon meg elemeket a Fájlokból és más nextcloudos alkalmazásokból. Egyes alkalmazások akár interaktív modulokat is támogatnak, például a Szöveg alkalmazás.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Engedje, hogy folyjon a beszélgetés: említsen meg felhasználók, reagáljon az üzenetekre\n\nMegemlíthet mindenkit a(z) %s használatával, vagy megemlíthet konkrét résztvevőket is, ha kiválasztja a nevüket a listából egy „@” beírása után.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Válaszolhat az üzenetekre, továbbíthatja más csevegésekbe és embereknek, vagy másolhatja az üzenet tartalmát.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Tegyen többet az Okos választóval\n\nEgyszerűen írja be a „/” karaktert, vagy ugorjon a „+” menühöz, hogy megnyissa az Okos választót, amellyel különféle tartalmakat mellékelhet az üzeneteihez. Beállítja az Okos választót, hogy elemeket adjon hozzá nextcloudos alkalmazásokból, GIF-eket, térképhelyeket és MI által előállított tartalmat és egyebeket osszon meg.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Kezelje a beszélgetések beállításait\n\nA beszélgetés menüjében különböző beállításokat talál, mint például:\n* beszélgetés információinak szerkesztése,\n* értesítések kezelése,\n* számos moderációs szabály megadása,\n* hozzáférés és biztonság beállítása,\n* botok engedélyezése,\n* és egyebek.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Egyesült Arab Emírségek", + "Afghanistan" : "Afganisztán", + "Antigua and Barbuda" : "Antigua és Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánia", + "Armenia" : "Örményország", + "Angola" : "Angola", + "Antarctica" : "Antarktisz", + "Argentina" : "Argentína", + "American Samoa" : "Amerikai Szamoa", + "Austria" : "Ausztria", + "Australia" : "Ausztrália", + "Aruba" : "Aruba", + "Åland Islands" : "Åland-szigetek", + "Azerbaijan" : "Azerbajdzsán", + "Bosnia and Herzegovina" : "Bosznia-Hercegovina", + "Barbados" : "Barbadosz", + "Bangladesh" : "Banglades", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Szultanátus", + "Bolivia, Plurinational State of" : "Bolívia", + "Bonaire, Sint Eustatius and Saba" : "Karibi Hollandia", + "Brazil" : "Brazília", + "Bahamas" : "Bahamák", + "Bhutan" : "Bhután", + "Bouvet Island" : "Bouvet-sziget", + "Botswana" : "Botswana", + "Belarus" : "Fehéroroszország", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kókusz (Keeling)-szigetek", + "Congo, the Democratic Republic of the" : "Kongói Demokratikus Köztársaság", + "Central African Republic" : "Közép-afrikai Köztársaság", + "Congo" : "Kongó", + "Switzerland" : "Svájc", + "Côte d'Ivoire" : "Elefántcsontpart", + "Cook Islands" : "Cook-szigetek", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kína", + "Colombia" : "Kolumbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Zöld-foki Köztársaság", + "Curaçao" : "Curaçao", + "Christmas Island" : "Karácsony-szigetek", + "Cyprus" : "Ciprus", + "Czechia" : "Csehország", + "Germany" : "Németország", + "Djibouti" : "Dzsibuti", + "Denmark" : "Dánia", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikai Köztársaság", + "Algeria" : "Algéria", + "Ecuador" : "Ecuador", + "Estonia" : "Észtország", + "Egypt" : "Egyiptom", + "Western Sahara" : "Nyugat-Szahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanyolország", + "Ethiopia" : "Etiópia", + "Finland" : "Finnország", + "Fiji" : "Fidzsi-szigetek", + "Falkland Islands (Malvinas)" : "Falkland-szigetek", + "Micronesia, Federated States of" : "Mikronézia", + "Faroe Islands" : "Feröer-szigetek", + "France" : "Franciaország", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Egyesült Királyság", + "Grenada" : "Grenada", + "Georgia" : "Grúzia", + "French Guiana" : "Francia Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghána", + "Gibraltar" : "Gibraltár", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Egyenlítői-Guinea", + "Greece" : "Görög", + "South Georgia and the South Sandwich Islands" : "Dél-Georgia és a Dél-Sandwich-szigetek", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard-sziget és McDonald-szigetek", + "Honduras" : "Honduras", + "Croatia" : "Horvátország", + "Haiti" : "Haiti", + "Hungary" : "Magyarország", + "Indonesia" : "Indonézia", + "Ireland" : "Írország", + "Israel" : "Izrael", + "Isle of Man" : "Man-sziget", + "India" : "India", + "British Indian Ocean Territory" : "Brit tengerentúli területek", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irán", + "Iceland" : "Izland", + "Italy" : "Olaszország", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordánia", + "Japan" : "Japán", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizisztán", + "Cambodia" : "Kambodzsa", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Saint Kitts és Nevis", + "Korea, Democratic People's Republic of" : "Észak-Korea", + "Korea, Republic of" : "Dél-Korea", + "Kuwait" : "Kuvait", + "Cayman Islands" : "Kajmán-szigetek", + "Kazakhstan" : "Kazahsztán", + "Lao People's Democratic Republic" : "Laoszi Népi Demokratikus Köztársaság", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesotho", + "Lithuania" : "Litvánia", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettország", + "Libya" : "Líbia", + "Morocco" : "Marokkó", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldovai Köztársaság", + "Montenegro" : "Montenegró", + "Saint Martin (French part)" : "Szent Márton-sziget (Francia rész)", + "Madagascar" : "Madagaszkár", + "Marshall Islands" : "Marshall-szigetek", + "North Macedonia" : "Észak-Macedónia", + "Mali" : "Mali", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongólia", + "Macao" : "Makaó", + "Northern Mariana Islands" : "Északi-Mariana-szigetek", + "Martinique" : "Martinique", + "Mauritania" : "Mauritánia", + "Montserrat" : "Montserrat", + "Malta" : "Málta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldív-szigetek", + "Malawi" : "Malawi", + "Mexico" : "Mexikó", + "Malaysia" : "Malajzia", + "Mozambique" : "Mozambik", + "Namibia" : "Namíbia", + "New Caledonia" : "Új-Kaledónia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk-sziget", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Hollnadia", + "Norway" : "Norvégia", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Új-Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francia Polinézia", + "Papua New Guinea" : "Pápua Új-Guinea", + "Philippines" : "Fülöp-szigetek", + "Pakistan" : "Pakisztán", + "Poland" : "Lengyelország", + "Saint Pierre and Miquelon" : "Saint-Pierre és Miquelon", + "Pitcairn" : "Pitcairn-szigetek", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palesztína", + "Portugal" : "Portugália", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Románia", + "Serbia" : "Szerbia", + "Russian Federation" : "Oroszország", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Szaúd-Arábia", + "Solomon Islands" : "Salamon-szigetek", + "Seychelles" : "Seychelle-szigetek", + "Sudan" : "Szudán", + "Sweden" : "Svédország", + "Singapore" : "Szingapúr", + "Saint Helena, Ascension and Tristan da Cunha" : "Szent Ilona, Ascension és Tristan da Cunha", + "Slovenia" : "Szlovénia", + "Svalbard and Jan Mayen" : "Svalbard és Jan Mayen", + "Slovakia" : "Szlovákia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Szenegál", + "Somalia" : "Szomália", + "Suriname" : "Suriname", + "South Sudan" : "Dél-Szudán", + "Sao Tome and Principe" : "São Tomé és Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Szent Márton-sziget (Holland rész)", + "Syrian Arab Republic" : "Szíriai Arab Köztársaság", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- és Caicos-szigetek", + "Chad" : "Csád", + "French Southern Territories" : "Francia déli területek", + "Togo" : "Togo", + "Thailand" : "Thaiföld", + "Tajikistan" : "Tádzsikisztán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Kelet-Timor", + "Turkmenistan" : "Türkmenisztán", + "Tunisia" : "Tunézia", + "Tonga" : "Tonga", + "Turkey" : "Törökország", + "Trinidad and Tobago" : "Trinidad és Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan", + "Tanzania, United Republic of" : "Tanzánia", + "Ukraine" : "Ukrajna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Amerikai Egyesült Államok lakatlan külbirtokai", + "United States of America" : "Amerikai Egyesült Államok", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Üzbegisztán", + "Holy See" : "Apostoli Szentszék", + "Saint Vincent and the Grenadines" : "Saint Vincent és a Grenadine-szigetek", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Brit Virgin-szigetek", + "Virgin Islands, U.S." : "Amerikai Virgin-szigetek", + "Viet Nam" : "Vietnám", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis és Futuna", + "Samoa" : "Szamoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Dél-afrikai Köztársaság", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Háttér elhomályosítása", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nem sikült a WASM fájlok betöltési támogatásának ellenőrzése. Ellenőrizze kézileg, hogy a webkiszolgálója kiszolgálja a `.wasm` fájlokat.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "A webkiszolgálója nincs helyesen beállítva a `.wasm` fájlok kiszolgálására. Ez általában az Nginx konfiguráció hibája. A háttér elhomályosításához szükség van a `.wasm` kiszolgálására. Hasonlítsa össze a Nginx konfigurációját a dokumentációban javasolttal.", + "Talk configuration values" : "A Beszélgetés konfigurációs értékei", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "A maximális híváshossz kényszerítése csak rendszerszintű cron esetén támogatott. Engedélyezze a rendszerszintű cront, vagy távolítsa el a `max_call_duration` konfigurációt.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "A kicsi `max_call_duration` értékek (jelenleg ennyi: %d) a műszaki korlátok miatt nem tarthatóak be. A háttérfeladat csak 5 percenként fut, így saját felelősségre használja.", + "Federation" : "Föderáció", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Erősen ajánlott a „memcache.locking” használata, ha a Beszélgetésben engedélyezve van a föderáció.", + "High-performance backend" : "Nagy teljesítményű háttérrendszer", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nincs Nagy teljesítményű háttérrendszer beállítva – A Nextcloud Talk enélkül történő futtatása csak nagyon kis hívások (legfeljebb 2-3 résztvevő) esetén skálázódik. Állítson be egy nagy teljesítményű háttérrendszert, hogy a több résztvevős hívások is zökkenőmentesek legyenek.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "A Nagy teljesítményű háttérrendszer „conversation_cluster” módban történő futtatása elavult, és nem lesz támogatva a következő verzióban. A nagy teljesítményű háttérrendszer ma már támogatja a valódi klaszterezést, így azt kell helyette használni.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "A több Nagy teljesítményű háttérrendszer megadása elavult, és nem lesz támogatva a következő verzióban. Helyette egy terheléselosztót kell telepíteni klaszterezett jelzőkiszolgálókkal, majd be kell állítani a Beszélgetés beállításaiban.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A(z) %1$s algoritmushoz használt nyilvános kulcs nem felel meg a tárolt privát kulcsnak. A probléma megoldásához futtassa ezt: %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "A Nagy teljesítményű háttérrendszer nincs helyesen beállítva. A részletekért futtassa ezt: %s.", + "High-performance backend not configured correctly" : "A Nagy teljesítményű háttérrendszer nincs helyesen beállítva", + "Error: Cannot connect to server" : "Hiba: Nem lehet csatlakozni a kiszolgálóhoz", + "Error: Server did not respond with proper JSON" : "Hiba: A kiszolgáló nem megfelelő JSON üzenettel válaszolt", + "Error: Certificate expired" : "Hiba: Lejárt tanúsítvány", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hiba: A Nextcloud kiszolgáló és a Nagy teljesítményű háttérrendszer rendszerideje nincs szinkronban. Győződjön meg arról, hogy mindkét kiszolgáló ugyanahhoz az időkiszolgálóhoz kapcsolódik, vagy szinkronizálja őket kézileg.", + "Could not get version" : "Nem lehet lekérni a verziót", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hiba: Futó verzió: {version}; A kiszolgálót frissíteni kell, hogy kompatibilis legyen a Beszélgetés ezen verziójával", + "Error: Server responded with: {error}" : "Hiba: A kiszolgáló válasza: {error}", + "Error: Unknown error occurred" : "Hiba: Ismeretlen hiba történt", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Figyelmeztetés: futó verzió: {version}; a kiszolgáló nem támogatja a jelenlegi Beszélgetés verzió összes funkcióját, hiányzó funkciók: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Erősen ajánlott, hogy állítson be egy memória-gyorsítótárat, ha a Nextcloud Beszélgetést egy Nagy teljesítményű háttérrendszerrel futtatja.", + "Client Push" : "Kliensleküldés", + "Client Push is installed, this improves the punctuality of Talk notifications." : "A Kliensleküldés telepítve van, ez növeli a Beszélgetés értesítéseinek pontosságát.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "A {notify_push} nincs telepítve. Ez késleltetett Beszélgetés értesítésekhez vezethet.", + "Recording backend" : "Felvételi háttérrendszer", + "Using the recording backend requires a High-performance backend." : "A felvételi háttérrendszerhez szükség van a Nagy teljesítményű háttérrendszerre.", + "No recording backend configured" : "Nincs felvételi háttérrendszer beállítva", + "SIP configuration" : "SIP beállítások", + "Using the SIP functionality requires a High-performance backend." : "A SIP funkcionalitáshoz szükség van a Nagy teljesítményű háttérrendszerre.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "A hozzárendelt Beszélgetés telefonszámok nem kezdődhetnek +-szal vagy 0-val. Távolítsa el vagy frissítse a következő számokat:\n{list}", + "No SIP backend configured" : "Nincs SIP háttérrendszer beállítva", + "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie", + "Conversation not found" : "Beszélgetés nem található", + "Path is already shared with this conversation" : "Az útvonal már meg van osztva ezzel a beszélgetéssel", + "Chat, video & audio-conferencing using WebRTC" : "Csevegés, video- és hangkonferencia WebRTC használatával", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Csevegés, video- és hangkonferencia WebRTC használatával\n\n* 💬 **Csevegés** A Nextcloud Beszélgetés egyszerű szöveges csevegést tartalmaz, amellyel fájlokat oszthat meg vagy tölthet fel a Nextcloud Fájlok alkalmazásba vagy a helyi eszközére, és megemlíthet más résztvevőket.\n* 👥 **Privát, csoportos, nyilvános és jelszóval védett hívások!** Hívjon meg valakit, egy teljes csoportot vagy küldjön egy nyilvános hivatkozást a hívásba való meghíváshoz.\n* 🌐 **Föderált csevegések** Csevegjen más Nextcloud-felhasználókkal a saját kiszolgálóikon\n* 💻 **Képernyőmegosztás!** Ossza meg képernyőjét a hívása résztvevőivel.\n* 🚀 **Integráció más Nextcloud alkalmazásokkal**, mint a Fájlok, Naptár, Felhasználói állapot, Irányítópult, Folyamat, Térképek, Okos választó, Névjegyek, Kártyák és még sok más.\n* 🌉 **Szinkronizáljon más csevegőmegoldásokkal** Azáltal, hogy a [Matterbridge](https://github.com/42wim/matterbridge/) integrálva lett a Beszélgetéssel, számos más csevegőmegoldást integrálhat a Nextcloud Beszélgetésbe, és fordítva.", + "Leave call" : "Hívás elhagyása", + "Navigating away from the page will leave the call in {conversation}" : "Az oldalról való elnavigálással elhagyja a hívást itt: {conversation}", + "Stay in call" : "Hívásban maradás", + "Error occurred when getting the conversation information" : "Hiba történt a beszélgetés információinak lekérése során", + "Discuss this file" : "Fájl megbeszélése", + "Share this file with others to discuss it" : "Fájl megosztása másokkal, hogy beszélgethessenek róla", + "Share this file" : "Fájl megosztása", + "Join conversation" : "Csatlakozás a beszélgetéshez", + "This conversation is password-protected." : "Ez a beszélgetés jelszóval védett.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Többszöri sikertelen bejelentkezési kísérletet észleltünk az IP-címéről. A legközelebbi kísérlete így 30 másodperccel késleltetve lesz.", + "The password is wrong. Try again." : "Hibás jelszó. Próbálja újra.", + "Password" : "Jelszó", + "Submit" : "Beküldés", + "Error requesting the password." : "Hiba a jelszó kérésekor.", + "Request password" : "Jelszó kérése", + "This conversation has ended" : "Ez a beszélgetés véget ért", + "Error occurred when joining the conversation" : "Hiba történt a beszélgetéshez csatlakozás során", + "Close Talk sidebar" : "Beszélgetés oldalsáv bezárása", + "Open Talk sidebar" : "Beszélgetés oldalsáv megnyitása", + "Everyone" : "Mindenki", + "Users and moderators" : "Felhasználók és moderátorok", + "Moderators only" : "Csak moderátorok", + "Disable calls" : "Hívások letiltása", + "Save changes" : "Változások mentése", + "Saving …" : "Mentés…", + "Saved!" : "Elmentve!", + "Limit to groups" : "Csoportokra korlátozás", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ha legalább egy csoport ki van választva, akkor csak a felsorolt csoportok lehetnek részesei a beszélgetésnek.", + "Guests can still join public conversations." : "A vendégek továbbra is csatlakozhatnak a nyilvános beszélgetésekhez.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Azok a felhasználók, akik már nem tudják tovább használni a Beszélgetést, továbbra is résztvevőként lesznek felsorolva a korábbi beszélgetéseikben, és a csevegőüzeneteik is meg lesznek tartva.", + "Limit using Talk" : "Beszélgetés használatának korlátozása", + "Limit creating a public and group conversation" : "Nyilvános és csoportos beszélgetés létrehozásának korlátozása", + "Limit creating conversations" : "Beszélgetés létrehozásának korlátozása", + "Limit starting a call" : "Hívásindítás korlátozása", + "Limit starting calls" : "Hívások indításának korlátozása", + "When a call has started, everyone with access to the conversation can join the call." : "Ha egy hívás elkezdődött, akkor mindenki csatlakozhat a híváshoz, aki hozzáfér a beszélgetéshez.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "A következő botok vannak telepítve erre a kiszolgálóra. A dokumentációban megtalálja annak a részleteit, hogy {linkstart1}miként készítse el a saját botját{linkend} vagy {linkstart2}botjait{linkend}, és hogyan engedélyezze őket a kiszolgálón.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nincsenek botok telepítve erre a kiszolgálóra. A dokumentációban megtalálja annak a részleteit, hogy {linkstart1}miként készítse el a saját botját{linkend} vagy {linkstart2}botjait{linkend}, és hogyan engedélyezze őket a kiszolgálón.", + "Description is not provided" : "Nincs leírás", + "Locked for moderators" : "Zárolva a moderátorok részére", + "Enabled" : "Engedélyezve", + "Disabled" : "Letiltva", + "Bots settings" : "Botok beállításai", + "State" : "Állapot", + "Name" : "Név", + "Last error" : "Utolsó hiba", + "Total errors count" : "Összes hiba", + "Find more bots" : "További botok keresése", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "A megbízható kiszolgálók a {linkstart}Megosztási beállítások oldalon{linkend} állíthatóak be.", + "Beta" : "Béta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "A föderált csevegések és hívások már működnek. A mellékletkezelés egy jövőbeli verzióban érkezik.", + "Enable Federation in Talk app" : "Föderáció engedélyezése a Beszélgetés alkalmazásban", + "Permissions" : "Jogosultságok", + "Allow users to be invited to federated conversations" : "Engedélyezés, hogy a felhasználókat föderált beszélgetésekbe hívják meg", + "Allow users to invite federated users into conversation" : "Engedélyezés, hogy a felhasználók föderált felhasználókat hívjanak meg", + "Only allow to federate with trusted servers" : "A föderáció csak megbízható kiszolgálókkal való engedélyezése", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Ha legalább egy csoport ki van választva, akkor csak a felsorolt csoportok tagjai hívhatnak meg föderált felhasználókat a beszélgetésekbe.", + "Groups allowed to invite federated users" : "Föderált felhasználókat meghívható csoportok", + "Select groups …" : "Csoportok kiválasztása…", + "All messages" : "Összes üzenet", + "@-mentions only" : "Csak a @-említések", + "Off" : "Ki", + "General settings" : "Általános beállítások", + "Default notification settings" : "Alapértelmezett értesítési beállítások", + "Default group notification" : "Alapértelmezett csoportértesítés", + "Default group notification for new groups" : "Alapértelmezett csoportértesítés az új csoportok számára", + "Integration into other apps" : "Integráció más alkalmazásokba", + "Allow conversations on files" : "Beszélgetések engedélyezése a fájlokon", + "Allow conversations on public shares for files" : "Beszélgetések engedélyezése a fájlokon a nyilvános megosztásokban", + "End-to-end encrypted calls" : "Végpontok közti titkosítással rendelkező hívások", + "Enable encryption" : "Titkosítás engedélyezése", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "A beállított SIP-híddal és végpontok közti titkosítással rendelkező hívásokhoz a Nagy teljesítményű háttérrendszer és a SIP-híd új verziója szükséges.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "A mobilkliensek pillanatnyilag nem támogatják a végpontok közti titkosítással rendelkező hívásokat.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "A fenti gombra kattintva az űrlapon szereplő információk el lesznek küldve a Struktur AG kiszolgálóinak. További információt a {linkstart}spreed.eu{linkend} oldalon talál.", + "Pending" : "Függőben", + "Error" : "Hiba", + "Blocked" : "Blokkolva", + "Active" : "Aktív", + "Expired" : "Elévült", + "Never" : "Soha", + "The trial could not be requested. Please try again later." : "Nem lehetett próbaverziót kérni. Próbája újra később.", + "The account could not be deleted. Please try again later." : "A fiókot nem sikerült törölni. Próbája újra később.", + "Hosted High-performance backend" : "Külső kiszolgálású Nagy teljesítményű háttérrendszer", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Partnerünk, a Struktur AG szolgáltatásként nyújt jelzőkiszolgálót. Ehhez csak ki kell töltenie az alábbi űrlapot, és a Nextcloud kérni fogja. Miután beállította az Ön számára a kiszolgálót, a hitelesítő adatok automatikusan kitöltésre kerülnek. Ez felülírja a meglévő jelzőkiszolgáló beállításait.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ha a Nagy teljesítményű háttérrendszer fiókja STUN vagy TURN funkcionalitást tartalmaz, akkor a beállítások aszerint fognak frissülni.", + "URL of this Nextcloud instance" : "Ezen Nextcloud-példány webcíme", + "Full name of the user requesting the trial" : "A próbát kérő felhasználó teljes neve", + "Email of the user" : "A felhasználó e-mail-címe", + "Language" : "Nyelv", + "Country" : "Ország", + "Request signaling server trial" : "Jelzőkiszolgáló próbájának kérése", + "You can see the current status of your hosted signaling server in the following table." : "A következő táblázatban láthatja a külső üzemeltetésű jelzőkiszolgáló jelenlegi állapotát.", + "Status" : "Állapot", + "Created at" : "Létrehozás ideje:", + "Expires at" : "Elévülés ideje:", + "Limits" : "Korlátok", + "STUN included" : "STUN-t tartalmaz", + "Yes" : "Igen", + "No" : "Nem", + "TURN included" : "TURN-t tartalmaz", + "Delete the signaling server account" : "A jelzőkiszolgáló-fiók törlése", + "_%n user_::_%n users_" : ["%n felhasználó","%n felhasználó"], + "Installed version: {version}" : "Telepített verzió: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Telepítheti a Matterbridge-dzet, hogy összekapcsolja a Nextcloud Beszélgetés alkalmazást néhány további szolgáltatással. További részletekért keresse fel a {linkstart1}GitHub oldalukat{linkend}. Az alkalmazás letöltése és telepítése eltarthat egy ideig. Időtúllépés esetén telepítse kézzel az {linkstart2}alkalmazástárból{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "A Matterbridge binárisa hibás jogosultságokkal rendelkezik. Győződjön meg arról, hogy a Matterbridge bináris fájljának helyes a tulajdonosa, és végrehajtható. Itt található: „/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "A Matterbridge binárisa nem található, vagy nem futtatható.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "A konfiguráción keresztül kézileg is beállíthatja a Matterbridge binárisának elérési útját. További információt a {linkstart}Matterbridge integrációs dokumentációjában{linkend} talál.", + "Downloading …" : "Letöltés…", + "Install Talk Matterbridge" : "Beszélgetés Matterbridge telepítése", + "An error occurred while installing the Matterbridge app" : "Hiba történt a Matterbridge alkalmazás telepítésekor", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Hiba történt a Beszélgetés Matterbridge telepítése során. Telepítse kézileg.", + "Failed to execute Matterbridge binary." : "A Matterbridge binárisának végrehajtása sikertelen.", + "Matterbridge integration" : "Matterbridge integráció", + "Enable Matterbridge integration" : "Matterbridge integráció engedélyezése", + "Status: Checking connection" : "Állapot: kapcsolat ellenőrzése", + "OK: Running version: {version}" : "OK: Futtatott verzió: {version}", + "Error: Server seems to be a Signaling server" : "Hiba: A kiszolgáló jelzőkiszolgálónak tűnik", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hiba: A Nextcloud-kiszolgáló és a felvételi háttérrendszer kiszolgálóján eltérő a rendszeridő. Győződjön meg arról, hogy mindkét kiszolgáló ugyanahhoz az időkiszolgálóhoz kapcsolódik, vagy szinkronizálja kézileg az időket.", + "Recording backend URL" : "Felvételi háttérrendszer webcíme", + "Validate SSL certificate" : "SSL tanúsítvány érvényesítése", + "Delete this server" : "Ezen kiszolgáló törlése", + "Test this server" : "Kiszolgáló tesztelése", + "Disabled for all calls" : "Minden hivásban letiltva", + "Enabled for all calls" : "Minden hívásban engedélyezve", + "Configurable on conversation level by moderators" : "A moderátorok beszélgetési szinten konfigurálhatók", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Az „upload_max_filesize” vagy a „post_max_size” PHP-beállítás legfeljebb {maxUpload} sebességű fájlfeltöltést tesz lehetővé.", + "Recording backend settings saved" : "A felvételi háttérrendszer beállításai mentve", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "A moderátorok a beszélgetés szintjén engedélyezhetik a hozzájárulást. A rögzítéshez az összes résztvevő beleegyezése szükséges, még mielőtt csatlakoznának bármelyik híváshoz ebben a beszélgetésben.", + "The consent to be recorded will be required for each participant before joining every call." : "A rögzítéshez az összes résztvevő beleegyezése szükséges, még mielőtt egy híváshoz csatlakoznának.", + "The consent to be recorded is not required." : "Nem szükséges hozzájárulás a felvételhez.", + "Recording backend configuration is only possible with a High-performance backend." : "A felvételi háttérrendszer beállítása csak Nagy teljesítményű háttérrendszer esetén lehetséges.", + "Add a new recording backend server" : "Új felvételi háttérrendszer hozzáadása", + "Shared secret" : "Megosztott titok", + "Recording consent" : "Felvételi hozzájárulás", + "Recording transcription" : "Felvétel leiratozása", + "Automatically transcribe call recordings with a transcription provider" : "Hívásfelvételek automatikus leiratozása egy szolgáltató segítségével", + "Automatically summarize call recordings with transcription and summary providers" : "Hívásfelvételek automatikus összefoglalása leiratozási és összefoglalási szolgáltatókkal", + "SIP configuration saved!" : "SIP konfiguráció mentve.", + "SIP configuration is only possible with a High-performance backend." : "A SIP konfiguráció csak Nagy teljesítményű háttérrendszer mellett lehetséges.", + "Enable SIP Dial-out option" : "SIP kitárcsázási lehetőség engedélyezése", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "A jelzőkiszolgáló frissítése szükséges a SIP kitárcsázási funkció támogatásához.", + "Do not show SIP Dial-out caller number" : "Ne jelenítse meg a SIP kitárcsázási számot", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "A névtelen tag megjelenítése mint „ismeretlen” vagy „visszatartott szám”", + "Dial-out number" : "Kitárcsázási szám", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formátumú szám, mely tartalék hívószámként szolgál a kimenő hívásokhoz", + "Dial-out prefix" : "Kitárcsázási előhívó", + "Prefix to configured user number for outgoing calls (default is `+`)" : "A kimenő hívásokhoz használt felhasználói szám (alapértelmezés: `+`)", + "Restrict SIP configuration" : "A SIP beállítások korlátozása", + "Enable SIP configuration" : "SIP beállítások engedélyezése", + "Only users of the following groups can enable SIP in conversations they moderate" : "Csak az alábbi csoportok felhasználói engedélyezhetik a SIP-et az általuk moderált beszélgetésekben", + "Phone number (Country)" : "Telefonszám (ország)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ez az információt meghívó e-mailben lesz elküldve, és az oldalsávon jelenik meg az összes résztvevő számára.", + "Nextcloud base URL" : "Nextcloud alapwebcím", + "Talk Backend URL" : "Beszélgetés háttérrendszer-webcím", + "WebSocket URL" : "WebSocket webcím", + "Available features" : "Elérhető funkciók", + "Error: Websocket connection failed" : "Hiba: Nem sikerült a WebSocket kapcsolat", + "Error code" : "Hibakód", + "Error message" : "Hibaüzenet", + "Error: Websocket connection failed. Check browser console" : "Hiba: Nem sikerült a WebSocket kapcsolat. Ellenőrizze a böngészőkonzolt.", + "High-performance backend URL" : "Nagy teljesítményű háttérrendszer webcíme", + "Missing High-performance backend warning hidden" : "A hiányzó Nagy teljesítményű háttérrendszer figyelmeztetése elrejtve", + "High-performance backend settings saved" : "A Nagy teljesítményű háttérrendszer beállításai mentve", + "Nextcloud Talk setup not complete" : "A Nextcloud Beszélgetés beállítása nincs kész", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Vegye figyelembe, hogy a 2 résztvevősnél nagyobb hívásoknál, a Nagy teljesítményű háttérrendszer nélkül, a résztvevők kapcsolódási problémákat, és magas terhelést tapasztalhatnak az eszközükön.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Telepítse a Nagy teljesítményű háttérrendszert, hogy biztosítsa a több résztvevős hívások zökkenőmentes működését.", + "Nextcloud portal" : "Nextcloud portál", + "Quick installation guide" : "Gyors telepítési útmutató", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "A Nagy teljesítményű háttérrendszer szükséges a több résztvevős hívásokhoz és beszélgetésekhez. A háttérrendszer nélkül az összes résztvevőnek egyesével kell feltölteni a videót az összes többi résztvevőnek, ami nagy valószínűséggel kapcsolódási problémákat és magas terhelést okoz a résztvevő eszközökön.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Erősen ajánlott elosztott gyorsítótárat beállítani, ha a Nextcloud Beszélgetést a Nagy teljesítményű háttérrendszerrel használja.", + "Add High-performance backend server" : "Nagy teljesítményű háttérrendszer hozzáadása", + "Warn about connectivity issues in calls with more than 2 participants" : "Figyelmeztetés a kapcsolódási problémákra, ha a hívások 2-nél több résztvevőt tartalmaznak", + "STUN server URL" : "STUN-kiszolgáló webcíme", + "The server address is invalid" : "A kiszolgálócím érvénytelen", + "STUN settings saved" : "STUN beállítások mentve", + "STUN servers" : "STUN kiszolgálók", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN kiszolgáló a router mögötti résztvevők nyilvános IP-címének megállapítására szolgál.", + "Add a new STUN server" : "Új STUN-kiszolgáló hozzáadása", + "{schema} scheme must be used with a domain" : "A(z) {schema} sémát egy domainen kell használni", + "{option1} and {option2}" : "{option1} és {option2}", + "{option} only" : "csak {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: A TURN-kiszolgáló visszatért a sikeres ICE-jelöltekkel", + "Error: No working ICE candidates returned by the TURN server" : "Hiba: A TURN-kiszolgáló nem adott vissza egyetlen működő ICE-jelöltet sem", + "Testing whether the TURN server returns ICE candidates" : "Tesztelés, hogy a TURN-kiszolgáló visszatér-e az ICE-jelöltekkel", + "TURN server schemes" : "TURN-kiszolgáló sémái", + "TURN server URL" : "TURN-kiszolgáló webcíme", + "TURN server secret" : "TURN-kiszolgáló titka", + "TURN server protocols" : "TURN-kiszolgáló protokolljai", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN kiszolgáló a tűzfal mögött lévő résztvevők forgalmának proxyzására szolgál. Ha az egyes résztvevők nem tudnak csatlakozni másokhoz, akkor valószínűleg TURN kiszolgálóra van szükség. A telepítési utasításokért lásd {linkstart}ezt a dokumentációt{linkend}.", + "TURN settings saved" : "TURN beállítások mentve", + "TURN servers" : "TURN-kiszolgálók", + "Add a new TURN server" : "Új TURN-kiszolgáló hozzáadása", + "Failed" : "Sikertelen", + "OK" : "Rendben", + "Checking …" : "Ellenőrzés…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Sikertelen: a WebAssembly le van tiltva, vagy nem támogatott ebben a böngészőben. Engedélyezze a WebAssemblyt, vagy az ellenőrzéshez használjon egy olyan böngészőt, amely támogatja.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Sikertelen: a webkiszolgáló nem helyesen adta vissza a „.wasm” és a „.tflite” fájlokat. Ellenőrizze a Beszélgetés dokumentációjának „Rendszerkövetelmények” szakaszát.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Rendben: a webkiszolgáló helyesen adta vissza a „.wasm” és a „.tflite” fájlokat.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Úgy tűnik, hogy a PHP és Apache konfiguráció nem teljes. Vegye figyelembe, hogy a PHP csak a MPM_PREFORK modullal, a PHP-FPM pedig csak az MPM_EVENT modullal használható.", + "Web server setup checks" : "Webkiszolgáló beállítási ellenőrzések", + "Files required for virtual background can be loaded" : "A virtuális háttérhez szükséges fájlok betölthetők", + "Federated user" : "Föderált felhasználó", + "Assign participants to rooms" : "A résztvevők hozzárendelése a szobákhoz", + "Configure breakout rooms" : "Szétbontott szobák beállítása", + "Number of breakout rooms" : "Szétbontott szobák száma", + "You can create from 1 to 20 breakout rooms." : "1 és 20 közti szétbontott szobát hozhat létre.", + "Assignment method" : "Hozzárendelési mód", + "Automatically assign participants" : "Résztvevők automatikus hozzárendelése", + "Manually assign participants" : "Résztvevők kézi hozzárendelése", + "Allow participants to choose" : "Engedélyezés, hogy a résztvevők választhassanak", + "Create rooms" : "Szobák létrehozása", + "Confirm" : "Megerősítés", + "Create breakout rooms" : "Szétbontott szobák létrehozása", + "Reset" : "Alaphelyzetbe állítás", + "Delete breakout rooms" : "Szétbontott szobák törlése", + "Room {roomNumber}" : "{numberNumber}. szoba", + "Current breakout rooms and settings will be lost" : "A jelenlegi szétbontott szobák és beállítások elvesznek", + "Cancel" : "Mégse", + "Unassigned participants" : "Nem hozzárendelt résztvevő", + "Back" : "Vissza", + "Assign" : "Hozzárendelés", + "Add participant \"{user}\"" : "„{user}” résztvevő hozzáadása", + "Now" : "Most", + "Invalid calendar selected" : "Érvénytelen naptár kiválasztva", + "Invalid start time selected" : "Érvénytelen kezdőidőpont kiválasztva", + "Invalid end time selected" : "Érvénytelen záróidőpont kiválasztva", + "Unknown error occurred" : "Ismeretlen hiba történt", + "Sending no invitations" : "Nem lesz meghívó kiküldve", + "{participant0} will receive an invitation" : "{participant0} meghívót fog kapni", + "{participant0} and {participant1} will receive invitations" : "{participant0} és {participant1} meghívót fog kapni", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} és még %n személy meghívót fog kapni","{participant0}, {participant1} és még %n személy meghívót fog kapni"], + "Invite {user}" : "{user} meghívása", + "Invite all users and emails in this conversation" : "Összes felhasználó és e-mail-cí meghívása ebbe a beszélgetésbe", + "Meeting created" : "Találkozó létrehozva", + "Upcoming meetings" : "Következő találkozók", + "Loading …" : "Betöltés…", + "No upcoming meetings" : "Nincs következő találkozó", + "Schedule a meeting" : "Találkozó ütemezése", + "Meeting title" : "Találkozó címe", + "From" : "Feladó", + "To" : "Címzett", + "Calendar" : "Naptár", + "Attendees" : "Résztvevők", + "No other participants to send invitations to." : "Nincs más résztvevő, akinek meghívót kellene küldeni.", + "Add attendees" : "Résztvevők hozzáadása", + "Save" : "Mentés", + "Search participants" : "Résztvevők keresése", + "No results" : "Nincs találat", + "Done" : "Kész", + "Disable live transcription" : "Élő leiratozás kikapcsolása", + "Enable live transcription (generated by AI)" : "Élő leiratozás bekapcsolása (MI által előállítva)", + "Enable live transcription (Live transcriptions app is not installed)" : "Élő leiratozás bekapcsolása (Az Élő leiratozás alkalmazás nincs telepítve)", + "Disable live translation" : "Élő fordítás bekapcsolása", + "Enable live translation (generated by AI)" : "Élő fordítás bekapcsolása (MI által előállítva)", + "Original language" : "Eredeti nyelv", + "Live translations app is not installed" : "Az Élő fordítás alkalmazás nincs telepítve", + "Original language: {languageName}" : "Eredeti nyelv: {languageName}", + "Translated language" : "Fordítás nyelve", + "Translated language: {languageName}" : "Fordítás nyelve: {languageName}", + "Raise hand" : "Kéz felemelése", + "Raise hand (R)" : "Kéz felemelése (R)", + "Lower hand" : "Kéz letétele", + "Lower hand (R)" : "Kéz letétele (R)", + "Exit full screen (F)" : "Kilépés a teljes képernyős módból (F)", + "Full screen (F)" : "Teljes képernyő (F)", + "Speaker view" : "Beszélő nézet", + "Grid view" : "Rács nézet", + "Error when trying to load the available live transcription languages" : "Hiba történt az elérhető élő leiratozási nyelvek betöltése során", + "Failed to enable live transcription" : "Nem sikerült az élő leiratozás bekapcsolása", + "Failed to enable live translations" : "Nem sikerült az élő fordítás bekapcsolása", + "Failed to disable live translations" : "Nem sikerült az élő fordítás kikapcsolása", + "Recording consent is required" : "Felvételi hozzájárulás szükséges", + "This conversation is read-only" : "Ez a beszélgetés csak olvasható", + "Conversation not found or not joined" : "A beszélgetés nem található, vagy nem csatlakozott", + "Lobby is still active and you're not a moderator" : "A váró még mindig aktív, és Ön nem moderátor", + "Connection failed" : "Nem sikerült a kapcsolat", + "Reload" : "Újratöltés", + "{nickName} raised their hand." : "{nickName} felemelte a kezét.", + "A participant raised their hand." : "Egy résztvevő felemelte a kezét.", + "Collapse stripe" : "Csík összecsukása", + "Expand stripe" : "Csík kibontása", + "Previous page of videos" : "A videók előző oldala", + "Next page of videos" : "A videók következő oldala", + "Connecting …" : "Csatlakozás…", + "Calling …" : "Hívás…", + "Waiting for {user} to join the call" : "Várakozás, hogy {user} csatlakozzon a híváshoz", + "Waiting for others to join the call …" : "Várakozás, hogy mások is csatlakozzanak a híváshoz…", + "You can invite others in the participant tab of the sidebar" : "Másokat az oldalsávon található „résztvevők” fülön tud meghívni", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Másokat az oldalsávon található „résztvevők” fülön keresztül vagy a hivatkozás megosztásával tud meghívni!", + "Share this link to invite others!" : "Mások meghívásához ossza meg ezt a hivatkozást!", + "Copy link" : "Hivatkozás másolása", + "You are not allowed to enable audio" : "Nem engedélyezheti a hangot", + "No audio. Click to select device" : "Nincs hang. Kattintson egy eszköz kiválasztásához", + "Mute audio" : "Hang némítása", + "Mute audio (M)" : "Hang némítása (M)", + "Unmute audio" : "Hang némításának feloldása", + "Unmute audio (M)" : "Hang némításának feloldása (M)", + "None" : "Nincs", + "Select a microphone" : "Válasszon mikrofont", + "Select a speaker" : "Válasszon hangszórót", + "Microphone settings" : "Mikrofonbeállítások", + "Check devices" : "Eszközök ellenőrzése", + "Access to camera was denied" : "A kamera hozzáférése letiltva", + "Error while accessing camera: It is likely in use by another program" : "Hiba történt a kamera elérésekor: valószínűleg egy másik program használja", + "Error while accessing camera" : "Hiba történt a kamera elérésekor", + "You have been muted by a moderator" : "Egy moderátor elnémította Önt", + "Hide presenter video" : "Előadó videójának elrejtése", + "You are not allowed to enable video" : "Nem engedélyezheti a videót", + "No video. Click to select device" : "Nincs videó. Kattintson egy eszköz kiválasztásához", + "Disable video" : "Videó letiltása", + "Disable video (V)" : "Videó letiltása (V)", + "Enable video" : "Videó engedélyezése", + "Enable video (V)" : "Videó engedélyezése (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése – A videó első bekapcsolásakor a kapcsolat rövid ideig meg fog szakadni", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése (V) – A videó első bekapcsolásakor a kapcsolat rövid ideig megszakad", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése. A videó első bekapcsolásakor a kapcsolat rövid ideig megszakad", + "Select a video device" : "Válasszon videóeszközt", + "Show presenter" : "Előadó megjelenítése", + "You" : "Ön", + "Mute" : "Némítás", + "Muted" : "Némítva", + "Show screen" : "Képernyő megjelenítése", + "Stop following" : "Követés felfüggesztése", + "Connection could not be established …" : "A kapcsolat nem hozható létre…", + "Connection was lost and could not be re-established …" : "A kapcsolat elveszett, és nem hozható létre újra…", + "Connection could not be established. Trying again …" : "A kapcsolat nem hozható létre. Újrapróbálkozás…", + "Connection lost. Trying to reconnect …" : "A kapcsolat elveszett. Újrapróbálkozás…", + "Connection problems …" : "Kapcsolódási problémák…", + "Collapse" : "Összecsukás", + "Expand" : "Kibontás", + "You need to be logged in to upload files" : "A fájlok feltöltéséhez be kell jelentkeznie", + "Drop your files to upload" : "Dobja ide a fájljait a feltöltéshez", + "Conversation messages" : "Beszélgetési üzenetek", + "Scroll to bottom" : "Görgetés az aljára", + "Post message" : "Üzenet küldése", + "Federated conversation" : "Föderált beszélgetés", + "Public conversation" : "Nyilvános beszélgetés", + "Favorite" : "Kedvenc", + "Banned users" : "Kitiltott felhasználók", + "Manage the list of banned users in this conversation." : "A kitiltott felhasználók kezelése ebben a beszélgetésben.", + "Manage bans" : "Kitiltások kezelése", + "No banned users" : "Nincs kitiltott felhasználó", + "Banned by:" : "Kitiltotta:", + "Date:" : "Dátum:", + "Note:" : "Megjegyzés:", + "Hide details" : "Részletek elrejtése", + "Show details" : "Részletek megjelenítése", + "Unban" : "Kitiltás visszavonása", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "A cím és a leírás a {linkstart}Naptárban ↗{linkend} változtatható meg.", + "Error while updating conversation name" : "Hiba történt a beszélgetés nevének frissítése során", + "Error while updating conversation description" : "Hiba történt a beszélgetés leírásának frissítése során", + "Enter a name for this conversation" : "Adjon meg egy nevet a beszélgetéshez", + "Edit conversation name" : "Beszélgetés nevének szerkesztése", + "Edit conversation description" : "Beszélgetés leírásának szerkesztése", + "Enter a description for this conversation" : "Adja meg a beszélgetés leírását", + "Picture" : "Kép", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Ebben a beszélgetésben a következő botok engedélyezhetők. Forduljon a rendszergazdához, hogy több botot telepítsen erre a kiszolgálóra.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nincs bot telepítve. Forduljon a rendszergazdához, hogy botot telepítsen erre a kiszolgálóra.", + "Disable" : "Letiltás", + "Enable" : "Engedélyezés", + "Breakout rooms" : "Szétbontott szobák", + "Manage breakout rooms" : "Szétbontott szobák kezelése", + "Set up breakout rooms for this conversation" : "Szobabontás beállítása a beszélgetéshez", + "Please select a valid PNG or JPG file" : "Válasszon egy érvényes PNG- vagy JPG-fájlt", + "Choose your conversation picture" : "Válassza ki a beszélgetés képét", + "Choose" : "Válasszon", + "Error setting conversation picture" : "Hiba a beszélgetés képének beállítása során", + "Could not set the conversation picture: {error}" : "Nem sikerült beállítani a beszélgetés képét: {error}", + "Error cropping conversation picture" : "Hiba a beszélgetés képének levágása során", + "Error removing conversation picture" : "Hiba a beszélgetés képének eltávolítása során", + "Set emoji as conversation picture" : "Emodzsi beállítása a beszélgetés képének", + "Set background color for conversation picture" : "Háttérszín beállítása a beszélgetés képénél", + "Upload conversation picture" : "Beszélgetés képének feltöltése", + "Choose conversation picture from files" : "Válassza ki a beszélgetés képét a fájlok közül", + "Remove conversation picture" : "Beszélgetés képének eltávolítása", + "The file must be a PNG or JPG" : "A képnek PNG-nek vagy JPG-nek kell lennie", + "Set picture" : "Kép beállítása", + "Default permissions modified for {conversationName}" : "A(z) {conversationName} alapértelmezett jogosultságai módosítva", + "Could not modify default permissions for {conversationName}" : "A(z) {conversationName} alapértelmezett jogosultságai nem módosíthatók", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "A beszélgetés résztvevőinek alapértelmezett jogosultságainak szerkesztése. Ezek a beállítások nem érintik a moderátorokat.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Az egyes résztvevőkhöz rendelt egyéni jogosultságok elvesznek, ha módosítja a jogosultságokat ebben a szakaszban.", + "All permissions" : "Összes jogosultság", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "A résztvevők elindíthatják a hívást, csatlakozhatnak egy meglévő híváshoz, engedélyezhetik a hangot, videót és a képernyőmegosztást.", + "Restricted" : "Korlátozott", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "A résztvevők csatlakozhatnak a hívásokhoz, de addig nem engedélyezhetik a hangot, videót és képernyőmegosztást, míg egy moderátor kézzel nem adja meg nekik a jogosultságot.", + "Advanced permissions" : "Speciális jogosultságok", + "Edit permissions" : "Jogosultságok szerkesztése", + "Conversation settings" : "Beszélgetésbeállítások", + "Basic Info" : "Alapvető információk", + "Personal" : "Személyes", + "Moderation" : "Moderálás", + "Setup overview" : "Telepítés áttekintése", + "Live transcription" : "Élő leiratozás", + "Live transcriptions app is not installed" : "Az Élő leiratozás alkalmazás nincs telepítve", + "Enable live transcription" : "Élő leiratozás bekapcsolása", + "Breakout Rooms" : "Szétbontott szobák", + "Matterbridge" : "Matterbridge", + "Bots" : "Botok", + "Danger zone" : "Veszélyes területet", + "Archive conversation" : "Beszélgetés archiválása", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Az archivált beszélgetések alapértelmezetten rejtve vannak a beszélgetések közül. Viszont továbbra is megjelennek, ha a beszélgetés nevére keres, vagy ha az archivált beszélgetéseket éri el.", + "Do you really want to leave \"{displayName}\"?" : "Biztos, hogy elhagyja ezt: „{displayName}”?", + "You can archive this conversation instead." : "Ehelyett archiválhatja a beszélgetést.", + "Leave conversation" : "Beszélgetés elhagyása", + "You need to promote a new moderator before you can leave the conversation" : "Új moderátort kell kineveznie, mielőtt elhagyhatja a beszélgetést", + "Delete conversation" : "Beszélgetés törlése", + "Do you really want to delete \"{displayName}\"?" : "Biztos, hogy törli ezt: „{displayName}”?", + "Error while deleting conversation" : "Hiba történt a beszélgetés törlése során", + "Delete all chat messages" : "Összes csevegési üzenet törlése", + "Do you really want to delete all messages in \"{displayName}\"?" : "Biztos, hogy törli a következő összes üzenetét: „{displayName}”?", + "Error while clearing chat history" : "Hiba a csevegés előzményeinek törlése során", + "Be careful, these actions cannot be undone." : "Legyen óvatos, ezeket a műveleteket nem lehet visszavonni.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Ha elhagyott egy beszélgetést, akkor a zárt beszélgetésekhez visszacsatlakozáshoz meghívóra lesz szüksége. A nyílt beszélgetésekhez bármikor visszacsatlakozhat.", + "Permanently delete this conversation." : "Beszélgetés végleges törlése.", + "Delete chat messages" : "Csevegési üzenetek törlése", + "Permanently delete all the messages in this conversation." : "A beszélgetés összes üzenetének végleges törlése.", + "_%n hour_::_%n hours_" : ["%n óra","%n óra"], + "_%n day_::_%n days_" : ["%n nap","%n nap"], + "_%n week_::_%n weeks_" : ["%n hét","%n hét"], + "Custom expiration time" : "Egyéni elévülési idő", + "Message expiration disabled" : "Az üzenetek elévülése ki van kapcsolva", + "Message expiration set: {duration}" : "Üzenet elévülése beállítva: {duration}", + "Error when trying to set message expiration" : "Hiba az üzenet lejáratának beállítása során", + "Message expiration" : "Üzenetek elévülése", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "A csevegőüzenetek bizonyos idő után elévülhetnek. Megjegyzés: A csevegésben megosztott fájlok nem törlődnek a tulajdonosuk számára, csak többé nem lesznek megosztva a beszélgetéssel.", + "Set message expiration" : "Üzenetek elévülésének beállítása", + "Current message expiration" : "Jelenlegi üzenet elévülése", + "Password copied to clipboard" : "A jelszó vágólapra másolva", + "Password could not be copied" : "Nem sikerült a jelszó vágólapra másolása", + "Guest access" : "Vendéghozzáférés", + "Breakout rooms are not allowed in public conversations." : "A szétbontott szobák nyilvános beszélgetésekben nincsenek engedélyezve.", + "Allow guests to join this conversation via link" : "Engedélyezés, hogy a vendégek hivatkozás használatával csatlakozhassanak a beszélgetéshez", + "Password protection" : "Jelszavas védelem", + "This conversation is password-protected. Guests need password to join" : "Ez a beszélgetés jelszóval van védve. A vendégeknek jelszó szükséges a csatlakozáshoz.", + "Password protection is needed for public conversations" : "Jelszavas védelem szükséges a nyilvános beszélgetésekhez", + "Set a password" : "Jelszó beállítása", + "Change password" : "Jelszó módosítása", + "Enter new password" : "Adjon meg egy új jelszót", + "Save password" : "Jelszó mentése", + "Copy password" : "Jelszó másolása", + "Guests are allowed to join this conversation via link" : "A vendégek hivatkozáson keresztül csatlakozhatnak a beszélgetéshez", + "Guests are not allowed to join this conversation" : "A vendégek nem csatlakozhatnak ehhez a beszélgetéshez", + "Resend invitations" : "Meghívók újraköldése", + "This conversation is open to both registered users and users created with the Guests app" : "Ez a beszélgetés nyitott a regisztrált felhasználók és a Guest alkalmazással létrehozott felhasználók számára", + "This conversation is open to registered users" : "A beszélgetés nyitva van a regisztrált felhasználók számára", + "This conversation is limited to the current participants" : "A beszélgetés a jelenlegi résztvevőkre van korlátozva", + "You opened the conversation to both registered users and users created with the Guests app" : "Elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "Error occurred when opening or limiting the conversation" : "Hiba történt a beszélgetés megnyitása vagy korlátozása során", + "Open conversation to registered users, showing it in search results" : "Beszélgetés megnyitása a regisztrált felhasználók számára, megjelenítve a keresési találatok közt", + "Also open to users created with the Guests app" : "Nyitva van a Vendégek alkalmazással létrehozott felhasználók számára is", + "Open conversation" : "Beszélgetés megnyitása", + "Set language spoken in calls" : "Hívásokban beszélt nyelv megadása", + "Languages could not be loaded" : "Nem sikerült a nyelvek betöltése", + "Loading languages …" : "Nyelvek betöltése…", + "Invalid language" : "Érvénytelen nyelv", + "Default language (English)" : "Alapértelmezett nyelv (angol)", + "Default live transcription language set" : "Alapértelmezett élő leiratozási nyelv beállítva", + "Live transcription language set: {languageName}" : "Beállított élő leiratozási nyelv: {languageName}", + "Error when trying to set live transcription language" : "Hiba az élő leiratozási nyelv beállítása során", + "Start time: {date}" : "Kezdési idő: {date}", + "Start time has been updated" : "Kezdési idő módosítva", + "Error occurred while updating start time" : "Hiba történt a kezdési idő frissítése során", + "Enabling the lobby will remove non-moderators from the ongoing call." : "A váró engedélyezése eltávolítja a nem moderátorokat a folyamatban lévő hívásból.", + "Enable lobby, restricting the conversation to moderators" : "Váró engedélyezése, a beszélgetés moderátorokra korlátozása", + "Meeting start time" : "A találkozó kezdési ideje", + "Start time (optional)" : "Kezdési idő (nem kötelező)", + "Import email participants" : "E-mail résztvevőinek importálása", + "You can import a list of email participants from a CSV file." : "Importálhatja az e-mail résztvevőit egy CSV-fájlból.", + "Poll drafts" : "Szavazásvázlatok", + "Browse poll drafts" : "Szavazásvázlatok tallózása", + "Error occurred when locking the conversation" : "Hiba történt a beszélgetés zárolása során", + "Error occurred when unlocking the conversation" : "Hiba történt a beszélgetés feloldása során", + "Lock conversation" : "Beszélgetés zárolása", + "This will also terminate the ongoing call." : "Ezzel a folyamatban lévő hívás is megszakad.", + "Lock the conversation to prevent anyone to post messages or start calls" : "A beszélgetés zárolása, hogy senki se tudjon üzenetet küldeni vagy hívást indítani", + "Edit" : "Szerkesztés", + "More information" : "További információk", + "Delete" : "Törlés", + "Add new bridged channel to current conversation" : "Új összekötött csatorna hozzáadása az aktuális beszélgetéshez", + "unknown state" : "ismeretlen állapot", + "running" : "fut", + "not running, check Matterbridge log" : "nem fut, ellenőrizze a Matterbridge naplóját", + "not running" : "nem fut", + "Bridge saved" : "Híd mentve", + "You can bridge channels from various instant messaging systems with Matterbridge." : "A Matterbridge segítségével összekötheti a különböző azonnali üzenetküldő rendszerek csatornáit.", + "More info on Matterbridge" : "Bővebben a Matterbridge-ről", + "Messaging systems" : "Üzenetküldő rendszerek", + "Enable bridge" : "Híd engedélyezése", + "Show Matterbridge log" : "Matterbridge napló megjelenítése", + "Log content" : "Naplótartalom", + "Only moderators are allowed to mention @all" : "Csak a moderátorok említhetik ezt meg: @all", + "All participants are allowed to mention @all" : "Az összes résztvevő megemlítheti ezt: @all", + "Participants are now allowed to mention @all." : "A résztvevők most már megemlíthetik ezt: @all.", + "Mentioning @all has been limited to moderators." : "Már csak a moderátorok említhetik ezt meg: @all.", + "Allow participants to mention @all" : "Engedélyezés, hogy a résztvevők megemlíthessék ezt: @all", + "Mention permissions" : "Megemlítési engedély", + "Notifications" : "Értesítések", + "Notify about calls in this conversation" : "Értesítés a hívásokról ebben a beszélgetésben", + "Important conversation" : "Fontos beszélgetés", + "\"Do not disturb\" user status is ignored for important conversations" : "A „Ne zavarjanak” felhasználói állapot figyelmen kívül hagyása a fontos beszélgetéseknél", + "Sensitive conversation" : "Érzékeny beszélgetés", + "Message preview will be disabled in conversation list and notifications" : "Az üzenet-előnézet le lesz tiltva a beszélgetési listában és az értesítésekben", + "Recording consent is required for calls in this conversation" : "Felvételi hozzájárulás szükséges a beszélgetés hívásaihoz", + "Recording consent is not required for calls in this conversation" : "Nem szükséges a felvételi hozzájárulás a beszélgetés hívásaihoz", + "Recording consent requirement was updated" : "A felvételi hozzájárulási követelmény frissítve lett", + "Error occurred while updating recording consent" : "Hiba történt a felvételi hozzájárulás frissítése során", + "Recording Consent" : "Felvételi hozzájárulás", + "Recording consent cannot be changed once a call or breakout session has started." : "A felvételi hozzájárulás a hívás indítása vagy a szétbontott szobák létrehozása után nem módosítható.", + "Require recording consent before joining call in this conversation" : "Hozzájárulás megkövetelése a beszélgetés hívásaihoz való csatlakozás előtt", + "Recording consent is required for all calls" : "Hozzájárulás szükséges az összes hívás rögzítéséhez", + "SIP dial-in is now possible without PIN requirement" : "A SIP-es betárcsázáshoz már nem szükséges PIN-kód", + "SIP dial-in is now enabled" : "A SIP-es betárcsázás engedélyezett", + "SIP dial-in is now disabled" : "A SIP-es betárcsázás nem engedélyezett", + "Error occurred when enabling SIP dial-in" : "Hiba történt az SIP-es betárcsázás engedélyezése során", + "Error occurred when disabling SIP dial-in" : "Hiba történt az SIP-es betárcsázás letiltása során", + "Phone and SIP dial-in" : "Telefonos és SIP-es betárcsázás", + "Enable phone and SIP dial-in" : "Telefonos és SIP-es betárcsázás engedélyezése", + "Allow to dial-in without a PIN" : "PIN-kód nélküli betárcsázás engedélyezése", + "Ongoing" : "Folyamatban", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n személy elfogadta","%n személy elfogadta"], + "_%n person declined_::_%n people declined_" : ["%n személy elutasította","%n személy elutasította"], + "_and %n other attachment_::_and %n other attachments_" : ["és %n egyéb melléklet","és %n egyéb melléklet"], + "With {displayName}" : "Vele: {displayName}", + "In {conversation}" : "Ebben: {conversation}", + "View attachment" : "Melléklet megtekintése", + "Join" : "Csatlakozás", + "View conversation" : "Beszélgetés megtekintése", + "View event on Calendar" : "Esemény megtekintése a Naptárban", + "Error while creating the conversation" : "Hiba a beszélgetés létrehozásakor", + "Hello, {displayName}" : "Üdv, {displayName}", + "Start meeting now" : "Találkozó indítása most", + "Give your meeting a title" : "Adjon címet a találkozónak", + "Create and copy link" : "Hivatkozás létrehozása és másolása", + "Create a new conversation" : "Új beszélgetés létrehozása", + "Join open conversations" : "Csatlakozás a nyílt beszélgetésekhez", + "Call a phone number" : "Telefonszám hívása", + "Scroll backward" : "Görgetés visszafelé", + "Scroll forward" : "Görgetés előrefelé", + "Schedule meetings" : "Találkozók ütemezése", + "You don't have any upcoming meetings" : "Nincsenek következő találkozók", + "Open calendar" : "Naptár megnyitása", + "Unread mentions" : "Olvasatlan említések", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Az üzenetek, melyekben megemlítették, itt fognak megjelenni. Másokat úgy említhet meg, hogy beírja a nevüket egy @ karakter után", + "Upcoming reminders" : "Közelgő emlékeztetők", + "Message reminders" : "Üzenetemlékeztetők", + "Set a reminder on a message to be notified" : "Állítson be egy emlékeztetőt egy üzeneten, hogy értesítést kapjon", + "Start a group conversation" : "Csoportos beszélgetés indítása", + "Create conversation" : "Beszélgetés létrehozása", + "Enter your name" : "Adja meg a nevét", + "Submit name and join" : "Adjon meg nevet a csatlakozáshoz", + "Do you already have an account?" : "Már van fiókja?", + "Log in" : "Bejelentkezés", + "Error while verifying uploaded file" : "Hiba a feltöltött fájl ellenőrzése során", + "Uploaded file is verified" : "A feltöltött fájl ellenőrizve", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "A tartalom formátuma vesszővel elválasztott értékeket (CSV) használ:
- A fejlécsor kötelező, és ezek egyikével kell megegyeznie: \"name\",\"email\" vagy csak \"email\"
- Soronként egy bejegyzés (például \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Résztvevők sikeresen hozzáadva", + "Error while adding participants" : "Hiba a résztvevők hozzáadása során", + "Import a file" : "Fájl importálása", + "Browse" : "Tallózás", + "Verifying uploaded file …" : "Feltöltött fájl ellenőrzése…", + "This might take a moment" : "Ez eltarthat egy darabig", + "Send invitations" : "Meghívók elküldése", + "_%n invalid email_::_%n invalid emails_" : ["%n érvénytelen e-mail-cím","%n érvénytelen e-mail-cím"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail-cím már importálva lett, vagy ismétlődés","%n e-mail-cím már importálva lett, vagy ismétlődés"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n meghívó küldhető el","%n meghívó küldhető el"], + "An error occurred while calling a phone number" : "Hiba történt egy telefonszám hívása során", + "Phone number could not be called: {error}" : "A telefonszám nem hívható: {error}", + "Phone number could not be called" : "A telefonszám nem hívható", + "Search participants or phone numbers" : "Résztvevők vagy telefonszámok keresése", + "Creating the conversation …" : "Új beszélgetés létrehozása…", + "Mark as read" : "Megjelölés olvasottként", + "Mark as unread" : "Megjelölés olvasatlanként", + "Remove from favorites" : "Eltávolítás a kedvencekből", + "Add to favorites" : "Hozzáadás a kedvencekhez", + "Unarchive conversation" : "Beszélgetés archiválásának visszavonása", + "Ignore \"Do not disturb\"" : "A „Ne zavarjanak” jelzés figyelmen kívül hagyása", + "You need to promote a new moderator before you can leave the conversation." : "Új moderátort kell kineveznie, mielőtt elhagyhatja a beszélgetést.", + "Conversation actions" : "Beszélgetési műveletek", + "Notify about calls" : "Értesítés a hívásokról", + "Hide message text" : "Üzenetszöveg elrejtése", + "Pending invitations" : "Függőben lévő meghívások", + "Join conversations from other servers" : "Csatlakozás beszélgetésekhez más kiszolgálókról", + "From {user} at {remoteServer}" : "Feladó: {user} itt: {remoteServer}", + "Decline invitation" : "Meghívás elutasítása", + "Accept invitation" : "Meghívás elfogadása", + "No pending invitations" : "Nincs függőben lévő meghívás", + "Home" : "Kezdőlap", + "Unread" : "Olvasatlan", + "Mentions" : "Megemlítések", + "Meetings" : "Találkozók", + "Sort conversations" : "Beszélgetések rendezése", + "By recent activity" : "Legfrissebb tevékenység", + "Alphabetically" : "Betűrendben", + "Do not group by type" : "Ne csoportosítsa típus szerint", + "Show private ones first" : "Privátak megjelenítése elöl", + "Show group ones first" : "Csoportosak megjelenítése elöl", + "No followed threads" : "Nincs követett téma", + "No matches found" : "Nincs találat", + "No conversations found" : "Nem található beszélgetés", + "You have no archived conversations." : "Nincs archivált beszélgetése.", + "Subscribe to an existing thread or start your own." : "Iratkozzon fel egy meglévő szálra, vagy hozza létre a sajátját.", + "You have no unread mentions." : "Nincs olvasatlan megemlítése.", + "You have no unread messages." : "Nincs olvasatlan üzenet.", + "An error occurred while performing the search" : "Hiba történt a keresés végrehajtása során", + "Conversation list" : "Beszélgetések listája", + "Filter conversations by" : "Témák szűrése:", + "Unread messages" : "Olvasatlan üzenetek", + "Meeting conversations" : "Találkozó beszélgetései", + "Clear filters" : "Szűrők törlése", + "New personal note" : "Új személyes jegyzet", + "SIP backend is not installed" : "Nincs telepítve SIP háttérrendszer", + "Back to conversations" : "Vissza a beszélgetésekhez", + "Archived conversations" : "Archivált beszélgetések", + "Threads" : "Szálak", + "Clear filter" : "Szűrő törlése", + "Show more threads" : "További szálak megjelenítése", + "App settings" : "Alkalmazásbeállítások", + "Users" : "Felhasználók", + "Groups" : "Csoportok", + "Teams" : "Csapatok", + "Federated users" : "Föderált felhasználók", + "New private conversation" : "Új privát beszélgetés", + "Other sources" : "Egyéb források", + "Open conversations" : "Beszélgetések megnyitása", + "No search results" : "Nincs találat", + "Users, groups and teams" : "Felhasználók, csoportok és csapatok", + "Users and groups" : "Felhasználók és csoportok", + "Users and teams" : "Felhasználók és csapatok", + "Groups and teams" : "Csoportok és csapatok", + "New group conversation" : "Új csoportos beszélgetés", + "The meeting will start soon" : "Ez a találkozó hamarosan elkezdődik", + "This meeting is scheduled for {startTime}" : "A találkozó ekkorra van ütemezve: {startTime}", + "You are currently waiting in the lobby" : "Ön jelenleg a váróban van", + "Enable noise suppression" : "Hangelnyomás bekapcsolása", + "Reduce background noises for better voice quality" : "Csökkenti a háttérzajokat a jobb hangminőség érdekében", + "Enable echo cancellation" : "Visszhangkioltás bekapcsolása", + "Minimize echo effect from own surrounding" : "Környezetből fakadó visszhanghatás minimalizálása", + "Enable auto gain control" : "Automatikus erősítésvezérlés bekapcsolása", + "Dynamically adjust microphone volume for consistent level" : "Mikrofon hangerejének dinamikus igazítása a konzisztens szint eléréséhez", + "Select microphone" : "Mikrofon kiválasztása", + "No microphone available" : "Nem áll rendelkezésre mikrofon", + "Select speaker" : "Hangszóró kiválasztása", + "No speaker available" : "Nem áll rendelkezésre hangszóró", + "Select camera" : "Válasszon kamerát", + "No camera available" : "Nem áll rendelkezésre kamera", + "Select a device" : "Eszköz kiválasztása", + "Playing …" : "Lejátszás…", + "Test speakers" : "Hangszórók tesztelése", + "Test" : "Teszt", + "Devices" : "Eszközök", + "Backgrounds" : "Hátterek", + "No audio" : "Nincs hang", + "No camera" : "Nincs kamera", + "Display video as you will see it (mirrored)" : "Videó megjelenítése úgy, ahogy látni fogja (tükrözve)", + "Display video as others will see it" : "Videó megjelenítése úgy, ahogy a többi látni fogják", + "Calls are not supported in your browser" : "A böngészője nem támogatja a hívásokat", + "Access to microphone is only possible with HTTPS" : "A mikrofon hozzáférése csak HTTPS-en lehetséges", + "Access to microphone was denied" : "A mikrofon hozzáférése letiltva", + "Error while accessing microphone" : "Hiba történt a mikrofon elérésekor", + "Access to camera is only possible with HTTPS" : "A kamera hozzáférése csak HTTPS-en lehetséges", + "The call is being recorded." : "A hívásról felvétel készül.", + "The call might be recorded." : "A hívásról felvétel készülhet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A felvétel tartalmazhatja a hangját, a kamerája képet és a képernyőmegosztását. A híváshoz való csatlakozás előtt a hozzájárulása szükséges.", + "Give consent to the recording of this call" : "Hozzájárulás, hogy felvétel készüljön a hívásról", + "Show more info" : "További információk megjelenítése", + "Audio is not available" : "Nem érhető el hang", + "Video is not available" : "Nem érhető el videó", + "Start recording immediately with the call" : "Felvétel indítása a hívás kezdetével", + "Recording backend is not installed" : "Nincs telepítve a rögzítési háttérrendszer", + "Notify all participants about this call" : "Összes résztvevő értesítése a hívásról", + "Apply settings" : "Beállítások alkalmazása", + "Select virtual office background" : "Virtuális irodai háttér kiválasztása", + "Select virtual home background" : "Virtuális otthoni háttér kiválasztása", + "Select virtual abstract background" : "Virtuális absztrakt háttér kiválasztása", + "Select virtual beach background" : "Virtuális strandos háttér kiválasztása", + "Select virtual park background" : "Virtuális parkos háttér kiválasztása", + "Select virtual theater background" : "Virtuális színházi háttér kiválasztása", + "Select virtual library background" : "Virtuális könyvtári háttér kiválasztása", + "Select virtual space station background" : "Virtuális űrállomásos háttér kiválasztása", + "Error while uploading the file" : "Hiba a fájl feltöltése során", + "Select a file" : "Válasszon egy fájlt", + "Invalid path selected" : "Érvénytelen útvonal kiválasztva", + "Select virtual background from file {fileName}" : "Virtuális háttér kiválasztása fájlból: {fileName}", + "Blur" : "Elmosás", + "Upload" : "Feltöltés", + "Files" : "Fájlok", + "(editing)" : "(szerkesztés alatt)", + "(edited)" : "(szerkesztve)", + "The message has expired or has been deleted" : "Az üzenet elévült vagy törölték őket", + "Cancel quote" : "Idézés megszakítása", + "24 hours" : "24 óra", + "7 days" : "7 nap", + "30 days" : "30 nap", + "Until unpin" : "Kitűzés megszüntetéséig", + "Clear reminder – {timeLocale}" : "Emlékeztető törlése – {timeLocale}", + "Edited by {actor}" : "Szerkesztette: {actor}", + "Pinned by you" : "Ön tűzte ki", + "Pinned by {actor}" : "{actor} tűzte ki", + "Until {absoluteDate}" : "Eddig: {absoluteDate}", + "Message text copied to clipboard" : "Az üzenet szövege kimásolva a vágólapra", + "Message text could not be copied" : "Az üzenet szövege nem másolható", + "Message forwarded to \"Note to self\"" : "Az üzenet továbbítva a „Saját jegyzetek” közé", + "Error while forwarding message to \"Note to self\"" : "Hiba az üzenet „Saját jegyzetek” közé továbbítása során", + "A reminder was successfully removed" : "Az emlékeztető sikeresen törölve lett", + "Error occurred when removing a reminder" : "Hiba történt az emlékeztető eltávolítása során", + "A reminder was successfully set at {datetime}" : "Az emlékeztető sikeresen be lett állítva: {datetime}", + "Error occurred when creating a reminder" : "Hiba történt az emlékeztető létrehozása során", + "Add a reaction to this message" : "Reakció hozzáadása az üzenethez", + "Reply" : "Válasz", + "More actions" : "További műveletek", + "Set reminder" : "Emlékeztető beállítása", + "Pin message" : "Üzenet kitűzése", + "Unpin message" : "Üzenet kitűzésének megszüntetése", + "Reply privately" : "Válasz privátban", + "Edit message" : "Üzenet szerkesztése", + "Copy message" : "Üzenet másolása", + "Copy message link" : "Üzenethivatkozás másolása", + "Go to file" : "Ugrás a fájlhoz", + "Download file" : "Fájl letöltése", + "Go to thread" : "Ugrás a szálhoz", + "Edit thread details" : "Szál részleteinek szerkesztése", + "Forward message" : "Üzenet továbbítása", + "Translate" : "Lefordítás", + "Set custom reminder" : "Egyéni emlékeztető beállítása", + "Keep pinned for" : "Kitűzve tartás eddig:", + "Set custom period" : "Egyéni időszak beállítása", + "Close reactions menu" : "Reakciók menü bezárása", + "React with {emoji}" : "Reagálás ezzel: {emoji}", + "React with another emoji" : "Reagálás másik emodzsival", + "Choose a conversation to forward the selected message." : "Válasszon egy beszélgetést a kiválasztott üzenet továbbításához.", + "Error while forwarding message" : "Hiba az üzenet továbbítása során", + "The message has been forwarded to {selectedConversationName}" : "Az üzenet továbbításra került ide: {selectedConversationName}", + "Dismiss" : "Mellőzés", + "Go to conversation" : "Ugrás a beszélgetéshez", + "Detect language" : "Nyelv észlelése", + "The message could not be translated" : "Az üzenetet nem sikerült lefordítani", + "Translation copied to clipboard" : "A fordítás a vágólapra másolva", + "Translation could not be copied" : "A fordítást nem lehetett másolni", + "Translate message" : "Üzenet lefordítása", + "Source language to translate from" : "Fordítás forrásnyelve", + "Translate from" : "Fordítás a következőről:", + "Target language to translate into" : "Fordítás célnyelve", + "Translate to" : "Fordítás a következőre:", + "Translating" : "Fordítás", + "Copy translated text" : "Lefordított szöveg másolása", + "Error when scheduling the message" : "Hiba az üzenet ütemezése során", + "Reschedule" : "Újraütemezés", + "Send now" : "Küldés most", + "Choose a time" : "Válasszon egy időt", + "Send at custom time" : "Küldés egyéni időben", + "Will be sent without notification" : "Értesítés nélkül lesz elküldve", + "Message read by everyone who shares their reading status" : "Az üzenetet mindenki olvasta, aki megosztja az olvasási állapotát", + "Message sent" : "Üzenet elküldve", + "Sent without notification" : "Értesítés nélkül elküldve", + "Deleting message" : "Üzenet törlése", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Az üzenet sikeresen törölve, de a bot vagy a Matterbridge be van állítva, és lehet, hogy már el lett küldve más szolgáltatásokhoz", + "Message deleted successfully" : "Az üzenet sikeresen törölve", + "Message could not be deleted because it is too old" : "Az üzenetet nem sikerült törölni, mert túl régi", + "Only normal chat messages can be deleted" : "Csak a normál csevegési üzeneteket lehet törölni", + "An error occurred while deleting the message" : "Hiba történt az üzenet törlése során", + "Pinned" : "Kitűzve", + "Your browser does not support playing audio files" : "Böngészője nem támogatja a hangfájlok lejátszását", + "Contact" : "Kapcsolat", + "{stack} in {board}" : "{stack} itt: {board}", + "Deck Card" : "Kártya", + "Remove {fileName}" : "{fileName} eltávolítása", + "Open this location in OpenStreetMap" : "Hely megnyitása az OpenStreetMapen", + "_%n reply_::_%n replies_" : ["%n válasz","%n válasz"], + "Sending message" : "Üzenet küldése", + "Failed to send the message. Click to try again" : "Nem sikerült elküldeni az üzenetet. Kattintson az újrapróbálkozáshoz", + "Not enough free space to upload file" : "Nincs elég szabad hely a fájl feltöltéséhez", + "You cannot send messages to this conversation at the moment" : "Jelenleg nem küldhet üzeneteket erre a beszélgetésre", + "Could not update the message" : "Nem sikerült az üzenet frissítése", + "Reply to thread \"{threadTitle}\"" : "Válasz a(z) „{threadTitle}” szálban", + "_You voted • %n vote_::_You voted • %n votes_" : ["Szavazott • %n szavazat","Szavazott • %n szavazat"], + "You voted" : "Szavazott", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kattintson a szavazáshoz • %n szavazat","Kattintson a szavazáshoz • %n szavazat"], + "Click to vote" : "Kattintson a szavazáshoz", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Szavazásvázlat • %n lehetőség","Szavazásvázlat • %n lehetőség"], + "_%n vote_::_%n votes_" : ["%n szavazat","%n szavazat"], + "Edit poll draft" : "Szavazásvázlat szerkesztése", + "Delete poll draft" : "Szavazásvázlat törlése", + "Open poll" : "Nyitott szavazás", + "Closed poll" : "Zárt szavazás", + "See results" : "Találatok megtekintése", + "Reactions" : "Reakciók", + "No permission to post reactions in this conversation" : "Nincs jogosultsága reakciókat használni ebben a beszélgetésben", + "and {participant}" : "és {participant}", + "_and %n other participant_::_and %n other participants_" : ["és %n másik résztvevő","és %n másik résztvevő"], + "Show all reactions" : "Összes reakció megjelenítése", + "Add more reactions" : "További reakciók hozzáadása", + "Show or collapse system messages" : "Rendszerüzenetek megjelenítése vagy elrejtése", + "No messages" : "Nincs üzenet", + "All messages have expired or have been deleted." : "Az összes üzenet elévült vagy törölték őket.", + "Generate summary with AI" : "Összefoglaló előállítása MI-vel", + "{author} (pinned by you)" : "{author} (Ön tűzte ki)", + "{author} (pinned by {actor})" : "{author} ({actor} tűzte ki)", + "Unpin" : "Rögzítés feloldása", + "Cancel search" : "Keresés megszakítása", + "Add a phone number" : "Telefonszám hozzáadása", + "Error: A password is required to create the conversation." : "Hiba: Jelszó szükséges a beszélgetés létrehozásához.", + "All set, the conversation \"{conversationName}\" was created." : "Minden kész, a(z) „{conversationName}” beszélgetés létrejött.", + "Create a new group conversation" : "Új csoportbeszélgetés létrehozása", + "Add participants" : "Résztvevők hozzáadása", + "Maximum length exceeded ({maxlength} characters)" : "Legnagyobb hossz túllépve ({maxlength} karakter)", + "Conversation visibility" : "Beszélgetés láthatósága", + "Allow guests to join via link" : "A vendégek hivatkozással történő csatlakozásának engedélyezése", + "Enter password" : "Adja meg a jelszót", + "This conversation has been locked" : "A beszélgetés zárolva van", + "No permission to post messages in this conversation" : "Nincs jogosultsága megjegyzést fűzni a beszélgetéshez", + "Joining conversation …" : "Csatlakozás a beszélgetéshez…", + "Write a message without notification" : "Üzenet írása értesítés nélkül", + "Create a thread silently" : "Szál létrehozása némán", + "Create a thread" : "Szál létrehozása", + "Send message silently" : "Üzenet küldése némán", + "Send message" : "Üzenet küldése", + "Send without notification" : "Küldés értesítés nélkül", + "The participant will not be notified about new messages" : "A résztvevő nem lesz értesítve az új üzenetekről", + "Participants will not be notified about new messages" : "A résztvevők nem lesznek értesítve az új üzenetekről", + "Message will be sent {datetimeString}" : "Az üzenet ekkor lesz elküldve: {datetimeString}", + "Thread title is required" : "A szál címe kötelező", + "Message text is required" : "Az üzenet szövege kötelező", + "The message could not be edited" : "Az üzenet nem szerkeszthető", + "File to share" : "Fájl megosztása", + "File upload is not available in this conversation" : "A fájlfeltöltés elérhető ebben a beszélgetésben", + "Message was successfully scheduled" : "Az üzenet sikeresen be lett ütemezve", + "Add emoji" : "Emodzsi hozzáadása", + "Adding a mention will only notify users who did not read the message." : "A megemlítés csak azokat a felhasználókat fogja értesíteni, akik nem olvasták az üzenetet.", + "Thread title" : "Szál címe", + "Send later" : "Küldés később", + "Show scheduled messages" : "Ütemezett üzenetek megjelenítése", + "Cancel editing" : "Szerkesztés megszakítása", + "Schedule message" : "Üzenet ütemezése", + "{user} is out of office and might not respond." : "{user} házon kívül van, és lehet, hogy nem fog válaszolni.", + "Absence period: {startDate} - {endDate}" : "Házon kívüli időszak: {startDate} – {endDate}", + "Replacement:" : "Helyettes:", + "Share from {nextcloud}" : "Megosztás innen: {nextcloud}", + "Share from Files" : "Megosztás a Fájlokból", + "Share files to the conversation" : "Fájlok megosztása a beszélgetéssel", + "Upload from device" : "Feltöltés az eszközről", + "Create new poll" : "Új szavazás létrehozása", + "Smart picker" : "Okos választó", + "Record voice message" : "Hangüzenet rögzítése", + "End recording and send" : "Felvétel befejezése és küldés", + "Dismiss recording" : "Felvétel elvetése", + "Access to the microphone was denied" : "A mikrofon hozzáférése letiltva", + "Microphone either not available or disabled in settings" : "A mikrofon nem érhető el, vagy le lett tiltva a beállításokban", + "Error while recording audio" : "Hiba a hang felvétele során", + "Voice message {time} ({conversation})" : "Hangüzenet {time} ({conversation})", + "Generating summary of unread messages …" : "Összefoglaló előállítása az olvasatlan üzenetekről…", + "Summary is AI generated and might contain mistakes" : "Az összefoglalót MI állítja elő, és hibákat tartalmazhat", + "Error occurred during a summary generation" : "Hiba az összefoglaló előállítása során", + "New file" : "Új fájl", + "Blank" : "Üres", + "Error while creating file" : "Hiba a fájl létrehozása során", + "Create and share a new file" : "Új fájl létrehozása és megosztása", + "Name of the new file" : "Az új fájl neve", + "Create file" : "Fájl létrehozása", + "Someone is typing …" : "Valaki gépel…", + "{user1} is typing …" : "{user1} gépel…", + "{user1} and {user2} are typing …" : "{user1} és {user2} gépelnek…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} és {user3} gépelnek…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} és még %n felhasználó gépel…","{user1}, {user2}, {user3} és még %n felhasználó gépel…"], + "Add more files" : "Több fájl hozzáadása", + "Send" : "Küldés", + "In this conversation {user} can:" : "Ebben a beszélgetésben {user} a következőket teheti:", + "Edit default permissions for participants in {conversationName}" : "A(z) {conversationName} résztvevőinek alapértelmezett jogosultságának szerkesztése", + "Start a call" : "Hívás indítása", + "Skip the lobby" : "Váró kihagyása", + "Can post messages" : "Közzéteget üzeneteket", + "Can post messages and reactions" : "Közzétehet bejegyzéseket és használhat reakciókat", + "Can add reactions" : "Adhat hozzá reakciókat", + "Enable the microphone" : "Mikrofon engedélyezése", + "Enable the camera" : "Kamera engedélyezése", + "Share the screen" : "Képernyő megosztása", + "Update permissions" : "Jogosultságok frissítése", + "Updating permissions" : "Jogosultságok frissítése", + "No poll drafts" : "Nincs szavazásvázlat", + "There is no poll drafts yet saved for this conversation" : "Még nincs mentett szavazásvázlat ehhez a beszélgetésben", + "Create poll in {name}" : "Szavazás létrehozása itt: {name}", + "Create poll" : "Szavazás létrehozása", + "Error while importing poll" : "Hiba a szavazás importálása során", + "Question" : "Kérdés", + "Ask a question" : "Kérdés feltevése", + "Import draft from file" : "Vázlat importálása fájlból", + "Answers" : "Válaszok", + "Answer {option}" : "{option}. válasz", + "Delete poll option" : "Szavazási lehetőség törlése", + "Add answer" : "Válasz hozzáadása", + "Settings" : "Beállítások", + "Anonymous poll" : "Névtelen szavazás", + "Multiple answers" : "Több válasz", + "Save as draft" : "Mentés vázlatként", + "Export draft to file" : "Vázlat exportálása fájlba", + "_Final results • %n vote_::_Final results • %n votes_" : ["Végső eredmények • %n szavazat","Végső eredmények • %n szavazat"], + "Your vote is anonymous" : "A szavazata anonim", + "You voted for this option" : "Erre a lehetőségre szavazott", + "End poll" : "Szavazás befejezése", + "Change your vote" : "Szavazat módosítása", + "Withdraw vote" : "Szavazat visszavonása", + "Results" : "Eredmények", + "Voted participants" : "Résztvevők, akik szavaztak", + "Send a message to \"{roomName}\"" : "Üzenet küldése ide: „{roomName}”", + "Hide list of participants" : "Résztvevők elrejtése", + "Show list of participants" : "Résztvevők megjelenítése", + "Assistance requested in {roomName}" : "Segítség kérve itt: {roomName}", + "The message was sent to \"{roomName}\"" : "Az üzenet el lett küldve ide: „{roomName}”", + "Dismiss request for assistance" : "A segítségkérés elvetése", + "Send message to room" : "Üzenet küldése a szobának", + "Back to main room" : "Vissza a fő szobába", + "Back to your room" : "Vissza a saját szobába", + "Message all rooms" : "Üzenet az összes szobának", + "Start session" : "Munkamenet indítása", + "Start a call before you start a breakout room session" : "Indítson el egy hívást mielőtt szétbontott szobákat készít", + "Stop session" : "Munkamenet leállítása", + "The message was sent to all breakout rooms" : "Az üzenet el lett küldve az összes szétbontott szobának", + "Send a message to all breakout rooms" : "Üzenet küldése az összes szétbontott szobának", + "Breakout rooms are not started" : "A szétbontott szobák nem lettek elindítva", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "A Nagy teljesítményű háttérrendszer nélküli hívások kapcsolódási problémákat és magas terhelést okozhatnak az eszközökön. {linkstart}További információ{linkend}", + "Talk setup incomplete" : "A Beszélgetés beállítása nem teljes", + "Disable lobby" : "A váró letiltása", + "Settings for participant \"{user}\"" : "„{user}” résztvevő beállításai", + "Participant \"{user}\"" : "„{user}” résztvevő", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "vendég", + "Ringing …" : "Csengetés…", + "Call rejected" : "Hívás elutasítva", + "{time} talking …" : "{time}, hívásban…", + "{time} talking time" : "{time} beszélgetési idő", + "Raised their hand" : "Felemelte a kezét", + "Joined with video" : "Videóval csatlakozott", + "Joined via phone" : "Telefonon csatlakozott", + "Joined with audio" : "Hanggal csatlakozott", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "A szöveg legfeljebb {maxLength} karakteres lehet. Jelenlegi szövege {charactersCount} karakter hosszú.", + "Remove group and members" : "Csoport és tagjainak eltávolítása", + "Remove team and members" : "Csapat és tagjainak eltávolítása", + "Remove participant" : "Résztvevő eltávolítása", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Biztos, hogy eltávolítja a(z) „{displayName}” csoportot és a tagjait ebből a beszélgetésből?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Biztos, hogy eltávolítja a(z) „{displayName}” csapatot és a tagjait ebből a beszélgetésből?", + "Do you really want to remove {displayName} from this conversation?" : "Biztos, hogy eltávolítja a következőt ebből a beszélgetésből: „{displayName}”?", + "Notification was sent to {displayName}" : "Az értesítés elküldve {displayName} számára", + "Could not send notification to {displayName}" : "Nem sikerült elküldeni az értesítést {displayName} számára", + "Permissions granted to {displayName}" : "Jogosultságok megadva {displayName} számára", + "Could not modify permissions for {displayName}" : "{displayName} jogosultságai nem módosíthatók", + "Permissions removed for {displayName}" : "{displayName} jogosultságai eltávolítva", + "Permissions set to default for {displayName}" : "{displayName} jogosultságai alapértékekre állítva", + "Phone number could not be hung up" : "A telefonszám nem tehető le", + "Phone number could not be put on hold" : "A telefonszám nem tehető tartásba", + "Phone number could not be muted" : "A telefonszám nem némítható", + "Phone number could not be unmuted" : "A telefonszám némítása nem vonható vissza", + "DTMF message could not be sent" : "A DTMF-üzenet nem küldhető el", + "Phone number copied to clipboard" : "A telefonszám nem másolható a vágólapra", + "Phone number could not be copied" : "A telefonszám nem másolható", + "in the lobby" : "a váróban", + "Dial out phone" : "Telefon tárcsázása", + "Hang up phone" : "Telefon letevése", + "Move back to lobby" : "Áthelyezés a váróba", + "Move to conversation" : "Áthelyezés a beszélgetésbe", + "Dial-in PIN" : "Telefonos PIN", + "Demote from moderator" : "Lefokozás moderátorról", + "Promote to moderator" : "Kinevezés moderátorrá", + "Resend invitation" : "Meghívó újraküldése", + "Send call notification" : "Hívásértesítés küldése", + "Dial out phone number" : "Telefonszám tárcsázása", + "Resume call for phone number" : "Telefonszám hívásának folytatása", + "Put phone number on hold" : "Telefonszám tartásba tevése", + "Unmute phone number" : "Telefonszám némításának visszavonása", + "Mute phone number" : "Telefonszám némítása", + "Copy phone number" : "Telefonszám másolása", + "Reset custom permissions" : "Egyéni engedélyek visszaállítása", + "Grant all permissions" : "Összes jogosultság megadása", + "Remove all permissions" : "Összes jogosultság eltávolítása", + "Also ban from this conversation" : "Egyúttal kitiltás ebből a beszélgetésből", + "Internal note (reason to ban)" : "Belső jegyzet (kitiltás oka)", + "Remove" : "Eltávolítás", + "Permissions modified for {displayName}" : "{displayName} jogosultságai módosítva", + "Add users, groups or teams" : "Felhasználók, csoportok vagy csapatok hozzáadása", + "Add users or groups" : "Felhasználók vagy csoportok hozzáadása", + "Add users or teams" : "Felhasználók vagy csapatok hozzáadása", + "Add users" : "Felhasználók hozzáadása", + "Add groups or teams" : "Csoportok vagy csapatok hozzáadása", + "Add groups" : "Csoportok hozzáadása", + "Add teams" : "Csapatok hozzáadása", + "Add other sources" : "További források hozzáadása", + "Add emails" : "E-mailek hozzáadása", + "Integrations" : "Integrációk", + "Add federated users" : "Föderált felhasználók hozzáadása", + "Searching …" : "Keresés…", + "Search for more users" : "További felhasználók keresése", + "You can search or add participants via name, email, or Federated Cloud ID" : "Kereshet és hozzáadhat résztvevőket név, e-mail-cím vagy föderált felhőazonosító alapján", + "Search or add participants" : "Résztvevők keresése vagy hozzáadása", + "Invitation was sent to {actorId}" : "Meghívó elküldve a következőnek: {actorId}", + "An error occurred while adding the participants" : "Hiba történt a résztvevők hozzáadása során", + "A new group conversation with selected participant will be created" : "Egy új csoportos beszélgetés lesz létrehozva a kiválasztott résztvevővel", + "Participants" : "Résztvevők", + "Pinned by a deleted user" : "Törölt felhasználó tűzte ki", + "Participants ({count})" : "Résztvevők ({count})", + "Open chat" : "Csevegés megnyitása", + "You have new unread messages in the chat." : "Olvasatlan üzenetek vannak a csevegésben.", + "You have been mentioned in the chat." : "Megemlítették a csevegésben.", + "Search messages" : "Üzenetek keresése", + "Chat" : "Csevegés", + "Details" : "Részletek", + "Shared items" : "Megosztott elemek", + "Search in {name}" : "Keresés itt: {name}", + "Threads in {name}" : "Szálak itt: {name}", + "{actor} in {conversation}" : "{actor} itt: {conversation}", + "Search messages …" : "Üzenetek keresése…", + "Search options" : "Keresési lehetőségek", + "From User" : "Feladó", + "Since" : "Ettől", + "Until" : "Eddig", + "No results found" : "Nincs találat", + "Load more results" : "További találatok betöltése", + "Recent threads" : "Legutóbbi szálak", + "Projects" : "Projektek", + "No shared items" : "Nincsenek megosztott elemek", + "Thread notifications" : "Szálértesítések", + "Thread actions" : "Szálműveletek", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Hivatkozás egy beszélgetéshez", + "No open conversations found" : "Nem található nyitott beszélgetés", + "Either there are no open conversations or you joined all of them." : "Nincs nyitott beszélgetés, vagy már az összeshez csatlakozott.", + "Check spelling or use complete words." : "Ellenőrizze a helyesírást, vagy használjon teljes szavakat.", + "Search conversations or users" : "Beszélgetések vagy felhasználók keresése", + "Select conversation" : "Válasszon beszélgetést", + "Number length is not valid" : "A szám hossza nem érvényes", + "Region code is not valid" : "A régiókód nem érvényes", + "Number length is too short" : "A szám hossza túl rövid", + "Number length is too long" : "A szám hossza túl hosszú", + "Number is not valid" : "A szám nem érvényes", + "Phone numbers" : "Telefonszámok", + "Display name: {name}" : "Megjelenítendő név: {name}", + "Edit display name" : "Megjelenítendő név szerkesztése", + "Display name (required)" : "Megjelenítendő név (kötelező)", + "Save name" : "Név mentése", + "I picked message bubbles" : "Üzenetbuborékokat választottam", + "I picked the list style" : "Listastílust választottam", + "Error while setting personal setting" : "Hiba a személyes beállítása mentése során", + "Error while saving sounds setting" : "Hiba a hangbeállítások mentése során", + "Compact conversations list" : "Kompakt beszélgetéslista", + "Chat appearance" : "Csevegés megjelenése", + "Messages list" : "Üzenetlista", + "Message bubbles" : "Üzenetbuborékok", + "Play sounds when participants join or leave a call" : "Hangjelzések lejátszása, amikor a résztvevők csatlakoznak, vagy elhagyják a hívást", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "A gyártó műszaki korlátozásai miatt jelenleg nem érhető el iPhone és iPad eszközökön", + "Notification settings" : "Értesítési beállítások", + "Sounds for chat and call notifications" : "Hangok a csevegési és hívásértesítésekhez", + "Invalid language ({languageId})" : "Érvénytelen nyelv ({languageId})", + "Default language" : "Alapértelmezett nyelv", + "Default language ({languageName})" : "Alapértelmezett nyelv ({languageName})", + "Error when trying to load the available live translation languages" : "Hiba történt az elérhető élő fordítási nyelvek betöltése során", + "Error when trying to set live translation language" : "Hiba történt az élő fordítás nyelvének beállítása során", + "Set language used to show the transcriptions" : "A leiratozás megjelenítéséhez használt nyelv beállítása", + "Select location for attachments" : "Válassza ki a mellékletek helyét", + "Error while setting attachment folder" : "Hiba a mellékletek mappa beállításakor", + "Error while setting read status privacy" : "Hiba történt az olvasási állapot adatvédelmi beállításakor", + "Error while setting typing status privacy" : "Hiba történt a gépelési állapot adatvédelmi beállításakor", + "Error while setting default media state" : "Hiba az alapértelmezett médiaállapot beállítása során", + "Turn camera and microphone off by default" : "Kamera és mikrofon alapértelmezett kikapcsolása", + "Blur camera background by default" : "Kamera hátterének alapértelmezett elmosása", + "Skip device preview before joining a call" : "Eszköz-előnézet kihagyása híváshoz való csatlakozás előtt", + "Appearance & Sounds" : "Megjelenés és hangok", + "Privacy" : "Adatvédelem", + "Send read receipts" : "Olvasási visszajelzés küldése", + "When off, all read statuses will be hidden" : "Ha ki van kapcsolva, az összes olvasási állapot rejtve lesz", + "Share typing status" : "Gépelési állapot megosztása", + "When off, all typing indicators will be hidden" : "Ha ki van kapcsolva, az összes gépelési visszajelzés rejtve lesz", + "Attachments folder" : "Mellékletek mappa", + "Toggle full screen" : "Teljes képernyő be/ki", + "Return to Home screen" : "Visszatérés a kezdőképernyőre", + "Search" : "Keresés", + "Shortcuts while in a chat" : "Billentyűparancsok csevegés közben", + "Focus the chat input" : "Fókusz a csevegés beviteli mezőjére", + "Unfocus the chat input to use shortcuts" : "A billentyűparancsok használatához hagyja el a csevegés beviteli mezőjét", + "Edit your last message" : "Utolsó saját üzenet szerkesztése", + "Shortcuts while in a call" : "Billentyűparancsok hívás közben", + "Camera on and off" : "Kamera be- és kikapcsolása", + "Microphone on and off" : "Mikrofon be- és kikapcsolása", + "Raise or lower hand" : "Kéz felemelése vagy leengedése", + "Push to talk or push to mute" : "Lenyomásra történő beszéd vagy némítás", + "Zoom-in / zoom-out a screen share" : "Nagyítás/kicsinyítés képernyőmegosztáskor", + "Mouse wheel" : "Egérgörgő", + "Start call silently" : "Hívás indítása némán", + "Start call" : "Hívás indítása", + "End call" : "Hívás befejezése", + "The server was updated, you cannot start or join a call." : "A kiszolgáló frissítve lett, nem indíthat vagy csatlakozhat híváshoz.", + "This call has just ended" : "Ez a hívás véget ért", + "You will be able to join the call only after a moderator starts it." : "Csak akkor csatlakozhat a híváshoz, ha azt egy moderátor elindítja.", + "End call for everyone" : "Hívás befejezése mindenki számára", + "Starting the recording" : "A felvétel indítása", + "Recording" : "Felvétel", + "The call has been running for one hour." : "A hívás egy órája tart.", + "Cancel recording start" : "Felvétel indításának megszakítása", + "Stop recording" : "Felvétel leállítása", + "Send a reaction" : "Reakció küldése", + "React with {reaction}" : "Reagálás ezzel: {reaction}", + "All tasks done!" : "Az összes feladat kész!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n feladat","{done}/%n feladat"], + "Add participants to this call" : "Résztvevők hozzáadása a híváshoz", + "_%n participant in call_::_%n participants in call_" : ["%n résztvevő a hívásban","%n résztvevő a hívásban"], + "Scheduled messages" : "Ütemezett üzenetek", + "You are not allowed to enable screensharing" : "Nem engedélyezheti a képernyőmegosztást", + "No screensharing" : "Nincs képernyőmegosztás", + "Screensharing options" : "Képernyőmegosztás beállításai", + "Enable screensharing" : "Képernyőmegosztás engedélyezése", + "Bad sent video and screen quality." : "Rossz a küldött videó és képernyő minősége.", + "Bad sent screen quality." : "Rossz a küldött képernyő minősége.", + "Bad sent video quality." : "Rossz a küldött videó minősége.", + "Bad sent audio, video and screen quality." : "Rossz a küldött hang, videó és képernyő minősége.", + "Bad sent audio and screen quality." : "Rossz a küldött hang és képernyő minősége.", + "Bad sent audio and video quality." : "Rossz a küldött hang és videó minősége.", + "Bad sent audio quality." : "Rossz a küldött hang minősége.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják az Ön képernyőjét. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót képernyőmegosztás közben.", + "Disable background blur" : "Háttér elmosásának kikapcsolása", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják az Ön képernyőjét. A helyzet javítása érdekében próbálja meg letiltani a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják a képernyőt.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják Önt.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni Önt és nem láthatják a képernyőt. A helyzet javítása érdekében próbálja meg letiltani a képernyőmegosztást.", + "Disable screenshare" : "Képernyőmegosztás letiltása", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni. A helyzet javítása érdekében próbálja meg letiltani a videót.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni Önt.", + "Screen sharing is not supported by your browser." : "A böngészője nem támogatja a képernyőmegosztást.", + "Screen sharing requires the page to be loaded through HTTPS." : "A képernyőmegosztáshoz az oldalt HTTPS-en keresztül kell betölteni.", + "Screensharing requires the page to be loaded through HTTPS." : "A képernyőmegosztáshoz az oldalt HTTPS-en keresztül kell betölteni.", + "An error occurred while starting screensharing." : "Hiba történt a képernyő megosztásakor.", + "Select virtual background" : "Válasszon virtuális hátteret", + "Show your screen" : "Saját képernyő megosztása", + "Stop screensharing" : "Képernyőmegosztás befejezése", + "Mute others" : "Mások elnémítása", + "Start recording" : "Felvétel indítása", + "Set up breakout rooms" : "Szétbontott szobák beállítása", + "Download attendance list" : "Résztvevők listájának letöltése", + "Open Calendar" : "Naptár megnyitása", + "Remove participant {name}" : "Résztvevő eltávolítása: {name}", + "Would you like to delete this conversation?" : "Törli ezt a beszélgetést?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ez a beszélgetés %n nap tétlenség után mindenki számára törölve lesz.","Ez a beszélgetés %n nap tétlenség után mindenki számára törölve lesz."], + "Are you sure you want to delete this conversation?" : "Biztos, hogy törli ezt a beszélgetést?", + "Delete now" : "Törlés most", + "Keep" : "Megtartás", + "Open dialpad" : "Tárcsázó megnyitása", + "Select a region" : "Válasszon régiót", + "Local time: {time}" : "Helyi idő: {time}", + "Scheduled {datetime}" : "Ütemezve: {datetime}", + "Scheduled for {datetime}" : "Ütemezve: {datetime}", + "Search …" : "Keresés…", + "Message without mention" : "Üzenet megemlítés nélkül", + "Mention myself" : "Saját magam megemlítése", + "Mention everyone" : "Mindenki megemlítése", + "Select a conversation" : "Beszélgetés kiválasztása", + "Select a mode" : "Mód kiválasztása", + "You do not have permissions to access this conversation." : "Nincs jogosultsága, hogy elérje ezt a beszélgetést.", + "Join a different conversation or start a new one." : "Csatlakozás egy másik beszélgetéshez, vagy új indítása.", + "The conversation does not exist" : "A beszélgetés nem létezik", + "Join a conversation or start a new one!" : "Csatlakozzon egy beszélgetéshez, vagy indítson egy újat!", + "Duplicate session" : "Ismétlődő munkamenet", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ez a beszélgetés egy másik lapon meg lett nyitva. A kiszolgáló jelenlegi verziója nem támogatja a beszélgetések több lapon való megjelenítését.", + "Creating and joining a conversation with \"{userid}\"" : "Beszélgetés létrehozása „{userid}” felhasználóval, és csatlakozás", + "Join a conversation or start a new one" : "Csatlakozzon egy beszélgetéshez vagy indítson egy újat", + "Error while joining the conversation" : "Hiba a beszélgetéshez való csatlakozás során", + "Another user" : "Másik felhasználó", + "Hey! Are you using the list style or message bubbles?" : "Hé! Listastílust vagy üzenetbuborékokat használsz?", + "Nextcloud URL" : "Nextcloud webcíme", + "Nextcloud user" : "Nextcloud-felhasználó", + "User password" : "Felhasználói jelszó", + "Talk conversation" : "Beszélgetés", + "Skip TLS verification" : "A TLS-ellenőrzés kihagyása", + "Matrix server URL" : "Matrix-kiszolgáló webcíme", + "User" : "Felhasználó", + "Matrix channel" : "Matrix-csatorna", + "Mattermost server URL" : "Mattermost-kiszolgáló webcíme", + "Mattermost user" : "Mattermost felhasználó", + "Team name" : "Csapat neve", + "Channel name" : "Csatorna neve", + "Rocket.Chat server URL" : "Rocket.Chat kiszolgáló webcíme", + "User name or email address" : "Felhasználónév vagy e-mail-cím", + "Rocket.Chat channel" : "Rocket.Chat csatorna", + "Zulip server URL" : "Zulip kiszolgáló webcíme", + "Bot user name" : "Bot felhasználónév", + "Bot API key" : "Bot API kulcs", + "Zulip channel" : "Zulip csatorna", + "API token" : "API token", + "Slack channel" : "Slack csatorna", + "Server ID or name" : "Kiszolgálóazonosító vagy név", + "Channel ID (prefixed with \"ID:\") or name" : "Csatornaazonosító („ID:” előtaggal) vagy név", + "Channel" : "Csatorna", + "Login" : "Bejelentkezés", + "Chat ID" : "Csevegésazonosító", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC-kiszolgáló webcíme (pl. chat.freenode.net:6667)", + "Nickname" : "Becenév", + "Connection password" : "Csatlakozási jelszó", + "IRC channel" : "IRC csatorna", + "Channel password" : "Csatorna jelszó", + "NickServ nickname" : "NickServ becenév", + "NickServ password" : "NickServ jelszó", + "Use TLS" : "TSL használata", + "Use SASL" : "SASL használata", + "Tenant ID" : "Ügyfél-azonosító", + "Client ID" : "Kliensazonosító", + "Team ID" : "Csapatazonosító", + "Thread ID" : "Szálazonosító", + "XMPP/Jabber server URL" : "XMPP/Jabber-kiszolgáló webcíme", + "MUC server URL" : "MUC kiszolgáló webcíme", + "Jabber ID" : "Jabber azonosító", + "Pinned messages" : "Kitűzött üzenetek", + "Media" : "Média", + "Polls" : "Szavazások", + "Deck cards" : "Kártyák", + "Voice messages" : "Hangüzenetek", + "Locations" : "Helyek", + "Call recordings" : "Hívásfelvételek", + "Audio" : "Hangok", + "Show all pinned messages" : "Összes kitűzött üzenet megjelenítése", + "Show all media" : "Összes média megjelenítése", + "Show all files" : "Összes fájl megjelenítése", + "Show all polls" : "Összes szavazás megjelenítése", + "Show all deck cards" : "Összes kártya megjelenítése", + "Show all voice messages" : "Összes hangüzenet megjelenítése", + "Show all locations" : "Összes hely megjelenítése", + "Show all call recordings" : "Az összes hívásfelvétel megjelenítése", + "Show all audio" : "Összes hang megjelenítése", + "Show all other" : "Összes egyéb megtekintése", + "Follow conversation settings" : "Beszélgetésbeállítások követése", + "Group" : "Csoport", + "Team" : "Csapat", + "You reconnected to the call" : "Újracsatlakozott a híváshoz", + "{actor} reconnected to the call" : "{actor} újracsatlakozott a híváshoz", + "You added {user0} and {user1}" : "Hozzáadta {user0} és {user1} felhasználókat", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","Hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator added you and {user0}" : "Egy rendszergazda hozzáadta Önt és {user0} felhasználót", + "{actor} added you and {user0}" : "{actor} hozzáadta Önt és {user0} felhasználót", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Egy rendszergazda hozzáadta Önt, {user0} felhasználót és még %n résztvevőt","Egy rendszergazda hozzáadta Önt, {user0} felhasználót és még %n résztvevőt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hozzáadta Önt, {user0} felhasználót és még %n résztvevőt","{actor} hozzáadta Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator added {user0} and {user1}" : "Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat", + "{actor} added {user0} and {user1}" : "{actor} hozzáadta {user0} és {user1} felhasználót", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","{actor} hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "You removed {user0} and {user1}" : "Eltávolította {user0} és {user1} felhasználókat", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","Eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator removed you and {user0}" : "Egy rendszergazda eltávolította Önt és {user0} felhasználót", + "{actor} removed you and {user0}" : "{actor} eltávolította Önt és {user0} felhasználót", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Egy rendszergazda eltávolította Önt, {user0} felhasználót és még %n résztvevőt","Egy rendszergazda eltávolította Önt, {user0} felhasználót és még %n résztvevőt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} eltávolította Önt, {user0} felhasználót és még %n résztvevőt","{actor} eltávolította Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator removed {user0} and {user1}" : "Egy rendszergazda eltávolította {user0} és {user1} felhasználót", + "{actor} removed {user0} and {user1}" : "{actor} eltávolította {user0} és {user1} felhasználót", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Egy rendszergazda eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","Egy rendszergazda eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","{actor} eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "You and {user0} joined the call" : "Ön és {user0} csatlakozott a híváshoz", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ön, {user0} és még %n résztvevő csatlakozott a híváshoz","Ön, {user0} és még %n résztvevő csatlakozott a híváshoz"], + "{user0} and {user1} joined the call" : "{user0} és {user1} csatlakozott a híváshoz", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} és még %n résztvevő csatlakozott a híváshoz","{user0}, {user1} és még %n résztvevő csatlakozott a híváshoz"], + "You and {user0} left the call" : "Ön és {user0} kilépett a hívásból", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ön, {user0} és még %n résztvevő kilépett a hívásból","Ön, {user0} és még %n résztvevő kilépett a hívásból"], + "{user0} and {user1} left the call" : "{user0} és {user1} kilépett a hívásból", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} és még %n résztvevő kilépett a hívásból","{user0}, {user1} és még %n résztvevő kilépett a hívásból"], + "You promoted {user0} and {user1} to moderators" : "Moderátorrá léptette elő {user0} és {user1} felhasználókat", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Moderátorrá léptette elő {user0} és {user1} felhasználókat, és még %n résztvevőt","Moderátorrá léptette elő {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator promoted you and {user0} to moderators" : "Egy rendszergazda moderátorrá léptette elő Önt és {user0} felhasználót", + "{actor} promoted you and {user0} to moderators" : "{actor} moderátorrá léptette elő Önt és {user0} felhasználót", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Egy rendszergazda moderátorrá léptette elő Önt, {user0} felhasználót és még %n további résztvevőt","Egy rendszergazda moderátorrá léptette elő Önt, {user0} felhasználót és még %n további résztvevőt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} moderátorra léptette elő Önt, {user0} felhasználót és még %n résztvevőt","{actor} moderátorra léptette elő Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator promoted {user0} and {user1} to moderators" : "Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt","Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt","{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt"], + "You demoted {user0} and {user1} from moderators" : "Lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Lefokozta {user0} és {user1} felhasználókat, valamint még %n résztvevőt a moderátorok közül","Lefokozta {user0} és {user1} felhasználókat, valamint még %n résztvevőt a moderátorok közül"], + "An administrator demoted you and {user0} from moderators" : "Egy rendszergazda lefokozta Önt és {user0} felhasználót a moderátorok közül", + "{actor} demoted you and {user0} from moderators" : "{actor} lefokozta Önt és {user0} felhasználót a moderátorok közül", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Egy rendszergazda lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül","Egy rendszergazda lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül","{actor} lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "An administrator demoted {user0} and {user1} from moderators" : "Egy rendszegazda lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Egy rendszergazda lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül","Egy rendszergazda lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül","{actor} lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "You:" : "Ön:", + "You: {lastMessage}" : "Ön: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "A kiszolgáló frissítve lett.", + "(edited by you)" : "(Ön szerkesztette)", + "(edited by a deleted user)" : "(törölt felhasználó szerkesztette)", + "(edited by {moderator})" : "({moderator} szerkesztette)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Csatlakozni próbál egy beszélgetéshez, miközben aktív munkamenetet folytat egy másik ablakban vagy eszközön. Ezt a Nextcloud Beszélgetés jelenleg nem támogatja. Mit szeretne tenni?", + "Leave this page" : "Oldal elhagyása", + "Join here" : "Csatlakozás", + "Deck card has been posted to {conversation}" : "Kártya lett közzétéve a következőben: {conversation}", + "An error occurred while posting deck card to conversation" : "Hiba történt a kártya beszélgetésbe küldése során", + "Post to a conversation" : "Elküldés egy beszélgetésbe", + "Post to conversation" : "Elküldés egy beszélgetésbe", + "The recording failed. Please contact your administrator." : "A felvétel sikertelen. Lépjen kapcsolatba a rendszergazdával.", + "Location has been posted to {conversation}" : "Hely lett közzétéve a következőben: {conversation}", + "An error occurred while posting location to conversation" : "Hiba történt a hely beszélgetésbe küldése során", + "Share to a conversation" : "Megosztás egy beszélgetésben", + "Share to conversation" : "Megosztás egy beszélgetésben", + "In conversation" : "Beszélgetésben", + "Search in conversation: {conversation}" : "Keresés a beszélgetésben: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "A kéréseit a nyers erős támadás elleni védelem fogja vissza", + "Error while clearing conversation history" : "Hiba a beszélgetés előzményeinek törlése során", + "Error occurred while allowing guests" : "Hiba történt a vendégek engedélyezése során", + "Error occurred while disallowing guests" : "Hiba történt a vendégek letiltása során", + "Error occurred when restricting the conversation to moderator" : "Hiba történt a beszélgetés moderátorra történő korlátozása során", + "Error occurred when opening the conversation to everyone" : "Hiba történt a beszélgetés mindenki számára történő megnyitása során", + "Conversation password has been saved" : "A beszélgetés jelszava mentve", + "Conversation password has been removed" : "A beszélgetés jelszava eltávolítva", + "Error occurred while saving conversation password" : "Hiba történt a beszélgetés jelszavának mentése során", + "Call recording is starting." : "A hívásfelvétel elindul.", + "Call recording stopped while starting." : "A hívásfelvétel leállt az indítása során.", + "Call recording stopped. You will be notified once the recording is available." : "A hívásfelvétel leállt. Értesítve lesz, amint a felvétel elérhető lesz.", + "Conversation picture set" : "A beszélgetés képe beállítva", + "Conversation picture deleted" : "A beszélgetés képe törölve", + "Could not delete the conversation picture" : "Nem sikerült a beszélgetés képének törlése", + "Could not remove the automatic expiration" : "Nem sikerült az automatikus lejárat eltávolítása", + "Could not post message: {errorMessage}" : "Nem sikerült elküldeni az üzenetet: {errorMessage}", + "Participant is banned successfully" : "A résztvevő sikeresen kitiltva", + "Error while banning the participant" : "Hiba a résztvevő kitiltása során", + "An error occurred while fetching the participants" : "Hiba történt a résztvevők letöltése során", + "Could not send invitation to {actorId}" : "Nem sikerült elküldeni a meghívót a következőnek: {actorId}", + "Invitations sent" : "Meghívók elküldve", + "Error occurred when sending invitations" : "Hiba történt a meghívók küldése során", + "Failed to join the conversation." : "Nem sikerült csatlakozni a beszélgetéshez.", + "An error occurred while creating breakout rooms" : "Hiba történt a szétbontott szobák létrehozása során", + "An error occurred while re-ordering the attendees" : "Hiba történt a résztvevők átrendezése során", + "An error occurred while deleting breakout rooms" : "Hiba történt a szétbontott szobák törlése során", + "An error occurred while starting breakout rooms" : "Hiba történt a szétbontott szobák indítása során", + "An error occurred while stopping breakout rooms" : "Hiba történt a szétbontott szobák leállítása során", + "An error occurred while sending a message to the breakout rooms" : "Hiba történt a szétbontott szobáknak történő üzenetküldés során", + "An error occurred while requesting assistance" : "Hiba történt a segítségkérés során", + "An error occurred while resetting the request for assistance" : "Hiba történt a segítségkérés alaphelyzetbe állítása során", + "An error occurred while joining breakout room" : "Hiba történt a szétbontott szobák összevonása során", + "Failed to rename the thread" : "Nem sikerült átnevezni a szálat", + "Error fetching upcoming events" : "Hiba a következő események lekérése során", + "Error fetching upcoming reminders" : "Hiba a következő emlékeztetők lekérése során", + "An error occurred while accepting an invitation" : "Hiba történt a meghívás elfogadása során", + "An error occurred while rejecting an invitation" : "Hiba történt a meghívás elutasítása során", + "{guest} (guest)" : "{guest} (vendég)", + "Poll draft has been saved" : "A szavazásvázlat mentve lett", + "An error occurred while saving the draft" : "Hiba történt a vázlat mentése során", + "An error occurred while submitting your vote" : "Hiba történt a szavazata leadása során", + "An error occurred while ending the poll" : "Hiba történt a szavazás befejezése során", + "An error occurred while deleting the poll draft" : "Hiba történt a szavazásvázlat törlése során", + "Poll \"{name}\" was created by {user}. Click to vote" : "„{name}” szavazás, létrehozta: {user}. Kattintson a szavazáshoz.", + "Failed to add reaction" : "A reakció hozzáadása sikertelen", + "Failed to remove reaction" : "A reakció eltávolítása sikertelen", + "The server is in maintenance mode." : "A kiszolgáló karbantartási módban van.", + "Federated server was updated." : "A föderált kiszolgáló frissítve lett.", + "Error while uploading file \"{fileName}\"" : "Hiba a(z) „{fileName}” fájl feltöltése során", + "Not enough free space to upload file \"{fileName}\"" : "Nincs elég szabad hely a(z) „{fileName}” fájl feltöltéséhez", + "You are not allowed to share files" : "Nem oszthat meg fájlokat", + "Error while sharing file" : "Hiba a fájl megosztása során", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "A Nextcloud Beszélgetés nem támogatja teljes mértékben az Ön által használt böngészőt. Használja a Mozilla Firefox, a Microsoft Edge, a Google Chrome vagy az Apple Safari legújabb verzióját.", + "_In %n hour_::_In %n hours_" : ["%n óra múlva","%n óra múlva"], + "_%n minute _::_%n minutes_" : ["%n perc múlva","%n perc múlva"], + "In {hours} and {minutes}" : "{hours} és {minutes} múlva", + "_In %n minute_::_In %n minutes_" : ["%n perc múlva","%n perc múlva"], + "Later today – {timeLocale}" : "Később a mai nap – {timeLocale}", + "Set time for later today" : "Idő beállítása későbbre a mai nap", + "Tomorrow – {timeLocale}" : "Holnap – {timeLocale}", + "Set time for tomorrow" : "Idő beállítása holnapra", + "This weekend – {timeLocale}" : "Ez a hétvége – {timeLocale}", + "Set time for this weekend" : "Idő beállítása a hétvégére", + "Next week – {timeLocale}" : "Következő hét – {timeLocale}", + "Set time for next week" : "Idő beállítása a következő hétre", + "Message link copied to clipboard" : "Az üzenet hivatkozása a vágólapra másolva", + "Conversation link copied to clipboard" : "A beszélgetési hivatkozás vágólapra másolva", + "The link could not be copied" : "A hivatkozást nem lehetett másolni", + "Error while parsing a PROPFIND error" : "Hiba történt a PROPFIND hiba feldolgozása során", + "Sending signaling message has failed" : "A jelző üzenet küldése sikertelen", + "Lost connection to signaling server. Trying to reconnect." : "Megszakadt a kapcsolat a jelzőkiszolgálóval. Újracsatlakozás kísérlete.", + "Lost connection to signaling server." : "Megszakadt a kapcsolat a jelzőkiszolgálóval.", + "Connecting is taking longer than expected …" : "A kapcsolódás a vártnál tovább tart…", + "Failed to connect. Retrying …" : "Nem sikerült a csatlakozás. Újrapróbálkozás…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nem sikerült a csatlakozás. A jelzőkiszolgáló lehet, hogy helytelenül van beállítva.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Frissíteni kell a beállított jelzőkiszolgálót, hogy kompatibilis legyen a Beszélgetés ezen verziójával. Lépjen kapcsolatba a rendszergazdával.", + "Please restart the app." : "Indítsa újra az alkalmazást.", + "Please reload the page." : "Frissítse az oldalt.", + "Please try to restart the app." : "Próbálja meg újraindítani az alkalmazást.", + "Please try to reload the page." : "Próbálja meg újratölteni az oldalt.", + "Do not disturb" : "Ne zavarjanak", + "Away" : "Távol", + "Microphone {number}" : "{number}. mikrofon", + "Camera {number}" : "{number}. kamera", + "Speaker {number}" : "{number}. hangszóró", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Úgy tűnik, hogy némítva beszél, oldja fel a némítást, hogy mások is hallják", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nem sikerült kapcsolatot létesíteni legalább egy résztvevővel. TURN kiszolgálóra lehet szükség a művelethez. Kérje meg a rendszergazdáját, hogy állítson be egyet {linkstart}ezen dokumentáció{linkend} segítségével.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Ez a vártnál hosszabb időt vesz igénybe. A média engedélyeket már megadta (vagy elutasította)? Ha igen, indítsa újra a böngészőt, mivel a hang és a videó meghibásodott", + "Access to microphone & camera is only possible with HTTPS" : "A mikrofon és a kamera hozzáférése csak HTTPS-en lehetséges", + "Please move your setup to HTTPS" : "Váltson HTTPS-re", + "Access to microphone & camera was denied" : "A kamera és a mikrofon hozzáférése letiltva", + "WebRTC is not supported in your browser" : "A böngészője nem támogatja a WebRTC-t", + "Please use a different browser like Firefox or Chrome" : "Használjon másik böngészőt, például Firefoxot vagy Chrome-ot", + "Error while accessing microphone & camera" : "Hiba a kamera és a mikrofon hozzáférésekor", + "%s Talk on your mobile devices" : "%s Beszélgetés a mobileszközein", + "Join conversations at any time, anywhere, on any device." : "Csatlakozzon a beszélgetésekhez bármikor, bárhol és bármilyen eszközön.", + "Android app" : "androidos alkalmazás", + "iOS app" : "iOS-es alkalmazás", + "__language_name__" : "Magyar", + "Webhook Demo" : "Webhook demó", + "Call summary (%s)" : "Hívásösszesítő (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "A hívásösszesítő bot közzétesz egy áttekintő üzenetet a hívás után, mely felsorolja a résztvevőket és vázolja a feladatokat", + "Tasks" : "Feladatok", + "Notes" : "Jegyzetek", + "Reports" : "Jelentések", + "Decisions" : "Döntések", + "Agenda" : "Napirend", + "Call summary" : "Hívásösszesítő", + "Call summary - {title}" : "Hívásösszesítő – {title}", + "Talk conversation for event" : "Eseményhez tartozó beszélgetés", + "Client Push is installed, this improves the performance of desktop clients." : "A Kliensleküldés nincs telepítve, ez javítaná az asztali kliensek teljesítményét.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "A {notify_push} nincs telepítve, ez teljesítményproblémákhoz vezethet az asztali kliensek használatakor.", + "Next meeting" : "Következő találkozó", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Ütemezzen egy találkozót a naptárából. A beszélgetést kell megjelölni helyszínként, hogy megjelenjen itt.", + "Join conversations from remote Nextcloud servers" : "Csatlakozás távoli Nextcloud-kiszolgálókon lévő beszélgetésekhez", + "Your default media state has been saved" : "Az alapértelmezett médiaállapot mentve lett", + "Set reminder for later today" : "Emlékeztető beállítása a mai napon későbbre", + "Set reminder for tomorrow" : "Emlékeztető beállítása holnapra", + "Set reminder for this weekend" : "Emlékeztető beállítása erre a hétvégére", + "Set reminder for next week" : "Emlékeztető beállítása a következő hétre", + "Generate summary" : "Összefoglaló előállítása", + "Open poll • You voted already" : "Nyílt szavazás • Már szavazott", + "Open poll • Click to vote" : "Nyílt szavazás • Kattintson a szavazáshoz", + "Poll • Ended" : "Szavazás • Véget ért", + "Talk recording from {time} ({conversation})" : "Beszélgetés felvétele ekkorról: {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Szavazás eredménye • %n szavazat","Szavazás eredménye • %n szavazat"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Nyílt szavazás • %n szavazat","Nyílt szavazás • %n szavazat"], + "Submit vote" : "Szavazat leadása", + "Your privacy setting has been saved" : "Az adatvédelmi beállítások mentve", + "Your personal setting has been saved" : "A személyes beállítása mentve lett", + "Failed to save sounds setting" : "Nem sikerült menteni a hangbeállításokat", + "Sounds setting saved" : "Hangbeállítás mentve", + "Always shown if recording consent is required" : "Mindig megjelenik, ha felvételi hozzájárulás szükséges", + "Nextcloud Talk was updated, you cannot start or join a call." : "A Nextcloud Beszélgetés frissítve lett, nem indíthat vagy csatlakozhat híváshoz.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Csatlakozott a beszélgetéshez egy másik ablakban vagy eszközön. Ezt a Nextcloud Beszélgetés jelenleg nem támogatja, ezért ezt a munkamenetet lezárták.", + "Nextcloud Talk was updated." : "A Nextcloud Beszélgetés frissítve lett.", + "Nextcloud is in maintenance mode." : "A Nextcloud karbantartási módban van.", + "Nextcloud Talk Federation was updated." : "A Nextcloud Beszélgetés föderációja frissült.", + "Enable live translation" : "Élő fordítás bekapcsolása", + "I picked list style" : "A listastílust választottam", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hé! A Beszélgetést listastílussal vagy üzenetbuborékokkal használod?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/hu.json b/l10n/hu.json new file mode 100644 index 0000000..6b4d65c --- /dev/null +++ b/l10n/hu.json @@ -0,0 +1,2244 @@ +{ "translations": { + "a conversation" : "egy beszélgetés", + "(Duration %s)" : "(Időtartam: %s)", + "You attended a call with {user1}" : "Részt vett egy hívásban vele: {user1}", + "_%n guest_::_%n guests_" : ["%n vendég","%n vendég"], + "You attended a call with {user1} and {user2}" : "Részt vett egy hívásban velük: {user1} és {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Részt vett egy hívásban velük: {user1}, {user2} és {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Részt vett egy hívásban velük: {user1}, {user2}, {user3} és {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Részt vett egy hívásban velük: {user1}, {user2}, {user3}, {user4} és {user5}", + "_%n other_::_%n others_" : ["még %n emberrel","még %n emberrel"], + "{actor} invited you to {call}" : "{actor} meghívta ide: {call}", + "You were invited to a conversation or had a call" : "Meghívták egy beszélgetésbe, vagy hívása volt", + "Other activities" : "Egyéb tevékenységek", + "Talk" : "Beszélgetés", + "Guest" : "Vendég", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Üdvözöljük a Nextcloud Beszélgetésben!\nEbben a beszélgetésben tájékoztatást kap a Nextcloud Beszélgetés új funkcióiról.", + "## New in Talk %s" : "## A Beszélgetés %s újdonságai", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- A Microsoft Edge és a Safari mostantól használható hang- és videohívásokhoz", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- A négyszemközti beszélgetések most már tartósak, és nem lehet véletlenül csoportos beszélgetéssé alakítani őket. Emellett ha egy résztvevő elhagyja a beszélgetést, akkor most már nem kerül automatikusan törlésre. Csak ha mindkét fél elhagyja a beszélgetést, akkor kerül törlésre a kiszolgálóról", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Most már értesítheti az összes résztvevőt az *@all* beírásával a csevegésbe", + "- With the \"arrow-up\" key you can repost your last message" : "- A „felfele nyíl” billentyűvel újraküldheti az előző üzenetét", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- A Beszélgetés most már kezel parancsokat, küldje el a „/help” üzenetet a csevegésbe, és nézze meg, hogy a rendszergazda állított-e be", + "- With projects you can create quick links between conversations, files and other items" : "- A projektekkel gyors hivatkozásokat hozhat létre beszélgetések, fájlok és egyéb elemek között", + "- You can now mention guests in the chat" : "- Most már megemlíthet vendégeket a csevegésben", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- A beszélgetéseknek most már lehet várójuk. Ez lehetővé teszi a moderátoroknak, hogy csatlakozzanak a csevegéshez, és már hívják egymást a találkozó előkészítéséhez, míg a felhasználóknak és a vendégeknek várniuk kell", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Most már közvetlenül válaszolhat az üzenetekre, így a többi felhasználónak kontextusba helyezheti, miről szól az üzenete", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A beszélgetések és a résztvevők keresése mostantól a meglévő beszélgetéseket is kiszűri, így sokkal könnyebb megtalálni a korábbi beszélgetéseket", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Mostantól, hozzáadhat egyéni felhasználói csoportokat a beszélgetésekhez, amennyiben a CIrcles alkalmazás telepítve van", + "- Check out the new grid and call view" : "- Nézze meg az új rács és hívás nézeteket", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Mostantól közvetlenül feltöltheti az eszközéről a fájlokat, és áthúzhatja őket a csevegésbe", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- A megosztott fájlok most a megtekintő alkalmazásokkal közvetlenül a chat nézetben nyílnak meg", + "- You can now search for chats and messages in the unified search in the top bar" : "- Mostantól a felső sáv egységes keresőben kereshet csevegéseket és üzeneteket", + "- Spice up your messages with emojis from the emoji picker" : "- Fűszerezze üzeneteit hangulatjelekkel az emoji kiválasztóból", + "- You can now change your camera and microphone while being in a call" : "- Most már megváltoztathatja a fényképezőgépet és a mikrofont hívás közben", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Adjon néhány beszélgetést a leírásához, és nyissa meg, hogy a bejelentkezett felhasználók megtalálhassák és csatlakozhassanak", + "- See a read status and send failed messages again" : "- Lásd az olvasási állapotot és küldje el ismét a sikertelen üzeneteket", + "- Raise your hand in a call with the R key" : "- Emelje fel a kezét hívás közben az R gombbal", + "- Join the same conversation and call from multiple devices" : "- Csatlakozzon ugyanazon beszélgetéshez és híváshoz több eszközzel", + "- Send voice messages, share your location or contact details" : "- Küldjön hangüzeneteket, ossza meg a helyét vagy névjegyadatait", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Adjon csoportokat egy beszélgetéshez, és az új csoporttagok automatikusan hozzáadásra kerülnek résztvevőként", + "- A preview of your audio and video is shown before joining a call" : "- Megjelenik a hang és a videó előnézete, mielőtt csatlakozik a híváshoz", + "- You can now blur your background in the newly designed call view" : "- Már elhomályosíthatja a hátteret az újratervezett hívásnézetben", + "- Moderators can now assign general and individual permissions to participants" : "- A moderátorok most már általános és egyéni jogosultságokat is hozzárendelhetnek a résztvevőkhöz", + "- You can now react to chat messages" : "- Most már reagálhat a csevegőüzenetekre", + "- In the sidebar you can now find an overview of the latest shared items" : "- Az oldalsávban megtalálhatja a legutóbb megosztott elemeket", + "- Use a poll to collect the opinions of others or settle on a date" : "- Használjon egy szavazást, hogy összegyűjtse a többiek véleményét, vagy hogy megegyezzenek egy dátumban", + "- Configure an expiration time for chat messages" : "- Állítson be elévülési időt a csevegőüzenetekhez", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Indítson hívásokat anélkül, hogy értesítené a nagy beszélgetésekben lévőket. A hívás elindítása után külön hívásértesítéseket küldhet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Küldjön csevegőüzenetet a címzettek értesítése nélkül, ha nem sürgős", + "- Emojis can now be autocompleted by typing a \":\"" : "- Az emodzsik mostantól automatikusan kiegészíthetők egy „:” begépelésével", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Különböző elemek hivatkozása az új okos kiválasztóval, egy „/” begépelésével", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- A moderátorok mostantól szobabontást hozhatnak létre (a nagy teljesítményű háttérrendszert igényli)", + "- Calls can now be recorded (requires the High-performance backend)" : "- A hívások mostantól felvehetőek (a nagy teljesítményű háttérrendszert igényli)", + "- Conversations can now have an avatar or emoji as icon" : "- A beszélgetéseknek most már lehet profilképük vagy emodzsit használó ikonjuk", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- A videóhívásoknál a virtuális hátterek már elérhetők az elhomályosított háttér mellett", + "- Reactions are now available during calls" : "- A reakciók most már hívás közben is elérhetők", + "- Typing indicators show which users are currently typing a message" : "- Gépelésjelzők mutatják, ha a felhasználók épp gépelnek", + "- Groups can now be mentioned in chats" : "- A csoportok most már megemlíthetők a csevegésekben", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- A hívásrögzítések automatikusan leiratozásra kerülnek, ha van leiratozási szolgáltató alkalmazás regisztrálva", + "- Chat messages can be translated if a translation provider app is registered" : "- A csevegőüzenet lefordíthatók, ha van fordítási szolgáltató alkalmazás regisztrálva", + "- **Markdown** can now be used in _chat_ messages" : "- A **Markdown** most már használható a _csevegőüzenetekben_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- A webhookok már elérhetőek a botok megvalósításához. További részletekért tekintse meg a dokumentációt: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Időzítő beállítsa egy csevegőüzenetnél, hogy később újra értesítést kapjon róla", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Saját jegyzet** a beszélgetésekben, hogy jegyzeteljen és információt osszon meg az eszközei közt", + "- Captions allow to send a message with a file at the same time" : "- Feliratok, hogy egyszerre fájlt és üzenetet is lehessen küldeni", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- A beszélő videója most már látható képernyőmegosztás közben is, és a hívásreakciók animálva vannak", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Az üzeneteket 6 óráig szerkeszthetik a bejelentkezett szerzők és moderátorok", + "- Unsent message drafts are now saved in your browser" : "- A mentetlen vázlatok most már mentésre kerülnek a böngészőben", + "- Text chatting can now be done in a federated way with other Talk servers" : "- A szöveges csevegés most már más Beszélgetés kiszolgálókkal föderálva is elérhető", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- A moderátorok most már úgy is kitilthatnak fiókokat és vendégeket, hogy nem tudnak újból csatlakozni", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Most már látszódnak a következő hívások az összekapcsolt naptáreseményekből, és a helyettesítések is megjelennek a beszélgetésekben", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- A hívások most már föderálhatóak más Beszélgetés-kiszolgálókkal (Nagy teljesítményű háttérrendszert igényel)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Bemutatkozik az asztali Nextcloud Beszélgetés alkalmazás Windowsra, macOS-re és Linuxra: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- A hívásfelvételek és a csevegések olvasatlan üzeneteinek összefoglalása a Nextcloud Asszisztens használatával", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Továbbfejlesztett találkozók az e-mail-címmel meghívott vendégek felismerésével, résztvevőlisták importálásával, szavazásvázlatokkal és a hívások résztvevői listájának letöltésével", + "- Archive conversations to stay focused" : "- Beszélgetések archiválása, hogy fókuszált maradjon", + "- Schedule a meeting into your calendar from within a conversation" : "- Találkozó ütemezése a naptárába közvetlenül egy beszélgetésből", + "- Search for messages of the current conversation directly in the right sidebar" : "- Üzenetek keresése a jelenlegi beszélgetésben közvetlenül a jobb oldali oldalsávból", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- További beszélgetések áttekintése az első pillantáskor, az új kompakt listának köszönhetően (a Beszélgetés beállításaiban engedélyezhető)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- A találkozók beszélgetései most már szinkronizálják a címet és a leírást a naptárból, és szűrő rejti őket addig, amíg nem közeledik a kezdetük", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Beszélgetések megjelelölése bizalmasként az értesítési beállításokban, hogy ne jelenjen meg üzenettartalom a beszélgetések és az értesítések közt", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Hogy „Ne zavarjanak” állapotban is megkapja a leküldéses értesítéseket, jelölje fontosnak a beszélgetéseket", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Egyéb résztvevők hozzáadása a négyszemközti beszélgetésekhez, amely röptében új csoportos hívást hoz létre", + "- Use threads to keep your chat and discussions organized" : "- Szálak használata a beszélgetések és témák szervezetten tartásához", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Elérhető az élő leiratozás a hívások során (az élő leiratozási ExApp, és a Nagy teljesítményű háttérrendszer szükséges hozzá)", + "- Moderators can now pin messages so they are kept at the top" : "- A moderátorok most már kitűzhetnek bejegyzéseket, így felül maradnak", + "- Schedule a message to send it at a later time" : "- Üzenet ütemezése későbbi elküldésre", + "_All %n participant_::_All %n participants_" : ["Mind a(z) %n résztvevő","Mind a(z) %n résztvevő"], + "Talk updates ✅" : "Beszélgetés frissítések ✅", + "Reaction deleted by author" : "A reakciót törölte a szerző", + "{actor} created the conversation" : "{actor} létrehozta a beszélgetést", + "You created the conversation" : "Beszélgetést hozott létre", + "System created the conversation" : "A rendszer hozta létre a beszélgetést", + "An administrator created the conversation" : "Egy rendszergazda létrehozta a beszélgetést", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Egy rendszergazda átnevezte a beszélgetést erről: „%1$s”, erre: „%2$s”", + "{actor} set the description" : "{actor} beállította a leírást", + "You set the description" : "Beállította a leírást", + "An administrator set the description" : "Egy rendszergazda beállította a leírást", + "{actor} removed the description" : "{actor} eltávolította a leírást", + "You removed the description" : "Eltávolította a leírást", + "An administrator removed the description" : "Egy rendszergazda eltávolította a leírást", + "You started a silent call" : "Néma hívást indított", + "Outgoing silent call" : "Folyamatban lévő néma hívás", + "{actor} started a silent call" : "{actor} néma hívást indított", + "Incoming silent call" : "Bejövő néma hívás", + "You started a call" : "Hívást indított", + "Outgoing call" : "Kimenő hívás", + "{actor} started a call" : "{actor} hívást indított", + "Incoming call" : "Bejövő hívás", + "{actor} joined the call" : "{actor} bekapcsolódott a hívásba", + "You joined the call" : "Csatlakozott a híváshoz", + "{actor} left the call" : "{actor} elhagyta a hívást", + "You left the call" : "Kilépett a hívásból", + "{actor} unlocked the conversation" : "{actor} feloldotta a beszélgetést", + "You unlocked the conversation" : "Feloldotta a beszélgetést", + "An administrator unlocked the conversation" : "Egy rendszergazda feloldotta a beszélgetést", + "{actor} locked the conversation" : "{actor} zárolta a beszélgetést", + "You locked the conversation" : "Zárolta a beszélgetést", + "An administrator locked the conversation" : "A beszélgetést egy rendszergazda zárolta", + "{actor} limited the conversation to the current participants" : "{actor} a beszélgetést a jelenlegi résztvevőkre korlátozta", + "You limited the conversation to the current participants" : "A beszélgetést a jelenlegi résztvevőkre korlátozta", + "An administrator limited the conversation to the current participants" : "Egy rendszergazda a beszélgetést a jelenlegi résztvevőkre korlátozta", + "{actor} opened the conversation to registered users" : "{actor} megnyitotta beszélgetést a regisztrált felhasználók számára", + "You opened the conversation to registered users" : "Megnyitotta beszélgetést a regisztrált felhasználók számára", + "An administrator opened the conversation to registered users" : "Egy rendszergazda megnyitotta beszélgetést a regisztrált felhasználók számára", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "You opened the conversation to registered users and users created with the Guests app" : "Elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Egy rendszergazda elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "The conversation is now open to everyone" : "A beszélgetés most már mindenki számára nyitva áll", + "{actor} opened the conversation to everyone" : "{actor} megnyitotta beszélgetést mindenki számára", + "You opened the conversation to everyone" : "Megnyitotta beszélgetést mindenki számára", + "{actor} restricted the conversation to moderators" : "{actor} a moderátorokra korlátozta a beszélgetést", + "You restricted the conversation to moderators" : "A moderátorokra korlátozta a beszélgetést", + "{actor} started breakout rooms" : "{actor} elindította a szobabontást", + "You started breakout rooms" : "Elindította a szobabontást", + "{actor} stopped breakout rooms" : "{actor} leállította a szobabontást", + "You stopped breakout rooms" : "Leállította a szobabontást", + "{actor} allowed guests" : "{actor} engedélyezte a vendégeket", + "You allowed guests" : "Engedélyezte a vendégeket", + "An administrator allowed guests" : "Egy rendszergazda engedélyezte a vendégeket", + "{actor} disallowed guests" : "{actor} letiltotta a vendégeket", + "You disallowed guests" : "Letiltotta a vendégeket", + "An administrator disallowed guests" : "Egy rendszergazda letiltotta a vendégeket", + "{actor} set a password" : "{actor} jelszót állított be", + "You set a password" : "Jelszót állított be", + "An administrator set a password" : "Egy rendszergazda jelszót állított be", + "{actor} removed the password" : "{actor} eltávolította a jelszót", + "You removed the password" : "Eltávolította a jelszót", + "An administrator removed the password" : "Egy rendszergazda eltávolította a jelszót", + "{actor} added {user}" : "{actor} hozzáadta: {user}", + "You joined the conversation" : "Csatlakozott a beszélgetéshez", + "{actor} joined the conversation" : "{actor} csatlakozott a beszélgetéshez", + "You added {user}" : "Hozzáadta: {user}", + "{actor} added you" : "{actor} hozzáadta Önt", + "An administrator added you" : "A rendszergazda hozzáadta Önt", + "An administrator added {user}" : "A rendszergazda hozzáadta {user} felhasználót", + "You left the conversation" : "Elhagyta a beszélgetést", + "{actor} left the conversation" : "{actor} elhagyta a beszélgetést", + "{actor} removed {user}" : "{actor} eltávolította: {user}", + "You removed {user}" : "Eltávolította: {user}", + "{actor} removed you" : "{actor} eltávolította", + "An administrator removed you" : "Egy rendszergazda eltávolította Önt", + "An administrator removed {user}" : "Egy rendszergazda eltávolította {user} felhasználót", + "{actor} invited {federated_user}" : "{actor} meghívta: {federated_user}", + "You invited {federated_user}" : "Meghívta: {federated_user}", + "You accepted the invitation" : "Elfogadta a meghívást", + "{actor} invited you" : "{actor} meghívta", + "An administrator invited you" : "Egy rendszergazda meghívta", + "An administrator invited {federated_user}" : "Egy rendszergazda meghívta: {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} elfogadta a meghívást", + "{actor} removed {federated_user}" : "{actor} eltávolította: {federated_user}", + "You removed {federated_user}" : "Eltávolította: {federated_user}", + "You declined the invitation" : "Elutasította a meghívást", + "An administrator removed {federated_user}" : "Egy rendszergazda eltávolította {federated_user} felhasználót", + "{federated_user} declined the invitation" : "{federated_user} elfogadta a meghívást", + "{actor} added group {group}" : "{actor} hozzáadta a(z) {group} csoportot", + "You added group {group}" : "Hozzáadta a(z) {group} csoportot", + "An administrator added group {group}" : "Egy rendszergazda hozzáadta a(z) {group} csoportot", + "{actor} removed group {group}" : "{actor} eltávolította a(z) {group} csoportot", + "You removed group {group}" : "Eltávolította a(z) {group} csoportot", + "An administrator removed group {group}" : "Egy rendszergazda eltávolította a(z) {group} csoportot", + "{actor} added team {circle}" : "{actor} hozzáadta a(z) {circle} csapatot", + "You added team {circle}" : "Hozzáadta a(z) {circle} csapatot", + "An administrator added team {circle}" : "Egy rendszergazda hozzáadta a(z) {circle} csapatot", + "{actor} removed team {circle}" : "{actor} eltávolította a(z) {circle} csapatot", + "You removed team {circle}" : "Eltávolította a(z) {circle} csapatot", + "An administrator removed team {circle}" : "Egy rendszergazda eltávolította a(z) {circle} csapatot", + "{actor} added {phone}" : "{actor} hozzáadta: {phone}", + "You added {phone}" : "Hozzáadta: {phone}", + "An administrator added {phone}" : "Egy rendszergazda hozzáadta: {phone}", + "{actor} removed {phone}" : "{actor} eltávolította: {phone}", + "You removed {phone}" : "Eltálvolította: {phone}", + "An administrator removed {phone}" : "Egy rendszergazda eltávolította: {phone}", + "{actor} promoted {user} to moderator" : "{actor} moderátorrá léptette elő: {user}", + "You promoted {user} to moderator" : "Moderátorrá léptette elő: {user}", + "{actor} promoted you to moderator" : "{actor} moderátorrá léptette elő", + "An administrator promoted you to moderator" : "Egy rendszergazda moderátorrá léptette elő", + "An administrator promoted {user} to moderator" : "Egy rendszergazda moderátorrá léptette elő {user} felhasználót", + "{actor} demoted {user} from moderator" : "{actor} visszavonta {user} moderátori előléptetését", + "You demoted {user} from moderator" : "Visszavonta {user} moderátori kinevezését", + "{actor} demoted you from moderator" : "{actor} visszavonta a moderátori kinevezését", + "An administrator demoted you from moderator" : "Egy rendszergazda visszavonta a moderátori kinevezését", + "An administrator demoted {user} from moderator" : "Egy rendszergazda visszavonta {user} moderátori előléptetését", + "{actor} shared a file which is no longer available" : "{actor} megosztott egy fájlt, ami már nem érhető el", + "You shared a file which is no longer available" : "Megosztott egy fájlt, ami már nem érhető el", + "File shares are currently not supported in federated conversations" : "A fájlmegosztások jelenleg nem támogatottak a föderált beszélgetésekben", + "The shared location is malformed" : "A megosztott hely hibásan formázott", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} beállította a Matterbridge-dzset, hogy szinkronizálja ezt a beszélgetést más beszélgetésekkel", + "You set up Matterbridge to synchronize this conversation with other chats" : "Beállította a Matterbridge-dzset, hogy szinkronizálja ezt a beszélgetést más beszélgetésekkel", + "{actor} created thread {title}" : "{actor} létrehozta a(z) {title} szálat", + "You created thread {title}" : "Létrehozta a(z) {title} szálat", + "{actor} renamed thread {title}" : "{actor} átnevezte a(z) {title} szálat", + "You renamed thread {title}" : "Átnevezte a(z) {title} szálat", + "{actor} updated the Matterbridge configuration" : "{actor} frissítette a Matterbridge beállításokat", + "You updated the Matterbridge configuration" : "Frissítette a Matterbridge beállításokat", + "{actor} removed the Matterbridge configuration" : "{actor} eltávolította a Matterbridge beállításokat", + "You removed the Matterbridge configuration" : "Eltávolította a Matterbridge beállításokat", + "{actor} started Matterbridge" : "{actor} elindította a Matterbridge-dzset", + "You started Matterbridge" : "Elindította a Matterbridge-et", + "{actor} stopped Matterbridge" : "{actor} leállította a Matterbridge-et", + "You stopped Matterbridge" : "Leállította Matterbridge-et", + "{actor} deleted a message" : "{actor} törölt egy üzenetet", + "You deleted a message" : "Törölt egy üzenetet", + "{actor} edited a message" : "{actor} szerkesztett egy üzenetet", + "You edited a message" : "Szerkesztett egy üzenetet", + "{actor} pinned a message" : "{actor} kitűzött egy üzenetet", + "You pinned a message" : "Kitűzött egy üzenetet", + "{actor} unpinned a message" : "{actor} megszüntette egy üzenet kitűzését", + "Message was automatically unpinned" : "Az üzenet kitűzése automatikusan megszűnt", + "You unpinned a message" : "Megszüntette egy üzenet kitűzését", + "{actor} deleted a reaction" : "{actor} törölt egy reakciót", + "You deleted a reaction" : "Törölt egy reakciót", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["%n hetesre állította az üzenetek elévülését","%n hetesre állította az üzenetek elévülését"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["%n naposra állította az üzenetek elévülését","%n naposra állította az üzenetek elévülését"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["%n órásra állította az üzenetek elévülését","%n órásra állította az üzenetek elévülését"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["%n percesre állította az üzenetek elévülését","%n percesre állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} %n hetesre állította az üzenetek elévülését","{actor} %n hetesre állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} %n naposra állította az üzenetek elévülését","{actor} %n naposra állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} %n órásra állította az üzenetek elévülését","{actor} %n órásra állította az üzenetek elévülését"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} %n percesre állította az üzenetek elévülését","{actor} %n percesre állította az üzenetek elévülését"], + "{actor} disabled message expiration" : "{actor} kikapcsolta az üzenetek elévülését", + "You disabled message expiration" : "Kikapcsolta az üzenetek elévülését", + "{actor} cleared the history of the conversation" : "{actor} törölte a beszélgetés előzményeit", + "You cleared the history of the conversation" : "Törölte a beszélgetés előzményeit", + "{actor} set the conversation picture" : "{actor} beállította a beszélgetés képét", + "You set the conversation picture" : "Beállította a beszélgetés képét", + "{actor} removed the conversation picture" : "{actor} eltávolította a beszélgetés képét", + "You removed the conversation picture" : "Eltávolította a beszélgetés képét", + "{actor} ended the poll {poll}" : "{actor} befejezte a(z) {poll} szavazást", + "You ended the poll {poll}" : "Befejezte a(z) {poll} szavazást", + "{actor} started the video recording" : "{actor} elindította a videófelvételt", + "You started the video recording" : "Elindította a videófelvételt", + "{actor} stopped the video recording" : "{actor} leállította a videófelvételt", + "You stopped the video recording" : "Leállította a videófelvételt", + "{actor} started the audio recording" : "{actor} elindította a videófelvételt", + "You started the audio recording" : "Elindította a videófelvételt", + "{actor} stopped the audio recording" : "{actor} leállította a hangfelvételt", + "You stopped the audio recording" : "Leállította a hangfelvételt", + "The recording failed" : "A felvétel sikertelen", + "Someone voted on the poll {poll}" : "Valaki szavazott a(z) {poll} szavazásban", + "Message deleted by author" : "Az üzenetet a szerző törölte", + "Message deleted by {actor}" : "{actor} törölte az üzenetet", + "Message deleted by you" : "Törölte az üzenetet", + "Deleted user" : "Törölt felhasználó", + "Unknown number" : "Ismeretlen szám", + "Administration" : "Adminisztráció", + "System" : "Rendszer", + "%s (guest)" : "%s (vendég)", + "Missed call" : "Nem fogadott hívás", + "Unanswered call" : "Nem megválaszolt hívás", + "Call ended (Duration {duration})" : "A hívás véget ért (hossz: {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a maximális híváshossz elérése miatt véget ért (hossz: {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} befejezte a hívást (hossz: {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["A hívás %n vendéggel a maximális híváshossz elérése miatt befejeződött (hossz: {duration})","A hívás %n vendéggel a maximális híváshossz elérése miatt befejeződött (hossz: {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["A hívás %n vendéggel befejeződött (hossz: {duration})","A hívás %n vendéggel befejeződött (hossz: {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} befejezte a hívást %n vendéggel (hossz: {duration})","{actor} befejezte a hívást %n vendéggel (hossz: {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következővel a maximális híváshossz elérése miatt befejeződött: {user1} (hossz: {duration})", + "Call with {user1} ended (Duration {duration})" : "A hívás a következővel bejeződött: {user1} (hossz: {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} befejezte a hívást a következővel: {user1} (hossz: {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1} és {user2} (hossz: {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1} és {user2} (hossz: {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1} és {user2} (Időtartam: {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás {user1}, {user2} és {user3} felhasználóval a maximális híváshossz elérése miatt befejeződött (hossz: {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2} és {user3} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2} és {user3} (hossz: {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1}, {user2}, {user3} és {user4} (hossz: {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2}, {user3} és {user4} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2}, {user3} és {user4} (Időtartam: {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "A hívás a következőkkel a maximális híváshossz elérése miatt befejeződött: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "A hívás a következőkkel befejeződött: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} befejezte a hívást a következőkkel: {user1}, {user2}, {user3}, {user4} és {user5} (hossz: {duration})", + "Message of {user} in {conversation}" : "{user} üzenete a(z) {conversation} beszélgetésben", + "Message of {user}" : "{user} üzenete", + "Message of a deleted user in {conversation}" : "Egy törölt felhasználó üzenete a(z) {conversation} beszélgetésben", + "Talk conversations" : "Beszélgetések", + "Talk to %s" : "Beszélgetés vele: %s", + "An error occurred. Please contact your administrator." : "Hiba történt. Lépjen kapcsolatba a rendszergazdával.", + "Storage quota exceeded" : "Tárhelykvóta túllépve", + "File not found" : "A fájl nem található", + "File is not shared, or shared but not with the user" : "A fájl nincs megosztva, vagy meg van, de nem a felhasználóval", + "No account available to delete." : "Nincs törölhető fiók.", + "Poll" : "Szavazás", + "Password needs to be set" : "A jelszót meg kell adni", + "Uploading the file failed" : "Nem sikerült feltölteni a fájlt", + "No image file provided" : "Nincs képfájl megadva", + "File is too big" : "A fájl túl nagy", + "Invalid file provided" : "Érvénytelen fájl van megadva", + "Invalid image" : "Érvénytelen kép", + "Unknown filetype" : "Ismeretlen fájltípus", + "Talk mentions" : "Beszélgetés említések", + "More conversations" : "További beszélgetések", + "Say hi to your friends and colleagues!" : "Köszönjön a barátainak és munkatársainak!", + "No unread mentions" : "Nincsenek olvasatlan említések", + "Call in progress" : "Hívás folyamatban", + "You were mentioned" : "Megemlítették Önt", + "Write to conversation" : "Írjon a beszélgetésbe", + "Writes event information into a conversation of your choice" : "Beírja az esemény adatait egy választott beszélgetésbe", + "Missing email field in header line" : "Hiányzó e-mail-mező a fejlécsorban", + "Following lines are invalid: %s" : "A következő sorok érvénytelenek: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s meghívta a(z) „%2$s” beszélgetésbe.", + "You were invited to conversation \"%s\"." : "Meghívták a(z) „%s” beszélgetésbe.", + "Conversation invitation" : "Beszélgetés-meghívó", + "Scheduled time" : "Ütemezett időpont", + "Description" : "Leírás", + "You can also dial-in via phone with the following details" : "Telefonon keresztül is be tudja tárcsázni a következő részleteket", + "Dial-in information" : "Telefonos információk", + "Meeting ID" : "Értekezlet azonosítója", + "Your PIN" : "Az Ön PIN-kódja", + "Click the button below to join the lobby now." : "Kattintson a lenti gombra a váróhoz való csatlakozáshoz.", + "Click the link below to join the lobby now." : "Kattintson a lenti hivatkozásra a váróhoz való csatlakozáshoz.", + "Join lobby for \"%s\"" : "Csatlakozás a(z) „%s” várójához", + "Click the button below to join the conversation now." : "Kattintson a lenti gombra a beszélgetéshez való csatlakozáshoz.", + "Click the link below to join the conversation now." : "Kattintson a lenti hivatkozásra a beszélgetéshez való csatlakozáshoz.", + "Join \"%s\"" : "Csatlakozás ehhez: „%s”", + "Meeting" : "Találkozó", + "Password request: %s" : "Jelszókérés: %s", + "Private conversation" : "Privát beszélgetés", + "Deleted user (%s)" : "Törölt felhasználó (%s)", + "Failed to upload call recording" : "A hívásfelvétel feltöltése sikertelen", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "A felvételi kiszolgáló nem tudta feltölteni a következő hívást: {call}. Vegye fel a kapcsolatot a rendszergazdákkal.", + "Share to chat" : "Megosztás csevegésben", + "Dismiss notification" : "Értesítés mellőzése", + "Call recording now available" : "A hívásfelvétel már elérhető", + "The recording for the call in {call} was uploaded to {file}." : "A(z) {call} hívás felvétele feltöltésre került ide: {file}.", + "Transcript now available" : "A leiratozás elérhető", + "The transcript for the call in {call} was uploaded to {file}." : "A(z) {call} hívás leirata feltöltésre került ide: {file}.", + "Failed to transcript call recording" : "A hívásfelvétel leiratozása sikertelen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "A kiszolgáló nem tudta leiratozni a(z) {call} hívás a következő helyre: {file}. Vegye fel a kapcsolatot a rendszergazdával.", + "Call summary now available" : "A hívásösszefoglaló most már elérhető", + "The summary for the call in {call} was uploaded to {file}." : "A(z) {call} hívásösszefoglalója ide lett feltöltve: {file}.", + "Failed to summarize call recording" : "Nem sikerült összefoglalni a hívást", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "A kiszolgáló nem tudta összefoglalni a(z) {call} hívást itt: {file}. Lépjen kapcsolatba a rendszergazdákkal.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} meghívta, hogy csatlakozzon a(z) {roomName} szobához itt: {remoteServer}", + "Accept" : "Elfogadás", + "Decline" : "Elutasítás", + "{user1} invited you to a federated conversation" : "{user1} meghívta egy föderált beszélgetésbe", + "Someone reacted" : "Valaki reagált", + "New message" : "Új üzenet", + "Reminder" : "Emlékeztető", + "Someone mentioned you" : "Valaki megemlítette", + "Notification" : "Értesítés", + "Someone reacted in a private conversation" : "Valaki reagált egy privát beszélgetésben", + "You received a message in a private conversation" : "Kapott egy üzenetet egy privát beszélgetésben", + "Reminder in a private conversation" : "Emlékeztető egy privát beszélgetésben", + "Someone mentioned you in a private conversation" : "Valaki megemlítette egy privát beszélgetésben", + "Notification in a private conversation" : "Értesítés egy privát beszélgetésben", + "Reminder: You in {call}" : "Emlékeztető: {call}", + "Reminder: {user} in {call}" : "Emlékeztető: {user} {call}", + "Reminder: Deleted user in {call}" : "Felhasználó törölve a következőben: {call}", + "Reminder: {guest} (guest) in {call}" : "Emlékeztető: {guest} (vendég) itt: {call}", + "Reminder: Guest in {call}" : "Emlékeztető: Vendég itt: {call}", + "{user} reacted with {reaction}" : "{user} a következővel reagált: {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a következővel reagált: {reaction} itt: {call}", + "Deleted user reacted with {reaction} in {call}" : "Egy törölt felhasználó a következővel reagált: {reaction} itt: {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (vendég) ezzel reagált: {reaction}, ebben: {call}", + "Guest reacted with {reaction} in {call}" : "Egy vendég ezzel reagált: {reaction} itt: {call}", + "{user} in {call}" : "{user} itt: {call}", + "Deleted user in {call}" : "Felhasználó törölve a következőben: {call}", + "{guest} (guest) in {call}" : "{guest} (vendég) itt: {call}", + "Guest in {call}" : "Vendég a(z) {call} hívásban", + "{user} sent you a private message" : "{user} privát üzenetet küldött", + "{user} sent a message in conversation {call}" : "{user} üzenetet küldött a(z) {call} beszélgetésben", + "A deleted user sent a message in conversation {call}" : "Egy törölt felhasználó üzenetet küldött a(z) {call} beszélgetésben", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (vendég) üzenetet küldött a(z) {call} beszélgetésben", + "A guest sent a message in conversation {call}" : "Egy vendég üzenetet küldött a(z) {call} beszélgetésben", + "{user} replied to your private message" : "{user} válaszolt a privát üzenetére", + "{user} replied to your message in conversation {call}" : "{user} válaszolt az üzenetedre a(z) {call} beszélgetésben", + "A deleted user replied to your message in conversation {call}" : "Egy törölt felhasználó válaszolt az üzenetére a(z) {call} beszélgetésben", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (vendég) válaszolt az üzenetére a(z) {call} beszélgetésben", + "A guest replied to your message in conversation {call}" : "Egy vendég válaszolt az üzenetére a(z) {call} beszélgetésben", + "Reminder: You in private conversation {call}" : "Emlékeztető: Ön a(z) {call} magánbeszélgetésben", + "Reminder: A deleted user in private conversation {call}" : "Emlékeztető: törölt felhasználó a(z) {call} magánbeszélgetésben", + "Reminder: {user} in private conversation" : "Emlékeztető: {user} egy magánbeszélgetésben", + "Reminder: You in conversation {call}" : "Emlékeztető: Ön a(z) {call} beszélgetésben", + "Reminder: {user} in conversation {call}" : "Emlékeztető: {user} a(z) {call} beszélgetésben)", + "Reminder: A deleted user in conversation {call}" : "Emlékeztető: egy törölt felhasználó a(z) {call} beszélgetésben", + "Reminder: {guest} (guest) in conversation {call}" : "Emlékeztető: {guest} (vendég) a(z) {call} beszélgetésben", + "Reminder: A guest in conversation {call}" : "Emlékeztető: egy vendég a(z) {call} beszélgetésben", + "{user} reacted with {reaction} to your private message" : "{user} ezzel reagált a privát üzenetére: {reaction}", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Egy törölt felhasználó ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (vendég) ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Egy vendég ezzel reagált a(z) {call} beszélgetésben lévő üzenetére: {reaction}", + "{user} mentioned you in a private conversation" : "{user} megemlítette egy privát beszélgetésben", + "{user} mentioned group {group} in conversation {call}" : "{user} megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "{user} mentioned team {team} in conversation {call}" : "{user} megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "{user} mentioned everyone in conversation {call}" : "{user} megemlített mindenkit a(z) {call} beszélgetésben", + "{user} mentioned you in conversation {call}" : "{user} megemlítette a(z) {call} beszélgetésben", + "A deleted user mentioned group {group} in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "A deleted user mentioned team {team} in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "A deleted user mentioned everyone in conversation {call}" : "Egy törölt felhasználó megemlített mindenkit a(z) {call} beszélgetésben", + "A deleted user mentioned you in conversation {call}" : "Egy törölt felhasználó megemlítette a(z) {call} beszélgetésben", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (vendég) megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (vendég) megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (vendég) megemlített mindenkit a(z) {call} beszélgetésben", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (vendég) megemlítette a(z) {call} beszélgetésben", + "A guest mentioned group {group} in conversation {call}" : "Egy vendég megemlítette a(z) {group} csoportot a(z) {call} beszélgetésben", + "A guest mentioned team {team} in conversation {call}" : "Egy vendég megemlítette a(z) {team} csapatot a(z) {call} beszélgetésben", + "A guest mentioned everyone in conversation {call}" : "Egy vendég megemlített mindenkit a(z) {call} beszélgetésben", + "A guest mentioned you in conversation {call}" : "Egy vendég megemlítette a(z) {call} beszélgetésben", + "View message" : "Üzenet megtekintése", + "Dismiss reminder" : "Emlékeztető elvetése", + "View chat" : "Csevegés megtekintése", + "{user} invited you to a group conversation: {call}" : "{user} meghívta a következő csoportos beszélgetésbe: {call}", + "Join call" : "Csatlakozás a híváshoz", + "Answer call" : "Válasz a hívásra", + "{user} would like to talk with you" : "{user} szeretne Önnel beszélni", + "Call back" : "Visszahívás", + "You missed a call from {user}" : "Nem fogadott hívás tőle: {user}", + "Accept call" : "Hívás fogadása", + "Incoming phone call from {call}" : "Bejövő telefonhívás innen: {call}", + "You missed a phone call from {call}" : "Nem fogadott egy telefonhívást innen: {call}", + "A group call has started in {call}" : "Csoportos hívás kezdődött itt: {call}", + "You missed a group call in {call}" : "Nem fogadott csoportos hívás itt: {call}", + "{email} is requesting the password to access {file}" : "{email} jelszót kér ehhez: {file}", + "{email} tried to request the password to access {file}" : "{email} megpróbált jelszót kérni ehhez: {file}", + "Someone is requesting the password to access {file}" : "Valaki jelszót kér ehhez: {file}", + "Someone tried to request the password to access {file}" : "Valaki megpróbál jelszót kérni ehhez: {file}", + "Open settings" : "Beállítások megnyitása", + "Hosted signaling server added" : "Külső jelzőkiszolgáló hozzáadva", + "The hosted signaling server is now configured and will be used." : "A külső jelzőkiszolgáló beállításra került, és az lesz használva.", + "Hosted signaling server removed" : "Külső jelzőkiszolgáló eltávolítva", + "The hosted signaling server was removed and will not be used anymore." : "A külső jelzőkiszolgáló beállításra került, és az lesz használva.", + "Hosted signaling server changed" : "Külső jelzőkiszolgáló megváltoztatva", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "A külső jelzőkiszolgáló fiókja „{oldstatus}” állapotról erre változott: „{newstatus}”.", + "pending" : "függőben", + "active" : "aktív", + "expired" : "lejárva", + "blocked" : "blokkolva", + "error" : "hiba", + "The certificate of {host} expires in {days} days" : "A(z) {host} tanúsítványa {days} nap múlva lejár", + "The certificate of {host} expired" : "A(z) {host} tanúsítványa lejárt", + "Contact via Talk" : "Beszélgetés", + "Open Talk" : "Beszélgetés megnyitása", + "Default" : "Alapértelmezett", + "Presentation" : "Bemutató", + "Voice room" : "Hangos szoba", + "Webinar" : "Webinár", + "Conversations" : "Beszélgetések", + "Messages in current conversation" : "Üzenetek a jelenlegi beszélgetésben", + "{user}" : "{user}", + "Messages" : "Üzenetek", + "{user} in {conversation}" : "{user} csatlakozott a(z) {conversation} beszélgetéshez", + "Messages in other conversations" : "Üzenetek más beszélgetésekben", + "One-to-one rooms always need to show the other users avatar" : "A négyszemközti beszélgetések szobáinak mindig a másik felhasználó profilképét kell megjelenítenie", + "Invalid emoji character" : "Érvénytelen emodzsi karakter", + "Invalid background color" : "Érvénytelen háttérszín", + "Avatar image is not square" : "A profilkép nem négyzetes", + "Room {number}" : "{number}. szoba", + "Other" : "Egyebek", + "Failed to request trial because the trial server is unreachable. Please try again later." : "A próbaverzió kérése nem sikerült, mert a próbakiszolgáló nem érhető el. Próbálja újra később.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Probléma van a példány hitelesítésével. Lehet, hogy kívülről nem érhető el az URL az ellenőrzéséhez.", + "Something unexpected happened." : "Valami váratlan történt.", + "The URL is invalid." : "Az URL érvénytelen.", + "An HTTPS URL is required." : "Egy HTTPS URL szükséges.", + "The email address is invalid." : "Az e-mail-cím érvénytelen.", + "The language is invalid." : "A nyelv érvénytelen.", + "The country is invalid." : "Az ország érvénytelen.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Probléma van a próbaverzió kérésével. További információkért ellenőrizze a naplóit.", + "Too many requests are send from your servers address. Please try again later." : "Probléma van a példány hitelesítésével. Lehet, hogy kívülről nem érhető el az URL ellenőrzéséhez.", + "There is already a trial registered for this Nextcloud instance." : "Már regisztrált egy próbaverziót ehhez a Nextcloud példányhoz.", + "Something unexpected happened. Please try again later." : "Valami váratlan történt. Próbálja újra később.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nem sikerült próbaverziót kérni, mert a próbakiszolgáló helytelenül viselkedett. Próbálja újra később.", + "Trial requested but failed to get account information. Please check back later." : "Próbaverziót kért, de nem sikerült lekérni a fiókadatait. Nézzen vissza később.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Probléma van a kérés hitelesítésével. Lehet, hogy kívülről nem érhető el az URL az ellenőrzéséhez.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nem sikerült lekérni a fiókadatokat, mert a próbakiszolgáló helytelenül viselkedett. Nézzen vissza később.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Probléma van a fiókadatok lekérésével. További információkért ellenőrizze a naplóit.", + "There is no such account registered." : "Nincs ilyen fiók regisztrálva.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nem sikerült lekérni a fiókadatokat, mert a próbakiszolgáló nem érhető el. Nézzen vissza később.", + "Deleting the hosted signaling server account failed. Please check back later." : "A külső jelzőkiszolgáló fiókjának törlése nem sikerült. Nézzen vissza később.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nem sikerült törölni a fiókot, mert a próbakiszolgáló helytelenül viselkedett. Nézzen vissza később.", + "There is a problem with deleting the account. Please check your logs for further information." : "Probléma van a fiók törlésével. További információkért ellenőrizze a naplóit.", + "Too many requests are sent from your servers address. Please try again later." : "Túl sok kérés lett küldve a kiszolgáló címéről. Próbálja újra később.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nem sikerült törölni a fiókot, mert a próbakiszolgáló nem érhető el. Nézzen vissza később.", + "Note to self" : "Saját jegyzet", + "A place for your private notes, thoughts and ideas" : "Egy hely a saját jegyzeteknek, gondolatoknak, ötleteknek", + "Transcript is AI generated and may contain mistakes" : "A leirat MI által lett előállítva, és hibákat tartalmazhat", + "Summary is AI generated and may contain mistakes" : "Az összefoglaló MI által lett előállítva, és hibákat tartalmazhat", + "Let's get started!" : "Kezdjünk neki!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "A **Nextcloud Beszélgetés** egy biztonságos, saját kiszolgálású kommunikációs platform, amely zökkenőmentesen épül be a Nextcloud ökoszisztémába.\\An\n\n#### A Nextcloud Beszélgetés kulcsfontosságú funkciói:\n\n* Csevegés privát és csoportos beszélgetésekkel\n* Hang- és videóhívás\n* Fájlmegosztás, és integráció más nextcloudos alkalmazással\n* Testreszabható beszélgetésbeállítások, moderálási és adatvédelmi eszközök\n* Webre, asztali és mobilos (iOS és Android) alkalmazásként\n* Privát és biztonságos kommunikáció\n\n Tudjon meg többet a [felhasználói dokumentációból](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Üdvözöljük a Nextcloud Beszélgetésben\n\nA Nextcloud Beszélgetés egy privát és sokoldalú üzenetküldő alkalmazás, amely beépül a Nextcloudba. Csevegjen privát vagy csoportos beszélgetésekben, működjön együtt hang- és videóhívások használatával, szervezzen webinárokat és eseményeket, szabja testre a beszélgetéseit, és ez csak a kezdte.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formázza gazdagon a szöveget\n\nA Nextcloud Beszélgetésben használhatja a Markdown szintaxist az üzenetek formázásához. Például, alkalmazzon **félkövér** vagy *dőlt* formázást, esetleg `emelje ki a szöveget kódként`. Akár táblázatokat és címsorokat is hozzáadhat a szövegéhez.\n\nJavítania kell egy elírást, vagy módosítaná a formázást? Szerkessze az üzenetmenü „Üzenet szerkesztése” lehetőségével.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Adjon hozzá mellékleteket és hivatkozásokat\n\nMellékeljen fájlokat a Nextcloud Központból a „+” gomb használatával. Osszon meg elemeket a Fájlokból és más nextcloudos alkalmazásokból. Egyes alkalmazások akár interaktív modulokat is támogatnak, például a Szöveg alkalmazás.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Engedje, hogy folyjon a beszélgetés: említsen meg felhasználók, reagáljon az üzenetekre\n\nMegemlíthet mindenkit a(z) %s használatával, vagy megemlíthet konkrét résztvevőket is, ha kiválasztja a nevüket a listából egy „@” beírása után.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Válaszolhat az üzenetekre, továbbíthatja más csevegésekbe és embereknek, vagy másolhatja az üzenet tartalmát.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Tegyen többet az Okos választóval\n\nEgyszerűen írja be a „/” karaktert, vagy ugorjon a „+” menühöz, hogy megnyissa az Okos választót, amellyel különféle tartalmakat mellékelhet az üzeneteihez. Beállítja az Okos választót, hogy elemeket adjon hozzá nextcloudos alkalmazásokból, GIF-eket, térképhelyeket és MI által előállított tartalmat és egyebeket osszon meg.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Kezelje a beszélgetések beállításait\n\nA beszélgetés menüjében különböző beállításokat talál, mint például:\n* beszélgetés információinak szerkesztése,\n* értesítések kezelése,\n* számos moderációs szabály megadása,\n* hozzáférés és biztonság beállítása,\n* botok engedélyezése,\n* és egyebek.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Egyesült Arab Emírségek", + "Afghanistan" : "Afganisztán", + "Antigua and Barbuda" : "Antigua és Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánia", + "Armenia" : "Örményország", + "Angola" : "Angola", + "Antarctica" : "Antarktisz", + "Argentina" : "Argentína", + "American Samoa" : "Amerikai Szamoa", + "Austria" : "Ausztria", + "Australia" : "Ausztrália", + "Aruba" : "Aruba", + "Åland Islands" : "Åland-szigetek", + "Azerbaijan" : "Azerbajdzsán", + "Bosnia and Herzegovina" : "Bosznia-Hercegovina", + "Barbados" : "Barbadosz", + "Bangladesh" : "Banglades", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Szultanátus", + "Bolivia, Plurinational State of" : "Bolívia", + "Bonaire, Sint Eustatius and Saba" : "Karibi Hollandia", + "Brazil" : "Brazília", + "Bahamas" : "Bahamák", + "Bhutan" : "Bhután", + "Bouvet Island" : "Bouvet-sziget", + "Botswana" : "Botswana", + "Belarus" : "Fehéroroszország", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kókusz (Keeling)-szigetek", + "Congo, the Democratic Republic of the" : "Kongói Demokratikus Köztársaság", + "Central African Republic" : "Közép-afrikai Köztársaság", + "Congo" : "Kongó", + "Switzerland" : "Svájc", + "Côte d'Ivoire" : "Elefántcsontpart", + "Cook Islands" : "Cook-szigetek", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kína", + "Colombia" : "Kolumbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Zöld-foki Köztársaság", + "Curaçao" : "Curaçao", + "Christmas Island" : "Karácsony-szigetek", + "Cyprus" : "Ciprus", + "Czechia" : "Csehország", + "Germany" : "Németország", + "Djibouti" : "Dzsibuti", + "Denmark" : "Dánia", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikai Köztársaság", + "Algeria" : "Algéria", + "Ecuador" : "Ecuador", + "Estonia" : "Észtország", + "Egypt" : "Egyiptom", + "Western Sahara" : "Nyugat-Szahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanyolország", + "Ethiopia" : "Etiópia", + "Finland" : "Finnország", + "Fiji" : "Fidzsi-szigetek", + "Falkland Islands (Malvinas)" : "Falkland-szigetek", + "Micronesia, Federated States of" : "Mikronézia", + "Faroe Islands" : "Feröer-szigetek", + "France" : "Franciaország", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Egyesült Királyság", + "Grenada" : "Grenada", + "Georgia" : "Grúzia", + "French Guiana" : "Francia Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghána", + "Gibraltar" : "Gibraltár", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Egyenlítői-Guinea", + "Greece" : "Görög", + "South Georgia and the South Sandwich Islands" : "Dél-Georgia és a Dél-Sandwich-szigetek", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard-sziget és McDonald-szigetek", + "Honduras" : "Honduras", + "Croatia" : "Horvátország", + "Haiti" : "Haiti", + "Hungary" : "Magyarország", + "Indonesia" : "Indonézia", + "Ireland" : "Írország", + "Israel" : "Izrael", + "Isle of Man" : "Man-sziget", + "India" : "India", + "British Indian Ocean Territory" : "Brit tengerentúli területek", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irán", + "Iceland" : "Izland", + "Italy" : "Olaszország", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordánia", + "Japan" : "Japán", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizisztán", + "Cambodia" : "Kambodzsa", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Saint Kitts és Nevis", + "Korea, Democratic People's Republic of" : "Észak-Korea", + "Korea, Republic of" : "Dél-Korea", + "Kuwait" : "Kuvait", + "Cayman Islands" : "Kajmán-szigetek", + "Kazakhstan" : "Kazahsztán", + "Lao People's Democratic Republic" : "Laoszi Népi Demokratikus Köztársaság", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesotho", + "Lithuania" : "Litvánia", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettország", + "Libya" : "Líbia", + "Morocco" : "Marokkó", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldovai Köztársaság", + "Montenegro" : "Montenegró", + "Saint Martin (French part)" : "Szent Márton-sziget (Francia rész)", + "Madagascar" : "Madagaszkár", + "Marshall Islands" : "Marshall-szigetek", + "North Macedonia" : "Észak-Macedónia", + "Mali" : "Mali", + "Myanmar" : "Mianmar", + "Mongolia" : "Mongólia", + "Macao" : "Makaó", + "Northern Mariana Islands" : "Északi-Mariana-szigetek", + "Martinique" : "Martinique", + "Mauritania" : "Mauritánia", + "Montserrat" : "Montserrat", + "Malta" : "Málta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldív-szigetek", + "Malawi" : "Malawi", + "Mexico" : "Mexikó", + "Malaysia" : "Malajzia", + "Mozambique" : "Mozambik", + "Namibia" : "Namíbia", + "New Caledonia" : "Új-Kaledónia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk-sziget", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Hollnadia", + "Norway" : "Norvégia", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Új-Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francia Polinézia", + "Papua New Guinea" : "Pápua Új-Guinea", + "Philippines" : "Fülöp-szigetek", + "Pakistan" : "Pakisztán", + "Poland" : "Lengyelország", + "Saint Pierre and Miquelon" : "Saint-Pierre és Miquelon", + "Pitcairn" : "Pitcairn-szigetek", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palesztína", + "Portugal" : "Portugália", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Románia", + "Serbia" : "Szerbia", + "Russian Federation" : "Oroszország", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Szaúd-Arábia", + "Solomon Islands" : "Salamon-szigetek", + "Seychelles" : "Seychelle-szigetek", + "Sudan" : "Szudán", + "Sweden" : "Svédország", + "Singapore" : "Szingapúr", + "Saint Helena, Ascension and Tristan da Cunha" : "Szent Ilona, Ascension és Tristan da Cunha", + "Slovenia" : "Szlovénia", + "Svalbard and Jan Mayen" : "Svalbard és Jan Mayen", + "Slovakia" : "Szlovákia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Szenegál", + "Somalia" : "Szomália", + "Suriname" : "Suriname", + "South Sudan" : "Dél-Szudán", + "Sao Tome and Principe" : "São Tomé és Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Szent Márton-sziget (Holland rész)", + "Syrian Arab Republic" : "Szíriai Arab Köztársaság", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- és Caicos-szigetek", + "Chad" : "Csád", + "French Southern Territories" : "Francia déli területek", + "Togo" : "Togo", + "Thailand" : "Thaiföld", + "Tajikistan" : "Tádzsikisztán", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Kelet-Timor", + "Turkmenistan" : "Türkmenisztán", + "Tunisia" : "Tunézia", + "Tonga" : "Tonga", + "Turkey" : "Törökország", + "Trinidad and Tobago" : "Trinidad és Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan", + "Tanzania, United Republic of" : "Tanzánia", + "Ukraine" : "Ukrajna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Amerikai Egyesült Államok lakatlan külbirtokai", + "United States of America" : "Amerikai Egyesült Államok", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Üzbegisztán", + "Holy See" : "Apostoli Szentszék", + "Saint Vincent and the Grenadines" : "Saint Vincent és a Grenadine-szigetek", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Brit Virgin-szigetek", + "Virgin Islands, U.S." : "Amerikai Virgin-szigetek", + "Viet Nam" : "Vietnám", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis és Futuna", + "Samoa" : "Szamoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Dél-afrikai Köztársaság", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Háttér elhomályosítása", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nem sikült a WASM fájlok betöltési támogatásának ellenőrzése. Ellenőrizze kézileg, hogy a webkiszolgálója kiszolgálja a `.wasm` fájlokat.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "A webkiszolgálója nincs helyesen beállítva a `.wasm` fájlok kiszolgálására. Ez általában az Nginx konfiguráció hibája. A háttér elhomályosításához szükség van a `.wasm` kiszolgálására. Hasonlítsa össze a Nginx konfigurációját a dokumentációban javasolttal.", + "Talk configuration values" : "A Beszélgetés konfigurációs értékei", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "A maximális híváshossz kényszerítése csak rendszerszintű cron esetén támogatott. Engedélyezze a rendszerszintű cront, vagy távolítsa el a `max_call_duration` konfigurációt.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "A kicsi `max_call_duration` értékek (jelenleg ennyi: %d) a műszaki korlátok miatt nem tarthatóak be. A háttérfeladat csak 5 percenként fut, így saját felelősségre használja.", + "Federation" : "Föderáció", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Erősen ajánlott a „memcache.locking” használata, ha a Beszélgetésben engedélyezve van a föderáció.", + "High-performance backend" : "Nagy teljesítményű háttérrendszer", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nincs Nagy teljesítményű háttérrendszer beállítva – A Nextcloud Talk enélkül történő futtatása csak nagyon kis hívások (legfeljebb 2-3 résztvevő) esetén skálázódik. Állítson be egy nagy teljesítményű háttérrendszert, hogy a több résztvevős hívások is zökkenőmentesek legyenek.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "A Nagy teljesítményű háttérrendszer „conversation_cluster” módban történő futtatása elavult, és nem lesz támogatva a következő verzióban. A nagy teljesítményű háttérrendszer ma már támogatja a valódi klaszterezést, így azt kell helyette használni.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "A több Nagy teljesítményű háttérrendszer megadása elavult, és nem lesz támogatva a következő verzióban. Helyette egy terheléselosztót kell telepíteni klaszterezett jelzőkiszolgálókkal, majd be kell állítani a Beszélgetés beállításaiban.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A(z) %1$s algoritmushoz használt nyilvános kulcs nem felel meg a tárolt privát kulcsnak. A probléma megoldásához futtassa ezt: %2$s.", + "High-performance backend not configured correctly. Run %s for details." : "A Nagy teljesítményű háttérrendszer nincs helyesen beállítva. A részletekért futtassa ezt: %s.", + "High-performance backend not configured correctly" : "A Nagy teljesítményű háttérrendszer nincs helyesen beállítva", + "Error: Cannot connect to server" : "Hiba: Nem lehet csatlakozni a kiszolgálóhoz", + "Error: Server did not respond with proper JSON" : "Hiba: A kiszolgáló nem megfelelő JSON üzenettel válaszolt", + "Error: Certificate expired" : "Hiba: Lejárt tanúsítvány", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hiba: A Nextcloud kiszolgáló és a Nagy teljesítményű háttérrendszer rendszerideje nincs szinkronban. Győződjön meg arról, hogy mindkét kiszolgáló ugyanahhoz az időkiszolgálóhoz kapcsolódik, vagy szinkronizálja őket kézileg.", + "Could not get version" : "Nem lehet lekérni a verziót", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hiba: Futó verzió: {version}; A kiszolgálót frissíteni kell, hogy kompatibilis legyen a Beszélgetés ezen verziójával", + "Error: Server responded with: {error}" : "Hiba: A kiszolgáló válasza: {error}", + "Error: Unknown error occurred" : "Hiba: Ismeretlen hiba történt", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Figyelmeztetés: futó verzió: {version}; a kiszolgáló nem támogatja a jelenlegi Beszélgetés verzió összes funkcióját, hiányzó funkciók: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Erősen ajánlott, hogy állítson be egy memória-gyorsítótárat, ha a Nextcloud Beszélgetést egy Nagy teljesítményű háttérrendszerrel futtatja.", + "Client Push" : "Kliensleküldés", + "Client Push is installed, this improves the punctuality of Talk notifications." : "A Kliensleküldés telepítve van, ez növeli a Beszélgetés értesítéseinek pontosságát.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "A {notify_push} nincs telepítve. Ez késleltetett Beszélgetés értesítésekhez vezethet.", + "Recording backend" : "Felvételi háttérrendszer", + "Using the recording backend requires a High-performance backend." : "A felvételi háttérrendszerhez szükség van a Nagy teljesítményű háttérrendszerre.", + "No recording backend configured" : "Nincs felvételi háttérrendszer beállítva", + "SIP configuration" : "SIP beállítások", + "Using the SIP functionality requires a High-performance backend." : "A SIP funkcionalitáshoz szükség van a Nagy teljesítményű háttérrendszerre.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "A hozzárendelt Beszélgetés telefonszámok nem kezdődhetnek +-szal vagy 0-val. Távolítsa el vagy frissítse a következő számokat:\n{list}", + "No SIP backend configured" : "Nincs SIP háttérrendszer beállítva", + "Invalid date, date format must be YYYY-MM-DD" : "Érvénytelen dátum, a dátumnak YYYY-MM-DD formátumúnak kell lennie", + "Conversation not found" : "Beszélgetés nem található", + "Path is already shared with this conversation" : "Az útvonal már meg van osztva ezzel a beszélgetéssel", + "Chat, video & audio-conferencing using WebRTC" : "Csevegés, video- és hangkonferencia WebRTC használatával", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Csevegés, video- és hangkonferencia WebRTC használatával\n\n* 💬 **Csevegés** A Nextcloud Beszélgetés egyszerű szöveges csevegést tartalmaz, amellyel fájlokat oszthat meg vagy tölthet fel a Nextcloud Fájlok alkalmazásba vagy a helyi eszközére, és megemlíthet más résztvevőket.\n* 👥 **Privát, csoportos, nyilvános és jelszóval védett hívások!** Hívjon meg valakit, egy teljes csoportot vagy küldjön egy nyilvános hivatkozást a hívásba való meghíváshoz.\n* 🌐 **Föderált csevegések** Csevegjen más Nextcloud-felhasználókkal a saját kiszolgálóikon\n* 💻 **Képernyőmegosztás!** Ossza meg képernyőjét a hívása résztvevőivel.\n* 🚀 **Integráció más Nextcloud alkalmazásokkal**, mint a Fájlok, Naptár, Felhasználói állapot, Irányítópult, Folyamat, Térképek, Okos választó, Névjegyek, Kártyák és még sok más.\n* 🌉 **Szinkronizáljon más csevegőmegoldásokkal** Azáltal, hogy a [Matterbridge](https://github.com/42wim/matterbridge/) integrálva lett a Beszélgetéssel, számos más csevegőmegoldást integrálhat a Nextcloud Beszélgetésbe, és fordítva.", + "Leave call" : "Hívás elhagyása", + "Navigating away from the page will leave the call in {conversation}" : "Az oldalról való elnavigálással elhagyja a hívást itt: {conversation}", + "Stay in call" : "Hívásban maradás", + "Error occurred when getting the conversation information" : "Hiba történt a beszélgetés információinak lekérése során", + "Discuss this file" : "Fájl megbeszélése", + "Share this file with others to discuss it" : "Fájl megosztása másokkal, hogy beszélgethessenek róla", + "Share this file" : "Fájl megosztása", + "Join conversation" : "Csatlakozás a beszélgetéshez", + "This conversation is password-protected." : "Ez a beszélgetés jelszóval védett.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Többszöri sikertelen bejelentkezési kísérletet észleltünk az IP-címéről. A legközelebbi kísérlete így 30 másodperccel késleltetve lesz.", + "The password is wrong. Try again." : "Hibás jelszó. Próbálja újra.", + "Password" : "Jelszó", + "Submit" : "Beküldés", + "Error requesting the password." : "Hiba a jelszó kérésekor.", + "Request password" : "Jelszó kérése", + "This conversation has ended" : "Ez a beszélgetés véget ért", + "Error occurred when joining the conversation" : "Hiba történt a beszélgetéshez csatlakozás során", + "Close Talk sidebar" : "Beszélgetés oldalsáv bezárása", + "Open Talk sidebar" : "Beszélgetés oldalsáv megnyitása", + "Everyone" : "Mindenki", + "Users and moderators" : "Felhasználók és moderátorok", + "Moderators only" : "Csak moderátorok", + "Disable calls" : "Hívások letiltása", + "Save changes" : "Változások mentése", + "Saving …" : "Mentés…", + "Saved!" : "Elmentve!", + "Limit to groups" : "Csoportokra korlátozás", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ha legalább egy csoport ki van választva, akkor csak a felsorolt csoportok lehetnek részesei a beszélgetésnek.", + "Guests can still join public conversations." : "A vendégek továbbra is csatlakozhatnak a nyilvános beszélgetésekhez.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Azok a felhasználók, akik már nem tudják tovább használni a Beszélgetést, továbbra is résztvevőként lesznek felsorolva a korábbi beszélgetéseikben, és a csevegőüzeneteik is meg lesznek tartva.", + "Limit using Talk" : "Beszélgetés használatának korlátozása", + "Limit creating a public and group conversation" : "Nyilvános és csoportos beszélgetés létrehozásának korlátozása", + "Limit creating conversations" : "Beszélgetés létrehozásának korlátozása", + "Limit starting a call" : "Hívásindítás korlátozása", + "Limit starting calls" : "Hívások indításának korlátozása", + "When a call has started, everyone with access to the conversation can join the call." : "Ha egy hívás elkezdődött, akkor mindenki csatlakozhat a híváshoz, aki hozzáfér a beszélgetéshez.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "A következő botok vannak telepítve erre a kiszolgálóra. A dokumentációban megtalálja annak a részleteit, hogy {linkstart1}miként készítse el a saját botját{linkend} vagy {linkstart2}botjait{linkend}, és hogyan engedélyezze őket a kiszolgálón.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nincsenek botok telepítve erre a kiszolgálóra. A dokumentációban megtalálja annak a részleteit, hogy {linkstart1}miként készítse el a saját botját{linkend} vagy {linkstart2}botjait{linkend}, és hogyan engedélyezze őket a kiszolgálón.", + "Description is not provided" : "Nincs leírás", + "Locked for moderators" : "Zárolva a moderátorok részére", + "Enabled" : "Engedélyezve", + "Disabled" : "Letiltva", + "Bots settings" : "Botok beállításai", + "State" : "Állapot", + "Name" : "Név", + "Last error" : "Utolsó hiba", + "Total errors count" : "Összes hiba", + "Find more bots" : "További botok keresése", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "A megbízható kiszolgálók a {linkstart}Megosztási beállítások oldalon{linkend} állíthatóak be.", + "Beta" : "Béta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "A föderált csevegések és hívások már működnek. A mellékletkezelés egy jövőbeli verzióban érkezik.", + "Enable Federation in Talk app" : "Föderáció engedélyezése a Beszélgetés alkalmazásban", + "Permissions" : "Jogosultságok", + "Allow users to be invited to federated conversations" : "Engedélyezés, hogy a felhasználókat föderált beszélgetésekbe hívják meg", + "Allow users to invite federated users into conversation" : "Engedélyezés, hogy a felhasználók föderált felhasználókat hívjanak meg", + "Only allow to federate with trusted servers" : "A föderáció csak megbízható kiszolgálókkal való engedélyezése", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Ha legalább egy csoport ki van választva, akkor csak a felsorolt csoportok tagjai hívhatnak meg föderált felhasználókat a beszélgetésekbe.", + "Groups allowed to invite federated users" : "Föderált felhasználókat meghívható csoportok", + "Select groups …" : "Csoportok kiválasztása…", + "All messages" : "Összes üzenet", + "@-mentions only" : "Csak a @-említések", + "Off" : "Ki", + "General settings" : "Általános beállítások", + "Default notification settings" : "Alapértelmezett értesítési beállítások", + "Default group notification" : "Alapértelmezett csoportértesítés", + "Default group notification for new groups" : "Alapértelmezett csoportértesítés az új csoportok számára", + "Integration into other apps" : "Integráció más alkalmazásokba", + "Allow conversations on files" : "Beszélgetések engedélyezése a fájlokon", + "Allow conversations on public shares for files" : "Beszélgetések engedélyezése a fájlokon a nyilvános megosztásokban", + "End-to-end encrypted calls" : "Végpontok közti titkosítással rendelkező hívások", + "Enable encryption" : "Titkosítás engedélyezése", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "A beállított SIP-híddal és végpontok közti titkosítással rendelkező hívásokhoz a Nagy teljesítményű háttérrendszer és a SIP-híd új verziója szükséges.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "A mobilkliensek pillanatnyilag nem támogatják a végpontok közti titkosítással rendelkező hívásokat.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "A fenti gombra kattintva az űrlapon szereplő információk el lesznek küldve a Struktur AG kiszolgálóinak. További információt a {linkstart}spreed.eu{linkend} oldalon talál.", + "Pending" : "Függőben", + "Error" : "Hiba", + "Blocked" : "Blokkolva", + "Active" : "Aktív", + "Expired" : "Elévült", + "Never" : "Soha", + "The trial could not be requested. Please try again later." : "Nem lehetett próbaverziót kérni. Próbája újra később.", + "The account could not be deleted. Please try again later." : "A fiókot nem sikerült törölni. Próbája újra később.", + "Hosted High-performance backend" : "Külső kiszolgálású Nagy teljesítményű háttérrendszer", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Partnerünk, a Struktur AG szolgáltatásként nyújt jelzőkiszolgálót. Ehhez csak ki kell töltenie az alábbi űrlapot, és a Nextcloud kérni fogja. Miután beállította az Ön számára a kiszolgálót, a hitelesítő adatok automatikusan kitöltésre kerülnek. Ez felülírja a meglévő jelzőkiszolgáló beállításait.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ha a Nagy teljesítményű háttérrendszer fiókja STUN vagy TURN funkcionalitást tartalmaz, akkor a beállítások aszerint fognak frissülni.", + "URL of this Nextcloud instance" : "Ezen Nextcloud-példány webcíme", + "Full name of the user requesting the trial" : "A próbát kérő felhasználó teljes neve", + "Email of the user" : "A felhasználó e-mail-címe", + "Language" : "Nyelv", + "Country" : "Ország", + "Request signaling server trial" : "Jelzőkiszolgáló próbájának kérése", + "You can see the current status of your hosted signaling server in the following table." : "A következő táblázatban láthatja a külső üzemeltetésű jelzőkiszolgáló jelenlegi állapotát.", + "Status" : "Állapot", + "Created at" : "Létrehozás ideje:", + "Expires at" : "Elévülés ideje:", + "Limits" : "Korlátok", + "STUN included" : "STUN-t tartalmaz", + "Yes" : "Igen", + "No" : "Nem", + "TURN included" : "TURN-t tartalmaz", + "Delete the signaling server account" : "A jelzőkiszolgáló-fiók törlése", + "_%n user_::_%n users_" : ["%n felhasználó","%n felhasználó"], + "Installed version: {version}" : "Telepített verzió: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Telepítheti a Matterbridge-dzet, hogy összekapcsolja a Nextcloud Beszélgetés alkalmazást néhány további szolgáltatással. További részletekért keresse fel a {linkstart1}GitHub oldalukat{linkend}. Az alkalmazás letöltése és telepítése eltarthat egy ideig. Időtúllépés esetén telepítse kézzel az {linkstart2}alkalmazástárból{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "A Matterbridge binárisa hibás jogosultságokkal rendelkezik. Győződjön meg arról, hogy a Matterbridge bináris fájljának helyes a tulajdonosa, és végrehajtható. Itt található: „/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "A Matterbridge binárisa nem található, vagy nem futtatható.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "A konfiguráción keresztül kézileg is beállíthatja a Matterbridge binárisának elérési útját. További információt a {linkstart}Matterbridge integrációs dokumentációjában{linkend} talál.", + "Downloading …" : "Letöltés…", + "Install Talk Matterbridge" : "Beszélgetés Matterbridge telepítése", + "An error occurred while installing the Matterbridge app" : "Hiba történt a Matterbridge alkalmazás telepítésekor", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Hiba történt a Beszélgetés Matterbridge telepítése során. Telepítse kézileg.", + "Failed to execute Matterbridge binary." : "A Matterbridge binárisának végrehajtása sikertelen.", + "Matterbridge integration" : "Matterbridge integráció", + "Enable Matterbridge integration" : "Matterbridge integráció engedélyezése", + "Status: Checking connection" : "Állapot: kapcsolat ellenőrzése", + "OK: Running version: {version}" : "OK: Futtatott verzió: {version}", + "Error: Server seems to be a Signaling server" : "Hiba: A kiszolgáló jelzőkiszolgálónak tűnik", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hiba: A Nextcloud-kiszolgáló és a felvételi háttérrendszer kiszolgálóján eltérő a rendszeridő. Győződjön meg arról, hogy mindkét kiszolgáló ugyanahhoz az időkiszolgálóhoz kapcsolódik, vagy szinkronizálja kézileg az időket.", + "Recording backend URL" : "Felvételi háttérrendszer webcíme", + "Validate SSL certificate" : "SSL tanúsítvány érvényesítése", + "Delete this server" : "Ezen kiszolgáló törlése", + "Test this server" : "Kiszolgáló tesztelése", + "Disabled for all calls" : "Minden hivásban letiltva", + "Enabled for all calls" : "Minden hívásban engedélyezve", + "Configurable on conversation level by moderators" : "A moderátorok beszélgetési szinten konfigurálhatók", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Az „upload_max_filesize” vagy a „post_max_size” PHP-beállítás legfeljebb {maxUpload} sebességű fájlfeltöltést tesz lehetővé.", + "Recording backend settings saved" : "A felvételi háttérrendszer beállításai mentve", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "A moderátorok a beszélgetés szintjén engedélyezhetik a hozzájárulást. A rögzítéshez az összes résztvevő beleegyezése szükséges, még mielőtt csatlakoznának bármelyik híváshoz ebben a beszélgetésben.", + "The consent to be recorded will be required for each participant before joining every call." : "A rögzítéshez az összes résztvevő beleegyezése szükséges, még mielőtt egy híváshoz csatlakoznának.", + "The consent to be recorded is not required." : "Nem szükséges hozzájárulás a felvételhez.", + "Recording backend configuration is only possible with a High-performance backend." : "A felvételi háttérrendszer beállítása csak Nagy teljesítményű háttérrendszer esetén lehetséges.", + "Add a new recording backend server" : "Új felvételi háttérrendszer hozzáadása", + "Shared secret" : "Megosztott titok", + "Recording consent" : "Felvételi hozzájárulás", + "Recording transcription" : "Felvétel leiratozása", + "Automatically transcribe call recordings with a transcription provider" : "Hívásfelvételek automatikus leiratozása egy szolgáltató segítségével", + "Automatically summarize call recordings with transcription and summary providers" : "Hívásfelvételek automatikus összefoglalása leiratozási és összefoglalási szolgáltatókkal", + "SIP configuration saved!" : "SIP konfiguráció mentve.", + "SIP configuration is only possible with a High-performance backend." : "A SIP konfiguráció csak Nagy teljesítményű háttérrendszer mellett lehetséges.", + "Enable SIP Dial-out option" : "SIP kitárcsázási lehetőség engedélyezése", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "A jelzőkiszolgáló frissítése szükséges a SIP kitárcsázási funkció támogatásához.", + "Do not show SIP Dial-out caller number" : "Ne jelenítse meg a SIP kitárcsázási számot", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "A névtelen tag megjelenítése mint „ismeretlen” vagy „visszatartott szám”", + "Dial-out number" : "Kitárcsázási szám", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formátumú szám, mely tartalék hívószámként szolgál a kimenő hívásokhoz", + "Dial-out prefix" : "Kitárcsázási előhívó", + "Prefix to configured user number for outgoing calls (default is `+`)" : "A kimenő hívásokhoz használt felhasználói szám (alapértelmezés: `+`)", + "Restrict SIP configuration" : "A SIP beállítások korlátozása", + "Enable SIP configuration" : "SIP beállítások engedélyezése", + "Only users of the following groups can enable SIP in conversations they moderate" : "Csak az alábbi csoportok felhasználói engedélyezhetik a SIP-et az általuk moderált beszélgetésekben", + "Phone number (Country)" : "Telefonszám (ország)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ez az információt meghívó e-mailben lesz elküldve, és az oldalsávon jelenik meg az összes résztvevő számára.", + "Nextcloud base URL" : "Nextcloud alapwebcím", + "Talk Backend URL" : "Beszélgetés háttérrendszer-webcím", + "WebSocket URL" : "WebSocket webcím", + "Available features" : "Elérhető funkciók", + "Error: Websocket connection failed" : "Hiba: Nem sikerült a WebSocket kapcsolat", + "Error code" : "Hibakód", + "Error message" : "Hibaüzenet", + "Error: Websocket connection failed. Check browser console" : "Hiba: Nem sikerült a WebSocket kapcsolat. Ellenőrizze a böngészőkonzolt.", + "High-performance backend URL" : "Nagy teljesítményű háttérrendszer webcíme", + "Missing High-performance backend warning hidden" : "A hiányzó Nagy teljesítményű háttérrendszer figyelmeztetése elrejtve", + "High-performance backend settings saved" : "A Nagy teljesítményű háttérrendszer beállításai mentve", + "Nextcloud Talk setup not complete" : "A Nextcloud Beszélgetés beállítása nincs kész", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Vegye figyelembe, hogy a 2 résztvevősnél nagyobb hívásoknál, a Nagy teljesítményű háttérrendszer nélkül, a résztvevők kapcsolódási problémákat, és magas terhelést tapasztalhatnak az eszközükön.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Telepítse a Nagy teljesítményű háttérrendszert, hogy biztosítsa a több résztvevős hívások zökkenőmentes működését.", + "Nextcloud portal" : "Nextcloud portál", + "Quick installation guide" : "Gyors telepítési útmutató", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "A Nagy teljesítményű háttérrendszer szükséges a több résztvevős hívásokhoz és beszélgetésekhez. A háttérrendszer nélkül az összes résztvevőnek egyesével kell feltölteni a videót az összes többi résztvevőnek, ami nagy valószínűséggel kapcsolódási problémákat és magas terhelést okoz a résztvevő eszközökön.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Erősen ajánlott elosztott gyorsítótárat beállítani, ha a Nextcloud Beszélgetést a Nagy teljesítményű háttérrendszerrel használja.", + "Add High-performance backend server" : "Nagy teljesítményű háttérrendszer hozzáadása", + "Warn about connectivity issues in calls with more than 2 participants" : "Figyelmeztetés a kapcsolódási problémákra, ha a hívások 2-nél több résztvevőt tartalmaznak", + "STUN server URL" : "STUN-kiszolgáló webcíme", + "The server address is invalid" : "A kiszolgálócím érvénytelen", + "STUN settings saved" : "STUN beállítások mentve", + "STUN servers" : "STUN kiszolgálók", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN kiszolgáló a router mögötti résztvevők nyilvános IP-címének megállapítására szolgál.", + "Add a new STUN server" : "Új STUN-kiszolgáló hozzáadása", + "{schema} scheme must be used with a domain" : "A(z) {schema} sémát egy domainen kell használni", + "{option1} and {option2}" : "{option1} és {option2}", + "{option} only" : "csak {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: A TURN-kiszolgáló visszatért a sikeres ICE-jelöltekkel", + "Error: No working ICE candidates returned by the TURN server" : "Hiba: A TURN-kiszolgáló nem adott vissza egyetlen működő ICE-jelöltet sem", + "Testing whether the TURN server returns ICE candidates" : "Tesztelés, hogy a TURN-kiszolgáló visszatér-e az ICE-jelöltekkel", + "TURN server schemes" : "TURN-kiszolgáló sémái", + "TURN server URL" : "TURN-kiszolgáló webcíme", + "TURN server secret" : "TURN-kiszolgáló titka", + "TURN server protocols" : "TURN-kiszolgáló protokolljai", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN kiszolgáló a tűzfal mögött lévő résztvevők forgalmának proxyzására szolgál. Ha az egyes résztvevők nem tudnak csatlakozni másokhoz, akkor valószínűleg TURN kiszolgálóra van szükség. A telepítési utasításokért lásd {linkstart}ezt a dokumentációt{linkend}.", + "TURN settings saved" : "TURN beállítások mentve", + "TURN servers" : "TURN-kiszolgálók", + "Add a new TURN server" : "Új TURN-kiszolgáló hozzáadása", + "Failed" : "Sikertelen", + "OK" : "Rendben", + "Checking …" : "Ellenőrzés…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Sikertelen: a WebAssembly le van tiltva, vagy nem támogatott ebben a böngészőben. Engedélyezze a WebAssemblyt, vagy az ellenőrzéshez használjon egy olyan böngészőt, amely támogatja.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Sikertelen: a webkiszolgáló nem helyesen adta vissza a „.wasm” és a „.tflite” fájlokat. Ellenőrizze a Beszélgetés dokumentációjának „Rendszerkövetelmények” szakaszát.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Rendben: a webkiszolgáló helyesen adta vissza a „.wasm” és a „.tflite” fájlokat.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Úgy tűnik, hogy a PHP és Apache konfiguráció nem teljes. Vegye figyelembe, hogy a PHP csak a MPM_PREFORK modullal, a PHP-FPM pedig csak az MPM_EVENT modullal használható.", + "Web server setup checks" : "Webkiszolgáló beállítási ellenőrzések", + "Files required for virtual background can be loaded" : "A virtuális háttérhez szükséges fájlok betölthetők", + "Federated user" : "Föderált felhasználó", + "Assign participants to rooms" : "A résztvevők hozzárendelése a szobákhoz", + "Configure breakout rooms" : "Szétbontott szobák beállítása", + "Number of breakout rooms" : "Szétbontott szobák száma", + "You can create from 1 to 20 breakout rooms." : "1 és 20 közti szétbontott szobát hozhat létre.", + "Assignment method" : "Hozzárendelési mód", + "Automatically assign participants" : "Résztvevők automatikus hozzárendelése", + "Manually assign participants" : "Résztvevők kézi hozzárendelése", + "Allow participants to choose" : "Engedélyezés, hogy a résztvevők választhassanak", + "Create rooms" : "Szobák létrehozása", + "Confirm" : "Megerősítés", + "Create breakout rooms" : "Szétbontott szobák létrehozása", + "Reset" : "Alaphelyzetbe állítás", + "Delete breakout rooms" : "Szétbontott szobák törlése", + "Room {roomNumber}" : "{numberNumber}. szoba", + "Current breakout rooms and settings will be lost" : "A jelenlegi szétbontott szobák és beállítások elvesznek", + "Cancel" : "Mégse", + "Unassigned participants" : "Nem hozzárendelt résztvevő", + "Back" : "Vissza", + "Assign" : "Hozzárendelés", + "Add participant \"{user}\"" : "„{user}” résztvevő hozzáadása", + "Now" : "Most", + "Invalid calendar selected" : "Érvénytelen naptár kiválasztva", + "Invalid start time selected" : "Érvénytelen kezdőidőpont kiválasztva", + "Invalid end time selected" : "Érvénytelen záróidőpont kiválasztva", + "Unknown error occurred" : "Ismeretlen hiba történt", + "Sending no invitations" : "Nem lesz meghívó kiküldve", + "{participant0} will receive an invitation" : "{participant0} meghívót fog kapni", + "{participant0} and {participant1} will receive invitations" : "{participant0} és {participant1} meghívót fog kapni", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} és még %n személy meghívót fog kapni","{participant0}, {participant1} és még %n személy meghívót fog kapni"], + "Invite {user}" : "{user} meghívása", + "Invite all users and emails in this conversation" : "Összes felhasználó és e-mail-cí meghívása ebbe a beszélgetésbe", + "Meeting created" : "Találkozó létrehozva", + "Upcoming meetings" : "Következő találkozók", + "Loading …" : "Betöltés…", + "No upcoming meetings" : "Nincs következő találkozó", + "Schedule a meeting" : "Találkozó ütemezése", + "Meeting title" : "Találkozó címe", + "From" : "Feladó", + "To" : "Címzett", + "Calendar" : "Naptár", + "Attendees" : "Résztvevők", + "No other participants to send invitations to." : "Nincs más résztvevő, akinek meghívót kellene küldeni.", + "Add attendees" : "Résztvevők hozzáadása", + "Save" : "Mentés", + "Search participants" : "Résztvevők keresése", + "No results" : "Nincs találat", + "Done" : "Kész", + "Disable live transcription" : "Élő leiratozás kikapcsolása", + "Enable live transcription (generated by AI)" : "Élő leiratozás bekapcsolása (MI által előállítva)", + "Enable live transcription (Live transcriptions app is not installed)" : "Élő leiratozás bekapcsolása (Az Élő leiratozás alkalmazás nincs telepítve)", + "Disable live translation" : "Élő fordítás bekapcsolása", + "Enable live translation (generated by AI)" : "Élő fordítás bekapcsolása (MI által előállítva)", + "Original language" : "Eredeti nyelv", + "Live translations app is not installed" : "Az Élő fordítás alkalmazás nincs telepítve", + "Original language: {languageName}" : "Eredeti nyelv: {languageName}", + "Translated language" : "Fordítás nyelve", + "Translated language: {languageName}" : "Fordítás nyelve: {languageName}", + "Raise hand" : "Kéz felemelése", + "Raise hand (R)" : "Kéz felemelése (R)", + "Lower hand" : "Kéz letétele", + "Lower hand (R)" : "Kéz letétele (R)", + "Exit full screen (F)" : "Kilépés a teljes képernyős módból (F)", + "Full screen (F)" : "Teljes képernyő (F)", + "Speaker view" : "Beszélő nézet", + "Grid view" : "Rács nézet", + "Error when trying to load the available live transcription languages" : "Hiba történt az elérhető élő leiratozási nyelvek betöltése során", + "Failed to enable live transcription" : "Nem sikerült az élő leiratozás bekapcsolása", + "Failed to enable live translations" : "Nem sikerült az élő fordítás bekapcsolása", + "Failed to disable live translations" : "Nem sikerült az élő fordítás kikapcsolása", + "Recording consent is required" : "Felvételi hozzájárulás szükséges", + "This conversation is read-only" : "Ez a beszélgetés csak olvasható", + "Conversation not found or not joined" : "A beszélgetés nem található, vagy nem csatlakozott", + "Lobby is still active and you're not a moderator" : "A váró még mindig aktív, és Ön nem moderátor", + "Connection failed" : "Nem sikerült a kapcsolat", + "Reload" : "Újratöltés", + "{nickName} raised their hand." : "{nickName} felemelte a kezét.", + "A participant raised their hand." : "Egy résztvevő felemelte a kezét.", + "Collapse stripe" : "Csík összecsukása", + "Expand stripe" : "Csík kibontása", + "Previous page of videos" : "A videók előző oldala", + "Next page of videos" : "A videók következő oldala", + "Connecting …" : "Csatlakozás…", + "Calling …" : "Hívás…", + "Waiting for {user} to join the call" : "Várakozás, hogy {user} csatlakozzon a híváshoz", + "Waiting for others to join the call …" : "Várakozás, hogy mások is csatlakozzanak a híváshoz…", + "You can invite others in the participant tab of the sidebar" : "Másokat az oldalsávon található „résztvevők” fülön tud meghívni", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Másokat az oldalsávon található „résztvevők” fülön keresztül vagy a hivatkozás megosztásával tud meghívni!", + "Share this link to invite others!" : "Mások meghívásához ossza meg ezt a hivatkozást!", + "Copy link" : "Hivatkozás másolása", + "You are not allowed to enable audio" : "Nem engedélyezheti a hangot", + "No audio. Click to select device" : "Nincs hang. Kattintson egy eszköz kiválasztásához", + "Mute audio" : "Hang némítása", + "Mute audio (M)" : "Hang némítása (M)", + "Unmute audio" : "Hang némításának feloldása", + "Unmute audio (M)" : "Hang némításának feloldása (M)", + "None" : "Nincs", + "Select a microphone" : "Válasszon mikrofont", + "Select a speaker" : "Válasszon hangszórót", + "Microphone settings" : "Mikrofonbeállítások", + "Check devices" : "Eszközök ellenőrzése", + "Access to camera was denied" : "A kamera hozzáférése letiltva", + "Error while accessing camera: It is likely in use by another program" : "Hiba történt a kamera elérésekor: valószínűleg egy másik program használja", + "Error while accessing camera" : "Hiba történt a kamera elérésekor", + "You have been muted by a moderator" : "Egy moderátor elnémította Önt", + "Hide presenter video" : "Előadó videójának elrejtése", + "You are not allowed to enable video" : "Nem engedélyezheti a videót", + "No video. Click to select device" : "Nincs videó. Kattintson egy eszköz kiválasztásához", + "Disable video" : "Videó letiltása", + "Disable video (V)" : "Videó letiltása (V)", + "Enable video" : "Videó engedélyezése", + "Enable video (V)" : "Videó engedélyezése (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése – A videó első bekapcsolásakor a kapcsolat rövid ideig meg fog szakadni", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése (V) – A videó első bekapcsolásakor a kapcsolat rövid ideig megszakad", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Videó engedélyezése. A videó első bekapcsolásakor a kapcsolat rövid ideig megszakad", + "Select a video device" : "Válasszon videóeszközt", + "Show presenter" : "Előadó megjelenítése", + "You" : "Ön", + "Mute" : "Némítás", + "Muted" : "Némítva", + "Show screen" : "Képernyő megjelenítése", + "Stop following" : "Követés felfüggesztése", + "Connection could not be established …" : "A kapcsolat nem hozható létre…", + "Connection was lost and could not be re-established …" : "A kapcsolat elveszett, és nem hozható létre újra…", + "Connection could not be established. Trying again …" : "A kapcsolat nem hozható létre. Újrapróbálkozás…", + "Connection lost. Trying to reconnect …" : "A kapcsolat elveszett. Újrapróbálkozás…", + "Connection problems …" : "Kapcsolódási problémák…", + "Collapse" : "Összecsukás", + "Expand" : "Kibontás", + "You need to be logged in to upload files" : "A fájlok feltöltéséhez be kell jelentkeznie", + "Drop your files to upload" : "Dobja ide a fájljait a feltöltéshez", + "Conversation messages" : "Beszélgetési üzenetek", + "Scroll to bottom" : "Görgetés az aljára", + "Post message" : "Üzenet küldése", + "Federated conversation" : "Föderált beszélgetés", + "Public conversation" : "Nyilvános beszélgetés", + "Favorite" : "Kedvenc", + "Banned users" : "Kitiltott felhasználók", + "Manage the list of banned users in this conversation." : "A kitiltott felhasználók kezelése ebben a beszélgetésben.", + "Manage bans" : "Kitiltások kezelése", + "No banned users" : "Nincs kitiltott felhasználó", + "Banned by:" : "Kitiltotta:", + "Date:" : "Dátum:", + "Note:" : "Megjegyzés:", + "Hide details" : "Részletek elrejtése", + "Show details" : "Részletek megjelenítése", + "Unban" : "Kitiltás visszavonása", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "A cím és a leírás a {linkstart}Naptárban ↗{linkend} változtatható meg.", + "Error while updating conversation name" : "Hiba történt a beszélgetés nevének frissítése során", + "Error while updating conversation description" : "Hiba történt a beszélgetés leírásának frissítése során", + "Enter a name for this conversation" : "Adjon meg egy nevet a beszélgetéshez", + "Edit conversation name" : "Beszélgetés nevének szerkesztése", + "Edit conversation description" : "Beszélgetés leírásának szerkesztése", + "Enter a description for this conversation" : "Adja meg a beszélgetés leírását", + "Picture" : "Kép", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Ebben a beszélgetésben a következő botok engedélyezhetők. Forduljon a rendszergazdához, hogy több botot telepítsen erre a kiszolgálóra.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nincs bot telepítve. Forduljon a rendszergazdához, hogy botot telepítsen erre a kiszolgálóra.", + "Disable" : "Letiltás", + "Enable" : "Engedélyezés", + "Breakout rooms" : "Szétbontott szobák", + "Manage breakout rooms" : "Szétbontott szobák kezelése", + "Set up breakout rooms for this conversation" : "Szobabontás beállítása a beszélgetéshez", + "Please select a valid PNG or JPG file" : "Válasszon egy érvényes PNG- vagy JPG-fájlt", + "Choose your conversation picture" : "Válassza ki a beszélgetés képét", + "Choose" : "Válasszon", + "Error setting conversation picture" : "Hiba a beszélgetés képének beállítása során", + "Could not set the conversation picture: {error}" : "Nem sikerült beállítani a beszélgetés képét: {error}", + "Error cropping conversation picture" : "Hiba a beszélgetés képének levágása során", + "Error removing conversation picture" : "Hiba a beszélgetés képének eltávolítása során", + "Set emoji as conversation picture" : "Emodzsi beállítása a beszélgetés képének", + "Set background color for conversation picture" : "Háttérszín beállítása a beszélgetés képénél", + "Upload conversation picture" : "Beszélgetés képének feltöltése", + "Choose conversation picture from files" : "Válassza ki a beszélgetés képét a fájlok közül", + "Remove conversation picture" : "Beszélgetés képének eltávolítása", + "The file must be a PNG or JPG" : "A képnek PNG-nek vagy JPG-nek kell lennie", + "Set picture" : "Kép beállítása", + "Default permissions modified for {conversationName}" : "A(z) {conversationName} alapértelmezett jogosultságai módosítva", + "Could not modify default permissions for {conversationName}" : "A(z) {conversationName} alapértelmezett jogosultságai nem módosíthatók", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "A beszélgetés résztvevőinek alapértelmezett jogosultságainak szerkesztése. Ezek a beállítások nem érintik a moderátorokat.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Az egyes résztvevőkhöz rendelt egyéni jogosultságok elvesznek, ha módosítja a jogosultságokat ebben a szakaszban.", + "All permissions" : "Összes jogosultság", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "A résztvevők elindíthatják a hívást, csatlakozhatnak egy meglévő híváshoz, engedélyezhetik a hangot, videót és a képernyőmegosztást.", + "Restricted" : "Korlátozott", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "A résztvevők csatlakozhatnak a hívásokhoz, de addig nem engedélyezhetik a hangot, videót és képernyőmegosztást, míg egy moderátor kézzel nem adja meg nekik a jogosultságot.", + "Advanced permissions" : "Speciális jogosultságok", + "Edit permissions" : "Jogosultságok szerkesztése", + "Conversation settings" : "Beszélgetésbeállítások", + "Basic Info" : "Alapvető információk", + "Personal" : "Személyes", + "Moderation" : "Moderálás", + "Setup overview" : "Telepítés áttekintése", + "Live transcription" : "Élő leiratozás", + "Live transcriptions app is not installed" : "Az Élő leiratozás alkalmazás nincs telepítve", + "Enable live transcription" : "Élő leiratozás bekapcsolása", + "Breakout Rooms" : "Szétbontott szobák", + "Matterbridge" : "Matterbridge", + "Bots" : "Botok", + "Danger zone" : "Veszélyes területet", + "Archive conversation" : "Beszélgetés archiválása", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Az archivált beszélgetések alapértelmezetten rejtve vannak a beszélgetések közül. Viszont továbbra is megjelennek, ha a beszélgetés nevére keres, vagy ha az archivált beszélgetéseket éri el.", + "Do you really want to leave \"{displayName}\"?" : "Biztos, hogy elhagyja ezt: „{displayName}”?", + "You can archive this conversation instead." : "Ehelyett archiválhatja a beszélgetést.", + "Leave conversation" : "Beszélgetés elhagyása", + "You need to promote a new moderator before you can leave the conversation" : "Új moderátort kell kineveznie, mielőtt elhagyhatja a beszélgetést", + "Delete conversation" : "Beszélgetés törlése", + "Do you really want to delete \"{displayName}\"?" : "Biztos, hogy törli ezt: „{displayName}”?", + "Error while deleting conversation" : "Hiba történt a beszélgetés törlése során", + "Delete all chat messages" : "Összes csevegési üzenet törlése", + "Do you really want to delete all messages in \"{displayName}\"?" : "Biztos, hogy törli a következő összes üzenetét: „{displayName}”?", + "Error while clearing chat history" : "Hiba a csevegés előzményeinek törlése során", + "Be careful, these actions cannot be undone." : "Legyen óvatos, ezeket a műveleteket nem lehet visszavonni.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Ha elhagyott egy beszélgetést, akkor a zárt beszélgetésekhez visszacsatlakozáshoz meghívóra lesz szüksége. A nyílt beszélgetésekhez bármikor visszacsatlakozhat.", + "Permanently delete this conversation." : "Beszélgetés végleges törlése.", + "Delete chat messages" : "Csevegési üzenetek törlése", + "Permanently delete all the messages in this conversation." : "A beszélgetés összes üzenetének végleges törlése.", + "_%n hour_::_%n hours_" : ["%n óra","%n óra"], + "_%n day_::_%n days_" : ["%n nap","%n nap"], + "_%n week_::_%n weeks_" : ["%n hét","%n hét"], + "Custom expiration time" : "Egyéni elévülési idő", + "Message expiration disabled" : "Az üzenetek elévülése ki van kapcsolva", + "Message expiration set: {duration}" : "Üzenet elévülése beállítva: {duration}", + "Error when trying to set message expiration" : "Hiba az üzenet lejáratának beállítása során", + "Message expiration" : "Üzenetek elévülése", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "A csevegőüzenetek bizonyos idő után elévülhetnek. Megjegyzés: A csevegésben megosztott fájlok nem törlődnek a tulajdonosuk számára, csak többé nem lesznek megosztva a beszélgetéssel.", + "Set message expiration" : "Üzenetek elévülésének beállítása", + "Current message expiration" : "Jelenlegi üzenet elévülése", + "Password copied to clipboard" : "A jelszó vágólapra másolva", + "Password could not be copied" : "Nem sikerült a jelszó vágólapra másolása", + "Guest access" : "Vendéghozzáférés", + "Breakout rooms are not allowed in public conversations." : "A szétbontott szobák nyilvános beszélgetésekben nincsenek engedélyezve.", + "Allow guests to join this conversation via link" : "Engedélyezés, hogy a vendégek hivatkozás használatával csatlakozhassanak a beszélgetéshez", + "Password protection" : "Jelszavas védelem", + "This conversation is password-protected. Guests need password to join" : "Ez a beszélgetés jelszóval van védve. A vendégeknek jelszó szükséges a csatlakozáshoz.", + "Password protection is needed for public conversations" : "Jelszavas védelem szükséges a nyilvános beszélgetésekhez", + "Set a password" : "Jelszó beállítása", + "Change password" : "Jelszó módosítása", + "Enter new password" : "Adjon meg egy új jelszót", + "Save password" : "Jelszó mentése", + "Copy password" : "Jelszó másolása", + "Guests are allowed to join this conversation via link" : "A vendégek hivatkozáson keresztül csatlakozhatnak a beszélgetéshez", + "Guests are not allowed to join this conversation" : "A vendégek nem csatlakozhatnak ehhez a beszélgetéshez", + "Resend invitations" : "Meghívók újraköldése", + "This conversation is open to both registered users and users created with the Guests app" : "Ez a beszélgetés nyitott a regisztrált felhasználók és a Guest alkalmazással létrehozott felhasználók számára", + "This conversation is open to registered users" : "A beszélgetés nyitva van a regisztrált felhasználók számára", + "This conversation is limited to the current participants" : "A beszélgetés a jelenlegi résztvevőkre van korlátozva", + "You opened the conversation to both registered users and users created with the Guests app" : "Elindította a beszélgetést a regisztrált és a Vendégek alkalmazásban létrehozott felhasználók számára", + "Error occurred when opening or limiting the conversation" : "Hiba történt a beszélgetés megnyitása vagy korlátozása során", + "Open conversation to registered users, showing it in search results" : "Beszélgetés megnyitása a regisztrált felhasználók számára, megjelenítve a keresési találatok közt", + "Also open to users created with the Guests app" : "Nyitva van a Vendégek alkalmazással létrehozott felhasználók számára is", + "Open conversation" : "Beszélgetés megnyitása", + "Set language spoken in calls" : "Hívásokban beszélt nyelv megadása", + "Languages could not be loaded" : "Nem sikerült a nyelvek betöltése", + "Loading languages …" : "Nyelvek betöltése…", + "Invalid language" : "Érvénytelen nyelv", + "Default language (English)" : "Alapértelmezett nyelv (angol)", + "Default live transcription language set" : "Alapértelmezett élő leiratozási nyelv beállítva", + "Live transcription language set: {languageName}" : "Beállított élő leiratozási nyelv: {languageName}", + "Error when trying to set live transcription language" : "Hiba az élő leiratozási nyelv beállítása során", + "Start time: {date}" : "Kezdési idő: {date}", + "Start time has been updated" : "Kezdési idő módosítva", + "Error occurred while updating start time" : "Hiba történt a kezdési idő frissítése során", + "Enabling the lobby will remove non-moderators from the ongoing call." : "A váró engedélyezése eltávolítja a nem moderátorokat a folyamatban lévő hívásból.", + "Enable lobby, restricting the conversation to moderators" : "Váró engedélyezése, a beszélgetés moderátorokra korlátozása", + "Meeting start time" : "A találkozó kezdési ideje", + "Start time (optional)" : "Kezdési idő (nem kötelező)", + "Import email participants" : "E-mail résztvevőinek importálása", + "You can import a list of email participants from a CSV file." : "Importálhatja az e-mail résztvevőit egy CSV-fájlból.", + "Poll drafts" : "Szavazásvázlatok", + "Browse poll drafts" : "Szavazásvázlatok tallózása", + "Error occurred when locking the conversation" : "Hiba történt a beszélgetés zárolása során", + "Error occurred when unlocking the conversation" : "Hiba történt a beszélgetés feloldása során", + "Lock conversation" : "Beszélgetés zárolása", + "This will also terminate the ongoing call." : "Ezzel a folyamatban lévő hívás is megszakad.", + "Lock the conversation to prevent anyone to post messages or start calls" : "A beszélgetés zárolása, hogy senki se tudjon üzenetet küldeni vagy hívást indítani", + "Edit" : "Szerkesztés", + "More information" : "További információk", + "Delete" : "Törlés", + "Add new bridged channel to current conversation" : "Új összekötött csatorna hozzáadása az aktuális beszélgetéshez", + "unknown state" : "ismeretlen állapot", + "running" : "fut", + "not running, check Matterbridge log" : "nem fut, ellenőrizze a Matterbridge naplóját", + "not running" : "nem fut", + "Bridge saved" : "Híd mentve", + "You can bridge channels from various instant messaging systems with Matterbridge." : "A Matterbridge segítségével összekötheti a különböző azonnali üzenetküldő rendszerek csatornáit.", + "More info on Matterbridge" : "Bővebben a Matterbridge-ről", + "Messaging systems" : "Üzenetküldő rendszerek", + "Enable bridge" : "Híd engedélyezése", + "Show Matterbridge log" : "Matterbridge napló megjelenítése", + "Log content" : "Naplótartalom", + "Only moderators are allowed to mention @all" : "Csak a moderátorok említhetik ezt meg: @all", + "All participants are allowed to mention @all" : "Az összes résztvevő megemlítheti ezt: @all", + "Participants are now allowed to mention @all." : "A résztvevők most már megemlíthetik ezt: @all.", + "Mentioning @all has been limited to moderators." : "Már csak a moderátorok említhetik ezt meg: @all.", + "Allow participants to mention @all" : "Engedélyezés, hogy a résztvevők megemlíthessék ezt: @all", + "Mention permissions" : "Megemlítési engedély", + "Notifications" : "Értesítések", + "Notify about calls in this conversation" : "Értesítés a hívásokról ebben a beszélgetésben", + "Important conversation" : "Fontos beszélgetés", + "\"Do not disturb\" user status is ignored for important conversations" : "A „Ne zavarjanak” felhasználói állapot figyelmen kívül hagyása a fontos beszélgetéseknél", + "Sensitive conversation" : "Érzékeny beszélgetés", + "Message preview will be disabled in conversation list and notifications" : "Az üzenet-előnézet le lesz tiltva a beszélgetési listában és az értesítésekben", + "Recording consent is required for calls in this conversation" : "Felvételi hozzájárulás szükséges a beszélgetés hívásaihoz", + "Recording consent is not required for calls in this conversation" : "Nem szükséges a felvételi hozzájárulás a beszélgetés hívásaihoz", + "Recording consent requirement was updated" : "A felvételi hozzájárulási követelmény frissítve lett", + "Error occurred while updating recording consent" : "Hiba történt a felvételi hozzájárulás frissítése során", + "Recording Consent" : "Felvételi hozzájárulás", + "Recording consent cannot be changed once a call or breakout session has started." : "A felvételi hozzájárulás a hívás indítása vagy a szétbontott szobák létrehozása után nem módosítható.", + "Require recording consent before joining call in this conversation" : "Hozzájárulás megkövetelése a beszélgetés hívásaihoz való csatlakozás előtt", + "Recording consent is required for all calls" : "Hozzájárulás szükséges az összes hívás rögzítéséhez", + "SIP dial-in is now possible without PIN requirement" : "A SIP-es betárcsázáshoz már nem szükséges PIN-kód", + "SIP dial-in is now enabled" : "A SIP-es betárcsázás engedélyezett", + "SIP dial-in is now disabled" : "A SIP-es betárcsázás nem engedélyezett", + "Error occurred when enabling SIP dial-in" : "Hiba történt az SIP-es betárcsázás engedélyezése során", + "Error occurred when disabling SIP dial-in" : "Hiba történt az SIP-es betárcsázás letiltása során", + "Phone and SIP dial-in" : "Telefonos és SIP-es betárcsázás", + "Enable phone and SIP dial-in" : "Telefonos és SIP-es betárcsázás engedélyezése", + "Allow to dial-in without a PIN" : "PIN-kód nélküli betárcsázás engedélyezése", + "Ongoing" : "Folyamatban", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n személy elfogadta","%n személy elfogadta"], + "_%n person declined_::_%n people declined_" : ["%n személy elutasította","%n személy elutasította"], + "_and %n other attachment_::_and %n other attachments_" : ["és %n egyéb melléklet","és %n egyéb melléklet"], + "With {displayName}" : "Vele: {displayName}", + "In {conversation}" : "Ebben: {conversation}", + "View attachment" : "Melléklet megtekintése", + "Join" : "Csatlakozás", + "View conversation" : "Beszélgetés megtekintése", + "View event on Calendar" : "Esemény megtekintése a Naptárban", + "Error while creating the conversation" : "Hiba a beszélgetés létrehozásakor", + "Hello, {displayName}" : "Üdv, {displayName}", + "Start meeting now" : "Találkozó indítása most", + "Give your meeting a title" : "Adjon címet a találkozónak", + "Create and copy link" : "Hivatkozás létrehozása és másolása", + "Create a new conversation" : "Új beszélgetés létrehozása", + "Join open conversations" : "Csatlakozás a nyílt beszélgetésekhez", + "Call a phone number" : "Telefonszám hívása", + "Scroll backward" : "Görgetés visszafelé", + "Scroll forward" : "Görgetés előrefelé", + "Schedule meetings" : "Találkozók ütemezése", + "You don't have any upcoming meetings" : "Nincsenek következő találkozók", + "Open calendar" : "Naptár megnyitása", + "Unread mentions" : "Olvasatlan említések", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Az üzenetek, melyekben megemlítették, itt fognak megjelenni. Másokat úgy említhet meg, hogy beírja a nevüket egy @ karakter után", + "Upcoming reminders" : "Közelgő emlékeztetők", + "Message reminders" : "Üzenetemlékeztetők", + "Set a reminder on a message to be notified" : "Állítson be egy emlékeztetőt egy üzeneten, hogy értesítést kapjon", + "Start a group conversation" : "Csoportos beszélgetés indítása", + "Create conversation" : "Beszélgetés létrehozása", + "Enter your name" : "Adja meg a nevét", + "Submit name and join" : "Adjon meg nevet a csatlakozáshoz", + "Do you already have an account?" : "Már van fiókja?", + "Log in" : "Bejelentkezés", + "Error while verifying uploaded file" : "Hiba a feltöltött fájl ellenőrzése során", + "Uploaded file is verified" : "A feltöltött fájl ellenőrizve", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "A tartalom formátuma vesszővel elválasztott értékeket (CSV) használ:
- A fejlécsor kötelező, és ezek egyikével kell megegyeznie: \"name\",\"email\" vagy csak \"email\"
- Soronként egy bejegyzés (például \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Résztvevők sikeresen hozzáadva", + "Error while adding participants" : "Hiba a résztvevők hozzáadása során", + "Import a file" : "Fájl importálása", + "Browse" : "Tallózás", + "Verifying uploaded file …" : "Feltöltött fájl ellenőrzése…", + "This might take a moment" : "Ez eltarthat egy darabig", + "Send invitations" : "Meghívók elküldése", + "_%n invalid email_::_%n invalid emails_" : ["%n érvénytelen e-mail-cím","%n érvénytelen e-mail-cím"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail-cím már importálva lett, vagy ismétlődés","%n e-mail-cím már importálva lett, vagy ismétlődés"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n meghívó küldhető el","%n meghívó küldhető el"], + "An error occurred while calling a phone number" : "Hiba történt egy telefonszám hívása során", + "Phone number could not be called: {error}" : "A telefonszám nem hívható: {error}", + "Phone number could not be called" : "A telefonszám nem hívható", + "Search participants or phone numbers" : "Résztvevők vagy telefonszámok keresése", + "Creating the conversation …" : "Új beszélgetés létrehozása…", + "Mark as read" : "Megjelölés olvasottként", + "Mark as unread" : "Megjelölés olvasatlanként", + "Remove from favorites" : "Eltávolítás a kedvencekből", + "Add to favorites" : "Hozzáadás a kedvencekhez", + "Unarchive conversation" : "Beszélgetés archiválásának visszavonása", + "Ignore \"Do not disturb\"" : "A „Ne zavarjanak” jelzés figyelmen kívül hagyása", + "You need to promote a new moderator before you can leave the conversation." : "Új moderátort kell kineveznie, mielőtt elhagyhatja a beszélgetést.", + "Conversation actions" : "Beszélgetési műveletek", + "Notify about calls" : "Értesítés a hívásokról", + "Hide message text" : "Üzenetszöveg elrejtése", + "Pending invitations" : "Függőben lévő meghívások", + "Join conversations from other servers" : "Csatlakozás beszélgetésekhez más kiszolgálókról", + "From {user} at {remoteServer}" : "Feladó: {user} itt: {remoteServer}", + "Decline invitation" : "Meghívás elutasítása", + "Accept invitation" : "Meghívás elfogadása", + "No pending invitations" : "Nincs függőben lévő meghívás", + "Home" : "Kezdőlap", + "Unread" : "Olvasatlan", + "Mentions" : "Megemlítések", + "Meetings" : "Találkozók", + "Sort conversations" : "Beszélgetések rendezése", + "By recent activity" : "Legfrissebb tevékenység", + "Alphabetically" : "Betűrendben", + "Do not group by type" : "Ne csoportosítsa típus szerint", + "Show private ones first" : "Privátak megjelenítése elöl", + "Show group ones first" : "Csoportosak megjelenítése elöl", + "No followed threads" : "Nincs követett téma", + "No matches found" : "Nincs találat", + "No conversations found" : "Nem található beszélgetés", + "You have no archived conversations." : "Nincs archivált beszélgetése.", + "Subscribe to an existing thread or start your own." : "Iratkozzon fel egy meglévő szálra, vagy hozza létre a sajátját.", + "You have no unread mentions." : "Nincs olvasatlan megemlítése.", + "You have no unread messages." : "Nincs olvasatlan üzenet.", + "An error occurred while performing the search" : "Hiba történt a keresés végrehajtása során", + "Conversation list" : "Beszélgetések listája", + "Filter conversations by" : "Témák szűrése:", + "Unread messages" : "Olvasatlan üzenetek", + "Meeting conversations" : "Találkozó beszélgetései", + "Clear filters" : "Szűrők törlése", + "New personal note" : "Új személyes jegyzet", + "SIP backend is not installed" : "Nincs telepítve SIP háttérrendszer", + "Back to conversations" : "Vissza a beszélgetésekhez", + "Archived conversations" : "Archivált beszélgetések", + "Threads" : "Szálak", + "Clear filter" : "Szűrő törlése", + "Show more threads" : "További szálak megjelenítése", + "App settings" : "Alkalmazásbeállítások", + "Users" : "Felhasználók", + "Groups" : "Csoportok", + "Teams" : "Csapatok", + "Federated users" : "Föderált felhasználók", + "New private conversation" : "Új privát beszélgetés", + "Other sources" : "Egyéb források", + "Open conversations" : "Beszélgetések megnyitása", + "No search results" : "Nincs találat", + "Users, groups and teams" : "Felhasználók, csoportok és csapatok", + "Users and groups" : "Felhasználók és csoportok", + "Users and teams" : "Felhasználók és csapatok", + "Groups and teams" : "Csoportok és csapatok", + "New group conversation" : "Új csoportos beszélgetés", + "The meeting will start soon" : "Ez a találkozó hamarosan elkezdődik", + "This meeting is scheduled for {startTime}" : "A találkozó ekkorra van ütemezve: {startTime}", + "You are currently waiting in the lobby" : "Ön jelenleg a váróban van", + "Enable noise suppression" : "Hangelnyomás bekapcsolása", + "Reduce background noises for better voice quality" : "Csökkenti a háttérzajokat a jobb hangminőség érdekében", + "Enable echo cancellation" : "Visszhangkioltás bekapcsolása", + "Minimize echo effect from own surrounding" : "Környezetből fakadó visszhanghatás minimalizálása", + "Enable auto gain control" : "Automatikus erősítésvezérlés bekapcsolása", + "Dynamically adjust microphone volume for consistent level" : "Mikrofon hangerejének dinamikus igazítása a konzisztens szint eléréséhez", + "Select microphone" : "Mikrofon kiválasztása", + "No microphone available" : "Nem áll rendelkezésre mikrofon", + "Select speaker" : "Hangszóró kiválasztása", + "No speaker available" : "Nem áll rendelkezésre hangszóró", + "Select camera" : "Válasszon kamerát", + "No camera available" : "Nem áll rendelkezésre kamera", + "Select a device" : "Eszköz kiválasztása", + "Playing …" : "Lejátszás…", + "Test speakers" : "Hangszórók tesztelése", + "Test" : "Teszt", + "Devices" : "Eszközök", + "Backgrounds" : "Hátterek", + "No audio" : "Nincs hang", + "No camera" : "Nincs kamera", + "Display video as you will see it (mirrored)" : "Videó megjelenítése úgy, ahogy látni fogja (tükrözve)", + "Display video as others will see it" : "Videó megjelenítése úgy, ahogy a többi látni fogják", + "Calls are not supported in your browser" : "A böngészője nem támogatja a hívásokat", + "Access to microphone is only possible with HTTPS" : "A mikrofon hozzáférése csak HTTPS-en lehetséges", + "Access to microphone was denied" : "A mikrofon hozzáférése letiltva", + "Error while accessing microphone" : "Hiba történt a mikrofon elérésekor", + "Access to camera is only possible with HTTPS" : "A kamera hozzáférése csak HTTPS-en lehetséges", + "The call is being recorded." : "A hívásról felvétel készül.", + "The call might be recorded." : "A hívásról felvétel készülhet.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A felvétel tartalmazhatja a hangját, a kamerája képet és a képernyőmegosztását. A híváshoz való csatlakozás előtt a hozzájárulása szükséges.", + "Give consent to the recording of this call" : "Hozzájárulás, hogy felvétel készüljön a hívásról", + "Show more info" : "További információk megjelenítése", + "Audio is not available" : "Nem érhető el hang", + "Video is not available" : "Nem érhető el videó", + "Start recording immediately with the call" : "Felvétel indítása a hívás kezdetével", + "Recording backend is not installed" : "Nincs telepítve a rögzítési háttérrendszer", + "Notify all participants about this call" : "Összes résztvevő értesítése a hívásról", + "Apply settings" : "Beállítások alkalmazása", + "Select virtual office background" : "Virtuális irodai háttér kiválasztása", + "Select virtual home background" : "Virtuális otthoni háttér kiválasztása", + "Select virtual abstract background" : "Virtuális absztrakt háttér kiválasztása", + "Select virtual beach background" : "Virtuális strandos háttér kiválasztása", + "Select virtual park background" : "Virtuális parkos háttér kiválasztása", + "Select virtual theater background" : "Virtuális színházi háttér kiválasztása", + "Select virtual library background" : "Virtuális könyvtári háttér kiválasztása", + "Select virtual space station background" : "Virtuális űrállomásos háttér kiválasztása", + "Error while uploading the file" : "Hiba a fájl feltöltése során", + "Select a file" : "Válasszon egy fájlt", + "Invalid path selected" : "Érvénytelen útvonal kiválasztva", + "Select virtual background from file {fileName}" : "Virtuális háttér kiválasztása fájlból: {fileName}", + "Blur" : "Elmosás", + "Upload" : "Feltöltés", + "Files" : "Fájlok", + "(editing)" : "(szerkesztés alatt)", + "(edited)" : "(szerkesztve)", + "The message has expired or has been deleted" : "Az üzenet elévült vagy törölték őket", + "Cancel quote" : "Idézés megszakítása", + "24 hours" : "24 óra", + "7 days" : "7 nap", + "30 days" : "30 nap", + "Until unpin" : "Kitűzés megszüntetéséig", + "Clear reminder – {timeLocale}" : "Emlékeztető törlése – {timeLocale}", + "Edited by {actor}" : "Szerkesztette: {actor}", + "Pinned by you" : "Ön tűzte ki", + "Pinned by {actor}" : "{actor} tűzte ki", + "Until {absoluteDate}" : "Eddig: {absoluteDate}", + "Message text copied to clipboard" : "Az üzenet szövege kimásolva a vágólapra", + "Message text could not be copied" : "Az üzenet szövege nem másolható", + "Message forwarded to \"Note to self\"" : "Az üzenet továbbítva a „Saját jegyzetek” közé", + "Error while forwarding message to \"Note to self\"" : "Hiba az üzenet „Saját jegyzetek” közé továbbítása során", + "A reminder was successfully removed" : "Az emlékeztető sikeresen törölve lett", + "Error occurred when removing a reminder" : "Hiba történt az emlékeztető eltávolítása során", + "A reminder was successfully set at {datetime}" : "Az emlékeztető sikeresen be lett állítva: {datetime}", + "Error occurred when creating a reminder" : "Hiba történt az emlékeztető létrehozása során", + "Add a reaction to this message" : "Reakció hozzáadása az üzenethez", + "Reply" : "Válasz", + "More actions" : "További műveletek", + "Set reminder" : "Emlékeztető beállítása", + "Pin message" : "Üzenet kitűzése", + "Unpin message" : "Üzenet kitűzésének megszüntetése", + "Reply privately" : "Válasz privátban", + "Edit message" : "Üzenet szerkesztése", + "Copy message" : "Üzenet másolása", + "Copy message link" : "Üzenethivatkozás másolása", + "Go to file" : "Ugrás a fájlhoz", + "Download file" : "Fájl letöltése", + "Go to thread" : "Ugrás a szálhoz", + "Edit thread details" : "Szál részleteinek szerkesztése", + "Forward message" : "Üzenet továbbítása", + "Translate" : "Lefordítás", + "Set custom reminder" : "Egyéni emlékeztető beállítása", + "Keep pinned for" : "Kitűzve tartás eddig:", + "Set custom period" : "Egyéni időszak beállítása", + "Close reactions menu" : "Reakciók menü bezárása", + "React with {emoji}" : "Reagálás ezzel: {emoji}", + "React with another emoji" : "Reagálás másik emodzsival", + "Choose a conversation to forward the selected message." : "Válasszon egy beszélgetést a kiválasztott üzenet továbbításához.", + "Error while forwarding message" : "Hiba az üzenet továbbítása során", + "The message has been forwarded to {selectedConversationName}" : "Az üzenet továbbításra került ide: {selectedConversationName}", + "Dismiss" : "Mellőzés", + "Go to conversation" : "Ugrás a beszélgetéshez", + "Detect language" : "Nyelv észlelése", + "The message could not be translated" : "Az üzenetet nem sikerült lefordítani", + "Translation copied to clipboard" : "A fordítás a vágólapra másolva", + "Translation could not be copied" : "A fordítást nem lehetett másolni", + "Translate message" : "Üzenet lefordítása", + "Source language to translate from" : "Fordítás forrásnyelve", + "Translate from" : "Fordítás a következőről:", + "Target language to translate into" : "Fordítás célnyelve", + "Translate to" : "Fordítás a következőre:", + "Translating" : "Fordítás", + "Copy translated text" : "Lefordított szöveg másolása", + "Error when scheduling the message" : "Hiba az üzenet ütemezése során", + "Reschedule" : "Újraütemezés", + "Send now" : "Küldés most", + "Choose a time" : "Válasszon egy időt", + "Send at custom time" : "Küldés egyéni időben", + "Will be sent without notification" : "Értesítés nélkül lesz elküldve", + "Message read by everyone who shares their reading status" : "Az üzenetet mindenki olvasta, aki megosztja az olvasási állapotát", + "Message sent" : "Üzenet elküldve", + "Sent without notification" : "Értesítés nélkül elküldve", + "Deleting message" : "Üzenet törlése", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Az üzenet sikeresen törölve, de a bot vagy a Matterbridge be van állítva, és lehet, hogy már el lett küldve más szolgáltatásokhoz", + "Message deleted successfully" : "Az üzenet sikeresen törölve", + "Message could not be deleted because it is too old" : "Az üzenetet nem sikerült törölni, mert túl régi", + "Only normal chat messages can be deleted" : "Csak a normál csevegési üzeneteket lehet törölni", + "An error occurred while deleting the message" : "Hiba történt az üzenet törlése során", + "Pinned" : "Kitűzve", + "Your browser does not support playing audio files" : "Böngészője nem támogatja a hangfájlok lejátszását", + "Contact" : "Kapcsolat", + "{stack} in {board}" : "{stack} itt: {board}", + "Deck Card" : "Kártya", + "Remove {fileName}" : "{fileName} eltávolítása", + "Open this location in OpenStreetMap" : "Hely megnyitása az OpenStreetMapen", + "_%n reply_::_%n replies_" : ["%n válasz","%n válasz"], + "Sending message" : "Üzenet küldése", + "Failed to send the message. Click to try again" : "Nem sikerült elküldeni az üzenetet. Kattintson az újrapróbálkozáshoz", + "Not enough free space to upload file" : "Nincs elég szabad hely a fájl feltöltéséhez", + "You cannot send messages to this conversation at the moment" : "Jelenleg nem küldhet üzeneteket erre a beszélgetésre", + "Could not update the message" : "Nem sikerült az üzenet frissítése", + "Reply to thread \"{threadTitle}\"" : "Válasz a(z) „{threadTitle}” szálban", + "_You voted • %n vote_::_You voted • %n votes_" : ["Szavazott • %n szavazat","Szavazott • %n szavazat"], + "You voted" : "Szavazott", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kattintson a szavazáshoz • %n szavazat","Kattintson a szavazáshoz • %n szavazat"], + "Click to vote" : "Kattintson a szavazáshoz", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Szavazásvázlat • %n lehetőség","Szavazásvázlat • %n lehetőség"], + "_%n vote_::_%n votes_" : ["%n szavazat","%n szavazat"], + "Edit poll draft" : "Szavazásvázlat szerkesztése", + "Delete poll draft" : "Szavazásvázlat törlése", + "Open poll" : "Nyitott szavazás", + "Closed poll" : "Zárt szavazás", + "See results" : "Találatok megtekintése", + "Reactions" : "Reakciók", + "No permission to post reactions in this conversation" : "Nincs jogosultsága reakciókat használni ebben a beszélgetésben", + "and {participant}" : "és {participant}", + "_and %n other participant_::_and %n other participants_" : ["és %n másik résztvevő","és %n másik résztvevő"], + "Show all reactions" : "Összes reakció megjelenítése", + "Add more reactions" : "További reakciók hozzáadása", + "Show or collapse system messages" : "Rendszerüzenetek megjelenítése vagy elrejtése", + "No messages" : "Nincs üzenet", + "All messages have expired or have been deleted." : "Az összes üzenet elévült vagy törölték őket.", + "Generate summary with AI" : "Összefoglaló előállítása MI-vel", + "{author} (pinned by you)" : "{author} (Ön tűzte ki)", + "{author} (pinned by {actor})" : "{author} ({actor} tűzte ki)", + "Unpin" : "Rögzítés feloldása", + "Cancel search" : "Keresés megszakítása", + "Add a phone number" : "Telefonszám hozzáadása", + "Error: A password is required to create the conversation." : "Hiba: Jelszó szükséges a beszélgetés létrehozásához.", + "All set, the conversation \"{conversationName}\" was created." : "Minden kész, a(z) „{conversationName}” beszélgetés létrejött.", + "Create a new group conversation" : "Új csoportbeszélgetés létrehozása", + "Add participants" : "Résztvevők hozzáadása", + "Maximum length exceeded ({maxlength} characters)" : "Legnagyobb hossz túllépve ({maxlength} karakter)", + "Conversation visibility" : "Beszélgetés láthatósága", + "Allow guests to join via link" : "A vendégek hivatkozással történő csatlakozásának engedélyezése", + "Enter password" : "Adja meg a jelszót", + "This conversation has been locked" : "A beszélgetés zárolva van", + "No permission to post messages in this conversation" : "Nincs jogosultsága megjegyzést fűzni a beszélgetéshez", + "Joining conversation …" : "Csatlakozás a beszélgetéshez…", + "Write a message without notification" : "Üzenet írása értesítés nélkül", + "Create a thread silently" : "Szál létrehozása némán", + "Create a thread" : "Szál létrehozása", + "Send message silently" : "Üzenet küldése némán", + "Send message" : "Üzenet küldése", + "Send without notification" : "Küldés értesítés nélkül", + "The participant will not be notified about new messages" : "A résztvevő nem lesz értesítve az új üzenetekről", + "Participants will not be notified about new messages" : "A résztvevők nem lesznek értesítve az új üzenetekről", + "Message will be sent {datetimeString}" : "Az üzenet ekkor lesz elküldve: {datetimeString}", + "Thread title is required" : "A szál címe kötelező", + "Message text is required" : "Az üzenet szövege kötelező", + "The message could not be edited" : "Az üzenet nem szerkeszthető", + "File to share" : "Fájl megosztása", + "File upload is not available in this conversation" : "A fájlfeltöltés elérhető ebben a beszélgetésben", + "Message was successfully scheduled" : "Az üzenet sikeresen be lett ütemezve", + "Add emoji" : "Emodzsi hozzáadása", + "Adding a mention will only notify users who did not read the message." : "A megemlítés csak azokat a felhasználókat fogja értesíteni, akik nem olvasták az üzenetet.", + "Thread title" : "Szál címe", + "Send later" : "Küldés később", + "Show scheduled messages" : "Ütemezett üzenetek megjelenítése", + "Cancel editing" : "Szerkesztés megszakítása", + "Schedule message" : "Üzenet ütemezése", + "{user} is out of office and might not respond." : "{user} házon kívül van, és lehet, hogy nem fog válaszolni.", + "Absence period: {startDate} - {endDate}" : "Házon kívüli időszak: {startDate} – {endDate}", + "Replacement:" : "Helyettes:", + "Share from {nextcloud}" : "Megosztás innen: {nextcloud}", + "Share from Files" : "Megosztás a Fájlokból", + "Share files to the conversation" : "Fájlok megosztása a beszélgetéssel", + "Upload from device" : "Feltöltés az eszközről", + "Create new poll" : "Új szavazás létrehozása", + "Smart picker" : "Okos választó", + "Record voice message" : "Hangüzenet rögzítése", + "End recording and send" : "Felvétel befejezése és küldés", + "Dismiss recording" : "Felvétel elvetése", + "Access to the microphone was denied" : "A mikrofon hozzáférése letiltva", + "Microphone either not available or disabled in settings" : "A mikrofon nem érhető el, vagy le lett tiltva a beállításokban", + "Error while recording audio" : "Hiba a hang felvétele során", + "Voice message {time} ({conversation})" : "Hangüzenet {time} ({conversation})", + "Generating summary of unread messages …" : "Összefoglaló előállítása az olvasatlan üzenetekről…", + "Summary is AI generated and might contain mistakes" : "Az összefoglalót MI állítja elő, és hibákat tartalmazhat", + "Error occurred during a summary generation" : "Hiba az összefoglaló előállítása során", + "New file" : "Új fájl", + "Blank" : "Üres", + "Error while creating file" : "Hiba a fájl létrehozása során", + "Create and share a new file" : "Új fájl létrehozása és megosztása", + "Name of the new file" : "Az új fájl neve", + "Create file" : "Fájl létrehozása", + "Someone is typing …" : "Valaki gépel…", + "{user1} is typing …" : "{user1} gépel…", + "{user1} and {user2} are typing …" : "{user1} és {user2} gépelnek…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} és {user3} gépelnek…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} és még %n felhasználó gépel…","{user1}, {user2}, {user3} és még %n felhasználó gépel…"], + "Add more files" : "Több fájl hozzáadása", + "Send" : "Küldés", + "In this conversation {user} can:" : "Ebben a beszélgetésben {user} a következőket teheti:", + "Edit default permissions for participants in {conversationName}" : "A(z) {conversationName} résztvevőinek alapértelmezett jogosultságának szerkesztése", + "Start a call" : "Hívás indítása", + "Skip the lobby" : "Váró kihagyása", + "Can post messages" : "Közzéteget üzeneteket", + "Can post messages and reactions" : "Közzétehet bejegyzéseket és használhat reakciókat", + "Can add reactions" : "Adhat hozzá reakciókat", + "Enable the microphone" : "Mikrofon engedélyezése", + "Enable the camera" : "Kamera engedélyezése", + "Share the screen" : "Képernyő megosztása", + "Update permissions" : "Jogosultságok frissítése", + "Updating permissions" : "Jogosultságok frissítése", + "No poll drafts" : "Nincs szavazásvázlat", + "There is no poll drafts yet saved for this conversation" : "Még nincs mentett szavazásvázlat ehhez a beszélgetésben", + "Create poll in {name}" : "Szavazás létrehozása itt: {name}", + "Create poll" : "Szavazás létrehozása", + "Error while importing poll" : "Hiba a szavazás importálása során", + "Question" : "Kérdés", + "Ask a question" : "Kérdés feltevése", + "Import draft from file" : "Vázlat importálása fájlból", + "Answers" : "Válaszok", + "Answer {option}" : "{option}. válasz", + "Delete poll option" : "Szavazási lehetőség törlése", + "Add answer" : "Válasz hozzáadása", + "Settings" : "Beállítások", + "Anonymous poll" : "Névtelen szavazás", + "Multiple answers" : "Több válasz", + "Save as draft" : "Mentés vázlatként", + "Export draft to file" : "Vázlat exportálása fájlba", + "_Final results • %n vote_::_Final results • %n votes_" : ["Végső eredmények • %n szavazat","Végső eredmények • %n szavazat"], + "Your vote is anonymous" : "A szavazata anonim", + "You voted for this option" : "Erre a lehetőségre szavazott", + "End poll" : "Szavazás befejezése", + "Change your vote" : "Szavazat módosítása", + "Withdraw vote" : "Szavazat visszavonása", + "Results" : "Eredmények", + "Voted participants" : "Résztvevők, akik szavaztak", + "Send a message to \"{roomName}\"" : "Üzenet küldése ide: „{roomName}”", + "Hide list of participants" : "Résztvevők elrejtése", + "Show list of participants" : "Résztvevők megjelenítése", + "Assistance requested in {roomName}" : "Segítség kérve itt: {roomName}", + "The message was sent to \"{roomName}\"" : "Az üzenet el lett küldve ide: „{roomName}”", + "Dismiss request for assistance" : "A segítségkérés elvetése", + "Send message to room" : "Üzenet küldése a szobának", + "Back to main room" : "Vissza a fő szobába", + "Back to your room" : "Vissza a saját szobába", + "Message all rooms" : "Üzenet az összes szobának", + "Start session" : "Munkamenet indítása", + "Start a call before you start a breakout room session" : "Indítson el egy hívást mielőtt szétbontott szobákat készít", + "Stop session" : "Munkamenet leállítása", + "The message was sent to all breakout rooms" : "Az üzenet el lett küldve az összes szétbontott szobának", + "Send a message to all breakout rooms" : "Üzenet küldése az összes szétbontott szobának", + "Breakout rooms are not started" : "A szétbontott szobák nem lettek elindítva", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "A Nagy teljesítményű háttérrendszer nélküli hívások kapcsolódási problémákat és magas terhelést okozhatnak az eszközökön. {linkstart}További információ{linkend}", + "Talk setup incomplete" : "A Beszélgetés beállítása nem teljes", + "Disable lobby" : "A váró letiltása", + "Settings for participant \"{user}\"" : "„{user}” résztvevő beállításai", + "Participant \"{user}\"" : "„{user}” résztvevő", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "vendég", + "Ringing …" : "Csengetés…", + "Call rejected" : "Hívás elutasítva", + "{time} talking …" : "{time}, hívásban…", + "{time} talking time" : "{time} beszélgetési idő", + "Raised their hand" : "Felemelte a kezét", + "Joined with video" : "Videóval csatlakozott", + "Joined via phone" : "Telefonon csatlakozott", + "Joined with audio" : "Hanggal csatlakozott", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "A szöveg legfeljebb {maxLength} karakteres lehet. Jelenlegi szövege {charactersCount} karakter hosszú.", + "Remove group and members" : "Csoport és tagjainak eltávolítása", + "Remove team and members" : "Csapat és tagjainak eltávolítása", + "Remove participant" : "Résztvevő eltávolítása", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Biztos, hogy eltávolítja a(z) „{displayName}” csoportot és a tagjait ebből a beszélgetésből?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Biztos, hogy eltávolítja a(z) „{displayName}” csapatot és a tagjait ebből a beszélgetésből?", + "Do you really want to remove {displayName} from this conversation?" : "Biztos, hogy eltávolítja a következőt ebből a beszélgetésből: „{displayName}”?", + "Notification was sent to {displayName}" : "Az értesítés elküldve {displayName} számára", + "Could not send notification to {displayName}" : "Nem sikerült elküldeni az értesítést {displayName} számára", + "Permissions granted to {displayName}" : "Jogosultságok megadva {displayName} számára", + "Could not modify permissions for {displayName}" : "{displayName} jogosultságai nem módosíthatók", + "Permissions removed for {displayName}" : "{displayName} jogosultságai eltávolítva", + "Permissions set to default for {displayName}" : "{displayName} jogosultságai alapértékekre állítva", + "Phone number could not be hung up" : "A telefonszám nem tehető le", + "Phone number could not be put on hold" : "A telefonszám nem tehető tartásba", + "Phone number could not be muted" : "A telefonszám nem némítható", + "Phone number could not be unmuted" : "A telefonszám némítása nem vonható vissza", + "DTMF message could not be sent" : "A DTMF-üzenet nem küldhető el", + "Phone number copied to clipboard" : "A telefonszám nem másolható a vágólapra", + "Phone number could not be copied" : "A telefonszám nem másolható", + "in the lobby" : "a váróban", + "Dial out phone" : "Telefon tárcsázása", + "Hang up phone" : "Telefon letevése", + "Move back to lobby" : "Áthelyezés a váróba", + "Move to conversation" : "Áthelyezés a beszélgetésbe", + "Dial-in PIN" : "Telefonos PIN", + "Demote from moderator" : "Lefokozás moderátorról", + "Promote to moderator" : "Kinevezés moderátorrá", + "Resend invitation" : "Meghívó újraküldése", + "Send call notification" : "Hívásértesítés küldése", + "Dial out phone number" : "Telefonszám tárcsázása", + "Resume call for phone number" : "Telefonszám hívásának folytatása", + "Put phone number on hold" : "Telefonszám tartásba tevése", + "Unmute phone number" : "Telefonszám némításának visszavonása", + "Mute phone number" : "Telefonszám némítása", + "Copy phone number" : "Telefonszám másolása", + "Reset custom permissions" : "Egyéni engedélyek visszaállítása", + "Grant all permissions" : "Összes jogosultság megadása", + "Remove all permissions" : "Összes jogosultság eltávolítása", + "Also ban from this conversation" : "Egyúttal kitiltás ebből a beszélgetésből", + "Internal note (reason to ban)" : "Belső jegyzet (kitiltás oka)", + "Remove" : "Eltávolítás", + "Permissions modified for {displayName}" : "{displayName} jogosultságai módosítva", + "Add users, groups or teams" : "Felhasználók, csoportok vagy csapatok hozzáadása", + "Add users or groups" : "Felhasználók vagy csoportok hozzáadása", + "Add users or teams" : "Felhasználók vagy csapatok hozzáadása", + "Add users" : "Felhasználók hozzáadása", + "Add groups or teams" : "Csoportok vagy csapatok hozzáadása", + "Add groups" : "Csoportok hozzáadása", + "Add teams" : "Csapatok hozzáadása", + "Add other sources" : "További források hozzáadása", + "Add emails" : "E-mailek hozzáadása", + "Integrations" : "Integrációk", + "Add federated users" : "Föderált felhasználók hozzáadása", + "Searching …" : "Keresés…", + "Search for more users" : "További felhasználók keresése", + "You can search or add participants via name, email, or Federated Cloud ID" : "Kereshet és hozzáadhat résztvevőket név, e-mail-cím vagy föderált felhőazonosító alapján", + "Search or add participants" : "Résztvevők keresése vagy hozzáadása", + "Invitation was sent to {actorId}" : "Meghívó elküldve a következőnek: {actorId}", + "An error occurred while adding the participants" : "Hiba történt a résztvevők hozzáadása során", + "A new group conversation with selected participant will be created" : "Egy új csoportos beszélgetés lesz létrehozva a kiválasztott résztvevővel", + "Participants" : "Résztvevők", + "Pinned by a deleted user" : "Törölt felhasználó tűzte ki", + "Participants ({count})" : "Résztvevők ({count})", + "Open chat" : "Csevegés megnyitása", + "You have new unread messages in the chat." : "Olvasatlan üzenetek vannak a csevegésben.", + "You have been mentioned in the chat." : "Megemlítették a csevegésben.", + "Search messages" : "Üzenetek keresése", + "Chat" : "Csevegés", + "Details" : "Részletek", + "Shared items" : "Megosztott elemek", + "Search in {name}" : "Keresés itt: {name}", + "Threads in {name}" : "Szálak itt: {name}", + "{actor} in {conversation}" : "{actor} itt: {conversation}", + "Search messages …" : "Üzenetek keresése…", + "Search options" : "Keresési lehetőségek", + "From User" : "Feladó", + "Since" : "Ettől", + "Until" : "Eddig", + "No results found" : "Nincs találat", + "Load more results" : "További találatok betöltése", + "Recent threads" : "Legutóbbi szálak", + "Projects" : "Projektek", + "No shared items" : "Nincsenek megosztott elemek", + "Thread notifications" : "Szálértesítések", + "Thread actions" : "Szálműveletek", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Hivatkozás egy beszélgetéshez", + "No open conversations found" : "Nem található nyitott beszélgetés", + "Either there are no open conversations or you joined all of them." : "Nincs nyitott beszélgetés, vagy már az összeshez csatlakozott.", + "Check spelling or use complete words." : "Ellenőrizze a helyesírást, vagy használjon teljes szavakat.", + "Search conversations or users" : "Beszélgetések vagy felhasználók keresése", + "Select conversation" : "Válasszon beszélgetést", + "Number length is not valid" : "A szám hossza nem érvényes", + "Region code is not valid" : "A régiókód nem érvényes", + "Number length is too short" : "A szám hossza túl rövid", + "Number length is too long" : "A szám hossza túl hosszú", + "Number is not valid" : "A szám nem érvényes", + "Phone numbers" : "Telefonszámok", + "Display name: {name}" : "Megjelenítendő név: {name}", + "Edit display name" : "Megjelenítendő név szerkesztése", + "Display name (required)" : "Megjelenítendő név (kötelező)", + "Save name" : "Név mentése", + "I picked message bubbles" : "Üzenetbuborékokat választottam", + "I picked the list style" : "Listastílust választottam", + "Error while setting personal setting" : "Hiba a személyes beállítása mentése során", + "Error while saving sounds setting" : "Hiba a hangbeállítások mentése során", + "Compact conversations list" : "Kompakt beszélgetéslista", + "Chat appearance" : "Csevegés megjelenése", + "Messages list" : "Üzenetlista", + "Message bubbles" : "Üzenetbuborékok", + "Play sounds when participants join or leave a call" : "Hangjelzések lejátszása, amikor a résztvevők csatlakoznak, vagy elhagyják a hívást", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "A gyártó műszaki korlátozásai miatt jelenleg nem érhető el iPhone és iPad eszközökön", + "Notification settings" : "Értesítési beállítások", + "Sounds for chat and call notifications" : "Hangok a csevegési és hívásértesítésekhez", + "Invalid language ({languageId})" : "Érvénytelen nyelv ({languageId})", + "Default language" : "Alapértelmezett nyelv", + "Default language ({languageName})" : "Alapértelmezett nyelv ({languageName})", + "Error when trying to load the available live translation languages" : "Hiba történt az elérhető élő fordítási nyelvek betöltése során", + "Error when trying to set live translation language" : "Hiba történt az élő fordítás nyelvének beállítása során", + "Set language used to show the transcriptions" : "A leiratozás megjelenítéséhez használt nyelv beállítása", + "Select location for attachments" : "Válassza ki a mellékletek helyét", + "Error while setting attachment folder" : "Hiba a mellékletek mappa beállításakor", + "Error while setting read status privacy" : "Hiba történt az olvasási állapot adatvédelmi beállításakor", + "Error while setting typing status privacy" : "Hiba történt a gépelési állapot adatvédelmi beállításakor", + "Error while setting default media state" : "Hiba az alapértelmezett médiaállapot beállítása során", + "Turn camera and microphone off by default" : "Kamera és mikrofon alapértelmezett kikapcsolása", + "Blur camera background by default" : "Kamera hátterének alapértelmezett elmosása", + "Skip device preview before joining a call" : "Eszköz-előnézet kihagyása híváshoz való csatlakozás előtt", + "Appearance & Sounds" : "Megjelenés és hangok", + "Privacy" : "Adatvédelem", + "Send read receipts" : "Olvasási visszajelzés küldése", + "When off, all read statuses will be hidden" : "Ha ki van kapcsolva, az összes olvasási állapot rejtve lesz", + "Share typing status" : "Gépelési állapot megosztása", + "When off, all typing indicators will be hidden" : "Ha ki van kapcsolva, az összes gépelési visszajelzés rejtve lesz", + "Attachments folder" : "Mellékletek mappa", + "Toggle full screen" : "Teljes képernyő be/ki", + "Return to Home screen" : "Visszatérés a kezdőképernyőre", + "Search" : "Keresés", + "Shortcuts while in a chat" : "Billentyűparancsok csevegés közben", + "Focus the chat input" : "Fókusz a csevegés beviteli mezőjére", + "Unfocus the chat input to use shortcuts" : "A billentyűparancsok használatához hagyja el a csevegés beviteli mezőjét", + "Edit your last message" : "Utolsó saját üzenet szerkesztése", + "Shortcuts while in a call" : "Billentyűparancsok hívás közben", + "Camera on and off" : "Kamera be- és kikapcsolása", + "Microphone on and off" : "Mikrofon be- és kikapcsolása", + "Raise or lower hand" : "Kéz felemelése vagy leengedése", + "Push to talk or push to mute" : "Lenyomásra történő beszéd vagy némítás", + "Zoom-in / zoom-out a screen share" : "Nagyítás/kicsinyítés képernyőmegosztáskor", + "Mouse wheel" : "Egérgörgő", + "Start call silently" : "Hívás indítása némán", + "Start call" : "Hívás indítása", + "End call" : "Hívás befejezése", + "The server was updated, you cannot start or join a call." : "A kiszolgáló frissítve lett, nem indíthat vagy csatlakozhat híváshoz.", + "This call has just ended" : "Ez a hívás véget ért", + "You will be able to join the call only after a moderator starts it." : "Csak akkor csatlakozhat a híváshoz, ha azt egy moderátor elindítja.", + "End call for everyone" : "Hívás befejezése mindenki számára", + "Starting the recording" : "A felvétel indítása", + "Recording" : "Felvétel", + "The call has been running for one hour." : "A hívás egy órája tart.", + "Cancel recording start" : "Felvétel indításának megszakítása", + "Stop recording" : "Felvétel leállítása", + "Send a reaction" : "Reakció küldése", + "React with {reaction}" : "Reagálás ezzel: {reaction}", + "All tasks done!" : "Az összes feladat kész!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n feladat","{done}/%n feladat"], + "Add participants to this call" : "Résztvevők hozzáadása a híváshoz", + "_%n participant in call_::_%n participants in call_" : ["%n résztvevő a hívásban","%n résztvevő a hívásban"], + "Scheduled messages" : "Ütemezett üzenetek", + "You are not allowed to enable screensharing" : "Nem engedélyezheti a képernyőmegosztást", + "No screensharing" : "Nincs képernyőmegosztás", + "Screensharing options" : "Képernyőmegosztás beállításai", + "Enable screensharing" : "Képernyőmegosztás engedélyezése", + "Bad sent video and screen quality." : "Rossz a küldött videó és képernyő minősége.", + "Bad sent screen quality." : "Rossz a küldött képernyő minősége.", + "Bad sent video quality." : "Rossz a küldött videó minősége.", + "Bad sent audio, video and screen quality." : "Rossz a küldött hang, videó és képernyő minősége.", + "Bad sent audio and screen quality." : "Rossz a küldött hang és képernyő minősége.", + "Bad sent audio and video quality." : "Rossz a küldött hang és videó minősége.", + "Bad sent audio quality." : "Rossz a küldött hang minősége.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják az Ön képernyőjét. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót képernyőmegosztás közben.", + "Disable background blur" : "Háttér elmosásának kikapcsolása", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják az Ön képernyőjét. A helyzet javítása érdekében próbálja meg letiltani a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják a képernyőt.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem láthatják Önt.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a videót képernyőmegosztás közben.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni Önt és nem láthatják a képernyőt. A helyzet javítása érdekében próbálja meg letiltani a képernyőmegosztást.", + "Disable screenshare" : "Képernyőmegosztás letiltása", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni Önt. A helyzet javítása érdekében próbálja meg letiltani a háttér elmosását vagy a videót.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni és látni. A helyzet javítása érdekében próbálja meg letiltani a videót.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Internetkapcsolata vagy számítógépe foglalt, és elképzelhető, hogy más résztvevők nem fogják megérteni Önt.", + "Screen sharing is not supported by your browser." : "A böngészője nem támogatja a képernyőmegosztást.", + "Screen sharing requires the page to be loaded through HTTPS." : "A képernyőmegosztáshoz az oldalt HTTPS-en keresztül kell betölteni.", + "Screensharing requires the page to be loaded through HTTPS." : "A képernyőmegosztáshoz az oldalt HTTPS-en keresztül kell betölteni.", + "An error occurred while starting screensharing." : "Hiba történt a képernyő megosztásakor.", + "Select virtual background" : "Válasszon virtuális hátteret", + "Show your screen" : "Saját képernyő megosztása", + "Stop screensharing" : "Képernyőmegosztás befejezése", + "Mute others" : "Mások elnémítása", + "Start recording" : "Felvétel indítása", + "Set up breakout rooms" : "Szétbontott szobák beállítása", + "Download attendance list" : "Résztvevők listájának letöltése", + "Open Calendar" : "Naptár megnyitása", + "Remove participant {name}" : "Résztvevő eltávolítása: {name}", + "Would you like to delete this conversation?" : "Törli ezt a beszélgetést?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ez a beszélgetés %n nap tétlenség után mindenki számára törölve lesz.","Ez a beszélgetés %n nap tétlenség után mindenki számára törölve lesz."], + "Are you sure you want to delete this conversation?" : "Biztos, hogy törli ezt a beszélgetést?", + "Delete now" : "Törlés most", + "Keep" : "Megtartás", + "Open dialpad" : "Tárcsázó megnyitása", + "Select a region" : "Válasszon régiót", + "Local time: {time}" : "Helyi idő: {time}", + "Scheduled {datetime}" : "Ütemezve: {datetime}", + "Scheduled for {datetime}" : "Ütemezve: {datetime}", + "Search …" : "Keresés…", + "Message without mention" : "Üzenet megemlítés nélkül", + "Mention myself" : "Saját magam megemlítése", + "Mention everyone" : "Mindenki megemlítése", + "Select a conversation" : "Beszélgetés kiválasztása", + "Select a mode" : "Mód kiválasztása", + "You do not have permissions to access this conversation." : "Nincs jogosultsága, hogy elérje ezt a beszélgetést.", + "Join a different conversation or start a new one." : "Csatlakozás egy másik beszélgetéshez, vagy új indítása.", + "The conversation does not exist" : "A beszélgetés nem létezik", + "Join a conversation or start a new one!" : "Csatlakozzon egy beszélgetéshez, vagy indítson egy újat!", + "Duplicate session" : "Ismétlődő munkamenet", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ez a beszélgetés egy másik lapon meg lett nyitva. A kiszolgáló jelenlegi verziója nem támogatja a beszélgetések több lapon való megjelenítését.", + "Creating and joining a conversation with \"{userid}\"" : "Beszélgetés létrehozása „{userid}” felhasználóval, és csatlakozás", + "Join a conversation or start a new one" : "Csatlakozzon egy beszélgetéshez vagy indítson egy újat", + "Error while joining the conversation" : "Hiba a beszélgetéshez való csatlakozás során", + "Another user" : "Másik felhasználó", + "Hey! Are you using the list style or message bubbles?" : "Hé! Listastílust vagy üzenetbuborékokat használsz?", + "Nextcloud URL" : "Nextcloud webcíme", + "Nextcloud user" : "Nextcloud-felhasználó", + "User password" : "Felhasználói jelszó", + "Talk conversation" : "Beszélgetés", + "Skip TLS verification" : "A TLS-ellenőrzés kihagyása", + "Matrix server URL" : "Matrix-kiszolgáló webcíme", + "User" : "Felhasználó", + "Matrix channel" : "Matrix-csatorna", + "Mattermost server URL" : "Mattermost-kiszolgáló webcíme", + "Mattermost user" : "Mattermost felhasználó", + "Team name" : "Csapat neve", + "Channel name" : "Csatorna neve", + "Rocket.Chat server URL" : "Rocket.Chat kiszolgáló webcíme", + "User name or email address" : "Felhasználónév vagy e-mail-cím", + "Rocket.Chat channel" : "Rocket.Chat csatorna", + "Zulip server URL" : "Zulip kiszolgáló webcíme", + "Bot user name" : "Bot felhasználónév", + "Bot API key" : "Bot API kulcs", + "Zulip channel" : "Zulip csatorna", + "API token" : "API token", + "Slack channel" : "Slack csatorna", + "Server ID or name" : "Kiszolgálóazonosító vagy név", + "Channel ID (prefixed with \"ID:\") or name" : "Csatornaazonosító („ID:” előtaggal) vagy név", + "Channel" : "Csatorna", + "Login" : "Bejelentkezés", + "Chat ID" : "Csevegésazonosító", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC-kiszolgáló webcíme (pl. chat.freenode.net:6667)", + "Nickname" : "Becenév", + "Connection password" : "Csatlakozási jelszó", + "IRC channel" : "IRC csatorna", + "Channel password" : "Csatorna jelszó", + "NickServ nickname" : "NickServ becenév", + "NickServ password" : "NickServ jelszó", + "Use TLS" : "TSL használata", + "Use SASL" : "SASL használata", + "Tenant ID" : "Ügyfél-azonosító", + "Client ID" : "Kliensazonosító", + "Team ID" : "Csapatazonosító", + "Thread ID" : "Szálazonosító", + "XMPP/Jabber server URL" : "XMPP/Jabber-kiszolgáló webcíme", + "MUC server URL" : "MUC kiszolgáló webcíme", + "Jabber ID" : "Jabber azonosító", + "Pinned messages" : "Kitűzött üzenetek", + "Media" : "Média", + "Polls" : "Szavazások", + "Deck cards" : "Kártyák", + "Voice messages" : "Hangüzenetek", + "Locations" : "Helyek", + "Call recordings" : "Hívásfelvételek", + "Audio" : "Hangok", + "Show all pinned messages" : "Összes kitűzött üzenet megjelenítése", + "Show all media" : "Összes média megjelenítése", + "Show all files" : "Összes fájl megjelenítése", + "Show all polls" : "Összes szavazás megjelenítése", + "Show all deck cards" : "Összes kártya megjelenítése", + "Show all voice messages" : "Összes hangüzenet megjelenítése", + "Show all locations" : "Összes hely megjelenítése", + "Show all call recordings" : "Az összes hívásfelvétel megjelenítése", + "Show all audio" : "Összes hang megjelenítése", + "Show all other" : "Összes egyéb megtekintése", + "Follow conversation settings" : "Beszélgetésbeállítások követése", + "Group" : "Csoport", + "Team" : "Csapat", + "You reconnected to the call" : "Újracsatlakozott a híváshoz", + "{actor} reconnected to the call" : "{actor} újracsatlakozott a híváshoz", + "You added {user0} and {user1}" : "Hozzáadta {user0} és {user1} felhasználókat", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","Hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator added you and {user0}" : "Egy rendszergazda hozzáadta Önt és {user0} felhasználót", + "{actor} added you and {user0}" : "{actor} hozzáadta Önt és {user0} felhasználót", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Egy rendszergazda hozzáadta Önt, {user0} felhasználót és még %n résztvevőt","Egy rendszergazda hozzáadta Önt, {user0} felhasználót és még %n résztvevőt"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} hozzáadta Önt, {user0} felhasználót és még %n résztvevőt","{actor} hozzáadta Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator added {user0} and {user1}" : "Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat", + "{actor} added {user0} and {user1}" : "{actor} hozzáadta {user0} és {user1} felhasználót", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","Egy rendszergazda hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt","{actor} hozzáadta {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "You removed {user0} and {user1}" : "Eltávolította {user0} és {user1} felhasználókat", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","Eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator removed you and {user0}" : "Egy rendszergazda eltávolította Önt és {user0} felhasználót", + "{actor} removed you and {user0}" : "{actor} eltávolította Önt és {user0} felhasználót", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Egy rendszergazda eltávolította Önt, {user0} felhasználót és még %n résztvevőt","Egy rendszergazda eltávolította Önt, {user0} felhasználót és még %n résztvevőt"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} eltávolította Önt, {user0} felhasználót és még %n résztvevőt","{actor} eltávolította Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator removed {user0} and {user1}" : "Egy rendszergazda eltávolította {user0} és {user1} felhasználót", + "{actor} removed {user0} and {user1}" : "{actor} eltávolította {user0} és {user1} felhasználót", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Egy rendszergazda eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","Egy rendszergazda eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt","{actor} eltávolította {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "You and {user0} joined the call" : "Ön és {user0} csatlakozott a híváshoz", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ön, {user0} és még %n résztvevő csatlakozott a híváshoz","Ön, {user0} és még %n résztvevő csatlakozott a híváshoz"], + "{user0} and {user1} joined the call" : "{user0} és {user1} csatlakozott a híváshoz", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} és még %n résztvevő csatlakozott a híváshoz","{user0}, {user1} és még %n résztvevő csatlakozott a híváshoz"], + "You and {user0} left the call" : "Ön és {user0} kilépett a hívásból", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ön, {user0} és még %n résztvevő kilépett a hívásból","Ön, {user0} és még %n résztvevő kilépett a hívásból"], + "{user0} and {user1} left the call" : "{user0} és {user1} kilépett a hívásból", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} és még %n résztvevő kilépett a hívásból","{user0}, {user1} és még %n résztvevő kilépett a hívásból"], + "You promoted {user0} and {user1} to moderators" : "Moderátorrá léptette elő {user0} és {user1} felhasználókat", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Moderátorrá léptette elő {user0} és {user1} felhasználókat, és még %n résztvevőt","Moderátorrá léptette elő {user0} és {user1} felhasználókat, és még %n résztvevőt"], + "An administrator promoted you and {user0} to moderators" : "Egy rendszergazda moderátorrá léptette elő Önt és {user0} felhasználót", + "{actor} promoted you and {user0} to moderators" : "{actor} moderátorrá léptette elő Önt és {user0} felhasználót", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Egy rendszergazda moderátorrá léptette elő Önt, {user0} felhasználót és még %n további résztvevőt","Egy rendszergazda moderátorrá léptette elő Önt, {user0} felhasználót és még %n további résztvevőt"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} moderátorra léptette elő Önt, {user0} felhasználót és még %n résztvevőt","{actor} moderátorra léptette elő Önt, {user0} felhasználót és még %n résztvevőt"], + "An administrator promoted {user0} and {user1} to moderators" : "Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt","Egy rendszergazda moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt","{actor} moderátorrá léptette elő {user0} és {user1} felhasználókat, valamint még %n résztvevőt"], + "You demoted {user0} and {user1} from moderators" : "Lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Lefokozta {user0} és {user1} felhasználókat, valamint még %n résztvevőt a moderátorok közül","Lefokozta {user0} és {user1} felhasználókat, valamint még %n résztvevőt a moderátorok közül"], + "An administrator demoted you and {user0} from moderators" : "Egy rendszergazda lefokozta Önt és {user0} felhasználót a moderátorok közül", + "{actor} demoted you and {user0} from moderators" : "{actor} lefokozta Önt és {user0} felhasználót a moderátorok közül", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Egy rendszergazda lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül","Egy rendszergazda lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül","{actor} lefokozta Önt és {user0} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "An administrator demoted {user0} and {user1} from moderators" : "Egy rendszegazda lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} lefokozta {user0} és {user1} felhasználókat a moderátorok közül", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Egy rendszergazda lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül","Egy rendszergazda lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül","{actor} lefokozta {user0} és {user1} felhasználót, valamint még %n résztvevőt a moderátorok közül"], + "You:" : "Ön:", + "You: {lastMessage}" : "Ön: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "A kiszolgáló frissítve lett.", + "(edited by you)" : "(Ön szerkesztette)", + "(edited by a deleted user)" : "(törölt felhasználó szerkesztette)", + "(edited by {moderator})" : "({moderator} szerkesztette)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Csatlakozni próbál egy beszélgetéshez, miközben aktív munkamenetet folytat egy másik ablakban vagy eszközön. Ezt a Nextcloud Beszélgetés jelenleg nem támogatja. Mit szeretne tenni?", + "Leave this page" : "Oldal elhagyása", + "Join here" : "Csatlakozás", + "Deck card has been posted to {conversation}" : "Kártya lett közzétéve a következőben: {conversation}", + "An error occurred while posting deck card to conversation" : "Hiba történt a kártya beszélgetésbe küldése során", + "Post to a conversation" : "Elküldés egy beszélgetésbe", + "Post to conversation" : "Elküldés egy beszélgetésbe", + "The recording failed. Please contact your administrator." : "A felvétel sikertelen. Lépjen kapcsolatba a rendszergazdával.", + "Location has been posted to {conversation}" : "Hely lett közzétéve a következőben: {conversation}", + "An error occurred while posting location to conversation" : "Hiba történt a hely beszélgetésbe küldése során", + "Share to a conversation" : "Megosztás egy beszélgetésben", + "Share to conversation" : "Megosztás egy beszélgetésben", + "In conversation" : "Beszélgetésben", + "Search in conversation: {conversation}" : "Keresés a beszélgetésben: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "A kéréseit a nyers erős támadás elleni védelem fogja vissza", + "Error while clearing conversation history" : "Hiba a beszélgetés előzményeinek törlése során", + "Error occurred while allowing guests" : "Hiba történt a vendégek engedélyezése során", + "Error occurred while disallowing guests" : "Hiba történt a vendégek letiltása során", + "Error occurred when restricting the conversation to moderator" : "Hiba történt a beszélgetés moderátorra történő korlátozása során", + "Error occurred when opening the conversation to everyone" : "Hiba történt a beszélgetés mindenki számára történő megnyitása során", + "Conversation password has been saved" : "A beszélgetés jelszava mentve", + "Conversation password has been removed" : "A beszélgetés jelszava eltávolítva", + "Error occurred while saving conversation password" : "Hiba történt a beszélgetés jelszavának mentése során", + "Call recording is starting." : "A hívásfelvétel elindul.", + "Call recording stopped while starting." : "A hívásfelvétel leállt az indítása során.", + "Call recording stopped. You will be notified once the recording is available." : "A hívásfelvétel leállt. Értesítve lesz, amint a felvétel elérhető lesz.", + "Conversation picture set" : "A beszélgetés képe beállítva", + "Conversation picture deleted" : "A beszélgetés képe törölve", + "Could not delete the conversation picture" : "Nem sikerült a beszélgetés képének törlése", + "Could not remove the automatic expiration" : "Nem sikerült az automatikus lejárat eltávolítása", + "Could not post message: {errorMessage}" : "Nem sikerült elküldeni az üzenetet: {errorMessage}", + "Participant is banned successfully" : "A résztvevő sikeresen kitiltva", + "Error while banning the participant" : "Hiba a résztvevő kitiltása során", + "An error occurred while fetching the participants" : "Hiba történt a résztvevők letöltése során", + "Could not send invitation to {actorId}" : "Nem sikerült elküldeni a meghívót a következőnek: {actorId}", + "Invitations sent" : "Meghívók elküldve", + "Error occurred when sending invitations" : "Hiba történt a meghívók küldése során", + "Failed to join the conversation." : "Nem sikerült csatlakozni a beszélgetéshez.", + "An error occurred while creating breakout rooms" : "Hiba történt a szétbontott szobák létrehozása során", + "An error occurred while re-ordering the attendees" : "Hiba történt a résztvevők átrendezése során", + "An error occurred while deleting breakout rooms" : "Hiba történt a szétbontott szobák törlése során", + "An error occurred while starting breakout rooms" : "Hiba történt a szétbontott szobák indítása során", + "An error occurred while stopping breakout rooms" : "Hiba történt a szétbontott szobák leállítása során", + "An error occurred while sending a message to the breakout rooms" : "Hiba történt a szétbontott szobáknak történő üzenetküldés során", + "An error occurred while requesting assistance" : "Hiba történt a segítségkérés során", + "An error occurred while resetting the request for assistance" : "Hiba történt a segítségkérés alaphelyzetbe állítása során", + "An error occurred while joining breakout room" : "Hiba történt a szétbontott szobák összevonása során", + "Failed to rename the thread" : "Nem sikerült átnevezni a szálat", + "Error fetching upcoming events" : "Hiba a következő események lekérése során", + "Error fetching upcoming reminders" : "Hiba a következő emlékeztetők lekérése során", + "An error occurred while accepting an invitation" : "Hiba történt a meghívás elfogadása során", + "An error occurred while rejecting an invitation" : "Hiba történt a meghívás elutasítása során", + "{guest} (guest)" : "{guest} (vendég)", + "Poll draft has been saved" : "A szavazásvázlat mentve lett", + "An error occurred while saving the draft" : "Hiba történt a vázlat mentése során", + "An error occurred while submitting your vote" : "Hiba történt a szavazata leadása során", + "An error occurred while ending the poll" : "Hiba történt a szavazás befejezése során", + "An error occurred while deleting the poll draft" : "Hiba történt a szavazásvázlat törlése során", + "Poll \"{name}\" was created by {user}. Click to vote" : "„{name}” szavazás, létrehozta: {user}. Kattintson a szavazáshoz.", + "Failed to add reaction" : "A reakció hozzáadása sikertelen", + "Failed to remove reaction" : "A reakció eltávolítása sikertelen", + "The server is in maintenance mode." : "A kiszolgáló karbantartási módban van.", + "Federated server was updated." : "A föderált kiszolgáló frissítve lett.", + "Error while uploading file \"{fileName}\"" : "Hiba a(z) „{fileName}” fájl feltöltése során", + "Not enough free space to upload file \"{fileName}\"" : "Nincs elég szabad hely a(z) „{fileName}” fájl feltöltéséhez", + "You are not allowed to share files" : "Nem oszthat meg fájlokat", + "Error while sharing file" : "Hiba a fájl megosztása során", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "A Nextcloud Beszélgetés nem támogatja teljes mértékben az Ön által használt böngészőt. Használja a Mozilla Firefox, a Microsoft Edge, a Google Chrome vagy az Apple Safari legújabb verzióját.", + "_In %n hour_::_In %n hours_" : ["%n óra múlva","%n óra múlva"], + "_%n minute _::_%n minutes_" : ["%n perc múlva","%n perc múlva"], + "In {hours} and {minutes}" : "{hours} és {minutes} múlva", + "_In %n minute_::_In %n minutes_" : ["%n perc múlva","%n perc múlva"], + "Later today – {timeLocale}" : "Később a mai nap – {timeLocale}", + "Set time for later today" : "Idő beállítása későbbre a mai nap", + "Tomorrow – {timeLocale}" : "Holnap – {timeLocale}", + "Set time for tomorrow" : "Idő beállítása holnapra", + "This weekend – {timeLocale}" : "Ez a hétvége – {timeLocale}", + "Set time for this weekend" : "Idő beállítása a hétvégére", + "Next week – {timeLocale}" : "Következő hét – {timeLocale}", + "Set time for next week" : "Idő beállítása a következő hétre", + "Message link copied to clipboard" : "Az üzenet hivatkozása a vágólapra másolva", + "Conversation link copied to clipboard" : "A beszélgetési hivatkozás vágólapra másolva", + "The link could not be copied" : "A hivatkozást nem lehetett másolni", + "Error while parsing a PROPFIND error" : "Hiba történt a PROPFIND hiba feldolgozása során", + "Sending signaling message has failed" : "A jelző üzenet küldése sikertelen", + "Lost connection to signaling server. Trying to reconnect." : "Megszakadt a kapcsolat a jelzőkiszolgálóval. Újracsatlakozás kísérlete.", + "Lost connection to signaling server." : "Megszakadt a kapcsolat a jelzőkiszolgálóval.", + "Connecting is taking longer than expected …" : "A kapcsolódás a vártnál tovább tart…", + "Failed to connect. Retrying …" : "Nem sikerült a csatlakozás. Újrapróbálkozás…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nem sikerült a csatlakozás. A jelzőkiszolgáló lehet, hogy helytelenül van beállítva.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Frissíteni kell a beállított jelzőkiszolgálót, hogy kompatibilis legyen a Beszélgetés ezen verziójával. Lépjen kapcsolatba a rendszergazdával.", + "Please restart the app." : "Indítsa újra az alkalmazást.", + "Please reload the page." : "Frissítse az oldalt.", + "Please try to restart the app." : "Próbálja meg újraindítani az alkalmazást.", + "Please try to reload the page." : "Próbálja meg újratölteni az oldalt.", + "Do not disturb" : "Ne zavarjanak", + "Away" : "Távol", + "Microphone {number}" : "{number}. mikrofon", + "Camera {number}" : "{number}. kamera", + "Speaker {number}" : "{number}. hangszóró", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Úgy tűnik, hogy némítva beszél, oldja fel a némítást, hogy mások is hallják", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nem sikerült kapcsolatot létesíteni legalább egy résztvevővel. TURN kiszolgálóra lehet szükség a művelethez. Kérje meg a rendszergazdáját, hogy állítson be egyet {linkstart}ezen dokumentáció{linkend} segítségével.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Ez a vártnál hosszabb időt vesz igénybe. A média engedélyeket már megadta (vagy elutasította)? Ha igen, indítsa újra a böngészőt, mivel a hang és a videó meghibásodott", + "Access to microphone & camera is only possible with HTTPS" : "A mikrofon és a kamera hozzáférése csak HTTPS-en lehetséges", + "Please move your setup to HTTPS" : "Váltson HTTPS-re", + "Access to microphone & camera was denied" : "A kamera és a mikrofon hozzáférése letiltva", + "WebRTC is not supported in your browser" : "A böngészője nem támogatja a WebRTC-t", + "Please use a different browser like Firefox or Chrome" : "Használjon másik böngészőt, például Firefoxot vagy Chrome-ot", + "Error while accessing microphone & camera" : "Hiba a kamera és a mikrofon hozzáférésekor", + "%s Talk on your mobile devices" : "%s Beszélgetés a mobileszközein", + "Join conversations at any time, anywhere, on any device." : "Csatlakozzon a beszélgetésekhez bármikor, bárhol és bármilyen eszközön.", + "Android app" : "androidos alkalmazás", + "iOS app" : "iOS-es alkalmazás", + "__language_name__" : "Magyar", + "Webhook Demo" : "Webhook demó", + "Call summary (%s)" : "Hívásösszesítő (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "A hívásösszesítő bot közzétesz egy áttekintő üzenetet a hívás után, mely felsorolja a résztvevőket és vázolja a feladatokat", + "Tasks" : "Feladatok", + "Notes" : "Jegyzetek", + "Reports" : "Jelentések", + "Decisions" : "Döntések", + "Agenda" : "Napirend", + "Call summary" : "Hívásösszesítő", + "Call summary - {title}" : "Hívásösszesítő – {title}", + "Talk conversation for event" : "Eseményhez tartozó beszélgetés", + "Client Push is installed, this improves the performance of desktop clients." : "A Kliensleküldés nincs telepítve, ez javítaná az asztali kliensek teljesítményét.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "A {notify_push} nincs telepítve, ez teljesítményproblémákhoz vezethet az asztali kliensek használatakor.", + "Next meeting" : "Következő találkozó", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Ütemezzen egy találkozót a naptárából. A beszélgetést kell megjelölni helyszínként, hogy megjelenjen itt.", + "Join conversations from remote Nextcloud servers" : "Csatlakozás távoli Nextcloud-kiszolgálókon lévő beszélgetésekhez", + "Your default media state has been saved" : "Az alapértelmezett médiaállapot mentve lett", + "Set reminder for later today" : "Emlékeztető beállítása a mai napon későbbre", + "Set reminder for tomorrow" : "Emlékeztető beállítása holnapra", + "Set reminder for this weekend" : "Emlékeztető beállítása erre a hétvégére", + "Set reminder for next week" : "Emlékeztető beállítása a következő hétre", + "Generate summary" : "Összefoglaló előállítása", + "Open poll • You voted already" : "Nyílt szavazás • Már szavazott", + "Open poll • Click to vote" : "Nyílt szavazás • Kattintson a szavazáshoz", + "Poll • Ended" : "Szavazás • Véget ért", + "Talk recording from {time} ({conversation})" : "Beszélgetés felvétele ekkorról: {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Szavazás eredménye • %n szavazat","Szavazás eredménye • %n szavazat"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Nyílt szavazás • %n szavazat","Nyílt szavazás • %n szavazat"], + "Submit vote" : "Szavazat leadása", + "Your privacy setting has been saved" : "Az adatvédelmi beállítások mentve", + "Your personal setting has been saved" : "A személyes beállítása mentve lett", + "Failed to save sounds setting" : "Nem sikerült menteni a hangbeállításokat", + "Sounds setting saved" : "Hangbeállítás mentve", + "Always shown if recording consent is required" : "Mindig megjelenik, ha felvételi hozzájárulás szükséges", + "Nextcloud Talk was updated, you cannot start or join a call." : "A Nextcloud Beszélgetés frissítve lett, nem indíthat vagy csatlakozhat híváshoz.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Csatlakozott a beszélgetéshez egy másik ablakban vagy eszközön. Ezt a Nextcloud Beszélgetés jelenleg nem támogatja, ezért ezt a munkamenetet lezárták.", + "Nextcloud Talk was updated." : "A Nextcloud Beszélgetés frissítve lett.", + "Nextcloud is in maintenance mode." : "A Nextcloud karbantartási módban van.", + "Nextcloud Talk Federation was updated." : "A Nextcloud Beszélgetés föderációja frissült.", + "Enable live translation" : "Élő fordítás bekapcsolása", + "I picked list style" : "A listastílust választottam", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hé! A Beszélgetést listastílussal vagy üzenetbuborékokkal használod?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/id.js b/l10n/id.js new file mode 100644 index 0000000..f2ba401 --- /dev/null +++ b/l10n/id.js @@ -0,0 +1,513 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "percakapan", + "(Duration %s)" : "(Durasi %s)", + "You attended a call with {user1}" : "Anda menghadiri panggilan dengan {user1}", + "_%n guest_::_%n guests_" : ["%n tamu"], + "You attended a call with {user1} and {user2}" : "Anda menghadiri panggilan dengan {user1} dan {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Anda menghadiri panggilan dengan {user1}, {user2} dan {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Anda menghadiri panggilan dengan {user1}, {user2}, {user3} dan {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Anda menghadiri panggilan dengan {user1}, {user2}, {user3}, {user4} dan {user5}", + "{actor} invited you to {call}" : "{actor} mengundang Anda untuk {call}", + "You were invited to a conversation or had a call" : "Anda diundang dalam percakapan atau mendapat panggilan", + "Other activities" : "Aktivitas lain", + "Talk" : "Talk", + "Guest" : "Tamu", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge dan Safari sekarang dapat digunakan untuk berpartisipasi dalam panggilan audio dan video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sekarang Anda dapat memberi tahu semua peserta dengan memposting \"@all\" ke dalam obrolan", + "- With the \"arrow-up\" key you can repost your last message" : "- Dengan tombol \"panah-atas\" Anda dapat memposting ulang pesan terakhir Anda", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sekarang dapat memiliki perintah, kirim \"/help\" sebagai pesan obrolan untuk melihat apakah administrator Anda mengonfigurasi beberapa", + "- You can now mention guests in the chat" : "- Anda sekarang dapat menyebut tamu di obrolan", + "{actor} created the conversation" : "{actor} membuat sebuah percakapan", + "You created the conversation" : "Anda membuat sebuah percakapan", + "Message deleted by author" : "Pesan dihapus oleh penyusun", + "Deleted user" : "Pengguna dihapus", + "Administration" : "Administrasi", + "System" : "Sistem", + "Talk to %s" : "Chat dengan %s", + "Storage quota exceeded" : "Kuota penyimpanan terlampaui", + "File not found" : "File tidak ditemukan", + "Poll" : "Polling", + "File is too big" : "Berkas terlalu besar", + "Invalid file provided" : "Berkas tidak valid", + "Invalid image" : "Gambar tidak valid", + "Unknown filetype" : "Tipe berkas tak dikenal", + "Say hi to your friends and colleagues!" : "Katakan halo kepada teman dan kolega Anda!", + "You were mentioned" : "Anda disebutkan", + "Description" : "Deskrisi", + "Meeting" : "Rapat", + "Dismiss notification" : "Abaikan notifikasi", + "Accept" : "Terima", + "Decline" : "Tolak", + "New message" : "Pesan baru", + "Notification" : "Notifikasi", + "{user} in {call}" : "{user} di {call}", + "Open settings" : "Buka pengaturan", + "error" : "galat", + "Default" : "Bawaan", + "Presentation" : "Presentasi", + "{user} in {conversation}" : "{user} di {conversation}", + "Avatar image is not square" : "Gambar avatar tidak berbentuk persegi", + "Other" : "Lainnya", + "Andorra" : "Andorra", + "United Arab Emirates" : "Uni Emirat Arab", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua dan Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartika", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Amerika", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Pulau Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia dan Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthelemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius dan Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Pulau Cocos (Keeling)", + "Central African Republic" : "Republik Afrika Tengah", + "Congo" : "Congo", + "Switzerland" : "Swiss", + "Côte d'Ivoire" : "Pantai Gading", + "Cook Islands" : "Pulau Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "Cina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Pulau Natal", + "Cyprus" : "Cyprus", + "Czechia" : "Ceko", + "Germany" : "Jerman", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominika", + "Dominican Republic" : "Republik Dominika", + "Algeria" : "Algeria", + "Ecuador" : "Ekuador", + "Estonia" : "Estonia", + "Egypt" : "Mesir", + "Western Sahara" : "Sahara Barat", + "Eritrea" : "Eritrea", + "Spain" : "Spanyol", + "Ethiopia" : "Ethiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Kepulauan Falkland (Malvinas)", + "Faroe Islands" : "Pulau Faroe", + "France" : "Prancis", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Britania Raya Britania Raya dan Irlandia Utara", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Prancis", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinea Khatulistiwa", + "Greece" : "Yunani", + "South Georgia and the South Sandwich Islands" : "Georgia Selatan dan Kepulauan Sandwich Selatan", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Pulau Heard dan Kepulauan McDonald", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlandia", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "Wilayah Samudra Hindia Inggris", + "Iraq" : "Irak", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordan", + "Japan" : "Jepang", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizstan", + "Cambodia" : "Kambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komoro", + "Saint Kitts and Nevis" : "Saint Kitts dan Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kepulauan Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos (Republik Demokratik Rakyat)", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (bagian Prancis)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Kepulauan Marshall", + "North Macedonia" : "Makedonia Utara", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Kepulauan Mariana Utara", + "Martinique" : "Martinik", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia Baru", + "Niger" : "Niger", + "Norfolk Island" : "Kepulauan Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Belanda", + "Norway" : "Norwegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Selandia Baru", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinesia Prancis", + "Papua New Guinea" : "Papua Nugini", + "Philippines" : "Filipina", + "Pakistan" : "Pakistan", + "Poland" : "Polandia", + "Saint Pierre and Miquelon" : "Saint Pierre dan Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Negara", + "Portugal" : "Portugis", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federasi Rusia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arab Saudi", + "Solomon Islands" : "Kepulauan Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Swedia", + "Singapore" : "Singapora", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension dan Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard dan Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan Selatan", + "Sao Tome and Principe" : "Sao Tome dan Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (bagian Belanda)", + "Syrian Arab Republic" : "Republik Arab Suriah", + "Turks and Caicos Islands" : "Kepulauan Turks dan Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Wilayah Selatan Prancis", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turki", + "Trinidad and Tobago" : "Trinidad dan Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania (Republik Bersatu)", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Pulau Kecil Terluar Amerika Serikat", + "United States of America" : "Amerika Serikat", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent dan Grenadine", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis dan Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrika Selatan", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federasi", + "Invalid date, date format must be YYYY-MM-DD" : "Tanggal salah, format tanggal harus TTTT-BB-HH", + "The password is wrong. Try again." : "Kata sandi salah. Coba lagi", + "Password" : "Kata kunci", + "Submit" : "Kirim", + "Request password" : "Minta kata sandi", + "Everyone" : "Semua orang", + "Save changes" : "Simpan perubahan", + "Saving …" : "Menyimpan ...", + "Saved!" : "Disimpan!", + "Limit to groups" : "Batasi ke grup", + "Enabled" : "Diaktifkan", + "Disabled" : "Dinonaktifkan", + "State" : "Kondisi", + "Name" : "Nama", + "Beta" : "Beta", + "Permissions" : "Izin", + "Off" : "Nonaktif", + "General settings" : "Pengaturan umum", + "Enable encryption" : "Aktifkan enkripsi", + "Pending" : "Tunggu", + "Error" : "Kesalahan", + "Active" : "Aktif", + "Expired" : "Kedaluwarsa", + "Never" : "Tidak pernah", + "Language" : "Bahasa", + "Country" : "Negara", + "Status" : "Status", + "Created at" : "Dibuat saat", + "Yes" : "Ya", + "No" : "Tidak", + "Shared secret" : "Rahasia bersama", + "{option1} and {option2}" : "{option1} dan {option2}", + "Failed" : "Gagal", + "OK" : "OK", + "Federated user" : "Pengguna terfederasi", + "Confirm" : "Konfirmasi", + "Reset" : "Setel ulang", + "Cancel" : "Membatalkan", + "Back" : "Kembali", + "Now" : "Sekarang", + "Loading …" : "Memuat …", + "From" : "Dari", + "To" : "Hingga", + "Calendar" : "Kalender", + "Attendees" : "Peserta", + "Save" : "Simpan", + "No results" : "Tidak ada hasil", + "Done" : "Selesai", + "Grid view" : "Tampilan kotak", + "Reload" : "Muat ulang", + "Copy link" : "Salin tautan", + "None" : "Tidak ada", + "You" : "Anda", + "Collapse" : "Tutup", + "Expand" : "Perluas", + "Drop your files to upload" : "Lepas berkas Anda untuk mengunggah", + "Favorite" : "Favorit", + "Date:" : "Tanggal:", + "Note:" : "Catatan:", + "Hide details" : "Sembunyikan detail", + "Show details" : "Tampilkan detail", + "Disable" : "Nonaktifkan", + "Enable" : "Aktifkan", + "Choose" : "Pilih", + "The file must be a PNG or JPG" : "File harus berupa PNG atau JPG", + "Restricted" : "Terbatas", + "Personal" : "Pribadi", + "_%n hour_::_%n hours_" : ["%n jam"], + "_%n day_::_%n days_" : ["%n hari"], + "_%n week_::_%n weeks_" : ["%n minggu"], + "Password protection" : "Password protection", + "Set a password" : "Tetapkan kata sandi", + "Change password" : "Ubah kata sandi", + "Invalid language" : "Bahasa tidak valid", + "Edit" : "Sunting", + "More information" : "Informasi lebih lanjut", + "Delete" : "Hapus", + "Notifications" : "Pemberitahuan", + "In {conversation}" : "Di {conversation}", + "Join" : "Gabung", + "Create conversation" : "Buat percakapan", + "Enter your name" : "Masukkan nama Anda", + "Log in" : "Masuk", + "Browse" : "Telusuri", + "Mark as read" : "tandai sudah dibaca", + "Mark as unread" : "Tandai belum dibaca", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Tambah ke favorit", + "Home" : "Beranda", + "Unread" : "Belum dibaca", + "Alphabetically" : "Secara alfabet", + "Unread messages" : "Pesan belum dibaca", + "Clear filters" : "Hapus filter", + "Threads" : "Utas", + "Clear filter" : "Bersihkan filter", + "Users" : "Pengguna", + "Groups" : "Grup", + "Teams" : "Tim", + "No search results" : "Tidak ada hasil pencarian", + "Select a device" : "Pilih perangkat", + "Devices" : "Perangkat", + "Invalid path selected" : "Jalur terpilih invalid", + "Blur" : "Kabur", + "Upload" : "Unggah", + "Files" : "Berkas", + "7 days" : "7 hari", + "Reply" : "Balas", + "More actions" : "Tindakan lainnya", + "Set reminder" : "Tetapkan pengingat", + "Edit message" : "Edit pesan", + "Copy message" : "Salin pesan", + "Download file" : "Unduh berkas", + "Translate" : "Terjemahkan", + "Set custom reminder" : "Tetapkan pengingat kustom", + "React with {emoji}" : "Bereaksi dengan {emoji}", + "Dismiss" : "Batal", + "Detect language" : "Deteksi bahasa", + "The message could not be translated" : "Pesan tidak dapat diterjemahkan", + "Translation copied to clipboard" : "Terjemahan disalin ke papan klip", + "Translation could not be copied" : "Terjemahan tidak dapat disalin", + "Translate message" : "Terjemahkan pesan", + "Source language to translate from" : "Bahasa sumber untuk diterjemahkan dari", + "Translate from" : "Terjemahkan dari", + "Target language to translate into" : "Bahasa target untuk diterjemahkan ke", + "Translate to" : "Terjemahkan ke", + "Translating" : "Menerjemahkan", + "Copy translated text" : "Salin teks terjemahan", + "Send now" : "Kirim sekarang", + "Message sent" : "Pesan terkirim", + "Contact" : "Kontak", + "{stack} in {board}" : "{stack} di {board}", + "Remove {fileName}" : "Hapus {fileName}", + "_%n reply_::_%n replies_" : ["%n balasan"], + "_%n vote_::_%n votes_" : ["%n suara"], + "No messages" : "Tidak ada pesan", + "Unpin" : "Lepas sematan", + "Add participants" : "Tambahkan peserta", + "Allow guests to join via link" : "Izinkan tamu untuk bergabung melalui tautan", + "File to share" : "Berkas untuk dibagikan", + "Send later" : "Kirim nanti", + "Cancel editing" : "Batalkan pengeditan", + "Share from Files" : "Bagikan dari Berkas", + "Upload from device" : "Unggah dari perangkat", + "Smart picker" : "Pemilih cerdas", + "End recording and send" : "Akhiri rekaman dan kirim", + "Dismiss recording" : "Batalkan rekaman", + "Error while recording audio" : "Kesalahan saat merekam audio", + "New file" : "File baru", + "Blank" : "Kosong", + "Send" : "Kirim", + "Question" : "Pertanyaan", + "Settings" : "Setelan", + "Results" : "Hasil", + "guest" : "pengunjung", + "Remove participant" : "Hapus peserta", + "Remove" : "Hapus", + "Add users or groups" : "Add users or groups", + "Add users" : "Tambahkan pengguna", + "Integrations" : "Integrasi", + "Searching …" : "Mencari …", + "Search or add participants" : "Cari atau tambah peserta", + "An error occurred while adding the participants" : "Terjadi kesalahan saat menambahkan peserta", + "Participants" : "Peserta", + "You have new unread messages in the chat." : "Anda memiliki pesan baru yang belum dibaca dalam obrolan.", + "Chat" : "Obrolan", + "Details" : "Detail", + "No results found" : "Tidak ada hasil ditemukan", + "Load more results" : "Muat lebih banyak hasil", + "Projects" : "Proyek", + "Search conversations or users" : "Cari percakapan atau pengguna", + "Select conversation" : "Pilih percakapan", + "Notification settings" : "Pengaturan notifikasi", + "Default language" : "Bahasa bawaan", + "Privacy" : "Privasi", + "Attachments folder" : "Folder lampiran", + "Search" : "Cari", + "Recording" : "Perekaman", + "React with {reaction}" : "Bereaksi dengan {reaction}", + "Start recording" : "Mulai merekam", + "Keep" : "Simpan", + "Select a region" : "Pilih wilayah", + "Local time: {time}" : "Waktu lokal: {time}", + "Join a conversation or start a new one!" : "Gabung dengan percakapan atau mulai yang baru!", + "Join a conversation or start a new one" : "Gabung dengan percakapan atau mulai yang baru", + "Nextcloud URL" : "URL Nextcloud", + "Talk conversation" : "Percakapan Talk", + "User" : "Pengguna", + "API token" : "Token API", + "Login" : "Log masuk", + "Nickname" : "Nama panggilan", + "Client ID" : "ID Klien", + "Team ID" : "ID tim", + "Media" : "Media", + "Polls" : "Polling", + "Locations" : "Lokasi", + "Audio" : "Audio", + "Show all files" : "Tampilkan semua berkas", + "Group" : "Grup", + "Team" : "Tim", + "Error while sharing file" : "Kesalahan saat membagikan berkas", + "Later today – {timeLocale}" : "Nanti hari ini – {timeLocale}", + "Tomorrow – {timeLocale}" : "Besok – {timeLocale}", + "This weekend – {timeLocale}" : "Akhir pekan ini – {timeLocale}", + "Next week – {timeLocale}" : "Minggu depan – {timeLocale}", + "Error while parsing a PROPFIND error" : "Kesalahan saat mengurai kesalahan PROPFIND", + "Please reload the page." : "Silakan muat ulang halaman.", + "Do not disturb" : "Jangan diganggu", + "Away" : "Jauh", + "Android app" : "Aplikasi Android", + "iOS app" : "Aplikasi iOS", + "__language_name__" : "Bahasa Indonesia", + "Call summary (%s)" : "Ringkasan panggilan ( %s )", + "Tasks" : "Tugas", + "Notes" : "Catatan", + "Reports" : "Laporan", + "Call summary - {title}" : "Ringkasan panggilan - {judul}", + "Talk conversation for event" : "Percakapan Talk untuk acara", + "Set reminder for later today" : "Atur pengingat untuk nanti hari ini", + "Set reminder for tomorrow" : "Atur pengingat untuk besok", + "Set reminder for this weekend" : "Atur pengingat untuk akhir pekan ini", + "Set reminder for next week" : "Atur pengingat untuk minggu depan" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/id.json b/l10n/id.json new file mode 100644 index 0000000..fd7114b --- /dev/null +++ b/l10n/id.json @@ -0,0 +1,511 @@ +{ "translations": { + "a conversation" : "percakapan", + "(Duration %s)" : "(Durasi %s)", + "You attended a call with {user1}" : "Anda menghadiri panggilan dengan {user1}", + "_%n guest_::_%n guests_" : ["%n tamu"], + "You attended a call with {user1} and {user2}" : "Anda menghadiri panggilan dengan {user1} dan {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Anda menghadiri panggilan dengan {user1}, {user2} dan {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Anda menghadiri panggilan dengan {user1}, {user2}, {user3} dan {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Anda menghadiri panggilan dengan {user1}, {user2}, {user3}, {user4} dan {user5}", + "{actor} invited you to {call}" : "{actor} mengundang Anda untuk {call}", + "You were invited to a conversation or had a call" : "Anda diundang dalam percakapan atau mendapat panggilan", + "Other activities" : "Aktivitas lain", + "Talk" : "Talk", + "Guest" : "Tamu", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge dan Safari sekarang dapat digunakan untuk berpartisipasi dalam panggilan audio dan video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sekarang Anda dapat memberi tahu semua peserta dengan memposting \"@all\" ke dalam obrolan", + "- With the \"arrow-up\" key you can repost your last message" : "- Dengan tombol \"panah-atas\" Anda dapat memposting ulang pesan terakhir Anda", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sekarang dapat memiliki perintah, kirim \"/help\" sebagai pesan obrolan untuk melihat apakah administrator Anda mengonfigurasi beberapa", + "- You can now mention guests in the chat" : "- Anda sekarang dapat menyebut tamu di obrolan", + "{actor} created the conversation" : "{actor} membuat sebuah percakapan", + "You created the conversation" : "Anda membuat sebuah percakapan", + "Message deleted by author" : "Pesan dihapus oleh penyusun", + "Deleted user" : "Pengguna dihapus", + "Administration" : "Administrasi", + "System" : "Sistem", + "Talk to %s" : "Chat dengan %s", + "Storage quota exceeded" : "Kuota penyimpanan terlampaui", + "File not found" : "File tidak ditemukan", + "Poll" : "Polling", + "File is too big" : "Berkas terlalu besar", + "Invalid file provided" : "Berkas tidak valid", + "Invalid image" : "Gambar tidak valid", + "Unknown filetype" : "Tipe berkas tak dikenal", + "Say hi to your friends and colleagues!" : "Katakan halo kepada teman dan kolega Anda!", + "You were mentioned" : "Anda disebutkan", + "Description" : "Deskrisi", + "Meeting" : "Rapat", + "Dismiss notification" : "Abaikan notifikasi", + "Accept" : "Terima", + "Decline" : "Tolak", + "New message" : "Pesan baru", + "Notification" : "Notifikasi", + "{user} in {call}" : "{user} di {call}", + "Open settings" : "Buka pengaturan", + "error" : "galat", + "Default" : "Bawaan", + "Presentation" : "Presentasi", + "{user} in {conversation}" : "{user} di {conversation}", + "Avatar image is not square" : "Gambar avatar tidak berbentuk persegi", + "Other" : "Lainnya", + "Andorra" : "Andorra", + "United Arab Emirates" : "Uni Emirat Arab", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua dan Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartika", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Amerika", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Pulau Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia dan Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthelemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius dan Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Pulau Cocos (Keeling)", + "Central African Republic" : "Republik Afrika Tengah", + "Congo" : "Congo", + "Switzerland" : "Swiss", + "Côte d'Ivoire" : "Pantai Gading", + "Cook Islands" : "Pulau Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "Cina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Pulau Natal", + "Cyprus" : "Cyprus", + "Czechia" : "Ceko", + "Germany" : "Jerman", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominika", + "Dominican Republic" : "Republik Dominika", + "Algeria" : "Algeria", + "Ecuador" : "Ekuador", + "Estonia" : "Estonia", + "Egypt" : "Mesir", + "Western Sahara" : "Sahara Barat", + "Eritrea" : "Eritrea", + "Spain" : "Spanyol", + "Ethiopia" : "Ethiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Kepulauan Falkland (Malvinas)", + "Faroe Islands" : "Pulau Faroe", + "France" : "Prancis", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Britania Raya Britania Raya dan Irlandia Utara", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guyana Prancis", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinea Khatulistiwa", + "Greece" : "Yunani", + "South Georgia and the South Sandwich Islands" : "Georgia Selatan dan Kepulauan Sandwich Selatan", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Pulau Heard dan Kepulauan McDonald", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Hungaria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlandia", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "Wilayah Samudra Hindia Inggris", + "Iraq" : "Irak", + "Iceland" : "Islandia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaika", + "Jordan" : "Jordan", + "Japan" : "Jepang", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizstan", + "Cambodia" : "Kambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komoro", + "Saint Kitts and Nevis" : "Saint Kitts dan Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Kepulauan Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos (Republik Demokratik Rakyat)", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (bagian Prancis)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Kepulauan Marshall", + "North Macedonia" : "Makedonia Utara", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Kepulauan Mariana Utara", + "Martinique" : "Martinik", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Meksiko", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Kaledonia Baru", + "Niger" : "Niger", + "Norfolk Island" : "Kepulauan Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Belanda", + "Norway" : "Norwegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Selandia Baru", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinesia Prancis", + "Papua New Guinea" : "Papua Nugini", + "Philippines" : "Filipina", + "Pakistan" : "Pakistan", + "Poland" : "Polandia", + "Saint Pierre and Miquelon" : "Saint Pierre dan Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina, Negara", + "Portugal" : "Portugis", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federasi Rusia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arab Saudi", + "Solomon Islands" : "Kepulauan Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Swedia", + "Singapore" : "Singapora", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension dan Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard dan Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan Selatan", + "Sao Tome and Principe" : "Sao Tome dan Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (bagian Belanda)", + "Syrian Arab Republic" : "Republik Arab Suriah", + "Turks and Caicos Islands" : "Kepulauan Turks dan Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Wilayah Selatan Prancis", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turki", + "Trinidad and Tobago" : "Trinidad dan Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania (Republik Bersatu)", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Pulau Kecil Terluar Amerika Serikat", + "United States of America" : "Amerika Serikat", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent dan Grenadine", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis dan Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrika Selatan", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federasi", + "Invalid date, date format must be YYYY-MM-DD" : "Tanggal salah, format tanggal harus TTTT-BB-HH", + "The password is wrong. Try again." : "Kata sandi salah. Coba lagi", + "Password" : "Kata kunci", + "Submit" : "Kirim", + "Request password" : "Minta kata sandi", + "Everyone" : "Semua orang", + "Save changes" : "Simpan perubahan", + "Saving …" : "Menyimpan ...", + "Saved!" : "Disimpan!", + "Limit to groups" : "Batasi ke grup", + "Enabled" : "Diaktifkan", + "Disabled" : "Dinonaktifkan", + "State" : "Kondisi", + "Name" : "Nama", + "Beta" : "Beta", + "Permissions" : "Izin", + "Off" : "Nonaktif", + "General settings" : "Pengaturan umum", + "Enable encryption" : "Aktifkan enkripsi", + "Pending" : "Tunggu", + "Error" : "Kesalahan", + "Active" : "Aktif", + "Expired" : "Kedaluwarsa", + "Never" : "Tidak pernah", + "Language" : "Bahasa", + "Country" : "Negara", + "Status" : "Status", + "Created at" : "Dibuat saat", + "Yes" : "Ya", + "No" : "Tidak", + "Shared secret" : "Rahasia bersama", + "{option1} and {option2}" : "{option1} dan {option2}", + "Failed" : "Gagal", + "OK" : "OK", + "Federated user" : "Pengguna terfederasi", + "Confirm" : "Konfirmasi", + "Reset" : "Setel ulang", + "Cancel" : "Membatalkan", + "Back" : "Kembali", + "Now" : "Sekarang", + "Loading …" : "Memuat …", + "From" : "Dari", + "To" : "Hingga", + "Calendar" : "Kalender", + "Attendees" : "Peserta", + "Save" : "Simpan", + "No results" : "Tidak ada hasil", + "Done" : "Selesai", + "Grid view" : "Tampilan kotak", + "Reload" : "Muat ulang", + "Copy link" : "Salin tautan", + "None" : "Tidak ada", + "You" : "Anda", + "Collapse" : "Tutup", + "Expand" : "Perluas", + "Drop your files to upload" : "Lepas berkas Anda untuk mengunggah", + "Favorite" : "Favorit", + "Date:" : "Tanggal:", + "Note:" : "Catatan:", + "Hide details" : "Sembunyikan detail", + "Show details" : "Tampilkan detail", + "Disable" : "Nonaktifkan", + "Enable" : "Aktifkan", + "Choose" : "Pilih", + "The file must be a PNG or JPG" : "File harus berupa PNG atau JPG", + "Restricted" : "Terbatas", + "Personal" : "Pribadi", + "_%n hour_::_%n hours_" : ["%n jam"], + "_%n day_::_%n days_" : ["%n hari"], + "_%n week_::_%n weeks_" : ["%n minggu"], + "Password protection" : "Password protection", + "Set a password" : "Tetapkan kata sandi", + "Change password" : "Ubah kata sandi", + "Invalid language" : "Bahasa tidak valid", + "Edit" : "Sunting", + "More information" : "Informasi lebih lanjut", + "Delete" : "Hapus", + "Notifications" : "Pemberitahuan", + "In {conversation}" : "Di {conversation}", + "Join" : "Gabung", + "Create conversation" : "Buat percakapan", + "Enter your name" : "Masukkan nama Anda", + "Log in" : "Masuk", + "Browse" : "Telusuri", + "Mark as read" : "tandai sudah dibaca", + "Mark as unread" : "Tandai belum dibaca", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Tambah ke favorit", + "Home" : "Beranda", + "Unread" : "Belum dibaca", + "Alphabetically" : "Secara alfabet", + "Unread messages" : "Pesan belum dibaca", + "Clear filters" : "Hapus filter", + "Threads" : "Utas", + "Clear filter" : "Bersihkan filter", + "Users" : "Pengguna", + "Groups" : "Grup", + "Teams" : "Tim", + "No search results" : "Tidak ada hasil pencarian", + "Select a device" : "Pilih perangkat", + "Devices" : "Perangkat", + "Invalid path selected" : "Jalur terpilih invalid", + "Blur" : "Kabur", + "Upload" : "Unggah", + "Files" : "Berkas", + "7 days" : "7 hari", + "Reply" : "Balas", + "More actions" : "Tindakan lainnya", + "Set reminder" : "Tetapkan pengingat", + "Edit message" : "Edit pesan", + "Copy message" : "Salin pesan", + "Download file" : "Unduh berkas", + "Translate" : "Terjemahkan", + "Set custom reminder" : "Tetapkan pengingat kustom", + "React with {emoji}" : "Bereaksi dengan {emoji}", + "Dismiss" : "Batal", + "Detect language" : "Deteksi bahasa", + "The message could not be translated" : "Pesan tidak dapat diterjemahkan", + "Translation copied to clipboard" : "Terjemahan disalin ke papan klip", + "Translation could not be copied" : "Terjemahan tidak dapat disalin", + "Translate message" : "Terjemahkan pesan", + "Source language to translate from" : "Bahasa sumber untuk diterjemahkan dari", + "Translate from" : "Terjemahkan dari", + "Target language to translate into" : "Bahasa target untuk diterjemahkan ke", + "Translate to" : "Terjemahkan ke", + "Translating" : "Menerjemahkan", + "Copy translated text" : "Salin teks terjemahan", + "Send now" : "Kirim sekarang", + "Message sent" : "Pesan terkirim", + "Contact" : "Kontak", + "{stack} in {board}" : "{stack} di {board}", + "Remove {fileName}" : "Hapus {fileName}", + "_%n reply_::_%n replies_" : ["%n balasan"], + "_%n vote_::_%n votes_" : ["%n suara"], + "No messages" : "Tidak ada pesan", + "Unpin" : "Lepas sematan", + "Add participants" : "Tambahkan peserta", + "Allow guests to join via link" : "Izinkan tamu untuk bergabung melalui tautan", + "File to share" : "Berkas untuk dibagikan", + "Send later" : "Kirim nanti", + "Cancel editing" : "Batalkan pengeditan", + "Share from Files" : "Bagikan dari Berkas", + "Upload from device" : "Unggah dari perangkat", + "Smart picker" : "Pemilih cerdas", + "End recording and send" : "Akhiri rekaman dan kirim", + "Dismiss recording" : "Batalkan rekaman", + "Error while recording audio" : "Kesalahan saat merekam audio", + "New file" : "File baru", + "Blank" : "Kosong", + "Send" : "Kirim", + "Question" : "Pertanyaan", + "Settings" : "Setelan", + "Results" : "Hasil", + "guest" : "pengunjung", + "Remove participant" : "Hapus peserta", + "Remove" : "Hapus", + "Add users or groups" : "Add users or groups", + "Add users" : "Tambahkan pengguna", + "Integrations" : "Integrasi", + "Searching …" : "Mencari …", + "Search or add participants" : "Cari atau tambah peserta", + "An error occurred while adding the participants" : "Terjadi kesalahan saat menambahkan peserta", + "Participants" : "Peserta", + "You have new unread messages in the chat." : "Anda memiliki pesan baru yang belum dibaca dalam obrolan.", + "Chat" : "Obrolan", + "Details" : "Detail", + "No results found" : "Tidak ada hasil ditemukan", + "Load more results" : "Muat lebih banyak hasil", + "Projects" : "Proyek", + "Search conversations or users" : "Cari percakapan atau pengguna", + "Select conversation" : "Pilih percakapan", + "Notification settings" : "Pengaturan notifikasi", + "Default language" : "Bahasa bawaan", + "Privacy" : "Privasi", + "Attachments folder" : "Folder lampiran", + "Search" : "Cari", + "Recording" : "Perekaman", + "React with {reaction}" : "Bereaksi dengan {reaction}", + "Start recording" : "Mulai merekam", + "Keep" : "Simpan", + "Select a region" : "Pilih wilayah", + "Local time: {time}" : "Waktu lokal: {time}", + "Join a conversation or start a new one!" : "Gabung dengan percakapan atau mulai yang baru!", + "Join a conversation or start a new one" : "Gabung dengan percakapan atau mulai yang baru", + "Nextcloud URL" : "URL Nextcloud", + "Talk conversation" : "Percakapan Talk", + "User" : "Pengguna", + "API token" : "Token API", + "Login" : "Log masuk", + "Nickname" : "Nama panggilan", + "Client ID" : "ID Klien", + "Team ID" : "ID tim", + "Media" : "Media", + "Polls" : "Polling", + "Locations" : "Lokasi", + "Audio" : "Audio", + "Show all files" : "Tampilkan semua berkas", + "Group" : "Grup", + "Team" : "Tim", + "Error while sharing file" : "Kesalahan saat membagikan berkas", + "Later today – {timeLocale}" : "Nanti hari ini – {timeLocale}", + "Tomorrow – {timeLocale}" : "Besok – {timeLocale}", + "This weekend – {timeLocale}" : "Akhir pekan ini – {timeLocale}", + "Next week – {timeLocale}" : "Minggu depan – {timeLocale}", + "Error while parsing a PROPFIND error" : "Kesalahan saat mengurai kesalahan PROPFIND", + "Please reload the page." : "Silakan muat ulang halaman.", + "Do not disturb" : "Jangan diganggu", + "Away" : "Jauh", + "Android app" : "Aplikasi Android", + "iOS app" : "Aplikasi iOS", + "__language_name__" : "Bahasa Indonesia", + "Call summary (%s)" : "Ringkasan panggilan ( %s )", + "Tasks" : "Tugas", + "Notes" : "Catatan", + "Reports" : "Laporan", + "Call summary - {title}" : "Ringkasan panggilan - {judul}", + "Talk conversation for event" : "Percakapan Talk untuk acara", + "Set reminder for later today" : "Atur pengingat untuk nanti hari ini", + "Set reminder for tomorrow" : "Atur pengingat untuk besok", + "Set reminder for this weekend" : "Atur pengingat untuk akhir pekan ini", + "Set reminder for next week" : "Atur pengingat untuk minggu depan" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/is.js b/l10n/is.js new file mode 100644 index 0000000..b1ec166 --- /dev/null +++ b/l10n/is.js @@ -0,0 +1,620 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "samtal", + "(Duration %s)" : "(tímalengd %s)", + "You attended a call with {user1}" : "Þú varst í símtali við {user1}", + "_%n guest_::_%n guests_" : ["%n gestur","%n gestir"], + "You attended a call with {user1} and {user2}" : "Þú varst í símtali við {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Þú varst í símtali við {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Þú varst í símtali við {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Þú varst í símtali við {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["%n annar","%n aðrir"], + "{actor} invited you to {call}" : "{actor} bauð þér að taka þátt í {call}", + "Other activities" : "Aðrar athafnir", + "Talk" : "Spjalla", + "Guest" : "Gestur", + "Talk updates ✅" : "Uppfærslur á Talk-spjallforriti ✅", + "{actor} created the conversation" : "{actor} bjó til samtalið", + "You created the conversation" : "Þú bjóst til samtalið", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} endurnefndi samtalið \"%1$s\" sem \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Þú endurnefndir samtalið \"%1$s\" sem \"%2$s\"", + "You started a call" : "Þú hófst samtal", + "{actor} started a call" : "{actor} hóf samtal", + "{actor} joined the call" : "{actor} kom inn í samtalið", + "You joined the call" : "Þú komst inn í samtalið", + "{actor} left the call" : "{actor} hætti í samtalinu", + "You left the call" : "Þú hættir í samtalinu", + "{actor} unlocked the conversation" : "{actor} aflæsti samtalinu", + "You unlocked the conversation" : "Þú aflæstir samtalinu", + "{actor} locked the conversation" : "{actor} læsti samtalinu", + "You locked the conversation" : "Þú læstir samtalinu", + "{actor} allowed guests" : "{actor} leyfði gesti", + "You allowed guests" : "Þú leyfðir gesti", + "{actor} disallowed guests" : "{actor} bannaði gesti", + "You disallowed guests" : "Þú bannaðir gesti", + "{actor} set a password" : "{actor} setti lykilorð", + "You set a password" : "Þú stilltir lykilorð", + "{actor} removed the password" : "{actor} fjarlægði lykilorð", + "You removed the password" : "Þú} fjarlægðir lykilorð", + "{actor} added {user}" : "{actor} bætti {user} við", + "You joined the conversation" : "Þú komst inn í samtalið", + "{actor} joined the conversation" : "{actor} kom inn í samtalið", + "You added {user}" : "Þú bættir {user} við", + "{actor} added you" : "{actor} bætti þér við", + "You left the conversation" : "Þú hættir í samtalinu", + "{actor} left the conversation" : "{actor} hætti í samtalinu", + "{actor} removed {user}" : "{actor} fjarlægði {user}", + "You removed {user}" : "Þú fjarlægðir {user}", + "{actor} removed you" : "{actor} fjarlægði þig", + "{actor} promoted {user} to moderator" : "{actor} gerði {user} að umsjónarmanni", + "You promoted {user} to moderator" : "Þú gerðir {user} að umsjónarmanni", + "{actor} promoted you to moderator" : "{actor} gerði þig að umsjónarmanni", + "{actor} demoted {user} from moderator" : "{actor} lét {user} hætta sem umsjónarmann", + "You demoted {user} from moderator" : "Þú lést {user} hætta sem umsjónarmann", + "{actor} demoted you from moderator" : "{actor} lét þig hætta sem umsjónarmann", + "{actor} shared a file which is no longer available" : "{actor} deildi skrá sem ekki er lengur tiltæk", + "You shared a file which is no longer available" : "Þú deildir skrá sem ekki er lengur tiltæk", + "Message deleted by author" : "Skilaboðum eytt af höfundi", + "Administration" : "Stjórnun", + "System" : "Kerfið", + "%s (guest)" : "%s (gestur)", + "Talk conversations" : "Samtöl", + "Talk to %s" : "Tala við %s", + "Storage quota exceeded" : "Geymslukvóti er uppurinn", + "File not found" : "Skrá finnst ekki", + "File is not shared, or shared but not with the user" : "Skránni er ekki deilt, eða henni er deilt en ekki með notandanum", + "Poll" : "Poll", + "File is too big" : "Skrá er of stór", + "Invalid file provided" : "Ógild skrá gefin", + "Invalid image" : "Ógild mynd", + "Unknown filetype" : "Óþekkt skráategund", + "Say hi to your friends and colleagues!" : "Segðu hæ við vini þína og samstarfsmenn!", + "Conversation invitation" : "Boð í samtal", + "Description" : "Lýsing", + "Meeting" : "Fundur", + "Password request: %s" : "Beiðni um lykilorð: %s", + "Private conversation" : "Einkasamtal", + "Deleted user (%s)" : "Eyddi notanda (%s)", + "Dismiss notification" : "Afgreiða tilkynningu", + "Accept" : "Samþykkja", + "Decline" : "Hafna", + "New message" : "Ný skilaboð", + "Reminder" : "Áminning", + "Notification" : "Tilkynning", + "{user} sent you a private message" : "{user} sendi þér einkaskilaboð", + "{user} sent a message in conversation {call}" : "{user} sendi skilaboð í samtali {call}", + "A deleted user sent a message in conversation {call}" : "Eyddur notandi sendi skilaboð í samtali {call}", + "{guest} (guest) sent a message in conversation {call}" : " {guest} (gestur) sendi skilaboð í samtali {call}", + "A guest sent a message in conversation {call}" : "Gestur sendi skilaboð í samtali {call}", + "{guest} (guest) replied to your message in conversation {call}" : " {guest} (gestur) svaraði skilaboðunum þinum í samtalinu {call}", + "{user} mentioned you in a private conversation" : "{user} minntist á þig í einkasamtali", + "{user} mentioned you in conversation {call}" : "{user} minntist á þig í samtali {call}", + "A deleted user mentioned you in conversation {call}" : "Eyddur notandi minntist á þig í samtali {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gestur) minntist á þig í samtali {call}", + "A guest mentioned you in conversation {call}" : "Gestur minntist á þig í samtali {call}", + "View chat" : "Skoða spjall", + "{user} invited you to a group conversation: {call}" : "{user} bauð þér að taka þátt í hópsímtali: {call}", + "Join call" : "Taka þátt í símtali", + "Answer call" : "Svara símtali", + "Call back" : "Hringja til baka", + "A group call has started in {call}" : "Hópsímtal er byrjað í {call}", + "Open settings" : "Opna stillingar", + "error" : "villa", + "Default" : "Sjálfgefið", + "Presentation" : "Kynning", + "Conversations" : "Samtöl", + "Messages" : "Skilaboð", + "Avatar image is not square" : "Auðkennismynd er ekki ferningslaga", + "Other" : "Annað", + "Andorra" : "Andorra", + "United Arab Emirates" : "Sameinuðu arabísku furstadæmin", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antígva og Barbúda", + "Anguilla" : "Anguilla", + "Albania" : "Albanía", + "Armenia" : "Armenía", + "Angola" : "Angóla", + "Antarctica" : "Suðurskautslandið", + "Argentina" : "Argentína", + "American Samoa" : "Bandarísku Samóaeyjar", + "Austria" : "Austurríki", + "Australia" : "Ástralía", + "Aruba" : "Arúba", + "Åland Islands" : "Álandseyjar", + "Azerbaijan" : "Aserbaídsjan", + "Bosnia and Herzegovina" : "Bosnía og Herzegónía", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladess", + "Belgium" : "Belgía", + "Burkina Faso" : "Búrkína Fasó", + "Bulgaria" : "Búlgaría", + "Bahrain" : "Barein", + "Burundi" : "Búrúndí", + "Benin" : "Benín", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermúda", + "Brunei Darussalam" : "Brúnei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sankti Eustatius og Saba", + "Brazil" : "Brasilía", + "Bahamas" : "Bahamaeyjar", + "Bhutan" : "Bútan", + "Bouvet Island" : "Bouvet eyja", + "Botswana" : "Botsvana", + "Belarus" : "Hvíta-Rússland", + "Belize" : "Belís", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kókoseyjar", + "Central African Republic" : "Mið-Afríkulýðveldið", + "Congo" : "Kongó", + "Switzerland" : "Sviss", + "Côte d'Ivoire" : "Fílabeinsströndin", + "Cook Islands" : "Cook-eyjar", + "Chile" : "Síle", + "Cameroon" : "Kamerún", + "China" : "Kína", + "Colombia" : "Kólumbía", + "Costa Rica" : "Kosta Ríka", + "Cuba" : "Kúba", + "Cabo Verde" : "Grænhöfðaeyjar", + "Curaçao" : "Curaçao", + "Christmas Island" : "Jólaey", + "Cyprus" : "Kýpur", + "Czechia" : "Tékkland", + "Germany" : "Þýskaland", + "Djibouti" : "Djíbútí", + "Denmark" : "Danmörk", + "Dominica" : "Dóminíka", + "Dominican Republic" : "Dóminíkanska lýðveldið", + "Algeria" : "Alsír", + "Ecuador" : "Ekvador", + "Estonia" : "Eistland", + "Egypt" : "Egyptaland", + "Western Sahara" : "Vestur-Sahara", + "Eritrea" : "Erítrea", + "Spain" : "Spánn", + "Ethiopia" : "Eþíópía", + "Finland" : "Finnland", + "Fiji" : "Fídjieyjar", + "Falkland Islands (Malvinas)" : "Falklandseyjar", + "Faroe Islands" : "Færeyjar", + "France" : "Frakkland", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Samveldi Stóra-Bretlands og Norður-Írlands", + "Grenada" : "Grenada", + "Georgia" : "Georgía", + "French Guiana" : "Franska Gvæjana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gíbraltar", + "Greenland" : "Grænland", + "Gambia" : "Gambía", + "Guinea" : "Gínea", + "Guadeloupe" : "Gvadelúpeyjar", + "Equatorial Guinea" : "Miðbaugs-Gínea", + "Greece" : "Grikkland", + "South Georgia and the South Sandwich Islands" : "Suður-Georgía og Suður-Sandwich eyjar", + "Guatemala" : "Gvatemala", + "Guam" : "Gvam", + "Guinea-Bissau" : "Gínea-Bissá", + "Guyana" : "Gvæjana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard-eyja og McDonald-eyjur", + "Honduras" : "Hondúras", + "Croatia" : "Króatía", + "Haiti" : "Haítí", + "Hungary" : "Ungverjaland", + "Indonesia" : "Indónesía", + "Ireland" : "Írland", + "Israel" : "Ísrael", + "Isle of Man" : "Mön", + "India" : "Indland", + "British Indian Ocean Territory" : "Bresku Indlandshafseyjar", + "Iraq" : "Írak", + "Iceland" : "Ísland", + "Italy" : "Ítalía", + "Jersey" : "Jersey", + "Jamaica" : "Jamaíka", + "Jordan" : "Jórdanía", + "Japan" : "Japan", + "Kenya" : "Kenía", + "Kyrgyzstan" : "Kirgisistan", + "Cambodia" : "Kambódía", + "Kiribati" : "Kíribatí", + "Comoros" : "Kómoreyjar", + "Saint Kitts and Nevis" : "Sankti Kitts og Neviseyjur", + "Korea, Republic of" : "Kórea, lýðveldið", + "Kuwait" : "Kúveit", + "Cayman Islands" : "Cayman-eyjar", + "Kazakhstan" : "Kasakstan", + "Lao People's Democratic Republic" : "Alþýðulýðveldið Laó", + "Lebanon" : "Líbanon", + "Saint Lucia" : "Sankti Lúsía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Líbería", + "Lesotho" : "Lesótó", + "Lithuania" : "Litháen", + "Luxembourg" : "Lúxemborg", + "Latvia" : "Lettland", + "Libya" : "Líbía", + "Morocco" : "Marokkó", + "Monaco" : "Mónakó", + "Moldova, Republic of" : "Moldóvía, lýðveldið", + "Montenegro" : "Svartfjallaland", + "Saint Martin (French part)" : "Sankti Martin (franski hluti)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall eyjar", + "North Macedonia" : "Norður-Makedónía", + "Mali" : "Malí", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongólía", + "Macao" : "Makaó", + "Northern Mariana Islands" : "Norður Maríanaeyjar", + "Martinique" : "Martiník", + "Mauritania" : "Máritanía", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Máritus", + "Maldives" : "Maldíveyjar", + "Malawi" : "Malaví", + "Mexico" : "Mexíkó", + "Malaysia" : "Malasía", + "Mozambique" : "Mósambík", + "Namibia" : "Namibía", + "New Caledonia" : "Nýja-Kaledónía", + "Niger" : "Níger", + "Norfolk Island" : "Norfolkeyja", + "Nigeria" : "Nígería", + "Nicaragua" : "Nígarakúa", + "Netherlands" : "Holland", + "Norway" : "Noregur", + "Nepal" : "Nepal", + "Nauru" : "Nárú", + "Niue" : "Niue", + "New Zealand" : "Nýja-Sjáland", + "Oman" : "Óman", + "Panama" : "Panama", + "Peru" : "Perú", + "French Polynesia" : "Franska Pólýnesía", + "Papua New Guinea" : "Papúa Nýja-Gínea", + "Philippines" : "Filippseyjar", + "Pakistan" : "Pakistan", + "Poland" : "Pólland", + "Saint Pierre and Miquelon" : "Sankti Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Ríko", + "Palestine, State of" : "Palestínuríki", + "Portugal" : "Portúgal", + "Palau" : "Palá", + "Paraguay" : "Paragvæ", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rúmenía", + "Serbia" : "Serbía", + "Russian Federation" : "Rússneska sambandið", + "Rwanda" : "Rúanda", + "Saudi Arabia" : "Sádí-Arabía", + "Solomon Islands" : "Salómonseyjar", + "Seychelles" : "Seychelles-eyjar", + "Sudan" : "Súdan", + "Sweden" : "Svíþjóð", + "Singapore" : "Singapúr", + "Saint Helena, Ascension and Tristan da Cunha" : "Sankti Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slóvenía", + "Svalbard and Jan Mayen" : "Svalbarði og Jan Mayen", + "Slovakia" : "Slóvakía", + "Sierra Leone" : "Síerra Leóne", + "San Marino" : "San Marínó", + "Senegal" : "Senegal", + "Somalia" : "Sómalía", + "Suriname" : "Súrínam", + "South Sudan" : "Suður-Súdan", + "Sao Tome and Principe" : "Saó Tóme og Prinsípe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sankti Maarten (hollenski hluti)", + "Syrian Arab Republic" : "Sýrlenska arabalýðveldið", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks og Kaikós eyjar", + "Chad" : "Tsjad", + "French Southern Territories" : "Frönsku suðurhafshéruðin", + "Togo" : "Tógó", + "Thailand" : "Tæland", + "Tajikistan" : "Tadsjikistan", + "Tokelau" : "Tókelá", + "Timor-Leste" : "Tímor-Leste", + "Turkmenistan" : "Túrkmenistan", + "Tunisia" : "Túnis", + "Tonga" : "Tonga", + "Turkey" : "Tyrkland", + "Trinidad and Tobago" : "Trínidad og Tóbagó", + "Tuvalu" : "Túvalú", + "Taiwan, Province of China" : "Tævan, hérað í Kína", + "Tanzania, United Republic of" : "Tansanía, sameinaða lýðveldið", + "Ukraine" : "Úkraína", + "Uganda" : "Úganda", + "United States Minor Outlying Islands" : "Ytri-smáeyjar Bandaríkjanna", + "United States of America" : "Bandaríki Norður-Ameríku", + "Uruguay" : "Úrúgvæ", + "Uzbekistan" : "Úsbekistan", + "Holy See" : "Vatíkanska borgríkið (Holy See)", + "Saint Vincent and the Grenadines" : "Sankti Vincent og Grenadín", + "Viet Nam" : "Víetnam", + "Vanuatu" : "Vanuatú", + "Wallis and Futuna" : "Wallis- og Fútúnaeyjar", + "Samoa" : "Samóa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suður-Afríka", + "Zambia" : "Sambía", + "Zimbabwe" : "Simbabve", + "Federation" : "Deilt milli þjóna", + "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", + "Conversation not found" : "Samtal fannst ekki", + "Chat, video & audio-conferencing using WebRTC" : "Spjall, mynd- og hljóðfundir með WebRTC", + "Leave call" : "Hætta símtali", + "Share this file" : "Deila þessari skrá", + "The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.", + "Password" : "Lykilorð", + "Submit" : "Senda inn", + "Error requesting the password." : "Villa kom upp við að biðja um lykilorð.", + "Request password" : "Biðja um lykilorð", + "This conversation has ended" : "Þessu samtali er lokið", + "Everyone" : "Allir", + "Users and moderators" : "Notendur og umsjónarmenn", + "Moderators only" : "Aðeins umsjónarmenn", + "Save changes" : "Vista breytingar", + "Saving …" : "Vista …", + "Saved!" : "Vistað!", + "Limit to groups" : "Takmarka við hópa", + "Guests can still join public conversations." : "Gestir geta komið inn í opinber samtöl.", + "Enabled" : "Virkt", + "Disabled" : "Óvirkt", + "State" : "Staða", + "Name" : "Nafn", + "Beta" : "BETA-prófunarútgáfa", + "Permissions" : "Heimildir", + "All messages" : "Öll skilaboð", + "@-mentions only" : "@-mentions only", + "Off" : "Slökkt", + "General settings" : "Almennar stillingar", + "Enable encryption" : "Virkja dulritun", + "Pending" : "Í bið", + "Error" : "Villa", + "Blocked" : "Útilokaður", + "Active" : "Virkt", + "Expired" : "Útrunnið", + "Never" : "Aldrei", + "Language" : "Tungumál", + "Country" : "Country", + "Status" : "Staða", + "Created at" : "Búið til", + "Yes" : "Já", + "No" : "Nei", + "Validate SSL certificate" : "Sannreyna SSL-skilríki", + "Delete this server" : "Eyða þessum þjóni", + "Test this server" : "Prófa þennan þjón", + "Shared secret" : "Sameiginlegur leynilykill", + "STUN server URL" : "URL-slóð STUN-þjóns", + "STUN servers" : "STUN-þjónar", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-miðlari er notaður til að ákvarða opinbert vistfang þátttakenda á bak við beini.", + "TURN server URL" : "URL-slóð TURN-þjóns", + "TURN server secret" : "Leynilykill á TURN-miðlara", + "TURN server protocols" : "Samskiptareglur TURN-þjóns", + "TURN servers" : "TURN-miðlarar", + "OK" : "Í lagi", + "Checking …" : "Athuga …", + "Federated user" : "Notandi í skýjasambandi", + "Confirm" : "Staðfesta", + "Reset" : "Endurstilla", + "Cancel" : "Hætta við", + "Back" : "Til baka", + "Now" : "Núna", + "Loading …" : "Hleð inn …", + "From" : "Frá", + "To" : "Til", + "Calendar" : "Dagatal", + "Attendees" : "Þátttakendur", + "Save" : "Vista", + "No results" : "Engar niðurstöður", + "Done" : "Lokið", + "Grid view" : "Reitasýn", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "Endurlesa", + "Connecting …" : "Tengist ...", + "Waiting for others to join the call …" : "Bíð eftir að fleiri komi inn í símtalið …", + "You can invite others in the participant tab of the sidebar" : "Þú getur boðið öðrum að taka þátt af þátttakendaflipa hliðarspjaldsins", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Þú getur boðið öðrum að taka þátt af þátttakendaflipa hliðarspjaldsins eða deilt þessum tengli til að bjóða öðrum!", + "Share this link to invite others!" : "Deildu þessum tengli til að bjóða öðrum!", + "Copy link" : "Afrita tengil", + "Mute audio" : "Þagga hljóð", + "None" : "Enginn", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Disable video" : "Gera myndskeið óvirk", + "Enable video" : "Virkja myndskeið", + "You" : "Þú", + "Show screen" : "Birta skjá", + "Collapse" : "Fella saman", + "Expand" : "Fletta út", + "Drop your files to upload" : "Slepptu skrám til að senda þær inn", + "Favorite" : "Eftirlæti", + "Date:" : "Dagsetning:", + "Note:" : "Athugaðu:", + "Hide details" : "Fela nánari upplýsingar", + "Show details" : "Birta nánari upplýsingar", + "Disable" : "Gera óvirkt", + "Choose" : "Velja", + "The file must be a PNG or JPG" : "Skráin verður að vera PNG eða JPG", + "Restricted" : "Takmarkað", + "Personal" : "Persónulegt", + "Danger zone" : "Hættusvæði", + "Leave conversation" : "Hætta í samtali", + "Delete conversation" : "Eyða samtali", + "_%n hour_::_%n hours_" : ["%n klukkustund","%n klukkustundir"], + "Password protection" : "Verndun með lykilorði", + "Set a password" : "Setja lykilorð", + "Invalid language" : "Ógilt tungumál", + "Start time (optional)" : "Upphafstími (valfrjálst)", + "Edit" : "Breyta", + "More information" : "Nánari upplýsingar", + "Delete" : "Eyða", + "Log content" : "Efni atvikaskrár", + "Notifications" : "Tilkynningar", + "Join" : "Taka þátt", + "Create a new conversation" : "Hefja nýtt samtal", + "Create conversation" : "Búa til samtal", + "Enter your name" : "Settu inn nafnið þitt", + "Log in" : "Skrá inn", + "Mark as read" : "Merkja sem lesið", + "Mark as unread" : "Merkja allt sem ólesið", + "Remove from favorites" : "Fjarlægja úr eftirlætum", + "Add to favorites" : "Bæta í eftirlæti", + "You need to promote a new moderator before you can leave the conversation." : "Þú þarft að uppfæra einhvern í stöðu umsjónarmanna áður en þú getur hætt í samtalinu.", + "Home" : "Heim", + "Unread" : "Ólesið", + "Alphabetically" : "Í stafrófsröð", + "No matches found" : "Engar samsvaranir fundust", + "Unread messages" : "Ólesin skilaboð", + "Clear filter" : "Hreinsa síu", + "App settings" : "Stillingar forrits", + "Users" : "Notendur", + "Groups" : "Hópar", + "Teams" : "Teymi", + "No search results" : "Engar leitarniðurstöður", + "New group conversation" : "Nýtt hópsamtal…", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select a device" : "Veldu tæki", + "Test" : "Prófun", + "Devices" : "Tæki", + "No audio" : "Ekkert hljóð", + "Invalid path selected" : "Ógild slóð valin", + "Blur" : "Móða", + "Upload" : "Senda inn", + "Files" : "Skrár", + "24 hours" : "24 klukkustundir", + "7 days" : "7 dagar", + "Reply" : "Svara", + "More actions" : "Fleiri aðgerðir", + "Set reminder" : "Setja áminningu", + "Edit message" : "Breyta skilaboðum", + "Copy message link" : "Afrita skilaboðatengil", + "Go to file" : "Fara í skrá", + "Translate" : "Þýða", + "Dismiss" : "Hafna", + "Detect language" : "Greina tungumál", + "The message could not be translated" : "Ekki var hægt að þýða skilaboðin", + "Translation copied to clipboard" : "Þýðing afrituð á klippispjald", + "Translation could not be copied" : "Ekki tókst að afrita þýðinguna", + "Translate message" : "Þýða skilaboð", + "Source language to translate from" : "Upprunatungumál til að þýða af", + "Translate from" : "Þýða úr", + "Target language to translate into" : "Marktungumál til að þýða yfir á", + "Translate to" : "Þýða yfir á", + "Translating" : "Þýðing", + "Copy translated text" : "Afrita þýddan texta", + "Send now" : "Senda núna", + "Message sent" : "Skilaboðin hafa verið send", + "Contact" : "Tengiliður", + "{stack} in {board}" : "{stack} á {board}", + "You voted" : "Þú kaust", + "No messages" : "Engin skilaboð", + "Unpin" : "Losa", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Bæta við þátttakanda", + "Enter password" : "Enter password", + "Send message" : "Senda skilaboð", + "File to share" : "Skrá til að deila", + "Add emoji" : "Bæta við tjáningartákni", + "Send later" : "Senda síðar", + "Cancel editing" : "Hætta við breytingar", + "Share from Files" : "Deila úr skrám", + "Upload from device" : "Senda inn frá tæki", + "Create new poll" : "Búa til nýja könnun", + "Smart picker" : "Snjall-veljari", + "New file" : "Ný skrá", + "Blank" : "Tóm", + "Send" : "Senda", + "Create poll" : "Búa til könnun", + "Settings" : "Stillingar", + "Anonymous poll" : "Nafnlaus könnun", + "End poll" : "End poll", + "Results" : "Niðurstöður", + "moderator" : "umsjónarmaður", + "guest" : "gestanotandi", + "Remove participant" : "Fjarlægja þátttakanda", + "Demote from moderator" : "Láta hætta sem umsjónarmann", + "Promote to moderator" : "Gera að umsjónarmanni", + "Remove" : "Fjarlægja", + "Add users or groups" : "Bæta við notendum eða hópum", + "Integrations" : "Samþættingar", + "Searching …" : "Leita …", + "Participants" : "Þátttakendur", + "Open chat" : "Opna spjall", + "Chat" : "Spjall", + "Details" : "Details", + "Load more results" : "Hlaða inn fleiri niðurstöðum", + "Projects" : "Verkefni", + "No shared items" : "No shared items", + "Link to a conversation" : "Tengill á samtal", + "Select conversation" : "Veldu samtal", + "Edit display name" : "Breyta birtingarnafni", + "Notification settings" : "Stillingar á tilkynningum", + "Default language" : "Sjálfgefið tungumál", + "Privacy" : "Gagnaleynd", + "Search" : "Search", + "Start call" : "Hefja samtal", + "End call" : "Ljúka símtali", + "The call has been running for one hour." : "Símtalið hefur staðið yfir í eina klukkustund.", + "Screensharing options" : "Valkostir skjádeilingar", + "Enable screensharing" : "Virkja skjádeilingu", + "Screensharing requires the page to be loaded through HTTPS." : "Deiling á skjá krefst þess að síðunni sé hlaðið inn með HTTPS.", + "An error occurred while starting screensharing." : "Villa kom upp við að hefja skjádeilingu.", + "Show your screen" : "Birta skjáinn þinn", + "Stop screensharing" : "Hætta skjádeilingu", + "Keep" : "Halda", + "Select a region" : "Veldu svæði", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "Taktu þátt í samtali eða byrjaðu nýtt samtal", + "Talk conversation" : "Samtal í Talk-spjalli", + "User" : "Notandi", + "API token" : "API-teikn", + "Login" : "Innskráning", + "Nickname" : "Stuttnefni", + "Client ID" : "Biðlaraauðkenni", + "Team ID" : "Auðkenni teymis", + "Media" : "Margmiðlunargögn", + "Polls" : "Kannanir", + "Locations" : "Staðsetningar", + "Audio" : "Hljóð", + "Show all files" : "Sýna allar skrár", + "Group" : "Hópur", + "Team" : "Teymi", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Villa við deilingu skráar", + "Later today – {timeLocale}" : "Síðar í dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "Á morgun – {timeLocale}", + "This weekend – {timeLocale}" : "Þessa helgi – {timeLocale}", + "Next week – {timeLocale}" : "Í næstu viku – {timeLocale}", + "Error while parsing a PROPFIND error" : "Villa við þáttun á PROPFIND-villu", + "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", + "Do not disturb" : "Ónáðið ekki", + "Away" : "Fjarverandi", + "Access to microphone & camera is only possible with HTTPS" : "Aðgangur að hljóðnema og myndavél er einungis mögulegur í gegnum HTTPS", + "Please move your setup to HTTPS" : "Endilega færðu uppsetninguna þína yfir í HTTPS", + "Access to microphone & camera was denied" : "Aðgangur að hljóðnema og myndavél var ekki heimilaður", + "WebRTC is not supported in your browser" : "WebRTC er ekki stutt í vafranum þínum", + "Please use a different browser like Firefox or Chrome" : "Veldu einhvern annan vafra eins og Firefox eða Chrome", + "Error while accessing microphone & camera" : "Villa kom upp þegar reynt var að opna hljóðnema og myndavél", + "%s Talk on your mobile devices" : "%s Talaðu á snjalltækjunum þínum", + "Android app" : "Android-forrit", + "iOS app" : "iOS-forrit", + "__language_name__" : "Íslenska", + "Tasks" : "Verkefni", + "Notes" : "Minnispunktar", + "Talk conversation for event" : "Samtal fyrir atburð", + "Set reminder for later today" : "Setja áminningu seinna í dag", + "Set reminder for tomorrow" : "Setja áminningu fyrir morgundaginn", + "Set reminder for this weekend" : "Setja áminningu fyrir þessa helgi", + "Set reminder for next week" : "Setja áminningu fyrir í næstu viku" +}, +"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);"); diff --git a/l10n/is.json b/l10n/is.json new file mode 100644 index 0000000..5d41546 --- /dev/null +++ b/l10n/is.json @@ -0,0 +1,618 @@ +{ "translations": { + "a conversation" : "samtal", + "(Duration %s)" : "(tímalengd %s)", + "You attended a call with {user1}" : "Þú varst í símtali við {user1}", + "_%n guest_::_%n guests_" : ["%n gestur","%n gestir"], + "You attended a call with {user1} and {user2}" : "Þú varst í símtali við {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Þú varst í símtali við {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Þú varst í símtali við {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Þú varst í símtali við {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["%n annar","%n aðrir"], + "{actor} invited you to {call}" : "{actor} bauð þér að taka þátt í {call}", + "Other activities" : "Aðrar athafnir", + "Talk" : "Spjalla", + "Guest" : "Gestur", + "Talk updates ✅" : "Uppfærslur á Talk-spjallforriti ✅", + "{actor} created the conversation" : "{actor} bjó til samtalið", + "You created the conversation" : "Þú bjóst til samtalið", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} endurnefndi samtalið \"%1$s\" sem \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Þú endurnefndir samtalið \"%1$s\" sem \"%2$s\"", + "You started a call" : "Þú hófst samtal", + "{actor} started a call" : "{actor} hóf samtal", + "{actor} joined the call" : "{actor} kom inn í samtalið", + "You joined the call" : "Þú komst inn í samtalið", + "{actor} left the call" : "{actor} hætti í samtalinu", + "You left the call" : "Þú hættir í samtalinu", + "{actor} unlocked the conversation" : "{actor} aflæsti samtalinu", + "You unlocked the conversation" : "Þú aflæstir samtalinu", + "{actor} locked the conversation" : "{actor} læsti samtalinu", + "You locked the conversation" : "Þú læstir samtalinu", + "{actor} allowed guests" : "{actor} leyfði gesti", + "You allowed guests" : "Þú leyfðir gesti", + "{actor} disallowed guests" : "{actor} bannaði gesti", + "You disallowed guests" : "Þú bannaðir gesti", + "{actor} set a password" : "{actor} setti lykilorð", + "You set a password" : "Þú stilltir lykilorð", + "{actor} removed the password" : "{actor} fjarlægði lykilorð", + "You removed the password" : "Þú} fjarlægðir lykilorð", + "{actor} added {user}" : "{actor} bætti {user} við", + "You joined the conversation" : "Þú komst inn í samtalið", + "{actor} joined the conversation" : "{actor} kom inn í samtalið", + "You added {user}" : "Þú bættir {user} við", + "{actor} added you" : "{actor} bætti þér við", + "You left the conversation" : "Þú hættir í samtalinu", + "{actor} left the conversation" : "{actor} hætti í samtalinu", + "{actor} removed {user}" : "{actor} fjarlægði {user}", + "You removed {user}" : "Þú fjarlægðir {user}", + "{actor} removed you" : "{actor} fjarlægði þig", + "{actor} promoted {user} to moderator" : "{actor} gerði {user} að umsjónarmanni", + "You promoted {user} to moderator" : "Þú gerðir {user} að umsjónarmanni", + "{actor} promoted you to moderator" : "{actor} gerði þig að umsjónarmanni", + "{actor} demoted {user} from moderator" : "{actor} lét {user} hætta sem umsjónarmann", + "You demoted {user} from moderator" : "Þú lést {user} hætta sem umsjónarmann", + "{actor} demoted you from moderator" : "{actor} lét þig hætta sem umsjónarmann", + "{actor} shared a file which is no longer available" : "{actor} deildi skrá sem ekki er lengur tiltæk", + "You shared a file which is no longer available" : "Þú deildir skrá sem ekki er lengur tiltæk", + "Message deleted by author" : "Skilaboðum eytt af höfundi", + "Administration" : "Stjórnun", + "System" : "Kerfið", + "%s (guest)" : "%s (gestur)", + "Talk conversations" : "Samtöl", + "Talk to %s" : "Tala við %s", + "Storage quota exceeded" : "Geymslukvóti er uppurinn", + "File not found" : "Skrá finnst ekki", + "File is not shared, or shared but not with the user" : "Skránni er ekki deilt, eða henni er deilt en ekki með notandanum", + "Poll" : "Poll", + "File is too big" : "Skrá er of stór", + "Invalid file provided" : "Ógild skrá gefin", + "Invalid image" : "Ógild mynd", + "Unknown filetype" : "Óþekkt skráategund", + "Say hi to your friends and colleagues!" : "Segðu hæ við vini þína og samstarfsmenn!", + "Conversation invitation" : "Boð í samtal", + "Description" : "Lýsing", + "Meeting" : "Fundur", + "Password request: %s" : "Beiðni um lykilorð: %s", + "Private conversation" : "Einkasamtal", + "Deleted user (%s)" : "Eyddi notanda (%s)", + "Dismiss notification" : "Afgreiða tilkynningu", + "Accept" : "Samþykkja", + "Decline" : "Hafna", + "New message" : "Ný skilaboð", + "Reminder" : "Áminning", + "Notification" : "Tilkynning", + "{user} sent you a private message" : "{user} sendi þér einkaskilaboð", + "{user} sent a message in conversation {call}" : "{user} sendi skilaboð í samtali {call}", + "A deleted user sent a message in conversation {call}" : "Eyddur notandi sendi skilaboð í samtali {call}", + "{guest} (guest) sent a message in conversation {call}" : " {guest} (gestur) sendi skilaboð í samtali {call}", + "A guest sent a message in conversation {call}" : "Gestur sendi skilaboð í samtali {call}", + "{guest} (guest) replied to your message in conversation {call}" : " {guest} (gestur) svaraði skilaboðunum þinum í samtalinu {call}", + "{user} mentioned you in a private conversation" : "{user} minntist á þig í einkasamtali", + "{user} mentioned you in conversation {call}" : "{user} minntist á þig í samtali {call}", + "A deleted user mentioned you in conversation {call}" : "Eyddur notandi minntist á þig í samtali {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gestur) minntist á þig í samtali {call}", + "A guest mentioned you in conversation {call}" : "Gestur minntist á þig í samtali {call}", + "View chat" : "Skoða spjall", + "{user} invited you to a group conversation: {call}" : "{user} bauð þér að taka þátt í hópsímtali: {call}", + "Join call" : "Taka þátt í símtali", + "Answer call" : "Svara símtali", + "Call back" : "Hringja til baka", + "A group call has started in {call}" : "Hópsímtal er byrjað í {call}", + "Open settings" : "Opna stillingar", + "error" : "villa", + "Default" : "Sjálfgefið", + "Presentation" : "Kynning", + "Conversations" : "Samtöl", + "Messages" : "Skilaboð", + "Avatar image is not square" : "Auðkennismynd er ekki ferningslaga", + "Other" : "Annað", + "Andorra" : "Andorra", + "United Arab Emirates" : "Sameinuðu arabísku furstadæmin", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antígva og Barbúda", + "Anguilla" : "Anguilla", + "Albania" : "Albanía", + "Armenia" : "Armenía", + "Angola" : "Angóla", + "Antarctica" : "Suðurskautslandið", + "Argentina" : "Argentína", + "American Samoa" : "Bandarísku Samóaeyjar", + "Austria" : "Austurríki", + "Australia" : "Ástralía", + "Aruba" : "Arúba", + "Åland Islands" : "Álandseyjar", + "Azerbaijan" : "Aserbaídsjan", + "Bosnia and Herzegovina" : "Bosnía og Herzegónía", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladess", + "Belgium" : "Belgía", + "Burkina Faso" : "Búrkína Fasó", + "Bulgaria" : "Búlgaría", + "Bahrain" : "Barein", + "Burundi" : "Búrúndí", + "Benin" : "Benín", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermúda", + "Brunei Darussalam" : "Brúnei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sankti Eustatius og Saba", + "Brazil" : "Brasilía", + "Bahamas" : "Bahamaeyjar", + "Bhutan" : "Bútan", + "Bouvet Island" : "Bouvet eyja", + "Botswana" : "Botsvana", + "Belarus" : "Hvíta-Rússland", + "Belize" : "Belís", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kókoseyjar", + "Central African Republic" : "Mið-Afríkulýðveldið", + "Congo" : "Kongó", + "Switzerland" : "Sviss", + "Côte d'Ivoire" : "Fílabeinsströndin", + "Cook Islands" : "Cook-eyjar", + "Chile" : "Síle", + "Cameroon" : "Kamerún", + "China" : "Kína", + "Colombia" : "Kólumbía", + "Costa Rica" : "Kosta Ríka", + "Cuba" : "Kúba", + "Cabo Verde" : "Grænhöfðaeyjar", + "Curaçao" : "Curaçao", + "Christmas Island" : "Jólaey", + "Cyprus" : "Kýpur", + "Czechia" : "Tékkland", + "Germany" : "Þýskaland", + "Djibouti" : "Djíbútí", + "Denmark" : "Danmörk", + "Dominica" : "Dóminíka", + "Dominican Republic" : "Dóminíkanska lýðveldið", + "Algeria" : "Alsír", + "Ecuador" : "Ekvador", + "Estonia" : "Eistland", + "Egypt" : "Egyptaland", + "Western Sahara" : "Vestur-Sahara", + "Eritrea" : "Erítrea", + "Spain" : "Spánn", + "Ethiopia" : "Eþíópía", + "Finland" : "Finnland", + "Fiji" : "Fídjieyjar", + "Falkland Islands (Malvinas)" : "Falklandseyjar", + "Faroe Islands" : "Færeyjar", + "France" : "Frakkland", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Samveldi Stóra-Bretlands og Norður-Írlands", + "Grenada" : "Grenada", + "Georgia" : "Georgía", + "French Guiana" : "Franska Gvæjana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gíbraltar", + "Greenland" : "Grænland", + "Gambia" : "Gambía", + "Guinea" : "Gínea", + "Guadeloupe" : "Gvadelúpeyjar", + "Equatorial Guinea" : "Miðbaugs-Gínea", + "Greece" : "Grikkland", + "South Georgia and the South Sandwich Islands" : "Suður-Georgía og Suður-Sandwich eyjar", + "Guatemala" : "Gvatemala", + "Guam" : "Gvam", + "Guinea-Bissau" : "Gínea-Bissá", + "Guyana" : "Gvæjana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard-eyja og McDonald-eyjur", + "Honduras" : "Hondúras", + "Croatia" : "Króatía", + "Haiti" : "Haítí", + "Hungary" : "Ungverjaland", + "Indonesia" : "Indónesía", + "Ireland" : "Írland", + "Israel" : "Ísrael", + "Isle of Man" : "Mön", + "India" : "Indland", + "British Indian Ocean Territory" : "Bresku Indlandshafseyjar", + "Iraq" : "Írak", + "Iceland" : "Ísland", + "Italy" : "Ítalía", + "Jersey" : "Jersey", + "Jamaica" : "Jamaíka", + "Jordan" : "Jórdanía", + "Japan" : "Japan", + "Kenya" : "Kenía", + "Kyrgyzstan" : "Kirgisistan", + "Cambodia" : "Kambódía", + "Kiribati" : "Kíribatí", + "Comoros" : "Kómoreyjar", + "Saint Kitts and Nevis" : "Sankti Kitts og Neviseyjur", + "Korea, Republic of" : "Kórea, lýðveldið", + "Kuwait" : "Kúveit", + "Cayman Islands" : "Cayman-eyjar", + "Kazakhstan" : "Kasakstan", + "Lao People's Democratic Republic" : "Alþýðulýðveldið Laó", + "Lebanon" : "Líbanon", + "Saint Lucia" : "Sankti Lúsía", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Líbería", + "Lesotho" : "Lesótó", + "Lithuania" : "Litháen", + "Luxembourg" : "Lúxemborg", + "Latvia" : "Lettland", + "Libya" : "Líbía", + "Morocco" : "Marokkó", + "Monaco" : "Mónakó", + "Moldova, Republic of" : "Moldóvía, lýðveldið", + "Montenegro" : "Svartfjallaland", + "Saint Martin (French part)" : "Sankti Martin (franski hluti)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall eyjar", + "North Macedonia" : "Norður-Makedónía", + "Mali" : "Malí", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongólía", + "Macao" : "Makaó", + "Northern Mariana Islands" : "Norður Maríanaeyjar", + "Martinique" : "Martiník", + "Mauritania" : "Máritanía", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Máritus", + "Maldives" : "Maldíveyjar", + "Malawi" : "Malaví", + "Mexico" : "Mexíkó", + "Malaysia" : "Malasía", + "Mozambique" : "Mósambík", + "Namibia" : "Namibía", + "New Caledonia" : "Nýja-Kaledónía", + "Niger" : "Níger", + "Norfolk Island" : "Norfolkeyja", + "Nigeria" : "Nígería", + "Nicaragua" : "Nígarakúa", + "Netherlands" : "Holland", + "Norway" : "Noregur", + "Nepal" : "Nepal", + "Nauru" : "Nárú", + "Niue" : "Niue", + "New Zealand" : "Nýja-Sjáland", + "Oman" : "Óman", + "Panama" : "Panama", + "Peru" : "Perú", + "French Polynesia" : "Franska Pólýnesía", + "Papua New Guinea" : "Papúa Nýja-Gínea", + "Philippines" : "Filippseyjar", + "Pakistan" : "Pakistan", + "Poland" : "Pólland", + "Saint Pierre and Miquelon" : "Sankti Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Ríko", + "Palestine, State of" : "Palestínuríki", + "Portugal" : "Portúgal", + "Palau" : "Palá", + "Paraguay" : "Paragvæ", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rúmenía", + "Serbia" : "Serbía", + "Russian Federation" : "Rússneska sambandið", + "Rwanda" : "Rúanda", + "Saudi Arabia" : "Sádí-Arabía", + "Solomon Islands" : "Salómonseyjar", + "Seychelles" : "Seychelles-eyjar", + "Sudan" : "Súdan", + "Sweden" : "Svíþjóð", + "Singapore" : "Singapúr", + "Saint Helena, Ascension and Tristan da Cunha" : "Sankti Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slóvenía", + "Svalbard and Jan Mayen" : "Svalbarði og Jan Mayen", + "Slovakia" : "Slóvakía", + "Sierra Leone" : "Síerra Leóne", + "San Marino" : "San Marínó", + "Senegal" : "Senegal", + "Somalia" : "Sómalía", + "Suriname" : "Súrínam", + "South Sudan" : "Suður-Súdan", + "Sao Tome and Principe" : "Saó Tóme og Prinsípe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sankti Maarten (hollenski hluti)", + "Syrian Arab Republic" : "Sýrlenska arabalýðveldið", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks og Kaikós eyjar", + "Chad" : "Tsjad", + "French Southern Territories" : "Frönsku suðurhafshéruðin", + "Togo" : "Tógó", + "Thailand" : "Tæland", + "Tajikistan" : "Tadsjikistan", + "Tokelau" : "Tókelá", + "Timor-Leste" : "Tímor-Leste", + "Turkmenistan" : "Túrkmenistan", + "Tunisia" : "Túnis", + "Tonga" : "Tonga", + "Turkey" : "Tyrkland", + "Trinidad and Tobago" : "Trínidad og Tóbagó", + "Tuvalu" : "Túvalú", + "Taiwan, Province of China" : "Tævan, hérað í Kína", + "Tanzania, United Republic of" : "Tansanía, sameinaða lýðveldið", + "Ukraine" : "Úkraína", + "Uganda" : "Úganda", + "United States Minor Outlying Islands" : "Ytri-smáeyjar Bandaríkjanna", + "United States of America" : "Bandaríki Norður-Ameríku", + "Uruguay" : "Úrúgvæ", + "Uzbekistan" : "Úsbekistan", + "Holy See" : "Vatíkanska borgríkið (Holy See)", + "Saint Vincent and the Grenadines" : "Sankti Vincent og Grenadín", + "Viet Nam" : "Víetnam", + "Vanuatu" : "Vanuatú", + "Wallis and Futuna" : "Wallis- og Fútúnaeyjar", + "Samoa" : "Samóa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Suður-Afríka", + "Zambia" : "Sambía", + "Zimbabwe" : "Simbabve", + "Federation" : "Deilt milli þjóna", + "Invalid date, date format must be YYYY-MM-DD" : "Ógild dagsetning, dagsetningasniðið verður að vera ÁÁÁÁ-MM-DD", + "Conversation not found" : "Samtal fannst ekki", + "Chat, video & audio-conferencing using WebRTC" : "Spjall, mynd- og hljóðfundir með WebRTC", + "Leave call" : "Hætta símtali", + "Share this file" : "Deila þessari skrá", + "The password is wrong. Try again." : "Lykilorðið er rangt. Reyndu aftur.", + "Password" : "Lykilorð", + "Submit" : "Senda inn", + "Error requesting the password." : "Villa kom upp við að biðja um lykilorð.", + "Request password" : "Biðja um lykilorð", + "This conversation has ended" : "Þessu samtali er lokið", + "Everyone" : "Allir", + "Users and moderators" : "Notendur og umsjónarmenn", + "Moderators only" : "Aðeins umsjónarmenn", + "Save changes" : "Vista breytingar", + "Saving …" : "Vista …", + "Saved!" : "Vistað!", + "Limit to groups" : "Takmarka við hópa", + "Guests can still join public conversations." : "Gestir geta komið inn í opinber samtöl.", + "Enabled" : "Virkt", + "Disabled" : "Óvirkt", + "State" : "Staða", + "Name" : "Nafn", + "Beta" : "BETA-prófunarútgáfa", + "Permissions" : "Heimildir", + "All messages" : "Öll skilaboð", + "@-mentions only" : "@-mentions only", + "Off" : "Slökkt", + "General settings" : "Almennar stillingar", + "Enable encryption" : "Virkja dulritun", + "Pending" : "Í bið", + "Error" : "Villa", + "Blocked" : "Útilokaður", + "Active" : "Virkt", + "Expired" : "Útrunnið", + "Never" : "Aldrei", + "Language" : "Tungumál", + "Country" : "Country", + "Status" : "Staða", + "Created at" : "Búið til", + "Yes" : "Já", + "No" : "Nei", + "Validate SSL certificate" : "Sannreyna SSL-skilríki", + "Delete this server" : "Eyða þessum þjóni", + "Test this server" : "Prófa þennan þjón", + "Shared secret" : "Sameiginlegur leynilykill", + "STUN server URL" : "URL-slóð STUN-þjóns", + "STUN servers" : "STUN-þjónar", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-miðlari er notaður til að ákvarða opinbert vistfang þátttakenda á bak við beini.", + "TURN server URL" : "URL-slóð TURN-þjóns", + "TURN server secret" : "Leynilykill á TURN-miðlara", + "TURN server protocols" : "Samskiptareglur TURN-þjóns", + "TURN servers" : "TURN-miðlarar", + "OK" : "Í lagi", + "Checking …" : "Athuga …", + "Federated user" : "Notandi í skýjasambandi", + "Confirm" : "Staðfesta", + "Reset" : "Endurstilla", + "Cancel" : "Hætta við", + "Back" : "Til baka", + "Now" : "Núna", + "Loading …" : "Hleð inn …", + "From" : "Frá", + "To" : "Til", + "Calendar" : "Dagatal", + "Attendees" : "Þátttakendur", + "Save" : "Vista", + "No results" : "Engar niðurstöður", + "Done" : "Lokið", + "Grid view" : "Reitasýn", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "Endurlesa", + "Connecting …" : "Tengist ...", + "Waiting for others to join the call …" : "Bíð eftir að fleiri komi inn í símtalið …", + "You can invite others in the participant tab of the sidebar" : "Þú getur boðið öðrum að taka þátt af þátttakendaflipa hliðarspjaldsins", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Þú getur boðið öðrum að taka þátt af þátttakendaflipa hliðarspjaldsins eða deilt þessum tengli til að bjóða öðrum!", + "Share this link to invite others!" : "Deildu þessum tengli til að bjóða öðrum!", + "Copy link" : "Afrita tengil", + "Mute audio" : "Þagga hljóð", + "None" : "Enginn", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Disable video" : "Gera myndskeið óvirk", + "Enable video" : "Virkja myndskeið", + "You" : "Þú", + "Show screen" : "Birta skjá", + "Collapse" : "Fella saman", + "Expand" : "Fletta út", + "Drop your files to upload" : "Slepptu skrám til að senda þær inn", + "Favorite" : "Eftirlæti", + "Date:" : "Dagsetning:", + "Note:" : "Athugaðu:", + "Hide details" : "Fela nánari upplýsingar", + "Show details" : "Birta nánari upplýsingar", + "Disable" : "Gera óvirkt", + "Choose" : "Velja", + "The file must be a PNG or JPG" : "Skráin verður að vera PNG eða JPG", + "Restricted" : "Takmarkað", + "Personal" : "Persónulegt", + "Danger zone" : "Hættusvæði", + "Leave conversation" : "Hætta í samtali", + "Delete conversation" : "Eyða samtali", + "_%n hour_::_%n hours_" : ["%n klukkustund","%n klukkustundir"], + "Password protection" : "Verndun með lykilorði", + "Set a password" : "Setja lykilorð", + "Invalid language" : "Ógilt tungumál", + "Start time (optional)" : "Upphafstími (valfrjálst)", + "Edit" : "Breyta", + "More information" : "Nánari upplýsingar", + "Delete" : "Eyða", + "Log content" : "Efni atvikaskrár", + "Notifications" : "Tilkynningar", + "Join" : "Taka þátt", + "Create a new conversation" : "Hefja nýtt samtal", + "Create conversation" : "Búa til samtal", + "Enter your name" : "Settu inn nafnið þitt", + "Log in" : "Skrá inn", + "Mark as read" : "Merkja sem lesið", + "Mark as unread" : "Merkja allt sem ólesið", + "Remove from favorites" : "Fjarlægja úr eftirlætum", + "Add to favorites" : "Bæta í eftirlæti", + "You need to promote a new moderator before you can leave the conversation." : "Þú þarft að uppfæra einhvern í stöðu umsjónarmanna áður en þú getur hætt í samtalinu.", + "Home" : "Heim", + "Unread" : "Ólesið", + "Alphabetically" : "Í stafrófsröð", + "No matches found" : "Engar samsvaranir fundust", + "Unread messages" : "Ólesin skilaboð", + "Clear filter" : "Hreinsa síu", + "App settings" : "Stillingar forrits", + "Users" : "Notendur", + "Groups" : "Hópar", + "Teams" : "Teymi", + "No search results" : "Engar leitarniðurstöður", + "New group conversation" : "Nýtt hópsamtal…", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select a device" : "Veldu tæki", + "Test" : "Prófun", + "Devices" : "Tæki", + "No audio" : "Ekkert hljóð", + "Invalid path selected" : "Ógild slóð valin", + "Blur" : "Móða", + "Upload" : "Senda inn", + "Files" : "Skrár", + "24 hours" : "24 klukkustundir", + "7 days" : "7 dagar", + "Reply" : "Svara", + "More actions" : "Fleiri aðgerðir", + "Set reminder" : "Setja áminningu", + "Edit message" : "Breyta skilaboðum", + "Copy message link" : "Afrita skilaboðatengil", + "Go to file" : "Fara í skrá", + "Translate" : "Þýða", + "Dismiss" : "Hafna", + "Detect language" : "Greina tungumál", + "The message could not be translated" : "Ekki var hægt að þýða skilaboðin", + "Translation copied to clipboard" : "Þýðing afrituð á klippispjald", + "Translation could not be copied" : "Ekki tókst að afrita þýðinguna", + "Translate message" : "Þýða skilaboð", + "Source language to translate from" : "Upprunatungumál til að þýða af", + "Translate from" : "Þýða úr", + "Target language to translate into" : "Marktungumál til að þýða yfir á", + "Translate to" : "Þýða yfir á", + "Translating" : "Þýðing", + "Copy translated text" : "Afrita þýddan texta", + "Send now" : "Senda núna", + "Message sent" : "Skilaboðin hafa verið send", + "Contact" : "Tengiliður", + "{stack} in {board}" : "{stack} á {board}", + "You voted" : "Þú kaust", + "No messages" : "Engin skilaboð", + "Unpin" : "Losa", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Bæta við þátttakanda", + "Enter password" : "Enter password", + "Send message" : "Senda skilaboð", + "File to share" : "Skrá til að deila", + "Add emoji" : "Bæta við tjáningartákni", + "Send later" : "Senda síðar", + "Cancel editing" : "Hætta við breytingar", + "Share from Files" : "Deila úr skrám", + "Upload from device" : "Senda inn frá tæki", + "Create new poll" : "Búa til nýja könnun", + "Smart picker" : "Snjall-veljari", + "New file" : "Ný skrá", + "Blank" : "Tóm", + "Send" : "Senda", + "Create poll" : "Búa til könnun", + "Settings" : "Stillingar", + "Anonymous poll" : "Nafnlaus könnun", + "End poll" : "End poll", + "Results" : "Niðurstöður", + "moderator" : "umsjónarmaður", + "guest" : "gestanotandi", + "Remove participant" : "Fjarlægja þátttakanda", + "Demote from moderator" : "Láta hætta sem umsjónarmann", + "Promote to moderator" : "Gera að umsjónarmanni", + "Remove" : "Fjarlægja", + "Add users or groups" : "Bæta við notendum eða hópum", + "Integrations" : "Samþættingar", + "Searching …" : "Leita …", + "Participants" : "Þátttakendur", + "Open chat" : "Opna spjall", + "Chat" : "Spjall", + "Details" : "Details", + "Load more results" : "Hlaða inn fleiri niðurstöðum", + "Projects" : "Verkefni", + "No shared items" : "No shared items", + "Link to a conversation" : "Tengill á samtal", + "Select conversation" : "Veldu samtal", + "Edit display name" : "Breyta birtingarnafni", + "Notification settings" : "Stillingar á tilkynningum", + "Default language" : "Sjálfgefið tungumál", + "Privacy" : "Gagnaleynd", + "Search" : "Search", + "Start call" : "Hefja samtal", + "End call" : "Ljúka símtali", + "The call has been running for one hour." : "Símtalið hefur staðið yfir í eina klukkustund.", + "Screensharing options" : "Valkostir skjádeilingar", + "Enable screensharing" : "Virkja skjádeilingu", + "Screensharing requires the page to be loaded through HTTPS." : "Deiling á skjá krefst þess að síðunni sé hlaðið inn með HTTPS.", + "An error occurred while starting screensharing." : "Villa kom upp við að hefja skjádeilingu.", + "Show your screen" : "Birta skjáinn þinn", + "Stop screensharing" : "Hætta skjádeilingu", + "Keep" : "Halda", + "Select a region" : "Veldu svæði", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "Taktu þátt í samtali eða byrjaðu nýtt samtal", + "Talk conversation" : "Samtal í Talk-spjalli", + "User" : "Notandi", + "API token" : "API-teikn", + "Login" : "Innskráning", + "Nickname" : "Stuttnefni", + "Client ID" : "Biðlaraauðkenni", + "Team ID" : "Auðkenni teymis", + "Media" : "Margmiðlunargögn", + "Polls" : "Kannanir", + "Locations" : "Staðsetningar", + "Audio" : "Hljóð", + "Show all files" : "Sýna allar skrár", + "Group" : "Hópur", + "Team" : "Teymi", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Villa við deilingu skráar", + "Later today – {timeLocale}" : "Síðar í dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "Á morgun – {timeLocale}", + "This weekend – {timeLocale}" : "Þessa helgi – {timeLocale}", + "Next week – {timeLocale}" : "Í næstu viku – {timeLocale}", + "Error while parsing a PROPFIND error" : "Villa við þáttun á PROPFIND-villu", + "Please reload the page." : "Þú ættir að hlaða síðunni aftur inn.", + "Do not disturb" : "Ónáðið ekki", + "Away" : "Fjarverandi", + "Access to microphone & camera is only possible with HTTPS" : "Aðgangur að hljóðnema og myndavél er einungis mögulegur í gegnum HTTPS", + "Please move your setup to HTTPS" : "Endilega færðu uppsetninguna þína yfir í HTTPS", + "Access to microphone & camera was denied" : "Aðgangur að hljóðnema og myndavél var ekki heimilaður", + "WebRTC is not supported in your browser" : "WebRTC er ekki stutt í vafranum þínum", + "Please use a different browser like Firefox or Chrome" : "Veldu einhvern annan vafra eins og Firefox eða Chrome", + "Error while accessing microphone & camera" : "Villa kom upp þegar reynt var að opna hljóðnema og myndavél", + "%s Talk on your mobile devices" : "%s Talaðu á snjalltækjunum þínum", + "Android app" : "Android-forrit", + "iOS app" : "iOS-forrit", + "__language_name__" : "Íslenska", + "Tasks" : "Verkefni", + "Notes" : "Minnispunktar", + "Talk conversation for event" : "Samtal fyrir atburð", + "Set reminder for later today" : "Setja áminningu seinna í dag", + "Set reminder for tomorrow" : "Setja áminningu fyrir morgundaginn", + "Set reminder for this weekend" : "Setja áminningu fyrir þessa helgi", + "Set reminder for next week" : "Setja áminningu fyrir í næstu viku" +},"pluralForm" :"nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);" +} \ No newline at end of file diff --git a/l10n/it.js b/l10n/it.js new file mode 100644 index 0000000..c9711c7 --- /dev/null +++ b/l10n/it.js @@ -0,0 +1,2128 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversazione", + "(Duration %s)" : "(Durata %s)", + "You attended a call with {user1}" : "Hai partecipato a una chiamata con {user1}", + "_%n guest_::_%n guests_" : ["%n ospite","%n ospiti","%n ospiti"], + "You attended a call with {user1} and {user2}" : "Hai partecipato a una chiamata con {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Hai partecipato a una chiamata con {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Hai partecipato a una chiamata con {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Hai partecipato a una chiamata con {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n altro","%n altri","%n altri"], + "{actor} invited you to {call}" : "{actor} ti ha invitato a {call}", + "You were invited to a conversation or had a call" : "Sei stato invitato a una conversazione o hai ricevuto una chiamata", + "Other activities" : "Altre attività", + "Talk" : "Talk", + "Guest" : "Ospite", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Benvenuti in Nextcloud Talk!\nIn questa conversazione sarai informato sulle nuove funzionalità disponibili in Nextcloud Talk.", + "## New in Talk %s" : "## Novità in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge e Safari ora possono essere utilizzati per partecipare a chiamate video e audio", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Le conversazioni uno-a-uno ora sono persistenti e non possono essere più trasformate accidentalmente in conversazioni di gruppo. Inoltre, quando uno dei partecipanti abbandona la conversazione, essa non viene più eliminata automaticamente. Solo se entrambi i partecipanti abbandonano, la conversazione viene eliminata dal server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ora puoi informare tutti i partecipanti inserendo \"@all\" nella chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con il tasto \"freccia su\" puoi richiamare il tuo ultimo messaggio", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ora può accettare comandi, invia \"/help\" come un messaggio di chat per vedere se il tuo amministratore li ha configurati", + "- With projects you can create quick links between conversations, files and other items" : "- Con i progetti puoi creare collegamenti rapidi tra conversazioni, file e altri elementi ", + "- You can now mention guests in the chat" : "- Ora puoi menzionare gli ospiti nella chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Le conversazioni ora possono avere un ingresso. Questo consente ai moderatori di entrare nella chat e preparare la riunione, mentre gli utenti e gli ospiti devono attendere.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ora puoi rispondere direttamente ai messaggi fornendo agli altri utenti altre informazioni sul contesto relativo al tuo messaggio", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La ricerca di conversazioni e partecipanti ora filtreranno anche le tue conversazioni esistenti, rendendo più semplice trovare conversazioni precedenti", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ora puoi aggiungere gruppi di utenti personalizzati alle conversazioni quando l'applicazione Cerchie è installata", + "- Check out the new grid and call view" : "- Controlla la nuova visualizzazione griglia e chiamata", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ora puoi inviare e trascinare i file direttamente dal tuo dispositivo nella chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- I file condivisi ora vengono aperti direttamente dentro la chat con le applicazioni di visualizzazione", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ora puoi cercare chat e messaggi nella ricerca unificata nella barra in alto", + "- Spice up your messages with emojis from the emoji picker" : "- Ravviva i tuoi messaggi con le emoji dal selettore di emoji", + "- You can now change your camera and microphone while being in a call" : "- È ora possibile cambiare la videocamera e il microfono durante una chiamata", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dai alle tue conversazioni un contesto con una descrizione e pubblicala in modo che gli utenti registrati possano trovarla e unirsi in autonomia", + "- See a read status and send failed messages again" : "- Visualizza uno stato di lettura e invia nuovamente i messaggi non riusciti ", + "- Raise your hand in a call with the R key" : "- Alza la mano in una chiamata con il tasto R", + "- Join the same conversation and call from multiple devices" : "- Partecipa alla stessa conversazione e chiama da più dispositivi", + "- Send voice messages, share your location or contact details" : "- Invia messaggi vocali, condividi la tua posizione o i dettagli di contatto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Aggiungi gruppi a una conversazione e i nuovi membri del gruppo verranno automaticamente aggiunti come partecipanti", + "- A preview of your audio and video is shown before joining a call" : "- Prima di partecipare a una chiamata, viene mostrata un'anteprima dell'audio e del video", + "- You can now blur your background in the newly designed call view" : "- Ora puoi sfocare lo sfondo nella nuova vista delle chiamate", + "- Moderators can now assign general and individual permissions to participants" : "- I moderatori ora possono assegnare ai partecipanti autorizzazioni generali e individuali", + "- You can now react to chat messages" : "- Ora puoi reagire ai messaggi della chat", + "- In the sidebar you can now find an overview of the latest shared items" : "Nella barra laterale ora puoi trovare una panoramica degli ultimi elementi condivisi", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilizza un sondaggio per raccogliere le opinioni degli altri o fissare una data.", + "- Configure an expiration time for chat messages" : "- Configura un tempo di scadenza per i messaggi di chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Avvia le chiamate senza avvisare gli altri partecipanti alle conversazioni di gruppo. Una volta avviata la chiamata, puoi inviare notifiche individuali.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Invia messaggi di chat senza notificare i destinatari nel caso in cui non sia urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Ora è possibile completare automaticamente le emoji digitando \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Collega vari elementi utilizzando il nuovo selettore intelligente digitando un \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- I moderatori possono ora creare stanze di discussione (richiede il backend ad alte prestazioni)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Ora è possibile registrare le chiamate (richiede il backend ad alte prestazioni)", + "- Conversations can now have an avatar or emoji as icon" : "- Le conversazioni ora possono avere un avatar o un'emoji come icona.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Oltre allo sfondo sfocato nelle videochiamate, ora sono disponibili anche sfondi virtuali.", + "- Reactions are now available during calls" : "- Le reazioni sono ora disponibili durante le chiamate", + "- Typing indicators show which users are currently typing a message" : "- Gli indicatori di digitazione mostrano quali utenti stanno digitando un messaggio", + "- Groups can now be mentioned in chats" : "- Ora è possibile menzionare i gruppi nelle chat", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Le registrazioni delle chiamate vengono trascritte automaticamente se è registrata un'applicazione di trascrizione.", + "- Chat messages can be translated if a translation provider app is registered" : "- I messaggi di chat possono essere tradotti se è registrata un'applicazione di un fornitore di traduzioni.", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** può ora essere utilizzato nei messaggi di _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks sono ora disponibili per implementare bot. Consulta la documentazione per ulteriori informazioni https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Imposta un promemoria su un messaggio di chat per ricevere nuovamente una notifica in un secondo momento", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utilizza la conversazione **Nota a me stesso** per prendere appunti e condividere informazioni tra i tuoi dispositivi", + "- Captions allow to send a message with a file at the same time" : "- Le didascalie consentono di inviare un messaggio insieme a un file.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Il video di chi sta parlando è ora visibile durante la condivisione dello schermo e le reazioni alle chiamate sono animate.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- I messaggi possono ora essere modificati dagli autori e dai moderatori per 6 ore.", + "- Unsent message drafts are now saved in your browser" : "- Le bozze dei messaggi non inviati ora vengono salvate nel browser.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- La chat di testo può ora essere effettuata in modo federato con altri server Talk.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- I moderatori possono ora bandire account e ospiti per impedire loro di partecipare nuovamente a una conversazione.", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Le chiamate in arrivo dagli eventi del calendario collegati e dai sostituti per assenza vengono ora visualizzate nelle conversazioni.", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Le chiamate possono ora essere effettuate in modo federato con altri server Talk (richiede il backend ad alte prestazioni)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentiamo il client desktop Nextcloud Talk per Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Riassumi le registrazioni delle chiamate e i messaggi non letti nelle chat con Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Miglioramento delle riunioni con il riconoscimento degli ospiti invitati tramite il loro indirizzo e-mail, l'importazione degli elenchi dei partecipanti, le bozze per i sondaggi e il download degli elenchi dei partecipanti alle chiamate.", + "- Archive conversations to stay focused" : "- Archivia le conversazioni per rimanere concentrato", + "- Schedule a meeting into your calendar from within a conversation" : "- Pianifica un meeting nel tuo calendario direttamente dalla conversazione", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cerca i messaggi della conversazione corrente direttamente nella barra laterale destra", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Visualizza più conversazioni a colpo d'occhio con il nuovo elenco compatto (abilita nelle impostazioni di Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Le conversazioni delle riunioni ora sincronizzano il titolo e la descrizione dal calendario e vengono nascoste con un filtro di ricerca fino a quando non si avvicina l'ora di inizio.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Contrassegna le conversazioni come sensibili nelle impostazioni di notifica, per nascondere il contenuto dei messaggi dall'elenco delle conversazioni e dalle notifiche.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Per ricevere notifiche push durante la modalità “Non disturbare”, contrassegna le conversazioni come importanti.", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Aggiungi altri partecipanti a una chiamata individuale per creare una nuova chiamata di gruppo al volo", + "- Use threads to keep your chat and discussions organized" : "- Usa gli argomenti per mantenere organizzate le tue chat e discussioni", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Trascrizioni in tempo reale ora disponibili durante la chiamata (richiede l'ExApp per la trascrizione in tempo reale e il backend ad alte prestazioni)", + "_All %n participant_::_All %n participants_" : ["Tutti i %n partecipanti","Tutti i %n partecipanti","Tutti i %n partecipanti"], + "Talk updates ✅" : "Aggiornamenti di Talk ✅", + "Reaction deleted by author" : "Reazione eliminata dall'autore", + "{actor} created the conversation" : "{actor} ha creato la conversazione", + "You created the conversation" : "Hai creato la conversazione", + "System created the conversation" : "Il sistema ha creato la conversazione", + "An administrator created the conversation" : "Un amministratore ha creato la conversazione", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Hai rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un amministratore ha rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} ha impostato la descrizione", + "You set the description" : "Hai impostato la descrizione", + "An administrator set the description" : "Un amministratore ha impostato la descrizione", + "{actor} removed the description" : "{actor} ha rimosso la descrizione", + "You removed the description" : "Hai rimosso la descrizione", + "An administrator removed the description" : "Un amministratore ha rimosso la descrizione", + "You started a silent call" : "Hai avviato una chiamata silenziosa", + "Outgoing silent call" : "Chiamata silenziosa in uscita", + "{actor} started a silent call" : "{actor} ha avviato una chiamata silenziosa ", + "Incoming silent call" : "Chiamata silenziosa in arrivo", + "You started a call" : "Hai iniziato una chiamata", + "Outgoing call" : "Chiamata in uscita", + "{actor} started a call" : "{actor} ha iniziato una chiamata", + "Incoming call" : "Chiamata in arrivo", + "{actor} joined the call" : "{actor} si è unito alla chiamata", + "You joined the call" : "Ti sei unito alla chiamata", + "{actor} left the call" : "{actor} ha abbandonato la chiamata", + "You left the call" : "Hai abbandonato la chiamata", + "{actor} unlocked the conversation" : "{actor} ha sbloccato la conversazione", + "You unlocked the conversation" : "Hai sbloccato la conversazione", + "An administrator unlocked the conversation" : "Un amministratore ha sbloccato la conversazione", + "{actor} locked the conversation" : "{actor} ha bloccato la conversazione", + "You locked the conversation" : "Hai bloccato la conversazione", + "An administrator locked the conversation" : "Un amministratore ha bloccato la conversazione", + "{actor} limited the conversation to the current participants" : "{actor} ha ristretto la conversazione ai partecipanti attuali", + "You limited the conversation to the current participants" : "Hai ristretto la conversazione ai partecipanti attuali", + "An administrator limited the conversation to the current participants" : "Un amministratore ha ristretto la conversazione ai partecipanti attuali", + "{actor} opened the conversation to registered users" : "{actor} ha aperto la conversazione agli utenti registrati", + "You opened the conversation to registered users" : "Hai aperto la conversazione agli utenti registrati", + "An administrator opened the conversation to registered users" : "Un amministratore ha aperto la conversazione agli utenti registrati", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} ha aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "You opened the conversation to registered users and users created with the Guests app" : "Hai aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un amministratore ha aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "The conversation is now open to everyone" : "La conversazione è ora aperta a chiunque", + "{actor} opened the conversation to everyone" : "{actor} ha aperto la conversazione a chiunque", + "You opened the conversation to everyone" : "Hai aperto la conversazione a chiunque", + "{actor} restricted the conversation to moderators" : "{actor} ha ristretto la conversazione ai moderatori", + "You restricted the conversation to moderators" : "Hai ristretto la conversazione ai moderatori", + "{actor} started breakout rooms" : "{actor} ha avviato le sessioni secondarie ", + "You started breakout rooms" : "Hai avviato le sessioni secondarie", + "{actor} stopped breakout rooms" : "{actor} ha interrotto le sessioni secondarie ", + "You stopped breakout rooms" : "Hai interrotto le sessioni secondarie", + "{actor} allowed guests" : "{actor} ha permesso gli ospiti", + "You allowed guests" : "Hai permesso gli ospiti", + "An administrator allowed guests" : "Un amministratore ha consentito gli ospiti", + "{actor} disallowed guests" : "{actor} ha vietato gli ospiti", + "You disallowed guests" : "Hai vietato gli ospiti", + "An administrator disallowed guests" : "Un amministratore ha vietato gli ospiti", + "{actor} set a password" : "{actor} ha impostato una password", + "You set a password" : "Hai impostato una password", + "An administrator set a password" : "Un amministratore ha impostato una password", + "{actor} removed the password" : "{actor} ha rimosso la password", + "You removed the password" : "Hai rimosso la password", + "An administrator removed the password" : "Un amministratore ha rimosso la password", + "{actor} added {user}" : "{actor} ha aggiunto {user}", + "You joined the conversation" : "Ti sei unito alla conversazione", + "{actor} joined the conversation" : "{actor} si è unito alla conversazione", + "You added {user}" : "Hai aggiunto {user}", + "{actor} added you" : "{actor} ti ha aggiunto", + "An administrator added you" : "Un amministratore ti ha aggiunto", + "An administrator added {user}" : "Un amministratore ha aggiunto {user}", + "You left the conversation" : "Hai abbandonato la conversazione", + "{actor} left the conversation" : "{actor} ha abbandonato la conversazione", + "{actor} removed {user}" : "{actor} ha rimosso {user}", + "You removed {user}" : "Hai rimosso {user}", + "{actor} removed you" : "{actor} ti ha rimosso", + "An administrator removed you" : "Un amministratore ti ha rimosso", + "An administrator removed {user}" : "Un amministratore ha rimosso {user}", + "{actor} invited {federated_user}" : "{actor} ha invitato {federated_user}", + "You invited {federated_user}" : "Hai invitato {federated_user}", + "You accepted the invitation" : "Hai accettato l'invito", + "{actor} invited you" : "{actor} ti ha invitato", + "An administrator invited you" : "Un amministratore ti ha invitato", + "An administrator invited {federated_user}" : "Un amministratore ha invitato {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha accettato l'invito", + "{actor} removed {federated_user}" : "{actor} ha rimosso {federated_user}", + "You removed {federated_user}" : "Hai rimosso {federated_user}", + "You declined the invitation" : "Hai rifiutato l'invito", + "An administrator removed {federated_user}" : "Un amministratore ha rimosso {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha rifiutato l'invito", + "{actor} added group {group}" : "{actor} ha aggiunto il gruppo {group}", + "You added group {group}" : "Hai aggiunto il gruppo {group}", + "An administrator added group {group}" : "Un amministratore ha aggiunto il gruppo {group}", + "{actor} removed group {group}" : "{actor} ha rimosso il gruppo {group}", + "You removed group {group}" : "Hai rimosso il gruppo {group}", + "An administrator removed group {group}" : "Un amministratore ha rimosso il gruppo {group}", + "{actor} added team {circle}" : "{actor} ha aggiunto il team {circle}", + "You added team {circle}" : "Hai aggiunto il team {circle}", + "An administrator added team {circle}" : "Un amministratore ha aggiunto il team {circle}", + "{actor} removed team {circle}" : "{actor} ha rimosso il team {circle}", + "You removed team {circle}" : "Hai rimosso il team {circle}", + "An administrator removed team {circle}" : "Un amministratore ha rimosso il team {circle}", + "{actor} added {phone}" : "{actor} ha aggiunto {phone}", + "You added {phone}" : "Hai aggiunto {phone}", + "An administrator added {phone}" : "Un amministratore ha aggiunto {phone}", + "{actor} removed {phone}" : "{actor} ha rimosso {phone}", + "You removed {phone}" : "Hai rimosso {phone}", + "An administrator removed {phone}" : "Un amministratore ha rimosso {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha promosso {user} a moderatore", + "You promoted {user} to moderator" : "Hai promosso {user} a moderatore", + "{actor} promoted you to moderator" : "{actor} ti ha promosso a moderatore", + "An administrator promoted you to moderator" : "Un amministratore ti ha promosso a moderatore", + "An administrator promoted {user} to moderator" : "Un amministratore ha promosso {user} a moderatore", + "{actor} demoted {user} from moderator" : "{actor} ha rimosso {user} da moderatore", + "You demoted {user} from moderator" : "Hai rimosso {user} da moderatore", + "{actor} demoted you from moderator" : "{actor} ti ha rimosso da moderatore", + "An administrator demoted you from moderator" : "Un amministratore ti ha rimosso da moderatore", + "An administrator demoted {user} from moderator" : "Un amministratore ha rimosso {user} da moderatore", + "{actor} shared a file which is no longer available" : "{actor} ha condiviso un file che non è più disponibile", + "You shared a file which is no longer available" : "Hai condiviso un file che non è più disponibile", + "File shares are currently not supported in federated conversations" : "La condivisione dei file non è al momento supportata nelle conversazioni federate", + "The shared location is malformed" : "La posizione condivisa è errata", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurato Matterbridge per sincronizzare questa conversazione con altre chat", + "You set up Matterbridge to synchronize this conversation with other chats" : "Hai configurato Matterbridge per sincronizzare questa conversazione con altre chat", + "{actor} created thread {title}" : "{actor} ha creato l'argomento {title}", + "You created thread {title}" : "Hai creato l'argomento {title}", + "{actor} renamed thread {title}" : "{actor} ha rinominato l'argomento {title}", + "You renamed thread {title}" : "Hai rinominato l'argomento {title}", + "{actor} updated the Matterbridge configuration" : "{actor} ha aggiornato la configurazione di Matterbridge", + "You updated the Matterbridge configuration" : "Hai aggiornato la configurazione di Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ha rimosso la configurazione di Matterbridge", + "You removed the Matterbridge configuration" : "Hai rimosso la configurazione di Matterbridge", + "{actor} started Matterbridge" : "{actor} ha avviato Matterbridge", + "You started Matterbridge" : "Hai avviato Matterbridge", + "{actor} stopped Matterbridge" : "{actor} ha fermato Matterbridge", + "You stopped Matterbridge" : "Hai fermato Matterbridge", + "{actor} deleted a message" : "{actor} ha eliminato un messaggio", + "You deleted a message" : "Hai eliminato un messaggio", + "{actor} edited a message" : "{actor} ha modificato il messaggio", + "You edited a message" : "Hai modificato il messaggio", + "{actor} deleted a reaction" : "{actor} ha eliminato una reazione", + "You deleted a reaction" : "Hai eliminato una reazione", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Hai impostato la scadenza dei messaggi in %n settimana","Hai impostato la scadenza dei messaggi in %n settimane","Hai impostato la scadenza dei messaggi in %n settimane"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Hai impostato la scadenza dei messaggi in %n giorno","Hai impostato la scadenza dei messaggi in %n giorni","Hai impostato la scadenza dei messaggi in %n giorni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Hai impostato la scadenza dei messaggi in %n ora","Hai impostato la scadenza dei messaggi in %n ore","Hai impostato la scadenza dei messaggi in %n ore"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Hai impostato la scadenza dei messaggi in %n minuto","Hai impostato la scadenza dei messaggi in %n minuti","Hai impostato la scadenza dei messaggi in %n minuti"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ha impostato la scadenza dei messaggi in %n settimana","{actor} ha impostato la scadenza dei messaggi in %n settimane","{actor} ha impostato la scadenza dei messaggi in %n settimane"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ha impostato la scadenza dei messaggi in %n giorno","{actor} ha impostato la scadenza dei messaggi in %n giorni","{actor} ha impostato la scadenza dei messaggi in %n giorni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ha impostato la scadenza dei messaggi in %n ora","{actor} ha impostato la scadenza dei messaggi in %n ore","{actor} ha impostato la scadenza dei messaggi in %n ore"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ha impostato la scadenza dei messaggi in %n minuto","{actor} ha impostato la scadenza dei messaggi in %n minuti","{actor} ha impostato la scadenza dei messaggi in %n minuti"], + "{actor} disabled message expiration" : "{actor} ha disattivato la scadenza dei messaggi ", + "You disabled message expiration" : "Hai disattivato la scadenza dei messaggi", + "{actor} cleared the history of the conversation" : "{actor} ha cancellato la cronologia della conversazione", + "You cleared the history of the conversation" : "Hai cancellato la cronologia della conversazione", + "{actor} set the conversation picture" : "{actor} ha impostato l'icona della conversazione", + "You set the conversation picture" : "Hai impostato l'icona della conversazione", + "{actor} removed the conversation picture" : "{actor} ha rimosso l'icona della conversazione", + "You removed the conversation picture" : "Hai rimosso l'immagine della conversazione", + "{actor} ended the poll {poll}" : "{actor} ha concluso il sondaggio {poll}", + "You ended the poll {poll}" : "Hai concluso il sondaggio {poll}", + "{actor} started the video recording" : "{actor} ha avviato la registrazione video", + "You started the video recording" : "Hai avviato la registrazione video", + "{actor} stopped the video recording" : "{actor} ha interrotto la registrazione video", + "You stopped the video recording" : "Hai interrotto la registrazione video", + "{actor} started the audio recording" : "{actor} ha avviato la registrazione audio", + "You started the audio recording" : "Hai avviato la registrazione audio", + "{actor} stopped the audio recording" : "{actor} ha interrotto la registrazione audio", + "You stopped the audio recording" : "Hai interrotto la registrazione audio", + "The recording failed" : "La registrazione non è riuscita", + "Someone voted on the poll {poll}" : "Qualcuno ha votato nel sondaggio {poll}", + "Message deleted by author" : "Messaggio eliminato dall'autore", + "Message deleted by {actor}" : "Messaggio eliminato da {actor}", + "Message deleted by you" : "Messaggio eliminato da te", + "Deleted user" : "Utente eliminato", + "Unknown number" : "Numero sconosciuto", + "Administration" : "Amministrazione", + "System" : "Sistema", + "%s (guest)" : "%s (ospite)", + "Missed call" : "Chiamata persa", + "Unanswered call" : "Chiamata non risposta", + "Call ended (Duration {duration})" : "Chiamata terminata (Durata {duration}) ", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata è stata terminata in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha terminato la chiamata (Durata {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La chiamata con %n ospite è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})","La chiamata con %n ospiti è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})","La chiamata con %n ospiti è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["La chiamata con %n ospite è terminata (Durata {duration})","La chiamata con %n ospiti è terminata (Durata {duration})","La chiamata con %n ospiti è terminata (Durata {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha terminato la chiamata con %n ospite (Durata {duration})","{actor} ha terminato la chiamata con %n ospiti (Durata {duration})","{actor} ha terminato la chiamata con %n ospiti (Durata {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1} ended (Duration {duration})" : "La chiamata con {user1} è terminata (Durata {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1} ospite (Durata {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1} e {user2} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "La chiamata con {user1} e {user2} è terminata (Durata {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1} e {user2} (Durata {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2} e {user3} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "La chiamata con {user1}, {user2} e {user3} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2} e {user3} (Durata {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3} e {user4} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3} e {user4} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2}, {user3} e {user4} (Durata {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3}, {user4} e {user5} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3}, {user4} e {user5} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2}, {user3}, {user4} e {user5} (Durata {duration})", + "Message of {user} in {conversation}" : "Messaggio di {user} in {conversation}", + "Message of {user}" : "Messaggio di {user}", + "Message of a deleted user in {conversation}" : "Messaggio di un utente eliminato in {conversation}", + "Talk conversations" : "Conversazioni di Talk", + "Talk to %s" : "Parla con %s", + "An error occurred. Please contact your administrator." : "Si è verificato un errore. Per favore, contatta il tuo amministratore.", + "Storage quota exceeded" : "Quota di archiviazione superata", + "File not found" : "File non trovato", + "File is not shared, or shared but not with the user" : "Il file non è condiviso, o condiviso ma non con l'utente", + "No account available to delete." : "Nessun account disponibile da eliminare.", + "Poll" : "Sondaggio", + "Password needs to be set" : "Bisogna impostare una password", + "Uploading the file failed" : "Il caricamento del file è fallito", + "No image file provided" : "Nessun file immagine fornito", + "File is too big" : "Il file è troppo grande", + "Invalid file provided" : "File fornito non valido", + "Invalid image" : "Immagine non valida ", + "Unknown filetype" : "Tipo di file sconosciuto ", + "Talk mentions" : "Menzioni di Talk", + "More conversations" : "Più conversazioni", + "Say hi to your friends and colleagues!" : "Saluta i tuoi amici e i tuoi colleghi!", + "No unread mentions" : "Nessuna menzione non letta", + "Call in progress" : "Chiamata in corso", + "You were mentioned" : "Sei stato menzionato", + "Write to conversation" : "Scrivi nella conversazione", + "Writes event information into a conversation of your choice" : "Scrive le informazioni di evento in una conversazione di tua scelta", + "Missing email field in header line" : "Indirizzo email mancante nell'intestazione", + "Following lines are invalid: %s" : "Le seguenti linee non sono valide: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s ti ha invitato nella conversazione \"%2$s\".", + "You were invited to conversation \"%s\"." : "Hai ricevuto un invito per la conversazione \"%s\".", + "Conversation invitation" : "Inviti di conversazione", + "Scheduled time" : "Orario programmato", + "Description" : "Descrizione", + "You can also dial-in via phone with the following details" : "Puoi accedere anche tramite telefono con i seguenti dettagli", + "Dial-in information" : "Informazioni di accesso", + "Meeting ID" : "ID riunione", + "Your PIN" : "Il tuo PIN", + "Click the button below to join the lobby now." : "Premi il bottone in basso per entrare nella stanza ora.", + "Click the link below to join the lobby now." : "Premi il collegamento in basso per entrare nella stanza adesso.", + "Join lobby for \"%s\"" : "Entra nella stanza per \"%s\"", + "Click the button below to join the conversation now." : "Premi il bottone in basso per entrare nella conversazione ora.", + "Click the link below to join the conversation now." : "Premi il collegamento in basso per entrare nella conversazione ora.", + "Join \"%s\"" : "Entra in \"%s\"", + "Meeting" : "Riunione", + "Password request: %s" : "Password richiesta: %s", + "Private conversation" : "Conversazione privata", + "Deleted user (%s)" : "Utente eliminato (%s)", + "Failed to upload call recording" : "Caricamento della registrazione della chiamata fallita", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Il server di registrazione ha fallito il caricamento della chiamata {call}. Per favore, contatta un amministratore.", + "Dismiss notification" : "Cancella notifica", + "Call recording now available" : "Registrazione della chiamata ora disponibile", + "The recording for the call in {call} was uploaded to {file}." : "La registrazione della chiamata in {call} è stata caricata su {file}.", + "Transcript now available" : "Trascrizione ora disponibile", + "The transcript for the call in {call} was uploaded to {file}." : "Trascrizione della chiamata in {call} è stata caricata in {file}.", + "Failed to transcript call recording" : "Impossibile trascrivere la registrazione della chiamata", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Il server ha fallito la trascrizione della registrazione nel file {file} per la chiamata {call}. Per favore, contatta un amministratore.", + "Call summary now available" : "Riassunto della chiamata ora disponibile", + "The summary for the call in {call} was uploaded to {file}." : "Il riassunto per la chiamata {call} è stato caricato su {file}. ", + "Failed to summarize call recording" : "Impossibile riassumere la registrazione della chiamata", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Il server ha fallito il riassunto della registrazione del file {file} per la chiamata in {call}. Contatta un amministratore.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} ti ha invitato ad entrare nella stanza {roomName} su {remoteServer}", + "Accept" : "Accetta", + "Decline" : "Rifiuta", + "{user1} invited you to a federated conversation" : "{user1} ti ha invitato in una conversazione federata", + "Someone reacted" : "Qualcuno ti ha contattato", + "New message" : "Nuovo messaggio", + "Reminder" : "Promemoria", + "Someone mentioned you" : "Qualcuno ti ha menzionato", + "Notification" : "Notifica", + "Someone reacted in a private conversation" : "Qualcuno ha reagito in una conversazione privata", + "You received a message in a private conversation" : "Hai ricevuto un messaggio in una conversazione privata", + "Reminder in a private conversation" : "Promemoria in una conversazione privata", + "Someone mentioned you in a private conversation" : "Qualcuno ti ha menzionato in una conversazione privata", + "Notification in a private conversation" : "Notifica in una conversazione privata", + "Reminder: You in {call}" : "Promemoria: Te stesso in {call}", + "Reminder: {user} in {call}" : "Promemoria: {user} in {call}", + "Reminder: Deleted user in {call}" : "Promemoria: Utente eliminato in {call}", + "Reminder: {guest} (guest) in {call}" : "Promemoria: {guest} (ospite) in {call}", + "Reminder: Guest in {call}" : "Promemoria: Ospite in {call}", + "{user} reacted with {reaction}" : "{user} ha reagito con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} ha reagito con {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "L'utente eliminato ha reagito con {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (ospite) ha reagito con {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Ospite ha reagito con {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Utente eliminato in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Ospite in {call}", + "{user} sent you a private message" : "{user} ti ha inviato un messaggio privato", + "{user} sent a message in conversation {call}" : "{user} ha inviato un messaggio nella conversazione {call}", + "A deleted user sent a message in conversation {call}" : "Un utente eliminato ha inviato un messaggio nella conversazione {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (ospite) ha inviato un messaggio nella conversazione {call}", + "A guest sent a message in conversation {call}" : "Un ospite ha inviato un messaggio nella conversazione {call}", + "{user} replied to your private message" : "{user} ha risposto al tuo messaggio privato", + "{user} replied to your message in conversation {call}" : "{user} ha risposto al tuo messaggio nella conversazione {call}", + "A deleted user replied to your message in conversation {call}" : "Un utente eliminato ha risposto al tuo messaggio nella conversazione {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (ospite) ha risposto al tuo messaggio nella conversazione {call}", + "A guest replied to your message in conversation {call}" : "Un ospite ha risposto al tuo messaggio nella conversazione {call}", + "Reminder: You in private conversation {call}" : "Promemoria: Te stesso nella conversazione privata {call}", + "Reminder: A deleted user in private conversation {call}" : "Promemoria: Un utente eliminato nella conversazione privata {call}", + "Reminder: {user} in private conversation" : "Promemoria: {user} in una conversazione privata", + "Reminder: You in conversation {call}" : "Promemoria: Te stesso nella conversazione {call}", + "Reminder: {user} in conversation {call}" : "Promemoria: {user} nella conversazione {call}", + "Reminder: A deleted user in conversation {call}" : "Promemoria: Un utente eliminato nella conversazione {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Promemoria: {guest} (ospite) nella conversazione {call}", + "Reminder: A guest in conversation {call}" : "Promemoria: Un ospite nella conversazione {call}", + "{user} reacted with {reaction} to your private message" : "{user} ha reagito con {reaction} al tuo messaggio privato", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utente eliminato ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un ospite ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "{user} mentioned you in a private conversation" : "{user} ti ha menzionato in una conversazione privata", + "{user} mentioned group {group} in conversation {call}" : "{user} ha menzionato il gruppo {group} nella conversazione {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} ha menzionato il team {team} nella conversazione {call}", + "{user} mentioned everyone in conversation {call}" : "{user} ha menzionato chiunque nella conversazione {call}", + "{user} mentioned you in conversation {call}" : "{user} ti ha menzionato nella conversazione {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un utente eliminato ha menzionato il gruppo {group} nella conversazione {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un utente eliminato ha menzionato il team {team} nella conversazione {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un utente eliminato ha menzionato chiunque nella conversazione {call}", + "A deleted user mentioned you in conversation {call}" : "Un utente eliminato ti ha menzionato nella conversazione {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (ospite) ha menzionato il gruppo {group} nella conversazione {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (ospite) ha menzionato il team {team} nella conversazione {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (ospite) ha menzionato chiunque nella conversazione {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (ospite) ti ha menzionato nella conversazione {call}", + "A guest mentioned group {group} in conversation {call}" : "Un ospite ha menzionato il gruppo {group} nella conversazione {call}", + "A guest mentioned team {team} in conversation {call}" : "Un ospite ha menzionato il team {team} nella conversazione {call}", + "A guest mentioned everyone in conversation {call}" : "Un ospite ha menzionato chiunque nella conversazione {call}", + "A guest mentioned you in conversation {call}" : "Un ospite ti ha menzionato nella conversazione {call}", + "View message" : "Vedi messaggio", + "Dismiss reminder" : "Rimuovi promemoria", + "View chat" : "Visualizza chat", + "{user} invited you to a group conversation: {call}" : "{user} ti ha invitato a una conversazione di gruppo: {call}", + "Join call" : "Unisciti alla chiamata", + "Answer call" : "Rispondi alla chiamata", + "{user} would like to talk with you" : "{user} vorrebbe parlare con te", + "Call back" : "Richiama", + "You missed a call from {user}" : "Hai perso una chiamata da {user}", + "Accept call" : "Accetta chiamata", + "Incoming phone call from {call}" : "Chiamata telefonica in arrivo da {call}", + "You missed a phone call from {call}" : "Hai una chiamata telefonica persa da {call}", + "A group call has started in {call}" : "Una chiamata di gruppo è iniziata in {call}", + "You missed a group call in {call}" : "Hai perso una chiamata di gruppo in {call}", + "{email} is requesting the password to access {file}" : "{email} sta richiedendo la password per accedere a {file}", + "{email} tried to request the password to access {file}" : "{email} ha provato a richiedere la password per accedere a {file}", + "Someone is requesting the password to access {file}" : "Qualcuno sta richiedendo la password per accedere a {file}", + "Someone tried to request the password to access {file}" : "Qualcuno ha provato a richiedere la password per accedere a {file}", + "Open settings" : "Apri impostazioni", + "Hosted signaling server added" : "Server di segnalazione aggiunto", + "The hosted signaling server is now configured and will be used." : "Il server di segnalazione ospitato è ora configurato e sarà utilizzato.", + "Hosted signaling server removed" : "Server di segnalazione rimosso", + "The hosted signaling server was removed and will not be used anymore." : "Il server di segnalazione ospitato è stato rimosso e non sarà più utilizzato.", + "Hosted signaling server changed" : "Server di signaling modificato", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "L'account del server di segnalazione ospitato ha modificato lo stato da \"{oldstatus}\" a \"{newstatus}\".", + "pending" : "in sospeso", + "active" : "attivo", + "expired" : "scaduto", + "blocked" : "bloccato", + "error" : "errore", + "The certificate of {host} expires in {days} days" : "Il certificato di {host} scade in {days} giorni", + "The certificate of {host} expired" : "Il certificato di {host} è scaduto", + "Contact via Talk" : "Contatto tramite Talk", + "Open Talk" : "Apri Talk", + "Default" : "Predefinita", + "Presentation" : "Presentazione", + "Conversations" : "Conversazioni", + "Messages in current conversation" : "Messaggi nella conversazione corrente", + "{user}" : "{user}", + "Messages" : "Messaggi", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messaggi in altre conversazioni", + "One-to-one rooms always need to show the other users avatar" : "Le stanze uno-ad-uno devono sempre mostrare l'avatar degli altri utenti.", + "Invalid emoji character" : "Carattere emoji non valido", + "Invalid background color" : "Colore di sfondo non valido", + "Avatar image is not square" : "L'immagine personale non è quadrata", + "Room {number}" : "Stanza {number}", + "Other" : "Altro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Richiesta della prova non riuscita perché il server di prova non è raggiungibile. Ritenta più tardi.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Si è verificato un problema con l'autenticazione di questa istanza. Forse non è raggiungibile dall'esterno per verificare l'URL.", + "Something unexpected happened." : "Si è verificato qualcosa di inatteso.", + "The URL is invalid." : "L'URL non è valido.", + "An HTTPS URL is required." : "È richiesto un URL HTTPS.", + "The email address is invalid." : "L'indirizzo di posta non è valido.", + "The language is invalid." : "La lingua non è valida.", + "The country is invalid." : "La nazione non è valida.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Si è verificato un problema con la richiesta della prova. Controlla i registri per ulteriori informazioni.", + "Too many requests are send from your servers address. Please try again later." : "Troppe richieste inviate dall'indirizzo del tuo server. Riprova più tardi.", + "There is already a trial registered for this Nextcloud instance." : "Esiste già una versione di prova registrata per questa istanza di Nextcloud.", + "Something unexpected happened. Please try again later." : "Si è verificato qualcosa di inatteso. Riprova più tardi.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Richiesta della prova non riuscita perché il server di prova si è comportato in modo errato. Ritenta più tardi.", + "Trial requested but failed to get account information. Please check back later." : "Versione di prova richiesta, ma impossibile ottenere le informazioni sull'account. Controlla più tardi.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Si è verificato un problema con l'autenticazione di questa richiesta. Forse non è raggiungibile dall'esterno per verificare l'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Impossibile recuperare le informazioni sull'account perché il server di prova si è comportato in modo errato. Controlla più tardi.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Si è verificato un problema con il recupero delle informazioni sull'account. Controlla i registri per ulteriori informazioni.", + "There is no such account registered." : "Non c'è nessun account di questo tipo registrato.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Impossibile recuperare le informazioni sull'account perché il server di prova non è raggiungibile. Controlla più tardi.", + "Deleting the hosted signaling server account failed. Please check back later." : "Eliminazione dell'account del server di segnalazione ospitato non riuscita. Controlla più tardi.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Impossibile eliminare l'account perché il server di prova si è comportato in modo errato. Controlla più tardi.", + "There is a problem with deleting the account. Please check your logs for further information." : "Si è verificato un problema con l'eliminazione dell'account. Controlla i registri per ulteriori informazioni.", + "Too many requests are sent from your servers address. Please try again later." : "Troppe richieste inviate dall'indirizzo del tuo server. Riprova più tardi.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Impossibile eliminare l'account perché il server di prova non è raggiungibile. Controlla più tardi.", + "Note to self" : "Nota a me stesso", + "A place for your private notes, thoughts and ideas" : "Un posto per i tuoi appunti, pensieri e idee privati", + "Transcript is AI generated and may contain mistakes" : "La trascrizione è generata dall'IA e potrebbe contenere errori.", + "Summary is AI generated and may contain mistakes" : "Il riassunto è generato dall'IA e potrebbe contenere errori.", + "Let's get started!" : "Iniziamo!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** è una piattaforma di comunicazione sicura e auto-gestita che si integra perfettamente con l'ecosistema Nextcloud.\n\n#### Caratteristiche principali di Nextcloud Talk:\n\n* Chat e messaggistica in chat private e di gruppo\n* Chiamate vocali e videochiamate\n* Condivisione di file e integrazione con altre app Nextcloud\n* Impostazioni di conversazione personalizzabili, moderazione e controlli sulla privacy\n* Web, desktop e mobile (iOS e Android)\n* Comunicazione privata e sicura\n\nPer saperne di più, consulta la [documentazione utente](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Benvenuto su Nextcloud Talk\n\nNextcloud Talk è un'applicazione di messaggistica privata e potente che si integra con Nextcloud. Chat private o di gruppo, collabora tramite chiamate vocali e videochiamate, organizza webinar ed eventi, personalizza le tue conversazioni e molto altro ancora.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatta i testi per creare messaggi ricchi\n\nIn Nextcloud Talk, puoi utilizzare la sintassi Markdown per formattare i tuoi messaggi. Ad esempio, puoi applicare la formattazione **grassetto** o *corsivo*, oppure `evidenziare il testo come codice`. Puoi anche creare tabelle e aggiungere intestazioni al tuo testo.\n\nHai bisogno di correggere un errore di battitura o modificare la formattazione? Modifica il tuo messaggio facendo clic su “Modifica messaggio” nel menu del messaggio.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Aggiungi allegati e collegamenti\n\nAllega file dal tuo Nextcloud Hub utilizzando il pulsante “+”. Condividi elementi da File e varie applicazioni Nextcloud. Alcune applicazioni supportano anche widget interattivi, ad esempio l'applicazione Testo.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 🔗 Aggiungi allegati e collegamenti\n\nAllega file dal tuo Nextcloud Hub utilizzando il pulsante %s. Condividi elementi da File e varie applicazioni Nextcloud. Alcune applicazioni supportano anche widget interattivi, ad esempio l'applicazione Testo.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "È possibile rispondere ai messaggi, inoltrarli ad altre chat e persone oppure copiarne il contenuto.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Fai di più con Smart Picker\n\nBasta digitare “/” o andare al menu “+” per aprire Smart Picker, dove puoi allegare vari contenuti ai tuoi messaggi. Puoi configurare Smart Picker per poter aggiungere elementi dalle app Nextcloud, GIF, posizioni sulla mappa, contenuti generati dall'intelligenza artificiale e molto altro ancora.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestisci le impostazioni delle conversazioni\n\nNel menu delle conversazioni puoi accedere a varie impostazioni per gestire le tue conversazioni, come ad esempio:\n* Modifica le informazioni sulla conversazione\n* Gestisci le notifiche\n* Applica numerose regole di moderazione\n* Configura l'accesso e la sicurezza\n* Abilita i bot\n* e molto altro ancora!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirati Arabi Uniti", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartide", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americane", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Isole Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia ed Erzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgio", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthelemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Stato Plurinazionale di", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius e Saba", + "Brazil" : "Brasile", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Isola Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorussia", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Isole Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, Repubblica Democratica del", + "Central African Republic" : "Repubblica Centrafricana", + "Congo" : "Congo", + "Switzerland" : "Svizzera", + "Côte d'Ivoire" : "Costa d'Avorio", + "Cook Islands" : "Isole di Cook", + "Chile" : "Cile", + "Cameroon" : "Camerun", + "China" : "Cina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Capo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Isola di Natale", + "Cyprus" : "Cipro", + "Czechia" : "Cechia", + "Germany" : "Germania", + "Djibouti" : "Gibuti", + "Denmark" : "Danimarca", + "Dominica" : "Dominica", + "Dominican Republic" : "Repubblica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egitto", + "Western Sahara" : "Sahara occidentale", + "Eritrea" : "Eritrea", + "Spain" : "Spagna", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Figi", + "Falkland Islands (Malvinas)" : "Isole Falkland (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Stati Federati di", + "Faroe Islands" : "Isole Faroe", + "France" : "Francia", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regno Unito di Gran Bretagna e Irlanda del Nord", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana Francese", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibilterra", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupa", + "Equatorial Guinea" : "Guinea Equatoriale", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Georgia del Sud e Isole Sandwich Australi", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isole Heard e McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croazia", + "Haiti" : "Haiti", + "Hungary" : "Ungheria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israele", + "Isle of Man" : "Isola di Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Britannico dell'Oceano Indiani", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Repubblica Islamica dell'", + "Iceland" : "Islanda", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Giamaica", + "Jordan" : "Giordania", + "Japan" : "Giappone", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirghizistan", + "Cambodia" : "Cambogia", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Saint Kitts e Nevis", + "Korea, Democratic People's Republic of" : "Corea, Repubblica Democratica Popolare di", + "Korea, Republic of" : "Corea, Repubblica di", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Isole Cayman", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Repubblica Democratica Popolare del Laos", + "Lebanon" : "Libano", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Lussemburgo", + "Latvia" : "Lettonia", + "Libya" : "Libia", + "Morocco" : "Marocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavia, Repubblica di", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (parte francese)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Isole Marshall", + "North Macedonia" : "Macedonia del Nord", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Isole Marianne settentrionali", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldive", + "Malawi" : "Malawi", + "Mexico" : "Messico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambico", + "Namibia" : "Namibia", + "New Caledonia" : "Nuova Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Isola Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Paesi Bassi", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nuova Zelanda", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Perù", + "French Polynesia" : "Polinesia Francese", + "Papua New Guinea" : "Papua Nuova Guinea", + "Philippines" : "Filippine", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint Pierre e Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Stato di", + "Portugal" : "Portogallo", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federazione Russa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Isole Salomone", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Svezia", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sant'Elena, Ascensione e Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard e Jan Mayen", + "Slovakia" : "Slovacchia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan del Sud", + "Sao Tome and Principe" : "Sao Tome e Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (parte olandese)", + "Syrian Arab Republic" : "Repubblica Araba Siriana", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Isole Turks e Caicos", + "Chad" : "Ciad", + "French Southern Territories" : "Terre Australi Francesi", + "Togo" : "Togo", + "Thailand" : "Thailandia", + "Tajikistan" : "Tagikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Est", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turchia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, provincia della Cina", + "Tanzania, United Republic of" : "Tanzania, Repubblica Unita di", + "Ukraine" : "Ucraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Isole minori esterne degli Stati Uniti d'America", + "United States of America" : "Stati Uniti d'America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Città del Vaticano", + "Saint Vincent and the Grenadines" : "Saint Vincent e Grenadine", + "Venezuela, Bolivarian Republic of" : "Venezuela, Repubblica Bolivariana di", + "Virgin Islands, British" : "Isole Vergini, Britanniche", + "Virgin Islands, U.S." : "Isole Vergini, U.S.A.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudafrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Sfondo sfocato", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Impossibile verificare il supporto per il caricamento WASM. Verificare manualmente se il server web supporta i file `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Il tuo server web non è configurato correttamente per fornire file `.wasm`. Si tratta in genere di un problema legato alla configurazione di Nginx. Per la sfocatura dello sfondo è necessario un aggiustamento per fornire anche i file `.wasm`. Confronta la tua configurazione Nginx con quella consigliata nella nostra documentazione.", + "Talk configuration values" : "Valori di configurazione di Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "La forzatura della durata delle chiamate è supportata solo con il cron di sistema. Abilita il cron di sistema o rimuovi la configurazione `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "I valori bassi di `max_call_duration` (attualmente impostato su %d) non sono applicabili a causa di limitazioni tecniche. Il processo in background viene eseguito solo ogni 5 minuti, quindi utilizza questi valori a tuo rischio e pericolo.", + "Federation" : "Federazione", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Si consiglia vivamente di configurare “memcache.locking” quando Talk Federation è abilitato.", + "High-performance backend" : "Motore ad alte prestazioni", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Backend ad alte prestazioni non configurato - L'esecuzione di Nextcloud Talk senza il backend ad alte prestazioni consente di gestire solo chiamate di dimensioni molto ridotte (max. 2-3 partecipanti). Configurare il backend ad alte prestazioni per garantire il corretto funzionamento delle chiamate con più partecipanti.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'esecuzione della modalità “conversation_cluster” del backend ad alte prestazioni è deprecata e non sarà più supportata nella prossima versione. Il backend ad alte prestazioni supporta attualmente il clustering reale, che dovrebbe essere utilizzato al suo posto.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La definizione di più backend ad alte prestazioni è deprecata e non sarà più supportata nella prossima versione. È invece necessario configurare un bilanciatore di carico insieme a server di segnalazione in cluster e configurarlo nelle impostazioni di Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La chiave pubblica memorizzata per l'algoritmo %1$s non corrisponde alla chiave privata memorizzata. Eseguire %2$s per risolvere il problema.", + "High-performance backend not configured correctly. Run %s for details." : "Backend ad alte prestazioni non configurato correttamente. Eseguire %s per i dettagli.", + "High-performance backend not configured correctly" : "Backend ad alte prestazioni non configurato correttamente", + "Error: Cannot connect to server" : "Errore: impossibile connettersi al server", + "Error: Server did not respond with proper JSON" : "Errore: il server non ha risposto con il JSON corretto", + "Error: Certificate expired" : "Errore: Certificato scaduto", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Errore: gli orari di sistema del server Nextcloud e del server backend ad alte prestazioni non sono sincronizzati. Assicurati che entrambi i server siano collegati a un server di riferimento orario o sincronizza manualmente l'ora.", + "Could not get version" : "Impossibile ottenere la versione", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Errore: versione in esecuzione: {version}; Il server deve essere aggiornato per essere compatibile con questa versione di Talk", + "Error: Server responded with: {error}" : "Errore: il server ha risposto con: {error}", + "Error: Unknown error occurred" : "Errore: si è verificato un errore sconosciuto", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Avviso: versione in esecuzione: {version}; Il server non supporta tutte le funzionalità di questa versione di Talk, funzionalità mancanti: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Si consiglia vivamente di configurare una cache di memoria quando si esegue Nextcloud Talk con un backend ad alte prestazioni.", + "Client Push" : "Client Push", + "Recording backend" : "Backend di registrazione", + "Using the recording backend requires a High-performance backend." : "L'utilizzo del backend di registrazione richiede un backend ad alte prestazioni.", + "No recording backend configured" : "Nessun backend di registrazione configurato", + "SIP configuration" : "Configurazione SIP", + "Using the SIP functionality requires a High-performance backend." : "L'utilizzo della funzionalità SIP richiede un backend ad alte prestazioni.", + "No SIP backend configured" : "Nessun backend SIP configurato", + "Invalid date, date format must be YYYY-MM-DD" : "Data non valida, il formato della data deve essere AAAA-MM-GG", + "Conversation not found" : "Conversazione non trovata", + "Path is already shared with this conversation" : "Il percorso è già condiviso con questa conversazione", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video e audio conferenze utilizzando WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, videoconferenze e audioconferenze tramite WebRTC\n\n* 💬 **Chat** Nextcloud Talk include una semplice chat di testo che consente di condividere o caricare file dall'applicazione Nextcloud Files o dal dispositivo locale e menzionare altri partecipanti.\n* 👥 **Chiamate private, di gruppo, pubbliche e protette da password!** Invita una persona, un intero gruppo o invia un collegamento pubblico per invitare qualcuno a una chiamata.\n* 🌐 **Chat federate** Partecipa a chat con altri utenti Nextcloud sui loro server\n* 💻 **Condivisione dello schermo!** Condividi il tuo schermo con i partecipanti alla tua chiamata.\n* 🚀 **Integrazione con altre applicazioni Nextcloud** come Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck e molte altre.\n* 🌉 **Sincronizzazione con altre soluzioni di chat** Con [Matterbridge](https://github.com/42wim/matterbridge/) integrato in Talk, puoi sincronizzare facilmente molte altre soluzioni di chat con Nextcloud Talk e viceversa.", + "Leave call" : "Lascia la chiamata", + "Navigating away from the page will leave the call in {conversation}" : "L'abbandono della pagina causerà l'uscita dalla chiamata in {conversation}", + "Stay in call" : "Rimani in conversazione", + "Error occurred when getting the conversation information" : "Si è verificato un errore durante il recupero delle informazioni sulla conversazione", + "Discuss this file" : "Discuti questo file", + "Share this file with others to discuss it" : "Condividi questo file con altri per discuterne", + "Share this file" : "Condividi questo file", + "Join conversation" : "Unisciti alla conversazione", + "This conversation is password-protected." : "Questa conversazione è protetta da password.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Abbiamo rilevato diversi tentativi di accesso con password non valida dal tuo indirizzo IP. Pertanto, il tuo prossimo tentativo sarà ritardato di 30 secondi.", + "The password is wrong. Try again." : "La password è errata. Prova ancora.", + "Password" : "Password", + "Submit" : "Invia", + "Error requesting the password." : "Errore durante la richiesta della password", + "Request password" : "Richiedi password", + "This conversation has ended" : "Questa conversazione è terminata", + "Error occurred when joining the conversation" : "Si è verificato un errore durante l'adesione alla conversazione", + "Close Talk sidebar" : "Chiudi la barra laterale di Talk", + "Open Talk sidebar" : "Aprire la barra laterale di Talk", + "Everyone" : "Tutti", + "Users and moderators" : "Utenti e moderatori", + "Moderators only" : "Solo i moderatori", + "Disable calls" : "Disabilita chiamate", + "Save changes" : "Salva le modifiche", + "Saving …" : "Salvataggio in corso...", + "Saved!" : "Salvato!", + "Limit to groups" : "Limita a gruppi", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quando almeno un gruppo è selezionato, solo le persone dei gruppi elencati possono prendere parte alla conversazione.", + "Guests can still join public conversations." : "Gli ospiti possono unirsi a conversazioni pubbliche.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Gli utenti che non possono più usare Talk verranno comunque elencati tra i partecipanti nelle loro conversazioni precedenti e verranno anche mantenuti i loro messaggi.", + "Limit using Talk" : "Limita l'utilizzo di Talk", + "Limit creating a public and group conversation" : "Limita alla creazione di una conversazione pubblica e di gruppo", + "Limit creating conversations" : "Limita la creazione di conversazioni", + "Limit starting a call" : "Limita l'inizio di una chiamata", + "Limit starting calls" : "Limita l'inizio della chiamate", + "When a call has started, everyone with access to the conversation can join the call." : "Quando una chiamata è iniziata, chiunque abbia accesso alla conversazione può unirsi alla chiamata.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "I seguenti bot sono installati su questo server. Nella documentazione puoi trovare i dettagli su come {linkstart1}creare il tuo bot{linkend} o una {linkstart2}lista di bot{linkend} da abilitare sul tuo server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nessun bot è installato su questo server. Nella documentazione puoi trovare i dettagli su come {linkstart1}creare il tuo bot{linkend} o una {linkstart2}lista di bot{linkend} da abilitare sul tuo server.", + "Description is not provided" : "Descrizione non fornita", + "Locked for moderators" : "Bloccato dai moderatori", + "Enabled" : "Abilitata", + "Disabled" : "Disattivato", + "Bots settings" : "Impostazioni dei bot", + "State" : "Stato", + "Name" : "Nome", + "Last error" : "Ultimo errore", + "Total errors count" : "Numero totale errori", + "Find more bots" : "Trova altri bot", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "I server attendibili possono essere configurati nella pagina {linkstart}Impostazioni di condivisione{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Le chat e le chiamate federate funzionano già. La gestione degli allegati sarà disponibile in una versione futura.", + "Enable Federation in Talk app" : "Abilita la federazione nell'applicazione Talk", + "Permissions" : "Permessi", + "Allow users to be invited to federated conversations" : "Consenti agli utenti di essere invitati a conversazioni federate", + "Allow users to invite federated users into conversation" : "Consenti agli utenti di invitare utenti federati nella conversazione", + "Only allow to federate with trusted servers" : "Consenti solo la federazione con server affidabili", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quando è selezionato almeno un gruppo, solo le persone appartenenti ai gruppi elencati possono invitare utenti federati alle conversazioni.", + "Groups allowed to invite federated users" : "Gruppi autorizzati a invitare utenti federati", + "Select groups …" : "Seleziona gruppi …", + "All messages" : "Tutti i messaggi", + "@-mentions only" : "solo @-menzioni", + "Off" : "Spento", + "General settings" : "Impostazioni generali", + "Default notification settings" : "Impostazioni di notifica predefinite", + "Default group notification" : "Notifica di gruppo predefinita", + "Default group notification for new groups" : "Notifica di gruppo predefinita per i nuovi gruppi", + "Integration into other apps" : "Integrazione in altre applicazioni", + "Allow conversations on files" : "Consenti conversazioni su file", + "Allow conversations on public shares for files" : "Consenti conversazioni su condivisioni pubbliche per i file", + "End-to-end encrypted calls" : "Chiamate crittografate end-to-end", + "Enable encryption" : "Abilita cifratura", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Le chiamate crittografate end-to-end con un bridge SIP configurato richiedono una versione più recente del backend ad alte prestazioni e del bridge SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Al momento i client mobili non supportano le chiamate crittografate end-to-end.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Facendo clic sul pulsante sopra le informazioni nel modulo sono inviate ai server di Struktur AG. Ulteriori informazioni sono disponibili su {linkstart}spreed.eu{linkend}.", + "Pending" : "In corso", + "Error" : "Errore", + "Blocked" : "Bloccati", + "Active" : "Attivo", + "Expired" : "Scaduto", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "La prova non può essere richiesta. Riprova più tardi.", + "The account could not be deleted. Please try again later." : "Non è stato possibile eliminare l'account. Riprova più tardi.", + "Hosted High-performance backend" : "Backend hosted ad alte prestazioni", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Il nostro partner Struktur AG fornisce un servizio in cui è possibile richiedere un server di segnalazione ospitato. Per questo è sufficiente compilare il modulo sottostante e Nextcloud lo richiederà. Una volta impostato il server, le credenziali saranno riempite automaticamente. Ciò sovrascriverà le impostazioni esistenti del server di segnalazione.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se il tuo account backend ad alte prestazioni include le funzionalità STUN e/o TURN, le impostazioni verranno aggiornate di conseguenza.", + "URL of this Nextcloud instance" : "URL di questa istanza Nextcloud", + "Full name of the user requesting the trial" : "Nome completo dell'utente che richiede la prova", + "Email of the user" : "Indirizzo di posta dell'utente", + "Language" : "Lingua", + "Country" : "Nazione", + "Request signaling server trial" : "Richiesta della prova del server di segnalazione", + "You can see the current status of your hosted signaling server in the following table." : "Puoi visualizzare lo stato attuale del server di segnalazione ospitato nella seguente tabella.", + "Status" : "Stato", + "Created at" : "Creato il", + "Expires at" : "Scade il", + "Limits" : "Limiti", + "STUN included" : "STUN incluso", + "Yes" : "Sì", + "No" : "No", + "TURN included" : "TURN incluso", + "Delete the signaling server account" : "Elimina l'account del server di segnalazione", + "_%n user_::_%n users_" : ["%n utente","%n utenti","%n utenti"], + "Installed version: {version}" : "Versione installata: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "È possibile installare Matterbridge per collegare Nextcloud Talk ad altri servizi. Per ulteriori dettagli, visitare la {linkstart1}pagina GitHub{linkend}. Il download e l'installazione dell'app potrebbero richiedere un po' di tempo. In caso di timeout, installarla manualmente dall'{linkstart2}App Store di Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Il file binario Matterbridge ha autorizzazioni errate. Assicurati che il file binario Matterbridge sia di proprietà dell'utente corretto e che possa essere eseguito. Si trova in “/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "Il binario di Matterbridge non è stato trovato o non può essere eseguito.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Puoi impostare il percorso del binario di Matterbridge anche manualmente tramite la configurazione. Controlla la {linkstart}documentazione di integrazione di Matterbridge{linkend} per ulteriori informazioni.", + "Downloading …" : "Scaricamento…", + "Install Talk Matterbridge" : "Installa Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Si è verificato un errore durante l'installazione dell'applicazione Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Si è verificato un errore durante l'installazione di Talk Matterbridge. Installalo manualmente.", + "Failed to execute Matterbridge binary." : "Esecuzione del binario di Matterbridge non riuscita.", + "Matterbridge integration" : "Integrazione con Matterbridge", + "Enable Matterbridge integration" : "Attiva l'integrazione con Matterbridge", + "Status: Checking connection" : "Stato: controllo della connessione", + "OK: Running version: {version}" : "OK: versione in esecuzione: {version}", + "Error: Server seems to be a Signaling server" : "Errore: il server sembra essere un server di segnalazione", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Errore: gli orari di sistema del server Nextcloud e del server di backend di registrazione non sono sincronizzati. Assicurati che entrambi i server siano collegati a un server di sincronizzazione oraria o sincronizza manualmente l'ora.", + "Recording backend URL" : "URL del backend di registrazione", + "Validate SSL certificate" : "Convalida certificato SSL", + "Delete this server" : "Elimina questo server", + "Test this server" : "Prova questo server", + "Disabled for all calls" : "Disabilitato per tutte le chiamate", + "Enabled for all calls" : "Abilitato per tutte le chiamate", + "Configurable on conversation level by moderators" : "Configurabile a livello di conversazione dai moderatori", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Le impostazioni PHP “upload_max_filesize” o “post_max_size” consentono solo di caricare file fino a {maxUpload}.", + "Recording backend settings saved" : "Impostazioni di registrazione backend salvate", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "I moderatori potranno abilitare il consenso a livello di conversazione. Il consenso alla registrazione sarà richiesto a ciascun partecipante prima di partecipare a ogni chiamata nell'ambito di tale conversazione.", + "The consent to be recorded will be required for each participant before joining every call." : "Il consenso per la registrazione sarà richiesto ad ogni partecipante prima di accedere a ciascuna chiamata.", + "The consent to be recorded is not required." : "Il consenso per la registrazione non è necessario.", + "Recording backend configuration is only possible with a High-performance backend." : "La configurazione del backend di registrazione è possibile solo con un backend ad alte prestazioni.", + "Add a new recording backend server" : "Aggiungi un nuovo server di backend per la registrazione", + "Shared secret" : "Segreto condiviso", + "Recording consent" : "Permesso di registrazione", + "Recording transcription" : "Registrazione della trascrizione", + "Automatically transcribe call recordings with a transcription provider" : "Trascrivi automaticamente le registrazioni delle chiamate con un fornitore di servizi di trascrizione", + "Automatically summarize call recordings with transcription and summary providers" : "Riassumi automaticamente le registrazioni delle chiamate con fornitori di trascrizioni e riassunti", + "SIP configuration saved!" : "Configurazione SIP salvata!", + "SIP configuration is only possible with a High-performance backend." : "La configurazione SIP è possibile solamente con un backend ad alte prestazione.", + "Enable SIP Dial-out option" : "Abilita l'opzione chiamata in uscita SIP ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Il server di segnalazione deve essere aggiornato per supportare la funzione di chiamata in uscita SIP.", + "Do not show SIP Dial-out caller number" : "Non mostrare il numero del chiamate delle chiamate in uscita SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Il numero anonimo dovrebbe apparire come “sconosciuto” o “numero nascosto” al destinatario della chiamata.", + "Dial-out number" : "Numero di uscita", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numero in formato E164 utilizzato come numero di chiamata di riserva per le chiamate in uscita", + "Dial-out prefix" : "Prefisso in uscita", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefisso al numero utente configurato per le chiamate in uscita (il valore predefinito è `+`)", + "Restrict SIP configuration" : "Limita configurazione SIP", + "Enable SIP configuration" : "Abilita configurazione SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo gli utenti dei seguenti gruppi possono abilitare SIP nelle conversazioni che moderano", + "Phone number (Country)" : "Numero di telefono (Nazione)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Queste informazioni sono inviate tramite email di invito e visualizzate nella barra laterale a tutti i partecipanti.", + "Nextcloud base URL" : "URL base di Nextcloud", + "Talk Backend URL" : "URL del backend di Talk", + "WebSocket URL" : "URL del WebSocket", + "Available features" : "Funzionalità disponibili", + "Error: Websocket connection failed" : "Errore: connessione Websocket non riuscita", + "Error code" : "Codice errore", + "Error message" : "Messaggio d'errore", + "Error: Websocket connection failed. Check browser console" : "Errore: connessione Websocket non riuscita. Controllare la console del browser.", + "High-performance backend URL" : "URL del motore ad alte prestazioni", + "Missing High-performance backend warning hidden" : "Avviso nascosto relativo al backend ad alte prestazioni mancante", + "High-performance backend settings saved" : "Impostazioni backend ad alte prestazioni salvate", + "Nextcloud Talk setup not complete" : "Configurazione di Nextcloud Talk non completata", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Si prega di notare che nelle chiamate con più di 2 partecipanti senza il backend ad alte prestazioni, i partecipanti potrebbero riscontrare problemi di connettività e causare un carico elevato sui dispositivi partecipanti.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installa il backend ad alte prestazioni per garantire che le chiamate con più partecipanti funzionino senza problemi.", + "Nextcloud portal" : "Portale di Nextcloud", + "Quick installation guide" : "Guida all'Installazione Rapida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Il backend ad alte prestazioni è necessario per le chiamate e le conversazioni con più partecipanti. Senza il backend, tutti i partecipanti devono caricare individualmente il proprio video per ciascuno degli altri partecipanti, il che molto probabilmente causerà problemi di connettività e un carico elevato sui dispositivi partecipanti.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Si consiglia vivamente di configurare una cache distribuita quando si utilizza Nextcloud Talk con un backend ad alte prestazioni.", + "Add High-performance backend server" : "Aggiungi server backend ad alte prestazioni", + "Warn about connectivity issues in calls with more than 2 participants" : "Avvisa in caso di problemi di connettività nelle chiamate con più di 2 partecipanti", + "STUN server URL" : "URL server STUN", + "The server address is invalid" : "L'indirizzo del server non è valido", + "STUN settings saved" : "Impostazioni STUN salvate", + "STUN servers" : "Server STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un server STUN è utilizzato per determinare l'indirizzo IP pubblico dei partecipanti dietro a un router.", + "Add a new STUN server" : "Aggiungi un nuovo server STUN", + "{schema} scheme must be used with a domain" : "Lo schema {schema} deve essere utilizzata con un dominio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidati ICE validi restituiti dal server TURN", + "Error: No working ICE candidates returned by the TURN server" : "OK: Candidati ICE non funzionanti restituiti dal server TURN", + "Testing whether the TURN server returns ICE candidates" : "Verifica se il server TURN restituisce candidati", + "TURN server schemes" : "Schemi del server TURN", + "TURN server URL" : "URL server TURN", + "TURN server secret" : "Segreto del server TURN", + "TURN server protocols" : "Protocolli server TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un server TURN viene utilizzato per inoltrare il traffico dai partecipanti dietro un firewall. Se i singoli partecipanti non possono connettersi ad altri, è molto probabile che sia richiesto un server TURN. Vedi {linkstart}questa documentazione{linkend} per le istruzioni di configurazione.", + "TURN settings saved" : "Impostazioni TURN salvate", + "TURN servers" : "Server TURN", + "Add a new TURN server" : "Aggiungi un nuovo server TURN", + "Failed" : "Non riuscito", + "OK" : "OK", + "Checking …" : "Controllo in corso…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallito: WebAssembly è disabilitato o non è supportato in questo browser. Abilita WebAssembly o utilizza un browser con supporto per eseguire il controllo.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallito: i file \".wasm\" e \".tflite\" non sono stati restituiti correttamente dal server Web. Si prega di controllare la sezione \"Requisiti di sistema\" nella documentazione di Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: i file \".wasm\" e \".tflite\" sono stati correttamente restituiti dal server web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Sembra che la configurazione PHP e Apache non sia compatibile. Si prega di notare che PHP può essere utilizzato solo con il modulo MPM_PREFORK e PHP-FPM può essere utilizzato solo con il modulo MPM_EVENT.", + "Web server setup checks" : "Verifiche della configurazione del server Web", + "Files required for virtual background can be loaded" : "È possibile caricare i file necessari per lo sfondo virtuale", + "Federated user" : "Utente federato", + "Assign participants to rooms" : "Assegna i partecipanti alle stanze", + "Configure breakout rooms" : "Configura le sessioni secondarie", + "Number of breakout rooms" : "Numero di sessioni secondarie", + "You can create from 1 to 20 breakout rooms." : "Puoi creare da 1 a 20 sessioni secondarie.", + "Assignment method" : "Metodo d'assegnazione", + "Automatically assign participants" : "Assegna automaticamente partecipanti", + "Manually assign participants" : "Assegna manualmente partecipanti", + "Allow participants to choose" : "Permetti ai partecipanti di scegliere", + "Create rooms" : "Crea stanze", + "Confirm" : "Conferma", + "Create breakout rooms" : "Crea sessioni secondarie", + "Reset" : "Ripristina", + "Delete breakout rooms" : "Elimina sessioni secondarie", + "Room {roomNumber}" : "Stanza {roomNumber}", + "Current breakout rooms and settings will be lost" : "Le attuali sessioni secondarie ed impostazioni saranno perse", + "Cancel" : "Annulla", + "Unassigned participants" : "Partecipanti non assegnati", + "Back" : "Indietro", + "Assign" : "Assegna", + "Add participant \"{user}\"" : "Aggiungi il partecipante \"{user}\"", + "Now" : "Ora", + "Invalid calendar selected" : "Selezione del calendario non valida", + "Invalid start time selected" : "Selezione del tempo di inizio non valida", + "Invalid end time selected" : "Selezione del tempo di fine non valida", + "Unknown error occurred" : "È avvenuto un errore sconosciuto", + "Sending no invitations" : "Nessun invio di inviti", + "{participant0} will receive an invitation" : "{participant0} riceverà un invito", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} riceveranno un invito", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e %n altro riceveranno un invito ","{participant0}, {participant1} e %n altri riceveranno un invito ","{participant0}, {participant1} e %n altri riceveranno un invito "], + "Invite {user}" : "Invita {user}", + "Invite all users and emails in this conversation" : "Invita tutti gli utenti e email in questa conversazione", + "Meeting created" : "Meeting creato", + "Upcoming meetings" : "Prossimi meetings", + "Loading …" : "Caricamento…", + "No upcoming meetings" : "Nessun prossimo meeting ", + "Schedule a meeting" : "Programma un meeting", + "Meeting title" : "Titolo del Meeting", + "From" : "Da", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Partecipanti", + "No other participants to send invitations to." : "Nessun altro partecipante a cui mandare un invito.", + "Add attendees" : "Aggiungi partecipanti", + "Save" : "Salva", + "Search participants" : "Cerca partecipanti", + "No results" : "Nessun risultato", + "Done" : "Completato", + "Disable live transcription" : "Disattiva trascrizione in tempo reale", + "Translated language" : "Lingua tradotta", + "Translated language: {languageName}" : "Lingua tradotta: {languageName}", + "Raise hand" : "Alza la mano", + "Raise hand (R)" : "Alza la mano (R)", + "Lower hand" : "Abbassa la mano", + "Lower hand (R)" : "Abbassa la mano (R)", + "Exit full screen (F)" : "Esci dalla modalità a schermo intero (F)", + "Full screen (F)" : "Schermo intero (F)", + "Speaker view" : "Visualizzazione oratore", + "Grid view" : "Vista Griglia", + "Error when trying to load the available live transcription languages" : "Errore durante il caricamento dei linguaggi disponibili per la trascrizione in tempo reale", + "Failed to enable live transcription" : "Impossibile abilitare la trascrizione in tempo reale", + "Recording consent is required" : "È necessario il consenso alla registrazione", + "This conversation is read-only" : "Questa conversazione è in sola lettura", + "Conversation not found or not joined" : "Conversazione non trovata o non avviata", + "Lobby is still active and you're not a moderator" : "La lobby è ancora attiva e tu non sei un moderatore", + "Connection failed" : "Connessione fallita", + "Reload" : "Ricarica", + "{nickName} raised their hand." : "{nickName} ha alzato la mano.", + "A participant raised their hand." : "Un partecipante ha alzato la mano.", + "Collapse stripe" : "Contrai striscia", + "Expand stripe" : "Espandi striscia", + "Previous page of videos" : "Pagina di video precedente", + "Next page of videos" : "Pagina di video successiva", + "Connecting …" : "Connessione in corso…", + "Calling …" : "Sto chiamando …", + "Waiting for {user} to join the call" : "In attesa che {user} si unisca alla chiamata", + "Waiting for others to join the call …" : "In attesa che altri si uniscano alla chiamata...", + "You can invite others in the participant tab of the sidebar" : "Puoi invitare altri nella scheda dei partecipanti della barra laterale", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puoi invitare altri nella scheda dei partecipanti della barra laterale o condividere questo collegamento per invitarli!", + "Share this link to invite others!" : "Condividi questo collegamento per invitare altri!", + "Copy link" : "Copia collegamento", + "You are not allowed to enable audio" : "Non sei autorizzato ad abilitare l'audio", + "No audio. Click to select device" : "Nessun audio. Premi per selezionare il dispositivo", + "Mute audio" : "Silenzia audio", + "Mute audio (M)" : "Silenzia audio (M)", + "Unmute audio" : "Rimuovi silenzio audio", + "Unmute audio (M)" : "Rimuovi silenzio audio (M)", + "None" : "Nessuno", + "Select a microphone" : "Seleziona un microfono", + "Select a speaker" : "Seleziona un'uscita", + "Check devices" : "Controlla dispositivi", + "Access to camera was denied" : "L'accesso alla fotocamera è stato negato", + "Error while accessing camera: It is likely in use by another program" : "Errore durante l'accesso alla fotocamera: È probabile che sia utilizzata da un altro programma", + "Error while accessing camera" : "Errore durante l'accesso alla fotocamera", + "You have been muted by a moderator" : "Sei stato silenziato da un moderatore", + "Hide presenter video" : "Nascondi video del presentatore", + "You are not allowed to enable video" : "Non sei autorizzato ad abilitare il video", + "No video. Click to select device" : "Nessun video. Premi per selezionare il dispositivo", + "Disable video" : "Disabilita video", + "Disable video (V)" : "Disabilita video (V)", + "Enable video" : "Abilita video", + "Enable video (V)" : "Abilita video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Attiva video - La tua connessione sarà brevemente interrotta mentre si attiva il video per la prima volta", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Abilita video (V) - La tua connessione sarà interrotta brevemente quando abiliti il video per la prima volta", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Abilita video. La tua connessione sarà interrotta brevemente quando abiliti il video per la prima volta", + "Select a video device" : "Seleziona un dispositivo video", + "Show presenter" : "Mostra presentatore", + "You" : "Tu", + "Mute" : "Silenzia", + "Muted" : "Mutato", + "Show screen" : "Mostra schermo", + "Stop following" : "Smetti di seguire", + "Connection could not be established …" : "Impossibile stabilire la connessione...", + "Connection was lost and could not be re-established …" : "La connessione è stata persa e non è stato possibile ristabilirla...", + "Connection could not be established. Trying again …" : "Impossibile stabilire la connessione. Riprova...", + "Connection lost. Trying to reconnect …" : "Connessione persa. Tentativo di riconnessione...", + "Connection problems …" : "Problemi di connessione...", + "Collapse" : "Contrai", + "Expand" : "Espandi", + "You need to be logged in to upload files" : "Devi aver eseguito l'accesso per caricare file", + "Drop your files to upload" : "Rilascia i tuoi file per caricarli", + "Conversation messages" : "Messaggi della conversazione", + "Scroll to bottom" : "Scorri in fondo", + "Post message" : "Pubblica messaggio", + "Federated conversation" : "Conversazione federata", + "Public conversation" : "Conversazione pubblica", + "Favorite" : "Preferito", + "Banned users" : "Utenti banditi", + "Manage the list of banned users in this conversation." : "Gestisci la lista degli utenti banditi in questa conversazione", + "Manage bans" : "Gestisci ban", + "No banned users" : "Nessun utente bandito", + "Banned by:" : "Bandito da:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Nascondi dettagli", + "Show details" : "Mostra dettagli", + "Unban" : "Rimuovi bando", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Puoi cambiare il titolo e la descrizione nel {linkstart}Calendario ↗{linkend}.", + "Error while updating conversation name" : "Errore durante l'aggiornamento del nome della conversazione", + "Error while updating conversation description" : "Errore durante l'aggiornamento della descrizione della conversazione", + "Enter a name for this conversation" : "Inserisci un nome per la conversazione", + "Edit conversation name" : "Modifica nome conversazione", + "Edit conversation description" : "Modifica la descrizione della conversazione", + "Enter a description for this conversation" : "Inserisci una descrizione per questa conversazione", + "Picture" : "Immagine", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "I seguenti bot possono essere abilitati in questa conversazione. Contatta il tuo amministratore per installare altri bot su questo server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nessun bot è installato su questo server. Contatta il tuo amministratore per installare bot su questo server.", + "Disable" : "Disabilita", + "Enable" : "Abilita", + "Breakout rooms" : "Sessioni secondarie", + "Manage breakout rooms" : "Gestisci sessioni secondarie", + "Set up breakout rooms for this conversation" : "Imposta sessioni secondarie per questa conversazione", + "Please select a valid PNG or JPG file" : "Seleziona un file PNG o JPG valido", + "Choose your conversation picture" : "Scegli l'icona della conversazione", + "Choose" : "Scegli", + "Error setting conversation picture" : "Errore nell'impostazione dell'icona della conversazione", + "Could not set the conversation picture: {error}" : "Impossibile impostare icona conversazione: {error}", + "Error cropping conversation picture" : "Abilita ritaglio dell'icona della conversazione", + "Error removing conversation picture" : "Errore nella rimozione dell'icona della conversazione", + "Set emoji as conversation picture" : "Imposta emoji come icona della conversazione", + "Set background color for conversation picture" : "Imposta colore di sfondo per l'icona della conversazione", + "Upload conversation picture" : "Carica immagine della conversazione", + "Choose conversation picture from files" : "Scegli icona della conversazione dai file", + "Remove conversation picture" : "Rimuove icona della conversazione", + "The file must be a PNG or JPG" : "Il file deve essere una PNG o JPG", + "Set picture" : "Imposta icona", + "Default permissions modified for {conversationName}" : "Permessi predefiniti modificati per {conversationName}", + "Could not modify default permissions for {conversationName}" : "Impossibile modificare i permessi predefiniti per {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Modifica i permessi predefiniti per i partecipanti di questa conversazione. Queste impostazioni non hanno effetto sui moderatori.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Ogni volta che i permessi vengono modificati in questa sezione i permessi impostati precedentemente a singoli partecipanti vanno perduti.", + "All permissions" : "Tutti permessi", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "I partecipanti hanno le autorizzazioni per avviare una chiamata, partecipare a una chiamata, abilitare audio e video e condividere lo schermo.", + "Restricted" : "Limitato", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "I partecipanti possono partecipare alle chiamate, ma non possono abilitare né audio né video né condividere lo schermo finché un moderatore non concede loro manualmente i permessi.", + "Advanced permissions" : "Permessi avanzati", + "Edit permissions" : "Modifica permessi", + "Conversation settings" : "Impostazioni conversazione", + "Basic Info" : "Informazioni di base", + "Personal" : "Personale", + "Moderation" : "Moderazione", + "Setup overview" : "Panoramica della configurazione", + "Live transcription" : "Trascrizione in tempo reale", + "Enable live transcription" : "Avvia trascrizione in tempo reale", + "Breakout Rooms" : "Sessioni Secondarie", + "Matterbridge" : "Matterbridge", + "Bots" : "Bot", + "Danger zone" : "Zona pericolosa", + "Archive conversation" : "Archivia conversazione", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Le conversazioni archiviate sono nascoste dall'elenco delle conversazioni per impostazione predefinita. Tuttavia, saranno comunque visibili quando si cerca il nome della conversazione o si accede a un elenco di conversazioni archiviate.", + "Do you really want to leave \"{displayName}\"?" : "Vuoi davvero uscire da “{displayName}”?", + "You can archive this conversation instead." : "Puoi invece archiviare questa conversazione.", + "Leave conversation" : "Lascia la conversazione", + "You need to promote a new moderator before you can leave the conversation" : "Devi promuovere un nuovo moderatore prima di poter lasciare la conversazione.", + "Delete conversation" : "Elimina conversazione", + "Do you really want to delete \"{displayName}\"?" : "Vuoi davvero eliminare \"{displayName}\"?", + "Error while deleting conversation" : "Errore durante l'eliminazione della conversazione", + "Delete all chat messages" : "Elimina tutti i messaggi di chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vuoi davvero eliminare tutti i messaggi in \"{displayName}\"?", + "Error while clearing chat history" : "Errore durante la cancellazione della cronologia chat", + "Be careful, these actions cannot be undone." : "Fai attenzione, queste azioni non possono essere annullate.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una volta terminata una conversazione, per rientrare in una conversazione chiusa, è necessario un invito. È possibile riprendere una conversazione aperta in qualsiasi momento.", + "Permanently delete this conversation." : "Elimina definitivamente questa conversazione.", + "Delete chat messages" : "Elimina i messaggi di chat", + "Permanently delete all the messages in this conversation." : "Elimina definitivamente tutti i messaggi di questa conversazione.", + "_%n hour_::_%n hours_" : ["%n ora","%n ore","%n ore"], + "_%n day_::_%n days_" : ["%n giorno","%n giorni","%n giorni"], + "_%n week_::_%n weeks_" : ["%n settimana","%n settimane","%n settimane"], + "Custom expiration time" : "Ora di scadenza personalizzata", + "Message expiration disabled" : "Scadenza dei messaggi disabilitata", + "Message expiration set: {duration}" : "Scadenza dei messaggi: {duration}", + "Error when trying to set message expiration" : "Errore durante l'impostazione della scadenza del messaggio", + "Message expiration" : "Imposta la scadenza dei messaggi", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "I messaggi di chat possono scadere dopo un certo periodo di tempo. Nota: I file condivisi in chat non saranno eliminati per il proprietario, ma non saranno più condivisi nella conversazione.", + "Set message expiration" : "Imposta scadenza dei messaggi", + "Current message expiration" : "Attuale scadenza dei messaggi", + "Password copied to clipboard" : "Password copiata negli appunti", + "Password could not be copied" : "La password non può essere copiata", + "Guest access" : "Accesso ospiti", + "Breakout rooms are not allowed in public conversations." : "Le sessioni secondarie non sono ammesse nelle conversazioni pubbliche.", + "Allow guests to join this conversation via link" : "Permetti agli ospiti di unirsi alla conversazione via collegamento", + "Password protection" : "Protezione con password", + "This conversation is password-protected. Guests need password to join" : "Questa conversazione è protetta da password. Gli ospiti devono disporre della password per partecipare.", + "Password protection is needed for public conversations" : "È necessaria la protezione con password per le conversazioni pubbliche", + "Set a password" : "Imposta una password", + "Change password" : "Modifica password", + "Enter new password" : "Inserisci nuova password", + "Save password" : "Salva la password", + "Copy password" : "Copia password", + "Guests are allowed to join this conversation via link" : "Gli ospiti possono partecipare alla conversazione tramite collegamento.", + "Guests are not allowed to join this conversation" : "Gli ospiti non possono partecipare a questa conversazione.", + "Resend invitations" : "Nuovo invio degli inviti", + "This conversation is open to both registered users and users created with the Guests app" : "Questa conversazione è aperta sia agli utenti registrati che agli utenti creati con l'app Ospiti.", + "This conversation is open to registered users" : "Questa conversazione è aperta agli utenti registrati", + "This conversation is limited to the current participants" : "Questa conversazione è limitata ai partecipanti attuali", + "You opened the conversation to both registered users and users created with the Guests app" : "Hai aperto la conversazione sia agli utenti registrati che agli utenti creati con l'applicazione Ospiti.", + "Error occurred when opening or limiting the conversation" : "Si è verificato un errore durante l'apertura o la limitazione della conversazione", + "Open conversation to registered users, showing it in search results" : "Apri la conversazione agli utenti registrati, mostrandoli tra i risultati di ricerca", + "Also open to users created with the Guests app" : "Aperto anche agli utenti creati con l'app Ospiti", + "Open conversation" : "Apri conversazione", + "Set language spoken in calls" : "Imposta la lingua parlata nelle chiamate", + "Languages could not be loaded" : "La lingua non può essere caricata", + "Loading languages …" : "Caricamento lingue …", + "Invalid language" : "Lingua non valida", + "Default language (English)" : "Lingua predefinita (Inglese)", + "Default live transcription language set" : "Lingua predefinita per la trascrizione in tempo reale", + "Live transcription language set: {languageName}" : "Lingua per la trascrizione in tempo reale: {languageName}", + "Error when trying to set live transcription language" : "Errore durante il tentativo di impostare la lingua della trascrizione in tempo reale", + "Start time: {date}" : "Ora di inizio: {date} ", + "Start time has been updated" : "L'orario di inizio è stato aggiornato", + "Error occurred while updating start time" : "Si è verificato un errore durante l'aggiornamento dell'orario di inizio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Abilitando la lobby, i non moderatori verranno rimossi dalla chiamata in corso.", + "Enable lobby, restricting the conversation to moderators" : "Abilita la lobby, limitando la conversazione ai moderatori", + "Meeting start time" : "Orario di inizio della riunione", + "Start time (optional)" : "Ora iniziale (facoltativa)", + "Import email participants" : "Importa email dei partecipanti", + "You can import a list of email participants from a CSV file." : "È possibile importare un elenco di e-mail dei partecipanti da un file CSV.", + "Poll drafts" : "Bozze dei sondaggi", + "Browse poll drafts" : "Sfoglia bozze dei sondaggi", + "Error occurred when locking the conversation" : "Si è verificato un errore durante il blocco della conversazione", + "Error occurred when unlocking the conversation" : "Si è verificato un errore durante lo sblocco della conversazione", + "Lock conversation" : "Blocca conversazione", + "This will also terminate the ongoing call." : "Ciò terminerà la chiamata in corso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blocca la conversazione per evitare che qualcuno pubblichi messaggi o inizi una call.", + "Edit" : "Modifica", + "More information" : "Altre informazioni", + "Delete" : "Elimina", + "Add new bridged channel to current conversation" : "Abilita nuovo canale collegato alla conversazione attuale", + "unknown state" : "stato sconosciuto", + "running" : "in esecuzione", + "not running, check Matterbridge log" : "non in esecuzione, controlla il log di Matterbridge", + "not running" : "non in esecuzione", + "Bridge saved" : "Collegamento salvato", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puoi collegare canali da vari sistemi di messaggistica istantanea con Matterbridge.", + "More info on Matterbridge" : "Ulteriori informazioni su Matterbridge", + "Messaging systems" : "Sistemi di messaggistica", + "Enable bridge" : "Abilita collegamento", + "Show Matterbridge log" : "Mostra il log di Matterbridge", + "Log content" : "Contenuto dei log", + "Only moderators are allowed to mention @all" : "Solo i moderatori possono menzionare @all", + "All participants are allowed to mention @all" : "Tutti i partecipanti possono menzionare @all", + "Participants are now allowed to mention @all." : "I partecipanti possono ora menzionare @all.", + "Mentioning @all has been limited to moderators." : "La menzione @all è stata limitata ai moderatori.", + "Allow participants to mention @all" : "Consenti ai partecipanti di menzionare @all", + "Mention permissions" : "Permessi di menzione", + "Notifications" : "Notifiche", + "Notify about calls in this conversation" : "Notifica delle chiamate in questa conversazione", + "Important conversation" : "Conversazione importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Lo stato utente “Non disturbare” viene ignorato per le conversazioni importanti.", + "Sensitive conversation" : "Conversazione delicata", + "Message preview will be disabled in conversation list and notifications" : "L'anteprima dei messaggi sarà disabilitata nell'elenco delle conversazioni e nelle notifiche.", + "Recording consent is required for calls in this conversation" : "Per le chiamate incluse in questa conversazione è necessario il consenso alla registrazione.", + "Recording consent is not required for calls in this conversation" : "Non è necessario il consenso alla registrazione per le chiamate in questa conversazione.", + "Recording consent requirement was updated" : "È stato aggiornato il requisito relativo al consenso alla registrazione.", + "Error occurred while updating recording consent" : "Si è verificato un errore durante l'aggiornamento del consenso alla registrazione", + "Recording Consent" : "Consenso registrazione", + "Recording consent cannot be changed once a call or breakout session has started." : "Il consenso alla registrazione non può essere modificato una volta avviata una chiamata o una sessione secondaria.", + "Require recording consent before joining call in this conversation" : "Richiedi il consenso alla registrazione prima di partecipare alla chiamata in questa conversazione", + "Recording consent is required for all calls" : "Il permesso di registrazione è richiesto per tutte le call", + "SIP dial-in is now possible without PIN requirement" : "Ora è possibile effettuare la connessione SIP senza PIN", + "SIP dial-in is now enabled" : "L'accesso SIP è ora abilitato", + "SIP dial-in is now disabled" : "L'accesso SIP è ora disabilitato", + "Error occurred when enabling SIP dial-in" : "Si è verificato un errore durante l'abilitazione dell'accesso SIP", + "Error occurred when disabling SIP dial-in" : "Si è verificato un errore durante la disabilitazione dell'accesso SIP", + "Phone and SIP dial-in" : "Telefono e connessione SIP", + "Enable phone and SIP dial-in" : "Abilita telefono e connessione SIP", + "Allow to dial-in without a PIN" : "Consenti l'accesso senza PIN", + "Ongoing" : "In corso", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persona ha accettato","%n persone hanno accettato","%n persone hanno accettato"], + "_%n person declined_::_%n people declined_" : ["%n persona ha rifiutato","%n persone hanno rifiutato","%n persone hanno rifiutato"], + "_and %n other attachment_::_and %n other attachments_" : ["e %n altro allegato","e altri %n allegati","e altri %n allegati"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Mostra allegati", + "Join" : "Partecipa", + "View conversation" : "Mostra conversazione", + "View event on Calendar" : "Mostra eventi nel Calendario", + "Error while creating the conversation" : "Errore durante la creazione della conversazione", + "Hello, {displayName}" : "Ciao, {displayName}", + "Start meeting now" : "Avvia meeting ora", + "Give your meeting a title" : "Dai un titolo al tuo meeting", + "Create and copy link" : "Crea e copia collegamento", + "Create a new conversation" : "Crea una nuova conversazione", + "Join open conversations" : "Entra nelle conversazioni aperte", + "Call a phone number" : "Chiama un numero di telefono", + "Scroll backward" : "Scorri indietro", + "Scroll forward" : "Scorri avanti", + "Schedule meetings" : "Programma meeting", + "You don't have any upcoming meetings" : "Non hai nessun prossimo meeting", + "Open calendar" : "Apri calendario", + "Unread mentions" : "Menzioni non lette", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "I messaggi in cui sei stato menzionato verranno visualizzati qui. Puoi menzionare le persone digitando @ seguito dal loro nome.", + "Upcoming reminders" : "Prossimi promemoria", + "Message reminders" : "Promemoria messaggi", + "Set a reminder on a message to be notified" : "Imposta un promemoria su un messaggio per ricevere una notifica", + "Start a group conversation" : "Avvia una conversazione di gruppo", + "Create conversation" : "Crea conversazione", + "Enter your name" : "Digita il tuo nome", + "Submit name and join" : "Inserisci un nome ed entra", + "Do you already have an account?" : "Hai già un account?", + "Log in" : "Login", + "Error while verifying uploaded file" : "Errore durante la verifica del file caricato", + "Uploaded file is verified" : "Il file caricato è verificato", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Il formato dei contenuti è CSV (valori separati da virgola):
- La riga di intestazione è obbligatoria e deve corrispondere a \"nome\", \"e-mail\" o semplicemente \"e-mail\"
- Una voce per riga (ad esempio \"John Doe\", \"john@example.tld\")", + "Participants added successfully" : "Partecipanti aggiunti con successo", + "Error while adding participants" : "Errore durante l'aggiunta dei partecipanti", + "Import a file" : "Importa un file", + "Browse" : "Sfoglia", + "Verifying uploaded file …" : "Verifica del file caricato …", + "This might take a moment" : "Potrebbe volerci un attimo.", + "Send invitations" : "Invia inviti", + "_%n invalid email_::_%n invalid emails_" : ["%n email non valida","%n email non valide","%n email non valide"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail è già stata importata o è duplicata","%n e-mail sono già state importate o sono duplicate","%n e-mail sono già state importate o sono duplicate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invito può essere inviato","%n inviti possono essere inviati","%n inviti possono essere inviati"], + "An error occurred while calling a phone number" : "Si è verificato un errore durante la chiamata a un numero di telefono", + "Phone number could not be called: {error}" : "Impossibile chiamare il numero di telefono: {error}", + "Phone number could not be called" : "Il numero di telefono non può essere chiamato", + "Search participants or phone numbers" : "Cerca partecipanti o numeri di telefono", + "Creating the conversation …" : "Sto creando la conversazione …", + "Mark as read" : "Marca come letto", + "Mark as unread" : "Marca come non letto", + "Remove from favorites" : "Rimuovi dai preferiti", + "Add to favorites" : "Aggiungi ai preferiti", + "Unarchive conversation" : "Recupera la conversazione dall'archivio", + "Ignore \"Do not disturb\"" : "Ignora \"Non disturbare\"", + "You need to promote a new moderator before you can leave the conversation." : "Devi promuovere un nuovo moderatore prima di poter abbandonare la conversazione. ", + "Conversation actions" : "Azioni delle conversazioni", + "Notify about calls" : "Notifica riguardo chiamate", + "Hide message text" : "Nascondi messaggio di testo", + "Pending invitations" : "Inviti in attesa", + "From {user} at {remoteServer}" : "Da {user} su {remoteServer}", + "Decline invitation" : "Rifiuta invito", + "Accept invitation" : "Accetta invito", + "No pending invitations" : "Nessun invito in attesa", + "Home" : "Home", + "Unread" : "Da leggere", + "Mentions" : "Citazioni", + "Meetings" : "Meetings", + "Alphabetically" : "Ordine alfabetico", + "No followed threads" : "Nessun argomento seguito", + "No matches found" : "Nessuna corrispondenza trovata", + "No conversations found" : "Nessuna conversazione trovata", + "You have no archived conversations." : "Non hai conversazioni archiviate", + "Subscribe to an existing thread or start your own." : "Iscriviti a un argomento esistente o avviane uno nuovo.", + "You have no unread mentions." : "Non hai menzioni non lette.", + "You have no unread messages." : "Non hai messaggi non letti.", + "An error occurred while performing the search" : "Si è verificato un errore durante l'esecuzione della ricerca", + "Conversation list" : "Elenco delle conversazioni", + "Filter conversations by" : "Filtra conversazioni per", + "Unread messages" : "Messaggi non letti", + "Meeting conversations" : "Conversazioni dei meeting", + "Clear filters" : "Pulisci filtri", + "New personal note" : "Nuova nota personale", + "Back to conversations" : "Torna alle conversazioni", + "Archived conversations" : "Conversazioni archiviate", + "Threads" : "Argomenti", + "Clear filter" : "Pulisci il filtro", + "Show more threads" : "Mostra altri argomenti", + "App settings" : "Impostazioni applicazione", + "Users" : "Utenti", + "Groups" : "Gruppi", + "Teams" : "Team", + "Federated users" : "Utenti federati", + "New private conversation" : "Nuova conversazione privata", + "Other sources" : "Altre fonti", + "Open conversations" : "Apri conversazioni", + "No search results" : "Nessun risultato di ricerca", + "Users, groups and teams" : "Utenti, gruppi e teams", + "Users and groups" : "Utenti e gruppi", + "Users and teams" : "Utenti e teams", + "Groups and teams" : "Gruppi e teams", + "New group conversation" : "Nuova conversazione di gruppo", + "The meeting will start soon" : "La riunione inizierà presto", + "This meeting is scheduled for {startTime}" : "Questa riunione è programmata per {startTime}", + "You are currently waiting in the lobby" : "Stai attualmente aspettando nell'ingresso", + "Select microphone" : "Seleziona microfono", + "No microphone available" : "Nessun microfono disponibile", + "Select speaker" : "Seleziona altoparlante", + "No speaker available" : "Nessun altoparlante disponibile", + "Select camera" : "Seleziona fotocamera", + "No camera available" : "Nessuna fotocamera disponibile", + "Select a device" : "Seleziona un dispositivo", + "Playing …" : "Riproduco …", + "Test speakers" : "Testa altoparlante", + "Test" : "Prova", + "Devices" : "Dispositivi", + "Backgrounds" : "Sfondi", + "No audio" : "Nessun audio", + "No camera" : "Nessuna fotocamera", + "Display video as you will see it (mirrored)" : "Visualizza il video così come lo vedrai (riflesso)", + "Display video as others will see it" : "Visualizza il video così come lo vedranno gli altri", + "Calls are not supported in your browser" : "Le chiamate non sono supportate dal tuo browser", + "Access to microphone is only possible with HTTPS" : "L'accesso a microfono è possibile solo con HTTPS", + "Access to microphone was denied" : "L'accesso al microfono è stato negato", + "Error while accessing microphone" : "Errore durante l'accesso al microfono", + "Access to camera is only possible with HTTPS" : "L'accesso alla fotocamera è possibile solo con HTTPS", + "The call is being recorded." : "La chiamata viene registrata.", + "The call might be recorded." : "La chiamata potrebbe essere registrata.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La registrazione potrebbe includere la tua voce, il video dalla telecamera e la condivisione dello schermo. Prima di partecipare alla chiamata è necessario il tuo consenso.", + "Give consent to the recording of this call" : "Acconsentire alla registrazione di questa chiamata", + "Show more info" : "Mostra altre info", + "Audio is not available" : "Audio non disponibile", + "Video is not available" : "Video non disponibile", + "Start recording immediately with the call" : "Avvia subito la registrazione della chiamata", + "Notify all participants about this call" : "Notifica tutti i partecipanti di questa chiamata", + "Apply settings" : "Applica impostazioni", + "Select virtual office background" : "Seleziona sfondo virtuale dell'ufficio", + "Select virtual home background" : "Seleziona sfondo virtuale della casa", + "Select virtual abstract background" : "Seleziona sfondo virtuale astratto", + "Select virtual beach background" : "Seleziona sfondo virtuale della spiaggia", + "Select virtual park background" : "Seleziona sfondo virtuale del parco", + "Select virtual theater background" : "Seleziona sfondo virtuale del teatro", + "Select virtual library background" : "Seleziona sfondo virtuale della libreria", + "Select virtual space station background" : "Seleziona sfondo virtuale della stazione spaziale", + "Error while uploading the file" : "Errore durante il caricamento del file", + "Select a file" : "Seleziona un file", + "Invalid path selected" : "Percorso selezionato non valido", + "Select virtual background from file {fileName}" : "Seleziona sfondo virtuale dal file {fileName}", + "Blur" : "Sfocatura", + "Upload" : "Carica", + "Files" : "File", + "(editing)" : "(modificando)", + "(edited)" : "(modificato)", + "The message has expired or has been deleted" : "Il messaggio è scaduto o è stato cancellato.", + "Cancel quote" : "Annulla citazione", + "24 hours" : "24 ore", + "7 days" : "7 giorni", + "30 days" : "30 giorni", + "Clear reminder – {timeLocale}" : "Cancella promemoria – {timeLocale}", + "Edited by {actor}" : "Modificato da {actor}", + "Message text copied to clipboard" : "Testo del messaggio copiato negli appunti", + "Message text could not be copied" : "Impossibile copiare il testo del messaggio", + "Message forwarded to \"Note to self\"" : "Messaggio inoltrato a \"Nota a me stesso\"", + "Error while forwarding message to \"Note to self\"" : "Errore durante l'inoltro del messaggio a \"Nota a me stesso\"", + "A reminder was successfully removed" : "Un promemoria è stato rimosso con successo.", + "Error occurred when removing a reminder" : "Si è verificato un errore durante la rimozione di un promemoria", + "A reminder was successfully set at {datetime}" : "Il promemoria è stato impostato con successo alle {datetime}", + "Error occurred when creating a reminder" : "Si è verificato un errore durante la creazione di un promemoria", + "Add a reaction to this message" : "Aggiungi una reazione a questo messaggio", + "Reply" : "Rispondi", + "More actions" : "Altre azioni", + "Set reminder" : "Imposta promemoria", + "Reply privately" : "Rispondi privatamente", + "Edit message" : "Modifica messaggio", + "Copy message" : "Copia messaggio", + "Copy message link" : "Copia collegamento del messaggio", + "Go to file" : "Vai al file", + "Download file" : "Scarica file", + "Go to thread" : "Vai all'argomento", + "Edit thread details" : "Modifica dettagli argomento", + "Forward message" : "Messaggio inoltrato", + "Translate" : "Traduci", + "Set custom reminder" : "Imposta promemoria personalizzato", + "Close reactions menu" : "Chiudi menu reazioni", + "React with {emoji}" : "Reagisci con {emoji}", + "React with another emoji" : "Reagisci con un'altra emoji", + "Choose a conversation to forward the selected message." : "Seleziona una conversazione per inoltrare il messaggio selezionato.", + "Error while forwarding message" : "Errore durante l'inoltro del messaggio", + "The message has been forwarded to {selectedConversationName}" : "Il messaggio è stato inoltrato a {selectedConversationName}", + "Dismiss" : "Annulla", + "Go to conversation" : "Vai alla conversazione", + "Detect language" : "Rileva lingua", + "The message could not be translated" : "Questo messaggio non può essere tradotto", + "Translation copied to clipboard" : "Traduzione copiata negli appunti", + "Translation could not be copied" : "Impossibile copiare la traduzione", + "Translate message" : "Traduci messaggio", + "Source language to translate from" : "Lingua di partenza da cui tradurre", + "Translate from" : "Traduci da", + "Target language to translate into" : "Lingua di destinazione in cui tradurre", + "Translate to" : "Traduci in", + "Translating" : "Sto traducendo", + "Copy translated text" : "Copia testo tradotto", + "Send now" : "Spedisci ora", + "Message read by everyone who shares their reading status" : "Messaggio letto da tutti coloro che condividono il proprio stato di lettura", + "Message sent" : "Messaggio inviato", + "Sent without notification" : "Invia senza notificare", + "Deleting message" : "Eliminazione del messaggio", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Messaggio eliminato correttamente, ma è configurato un bot o Matterbridge e il messaggio potrebbe essere già stato distribuito ad altri servizi.", + "Message deleted successfully" : "Messaggio eliminato correttamente", + "Message could not be deleted because it is too old" : "Impossibile eliminare il messaggio perché è troppo datato", + "Only normal chat messages can be deleted" : "È possibile eliminare solo i normali messaggi di chat", + "An error occurred while deleting the message" : "Si è verificato un errore durante l'eliminazione del messaggio", + "Your browser does not support playing audio files" : "Il tuo browser non supporta la riproduzione di file audio", + "Contact" : "Contatto", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Scheda di Deck", + "Remove {fileName}" : "Rimuovi {fileName}", + "Open this location in OpenStreetMap" : "Apri questa posizione in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n risposta","%n risposte","%n risposte"], + "Sending message" : "Invio del messaggio", + "Failed to send the message. Click to try again" : "Invio del messaggio non riuscito. Fare clic per riprovare", + "Not enough free space to upload file" : "Spazio libero insufficiente per caricare il file", + "You cannot send messages to this conversation at the moment" : "Non puoi inviare messaggi in questa conversazione al momento", + "Could not update the message" : "Impossibile aggiornare il messaggio", + "You voted" : "Hai votato", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Bozza del sondaggio • %n opzione","Bozza del sondaggio • %n opzioni","Bozza del sondaggio • %n opzioni"], + "_%n vote_::_%n votes_" : ["%n voto","%n voti","%n voti"], + "Edit poll draft" : "Modifica bozza del sondaggio", + "Delete poll draft" : "Elimina bozza del sondaggio", + "Open poll" : "Apri sondaggio", + "See results" : "Vedi risultati", + "Reactions" : "Reazioni", + "No permission to post reactions in this conversation" : "Non è consentito pubblicare reazioni in questa conversazione.", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e %n altro partecipante","e altri %n partecipanti","e altri %n partecipanti"], + "Show all reactions" : "Mostra tutte le reazioni", + "Add more reactions" : "Aggiungi più reazioni", + "Show or collapse system messages" : "Mostra o nascondi i messaggi di sistema", + "No messages" : "Nessun messaggio", + "All messages have expired or have been deleted." : "Tutti i messaggi sono scaduti o sono stati cancellati.", + "Unpin" : "Rimuovi", + "Cancel search" : "Annulla ricerca", + "Add a phone number" : "Aggiungi numero di telefono", + "Error: A password is required to create the conversation." : "Errore: per creare la conversazione è necessaria una password.", + "All set, the conversation \"{conversationName}\" was created." : "Tutto pronto, la conversazione \"{conversationName}\" è stata creata.", + "Create a new group conversation" : "Crea una nuova conversazione di gruppo", + "Add participants" : "Aggiungi partecipanti", + "Maximum length exceeded ({maxlength} characters)" : "Lunghezza massima superata ({maxlength} caratteri)", + "Conversation visibility" : "Visibilità della conversazione", + "Allow guests to join via link" : "Consenti agli ospiti di partecipare tramite collegamento", + "Enter password" : "Digita la password", + "This conversation has been locked" : "Questa conversazione è stata bloccata", + "No permission to post messages in this conversation" : "Nessun permesso per pubblicare messaggi in questa conversazione", + "Joining conversation …" : "Partecipazione alla conversazione...", + "Write a message without notification" : "Scrivi un messaggio senza notifica", + "Create a thread silently" : "Crea un argomento silenzioso", + "Create a thread" : "Crea un argomento", + "Send message silently" : "Invia messaggio direttamente", + "Send message" : "Invia messaggio", + "Send without notification" : "Invia messaggio senza notifica", + "The participant will not be notified about new messages" : "Il partecipante non riceverà notifiche relative ai nuovi messaggi.", + "Participants will not be notified about new messages" : "I partecipanti non saranno avvisati dei nuovi messaggi", + "Thread title is required" : "Il titolo dell'argomento è obbligatorio", + "Message text is required" : "Il testo del messaggio è obbligatorio", + "The message could not be edited" : "Il messaggio non può essere modificato", + "File to share" : "File da condividere", + "File upload is not available in this conversation" : "Il caricamento dei file non è disponibile in questa conversazione.", + "Add emoji" : "Aggiungi emoji", + "Adding a mention will only notify users who did not read the message." : "L'aggiunta di una menzione notificherà solo gli utenti che non hanno letto il messaggio.", + "Thread title" : "Titolo dell'argomento", + "Send later" : "Invia più tardi", + "Cancel editing" : "Annulla modifica", + "{user} is out of office and might not respond." : "{user} è fuori ufficio e potrebbe non rispondere.", + "Absence period: {startDate} - {endDate}" : "Periodo di assenza: {startDate} - {endDate}", + "Replacement:" : "Sostituzione:", + "Share from {nextcloud}" : "Condividi da {nextcloud}", + "Share from Files" : "Condividi da File", + "Share files to the conversation" : "Condividi file nella conversazione", + "Upload from device" : "Carica dal dispositivo", + "Create new poll" : "Crea nuovo sondaggio", + "Smart picker" : "Selettore intelligente", + "Record voice message" : "Registra messaggio vocale", + "End recording and send" : "Termina la registrazione e invia", + "Dismiss recording" : "Annulla la registrazione", + "Access to the microphone was denied" : "L'accesso al microfono è stato negato", + "Microphone either not available or disabled in settings" : "Microfono non disponibile o disabilitato nelle impostazioni", + "Error while recording audio" : "Errore durante la registrazione dell'audio", + "Generating summary of unread messages …" : "Generando il riassunto dei messaggi non letti …", + "Summary is AI generated and might contain mistakes" : "Il riassunto è generato dall'IA e può contenere errori.", + "Error occurred during a summary generation" : "Si è verificato un errore durante la generazione del riassunto", + "New file" : "Nuovo file", + "Blank" : "Vuoto", + "Error while creating file" : "Errore durante la creazione del file", + "Create and share a new file" : "Crea e condividi un nuovo file", + "Name of the new file" : "Nome del nuovo file", + "Create file" : "Crea file", + "Someone is typing …" : "Qualcuno sta scrivendo …", + "{user1} is typing …" : "{user1} sta scrivendo …", + "{user1} and {user2} are typing …" : "{user1} e {user2} stanno scrivendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} stanno scrivendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n altro stanno scrivendo …","{user1}, {user2}, {user3} e %n altri stanno scrivendo …","{user1}, {user2}, {user3} e %n altri stanno scrivendo …"], + "Add more files" : "Aggiungi altri file", + "Send" : "Invia", + "In this conversation {user} can:" : "In questa conversazione {utente} può:", + "Edit default permissions for participants in {conversationName}" : "Modifica i permessi predefiniti per i partecipanti a {conversationName}", + "Start a call" : "Inizia la chiamata", + "Skip the lobby" : "Salta la sala d'attesa", + "Can post messages and reactions" : "Può pubblicare messaggi e reazioni", + "Enable the microphone" : "Accendi il microfono", + "Enable the camera" : "Abilita la fotocamera", + "Share the screen" : "Condividi lo schermo", + "Update permissions" : "Aggiorna i permessi", + "Updating permissions" : "Aggiornamento dei permessi", + "No poll drafts" : "Nessuna bozza di sondaggio", + "There is no poll drafts yet saved for this conversation" : "Non ci sono ancora bozze di sondaggi salvate per questa conversazione.", + "Create poll in {name}" : "Crea sondaggio in {name}", + "Create poll" : "Crea sondaggio", + "Error while importing poll" : "Errore durante l'importazione del sondaggio", + "Question" : "Domanda", + "Ask a question" : "Fai una domanda", + "Import draft from file" : "Importa bozza da file", + "Answers" : "Risposte", + "Answer {option}" : "Rispondi {option}", + "Delete poll option" : "Elimina opzione del sondaggio", + "Add answer" : "Aggiungi risposta", + "Settings" : "Impostazioni", + "Anonymous poll" : "Sondaggio anonimo", + "Multiple answers" : "Risposta multipla", + "Save as draft" : "Salva come bozza", + "Export draft to file" : "Esporta bozza su file", + "You voted for this option" : "Hai votato questa opzione", + "End poll" : "Termina sondaggio", + "Change your vote" : "Cambia il tuo voto", + "Results" : "Risultati", + "Voted participants" : "Partecipanti che hanno votato", + "Send a message to \"{roomName}\"" : "Invia messaggio a \"{roomName}\"", + "Hide list of participants" : "Cambia lista dei partecipanti", + "Show list of participants" : "Mostra lista dei partecipanti", + "Assistance requested in {roomName}" : "Assistenza richiesta su {roomName}", + "The message was sent to \"{roomName}\"" : "Il messaggio è stato inviato su \"{roomName}\"", + "Dismiss request for assistance" : "Togli richiesta di assistenza", + "Send message to room" : "Invia messaggio nella stanza", + "Back to main room" : "Torna alla stanza principale", + "Back to your room" : "Torna alla tua stanza", + "Message all rooms" : "Invia a tutte le stanze", + "Start session" : "Avvia sessione", + "Start a call before you start a breakout room session" : "Avvia una chiamata prima di avviare una sessione secondaria", + "Stop session" : "Termina sessione", + "The message was sent to all breakout rooms" : "Il messaggio è stato inviato a tutte le sessioni secondarie.", + "Send a message to all breakout rooms" : "Invia un messaggio a tutte le sessioni secondarie", + "Breakout rooms are not started" : "Le sessioni secondarie non sono avviate", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Le chiamate senza un backend ad alte prestazioni possono causare problemi di connettività e un carico elevato sui dispositivi. {linkstart}Ulteriori informazioni{linkend}", + "Talk setup incomplete" : "Configurazione di Talk incompleta", + "Disable lobby" : "Disabilita l'ingresso", + "Settings for participant \"{user}\"" : "Impostazioni per il partecipante \"{user}\"", + "Participant \"{user}\"" : "Partecipante \"{user}\"", + "moderator" : "moderatore", + "bot" : "bot", + "guest" : "ospite", + "Ringing …" : "Sta squillando …", + "Call rejected" : "Chiamata rifiutata", + "{time} talking …" : "{time} in conversazione...", + "{time} talking time" : "{time} tempo di conversazione", + "Raised their hand" : "Hanno alzato la mano", + "Joined with video" : "Partecipa con video", + "Joined via phone" : "Partecipa tramite telefono", + "Joined with audio" : "Partecipa con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Il testo deve contenere un numero di caratteri inferiore o uguale a {maxLength} . Il testo attuale contiene {charactersCount} caratteri", + "Remove group and members" : "Rimuovi gruppo e membri", + "Remove team and members" : "Rimuovi team e membri", + "Remove participant" : "Rimuovi partecipante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vuoi davvero rimuovere il gruppo \"{displayName}\" e i suoi membri da questa conversazione?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vuoi davvero rimuovere il team \"{displayName}\" e i suoi membri da questa conversazione?", + "Do you really want to remove {displayName} from this conversation?" : "Vuoi davvero rimuovere {displayName} da questa conversazione?", + "Notification was sent to {displayName}" : "La notifica è stata inviata in {displayName}", + "Could not send notification to {displayName}" : "Impossibile inviare la notifica a {displayName}", + "Permissions granted to {displayName}" : "Permessi concessi a {displayName}", + "Could not modify permissions for {displayName}" : "Impossibile modificare i permessi per {displayName}", + "Permissions removed for {displayName}" : "Permessi rimossi per {displayName}", + "Permissions set to default for {displayName}" : "Permessi impostati come predefiniti per {displayName}", + "Phone number could not be hung up" : "Impossibile riagganciare il numero di telefono", + "Phone number could not be put on hold" : "Impossibile mettere in attesa il numero di telefono", + "Phone number could not be muted" : "Impossibile mutare il numero di telefono", + "Phone number could not be unmuted" : "Impossibile riattivare l'audio del numero di telefono", + "DTMF message could not be sent" : "Impossibile inviare il messaggio DTMF", + "Phone number copied to clipboard" : "Numero di telefono copiato negli appunti", + "Phone number could not be copied" : "Impossibile copiare il numero di telefono", + "in the lobby" : "nella stanza", + "Dial out phone" : "Telefona", + "Hang up phone" : "Riaggancia", + "Move back to lobby" : "Riporta alla lobby", + "Move to conversation" : "Muovi nella conversazione", + "Dial-in PIN" : "PIN di accesso", + "Demote from moderator" : "Declassa da moderatore", + "Promote to moderator" : "Promuovi a moderatore", + "Resend invitation" : "Nuovo invio dell'invito", + "Send call notification" : "Invia notifica di chiamata", + "Dial out phone number" : "Componi numero di telefono", + "Resume call for phone number" : "Riprendi chiamata per numero di telefono", + "Put phone number on hold" : "Metti numero di telefono in attesa", + "Unmute phone number" : "Riattiva audio del numero di telefono", + "Mute phone number" : "Muta numero di telefono", + "Copy phone number" : "Copia numero di telefono", + "Reset custom permissions" : "Reimposta autorizzazioni personalizzate", + "Grant all permissions" : "Concedi tutti i permessi", + "Remove all permissions" : "Rimuovi tutte le autorizzazioni", + "Also ban from this conversation" : "Bandisci anche da questa conversazione", + "Internal note (reason to ban)" : "Nota interna (motivo del bando)", + "Remove" : "Rimuovi", + "Permissions modified for {displayName}" : "Permessi modificati per {displayName}", + "Add users, groups or teams" : "Aggiungi utente, gruppo o team", + "Add users or groups" : "Aggiungi utenti o gruppi", + "Add users or teams" : "Aggiungi utente o teams", + "Add users" : "Aggiungi utenti", + "Add groups or teams" : "Aggiungi gruppo o teams", + "Add groups" : "Aggiungi gruppi", + "Add teams" : "Aggiungi teams", + "Add other sources" : "Aggiungi altre fonti", + "Add emails" : "Aggiungi email", + "Integrations" : "Integrazioni", + "Add federated users" : "Aggiungi utenti federati", + "Searching …" : "Ricerca in corso...", + "Search for more users" : "Cerca altri utenti", + "You can search or add participants via name, email, or Federated Cloud ID" : "È possibile cercare o aggiungere partecipanti tramite nome, e-mail o Federated Cloud ID.", + "Search or add participants" : "Cerca o aggiungi partecipanti", + "Invitation was sent to {actorId}" : "Invito inviato a {actorId}", + "An error occurred while adding the participants" : "Si è verificato un errore durante l'aggiunta dei partecipanti", + "A new group conversation with selected participant will be created" : "Verrà creata una nuova conversazione di gruppo con i partecipanti selezionati.", + "Participants" : "Partecipanti", + "Participants ({count})" : "Partecipanti ({count})", + "Open chat" : "Apri chat", + "You have new unread messages in the chat." : "Hai nuovi messaggi non letti nella chat.", + "You have been mentioned in the chat." : "Sei stato menzionato nella chat.", + "Search messages" : "Cerca messaggi", + "Chat" : "Chat", + "Details" : "Dettagli", + "Shared items" : "Oggetti condivisi", + "Search in {name}" : "Cerca in {name}", + "Threads in {name}" : "Argomenti in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Cerca messaggi …", + "Search options" : "Opzioni di ricerca", + "From User" : "Dall'utente", + "Since" : "A partire dal", + "Until" : "Fino al", + "No results found" : "Nessun risultato trovato", + "Load more results" : "Mostra altri risultati", + "Recent threads" : "Argomenti recenti", + "Projects" : "Progetti", + "No shared items" : "Nessun elemento condiviso", + "Thread notifications" : "Notifiche dagli argomenti", + "Thread actions" : "Azioni degli argomenti", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Collega a una conversazione", + "No open conversations found" : "Nessuna conversazione aperta trovata", + "Either there are no open conversations or you joined all of them." : "O non ci sono conversazioni aperte oppure ti sei unito a tutte.", + "Check spelling or use complete words." : "Controlla l'ortografia o usa parole complete.", + "Search conversations or users" : "Cerca conversazioni o utenti", + "Select conversation" : "Seleziona conversazione", + "Number length is not valid" : "La lunghezza del numero non è valida", + "Region code is not valid" : "Il codice regionale non è valido", + "Number length is too short" : "La lunghezza del numero è troppo breve", + "Number length is too long" : "La lunghezza del numero è troppo lunga", + "Number is not valid" : "Il numero non è valid", + "Phone numbers" : "Numeri di telefono", + "Display name: {name}" : "Nome visualizzato: {name}", + "Edit display name" : "Modifica nome visualizzato", + "Display name (required)" : "Nome visualizzato (richiesto)", + "Save name" : "Salva nome", + "Error while setting personal setting" : "Errore durante l'impostazione delle impostazioni personali", + "Error while saving sounds setting" : "Errore durante il salvataggio dell'impostazione dei suoni", + "Play sounds when participants join or leave a call" : "Riproduci suoni quando i partecipanti entrano o abbandonano una chiamata", + "Notification settings" : "Impostazioni di notifica", + "Default language" : "Lingua predefinita", + "Select location for attachments" : "Seleziona la posizione per gli allegati", + "Error while setting attachment folder" : "Errore durante l'impostazione della cartella degli allegati", + "Error while setting read status privacy" : "Errore durante l'impostazione della riservatezza dello stato di lettura", + "Error while setting typing status privacy" : "Errore durante l'impostazione della privacy dello stato di digitazione", + "Error while setting default media state" : "Errore durante l'impostazione dello stato predefinito dei media", + "Privacy" : "Riservatezza", + "Attachments folder" : "Cartella degli allegati", + "Toggle full screen" : "Attiva schermo intero", + "Search" : "Cerca", + "Focus the chat input" : "Attiva la digitazione della chat", + "Unfocus the chat input to use shortcuts" : "Disattiva la digitazione della chat per utilizzare le scorciatoie", + "Edit your last message" : "Modifica ultimo messaggio", + "Shortcuts while in a call" : "Scorciatoie durante una chiamata", + "Camera on and off" : "Fotocamera attivo e disattivo", + "Microphone on and off" : "Microfono attivo e disattivo", + "Raise or lower hand" : "Alza o abbassa la mano", + "Push to talk or push to mute" : "Premi per parlare o premi per silenziare", + "Zoom-in / zoom-out a screen share" : "Ingrandisci/riduci una condivisione dello schermo", + "Mouse wheel" : "Rotella del mouse", + "Start call silently" : "Avvia chiamata silenziosa", + "Start call" : "Inizia chiamata", + "End call" : "Termina chiamata", + "This call has just ended" : "Questa chiamata è appena terminata", + "You will be able to join the call only after a moderator starts it." : "Potrai unirti alla chiamata solo dopo che un moderatore l'abbia avviata.", + "End call for everyone" : "Termina chiamata per tutti", + "Starting the recording" : "Avvia registrazione", + "Recording" : "Registrazione", + "The call has been running for one hour." : "La chiamata è in corso da un'ora.", + "Cancel recording start" : "Annulla avvio registrazione", + "Stop recording" : "Termina registrazione", + "Send a reaction" : "Invia una reazione", + "React with {reaction}" : "Reagisci con {reaction}", + "All tasks done!" : "Tutte le attività completate!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} di %n attività","{done} di %n attività","{done} di %n attività"], + "Add participants to this call" : "Aggiungi partecipanti a questa chiamata", + "_%n participant in call_::_%n participants in call_" : ["%n partecipante in chiamata","%n partecipanti in chiamata ","%n partecipanti in chiamata"], + "Scheduled messages" : "Messaggi programmati", + "You are not allowed to enable screensharing" : "Non sei autorizzato ad abilitare la condivisione dello schermo", + "No screensharing" : "Nessuna condivisione dello schermo", + "Screensharing options" : "Opzioni di condivisione dello schermo", + "Enable screensharing" : "Abilita la condivisione dello schermo", + "Bad sent video and screen quality." : "Qualità video e dello schermo inviate non corrette.", + "Bad sent screen quality." : "Qualità dello schermo inviata non corretta.", + "Bad sent video quality." : "Qualità del video inviata non corretta.", + "Bad sent audio, video and screen quality." : "Qualità audio, video e dello schermo inviate non corrette.", + "Bad sent audio and screen quality." : "Qualità audio e dello schermo inviate non corrette.", + "Bad sent audio and video quality." : "Qualità dell'audio e del video inviate non corrette.", + "Bad sent audio quality." : "Qualità audio inviata non corretta.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo. Per migliorare la situazione prova, a disabilitare la sfocatura dello sfondo o il tuo video mentre fai una condivisione dello schermo.", + "Disable background blur" : "Disattiva la sfocatura dello sfondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo. Per migliorare la situazione, prova a disabilitare il tuo video durante una condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vederti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La tua connessione Internet o il tuo computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione, prova a disabilitare la sfocatura dello sfondo o il tuo video durante la condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione prova a disabilitare il tuo video durante una condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vedere il tuo schermo. Per migliorare la situazione prova a disabilitare la condivisione dello schermo.", + "Disable screenshare" : "Disabilita la condivisione dello schermo", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La tua connessione Internet o il tuo computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione, prova a disabilitare la sfocatura dello sfondo o il tuo video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vedere il tuo schermo. Per migliorare la situazione prova a disabilitare il tuo video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti.", + "Screen sharing is not supported by your browser." : "La condivisione dello schermo non è supportata dal tuo browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "La condivisione dello schermo richiede che la pagina sia caricata tramite HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "La condivisione dello schermo richiede che la pagina sia caricata tramite HTTPS.", + "An error occurred while starting screensharing." : "Si è verificato un errore durante l'avvio della condivisione dello schermo.", + "Select virtual background" : "Salva sfondo virtuale", + "Show your screen" : "Mostra il tuo schermo", + "Stop screensharing" : "Ferma la condivisione dello schermo", + "Mute others" : "Silenzia gli altri", + "Start recording" : "Avvia registrazione", + "Set up breakout rooms" : "Imposta sessioni secondarie", + "Download attendance list" : "Scarica l'elenco delle presenze", + "Open Calendar" : "Apri Calendario", + "Remove participant {name}" : "Rimuovi il partecipante {name}", + "Would you like to delete this conversation?" : "Vuoi eliminare questa conversazione?", + "Are you sure you want to delete this conversation?" : "Vuoi davvero eliminare questa conversazione?", + "Delete now" : "Elimina ora", + "Keep" : "Mantieni", + "Open dialpad" : "Apri tastierino numerico", + "Select a region" : "Seleziona una regione", + "Local time: {time}" : "Ora locale: {time}", + "Search …" : "Cerca …", + "Message without mention" : "Messaggio senza menzione", + "Mention myself" : "Menziona me stesso", + "Mention everyone" : "Menziona chiunque", + "Select a conversation" : "Seleziona una conversazione", + "Select a mode" : "Seleziona una modalità", + "You do not have permissions to access this conversation." : "Non hai i permessi per accedere a questa conversazione.", + "Join a different conversation or start a new one." : "Partecipa a una conversazione diversa o avviane una nuova.", + "The conversation does not exist" : "La conversazione non esiste", + "Join a conversation or start a new one!" : "Unisciti a una conversazione o avviane una nuova!", + "Duplicate session" : "Duplica sessione", + "Creating and joining a conversation with \"{userid}\"" : "Creare e partecipare a una conversazione con \"{userid}\"", + "Join a conversation or start a new one" : "Unisciti a una conversazione o avviane una nuova", + "Error while joining the conversation" : "Errore durante la partecipazione alla conversazione", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utente Nextcloud", + "User password" : "Password utente", + "Talk conversation" : "Conversazione di Talk", + "Skip TLS verification" : "Salta la verifica TLS", + "Matrix server URL" : "URL server Matrix", + "User" : "Utente", + "Matrix channel" : "Canale Matrix", + "Mattermost server URL" : "URL server Mattermost", + "Mattermost user" : "Utente Mattermost", + "Team name" : "Nome squadra", + "Channel name" : "Nome canale", + "Rocket.Chat server URL" : "URL server Rocket.Chat", + "User name or email address" : "Nome utente o indirizzo email", + "Rocket.Chat channel" : "Canale Rocket.Chat", + "Zulip server URL" : "URL server Zulip", + "Bot user name" : "Nome utente del bot", + "Bot API key" : "Chiave API del bot", + "Zulip channel" : "Canale Zulip", + "API token" : "Token API", + "Slack channel" : "Canale Slack", + "Server ID or name" : "ID o nome del server", + "Channel ID (prefixed with \"ID:\") or name" : "ID canale (preceduto da \"ID:\") o nome", + "Channel" : "Canale", + "Login" : "Accedi", + "Chat ID" : "ID chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL server IRC (ad es. chat.freenode.net:6667)", + "Nickname" : "Pseudonimo", + "Connection password" : "Password di connessione", + "IRC channel" : "Canale IRC", + "Channel password" : "Password del canale", + "NickServ nickname" : "Pseudonimo NickServ", + "NickServ password" : "Password NickServ", + "Use TLS" : "Usa TLS", + "Use SASL" : "Usa SASL", + "Tenant ID" : "ID tenant", + "Client ID" : "ID client", + "Team ID" : "ID team", + "Thread ID" : "ID thread", + "XMPP/Jabber server URL" : "URL server XMPP/Jabber", + "MUC server URL" : "URL server MUC", + "Jabber ID" : "ID Jabber", + "Media" : "Media", + "Polls" : "Sondaggi", + "Deck cards" : "Carte del mazzo", + "Voice messages" : "Messaggi vocali", + "Locations" : "Posizioni", + "Call recordings" : "Registrazioni delle chiamate", + "Audio" : "Audio", + "Show all media" : "Mostra tutti i media", + "Show all files" : "Mostra tutti i file", + "Show all polls" : "Mostra tutti i sondaggi", + "Show all deck cards" : "Mostra tutte le carte del mazzo", + "Show all voice messages" : "Mostra tutti i messaggi vocali", + "Show all locations" : "Mostra tutte le località", + "Show all call recordings" : "Mostra tutte le registrazioni delle chiamate", + "Show all audio" : "Mostra tutto l'audio", + "Show all other" : "Mostra tutti gli altri", + "Follow conversation settings" : "Impostazioni delle conversazioni seguite", + "Group" : "Gruppo", + "Team" : "Team", + "You reconnected to the call" : "Ti sei ricollegato alla chiamata", + "{actor} reconnected to the call" : "{actor} si è riconnesso alla chiamata", + "You added {user0} and {user1}" : "Hai aggiunto {user0} e {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Hai aggiunto {user0}, {user1} e %n altro partecipante","Hai aggiunto {user0}, {user1} e %n altri partecipanti","Hai aggiunto {user0}, {user1} e %n altri partecipanti"], + "An administrator added you and {user0}" : "Un amministratore ha aggiunto te e {user0}", + "{actor} added you and {user0}" : "{actor} ha aggiunto te e {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un amministratore ha aggiunto te, {user0} e %n altro partecipante","Un amministratore ha aggiunto te, {user0} e altri %n partecipanti","Un amministratore ha aggiunto te, {user0} e altri %n partecipanti"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} ha aggiunto te, {user0} e %n altro partecipante","{actor} ha aggiunto te, {user0} e altri %n partecipanti","{actor} ha aggiunto te, {user0} e altri %n partecipanti"], + "An administrator added {user0} and {user1}" : "Un amministratore ha aggiunto {user0} e {user1}", + "{actor} added {user0} and {user1}" : "{actor} ha aggiunto {user0} e {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un amministratore ha aggiunto {user0}, {user1} e %n altro partecipante","Un amministratore ha aggiunto {user0}, {user1} e altri %n partecipanti","Un amministratore ha aggiunto {user0}, {user1} e altri %n partecipanti"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha aggiunto {user0}, {user1} e %n altro partecipante","{actor} ha aggiunto {user0}, {user1} e altri %n partecipanti","{actor} ha aggiunto {user0}, {user1} e altri %n partecipanti"], + "You removed {user0} and {user1}" : "Hai rimosso {user0} e {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Hai rimosso {user0}, {user1} ed %n altro partecipante","Hai rimosso {user0}, {user1} ed altri %n partecipanti","Hai rimosso {user0}, {user1} ed altri %n partecipanti"], + "An administrator removed you and {user0}" : "Un amministratore ha rimosso te e {user0}", + "{actor} removed you and {user0}" : "{actor} ha rimosso te e {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un amministratore ha rimosso te, {user0} e %n altro partecipante","Un amministratore ha rimosso te, {user0} e altri %n partecipanti","Un amministratore ha rimosso te, {user0} e altri %n partecipanti"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} ha rimosso te, {user0} e %n altri partecipanti","{actor} ha rimosso te, {user0} e altri %n partecipanti","{actor} ha rimosso te, {user0} e altri %n partecipanti"], + "An administrator removed {user0} and {user1}" : "Un amministratore ha rimosso {user0} e {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ha rimosso {user0} e {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un amministratore ha rimosso {user0}, {user1} e %n altro partecipante","Un amministratore ha rimosso {user0}, {user1} e altri %n partecipanti","Un amministratore ha rimosso {user0}, {user1} e altri %n partecipanti"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} ha rimosso {user0}, {user1} e %n altro partecipante","{actor} ha rimosso {user0}, {user1} e altri %n partecipanti","{actor} ha rimosso {user0}, {user1} e altri %n partecipanti"], + "You and {user0} joined the call" : "Tu e {user0} vi siete uniti alla chiamata", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tu, {user0} e altro %n partecipante vi siete uniti alla chiamata","Tu, {user0} e %n altri partecipanti vi siete uniti alla chiamata","Tu, {user0} e %n altri partecipanti vi siete uniti alla chiamata"], + "{user0} and {user1} joined the call" : "{user0} e {user1} si sono uniti alla chiamata", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e %n altro partecipante si sono uniti alla chiamata","{user0}, {user1} e %n altri partecipanti si sono uniti alla chiamata","{user0}, {user1} e %n altri partecipanti si sono uniti alla chiamata"], + "You and {user0} left the call" : "Tu e {user0} avete lasciato la chiamata", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Tu, {user0} e %n altro partecipante avete abbandonato la chiamata","Tu, {user0} e altri %n partecipanti avete abbandonato la chiamata","Tu, {user0} e altri %n partecipanti avete abbandonato la chiamata"], + "{user0} and {user1} left the call" : "{user0} e {user1} hanno abbandonato la chiamata", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e %n altro partecipante hanno abbandonato la chiamata ","{user0}, {user1} e %n altri partecipanti hanno abbandonato la chiamata ","{user0}, {user1} e %n altri partecipanti hanno abbandonato la chiamata "], + "You promoted {user0} and {user1} to moderators" : "Hai promosso {user0} e {user1} a moderatori", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Hai promosso {user0}, {user1} e %n altro partecipante a moderatori","Hai promosso {user0}, {user1} e %n altri partecipanti a moderatori","Hai promosso {user0}, {user1} e %n altri partecipanti a moderatori"], + "An administrator promoted you and {user0} to moderators" : "Un amministratore ha promosso te e {user0} a moderatori", + "{actor} promoted you and {user0} to moderators" : "{actor} ha promosso te e {user0} a moderatori", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un amministratore ha promosso te, {user0} e %n altro partecipante a moderatori","Un amministratore ha promosso te, {user0} e %n altri partecipanti a moderatori","Un amministratore ha promosso te, {user0} e %n altri partecipanti a moderatori"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} ha promosso te, {user0} e %n altro partecipante a moderatori","{actor} ha promosso te, {user0} e altri %n partecipanti a moderatori","{actor} ha promosso te, {user0} e altri %n partecipanti a moderatori"], + "An administrator promoted {user0} and {user1} to moderators" : "Un amministratore ha promosso {user0} e {user1} a moderatori", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha promosso {user0} e {user1} a moderatori", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un amministratore ha promosso {user0}, {user1} e %n altro partecipante a moderatori","Un amministratore ha promosso {user0}, {user1} e %n altri partecipanti a moderatori","Un amministratore ha promosso {user0}, {user1} e %n altri partecipanti a moderatori"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha promosso {user0}, {user1} e %n altro partecipante a moderatori ","{actor} ha promosso {user0}, {user1} e %n altri partecipanti a moderatori ","{actor} ha promosso {user0}, {user1} e %n altri partecipanti a moderatori "], + "You demoted {user0} and {user1} from moderators" : "Hai rimosso {user0} e {user1} dai moderatori", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Hai rimosso {user0}, {user1} e %n altro partecipante dai moderatori","Hai rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","Hai rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "An administrator demoted you and {user0} from moderators" : "Un amministratore ha rimosso te e {user0} dai moderatori", + "{actor} demoted you and {user0} from moderators" : "{actor} ha rimosso te e {user0} dai moderatori", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un amministratore ha rimosso te, {user0} e %n altro partecipante dai moderatori","Un amministratore ha rimosso te, {user0} e %n altri partecipanti dai moderatori","Un amministratore ha rimosso te, {user0} e %n altri partecipanti dai moderatori"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} ha rimosso te, {user0} e %n altro partecipante dai moderatori","{actor} ha rimosso te, {user0} e %n altri partecipanti dai moderatori","{actor} ha rimosso te, {user0} e %n altri partecipanti dai moderatori"], + "An administrator demoted {user0} and {user1} from moderators" : "Un amministratore ha rimosso {user0} e {user1} dai moderatori", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ha rimosso {user0} e {user1} dai moderatori", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un amministratore ha rimosso {user0}, {user1} e %n altro partecipante dai moderatori","Un amministratore ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","Un amministratore ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha rimosso {user0}, {user1} e %n altro partecipante dai moderatori","{actor} ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","{actor} ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "You:" : "Tu:", + "You: {lastMessage}" : "Tu: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(modificato da te)", + "(edited by a deleted user)" : "(modificato da un utente eliminato)", + "(edited by {moderator})" : "(modificato da {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Stai tentando di partecipare a una conversazione mentre hai una sessione attiva in un'altra finestra o dispositivo. Questo non è attualmente supportato da Nextcloud Talk. Che cosa vuoi fare?", + "Leave this page" : "Abbandona questa pagina", + "Join here" : "Unisciti qui", + "Deck card has been posted to {conversation}" : "La scheda di Deck è stata pubblicata su {conversation}", + "An error occurred while posting deck card to conversation" : "Si è verificato un errore durante la pubblicazione della scheda di Deck nella conversazione", + "Post to a conversation" : "Pubblica in una conversazione", + "Post to conversation" : "Pubblica in conversazione", + "The recording failed. Please contact your administrator." : "La registrazione è fallita. Per favore, contatta un amministratore.", + "Location has been posted to {conversation}" : "La posizione è stata pubblicata su {conversation}", + "An error occurred while posting location to conversation" : "Si è verificato un errore durante la pubblicazione della posizione nella conversazione", + "Share to a conversation" : "Condividi in una conversazione", + "Share to conversation" : "Condividi su conversazione", + "In conversation" : "In conversazione", + "Search in conversation: {conversation}" : "Cerca nella conversazione: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Le tue richieste sono attualmente limitate a causa della protezione contro gli attacchi brute force.", + "Error while clearing conversation history" : "Errore durante la cancellazione della cronologia della conversazione", + "Error occurred while allowing guests" : "Si è verificato un errore durante l'autorizzazione degli ospiti", + "Error occurred while disallowing guests" : "Si è verificato un errore durante la disabilitazione degli ospiti", + "Error occurred when restricting the conversation to moderator" : "Si è verificato un errore durante la limitazione della conversazione al moderatore", + "Error occurred when opening the conversation to everyone" : "Si è verificato un errore durante l'apertura della conversazione a tutti", + "Conversation password has been saved" : "La password della conversazione è stata salvata", + "Conversation password has been removed" : "La password della conversazione è stata rimossa", + "Error occurred while saving conversation password" : "Si è verificato un errore durante il salvataggio della password della conversazione", + "Call recording is starting." : "La registrazione della chiamata sta iniziando", + "Call recording stopped while starting." : "La registrazione della chiamata è stata interrotta prima dell'inizio.", + "Call recording stopped. You will be notified once the recording is available." : "La registrazione della chiamata è stata interrotta. Riceverai una notifica non appena la registrazione sarà disponibile.", + "Conversation picture set" : "Icona della conversazione impostata", + "Conversation picture deleted" : "Icona della conversazione eliminata", + "Could not delete the conversation picture" : "Impossibile eliminare l'icona della conversazione", + "Could not remove the automatic expiration" : "Impossibile rimuovere la scadenza automatica", + "Could not post message: {errorMessage}" : "Impossibile pubblicare il messaggio: {errorMessage}", + "Participant is banned successfully" : "Il partecipante è stato bandito con successo", + "Error while banning the participant" : "Errore durante il bando del partecipante", + "An error occurred while fetching the participants" : "Si è verificato un errore durante il recupero dei partecipanti", + "Could not send invitation to {actorId}" : "Impossibile inviare l'invito a {actorId}", + "Invitations sent" : "Inviti inviati", + "Error occurred when sending invitations" : "Si è verificato un errore durante l'invio degli inviti", + "Failed to join the conversation." : "Impossibile entrare nelal conversazione.", + "An error occurred while creating breakout rooms" : "Un errore è avvenuto durante la creazione di sessioni secondarie", + "An error occurred while re-ordering the attendees" : "Un errore è avvenuto durante il riordino dei partecipanti", + "An error occurred while deleting breakout rooms" : "Un errore è avvenuto durante l'eliminazione di sessioni secondarie", + "An error occurred while starting breakout rooms" : "Un errore è avvenuto durante l'avvio delle sessioni secondarie", + "An error occurred while stopping breakout rooms" : "Un errore è avvenuto durante l'interruzione delle sessioni secondarie", + "An error occurred while sending a message to the breakout rooms" : "Un errore è avvenuto durante l'invio di un messaggio alle sessioni secondarie", + "An error occurred while requesting assistance" : "Un errore è avvenuto durante la richiesta di assistenza", + "An error occurred while resetting the request for assistance" : "Un errore è avvenuto durante il reset della richiesta di assistenza", + "An error occurred while joining breakout room" : "Un errore è avvenuto durante l'ingresso nella sessione secondaria", + "Failed to rename the thread" : "Impossibile rinominare l'argomento", + "Error fetching upcoming events" : "Errore durante il recupero degli eventi imminenti", + "Error fetching upcoming reminders" : "Errore durante il recupero dei promemoria imminenti", + "An error occurred while accepting an invitation" : "Si è verificato un errore durante l'accettazione di un invito", + "An error occurred while rejecting an invitation" : "Si è verificato un errore durante il rifiuto di un invito", + "{guest} (guest)" : "{guest} (ospite)", + "Poll draft has been saved" : "Bozza del sondaggio salvata", + "An error occurred while saving the draft" : "Si è verificato un errore durante il salvataggio della bozza", + "An error occurred while submitting your vote" : "Si è verificato un errore durante l'invio del voto", + "An error occurred while ending the poll" : "Si è verificato un errore durante la chiusura del sondaggio", + "An error occurred while deleting the poll draft" : "Si è verificato un errore durante l'eliminazione della bozza di sondaggio", + "Poll \"{name}\" was created by {user}. Click to vote" : "Il sondaggio \"{name}\" è stato creato da {user}. Fai clic per votare", + "Failed to add reaction" : "Impossibile aggiungere la reazione", + "Failed to remove reaction" : "Impossibile rimuovere la reazione", + "Error while uploading file \"{fileName}\"" : "Errore durante il caricamento del file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Spazio libero insufficiente per caricare il file \"{fileName}\"", + "You are not allowed to share files" : "Non ti è consentito condividere file", + "Error while sharing file" : "Errore durante la condivisione del file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Il browser che stai utilizzando non è completamente supportato da Nextcloud Talk. Usa l'ultima versione di Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Tra %n ora","Tra %n ore","Tra %n ore"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minuti","%n minuti"], + "In {hours} and {minutes}" : "Tra {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["Tra %n minuto","Tra %n minuti","Tra %n minuti"], + "Later today – {timeLocale}" : "Oggi – {timeLocale}", + "Tomorrow – {timeLocale}" : "Domani – {timeLocale}", + "This weekend – {timeLocale}" : "Questo fine settimana – {timeLocale}", + "Next week – {timeLocale}" : "Prossima settimana – {timeLocale}", + "Conversation link copied to clipboard" : "Collegamento alla conversazione copiato negli appunti", + "The link could not be copied" : "Impossibile copiare il collegamento", + "Error while parsing a PROPFIND error" : "Errore durante l'elaborazione di un errore PROPFIND", + "Sending signaling message has failed" : "Invio del messaggio di segnalazione non riuscito", + "Lost connection to signaling server. Trying to reconnect." : "Connessione al server di segnalazione interrotta. Riprova a connetterti.", + "Lost connection to signaling server." : "Connessione persa con il server di segnalazione.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Il server di segnalazione configurato deve essere aggiornato per essere compatibile con questa versione di Talk. Contatta l'amministratore.", + "Please restart the app." : "Riavvia l'applicazione.", + "Please reload the page." : "Ricarica la pagina.", + "Please try to restart the app." : "Prova a riavviare l'applicazione.", + "Please try to reload the page." : "Per favore prova a ricaricare la pagina.", + "Do not disturb" : "Non disturbare", + "Away" : "Assente", + "Microphone {number}" : "Microfono {number}", + "Camera {number}" : "Fotocamera {number}", + "Speaker {number}" : "Altoparlante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembra che tu abbia parlato mentre eri silenziato, rimuovi il silenzio perché gli altri possano sentirti", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Impossibile stabilire una connessione con almeno un partecipante. Un server TURN potrebbe essere necessario in questo scenario. Chiedi al tuo amministratore di configurarne uno seguendo {linkstart}questa documentazione{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "L'operazione sta richiedendo più tempo del previsto. I permessi multimediali sono già stati accordati (o rifiutati)? Se sì, riavvia il browser, poiché audio e video non funzionano", + "Access to microphone & camera is only possible with HTTPS" : "L'accesso a microfono e fotocamera è possibile solo con HTTPS", + "Please move your setup to HTTPS" : "Sposta la tua configurazione su HTTPS", + "Access to microphone & camera was denied" : "L'accesso a microfono e fotocamera è stato negato", + "WebRTC is not supported in your browser" : "WebRTC non è supportato dal tuo browser", + "Please use a different browser like Firefox or Chrome" : "Utilizza un browser diverso come Firefox o Chrome", + "Error while accessing microphone & camera" : "Errore durante l'accesso a microfono e fotocamera", + "%s Talk on your mobile devices" : "%s Talk sui tuoi dispositivi mobili ", + "Join conversations at any time, anywhere, on any device." : "Unisciti alle conversazioni in qualsiasi momento, ovunque, su qualsiasi dispositivo.", + "Android app" : "Applicazione Android", + "iOS app" : "Applicazione iOS", + "__language_name__" : "Italiano", + "Webhook Demo" : "Demo Webhook", + "Call summary (%s)" : "Riassunto della chiamata (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Il bot di riassunto delle chiamate pubblica un messaggio di sintesi dopo la chiamata, elencando tutti i partecipanti e descrivendo le attività.", + "Tasks" : "Attività", + "Notes" : "Note", + "Reports" : "Reports", + "Decisions" : "Decisioni", + "Agenda" : "Agenda", + "Call summary" : "Riassunto della chiamata", + "Call summary - {title}" : "Riassunto della chiamata - {title}", + "Talk conversation for event" : "Conversazione di Talk per un evento", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push è installato, questo migliora le prestazioni dei client desktop.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} non è installato, ciò potrebbe causare problemi di prestazioni durante l'utilizzo dei client desktop.", + "Next meeting" : "Prossimo meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Pianifica un meeting dal tuo calendario. Una conversazione Talk deve essere impostata come posizione per essere visualizzata qui.", + "Join conversations from remote Nextcloud servers" : "Partecipa alle conversazioni dai server Nextcloud remoti", + "Your default media state has been saved" : "Il tuo stato predefinito dei media è stato salvato", + "Set reminder for later today" : "Imposta promemoria per più tardi oggi", + "Set reminder for tomorrow" : "Imposta promemoria per domani", + "Set reminder for this weekend" : "Imposta promemoria per questo fine settimana", + "Set reminder for next week" : "Imposta promemoria per la prossima settimana", + "Generate summary" : "Genera riassunto", + "Open poll • You voted already" : "Sondaggio aperto • Hai già votato", + "Open poll • Click to vote" : "Sondaggio aperto • Fai clic per votare", + "Poll • Ended" : "Sondaggio • Terminato", + "Talk recording from {time} ({conversation})" : "Registrazione della conversazione da {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Risultati del sondaggio • %n voto","Risultati del sondaggio • %n voti","Risultati del sondaggio • %n voti"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Sondaggio aperto • %n voto","Sondaggio aperto • %n voti","Sondaggio aperto • %n voti"], + "Submit vote" : "Invia voto", + "Your privacy setting has been saved" : "Le tue impostazioni di riservatezza sono state salvate", + "Your personal setting has been saved" : "Le tue impostazioni personali sono state salvate", + "Failed to save sounds setting" : "Errore nel salvare le impostazioni dei suoni ", + "Sounds setting saved" : "Impostazione dei suoni salvata", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk è stato aggiornato, non è possibile avviare o partecipare a una chiamata.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ti sei unito alla conversazione in un'altra finestra o dispositivo. Questo non è attualmente supportato da Nextcloud Talk, quindi questa sessione è stata chiusa.", + "Nextcloud Talk was updated." : "Nextcloud Talk è stato aggiornato.", + "Nextcloud is in maintenance mode." : "Nextcloud è in modalità manutenzione.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation è stato aggiornato." +}, +"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/it.json b/l10n/it.json new file mode 100644 index 0000000..9a83d86 --- /dev/null +++ b/l10n/it.json @@ -0,0 +1,2126 @@ +{ "translations": { + "a conversation" : "una conversazione", + "(Duration %s)" : "(Durata %s)", + "You attended a call with {user1}" : "Hai partecipato a una chiamata con {user1}", + "_%n guest_::_%n guests_" : ["%n ospite","%n ospiti","%n ospiti"], + "You attended a call with {user1} and {user2}" : "Hai partecipato a una chiamata con {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Hai partecipato a una chiamata con {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Hai partecipato a una chiamata con {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Hai partecipato a una chiamata con {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n altro","%n altri","%n altri"], + "{actor} invited you to {call}" : "{actor} ti ha invitato a {call}", + "You were invited to a conversation or had a call" : "Sei stato invitato a una conversazione o hai ricevuto una chiamata", + "Other activities" : "Altre attività", + "Talk" : "Talk", + "Guest" : "Ospite", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Benvenuti in Nextcloud Talk!\nIn questa conversazione sarai informato sulle nuove funzionalità disponibili in Nextcloud Talk.", + "## New in Talk %s" : "## Novità in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge e Safari ora possono essere utilizzati per partecipare a chiamate video e audio", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Le conversazioni uno-a-uno ora sono persistenti e non possono essere più trasformate accidentalmente in conversazioni di gruppo. Inoltre, quando uno dei partecipanti abbandona la conversazione, essa non viene più eliminata automaticamente. Solo se entrambi i partecipanti abbandonano, la conversazione viene eliminata dal server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Ora puoi informare tutti i partecipanti inserendo \"@all\" nella chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Con il tasto \"freccia su\" puoi richiamare il tuo ultimo messaggio", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk ora può accettare comandi, invia \"/help\" come un messaggio di chat per vedere se il tuo amministratore li ha configurati", + "- With projects you can create quick links between conversations, files and other items" : "- Con i progetti puoi creare collegamenti rapidi tra conversazioni, file e altri elementi ", + "- You can now mention guests in the chat" : "- Ora puoi menzionare gli ospiti nella chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Le conversazioni ora possono avere un ingresso. Questo consente ai moderatori di entrare nella chat e preparare la riunione, mentre gli utenti e gli ospiti devono attendere.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Ora puoi rispondere direttamente ai messaggi fornendo agli altri utenti altre informazioni sul contesto relativo al tuo messaggio", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- La ricerca di conversazioni e partecipanti ora filtreranno anche le tue conversazioni esistenti, rendendo più semplice trovare conversazioni precedenti", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Ora puoi aggiungere gruppi di utenti personalizzati alle conversazioni quando l'applicazione Cerchie è installata", + "- Check out the new grid and call view" : "- Controlla la nuova visualizzazione griglia e chiamata", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Ora puoi inviare e trascinare i file direttamente dal tuo dispositivo nella chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- I file condivisi ora vengono aperti direttamente dentro la chat con le applicazioni di visualizzazione", + "- You can now search for chats and messages in the unified search in the top bar" : "- Ora puoi cercare chat e messaggi nella ricerca unificata nella barra in alto", + "- Spice up your messages with emojis from the emoji picker" : "- Ravviva i tuoi messaggi con le emoji dal selettore di emoji", + "- You can now change your camera and microphone while being in a call" : "- È ora possibile cambiare la videocamera e il microfono durante una chiamata", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dai alle tue conversazioni un contesto con una descrizione e pubblicala in modo che gli utenti registrati possano trovarla e unirsi in autonomia", + "- See a read status and send failed messages again" : "- Visualizza uno stato di lettura e invia nuovamente i messaggi non riusciti ", + "- Raise your hand in a call with the R key" : "- Alza la mano in una chiamata con il tasto R", + "- Join the same conversation and call from multiple devices" : "- Partecipa alla stessa conversazione e chiama da più dispositivi", + "- Send voice messages, share your location or contact details" : "- Invia messaggi vocali, condividi la tua posizione o i dettagli di contatto", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Aggiungi gruppi a una conversazione e i nuovi membri del gruppo verranno automaticamente aggiunti come partecipanti", + "- A preview of your audio and video is shown before joining a call" : "- Prima di partecipare a una chiamata, viene mostrata un'anteprima dell'audio e del video", + "- You can now blur your background in the newly designed call view" : "- Ora puoi sfocare lo sfondo nella nuova vista delle chiamate", + "- Moderators can now assign general and individual permissions to participants" : "- I moderatori ora possono assegnare ai partecipanti autorizzazioni generali e individuali", + "- You can now react to chat messages" : "- Ora puoi reagire ai messaggi della chat", + "- In the sidebar you can now find an overview of the latest shared items" : "Nella barra laterale ora puoi trovare una panoramica degli ultimi elementi condivisi", + "- Use a poll to collect the opinions of others or settle on a date" : "- Utilizza un sondaggio per raccogliere le opinioni degli altri o fissare una data.", + "- Configure an expiration time for chat messages" : "- Configura un tempo di scadenza per i messaggi di chat", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Avvia le chiamate senza avvisare gli altri partecipanti alle conversazioni di gruppo. Una volta avviata la chiamata, puoi inviare notifiche individuali.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Invia messaggi di chat senza notificare i destinatari nel caso in cui non sia urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Ora è possibile completare automaticamente le emoji digitando \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Collega vari elementi utilizzando il nuovo selettore intelligente digitando un \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- I moderatori possono ora creare stanze di discussione (richiede il backend ad alte prestazioni)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Ora è possibile registrare le chiamate (richiede il backend ad alte prestazioni)", + "- Conversations can now have an avatar or emoji as icon" : "- Le conversazioni ora possono avere un avatar o un'emoji come icona.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Oltre allo sfondo sfocato nelle videochiamate, ora sono disponibili anche sfondi virtuali.", + "- Reactions are now available during calls" : "- Le reazioni sono ora disponibili durante le chiamate", + "- Typing indicators show which users are currently typing a message" : "- Gli indicatori di digitazione mostrano quali utenti stanno digitando un messaggio", + "- Groups can now be mentioned in chats" : "- Ora è possibile menzionare i gruppi nelle chat", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Le registrazioni delle chiamate vengono trascritte automaticamente se è registrata un'applicazione di trascrizione.", + "- Chat messages can be translated if a translation provider app is registered" : "- I messaggi di chat possono essere tradotti se è registrata un'applicazione di un fornitore di traduzioni.", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** può ora essere utilizzato nei messaggi di _chat_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks sono ora disponibili per implementare bot. Consulta la documentazione per ulteriori informazioni https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Imposta un promemoria su un messaggio di chat per ricevere nuovamente una notifica in un secondo momento", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Utilizza la conversazione **Nota a me stesso** per prendere appunti e condividere informazioni tra i tuoi dispositivi", + "- Captions allow to send a message with a file at the same time" : "- Le didascalie consentono di inviare un messaggio insieme a un file.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Il video di chi sta parlando è ora visibile durante la condivisione dello schermo e le reazioni alle chiamate sono animate.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- I messaggi possono ora essere modificati dagli autori e dai moderatori per 6 ore.", + "- Unsent message drafts are now saved in your browser" : "- Le bozze dei messaggi non inviati ora vengono salvate nel browser.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- La chat di testo può ora essere effettuata in modo federato con altri server Talk.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- I moderatori possono ora bandire account e ospiti per impedire loro di partecipare nuovamente a una conversazione.", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Le chiamate in arrivo dagli eventi del calendario collegati e dai sostituti per assenza vengono ora visualizzate nelle conversazioni.", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Le chiamate possono ora essere effettuate in modo federato con altri server Talk (richiede il backend ad alte prestazioni)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Presentiamo il client desktop Nextcloud Talk per Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Riassumi le registrazioni delle chiamate e i messaggi non letti nelle chat con Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Miglioramento delle riunioni con il riconoscimento degli ospiti invitati tramite il loro indirizzo e-mail, l'importazione degli elenchi dei partecipanti, le bozze per i sondaggi e il download degli elenchi dei partecipanti alle chiamate.", + "- Archive conversations to stay focused" : "- Archivia le conversazioni per rimanere concentrato", + "- Schedule a meeting into your calendar from within a conversation" : "- Pianifica un meeting nel tuo calendario direttamente dalla conversazione", + "- Search for messages of the current conversation directly in the right sidebar" : "- Cerca i messaggi della conversazione corrente direttamente nella barra laterale destra", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Visualizza più conversazioni a colpo d'occhio con il nuovo elenco compatto (abilita nelle impostazioni di Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Le conversazioni delle riunioni ora sincronizzano il titolo e la descrizione dal calendario e vengono nascoste con un filtro di ricerca fino a quando non si avvicina l'ora di inizio.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Contrassegna le conversazioni come sensibili nelle impostazioni di notifica, per nascondere il contenuto dei messaggi dall'elenco delle conversazioni e dalle notifiche.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Per ricevere notifiche push durante la modalità “Non disturbare”, contrassegna le conversazioni come importanti.", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Aggiungi altri partecipanti a una chiamata individuale per creare una nuova chiamata di gruppo al volo", + "- Use threads to keep your chat and discussions organized" : "- Usa gli argomenti per mantenere organizzate le tue chat e discussioni", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Trascrizioni in tempo reale ora disponibili durante la chiamata (richiede l'ExApp per la trascrizione in tempo reale e il backend ad alte prestazioni)", + "_All %n participant_::_All %n participants_" : ["Tutti i %n partecipanti","Tutti i %n partecipanti","Tutti i %n partecipanti"], + "Talk updates ✅" : "Aggiornamenti di Talk ✅", + "Reaction deleted by author" : "Reazione eliminata dall'autore", + "{actor} created the conversation" : "{actor} ha creato la conversazione", + "You created the conversation" : "Hai creato la conversazione", + "System created the conversation" : "Il sistema ha creato la conversazione", + "An administrator created the conversation" : "Un amministratore ha creato la conversazione", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ha rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Hai rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un amministratore ha rinominato la conversazione da \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} ha impostato la descrizione", + "You set the description" : "Hai impostato la descrizione", + "An administrator set the description" : "Un amministratore ha impostato la descrizione", + "{actor} removed the description" : "{actor} ha rimosso la descrizione", + "You removed the description" : "Hai rimosso la descrizione", + "An administrator removed the description" : "Un amministratore ha rimosso la descrizione", + "You started a silent call" : "Hai avviato una chiamata silenziosa", + "Outgoing silent call" : "Chiamata silenziosa in uscita", + "{actor} started a silent call" : "{actor} ha avviato una chiamata silenziosa ", + "Incoming silent call" : "Chiamata silenziosa in arrivo", + "You started a call" : "Hai iniziato una chiamata", + "Outgoing call" : "Chiamata in uscita", + "{actor} started a call" : "{actor} ha iniziato una chiamata", + "Incoming call" : "Chiamata in arrivo", + "{actor} joined the call" : "{actor} si è unito alla chiamata", + "You joined the call" : "Ti sei unito alla chiamata", + "{actor} left the call" : "{actor} ha abbandonato la chiamata", + "You left the call" : "Hai abbandonato la chiamata", + "{actor} unlocked the conversation" : "{actor} ha sbloccato la conversazione", + "You unlocked the conversation" : "Hai sbloccato la conversazione", + "An administrator unlocked the conversation" : "Un amministratore ha sbloccato la conversazione", + "{actor} locked the conversation" : "{actor} ha bloccato la conversazione", + "You locked the conversation" : "Hai bloccato la conversazione", + "An administrator locked the conversation" : "Un amministratore ha bloccato la conversazione", + "{actor} limited the conversation to the current participants" : "{actor} ha ristretto la conversazione ai partecipanti attuali", + "You limited the conversation to the current participants" : "Hai ristretto la conversazione ai partecipanti attuali", + "An administrator limited the conversation to the current participants" : "Un amministratore ha ristretto la conversazione ai partecipanti attuali", + "{actor} opened the conversation to registered users" : "{actor} ha aperto la conversazione agli utenti registrati", + "You opened the conversation to registered users" : "Hai aperto la conversazione agli utenti registrati", + "An administrator opened the conversation to registered users" : "Un amministratore ha aperto la conversazione agli utenti registrati", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} ha aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "You opened the conversation to registered users and users created with the Guests app" : "Hai aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Un amministratore ha aperto la conversazione agli utenti registrati e agli utenti creati con l'applicazione Ospiti", + "The conversation is now open to everyone" : "La conversazione è ora aperta a chiunque", + "{actor} opened the conversation to everyone" : "{actor} ha aperto la conversazione a chiunque", + "You opened the conversation to everyone" : "Hai aperto la conversazione a chiunque", + "{actor} restricted the conversation to moderators" : "{actor} ha ristretto la conversazione ai moderatori", + "You restricted the conversation to moderators" : "Hai ristretto la conversazione ai moderatori", + "{actor} started breakout rooms" : "{actor} ha avviato le sessioni secondarie ", + "You started breakout rooms" : "Hai avviato le sessioni secondarie", + "{actor} stopped breakout rooms" : "{actor} ha interrotto le sessioni secondarie ", + "You stopped breakout rooms" : "Hai interrotto le sessioni secondarie", + "{actor} allowed guests" : "{actor} ha permesso gli ospiti", + "You allowed guests" : "Hai permesso gli ospiti", + "An administrator allowed guests" : "Un amministratore ha consentito gli ospiti", + "{actor} disallowed guests" : "{actor} ha vietato gli ospiti", + "You disallowed guests" : "Hai vietato gli ospiti", + "An administrator disallowed guests" : "Un amministratore ha vietato gli ospiti", + "{actor} set a password" : "{actor} ha impostato una password", + "You set a password" : "Hai impostato una password", + "An administrator set a password" : "Un amministratore ha impostato una password", + "{actor} removed the password" : "{actor} ha rimosso la password", + "You removed the password" : "Hai rimosso la password", + "An administrator removed the password" : "Un amministratore ha rimosso la password", + "{actor} added {user}" : "{actor} ha aggiunto {user}", + "You joined the conversation" : "Ti sei unito alla conversazione", + "{actor} joined the conversation" : "{actor} si è unito alla conversazione", + "You added {user}" : "Hai aggiunto {user}", + "{actor} added you" : "{actor} ti ha aggiunto", + "An administrator added you" : "Un amministratore ti ha aggiunto", + "An administrator added {user}" : "Un amministratore ha aggiunto {user}", + "You left the conversation" : "Hai abbandonato la conversazione", + "{actor} left the conversation" : "{actor} ha abbandonato la conversazione", + "{actor} removed {user}" : "{actor} ha rimosso {user}", + "You removed {user}" : "Hai rimosso {user}", + "{actor} removed you" : "{actor} ti ha rimosso", + "An administrator removed you" : "Un amministratore ti ha rimosso", + "An administrator removed {user}" : "Un amministratore ha rimosso {user}", + "{actor} invited {federated_user}" : "{actor} ha invitato {federated_user}", + "You invited {federated_user}" : "Hai invitato {federated_user}", + "You accepted the invitation" : "Hai accettato l'invito", + "{actor} invited you" : "{actor} ti ha invitato", + "An administrator invited you" : "Un amministratore ti ha invitato", + "An administrator invited {federated_user}" : "Un amministratore ha invitato {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} ha accettato l'invito", + "{actor} removed {federated_user}" : "{actor} ha rimosso {federated_user}", + "You removed {federated_user}" : "Hai rimosso {federated_user}", + "You declined the invitation" : "Hai rifiutato l'invito", + "An administrator removed {federated_user}" : "Un amministratore ha rimosso {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ha rifiutato l'invito", + "{actor} added group {group}" : "{actor} ha aggiunto il gruppo {group}", + "You added group {group}" : "Hai aggiunto il gruppo {group}", + "An administrator added group {group}" : "Un amministratore ha aggiunto il gruppo {group}", + "{actor} removed group {group}" : "{actor} ha rimosso il gruppo {group}", + "You removed group {group}" : "Hai rimosso il gruppo {group}", + "An administrator removed group {group}" : "Un amministratore ha rimosso il gruppo {group}", + "{actor} added team {circle}" : "{actor} ha aggiunto il team {circle}", + "You added team {circle}" : "Hai aggiunto il team {circle}", + "An administrator added team {circle}" : "Un amministratore ha aggiunto il team {circle}", + "{actor} removed team {circle}" : "{actor} ha rimosso il team {circle}", + "You removed team {circle}" : "Hai rimosso il team {circle}", + "An administrator removed team {circle}" : "Un amministratore ha rimosso il team {circle}", + "{actor} added {phone}" : "{actor} ha aggiunto {phone}", + "You added {phone}" : "Hai aggiunto {phone}", + "An administrator added {phone}" : "Un amministratore ha aggiunto {phone}", + "{actor} removed {phone}" : "{actor} ha rimosso {phone}", + "You removed {phone}" : "Hai rimosso {phone}", + "An administrator removed {phone}" : "Un amministratore ha rimosso {phone}", + "{actor} promoted {user} to moderator" : "{actor} ha promosso {user} a moderatore", + "You promoted {user} to moderator" : "Hai promosso {user} a moderatore", + "{actor} promoted you to moderator" : "{actor} ti ha promosso a moderatore", + "An administrator promoted you to moderator" : "Un amministratore ti ha promosso a moderatore", + "An administrator promoted {user} to moderator" : "Un amministratore ha promosso {user} a moderatore", + "{actor} demoted {user} from moderator" : "{actor} ha rimosso {user} da moderatore", + "You demoted {user} from moderator" : "Hai rimosso {user} da moderatore", + "{actor} demoted you from moderator" : "{actor} ti ha rimosso da moderatore", + "An administrator demoted you from moderator" : "Un amministratore ti ha rimosso da moderatore", + "An administrator demoted {user} from moderator" : "Un amministratore ha rimosso {user} da moderatore", + "{actor} shared a file which is no longer available" : "{actor} ha condiviso un file che non è più disponibile", + "You shared a file which is no longer available" : "Hai condiviso un file che non è più disponibile", + "File shares are currently not supported in federated conversations" : "La condivisione dei file non è al momento supportata nelle conversazioni federate", + "The shared location is malformed" : "La posizione condivisa è errata", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ha configurato Matterbridge per sincronizzare questa conversazione con altre chat", + "You set up Matterbridge to synchronize this conversation with other chats" : "Hai configurato Matterbridge per sincronizzare questa conversazione con altre chat", + "{actor} created thread {title}" : "{actor} ha creato l'argomento {title}", + "You created thread {title}" : "Hai creato l'argomento {title}", + "{actor} renamed thread {title}" : "{actor} ha rinominato l'argomento {title}", + "You renamed thread {title}" : "Hai rinominato l'argomento {title}", + "{actor} updated the Matterbridge configuration" : "{actor} ha aggiornato la configurazione di Matterbridge", + "You updated the Matterbridge configuration" : "Hai aggiornato la configurazione di Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ha rimosso la configurazione di Matterbridge", + "You removed the Matterbridge configuration" : "Hai rimosso la configurazione di Matterbridge", + "{actor} started Matterbridge" : "{actor} ha avviato Matterbridge", + "You started Matterbridge" : "Hai avviato Matterbridge", + "{actor} stopped Matterbridge" : "{actor} ha fermato Matterbridge", + "You stopped Matterbridge" : "Hai fermato Matterbridge", + "{actor} deleted a message" : "{actor} ha eliminato un messaggio", + "You deleted a message" : "Hai eliminato un messaggio", + "{actor} edited a message" : "{actor} ha modificato il messaggio", + "You edited a message" : "Hai modificato il messaggio", + "{actor} deleted a reaction" : "{actor} ha eliminato una reazione", + "You deleted a reaction" : "Hai eliminato una reazione", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Hai impostato la scadenza dei messaggi in %n settimana","Hai impostato la scadenza dei messaggi in %n settimane","Hai impostato la scadenza dei messaggi in %n settimane"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Hai impostato la scadenza dei messaggi in %n giorno","Hai impostato la scadenza dei messaggi in %n giorni","Hai impostato la scadenza dei messaggi in %n giorni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Hai impostato la scadenza dei messaggi in %n ora","Hai impostato la scadenza dei messaggi in %n ore","Hai impostato la scadenza dei messaggi in %n ore"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Hai impostato la scadenza dei messaggi in %n minuto","Hai impostato la scadenza dei messaggi in %n minuti","Hai impostato la scadenza dei messaggi in %n minuti"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ha impostato la scadenza dei messaggi in %n settimana","{actor} ha impostato la scadenza dei messaggi in %n settimane","{actor} ha impostato la scadenza dei messaggi in %n settimane"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ha impostato la scadenza dei messaggi in %n giorno","{actor} ha impostato la scadenza dei messaggi in %n giorni","{actor} ha impostato la scadenza dei messaggi in %n giorni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ha impostato la scadenza dei messaggi in %n ora","{actor} ha impostato la scadenza dei messaggi in %n ore","{actor} ha impostato la scadenza dei messaggi in %n ore"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ha impostato la scadenza dei messaggi in %n minuto","{actor} ha impostato la scadenza dei messaggi in %n minuti","{actor} ha impostato la scadenza dei messaggi in %n minuti"], + "{actor} disabled message expiration" : "{actor} ha disattivato la scadenza dei messaggi ", + "You disabled message expiration" : "Hai disattivato la scadenza dei messaggi", + "{actor} cleared the history of the conversation" : "{actor} ha cancellato la cronologia della conversazione", + "You cleared the history of the conversation" : "Hai cancellato la cronologia della conversazione", + "{actor} set the conversation picture" : "{actor} ha impostato l'icona della conversazione", + "You set the conversation picture" : "Hai impostato l'icona della conversazione", + "{actor} removed the conversation picture" : "{actor} ha rimosso l'icona della conversazione", + "You removed the conversation picture" : "Hai rimosso l'immagine della conversazione", + "{actor} ended the poll {poll}" : "{actor} ha concluso il sondaggio {poll}", + "You ended the poll {poll}" : "Hai concluso il sondaggio {poll}", + "{actor} started the video recording" : "{actor} ha avviato la registrazione video", + "You started the video recording" : "Hai avviato la registrazione video", + "{actor} stopped the video recording" : "{actor} ha interrotto la registrazione video", + "You stopped the video recording" : "Hai interrotto la registrazione video", + "{actor} started the audio recording" : "{actor} ha avviato la registrazione audio", + "You started the audio recording" : "Hai avviato la registrazione audio", + "{actor} stopped the audio recording" : "{actor} ha interrotto la registrazione audio", + "You stopped the audio recording" : "Hai interrotto la registrazione audio", + "The recording failed" : "La registrazione non è riuscita", + "Someone voted on the poll {poll}" : "Qualcuno ha votato nel sondaggio {poll}", + "Message deleted by author" : "Messaggio eliminato dall'autore", + "Message deleted by {actor}" : "Messaggio eliminato da {actor}", + "Message deleted by you" : "Messaggio eliminato da te", + "Deleted user" : "Utente eliminato", + "Unknown number" : "Numero sconosciuto", + "Administration" : "Amministrazione", + "System" : "Sistema", + "%s (guest)" : "%s (ospite)", + "Missed call" : "Chiamata persa", + "Unanswered call" : "Chiamata non risposta", + "Call ended (Duration {duration})" : "Chiamata terminata (Durata {duration}) ", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata è stata terminata in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ha terminato la chiamata (Durata {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["La chiamata con %n ospite è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})","La chiamata con %n ospiti è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})","La chiamata con %n ospiti è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["La chiamata con %n ospite è terminata (Durata {duration})","La chiamata con %n ospiti è terminata (Durata {duration})","La chiamata con %n ospiti è terminata (Durata {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ha terminato la chiamata con %n ospite (Durata {duration})","{actor} ha terminato la chiamata con %n ospiti (Durata {duration})","{actor} ha terminato la chiamata con %n ospiti (Durata {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1} ended (Duration {duration})" : "La chiamata con {user1} è terminata (Durata {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1} ospite (Durata {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1} e {user2} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "La chiamata con {user1} e {user2} è terminata (Durata {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1} e {user2} (Durata {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2} e {user3} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "La chiamata con {user1}, {user2} e {user3} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2} e {user3} (Durata {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3} e {user4} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3} e {user4} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2}, {user3} e {user4} (Durata {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3}, {user4} e {user5} è terminata, in quanto ha raggiunto la massima durata per le chiamate (Durata {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "La chiamata con {user1}, {user2}, {user3}, {user4} e {user5} è terminata (Durata {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ha terminato la chiamata con {user1}, {user2}, {user3}, {user4} e {user5} (Durata {duration})", + "Message of {user} in {conversation}" : "Messaggio di {user} in {conversation}", + "Message of {user}" : "Messaggio di {user}", + "Message of a deleted user in {conversation}" : "Messaggio di un utente eliminato in {conversation}", + "Talk conversations" : "Conversazioni di Talk", + "Talk to %s" : "Parla con %s", + "An error occurred. Please contact your administrator." : "Si è verificato un errore. Per favore, contatta il tuo amministratore.", + "Storage quota exceeded" : "Quota di archiviazione superata", + "File not found" : "File non trovato", + "File is not shared, or shared but not with the user" : "Il file non è condiviso, o condiviso ma non con l'utente", + "No account available to delete." : "Nessun account disponibile da eliminare.", + "Poll" : "Sondaggio", + "Password needs to be set" : "Bisogna impostare una password", + "Uploading the file failed" : "Il caricamento del file è fallito", + "No image file provided" : "Nessun file immagine fornito", + "File is too big" : "Il file è troppo grande", + "Invalid file provided" : "File fornito non valido", + "Invalid image" : "Immagine non valida ", + "Unknown filetype" : "Tipo di file sconosciuto ", + "Talk mentions" : "Menzioni di Talk", + "More conversations" : "Più conversazioni", + "Say hi to your friends and colleagues!" : "Saluta i tuoi amici e i tuoi colleghi!", + "No unread mentions" : "Nessuna menzione non letta", + "Call in progress" : "Chiamata in corso", + "You were mentioned" : "Sei stato menzionato", + "Write to conversation" : "Scrivi nella conversazione", + "Writes event information into a conversation of your choice" : "Scrive le informazioni di evento in una conversazione di tua scelta", + "Missing email field in header line" : "Indirizzo email mancante nell'intestazione", + "Following lines are invalid: %s" : "Le seguenti linee non sono valide: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s ti ha invitato nella conversazione \"%2$s\".", + "You were invited to conversation \"%s\"." : "Hai ricevuto un invito per la conversazione \"%s\".", + "Conversation invitation" : "Inviti di conversazione", + "Scheduled time" : "Orario programmato", + "Description" : "Descrizione", + "You can also dial-in via phone with the following details" : "Puoi accedere anche tramite telefono con i seguenti dettagli", + "Dial-in information" : "Informazioni di accesso", + "Meeting ID" : "ID riunione", + "Your PIN" : "Il tuo PIN", + "Click the button below to join the lobby now." : "Premi il bottone in basso per entrare nella stanza ora.", + "Click the link below to join the lobby now." : "Premi il collegamento in basso per entrare nella stanza adesso.", + "Join lobby for \"%s\"" : "Entra nella stanza per \"%s\"", + "Click the button below to join the conversation now." : "Premi il bottone in basso per entrare nella conversazione ora.", + "Click the link below to join the conversation now." : "Premi il collegamento in basso per entrare nella conversazione ora.", + "Join \"%s\"" : "Entra in \"%s\"", + "Meeting" : "Riunione", + "Password request: %s" : "Password richiesta: %s", + "Private conversation" : "Conversazione privata", + "Deleted user (%s)" : "Utente eliminato (%s)", + "Failed to upload call recording" : "Caricamento della registrazione della chiamata fallita", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Il server di registrazione ha fallito il caricamento della chiamata {call}. Per favore, contatta un amministratore.", + "Dismiss notification" : "Cancella notifica", + "Call recording now available" : "Registrazione della chiamata ora disponibile", + "The recording for the call in {call} was uploaded to {file}." : "La registrazione della chiamata in {call} è stata caricata su {file}.", + "Transcript now available" : "Trascrizione ora disponibile", + "The transcript for the call in {call} was uploaded to {file}." : "Trascrizione della chiamata in {call} è stata caricata in {file}.", + "Failed to transcript call recording" : "Impossibile trascrivere la registrazione della chiamata", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Il server ha fallito la trascrizione della registrazione nel file {file} per la chiamata {call}. Per favore, contatta un amministratore.", + "Call summary now available" : "Riassunto della chiamata ora disponibile", + "The summary for the call in {call} was uploaded to {file}." : "Il riassunto per la chiamata {call} è stato caricato su {file}. ", + "Failed to summarize call recording" : "Impossibile riassumere la registrazione della chiamata", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Il server ha fallito il riassunto della registrazione del file {file} per la chiamata in {call}. Contatta un amministratore.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} ti ha invitato ad entrare nella stanza {roomName} su {remoteServer}", + "Accept" : "Accetta", + "Decline" : "Rifiuta", + "{user1} invited you to a federated conversation" : "{user1} ti ha invitato in una conversazione federata", + "Someone reacted" : "Qualcuno ti ha contattato", + "New message" : "Nuovo messaggio", + "Reminder" : "Promemoria", + "Someone mentioned you" : "Qualcuno ti ha menzionato", + "Notification" : "Notifica", + "Someone reacted in a private conversation" : "Qualcuno ha reagito in una conversazione privata", + "You received a message in a private conversation" : "Hai ricevuto un messaggio in una conversazione privata", + "Reminder in a private conversation" : "Promemoria in una conversazione privata", + "Someone mentioned you in a private conversation" : "Qualcuno ti ha menzionato in una conversazione privata", + "Notification in a private conversation" : "Notifica in una conversazione privata", + "Reminder: You in {call}" : "Promemoria: Te stesso in {call}", + "Reminder: {user} in {call}" : "Promemoria: {user} in {call}", + "Reminder: Deleted user in {call}" : "Promemoria: Utente eliminato in {call}", + "Reminder: {guest} (guest) in {call}" : "Promemoria: {guest} (ospite) in {call}", + "Reminder: Guest in {call}" : "Promemoria: Ospite in {call}", + "{user} reacted with {reaction}" : "{user} ha reagito con {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} ha reagito con {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "L'utente eliminato ha reagito con {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (ospite) ha reagito con {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Ospite ha reagito con {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Utente eliminato in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Ospite in {call}", + "{user} sent you a private message" : "{user} ti ha inviato un messaggio privato", + "{user} sent a message in conversation {call}" : "{user} ha inviato un messaggio nella conversazione {call}", + "A deleted user sent a message in conversation {call}" : "Un utente eliminato ha inviato un messaggio nella conversazione {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (ospite) ha inviato un messaggio nella conversazione {call}", + "A guest sent a message in conversation {call}" : "Un ospite ha inviato un messaggio nella conversazione {call}", + "{user} replied to your private message" : "{user} ha risposto al tuo messaggio privato", + "{user} replied to your message in conversation {call}" : "{user} ha risposto al tuo messaggio nella conversazione {call}", + "A deleted user replied to your message in conversation {call}" : "Un utente eliminato ha risposto al tuo messaggio nella conversazione {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (ospite) ha risposto al tuo messaggio nella conversazione {call}", + "A guest replied to your message in conversation {call}" : "Un ospite ha risposto al tuo messaggio nella conversazione {call}", + "Reminder: You in private conversation {call}" : "Promemoria: Te stesso nella conversazione privata {call}", + "Reminder: A deleted user in private conversation {call}" : "Promemoria: Un utente eliminato nella conversazione privata {call}", + "Reminder: {user} in private conversation" : "Promemoria: {user} in una conversazione privata", + "Reminder: You in conversation {call}" : "Promemoria: Te stesso nella conversazione {call}", + "Reminder: {user} in conversation {call}" : "Promemoria: {user} nella conversazione {call}", + "Reminder: A deleted user in conversation {call}" : "Promemoria: Un utente eliminato nella conversazione {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Promemoria: {guest} (ospite) nella conversazione {call}", + "Reminder: A guest in conversation {call}" : "Promemoria: Un ospite nella conversazione {call}", + "{user} reacted with {reaction} to your private message" : "{user} ha reagito con {reaction} al tuo messaggio privato", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utente eliminato ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un ospite ha reagito con {reaction} al tuo messaggio nella conversazione {call}", + "{user} mentioned you in a private conversation" : "{user} ti ha menzionato in una conversazione privata", + "{user} mentioned group {group} in conversation {call}" : "{user} ha menzionato il gruppo {group} nella conversazione {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} ha menzionato il team {team} nella conversazione {call}", + "{user} mentioned everyone in conversation {call}" : "{user} ha menzionato chiunque nella conversazione {call}", + "{user} mentioned you in conversation {call}" : "{user} ti ha menzionato nella conversazione {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Un utente eliminato ha menzionato il gruppo {group} nella conversazione {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Un utente eliminato ha menzionato il team {team} nella conversazione {call}", + "A deleted user mentioned everyone in conversation {call}" : "Un utente eliminato ha menzionato chiunque nella conversazione {call}", + "A deleted user mentioned you in conversation {call}" : "Un utente eliminato ti ha menzionato nella conversazione {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (ospite) ha menzionato il gruppo {group} nella conversazione {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (ospite) ha menzionato il team {team} nella conversazione {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (ospite) ha menzionato chiunque nella conversazione {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (ospite) ti ha menzionato nella conversazione {call}", + "A guest mentioned group {group} in conversation {call}" : "Un ospite ha menzionato il gruppo {group} nella conversazione {call}", + "A guest mentioned team {team} in conversation {call}" : "Un ospite ha menzionato il team {team} nella conversazione {call}", + "A guest mentioned everyone in conversation {call}" : "Un ospite ha menzionato chiunque nella conversazione {call}", + "A guest mentioned you in conversation {call}" : "Un ospite ti ha menzionato nella conversazione {call}", + "View message" : "Vedi messaggio", + "Dismiss reminder" : "Rimuovi promemoria", + "View chat" : "Visualizza chat", + "{user} invited you to a group conversation: {call}" : "{user} ti ha invitato a una conversazione di gruppo: {call}", + "Join call" : "Unisciti alla chiamata", + "Answer call" : "Rispondi alla chiamata", + "{user} would like to talk with you" : "{user} vorrebbe parlare con te", + "Call back" : "Richiama", + "You missed a call from {user}" : "Hai perso una chiamata da {user}", + "Accept call" : "Accetta chiamata", + "Incoming phone call from {call}" : "Chiamata telefonica in arrivo da {call}", + "You missed a phone call from {call}" : "Hai una chiamata telefonica persa da {call}", + "A group call has started in {call}" : "Una chiamata di gruppo è iniziata in {call}", + "You missed a group call in {call}" : "Hai perso una chiamata di gruppo in {call}", + "{email} is requesting the password to access {file}" : "{email} sta richiedendo la password per accedere a {file}", + "{email} tried to request the password to access {file}" : "{email} ha provato a richiedere la password per accedere a {file}", + "Someone is requesting the password to access {file}" : "Qualcuno sta richiedendo la password per accedere a {file}", + "Someone tried to request the password to access {file}" : "Qualcuno ha provato a richiedere la password per accedere a {file}", + "Open settings" : "Apri impostazioni", + "Hosted signaling server added" : "Server di segnalazione aggiunto", + "The hosted signaling server is now configured and will be used." : "Il server di segnalazione ospitato è ora configurato e sarà utilizzato.", + "Hosted signaling server removed" : "Server di segnalazione rimosso", + "The hosted signaling server was removed and will not be used anymore." : "Il server di segnalazione ospitato è stato rimosso e non sarà più utilizzato.", + "Hosted signaling server changed" : "Server di signaling modificato", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "L'account del server di segnalazione ospitato ha modificato lo stato da \"{oldstatus}\" a \"{newstatus}\".", + "pending" : "in sospeso", + "active" : "attivo", + "expired" : "scaduto", + "blocked" : "bloccato", + "error" : "errore", + "The certificate of {host} expires in {days} days" : "Il certificato di {host} scade in {days} giorni", + "The certificate of {host} expired" : "Il certificato di {host} è scaduto", + "Contact via Talk" : "Contatto tramite Talk", + "Open Talk" : "Apri Talk", + "Default" : "Predefinita", + "Presentation" : "Presentazione", + "Conversations" : "Conversazioni", + "Messages in current conversation" : "Messaggi nella conversazione corrente", + "{user}" : "{user}", + "Messages" : "Messaggi", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messaggi in altre conversazioni", + "One-to-one rooms always need to show the other users avatar" : "Le stanze uno-ad-uno devono sempre mostrare l'avatar degli altri utenti.", + "Invalid emoji character" : "Carattere emoji non valido", + "Invalid background color" : "Colore di sfondo non valido", + "Avatar image is not square" : "L'immagine personale non è quadrata", + "Room {number}" : "Stanza {number}", + "Other" : "Altro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Richiesta della prova non riuscita perché il server di prova non è raggiungibile. Ritenta più tardi.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Si è verificato un problema con l'autenticazione di questa istanza. Forse non è raggiungibile dall'esterno per verificare l'URL.", + "Something unexpected happened." : "Si è verificato qualcosa di inatteso.", + "The URL is invalid." : "L'URL non è valido.", + "An HTTPS URL is required." : "È richiesto un URL HTTPS.", + "The email address is invalid." : "L'indirizzo di posta non è valido.", + "The language is invalid." : "La lingua non è valida.", + "The country is invalid." : "La nazione non è valida.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Si è verificato un problema con la richiesta della prova. Controlla i registri per ulteriori informazioni.", + "Too many requests are send from your servers address. Please try again later." : "Troppe richieste inviate dall'indirizzo del tuo server. Riprova più tardi.", + "There is already a trial registered for this Nextcloud instance." : "Esiste già una versione di prova registrata per questa istanza di Nextcloud.", + "Something unexpected happened. Please try again later." : "Si è verificato qualcosa di inatteso. Riprova più tardi.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Richiesta della prova non riuscita perché il server di prova si è comportato in modo errato. Ritenta più tardi.", + "Trial requested but failed to get account information. Please check back later." : "Versione di prova richiesta, ma impossibile ottenere le informazioni sull'account. Controlla più tardi.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Si è verificato un problema con l'autenticazione di questa richiesta. Forse non è raggiungibile dall'esterno per verificare l'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Impossibile recuperare le informazioni sull'account perché il server di prova si è comportato in modo errato. Controlla più tardi.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Si è verificato un problema con il recupero delle informazioni sull'account. Controlla i registri per ulteriori informazioni.", + "There is no such account registered." : "Non c'è nessun account di questo tipo registrato.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Impossibile recuperare le informazioni sull'account perché il server di prova non è raggiungibile. Controlla più tardi.", + "Deleting the hosted signaling server account failed. Please check back later." : "Eliminazione dell'account del server di segnalazione ospitato non riuscita. Controlla più tardi.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Impossibile eliminare l'account perché il server di prova si è comportato in modo errato. Controlla più tardi.", + "There is a problem with deleting the account. Please check your logs for further information." : "Si è verificato un problema con l'eliminazione dell'account. Controlla i registri per ulteriori informazioni.", + "Too many requests are sent from your servers address. Please try again later." : "Troppe richieste inviate dall'indirizzo del tuo server. Riprova più tardi.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Impossibile eliminare l'account perché il server di prova non è raggiungibile. Controlla più tardi.", + "Note to self" : "Nota a me stesso", + "A place for your private notes, thoughts and ideas" : "Un posto per i tuoi appunti, pensieri e idee privati", + "Transcript is AI generated and may contain mistakes" : "La trascrizione è generata dall'IA e potrebbe contenere errori.", + "Summary is AI generated and may contain mistakes" : "Il riassunto è generato dall'IA e potrebbe contenere errori.", + "Let's get started!" : "Iniziamo!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** è una piattaforma di comunicazione sicura e auto-gestita che si integra perfettamente con l'ecosistema Nextcloud.\n\n#### Caratteristiche principali di Nextcloud Talk:\n\n* Chat e messaggistica in chat private e di gruppo\n* Chiamate vocali e videochiamate\n* Condivisione di file e integrazione con altre app Nextcloud\n* Impostazioni di conversazione personalizzabili, moderazione e controlli sulla privacy\n* Web, desktop e mobile (iOS e Android)\n* Comunicazione privata e sicura\n\nPer saperne di più, consulta la [documentazione utente](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Benvenuto su Nextcloud Talk\n\nNextcloud Talk è un'applicazione di messaggistica privata e potente che si integra con Nextcloud. Chat private o di gruppo, collabora tramite chiamate vocali e videochiamate, organizza webinar ed eventi, personalizza le tue conversazioni e molto altro ancora.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatta i testi per creare messaggi ricchi\n\nIn Nextcloud Talk, puoi utilizzare la sintassi Markdown per formattare i tuoi messaggi. Ad esempio, puoi applicare la formattazione **grassetto** o *corsivo*, oppure `evidenziare il testo come codice`. Puoi anche creare tabelle e aggiungere intestazioni al tuo testo.\n\nHai bisogno di correggere un errore di battitura o modificare la formattazione? Modifica il tuo messaggio facendo clic su “Modifica messaggio” nel menu del messaggio.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Aggiungi allegati e collegamenti\n\nAllega file dal tuo Nextcloud Hub utilizzando il pulsante “+”. Condividi elementi da File e varie applicazioni Nextcloud. Alcune applicazioni supportano anche widget interattivi, ad esempio l'applicazione Testo.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 🔗 Aggiungi allegati e collegamenti\n\nAllega file dal tuo Nextcloud Hub utilizzando il pulsante %s. Condividi elementi da File e varie applicazioni Nextcloud. Alcune applicazioni supportano anche widget interattivi, ad esempio l'applicazione Testo.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "È possibile rispondere ai messaggi, inoltrarli ad altre chat e persone oppure copiarne il contenuto.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Fai di più con Smart Picker\n\nBasta digitare “/” o andare al menu “+” per aprire Smart Picker, dove puoi allegare vari contenuti ai tuoi messaggi. Puoi configurare Smart Picker per poter aggiungere elementi dalle app Nextcloud, GIF, posizioni sulla mappa, contenuti generati dall'intelligenza artificiale e molto altro ancora.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gestisci le impostazioni delle conversazioni\n\nNel menu delle conversazioni puoi accedere a varie impostazioni per gestire le tue conversazioni, come ad esempio:\n* Modifica le informazioni sulla conversazione\n* Gestisci le notifiche\n* Applica numerose regole di moderazione\n* Configura l'accesso e la sicurezza\n* Abilita i bot\n* e molto altro ancora!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirati Arabi Uniti", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antartide", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americane", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Isole Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia ed Erzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgio", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthelemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Stato Plurinazionale di", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius e Saba", + "Brazil" : "Brasile", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Isola Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorussia", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Isole Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, Repubblica Democratica del", + "Central African Republic" : "Repubblica Centrafricana", + "Congo" : "Congo", + "Switzerland" : "Svizzera", + "Côte d'Ivoire" : "Costa d'Avorio", + "Cook Islands" : "Isole di Cook", + "Chile" : "Cile", + "Cameroon" : "Camerun", + "China" : "Cina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Capo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Isola di Natale", + "Cyprus" : "Cipro", + "Czechia" : "Cechia", + "Germany" : "Germania", + "Djibouti" : "Gibuti", + "Denmark" : "Danimarca", + "Dominica" : "Dominica", + "Dominican Republic" : "Repubblica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egitto", + "Western Sahara" : "Sahara occidentale", + "Eritrea" : "Eritrea", + "Spain" : "Spagna", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Figi", + "Falkland Islands (Malvinas)" : "Isole Falkland (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Stati Federati di", + "Faroe Islands" : "Isole Faroe", + "France" : "Francia", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regno Unito di Gran Bretagna e Irlanda del Nord", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana Francese", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibilterra", + "Greenland" : "Groenlandia", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupa", + "Equatorial Guinea" : "Guinea Equatoriale", + "Greece" : "Grecia", + "South Georgia and the South Sandwich Islands" : "Georgia del Sud e Isole Sandwich Australi", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Isole Heard e McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croazia", + "Haiti" : "Haiti", + "Hungary" : "Ungheria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israele", + "Isle of Man" : "Isola di Man", + "India" : "India", + "British Indian Ocean Territory" : "Territorio Britannico dell'Oceano Indiani", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Repubblica Islamica dell'", + "Iceland" : "Islanda", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Giamaica", + "Jordan" : "Giordania", + "Japan" : "Giappone", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirghizistan", + "Cambodia" : "Cambogia", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "Saint Kitts e Nevis", + "Korea, Democratic People's Republic of" : "Corea, Repubblica Democratica Popolare di", + "Korea, Republic of" : "Corea, Repubblica di", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Isole Cayman", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Repubblica Democratica Popolare del Laos", + "Lebanon" : "Libano", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituania", + "Luxembourg" : "Lussemburgo", + "Latvia" : "Lettonia", + "Libya" : "Libia", + "Morocco" : "Marocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavia, Repubblica di", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (parte francese)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Isole Marshall", + "North Macedonia" : "Macedonia del Nord", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Isole Marianne settentrionali", + "Martinique" : "Martinica", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldive", + "Malawi" : "Malawi", + "Mexico" : "Messico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambico", + "Namibia" : "Namibia", + "New Caledonia" : "Nuova Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Isola Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Paesi Bassi", + "Norway" : "Norvegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nuova Zelanda", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Perù", + "French Polynesia" : "Polinesia Francese", + "Papua New Guinea" : "Papua Nuova Guinea", + "Philippines" : "Filippine", + "Pakistan" : "Pakistan", + "Poland" : "Polonia", + "Saint Pierre and Miquelon" : "Saint Pierre e Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Stato di", + "Portugal" : "Portogallo", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federazione Russa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Isole Salomone", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Svezia", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sant'Elena, Ascensione e Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard e Jan Mayen", + "Slovakia" : "Slovacchia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan del Sud", + "Sao Tome and Principe" : "Sao Tome e Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (parte olandese)", + "Syrian Arab Republic" : "Repubblica Araba Siriana", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Isole Turks e Caicos", + "Chad" : "Ciad", + "French Southern Territories" : "Terre Australi Francesi", + "Togo" : "Togo", + "Thailand" : "Thailandia", + "Tajikistan" : "Tagikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Est", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turchia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, provincia della Cina", + "Tanzania, United Republic of" : "Tanzania, Repubblica Unita di", + "Ukraine" : "Ucraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Isole minori esterne degli Stati Uniti d'America", + "United States of America" : "Stati Uniti d'America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Città del Vaticano", + "Saint Vincent and the Grenadines" : "Saint Vincent e Grenadine", + "Venezuela, Bolivarian Republic of" : "Venezuela, Repubblica Bolivariana di", + "Virgin Islands, British" : "Isole Vergini, Britanniche", + "Virgin Islands, U.S." : "Isole Vergini, U.S.A.", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudafrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Sfondo sfocato", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Impossibile verificare il supporto per il caricamento WASM. Verificare manualmente se il server web supporta i file `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Il tuo server web non è configurato correttamente per fornire file `.wasm`. Si tratta in genere di un problema legato alla configurazione di Nginx. Per la sfocatura dello sfondo è necessario un aggiustamento per fornire anche i file `.wasm`. Confronta la tua configurazione Nginx con quella consigliata nella nostra documentazione.", + "Talk configuration values" : "Valori di configurazione di Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "La forzatura della durata delle chiamate è supportata solo con il cron di sistema. Abilita il cron di sistema o rimuovi la configurazione `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "I valori bassi di `max_call_duration` (attualmente impostato su %d) non sono applicabili a causa di limitazioni tecniche. Il processo in background viene eseguito solo ogni 5 minuti, quindi utilizza questi valori a tuo rischio e pericolo.", + "Federation" : "Federazione", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Si consiglia vivamente di configurare “memcache.locking” quando Talk Federation è abilitato.", + "High-performance backend" : "Motore ad alte prestazioni", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Backend ad alte prestazioni non configurato - L'esecuzione di Nextcloud Talk senza il backend ad alte prestazioni consente di gestire solo chiamate di dimensioni molto ridotte (max. 2-3 partecipanti). Configurare il backend ad alte prestazioni per garantire il corretto funzionamento delle chiamate con più partecipanti.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "L'esecuzione della modalità “conversation_cluster” del backend ad alte prestazioni è deprecata e non sarà più supportata nella prossima versione. Il backend ad alte prestazioni supporta attualmente il clustering reale, che dovrebbe essere utilizzato al suo posto.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "La definizione di più backend ad alte prestazioni è deprecata e non sarà più supportata nella prossima versione. È invece necessario configurare un bilanciatore di carico insieme a server di segnalazione in cluster e configurarlo nelle impostazioni di Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "La chiave pubblica memorizzata per l'algoritmo %1$s non corrisponde alla chiave privata memorizzata. Eseguire %2$s per risolvere il problema.", + "High-performance backend not configured correctly. Run %s for details." : "Backend ad alte prestazioni non configurato correttamente. Eseguire %s per i dettagli.", + "High-performance backend not configured correctly" : "Backend ad alte prestazioni non configurato correttamente", + "Error: Cannot connect to server" : "Errore: impossibile connettersi al server", + "Error: Server did not respond with proper JSON" : "Errore: il server non ha risposto con il JSON corretto", + "Error: Certificate expired" : "Errore: Certificato scaduto", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Errore: gli orari di sistema del server Nextcloud e del server backend ad alte prestazioni non sono sincronizzati. Assicurati che entrambi i server siano collegati a un server di riferimento orario o sincronizza manualmente l'ora.", + "Could not get version" : "Impossibile ottenere la versione", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Errore: versione in esecuzione: {version}; Il server deve essere aggiornato per essere compatibile con questa versione di Talk", + "Error: Server responded with: {error}" : "Errore: il server ha risposto con: {error}", + "Error: Unknown error occurred" : "Errore: si è verificato un errore sconosciuto", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Avviso: versione in esecuzione: {version}; Il server non supporta tutte le funzionalità di questa versione di Talk, funzionalità mancanti: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Si consiglia vivamente di configurare una cache di memoria quando si esegue Nextcloud Talk con un backend ad alte prestazioni.", + "Client Push" : "Client Push", + "Recording backend" : "Backend di registrazione", + "Using the recording backend requires a High-performance backend." : "L'utilizzo del backend di registrazione richiede un backend ad alte prestazioni.", + "No recording backend configured" : "Nessun backend di registrazione configurato", + "SIP configuration" : "Configurazione SIP", + "Using the SIP functionality requires a High-performance backend." : "L'utilizzo della funzionalità SIP richiede un backend ad alte prestazioni.", + "No SIP backend configured" : "Nessun backend SIP configurato", + "Invalid date, date format must be YYYY-MM-DD" : "Data non valida, il formato della data deve essere AAAA-MM-GG", + "Conversation not found" : "Conversazione non trovata", + "Path is already shared with this conversation" : "Il percorso è già condiviso con questa conversazione", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video e audio conferenze utilizzando WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, videoconferenze e audioconferenze tramite WebRTC\n\n* 💬 **Chat** Nextcloud Talk include una semplice chat di testo che consente di condividere o caricare file dall'applicazione Nextcloud Files o dal dispositivo locale e menzionare altri partecipanti.\n* 👥 **Chiamate private, di gruppo, pubbliche e protette da password!** Invita una persona, un intero gruppo o invia un collegamento pubblico per invitare qualcuno a una chiamata.\n* 🌐 **Chat federate** Partecipa a chat con altri utenti Nextcloud sui loro server\n* 💻 **Condivisione dello schermo!** Condividi il tuo schermo con i partecipanti alla tua chiamata.\n* 🚀 **Integrazione con altre applicazioni Nextcloud** come Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck e molte altre.\n* 🌉 **Sincronizzazione con altre soluzioni di chat** Con [Matterbridge](https://github.com/42wim/matterbridge/) integrato in Talk, puoi sincronizzare facilmente molte altre soluzioni di chat con Nextcloud Talk e viceversa.", + "Leave call" : "Lascia la chiamata", + "Navigating away from the page will leave the call in {conversation}" : "L'abbandono della pagina causerà l'uscita dalla chiamata in {conversation}", + "Stay in call" : "Rimani in conversazione", + "Error occurred when getting the conversation information" : "Si è verificato un errore durante il recupero delle informazioni sulla conversazione", + "Discuss this file" : "Discuti questo file", + "Share this file with others to discuss it" : "Condividi questo file con altri per discuterne", + "Share this file" : "Condividi questo file", + "Join conversation" : "Unisciti alla conversazione", + "This conversation is password-protected." : "Questa conversazione è protetta da password.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Abbiamo rilevato diversi tentativi di accesso con password non valida dal tuo indirizzo IP. Pertanto, il tuo prossimo tentativo sarà ritardato di 30 secondi.", + "The password is wrong. Try again." : "La password è errata. Prova ancora.", + "Password" : "Password", + "Submit" : "Invia", + "Error requesting the password." : "Errore durante la richiesta della password", + "Request password" : "Richiedi password", + "This conversation has ended" : "Questa conversazione è terminata", + "Error occurred when joining the conversation" : "Si è verificato un errore durante l'adesione alla conversazione", + "Close Talk sidebar" : "Chiudi la barra laterale di Talk", + "Open Talk sidebar" : "Aprire la barra laterale di Talk", + "Everyone" : "Tutti", + "Users and moderators" : "Utenti e moderatori", + "Moderators only" : "Solo i moderatori", + "Disable calls" : "Disabilita chiamate", + "Save changes" : "Salva le modifiche", + "Saving …" : "Salvataggio in corso...", + "Saved!" : "Salvato!", + "Limit to groups" : "Limita a gruppi", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quando almeno un gruppo è selezionato, solo le persone dei gruppi elencati possono prendere parte alla conversazione.", + "Guests can still join public conversations." : "Gli ospiti possono unirsi a conversazioni pubbliche.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Gli utenti che non possono più usare Talk verranno comunque elencati tra i partecipanti nelle loro conversazioni precedenti e verranno anche mantenuti i loro messaggi.", + "Limit using Talk" : "Limita l'utilizzo di Talk", + "Limit creating a public and group conversation" : "Limita alla creazione di una conversazione pubblica e di gruppo", + "Limit creating conversations" : "Limita la creazione di conversazioni", + "Limit starting a call" : "Limita l'inizio di una chiamata", + "Limit starting calls" : "Limita l'inizio della chiamate", + "When a call has started, everyone with access to the conversation can join the call." : "Quando una chiamata è iniziata, chiunque abbia accesso alla conversazione può unirsi alla chiamata.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "I seguenti bot sono installati su questo server. Nella documentazione puoi trovare i dettagli su come {linkstart1}creare il tuo bot{linkend} o una {linkstart2}lista di bot{linkend} da abilitare sul tuo server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nessun bot è installato su questo server. Nella documentazione puoi trovare i dettagli su come {linkstart1}creare il tuo bot{linkend} o una {linkstart2}lista di bot{linkend} da abilitare sul tuo server.", + "Description is not provided" : "Descrizione non fornita", + "Locked for moderators" : "Bloccato dai moderatori", + "Enabled" : "Abilitata", + "Disabled" : "Disattivato", + "Bots settings" : "Impostazioni dei bot", + "State" : "Stato", + "Name" : "Nome", + "Last error" : "Ultimo errore", + "Total errors count" : "Numero totale errori", + "Find more bots" : "Trova altri bot", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "I server attendibili possono essere configurati nella pagina {linkstart}Impostazioni di condivisione{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Le chat e le chiamate federate funzionano già. La gestione degli allegati sarà disponibile in una versione futura.", + "Enable Federation in Talk app" : "Abilita la federazione nell'applicazione Talk", + "Permissions" : "Permessi", + "Allow users to be invited to federated conversations" : "Consenti agli utenti di essere invitati a conversazioni federate", + "Allow users to invite federated users into conversation" : "Consenti agli utenti di invitare utenti federati nella conversazione", + "Only allow to federate with trusted servers" : "Consenti solo la federazione con server affidabili", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quando è selezionato almeno un gruppo, solo le persone appartenenti ai gruppi elencati possono invitare utenti federati alle conversazioni.", + "Groups allowed to invite federated users" : "Gruppi autorizzati a invitare utenti federati", + "Select groups …" : "Seleziona gruppi …", + "All messages" : "Tutti i messaggi", + "@-mentions only" : "solo @-menzioni", + "Off" : "Spento", + "General settings" : "Impostazioni generali", + "Default notification settings" : "Impostazioni di notifica predefinite", + "Default group notification" : "Notifica di gruppo predefinita", + "Default group notification for new groups" : "Notifica di gruppo predefinita per i nuovi gruppi", + "Integration into other apps" : "Integrazione in altre applicazioni", + "Allow conversations on files" : "Consenti conversazioni su file", + "Allow conversations on public shares for files" : "Consenti conversazioni su condivisioni pubbliche per i file", + "End-to-end encrypted calls" : "Chiamate crittografate end-to-end", + "Enable encryption" : "Abilita cifratura", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Le chiamate crittografate end-to-end con un bridge SIP configurato richiedono una versione più recente del backend ad alte prestazioni e del bridge SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Al momento i client mobili non supportano le chiamate crittografate end-to-end.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Facendo clic sul pulsante sopra le informazioni nel modulo sono inviate ai server di Struktur AG. Ulteriori informazioni sono disponibili su {linkstart}spreed.eu{linkend}.", + "Pending" : "In corso", + "Error" : "Errore", + "Blocked" : "Bloccati", + "Active" : "Attivo", + "Expired" : "Scaduto", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "La prova non può essere richiesta. Riprova più tardi.", + "The account could not be deleted. Please try again later." : "Non è stato possibile eliminare l'account. Riprova più tardi.", + "Hosted High-performance backend" : "Backend hosted ad alte prestazioni", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Il nostro partner Struktur AG fornisce un servizio in cui è possibile richiedere un server di segnalazione ospitato. Per questo è sufficiente compilare il modulo sottostante e Nextcloud lo richiederà. Una volta impostato il server, le credenziali saranno riempite automaticamente. Ciò sovrascriverà le impostazioni esistenti del server di segnalazione.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se il tuo account backend ad alte prestazioni include le funzionalità STUN e/o TURN, le impostazioni verranno aggiornate di conseguenza.", + "URL of this Nextcloud instance" : "URL di questa istanza Nextcloud", + "Full name of the user requesting the trial" : "Nome completo dell'utente che richiede la prova", + "Email of the user" : "Indirizzo di posta dell'utente", + "Language" : "Lingua", + "Country" : "Nazione", + "Request signaling server trial" : "Richiesta della prova del server di segnalazione", + "You can see the current status of your hosted signaling server in the following table." : "Puoi visualizzare lo stato attuale del server di segnalazione ospitato nella seguente tabella.", + "Status" : "Stato", + "Created at" : "Creato il", + "Expires at" : "Scade il", + "Limits" : "Limiti", + "STUN included" : "STUN incluso", + "Yes" : "Sì", + "No" : "No", + "TURN included" : "TURN incluso", + "Delete the signaling server account" : "Elimina l'account del server di segnalazione", + "_%n user_::_%n users_" : ["%n utente","%n utenti","%n utenti"], + "Installed version: {version}" : "Versione installata: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "È possibile installare Matterbridge per collegare Nextcloud Talk ad altri servizi. Per ulteriori dettagli, visitare la {linkstart1}pagina GitHub{linkend}. Il download e l'installazione dell'app potrebbero richiedere un po' di tempo. In caso di timeout, installarla manualmente dall'{linkstart2}App Store di Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Il file binario Matterbridge ha autorizzazioni errate. Assicurati che il file binario Matterbridge sia di proprietà dell'utente corretto e che possa essere eseguito. Si trova in “/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "Il binario di Matterbridge non è stato trovato o non può essere eseguito.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Puoi impostare il percorso del binario di Matterbridge anche manualmente tramite la configurazione. Controlla la {linkstart}documentazione di integrazione di Matterbridge{linkend} per ulteriori informazioni.", + "Downloading …" : "Scaricamento…", + "Install Talk Matterbridge" : "Installa Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Si è verificato un errore durante l'installazione dell'applicazione Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Si è verificato un errore durante l'installazione di Talk Matterbridge. Installalo manualmente.", + "Failed to execute Matterbridge binary." : "Esecuzione del binario di Matterbridge non riuscita.", + "Matterbridge integration" : "Integrazione con Matterbridge", + "Enable Matterbridge integration" : "Attiva l'integrazione con Matterbridge", + "Status: Checking connection" : "Stato: controllo della connessione", + "OK: Running version: {version}" : "OK: versione in esecuzione: {version}", + "Error: Server seems to be a Signaling server" : "Errore: il server sembra essere un server di segnalazione", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Errore: gli orari di sistema del server Nextcloud e del server di backend di registrazione non sono sincronizzati. Assicurati che entrambi i server siano collegati a un server di sincronizzazione oraria o sincronizza manualmente l'ora.", + "Recording backend URL" : "URL del backend di registrazione", + "Validate SSL certificate" : "Convalida certificato SSL", + "Delete this server" : "Elimina questo server", + "Test this server" : "Prova questo server", + "Disabled for all calls" : "Disabilitato per tutte le chiamate", + "Enabled for all calls" : "Abilitato per tutte le chiamate", + "Configurable on conversation level by moderators" : "Configurabile a livello di conversazione dai moderatori", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Le impostazioni PHP “upload_max_filesize” o “post_max_size” consentono solo di caricare file fino a {maxUpload}.", + "Recording backend settings saved" : "Impostazioni di registrazione backend salvate", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "I moderatori potranno abilitare il consenso a livello di conversazione. Il consenso alla registrazione sarà richiesto a ciascun partecipante prima di partecipare a ogni chiamata nell'ambito di tale conversazione.", + "The consent to be recorded will be required for each participant before joining every call." : "Il consenso per la registrazione sarà richiesto ad ogni partecipante prima di accedere a ciascuna chiamata.", + "The consent to be recorded is not required." : "Il consenso per la registrazione non è necessario.", + "Recording backend configuration is only possible with a High-performance backend." : "La configurazione del backend di registrazione è possibile solo con un backend ad alte prestazioni.", + "Add a new recording backend server" : "Aggiungi un nuovo server di backend per la registrazione", + "Shared secret" : "Segreto condiviso", + "Recording consent" : "Permesso di registrazione", + "Recording transcription" : "Registrazione della trascrizione", + "Automatically transcribe call recordings with a transcription provider" : "Trascrivi automaticamente le registrazioni delle chiamate con un fornitore di servizi di trascrizione", + "Automatically summarize call recordings with transcription and summary providers" : "Riassumi automaticamente le registrazioni delle chiamate con fornitori di trascrizioni e riassunti", + "SIP configuration saved!" : "Configurazione SIP salvata!", + "SIP configuration is only possible with a High-performance backend." : "La configurazione SIP è possibile solamente con un backend ad alte prestazione.", + "Enable SIP Dial-out option" : "Abilita l'opzione chiamata in uscita SIP ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Il server di segnalazione deve essere aggiornato per supportare la funzione di chiamata in uscita SIP.", + "Do not show SIP Dial-out caller number" : "Non mostrare il numero del chiamate delle chiamate in uscita SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Il numero anonimo dovrebbe apparire come “sconosciuto” o “numero nascosto” al destinatario della chiamata.", + "Dial-out number" : "Numero di uscita", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numero in formato E164 utilizzato come numero di chiamata di riserva per le chiamate in uscita", + "Dial-out prefix" : "Prefisso in uscita", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefisso al numero utente configurato per le chiamate in uscita (il valore predefinito è `+`)", + "Restrict SIP configuration" : "Limita configurazione SIP", + "Enable SIP configuration" : "Abilita configurazione SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Solo gli utenti dei seguenti gruppi possono abilitare SIP nelle conversazioni che moderano", + "Phone number (Country)" : "Numero di telefono (Nazione)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Queste informazioni sono inviate tramite email di invito e visualizzate nella barra laterale a tutti i partecipanti.", + "Nextcloud base URL" : "URL base di Nextcloud", + "Talk Backend URL" : "URL del backend di Talk", + "WebSocket URL" : "URL del WebSocket", + "Available features" : "Funzionalità disponibili", + "Error: Websocket connection failed" : "Errore: connessione Websocket non riuscita", + "Error code" : "Codice errore", + "Error message" : "Messaggio d'errore", + "Error: Websocket connection failed. Check browser console" : "Errore: connessione Websocket non riuscita. Controllare la console del browser.", + "High-performance backend URL" : "URL del motore ad alte prestazioni", + "Missing High-performance backend warning hidden" : "Avviso nascosto relativo al backend ad alte prestazioni mancante", + "High-performance backend settings saved" : "Impostazioni backend ad alte prestazioni salvate", + "Nextcloud Talk setup not complete" : "Configurazione di Nextcloud Talk non completata", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Si prega di notare che nelle chiamate con più di 2 partecipanti senza il backend ad alte prestazioni, i partecipanti potrebbero riscontrare problemi di connettività e causare un carico elevato sui dispositivi partecipanti.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installa il backend ad alte prestazioni per garantire che le chiamate con più partecipanti funzionino senza problemi.", + "Nextcloud portal" : "Portale di Nextcloud", + "Quick installation guide" : "Guida all'Installazione Rapida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Il backend ad alte prestazioni è necessario per le chiamate e le conversazioni con più partecipanti. Senza il backend, tutti i partecipanti devono caricare individualmente il proprio video per ciascuno degli altri partecipanti, il che molto probabilmente causerà problemi di connettività e un carico elevato sui dispositivi partecipanti.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Si consiglia vivamente di configurare una cache distribuita quando si utilizza Nextcloud Talk con un backend ad alte prestazioni.", + "Add High-performance backend server" : "Aggiungi server backend ad alte prestazioni", + "Warn about connectivity issues in calls with more than 2 participants" : "Avvisa in caso di problemi di connettività nelle chiamate con più di 2 partecipanti", + "STUN server URL" : "URL server STUN", + "The server address is invalid" : "L'indirizzo del server non è valido", + "STUN settings saved" : "Impostazioni STUN salvate", + "STUN servers" : "Server STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Un server STUN è utilizzato per determinare l'indirizzo IP pubblico dei partecipanti dietro a un router.", + "Add a new STUN server" : "Aggiungi un nuovo server STUN", + "{schema} scheme must be used with a domain" : "Lo schema {schema} deve essere utilizzata con un dominio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "solo {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidati ICE validi restituiti dal server TURN", + "Error: No working ICE candidates returned by the TURN server" : "OK: Candidati ICE non funzionanti restituiti dal server TURN", + "Testing whether the TURN server returns ICE candidates" : "Verifica se il server TURN restituisce candidati", + "TURN server schemes" : "Schemi del server TURN", + "TURN server URL" : "URL server TURN", + "TURN server secret" : "Segreto del server TURN", + "TURN server protocols" : "Protocolli server TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Un server TURN viene utilizzato per inoltrare il traffico dai partecipanti dietro un firewall. Se i singoli partecipanti non possono connettersi ad altri, è molto probabile che sia richiesto un server TURN. Vedi {linkstart}questa documentazione{linkend} per le istruzioni di configurazione.", + "TURN settings saved" : "Impostazioni TURN salvate", + "TURN servers" : "Server TURN", + "Add a new TURN server" : "Aggiungi un nuovo server TURN", + "Failed" : "Non riuscito", + "OK" : "OK", + "Checking …" : "Controllo in corso…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Fallito: WebAssembly è disabilitato o non è supportato in questo browser. Abilita WebAssembly o utilizza un browser con supporto per eseguire il controllo.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Fallito: i file \".wasm\" e \".tflite\" non sono stati restituiti correttamente dal server Web. Si prega di controllare la sezione \"Requisiti di sistema\" nella documentazione di Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: i file \".wasm\" e \".tflite\" sono stati correttamente restituiti dal server web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Sembra che la configurazione PHP e Apache non sia compatibile. Si prega di notare che PHP può essere utilizzato solo con il modulo MPM_PREFORK e PHP-FPM può essere utilizzato solo con il modulo MPM_EVENT.", + "Web server setup checks" : "Verifiche della configurazione del server Web", + "Files required for virtual background can be loaded" : "È possibile caricare i file necessari per lo sfondo virtuale", + "Federated user" : "Utente federato", + "Assign participants to rooms" : "Assegna i partecipanti alle stanze", + "Configure breakout rooms" : "Configura le sessioni secondarie", + "Number of breakout rooms" : "Numero di sessioni secondarie", + "You can create from 1 to 20 breakout rooms." : "Puoi creare da 1 a 20 sessioni secondarie.", + "Assignment method" : "Metodo d'assegnazione", + "Automatically assign participants" : "Assegna automaticamente partecipanti", + "Manually assign participants" : "Assegna manualmente partecipanti", + "Allow participants to choose" : "Permetti ai partecipanti di scegliere", + "Create rooms" : "Crea stanze", + "Confirm" : "Conferma", + "Create breakout rooms" : "Crea sessioni secondarie", + "Reset" : "Ripristina", + "Delete breakout rooms" : "Elimina sessioni secondarie", + "Room {roomNumber}" : "Stanza {roomNumber}", + "Current breakout rooms and settings will be lost" : "Le attuali sessioni secondarie ed impostazioni saranno perse", + "Cancel" : "Annulla", + "Unassigned participants" : "Partecipanti non assegnati", + "Back" : "Indietro", + "Assign" : "Assegna", + "Add participant \"{user}\"" : "Aggiungi il partecipante \"{user}\"", + "Now" : "Ora", + "Invalid calendar selected" : "Selezione del calendario non valida", + "Invalid start time selected" : "Selezione del tempo di inizio non valida", + "Invalid end time selected" : "Selezione del tempo di fine non valida", + "Unknown error occurred" : "È avvenuto un errore sconosciuto", + "Sending no invitations" : "Nessun invio di inviti", + "{participant0} will receive an invitation" : "{participant0} riceverà un invito", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} riceveranno un invito", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e %n altro riceveranno un invito ","{participant0}, {participant1} e %n altri riceveranno un invito ","{participant0}, {participant1} e %n altri riceveranno un invito "], + "Invite {user}" : "Invita {user}", + "Invite all users and emails in this conversation" : "Invita tutti gli utenti e email in questa conversazione", + "Meeting created" : "Meeting creato", + "Upcoming meetings" : "Prossimi meetings", + "Loading …" : "Caricamento…", + "No upcoming meetings" : "Nessun prossimo meeting ", + "Schedule a meeting" : "Programma un meeting", + "Meeting title" : "Titolo del Meeting", + "From" : "Da", + "To" : "A", + "Calendar" : "Calendario", + "Attendees" : "Partecipanti", + "No other participants to send invitations to." : "Nessun altro partecipante a cui mandare un invito.", + "Add attendees" : "Aggiungi partecipanti", + "Save" : "Salva", + "Search participants" : "Cerca partecipanti", + "No results" : "Nessun risultato", + "Done" : "Completato", + "Disable live transcription" : "Disattiva trascrizione in tempo reale", + "Translated language" : "Lingua tradotta", + "Translated language: {languageName}" : "Lingua tradotta: {languageName}", + "Raise hand" : "Alza la mano", + "Raise hand (R)" : "Alza la mano (R)", + "Lower hand" : "Abbassa la mano", + "Lower hand (R)" : "Abbassa la mano (R)", + "Exit full screen (F)" : "Esci dalla modalità a schermo intero (F)", + "Full screen (F)" : "Schermo intero (F)", + "Speaker view" : "Visualizzazione oratore", + "Grid view" : "Vista Griglia", + "Error when trying to load the available live transcription languages" : "Errore durante il caricamento dei linguaggi disponibili per la trascrizione in tempo reale", + "Failed to enable live transcription" : "Impossibile abilitare la trascrizione in tempo reale", + "Recording consent is required" : "È necessario il consenso alla registrazione", + "This conversation is read-only" : "Questa conversazione è in sola lettura", + "Conversation not found or not joined" : "Conversazione non trovata o non avviata", + "Lobby is still active and you're not a moderator" : "La lobby è ancora attiva e tu non sei un moderatore", + "Connection failed" : "Connessione fallita", + "Reload" : "Ricarica", + "{nickName} raised their hand." : "{nickName} ha alzato la mano.", + "A participant raised their hand." : "Un partecipante ha alzato la mano.", + "Collapse stripe" : "Contrai striscia", + "Expand stripe" : "Espandi striscia", + "Previous page of videos" : "Pagina di video precedente", + "Next page of videos" : "Pagina di video successiva", + "Connecting …" : "Connessione in corso…", + "Calling …" : "Sto chiamando …", + "Waiting for {user} to join the call" : "In attesa che {user} si unisca alla chiamata", + "Waiting for others to join the call …" : "In attesa che altri si uniscano alla chiamata...", + "You can invite others in the participant tab of the sidebar" : "Puoi invitare altri nella scheda dei partecipanti della barra laterale", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puoi invitare altri nella scheda dei partecipanti della barra laterale o condividere questo collegamento per invitarli!", + "Share this link to invite others!" : "Condividi questo collegamento per invitare altri!", + "Copy link" : "Copia collegamento", + "You are not allowed to enable audio" : "Non sei autorizzato ad abilitare l'audio", + "No audio. Click to select device" : "Nessun audio. Premi per selezionare il dispositivo", + "Mute audio" : "Silenzia audio", + "Mute audio (M)" : "Silenzia audio (M)", + "Unmute audio" : "Rimuovi silenzio audio", + "Unmute audio (M)" : "Rimuovi silenzio audio (M)", + "None" : "Nessuno", + "Select a microphone" : "Seleziona un microfono", + "Select a speaker" : "Seleziona un'uscita", + "Check devices" : "Controlla dispositivi", + "Access to camera was denied" : "L'accesso alla fotocamera è stato negato", + "Error while accessing camera: It is likely in use by another program" : "Errore durante l'accesso alla fotocamera: È probabile che sia utilizzata da un altro programma", + "Error while accessing camera" : "Errore durante l'accesso alla fotocamera", + "You have been muted by a moderator" : "Sei stato silenziato da un moderatore", + "Hide presenter video" : "Nascondi video del presentatore", + "You are not allowed to enable video" : "Non sei autorizzato ad abilitare il video", + "No video. Click to select device" : "Nessun video. Premi per selezionare il dispositivo", + "Disable video" : "Disabilita video", + "Disable video (V)" : "Disabilita video (V)", + "Enable video" : "Abilita video", + "Enable video (V)" : "Abilita video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Attiva video - La tua connessione sarà brevemente interrotta mentre si attiva il video per la prima volta", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Abilita video (V) - La tua connessione sarà interrotta brevemente quando abiliti il video per la prima volta", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Abilita video. La tua connessione sarà interrotta brevemente quando abiliti il video per la prima volta", + "Select a video device" : "Seleziona un dispositivo video", + "Show presenter" : "Mostra presentatore", + "You" : "Tu", + "Mute" : "Silenzia", + "Muted" : "Mutato", + "Show screen" : "Mostra schermo", + "Stop following" : "Smetti di seguire", + "Connection could not be established …" : "Impossibile stabilire la connessione...", + "Connection was lost and could not be re-established …" : "La connessione è stata persa e non è stato possibile ristabilirla...", + "Connection could not be established. Trying again …" : "Impossibile stabilire la connessione. Riprova...", + "Connection lost. Trying to reconnect …" : "Connessione persa. Tentativo di riconnessione...", + "Connection problems …" : "Problemi di connessione...", + "Collapse" : "Contrai", + "Expand" : "Espandi", + "You need to be logged in to upload files" : "Devi aver eseguito l'accesso per caricare file", + "Drop your files to upload" : "Rilascia i tuoi file per caricarli", + "Conversation messages" : "Messaggi della conversazione", + "Scroll to bottom" : "Scorri in fondo", + "Post message" : "Pubblica messaggio", + "Federated conversation" : "Conversazione federata", + "Public conversation" : "Conversazione pubblica", + "Favorite" : "Preferito", + "Banned users" : "Utenti banditi", + "Manage the list of banned users in this conversation." : "Gestisci la lista degli utenti banditi in questa conversazione", + "Manage bans" : "Gestisci ban", + "No banned users" : "Nessun utente bandito", + "Banned by:" : "Bandito da:", + "Date:" : "Data:", + "Note:" : "Nota:", + "Hide details" : "Nascondi dettagli", + "Show details" : "Mostra dettagli", + "Unban" : "Rimuovi bando", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Puoi cambiare il titolo e la descrizione nel {linkstart}Calendario ↗{linkend}.", + "Error while updating conversation name" : "Errore durante l'aggiornamento del nome della conversazione", + "Error while updating conversation description" : "Errore durante l'aggiornamento della descrizione della conversazione", + "Enter a name for this conversation" : "Inserisci un nome per la conversazione", + "Edit conversation name" : "Modifica nome conversazione", + "Edit conversation description" : "Modifica la descrizione della conversazione", + "Enter a description for this conversation" : "Inserisci una descrizione per questa conversazione", + "Picture" : "Immagine", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "I seguenti bot possono essere abilitati in questa conversazione. Contatta il tuo amministratore per installare altri bot su questo server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nessun bot è installato su questo server. Contatta il tuo amministratore per installare bot su questo server.", + "Disable" : "Disabilita", + "Enable" : "Abilita", + "Breakout rooms" : "Sessioni secondarie", + "Manage breakout rooms" : "Gestisci sessioni secondarie", + "Set up breakout rooms for this conversation" : "Imposta sessioni secondarie per questa conversazione", + "Please select a valid PNG or JPG file" : "Seleziona un file PNG o JPG valido", + "Choose your conversation picture" : "Scegli l'icona della conversazione", + "Choose" : "Scegli", + "Error setting conversation picture" : "Errore nell'impostazione dell'icona della conversazione", + "Could not set the conversation picture: {error}" : "Impossibile impostare icona conversazione: {error}", + "Error cropping conversation picture" : "Abilita ritaglio dell'icona della conversazione", + "Error removing conversation picture" : "Errore nella rimozione dell'icona della conversazione", + "Set emoji as conversation picture" : "Imposta emoji come icona della conversazione", + "Set background color for conversation picture" : "Imposta colore di sfondo per l'icona della conversazione", + "Upload conversation picture" : "Carica immagine della conversazione", + "Choose conversation picture from files" : "Scegli icona della conversazione dai file", + "Remove conversation picture" : "Rimuove icona della conversazione", + "The file must be a PNG or JPG" : "Il file deve essere una PNG o JPG", + "Set picture" : "Imposta icona", + "Default permissions modified for {conversationName}" : "Permessi predefiniti modificati per {conversationName}", + "Could not modify default permissions for {conversationName}" : "Impossibile modificare i permessi predefiniti per {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Modifica i permessi predefiniti per i partecipanti di questa conversazione. Queste impostazioni non hanno effetto sui moderatori.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Ogni volta che i permessi vengono modificati in questa sezione i permessi impostati precedentemente a singoli partecipanti vanno perduti.", + "All permissions" : "Tutti permessi", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "I partecipanti hanno le autorizzazioni per avviare una chiamata, partecipare a una chiamata, abilitare audio e video e condividere lo schermo.", + "Restricted" : "Limitato", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "I partecipanti possono partecipare alle chiamate, ma non possono abilitare né audio né video né condividere lo schermo finché un moderatore non concede loro manualmente i permessi.", + "Advanced permissions" : "Permessi avanzati", + "Edit permissions" : "Modifica permessi", + "Conversation settings" : "Impostazioni conversazione", + "Basic Info" : "Informazioni di base", + "Personal" : "Personale", + "Moderation" : "Moderazione", + "Setup overview" : "Panoramica della configurazione", + "Live transcription" : "Trascrizione in tempo reale", + "Enable live transcription" : "Avvia trascrizione in tempo reale", + "Breakout Rooms" : "Sessioni Secondarie", + "Matterbridge" : "Matterbridge", + "Bots" : "Bot", + "Danger zone" : "Zona pericolosa", + "Archive conversation" : "Archivia conversazione", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Le conversazioni archiviate sono nascoste dall'elenco delle conversazioni per impostazione predefinita. Tuttavia, saranno comunque visibili quando si cerca il nome della conversazione o si accede a un elenco di conversazioni archiviate.", + "Do you really want to leave \"{displayName}\"?" : "Vuoi davvero uscire da “{displayName}”?", + "You can archive this conversation instead." : "Puoi invece archiviare questa conversazione.", + "Leave conversation" : "Lascia la conversazione", + "You need to promote a new moderator before you can leave the conversation" : "Devi promuovere un nuovo moderatore prima di poter lasciare la conversazione.", + "Delete conversation" : "Elimina conversazione", + "Do you really want to delete \"{displayName}\"?" : "Vuoi davvero eliminare \"{displayName}\"?", + "Error while deleting conversation" : "Errore durante l'eliminazione della conversazione", + "Delete all chat messages" : "Elimina tutti i messaggi di chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vuoi davvero eliminare tutti i messaggi in \"{displayName}\"?", + "Error while clearing chat history" : "Errore durante la cancellazione della cronologia chat", + "Be careful, these actions cannot be undone." : "Fai attenzione, queste azioni non possono essere annullate.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Una volta terminata una conversazione, per rientrare in una conversazione chiusa, è necessario un invito. È possibile riprendere una conversazione aperta in qualsiasi momento.", + "Permanently delete this conversation." : "Elimina definitivamente questa conversazione.", + "Delete chat messages" : "Elimina i messaggi di chat", + "Permanently delete all the messages in this conversation." : "Elimina definitivamente tutti i messaggi di questa conversazione.", + "_%n hour_::_%n hours_" : ["%n ora","%n ore","%n ore"], + "_%n day_::_%n days_" : ["%n giorno","%n giorni","%n giorni"], + "_%n week_::_%n weeks_" : ["%n settimana","%n settimane","%n settimane"], + "Custom expiration time" : "Ora di scadenza personalizzata", + "Message expiration disabled" : "Scadenza dei messaggi disabilitata", + "Message expiration set: {duration}" : "Scadenza dei messaggi: {duration}", + "Error when trying to set message expiration" : "Errore durante l'impostazione della scadenza del messaggio", + "Message expiration" : "Imposta la scadenza dei messaggi", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "I messaggi di chat possono scadere dopo un certo periodo di tempo. Nota: I file condivisi in chat non saranno eliminati per il proprietario, ma non saranno più condivisi nella conversazione.", + "Set message expiration" : "Imposta scadenza dei messaggi", + "Current message expiration" : "Attuale scadenza dei messaggi", + "Password copied to clipboard" : "Password copiata negli appunti", + "Password could not be copied" : "La password non può essere copiata", + "Guest access" : "Accesso ospiti", + "Breakout rooms are not allowed in public conversations." : "Le sessioni secondarie non sono ammesse nelle conversazioni pubbliche.", + "Allow guests to join this conversation via link" : "Permetti agli ospiti di unirsi alla conversazione via collegamento", + "Password protection" : "Protezione con password", + "This conversation is password-protected. Guests need password to join" : "Questa conversazione è protetta da password. Gli ospiti devono disporre della password per partecipare.", + "Password protection is needed for public conversations" : "È necessaria la protezione con password per le conversazioni pubbliche", + "Set a password" : "Imposta una password", + "Change password" : "Modifica password", + "Enter new password" : "Inserisci nuova password", + "Save password" : "Salva la password", + "Copy password" : "Copia password", + "Guests are allowed to join this conversation via link" : "Gli ospiti possono partecipare alla conversazione tramite collegamento.", + "Guests are not allowed to join this conversation" : "Gli ospiti non possono partecipare a questa conversazione.", + "Resend invitations" : "Nuovo invio degli inviti", + "This conversation is open to both registered users and users created with the Guests app" : "Questa conversazione è aperta sia agli utenti registrati che agli utenti creati con l'app Ospiti.", + "This conversation is open to registered users" : "Questa conversazione è aperta agli utenti registrati", + "This conversation is limited to the current participants" : "Questa conversazione è limitata ai partecipanti attuali", + "You opened the conversation to both registered users and users created with the Guests app" : "Hai aperto la conversazione sia agli utenti registrati che agli utenti creati con l'applicazione Ospiti.", + "Error occurred when opening or limiting the conversation" : "Si è verificato un errore durante l'apertura o la limitazione della conversazione", + "Open conversation to registered users, showing it in search results" : "Apri la conversazione agli utenti registrati, mostrandoli tra i risultati di ricerca", + "Also open to users created with the Guests app" : "Aperto anche agli utenti creati con l'app Ospiti", + "Open conversation" : "Apri conversazione", + "Set language spoken in calls" : "Imposta la lingua parlata nelle chiamate", + "Languages could not be loaded" : "La lingua non può essere caricata", + "Loading languages …" : "Caricamento lingue …", + "Invalid language" : "Lingua non valida", + "Default language (English)" : "Lingua predefinita (Inglese)", + "Default live transcription language set" : "Lingua predefinita per la trascrizione in tempo reale", + "Live transcription language set: {languageName}" : "Lingua per la trascrizione in tempo reale: {languageName}", + "Error when trying to set live transcription language" : "Errore durante il tentativo di impostare la lingua della trascrizione in tempo reale", + "Start time: {date}" : "Ora di inizio: {date} ", + "Start time has been updated" : "L'orario di inizio è stato aggiornato", + "Error occurred while updating start time" : "Si è verificato un errore durante l'aggiornamento dell'orario di inizio", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Abilitando la lobby, i non moderatori verranno rimossi dalla chiamata in corso.", + "Enable lobby, restricting the conversation to moderators" : "Abilita la lobby, limitando la conversazione ai moderatori", + "Meeting start time" : "Orario di inizio della riunione", + "Start time (optional)" : "Ora iniziale (facoltativa)", + "Import email participants" : "Importa email dei partecipanti", + "You can import a list of email participants from a CSV file." : "È possibile importare un elenco di e-mail dei partecipanti da un file CSV.", + "Poll drafts" : "Bozze dei sondaggi", + "Browse poll drafts" : "Sfoglia bozze dei sondaggi", + "Error occurred when locking the conversation" : "Si è verificato un errore durante il blocco della conversazione", + "Error occurred when unlocking the conversation" : "Si è verificato un errore durante lo sblocco della conversazione", + "Lock conversation" : "Blocca conversazione", + "This will also terminate the ongoing call." : "Ciò terminerà la chiamata in corso.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blocca la conversazione per evitare che qualcuno pubblichi messaggi o inizi una call.", + "Edit" : "Modifica", + "More information" : "Altre informazioni", + "Delete" : "Elimina", + "Add new bridged channel to current conversation" : "Abilita nuovo canale collegato alla conversazione attuale", + "unknown state" : "stato sconosciuto", + "running" : "in esecuzione", + "not running, check Matterbridge log" : "non in esecuzione, controlla il log di Matterbridge", + "not running" : "non in esecuzione", + "Bridge saved" : "Collegamento salvato", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Puoi collegare canali da vari sistemi di messaggistica istantanea con Matterbridge.", + "More info on Matterbridge" : "Ulteriori informazioni su Matterbridge", + "Messaging systems" : "Sistemi di messaggistica", + "Enable bridge" : "Abilita collegamento", + "Show Matterbridge log" : "Mostra il log di Matterbridge", + "Log content" : "Contenuto dei log", + "Only moderators are allowed to mention @all" : "Solo i moderatori possono menzionare @all", + "All participants are allowed to mention @all" : "Tutti i partecipanti possono menzionare @all", + "Participants are now allowed to mention @all." : "I partecipanti possono ora menzionare @all.", + "Mentioning @all has been limited to moderators." : "La menzione @all è stata limitata ai moderatori.", + "Allow participants to mention @all" : "Consenti ai partecipanti di menzionare @all", + "Mention permissions" : "Permessi di menzione", + "Notifications" : "Notifiche", + "Notify about calls in this conversation" : "Notifica delle chiamate in questa conversazione", + "Important conversation" : "Conversazione importante", + "\"Do not disturb\" user status is ignored for important conversations" : "Lo stato utente “Non disturbare” viene ignorato per le conversazioni importanti.", + "Sensitive conversation" : "Conversazione delicata", + "Message preview will be disabled in conversation list and notifications" : "L'anteprima dei messaggi sarà disabilitata nell'elenco delle conversazioni e nelle notifiche.", + "Recording consent is required for calls in this conversation" : "Per le chiamate incluse in questa conversazione è necessario il consenso alla registrazione.", + "Recording consent is not required for calls in this conversation" : "Non è necessario il consenso alla registrazione per le chiamate in questa conversazione.", + "Recording consent requirement was updated" : "È stato aggiornato il requisito relativo al consenso alla registrazione.", + "Error occurred while updating recording consent" : "Si è verificato un errore durante l'aggiornamento del consenso alla registrazione", + "Recording Consent" : "Consenso registrazione", + "Recording consent cannot be changed once a call or breakout session has started." : "Il consenso alla registrazione non può essere modificato una volta avviata una chiamata o una sessione secondaria.", + "Require recording consent before joining call in this conversation" : "Richiedi il consenso alla registrazione prima di partecipare alla chiamata in questa conversazione", + "Recording consent is required for all calls" : "Il permesso di registrazione è richiesto per tutte le call", + "SIP dial-in is now possible without PIN requirement" : "Ora è possibile effettuare la connessione SIP senza PIN", + "SIP dial-in is now enabled" : "L'accesso SIP è ora abilitato", + "SIP dial-in is now disabled" : "L'accesso SIP è ora disabilitato", + "Error occurred when enabling SIP dial-in" : "Si è verificato un errore durante l'abilitazione dell'accesso SIP", + "Error occurred when disabling SIP dial-in" : "Si è verificato un errore durante la disabilitazione dell'accesso SIP", + "Phone and SIP dial-in" : "Telefono e connessione SIP", + "Enable phone and SIP dial-in" : "Abilita telefono e connessione SIP", + "Allow to dial-in without a PIN" : "Consenti l'accesso senza PIN", + "Ongoing" : "In corso", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n persona ha accettato","%n persone hanno accettato","%n persone hanno accettato"], + "_%n person declined_::_%n people declined_" : ["%n persona ha rifiutato","%n persone hanno rifiutato","%n persone hanno rifiutato"], + "_and %n other attachment_::_and %n other attachments_" : ["e %n altro allegato","e altri %n allegati","e altri %n allegati"], + "With {displayName}" : "Con {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "Mostra allegati", + "Join" : "Partecipa", + "View conversation" : "Mostra conversazione", + "View event on Calendar" : "Mostra eventi nel Calendario", + "Error while creating the conversation" : "Errore durante la creazione della conversazione", + "Hello, {displayName}" : "Ciao, {displayName}", + "Start meeting now" : "Avvia meeting ora", + "Give your meeting a title" : "Dai un titolo al tuo meeting", + "Create and copy link" : "Crea e copia collegamento", + "Create a new conversation" : "Crea una nuova conversazione", + "Join open conversations" : "Entra nelle conversazioni aperte", + "Call a phone number" : "Chiama un numero di telefono", + "Scroll backward" : "Scorri indietro", + "Scroll forward" : "Scorri avanti", + "Schedule meetings" : "Programma meeting", + "You don't have any upcoming meetings" : "Non hai nessun prossimo meeting", + "Open calendar" : "Apri calendario", + "Unread mentions" : "Menzioni non lette", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "I messaggi in cui sei stato menzionato verranno visualizzati qui. Puoi menzionare le persone digitando @ seguito dal loro nome.", + "Upcoming reminders" : "Prossimi promemoria", + "Message reminders" : "Promemoria messaggi", + "Set a reminder on a message to be notified" : "Imposta un promemoria su un messaggio per ricevere una notifica", + "Start a group conversation" : "Avvia una conversazione di gruppo", + "Create conversation" : "Crea conversazione", + "Enter your name" : "Digita il tuo nome", + "Submit name and join" : "Inserisci un nome ed entra", + "Do you already have an account?" : "Hai già un account?", + "Log in" : "Login", + "Error while verifying uploaded file" : "Errore durante la verifica del file caricato", + "Uploaded file is verified" : "Il file caricato è verificato", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Il formato dei contenuti è CSV (valori separati da virgola):
- La riga di intestazione è obbligatoria e deve corrispondere a \"nome\", \"e-mail\" o semplicemente \"e-mail\"
- Una voce per riga (ad esempio \"John Doe\", \"john@example.tld\")", + "Participants added successfully" : "Partecipanti aggiunti con successo", + "Error while adding participants" : "Errore durante l'aggiunta dei partecipanti", + "Import a file" : "Importa un file", + "Browse" : "Sfoglia", + "Verifying uploaded file …" : "Verifica del file caricato …", + "This might take a moment" : "Potrebbe volerci un attimo.", + "Send invitations" : "Invia inviti", + "_%n invalid email_::_%n invalid emails_" : ["%n email non valida","%n email non valide","%n email non valide"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail è già stata importata o è duplicata","%n e-mail sono già state importate o sono duplicate","%n e-mail sono già state importate o sono duplicate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invito può essere inviato","%n inviti possono essere inviati","%n inviti possono essere inviati"], + "An error occurred while calling a phone number" : "Si è verificato un errore durante la chiamata a un numero di telefono", + "Phone number could not be called: {error}" : "Impossibile chiamare il numero di telefono: {error}", + "Phone number could not be called" : "Il numero di telefono non può essere chiamato", + "Search participants or phone numbers" : "Cerca partecipanti o numeri di telefono", + "Creating the conversation …" : "Sto creando la conversazione …", + "Mark as read" : "Marca come letto", + "Mark as unread" : "Marca come non letto", + "Remove from favorites" : "Rimuovi dai preferiti", + "Add to favorites" : "Aggiungi ai preferiti", + "Unarchive conversation" : "Recupera la conversazione dall'archivio", + "Ignore \"Do not disturb\"" : "Ignora \"Non disturbare\"", + "You need to promote a new moderator before you can leave the conversation." : "Devi promuovere un nuovo moderatore prima di poter abbandonare la conversazione. ", + "Conversation actions" : "Azioni delle conversazioni", + "Notify about calls" : "Notifica riguardo chiamate", + "Hide message text" : "Nascondi messaggio di testo", + "Pending invitations" : "Inviti in attesa", + "From {user} at {remoteServer}" : "Da {user} su {remoteServer}", + "Decline invitation" : "Rifiuta invito", + "Accept invitation" : "Accetta invito", + "No pending invitations" : "Nessun invito in attesa", + "Home" : "Home", + "Unread" : "Da leggere", + "Mentions" : "Citazioni", + "Meetings" : "Meetings", + "Alphabetically" : "Ordine alfabetico", + "No followed threads" : "Nessun argomento seguito", + "No matches found" : "Nessuna corrispondenza trovata", + "No conversations found" : "Nessuna conversazione trovata", + "You have no archived conversations." : "Non hai conversazioni archiviate", + "Subscribe to an existing thread or start your own." : "Iscriviti a un argomento esistente o avviane uno nuovo.", + "You have no unread mentions." : "Non hai menzioni non lette.", + "You have no unread messages." : "Non hai messaggi non letti.", + "An error occurred while performing the search" : "Si è verificato un errore durante l'esecuzione della ricerca", + "Conversation list" : "Elenco delle conversazioni", + "Filter conversations by" : "Filtra conversazioni per", + "Unread messages" : "Messaggi non letti", + "Meeting conversations" : "Conversazioni dei meeting", + "Clear filters" : "Pulisci filtri", + "New personal note" : "Nuova nota personale", + "Back to conversations" : "Torna alle conversazioni", + "Archived conversations" : "Conversazioni archiviate", + "Threads" : "Argomenti", + "Clear filter" : "Pulisci il filtro", + "Show more threads" : "Mostra altri argomenti", + "App settings" : "Impostazioni applicazione", + "Users" : "Utenti", + "Groups" : "Gruppi", + "Teams" : "Team", + "Federated users" : "Utenti federati", + "New private conversation" : "Nuova conversazione privata", + "Other sources" : "Altre fonti", + "Open conversations" : "Apri conversazioni", + "No search results" : "Nessun risultato di ricerca", + "Users, groups and teams" : "Utenti, gruppi e teams", + "Users and groups" : "Utenti e gruppi", + "Users and teams" : "Utenti e teams", + "Groups and teams" : "Gruppi e teams", + "New group conversation" : "Nuova conversazione di gruppo", + "The meeting will start soon" : "La riunione inizierà presto", + "This meeting is scheduled for {startTime}" : "Questa riunione è programmata per {startTime}", + "You are currently waiting in the lobby" : "Stai attualmente aspettando nell'ingresso", + "Select microphone" : "Seleziona microfono", + "No microphone available" : "Nessun microfono disponibile", + "Select speaker" : "Seleziona altoparlante", + "No speaker available" : "Nessun altoparlante disponibile", + "Select camera" : "Seleziona fotocamera", + "No camera available" : "Nessuna fotocamera disponibile", + "Select a device" : "Seleziona un dispositivo", + "Playing …" : "Riproduco …", + "Test speakers" : "Testa altoparlante", + "Test" : "Prova", + "Devices" : "Dispositivi", + "Backgrounds" : "Sfondi", + "No audio" : "Nessun audio", + "No camera" : "Nessuna fotocamera", + "Display video as you will see it (mirrored)" : "Visualizza il video così come lo vedrai (riflesso)", + "Display video as others will see it" : "Visualizza il video così come lo vedranno gli altri", + "Calls are not supported in your browser" : "Le chiamate non sono supportate dal tuo browser", + "Access to microphone is only possible with HTTPS" : "L'accesso a microfono è possibile solo con HTTPS", + "Access to microphone was denied" : "L'accesso al microfono è stato negato", + "Error while accessing microphone" : "Errore durante l'accesso al microfono", + "Access to camera is only possible with HTTPS" : "L'accesso alla fotocamera è possibile solo con HTTPS", + "The call is being recorded." : "La chiamata viene registrata.", + "The call might be recorded." : "La chiamata potrebbe essere registrata.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "La registrazione potrebbe includere la tua voce, il video dalla telecamera e la condivisione dello schermo. Prima di partecipare alla chiamata è necessario il tuo consenso.", + "Give consent to the recording of this call" : "Acconsentire alla registrazione di questa chiamata", + "Show more info" : "Mostra altre info", + "Audio is not available" : "Audio non disponibile", + "Video is not available" : "Video non disponibile", + "Start recording immediately with the call" : "Avvia subito la registrazione della chiamata", + "Notify all participants about this call" : "Notifica tutti i partecipanti di questa chiamata", + "Apply settings" : "Applica impostazioni", + "Select virtual office background" : "Seleziona sfondo virtuale dell'ufficio", + "Select virtual home background" : "Seleziona sfondo virtuale della casa", + "Select virtual abstract background" : "Seleziona sfondo virtuale astratto", + "Select virtual beach background" : "Seleziona sfondo virtuale della spiaggia", + "Select virtual park background" : "Seleziona sfondo virtuale del parco", + "Select virtual theater background" : "Seleziona sfondo virtuale del teatro", + "Select virtual library background" : "Seleziona sfondo virtuale della libreria", + "Select virtual space station background" : "Seleziona sfondo virtuale della stazione spaziale", + "Error while uploading the file" : "Errore durante il caricamento del file", + "Select a file" : "Seleziona un file", + "Invalid path selected" : "Percorso selezionato non valido", + "Select virtual background from file {fileName}" : "Seleziona sfondo virtuale dal file {fileName}", + "Blur" : "Sfocatura", + "Upload" : "Carica", + "Files" : "File", + "(editing)" : "(modificando)", + "(edited)" : "(modificato)", + "The message has expired or has been deleted" : "Il messaggio è scaduto o è stato cancellato.", + "Cancel quote" : "Annulla citazione", + "24 hours" : "24 ore", + "7 days" : "7 giorni", + "30 days" : "30 giorni", + "Clear reminder – {timeLocale}" : "Cancella promemoria – {timeLocale}", + "Edited by {actor}" : "Modificato da {actor}", + "Message text copied to clipboard" : "Testo del messaggio copiato negli appunti", + "Message text could not be copied" : "Impossibile copiare il testo del messaggio", + "Message forwarded to \"Note to self\"" : "Messaggio inoltrato a \"Nota a me stesso\"", + "Error while forwarding message to \"Note to self\"" : "Errore durante l'inoltro del messaggio a \"Nota a me stesso\"", + "A reminder was successfully removed" : "Un promemoria è stato rimosso con successo.", + "Error occurred when removing a reminder" : "Si è verificato un errore durante la rimozione di un promemoria", + "A reminder was successfully set at {datetime}" : "Il promemoria è stato impostato con successo alle {datetime}", + "Error occurred when creating a reminder" : "Si è verificato un errore durante la creazione di un promemoria", + "Add a reaction to this message" : "Aggiungi una reazione a questo messaggio", + "Reply" : "Rispondi", + "More actions" : "Altre azioni", + "Set reminder" : "Imposta promemoria", + "Reply privately" : "Rispondi privatamente", + "Edit message" : "Modifica messaggio", + "Copy message" : "Copia messaggio", + "Copy message link" : "Copia collegamento del messaggio", + "Go to file" : "Vai al file", + "Download file" : "Scarica file", + "Go to thread" : "Vai all'argomento", + "Edit thread details" : "Modifica dettagli argomento", + "Forward message" : "Messaggio inoltrato", + "Translate" : "Traduci", + "Set custom reminder" : "Imposta promemoria personalizzato", + "Close reactions menu" : "Chiudi menu reazioni", + "React with {emoji}" : "Reagisci con {emoji}", + "React with another emoji" : "Reagisci con un'altra emoji", + "Choose a conversation to forward the selected message." : "Seleziona una conversazione per inoltrare il messaggio selezionato.", + "Error while forwarding message" : "Errore durante l'inoltro del messaggio", + "The message has been forwarded to {selectedConversationName}" : "Il messaggio è stato inoltrato a {selectedConversationName}", + "Dismiss" : "Annulla", + "Go to conversation" : "Vai alla conversazione", + "Detect language" : "Rileva lingua", + "The message could not be translated" : "Questo messaggio non può essere tradotto", + "Translation copied to clipboard" : "Traduzione copiata negli appunti", + "Translation could not be copied" : "Impossibile copiare la traduzione", + "Translate message" : "Traduci messaggio", + "Source language to translate from" : "Lingua di partenza da cui tradurre", + "Translate from" : "Traduci da", + "Target language to translate into" : "Lingua di destinazione in cui tradurre", + "Translate to" : "Traduci in", + "Translating" : "Sto traducendo", + "Copy translated text" : "Copia testo tradotto", + "Send now" : "Spedisci ora", + "Message read by everyone who shares their reading status" : "Messaggio letto da tutti coloro che condividono il proprio stato di lettura", + "Message sent" : "Messaggio inviato", + "Sent without notification" : "Invia senza notificare", + "Deleting message" : "Eliminazione del messaggio", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Messaggio eliminato correttamente, ma è configurato un bot o Matterbridge e il messaggio potrebbe essere già stato distribuito ad altri servizi.", + "Message deleted successfully" : "Messaggio eliminato correttamente", + "Message could not be deleted because it is too old" : "Impossibile eliminare il messaggio perché è troppo datato", + "Only normal chat messages can be deleted" : "È possibile eliminare solo i normali messaggi di chat", + "An error occurred while deleting the message" : "Si è verificato un errore durante l'eliminazione del messaggio", + "Your browser does not support playing audio files" : "Il tuo browser non supporta la riproduzione di file audio", + "Contact" : "Contatto", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Scheda di Deck", + "Remove {fileName}" : "Rimuovi {fileName}", + "Open this location in OpenStreetMap" : "Apri questa posizione in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n risposta","%n risposte","%n risposte"], + "Sending message" : "Invio del messaggio", + "Failed to send the message. Click to try again" : "Invio del messaggio non riuscito. Fare clic per riprovare", + "Not enough free space to upload file" : "Spazio libero insufficiente per caricare il file", + "You cannot send messages to this conversation at the moment" : "Non puoi inviare messaggi in questa conversazione al momento", + "Could not update the message" : "Impossibile aggiornare il messaggio", + "You voted" : "Hai votato", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Bozza del sondaggio • %n opzione","Bozza del sondaggio • %n opzioni","Bozza del sondaggio • %n opzioni"], + "_%n vote_::_%n votes_" : ["%n voto","%n voti","%n voti"], + "Edit poll draft" : "Modifica bozza del sondaggio", + "Delete poll draft" : "Elimina bozza del sondaggio", + "Open poll" : "Apri sondaggio", + "See results" : "Vedi risultati", + "Reactions" : "Reazioni", + "No permission to post reactions in this conversation" : "Non è consentito pubblicare reazioni in questa conversazione.", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e %n altro partecipante","e altri %n partecipanti","e altri %n partecipanti"], + "Show all reactions" : "Mostra tutte le reazioni", + "Add more reactions" : "Aggiungi più reazioni", + "Show or collapse system messages" : "Mostra o nascondi i messaggi di sistema", + "No messages" : "Nessun messaggio", + "All messages have expired or have been deleted." : "Tutti i messaggi sono scaduti o sono stati cancellati.", + "Unpin" : "Rimuovi", + "Cancel search" : "Annulla ricerca", + "Add a phone number" : "Aggiungi numero di telefono", + "Error: A password is required to create the conversation." : "Errore: per creare la conversazione è necessaria una password.", + "All set, the conversation \"{conversationName}\" was created." : "Tutto pronto, la conversazione \"{conversationName}\" è stata creata.", + "Create a new group conversation" : "Crea una nuova conversazione di gruppo", + "Add participants" : "Aggiungi partecipanti", + "Maximum length exceeded ({maxlength} characters)" : "Lunghezza massima superata ({maxlength} caratteri)", + "Conversation visibility" : "Visibilità della conversazione", + "Allow guests to join via link" : "Consenti agli ospiti di partecipare tramite collegamento", + "Enter password" : "Digita la password", + "This conversation has been locked" : "Questa conversazione è stata bloccata", + "No permission to post messages in this conversation" : "Nessun permesso per pubblicare messaggi in questa conversazione", + "Joining conversation …" : "Partecipazione alla conversazione...", + "Write a message without notification" : "Scrivi un messaggio senza notifica", + "Create a thread silently" : "Crea un argomento silenzioso", + "Create a thread" : "Crea un argomento", + "Send message silently" : "Invia messaggio direttamente", + "Send message" : "Invia messaggio", + "Send without notification" : "Invia messaggio senza notifica", + "The participant will not be notified about new messages" : "Il partecipante non riceverà notifiche relative ai nuovi messaggi.", + "Participants will not be notified about new messages" : "I partecipanti non saranno avvisati dei nuovi messaggi", + "Thread title is required" : "Il titolo dell'argomento è obbligatorio", + "Message text is required" : "Il testo del messaggio è obbligatorio", + "The message could not be edited" : "Il messaggio non può essere modificato", + "File to share" : "File da condividere", + "File upload is not available in this conversation" : "Il caricamento dei file non è disponibile in questa conversazione.", + "Add emoji" : "Aggiungi emoji", + "Adding a mention will only notify users who did not read the message." : "L'aggiunta di una menzione notificherà solo gli utenti che non hanno letto il messaggio.", + "Thread title" : "Titolo dell'argomento", + "Send later" : "Invia più tardi", + "Cancel editing" : "Annulla modifica", + "{user} is out of office and might not respond." : "{user} è fuori ufficio e potrebbe non rispondere.", + "Absence period: {startDate} - {endDate}" : "Periodo di assenza: {startDate} - {endDate}", + "Replacement:" : "Sostituzione:", + "Share from {nextcloud}" : "Condividi da {nextcloud}", + "Share from Files" : "Condividi da File", + "Share files to the conversation" : "Condividi file nella conversazione", + "Upload from device" : "Carica dal dispositivo", + "Create new poll" : "Crea nuovo sondaggio", + "Smart picker" : "Selettore intelligente", + "Record voice message" : "Registra messaggio vocale", + "End recording and send" : "Termina la registrazione e invia", + "Dismiss recording" : "Annulla la registrazione", + "Access to the microphone was denied" : "L'accesso al microfono è stato negato", + "Microphone either not available or disabled in settings" : "Microfono non disponibile o disabilitato nelle impostazioni", + "Error while recording audio" : "Errore durante la registrazione dell'audio", + "Generating summary of unread messages …" : "Generando il riassunto dei messaggi non letti …", + "Summary is AI generated and might contain mistakes" : "Il riassunto è generato dall'IA e può contenere errori.", + "Error occurred during a summary generation" : "Si è verificato un errore durante la generazione del riassunto", + "New file" : "Nuovo file", + "Blank" : "Vuoto", + "Error while creating file" : "Errore durante la creazione del file", + "Create and share a new file" : "Crea e condividi un nuovo file", + "Name of the new file" : "Nome del nuovo file", + "Create file" : "Crea file", + "Someone is typing …" : "Qualcuno sta scrivendo …", + "{user1} is typing …" : "{user1} sta scrivendo …", + "{user1} and {user2} are typing …" : "{user1} e {user2} stanno scrivendo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} stanno scrivendo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n altro stanno scrivendo …","{user1}, {user2}, {user3} e %n altri stanno scrivendo …","{user1}, {user2}, {user3} e %n altri stanno scrivendo …"], + "Add more files" : "Aggiungi altri file", + "Send" : "Invia", + "In this conversation {user} can:" : "In questa conversazione {utente} può:", + "Edit default permissions for participants in {conversationName}" : "Modifica i permessi predefiniti per i partecipanti a {conversationName}", + "Start a call" : "Inizia la chiamata", + "Skip the lobby" : "Salta la sala d'attesa", + "Can post messages and reactions" : "Può pubblicare messaggi e reazioni", + "Enable the microphone" : "Accendi il microfono", + "Enable the camera" : "Abilita la fotocamera", + "Share the screen" : "Condividi lo schermo", + "Update permissions" : "Aggiorna i permessi", + "Updating permissions" : "Aggiornamento dei permessi", + "No poll drafts" : "Nessuna bozza di sondaggio", + "There is no poll drafts yet saved for this conversation" : "Non ci sono ancora bozze di sondaggi salvate per questa conversazione.", + "Create poll in {name}" : "Crea sondaggio in {name}", + "Create poll" : "Crea sondaggio", + "Error while importing poll" : "Errore durante l'importazione del sondaggio", + "Question" : "Domanda", + "Ask a question" : "Fai una domanda", + "Import draft from file" : "Importa bozza da file", + "Answers" : "Risposte", + "Answer {option}" : "Rispondi {option}", + "Delete poll option" : "Elimina opzione del sondaggio", + "Add answer" : "Aggiungi risposta", + "Settings" : "Impostazioni", + "Anonymous poll" : "Sondaggio anonimo", + "Multiple answers" : "Risposta multipla", + "Save as draft" : "Salva come bozza", + "Export draft to file" : "Esporta bozza su file", + "You voted for this option" : "Hai votato questa opzione", + "End poll" : "Termina sondaggio", + "Change your vote" : "Cambia il tuo voto", + "Results" : "Risultati", + "Voted participants" : "Partecipanti che hanno votato", + "Send a message to \"{roomName}\"" : "Invia messaggio a \"{roomName}\"", + "Hide list of participants" : "Cambia lista dei partecipanti", + "Show list of participants" : "Mostra lista dei partecipanti", + "Assistance requested in {roomName}" : "Assistenza richiesta su {roomName}", + "The message was sent to \"{roomName}\"" : "Il messaggio è stato inviato su \"{roomName}\"", + "Dismiss request for assistance" : "Togli richiesta di assistenza", + "Send message to room" : "Invia messaggio nella stanza", + "Back to main room" : "Torna alla stanza principale", + "Back to your room" : "Torna alla tua stanza", + "Message all rooms" : "Invia a tutte le stanze", + "Start session" : "Avvia sessione", + "Start a call before you start a breakout room session" : "Avvia una chiamata prima di avviare una sessione secondaria", + "Stop session" : "Termina sessione", + "The message was sent to all breakout rooms" : "Il messaggio è stato inviato a tutte le sessioni secondarie.", + "Send a message to all breakout rooms" : "Invia un messaggio a tutte le sessioni secondarie", + "Breakout rooms are not started" : "Le sessioni secondarie non sono avviate", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Le chiamate senza un backend ad alte prestazioni possono causare problemi di connettività e un carico elevato sui dispositivi. {linkstart}Ulteriori informazioni{linkend}", + "Talk setup incomplete" : "Configurazione di Talk incompleta", + "Disable lobby" : "Disabilita l'ingresso", + "Settings for participant \"{user}\"" : "Impostazioni per il partecipante \"{user}\"", + "Participant \"{user}\"" : "Partecipante \"{user}\"", + "moderator" : "moderatore", + "bot" : "bot", + "guest" : "ospite", + "Ringing …" : "Sta squillando …", + "Call rejected" : "Chiamata rifiutata", + "{time} talking …" : "{time} in conversazione...", + "{time} talking time" : "{time} tempo di conversazione", + "Raised their hand" : "Hanno alzato la mano", + "Joined with video" : "Partecipa con video", + "Joined via phone" : "Partecipa tramite telefono", + "Joined with audio" : "Partecipa con audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Il testo deve contenere un numero di caratteri inferiore o uguale a {maxLength} . Il testo attuale contiene {charactersCount} caratteri", + "Remove group and members" : "Rimuovi gruppo e membri", + "Remove team and members" : "Rimuovi team e membri", + "Remove participant" : "Rimuovi partecipante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vuoi davvero rimuovere il gruppo \"{displayName}\" e i suoi membri da questa conversazione?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vuoi davvero rimuovere il team \"{displayName}\" e i suoi membri da questa conversazione?", + "Do you really want to remove {displayName} from this conversation?" : "Vuoi davvero rimuovere {displayName} da questa conversazione?", + "Notification was sent to {displayName}" : "La notifica è stata inviata in {displayName}", + "Could not send notification to {displayName}" : "Impossibile inviare la notifica a {displayName}", + "Permissions granted to {displayName}" : "Permessi concessi a {displayName}", + "Could not modify permissions for {displayName}" : "Impossibile modificare i permessi per {displayName}", + "Permissions removed for {displayName}" : "Permessi rimossi per {displayName}", + "Permissions set to default for {displayName}" : "Permessi impostati come predefiniti per {displayName}", + "Phone number could not be hung up" : "Impossibile riagganciare il numero di telefono", + "Phone number could not be put on hold" : "Impossibile mettere in attesa il numero di telefono", + "Phone number could not be muted" : "Impossibile mutare il numero di telefono", + "Phone number could not be unmuted" : "Impossibile riattivare l'audio del numero di telefono", + "DTMF message could not be sent" : "Impossibile inviare il messaggio DTMF", + "Phone number copied to clipboard" : "Numero di telefono copiato negli appunti", + "Phone number could not be copied" : "Impossibile copiare il numero di telefono", + "in the lobby" : "nella stanza", + "Dial out phone" : "Telefona", + "Hang up phone" : "Riaggancia", + "Move back to lobby" : "Riporta alla lobby", + "Move to conversation" : "Muovi nella conversazione", + "Dial-in PIN" : "PIN di accesso", + "Demote from moderator" : "Declassa da moderatore", + "Promote to moderator" : "Promuovi a moderatore", + "Resend invitation" : "Nuovo invio dell'invito", + "Send call notification" : "Invia notifica di chiamata", + "Dial out phone number" : "Componi numero di telefono", + "Resume call for phone number" : "Riprendi chiamata per numero di telefono", + "Put phone number on hold" : "Metti numero di telefono in attesa", + "Unmute phone number" : "Riattiva audio del numero di telefono", + "Mute phone number" : "Muta numero di telefono", + "Copy phone number" : "Copia numero di telefono", + "Reset custom permissions" : "Reimposta autorizzazioni personalizzate", + "Grant all permissions" : "Concedi tutti i permessi", + "Remove all permissions" : "Rimuovi tutte le autorizzazioni", + "Also ban from this conversation" : "Bandisci anche da questa conversazione", + "Internal note (reason to ban)" : "Nota interna (motivo del bando)", + "Remove" : "Rimuovi", + "Permissions modified for {displayName}" : "Permessi modificati per {displayName}", + "Add users, groups or teams" : "Aggiungi utente, gruppo o team", + "Add users or groups" : "Aggiungi utenti o gruppi", + "Add users or teams" : "Aggiungi utente o teams", + "Add users" : "Aggiungi utenti", + "Add groups or teams" : "Aggiungi gruppo o teams", + "Add groups" : "Aggiungi gruppi", + "Add teams" : "Aggiungi teams", + "Add other sources" : "Aggiungi altre fonti", + "Add emails" : "Aggiungi email", + "Integrations" : "Integrazioni", + "Add federated users" : "Aggiungi utenti federati", + "Searching …" : "Ricerca in corso...", + "Search for more users" : "Cerca altri utenti", + "You can search or add participants via name, email, or Federated Cloud ID" : "È possibile cercare o aggiungere partecipanti tramite nome, e-mail o Federated Cloud ID.", + "Search or add participants" : "Cerca o aggiungi partecipanti", + "Invitation was sent to {actorId}" : "Invito inviato a {actorId}", + "An error occurred while adding the participants" : "Si è verificato un errore durante l'aggiunta dei partecipanti", + "A new group conversation with selected participant will be created" : "Verrà creata una nuova conversazione di gruppo con i partecipanti selezionati.", + "Participants" : "Partecipanti", + "Participants ({count})" : "Partecipanti ({count})", + "Open chat" : "Apri chat", + "You have new unread messages in the chat." : "Hai nuovi messaggi non letti nella chat.", + "You have been mentioned in the chat." : "Sei stato menzionato nella chat.", + "Search messages" : "Cerca messaggi", + "Chat" : "Chat", + "Details" : "Dettagli", + "Shared items" : "Oggetti condivisi", + "Search in {name}" : "Cerca in {name}", + "Threads in {name}" : "Argomenti in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Cerca messaggi …", + "Search options" : "Opzioni di ricerca", + "From User" : "Dall'utente", + "Since" : "A partire dal", + "Until" : "Fino al", + "No results found" : "Nessun risultato trovato", + "Load more results" : "Mostra altri risultati", + "Recent threads" : "Argomenti recenti", + "Projects" : "Progetti", + "No shared items" : "Nessun elemento condiviso", + "Thread notifications" : "Notifiche dagli argomenti", + "Thread actions" : "Azioni degli argomenti", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Collega a una conversazione", + "No open conversations found" : "Nessuna conversazione aperta trovata", + "Either there are no open conversations or you joined all of them." : "O non ci sono conversazioni aperte oppure ti sei unito a tutte.", + "Check spelling or use complete words." : "Controlla l'ortografia o usa parole complete.", + "Search conversations or users" : "Cerca conversazioni o utenti", + "Select conversation" : "Seleziona conversazione", + "Number length is not valid" : "La lunghezza del numero non è valida", + "Region code is not valid" : "Il codice regionale non è valido", + "Number length is too short" : "La lunghezza del numero è troppo breve", + "Number length is too long" : "La lunghezza del numero è troppo lunga", + "Number is not valid" : "Il numero non è valid", + "Phone numbers" : "Numeri di telefono", + "Display name: {name}" : "Nome visualizzato: {name}", + "Edit display name" : "Modifica nome visualizzato", + "Display name (required)" : "Nome visualizzato (richiesto)", + "Save name" : "Salva nome", + "Error while setting personal setting" : "Errore durante l'impostazione delle impostazioni personali", + "Error while saving sounds setting" : "Errore durante il salvataggio dell'impostazione dei suoni", + "Play sounds when participants join or leave a call" : "Riproduci suoni quando i partecipanti entrano o abbandonano una chiamata", + "Notification settings" : "Impostazioni di notifica", + "Default language" : "Lingua predefinita", + "Select location for attachments" : "Seleziona la posizione per gli allegati", + "Error while setting attachment folder" : "Errore durante l'impostazione della cartella degli allegati", + "Error while setting read status privacy" : "Errore durante l'impostazione della riservatezza dello stato di lettura", + "Error while setting typing status privacy" : "Errore durante l'impostazione della privacy dello stato di digitazione", + "Error while setting default media state" : "Errore durante l'impostazione dello stato predefinito dei media", + "Privacy" : "Riservatezza", + "Attachments folder" : "Cartella degli allegati", + "Toggle full screen" : "Attiva schermo intero", + "Search" : "Cerca", + "Focus the chat input" : "Attiva la digitazione della chat", + "Unfocus the chat input to use shortcuts" : "Disattiva la digitazione della chat per utilizzare le scorciatoie", + "Edit your last message" : "Modifica ultimo messaggio", + "Shortcuts while in a call" : "Scorciatoie durante una chiamata", + "Camera on and off" : "Fotocamera attivo e disattivo", + "Microphone on and off" : "Microfono attivo e disattivo", + "Raise or lower hand" : "Alza o abbassa la mano", + "Push to talk or push to mute" : "Premi per parlare o premi per silenziare", + "Zoom-in / zoom-out a screen share" : "Ingrandisci/riduci una condivisione dello schermo", + "Mouse wheel" : "Rotella del mouse", + "Start call silently" : "Avvia chiamata silenziosa", + "Start call" : "Inizia chiamata", + "End call" : "Termina chiamata", + "This call has just ended" : "Questa chiamata è appena terminata", + "You will be able to join the call only after a moderator starts it." : "Potrai unirti alla chiamata solo dopo che un moderatore l'abbia avviata.", + "End call for everyone" : "Termina chiamata per tutti", + "Starting the recording" : "Avvia registrazione", + "Recording" : "Registrazione", + "The call has been running for one hour." : "La chiamata è in corso da un'ora.", + "Cancel recording start" : "Annulla avvio registrazione", + "Stop recording" : "Termina registrazione", + "Send a reaction" : "Invia una reazione", + "React with {reaction}" : "Reagisci con {reaction}", + "All tasks done!" : "Tutte le attività completate!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} di %n attività","{done} di %n attività","{done} di %n attività"], + "Add participants to this call" : "Aggiungi partecipanti a questa chiamata", + "_%n participant in call_::_%n participants in call_" : ["%n partecipante in chiamata","%n partecipanti in chiamata ","%n partecipanti in chiamata"], + "Scheduled messages" : "Messaggi programmati", + "You are not allowed to enable screensharing" : "Non sei autorizzato ad abilitare la condivisione dello schermo", + "No screensharing" : "Nessuna condivisione dello schermo", + "Screensharing options" : "Opzioni di condivisione dello schermo", + "Enable screensharing" : "Abilita la condivisione dello schermo", + "Bad sent video and screen quality." : "Qualità video e dello schermo inviate non corrette.", + "Bad sent screen quality." : "Qualità dello schermo inviata non corretta.", + "Bad sent video quality." : "Qualità del video inviata non corretta.", + "Bad sent audio, video and screen quality." : "Qualità audio, video e dello schermo inviate non corrette.", + "Bad sent audio and screen quality." : "Qualità audio e dello schermo inviate non corrette.", + "Bad sent audio and video quality." : "Qualità dell'audio e del video inviate non corrette.", + "Bad sent audio quality." : "Qualità audio inviata non corretta.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo. Per migliorare la situazione prova, a disabilitare la sfocatura dello sfondo o il tuo video mentre fai una condivisione dello schermo.", + "Disable background blur" : "Disattiva la sfocatura dello sfondo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo. Per migliorare la situazione, prova a disabilitare il tuo video durante una condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vedere il tuo schermo.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di vederti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "La tua connessione Internet o il tuo computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione, prova a disabilitare la sfocatura dello sfondo o il tuo video durante la condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione prova a disabilitare il tuo video durante una condivisione dello schermo.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vedere il tuo schermo. Per migliorare la situazione prova a disabilitare la condivisione dello schermo.", + "Disable screenshare" : "Disabilita la condivisione dello schermo", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "La tua connessione Internet o il tuo computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vederti. Per migliorare la situazione, prova a disabilitare la sfocatura dello sfondo o il tuo video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti e vedere il tuo schermo. Per migliorare la situazione prova a disabilitare il tuo video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "La tua connessione a Internet o il computer sono occupati e gli altri partecipanti potrebbero non essere in grado di capirti.", + "Screen sharing is not supported by your browser." : "La condivisione dello schermo non è supportata dal tuo browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "La condivisione dello schermo richiede che la pagina sia caricata tramite HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "La condivisione dello schermo richiede che la pagina sia caricata tramite HTTPS.", + "An error occurred while starting screensharing." : "Si è verificato un errore durante l'avvio della condivisione dello schermo.", + "Select virtual background" : "Salva sfondo virtuale", + "Show your screen" : "Mostra il tuo schermo", + "Stop screensharing" : "Ferma la condivisione dello schermo", + "Mute others" : "Silenzia gli altri", + "Start recording" : "Avvia registrazione", + "Set up breakout rooms" : "Imposta sessioni secondarie", + "Download attendance list" : "Scarica l'elenco delle presenze", + "Open Calendar" : "Apri Calendario", + "Remove participant {name}" : "Rimuovi il partecipante {name}", + "Would you like to delete this conversation?" : "Vuoi eliminare questa conversazione?", + "Are you sure you want to delete this conversation?" : "Vuoi davvero eliminare questa conversazione?", + "Delete now" : "Elimina ora", + "Keep" : "Mantieni", + "Open dialpad" : "Apri tastierino numerico", + "Select a region" : "Seleziona una regione", + "Local time: {time}" : "Ora locale: {time}", + "Search …" : "Cerca …", + "Message without mention" : "Messaggio senza menzione", + "Mention myself" : "Menziona me stesso", + "Mention everyone" : "Menziona chiunque", + "Select a conversation" : "Seleziona una conversazione", + "Select a mode" : "Seleziona una modalità", + "You do not have permissions to access this conversation." : "Non hai i permessi per accedere a questa conversazione.", + "Join a different conversation or start a new one." : "Partecipa a una conversazione diversa o avviane una nuova.", + "The conversation does not exist" : "La conversazione non esiste", + "Join a conversation or start a new one!" : "Unisciti a una conversazione o avviane una nuova!", + "Duplicate session" : "Duplica sessione", + "Creating and joining a conversation with \"{userid}\"" : "Creare e partecipare a una conversazione con \"{userid}\"", + "Join a conversation or start a new one" : "Unisciti a una conversazione o avviane una nuova", + "Error while joining the conversation" : "Errore durante la partecipazione alla conversazione", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utente Nextcloud", + "User password" : "Password utente", + "Talk conversation" : "Conversazione di Talk", + "Skip TLS verification" : "Salta la verifica TLS", + "Matrix server URL" : "URL server Matrix", + "User" : "Utente", + "Matrix channel" : "Canale Matrix", + "Mattermost server URL" : "URL server Mattermost", + "Mattermost user" : "Utente Mattermost", + "Team name" : "Nome squadra", + "Channel name" : "Nome canale", + "Rocket.Chat server URL" : "URL server Rocket.Chat", + "User name or email address" : "Nome utente o indirizzo email", + "Rocket.Chat channel" : "Canale Rocket.Chat", + "Zulip server URL" : "URL server Zulip", + "Bot user name" : "Nome utente del bot", + "Bot API key" : "Chiave API del bot", + "Zulip channel" : "Canale Zulip", + "API token" : "Token API", + "Slack channel" : "Canale Slack", + "Server ID or name" : "ID o nome del server", + "Channel ID (prefixed with \"ID:\") or name" : "ID canale (preceduto da \"ID:\") o nome", + "Channel" : "Canale", + "Login" : "Accedi", + "Chat ID" : "ID chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL server IRC (ad es. chat.freenode.net:6667)", + "Nickname" : "Pseudonimo", + "Connection password" : "Password di connessione", + "IRC channel" : "Canale IRC", + "Channel password" : "Password del canale", + "NickServ nickname" : "Pseudonimo NickServ", + "NickServ password" : "Password NickServ", + "Use TLS" : "Usa TLS", + "Use SASL" : "Usa SASL", + "Tenant ID" : "ID tenant", + "Client ID" : "ID client", + "Team ID" : "ID team", + "Thread ID" : "ID thread", + "XMPP/Jabber server URL" : "URL server XMPP/Jabber", + "MUC server URL" : "URL server MUC", + "Jabber ID" : "ID Jabber", + "Media" : "Media", + "Polls" : "Sondaggi", + "Deck cards" : "Carte del mazzo", + "Voice messages" : "Messaggi vocali", + "Locations" : "Posizioni", + "Call recordings" : "Registrazioni delle chiamate", + "Audio" : "Audio", + "Show all media" : "Mostra tutti i media", + "Show all files" : "Mostra tutti i file", + "Show all polls" : "Mostra tutti i sondaggi", + "Show all deck cards" : "Mostra tutte le carte del mazzo", + "Show all voice messages" : "Mostra tutti i messaggi vocali", + "Show all locations" : "Mostra tutte le località", + "Show all call recordings" : "Mostra tutte le registrazioni delle chiamate", + "Show all audio" : "Mostra tutto l'audio", + "Show all other" : "Mostra tutti gli altri", + "Follow conversation settings" : "Impostazioni delle conversazioni seguite", + "Group" : "Gruppo", + "Team" : "Team", + "You reconnected to the call" : "Ti sei ricollegato alla chiamata", + "{actor} reconnected to the call" : "{actor} si è riconnesso alla chiamata", + "You added {user0} and {user1}" : "Hai aggiunto {user0} e {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Hai aggiunto {user0}, {user1} e %n altro partecipante","Hai aggiunto {user0}, {user1} e %n altri partecipanti","Hai aggiunto {user0}, {user1} e %n altri partecipanti"], + "An administrator added you and {user0}" : "Un amministratore ha aggiunto te e {user0}", + "{actor} added you and {user0}" : "{actor} ha aggiunto te e {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Un amministratore ha aggiunto te, {user0} e %n altro partecipante","Un amministratore ha aggiunto te, {user0} e altri %n partecipanti","Un amministratore ha aggiunto te, {user0} e altri %n partecipanti"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} ha aggiunto te, {user0} e %n altro partecipante","{actor} ha aggiunto te, {user0} e altri %n partecipanti","{actor} ha aggiunto te, {user0} e altri %n partecipanti"], + "An administrator added {user0} and {user1}" : "Un amministratore ha aggiunto {user0} e {user1}", + "{actor} added {user0} and {user1}" : "{actor} ha aggiunto {user0} e {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Un amministratore ha aggiunto {user0}, {user1} e %n altro partecipante","Un amministratore ha aggiunto {user0}, {user1} e altri %n partecipanti","Un amministratore ha aggiunto {user0}, {user1} e altri %n partecipanti"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} ha aggiunto {user0}, {user1} e %n altro partecipante","{actor} ha aggiunto {user0}, {user1} e altri %n partecipanti","{actor} ha aggiunto {user0}, {user1} e altri %n partecipanti"], + "You removed {user0} and {user1}" : "Hai rimosso {user0} e {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Hai rimosso {user0}, {user1} ed %n altro partecipante","Hai rimosso {user0}, {user1} ed altri %n partecipanti","Hai rimosso {user0}, {user1} ed altri %n partecipanti"], + "An administrator removed you and {user0}" : "Un amministratore ha rimosso te e {user0}", + "{actor} removed you and {user0}" : "{actor} ha rimosso te e {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Un amministratore ha rimosso te, {user0} e %n altro partecipante","Un amministratore ha rimosso te, {user0} e altri %n partecipanti","Un amministratore ha rimosso te, {user0} e altri %n partecipanti"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} ha rimosso te, {user0} e %n altri partecipanti","{actor} ha rimosso te, {user0} e altri %n partecipanti","{actor} ha rimosso te, {user0} e altri %n partecipanti"], + "An administrator removed {user0} and {user1}" : "Un amministratore ha rimosso {user0} e {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ha rimosso {user0} e {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Un amministratore ha rimosso {user0}, {user1} e %n altro partecipante","Un amministratore ha rimosso {user0}, {user1} e altri %n partecipanti","Un amministratore ha rimosso {user0}, {user1} e altri %n partecipanti"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} ha rimosso {user0}, {user1} e %n altro partecipante","{actor} ha rimosso {user0}, {user1} e altri %n partecipanti","{actor} ha rimosso {user0}, {user1} e altri %n partecipanti"], + "You and {user0} joined the call" : "Tu e {user0} vi siete uniti alla chiamata", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Tu, {user0} e altro %n partecipante vi siete uniti alla chiamata","Tu, {user0} e %n altri partecipanti vi siete uniti alla chiamata","Tu, {user0} e %n altri partecipanti vi siete uniti alla chiamata"], + "{user0} and {user1} joined the call" : "{user0} e {user1} si sono uniti alla chiamata", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e %n altro partecipante si sono uniti alla chiamata","{user0}, {user1} e %n altri partecipanti si sono uniti alla chiamata","{user0}, {user1} e %n altri partecipanti si sono uniti alla chiamata"], + "You and {user0} left the call" : "Tu e {user0} avete lasciato la chiamata", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Tu, {user0} e %n altro partecipante avete abbandonato la chiamata","Tu, {user0} e altri %n partecipanti avete abbandonato la chiamata","Tu, {user0} e altri %n partecipanti avete abbandonato la chiamata"], + "{user0} and {user1} left the call" : "{user0} e {user1} hanno abbandonato la chiamata", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e %n altro partecipante hanno abbandonato la chiamata ","{user0}, {user1} e %n altri partecipanti hanno abbandonato la chiamata ","{user0}, {user1} e %n altri partecipanti hanno abbandonato la chiamata "], + "You promoted {user0} and {user1} to moderators" : "Hai promosso {user0} e {user1} a moderatori", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Hai promosso {user0}, {user1} e %n altro partecipante a moderatori","Hai promosso {user0}, {user1} e %n altri partecipanti a moderatori","Hai promosso {user0}, {user1} e %n altri partecipanti a moderatori"], + "An administrator promoted you and {user0} to moderators" : "Un amministratore ha promosso te e {user0} a moderatori", + "{actor} promoted you and {user0} to moderators" : "{actor} ha promosso te e {user0} a moderatori", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Un amministratore ha promosso te, {user0} e %n altro partecipante a moderatori","Un amministratore ha promosso te, {user0} e %n altri partecipanti a moderatori","Un amministratore ha promosso te, {user0} e %n altri partecipanti a moderatori"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} ha promosso te, {user0} e %n altro partecipante a moderatori","{actor} ha promosso te, {user0} e altri %n partecipanti a moderatori","{actor} ha promosso te, {user0} e altri %n partecipanti a moderatori"], + "An administrator promoted {user0} and {user1} to moderators" : "Un amministratore ha promosso {user0} e {user1} a moderatori", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} ha promosso {user0} e {user1} a moderatori", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Un amministratore ha promosso {user0}, {user1} e %n altro partecipante a moderatori","Un amministratore ha promosso {user0}, {user1} e %n altri partecipanti a moderatori","Un amministratore ha promosso {user0}, {user1} e %n altri partecipanti a moderatori"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} ha promosso {user0}, {user1} e %n altro partecipante a moderatori ","{actor} ha promosso {user0}, {user1} e %n altri partecipanti a moderatori ","{actor} ha promosso {user0}, {user1} e %n altri partecipanti a moderatori "], + "You demoted {user0} and {user1} from moderators" : "Hai rimosso {user0} e {user1} dai moderatori", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Hai rimosso {user0}, {user1} e %n altro partecipante dai moderatori","Hai rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","Hai rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "An administrator demoted you and {user0} from moderators" : "Un amministratore ha rimosso te e {user0} dai moderatori", + "{actor} demoted you and {user0} from moderators" : "{actor} ha rimosso te e {user0} dai moderatori", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Un amministratore ha rimosso te, {user0} e %n altro partecipante dai moderatori","Un amministratore ha rimosso te, {user0} e %n altri partecipanti dai moderatori","Un amministratore ha rimosso te, {user0} e %n altri partecipanti dai moderatori"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} ha rimosso te, {user0} e %n altro partecipante dai moderatori","{actor} ha rimosso te, {user0} e %n altri partecipanti dai moderatori","{actor} ha rimosso te, {user0} e %n altri partecipanti dai moderatori"], + "An administrator demoted {user0} and {user1} from moderators" : "Un amministratore ha rimosso {user0} e {user1} dai moderatori", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ha rimosso {user0} e {user1} dai moderatori", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Un amministratore ha rimosso {user0}, {user1} e %n altro partecipante dai moderatori","Un amministratore ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","Un amministratore ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} ha rimosso {user0}, {user1} e %n altro partecipante dai moderatori","{actor} ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori","{actor} ha rimosso {user0}, {user1} e %n altri partecipanti dai moderatori"], + "You:" : "Tu:", + "You: {lastMessage}" : "Tu: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(modificato da te)", + "(edited by a deleted user)" : "(modificato da un utente eliminato)", + "(edited by {moderator})" : "(modificato da {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Stai tentando di partecipare a una conversazione mentre hai una sessione attiva in un'altra finestra o dispositivo. Questo non è attualmente supportato da Nextcloud Talk. Che cosa vuoi fare?", + "Leave this page" : "Abbandona questa pagina", + "Join here" : "Unisciti qui", + "Deck card has been posted to {conversation}" : "La scheda di Deck è stata pubblicata su {conversation}", + "An error occurred while posting deck card to conversation" : "Si è verificato un errore durante la pubblicazione della scheda di Deck nella conversazione", + "Post to a conversation" : "Pubblica in una conversazione", + "Post to conversation" : "Pubblica in conversazione", + "The recording failed. Please contact your administrator." : "La registrazione è fallita. Per favore, contatta un amministratore.", + "Location has been posted to {conversation}" : "La posizione è stata pubblicata su {conversation}", + "An error occurred while posting location to conversation" : "Si è verificato un errore durante la pubblicazione della posizione nella conversazione", + "Share to a conversation" : "Condividi in una conversazione", + "Share to conversation" : "Condividi su conversazione", + "In conversation" : "In conversazione", + "Search in conversation: {conversation}" : "Cerca nella conversazione: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Le tue richieste sono attualmente limitate a causa della protezione contro gli attacchi brute force.", + "Error while clearing conversation history" : "Errore durante la cancellazione della cronologia della conversazione", + "Error occurred while allowing guests" : "Si è verificato un errore durante l'autorizzazione degli ospiti", + "Error occurred while disallowing guests" : "Si è verificato un errore durante la disabilitazione degli ospiti", + "Error occurred when restricting the conversation to moderator" : "Si è verificato un errore durante la limitazione della conversazione al moderatore", + "Error occurred when opening the conversation to everyone" : "Si è verificato un errore durante l'apertura della conversazione a tutti", + "Conversation password has been saved" : "La password della conversazione è stata salvata", + "Conversation password has been removed" : "La password della conversazione è stata rimossa", + "Error occurred while saving conversation password" : "Si è verificato un errore durante il salvataggio della password della conversazione", + "Call recording is starting." : "La registrazione della chiamata sta iniziando", + "Call recording stopped while starting." : "La registrazione della chiamata è stata interrotta prima dell'inizio.", + "Call recording stopped. You will be notified once the recording is available." : "La registrazione della chiamata è stata interrotta. Riceverai una notifica non appena la registrazione sarà disponibile.", + "Conversation picture set" : "Icona della conversazione impostata", + "Conversation picture deleted" : "Icona della conversazione eliminata", + "Could not delete the conversation picture" : "Impossibile eliminare l'icona della conversazione", + "Could not remove the automatic expiration" : "Impossibile rimuovere la scadenza automatica", + "Could not post message: {errorMessage}" : "Impossibile pubblicare il messaggio: {errorMessage}", + "Participant is banned successfully" : "Il partecipante è stato bandito con successo", + "Error while banning the participant" : "Errore durante il bando del partecipante", + "An error occurred while fetching the participants" : "Si è verificato un errore durante il recupero dei partecipanti", + "Could not send invitation to {actorId}" : "Impossibile inviare l'invito a {actorId}", + "Invitations sent" : "Inviti inviati", + "Error occurred when sending invitations" : "Si è verificato un errore durante l'invio degli inviti", + "Failed to join the conversation." : "Impossibile entrare nelal conversazione.", + "An error occurred while creating breakout rooms" : "Un errore è avvenuto durante la creazione di sessioni secondarie", + "An error occurred while re-ordering the attendees" : "Un errore è avvenuto durante il riordino dei partecipanti", + "An error occurred while deleting breakout rooms" : "Un errore è avvenuto durante l'eliminazione di sessioni secondarie", + "An error occurred while starting breakout rooms" : "Un errore è avvenuto durante l'avvio delle sessioni secondarie", + "An error occurred while stopping breakout rooms" : "Un errore è avvenuto durante l'interruzione delle sessioni secondarie", + "An error occurred while sending a message to the breakout rooms" : "Un errore è avvenuto durante l'invio di un messaggio alle sessioni secondarie", + "An error occurred while requesting assistance" : "Un errore è avvenuto durante la richiesta di assistenza", + "An error occurred while resetting the request for assistance" : "Un errore è avvenuto durante il reset della richiesta di assistenza", + "An error occurred while joining breakout room" : "Un errore è avvenuto durante l'ingresso nella sessione secondaria", + "Failed to rename the thread" : "Impossibile rinominare l'argomento", + "Error fetching upcoming events" : "Errore durante il recupero degli eventi imminenti", + "Error fetching upcoming reminders" : "Errore durante il recupero dei promemoria imminenti", + "An error occurred while accepting an invitation" : "Si è verificato un errore durante l'accettazione di un invito", + "An error occurred while rejecting an invitation" : "Si è verificato un errore durante il rifiuto di un invito", + "{guest} (guest)" : "{guest} (ospite)", + "Poll draft has been saved" : "Bozza del sondaggio salvata", + "An error occurred while saving the draft" : "Si è verificato un errore durante il salvataggio della bozza", + "An error occurred while submitting your vote" : "Si è verificato un errore durante l'invio del voto", + "An error occurred while ending the poll" : "Si è verificato un errore durante la chiusura del sondaggio", + "An error occurred while deleting the poll draft" : "Si è verificato un errore durante l'eliminazione della bozza di sondaggio", + "Poll \"{name}\" was created by {user}. Click to vote" : "Il sondaggio \"{name}\" è stato creato da {user}. Fai clic per votare", + "Failed to add reaction" : "Impossibile aggiungere la reazione", + "Failed to remove reaction" : "Impossibile rimuovere la reazione", + "Error while uploading file \"{fileName}\"" : "Errore durante il caricamento del file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Spazio libero insufficiente per caricare il file \"{fileName}\"", + "You are not allowed to share files" : "Non ti è consentito condividere file", + "Error while sharing file" : "Errore durante la condivisione del file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Il browser che stai utilizzando non è completamente supportato da Nextcloud Talk. Usa l'ultima versione di Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Tra %n ora","Tra %n ore","Tra %n ore"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minuti","%n minuti"], + "In {hours} and {minutes}" : "Tra {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["Tra %n minuto","Tra %n minuti","Tra %n minuti"], + "Later today – {timeLocale}" : "Oggi – {timeLocale}", + "Tomorrow – {timeLocale}" : "Domani – {timeLocale}", + "This weekend – {timeLocale}" : "Questo fine settimana – {timeLocale}", + "Next week – {timeLocale}" : "Prossima settimana – {timeLocale}", + "Conversation link copied to clipboard" : "Collegamento alla conversazione copiato negli appunti", + "The link could not be copied" : "Impossibile copiare il collegamento", + "Error while parsing a PROPFIND error" : "Errore durante l'elaborazione di un errore PROPFIND", + "Sending signaling message has failed" : "Invio del messaggio di segnalazione non riuscito", + "Lost connection to signaling server. Trying to reconnect." : "Connessione al server di segnalazione interrotta. Riprova a connetterti.", + "Lost connection to signaling server." : "Connessione persa con il server di segnalazione.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Il server di segnalazione configurato deve essere aggiornato per essere compatibile con questa versione di Talk. Contatta l'amministratore.", + "Please restart the app." : "Riavvia l'applicazione.", + "Please reload the page." : "Ricarica la pagina.", + "Please try to restart the app." : "Prova a riavviare l'applicazione.", + "Please try to reload the page." : "Per favore prova a ricaricare la pagina.", + "Do not disturb" : "Non disturbare", + "Away" : "Assente", + "Microphone {number}" : "Microfono {number}", + "Camera {number}" : "Fotocamera {number}", + "Speaker {number}" : "Altoparlante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembra che tu abbia parlato mentre eri silenziato, rimuovi il silenzio perché gli altri possano sentirti", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Impossibile stabilire una connessione con almeno un partecipante. Un server TURN potrebbe essere necessario in questo scenario. Chiedi al tuo amministratore di configurarne uno seguendo {linkstart}questa documentazione{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "L'operazione sta richiedendo più tempo del previsto. I permessi multimediali sono già stati accordati (o rifiutati)? Se sì, riavvia il browser, poiché audio e video non funzionano", + "Access to microphone & camera is only possible with HTTPS" : "L'accesso a microfono e fotocamera è possibile solo con HTTPS", + "Please move your setup to HTTPS" : "Sposta la tua configurazione su HTTPS", + "Access to microphone & camera was denied" : "L'accesso a microfono e fotocamera è stato negato", + "WebRTC is not supported in your browser" : "WebRTC non è supportato dal tuo browser", + "Please use a different browser like Firefox or Chrome" : "Utilizza un browser diverso come Firefox o Chrome", + "Error while accessing microphone & camera" : "Errore durante l'accesso a microfono e fotocamera", + "%s Talk on your mobile devices" : "%s Talk sui tuoi dispositivi mobili ", + "Join conversations at any time, anywhere, on any device." : "Unisciti alle conversazioni in qualsiasi momento, ovunque, su qualsiasi dispositivo.", + "Android app" : "Applicazione Android", + "iOS app" : "Applicazione iOS", + "__language_name__" : "Italiano", + "Webhook Demo" : "Demo Webhook", + "Call summary (%s)" : "Riassunto della chiamata (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Il bot di riassunto delle chiamate pubblica un messaggio di sintesi dopo la chiamata, elencando tutti i partecipanti e descrivendo le attività.", + "Tasks" : "Attività", + "Notes" : "Note", + "Reports" : "Reports", + "Decisions" : "Decisioni", + "Agenda" : "Agenda", + "Call summary" : "Riassunto della chiamata", + "Call summary - {title}" : "Riassunto della chiamata - {title}", + "Talk conversation for event" : "Conversazione di Talk per un evento", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push è installato, questo migliora le prestazioni dei client desktop.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} non è installato, ciò potrebbe causare problemi di prestazioni durante l'utilizzo dei client desktop.", + "Next meeting" : "Prossimo meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Pianifica un meeting dal tuo calendario. Una conversazione Talk deve essere impostata come posizione per essere visualizzata qui.", + "Join conversations from remote Nextcloud servers" : "Partecipa alle conversazioni dai server Nextcloud remoti", + "Your default media state has been saved" : "Il tuo stato predefinito dei media è stato salvato", + "Set reminder for later today" : "Imposta promemoria per più tardi oggi", + "Set reminder for tomorrow" : "Imposta promemoria per domani", + "Set reminder for this weekend" : "Imposta promemoria per questo fine settimana", + "Set reminder for next week" : "Imposta promemoria per la prossima settimana", + "Generate summary" : "Genera riassunto", + "Open poll • You voted already" : "Sondaggio aperto • Hai già votato", + "Open poll • Click to vote" : "Sondaggio aperto • Fai clic per votare", + "Poll • Ended" : "Sondaggio • Terminato", + "Talk recording from {time} ({conversation})" : "Registrazione della conversazione da {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Risultati del sondaggio • %n voto","Risultati del sondaggio • %n voti","Risultati del sondaggio • %n voti"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Sondaggio aperto • %n voto","Sondaggio aperto • %n voti","Sondaggio aperto • %n voti"], + "Submit vote" : "Invia voto", + "Your privacy setting has been saved" : "Le tue impostazioni di riservatezza sono state salvate", + "Your personal setting has been saved" : "Le tue impostazioni personali sono state salvate", + "Failed to save sounds setting" : "Errore nel salvare le impostazioni dei suoni ", + "Sounds setting saved" : "Impostazione dei suoni salvata", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk è stato aggiornato, non è possibile avviare o partecipare a una chiamata.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ti sei unito alla conversazione in un'altra finestra o dispositivo. Questo non è attualmente supportato da Nextcloud Talk, quindi questa sessione è stata chiusa.", + "Nextcloud Talk was updated." : "Nextcloud Talk è stato aggiornato.", + "Nextcloud is in maintenance mode." : "Nextcloud è in modalità manutenzione.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation è stato aggiornato." +},"pluralForm" :"nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/ja.js b/l10n/ja.js new file mode 100644 index 0000000..650adac --- /dev/null +++ b/l10n/ja.js @@ -0,0 +1,1834 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "会話", + "(Duration %s)" : "(時間 %s )", + "You attended a call with {user1}" : "{user1} さんとの通話に参加しました", + "_%n guest_::_%n guests_" : ["ゲスト %n 名"], + "You attended a call with {user1} and {user2}" : "{user1} さんと {user2} さんの通話に参加しました", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}さん、{user2} さんと {user3} さんの通話に参加しました", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1} さん、{user2} さん、 {user3} さんと {user4} さんの通話に参加しました", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1} さん、{user2} さん、{user3} さん、{user4} さんと {user5} さんの通話に参加しました", + "_%n other_::_%n others_" : ["他 %n 名"], + "{actor} invited you to {call}" : "{actor} さんから {call} に招待されました", + "You were invited to a conversation or had a call" : "会話への招待、または着信があったとき", + "Other activities" : "その他のアクティビティ", + "Talk" : "トーク", + "Guest" : "ゲスト", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Nextcloud Talkへようこそ!\nこのチャットでは、Nextcloud Talkで利用できる新機能について説明します。", + "## New in Talk %s" : "## トークの新機能 %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft EdgeとSafariで音声通話とビデオ通話ができるようになりました", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 1対1の会話が持続するようになり、誤ってグループ会話になってしまうことがなくなりました。また、参加者の1人が会話から退出しても、会話は自動的に削除されなくなりました。参加者の両方が退出した場合のみ、会話はサーバーから削除されます", + "- You can now notify all participants by posting \"@all\" into the chat" : "- チャットに「@all」を付けることで、参加者全員に通知できるようになりました", + "- With the \"arrow-up\" key you can repost your last message" : "- ↑キーを押して、最後のメッセージを再投稿できます", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talkでコマンドを使用したり、「/help」をチャットメッセージとして送信したりできるようになりました", + "- With projects you can create quick links between conversations, files and other items" : "- プロジェクトを使用すると、会話、ファイル、およびその他のアイテム間のクイックリンクを作成できます", + "- You can now mention guests in the chat" : "- チャット内でゲストに対してメンションできるようになりました", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 会話にロビーを設置できるようになりました。 これにより、モデレーターはチャットと通話に参加し、会議の準備をすることができるようになりました。その間、ユーザーとゲストは待つ必要があります", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- メッセージに直接返信できるようになり、メッセージの内容を詳しく説明できるようになりました", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "会話と参加者を検索すると、既存の会話もフィルタリングされるため、以前の会話を簡単に見つけることができます", + "- You can now add custom user groups to conversations when the circles app is installed" : "サークルアプリのインストール時に、カスタムユーザーグループを会話に追加できるようになりました", + "- Check out the new grid and call view" : "- 新しいグリッドと通話ビューをお試しください", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- デバイスからファイルをドラッグ&ドロップして、チャットに直接アップロードきるようになりました", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 共有ファイルをビューアアプリのチャットビューで直接開くようになりました", + "- You can now search for chats and messages in the unified search in the top bar" : "-トップバーの統合検索でチャットやメッセージを検索できるようになりました", + "- Spice up your messages with emojis from the emoji picker" : "- 絵文字ピッカーからの絵文字でメッセージを装飾", + "- You can now change your camera and microphone while being in a call" : "- 通話中にカメラとマイクを変更できるようになりました", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 会話に説明付きのコンテキストを与えて開き、ログインしたユーザーが会話を見つけて参加できるようになりました", + "- See a read status and send failed messages again" : "- 既読ステータスを確認し、送信に失敗したメッセージを再送できるようになりました", + "- Raise your hand in a call with the R key" : "- Rキーを押すと通話中に挙手できるようになりました", + "- Join the same conversation and call from multiple devices" : "- 複数のデバイスから同一の会話や通話にさんかできるようになりました", + "- Send voice messages, share your location or contact details" : "- ボイスメッセージを送信したり、現在地や連絡先の詳細を共有できるようになりました", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 会話にグループを追加すると、グループメンバーが参加者として自動的に追加されるようになりました", + "- A preview of your audio and video is shown before joining a call" : "- 通話に参加する前に、音声とビデオのプレビューがご確認いただけるようになりました", + "- You can now blur your background in the newly designed call view" : "- 最新デザインの通話ビューで、背景をぼかすことが可能になりました", + "- Moderators can now assign general and individual permissions to participants" : "- モデレーターは、参加者に一般および個別の権限を割り当てることができるようになりました", + "- You can now react to chat messages" : "- チャットメッセージにリアクションが可能になりました", + "- In the sidebar you can now find an overview of the latest shared items" : "- サイドバーで、最新の共有済みアイテムに関する概要を確認できるようになりました", + "- Use a poll to collect the opinions of others or settle on a date" : "- アンケートを使用して他の人の意見を集めたり、日付を決められます", + "- Configure an expiration time for chat messages" : "- チャットメッセージの有効期限を設定できます", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 参加者が多数の場合は、他の人に通知せずに通話を開始できます。通話を開始してから個別に通話通知を送信できます。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 緊急でない場合は、受信者に通知せずにチャット メッセージを送信できます", + "- Emojis can now be autocompleted by typing a \":\"" : "- 「:」を入力して絵文字を自動補完入力できるようになりました。", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 「/」を入力して新しいスマートピッカーを起動し、さまざまなアイテムをリンクことができるようになりました。", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主催者がブレイクアウトルームを作成できるようになりました(要高性能バックエンド)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 通話を録音できるようになりました(要高性能バックエンド)", + "- Conversations can now have an avatar or emoji as icon" : "- 会話にアバターまたは絵文字をアイコンとして含めることができるようになりました", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- ビデオ通話で背景をぼかすだけでなく、バーチャル背景も利用可能になりました", + "- Reactions are now available during calls" : "- 通話中のリアクションが利用できるようになりました", + "- Typing indicators show which users are currently typing a message" : "- 入力インジケーターは、どのユーザーが現在メッセージを入力しているか示します", + "- Groups can now be mentioned in chats" : "- グループをチャットで言及できるようになりました", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 文字起こしプロバイダーアプリが登録されている場合、通話録音は自動的に文字起こしされます", + "- Chat messages can be translated if a translation provider app is registered" : "- 翻訳プロバイダーアプリが登録されている場合、チャットメッセージを翻訳できます", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** が _chat_ メッセージで使用できるようになりました", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook を使用してボットを実装できるようになりました。詳細については、ドキュメントを参照してください https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- チャットメッセージにリマインダーを設定すると後で再度通知されるようにできるようになりました", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Note to self** 会話を使用して、メモを取りデバイス間で情報を共有します", + "- Captions allow to send a message with a file at the same time" : "- キャプションを使えば、メッセージとファイルを同時に送信できます", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 画面共有中にスピーカーの映像が見えるようになり、通話のリアクションがアニメーションで表示されるようになった", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- ログインした作成者とモデレーターが6時間以内はメッセージを編集できるようになりました", + "- Unsent message drafts are now saved in your browser" : "- 未送信のメッセージの下書きはブラウザに保存されるようになりました", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 他のNextcloudのTalkサーバーと連携してテキストチャットできるようになりました", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- モデレータはアカウントとゲストを退室させ、会話に再度参加するのを禁止できるようになりました", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- リンクされたカレンダーイベントや不在時の代理者からの通話が、会話画面に表示されるようになりました", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 他のNextcloud Talk サーバーと連携して通話できるようになりました(要高性能バックエンド)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows、macOS、Linux用Nextcloud Talkデスクトップ クライアントをリリース: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloudアシスタントを使用して、チャットの通話録音と未読メッセージを要約", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 電子メールアドレス経由で招待されたゲストを識別、参加者リストのインポート、投票の下書き、および通話参加者リストのダウンロードによる会議の改善", + "- Archive conversations to stay focused" : "- 会話をアーカイブして、必要なものに集中できるようになりました", + "- Schedule a meeting into your calendar from within a conversation" : "- 会話内からカレンダーへ会議を予約する", + "- Search for messages of the current conversation directly in the right sidebar" : "- 現在の会話のメッセージを右側のサイドバーで直接検索", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 新しいコンパクトなリストを使用して、より多くの会話を一目で確認できます (トーク設定で有効化)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 会議についての会話は、カレンダーでタイトルと説明が同期されるようになりました。開始時間が近づくまで、検索フィルターでは非表示になります", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 通知設定で会話を機密としてマークすると、会話リストと通知からメッセージの内容が非表示になります", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 会話に重要マークを付けると「応答不可」中にもプッシュ通知を受信できます", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- この1対1通話に他の参加者を追加して、その場で新しいグループ通話を作成する", + "- Use threads to keep your chat and discussions organized" : "- スレッドを使ってチャットや議論を整理", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話中にライブ文字起こしが利用できるようになりました (ライブ文字起こしのExAppと高性能バックエンドが必要です)", + "Talk updates ✅" : "Talk アップデート ✅", + "Reaction deleted by author" : "作成者により削除されたリアクション", + "{actor} created the conversation" : "{actor} さんが会話を作成しました", + "You created the conversation" : "会話を作成しました", + "System created the conversation" : "システムが会話を作成しました", + "An administrator created the conversation" : "管理者が会話を作成しました", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}が会話を%1$sから%2$sにリネームしました", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "会話を%1$sから%2$sにリネームしました", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理者が会話の名前を \"%1$s\" から \"%2$s\" に変更しました", + "{actor} set the description" : "{actor} が説明を設定しました", + "You set the description" : "詳細を設定しました", + "An administrator set the description" : "管理者が説明を設定しました", + "{actor} removed the description" : "{actor} が詳細を削除しました", + "You removed the description" : "詳細を削除しました", + "An administrator removed the description" : "管理者が詳細を削除しました", + "You started a silent call" : "あなたはサイレントコールを開始しました", + "{actor} started a silent call" : "{actor} はサイレントコールを開始しました", + "You started a call" : "通話を開始しました", + "Outgoing call" : "発信", + "{actor} started a call" : "{actor}が通話を開始しました", + "Incoming call" : "着信", + "{actor} joined the call" : "{actor} が通話に参加しました", + "You joined the call" : "あなたはこの通話に参加しました", + "{actor} left the call" : "{actor} が通話を離脱しました", + "You left the call" : "あなたはこの通話を離脱しました", + "{actor} unlocked the conversation" : "{actor} が会話のロックを解除しました", + "You unlocked the conversation" : "会話のロックを解除しました", + "An administrator unlocked the conversation" : "管理者が会話のロックを解除しました", + "{actor} locked the conversation" : "{actor} が会話をロックしました", + "You locked the conversation" : "会話をロックしました", + "An administrator locked the conversation" : "管理者が会話をロックしました", + "{actor} limited the conversation to the current participants" : "{actor} は会話を現在の参加者に限定しました", + "You limited the conversation to the current participants" : "会話を現在の参加者に限定しました", + "An administrator limited the conversation to the current participants" : "管理者は会話を現在の参加者に制限しました", + "{actor} opened the conversation to registered users" : "{actor} が登録ユーザーに会話を公開しました", + "You opened the conversation to registered users" : "登録ユーザーへ会話を公開しました", + "An administrator opened the conversation to registered users" : "管理者が登録ユーザーへ会話を公開しました", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} は、登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "You opened the conversation to registered users and users created with the Guests app" : "登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理者が登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "The conversation is now open to everyone" : "全員への会話が開始されました", + "{actor} opened the conversation to everyone" : "{actor}が全員への会話を開始しました", + "You opened the conversation to everyone" : "全員への会話を開始しました", + "{actor} restricted the conversation to moderators" : "{actor} が会話をモデレーターに制限しました", + "You restricted the conversation to moderators" : "会話をモデレーターに限定しました", + "{actor} started breakout rooms" : "{actor} が子会議室を開始しました", + "You started breakout rooms" : "子会議室を開始しました", + "{actor} stopped breakout rooms" : "{actor} が子会議室を停止しました", + "You stopped breakout rooms" : "子会議室を停止しました", + "{actor} allowed guests" : "{actor} がゲストを許可しました", + "You allowed guests" : "あなたがゲストを許可しました", + "An administrator allowed guests" : "管理者がゲストを許可しました", + "{actor} disallowed guests" : "{actor}がゲストを拒否しました", + "You disallowed guests" : "ゲストを拒否しました", + "An administrator disallowed guests" : "管理者がゲストを拒否しました", + "{actor} set a password" : "{actor} がパスワードを設定しました", + "You set a password" : "パスワードを設定する", + "An administrator set a password" : "管理者がパスワードを設定しました", + "{actor} removed the password" : "{actor} がパスワードを削除しました", + "You removed the password" : "パスワードを削除しました", + "An administrator removed the password" : "管理者がパスワードを削除しました", + "{actor} added {user}" : "{actor} が {user} を追加しました", + "You joined the conversation" : "会話に参加しました", + "{actor} joined the conversation" : "{actor}が会話に参加しました", + "You added {user}" : "{user}を追加しました", + "{actor} added you" : "{actor}があなたを追加しました", + "An administrator added you" : "管理者があなたを追加しました", + "An administrator added {user}" : "管理者が {user} を追加しました", + "You left the conversation" : "会話から抜けました", + "{actor} left the conversation" : "{actor}が会話から抜けました", + "{actor} removed {user}" : "{actor} が {user} を削除しました。", + "You removed {user}" : "{user}を削除しました", + "{actor} removed you" : "{actor}があなたを削除しました", + "An administrator removed you" : "管理者があなたを外しました", + "An administrator removed {user}" : "管理者が {user}を外しました", + "{actor} invited {federated_user}" : "{actor} が {federated_user} を招待しました", + "You invited {federated_user}" : "あなたが {federated_user} を招待しました", + "You accepted the invitation" : "あなたはこの招待を受け入れました", + "{actor} invited you" : "{actor} さんがあなたを招待しました", + "An administrator invited you" : "管理者があなたを招待しました", + "An administrator invited {federated_user}" : "管理者が {federated_user} を招待しました", + "{federated_user} accepted the invitation" : "{federated_user} さんが招待を承認しました", + "{actor} removed {federated_user}" : "{actor} さんが {federated_user} さんを削除しました", + "You removed {federated_user}" : "あなたが {federated_user} さんを削除しました", + "An administrator removed {federated_user}" : "管理者が {federated_user} さんを削除しました", + "{federated_user} declined the invitation" : "{federated_user} さんが招待を拒否しました", + "{actor} added group {group}" : "{actor} がグループ {group} を追加しました", + "You added group {group}" : "グループ {group} を追加しました", + "An administrator added group {group}" : "管理者が {group} グループを追加しました", + "{actor} removed group {group}" : "{actor} がグループ {group} を削除", + "You removed group {group}" : "グループ {group} を削除しました", + "An administrator removed group {group}" : "管理者が {group} グループを削除しました", + "You removed team {circle}" : "{circle}を削除しました", + "An administrator removed team {circle}" : "管理者がチーム{circle}を削除しました", + "{actor} added {phone}" : "{actor} が {phone} を追加しました", + "You added {phone}" : "あなたが {phone} を追加しました", + "An administrator added {phone}" : "管理者が {phone} を追加しました", + "{actor} removed {phone}" : "{actor} が {phone} を削除しました", + "You removed {phone}" : "あなたが {phone} を削除しました", + "An administrator removed {phone}" : "管理者が {phone} を削除しました", + "{actor} promoted {user} to moderator" : "{actor} が {user} をモデレーターに昇格しました", + "You promoted {user} to moderator" : "{user} をモデレータに昇格しました", + "{actor} promoted you to moderator" : "{actor}があなたをモデレータに昇格させました", + "An administrator promoted you to moderator" : "管理者があなたをモデレータに昇格させました", + "An administrator promoted {user} to moderator" : "管理者が {user}をモデレータに昇格させました", + "{actor} demoted {user} from moderator" : "{actor}が{user}をモデレーターから降格させました", + "You demoted {user} from moderator" : "{user}をモデレーターから降格させました", + "{actor} demoted you from moderator" : "{actor}があなたをモデレーターから降格させました", + "An administrator demoted you from moderator" : "管理者があなたをモデレーターから降格させました", + "An administrator demoted {user} from moderator" : "管理者が {user}をモデレーターから降格させました", + "{actor} shared a file which is no longer available" : "{actor}は使用できなくなったファイルを共有しました", + "You shared a file which is no longer available" : "使用できなくなったファイルを共有しました", + "The shared location is malformed" : "共有場所の形式が正しくありません", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} が、この会話を他のチャットと同期するようにMatterbridgeを設定しました", + "You set up Matterbridge to synchronize this conversation with other chats" : "この会話を他のチャットシステムと同期するようにMatterbridgeを設定します", + "{actor} created thread {title}" : "{actor}がスレッド{title}を作成した", + "You created thread {title}" : "{title}スレッドを作成しました", + "{actor} updated the Matterbridge configuration" : "{actor} がMatterbridgeの構成を更新しました。", + "You updated the Matterbridge configuration" : "Matterbridgeの構成を更新しました。", + "{actor} removed the Matterbridge configuration" : "{actor} はMatterbridge構成を削除しました", + "You removed the Matterbridge configuration" : "Matterbridge構成を削除しました", + "{actor} started Matterbridge" : "{actor} がMatterbridgeを開始しました", + "You started Matterbridge" : "Matterbridgeを開始しました", + "{actor} stopped Matterbridge" : "{actor} がMatterbridgeを停止しました", + "You stopped Matterbridge" : "Matterbridgeを停止しました", + "{actor} deleted a message" : "{actor} がメッセージを削除しました", + "You deleted a message" : "メッセージを削除しました", + "{actor} edited a message" : "{actor} がメッセージを編集しました", + "You edited a message" : "あなたがメッセージを編集しました", + "{actor} deleted a reaction" : "{actor} さんがリアクションを削除しました", + "You deleted a reaction" : "あなたはリアクションを削除しました", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["メッセージの有効期限を%n週間に設定しました。"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["メッセージの有効期限を%n日に設定しました。"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["メッセージの有効期限を%n時間に設定しました。"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["メッセージの有効期限を%n分に設定しました。"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}がメッセージの有効期限を%n週間に設定しました。"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}がメッセージの有効期限を%n日に設定しました。"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}がメッセージの有効期限を%n時間に設定しました。"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}がメッセージの有効期限を%n分に設定しました。"], + "{actor} disabled message expiration" : "{actor} がメッセージの有効期限を無効にしました", + "You disabled message expiration" : "メッセージの有効期限を無効にしました", + "{actor} cleared the history of the conversation" : "{actor} が会話の履歴を削除しました", + "You cleared the history of the conversation" : "会話の履歴を削除しました", + "{actor} set the conversation picture" : "{actor} がこのチャットの画像を設定しました", + "You set the conversation picture" : "このチャットの画像を設定しました", + "{actor} removed the conversation picture" : "{actor}がこのチャットの画像を削除しました", + "You removed the conversation picture" : "このチャットの画像を削除しました", + "{actor} ended the poll {poll}" : "{actor} が投票 {poll} を終了した", + "You ended the poll {poll}" : "あなたが投票 {poll} を終了した", + "{actor} started the video recording" : "{actor} がビデオ録画を開始しました", + "You started the video recording" : "あなたがビデオ録画を開始しました", + "{actor} stopped the video recording" : "{actor} がビデオ録画を停止しました", + "You stopped the video recording" : "あなたがビデオ録画を停止しました", + "{actor} started the audio recording" : "{actor} が音声録音を開始しました", + "You started the audio recording" : "あなたが音声録音を開始しました", + "{actor} stopped the audio recording" : "{actor} が音声録音を中止しました", + "You stopped the audio recording" : "あなたが音声録音を中止しました", + "The recording failed" : "レコーディングに失敗しました", + "Someone voted on the poll {poll}" : "誰かが投票 {poll} しました", + "Message deleted by author" : "作成者によって削除されたメッセージ", + "Message deleted by {actor}" : "{actor} によって削除されたメッセージ", + "Message deleted by you" : "あなたが削除したメッセージ", + "Deleted user" : "ユーザーを削除", + "Unknown number" : "不明な番号", + "Administration" : "管理", + "System" : "システム", + "%s (guest)" : "%s(ゲスト)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} さんが %n 人のゲストとの通話を終了しました (通話時間 {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} さんが {user1} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} さんが {user1} さんと {user2} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さんと {user3} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さん、 {user3} さん、 {user4} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さん、 {user3} さん、 {user4} さん、{user5} さんとの通話を終了しました (通話時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} の {user} のメッセージ", + "Message of {user}" : "{user} のメッセージ", + "Message of a deleted user in {conversation}" : "{conversation} の削除されたユーザーのメッセージ", + "Talk conversations" : "会話", + "Talk to %s" : "%s と通話", + "An error occurred. Please contact your administrator." : "エラーが発生しました。管理者に連絡してください。", + "Storage quota exceeded" : "ストレージの割り当てを超過しました", + "File not found" : "ファイルが見つかりません", + "File is not shared, or shared but not with the user" : "ファイルが共有されていないか、対象ユーザーを除いて共有されています", + "No account available to delete." : "削除するアカウントがありません。", + "Poll" : "投票", + "No image file provided" : "画像ファイルが提供されていません", + "File is too big" : "ファイルが大きすぎます", + "Invalid file provided" : "無効なファイルが提供されました", + "Invalid image" : "無効な画像", + "Unknown filetype" : "不明なファイルタイプ", + "Talk mentions" : "Talk", + "Say hi to your friends and colleagues!" : "友達や同僚に挨拶しましょう!", + "No unread mentions" : "未読はありません", + "Call in progress" : "呼び出し中", + "You were mentioned" : "あなたについて言及されました", + "Write to conversation" : "会話に書き込む", + "Writes event information into a conversation of your choice" : "選択した会話にイベント情報を書き込みます", + "Conversation invitation" : "会話への招待", + "Description" : "詳細", + "You can also dial-in via phone with the following details" : "次の詳細を使用して電話でダイヤルインすることもできます", + "Dial-in information" : "ダイヤルイン情報", + "Meeting ID" : "ミーティングID", + "Your PIN" : "あなたのPIN", + "Meeting" : "会議", + "Password request: %s" : "パスワードのリクエスト :%s", + "Private conversation" : "プライベート会話", + "Deleted user (%s)" : "削除済みユーザー(%s)", + "Failed to upload call recording" : "通話録音のアップロードに失敗しました", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "レコーディングサーバーは、通話 {call} の録音のアップロードに失敗しました。管理者に連絡してください。", + "Share to chat" : "チャットに共有する", + "Dismiss notification" : "通知を閉じる", + "Call recording now available" : "通話レコーディングが利用可能です", + "The recording for the call in {call} was uploaded to {file}." : "{call} の通話の録音は {file} にアップロードされました。", + "Transcript now available" : "トランスクリプトは現在利用可能です", + "The transcript for the call in {call} was uploaded to {file}." : "{call} の通話の録音は {file} にアップロードされました。", + "Failed to transcript call recording" : "通話レコーディングのトランスクリプトに失敗しました", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "サーバーは {call} のコールの {file} の通話レコーディングを transcript することに失敗しました。管理者に連絡してください。", + "Call summary now available" : "通話要約が利用可能になりました", + "The summary for the call in {call} was uploaded to {file}." : "{call}通話の要約が {file}にアップロードされました。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} が {remoteServer} 上の {roomName} に参加するようにあなたを招待しました", + "Accept" : "承諾", + "Decline" : "拒否", + "{user1} invited you to a federated conversation" : "{user1} があなたをフェデレーション会話に招待しました", + "New message" : "新規メッセージ", + "Reminder" : "リマインダー", + "Notification" : "通知", + "Reminder: You in {call}" : "リマインダー: You in {call}", + "Reminder: {user} in {call}" : "リマインダー: {user} in {call}", + "Reminder: Deleted user in {call}" : "リマインダー: {call} で削除されたユーザー", + "Reminder: {guest} (guest) in {call}" : "リマインダー: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "リマインダー: Guest in {call}", + "{user} reacted with {reaction}" : "{user} が {reaction} で反応しました", + "{user} reacted with {reaction} in {call}" : "{user} は {call} で {reaction} で反応しました", + "Deleted user reacted with {reaction} in {call}" : "削除されたユーザーは {call} で {reaction} で反応しました", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) は {reaction} で {call} に反応しました", + "Guest reacted with {reaction} in {call}" : "ゲスト は {call} で {reaction} で反応しました", + "{user} in {call}" : "{call} の {user}", + "Deleted user in {call}" : "{call} から削除されたユーザー", + "{guest} (guest) in {call}" : "{call}の(ゲスト) {guest}", + "Guest in {call}" : "{call} のゲスト", + "{user} sent you a private message" : "{user} はあなたにプライベートなメッセージを送信しました", + "{user} sent a message in conversation {call}" : "{user}は会話{call}でメッセージを送りました", + "A deleted user sent a message in conversation {call}" : "削除されたユーザーが会話 {call} でメッセージを送信しました", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) 会話 {call} にメッセージを送信しました", + "A guest sent a message in conversation {call}" : "ゲストが会話 {call} でメッセージを送信しました", + "{user} replied to your private message" : "{user} はあなたのプライベートなメッセージに返信しました", + "{user} replied to your message in conversation {call}" : " {user} が会話{call}内のメッセージに返信しました", + "A deleted user replied to your message in conversation {call}" : "削除されたユーザーが会話 {call} であなたのメッセージに返信しました", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) が会話 {call} であなたのメッセージに返信しました", + "A guest replied to your message in conversation {call}" : "ゲストが会話 {call} であなたのメッセージに返信しました", + "Reminder: You in private conversation {call}" : "リマインダー:あなたは非公開の会話で {call} しています", + "Reminder: A deleted user in private conversation {call}" : "リマインダー:非公開の会話 {call} で削除されたユーザー", + "Reminder: {user} in private conversation" : "リマインダー:{user} は非公開の会話にいます", + "Reminder: You in conversation {call}" : "リマインダー:あなたは会話で {call} しています", + "Reminder: {user} in conversation {call}" : "リマインダー:{user} は会話で {call} しています", + "Reminder: A deleted user in conversation {call}" : "リマインダー:非公開の会話 {call} で削除されたユーザー", + "Reminder: {guest} (guest) in conversation {call}" : "リマインダー:{guest} (guest) は会話 {call} にいます", + "Reminder: A guest in conversation {call}" : "リマインダー:ゲストは会話 {call} にいます", + "{user} reacted with {reaction} to your private message" : "{user} さんが、あなたとのプライベートメッセージに {reaction} とリアクションしました", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} さんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "削除されたユーザーが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (ゲスト) さんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "A guest reacted with {reaction} to your message in conversation {call}" : "ゲストさんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "{user} mentioned you in a private conversation" : "{user}がプライベートな会話であなたについて話しをしました", + "{user} mentioned group {group} in conversation {call}" : "{user} は会話 {call} でグループ {group} に言及しました", + "{user} mentioned everyone in conversation {call}" : "{user} は会話 {call} で全員に言及しました", + "{user} mentioned you in conversation {call}" : "{user}は会話 {call} であなたについて話しをしました", + "A deleted user mentioned group {group} in conversation {call}" : "削除されたユーザーが会話 {call} でグループ {group} に言及しました", + "A deleted user mentioned everyone in conversation {call}" : "削除されたユーザーは会話 {call} で全員に言及しました", + "A deleted user mentioned you in conversation {call}" : "削除されたユーザーが会話 {call} であなたについて話しをしました", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) が会話 {call} でグループ {group} に言及しました", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) は会話 {call} で全員に言及しました", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) が会話 {call} であなたに話しをしました", + "A guest mentioned group {group} in conversation {call}" : "ゲストが会話 {call} でグループ {group} に言及しました", + "A guest mentioned everyone in conversation {call}" : "ゲストが会話 {call} で全員に言及しました", + "A guest mentioned you in conversation {call}" : "ゲストが会話{call}であなたについて話しをしました", + "View message" : "メッセージを表示する", + "Dismiss reminder" : "リマインダーを解除", + "View chat" : "チャットを見る", + "{user} invited you to a group conversation: {call}" : "{user}がグループ会話{call}にあなたを招待しました", + "Join call" : "通話開始", + "Answer call" : "応答", + "{user} would like to talk with you" : "{user} からの通話要請があります", + "Call back" : "折り返し電話", + "You missed a call from {user}" : "{user}からの着信に応答できませんでした。", + "A group call has started in {call}" : "{call} のグループ通話が開始されました", + "You missed a group call in {call}" : "{user}からのグループ着信に応答できませんでした。", + "{email} is requesting the password to access {file}" : "{email}は{file}にアクセスするためのパスワードをリクエストしています", + "{email} tried to request the password to access {file}" : "{email} が {file} にアクセスするためのパスワードを要求しようとしました", + "Someone is requesting the password to access {file}" : "誰かが{file}にアクセスするためのパスワードを要求しています", + "Someone tried to request the password to access {file}" : "誰かが {file} にアクセスするためのパスワードを要求しようとしました", + "Open settings" : "設定を開く", + "Hosted signaling server added" : "ホストされたシグナリングサーバーを追加しました", + "The hosted signaling server is now configured and will be used." : "ホストされたシグナリングサーバーが設定され、使用されるようになります。", + "Hosted signaling server removed" : "ホストされたシグナリングサーバーを削除しました", + "The hosted signaling server was removed and will not be used anymore." : "ホストされたシグナリングサーバーが削除され、使用できないようになります。", + "Hosted signaling server changed" : "ホストされたシグナリングサーバーを変更しました", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "ホストされたシグナリングサーバーのアカウントのステータスが\"{oldstatus}\"から\"{newstatus}\"に変更されました。", + "pending" : "保留中", + "active" : "有効", + "expired" : "有効期限切れ", + "blocked" : "ブロックされた", + "error" : "エラー", + "The certificate of {host} expires in {days} days" : "{host} の証明書は {days} 日後に期限切れになります", + "The certificate of {host} expired" : "{host} の証明書が期限切れです", + "Contact via Talk" : "Talk経由で連絡", + "Open Talk" : "公開トーク", + "Default" : "デフォルト", + "Presentation" : "プレゼンテーション", + "Conversations" : "会話", + "Messages in current conversation" : "現在の会話のメッセージ", + "{user}" : "{user}", + "Messages" : "メッセージ", + "{user} in {conversation}" : "{conversation} の {user}", + "Messages in other conversations" : "他の会話のメッセージ", + "One-to-one rooms always need to show the other users avatar" : "1対1のルームでは、常に相手ユーザーのアバターを表示する必要があります", + "Invalid emoji character" : "無効な絵文字", + "Invalid background color" : "無効な背景色", + "Avatar image is not square" : "アバター画像が正方形ではありません", + "Room {number}" : "ルーム {number}", + "Other" : "その他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "トライアルサーバーに到達できないため、トライアルのリクエストに失敗しました。後ほどもう一度お試しください。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "このインスタンスの認証に問題があります。もしかしたら、外部からURLを確認しても届かないのかもしれません。", + "Something unexpected happened." : "想定外のことが起きました。", + "The URL is invalid." : "無効なURLです。", + "An HTTPS URL is required." : "HTTPS URLは必須です。", + "The email address is invalid." : "無効なメールアドレスです。", + "The language is invalid." : "無効な言語です。", + "The country is invalid." : "無効な国名です。", + "There is a problem with the request of the trial. Please check your logs for further information." : "トライアルリクエストに問題があります。詳細はログを確認してください。", + "Too many requests are send from your servers address. Please try again later." : "あなたのサーバーアドレスからのリクエストが多すぎます。後でもう一度ためしてください。", + "There is already a trial registered for this Nextcloud instance." : "このNextcloudのインスタンスには、すでにトライアルが登録されています。", + "Something unexpected happened. Please try again later." : "想定外のことが起きました。後ほどもう一度お試しください。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "トライアルサーバー動作不良のたため、トライアルリクエストに失敗しました。後ほどもう一度お試しください。", + "Trial requested but failed to get account information. Please check back later." : "トライアルを要求しましたが、アカウント情報を取得できませんでした。後ほど確認してください。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "この認証要求に問題があります。もしかしたら、外部からURLを確認しても届かないのかもしれません。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "トライアルサーバー動作不良ため、アカウント情報の取得に失敗しました。後ほど確認してください。", + "There is a problem with fetching the account information. Please check your logs for further information." : "アカウント情報の取得中に問題が生じました。詳細はログを確認してください。", + "There is no such account registered." : "そのようなアカウントは登録されていません。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "トライアルサーバーにアクセスできないため、アカウント情報の取得に失敗しました。後ほど確認してください。", + "Deleting the hosted signaling server account failed. Please check back later." : "ホストされたシグナリングサーバーのアカウント削除に失敗しました。後ほど確認してください。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "トライアルサーバー動作不良のため、アカウントの削除に失敗しました。後ほど確認してください。", + "There is a problem with deleting the account. Please check your logs for further information." : "アカウントの削除中に問題が生じました。詳しくはログをご確認ください。", + "Too many requests are sent from your servers address. Please try again later." : "サーバーアドレスから送信されるリクエストが多すぎます。後でもう一度やり直してください。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "トライアルサーバーにアクセスできないため、アカウントの削除に失敗しました。後ほど確認してください。", + "Note to self" : "自分へのメモ", + "A place for your private notes, thoughts and ideas" : "あなたの非公開のメモ、思考とアイデアの場所", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** は、Nextcloudエコシステムとシームレスに統合された安全なセルフホスト型通信プラットフォームです。\n\n#### Nextcloud Talkの主な機能:\n\n* プライベートチャットとグループチャットでのチャットとメッセージング\n* 音声通話とビデオ通話\n* ファイル共有と他のNextcloudアプリとの統合\n* カスタマイズ可能な会話設定、モデレーション、プライバシー制御\n* Web、デスクトップ、モバイル(iOSおよびAndroid)\n* プライベートで安全な通信\n\n詳細については、[ユーザー ドキュメント](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html) をご覧ください", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "#Nextcloudトークへようこそ\n\nNextcloud Talkは、Nextcloudと統合されたプライベートで強力なメッセージングアプリです。プライベートまたはグループの会話でチャットしたり、音声通話やビデオ通話で共同作業したり、ウェビナーやイベントを企画したり、会話をカスタマイズしたりできます。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 テキストの書式を設定してリッチメッセージを作成する\n\nNextcloud Talkでは、Markdown構文を使用してメッセージを修飾できます。たとえば、**太字** または *斜体* の書式設定を適用したり、`テキストをコードとして強調表示`したりします。表を作成し、テキストに見出しを追加することも可能です。\n\nタイプミスを修正したり、書式を修正したりする必要がありますか? メッセージメニューから「メッセージの編集」をクリックしてメッセージを編集できます。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗添付ファイルやリンクを追加します\n\n「+」ボタンを使用すれば、Nextcloud Hubからファイルを添付できます。ファイルやさまざまなNextcloudアプリからもアイテムを共有できます。 Textアプリなど、一部のアプリではインタラクティブなウィジェットもサポートされています。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 会話をスムーズに:ユーザーにメンションしたり、メッセージに反応したりしましょう\n\n%sを使用して会話中の全員にメンションしたり、「@」を入力してリストから名前を選択して特定の参加者にメンションできます。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ スマート ピッカーでもっといろんな事を呼び出せます\n\n「/」を入力するか、「+」メニューからスマート ピッカーを開き、メッセージにさまざまなコンテンツを添付できます。 スマートピッカーを設定すると、Nextcloudアプリ、GIF、地図上の場所、AI生成コンテンツなどからアイテムを追加できます。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "⚙️ 会話管理設定 \n\n会話の管理画面で以下を設定できます:\n* 会話情報の編集 \n* 通知の管理 \n* 各種モデレーションルールの適用 \n* アクセスとセキュリティの設定 \n* ボットの有効化 \n* その他!", + "Andorra" : "アンドラ", + "United Arab Emirates" : "アラブ首長国連邦", + "Afghanistan" : "アフガニスタン", + "Antigua and Barbuda" : "アンティグア・バーブーダ", + "Anguilla" : "アンギラ", + "Albania" : "アルバニア", + "Armenia" : "アルメニア", + "Angola" : "アンゴラ", + "Antarctica" : "南極大陸", + "Argentina" : "アルゼンチン", + "American Samoa" : "アメリカ領サモア", + "Austria" : "オーストリア", + "Australia" : "オーストラリア", + "Aruba" : "アルバ", + "Åland Islands" : "オーランド諸島", + "Azerbaijan" : "アゼルバイジャン", + "Bosnia and Herzegovina" : "ボスニア・ヘルツェゴビナ", + "Barbados" : "バルバドス", + "Bangladesh" : "バングラデシュ", + "Belgium" : "ベルギー", + "Burkina Faso" : "ブルキナファソ", + "Bulgaria" : "ブルガリア", + "Bahrain" : "バーレーン", + "Burundi" : "ブルンジ共和国", + "Benin" : "ベナン", + "Saint Barthélemy" : "サン・バルテルミー島", + "Bermuda" : "バミューダ諸島", + "Brunei Darussalam" : "ブルネイ・ダルサラーム国", + "Bolivia, Plurinational State of" : "ボリビア多民族国家", + "Bonaire, Sint Eustatius and Saba" : "ボネール、シント・ユースタティウスおよびサバ", + "Brazil" : "ブラジル", + "Bahamas" : "バハマ", + "Bhutan" : "ブータン", + "Bouvet Island" : "ブーベ島", + "Botswana" : "ボツワナ", + "Belarus" : "ベラルーシ", + "Belize" : "ベリーズ", + "Canada" : "カナダ", + "Cocos (Keeling) Islands" : "ココス(キーリング)諸島", + "Congo, the Democratic Republic of the" : "コンゴ民主共和国", + "Central African Republic" : "中央アフリカ共和国", + "Congo" : "コンゴ共和国", + "Switzerland" : "スイス", + "Côte d'Ivoire" : "コートジボワール", + "Cook Islands" : "クック諸島", + "Chile" : "チリ", + "Cameroon" : "カメルーン", + "China" : "中華人民共和国", + "Colombia" : "コロンビア共和国", + "Costa Rica" : "コスタリカ", + "Cuba" : "キューバ", + "Cabo Verde" : "カーボベルデ", + "Curaçao" : "キュラソー島", + "Christmas Island" : "クリスマス諸島", + "Cyprus" : "キプロス共和国", + "Czechia" : "チェコ", + "Germany" : "ドイツ", + "Djibouti" : "ジブチ", + "Denmark" : "デンマーク", + "Dominica" : "ドミニカ国", + "Dominican Republic" : "ドミニカ共和国", + "Algeria" : "アルジェリア民主人民共和国", + "Ecuador" : "エクアドル", + "Estonia" : "エストニア", + "Egypt" : "エジプト", + "Western Sahara" : "西サハラ", + "Eritrea" : "エリトリア", + "Spain" : "スペイン", + "Ethiopia" : "エチオピア", + "Finland" : "フィンランド", + "Fiji" : "フィジー", + "Falkland Islands (Malvinas)" : "フォークランド(マルビナス)諸島", + "Micronesia, Federated States of" : "ミクロネシア連邦", + "Faroe Islands" : "フェロー諸島", + "France" : "フランス", + "Gabon" : "ガボン", + "United Kingdom of Great Britain and Northern Ireland" : "イギリス", + "Grenada" : "グレナダ", + "Georgia" : "ジョージア", + "French Guiana" : "フランス領ギアナ", + "Guernsey" : "ガーンジー", + "Ghana" : "ガーナ", + "Gibraltar" : "ジブラルタル", + "Greenland" : "グリーンランド", + "Gambia" : "ガンビア", + "Guinea" : "ギニア共和国", + "Guadeloupe" : "グアドループ", + "Equatorial Guinea" : "赤道ギニア共和国", + "Greece" : "ギリシャ", + "South Georgia and the South Sandwich Islands" : "サウスジョージア・サウスサンドウィッチ諸島", + "Guatemala" : "グアテマラ", + "Guam" : "グアム", + "Guinea-Bissau" : "ギニアビサウ共和国", + "Guyana" : "ガイアナ", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "ハード島とマクドナルド諸島", + "Honduras" : "ホンジュラス", + "Croatia" : "クロアチア", + "Haiti" : "ハイチ", + "Hungary" : "ハンガリー", + "Indonesia" : "インドネシア", + "Ireland" : "アイルランド", + "Israel" : "イスラエル", + "Isle of Man" : "マン島", + "India" : "インド", + "British Indian Ocean Territory" : "イギリス領インド洋地域", + "Iraq" : "イラク", + "Iran, Islamic Republic of" : "イラン・イスラム共和国", + "Iceland" : "アイスランド", + "Italy" : "イタリア", + "Jersey" : "ジャージー", + "Jamaica" : "ジャマイカ", + "Jordan" : "ヨルダン・ハシミテ王国", + "Japan" : "日本", + "Kenya" : "ケニア", + "Kyrgyzstan" : "キルギス", + "Cambodia" : "カンボジア", + "Kiribati" : "キリバス", + "Comoros" : "コモロ", + "Saint Kitts and Nevis" : "セントクリストファー・ネイビス", + "Korea, Democratic People's Republic of" : "朝鮮民主主義人民共和国", + "Korea, Republic of" : "大韓民国", + "Kuwait" : "クウェート", + "Cayman Islands" : "ケイマン諸島", + "Kazakhstan" : "カザフスタン", + "Lao People's Democratic Republic" : "ラオス", + "Lebanon" : "レバノン", + "Saint Lucia" : "セントルシア", + "Liechtenstein" : "リヒテンシュタイン", + "Sri Lanka" : "スリランカ", + "Liberia" : "リベリア", + "Lesotho" : "レソト", + "Lithuania" : "リトアニア", + "Luxembourg" : "ルクセンブルク", + "Latvia" : "ラトビア", + "Libya" : "リビア", + "Morocco" : "モロッコ", + "Monaco" : "モナコ", + "Moldova, Republic of" : "モルドバ共和国", + "Montenegro" : "モンテネグロ", + "Saint Martin (French part)" : "セント・マーチン島(フランス領)", + "Madagascar" : "マダガスカル", + "Marshall Islands" : "マーシャル諸島", + "North Macedonia" : "北マケドニア共和国", + "Mali" : "マリ", + "Myanmar" : "ミャンマー", + "Mongolia" : "モンゴル", + "Macao" : "マカオ", + "Northern Mariana Islands" : "北マリアナ諸島", + "Martinique" : "マルティニーク", + "Mauritania" : "モーリタニア", + "Montserrat" : "モントセラト", + "Malta" : "マルタ", + "Mauritius" : "モーリシャス", + "Maldives" : "モルディブ", + "Malawi" : "マラウイ共和国", + "Mexico" : "メキシコ", + "Malaysia" : "マレーシア", + "Mozambique" : "モザンビーク", + "Namibia" : "ナミビア", + "New Caledonia" : "ニューカレドニア", + "Niger" : "ニジェール", + "Norfolk Island" : "ノーフォーク島", + "Nigeria" : "ナイジェリア", + "Nicaragua" : "ニカラグア", + "Netherlands" : "オランダ", + "Norway" : "ノルウェー", + "Nepal" : "ネパール", + "Nauru" : "ナウル", + "Niue" : "ニウエ", + "New Zealand" : "ニュージーランド", + "Oman" : "オマーン", + "Panama" : "パナマ", + "Peru" : "ペルー", + "French Polynesia" : "フランス領ポリネシア", + "Papua New Guinea" : "パプアニューギニア", + "Philippines" : "フィリピン", + "Pakistan" : "パキスタン", + "Poland" : "ポーランド", + "Saint Pierre and Miquelon" : "サンピエール島・ミクロン島", + "Pitcairn" : "ピトケアン諸島", + "Puerto Rico" : "プエルトリコ", + "Palestine, State of" : "パレスチナ", + "Portugal" : "ポルトガル", + "Palau" : "パラオ", + "Paraguay" : "パラグアイ", + "Qatar" : "カタール", + "Réunion" : "レユニオン", + "Romania" : "ルーマニア", + "Serbia" : "セルビア", + "Russian Federation" : "ロシア連邦", + "Rwanda" : "ルワンダ", + "Saudi Arabia" : "サウジアラビア", + "Solomon Islands" : "ソロモン諸島", + "Seychelles" : "セーシェル", + "Sudan" : "スーダン", + "Sweden" : "スウェーデン", + "Singapore" : "シンガポール", + "Saint Helena, Ascension and Tristan da Cunha" : "セントヘレナ・アセンションおよびトリスタンダクーニャ", + "Slovenia" : "スロベニア", + "Svalbard and Jan Mayen" : "スヴァールバル諸島およびヤンマイエン島", + "Slovakia" : "スロバキア", + "Sierra Leone" : "シエラレオネ", + "San Marino" : "サンマリノ", + "Senegal" : "セネガル", + "Somalia" : "ソマリア", + "Suriname" : "スリナム", + "South Sudan" : "南スーダン", + "Sao Tome and Principe" : "サントメ・プリンシペ", + "El Salvador" : "エルサルバドル", + "Sint Maarten (Dutch part)" : "シント・マールテン(オランダ領)", + "Syrian Arab Republic" : "シリア・アラブ共和国", + "Eswatini" : "エスワティニ王国", + "Turks and Caicos Islands" : "タークス・カイコス諸島", + "Chad" : "チャド", + "French Southern Territories" : "フランス領南方・南極地域", + "Togo" : "トーゴ", + "Thailand" : "タイ", + "Tajikistan" : "タジキスタン", + "Tokelau" : "トケラウ", + "Timor-Leste" : "東ティモール", + "Turkmenistan" : "トルクメニスタン", + "Tunisia" : "チュニジア", + "Tonga" : "トンガ王国", + "Turkey" : "トルコ", + "Trinidad and Tobago" : "トリニダード・トバゴ", + "Tuvalu" : "ツバル", + "Taiwan, Province of China" : "台湾中華民国", + "Tanzania, United Republic of" : "タンザニア", + "Ukraine" : "ウクライナ", + "Uganda" : "ウガンダ", + "United States Minor Outlying Islands" : "合衆国領有小離島", + "United States of America" : "アメリカ合衆国", + "Uruguay" : "ウルグアイ", + "Uzbekistan" : "ウズベキスタン", + "Holy See" : "バチカン", + "Saint Vincent and the Grenadines" : "セントビンセント・グレナディーン", + "Venezuela, Bolivarian Republic of" : "ベネズエラ、ボリバル共和国", + "Virgin Islands, British" : "英領ヴァージン諸島", + "Virgin Islands, U.S." : "米バージン諸島", + "Viet Nam" : "ベトナム", + "Vanuatu" : "バヌアツ", + "Wallis and Futuna" : "ウォリス・フツナ", + "Samoa" : "サモア", + "Yemen" : "イエメン", + "Mayotte" : "マヨット", + "South Africa" : "南アフリカ", + "Zambia" : "ザンビア", + "Zimbabwe" : "ジンバブエ", + "Background blur" : "背景をぼかす", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Webサーバーは、`.wasm`ファイルを配信するように適切に設定されていません。これは通常、Nginx設定に問題があります。背景のぼかしを行うためには、`.wasm`ファイルを配信できるように調整する必要があります。 Nginxの設定をドキュメントの推奨構成と比べてください。", + "Federation" : "連携", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Talk連携を有効にする場合は、\"memcache.locking\"の構成が必須です。", + "High-performance backend" : "高性能バックエンド", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "高性能バックエンドが構成されていません - 高性能バックエンドなしでNextcloud Talkを実行すると、非常に小規模な通話 (最大2~3人の参加者)でのみ利用できます。複数の参加者との通話がシームレスに機能するようにするためには高性能バックエンドを設定してください。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高パフォーマンス バックエンドの「conversation_cluster」モードの実行は非推奨となり、次のバージョンではサポートされなくなります。現在、高性能バックエンドはクラスタリングをサポートしているため、それを代わりに使用してください。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "複数の高パフォーマンス バックエンドの定義は非推奨となり、次のバージョンではサポートされなくなります。代わりに、ロードバランサーをクラスター化されたシグナリング サーバーと一緒にセットアップし、Talk設定で構成する必要があります。", + "Error: Cannot connect to server" : "エラー:サーバーに接続できません", + "Error: Server did not respond with proper JSON" : "エラー:サーバーは適切なJSONで応答しませんでした", + "Error: Certificate expired" : "エラー: 証明書の有効期限が切れています", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "エラー: Nextcloudサーバーと高性能バックエンドサーバーのシステム時間が同期していません。両方のサーバーがタイムサーバーに接続されていることを確認するか、手動で時刻を同期してください。", + "Could not get version" : "バージョンを取得できません", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "エラー: 実行中のバージョン: {version}; このバージョンのTalkと互換性を持たせるには、サーバーの更新が必要です", + "Error: Server responded with: {error}" : "エラー:サーバーは次の応答を返しました: {error}", + "Error: Unknown error occurred" : "エラー:不明なエラーが発生しました", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告: 実行中のバージョン: {version}; サーバーはこのTalkバージョンの全ての機能をサポートしていません。欠落している機能: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "高性能バックエンドでNextcloud Talkを実行する場合は、メモリキャッシュを構成することを強くお勧めします。", + "Recording backend" : "レコーディングバックエンド", + "SIP configuration" : "SIP構成", + "Invalid date, date format must be YYYY-MM-DD" : "日付が無効です。日付形式はYYYY-MM-DDである必要があります", + "Conversation not found" : "会話が見つかりません", + "Path is already shared with this conversation" : "パスはすでにこの会話で共有されています", + "Chat, video & audio-conferencing using WebRTC" : "WebRTCを使用したチャット、ビデオ、および音声会議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC を使用したチャット、ビデオ、音声会議\n\n* 💬 **チャット** Nextcloud Talkには簡単なテキスト チャットが付属しており、Nextcloud Filesアプリまたはローカル デバイスからファイルを共有またはアップロードし、他の参加者に通知することができます。\n* 👥 **プライベート、グループ、パブリック、およびパスワードで保護された通話!** 特定の誰かやグループ全体を招待したり、公開リンクの送信により通話へ招待します。\n* 🌐 **フェデレーション チャット** 他のNextcloudサーバー上のユーザーとチャットできます。\n* 💻 **画面共有!** 通話の参加者に画面を共有します。\n* 🚀 **ファイル、カレンダー、ユーザー ステータス、ダッシュボード、フロー、マップ、スマート ピッカー、連絡先、デッキなどの他のNextcloudアプリと統合** \n* 🌉 **他のチャット ソリューションと同期** [Matterbridge](https://github.com/42wim/matterbridge/) がTalkに統合されているため、他の多くのチャット ソリューションをNextcloud Talkに簡単に同期したり、その逆を行うことができます。", + "Leave call" : "通話終了", + "Navigating away from the page will leave the call in {conversation}" : "ページから離れると {conversation} の中に呼び出しが残ります。", + "Stay in call" : "通話を続ける", + "Discuss this file" : "このファイルについて話し合う", + "Share this file with others to discuss it" : "このファイルを他の人と共有して話し合う", + "Share this file" : "このファイルを共有する", + "Join conversation" : "会話に参加", + "This conversation is password-protected." : "この会話はパスワードで保護されています。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "あなたのIPから複数の無効なパスワード試行が検出されました。したがって、次の試行は最大30秒間抑制されます。", + "The password is wrong. Try again." : "パスワードが違います。再入力してください", + "Password" : "パスワード", + "Submit" : "送信", + "Error requesting the password." : "パスワードのリクエスト中にエラーが発生しました。", + "Request password" : "パスワードを入力", + "This conversation has ended" : "会話は終了しました", + "Error occurred when joining the conversation" : "会話に参加する際にエラーが発生しました", + "Close Talk sidebar" : "Talk サイドバーを閉じる", + "Open Talk sidebar" : "Talk サイドバーを開く", + "Everyone" : "すべてのユーザー", + "Users and moderators" : "ユーザーとモデレーター", + "Moderators only" : "モデレータ専用", + "Disable calls" : "通話を無効にする", + "Save changes" : "変更を保存", + "Saving …" : "保存中...", + "Saved!" : "保存完了!", + "Limit to groups" : "グループに制限する", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "最低1つグループが選択されている場合、グループにリストされたユーザーのみが会話に参加できます。", + "Guests can still join public conversations." : "ゲストはまだ公開会話に参加できます。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "トークが使えなくなったユーザーも、以前の会話の参加者としてリストアップされ、チャットメッセージも残されています。", + "Limit using Talk" : "トークの使用を制限", + "Limit creating a public and group conversation" : "公開およびグループ会話の作成を制限する", + "Limit creating conversations" : "会話の作成を制限する", + "Limit starting a call" : "通話の開始を制限する", + "Limit starting calls" : "通話の開始を制限する", + "When a call has started, everyone with access to the conversation can join the call." : "通話が開始されると、会話にアクセスできる全員が通話に参加できます。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "このサーバーには次のボットがインストールされています。ドキュメントには、{linkstart1}独自のボットを作成する方法{linkend}や、サーバーで有効にする{linkstart2}ボットのリスト{linkend}の詳細が見つかります。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "このサーバーにはボットがインストールされていません。ドキュメントには、{linkstart1}独自のボットを作成する方法{linkend}や、サーバーで有効にする{linkstart2}ボットのリスト{linkend}の詳細が見つかります。", + "Description is not provided" : "概要は提供されていません", + "Locked for moderators" : "モデレーターのためにロックされた", + "Enabled" : "有効", + "Disabled" : "無効", + "Bots settings" : "ボットの設定", + "State" : "状態", + "Name" : "名前", + "Last error" : "最後のエラー", + "Total errors count" : "エラーの総数", + "Find more bots" : "他のボットを探す", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "信頼できるサーバーは、{linkstart}共有設定ページ{linkend}で設定することができます。", + "Beta" : "ベータ", + "Enable Federation in Talk app" : "アプリ内でTalkの連携を有効化してください。", + "Permissions" : "アクセス権限", + "Allow users to be invited to federated conversations" : "ユーザーを招待してフェデレーション会話を許可する", + "Only allow to federate with trusted servers" : "信頼できるサーバーにのみ連携を許可する", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "最低1つグループが選択されている場合、グループにリストされたユーザーのみが会話にフェデレーテッドユーザーを招待できます。", + "Select groups …" : "グループを選択 ...", + "All messages" : "全てのメッセージ", + "@-mentions only" : "@で直接会話", + "Off" : "オフ", + "General settings" : "一般設定", + "Default notification settings" : "デフォルトの通知設定", + "Default group notification" : "デフォルトのグループ通知", + "Default group notification for new groups" : "新しいグループのデフォルトのグループ通知", + "Integration into other apps" : "他のアプリへの統合", + "Allow conversations on files" : "ファイルでの会話を許可する", + "Allow conversations on public shares for files" : "公開共有ファイルでの会話を許可する", + "Enable encryption" : "暗号化を有効にする", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "構成されたSIPブリッジでのエンドツーエンドの暗号化通話には、新しいバージョンの高性能バックエンドとSIPブリッジが必要です。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "上のボタンをクリックすると、フォーム内の情報がStruktur AGのサーバーに送信されます。詳細については、{linkstart}spreed.eu{linkend}をご覧ください。", + "Pending" : "保留中", + "Error" : "エラー", + "Blocked" : "ブロックされた", + "Active" : "アクティブ化", + "Expired" : "有効期限切れ", + "Never" : "なし", + "The trial could not be requested. Please try again later." : "トライアルを要求できませんでした。後ほどもう一度お試しください。", + "The account could not be deleted. Please try again later." : "アカウントを削除できませんでした。後ほどもう一度お試しください。", + "Hosted High-performance backend" : "ホストされた高性能バックエンド", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "当社のパートナーであるStruktur AGは、ホストされたシグナリングサーバーをリクエストできるサービスを提供しています。以下のフォームに必要事項を入力するだけで、Nextcloudがリクエストを行います。サーバーの設定が完了すると、認証情報が自動的に入力されます。これにより、既存のシグナリングサーバーの設定が上書きされます。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "高性能バックエンド アカウントにSTUNおよび/またはTURN機能が含まれている場合、設定はそれに応じて更新されます。", + "URL of this Nextcloud instance" : "このNextcloudインスタンスのURL", + "Full name of the user requesting the trial" : "トライアルを要求しているユーザーのフルネーム", + "Email of the user" : "ユーザーのメールアドレス", + "Language" : "言語", + "Country" : "国名", + "Request signaling server trial" : "シグナリングサーバーへのトライアル要求", + "You can see the current status of your hosted signaling server in the following table." : "次の表で、ホストされているシグナリング サーバーの現在の状態を確認できます。", + "Status" : "ステータス", + "Created at" : "作成:", + "Expires at" : "有効期限:", + "Limits" : "制限", + "Yes" : "はい", + "No" : "いいえ", + "Delete the signaling server account" : "シグナリングサーバーのアカウントを削除", + "_%n user_::_%n users_" : ["%nユーザー"], + "Installed version: {version}" : "インストールされているバージョン: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridgeをインストールすることで、Nextcloud Talkをほかのサービスにリンクできます。詳細は、{linkstart1}GitHub ページ{linkend}をご確認ください。アプリのダウンロードとインストールには時間がかかる場合があります。タイムアウトした場合は、{linkstart2}Nextcloud アプリストア{linkend}から手動でインストールしてください。", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridgeバイナリが見つからなかったか、実行できませんでした。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "設定を使用して、Matterbridgeバイナリへのパスを手動で設定することもできます。詳細については、{linkstart} Matterbridge統合ドキュメント{linkend}を確認してください。", + "Downloading …" : "ダウンロード中…", + "Install Talk Matterbridge" : "Talk Matterbridgeをインストールします", + "An error occurred while installing the Matterbridge app" : "Matterbridgeアプリのインストール中にエラーが発生しました", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridgeのインストール中にエラーが発生しました。手動でインストールしてください。", + "Failed to execute Matterbridge binary." : "Matterbridgeバイナリを実行できませんでした。", + "Matterbridge integration" : "Matterbridge連携", + "Enable Matterbridge integration" : "Matterbridge連携を有効にする", + "Status: Checking connection" : "ステータス:接続を確認しています", + "OK: Running version: {version}" : "OK: 実行中のバージョン: {version}", + "Error: Server seems to be a Signaling server" : "エラー: サーバーはシグナリングサーバーのようです", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "エラー: Nextcloud サーバーと録画バックエンドサーバーのシステム時刻が同期していません。両方のサーバーがタイムサーバーに接続されていることを確認するか、手動で時刻を同期してください。", + "Recording backend URL" : "レコーディングバックエンドURL", + "Validate SSL certificate" : "SSL証明書を検証する", + "Delete this server" : "このサーバーを削除", + "Test this server" : "このサーバーをテスト", + "Disabled for all calls" : "全ての通話で無効化されました", + "Enabled for all calls" : "全ての通話で有効化されました", + "Configurable on conversation level by moderators" : "モデレーターにより会話レベルで設定可能", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHPの設定 \"upload_max_filesize\" または \"post_max_size\" では、{maxUpload} までのファイルのアップロードが許可されます。", + "Recording backend settings saved" : "レコーディングバックエンドの設定が保存されました", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "会話モデレーターは、会話レベルで同意を有効にすることができます。この会話に参加する前に、各参加者は録音されることへの同意が必要となります。", + "The consent to be recorded will be required for each participant before joining every call." : "毎回通話に参加する前に、録音されることへの同意が各参加者は必要となります。", + "The consent to be recorded is not required." : "録画されることへの同意は必要ありません。", + "Recording backend configuration is only possible with a High-performance backend." : "録画バックエンドは、高パフォーマンスのバックエンドでのみ可能です。", + "Add a new recording backend server" : "新しいレコーディングバックエンドサーバーを追加する", + "Shared secret" : "共有秘密鍵", + "Recording consent" : "レコーディングの同意", + "SIP configuration saved!" : "SIP 設定を保存しました!", + "SIP configuration is only possible with a High-performance backend." : "SIP構成は、高性能バックエンドでのみ可能です。", + "Enable SIP Dial-out option" : "SIPダイヤル発信オプションを有効にする", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "SIPダイヤル発信機能をサポートするように、シグナリングサーバーを更新する必要があります。", + "Restrict SIP configuration" : "SIP構成を制限する", + "Enable SIP configuration" : "SIP構成を有効にする", + "Only users of the following groups can enable SIP in conversations they moderate" : "次のグループのユーザーのみが、モデレートする会話でSIPを有効にできます", + "Phone number (Country)" : "電話番号 (国番号)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "この情報は招待メールで送信されるだけでなく、サイドバーにすべての参加者に表示されます。", + "High-performance backend URL" : "高性能バックエンドURL", + "High-performance backend settings saved" : "ハイパフォーマンスバックエンドの設定が保存されました", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "高性能バックエンドを使用しない3人以上の参加者との通話では、参加者に接続の問題が発生し、参加デバイスに高負荷がかかる可能性が高いことに注意してください。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "複数の参加者との通話がシームレスに機能するようにするには高性能バックエンドをインストールしてください。", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "複数参加者の通話や会話には高性能バックエンドが必要です。バックエンドがない場合、参加者全員が他の参加者全員に対して一対一で動画データを送信する必要があり、接続問題や参加デバイスの高負荷を引き起こす可能性が非常に高くなります。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Talkを高性能バックエンドで使用する場合は、分散キャッシュをセットアップすることを強くお勧めします。", + "Add High-performance backend server" : "高性能バックエンドを追加", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "サーバーアドレスは無効です", + "STUN settings saved" : "STUN 設定を保存しました", + "STUN servers" : "STUNサーバー", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUNサーバーは、ルーターを介した参加者のパブリックIPアドレスを決定するために使用されます。", + "Add a new STUN server" : "新しいSTUN サーバーを追加", + "{schema} scheme must be used with a domain" : "{schema} スキームはドメインで使用する必要があります", + "{option1} and {option2}" : "{option1} と {option2}", + "{option} only" : "{option} のみ", + "OK: Successful ICE candidates returned by the TURN server" : "成功: TURNサーバからICE候補への返答がありました", + "Error: No working ICE candidates returned by the TURN server" : "エラー: TURNサーバからICE候補への返答がありません", + "Testing whether the TURN server returns ICE candidates" : "TURNサーバーがICE候補を返すかどうかのテスト", + "TURN server schemes" : "TURNサーバースキーム", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURNサーバーシークレット", + "TURN server protocols" : "TURNサーバープロトコル", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURNサーバーは、ファイアウォールの内側で参加者からのトラフィックをプロキシするために使用されます。個々の参加者が他の参加者に接続できない場合は、TURNサーバーが必要になる可能性があります。セットアップ手順については、{linkstart}このドキュメント{linkend}を参照してください。", + "TURN settings saved" : "TURN 設定を保存しました", + "TURN servers" : "TURNサーバー", + "Add a new TURN server" : "新しいTURN サーバーを追加", + "Failed" : "失敗", + "OK" : "OK", + "Checking …" : "チェック中…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗: WebAssemblyが無効になっているか、このブラウザーではサポートされていません。チェックを実施するには、WebAssemblyを有効にするか、サポートしているブラウザーをご利用ください。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗: \".wasm\" と \".tflite\" ファイルは、Webブラウザーにより正しく返却されませんでした。 Talkに関するドキュメントの\"システム要件\"をご確認ください。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" と \".tflite\" ファイルがWebブラウザーにより正しく返却されました。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP と Apache の設定に互換性がないようです。PHP は MPM_PREFORK モジュールでのみ使用可能であり、PHP-FPM は MPM_EVENT モジュールでのみ使用可能であることに注意してください。", + "Web server setup checks" : "Webサーバーセットアップチェック", + "Files required for virtual background can be loaded" : "バーチャル背景に必要なファイルを読み込むことができます", + "Federated user" : "フェデレーションユーザー", + "Assign participants to rooms" : "参加者をルームに割り当てる", + "Configure breakout rooms" : "子会議室の設定", + "Number of breakout rooms" : "子会議室数", + "You can create from 1 to 20 breakout rooms." : "1 から 20 の子会議室を作成することができます。", + "Assignment method" : "割り当て方法", + "Automatically assign participants" : "参加者を自動的に割り当てる", + "Manually assign participants" : "参加者を手動で割り当てる", + "Allow participants to choose" : "参加者に選択することを許可する", + "Create rooms" : "部屋を作成する", + "Confirm" : "承認", + "Create breakout rooms" : "子会議室を作成する", + "Reset" : "リセット", + "Delete breakout rooms" : "子会議室を削除する", + "Room {roomNumber}" : "ルーム {roomNumber}", + "Current breakout rooms and settings will be lost" : "現在の子会議室と設定は失われます", + "Cancel" : "キャンセル", + "Unassigned participants" : "参加者未割り当て", + "Back" : "戻る", + "Assign" : "割り当てる", + "Add participant \"{user}\"" : "参加者 \"{user}\" を追加", + "Now" : "現在", + "Meeting created" : "会議を作成しました", + "Upcoming meetings" : "今後の会議", + "Loading …" : "読み込み中…", + "No upcoming meetings" : "今後の会議はありません", + "Schedule a meeting" : "会議を予約する", + "Meeting title" : "会議名", + "From" : "差出人", + "To" : "宛先", + "Calendar" : "カレンダー", + "Attendees" : "参加者", + "No other participants to send invitations to." : "他に招待状を送信できる参加者はいません。", + "Save" : "保存", + "Search participants" : "参加者を探す", + "No results" : "該当なし", + "Done" : "完了", + "Raise hand" : "挙手 (r)", + "Raise hand (R)" : "挙手 (R)", + "Lower hand" : "手を下げる (r)", + "Lower hand (R)" : "手を下げる (R)", + "Exit full screen (F)" : "全画面終了 (F)", + "Full screen (F)" : "全画面 (F)", + "Speaker view" : "スピーカービュー", + "Grid view" : "グリッド表示", + "This conversation is read-only" : "この会話は読み取り専用です", + "Reload" : "再読み込み", + "{nickName} raised their hand." : "{nickName} が挙手しました", + "A participant raised their hand." : "参加者が挙手しました", + "Collapse stripe" : "スレッドを折りたたむ", + "Expand stripe" : "スレッドを展開する", + "Previous page of videos" : "動画の前ページ", + "Next page of videos" : "動画の次ページ", + "Connecting …" : "接続中 …", + "Calling …" : "接続中...", + "Waiting for {user} to join the call" : "{user} が通話に参加するのを待っています", + "Waiting for others to join the call …" : "参加を待っています …", + "You can invite others in the participant tab of the sidebar" : "サイドバーの参加者タブで他のユーザーを招待できます", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "サイドバーの参加者タブかこのリンクを共有して他のユーザーを招待できます。", + "Share this link to invite others!" : "このリンクを共有して他の人を招待します。", + "Copy link" : "リンクをコピー", + "You are not allowed to enable audio" : "音声を有効にできません", + "No audio. Click to select device" : "音声がありません。デバイスを選択するにはクリックしてください。", + "Mute audio" : "音声なし", + "Mute audio (M)" : "音声ミュート (m)", + "Unmute audio" : "ミュート解除", + "Unmute audio (M)" : "音声ミュート解除 (m)", + "None" : "なし", + "Check devices" : "デバイスを確認", + "Access to camera was denied" : "カメラへのアクセスが拒否されました", + "Error while accessing camera: It is likely in use by another program" : "カメラへのアクセス時にエラー: その他のアプリケーションが利用中の可能性があります", + "Error while accessing camera" : "カメラにアクセス時にエラーが発生", + "You have been muted by a moderator" : "あなたはモデレーターによってミュートされています", + "You are not allowed to enable video" : "ビデオを有効にできません", + "No video. Click to select device" : "映像がありません。デバイスを選択するにはクリックしてください。", + "Disable video" : "映像なし", + "Disable video (V)" : "ビデオなし(V)", + "Enable video" : "動画を有効にする", + "Enable video (V)" : "ビデオあり(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にする - 初めてビデオを有効にする場合、接続が一時的に中断されます", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にする (V) - ビデオを最初に有効にすると、接続が一時的に中断されます。", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にします。初回ビデオを有効時、接続が一時的に中断されます。", + "Show presenter" : "プレゼンターを表示する", + "You" : "あなた", + "Mute" : "ミュート", + "Muted" : "ミュート", + "Show screen" : "画面を表示", + "Stop following" : "フォローの停止", + "Connection could not be established …" : "接続を確立できませんでした...", + "Connection was lost and could not be re-established …" : "接続が失われ、接続を再確立できませんでした...", + "Connection could not be established. Trying again …" : "接続が確立できませんでした。再試行しています...", + "Connection lost. Trying to reconnect …" : "接続が失われました。再接続しています...", + "Connection problems …" : "接続で問題が発生しました...", + "Collapse" : "折りたたむ", + "Expand" : "展開", + "You need to be logged in to upload files" : "ファイルをアップロードするにはログインが必要です", + "Drop your files to upload" : "アップロードするファイルをドロップしてください", + "Conversation messages" : "会話メッセージ", + "Scroll to bottom" : "下にスクロール", + "Post message" : "メッセージを送信", + "Federated conversation" : "フェデレート会話", + "Public conversation" : "公開会話", + "Favorite" : "お気に入り", + "Banned users" : "禁止されたユーザー", + "Date:" : "日時:", + "Note:" : "注意:", + "Hide details" : "詳細を隠す", + "Show details" : "詳細を見る", + "Error while updating conversation name" : "会話名の変更中にエラーが発生しました", + "Error while updating conversation description" : "会話の詳細の更新中にエラーが発生しました", + "Enter a name for this conversation" : "この会話名を設定してください。", + "Edit conversation name" : "会話名を変更", + "Edit conversation description" : "会話の詳細を編集する", + "Enter a description for this conversation" : "この会話の説明を入力", + "Picture" : "写真", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "この会話では以下のボットを有効にすることができます。このサーバーにさらにボットをインストールするには、管理者にお問い合わせください。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "このサーバーにはボットがインストールされていません。このサーバーにボットをインストールするには、管理者にお問い合わせください。", + "Disable" : "無効", + "Enable" : "有効にする", + "Breakout rooms" : "ブレークアウト・ルーム(子会議室)", + "Manage breakout rooms" : "子会議室を管理する", + "Set up breakout rooms for this conversation" : "この会話の子会議室を設定する", + "Please select a valid PNG or JPG file" : "PNG もしくは、JPGファイルを選択してください", + "Choose your conversation picture" : "あなたの会話画像を選択する", + "Choose" : "選択", + "Error setting conversation picture" : "会話画像設定エラー", + "Could not set the conversation picture: {error}" : "会話画像を設定できませんでした: {error}", + "Error cropping conversation picture" : "会話画像の切り抜きエラー", + "Error removing conversation picture" : "会話画像の削除エラー", + "Set emoji as conversation picture" : "絵文字を会話画像に設定する", + "Set background color for conversation picture" : "会話画像の背景色を設定する", + "Upload conversation picture" : "会話画像をアップロードする", + "Choose conversation picture from files" : "このチャットの画像をファイルから選択", + "Remove conversation picture" : "このチャットの画像を削除", + "The file must be a PNG or JPG" : "ファイルは PNG または JPG でなければなりません", + "Set picture" : "画像を設定", + "Default permissions modified for {conversationName}" : "{conversationName} の初期設定の権限は変更されています", + "Could not modify default permissions for {conversationName}" : "{conversationName}のデフォルト権限を変更できません", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "この会話での初期設定のパーミッションを編集できます。これらの設定はモデレーターには影響しません。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "このセクションでパーミッションが変更されるたびに、以前に個々の参加者に割り当てられたカスタムパーミッションは失われます。", + "All permissions" : "すべての権限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "参加者は、通話の開始、参加、音声とビデオの有効、画面共有の権限を持っています。", + "Restricted" : "制限付き", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "参加者は、通話の参加は可能ですが、音声、ビデオ、画面共有は、モデレーターが個別に権限を付与するまで無効になっています。", + "Advanced permissions" : "詳細な権限", + "Edit permissions" : "権限を編集", + "Conversation settings" : "会話設定", + "Basic Info" : "基本情報", + "Personal" : "個人", + "Moderation" : "モデレーション", + "Setup overview" : "セットアップの概要", + "Live transcription" : "音声の文字起こし", + "Breakout Rooms" : "ブレークアウト・ルーム(子会議室)", + "Matterbridge" : "Matterbridge", + "Bots" : "ボット", + "Danger zone" : "危険区域", + "Archive conversation" : "会話をアーカイブ", + "You can archive this conversation instead." : "代わりにこの会話をアーカイブすることもできます。", + "Leave conversation" : "会話を離れる", + "You need to promote a new moderator before you can leave the conversation" : "会話から離れる前に、新しいモデレーターを昇格させる必要があります", + "Delete conversation" : "会話を削除", + "Do you really want to delete \"{displayName}\"?" : "本当に「{displayName}」を削除しますか?", + "Error while deleting conversation" : "会話の削除中にエラーが発生しました", + "Delete all chat messages" : "チャットメッセージをすべて削除", + "Do you really want to delete all messages in \"{displayName}\"?" : "\"{displayName}\" のすべてのメッセージを削除しても本当によろしいですか?", + "Error while clearing chat history" : "チャット履歴のクリア中にエラーが発生しました", + "Be careful, these actions cannot be undone." : "これらのアクションは元に戻せないので注意してください。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "会話から退出したら、クローズな会話に再び参加するには、招待が必要です。オープンな会話はいつでも再参加できます。", + "Permanently delete this conversation." : "この会話を完全に削除する", + "Delete chat messages" : "メッセージを削除する", + "Permanently delete all the messages in this conversation." : "この会話のすべてのメッセージを完全に削除する", + "_%n hour_::_%n hours_" : ["%n時間"], + "_%n day_::_%n days_" : ["%n日"], + "_%n week_::_%n weeks_" : ["%n週間"], + "Custom expiration time" : "カスタム有効期限", + "Message expiration disabled" : "メッセージの有効期限は無効", + "Message expiration set: {duration}" : "メッセージの有効期限を設定します: {duration}", + "Error when trying to set message expiration" : "メッセージの有効期限を設定しようとした際のエラー", + "Message expiration" : "メッセージの有効期限", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "チャットメッセージは、一定時間経過後に期限切れにすることができます。注意: チャットで共有されたファイルは、ファイル所有者は削除されませんが、会話では共有されなくなります。", + "Set message expiration" : "メッセージの有効期限を設定する", + "Current message expiration" : "現在のメッセージの有効期限", + "Password copied to clipboard" : "パスワードをクリップボードにコピーしました", + "Password could not be copied" : "パスワードをコピーできませんでした", + "Guest access" : "ゲスト参加", + "Allow guests to join this conversation via link" : "リンク経由でのこの会話へのゲスト参加を許可", + "Password protection" : "パスワード保護", + "Set a password" : "パスワードを設定", + "Change password" : "パスワードを変更", + "Enter new password" : "新しいパスワードを入力", + "Save password" : "パスードを保存", + "Copy password" : "パスワードをコピー", + "Guests are allowed to join this conversation via link" : "ゲストはリンクを介してこの会話に参加することが許可されています", + "Guests are not allowed to join this conversation" : "ゲストはこの会話に参加することは許可されていません", + "Resend invitations" : "招待を再送", + "This conversation is open to both registered users and users created with the Guests app" : "この会話は、登録ユーザーとGuestsアプリで作成されたユーザーの両方に開かれています", + "This conversation is open to registered users" : "この会話は登録ユーザーに開かれています", + "This conversation is limited to the current participants" : "この会話は現在の参加者に制限されています", + "You opened the conversation to both registered users and users created with the Guests app" : "登録ユーザーとGuestsアプリで作成したユーザーの両方に会話を公開しました", + "Error occurred when opening or limiting the conversation" : "会話を開いたり制限したりするときにエラーが発生しました", + "Open conversation to registered users, showing it in search results" : "登録ユーザーに会話を公開、検索結果に表示します", + "Also open to users created with the Guests app" : "ゲストアプリで作成されたユーザーも開くことができます", + "Open conversation" : "オープンな会話", + "Set language spoken in calls" : "通話時の言語を設定する", + "Languages could not be loaded" : "言語を読み込めませんでした", + "Loading languages …" : "言語を読み込んでいます ...", + "Invalid language" : "無効な言語", + "Default language (English)" : "デフォルト言語(英語)", + "Live transcription language set: {languageName}" : "ライブトランスクリプション言語セット:{languageName}", + "Start time: {date}" : "開始時刻: {date}", + "Start time has been updated" : "開始時間が更新されました", + "Error occurred while updating start time" : "開始時刻の更新中にエラーが発生しました", + "Enabling the lobby will remove non-moderators from the ongoing call." : "ロビーを有効にすると、進行中の通話から非モデレーターが削除されます。", + "Enable lobby, restricting the conversation to moderators" : "ロビーを有効にし、会話をモデレーターに制限します", + "Meeting start time" : "会議の開始時間", + "Start time (optional)" : "開始時間(オプション)", + "Import email participants" : "メール参加者をインポート", + "You can import a list of email participants from a CSV file." : "CSVファイルで参加者のメールアドレスリストをインポートできます。", + "Poll drafts" : "アンケートの草稿", + "Browse poll drafts" : "アンケート草稿を閲覧", + "Error occurred when locking the conversation" : "会話のロック中にエラーが発生しました", + "Error occurred when unlocking the conversation" : "会話のロックを解除するときにエラーが発生しました", + "Lock conversation" : "会話をロック", + "This will also terminate the ongoing call." : "これにより、進行中の通話も終了します。", + "Lock the conversation to prevent anyone to post messages or start calls" : "会話をロックして、誰かがメッセージを投稿したり通話を開始したりできないようにします。", + "Edit" : "編集", + "More information" : "詳細情報", + "Delete" : "削除", + "Add new bridged channel to current conversation" : "現在の会話に新しいブリッジチャネルを追加する", + "unknown state" : "状態が不明", + "running" : "実行中", + "not running, check Matterbridge log" : "未稼働です。Matterbridgeログを確認してください", + "not running" : "未稼働", + "Bridge saved" : "ブリッジが保存されました", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridgeを使用すると、さまざまなインスタントメッセージングシステムからチャネルを橋渡しできます。", + "More info on Matterbridge" : "Matterbridgeの詳細", + "Messaging systems" : "メッセージングシステム", + "Enable bridge" : "ブリッジを有効にする", + "Show Matterbridge log" : "Matterbridgeログを表示する", + "Log content" : "ログ情報", + "Only moderators are allowed to mention @all" : "@allにメンションできるのはモデレーターのみです", + "All participants are allowed to mention @all" : "すべての参加者が@allにメンションできます。", + "Participants are now allowed to mention @all." : "参加者は@allにメンションできるようになりました。", + "Mentioning @all has been limited to moderators." : "@allのメンションはモデレーターのみに限定されています。", + "Allow participants to mention @all" : "参加者が@allにメンションできるようにします", + "Mention permissions" : "メンション権限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "この会話で呼び出し時に通知する", + "Important conversation" : "重要な会議", + "Sensitive conversation" : "プライベートな会話", + "Message preview will be disabled in conversation list and notifications" : "会話リストと通知ではメッセージのプレビューが無効になります", + "Recording consent is required for calls in this conversation" : "レコーディングの同意は、この会話で必要です", + "Recording consent is not required for calls in this conversation" : "レコーディングの同意は、この会話で必要ではありません", + "Recording consent requirement was updated" : "レコーディングの同意要件は更新されました", + "Error occurred while updating recording consent" : "レコーディングの同意を更新する際にエラーが発生しました", + "Recording Consent" : "レコーディングの同意", + "Recording consent cannot be changed once a call or breakout session has started." : "レコーディングの同意は、通話またはブレイクアウトセッションが開始した後に変更することはできません。", + "Require recording consent before joining call in this conversation" : "この会話に参加する前に、レコーディングの同意が必要です。", + "Recording consent is required for all calls" : "全ての通話にはレコーディングの同意が必要です", + "SIP dial-in is now possible without PIN requirement" : "SIPダイアルインが、PINコードなしで可能となります", + "SIP dial-in is now enabled" : "SIPダイヤルインが有効になりました", + "SIP dial-in is now disabled" : "SIPダイヤルインが無効になりました", + "Error occurred when enabling SIP dial-in" : "SIPダイヤルインを有効にするときにエラーが発生しました", + "Error occurred when disabling SIP dial-in" : "SIPダイヤルインを無効にするときにエラーが発生しました", + "Phone and SIP dial-in" : "電話とSIP 着信", + "Enable phone and SIP dial-in" : "電話とSIP 着信を有効にする", + "Allow to dial-in without a PIN" : "PINコードなしでダイヤルインを許可する", + "Ongoing" : "進行中", + "View attachment" : "添付ファイルを見る", + "Join" : "参加", + "View conversation" : "会話を表示", + "View event on Calendar" : "カレンダーでイベントを表示", + "Error while creating the conversation" : "会話の作成中にエラーが発生しました", + "Hello, {displayName}" : "こんにちは、{displayName} さん", + "Start meeting now" : "今すぐ会議を始める", + "Give your meeting a title" : "会議にタイトルをつける", + "Create and copy link" : "リンクを作成してコピー", + "Create a new conversation" : "新しい会話を作成する", + "Join open conversations" : "オープンな会話に参加する", + "Call a phone number" : "電話番号にかける", + "Scroll backward" : "後方にスクロール", + "Scroll forward" : "前方にスクロール", + "Schedule meetings" : "会議を予約", + "You don't have any upcoming meetings" : "今後の会議はありません", + "Open calendar" : "カレンダーを開く", + "Unread mentions" : "未読の返信", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "あなたがメンションされたメッセージはここに表示されます。@に続けて相手の名前を入力すると、メンションできます。", + "Upcoming reminders" : "今後のリマインダー", + "Message reminders" : "メッセージのリマインダー", + "Set a reminder on a message to be notified" : "チャットメッセージにリマインダーを設定すると後で再度通知されるようにできるようになりました", + "Start a group conversation" : "グループ会話を始める", + "Create conversation" : "会話を作成", + "Enter your name" : "あなたの名前を入力", + "Submit name and join" : "名前を送信して参加する", + "Do you already have an account?" : "すでにアカウントをお持ちですか?", + "Log in" : "ログイン", + "Uploaded file is verified" : "アップロードされたファイルは検証済みです", + "An error occurred while calling a phone number" : "電話番号への発信中にエラーが発生しました", + "Phone number could not be called: {error}" : "電話番号に発信できませんでした: {error}", + "Phone number could not be called" : "電話番号に発信できませんでした", + "Search participants or phone numbers" : "参加者または電話番号の検索", + "Creating the conversation …" : "会話を作成しています...", + "Mark as read" : "既読にする", + "Mark as unread" : "未読にする", + "Remove from favorites" : "お気に入りから削除", + "Add to favorites" : "お気に入りに追加", + "Ignore \"Do not disturb\"" : "「邪魔しないでください」を無視する", + "You need to promote a new moderator before you can leave the conversation." : "会話を終了する前に、新しいモデレータを昇格する必要があります。", + "Conversation actions" : "会話アクション", + "Notify about calls" : "着信について通知", + "Hide message text" : "メッセージテキストを非表示", + "Pending invitations" : "保留中の招待", + "From {user} at {remoteServer}" : "{remoteServer} からの {user} ", + "Decline invitation" : "招待を拒否", + "Accept invitation" : "招待を承諾", + "No pending invitations" : "保留中の招待はありません", + "Home" : "ホーム", + "Unread" : "未読", + "Alphabetically" : "アルファベット順", + "No matches found" : "一致するものが見つかりません。", + "No conversations found" : "会話が見つかりません", + "You have no unread mentions." : "未読のメンションはありません。", + "You have no unread messages." : "未読のメッセージはありません。", + "An error occurred while performing the search" : "検索中にエラーが発生しました", + "Conversation list" : "会話リスト", + "Unread messages" : "未読のメッセージ", + "Clear filters" : "フィルターをクリア", + "New personal note" : "新しい個人的なメモ", + "Threads" : "スレッド", + "Clear filter" : "フィルターをクリア", + "App settings" : "アプリ設定", + "Users" : "ユーザー", + "Groups" : "グループ", + "Teams" : "チーム", + "Other sources" : "他のソース", + "Open conversations" : "オープンな会話", + "No search results" : "検索結果なし", + "Users and groups" : "ユーザーとグループ", + "The meeting will start soon" : "会議はまもなく始まります", + "This meeting is scheduled for {startTime}" : "この会議の予定は{startTime}です", + "You are currently waiting in the lobby" : "現在ロビーで待機中", + "Select microphone" : "マイクを選択", + "No microphone available" : "利用可能なマイクがありません", + "Select speaker" : "発言者を指定", + "No speaker available" : "指定できる発言者がいません", + "Select camera" : "カメラを選択", + "No camera available" : "利用可能なカメラがありません", + "Select a device" : "デバイスを選択する", + "Test speakers" : "発言者をテスト", + "Test" : "テスト", + "Devices" : "端末", + "Backgrounds" : "背景", + "No audio" : "音声なし", + "No camera" : "カメラがありません", + "Display video as you will see it (mirrored)" : "鏡像表示でプレビューを表示", + "Calls are not supported in your browser" : "お使いのブラウザーは通話に対応していません", + "Access to microphone is only possible with HTTPS" : "マイクへのアクセスはHTTPSでのみ可能です", + "Access to microphone was denied" : "マイクへのアクセスが拒否されました", + "Error while accessing microphone" : "マイクへのアクセス中にエラーが発生しました", + "Access to camera is only possible with HTTPS" : "カメラへのアクセスはHTTPSでのみ可能です", + "The call is being recorded." : "通話は録音されています。", + "The call might be recorded." : "通話は録音されるかもしれません。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "レコーディングには、あなたの声、カメラからのビデオ、および画面共有が含まれる場合があります。通話に参加する前に、あなたの同意が必要です。", + "Give consent to the recording of this call" : "この通話のレコーディングに同意してください", + "Start recording immediately with the call" : "通話と同時にレコーディングを開始する", + "Apply settings" : "設定を適用する", + "Select virtual office background" : "仮想オフィスの背景を選択", + "Select virtual home background" : "仮想ホームの背景を選択", + "Select virtual abstract background" : "仮想抽象背景を選択", + "Select virtual beach background" : "仮想ビーチの背景を選択", + "Select virtual park background" : "仮想公園の背景を選択", + "Select virtual theater background" : "仮想シアターの背景を選択", + "Select virtual library background" : "仮想図書館の背景を選択", + "Select virtual space station background" : "仮想宇宙ステーションの背景を選択", + "Error while uploading the file" : "ファイルのアップロード中にエラーが発生しました", + "Invalid path selected" : "無効なパスが選択されました", + "Select virtual background from file {fileName}" : "ファイル {fileName} から仮想背景を選択します", + "Blur" : "ぼかし", + "Upload" : "アップロード", + "Files" : "ファイル", + "(editing)" : "(編集)", + "(edited)" : "(編集済み)", + "The message has expired or has been deleted" : "メッセージの有効期限が切れたか、削除されました", + "Cancel quote" : "引用のキャンセル", + "24 hours" : "24時間", + "7 days" : "7日", + "Clear reminder – {timeLocale}" : "リマインダーを消去 – {timeLocale}", + "Edited by {actor}" : "編集者:{actor}", + "Message text copied to clipboard" : "メッセージテキストがクリップボードにコピーされました", + "Message text could not be copied" : "メッセージテキストはコピーできませんでした", + "Message forwarded to \"Note to self\"" : "メッセージが「自分のメモ」に転送されました", + "Error while forwarding message to \"Note to self\"" : "「自分のメモ」へメッセージ転送中にエラー", + "A reminder was successfully removed" : "リマインダーの削除に成功しました", + "Error occurred when removing a reminder" : "リマインダー削除時にエラーが発生しました", + "A reminder was successfully set at {datetime}" : "リマインダーは {datetime} に正常に設定されました", + "Error occurred when creating a reminder" : "リマインダー作成時にエラーが発生しました", + "Add a reaction to this message" : "このメッセージにリアクションを追加", + "Reply" : "返信", + "More actions" : "その他のアクション", + "Set reminder" : "リマインダーを設定", + "Reply privately" : "個人的に返信する", + "Edit message" : "メッセージを編集", + "Copy message" : "メッセージをコピー", + "Copy message link" : "メッセージリンクのコピー", + "Go to file" : "ファイルへ移動", + "Download file" : "ファイルをダウンロード", + "Forward message" : "メッセージを転送する", + "Translate" : "翻訳", + "Set custom reminder" : "カスタムリマインダーを設定する", + "Close reactions menu" : "リアクションメニューを閉じる", + "React with {emoji}" : "{emoji} で反応する", + "React with another emoji" : "他の絵文字で反応する", + "Choose a conversation to forward the selected message." : "会話を選択して、選択したメッセージを転送します。", + "Error while forwarding message" : "メッセージの転送中にエラーが発生しました", + "The message has been forwarded to {selectedConversationName}" : "メッセージは{selectedConversationName}に転送されました", + "Dismiss" : "閉じる", + "Go to conversation" : "会話へ行く", + "Detect language" : "言語を検出する", + "The message could not be translated" : "メッセージは翻訳できませんでした", + "Translation copied to clipboard" : "翻訳をクリップボードにコピーしました", + "Translation could not be copied" : "翻訳をコピーできませんでした", + "Translate message" : "メッセージの翻訳", + "Source language to translate from" : "翻訳元の言語", + "Translate from" : "翻訳元の言語", + "Target language to translate into" : "翻訳先の言語", + "Translate to" : "翻訳先", + "Translating" : "翻訳する", + "Copy translated text" : "翻訳されたテキストをコピー", + "Send now" : "今すぐ送信", + "Message read by everyone who shares their reading status" : "メッセージが読み込み状況を共有するすべてのメンバーに見られました", + "Message sent" : "メッセージ送信済み", + "Deleting message" : "メッセージを削除しています", + "Message deleted successfully" : "メッセージが正常に削除されました", + "Message could not be deleted because it is too old" : "メッセージが古すぎるため削除できませんでした", + "Only normal chat messages can be deleted" : "通常のチャットメッセージのみを削除できます", + "An error occurred while deleting the message" : "メッセージの削除中にエラーが発生しました", + "Your browser does not support playing audio files" : "このブラウザーはオーディオファイルの再生をサポートしていません。", + "Contact" : "連絡先", + "{stack} in {board}" : "{board} 内の {stack}", + "Deck Card" : "Deckカード", + "Remove {fileName}" : "{fileName} を削除", + "Open this location in OpenStreetMap" : "オープンストリートマップでこの場所を表示", + "_%n reply_::_%n replies_" : ["%n件の返信"], + "Sending message" : "メッセージ送信中", + "Failed to send the message. Click to try again" : "メッセージの送信に失敗しました。クリックして再試行してください", + "Not enough free space to upload file" : "ファイルをアップロードするのに十分な空き容量がありません", + "You cannot send messages to this conversation at the moment" : "現在、この会話にメッセージを送信することはできません", + "_%n vote_::_%n votes_" : ["%n投票数"], + "Open poll" : "公開投票", + "See results" : "結果を見る", + "Reactions" : "リアクション", + "No permission to post reactions in this conversation" : "この会話にリアクションを投稿する権限がありません", + "Show all reactions" : "全てのリアクションを表示", + "Add more reactions" : "その他のリアクションを追加", + "Show or collapse system messages" : "システムメッセージを表示または折りたたむ", + "No messages" : "メッセージはありません", + "All messages have expired or have been deleted." : "全てのメッセージは期限切れまたは削除されました。", + "Unpin" : "ピンの解除", + "Cancel search" : "検索をキャンセルする", + "Add a phone number" : "電話番号を追加する", + "All set, the conversation \"{conversationName}\" was created." : "全ての設定が完了し、会話 \"{conversationName}\" が作成されました。", + "Create a new group conversation" : "新規グループ会話の作成", + "Add participants" : "参加者を追加", + "Conversation visibility" : "会話の可視性", + "Allow guests to join via link" : "リンク経由でのゲスト参加を許可", + "Enter password" : "パスワードを入力してください", + "This conversation has been locked" : "会話はロックされています", + "No permission to post messages in this conversation" : "この会話にメッセージを投稿する権限がありません", + "Joining conversation …" : "会話に参加中…", + "Create a thread silently" : "非通知でスレッドを作成する", + "Create a thread" : "スレッドを作成する", + "Send message" : "メッセージを送信", + "Send without notification" : "通知なしで送信", + "The message could not be edited" : "メッセージを編集できませんでした", + "File to share" : "共有するファイル", + "Add emoji" : "絵文字を追加する", + "Adding a mention will only notify users who did not read the message." : "メンションを追加すると、メッセージを読んでいないユーザーにのみ通知されます。", + "Send later" : "後で送信する", + "Cancel editing" : "編集をキャンセル", + "{user} is out of office and might not respond." : "{user} は外出中で応答しない可能性があります。", + "Share from {nextcloud}" : "{nextcloud} から共有する", + "Share from Files" : "ファイルから共有", + "Share files to the conversation" : "会話でファイルを共有する", + "Upload from device" : "デバイスからアップロード", + "Create new poll" : "投票を作成", + "Smart picker" : "スマートピッカー", + "Record voice message" : "ボイスメッセージを録音", + "End recording and send" : "録音を終了して送信する", + "Dismiss recording" : "録音をキャンセルする", + "Access to the microphone was denied" : "マイクへのアクセスが拒否されました", + "Microphone either not available or disabled in settings" : "マイクが使えないか、設定で無効になっています。", + "Error while recording audio" : "音声録音中にエラーが発生しました", + "New file" : "新しいファイル", + "Blank" : "ブランク", + "Error while creating file" : "ファイルの作成中にエラーが発生しました", + "Create and share a new file" : "新しいファイルを作成し共有する", + "Name of the new file" : "新しいファイルの名前", + "Create file" : "ファイルを作成する", + "Someone is typing …" : "誰かが入力中です...", + "{user1} is typing …" : "{user1} は入力中です...", + "{user1} and {user2} are typing …" : "{user1} と {user2} が入力中です...", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2}、{user3} が入力中です...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} と他の %n 人が入力中です..."], + "Add more files" : "さらにファイルを追加する", + "Send" : "送信", + "In this conversation {user} can:" : "この会話において、 {user} さんは次のことが可能です:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} の参加者のデフォルト権限を編集", + "Start a call" : "通話を開始", + "Skip the lobby" : "ロビーをスキップ", + "Can post messages and reactions" : "メッセージとリアクションの投稿を許可", + "Enable the microphone" : "マイクを有効にする", + "Enable the camera" : "カメラを有効にする", + "Share the screen" : "画面共有", + "Update permissions" : "利用権限を更新", + "Updating permissions" : "権限を更新中", + "Create poll" : "投票を作成", + "Question" : "質問", + "Ask a question" : "質問する", + "Answers" : "回答", + "Answer {option}" : "回答 {option}", + "Delete poll option" : "投票の選択肢を削除", + "Add answer" : "回答を追加", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "複数の答え", + "You voted for this option" : "あなたはこの選択肢に投票しました", + "End poll" : "投票終了", + "Change your vote" : "投票内容を変更する", + "Results" : "結果", + "Voted participants" : "投票した参加者", + "Send a message to \"{roomName}\"" : "\"{roomName}\" にメッセージを送る", + "Hide list of participants" : "参加者のリストを非表示にする", + "Show list of participants" : "参加者のリストを表示", + "Assistance requested in {roomName}" : "{roomName} で援助を要請", + "The message was sent to \"{roomName}\"" : "メッセージは \"{roomName}\" に送信されました", + "Dismiss request for assistance" : "援助要請を却下する", + "Send message to room" : "部屋にメッセージを送信", + "Back to main room" : "メインルームに戻る", + "Back to your room" : "自分の部屋に戻る", + "Message all rooms" : "全てのルームにメッセージ", + "Start session" : "セッションを開始する", + "Start a call before you start a breakout room session" : "子会議室のセッションを始める前に通話を開始してください", + "Stop session" : "セッションを停止する", + "The message was sent to all breakout rooms" : "メッセージは全ての子会議室に送信されました", + "Send a message to all breakout rooms" : "全ての子会議室にメッセージを送る", + "Breakout rooms are not started" : "子会議室が開始されていません", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "高性能バックエンドを使用しない通話では、接続の問題が発生し、デバイスに高負荷がかかる可能性があります。{linkstart}詳細{linkend}", + "Disable lobby" : "ロビーを無効にする", + "Settings for participant \"{user}\"" : "参加者\"{user}\"の設定", + "Participant \"{user}\"" : "参加者 \"{user}\"", + "moderator" : "モデレータ", + "bot" : "ボット", + "guest" : "ゲスト", + "Ringing …" : "鳴っています...", + "Call rejected" : "通話拒否", + "{time} talking …" : "{time} 話しています…", + "{time} talking time" : "{time} 通話時間", + "Raised their hand" : "手を上げる", + "Joined with video" : "ビデオで参加", + "Joined via phone" : "電話で参加", + "Joined with audio" : "オーディオで参加", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "テキストの長さは {maxLength} 文字以下である必要があります。現在のテキストの長さは {charactersCount} 文字です。", + "Remove group and members" : "メンバーとグループを削除", + "Remove team and members" : "チーム・グループとメンバーを削除", + "Remove participant" : "参加者を削除", + "Notification was sent to {displayName}" : "{displayName} さんに通知が送信されました", + "Could not send notification to {displayName}" : "{displayName} さんに通知を送信できませんでした", + "Permissions granted to {displayName}" : "{displayName}に権限が付与されました", + "Could not modify permissions for {displayName}" : "{displayName}の権限を変更できませんでした", + "Permissions removed for {displayName}" : "{displayName}の権限が削除されました", + "Permissions set to default for {displayName}" : "{displayName} さんにデフォルト権限が設定されました", + "Phone number could not be hung up" : "電話が切れませんでした", + "Phone number could not be put on hold" : "電話を保留にできませんでした", + "Phone number could not be muted" : "電話をミュートできませんでした", + "Phone number could not be unmuted" : "電話をミュート解除できませんでした", + "DTMF message could not be sent" : "DTMFメッセージを送信できませんでした", + "Phone number copied to clipboard" : "電話番号がクリップボードにコピーされた", + "Phone number could not be copied" : "電話番号はコピーできませんでした", + "in the lobby" : "ロビーで", + "Dial out phone" : "電話をかける", + "Hang up phone" : "電話を切る", + "Move back to lobby" : "ロビーに戻る", + "Move to conversation" : "会話へ移動する", + "Dial-in PIN" : "ダイヤルインPIN", + "Demote from moderator" : "モデレータから降格", + "Promote to moderator" : "モデレータに昇格", + "Resend invitation" : "招待状を再送する", + "Send call notification" : "通話通知を送信", + "Dial out phone number" : "電話番号をかける", + "Resume call for phone number" : "電話番号にかけ直す", + "Put phone number on hold" : "電話番号を保留にする", + "Unmute phone number" : "電話番号のミュートを解除する", + "Mute phone number" : "電話番号のミュート", + "Copy phone number" : "電話番号をコピーする", + "Reset custom permissions" : "カスタム権限をリセット", + "Grant all permissions" : "すべての権限を付与", + "Remove all permissions" : "すべての権限を削除", + "Remove" : "削除", + "Permissions modified for {displayName}" : "{displayName}の権限が変更されました", + "Add users or groups" : "ユーザーまたはグループの追加", + "Add users" : "ユーザーを追加", + "Add groups" : "グループを追加", + "Add other sources" : "他のソースを追加", + "Add emails" : "メールを追加", + "Integrations" : "インテグレーション", + "Add federated users" : "フェデレーションユーザーを追加", + "Searching …" : "検索しています…", + "Search for more users" : "さらにユーザーを探す", + "Search or add participants" : "参加者を検索して追加する", + "Invitation was sent to {actorId}" : "招待が {actorId} に送信されました", + "An error occurred while adding the participants" : "参加者の追加中にエラーが発生しました", + "Participants" : "参加者", + "Participants ({count})" : "参加者 ({count})", + "Open chat" : "チャットを始める", + "You have new unread messages in the chat." : "チャットに未読のメッセージがあります", + "You have been mentioned in the chat." : "チャットであなたについてのメッセージがありました。", + "Chat" : "チャット", + "Details" : "詳細", + "Shared items" : "共有済みアイテム", + "No results found" : "結果が見つかりません", + "Load more results" : "結果をさらに読み込む", + "Projects" : "プロジェクト", + "No shared items" : "共有アイテムがありません", + "Thread notifications" : "スレッド通知", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "会話へのリンク", + "No open conversations found" : "公開している会話は見つかりませんでした", + "Either there are no open conversations or you joined all of them." : "開いている会話が存在しないか、あなたはすべてに参加しています。", + "Check spelling or use complete words." : "スペルをチェックするか、完全な単語を使用してください。", + "Search conversations or users" : "会話やユーザーを検索", + "Select conversation" : "会話を選択", + "Number length is not valid" : "番号の長さが無効", + "Region code is not valid" : "有効な地域コードではありません", + "Number length is too short" : "番号の長さが短すぎます", + "Number length is too long" : "番号の長さが長すぎます", + "Number is not valid" : "番号は有効なものではありません", + "Phone numbers" : "電話番号", + "Display name: {name}" : "表示名: {name}", + "Edit display name" : "表示名の編集", + "Save name" : "名前を保存", + "Error while saving sounds setting" : "サウンド設定を保存するときにエラー", + "Compact conversations list" : "会話リストをシンプルに表示", + "Play sounds when participants join or leave a call" : "参加者が通話に参加したとき、または通話を離れたときにサウンドを再生する", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "現在、メーカーによる技術的制限によりiPhoneおよびiPadではご利用いただけません。", + "Notification settings" : "通知設定", + "Sounds for chat and call notifications" : "チャットや着信時の通知", + "Default language" : "デフォルトの言語", + "Select location for attachments" : "添付ファイルの場所を選択します", + "Error while setting attachment folder" : "添付ファイル用フォルダー設定中のエラー", + "Error while setting read status privacy" : "読み取りステータスのプライバシー設定中にエラーが発生しました", + "Error while setting typing status privacy" : "タイピングステータスのプライバシー設定中にエラーが発生しました", + "Turn camera and microphone off by default" : "自動的にカメラとマイクをオフにする", + "Blur camera background by default" : "自動的に背景をぼかす", + "Skip device preview before joining a call" : "通話に参加する前のデバイスのプレビューをスキップする", + "Appearance & Sounds" : "外観と通知", + "Privacy" : "プライバシー", + "Send read receipts" : "既読ステータス", + "When off, all read statuses will be hidden" : "この機能をオフにすると、すべての既読ステータスが非表示になります。", + "Share typing status" : "入力状態を共有", + "When off, all typing indicators will be hidden" : "この機能をオフにすると、すべての入力インジケーターが非表示になります。", + "Attachments folder" : "添付ファイルフォルダー", + "Toggle full screen" : "全画面に切り替え", + "Return to Home screen" : "ホーム画面に戻る", + "Search" : "検索", + "Shortcuts while in a chat" : "チャット中のショートカット", + "Focus the chat input" : "チャット入力欄に移行", + "Unfocus the chat input to use shortcuts" : "ショートカットを使用するには、チャット入力欄からカーソルを外す", + "Edit your last message" : "最後のメッセージを編集する", + "Shortcuts while in a call" : "通話中のショートカット", + "Camera on and off" : "カメラのオンとオフ", + "Microphone on and off" : "マイクのオンとオフ", + "Raise or lower hand" : "手を上げるまたは下げる", + "Push to talk or push to mute" : "押して話すか、押してミュート", + "Zoom-in / zoom-out a screen share" : "画面共有のズームイン/ズームアウト", + "Start call silently" : "サイレント通話を開始", + "Start call" : "通話を開始", + "End call" : "通話終了", + "You will be able to join the call only after a moderator starts it." : "あなたは、モデレーターが通話を開始し後に通話参加できるようになります。", + "End call for everyone" : "全員の通話を終了する", + "Starting the recording" : "録画を開始", + "Recording" : "記録中", + "The call has been running for one hour." : "通話が1 時間経過しました。", + "Cancel recording start" : "録画開始をキャンセル", + "Stop recording" : "録画を停止", + "Send a reaction" : "リアクションを送信", + "React with {reaction}" : "{reaction} で反応する", + "All tasks done!" : "すべてのタスクが完了しました!", + "_%n participant in call_::_%n participants in call_" : ["%n 人が通話に参加"], + "You are not allowed to enable screensharing" : "画面共有を許可されていません", + "No screensharing" : "画面共有不可", + "Screensharing options" : "画面共有オプション", + "Enable screensharing" : "画面共有を有効にする", + "Bad sent video and screen quality." : "送信されている映像と画像の品質がよくありません。", + "Bad sent screen quality." : "送信画面の品質がよくありません。", + "Bad sent video quality." : "送信映像の品質が良くありません。", + "Bad sent audio, video and screen quality." : "送信音声と映像と画面の品質が良くありません。", + "Bad sent audio and screen quality." : "送信音声と画面の品質が良くありません。", + "Bad sent audio and video quality." : "送信音声と映像の品質が良くありません。", + "Bad sent audio quality." : "送信音声の品質が良くありません。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "コンピュータかネットワークの負荷が高いため、他の参加者が画面を見ることができない場合があります。状況を改善するには、画面共有を行っている間、背景ぼかしまたはビデオを無効にしてみてください。", + "Disable background blur" : "背景のぼかしを止める", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "コンピューターかネットワークの負荷が高い為、他の参加者から見えていない可能性があります。改善するためにカメラか画面共有をオフにしてみてください。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "インターネットかコンピューターの負荷が高いため、他の参加者にはこちらの画面は見えていないかもしれません。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "インターネット接続かコンピューターの負荷が高いため、他の参加者にはあなたが見えていないかもしれません。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "コンピューターかネットワークの負荷が高いため、他の参加者が画面を見ることができない場合があります。状況を改善するには、画面共有を行っている間、背景のぼかしまたはビデオを無効にしてみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、画面共有していたら映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、画面共有を停止してみてください。", + "Disable screenshare" : "画面共有を無効", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、背景のぼかしを止めるか、映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "インターネット接続かコンピューターの負荷が高いため、他の参加者にはあなたがどうなっているのか分からないかもしれません。", + "Screen sharing is not supported by your browser." : "お使いのブラウザーは画面共有をサポートしていません。", + "Screen sharing requires the page to be loaded through HTTPS." : "画面共有はHTTPSが必要です。", + "Screensharing requires the page to be loaded through HTTPS." : "画面共有はHTTPSが必要です。", + "An error occurred while starting screensharing." : "画面共有の開始中にエラーが発生しました。", + "Show your screen" : "自分の画面を表示", + "Stop screensharing" : "画面共有を停止", + "Mute others" : "他の人をミュートする", + "Start recording" : "録画を開始", + "Set up breakout rooms" : "子会議室を設定", + "Open Calendar" : "カレンダーを開く", + "Remove participant {name}" : "参加者 {name} を削除する", + "Delete now" : "今すぐ削除", + "Keep" : "保持", + "Open dialpad" : "ダイヤルパッドを開く", + "Select a region" : "地域を選択してください", + "Search …" : "検索…", + "Message without mention" : "話しの無いメッセージ", + "Mention myself" : "自分自身の話し", + "Mention everyone" : "全員にメンション", + "Select a conversation" : "会話を選択", + "Select a mode" : "モードを選択する", + "The conversation does not exist" : "会話が存在しません", + "Join a conversation or start a new one!" : "会話に参加または開始する!", + "Duplicate session" : "セッションの重複", + "Join a conversation or start a new one" : "会話に参加または開始する", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud ユーザー", + "User password" : "ユーザーのパスワード", + "Talk conversation" : "会話", + "Skip TLS verification" : "TLS検証をスキップする", + "Matrix server URL" : "Matrix サーバー URL", + "User" : "ユーザー", + "Matrix channel" : "Matrix チャンネル", + "Mattermost server URL" : "Mattermost サーバーのURL", + "Mattermost user" : "Mattermost ユーザー", + "Team name" : "チーム名", + "Channel name" : "チャンネル名", + "Rocket.Chat server URL" : "Rocket.Chat サーバーURL", + "User name or email address" : "名前またはメールアドレス", + "Rocket.Chat channel" : "Rocket.Chat チャンネル", + "Zulip server URL" : "Zulip サーバーURL", + "Bot user name" : "Botユーザー名", + "Bot API key" : "Bot APIキー", + "Zulip channel" : "Zulip チャンネル", + "API token" : "APIトークン", + "Slack channel" : "Slackチャンネル", + "Server ID or name" : "サーバーIDまたは名前", + "Channel" : "チャンネル", + "Login" : "ログイン", + "Chat ID" : "チャットID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC サーバーURL (e.g. chat.freenode.net:6667)", + "Nickname" : "ニックネーム", + "Connection password" : "接続パスワード", + "IRC channel" : "IRC チャンネル", + "Channel password" : "チャネルパスワード", + "NickServ nickname" : "NickServ ニックネーム", + "NickServ password" : "NickServ パスワード", + "Use TLS" : "TLSを使用する", + "Use SASL" : "SASLを使用する", + "Tenant ID" : "テナントID", + "Client ID" : "クライアントID", + "Team ID" : "チームID", + "Thread ID" : "スレッドID", + "XMPP/Jabber server URL" : "XMPP/Jabber サーバーURL", + "MUC server URL" : "MUC サーバーURL", + "Jabber ID" : "Jabber ID", + "Media" : "メディア", + "Polls" : "投票", + "Deck cards" : "Deckカード", + "Voice messages" : "ボイスメッセージ", + "Locations" : "場所", + "Call recordings" : "通話のレコーディング", + "Audio" : "オーディオ", + "Show all media" : "全てのメディアを表示", + "Show all files" : "すべてのファイルを表示", + "Show all polls" : "すべての投票を表示", + "Show all deck cards" : "全てのDeckカードを表示", + "Show all voice messages" : "全てのボイスメッセージを表示", + "Show all locations" : "全ての位置を表示", + "Show all call recordings" : "すべての通話録音を表示", + "Show all audio" : "全ての音声を表示", + "Show all other" : "そのほか全てを表示", + "Group" : "グループ", + "Team" : "チーム", + "You reconnected to the call" : "通話に再接続しました", + "{actor} reconnected to the call" : "{actor} が通話に再接続しました", + "You added {user0} and {user1}" : "{user0} と {user1} を追加しました", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["あなたは {user0}、{user1}、および %n人の参加者を追加しました"], + "An administrator added you and {user0}" : "管理者があなたと {user0} を追加しました", + "{actor} added you and {user0}" : "{actor} があなたと {user0} を追加しました", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理者があなた、{user0} ともう%n人の参加者を追加しました"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} があなた、{user0}、および%n人の参加者を追加しました"], + "An administrator added {user0} and {user1}" : "管理者が {user0} と {user1} を追加しました", + "{actor} added {user0} and {user1}" : "{actor} は {user0} と {user1} を追加しました", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理者が {user0}、{user1} ともう%n人の参加者を追加しました"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} が {user0}、{user1} および%n人の参加者を追加しました"], + "You and {user0} joined the call" : "あなたと {user0} が通話に参加しました", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["あなた、{user0} と %n 人の参加者が通話に参加しました"], + "{user0} and {user1} joined the call" : "{user0} と {user1} が通話に参加しました", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} と %n 人の参加者が通話に参加しました"], + "You and {user0} left the call" : "あなたと {user0} が通話から退出しました", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["あなた、{user0} と %n 人の参加者が通話から退出しました"], + "{user0} and {user1} left the call" : "{user0} と {user1} が通話から退出しました", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} と %n 人の参加者が通話から退出しました"], + "You promoted {user0} and {user1} to moderators" : "あなたは {user0} と {user1} をモデレーターに昇進させました", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["{user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "An administrator promoted you and {user0} to moderators" : "管理者があなたと {user0} をモデレータに昇格させました", + "{actor} promoted you and {user0} to moderators" : "{actor} があなたと {user0} をモデレーターに昇進させました", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理者があなた、{user0}、および%n人の参加者をモデレーターに昇格させました"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} があなた、{user0}、および%n人の参加者をモデレーターに昇格させました"], + "An administrator promoted {user0} and {user1} to moderators" : "管理者が {user0} と {user1} をモデレータに昇格させました", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} が {user0} と {user1} をモデレーターに昇進させました", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理者が {user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} が {user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "You demoted {user0} and {user1} from moderators" : "あなたは {user0} と {user1} をモデレーターから降格しました", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["あなたは {user0}、{user1}、さらに%n人の参加者をモデレーターから降格しました"], + "An administrator demoted you and {user0} from moderators" : "管理者があなたと {user0} をモデレータから降格しました", + "{actor} demoted you and {user0} from moderators" : "{actor} があなたと {user0} をモデレーターから降格しました", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理者があなた、{user0}、および%n人の参加者をモデレーターから降格しました"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} があなた、{user0}、および%n人の参加者をモデレーターから降格しました"], + "An administrator demoted {user0} and {user1} from moderators" : "管理者が {user0} と {user1} をモデレータから降格しました", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} が {user0} と {user1} をモデレーターから降格しました", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理者が {user0}、{user1}、および%n人の参加者をモデレーターから降格しました"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} が {user0}、{user1}、さらに%n人の参加者をモデレーターから降格しました"], + "You: {lastMessage}" : "あなた: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(あなたが編集しました)", + "(edited by a deleted user)" : "(削除済みユーザーにより編集されました)", + "(edited by {moderator})" : "({moderator} により編集されました)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "別ウィンドウかデバイスで既に会話に参加済みです。現在、複数接続はNextcloud Talkではサポートされていません。どうしますか?", + "Leave this page" : "このページを離れる", + "Join here" : "参加する", + "Deck card has been posted to {conversation}" : "デッキカードが {conversation} に投稿されました", + "An error occurred while posting deck card to conversation" : "Deckカードを会話に投稿中にエラーが発生しました", + "Post to a conversation" : "会話に投稿する", + "Post to conversation" : "会話に投稿する", + "The recording failed. Please contact your administrator." : "レコーディングが失敗しました。あなたの管理者に連絡してください。", + "Location has been posted to {conversation}" : "場所が {conversation} に投稿されました", + "An error occurred while posting location to conversation" : "位置情報を会話に投稿中にエラーが発生しました", + "Share to a conversation" : "会話に共有", + "Share to conversation" : "会話に共有", + "In conversation" : "会話の中で", + "Search in conversation: {conversation}" : "会話で検索する: {conversation}", + "Error while clearing conversation history" : "会話履歴のクリア中にエラーが発生しました", + "Error occurred while allowing guests" : "ゲストの許可中にエラーが発生しました", + "Error occurred while disallowing guests" : "ゲスト参加の禁止中にエラーが発生しました", + "Error occurred when restricting the conversation to moderator" : "会話をモデレーターに制限するとエラーが発生しました", + "Error occurred when opening the conversation to everyone" : "全員に会話を開くときにエラーが発生しました", + "Conversation password has been saved" : "会話のパスワードが保存されました", + "Conversation password has been removed" : "会話のパスワードが削除されました", + "Error occurred while saving conversation password" : "会話のパスワードの保存中にエラーが発生しました", + "Call recording is starting." : "録画を開始しています。", + "Call recording stopped while starting." : "録画開始中にが停止しました。", + "Call recording stopped. You will be notified once the recording is available." : "録画が停止されました。録画が利用可能になると通知が届きます", + "Conversation picture set" : "会話画像設定する", + "Conversation picture deleted" : "会話画像は削除されました", + "Could not delete the conversation picture" : "会話画像を削除することができませんでした", + "Could not post message: {errorMessage}" : "メッセージを投稿できませんでした: {errorMessage}", + "An error occurred while fetching the participants" : "参加者の取得中にエラーが発生しました。", + "Could not send invitation to {actorId}" : "{actorId} に招待状を送信できませんでした", + "Invitations sent" : "招待が送信されました", + "Error occurred when sending invitations" : "招待状の送信中にエラーが発生しました", + "An error occurred while creating breakout rooms" : "子会議室の作成中にエラーが発生しました", + "An error occurred while re-ordering the attendees" : "出席者の並び替え中にエラーが発生しました", + "An error occurred while deleting breakout rooms" : "子会議室の削除中にエラーが発生しました", + "An error occurred while starting breakout rooms" : "子会議室の開始中にエラーが発生しました", + "An error occurred while stopping breakout rooms" : "子会議室の停止中にエラーが発生しました", + "An error occurred while sending a message to the breakout rooms" : "子会議室へのメッセージの送信中にエラーが発生しました", + "An error occurred while requesting assistance" : "アシスタントの要求中にエラーが発生しました。", + "An error occurred while resetting the request for assistance" : "アシスタントの要求をリセットする際にエラーが発生しました", + "An error occurred while joining breakout room" : "子会議室への参加中にエラーが発生しました", + "Error fetching upcoming reminders" : "今後のリマインダー取得エラー", + "An error occurred while accepting an invitation" : "招待の受諾時にエラーが発生しました", + "An error occurred while rejecting an invitation" : "招待を拒否する時にエラーが発生しました", + "{guest} (guest)" : "{guest} (ゲスト)", + "An error occurred while submitting your vote" : "あなたの投票を送信する際にエラーが発生しました", + "An error occurred while ending the poll" : "投票を終了する際にエラーが発生しました", + "Poll \"{name}\" was created by {user}. Click to vote" : "\"{user}\" が作成した投票 \"{name}\" です。投票するにはクリックしてください。", + "Failed to add reaction" : "リアクションの追加に失敗", + "Failed to remove reaction" : "リアクションの削除に失敗", + "Error while uploading file \"{fileName}\"" : "ファイル \"{fileName}\" のアップロード中にエラーが発生しました", + "Not enough free space to upload file \"{fileName}\"" : "ファイル ”{fileName}\" をアップロードするのに十分な空き容量がありません", + "You are not allowed to share files" : "ファイル共有は許可されていません", + "Error while sharing file" : "ファイルの共有中にエラーが発生しました", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "お使いのブラウザーは、Nextcloud Talkで完全にはサポートされていません。最新バージョンのMozilla Firefox、Microsoft Edge、Google Chrome、Opera、またはApple Safariを使用してください。", + "Later today – {timeLocale}" : "今日この後 – {timeLocale}", + "Tomorrow – {timeLocale}" : "明日 – {timeLocale}", + "This weekend – {timeLocale}" : "今週末 – {timeLocale}", + "Next week – {timeLocale}" : "来週 – {timeLocale}", + "Message link copied to clipboard" : "メッセージリンクがクリップボードにコピーされました", + "Conversation link copied to clipboard" : "会話リンクをクリップボードにコピーしました", + "The link could not be copied" : "リンクをコピーできませんでした", + "Sending signaling message has failed" : "シグナリングメッセージの送信に失敗しました", + "Lost connection to signaling server. Trying to reconnect." : "シグナリングサーバーへの接続が切れました。再接続してみてください。", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "設定済みのシグナルサーバーは、このバージョンのTalkと互換性を持たせるために更新する必要があります。管理者に連絡してください。", + "Please reload the page." : "ページをリロードしてください。", + "Do not disturb" : "取り込み中", + "Away" : "離席中", + "Microphone {number}" : "マイク {number}", + "Camera {number}" : "カメラ {number}", + "Speaker {number}" : "スピーカー {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "ミュートしたまま話しているようです。他の人に聞こえるようにミュートを解除してください。", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "少なくとも1人の参加者との接続を確立できませんでした。あなたのシナリオにはTURNサーバーが必要かもしれません。管理者に依頼して、{linkstart}このドキュメント{linkend}に従って設定してください。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "予想以上に時間がかかっています。メディア権限はすでに付与されていますか?(または拒否されていますか?)付与されている場合、オーディオとビデオが破損しているのでブラウザーを再起動してください。", + "Access to microphone & camera is only possible with HTTPS" : "マイクとカメラへのアクセスはHTTPSでのみ可能です", + "Please move your setup to HTTPS" : "HTTPSを使用して設定してください", + "Access to microphone & camera was denied" : "マイクとカメラへのアクセスが拒否されました", + "WebRTC is not supported in your browser" : "お使いのブラウザーはWebRTCに対応していません", + "Please use a different browser like Firefox or Chrome" : "別のブラウザー(Firefox または Chrome 等)を使用してください", + "Error while accessing microphone & camera" : "マイクとカメラのアクセス中にエラーが発生しました", + "%s Talk on your mobile devices" : "あなたのモバイルデバイス上の会話%s", + "Join conversations at any time, anywhere, on any device." : "いつでも、どこでも、どんなデバイスでも会話に参加できます。", + "Android app" : "Android アプリ", + "iOS app" : "iOS アプリ", + "__language_name__" : "日本語 (Japanese)", + "Tasks" : "タスク", + "Notes" : "Notes", + "Reports" : "報告", + "Next meeting" : "次の会議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "カレンダーに会議を予約します。ここに表示するためには、会議の場所にTalkのチャットルームを指定してください。", + "Join conversations from remote Nextcloud servers" : "リモートNextcloudサーバーから会話に参加する", + "Set reminder for later today" : "今日中にリマインダーを設定する", + "Set reminder for tomorrow" : "明日のリマインダーを設定する", + "Set reminder for this weekend" : "今週末のリマインダーを設定する", + "Set reminder for next week" : "来週のリマインダーを設定する", + "Open poll • You voted already" : "公開投票 • あなたは既に投票済み", + "Open poll • Click to vote" : "公開投票 • クリックして投票", + "Poll • Ended" : "投票 • 終了", + "Talk recording from {time} ({conversation})" : " {time} からのトーク録音 ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n 投票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公開投票 • %n 投票"], + "Submit vote" : "投票する", + "Your privacy setting has been saved" : "プライバシー設定が保存されました", + "Failed to save sounds setting" : "サウンド設定を保存できませんでした", + "Sounds setting saved" : "サウンド設定を保存", + "Always shown if recording consent is required" : "録音の同意が必要な場合は常に表示されます", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "別ウィンドウかデバイスで既に会話に参加済みです。現在、複数接続はNextcloud Talkではサポートされていないため、このセッションは閉じられます。" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/ja.json b/l10n/ja.json new file mode 100644 index 0000000..2789d51 --- /dev/null +++ b/l10n/ja.json @@ -0,0 +1,1832 @@ +{ "translations": { + "a conversation" : "会話", + "(Duration %s)" : "(時間 %s )", + "You attended a call with {user1}" : "{user1} さんとの通話に参加しました", + "_%n guest_::_%n guests_" : ["ゲスト %n 名"], + "You attended a call with {user1} and {user2}" : "{user1} さんと {user2} さんの通話に参加しました", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}さん、{user2} さんと {user3} さんの通話に参加しました", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1} さん、{user2} さん、 {user3} さんと {user4} さんの通話に参加しました", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1} さん、{user2} さん、{user3} さん、{user4} さんと {user5} さんの通話に参加しました", + "_%n other_::_%n others_" : ["他 %n 名"], + "{actor} invited you to {call}" : "{actor} さんから {call} に招待されました", + "You were invited to a conversation or had a call" : "会話への招待、または着信があったとき", + "Other activities" : "その他のアクティビティ", + "Talk" : "トーク", + "Guest" : "ゲスト", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Nextcloud Talkへようこそ!\nこのチャットでは、Nextcloud Talkで利用できる新機能について説明します。", + "## New in Talk %s" : "## トークの新機能 %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft EdgeとSafariで音声通話とビデオ通話ができるようになりました", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 1対1の会話が持続するようになり、誤ってグループ会話になってしまうことがなくなりました。また、参加者の1人が会話から退出しても、会話は自動的に削除されなくなりました。参加者の両方が退出した場合のみ、会話はサーバーから削除されます", + "- You can now notify all participants by posting \"@all\" into the chat" : "- チャットに「@all」を付けることで、参加者全員に通知できるようになりました", + "- With the \"arrow-up\" key you can repost your last message" : "- ↑キーを押して、最後のメッセージを再投稿できます", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talkでコマンドを使用したり、「/help」をチャットメッセージとして送信したりできるようになりました", + "- With projects you can create quick links between conversations, files and other items" : "- プロジェクトを使用すると、会話、ファイル、およびその他のアイテム間のクイックリンクを作成できます", + "- You can now mention guests in the chat" : "- チャット内でゲストに対してメンションできるようになりました", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 会話にロビーを設置できるようになりました。 これにより、モデレーターはチャットと通話に参加し、会議の準備をすることができるようになりました。その間、ユーザーとゲストは待つ必要があります", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- メッセージに直接返信できるようになり、メッセージの内容を詳しく説明できるようになりました", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "会話と参加者を検索すると、既存の会話もフィルタリングされるため、以前の会話を簡単に見つけることができます", + "- You can now add custom user groups to conversations when the circles app is installed" : "サークルアプリのインストール時に、カスタムユーザーグループを会話に追加できるようになりました", + "- Check out the new grid and call view" : "- 新しいグリッドと通話ビューをお試しください", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- デバイスからファイルをドラッグ&ドロップして、チャットに直接アップロードきるようになりました", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 共有ファイルをビューアアプリのチャットビューで直接開くようになりました", + "- You can now search for chats and messages in the unified search in the top bar" : "-トップバーの統合検索でチャットやメッセージを検索できるようになりました", + "- Spice up your messages with emojis from the emoji picker" : "- 絵文字ピッカーからの絵文字でメッセージを装飾", + "- You can now change your camera and microphone while being in a call" : "- 通話中にカメラとマイクを変更できるようになりました", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 会話に説明付きのコンテキストを与えて開き、ログインしたユーザーが会話を見つけて参加できるようになりました", + "- See a read status and send failed messages again" : "- 既読ステータスを確認し、送信に失敗したメッセージを再送できるようになりました", + "- Raise your hand in a call with the R key" : "- Rキーを押すと通話中に挙手できるようになりました", + "- Join the same conversation and call from multiple devices" : "- 複数のデバイスから同一の会話や通話にさんかできるようになりました", + "- Send voice messages, share your location or contact details" : "- ボイスメッセージを送信したり、現在地や連絡先の詳細を共有できるようになりました", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 会話にグループを追加すると、グループメンバーが参加者として自動的に追加されるようになりました", + "- A preview of your audio and video is shown before joining a call" : "- 通話に参加する前に、音声とビデオのプレビューがご確認いただけるようになりました", + "- You can now blur your background in the newly designed call view" : "- 最新デザインの通話ビューで、背景をぼかすことが可能になりました", + "- Moderators can now assign general and individual permissions to participants" : "- モデレーターは、参加者に一般および個別の権限を割り当てることができるようになりました", + "- You can now react to chat messages" : "- チャットメッセージにリアクションが可能になりました", + "- In the sidebar you can now find an overview of the latest shared items" : "- サイドバーで、最新の共有済みアイテムに関する概要を確認できるようになりました", + "- Use a poll to collect the opinions of others or settle on a date" : "- アンケートを使用して他の人の意見を集めたり、日付を決められます", + "- Configure an expiration time for chat messages" : "- チャットメッセージの有効期限を設定できます", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 参加者が多数の場合は、他の人に通知せずに通話を開始できます。通話を開始してから個別に通話通知を送信できます。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 緊急でない場合は、受信者に通知せずにチャット メッセージを送信できます", + "- Emojis can now be autocompleted by typing a \":\"" : "- 「:」を入力して絵文字を自動補完入力できるようになりました。", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 「/」を入力して新しいスマートピッカーを起動し、さまざまなアイテムをリンクことができるようになりました。", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主催者がブレイクアウトルームを作成できるようになりました(要高性能バックエンド)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 通話を録音できるようになりました(要高性能バックエンド)", + "- Conversations can now have an avatar or emoji as icon" : "- 会話にアバターまたは絵文字をアイコンとして含めることができるようになりました", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- ビデオ通話で背景をぼかすだけでなく、バーチャル背景も利用可能になりました", + "- Reactions are now available during calls" : "- 通話中のリアクションが利用できるようになりました", + "- Typing indicators show which users are currently typing a message" : "- 入力インジケーターは、どのユーザーが現在メッセージを入力しているか示します", + "- Groups can now be mentioned in chats" : "- グループをチャットで言及できるようになりました", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 文字起こしプロバイダーアプリが登録されている場合、通話録音は自動的に文字起こしされます", + "- Chat messages can be translated if a translation provider app is registered" : "- 翻訳プロバイダーアプリが登録されている場合、チャットメッセージを翻訳できます", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** が _chat_ メッセージで使用できるようになりました", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook を使用してボットを実装できるようになりました。詳細については、ドキュメントを参照してください https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- チャットメッセージにリマインダーを設定すると後で再度通知されるようにできるようになりました", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Note to self** 会話を使用して、メモを取りデバイス間で情報を共有します", + "- Captions allow to send a message with a file at the same time" : "- キャプションを使えば、メッセージとファイルを同時に送信できます", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 画面共有中にスピーカーの映像が見えるようになり、通話のリアクションがアニメーションで表示されるようになった", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- ログインした作成者とモデレーターが6時間以内はメッセージを編集できるようになりました", + "- Unsent message drafts are now saved in your browser" : "- 未送信のメッセージの下書きはブラウザに保存されるようになりました", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 他のNextcloudのTalkサーバーと連携してテキストチャットできるようになりました", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- モデレータはアカウントとゲストを退室させ、会話に再度参加するのを禁止できるようになりました", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- リンクされたカレンダーイベントや不在時の代理者からの通話が、会話画面に表示されるようになりました", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 他のNextcloud Talk サーバーと連携して通話できるようになりました(要高性能バックエンド)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows、macOS、Linux用Nextcloud Talkデスクトップ クライアントをリリース: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloudアシスタントを使用して、チャットの通話録音と未読メッセージを要約", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 電子メールアドレス経由で招待されたゲストを識別、参加者リストのインポート、投票の下書き、および通話参加者リストのダウンロードによる会議の改善", + "- Archive conversations to stay focused" : "- 会話をアーカイブして、必要なものに集中できるようになりました", + "- Schedule a meeting into your calendar from within a conversation" : "- 会話内からカレンダーへ会議を予約する", + "- Search for messages of the current conversation directly in the right sidebar" : "- 現在の会話のメッセージを右側のサイドバーで直接検索", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 新しいコンパクトなリストを使用して、より多くの会話を一目で確認できます (トーク設定で有効化)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 会議についての会話は、カレンダーでタイトルと説明が同期されるようになりました。開始時間が近づくまで、検索フィルターでは非表示になります", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 通知設定で会話を機密としてマークすると、会話リストと通知からメッセージの内容が非表示になります", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 会話に重要マークを付けると「応答不可」中にもプッシュ通知を受信できます", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- この1対1通話に他の参加者を追加して、その場で新しいグループ通話を作成する", + "- Use threads to keep your chat and discussions organized" : "- スレッドを使ってチャットや議論を整理", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話中にライブ文字起こしが利用できるようになりました (ライブ文字起こしのExAppと高性能バックエンドが必要です)", + "Talk updates ✅" : "Talk アップデート ✅", + "Reaction deleted by author" : "作成者により削除されたリアクション", + "{actor} created the conversation" : "{actor} さんが会話を作成しました", + "You created the conversation" : "会話を作成しました", + "System created the conversation" : "システムが会話を作成しました", + "An administrator created the conversation" : "管理者が会話を作成しました", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}が会話を%1$sから%2$sにリネームしました", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "会話を%1$sから%2$sにリネームしました", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理者が会話の名前を \"%1$s\" から \"%2$s\" に変更しました", + "{actor} set the description" : "{actor} が説明を設定しました", + "You set the description" : "詳細を設定しました", + "An administrator set the description" : "管理者が説明を設定しました", + "{actor} removed the description" : "{actor} が詳細を削除しました", + "You removed the description" : "詳細を削除しました", + "An administrator removed the description" : "管理者が詳細を削除しました", + "You started a silent call" : "あなたはサイレントコールを開始しました", + "{actor} started a silent call" : "{actor} はサイレントコールを開始しました", + "You started a call" : "通話を開始しました", + "Outgoing call" : "発信", + "{actor} started a call" : "{actor}が通話を開始しました", + "Incoming call" : "着信", + "{actor} joined the call" : "{actor} が通話に参加しました", + "You joined the call" : "あなたはこの通話に参加しました", + "{actor} left the call" : "{actor} が通話を離脱しました", + "You left the call" : "あなたはこの通話を離脱しました", + "{actor} unlocked the conversation" : "{actor} が会話のロックを解除しました", + "You unlocked the conversation" : "会話のロックを解除しました", + "An administrator unlocked the conversation" : "管理者が会話のロックを解除しました", + "{actor} locked the conversation" : "{actor} が会話をロックしました", + "You locked the conversation" : "会話をロックしました", + "An administrator locked the conversation" : "管理者が会話をロックしました", + "{actor} limited the conversation to the current participants" : "{actor} は会話を現在の参加者に限定しました", + "You limited the conversation to the current participants" : "会話を現在の参加者に限定しました", + "An administrator limited the conversation to the current participants" : "管理者は会話を現在の参加者に制限しました", + "{actor} opened the conversation to registered users" : "{actor} が登録ユーザーに会話を公開しました", + "You opened the conversation to registered users" : "登録ユーザーへ会話を公開しました", + "An administrator opened the conversation to registered users" : "管理者が登録ユーザーへ会話を公開しました", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} は、登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "You opened the conversation to registered users and users created with the Guests app" : "登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理者が登録済みユーザーおよび Guests アプリで作成されたユーザーに会話を公開しました", + "The conversation is now open to everyone" : "全員への会話が開始されました", + "{actor} opened the conversation to everyone" : "{actor}が全員への会話を開始しました", + "You opened the conversation to everyone" : "全員への会話を開始しました", + "{actor} restricted the conversation to moderators" : "{actor} が会話をモデレーターに制限しました", + "You restricted the conversation to moderators" : "会話をモデレーターに限定しました", + "{actor} started breakout rooms" : "{actor} が子会議室を開始しました", + "You started breakout rooms" : "子会議室を開始しました", + "{actor} stopped breakout rooms" : "{actor} が子会議室を停止しました", + "You stopped breakout rooms" : "子会議室を停止しました", + "{actor} allowed guests" : "{actor} がゲストを許可しました", + "You allowed guests" : "あなたがゲストを許可しました", + "An administrator allowed guests" : "管理者がゲストを許可しました", + "{actor} disallowed guests" : "{actor}がゲストを拒否しました", + "You disallowed guests" : "ゲストを拒否しました", + "An administrator disallowed guests" : "管理者がゲストを拒否しました", + "{actor} set a password" : "{actor} がパスワードを設定しました", + "You set a password" : "パスワードを設定する", + "An administrator set a password" : "管理者がパスワードを設定しました", + "{actor} removed the password" : "{actor} がパスワードを削除しました", + "You removed the password" : "パスワードを削除しました", + "An administrator removed the password" : "管理者がパスワードを削除しました", + "{actor} added {user}" : "{actor} が {user} を追加しました", + "You joined the conversation" : "会話に参加しました", + "{actor} joined the conversation" : "{actor}が会話に参加しました", + "You added {user}" : "{user}を追加しました", + "{actor} added you" : "{actor}があなたを追加しました", + "An administrator added you" : "管理者があなたを追加しました", + "An administrator added {user}" : "管理者が {user} を追加しました", + "You left the conversation" : "会話から抜けました", + "{actor} left the conversation" : "{actor}が会話から抜けました", + "{actor} removed {user}" : "{actor} が {user} を削除しました。", + "You removed {user}" : "{user}を削除しました", + "{actor} removed you" : "{actor}があなたを削除しました", + "An administrator removed you" : "管理者があなたを外しました", + "An administrator removed {user}" : "管理者が {user}を外しました", + "{actor} invited {federated_user}" : "{actor} が {federated_user} を招待しました", + "You invited {federated_user}" : "あなたが {federated_user} を招待しました", + "You accepted the invitation" : "あなたはこの招待を受け入れました", + "{actor} invited you" : "{actor} さんがあなたを招待しました", + "An administrator invited you" : "管理者があなたを招待しました", + "An administrator invited {federated_user}" : "管理者が {federated_user} を招待しました", + "{federated_user} accepted the invitation" : "{federated_user} さんが招待を承認しました", + "{actor} removed {federated_user}" : "{actor} さんが {federated_user} さんを削除しました", + "You removed {federated_user}" : "あなたが {federated_user} さんを削除しました", + "An administrator removed {federated_user}" : "管理者が {federated_user} さんを削除しました", + "{federated_user} declined the invitation" : "{federated_user} さんが招待を拒否しました", + "{actor} added group {group}" : "{actor} がグループ {group} を追加しました", + "You added group {group}" : "グループ {group} を追加しました", + "An administrator added group {group}" : "管理者が {group} グループを追加しました", + "{actor} removed group {group}" : "{actor} がグループ {group} を削除", + "You removed group {group}" : "グループ {group} を削除しました", + "An administrator removed group {group}" : "管理者が {group} グループを削除しました", + "You removed team {circle}" : "{circle}を削除しました", + "An administrator removed team {circle}" : "管理者がチーム{circle}を削除しました", + "{actor} added {phone}" : "{actor} が {phone} を追加しました", + "You added {phone}" : "あなたが {phone} を追加しました", + "An administrator added {phone}" : "管理者が {phone} を追加しました", + "{actor} removed {phone}" : "{actor} が {phone} を削除しました", + "You removed {phone}" : "あなたが {phone} を削除しました", + "An administrator removed {phone}" : "管理者が {phone} を削除しました", + "{actor} promoted {user} to moderator" : "{actor} が {user} をモデレーターに昇格しました", + "You promoted {user} to moderator" : "{user} をモデレータに昇格しました", + "{actor} promoted you to moderator" : "{actor}があなたをモデレータに昇格させました", + "An administrator promoted you to moderator" : "管理者があなたをモデレータに昇格させました", + "An administrator promoted {user} to moderator" : "管理者が {user}をモデレータに昇格させました", + "{actor} demoted {user} from moderator" : "{actor}が{user}をモデレーターから降格させました", + "You demoted {user} from moderator" : "{user}をモデレーターから降格させました", + "{actor} demoted you from moderator" : "{actor}があなたをモデレーターから降格させました", + "An administrator demoted you from moderator" : "管理者があなたをモデレーターから降格させました", + "An administrator demoted {user} from moderator" : "管理者が {user}をモデレーターから降格させました", + "{actor} shared a file which is no longer available" : "{actor}は使用できなくなったファイルを共有しました", + "You shared a file which is no longer available" : "使用できなくなったファイルを共有しました", + "The shared location is malformed" : "共有場所の形式が正しくありません", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} が、この会話を他のチャットと同期するようにMatterbridgeを設定しました", + "You set up Matterbridge to synchronize this conversation with other chats" : "この会話を他のチャットシステムと同期するようにMatterbridgeを設定します", + "{actor} created thread {title}" : "{actor}がスレッド{title}を作成した", + "You created thread {title}" : "{title}スレッドを作成しました", + "{actor} updated the Matterbridge configuration" : "{actor} がMatterbridgeの構成を更新しました。", + "You updated the Matterbridge configuration" : "Matterbridgeの構成を更新しました。", + "{actor} removed the Matterbridge configuration" : "{actor} はMatterbridge構成を削除しました", + "You removed the Matterbridge configuration" : "Matterbridge構成を削除しました", + "{actor} started Matterbridge" : "{actor} がMatterbridgeを開始しました", + "You started Matterbridge" : "Matterbridgeを開始しました", + "{actor} stopped Matterbridge" : "{actor} がMatterbridgeを停止しました", + "You stopped Matterbridge" : "Matterbridgeを停止しました", + "{actor} deleted a message" : "{actor} がメッセージを削除しました", + "You deleted a message" : "メッセージを削除しました", + "{actor} edited a message" : "{actor} がメッセージを編集しました", + "You edited a message" : "あなたがメッセージを編集しました", + "{actor} deleted a reaction" : "{actor} さんがリアクションを削除しました", + "You deleted a reaction" : "あなたはリアクションを削除しました", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["メッセージの有効期限を%n週間に設定しました。"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["メッセージの有効期限を%n日に設定しました。"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["メッセージの有効期限を%n時間に設定しました。"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["メッセージの有効期限を%n分に設定しました。"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}がメッセージの有効期限を%n週間に設定しました。"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}がメッセージの有効期限を%n日に設定しました。"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}がメッセージの有効期限を%n時間に設定しました。"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}がメッセージの有効期限を%n分に設定しました。"], + "{actor} disabled message expiration" : "{actor} がメッセージの有効期限を無効にしました", + "You disabled message expiration" : "メッセージの有効期限を無効にしました", + "{actor} cleared the history of the conversation" : "{actor} が会話の履歴を削除しました", + "You cleared the history of the conversation" : "会話の履歴を削除しました", + "{actor} set the conversation picture" : "{actor} がこのチャットの画像を設定しました", + "You set the conversation picture" : "このチャットの画像を設定しました", + "{actor} removed the conversation picture" : "{actor}がこのチャットの画像を削除しました", + "You removed the conversation picture" : "このチャットの画像を削除しました", + "{actor} ended the poll {poll}" : "{actor} が投票 {poll} を終了した", + "You ended the poll {poll}" : "あなたが投票 {poll} を終了した", + "{actor} started the video recording" : "{actor} がビデオ録画を開始しました", + "You started the video recording" : "あなたがビデオ録画を開始しました", + "{actor} stopped the video recording" : "{actor} がビデオ録画を停止しました", + "You stopped the video recording" : "あなたがビデオ録画を停止しました", + "{actor} started the audio recording" : "{actor} が音声録音を開始しました", + "You started the audio recording" : "あなたが音声録音を開始しました", + "{actor} stopped the audio recording" : "{actor} が音声録音を中止しました", + "You stopped the audio recording" : "あなたが音声録音を中止しました", + "The recording failed" : "レコーディングに失敗しました", + "Someone voted on the poll {poll}" : "誰かが投票 {poll} しました", + "Message deleted by author" : "作成者によって削除されたメッセージ", + "Message deleted by {actor}" : "{actor} によって削除されたメッセージ", + "Message deleted by you" : "あなたが削除したメッセージ", + "Deleted user" : "ユーザーを削除", + "Unknown number" : "不明な番号", + "Administration" : "管理", + "System" : "システム", + "%s (guest)" : "%s(ゲスト)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} さんが %n 人のゲストとの通話を終了しました (通話時間 {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} さんが {user1} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} さんが {user1} さんと {user2} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さんと {user3} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さん、 {user3} さん、 {user4} さんとの通話を終了しました (通話時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} さんが {user1} さん、 {user2} さん、 {user3} さん、 {user4} さん、{user5} さんとの通話を終了しました (通話時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} の {user} のメッセージ", + "Message of {user}" : "{user} のメッセージ", + "Message of a deleted user in {conversation}" : "{conversation} の削除されたユーザーのメッセージ", + "Talk conversations" : "会話", + "Talk to %s" : "%s と通話", + "An error occurred. Please contact your administrator." : "エラーが発生しました。管理者に連絡してください。", + "Storage quota exceeded" : "ストレージの割り当てを超過しました", + "File not found" : "ファイルが見つかりません", + "File is not shared, or shared but not with the user" : "ファイルが共有されていないか、対象ユーザーを除いて共有されています", + "No account available to delete." : "削除するアカウントがありません。", + "Poll" : "投票", + "No image file provided" : "画像ファイルが提供されていません", + "File is too big" : "ファイルが大きすぎます", + "Invalid file provided" : "無効なファイルが提供されました", + "Invalid image" : "無効な画像", + "Unknown filetype" : "不明なファイルタイプ", + "Talk mentions" : "Talk", + "Say hi to your friends and colleagues!" : "友達や同僚に挨拶しましょう!", + "No unread mentions" : "未読はありません", + "Call in progress" : "呼び出し中", + "You were mentioned" : "あなたについて言及されました", + "Write to conversation" : "会話に書き込む", + "Writes event information into a conversation of your choice" : "選択した会話にイベント情報を書き込みます", + "Conversation invitation" : "会話への招待", + "Description" : "詳細", + "You can also dial-in via phone with the following details" : "次の詳細を使用して電話でダイヤルインすることもできます", + "Dial-in information" : "ダイヤルイン情報", + "Meeting ID" : "ミーティングID", + "Your PIN" : "あなたのPIN", + "Meeting" : "会議", + "Password request: %s" : "パスワードのリクエスト :%s", + "Private conversation" : "プライベート会話", + "Deleted user (%s)" : "削除済みユーザー(%s)", + "Failed to upload call recording" : "通話録音のアップロードに失敗しました", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "レコーディングサーバーは、通話 {call} の録音のアップロードに失敗しました。管理者に連絡してください。", + "Share to chat" : "チャットに共有する", + "Dismiss notification" : "通知を閉じる", + "Call recording now available" : "通話レコーディングが利用可能です", + "The recording for the call in {call} was uploaded to {file}." : "{call} の通話の録音は {file} にアップロードされました。", + "Transcript now available" : "トランスクリプトは現在利用可能です", + "The transcript for the call in {call} was uploaded to {file}." : "{call} の通話の録音は {file} にアップロードされました。", + "Failed to transcript call recording" : "通話レコーディングのトランスクリプトに失敗しました", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "サーバーは {call} のコールの {file} の通話レコーディングを transcript することに失敗しました。管理者に連絡してください。", + "Call summary now available" : "通話要約が利用可能になりました", + "The summary for the call in {call} was uploaded to {file}." : "{call}通話の要約が {file}にアップロードされました。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} が {remoteServer} 上の {roomName} に参加するようにあなたを招待しました", + "Accept" : "承諾", + "Decline" : "拒否", + "{user1} invited you to a federated conversation" : "{user1} があなたをフェデレーション会話に招待しました", + "New message" : "新規メッセージ", + "Reminder" : "リマインダー", + "Notification" : "通知", + "Reminder: You in {call}" : "リマインダー: You in {call}", + "Reminder: {user} in {call}" : "リマインダー: {user} in {call}", + "Reminder: Deleted user in {call}" : "リマインダー: {call} で削除されたユーザー", + "Reminder: {guest} (guest) in {call}" : "リマインダー: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "リマインダー: Guest in {call}", + "{user} reacted with {reaction}" : "{user} が {reaction} で反応しました", + "{user} reacted with {reaction} in {call}" : "{user} は {call} で {reaction} で反応しました", + "Deleted user reacted with {reaction} in {call}" : "削除されたユーザーは {call} で {reaction} で反応しました", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) は {reaction} で {call} に反応しました", + "Guest reacted with {reaction} in {call}" : "ゲスト は {call} で {reaction} で反応しました", + "{user} in {call}" : "{call} の {user}", + "Deleted user in {call}" : "{call} から削除されたユーザー", + "{guest} (guest) in {call}" : "{call}の(ゲスト) {guest}", + "Guest in {call}" : "{call} のゲスト", + "{user} sent you a private message" : "{user} はあなたにプライベートなメッセージを送信しました", + "{user} sent a message in conversation {call}" : "{user}は会話{call}でメッセージを送りました", + "A deleted user sent a message in conversation {call}" : "削除されたユーザーが会話 {call} でメッセージを送信しました", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) 会話 {call} にメッセージを送信しました", + "A guest sent a message in conversation {call}" : "ゲストが会話 {call} でメッセージを送信しました", + "{user} replied to your private message" : "{user} はあなたのプライベートなメッセージに返信しました", + "{user} replied to your message in conversation {call}" : " {user} が会話{call}内のメッセージに返信しました", + "A deleted user replied to your message in conversation {call}" : "削除されたユーザーが会話 {call} であなたのメッセージに返信しました", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) が会話 {call} であなたのメッセージに返信しました", + "A guest replied to your message in conversation {call}" : "ゲストが会話 {call} であなたのメッセージに返信しました", + "Reminder: You in private conversation {call}" : "リマインダー:あなたは非公開の会話で {call} しています", + "Reminder: A deleted user in private conversation {call}" : "リマインダー:非公開の会話 {call} で削除されたユーザー", + "Reminder: {user} in private conversation" : "リマインダー:{user} は非公開の会話にいます", + "Reminder: You in conversation {call}" : "リマインダー:あなたは会話で {call} しています", + "Reminder: {user} in conversation {call}" : "リマインダー:{user} は会話で {call} しています", + "Reminder: A deleted user in conversation {call}" : "リマインダー:非公開の会話 {call} で削除されたユーザー", + "Reminder: {guest} (guest) in conversation {call}" : "リマインダー:{guest} (guest) は会話 {call} にいます", + "Reminder: A guest in conversation {call}" : "リマインダー:ゲストは会話 {call} にいます", + "{user} reacted with {reaction} to your private message" : "{user} さんが、あなたとのプライベートメッセージに {reaction} とリアクションしました", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} さんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "削除されたユーザーが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (ゲスト) さんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "A guest reacted with {reaction} to your message in conversation {call}" : "ゲストさんが、会話 {call} 内でのあなたのメッセージに対して {reaction} とリアクションしました", + "{user} mentioned you in a private conversation" : "{user}がプライベートな会話であなたについて話しをしました", + "{user} mentioned group {group} in conversation {call}" : "{user} は会話 {call} でグループ {group} に言及しました", + "{user} mentioned everyone in conversation {call}" : "{user} は会話 {call} で全員に言及しました", + "{user} mentioned you in conversation {call}" : "{user}は会話 {call} であなたについて話しをしました", + "A deleted user mentioned group {group} in conversation {call}" : "削除されたユーザーが会話 {call} でグループ {group} に言及しました", + "A deleted user mentioned everyone in conversation {call}" : "削除されたユーザーは会話 {call} で全員に言及しました", + "A deleted user mentioned you in conversation {call}" : "削除されたユーザーが会話 {call} であなたについて話しをしました", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) が会話 {call} でグループ {group} に言及しました", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) は会話 {call} で全員に言及しました", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) が会話 {call} であなたに話しをしました", + "A guest mentioned group {group} in conversation {call}" : "ゲストが会話 {call} でグループ {group} に言及しました", + "A guest mentioned everyone in conversation {call}" : "ゲストが会話 {call} で全員に言及しました", + "A guest mentioned you in conversation {call}" : "ゲストが会話{call}であなたについて話しをしました", + "View message" : "メッセージを表示する", + "Dismiss reminder" : "リマインダーを解除", + "View chat" : "チャットを見る", + "{user} invited you to a group conversation: {call}" : "{user}がグループ会話{call}にあなたを招待しました", + "Join call" : "通話開始", + "Answer call" : "応答", + "{user} would like to talk with you" : "{user} からの通話要請があります", + "Call back" : "折り返し電話", + "You missed a call from {user}" : "{user}からの着信に応答できませんでした。", + "A group call has started in {call}" : "{call} のグループ通話が開始されました", + "You missed a group call in {call}" : "{user}からのグループ着信に応答できませんでした。", + "{email} is requesting the password to access {file}" : "{email}は{file}にアクセスするためのパスワードをリクエストしています", + "{email} tried to request the password to access {file}" : "{email} が {file} にアクセスするためのパスワードを要求しようとしました", + "Someone is requesting the password to access {file}" : "誰かが{file}にアクセスするためのパスワードを要求しています", + "Someone tried to request the password to access {file}" : "誰かが {file} にアクセスするためのパスワードを要求しようとしました", + "Open settings" : "設定を開く", + "Hosted signaling server added" : "ホストされたシグナリングサーバーを追加しました", + "The hosted signaling server is now configured and will be used." : "ホストされたシグナリングサーバーが設定され、使用されるようになります。", + "Hosted signaling server removed" : "ホストされたシグナリングサーバーを削除しました", + "The hosted signaling server was removed and will not be used anymore." : "ホストされたシグナリングサーバーが削除され、使用できないようになります。", + "Hosted signaling server changed" : "ホストされたシグナリングサーバーを変更しました", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "ホストされたシグナリングサーバーのアカウントのステータスが\"{oldstatus}\"から\"{newstatus}\"に変更されました。", + "pending" : "保留中", + "active" : "有効", + "expired" : "有効期限切れ", + "blocked" : "ブロックされた", + "error" : "エラー", + "The certificate of {host} expires in {days} days" : "{host} の証明書は {days} 日後に期限切れになります", + "The certificate of {host} expired" : "{host} の証明書が期限切れです", + "Contact via Talk" : "Talk経由で連絡", + "Open Talk" : "公開トーク", + "Default" : "デフォルト", + "Presentation" : "プレゼンテーション", + "Conversations" : "会話", + "Messages in current conversation" : "現在の会話のメッセージ", + "{user}" : "{user}", + "Messages" : "メッセージ", + "{user} in {conversation}" : "{conversation} の {user}", + "Messages in other conversations" : "他の会話のメッセージ", + "One-to-one rooms always need to show the other users avatar" : "1対1のルームでは、常に相手ユーザーのアバターを表示する必要があります", + "Invalid emoji character" : "無効な絵文字", + "Invalid background color" : "無効な背景色", + "Avatar image is not square" : "アバター画像が正方形ではありません", + "Room {number}" : "ルーム {number}", + "Other" : "その他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "トライアルサーバーに到達できないため、トライアルのリクエストに失敗しました。後ほどもう一度お試しください。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "このインスタンスの認証に問題があります。もしかしたら、外部からURLを確認しても届かないのかもしれません。", + "Something unexpected happened." : "想定外のことが起きました。", + "The URL is invalid." : "無効なURLです。", + "An HTTPS URL is required." : "HTTPS URLは必須です。", + "The email address is invalid." : "無効なメールアドレスです。", + "The language is invalid." : "無効な言語です。", + "The country is invalid." : "無効な国名です。", + "There is a problem with the request of the trial. Please check your logs for further information." : "トライアルリクエストに問題があります。詳細はログを確認してください。", + "Too many requests are send from your servers address. Please try again later." : "あなたのサーバーアドレスからのリクエストが多すぎます。後でもう一度ためしてください。", + "There is already a trial registered for this Nextcloud instance." : "このNextcloudのインスタンスには、すでにトライアルが登録されています。", + "Something unexpected happened. Please try again later." : "想定外のことが起きました。後ほどもう一度お試しください。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "トライアルサーバー動作不良のたため、トライアルリクエストに失敗しました。後ほどもう一度お試しください。", + "Trial requested but failed to get account information. Please check back later." : "トライアルを要求しましたが、アカウント情報を取得できませんでした。後ほど確認してください。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "この認証要求に問題があります。もしかしたら、外部からURLを確認しても届かないのかもしれません。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "トライアルサーバー動作不良ため、アカウント情報の取得に失敗しました。後ほど確認してください。", + "There is a problem with fetching the account information. Please check your logs for further information." : "アカウント情報の取得中に問題が生じました。詳細はログを確認してください。", + "There is no such account registered." : "そのようなアカウントは登録されていません。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "トライアルサーバーにアクセスできないため、アカウント情報の取得に失敗しました。後ほど確認してください。", + "Deleting the hosted signaling server account failed. Please check back later." : "ホストされたシグナリングサーバーのアカウント削除に失敗しました。後ほど確認してください。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "トライアルサーバー動作不良のため、アカウントの削除に失敗しました。後ほど確認してください。", + "There is a problem with deleting the account. Please check your logs for further information." : "アカウントの削除中に問題が生じました。詳しくはログをご確認ください。", + "Too many requests are sent from your servers address. Please try again later." : "サーバーアドレスから送信されるリクエストが多すぎます。後でもう一度やり直してください。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "トライアルサーバーにアクセスできないため、アカウントの削除に失敗しました。後ほど確認してください。", + "Note to self" : "自分へのメモ", + "A place for your private notes, thoughts and ideas" : "あなたの非公開のメモ、思考とアイデアの場所", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** は、Nextcloudエコシステムとシームレスに統合された安全なセルフホスト型通信プラットフォームです。\n\n#### Nextcloud Talkの主な機能:\n\n* プライベートチャットとグループチャットでのチャットとメッセージング\n* 音声通話とビデオ通話\n* ファイル共有と他のNextcloudアプリとの統合\n* カスタマイズ可能な会話設定、モデレーション、プライバシー制御\n* Web、デスクトップ、モバイル(iOSおよびAndroid)\n* プライベートで安全な通信\n\n詳細については、[ユーザー ドキュメント](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html) をご覧ください", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "#Nextcloudトークへようこそ\n\nNextcloud Talkは、Nextcloudと統合されたプライベートで強力なメッセージングアプリです。プライベートまたはグループの会話でチャットしたり、音声通話やビデオ通話で共同作業したり、ウェビナーやイベントを企画したり、会話をカスタマイズしたりできます。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 テキストの書式を設定してリッチメッセージを作成する\n\nNextcloud Talkでは、Markdown構文を使用してメッセージを修飾できます。たとえば、**太字** または *斜体* の書式設定を適用したり、`テキストをコードとして強調表示`したりします。表を作成し、テキストに見出しを追加することも可能です。\n\nタイプミスを修正したり、書式を修正したりする必要がありますか? メッセージメニューから「メッセージの編集」をクリックしてメッセージを編集できます。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗添付ファイルやリンクを追加します\n\n「+」ボタンを使用すれば、Nextcloud Hubからファイルを添付できます。ファイルやさまざまなNextcloudアプリからもアイテムを共有できます。 Textアプリなど、一部のアプリではインタラクティブなウィジェットもサポートされています。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 会話をスムーズに:ユーザーにメンションしたり、メッセージに反応したりしましょう\n\n%sを使用して会話中の全員にメンションしたり、「@」を入力してリストから名前を選択して特定の参加者にメンションできます。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ スマート ピッカーでもっといろんな事を呼び出せます\n\n「/」を入力するか、「+」メニューからスマート ピッカーを開き、メッセージにさまざまなコンテンツを添付できます。 スマートピッカーを設定すると、Nextcloudアプリ、GIF、地図上の場所、AI生成コンテンツなどからアイテムを追加できます。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "⚙️ 会話管理設定 \n\n会話の管理画面で以下を設定できます:\n* 会話情報の編集 \n* 通知の管理 \n* 各種モデレーションルールの適用 \n* アクセスとセキュリティの設定 \n* ボットの有効化 \n* その他!", + "Andorra" : "アンドラ", + "United Arab Emirates" : "アラブ首長国連邦", + "Afghanistan" : "アフガニスタン", + "Antigua and Barbuda" : "アンティグア・バーブーダ", + "Anguilla" : "アンギラ", + "Albania" : "アルバニア", + "Armenia" : "アルメニア", + "Angola" : "アンゴラ", + "Antarctica" : "南極大陸", + "Argentina" : "アルゼンチン", + "American Samoa" : "アメリカ領サモア", + "Austria" : "オーストリア", + "Australia" : "オーストラリア", + "Aruba" : "アルバ", + "Åland Islands" : "オーランド諸島", + "Azerbaijan" : "アゼルバイジャン", + "Bosnia and Herzegovina" : "ボスニア・ヘルツェゴビナ", + "Barbados" : "バルバドス", + "Bangladesh" : "バングラデシュ", + "Belgium" : "ベルギー", + "Burkina Faso" : "ブルキナファソ", + "Bulgaria" : "ブルガリア", + "Bahrain" : "バーレーン", + "Burundi" : "ブルンジ共和国", + "Benin" : "ベナン", + "Saint Barthélemy" : "サン・バルテルミー島", + "Bermuda" : "バミューダ諸島", + "Brunei Darussalam" : "ブルネイ・ダルサラーム国", + "Bolivia, Plurinational State of" : "ボリビア多民族国家", + "Bonaire, Sint Eustatius and Saba" : "ボネール、シント・ユースタティウスおよびサバ", + "Brazil" : "ブラジル", + "Bahamas" : "バハマ", + "Bhutan" : "ブータン", + "Bouvet Island" : "ブーベ島", + "Botswana" : "ボツワナ", + "Belarus" : "ベラルーシ", + "Belize" : "ベリーズ", + "Canada" : "カナダ", + "Cocos (Keeling) Islands" : "ココス(キーリング)諸島", + "Congo, the Democratic Republic of the" : "コンゴ民主共和国", + "Central African Republic" : "中央アフリカ共和国", + "Congo" : "コンゴ共和国", + "Switzerland" : "スイス", + "Côte d'Ivoire" : "コートジボワール", + "Cook Islands" : "クック諸島", + "Chile" : "チリ", + "Cameroon" : "カメルーン", + "China" : "中華人民共和国", + "Colombia" : "コロンビア共和国", + "Costa Rica" : "コスタリカ", + "Cuba" : "キューバ", + "Cabo Verde" : "カーボベルデ", + "Curaçao" : "キュラソー島", + "Christmas Island" : "クリスマス諸島", + "Cyprus" : "キプロス共和国", + "Czechia" : "チェコ", + "Germany" : "ドイツ", + "Djibouti" : "ジブチ", + "Denmark" : "デンマーク", + "Dominica" : "ドミニカ国", + "Dominican Republic" : "ドミニカ共和国", + "Algeria" : "アルジェリア民主人民共和国", + "Ecuador" : "エクアドル", + "Estonia" : "エストニア", + "Egypt" : "エジプト", + "Western Sahara" : "西サハラ", + "Eritrea" : "エリトリア", + "Spain" : "スペイン", + "Ethiopia" : "エチオピア", + "Finland" : "フィンランド", + "Fiji" : "フィジー", + "Falkland Islands (Malvinas)" : "フォークランド(マルビナス)諸島", + "Micronesia, Federated States of" : "ミクロネシア連邦", + "Faroe Islands" : "フェロー諸島", + "France" : "フランス", + "Gabon" : "ガボン", + "United Kingdom of Great Britain and Northern Ireland" : "イギリス", + "Grenada" : "グレナダ", + "Georgia" : "ジョージア", + "French Guiana" : "フランス領ギアナ", + "Guernsey" : "ガーンジー", + "Ghana" : "ガーナ", + "Gibraltar" : "ジブラルタル", + "Greenland" : "グリーンランド", + "Gambia" : "ガンビア", + "Guinea" : "ギニア共和国", + "Guadeloupe" : "グアドループ", + "Equatorial Guinea" : "赤道ギニア共和国", + "Greece" : "ギリシャ", + "South Georgia and the South Sandwich Islands" : "サウスジョージア・サウスサンドウィッチ諸島", + "Guatemala" : "グアテマラ", + "Guam" : "グアム", + "Guinea-Bissau" : "ギニアビサウ共和国", + "Guyana" : "ガイアナ", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "ハード島とマクドナルド諸島", + "Honduras" : "ホンジュラス", + "Croatia" : "クロアチア", + "Haiti" : "ハイチ", + "Hungary" : "ハンガリー", + "Indonesia" : "インドネシア", + "Ireland" : "アイルランド", + "Israel" : "イスラエル", + "Isle of Man" : "マン島", + "India" : "インド", + "British Indian Ocean Territory" : "イギリス領インド洋地域", + "Iraq" : "イラク", + "Iran, Islamic Republic of" : "イラン・イスラム共和国", + "Iceland" : "アイスランド", + "Italy" : "イタリア", + "Jersey" : "ジャージー", + "Jamaica" : "ジャマイカ", + "Jordan" : "ヨルダン・ハシミテ王国", + "Japan" : "日本", + "Kenya" : "ケニア", + "Kyrgyzstan" : "キルギス", + "Cambodia" : "カンボジア", + "Kiribati" : "キリバス", + "Comoros" : "コモロ", + "Saint Kitts and Nevis" : "セントクリストファー・ネイビス", + "Korea, Democratic People's Republic of" : "朝鮮民主主義人民共和国", + "Korea, Republic of" : "大韓民国", + "Kuwait" : "クウェート", + "Cayman Islands" : "ケイマン諸島", + "Kazakhstan" : "カザフスタン", + "Lao People's Democratic Republic" : "ラオス", + "Lebanon" : "レバノン", + "Saint Lucia" : "セントルシア", + "Liechtenstein" : "リヒテンシュタイン", + "Sri Lanka" : "スリランカ", + "Liberia" : "リベリア", + "Lesotho" : "レソト", + "Lithuania" : "リトアニア", + "Luxembourg" : "ルクセンブルク", + "Latvia" : "ラトビア", + "Libya" : "リビア", + "Morocco" : "モロッコ", + "Monaco" : "モナコ", + "Moldova, Republic of" : "モルドバ共和国", + "Montenegro" : "モンテネグロ", + "Saint Martin (French part)" : "セント・マーチン島(フランス領)", + "Madagascar" : "マダガスカル", + "Marshall Islands" : "マーシャル諸島", + "North Macedonia" : "北マケドニア共和国", + "Mali" : "マリ", + "Myanmar" : "ミャンマー", + "Mongolia" : "モンゴル", + "Macao" : "マカオ", + "Northern Mariana Islands" : "北マリアナ諸島", + "Martinique" : "マルティニーク", + "Mauritania" : "モーリタニア", + "Montserrat" : "モントセラト", + "Malta" : "マルタ", + "Mauritius" : "モーリシャス", + "Maldives" : "モルディブ", + "Malawi" : "マラウイ共和国", + "Mexico" : "メキシコ", + "Malaysia" : "マレーシア", + "Mozambique" : "モザンビーク", + "Namibia" : "ナミビア", + "New Caledonia" : "ニューカレドニア", + "Niger" : "ニジェール", + "Norfolk Island" : "ノーフォーク島", + "Nigeria" : "ナイジェリア", + "Nicaragua" : "ニカラグア", + "Netherlands" : "オランダ", + "Norway" : "ノルウェー", + "Nepal" : "ネパール", + "Nauru" : "ナウル", + "Niue" : "ニウエ", + "New Zealand" : "ニュージーランド", + "Oman" : "オマーン", + "Panama" : "パナマ", + "Peru" : "ペルー", + "French Polynesia" : "フランス領ポリネシア", + "Papua New Guinea" : "パプアニューギニア", + "Philippines" : "フィリピン", + "Pakistan" : "パキスタン", + "Poland" : "ポーランド", + "Saint Pierre and Miquelon" : "サンピエール島・ミクロン島", + "Pitcairn" : "ピトケアン諸島", + "Puerto Rico" : "プエルトリコ", + "Palestine, State of" : "パレスチナ", + "Portugal" : "ポルトガル", + "Palau" : "パラオ", + "Paraguay" : "パラグアイ", + "Qatar" : "カタール", + "Réunion" : "レユニオン", + "Romania" : "ルーマニア", + "Serbia" : "セルビア", + "Russian Federation" : "ロシア連邦", + "Rwanda" : "ルワンダ", + "Saudi Arabia" : "サウジアラビア", + "Solomon Islands" : "ソロモン諸島", + "Seychelles" : "セーシェル", + "Sudan" : "スーダン", + "Sweden" : "スウェーデン", + "Singapore" : "シンガポール", + "Saint Helena, Ascension and Tristan da Cunha" : "セントヘレナ・アセンションおよびトリスタンダクーニャ", + "Slovenia" : "スロベニア", + "Svalbard and Jan Mayen" : "スヴァールバル諸島およびヤンマイエン島", + "Slovakia" : "スロバキア", + "Sierra Leone" : "シエラレオネ", + "San Marino" : "サンマリノ", + "Senegal" : "セネガル", + "Somalia" : "ソマリア", + "Suriname" : "スリナム", + "South Sudan" : "南スーダン", + "Sao Tome and Principe" : "サントメ・プリンシペ", + "El Salvador" : "エルサルバドル", + "Sint Maarten (Dutch part)" : "シント・マールテン(オランダ領)", + "Syrian Arab Republic" : "シリア・アラブ共和国", + "Eswatini" : "エスワティニ王国", + "Turks and Caicos Islands" : "タークス・カイコス諸島", + "Chad" : "チャド", + "French Southern Territories" : "フランス領南方・南極地域", + "Togo" : "トーゴ", + "Thailand" : "タイ", + "Tajikistan" : "タジキスタン", + "Tokelau" : "トケラウ", + "Timor-Leste" : "東ティモール", + "Turkmenistan" : "トルクメニスタン", + "Tunisia" : "チュニジア", + "Tonga" : "トンガ王国", + "Turkey" : "トルコ", + "Trinidad and Tobago" : "トリニダード・トバゴ", + "Tuvalu" : "ツバル", + "Taiwan, Province of China" : "台湾中華民国", + "Tanzania, United Republic of" : "タンザニア", + "Ukraine" : "ウクライナ", + "Uganda" : "ウガンダ", + "United States Minor Outlying Islands" : "合衆国領有小離島", + "United States of America" : "アメリカ合衆国", + "Uruguay" : "ウルグアイ", + "Uzbekistan" : "ウズベキスタン", + "Holy See" : "バチカン", + "Saint Vincent and the Grenadines" : "セントビンセント・グレナディーン", + "Venezuela, Bolivarian Republic of" : "ベネズエラ、ボリバル共和国", + "Virgin Islands, British" : "英領ヴァージン諸島", + "Virgin Islands, U.S." : "米バージン諸島", + "Viet Nam" : "ベトナム", + "Vanuatu" : "バヌアツ", + "Wallis and Futuna" : "ウォリス・フツナ", + "Samoa" : "サモア", + "Yemen" : "イエメン", + "Mayotte" : "マヨット", + "South Africa" : "南アフリカ", + "Zambia" : "ザンビア", + "Zimbabwe" : "ジンバブエ", + "Background blur" : "背景をぼかす", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Webサーバーは、`.wasm`ファイルを配信するように適切に設定されていません。これは通常、Nginx設定に問題があります。背景のぼかしを行うためには、`.wasm`ファイルを配信できるように調整する必要があります。 Nginxの設定をドキュメントの推奨構成と比べてください。", + "Federation" : "連携", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Talk連携を有効にする場合は、\"memcache.locking\"の構成が必須です。", + "High-performance backend" : "高性能バックエンド", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "高性能バックエンドが構成されていません - 高性能バックエンドなしでNextcloud Talkを実行すると、非常に小規模な通話 (最大2~3人の参加者)でのみ利用できます。複数の参加者との通話がシームレスに機能するようにするためには高性能バックエンドを設定してください。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高パフォーマンス バックエンドの「conversation_cluster」モードの実行は非推奨となり、次のバージョンではサポートされなくなります。現在、高性能バックエンドはクラスタリングをサポートしているため、それを代わりに使用してください。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "複数の高パフォーマンス バックエンドの定義は非推奨となり、次のバージョンではサポートされなくなります。代わりに、ロードバランサーをクラスター化されたシグナリング サーバーと一緒にセットアップし、Talk設定で構成する必要があります。", + "Error: Cannot connect to server" : "エラー:サーバーに接続できません", + "Error: Server did not respond with proper JSON" : "エラー:サーバーは適切なJSONで応答しませんでした", + "Error: Certificate expired" : "エラー: 証明書の有効期限が切れています", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "エラー: Nextcloudサーバーと高性能バックエンドサーバーのシステム時間が同期していません。両方のサーバーがタイムサーバーに接続されていることを確認するか、手動で時刻を同期してください。", + "Could not get version" : "バージョンを取得できません", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "エラー: 実行中のバージョン: {version}; このバージョンのTalkと互換性を持たせるには、サーバーの更新が必要です", + "Error: Server responded with: {error}" : "エラー:サーバーは次の応答を返しました: {error}", + "Error: Unknown error occurred" : "エラー:不明なエラーが発生しました", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告: 実行中のバージョン: {version}; サーバーはこのTalkバージョンの全ての機能をサポートしていません。欠落している機能: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "高性能バックエンドでNextcloud Talkを実行する場合は、メモリキャッシュを構成することを強くお勧めします。", + "Recording backend" : "レコーディングバックエンド", + "SIP configuration" : "SIP構成", + "Invalid date, date format must be YYYY-MM-DD" : "日付が無効です。日付形式はYYYY-MM-DDである必要があります", + "Conversation not found" : "会話が見つかりません", + "Path is already shared with this conversation" : "パスはすでにこの会話で共有されています", + "Chat, video & audio-conferencing using WebRTC" : "WebRTCを使用したチャット、ビデオ、および音声会議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC を使用したチャット、ビデオ、音声会議\n\n* 💬 **チャット** Nextcloud Talkには簡単なテキスト チャットが付属しており、Nextcloud Filesアプリまたはローカル デバイスからファイルを共有またはアップロードし、他の参加者に通知することができます。\n* 👥 **プライベート、グループ、パブリック、およびパスワードで保護された通話!** 特定の誰かやグループ全体を招待したり、公開リンクの送信により通話へ招待します。\n* 🌐 **フェデレーション チャット** 他のNextcloudサーバー上のユーザーとチャットできます。\n* 💻 **画面共有!** 通話の参加者に画面を共有します。\n* 🚀 **ファイル、カレンダー、ユーザー ステータス、ダッシュボード、フロー、マップ、スマート ピッカー、連絡先、デッキなどの他のNextcloudアプリと統合** \n* 🌉 **他のチャット ソリューションと同期** [Matterbridge](https://github.com/42wim/matterbridge/) がTalkに統合されているため、他の多くのチャット ソリューションをNextcloud Talkに簡単に同期したり、その逆を行うことができます。", + "Leave call" : "通話終了", + "Navigating away from the page will leave the call in {conversation}" : "ページから離れると {conversation} の中に呼び出しが残ります。", + "Stay in call" : "通話を続ける", + "Discuss this file" : "このファイルについて話し合う", + "Share this file with others to discuss it" : "このファイルを他の人と共有して話し合う", + "Share this file" : "このファイルを共有する", + "Join conversation" : "会話に参加", + "This conversation is password-protected." : "この会話はパスワードで保護されています。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "あなたのIPから複数の無効なパスワード試行が検出されました。したがって、次の試行は最大30秒間抑制されます。", + "The password is wrong. Try again." : "パスワードが違います。再入力してください", + "Password" : "パスワード", + "Submit" : "送信", + "Error requesting the password." : "パスワードのリクエスト中にエラーが発生しました。", + "Request password" : "パスワードを入力", + "This conversation has ended" : "会話は終了しました", + "Error occurred when joining the conversation" : "会話に参加する際にエラーが発生しました", + "Close Talk sidebar" : "Talk サイドバーを閉じる", + "Open Talk sidebar" : "Talk サイドバーを開く", + "Everyone" : "すべてのユーザー", + "Users and moderators" : "ユーザーとモデレーター", + "Moderators only" : "モデレータ専用", + "Disable calls" : "通話を無効にする", + "Save changes" : "変更を保存", + "Saving …" : "保存中...", + "Saved!" : "保存完了!", + "Limit to groups" : "グループに制限する", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "最低1つグループが選択されている場合、グループにリストされたユーザーのみが会話に参加できます。", + "Guests can still join public conversations." : "ゲストはまだ公開会話に参加できます。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "トークが使えなくなったユーザーも、以前の会話の参加者としてリストアップされ、チャットメッセージも残されています。", + "Limit using Talk" : "トークの使用を制限", + "Limit creating a public and group conversation" : "公開およびグループ会話の作成を制限する", + "Limit creating conversations" : "会話の作成を制限する", + "Limit starting a call" : "通話の開始を制限する", + "Limit starting calls" : "通話の開始を制限する", + "When a call has started, everyone with access to the conversation can join the call." : "通話が開始されると、会話にアクセスできる全員が通話に参加できます。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "このサーバーには次のボットがインストールされています。ドキュメントには、{linkstart1}独自のボットを作成する方法{linkend}や、サーバーで有効にする{linkstart2}ボットのリスト{linkend}の詳細が見つかります。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "このサーバーにはボットがインストールされていません。ドキュメントには、{linkstart1}独自のボットを作成する方法{linkend}や、サーバーで有効にする{linkstart2}ボットのリスト{linkend}の詳細が見つかります。", + "Description is not provided" : "概要は提供されていません", + "Locked for moderators" : "モデレーターのためにロックされた", + "Enabled" : "有効", + "Disabled" : "無効", + "Bots settings" : "ボットの設定", + "State" : "状態", + "Name" : "名前", + "Last error" : "最後のエラー", + "Total errors count" : "エラーの総数", + "Find more bots" : "他のボットを探す", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "信頼できるサーバーは、{linkstart}共有設定ページ{linkend}で設定することができます。", + "Beta" : "ベータ", + "Enable Federation in Talk app" : "アプリ内でTalkの連携を有効化してください。", + "Permissions" : "アクセス権限", + "Allow users to be invited to federated conversations" : "ユーザーを招待してフェデレーション会話を許可する", + "Only allow to federate with trusted servers" : "信頼できるサーバーにのみ連携を許可する", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "最低1つグループが選択されている場合、グループにリストされたユーザーのみが会話にフェデレーテッドユーザーを招待できます。", + "Select groups …" : "グループを選択 ...", + "All messages" : "全てのメッセージ", + "@-mentions only" : "@で直接会話", + "Off" : "オフ", + "General settings" : "一般設定", + "Default notification settings" : "デフォルトの通知設定", + "Default group notification" : "デフォルトのグループ通知", + "Default group notification for new groups" : "新しいグループのデフォルトのグループ通知", + "Integration into other apps" : "他のアプリへの統合", + "Allow conversations on files" : "ファイルでの会話を許可する", + "Allow conversations on public shares for files" : "公開共有ファイルでの会話を許可する", + "Enable encryption" : "暗号化を有効にする", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "構成されたSIPブリッジでのエンドツーエンドの暗号化通話には、新しいバージョンの高性能バックエンドとSIPブリッジが必要です。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "上のボタンをクリックすると、フォーム内の情報がStruktur AGのサーバーに送信されます。詳細については、{linkstart}spreed.eu{linkend}をご覧ください。", + "Pending" : "保留中", + "Error" : "エラー", + "Blocked" : "ブロックされた", + "Active" : "アクティブ化", + "Expired" : "有効期限切れ", + "Never" : "なし", + "The trial could not be requested. Please try again later." : "トライアルを要求できませんでした。後ほどもう一度お試しください。", + "The account could not be deleted. Please try again later." : "アカウントを削除できませんでした。後ほどもう一度お試しください。", + "Hosted High-performance backend" : "ホストされた高性能バックエンド", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "当社のパートナーであるStruktur AGは、ホストされたシグナリングサーバーをリクエストできるサービスを提供しています。以下のフォームに必要事項を入力するだけで、Nextcloudがリクエストを行います。サーバーの設定が完了すると、認証情報が自動的に入力されます。これにより、既存のシグナリングサーバーの設定が上書きされます。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "高性能バックエンド アカウントにSTUNおよび/またはTURN機能が含まれている場合、設定はそれに応じて更新されます。", + "URL of this Nextcloud instance" : "このNextcloudインスタンスのURL", + "Full name of the user requesting the trial" : "トライアルを要求しているユーザーのフルネーム", + "Email of the user" : "ユーザーのメールアドレス", + "Language" : "言語", + "Country" : "国名", + "Request signaling server trial" : "シグナリングサーバーへのトライアル要求", + "You can see the current status of your hosted signaling server in the following table." : "次の表で、ホストされているシグナリング サーバーの現在の状態を確認できます。", + "Status" : "ステータス", + "Created at" : "作成:", + "Expires at" : "有効期限:", + "Limits" : "制限", + "Yes" : "はい", + "No" : "いいえ", + "Delete the signaling server account" : "シグナリングサーバーのアカウントを削除", + "_%n user_::_%n users_" : ["%nユーザー"], + "Installed version: {version}" : "インストールされているバージョン: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridgeをインストールすることで、Nextcloud Talkをほかのサービスにリンクできます。詳細は、{linkstart1}GitHub ページ{linkend}をご確認ください。アプリのダウンロードとインストールには時間がかかる場合があります。タイムアウトした場合は、{linkstart2}Nextcloud アプリストア{linkend}から手動でインストールしてください。", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridgeバイナリが見つからなかったか、実行できませんでした。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "設定を使用して、Matterbridgeバイナリへのパスを手動で設定することもできます。詳細については、{linkstart} Matterbridge統合ドキュメント{linkend}を確認してください。", + "Downloading …" : "ダウンロード中…", + "Install Talk Matterbridge" : "Talk Matterbridgeをインストールします", + "An error occurred while installing the Matterbridge app" : "Matterbridgeアプリのインストール中にエラーが発生しました", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridgeのインストール中にエラーが発生しました。手動でインストールしてください。", + "Failed to execute Matterbridge binary." : "Matterbridgeバイナリを実行できませんでした。", + "Matterbridge integration" : "Matterbridge連携", + "Enable Matterbridge integration" : "Matterbridge連携を有効にする", + "Status: Checking connection" : "ステータス:接続を確認しています", + "OK: Running version: {version}" : "OK: 実行中のバージョン: {version}", + "Error: Server seems to be a Signaling server" : "エラー: サーバーはシグナリングサーバーのようです", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "エラー: Nextcloud サーバーと録画バックエンドサーバーのシステム時刻が同期していません。両方のサーバーがタイムサーバーに接続されていることを確認するか、手動で時刻を同期してください。", + "Recording backend URL" : "レコーディングバックエンドURL", + "Validate SSL certificate" : "SSL証明書を検証する", + "Delete this server" : "このサーバーを削除", + "Test this server" : "このサーバーをテスト", + "Disabled for all calls" : "全ての通話で無効化されました", + "Enabled for all calls" : "全ての通話で有効化されました", + "Configurable on conversation level by moderators" : "モデレーターにより会話レベルで設定可能", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHPの設定 \"upload_max_filesize\" または \"post_max_size\" では、{maxUpload} までのファイルのアップロードが許可されます。", + "Recording backend settings saved" : "レコーディングバックエンドの設定が保存されました", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "会話モデレーターは、会話レベルで同意を有効にすることができます。この会話に参加する前に、各参加者は録音されることへの同意が必要となります。", + "The consent to be recorded will be required for each participant before joining every call." : "毎回通話に参加する前に、録音されることへの同意が各参加者は必要となります。", + "The consent to be recorded is not required." : "録画されることへの同意は必要ありません。", + "Recording backend configuration is only possible with a High-performance backend." : "録画バックエンドは、高パフォーマンスのバックエンドでのみ可能です。", + "Add a new recording backend server" : "新しいレコーディングバックエンドサーバーを追加する", + "Shared secret" : "共有秘密鍵", + "Recording consent" : "レコーディングの同意", + "SIP configuration saved!" : "SIP 設定を保存しました!", + "SIP configuration is only possible with a High-performance backend." : "SIP構成は、高性能バックエンドでのみ可能です。", + "Enable SIP Dial-out option" : "SIPダイヤル発信オプションを有効にする", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "SIPダイヤル発信機能をサポートするように、シグナリングサーバーを更新する必要があります。", + "Restrict SIP configuration" : "SIP構成を制限する", + "Enable SIP configuration" : "SIP構成を有効にする", + "Only users of the following groups can enable SIP in conversations they moderate" : "次のグループのユーザーのみが、モデレートする会話でSIPを有効にできます", + "Phone number (Country)" : "電話番号 (国番号)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "この情報は招待メールで送信されるだけでなく、サイドバーにすべての参加者に表示されます。", + "High-performance backend URL" : "高性能バックエンドURL", + "High-performance backend settings saved" : "ハイパフォーマンスバックエンドの設定が保存されました", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "高性能バックエンドを使用しない3人以上の参加者との通話では、参加者に接続の問題が発生し、参加デバイスに高負荷がかかる可能性が高いことに注意してください。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "複数の参加者との通話がシームレスに機能するようにするには高性能バックエンドをインストールしてください。", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "複数参加者の通話や会話には高性能バックエンドが必要です。バックエンドがない場合、参加者全員が他の参加者全員に対して一対一で動画データを送信する必要があり、接続問題や参加デバイスの高負荷を引き起こす可能性が非常に高くなります。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Talkを高性能バックエンドで使用する場合は、分散キャッシュをセットアップすることを強くお勧めします。", + "Add High-performance backend server" : "高性能バックエンドを追加", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "サーバーアドレスは無効です", + "STUN settings saved" : "STUN 設定を保存しました", + "STUN servers" : "STUNサーバー", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUNサーバーは、ルーターを介した参加者のパブリックIPアドレスを決定するために使用されます。", + "Add a new STUN server" : "新しいSTUN サーバーを追加", + "{schema} scheme must be used with a domain" : "{schema} スキームはドメインで使用する必要があります", + "{option1} and {option2}" : "{option1} と {option2}", + "{option} only" : "{option} のみ", + "OK: Successful ICE candidates returned by the TURN server" : "成功: TURNサーバからICE候補への返答がありました", + "Error: No working ICE candidates returned by the TURN server" : "エラー: TURNサーバからICE候補への返答がありません", + "Testing whether the TURN server returns ICE candidates" : "TURNサーバーがICE候補を返すかどうかのテスト", + "TURN server schemes" : "TURNサーバースキーム", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURNサーバーシークレット", + "TURN server protocols" : "TURNサーバープロトコル", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURNサーバーは、ファイアウォールの内側で参加者からのトラフィックをプロキシするために使用されます。個々の参加者が他の参加者に接続できない場合は、TURNサーバーが必要になる可能性があります。セットアップ手順については、{linkstart}このドキュメント{linkend}を参照してください。", + "TURN settings saved" : "TURN 設定を保存しました", + "TURN servers" : "TURNサーバー", + "Add a new TURN server" : "新しいTURN サーバーを追加", + "Failed" : "失敗", + "OK" : "OK", + "Checking …" : "チェック中…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗: WebAssemblyが無効になっているか、このブラウザーではサポートされていません。チェックを実施するには、WebAssemblyを有効にするか、サポートしているブラウザーをご利用ください。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗: \".wasm\" と \".tflite\" ファイルは、Webブラウザーにより正しく返却されませんでした。 Talkに関するドキュメントの\"システム要件\"をご確認ください。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" と \".tflite\" ファイルがWebブラウザーにより正しく返却されました。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP と Apache の設定に互換性がないようです。PHP は MPM_PREFORK モジュールでのみ使用可能であり、PHP-FPM は MPM_EVENT モジュールでのみ使用可能であることに注意してください。", + "Web server setup checks" : "Webサーバーセットアップチェック", + "Files required for virtual background can be loaded" : "バーチャル背景に必要なファイルを読み込むことができます", + "Federated user" : "フェデレーションユーザー", + "Assign participants to rooms" : "参加者をルームに割り当てる", + "Configure breakout rooms" : "子会議室の設定", + "Number of breakout rooms" : "子会議室数", + "You can create from 1 to 20 breakout rooms." : "1 から 20 の子会議室を作成することができます。", + "Assignment method" : "割り当て方法", + "Automatically assign participants" : "参加者を自動的に割り当てる", + "Manually assign participants" : "参加者を手動で割り当てる", + "Allow participants to choose" : "参加者に選択することを許可する", + "Create rooms" : "部屋を作成する", + "Confirm" : "承認", + "Create breakout rooms" : "子会議室を作成する", + "Reset" : "リセット", + "Delete breakout rooms" : "子会議室を削除する", + "Room {roomNumber}" : "ルーム {roomNumber}", + "Current breakout rooms and settings will be lost" : "現在の子会議室と設定は失われます", + "Cancel" : "キャンセル", + "Unassigned participants" : "参加者未割り当て", + "Back" : "戻る", + "Assign" : "割り当てる", + "Add participant \"{user}\"" : "参加者 \"{user}\" を追加", + "Now" : "現在", + "Meeting created" : "会議を作成しました", + "Upcoming meetings" : "今後の会議", + "Loading …" : "読み込み中…", + "No upcoming meetings" : "今後の会議はありません", + "Schedule a meeting" : "会議を予約する", + "Meeting title" : "会議名", + "From" : "差出人", + "To" : "宛先", + "Calendar" : "カレンダー", + "Attendees" : "参加者", + "No other participants to send invitations to." : "他に招待状を送信できる参加者はいません。", + "Save" : "保存", + "Search participants" : "参加者を探す", + "No results" : "該当なし", + "Done" : "完了", + "Raise hand" : "挙手 (r)", + "Raise hand (R)" : "挙手 (R)", + "Lower hand" : "手を下げる (r)", + "Lower hand (R)" : "手を下げる (R)", + "Exit full screen (F)" : "全画面終了 (F)", + "Full screen (F)" : "全画面 (F)", + "Speaker view" : "スピーカービュー", + "Grid view" : "グリッド表示", + "This conversation is read-only" : "この会話は読み取り専用です", + "Reload" : "再読み込み", + "{nickName} raised their hand." : "{nickName} が挙手しました", + "A participant raised their hand." : "参加者が挙手しました", + "Collapse stripe" : "スレッドを折りたたむ", + "Expand stripe" : "スレッドを展開する", + "Previous page of videos" : "動画の前ページ", + "Next page of videos" : "動画の次ページ", + "Connecting …" : "接続中 …", + "Calling …" : "接続中...", + "Waiting for {user} to join the call" : "{user} が通話に参加するのを待っています", + "Waiting for others to join the call …" : "参加を待っています …", + "You can invite others in the participant tab of the sidebar" : "サイドバーの参加者タブで他のユーザーを招待できます", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "サイドバーの参加者タブかこのリンクを共有して他のユーザーを招待できます。", + "Share this link to invite others!" : "このリンクを共有して他の人を招待します。", + "Copy link" : "リンクをコピー", + "You are not allowed to enable audio" : "音声を有効にできません", + "No audio. Click to select device" : "音声がありません。デバイスを選択するにはクリックしてください。", + "Mute audio" : "音声なし", + "Mute audio (M)" : "音声ミュート (m)", + "Unmute audio" : "ミュート解除", + "Unmute audio (M)" : "音声ミュート解除 (m)", + "None" : "なし", + "Check devices" : "デバイスを確認", + "Access to camera was denied" : "カメラへのアクセスが拒否されました", + "Error while accessing camera: It is likely in use by another program" : "カメラへのアクセス時にエラー: その他のアプリケーションが利用中の可能性があります", + "Error while accessing camera" : "カメラにアクセス時にエラーが発生", + "You have been muted by a moderator" : "あなたはモデレーターによってミュートされています", + "You are not allowed to enable video" : "ビデオを有効にできません", + "No video. Click to select device" : "映像がありません。デバイスを選択するにはクリックしてください。", + "Disable video" : "映像なし", + "Disable video (V)" : "ビデオなし(V)", + "Enable video" : "動画を有効にする", + "Enable video (V)" : "ビデオあり(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にする - 初めてビデオを有効にする場合、接続が一時的に中断されます", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にする (V) - ビデオを最初に有効にすると、接続が一時的に中断されます。", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "ビデオを有効にします。初回ビデオを有効時、接続が一時的に中断されます。", + "Show presenter" : "プレゼンターを表示する", + "You" : "あなた", + "Mute" : "ミュート", + "Muted" : "ミュート", + "Show screen" : "画面を表示", + "Stop following" : "フォローの停止", + "Connection could not be established …" : "接続を確立できませんでした...", + "Connection was lost and could not be re-established …" : "接続が失われ、接続を再確立できませんでした...", + "Connection could not be established. Trying again …" : "接続が確立できませんでした。再試行しています...", + "Connection lost. Trying to reconnect …" : "接続が失われました。再接続しています...", + "Connection problems …" : "接続で問題が発生しました...", + "Collapse" : "折りたたむ", + "Expand" : "展開", + "You need to be logged in to upload files" : "ファイルをアップロードするにはログインが必要です", + "Drop your files to upload" : "アップロードするファイルをドロップしてください", + "Conversation messages" : "会話メッセージ", + "Scroll to bottom" : "下にスクロール", + "Post message" : "メッセージを送信", + "Federated conversation" : "フェデレート会話", + "Public conversation" : "公開会話", + "Favorite" : "お気に入り", + "Banned users" : "禁止されたユーザー", + "Date:" : "日時:", + "Note:" : "注意:", + "Hide details" : "詳細を隠す", + "Show details" : "詳細を見る", + "Error while updating conversation name" : "会話名の変更中にエラーが発生しました", + "Error while updating conversation description" : "会話の詳細の更新中にエラーが発生しました", + "Enter a name for this conversation" : "この会話名を設定してください。", + "Edit conversation name" : "会話名を変更", + "Edit conversation description" : "会話の詳細を編集する", + "Enter a description for this conversation" : "この会話の説明を入力", + "Picture" : "写真", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "この会話では以下のボットを有効にすることができます。このサーバーにさらにボットをインストールするには、管理者にお問い合わせください。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "このサーバーにはボットがインストールされていません。このサーバーにボットをインストールするには、管理者にお問い合わせください。", + "Disable" : "無効", + "Enable" : "有効にする", + "Breakout rooms" : "ブレークアウト・ルーム(子会議室)", + "Manage breakout rooms" : "子会議室を管理する", + "Set up breakout rooms for this conversation" : "この会話の子会議室を設定する", + "Please select a valid PNG or JPG file" : "PNG もしくは、JPGファイルを選択してください", + "Choose your conversation picture" : "あなたの会話画像を選択する", + "Choose" : "選択", + "Error setting conversation picture" : "会話画像設定エラー", + "Could not set the conversation picture: {error}" : "会話画像を設定できませんでした: {error}", + "Error cropping conversation picture" : "会話画像の切り抜きエラー", + "Error removing conversation picture" : "会話画像の削除エラー", + "Set emoji as conversation picture" : "絵文字を会話画像に設定する", + "Set background color for conversation picture" : "会話画像の背景色を設定する", + "Upload conversation picture" : "会話画像をアップロードする", + "Choose conversation picture from files" : "このチャットの画像をファイルから選択", + "Remove conversation picture" : "このチャットの画像を削除", + "The file must be a PNG or JPG" : "ファイルは PNG または JPG でなければなりません", + "Set picture" : "画像を設定", + "Default permissions modified for {conversationName}" : "{conversationName} の初期設定の権限は変更されています", + "Could not modify default permissions for {conversationName}" : "{conversationName}のデフォルト権限を変更できません", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "この会話での初期設定のパーミッションを編集できます。これらの設定はモデレーターには影響しません。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "このセクションでパーミッションが変更されるたびに、以前に個々の参加者に割り当てられたカスタムパーミッションは失われます。", + "All permissions" : "すべての権限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "参加者は、通話の開始、参加、音声とビデオの有効、画面共有の権限を持っています。", + "Restricted" : "制限付き", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "参加者は、通話の参加は可能ですが、音声、ビデオ、画面共有は、モデレーターが個別に権限を付与するまで無効になっています。", + "Advanced permissions" : "詳細な権限", + "Edit permissions" : "権限を編集", + "Conversation settings" : "会話設定", + "Basic Info" : "基本情報", + "Personal" : "個人", + "Moderation" : "モデレーション", + "Setup overview" : "セットアップの概要", + "Live transcription" : "音声の文字起こし", + "Breakout Rooms" : "ブレークアウト・ルーム(子会議室)", + "Matterbridge" : "Matterbridge", + "Bots" : "ボット", + "Danger zone" : "危険区域", + "Archive conversation" : "会話をアーカイブ", + "You can archive this conversation instead." : "代わりにこの会話をアーカイブすることもできます。", + "Leave conversation" : "会話を離れる", + "You need to promote a new moderator before you can leave the conversation" : "会話から離れる前に、新しいモデレーターを昇格させる必要があります", + "Delete conversation" : "会話を削除", + "Do you really want to delete \"{displayName}\"?" : "本当に「{displayName}」を削除しますか?", + "Error while deleting conversation" : "会話の削除中にエラーが発生しました", + "Delete all chat messages" : "チャットメッセージをすべて削除", + "Do you really want to delete all messages in \"{displayName}\"?" : "\"{displayName}\" のすべてのメッセージを削除しても本当によろしいですか?", + "Error while clearing chat history" : "チャット履歴のクリア中にエラーが発生しました", + "Be careful, these actions cannot be undone." : "これらのアクションは元に戻せないので注意してください。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "会話から退出したら、クローズな会話に再び参加するには、招待が必要です。オープンな会話はいつでも再参加できます。", + "Permanently delete this conversation." : "この会話を完全に削除する", + "Delete chat messages" : "メッセージを削除する", + "Permanently delete all the messages in this conversation." : "この会話のすべてのメッセージを完全に削除する", + "_%n hour_::_%n hours_" : ["%n時間"], + "_%n day_::_%n days_" : ["%n日"], + "_%n week_::_%n weeks_" : ["%n週間"], + "Custom expiration time" : "カスタム有効期限", + "Message expiration disabled" : "メッセージの有効期限は無効", + "Message expiration set: {duration}" : "メッセージの有効期限を設定します: {duration}", + "Error when trying to set message expiration" : "メッセージの有効期限を設定しようとした際のエラー", + "Message expiration" : "メッセージの有効期限", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "チャットメッセージは、一定時間経過後に期限切れにすることができます。注意: チャットで共有されたファイルは、ファイル所有者は削除されませんが、会話では共有されなくなります。", + "Set message expiration" : "メッセージの有効期限を設定する", + "Current message expiration" : "現在のメッセージの有効期限", + "Password copied to clipboard" : "パスワードをクリップボードにコピーしました", + "Password could not be copied" : "パスワードをコピーできませんでした", + "Guest access" : "ゲスト参加", + "Allow guests to join this conversation via link" : "リンク経由でのこの会話へのゲスト参加を許可", + "Password protection" : "パスワード保護", + "Set a password" : "パスワードを設定", + "Change password" : "パスワードを変更", + "Enter new password" : "新しいパスワードを入力", + "Save password" : "パスードを保存", + "Copy password" : "パスワードをコピー", + "Guests are allowed to join this conversation via link" : "ゲストはリンクを介してこの会話に参加することが許可されています", + "Guests are not allowed to join this conversation" : "ゲストはこの会話に参加することは許可されていません", + "Resend invitations" : "招待を再送", + "This conversation is open to both registered users and users created with the Guests app" : "この会話は、登録ユーザーとGuestsアプリで作成されたユーザーの両方に開かれています", + "This conversation is open to registered users" : "この会話は登録ユーザーに開かれています", + "This conversation is limited to the current participants" : "この会話は現在の参加者に制限されています", + "You opened the conversation to both registered users and users created with the Guests app" : "登録ユーザーとGuestsアプリで作成したユーザーの両方に会話を公開しました", + "Error occurred when opening or limiting the conversation" : "会話を開いたり制限したりするときにエラーが発生しました", + "Open conversation to registered users, showing it in search results" : "登録ユーザーに会話を公開、検索結果に表示します", + "Also open to users created with the Guests app" : "ゲストアプリで作成されたユーザーも開くことができます", + "Open conversation" : "オープンな会話", + "Set language spoken in calls" : "通話時の言語を設定する", + "Languages could not be loaded" : "言語を読み込めませんでした", + "Loading languages …" : "言語を読み込んでいます ...", + "Invalid language" : "無効な言語", + "Default language (English)" : "デフォルト言語(英語)", + "Live transcription language set: {languageName}" : "ライブトランスクリプション言語セット:{languageName}", + "Start time: {date}" : "開始時刻: {date}", + "Start time has been updated" : "開始時間が更新されました", + "Error occurred while updating start time" : "開始時刻の更新中にエラーが発生しました", + "Enabling the lobby will remove non-moderators from the ongoing call." : "ロビーを有効にすると、進行中の通話から非モデレーターが削除されます。", + "Enable lobby, restricting the conversation to moderators" : "ロビーを有効にし、会話をモデレーターに制限します", + "Meeting start time" : "会議の開始時間", + "Start time (optional)" : "開始時間(オプション)", + "Import email participants" : "メール参加者をインポート", + "You can import a list of email participants from a CSV file." : "CSVファイルで参加者のメールアドレスリストをインポートできます。", + "Poll drafts" : "アンケートの草稿", + "Browse poll drafts" : "アンケート草稿を閲覧", + "Error occurred when locking the conversation" : "会話のロック中にエラーが発生しました", + "Error occurred when unlocking the conversation" : "会話のロックを解除するときにエラーが発生しました", + "Lock conversation" : "会話をロック", + "This will also terminate the ongoing call." : "これにより、進行中の通話も終了します。", + "Lock the conversation to prevent anyone to post messages or start calls" : "会話をロックして、誰かがメッセージを投稿したり通話を開始したりできないようにします。", + "Edit" : "編集", + "More information" : "詳細情報", + "Delete" : "削除", + "Add new bridged channel to current conversation" : "現在の会話に新しいブリッジチャネルを追加する", + "unknown state" : "状態が不明", + "running" : "実行中", + "not running, check Matterbridge log" : "未稼働です。Matterbridgeログを確認してください", + "not running" : "未稼働", + "Bridge saved" : "ブリッジが保存されました", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridgeを使用すると、さまざまなインスタントメッセージングシステムからチャネルを橋渡しできます。", + "More info on Matterbridge" : "Matterbridgeの詳細", + "Messaging systems" : "メッセージングシステム", + "Enable bridge" : "ブリッジを有効にする", + "Show Matterbridge log" : "Matterbridgeログを表示する", + "Log content" : "ログ情報", + "Only moderators are allowed to mention @all" : "@allにメンションできるのはモデレーターのみです", + "All participants are allowed to mention @all" : "すべての参加者が@allにメンションできます。", + "Participants are now allowed to mention @all." : "参加者は@allにメンションできるようになりました。", + "Mentioning @all has been limited to moderators." : "@allのメンションはモデレーターのみに限定されています。", + "Allow participants to mention @all" : "参加者が@allにメンションできるようにします", + "Mention permissions" : "メンション権限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "この会話で呼び出し時に通知する", + "Important conversation" : "重要な会議", + "Sensitive conversation" : "プライベートな会話", + "Message preview will be disabled in conversation list and notifications" : "会話リストと通知ではメッセージのプレビューが無効になります", + "Recording consent is required for calls in this conversation" : "レコーディングの同意は、この会話で必要です", + "Recording consent is not required for calls in this conversation" : "レコーディングの同意は、この会話で必要ではありません", + "Recording consent requirement was updated" : "レコーディングの同意要件は更新されました", + "Error occurred while updating recording consent" : "レコーディングの同意を更新する際にエラーが発生しました", + "Recording Consent" : "レコーディングの同意", + "Recording consent cannot be changed once a call or breakout session has started." : "レコーディングの同意は、通話またはブレイクアウトセッションが開始した後に変更することはできません。", + "Require recording consent before joining call in this conversation" : "この会話に参加する前に、レコーディングの同意が必要です。", + "Recording consent is required for all calls" : "全ての通話にはレコーディングの同意が必要です", + "SIP dial-in is now possible without PIN requirement" : "SIPダイアルインが、PINコードなしで可能となります", + "SIP dial-in is now enabled" : "SIPダイヤルインが有効になりました", + "SIP dial-in is now disabled" : "SIPダイヤルインが無効になりました", + "Error occurred when enabling SIP dial-in" : "SIPダイヤルインを有効にするときにエラーが発生しました", + "Error occurred when disabling SIP dial-in" : "SIPダイヤルインを無効にするときにエラーが発生しました", + "Phone and SIP dial-in" : "電話とSIP 着信", + "Enable phone and SIP dial-in" : "電話とSIP 着信を有効にする", + "Allow to dial-in without a PIN" : "PINコードなしでダイヤルインを許可する", + "Ongoing" : "進行中", + "View attachment" : "添付ファイルを見る", + "Join" : "参加", + "View conversation" : "会話を表示", + "View event on Calendar" : "カレンダーでイベントを表示", + "Error while creating the conversation" : "会話の作成中にエラーが発生しました", + "Hello, {displayName}" : "こんにちは、{displayName} さん", + "Start meeting now" : "今すぐ会議を始める", + "Give your meeting a title" : "会議にタイトルをつける", + "Create and copy link" : "リンクを作成してコピー", + "Create a new conversation" : "新しい会話を作成する", + "Join open conversations" : "オープンな会話に参加する", + "Call a phone number" : "電話番号にかける", + "Scroll backward" : "後方にスクロール", + "Scroll forward" : "前方にスクロール", + "Schedule meetings" : "会議を予約", + "You don't have any upcoming meetings" : "今後の会議はありません", + "Open calendar" : "カレンダーを開く", + "Unread mentions" : "未読の返信", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "あなたがメンションされたメッセージはここに表示されます。@に続けて相手の名前を入力すると、メンションできます。", + "Upcoming reminders" : "今後のリマインダー", + "Message reminders" : "メッセージのリマインダー", + "Set a reminder on a message to be notified" : "チャットメッセージにリマインダーを設定すると後で再度通知されるようにできるようになりました", + "Start a group conversation" : "グループ会話を始める", + "Create conversation" : "会話を作成", + "Enter your name" : "あなたの名前を入力", + "Submit name and join" : "名前を送信して参加する", + "Do you already have an account?" : "すでにアカウントをお持ちですか?", + "Log in" : "ログイン", + "Uploaded file is verified" : "アップロードされたファイルは検証済みです", + "An error occurred while calling a phone number" : "電話番号への発信中にエラーが発生しました", + "Phone number could not be called: {error}" : "電話番号に発信できませんでした: {error}", + "Phone number could not be called" : "電話番号に発信できませんでした", + "Search participants or phone numbers" : "参加者または電話番号の検索", + "Creating the conversation …" : "会話を作成しています...", + "Mark as read" : "既読にする", + "Mark as unread" : "未読にする", + "Remove from favorites" : "お気に入りから削除", + "Add to favorites" : "お気に入りに追加", + "Ignore \"Do not disturb\"" : "「邪魔しないでください」を無視する", + "You need to promote a new moderator before you can leave the conversation." : "会話を終了する前に、新しいモデレータを昇格する必要があります。", + "Conversation actions" : "会話アクション", + "Notify about calls" : "着信について通知", + "Hide message text" : "メッセージテキストを非表示", + "Pending invitations" : "保留中の招待", + "From {user} at {remoteServer}" : "{remoteServer} からの {user} ", + "Decline invitation" : "招待を拒否", + "Accept invitation" : "招待を承諾", + "No pending invitations" : "保留中の招待はありません", + "Home" : "ホーム", + "Unread" : "未読", + "Alphabetically" : "アルファベット順", + "No matches found" : "一致するものが見つかりません。", + "No conversations found" : "会話が見つかりません", + "You have no unread mentions." : "未読のメンションはありません。", + "You have no unread messages." : "未読のメッセージはありません。", + "An error occurred while performing the search" : "検索中にエラーが発生しました", + "Conversation list" : "会話リスト", + "Unread messages" : "未読のメッセージ", + "Clear filters" : "フィルターをクリア", + "New personal note" : "新しい個人的なメモ", + "Threads" : "スレッド", + "Clear filter" : "フィルターをクリア", + "App settings" : "アプリ設定", + "Users" : "ユーザー", + "Groups" : "グループ", + "Teams" : "チーム", + "Other sources" : "他のソース", + "Open conversations" : "オープンな会話", + "No search results" : "検索結果なし", + "Users and groups" : "ユーザーとグループ", + "The meeting will start soon" : "会議はまもなく始まります", + "This meeting is scheduled for {startTime}" : "この会議の予定は{startTime}です", + "You are currently waiting in the lobby" : "現在ロビーで待機中", + "Select microphone" : "マイクを選択", + "No microphone available" : "利用可能なマイクがありません", + "Select speaker" : "発言者を指定", + "No speaker available" : "指定できる発言者がいません", + "Select camera" : "カメラを選択", + "No camera available" : "利用可能なカメラがありません", + "Select a device" : "デバイスを選択する", + "Test speakers" : "発言者をテスト", + "Test" : "テスト", + "Devices" : "端末", + "Backgrounds" : "背景", + "No audio" : "音声なし", + "No camera" : "カメラがありません", + "Display video as you will see it (mirrored)" : "鏡像表示でプレビューを表示", + "Calls are not supported in your browser" : "お使いのブラウザーは通話に対応していません", + "Access to microphone is only possible with HTTPS" : "マイクへのアクセスはHTTPSでのみ可能です", + "Access to microphone was denied" : "マイクへのアクセスが拒否されました", + "Error while accessing microphone" : "マイクへのアクセス中にエラーが発生しました", + "Access to camera is only possible with HTTPS" : "カメラへのアクセスはHTTPSでのみ可能です", + "The call is being recorded." : "通話は録音されています。", + "The call might be recorded." : "通話は録音されるかもしれません。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "レコーディングには、あなたの声、カメラからのビデオ、および画面共有が含まれる場合があります。通話に参加する前に、あなたの同意が必要です。", + "Give consent to the recording of this call" : "この通話のレコーディングに同意してください", + "Start recording immediately with the call" : "通話と同時にレコーディングを開始する", + "Apply settings" : "設定を適用する", + "Select virtual office background" : "仮想オフィスの背景を選択", + "Select virtual home background" : "仮想ホームの背景を選択", + "Select virtual abstract background" : "仮想抽象背景を選択", + "Select virtual beach background" : "仮想ビーチの背景を選択", + "Select virtual park background" : "仮想公園の背景を選択", + "Select virtual theater background" : "仮想シアターの背景を選択", + "Select virtual library background" : "仮想図書館の背景を選択", + "Select virtual space station background" : "仮想宇宙ステーションの背景を選択", + "Error while uploading the file" : "ファイルのアップロード中にエラーが発生しました", + "Invalid path selected" : "無効なパスが選択されました", + "Select virtual background from file {fileName}" : "ファイル {fileName} から仮想背景を選択します", + "Blur" : "ぼかし", + "Upload" : "アップロード", + "Files" : "ファイル", + "(editing)" : "(編集)", + "(edited)" : "(編集済み)", + "The message has expired or has been deleted" : "メッセージの有効期限が切れたか、削除されました", + "Cancel quote" : "引用のキャンセル", + "24 hours" : "24時間", + "7 days" : "7日", + "Clear reminder – {timeLocale}" : "リマインダーを消去 – {timeLocale}", + "Edited by {actor}" : "編集者:{actor}", + "Message text copied to clipboard" : "メッセージテキストがクリップボードにコピーされました", + "Message text could not be copied" : "メッセージテキストはコピーできませんでした", + "Message forwarded to \"Note to self\"" : "メッセージが「自分のメモ」に転送されました", + "Error while forwarding message to \"Note to self\"" : "「自分のメモ」へメッセージ転送中にエラー", + "A reminder was successfully removed" : "リマインダーの削除に成功しました", + "Error occurred when removing a reminder" : "リマインダー削除時にエラーが発生しました", + "A reminder was successfully set at {datetime}" : "リマインダーは {datetime} に正常に設定されました", + "Error occurred when creating a reminder" : "リマインダー作成時にエラーが発生しました", + "Add a reaction to this message" : "このメッセージにリアクションを追加", + "Reply" : "返信", + "More actions" : "その他のアクション", + "Set reminder" : "リマインダーを設定", + "Reply privately" : "個人的に返信する", + "Edit message" : "メッセージを編集", + "Copy message" : "メッセージをコピー", + "Copy message link" : "メッセージリンクのコピー", + "Go to file" : "ファイルへ移動", + "Download file" : "ファイルをダウンロード", + "Forward message" : "メッセージを転送する", + "Translate" : "翻訳", + "Set custom reminder" : "カスタムリマインダーを設定する", + "Close reactions menu" : "リアクションメニューを閉じる", + "React with {emoji}" : "{emoji} で反応する", + "React with another emoji" : "他の絵文字で反応する", + "Choose a conversation to forward the selected message." : "会話を選択して、選択したメッセージを転送します。", + "Error while forwarding message" : "メッセージの転送中にエラーが発生しました", + "The message has been forwarded to {selectedConversationName}" : "メッセージは{selectedConversationName}に転送されました", + "Dismiss" : "閉じる", + "Go to conversation" : "会話へ行く", + "Detect language" : "言語を検出する", + "The message could not be translated" : "メッセージは翻訳できませんでした", + "Translation copied to clipboard" : "翻訳をクリップボードにコピーしました", + "Translation could not be copied" : "翻訳をコピーできませんでした", + "Translate message" : "メッセージの翻訳", + "Source language to translate from" : "翻訳元の言語", + "Translate from" : "翻訳元の言語", + "Target language to translate into" : "翻訳先の言語", + "Translate to" : "翻訳先", + "Translating" : "翻訳する", + "Copy translated text" : "翻訳されたテキストをコピー", + "Send now" : "今すぐ送信", + "Message read by everyone who shares their reading status" : "メッセージが読み込み状況を共有するすべてのメンバーに見られました", + "Message sent" : "メッセージ送信済み", + "Deleting message" : "メッセージを削除しています", + "Message deleted successfully" : "メッセージが正常に削除されました", + "Message could not be deleted because it is too old" : "メッセージが古すぎるため削除できませんでした", + "Only normal chat messages can be deleted" : "通常のチャットメッセージのみを削除できます", + "An error occurred while deleting the message" : "メッセージの削除中にエラーが発生しました", + "Your browser does not support playing audio files" : "このブラウザーはオーディオファイルの再生をサポートしていません。", + "Contact" : "連絡先", + "{stack} in {board}" : "{board} 内の {stack}", + "Deck Card" : "Deckカード", + "Remove {fileName}" : "{fileName} を削除", + "Open this location in OpenStreetMap" : "オープンストリートマップでこの場所を表示", + "_%n reply_::_%n replies_" : ["%n件の返信"], + "Sending message" : "メッセージ送信中", + "Failed to send the message. Click to try again" : "メッセージの送信に失敗しました。クリックして再試行してください", + "Not enough free space to upload file" : "ファイルをアップロードするのに十分な空き容量がありません", + "You cannot send messages to this conversation at the moment" : "現在、この会話にメッセージを送信することはできません", + "_%n vote_::_%n votes_" : ["%n投票数"], + "Open poll" : "公開投票", + "See results" : "結果を見る", + "Reactions" : "リアクション", + "No permission to post reactions in this conversation" : "この会話にリアクションを投稿する権限がありません", + "Show all reactions" : "全てのリアクションを表示", + "Add more reactions" : "その他のリアクションを追加", + "Show or collapse system messages" : "システムメッセージを表示または折りたたむ", + "No messages" : "メッセージはありません", + "All messages have expired or have been deleted." : "全てのメッセージは期限切れまたは削除されました。", + "Unpin" : "ピンの解除", + "Cancel search" : "検索をキャンセルする", + "Add a phone number" : "電話番号を追加する", + "All set, the conversation \"{conversationName}\" was created." : "全ての設定が完了し、会話 \"{conversationName}\" が作成されました。", + "Create a new group conversation" : "新規グループ会話の作成", + "Add participants" : "参加者を追加", + "Conversation visibility" : "会話の可視性", + "Allow guests to join via link" : "リンク経由でのゲスト参加を許可", + "Enter password" : "パスワードを入力してください", + "This conversation has been locked" : "会話はロックされています", + "No permission to post messages in this conversation" : "この会話にメッセージを投稿する権限がありません", + "Joining conversation …" : "会話に参加中…", + "Create a thread silently" : "非通知でスレッドを作成する", + "Create a thread" : "スレッドを作成する", + "Send message" : "メッセージを送信", + "Send without notification" : "通知なしで送信", + "The message could not be edited" : "メッセージを編集できませんでした", + "File to share" : "共有するファイル", + "Add emoji" : "絵文字を追加する", + "Adding a mention will only notify users who did not read the message." : "メンションを追加すると、メッセージを読んでいないユーザーにのみ通知されます。", + "Send later" : "後で送信する", + "Cancel editing" : "編集をキャンセル", + "{user} is out of office and might not respond." : "{user} は外出中で応答しない可能性があります。", + "Share from {nextcloud}" : "{nextcloud} から共有する", + "Share from Files" : "ファイルから共有", + "Share files to the conversation" : "会話でファイルを共有する", + "Upload from device" : "デバイスからアップロード", + "Create new poll" : "投票を作成", + "Smart picker" : "スマートピッカー", + "Record voice message" : "ボイスメッセージを録音", + "End recording and send" : "録音を終了して送信する", + "Dismiss recording" : "録音をキャンセルする", + "Access to the microphone was denied" : "マイクへのアクセスが拒否されました", + "Microphone either not available or disabled in settings" : "マイクが使えないか、設定で無効になっています。", + "Error while recording audio" : "音声録音中にエラーが発生しました", + "New file" : "新しいファイル", + "Blank" : "ブランク", + "Error while creating file" : "ファイルの作成中にエラーが発生しました", + "Create and share a new file" : "新しいファイルを作成し共有する", + "Name of the new file" : "新しいファイルの名前", + "Create file" : "ファイルを作成する", + "Someone is typing …" : "誰かが入力中です...", + "{user1} is typing …" : "{user1} は入力中です...", + "{user1} and {user2} are typing …" : "{user1} と {user2} が入力中です...", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2}、{user3} が入力中です...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} と他の %n 人が入力中です..."], + "Add more files" : "さらにファイルを追加する", + "Send" : "送信", + "In this conversation {user} can:" : "この会話において、 {user} さんは次のことが可能です:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} の参加者のデフォルト権限を編集", + "Start a call" : "通話を開始", + "Skip the lobby" : "ロビーをスキップ", + "Can post messages and reactions" : "メッセージとリアクションの投稿を許可", + "Enable the microphone" : "マイクを有効にする", + "Enable the camera" : "カメラを有効にする", + "Share the screen" : "画面共有", + "Update permissions" : "利用権限を更新", + "Updating permissions" : "権限を更新中", + "Create poll" : "投票を作成", + "Question" : "質問", + "Ask a question" : "質問する", + "Answers" : "回答", + "Answer {option}" : "回答 {option}", + "Delete poll option" : "投票の選択肢を削除", + "Add answer" : "回答を追加", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "複数の答え", + "You voted for this option" : "あなたはこの選択肢に投票しました", + "End poll" : "投票終了", + "Change your vote" : "投票内容を変更する", + "Results" : "結果", + "Voted participants" : "投票した参加者", + "Send a message to \"{roomName}\"" : "\"{roomName}\" にメッセージを送る", + "Hide list of participants" : "参加者のリストを非表示にする", + "Show list of participants" : "参加者のリストを表示", + "Assistance requested in {roomName}" : "{roomName} で援助を要請", + "The message was sent to \"{roomName}\"" : "メッセージは \"{roomName}\" に送信されました", + "Dismiss request for assistance" : "援助要請を却下する", + "Send message to room" : "部屋にメッセージを送信", + "Back to main room" : "メインルームに戻る", + "Back to your room" : "自分の部屋に戻る", + "Message all rooms" : "全てのルームにメッセージ", + "Start session" : "セッションを開始する", + "Start a call before you start a breakout room session" : "子会議室のセッションを始める前に通話を開始してください", + "Stop session" : "セッションを停止する", + "The message was sent to all breakout rooms" : "メッセージは全ての子会議室に送信されました", + "Send a message to all breakout rooms" : "全ての子会議室にメッセージを送る", + "Breakout rooms are not started" : "子会議室が開始されていません", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "高性能バックエンドを使用しない通話では、接続の問題が発生し、デバイスに高負荷がかかる可能性があります。{linkstart}詳細{linkend}", + "Disable lobby" : "ロビーを無効にする", + "Settings for participant \"{user}\"" : "参加者\"{user}\"の設定", + "Participant \"{user}\"" : "参加者 \"{user}\"", + "moderator" : "モデレータ", + "bot" : "ボット", + "guest" : "ゲスト", + "Ringing …" : "鳴っています...", + "Call rejected" : "通話拒否", + "{time} talking …" : "{time} 話しています…", + "{time} talking time" : "{time} 通話時間", + "Raised their hand" : "手を上げる", + "Joined with video" : "ビデオで参加", + "Joined via phone" : "電話で参加", + "Joined with audio" : "オーディオで参加", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "テキストの長さは {maxLength} 文字以下である必要があります。現在のテキストの長さは {charactersCount} 文字です。", + "Remove group and members" : "メンバーとグループを削除", + "Remove team and members" : "チーム・グループとメンバーを削除", + "Remove participant" : "参加者を削除", + "Notification was sent to {displayName}" : "{displayName} さんに通知が送信されました", + "Could not send notification to {displayName}" : "{displayName} さんに通知を送信できませんでした", + "Permissions granted to {displayName}" : "{displayName}に権限が付与されました", + "Could not modify permissions for {displayName}" : "{displayName}の権限を変更できませんでした", + "Permissions removed for {displayName}" : "{displayName}の権限が削除されました", + "Permissions set to default for {displayName}" : "{displayName} さんにデフォルト権限が設定されました", + "Phone number could not be hung up" : "電話が切れませんでした", + "Phone number could not be put on hold" : "電話を保留にできませんでした", + "Phone number could not be muted" : "電話をミュートできませんでした", + "Phone number could not be unmuted" : "電話をミュート解除できませんでした", + "DTMF message could not be sent" : "DTMFメッセージを送信できませんでした", + "Phone number copied to clipboard" : "電話番号がクリップボードにコピーされた", + "Phone number could not be copied" : "電話番号はコピーできませんでした", + "in the lobby" : "ロビーで", + "Dial out phone" : "電話をかける", + "Hang up phone" : "電話を切る", + "Move back to lobby" : "ロビーに戻る", + "Move to conversation" : "会話へ移動する", + "Dial-in PIN" : "ダイヤルインPIN", + "Demote from moderator" : "モデレータから降格", + "Promote to moderator" : "モデレータに昇格", + "Resend invitation" : "招待状を再送する", + "Send call notification" : "通話通知を送信", + "Dial out phone number" : "電話番号をかける", + "Resume call for phone number" : "電話番号にかけ直す", + "Put phone number on hold" : "電話番号を保留にする", + "Unmute phone number" : "電話番号のミュートを解除する", + "Mute phone number" : "電話番号のミュート", + "Copy phone number" : "電話番号をコピーする", + "Reset custom permissions" : "カスタム権限をリセット", + "Grant all permissions" : "すべての権限を付与", + "Remove all permissions" : "すべての権限を削除", + "Remove" : "削除", + "Permissions modified for {displayName}" : "{displayName}の権限が変更されました", + "Add users or groups" : "ユーザーまたはグループの追加", + "Add users" : "ユーザーを追加", + "Add groups" : "グループを追加", + "Add other sources" : "他のソースを追加", + "Add emails" : "メールを追加", + "Integrations" : "インテグレーション", + "Add federated users" : "フェデレーションユーザーを追加", + "Searching …" : "検索しています…", + "Search for more users" : "さらにユーザーを探す", + "Search or add participants" : "参加者を検索して追加する", + "Invitation was sent to {actorId}" : "招待が {actorId} に送信されました", + "An error occurred while adding the participants" : "参加者の追加中にエラーが発生しました", + "Participants" : "参加者", + "Participants ({count})" : "参加者 ({count})", + "Open chat" : "チャットを始める", + "You have new unread messages in the chat." : "チャットに未読のメッセージがあります", + "You have been mentioned in the chat." : "チャットであなたについてのメッセージがありました。", + "Chat" : "チャット", + "Details" : "詳細", + "Shared items" : "共有済みアイテム", + "No results found" : "結果が見つかりません", + "Load more results" : "結果をさらに読み込む", + "Projects" : "プロジェクト", + "No shared items" : "共有アイテムがありません", + "Thread notifications" : "スレッド通知", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "会話へのリンク", + "No open conversations found" : "公開している会話は見つかりませんでした", + "Either there are no open conversations or you joined all of them." : "開いている会話が存在しないか、あなたはすべてに参加しています。", + "Check spelling or use complete words." : "スペルをチェックするか、完全な単語を使用してください。", + "Search conversations or users" : "会話やユーザーを検索", + "Select conversation" : "会話を選択", + "Number length is not valid" : "番号の長さが無効", + "Region code is not valid" : "有効な地域コードではありません", + "Number length is too short" : "番号の長さが短すぎます", + "Number length is too long" : "番号の長さが長すぎます", + "Number is not valid" : "番号は有効なものではありません", + "Phone numbers" : "電話番号", + "Display name: {name}" : "表示名: {name}", + "Edit display name" : "表示名の編集", + "Save name" : "名前を保存", + "Error while saving sounds setting" : "サウンド設定を保存するときにエラー", + "Compact conversations list" : "会話リストをシンプルに表示", + "Play sounds when participants join or leave a call" : "参加者が通話に参加したとき、または通話を離れたときにサウンドを再生する", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "現在、メーカーによる技術的制限によりiPhoneおよびiPadではご利用いただけません。", + "Notification settings" : "通知設定", + "Sounds for chat and call notifications" : "チャットや着信時の通知", + "Default language" : "デフォルトの言語", + "Select location for attachments" : "添付ファイルの場所を選択します", + "Error while setting attachment folder" : "添付ファイル用フォルダー設定中のエラー", + "Error while setting read status privacy" : "読み取りステータスのプライバシー設定中にエラーが発生しました", + "Error while setting typing status privacy" : "タイピングステータスのプライバシー設定中にエラーが発生しました", + "Turn camera and microphone off by default" : "自動的にカメラとマイクをオフにする", + "Blur camera background by default" : "自動的に背景をぼかす", + "Skip device preview before joining a call" : "通話に参加する前のデバイスのプレビューをスキップする", + "Appearance & Sounds" : "外観と通知", + "Privacy" : "プライバシー", + "Send read receipts" : "既読ステータス", + "When off, all read statuses will be hidden" : "この機能をオフにすると、すべての既読ステータスが非表示になります。", + "Share typing status" : "入力状態を共有", + "When off, all typing indicators will be hidden" : "この機能をオフにすると、すべての入力インジケーターが非表示になります。", + "Attachments folder" : "添付ファイルフォルダー", + "Toggle full screen" : "全画面に切り替え", + "Return to Home screen" : "ホーム画面に戻る", + "Search" : "検索", + "Shortcuts while in a chat" : "チャット中のショートカット", + "Focus the chat input" : "チャット入力欄に移行", + "Unfocus the chat input to use shortcuts" : "ショートカットを使用するには、チャット入力欄からカーソルを外す", + "Edit your last message" : "最後のメッセージを編集する", + "Shortcuts while in a call" : "通話中のショートカット", + "Camera on and off" : "カメラのオンとオフ", + "Microphone on and off" : "マイクのオンとオフ", + "Raise or lower hand" : "手を上げるまたは下げる", + "Push to talk or push to mute" : "押して話すか、押してミュート", + "Zoom-in / zoom-out a screen share" : "画面共有のズームイン/ズームアウト", + "Start call silently" : "サイレント通話を開始", + "Start call" : "通話を開始", + "End call" : "通話終了", + "You will be able to join the call only after a moderator starts it." : "あなたは、モデレーターが通話を開始し後に通話参加できるようになります。", + "End call for everyone" : "全員の通話を終了する", + "Starting the recording" : "録画を開始", + "Recording" : "記録中", + "The call has been running for one hour." : "通話が1 時間経過しました。", + "Cancel recording start" : "録画開始をキャンセル", + "Stop recording" : "録画を停止", + "Send a reaction" : "リアクションを送信", + "React with {reaction}" : "{reaction} で反応する", + "All tasks done!" : "すべてのタスクが完了しました!", + "_%n participant in call_::_%n participants in call_" : ["%n 人が通話に参加"], + "You are not allowed to enable screensharing" : "画面共有を許可されていません", + "No screensharing" : "画面共有不可", + "Screensharing options" : "画面共有オプション", + "Enable screensharing" : "画面共有を有効にする", + "Bad sent video and screen quality." : "送信されている映像と画像の品質がよくありません。", + "Bad sent screen quality." : "送信画面の品質がよくありません。", + "Bad sent video quality." : "送信映像の品質が良くありません。", + "Bad sent audio, video and screen quality." : "送信音声と映像と画面の品質が良くありません。", + "Bad sent audio and screen quality." : "送信音声と画面の品質が良くありません。", + "Bad sent audio and video quality." : "送信音声と映像の品質が良くありません。", + "Bad sent audio quality." : "送信音声の品質が良くありません。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "コンピュータかネットワークの負荷が高いため、他の参加者が画面を見ることができない場合があります。状況を改善するには、画面共有を行っている間、背景ぼかしまたはビデオを無効にしてみてください。", + "Disable background blur" : "背景のぼかしを止める", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "コンピューターかネットワークの負荷が高い為、他の参加者から見えていない可能性があります。改善するためにカメラか画面共有をオフにしてみてください。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "インターネットかコンピューターの負荷が高いため、他の参加者にはこちらの画面は見えていないかもしれません。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "インターネット接続かコンピューターの負荷が高いため、他の参加者にはあなたが見えていないかもしれません。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "コンピューターかネットワークの負荷が高いため、他の参加者が画面を見ることができない場合があります。状況を改善するには、画面共有を行っている間、背景のぼかしまたはビデオを無効にしてみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、画面共有していたら映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、画面共有を停止してみてください。", + "Disable screenshare" : "画面共有を無効", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、背景のぼかしを止めるか、映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "インターネット接続かコンピューターの負荷が高いため、他の参加者から見えず、どうなっているのか分からないかもしれません。この状態を改善するには、映像を停止してみてください。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "インターネット接続かコンピューターの負荷が高いため、他の参加者にはあなたがどうなっているのか分からないかもしれません。", + "Screen sharing is not supported by your browser." : "お使いのブラウザーは画面共有をサポートしていません。", + "Screen sharing requires the page to be loaded through HTTPS." : "画面共有はHTTPSが必要です。", + "Screensharing requires the page to be loaded through HTTPS." : "画面共有はHTTPSが必要です。", + "An error occurred while starting screensharing." : "画面共有の開始中にエラーが発生しました。", + "Show your screen" : "自分の画面を表示", + "Stop screensharing" : "画面共有を停止", + "Mute others" : "他の人をミュートする", + "Start recording" : "録画を開始", + "Set up breakout rooms" : "子会議室を設定", + "Open Calendar" : "カレンダーを開く", + "Remove participant {name}" : "参加者 {name} を削除する", + "Delete now" : "今すぐ削除", + "Keep" : "保持", + "Open dialpad" : "ダイヤルパッドを開く", + "Select a region" : "地域を選択してください", + "Search …" : "検索…", + "Message without mention" : "話しの無いメッセージ", + "Mention myself" : "自分自身の話し", + "Mention everyone" : "全員にメンション", + "Select a conversation" : "会話を選択", + "Select a mode" : "モードを選択する", + "The conversation does not exist" : "会話が存在しません", + "Join a conversation or start a new one!" : "会話に参加または開始する!", + "Duplicate session" : "セッションの重複", + "Join a conversation or start a new one" : "会話に参加または開始する", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud ユーザー", + "User password" : "ユーザーのパスワード", + "Talk conversation" : "会話", + "Skip TLS verification" : "TLS検証をスキップする", + "Matrix server URL" : "Matrix サーバー URL", + "User" : "ユーザー", + "Matrix channel" : "Matrix チャンネル", + "Mattermost server URL" : "Mattermost サーバーのURL", + "Mattermost user" : "Mattermost ユーザー", + "Team name" : "チーム名", + "Channel name" : "チャンネル名", + "Rocket.Chat server URL" : "Rocket.Chat サーバーURL", + "User name or email address" : "名前またはメールアドレス", + "Rocket.Chat channel" : "Rocket.Chat チャンネル", + "Zulip server URL" : "Zulip サーバーURL", + "Bot user name" : "Botユーザー名", + "Bot API key" : "Bot APIキー", + "Zulip channel" : "Zulip チャンネル", + "API token" : "APIトークン", + "Slack channel" : "Slackチャンネル", + "Server ID or name" : "サーバーIDまたは名前", + "Channel" : "チャンネル", + "Login" : "ログイン", + "Chat ID" : "チャットID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC サーバーURL (e.g. chat.freenode.net:6667)", + "Nickname" : "ニックネーム", + "Connection password" : "接続パスワード", + "IRC channel" : "IRC チャンネル", + "Channel password" : "チャネルパスワード", + "NickServ nickname" : "NickServ ニックネーム", + "NickServ password" : "NickServ パスワード", + "Use TLS" : "TLSを使用する", + "Use SASL" : "SASLを使用する", + "Tenant ID" : "テナントID", + "Client ID" : "クライアントID", + "Team ID" : "チームID", + "Thread ID" : "スレッドID", + "XMPP/Jabber server URL" : "XMPP/Jabber サーバーURL", + "MUC server URL" : "MUC サーバーURL", + "Jabber ID" : "Jabber ID", + "Media" : "メディア", + "Polls" : "投票", + "Deck cards" : "Deckカード", + "Voice messages" : "ボイスメッセージ", + "Locations" : "場所", + "Call recordings" : "通話のレコーディング", + "Audio" : "オーディオ", + "Show all media" : "全てのメディアを表示", + "Show all files" : "すべてのファイルを表示", + "Show all polls" : "すべての投票を表示", + "Show all deck cards" : "全てのDeckカードを表示", + "Show all voice messages" : "全てのボイスメッセージを表示", + "Show all locations" : "全ての位置を表示", + "Show all call recordings" : "すべての通話録音を表示", + "Show all audio" : "全ての音声を表示", + "Show all other" : "そのほか全てを表示", + "Group" : "グループ", + "Team" : "チーム", + "You reconnected to the call" : "通話に再接続しました", + "{actor} reconnected to the call" : "{actor} が通話に再接続しました", + "You added {user0} and {user1}" : "{user0} と {user1} を追加しました", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["あなたは {user0}、{user1}、および %n人の参加者を追加しました"], + "An administrator added you and {user0}" : "管理者があなたと {user0} を追加しました", + "{actor} added you and {user0}" : "{actor} があなたと {user0} を追加しました", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理者があなた、{user0} ともう%n人の参加者を追加しました"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} があなた、{user0}、および%n人の参加者を追加しました"], + "An administrator added {user0} and {user1}" : "管理者が {user0} と {user1} を追加しました", + "{actor} added {user0} and {user1}" : "{actor} は {user0} と {user1} を追加しました", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理者が {user0}、{user1} ともう%n人の参加者を追加しました"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} が {user0}、{user1} および%n人の参加者を追加しました"], + "You and {user0} joined the call" : "あなたと {user0} が通話に参加しました", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["あなた、{user0} と %n 人の参加者が通話に参加しました"], + "{user0} and {user1} joined the call" : "{user0} と {user1} が通話に参加しました", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} と %n 人の参加者が通話に参加しました"], + "You and {user0} left the call" : "あなたと {user0} が通話から退出しました", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["あなた、{user0} と %n 人の参加者が通話から退出しました"], + "{user0} and {user1} left the call" : "{user0} と {user1} が通話から退出しました", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} と %n 人の参加者が通話から退出しました"], + "You promoted {user0} and {user1} to moderators" : "あなたは {user0} と {user1} をモデレーターに昇進させました", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["{user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "An administrator promoted you and {user0} to moderators" : "管理者があなたと {user0} をモデレータに昇格させました", + "{actor} promoted you and {user0} to moderators" : "{actor} があなたと {user0} をモデレーターに昇進させました", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理者があなた、{user0}、および%n人の参加者をモデレーターに昇格させました"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} があなた、{user0}、および%n人の参加者をモデレーターに昇格させました"], + "An administrator promoted {user0} and {user1} to moderators" : "管理者が {user0} と {user1} をモデレータに昇格させました", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} が {user0} と {user1} をモデレーターに昇進させました", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理者が {user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} が {user0}、{user1}、さらに%n人の参加者をモデレーターに昇格させました"], + "You demoted {user0} and {user1} from moderators" : "あなたは {user0} と {user1} をモデレーターから降格しました", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["あなたは {user0}、{user1}、さらに%n人の参加者をモデレーターから降格しました"], + "An administrator demoted you and {user0} from moderators" : "管理者があなたと {user0} をモデレータから降格しました", + "{actor} demoted you and {user0} from moderators" : "{actor} があなたと {user0} をモデレーターから降格しました", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理者があなた、{user0}、および%n人の参加者をモデレーターから降格しました"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} があなた、{user0}、および%n人の参加者をモデレーターから降格しました"], + "An administrator demoted {user0} and {user1} from moderators" : "管理者が {user0} と {user1} をモデレータから降格しました", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} が {user0} と {user1} をモデレーターから降格しました", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理者が {user0}、{user1}、および%n人の参加者をモデレーターから降格しました"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} が {user0}、{user1}、さらに%n人の参加者をモデレーターから降格しました"], + "You: {lastMessage}" : "あなた: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(あなたが編集しました)", + "(edited by a deleted user)" : "(削除済みユーザーにより編集されました)", + "(edited by {moderator})" : "({moderator} により編集されました)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "別ウィンドウかデバイスで既に会話に参加済みです。現在、複数接続はNextcloud Talkではサポートされていません。どうしますか?", + "Leave this page" : "このページを離れる", + "Join here" : "参加する", + "Deck card has been posted to {conversation}" : "デッキカードが {conversation} に投稿されました", + "An error occurred while posting deck card to conversation" : "Deckカードを会話に投稿中にエラーが発生しました", + "Post to a conversation" : "会話に投稿する", + "Post to conversation" : "会話に投稿する", + "The recording failed. Please contact your administrator." : "レコーディングが失敗しました。あなたの管理者に連絡してください。", + "Location has been posted to {conversation}" : "場所が {conversation} に投稿されました", + "An error occurred while posting location to conversation" : "位置情報を会話に投稿中にエラーが発生しました", + "Share to a conversation" : "会話に共有", + "Share to conversation" : "会話に共有", + "In conversation" : "会話の中で", + "Search in conversation: {conversation}" : "会話で検索する: {conversation}", + "Error while clearing conversation history" : "会話履歴のクリア中にエラーが発生しました", + "Error occurred while allowing guests" : "ゲストの許可中にエラーが発生しました", + "Error occurred while disallowing guests" : "ゲスト参加の禁止中にエラーが発生しました", + "Error occurred when restricting the conversation to moderator" : "会話をモデレーターに制限するとエラーが発生しました", + "Error occurred when opening the conversation to everyone" : "全員に会話を開くときにエラーが発生しました", + "Conversation password has been saved" : "会話のパスワードが保存されました", + "Conversation password has been removed" : "会話のパスワードが削除されました", + "Error occurred while saving conversation password" : "会話のパスワードの保存中にエラーが発生しました", + "Call recording is starting." : "録画を開始しています。", + "Call recording stopped while starting." : "録画開始中にが停止しました。", + "Call recording stopped. You will be notified once the recording is available." : "録画が停止されました。録画が利用可能になると通知が届きます", + "Conversation picture set" : "会話画像設定する", + "Conversation picture deleted" : "会話画像は削除されました", + "Could not delete the conversation picture" : "会話画像を削除することができませんでした", + "Could not post message: {errorMessage}" : "メッセージを投稿できませんでした: {errorMessage}", + "An error occurred while fetching the participants" : "参加者の取得中にエラーが発生しました。", + "Could not send invitation to {actorId}" : "{actorId} に招待状を送信できませんでした", + "Invitations sent" : "招待が送信されました", + "Error occurred when sending invitations" : "招待状の送信中にエラーが発生しました", + "An error occurred while creating breakout rooms" : "子会議室の作成中にエラーが発生しました", + "An error occurred while re-ordering the attendees" : "出席者の並び替え中にエラーが発生しました", + "An error occurred while deleting breakout rooms" : "子会議室の削除中にエラーが発生しました", + "An error occurred while starting breakout rooms" : "子会議室の開始中にエラーが発生しました", + "An error occurred while stopping breakout rooms" : "子会議室の停止中にエラーが発生しました", + "An error occurred while sending a message to the breakout rooms" : "子会議室へのメッセージの送信中にエラーが発生しました", + "An error occurred while requesting assistance" : "アシスタントの要求中にエラーが発生しました。", + "An error occurred while resetting the request for assistance" : "アシスタントの要求をリセットする際にエラーが発生しました", + "An error occurred while joining breakout room" : "子会議室への参加中にエラーが発生しました", + "Error fetching upcoming reminders" : "今後のリマインダー取得エラー", + "An error occurred while accepting an invitation" : "招待の受諾時にエラーが発生しました", + "An error occurred while rejecting an invitation" : "招待を拒否する時にエラーが発生しました", + "{guest} (guest)" : "{guest} (ゲスト)", + "An error occurred while submitting your vote" : "あなたの投票を送信する際にエラーが発生しました", + "An error occurred while ending the poll" : "投票を終了する際にエラーが発生しました", + "Poll \"{name}\" was created by {user}. Click to vote" : "\"{user}\" が作成した投票 \"{name}\" です。投票するにはクリックしてください。", + "Failed to add reaction" : "リアクションの追加に失敗", + "Failed to remove reaction" : "リアクションの削除に失敗", + "Error while uploading file \"{fileName}\"" : "ファイル \"{fileName}\" のアップロード中にエラーが発生しました", + "Not enough free space to upload file \"{fileName}\"" : "ファイル ”{fileName}\" をアップロードするのに十分な空き容量がありません", + "You are not allowed to share files" : "ファイル共有は許可されていません", + "Error while sharing file" : "ファイルの共有中にエラーが発生しました", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "お使いのブラウザーは、Nextcloud Talkで完全にはサポートされていません。最新バージョンのMozilla Firefox、Microsoft Edge、Google Chrome、Opera、またはApple Safariを使用してください。", + "Later today – {timeLocale}" : "今日この後 – {timeLocale}", + "Tomorrow – {timeLocale}" : "明日 – {timeLocale}", + "This weekend – {timeLocale}" : "今週末 – {timeLocale}", + "Next week – {timeLocale}" : "来週 – {timeLocale}", + "Message link copied to clipboard" : "メッセージリンクがクリップボードにコピーされました", + "Conversation link copied to clipboard" : "会話リンクをクリップボードにコピーしました", + "The link could not be copied" : "リンクをコピーできませんでした", + "Sending signaling message has failed" : "シグナリングメッセージの送信に失敗しました", + "Lost connection to signaling server. Trying to reconnect." : "シグナリングサーバーへの接続が切れました。再接続してみてください。", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "設定済みのシグナルサーバーは、このバージョンのTalkと互換性を持たせるために更新する必要があります。管理者に連絡してください。", + "Please reload the page." : "ページをリロードしてください。", + "Do not disturb" : "取り込み中", + "Away" : "離席中", + "Microphone {number}" : "マイク {number}", + "Camera {number}" : "カメラ {number}", + "Speaker {number}" : "スピーカー {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "ミュートしたまま話しているようです。他の人に聞こえるようにミュートを解除してください。", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "少なくとも1人の参加者との接続を確立できませんでした。あなたのシナリオにはTURNサーバーが必要かもしれません。管理者に依頼して、{linkstart}このドキュメント{linkend}に従って設定してください。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "予想以上に時間がかかっています。メディア権限はすでに付与されていますか?(または拒否されていますか?)付与されている場合、オーディオとビデオが破損しているのでブラウザーを再起動してください。", + "Access to microphone & camera is only possible with HTTPS" : "マイクとカメラへのアクセスはHTTPSでのみ可能です", + "Please move your setup to HTTPS" : "HTTPSを使用して設定してください", + "Access to microphone & camera was denied" : "マイクとカメラへのアクセスが拒否されました", + "WebRTC is not supported in your browser" : "お使いのブラウザーはWebRTCに対応していません", + "Please use a different browser like Firefox or Chrome" : "別のブラウザー(Firefox または Chrome 等)を使用してください", + "Error while accessing microphone & camera" : "マイクとカメラのアクセス中にエラーが発生しました", + "%s Talk on your mobile devices" : "あなたのモバイルデバイス上の会話%s", + "Join conversations at any time, anywhere, on any device." : "いつでも、どこでも、どんなデバイスでも会話に参加できます。", + "Android app" : "Android アプリ", + "iOS app" : "iOS アプリ", + "__language_name__" : "日本語 (Japanese)", + "Tasks" : "タスク", + "Notes" : "Notes", + "Reports" : "報告", + "Next meeting" : "次の会議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "カレンダーに会議を予約します。ここに表示するためには、会議の場所にTalkのチャットルームを指定してください。", + "Join conversations from remote Nextcloud servers" : "リモートNextcloudサーバーから会話に参加する", + "Set reminder for later today" : "今日中にリマインダーを設定する", + "Set reminder for tomorrow" : "明日のリマインダーを設定する", + "Set reminder for this weekend" : "今週末のリマインダーを設定する", + "Set reminder for next week" : "来週のリマインダーを設定する", + "Open poll • You voted already" : "公開投票 • あなたは既に投票済み", + "Open poll • Click to vote" : "公開投票 • クリックして投票", + "Poll • Ended" : "投票 • 終了", + "Talk recording from {time} ({conversation})" : " {time} からのトーク録音 ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n 投票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公開投票 • %n 投票"], + "Submit vote" : "投票する", + "Your privacy setting has been saved" : "プライバシー設定が保存されました", + "Failed to save sounds setting" : "サウンド設定を保存できませんでした", + "Sounds setting saved" : "サウンド設定を保存", + "Always shown if recording consent is required" : "録音の同意が必要な場合は常に表示されます", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "別ウィンドウかデバイスで既に会話に参加済みです。現在、複数接続はNextcloud Talkではサポートされていないため、このセッションは閉じられます。" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/ka.js b/l10n/ka.js new file mode 100644 index 0000000..89cbaa0 --- /dev/null +++ b/l10n/ka.js @@ -0,0 +1,1624 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n other","%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "Guest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a call" : "You started a call", + "{actor} started a call" : "{actor} started a call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (guest)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "Storage quota exceeded", + "File not found" : "File not found", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "No image file provided" : "No image file provided", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Talk mentions" : "Talk mentions", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Conversation invitation" : "Conversation invitation", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "Dismiss notification", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Accept" : "Accept", + "Decline" : "Decline", + "New message" : "New message", + "Reminder" : "Reminder", + "Notification" : "შეტყობინება", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "Open settings", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "Default", + "Presentation" : "Presentation", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "Other", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federation", + "High-performance backend" : "High-performance backend", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "Recording backend" : "Recording backend", + "SIP configuration" : "SIP configuration", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "The password is wrong. Try again.", + "Password" : "პაროლი", + "Submit" : "Submit", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "Saving …", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "State", + "Name" : "Name", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Beta" : "Beta", + "Permissions" : "Permissions", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "Enable encryption" : "Enable encryption", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "Pending", + "Error" : "Error", + "Blocked" : "Blocked", + "Active" : "Active", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "Country", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "Yes" : "Yes", + "No" : "No", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "SIP configuration saved!" : "SIP configuration saved!", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend settings saved", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "OK", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "გარე მომხმარებელი", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "Confirm", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "Reset", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "Cancel", + "Unassigned participants" : "Unassigned participants", + "Back" : "Back", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Loading …" : "Loading …", + "From" : "From", + "To" : "To", + "Calendar" : "Calendar", + "Attendees" : "Attendees", + "Save" : "Save", + "Search participants" : "Search participants", + "No results" : "No results", + "Done" : "Done", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "Grid view", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "Reload", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "Copy link", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "None", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Favorite" : "Favorite", + "Date:" : "Date:", + "Hide details" : "Hide details", + "Show details" : "Show details", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "Disable", + "Enable" : "Enable", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "Choose", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "Personal", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Guest access" : "Guest access", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "Change password" : "Change password", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "Edit", + "More information" : "More information", + "Delete" : "Delete", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Join" : "Join", + "Error while creating the conversation" : "Error while creating the conversation", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Unread mentions" : "Unread mentions", + "Create conversation" : "Create conversation", + "Enter your name" : "Enter your name", + "Submit name and join" : "Submit name and join", + "Log in" : "Log in", + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Home" : "მთავარი", + "Unread" : "Unread", + "Alphabetically" : "Alphabetically", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Unread messages" : "Unread messages", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "Clear filter" : "Clear filter", + "App settings" : "App settings", + "Users" : "Users", + "Groups" : "Groups", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users and groups" : "Users and groups", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Invalid path selected" : "Invalid path selected", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "Upload", + "Files" : "ფაილები", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 hours", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Forward message" : "Forward message", + "Translate" : "Translate", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "Dismiss", + "Go to conversation" : "Go to conversation", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Deleting message" : "Deleting message", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Open poll" : "Open poll", + "See results" : "See results", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "File to share" : "File to share", + "Add emoji" : "Add emoji", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "New file" : "New file", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "Send", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "Create poll" : "Create poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "Settings", + "Multiple answers" : "Multiple answers", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "შედეგები", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "guest", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove participant" : "Remove participant", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Remove" : "Remove", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Add users", + "Add groups" : "Add groups", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "Searching …", + "Search for more users" : "Search for more users", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Shared items", + "No results found" : "No results found", + "Load more results" : "Load more results", + "Projects" : "Projects", + "No shared items" : "No shared items", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Save name" : "Save name", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Notification settings" : "Notification settings", + "Default language" : "Default language", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Privacy" : "Privacy", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Search" : "Search", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Remove participant {name}" : "Remove participant {name}", + "Keep" : "Keep", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel" : "Channel", + "Login" : "Login", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Polls", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "Audio", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Group" : "Group", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You: {lastMessage}" : "You: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please reload the page." : "Please reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "ქართული ენა", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." +}, +"nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka.json b/l10n/ka.json new file mode 100644 index 0000000..a355e3d --- /dev/null +++ b/l10n/ka.json @@ -0,0 +1,1622 @@ +{ "translations": { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n other","%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "Guest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a call" : "You started a call", + "{actor} started a call" : "{actor} started a call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","You set the message expiration to %n hours"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "Message deleted by author", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (guest)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} ended the call with %n guests (Duration {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "Storage quota exceeded", + "File not found" : "File not found", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "Poll", + "No image file provided" : "No image file provided", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Talk mentions" : "Talk mentions", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Conversation invitation" : "Conversation invitation", + "Description" : "Description", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "Dismiss notification", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Accept" : "Accept", + "Decline" : "Decline", + "New message" : "New message", + "Reminder" : "Reminder", + "Notification" : "შეტყობინება", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "Open settings", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "Default", + "Presentation" : "Presentation", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "Other", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federation", + "High-performance backend" : "High-performance backend", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "Recording backend" : "Recording backend", + "SIP configuration" : "SIP configuration", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "The password is wrong. Try again.", + "Password" : "პაროლი", + "Submit" : "Submit", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "Saving …", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "State", + "Name" : "Name", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Beta" : "Beta", + "Permissions" : "Permissions", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "Enable encryption" : "Enable encryption", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "Pending", + "Error" : "Error", + "Blocked" : "Blocked", + "Active" : "Active", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "Country", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "Yes" : "Yes", + "No" : "No", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user","%n users"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "SIP configuration saved!" : "SIP configuration saved!", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend settings saved", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "OK", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "გარე მომხმარებელი", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "Confirm", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "Reset", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "Cancel", + "Unassigned participants" : "Unassigned participants", + "Back" : "Back", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Loading …" : "Loading …", + "From" : "From", + "To" : "To", + "Calendar" : "Calendar", + "Attendees" : "Attendees", + "Save" : "Save", + "Search participants" : "Search participants", + "No results" : "No results", + "Done" : "Done", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "Grid view", + "This conversation is read-only" : "This conversation is read-only", + "Reload" : "Reload", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "Copy link", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "None", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Favorite" : "Favorite", + "Date:" : "Date:", + "Hide details" : "Hide details", + "Show details" : "Show details", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "Disable", + "Enable" : "Enable", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "Choose", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "Personal", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hour","%n hours"], + "_%n day_::_%n days_" : ["%n day","%n days"], + "_%n week_::_%n weeks_" : ["%n week","%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Guest access" : "Guest access", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "Password protection", + "Change password" : "Change password", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "Edit", + "More information" : "More information", + "Delete" : "Delete", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Notifications" : "Notifications", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Join" : "Join", + "Error while creating the conversation" : "Error while creating the conversation", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Unread mentions" : "Unread mentions", + "Create conversation" : "Create conversation", + "Enter your name" : "Enter your name", + "Submit name and join" : "Submit name and join", + "Log in" : "Log in", + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Home" : "მთავარი", + "Unread" : "Unread", + "Alphabetically" : "Alphabetically", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Unread messages" : "Unread messages", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "Clear filter" : "Clear filter", + "App settings" : "App settings", + "Users" : "Users", + "Groups" : "Groups", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users and groups" : "Users and groups", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Invalid path selected" : "Invalid path selected", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "Upload", + "Files" : "ფაილები", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 hours", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Forward message" : "Forward message", + "Translate" : "Translate", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "Dismiss", + "Go to conversation" : "Go to conversation", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Deleting message" : "Deleting message", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Open poll" : "Open poll", + "See results" : "See results", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "File to share" : "File to share", + "Add emoji" : "Add emoji", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "New file" : "New file", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "Send", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "Create poll" : "Create poll", + "Question" : "Question", + "Ask a question" : "Ask a question", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "Settings", + "Multiple answers" : "Multiple answers", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "შედეგები", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "guest", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove participant" : "Remove participant", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Remove" : "Remove", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Add users", + "Add groups" : "Add groups", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "Searching …", + "Search for more users" : "Search for more users", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Shared items", + "No results found" : "No results found", + "Load more results" : "Load more results", + "Projects" : "Projects", + "No shared items" : "No shared items", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Save name" : "Save name", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Notification settings" : "Notification settings", + "Default language" : "Default language", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Privacy" : "Privacy", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Search" : "Search", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Remove participant {name}" : "Remove participant {name}", + "Keep" : "Keep", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "Talk conversation", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "User", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel" : "Channel", + "Login" : "Login", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Polls", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "Audio", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Group" : "Group", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} added {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} and %n more participants joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} demoted you, {user0} and %n more participants from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You: {lastMessage}" : "You: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please reload the page." : "Please reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "ქართული ენა", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." +},"pluralForm" :"nplurals=2; plural=(n!=1);" +} \ No newline at end of file diff --git a/l10n/ka_GE.js b/l10n/ka_GE.js new file mode 100644 index 0000000..3e94483 --- /dev/null +++ b/l10n/ka_GE.js @@ -0,0 +1,160 @@ +OC.L10N.register( + "spreed", + { + "(Duration %s)" : "(ხანგრძლივობა %s)", + "You attended a call with {user1}" : "თქვენ დაესწარით ზარს მომხმარებელთან {user1}", + "_%n guest_::_%n guests_" : ["%n სტუმრები","%n სტუმრები"], + "You attended a call with {user1} and {user2}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1} და {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2} და {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2}, {user3} და {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2}, {user3}, {user4} და {user5}", + "_%n other_::_%n others_" : ["%n სხვა","%n სხვა"], + "{actor} invited you to {call}" : "მოწვევა {call} ზარზე მომხმარებლისგან {actor}", + "Talk" : "საუბარი", + "Guest" : "სტუმარი", + "Administration" : "ადმინისტრაცია", + "System" : "სისტემა", + "Talk to %s" : "საუბარი მომხმარებელთან %s", + "File not found" : "ფაილი ვერ იქნა ნაპოვნი", + "File is too big" : "ფაილი ზედმეტად დიდია", + "Invalid file provided" : "არასწორი ფაილი", + "Invalid image" : "არასწორი სურათი", + "Unknown filetype" : "ამოუცნობი ფაილის ტიპი", + "Description" : "აღწერილობა", + "Accept" : "მიღება", + "Decline" : "ურაყოფა", + "New message" : "ახალი წერილი", + "Join call" : "შეუერთდით ზარს", + "A group call has started in {call}" : "ჯგუფური ზარი დაიწყო {call}-ში", + "Open settings" : "პარამეტრების გახსნა", + "Default" : "საწყისი", + "Avatar image is not square" : "ავატარის სურათი არაა კვადრატი", + "Other" : "სხვა", + "Federation" : "ფედერაცია", + "Invalid date, date format must be YYYY-MM-DD" : "არასწორი თარიღი, თარიღის ფორმატი უნდა იყოს წწწწ-თთ-დდ", + "Leave call" : "ზარის დატოვება", + "The password is wrong. Try again." : "პაროლი არასწორია. სცადეთ ახლიდან.", + "Password" : "პაროლი", + "Submit" : "გაგზავნა", + "Everyone" : "ყველა", + "Save changes" : "ცვილებების შენახვა", + "Saved!" : "შენახულია!", + "Limit to groups" : "ლიმიტი ჯგუფებზე", + "Enabled" : "მოქმედია", + "Disabled" : "არაა მოქმედი", + "Name" : "სახელი", + "Permissions" : "უფლებები", + "General settings" : "მთავარი პარამეტრები", + "Enable encryption" : "შიფრაციის ამოქმედება", + "Pending" : "მოლოდინში", + "Error" : "შეცდომა", + "Blocked" : "დაბლოკილია", + "Expired" : "გაუქმდა", + "Never" : "არასდროს", + "Language" : "ენა", + "Country" : "ქვეყანა", + "Status" : "სტატუსი", + "Created at" : "შეიქმნა", + "Yes" : "დიახ", + "Validate SSL certificate" : "SSL სერტიფიკატის ვალიდაცია", + "Shared secret" : "გაზიარებული საიდუმლო", + "STUN servers" : "STUN სერვერები", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN სერვერი როუტერს მიღმა მყოფი მონაწილეების ღია IP მისამართების დადგენისთვის.", + "TURN server protocols" : "TURN სერვერის პროტოკოლები", + "OK" : "კარგი", + "Checking …" : "მოწმდება ...", + "Confirm" : "დადასტურება", + "Reset" : "საწყის მდოგმარეობაში დაბრუნება", + "Cancel" : "უარყოფა", + "Back" : "უკან", + "Calendar" : "კალენდარი", + "Attendees" : "დამსწრეები", + "Save" : "შენახვა", + "No results" : "შედეგები არაა", + "Done" : "დასრულდა", + "Grid view" : "ბადისებური ხედი", + "Waiting for others to join the call …" : "ზარში შემოსვლისთვის ველოდებით სხვებს …", + "You can invite others in the participant tab of the sidebar" : "შეგიძლიათ სხვები მოიწვიოთ გვერდით ბარში, მონაწილებიის ტაბულით", + "Share this link to invite others!" : "სხვების მოსაწვევად გააზიარეთ ეს ბმული!", + "Copy link" : "ბმულის კოპირება", + "Mute audio" : "ხმის ჩახშობა", + "None" : "არც ერთი", + "Disable video" : "ვიდეოს გათიშვა", + "Enable video" : "ვიდეოს ამოქმედება", + "You" : "თქვენ", + "Show screen" : "ეკრანის ჩვენება", + "Collapse" : "აკეცვა", + "Favorite" : "რჩეული", + "Hide details" : "დეტალების დამალვა", + "Disable" : "გამორთვა", + "Choose" : "აირჩიეთ", + "Restricted" : "აკრძალული", + "Personal" : "პირადი", + "Password protection" : "პაროლით თავდაცვა", + "Set a password" : "პაროლის დაყენება", + "Edit" : "შეცვლა", + "Delete" : "წაშლა", + "Log content" : "ლოგის მოცულობა", + "Notifications" : "შეტყობინებები", + "Log in" : "შესვლა", + "Mark as read" : "წაკითხულად მონიშვნა", + "Mark as unread" : "წაუკითხავად მონიშვნა", + "Remove from favorites" : "რჩეულებიდან ამოშლა", + "Add to favorites" : "რჩეულებში დამატება", + "Home" : "სახლი", + "Alphabetically" : "ანბანის მიხედვით", + "Users" : "მომხმარებლები", + "Groups" : "ჯგუფები", + "Devices" : "მოწყობილობები", + "Upload" : "ატვირთვა", + "Files" : "ფაილები", + "24 hours" : "24 საათი", + "Reply" : "პასუხი", + "More actions" : "მეტი ქმედება", + "Translate" : "გადათარგმნეთ", + "Dismiss" : "დათხოვნა", + "Message sent" : "წერილი გაგზავნილია", + "Contact" : "კონტაქტი", + "You voted" : "თქვენ მიეცით ხმა", + "Create new poll" : "ახალი გამოკითხვის შექმნა", + "Send" : "გაგზავნა", + "Create poll" : "გამოკითხვის შექმნა", + "Settings" : "პარამეტრები", + "moderator" : "მოდერატორი", + "Remove participant" : "მონაწილის ამოშლა", + "Demote from moderator" : "ჩამოიქვეითება მოდერატორობისგან", + "Promote to moderator" : "დაწინაურება მოდერატორობაზე", + "Add users or groups" : "დაამატეთ მომხმარებლები ან ჯგუფები", + "Participants" : "მონაწილეები", + "Chat" : "ჩეთი", + "Details" : "დეტალები", + "Privacy" : "კონფიდენციალურობა", + "Search" : "ძიება", + "Screensharing options" : "ეკრანების გაზიარების პარამეტრები", + "Enable screensharing" : "ეკრანების გაზიარების ნების დართვა", + "Screensharing requires the page to be loaded through HTTPS." : "ეკრანების გაზიარება საჭიროებს გვერდის HTTPS პროტოკოლით ჩატვირთვას.", + "An error occurred while starting screensharing." : "ეკრანის გაზიარებისას წარმოიშვა შეცდომა.", + "Show your screen" : "თქვენი ეკრანის ჩვენება", + "Stop screensharing" : "ეკრანის გაზიარების გათიშვა", + "User" : "მომხმარებელი", + "API token" : "API ტოკენი", + "Login" : "ავტორიზაცია", + "Nickname" : "ნიკნეიმი", + "Client ID" : "კლიენტის ID", + "Polls" : "გამოკითხვები", + "Audio" : "აუდიო", + "Group" : "ჯგუფი", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "გთხოვთ გადატვირთოთ გვერდი.", + "Access to microphone & camera is only possible with HTTPS" : "წვდომა მიკროფონთან და კამერასთან მხარდაჭერილია მხოლოდ HTTPS პროტოკოლით", + "Access to microphone & camera was denied" : "წვდომა მიკროფონზე და კამერაზე აიკრძალა", + "WebRTC is not supported in your browser" : "თქვენი ბრაუზერი WebRTC-ს არ უჭერს მხარს", + "Please use a different browser like Firefox or Chrome" : "გთხოვთ გამოიყენოთ სხვა ბრაუზერი, Firefox-ი ან Chrome-ი", + "Error while accessing microphone & camera" : "მიკროფონზე და კამერაზე წვდომისას წარმოიშვა შეცდომა", + "Android app" : "Android აპლიკაცია", + "iOS app" : "iOS აპლიკაცია", + "__language_name__" : "ქართული", + "Tasks" : "დავალებები", + "Notes" : "ჩანაწერები" +}, +"nplurals=2; plural=(n!=1);"); diff --git a/l10n/ka_GE.json b/l10n/ka_GE.json new file mode 100644 index 0000000..3623dd3 --- /dev/null +++ b/l10n/ka_GE.json @@ -0,0 +1,158 @@ +{ "translations": { + "(Duration %s)" : "(ხანგრძლივობა %s)", + "You attended a call with {user1}" : "თქვენ დაესწარით ზარს მომხმარებელთან {user1}", + "_%n guest_::_%n guests_" : ["%n სტუმრები","%n სტუმრები"], + "You attended a call with {user1} and {user2}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1} და {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2} და {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2}, {user3} და {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "თქვენ დაესწარით ზარს მომხმარებლებთან {user1}, {user2}, {user3}, {user4} და {user5}", + "_%n other_::_%n others_" : ["%n სხვა","%n სხვა"], + "{actor} invited you to {call}" : "მოწვევა {call} ზარზე მომხმარებლისგან {actor}", + "Talk" : "საუბარი", + "Guest" : "სტუმარი", + "Administration" : "ადმინისტრაცია", + "System" : "სისტემა", + "Talk to %s" : "საუბარი მომხმარებელთან %s", + "File not found" : "ფაილი ვერ იქნა ნაპოვნი", + "File is too big" : "ფაილი ზედმეტად დიდია", + "Invalid file provided" : "არასწორი ფაილი", + "Invalid image" : "არასწორი სურათი", + "Unknown filetype" : "ამოუცნობი ფაილის ტიპი", + "Description" : "აღწერილობა", + "Accept" : "მიღება", + "Decline" : "ურაყოფა", + "New message" : "ახალი წერილი", + "Join call" : "შეუერთდით ზარს", + "A group call has started in {call}" : "ჯგუფური ზარი დაიწყო {call}-ში", + "Open settings" : "პარამეტრების გახსნა", + "Default" : "საწყისი", + "Avatar image is not square" : "ავატარის სურათი არაა კვადრატი", + "Other" : "სხვა", + "Federation" : "ფედერაცია", + "Invalid date, date format must be YYYY-MM-DD" : "არასწორი თარიღი, თარიღის ფორმატი უნდა იყოს წწწწ-თთ-დდ", + "Leave call" : "ზარის დატოვება", + "The password is wrong. Try again." : "პაროლი არასწორია. სცადეთ ახლიდან.", + "Password" : "პაროლი", + "Submit" : "გაგზავნა", + "Everyone" : "ყველა", + "Save changes" : "ცვილებების შენახვა", + "Saved!" : "შენახულია!", + "Limit to groups" : "ლიმიტი ჯგუფებზე", + "Enabled" : "მოქმედია", + "Disabled" : "არაა მოქმედი", + "Name" : "სახელი", + "Permissions" : "უფლებები", + "General settings" : "მთავარი პარამეტრები", + "Enable encryption" : "შიფრაციის ამოქმედება", + "Pending" : "მოლოდინში", + "Error" : "შეცდომა", + "Blocked" : "დაბლოკილია", + "Expired" : "გაუქმდა", + "Never" : "არასდროს", + "Language" : "ენა", + "Country" : "ქვეყანა", + "Status" : "სტატუსი", + "Created at" : "შეიქმნა", + "Yes" : "დიახ", + "Validate SSL certificate" : "SSL სერტიფიკატის ვალიდაცია", + "Shared secret" : "გაზიარებული საიდუმლო", + "STUN servers" : "STUN სერვერები", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN სერვერი როუტერს მიღმა მყოფი მონაწილეების ღია IP მისამართების დადგენისთვის.", + "TURN server protocols" : "TURN სერვერის პროტოკოლები", + "OK" : "კარგი", + "Checking …" : "მოწმდება ...", + "Confirm" : "დადასტურება", + "Reset" : "საწყის მდოგმარეობაში დაბრუნება", + "Cancel" : "უარყოფა", + "Back" : "უკან", + "Calendar" : "კალენდარი", + "Attendees" : "დამსწრეები", + "Save" : "შენახვა", + "No results" : "შედეგები არაა", + "Done" : "დასრულდა", + "Grid view" : "ბადისებური ხედი", + "Waiting for others to join the call …" : "ზარში შემოსვლისთვის ველოდებით სხვებს …", + "You can invite others in the participant tab of the sidebar" : "შეგიძლიათ სხვები მოიწვიოთ გვერდით ბარში, მონაწილებიის ტაბულით", + "Share this link to invite others!" : "სხვების მოსაწვევად გააზიარეთ ეს ბმული!", + "Copy link" : "ბმულის კოპირება", + "Mute audio" : "ხმის ჩახშობა", + "None" : "არც ერთი", + "Disable video" : "ვიდეოს გათიშვა", + "Enable video" : "ვიდეოს ამოქმედება", + "You" : "თქვენ", + "Show screen" : "ეკრანის ჩვენება", + "Collapse" : "აკეცვა", + "Favorite" : "რჩეული", + "Hide details" : "დეტალების დამალვა", + "Disable" : "გამორთვა", + "Choose" : "აირჩიეთ", + "Restricted" : "აკრძალული", + "Personal" : "პირადი", + "Password protection" : "პაროლით თავდაცვა", + "Set a password" : "პაროლის დაყენება", + "Edit" : "შეცვლა", + "Delete" : "წაშლა", + "Log content" : "ლოგის მოცულობა", + "Notifications" : "შეტყობინებები", + "Log in" : "შესვლა", + "Mark as read" : "წაკითხულად მონიშვნა", + "Mark as unread" : "წაუკითხავად მონიშვნა", + "Remove from favorites" : "რჩეულებიდან ამოშლა", + "Add to favorites" : "რჩეულებში დამატება", + "Home" : "სახლი", + "Alphabetically" : "ანბანის მიხედვით", + "Users" : "მომხმარებლები", + "Groups" : "ჯგუფები", + "Devices" : "მოწყობილობები", + "Upload" : "ატვირთვა", + "Files" : "ფაილები", + "24 hours" : "24 საათი", + "Reply" : "პასუხი", + "More actions" : "მეტი ქმედება", + "Translate" : "გადათარგმნეთ", + "Dismiss" : "დათხოვნა", + "Message sent" : "წერილი გაგზავნილია", + "Contact" : "კონტაქტი", + "You voted" : "თქვენ მიეცით ხმა", + "Create new poll" : "ახალი გამოკითხვის შექმნა", + "Send" : "გაგზავნა", + "Create poll" : "გამოკითხვის შექმნა", + "Settings" : "პარამეტრები", + "moderator" : "მოდერატორი", + "Remove participant" : "მონაწილის ამოშლა", + "Demote from moderator" : "ჩამოიქვეითება მოდერატორობისგან", + "Promote to moderator" : "დაწინაურება მოდერატორობაზე", + "Add users or groups" : "დაამატეთ მომხმარებლები ან ჯგუფები", + "Participants" : "მონაწილეები", + "Chat" : "ჩეთი", + "Details" : "დეტალები", + "Privacy" : "კონფიდენციალურობა", + "Search" : "ძიება", + "Screensharing options" : "ეკრანების გაზიარების პარამეტრები", + "Enable screensharing" : "ეკრანების გაზიარების ნების დართვა", + "Screensharing requires the page to be loaded through HTTPS." : "ეკრანების გაზიარება საჭიროებს გვერდის HTTPS პროტოკოლით ჩატვირთვას.", + "An error occurred while starting screensharing." : "ეკრანის გაზიარებისას წარმოიშვა შეცდომა.", + "Show your screen" : "თქვენი ეკრანის ჩვენება", + "Stop screensharing" : "ეკრანის გაზიარების გათიშვა", + "User" : "მომხმარებელი", + "API token" : "API ტოკენი", + "Login" : "ავტორიზაცია", + "Nickname" : "ნიკნეიმი", + "Client ID" : "კლიენტის ID", + "Polls" : "გამოკითხვები", + "Audio" : "აუდიო", + "Group" : "ჯგუფი", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Please reload the page." : "გთხოვთ გადატვირთოთ გვერდი.", + "Access to microphone & camera is only possible with HTTPS" : "წვდომა მიკროფონთან და კამერასთან მხარდაჭერილია მხოლოდ HTTPS პროტოკოლით", + "Access to microphone & camera was denied" : "წვდომა მიკროფონზე და კამერაზე აიკრძალა", + "WebRTC is not supported in your browser" : "თქვენი ბრაუზერი WebRTC-ს არ უჭერს მხარს", + "Please use a different browser like Firefox or Chrome" : "გთხოვთ გამოიყენოთ სხვა ბრაუზერი, Firefox-ი ან Chrome-ი", + "Error while accessing microphone & camera" : "მიკროფონზე და კამერაზე წვდომისას წარმოიშვა შეცდომა", + "Android app" : "Android აპლიკაცია", + "iOS app" : "iOS აპლიკაცია", + "__language_name__" : "ქართული", + "Tasks" : "დავალებები", + "Notes" : "ჩანაწერები" +},"pluralForm" :"nplurals=2; plural=(n!=1);" +} \ No newline at end of file diff --git a/l10n/ko.js b/l10n/ko.js new file mode 100644 index 0000000..ced90cc --- /dev/null +++ b/l10n/ko.js @@ -0,0 +1,1606 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "대화", + "(Duration %s)" : "(시간 %s)", + "You attended a call with {user1}" : "{user1} 님과의 통화에 참가함", + "_%n guest_::_%n guests_" : ["손님 %n명"], + "You attended a call with {user1} and {user2}" : "{user1}, {user2} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}, {user2}, {user3} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1}, {user2}, {user3}, {user4} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1}, {user2}, {user3}, {user4}, {user5} 님과의 통화에 참가함", + "_%n other_::_%n others_" : ["외 %n명"], + "{actor} invited you to {call}" : "{actor} 님이 {call}에 초대함", + "You were invited to a conversation or had a call" : "당신은 대화에 초대되었거나 통화를 했습니다.", + "Other activities" : "다른 활동", + "Talk" : "토크", + "Guest" : "손님", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud 토크에 오신 것을 환영합니다.\n이 대화에서 Nextcloud 토크에서 사용 가능한 새 기능들에 대해 알아볼 수 있습니다.", + "## New in Talk %s" : "## Talk %s의 새로운 기능", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 이제 Edge와 Safari 브라우저를 음성 통화와 영상 통화에 사용할 수 있습니다.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 이제 일대일 대화가 지속되며 더 이상 실수로 그룹 대화로 전환되지 않습니다. 또한 참가자 중 한 명이 대화에서 나가더라도 대화는 더 이상 자동으로 삭제되지 않습니다. 두 참가자가 모두 나가는 경우에만 서버에서 대화가 삭제됩니다.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 당신은 \"@all\"을 채팅에 기재하여 참가자들에게 알릴 수 있습니다.", + "- With the \"arrow-up\" key you can repost your last message" : "- \"방향키 위\" 키로 마지막 메시지를 다시 보낼 수 있습니다.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- 이제 토크에서 명령어를 사용할 수 있습니다. 관리자가 설정한 명령어를 확인하려면, 채팅에 \"/help\"를 입력하세요.", + "- With projects you can create quick links between conversations, files and other items" : "- 당신은 프로젝트를 통해 대화, 파일 및 기타 항목 간에 빠른 링크를 생성할 수 있습니다.", + "- You can now mention guests in the chat" : "- 이제 채팅 메시지로 손님 계정을 언급할 수 있습니다.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 대화에 로비를 만들 수 있습니다. 다른 사용자와 손님들이 대기하는 동안, 중재자들이 미리 채팅에 참가하여 모임을 준비할 수 있습니다.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 이제 메시지에 직접 회신하여 다른 사용자에게 메시지의 내용을 더 자세히 설명할 수 있습니다.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 이제 대화 및 참가자를 검색하면 기존 대화를 필터링하여 이전 대화를 훨씬 쉽게 찾을 수 있습니다.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 이제 서클 앱이 설치되어 있으면 대화에 커스텀 사용자 그룹을 추가할 수 있습니다.", + "- Check out the new grid and call view" : "- 새로운 그리드 및 통화 화면을 확인하세요.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 이제 기기에서 채팅으로 곧바로 파일을 업로드 하고 드래그&드롭 할 수 있습니다.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 이제 공유된 파일을 채팅 화면에서 뷰어 앱을 통해 직접 열 수 있습니다.", + "- You can now search for chats and messages in the unified search in the top bar" : "- 상단 바의 검색을 통해 채팅이나 메시지를 검색할 수 있습니다.", + "- Spice up your messages with emojis from the emoji picker" : "- 이모티콘 선택을 통해 이모티콘을 사용하여 대화를 꾸며보세요.", + "- You can now change your camera and microphone while being in a call" : "- 통화중에 당신의 카메라와 마이크를 변경할 수 있습니다.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 대화에 설명을 추가하여, 로그인한 사용자들이 쉽게 찾고 참가할 수 있도록 할 수 있습니다.", + "- See a read status and send failed messages again" : "- 읽음 상태를 보고 실패한 메시지를 다시 보냅니다.", + "- Raise your hand in a call with the R key" : "- R 키를 사용하여 통화 중 손을 들어보세요.", + "- Join the same conversation and call from multiple devices" : "- 여러 기기에서 같은 대화에 참가하고, 통화할 수 있습니다.", + "- Send voice messages, share your location or contact details" : "- 음성 메시지를 보내거나, 위치 또는 연락처 정보를 공유하세요.", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 대화에 그룹을 추가하면 새 그룹 구성원이 자동으로 참가자로 추가", + "- A preview of your audio and video is shown before joining a call" : "- 통화에 참가하기 전에 자신의 음성과 영상을 미리 볼 수 있습니다.", + "- You can now blur your background in the newly designed call view" : "- 이제 새로 디자인된 통화 보기에서 배경을 흐리게 할 수 있습니다.", + "- Moderators can now assign general and individual permissions to participants" : "- 중재자는 이제 참가자에게 일반 및 개별 권한을 할당할 수 있습니다.", + "- You can now react to chat messages" : "- 이제 채팅 메시지에 반응할 수 있습니다.", + "- In the sidebar you can now find an overview of the latest shared items" : "- 이제 사이드바에서 최신 공유 항목의 개요를 찾을 수 있습니다.", + "- Use a poll to collect the opinions of others or settle on a date" : "- 의견이나 일정을 조율하기 위해 투표를 사용할 수 있습니다.", + "- Configure an expiration time for chat messages" : "- 채팅 메시지에 표시 만료 기한을 설정하세요.", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 단체 대화방에서 다른 참가자에게 알리지 않고 통화를 시작할 수 있습니다. 통화를 시작한 이후 참가자에게 개별적으로 통화 알림을 보낼 수 있습니다.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 급한 일이 아니라면, 받는이에게 알림이 가지 않는 채팅 메시지를 보낼 수 있습니다.", + "- Emojis can now be autocompleted by typing a \":\"" : "- \":\"를 입력해서 이모지를 자동 완성으로 보낼 수 있습니다.", + "- Link various items using the new smart-picker by typing a \"/\"" : "\"/\"를 눌러 새로운 스마트 피커를 사용하여 다양한 아이템을 연결하세요.", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 중재자는 이제 소회의실들을 만들 수 있습니다. (High-performance backend 필요)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 통화는 이제 저장될 수 있습니다. (High-performance backend 필요)", + "- Conversations can now have an avatar or emoji as icon" : "- 이제 대화에서 아바타와 이모지를 아이콘으로 사용할 수 있습니다.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 이제 영상 통화에서 흐린 배경 외에도 가상 배경을 사용할 수 있습니다.", + "- Reactions are now available during calls" : "- 이제 통화중 반응을 할 수 있습니다.", + "- Typing indicators show which users are currently typing a message" : "- 타이핑 표시기는 현재 어떤 사용자가 메시지를 입력하고 있는지 보여줍니다.", + "- Groups can now be mentioned in chats" : "- 이제 채팅에서 그룹을 언급할 수 있습니다.", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 전사 제공자 앱이 등록된 경우 통화 녹음이 자동으로 전사됩니다.", + "- Chat messages can be translated if a translation provider app is registered" : "- 번역 제공자 앱이 등록된 경우 채팅 메시지를 번역할 수 있습니다.", + "- **Markdown** can now be used in _chat_ messages" : "- 이제 _채팅_ 메시지에서 **마크다운**을 사용할 수 있습니다.", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- 웹훅을 통해 봇을 사용할 수 있습니다. 자세한 정보는 문서를 참조하십시오. https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 채팅 메시지에 알림을 설정하여 나중에 다시 확인하십시오", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **나에게 메모** 대화방을 사용하여 메모를 남기고 복수의 기기에서 정보를 공유하십시오.", + "- Captions allow to send a message with a file at the same time" : "- 파일과 파일에 대한 설명을 동시에 발송할 수 있습니다.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 발언자의 영상이 이제 화면 공유시 표시되며, 통화에서의 반응이 애니메이션화 됩니다.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 내용은 이제 로그인한 생성자나 중재자에 의해 6시간 동안 편집이 가능합니다.", + "- Unsent message drafts are now saved in your browser" : "- 보내지 않은 메세지 초안은 이제 브라우저에 저장됩니다.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 다른 토크서버와의 문자대화는 이제 연합으로 가능해 집니다.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 이제 중재자는 대화에 다시 참여하지 못하도록 계정과 게스트를 차단할 수 있습니다.", + "Talk updates ✅" : "토크 업데이트 내역 ✅", + "Reaction deleted by author" : "작성자가 삭제한 반응", + "{actor} created the conversation" : "{actor}님이 대화방을 만들었습니다.", + "You created the conversation" : "대화방을 만들었습니다.", + "System created the conversation" : "시스템에서 대화를 만들었습니다.", + "An administrator created the conversation" : "관리자가 대화를 만들었습니다.", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}님이 대화방의 이름을 \"%1$s\" 에서 \"%2$s\"로 변경했습니다.", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "당신이 대화의 이름을 %1$s 에서 %2$s 로 변경했습니다.", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "관리자가 대화의 이름을 \"%1$s\"에서 \"%2$s\"(으)로 변경했습니다.", + "{actor} set the description" : "{actor}님이 설명을 설정했습니다.", + "You set the description" : "대화방 정보를 설정했습니다.", + "An administrator set the description" : "관리자가 설명을 설정합니다.", + "{actor} removed the description" : "{actor}님이 설명을 삭제했습니다.", + "You removed the description" : "당신이 설명을 삭제했습니다.", + "An administrator removed the description" : "관리자가 설명을 삭제했습니다.", + "You started a call" : "통화를 시작했습니다.", + "{actor} started a call" : "{actor}님이 통화를 시작했습니다.", + "Incoming call" : "수신 통화", + "{actor} joined the call" : "{actor}님이 통화에 참가했습니다.", + "You joined the call" : "통화에 참가했습니다.", + "{actor} left the call" : "{actor}님이 통화를 떠났습니다.", + "You left the call" : "통화를 떠났습니다.", + "{actor} unlocked the conversation" : "{actor}님이 대화 제한을 해제했습니다.", + "You unlocked the conversation" : "당신이 대화 잠금을 풀었습니다.", + "An administrator unlocked the conversation" : "관리자가 대화 잠금을 풀었습니다.", + "{actor} locked the conversation" : "{actor}님이 대화를 제한했습니다.", + "You locked the conversation" : "당신이 대화를 잠갔습니다.", + "An administrator locked the conversation" : "관리자가 대화를 잠갔습니다.", + "{actor} limited the conversation to the current participants" : "{actor}이/가 현재 참가자들로 대화를 제한하였습니다.", + "You limited the conversation to the current participants" : "현재 참가자들로 대화를 제한하였습니다.", + "An administrator limited the conversation to the current participants" : "관리자가 현재 참가자들로 대화를 제한하였습니다.", + "{actor} opened the conversation to registered users" : "{actor}이/가 등록된 사용자에게 대화를 열었습니다.", + "You opened the conversation to registered users" : "등록된 사용자에게 대화를 열었습니다.", + "An administrator opened the conversation to registered users" : "관리자가 등록된 사용자에게 대화를 열었습니다.", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor}님이 가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "You opened the conversation to registered users and users created with the Guests app" : "가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "관리자가 가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "The conversation is now open to everyone" : "이 대화는 모든 사람들에게 열려 있습니다.", + "{actor} opened the conversation to everyone" : "{actor}님이 대화를 모두에게 허용했습니다.", + "You opened the conversation to everyone" : "당신이 대화를 모든 사람들에게 열었습니다.", + "{actor} restricted the conversation to moderators" : "{actor}님이 대화를 중재자만 허용했습니다.", + "You restricted the conversation to moderators" : "당신이 대화를 중재자들로 제한했습니다.", + "{actor} started breakout rooms" : "{actor}님이 소회의실을 시작했습니다.", + "You started breakout rooms" : "소회의실을 시작했습니다.", + "{actor} stopped breakout rooms" : "{actor}님이 소회의실을 중지했습니다.", + "You stopped breakout rooms" : "소회의실을 중지했습니다.", + "{actor} allowed guests" : "{actor}님이 손님 계정을 허용했습니다.", + "You allowed guests" : "손님을 허용했습니다.", + "An administrator allowed guests" : "관리자가 손님을 허용했습니다.", + "{actor} disallowed guests" : "{actor}님이 손님 계정을 불허용했습니다.", + "You disallowed guests" : "손님을 불허용했습니다.", + "An administrator disallowed guests" : "관리자가 손님을 불허용했습니다.", + "{actor} set a password" : "{actor}님이 암호를 설정했습니다.", + "You set a password" : "당신이 암호를 설정했습니다.", + "An administrator set a password" : "관리자가 암호를 설정했습니다.", + "{actor} removed the password" : "{actor}님이 암호를 제거했습니다.", + "You removed the password" : "당신이 암호를 제거했습니다.", + "An administrator removed the password" : "관리자가 암호를 제거했습니다.", + "{actor} added {user}" : "{actor}님이 {user}님을 초대했습니다.", + "You joined the conversation" : "대화에 참가했습니다.", + "{actor} joined the conversation" : "{actor}님이 대화에 참가했습니다.", + "You added {user}" : "{user}님을 추가했습니다.", + "{actor} added you" : "{actor}님이 당신을 초대했습니다.", + "An administrator added you" : "관리자가 당신을 추가했습니다.", + "An administrator added {user}" : "관리자가 {user}님을 추가했습니다.", + "You left the conversation" : "당신이 대화를 떠났습니다.", + "{actor} left the conversation" : "{actor}님이 대화를 떠났습니다.", + "{actor} removed {user}" : "{actor}님이 {user}님을 내보냈습니다.", + "You removed {user}" : "{user}님을 제거했습니다.", + "{actor} removed you" : "{actor}님이 당신을 내보냈습니다.", + "An administrator removed you" : "관리자가 당신을 제거했습니다.", + "An administrator removed {user}" : "관리자가 {user}님을 제거했습니다.", + "{actor} invited {federated_user}" : "{actor}님이 {federated_user}님을 초대했습니다", + "You invited {federated_user}" : "{federated_user}님을 초대했습니다.", + "An administrator invited {federated_user}" : "관리자가 {federated_user}님을 초대했습니다.", + "{federated_user} accepted the invitation" : "{federated_user}님이 초대를 수락함", + "{actor} removed {federated_user}" : "{actor}님이 {federated_user}님을 제거함", + "You removed {federated_user}" : "{federated_user}님을 제거함", + "An administrator removed {federated_user}" : "관리자가 {federated_user}님을 제거함", + "{federated_user} declined the invitation" : "{federated_user}님이 초대를 거부함", + "{actor} added group {group}" : "{actor}님이 {group} 그룹을 추가함", + "You added group {group}" : "{group} 그룹을 추가함", + "An administrator added group {group}" : "관리자가 {group} 그룹을 추가함", + "{actor} removed group {group}" : "{actor}님이 {group} 그룹을 제거함", + "You removed group {group}" : "{group} 그룹을 제거함", + "An administrator removed group {group}" : "관리자가 {group} 그룹을 제거함", + "{actor} added {phone}" : "{actor}님이 {phone}(을)를 추가했습니다.", + "You added {phone}" : "{phone}(을)를 추가했습니다.", + "An administrator added {phone}" : "관리자가 {phone}(을)를 추가했습니다.", + "{actor} removed {phone}" : "{actor}님이 {phone}(을)를 제거했습니다.", + "You removed {phone}" : "{phone}(을)를 제거했습니다.", + "An administrator removed {phone}" : "관리자가 {phone}(을)를 제거했습니다.", + "{actor} promoted {user} to moderator" : "{actor}님이 {user}님에게 중재자 권한을 부여했습니다.", + "You promoted {user} to moderator" : "{user}님에게 중재자 권한을 부여했습니다.", + "{actor} promoted you to moderator" : "{actor}님이 당신에게 중재자 권한을 부여했습니다.", + "An administrator promoted you to moderator" : "관리자가 당신에게 중재자 권한을 부여했습니다.", + "An administrator promoted {user} to moderator" : "관리자가 {user}님에게 중재자 권한을 부여했습니다. ", + "{actor} demoted {user} from moderator" : "{actor}님이 {user}님의 중재자 권한을 제거했습니다.", + "You demoted {user} from moderator" : "당신이 {user}의 진행자 권한을 제거했습니다.", + "{actor} demoted you from moderator" : "{actor}님이 당신의 중재자 권한을 제거했습니다.", + "An administrator demoted you from moderator" : "관리자가 당신의 중재자 권한을 제거했습니다.", + "An administrator demoted {user} from moderator" : "관리자가 {user}의 중재자 권한을 제거했습니다.", + "{actor} shared a file which is no longer available" : "{actor}님이 더 이상 사용할 수 없는 파일을 공유했습니다.", + "You shared a file which is no longer available" : "당신이 더 이상 사용할 수 없는 파일을 공유했습니다.", + "The shared location is malformed" : "공유된 위치가 잘못되었습니다.", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor}님이 이 대화를 다른 채팅과 동기화 하기 위해 Matterbridge를 구성했습니다.", + "You set up Matterbridge to synchronize this conversation with other chats" : "이 대화를 다른 채팅과 동기화 하기 위해 Matterbridge를 구성했습니다.", + "{actor} updated the Matterbridge configuration" : "{actor}님이 Matterbridge 구성을 수정했습니다.", + "You updated the Matterbridge configuration" : "Matterbridge 구성을 수정했습니다.", + "{actor} removed the Matterbridge configuration" : "{actor}님이 Matterbridge 구성을 제거했습니다.", + "You removed the Matterbridge configuration" : "Matterbridge 구성을 제거했습니다.", + "{actor} started Matterbridge" : "{actor}님이 Matterbridge를 시작했습니다.", + "You started Matterbridge" : "Matterbridge를 시작했습니다.", + "{actor} stopped Matterbridge" : "{actor}님이 Matterbridge를 중단했습니다.", + "You stopped Matterbridge" : "Matterbridge를 중단했습니다.", + "{actor} deleted a message" : "{actor}님이 메시지를 삭제했습니다.", + "You deleted a message" : "메시지를 삭제했습니다.", + "{actor} edited a message" : "{actor}님이 메시지를 수정했습니다.", + "You edited a message" : "메시지를 수정했습니다.", + "{actor} deleted a reaction" : "{actor}님이 반응을 삭제했습니다.", + "You deleted a reaction" : "반응을 삭제했습니다.", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["메시지의 유효 기간을 %n주로 설정했습니다."], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["메시지의 유효 기간을 %n일로 설정했습니다."], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["메시지의 유효 기간을 %n시간으로 설정했습니다."], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["메시지의 유효 기간을 %n분으로 설정했습니다."], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}님이 메시지의 유효 기간을 %n주로 설정했습니다."], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}님이 메시지의 유효 기간을 %n일로 설정했습니다."], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}님이 메시지의 유효 기간을 %n시간으로 설정했습니다."], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}님이 메시지의 유효 기간을 %n분으로 설정했습니다."], + "{actor} disabled message expiration" : "{actor}님이 메시지의 유효 기간을 해제했습니다.", + "You disabled message expiration" : "메시지의 유효 기간을 해제했습니다.", + "{actor} cleared the history of the conversation" : "{actor}님이 대화의 기록을 지웠습니다.", + "You cleared the history of the conversation" : "대화의 기록을 지웠습니다.", + "{actor} set the conversation picture" : "{actor}님이 대화의 사진을 설정했습니다.", + "You set the conversation picture" : "대화의 사진을 설정했습니다.", + "{actor} removed the conversation picture" : "{actor}님이 대화의 사진을 제거했습니다.", + "You removed the conversation picture" : "대화에 사진을 제거했습니다.", + "{actor} ended the poll {poll}" : "{actor}님이 {poll} 투표를 끝냈습니다.", + "You ended the poll {poll}" : "{poll} 투표를 끝냈습니다.", + "{actor} started the video recording" : "{actor}님이 녹화를 시작했습니다.", + "You started the video recording" : "녹화를 시작했습니다.", + "{actor} stopped the video recording" : "{actor}님이 녹화를 중단했습니다.", + "You stopped the video recording" : "녹화를 중단했습니다.", + "{actor} started the audio recording" : "{actor}님이 녹음을 시작했습니다.", + "You started the audio recording" : "녹음을 시작했습니다.", + "{actor} stopped the audio recording" : "{actor}님이 녹음을 중단했습니다.", + "You stopped the audio recording" : "녹음을 중단했습니다.", + "The recording failed" : "녹음/녹화를 하지 못했습니다.", + "Someone voted on the poll {poll}" : "누군가가 {poll} 투표에 투표했습니다.", + "Message deleted by author" : "작성자가 메시지를 삭제함", + "Message deleted by {actor}" : "{actor}님이 메시지를 삭제함", + "Message deleted by you" : "메시지를 삭제함", + "Deleted user" : "삭제된 사용자", + "Unknown number" : "알 수 없는 번호", + "Administration" : "관리", + "System" : "시스템", + "%s (guest)" : "%s (손님)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor}님이 %n명의 손님이 있는 통화를 끝냈습니다. (길이: {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor}님이 {user1}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor}님이 {user1}, {user2}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}, {user4}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}, {user4}, {user5}님과의 통화를 끝냈습니다. (길이: {duration})", + "Message of {user} in {conversation}" : "{conversation}에서 {user}님의 메시지", + "Message of {user}" : "{user}님의 메시지", + "Message of a deleted user in {conversation}" : "{conversation}에서 삭제된 사용자의 메시지", + "Talk conversations" : "토크 대화 목록", + "Talk to %s" : "%s 님과 대화", + "An error occurred. Please contact your administrator." : "오류가 발생했습니다. 관리자에게 연락해 주세요.", + "Storage quota exceeded" : "저장소 할당량 초과됨", + "File not found" : "파일을 찾을 수 없음", + "File is not shared, or shared but not with the user" : "파일을 공유하지 않았거나, 사용자에게 공유하지 않았습니다.", + "No account available to delete." : "삭제할 수 있는 계정이 없습니다.", + "Poll" : "투표", + "No image file provided" : "이미지 파일을 제공 받지 않음", + "File is too big" : "파일이 너무 큼", + "Invalid file provided" : "잘못된 파일 지정됨", + "Invalid image" : "잘못된 사진", + "Unknown filetype" : "알 수 없는 파일 형식", + "Talk mentions" : "토크 인용 목록", + "Say hi to your friends and colleagues!" : "여러분의 친구 및 동료들에게 인사하세요!", + "No unread mentions" : "읽지 않은 언급 없음", + "Call in progress" : "통화 진행중", + "You were mentioned" : "당신이 언급되었습니다.", + "Write to conversation" : "대화에 기록하기", + "Writes event information into a conversation of your choice" : "선택한 대화에 일정에 대한 정보를 기록합니다.", + "Conversation invitation" : "대화 초대", + "Description" : "설명", + "You can also dial-in via phone with the following details" : "다음 세부 정보를 참고하여 전화를 걸 수도 있습니다.", + "Dial-in information" : "전화 접속 정보", + "Meeting ID" : "모임 ID", + "Your PIN" : "당신의 PIN", + "Meeting" : "회의", + "Password request: %s" : "암호 요구사항: %s", + "Private conversation" : "비공개 대화", + "Deleted user (%s)" : "삭제된 사용자 (%s)", + "Failed to upload call recording" : "통화 녹음/녹화를 업로드하지 못했습니다.", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "녹음/녹화 서버가 {call} 통화의 녹음/녹화를 업로드하지 못했습니다. 관리자에게 연락해 주세요.", + "Share to chat" : "채팅에 공유", + "Dismiss notification" : "알림 해제", + "Call recording now available" : "현재 통화 녹음/녹화 사용 가능", + "The recording for the call in {call} was uploaded to {file}." : "{call} 통화의 녹음/녹화를 {file}에 업로드했습니다.", + "Transcript now available" : "현재 전사 사용 가능", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 통화의 전사를 {file}에 업로드했습니다.", + "Failed to transcript call recording" : "통화의 녹음을 전사하지 못했습니다.", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "서버가 {call} 통화의 {file} 녹음 파일을 전사하지 못했습니다. 관리자에게 연락해 주세요.", + "Accept" : "수락", + "Decline" : "거절", + "New message" : "새로운 메시지", + "Reminder" : "알림", + "Notification" : "공지", + "Reminder: You in {call}" : "알림: {call}의 당신", + "Reminder: {user} in {call}" : "알림: {call}의 {user}님", + "Reminder: Deleted user in {call}" : "알림: {call}의 삭제된 사용자", + "Reminder: {guest} (guest) in {call}" : "알림: {call}의 {guest}님(손님)", + "Reminder: Guest in {call}" : "알림: {call}의 손님", + "{user} reacted with {reaction}" : "{user}님이 {reaction}(으)로 반응했습니다.", + "{user} reacted with {reaction} in {call}" : "{user}님이 {call}에서 {reaction}(으)로 반응했습니다.", + "Deleted user reacted with {reaction} in {call}" : "삭제된 사용자가 {call}에서 {reaction}(으)로 반응했습니다.", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}님(손님)이 {call}에서 {reaction}(으)로 반응했습니다.", + "Guest reacted with {reaction} in {call}" : "손님이 {call}에서 {reaction}(으)로 반응했습니다.", + "{user} in {call}" : "{user} 가 {call} 상태 ", + "Deleted user in {call}" : "{call}에서 삭제된 사용자", + "{guest} (guest) in {call}" : "{guest}님(손님) {call} 상태", + "Guest in {call}" : "손님 {call} 상태", + "{user} sent you a private message" : "{user}님이 당신에게 비공개 메시지를 보냈습니다.", + "{user} sent a message in conversation {call}" : "{user}님이 대화에서 {call}메시지를 전송했습니다.", + "A deleted user sent a message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 메시지를 전송했습니다.", + "{guest} (guest) sent a message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 메시지를 전송했습니다. ", + "A guest sent a message in conversation {call}" : "손님이 {call} 대화에서 메시지를 전송했습니다.", + "{user} replied to your private message" : "{user}님이 당신의 비공개 메시지에 답변했습니다.", + "{user} replied to your message in conversation {call}" : "{user}님이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "A deleted user replied to your message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신의 메시지에 답변했습니다. ", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "A guest replied to your message in conversation {call}" : "손님이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "Reminder: You in private conversation {call}" : "알림: 비공개 대화 {call}의 당신", + "Reminder: A deleted user in private conversation {call}" : "알림: 비공개 대화 {call}의 삭제된 사용자", + "Reminder: {user} in private conversation" : "알림: 비공개 대화의 {user}님", + "Reminder: You in conversation {call}" : "알림: 대화 {call}의 당신", + "Reminder: {user} in conversation {call}" : "알림: 대화 {call}의 {user}님", + "Reminder: A deleted user in conversation {call}" : "알림: 대화 {call}의 삭제된 사용자", + "Reminder: {guest} (guest) in conversation {call}" : "알림: 대화 {call}의 {guest}님(손님)", + "Reminder: A guest in conversation {call}" : "알림: 대화 {call}의 손님", + "{user} reacted with {reaction} to your private message" : "{users}님이 당신의 비공개 메시지에 {reaction}(으)로 반응했습니다.", + "{user} reacted with {reaction} to your message in conversation {call}" : "{users}님이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "A guest reacted with {reaction} to your message in conversation {call}" : "손님이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "{user} mentioned you in a private conversation" : "{user}님이 비공개 대화에서 당신을 언급했습니다.", + "{user} mentioned group {group} in conversation {call}" : "{users}님이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "{user} mentioned everyone in conversation {call}" : "{users}님이 {call} 대화에서 모두를 언급했습니다.", + "{user} mentioned you in conversation {call}" : "{user}님이 {call} 대화에서 당신을 언급했습니다.", + "A deleted user mentioned group {group} in conversation {call}" : "삭제된 사용자가 {call} 대화에서 {group} 그룹을 언급했습니다.", + "A deleted user mentioned everyone in conversation {call}" : "삭제된 사용자가 {call} 대화에서 모두를 언급했습니다.", + "A deleted user mentioned you in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신을 언급했습니다.", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 모두를 언급했습니다.", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신을 언급했습니다.", + "A guest mentioned group {group} in conversation {call}" : "손님이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "A guest mentioned everyone in conversation {call}" : "손님이 {call} 대화에서 모두를 언급했습니다.", + "A guest mentioned you in conversation {call}" : "손님이 {call} 대화에서 당신을 언급했습니다.", + "View message" : "메시지 보기", + "Dismiss reminder" : "알림 무시", + "View chat" : "채팅 보기", + "{user} invited you to a group conversation: {call}" : "{user} 가 당신을 그룹 대화 {call}에 초대했습니다.", + "Join call" : "통화 참가하기", + "Answer call" : "통화 응답", + "{user} would like to talk with you" : "{user}님이 당신과 대화하길 원합니다.", + "Call back" : "다시 통화", + "You missed a call from {user}" : "당신이 {user}님의 통화를 놓쳤습니다.", + "A group call has started in {call}" : "그룹 통화가 {call}에 시작됨", + "You missed a group call in {call}" : "{call}의 그룹 통화를 놓쳤습니다.", + "{email} is requesting the password to access {file}" : "{email}(이)가 {file}에 접근하기 위한 암호를 요청합니다.", + "{email} tried to request the password to access {file}" : "{email}(이)가 {file}에 접근하기 위한 암호를 요청하려 시도했습니다.", + "Someone is requesting the password to access {file}" : "어떤 사람이 {file}에 접근하기 위한 암호를 요청합니다.", + "Someone tried to request the password to access {file}" : "어떤 사람이 {file} 에접근하기 위한 암호를 요청하려 시도했습니다.", + "Open settings" : "설정 열기", + "Hosted signaling server added" : "호스트된 시그널링 서버 추가됨", + "The hosted signaling server is now configured and will be used." : "이제 호스트된 시그널링 서버가 구성되었으며 사용됩니다.", + "Hosted signaling server removed" : "호스트된 시그널링 서버 제거됨", + "The hosted signaling server was removed and will not be used anymore." : "호스트된 시그널링 서버가 제거되었으며 더 이상 사용되지 않습니다.", + "Hosted signaling server changed" : "호스트된 시그널링 서버 변경됨", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "호스트된 신호 서버 계정 상태를 \"{oldstatus}\" 에서 \"{newstatus}\" 로 변경했습니다.", + "pending" : "보류 중", + "active" : "활성", + "expired" : "만료됨", + "blocked" : "차단됨", + "error" : "오류", + "The certificate of {host} expires in {days} days" : "{host}의 인증서가 {days}일 후 만료됩니다.", + "The certificate of {host} expired" : "{host}의 인증서가 만료되었습니다.", + "Contact via Talk" : "토크로 연락", + "Open Talk" : "토크 열기", + "Default" : "기본값", + "Presentation" : "프레젠테이션", + "Webinar" : "웨비나", + "Conversations" : "대화", + "Messages in current conversation" : "현재 대화의 메시지", + "{user}" : "{user}", + "Messages" : "메시지", + "{user} in {conversation}" : "{conversation}의 {user}", + "Messages in other conversations" : "다른 대화의 메시지", + "One-to-one rooms always need to show the other users avatar" : "일대일 대화방은 항상 아바타를 다른 사용자에게 표시해야 합니다.", + "Invalid emoji character" : "잘못된 이모지 문자", + "Invalid background color" : "잘못된 배경 색", + "Avatar image is not square" : "아바타 사진이 정사각형이 아님", + "Room {number}" : "{number}번 대화방", + "Other" : "기타", + "Failed to request trial because the trial server is unreachable. Please try again later." : "평가판 서버에 연결할 수 없으므로 평가판을 요청하지 못했습니다. 나중에 다시 시도해 주십시오.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "이 인스턴스를 인증하는 데 문제가 있습니다. 인스턴스의 URL을 확인하기 위해 외부에서 연결할 수 없는 것일 수 있습니다.", + "Something unexpected happened." : "예상하지 못한 일이 일어났습니다.", + "The URL is invalid." : "URL이 잘못되었습니다.", + "An HTTPS URL is required." : "HTTPS URL이 필요합니다.", + "The email address is invalid." : "이메일 주소가 잘못되었습니다.", + "The language is invalid." : "언어가 잘못되었습니다.", + "The country is invalid." : "국가가 잘못되었습니다.", + "There is a problem with the request of the trial. Please check your logs for further information." : "평가판의 요청에 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "Too many requests are send from your servers address. Please try again later." : "서버 주소에서 너무 많은 요청을 보냅니다. 나중에 다시 시도해 주십시오.", + "There is already a trial registered for this Nextcloud instance." : "이 Nextcloud 인스턴스에 대한 평가판이 이미 등록되어 있습니다.", + "Something unexpected happened. Please try again later." : "예상하지 못한 일이 일어났습니다. 나중에 다시 시도해 주십시오.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "평가판 서버의 동작이 잘못되어 평가판을 요청하지 못했습니다. 나중에 다시 시도해 주십시오.", + "Trial requested but failed to get account information. Please check back later." : "평가판이 요청되었지만 계정 정보를 가져오지 못했습니다. 나중에 다시 확인하십시오.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "이 요청을 인증하는 데 문제가 있습니다. URL을 확인하기 위해 외부에서 연결할 수 없을 수 있습니다.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "평가판 서버의 오류 때문에 계정 정보를 가져오는데 실패했습니다. 나중에 다시 확인해 주세요.", + "There is a problem with fetching the account information. Please check your logs for further information." : "계정 정보를 가져오는 데 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "There is no such account registered." : "해당하는 등록된 계정이 없습니다.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "평가판 서버에 연결할 수 없기 때문에 계정 정보를 가져오지 못했습니다. 나중에 다시 확인하십시오.", + "Deleting the hosted signaling server account failed. Please check back later." : "호스트된 시그널링 서버 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "평가판 서버의 동작이 잘못되어 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "There is a problem with deleting the account. Please check your logs for further information." : "계정을 삭제하는 데 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "Too many requests are sent from your servers address. Please try again later." : "서버 주소에서 너무 많은 요청이 전송되었습니다. 나중에 다시 시도 해주십시오.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "평가판 서버에 연결할 수 없기 때문에 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "Note to self" : "나에게 메모", + "A place for your private notes, thoughts and ideas" : "개인 메모와 생각, 아이디어를 남길 수 있는 곳", + "Andorra" : "안도라", + "United Arab Emirates" : "아랍에미리트", + "Afghanistan" : "아프가니스탄", + "Antigua and Barbuda" : "앤티가바부다", + "Anguilla" : "앵귈라", + "Albania" : "알바니아", + "Armenia" : "아르메니아", + "Angola" : "앙골라", + "Antarctica" : "남극", + "Argentina" : "아르헨티나", + "American Samoa" : "미국령 사모아", + "Austria" : "오스트리아", + "Australia" : "오스트레일리아", + "Aruba" : "아루바", + "Åland Islands" : "올란드 제도", + "Azerbaijan" : "아제르바이잔", + "Bosnia and Herzegovina" : "보스니아 헤르체고비나", + "Barbados" : "바베이도스", + "Bangladesh" : "방글라데시", + "Belgium" : "벨기에", + "Burkina Faso" : "부르키나 파소", + "Bulgaria" : "불가리아", + "Bahrain" : "바레인", + "Burundi" : "부룬디", + "Benin" : "베냉", + "Saint Barthélemy" : "성 바르텔레미", + "Bermuda" : "버뮤다", + "Brunei Darussalam" : "브루나이", + "Bolivia, Plurinational State of" : "볼리비아", + "Bonaire, Sint Eustatius and Saba" : "보나이러", + "Brazil" : "브라질", + "Bahamas" : "바하마", + "Bhutan" : "부탄", + "Bouvet Island" : "부베 섬", + "Botswana" : "보츠와나", + "Belarus" : "벨라루스", + "Belize" : "벨리즈", + "Canada" : "캐나다", + "Cocos (Keeling) Islands" : "코코스 킬링 제도", + "Congo, the Democratic Republic of the" : "콩고", + "Central African Republic" : "중앙아프리카공화국", + "Congo" : "콩고", + "Switzerland" : "스위스", + "Côte d'Ivoire" : "코트디부아르", + "Cook Islands" : "쿡 제도", + "Chile" : "칠레", + "Cameroon" : "카메룬", + "China" : "중국", + "Colombia" : "콜롬비아", + "Costa Rica" : "코스타리카", + "Cuba" : "쿠바", + "Cabo Verde" : "카보베르데", + "Curaçao" : "퀴라소", + "Christmas Island" : "크리스마스 섬", + "Cyprus" : "사이프러스", + "Czechia" : "체코", + "Germany" : "독일", + "Djibouti" : "지부티", + "Denmark" : "덴마크", + "Dominica" : "도미니카", + "Dominican Republic" : "도미니카공화국", + "Algeria" : "알제리", + "Ecuador" : "에콰도르", + "Estonia" : "에스토니아", + "Egypt" : "이집트", + "Western Sahara" : "서사하라", + "Eritrea" : "에리트레아", + "Spain" : "스페인", + "Ethiopia" : "에티오피아", + "Finland" : "핀란드", + "Fiji" : "피지", + "Falkland Islands (Malvinas)" : "포클랜드제도 (말비나스)", + "Micronesia, Federated States of" : "미크로네시아", + "Faroe Islands" : "패로제도", + "France" : "프랑스", + "Gabon" : "가봉", + "United Kingdom of Great Britain and Northern Ireland" : "영국", + "Grenada" : "그레나다", + "Georgia" : "조지아", + "French Guiana" : "프랑스령 기아나", + "Guernsey" : "건지", + "Ghana" : "가나", + "Gibraltar" : "지브롤터", + "Greenland" : "그린랜드", + "Gambia" : "잠비아", + "Guinea" : "기니", + "Guadeloupe" : "과들루프", + "Equatorial Guinea" : "적도 기니", + "Greece" : "그리스", + "South Georgia and the South Sandwich Islands" : "사우스조지아 사우스샌드위치 제도", + "Guatemala" : "과테말라", + "Guam" : "괌", + "Guinea-Bissau" : "기니비사우", + "Guyana" : "가이아나", + "Hong Kong" : "홍콩", + "Heard Island and McDonald Islands" : "허드 맥도널드 제도", + "Honduras" : "온두라스", + "Croatia" : "크로아티아", + "Haiti" : "아이티", + "Hungary" : "헝가리", + "Indonesia" : "인도네시아", + "Ireland" : "아일랜드", + "Israel" : "이스라엘", + "Isle of Man" : "맨섬", + "India" : "인도", + "British Indian Ocean Territory" : "영국령인도양식민지", + "Iraq" : "이라크", + "Iran, Islamic Republic of" : "이란", + "Iceland" : "아이슬란드", + "Italy" : "이탈리아", + "Jersey" : "저지", + "Jamaica" : "자메이카", + "Jordan" : "요르단", + "Japan" : "일본", + "Kenya" : "케냐", + "Kyrgyzstan" : "키르기스스탄", + "Cambodia" : "캄보디아", + "Kiribati" : "키리바시", + "Comoros" : "코모로", + "Saint Kitts and Nevis" : "세인트키츠 네비스", + "Korea, Democratic People's Republic of" : "조선민주주의인민공화국", + "Korea, Republic of" : "대한민국", + "Kuwait" : "쿠웨이트", + "Cayman Islands" : "케이맨 제도", + "Kazakhstan" : "카자흐스탄", + "Lao People's Democratic Republic" : "라오스", + "Lebanon" : "레바논", + "Saint Lucia" : "세인트루시아", + "Liechtenstein" : "리히텐슈타인", + "Sri Lanka" : "스리랑카", + "Liberia" : "라이베리아", + "Lesotho" : "레소토", + "Lithuania" : "리투아니아", + "Luxembourg" : "룩셈부르크", + "Latvia" : "라트비아", + "Libya" : "리비아", + "Morocco" : "모로코", + "Monaco" : "모나코", + "Moldova, Republic of" : "몰도바", + "Montenegro" : "몬테네그로", + "Saint Martin (French part)" : "세인트마틴섬", + "Madagascar" : "마다가스카르", + "Marshall Islands" : "마셜제도", + "North Macedonia" : "북마케도니아", + "Mali" : "말리", + "Myanmar" : "미얀마", + "Mongolia" : "몽골", + "Macao" : "마카오", + "Northern Mariana Islands" : "북마리아나제도", + "Martinique" : "마르티니크", + "Mauritania" : "모리타니", + "Montserrat" : "몬세라트", + "Malta" : "몰타", + "Mauritius" : "모리셔스", + "Maldives" : "몰디브", + "Malawi" : "말라위", + "Mexico" : "멕시코", + "Malaysia" : "말레이시아", + "Mozambique" : "모잠비크", + "Namibia" : "나미비아", + "New Caledonia" : "뉴칼레도니아", + "Niger" : "니제르", + "Norfolk Island" : "노퍽 섬", + "Nigeria" : "나이지리아", + "Nicaragua" : "니카라과", + "Netherlands" : "네덜란드", + "Norway" : "노르웨이", + "Nepal" : "네팔", + "Nauru" : "나우루", + "Niue" : "니우에 섬", + "New Zealand" : "뉴질랜드", + "Oman" : "오만", + "Panama" : "파나마", + "Peru" : "페루", + "French Polynesia" : "프랑스령폴리네시아", + "Papua New Guinea" : "파푸아뉴기니", + "Philippines" : "필리핀", + "Pakistan" : "파키스탄", + "Poland" : "폴란드", + "Saint Pierre and Miquelon" : "생피에르 미클롱", + "Pitcairn" : "핏케언 제도", + "Puerto Rico" : "푸에르토리코", + "Palestine, State of" : "팔레스타인", + "Portugal" : "포르투갈", + "Palau" : "팔라우", + "Paraguay" : "파라과이", + "Qatar" : "카타르", + "Réunion" : "레위니옹", + "Romania" : "루마니아", + "Serbia" : "세르비아", + "Russian Federation" : "러시아", + "Rwanda" : "르완다", + "Saudi Arabia" : "사우디아라비아", + "Solomon Islands" : "솔로몬제도", + "Seychelles" : "세이셸", + "Sudan" : "수단", + "Sweden" : "스웨덴", + "Singapore" : "싱가포르", + "Saint Helena, Ascension and Tristan da Cunha" : "세인트헬레나 어센션 트리스탄다쿠냐", + "Slovenia" : "슬로베니아", + "Svalbard and Jan Mayen" : "스발바르 얀마옌 제도", + "Slovakia" : "슬로바키아", + "Sierra Leone" : "시에라리온", + "San Marino" : "산마리노", + "Senegal" : "세네갈", + "Somalia" : "소말리아", + "Suriname" : "수리남", + "South Sudan" : "남수단", + "Sao Tome and Principe" : "상투메 프린시페 민주 공화국", + "El Salvador" : "엘살바도르", + "Sint Maarten (Dutch part)" : "신트마르턴", + "Syrian Arab Republic" : "시리아", + "Eswatini" : "에스와티니", + "Turks and Caicos Islands" : "터크스카이코스 제도", + "Chad" : "차드", + "French Southern Territories" : "프랑스령 남부와 남극지역", + "Togo" : "토고", + "Thailand" : "타이", + "Tajikistan" : "타지키스탄", + "Tokelau" : "토켈라우", + "Timor-Leste" : "동티모르", + "Turkmenistan" : "투르크메니스탄", + "Tunisia" : "튀니지", + "Tonga" : "통가", + "Turkey" : "터키", + "Trinidad and Tobago" : "트리니다드토바고", + "Tuvalu" : "투발루", + "Taiwan, Province of China" : "대만", + "Tanzania, United Republic of" : "탄자니아", + "Ukraine" : "우크라이나", + "Uganda" : "우간다", + "United States Minor Outlying Islands" : "미국령 군소 제도", + "United States of America" : "미국", + "Uruguay" : "우루과이", + "Uzbekistan" : "우즈베키스탄", + "Holy See" : "바티칸시국", + "Saint Vincent and the Grenadines" : "세인트빈센트 그레나딘", + "Venezuela, Bolivarian Republic of" : "베네수엘라", + "Virgin Islands, British" : "버진 아일랜드", + "Virgin Islands, U.S." : "버진 아일랜드", + "Viet Nam" : "베트남", + "Vanuatu" : "바누아투", + "Wallis and Futuna" : "왈리스에푸투나", + "Samoa" : "사모아", + "Yemen" : "예멘", + "Mayotte" : "마요트섬", + "South Africa" : "남아프리카공화국", + "Zambia" : "잠비아", + "Zimbabwe" : "짐바브웨", + "Federation" : "연합", + "High-performance backend" : "고성능 백엔드", + "Error: Cannot connect to server" : "오류: 서버에 연결할 수 없습니다.", + "Error: Server did not respond with proper JSON" : "오류: 서버가 올바른 JSON으로 응답하지 않습니다.", + "Error: Certificate expired" : "오류: 인증서 만료", + "Could not get version" : "버전을 가져올 수 없습니다.", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "오류: 사용 중인 버전: {version}; 이 버전의 토크와 호환되기 위해서 서버를 업데이트해야 합니다.", + "Error: Server responded with: {error}" : "오류: 서버가 응답함: {error}", + "Error: Unknown error occurred" : "오류: 알 수 없는 오류가 발생했습니다.", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "경고: 실행중인 버전: {version}; 서버가 이 버전의 Talk의 모든 기능을 지원하지 않습니다, 없는 기능: {features}", + "Recording backend" : "녹음/녹화 백엔드", + "SIP configuration" : "SIP 구성", + "Invalid date, date format must be YYYY-MM-DD" : "잘못된 날짜입니다, YYYY-MM-DD 형식이어야 합니다.", + "Conversation not found" : "대화를 찾을 수 없음", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC를 사용한 채팅, 영상 및 오디오 회의", + "Leave call" : "통화 떠나기", + "Navigating away from the page will leave the call in {conversation}" : "페이지에서 다른 페이지로 이동하면 {conversation}의 통화를 떠납니다.", + "Stay in call" : "통화에 남기", + "Discuss this file" : "이 파일에 대해 논의", + "Share this file with others to discuss it" : "이 파일을 다른 이에게 공유하여 논의", + "Share this file" : "이 파일 공유", + "Join conversation" : "대화 참가", + "This conversation is password-protected." : "이 대화는 암호로 보호되어 있습니다.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "사용 중인 IP 주소에서 암호를 너무 많이 틀렸습니다. 30초 후에 다시 로그인할 수 있습니다.", + "The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 시도하십시오", + "Password" : "암호", + "Submit" : "제출", + "Error requesting the password." : "암호를 요청하는 중 오류가 발생했습니다.", + "Request password" : "암호 요청", + "This conversation has ended" : "이 대화는 종료되었습니다.", + "Error occurred when joining the conversation" : "대화에 참가하는 중 오류 발생", + "Close Talk sidebar" : "토크 사이드바 닫기", + "Open Talk sidebar" : "토크 사이드바 열기", + "Everyone" : "모두", + "Users and moderators" : "사용자 및 중재자", + "Moderators only" : "중재자만", + "Disable calls" : "통화 비활성화", + "Save changes" : "변경 사항 저장", + "Saving …" : "저장 중 …", + "Saved!" : "저장했습니다!", + "Limit to groups" : "그룹으로 제한", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "하나 이상의 그룹이 선택되면, 선택된 그룹의 구성원만 대화에 참가할 수 있습니다.", + "Guests can still join public conversations." : "손님 계정은 여전히 공개 대화에 참가할 수 있습니다.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "더이상 토크를 사용할 수 없는 사용자는 지난 대화에 참가자로 목록에 계속 남아있으며 이들의 메시지도 유지됩니다.", + "Limit using Talk" : "토크 사용 제한", + "Limit creating a public and group conversation" : "공개 및 그룹 대화 만들기 제한", + "Limit creating conversations" : "대화 만들기 제한", + "Limit starting a call" : "통화 시작 제한", + "Limit starting calls" : "통화 시작 제한", + "When a call has started, everyone with access to the conversation can join the call." : "통화가 시작되면, 접근 권한이 있는 모두가 통화에 참가할 수 있습니다.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "다음 봇들이 이 서버에 설치되었습니다. 문서에서 {linkstart1}당신의 봇을 만드는 방법{linkend}을 찾아보거나 {linkstart2}활성화할 봇들의 목록{linkend}을 확인할 수 있습니다.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "이 서버에 설치된 봇이 없습니다. 문서에서 {linkstart1}당신의 봇을 만드는 방법{linkend}을 찾아보거나 {linkstart2}활성화할 봇들의 목록{linkend}을 확인할 수 있습니다.", + "Description is not provided" : "설명이 주어지지 않았습니다.", + "Locked for moderators" : "중재자로 잠김", + "Enabled" : "활성화", + "Disabled" : "비활성화됨", + "Bots settings" : "봇 설정", + "State" : "상태", + "Name" : "이름", + "Last error" : "마지막 오류", + "Total errors count" : "총 오류 수", + "Find more bots" : "봇 더 찾기", + "Beta" : "베타", + "Enable Federation in Talk app" : "Talk 앱에서 Federation 활성화", + "Permissions" : "권한", + "All messages" : "모든 메시지", + "@-mentions only" : "@-언급만", + "Off" : "꺼짐", + "General settings" : "일반 설정", + "Default notification settings" : "기본 알림 설정", + "Default group notification" : "기본 그룹 알림", + "Default group notification for new groups" : "새 그룹에 대한 기본 그룹 알림", + "Integration into other apps" : "다른 앱에 통합", + "Allow conversations on files" : "파일에서 대화 허용", + "Allow conversations on public shares for files" : "파일의 공개 공유에서 대화 허용", + "Enable encryption" : "암호화 사용", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "위의 버튼을 클릭하면 양식에 있는 정보가 Strucktur AG의 서버로 전송됩니다. 자세한 내용은 {linkstart}spreed.eu{linkend}에서 확인할 수 있습니다.", + "Pending" : "대기 중", + "Error" : "오류", + "Blocked" : "차단됨", + "Active" : "활동적인", + "Expired" : "만료됨", + "Never" : "하지 않음", + "The trial could not be requested. Please try again later." : "평가판을 요청할 수 없습니다. 나중에 다시 시도해 주십시오.", + "The account could not be deleted. Please try again later." : "계정을 삭제할 수 없습니다. 나중에 다시 시도해 주세요.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "당사의 파트너 Struktur AG는 호스팅된 시그널링 서버를 요청할 수 있는 서비스를 제공합니다. 이 경우 아래 양식만 작성하면 Nextcloud에서 요청하게 됩니다. 서버가 설정되면 인증 정보가 자동으로 채워집니다. 기존 신호 시그널링 설정을 덮어씁니다.", + "URL of this Nextcloud instance" : "이 Nextcloud 인스턴스의 URL", + "Full name of the user requesting the trial" : "평가판을 요청하는 사용자의 전체 이름", + "Email of the user" : "사용자의 이메일", + "Language" : "언어", + "Country" : "Country", + "Request signaling server trial" : "요청 신호 서버 평가판", + "You can see the current status of your hosted signaling server in the following table." : "당신은 다음 표에서 호스트된 시그널링 서버의 현재 상태를 볼 수 있습니다.", + "Status" : "상태", + "Created at" : "만든 날짜:", + "Expires at" : "만료 날짜", + "Limits" : "제한", + "Yes" : "예", + "No" : "아니오", + "Delete the signaling server account" : "신호 서버 계정 삭제", + "_%n user_::_%n users_" : ["%n명의 사용자"], + "Installed version: {version}" : "설치된 버전 : {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridge를 설치해 Nextcloud 토크를 다른 서비스에 연결할 수 있습니다. {linkstart1}GitHub page{linkend}에 방문해 자세히 알아보세요. 앱 다운로드와 설치에 시간이 걸릴 수 있습니다. 시간이 초과되는 경우 {linkstart2}Nextcloud 앱 스토어{linkend}에서 수동으로 설치하세요.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge 바이너리 파일을 찾을 수 없거나 실행할 수 없습니다.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "당신은 구성을 통해 Matterbridge 바이너리의 경로를 수동으로 설정할 수도 있습니다. 자세한 내용은 {linkstart}Matterbridge 통합 설명서{linkend}를 확인하십시오.", + "Downloading …" : "다운로드 중 ...", + "Install Talk Matterbridge" : "토크 Matterbridge 설치", + "An error occurred while installing the Matterbridge app" : "Matterbridge 앱을 설치하는 중 오류가 발생했습니다.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "토크에 Matterbridge를 설치하는 중 오류가 발생했습니다. 수동으로 설치해 주세요.", + "Failed to execute Matterbridge binary." : "Matterbridge 바이너리를 실행하지 못했습니다.", + "Matterbridge integration" : "Matterbridge 통합", + "Enable Matterbridge integration" : "Matterbridge 통합 사용", + "Status: Checking connection" : "상태: 연결 확인", + "OK: Running version: {version}" : "확인: 실행 중인 버전: {version}", + "Error: Server seems to be a Signaling server" : "오류: 서버가 시그널링 서버인 것 같습니다.", + "Recording backend URL" : "녹음/녹화 백엔드 URL", + "Validate SSL certificate" : "SSL 인증서 확인", + "Delete this server" : "이 서버 삭제", + "Test this server" : "이 서버 테스트", + "Disabled for all calls" : "모든 통화에 대해 비활성화됨", + "Enabled for all calls" : "모든 통화에 대해 활성화됨", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP의 \"upload_max_filesize\", \"post_max_size\"의 설정으로 인해 {maxUpload} 크기의 파일까지 업로드가 가능합니다.", + "Recording backend settings saved" : "녹음/녹화 백엔드 설정 저장됨", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "중재자는 동의를 대화 레벨에서 활성화하도록 허가됩니다. 각 참가자는 이 대화의 모든 통화에 참여하기 전에 녹음/녹화를 위한 동의가 필요합니다.", + "The consent to be recorded will be required for each participant before joining every call." : "통화에 참가하는 모든 이들에게 녹음/녹화에 대한 동의가 필요합니다.", + "The consent to be recorded is not required." : "녹음/녹화에 대한 동의가 필요하지 않습니다.", + "Add a new recording backend server" : "새 녹음/녹화 백엔드 추가", + "Shared secret" : "공유된 비밀 값", + "Recording consent" : "녹음/녹화 동의", + "SIP configuration saved!" : "SIP 설정 저장됨!", + "Enable SIP Dial-out option" : "SIP Dial-out 옵션 활성화", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "지원되는 SIP Dial-out 기능을 위해 시그널링 서버를 업데이트해야 합니다.", + "Restrict SIP configuration" : "SIP 구성 제한", + "Enable SIP configuration" : "SIP 구성 사용", + "Only users of the following groups can enable SIP in conversations they moderate" : "다음 그룹의 사용자만 이들이 중재자 권한으로 있는 대화에서 SIP를 사용할 수 있습니다.", + "Phone number (Country)" : "전화번호(국가)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "이 정보를 초대 이메일로 보냈으며 모든 참가자들의 사이드바에 표시했습니다.", + "High-performance backend URL" : "고성능 백엔드 URL", + "High-performance backend settings saved" : "고성능 백엔드 설정 저장됨", + "STUN server URL" : "STUN 서버 URL", + "The server address is invalid" : "서버 주소가 잘못되었습니다.", + "STUN settings saved" : "STUN 설정 저장됨", + "STUN servers" : "STUN 서버", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 서버는 라우터 뒤에 있는 참가자의 공인 IP 주소를 판단하는 데 사용합니다.", + "Add a new STUN server" : "새 STUN 서버 추가", + "{schema} scheme must be used with a domain" : "{schema} 스키마에 도메인을 사용해야 합니다.", + "{option1} and {option2}" : "{option1}(과)와 {option2}", + "{option} only" : "{option}만", + "OK: Successful ICE candidates returned by the TURN server" : "확인: TURN 서버에서 반환한 성공적인 ICE 후보", + "Error: No working ICE candidates returned by the TURN server" : "오류: TURN 서버에서 반환된 작동 중인 ICE 후보가 없습니다.", + "Testing whether the TURN server returns ICE candidates" : "TURN 서버가 ICE 후보를 반환하는지 테스트", + "TURN server schemes" : "TURN 서버 스키마", + "TURN server URL" : "TURN 서버 URL", + "TURN server secret" : "TURN 서버 비밀", + "TURN server protocols" : "TURN 서버 프로토콜", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 서버는 방화벽 뒤에 있는 참가자들의 트래픽을 중계하는 데 쓰입니다. 각 참가자가 서로에게 연결을 하지 못한다면 TURN 서버를 사용해야 할 가능성이 높습니다. {linkstart}이 문서{linkend}에서 설치 지침을 확인하세요.", + "TURN settings saved" : "TURN 설정 저장됨", + "TURN servers" : "TURN 서버", + "Add a new TURN server" : "새 TURN 서버 추가", + "Failed" : "실패", + "OK" : "확인", + "Checking …" : "검사 중…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "실패: WebAssembly가 이 브라우저에서 비활성화되었거나 지원되지 않습니다. WebAssembly를 활성화하거나 이를 지원하는 브라우저를 사용하여 확인하십시오.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "실패: \".wasm\" 및 \".tflite\" 파일이 웹 서버에서 제대로 반환되지 않았습니다. 토크의 문서에서 \"시스템 요구 사항\" 섹션을 확인하십시오.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "확인: \".wasm\" 및 \".tflite\" 파일이 웹 서버에서 정상적으로 반환되었습니다.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "현재 PHP와 Apache 설정이 호환되지 않는 것 같습니다. PHP는 오직 MPM_PREFORK 모듈과 함께 사용되어야 하며, PHP-FPM은 오직 MPM_EVENT 모듈과 함께 사용되어야 합니다.", + "Web server setup checks" : "웹 서버 설정 확인", + "Files required for virtual background can be loaded" : "가상 배경에 필요한 파일을 불러올 수 있습니다.", + "Federated user" : "연합 사용자", + "Assign participants to rooms" : "참가자를 대화방에 배정", + "Configure breakout rooms" : "소회의실 설정", + "Number of breakout rooms" : "소회의실 수", + "You can create from 1 to 20 breakout rooms." : "1개에서 20개의 소회의실을 만들 수 있습니다.", + "Assignment method" : "배정 방법", + "Automatically assign participants" : "참가자 자동 배정", + "Manually assign participants" : "참가자 수동 배정", + "Allow participants to choose" : "참가자가 선택하도록 허용", + "Create rooms" : "대화방 만들기", + "Confirm" : "확인", + "Create breakout rooms" : "소회의실 만들기", + "Reset" : "초기화", + "Delete breakout rooms" : "소회의실 삭제", + "Room {roomNumber}" : "{roomNumber}번 대화방", + "Current breakout rooms and settings will be lost" : "현재 소회의실의 설정이 모두 사라집니다.", + "Cancel" : "취소", + "Unassigned participants" : "배정되지 않은 참가자", + "Back" : "뒤로", + "Assign" : "배정", + "Add participant \"{user}\"" : "참가자 \"{user}\" 추가", + "Now" : "지금", + "Loading …" : "불러오는 중 ...", + "From" : "보낸사람", + "To" : "받는사람", + "Calendar" : "일정", + "Attendees" : "참석자", + "Save" : "저장", + "Search participants" : "참가자 찾기", + "No results" : "결과 없음", + "Done" : "완료", + "Raise hand" : "손들기", + "Raise hand (R)" : "손들기 (R)", + "Lower hand" : "손 내리기", + "Lower hand (R)" : "손 내리기 (R)", + "Exit full screen (F)" : "전체 화면 나가기 (F)", + "Full screen (F)" : "전체 화면 (F)", + "Speaker view" : "말하는 사람 보기", + "Grid view" : "바둑판식 보기", + "This conversation is read-only" : "이 대화는 읽기 전용입니다.", + "Reload" : "새로 고침", + "{nickName} raised their hand." : "{nickName}님이 손을 들었습니다.", + "A participant raised their hand." : "한 참가자가 손을 들었습니다.", + "Collapse stripe" : "스트라이프 접기", + "Expand stripe" : "스트라이프 확장", + "Previous page of videos" : "영상의 이전 페이지", + "Next page of videos" : "영상의 다음 페이지", + "Connecting …" : "연결 중...", + "Calling …" : "통화 거는 중...", + "Waiting for {user} to join the call" : "{user}님이 통화에 참가하기를 기다리고 있습니다.", + "Waiting for others to join the call …" : "다른 사람을 기다리는 중 …", + "You can invite others in the participant tab of the sidebar" : "사이드바의 참가자 탭에서 다른 사람들을 초대할 수 있음", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "당신은 사이드바의 참가자 탭에서 다른 사용자를 초대하거나 이 링크를 공유하여 다른 사용자를 초대할 수 있습니다!", + "Share this link to invite others!" : "다른 사람을 초대하려면 링크를 공유하십시오!", + "Copy link" : "링크 복사", + "You are not allowed to enable audio" : "오디오를 활성화할 수 없습니다.", + "No audio. Click to select device" : "오디오가 없습니다. 클릭해서 장치를 선택하세요.", + "Mute audio" : "소리 음소거", + "Mute audio (M)" : "소리 음소거(M)", + "Unmute audio" : "소리 음소거 해제", + "Unmute audio (M)" : "소리 음소거 해제(M)", + "None" : "없음", + "Access to camera was denied" : "카메라에 대한 접근이 거부되었습니다.", + "Error while accessing camera: It is likely in use by another program" : "카메라 액세스 오류: 다른 프로그램에서 사용 중일 수 있습니다.", + "Error while accessing camera" : "카메라에 접근하는 중 오류 발생", + "You have been muted by a moderator" : "당신이 중재자에 의해 음소거되었습니다.", + "You are not allowed to enable video" : "영상을 활성화할 수 없습니다.", + "No video. Click to select device" : "영상이 없습니다. 클릭해서 장치를 선택하세요.", + "Disable video" : "비디오 비활성화", + "Disable video (V)" : "영상 비활성화(V)", + "Enable video" : "영상 활성화", + "Enable video (V)" : "영상 활성화(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "영상 활성화 - 영상을 처음 활성화하면 연결이 잠깐 끊어집니다.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "영상 활성화(V) - 영상을 처음 활성화하면 연결이 잠시 중단됩니다.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "영상을 활성화합니다. 처음으로 영상을 활성화하면 연결이 잠시 중단됩니다.", + "Show presenter" : "발표자 표시", + "You" : "나", + "Mute" : "음소거", + "Muted" : "음소거됨", + "Show screen" : "화면 보이기", + "Stop following" : "따라가기 중지", + "Connection could not be established …" : "연결을 설정할 수 없습니다…", + "Connection was lost and could not be re-established …" : "연결이 끊어져 다시 설정할 수 없습니다...", + "Connection could not be established. Trying again …" : "연결을 설정할 수 없습니다. 다시 시도 중…", + "Connection lost. Trying to reconnect …" : "연결이 끊어졌습니다. 다시 연결하는 중…", + "Connection problems …" : "연결 문제 …", + "Collapse" : "접기", + "Expand" : "확장", + "You need to be logged in to upload files" : "파일을 업로드하려면 로그인해야 합니다.", + "Drop your files to upload" : "여기에 파일을 올려 업로드하기", + "Conversation messages" : "대화 메시지", + "Scroll to bottom" : "맨 아래로 스크롤", + "Post message" : "메시지 게시", + "Favorite" : "즐겨찾기", + "Date:" : "날짜:", + "Note:" : "메모:", + "Hide details" : "자세한 정보 숨기기", + "Show details" : "세부 정보", + "Error while updating conversation name" : "대화 이름을 설정하는 중 오류 발생", + "Error while updating conversation description" : "대화 설명을 업데이트하는 중 오류 발생", + "Enter a name for this conversation" : "이 대화의 이름을 입력하세요.", + "Edit conversation name" : "대화 이름 수정", + "Edit conversation description" : "대화 설명 편집", + "Enter a description for this conversation" : "이 대화에 대한 설명을 입력하세요.", + "Picture" : "사진", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "다음 봇들을 이 대화에서 활성화할 수 있습니다. 관리자에게 연락해 더 많은 봇들을 설치하세요.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "이 서버에 설치된 봇이 없습니다. 관리자에게 연락해 봇들을 설치하세요.", + "Disable" : "사용 안함", + "Enable" : "활성화", + "Breakout rooms" : "소회의실", + "Manage breakout rooms" : "소회의실 관리", + "Set up breakout rooms for this conversation" : "이 대화에 소회의실을 구성", + "Please select a valid PNG or JPG file" : "올바른 PNG 또는 JPG 파일을 선택하세요.", + "Choose your conversation picture" : "대화의 사진을 고르세요.", + "Choose" : "선택", + "Error setting conversation picture" : "대화의 사진을 설정하는 중 오류 발생", + "Could not set the conversation picture: {error}" : "대화의 사진을 설정할 수 없습니다: {error}", + "Error cropping conversation picture" : "사진을 자르는 중 오류 발생", + "Error removing conversation picture" : "대화의 사진을 제거하는 중 오류 발생", + "Set emoji as conversation picture" : "이모지를 대화의 사진으로 설정", + "Set background color for conversation picture" : "대화의 사진에 배경 색을 지정", + "Upload conversation picture" : "대화의 사진을 업로드", + "Choose conversation picture from files" : "대화의 사진을 파일에서 고르기", + "Remove conversation picture" : "대화의 사진 제거", + "The file must be a PNG or JPG" : "파일은 PNG 또는 JPG여야 합니다.", + "Set picture" : "사진 설정", + "Default permissions modified for {conversationName}" : "{conversationName}의 기본 권한이 수정되었습니다.", + "Could not modify default permissions for {conversationName}" : "{conversationName}의 기본 권한을 수정할 수 없습니다.", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "이 대화의 참가자에 대한 기본 권한을 편집합니다. 이 설정들은 중재자에게 영향을 미치지 않습니다.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "이 부분의 권한이 수정될 때마다, 이전에 각 참가자에게 배정된 맞춤 권한들이 사라집니다.", + "All permissions" : "모든 권한", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "참가자는 통화를 시작하고, 통화에 참가하고, 오디오 및 영상을 활성화하고, 화면을 공유할 수 있는 권한이 있습니다.", + "Restricted" : "제한됨", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "참가자는 통화에 참가할 수 있지만 중재자가 수동으로 권한을 부여할 때까지 오디오나 영상을 활성화하거나 화면을 공유할 수 없습니다.", + "Advanced permissions" : "고급 권한", + "Edit permissions" : "권한 수정", + "Conversation settings" : "대화 설정", + "Basic Info" : "기본 정보", + "Personal" : "개인", + "Moderation" : "중재", + "Setup overview" : "설정 개요", + "Breakout Rooms" : "소회의실", + "Matterbridge" : "Matterbridge", + "Bots" : "봇", + "Danger zone" : "위험 지역", + "Leave conversation" : "대화 나가기", + "You need to promote a new moderator before you can leave the conversation" : "대화를 떠나기 전 새 중재자를 임명해야 합니다.", + "Delete conversation" : "대화 삭제", + "Do you really want to delete \"{displayName}\"?" : "\"{displayName}\"(을)를 정말 삭제하시겠습니까?", + "Error while deleting conversation" : "대화를 삭제하는 동안 오류가 발생했습니다.", + "Delete all chat messages" : "모든 채팅 메시지 삭제", + "Do you really want to delete all messages in \"{displayName}\"?" : "정말 \"{displayName}\"의 모든 대화를 삭제하시겠습니까?", + "Error while clearing chat history" : "채팅 기록을 지우는 동안 오류가 발생했습니다.", + "Be careful, these actions cannot be undone." : "주의하세요. 이 작업은 취소할 수 없습니다.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "대화를 떠난 후 비공개 대화에 다시 참가하려면 초대가 필요합니다. 공개 대화는 언제든지 다시 참가할 수 있습니다.", + "Permanently delete this conversation." : "이 대화를 영구적으로 삭제합니다.", + "Delete chat messages" : "채팅 메시지 삭제", + "Permanently delete all the messages in this conversation." : "이 대화의 모든 메시지를 영구적으로 삭제합니다.", + "_%n hour_::_%n hours_" : ["%n시간"], + "_%n day_::_%n days_" : ["%n일"], + "_%n week_::_%n weeks_" : ["%n주"], + "Custom expiration time" : "만료 시간 정하기", + "Message expiration disabled" : "메시지 만료 비활성화", + "Message expiration set: {duration}" : "설정된 메시지 만료 기간: {duration}", + "Error when trying to set message expiration" : "메시지 만료 기간 설정 중 오류 발생", + "Message expiration" : "메시지 만료", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "채팅 메시지가 특정 시간 이후에 만료될 수 있습니다. 참고: 채팅에서 공유된 파일들은 소유자에게서 삭제 되지 않지만, 대화에서 더이상 공유되지 않습니다.", + "Set message expiration" : "메시지 만료 설정", + "Current message expiration" : "현재의 메시지 만료", + "Guest access" : "게스트 접속", + "Allow guests to join this conversation via link" : "손님이 링크를 통해 이 대화에 참가하도록 허용", + "Password protection" : "암호 보호", + "Set a password" : "암호 설정", + "Change password" : "암호 변경", + "Enter new password" : "새 암호 입력", + "Save password" : "암호 저장", + "Guests are allowed to join this conversation via link" : "손님이 링크를 통해 이 대화에 참여할 수 있습니다.", + "Guests are not allowed to join this conversation" : "손님은 이 대화에 참여할 수 없습니다.", + "Resend invitations" : "초대 재전송", + "This conversation is open to both registered users and users created with the Guests app" : "이 대화는 가입된 사용자와 Guests 앱을 통해 만들어진 사용자 모두에게 열려있습니다.", + "This conversation is open to registered users" : "이 대화는 가입된 사용자들에게 열려 있습니다.", + "This conversation is limited to the current participants" : "이 대화는 현재 참가자들로 제한되어 있습니다.", + "You opened the conversation to both registered users and users created with the Guests app" : "대화를 가입된 사용자와 Guests 앱을 통해 만들어진 사용자 모두에게 열었습니다.", + "Error occurred when opening or limiting the conversation" : "대화를 열거나 제한하는 중에 오류가 발생했습니다.", + "Open conversation to registered users, showing it in search results" : "대화를 가입된 사용자들에게 공개하고, 검색 결과에 표시", + "Also open to users created with the Guests app" : "또한 Guests 앱을 통해 생성된 사용자에게 공개됨", + "Open conversation" : "대화 공개", + "Start time has been updated" : "시작 시간이 업데이트 되었습니다.", + "Error occurred while updating start time" : "시작 시간을 업데이트하는 중에 오류 발생", + "Enabling the lobby will remove non-moderators from the ongoing call." : "로비를 활성화하면 진행 중인 통화에서 중재자가 아닌 이들이 제거됩니다.", + "Enable lobby, restricting the conversation to moderators" : "로비를 활성화하여 중재자들로 대화를 제한", + "Meeting start time" : "모임 시작 시간", + "Start time (optional)" : "시작 시간 (선택 사항)", + "Error occurred when locking the conversation" : "대화를 잠그는 동안 오류가 발생했습니다.", + "Error occurred when unlocking the conversation" : "대화 잠금을 해제하는 동안 오류가 발생했습니다.", + "Lock conversation" : "대화 잠금", + "This will also terminate the ongoing call." : "이렇게 하면 진행 중인 통화도 종료됩니다.", + "Lock the conversation to prevent anyone to post messages or start calls" : "아무도 메시지를 작성하거나 통화를 시작할 수 없도록 대화 잠그기", + "Edit" : "편집", + "More information" : "더 많은 정보", + "Delete" : "삭제", + "Add new bridged channel to current conversation" : "현재 대화에 새로운 채널 연결", + "unknown state" : "알 수 없는 상태", + "running" : "실행중", + "not running, check Matterbridge log" : "실행 중이지 않습니다. Matterbridge 로그를 확인하십시오.", + "not running" : "실행 중이지 않습니다.", + "Bridge saved" : "연결 저장", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge를 사용하여 다양한 인스턴트 메시징 시스템의 채널을 연결할 수 있습니다.", + "More info on Matterbridge" : "Matterbridge에 대한 더 많은 정보", + "Messaging systems" : "메시징 시스템", + "Enable bridge" : "가능한 연결", + "Show Matterbridge log" : "Matterbridge 로그 보기", + "Log content" : "로그 내용", + "Notifications" : "알림", + "Notify about calls in this conversation" : "이 대화의 통화에 대해 알림", + "Important conversation" : "중요한 대화", + "Recording consent is required for calls in this conversation" : "이 대화의 통화에서 녹음/녹화 동의 필요", + "Recording consent is not required for calls in this conversation" : "이 대화의 통화에서 녹음/녹화 동의 불필요", + "Recording consent requirement was updated" : "녹음/녹화 동의 필요 여부가 바뀌었습니다.", + "Error occurred while updating recording consent" : "녹음/녹화 동의를 바꾸는 중 오류 발생", + "Recording Consent" : "녹음/녹화 동의", + "Recording consent cannot be changed once a call or breakout session has started." : "녹음/녹화 동의는 통화나 소회의 세션이 시작되면 바꿀 수 없습니다.", + "Require recording consent before joining call in this conversation" : "이 대화에 참여하기 전 녹음/녹화 동의 필요", + "Recording consent is required for all calls" : "모든 통화에서 녹음/녹화 동의 필요", + "SIP dial-in is now possible without PIN requirement" : "이제 PIN 없이 SIP 전화 접속이 가능합니다.", + "SIP dial-in is now enabled" : "이제 SIP 전화 접속이 활성화됨", + "SIP dial-in is now disabled" : "이제 SIP 전화 접속을 사용할 수 없습니다.", + "Error occurred when enabling SIP dial-in" : "SIP 전화 접속을 활성화하는 동안 오류가 발생했습니다.", + "Error occurred when disabling SIP dial-in" : "SIP 전화 접속을 비활성화하는 동안 오류가 발생했습니다.", + "Phone and SIP dial-in" : "전화 및 SIP 전화 연결", + "Enable phone and SIP dial-in" : "전화 및 SIP 전화 연결 활성화", + "Allow to dial-in without a PIN" : "PIN 없이 전화 접속 허용", + "Join" : "참가", + "Error while creating the conversation" : "대화를 만드는 중에 오류 발생", + "Create a new conversation" : "새 대화 만들기", + "Join open conversations" : "공개 대화에 참가", + "Call a phone number" : "전화번호에 전화", + "Unread mentions" : "읽지 않은 언급", + "Create conversation" : "대화 만들기", + "Enter your name" : "이름을 입력하세요", + "Submit name and join" : "이름을 등록하고 참가", + "Log in" : "로그인", + "An error occurred while calling a phone number" : "전화번호에 전화하는 중 오류 발생", + "Phone number could not be called: {error}" : "전화번호에 전화할 수 없음: {error}", + "Phone number could not be called" : "전화번호에 전화할 수 없습니다.", + "Search participants or phone numbers" : "참가자 및 전화번호 검색", + "Creating the conversation …" : "대화 만드는 중...", + "Mark as read" : "읽은 것으로 표시", + "Mark as unread" : "읽지 않은 것으로 표시", + "Remove from favorites" : "즐겨찾기에서 제거", + "Add to favorites" : "즐겨찾기에 추가", + "You need to promote a new moderator before you can leave the conversation." : "대화를 종료하려면 새 중재자를 임명해야 합니다.", + "Conversation actions" : "대화 작업", + "Home" : "집", + "Unread" : "읽지 않음", + "Alphabetically" : "가나다순", + "No matches found" : "일치하는 항목 없음", + "No conversations found" : "대화를 찾을 수 없습니다.", + "You have no unread mentions." : "읽지 않은 언급이 없습니다.", + "You have no unread messages." : "읽지 않은 메시지가 없습니다.", + "An error occurred while performing the search" : "검색을 수행하는 동안 오류가 발생했습니다.", + "Conversation list" : "대화 목록", + "Unread messages" : "읽지 않은 메시지", + "Clear filters" : "필터링 제거", + "New personal note" : "새 개인 메모", + "Clear filter" : "필터 지우기", + "App settings" : "앱 설정", + "Users" : "사용자", + "Groups" : "그룹", + "Other sources" : "다른 출처", + "Open conversations" : "대화 열기", + "No search results" : "검색 결과 없음", + "Users and groups" : "사용자와 그룹", + "The meeting will start soon" : "회의가 곧 시작됩니다.", + "This meeting is scheduled for {startTime}" : "모임이 {startTime}에 예정되었습니다.", + "You are currently waiting in the lobby" : "대화방 로비에서 대기 중입니다.", + "Select microphone" : "마이크 선택", + "No microphone available" : "사용 가능한 마이크 없음", + "Select camera" : "카메라 선택", + "No camera available" : "사용 가능한 카메라 없음", + "Select a device" : "장치 선택", + "Test" : "테스트", + "Devices" : "장치", + "Backgrounds" : "배경", + "No audio" : "오디오 없음", + "No camera" : "카메라 없음", + "Calls are not supported in your browser" : "이 브라우저가 통화를 지원하지 않습니다.", + "Access to microphone is only possible with HTTPS" : "HTTPS를 통해서만 마이크에 액세스할 수 있음", + "Access to microphone was denied" : "마이크 접근이 거부되었습니다.", + "Error while accessing microphone" : "마이크에 접근하는 중 오류 발생", + "Access to camera is only possible with HTTPS" : "HTTPS에서만 카메라에 접근할 수 있습니다.", + "The call is being recorded." : "통화가 녹음/녹화되고 있습니다.", + "The call might be recorded." : "통화가 녹음/녹화됩니다.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "녹음/녹화는 당신의 목소리, 카메라의 화상, 화면 공유를 포함할 수 있습니다. 통화에 참여하기 전 당신의 동의가 필요합니다.", + "Give consent to the recording of this call" : "이 통화의 녹화/녹음에 동의", + "Start recording immediately with the call" : "통화하는 즉시 녹음/녹화를 시작", + "Apply settings" : "설정 적용", + "Select virtual office background" : "가상 사무실 배경 선택", + "Select virtual home background" : "가상 집 배경 선택", + "Select virtual abstract background" : "가상 추상화 배경 선택", + "Select virtual beach background" : "가상 해변 배경 선택", + "Select virtual park background" : "가상 공원 배경 선택", + "Select virtual theater background" : "가상 극장 배경 선택", + "Select virtual library background" : "가상 도서관 배경 선택", + "Select virtual space station background" : "가상 우주 정거장 배경 선택", + "Error while uploading the file" : "파일 업로드 중 오류 발생", + "Select a file" : "파일 선택", + "Invalid path selected" : "잘못된 경로가 선택됨", + "Select virtual background from file {fileName}" : "{fileName}파일에서 가상 배경 선택", + "Blur" : "흐림", + "Upload" : "업로드", + "Files" : "파일", + "(editing)" : "(수정중)", + "(edited)" : "(수정됨)", + "The message has expired or has been deleted" : "메시지가 만료되었거나 삭제되었습니다.", + "Cancel quote" : "인용 취소", + "24 hours" : "24시간", + "7 days" : "7일", + "Clear reminder – {timeLocale}" : "알림 지우기 – {timeLocale}", + "Message text copied to clipboard" : "메시지 텍스트를 클립보드에 복사했습니다.", + "Message text could not be copied" : "메시지 텍스트를 클립보드에 복사할 수 없습니다.", + "Message forwarded to \"Note to self\"" : "메시지가 \"나에게 메모\"로 전달되었습니다", + "Error while forwarding message to \"Note to self\"" : "메시지를 \"나에게 메모\"로 전달하는 중 오류 발생", + "A reminder was successfully removed" : "알림이 성공적으로 제거되었습니다.", + "Error occurred when removing a reminder" : "알림을 제거하는 중 오류가 발생했습니다.", + "A reminder was successfully set at {datetime}" : "알림이 {datetime}(으)로 성공적으로 설정되었습니다.", + "Error occurred when creating a reminder" : "알림을 만드는 중 오류가 발생했습니다.", + "Add a reaction to this message" : "이 메시지에 반응 추가", + "Reply" : "답장", + "More actions" : "더 많은 동작", + "Set reminder" : "알림 설정", + "Reply privately" : "비공개로 답장", + "Edit message" : "메시지 편집", + "Copy message" : "메시지 복사", + "Copy message link" : "메시지 링크 복사", + "Go to file" : "파일로 이동", + "Forward message" : "메시지 전달", + "Translate" : "번역:", + "Set custom reminder" : "사용자 지정 알림 설정", + "Close reactions menu" : "반응 메뉴 닫기", + "React with {emoji}" : "{emoji}(으)로 반응", + "React with another emoji" : "다른 이모지로 반응", + "Choose a conversation to forward the selected message." : "선택한 메시지를 전달할 대화를 선택하세요.", + "Error while forwarding message" : "메시지를 전달하는 동안 오류가 발생했습니다.", + "The message has been forwarded to {selectedConversationName}" : "메시지를 {selectedConversationName}에 전달했습니다.", + "Dismiss" : "무시", + "Go to conversation" : "대화로 이동", + "Detect language" : "언어 감지", + "The message could not be translated" : "메시지를 번역할 수 없습니다.", + "Translation copied to clipboard" : "번역을 클립보드로 복사함", + "Translation could not be copied" : "번역을 복사할 수 없습니다.", + "Translate message" : "메시지 번역", + "Source language to translate from" : "번역될 원본의 언어", + "Translate from" : "다음을 번역", + "Target language to translate into" : "번역할 목표 언어", + "Translate to" : "다음으로 번역", + "Translating" : "번역 중", + "Copy translated text" : "번역한 텍스트 복사", + "Send now" : "지금 보내기", + "Message read by everyone who shares their reading status" : "읽기 상태를 공개한 모든 사용자가 메시지를 읽음", + "Message sent" : "메시지 보냄", + "Deleting message" : "메시지 삭제", + "Message deleted successfully" : "메시지가 성공적으로 삭제됨", + "Message could not be deleted because it is too old" : "메시지가 너무 오래되어 삭제할 수 없습니다.", + "Only normal chat messages can be deleted" : "일반 채팅 메시지만 삭제할 수 있습니다.", + "An error occurred while deleting the message" : "메시지를 지우는 중 오류 발생", + "Your browser does not support playing audio files" : "귀하의 브라우저는 오디오 파일 재생을 지원하지 않습니다.", + "Contact" : "연락처", + "{stack} in {board}" : "{board}의 {stack}", + "Deck Card" : "덱 카드", + "Remove {fileName}" : "{fileName} 제거", + "Open this location in OpenStreetMap" : "OpenStreetMap에서 이 위치를 엽니다.", + "Sending message" : "메시지 보내는 중", + "Failed to send the message. Click to try again" : "메시지를 보내지 못했습니다. 다시 시도하려면 클릭하세요.", + "Not enough free space to upload file" : "파일을 업로드할 여유 공간이 부족합니다.", + "You cannot send messages to this conversation at the moment" : "지금은 이 대화에 메시지를 보낼 수 없습니다.", + "_%n vote_::_%n votes_" : ["%n 표"], + "Open poll" : "투표 열기", + "See results" : "결과 보기", + "No permission to post reactions in this conversation" : "이 대화에 반응을 게시할 권한이 없습니다.", + "Add more reactions" : "반응 더 추가", + "Show or collapse system messages" : "시스템 메시지를 보이거나 접기", + "No messages" : "메시지가 없음", + "All messages have expired or have been deleted." : "모든 메시지가 삭제되었거나 만료되었습니다.", + "Cancel search" : "검색 취소", + "Add a phone number" : "전화번호를 추가하세요.", + "All set, the conversation \"{conversationName}\" was created." : "모두 설정했으며, \"{conversationName}\" 대화가 만들어졌습니다.", + "Create a new group conversation" : "새 그룹 대화 생성", + "Add participants" : "참가자 추가", + "Conversation visibility" : "대화 가시성", + "Allow guests to join via link" : "링크를 통해 손님이 참가하도록 허용", + "Enter password" : "암호 입력", + "This conversation has been locked" : "이 대화는 잠겨있습니다.", + "No permission to post messages in this conversation" : "이 대화에 메시지를 게시할 수 있는 권한이 없음", + "Joining conversation …" : "대화에 들어가는 중...", + "Send message" : "메시지 보내기", + "Send without notification" : "알림 없이 전송", + "File to share" : "공유할 파일", + "Add emoji" : "이모지 추가", + "Send later" : "나중에 보내기", + "Cancel editing" : "수정 취소", + "{user} is out of office and might not respond." : "{user}가 부재중이어서 응답하지 않을 수 있습니다.", + "Share from {nextcloud}" : "{nextcloud}에서 공유", + "Share from Files" : "파일에서 공유", + "Share files to the conversation" : "대화로 파일 공유", + "Upload from device" : "이 기기에서 업로드", + "Create new poll" : "새 투표 만들기", + "Smart picker" : "스마트 피커", + "Record voice message" : "음성 메시지 녹음", + "End recording and send" : "녹음 종료 및 보내기", + "Dismiss recording" : "녹음 무시", + "Access to the microphone was denied" : "마이크에 대한 액세스가 거부되었습니다.", + "Microphone either not available or disabled in settings" : "마이크를 사용할 수 없거나 설정에서 비활성화됨", + "Error while recording audio" : "녹음 중 오류", + "New file" : "새 파일", + "Blank" : "여백", + "Error while creating file" : "파일을 만드는 중 오류 발생", + "Create and share a new file" : "새 파일을 만들고 공유", + "Name of the new file" : "새 파일의 이름", + "Create file" : "파일 만들기", + "Someone is typing …" : "누군가 입력 중입니다…", + "{user1} is typing …" : "{user1}님이 입력 중입니다…", + "{user1} and {user2} are typing …" : "{user1}님과 {user2}님이 입력 중입니다…", + "{user1}, {user2} and {user3} are typing …" : "{user1}님, {user2}님과 {user3}님이 입력 중입니다…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}님, {user2}님, {user3}님과 %n명의 사람들이 입력 중입니다…"], + "Add more files" : "파일 더 추가", + "Send" : "보내기", + "In this conversation {user} can:" : "이 대화에서 {user}님이 할 수 있는 것:", + "Edit default permissions for participants in {conversationName}" : "{conversationName}의 참가자들의 기본 권한 수정", + "Start a call" : "통화 시작", + "Skip the lobby" : "로비 건너 뛰기", + "Can post messages and reactions" : "메시지 게시 및 반응 가능", + "Enable the microphone" : "마이크 활성화", + "Enable the camera" : "카메라 활성화", + "Share the screen" : "화면 공유", + "Update permissions" : "권한 업데이트", + "Updating permissions" : "권한 업데이트", + "Create poll" : "투표 만들기", + "Question" : "질문", + "Ask a question" : "질문하기", + "Answers" : "답변", + "Answer {option}" : "답변 {option}", + "Delete poll option" : "투표 옵션 삭제", + "Add answer" : "답변 추가", + "Settings" : "설정", + "Anonymous poll" : "익명 투표", + "Multiple answers" : "여러 개의 답변", + "You voted for this option" : "이 옵션에 투표했습니다.", + "End poll" : "투표를 끝내다", + "Change your vote" : "투표 수정", + "Results" : "결과들", + "Voted participants" : "투표한 참가자", + "Send a message to \"{roomName}\"" : "\"{roomName}\"에 메시지 보내기", + "Hide list of participants" : "참가자 목록 숨기기", + "Show list of participants" : "참가자 목록 보이기", + "Assistance requested in {roomName}" : "{roomName}에서 요청한 지원", + "The message was sent to \"{roomName}\"" : "메시지를 \"{roomName}\"에 전송했습니다.", + "Dismiss request for assistance" : "지원 요청 무시", + "Send message to room" : "대화방에 메시지 보내기", + "Back to main room" : "주 대화방으로 돌아가기", + "Back to your room" : "대화방으로 돌아가기", + "Message all rooms" : "모든 대화방에 메시지 보내기", + "Start session" : "세션 시작", + "Start a call before you start a breakout room session" : "소회의실을 시작하기 전 통화 시작하기", + "Stop session" : "세션 중단", + "The message was sent to all breakout rooms" : "메시지를 모든 소회의실에 전송했습니다.", + "Send a message to all breakout rooms" : "모든 소회의실에 메시지 보내기", + "Breakout rooms are not started" : "소회의실을 시작하지 않았습니다.", + "Disable lobby" : "로비 비활성화", + "Settings for participant \"{user}\"" : "참가자 \"{user}\"에 대한 설정", + "Participant \"{user}\"" : "참가자 \"{user}\"", + "moderator" : "중재자", + "bot" : "봇", + "guest" : "손님", + "{time} talking …" : "{time} 대화중…", + "{time} talking time" : "대화한 시간 {time}", + "Raised their hand" : "(이)가 손을 들었습니다.", + "Joined with video" : "영상과 함께 참가", + "Joined via phone" : "전화기와 결합됨", + "Joined with audio" : "소리와 함께 참가", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "텍스트가 {maxLength}글자보다 짧거나 같아야 합니다. 현재 텍스트가 {charactersCount}글자입니다.", + "Remove group and members" : "그룹 및 구성원 제거", + "Remove participant" : "참가자 삭제", + "Notification was sent to {displayName}" : "{displayName}님에게 알림을 보냈습니다.", + "Could not send notification to {displayName}" : "{displayName}님에게 알림을 보낼 수 없음", + "Permissions granted to {displayName}" : "{displayName}님에게 권한이 부여됨", + "Could not modify permissions for {displayName}" : "{displayName}님의 권한을 수정할 수 없음", + "Permissions removed for {displayName}" : "{displayName}님의 권한이 제거됨", + "Permissions set to default for {displayName}" : "{displayName}님의 권한이 기본 값으로 설정됨", + "in the lobby" : "로비에서", + "Dial out phone" : "전화 걸기", + "Hang up phone" : "전화 끊기", + "Move back to lobby" : "로비로 나가기", + "Move to conversation" : "대화로 이동", + "Dial-in PIN" : "전화 접속 PIN", + "Demote from moderator" : "중재자 권한 박탈", + "Promote to moderator" : "중재자 권한 부여", + "Resend invitation" : "초대 재전송", + "Send call notification" : "통화 알림 보내기", + "Dial out phone number" : "전화번호로 전화 걸기", + "Resume call for phone number" : "전화번호로 전화 재개", + "Reset custom permissions" : "사용자 정의 권한 재설정", + "Grant all permissions" : "모든 권한 승인", + "Remove all permissions" : "모든 권한 제거", + "Remove" : "삭제", + "Permissions modified for {displayName}" : "{displayName}님의 권한이 수정됨", + "Add users or groups" : "사용자나 그룹 추가", + "Add users" : "사용자 추가", + "Add groups" : "그룹 추가", + "Add other sources" : "다른 출처 추가", + "Add emails" : "이메일 추가", + "Integrations" : "통합", + "Add federated users" : "연합 사용자 추가", + "Searching …" : "검색 중...", + "Search for more users" : "사용자 더 검색", + "Search or add participants" : "참가자 검색 및 추가", + "Invitation was sent to {actorId}" : "{actorId}님에게 초대를 보냈습니다.", + "An error occurred while adding the participants" : "참가자를 추가하는 동안 오류가 발생했습니다.", + "Participants" : "참가자", + "Participants ({count})" : "참가자({count})", + "Open chat" : "대화방 열기", + "You have new unread messages in the chat." : "채팅에 읽지 않은 새 메시지가 있습니다.", + "You have been mentioned in the chat." : "채팅에서 언급되었습니다.", + "Chat" : "대화", + "Details" : "세부사항", + "Shared items" : "공유된 항목들", + "Until" : "까지", + "No results found" : "결과 없음", + "Load more results" : "더 많은 결과 불러오기", + "Projects" : "프로젝트", + "No shared items" : "공유된 항목이 없습니다.", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "대화 링크", + "No open conversations found" : "공개 대화를 찾을 수 없습니다", + "Either there are no open conversations or you joined all of them." : "공개 대화가 없거나 모두 참가했습니다.", + "Check spelling or use complete words." : "맞춤법을 확인하거나 완전한 단어를 사용하세요.", + "Search conversations or users" : "대화 또는 사용자 검색", + "Select conversation" : "대화 선택", + "Display name: {name}" : "표시되는 이름: {name}", + "Edit display name" : "표시 이름 수정", + "Save name" : "이름 저장", + "Error while saving sounds setting" : "소리 설정을 저장하는 중 오류가 발생했습니다.", + "Play sounds when participants join or leave a call" : "참가자가 통화에 들어오거나 나갈 때 소리 재생", + "Notification settings" : "알림 설정", + "Default language" : "기본 언어", + "Select location for attachments" : "첨부 파일 위치 선택", + "Error while setting attachment folder" : "첨부 파일 폴더 설정 중 오류 발생", + "Error while setting read status privacy" : "읽기 상태 개인 정보를 설정하는 중 오류 발생", + "Error while setting typing status privacy" : "입력 상태 공개 설정을 하는 동안 오류 발생", + "Privacy" : "프라이버시", + "Attachments folder" : "첨부 파일 폴더", + "Toggle full screen" : "전체 화면 전환", + "Search" : "검색", + "Focus the chat input" : "채팅 입력에 포커스", + "Unfocus the chat input to use shortcuts" : "바로 가기를 사용하려면 채팅 입력 포커스 해제", + "Shortcuts while in a call" : "통화 중 바로 가기", + "Camera on and off" : "카메라 켜기 및 끄기", + "Microphone on and off" : "마이크 켜고 끄기", + "Raise or lower hand" : "손을 들거나 내리기", + "Push to talk or push to mute" : "눌러서 대화 또는 음소거", + "Start call silently" : "조용히 통화 시작", + "Start call" : "통화 시작", + "You will be able to join the call only after a moderator starts it." : "중재자가 통화를 시작한 후에만 통화에 참할 수 있습니다.", + "End call for everyone" : "모든 이들에 대해 통화 끝내기", + "Starting the recording" : "녹음/녹화 시작 중", + "Recording" : "녹음/녹화 중", + "The call has been running for one hour." : "통화가 한 시간동안 진행되었습니다.", + "Cancel recording start" : "녹음/녹화 시작 취소", + "Stop recording" : "녹음/녹화 중단", + "Send a reaction" : "반응 보내기", + "React with {reaction}" : "{reaction}(으)로 반응하기", + "_%n participant in call_::_%n participants in call_" : ["%n명의 참가자가 통화 중"], + "You are not allowed to enable screensharing" : "화면 공유를 활성화할 수 없습니다.", + "No screensharing" : "화면 공유 없음", + "Screensharing options" : "화면 공유 옵션", + "Enable screensharing" : "화면 공유 활성화", + "Bad sent video and screen quality." : "전송하는 영상 및 화면 품질이 좋지 않습니다.", + "Bad sent screen quality." : "전송하는 화면의 품질이 좋지 않습니다.", + "Bad sent video quality." : "전송하는 영상의 품질이 좋지 않습니다.", + "Bad sent audio, video and screen quality." : "전송하는 소리와 영상 및 화면의 품질이 좋지 않습니다.", + "Bad sent audio and screen quality." : "전송하는 소리 및 화면의 품질이 좋지 않습니다.", + "Bad sent audio and video quality." : "전송하는 소리와 영상의 품질이 좋지 않습니다.", + "Bad sent audio quality." : "전송된 소리의 품질이 좋지 않습니다.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 배경 흐림을 끄거나 영상을 비활성화 해보세요.", + "Disable background blur" : "배경 흐림 비활성화", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 볼 수 없을 수도 있습니다.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 배경 흐림을 끄거나 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없거나 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 비활성화 해보세요.", + "Disable screenshare" : "화면 공유 끄기", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 배경 흐림이나 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다.", + "Screen sharing is not supported by your browser." : "이 브라우저에서는 화면 공유를 지원하지 않습니다.", + "Screen sharing requires the page to be loaded through HTTPS." : "화면을 공유하려면 HTTPS를 통해 페이지를 로드 해야 합니다.", + "Screensharing requires the page to be loaded through HTTPS." : "화면 공유를 사용하려면 HTTPS로 페이지를 불러 와야 합니다.", + "An error occurred while starting screensharing." : "화면 공유를 시작하는 중 오류가 발생했습니다.", + "Show your screen" : "내 화면 보이기", + "Stop screensharing" : "화면 공유 중지", + "Mute others" : "다른 사람 음소거", + "Start recording" : "녹음/녹화 시작", + "Set up breakout rooms" : "소회의실 구성", + "Remove participant {name}" : "참가자 {name} 제거", + "Keep" : "보관", + "Open dialpad" : "다이얼패드 열기", + "Select a region" : "지역 선택", + "Search …" : "...를 검색", + "Message without mention" : "언급이 없는 메시지", + "Mention myself" : "자신을 언급하기", + "The conversation does not exist" : "대화가 존재하지 않습니다.", + "Join a conversation or start a new one!" : "대화에 참가하거나 새 대화를 시작하세요!", + "Duplicate session" : "중복 세션", + "Creating and joining a conversation with \"{userid}\"" : "{userid}님과의 대화를 생성하고 참가합니다", + "Join a conversation or start a new one" : "대화에 참가하거나 새 대화 시작", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 사용자", + "User password" : "사용자 암호", + "Talk conversation" : "토크 대화", + "Skip TLS verification" : "TLS 확인 건너뛰기", + "Matrix server URL" : "Matrix 서버 URL", + "User" : "사용자", + "Matrix channel" : "Matrix 채널", + "Mattermost server URL" : "Mattermost 서버 URL", + "Mattermost user" : "Mattermost 사용자", + "Team name" : "팀명", + "Channel name" : "채널 이름", + "Rocket.Chat server URL" : "Rocket.Chat 서버 URL", + "User name or email address" : "사용자 이름 또는 이메일 주소", + "Rocket.Chat channel" : "Rocket.Chat 채널", + "Zulip server URL" : "Zulip 서버 URL", + "Bot user name" : "봇 사용자 이름", + "Bot API key" : "봇 API 키 ", + "Zulip channel" : "Zulip 채널", + "API token" : "API 토큰", + "Slack channel" : "Slack 채널", + "Server ID or name" : "서버 아이디 또는 이름", + "Channel" : "채널", + "Login" : "로그인", + "Chat ID" : "채팅 아이디", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 서버 URL (e.g. chat.freenode.net:6667)", + "Nickname" : "별명", + "Connection password" : "연결 암호", + "IRC channel" : "IRC 채널", + "Channel password" : "채널 암호", + "NickServ nickname" : "NickServ 닉네임", + "NickServ password" : "NickServ 암호", + "Use TLS" : "TLS 사용", + "Use SASL" : "SASL 사용", + "Tenant ID" : "Tenant 아이디", + "Client ID" : "클라이언트 ID", + "Team ID" : "팀 아이디", + "Thread ID" : "Thread 아이디", + "XMPP/Jabber server URL" : "XMPP/Jabber 서버 URL", + "MUC server URL" : "MUC 서버 URL", + "Jabber ID" : "Jabber 아이디", + "Media" : "미디어", + "Polls" : "투표", + "Deck cards" : "덱 카드", + "Voice messages" : "음성 메시지", + "Locations" : "위치", + "Call recordings" : "통화 녹음/녹화", + "Audio" : "오디오", + "Show all media" : "모든 미디어 표시", + "Show all files" : "모든 파일 보기", + "Show all polls" : "모든 투표 보기", + "Show all deck cards" : "모든 덱 카드 보기", + "Show all voice messages" : "모든 음성 메시지 보기", + "Show all locations" : "모든 위치 표시", + "Show all call recordings" : "모든 통화 녹음/녹화 보기", + "Show all audio" : "모든 오디오 표시", + "Show all other" : "다른 모든 항목 표시", + "Group" : "그룹", + "Team" : "팀", + "You reconnected to the call" : "통화에 다시 연결했습니다.", + "{actor} reconnected to the call" : "{actor}님이 통화에 다시 연결했습니다.", + "You and {user0} left the call" : "당신과 {user0}님이 통화를 떠났습니다.", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["당신과 {user0}님 및 %n명의 참가자가 통화를 떠났습니다."], + "{user0} and {user1} left the call" : "{user0}님과 {user1}님이 통화를 떠났습니다.", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}님과 {user1}님 및 %n명의 참가자가 통화를 떠났습니다."], + "You: {lastMessage}" : "당신: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(당신에 의해 수정됨)", + "(edited by a deleted user)" : "(삭제된 사용자에 의해 수정됨)", + "(edited by {moderator})" : "({moderator}에 의해 수정됨)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "다른 창이나 기기에서 세션이 작동 중일 때 대화에 참가하려고 합니다. 이 기능은 현재 Nextcloud 토크에서 지원되지 않습니다. 어떻게 할까요?", + "Leave this page" : "이 페이지 떠나기", + "Join here" : "여기에 참가", + "An error occurred while posting deck card to conversation" : "대화에 덱 카드를 게시하는 동안 오류가 발생했습니다.", + "Post to a conversation" : "대화에 게시", + "Post to conversation" : "대화에 게시", + "The recording failed. Please contact your administrator." : "녹음/녹화가 실패했습니다. 관리자에게 연락해 주세요.", + "An error occurred while posting location to conversation" : "대화에 위치를 게시하는 동안 오류가 발생했습니다.", + "Share to a conversation" : "대화에 공유", + "Share to conversation" : "대화에 공유", + "Error while clearing conversation history" : "대화 기록을 지우는 동안 오류가 발생했습니다.", + "Error occurred while allowing guests" : "손님을 허용하는 동안 오류가 발생했습니다.", + "Error occurred while disallowing guests" : "손님을 불허용하는 동안 오류가 발생했습니다.", + "Error occurred when restricting the conversation to moderator" : "대화를 진행자로 제한하는 동안 오류가 발생했습니다.", + "Error occurred when opening the conversation to everyone" : "모든 사용자에게 대화를 여는 동안 오류가 발생했습니다.", + "Conversation password has been saved" : "대화 암호가 저장되었습니다.", + "Conversation password has been removed" : "대화 암호가 제거되었습니다.", + "Error occurred while saving conversation password" : "대화 암호를 저장하는 동안 오류가 발생했습니다.", + "Call recording is starting." : "통화 녹화/녹음을 시작하고 있습니다.", + "Call recording stopped while starting." : "통화 녹음/녹화가 시작 중 중단되었습니다.", + "Call recording stopped. You will be notified once the recording is available." : "통화 녹음/녹화가 중단되었습니다. 가능해지면 다시 알려드리겠습니다.", + "Conversation picture set" : "대화 사진 설정됨", + "Conversation picture deleted" : "대화 사진 삭제됨", + "Could not delete the conversation picture" : "대화 사진을 삭제할 수 없음", + "Could not post message: {errorMessage}" : "메시지를 게시할 수 없음 : {errorMessage}", + "An error occurred while fetching the participants" : "참가자를 가져오는 동안 오류가 발생했습니다.", + "Could not send invitation to {actorId}" : "{actorId}님에게 초대를 보낼 수 없음", + "Invitations sent" : "초대 전송됨", + "Error occurred when sending invitations" : "초대장을 보내는 동안 오류가 발생했습니다.", + "An error occurred while creating breakout rooms" : "소회의실을 만드는 중 오류가 발생했습니다.", + "An error occurred while re-ordering the attendees" : "참석자를 재정렬 하는 동안 오류가 발생했습니다.", + "An error occurred while deleting breakout rooms" : "소회의실을 삭제하는 동안 오류가 발생했습니다.", + "An error occurred while starting breakout rooms" : "소회의실을 시작하는 동안 오류가 발생했습니다.", + "An error occurred while stopping breakout rooms" : "소회의실을 중단하는 동안 오류가 발생했습니다.", + "An error occurred while sending a message to the breakout rooms" : "소회의실에 메시지를 보내는 동안 오류가 발생했습니다.", + "An error occurred while requesting assistance" : "지원을 요청하는 동안 오류가 발생했습니다.", + "An error occurred while resetting the request for assistance" : "지원 요청을 재설정 하는 동안 오류가 발생했습니다.", + "An error occurred while joining breakout room" : "소회의실에 참가하는 동안 오류가 발생했습니다.", + "{guest} (guest)" : "{guest}님(손님)", + "An error occurred while submitting your vote" : "투표를 제출하는 중 오류가 발생했습니다.", + "An error occurred while ending the poll" : "투표를 끝내는 중 오류가 발생했습니다.", + "Failed to add reaction" : "반응을 추가하는 데 실패했습니다.", + "Failed to remove reaction" : "반응을 삭제하는 데 실패했습니다.", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" 파일을 업로드하는 중 오류 발생", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" 파일을 업로드할 여유 공간이 없음", + "You are not allowed to share files" : "파일을 공유할 수 없습니다.", + "Error while sharing file" : "파일 공유하는 도중 오류", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "사용 중인 브라우저는 Nextcloud 토크에서 완전히 지원되지 않습니다. 최신 버전의 Mozilla Firefox, Microsoft Edge, Google Chrome, Opera 또는 Apple Safari를 사용하세요.", + "Later today – {timeLocale}" : "오늘 나중 – {timeLocale}", + "Tomorrow – {timeLocale}" : "내일 – {timeLocale}", + "This weekend – {timeLocale}" : "이번 주말 – {timeLocale}", + "Next week – {timeLocale}" : "다음주 – {timeLocale}", + "Message link copied to clipboard" : "메시지 링크가 클립보드에 복사되었습니다.", + "Conversation link copied to clipboard" : "대화 링크가 클립보드에 복사되었습니다.", + "The link could not be copied" : "링크를 복사할 수 없습니다.", + "Sending signaling message has failed" : "시그널링 메시지를 보내지 못했습니다.", + "Lost connection to signaling server. Trying to reconnect." : "시그널링 서버와의 연결이 끊어졌습니다. 다시 연결하는 중입니다.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "시그널링 서버가 이 버전의 Nextcloud와 호환되도록 업데이트 해야 합니다. 관리자에게 연락해주세요.", + "Please reload the page." : "페이지를 새로 고치십시오.", + "Do not disturb" : "방해 금지", + "Away" : "자리 비움", + "Microphone {number}" : "마이크 {number}", + "Camera {number}" : "카메라 {number}", + "Speaker {number}" : "스피커 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "음소거 된 상태로 말하고 있는 것 같습니다. 다른 사람이 들을 수 있도록 자신의 음소거를 해제하세요.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "하나 이상의 참가자와 연결을 맺을 수 없습니다. 이 상황에 TURN 서버가 필요할 수 있습니다. 관리자가 {linkstart}이 문서{linkend}를 따라 설정하도록 요청해 주세요.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "예상보다 오래 걸립니다. 미디어 권한을 이미 허가 또는 거부하셨나요? 그렇다면 소리 및 영상을 사용하지 못하므로 브라우저를 다시 시작하세요.", + "Access to microphone & camera is only possible with HTTPS" : "마이크와 카메라에는 HTTPS로만 접근할 수 있음", + "Please move your setup to HTTPS" : "설정을 HTTPS로 바꾸십시오.", + "Access to microphone & camera was denied" : "마이크 및 카메라 접근이 거부됨", + "WebRTC is not supported in your browser" : "웹 브라우저에서 WebRTC를 지원하지 않음", + "Please use a different browser like Firefox or Chrome" : "Firefox 및 Chrome과 같은 다른 웹 브라우저를 사용하십시오", + "Error while accessing microphone & camera" : "마이크와 카메라에 접근하는 중 오류 발생", + "%s Talk on your mobile devices" : "모바일 기기에서 %s Talk 사용하기", + "Join conversations at any time, anywhere, on any device." : "언제 어디서나, 원하는 기기에서 대화에 참가하세요.", + "Android app" : "Android 앱", + "iOS app" : "iOS 앱", + "__language_name__" : "한국어", + "Tasks" : "작업", + "Notes" : "메모", + "Reports" : "리포트들", + "Set reminder for later today" : "알림을 오늘 나중으로 설정", + "Set reminder for tomorrow" : "알림을 내일로 설정", + "Set reminder for this weekend" : "알림을 이번 주말로 설정", + "Set reminder for next week" : "알림을 다음주로 설정", + "Open poll • You voted already" : "투표 열기 • 이미 투표함", + "Open poll • Click to vote" : "투표 열기 • 클릭해 투표", + "Poll • Ended" : " 투표 • 종료됨", + "Talk recording from {time} ({conversation})" : "{time}의 대화 녹음 ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["투표 결과 • %n개 표"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["투표 열기 • %n표"], + "Submit vote" : "투표하기", + "Your privacy setting has been saved" : "개인 정보 설정이 저장되었습니다.", + "Failed to save sounds setting" : "소리 설정을 저장하지 못했습니다.", + "Sounds setting saved" : "소리 설정이 저장되었습니다.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "다른 창이나 기기에서 대화에 참가했습니다. 이 기능은 현재 Nextcloud 토크에서 지원되지 않으며, 현재 세션은 종료됩니다." +}, +"nplurals=1; plural=0;"); diff --git a/l10n/ko.json b/l10n/ko.json new file mode 100644 index 0000000..e5bce4d --- /dev/null +++ b/l10n/ko.json @@ -0,0 +1,1604 @@ +{ "translations": { + "a conversation" : "대화", + "(Duration %s)" : "(시간 %s)", + "You attended a call with {user1}" : "{user1} 님과의 통화에 참가함", + "_%n guest_::_%n guests_" : ["손님 %n명"], + "You attended a call with {user1} and {user2}" : "{user1}, {user2} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}, {user2}, {user3} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1}, {user2}, {user3}, {user4} 님과의 통화에 참가함", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1}, {user2}, {user3}, {user4}, {user5} 님과의 통화에 참가함", + "_%n other_::_%n others_" : ["외 %n명"], + "{actor} invited you to {call}" : "{actor} 님이 {call}에 초대함", + "You were invited to a conversation or had a call" : "당신은 대화에 초대되었거나 통화를 했습니다.", + "Other activities" : "다른 활동", + "Talk" : "토크", + "Guest" : "손님", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud 토크에 오신 것을 환영합니다.\n이 대화에서 Nextcloud 토크에서 사용 가능한 새 기능들에 대해 알아볼 수 있습니다.", + "## New in Talk %s" : "## Talk %s의 새로운 기능", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 이제 Edge와 Safari 브라우저를 음성 통화와 영상 통화에 사용할 수 있습니다.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 이제 일대일 대화가 지속되며 더 이상 실수로 그룹 대화로 전환되지 않습니다. 또한 참가자 중 한 명이 대화에서 나가더라도 대화는 더 이상 자동으로 삭제되지 않습니다. 두 참가자가 모두 나가는 경우에만 서버에서 대화가 삭제됩니다.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 당신은 \"@all\"을 채팅에 기재하여 참가자들에게 알릴 수 있습니다.", + "- With the \"arrow-up\" key you can repost your last message" : "- \"방향키 위\" 키로 마지막 메시지를 다시 보낼 수 있습니다.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- 이제 토크에서 명령어를 사용할 수 있습니다. 관리자가 설정한 명령어를 확인하려면, 채팅에 \"/help\"를 입력하세요.", + "- With projects you can create quick links between conversations, files and other items" : "- 당신은 프로젝트를 통해 대화, 파일 및 기타 항목 간에 빠른 링크를 생성할 수 있습니다.", + "- You can now mention guests in the chat" : "- 이제 채팅 메시지로 손님 계정을 언급할 수 있습니다.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 대화에 로비를 만들 수 있습니다. 다른 사용자와 손님들이 대기하는 동안, 중재자들이 미리 채팅에 참가하여 모임을 준비할 수 있습니다.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 이제 메시지에 직접 회신하여 다른 사용자에게 메시지의 내용을 더 자세히 설명할 수 있습니다.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 이제 대화 및 참가자를 검색하면 기존 대화를 필터링하여 이전 대화를 훨씬 쉽게 찾을 수 있습니다.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 이제 서클 앱이 설치되어 있으면 대화에 커스텀 사용자 그룹을 추가할 수 있습니다.", + "- Check out the new grid and call view" : "- 새로운 그리드 및 통화 화면을 확인하세요.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 이제 기기에서 채팅으로 곧바로 파일을 업로드 하고 드래그&드롭 할 수 있습니다.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 이제 공유된 파일을 채팅 화면에서 뷰어 앱을 통해 직접 열 수 있습니다.", + "- You can now search for chats and messages in the unified search in the top bar" : "- 상단 바의 검색을 통해 채팅이나 메시지를 검색할 수 있습니다.", + "- Spice up your messages with emojis from the emoji picker" : "- 이모티콘 선택을 통해 이모티콘을 사용하여 대화를 꾸며보세요.", + "- You can now change your camera and microphone while being in a call" : "- 통화중에 당신의 카메라와 마이크를 변경할 수 있습니다.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 대화에 설명을 추가하여, 로그인한 사용자들이 쉽게 찾고 참가할 수 있도록 할 수 있습니다.", + "- See a read status and send failed messages again" : "- 읽음 상태를 보고 실패한 메시지를 다시 보냅니다.", + "- Raise your hand in a call with the R key" : "- R 키를 사용하여 통화 중 손을 들어보세요.", + "- Join the same conversation and call from multiple devices" : "- 여러 기기에서 같은 대화에 참가하고, 통화할 수 있습니다.", + "- Send voice messages, share your location or contact details" : "- 음성 메시지를 보내거나, 위치 또는 연락처 정보를 공유하세요.", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 대화에 그룹을 추가하면 새 그룹 구성원이 자동으로 참가자로 추가", + "- A preview of your audio and video is shown before joining a call" : "- 통화에 참가하기 전에 자신의 음성과 영상을 미리 볼 수 있습니다.", + "- You can now blur your background in the newly designed call view" : "- 이제 새로 디자인된 통화 보기에서 배경을 흐리게 할 수 있습니다.", + "- Moderators can now assign general and individual permissions to participants" : "- 중재자는 이제 참가자에게 일반 및 개별 권한을 할당할 수 있습니다.", + "- You can now react to chat messages" : "- 이제 채팅 메시지에 반응할 수 있습니다.", + "- In the sidebar you can now find an overview of the latest shared items" : "- 이제 사이드바에서 최신 공유 항목의 개요를 찾을 수 있습니다.", + "- Use a poll to collect the opinions of others or settle on a date" : "- 의견이나 일정을 조율하기 위해 투표를 사용할 수 있습니다.", + "- Configure an expiration time for chat messages" : "- 채팅 메시지에 표시 만료 기한을 설정하세요.", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 단체 대화방에서 다른 참가자에게 알리지 않고 통화를 시작할 수 있습니다. 통화를 시작한 이후 참가자에게 개별적으로 통화 알림을 보낼 수 있습니다.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 급한 일이 아니라면, 받는이에게 알림이 가지 않는 채팅 메시지를 보낼 수 있습니다.", + "- Emojis can now be autocompleted by typing a \":\"" : "- \":\"를 입력해서 이모지를 자동 완성으로 보낼 수 있습니다.", + "- Link various items using the new smart-picker by typing a \"/\"" : "\"/\"를 눌러 새로운 스마트 피커를 사용하여 다양한 아이템을 연결하세요.", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 중재자는 이제 소회의실들을 만들 수 있습니다. (High-performance backend 필요)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 통화는 이제 저장될 수 있습니다. (High-performance backend 필요)", + "- Conversations can now have an avatar or emoji as icon" : "- 이제 대화에서 아바타와 이모지를 아이콘으로 사용할 수 있습니다.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 이제 영상 통화에서 흐린 배경 외에도 가상 배경을 사용할 수 있습니다.", + "- Reactions are now available during calls" : "- 이제 통화중 반응을 할 수 있습니다.", + "- Typing indicators show which users are currently typing a message" : "- 타이핑 표시기는 현재 어떤 사용자가 메시지를 입력하고 있는지 보여줍니다.", + "- Groups can now be mentioned in chats" : "- 이제 채팅에서 그룹을 언급할 수 있습니다.", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 전사 제공자 앱이 등록된 경우 통화 녹음이 자동으로 전사됩니다.", + "- Chat messages can be translated if a translation provider app is registered" : "- 번역 제공자 앱이 등록된 경우 채팅 메시지를 번역할 수 있습니다.", + "- **Markdown** can now be used in _chat_ messages" : "- 이제 _채팅_ 메시지에서 **마크다운**을 사용할 수 있습니다.", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- 웹훅을 통해 봇을 사용할 수 있습니다. 자세한 정보는 문서를 참조하십시오. https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 채팅 메시지에 알림을 설정하여 나중에 다시 확인하십시오", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **나에게 메모** 대화방을 사용하여 메모를 남기고 복수의 기기에서 정보를 공유하십시오.", + "- Captions allow to send a message with a file at the same time" : "- 파일과 파일에 대한 설명을 동시에 발송할 수 있습니다.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 발언자의 영상이 이제 화면 공유시 표시되며, 통화에서의 반응이 애니메이션화 됩니다.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 내용은 이제 로그인한 생성자나 중재자에 의해 6시간 동안 편집이 가능합니다.", + "- Unsent message drafts are now saved in your browser" : "- 보내지 않은 메세지 초안은 이제 브라우저에 저장됩니다.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 다른 토크서버와의 문자대화는 이제 연합으로 가능해 집니다.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 이제 중재자는 대화에 다시 참여하지 못하도록 계정과 게스트를 차단할 수 있습니다.", + "Talk updates ✅" : "토크 업데이트 내역 ✅", + "Reaction deleted by author" : "작성자가 삭제한 반응", + "{actor} created the conversation" : "{actor}님이 대화방을 만들었습니다.", + "You created the conversation" : "대화방을 만들었습니다.", + "System created the conversation" : "시스템에서 대화를 만들었습니다.", + "An administrator created the conversation" : "관리자가 대화를 만들었습니다.", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}님이 대화방의 이름을 \"%1$s\" 에서 \"%2$s\"로 변경했습니다.", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "당신이 대화의 이름을 %1$s 에서 %2$s 로 변경했습니다.", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "관리자가 대화의 이름을 \"%1$s\"에서 \"%2$s\"(으)로 변경했습니다.", + "{actor} set the description" : "{actor}님이 설명을 설정했습니다.", + "You set the description" : "대화방 정보를 설정했습니다.", + "An administrator set the description" : "관리자가 설명을 설정합니다.", + "{actor} removed the description" : "{actor}님이 설명을 삭제했습니다.", + "You removed the description" : "당신이 설명을 삭제했습니다.", + "An administrator removed the description" : "관리자가 설명을 삭제했습니다.", + "You started a call" : "통화를 시작했습니다.", + "{actor} started a call" : "{actor}님이 통화를 시작했습니다.", + "Incoming call" : "수신 통화", + "{actor} joined the call" : "{actor}님이 통화에 참가했습니다.", + "You joined the call" : "통화에 참가했습니다.", + "{actor} left the call" : "{actor}님이 통화를 떠났습니다.", + "You left the call" : "통화를 떠났습니다.", + "{actor} unlocked the conversation" : "{actor}님이 대화 제한을 해제했습니다.", + "You unlocked the conversation" : "당신이 대화 잠금을 풀었습니다.", + "An administrator unlocked the conversation" : "관리자가 대화 잠금을 풀었습니다.", + "{actor} locked the conversation" : "{actor}님이 대화를 제한했습니다.", + "You locked the conversation" : "당신이 대화를 잠갔습니다.", + "An administrator locked the conversation" : "관리자가 대화를 잠갔습니다.", + "{actor} limited the conversation to the current participants" : "{actor}이/가 현재 참가자들로 대화를 제한하였습니다.", + "You limited the conversation to the current participants" : "현재 참가자들로 대화를 제한하였습니다.", + "An administrator limited the conversation to the current participants" : "관리자가 현재 참가자들로 대화를 제한하였습니다.", + "{actor} opened the conversation to registered users" : "{actor}이/가 등록된 사용자에게 대화를 열었습니다.", + "You opened the conversation to registered users" : "등록된 사용자에게 대화를 열었습니다.", + "An administrator opened the conversation to registered users" : "관리자가 등록된 사용자에게 대화를 열었습니다.", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor}님이 가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "You opened the conversation to registered users and users created with the Guests app" : "가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "관리자가 가입된 사용자들과 Guests 앱을 통해 만들어진 사용자들에게 대화를 열었습니다.", + "The conversation is now open to everyone" : "이 대화는 모든 사람들에게 열려 있습니다.", + "{actor} opened the conversation to everyone" : "{actor}님이 대화를 모두에게 허용했습니다.", + "You opened the conversation to everyone" : "당신이 대화를 모든 사람들에게 열었습니다.", + "{actor} restricted the conversation to moderators" : "{actor}님이 대화를 중재자만 허용했습니다.", + "You restricted the conversation to moderators" : "당신이 대화를 중재자들로 제한했습니다.", + "{actor} started breakout rooms" : "{actor}님이 소회의실을 시작했습니다.", + "You started breakout rooms" : "소회의실을 시작했습니다.", + "{actor} stopped breakout rooms" : "{actor}님이 소회의실을 중지했습니다.", + "You stopped breakout rooms" : "소회의실을 중지했습니다.", + "{actor} allowed guests" : "{actor}님이 손님 계정을 허용했습니다.", + "You allowed guests" : "손님을 허용했습니다.", + "An administrator allowed guests" : "관리자가 손님을 허용했습니다.", + "{actor} disallowed guests" : "{actor}님이 손님 계정을 불허용했습니다.", + "You disallowed guests" : "손님을 불허용했습니다.", + "An administrator disallowed guests" : "관리자가 손님을 불허용했습니다.", + "{actor} set a password" : "{actor}님이 암호를 설정했습니다.", + "You set a password" : "당신이 암호를 설정했습니다.", + "An administrator set a password" : "관리자가 암호를 설정했습니다.", + "{actor} removed the password" : "{actor}님이 암호를 제거했습니다.", + "You removed the password" : "당신이 암호를 제거했습니다.", + "An administrator removed the password" : "관리자가 암호를 제거했습니다.", + "{actor} added {user}" : "{actor}님이 {user}님을 초대했습니다.", + "You joined the conversation" : "대화에 참가했습니다.", + "{actor} joined the conversation" : "{actor}님이 대화에 참가했습니다.", + "You added {user}" : "{user}님을 추가했습니다.", + "{actor} added you" : "{actor}님이 당신을 초대했습니다.", + "An administrator added you" : "관리자가 당신을 추가했습니다.", + "An administrator added {user}" : "관리자가 {user}님을 추가했습니다.", + "You left the conversation" : "당신이 대화를 떠났습니다.", + "{actor} left the conversation" : "{actor}님이 대화를 떠났습니다.", + "{actor} removed {user}" : "{actor}님이 {user}님을 내보냈습니다.", + "You removed {user}" : "{user}님을 제거했습니다.", + "{actor} removed you" : "{actor}님이 당신을 내보냈습니다.", + "An administrator removed you" : "관리자가 당신을 제거했습니다.", + "An administrator removed {user}" : "관리자가 {user}님을 제거했습니다.", + "{actor} invited {federated_user}" : "{actor}님이 {federated_user}님을 초대했습니다", + "You invited {federated_user}" : "{federated_user}님을 초대했습니다.", + "An administrator invited {federated_user}" : "관리자가 {federated_user}님을 초대했습니다.", + "{federated_user} accepted the invitation" : "{federated_user}님이 초대를 수락함", + "{actor} removed {federated_user}" : "{actor}님이 {federated_user}님을 제거함", + "You removed {federated_user}" : "{federated_user}님을 제거함", + "An administrator removed {federated_user}" : "관리자가 {federated_user}님을 제거함", + "{federated_user} declined the invitation" : "{federated_user}님이 초대를 거부함", + "{actor} added group {group}" : "{actor}님이 {group} 그룹을 추가함", + "You added group {group}" : "{group} 그룹을 추가함", + "An administrator added group {group}" : "관리자가 {group} 그룹을 추가함", + "{actor} removed group {group}" : "{actor}님이 {group} 그룹을 제거함", + "You removed group {group}" : "{group} 그룹을 제거함", + "An administrator removed group {group}" : "관리자가 {group} 그룹을 제거함", + "{actor} added {phone}" : "{actor}님이 {phone}(을)를 추가했습니다.", + "You added {phone}" : "{phone}(을)를 추가했습니다.", + "An administrator added {phone}" : "관리자가 {phone}(을)를 추가했습니다.", + "{actor} removed {phone}" : "{actor}님이 {phone}(을)를 제거했습니다.", + "You removed {phone}" : "{phone}(을)를 제거했습니다.", + "An administrator removed {phone}" : "관리자가 {phone}(을)를 제거했습니다.", + "{actor} promoted {user} to moderator" : "{actor}님이 {user}님에게 중재자 권한을 부여했습니다.", + "You promoted {user} to moderator" : "{user}님에게 중재자 권한을 부여했습니다.", + "{actor} promoted you to moderator" : "{actor}님이 당신에게 중재자 권한을 부여했습니다.", + "An administrator promoted you to moderator" : "관리자가 당신에게 중재자 권한을 부여했습니다.", + "An administrator promoted {user} to moderator" : "관리자가 {user}님에게 중재자 권한을 부여했습니다. ", + "{actor} demoted {user} from moderator" : "{actor}님이 {user}님의 중재자 권한을 제거했습니다.", + "You demoted {user} from moderator" : "당신이 {user}의 진행자 권한을 제거했습니다.", + "{actor} demoted you from moderator" : "{actor}님이 당신의 중재자 권한을 제거했습니다.", + "An administrator demoted you from moderator" : "관리자가 당신의 중재자 권한을 제거했습니다.", + "An administrator demoted {user} from moderator" : "관리자가 {user}의 중재자 권한을 제거했습니다.", + "{actor} shared a file which is no longer available" : "{actor}님이 더 이상 사용할 수 없는 파일을 공유했습니다.", + "You shared a file which is no longer available" : "당신이 더 이상 사용할 수 없는 파일을 공유했습니다.", + "The shared location is malformed" : "공유된 위치가 잘못되었습니다.", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor}님이 이 대화를 다른 채팅과 동기화 하기 위해 Matterbridge를 구성했습니다.", + "You set up Matterbridge to synchronize this conversation with other chats" : "이 대화를 다른 채팅과 동기화 하기 위해 Matterbridge를 구성했습니다.", + "{actor} updated the Matterbridge configuration" : "{actor}님이 Matterbridge 구성을 수정했습니다.", + "You updated the Matterbridge configuration" : "Matterbridge 구성을 수정했습니다.", + "{actor} removed the Matterbridge configuration" : "{actor}님이 Matterbridge 구성을 제거했습니다.", + "You removed the Matterbridge configuration" : "Matterbridge 구성을 제거했습니다.", + "{actor} started Matterbridge" : "{actor}님이 Matterbridge를 시작했습니다.", + "You started Matterbridge" : "Matterbridge를 시작했습니다.", + "{actor} stopped Matterbridge" : "{actor}님이 Matterbridge를 중단했습니다.", + "You stopped Matterbridge" : "Matterbridge를 중단했습니다.", + "{actor} deleted a message" : "{actor}님이 메시지를 삭제했습니다.", + "You deleted a message" : "메시지를 삭제했습니다.", + "{actor} edited a message" : "{actor}님이 메시지를 수정했습니다.", + "You edited a message" : "메시지를 수정했습니다.", + "{actor} deleted a reaction" : "{actor}님이 반응을 삭제했습니다.", + "You deleted a reaction" : "반응을 삭제했습니다.", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["메시지의 유효 기간을 %n주로 설정했습니다."], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["메시지의 유효 기간을 %n일로 설정했습니다."], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["메시지의 유효 기간을 %n시간으로 설정했습니다."], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["메시지의 유효 기간을 %n분으로 설정했습니다."], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}님이 메시지의 유효 기간을 %n주로 설정했습니다."], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}님이 메시지의 유효 기간을 %n일로 설정했습니다."], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}님이 메시지의 유효 기간을 %n시간으로 설정했습니다."], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}님이 메시지의 유효 기간을 %n분으로 설정했습니다."], + "{actor} disabled message expiration" : "{actor}님이 메시지의 유효 기간을 해제했습니다.", + "You disabled message expiration" : "메시지의 유효 기간을 해제했습니다.", + "{actor} cleared the history of the conversation" : "{actor}님이 대화의 기록을 지웠습니다.", + "You cleared the history of the conversation" : "대화의 기록을 지웠습니다.", + "{actor} set the conversation picture" : "{actor}님이 대화의 사진을 설정했습니다.", + "You set the conversation picture" : "대화의 사진을 설정했습니다.", + "{actor} removed the conversation picture" : "{actor}님이 대화의 사진을 제거했습니다.", + "You removed the conversation picture" : "대화에 사진을 제거했습니다.", + "{actor} ended the poll {poll}" : "{actor}님이 {poll} 투표를 끝냈습니다.", + "You ended the poll {poll}" : "{poll} 투표를 끝냈습니다.", + "{actor} started the video recording" : "{actor}님이 녹화를 시작했습니다.", + "You started the video recording" : "녹화를 시작했습니다.", + "{actor} stopped the video recording" : "{actor}님이 녹화를 중단했습니다.", + "You stopped the video recording" : "녹화를 중단했습니다.", + "{actor} started the audio recording" : "{actor}님이 녹음을 시작했습니다.", + "You started the audio recording" : "녹음을 시작했습니다.", + "{actor} stopped the audio recording" : "{actor}님이 녹음을 중단했습니다.", + "You stopped the audio recording" : "녹음을 중단했습니다.", + "The recording failed" : "녹음/녹화를 하지 못했습니다.", + "Someone voted on the poll {poll}" : "누군가가 {poll} 투표에 투표했습니다.", + "Message deleted by author" : "작성자가 메시지를 삭제함", + "Message deleted by {actor}" : "{actor}님이 메시지를 삭제함", + "Message deleted by you" : "메시지를 삭제함", + "Deleted user" : "삭제된 사용자", + "Unknown number" : "알 수 없는 번호", + "Administration" : "관리", + "System" : "시스템", + "%s (guest)" : "%s (손님)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor}님이 %n명의 손님이 있는 통화를 끝냈습니다. (길이: {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor}님이 {user1}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor}님이 {user1}, {user2}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}, {user4}님과의 통화를 끝냈습니다. (길이: {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor}님이 {user1}, {user2}, {user3}, {user4}, {user5}님과의 통화를 끝냈습니다. (길이: {duration})", + "Message of {user} in {conversation}" : "{conversation}에서 {user}님의 메시지", + "Message of {user}" : "{user}님의 메시지", + "Message of a deleted user in {conversation}" : "{conversation}에서 삭제된 사용자의 메시지", + "Talk conversations" : "토크 대화 목록", + "Talk to %s" : "%s 님과 대화", + "An error occurred. Please contact your administrator." : "오류가 발생했습니다. 관리자에게 연락해 주세요.", + "Storage quota exceeded" : "저장소 할당량 초과됨", + "File not found" : "파일을 찾을 수 없음", + "File is not shared, or shared but not with the user" : "파일을 공유하지 않았거나, 사용자에게 공유하지 않았습니다.", + "No account available to delete." : "삭제할 수 있는 계정이 없습니다.", + "Poll" : "투표", + "No image file provided" : "이미지 파일을 제공 받지 않음", + "File is too big" : "파일이 너무 큼", + "Invalid file provided" : "잘못된 파일 지정됨", + "Invalid image" : "잘못된 사진", + "Unknown filetype" : "알 수 없는 파일 형식", + "Talk mentions" : "토크 인용 목록", + "Say hi to your friends and colleagues!" : "여러분의 친구 및 동료들에게 인사하세요!", + "No unread mentions" : "읽지 않은 언급 없음", + "Call in progress" : "통화 진행중", + "You were mentioned" : "당신이 언급되었습니다.", + "Write to conversation" : "대화에 기록하기", + "Writes event information into a conversation of your choice" : "선택한 대화에 일정에 대한 정보를 기록합니다.", + "Conversation invitation" : "대화 초대", + "Description" : "설명", + "You can also dial-in via phone with the following details" : "다음 세부 정보를 참고하여 전화를 걸 수도 있습니다.", + "Dial-in information" : "전화 접속 정보", + "Meeting ID" : "모임 ID", + "Your PIN" : "당신의 PIN", + "Meeting" : "회의", + "Password request: %s" : "암호 요구사항: %s", + "Private conversation" : "비공개 대화", + "Deleted user (%s)" : "삭제된 사용자 (%s)", + "Failed to upload call recording" : "통화 녹음/녹화를 업로드하지 못했습니다.", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "녹음/녹화 서버가 {call} 통화의 녹음/녹화를 업로드하지 못했습니다. 관리자에게 연락해 주세요.", + "Share to chat" : "채팅에 공유", + "Dismiss notification" : "알림 해제", + "Call recording now available" : "현재 통화 녹음/녹화 사용 가능", + "The recording for the call in {call} was uploaded to {file}." : "{call} 통화의 녹음/녹화를 {file}에 업로드했습니다.", + "Transcript now available" : "현재 전사 사용 가능", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 통화의 전사를 {file}에 업로드했습니다.", + "Failed to transcript call recording" : "통화의 녹음을 전사하지 못했습니다.", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "서버가 {call} 통화의 {file} 녹음 파일을 전사하지 못했습니다. 관리자에게 연락해 주세요.", + "Accept" : "수락", + "Decline" : "거절", + "New message" : "새로운 메시지", + "Reminder" : "알림", + "Notification" : "공지", + "Reminder: You in {call}" : "알림: {call}의 당신", + "Reminder: {user} in {call}" : "알림: {call}의 {user}님", + "Reminder: Deleted user in {call}" : "알림: {call}의 삭제된 사용자", + "Reminder: {guest} (guest) in {call}" : "알림: {call}의 {guest}님(손님)", + "Reminder: Guest in {call}" : "알림: {call}의 손님", + "{user} reacted with {reaction}" : "{user}님이 {reaction}(으)로 반응했습니다.", + "{user} reacted with {reaction} in {call}" : "{user}님이 {call}에서 {reaction}(으)로 반응했습니다.", + "Deleted user reacted with {reaction} in {call}" : "삭제된 사용자가 {call}에서 {reaction}(으)로 반응했습니다.", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}님(손님)이 {call}에서 {reaction}(으)로 반응했습니다.", + "Guest reacted with {reaction} in {call}" : "손님이 {call}에서 {reaction}(으)로 반응했습니다.", + "{user} in {call}" : "{user} 가 {call} 상태 ", + "Deleted user in {call}" : "{call}에서 삭제된 사용자", + "{guest} (guest) in {call}" : "{guest}님(손님) {call} 상태", + "Guest in {call}" : "손님 {call} 상태", + "{user} sent you a private message" : "{user}님이 당신에게 비공개 메시지를 보냈습니다.", + "{user} sent a message in conversation {call}" : "{user}님이 대화에서 {call}메시지를 전송했습니다.", + "A deleted user sent a message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 메시지를 전송했습니다.", + "{guest} (guest) sent a message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 메시지를 전송했습니다. ", + "A guest sent a message in conversation {call}" : "손님이 {call} 대화에서 메시지를 전송했습니다.", + "{user} replied to your private message" : "{user}님이 당신의 비공개 메시지에 답변했습니다.", + "{user} replied to your message in conversation {call}" : "{user}님이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "A deleted user replied to your message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신의 메시지에 답변했습니다. ", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "A guest replied to your message in conversation {call}" : "손님이 {call} 대화에서 당신의 메시지에 답변했습니다.", + "Reminder: You in private conversation {call}" : "알림: 비공개 대화 {call}의 당신", + "Reminder: A deleted user in private conversation {call}" : "알림: 비공개 대화 {call}의 삭제된 사용자", + "Reminder: {user} in private conversation" : "알림: 비공개 대화의 {user}님", + "Reminder: You in conversation {call}" : "알림: 대화 {call}의 당신", + "Reminder: {user} in conversation {call}" : "알림: 대화 {call}의 {user}님", + "Reminder: A deleted user in conversation {call}" : "알림: 대화 {call}의 삭제된 사용자", + "Reminder: {guest} (guest) in conversation {call}" : "알림: 대화 {call}의 {guest}님(손님)", + "Reminder: A guest in conversation {call}" : "알림: 대화 {call}의 손님", + "{user} reacted with {reaction} to your private message" : "{users}님이 당신의 비공개 메시지에 {reaction}(으)로 반응했습니다.", + "{user} reacted with {reaction} to your message in conversation {call}" : "{users}님이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "A guest reacted with {reaction} to your message in conversation {call}" : "손님이 {call} 대화에서 당신의 메시지에 {reaction}(으)로 반응했습니다.", + "{user} mentioned you in a private conversation" : "{user}님이 비공개 대화에서 당신을 언급했습니다.", + "{user} mentioned group {group} in conversation {call}" : "{users}님이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "{user} mentioned everyone in conversation {call}" : "{users}님이 {call} 대화에서 모두를 언급했습니다.", + "{user} mentioned you in conversation {call}" : "{user}님이 {call} 대화에서 당신을 언급했습니다.", + "A deleted user mentioned group {group} in conversation {call}" : "삭제된 사용자가 {call} 대화에서 {group} 그룹을 언급했습니다.", + "A deleted user mentioned everyone in conversation {call}" : "삭제된 사용자가 {call} 대화에서 모두를 언급했습니다.", + "A deleted user mentioned you in conversation {call}" : "삭제된 사용자가 {call} 대화에서 당신을 언급했습니다.", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 모두를 언급했습니다.", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}님(손님)이 {call} 대화에서 당신을 언급했습니다.", + "A guest mentioned group {group} in conversation {call}" : "손님이 {call} 대화에서 {group} 그룹을 언급했습니다.", + "A guest mentioned everyone in conversation {call}" : "손님이 {call} 대화에서 모두를 언급했습니다.", + "A guest mentioned you in conversation {call}" : "손님이 {call} 대화에서 당신을 언급했습니다.", + "View message" : "메시지 보기", + "Dismiss reminder" : "알림 무시", + "View chat" : "채팅 보기", + "{user} invited you to a group conversation: {call}" : "{user} 가 당신을 그룹 대화 {call}에 초대했습니다.", + "Join call" : "통화 참가하기", + "Answer call" : "통화 응답", + "{user} would like to talk with you" : "{user}님이 당신과 대화하길 원합니다.", + "Call back" : "다시 통화", + "You missed a call from {user}" : "당신이 {user}님의 통화를 놓쳤습니다.", + "A group call has started in {call}" : "그룹 통화가 {call}에 시작됨", + "You missed a group call in {call}" : "{call}의 그룹 통화를 놓쳤습니다.", + "{email} is requesting the password to access {file}" : "{email}(이)가 {file}에 접근하기 위한 암호를 요청합니다.", + "{email} tried to request the password to access {file}" : "{email}(이)가 {file}에 접근하기 위한 암호를 요청하려 시도했습니다.", + "Someone is requesting the password to access {file}" : "어떤 사람이 {file}에 접근하기 위한 암호를 요청합니다.", + "Someone tried to request the password to access {file}" : "어떤 사람이 {file} 에접근하기 위한 암호를 요청하려 시도했습니다.", + "Open settings" : "설정 열기", + "Hosted signaling server added" : "호스트된 시그널링 서버 추가됨", + "The hosted signaling server is now configured and will be used." : "이제 호스트된 시그널링 서버가 구성되었으며 사용됩니다.", + "Hosted signaling server removed" : "호스트된 시그널링 서버 제거됨", + "The hosted signaling server was removed and will not be used anymore." : "호스트된 시그널링 서버가 제거되었으며 더 이상 사용되지 않습니다.", + "Hosted signaling server changed" : "호스트된 시그널링 서버 변경됨", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "호스트된 신호 서버 계정 상태를 \"{oldstatus}\" 에서 \"{newstatus}\" 로 변경했습니다.", + "pending" : "보류 중", + "active" : "활성", + "expired" : "만료됨", + "blocked" : "차단됨", + "error" : "오류", + "The certificate of {host} expires in {days} days" : "{host}의 인증서가 {days}일 후 만료됩니다.", + "The certificate of {host} expired" : "{host}의 인증서가 만료되었습니다.", + "Contact via Talk" : "토크로 연락", + "Open Talk" : "토크 열기", + "Default" : "기본값", + "Presentation" : "프레젠테이션", + "Webinar" : "웨비나", + "Conversations" : "대화", + "Messages in current conversation" : "현재 대화의 메시지", + "{user}" : "{user}", + "Messages" : "메시지", + "{user} in {conversation}" : "{conversation}의 {user}", + "Messages in other conversations" : "다른 대화의 메시지", + "One-to-one rooms always need to show the other users avatar" : "일대일 대화방은 항상 아바타를 다른 사용자에게 표시해야 합니다.", + "Invalid emoji character" : "잘못된 이모지 문자", + "Invalid background color" : "잘못된 배경 색", + "Avatar image is not square" : "아바타 사진이 정사각형이 아님", + "Room {number}" : "{number}번 대화방", + "Other" : "기타", + "Failed to request trial because the trial server is unreachable. Please try again later." : "평가판 서버에 연결할 수 없으므로 평가판을 요청하지 못했습니다. 나중에 다시 시도해 주십시오.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "이 인스턴스를 인증하는 데 문제가 있습니다. 인스턴스의 URL을 확인하기 위해 외부에서 연결할 수 없는 것일 수 있습니다.", + "Something unexpected happened." : "예상하지 못한 일이 일어났습니다.", + "The URL is invalid." : "URL이 잘못되었습니다.", + "An HTTPS URL is required." : "HTTPS URL이 필요합니다.", + "The email address is invalid." : "이메일 주소가 잘못되었습니다.", + "The language is invalid." : "언어가 잘못되었습니다.", + "The country is invalid." : "국가가 잘못되었습니다.", + "There is a problem with the request of the trial. Please check your logs for further information." : "평가판의 요청에 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "Too many requests are send from your servers address. Please try again later." : "서버 주소에서 너무 많은 요청을 보냅니다. 나중에 다시 시도해 주십시오.", + "There is already a trial registered for this Nextcloud instance." : "이 Nextcloud 인스턴스에 대한 평가판이 이미 등록되어 있습니다.", + "Something unexpected happened. Please try again later." : "예상하지 못한 일이 일어났습니다. 나중에 다시 시도해 주십시오.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "평가판 서버의 동작이 잘못되어 평가판을 요청하지 못했습니다. 나중에 다시 시도해 주십시오.", + "Trial requested but failed to get account information. Please check back later." : "평가판이 요청되었지만 계정 정보를 가져오지 못했습니다. 나중에 다시 확인하십시오.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "이 요청을 인증하는 데 문제가 있습니다. URL을 확인하기 위해 외부에서 연결할 수 없을 수 있습니다.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "평가판 서버의 오류 때문에 계정 정보를 가져오는데 실패했습니다. 나중에 다시 확인해 주세요.", + "There is a problem with fetching the account information. Please check your logs for further information." : "계정 정보를 가져오는 데 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "There is no such account registered." : "해당하는 등록된 계정이 없습니다.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "평가판 서버에 연결할 수 없기 때문에 계정 정보를 가져오지 못했습니다. 나중에 다시 확인하십시오.", + "Deleting the hosted signaling server account failed. Please check back later." : "호스트된 시그널링 서버 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "평가판 서버의 동작이 잘못되어 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "There is a problem with deleting the account. Please check your logs for further information." : "계정을 삭제하는 데 문제가 있습니다. 자세한 내용은 로그를 확인하십시오.", + "Too many requests are sent from your servers address. Please try again later." : "서버 주소에서 너무 많은 요청이 전송되었습니다. 나중에 다시 시도 해주십시오.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "평가판 서버에 연결할 수 없기 때문에 계정을 삭제하지 못했습니다. 나중에 다시 확인하십시오.", + "Note to self" : "나에게 메모", + "A place for your private notes, thoughts and ideas" : "개인 메모와 생각, 아이디어를 남길 수 있는 곳", + "Andorra" : "안도라", + "United Arab Emirates" : "아랍에미리트", + "Afghanistan" : "아프가니스탄", + "Antigua and Barbuda" : "앤티가바부다", + "Anguilla" : "앵귈라", + "Albania" : "알바니아", + "Armenia" : "아르메니아", + "Angola" : "앙골라", + "Antarctica" : "남극", + "Argentina" : "아르헨티나", + "American Samoa" : "미국령 사모아", + "Austria" : "오스트리아", + "Australia" : "오스트레일리아", + "Aruba" : "아루바", + "Åland Islands" : "올란드 제도", + "Azerbaijan" : "아제르바이잔", + "Bosnia and Herzegovina" : "보스니아 헤르체고비나", + "Barbados" : "바베이도스", + "Bangladesh" : "방글라데시", + "Belgium" : "벨기에", + "Burkina Faso" : "부르키나 파소", + "Bulgaria" : "불가리아", + "Bahrain" : "바레인", + "Burundi" : "부룬디", + "Benin" : "베냉", + "Saint Barthélemy" : "성 바르텔레미", + "Bermuda" : "버뮤다", + "Brunei Darussalam" : "브루나이", + "Bolivia, Plurinational State of" : "볼리비아", + "Bonaire, Sint Eustatius and Saba" : "보나이러", + "Brazil" : "브라질", + "Bahamas" : "바하마", + "Bhutan" : "부탄", + "Bouvet Island" : "부베 섬", + "Botswana" : "보츠와나", + "Belarus" : "벨라루스", + "Belize" : "벨리즈", + "Canada" : "캐나다", + "Cocos (Keeling) Islands" : "코코스 킬링 제도", + "Congo, the Democratic Republic of the" : "콩고", + "Central African Republic" : "중앙아프리카공화국", + "Congo" : "콩고", + "Switzerland" : "스위스", + "Côte d'Ivoire" : "코트디부아르", + "Cook Islands" : "쿡 제도", + "Chile" : "칠레", + "Cameroon" : "카메룬", + "China" : "중국", + "Colombia" : "콜롬비아", + "Costa Rica" : "코스타리카", + "Cuba" : "쿠바", + "Cabo Verde" : "카보베르데", + "Curaçao" : "퀴라소", + "Christmas Island" : "크리스마스 섬", + "Cyprus" : "사이프러스", + "Czechia" : "체코", + "Germany" : "독일", + "Djibouti" : "지부티", + "Denmark" : "덴마크", + "Dominica" : "도미니카", + "Dominican Republic" : "도미니카공화국", + "Algeria" : "알제리", + "Ecuador" : "에콰도르", + "Estonia" : "에스토니아", + "Egypt" : "이집트", + "Western Sahara" : "서사하라", + "Eritrea" : "에리트레아", + "Spain" : "스페인", + "Ethiopia" : "에티오피아", + "Finland" : "핀란드", + "Fiji" : "피지", + "Falkland Islands (Malvinas)" : "포클랜드제도 (말비나스)", + "Micronesia, Federated States of" : "미크로네시아", + "Faroe Islands" : "패로제도", + "France" : "프랑스", + "Gabon" : "가봉", + "United Kingdom of Great Britain and Northern Ireland" : "영국", + "Grenada" : "그레나다", + "Georgia" : "조지아", + "French Guiana" : "프랑스령 기아나", + "Guernsey" : "건지", + "Ghana" : "가나", + "Gibraltar" : "지브롤터", + "Greenland" : "그린랜드", + "Gambia" : "잠비아", + "Guinea" : "기니", + "Guadeloupe" : "과들루프", + "Equatorial Guinea" : "적도 기니", + "Greece" : "그리스", + "South Georgia and the South Sandwich Islands" : "사우스조지아 사우스샌드위치 제도", + "Guatemala" : "과테말라", + "Guam" : "괌", + "Guinea-Bissau" : "기니비사우", + "Guyana" : "가이아나", + "Hong Kong" : "홍콩", + "Heard Island and McDonald Islands" : "허드 맥도널드 제도", + "Honduras" : "온두라스", + "Croatia" : "크로아티아", + "Haiti" : "아이티", + "Hungary" : "헝가리", + "Indonesia" : "인도네시아", + "Ireland" : "아일랜드", + "Israel" : "이스라엘", + "Isle of Man" : "맨섬", + "India" : "인도", + "British Indian Ocean Territory" : "영국령인도양식민지", + "Iraq" : "이라크", + "Iran, Islamic Republic of" : "이란", + "Iceland" : "아이슬란드", + "Italy" : "이탈리아", + "Jersey" : "저지", + "Jamaica" : "자메이카", + "Jordan" : "요르단", + "Japan" : "일본", + "Kenya" : "케냐", + "Kyrgyzstan" : "키르기스스탄", + "Cambodia" : "캄보디아", + "Kiribati" : "키리바시", + "Comoros" : "코모로", + "Saint Kitts and Nevis" : "세인트키츠 네비스", + "Korea, Democratic People's Republic of" : "조선민주주의인민공화국", + "Korea, Republic of" : "대한민국", + "Kuwait" : "쿠웨이트", + "Cayman Islands" : "케이맨 제도", + "Kazakhstan" : "카자흐스탄", + "Lao People's Democratic Republic" : "라오스", + "Lebanon" : "레바논", + "Saint Lucia" : "세인트루시아", + "Liechtenstein" : "리히텐슈타인", + "Sri Lanka" : "스리랑카", + "Liberia" : "라이베리아", + "Lesotho" : "레소토", + "Lithuania" : "리투아니아", + "Luxembourg" : "룩셈부르크", + "Latvia" : "라트비아", + "Libya" : "리비아", + "Morocco" : "모로코", + "Monaco" : "모나코", + "Moldova, Republic of" : "몰도바", + "Montenegro" : "몬테네그로", + "Saint Martin (French part)" : "세인트마틴섬", + "Madagascar" : "마다가스카르", + "Marshall Islands" : "마셜제도", + "North Macedonia" : "북마케도니아", + "Mali" : "말리", + "Myanmar" : "미얀마", + "Mongolia" : "몽골", + "Macao" : "마카오", + "Northern Mariana Islands" : "북마리아나제도", + "Martinique" : "마르티니크", + "Mauritania" : "모리타니", + "Montserrat" : "몬세라트", + "Malta" : "몰타", + "Mauritius" : "모리셔스", + "Maldives" : "몰디브", + "Malawi" : "말라위", + "Mexico" : "멕시코", + "Malaysia" : "말레이시아", + "Mozambique" : "모잠비크", + "Namibia" : "나미비아", + "New Caledonia" : "뉴칼레도니아", + "Niger" : "니제르", + "Norfolk Island" : "노퍽 섬", + "Nigeria" : "나이지리아", + "Nicaragua" : "니카라과", + "Netherlands" : "네덜란드", + "Norway" : "노르웨이", + "Nepal" : "네팔", + "Nauru" : "나우루", + "Niue" : "니우에 섬", + "New Zealand" : "뉴질랜드", + "Oman" : "오만", + "Panama" : "파나마", + "Peru" : "페루", + "French Polynesia" : "프랑스령폴리네시아", + "Papua New Guinea" : "파푸아뉴기니", + "Philippines" : "필리핀", + "Pakistan" : "파키스탄", + "Poland" : "폴란드", + "Saint Pierre and Miquelon" : "생피에르 미클롱", + "Pitcairn" : "핏케언 제도", + "Puerto Rico" : "푸에르토리코", + "Palestine, State of" : "팔레스타인", + "Portugal" : "포르투갈", + "Palau" : "팔라우", + "Paraguay" : "파라과이", + "Qatar" : "카타르", + "Réunion" : "레위니옹", + "Romania" : "루마니아", + "Serbia" : "세르비아", + "Russian Federation" : "러시아", + "Rwanda" : "르완다", + "Saudi Arabia" : "사우디아라비아", + "Solomon Islands" : "솔로몬제도", + "Seychelles" : "세이셸", + "Sudan" : "수단", + "Sweden" : "스웨덴", + "Singapore" : "싱가포르", + "Saint Helena, Ascension and Tristan da Cunha" : "세인트헬레나 어센션 트리스탄다쿠냐", + "Slovenia" : "슬로베니아", + "Svalbard and Jan Mayen" : "스발바르 얀마옌 제도", + "Slovakia" : "슬로바키아", + "Sierra Leone" : "시에라리온", + "San Marino" : "산마리노", + "Senegal" : "세네갈", + "Somalia" : "소말리아", + "Suriname" : "수리남", + "South Sudan" : "남수단", + "Sao Tome and Principe" : "상투메 프린시페 민주 공화국", + "El Salvador" : "엘살바도르", + "Sint Maarten (Dutch part)" : "신트마르턴", + "Syrian Arab Republic" : "시리아", + "Eswatini" : "에스와티니", + "Turks and Caicos Islands" : "터크스카이코스 제도", + "Chad" : "차드", + "French Southern Territories" : "프랑스령 남부와 남극지역", + "Togo" : "토고", + "Thailand" : "타이", + "Tajikistan" : "타지키스탄", + "Tokelau" : "토켈라우", + "Timor-Leste" : "동티모르", + "Turkmenistan" : "투르크메니스탄", + "Tunisia" : "튀니지", + "Tonga" : "통가", + "Turkey" : "터키", + "Trinidad and Tobago" : "트리니다드토바고", + "Tuvalu" : "투발루", + "Taiwan, Province of China" : "대만", + "Tanzania, United Republic of" : "탄자니아", + "Ukraine" : "우크라이나", + "Uganda" : "우간다", + "United States Minor Outlying Islands" : "미국령 군소 제도", + "United States of America" : "미국", + "Uruguay" : "우루과이", + "Uzbekistan" : "우즈베키스탄", + "Holy See" : "바티칸시국", + "Saint Vincent and the Grenadines" : "세인트빈센트 그레나딘", + "Venezuela, Bolivarian Republic of" : "베네수엘라", + "Virgin Islands, British" : "버진 아일랜드", + "Virgin Islands, U.S." : "버진 아일랜드", + "Viet Nam" : "베트남", + "Vanuatu" : "바누아투", + "Wallis and Futuna" : "왈리스에푸투나", + "Samoa" : "사모아", + "Yemen" : "예멘", + "Mayotte" : "마요트섬", + "South Africa" : "남아프리카공화국", + "Zambia" : "잠비아", + "Zimbabwe" : "짐바브웨", + "Federation" : "연합", + "High-performance backend" : "고성능 백엔드", + "Error: Cannot connect to server" : "오류: 서버에 연결할 수 없습니다.", + "Error: Server did not respond with proper JSON" : "오류: 서버가 올바른 JSON으로 응답하지 않습니다.", + "Error: Certificate expired" : "오류: 인증서 만료", + "Could not get version" : "버전을 가져올 수 없습니다.", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "오류: 사용 중인 버전: {version}; 이 버전의 토크와 호환되기 위해서 서버를 업데이트해야 합니다.", + "Error: Server responded with: {error}" : "오류: 서버가 응답함: {error}", + "Error: Unknown error occurred" : "오류: 알 수 없는 오류가 발생했습니다.", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "경고: 실행중인 버전: {version}; 서버가 이 버전의 Talk의 모든 기능을 지원하지 않습니다, 없는 기능: {features}", + "Recording backend" : "녹음/녹화 백엔드", + "SIP configuration" : "SIP 구성", + "Invalid date, date format must be YYYY-MM-DD" : "잘못된 날짜입니다, YYYY-MM-DD 형식이어야 합니다.", + "Conversation not found" : "대화를 찾을 수 없음", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC를 사용한 채팅, 영상 및 오디오 회의", + "Leave call" : "통화 떠나기", + "Navigating away from the page will leave the call in {conversation}" : "페이지에서 다른 페이지로 이동하면 {conversation}의 통화를 떠납니다.", + "Stay in call" : "통화에 남기", + "Discuss this file" : "이 파일에 대해 논의", + "Share this file with others to discuss it" : "이 파일을 다른 이에게 공유하여 논의", + "Share this file" : "이 파일 공유", + "Join conversation" : "대화 참가", + "This conversation is password-protected." : "이 대화는 암호로 보호되어 있습니다.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "사용 중인 IP 주소에서 암호를 너무 많이 틀렸습니다. 30초 후에 다시 로그인할 수 있습니다.", + "The password is wrong. Try again." : "암호가 잘못되었습니다. 다시 시도하십시오", + "Password" : "암호", + "Submit" : "제출", + "Error requesting the password." : "암호를 요청하는 중 오류가 발생했습니다.", + "Request password" : "암호 요청", + "This conversation has ended" : "이 대화는 종료되었습니다.", + "Error occurred when joining the conversation" : "대화에 참가하는 중 오류 발생", + "Close Talk sidebar" : "토크 사이드바 닫기", + "Open Talk sidebar" : "토크 사이드바 열기", + "Everyone" : "모두", + "Users and moderators" : "사용자 및 중재자", + "Moderators only" : "중재자만", + "Disable calls" : "통화 비활성화", + "Save changes" : "변경 사항 저장", + "Saving …" : "저장 중 …", + "Saved!" : "저장했습니다!", + "Limit to groups" : "그룹으로 제한", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "하나 이상의 그룹이 선택되면, 선택된 그룹의 구성원만 대화에 참가할 수 있습니다.", + "Guests can still join public conversations." : "손님 계정은 여전히 공개 대화에 참가할 수 있습니다.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "더이상 토크를 사용할 수 없는 사용자는 지난 대화에 참가자로 목록에 계속 남아있으며 이들의 메시지도 유지됩니다.", + "Limit using Talk" : "토크 사용 제한", + "Limit creating a public and group conversation" : "공개 및 그룹 대화 만들기 제한", + "Limit creating conversations" : "대화 만들기 제한", + "Limit starting a call" : "통화 시작 제한", + "Limit starting calls" : "통화 시작 제한", + "When a call has started, everyone with access to the conversation can join the call." : "통화가 시작되면, 접근 권한이 있는 모두가 통화에 참가할 수 있습니다.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "다음 봇들이 이 서버에 설치되었습니다. 문서에서 {linkstart1}당신의 봇을 만드는 방법{linkend}을 찾아보거나 {linkstart2}활성화할 봇들의 목록{linkend}을 확인할 수 있습니다.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "이 서버에 설치된 봇이 없습니다. 문서에서 {linkstart1}당신의 봇을 만드는 방법{linkend}을 찾아보거나 {linkstart2}활성화할 봇들의 목록{linkend}을 확인할 수 있습니다.", + "Description is not provided" : "설명이 주어지지 않았습니다.", + "Locked for moderators" : "중재자로 잠김", + "Enabled" : "활성화", + "Disabled" : "비활성화됨", + "Bots settings" : "봇 설정", + "State" : "상태", + "Name" : "이름", + "Last error" : "마지막 오류", + "Total errors count" : "총 오류 수", + "Find more bots" : "봇 더 찾기", + "Beta" : "베타", + "Enable Federation in Talk app" : "Talk 앱에서 Federation 활성화", + "Permissions" : "권한", + "All messages" : "모든 메시지", + "@-mentions only" : "@-언급만", + "Off" : "꺼짐", + "General settings" : "일반 설정", + "Default notification settings" : "기본 알림 설정", + "Default group notification" : "기본 그룹 알림", + "Default group notification for new groups" : "새 그룹에 대한 기본 그룹 알림", + "Integration into other apps" : "다른 앱에 통합", + "Allow conversations on files" : "파일에서 대화 허용", + "Allow conversations on public shares for files" : "파일의 공개 공유에서 대화 허용", + "Enable encryption" : "암호화 사용", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "위의 버튼을 클릭하면 양식에 있는 정보가 Strucktur AG의 서버로 전송됩니다. 자세한 내용은 {linkstart}spreed.eu{linkend}에서 확인할 수 있습니다.", + "Pending" : "대기 중", + "Error" : "오류", + "Blocked" : "차단됨", + "Active" : "활동적인", + "Expired" : "만료됨", + "Never" : "하지 않음", + "The trial could not be requested. Please try again later." : "평가판을 요청할 수 없습니다. 나중에 다시 시도해 주십시오.", + "The account could not be deleted. Please try again later." : "계정을 삭제할 수 없습니다. 나중에 다시 시도해 주세요.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "당사의 파트너 Struktur AG는 호스팅된 시그널링 서버를 요청할 수 있는 서비스를 제공합니다. 이 경우 아래 양식만 작성하면 Nextcloud에서 요청하게 됩니다. 서버가 설정되면 인증 정보가 자동으로 채워집니다. 기존 신호 시그널링 설정을 덮어씁니다.", + "URL of this Nextcloud instance" : "이 Nextcloud 인스턴스의 URL", + "Full name of the user requesting the trial" : "평가판을 요청하는 사용자의 전체 이름", + "Email of the user" : "사용자의 이메일", + "Language" : "언어", + "Country" : "Country", + "Request signaling server trial" : "요청 신호 서버 평가판", + "You can see the current status of your hosted signaling server in the following table." : "당신은 다음 표에서 호스트된 시그널링 서버의 현재 상태를 볼 수 있습니다.", + "Status" : "상태", + "Created at" : "만든 날짜:", + "Expires at" : "만료 날짜", + "Limits" : "제한", + "Yes" : "예", + "No" : "아니오", + "Delete the signaling server account" : "신호 서버 계정 삭제", + "_%n user_::_%n users_" : ["%n명의 사용자"], + "Installed version: {version}" : "설치된 버전 : {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Matterbridge를 설치해 Nextcloud 토크를 다른 서비스에 연결할 수 있습니다. {linkstart1}GitHub page{linkend}에 방문해 자세히 알아보세요. 앱 다운로드와 설치에 시간이 걸릴 수 있습니다. 시간이 초과되는 경우 {linkstart2}Nextcloud 앱 스토어{linkend}에서 수동으로 설치하세요.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge 바이너리 파일을 찾을 수 없거나 실행할 수 없습니다.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "당신은 구성을 통해 Matterbridge 바이너리의 경로를 수동으로 설정할 수도 있습니다. 자세한 내용은 {linkstart}Matterbridge 통합 설명서{linkend}를 확인하십시오.", + "Downloading …" : "다운로드 중 ...", + "Install Talk Matterbridge" : "토크 Matterbridge 설치", + "An error occurred while installing the Matterbridge app" : "Matterbridge 앱을 설치하는 중 오류가 발생했습니다.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "토크에 Matterbridge를 설치하는 중 오류가 발생했습니다. 수동으로 설치해 주세요.", + "Failed to execute Matterbridge binary." : "Matterbridge 바이너리를 실행하지 못했습니다.", + "Matterbridge integration" : "Matterbridge 통합", + "Enable Matterbridge integration" : "Matterbridge 통합 사용", + "Status: Checking connection" : "상태: 연결 확인", + "OK: Running version: {version}" : "확인: 실행 중인 버전: {version}", + "Error: Server seems to be a Signaling server" : "오류: 서버가 시그널링 서버인 것 같습니다.", + "Recording backend URL" : "녹음/녹화 백엔드 URL", + "Validate SSL certificate" : "SSL 인증서 확인", + "Delete this server" : "이 서버 삭제", + "Test this server" : "이 서버 테스트", + "Disabled for all calls" : "모든 통화에 대해 비활성화됨", + "Enabled for all calls" : "모든 통화에 대해 활성화됨", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP의 \"upload_max_filesize\", \"post_max_size\"의 설정으로 인해 {maxUpload} 크기의 파일까지 업로드가 가능합니다.", + "Recording backend settings saved" : "녹음/녹화 백엔드 설정 저장됨", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "중재자는 동의를 대화 레벨에서 활성화하도록 허가됩니다. 각 참가자는 이 대화의 모든 통화에 참여하기 전에 녹음/녹화를 위한 동의가 필요합니다.", + "The consent to be recorded will be required for each participant before joining every call." : "통화에 참가하는 모든 이들에게 녹음/녹화에 대한 동의가 필요합니다.", + "The consent to be recorded is not required." : "녹음/녹화에 대한 동의가 필요하지 않습니다.", + "Add a new recording backend server" : "새 녹음/녹화 백엔드 추가", + "Shared secret" : "공유된 비밀 값", + "Recording consent" : "녹음/녹화 동의", + "SIP configuration saved!" : "SIP 설정 저장됨!", + "Enable SIP Dial-out option" : "SIP Dial-out 옵션 활성화", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "지원되는 SIP Dial-out 기능을 위해 시그널링 서버를 업데이트해야 합니다.", + "Restrict SIP configuration" : "SIP 구성 제한", + "Enable SIP configuration" : "SIP 구성 사용", + "Only users of the following groups can enable SIP in conversations they moderate" : "다음 그룹의 사용자만 이들이 중재자 권한으로 있는 대화에서 SIP를 사용할 수 있습니다.", + "Phone number (Country)" : "전화번호(국가)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "이 정보를 초대 이메일로 보냈으며 모든 참가자들의 사이드바에 표시했습니다.", + "High-performance backend URL" : "고성능 백엔드 URL", + "High-performance backend settings saved" : "고성능 백엔드 설정 저장됨", + "STUN server URL" : "STUN 서버 URL", + "The server address is invalid" : "서버 주소가 잘못되었습니다.", + "STUN settings saved" : "STUN 설정 저장됨", + "STUN servers" : "STUN 서버", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 서버는 라우터 뒤에 있는 참가자의 공인 IP 주소를 판단하는 데 사용합니다.", + "Add a new STUN server" : "새 STUN 서버 추가", + "{schema} scheme must be used with a domain" : "{schema} 스키마에 도메인을 사용해야 합니다.", + "{option1} and {option2}" : "{option1}(과)와 {option2}", + "{option} only" : "{option}만", + "OK: Successful ICE candidates returned by the TURN server" : "확인: TURN 서버에서 반환한 성공적인 ICE 후보", + "Error: No working ICE candidates returned by the TURN server" : "오류: TURN 서버에서 반환된 작동 중인 ICE 후보가 없습니다.", + "Testing whether the TURN server returns ICE candidates" : "TURN 서버가 ICE 후보를 반환하는지 테스트", + "TURN server schemes" : "TURN 서버 스키마", + "TURN server URL" : "TURN 서버 URL", + "TURN server secret" : "TURN 서버 비밀", + "TURN server protocols" : "TURN 서버 프로토콜", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 서버는 방화벽 뒤에 있는 참가자들의 트래픽을 중계하는 데 쓰입니다. 각 참가자가 서로에게 연결을 하지 못한다면 TURN 서버를 사용해야 할 가능성이 높습니다. {linkstart}이 문서{linkend}에서 설치 지침을 확인하세요.", + "TURN settings saved" : "TURN 설정 저장됨", + "TURN servers" : "TURN 서버", + "Add a new TURN server" : "새 TURN 서버 추가", + "Failed" : "실패", + "OK" : "확인", + "Checking …" : "검사 중…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "실패: WebAssembly가 이 브라우저에서 비활성화되었거나 지원되지 않습니다. WebAssembly를 활성화하거나 이를 지원하는 브라우저를 사용하여 확인하십시오.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "실패: \".wasm\" 및 \".tflite\" 파일이 웹 서버에서 제대로 반환되지 않았습니다. 토크의 문서에서 \"시스템 요구 사항\" 섹션을 확인하십시오.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "확인: \".wasm\" 및 \".tflite\" 파일이 웹 서버에서 정상적으로 반환되었습니다.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "현재 PHP와 Apache 설정이 호환되지 않는 것 같습니다. PHP는 오직 MPM_PREFORK 모듈과 함께 사용되어야 하며, PHP-FPM은 오직 MPM_EVENT 모듈과 함께 사용되어야 합니다.", + "Web server setup checks" : "웹 서버 설정 확인", + "Files required for virtual background can be loaded" : "가상 배경에 필요한 파일을 불러올 수 있습니다.", + "Federated user" : "연합 사용자", + "Assign participants to rooms" : "참가자를 대화방에 배정", + "Configure breakout rooms" : "소회의실 설정", + "Number of breakout rooms" : "소회의실 수", + "You can create from 1 to 20 breakout rooms." : "1개에서 20개의 소회의실을 만들 수 있습니다.", + "Assignment method" : "배정 방법", + "Automatically assign participants" : "참가자 자동 배정", + "Manually assign participants" : "참가자 수동 배정", + "Allow participants to choose" : "참가자가 선택하도록 허용", + "Create rooms" : "대화방 만들기", + "Confirm" : "확인", + "Create breakout rooms" : "소회의실 만들기", + "Reset" : "초기화", + "Delete breakout rooms" : "소회의실 삭제", + "Room {roomNumber}" : "{roomNumber}번 대화방", + "Current breakout rooms and settings will be lost" : "현재 소회의실의 설정이 모두 사라집니다.", + "Cancel" : "취소", + "Unassigned participants" : "배정되지 않은 참가자", + "Back" : "뒤로", + "Assign" : "배정", + "Add participant \"{user}\"" : "참가자 \"{user}\" 추가", + "Now" : "지금", + "Loading …" : "불러오는 중 ...", + "From" : "보낸사람", + "To" : "받는사람", + "Calendar" : "일정", + "Attendees" : "참석자", + "Save" : "저장", + "Search participants" : "참가자 찾기", + "No results" : "결과 없음", + "Done" : "완료", + "Raise hand" : "손들기", + "Raise hand (R)" : "손들기 (R)", + "Lower hand" : "손 내리기", + "Lower hand (R)" : "손 내리기 (R)", + "Exit full screen (F)" : "전체 화면 나가기 (F)", + "Full screen (F)" : "전체 화면 (F)", + "Speaker view" : "말하는 사람 보기", + "Grid view" : "바둑판식 보기", + "This conversation is read-only" : "이 대화는 읽기 전용입니다.", + "Reload" : "새로 고침", + "{nickName} raised their hand." : "{nickName}님이 손을 들었습니다.", + "A participant raised their hand." : "한 참가자가 손을 들었습니다.", + "Collapse stripe" : "스트라이프 접기", + "Expand stripe" : "스트라이프 확장", + "Previous page of videos" : "영상의 이전 페이지", + "Next page of videos" : "영상의 다음 페이지", + "Connecting …" : "연결 중...", + "Calling …" : "통화 거는 중...", + "Waiting for {user} to join the call" : "{user}님이 통화에 참가하기를 기다리고 있습니다.", + "Waiting for others to join the call …" : "다른 사람을 기다리는 중 …", + "You can invite others in the participant tab of the sidebar" : "사이드바의 참가자 탭에서 다른 사람들을 초대할 수 있음", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "당신은 사이드바의 참가자 탭에서 다른 사용자를 초대하거나 이 링크를 공유하여 다른 사용자를 초대할 수 있습니다!", + "Share this link to invite others!" : "다른 사람을 초대하려면 링크를 공유하십시오!", + "Copy link" : "링크 복사", + "You are not allowed to enable audio" : "오디오를 활성화할 수 없습니다.", + "No audio. Click to select device" : "오디오가 없습니다. 클릭해서 장치를 선택하세요.", + "Mute audio" : "소리 음소거", + "Mute audio (M)" : "소리 음소거(M)", + "Unmute audio" : "소리 음소거 해제", + "Unmute audio (M)" : "소리 음소거 해제(M)", + "None" : "없음", + "Access to camera was denied" : "카메라에 대한 접근이 거부되었습니다.", + "Error while accessing camera: It is likely in use by another program" : "카메라 액세스 오류: 다른 프로그램에서 사용 중일 수 있습니다.", + "Error while accessing camera" : "카메라에 접근하는 중 오류 발생", + "You have been muted by a moderator" : "당신이 중재자에 의해 음소거되었습니다.", + "You are not allowed to enable video" : "영상을 활성화할 수 없습니다.", + "No video. Click to select device" : "영상이 없습니다. 클릭해서 장치를 선택하세요.", + "Disable video" : "비디오 비활성화", + "Disable video (V)" : "영상 비활성화(V)", + "Enable video" : "영상 활성화", + "Enable video (V)" : "영상 활성화(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "영상 활성화 - 영상을 처음 활성화하면 연결이 잠깐 끊어집니다.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "영상 활성화(V) - 영상을 처음 활성화하면 연결이 잠시 중단됩니다.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "영상을 활성화합니다. 처음으로 영상을 활성화하면 연결이 잠시 중단됩니다.", + "Show presenter" : "발표자 표시", + "You" : "나", + "Mute" : "음소거", + "Muted" : "음소거됨", + "Show screen" : "화면 보이기", + "Stop following" : "따라가기 중지", + "Connection could not be established …" : "연결을 설정할 수 없습니다…", + "Connection was lost and could not be re-established …" : "연결이 끊어져 다시 설정할 수 없습니다...", + "Connection could not be established. Trying again …" : "연결을 설정할 수 없습니다. 다시 시도 중…", + "Connection lost. Trying to reconnect …" : "연결이 끊어졌습니다. 다시 연결하는 중…", + "Connection problems …" : "연결 문제 …", + "Collapse" : "접기", + "Expand" : "확장", + "You need to be logged in to upload files" : "파일을 업로드하려면 로그인해야 합니다.", + "Drop your files to upload" : "여기에 파일을 올려 업로드하기", + "Conversation messages" : "대화 메시지", + "Scroll to bottom" : "맨 아래로 스크롤", + "Post message" : "메시지 게시", + "Favorite" : "즐겨찾기", + "Date:" : "날짜:", + "Note:" : "메모:", + "Hide details" : "자세한 정보 숨기기", + "Show details" : "세부 정보", + "Error while updating conversation name" : "대화 이름을 설정하는 중 오류 발생", + "Error while updating conversation description" : "대화 설명을 업데이트하는 중 오류 발생", + "Enter a name for this conversation" : "이 대화의 이름을 입력하세요.", + "Edit conversation name" : "대화 이름 수정", + "Edit conversation description" : "대화 설명 편집", + "Enter a description for this conversation" : "이 대화에 대한 설명을 입력하세요.", + "Picture" : "사진", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "다음 봇들을 이 대화에서 활성화할 수 있습니다. 관리자에게 연락해 더 많은 봇들을 설치하세요.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "이 서버에 설치된 봇이 없습니다. 관리자에게 연락해 봇들을 설치하세요.", + "Disable" : "사용 안함", + "Enable" : "활성화", + "Breakout rooms" : "소회의실", + "Manage breakout rooms" : "소회의실 관리", + "Set up breakout rooms for this conversation" : "이 대화에 소회의실을 구성", + "Please select a valid PNG or JPG file" : "올바른 PNG 또는 JPG 파일을 선택하세요.", + "Choose your conversation picture" : "대화의 사진을 고르세요.", + "Choose" : "선택", + "Error setting conversation picture" : "대화의 사진을 설정하는 중 오류 발생", + "Could not set the conversation picture: {error}" : "대화의 사진을 설정할 수 없습니다: {error}", + "Error cropping conversation picture" : "사진을 자르는 중 오류 발생", + "Error removing conversation picture" : "대화의 사진을 제거하는 중 오류 발생", + "Set emoji as conversation picture" : "이모지를 대화의 사진으로 설정", + "Set background color for conversation picture" : "대화의 사진에 배경 색을 지정", + "Upload conversation picture" : "대화의 사진을 업로드", + "Choose conversation picture from files" : "대화의 사진을 파일에서 고르기", + "Remove conversation picture" : "대화의 사진 제거", + "The file must be a PNG or JPG" : "파일은 PNG 또는 JPG여야 합니다.", + "Set picture" : "사진 설정", + "Default permissions modified for {conversationName}" : "{conversationName}의 기본 권한이 수정되었습니다.", + "Could not modify default permissions for {conversationName}" : "{conversationName}의 기본 권한을 수정할 수 없습니다.", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "이 대화의 참가자에 대한 기본 권한을 편집합니다. 이 설정들은 중재자에게 영향을 미치지 않습니다.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "이 부분의 권한이 수정될 때마다, 이전에 각 참가자에게 배정된 맞춤 권한들이 사라집니다.", + "All permissions" : "모든 권한", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "참가자는 통화를 시작하고, 통화에 참가하고, 오디오 및 영상을 활성화하고, 화면을 공유할 수 있는 권한이 있습니다.", + "Restricted" : "제한됨", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "참가자는 통화에 참가할 수 있지만 중재자가 수동으로 권한을 부여할 때까지 오디오나 영상을 활성화하거나 화면을 공유할 수 없습니다.", + "Advanced permissions" : "고급 권한", + "Edit permissions" : "권한 수정", + "Conversation settings" : "대화 설정", + "Basic Info" : "기본 정보", + "Personal" : "개인", + "Moderation" : "중재", + "Setup overview" : "설정 개요", + "Breakout Rooms" : "소회의실", + "Matterbridge" : "Matterbridge", + "Bots" : "봇", + "Danger zone" : "위험 지역", + "Leave conversation" : "대화 나가기", + "You need to promote a new moderator before you can leave the conversation" : "대화를 떠나기 전 새 중재자를 임명해야 합니다.", + "Delete conversation" : "대화 삭제", + "Do you really want to delete \"{displayName}\"?" : "\"{displayName}\"(을)를 정말 삭제하시겠습니까?", + "Error while deleting conversation" : "대화를 삭제하는 동안 오류가 발생했습니다.", + "Delete all chat messages" : "모든 채팅 메시지 삭제", + "Do you really want to delete all messages in \"{displayName}\"?" : "정말 \"{displayName}\"의 모든 대화를 삭제하시겠습니까?", + "Error while clearing chat history" : "채팅 기록을 지우는 동안 오류가 발생했습니다.", + "Be careful, these actions cannot be undone." : "주의하세요. 이 작업은 취소할 수 없습니다.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "대화를 떠난 후 비공개 대화에 다시 참가하려면 초대가 필요합니다. 공개 대화는 언제든지 다시 참가할 수 있습니다.", + "Permanently delete this conversation." : "이 대화를 영구적으로 삭제합니다.", + "Delete chat messages" : "채팅 메시지 삭제", + "Permanently delete all the messages in this conversation." : "이 대화의 모든 메시지를 영구적으로 삭제합니다.", + "_%n hour_::_%n hours_" : ["%n시간"], + "_%n day_::_%n days_" : ["%n일"], + "_%n week_::_%n weeks_" : ["%n주"], + "Custom expiration time" : "만료 시간 정하기", + "Message expiration disabled" : "메시지 만료 비활성화", + "Message expiration set: {duration}" : "설정된 메시지 만료 기간: {duration}", + "Error when trying to set message expiration" : "메시지 만료 기간 설정 중 오류 발생", + "Message expiration" : "메시지 만료", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "채팅 메시지가 특정 시간 이후에 만료될 수 있습니다. 참고: 채팅에서 공유된 파일들은 소유자에게서 삭제 되지 않지만, 대화에서 더이상 공유되지 않습니다.", + "Set message expiration" : "메시지 만료 설정", + "Current message expiration" : "현재의 메시지 만료", + "Guest access" : "게스트 접속", + "Allow guests to join this conversation via link" : "손님이 링크를 통해 이 대화에 참가하도록 허용", + "Password protection" : "암호 보호", + "Set a password" : "암호 설정", + "Change password" : "암호 변경", + "Enter new password" : "새 암호 입력", + "Save password" : "암호 저장", + "Guests are allowed to join this conversation via link" : "손님이 링크를 통해 이 대화에 참여할 수 있습니다.", + "Guests are not allowed to join this conversation" : "손님은 이 대화에 참여할 수 없습니다.", + "Resend invitations" : "초대 재전송", + "This conversation is open to both registered users and users created with the Guests app" : "이 대화는 가입된 사용자와 Guests 앱을 통해 만들어진 사용자 모두에게 열려있습니다.", + "This conversation is open to registered users" : "이 대화는 가입된 사용자들에게 열려 있습니다.", + "This conversation is limited to the current participants" : "이 대화는 현재 참가자들로 제한되어 있습니다.", + "You opened the conversation to both registered users and users created with the Guests app" : "대화를 가입된 사용자와 Guests 앱을 통해 만들어진 사용자 모두에게 열었습니다.", + "Error occurred when opening or limiting the conversation" : "대화를 열거나 제한하는 중에 오류가 발생했습니다.", + "Open conversation to registered users, showing it in search results" : "대화를 가입된 사용자들에게 공개하고, 검색 결과에 표시", + "Also open to users created with the Guests app" : "또한 Guests 앱을 통해 생성된 사용자에게 공개됨", + "Open conversation" : "대화 공개", + "Start time has been updated" : "시작 시간이 업데이트 되었습니다.", + "Error occurred while updating start time" : "시작 시간을 업데이트하는 중에 오류 발생", + "Enabling the lobby will remove non-moderators from the ongoing call." : "로비를 활성화하면 진행 중인 통화에서 중재자가 아닌 이들이 제거됩니다.", + "Enable lobby, restricting the conversation to moderators" : "로비를 활성화하여 중재자들로 대화를 제한", + "Meeting start time" : "모임 시작 시간", + "Start time (optional)" : "시작 시간 (선택 사항)", + "Error occurred when locking the conversation" : "대화를 잠그는 동안 오류가 발생했습니다.", + "Error occurred when unlocking the conversation" : "대화 잠금을 해제하는 동안 오류가 발생했습니다.", + "Lock conversation" : "대화 잠금", + "This will also terminate the ongoing call." : "이렇게 하면 진행 중인 통화도 종료됩니다.", + "Lock the conversation to prevent anyone to post messages or start calls" : "아무도 메시지를 작성하거나 통화를 시작할 수 없도록 대화 잠그기", + "Edit" : "편집", + "More information" : "더 많은 정보", + "Delete" : "삭제", + "Add new bridged channel to current conversation" : "현재 대화에 새로운 채널 연결", + "unknown state" : "알 수 없는 상태", + "running" : "실행중", + "not running, check Matterbridge log" : "실행 중이지 않습니다. Matterbridge 로그를 확인하십시오.", + "not running" : "실행 중이지 않습니다.", + "Bridge saved" : "연결 저장", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge를 사용하여 다양한 인스턴트 메시징 시스템의 채널을 연결할 수 있습니다.", + "More info on Matterbridge" : "Matterbridge에 대한 더 많은 정보", + "Messaging systems" : "메시징 시스템", + "Enable bridge" : "가능한 연결", + "Show Matterbridge log" : "Matterbridge 로그 보기", + "Log content" : "로그 내용", + "Notifications" : "알림", + "Notify about calls in this conversation" : "이 대화의 통화에 대해 알림", + "Important conversation" : "중요한 대화", + "Recording consent is required for calls in this conversation" : "이 대화의 통화에서 녹음/녹화 동의 필요", + "Recording consent is not required for calls in this conversation" : "이 대화의 통화에서 녹음/녹화 동의 불필요", + "Recording consent requirement was updated" : "녹음/녹화 동의 필요 여부가 바뀌었습니다.", + "Error occurred while updating recording consent" : "녹음/녹화 동의를 바꾸는 중 오류 발생", + "Recording Consent" : "녹음/녹화 동의", + "Recording consent cannot be changed once a call or breakout session has started." : "녹음/녹화 동의는 통화나 소회의 세션이 시작되면 바꿀 수 없습니다.", + "Require recording consent before joining call in this conversation" : "이 대화에 참여하기 전 녹음/녹화 동의 필요", + "Recording consent is required for all calls" : "모든 통화에서 녹음/녹화 동의 필요", + "SIP dial-in is now possible without PIN requirement" : "이제 PIN 없이 SIP 전화 접속이 가능합니다.", + "SIP dial-in is now enabled" : "이제 SIP 전화 접속이 활성화됨", + "SIP dial-in is now disabled" : "이제 SIP 전화 접속을 사용할 수 없습니다.", + "Error occurred when enabling SIP dial-in" : "SIP 전화 접속을 활성화하는 동안 오류가 발생했습니다.", + "Error occurred when disabling SIP dial-in" : "SIP 전화 접속을 비활성화하는 동안 오류가 발생했습니다.", + "Phone and SIP dial-in" : "전화 및 SIP 전화 연결", + "Enable phone and SIP dial-in" : "전화 및 SIP 전화 연결 활성화", + "Allow to dial-in without a PIN" : "PIN 없이 전화 접속 허용", + "Join" : "참가", + "Error while creating the conversation" : "대화를 만드는 중에 오류 발생", + "Create a new conversation" : "새 대화 만들기", + "Join open conversations" : "공개 대화에 참가", + "Call a phone number" : "전화번호에 전화", + "Unread mentions" : "읽지 않은 언급", + "Create conversation" : "대화 만들기", + "Enter your name" : "이름을 입력하세요", + "Submit name and join" : "이름을 등록하고 참가", + "Log in" : "로그인", + "An error occurred while calling a phone number" : "전화번호에 전화하는 중 오류 발생", + "Phone number could not be called: {error}" : "전화번호에 전화할 수 없음: {error}", + "Phone number could not be called" : "전화번호에 전화할 수 없습니다.", + "Search participants or phone numbers" : "참가자 및 전화번호 검색", + "Creating the conversation …" : "대화 만드는 중...", + "Mark as read" : "읽은 것으로 표시", + "Mark as unread" : "읽지 않은 것으로 표시", + "Remove from favorites" : "즐겨찾기에서 제거", + "Add to favorites" : "즐겨찾기에 추가", + "You need to promote a new moderator before you can leave the conversation." : "대화를 종료하려면 새 중재자를 임명해야 합니다.", + "Conversation actions" : "대화 작업", + "Home" : "집", + "Unread" : "읽지 않음", + "Alphabetically" : "가나다순", + "No matches found" : "일치하는 항목 없음", + "No conversations found" : "대화를 찾을 수 없습니다.", + "You have no unread mentions." : "읽지 않은 언급이 없습니다.", + "You have no unread messages." : "읽지 않은 메시지가 없습니다.", + "An error occurred while performing the search" : "검색을 수행하는 동안 오류가 발생했습니다.", + "Conversation list" : "대화 목록", + "Unread messages" : "읽지 않은 메시지", + "Clear filters" : "필터링 제거", + "New personal note" : "새 개인 메모", + "Clear filter" : "필터 지우기", + "App settings" : "앱 설정", + "Users" : "사용자", + "Groups" : "그룹", + "Other sources" : "다른 출처", + "Open conversations" : "대화 열기", + "No search results" : "검색 결과 없음", + "Users and groups" : "사용자와 그룹", + "The meeting will start soon" : "회의가 곧 시작됩니다.", + "This meeting is scheduled for {startTime}" : "모임이 {startTime}에 예정되었습니다.", + "You are currently waiting in the lobby" : "대화방 로비에서 대기 중입니다.", + "Select microphone" : "마이크 선택", + "No microphone available" : "사용 가능한 마이크 없음", + "Select camera" : "카메라 선택", + "No camera available" : "사용 가능한 카메라 없음", + "Select a device" : "장치 선택", + "Test" : "테스트", + "Devices" : "장치", + "Backgrounds" : "배경", + "No audio" : "오디오 없음", + "No camera" : "카메라 없음", + "Calls are not supported in your browser" : "이 브라우저가 통화를 지원하지 않습니다.", + "Access to microphone is only possible with HTTPS" : "HTTPS를 통해서만 마이크에 액세스할 수 있음", + "Access to microphone was denied" : "마이크 접근이 거부되었습니다.", + "Error while accessing microphone" : "마이크에 접근하는 중 오류 발생", + "Access to camera is only possible with HTTPS" : "HTTPS에서만 카메라에 접근할 수 있습니다.", + "The call is being recorded." : "통화가 녹음/녹화되고 있습니다.", + "The call might be recorded." : "통화가 녹음/녹화됩니다.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "녹음/녹화는 당신의 목소리, 카메라의 화상, 화면 공유를 포함할 수 있습니다. 통화에 참여하기 전 당신의 동의가 필요합니다.", + "Give consent to the recording of this call" : "이 통화의 녹화/녹음에 동의", + "Start recording immediately with the call" : "통화하는 즉시 녹음/녹화를 시작", + "Apply settings" : "설정 적용", + "Select virtual office background" : "가상 사무실 배경 선택", + "Select virtual home background" : "가상 집 배경 선택", + "Select virtual abstract background" : "가상 추상화 배경 선택", + "Select virtual beach background" : "가상 해변 배경 선택", + "Select virtual park background" : "가상 공원 배경 선택", + "Select virtual theater background" : "가상 극장 배경 선택", + "Select virtual library background" : "가상 도서관 배경 선택", + "Select virtual space station background" : "가상 우주 정거장 배경 선택", + "Error while uploading the file" : "파일 업로드 중 오류 발생", + "Select a file" : "파일 선택", + "Invalid path selected" : "잘못된 경로가 선택됨", + "Select virtual background from file {fileName}" : "{fileName}파일에서 가상 배경 선택", + "Blur" : "흐림", + "Upload" : "업로드", + "Files" : "파일", + "(editing)" : "(수정중)", + "(edited)" : "(수정됨)", + "The message has expired or has been deleted" : "메시지가 만료되었거나 삭제되었습니다.", + "Cancel quote" : "인용 취소", + "24 hours" : "24시간", + "7 days" : "7일", + "Clear reminder – {timeLocale}" : "알림 지우기 – {timeLocale}", + "Message text copied to clipboard" : "메시지 텍스트를 클립보드에 복사했습니다.", + "Message text could not be copied" : "메시지 텍스트를 클립보드에 복사할 수 없습니다.", + "Message forwarded to \"Note to self\"" : "메시지가 \"나에게 메모\"로 전달되었습니다", + "Error while forwarding message to \"Note to self\"" : "메시지를 \"나에게 메모\"로 전달하는 중 오류 발생", + "A reminder was successfully removed" : "알림이 성공적으로 제거되었습니다.", + "Error occurred when removing a reminder" : "알림을 제거하는 중 오류가 발생했습니다.", + "A reminder was successfully set at {datetime}" : "알림이 {datetime}(으)로 성공적으로 설정되었습니다.", + "Error occurred when creating a reminder" : "알림을 만드는 중 오류가 발생했습니다.", + "Add a reaction to this message" : "이 메시지에 반응 추가", + "Reply" : "답장", + "More actions" : "더 많은 동작", + "Set reminder" : "알림 설정", + "Reply privately" : "비공개로 답장", + "Edit message" : "메시지 편집", + "Copy message" : "메시지 복사", + "Copy message link" : "메시지 링크 복사", + "Go to file" : "파일로 이동", + "Forward message" : "메시지 전달", + "Translate" : "번역:", + "Set custom reminder" : "사용자 지정 알림 설정", + "Close reactions menu" : "반응 메뉴 닫기", + "React with {emoji}" : "{emoji}(으)로 반응", + "React with another emoji" : "다른 이모지로 반응", + "Choose a conversation to forward the selected message." : "선택한 메시지를 전달할 대화를 선택하세요.", + "Error while forwarding message" : "메시지를 전달하는 동안 오류가 발생했습니다.", + "The message has been forwarded to {selectedConversationName}" : "메시지를 {selectedConversationName}에 전달했습니다.", + "Dismiss" : "무시", + "Go to conversation" : "대화로 이동", + "Detect language" : "언어 감지", + "The message could not be translated" : "메시지를 번역할 수 없습니다.", + "Translation copied to clipboard" : "번역을 클립보드로 복사함", + "Translation could not be copied" : "번역을 복사할 수 없습니다.", + "Translate message" : "메시지 번역", + "Source language to translate from" : "번역될 원본의 언어", + "Translate from" : "다음을 번역", + "Target language to translate into" : "번역할 목표 언어", + "Translate to" : "다음으로 번역", + "Translating" : "번역 중", + "Copy translated text" : "번역한 텍스트 복사", + "Send now" : "지금 보내기", + "Message read by everyone who shares their reading status" : "읽기 상태를 공개한 모든 사용자가 메시지를 읽음", + "Message sent" : "메시지 보냄", + "Deleting message" : "메시지 삭제", + "Message deleted successfully" : "메시지가 성공적으로 삭제됨", + "Message could not be deleted because it is too old" : "메시지가 너무 오래되어 삭제할 수 없습니다.", + "Only normal chat messages can be deleted" : "일반 채팅 메시지만 삭제할 수 있습니다.", + "An error occurred while deleting the message" : "메시지를 지우는 중 오류 발생", + "Your browser does not support playing audio files" : "귀하의 브라우저는 오디오 파일 재생을 지원하지 않습니다.", + "Contact" : "연락처", + "{stack} in {board}" : "{board}의 {stack}", + "Deck Card" : "덱 카드", + "Remove {fileName}" : "{fileName} 제거", + "Open this location in OpenStreetMap" : "OpenStreetMap에서 이 위치를 엽니다.", + "Sending message" : "메시지 보내는 중", + "Failed to send the message. Click to try again" : "메시지를 보내지 못했습니다. 다시 시도하려면 클릭하세요.", + "Not enough free space to upload file" : "파일을 업로드할 여유 공간이 부족합니다.", + "You cannot send messages to this conversation at the moment" : "지금은 이 대화에 메시지를 보낼 수 없습니다.", + "_%n vote_::_%n votes_" : ["%n 표"], + "Open poll" : "투표 열기", + "See results" : "결과 보기", + "No permission to post reactions in this conversation" : "이 대화에 반응을 게시할 권한이 없습니다.", + "Add more reactions" : "반응 더 추가", + "Show or collapse system messages" : "시스템 메시지를 보이거나 접기", + "No messages" : "메시지가 없음", + "All messages have expired or have been deleted." : "모든 메시지가 삭제되었거나 만료되었습니다.", + "Cancel search" : "검색 취소", + "Add a phone number" : "전화번호를 추가하세요.", + "All set, the conversation \"{conversationName}\" was created." : "모두 설정했으며, \"{conversationName}\" 대화가 만들어졌습니다.", + "Create a new group conversation" : "새 그룹 대화 생성", + "Add participants" : "참가자 추가", + "Conversation visibility" : "대화 가시성", + "Allow guests to join via link" : "링크를 통해 손님이 참가하도록 허용", + "Enter password" : "암호 입력", + "This conversation has been locked" : "이 대화는 잠겨있습니다.", + "No permission to post messages in this conversation" : "이 대화에 메시지를 게시할 수 있는 권한이 없음", + "Joining conversation …" : "대화에 들어가는 중...", + "Send message" : "메시지 보내기", + "Send without notification" : "알림 없이 전송", + "File to share" : "공유할 파일", + "Add emoji" : "이모지 추가", + "Send later" : "나중에 보내기", + "Cancel editing" : "수정 취소", + "{user} is out of office and might not respond." : "{user}가 부재중이어서 응답하지 않을 수 있습니다.", + "Share from {nextcloud}" : "{nextcloud}에서 공유", + "Share from Files" : "파일에서 공유", + "Share files to the conversation" : "대화로 파일 공유", + "Upload from device" : "이 기기에서 업로드", + "Create new poll" : "새 투표 만들기", + "Smart picker" : "스마트 피커", + "Record voice message" : "음성 메시지 녹음", + "End recording and send" : "녹음 종료 및 보내기", + "Dismiss recording" : "녹음 무시", + "Access to the microphone was denied" : "마이크에 대한 액세스가 거부되었습니다.", + "Microphone either not available or disabled in settings" : "마이크를 사용할 수 없거나 설정에서 비활성화됨", + "Error while recording audio" : "녹음 중 오류", + "New file" : "새 파일", + "Blank" : "여백", + "Error while creating file" : "파일을 만드는 중 오류 발생", + "Create and share a new file" : "새 파일을 만들고 공유", + "Name of the new file" : "새 파일의 이름", + "Create file" : "파일 만들기", + "Someone is typing …" : "누군가 입력 중입니다…", + "{user1} is typing …" : "{user1}님이 입력 중입니다…", + "{user1} and {user2} are typing …" : "{user1}님과 {user2}님이 입력 중입니다…", + "{user1}, {user2} and {user3} are typing …" : "{user1}님, {user2}님과 {user3}님이 입력 중입니다…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}님, {user2}님, {user3}님과 %n명의 사람들이 입력 중입니다…"], + "Add more files" : "파일 더 추가", + "Send" : "보내기", + "In this conversation {user} can:" : "이 대화에서 {user}님이 할 수 있는 것:", + "Edit default permissions for participants in {conversationName}" : "{conversationName}의 참가자들의 기본 권한 수정", + "Start a call" : "통화 시작", + "Skip the lobby" : "로비 건너 뛰기", + "Can post messages and reactions" : "메시지 게시 및 반응 가능", + "Enable the microphone" : "마이크 활성화", + "Enable the camera" : "카메라 활성화", + "Share the screen" : "화면 공유", + "Update permissions" : "권한 업데이트", + "Updating permissions" : "권한 업데이트", + "Create poll" : "투표 만들기", + "Question" : "질문", + "Ask a question" : "질문하기", + "Answers" : "답변", + "Answer {option}" : "답변 {option}", + "Delete poll option" : "투표 옵션 삭제", + "Add answer" : "답변 추가", + "Settings" : "설정", + "Anonymous poll" : "익명 투표", + "Multiple answers" : "여러 개의 답변", + "You voted for this option" : "이 옵션에 투표했습니다.", + "End poll" : "투표를 끝내다", + "Change your vote" : "투표 수정", + "Results" : "결과들", + "Voted participants" : "투표한 참가자", + "Send a message to \"{roomName}\"" : "\"{roomName}\"에 메시지 보내기", + "Hide list of participants" : "참가자 목록 숨기기", + "Show list of participants" : "참가자 목록 보이기", + "Assistance requested in {roomName}" : "{roomName}에서 요청한 지원", + "The message was sent to \"{roomName}\"" : "메시지를 \"{roomName}\"에 전송했습니다.", + "Dismiss request for assistance" : "지원 요청 무시", + "Send message to room" : "대화방에 메시지 보내기", + "Back to main room" : "주 대화방으로 돌아가기", + "Back to your room" : "대화방으로 돌아가기", + "Message all rooms" : "모든 대화방에 메시지 보내기", + "Start session" : "세션 시작", + "Start a call before you start a breakout room session" : "소회의실을 시작하기 전 통화 시작하기", + "Stop session" : "세션 중단", + "The message was sent to all breakout rooms" : "메시지를 모든 소회의실에 전송했습니다.", + "Send a message to all breakout rooms" : "모든 소회의실에 메시지 보내기", + "Breakout rooms are not started" : "소회의실을 시작하지 않았습니다.", + "Disable lobby" : "로비 비활성화", + "Settings for participant \"{user}\"" : "참가자 \"{user}\"에 대한 설정", + "Participant \"{user}\"" : "참가자 \"{user}\"", + "moderator" : "중재자", + "bot" : "봇", + "guest" : "손님", + "{time} talking …" : "{time} 대화중…", + "{time} talking time" : "대화한 시간 {time}", + "Raised their hand" : "(이)가 손을 들었습니다.", + "Joined with video" : "영상과 함께 참가", + "Joined via phone" : "전화기와 결합됨", + "Joined with audio" : "소리와 함께 참가", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "텍스트가 {maxLength}글자보다 짧거나 같아야 합니다. 현재 텍스트가 {charactersCount}글자입니다.", + "Remove group and members" : "그룹 및 구성원 제거", + "Remove participant" : "참가자 삭제", + "Notification was sent to {displayName}" : "{displayName}님에게 알림을 보냈습니다.", + "Could not send notification to {displayName}" : "{displayName}님에게 알림을 보낼 수 없음", + "Permissions granted to {displayName}" : "{displayName}님에게 권한이 부여됨", + "Could not modify permissions for {displayName}" : "{displayName}님의 권한을 수정할 수 없음", + "Permissions removed for {displayName}" : "{displayName}님의 권한이 제거됨", + "Permissions set to default for {displayName}" : "{displayName}님의 권한이 기본 값으로 설정됨", + "in the lobby" : "로비에서", + "Dial out phone" : "전화 걸기", + "Hang up phone" : "전화 끊기", + "Move back to lobby" : "로비로 나가기", + "Move to conversation" : "대화로 이동", + "Dial-in PIN" : "전화 접속 PIN", + "Demote from moderator" : "중재자 권한 박탈", + "Promote to moderator" : "중재자 권한 부여", + "Resend invitation" : "초대 재전송", + "Send call notification" : "통화 알림 보내기", + "Dial out phone number" : "전화번호로 전화 걸기", + "Resume call for phone number" : "전화번호로 전화 재개", + "Reset custom permissions" : "사용자 정의 권한 재설정", + "Grant all permissions" : "모든 권한 승인", + "Remove all permissions" : "모든 권한 제거", + "Remove" : "삭제", + "Permissions modified for {displayName}" : "{displayName}님의 권한이 수정됨", + "Add users or groups" : "사용자나 그룹 추가", + "Add users" : "사용자 추가", + "Add groups" : "그룹 추가", + "Add other sources" : "다른 출처 추가", + "Add emails" : "이메일 추가", + "Integrations" : "통합", + "Add federated users" : "연합 사용자 추가", + "Searching …" : "검색 중...", + "Search for more users" : "사용자 더 검색", + "Search or add participants" : "참가자 검색 및 추가", + "Invitation was sent to {actorId}" : "{actorId}님에게 초대를 보냈습니다.", + "An error occurred while adding the participants" : "참가자를 추가하는 동안 오류가 발생했습니다.", + "Participants" : "참가자", + "Participants ({count})" : "참가자({count})", + "Open chat" : "대화방 열기", + "You have new unread messages in the chat." : "채팅에 읽지 않은 새 메시지가 있습니다.", + "You have been mentioned in the chat." : "채팅에서 언급되었습니다.", + "Chat" : "대화", + "Details" : "세부사항", + "Shared items" : "공유된 항목들", + "Until" : "까지", + "No results found" : "결과 없음", + "Load more results" : "더 많은 결과 불러오기", + "Projects" : "프로젝트", + "No shared items" : "공유된 항목이 없습니다.", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "대화 링크", + "No open conversations found" : "공개 대화를 찾을 수 없습니다", + "Either there are no open conversations or you joined all of them." : "공개 대화가 없거나 모두 참가했습니다.", + "Check spelling or use complete words." : "맞춤법을 확인하거나 완전한 단어를 사용하세요.", + "Search conversations or users" : "대화 또는 사용자 검색", + "Select conversation" : "대화 선택", + "Display name: {name}" : "표시되는 이름: {name}", + "Edit display name" : "표시 이름 수정", + "Save name" : "이름 저장", + "Error while saving sounds setting" : "소리 설정을 저장하는 중 오류가 발생했습니다.", + "Play sounds when participants join or leave a call" : "참가자가 통화에 들어오거나 나갈 때 소리 재생", + "Notification settings" : "알림 설정", + "Default language" : "기본 언어", + "Select location for attachments" : "첨부 파일 위치 선택", + "Error while setting attachment folder" : "첨부 파일 폴더 설정 중 오류 발생", + "Error while setting read status privacy" : "읽기 상태 개인 정보를 설정하는 중 오류 발생", + "Error while setting typing status privacy" : "입력 상태 공개 설정을 하는 동안 오류 발생", + "Privacy" : "프라이버시", + "Attachments folder" : "첨부 파일 폴더", + "Toggle full screen" : "전체 화면 전환", + "Search" : "검색", + "Focus the chat input" : "채팅 입력에 포커스", + "Unfocus the chat input to use shortcuts" : "바로 가기를 사용하려면 채팅 입력 포커스 해제", + "Shortcuts while in a call" : "통화 중 바로 가기", + "Camera on and off" : "카메라 켜기 및 끄기", + "Microphone on and off" : "마이크 켜고 끄기", + "Raise or lower hand" : "손을 들거나 내리기", + "Push to talk or push to mute" : "눌러서 대화 또는 음소거", + "Start call silently" : "조용히 통화 시작", + "Start call" : "통화 시작", + "You will be able to join the call only after a moderator starts it." : "중재자가 통화를 시작한 후에만 통화에 참할 수 있습니다.", + "End call for everyone" : "모든 이들에 대해 통화 끝내기", + "Starting the recording" : "녹음/녹화 시작 중", + "Recording" : "녹음/녹화 중", + "The call has been running for one hour." : "통화가 한 시간동안 진행되었습니다.", + "Cancel recording start" : "녹음/녹화 시작 취소", + "Stop recording" : "녹음/녹화 중단", + "Send a reaction" : "반응 보내기", + "React with {reaction}" : "{reaction}(으)로 반응하기", + "_%n participant in call_::_%n participants in call_" : ["%n명의 참가자가 통화 중"], + "You are not allowed to enable screensharing" : "화면 공유를 활성화할 수 없습니다.", + "No screensharing" : "화면 공유 없음", + "Screensharing options" : "화면 공유 옵션", + "Enable screensharing" : "화면 공유 활성화", + "Bad sent video and screen quality." : "전송하는 영상 및 화면 품질이 좋지 않습니다.", + "Bad sent screen quality." : "전송하는 화면의 품질이 좋지 않습니다.", + "Bad sent video quality." : "전송하는 영상의 품질이 좋지 않습니다.", + "Bad sent audio, video and screen quality." : "전송하는 소리와 영상 및 화면의 품질이 좋지 않습니다.", + "Bad sent audio and screen quality." : "전송하는 소리 및 화면의 품질이 좋지 않습니다.", + "Bad sent audio and video quality." : "전송하는 소리와 영상의 품질이 좋지 않습니다.", + "Bad sent audio quality." : "전송된 소리의 품질이 좋지 않습니다.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 배경 흐림을 끄거나 영상을 비활성화 해보세요.", + "Disable background blur" : "배경 흐림 비활성화", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신의 화면을 볼 수 없을 수도 있습니다.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 볼 수 없을 수도 있습니다.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 배경 흐림을 끄거나 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 하는 동안 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없거나 당신의 화면을 볼 수 없을 수도 있습니다. 이를 개선하려면 화면 공유를 비활성화 해보세요.", + "Disable screenshare" : "화면 공유 끄기", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 배경 흐림이나 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다. 이를 개선하려면 영상을 비활성화 해보세요.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "당신의 인터넷 연결 또는 컴퓨터가 혼잡해 다른 참가자들이 당신을 알아듣고 볼 수 없을 수도 있습니다.", + "Screen sharing is not supported by your browser." : "이 브라우저에서는 화면 공유를 지원하지 않습니다.", + "Screen sharing requires the page to be loaded through HTTPS." : "화면을 공유하려면 HTTPS를 통해 페이지를 로드 해야 합니다.", + "Screensharing requires the page to be loaded through HTTPS." : "화면 공유를 사용하려면 HTTPS로 페이지를 불러 와야 합니다.", + "An error occurred while starting screensharing." : "화면 공유를 시작하는 중 오류가 발생했습니다.", + "Show your screen" : "내 화면 보이기", + "Stop screensharing" : "화면 공유 중지", + "Mute others" : "다른 사람 음소거", + "Start recording" : "녹음/녹화 시작", + "Set up breakout rooms" : "소회의실 구성", + "Remove participant {name}" : "참가자 {name} 제거", + "Keep" : "보관", + "Open dialpad" : "다이얼패드 열기", + "Select a region" : "지역 선택", + "Search …" : "...를 검색", + "Message without mention" : "언급이 없는 메시지", + "Mention myself" : "자신을 언급하기", + "The conversation does not exist" : "대화가 존재하지 않습니다.", + "Join a conversation or start a new one!" : "대화에 참가하거나 새 대화를 시작하세요!", + "Duplicate session" : "중복 세션", + "Creating and joining a conversation with \"{userid}\"" : "{userid}님과의 대화를 생성하고 참가합니다", + "Join a conversation or start a new one" : "대화에 참가하거나 새 대화 시작", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 사용자", + "User password" : "사용자 암호", + "Talk conversation" : "토크 대화", + "Skip TLS verification" : "TLS 확인 건너뛰기", + "Matrix server URL" : "Matrix 서버 URL", + "User" : "사용자", + "Matrix channel" : "Matrix 채널", + "Mattermost server URL" : "Mattermost 서버 URL", + "Mattermost user" : "Mattermost 사용자", + "Team name" : "팀명", + "Channel name" : "채널 이름", + "Rocket.Chat server URL" : "Rocket.Chat 서버 URL", + "User name or email address" : "사용자 이름 또는 이메일 주소", + "Rocket.Chat channel" : "Rocket.Chat 채널", + "Zulip server URL" : "Zulip 서버 URL", + "Bot user name" : "봇 사용자 이름", + "Bot API key" : "봇 API 키 ", + "Zulip channel" : "Zulip 채널", + "API token" : "API 토큰", + "Slack channel" : "Slack 채널", + "Server ID or name" : "서버 아이디 또는 이름", + "Channel" : "채널", + "Login" : "로그인", + "Chat ID" : "채팅 아이디", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 서버 URL (e.g. chat.freenode.net:6667)", + "Nickname" : "별명", + "Connection password" : "연결 암호", + "IRC channel" : "IRC 채널", + "Channel password" : "채널 암호", + "NickServ nickname" : "NickServ 닉네임", + "NickServ password" : "NickServ 암호", + "Use TLS" : "TLS 사용", + "Use SASL" : "SASL 사용", + "Tenant ID" : "Tenant 아이디", + "Client ID" : "클라이언트 ID", + "Team ID" : "팀 아이디", + "Thread ID" : "Thread 아이디", + "XMPP/Jabber server URL" : "XMPP/Jabber 서버 URL", + "MUC server URL" : "MUC 서버 URL", + "Jabber ID" : "Jabber 아이디", + "Media" : "미디어", + "Polls" : "투표", + "Deck cards" : "덱 카드", + "Voice messages" : "음성 메시지", + "Locations" : "위치", + "Call recordings" : "통화 녹음/녹화", + "Audio" : "오디오", + "Show all media" : "모든 미디어 표시", + "Show all files" : "모든 파일 보기", + "Show all polls" : "모든 투표 보기", + "Show all deck cards" : "모든 덱 카드 보기", + "Show all voice messages" : "모든 음성 메시지 보기", + "Show all locations" : "모든 위치 표시", + "Show all call recordings" : "모든 통화 녹음/녹화 보기", + "Show all audio" : "모든 오디오 표시", + "Show all other" : "다른 모든 항목 표시", + "Group" : "그룹", + "Team" : "팀", + "You reconnected to the call" : "통화에 다시 연결했습니다.", + "{actor} reconnected to the call" : "{actor}님이 통화에 다시 연결했습니다.", + "You and {user0} left the call" : "당신과 {user0}님이 통화를 떠났습니다.", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["당신과 {user0}님 및 %n명의 참가자가 통화를 떠났습니다."], + "{user0} and {user1} left the call" : "{user0}님과 {user1}님이 통화를 떠났습니다.", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}님과 {user1}님 및 %n명의 참가자가 통화를 떠났습니다."], + "You: {lastMessage}" : "당신: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(당신에 의해 수정됨)", + "(edited by a deleted user)" : "(삭제된 사용자에 의해 수정됨)", + "(edited by {moderator})" : "({moderator}에 의해 수정됨)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "다른 창이나 기기에서 세션이 작동 중일 때 대화에 참가하려고 합니다. 이 기능은 현재 Nextcloud 토크에서 지원되지 않습니다. 어떻게 할까요?", + "Leave this page" : "이 페이지 떠나기", + "Join here" : "여기에 참가", + "An error occurred while posting deck card to conversation" : "대화에 덱 카드를 게시하는 동안 오류가 발생했습니다.", + "Post to a conversation" : "대화에 게시", + "Post to conversation" : "대화에 게시", + "The recording failed. Please contact your administrator." : "녹음/녹화가 실패했습니다. 관리자에게 연락해 주세요.", + "An error occurred while posting location to conversation" : "대화에 위치를 게시하는 동안 오류가 발생했습니다.", + "Share to a conversation" : "대화에 공유", + "Share to conversation" : "대화에 공유", + "Error while clearing conversation history" : "대화 기록을 지우는 동안 오류가 발생했습니다.", + "Error occurred while allowing guests" : "손님을 허용하는 동안 오류가 발생했습니다.", + "Error occurred while disallowing guests" : "손님을 불허용하는 동안 오류가 발생했습니다.", + "Error occurred when restricting the conversation to moderator" : "대화를 진행자로 제한하는 동안 오류가 발생했습니다.", + "Error occurred when opening the conversation to everyone" : "모든 사용자에게 대화를 여는 동안 오류가 발생했습니다.", + "Conversation password has been saved" : "대화 암호가 저장되었습니다.", + "Conversation password has been removed" : "대화 암호가 제거되었습니다.", + "Error occurred while saving conversation password" : "대화 암호를 저장하는 동안 오류가 발생했습니다.", + "Call recording is starting." : "통화 녹화/녹음을 시작하고 있습니다.", + "Call recording stopped while starting." : "통화 녹음/녹화가 시작 중 중단되었습니다.", + "Call recording stopped. You will be notified once the recording is available." : "통화 녹음/녹화가 중단되었습니다. 가능해지면 다시 알려드리겠습니다.", + "Conversation picture set" : "대화 사진 설정됨", + "Conversation picture deleted" : "대화 사진 삭제됨", + "Could not delete the conversation picture" : "대화 사진을 삭제할 수 없음", + "Could not post message: {errorMessage}" : "메시지를 게시할 수 없음 : {errorMessage}", + "An error occurred while fetching the participants" : "참가자를 가져오는 동안 오류가 발생했습니다.", + "Could not send invitation to {actorId}" : "{actorId}님에게 초대를 보낼 수 없음", + "Invitations sent" : "초대 전송됨", + "Error occurred when sending invitations" : "초대장을 보내는 동안 오류가 발생했습니다.", + "An error occurred while creating breakout rooms" : "소회의실을 만드는 중 오류가 발생했습니다.", + "An error occurred while re-ordering the attendees" : "참석자를 재정렬 하는 동안 오류가 발생했습니다.", + "An error occurred while deleting breakout rooms" : "소회의실을 삭제하는 동안 오류가 발생했습니다.", + "An error occurred while starting breakout rooms" : "소회의실을 시작하는 동안 오류가 발생했습니다.", + "An error occurred while stopping breakout rooms" : "소회의실을 중단하는 동안 오류가 발생했습니다.", + "An error occurred while sending a message to the breakout rooms" : "소회의실에 메시지를 보내는 동안 오류가 발생했습니다.", + "An error occurred while requesting assistance" : "지원을 요청하는 동안 오류가 발생했습니다.", + "An error occurred while resetting the request for assistance" : "지원 요청을 재설정 하는 동안 오류가 발생했습니다.", + "An error occurred while joining breakout room" : "소회의실에 참가하는 동안 오류가 발생했습니다.", + "{guest} (guest)" : "{guest}님(손님)", + "An error occurred while submitting your vote" : "투표를 제출하는 중 오류가 발생했습니다.", + "An error occurred while ending the poll" : "투표를 끝내는 중 오류가 발생했습니다.", + "Failed to add reaction" : "반응을 추가하는 데 실패했습니다.", + "Failed to remove reaction" : "반응을 삭제하는 데 실패했습니다.", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" 파일을 업로드하는 중 오류 발생", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" 파일을 업로드할 여유 공간이 없음", + "You are not allowed to share files" : "파일을 공유할 수 없습니다.", + "Error while sharing file" : "파일 공유하는 도중 오류", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "사용 중인 브라우저는 Nextcloud 토크에서 완전히 지원되지 않습니다. 최신 버전의 Mozilla Firefox, Microsoft Edge, Google Chrome, Opera 또는 Apple Safari를 사용하세요.", + "Later today – {timeLocale}" : "오늘 나중 – {timeLocale}", + "Tomorrow – {timeLocale}" : "내일 – {timeLocale}", + "This weekend – {timeLocale}" : "이번 주말 – {timeLocale}", + "Next week – {timeLocale}" : "다음주 – {timeLocale}", + "Message link copied to clipboard" : "메시지 링크가 클립보드에 복사되었습니다.", + "Conversation link copied to clipboard" : "대화 링크가 클립보드에 복사되었습니다.", + "The link could not be copied" : "링크를 복사할 수 없습니다.", + "Sending signaling message has failed" : "시그널링 메시지를 보내지 못했습니다.", + "Lost connection to signaling server. Trying to reconnect." : "시그널링 서버와의 연결이 끊어졌습니다. 다시 연결하는 중입니다.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "시그널링 서버가 이 버전의 Nextcloud와 호환되도록 업데이트 해야 합니다. 관리자에게 연락해주세요.", + "Please reload the page." : "페이지를 새로 고치십시오.", + "Do not disturb" : "방해 금지", + "Away" : "자리 비움", + "Microphone {number}" : "마이크 {number}", + "Camera {number}" : "카메라 {number}", + "Speaker {number}" : "스피커 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "음소거 된 상태로 말하고 있는 것 같습니다. 다른 사람이 들을 수 있도록 자신의 음소거를 해제하세요.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "하나 이상의 참가자와 연결을 맺을 수 없습니다. 이 상황에 TURN 서버가 필요할 수 있습니다. 관리자가 {linkstart}이 문서{linkend}를 따라 설정하도록 요청해 주세요.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "예상보다 오래 걸립니다. 미디어 권한을 이미 허가 또는 거부하셨나요? 그렇다면 소리 및 영상을 사용하지 못하므로 브라우저를 다시 시작하세요.", + "Access to microphone & camera is only possible with HTTPS" : "마이크와 카메라에는 HTTPS로만 접근할 수 있음", + "Please move your setup to HTTPS" : "설정을 HTTPS로 바꾸십시오.", + "Access to microphone & camera was denied" : "마이크 및 카메라 접근이 거부됨", + "WebRTC is not supported in your browser" : "웹 브라우저에서 WebRTC를 지원하지 않음", + "Please use a different browser like Firefox or Chrome" : "Firefox 및 Chrome과 같은 다른 웹 브라우저를 사용하십시오", + "Error while accessing microphone & camera" : "마이크와 카메라에 접근하는 중 오류 발생", + "%s Talk on your mobile devices" : "모바일 기기에서 %s Talk 사용하기", + "Join conversations at any time, anywhere, on any device." : "언제 어디서나, 원하는 기기에서 대화에 참가하세요.", + "Android app" : "Android 앱", + "iOS app" : "iOS 앱", + "__language_name__" : "한국어", + "Tasks" : "작업", + "Notes" : "메모", + "Reports" : "리포트들", + "Set reminder for later today" : "알림을 오늘 나중으로 설정", + "Set reminder for tomorrow" : "알림을 내일로 설정", + "Set reminder for this weekend" : "알림을 이번 주말로 설정", + "Set reminder for next week" : "알림을 다음주로 설정", + "Open poll • You voted already" : "투표 열기 • 이미 투표함", + "Open poll • Click to vote" : "투표 열기 • 클릭해 투표", + "Poll • Ended" : " 투표 • 종료됨", + "Talk recording from {time} ({conversation})" : "{time}의 대화 녹음 ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["투표 결과 • %n개 표"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["투표 열기 • %n표"], + "Submit vote" : "투표하기", + "Your privacy setting has been saved" : "개인 정보 설정이 저장되었습니다.", + "Failed to save sounds setting" : "소리 설정을 저장하지 못했습니다.", + "Sounds setting saved" : "소리 설정이 저장되었습니다.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "다른 창이나 기기에서 대화에 참가했습니다. 이 기능은 현재 Nextcloud 토크에서 지원되지 않으며, 현재 세션은 종료됩니다." +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/lo.js b/l10n/lo.js new file mode 100644 index 0000000..ecc599f --- /dev/null +++ b/l10n/lo.js @@ -0,0 +1,2144 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "ແຂກ", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators can now create breakout rooms (requires the High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Calls can now be recorded (requires the High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Messages can now be edited by logged-in authors and moderators for 6 hours", + "- Unsent message drafts are now saved in your browser" : "- Unsent message drafts are now saved in your browser", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Text chatting can now be done in a federated way with other Talk servers", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists", + "- Archive conversations to stay focused" : "- Archive conversations to stay focused", + "- Schedule a meeting into your calendar from within a conversation" : "- Schedule a meeting into your calendar from within a conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Search for messages of the current conversation directly in the right sidebar", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- See more conversations on a first glance with the new compact list (enable in the Talk settings)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- To receive push notifications during \"Do not disturb\", mark conversations as important", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Add other participants to a one-to-one call to create a new group call on the fly", + "- Use threads to keep your chat and discussions organized" : "- Use threads to keep your chat and discussions organized", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)", + "_All %n participant_::_All %n participants_" : ["All %n participants"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a silent call" : "You started a silent call", + "Outgoing silent call" : "Outgoing silent call", + "{actor} started a silent call" : "{actor} started a silent call", + "Incoming silent call" : "Incoming silent call", + "You started a call" : "You started a call", + "Outgoing call" : "Outgoing call", + "{actor} started a call" : "{actor} started a call", + "Incoming call" : "Incoming call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "You accepted the invitation" : "You accepted the invitation", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "You declined the invitation" : "You declined the invitation", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added team {circle}" : "{actor} added team {circle}", + "You added team {circle}" : "You added team {circle}", + "An administrator added team {circle}" : "An administrator added team {circle}", + "{actor} removed team {circle}" : "{actor} removed team {circle}", + "You removed team {circle}" : "You removed team {circle}", + "An administrator removed team {circle}" : "An administrator removed team {circle}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "File shares are currently not supported in federated conversations" : "File shares are currently not supported in federated conversations", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} created thread {title}" : "{actor} created thread {title}", + "You created thread {title}" : "You created thread {title}", + "{actor} renamed thread {title}" : "{actor} renamed thread {title}", + "You renamed thread {title}" : "You renamed thread {title}", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} edited a message" : "{actor} edited a message", + "You edited a message" : "You edited a message", + "{actor} pinned a message" : "{actor} pinned a message", + "You pinned a message" : "You pinned a message", + "{actor} unpinned a message" : "{actor} unpinned a message", + "Message was automatically unpinned" : "Message was automatically unpinned", + "You unpinned a message" : "You unpinned a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "ຂໍ້ຄວາມຖືກລຶບໂດຍຜູ້ຂຽນ", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "ການຈັດການ", + "System" : "System", + "%s (guest)" : "%s (guest)", + "Missed call" : "Missed call", + "Unanswered call" : "Unanswered call", + "Call ended (Duration {duration})" : "Call ended (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Call was ended, as it reached the maximum call duration (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ended the call (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guests ended (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guests (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Call with {user1} ended (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Call with {user1} and {user2} ended (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Call with {user1}, {user2} and {user3} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "Storage quota exceeded", + "File not found" : "ບໍ່ພົບໄຟລ໌", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "ໂພລ", + "Password needs to be set" : "Password needs to be set", + "Uploading the file failed" : "Uploading the file failed", + "No image file provided" : "No image file provided", + "File is too big" : "ຟາຍໃຫຍ່ໂພດ", + "Invalid file provided" : "ຟາຍບໍ່ຖືກຕ້ອງ", + "Invalid image" : "ບໍ່ມີຮູບພາບ", + "Unknown filetype" : "ບໍ່ຮູ້ປະເພດຂອງຟາຍ", + "Talk mentions" : "Talk mentions", + "More conversations" : "More conversations", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Missing email field in header line" : "Missing email field in header line", + "Following lines are invalid: %s" : "Following lines are invalid: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s invited you to conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "You were invited to conversation \"%s\".", + "Conversation invitation" : "Conversation invitation", + "Scheduled time" : "Scheduled time", + "Description" : "ລາຍລະອຽດ", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Click the button below to join the lobby now." : "Click the button below to join the lobby now.", + "Click the link below to join the lobby now." : "Click the link below to join the lobby now.", + "Join lobby for \"%s\"" : "Join lobby for \"%s\"", + "Click the button below to join the conversation now." : "Click the button below to join the conversation now.", + "Click the link below to join the conversation now." : "Click the link below to join the conversation now.", + "Join \"%s\"" : "Join \"%s\"", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "ຍົກເລີກການເເຈ້ງເຕືອນ", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Call summary now available" : "Call summary now available", + "The summary for the call in {call} was uploaded to {file}." : "The summary for the call in {call} was uploaded to {file}.", + "Failed to summarize call recording" : "Failed to summarize call recording", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} invited you to join {roomName} on {remoteServer}", + "Accept" : "ຍອມຮັບ", + "Decline" : "ປະຕິເສດ", + "{user1} invited you to a federated conversation" : "{user1} invited you to a federated conversation", + "Someone reacted" : "Someone reacted", + "New message" : "New message", + "Reminder" : "Reminder", + "Someone mentioned you" : "Someone mentioned you", + "Notification" : "ການແຈ້ງເຕືອນ", + "Someone reacted in a private conversation" : "Someone reacted in a private conversation", + "You received a message in a private conversation" : "You received a message in a private conversation", + "Reminder in a private conversation" : "Reminder in a private conversation", + "Someone mentioned you in a private conversation" : "Someone mentioned you in a private conversation", + "Notification in a private conversation" : "Notification in a private conversation", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mentioned team {team} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "A deleted user mentioned team {team} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (guest) mentioned team {team} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "A guest mentioned team {team} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "Accept call" : "Accept call", + "Incoming phone call from {call}" : "Incoming phone call from {call}", + "You missed a phone call from {call}" : "You missed a phone call from {call}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "ເປີດການຕັ້ງຄ່າ", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "ເລີ່ມຕົ້ນ", + "Presentation" : "ງານນຳສະເໜີ", + "Webinar" : "Webinar", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "ອື່ນໆ", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Transcript is AI generated and may contain mistakes" : "Transcript is AI generated and may contain mistakes", + "Summary is AI generated and may contain mistakes" : "Summary is AI generated and may contain mistakes", + "Let's get started!" : "Let's get started!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "You can reply to messages, forward them to other chats and people, or copy message content.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!", + "Andorra" : "ອັນດໍຣາ", + "United Arab Emirates" : "ສະຫະລັດອາຣັບເອມິເຣດ", + "Afghanistan" : "ອັຟການິສຖານ", + "Antigua and Barbuda" : "ອັງຕີກາ ແລະ ບາກບູດາ", + "Anguilla" : "ອັງກິລາ", + "Albania" : "ອານບານີ", + "Armenia" : "ອາກເມນີ", + "Angola" : "ອັງໂກລາ", + "Antarctica" : "ແອນຕາກຕິກາ", + "Argentina" : "ອາເຈນຕິນາ", + "American Samoa" : "ອາເມຣິກັນຊາມົວ", + "Austria" : "ອອສເຕຣຍ", + "Australia" : "ອອສເຕຣເລຍ", + "Aruba" : "ອາຣູບາ", + "Åland Islands" : "ໝູ່ເກາະໂອລັນ", + "Azerbaijan" : "ອາແຊກໄບຊານ", + "Bosnia and Herzegovina" : "ບອສເນຍ ແລະ ເຮີເຊໂກວີນາ", + "Barbados" : "ບາກບາດອສ", + "Bangladesh" : "ບັງກະລາເທດ", + "Belgium" : "ແບນຊິກ", + "Burkina Faso" : "ບວກກິນາຟາໂຊ", + "Bulgaria" : "ບູນກາຣີ", + "Bahrain" : "ບາເຣນ", + "Burundi" : "ບຸຣຸນດີ", + "Benin" : "ເບນິນ", + "Saint Barthélemy" : "ແຊັງບາກເທເລມີ", + "Bermuda" : "ເບີມິວດາ", + "Brunei Darussalam" : "ບຣູໄນ ດາຣູຊາລາມ", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "ໂບແມ, ຊິນເອິສຕາຊິອຶສ ແລະ ຊາບາ", + "Brazil" : "ບຣາຊິນ", + "Bahamas" : "ບາຮາມາດ", + "Bhutan" : "ພູຖານ", + "Bouvet Island" : "ເກາະບູເວ", + "Botswana" : "ບົດສະວານາ", + "Belarus" : "ເບລາຣຸສ", + "Belize" : "ເບລີຊ", + "Canada" : "ການາດາ", + "Cocos (Keeling) Islands" : "ໝູ່ເກາະໂກໂກສ (ຄີລິງ)", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "ສາທາລະນະລັດອາຟຣິກາກາງ", + "Congo" : "ຄອງໂກ", + "Switzerland" : "ສະວິດເຊີແລນ", + "Côte d'Ivoire" : "ໂກດດີວົວ", + "Cook Islands" : "ໝູ່ເກາະຄຸກ", + "Chile" : "ຊິລີ", + "Cameroon" : "ກາເມີຣູນ", + "China" : "ຈີນ", + "Colombia" : "ໂກລົມບີ", + "Costa Rica" : "ກົດສະຕາຣິກາ", + "Cuba" : "ກູບາ", + "Cabo Verde" : "ກາໂບແວກ", + "Curaçao" : "ກືລາເຊົາ", + "Christmas Island" : "ເກາະຄຣິສມາດ", + "Cyprus" : "ໄຊປຣັສ", + "Czechia" : "ເຊັກເກຍ", + "Germany" : "ເຢຍລະມັນ", + "Djibouti" : "ຈິບູຕີ", + "Denmark" : "ເດນມາກ", + "Dominica" : "ໂດມິນິກາ", + "Dominican Republic" : "ສາທາລະນະລັດໂດມິນິແກນ", + "Algeria" : "ແອລຈີເຣຍ", + "Ecuador" : "ເອກວາດໍ", + "Estonia" : "ເອສໂຕເນຍ", + "Egypt" : "ອີຢິບ", + "Western Sahara" : "ຊາຮາຣາຕາເວັນຕົກ", + "Eritrea" : "ເອຣິເທຣຍ", + "Spain" : "ແອັດສະປາຍ", + "Ethiopia" : "ເອທິໂອເປຍ", + "Finland" : "ແຟງລັງ", + "Fiji" : "ຟິຈິ", + "Falkland Islands (Malvinas)" : "ໝູ່ເກາະຟອກແລນ (ມາວີນັສ)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "ໝູ່ເກາະເຟີໂຣ", + "France" : "ຝຣັ່ງ", + "Gabon" : "ກາບົງ", + "United Kingdom of Great Britain and Northern Ireland" : "ສະຫະລາຊະອານາຈັກ", + "Grenada" : "ເກຣເນດາ", + "Georgia" : "ຈໍເຈຍ", + "French Guiana" : "ກຸຍຢານຝຣັ່ງ", + "Guernsey" : "ເກີນຊີ", + "Ghana" : "ການາ", + "Gibraltar" : "ຢິບຣາຕາ", + "Greenland" : "ກຣີນແລນ", + "Gambia" : "ແກມເບຍ", + "Guinea" : "ກິເນ", + "Guadeloupe" : "ກວາດາລູບ", + "Equatorial Guinea" : "ກິເນອີຄວາທໍຣຽວ", + "Greece" : "ກະເຣັກ", + "South Georgia and the South Sandwich Islands" : "ເກາະຈໍເຈຍໃຕ້ ແລະ ໝູ່ເກາະແຊນວິດໃຕ້", + "Guatemala" : "ກົວເຕມາລາ", + "Guam" : "ກວມ", + "Guinea-Bissau" : "ກິເນ-ບິສເຊົາ", + "Guyana" : "ກຸຍອານາ", + "Hong Kong" : "ຮົງກົງ", + "Heard Island and McDonald Islands" : "ເກາະເຮີດ ແລະ ໝູ່ເກາະແມັກໂດນໍ", + "Honduras" : "ຮອນດູຣັດ", + "Croatia" : "ໂຄຣເອເຊຍ", + "Haiti" : "ໄຮຕິ", + "Hungary" : "ຮົງກາຣີ", + "Indonesia" : "ອິນໂດເນເຊຍ", + "Ireland" : "ອຽກລັງ", + "Israel" : "ອິດສະຣາແອນ", + "Isle of Man" : "ເກາະແມນ", + "India" : "ອິນເດຍ", + "British Indian Ocean Territory" : "ດິນແດນມະຫາສະໝຸດອິນເດຍຂອງອັງກິດ", + "Iraq" : "ອີຣັກ", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "ໄອສແລນ", + "Italy" : "ອິຕາລີ", + "Jersey" : "ເຈີຊີ", + "Jamaica" : "ຈາໄມກາ", + "Jordan" : "ຈໍແດນ", + "Japan" : "ຍີ່ປຸ່ນ", + "Kenya" : "ເຄນຢາ", + "Kyrgyzstan" : "ຄີກີຊສະຖານ", + "Cambodia" : "ກຳປູເຈຍ", + "Kiribati" : "ຄິຣິບາຕິ", + "Comoros" : "ໂກໂມໂຣສ", + "Saint Kitts and Nevis" : "ເຊັນຄິດ ແລະ ເນວິສ", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "ເກົາຫຼີ, ສາທາລະນະລັດ", + "Kuwait" : "ກູເວດ", + "Cayman Islands" : "ໝູ່ເກາະເຄແມນ", + "Kazakhstan" : "ຄາຊັກສະຖານ", + "Lao People's Democratic Republic" : "ສາທາລະນະລັດ ປະຊາທິປະໄຕ ປະຊາຊົນລາວ", + "Lebanon" : "ເລບານອນ", + "Saint Lucia" : "ເຊັນລູເຊຍ", + "Liechtenstein" : "ລິດເທນສະໄຕ", + "Sri Lanka" : "ສີລັງກາ", + "Liberia" : "ໄລບີເຣຍ", + "Lesotho" : "ເລໂຊໂທ", + "Lithuania" : "ລິທົວເນຍ", + "Luxembourg" : "ລຸກຊຳບວກ", + "Latvia" : "ລັດເວຍ", + "Libya" : "ລິເບຍ", + "Morocco" : "ໂມຣັອກໂຄ", + "Monaco" : "ໂມນາໂກ", + "Moldova, Republic of" : "ມອລໂດວາ, ສາທາລະນະລັດ", + "Montenegro" : "ມອນເຕເນໂກຣ", + "Saint Martin (French part)" : "ເຊັນມາຕິນ (ສ່ວນຂອງຝຣັ່ງ)", + "Madagascar" : "ມາດາກາສະກາ", + "Marshall Islands" : "ໝູ່ເກາະມາແຊວ", + "North Macedonia" : "ມາເຊໂດເນຍເໜືອ", + "Mali" : "ມາລີ", + "Myanmar" : "ມຽນມາ", + "Mongolia" : "ມົງໂກລີ", + "Macao" : "ມາເກົ້າ", + "Northern Mariana Islands" : "ໝູ່ເກາະມາເຣຍນາເໜືອ", + "Martinique" : "ມາຕິນິກ", + "Mauritania" : "ມໍຣິເຕເນຍ", + "Montserrat" : "ມອນເຊີຣາດ", + "Malta" : "ມັນຕາ", + "Mauritius" : "ມໍຣິຊຽສ", + "Maldives" : "ມັນດິບ", + "Malawi" : "ມາລາວີ", + "Mexico" : "ເມັກຊິໂກ", + "Malaysia" : "ມາເລເຊຍ", + "Mozambique" : "ໂມຊຳບິກ", + "Namibia" : "ນາມິເບຍ", + "New Caledonia" : "ນິວແຄລິໂດເນຍ", + "Niger" : "ໄນເຈີ", + "Norfolk Island" : "ເກາະນໍຟອກ", + "Nigeria" : "ໄນຈີເຣຍ", + "Nicaragua" : "ນິກາຣາກົວ", + "Netherlands" : "ໂຮນລັງ", + "Norway" : "ນໍເວ", + "Nepal" : "ເນປານ", + "Nauru" : "ນາອູຣູ", + "Niue" : "ນີອູເອ", + "New Zealand" : "ນິວຊີແລນ", + "Oman" : "ໂອມານ", + "Panama" : "ປານາມາ", + "Peru" : "ເປຣູ", + "French Polynesia" : "ໂປລິນີເຊຍຂອງຝຣັ່ງ", + "Papua New Guinea" : "ປາປົວນິວກິເນ", + "Philippines" : "ຟິລິບປິນ", + "Pakistan" : "ປາກິດສະຖານ", + "Poland" : "ໂປແລນ", + "Saint Pierre and Miquelon" : "ແຊັງປີແຍ ແລະ ມິເກີລົງ", + "Pitcairn" : "ພິດແຄນ", + "Puerto Rico" : "ເປີໂຕຣິໂກ", + "Palestine, State of" : "ປາແລັດສະໄຕ, ລັດ", + "Portugal" : "ປອກຕຸຍການ", + "Palau" : "ປາເລົາ", + "Paraguay" : "ປາຣາກວາຍ", + "Qatar" : "ກາຕາ", + "Réunion" : "ເຣອູນີຢົງ", + "Romania" : "ໂຣມາເນຍ", + "Serbia" : "ແຊກບີ", + "Russian Federation" : "ສະຫະພັນລັດເຊຍ", + "Rwanda" : "ຣະວັນດາ", + "Saudi Arabia" : "ຊາອຸດິອາຣະເບຍ", + "Solomon Islands" : "ໝູ່ເກາະໂຊໂລມອນ", + "Seychelles" : "ເຊແຊລ", + "Sudan" : "ຊູດານ", + "Sweden" : "ຊູແອັດ", + "Singapore" : "ສິງກະໂປ", + "Saint Helena, Ascension and Tristan da Cunha" : "ເຊັນເຮເລນາ, ອັສເຊັນຊັນ ແລະ ທຣິສຕັນດາຄູນຢາ", + "Slovenia" : "ສະໂລເວເນຍ", + "Svalbard and Jan Mayen" : "ສະວາບາດ ແລະ ແຢນມາເຢນ", + "Slovakia" : "ສະໂລວາເກຍ", + "Sierra Leone" : "ເຊຍຣາລີໂອນ", + "San Marino" : "ຊານມາຣິໂນ", + "Senegal" : "ເຊເນການ", + "Somalia" : "ໂຊມາເລຍ", + "Suriname" : "ຊູຣິນາມ", + "South Sudan" : "ຊູດານໃຕ້", + "Sao Tome and Principe" : "ເຊົາຕູເມ ແລະ ປຣິນຊິປີ", + "El Salvador" : "ເອລຊາວາດໍ", + "Sint Maarten (Dutch part)" : "ຊິນມາເຕັນ (ສ່ວນຂອງໂຮນລັງ)", + "Syrian Arab Republic" : "ສາທາລະນະລັດອາຣັບຊີເຣຍ", + "Eswatini" : "ເອສະວາຕິນີ", + "Turks and Caicos Islands" : "ໝູ່ເກາະເທີກ ແລະ ໄກໂກສ", + "Chad" : "ຊາດ", + "French Southern Territories" : "ດິນແດນຕອນໃຕ້ຂອງຝຣັ່ງ", + "Togo" : "ໂຕໂກ", + "Thailand" : "ໄທ", + "Tajikistan" : "ທາຈິກິດສະຖານ", + "Tokelau" : "ໂຕເກເລົາ", + "Timor-Leste" : "ຕີມໍ-ເລສເຕ", + "Turkmenistan" : "ເທີກເມນິດສະຖານ", + "Tunisia" : "ຕູນິເຊຍ", + "Tonga" : "ຕອງກາ", + "Turkey" : "ຕວກກີ", + "Trinidad and Tobago" : "ທຣິນິແດດ ແລະ ໂທເບໂກ", + "Tuvalu" : "ຕູວາລູ", + "Taiwan, Province of China" : "ໄຕ້ຫວັນ, ແຂວງຂອງຈີນ", + "Tanzania, United Republic of" : "ແທນຊາເນຍ, ສະຫະສາທາລະນະລັດ", + "Ukraine" : "ອູແກຣນ", + "Uganda" : "ອູການດາ", + "United States Minor Outlying Islands" : "ໝູ່ເກາະນ້ອຍຂອງສະຫະລັດ", + "United States of America" : "ສະຫະລັດອາເມຣິກາ", + "Uruguay" : "ອູຣູກວາຍ", + "Uzbekistan" : "ອຸຊເບກິດສະຖານ", + "Holy See" : "ນະຄອນວາຕິກັນ", + "Saint Vincent and the Grenadines" : "ເຊັນວິນເຊັນ ແລະ ເກຣເນດິນ", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "ຫວຽດນາມ", + "Vanuatu" : "ວານູອາຕູ", + "Wallis and Futuna" : "ວາລິສ ແລະ ຟູຕູນາ", + "Samoa" : "ຊາມົວ", + "Yemen" : "ເຢເມນ", + "Mayotte" : "ມາຢັອດ", + "South Africa" : "ອາຟຣິກາໃຕ້", + "Zambia" : "ແຊມເບຍ", + "Zimbabwe" : "ຊິມບັບເວ", + "Background blur" : "Background blur", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.", + "Talk configuration values" : "Talk configuration values", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend not configured correctly. Run %s for details.", + "High-performance backend not configured correctly" : "High-performance backend not configured correctly", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.", + "Client Push" : "Client Push", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "Using the recording backend requires a High-performance backend.", + "No recording backend configured" : "No recording backend configured", + "SIP configuration" : "SIP configuration", + "Using the SIP functionality requires a High-performance backend." : "Using the SIP functionality requires a High-performance backend.", + "No SIP backend configured" : "No SIP backend configured", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Path is already shared with this conversation" : "Path is already shared with this conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Error occurred when getting the conversation information" : "Error occurred when getting the conversation information", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "ລະຫັດບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ອີກຄັ້ງ.", + "Password" : "ລະຫັດຜ່ານ", + "Submit" : "ສົ່ງ", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "ກຳລັງບັນທຶກ", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "ກ່າວ", + "Name" : "ຊື່", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated chats and calls work already. Attachment handling is coming in a future version.", + "Enable Federation in Talk app" : "Enable Federation in Talk app", + "Permissions" : "ການອະນຸຍາດ", + "Allow users to be invited to federated conversations" : "Allow users to be invited to federated conversations", + "Allow users to invite federated users into conversation" : "Allow users to invite federated users into conversation", + "Only allow to federate with trusted servers" : "Only allow to federate with trusted servers", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "When at least one group is selected, only people of the listed groups can invite federated users to conversations.", + "Groups allowed to invite federated users" : "Groups allowed to invite federated users", + "Select groups …" : "Select groups …", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "End-to-end encrypted calls" : "End-to-end encrypted calls", + "Enable encryption" : "Enable encryption", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile clients do not support end-to-end encrypted calls at the moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "ທີ່ກໍາລັງລໍຖ້າ", + "Error" : "ຜິດພາດ", + "Blocked" : "Blocked", + "Active" : "ກຳລັງໃຊ້ງານ", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "ປະເທດ", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "STUN included" : "STUN included", + "Yes" : "ແມ່ນ", + "No" : "ບໍ່", + "TURN included" : "TURN included", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend configuration is only possible with a High-performance backend.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "Recording transcription" : "Recording transcription", + "Automatically transcribe call recordings with a transcription provider" : "Automatically transcribe call recordings with a transcription provider", + "Automatically summarize call recordings with transcription and summary providers" : "Automatically summarize call recordings with transcription and summary providers", + "SIP configuration saved!" : "SIP configuration saved!", + "SIP configuration is only possible with a High-performance backend." : "SIP configuration is only possible with a High-performance backend.", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Do not show SIP Dial-out caller number" : "Do not show SIP Dial-out caller number", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient", + "Dial-out number" : "Dial-out number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatted number used as a fallback caller number for outgoing calls", + "Dial-out prefix" : "Dial-out prefix", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix to configured user number for outgoing calls (default is `+`)", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Nextcloud base URL" : "Nextcloud base URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Available features", + "Error: Websocket connection failed" : "Error: Websocket connection failed", + "Error code" : "Error code", + "Error message" : "Error message", + "Error: Websocket connection failed. Check browser console" : "Error: Websocket connection failed. Check browser console", + "High-performance backend URL" : "High-performance backend URL", + "Missing High-performance backend warning hidden" : "Missing High-performance backend warning hidden", + "High-performance backend settings saved" : "High-performance backend settings saved", + "Nextcloud Talk setup not complete" : "Nextcloud Talk setup not complete", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Install the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Quick installation guide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend.", + "Add High-performance backend server" : "Add High-performance backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Warn about connectivity issues in calls with more than 2 participants", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "ຕົກລົງ", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "Federated user", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "You can create from 1 to 20 breakout rooms." : "You can create from 1 to 20 breakout rooms.", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "ຢືນຢັນ", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "ຕັ້ງຄ່າໃໝ່", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "ຍົກເລີກ", + "Unassigned participants" : "Unassigned participants", + "Back" : "ຫຼັງ", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Invalid calendar selected" : "Invalid calendar selected", + "Invalid start time selected" : "Invalid start time selected", + "Invalid end time selected" : "Invalid end time selected", + "Unknown error occurred" : "Unknown error occurred", + "Sending no invitations" : "Sending no invitations", + "{participant0} will receive an invitation" : "{participant0} will receive an invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} and {participant1} will receive invitations", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n others will receive invitations"], + "Invite {user}" : "Invite {user}", + "Invite all users and emails in this conversation" : "Invite all users and emails in this conversation", + "Meeting created" : "Meeting created", + "Upcoming meetings" : "Upcoming meetings", + "Loading …" : "ກຳລັງໂຫຼດ…", + "No upcoming meetings" : "No upcoming meetings", + "Schedule a meeting" : "Schedule a meeting", + "Meeting title" : "Meeting title", + "From" : "ຈາກ", + "To" : "ເຖິງ", + "Calendar" : "ປະຕິທິນ", + "Attendees" : "Attendees", + "No other participants to send invitations to." : "No other participants to send invitations to.", + "Add attendees" : "Add attendees", + "Save" : "ບັນທຶກ", + "Search participants" : "Search participants", + "No results" : "ບໍ່ມີຜົນ", + "Done" : "Done", + "Disable live transcription" : "Disable live transcription", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "ເບິ່ງຕາຕະລາງ", + "Error when trying to load the available live transcription languages" : "Error when trying to load the available live transcription languages", + "Failed to enable live transcription" : "Failed to enable live transcription", + "Recording consent is required" : "Recording consent is required", + "This conversation is read-only" : "This conversation is read-only", + "Conversation not found or not joined" : "Conversation not found or not joined", + "Lobby is still active and you're not a moderator" : "Lobby is still active and you're not a moderator", + "Connection failed" : "Connection failed", + "Reload" : "ໂຫລດຄືນໃໝ່", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "ສຳເນົາລິງ", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "ບໍ່ມີ", + "Select a microphone" : "Select a microphone", + "Select a speaker" : "Select a speaker", + "Check devices" : "Check devices", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Hide presenter video" : "Hide presenter video", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Select a video device" : "Select a video device", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Federated conversation" : "Federated conversation", + "Public conversation" : "Public conversation", + "Favorite" : "ລາຍການທີ່ມັກ", + "Banned users" : "Banned users", + "Manage the list of banned users in this conversation." : "Manage the list of banned users in this conversation.", + "Manage bans" : "Manage bans", + "No banned users" : "No banned users", + "Banned by:" : "Banned by:", + "Date:" : "Date:", + "Note:" : "ໝາຍເຫດ:", + "Hide details" : "ເຊື່ອງລາຍລະອຽດ", + "Show details" : "ສະແດງລາຍລະອຽດ", + "Unban" : "Unban", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "You can change the title and the description in {linkstart}Calendar ↗{linkend}.", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "ປິດ", + "Enable" : "Enable", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "ເລືອກ", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "ສ່ວນບຸກຄົນ", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Live transcription" : "Live transcription", + "Enable live transcription" : "Enable live transcription", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Archive conversation" : "Archive conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations.", + "Do you really want to leave \"{displayName}\"?" : "Do you really want to leave \"{displayName}\"?", + "You can archive this conversation instead." : "You can archive this conversation instead.", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hours"], + "_%n day_::_%n days_" : ["%n days"], + "_%n week_::_%n weeks_" : ["%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Password copied to clipboard" : "Password copied to clipboard", + "Password could not be copied" : "Password could not be copied", + "Guest access" : "Guest access", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms are not allowed in public conversations.", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "ລະຫັດປ້ອງກັນ", + "This conversation is password-protected. Guests need password to join" : "This conversation is password-protected. Guests need password to join", + "Password protection is needed for public conversations" : "Password protection is needed for public conversations", + "Set a password" : "ຕັ້ງລະຫັດຜ່ານ", + "Change password" : "ປ່ຽນລະຫັດຜ່ານ", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Copy password" : "Copy password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Set language spoken in calls" : "Set language spoken in calls", + "Languages could not be loaded" : "Languages could not be loaded", + "Loading languages …" : "Loading languages …", + "Invalid language" : "Invalid language", + "Default language (English)" : "Default language (English)", + "Default live transcription language set" : "Default live transcription language set", + "Live transcription language set: {languageName}" : "Live transcription language set: {languageName}", + "Error when trying to set live transcription language" : "Error when trying to set live transcription language", + "Start time: {date}" : "Start time: {date}", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Import email participants" : "Import email participants", + "You can import a list of email participants from a CSV file." : "You can import a list of email participants from a CSV file.", + "Poll drafts" : "Poll drafts", + "Browse poll drafts" : "Browse poll drafts", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "ແກ້ໄຂ", + "More information" : "More information", + "Delete" : "ລຶບ", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Messaging systems" : "Messaging systems", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Only moderators are allowed to mention @all" : "Only moderators are allowed to mention @all", + "All participants are allowed to mention @all" : "All participants are allowed to mention @all", + "Participants are now allowed to mention @all." : "Participants are now allowed to mention @all.", + "Mentioning @all has been limited to moderators." : "Mentioning @all has been limited to moderators.", + "Allow participants to mention @all" : "Allow participants to mention @all", + "Mention permissions" : "Mention permissions", + "Notifications" : "ການເເຈ້ງເຕືອນ", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "Important conversation", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Do not disturb\" user status is ignored for important conversations", + "Sensitive conversation" : "Sensitive conversation", + "Message preview will be disabled in conversation list and notifications" : "Message preview will be disabled in conversation list and notifications", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Ongoing" : "Ongoing", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n people accepted"], + "_%n person declined_::_%n people declined_" : ["%n people declined"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachments"], + "With {displayName}" : "With {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "View attachment", + "Join" : "Join", + "View conversation" : "View conversation", + "View event on Calendar" : "View event on Calendar", + "Error while creating the conversation" : "Error while creating the conversation", + "Hello, {displayName}" : "Hello, {displayName}", + "Start meeting now" : "Start meeting now", + "Give your meeting a title" : "Give your meeting a title", + "Create and copy link" : "Create and copy link", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Scroll backward" : "Scroll backward", + "Scroll forward" : "Scroll forward", + "Schedule meetings" : "Schedule meetings", + "You don't have any upcoming meetings" : "You don't have any upcoming meetings", + "Open calendar" : "Open calendar", + "Unread mentions" : "Unread mentions", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name", + "Upcoming reminders" : "Upcoming reminders", + "Message reminders" : "Message reminders", + "Set a reminder on a message to be notified" : "Set a reminder on a message to be notified", + "Start a group conversation" : "Start a group conversation", + "Create conversation" : "Create conversation", + "Enter your name" : "ປ້ອນຊື່ຂອງທ່ານ", + "Submit name and join" : "Submit name and join", + "Do you already have an account?" : "Do you already have an account?", + "Log in" : "ເຂົ້າລະບົບ", + "Error while verifying uploaded file" : "Error while verifying uploaded file", + "Uploaded file is verified" : "Uploaded file is verified", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Participants added successfully", + "Error while adding participants" : "Error while adding participants", + "Import a file" : "Import a file", + "Browse" : "Browse", + "Verifying uploaded file …" : "Verifying uploaded file …", + "This might take a moment" : "This might take a moment", + "Send invitations" : "Send invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitations can be sent"], + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "ຍ້າຍຈາກລາຍການທີ່ມັກ", + "Add to favorites" : "ເພີ່ມລາຍການທີ່ມັກ", + "Unarchive conversation" : "Unarchive conversation", + "Ignore \"Do not disturb\"" : "Ignore \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Notify about calls" : "Notify about calls", + "Hide message text" : "Hide message text", + "Pending invitations" : "Pending invitations", + "From {user} at {remoteServer}" : "From {user} at {remoteServer}", + "Decline invitation" : "Decline invitation", + "Accept invitation" : "Accept invitation", + "No pending invitations" : "No pending invitations", + "Home" : "ໜ້າຫຼັກ", + "Unread" : "Unread", + "Mentions" : "Mentions", + "Meetings" : "Meetings", + "Alphabetically" : "Alphabetically", + "No followed threads" : "No followed threads", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no archived conversations." : "You have no archived conversations.", + "Subscribe to an existing thread or start your own." : "Subscribe to an existing thread or start your own.", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Filter conversations by" : "Filter conversations by", + "Unread messages" : "Unread messages", + "Meeting conversations" : "Meeting conversations", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "Back to conversations" : "Back to conversations", + "Archived conversations" : "Archived conversations", + "Threads" : "Threads", + "Clear filter" : "Clear filter", + "Show more threads" : "Show more threads", + "App settings" : "App settings", + "Users" : "ຜູ້ໃຊ້", + "Groups" : "ກຸ່ມ", + "Teams" : "Teams", + "Federated users" : "Federated users", + "New private conversation" : "New private conversation", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users, groups and teams" : "Users, groups and teams", + "Users and groups" : "Users and groups", + "Users and teams" : "Users and teams", + "Groups and teams" : "Groups and teams", + "New group conversation" : "New group conversation", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select speaker" : "Select speaker", + "No speaker available" : "No speaker available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Select a device" : "Select a device", + "Playing …" : "Playing …", + "Test speakers" : "Test speakers", + "Test" : "ທົດສອບ", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Display video as you will see it (mirrored)" : "Display video as you will see it (mirrored)", + "Display video as others will see it" : "Display video as others will see it", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Show more info" : "Show more info", + "Audio is not available" : "Audio is not available", + "Video is not available" : "Video is not available", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Notify all participants about this call" : "Notify all participants about this call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "ເສັ້ນທາງທີ່ເລືອກບໍ່ຖືກຕ້ອງ", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "ອັບໂຫຼດ", + "Files" : "ຟາຍ", + "(editing)" : "(editing)", + "(edited)" : "(edited)", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 ຊົ່ວໂມງ", + "7 days" : "7 ມື້", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Edited by {actor}" : "Edited by {actor}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message" : "Copy message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Download file" : "Download file", + "Go to thread" : "Go to thread", + "Edit thread details" : "Edit thread details", + "Forward message" : "Forward message", + "Translate" : "ແປ", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "ຍົກເລີກ", + "Go to conversation" : "Go to conversation", + "Detect language" : "ກວດສອບພາສາ", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Sent without notification" : "Sent without notification", + "Deleting message" : "Deleting message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "ລາຍຊື່ຜູ້ຕິດຕໍ່", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n replies"], + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Could not update the message" : "Could not update the message", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n options"], + "_%n vote_::_%n votes_" : ["%n vote"], + "Edit poll draft" : "Edit poll draft", + "Delete poll draft" : "Delete poll draft", + "Open poll" : "Open poll", + "See results" : "See results", + "Reactions" : "Reactions", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "and {participant}" : "and {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participants"], + "Show all reactions" : "Show all reactions", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "Error: A password is required to create the conversation." : "Error: A password is required to create the conversation.", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Maximum length exceeded ({maxlength} characters)" : "Maximum length exceeded ({maxlength} characters)", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Write a message without notification" : "Write a message without notification", + "Create a thread silently" : "Create a thread silently", + "Create a thread" : "Create a thread", + "Send message silently" : "Send message silently", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "The participant will not be notified about new messages" : "The participant will not be notified about new messages", + "Participants will not be notified about new messages" : "Participants will not be notified about new messages", + "Thread title is required" : "Thread title is required", + "Message text is required" : "Message text is required", + "The message could not be edited" : "The message could not be edited", + "File to share" : "File to share", + "File upload is not available in this conversation" : "File upload is not available in this conversation", + "Add emoji" : "Add emoji", + "Adding a mention will only notify users who did not read the message." : "Adding a mention will only notify users who did not read the message.", + "Thread title" : "Thread title", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Absence period: {startDate} - {endDate}" : "Absence period: {startDate} - {endDate}", + "Replacement:" : "Replacement:", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "Generating summary of unread messages …" : "Generating summary of unread messages …", + "Summary is AI generated and might contain mistakes" : "Summary is AI generated and might contain mistakes", + "Error occurred during a summary generation" : "Error occurred during a summary generation", + "New file" : "ຟາຍໃໝ່", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "ສົ່ງ", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "No poll drafts" : "No poll drafts", + "There is no poll drafts yet saved for this conversation" : "There is no poll drafts yet saved for this conversation", + "Create poll in {name}" : "Create poll in {name}", + "Create poll" : "Create poll", + "Error while importing poll" : "Error while importing poll", + "Question" : "ຄຳຖາມ", + "Ask a question" : "Ask a question", + "Import draft from file" : "Import draft from file", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "ການຕັ້ງຄ່າ", + "Anonymous poll" : "ໂພລນິລະນາມ", + "Multiple answers" : "Multiple answers", + "Save as draft" : "Save as draft", + "Export draft to file" : "Export draft to file", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "ຜົນລັບ", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}", + "Talk setup incomplete" : "Talk setup incomplete", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "ແຂກ", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove team and members" : "Remove team and members", + "Remove participant" : "Remove participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Do you really want to remove group \"{displayName}\" and its members from this conversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Do you really want to remove team \"{displayName}\" and its members from this conversation?", + "Do you really want to remove {displayName} from this conversation?" : "Do you really want to remove {displayName} from this conversation?", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "in the lobby" : "in the lobby", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Move back to lobby" : "Move back to lobby", + "Move to conversation" : "Move to conversation", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Also ban from this conversation" : "Also ban from this conversation", + "Internal note (reason to ban)" : "Internal note (reason to ban)", + "Remove" : "ຍ້າຍອອກ", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users, groups or teams" : "Add users, groups or teams", + "Add users or groups" : "ເພີ່ມ ຜຸ້ໃຊ້ ຫຼື ກຸ່ມ", + "Add users or teams" : "Add users or teams", + "Add users" : "Add users", + "Add groups or teams" : "Add groups or teams", + "Add groups" : "Add groups", + "Add teams" : "Add teams", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "ກຳລັງຄົ້ນຫາ...", + "Search for more users" : "Search for more users", + "You can search or add participants via name, email, or Federated Cloud ID" : "You can search or add participants via name, email, or Federated Cloud ID", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "A new group conversation with selected participant will be created" : "A new group conversation with selected participant will be created", + "Participants" : "ຜູ້ເຂົ້າຮ່ວມ", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Search messages" : "Search messages", + "Chat" : "Chat", + "Details" : "ລາຍລະອຽດ", + "Shared items" : "Shared items", + "Search in {name}" : "Search in {name}", + "Threads in {name}" : "Threads in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Search messages …", + "Search options" : "Search options", + "From User" : "From User", + "Since" : "Since", + "Until" : "Until", + "No results found" : "ບໍ່ພົບຜົນລັບ", + "Load more results" : "ຜົນLoad ເພີ່ມເຕີມ", + "Recent threads" : "Recent threads", + "Projects" : "Projects", + "No shared items" : "No shared items", + "Thread notifications" : "Thread notifications", + "Thread actions" : "Thread actions", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Display name (required)" : "Display name (required)", + "Save name" : "Save name", + "Error while setting personal setting" : "Error while setting personal setting", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Compact conversations list" : "Compact conversations list", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer", + "Notification settings" : "Notification settings", + "Sounds for chat and call notifications" : "Sounds for chat and call notifications", + "Default language" : "ພາສາເລີ່ມຕົ້ນ", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Error while setting default media state" : "Error while setting default media state", + "Turn camera and microphone off by default" : "Turn camera and microphone off by default", + "Blur camera background by default" : "Blur camera background by default", + "Skip device preview before joining a call" : "Skip device preview before joining a call", + "Appearance & Sounds" : "Appearance & Sounds", + "Privacy" : "ສ່ວນຕົວ", + "Send read receipts" : "Send read receipts", + "When off, all read statuses will be hidden" : "When off, all read statuses will be hidden", + "Share typing status" : "Share typing status", + "When off, all typing indicators will be hidden" : "When off, all typing indicators will be hidden", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Return to Home screen" : "Return to Home screen", + "Search" : "ຄົ້ນຫາ", + "Shortcuts while in a chat" : "Shortcuts while in a chat", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Edit your last message" : "Edit your last message", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Zoom-in / zoom-out a screen share" : "Zoom-in / zoom-out a screen share", + "Mouse wheel" : "Mouse wheel", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "This call has just ended" : "This call has just ended", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "All tasks done!" : "All tasks done!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n tasks"], + "Add participants to this call" : "Add participants to this call", + "_%n participant in call_::_%n participants in call_" : ["%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Select virtual background" : "Select virtual background", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Download attendance list" : "Download attendance list", + "Open Calendar" : "Open Calendar", + "Remove participant {name}" : "Remove participant {name}", + "Would you like to delete this conversation?" : "Would you like to delete this conversation?", + "Are you sure you want to delete this conversation?" : "Are you sure you want to delete this conversation?", + "Delete now" : "Delete now", + "Keep" : "ຮັກສາໄວ້", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Local time: {time}" : "Local time: {time}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "Mention everyone" : "Mention everyone", + "Select a conversation" : "Select a conversation", + "Select a mode" : "Select a mode", + "You do not have permissions to access this conversation." : "You do not have permissions to access this conversation.", + "Join a different conversation or start a new one." : "Join a different conversation or start a new one.", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "Creating and joining a conversation with \"{userid}\"" : "Creating and joining a conversation with \"{userid}\"", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Error while joining the conversation" : "Error while joining the conversation", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "ການສົນທະນາ Talk", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "ຜູ້ໃຊ້", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel ID (prefixed with \"ID:\") or name" : "Channel ID (prefixed with \"ID:\") or name", + "Channel" : "Channel", + "Login" : "ເຂົ້າສູ່ລະບົບ", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "ຊື່ມວນຊົນ", + "Polls" : "ໂພລ", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "ສຽງ", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Follow conversation settings" : "Follow conversation settings", + "Group" : "ກຸ່ມ", + "Team" : "ທີມ", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participants"], + "You removed {user0} and {user1}" : "You removed {user0} and {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participants"], + "An administrator removed you and {user0}" : "An administrator removed you and {user0}", + "{actor} removed you and {user0}" : "{actor} removed you and {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participants"], + "An administrator removed {user0} and {user1}" : "An administrator removed {user0} and {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removed {user0} and {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You:" : "You:", + "You: {lastMessage}" : "You: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(edited by you)", + "(edited by a deleted user)" : "(edited by a deleted user)", + "(edited by {moderator})" : "(edited by {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "Location has been posted to {conversation}" : "Location has been posted to {conversation}", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "In conversation" : "In conversation", + "Search in conversation: {conversation}" : "Search in conversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Your requests are throttled at the moment due to brute force protection", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not remove the automatic expiration" : "Could not remove the automatic expiration", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "Participant is banned successfully" : "Participant is banned successfully", + "Error while banning the participant" : "Error while banning the participant", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "Failed to join the conversation." : "Failed to join the conversation.", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "Failed to rename the thread" : "Failed to rename the thread", + "Error fetching upcoming events" : "Error fetching upcoming events", + "Error fetching upcoming reminders" : "Error fetching upcoming reminders", + "An error occurred while accepting an invitation" : "An error occurred while accepting an invitation", + "An error occurred while rejecting an invitation" : "An error occurred while rejecting an invitation", + "{guest} (guest)" : "{guest} (guest)", + "Poll draft has been saved" : "Poll draft has been saved", + "An error occurred while saving the draft" : "An error occurred while saving the draft", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "An error occurred while deleting the poll draft" : "An error occurred while deleting the poll draft", + "Poll \"{name}\" was created by {user}. Click to vote" : "Poll \"{name}\" was created by {user}. Click to vote", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hours"], + "_%n minute _::_%n minutes_" : ["%n minutes"], + "In {hours} and {minutes}" : "In {hours} and {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minutes"], + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Error while parsing a PROPFIND error" : "Error while parsing a PROPFIND error", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "Lost connection to signaling server." : "Lost connection to signaling server.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please restart the app." : "Please restart the app.", + "Please reload the page." : "ກະລຸນາໂຫຼດຫນ້າເພດອີກ.", + "Please try to restart the app." : "Please try to restart the app.", + "Please try to reload the page." : "Please try to reload the page.", + "Do not disturb" : "ຫ້າມລົບກວນ", + "Away" : "ອອກໄປ", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "ແອັບ iOS", + "__language_name__" : "ຂີ້ຕົວະ", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Call summary (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "The call summary bot posts an overview message after the call listing all participants and outlining tasks", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Reports" : "Reports", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Call summary", + "Call summary - {title}" : "Call summary - {title}", + "Talk conversation for event" : "Talk conversation for event", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push is installed, this improves the performance of desktop clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} is not installed, this might lead to performance issues when using desktop clients.", + "Next meeting" : "Next meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here", + "Join conversations from remote Nextcloud servers" : "Join conversations from remote Nextcloud servers", + "Your default media state has been saved" : "Your default media state has been saved", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Generate summary" : "Generate summary", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Your personal setting has been saved" : "Your personal setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "Always shown if recording consent is required" : "Always shown if recording consent is required", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk was updated, you cannot start or join a call.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed.", + "Nextcloud Talk was updated." : "Nextcloud Talk was updated.", + "Nextcloud is in maintenance mode." : "Nextcloud is in maintenance mode.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation was updated." +}, +"nplurals=1; plural=0;"); diff --git a/l10n/lo.json b/l10n/lo.json new file mode 100644 index 0000000..f93b5a7 --- /dev/null +++ b/l10n/lo.json @@ -0,0 +1,2142 @@ +{ "translations": { + "a conversation" : "a conversation", + "(Duration %s)" : "(Duration %s)", + "You attended a call with {user1}" : "You attended a call with {user1}", + "_%n guest_::_%n guests_" : ["%n guests"], + "You attended a call with {user1} and {user2}" : "You attended a call with {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "You attended a call with {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "You attended a call with {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n others"], + "{actor} invited you to {call}" : "{actor} invited you to {call}", + "You were invited to a conversation or had a call" : "You were invited to a conversation or had a call", + "Other activities" : "Other activities", + "Talk" : "Talk", + "Guest" : "ແຂກ", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk.", + "## New in Talk %s" : "## New in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge and Safari can now be used to participate in audio and video calls", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- You can now notify all participants by posting \"@all\" into the chat", + "- With the \"arrow-up\" key you can repost your last message" : "- With the \"arrow-up\" key you can repost your last message", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some", + "- With projects you can create quick links between conversations, files and other items" : "- With projects you can create quick links between conversations, files and other items", + "- You can now mention guests in the chat" : "- You can now mention guests in the chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- You can now directly reply to messages giving the other users more context what your message is about", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations", + "- You can now add custom user groups to conversations when the circles app is installed" : "- You can now add custom user groups to conversations when the circles app is installed", + "- Check out the new grid and call view" : "- Check out the new grid and call view", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- You can now upload and drag'n'drop files directly from your device into the chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Shared files are now opened directly inside the chat view with the viewer apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- You can now search for chats and messages in the unified search in the top bar", + "- Spice up your messages with emojis from the emoji picker" : "- Spice up your messages with emojis from the emoji picker", + "- You can now change your camera and microphone while being in a call" : "- You can now change your camera and microphone while being in a call", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves", + "- See a read status and send failed messages again" : "- See a read status and send failed messages again", + "- Raise your hand in a call with the R key" : "- Raise your hand in a call with the R key", + "- Join the same conversation and call from multiple devices" : "- Join the same conversation and call from multiple devices", + "- Send voice messages, share your location or contact details" : "- Send voice messages, share your location or contact details", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Add groups to a conversation and new group members will automatically be added as participants", + "- A preview of your audio and video is shown before joining a call" : "- A preview of your audio and video is shown before joining a call", + "- You can now blur your background in the newly designed call view" : "- You can now blur your background in the newly designed call view", + "- Moderators can now assign general and individual permissions to participants" : "- Moderators can now assign general and individual permissions to participants", + "- You can now react to chat messages" : "- You can now react to chat messages", + "- In the sidebar you can now find an overview of the latest shared items" : "- In the sidebar you can now find an overview of the latest shared items", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use a poll to collect the opinions of others or settle on a date", + "- Configure an expiration time for chat messages" : "- Configure an expiration time for chat messages", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chat messages without notifying the recipients in case it is not urgent", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis can now be autocompleted by typing a \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Link various items using the new smart-picker by typing a \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators can now create breakout rooms (requires the High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Calls can now be recorded (requires the High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversations can now have an avatar or emoji as icon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtual backgrounds are now available in addition to the blurred background in video calls", + "- Reactions are now available during calls" : "- Reactions are now available during calls", + "- Typing indicators show which users are currently typing a message" : "- Typing indicators show which users are currently typing a message", + "- Groups can now be mentioned in chats" : "- Groups can now be mentioned in chats", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Call recordings are automatically transcribed if a transcription provider app is registered", + "- Chat messages can be translated if a translation provider app is registered" : "- Chat messages can be translated if a translation provider app is registered", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** can now be used in _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Set a reminder on a chat message to be notified later again", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use the **Note to self** conversation to take notes and share information between your devices", + "- Captions allow to send a message with a file at the same time" : "- Captions allow to send a message with a file at the same time", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video of the speaker is now visible while sharing the screen and call reactions are animated", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Messages can now be edited by logged-in authors and moderators for 6 hours", + "- Unsent message drafts are now saved in your browser" : "- Unsent message drafts are now saved in your browser", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Text chatting can now be done in a federated way with other Talk servers", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists", + "- Archive conversations to stay focused" : "- Archive conversations to stay focused", + "- Schedule a meeting into your calendar from within a conversation" : "- Schedule a meeting into your calendar from within a conversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Search for messages of the current conversation directly in the right sidebar", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- See more conversations on a first glance with the new compact list (enable in the Talk settings)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- To receive push notifications during \"Do not disturb\", mark conversations as important", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Add other participants to a one-to-one call to create a new group call on the fly", + "- Use threads to keep your chat and discussions organized" : "- Use threads to keep your chat and discussions organized", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)", + "_All %n participant_::_All %n participants_" : ["All %n participants"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reaction deleted by author", + "{actor} created the conversation" : "{actor} created the conversation", + "You created the conversation" : "You created the conversation", + "System created the conversation" : "System created the conversation", + "An administrator created the conversation" : "An administrator created the conversation", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "You renamed the conversation from \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} set the description", + "You set the description" : "You set the description", + "An administrator set the description" : "An administrator set the description", + "{actor} removed the description" : "{actor} removed the description", + "You removed the description" : "You removed the description", + "An administrator removed the description" : "An administrator removed the description", + "You started a silent call" : "You started a silent call", + "Outgoing silent call" : "Outgoing silent call", + "{actor} started a silent call" : "{actor} started a silent call", + "Incoming silent call" : "Incoming silent call", + "You started a call" : "You started a call", + "Outgoing call" : "Outgoing call", + "{actor} started a call" : "{actor} started a call", + "Incoming call" : "Incoming call", + "{actor} joined the call" : "{actor} joined the call", + "You joined the call" : "You joined the call", + "{actor} left the call" : "{actor} left the call", + "You left the call" : "You left the call", + "{actor} unlocked the conversation" : "{actor} unlocked the conversation", + "You unlocked the conversation" : "You unlocked the conversation", + "An administrator unlocked the conversation" : "An administrator unlocked the conversation", + "{actor} locked the conversation" : "{actor} locked the conversation", + "You locked the conversation" : "You locked the conversation", + "An administrator locked the conversation" : "An administrator locked the conversation", + "{actor} limited the conversation to the current participants" : "{actor} limited the conversation to the current participants", + "You limited the conversation to the current participants" : "You limited the conversation to the current participants", + "An administrator limited the conversation to the current participants" : "An administrator limited the conversation to the current participants", + "{actor} opened the conversation to registered users" : "{actor} opened the conversation to registered users", + "You opened the conversation to registered users" : "You opened the conversation to registered users", + "An administrator opened the conversation to registered users" : "An administrator opened the conversation to registered users", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} opened the conversation to registered users and users created with the Guests app", + "You opened the conversation to registered users and users created with the Guests app" : "You opened the conversation to registered users and users created with the Guests app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "An administrator opened the conversation to registered users and users created with the Guests app", + "The conversation is now open to everyone" : "The conversation is now open to everyone", + "{actor} opened the conversation to everyone" : "{actor} opened the conversation to everyone", + "You opened the conversation to everyone" : "You opened the conversation to everyone", + "{actor} restricted the conversation to moderators" : "{actor} restricted the conversation to moderators", + "You restricted the conversation to moderators" : "You restricted the conversation to moderators", + "{actor} started breakout rooms" : "{actor} started breakout rooms", + "You started breakout rooms" : "You started breakout rooms", + "{actor} stopped breakout rooms" : "{actor} stopped breakout rooms", + "You stopped breakout rooms" : "You stopped breakout rooms", + "{actor} allowed guests" : "{actor} allowed guests", + "You allowed guests" : "You allowed guests", + "An administrator allowed guests" : "An administrator allowed guests", + "{actor} disallowed guests" : "{actor} disallowed guests", + "You disallowed guests" : "You disallowed guests", + "An administrator disallowed guests" : "An administrator disallowed guests", + "{actor} set a password" : "{actor} set a password", + "You set a password" : "You set a password", + "An administrator set a password" : "An administrator set a password", + "{actor} removed the password" : "{actor} removed the password", + "You removed the password" : "You removed the password", + "An administrator removed the password" : "An administrator removed the password", + "{actor} added {user}" : "{actor} added {user}", + "You joined the conversation" : "You joined the conversation", + "{actor} joined the conversation" : "{actor} joined the conversation", + "You added {user}" : "You added {user}", + "{actor} added you" : "{actor} added you", + "An administrator added you" : "An administrator added you", + "An administrator added {user}" : "An administrator added {user}", + "You left the conversation" : "You left the conversation", + "{actor} left the conversation" : "{actor} left the conversation", + "{actor} removed {user}" : "{actor} removed {user}", + "You removed {user}" : "You removed {user}", + "{actor} removed you" : "{actor} removed you", + "An administrator removed you" : "An administrator removed you", + "An administrator removed {user}" : "An administrator removed {user}", + "{actor} invited {federated_user}" : "{actor} invited {federated_user}", + "You invited {federated_user}" : "You invited {federated_user}", + "You accepted the invitation" : "You accepted the invitation", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "An administrator invited {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} accepted the invitation", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "You removed {federated_user}", + "You declined the invitation" : "You declined the invitation", + "An administrator removed {federated_user}" : "An administrator removed {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} declined the invitation", + "{actor} added group {group}" : "{actor} added group {group}", + "You added group {group}" : "You added group {group}", + "An administrator added group {group}" : "An administrator added group {group}", + "{actor} removed group {group}" : "{actor} removed group {group}", + "You removed group {group}" : "You removed group {group}", + "An administrator removed group {group}" : "An administrator removed group {group}", + "{actor} added team {circle}" : "{actor} added team {circle}", + "You added team {circle}" : "You added team {circle}", + "An administrator added team {circle}" : "An administrator added team {circle}", + "{actor} removed team {circle}" : "{actor} removed team {circle}", + "You removed team {circle}" : "You removed team {circle}", + "An administrator removed team {circle}" : "An administrator removed team {circle}", + "{actor} added {phone}" : "{actor} added {phone}", + "You added {phone}" : "You added {phone}", + "An administrator added {phone}" : "An administrator added {phone}", + "{actor} removed {phone}" : "{actor} removed {phone}", + "You removed {phone}" : "You removed {phone}", + "An administrator removed {phone}" : "An administrator removed {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoted {user} to moderator", + "You promoted {user} to moderator" : "You promoted {user} to moderator", + "{actor} promoted you to moderator" : "{actor} promoted you to moderator", + "An administrator promoted you to moderator" : "An administrator promoted you to moderator", + "An administrator promoted {user} to moderator" : "An administrator promoted {user} to moderator", + "{actor} demoted {user} from moderator" : "{actor} demoted {user} from moderator", + "You demoted {user} from moderator" : "You demoted {user} from moderator", + "{actor} demoted you from moderator" : "{actor} demoted you from moderator", + "An administrator demoted you from moderator" : "An administrator demoted you from moderator", + "An administrator demoted {user} from moderator" : "An administrator demoted {user} from moderator", + "{actor} shared a file which is no longer available" : "{actor} shared a file which is no longer available", + "You shared a file which is no longer available" : "You shared a file which is no longer available", + "File shares are currently not supported in federated conversations" : "File shares are currently not supported in federated conversations", + "The shared location is malformed" : "The shared location is malformed", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} set up Matterbridge to synchronize this conversation with other chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "You set up Matterbridge to synchronize this conversation with other chats", + "{actor} created thread {title}" : "{actor} created thread {title}", + "You created thread {title}" : "You created thread {title}", + "{actor} renamed thread {title}" : "{actor} renamed thread {title}", + "You renamed thread {title}" : "You renamed thread {title}", + "{actor} updated the Matterbridge configuration" : "{actor} updated the Matterbridge configuration", + "You updated the Matterbridge configuration" : "You updated the Matterbridge configuration", + "{actor} removed the Matterbridge configuration" : "{actor} removed the Matterbridge configuration", + "You removed the Matterbridge configuration" : "You removed the Matterbridge configuration", + "{actor} started Matterbridge" : "{actor} started Matterbridge", + "You started Matterbridge" : "You started Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stopped Matterbridge", + "You stopped Matterbridge" : "You stopped Matterbridge", + "{actor} deleted a message" : "{actor} deleted a message", + "You deleted a message" : "You deleted a message", + "{actor} edited a message" : "{actor} edited a message", + "You edited a message" : "You edited a message", + "{actor} pinned a message" : "{actor} pinned a message", + "You pinned a message" : "You pinned a message", + "{actor} unpinned a message" : "{actor} unpinned a message", + "Message was automatically unpinned" : "Message was automatically unpinned", + "You unpinned a message" : "You unpinned a message", + "{actor} deleted a reaction" : "{actor} deleted a reaction", + "You deleted a reaction" : "You deleted a reaction", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n weeks"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n days"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minutes"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n weeks"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n days"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hours"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minutes"], + "{actor} disabled message expiration" : "{actor} disabled message expiration", + "You disabled message expiration" : "You disabled message expiration", + "{actor} cleared the history of the conversation" : "{actor} cleared the history of the conversation", + "You cleared the history of the conversation" : "You cleared the history of the conversation", + "{actor} set the conversation picture" : "{actor} set the conversation picture", + "You set the conversation picture" : "You set the conversation picture", + "{actor} removed the conversation picture" : "{actor} removed the conversation picture", + "You removed the conversation picture" : "You removed the conversation picture", + "{actor} ended the poll {poll}" : "{actor} ended the poll {poll}", + "You ended the poll {poll}" : "You ended the poll {poll}", + "{actor} started the video recording" : "{actor} started the video recording", + "You started the video recording" : "You started the video recording", + "{actor} stopped the video recording" : "{actor} stopped the video recording", + "You stopped the video recording" : "You stopped the video recording", + "{actor} started the audio recording" : "{actor} started the audio recording", + "You started the audio recording" : "You started the audio recording", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "You stopped the audio recording", + "The recording failed" : "The recording failed", + "Someone voted on the poll {poll}" : "Someone voted on the poll {poll}", + "Message deleted by author" : "ຂໍ້ຄວາມຖືກລຶບໂດຍຜູ້ຂຽນ", + "Message deleted by {actor}" : "Message deleted by {actor}", + "Message deleted by you" : "Message deleted by you", + "Deleted user" : "Deleted user", + "Unknown number" : "Unknown number", + "Administration" : "ການຈັດການ", + "System" : "System", + "%s (guest)" : "%s (guest)", + "Missed call" : "Missed call", + "Unanswered call" : "Unanswered call", + "Call ended (Duration {duration})" : "Call ended (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Call was ended, as it reached the maximum call duration (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ended the call (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guests ended (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guests (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Call with {user1} ended (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ended the call with {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Call with {user1} and {user2} ended (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ended the call with {user1} and {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Call with {user1}, {user2} and {user3} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})", + "Message of {user} in {conversation}" : "Message of {user} in {conversation}", + "Message of {user}" : "Message of {user}", + "Message of a deleted user in {conversation}" : "Message of a deleted user in {conversation}", + "Talk conversations" : "Talk conversations", + "Talk to %s" : "Talk to %s", + "An error occurred. Please contact your administrator." : "An error occurred. Please contact your administrator.", + "Storage quota exceeded" : "Storage quota exceeded", + "File not found" : "ບໍ່ພົບໄຟລ໌", + "File is not shared, or shared but not with the user" : "File is not shared, or shared but not with the user", + "No account available to delete." : "No account available to delete.", + "Poll" : "ໂພລ", + "Password needs to be set" : "Password needs to be set", + "Uploading the file failed" : "Uploading the file failed", + "No image file provided" : "No image file provided", + "File is too big" : "ຟາຍໃຫຍ່ໂພດ", + "Invalid file provided" : "ຟາຍບໍ່ຖືກຕ້ອງ", + "Invalid image" : "ບໍ່ມີຮູບພາບ", + "Unknown filetype" : "ບໍ່ຮູ້ປະເພດຂອງຟາຍ", + "Talk mentions" : "Talk mentions", + "More conversations" : "More conversations", + "Say hi to your friends and colleagues!" : "Say hi to your friends and colleagues!", + "No unread mentions" : "No unread mentions", + "Call in progress" : "Call in progress", + "You were mentioned" : "You were mentioned", + "Write to conversation" : "Write to conversation", + "Writes event information into a conversation of your choice" : "Writes event information into a conversation of your choice", + "Missing email field in header line" : "Missing email field in header line", + "Following lines are invalid: %s" : "Following lines are invalid: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s invited you to conversation \"%2$s\".", + "You were invited to conversation \"%s\"." : "You were invited to conversation \"%s\".", + "Conversation invitation" : "Conversation invitation", + "Scheduled time" : "Scheduled time", + "Description" : "ລາຍລະອຽດ", + "You can also dial-in via phone with the following details" : "You can also dial-in via phone with the following details", + "Dial-in information" : "Dial-in information", + "Meeting ID" : "Meeting ID", + "Your PIN" : "Your PIN", + "Click the button below to join the lobby now." : "Click the button below to join the lobby now.", + "Click the link below to join the lobby now." : "Click the link below to join the lobby now.", + "Join lobby for \"%s\"" : "Join lobby for \"%s\"", + "Click the button below to join the conversation now." : "Click the button below to join the conversation now.", + "Click the link below to join the conversation now." : "Click the link below to join the conversation now.", + "Join \"%s\"" : "Join \"%s\"", + "Meeting" : "Meeting", + "Password request: %s" : "Password request: %s", + "Private conversation" : "Private conversation", + "Deleted user (%s)" : "Deleted user (%s)", + "Failed to upload call recording" : "Failed to upload call recording", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "The recording server failed to upload recording of call {call}. Please reach out to the administration.", + "Share to chat" : "Share to chat", + "Dismiss notification" : "ຍົກເລີກການເເຈ້ງເຕືອນ", + "Call recording now available" : "Call recording now available", + "The recording for the call in {call} was uploaded to {file}." : "The recording for the call in {call} was uploaded to {file}.", + "Transcript now available" : "Transcript now available", + "The transcript for the call in {call} was uploaded to {file}." : "The transcript for the call in {call} was uploaded to {file}.", + "Failed to transcript call recording" : "Failed to transcript call recording", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.", + "Call summary now available" : "Call summary now available", + "The summary for the call in {call} was uploaded to {file}." : "The summary for the call in {call} was uploaded to {file}.", + "Failed to summarize call recording" : "Failed to summarize call recording", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} invited you to join {roomName} on {remoteServer}", + "Accept" : "ຍອມຮັບ", + "Decline" : "ປະຕິເສດ", + "{user1} invited you to a federated conversation" : "{user1} invited you to a federated conversation", + "Someone reacted" : "Someone reacted", + "New message" : "New message", + "Reminder" : "Reminder", + "Someone mentioned you" : "Someone mentioned you", + "Notification" : "ການແຈ້ງເຕືອນ", + "Someone reacted in a private conversation" : "Someone reacted in a private conversation", + "You received a message in a private conversation" : "You received a message in a private conversation", + "Reminder in a private conversation" : "Reminder in a private conversation", + "Someone mentioned you in a private conversation" : "Someone mentioned you in a private conversation", + "Notification in a private conversation" : "Notification in a private conversation", + "Reminder: You in {call}" : "Reminder: You in {call}", + "Reminder: {user} in {call}" : "Reminder: {user} in {call}", + "Reminder: Deleted user in {call}" : "Reminder: Deleted user in {call}", + "Reminder: {guest} (guest) in {call}" : "Reminder: {guest} (guest) in {call}", + "Reminder: Guest in {call}" : "Reminder: Guest in {call}", + "{user} reacted with {reaction}" : "{user} reacted with {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reacted with {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Deleted user reacted with {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reacted with {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Guest reacted with {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Deleted user in {call}", + "{guest} (guest) in {call}" : "{guest} (guest) in {call}", + "Guest in {call}" : "Guest in {call}", + "{user} sent you a private message" : "{user} sent you a private message", + "{user} sent a message in conversation {call}" : "{user} sent a message in conversation {call}", + "A deleted user sent a message in conversation {call}" : "A deleted user sent a message in conversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) sent a message in conversation {call}", + "A guest sent a message in conversation {call}" : "A guest sent a message in conversation {call}", + "{user} replied to your private message" : "{user} replied to your private message", + "{user} replied to your message in conversation {call}" : "{user} replied to your message in conversation {call}", + "A deleted user replied to your message in conversation {call}" : "A deleted user replied to your message in conversation {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) replied to your message in conversation {call}", + "A guest replied to your message in conversation {call}" : "A guest replied to your message in conversation {call}", + "Reminder: You in private conversation {call}" : "Reminder: You in private conversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Reminder: A deleted user in private conversation {call}", + "Reminder: {user} in private conversation" : "Reminder: {user} in private conversation", + "Reminder: You in conversation {call}" : "Reminder: You in conversation {call}", + "Reminder: {user} in conversation {call}" : "Reminder: {user} in conversation {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: A deleted user in conversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Reminder: {guest} (guest) in conversation {call}", + "Reminder: A guest in conversation {call}" : "Reminder: A guest in conversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reacted with {reaction} to your private message", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reacted with {reaction} to your message in conversation {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "A deleted user reacted with {reaction} to your message in conversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reacted with {reaction} to your message in conversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "A guest reacted with {reaction} to your message in conversation {call}", + "{user} mentioned you in a private conversation" : "{user} mentioned you in a private conversation", + "{user} mentioned group {group} in conversation {call}" : "{user} mentioned group {group} in conversation {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mentioned team {team} in conversation {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mentioned everyone in conversation {call}", + "{user} mentioned you in conversation {call}" : "{user} mentioned you in conversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "A deleted user mentioned group {group} in conversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "A deleted user mentioned team {team} in conversation {call}", + "A deleted user mentioned everyone in conversation {call}" : "A deleted user mentioned everyone in conversation {call}", + "A deleted user mentioned you in conversation {call}" : "A deleted user mentioned you in conversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) mentioned group {group} in conversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (guest) mentioned team {team} in conversation {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (guest) mentioned everyone in conversation {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) mentioned you in conversation {call}", + "A guest mentioned group {group} in conversation {call}" : "A guest mentioned group {group} in conversation {call}", + "A guest mentioned team {team} in conversation {call}" : "A guest mentioned team {team} in conversation {call}", + "A guest mentioned everyone in conversation {call}" : "A guest mentioned everyone in conversation {call}", + "A guest mentioned you in conversation {call}" : "A guest mentioned you in conversation {call}", + "View message" : "View message", + "Dismiss reminder" : "Dismiss reminder", + "View chat" : "View chat", + "{user} invited you to a group conversation: {call}" : "{user} invited you to a group conversation: {call}", + "Join call" : "Join call", + "Answer call" : "Answer call", + "{user} would like to talk with you" : "{user} would like to talk with you", + "Call back" : "Call back", + "You missed a call from {user}" : "You missed a call from {user}", + "Accept call" : "Accept call", + "Incoming phone call from {call}" : "Incoming phone call from {call}", + "You missed a phone call from {call}" : "You missed a phone call from {call}", + "A group call has started in {call}" : "A group call has started in {call}", + "You missed a group call in {call}" : "You missed a group call in {call}", + "{email} is requesting the password to access {file}" : "{email} is requesting the password to access {file}", + "{email} tried to request the password to access {file}" : "{email} tried to request the password to access {file}", + "Someone is requesting the password to access {file}" : "Someone is requesting the password to access {file}", + "Someone tried to request the password to access {file}" : "Someone tried to request the password to access {file}", + "Open settings" : "ເປີດການຕັ້ງຄ່າ", + "Hosted signaling server added" : "Hosted signaling server added", + "The hosted signaling server is now configured and will be used." : "The hosted signaling server is now configured and will be used.", + "Hosted signaling server removed" : "Hosted signaling server removed", + "The hosted signaling server was removed and will not be used anymore." : "The hosted signaling server was removed and will not be used anymore.", + "Hosted signaling server changed" : "Hosted signaling server changed", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\".", + "pending" : "pending", + "active" : "active", + "expired" : "expired", + "blocked" : "blocked", + "error" : "error", + "The certificate of {host} expires in {days} days" : "The certificate of {host} expires in {days} days", + "The certificate of {host} expired" : "The certificate of {host} expired", + "Contact via Talk" : "Contact via Talk", + "Open Talk" : "Open Talk", + "Default" : "ເລີ່ມຕົ້ນ", + "Presentation" : "ງານນຳສະເໜີ", + "Webinar" : "Webinar", + "Conversations" : "Conversations", + "Messages in current conversation" : "Messages in current conversation", + "{user}" : "{user}", + "Messages" : "Messages", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messages in other conversations", + "One-to-one rooms always need to show the other users avatar" : "One-to-one rooms always need to show the other users avatar", + "Invalid emoji character" : "Invalid emoji character", + "Invalid background color" : "Invalid background color", + "Avatar image is not square" : "Avatar image is not square", + "Room {number}" : "Room {number}", + "Other" : "ອື່ນໆ", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Failed to request trial because the trial server is unreachable. Please try again later.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL.", + "Something unexpected happened." : "Something unexpected happened.", + "The URL is invalid." : "The URL is invalid.", + "An HTTPS URL is required." : "An HTTPS URL is required.", + "The email address is invalid." : "The email address is invalid.", + "The language is invalid." : "The language is invalid.", + "The country is invalid." : "The country is invalid.", + "There is a problem with the request of the trial. Please check your logs for further information." : "There is a problem with the request of the trial. Please check your logs for further information.", + "Too many requests are send from your servers address. Please try again later." : "Too many requests are send from your servers address. Please try again later.", + "There is already a trial registered for this Nextcloud instance." : "There is already a trial registered for this Nextcloud instance.", + "Something unexpected happened. Please try again later." : "Something unexpected happened. Please try again later.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Failed to request trial because the trial server behaved wrongly. Please try again later.", + "Trial requested but failed to get account information. Please check back later." : "Trial requested but failed to get account information. Please check back later.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Failed to fetch account information because the trial server behaved wrongly. Please check back later.", + "There is a problem with fetching the account information. Please check your logs for further information." : "There is a problem with fetching the account information. Please check your logs for further information.", + "There is no such account registered." : "There is no such account registered.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Failed to fetch account information because the trial server is unreachable. Please check back later.", + "Deleting the hosted signaling server account failed. Please check back later." : "Deleting the hosted signaling server account failed. Please check back later.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Failed to delete the account because the trial server behaved wrongly. Please check back later.", + "There is a problem with deleting the account. Please check your logs for further information." : "There is a problem with deleting the account. Please check your logs for further information.", + "Too many requests are sent from your servers address. Please try again later." : "Too many requests are sent from your servers address. Please try again later.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Failed to delete the account because the trial server is unreachable. Please check back later.", + "Note to self" : "Note to self", + "A place for your private notes, thoughts and ideas" : "A place for your private notes, thoughts and ideas", + "Transcript is AI generated and may contain mistakes" : "Transcript is AI generated and may contain mistakes", + "Summary is AI generated and may contain mistakes" : "Summary is AI generated and may contain mistakes", + "Let's get started!" : "Let's get started!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "You can reply to messages, forward them to other chats and people, or copy message content.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!", + "Andorra" : "ອັນດໍຣາ", + "United Arab Emirates" : "ສະຫະລັດອາຣັບເອມິເຣດ", + "Afghanistan" : "ອັຟການິສຖານ", + "Antigua and Barbuda" : "ອັງຕີກາ ແລະ ບາກບູດາ", + "Anguilla" : "ອັງກິລາ", + "Albania" : "ອານບານີ", + "Armenia" : "ອາກເມນີ", + "Angola" : "ອັງໂກລາ", + "Antarctica" : "ແອນຕາກຕິກາ", + "Argentina" : "ອາເຈນຕິນາ", + "American Samoa" : "ອາເມຣິກັນຊາມົວ", + "Austria" : "ອອສເຕຣຍ", + "Australia" : "ອອສເຕຣເລຍ", + "Aruba" : "ອາຣູບາ", + "Åland Islands" : "ໝູ່ເກາະໂອລັນ", + "Azerbaijan" : "ອາແຊກໄບຊານ", + "Bosnia and Herzegovina" : "ບອສເນຍ ແລະ ເຮີເຊໂກວີນາ", + "Barbados" : "ບາກບາດອສ", + "Bangladesh" : "ບັງກະລາເທດ", + "Belgium" : "ແບນຊິກ", + "Burkina Faso" : "ບວກກິນາຟາໂຊ", + "Bulgaria" : "ບູນກາຣີ", + "Bahrain" : "ບາເຣນ", + "Burundi" : "ບຸຣຸນດີ", + "Benin" : "ເບນິນ", + "Saint Barthélemy" : "ແຊັງບາກເທເລມີ", + "Bermuda" : "ເບີມິວດາ", + "Brunei Darussalam" : "ບຣູໄນ ດາຣູຊາລາມ", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "ໂບແມ, ຊິນເອິສຕາຊິອຶສ ແລະ ຊາບາ", + "Brazil" : "ບຣາຊິນ", + "Bahamas" : "ບາຮາມາດ", + "Bhutan" : "ພູຖານ", + "Bouvet Island" : "ເກາະບູເວ", + "Botswana" : "ບົດສະວານາ", + "Belarus" : "ເບລາຣຸສ", + "Belize" : "ເບລີຊ", + "Canada" : "ການາດາ", + "Cocos (Keeling) Islands" : "ໝູ່ເກາະໂກໂກສ (ຄີລິງ)", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "ສາທາລະນະລັດອາຟຣິກາກາງ", + "Congo" : "ຄອງໂກ", + "Switzerland" : "ສະວິດເຊີແລນ", + "Côte d'Ivoire" : "ໂກດດີວົວ", + "Cook Islands" : "ໝູ່ເກາະຄຸກ", + "Chile" : "ຊິລີ", + "Cameroon" : "ກາເມີຣູນ", + "China" : "ຈີນ", + "Colombia" : "ໂກລົມບີ", + "Costa Rica" : "ກົດສະຕາຣິກາ", + "Cuba" : "ກູບາ", + "Cabo Verde" : "ກາໂບແວກ", + "Curaçao" : "ກືລາເຊົາ", + "Christmas Island" : "ເກາະຄຣິສມາດ", + "Cyprus" : "ໄຊປຣັສ", + "Czechia" : "ເຊັກເກຍ", + "Germany" : "ເຢຍລະມັນ", + "Djibouti" : "ຈິບູຕີ", + "Denmark" : "ເດນມາກ", + "Dominica" : "ໂດມິນິກາ", + "Dominican Republic" : "ສາທາລະນະລັດໂດມິນິແກນ", + "Algeria" : "ແອລຈີເຣຍ", + "Ecuador" : "ເອກວາດໍ", + "Estonia" : "ເອສໂຕເນຍ", + "Egypt" : "ອີຢິບ", + "Western Sahara" : "ຊາຮາຣາຕາເວັນຕົກ", + "Eritrea" : "ເອຣິເທຣຍ", + "Spain" : "ແອັດສະປາຍ", + "Ethiopia" : "ເອທິໂອເປຍ", + "Finland" : "ແຟງລັງ", + "Fiji" : "ຟິຈິ", + "Falkland Islands (Malvinas)" : "ໝູ່ເກາະຟອກແລນ (ມາວີນັສ)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "ໝູ່ເກາະເຟີໂຣ", + "France" : "ຝຣັ່ງ", + "Gabon" : "ກາບົງ", + "United Kingdom of Great Britain and Northern Ireland" : "ສະຫະລາຊະອານາຈັກ", + "Grenada" : "ເກຣເນດາ", + "Georgia" : "ຈໍເຈຍ", + "French Guiana" : "ກຸຍຢານຝຣັ່ງ", + "Guernsey" : "ເກີນຊີ", + "Ghana" : "ການາ", + "Gibraltar" : "ຢິບຣາຕາ", + "Greenland" : "ກຣີນແລນ", + "Gambia" : "ແກມເບຍ", + "Guinea" : "ກິເນ", + "Guadeloupe" : "ກວາດາລູບ", + "Equatorial Guinea" : "ກິເນອີຄວາທໍຣຽວ", + "Greece" : "ກະເຣັກ", + "South Georgia and the South Sandwich Islands" : "ເກາະຈໍເຈຍໃຕ້ ແລະ ໝູ່ເກາະແຊນວິດໃຕ້", + "Guatemala" : "ກົວເຕມາລາ", + "Guam" : "ກວມ", + "Guinea-Bissau" : "ກິເນ-ບິສເຊົາ", + "Guyana" : "ກຸຍອານາ", + "Hong Kong" : "ຮົງກົງ", + "Heard Island and McDonald Islands" : "ເກາະເຮີດ ແລະ ໝູ່ເກາະແມັກໂດນໍ", + "Honduras" : "ຮອນດູຣັດ", + "Croatia" : "ໂຄຣເອເຊຍ", + "Haiti" : "ໄຮຕິ", + "Hungary" : "ຮົງກາຣີ", + "Indonesia" : "ອິນໂດເນເຊຍ", + "Ireland" : "ອຽກລັງ", + "Israel" : "ອິດສະຣາແອນ", + "Isle of Man" : "ເກາະແມນ", + "India" : "ອິນເດຍ", + "British Indian Ocean Territory" : "ດິນແດນມະຫາສະໝຸດອິນເດຍຂອງອັງກິດ", + "Iraq" : "ອີຣັກ", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "ໄອສແລນ", + "Italy" : "ອິຕາລີ", + "Jersey" : "ເຈີຊີ", + "Jamaica" : "ຈາໄມກາ", + "Jordan" : "ຈໍແດນ", + "Japan" : "ຍີ່ປຸ່ນ", + "Kenya" : "ເຄນຢາ", + "Kyrgyzstan" : "ຄີກີຊສະຖານ", + "Cambodia" : "ກຳປູເຈຍ", + "Kiribati" : "ຄິຣິບາຕິ", + "Comoros" : "ໂກໂມໂຣສ", + "Saint Kitts and Nevis" : "ເຊັນຄິດ ແລະ ເນວິສ", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "ເກົາຫຼີ, ສາທາລະນະລັດ", + "Kuwait" : "ກູເວດ", + "Cayman Islands" : "ໝູ່ເກາະເຄແມນ", + "Kazakhstan" : "ຄາຊັກສະຖານ", + "Lao People's Democratic Republic" : "ສາທາລະນະລັດ ປະຊາທິປະໄຕ ປະຊາຊົນລາວ", + "Lebanon" : "ເລບານອນ", + "Saint Lucia" : "ເຊັນລູເຊຍ", + "Liechtenstein" : "ລິດເທນສະໄຕ", + "Sri Lanka" : "ສີລັງກາ", + "Liberia" : "ໄລບີເຣຍ", + "Lesotho" : "ເລໂຊໂທ", + "Lithuania" : "ລິທົວເນຍ", + "Luxembourg" : "ລຸກຊຳບວກ", + "Latvia" : "ລັດເວຍ", + "Libya" : "ລິເບຍ", + "Morocco" : "ໂມຣັອກໂຄ", + "Monaco" : "ໂມນາໂກ", + "Moldova, Republic of" : "ມອລໂດວາ, ສາທາລະນະລັດ", + "Montenegro" : "ມອນເຕເນໂກຣ", + "Saint Martin (French part)" : "ເຊັນມາຕິນ (ສ່ວນຂອງຝຣັ່ງ)", + "Madagascar" : "ມາດາກາສະກາ", + "Marshall Islands" : "ໝູ່ເກາະມາແຊວ", + "North Macedonia" : "ມາເຊໂດເນຍເໜືອ", + "Mali" : "ມາລີ", + "Myanmar" : "ມຽນມາ", + "Mongolia" : "ມົງໂກລີ", + "Macao" : "ມາເກົ້າ", + "Northern Mariana Islands" : "ໝູ່ເກາະມາເຣຍນາເໜືອ", + "Martinique" : "ມາຕິນິກ", + "Mauritania" : "ມໍຣິເຕເນຍ", + "Montserrat" : "ມອນເຊີຣາດ", + "Malta" : "ມັນຕາ", + "Mauritius" : "ມໍຣິຊຽສ", + "Maldives" : "ມັນດິບ", + "Malawi" : "ມາລາວີ", + "Mexico" : "ເມັກຊິໂກ", + "Malaysia" : "ມາເລເຊຍ", + "Mozambique" : "ໂມຊຳບິກ", + "Namibia" : "ນາມິເບຍ", + "New Caledonia" : "ນິວແຄລິໂດເນຍ", + "Niger" : "ໄນເຈີ", + "Norfolk Island" : "ເກາະນໍຟອກ", + "Nigeria" : "ໄນຈີເຣຍ", + "Nicaragua" : "ນິກາຣາກົວ", + "Netherlands" : "ໂຮນລັງ", + "Norway" : "ນໍເວ", + "Nepal" : "ເນປານ", + "Nauru" : "ນາອູຣູ", + "Niue" : "ນີອູເອ", + "New Zealand" : "ນິວຊີແລນ", + "Oman" : "ໂອມານ", + "Panama" : "ປານາມາ", + "Peru" : "ເປຣູ", + "French Polynesia" : "ໂປລິນີເຊຍຂອງຝຣັ່ງ", + "Papua New Guinea" : "ປາປົວນິວກິເນ", + "Philippines" : "ຟິລິບປິນ", + "Pakistan" : "ປາກິດສະຖານ", + "Poland" : "ໂປແລນ", + "Saint Pierre and Miquelon" : "ແຊັງປີແຍ ແລະ ມິເກີລົງ", + "Pitcairn" : "ພິດແຄນ", + "Puerto Rico" : "ເປີໂຕຣິໂກ", + "Palestine, State of" : "ປາແລັດສະໄຕ, ລັດ", + "Portugal" : "ປອກຕຸຍການ", + "Palau" : "ປາເລົາ", + "Paraguay" : "ປາຣາກວາຍ", + "Qatar" : "ກາຕາ", + "Réunion" : "ເຣອູນີຢົງ", + "Romania" : "ໂຣມາເນຍ", + "Serbia" : "ແຊກບີ", + "Russian Federation" : "ສະຫະພັນລັດເຊຍ", + "Rwanda" : "ຣະວັນດາ", + "Saudi Arabia" : "ຊາອຸດິອາຣະເບຍ", + "Solomon Islands" : "ໝູ່ເກາະໂຊໂລມອນ", + "Seychelles" : "ເຊແຊລ", + "Sudan" : "ຊູດານ", + "Sweden" : "ຊູແອັດ", + "Singapore" : "ສິງກະໂປ", + "Saint Helena, Ascension and Tristan da Cunha" : "ເຊັນເຮເລນາ, ອັສເຊັນຊັນ ແລະ ທຣິສຕັນດາຄູນຢາ", + "Slovenia" : "ສະໂລເວເນຍ", + "Svalbard and Jan Mayen" : "ສະວາບາດ ແລະ ແຢນມາເຢນ", + "Slovakia" : "ສະໂລວາເກຍ", + "Sierra Leone" : "ເຊຍຣາລີໂອນ", + "San Marino" : "ຊານມາຣິໂນ", + "Senegal" : "ເຊເນການ", + "Somalia" : "ໂຊມາເລຍ", + "Suriname" : "ຊູຣິນາມ", + "South Sudan" : "ຊູດານໃຕ້", + "Sao Tome and Principe" : "ເຊົາຕູເມ ແລະ ປຣິນຊິປີ", + "El Salvador" : "ເອລຊາວາດໍ", + "Sint Maarten (Dutch part)" : "ຊິນມາເຕັນ (ສ່ວນຂອງໂຮນລັງ)", + "Syrian Arab Republic" : "ສາທາລະນະລັດອາຣັບຊີເຣຍ", + "Eswatini" : "ເອສະວາຕິນີ", + "Turks and Caicos Islands" : "ໝູ່ເກາະເທີກ ແລະ ໄກໂກສ", + "Chad" : "ຊາດ", + "French Southern Territories" : "ດິນແດນຕອນໃຕ້ຂອງຝຣັ່ງ", + "Togo" : "ໂຕໂກ", + "Thailand" : "ໄທ", + "Tajikistan" : "ທາຈິກິດສະຖານ", + "Tokelau" : "ໂຕເກເລົາ", + "Timor-Leste" : "ຕີມໍ-ເລສເຕ", + "Turkmenistan" : "ເທີກເມນິດສະຖານ", + "Tunisia" : "ຕູນິເຊຍ", + "Tonga" : "ຕອງກາ", + "Turkey" : "ຕວກກີ", + "Trinidad and Tobago" : "ທຣິນິແດດ ແລະ ໂທເບໂກ", + "Tuvalu" : "ຕູວາລູ", + "Taiwan, Province of China" : "ໄຕ້ຫວັນ, ແຂວງຂອງຈີນ", + "Tanzania, United Republic of" : "ແທນຊາເນຍ, ສະຫະສາທາລະນະລັດ", + "Ukraine" : "ອູແກຣນ", + "Uganda" : "ອູການດາ", + "United States Minor Outlying Islands" : "ໝູ່ເກາະນ້ອຍຂອງສະຫະລັດ", + "United States of America" : "ສະຫະລັດອາເມຣິກາ", + "Uruguay" : "ອູຣູກວາຍ", + "Uzbekistan" : "ອຸຊເບກິດສະຖານ", + "Holy See" : "ນະຄອນວາຕິກັນ", + "Saint Vincent and the Grenadines" : "ເຊັນວິນເຊັນ ແລະ ເກຣເນດິນ", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "ຫວຽດນາມ", + "Vanuatu" : "ວານູອາຕູ", + "Wallis and Futuna" : "ວາລິສ ແລະ ຟູຕູນາ", + "Samoa" : "ຊາມົວ", + "Yemen" : "ເຢເມນ", + "Mayotte" : "ມາຢັອດ", + "South Africa" : "ອາຟຣິກາໃຕ້", + "Zambia" : "ແຊມເບຍ", + "Zimbabwe" : "ຊິມບັບເວ", + "Background blur" : "Background blur", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.", + "Talk configuration values" : "Talk configuration values", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend not configured correctly. Run %s for details.", + "High-performance backend not configured correctly" : "High-performance backend not configured correctly", + "Error: Cannot connect to server" : "Error: Cannot connect to server", + "Error: Server did not respond with proper JSON" : "Error: Server did not respond with proper JSON", + "Error: Certificate expired" : "Error: Certificate expired", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Could not get version" : "Could not get version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk", + "Error: Server responded with: {error}" : "Error: Server responded with: {error}", + "Error: Unknown error occurred" : "Error: Unknown error occurred", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.", + "Client Push" : "Client Push", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "Using the recording backend requires a High-performance backend.", + "No recording backend configured" : "No recording backend configured", + "SIP configuration" : "SIP configuration", + "Using the SIP functionality requires a High-performance backend." : "Using the SIP functionality requires a High-performance backend.", + "No SIP backend configured" : "No SIP backend configured", + "Invalid date, date format must be YYYY-MM-DD" : "Invalid date, date format must be YYYY-MM-DD", + "Conversation not found" : "Conversation not found", + "Path is already shared with this conversation" : "Path is already shared with this conversation", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing using WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa.", + "Leave call" : "Leave call", + "Navigating away from the page will leave the call in {conversation}" : "Navigating away from the page will leave the call in {conversation}", + "Stay in call" : "Stay in call", + "Error occurred when getting the conversation information" : "Error occurred when getting the conversation information", + "Discuss this file" : "Discuss this file", + "Share this file with others to discuss it" : "Share this file with others to discuss it", + "Share this file" : "Share this file", + "Join conversation" : "Join conversation", + "This conversation is password-protected." : "This conversation is password-protected.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds.", + "The password is wrong. Try again." : "ລະຫັດບໍ່ຖືກຕ້ອງ. ລອງໃໝ່ອີກຄັ້ງ.", + "Password" : "ລະຫັດຜ່ານ", + "Submit" : "ສົ່ງ", + "Error requesting the password." : "Error requesting the password.", + "Request password" : "Request password", + "This conversation has ended" : "This conversation has ended", + "Error occurred when joining the conversation" : "Error occurred when joining the conversation", + "Close Talk sidebar" : "Close Talk sidebar", + "Open Talk sidebar" : "Open Talk sidebar", + "Everyone" : "Everyone", + "Users and moderators" : "Users and moderators", + "Moderators only" : "Moderators only", + "Disable calls" : "Disable calls", + "Save changes" : "Save changes", + "Saving …" : "ກຳລັງບັນທຶກ", + "Saved!" : "Saved!", + "Limit to groups" : "Limit to groups", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "When at least one group is selected, only people of the listed groups can be part of conversations.", + "Guests can still join public conversations." : "Guests can still join public conversations.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept.", + "Limit using Talk" : "Limit using Talk", + "Limit creating a public and group conversation" : "Limit creating a public and group conversation", + "Limit creating conversations" : "Limit creating conversations", + "Limit starting a call" : "Limit starting a call", + "Limit starting calls" : "Limit starting calls", + "When a call has started, everyone with access to the conversation can join the call." : "When a call has started, everyone with access to the conversation can join the call.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server.", + "Description is not provided" : "Description is not provided", + "Locked for moderators" : "Locked for moderators", + "Enabled" : "Enabled", + "Disabled" : "Disabled", + "Bots settings" : "Bots settings", + "State" : "ກ່າວ", + "Name" : "ຊື່", + "Last error" : "Last error", + "Total errors count" : "Total errors count", + "Find more bots" : "Find more bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federated chats and calls work already. Attachment handling is coming in a future version.", + "Enable Federation in Talk app" : "Enable Federation in Talk app", + "Permissions" : "ການອະນຸຍາດ", + "Allow users to be invited to federated conversations" : "Allow users to be invited to federated conversations", + "Allow users to invite federated users into conversation" : "Allow users to invite federated users into conversation", + "Only allow to federate with trusted servers" : "Only allow to federate with trusted servers", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "When at least one group is selected, only people of the listed groups can invite federated users to conversations.", + "Groups allowed to invite federated users" : "Groups allowed to invite federated users", + "Select groups …" : "Select groups …", + "All messages" : "All messages", + "@-mentions only" : "@-mentions only", + "Off" : "Off", + "General settings" : "General settings", + "Default notification settings" : "Default notification settings", + "Default group notification" : "Default group notification", + "Default group notification for new groups" : "Default group notification for new groups", + "Integration into other apps" : "Integration into other apps", + "Allow conversations on files" : "Allow conversations on files", + "Allow conversations on public shares for files" : "Allow conversations on public shares for files", + "End-to-end encrypted calls" : "End-to-end encrypted calls", + "Enable encryption" : "Enable encryption", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobile clients do not support end-to-end encrypted calls at the moment.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}.", + "Pending" : "ທີ່ກໍາລັງລໍຖ້າ", + "Error" : "ຜິດພາດ", + "Blocked" : "Blocked", + "Active" : "ກຳລັງໃຊ້ງານ", + "Expired" : "Expired", + "Never" : "Never", + "The trial could not be requested. Please try again later." : "The trial could not be requested. Please try again later.", + "The account could not be deleted. Please try again later." : "The account could not be deleted. Please try again later.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly.", + "URL of this Nextcloud instance" : "URL of this Nextcloud instance", + "Full name of the user requesting the trial" : "Full name of the user requesting the trial", + "Email of the user" : "Email of the user", + "Language" : "Language", + "Country" : "ປະເທດ", + "Request signaling server trial" : "Request signaling server trial", + "You can see the current status of your hosted signaling server in the following table." : "You can see the current status of your hosted signaling server in the following table.", + "Status" : "Status", + "Created at" : "Created at", + "Expires at" : "Expires at", + "Limits" : "Limits", + "STUN included" : "STUN included", + "Yes" : "ແມ່ນ", + "No" : "ບໍ່", + "TURN included" : "TURN included", + "Delete the signaling server account" : "Delete the signaling server account", + "_%n user_::_%n users_" : ["%n user"], + "Installed version: {version}" : "Installed version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary was not found or couldn't be executed.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information.", + "Downloading …" : "Downloading …", + "Install Talk Matterbridge" : "Install Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "An error occurred while installing the Matterbridge app", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "An error occurred while installing the Talk Matterbridge. Please install it manually", + "Failed to execute Matterbridge binary." : "Failed to execute Matterbridge binary.", + "Matterbridge integration" : "Matterbridge integration", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Status: Checking connection", + "OK: Running version: {version}" : "OK: Running version: {version}", + "Error: Server seems to be a Signaling server" : "Error: Server seems to be a Signaling server", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.", + "Recording backend URL" : "Recording backend URL", + "Validate SSL certificate" : "Validate SSL certificate", + "Delete this server" : "Delete this server", + "Test this server" : "Test this server", + "Disabled for all calls" : "Disabled for all calls", + "Enabled for all calls" : "Enabled for all calls", + "Configurable on conversation level by moderators" : "Configurable on conversation level by moderators", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}.", + "Recording backend settings saved" : "Recording backend settings saved", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation.", + "The consent to be recorded will be required for each participant before joining every call." : "The consent to be recorded will be required for each participant before joining every call.", + "The consent to be recorded is not required." : "The consent to be recorded is not required.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend configuration is only possible with a High-performance backend.", + "Add a new recording backend server" : "Add a new recording backend server", + "Shared secret" : "Shared secret", + "Recording consent" : "Recording consent", + "Recording transcription" : "Recording transcription", + "Automatically transcribe call recordings with a transcription provider" : "Automatically transcribe call recordings with a transcription provider", + "Automatically summarize call recordings with transcription and summary providers" : "Automatically summarize call recordings with transcription and summary providers", + "SIP configuration saved!" : "SIP configuration saved!", + "SIP configuration is only possible with a High-performance backend." : "SIP configuration is only possible with a High-performance backend.", + "Enable SIP Dial-out option" : "Enable SIP Dial-out option", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling server needs to be updated to supported SIP Dial-out feature.", + "Do not show SIP Dial-out caller number" : "Do not show SIP Dial-out caller number", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient", + "Dial-out number" : "Dial-out number", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatted number used as a fallback caller number for outgoing calls", + "Dial-out prefix" : "Dial-out prefix", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix to configured user number for outgoing calls (default is `+`)", + "Restrict SIP configuration" : "Restrict SIP configuration", + "Enable SIP configuration" : "Enable SIP configuration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Only users of the following groups can enable SIP in conversations they moderate", + "Phone number (Country)" : "Phone number (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "This information is sent in invitation emails as well as displayed in the sidebar to all participants.", + "Nextcloud base URL" : "Nextcloud base URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Available features", + "Error: Websocket connection failed" : "Error: Websocket connection failed", + "Error code" : "Error code", + "Error message" : "Error message", + "Error: Websocket connection failed. Check browser console" : "Error: Websocket connection failed. Check browser console", + "High-performance backend URL" : "High-performance backend URL", + "Missing High-performance backend warning hidden" : "Missing High-performance backend warning hidden", + "High-performance backend settings saved" : "High-performance backend settings saved", + "Nextcloud Talk setup not complete" : "Nextcloud Talk setup not complete", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Install the High-performance backend to ensure calls with multiple participants work seamlessly.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Quick installation guide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend.", + "Add High-performance backend server" : "Add High-performance backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Warn about connectivity issues in calls with more than 2 participants", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "The server address is invalid", + "STUN settings saved" : "STUN settings saved", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "A STUN server is used to determine the public IP address of participants behind a router.", + "Add a new STUN server" : "Add a new STUN server", + "{schema} scheme must be used with a domain" : "{schema} scheme must be used with a domain", + "{option1} and {option2}" : "{option1} and {option2}", + "{option} only" : "{option} only", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Successful ICE candidates returned by the TURN server", + "Error: No working ICE candidates returned by the TURN server" : "Error: No working ICE candidates returned by the TURN server", + "Testing whether the TURN server returns ICE candidates" : "Testing whether the TURN server returns ICE candidates", + "TURN server schemes" : "TURN server schemes", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocols", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions.", + "TURN settings saved" : "TURN settings saved", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Add a new TURN server", + "Failed" : "Failed", + "OK" : "ຕົກລົງ", + "Checking …" : "Checking …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\" and \".tflite\" files were properly returned by the web server.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module.", + "Web server setup checks" : "Web server setup checks", + "Files required for virtual background can be loaded" : "Files required for virtual background can be loaded", + "Federated user" : "Federated user", + "Assign participants to rooms" : "Assign participants to rooms", + "Configure breakout rooms" : "Configure breakout rooms", + "Number of breakout rooms" : "Number of breakout rooms", + "You can create from 1 to 20 breakout rooms." : "You can create from 1 to 20 breakout rooms.", + "Assignment method" : "Assignment method", + "Automatically assign participants" : "Automatically assign participants", + "Manually assign participants" : "Manually assign participants", + "Allow participants to choose" : "Allow participants to choose", + "Create rooms" : "Create rooms", + "Confirm" : "ຢືນຢັນ", + "Create breakout rooms" : "Create breakout rooms", + "Reset" : "ຕັ້ງຄ່າໃໝ່", + "Delete breakout rooms" : "Delete breakout rooms", + "Room {roomNumber}" : "Room {roomNumber}", + "Current breakout rooms and settings will be lost" : "Current breakout rooms and settings will be lost", + "Cancel" : "ຍົກເລີກ", + "Unassigned participants" : "Unassigned participants", + "Back" : "ຫຼັງ", + "Assign" : "Assign", + "Add participant \"{user}\"" : "Add participant \"{user}\"", + "Now" : "Now", + "Invalid calendar selected" : "Invalid calendar selected", + "Invalid start time selected" : "Invalid start time selected", + "Invalid end time selected" : "Invalid end time selected", + "Unknown error occurred" : "Unknown error occurred", + "Sending no invitations" : "Sending no invitations", + "{participant0} will receive an invitation" : "{participant0} will receive an invitation", + "{participant0} and {participant1} will receive invitations" : "{participant0} and {participant1} will receive invitations", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n others will receive invitations"], + "Invite {user}" : "Invite {user}", + "Invite all users and emails in this conversation" : "Invite all users and emails in this conversation", + "Meeting created" : "Meeting created", + "Upcoming meetings" : "Upcoming meetings", + "Loading …" : "ກຳລັງໂຫຼດ…", + "No upcoming meetings" : "No upcoming meetings", + "Schedule a meeting" : "Schedule a meeting", + "Meeting title" : "Meeting title", + "From" : "ຈາກ", + "To" : "ເຖິງ", + "Calendar" : "ປະຕິທິນ", + "Attendees" : "Attendees", + "No other participants to send invitations to." : "No other participants to send invitations to.", + "Add attendees" : "Add attendees", + "Save" : "ບັນທຶກ", + "Search participants" : "Search participants", + "No results" : "ບໍ່ມີຜົນ", + "Done" : "Done", + "Disable live transcription" : "Disable live transcription", + "Raise hand" : "Raise hand", + "Raise hand (R)" : "Raise hand (R)", + "Lower hand" : "Lower hand", + "Lower hand (R)" : "Lower hand (R)", + "Exit full screen (F)" : "Exit full screen (F)", + "Full screen (F)" : "Full screen (F)", + "Speaker view" : "Speaker view", + "Grid view" : "ເບິ່ງຕາຕະລາງ", + "Error when trying to load the available live transcription languages" : "Error when trying to load the available live transcription languages", + "Failed to enable live transcription" : "Failed to enable live transcription", + "Recording consent is required" : "Recording consent is required", + "This conversation is read-only" : "This conversation is read-only", + "Conversation not found or not joined" : "Conversation not found or not joined", + "Lobby is still active and you're not a moderator" : "Lobby is still active and you're not a moderator", + "Connection failed" : "Connection failed", + "Reload" : "ໂຫລດຄືນໃໝ່", + "{nickName} raised their hand." : "{nickName} raised their hand.", + "A participant raised their hand." : "A participant raised their hand.", + "Collapse stripe" : "Collapse stripe", + "Expand stripe" : "Expand stripe", + "Previous page of videos" : "Previous page of videos", + "Next page of videos" : "Next page of videos", + "Connecting …" : "Connecting …", + "Calling …" : "Calling …", + "Waiting for {user} to join the call" : "Waiting for {user} to join the call", + "Waiting for others to join the call …" : "Waiting for others to join the call …", + "You can invite others in the participant tab of the sidebar" : "You can invite others in the participant tab of the sidebar", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "You can invite others in the participant tab of the sidebar or share this link to invite others!", + "Share this link to invite others!" : "Share this link to invite others!", + "Copy link" : "ສຳເນົາລິງ", + "You are not allowed to enable audio" : "You are not allowed to enable audio", + "No audio. Click to select device" : "No audio. Click to select device", + "Mute audio" : "Mute audio", + "Mute audio (M)" : "Mute audio (M)", + "Unmute audio" : "Unmute audio", + "Unmute audio (M)" : "Unmute audio (M)", + "None" : "ບໍ່ມີ", + "Select a microphone" : "Select a microphone", + "Select a speaker" : "Select a speaker", + "Check devices" : "Check devices", + "Access to camera was denied" : "Access to camera was denied", + "Error while accessing camera: It is likely in use by another program" : "Error while accessing camera: It is likely in use by another program", + "Error while accessing camera" : "Error while accessing camera", + "You have been muted by a moderator" : "You have been muted by a moderator", + "Hide presenter video" : "Hide presenter video", + "You are not allowed to enable video" : "You are not allowed to enable video", + "No video. Click to select device" : "No video. Click to select device", + "Disable video" : "Disable video", + "Disable video (V)" : "Disable video (V)", + "Enable video" : "Enable video", + "Enable video (V)" : "Enable video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Enable video. Your connection will be briefly interrupted when enabling the video for the first time", + "Select a video device" : "Select a video device", + "Show presenter" : "Show presenter", + "You" : "You", + "Mute" : "Mute", + "Muted" : "Muted", + "Show screen" : "Show screen", + "Stop following" : "Stop following", + "Connection could not be established …" : "Connection could not be established …", + "Connection was lost and could not be re-established …" : "Connection was lost and could not be re-established …", + "Connection could not be established. Trying again …" : "Connection could not be established. Trying again …", + "Connection lost. Trying to reconnect …" : "Connection lost. Trying to reconnect …", + "Connection problems …" : "Connection problems …", + "Collapse" : "Collapse", + "Expand" : "Expand", + "You need to be logged in to upload files" : "You need to be logged in to upload files", + "Drop your files to upload" : "Drop your files to upload", + "Conversation messages" : "Conversation messages", + "Scroll to bottom" : "Scroll to bottom", + "Post message" : "Post message", + "Federated conversation" : "Federated conversation", + "Public conversation" : "Public conversation", + "Favorite" : "ລາຍການທີ່ມັກ", + "Banned users" : "Banned users", + "Manage the list of banned users in this conversation." : "Manage the list of banned users in this conversation.", + "Manage bans" : "Manage bans", + "No banned users" : "No banned users", + "Banned by:" : "Banned by:", + "Date:" : "Date:", + "Note:" : "ໝາຍເຫດ:", + "Hide details" : "ເຊື່ອງລາຍລະອຽດ", + "Show details" : "ສະແດງລາຍລະອຽດ", + "Unban" : "Unban", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "You can change the title and the description in {linkstart}Calendar ↗{linkend}.", + "Error while updating conversation name" : "Error while updating conversation name", + "Error while updating conversation description" : "Error while updating conversation description", + "Enter a name for this conversation" : "Enter a name for this conversation", + "Edit conversation name" : "Edit conversation name", + "Edit conversation description" : "Edit conversation description", + "Enter a description for this conversation" : "Enter a description for this conversation", + "Picture" : "Picture", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "No bots are installed on this server. Reach out to your administration to get bots installed on this server.", + "Disable" : "ປິດ", + "Enable" : "Enable", + "Breakout rooms" : "Breakout rooms", + "Manage breakout rooms" : "Manage breakout rooms", + "Set up breakout rooms for this conversation" : "Set up breakout rooms for this conversation", + "Please select a valid PNG or JPG file" : "Please select a valid PNG or JPG file", + "Choose your conversation picture" : "Choose your conversation picture", + "Choose" : "ເລືອກ", + "Error setting conversation picture" : "Error setting conversation picture", + "Could not set the conversation picture: {error}" : "Could not set the conversation picture: {error}", + "Error cropping conversation picture" : "Error cropping conversation picture", + "Error removing conversation picture" : "Error removing conversation picture", + "Set emoji as conversation picture" : "Set emoji as conversation picture", + "Set background color for conversation picture" : "Set background color for conversation picture", + "Upload conversation picture" : "Upload conversation picture", + "Choose conversation picture from files" : "Choose conversation picture from files", + "Remove conversation picture" : "Remove conversation picture", + "The file must be a PNG or JPG" : "The file must be a PNG or JPG", + "Set picture" : "Set picture", + "Default permissions modified for {conversationName}" : "Default permissions modified for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Could not modify default permissions for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edit the default permissions for participants in this conversation. These settings do not affect moderators.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost.", + "All permissions" : "All permissions", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Participants have permissions to start a call, join a call, enable audio and video, and share screen.", + "Restricted" : "Restricted", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions.", + "Advanced permissions" : "Advanced permissions", + "Edit permissions" : "Edit permissions", + "Conversation settings" : "Conversation settings", + "Basic Info" : "Basic Info", + "Personal" : "ສ່ວນບຸກຄົນ", + "Moderation" : "Moderation", + "Setup overview" : "Setup overview", + "Live transcription" : "Live transcription", + "Enable live transcription" : "Enable live transcription", + "Breakout Rooms" : "Breakout Rooms", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Danger zone", + "Archive conversation" : "Archive conversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations.", + "Do you really want to leave \"{displayName}\"?" : "Do you really want to leave \"{displayName}\"?", + "You can archive this conversation instead." : "You can archive this conversation instead.", + "Leave conversation" : "Leave conversation", + "You need to promote a new moderator before you can leave the conversation" : "You need to promote a new moderator before you can leave the conversation", + "Delete conversation" : "Delete conversation", + "Do you really want to delete \"{displayName}\"?" : "Do you really want to delete \"{displayName}\"?", + "Error while deleting conversation" : "Error while deleting conversation", + "Delete all chat messages" : "Delete all chat messages", + "Do you really want to delete all messages in \"{displayName}\"?" : "Do you really want to delete all messages in \"{displayName}\"?", + "Error while clearing chat history" : "Error while clearing chat history", + "Be careful, these actions cannot be undone." : "Be careful, these actions cannot be undone.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time.", + "Permanently delete this conversation." : "Permanently delete this conversation.", + "Delete chat messages" : "Delete chat messages", + "Permanently delete all the messages in this conversation." : "Permanently delete all the messages in this conversation.", + "_%n hour_::_%n hours_" : ["%n hours"], + "_%n day_::_%n days_" : ["%n days"], + "_%n week_::_%n weeks_" : ["%n weeks"], + "Custom expiration time" : "Custom expiration time", + "Message expiration disabled" : "Message expiration disabled", + "Message expiration set: {duration}" : "Message expiration set: {duration}", + "Error when trying to set message expiration" : "Error when trying to set message expiration", + "Message expiration" : "Message expiration", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation.", + "Set message expiration" : "Set message expiration", + "Current message expiration" : "Current message expiration", + "Password copied to clipboard" : "Password copied to clipboard", + "Password could not be copied" : "Password could not be copied", + "Guest access" : "Guest access", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms are not allowed in public conversations.", + "Allow guests to join this conversation via link" : "Allow guests to join this conversation via link", + "Password protection" : "ລະຫັດປ້ອງກັນ", + "This conversation is password-protected. Guests need password to join" : "This conversation is password-protected. Guests need password to join", + "Password protection is needed for public conversations" : "Password protection is needed for public conversations", + "Set a password" : "ຕັ້ງລະຫັດຜ່ານ", + "Change password" : "ປ່ຽນລະຫັດຜ່ານ", + "Enter new password" : "Enter new password", + "Save password" : "Save password", + "Copy password" : "Copy password", + "Guests are allowed to join this conversation via link" : "Guests are allowed to join this conversation via link", + "Guests are not allowed to join this conversation" : "Guests are not allowed to join this conversation", + "Resend invitations" : "Resend invitations", + "This conversation is open to both registered users and users created with the Guests app" : "This conversation is open to both registered users and users created with the Guests app", + "This conversation is open to registered users" : "This conversation is open to registered users", + "This conversation is limited to the current participants" : "This conversation is limited to the current participants", + "You opened the conversation to both registered users and users created with the Guests app" : "You opened the conversation to both registered users and users created with the Guests app", + "Error occurred when opening or limiting the conversation" : "Error occurred when opening or limiting the conversation", + "Open conversation to registered users, showing it in search results" : "Open conversation to registered users, showing it in search results", + "Also open to users created with the Guests app" : "Also open to users created with the Guests app", + "Open conversation" : "Open conversation", + "Set language spoken in calls" : "Set language spoken in calls", + "Languages could not be loaded" : "Languages could not be loaded", + "Loading languages …" : "Loading languages …", + "Invalid language" : "Invalid language", + "Default language (English)" : "Default language (English)", + "Default live transcription language set" : "Default live transcription language set", + "Live transcription language set: {languageName}" : "Live transcription language set: {languageName}", + "Error when trying to set live transcription language" : "Error when trying to set live transcription language", + "Start time: {date}" : "Start time: {date}", + "Start time has been updated" : "Start time has been updated", + "Error occurred while updating start time" : "Error occurred while updating start time", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Enabling the lobby will remove non-moderators from the ongoing call.", + "Enable lobby, restricting the conversation to moderators" : "Enable lobby, restricting the conversation to moderators", + "Meeting start time" : "Meeting start time", + "Start time (optional)" : "Start time (optional)", + "Import email participants" : "Import email participants", + "You can import a list of email participants from a CSV file." : "You can import a list of email participants from a CSV file.", + "Poll drafts" : "Poll drafts", + "Browse poll drafts" : "Browse poll drafts", + "Error occurred when locking the conversation" : "Error occurred when locking the conversation", + "Error occurred when unlocking the conversation" : "Error occurred when unlocking the conversation", + "Lock conversation" : "Lock conversation", + "This will also terminate the ongoing call." : "This will also terminate the ongoing call.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lock the conversation to prevent anyone to post messages or start calls", + "Edit" : "ແກ້ໄຂ", + "More information" : "More information", + "Delete" : "ລຶບ", + "Add new bridged channel to current conversation" : "Add new bridged channel to current conversation", + "unknown state" : "unknown state", + "running" : "running", + "not running, check Matterbridge log" : "not running, check Matterbridge log", + "not running" : "not running", + "Bridge saved" : "Bridge saved", + "You can bridge channels from various instant messaging systems with Matterbridge." : "You can bridge channels from various instant messaging systems with Matterbridge.", + "More info on Matterbridge" : "More info on Matterbridge", + "Messaging systems" : "Messaging systems", + "Enable bridge" : "Enable bridge", + "Show Matterbridge log" : "Show Matterbridge log", + "Log content" : "Log content", + "Only moderators are allowed to mention @all" : "Only moderators are allowed to mention @all", + "All participants are allowed to mention @all" : "All participants are allowed to mention @all", + "Participants are now allowed to mention @all." : "Participants are now allowed to mention @all.", + "Mentioning @all has been limited to moderators." : "Mentioning @all has been limited to moderators.", + "Allow participants to mention @all" : "Allow participants to mention @all", + "Mention permissions" : "Mention permissions", + "Notifications" : "ການເເຈ້ງເຕືອນ", + "Notify about calls in this conversation" : "Notify about calls in this conversation", + "Important conversation" : "Important conversation", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Do not disturb\" user status is ignored for important conversations", + "Sensitive conversation" : "Sensitive conversation", + "Message preview will be disabled in conversation list and notifications" : "Message preview will be disabled in conversation list and notifications", + "Recording consent is required for calls in this conversation" : "Recording consent is required for calls in this conversation", + "Recording consent is not required for calls in this conversation" : "Recording consent is not required for calls in this conversation", + "Recording consent requirement was updated" : "Recording consent requirement was updated", + "Error occurred while updating recording consent" : "Error occurred while updating recording consent", + "Recording Consent" : "Recording Consent", + "Recording consent cannot be changed once a call or breakout session has started." : "Recording consent cannot be changed once a call or breakout session has started.", + "Require recording consent before joining call in this conversation" : "Require recording consent before joining call in this conversation", + "Recording consent is required for all calls" : "Recording consent is required for all calls", + "SIP dial-in is now possible without PIN requirement" : "SIP dial-in is now possible without PIN requirement", + "SIP dial-in is now enabled" : "SIP dial-in is now enabled", + "SIP dial-in is now disabled" : "SIP dial-in is now disabled", + "Error occurred when enabling SIP dial-in" : "Error occurred when enabling SIP dial-in", + "Error occurred when disabling SIP dial-in" : "Error occurred when disabling SIP dial-in", + "Phone and SIP dial-in" : "Phone and SIP dial-in", + "Enable phone and SIP dial-in" : "Enable phone and SIP dial-in", + "Allow to dial-in without a PIN" : "Allow to dial-in without a PIN", + "Ongoing" : "Ongoing", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n people accepted"], + "_%n person declined_::_%n people declined_" : ["%n people declined"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachments"], + "With {displayName}" : "With {displayName}", + "In {conversation}" : "In {conversation}", + "View attachment" : "View attachment", + "Join" : "Join", + "View conversation" : "View conversation", + "View event on Calendar" : "View event on Calendar", + "Error while creating the conversation" : "Error while creating the conversation", + "Hello, {displayName}" : "Hello, {displayName}", + "Start meeting now" : "Start meeting now", + "Give your meeting a title" : "Give your meeting a title", + "Create and copy link" : "Create and copy link", + "Create a new conversation" : "Create a new conversation", + "Join open conversations" : "Join open conversations", + "Call a phone number" : "Call a phone number", + "Scroll backward" : "Scroll backward", + "Scroll forward" : "Scroll forward", + "Schedule meetings" : "Schedule meetings", + "You don't have any upcoming meetings" : "You don't have any upcoming meetings", + "Open calendar" : "Open calendar", + "Unread mentions" : "Unread mentions", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name", + "Upcoming reminders" : "Upcoming reminders", + "Message reminders" : "Message reminders", + "Set a reminder on a message to be notified" : "Set a reminder on a message to be notified", + "Start a group conversation" : "Start a group conversation", + "Create conversation" : "Create conversation", + "Enter your name" : "ປ້ອນຊື່ຂອງທ່ານ", + "Submit name and join" : "Submit name and join", + "Do you already have an account?" : "Do you already have an account?", + "Log in" : "ເຂົ້າລະບົບ", + "Error while verifying uploaded file" : "Error while verifying uploaded file", + "Uploaded file is verified" : "Uploaded file is verified", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Participants added successfully", + "Error while adding participants" : "Error while adding participants", + "Import a file" : "Import a file", + "Browse" : "Browse", + "Verifying uploaded file …" : "Verifying uploaded file …", + "This might take a moment" : "This might take a moment", + "Send invitations" : "Send invitations", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid emails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitations can be sent"], + "An error occurred while calling a phone number" : "An error occurred while calling a phone number", + "Phone number could not be called: {error}" : "Phone number could not be called: {error}", + "Phone number could not be called" : "Phone number could not be called", + "Search participants or phone numbers" : "Search participants or phone numbers", + "Creating the conversation …" : "Creating the conversation …", + "Mark as read" : "Mark as read", + "Mark as unread" : "Mark as unread", + "Remove from favorites" : "ຍ້າຍຈາກລາຍການທີ່ມັກ", + "Add to favorites" : "ເພີ່ມລາຍການທີ່ມັກ", + "Unarchive conversation" : "Unarchive conversation", + "Ignore \"Do not disturb\"" : "Ignore \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "You need to promote a new moderator before you can leave the conversation.", + "Conversation actions" : "Conversation actions", + "Notify about calls" : "Notify about calls", + "Hide message text" : "Hide message text", + "Pending invitations" : "Pending invitations", + "From {user} at {remoteServer}" : "From {user} at {remoteServer}", + "Decline invitation" : "Decline invitation", + "Accept invitation" : "Accept invitation", + "No pending invitations" : "No pending invitations", + "Home" : "ໜ້າຫຼັກ", + "Unread" : "Unread", + "Mentions" : "Mentions", + "Meetings" : "Meetings", + "Alphabetically" : "Alphabetically", + "No followed threads" : "No followed threads", + "No matches found" : "No matches found", + "No conversations found" : "No conversations found", + "You have no archived conversations." : "You have no archived conversations.", + "Subscribe to an existing thread or start your own." : "Subscribe to an existing thread or start your own.", + "You have no unread mentions." : "You have no unread mentions.", + "You have no unread messages." : "You have no unread messages.", + "An error occurred while performing the search" : "An error occurred while performing the search", + "Conversation list" : "Conversation list", + "Filter conversations by" : "Filter conversations by", + "Unread messages" : "Unread messages", + "Meeting conversations" : "Meeting conversations", + "Clear filters" : "Clear filters", + "New personal note" : "New personal note", + "Back to conversations" : "Back to conversations", + "Archived conversations" : "Archived conversations", + "Threads" : "Threads", + "Clear filter" : "Clear filter", + "Show more threads" : "Show more threads", + "App settings" : "App settings", + "Users" : "ຜູ້ໃຊ້", + "Groups" : "ກຸ່ມ", + "Teams" : "Teams", + "Federated users" : "Federated users", + "New private conversation" : "New private conversation", + "Other sources" : "Other sources", + "Open conversations" : "Open conversations", + "No search results" : "No search results", + "Users, groups and teams" : "Users, groups and teams", + "Users and groups" : "Users and groups", + "Users and teams" : "Users and teams", + "Groups and teams" : "Groups and teams", + "New group conversation" : "New group conversation", + "The meeting will start soon" : "The meeting will start soon", + "This meeting is scheduled for {startTime}" : "This meeting is scheduled for {startTime}", + "You are currently waiting in the lobby" : "You are currently waiting in the lobby", + "Select microphone" : "Select microphone", + "No microphone available" : "No microphone available", + "Select speaker" : "Select speaker", + "No speaker available" : "No speaker available", + "Select camera" : "Select camera", + "No camera available" : "No camera available", + "Select a device" : "Select a device", + "Playing …" : "Playing …", + "Test speakers" : "Test speakers", + "Test" : "ທົດສອບ", + "Devices" : "Devices", + "Backgrounds" : "Backgrounds", + "No audio" : "No audio", + "No camera" : "No camera", + "Display video as you will see it (mirrored)" : "Display video as you will see it (mirrored)", + "Display video as others will see it" : "Display video as others will see it", + "Calls are not supported in your browser" : "Calls are not supported in your browser", + "Access to microphone is only possible with HTTPS" : "Access to microphone is only possible with HTTPS", + "Access to microphone was denied" : "Access to microphone was denied", + "Error while accessing microphone" : "Error while accessing microphone", + "Access to camera is only possible with HTTPS" : "Access to camera is only possible with HTTPS", + "The call is being recorded." : "The call is being recorded.", + "The call might be recorded." : "The call might be recorded.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call.", + "Give consent to the recording of this call" : "Give consent to the recording of this call", + "Show more info" : "Show more info", + "Audio is not available" : "Audio is not available", + "Video is not available" : "Video is not available", + "Start recording immediately with the call" : "Start recording immediately with the call", + "Notify all participants about this call" : "Notify all participants about this call", + "Apply settings" : "Apply settings", + "Select virtual office background" : "Select virtual office background", + "Select virtual home background" : "Select virtual home background", + "Select virtual abstract background" : "Select virtual abstract background", + "Select virtual beach background" : "Select virtual beach background", + "Select virtual park background" : "Select virtual park background", + "Select virtual theater background" : "Select virtual theater background", + "Select virtual library background" : "Select virtual library background", + "Select virtual space station background" : "Select virtual space station background", + "Error while uploading the file" : "Error while uploading the file", + "Select a file" : "Select a file", + "Invalid path selected" : "ເສັ້ນທາງທີ່ເລືອກບໍ່ຖືກຕ້ອງ", + "Select virtual background from file {fileName}" : "Select virtual background from file {fileName}", + "Blur" : "Blur", + "Upload" : "ອັບໂຫຼດ", + "Files" : "ຟາຍ", + "(editing)" : "(editing)", + "(edited)" : "(edited)", + "The message has expired or has been deleted" : "The message has expired or has been deleted", + "Cancel quote" : "Cancel quote", + "24 hours" : "24 ຊົ່ວໂມງ", + "7 days" : "7 ມື້", + "Clear reminder – {timeLocale}" : "Clear reminder – {timeLocale}", + "Edited by {actor}" : "Edited by {actor}", + "Message text copied to clipboard" : "Message text copied to clipboard", + "Message text could not be copied" : "Message text could not be copied", + "Message forwarded to \"Note to self\"" : "Message forwarded to \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Error while forwarding message to \"Note to self\"", + "A reminder was successfully removed" : "A reminder was successfully removed", + "Error occurred when removing a reminder" : "Error occurred when removing a reminder", + "A reminder was successfully set at {datetime}" : "A reminder was successfully set at {datetime}", + "Error occurred when creating a reminder" : "Error occurred when creating a reminder", + "Add a reaction to this message" : "Add a reaction to this message", + "Reply" : "Reply", + "More actions" : "More actions", + "Set reminder" : "Set reminder", + "Reply privately" : "Reply privately", + "Edit message" : "Edit message", + "Copy message" : "Copy message", + "Copy message link" : "Copy message link", + "Go to file" : "Go to file", + "Download file" : "Download file", + "Go to thread" : "Go to thread", + "Edit thread details" : "Edit thread details", + "Forward message" : "Forward message", + "Translate" : "ແປ", + "Set custom reminder" : "Set custom reminder", + "Close reactions menu" : "Close reactions menu", + "React with {emoji}" : "React with {emoji}", + "React with another emoji" : "React with another emoji", + "Choose a conversation to forward the selected message." : "Choose a conversation to forward the selected message.", + "Error while forwarding message" : "Error while forwarding message", + "The message has been forwarded to {selectedConversationName}" : "The message has been forwarded to {selectedConversationName}", + "Dismiss" : "ຍົກເລີກ", + "Go to conversation" : "Go to conversation", + "Detect language" : "ກວດສອບພາສາ", + "The message could not be translated" : "The message could not be translated", + "Translation copied to clipboard" : "Translation copied to clipboard", + "Translation could not be copied" : "Translation could not be copied", + "Translate message" : "Translate message", + "Source language to translate from" : "Source language to translate from", + "Translate from" : "Translate from", + "Target language to translate into" : "Target language to translate into", + "Translate to" : "Translate to", + "Translating" : "Translating", + "Copy translated text" : "Copy translated text", + "Send now" : "Send now", + "Message read by everyone who shares their reading status" : "Message read by everyone who shares their reading status", + "Message sent" : "Message sent", + "Sent without notification" : "Sent without notification", + "Deleting message" : "Deleting message", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services", + "Message deleted successfully" : "Message deleted successfully", + "Message could not be deleted because it is too old" : "Message could not be deleted because it is too old", + "Only normal chat messages can be deleted" : "Only normal chat messages can be deleted", + "An error occurred while deleting the message" : "An error occurred while deleting the message", + "Your browser does not support playing audio files" : "Your browser does not support playing audio files", + "Contact" : "ລາຍຊື່ຜູ້ຕິດຕໍ່", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck Card", + "Remove {fileName}" : "Remove {fileName}", + "Open this location in OpenStreetMap" : "Open this location in OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n replies"], + "Sending message" : "Sending message", + "Failed to send the message. Click to try again" : "Failed to send the message. Click to try again", + "Not enough free space to upload file" : "Not enough free space to upload file", + "You cannot send messages to this conversation at the moment" : "You cannot send messages to this conversation at the moment", + "Could not update the message" : "Could not update the message", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n options"], + "_%n vote_::_%n votes_" : ["%n vote"], + "Edit poll draft" : "Edit poll draft", + "Delete poll draft" : "Delete poll draft", + "Open poll" : "Open poll", + "See results" : "See results", + "Reactions" : "Reactions", + "No permission to post reactions in this conversation" : "No permission to post reactions in this conversation", + "and {participant}" : "and {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participants"], + "Show all reactions" : "Show all reactions", + "Add more reactions" : "Add more reactions", + "Show or collapse system messages" : "Show or collapse system messages", + "No messages" : "No messages", + "All messages have expired or have been deleted." : "All messages have expired or have been deleted.", + "Unpin" : "Unpin", + "Cancel search" : "Cancel search", + "Add a phone number" : "Add a phone number", + "Error: A password is required to create the conversation." : "Error: A password is required to create the conversation.", + "All set, the conversation \"{conversationName}\" was created." : "All set, the conversation \"{conversationName}\" was created.", + "Create a new group conversation" : "Create a new group conversation", + "Add participants" : "Add participants", + "Maximum length exceeded ({maxlength} characters)" : "Maximum length exceeded ({maxlength} characters)", + "Conversation visibility" : "Conversation visibility", + "Allow guests to join via link" : "Allow guests to join via link", + "Enter password" : "Enter password", + "This conversation has been locked" : "This conversation has been locked", + "No permission to post messages in this conversation" : "No permission to post messages in this conversation", + "Joining conversation …" : "Joining conversation …", + "Write a message without notification" : "Write a message without notification", + "Create a thread silently" : "Create a thread silently", + "Create a thread" : "Create a thread", + "Send message silently" : "Send message silently", + "Send message" : "Send message", + "Send without notification" : "Send without notification", + "The participant will not be notified about new messages" : "The participant will not be notified about new messages", + "Participants will not be notified about new messages" : "Participants will not be notified about new messages", + "Thread title is required" : "Thread title is required", + "Message text is required" : "Message text is required", + "The message could not be edited" : "The message could not be edited", + "File to share" : "File to share", + "File upload is not available in this conversation" : "File upload is not available in this conversation", + "Add emoji" : "Add emoji", + "Adding a mention will only notify users who did not read the message." : "Adding a mention will only notify users who did not read the message.", + "Thread title" : "Thread title", + "Send later" : "Send later", + "Cancel editing" : "Cancel editing", + "{user} is out of office and might not respond." : "{user} is out of office and might not respond.", + "Absence period: {startDate} - {endDate}" : "Absence period: {startDate} - {endDate}", + "Replacement:" : "Replacement:", + "Share from {nextcloud}" : "Share from {nextcloud}", + "Share from Files" : "Share from Files", + "Share files to the conversation" : "Share files to the conversation", + "Upload from device" : "Upload from device", + "Create new poll" : "Create new poll", + "Smart picker" : "Smart picker", + "Record voice message" : "Record voice message", + "End recording and send" : "End recording and send", + "Dismiss recording" : "Dismiss recording", + "Access to the microphone was denied" : "Access to the microphone was denied", + "Microphone either not available or disabled in settings" : "Microphone either not available or disabled in settings", + "Error while recording audio" : "Error while recording audio", + "Generating summary of unread messages …" : "Generating summary of unread messages …", + "Summary is AI generated and might contain mistakes" : "Summary is AI generated and might contain mistakes", + "Error occurred during a summary generation" : "Error occurred during a summary generation", + "New file" : "ຟາຍໃໝ່", + "Blank" : "Blank", + "Error while creating file" : "Error while creating file", + "Create and share a new file" : "Create and share a new file", + "Name of the new file" : "Name of the new file", + "Create file" : "Create file", + "Someone is typing …" : "Someone is typing …", + "{user1} is typing …" : "{user1} is typing …", + "{user1} and {user2} are typing …" : "{user1} and {user2} are typing …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} and {user3} are typing …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n others are typing …"], + "Add more files" : "Add more files", + "Send" : "ສົ່ງ", + "In this conversation {user} can:" : "In this conversation {user} can:", + "Edit default permissions for participants in {conversationName}" : "Edit default permissions for participants in {conversationName}", + "Start a call" : "Start a call", + "Skip the lobby" : "Skip the lobby", + "Can post messages and reactions" : "Can post messages and reactions", + "Enable the microphone" : "Enable the microphone", + "Enable the camera" : "Enable the camera", + "Share the screen" : "Share the screen", + "Update permissions" : "Update permissions", + "Updating permissions" : "Updating permissions", + "No poll drafts" : "No poll drafts", + "There is no poll drafts yet saved for this conversation" : "There is no poll drafts yet saved for this conversation", + "Create poll in {name}" : "Create poll in {name}", + "Create poll" : "Create poll", + "Error while importing poll" : "Error while importing poll", + "Question" : "ຄຳຖາມ", + "Ask a question" : "Ask a question", + "Import draft from file" : "Import draft from file", + "Answers" : "Answers", + "Answer {option}" : "Answer {option}", + "Delete poll option" : "Delete poll option", + "Add answer" : "Add answer", + "Settings" : "ການຕັ້ງຄ່າ", + "Anonymous poll" : "ໂພລນິລະນາມ", + "Multiple answers" : "Multiple answers", + "Save as draft" : "Save as draft", + "Export draft to file" : "Export draft to file", + "You voted for this option" : "You voted for this option", + "End poll" : "End poll", + "Change your vote" : "Change your vote", + "Results" : "ຜົນລັບ", + "Voted participants" : "Voted participants", + "Send a message to \"{roomName}\"" : "Send a message to \"{roomName}\"", + "Hide list of participants" : "Hide list of participants", + "Show list of participants" : "Show list of participants", + "Assistance requested in {roomName}" : "Assistance requested in {roomName}", + "The message was sent to \"{roomName}\"" : "The message was sent to \"{roomName}\"", + "Dismiss request for assistance" : "Dismiss request for assistance", + "Send message to room" : "Send message to room", + "Back to main room" : "Back to main room", + "Back to your room" : "Back to your room", + "Message all rooms" : "Message all rooms", + "Start session" : "Start session", + "Start a call before you start a breakout room session" : "Start a call before you start a breakout room session", + "Stop session" : "Stop session", + "The message was sent to all breakout rooms" : "The message was sent to all breakout rooms", + "Send a message to all breakout rooms" : "Send a message to all breakout rooms", + "Breakout rooms are not started" : "Breakout rooms are not started", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}", + "Talk setup incomplete" : "Talk setup incomplete", + "Disable lobby" : "Disable lobby", + "Settings for participant \"{user}\"" : "Settings for participant \"{user}\"", + "Participant \"{user}\"" : "Participant \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "ແຂກ", + "Ringing …" : "Ringing …", + "Call rejected" : "Call rejected", + "{time} talking …" : "{time} talking …", + "{time} talking time" : "{time} talking time", + "Raised their hand" : "Raised their hand", + "Joined with video" : "Joined with video", + "Joined via phone" : "Joined via phone", + "Joined with audio" : "Joined with audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long.", + "Remove group and members" : "Remove group and members", + "Remove team and members" : "Remove team and members", + "Remove participant" : "Remove participant", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Do you really want to remove group \"{displayName}\" and its members from this conversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Do you really want to remove team \"{displayName}\" and its members from this conversation?", + "Do you really want to remove {displayName} from this conversation?" : "Do you really want to remove {displayName} from this conversation?", + "Notification was sent to {displayName}" : "Notification was sent to {displayName}", + "Could not send notification to {displayName}" : "Could not send notification to {displayName}", + "Permissions granted to {displayName}" : "Permissions granted to {displayName}", + "Could not modify permissions for {displayName}" : "Could not modify permissions for {displayName}", + "Permissions removed for {displayName}" : "Permissions removed for {displayName}", + "Permissions set to default for {displayName}" : "Permissions set to default for {displayName}", + "Phone number could not be hung up" : "Phone number could not be hung up", + "Phone number could not be put on hold" : "Phone number could not be put on hold", + "Phone number could not be muted" : "Phone number could not be muted", + "Phone number could not be unmuted" : "Phone number could not be unmuted", + "DTMF message could not be sent" : "DTMF message could not be sent", + "Phone number copied to clipboard" : "Phone number copied to clipboard", + "Phone number could not be copied" : "Phone number could not be copied", + "in the lobby" : "in the lobby", + "Dial out phone" : "Dial out phone", + "Hang up phone" : "Hang up phone", + "Move back to lobby" : "Move back to lobby", + "Move to conversation" : "Move to conversation", + "Dial-in PIN" : "Dial-in PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Resend invitation", + "Send call notification" : "Send call notification", + "Dial out phone number" : "Dial out phone number", + "Resume call for phone number" : "Resume call for phone number", + "Put phone number on hold" : "Put phone number on hold", + "Unmute phone number" : "Unmute phone number", + "Mute phone number" : "Mute phone number", + "Copy phone number" : "Copy phone number", + "Reset custom permissions" : "Reset custom permissions", + "Grant all permissions" : "Grant all permissions", + "Remove all permissions" : "Remove all permissions", + "Also ban from this conversation" : "Also ban from this conversation", + "Internal note (reason to ban)" : "Internal note (reason to ban)", + "Remove" : "ຍ້າຍອອກ", + "Permissions modified for {displayName}" : "Permissions modified for {displayName}", + "Add users, groups or teams" : "Add users, groups or teams", + "Add users or groups" : "ເພີ່ມ ຜຸ້ໃຊ້ ຫຼື ກຸ່ມ", + "Add users or teams" : "Add users or teams", + "Add users" : "Add users", + "Add groups or teams" : "Add groups or teams", + "Add groups" : "Add groups", + "Add teams" : "Add teams", + "Add other sources" : "Add other sources", + "Add emails" : "Add emails", + "Integrations" : "Integrations", + "Add federated users" : "Add federated users", + "Searching …" : "ກຳລັງຄົ້ນຫາ...", + "Search for more users" : "Search for more users", + "You can search or add participants via name, email, or Federated Cloud ID" : "You can search or add participants via name, email, or Federated Cloud ID", + "Search or add participants" : "Search or add participants", + "Invitation was sent to {actorId}" : "Invitation was sent to {actorId}", + "An error occurred while adding the participants" : "An error occurred while adding the participants", + "A new group conversation with selected participant will be created" : "A new group conversation with selected participant will be created", + "Participants" : "ຜູ້ເຂົ້າຮ່ວມ", + "Participants ({count})" : "Participants ({count})", + "Open chat" : "Open chat", + "You have new unread messages in the chat." : "You have new unread messages in the chat.", + "You have been mentioned in the chat." : "You have been mentioned in the chat.", + "Search messages" : "Search messages", + "Chat" : "Chat", + "Details" : "ລາຍລະອຽດ", + "Shared items" : "Shared items", + "Search in {name}" : "Search in {name}", + "Threads in {name}" : "Threads in {name}", + "{actor} in {conversation}" : "{actor} in {conversation}", + "Search messages …" : "Search messages …", + "Search options" : "Search options", + "From User" : "From User", + "Since" : "Since", + "Until" : "Until", + "No results found" : "ບໍ່ພົບຜົນລັບ", + "Load more results" : "ຜົນLoad ເພີ່ມເຕີມ", + "Recent threads" : "Recent threads", + "Projects" : "Projects", + "No shared items" : "No shared items", + "Thread notifications" : "Thread notifications", + "Thread actions" : "Thread actions", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link to a conversation", + "No open conversations found" : "No open conversations found", + "Either there are no open conversations or you joined all of them." : "Either there are no open conversations or you joined all of them.", + "Check spelling or use complete words." : "Check spelling or use complete words.", + "Search conversations or users" : "Search conversations or users", + "Select conversation" : "Select conversation", + "Number length is not valid" : "Number length is not valid", + "Region code is not valid" : "Region code is not valid", + "Number length is too short" : "Number length is too short", + "Number length is too long" : "Number length is too long", + "Number is not valid" : "Number is not valid", + "Phone numbers" : "Phone numbers", + "Display name: {name}" : "Display name: {name}", + "Edit display name" : "Edit display name", + "Display name (required)" : "Display name (required)", + "Save name" : "Save name", + "Error while setting personal setting" : "Error while setting personal setting", + "Error while saving sounds setting" : "Error while saving sounds setting", + "Compact conversations list" : "Compact conversations list", + "Play sounds when participants join or leave a call" : "Play sounds when participants join or leave a call", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer", + "Notification settings" : "Notification settings", + "Sounds for chat and call notifications" : "Sounds for chat and call notifications", + "Default language" : "ພາສາເລີ່ມຕົ້ນ", + "Select location for attachments" : "Select location for attachments", + "Error while setting attachment folder" : "Error while setting attachment folder", + "Error while setting read status privacy" : "Error while setting read status privacy", + "Error while setting typing status privacy" : "Error while setting typing status privacy", + "Error while setting default media state" : "Error while setting default media state", + "Turn camera and microphone off by default" : "Turn camera and microphone off by default", + "Blur camera background by default" : "Blur camera background by default", + "Skip device preview before joining a call" : "Skip device preview before joining a call", + "Appearance & Sounds" : "Appearance & Sounds", + "Privacy" : "ສ່ວນຕົວ", + "Send read receipts" : "Send read receipts", + "When off, all read statuses will be hidden" : "When off, all read statuses will be hidden", + "Share typing status" : "Share typing status", + "When off, all typing indicators will be hidden" : "When off, all typing indicators will be hidden", + "Attachments folder" : "Attachments folder", + "Toggle full screen" : "Toggle full screen", + "Return to Home screen" : "Return to Home screen", + "Search" : "ຄົ້ນຫາ", + "Shortcuts while in a chat" : "Shortcuts while in a chat", + "Focus the chat input" : "Focus the chat input", + "Unfocus the chat input to use shortcuts" : "Unfocus the chat input to use shortcuts", + "Edit your last message" : "Edit your last message", + "Shortcuts while in a call" : "Shortcuts while in a call", + "Camera on and off" : "Camera on and off", + "Microphone on and off" : "Microphone on and off", + "Raise or lower hand" : "Raise or lower hand", + "Push to talk or push to mute" : "Push to talk or push to mute", + "Zoom-in / zoom-out a screen share" : "Zoom-in / zoom-out a screen share", + "Mouse wheel" : "Mouse wheel", + "Start call silently" : "Start call silently", + "Start call" : "Start call", + "End call" : "End call", + "This call has just ended" : "This call has just ended", + "You will be able to join the call only after a moderator starts it." : "You will be able to join the call only after a moderator starts it.", + "End call for everyone" : "End call for everyone", + "Starting the recording" : "Starting the recording", + "Recording" : "Recording", + "The call has been running for one hour." : "The call has been running for one hour.", + "Cancel recording start" : "Cancel recording start", + "Stop recording" : "Stop recording", + "Send a reaction" : "Send a reaction", + "React with {reaction}" : "React with {reaction}", + "All tasks done!" : "All tasks done!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n tasks"], + "Add participants to this call" : "Add participants to this call", + "_%n participant in call_::_%n participants in call_" : ["%n participants in call"], + "You are not allowed to enable screensharing" : "You are not allowed to enable screensharing", + "No screensharing" : "No screensharing", + "Screensharing options" : "Screensharing options", + "Enable screensharing" : "Enable screensharing", + "Bad sent video and screen quality." : "Bad sent video and screen quality.", + "Bad sent screen quality." : "Bad sent screen quality.", + "Bad sent video quality." : "Bad sent video quality.", + "Bad sent audio, video and screen quality." : "Bad sent audio, video and screen quality.", + "Bad sent audio and screen quality." : "Bad sent audio and screen quality.", + "Bad sent audio and video quality." : "Bad sent audio and video quality.", + "Bad sent audio quality." : "Bad sent audio quality.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share.", + "Disable background blur" : "Disable background blur", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Your internet connection or computer are busy and other participants might be unable to see your screen.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Your internet connection or computer are busy and other participants might be unable to see you.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Your internet connection or computer are busy and other participants might be unable to understand you.", + "Screen sharing is not supported by your browser." : "Screen sharing is not supported by your browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Screen sharing requires the page to be loaded through HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Screensharing requires the page to be loaded through HTTPS.", + "An error occurred while starting screensharing." : "An error occurred while starting screensharing.", + "Select virtual background" : "Select virtual background", + "Show your screen" : "Show your screen", + "Stop screensharing" : "Stop screensharing", + "Mute others" : "Mute others", + "Start recording" : "Start recording", + "Set up breakout rooms" : "Set up breakout rooms", + "Download attendance list" : "Download attendance list", + "Open Calendar" : "Open Calendar", + "Remove participant {name}" : "Remove participant {name}", + "Would you like to delete this conversation?" : "Would you like to delete this conversation?", + "Are you sure you want to delete this conversation?" : "Are you sure you want to delete this conversation?", + "Delete now" : "Delete now", + "Keep" : "ຮັກສາໄວ້", + "Open dialpad" : "Open dialpad", + "Select a region" : "Select a region", + "Local time: {time}" : "Local time: {time}", + "Search …" : "Search …", + "Message without mention" : "Message without mention", + "Mention myself" : "Mention myself", + "Mention everyone" : "Mention everyone", + "Select a conversation" : "Select a conversation", + "Select a mode" : "Select a mode", + "You do not have permissions to access this conversation." : "You do not have permissions to access this conversation.", + "Join a different conversation or start a new one." : "Join a different conversation or start a new one.", + "The conversation does not exist" : "The conversation does not exist", + "Join a conversation or start a new one!" : "Join a conversation or start a new one!", + "Duplicate session" : "Duplicate session", + "Creating and joining a conversation with \"{userid}\"" : "Creating and joining a conversation with \"{userid}\"", + "Join a conversation or start a new one" : "Join a conversation or start a new one", + "Error while joining the conversation" : "Error while joining the conversation", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud user", + "User password" : "User password", + "Talk conversation" : "ການສົນທະນາ Talk", + "Skip TLS verification" : "Skip TLS verification", + "Matrix server URL" : "Matrix server URL", + "User" : "ຜູ້ໃຊ້", + "Matrix channel" : "Matrix channel", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost user", + "Team name" : "Team name", + "Channel name" : "Channel name", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "User name or email address", + "Rocket.Chat channel" : "Rocket.Chat channel", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot user name", + "Bot API key" : "Bot API key", + "Zulip channel" : "Zulip channel", + "API token" : "API token", + "Slack channel" : "Slack channel", + "Server ID or name" : "Server ID or name", + "Channel ID (prefixed with \"ID:\") or name" : "Channel ID (prefixed with \"ID:\") or name", + "Channel" : "Channel", + "Login" : "ເຂົ້າສູ່ລະບົບ", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (e.g. chat.freenode.net:6667)", + "Nickname" : "Nickname", + "Connection password" : "Connection password", + "IRC channel" : "IRC channel", + "Channel password" : "Channel password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ password", + "Use TLS" : "Use TLS", + "Use SASL" : "Use SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "ຊື່ມວນຊົນ", + "Polls" : "ໂພລ", + "Deck cards" : "Deck cards", + "Voice messages" : "Voice messages", + "Locations" : "Locations", + "Call recordings" : "Call recordings", + "Audio" : "ສຽງ", + "Show all media" : "Show all media", + "Show all files" : "Show all files", + "Show all polls" : "Show all polls", + "Show all deck cards" : "Show all deck cards", + "Show all voice messages" : "Show all voice messages", + "Show all locations" : "Show all locations", + "Show all call recordings" : "Show all call recordings", + "Show all audio" : "Show all audio", + "Show all other" : "Show all other", + "Follow conversation settings" : "Follow conversation settings", + "Group" : "ກຸ່ມ", + "Team" : "ທີມ", + "You reconnected to the call" : "You reconnected to the call", + "{actor} reconnected to the call" : "{actor} reconnected to the call", + "You added {user0} and {user1}" : "You added {user0} and {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participants"], + "An administrator added you and {user0}" : "An administrator added you and {user0}", + "{actor} added you and {user0}" : "{actor} added you and {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participants"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participants"], + "An administrator added {user0} and {user1}" : "An administrator added {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} added {user0} and {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participants"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participants"], + "You removed {user0} and {user1}" : "You removed {user0} and {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participants"], + "An administrator removed you and {user0}" : "An administrator removed you and {user0}", + "{actor} removed you and {user0}" : "{actor} removed you and {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participants"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participants"], + "An administrator removed {user0} and {user1}" : "An administrator removed {user0} and {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removed {user0} and {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participants"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participants"], + "You and {user0} joined the call" : "You and {user0} joined the call", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participants joined the call"], + "{user0} and {user1} joined the call" : "{user0} and {user1} joined the call", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call"], + "You and {user0} left the call" : "You and {user0} left the call", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participants left the call"], + "{user0} and {user1} left the call" : "{user0} and {user1} left the call", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participants left the call"], + "You promoted {user0} and {user1} to moderators" : "You promoted {user0} and {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participants to moderators"], + "An administrator promoted you and {user0} to moderators" : "An administrator promoted you and {user0} to moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoted you and {user0} to moderators", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participants to moderators"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participants to moderators"], + "An administrator promoted {user0} and {user1} to moderators" : "An administrator promoted {user0} and {user1} to moderators", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoted {user0} and {user1} to moderators", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participants to moderators"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participants to moderators"], + "You demoted {user0} and {user1} from moderators" : "You demoted {user0} and {user1} from moderators", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participants from moderators"], + "An administrator demoted you and {user0} from moderators" : "An administrator demoted you and {user0} from moderators", + "{actor} demoted you and {user0} from moderators" : "{actor} demoted you and {user0} from moderators", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participants from moderators"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators"], + "An administrator demoted {user0} and {user1} from moderators" : "An administrator demoted {user0} and {user1} from moderators", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} demoted {user0} and {user1} from moderators", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participants from moderators"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participants from moderators"], + "You:" : "You:", + "You: {lastMessage}" : "You: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(edited by you)", + "(edited by a deleted user)" : "(edited by a deleted user)", + "(edited by {moderator})" : "(edited by {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?", + "Leave this page" : "Leave this page", + "Join here" : "Join here", + "Deck card has been posted to {conversation}" : "Deck card has been posted to {conversation}", + "An error occurred while posting deck card to conversation" : "An error occurred while posting deck card to conversation", + "Post to a conversation" : "Post to a conversation", + "Post to conversation" : "Post to conversation", + "The recording failed. Please contact your administrator." : "The recording failed. Please contact your administrator.", + "Location has been posted to {conversation}" : "Location has been posted to {conversation}", + "An error occurred while posting location to conversation" : "An error occurred while posting location to conversation", + "Share to a conversation" : "Share to a conversation", + "Share to conversation" : "Share to conversation", + "In conversation" : "In conversation", + "Search in conversation: {conversation}" : "Search in conversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Your requests are throttled at the moment due to brute force protection", + "Error while clearing conversation history" : "Error while clearing conversation history", + "Error occurred while allowing guests" : "Error occurred while allowing guests", + "Error occurred while disallowing guests" : "Error occurred while disallowing guests", + "Error occurred when restricting the conversation to moderator" : "Error occurred when restricting the conversation to moderator", + "Error occurred when opening the conversation to everyone" : "Error occurred when opening the conversation to everyone", + "Conversation password has been saved" : "Conversation password has been saved", + "Conversation password has been removed" : "Conversation password has been removed", + "Error occurred while saving conversation password" : "Error occurred while saving conversation password", + "Call recording is starting." : "Call recording is starting.", + "Call recording stopped while starting." : "Call recording stopped while starting.", + "Call recording stopped. You will be notified once the recording is available." : "Call recording stopped. You will be notified once the recording is available.", + "Conversation picture set" : "Conversation picture set", + "Conversation picture deleted" : "Conversation picture deleted", + "Could not delete the conversation picture" : "Could not delete the conversation picture", + "Could not remove the automatic expiration" : "Could not remove the automatic expiration", + "Could not post message: {errorMessage}" : "Could not post message: {errorMessage}", + "Participant is banned successfully" : "Participant is banned successfully", + "Error while banning the participant" : "Error while banning the participant", + "An error occurred while fetching the participants" : "An error occurred while fetching the participants", + "Could not send invitation to {actorId}" : "Could not send invitation to {actorId}", + "Invitations sent" : "Invitations sent", + "Error occurred when sending invitations" : "Error occurred when sending invitations", + "Failed to join the conversation." : "Failed to join the conversation.", + "An error occurred while creating breakout rooms" : "An error occurred while creating breakout rooms", + "An error occurred while re-ordering the attendees" : "An error occurred while re-ordering the attendees", + "An error occurred while deleting breakout rooms" : "An error occurred while deleting breakout rooms", + "An error occurred while starting breakout rooms" : "An error occurred while starting breakout rooms", + "An error occurred while stopping breakout rooms" : "An error occurred while stopping breakout rooms", + "An error occurred while sending a message to the breakout rooms" : "An error occurred while sending a message to the breakout rooms", + "An error occurred while requesting assistance" : "An error occurred while requesting assistance", + "An error occurred while resetting the request for assistance" : "An error occurred while resetting the request for assistance", + "An error occurred while joining breakout room" : "An error occurred while joining breakout room", + "Failed to rename the thread" : "Failed to rename the thread", + "Error fetching upcoming events" : "Error fetching upcoming events", + "Error fetching upcoming reminders" : "Error fetching upcoming reminders", + "An error occurred while accepting an invitation" : "An error occurred while accepting an invitation", + "An error occurred while rejecting an invitation" : "An error occurred while rejecting an invitation", + "{guest} (guest)" : "{guest} (guest)", + "Poll draft has been saved" : "Poll draft has been saved", + "An error occurred while saving the draft" : "An error occurred while saving the draft", + "An error occurred while submitting your vote" : "An error occurred while submitting your vote", + "An error occurred while ending the poll" : "An error occurred while ending the poll", + "An error occurred while deleting the poll draft" : "An error occurred while deleting the poll draft", + "Poll \"{name}\" was created by {user}. Click to vote" : "Poll \"{name}\" was created by {user}. Click to vote", + "Failed to add reaction" : "Failed to add reaction", + "Failed to remove reaction" : "Failed to remove reaction", + "Error while uploading file \"{fileName}\"" : "Error while uploading file \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Not enough free space to upload file \"{fileName}\"", + "You are not allowed to share files" : "You are not allowed to share files", + "Error while sharing file" : "Error while sharing file", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hours"], + "_%n minute _::_%n minutes_" : ["%n minutes"], + "In {hours} and {minutes}" : "In {hours} and {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minutes"], + "Later today – {timeLocale}" : "Later today – {timeLocale}", + "Tomorrow – {timeLocale}" : "Tomorrow – {timeLocale}", + "This weekend – {timeLocale}" : "This weekend – {timeLocale}", + "Next week – {timeLocale}" : "Next week – {timeLocale}", + "Conversation link copied to clipboard" : "Conversation link copied to clipboard", + "The link could not be copied" : "The link could not be copied", + "Error while parsing a PROPFIND error" : "Error while parsing a PROPFIND error", + "Sending signaling message has failed" : "Sending signaling message has failed", + "Lost connection to signaling server. Trying to reconnect." : "Lost connection to signaling server. Trying to reconnect.", + "Lost connection to signaling server." : "Lost connection to signaling server.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration.", + "Please restart the app." : "Please restart the app.", + "Please reload the page." : "ກະລຸນາໂຫຼດຫນ້າເພດອີກ.", + "Please try to restart the app." : "Please try to restart the app.", + "Please try to reload the page." : "Please try to reload the page.", + "Do not disturb" : "ຫ້າມລົບກວນ", + "Away" : "ອອກໄປ", + "Microphone {number}" : "Microphone {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "You seem to be talking while muted, please unmute yourself for others to hear you", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing", + "Access to microphone & camera is only possible with HTTPS" : "Access to microphone & camera is only possible with HTTPS", + "Please move your setup to HTTPS" : "Please move your setup to HTTPS", + "Access to microphone & camera was denied" : "Access to microphone & camera was denied", + "WebRTC is not supported in your browser" : "WebRTC is not supported in your browser", + "Please use a different browser like Firefox or Chrome" : "Please use a different browser like Firefox or Chrome", + "Error while accessing microphone & camera" : "Error while accessing microphone & camera", + "%s Talk on your mobile devices" : "%s Talk on your mobile devices", + "Join conversations at any time, anywhere, on any device." : "Join conversations at any time, anywhere, on any device.", + "Android app" : "Android app", + "iOS app" : "ແອັບ iOS", + "__language_name__" : "ຂີ້ຕົວະ", + "Webhook Demo" : "Webhook Demo", + "Call summary (%s)" : "Call summary (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "The call summary bot posts an overview message after the call listing all participants and outlining tasks", + "Tasks" : "Tasks", + "Notes" : "Notes", + "Reports" : "Reports", + "Decisions" : "Decisions", + "Agenda" : "Agenda", + "Call summary" : "Call summary", + "Call summary - {title}" : "Call summary - {title}", + "Talk conversation for event" : "Talk conversation for event", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push is installed, this improves the performance of desktop clients.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} is not installed, this might lead to performance issues when using desktop clients.", + "Next meeting" : "Next meeting", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here", + "Join conversations from remote Nextcloud servers" : "Join conversations from remote Nextcloud servers", + "Your default media state has been saved" : "Your default media state has been saved", + "Set reminder for later today" : "Set reminder for later today", + "Set reminder for tomorrow" : "Set reminder for tomorrow", + "Set reminder for this weekend" : "Set reminder for this weekend", + "Set reminder for next week" : "Set reminder for next week", + "Generate summary" : "Generate summary", + "Open poll • You voted already" : "Open poll • You voted already", + "Open poll • Click to vote" : "Open poll • Click to vote", + "Poll • Ended" : "Poll • Ended", + "Talk recording from {time} ({conversation})" : "Talk recording from {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n votes"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n votes"], + "Submit vote" : "Submit vote", + "Your privacy setting has been saved" : "Your privacy setting has been saved", + "Your personal setting has been saved" : "Your personal setting has been saved", + "Failed to save sounds setting" : "Failed to save sounds setting", + "Sounds setting saved" : "Sounds setting saved", + "Always shown if recording consent is required" : "Always shown if recording consent is required", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk was updated, you cannot start or join a call.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed.", + "Nextcloud Talk was updated." : "Nextcloud Talk was updated.", + "Nextcloud is in maintenance mode." : "Nextcloud is in maintenance mode.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation was updated." +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/lt_LT.js b/l10n/lt_LT.js new file mode 100644 index 0000000..58e376f --- /dev/null +++ b/l10n/lt_LT.js @@ -0,0 +1,2162 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "pokalbis", + "(Duration %s)" : "(Trukmė %s)", + "You attended a call with {user1}" : "Jūs dalyvavote skambutyje su {user1}", + "_%n guest_::_%n guests_" : ["%n svečias","%n svečiai","%n svečių","%n svečias"], + "You attended a call with {user1} and {user2}" : "Jūs dalyvavote skambutyje su {user1} ir {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Jūs dalyvavote skambutyje su {user1}, {user2} ir {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Jūs dalyvavote skambutyje su {user1}, {user2}, {user3} ir {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Jūs dalyvavote skambutyje su {user1}, {user2}, {user3}, {user4} ir {user5}", + "_%n other_::_%n others_" : ["dar %n asmuo","dar %n asmenys","dar %n asmenų","dar %n asmuo"], + "{actor} invited you to {call}" : "{actor} pakvietė jus į {call}", + "You were invited to a conversation or had a call" : "Jūs buvote pakviesti į pokalbį arba jums skambino", + "Other activities" : "Kitos veiklos", + "Talk" : "Pokalbiai", + "Guest" : "Svečias", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Sveiki atvykę į Nextcloud Pokalbius!\nŠiame pokalbyje būsite informuojami apie naujas Nextcloud Pokalbiuose prieinamas ypatybes.", + "## New in Talk %s" : "## Nauja Pokalbiuose %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Dabar, dalyvavimui vaizdo ir garso skambučiuose gali būti naudojamos Microsoft Edge ir Safari naršyklės", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Dviejų asmenų pokalbiai dabar išlieka ir jų nebėra galima netyčia paversti grupiniais pokalbiais. Be to, jei vienas iš dalyvių išeina iš pokalbio, pokalbis nebėra automatiškai ištrinamas. Pokalbis iš serverio ištrinamas tik tada, kai abu dalyviai išeina.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Galite siųsti pranešimą visiems dalyviams, pokalbyje parašę \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Naudodami klavišą \"rodyklė aukštyn\" galite iš naujo paskelbti savo paskutinę žinutę", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Nuo šiol, Pokalbiuose gali būti komandos. Siųskite pokalbyje žinutę \"/help\" norėdami pamatyti ar jūsų administratorius yra sukonfigūravęs kokias nors komandas", + "- With projects you can create quick links between conversations, files and other items" : "- Naudodami projektus galite greitai sukurti sąsajas tarp pokalbių, failų bei kitų elementų", + "- You can now mention guests in the chat" : "- Dabar, pokalbiuose galite minėti svečius", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Dabar, pokalbiuose yra laukiamasis. Tai leis moderatoriams prisijungti prie pokalbio ir skambinti, kad paruoštų susitikimą, kol tuo tarpu kiti naudotojai ir svečiai turės laukti", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Dabar, galite tiesiogiai atsakyti į žinutes, suteikdami kitiems vartotojams daugiau konteksto apie ką yra jūsų žinutė", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Dabar, pokalbių ir dalyvių paieška taip pat filtruos ir jūsų esamus pokalbius, todėl bus žymiai lengviau rasti ankstesnius pokalbius", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Nuo šiol, kai turite įdiegtą ratų programėlę, galite pridėti į pokalbius tinkintas vartotojų grupes", + "- Check out the new grid and call view" : "- Susipažinkite su naujuoju tinkleliu ir skambučių peržiūros režimu", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Dabar galite įkelti failus ir juos perkelti tiesiai iš savo įrenginio į pokalbių langą", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Bendrai naudojami failai dabar atidaromi tiesiogiai pokalbių lange naudojant peržiūros programas", + "- You can now search for chats and messages in the unified search in the top bar" : "- Dabar viršutinėje juostoje esančioje bendrojoje paieškoje galite ieškoti pokalbių ir pranešimų", + "- Spice up your messages with emojis from the emoji picker" : "- Praturtinkite savo žinutes šypsenėlėmis iš šypsenėlių parinkiklio", + "- You can now change your camera and microphone while being in a call" : "- Dabar pokalbio metu galite pakeisti kamerą ir mikrofoną", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Pridėkite pokalbiams konteksto, pateikdami aprašymą, ir padarykite juos viešai prieinamus, kad prisijungę vartotojai galėtų juos rasti ir prisijungti", + "- See a read status and send failed messages again" : "- Peržiūrėkite skaitymo būseną ir dar kartą siųskite nepavykusius pranešimus", + "- Raise your hand in a call with the R key" : "- Pakelkite ranką skambučio metu naudodami R klavišą", + "- Join the same conversation and call from multiple devices" : "- Prisijunkite prie to paties pokalbio ir skambinkite iš kelių įrenginių", + "- Send voice messages, share your location or contact details" : "- Siųskite balso pranešimus, bendrinkite savo buvimo vietą arba kontaktinę informaciją", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Pridėkite grupes prie pokalbio ir nauji grupės nariai bus automatiškai pridėti kaip dalyviai", + "- A preview of your audio and video is shown before joining a call" : "- Prieš prisijungiant prie skambučio rodoma jūsų garso ir vaizdo peržiūra", + "- You can now blur your background in the newly designed call view" : "- Dabar naujai sukurtame skambučių rodinyje galite sulieti foną", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoriai dabar gali priskirti bendruosius ir individualius leidimus dalyviams", + "- You can now react to chat messages" : "- Dabar galite reaguoti į pokalbių žinutes", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dabar šoninėje juostoje galite rasti paskutinių bendrintų elementų apžvalgą", + "- Use a poll to collect the opinions of others or settle on a date" : "- Pasinaudokite apklausos funkcija, kad surinktumėte kitų nuomones arba susitartumėte dėl datos", + "- Configure an expiration time for chat messages" : "- Nustatyti pokalbių pranešimų galiojimo laiką", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Pradėkite pokalbius nepranešdami kitiems didelių pokalbių dalyviams. Pradėjus pokalbį, galite išsiųsti individualius pranešimus apie pokalbį.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Siųskite pokalbių pranešimus nepranešdami gavėjams, jei tai nėra skubu", + "- Emojis can now be autocompleted by typing a \":\"" : "- Dabar emodžius galima užbaigti automatiškai, įvedus simbolį „:“", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Susiekite įvairius elementus naudodami naująjį išmanųjį pasirinkiklį, įvesdami simbolį „/“", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoriai dabar gali kurti atskiras diskusijų patalpas (reikalingas didelio našumo serveris)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Dabar galima įrašyti skambučius (reikalingas našus serveris)", + "- Conversations can now have an avatar or emoji as icon" : "- Pokalbių piktogramomis dabar gali būti avatarai arba emodžiai", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Vaizdo skambučių metu dabar galima naudoti ne tik išblukintą foną, bet ir virtualius fonus", + "- Reactions are now available during calls" : "- Dabar skambučių metu galima naudotis reakcijomis", + "- Typing indicators show which users are currently typing a message" : "- Rašymo indikatoriai rodo, kurie vartotojai šiuo metu rašo žinutę", + "- Groups can now be mentioned in chats" : "- Dabar pokalbiuose galima paminėti grupes", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Pokalbių įrašai automatiškai transkribuojami, jei yra užregistruota transkribavimo paslaugų teikėjo programa", + "- Chat messages can be translated if a translation provider app is registered" : "- Pokalbių pranešimus galima išversti, jei yra įdiegta vertimo paslaugų teikėjo programėlė", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** dabar galima naudoti _pokalbių_ pranešimuose", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Dabar botams kurti galima naudoti „Webhooks“. Daugiau informacijos rasite dokumentacijoje: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nustatykite priminimą prie pokalbio žinutės, kad vėliau gautumėte dar vieną pranešimą", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Naudokite pokalbių funkciją „**Pastaba sau**“, kad darytumėte užrašus ir dalytumėtės informacija tarp savo įrenginių", + "- Captions allow to send a message with a file at the same time" : "- Naudojant antraštes galima vienu metu išsiųsti žinutę ir failą", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Dabar dalijantis ekranu matomas pranešėjo vaizdas, o reakcijos į skambutį yra animuotos", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Prisijungę autoriai ir moderatoriai dabar gali redaguoti pranešimus per 6 valandas", + "- Unsent message drafts are now saved in your browser" : "- Neišsiųstų žinučių juodraščiai dabar saugomi jūsų naršyklėje", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Dabar galima bendrauti tekstiniu pokalbiu su kitais „Pokalbiai“ serveriais naudojant federacijos funkciją", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoriai dabar gali užblokuoti paskyras ir svečius, kad šie negalėtų vėl prisijungti prie pokalbio", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "– Pokalbiuose dabar rodomi būsimi skambučiai iš susietų kalendoriaus įvykių ir pavaduojančių asmenų, kurių nėra biure.", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Skambučiai dabar gali būti atliekami federaciniu būdu su kitais „Pokalbių“ serveriais (reikalinga didelio našumo posistemė)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Pristatome Nextcloud „Pokalbiai“ darbalaukio klientą, skirtą „Windows“, „macOS“ ir „Linux“: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Apibendrinkite skambučių įrašus ir neskaitytus pranešimus pokalbiuose naudodami „Nextcloud Asistentas“", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Patobulinti susitikimai: svečių, pakviestų pagal jų el. pašto adresą, importuojami dalyvių sąrašai, apklausų juodraščiai ir atsisiunčiami skambučių dalyvių sąrašai", + "- Archive conversations to stay focused" : "- Archyvuokite pokalbius, kad išliktumėte susikaupę", + "- Schedule a meeting into your calendar from within a conversation" : "- Suplanuokite susitikimą į savo kalendorių iš pokalbio", + "- Search for messages of the current conversation directly in the right sidebar" : "- Ieškokite dabartinio pokalbio pranešimų tiesiai dešinėje šoninėje juostoje", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "– Iš pirmo žvilgsnio peržiūrėkite daugiau pokalbių naudodami naują kompaktišką sąrašą (įjunkite „Pokalbiai“ nustatymuose)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Susitikimų pokalbiai dabar sinchronizuoja pavadinimą ir aprašymą iš kalendoriaus ir yra paslėpti naudojant paieškos filtrą, kol nepriartėja prie pradžios.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Pranešimų nustatymuose pažymėkite pokalbius kaip jautrius, kad paslėptumėte pranešimo turinį pokalbių sąraše ir pranešimuose", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Norėdami gauti tiesioginius pranešimus režimu „Netrukdyti“, pažymėkite pokalbius kaip svarbius", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Įtraukite kitus dalyvius į individualų skambutį, kad iš karto sukurtumėte naują grupinį skambutį", + "- Use threads to keep your chat and discussions organized" : "- Naudokite temas, kad pokalbiai ir diskusijos būtų tvarkingos", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Dabar skambučio metu galima naudotis tiesioginėmis transkripcijomis (reikalinga tiesioginės transkripcijos „ExApp“ ir didelio našumo vidinė sistema).", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatoriai dabar gali prisegti žinutes, kad jos būtų rodomos viršuje", + "- Schedule a message to send it at a later time" : "- Suplanuokite žinutės išsiuntimą vėliau", + "_All %n participant_::_All %n participants_" : ["Visi %n dalyvių","Visi %n dalyviai","Visi %n dalyvių","Visi %n dalyvių"], + "Talk updates ✅" : "Pokalbių programėlės atnaujinimai ✅", + "Reaction deleted by author" : "Autorius ištrynė reakciją", + "{actor} created the conversation" : "{actor} sukūrė pokalbį", + "You created the conversation" : "Jūs sukūrėte pokalbį", + "System created the conversation" : "Sistema sukūrė pokalbį", + "An administrator created the conversation" : "Administratorius sukūrė pokalbį", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} pervadino pokalbį iš \"%1$s\" į \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Jūs pervadinote pokalbį iš \"%1$s\" į \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administratorius pervadino pokalbį iš \"%1$s\" į \"%2$s\"", + "{actor} set the description" : "{actor} nustatė aprašą", + "You set the description" : "Jūs nustatėte aprašą", + "An administrator set the description" : "Administratorius nustatė aprašą", + "{actor} removed the description" : "{actor} pašalino aprašą", + "You removed the description" : "Jūs pašalinote aprašą", + "An administrator removed the description" : "Administratorius pašalino aprašą", + "You started a silent call" : "Jūs pradėjote tylų skambutį", + "Outgoing silent call" : "Išeinantis tylus skambutis", + "{actor} started a silent call" : "{actor} pradėjo tylų skambutį", + "Incoming silent call" : "Įeinantis tylus skambutis", + "You started a call" : "Jūs pradėjote skambutį", + "Outgoing call" : "Išeinantis skambutis", + "{actor} started a call" : "{actor} pradėjo skambutį", + "Incoming call" : "Įeinantis skambutis", + "{actor} joined the call" : "{actor} prisijungė prie skambučio", + "You joined the call" : "Jūs prisijungėte prie skambučio", + "{actor} left the call" : "{actor} išėjo iš skambučio", + "You left the call" : "Jūs išėjote iš skambučio", + "{actor} unlocked the conversation" : "{actor} atrakino pokalbį", + "You unlocked the conversation" : "Jūs atrakinote pokalbį", + "An administrator unlocked the conversation" : "Administratorius atrakino pokalbį", + "{actor} locked the conversation" : "{actor} užrakino pokalbį", + "You locked the conversation" : "Jūs užrakinote pokalbį", + "An administrator locked the conversation" : "Administratorius užrakino pokalbį", + "{actor} limited the conversation to the current participants" : "{actor} apribojo pokalbį iki dabartinių dalyvių", + "You limited the conversation to the current participants" : "Jūs apribojote pokalbį iki dabartinių dalyvių", + "An administrator limited the conversation to the current participants" : "Administratorius apribojo pokalbį iki dabartinių dalyvių", + "{actor} opened the conversation to registered users" : "{actor} atvėrė pokalbį registruotiems naudotojams", + "You opened the conversation to registered users" : "Jūs atvėrėte pokalbį registruotiems naudotojams", + "An administrator opened the conversation to registered users" : "Administratorius atvėrė pokalbį registruotiems naudotojams", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} atidarė pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę", + "You opened the conversation to registered users and users created with the Guests app" : "Atidarėte pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administratorius atidarė pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę.", + "The conversation is now open to everyone" : "Dabar, pokalbis yra atviras visiems", + "{actor} opened the conversation to everyone" : "{actor} atvėrė pokalbį visiems", + "You opened the conversation to everyone" : "Jūs atvėrėte pokalbį visiems", + "{actor} restricted the conversation to moderators" : "{actor} apribojo pokalbį iki moderatorių", + "You restricted the conversation to moderators" : "Jūs apribojote pokalbį iki moderatorių", + "{actor} started breakout rooms" : "{actor} sukūrė grupinio darbo kambarius", + "You started breakout rooms" : "Sukūrėte grupinio darbo kambarius", + "{actor} stopped breakout rooms" : "{actor} sustabdė grupinio darbo kambarius", + "You stopped breakout rooms" : "Jūs sustabdėte grupinio darbo kambarius", + "{actor} allowed guests" : "{actor} leidžia svečius", + "You allowed guests" : "Jūs leidote svečius", + "An administrator allowed guests" : "Administratorius leido svečius", + "{actor} disallowed guests" : "{actor} nebeleidžia svečių", + "You disallowed guests" : "Jūs nebeleidžiate svečių", + "An administrator disallowed guests" : "Administratorius nebeleidžia svečių", + "{actor} set a password" : "{actor} nustatė slaptažodį", + "You set a password" : "Jūs nustatėte slaptažodį", + "An administrator set a password" : "Administratorius nustatė slaptažodį", + "{actor} removed the password" : "{actor} pašalino slaptažodį", + "You removed the password" : "Jūs pašalinote slaptažodį", + "An administrator removed the password" : "Administratorius pašalino slaptažodį", + "{actor} added {user}" : "{actor} pridėjo naudotoją {user}", + "You joined the conversation" : "Jūs prisijungėte prie pokalbio", + "{actor} joined the conversation" : "{actor} prisijungė prie pokalbio", + "You added {user}" : "Jūs pridėjote naudotoją {user}", + "{actor} added you" : "{actor} jus pridėjo", + "An administrator added you" : "Administratorius jus pridėjo", + "An administrator added {user}" : "Administratorius pridėjo vartotoją {user}", + "You left the conversation" : "Jūs išėjote iš pokalbio", + "{actor} left the conversation" : "{actor} išėjo iš pokalbio", + "{actor} removed {user}" : "{actor} pašalino naudotoją {user}", + "You removed {user}" : "Jūs pašalinote naudotoją {user}", + "{actor} removed you" : "{actor} jus pašalino", + "An administrator removed you" : "Administratorius jus pašalino", + "An administrator removed {user}" : "Administratorius pašalino vartotoją {user}", + "{actor} invited {federated_user}" : "{actor} pakvietė {federated_user}", + "You invited {federated_user}" : "Jūs pakvietėte {federated_user}", + "You accepted the invitation" : "Jūs priėmėte pakvietimą", + "{actor} invited you" : "{actor} pakvietė jus", + "An administrator invited you" : "Administratorius jus pakvietė", + "An administrator invited {federated_user}" : "Administratorius pakvietė {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} kvietimą priėmė", + "{actor} removed {federated_user}" : "{actor} pašalino {federated_user}", + "You removed {federated_user}" : "Jūs pašalinote {federated_user}", + "You declined the invitation" : "Jūs atmetėte pakvietimą", + "An administrator removed {federated_user}" : "Administratorius pašalino vartotoją {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} atmetė pakvietimą", + "{actor} added group {group}" : "{actor} pridėjo grupę {group}", + "You added group {group}" : "Jūs pridėjote grupę {group}", + "An administrator added group {group}" : "Administratorius pridėjo grupę {group}", + "{actor} removed group {group}" : "{actor} pašalino grupę {group}", + "You removed group {group}" : "Jūs pašalinote grupę {group}", + "An administrator removed group {group}" : "Administratorius pašalino grupę {group}", + "{actor} added team {circle}" : "{actor} pridėjo komandą {circle}", + "You added team {circle}" : "Jūs pridėjote komandą {circle}", + "An administrator added team {circle}" : "Administratorius pridėjo komandą {circle}", + "{actor} removed team {circle}" : "{actor} pašalino komandą {circle}", + "You removed team {circle}" : "Jūs pašalinote komandą {circle}", + "An administrator removed team {circle}" : "Administratorius pašalino komandą {circle}", + "{actor} added {phone}" : "{actor} pridėjo {phone}", + "You added {phone}" : "Jūs pridėjote {phone}", + "An administrator added {phone}" : "Administratorius pridėjo {phone}", + "{actor} removed {phone}" : "{actor} pašalino {phone}", + "You removed {phone}" : "Jūs pašalinote {phone}", + "An administrator removed {phone}" : "Administratorius pašalino {phone}", + "{actor} promoted {user} to moderator" : "{actor} paaukštino vartotoją {user} į moderatorius", + "You promoted {user} to moderator" : "Jūs paaukštinote vartotoją {user} į moderatorius", + "{actor} promoted you to moderator" : "{actor} paaukštino jus į moderatorius", + "An administrator promoted you to moderator" : "Administratorius paaukštino jus į moderatorius", + "An administrator promoted {user} to moderator" : "Administratorius paaukštino vartotoją {user} į moderatorius", + "{actor} demoted {user} from moderator" : "{actor} pašalino {user} iš moderatoriaus pareigų", + "You demoted {user} from moderator" : "Jūs pašalinote {user} iš moderatorių", + "{actor} demoted you from moderator" : "{actor} pažemino jus iš moderatorių", + "An administrator demoted you from moderator" : "Administratorius pažemino jus iš moderatorių", + "An administrator demoted {user} from moderator" : "Administratorius pažemino vartotoją {user} iš moderatorių", + "{actor} shared a file which is no longer available" : "{actor} pradėjo bendrinti failą, kuris daugiau nebeprieinamas", + "You shared a file which is no longer available" : "Jūs pradėjote bendrinti failą, kuris daugiau nebeprieinamas", + "File shares are currently not supported in federated conversations" : "Failų bendrinimas šiuo metu nepalaikomas sujungtuose pokalbiuose", + "The shared location is malformed" : "Bendrinama vieta yra netinkamai suformuota", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nustatė „Matterbridge“, kad šis pokalbis būtų sinchronizuojamas su kitais pokalbiais", + "You set up Matterbridge to synchronize this conversation with other chats" : "Jūs nustatėte „Matterbridge“, kad šis pokalbis būtų sinchronizuojamas su kitais pokalbiais", + "{actor} created thread {title}" : "{actor} sukūrė temą {title}", + "You created thread {title}" : "Jūs sukūrėte temą {title}", + "{actor} renamed thread {title}" : "{actor} pakeitė temos pavadinimą {title}", + "You renamed thread {title}" : "Jūs pakeitėte temos pavadinimą {title}", + "{actor} updated the Matterbridge configuration" : "{actor} atnaujino „Matterbridge“ konfigūraciją", + "You updated the Matterbridge configuration" : "Jūs atnaujinote „Matterbridge“ konfigūraciją", + "{actor} removed the Matterbridge configuration" : "{actor} pašalino „Matterbridge“ konfigūraciją", + "You removed the Matterbridge configuration" : "Jūs pašalinote „Matterbridge“ konfigūraciją", + "{actor} started Matterbridge" : "{actor} pradėjo „Matterbridge“", + "You started Matterbridge" : "Jūs pradėjote „Matterbridge“.", + "{actor} stopped Matterbridge" : "{actor} sustabdė Matterbridge", + "You stopped Matterbridge" : "Sustabdėte Matterbridge", + "{actor} deleted a message" : "{actor} ištrynė žinutę", + "You deleted a message" : "Jūs ištrynėte žinutę", + "{actor} edited a message" : "{actor} redagavo žinutę", + "You edited a message" : "Jūs redagavote žinutę", + "{actor} pinned a message" : "{actor} prisegė žinutę", + "You pinned a message" : "Jūs prisegėte žnutę", + "{actor} unpinned a message" : "{actor} atsegė žinutę", + "Message was automatically unpinned" : "Žinutė buvo automatiškai atsegta", + "You unpinned a message" : "Atsegėte pranešimą", + "{actor} deleted a reaction" : "{actor} ištrynė reakciją", + "You deleted a reaction" : "Jūs ištrynėte reakciją", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nustatėte pranešimo galiojimo laiką iki %n savaitės","Nustatėte pranešimo galiojimo laiką iki %n savaičių","Nustatėte pranešimo galiojimo laiką iki %n savaičių","Nustatėte pranešimo galiojimo laiką iki %n savaičių"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nustatėte pranešimo galiojimo laiką iki %n dienos","Nustatėte pranešimo galiojimo laiką iki %n dienų","Nustatėte pranešimo galiojimo laiką iki %n dienų","Nustatėte pranešimo galiojimo laiką iki %n dienų"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nustatėte pranešimo galiojimo laiką iki %n valandos","Nustatėte pranešimo galiojimo laiką iki %n valandų","Nustatėte pranešimo galiojimo laiką iki %n valandų","Nustatėte pranešimo galiojimo laiką iki %n valandų"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nustatėte pranešimo galiojimo laiką iki %n minutės","Nustatėte pranešimo galiojimo laiką iki %n minučių","Nustatėte pranešimo galiojimo laiką iki %n minučių","Nustatėte pranešimo galiojimo laiką iki %n minučių"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n savaitės","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n dienos","{actor} nustatė pranešimo galiojimo laiką iki %n dienų","{actor} nustatė pranešimo galiojimo laiką iki %n dienų","{actor} nustatė pranešimo galiojimo laiką iki %n dienų"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}nustatė pranešimo galiojimo laiką iki %n valandos","{actor}nustatė pranešimo galiojimo laiką iki %n valandų","{actor} nustatė pranešimo galiojimo laiką iki %n valandų","{actor} nustatė pranešimo galiojimo laiką iki %n valandų"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n minutės","{actor} nustatė pranešimo galiojimo laiką iki %n minučių","{actor} nustatė pranešimo galiojimo laiką iki %n minučių","{actor} nustatė pranešimo galiojimo laiką iki %n minučių"], + "{actor} disabled message expiration" : "{actor} išjungė pranešimo galiojimo laiką", + "You disabled message expiration" : "Išjungėte pranešimo galiojimo laiką", + "{actor} cleared the history of the conversation" : "{actor} išvalė pokalbio istoriją", + "You cleared the history of the conversation" : "Jūs išvalėte pokalbio istoriją", + "{actor} set the conversation picture" : "{actor} nustatė pokalbio vaizdą", + "You set the conversation picture" : "Jūs nustatėte pokalbio paveikslėlį", + "{actor} removed the conversation picture" : "{actor} pašalino pokalbio nuotrauką", + "You removed the conversation picture" : "Pašalinote pokalbio paveiksėlį", + "{actor} ended the poll {poll}" : "{actor} baigė apklausą {poll}", + "You ended the poll {poll}" : "Jūs baigėte apklausą {poll}", + "{actor} started the video recording" : "{actor} pradėjo vaizdo įrašymą ", + "You started the video recording" : "Pradėjote vaizdo įrašymą", + "{actor} stopped the video recording" : "{actor} sustabdė vaizdo įrašymą", + "You stopped the video recording" : "Jūs sustabdėte vaizdo įrašymą", + "{actor} started the audio recording" : "{actor} pradėjo garso įrašymą", + "You started the audio recording" : "Pradėjote garso įrašymą", + "{actor} stopped the audio recording" : "{actor} sustabdė garso įrašymą", + "You stopped the audio recording" : "Sustabdėte garso įrašymą", + "The recording failed" : "Įrašyti nepavyko", + "Someone voted on the poll {poll}" : "Kažkas balsavo apklausoje {poll}", + "Message deleted by author" : "Autorius ištrynė žinutę", + "Message deleted by {actor}" : "{actor} ištrynė žinutę", + "Message deleted by you" : "Jūs ištrynėte žinutę", + "Deleted user" : "Ištrintas naudotojas", + "Unknown number" : "Nežinomas numeris", + "Administration" : "Administravimas", + "System" : "Sistema", + "%s (guest)" : "%s (svečias)", + "Missed call" : "Praleistas skambutis", + "Unanswered call" : "Neatsakytas skambutis", + "Call ended (Duration {duration})" : "Skambutis baigtas (Trukmė {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis buvo užbaigtas, nes jis pasiekė didžiausią skambučio trukmę (Trukmė {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} užbaigė skambutį (Trukmė {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Skambutis su %n svečiu buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %nsvečiais buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %n svečių buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %n svečių buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Skambutis su %n svečiu buvo baigtas (trukmė {duration})","Skambutis su %n svečiais buvo baigtas (trukmė {duration})","Skambutis su %n svečių buvo baigtas (trukmė {duration})","Skambutis su %n svečių buvo baigtas (trukmė {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} baigė skambutį su %n svečiu (trukmė {duration})","{actor} baigė skambutį su %n svečiais (trukmė {duration})","{actor} baigė skambutį su %n svečių (trukmė {duration})","{actor} baigė skambutį su %n svečių (trukmė {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1} ended (Duration {duration})" : "Skambutis su {user1} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} baigė skambutį su {user1} (trukmė {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1} ir {user2} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Skambutis su {user1} ir {user2} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} baigė skambutį su {user1} ir {user2} (trukmė {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2} ir {user3} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Skambutis su {user1}, {user2} ir {user3} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} baigė skambutų su {user1}, {user2} ir {user3} (trukmė {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3} ir {user4} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3} ir {user4} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} baigė skambutį su {user1}, {user2}, {user3} ir {user4} (trukmė {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3}, {user4} ir {user5} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3}, {user4} ir {user5} buvo baigtas (trukmė {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} baigė kambutį su {user1}, {user2}, {user3}, {user4} ir {user5} (trukmė {duration})", + "Message of {user} in {conversation}" : "Žinutė iš {user}, {conversation} pokalbyje", + "Message of {user}" : "Žinutė iš {user}", + "Message of a deleted user in {conversation}" : "Ištrinto vartotojo žinutė {conversation} pokalbyje", + "Talk conversations" : "„Pokalbių“ pokalbiai", + "Talk to %s" : "Kalbėti su %s", + "An error occurred. Please contact your administrator." : "Įvyko klaida. Susisiekite su administratoriumi.", + "App disabled" : "Programėlė išjungta", + "Conversation subfolders are disabled" : "Pokalbių pakatalogiai yra išjungti", + "Storage quota exceeded" : "Viršyta saugyklos kvota", + "Could not prepare conversation folder" : "Nepavyko paruošti pokalbių aplanko", + "File not found" : "Failas nerastas", + "Path must point to a file" : "Kelias turi nurodyti failą", + "File is not inside the conversation draft folder for this room" : "Failas nėra šio pokalbių kambario pokalbių juodraščių aplanke", + "File is not shared, or shared but not with the user" : "Failas nėra bendrinamas arba yra bendrinamas, tačiau ne su vartotoju", + "No account available to delete." : "Nėra ištrynimui prieinamos paskyros.", + "Poll" : "Apklausa", + "Password needs to be set" : "Turi būti nustatytas slaptažodis", + "Uploading the file failed" : "Nepavyko įkelti failo", + "No image file provided" : "Paveikslėlio failas nepateiktas", + "File is too big" : "Failas yra per didelis", + "Invalid file provided" : "Pateiktas neteisingas failas", + "Invalid image" : "Netinkamas paveikslas", + "Unknown filetype" : "Nežinomas failo tipas", + "Talk mentions" : "Paminėjimai pokalbiuose", + "More conversations" : "Daugiau pokalbių", + "Say hi to your friends and colleagues!" : "Pasisveikinkite su savo draugais ir kolegomis!", + "No unread mentions" : "Nėra neskaitytų paminėjimų", + "Call in progress" : "Skambutis vyksta", + "You were mentioned" : "Jūs buvote paminėti", + "Write to conversation" : "Rašyti į pokalbį", + "Writes event information into a conversation of your choice" : "Parašo apie įvykio informaciją į jūsų pasirinktą pokalbį", + "Missing email field in header line" : "Antraštės eilutėje trūksta lauko „El. paštas“", + "Following lines are invalid: %s" : "Šios eilutės yra neteisingos: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s pakvietė jus į pokalbį „%2$s“.", + "You were invited to conversation \"%s\"." : "Buvote pakviestas į pokalbį „%s“.", + "Conversation invitation" : "Pakvietimas į pokalbį", + "Scheduled time" : "Numatytas laikas", + "Description" : "Aprašas", + "You can also dial-in via phone with the following details" : "Taip pat galite prisijungti telefonu, naudodami šiuos duomenis", + "Dial-in information" : "Skambinimo informacija", + "Meeting ID" : "Susitikimo ID", + "Your PIN" : "Jūsų PIN kodas", + "Click the button below to join the lobby now." : "Norėdami prisijungti prie laukiamojo dabar, spustelėkite žemiau esantį mygtuką.", + "Click the link below to join the lobby now." : "Norėdami prisijungti prie laukiamojo dabar, spustelėkite žemiau esančią nuorodą.", + "Join lobby for \"%s\"" : "Prisijunkite prie laukiamojo, skirto „%s“", + "Click the button below to join the conversation now." : "Norėdami prisijungti prie pokalbio dabar, spustelėkite žemiau esantį mygtuką.", + "Click the link below to join the conversation now." : "Norėdami prisijungti prie pokalbio dabar, spustelėkite žemiau esančią nuorodą.", + "Join \"%s\"" : "Prisijungti „%s“", + "Meeting" : "Susitikimas", + "Password request: %s" : "Slaptažodžio prašymas: %s", + "Private conversation" : "Privatus pokalbis", + "Deleted user (%s)" : "Ištrintas naudotojas (%s)", + "Failed to upload call recording" : "Nepavyko įkelti skambučio įrašo", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Įrašymo serveriui nepavyko įkelti {call} skambučio įrašo. Susisiekite su administracija.", + "Share to chat" : "Bendrinkite, kad galėtumėte kalbėtis", + "Dismiss notification" : "Atmesti pranešimą", + "Call recording now available" : "Dabar galimas skambučių įrašymas", + "The recording for the call in {call} was uploaded to {file}." : "Skambučio {call} įrašas buvo įkeltas į {file}.", + "Transcript now available" : "Nuorašas dabar prieinamas", + "The transcript for the call in {call} was uploaded to {file}." : "Skambučio {call} transkripcija buvo įkelta į {file}.", + "Failed to transcript call recording" : "Nepavyko transkribuoti skambučio įrašo", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveriui nepavyko transkribuoti įrašo, esančio {file}, susijusio su skambučiu {call}. Prašome kreiptis į administraciją.", + "Call summary now available" : "Dabar pasiekiama skambučių suvestinė", + "The summary for the call in {call} was uploaded to {file}." : "{call} skambučio santrauka buvo įkelta į {file}.", + "Failed to summarize call recording" : "Nepavyko apibendrinti skambučio įrašo", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveriui nepavyko apibendrinti įrašo {file}, susijusio su skambučiu {call}. Kreipkitės į administraciją.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} pakvietė jus prisijungti į {roomName} esančiame {remoteServer}", + "Accept" : "Priimti", + "Decline" : "Atmesti", + "{user1} invited you to a federated conversation" : "{user1} pakvietė jus į federacinį pokalbį", + "Someone reacted" : "Kažkas sureagavo", + "New message" : "Nauja žinutė", + "Reminder" : "Priminimas", + "Someone mentioned you" : "Kažkas jus paminėjo", + "Notification" : "Pranešimas", + "Someone reacted in a private conversation" : "Kažkas sureagavo privačiame pokalbyje", + "You received a message in a private conversation" : "Gavote žinutę asmeniniame pokalbyje", + "Reminder in a private conversation" : "Priminimas privačiame pokalbyje", + "Someone mentioned you in a private conversation" : "Kažkas jus paminėjo privačiame pokalbyje", + "Notification in a private conversation" : "Pranešimas privačiame pokalbyje", + "Reminder: You in {call}" : "Priminimas: Jūs esate {call}", + "Reminder: {user} in {call}" : "Priminimas: {user} yra {call}", + "Reminder: Deleted user in {call}" : "Priminimas: pašalintas vartotojas iš {call}", + "Reminder: {guest} (guest) in {call}" : "Priminimas: {guest} (svečias) yra {call}", + "Reminder: Guest in {call}" : "Priminimas: svečias {call}", + "{user} reacted with {reaction}" : "{user} sureagavo {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} sureagavo {reaction} pokalbyje {call}", + "Deleted user reacted with {reaction} in {call}" : "Ištrintas naudotojas sureagavo {reaction} pokalbyje {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (svečias) sureagavo {reaction} pokalbyje {call}", + "Guest reacted with {reaction} in {call}" : "Svečias sureagavo {reaction} pokalbyje {call}", + "{user} in {call}" : "{user} lentelėje {call}", + "Deleted user in {call}" : "Ištrintas vartotojas iš {call}", + "{guest} (guest) in {call}" : "{guest} (svečias) {call}", + "Guest in {call}" : "Svečias {call}", + "{user} sent you a private message" : "{user} išsiuntė jums privačią žinutę", + "{user} sent a message in conversation {call}" : "{user} išsiuntė žinutę pokalbyje {call}", + "A deleted user sent a message in conversation {call}" : "Ištrintas vartotojas išsiuntė žinutę pokalbyje {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (svečias) išsiuntė žinutę pokalbyje {call}", + "A guest sent a message in conversation {call}" : "Svečias išsiuntė žinutę pokalbyje {call}", + "{user} replied to your private message" : "{user} atsakė į jūsų privačią žinutę", + "{user} replied to your message in conversation {call}" : "{user} atsakė į jūsų žinutę pokalbyje {call}", + "A deleted user replied to your message in conversation {call}" : "Ištrintas vartotojas atsakė į jūsų žinutę pokalbyje {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (svečias) atsakė į jūsų žinutę pokalbyje {call}", + "A guest replied to your message in conversation {call}" : "Svečias atsakė į jūsų žinutę pokalbyje {call}", + "Reminder: You in private conversation {call}" : "Priminimas: Jūs dalyvaujate privačiame pokalbyje {call}", + "Reminder: A deleted user in private conversation {call}" : "Priminimas: ištrintas vartotojas privačiame pokalbyje{call}", + "Reminder: {user} in private conversation" : "Priminimas: {user} privačiame pokalbyje", + "Reminder: You in conversation {call}" : "Priminimas: Jūs dalyvaujate pokalbyje {call}", + "Reminder: {user} in conversation {call}" : "Priminimas: {user} pokalbyje {call}", + "Reminder: A deleted user in conversation {call}" : "Priminimas: ištrintas vartotojas pokalbyje{call}", + "Reminder: {guest} (guest) in conversation {call}" : "Priminimas: {guest} (svečias) pokalbyje {call}", + "Reminder: A guest in conversation {call}" : "Priminimas: svečias pokalbyje {call}", + "{user} reacted with {reaction} to your private message" : "{user} sureagavo {reaction} į jūsų privačią žinutę", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ištrintas vartotojas sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (svečias) sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "A guest reacted with {reaction} to your message in conversation {call}" : "Svečias sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "{user} mentioned you in a private conversation" : "{user} paminėjo jus privačiame pokalbyje", + "{user} mentioned group {group} in conversation {call}" : "{user} paminėjo {group} grupę {call} pokalbyje", + "{user} mentioned team {team} in conversation {call}" : "{user} paminėjo {team} komandą {call} pokalbyje", + "{user} mentioned everyone in conversation {call}" : "{user} paminėjo visus {call} pokalbyje", + "{user} mentioned you in conversation {call}" : "{user} paminėjo jus pokalbyje {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ištrintas vartotojas paminėjo {group} grupę {call} pokalbyje", + "A deleted user mentioned team {team} in conversation {call}" : "Ištrintas vartotojas {team} komandą {call} pokalbyje", + "A deleted user mentioned everyone in conversation {call}" : "Ištrintas vartotojas paminėjo kiekvieną {call} pokalbyje", + "A deleted user mentioned you in conversation {call}" : "Ištrintas vartotojas paminėjo jus {call} pokalbyje", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (svečias) paminėjo {group} grupę {call} pokalbyje", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (svečias) paminėjo {team} komandą {call} pokalbyje", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (svečias) paminėjo kiekvieną {call} pokalbyje", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (svečias) paminėjo jus pokalbyje {call}", + "A guest mentioned group {group} in conversation {call}" : "Svečias paminėjo {group} grupę {call} pokalbyje", + "A guest mentioned team {team} in conversation {call}" : "Svečias paminėjo {team} komandą {call} pokalbyje", + "A guest mentioned everyone in conversation {call}" : "Svečias paminėjo kiekvieną {call} pokalbyje", + "A guest mentioned you in conversation {call}" : "Svečias paminėjo jus pokalbyje {call}", + "View message" : "Rodyti žinutę", + "Dismiss reminder" : "Atmesti priminimą", + "View chat" : "Rodyti pokalbį", + "{user} invited you to a group conversation: {call}" : "{user} jus pakvietė į grupės pokalbį: {call}", + "Join call" : "Prisijungti prie skambučio", + "Answer call" : "Atsiliepti", + "{user} would like to talk with you" : "{user} norėtų su jumis pakalbėti", + "Call back" : "Atskambinti", + "You missed a call from {user}" : "Jūs praleidote skambutį nuo {user}", + "Accept call" : "Priimti skambutį", + "Incoming phone call from {call}" : "Įeinantis telefono skambutis iš {call}", + "You missed a phone call from {call}" : "Jūs praleidote grupės skambutį iš {call}", + "A group call has started in {call}" : "Grupės skambutis prasidėjo ties {call}", + "You missed a group call in {call}" : "Jūs praleidote grupės skambutį ties {call}", + "{email} is requesting the password to access {file}" : "{email} prašo slaptažodžio, kad gautų prieigą prie {file}", + "{email} tried to request the password to access {file}" : "{email} bandė paprašyti slaptažodžio, kad gautų prieigą prie {file}", + "Someone is requesting the password to access {file}" : "Kažkas prašo slaptažodžio, kad gautų prieigą prie {file}", + "Someone tried to request the password to access {file}" : "Kažkas bandė paprašyti slaptažodžio, kad gautų prieigą prie {file}", + "Open settings" : "Atverti nustatymus", + "Hosted signaling server added" : "Signalinio ryšio serveris pridėtas", + "The hosted signaling server is now configured and will be used." : "Signalinio ryšio serveris dabar sukonfigūruotas ir bus naudojamas.", + "Hosted signaling server removed" : "Signalinio ryšio serveris pašalintas", + "The hosted signaling server was removed and will not be used anymore." : "Signalinio ryšio serveris buvo pašalintas ir daugiau nebus naudojamas.", + "Hosted signaling server changed" : "Signalinio ryšio serveris pakeistas", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Signalinio ryšio serverio paskyros būsena pasikeitė iš „{oldstatus}“ į „{newstatus}“.", + "pending" : "laukiama", + "active" : "aktyvus", + "expired" : "pasibaigęs", + "blocked" : "užblokuotas", + "error" : "klaida", + "The certificate of {host} expires in {days} days" : "Sertifikato {host} galiojimo laikas baigiasi po {days} dienų", + "The certificate of {host} expired" : "{host} sertifikatas nebegalioja", + "Contact via Talk" : "Susisiekti per „Pokalbius“", + "Open Talk" : "Atverti pokalbius", + "Default" : "Numatytoji", + "Send messages, create threads, and start voice and video calls." : "Siųskite žinutes, kurkite diskusijas ir pradėkite balso bei vaizdo skambučius.", + "Presentation" : "Pateiktis", + "Voice room" : "Bendravimo kambarys", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Prisijunkite prie pokalbio tiesiogiai – tai puikus sprendimas, jei norite pasikalbėti ar surengti spontanišką susitikimą.", + "Webinar" : "Internetinis seminaras", + "Conversations" : "Pokalbiai", + "Messages in current conversation" : "Žinutės dabartiniame pokalbyje", + "{user}" : "{user}", + "Messages" : "Žinutės", + "{user} in {conversation}" : "{user} lentelėje {conversation}", + "Messages in other conversations" : "Žinutės kituose pokalbiuose", + "One-to-one rooms always need to show the other users avatar" : "Dviejų asmenų pokalbių kambariuose visada turi būti rodomas kito vartotojo avataras", + "Invalid emoji character" : "Neteisingas emodži simbolis", + "Invalid background color" : "Neteisinga fono spalva", + "Avatar image is not square" : "Avataro paveikslas nėra kvadratinis", + "Room {number}" : "Kambarys {number}", + "Other" : "Kita", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepavyko pateikti prašymo dėl bandomosios versijos, nes nepavyko prisijungti prie bandomosios versijos serverio. Prašome pabandyti vėliau.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kilo problemų su šio serverio autentiškumo patvirtinimu. Galbūt iš išorės neįmanoma prisijungti prie jo, kad būtų galima patikrinti jo URL adresą.", + "Something unexpected happened." : "Nutiko kažkas netikėto.", + "The URL is invalid." : "URL yra neteisingas.", + "An HTTPS URL is required." : "Reikalingas HTTPS URL.", + "The email address is invalid." : "El. pašto adresas yra neteisingas.", + "The language is invalid." : "Neteisinga kalba.", + "The country is invalid." : "Neteisinga šalis.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Kilo problema su bandomuoju užklausimu. Daugiau informacijos rasite savo žurnaluose.", + "Too many requests are send from your servers address. Please try again later." : "Iš jūsų serverio adreso siunčiama per daug užklausų. Prašome pabandyti vėliau.", + "There is already a trial registered for this Nextcloud instance." : "Šiam „Nextcloud“ elementui jau užregistruota bandomoji versija.", + "Something unexpected happened. Please try again later." : "Nutiko kažkas netikėto. Vėliau bandykite dar kartą.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepavyko užsisakyti bandomosios versijos, nes bandomųjų versijų serveris veikė netinkamai. Prašome pabandyti vėliau.", + "Trial requested but failed to get account information. Please check back later." : "Buvo pateiktas prašymas išbandyti paslaugą, tačiau nepavyko gauti paskyros duomenų. Prašome pabandyti vėliau.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Kilo problemų su šio užklausos autentiškumo patvirtinimu. Galbūt iš išorės neįmanoma pasiekti šio URL adreso, kad būtų galima jį patikrinti.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepavyko gauti paskyros informacijos, nes bandomojo serverio veikimas buvo netinkamas. Prašome pabandyti vėliau.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kilo problemų gaunant paskyros informaciją. Daugiau informacijos rasite savo žurnaluose.", + "There is no such account registered." : "Nėra tokios registruotos paskyros.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepavyko gauti paskyros informacijos, nes bandomojo serverio pasiekti neįmanoma. Prašome pabandyti vėliau.", + "Deleting the hosted signaling server account failed. Please check back later." : "Nepavyko ištrinti signalinio ryšio serverio paskyros. Patikrinkite vėliau.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nepavyko ištrinti paskyros, nes bandomasis serveris veikė netinkamai. Prašome pabandyti vėliau.", + "There is a problem with deleting the account. Please check your logs for further information." : "Kyla problemų ištrinant paskyrą. Daugiau informacijos rasite savo žurnaluose.", + "Too many requests are sent from your servers address. Please try again later." : "Iš jūsų serverio adreso siunčiama per daug užklausų. Prašome pabandyti vėliau.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nepavyko ištrinti paskyros, nes negalima prisijungti prie bandomojo serverio. Prašome pabandyti vėliau.", + "Note to self" : "Pastaba sau", + "A place for your private notes, thoughts and ideas" : "Vieta jūsų asmeninėms užrašams, mintims ir idėjoms", + "Transcript is AI generated and may contain mistakes" : "Transkripcija sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Summary is AI generated and may contain mistakes" : "Santrauka sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Let's get started!" : "Pradėkime!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Pokalbiai** – tai saugi, savarankiškai diegiama komunikacijos platforma, kuri sklandžiai integruojasi į „Nextcloud“ ekosistemą.\n\n#### Pagrindinės „Nextcloud Pokalbiai“ funkcijos:\n\n* Pokalbiai ir žinutės privačiuose bei grupiniuose pokalbiuose\n* Balso ir vaizdo skambučiai\n* Failų dalijimasis ir integracija su kitomis „Nextcloud“ programėlėmis\n* Konfigūruojami pokalbių nustatymai, moderavimas ir privatumo valdymas\n* Prieiga per internetą, kompiuterį ir mobiliuosius įrenginius (iOS ir Android)\n* Privati ir saugi komunikacija\n\nDaugiau informacijos rasite [vartotojo dokumentacijoje](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "„Nextcloud Pokalbiai“ yra privati ​​ir galinga pranešimų siuntimo programėlė, integruojama su „Nextcloud“. Kalbėkitės privačiuose arba grupiniuose pokalbiuose, bendradarbiaukite balso ir vaizdo skambučiais, organizuokite internetinius seminarus ir renginius, tinkinkite pokalbius ir dar daugiau.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Tekstų formatavimas, kad pranešimai būtų išsamesni\n\n„Nextcloud Pokalbiuose“ galite naudoti „Markdown“ sintaksę, kad suformatuotumėte savo pranešimus. Pavyzdžiui, galite taikyti **paryškinimą** ar *kursyvą*, arba `pažymėti tekstą kaip kodą`. Galite net kurti lenteles ir įterpti antraštes į tekstą.\n\nReikia ištaisyti rašybos klaidą ar pakeisti formatavimą? Redaguokite pranešimą, spustelėdami „Redaguoti pranešimą“ pranešimo meniu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Pridėti priedus ir nuorodas\n\nNaudodami mygtuką „+“ pridėkite failus iš savo „Nextcloud Hub“. Dalinkitės elementais iš skilties „Failai“ ir įvairių „Nextcloud“ programėlių. Kai kurios programėlės, pavyzdžiui, „Tekstas“, netgi palaiko interaktyvius valdiklius.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Leiskite pokalbiams vykti sklandžiai: paminėkite vartotojus, reaguokite į pranešimus ir dar daugiau\n\nGalite paminėti visus pokalbio dalyvius naudodami %s arba paminėti konkrečius dalyvius įvedę simbolį „@“ ir pasirinkę jų vardą iš sąrašo.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Galite atsakyti į žinutes, persiųsti jas į kitus pokalbius ar kitiems žmonėms arba nukopijuoti žinutės turinį.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Išnaudokite visas „Smart Picker“ galimybes\n\nTiesiog įveskite „/“ arba pereikite į meniu „+“, kad atidarytumėte „Smart Picker“ – čia galėsite prie savo pranešimų pridėti įvairų turinį. Galite nustatyti „Smart Picker“, kad galėtumėte pridėti elementus iš „Nextcloud“ programėlių, GIF failus, vietoves žemėlapyje, dirbtinio intelekto sukurtą turinį ir dar daugiau.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Pokalbių nustatymų tvarkymas\n\nPokalbių meniu galite pasiekti įvairius nustatymus, skirtus pokalbiams tvarkyti, pavyzdžiui:\n* Redaguoti pokalbio informaciją\n* Tvarkyti pranešimus\n* Taikyti įvairias moderavimo taisykles\n* Konfigūruoti prieigą ir saugumą\n* Įjungti botus\n* ir dar daugiau!", + "Andorra" : "Andora", + "United Arab Emirates" : "Jungtiniai Arabų Emyratai", + "Afghanistan" : "Afganistanas", + "Antigua and Barbuda" : "Antigva ir Barbuda", + "Anguilla" : "Angilija", + "Albania" : "Albanija", + "Armenia" : "Armėnija", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Amerikos Samoa", + "Austria" : "Austrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandų salos", + "Azerbaijan" : "Azerbaidžanas", + "Bosnia and Herzegovina" : "Bosnija ir Hercegovina", + "Barbados" : "Barbadosas", + "Bangladesh" : "Bangladešas", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Fasas", + "Bulgaria" : "Bulgarija", + "Bahrain" : "Bahreinas", + "Burundi" : "Burundis", + "Benin" : "Beninas", + "Saint Barthélemy" : "Sen Bartelemi", + "Bermuda" : "Bermudai", + "Brunei Darussalam" : "Brunėjaus Darusalamas", + "Bolivia, Plurinational State of" : "Bolivija (Daugiatautė Valstybė)", + "Bonaire, Sint Eustatius and Saba" : "Bonèras, Sìnt Eustãtijus ir Sabà", + "Brazil" : "Brazilija", + "Bahamas" : "Bahamos", + "Bhutan" : "Butanas", + "Bouvet Island" : "Buvė sala", + "Botswana" : "Botsvana", + "Belarus" : "Baltarusija", + "Belize" : "Belizas", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : " Kokosų (Kilingo) Salos", + "Congo, the Democratic Republic of the" : "Kongas (Demokratinė Respublika)", + "Central African Republic" : "Centrinės Afrikos Respublika", + "Congo" : "Kongas", + "Switzerland" : "Šveicarija", + "Côte d'Ivoire" : "Dramblio Kaulo Krantas", + "Cook Islands" : "Kuko salos", + "Chile" : "Čilė", + "Cameroon" : "Kamerūnas", + "China" : "Kinija", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kosta Rika", + "Cuba" : "Kuba", + "Cabo Verde" : "Žaliasis Kyšulys", + "Curaçao" : "Kiurasao", + "Christmas Island" : "Kalėdų sala", + "Cyprus" : "Kipras", + "Czechia" : "Čekija", + "Germany" : "Vokietija", + "Djibouti" : "Džibutis", + "Denmark" : "Danija", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikos Respublika", + "Algeria" : "Alžyras", + "Ecuador" : "Ekvadoras", + "Estonia" : "Estija", + "Egypt" : "Egiptas", + "Western Sahara" : "Vakarų Sachara", + "Eritrea" : "Eritrėja", + "Spain" : "Ispanija", + "Ethiopia" : "Etiopija", + "Finland" : "Suomija", + "Fiji" : "Fidžis", + "Falkland Islands (Malvinas)" : "Folklando (Malvinų) salos", + "Micronesia, Federated States of" : "Mikronezija (Federacinės Valstijos)", + "Faroe Islands" : "Farerų salos", + "France" : "Prancūzija", + "Gabon" : "Gabonas", + "United Kingdom of Great Britain and Northern Ireland" : "Didžiosios Britanijos ir Šiaurės Airijos Jungtinė Karalystė", + "Grenada" : "Grenada", + "Georgia" : "Gruzija-Sakartvelas", + "French Guiana" : "Prancūzijos Gviana", + "Guernsey" : "Gernsis", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltaras", + "Greenland" : "Grenlandija", + "Gambia" : "Gambija", + "Guinea" : "Gvinėja", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Pusiaujo Gvinėja", + "Greece" : "Graikija", + "South Georgia and the South Sandwich Islands" : "Pietų Džordžija ir Pietų Sandvičo Salos", + "Guatemala" : "Gvatemala", + "Guam" : "Guamas", + "Guinea-Bissau" : "Bisau Gvinėja", + "Guyana" : "Gajana", + "Hong Kong" : "Honkongas", + "Heard Island and McDonald Islands" : "Herdo ir Makdonaldo Salos", + "Honduras" : "Hondūras", + "Croatia" : "Kroatija", + "Haiti" : "Haitis", + "Hungary" : "Vengrija", + "Indonesia" : "Indonezija", + "Ireland" : "Airija", + "Israel" : "Izraelis", + "Isle of Man" : "Meno Sala", + "India" : "Indija", + "British Indian Ocean Territory" : "Indijos Vandenyno Britų Sritis", + "Iraq" : "Irakas", + "Iran, Islamic Republic of" : "Iranas (Islamo Respublika)", + "Iceland" : "Islandija", + "Italy" : "Italija", + "Jersey" : "Džersis", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanija", + "Japan" : "Japonija", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizija", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribatis", + "Comoros" : "Komorai", + "Saint Kitts and Nevis" : "Sent Kitsas ir Nevis", + "Korea, Democratic People's Republic of" : "Korėja (Liaudies Demokratinė Respublika)", + "Korea, Republic of" : "Korėja (Respublika)", + "Kuwait" : "Kuveitas", + "Cayman Islands" : " Kaimanų Salos", + "Kazakhstan" : "Kazachstanas", + "Lao People's Democratic Republic" : "Laoso Liaudies Demokratinė Respublika", + "Lebanon" : "Libanas", + "Saint Lucia" : "Sent Lusija", + "Liechtenstein" : "Lichtenšteinas", + "Sri Lanka" : "Šri Lanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesotas", + "Lithuania" : "Lietuva", + "Luxembourg" : "Liuksemburgas", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Marokas", + "Monaco" : "Monakas", + "Moldova, Republic of" : "Moldova (Respublika)", + "Montenegro" : "Juodkalnija", + "Saint Martin (French part)" : "Sen Martenas (prancūzų dalis)", + "Madagascar" : "Madagaskaras", + "Marshall Islands" : "Maršalo salos", + "North Macedonia" : "Šiaurės Makedonija", + "Mali" : "Malis", + "Myanmar" : "Mianmaras", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Marianos Šiaurinės Salos", + "Martinique" : "Martinika", + "Mauritania" : "Mauritanija", + "Montserrat" : "Montseratas", + "Malta" : "Malta", + "Mauritius" : "Mauricijus", + "Maldives" : "Maldyvai", + "Malawi" : "Malavis", + "Mexico" : "Meksika", + "Malaysia" : "Malaizija", + "Mozambique" : "Mozambikas", + "Namibia" : "Namibija", + "New Caledonia" : "Naujoji Kaledonija", + "Niger" : "Nigeris", + "Norfolk Island" : "Norfolko Sala", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nyderlandai", + "Norway" : "Norvegija", + "Nepal" : "Nepalas", + "Nauru" : "Nauru", + "Niue" : "Niujė", + "New Zealand" : "Naujoji Zelandija", + "Oman" : "Omanas", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Prancūzijos Polinezija", + "Papua New Guinea" : "Papua Naujoji Gvinėja", + "Philippines" : "Filipinai", + "Pakistan" : "Pakistanas", + "Poland" : "Lenkija", + "Saint Pierre and Miquelon" : "Sen Pjeras ir Mikelonas", + "Pitcairn" : "Pitkerno salos", + "Puerto Rico" : "Puerto Rikas", + "Palestine, State of" : "Palestinos Valstybė", + "Portugal" : "Portugalija", + "Palau" : "Palau", + "Paraguay" : "Paragvajus", + "Qatar" : "Kataras", + "Réunion" : "Reunjonas", + "Romania" : "Rumunija", + "Serbia" : "Serbija", + "Russian Federation" : "Rusijos Federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudo Arabija", + "Solomon Islands" : "Saliamono salos", + "Seychelles" : "Seišelių salos", + "Sudan" : "Sudanas", + "Sweden" : "Švedija", + "Singapore" : "Singapūras", + "Saint Helena, Ascension and Tristan da Cunha" : "Šventosios Elenos, Dangun Žengimo ir Tristanas da Kunja salos", + "Slovenia" : "Slovėnija", + "Svalbard and Jan Mayen" : " Svalbard ir Jan Majen salos", + "Slovakia" : "Slovakija", + "Sierra Leone" : "Siera Leonė", + "San Marino" : "San Marinas", + "Senegal" : "Senegalas", + "Somalia" : "Somalis", + "Suriname" : "Surinamas", + "South Sudan" : "Pietų Sudanas", + "Sao Tome and Principe" : "San Tomė ir Prinsipė", + "El Salvador" : "Salvadoras", + "Sint Maarten (Dutch part)" : "Sint Maartenas (nyderlandų dalis)", + "Syrian Arab Republic" : "Sirijos Arabų Respublika", + "Eswatini" : "Esvatinis", + "Turks and Caicos Islands" : "Terkso ir Kaikoso salos", + "Chad" : "Čadas", + "French Southern Territories" : "Prancūzijos Pietų teritorijos", + "Togo" : "Togas", + "Thailand" : "Tailandas", + "Tajikistan" : "Tadžikistanas", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Rytų Timoras", + "Turkmenistan" : "Turkmėnistanas", + "Tunisia" : "Tunisas", + "Tonga" : "Tongas", + "Turkey" : "Turkija", + "Trinidad and Tobago" : "Trinidadas ir Tobagas", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taivanas, Kinijos provincija", + "Tanzania, United Republic of" : "Tanzanijos Jungtinė Respublika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Jungtinių Valstijų nuošalios mažosios salos", + "United States of America" : "Jungtinės Amerikos Valstijos", + "Uruguay" : "Urugvajus", + "Uzbekistan" : "Uzbekistanas", + "Holy See" : "Šventasis Sostas", + "Saint Vincent and the Grenadines" : "Sent Vinsentas ir Grenadinai", + "Venezuela, Bolivarian Republic of" : "Venesuela, Bolivaro Respublika", + "Virgin Islands, British" : "Mergelių Salos (Britų)", + "Virgin Islands, U.S." : "Mergelių Salos (JAV)", + "Viet Nam" : "Vietnamas", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Volisas ir Futūna", + "Samoa" : "Samoa", + "Yemen" : "Jemenas", + "Mayotte" : "Majotas", + "South Africa" : "Pietų Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabvė", + "Background blur" : "Fono suliejimas", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepavyko patikrinti, ar palaikomas WASM failų įkėlimas. Prašome rankiniu būdu patikrinti, ar jūsų žiniatinklio serveris pateikia `.wasm` failus.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Jūsų žiniatinklio serveris nėra tinkamai sukonfigūruotas „.wasm“ failams pateikti. Paprastai tai susiję su „Nginx“ konfigūracijos problema. Kad veiktų fono suliejimo funkcija, reikia pakoreguoti nustatymus, kad būtų pateikiami ir „.wasm“ failai. Palyginkite savo „Nginx“ konfigūraciją su mūsų dokumentacijoje pateikta rekomenduojama konfigūracija.", + "Talk configuration values" : "„Pokalbių“ konfigūracijos parametrai", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Skambučio trukmės nustatymas palaikomas tik naudojant sistemos „cron“. Įjunkite sistemos „cron“ arba pašalinkite konfigūracijos parametrą `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Mažos „max_call_duration“ reikšmės (šiuo metu nustatyta %d) negali būti priverstinai taikomos dėl techninių apribojimų. Fono užduotis vykdoma tik kas 5 minutes, todėl naudokite savo pačių atsakomybe.", + "Federation" : "Federacija", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Jei įjungta „Pokalbių Federacija“ funkcija, labai rekomenduojama nustatyti „memcache.locking“ parametrą.", + "High-performance backend" : "Didelio našumo posistemė", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nesukonfigūruota didelio našumo sistema – „Nextcloud Pokalbiai“ paleidimas be didelio našumo sistemos pakanka tik labai mažiems skambučiams (daugiausia 2–3 dalyviams). Nustatykite didelio našumo sistemą, kad skambučiai su keliais dalyviais vyktų sklandžiai.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Didelio našumo posistemės režimas „conversation_cluster“ nebenaudojamas ir nebebus palaikomas būsimoje versijoje. Šiuo metu didelio našumo posistemė palaiko tikrąjį klasterizavimą, kurį reikėtų naudoti vietoj jo.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Kelių didelio našumo serverių apibrėžimas nebenaudojamas ir nebebus palaikomas būsimoje versijoje. Vietoj to, apkrovos balansavimo priemonė turėtų būti nustatyta kartu su klasterizuotais signalizacijos serveriais ir sukonfigūruota „Pokalbiai“ nustatymuose.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Išsaugotas viešasis raktas, skirtas naudojamam %1$s algoritmui, nesutampa su išsaugotu privačiuoju raktu. Vykdykite %2$s komandą, kad išspręstumėte šią problemą.", + "High-performance backend not configured correctly. Run %s for details." : "Didelio našumo posistemė netinkamai sukonfigūruota. Paleiskite %s, jei norite gauti išsamesnės informacijos.", + "High-performance backend not configured correctly" : "Didelio našumo posistemė netinkamai sukonfigūruota", + "Error: Cannot connect to server" : "Klaida: Nepavyksta prisijungti prie serverio", + "Error: Server did not respond with proper JSON" : "Klaida: serveris neatsakė tinkamu JSON failu", + "Error: Certificate expired" : "Klaida: Liudijimas nebegalioja", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Klaida: „Nextcloud“ serverio ir didelio našumo serverio sistemos laikai nesutampa. Įsitikinkite, kad abu serveriai yra prijungti prie laiko serverio, arba sinchronizuokite jų laiką rankiniu būdu.", + "Could not get version" : "Nepavyko gauti versijos", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Klaida: Veikia versija: {version}; Serverį reikia atnaujinti, kad jis būtų suderinamas su šia „Pokalbiai“ versija", + "Error: Server responded with: {error}" : "Klaida: Serveris atsakė: {error}", + "Error: Unknown error occurred" : "Klaida: Įvyko nežinoma klaida", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Įspėjimas: Veikianti versija: {version}; Serveris nepalaiko visų šios „Talk“ versijos funkcijų, trūksta šių funkcijų: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Labai rekomenduojama sukonfigūruoti atminties talpyklą, kai „Nextcloud Pokalbiai“ veikia su didelio našumo serveriu.", + "Client Push" : "Kliento „push“ funkcija", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Įdiegta kliento „Push“ funkcija pagerina „Pokalbiai“ pranešimų punktualumą.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nėra įdiegta. Dėl to „Pokalbiai“ pranešimai gali vėluoti.", + "Recording backend" : "Įrašymo posistemė", + "Using the recording backend requires a High-performance backend." : "Įrašymo funkcijai reikalinga didelio našumo posistemė.", + "No recording backend configured" : "Nėra sukonfigūruotos įrašymo posistemės", + "SIP configuration" : "SIP konfigūracija", + "Using the SIP functionality requires a High-performance backend." : "Norint naudoti SIP funkciją, reikalinga didelio našumo posistemė.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Priskirti „Pokalbiams“ telefono numeriai negali prasidėti pliusu (+) arba nuliu (0). Pašalinkite arba atnaujinkite šiuos numerius:\n{list}", + "No SIP backend configured" : "Nėra sukonfigūruotos SIP posistemės", + "Invalid date, date format must be YYYY-MM-DD" : "Netinkama data, datos formatas privalo būti MMMM-mm-dd", + "Conversation not found" : "Pokalbis nerastas", + "Path is already shared with this conversation" : "Nuoroda jau buvo pasidalinta šioje pokalbio sesijoje", + "Chat, video & audio-conferencing using WebRTC" : "Pokalbiai, vaizdo ir garso konferencijos naudojant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Pokalbiai, vaizdo ir garso konferencijos naudojant „WebRTC“\n\n* 💬 **Pokalbiai** Nextcloud „Pokalbiai“ turi paprastą teksto pokalbių funkciją, leidžiančią bendrinti arba įkelti failus iš Nextcloud „Failai“ programėlės arba vietinio įrenginio ir paminėti kitus dalyvius.\n* 👥 **Privatūs, grupiniai, vieši ir slaptažodžiu apsaugoti skambučiai!** Pakvieskite ką nors, visą grupę arba išsiųskite viešą nuorodą, kad pakviestumėte į skambutį.\n* 🌐 **Federuoti pokalbiai** Bendraukite su kitais „Nextcloud“ naudotojais jų serveriuose\n* 💻 **Ekrano bendrinimas!** Bendrinkite savo ekraną su skambučio dalyviais.\n* 🚀 **Integracija su kitomis „Nextcloud“ programėlėmis**, tokiomis kaip „Failai“, „Kalendorius“, „Vartotojo būsena“, „Dashbord“, „Flow“, „Žemėlapiai“, „Smart picker“, „Kontaktai“, „Darbai“ ir daugeliu kitų.\n* 🌉 **Sinchronizavimas su kitais pokalbių sprendimais** Integravus [Matterbridge](https://github.com/42wim/matterbridge/) į „Pokalbiai“, galite lengvai sinchronizuoti daugybę kitų pokalbių sprendimų su Nextcloud „Pokalbiai“ ir atvirkščiai.", + "Leave call" : "Išeiti iš skambučio", + "Navigating away from the page will leave the call in {conversation}" : "Išėjus iš puslapio, skambutis bus sustabdytas {conversation}", + "Stay in call" : "Pasilikti skambutyje", + "Error occurred when getting the conversation information" : "Įvykusi klaida gaunant pokalbio informaciją", + "Discuss this file" : "Aptarkite šį failą", + "Share this file with others to discuss it" : "Bendrinti šį failą su kitais, norint jį aptarti", + "Share this file" : "Bendrinti šį failą", + "Join conversation" : "Prisijungti prie pokalbio", + "This conversation is password-protected." : "Šis pokalbis yra apsaugotas slaptažodžiu.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Iš jūsų IP adreso užfiksuota keletas neteisingų slaptažodžio įvedimo bandymų. Dėl to kitas jūsų bandymas bus atidėtas 30 sekundžių.", + "The password is wrong. Try again." : "Slaptažodis neteisingas. Bandykite dar kartą.", + "Password" : "Slaptažodis", + "Submit" : "Pateikti", + "Error requesting the password." : "Klaida prašant slaptažodžio.", + "Request password" : "Prašyti slaptažodžio", + "This conversation has ended" : "Šis pokalbis pasibaigė", + "Error occurred when joining the conversation" : "Prisijungiant prie pokalbio įvyko klaida", + "Close Talk sidebar" : "Užverti „Pokalbių“ šoninę juostą", + "Open Talk sidebar" : "Atverti „Pokalbiai“ šoninę juostą", + "Everyone" : "Visi", + "Users and moderators" : "Naudotojai ir moderatoriai", + "Moderators only" : "Tik moderatoriai", + "Disable calls" : "Išjungti skambučius", + "Save changes" : "Įrašyti pakeitimus", + "Saving …" : "Įrašoma …", + "Saved!" : "Įrašyta!", + "Limit to groups" : "Apriboti iki grupių", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Pasirinkus bent vieną grupę, pokalbiuose gali dalyvauti tik išvardytų grupių žmonės.", + "Guests can still join public conversations." : "Svečiai vis tiek gali prisijungti prie viešų pokalbių.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Vartotojai, kurie nebegali naudotis „Pokalbiais“, vis tiek bus įtraukti į ankstesnių pokalbių dalyvių sąrašą, o jų pokalbių žinutės taip pat bus išsaugotos.", + "Limit using Talk" : "Riboti naudojimąsi „Pokalbiai“", + "Limit creating a public and group conversation" : "Riboti viešų ir grupinių pokalbių kūrimą", + "Limit creating conversations" : "Riboti pokalbių kūrimą", + "Limit starting a call" : "Riboti skambučio pradėjimą", + "Limit starting calls" : "Riboti skambučių pradėjimą", + "When a call has started, everyone with access to the conversation can join the call." : "Prasidėjus skambučiui, visi, turintys prieigą prie pokalbio, gali prisijungti prie skambučio.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Šiame serveryje įdiegti šie robotai. Dokumentacijoje galite rasti išsamią informaciją, kaip sukurti {linkstart1} savo botą {linkend}, arba {linkstart2} botų sąrašą {linkend}, kuriuos reikia įjungti serveryje.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Šiame serveryje nėra įdiegtų botų. Dokumentacijoje galite rasti išsamią informaciją, kaip sukurti {linkstart1} savo botą {linkend}, arba {linkstart2} botų sąrašą {linkend}, kuriuos reikia įjungti serveryje.", + "Description is not provided" : "Aprašas nepateiktas", + "Locked for moderators" : "Užrakinta moderatoriams", + "Enabled" : "Įjungta", + "Disabled" : "Išjungta", + "Bots settings" : "Botų nustatymai", + "State" : "Būsena", + "Name" : "Vardas", + "Last error" : "Paskutinė klaida", + "Total errors count" : "Bendras klaidų skaičius", + "Find more bots" : "Raskite daugiau botų", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Patikimus serverius galima konfigūruoti {linkstart} bendrinimo nustatymų puslapyje {linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Susieję pokalbiai ir skambučiai jau veikia. Priedų tvarkymas bus įtrauktas į būsimą versiją.", + "Enable Federation in Talk app" : "Įjungti federaciją „Pokalbių“ programėlėje", + "Permissions" : "Leidimai", + "Allow users to be invited to federated conversations" : "Leisti vartotojams būti pakviestiems į federacinius pokalbius", + "Allow users to invite federated users into conversation" : "Leisti vartotojams kviesti federacinius vartotojus į pokalbį", + "Only allow to federate with trusted servers" : "Leisti jungtis federacinius būdu tik su patikimais serveriais", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Jei pasirinkta bent viena grupė, tik į sąrašą įtrauktų grupių nariai gali kviesti federacinius vartotojus į pokalbius.", + "Groups allowed to invite federated users" : "Grupės, kurioms leidžiama kviesti federacinius vartotojus", + "Select groups …" : "Pasirinkti grupes...", + "All messages" : "Visos žinutės", + "@-mentions only" : "Tik @ paminėjimai", + "Off" : "Išjungta", + "General settings" : "Bendri nustatymai", + "Default notification settings" : "Numatytieji pranešimų nustatymai", + "Default group notification" : "Numatytasis grupės pranešimas", + "Default group notification for new groups" : "Numatytasis pranešimas apie naujas grupes", + "Integration into other apps" : "Integracija į kitas programėles", + "Allow conversations on files" : "Leisti pokalbius failuose", + "Allow conversations on public shares for files" : "Leisti pokalbius viešai bendrinamuose failuose", + "End-to-end encrypted calls" : "Skambučiai naudojant ištisinį šifravimą", + "Enable encryption" : "Įjungti šifravimą", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Skambučiams su ištisiniu šifravimu, naudojant sukonfigūruotą SIP tiltą, reikalinga naujesnė „Aukšto našumo posistemės“ ir SIP tilto versija.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilieji klientai šiuo metu nepalaiko skambučių su ištisiniu šifravimu.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Paspaudus mygtuką viršuje, formoje pateikta informacija bus nusiųsta į „Struktur AG“ serverius. Daugiau informacijos rasite {linkstart} svetainėje spreed.eu {linkend}.", + "Pending" : "Laukiantis", + "Error" : "Klaida", + "Blocked" : "Blokuota", + "Active" : "Aktyvi", + "Expired" : "Nebegalioja", + "Never" : "Niekada", + "The trial could not be requested. Please try again later." : "Bandomosios versijos užsisakyti nepavyko. Prašome pabandyti vėliau.", + "The account could not be deleted. Please try again later." : "Nepavyko ištrinti paskyros. Vėliau bandykite dar kartą.", + "Hosted High-performance backend" : "Teikėjo valdoma didelio našumo posistemė", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Mūsų partneris „Struktur AG“ teikia paslaugą, leidžiančią užsisakyti nuotolinį signalinį serverį. Tam tereikia užpildyti žemiau pateiktą formą, ir jūsų „Nextcloud“ pateiks užklausą. Kai serveris bus jums sukonfigūruotas, prisijungimo duomenys bus įrašyti automatiškai. Tai pakeis esamus signalinio serverio nustatymus.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Jei jūsų aukšto našumo posistemės paskyroje yra įjungtos STUN ir (arba) TURN funkcijos, nustatymai bus atitinkamai atnaujinti.", + "URL of this Nextcloud instance" : "Šio Nextcloud egzemplioriaus URL", + "Full name of the user requesting the trial" : "Pilnas vartotojo, prašančio suteikti bandomąją versiją, vardas ir pavardė", + "Email of the user" : "Naudotojo el. paštas", + "Language" : "Kalba", + "Country" : "Šalis", + "Request signaling server trial" : "Prašymas išbandyti signalinį serverį", + "You can see the current status of your hosted signaling server in the following table." : "Toliau pateiktoje lentelėje galite pamatyti savo nuotolinio signalinio serverio dabartinę būseną.", + "Status" : "Būsena", + "Created at" : "Sukurta", + "Expires at" : "Baigia galioti", + "Limits" : "Limitai", + "STUN included" : "Įtrauktas STUN", + "Yes" : "Taip", + "No" : "Ne", + "TURN included" : "Įtrauktas TURN", + "Delete the signaling server account" : "Ištrinti signalinio serverio paskyrą", + "_%n user_::_%n users_" : ["%n vartotojas","%n vartotojai","%n vartotojų","%n vartotojas"], + "Installed version: {version}" : "Įdiegta versija: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Galite įdiegti „Matterbridge“, kad susietumėte Nextcloud „Pokalbiai“ su kitomis paslaugomis. Daugiau informacijos rasite jų {linkstart1} „GitHub“ puslapyje{linkend}. Programėlės atsisiuntimas ir diegimas gali užtrukti. Jei užtrunka, įdiekite ją rankiniu būdu iš {linkstart2} „Nextcloud Programėlių Parduotuvės“ {linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "„Matterbridge“ dvejetainis failas turi neteisingus leidimus. Įsitikinkite, kad „Matterbridge“ dvejetainis failas priklauso teisingam vartotojui ir gali būti vykdomas. Jį galima rasti aplanke „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "„Matterbridge“ dvejetainis failas nerastas arba jo nepavyko vykdyti.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Taip pat galite rankiniu būdu nustatyti kelią iki „Matterbridge“ dvejetainio failo per konfigūraciją. Daugiau informacijos rasite {linkstart} „Matterbridge“ integracijos dokumentacijoje {linkend}.", + "Downloading …" : "Atsisiunčiama…", + "Install Talk Matterbridge" : "Įdiekite „Pokalbių Matterbridge“", + "An error occurred while installing the Matterbridge app" : "Įdiegiant „Matterbridge“ programėlę įvyko klaida", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Diegiant „Pokalbių Matterbridge“ įvyko klaida. Įdiekite ją rankiniu būdu.", + "Failed to execute Matterbridge binary." : "Nepavyko paleisti „Matterbridge“ vykdomojo failo.", + "Matterbridge integration" : "„Matterbridge“ integracija", + "Enable Matterbridge integration" : "Įjungti „Matterbridge“ integraciją", + "Status: Checking connection" : "Būsena: Tikrinamas ryšys", + "OK: Running version: {version}" : "Gerai: Veikianti versija: {version}", + "Error: Server seems to be a Signaling server" : "Klaida: Atrodo, kad serveris yra signalinis serveris", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Klaida: „Nextcloud“ serverio ir įrašymo serverio sistemos laikai nesutampa. Įsitikinkite, kad abu serveriai yra prijungti prie laiko serverio, arba sinchronizuokite jų laiką rankiniu būdu.", + "Recording backend URL" : "Įrašymo posistemės URL", + "Validate SSL certificate" : "Patikrinti SSL sertifikatą", + "Delete this server" : "Ištrinti šį serverį", + "Test this server" : "Išbandyti šį serverį", + "Disabled for all calls" : "Išjungta visiems skambučiams", + "Enabled for all calls" : "Įjungta visiems skambučiams", + "Configurable on conversation level by moderators" : "Moderatoriai gali konfigūruoti pokalbių lygmeniu", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP parametrai „upload_max_filesize“ arba „post_max_size“ leidžia įkelti tik failus, kurių dydis ned augiau kaip {maxUpload}.", + "Recording backend settings saved" : "Išsaugoti įrašymo posistemės nustatymai", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoriai galės įjungti sutikimo reikalavimą pokalbio lygmeniu. Prieš prisijungiant prie kiekvieno šio pokalbio skambučio, iš kiekvieno dalyvio bus reikalaujama duoti sutikimą, kad pokalbis būtų įrašomas.", + "The consent to be recorded will be required for each participant before joining every call." : "Prieš prisijungiant prie kiekvieno pokalbio, iš kiekvieno dalyvio bus reikalaujama sutikimo, kad pokalbis būtų įrašomas.", + "The consent to be recorded is not required." : "Sutikimo įrašymui nereikia.", + "Recording backend configuration is only possible with a High-performance backend." : "Įrašymo serverio konfigūracija įmanoma tik naudojant didelio našumo posistemę.", + "Add a new recording backend server" : "Pridėti naują įrašymo posistemės serverį", + "Shared secret" : "Bendrinama paslaptis", + "Recording consent" : "Sutikimas dėl įrašymo", + "Recording transcription" : "Įrašymo transkripcija", + "Automatically transcribe call recordings with a transcription provider" : "Automatiškai transkribuokite skambučių įrašus naudodami transkripcijos paslaugų teikėją", + "Automatically summarize call recordings with transcription and summary providers" : "Automatiškai apibendrinkite skambučių įrašus naudodami transkripcijos ir santraukų teikėjus", + "SIP configuration saved!" : "SIP konfigūracija įrašyta!", + "SIP configuration is only possible with a High-performance backend." : "SIP konfigūracija įmanoma tik naudojant didelio našumo posistemę.", + "Enable SIP Dial-out option" : "Įjungti SIP išeinančiojo skambinimo parinktį", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalinį serverį reikia atnaujinti, kad būtų palaikoma SIP skambinimo iš telefono funkcija.", + "Do not show SIP Dial-out caller number" : "Nerodyti SIP skambinančiojo numerio", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Skambinantysis turėtų matyti, kad skambina iš „nežinomo“ arba „paslėpto“ numerio", + "Dial-out number" : "Išeinančio skambučio numeris", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatuotas numeris, naudojamas kaip atsarginis skambinančiojo numeris išeinantiems skambučiams", + "Dial-out prefix" : "Išeinančių skambučių prefiksas", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Priešais išeinančių skambučių vartotojo numerį nurodytas prefiksas (numatyta reikšmė – „+“)", + "Restrict SIP configuration" : "Apriboti SIP konfigūraciją", + "Enable SIP configuration" : "Įjungti SIP konfigūraciją", + "Only users of the following groups can enable SIP in conversations they moderate" : "Tik šių grupių vartotojai gali įjungti SIP pokalbiuose, kuriuos jie moderuoja", + "Phone number (Country)" : "Telefono numeris (Šalis)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ši informacija siunčiama kvietimo laiškuose ir rodoma šoninėje juostoje visiems dalyviams.", + "Nextcloud base URL" : "Nextcloud bazinis URL", + "Talk Backend URL" : "„Pokalbių“ posistemės URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Prieinamos ypatybės", + "Error: Websocket connection failed" : "Klaida: nepavyko užmegzti „WebSocket“ ryšio", + "Error code" : "Klaidos kodas", + "Error message" : "Klaidos pranešimas", + "Error: Websocket connection failed. Check browser console" : "Klaida: nepavyko užmegzti „WebSocket“ ryšio. Patikrinkite naršyklės konsolę", + "High-performance backend URL" : "Didelio našumo posistemės URL", + "Missing High-performance backend warning hidden" : "Trūkstamas didelio našumo posistemės įspėjimas paslėptas", + "High-performance backend settings saved" : "Išsaugoti didelio našumo posistemės nustatymai", + "Nextcloud Talk setup not complete" : "Nextcloud „Pokalbių“ nustatymas nebaigtas", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Atkreipkite dėmesį, kad pokalbiuose, kuriuose dalyvauja daugiau nei 2 dalyviai ir nėra naudojama didelio našumo posistemė, dalyviai greičiausiai susidurs su ryšio sutrikimais, o tai sukels didelę apkrovą dalyvaujančiuose įrenginiuose.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Įdiekite didelio našumo posistemę, kad skambučiai su keliais dalyviais vyktų sklandžiai.", + "Nextcloud portal" : "Nextcloud portalas", + "Quick installation guide" : "Trumpas diegimo vadovas", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Skambučiams ir pokalbiams, kuriuose dalyvauja keli dalyviai, reikalinga didelio našumo posistemė. Be šios posistemės visi dalyviai turės atskirai įkelti savo vaizdo įrašą kiekvienam kitam dalyviui, o tai greičiausiai sukels ryšio sutrikimų ir didelę apkrovą dalyvaujančiuose įrenginiuose.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Naudojant Nextcloud „Pokalbius“ su didelio našumo posisteme, labai rekomenduojama įdiegti paskirstytąją talpyklą.", + "Add High-performance backend server" : "Pridėti didelio našumo posistemės serverį", + "Warn about connectivity issues in calls with more than 2 participants" : "Įspėti apie ryšio sutrikimus pokalbiuose, kuriuose dalyvauja daugiau nei 2 dalyviai", + "STUN server URL" : "STUN serverio URL", + "The server address is invalid" : "Serverio adresas yra neteisingas", + "STUN settings saved" : "STUN nustatymai įrašyti", + "STUN servers" : "STUN serveriai", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN serveris naudojamas siekiant nustatyti už maršrutizatoriaus esančių dalyvių viešuosius IP adresus.", + "Add a new STUN server" : "Pridėti naują STUN serverį", + "{schema} scheme must be used with a domain" : "{schema} schema turi būti naudojama su domenu", + "{option1} and {option2}" : "{option1} ir {option2}", + "{option} only" : "tik {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Gerai: TURN serveris grąžino sėkmingus ICE kandidatus", + "Error: No working ICE candidates returned by the TURN server" : "Klaida: TURN serveris negrąžino veikiančių ICE kandidatų", + "Testing whether the TURN server returns ICE candidates" : "Tikrinama, ar TURN serveris grąžina ICE kandidatus", + "TURN server schemes" : "TURN serverio schemos", + "TURN server URL" : "TURN serverio URL", + "TURN server secret" : "TURN serverio paslaptis", + "TURN server protocols" : "TURN serverio protokolai", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN serveris naudojamas perduoti per tarpinį serverį duomenų srautą iš dalyvių, esančių už ugniasienės. Jei atskiri dalyviai negali prisijungti prie kitų, greičiausiai reikalingas TURN serveris. Sąrankos instrukcijas rasite {linkstart} šioje dokumentacijoje {linkend}.", + "TURN settings saved" : "TURN nustatymai įrašyti", + "TURN servers" : "TURN serveriai", + "Add a new TURN server" : "Pridėti naują TURN serverį", + "Failed" : "Nepavyko", + "OK" : "Gerai", + "Checking …" : "Tikrinama…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Nepavyko: „WebAssembly“ yra išjungta arba nepalaikoma šioje naršyklėje. Norėdami atlikti patikrinimą, įjunkite „WebAssembly“ arba naudokite naršyklę, kuri jį palaiko.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Nepavyko: žiniatinklio serveris netinkamai grąžino failus „.wasm“ ir „.tflite“. Patikrinkite skyrių „Sistemos reikalavimai“ „Pokalbių“ dokumentacijoje.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Gerai: žiniatinklio serveris tinkamai grąžino failus „.wasm“ ir „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Atrodo, kad PHP ir Apache konfigūracijos nesuderinamos. Atkreipkite dėmesį, kad PHP galima naudoti tik su MPM_PREFORK moduliu, o PHP-FPM – tik su MPM_EVENT moduliu.", + "Web server setup checks" : "Žiniatinklio serverio sąrankos patikrinimai", + "Files required for virtual background can be loaded" : "Galima įkelti virtualiam fonui reikalingus failus", + "Federated user" : "\"Federuotas\" vartotojas", + "Assign participants to rooms" : "Priskirkite dalyvius į kambarius", + "Configure breakout rooms" : "Konfigūruokite grupinio darbo kambarius", + "Number of breakout rooms" : "Grupinio darbo kambarių skaičius", + "You can create from 1 to 20 breakout rooms." : "Galite sukurti nuo 1 iki 20 grupinio darbo kambarių.", + "Assignment method" : "Priskyrimo metodas", + "Automatically assign participants" : "Automatiškai priskirti dalyvius", + "Manually assign participants" : "Rankiniu būdu priskirti dalyvius", + "Allow participants to choose" : "Leisti dalyviams pasirinkti", + "Create rooms" : "Sukurti kambarius", + "Confirm" : "Patvirtinti", + "Create breakout rooms" : "Sukurti grupinio darbo kambarius", + "Reset" : "Atstatyti", + "Delete breakout rooms" : "Ištrinti grupinio darbo kambarius", + "Room {roomNumber}" : "Kambarys {roomNumber}", + "Current breakout rooms and settings will be lost" : "Dabartiniai grupinio darbo kambariai ir nustatymai bus prarasti", + "Cancel" : "Atsisakyti", + "Unassigned participants" : "Nepriskirti dalyviai", + "Back" : "Atgal", + "Assign" : "Priskirti", + "Add participant \"{user}\"" : "Pridėti dalyvį „{user}“", + "Now" : "Dabar", + "Invalid calendar selected" : "Pasirinktas netinkamas kalendorius", + "Invalid start time selected" : "Pasirinktas netinkamas pradžios laikas", + "Invalid end time selected" : "Pasirinktas netinkamas pabaigos laikas", + "Unknown error occurred" : "Įvyko nežinoma klaida", + "Sending no invitations" : "Kvietimų nesiunčiama", + "{participant0} will receive an invitation" : "{participant0} gaus kvietimą", + "{participant0} and {participant1} will receive invitations" : "{participant0} ir {participant1} gaus kvietimus", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ir %n gaus kvietimus","{participant0}, {participant1} ir %n kiti gaus kvietimus","{participant0}, {participant1} ir %n kitų gaus kvietimus","{participant0}, {participant1} ir %n kitų gaus kvietimus"], + "Invite {user}" : "Pakviesti {user}", + "Invite all users and emails in this conversation" : "Pakviesti visus šio pokalbio vartotojus ir el. pašto adresus", + "Meeting created" : "Susitikimas sukurtas", + "Upcoming meetings" : "Artėjantys susitikimai", + "Loading …" : "Įkeliama…", + "No upcoming meetings" : "Artėjančių susitikimų nėra", + "Schedule a meeting" : "Suplanuoti susitikimą", + "Meeting title" : "Susitikimo pavadinimas", + "From" : "Nuo", + "To" : "Kam", + "Calendar" : "Kalendorius", + "Attendees" : "Dalyviai", + "No other participants to send invitations to." : "Nėra kitų dalyvių, kuriems būtų galima siųsti kvietimus.", + "Add attendees" : "Pridėti dalyvius", + "Save" : "Įrašyti", + "Search participants" : "Ieškoti dalyvių", + "No results" : "Rezultatų nėra", + "Done" : "Atlikta", + "Disable live transcription" : "Išjungti transkripciją realiuoju laiku", + "Enable live transcription (generated by AI)" : "Įjungti tiesioginį transkribavimą (sukurta dirbtinio intelekto)", + "Enable live transcription (Live transcriptions app is not installed)" : "Įjunkite transkripciją realiuoju laiku (programėlė „Transkripcijos realiuoju laiku“ nėra įdiegta)", + "Disable live translation" : "Išjungti vertimą realiuoju laiku", + "Enable live translation (generated by AI)" : "Įjungti vertimą realiuoju laiku (sukurtą dirbtinio intelekto)", + "Original language" : "Originalo kalba", + "Live translations app is not installed" : "Vertimo realiuoju laiku programėlė neįdiegta", + "Original language: {languageName}" : "Originalo kalba: {languageName}", + "Translated language" : "Išversta kalba", + "Translated language: {languageName}" : "Išversta kalba: {languageName}", + "Raise hand" : "Pakelti ranką", + "Raise hand (R)" : "Pakelti ranką (R)", + "Lower hand" : "Nuleisti ranką", + "Lower hand (R)" : "Nuleisti ranką (R)", + "Exit full screen (F)" : "Išeiti iš viso ekrano (F)", + "Full screen (F)" : "Visas ekranas (F)", + "Speaker view" : "Garsiakalbio vaizdas", + "Grid view" : "Tinklelio rodinys", + "Error when trying to load the available live transcription languages" : "Klaida bandant įkelti galimas transkripcijos realiuoju laiku kalbas", + "Failed to enable live transcription" : "Nepavyko įjungti transkripcijos realiuoju laiku", + "Failed to enable live translations" : "Nepavyko įjungti vertimo realiuoju laiku", + "Failed to disable live translations" : "Nepavyko išjungti vertimo realiuoju laiku", + "Recording consent is required" : "Būtinas sutikimas įrašyti", + "This conversation is read-only" : "Šis pokalbis yra tik skaitymui", + "Conversation not found or not joined" : "Pokalbis nerastas arba prie jo neprisijungta", + "Lobby is still active and you're not a moderator" : "Laukiamasis vis dar aktyvus, o jūs nesate moderatorius", + "Connection failed" : "Ryšys patyrė nesėkmę", + "Reload" : "Įkelti iš naujo", + "{nickName} raised their hand." : "{nickName} pakėlė ranką.", + "A participant raised their hand." : "Dalyvis pakėlė ranką.", + "Collapse stripe" : "Suskleisti juostelę", + "Expand stripe" : "Išskleisti juostelę", + "Previous page of videos" : "Ankstesnis vaizdo įrašų puslapio", + "Next page of videos" : "Kitas vaizdo įrašų puslapis", + "Connecting …" : "Jungiamasi…", + "Calling …" : "Skambinama…", + "Waiting for {user} to join the call" : "Laukiama, kol {user} prisijungs prie skambučio", + "Waiting for others to join the call …" : "Laukiama, kol kiti prisijungs prie skambučio…", + "You can invite others in the participant tab of the sidebar" : "Galite pakviesti kitus žmonės šoninėje juostoje, dalyvių kortelėje", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Galite pakviesti kitus žmonės šoninėje juostoje, dalyvių kortelėje arba bendrindami šią nuorodą, skirtą pakviesti kitus asmenis!", + "Share this link to invite others!" : "Bendrinkite šią nuorodą, norėdami pakviesti kitus!", + "Copy link" : "Kopijuoti nuorodą", + "You are not allowed to enable audio" : "Jums neleidžiama įjungti garsą", + "No audio. Click to select device" : "Nėra garso. Spustelėkite norėdami pasirinkti įrenginį", + "Mute audio" : "Nutildyti garsą", + "Mute audio (M)" : "Nutildyti garsą (M)", + "Unmute audio" : "Įjungti garsą", + "Unmute audio (M)" : "Įjungti garsą (M)", + "None" : "Nėra", + "Select a microphone" : "Pasirinkti mikrofoną", + "Select a speaker" : "Pasirinkite garsiakalbį", + "Microphone settings" : "Mikrofono nustatymai", + "Check devices" : "Patikrinkite įrenginius", + "Access to camera was denied" : "Prieiga prie kameros buvo uždrausta", + "Error while accessing camera: It is likely in use by another program" : "Klaida gaunant prieigą prie kameros: Tikėtina, kad ją naudoja kita programa", + "Error while accessing camera" : "Klaida gaunant prieigą prie kameros", + "You have been muted by a moderator" : "Moderatorius jums išjungė garsiakalbį", + "Hide presenter video" : "Slėpti pranešėjo(-os) vaizdo įrašą", + "You are not allowed to enable video" : "Jums neleidžiama įjungti vaizdą", + "No video. Click to select device" : "Nėra vaizdo. Spustelėkite norėdami pasirinkti įrenginį", + "Disable video" : "Išjungti vaizdą", + "Disable video (V)" : "Išjungti vaizdą (V)", + "Enable video" : "Įjungti vaizdą", + "Enable video (V)" : "Įjungti vaizdą (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą – Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą (V) – Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą. Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Select a video device" : "Pasirinkite vaizdo įrenginį", + "Show presenter" : "Rodyti pranešėją", + "You" : "Jūs", + "Mute" : "Nutildyti", + "Muted" : "Nutildyta", + "Show screen" : "Rodyti ekraną", + "Stop following" : "Nustoti sekti", + "Connection could not be established …" : "Nepavyko užmegzti ryšio…", + "Connection was lost and could not be re-established …" : "Ryšys nutrūko ir jo nepavyko užmegzti iš naujo…", + "Connection could not be established. Trying again …" : "Nepavyko užmegzti ryšio. Bandoma dar kartą…", + "Connection lost. Trying to reconnect …" : "Nutrūko ryšys. Bandoma prisijungti iš naujo…", + "Connection problems …" : "Ryšio problemos…", + "Collapse" : "Suskleisti", + "Expand" : "Išskleisti", + "You need to be logged in to upload files" : "Norėdami įkelti failus, turite būti prisijungę", + "Drop your files to upload" : "Tempkite failus, norėdami juos išsiųsti", + "Conversation messages" : "Pokalbio žinutės", + "Scroll to bottom" : "Slinkti į apačią", + "Post message" : "Paskelbti žinutę", + "Federated conversation" : "Federuotas pokalbis", + "Public conversation" : "Viešas pokalbis", + "Favorite" : "Mėgstamas", + "Banned users" : "Užblokuoti vartotojai", + "Manage the list of banned users in this conversation." : "Valdykite šio pokalbio užblokuotų vartotojų sąrašą.", + "Manage bans" : "Tvarkyti blokavimus", + "No banned users" : "Nėra užblokuotų vartotojų", + "Banned by:" : "Užblokavo:", + "Date:" : "Data:", + "Note:" : "Pastaba:", + "Hide details" : "Slėpti išsamesnę informaciją", + "Show details" : "Rodyti išsamiau", + "Unban" : "Panaikinti blokavimą", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Pavadinimą ir aprašymą galite pakeisti {linkstart} Kalendoriuje ↗. {linkend}", + "Error while updating conversation name" : "Klaida atnaujinant pokalbio pavadinimą", + "Error while updating conversation description" : "Klaida atnaujinant pokalbio aprašą", + "Enter a name for this conversation" : "Įveskite šio pokalbio pavadinimą", + "Edit conversation name" : "Taisyti pokalbio pavadinimą", + "Edit conversation description" : "Taisyti pokalbio aprašą", + "Enter a description for this conversation" : "Įveskite šio pokalbio aprašą", + "Picture" : "Paveikslėlis", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Šiame pokalbyje galima įjungti šiuos botus. Norėdami įdiegti daugiau botų šiame serveryje, susisiekite su savo administratoriumi.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Šiame serveryje nėra įdiegtų botų. Kreipkitės į administraciją, jei norite, kad šiame serveryje būtų įdiegti botai.", + "Disable" : "Išjungti", + "Enable" : "Aktyvuoti", + "The bot is not available anymore" : "Botas nebėra prieinamas", + "Breakout rooms" : "Grupinio darbo kambariai", + "Manage breakout rooms" : "Tvarkyti grupinio darbo kambarius", + "Set up breakout rooms for this conversation" : "Sukurkite grupinio darbo kambarius šiam pokalbiui", + "Please select a valid PNG or JPG file" : "Pasirinkite tinkamą PNG ar JPG failą", + "Choose your conversation picture" : "Pasirinkite pokalbio paveikslėlį", + "Choose" : "Pasirinkite", + "Error setting conversation picture" : "Klaida nustatant pokalbio paveikslėlį", + "Could not set the conversation picture: {error}" : "Nepavyko nustatyti pokalbio paveikslėlio: {error}", + "Error cropping conversation picture" : "Klaida apkarpant pokalbio paveikslėlį", + "Error removing conversation picture" : "Klaida pašalinant pokalbio paveikslėlį", + "Set emoji as conversation picture" : "Nustatyti emodžį kaip pokalbio paveikslėlį", + "Set background color for conversation picture" : "Nustatyti pokalbio paveikslėlio fono spalvą", + "Upload conversation picture" : "Įkelti pokalbio paveikslėlį", + "Choose conversation picture from files" : "Pasirinkite pokalbio paveikslėlį iš failų", + "Remove conversation picture" : "Pašalinti pokalbio paveikslėlį", + "The file must be a PNG or JPG" : "Failas privalo būti PNG ar JPG tipo", + "Set picture" : "Nustatyti paveikslėlį", + "Default permissions modified for {conversationName}" : "Pakeisti {conversationName} numatytieji leidimai ", + "Could not modify default permissions for {conversationName}" : "Nepavyko pakeisti {conversationName} numatytųjų leidimų ", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Redaguokite numatytus šio pokalbio dalyvių leidimus. Šie nustatymai netaikomi moderatoriams.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Kiekvieną kartą, kai šiame skyriuje keičiami leidimai, anksčiau atskiriems dalyviams suteikti individualūs leidimai bus panaikinti.", + "All permissions" : "Visi leidimai", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Dalyviai turi teisę pradėti pokalbį, prisijungti prie pokalbio, įjungti garso ir vaizdo perdavimą bei bendrinti ekrano vaizdą.", + "Participants can use all available features." : "Dalyviai gali naudotis visomis prieinamomis funkcijomis.", + "Restricted" : "Apribota", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Dalyviai gali prisijungti prie pokalbių, tačiau negali įjungti garso ar vaizdo, taip pat negali bendrinti ekrano vaizdo, kol moderatorius rankiniu būdu nesuteiks jiems leidimų.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Dalyviai gauna ribotą funkcijų rinkinį, kol moderatorius rankiniu būdu nesuteikia papildomų teisių.", + "Advanced permissions" : "Išplėstiniai leidimai", + "Edit permissions" : "Taisyti leidimus", + "Conversation settings" : "Pokalbio nustatymai", + "Basic Info" : "Pagrindinė informacija", + "Personal" : "Asmeniniai", + "Moderation" : "Moderavimas", + "Setup overview" : "Sąrankos apžvalga", + "Live transcription" : "Transkripcija realiuoju laiku", + "Live transcriptions app is not installed" : "Transkripcijos realiuoju laiku programėlė neįdiegta", + "Enable live transcription" : "Įjungti transkripciją realiuoju laiku", + "Breakout Rooms" : "Grupinio darbo kambariai", + "Matterbridge" : "„Matterbridge“", + "Bots" : "Botai", + "Danger zone" : "Pavojinga zona", + "Archive conversation" : "Archyvuoti pokalbį", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archyvuoti pokalbiai pagal numatytuosius nustatymus yra paslėpti pokalbių sąraše. Tačiau jie vis tiek bus rodomi, jei ieškosite pokalbio pavadinimo arba atidarysite archyvuotų pokalbių sąrašą.", + "Do you really want to leave \"{displayName}\"?" : "Ar tikrai norite išeiti iš „{displayName}“?", + "You can archive this conversation instead." : "Vietoj to galite archyvuoti šį pokalbį.", + "Leave conversation" : "Išeiti iš pokalbio", + "You need to promote a new moderator before you can leave the conversation" : "Prieš išeidami iš pokalbio turite paskirti naują moderatorių", + "Delete conversation" : "Ištrinti pokalbį", + "Do you really want to delete \"{displayName}\"?" : "Ar tikrai norite ištrinti \"{displayName}\"?", + "Error while deleting conversation" : "Klaida ištrinant pokalbį", + "Delete all chat messages" : "Ištrinti visas pokalbių žinutes", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ar tikrai norite ištrinti visas žinutes, esančias „{displayName}“?", + "Error while clearing chat history" : "Klaida išvalant pokalbio istoriją", + "Be careful, these actions cannot be undone." : "Būkite atsargūs, šių veiksmų nebegalėsite atšaukti.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Išėjus iš pokalbio, norint vėl prisijungti prie uždaryto pokalbio, reikia gauti kvietimą. Prie atviro pokalbio galima prisijungti bet kuriuo metu.", + "Permanently delete this conversation." : "Ištrinti šį pokalbį visam laikui.", + "Delete chat messages" : "Ištrinti pokalbio žinutes", + "Permanently delete all the messages in this conversation." : "Visam laikui ištrinti visus šio pokalbio pranešimus.", + "_%n hour_::_%n hours_" : ["%n valanda","%n valandos","%n valandų","%n valanda"], + "_%n day_::_%n days_" : ["%n diena","%n dienos","%n dienų","%n diena"], + "_%n week_::_%n weeks_" : ["%n savaitė","%n savaitės","%n savaičių","%n savaitė"], + "Custom expiration time" : "Pasirinktinis galiojimo laikas", + "Message expiration disabled" : "Pranešimo galiojimo laikas išjungtas", + "Message expiration set: {duration}" : "Pranešimo galiojimo laikas nustatytas: {duration}", + "Error when trying to set message expiration" : "Klaida bandant nustatyti pranešimo galiojimo laiką", + "Message expiration" : "Pranešimo galiojimo pabaiga", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Pokalbių žinutės gali būti nebegaliojančios po tam tikro laiko. Pastaba: pokalbyje bendrinami failai nebus ištrinti savininkui, bet nebebus bendrinami pokalbyje.", + "Set message expiration" : "Nustatyti pranešimo galiojimo laiką", + "Current message expiration" : "Dabartinio pranešimo galiojimo laikas", + "Password copied to clipboard" : "Slaptažodis nukopijuotas į iškarpinę", + "Password could not be copied" : "Nepavyko nukopijuoti slaptažodžio", + "Guest access" : "Svečio prieiga", + "Breakout rooms are not allowed in public conversations." : "Viešose diskusijose negalima kurti atskirų grupinio darbo kambarių.", + "Allow guests to join this conversation via link" : "Leisti svečiams prisijungti prie šio pokalbio per nuorodą", + "Password protection" : "Apsauga slaptažodžiu", + "This conversation is password-protected. Guests need password to join" : "Šis pokalbis apsaugotas slaptažodžiu. Svečiams reikia slaptažodžio, kad galėtų prisijungti.", + "Password protection is needed for public conversations" : "Viešiems pokalbiams reikalinga slaptažodžio apsauga", + "Set a password" : "Nustatyti slaptažodį", + "Change password" : "Keisti slaptažodį", + "Enter new password" : "Įvesti naują slaptažodį", + "Save password" : "Įrašyti slaptažodį", + "Copy password" : "Kopijuoti slaptažodį", + "Guests are allowed to join this conversation via link" : "Svečiams leidžiama prisijungti prie šio pokalbio per nuorodą", + "Guests are not allowed to join this conversation" : "Svečiams neleidžiama prisijungti prie šio pokalbio", + "Resend invitations" : "Siųsti pakvietimus iš naujo", + "This conversation is open to both registered users and users created with the Guests app" : "Šis pokalbis atviras tiek registruotiems vartotojams, tiek vartotojams, sukurtiems naudojant svečių programėlę.", + "This conversation is open to registered users" : "Šis pokalbis yra atviras registruotiems naudotojams", + "This conversation is limited to the current participants" : "Šis pokalbis skirtas tik dabartiniams dalyviams", + "You opened the conversation to both registered users and users created with the Guests app" : "Atidarėte pokalbį tiek registruotiems vartotojams, tiek vartotojams, sukurtiems naudojant svečių programėlę.", + "Error occurred when opening or limiting the conversation" : "Atidarant arba ribojant pokalbį įvyko klaida", + "Open conversation to registered users, showing it in search results" : "Atviras pokalbis registruotiems vartotojams, rodomas paieškos rezultatuose", + "Also open to users created with the Guests app" : "Taip pat prieinama vartotojams, susikūrusiems naudojant svečių programėlę", + "Open conversation" : "Atverti pokalbį", + "Set language spoken in calls" : "Nustatyti pokalbiuose naudojamą kalbą", + "Languages could not be loaded" : "Nepavyko įkelti kalbų", + "Loading languages …" : "Įkeliamos kalbos …", + "Invalid language" : "Neteisinga kalba", + "Default language (English)" : "Numatomoji kalba (anglų)", + "Default live transcription language set" : "Numatytasis transkripcijos realiuoju laiku kalbos rinkinys", + "Live transcription language set: {languageName}" : "Transkripcijos realiuoju laiku kalbos rinkinys: {languageName}", + "Error when trying to set live transcription language" : "Klaida bandant nustatyti transkripcijos realiuoju laiku kalbą", + "Start time: {date}" : "Pradžios laikas: {date}", + "Start time has been updated" : "Pradžios laikas atnaujintas", + "Error occurred while updating start time" : "Atnaujinant pradžios laiką, įvyko klaida", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Įjungus laukiamąjį, iš vykstančio skambučio bus pašalinti ne moderatoriai.", + "Enable lobby, restricting the conversation to moderators" : "Įjungti laukiamąjį, apribojant pokalbį tik moderatoriams", + "Meeting start time" : "Susitikimo pradžios laikas", + "Start time (optional)" : "Pradžios laikas (nebūtinas)", + "Import email participants" : "Importuoti el. pašto dalyvius", + "You can import a list of email participants from a CSV file." : "Galite importuoti el. pašto dalyvių sąrašą iš CSV failo.", + "Poll drafts" : "Apklausos projektai", + "Browse poll drafts" : "Peržiūrėti apklausų projektus", + "Error occurred when locking the conversation" : "Užrakinant pokalbį, įvyko klaida", + "Error occurred when unlocking the conversation" : "Atrakinant pokalbį, įvyko klaida", + "Lock conversation" : "Užrakinti pokalbį", + "This will also terminate the ongoing call." : "Tai taip pat nutrauks vykstantį pokalbį.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Užrakinkite pokalbį, kad niekas negalėtų skelbti žinučių ar pradėti skambučių", + "Edit" : "Redaguoti", + "More information" : "Daugiau informacijos", + "Delete" : "Ištrinti", + "Add new bridged channel to current conversation" : "Pridėti naują sujungtą kanalą prie dabartinio pokalbio", + "unknown state" : "nežinoma būsena", + "running" : "vykdoma", + "not running, check Matterbridge log" : "neveikia, patikrinkite „Matterbridge“ žurnalą", + "not running" : "neveikia", + "Bridge saved" : "Sąsaja išsaugota", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Naudodami „Matterbridge“ galite sujungti kanalus iš įvairių momentinių pranešimų sistemų.", + "More info on Matterbridge" : "Daugiau informacijos apie „Matterbridge“", + "Messaging systems" : "Pranešimų sistemos", + "Enable bridge" : "Įjungti sąsają", + "Show Matterbridge log" : "Rodyti „Matterbridge“ žurnalą", + "Log content" : "Žurnalo turinys", + "Only moderators are allowed to mention @all" : "Tik moderatoriai gali minėti @all", + "All participants are allowed to mention @all" : "Visiems dalyviams leidžiama paminėti @all", + "Participants are now allowed to mention @all." : "Dalyviai dabar gali paminėti @all.", + "Mentioning @all has been limited to moderators." : "Galimybė paminėti @all buvo apribota iki moderatorių.", + "Allow participants to mention @all" : "Leisti dalyviams paminėti @all", + "Mention permissions" : "Paminėti leidimus", + "Notifications" : "Pranešimai", + "Notify about calls in this conversation" : "Pranešti apie skambučius šiame pokalbyje", + "Important conversation" : "Svarbus pokalbis", + "\"Do not disturb\" user status is ignored for important conversations" : "Svarbių pokalbių metu vartotojo būsena „Netrukdyti“ ignoruojama", + "Sensitive conversation" : "Jautrus pokalbis", + "Message preview will be disabled in conversation list and notifications" : "Pokalbių sąraše ir pranešimuose bus išjungtas pranešimų peržiūros režimas", + "Recording consent is required for calls in this conversation" : "Šio pokalbio skambučiams įrašyti reikalingas sutikimas", + "Recording consent is not required for calls in this conversation" : "Šio pokalbio skambučiams įrašymo sutikimas nereikalingas.", + "Recording consent requirement was updated" : "Atnaujintas įrašo sutikimo reikalavimas", + "Error occurred while updating recording consent" : "Atnaujinant įrašymo sutikimą įvyko klaida", + "Recording Consent" : "Sutikimas dėl įrašymo", + "Recording consent cannot be changed once a call or breakout session has started." : "Sutikimo įrašyti negalima pakeisti prasidėjus skambučiui ar pokalbiui mažomis grupėmis.", + "Require recording consent before joining call in this conversation" : "Prieš prisijungiant prie šio pokalbio, reikia gauti sutikimą įrašyti pokalbį", + "Recording consent is required for all calls" : "Visiems skambučiams reikalingas įrašymo sutikimas", + "SIP dial-in is now possible without PIN requirement" : "SIP skambinimo funkcija dabar galima be PIN kodo", + "SIP dial-in is now enabled" : "Dabar įjungtas prisijungimas per SIP", + "SIP dial-in is now disabled" : "SIP prisijungimas dabar išjungtas", + "Error occurred when enabling SIP dial-in" : "Įjungiant SIP skambinimo funkciją įvyko klaida", + "Error occurred when disabling SIP dial-in" : "Išjungiant SIP rinkimą įvyko klaida", + "Phone and SIP dial-in" : "Skambinimas telefonu ir per SIP", + "Enable phone and SIP dial-in" : "Įjungti skambinimą telefonu ir SIP", + "Allow to dial-in without a PIN" : "Leisti prisijungti be PIN kodo", + "Ongoing" : "Tebevykstantis", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n žmogus priėmė","%n žmonės priėmė","%n žmonių priėmė","%n žmonių priėmė"], + "_%n person declined_::_%n people declined_" : ["%n žmogus atmetė","%n žmonės atmetė","%n žmonių atmetė","%n žmonių atmetė"], + "_and %n other attachment_::_and %n other attachments_" : ["ir %n kitas priedas","ir %n kiti priedai","ir %n kitų priedų","ir %n kitų priedų"], + "With {displayName}" : "Su {displayName}", + "In {conversation}" : "{conversation}", + "View attachment" : "Žiūrėti priedą", + "Join" : "Prisijungti", + "View conversation" : "Žiūrėti pokalbį", + "View event on Calendar" : "Žiūrėti įvykį kalendoriuje", + "Error while creating the conversation" : "Klaida kuriant pokalbį", + "Hello, {displayName}" : "Sveiki, {displayName}", + "Start meeting now" : "Pradėti susitikimą dabar", + "Give your meeting a title" : "Pavadinkite savo susitikimą", + "Create and copy link" : "Sukurti ir nukopijuoti nuorodą", + "Create a new conversation" : "Sukurti naują pokalbį", + "Join open conversations" : "Prisijungti prie atvirų pokalbių", + "Call a phone number" : "Paskambinti telefono numeriu", + "Scroll backward" : "Slinkti atgal", + "Scroll forward" : "Slinkti į priekį", + "Schedule meetings" : "Suplanuoti susitikimus", + "You don't have any upcoming meetings" : "Neturite jokių būsimų susitikimų", + "Calendar events with a conversation link as the location are shown here" : "Čia rodomi kalendoriaus įvykiai, kurių vieta nurodyta kaip pokalbio nuoroda.", + "Open calendar" : "Atverti kalendorių", + "Unread mentions" : "Neskaityti paminėjimai", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Žinutės, kuriose buvote paminėtas, bus rodomos čia. Galite paminėti žmones įvesdami @ ir jų vardus.", + "Upcoming reminders" : "Artėjantys priminimai", + "Message reminders" : "Pranešimų priminimai", + "Set a reminder on a message to be notified" : "Nustatykite priminimą apie pranešimą, kad gautumėte pranešimą", + "Start a group conversation" : "Pradėti grupinį pokalbį", + "Create conversation" : "Sukurti pokalbį", + "Enter your name" : "Įveskite savo vardą", + "Submit name and join" : "Pateikti vardą ir prisijungti", + "Do you already have an account?" : "Ar jau turite paskyra?", + "Log in" : "Prisijungti", + "Error while verifying uploaded file" : "Klaida tikrinant įkeltą failą", + "Uploaded file is verified" : "Įkeltas failas patvirtintas", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Turinio formatas yra kableliais atskirtos reikšmės (CSV):
– Antraštės eilutė yra privaloma ir turi sutapti su „vardas“, „el. paštas“ arba tiesiog „el. paštas“
– Po vieną įrašą eilutėje (pvz., „John Doe“, „john@example.tld“)", + "Participants added successfully" : "Dalyviai sėkmingai pridėti", + "Error while adding participants" : "Pridedant dalyvius įvyko klaida", + "Import a file" : "Importuoti failą", + "Browse" : "Naršyti", + "Verifying uploaded file …" : "Pridedant dalyvius įvyko klaida", + "This might take a moment" : "Tai gali šiek tiek užtrukti", + "Send invitations" : "Siųsti kvietimus", + "_%n invalid email_::_%n invalid emails_" : ["%n neteisingas el. pašto adresas","%n neteisingi el. pašto adresai","%n neteisingų el. pašto adresų","%n neteisingų el. pašto adresų"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n el. laiškas jau importuotas arba yra pasikartojantis","%n el. laiškai jau importuoti arba yra pasikartojantys","%n el. laiškų jau importuota arba yra pasikartojantys","%n el. laiškų jau importuota arba yra pasikartojantys"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n kvietimą galima siųsti","%n kvietimus galima siųsti","%n kvietimų galima siųsti","%n kvietimų galima siųsti"], + "An error occurred while calling a phone number" : "Skambinant telefono numeriu įvyko klaida", + "Phone number could not be called: {error}" : "Nepavyko paskambinti telefono numeriu: {error}", + "Phone number could not be called" : "Nepavyko paskambinti telefono numeriu", + "Search participants or phone numbers" : "Ieškoti dalyvių arba telefono numerių", + "Creating the conversation …" : "Kuriamas pokalbis…", + "Mark as read" : "Žymėti kaip skaitytą", + "Mark as unread" : "Žymėti kaip neskaitytą", + "Remove from favorites" : "Šalinti iš mėgstamų", + "Add to favorites" : "Pridėti į mėgstamus", + "Unarchive conversation" : "Atkurti pokalbio archyvą", + "Ignore \"Do not disturb\"" : "Ignoruoti „Netrukdyti“", + "You need to promote a new moderator before you can leave the conversation." : "Prieš išeidami iš pokalbio, turite paaukštinti naują moderatorių.", + "Conversation actions" : "Pokalbio veiksmai", + "Notify about calls" : "Pranešti apie skambučius", + "Hide message text" : "Slėpti pranešimo tekstą", + "Pending invitations" : "Laukiantys kvietimai", + "Join conversations from other servers" : "Prisijunkite prie pokalbių iš kitų serverių", + "From {user} at {remoteServer}" : "Nuo {user} iš {remoteServer}", + "Decline invitation" : "Atmesti pakvietimą", + "Accept invitation" : "Priimti pakvietimą", + "No pending invitations" : "Nėra laukiančių kvietimų", + "Home" : "Pagrindinis", + "Unread" : "Neskaityta", + "Mentions" : "Paminėjimai", + "Meetings" : "Susitikimai", + "Sort conversations" : "Rūšiuoti pokalbius", + "By recent activity" : "Pagal pastarąją veiklą", + "Alphabetically" : "Pagal abėcėlę", + "Do not group by type" : "Negrupuoti pagal tipą", + "Show private ones first" : "Pirmiausia parodykite privačius", + "Show group ones first" : "Pirmiausia parodykite grupinius", + "No followed threads" : "Nėra sekamų gijų", + "No matches found" : "Nerasta jokių atitikmenų", + "No conversations found" : "Pokalbių nerasta", + "You have no archived conversations." : "Neturite archyvuotų pokalbių.", + "Subscribe to an existing thread or start your own." : "Prenumeruokite esamą temą arba pradėkite savo.", + "You have no unread mentions." : "Neturite neskaitytų paminėjimų.", + "You have no unread messages." : "Jūs neturite neskaitytų žinučių.", + "An error occurred while performing the search" : "Atliekant paiešką, įvyko klaida", + "Conversation list" : "Pokalbių sąrašas", + "Filter conversations by" : "Filtruoti pokalbius pagal", + "Unread messages" : "Neskaitytos žinutės", + "Meeting conversations" : "Susitikimų pokalbiai", + "Clear filters" : "Išvalyti filtrus", + "New personal note" : "Naujas asmeninis užrašas", + "SIP backend is not installed" : "SIP posistemė neįdiegta", + "Back to conversations" : "Atgal į pokalbius", + "Archived conversations" : "Archyvuoti pokalbiai", + "Threads" : "Temos", + "Clear filter" : "Išvalyti filtrą", + "Show more threads" : "Rodyti daugiau temų", + "App settings" : "Programėlės nustatymai", + "Users" : "Vartotojai", + "Groups" : "Grupės", + "Teams" : "Komandos", + "Federated users" : "„Federuoti\" vartotojai", + "New private conversation" : "Naujas privatus pokalbis", + "Other sources" : "Kiti šaltiniai", + "Open conversations" : "Atviri pokalbiai", + "No search results" : "Nėra paieškos rezultatų", + "Users, groups and teams" : "Naudotojai, grupės ir komandos", + "Users and groups" : "Naudotojai ir grupės", + "Users and teams" : "Naudotojai ir komandos", + "Groups and teams" : "Grupės ir komandos", + "New group conversation" : "Naujas grupės pokalbis", + "The meeting will start soon" : "Susitikimas netrukus prasidės", + "This meeting is scheduled for {startTime}" : "Šis susitikimas yra suplanuotas {startTime}", + "You are currently waiting in the lobby" : "Šiuo metu laukiate laukiamąjame", + "Enable noise suppression" : "Įjungti triukšmo slopinimą", + "Reduce background noises for better voice quality" : "Sumažinkite foninį triukšmą, kad balso kokybė būtų geresnė", + "Enable echo cancellation" : "Įjungti aido panaikinimą", + "Minimize echo effect from own surrounding" : "Sumažinkite aido efektą savo aplinkoje", + "Enable auto gain control" : "Įgalinti automatinį stiprinimo valdymą", + "Dynamically adjust microphone volume for consistent level" : "Dinamiškai reguliuokite mikrofono garsumą, kad lygis būtų pastovus", + "Select microphone" : "Pasirinkti mikrofoną", + "No microphone available" : "Nėra prieinamo mikrofono", + "Select speaker" : "Pasirinkite garsiakalbį", + "No speaker available" : "Garsiakalbis nepasiekiamas", + "Select camera" : "Pasirinkti kamerą", + "No camera available" : "Nėra prieinamos kameros", + "Select a device" : "Pasirinkti įrenginį", + "Playing …" : "Atkuriama…", + "Test speakers" : "Išbandyti garsiakalbius", + "Test" : "Testuoti", + "Devices" : "Įrenginiai", + "Backgrounds" : "Fonai", + "No audio" : "Nėra jokio garso", + "No camera" : "Nėra kameros", + "Display video as you will see it (mirrored)" : "Rodyti vaizdo įrašą taip, kaip jį matysite (veidrodinį)", + "Display video as others will see it" : "Rodyti vaizdo įrašą taip, kaip jį matys kiti", + "Calls are not supported in your browser" : "Jūsų naršyklėje skambučiai yra nepalaikomi", + "Access to microphone is only possible with HTTPS" : "Prieiga prie mikrofono yra įmanoma tik naudojant HTTPS", + "Access to microphone was denied" : "Prieiga prie mikrofono buvo uždrausta", + "Error while accessing microphone" : "Klaida gaunant prieigą prie mikrofono", + "Access to camera is only possible with HTTPS" : "Prieiga prie kameros yra įmanoma tik naudojant HTTPS", + "The call is being recorded." : "Skambutis įrašomas.", + "The call might be recorded." : "Skambutis gali būti įrašomas.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Įraše gali būti jūsų balsas, vaizdo įrašas iš kameros ir ekrano bendrinimo vaizdas. Prieš prisijungiant prie skambučio, reikalingas jūsų sutikimas.", + "Give consent to the recording of this call" : "Duoti sutikimą įrašyti šį pokalbį", + "Show more info" : "Rodyti daugiau informacijos", + "Audio is not available" : "Garso nėra", + "Video is not available" : "Vaizdo nėra", + "Start recording immediately with the call" : "Pradėkite įrašymą iš karto skambinant", + "Recording backend is not installed" : "Įrašymo posistemė neįdiegta", + "Notify all participants about this call" : "Pranešti visiems dalyviams apie šį skambutį", + "Apply settings" : "Taikyti nustatymus", + "Select virtual office background" : "Pasirinkite virtualaus biuro foną", + "Select virtual home background" : "Pasirinkite virtualių namų foną", + "Select virtual abstract background" : "Pasirinkite virtualų abstraktų foną", + "Select virtual beach background" : "Pasirinkite virtualų paplūdimio foną", + "Select virtual park background" : "Pasirinkite virtualaus parko foną", + "Select virtual theater background" : "Pasirinkite virtualaus teatro foną", + "Select virtual library background" : "Pasirinkite virtualios bibliotekos foną", + "Select virtual space station background" : "Pasirinkite virtualios kosminės stoties foną", + "Error while uploading the file" : "Įkeliant failą įvyko klaida", + "Select a file" : "Pasirinkti failą", + "Invalid path selected" : "Pasirinktas neteisingas kelias", + "Select virtual background from file {fileName}" : "Pasirinkite virtualų foną iš {fileName} failo", + "Blur" : "Suliejimas", + "Upload" : "Įkelti", + "Files" : "Failai", + "(editing)" : "(redagavimas)", + "(edited)" : "(redaguota)", + "The message has expired or has been deleted" : "Žinutė nebegalioja arba buvo ištrinta", + "Cancel quote" : "Atšaukti citatą", + "24 hours" : "24 valandos", + "7 days" : "7 dienos", + "30 days" : "30 dienų", + "Until unpin" : "Kol nebus atsegta", + "Clear reminder – {timeLocale}" : "Išvalyti priminimą - {timeLocale}", + "Edited by {actor}" : "Redagavo {actor}", + "Pinned by you" : "Jūs prisgėte", + "Pinned by {actor}" : "Prisegė {actor}", + "Until {absoluteDate}" : "Iki {absoluteDate}", + "Message text copied to clipboard" : "Žinutės tekstas nukopijuotas į iškarpinę", + "Message text could not be copied" : "Nepavyko nukopijuoti žinutės teksto", + "Message forwarded to \"Note to self\"" : "Žinutė persiųsta į „Pastaba sau“", + "Error while forwarding message to \"Note to self\"" : "Klaida persiunčiant pranešimą į „Pastaba sau“", + "A reminder was successfully removed" : "Priminimas buvo sėkmingai pašalintas", + "Error occurred when removing a reminder" : "Šalinant priminimą įvyko klaida", + "A reminder was successfully set at {datetime}" : "Priminimas sėkmingai nustatytas {datetime}", + "Error occurred when creating a reminder" : "Kuriant priminimą įvyko klaida", + "Add a reaction to this message" : "Pridėti reakciją į šį pranešimą", + "Reply" : "Atsakyti", + "More actions" : "Daugiau veiksmų", + "Set reminder" : "Nustatyti priminimą", + "Pin message" : "Prisegti pranešimą", + "Unpin message" : "Atsegti pranešimą", + "Reply privately" : "Atsakyti privačiai", + "Edit message" : "Redaguoti laišką", + "Copy message" : "Kopijuoti pranešimą", + "Copy message link" : "Kopijuoti žinutės nuorodą", + "Go to file" : "Pereiti į failą", + "Download file" : "Atsisiųsti failą", + "Go to thread" : "Eiti į temą", + "Edit thread details" : "Redaguoti temos informaciją", + "Forward message" : "Persiųsti žinutę", + "Translate" : "Verskite", + "Set custom reminder" : "Nustatyti tinkintą priminimą", + "Keep pinned for" : "Laikyti prisegtą", + "Set custom period" : "Nustatyti tinkintą laikotarpį", + "Close reactions menu" : "Užverti reakcijų meniu", + "React with {emoji}" : "Reaguoti naudojant {emoji}", + "React with another emoji" : "Reaguoti kita šypsenėle", + "Choose a conversation to forward the selected message." : "Pasirinkite pokalbį, kad persiųstumėte pasirinktą pranešimą.", + "Error while forwarding message" : "Klaida persiunčiant žinutę", + "The message has been forwarded to {selectedConversationName}" : "Žinutė buvo persiųsta į {selectedConversationName}", + "Dismiss" : "Atmesti", + "Go to conversation" : "Eikite į pokalbį", + "Detect language" : "Aptikti kalbą", + "The message could not be translated" : "Nepavyko išversti laiško", + "Translation copied to clipboard" : "Vertimas nukopijuotas į iškarpinę", + "Translation could not be copied" : "Nepavyko nukopijuoti vertimo", + "Translate message" : "Versti žinutę", + "Source language to translate from" : "Pradinė kalba, iš kurios versti", + "Translate from" : "Versti iš", + "Target language to translate into" : "Paskirties kalba, į kurią versti", + "Translate to" : "Versti į", + "Translating" : "Verčiama", + "This translation is AI generated and may contain mistakes." : "Šis vertimas yra sugeneruotas dirbtinio intelekto ir gali turėti klaidų.", + "Copy translated text" : "Kopijuoti išverstą tekstą", + "Error when scheduling the message" : "Klaida planuojant pranešimą", + "Reschedule" : "Pakeisti datą", + "Send now" : "Siųsti dabar", + "Choose a time" : "Pasirinkite laiką", + "Send at custom time" : "Siųsti pasirinktu laiku", + "Will be sent without notification" : "Bus išsiųsta be pranešimo", + "Message read by everyone who shares their reading status" : "Žinutę perskaitė visi, kurie pasidalijo savo skaitymo būsena", + "Message sent" : "Žinutė išsiųsta", + "Sent without notification" : "Nusiųsta be pranešimo", + "Deleting message" : "Žinutės ištrynimas", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Žinutė sėkmingai ištrinta, bet sukonfigūruotas botas arba „Matterbridge“ ir žinutė jau gali būti išplatinta kitoms paslaugoms", + "Message deleted successfully" : "Žinutė sėkmingai ištrinta", + "Message could not be deleted because it is too old" : "Nepavyko ištrinti žinutės, nes ji per sena", + "Only normal chat messages can be deleted" : "Galima ištrinti tik įprastas pokalbių žinutes", + "An error occurred while deleting the message" : "Trinant pranešimą įvyko klaida", + "Pinned" : "Prisegta", + "Your browser does not support playing audio files" : "Jūsų naršyklė nepalaiko garso įrašo failų atkūrimo", + "Contact" : "Kontaktas", + "{stack} in {board}" : "{stack} lentelėje {board}", + "Deck Card" : "Darbų kortelė", + "Remove {fileName}" : "Šalinti {fileName}", + "Open this location in OpenStreetMap" : "Atidaryti šią vietą „OpenStreetMap“ žemėlapyje", + "_%n reply_::_%n replies_" : ["%n atsakymas","%n atsakymai","%n atsakymų","%n atsakymų"], + "Sending message" : "Siunčiamas pranešimas", + "Failed to send the message. Click to try again" : "Nepavyko išsiųsti pranešimo. Spustelėkite, kad bandytumėte dar kartą.", + "Not enough free space to upload file" : "Nepakanka laisvos vietos failui įkelti", + "You cannot send messages to this conversation at the moment" : "Šiuo metu negalite siųsti žinučių į šį pokalbį", + "Could not update the message" : "Nepavyko atnaujinti pranešimo", + "Reply to thread \"{threadTitle}\"" : "Atsakyti į temą „{threadTitle}“", + "_You voted • %n vote_::_You voted • %n votes_" : ["Jūs balsavote • %n balsas","Jūs balsavote • %n balsai","Jūs balsavote • %n balsų","Jūs balsavote • %n balsų"], + "You voted" : "Jūs balsavote", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Spustelėkite, kad balsuotumėte • %n balsas","Spustelėkite, kad balsuotumėte • %n balsai","Spustelėkite, kad balsuotumėte • %n balsų","Spustelėkite, kad balsuotumėte • %n balsų"], + "Click to vote" : "Spustelėkite, kad balsuotumėte", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Apklausos projektas • %n pasirinkimas","Apklausos projektas • %n pasirinkimai","Apklausos projektas • %n pasirinkimų","Apklausos projektas • %n pasirinkimų"], + "_%n vote_::_%n votes_" : ["%n balsas","%n balsai","%n balsų","%n balsas"], + "Edit poll draft" : "Redaguoti apklausos projektą", + "Delete poll draft" : "Ištrinti apklausos juodraštį", + "Open poll" : "Pradėti apklausą", + "Closed poll" : "Uždaryta apklausa", + "See results" : "Rodyti rezultatus", + "Reactions" : "Reakcijos", + "No permission to post reactions in this conversation" : "Šiame pokalbyje nėra leidimo skelbti reakcijų", + "and {participant}" : "ir {participant}", + "_and %n other participant_::_and %n other participants_" : ["ir dar %n dalyvis","ir dar %n dalyviai","ir dar %n dalyvių","ir dar %n dalyvis"], + "Show all reactions" : "Rodyti visas reakcijas", + "Add more reactions" : "Pridėti daugiau reakcijų", + "Show or collapse system messages" : "Rodyti arba sutraukti sistemos pranešimus", + "No messages" : "Nėra laiškų", + "All messages have expired or have been deleted." : "Visos žinutės nebegalioja arba buvo ištrintos.", + "Generate summary with AI" : "Sukurkite santrauką naudodami AI", + "{author} (pinned by you)" : "{author} (jūs prisegėte)", + "{author} (pinned by {actor})" : "{author} (prisegė {actor})", + "Unpin" : "Atsegti", + "Cancel search" : "Atsisakyti paieškos", + "Add a phone number" : "Pridėti telefono numerį", + "Error: A password is required to create the conversation." : "Klaida: norint sukurti pokalbį, reikia įvesti slaptažodį.", + "All set, the conversation \"{conversationName}\" was created." : "Viskas paruošta, pokalbis „{conversationName}“ buvo sukurtas.", + "Create a new group conversation" : "Sukurti naują grupės pokalbį", + "Add participants" : "Pridėti dalyvius", + "Maximum length exceeded ({maxlength} characters)" : "Viršytas maksimalus ilgis ({maxlength} simbolių)", + "Conversation type" : "Pokalbio tipas", + "Conversation visibility" : "Pokalbio matomumas", + "Allow guests to join via link" : "Leisti svečiams prisijungti per nuorodą", + "Enter password" : "Įvesti slaptažodį", + "This conversation has been locked" : "Šis pokalbis užrakintas", + "No permission to post messages in this conversation" : "Neturite leidimo rašyti pranešimų šioje diskusijoje", + "Joining conversation …" : "Prisijungiama prie pokalbio…", + "Write a message without notification" : "Parašykite žinutę be pranešimo", + "Create a thread silently" : "Sukurti temą tyliai", + "Create a thread" : "Sukurti temą", + "Send message silently" : "Siųsti žinutę tyliai", + "Send message" : "Siųsti žinutę", + "Send without notification" : "Siųsti be pranešimo", + "The participant will not be notified about new messages" : "Dalyvis nebus informuojamas apie naujus pranešimus", + "Participants will not be notified about new messages" : "Dalyviai nebus informuojami apie naujus pranešimus", + "Message will be sent {datetimeString}" : "Pranešimas bus išsiųstas {datetimeString}", + "Thread title is required" : "Reikalingas temos pavadinimas", + "Message text is required" : "Būtinas žinutės tekstas", + "The message could not be edited" : "Nepavyko redaguoti žinutės", + "File to share" : "Failas, kurį bendrinti", + "File upload is not available in this conversation" : "Šiame pokalbyje failų įkėlimas negalimas", + "Message was successfully scheduled" : "Pranešimas sėkmingai suplanuotas", + "Add emoji" : "Pridėti šypsenėlę", + "Adding a mention will only notify users who did not read the message." : "Pridėjus paminėjimą, bus informuoti tik tie vartotojai, kurie neskaitė žinutės.", + "Thread title" : "Temos antraštė", + "Send later" : "Siųsti vėliau", + "Show scheduled messages" : "Rodyti suplanuotas žinutes", + "Cancel editing" : "Atšaukti redagavimą", + "Schedule message" : "Nustatyti pranešimo siuntimo laiką", + "{user} is out of office and might not respond." : "{user} yra išvykęs(-usi) ir gali neatsakyti", + "Absence period: {startDate} - {endDate}" : "Nebuvimo laikotarpis: {startDate} - {endDate}", + "Replacement:" : "Pakeitimas:", + "Share from {nextcloud}" : "Bendrinimas iš {nextcloud}", + "Share from Files" : "Bendrinti iš failų", + "Share files to the conversation" : "Bendrinkite failus pokalbyje", + "Upload from device" : "Įkelti iš įrenginio", + "Create new poll" : "Sukurti naują apklausą", + "Smart picker" : "\"Smart picker\"", + "Record voice message" : "Įrašyti balso pranešimą", + "End recording and send" : "Baigti įrašymą ir išsiųsti", + "Dismiss recording" : "Atšaukti įrašymą", + "Access to the microphone was denied" : "Prieiga prie mikrofono buvo uždrausta", + "Microphone either not available or disabled in settings" : "Mikrofonas arba neprieinamas, arba išjungtas nustatymuose", + "Error while recording audio" : "Klaida įrašant garso įrašą", + "Voice message {time} ({conversation})" : "Balso žinutė {time} ({conversation})", + "Generating summary of unread messages …" : "Neskaitytų pranešimų santraukos sukūrimas...", + "Summary is AI generated and might contain mistakes" : "Santrauka sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Error occurred during a summary generation" : "Generuojant santrauką įvyko klaida", + "New file" : "Naujas failas", + "Blank" : "Tuščia", + "Error while creating file" : "Klaida kuriant failą", + "Create and share a new file" : "Sukurti ir bendrinti naują failą", + "Name of the new file" : "Naujo failo pavadinimas", + "Create file" : "Sukurti failą", + "Someone is typing …" : "Kažkas rašo…", + "{user1} is typing …" : "{user1} rašo…", + "{user1} and {user2} are typing …" : "{user1} ir {user2} rašo…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ir {user3} rašo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ir dar %n kitas rašo…","{user1}, {user2}, {user3} ir dar %n kiti rašo…","{user1}, {user2}, {user3} ir dar %n kitų rašo…","{user1}, {user2}, {user3} ir dar %n kitų rašo…"], + "Add more files" : "Pridėti daugiau failų", + "Send" : "Siųsti", + "In this conversation {user} can:" : "Šiame pokalbyje {user} gali:", + "Edit default permissions for participants in {conversationName}" : "Redaguoti numatytuosius dalyvių leidimus {conversationName}", + "Start a call" : "Pradėti skambutį", + "Skip the lobby" : "Praleisti laukiamąjį", + "Can post messages" : "Gali skelbti pranešimus", + "Can post messages and reactions" : "Gali skelbti pranešimus ir reakcijas", + "Can add reactions" : "Galima pridėti reakcijas", + "Enable the microphone" : "Įjungti mikrofoną", + "Enable the camera" : "Įjungti kamerą", + "Share the screen" : "Bendrinti ekraną", + "Update permissions" : "Atnaujinti leidimus", + "Updating permissions" : "Leidimų atnaujinimas", + "No poll drafts" : "Nėra apklausų projektų", + "There is no poll drafts yet saved for this conversation" : "Šio pokalbio metu dar nėra išsaugotų apklausų projektų", + "Create poll in {name}" : "Sukurti apklausą {name}", + "Create poll" : "Sukurti apklausą", + "Error while importing poll" : "Klaida importuojant apklausą", + "Question" : "Klausimas", + "Ask a question" : "Užduoti klausimą", + "Import draft from file" : "Importuoti projektą iš failo", + "Answers" : "Atsakymai", + "Answer {option}" : "Atsakymas {option}", + "Delete poll option" : "Ištrinti apklausos variantą", + "Add answer" : "Pridėti atsakymą", + "Settings" : "Nustatymai", + "Anonymous poll" : "Anoniminė apklausa", + "Multiple answers" : "Keli atsakymai", + "Save as draft" : "Išsaugoti kaip juodraštį", + "Export draft to file" : "Eksportuoti juodraštį į failą", + "_Final results • %n vote_::_Final results • %n votes_" : ["Galutiniai rezultatai • %n balsas","Galutiniai rezultatai • %n balsai","Galutiniai rezultatai • %n balsų","Galutiniai rezultatai • %n balsų"], + "Your vote is anonymous" : "Jūsų balsas yra anoniminis", + "You voted for this option" : "Jūs balsavote už šį variantą", + "End poll" : "Baigti apklausą", + "Change your vote" : "Keisti savo balsą", + "Withdraw vote" : "Atšaukti balsą", + "Results" : "Rezultatai", + "Download as spreadsheet" : "Atsisiųsti kaip skaičiuoklę", + "Download as CSV" : "Atsisiųsti kaip CSV", + "Voted participants" : "Balsavo dalyviai", + "Send a message to \"{roomName}\"" : "Siųsti žinutę „{roomName}“", + "Hide list of participants" : "Slėpti dalyvių sąrašą", + "Show list of participants" : "Rodyti dalyvių sąrašą", + "Assistance requested in {roomName}" : "Paprašyta pagalbos {roomName}", + "The message was sent to \"{roomName}\"" : "Žinutė buvo išsiųsta adresu „{roomName}“", + "Dismiss request for assistance" : "Atšaukti prašymą suteikti pagalbą", + "Send message to room" : "Siųsti žinutę į kambarį", + "Back to main room" : "Atgal į pagrindinį kambarį", + "Back to your room" : "Grįžti į savo kambarį", + "Message all rooms" : "Siųsti pranešimą į visus kambarius", + "Start session" : "Pradėti sesiją", + "Start a call before you start a breakout room session" : "Pradėkite skambutį prieš pradėdami grupinio darbo sesiją", + "Stop session" : "Sustabdyti sesiją", + "The message was sent to all breakout rooms" : "Žinutė buvo išsiųsta į visus grupinio darbo kambarius", + "Send a message to all breakout rooms" : "Siųsti žinutę į visus grupinio darbo kambarius", + "Breakout rooms are not started" : "Grupinio darbo kambariai nepradėti", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Skambučiai be didelio našumo posistemės gali sukelti ryšio problemų ir didelę įrenginių apkrovą. {linkstart} Sužinokite daugiau {linkend}", + "Talk setup incomplete" : "„Pokalbių“ nustatymas nebaigtas", + "Disable lobby" : "Išjungti laukimo salę", + "Settings for participant \"{user}\"" : "Dalyvio „{user}“ nustatymai", + "Participant \"{user}\"" : "Dalyvis „{user}“", + "moderator" : "moderatorius", + "bot" : "botas", + "guest" : "svečias", + "Ringing …" : "Skambina…", + "Call rejected" : "Skambutis atmestas", + "{time} talking …" : "{time} kalbama…", + "{time} talking time" : " pokalbio trukmė {time}", + "Raised their hand" : "Pakėlė ranką", + "Joined with video" : "Prisijungta su vaizdu", + "Joined via phone" : "Prisijungta telefonu", + "Joined with audio" : "Prisijungta su garsu", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Tekstas turi būti ne ilgesnis kaip {maxLength} simbolių arba trumpesnis. Jūsų dabartinis tekstas yra {charactersCount} simbolių ilgio.Teksto ilgis turi būti ne didesnis kaip ženklai. Jūsų dabartinis tekstas yra ženklai ilgio.", + "Remove group and members" : "Šalinti grupę ir narius", + "Remove team and members" : "Šalinti komandą ir narius", + "Remove participant" : "Šalinti dalyvį", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Ar tikrai norite pašalinti grupę „{displayName}“ ir jos narius iš šio pokalbio?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Ar tikrai norite pašalinti komandą „{displayName}“ ir jos narius iš šio pokalbio?", + "Do you really want to remove {displayName} from this conversation?" : "Ar tikrai norite pašalinti {displayName} iš šio pokalbio?", + "Notification was sent to {displayName}" : "Pranešimas išsiųstas {displayName}", + "Could not send notification to {displayName}" : "Nepavyko išsiųsti pranešimo {displayName}", + "Permissions granted to {displayName}" : "Suteikti leidimai {displayName}", + "Could not modify permissions for {displayName}" : "Nepavyko modifikuoti leidimų, skirtų {displayName}", + "Permissions removed for {displayName}" : "Leidimai pašalinti {displayName}", + "Permissions set to default for {displayName}" : "Leidimai {displayName} nustatyti pagal numatytuosius nustatymus", + "Phone number could not be hung up" : "Nepavyko padėti ragelio telefono numerio", + "Phone number could not be put on hold" : "Negalima perkelti skambučio į laukimo režimą", + "Phone number could not be muted" : "Nepavyko išjungti telefono skambučio garso", + "Phone number could not be unmuted" : "Nepavyko įjungti telefono skambučio garso", + "DTMF message could not be sent" : "Nepavyko išsiųsti DTMF pranešimo", + "Phone number copied to clipboard" : "Telefono numeris nukopijuotas į iškarpinę", + "Phone number could not be copied" : "Nepavyko nukopijuoti telefono numerio", + "in the lobby" : "laukiamąjame", + "Dial out phone" : "Išeinantis skambutis", + "Hang up phone" : "Padėti ragelį", + "Move back to lobby" : "Grįžti į laukiamąjį", + "Move to conversation" : "Pereiti prie pokalbio", + "Dial-in PIN" : "Skambinimo PIN kodas", + "Demote from moderator" : "Pažeminti iš moderatorių", + "Promote to moderator" : "Paaukštinti į moderatorius", + "Resend invitation" : "Siųsti pakvietimą iš naujo", + "Send call notification" : "Siųsti pranešimą apie skambutį", + "Dial out phone number" : "Surinkti telefono numerį", + "Resume call for phone number" : "Tęsti skambutį telefono numeriu", + "Put phone number on hold" : "Užlaikyti telefono numerį", + "Unmute phone number" : "Įjungti telefono numerio garsą", + "Mute phone number" : "Nutildyti telefono numerį", + "Copy phone number" : "Kopijuoti telefono numerį", + "Reset custom permissions" : "Atstatyti tinkintus leidimus", + "Grant all permissions" : "Suteikti visus leidimus", + "Remove all permissions" : "Šalinti visus leidimus", + "Also ban from this conversation" : "Taip pat uždrausti dalyvauti šiame pokalbyje", + "Internal note (reason to ban)" : "Vidinė pastaba (blokavimo priežastis)", + "Remove" : "Šalinti", + "Permissions modified for {displayName}" : "Leidimai atnaujinti {displayName}", + "Add users, groups or teams" : "Pridėti vartotojus, grupes arba komandas", + "Add users or groups" : "Pridėti vartotojus ar grupes", + "Add users or teams" : "Pridėti vartotojus arba komandas", + "Add users" : "Pridėti vartotojus", + "Add groups or teams" : "Pridėti grupes arba komandas", + "Add groups" : "Pridėti grupes", + "Add teams" : "Pridėti komandas", + "Add other sources" : "Pridėti kitus šaltinius", + "Add emails" : "Pridėti el. paštus", + "Integrations" : "Integracijos", + "Add federated users" : "Pridėti federuotus vartotojus", + "Searching …" : "Ieškoma…", + "Search for more users" : "Ieškoti daugiau vartotojų", + "You can search or add participants via name, email, or Federated Cloud ID" : "Galite ieškoti dalyvių arba juos pridėti pagal vardą, el. paštą arba federuotos debesijos ID“", + "Search or add participants" : "Ieškoti arba pridėti dalyvius", + "Invitation was sent to {actorId}" : "Kvietimas buvo išsiųstas {actorId}", + "An error occurred while adding the participants" : "Pridedant dalyvius įvyko klaida", + "A new group conversation with selected participant will be created" : "Bus sukurta nauja grupinė pokalbių sesija su pasirinktu dalyviu", + "Participants" : "Dalyviai", + "Pinned by a deleted user" : "Prisegė ištrintas vartotojas", + "Participants ({count})" : "Dalyviai ({count})", + "Open chat" : "Atverti pokalbį", + "You have new unread messages in the chat." : "Pokalbyje turite naujų neskaitytų žinučių.", + "You have been mentioned in the chat." : "Buvote paminėtas pokalbyje.", + "Search messages" : "Ieškoti žinučių", + "Chat" : "Pokalbis", + "Details" : "Išsamiau", + "Shared items" : "Bendrinami elementai", + "Search in {name}" : "Ieškoti esančių {name}", + "Threads in {name}" : "Temos esančios {name}", + "{actor} in {conversation}" : "{actor} pokalbyje {conversation}", + "Search messages …" : "Ieškoti žinučių...", + "Search options" : "Paieškos parinktys", + "From User" : "Iš vartotojo", + "Since" : "Nuo tada", + "Until" : "Iki", + "No results found" : "Nerasta jokių rezultatų", + "Load more results" : "Įkelti daugiau rezultatų", + "Recent threads" : "Naujausios temos", + "Projects" : "Projektai", + "No shared items" : "Nėra bendrinamų elementų", + "Thread notifications" : "Temos pranešimai", + "Thread actions" : "Temų veiksmai", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Nuoroda į pokalbį", + "No open conversations found" : "Nerasta jokių atvirų pokalbių", + "Either there are no open conversations or you joined all of them." : "Arba nėra atvirų pokalbių, arba jūs prie jų visų prisijungėte.", + "Check spelling or use complete words." : "Patikrinkite rašybą arba rašykite pilnais žodžiais.", + "Search conversations or users" : "Ieškoti pokalbių ar vartotojų", + "Select conversation" : "Pasirinkite pokalbį", + "Number length is not valid" : "Numerio ilgis netinkamas", + "Region code is not valid" : "Regiono kodas neteisingas", + "Number length is too short" : "Numerio ilgis per trumpas", + "Number length is too long" : "Numerio ilgis per didelis", + "Number is not valid" : "Numeris yra neteisingas", + "Phone numbers" : "Telefono numeriai", + "Display name: {name}" : "Rodomas vardas: {name}", + "Edit display name" : "Redaguoti rodomą vardą", + "Display name (required)" : "Rodomas vardas (privaloma)", + "Save name" : "Išsaugoti vardą", + "I picked message bubbles" : "Išsirinkau žinučių burbulus", + "I picked the list style" : "Pasirinkau sąrašo stilių", + "Error while setting personal setting" : "Klaida nustatant asmeninius nustatymus", + "Error while saving sounds setting" : "Klaida išsaugant garso nustatymus", + "Compact conversations list" : "Sutrumpintas pokalbių sąrašas", + "Chat appearance" : "Pokalbio išvaizda", + "Messages list" : "Žinučių sąrašas", + "Message bubbles" : "Žinučių burbulai", + "Play sounds when participants join or leave a call" : "Paleisti garsą, kai dalyviai prisijungia prie pokalbio arba jį palieka", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Šiuo metu negalima naudoti „iPhone“ ir „iPad“ įrenginiuose dėl gamintojo nustatytų techninių apribojimų", + "Notification settings" : "Pranešimų nustatymai", + "Sounds for chat and call notifications" : "Garsai, skirti pokalbių ir skambučių pranešimams", + "Invalid language ({languageId})" : "Neteisinga kalba ({languageId})", + "Default language" : "Numatytoji kalba", + "Default language ({languageName})" : "Numatomoji kalba ({languageName})", + "Error when trying to load the available live translation languages" : "Klaida bandant įkelti galimas vertimo realiuoju laiku kalbas", + "Error when trying to set live translation language" : "Klaida bandant nustatyti vertimo realiuoju laiku kalbą", + "Set language used to show the transcriptions" : "Nustatyti kalbą, kuria rodomos transkripcijos", + "Select location for attachments" : "Pasirinkti vietą priedams", + "Error while setting attachment folder" : "Klaida nustatant priedų aplanką", + "Error while setting read status privacy" : "Klaida nustatant skaitymo būsenos privatumą", + "Error while setting typing status privacy" : "Klaida nustatant rašymo būsenos privatumą", + "Error while setting default media state" : "Klaida nustatant numatytąjį medijos būseną", + "Turn camera and microphone off by default" : "Pagal numatytuosius nustatymus išjungti kamerą ir mikrofoną", + "Blur camera background by default" : "Pagal numatytuosius nustatymus išblukti kameros foną", + "Skip device preview before joining a call" : "Prieš prisijungiant prie pokalbio praleisti įrenginio peržiūrą", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Prisijungus kamera bus išjungta. Rodoma visada, jei reikalingas sutikimas įrašyti.", + "Appearance & Sounds" : "Išvaizda ir Garsai", + "Privacy" : "Privatumas", + "Send read receipts" : "Siųsti skaitymo patvirtinimus", + "When off, all read statuses will be hidden" : "Kai funkcija išjungta, visi skaitymo statusai bus paslėpti", + "Share typing status" : "Bendrinti rašymo būseną", + "When off, all typing indicators will be hidden" : "Kai funkcija išjungta, visi rašymo indikatoriai bus paslėpti", + "Attachments folder" : "Priedų aplankas", + "Toggle full screen" : "Perjungti visą ekraną", + "Return to Home screen" : "Grįžti į Pradžios ekraną", + "Search" : "Ieškoti", + "Shortcuts while in a chat" : "Spartieji klavišai dalyvaujant pokalbyje", + "Focus the chat input" : "Pasirinkti pokalbio rašymo laukelį", + "Unfocus the chat input to use shortcuts" : "Išeiti iš pokalbio rašymo laukelio, kad veiktų spartieji klavišai", + "Edit your last message" : "Redaguoti paskutinį pranešimą", + "Shortcuts while in a call" : "Spartieji klavišai dalyvaujant skambutyje", + "Camera on and off" : "Įjungti ar išjungti kamerą", + "Microphone on and off" : "Įjungti ar išjungti mikrofoną", + "Raise or lower hand" : "Pakelti ar nuleisti ranką", + "Push to talk or push to mute" : "Paspausk ir kalbėk arba paspausk ir nutildyk", + "Zoom-in / zoom-out a screen share" : "Padidinti / sumažinti ekrano vaizdą", + "Mouse wheel" : "Peles ratukas", + "Start call silently" : "Pradėti skambutį tyliai", + "Start call" : "Pradėti skambutį", + "End call" : "Baigti pokalbį", + "The server was updated, you cannot start or join a call." : "Serveris buvo atnaujintas, todėl negalite pradėti pokalbio ar prie jo prisijungti.", + "This call has just ended" : "Šis pokalbis ką tik baigėsi", + "You will be able to join the call only after a moderator starts it." : "Prisijungti prie pokalbio galėsite tik tada, kai jį pradės moderatorius.", + "End call for everyone" : "Baigti pokalbį visiems", + "Starting the recording" : "Pradėti įrašymą", + "Recording" : "Įrašymas", + "The call has been running for one hour." : "Skambutis vyksta jau valandą.", + "Cancel recording start" : "Atšaukti įrašymo pradžią", + "Stop recording" : "Sustabdyti įrašymą", + "Send a reaction" : "Siųsti reakciją", + "React with {reaction}" : "Reaguoti naudojant {reaction}", + "All tasks done!" : "Visos užduotys atliktos!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} iš %n užduoties","{done} iš %n užduočių","{done} iš %n užduočių","{done} iš %n užduočių"], + "Add participants to this call" : "Pridėti dalyvius prie šio skambučio", + "_%n participant in call_::_%n participants in call_" : ["%n dalyvis skambutyje","%n dalyviai skambutyje","%n dalyvių skambutyje","%n dalyvių skambutyje"], + "Scheduled messages" : "Iš anksto suplanuoti pranešimai", + "You are not allowed to enable screensharing" : "Jums neleidžiama įjungti ekrano bendrinimo", + "No screensharing" : "Nėra ekrano bendrinimo", + "Screensharing options" : "Ekrano bendrinimo parinktys", + "Enable screensharing" : "Įjungti ekrano bendrinimą", + "Bad sent video and screen quality." : "Prasta išsiųsto vaizdo ir ekrano kokybė.", + "Bad sent screen quality." : "Prasta išsiųsto ekrano kokybė.", + "Bad sent video quality." : "Prasta išsiųsto vaizdo kokybė.", + "Bad sent audio, video and screen quality." : "Prasta išsiųsto garso, vaizdo ir ekrano kokybė.", + "Bad sent audio and screen quality." : "Prasta išsiųsto garso ir ekrano kokybė.", + "Bad sent audio and video quality." : "Prasta išsiųsto garso ir vaizdo kokybė.", + "Bad sent audio quality." : "Prasta išsiųsto garso kokybė.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano. Norėdami išspręsti šią problemą, bandykite išjungti fono suliejimo funkciją arba savo vaizdo transliaciją, kai bendrinate ekraną.", + "Disable background blur" : "Išjungti fono suliejimą", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano. Norėdami išspręsti šią problemą, pabandykite išjungti vaizdo transliaciją, kol bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali jūsų nematyti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra perkrautas, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, bandykite išjungti fono suliejimo funkciją arba išjungti vaizdo transliaciją, kai bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, ir nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo transliaciją, kol bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, ir nematyti jūsų ekrano. Norėdami išspręsti šią problemą, pabandykite išjungti ekrano bendrinimą.", + "Disable screenshare" : "Išjungti ekrano bendrinimą", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo fono suliejimo funkciją arba išjungti vaizdo transliaciją.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo transliaciją.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote.", + "Screen sharing is not supported by your browser." : "Jūsų naršyklė nepalaiko ekrano bendrinimo.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekrano bendrinimas reikalauja, kad puslapis būtų įkeltas per HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekrano bendrinimas reikalauja, kad puslapis būtų įkeltas per HTTPS.", + "An error occurred while starting screensharing." : "Pradedant ekrano bendrinimą, įvyko klaida.", + "Select virtual background" : "Pasirinkite virtualų foną", + "Show your screen" : "Rodyti savo ekraną", + "Stop screensharing" : "Stabdyti ekrano bendrinimą", + "Mute others" : "Išjungti kitų garsą", + "Start recording" : "Pradėti įrašymą", + "Set up breakout rooms" : "Sukurti grupinio darbo kambarius", + "Download attendance list" : "Atsisiųsti dalyvių sąrašą", + "Open Calendar" : "Atverti kalendorių", + "Remove participant {name}" : "Šalinti dalyvį {name}", + "Would you like to delete this conversation?" : "Ar norėtumėte ištrinti šį pokalbį?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Šis pokalbis bus automatiškai ištrintas visiems po %n dienos neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo."], + "Are you sure you want to delete this conversation?" : "Ar tikrai norite ištrinti šį pokalbį?", + "Delete now" : "Ištrinti dabar", + "Keep" : "Palikti", + "Open dialpad" : "Atverti numerio rinkiklį", + "Select a region" : "Pasirinkti regioną", + "Local time: {time}" : "Vietinis laikas: {time}", + "Scheduled {datetime}" : "Numatyta {datetime}", + "Scheduled for {datetime}" : "Suplanuota {datetime}", + "Search …" : "Ieškoti…", + "Message without mention" : "Rašyti be paminėjimo", + "Mention myself" : "Paminėti save", + "Mention everyone" : "Paminėti kiekvieną", + "Select a conversation" : "Pasirinkite pokalbį", + "Select a mode" : "Pasirinkite režimą", + "You do not have permissions to access this conversation." : "Jūs neturite leidimų pasiekti šio pokalbio.", + "Join a different conversation or start a new one." : "Prisijunkite prie kito pokalbio arba pradėkite naują.", + "The conversation does not exist" : "Pokalbio nėra", + "Join a conversation or start a new one!" : "Prisijunkite prie pokalbio arba pradėkite naują!", + "Duplicate session" : "Dubliuoti sesiją", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Šis pokalbis buvo atidarytas kitame skirtuke. Dabartinė serverio versija nepalaiko pokalbio atidarymo keliuose skirtukuose.", + "Creating and joining a conversation with \"{userid}\"" : "Pokalbio su „{userid}“ kūrimas ir prisijungimas prie jo", + "Join a conversation or start a new one" : "Prisijunkite prie pokalbio arba pradėkite naują", + "Error while joining the conversation" : "Klaida prisijungiant prie pokalbio", + "Another user" : "Kitas vartotojas", + "Hey! Are you using the list style or message bubbles?" : "Ei! Ar naudojate sąrašo stilių, ar pranešimų burbulus?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud vartotojas", + "User password" : "Naudotojo slaptažodis", + "Talk conversation" : "„Pokalbių“ pokalbis", + "Skip TLS verification" : "Praleiskite TLS patvirtinimą", + "Matrix server URL" : "Matrix serverio URL", + "User" : "Vartotojas", + "Matrix channel" : "Matrix kanalas", + "Mattermost server URL" : "„Mattermost“ serverio URL", + "Mattermost user" : "„Mattermost“ vartotojas", + "Team name" : "Komandos pavadinimas", + "Channel name" : "Kanalo pavadinimas", + "Rocket.Chat server URL" : "Rocket.Chat serverio URL", + "User name or email address" : "Naudotojo vardas ar el. pašto adresas", + "Rocket.Chat channel" : "Rocket.Chat kanalas", + "Zulip server URL" : "„Zulip“ serverio URL", + "Bot user name" : "Boto vartotojo vardas", + "Bot API key" : "Boto API raktas", + "Zulip channel" : "„Zulip“ kanalas", + "API token" : "API prieigos raktas", + "Slack channel" : "Slack kanalas", + "Server ID or name" : "Serverio ID ar pavadinimas", + "Channel ID (prefixed with \"ID:\") or name" : "Kanalo ID (su prefiksu „ID:“) arba pavadinimas", + "Channel" : "Kanalas", + "Login" : "Prisijungti", + "Chat ID" : "Pokalbio ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC serverio URL (pvz., chat.freenode.net:6667)", + "Nickname" : "Slapyvardis", + "Connection password" : "Ryšio slaptažodis", + "IRC channel" : "IRC kanalas", + "Channel password" : "Kanalo slaptažodis", + "NickServ nickname" : "„NickServ“ slapyvardis", + "NickServ password" : "„NickServ“ slaptažodis", + "Use TLS" : "Naudoti TLS", + "Use SASL" : "Naudoti SASL", + "Tenant ID" : "Nuomotojo ID", + "Client ID" : "Kliento ID", + "Team ID" : "Komandos ID", + "Thread ID" : "Temos ID", + "XMPP/Jabber server URL" : "XMPP/Jabber serverio URL", + "MUC server URL" : "MUC serverio URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Prisegtos žinutės", + "Media" : "Medija", + "Polls" : "Apklausos", + "Deck cards" : "„Darbų“ kortelės", + "Voice messages" : "Balso žinutės", + "Locations" : "Vietos", + "Call recordings" : "Skambučių įrašai", + "Audio" : "Garso įrašai", + "Show all pinned messages" : "Rodyti visas prisegtas žinutes", + "Show all media" : "Rodyti visą mediją", + "Show all files" : "Rodyti visus failus", + "Show all polls" : "Rodyti visas apklausas", + "Show all deck cards" : "Rodyti visas „Darbų“ korteles", + "Show all voice messages" : "Rodyti visus balso pranešimus", + "Show all locations" : "Rodyti visas vietas", + "Show all call recordings" : "Rodyti visus skambučių įrašus", + "Show all audio" : "Rodyti visus garso įrašus", + "Show all other" : "Rodyti visa kita", + "Follow conversation settings" : "Sekite pokalbio nustatymus", + "Group" : "Grupė", + "Team" : "Komanda", + "You reconnected to the call" : "Jūs vėl prisijungėte prie skambučio", + "{actor} reconnected to the call" : "{actor} vėl prisijungta prie skambučio", + "You added {user0} and {user1}" : "Jūs pridėjote {user0} ir {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Jūs pridėjote {user0}, {user1} ir %n dar kitą dalyvį","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių"], + "An administrator added you and {user0}" : "Administratorius pridėjo jus ir {user0}", + "{actor} added you and {user0}" : "{actor} pridėjo jus ir {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administratorius pridėjo jus, {user0} ir %n kitą dalyvį","Administratorius pridėjo jus, {user0} ir %n kitus dalyvius","Administratorius pridėjo jus, {user0} ir %n kitų dalyvių","Administratorius pridėjo jus, {user0} ir %n kitų dalyvių"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} pridėjo jus, {user0} ir %n kitą dalyvį","{actor} pridėjo jus, {user0} ir %n kitus dalyvius","{actor} pridėjo jus, {user0} ir %n kitų dalyvių","{actor} pridėjo jus, {user0} ir %n kitų dalyvių"], + "An administrator added {user0} and {user1}" : "Administratorius pridėjo {user0} ir {user1}", + "{actor} added {user0} and {user1}" : "{actor} pridėjo {user0} ir {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administratorius pridėjo {user0}, {user1} ir %n kitą dalyvį","Administratorius pridėjo {user0}, {user1} ir %n kitus dalyvius","Administratorius pridėjo {user0}, {user1} ir %n kitų dalyvių","Administratorius pridėjo {user0}, {user1} ir %n kitų dalyvių"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} pridėjo {user0}, {user1} ir %n kitą dalyvį","{actor} pridėjo {user0}, {user1} ir %n kitus dalyvius","{actor} pridėjo {user0}, {user1} ir %n kitų dalyvių","{actor} pridėjo {user0}, {user1} ir %n kitų dalyvių"], + "You removed {user0} and {user1}" : "Jūs pašalinote{user0} ir {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Jūs pašalinote {user0}, {user1} ir %n kitą dalyvį","Jūs pašalinote {user0}, {user1} ir %n kitus dalyvius","Jūs pašalinote {user0}, {user1} ir %n kitų dalyvių","Jūs pašalinote {user0}, {user1} ir %n kitų dalyvių"], + "An administrator removed you and {user0}" : "Administratorius pašalino jus ir {user0}", + "{actor} removed you and {user0}" : "{actor} pašalino jus ir {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administratorius pašalino jus, {user0} ir %n kitą dalyvį","Administratorius pašalino jus, {user0} ir %n kitus dalyvius","Administratorius pašalino jus, {user0} ir %n kitų dalyvių","Administratorius pašalino jus, {user0} ir %n kitų dalyvių"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} pašalino jus, {user0} ir %n kitą dalyvį","{actor} pašalino jus, {user0} ir %n kitus dalyvius","{actor} pašalino jus, {user0} ir %n kitų dalyvių","{actor} pašalino jus, {user0} ir %n kitų dalyvių"], + "An administrator removed {user0} and {user1}" : "Administratorius pašalino {user0} ir {user1}", + "{actor} removed {user0} and {user1}" : "{actor} pašalino {user0} ir {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administratorius pašalino {user0}, {user1} ir %n kitą dalyvį","Administratorius pašalino {user0}, {user1} ir %n kitus dalyvius","Administratorius pašalino {user0}, {user1} ir %n kitų dalyvių","Administratorius pašalino {user0}, {user1} ir %n kitų dalyvių"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} pašalino {user0}, {user1} ir %n kitą dalyvį","{actor} pašalino {user0}, {user1} ir %n kitus dalyvius","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių"], + "You and {user0} joined the call" : "Jūs ir {user0} prisijungėte prie pokalbio", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Jūs, {user0} ir %n kitas dalyvis prisijungėte prie pokalbio","Jūs, {user0} ir %n kiti dalyviai prisijungėte prie pokalbio","Jūs, {user0} ir %n kitų dalyvių prisijungėte prie pokalbio","Jūs, {user0} ir %n kitų dalyvių prisijungėte prie pokalbio"], + "{user0} and {user1} joined the call" : "{user0} ir {user1} prisijungė prie skambučio", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ir %n kitas dalyvis prisijungė prie skambučio","{user0}, {user1} ir %n kiti dalyviai prisijungė prie skambučio","{user0}, {user1} ir %n kitų dalyvių prisijungė prie skambučio","{user0}, {user1} ir %n kitų dalyvių prisijungė prie skambučio"], + "You and {user0} left the call" : "Jūs ir {user0} išėjote iš pokalbio", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Jūs, {user0} ir %n kitas dalyvis išėjote iš pokalbio","Jūs, {user0} ir %n kiti dalyviai išėjote iš pokalbio","Jūs, {user0} ir %n kitų dalyvių išėjote iš pokalbio","Jūs, {user0} ir %n kitų dalyvių išėjote iš pokalbio"], + "{user0} and {user1} left the call" : "{user0} ir {user1} išėjo iš pokalbio", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ir %n kitas dalyvis išėjo iš pokalbio","{user0}, {user1} ir %n kiti dalyviai išėjo iš pokalbio","{user0}, {user1} ir %n kitų dalyvių išėjo iš pokalbio","{user0}, {user1} ir %n kitų dalyvių išėjo iš pokalbio"], + "You promoted {user0} and {user1} to moderators" : "Jūs {user0} ir {user1} paskyrėte moderatoriais", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Jūs {user0}, {user1} ir %n kitą dalyvį paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitus dalyvius paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitų dalyvių paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitų dalyvių paskyrėte moderatoriais"], + "An administrator promoted you and {user0} to moderators" : "Administratorius jus ir {user0} paskyrė moderatoriais", + "{actor} promoted you and {user0} to moderators" : "{actor} paskyrė jus ir {user0} moderatoriais", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administratorius jus, {user0} ir %n kitą dalyvį paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitus dalyvius paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitų dalyvių paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitų dalyvių paskyrė moderatoriais"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} paskyrė jus, {user0} ir %n kitą dalyvį moderatoriais","{actor} paskyrė jus, {user0} ir %n kitus dalyvius moderatoriais","{actor} paskyrė jus, {user0} ir %n kitų dalyvių moderatoriais","{actor} paskyrė jus, {user0} ir %n kitų dalyvių moderatoriais"], + "An administrator promoted {user0} and {user1} to moderators" : "Administratorius {user0} ir {user1} paskyrė moderatoriais", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} paskyrė {user0} ir {user1} moderatoriais ", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administratorius {user0}, {user1} ir %n kitą dalyvį paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitus dalyvius paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitų dalyvių paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitų dalyvių paskyrė moderatoriais"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} paskyrė {user0}, {user1} ir %n kitą dalyvį moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitus dalyvius moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitų dalyvių moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitų dalyvių moderatoriais"], + "You demoted {user0} and {user1} from moderators" : "Jūs nušalinote {user0} ir {user1} iš moderatorių", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Jūs nušalinote {user0}, {user1} ir %n kitą dalyvį iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitus dalyvius iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitų dalyvių iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "An administrator demoted you and {user0} from moderators" : "Administratorius nušalino jus ir {user0} iš moderatorių", + "{actor} demoted you and {user0} from moderators" : "{actor} pašalino jus ir {user0} iš moderatorių", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administratorius nušalino jus, {user0} ir %n kitą dalyvį iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitus dalyvius iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitų dalyvių iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitų dalyvių iš moderatorių"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} pašalino jus, {user0} ir %n kitą dalyvį iš moderatorių","{actor} pašalino jus, {user0} ir %n kitus dalyvius iš moderatorių","{actor} pašalino jus, {user0} ir %n kitų dalyvių iš moderatorių","{actor} pašalino jus, {user0} ir %n kitų dalyvių iš moderatorių"], + "An administrator demoted {user0} and {user1} from moderators" : "Administratorius nušalino {user0} ir {user1} iš moderatorių", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} pašalino {user0} ir {user1} iš moderatorių", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administratorius nušalino {user0}, {user1} ir %n kitą dalyvį iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitus dalyvius iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} pašalino {user0}, {user1} ir %n kitą dalyvį iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitus dalyvius iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "You:" : "Jūs:", + "You: {lastMessage}" : "Jūs: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serveris buvo atnaujintas.", + "(edited by you)" : "(jūsų redaguota)", + "(edited by a deleted user)" : "(redagavo ištrintas vartotojas)", + "(edited by {moderator})" : "(redagavo {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Bandote prisijungti prie pokalbio, nors kituose languose ar kituose įrenginiuose jau vyksta sesija. Šiuo metu Nextcloud „Pokalbiai“ šios funkcijos nepalaiko. Ką norite daryti?", + "Leave this page" : "Išeiti iš šio puslapio", + "Join here" : "Prisijunkite čia", + "Deck card has been posted to {conversation}" : "Darbų kortelė buvo išsiųsta į {conversation}", + "An error occurred while posting deck card to conversation" : "Įkeliant kortelę į pokalbį įvyko klaida", + "Post to a conversation" : "Paskelbti pokalbyje", + "Post to conversation" : "Paskelbti pokalbyje", + "The recording failed. Please contact your administrator." : "Įrašyti nepavyko. Susisiekite su administratoriumi.", + "Location has been posted to {conversation}" : "Vieta buvo paskelbta {conversation}", + "Conversation password has been saved" : "Pokalbio slaptažodis įrašytas", + "Conversation password has been removed" : "Pokalbio slaptažodis pašalintas", + "Error occurred while saving conversation password" : "Įrašant pokalbio slaptažodį įvyko klaida", + "Could not post message: {errorMessage}" : "Nepavyko paskelbti žinutės: {errorMessage}", + "An error occurred while fetching the participants" : "Gaunant dalyvius, įvyko klaida", + "Invitations sent" : "Pakvietimai išsiųsti", + "{guest} (guest)" : "{guest} (svečias)", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} sukūrė apklausą, pavadinimu „{name}“. Spustelėkite norėdami dalyvauti", + "Failed to add reaction" : "Nepavyko pridėti reakcijos", + "Failed to remove reaction" : "Nepavyko pašalinti reakcijos", + "You are not allowed to share files" : "Jums neleidžiama bendrinti failų", + "Error while sharing file" : "Klaida bendrinant failą", + "Later today – {timeLocale}" : "Šiandien vėliau – {timeLocale}", + "Tomorrow – {timeLocale}" : "Rytoj – {timeLocale}", + "This weekend – {timeLocale}" : "Šį savaitgalį – {timeLocale}", + "Next week – {timeLocale}" : "Kitą savaitę – {timeLocale}", + "Message link copied to clipboard" : "Žinutės nuoroda nukopijuota į iškarpinę", + "Conversation link copied to clipboard" : "Pokalbio nuoroda nukopijuota į iškarpinę", + "The link could not be copied" : "Nepavyko nukopijuoti nuorodos", + "Error while parsing a PROPFIND error" : "Klaida analizuojant „PROPFIND“ klaidą", + "Please reload the page." : "Prašome įkelti puslapį iš naujo.", + "Do not disturb" : "Netrukdyti", + "Away" : "Atsitraukęs", + "Microphone {number}" : "Mikrofonas {number}", + "Camera {number}" : "Kamera {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Atrodo, kad kalbate su išjungtu mikrofonu, įjunkite savo garsą, jei norite, kad kiti jus girdėtų", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tai užtrunka ilgiau, nei tikėtasi. Ar medijos leidimai jau yra suteikti (arba atmesti)? Jeigu taip, tuomet paleiskite savo naršyklę iš naujo, nes garsas ir vaizdas patiria nesėkmę", + "Access to microphone & camera is only possible with HTTPS" : "Prieiga prie mikrofono ir kameros yra įmanoma tik naudojant HTTPS", + "Please move your setup to HTTPS" : "Perkelkite savo sąranką į HTTPS", + "Access to microphone & camera was denied" : "Prieiga prie mikrofono ir kameros buvo uždrausta", + "WebRTC is not supported in your browser" : "Jūsų naršyklėje WebRTC nėra palaikoma", + "Please use a different browser like Firefox or Chrome" : "Naudokite kitą naršyklę, tokią kaip Firefox ar Chrome", + "Error while accessing microphone & camera" : "Klaida gaunant prieigą prie mikrofono ir kameros", + "%s Talk on your mobile devices" : "%s Pokalbiai jūsų mobiliuosiuose įrenginiuose", + "Join conversations at any time, anywhere, on any device." : "Prisijunkite prie pokalbių bet kur, bet kada, bet kokiame įrenginyje.", + "Android app" : "Android programėlė", + "iOS app" : "iOS programėlė", + "__language_name__" : "Lietuvių", + "Tasks" : "Užduotys", + "Notes" : "Užrašai", + "Talk conversation for event" : "„Pokalbių“ pokalbis renginiui", + "Set reminder for later today" : "Nustatyti priminimą šiandien vėliau", + "Set reminder for tomorrow" : "Nustatyti priminimą rytoj", + "Set reminder for this weekend" : "Nustatyti priminimą šį savaitgalį", + "Set reminder for next week" : "Nustatyti priminimą kitą savaitę", + "Talk recording from {time} ({conversation})" : "„Pokalbiai“ įrašas iš {time} ({conversation})", + "Your privacy setting has been saved" : "Jūsų privatumo nustatymas įrašytas" +}, +"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/lt_LT.json b/l10n/lt_LT.json new file mode 100644 index 0000000..450c734 --- /dev/null +++ b/l10n/lt_LT.json @@ -0,0 +1,2160 @@ +{ "translations": { + "a conversation" : "pokalbis", + "(Duration %s)" : "(Trukmė %s)", + "You attended a call with {user1}" : "Jūs dalyvavote skambutyje su {user1}", + "_%n guest_::_%n guests_" : ["%n svečias","%n svečiai","%n svečių","%n svečias"], + "You attended a call with {user1} and {user2}" : "Jūs dalyvavote skambutyje su {user1} ir {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Jūs dalyvavote skambutyje su {user1}, {user2} ir {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Jūs dalyvavote skambutyje su {user1}, {user2}, {user3} ir {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Jūs dalyvavote skambutyje su {user1}, {user2}, {user3}, {user4} ir {user5}", + "_%n other_::_%n others_" : ["dar %n asmuo","dar %n asmenys","dar %n asmenų","dar %n asmuo"], + "{actor} invited you to {call}" : "{actor} pakvietė jus į {call}", + "You were invited to a conversation or had a call" : "Jūs buvote pakviesti į pokalbį arba jums skambino", + "Other activities" : "Kitos veiklos", + "Talk" : "Pokalbiai", + "Guest" : "Svečias", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Sveiki atvykę į Nextcloud Pokalbius!\nŠiame pokalbyje būsite informuojami apie naujas Nextcloud Pokalbiuose prieinamas ypatybes.", + "## New in Talk %s" : "## Nauja Pokalbiuose %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Dabar, dalyvavimui vaizdo ir garso skambučiuose gali būti naudojamos Microsoft Edge ir Safari naršyklės", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Dviejų asmenų pokalbiai dabar išlieka ir jų nebėra galima netyčia paversti grupiniais pokalbiais. Be to, jei vienas iš dalyvių išeina iš pokalbio, pokalbis nebėra automatiškai ištrinamas. Pokalbis iš serverio ištrinamas tik tada, kai abu dalyviai išeina.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Galite siųsti pranešimą visiems dalyviams, pokalbyje parašę \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Naudodami klavišą \"rodyklė aukštyn\" galite iš naujo paskelbti savo paskutinę žinutę", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Nuo šiol, Pokalbiuose gali būti komandos. Siųskite pokalbyje žinutę \"/help\" norėdami pamatyti ar jūsų administratorius yra sukonfigūravęs kokias nors komandas", + "- With projects you can create quick links between conversations, files and other items" : "- Naudodami projektus galite greitai sukurti sąsajas tarp pokalbių, failų bei kitų elementų", + "- You can now mention guests in the chat" : "- Dabar, pokalbiuose galite minėti svečius", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Dabar, pokalbiuose yra laukiamasis. Tai leis moderatoriams prisijungti prie pokalbio ir skambinti, kad paruoštų susitikimą, kol tuo tarpu kiti naudotojai ir svečiai turės laukti", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Dabar, galite tiesiogiai atsakyti į žinutes, suteikdami kitiems vartotojams daugiau konteksto apie ką yra jūsų žinutė", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Dabar, pokalbių ir dalyvių paieška taip pat filtruos ir jūsų esamus pokalbius, todėl bus žymiai lengviau rasti ankstesnius pokalbius", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Nuo šiol, kai turite įdiegtą ratų programėlę, galite pridėti į pokalbius tinkintas vartotojų grupes", + "- Check out the new grid and call view" : "- Susipažinkite su naujuoju tinkleliu ir skambučių peržiūros režimu", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Dabar galite įkelti failus ir juos perkelti tiesiai iš savo įrenginio į pokalbių langą", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Bendrai naudojami failai dabar atidaromi tiesiogiai pokalbių lange naudojant peržiūros programas", + "- You can now search for chats and messages in the unified search in the top bar" : "- Dabar viršutinėje juostoje esančioje bendrojoje paieškoje galite ieškoti pokalbių ir pranešimų", + "- Spice up your messages with emojis from the emoji picker" : "- Praturtinkite savo žinutes šypsenėlėmis iš šypsenėlių parinkiklio", + "- You can now change your camera and microphone while being in a call" : "- Dabar pokalbio metu galite pakeisti kamerą ir mikrofoną", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Pridėkite pokalbiams konteksto, pateikdami aprašymą, ir padarykite juos viešai prieinamus, kad prisijungę vartotojai galėtų juos rasti ir prisijungti", + "- See a read status and send failed messages again" : "- Peržiūrėkite skaitymo būseną ir dar kartą siųskite nepavykusius pranešimus", + "- Raise your hand in a call with the R key" : "- Pakelkite ranką skambučio metu naudodami R klavišą", + "- Join the same conversation and call from multiple devices" : "- Prisijunkite prie to paties pokalbio ir skambinkite iš kelių įrenginių", + "- Send voice messages, share your location or contact details" : "- Siųskite balso pranešimus, bendrinkite savo buvimo vietą arba kontaktinę informaciją", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Pridėkite grupes prie pokalbio ir nauji grupės nariai bus automatiškai pridėti kaip dalyviai", + "- A preview of your audio and video is shown before joining a call" : "- Prieš prisijungiant prie skambučio rodoma jūsų garso ir vaizdo peržiūra", + "- You can now blur your background in the newly designed call view" : "- Dabar naujai sukurtame skambučių rodinyje galite sulieti foną", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoriai dabar gali priskirti bendruosius ir individualius leidimus dalyviams", + "- You can now react to chat messages" : "- Dabar galite reaguoti į pokalbių žinutes", + "- In the sidebar you can now find an overview of the latest shared items" : "- Dabar šoninėje juostoje galite rasti paskutinių bendrintų elementų apžvalgą", + "- Use a poll to collect the opinions of others or settle on a date" : "- Pasinaudokite apklausos funkcija, kad surinktumėte kitų nuomones arba susitartumėte dėl datos", + "- Configure an expiration time for chat messages" : "- Nustatyti pokalbių pranešimų galiojimo laiką", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Pradėkite pokalbius nepranešdami kitiems didelių pokalbių dalyviams. Pradėjus pokalbį, galite išsiųsti individualius pranešimus apie pokalbį.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Siųskite pokalbių pranešimus nepranešdami gavėjams, jei tai nėra skubu", + "- Emojis can now be autocompleted by typing a \":\"" : "- Dabar emodžius galima užbaigti automatiškai, įvedus simbolį „:“", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Susiekite įvairius elementus naudodami naująjį išmanųjį pasirinkiklį, įvesdami simbolį „/“", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatoriai dabar gali kurti atskiras diskusijų patalpas (reikalingas didelio našumo serveris)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Dabar galima įrašyti skambučius (reikalingas našus serveris)", + "- Conversations can now have an avatar or emoji as icon" : "- Pokalbių piktogramomis dabar gali būti avatarai arba emodžiai", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Vaizdo skambučių metu dabar galima naudoti ne tik išblukintą foną, bet ir virtualius fonus", + "- Reactions are now available during calls" : "- Dabar skambučių metu galima naudotis reakcijomis", + "- Typing indicators show which users are currently typing a message" : "- Rašymo indikatoriai rodo, kurie vartotojai šiuo metu rašo žinutę", + "- Groups can now be mentioned in chats" : "- Dabar pokalbiuose galima paminėti grupes", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Pokalbių įrašai automatiškai transkribuojami, jei yra užregistruota transkribavimo paslaugų teikėjo programa", + "- Chat messages can be translated if a translation provider app is registered" : "- Pokalbių pranešimus galima išversti, jei yra įdiegta vertimo paslaugų teikėjo programėlė", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** dabar galima naudoti _pokalbių_ pranešimuose", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Dabar botams kurti galima naudoti „Webhooks“. Daugiau informacijos rasite dokumentacijoje: https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nustatykite priminimą prie pokalbio žinutės, kad vėliau gautumėte dar vieną pranešimą", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Naudokite pokalbių funkciją „**Pastaba sau**“, kad darytumėte užrašus ir dalytumėtės informacija tarp savo įrenginių", + "- Captions allow to send a message with a file at the same time" : "- Naudojant antraštes galima vienu metu išsiųsti žinutę ir failą", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Dabar dalijantis ekranu matomas pranešėjo vaizdas, o reakcijos į skambutį yra animuotos", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Prisijungę autoriai ir moderatoriai dabar gali redaguoti pranešimus per 6 valandas", + "- Unsent message drafts are now saved in your browser" : "- Neišsiųstų žinučių juodraščiai dabar saugomi jūsų naršyklėje", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Dabar galima bendrauti tekstiniu pokalbiu su kitais „Pokalbiai“ serveriais naudojant federacijos funkciją", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatoriai dabar gali užblokuoti paskyras ir svečius, kad šie negalėtų vėl prisijungti prie pokalbio", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "– Pokalbiuose dabar rodomi būsimi skambučiai iš susietų kalendoriaus įvykių ir pavaduojančių asmenų, kurių nėra biure.", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Skambučiai dabar gali būti atliekami federaciniu būdu su kitais „Pokalbių“ serveriais (reikalinga didelio našumo posistemė)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Pristatome Nextcloud „Pokalbiai“ darbalaukio klientą, skirtą „Windows“, „macOS“ ir „Linux“: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Apibendrinkite skambučių įrašus ir neskaitytus pranešimus pokalbiuose naudodami „Nextcloud Asistentas“", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Patobulinti susitikimai: svečių, pakviestų pagal jų el. pašto adresą, importuojami dalyvių sąrašai, apklausų juodraščiai ir atsisiunčiami skambučių dalyvių sąrašai", + "- Archive conversations to stay focused" : "- Archyvuokite pokalbius, kad išliktumėte susikaupę", + "- Schedule a meeting into your calendar from within a conversation" : "- Suplanuokite susitikimą į savo kalendorių iš pokalbio", + "- Search for messages of the current conversation directly in the right sidebar" : "- Ieškokite dabartinio pokalbio pranešimų tiesiai dešinėje šoninėje juostoje", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "– Iš pirmo žvilgsnio peržiūrėkite daugiau pokalbių naudodami naują kompaktišką sąrašą (įjunkite „Pokalbiai“ nustatymuose)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Susitikimų pokalbiai dabar sinchronizuoja pavadinimą ir aprašymą iš kalendoriaus ir yra paslėpti naudojant paieškos filtrą, kol nepriartėja prie pradžios.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Pranešimų nustatymuose pažymėkite pokalbius kaip jautrius, kad paslėptumėte pranešimo turinį pokalbių sąraše ir pranešimuose", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Norėdami gauti tiesioginius pranešimus režimu „Netrukdyti“, pažymėkite pokalbius kaip svarbius", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Įtraukite kitus dalyvius į individualų skambutį, kad iš karto sukurtumėte naują grupinį skambutį", + "- Use threads to keep your chat and discussions organized" : "- Naudokite temas, kad pokalbiai ir diskusijos būtų tvarkingos", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Dabar skambučio metu galima naudotis tiesioginėmis transkripcijomis (reikalinga tiesioginės transkripcijos „ExApp“ ir didelio našumo vidinė sistema).", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatoriai dabar gali prisegti žinutes, kad jos būtų rodomos viršuje", + "- Schedule a message to send it at a later time" : "- Suplanuokite žinutės išsiuntimą vėliau", + "_All %n participant_::_All %n participants_" : ["Visi %n dalyvių","Visi %n dalyviai","Visi %n dalyvių","Visi %n dalyvių"], + "Talk updates ✅" : "Pokalbių programėlės atnaujinimai ✅", + "Reaction deleted by author" : "Autorius ištrynė reakciją", + "{actor} created the conversation" : "{actor} sukūrė pokalbį", + "You created the conversation" : "Jūs sukūrėte pokalbį", + "System created the conversation" : "Sistema sukūrė pokalbį", + "An administrator created the conversation" : "Administratorius sukūrė pokalbį", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} pervadino pokalbį iš \"%1$s\" į \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Jūs pervadinote pokalbį iš \"%1$s\" į \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administratorius pervadino pokalbį iš \"%1$s\" į \"%2$s\"", + "{actor} set the description" : "{actor} nustatė aprašą", + "You set the description" : "Jūs nustatėte aprašą", + "An administrator set the description" : "Administratorius nustatė aprašą", + "{actor} removed the description" : "{actor} pašalino aprašą", + "You removed the description" : "Jūs pašalinote aprašą", + "An administrator removed the description" : "Administratorius pašalino aprašą", + "You started a silent call" : "Jūs pradėjote tylų skambutį", + "Outgoing silent call" : "Išeinantis tylus skambutis", + "{actor} started a silent call" : "{actor} pradėjo tylų skambutį", + "Incoming silent call" : "Įeinantis tylus skambutis", + "You started a call" : "Jūs pradėjote skambutį", + "Outgoing call" : "Išeinantis skambutis", + "{actor} started a call" : "{actor} pradėjo skambutį", + "Incoming call" : "Įeinantis skambutis", + "{actor} joined the call" : "{actor} prisijungė prie skambučio", + "You joined the call" : "Jūs prisijungėte prie skambučio", + "{actor} left the call" : "{actor} išėjo iš skambučio", + "You left the call" : "Jūs išėjote iš skambučio", + "{actor} unlocked the conversation" : "{actor} atrakino pokalbį", + "You unlocked the conversation" : "Jūs atrakinote pokalbį", + "An administrator unlocked the conversation" : "Administratorius atrakino pokalbį", + "{actor} locked the conversation" : "{actor} užrakino pokalbį", + "You locked the conversation" : "Jūs užrakinote pokalbį", + "An administrator locked the conversation" : "Administratorius užrakino pokalbį", + "{actor} limited the conversation to the current participants" : "{actor} apribojo pokalbį iki dabartinių dalyvių", + "You limited the conversation to the current participants" : "Jūs apribojote pokalbį iki dabartinių dalyvių", + "An administrator limited the conversation to the current participants" : "Administratorius apribojo pokalbį iki dabartinių dalyvių", + "{actor} opened the conversation to registered users" : "{actor} atvėrė pokalbį registruotiems naudotojams", + "You opened the conversation to registered users" : "Jūs atvėrėte pokalbį registruotiems naudotojams", + "An administrator opened the conversation to registered users" : "Administratorius atvėrė pokalbį registruotiems naudotojams", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} atidarė pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę", + "You opened the conversation to registered users and users created with the Guests app" : "Atidarėte pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administratorius atidarė pokalbį registruotiems vartotojams ir vartotojams, sukurtiems naudojant svečių programėlę.", + "The conversation is now open to everyone" : "Dabar, pokalbis yra atviras visiems", + "{actor} opened the conversation to everyone" : "{actor} atvėrė pokalbį visiems", + "You opened the conversation to everyone" : "Jūs atvėrėte pokalbį visiems", + "{actor} restricted the conversation to moderators" : "{actor} apribojo pokalbį iki moderatorių", + "You restricted the conversation to moderators" : "Jūs apribojote pokalbį iki moderatorių", + "{actor} started breakout rooms" : "{actor} sukūrė grupinio darbo kambarius", + "You started breakout rooms" : "Sukūrėte grupinio darbo kambarius", + "{actor} stopped breakout rooms" : "{actor} sustabdė grupinio darbo kambarius", + "You stopped breakout rooms" : "Jūs sustabdėte grupinio darbo kambarius", + "{actor} allowed guests" : "{actor} leidžia svečius", + "You allowed guests" : "Jūs leidote svečius", + "An administrator allowed guests" : "Administratorius leido svečius", + "{actor} disallowed guests" : "{actor} nebeleidžia svečių", + "You disallowed guests" : "Jūs nebeleidžiate svečių", + "An administrator disallowed guests" : "Administratorius nebeleidžia svečių", + "{actor} set a password" : "{actor} nustatė slaptažodį", + "You set a password" : "Jūs nustatėte slaptažodį", + "An administrator set a password" : "Administratorius nustatė slaptažodį", + "{actor} removed the password" : "{actor} pašalino slaptažodį", + "You removed the password" : "Jūs pašalinote slaptažodį", + "An administrator removed the password" : "Administratorius pašalino slaptažodį", + "{actor} added {user}" : "{actor} pridėjo naudotoją {user}", + "You joined the conversation" : "Jūs prisijungėte prie pokalbio", + "{actor} joined the conversation" : "{actor} prisijungė prie pokalbio", + "You added {user}" : "Jūs pridėjote naudotoją {user}", + "{actor} added you" : "{actor} jus pridėjo", + "An administrator added you" : "Administratorius jus pridėjo", + "An administrator added {user}" : "Administratorius pridėjo vartotoją {user}", + "You left the conversation" : "Jūs išėjote iš pokalbio", + "{actor} left the conversation" : "{actor} išėjo iš pokalbio", + "{actor} removed {user}" : "{actor} pašalino naudotoją {user}", + "You removed {user}" : "Jūs pašalinote naudotoją {user}", + "{actor} removed you" : "{actor} jus pašalino", + "An administrator removed you" : "Administratorius jus pašalino", + "An administrator removed {user}" : "Administratorius pašalino vartotoją {user}", + "{actor} invited {federated_user}" : "{actor} pakvietė {federated_user}", + "You invited {federated_user}" : "Jūs pakvietėte {federated_user}", + "You accepted the invitation" : "Jūs priėmėte pakvietimą", + "{actor} invited you" : "{actor} pakvietė jus", + "An administrator invited you" : "Administratorius jus pakvietė", + "An administrator invited {federated_user}" : "Administratorius pakvietė {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} kvietimą priėmė", + "{actor} removed {federated_user}" : "{actor} pašalino {federated_user}", + "You removed {federated_user}" : "Jūs pašalinote {federated_user}", + "You declined the invitation" : "Jūs atmetėte pakvietimą", + "An administrator removed {federated_user}" : "Administratorius pašalino vartotoją {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} atmetė pakvietimą", + "{actor} added group {group}" : "{actor} pridėjo grupę {group}", + "You added group {group}" : "Jūs pridėjote grupę {group}", + "An administrator added group {group}" : "Administratorius pridėjo grupę {group}", + "{actor} removed group {group}" : "{actor} pašalino grupę {group}", + "You removed group {group}" : "Jūs pašalinote grupę {group}", + "An administrator removed group {group}" : "Administratorius pašalino grupę {group}", + "{actor} added team {circle}" : "{actor} pridėjo komandą {circle}", + "You added team {circle}" : "Jūs pridėjote komandą {circle}", + "An administrator added team {circle}" : "Administratorius pridėjo komandą {circle}", + "{actor} removed team {circle}" : "{actor} pašalino komandą {circle}", + "You removed team {circle}" : "Jūs pašalinote komandą {circle}", + "An administrator removed team {circle}" : "Administratorius pašalino komandą {circle}", + "{actor} added {phone}" : "{actor} pridėjo {phone}", + "You added {phone}" : "Jūs pridėjote {phone}", + "An administrator added {phone}" : "Administratorius pridėjo {phone}", + "{actor} removed {phone}" : "{actor} pašalino {phone}", + "You removed {phone}" : "Jūs pašalinote {phone}", + "An administrator removed {phone}" : "Administratorius pašalino {phone}", + "{actor} promoted {user} to moderator" : "{actor} paaukštino vartotoją {user} į moderatorius", + "You promoted {user} to moderator" : "Jūs paaukštinote vartotoją {user} į moderatorius", + "{actor} promoted you to moderator" : "{actor} paaukštino jus į moderatorius", + "An administrator promoted you to moderator" : "Administratorius paaukštino jus į moderatorius", + "An administrator promoted {user} to moderator" : "Administratorius paaukštino vartotoją {user} į moderatorius", + "{actor} demoted {user} from moderator" : "{actor} pašalino {user} iš moderatoriaus pareigų", + "You demoted {user} from moderator" : "Jūs pašalinote {user} iš moderatorių", + "{actor} demoted you from moderator" : "{actor} pažemino jus iš moderatorių", + "An administrator demoted you from moderator" : "Administratorius pažemino jus iš moderatorių", + "An administrator demoted {user} from moderator" : "Administratorius pažemino vartotoją {user} iš moderatorių", + "{actor} shared a file which is no longer available" : "{actor} pradėjo bendrinti failą, kuris daugiau nebeprieinamas", + "You shared a file which is no longer available" : "Jūs pradėjote bendrinti failą, kuris daugiau nebeprieinamas", + "File shares are currently not supported in federated conversations" : "Failų bendrinimas šiuo metu nepalaikomas sujungtuose pokalbiuose", + "The shared location is malformed" : "Bendrinama vieta yra netinkamai suformuota", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nustatė „Matterbridge“, kad šis pokalbis būtų sinchronizuojamas su kitais pokalbiais", + "You set up Matterbridge to synchronize this conversation with other chats" : "Jūs nustatėte „Matterbridge“, kad šis pokalbis būtų sinchronizuojamas su kitais pokalbiais", + "{actor} created thread {title}" : "{actor} sukūrė temą {title}", + "You created thread {title}" : "Jūs sukūrėte temą {title}", + "{actor} renamed thread {title}" : "{actor} pakeitė temos pavadinimą {title}", + "You renamed thread {title}" : "Jūs pakeitėte temos pavadinimą {title}", + "{actor} updated the Matterbridge configuration" : "{actor} atnaujino „Matterbridge“ konfigūraciją", + "You updated the Matterbridge configuration" : "Jūs atnaujinote „Matterbridge“ konfigūraciją", + "{actor} removed the Matterbridge configuration" : "{actor} pašalino „Matterbridge“ konfigūraciją", + "You removed the Matterbridge configuration" : "Jūs pašalinote „Matterbridge“ konfigūraciją", + "{actor} started Matterbridge" : "{actor} pradėjo „Matterbridge“", + "You started Matterbridge" : "Jūs pradėjote „Matterbridge“.", + "{actor} stopped Matterbridge" : "{actor} sustabdė Matterbridge", + "You stopped Matterbridge" : "Sustabdėte Matterbridge", + "{actor} deleted a message" : "{actor} ištrynė žinutę", + "You deleted a message" : "Jūs ištrynėte žinutę", + "{actor} edited a message" : "{actor} redagavo žinutę", + "You edited a message" : "Jūs redagavote žinutę", + "{actor} pinned a message" : "{actor} prisegė žinutę", + "You pinned a message" : "Jūs prisegėte žnutę", + "{actor} unpinned a message" : "{actor} atsegė žinutę", + "Message was automatically unpinned" : "Žinutė buvo automatiškai atsegta", + "You unpinned a message" : "Atsegėte pranešimą", + "{actor} deleted a reaction" : "{actor} ištrynė reakciją", + "You deleted a reaction" : "Jūs ištrynėte reakciją", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nustatėte pranešimo galiojimo laiką iki %n savaitės","Nustatėte pranešimo galiojimo laiką iki %n savaičių","Nustatėte pranešimo galiojimo laiką iki %n savaičių","Nustatėte pranešimo galiojimo laiką iki %n savaičių"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nustatėte pranešimo galiojimo laiką iki %n dienos","Nustatėte pranešimo galiojimo laiką iki %n dienų","Nustatėte pranešimo galiojimo laiką iki %n dienų","Nustatėte pranešimo galiojimo laiką iki %n dienų"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nustatėte pranešimo galiojimo laiką iki %n valandos","Nustatėte pranešimo galiojimo laiką iki %n valandų","Nustatėte pranešimo galiojimo laiką iki %n valandų","Nustatėte pranešimo galiojimo laiką iki %n valandų"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nustatėte pranešimo galiojimo laiką iki %n minutės","Nustatėte pranešimo galiojimo laiką iki %n minučių","Nustatėte pranešimo galiojimo laiką iki %n minučių","Nustatėte pranešimo galiojimo laiką iki %n minučių"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n savaitės","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių","{actor} nustatė pranešimo galiojimo laiką iki %n savaičių"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n dienos","{actor} nustatė pranešimo galiojimo laiką iki %n dienų","{actor} nustatė pranešimo galiojimo laiką iki %n dienų","{actor} nustatė pranešimo galiojimo laiką iki %n dienų"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}nustatė pranešimo galiojimo laiką iki %n valandos","{actor}nustatė pranešimo galiojimo laiką iki %n valandų","{actor} nustatė pranešimo galiojimo laiką iki %n valandų","{actor} nustatė pranešimo galiojimo laiką iki %n valandų"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nustatė pranešimo galiojimo laiką iki %n minutės","{actor} nustatė pranešimo galiojimo laiką iki %n minučių","{actor} nustatė pranešimo galiojimo laiką iki %n minučių","{actor} nustatė pranešimo galiojimo laiką iki %n minučių"], + "{actor} disabled message expiration" : "{actor} išjungė pranešimo galiojimo laiką", + "You disabled message expiration" : "Išjungėte pranešimo galiojimo laiką", + "{actor} cleared the history of the conversation" : "{actor} išvalė pokalbio istoriją", + "You cleared the history of the conversation" : "Jūs išvalėte pokalbio istoriją", + "{actor} set the conversation picture" : "{actor} nustatė pokalbio vaizdą", + "You set the conversation picture" : "Jūs nustatėte pokalbio paveikslėlį", + "{actor} removed the conversation picture" : "{actor} pašalino pokalbio nuotrauką", + "You removed the conversation picture" : "Pašalinote pokalbio paveiksėlį", + "{actor} ended the poll {poll}" : "{actor} baigė apklausą {poll}", + "You ended the poll {poll}" : "Jūs baigėte apklausą {poll}", + "{actor} started the video recording" : "{actor} pradėjo vaizdo įrašymą ", + "You started the video recording" : "Pradėjote vaizdo įrašymą", + "{actor} stopped the video recording" : "{actor} sustabdė vaizdo įrašymą", + "You stopped the video recording" : "Jūs sustabdėte vaizdo įrašymą", + "{actor} started the audio recording" : "{actor} pradėjo garso įrašymą", + "You started the audio recording" : "Pradėjote garso įrašymą", + "{actor} stopped the audio recording" : "{actor} sustabdė garso įrašymą", + "You stopped the audio recording" : "Sustabdėte garso įrašymą", + "The recording failed" : "Įrašyti nepavyko", + "Someone voted on the poll {poll}" : "Kažkas balsavo apklausoje {poll}", + "Message deleted by author" : "Autorius ištrynė žinutę", + "Message deleted by {actor}" : "{actor} ištrynė žinutę", + "Message deleted by you" : "Jūs ištrynėte žinutę", + "Deleted user" : "Ištrintas naudotojas", + "Unknown number" : "Nežinomas numeris", + "Administration" : "Administravimas", + "System" : "Sistema", + "%s (guest)" : "%s (svečias)", + "Missed call" : "Praleistas skambutis", + "Unanswered call" : "Neatsakytas skambutis", + "Call ended (Duration {duration})" : "Skambutis baigtas (Trukmė {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis buvo užbaigtas, nes jis pasiekė didžiausią skambučio trukmę (Trukmė {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} užbaigė skambutį (Trukmė {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Skambutis su %n svečiu buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %nsvečiais buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %n svečių buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})","Skambutis su %n svečių buvo baigtas, nes pasiekė maksimalią skambučio trukmę (trukmė {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Skambutis su %n svečiu buvo baigtas (trukmė {duration})","Skambutis su %n svečiais buvo baigtas (trukmė {duration})","Skambutis su %n svečių buvo baigtas (trukmė {duration})","Skambutis su %n svečių buvo baigtas (trukmė {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} baigė skambutį su %n svečiu (trukmė {duration})","{actor} baigė skambutį su %n svečiais (trukmė {duration})","{actor} baigė skambutį su %n svečių (trukmė {duration})","{actor} baigė skambutį su %n svečių (trukmė {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1} ended (Duration {duration})" : "Skambutis su {user1} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} baigė skambutį su {user1} (trukmė {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1} ir {user2} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Skambutis su {user1} ir {user2} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} baigė skambutį su {user1} ir {user2} (trukmė {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2} ir {user3} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Skambutis su {user1}, {user2} ir {user3} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} baigė skambutų su {user1}, {user2} ir {user3} (trukmė {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3} ir {user4} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3} ir {user4} pasibaigė (trukmė {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} baigė skambutį su {user1}, {user2}, {user3} ir {user4} (trukmė {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3}, {user4} ir {user5} buvo baigtas, nes pasiekta maksimali skambučio trukmė (trukmė {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Skambutis su {user1}, {user2}, {user3}, {user4} ir {user5} buvo baigtas (trukmė {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} baigė kambutį su {user1}, {user2}, {user3}, {user4} ir {user5} (trukmė {duration})", + "Message of {user} in {conversation}" : "Žinutė iš {user}, {conversation} pokalbyje", + "Message of {user}" : "Žinutė iš {user}", + "Message of a deleted user in {conversation}" : "Ištrinto vartotojo žinutė {conversation} pokalbyje", + "Talk conversations" : "„Pokalbių“ pokalbiai", + "Talk to %s" : "Kalbėti su %s", + "An error occurred. Please contact your administrator." : "Įvyko klaida. Susisiekite su administratoriumi.", + "App disabled" : "Programėlė išjungta", + "Conversation subfolders are disabled" : "Pokalbių pakatalogiai yra išjungti", + "Storage quota exceeded" : "Viršyta saugyklos kvota", + "Could not prepare conversation folder" : "Nepavyko paruošti pokalbių aplanko", + "File not found" : "Failas nerastas", + "Path must point to a file" : "Kelias turi nurodyti failą", + "File is not inside the conversation draft folder for this room" : "Failas nėra šio pokalbių kambario pokalbių juodraščių aplanke", + "File is not shared, or shared but not with the user" : "Failas nėra bendrinamas arba yra bendrinamas, tačiau ne su vartotoju", + "No account available to delete." : "Nėra ištrynimui prieinamos paskyros.", + "Poll" : "Apklausa", + "Password needs to be set" : "Turi būti nustatytas slaptažodis", + "Uploading the file failed" : "Nepavyko įkelti failo", + "No image file provided" : "Paveikslėlio failas nepateiktas", + "File is too big" : "Failas yra per didelis", + "Invalid file provided" : "Pateiktas neteisingas failas", + "Invalid image" : "Netinkamas paveikslas", + "Unknown filetype" : "Nežinomas failo tipas", + "Talk mentions" : "Paminėjimai pokalbiuose", + "More conversations" : "Daugiau pokalbių", + "Say hi to your friends and colleagues!" : "Pasisveikinkite su savo draugais ir kolegomis!", + "No unread mentions" : "Nėra neskaitytų paminėjimų", + "Call in progress" : "Skambutis vyksta", + "You were mentioned" : "Jūs buvote paminėti", + "Write to conversation" : "Rašyti į pokalbį", + "Writes event information into a conversation of your choice" : "Parašo apie įvykio informaciją į jūsų pasirinktą pokalbį", + "Missing email field in header line" : "Antraštės eilutėje trūksta lauko „El. paštas“", + "Following lines are invalid: %s" : "Šios eilutės yra neteisingos: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s pakvietė jus į pokalbį „%2$s“.", + "You were invited to conversation \"%s\"." : "Buvote pakviestas į pokalbį „%s“.", + "Conversation invitation" : "Pakvietimas į pokalbį", + "Scheduled time" : "Numatytas laikas", + "Description" : "Aprašas", + "You can also dial-in via phone with the following details" : "Taip pat galite prisijungti telefonu, naudodami šiuos duomenis", + "Dial-in information" : "Skambinimo informacija", + "Meeting ID" : "Susitikimo ID", + "Your PIN" : "Jūsų PIN kodas", + "Click the button below to join the lobby now." : "Norėdami prisijungti prie laukiamojo dabar, spustelėkite žemiau esantį mygtuką.", + "Click the link below to join the lobby now." : "Norėdami prisijungti prie laukiamojo dabar, spustelėkite žemiau esančią nuorodą.", + "Join lobby for \"%s\"" : "Prisijunkite prie laukiamojo, skirto „%s“", + "Click the button below to join the conversation now." : "Norėdami prisijungti prie pokalbio dabar, spustelėkite žemiau esantį mygtuką.", + "Click the link below to join the conversation now." : "Norėdami prisijungti prie pokalbio dabar, spustelėkite žemiau esančią nuorodą.", + "Join \"%s\"" : "Prisijungti „%s“", + "Meeting" : "Susitikimas", + "Password request: %s" : "Slaptažodžio prašymas: %s", + "Private conversation" : "Privatus pokalbis", + "Deleted user (%s)" : "Ištrintas naudotojas (%s)", + "Failed to upload call recording" : "Nepavyko įkelti skambučio įrašo", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Įrašymo serveriui nepavyko įkelti {call} skambučio įrašo. Susisiekite su administracija.", + "Share to chat" : "Bendrinkite, kad galėtumėte kalbėtis", + "Dismiss notification" : "Atmesti pranešimą", + "Call recording now available" : "Dabar galimas skambučių įrašymas", + "The recording for the call in {call} was uploaded to {file}." : "Skambučio {call} įrašas buvo įkeltas į {file}.", + "Transcript now available" : "Nuorašas dabar prieinamas", + "The transcript for the call in {call} was uploaded to {file}." : "Skambučio {call} transkripcija buvo įkelta į {file}.", + "Failed to transcript call recording" : "Nepavyko transkribuoti skambučio įrašo", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveriui nepavyko transkribuoti įrašo, esančio {file}, susijusio su skambučiu {call}. Prašome kreiptis į administraciją.", + "Call summary now available" : "Dabar pasiekiama skambučių suvestinė", + "The summary for the call in {call} was uploaded to {file}." : "{call} skambučio santrauka buvo įkelta į {file}.", + "Failed to summarize call recording" : "Nepavyko apibendrinti skambučio įrašo", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveriui nepavyko apibendrinti įrašo {file}, susijusio su skambučiu {call}. Kreipkitės į administraciją.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} pakvietė jus prisijungti į {roomName} esančiame {remoteServer}", + "Accept" : "Priimti", + "Decline" : "Atmesti", + "{user1} invited you to a federated conversation" : "{user1} pakvietė jus į federacinį pokalbį", + "Someone reacted" : "Kažkas sureagavo", + "New message" : "Nauja žinutė", + "Reminder" : "Priminimas", + "Someone mentioned you" : "Kažkas jus paminėjo", + "Notification" : "Pranešimas", + "Someone reacted in a private conversation" : "Kažkas sureagavo privačiame pokalbyje", + "You received a message in a private conversation" : "Gavote žinutę asmeniniame pokalbyje", + "Reminder in a private conversation" : "Priminimas privačiame pokalbyje", + "Someone mentioned you in a private conversation" : "Kažkas jus paminėjo privačiame pokalbyje", + "Notification in a private conversation" : "Pranešimas privačiame pokalbyje", + "Reminder: You in {call}" : "Priminimas: Jūs esate {call}", + "Reminder: {user} in {call}" : "Priminimas: {user} yra {call}", + "Reminder: Deleted user in {call}" : "Priminimas: pašalintas vartotojas iš {call}", + "Reminder: {guest} (guest) in {call}" : "Priminimas: {guest} (svečias) yra {call}", + "Reminder: Guest in {call}" : "Priminimas: svečias {call}", + "{user} reacted with {reaction}" : "{user} sureagavo {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} sureagavo {reaction} pokalbyje {call}", + "Deleted user reacted with {reaction} in {call}" : "Ištrintas naudotojas sureagavo {reaction} pokalbyje {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (svečias) sureagavo {reaction} pokalbyje {call}", + "Guest reacted with {reaction} in {call}" : "Svečias sureagavo {reaction} pokalbyje {call}", + "{user} in {call}" : "{user} lentelėje {call}", + "Deleted user in {call}" : "Ištrintas vartotojas iš {call}", + "{guest} (guest) in {call}" : "{guest} (svečias) {call}", + "Guest in {call}" : "Svečias {call}", + "{user} sent you a private message" : "{user} išsiuntė jums privačią žinutę", + "{user} sent a message in conversation {call}" : "{user} išsiuntė žinutę pokalbyje {call}", + "A deleted user sent a message in conversation {call}" : "Ištrintas vartotojas išsiuntė žinutę pokalbyje {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (svečias) išsiuntė žinutę pokalbyje {call}", + "A guest sent a message in conversation {call}" : "Svečias išsiuntė žinutę pokalbyje {call}", + "{user} replied to your private message" : "{user} atsakė į jūsų privačią žinutę", + "{user} replied to your message in conversation {call}" : "{user} atsakė į jūsų žinutę pokalbyje {call}", + "A deleted user replied to your message in conversation {call}" : "Ištrintas vartotojas atsakė į jūsų žinutę pokalbyje {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (svečias) atsakė į jūsų žinutę pokalbyje {call}", + "A guest replied to your message in conversation {call}" : "Svečias atsakė į jūsų žinutę pokalbyje {call}", + "Reminder: You in private conversation {call}" : "Priminimas: Jūs dalyvaujate privačiame pokalbyje {call}", + "Reminder: A deleted user in private conversation {call}" : "Priminimas: ištrintas vartotojas privačiame pokalbyje{call}", + "Reminder: {user} in private conversation" : "Priminimas: {user} privačiame pokalbyje", + "Reminder: You in conversation {call}" : "Priminimas: Jūs dalyvaujate pokalbyje {call}", + "Reminder: {user} in conversation {call}" : "Priminimas: {user} pokalbyje {call}", + "Reminder: A deleted user in conversation {call}" : "Priminimas: ištrintas vartotojas pokalbyje{call}", + "Reminder: {guest} (guest) in conversation {call}" : "Priminimas: {guest} (svečias) pokalbyje {call}", + "Reminder: A guest in conversation {call}" : "Priminimas: svečias pokalbyje {call}", + "{user} reacted with {reaction} to your private message" : "{user} sureagavo {reaction} į jūsų privačią žinutę", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Ištrintas vartotojas sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (svečias) sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "A guest reacted with {reaction} to your message in conversation {call}" : "Svečias sureagavo {reaction} į jūsų žinutę {call} pokalbyje", + "{user} mentioned you in a private conversation" : "{user} paminėjo jus privačiame pokalbyje", + "{user} mentioned group {group} in conversation {call}" : "{user} paminėjo {group} grupę {call} pokalbyje", + "{user} mentioned team {team} in conversation {call}" : "{user} paminėjo {team} komandą {call} pokalbyje", + "{user} mentioned everyone in conversation {call}" : "{user} paminėjo visus {call} pokalbyje", + "{user} mentioned you in conversation {call}" : "{user} paminėjo jus pokalbyje {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Ištrintas vartotojas paminėjo {group} grupę {call} pokalbyje", + "A deleted user mentioned team {team} in conversation {call}" : "Ištrintas vartotojas {team} komandą {call} pokalbyje", + "A deleted user mentioned everyone in conversation {call}" : "Ištrintas vartotojas paminėjo kiekvieną {call} pokalbyje", + "A deleted user mentioned you in conversation {call}" : "Ištrintas vartotojas paminėjo jus {call} pokalbyje", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (svečias) paminėjo {group} grupę {call} pokalbyje", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (svečias) paminėjo {team} komandą {call} pokalbyje", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (svečias) paminėjo kiekvieną {call} pokalbyje", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (svečias) paminėjo jus pokalbyje {call}", + "A guest mentioned group {group} in conversation {call}" : "Svečias paminėjo {group} grupę {call} pokalbyje", + "A guest mentioned team {team} in conversation {call}" : "Svečias paminėjo {team} komandą {call} pokalbyje", + "A guest mentioned everyone in conversation {call}" : "Svečias paminėjo kiekvieną {call} pokalbyje", + "A guest mentioned you in conversation {call}" : "Svečias paminėjo jus pokalbyje {call}", + "View message" : "Rodyti žinutę", + "Dismiss reminder" : "Atmesti priminimą", + "View chat" : "Rodyti pokalbį", + "{user} invited you to a group conversation: {call}" : "{user} jus pakvietė į grupės pokalbį: {call}", + "Join call" : "Prisijungti prie skambučio", + "Answer call" : "Atsiliepti", + "{user} would like to talk with you" : "{user} norėtų su jumis pakalbėti", + "Call back" : "Atskambinti", + "You missed a call from {user}" : "Jūs praleidote skambutį nuo {user}", + "Accept call" : "Priimti skambutį", + "Incoming phone call from {call}" : "Įeinantis telefono skambutis iš {call}", + "You missed a phone call from {call}" : "Jūs praleidote grupės skambutį iš {call}", + "A group call has started in {call}" : "Grupės skambutis prasidėjo ties {call}", + "You missed a group call in {call}" : "Jūs praleidote grupės skambutį ties {call}", + "{email} is requesting the password to access {file}" : "{email} prašo slaptažodžio, kad gautų prieigą prie {file}", + "{email} tried to request the password to access {file}" : "{email} bandė paprašyti slaptažodžio, kad gautų prieigą prie {file}", + "Someone is requesting the password to access {file}" : "Kažkas prašo slaptažodžio, kad gautų prieigą prie {file}", + "Someone tried to request the password to access {file}" : "Kažkas bandė paprašyti slaptažodžio, kad gautų prieigą prie {file}", + "Open settings" : "Atverti nustatymus", + "Hosted signaling server added" : "Signalinio ryšio serveris pridėtas", + "The hosted signaling server is now configured and will be used." : "Signalinio ryšio serveris dabar sukonfigūruotas ir bus naudojamas.", + "Hosted signaling server removed" : "Signalinio ryšio serveris pašalintas", + "The hosted signaling server was removed and will not be used anymore." : "Signalinio ryšio serveris buvo pašalintas ir daugiau nebus naudojamas.", + "Hosted signaling server changed" : "Signalinio ryšio serveris pakeistas", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Signalinio ryšio serverio paskyros būsena pasikeitė iš „{oldstatus}“ į „{newstatus}“.", + "pending" : "laukiama", + "active" : "aktyvus", + "expired" : "pasibaigęs", + "blocked" : "užblokuotas", + "error" : "klaida", + "The certificate of {host} expires in {days} days" : "Sertifikato {host} galiojimo laikas baigiasi po {days} dienų", + "The certificate of {host} expired" : "{host} sertifikatas nebegalioja", + "Contact via Talk" : "Susisiekti per „Pokalbius“", + "Open Talk" : "Atverti pokalbius", + "Default" : "Numatytoji", + "Send messages, create threads, and start voice and video calls." : "Siųskite žinutes, kurkite diskusijas ir pradėkite balso bei vaizdo skambučius.", + "Presentation" : "Pateiktis", + "Voice room" : "Bendravimo kambarys", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Prisijunkite prie pokalbio tiesiogiai – tai puikus sprendimas, jei norite pasikalbėti ar surengti spontanišką susitikimą.", + "Webinar" : "Internetinis seminaras", + "Conversations" : "Pokalbiai", + "Messages in current conversation" : "Žinutės dabartiniame pokalbyje", + "{user}" : "{user}", + "Messages" : "Žinutės", + "{user} in {conversation}" : "{user} lentelėje {conversation}", + "Messages in other conversations" : "Žinutės kituose pokalbiuose", + "One-to-one rooms always need to show the other users avatar" : "Dviejų asmenų pokalbių kambariuose visada turi būti rodomas kito vartotojo avataras", + "Invalid emoji character" : "Neteisingas emodži simbolis", + "Invalid background color" : "Neteisinga fono spalva", + "Avatar image is not square" : "Avataro paveikslas nėra kvadratinis", + "Room {number}" : "Kambarys {number}", + "Other" : "Kita", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepavyko pateikti prašymo dėl bandomosios versijos, nes nepavyko prisijungti prie bandomosios versijos serverio. Prašome pabandyti vėliau.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kilo problemų su šio serverio autentiškumo patvirtinimu. Galbūt iš išorės neįmanoma prisijungti prie jo, kad būtų galima patikrinti jo URL adresą.", + "Something unexpected happened." : "Nutiko kažkas netikėto.", + "The URL is invalid." : "URL yra neteisingas.", + "An HTTPS URL is required." : "Reikalingas HTTPS URL.", + "The email address is invalid." : "El. pašto adresas yra neteisingas.", + "The language is invalid." : "Neteisinga kalba.", + "The country is invalid." : "Neteisinga šalis.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Kilo problema su bandomuoju užklausimu. Daugiau informacijos rasite savo žurnaluose.", + "Too many requests are send from your servers address. Please try again later." : "Iš jūsų serverio adreso siunčiama per daug užklausų. Prašome pabandyti vėliau.", + "There is already a trial registered for this Nextcloud instance." : "Šiam „Nextcloud“ elementui jau užregistruota bandomoji versija.", + "Something unexpected happened. Please try again later." : "Nutiko kažkas netikėto. Vėliau bandykite dar kartą.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepavyko užsisakyti bandomosios versijos, nes bandomųjų versijų serveris veikė netinkamai. Prašome pabandyti vėliau.", + "Trial requested but failed to get account information. Please check back later." : "Buvo pateiktas prašymas išbandyti paslaugą, tačiau nepavyko gauti paskyros duomenų. Prašome pabandyti vėliau.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Kilo problemų su šio užklausos autentiškumo patvirtinimu. Galbūt iš išorės neįmanoma pasiekti šio URL adreso, kad būtų galima jį patikrinti.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepavyko gauti paskyros informacijos, nes bandomojo serverio veikimas buvo netinkamas. Prašome pabandyti vėliau.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kilo problemų gaunant paskyros informaciją. Daugiau informacijos rasite savo žurnaluose.", + "There is no such account registered." : "Nėra tokios registruotos paskyros.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepavyko gauti paskyros informacijos, nes bandomojo serverio pasiekti neįmanoma. Prašome pabandyti vėliau.", + "Deleting the hosted signaling server account failed. Please check back later." : "Nepavyko ištrinti signalinio ryšio serverio paskyros. Patikrinkite vėliau.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nepavyko ištrinti paskyros, nes bandomasis serveris veikė netinkamai. Prašome pabandyti vėliau.", + "There is a problem with deleting the account. Please check your logs for further information." : "Kyla problemų ištrinant paskyrą. Daugiau informacijos rasite savo žurnaluose.", + "Too many requests are sent from your servers address. Please try again later." : "Iš jūsų serverio adreso siunčiama per daug užklausų. Prašome pabandyti vėliau.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nepavyko ištrinti paskyros, nes negalima prisijungti prie bandomojo serverio. Prašome pabandyti vėliau.", + "Note to self" : "Pastaba sau", + "A place for your private notes, thoughts and ideas" : "Vieta jūsų asmeninėms užrašams, mintims ir idėjoms", + "Transcript is AI generated and may contain mistakes" : "Transkripcija sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Summary is AI generated and may contain mistakes" : "Santrauka sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Let's get started!" : "Pradėkime!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Pokalbiai** – tai saugi, savarankiškai diegiama komunikacijos platforma, kuri sklandžiai integruojasi į „Nextcloud“ ekosistemą.\n\n#### Pagrindinės „Nextcloud Pokalbiai“ funkcijos:\n\n* Pokalbiai ir žinutės privačiuose bei grupiniuose pokalbiuose\n* Balso ir vaizdo skambučiai\n* Failų dalijimasis ir integracija su kitomis „Nextcloud“ programėlėmis\n* Konfigūruojami pokalbių nustatymai, moderavimas ir privatumo valdymas\n* Prieiga per internetą, kompiuterį ir mobiliuosius įrenginius (iOS ir Android)\n* Privati ir saugi komunikacija\n\nDaugiau informacijos rasite [vartotojo dokumentacijoje](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "„Nextcloud Pokalbiai“ yra privati ​​ir galinga pranešimų siuntimo programėlė, integruojama su „Nextcloud“. Kalbėkitės privačiuose arba grupiniuose pokalbiuose, bendradarbiaukite balso ir vaizdo skambučiais, organizuokite internetinius seminarus ir renginius, tinkinkite pokalbius ir dar daugiau.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Tekstų formatavimas, kad pranešimai būtų išsamesni\n\n„Nextcloud Pokalbiuose“ galite naudoti „Markdown“ sintaksę, kad suformatuotumėte savo pranešimus. Pavyzdžiui, galite taikyti **paryškinimą** ar *kursyvą*, arba `pažymėti tekstą kaip kodą`. Galite net kurti lenteles ir įterpti antraštes į tekstą.\n\nReikia ištaisyti rašybos klaidą ar pakeisti formatavimą? Redaguokite pranešimą, spustelėdami „Redaguoti pranešimą“ pranešimo meniu.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Pridėti priedus ir nuorodas\n\nNaudodami mygtuką „+“ pridėkite failus iš savo „Nextcloud Hub“. Dalinkitės elementais iš skilties „Failai“ ir įvairių „Nextcloud“ programėlių. Kai kurios programėlės, pavyzdžiui, „Tekstas“, netgi palaiko interaktyvius valdiklius.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Leiskite pokalbiams vykti sklandžiai: paminėkite vartotojus, reaguokite į pranešimus ir dar daugiau\n\nGalite paminėti visus pokalbio dalyvius naudodami %s arba paminėti konkrečius dalyvius įvedę simbolį „@“ ir pasirinkę jų vardą iš sąrašo.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Galite atsakyti į žinutes, persiųsti jas į kitus pokalbius ar kitiems žmonėms arba nukopijuoti žinutės turinį.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Išnaudokite visas „Smart Picker“ galimybes\n\nTiesiog įveskite „/“ arba pereikite į meniu „+“, kad atidarytumėte „Smart Picker“ – čia galėsite prie savo pranešimų pridėti įvairų turinį. Galite nustatyti „Smart Picker“, kad galėtumėte pridėti elementus iš „Nextcloud“ programėlių, GIF failus, vietoves žemėlapyje, dirbtinio intelekto sukurtą turinį ir dar daugiau.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Pokalbių nustatymų tvarkymas\n\nPokalbių meniu galite pasiekti įvairius nustatymus, skirtus pokalbiams tvarkyti, pavyzdžiui:\n* Redaguoti pokalbio informaciją\n* Tvarkyti pranešimus\n* Taikyti įvairias moderavimo taisykles\n* Konfigūruoti prieigą ir saugumą\n* Įjungti botus\n* ir dar daugiau!", + "Andorra" : "Andora", + "United Arab Emirates" : "Jungtiniai Arabų Emyratai", + "Afghanistan" : "Afganistanas", + "Antigua and Barbuda" : "Antigva ir Barbuda", + "Anguilla" : "Angilija", + "Albania" : "Albanija", + "Armenia" : "Armėnija", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Amerikos Samoa", + "Austria" : "Austrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Ålandų salos", + "Azerbaijan" : "Azerbaidžanas", + "Bosnia and Herzegovina" : "Bosnija ir Hercegovina", + "Barbados" : "Barbadosas", + "Bangladesh" : "Bangladešas", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Fasas", + "Bulgaria" : "Bulgarija", + "Bahrain" : "Bahreinas", + "Burundi" : "Burundis", + "Benin" : "Beninas", + "Saint Barthélemy" : "Sen Bartelemi", + "Bermuda" : "Bermudai", + "Brunei Darussalam" : "Brunėjaus Darusalamas", + "Bolivia, Plurinational State of" : "Bolivija (Daugiatautė Valstybė)", + "Bonaire, Sint Eustatius and Saba" : "Bonèras, Sìnt Eustãtijus ir Sabà", + "Brazil" : "Brazilija", + "Bahamas" : "Bahamos", + "Bhutan" : "Butanas", + "Bouvet Island" : "Buvė sala", + "Botswana" : "Botsvana", + "Belarus" : "Baltarusija", + "Belize" : "Belizas", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : " Kokosų (Kilingo) Salos", + "Congo, the Democratic Republic of the" : "Kongas (Demokratinė Respublika)", + "Central African Republic" : "Centrinės Afrikos Respublika", + "Congo" : "Kongas", + "Switzerland" : "Šveicarija", + "Côte d'Ivoire" : "Dramblio Kaulo Krantas", + "Cook Islands" : "Kuko salos", + "Chile" : "Čilė", + "Cameroon" : "Kamerūnas", + "China" : "Kinija", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kosta Rika", + "Cuba" : "Kuba", + "Cabo Verde" : "Žaliasis Kyšulys", + "Curaçao" : "Kiurasao", + "Christmas Island" : "Kalėdų sala", + "Cyprus" : "Kipras", + "Czechia" : "Čekija", + "Germany" : "Vokietija", + "Djibouti" : "Džibutis", + "Denmark" : "Danija", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikos Respublika", + "Algeria" : "Alžyras", + "Ecuador" : "Ekvadoras", + "Estonia" : "Estija", + "Egypt" : "Egiptas", + "Western Sahara" : "Vakarų Sachara", + "Eritrea" : "Eritrėja", + "Spain" : "Ispanija", + "Ethiopia" : "Etiopija", + "Finland" : "Suomija", + "Fiji" : "Fidžis", + "Falkland Islands (Malvinas)" : "Folklando (Malvinų) salos", + "Micronesia, Federated States of" : "Mikronezija (Federacinės Valstijos)", + "Faroe Islands" : "Farerų salos", + "France" : "Prancūzija", + "Gabon" : "Gabonas", + "United Kingdom of Great Britain and Northern Ireland" : "Didžiosios Britanijos ir Šiaurės Airijos Jungtinė Karalystė", + "Grenada" : "Grenada", + "Georgia" : "Gruzija-Sakartvelas", + "French Guiana" : "Prancūzijos Gviana", + "Guernsey" : "Gernsis", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltaras", + "Greenland" : "Grenlandija", + "Gambia" : "Gambija", + "Guinea" : "Gvinėja", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Pusiaujo Gvinėja", + "Greece" : "Graikija", + "South Georgia and the South Sandwich Islands" : "Pietų Džordžija ir Pietų Sandvičo Salos", + "Guatemala" : "Gvatemala", + "Guam" : "Guamas", + "Guinea-Bissau" : "Bisau Gvinėja", + "Guyana" : "Gajana", + "Hong Kong" : "Honkongas", + "Heard Island and McDonald Islands" : "Herdo ir Makdonaldo Salos", + "Honduras" : "Hondūras", + "Croatia" : "Kroatija", + "Haiti" : "Haitis", + "Hungary" : "Vengrija", + "Indonesia" : "Indonezija", + "Ireland" : "Airija", + "Israel" : "Izraelis", + "Isle of Man" : "Meno Sala", + "India" : "Indija", + "British Indian Ocean Territory" : "Indijos Vandenyno Britų Sritis", + "Iraq" : "Irakas", + "Iran, Islamic Republic of" : "Iranas (Islamo Respublika)", + "Iceland" : "Islandija", + "Italy" : "Italija", + "Jersey" : "Džersis", + "Jamaica" : "Jamaika", + "Jordan" : "Jordanija", + "Japan" : "Japonija", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizija", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribatis", + "Comoros" : "Komorai", + "Saint Kitts and Nevis" : "Sent Kitsas ir Nevis", + "Korea, Democratic People's Republic of" : "Korėja (Liaudies Demokratinė Respublika)", + "Korea, Republic of" : "Korėja (Respublika)", + "Kuwait" : "Kuveitas", + "Cayman Islands" : " Kaimanų Salos", + "Kazakhstan" : "Kazachstanas", + "Lao People's Democratic Republic" : "Laoso Liaudies Demokratinė Respublika", + "Lebanon" : "Libanas", + "Saint Lucia" : "Sent Lusija", + "Liechtenstein" : "Lichtenšteinas", + "Sri Lanka" : "Šri Lanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesotas", + "Lithuania" : "Lietuva", + "Luxembourg" : "Liuksemburgas", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Marokas", + "Monaco" : "Monakas", + "Moldova, Republic of" : "Moldova (Respublika)", + "Montenegro" : "Juodkalnija", + "Saint Martin (French part)" : "Sen Martenas (prancūzų dalis)", + "Madagascar" : "Madagaskaras", + "Marshall Islands" : "Maršalo salos", + "North Macedonia" : "Šiaurės Makedonija", + "Mali" : "Malis", + "Myanmar" : "Mianmaras", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Marianos Šiaurinės Salos", + "Martinique" : "Martinika", + "Mauritania" : "Mauritanija", + "Montserrat" : "Montseratas", + "Malta" : "Malta", + "Mauritius" : "Mauricijus", + "Maldives" : "Maldyvai", + "Malawi" : "Malavis", + "Mexico" : "Meksika", + "Malaysia" : "Malaizija", + "Mozambique" : "Mozambikas", + "Namibia" : "Namibija", + "New Caledonia" : "Naujoji Kaledonija", + "Niger" : "Nigeris", + "Norfolk Island" : "Norfolko Sala", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nyderlandai", + "Norway" : "Norvegija", + "Nepal" : "Nepalas", + "Nauru" : "Nauru", + "Niue" : "Niujė", + "New Zealand" : "Naujoji Zelandija", + "Oman" : "Omanas", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Prancūzijos Polinezija", + "Papua New Guinea" : "Papua Naujoji Gvinėja", + "Philippines" : "Filipinai", + "Pakistan" : "Pakistanas", + "Poland" : "Lenkija", + "Saint Pierre and Miquelon" : "Sen Pjeras ir Mikelonas", + "Pitcairn" : "Pitkerno salos", + "Puerto Rico" : "Puerto Rikas", + "Palestine, State of" : "Palestinos Valstybė", + "Portugal" : "Portugalija", + "Palau" : "Palau", + "Paraguay" : "Paragvajus", + "Qatar" : "Kataras", + "Réunion" : "Reunjonas", + "Romania" : "Rumunija", + "Serbia" : "Serbija", + "Russian Federation" : "Rusijos Federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudo Arabija", + "Solomon Islands" : "Saliamono salos", + "Seychelles" : "Seišelių salos", + "Sudan" : "Sudanas", + "Sweden" : "Švedija", + "Singapore" : "Singapūras", + "Saint Helena, Ascension and Tristan da Cunha" : "Šventosios Elenos, Dangun Žengimo ir Tristanas da Kunja salos", + "Slovenia" : "Slovėnija", + "Svalbard and Jan Mayen" : " Svalbard ir Jan Majen salos", + "Slovakia" : "Slovakija", + "Sierra Leone" : "Siera Leonė", + "San Marino" : "San Marinas", + "Senegal" : "Senegalas", + "Somalia" : "Somalis", + "Suriname" : "Surinamas", + "South Sudan" : "Pietų Sudanas", + "Sao Tome and Principe" : "San Tomė ir Prinsipė", + "El Salvador" : "Salvadoras", + "Sint Maarten (Dutch part)" : "Sint Maartenas (nyderlandų dalis)", + "Syrian Arab Republic" : "Sirijos Arabų Respublika", + "Eswatini" : "Esvatinis", + "Turks and Caicos Islands" : "Terkso ir Kaikoso salos", + "Chad" : "Čadas", + "French Southern Territories" : "Prancūzijos Pietų teritorijos", + "Togo" : "Togas", + "Thailand" : "Tailandas", + "Tajikistan" : "Tadžikistanas", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Rytų Timoras", + "Turkmenistan" : "Turkmėnistanas", + "Tunisia" : "Tunisas", + "Tonga" : "Tongas", + "Turkey" : "Turkija", + "Trinidad and Tobago" : "Trinidadas ir Tobagas", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taivanas, Kinijos provincija", + "Tanzania, United Republic of" : "Tanzanijos Jungtinė Respublika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Jungtinių Valstijų nuošalios mažosios salos", + "United States of America" : "Jungtinės Amerikos Valstijos", + "Uruguay" : "Urugvajus", + "Uzbekistan" : "Uzbekistanas", + "Holy See" : "Šventasis Sostas", + "Saint Vincent and the Grenadines" : "Sent Vinsentas ir Grenadinai", + "Venezuela, Bolivarian Republic of" : "Venesuela, Bolivaro Respublika", + "Virgin Islands, British" : "Mergelių Salos (Britų)", + "Virgin Islands, U.S." : "Mergelių Salos (JAV)", + "Viet Nam" : "Vietnamas", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Volisas ir Futūna", + "Samoa" : "Samoa", + "Yemen" : "Jemenas", + "Mayotte" : "Majotas", + "South Africa" : "Pietų Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabvė", + "Background blur" : "Fono suliejimas", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepavyko patikrinti, ar palaikomas WASM failų įkėlimas. Prašome rankiniu būdu patikrinti, ar jūsų žiniatinklio serveris pateikia `.wasm` failus.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Jūsų žiniatinklio serveris nėra tinkamai sukonfigūruotas „.wasm“ failams pateikti. Paprastai tai susiję su „Nginx“ konfigūracijos problema. Kad veiktų fono suliejimo funkcija, reikia pakoreguoti nustatymus, kad būtų pateikiami ir „.wasm“ failai. Palyginkite savo „Nginx“ konfigūraciją su mūsų dokumentacijoje pateikta rekomenduojama konfigūracija.", + "Talk configuration values" : "„Pokalbių“ konfigūracijos parametrai", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Skambučio trukmės nustatymas palaikomas tik naudojant sistemos „cron“. Įjunkite sistemos „cron“ arba pašalinkite konfigūracijos parametrą `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Mažos „max_call_duration“ reikšmės (šiuo metu nustatyta %d) negali būti priverstinai taikomos dėl techninių apribojimų. Fono užduotis vykdoma tik kas 5 minutes, todėl naudokite savo pačių atsakomybe.", + "Federation" : "Federacija", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Jei įjungta „Pokalbių Federacija“ funkcija, labai rekomenduojama nustatyti „memcache.locking“ parametrą.", + "High-performance backend" : "Didelio našumo posistemė", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nesukonfigūruota didelio našumo sistema – „Nextcloud Pokalbiai“ paleidimas be didelio našumo sistemos pakanka tik labai mažiems skambučiams (daugiausia 2–3 dalyviams). Nustatykite didelio našumo sistemą, kad skambučiai su keliais dalyviais vyktų sklandžiai.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Didelio našumo posistemės režimas „conversation_cluster“ nebenaudojamas ir nebebus palaikomas būsimoje versijoje. Šiuo metu didelio našumo posistemė palaiko tikrąjį klasterizavimą, kurį reikėtų naudoti vietoj jo.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Kelių didelio našumo serverių apibrėžimas nebenaudojamas ir nebebus palaikomas būsimoje versijoje. Vietoj to, apkrovos balansavimo priemonė turėtų būti nustatyta kartu su klasterizuotais signalizacijos serveriais ir sukonfigūruota „Pokalbiai“ nustatymuose.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Išsaugotas viešasis raktas, skirtas naudojamam %1$s algoritmui, nesutampa su išsaugotu privačiuoju raktu. Vykdykite %2$s komandą, kad išspręstumėte šią problemą.", + "High-performance backend not configured correctly. Run %s for details." : "Didelio našumo posistemė netinkamai sukonfigūruota. Paleiskite %s, jei norite gauti išsamesnės informacijos.", + "High-performance backend not configured correctly" : "Didelio našumo posistemė netinkamai sukonfigūruota", + "Error: Cannot connect to server" : "Klaida: Nepavyksta prisijungti prie serverio", + "Error: Server did not respond with proper JSON" : "Klaida: serveris neatsakė tinkamu JSON failu", + "Error: Certificate expired" : "Klaida: Liudijimas nebegalioja", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Klaida: „Nextcloud“ serverio ir didelio našumo serverio sistemos laikai nesutampa. Įsitikinkite, kad abu serveriai yra prijungti prie laiko serverio, arba sinchronizuokite jų laiką rankiniu būdu.", + "Could not get version" : "Nepavyko gauti versijos", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Klaida: Veikia versija: {version}; Serverį reikia atnaujinti, kad jis būtų suderinamas su šia „Pokalbiai“ versija", + "Error: Server responded with: {error}" : "Klaida: Serveris atsakė: {error}", + "Error: Unknown error occurred" : "Klaida: Įvyko nežinoma klaida", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Įspėjimas: Veikianti versija: {version}; Serveris nepalaiko visų šios „Talk“ versijos funkcijų, trūksta šių funkcijų: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Labai rekomenduojama sukonfigūruoti atminties talpyklą, kai „Nextcloud Pokalbiai“ veikia su didelio našumo serveriu.", + "Client Push" : "Kliento „push“ funkcija", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Įdiegta kliento „Push“ funkcija pagerina „Pokalbiai“ pranešimų punktualumą.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nėra įdiegta. Dėl to „Pokalbiai“ pranešimai gali vėluoti.", + "Recording backend" : "Įrašymo posistemė", + "Using the recording backend requires a High-performance backend." : "Įrašymo funkcijai reikalinga didelio našumo posistemė.", + "No recording backend configured" : "Nėra sukonfigūruotos įrašymo posistemės", + "SIP configuration" : "SIP konfigūracija", + "Using the SIP functionality requires a High-performance backend." : "Norint naudoti SIP funkciją, reikalinga didelio našumo posistemė.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Priskirti „Pokalbiams“ telefono numeriai negali prasidėti pliusu (+) arba nuliu (0). Pašalinkite arba atnaujinkite šiuos numerius:\n{list}", + "No SIP backend configured" : "Nėra sukonfigūruotos SIP posistemės", + "Invalid date, date format must be YYYY-MM-DD" : "Netinkama data, datos formatas privalo būti MMMM-mm-dd", + "Conversation not found" : "Pokalbis nerastas", + "Path is already shared with this conversation" : "Nuoroda jau buvo pasidalinta šioje pokalbio sesijoje", + "Chat, video & audio-conferencing using WebRTC" : "Pokalbiai, vaizdo ir garso konferencijos naudojant WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Pokalbiai, vaizdo ir garso konferencijos naudojant „WebRTC“\n\n* 💬 **Pokalbiai** Nextcloud „Pokalbiai“ turi paprastą teksto pokalbių funkciją, leidžiančią bendrinti arba įkelti failus iš Nextcloud „Failai“ programėlės arba vietinio įrenginio ir paminėti kitus dalyvius.\n* 👥 **Privatūs, grupiniai, vieši ir slaptažodžiu apsaugoti skambučiai!** Pakvieskite ką nors, visą grupę arba išsiųskite viešą nuorodą, kad pakviestumėte į skambutį.\n* 🌐 **Federuoti pokalbiai** Bendraukite su kitais „Nextcloud“ naudotojais jų serveriuose\n* 💻 **Ekrano bendrinimas!** Bendrinkite savo ekraną su skambučio dalyviais.\n* 🚀 **Integracija su kitomis „Nextcloud“ programėlėmis**, tokiomis kaip „Failai“, „Kalendorius“, „Vartotojo būsena“, „Dashbord“, „Flow“, „Žemėlapiai“, „Smart picker“, „Kontaktai“, „Darbai“ ir daugeliu kitų.\n* 🌉 **Sinchronizavimas su kitais pokalbių sprendimais** Integravus [Matterbridge](https://github.com/42wim/matterbridge/) į „Pokalbiai“, galite lengvai sinchronizuoti daugybę kitų pokalbių sprendimų su Nextcloud „Pokalbiai“ ir atvirkščiai.", + "Leave call" : "Išeiti iš skambučio", + "Navigating away from the page will leave the call in {conversation}" : "Išėjus iš puslapio, skambutis bus sustabdytas {conversation}", + "Stay in call" : "Pasilikti skambutyje", + "Error occurred when getting the conversation information" : "Įvykusi klaida gaunant pokalbio informaciją", + "Discuss this file" : "Aptarkite šį failą", + "Share this file with others to discuss it" : "Bendrinti šį failą su kitais, norint jį aptarti", + "Share this file" : "Bendrinti šį failą", + "Join conversation" : "Prisijungti prie pokalbio", + "This conversation is password-protected." : "Šis pokalbis yra apsaugotas slaptažodžiu.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Iš jūsų IP adreso užfiksuota keletas neteisingų slaptažodžio įvedimo bandymų. Dėl to kitas jūsų bandymas bus atidėtas 30 sekundžių.", + "The password is wrong. Try again." : "Slaptažodis neteisingas. Bandykite dar kartą.", + "Password" : "Slaptažodis", + "Submit" : "Pateikti", + "Error requesting the password." : "Klaida prašant slaptažodžio.", + "Request password" : "Prašyti slaptažodžio", + "This conversation has ended" : "Šis pokalbis pasibaigė", + "Error occurred when joining the conversation" : "Prisijungiant prie pokalbio įvyko klaida", + "Close Talk sidebar" : "Užverti „Pokalbių“ šoninę juostą", + "Open Talk sidebar" : "Atverti „Pokalbiai“ šoninę juostą", + "Everyone" : "Visi", + "Users and moderators" : "Naudotojai ir moderatoriai", + "Moderators only" : "Tik moderatoriai", + "Disable calls" : "Išjungti skambučius", + "Save changes" : "Įrašyti pakeitimus", + "Saving …" : "Įrašoma …", + "Saved!" : "Įrašyta!", + "Limit to groups" : "Apriboti iki grupių", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Pasirinkus bent vieną grupę, pokalbiuose gali dalyvauti tik išvardytų grupių žmonės.", + "Guests can still join public conversations." : "Svečiai vis tiek gali prisijungti prie viešų pokalbių.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Vartotojai, kurie nebegali naudotis „Pokalbiais“, vis tiek bus įtraukti į ankstesnių pokalbių dalyvių sąrašą, o jų pokalbių žinutės taip pat bus išsaugotos.", + "Limit using Talk" : "Riboti naudojimąsi „Pokalbiai“", + "Limit creating a public and group conversation" : "Riboti viešų ir grupinių pokalbių kūrimą", + "Limit creating conversations" : "Riboti pokalbių kūrimą", + "Limit starting a call" : "Riboti skambučio pradėjimą", + "Limit starting calls" : "Riboti skambučių pradėjimą", + "When a call has started, everyone with access to the conversation can join the call." : "Prasidėjus skambučiui, visi, turintys prieigą prie pokalbio, gali prisijungti prie skambučio.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Šiame serveryje įdiegti šie robotai. Dokumentacijoje galite rasti išsamią informaciją, kaip sukurti {linkstart1} savo botą {linkend}, arba {linkstart2} botų sąrašą {linkend}, kuriuos reikia įjungti serveryje.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Šiame serveryje nėra įdiegtų botų. Dokumentacijoje galite rasti išsamią informaciją, kaip sukurti {linkstart1} savo botą {linkend}, arba {linkstart2} botų sąrašą {linkend}, kuriuos reikia įjungti serveryje.", + "Description is not provided" : "Aprašas nepateiktas", + "Locked for moderators" : "Užrakinta moderatoriams", + "Enabled" : "Įjungta", + "Disabled" : "Išjungta", + "Bots settings" : "Botų nustatymai", + "State" : "Būsena", + "Name" : "Vardas", + "Last error" : "Paskutinė klaida", + "Total errors count" : "Bendras klaidų skaičius", + "Find more bots" : "Raskite daugiau botų", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Patikimus serverius galima konfigūruoti {linkstart} bendrinimo nustatymų puslapyje {linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Susieję pokalbiai ir skambučiai jau veikia. Priedų tvarkymas bus įtrauktas į būsimą versiją.", + "Enable Federation in Talk app" : "Įjungti federaciją „Pokalbių“ programėlėje", + "Permissions" : "Leidimai", + "Allow users to be invited to federated conversations" : "Leisti vartotojams būti pakviestiems į federacinius pokalbius", + "Allow users to invite federated users into conversation" : "Leisti vartotojams kviesti federacinius vartotojus į pokalbį", + "Only allow to federate with trusted servers" : "Leisti jungtis federacinius būdu tik su patikimais serveriais", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Jei pasirinkta bent viena grupė, tik į sąrašą įtrauktų grupių nariai gali kviesti federacinius vartotojus į pokalbius.", + "Groups allowed to invite federated users" : "Grupės, kurioms leidžiama kviesti federacinius vartotojus", + "Select groups …" : "Pasirinkti grupes...", + "All messages" : "Visos žinutės", + "@-mentions only" : "Tik @ paminėjimai", + "Off" : "Išjungta", + "General settings" : "Bendri nustatymai", + "Default notification settings" : "Numatytieji pranešimų nustatymai", + "Default group notification" : "Numatytasis grupės pranešimas", + "Default group notification for new groups" : "Numatytasis pranešimas apie naujas grupes", + "Integration into other apps" : "Integracija į kitas programėles", + "Allow conversations on files" : "Leisti pokalbius failuose", + "Allow conversations on public shares for files" : "Leisti pokalbius viešai bendrinamuose failuose", + "End-to-end encrypted calls" : "Skambučiai naudojant ištisinį šifravimą", + "Enable encryption" : "Įjungti šifravimą", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Skambučiams su ištisiniu šifravimu, naudojant sukonfigūruotą SIP tiltą, reikalinga naujesnė „Aukšto našumo posistemės“ ir SIP tilto versija.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilieji klientai šiuo metu nepalaiko skambučių su ištisiniu šifravimu.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Paspaudus mygtuką viršuje, formoje pateikta informacija bus nusiųsta į „Struktur AG“ serverius. Daugiau informacijos rasite {linkstart} svetainėje spreed.eu {linkend}.", + "Pending" : "Laukiantis", + "Error" : "Klaida", + "Blocked" : "Blokuota", + "Active" : "Aktyvi", + "Expired" : "Nebegalioja", + "Never" : "Niekada", + "The trial could not be requested. Please try again later." : "Bandomosios versijos užsisakyti nepavyko. Prašome pabandyti vėliau.", + "The account could not be deleted. Please try again later." : "Nepavyko ištrinti paskyros. Vėliau bandykite dar kartą.", + "Hosted High-performance backend" : "Teikėjo valdoma didelio našumo posistemė", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Mūsų partneris „Struktur AG“ teikia paslaugą, leidžiančią užsisakyti nuotolinį signalinį serverį. Tam tereikia užpildyti žemiau pateiktą formą, ir jūsų „Nextcloud“ pateiks užklausą. Kai serveris bus jums sukonfigūruotas, prisijungimo duomenys bus įrašyti automatiškai. Tai pakeis esamus signalinio serverio nustatymus.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Jei jūsų aukšto našumo posistemės paskyroje yra įjungtos STUN ir (arba) TURN funkcijos, nustatymai bus atitinkamai atnaujinti.", + "URL of this Nextcloud instance" : "Šio Nextcloud egzemplioriaus URL", + "Full name of the user requesting the trial" : "Pilnas vartotojo, prašančio suteikti bandomąją versiją, vardas ir pavardė", + "Email of the user" : "Naudotojo el. paštas", + "Language" : "Kalba", + "Country" : "Šalis", + "Request signaling server trial" : "Prašymas išbandyti signalinį serverį", + "You can see the current status of your hosted signaling server in the following table." : "Toliau pateiktoje lentelėje galite pamatyti savo nuotolinio signalinio serverio dabartinę būseną.", + "Status" : "Būsena", + "Created at" : "Sukurta", + "Expires at" : "Baigia galioti", + "Limits" : "Limitai", + "STUN included" : "Įtrauktas STUN", + "Yes" : "Taip", + "No" : "Ne", + "TURN included" : "Įtrauktas TURN", + "Delete the signaling server account" : "Ištrinti signalinio serverio paskyrą", + "_%n user_::_%n users_" : ["%n vartotojas","%n vartotojai","%n vartotojų","%n vartotojas"], + "Installed version: {version}" : "Įdiegta versija: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Galite įdiegti „Matterbridge“, kad susietumėte Nextcloud „Pokalbiai“ su kitomis paslaugomis. Daugiau informacijos rasite jų {linkstart1} „GitHub“ puslapyje{linkend}. Programėlės atsisiuntimas ir diegimas gali užtrukti. Jei užtrunka, įdiekite ją rankiniu būdu iš {linkstart2} „Nextcloud Programėlių Parduotuvės“ {linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "„Matterbridge“ dvejetainis failas turi neteisingus leidimus. Įsitikinkite, kad „Matterbridge“ dvejetainis failas priklauso teisingam vartotojui ir gali būti vykdomas. Jį galima rasti aplanke „/…/nextcloud/apps/talk_matterbridge/bin/“.", + "Matterbridge binary was not found or couldn't be executed." : "„Matterbridge“ dvejetainis failas nerastas arba jo nepavyko vykdyti.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Taip pat galite rankiniu būdu nustatyti kelią iki „Matterbridge“ dvejetainio failo per konfigūraciją. Daugiau informacijos rasite {linkstart} „Matterbridge“ integracijos dokumentacijoje {linkend}.", + "Downloading …" : "Atsisiunčiama…", + "Install Talk Matterbridge" : "Įdiekite „Pokalbių Matterbridge“", + "An error occurred while installing the Matterbridge app" : "Įdiegiant „Matterbridge“ programėlę įvyko klaida", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Diegiant „Pokalbių Matterbridge“ įvyko klaida. Įdiekite ją rankiniu būdu.", + "Failed to execute Matterbridge binary." : "Nepavyko paleisti „Matterbridge“ vykdomojo failo.", + "Matterbridge integration" : "„Matterbridge“ integracija", + "Enable Matterbridge integration" : "Įjungti „Matterbridge“ integraciją", + "Status: Checking connection" : "Būsena: Tikrinamas ryšys", + "OK: Running version: {version}" : "Gerai: Veikianti versija: {version}", + "Error: Server seems to be a Signaling server" : "Klaida: Atrodo, kad serveris yra signalinis serveris", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Klaida: „Nextcloud“ serverio ir įrašymo serverio sistemos laikai nesutampa. Įsitikinkite, kad abu serveriai yra prijungti prie laiko serverio, arba sinchronizuokite jų laiką rankiniu būdu.", + "Recording backend URL" : "Įrašymo posistemės URL", + "Validate SSL certificate" : "Patikrinti SSL sertifikatą", + "Delete this server" : "Ištrinti šį serverį", + "Test this server" : "Išbandyti šį serverį", + "Disabled for all calls" : "Išjungta visiems skambučiams", + "Enabled for all calls" : "Įjungta visiems skambučiams", + "Configurable on conversation level by moderators" : "Moderatoriai gali konfigūruoti pokalbių lygmeniu", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP parametrai „upload_max_filesize“ arba „post_max_size“ leidžia įkelti tik failus, kurių dydis ned augiau kaip {maxUpload}.", + "Recording backend settings saved" : "Išsaugoti įrašymo posistemės nustatymai", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatoriai galės įjungti sutikimo reikalavimą pokalbio lygmeniu. Prieš prisijungiant prie kiekvieno šio pokalbio skambučio, iš kiekvieno dalyvio bus reikalaujama duoti sutikimą, kad pokalbis būtų įrašomas.", + "The consent to be recorded will be required for each participant before joining every call." : "Prieš prisijungiant prie kiekvieno pokalbio, iš kiekvieno dalyvio bus reikalaujama sutikimo, kad pokalbis būtų įrašomas.", + "The consent to be recorded is not required." : "Sutikimo įrašymui nereikia.", + "Recording backend configuration is only possible with a High-performance backend." : "Įrašymo serverio konfigūracija įmanoma tik naudojant didelio našumo posistemę.", + "Add a new recording backend server" : "Pridėti naują įrašymo posistemės serverį", + "Shared secret" : "Bendrinama paslaptis", + "Recording consent" : "Sutikimas dėl įrašymo", + "Recording transcription" : "Įrašymo transkripcija", + "Automatically transcribe call recordings with a transcription provider" : "Automatiškai transkribuokite skambučių įrašus naudodami transkripcijos paslaugų teikėją", + "Automatically summarize call recordings with transcription and summary providers" : "Automatiškai apibendrinkite skambučių įrašus naudodami transkripcijos ir santraukų teikėjus", + "SIP configuration saved!" : "SIP konfigūracija įrašyta!", + "SIP configuration is only possible with a High-performance backend." : "SIP konfigūracija įmanoma tik naudojant didelio našumo posistemę.", + "Enable SIP Dial-out option" : "Įjungti SIP išeinančiojo skambinimo parinktį", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalinį serverį reikia atnaujinti, kad būtų palaikoma SIP skambinimo iš telefono funkcija.", + "Do not show SIP Dial-out caller number" : "Nerodyti SIP skambinančiojo numerio", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Skambinantysis turėtų matyti, kad skambina iš „nežinomo“ arba „paslėpto“ numerio", + "Dial-out number" : "Išeinančio skambučio numeris", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 formatuotas numeris, naudojamas kaip atsarginis skambinančiojo numeris išeinantiems skambučiams", + "Dial-out prefix" : "Išeinančių skambučių prefiksas", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Priešais išeinančių skambučių vartotojo numerį nurodytas prefiksas (numatyta reikšmė – „+“)", + "Restrict SIP configuration" : "Apriboti SIP konfigūraciją", + "Enable SIP configuration" : "Įjungti SIP konfigūraciją", + "Only users of the following groups can enable SIP in conversations they moderate" : "Tik šių grupių vartotojai gali įjungti SIP pokalbiuose, kuriuos jie moderuoja", + "Phone number (Country)" : "Telefono numeris (Šalis)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ši informacija siunčiama kvietimo laiškuose ir rodoma šoninėje juostoje visiems dalyviams.", + "Nextcloud base URL" : "Nextcloud bazinis URL", + "Talk Backend URL" : "„Pokalbių“ posistemės URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Prieinamos ypatybės", + "Error: Websocket connection failed" : "Klaida: nepavyko užmegzti „WebSocket“ ryšio", + "Error code" : "Klaidos kodas", + "Error message" : "Klaidos pranešimas", + "Error: Websocket connection failed. Check browser console" : "Klaida: nepavyko užmegzti „WebSocket“ ryšio. Patikrinkite naršyklės konsolę", + "High-performance backend URL" : "Didelio našumo posistemės URL", + "Missing High-performance backend warning hidden" : "Trūkstamas didelio našumo posistemės įspėjimas paslėptas", + "High-performance backend settings saved" : "Išsaugoti didelio našumo posistemės nustatymai", + "Nextcloud Talk setup not complete" : "Nextcloud „Pokalbių“ nustatymas nebaigtas", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Atkreipkite dėmesį, kad pokalbiuose, kuriuose dalyvauja daugiau nei 2 dalyviai ir nėra naudojama didelio našumo posistemė, dalyviai greičiausiai susidurs su ryšio sutrikimais, o tai sukels didelę apkrovą dalyvaujančiuose įrenginiuose.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Įdiekite didelio našumo posistemę, kad skambučiai su keliais dalyviais vyktų sklandžiai.", + "Nextcloud portal" : "Nextcloud portalas", + "Quick installation guide" : "Trumpas diegimo vadovas", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Skambučiams ir pokalbiams, kuriuose dalyvauja keli dalyviai, reikalinga didelio našumo posistemė. Be šios posistemės visi dalyviai turės atskirai įkelti savo vaizdo įrašą kiekvienam kitam dalyviui, o tai greičiausiai sukels ryšio sutrikimų ir didelę apkrovą dalyvaujančiuose įrenginiuose.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Naudojant Nextcloud „Pokalbius“ su didelio našumo posisteme, labai rekomenduojama įdiegti paskirstytąją talpyklą.", + "Add High-performance backend server" : "Pridėti didelio našumo posistemės serverį", + "Warn about connectivity issues in calls with more than 2 participants" : "Įspėti apie ryšio sutrikimus pokalbiuose, kuriuose dalyvauja daugiau nei 2 dalyviai", + "STUN server URL" : "STUN serverio URL", + "The server address is invalid" : "Serverio adresas yra neteisingas", + "STUN settings saved" : "STUN nustatymai įrašyti", + "STUN servers" : "STUN serveriai", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN serveris naudojamas siekiant nustatyti už maršrutizatoriaus esančių dalyvių viešuosius IP adresus.", + "Add a new STUN server" : "Pridėti naują STUN serverį", + "{schema} scheme must be used with a domain" : "{schema} schema turi būti naudojama su domenu", + "{option1} and {option2}" : "{option1} ir {option2}", + "{option} only" : "tik {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Gerai: TURN serveris grąžino sėkmingus ICE kandidatus", + "Error: No working ICE candidates returned by the TURN server" : "Klaida: TURN serveris negrąžino veikiančių ICE kandidatų", + "Testing whether the TURN server returns ICE candidates" : "Tikrinama, ar TURN serveris grąžina ICE kandidatus", + "TURN server schemes" : "TURN serverio schemos", + "TURN server URL" : "TURN serverio URL", + "TURN server secret" : "TURN serverio paslaptis", + "TURN server protocols" : "TURN serverio protokolai", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN serveris naudojamas perduoti per tarpinį serverį duomenų srautą iš dalyvių, esančių už ugniasienės. Jei atskiri dalyviai negali prisijungti prie kitų, greičiausiai reikalingas TURN serveris. Sąrankos instrukcijas rasite {linkstart} šioje dokumentacijoje {linkend}.", + "TURN settings saved" : "TURN nustatymai įrašyti", + "TURN servers" : "TURN serveriai", + "Add a new TURN server" : "Pridėti naują TURN serverį", + "Failed" : "Nepavyko", + "OK" : "Gerai", + "Checking …" : "Tikrinama…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Nepavyko: „WebAssembly“ yra išjungta arba nepalaikoma šioje naršyklėje. Norėdami atlikti patikrinimą, įjunkite „WebAssembly“ arba naudokite naršyklę, kuri jį palaiko.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Nepavyko: žiniatinklio serveris netinkamai grąžino failus „.wasm“ ir „.tflite“. Patikrinkite skyrių „Sistemos reikalavimai“ „Pokalbių“ dokumentacijoje.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Gerai: žiniatinklio serveris tinkamai grąžino failus „.wasm“ ir „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Atrodo, kad PHP ir Apache konfigūracijos nesuderinamos. Atkreipkite dėmesį, kad PHP galima naudoti tik su MPM_PREFORK moduliu, o PHP-FPM – tik su MPM_EVENT moduliu.", + "Web server setup checks" : "Žiniatinklio serverio sąrankos patikrinimai", + "Files required for virtual background can be loaded" : "Galima įkelti virtualiam fonui reikalingus failus", + "Federated user" : "\"Federuotas\" vartotojas", + "Assign participants to rooms" : "Priskirkite dalyvius į kambarius", + "Configure breakout rooms" : "Konfigūruokite grupinio darbo kambarius", + "Number of breakout rooms" : "Grupinio darbo kambarių skaičius", + "You can create from 1 to 20 breakout rooms." : "Galite sukurti nuo 1 iki 20 grupinio darbo kambarių.", + "Assignment method" : "Priskyrimo metodas", + "Automatically assign participants" : "Automatiškai priskirti dalyvius", + "Manually assign participants" : "Rankiniu būdu priskirti dalyvius", + "Allow participants to choose" : "Leisti dalyviams pasirinkti", + "Create rooms" : "Sukurti kambarius", + "Confirm" : "Patvirtinti", + "Create breakout rooms" : "Sukurti grupinio darbo kambarius", + "Reset" : "Atstatyti", + "Delete breakout rooms" : "Ištrinti grupinio darbo kambarius", + "Room {roomNumber}" : "Kambarys {roomNumber}", + "Current breakout rooms and settings will be lost" : "Dabartiniai grupinio darbo kambariai ir nustatymai bus prarasti", + "Cancel" : "Atsisakyti", + "Unassigned participants" : "Nepriskirti dalyviai", + "Back" : "Atgal", + "Assign" : "Priskirti", + "Add participant \"{user}\"" : "Pridėti dalyvį „{user}“", + "Now" : "Dabar", + "Invalid calendar selected" : "Pasirinktas netinkamas kalendorius", + "Invalid start time selected" : "Pasirinktas netinkamas pradžios laikas", + "Invalid end time selected" : "Pasirinktas netinkamas pabaigos laikas", + "Unknown error occurred" : "Įvyko nežinoma klaida", + "Sending no invitations" : "Kvietimų nesiunčiama", + "{participant0} will receive an invitation" : "{participant0} gaus kvietimą", + "{participant0} and {participant1} will receive invitations" : "{participant0} ir {participant1} gaus kvietimus", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ir %n gaus kvietimus","{participant0}, {participant1} ir %n kiti gaus kvietimus","{participant0}, {participant1} ir %n kitų gaus kvietimus","{participant0}, {participant1} ir %n kitų gaus kvietimus"], + "Invite {user}" : "Pakviesti {user}", + "Invite all users and emails in this conversation" : "Pakviesti visus šio pokalbio vartotojus ir el. pašto adresus", + "Meeting created" : "Susitikimas sukurtas", + "Upcoming meetings" : "Artėjantys susitikimai", + "Loading …" : "Įkeliama…", + "No upcoming meetings" : "Artėjančių susitikimų nėra", + "Schedule a meeting" : "Suplanuoti susitikimą", + "Meeting title" : "Susitikimo pavadinimas", + "From" : "Nuo", + "To" : "Kam", + "Calendar" : "Kalendorius", + "Attendees" : "Dalyviai", + "No other participants to send invitations to." : "Nėra kitų dalyvių, kuriems būtų galima siųsti kvietimus.", + "Add attendees" : "Pridėti dalyvius", + "Save" : "Įrašyti", + "Search participants" : "Ieškoti dalyvių", + "No results" : "Rezultatų nėra", + "Done" : "Atlikta", + "Disable live transcription" : "Išjungti transkripciją realiuoju laiku", + "Enable live transcription (generated by AI)" : "Įjungti tiesioginį transkribavimą (sukurta dirbtinio intelekto)", + "Enable live transcription (Live transcriptions app is not installed)" : "Įjunkite transkripciją realiuoju laiku (programėlė „Transkripcijos realiuoju laiku“ nėra įdiegta)", + "Disable live translation" : "Išjungti vertimą realiuoju laiku", + "Enable live translation (generated by AI)" : "Įjungti vertimą realiuoju laiku (sukurtą dirbtinio intelekto)", + "Original language" : "Originalo kalba", + "Live translations app is not installed" : "Vertimo realiuoju laiku programėlė neįdiegta", + "Original language: {languageName}" : "Originalo kalba: {languageName}", + "Translated language" : "Išversta kalba", + "Translated language: {languageName}" : "Išversta kalba: {languageName}", + "Raise hand" : "Pakelti ranką", + "Raise hand (R)" : "Pakelti ranką (R)", + "Lower hand" : "Nuleisti ranką", + "Lower hand (R)" : "Nuleisti ranką (R)", + "Exit full screen (F)" : "Išeiti iš viso ekrano (F)", + "Full screen (F)" : "Visas ekranas (F)", + "Speaker view" : "Garsiakalbio vaizdas", + "Grid view" : "Tinklelio rodinys", + "Error when trying to load the available live transcription languages" : "Klaida bandant įkelti galimas transkripcijos realiuoju laiku kalbas", + "Failed to enable live transcription" : "Nepavyko įjungti transkripcijos realiuoju laiku", + "Failed to enable live translations" : "Nepavyko įjungti vertimo realiuoju laiku", + "Failed to disable live translations" : "Nepavyko išjungti vertimo realiuoju laiku", + "Recording consent is required" : "Būtinas sutikimas įrašyti", + "This conversation is read-only" : "Šis pokalbis yra tik skaitymui", + "Conversation not found or not joined" : "Pokalbis nerastas arba prie jo neprisijungta", + "Lobby is still active and you're not a moderator" : "Laukiamasis vis dar aktyvus, o jūs nesate moderatorius", + "Connection failed" : "Ryšys patyrė nesėkmę", + "Reload" : "Įkelti iš naujo", + "{nickName} raised their hand." : "{nickName} pakėlė ranką.", + "A participant raised their hand." : "Dalyvis pakėlė ranką.", + "Collapse stripe" : "Suskleisti juostelę", + "Expand stripe" : "Išskleisti juostelę", + "Previous page of videos" : "Ankstesnis vaizdo įrašų puslapio", + "Next page of videos" : "Kitas vaizdo įrašų puslapis", + "Connecting …" : "Jungiamasi…", + "Calling …" : "Skambinama…", + "Waiting for {user} to join the call" : "Laukiama, kol {user} prisijungs prie skambučio", + "Waiting for others to join the call …" : "Laukiama, kol kiti prisijungs prie skambučio…", + "You can invite others in the participant tab of the sidebar" : "Galite pakviesti kitus žmonės šoninėje juostoje, dalyvių kortelėje", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Galite pakviesti kitus žmonės šoninėje juostoje, dalyvių kortelėje arba bendrindami šią nuorodą, skirtą pakviesti kitus asmenis!", + "Share this link to invite others!" : "Bendrinkite šią nuorodą, norėdami pakviesti kitus!", + "Copy link" : "Kopijuoti nuorodą", + "You are not allowed to enable audio" : "Jums neleidžiama įjungti garsą", + "No audio. Click to select device" : "Nėra garso. Spustelėkite norėdami pasirinkti įrenginį", + "Mute audio" : "Nutildyti garsą", + "Mute audio (M)" : "Nutildyti garsą (M)", + "Unmute audio" : "Įjungti garsą", + "Unmute audio (M)" : "Įjungti garsą (M)", + "None" : "Nėra", + "Select a microphone" : "Pasirinkti mikrofoną", + "Select a speaker" : "Pasirinkite garsiakalbį", + "Microphone settings" : "Mikrofono nustatymai", + "Check devices" : "Patikrinkite įrenginius", + "Access to camera was denied" : "Prieiga prie kameros buvo uždrausta", + "Error while accessing camera: It is likely in use by another program" : "Klaida gaunant prieigą prie kameros: Tikėtina, kad ją naudoja kita programa", + "Error while accessing camera" : "Klaida gaunant prieigą prie kameros", + "You have been muted by a moderator" : "Moderatorius jums išjungė garsiakalbį", + "Hide presenter video" : "Slėpti pranešėjo(-os) vaizdo įrašą", + "You are not allowed to enable video" : "Jums neleidžiama įjungti vaizdą", + "No video. Click to select device" : "Nėra vaizdo. Spustelėkite norėdami pasirinkti įrenginį", + "Disable video" : "Išjungti vaizdą", + "Disable video (V)" : "Išjungti vaizdą (V)", + "Enable video" : "Įjungti vaizdą", + "Enable video (V)" : "Įjungti vaizdą (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą – Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą (V) – Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Įjungti vaizdą. Pirmą kartą įjungiant vaizdą, jūsų ryšys bus trumpam pertrauktas", + "Select a video device" : "Pasirinkite vaizdo įrenginį", + "Show presenter" : "Rodyti pranešėją", + "You" : "Jūs", + "Mute" : "Nutildyti", + "Muted" : "Nutildyta", + "Show screen" : "Rodyti ekraną", + "Stop following" : "Nustoti sekti", + "Connection could not be established …" : "Nepavyko užmegzti ryšio…", + "Connection was lost and could not be re-established …" : "Ryšys nutrūko ir jo nepavyko užmegzti iš naujo…", + "Connection could not be established. Trying again …" : "Nepavyko užmegzti ryšio. Bandoma dar kartą…", + "Connection lost. Trying to reconnect …" : "Nutrūko ryšys. Bandoma prisijungti iš naujo…", + "Connection problems …" : "Ryšio problemos…", + "Collapse" : "Suskleisti", + "Expand" : "Išskleisti", + "You need to be logged in to upload files" : "Norėdami įkelti failus, turite būti prisijungę", + "Drop your files to upload" : "Tempkite failus, norėdami juos išsiųsti", + "Conversation messages" : "Pokalbio žinutės", + "Scroll to bottom" : "Slinkti į apačią", + "Post message" : "Paskelbti žinutę", + "Federated conversation" : "Federuotas pokalbis", + "Public conversation" : "Viešas pokalbis", + "Favorite" : "Mėgstamas", + "Banned users" : "Užblokuoti vartotojai", + "Manage the list of banned users in this conversation." : "Valdykite šio pokalbio užblokuotų vartotojų sąrašą.", + "Manage bans" : "Tvarkyti blokavimus", + "No banned users" : "Nėra užblokuotų vartotojų", + "Banned by:" : "Užblokavo:", + "Date:" : "Data:", + "Note:" : "Pastaba:", + "Hide details" : "Slėpti išsamesnę informaciją", + "Show details" : "Rodyti išsamiau", + "Unban" : "Panaikinti blokavimą", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Pavadinimą ir aprašymą galite pakeisti {linkstart} Kalendoriuje ↗. {linkend}", + "Error while updating conversation name" : "Klaida atnaujinant pokalbio pavadinimą", + "Error while updating conversation description" : "Klaida atnaujinant pokalbio aprašą", + "Enter a name for this conversation" : "Įveskite šio pokalbio pavadinimą", + "Edit conversation name" : "Taisyti pokalbio pavadinimą", + "Edit conversation description" : "Taisyti pokalbio aprašą", + "Enter a description for this conversation" : "Įveskite šio pokalbio aprašą", + "Picture" : "Paveikslėlis", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Šiame pokalbyje galima įjungti šiuos botus. Norėdami įdiegti daugiau botų šiame serveryje, susisiekite su savo administratoriumi.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Šiame serveryje nėra įdiegtų botų. Kreipkitės į administraciją, jei norite, kad šiame serveryje būtų įdiegti botai.", + "Disable" : "Išjungti", + "Enable" : "Aktyvuoti", + "The bot is not available anymore" : "Botas nebėra prieinamas", + "Breakout rooms" : "Grupinio darbo kambariai", + "Manage breakout rooms" : "Tvarkyti grupinio darbo kambarius", + "Set up breakout rooms for this conversation" : "Sukurkite grupinio darbo kambarius šiam pokalbiui", + "Please select a valid PNG or JPG file" : "Pasirinkite tinkamą PNG ar JPG failą", + "Choose your conversation picture" : "Pasirinkite pokalbio paveikslėlį", + "Choose" : "Pasirinkite", + "Error setting conversation picture" : "Klaida nustatant pokalbio paveikslėlį", + "Could not set the conversation picture: {error}" : "Nepavyko nustatyti pokalbio paveikslėlio: {error}", + "Error cropping conversation picture" : "Klaida apkarpant pokalbio paveikslėlį", + "Error removing conversation picture" : "Klaida pašalinant pokalbio paveikslėlį", + "Set emoji as conversation picture" : "Nustatyti emodžį kaip pokalbio paveikslėlį", + "Set background color for conversation picture" : "Nustatyti pokalbio paveikslėlio fono spalvą", + "Upload conversation picture" : "Įkelti pokalbio paveikslėlį", + "Choose conversation picture from files" : "Pasirinkite pokalbio paveikslėlį iš failų", + "Remove conversation picture" : "Pašalinti pokalbio paveikslėlį", + "The file must be a PNG or JPG" : "Failas privalo būti PNG ar JPG tipo", + "Set picture" : "Nustatyti paveikslėlį", + "Default permissions modified for {conversationName}" : "Pakeisti {conversationName} numatytieji leidimai ", + "Could not modify default permissions for {conversationName}" : "Nepavyko pakeisti {conversationName} numatytųjų leidimų ", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Redaguokite numatytus šio pokalbio dalyvių leidimus. Šie nustatymai netaikomi moderatoriams.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Kiekvieną kartą, kai šiame skyriuje keičiami leidimai, anksčiau atskiriems dalyviams suteikti individualūs leidimai bus panaikinti.", + "All permissions" : "Visi leidimai", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Dalyviai turi teisę pradėti pokalbį, prisijungti prie pokalbio, įjungti garso ir vaizdo perdavimą bei bendrinti ekrano vaizdą.", + "Participants can use all available features." : "Dalyviai gali naudotis visomis prieinamomis funkcijomis.", + "Restricted" : "Apribota", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Dalyviai gali prisijungti prie pokalbių, tačiau negali įjungti garso ar vaizdo, taip pat negali bendrinti ekrano vaizdo, kol moderatorius rankiniu būdu nesuteiks jiems leidimų.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Dalyviai gauna ribotą funkcijų rinkinį, kol moderatorius rankiniu būdu nesuteikia papildomų teisių.", + "Advanced permissions" : "Išplėstiniai leidimai", + "Edit permissions" : "Taisyti leidimus", + "Conversation settings" : "Pokalbio nustatymai", + "Basic Info" : "Pagrindinė informacija", + "Personal" : "Asmeniniai", + "Moderation" : "Moderavimas", + "Setup overview" : "Sąrankos apžvalga", + "Live transcription" : "Transkripcija realiuoju laiku", + "Live transcriptions app is not installed" : "Transkripcijos realiuoju laiku programėlė neįdiegta", + "Enable live transcription" : "Įjungti transkripciją realiuoju laiku", + "Breakout Rooms" : "Grupinio darbo kambariai", + "Matterbridge" : "„Matterbridge“", + "Bots" : "Botai", + "Danger zone" : "Pavojinga zona", + "Archive conversation" : "Archyvuoti pokalbį", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archyvuoti pokalbiai pagal numatytuosius nustatymus yra paslėpti pokalbių sąraše. Tačiau jie vis tiek bus rodomi, jei ieškosite pokalbio pavadinimo arba atidarysite archyvuotų pokalbių sąrašą.", + "Do you really want to leave \"{displayName}\"?" : "Ar tikrai norite išeiti iš „{displayName}“?", + "You can archive this conversation instead." : "Vietoj to galite archyvuoti šį pokalbį.", + "Leave conversation" : "Išeiti iš pokalbio", + "You need to promote a new moderator before you can leave the conversation" : "Prieš išeidami iš pokalbio turite paskirti naują moderatorių", + "Delete conversation" : "Ištrinti pokalbį", + "Do you really want to delete \"{displayName}\"?" : "Ar tikrai norite ištrinti \"{displayName}\"?", + "Error while deleting conversation" : "Klaida ištrinant pokalbį", + "Delete all chat messages" : "Ištrinti visas pokalbių žinutes", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ar tikrai norite ištrinti visas žinutes, esančias „{displayName}“?", + "Error while clearing chat history" : "Klaida išvalant pokalbio istoriją", + "Be careful, these actions cannot be undone." : "Būkite atsargūs, šių veiksmų nebegalėsite atšaukti.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Išėjus iš pokalbio, norint vėl prisijungti prie uždaryto pokalbio, reikia gauti kvietimą. Prie atviro pokalbio galima prisijungti bet kuriuo metu.", + "Permanently delete this conversation." : "Ištrinti šį pokalbį visam laikui.", + "Delete chat messages" : "Ištrinti pokalbio žinutes", + "Permanently delete all the messages in this conversation." : "Visam laikui ištrinti visus šio pokalbio pranešimus.", + "_%n hour_::_%n hours_" : ["%n valanda","%n valandos","%n valandų","%n valanda"], + "_%n day_::_%n days_" : ["%n diena","%n dienos","%n dienų","%n diena"], + "_%n week_::_%n weeks_" : ["%n savaitė","%n savaitės","%n savaičių","%n savaitė"], + "Custom expiration time" : "Pasirinktinis galiojimo laikas", + "Message expiration disabled" : "Pranešimo galiojimo laikas išjungtas", + "Message expiration set: {duration}" : "Pranešimo galiojimo laikas nustatytas: {duration}", + "Error when trying to set message expiration" : "Klaida bandant nustatyti pranešimo galiojimo laiką", + "Message expiration" : "Pranešimo galiojimo pabaiga", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Pokalbių žinutės gali būti nebegaliojančios po tam tikro laiko. Pastaba: pokalbyje bendrinami failai nebus ištrinti savininkui, bet nebebus bendrinami pokalbyje.", + "Set message expiration" : "Nustatyti pranešimo galiojimo laiką", + "Current message expiration" : "Dabartinio pranešimo galiojimo laikas", + "Password copied to clipboard" : "Slaptažodis nukopijuotas į iškarpinę", + "Password could not be copied" : "Nepavyko nukopijuoti slaptažodžio", + "Guest access" : "Svečio prieiga", + "Breakout rooms are not allowed in public conversations." : "Viešose diskusijose negalima kurti atskirų grupinio darbo kambarių.", + "Allow guests to join this conversation via link" : "Leisti svečiams prisijungti prie šio pokalbio per nuorodą", + "Password protection" : "Apsauga slaptažodžiu", + "This conversation is password-protected. Guests need password to join" : "Šis pokalbis apsaugotas slaptažodžiu. Svečiams reikia slaptažodžio, kad galėtų prisijungti.", + "Password protection is needed for public conversations" : "Viešiems pokalbiams reikalinga slaptažodžio apsauga", + "Set a password" : "Nustatyti slaptažodį", + "Change password" : "Keisti slaptažodį", + "Enter new password" : "Įvesti naują slaptažodį", + "Save password" : "Įrašyti slaptažodį", + "Copy password" : "Kopijuoti slaptažodį", + "Guests are allowed to join this conversation via link" : "Svečiams leidžiama prisijungti prie šio pokalbio per nuorodą", + "Guests are not allowed to join this conversation" : "Svečiams neleidžiama prisijungti prie šio pokalbio", + "Resend invitations" : "Siųsti pakvietimus iš naujo", + "This conversation is open to both registered users and users created with the Guests app" : "Šis pokalbis atviras tiek registruotiems vartotojams, tiek vartotojams, sukurtiems naudojant svečių programėlę.", + "This conversation is open to registered users" : "Šis pokalbis yra atviras registruotiems naudotojams", + "This conversation is limited to the current participants" : "Šis pokalbis skirtas tik dabartiniams dalyviams", + "You opened the conversation to both registered users and users created with the Guests app" : "Atidarėte pokalbį tiek registruotiems vartotojams, tiek vartotojams, sukurtiems naudojant svečių programėlę.", + "Error occurred when opening or limiting the conversation" : "Atidarant arba ribojant pokalbį įvyko klaida", + "Open conversation to registered users, showing it in search results" : "Atviras pokalbis registruotiems vartotojams, rodomas paieškos rezultatuose", + "Also open to users created with the Guests app" : "Taip pat prieinama vartotojams, susikūrusiems naudojant svečių programėlę", + "Open conversation" : "Atverti pokalbį", + "Set language spoken in calls" : "Nustatyti pokalbiuose naudojamą kalbą", + "Languages could not be loaded" : "Nepavyko įkelti kalbų", + "Loading languages …" : "Įkeliamos kalbos …", + "Invalid language" : "Neteisinga kalba", + "Default language (English)" : "Numatomoji kalba (anglų)", + "Default live transcription language set" : "Numatytasis transkripcijos realiuoju laiku kalbos rinkinys", + "Live transcription language set: {languageName}" : "Transkripcijos realiuoju laiku kalbos rinkinys: {languageName}", + "Error when trying to set live transcription language" : "Klaida bandant nustatyti transkripcijos realiuoju laiku kalbą", + "Start time: {date}" : "Pradžios laikas: {date}", + "Start time has been updated" : "Pradžios laikas atnaujintas", + "Error occurred while updating start time" : "Atnaujinant pradžios laiką, įvyko klaida", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Įjungus laukiamąjį, iš vykstančio skambučio bus pašalinti ne moderatoriai.", + "Enable lobby, restricting the conversation to moderators" : "Įjungti laukiamąjį, apribojant pokalbį tik moderatoriams", + "Meeting start time" : "Susitikimo pradžios laikas", + "Start time (optional)" : "Pradžios laikas (nebūtinas)", + "Import email participants" : "Importuoti el. pašto dalyvius", + "You can import a list of email participants from a CSV file." : "Galite importuoti el. pašto dalyvių sąrašą iš CSV failo.", + "Poll drafts" : "Apklausos projektai", + "Browse poll drafts" : "Peržiūrėti apklausų projektus", + "Error occurred when locking the conversation" : "Užrakinant pokalbį, įvyko klaida", + "Error occurred when unlocking the conversation" : "Atrakinant pokalbį, įvyko klaida", + "Lock conversation" : "Užrakinti pokalbį", + "This will also terminate the ongoing call." : "Tai taip pat nutrauks vykstantį pokalbį.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Užrakinkite pokalbį, kad niekas negalėtų skelbti žinučių ar pradėti skambučių", + "Edit" : "Redaguoti", + "More information" : "Daugiau informacijos", + "Delete" : "Ištrinti", + "Add new bridged channel to current conversation" : "Pridėti naują sujungtą kanalą prie dabartinio pokalbio", + "unknown state" : "nežinoma būsena", + "running" : "vykdoma", + "not running, check Matterbridge log" : "neveikia, patikrinkite „Matterbridge“ žurnalą", + "not running" : "neveikia", + "Bridge saved" : "Sąsaja išsaugota", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Naudodami „Matterbridge“ galite sujungti kanalus iš įvairių momentinių pranešimų sistemų.", + "More info on Matterbridge" : "Daugiau informacijos apie „Matterbridge“", + "Messaging systems" : "Pranešimų sistemos", + "Enable bridge" : "Įjungti sąsają", + "Show Matterbridge log" : "Rodyti „Matterbridge“ žurnalą", + "Log content" : "Žurnalo turinys", + "Only moderators are allowed to mention @all" : "Tik moderatoriai gali minėti @all", + "All participants are allowed to mention @all" : "Visiems dalyviams leidžiama paminėti @all", + "Participants are now allowed to mention @all." : "Dalyviai dabar gali paminėti @all.", + "Mentioning @all has been limited to moderators." : "Galimybė paminėti @all buvo apribota iki moderatorių.", + "Allow participants to mention @all" : "Leisti dalyviams paminėti @all", + "Mention permissions" : "Paminėti leidimus", + "Notifications" : "Pranešimai", + "Notify about calls in this conversation" : "Pranešti apie skambučius šiame pokalbyje", + "Important conversation" : "Svarbus pokalbis", + "\"Do not disturb\" user status is ignored for important conversations" : "Svarbių pokalbių metu vartotojo būsena „Netrukdyti“ ignoruojama", + "Sensitive conversation" : "Jautrus pokalbis", + "Message preview will be disabled in conversation list and notifications" : "Pokalbių sąraše ir pranešimuose bus išjungtas pranešimų peržiūros režimas", + "Recording consent is required for calls in this conversation" : "Šio pokalbio skambučiams įrašyti reikalingas sutikimas", + "Recording consent is not required for calls in this conversation" : "Šio pokalbio skambučiams įrašymo sutikimas nereikalingas.", + "Recording consent requirement was updated" : "Atnaujintas įrašo sutikimo reikalavimas", + "Error occurred while updating recording consent" : "Atnaujinant įrašymo sutikimą įvyko klaida", + "Recording Consent" : "Sutikimas dėl įrašymo", + "Recording consent cannot be changed once a call or breakout session has started." : "Sutikimo įrašyti negalima pakeisti prasidėjus skambučiui ar pokalbiui mažomis grupėmis.", + "Require recording consent before joining call in this conversation" : "Prieš prisijungiant prie šio pokalbio, reikia gauti sutikimą įrašyti pokalbį", + "Recording consent is required for all calls" : "Visiems skambučiams reikalingas įrašymo sutikimas", + "SIP dial-in is now possible without PIN requirement" : "SIP skambinimo funkcija dabar galima be PIN kodo", + "SIP dial-in is now enabled" : "Dabar įjungtas prisijungimas per SIP", + "SIP dial-in is now disabled" : "SIP prisijungimas dabar išjungtas", + "Error occurred when enabling SIP dial-in" : "Įjungiant SIP skambinimo funkciją įvyko klaida", + "Error occurred when disabling SIP dial-in" : "Išjungiant SIP rinkimą įvyko klaida", + "Phone and SIP dial-in" : "Skambinimas telefonu ir per SIP", + "Enable phone and SIP dial-in" : "Įjungti skambinimą telefonu ir SIP", + "Allow to dial-in without a PIN" : "Leisti prisijungti be PIN kodo", + "Ongoing" : "Tebevykstantis", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n žmogus priėmė","%n žmonės priėmė","%n žmonių priėmė","%n žmonių priėmė"], + "_%n person declined_::_%n people declined_" : ["%n žmogus atmetė","%n žmonės atmetė","%n žmonių atmetė","%n žmonių atmetė"], + "_and %n other attachment_::_and %n other attachments_" : ["ir %n kitas priedas","ir %n kiti priedai","ir %n kitų priedų","ir %n kitų priedų"], + "With {displayName}" : "Su {displayName}", + "In {conversation}" : "{conversation}", + "View attachment" : "Žiūrėti priedą", + "Join" : "Prisijungti", + "View conversation" : "Žiūrėti pokalbį", + "View event on Calendar" : "Žiūrėti įvykį kalendoriuje", + "Error while creating the conversation" : "Klaida kuriant pokalbį", + "Hello, {displayName}" : "Sveiki, {displayName}", + "Start meeting now" : "Pradėti susitikimą dabar", + "Give your meeting a title" : "Pavadinkite savo susitikimą", + "Create and copy link" : "Sukurti ir nukopijuoti nuorodą", + "Create a new conversation" : "Sukurti naują pokalbį", + "Join open conversations" : "Prisijungti prie atvirų pokalbių", + "Call a phone number" : "Paskambinti telefono numeriu", + "Scroll backward" : "Slinkti atgal", + "Scroll forward" : "Slinkti į priekį", + "Schedule meetings" : "Suplanuoti susitikimus", + "You don't have any upcoming meetings" : "Neturite jokių būsimų susitikimų", + "Calendar events with a conversation link as the location are shown here" : "Čia rodomi kalendoriaus įvykiai, kurių vieta nurodyta kaip pokalbio nuoroda.", + "Open calendar" : "Atverti kalendorių", + "Unread mentions" : "Neskaityti paminėjimai", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Žinutės, kuriose buvote paminėtas, bus rodomos čia. Galite paminėti žmones įvesdami @ ir jų vardus.", + "Upcoming reminders" : "Artėjantys priminimai", + "Message reminders" : "Pranešimų priminimai", + "Set a reminder on a message to be notified" : "Nustatykite priminimą apie pranešimą, kad gautumėte pranešimą", + "Start a group conversation" : "Pradėti grupinį pokalbį", + "Create conversation" : "Sukurti pokalbį", + "Enter your name" : "Įveskite savo vardą", + "Submit name and join" : "Pateikti vardą ir prisijungti", + "Do you already have an account?" : "Ar jau turite paskyra?", + "Log in" : "Prisijungti", + "Error while verifying uploaded file" : "Klaida tikrinant įkeltą failą", + "Uploaded file is verified" : "Įkeltas failas patvirtintas", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Turinio formatas yra kableliais atskirtos reikšmės (CSV):
– Antraštės eilutė yra privaloma ir turi sutapti su „vardas“, „el. paštas“ arba tiesiog „el. paštas“
– Po vieną įrašą eilutėje (pvz., „John Doe“, „john@example.tld“)", + "Participants added successfully" : "Dalyviai sėkmingai pridėti", + "Error while adding participants" : "Pridedant dalyvius įvyko klaida", + "Import a file" : "Importuoti failą", + "Browse" : "Naršyti", + "Verifying uploaded file …" : "Pridedant dalyvius įvyko klaida", + "This might take a moment" : "Tai gali šiek tiek užtrukti", + "Send invitations" : "Siųsti kvietimus", + "_%n invalid email_::_%n invalid emails_" : ["%n neteisingas el. pašto adresas","%n neteisingi el. pašto adresai","%n neteisingų el. pašto adresų","%n neteisingų el. pašto adresų"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n el. laiškas jau importuotas arba yra pasikartojantis","%n el. laiškai jau importuoti arba yra pasikartojantys","%n el. laiškų jau importuota arba yra pasikartojantys","%n el. laiškų jau importuota arba yra pasikartojantys"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n kvietimą galima siųsti","%n kvietimus galima siųsti","%n kvietimų galima siųsti","%n kvietimų galima siųsti"], + "An error occurred while calling a phone number" : "Skambinant telefono numeriu įvyko klaida", + "Phone number could not be called: {error}" : "Nepavyko paskambinti telefono numeriu: {error}", + "Phone number could not be called" : "Nepavyko paskambinti telefono numeriu", + "Search participants or phone numbers" : "Ieškoti dalyvių arba telefono numerių", + "Creating the conversation …" : "Kuriamas pokalbis…", + "Mark as read" : "Žymėti kaip skaitytą", + "Mark as unread" : "Žymėti kaip neskaitytą", + "Remove from favorites" : "Šalinti iš mėgstamų", + "Add to favorites" : "Pridėti į mėgstamus", + "Unarchive conversation" : "Atkurti pokalbio archyvą", + "Ignore \"Do not disturb\"" : "Ignoruoti „Netrukdyti“", + "You need to promote a new moderator before you can leave the conversation." : "Prieš išeidami iš pokalbio, turite paaukštinti naują moderatorių.", + "Conversation actions" : "Pokalbio veiksmai", + "Notify about calls" : "Pranešti apie skambučius", + "Hide message text" : "Slėpti pranešimo tekstą", + "Pending invitations" : "Laukiantys kvietimai", + "Join conversations from other servers" : "Prisijunkite prie pokalbių iš kitų serverių", + "From {user} at {remoteServer}" : "Nuo {user} iš {remoteServer}", + "Decline invitation" : "Atmesti pakvietimą", + "Accept invitation" : "Priimti pakvietimą", + "No pending invitations" : "Nėra laukiančių kvietimų", + "Home" : "Pagrindinis", + "Unread" : "Neskaityta", + "Mentions" : "Paminėjimai", + "Meetings" : "Susitikimai", + "Sort conversations" : "Rūšiuoti pokalbius", + "By recent activity" : "Pagal pastarąją veiklą", + "Alphabetically" : "Pagal abėcėlę", + "Do not group by type" : "Negrupuoti pagal tipą", + "Show private ones first" : "Pirmiausia parodykite privačius", + "Show group ones first" : "Pirmiausia parodykite grupinius", + "No followed threads" : "Nėra sekamų gijų", + "No matches found" : "Nerasta jokių atitikmenų", + "No conversations found" : "Pokalbių nerasta", + "You have no archived conversations." : "Neturite archyvuotų pokalbių.", + "Subscribe to an existing thread or start your own." : "Prenumeruokite esamą temą arba pradėkite savo.", + "You have no unread mentions." : "Neturite neskaitytų paminėjimų.", + "You have no unread messages." : "Jūs neturite neskaitytų žinučių.", + "An error occurred while performing the search" : "Atliekant paiešką, įvyko klaida", + "Conversation list" : "Pokalbių sąrašas", + "Filter conversations by" : "Filtruoti pokalbius pagal", + "Unread messages" : "Neskaitytos žinutės", + "Meeting conversations" : "Susitikimų pokalbiai", + "Clear filters" : "Išvalyti filtrus", + "New personal note" : "Naujas asmeninis užrašas", + "SIP backend is not installed" : "SIP posistemė neįdiegta", + "Back to conversations" : "Atgal į pokalbius", + "Archived conversations" : "Archyvuoti pokalbiai", + "Threads" : "Temos", + "Clear filter" : "Išvalyti filtrą", + "Show more threads" : "Rodyti daugiau temų", + "App settings" : "Programėlės nustatymai", + "Users" : "Vartotojai", + "Groups" : "Grupės", + "Teams" : "Komandos", + "Federated users" : "„Federuoti\" vartotojai", + "New private conversation" : "Naujas privatus pokalbis", + "Other sources" : "Kiti šaltiniai", + "Open conversations" : "Atviri pokalbiai", + "No search results" : "Nėra paieškos rezultatų", + "Users, groups and teams" : "Naudotojai, grupės ir komandos", + "Users and groups" : "Naudotojai ir grupės", + "Users and teams" : "Naudotojai ir komandos", + "Groups and teams" : "Grupės ir komandos", + "New group conversation" : "Naujas grupės pokalbis", + "The meeting will start soon" : "Susitikimas netrukus prasidės", + "This meeting is scheduled for {startTime}" : "Šis susitikimas yra suplanuotas {startTime}", + "You are currently waiting in the lobby" : "Šiuo metu laukiate laukiamąjame", + "Enable noise suppression" : "Įjungti triukšmo slopinimą", + "Reduce background noises for better voice quality" : "Sumažinkite foninį triukšmą, kad balso kokybė būtų geresnė", + "Enable echo cancellation" : "Įjungti aido panaikinimą", + "Minimize echo effect from own surrounding" : "Sumažinkite aido efektą savo aplinkoje", + "Enable auto gain control" : "Įgalinti automatinį stiprinimo valdymą", + "Dynamically adjust microphone volume for consistent level" : "Dinamiškai reguliuokite mikrofono garsumą, kad lygis būtų pastovus", + "Select microphone" : "Pasirinkti mikrofoną", + "No microphone available" : "Nėra prieinamo mikrofono", + "Select speaker" : "Pasirinkite garsiakalbį", + "No speaker available" : "Garsiakalbis nepasiekiamas", + "Select camera" : "Pasirinkti kamerą", + "No camera available" : "Nėra prieinamos kameros", + "Select a device" : "Pasirinkti įrenginį", + "Playing …" : "Atkuriama…", + "Test speakers" : "Išbandyti garsiakalbius", + "Test" : "Testuoti", + "Devices" : "Įrenginiai", + "Backgrounds" : "Fonai", + "No audio" : "Nėra jokio garso", + "No camera" : "Nėra kameros", + "Display video as you will see it (mirrored)" : "Rodyti vaizdo įrašą taip, kaip jį matysite (veidrodinį)", + "Display video as others will see it" : "Rodyti vaizdo įrašą taip, kaip jį matys kiti", + "Calls are not supported in your browser" : "Jūsų naršyklėje skambučiai yra nepalaikomi", + "Access to microphone is only possible with HTTPS" : "Prieiga prie mikrofono yra įmanoma tik naudojant HTTPS", + "Access to microphone was denied" : "Prieiga prie mikrofono buvo uždrausta", + "Error while accessing microphone" : "Klaida gaunant prieigą prie mikrofono", + "Access to camera is only possible with HTTPS" : "Prieiga prie kameros yra įmanoma tik naudojant HTTPS", + "The call is being recorded." : "Skambutis įrašomas.", + "The call might be recorded." : "Skambutis gali būti įrašomas.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Įraše gali būti jūsų balsas, vaizdo įrašas iš kameros ir ekrano bendrinimo vaizdas. Prieš prisijungiant prie skambučio, reikalingas jūsų sutikimas.", + "Give consent to the recording of this call" : "Duoti sutikimą įrašyti šį pokalbį", + "Show more info" : "Rodyti daugiau informacijos", + "Audio is not available" : "Garso nėra", + "Video is not available" : "Vaizdo nėra", + "Start recording immediately with the call" : "Pradėkite įrašymą iš karto skambinant", + "Recording backend is not installed" : "Įrašymo posistemė neįdiegta", + "Notify all participants about this call" : "Pranešti visiems dalyviams apie šį skambutį", + "Apply settings" : "Taikyti nustatymus", + "Select virtual office background" : "Pasirinkite virtualaus biuro foną", + "Select virtual home background" : "Pasirinkite virtualių namų foną", + "Select virtual abstract background" : "Pasirinkite virtualų abstraktų foną", + "Select virtual beach background" : "Pasirinkite virtualų paplūdimio foną", + "Select virtual park background" : "Pasirinkite virtualaus parko foną", + "Select virtual theater background" : "Pasirinkite virtualaus teatro foną", + "Select virtual library background" : "Pasirinkite virtualios bibliotekos foną", + "Select virtual space station background" : "Pasirinkite virtualios kosminės stoties foną", + "Error while uploading the file" : "Įkeliant failą įvyko klaida", + "Select a file" : "Pasirinkti failą", + "Invalid path selected" : "Pasirinktas neteisingas kelias", + "Select virtual background from file {fileName}" : "Pasirinkite virtualų foną iš {fileName} failo", + "Blur" : "Suliejimas", + "Upload" : "Įkelti", + "Files" : "Failai", + "(editing)" : "(redagavimas)", + "(edited)" : "(redaguota)", + "The message has expired or has been deleted" : "Žinutė nebegalioja arba buvo ištrinta", + "Cancel quote" : "Atšaukti citatą", + "24 hours" : "24 valandos", + "7 days" : "7 dienos", + "30 days" : "30 dienų", + "Until unpin" : "Kol nebus atsegta", + "Clear reminder – {timeLocale}" : "Išvalyti priminimą - {timeLocale}", + "Edited by {actor}" : "Redagavo {actor}", + "Pinned by you" : "Jūs prisgėte", + "Pinned by {actor}" : "Prisegė {actor}", + "Until {absoluteDate}" : "Iki {absoluteDate}", + "Message text copied to clipboard" : "Žinutės tekstas nukopijuotas į iškarpinę", + "Message text could not be copied" : "Nepavyko nukopijuoti žinutės teksto", + "Message forwarded to \"Note to self\"" : "Žinutė persiųsta į „Pastaba sau“", + "Error while forwarding message to \"Note to self\"" : "Klaida persiunčiant pranešimą į „Pastaba sau“", + "A reminder was successfully removed" : "Priminimas buvo sėkmingai pašalintas", + "Error occurred when removing a reminder" : "Šalinant priminimą įvyko klaida", + "A reminder was successfully set at {datetime}" : "Priminimas sėkmingai nustatytas {datetime}", + "Error occurred when creating a reminder" : "Kuriant priminimą įvyko klaida", + "Add a reaction to this message" : "Pridėti reakciją į šį pranešimą", + "Reply" : "Atsakyti", + "More actions" : "Daugiau veiksmų", + "Set reminder" : "Nustatyti priminimą", + "Pin message" : "Prisegti pranešimą", + "Unpin message" : "Atsegti pranešimą", + "Reply privately" : "Atsakyti privačiai", + "Edit message" : "Redaguoti laišką", + "Copy message" : "Kopijuoti pranešimą", + "Copy message link" : "Kopijuoti žinutės nuorodą", + "Go to file" : "Pereiti į failą", + "Download file" : "Atsisiųsti failą", + "Go to thread" : "Eiti į temą", + "Edit thread details" : "Redaguoti temos informaciją", + "Forward message" : "Persiųsti žinutę", + "Translate" : "Verskite", + "Set custom reminder" : "Nustatyti tinkintą priminimą", + "Keep pinned for" : "Laikyti prisegtą", + "Set custom period" : "Nustatyti tinkintą laikotarpį", + "Close reactions menu" : "Užverti reakcijų meniu", + "React with {emoji}" : "Reaguoti naudojant {emoji}", + "React with another emoji" : "Reaguoti kita šypsenėle", + "Choose a conversation to forward the selected message." : "Pasirinkite pokalbį, kad persiųstumėte pasirinktą pranešimą.", + "Error while forwarding message" : "Klaida persiunčiant žinutę", + "The message has been forwarded to {selectedConversationName}" : "Žinutė buvo persiųsta į {selectedConversationName}", + "Dismiss" : "Atmesti", + "Go to conversation" : "Eikite į pokalbį", + "Detect language" : "Aptikti kalbą", + "The message could not be translated" : "Nepavyko išversti laiško", + "Translation copied to clipboard" : "Vertimas nukopijuotas į iškarpinę", + "Translation could not be copied" : "Nepavyko nukopijuoti vertimo", + "Translate message" : "Versti žinutę", + "Source language to translate from" : "Pradinė kalba, iš kurios versti", + "Translate from" : "Versti iš", + "Target language to translate into" : "Paskirties kalba, į kurią versti", + "Translate to" : "Versti į", + "Translating" : "Verčiama", + "This translation is AI generated and may contain mistakes." : "Šis vertimas yra sugeneruotas dirbtinio intelekto ir gali turėti klaidų.", + "Copy translated text" : "Kopijuoti išverstą tekstą", + "Error when scheduling the message" : "Klaida planuojant pranešimą", + "Reschedule" : "Pakeisti datą", + "Send now" : "Siųsti dabar", + "Choose a time" : "Pasirinkite laiką", + "Send at custom time" : "Siųsti pasirinktu laiku", + "Will be sent without notification" : "Bus išsiųsta be pranešimo", + "Message read by everyone who shares their reading status" : "Žinutę perskaitė visi, kurie pasidalijo savo skaitymo būsena", + "Message sent" : "Žinutė išsiųsta", + "Sent without notification" : "Nusiųsta be pranešimo", + "Deleting message" : "Žinutės ištrynimas", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Žinutė sėkmingai ištrinta, bet sukonfigūruotas botas arba „Matterbridge“ ir žinutė jau gali būti išplatinta kitoms paslaugoms", + "Message deleted successfully" : "Žinutė sėkmingai ištrinta", + "Message could not be deleted because it is too old" : "Nepavyko ištrinti žinutės, nes ji per sena", + "Only normal chat messages can be deleted" : "Galima ištrinti tik įprastas pokalbių žinutes", + "An error occurred while deleting the message" : "Trinant pranešimą įvyko klaida", + "Pinned" : "Prisegta", + "Your browser does not support playing audio files" : "Jūsų naršyklė nepalaiko garso įrašo failų atkūrimo", + "Contact" : "Kontaktas", + "{stack} in {board}" : "{stack} lentelėje {board}", + "Deck Card" : "Darbų kortelė", + "Remove {fileName}" : "Šalinti {fileName}", + "Open this location in OpenStreetMap" : "Atidaryti šią vietą „OpenStreetMap“ žemėlapyje", + "_%n reply_::_%n replies_" : ["%n atsakymas","%n atsakymai","%n atsakymų","%n atsakymų"], + "Sending message" : "Siunčiamas pranešimas", + "Failed to send the message. Click to try again" : "Nepavyko išsiųsti pranešimo. Spustelėkite, kad bandytumėte dar kartą.", + "Not enough free space to upload file" : "Nepakanka laisvos vietos failui įkelti", + "You cannot send messages to this conversation at the moment" : "Šiuo metu negalite siųsti žinučių į šį pokalbį", + "Could not update the message" : "Nepavyko atnaujinti pranešimo", + "Reply to thread \"{threadTitle}\"" : "Atsakyti į temą „{threadTitle}“", + "_You voted • %n vote_::_You voted • %n votes_" : ["Jūs balsavote • %n balsas","Jūs balsavote • %n balsai","Jūs balsavote • %n balsų","Jūs balsavote • %n balsų"], + "You voted" : "Jūs balsavote", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Spustelėkite, kad balsuotumėte • %n balsas","Spustelėkite, kad balsuotumėte • %n balsai","Spustelėkite, kad balsuotumėte • %n balsų","Spustelėkite, kad balsuotumėte • %n balsų"], + "Click to vote" : "Spustelėkite, kad balsuotumėte", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Apklausos projektas • %n pasirinkimas","Apklausos projektas • %n pasirinkimai","Apklausos projektas • %n pasirinkimų","Apklausos projektas • %n pasirinkimų"], + "_%n vote_::_%n votes_" : ["%n balsas","%n balsai","%n balsų","%n balsas"], + "Edit poll draft" : "Redaguoti apklausos projektą", + "Delete poll draft" : "Ištrinti apklausos juodraštį", + "Open poll" : "Pradėti apklausą", + "Closed poll" : "Uždaryta apklausa", + "See results" : "Rodyti rezultatus", + "Reactions" : "Reakcijos", + "No permission to post reactions in this conversation" : "Šiame pokalbyje nėra leidimo skelbti reakcijų", + "and {participant}" : "ir {participant}", + "_and %n other participant_::_and %n other participants_" : ["ir dar %n dalyvis","ir dar %n dalyviai","ir dar %n dalyvių","ir dar %n dalyvis"], + "Show all reactions" : "Rodyti visas reakcijas", + "Add more reactions" : "Pridėti daugiau reakcijų", + "Show or collapse system messages" : "Rodyti arba sutraukti sistemos pranešimus", + "No messages" : "Nėra laiškų", + "All messages have expired or have been deleted." : "Visos žinutės nebegalioja arba buvo ištrintos.", + "Generate summary with AI" : "Sukurkite santrauką naudodami AI", + "{author} (pinned by you)" : "{author} (jūs prisegėte)", + "{author} (pinned by {actor})" : "{author} (prisegė {actor})", + "Unpin" : "Atsegti", + "Cancel search" : "Atsisakyti paieškos", + "Add a phone number" : "Pridėti telefono numerį", + "Error: A password is required to create the conversation." : "Klaida: norint sukurti pokalbį, reikia įvesti slaptažodį.", + "All set, the conversation \"{conversationName}\" was created." : "Viskas paruošta, pokalbis „{conversationName}“ buvo sukurtas.", + "Create a new group conversation" : "Sukurti naują grupės pokalbį", + "Add participants" : "Pridėti dalyvius", + "Maximum length exceeded ({maxlength} characters)" : "Viršytas maksimalus ilgis ({maxlength} simbolių)", + "Conversation type" : "Pokalbio tipas", + "Conversation visibility" : "Pokalbio matomumas", + "Allow guests to join via link" : "Leisti svečiams prisijungti per nuorodą", + "Enter password" : "Įvesti slaptažodį", + "This conversation has been locked" : "Šis pokalbis užrakintas", + "No permission to post messages in this conversation" : "Neturite leidimo rašyti pranešimų šioje diskusijoje", + "Joining conversation …" : "Prisijungiama prie pokalbio…", + "Write a message without notification" : "Parašykite žinutę be pranešimo", + "Create a thread silently" : "Sukurti temą tyliai", + "Create a thread" : "Sukurti temą", + "Send message silently" : "Siųsti žinutę tyliai", + "Send message" : "Siųsti žinutę", + "Send without notification" : "Siųsti be pranešimo", + "The participant will not be notified about new messages" : "Dalyvis nebus informuojamas apie naujus pranešimus", + "Participants will not be notified about new messages" : "Dalyviai nebus informuojami apie naujus pranešimus", + "Message will be sent {datetimeString}" : "Pranešimas bus išsiųstas {datetimeString}", + "Thread title is required" : "Reikalingas temos pavadinimas", + "Message text is required" : "Būtinas žinutės tekstas", + "The message could not be edited" : "Nepavyko redaguoti žinutės", + "File to share" : "Failas, kurį bendrinti", + "File upload is not available in this conversation" : "Šiame pokalbyje failų įkėlimas negalimas", + "Message was successfully scheduled" : "Pranešimas sėkmingai suplanuotas", + "Add emoji" : "Pridėti šypsenėlę", + "Adding a mention will only notify users who did not read the message." : "Pridėjus paminėjimą, bus informuoti tik tie vartotojai, kurie neskaitė žinutės.", + "Thread title" : "Temos antraštė", + "Send later" : "Siųsti vėliau", + "Show scheduled messages" : "Rodyti suplanuotas žinutes", + "Cancel editing" : "Atšaukti redagavimą", + "Schedule message" : "Nustatyti pranešimo siuntimo laiką", + "{user} is out of office and might not respond." : "{user} yra išvykęs(-usi) ir gali neatsakyti", + "Absence period: {startDate} - {endDate}" : "Nebuvimo laikotarpis: {startDate} - {endDate}", + "Replacement:" : "Pakeitimas:", + "Share from {nextcloud}" : "Bendrinimas iš {nextcloud}", + "Share from Files" : "Bendrinti iš failų", + "Share files to the conversation" : "Bendrinkite failus pokalbyje", + "Upload from device" : "Įkelti iš įrenginio", + "Create new poll" : "Sukurti naują apklausą", + "Smart picker" : "\"Smart picker\"", + "Record voice message" : "Įrašyti balso pranešimą", + "End recording and send" : "Baigti įrašymą ir išsiųsti", + "Dismiss recording" : "Atšaukti įrašymą", + "Access to the microphone was denied" : "Prieiga prie mikrofono buvo uždrausta", + "Microphone either not available or disabled in settings" : "Mikrofonas arba neprieinamas, arba išjungtas nustatymuose", + "Error while recording audio" : "Klaida įrašant garso įrašą", + "Voice message {time} ({conversation})" : "Balso žinutė {time} ({conversation})", + "Generating summary of unread messages …" : "Neskaitytų pranešimų santraukos sukūrimas...", + "Summary is AI generated and might contain mistakes" : "Santrauka sukurta dirbtinio intelekto pagalba ir joje gali būti klaidų", + "Error occurred during a summary generation" : "Generuojant santrauką įvyko klaida", + "New file" : "Naujas failas", + "Blank" : "Tuščia", + "Error while creating file" : "Klaida kuriant failą", + "Create and share a new file" : "Sukurti ir bendrinti naują failą", + "Name of the new file" : "Naujo failo pavadinimas", + "Create file" : "Sukurti failą", + "Someone is typing …" : "Kažkas rašo…", + "{user1} is typing …" : "{user1} rašo…", + "{user1} and {user2} are typing …" : "{user1} ir {user2} rašo…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ir {user3} rašo…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ir dar %n kitas rašo…","{user1}, {user2}, {user3} ir dar %n kiti rašo…","{user1}, {user2}, {user3} ir dar %n kitų rašo…","{user1}, {user2}, {user3} ir dar %n kitų rašo…"], + "Add more files" : "Pridėti daugiau failų", + "Send" : "Siųsti", + "In this conversation {user} can:" : "Šiame pokalbyje {user} gali:", + "Edit default permissions for participants in {conversationName}" : "Redaguoti numatytuosius dalyvių leidimus {conversationName}", + "Start a call" : "Pradėti skambutį", + "Skip the lobby" : "Praleisti laukiamąjį", + "Can post messages" : "Gali skelbti pranešimus", + "Can post messages and reactions" : "Gali skelbti pranešimus ir reakcijas", + "Can add reactions" : "Galima pridėti reakcijas", + "Enable the microphone" : "Įjungti mikrofoną", + "Enable the camera" : "Įjungti kamerą", + "Share the screen" : "Bendrinti ekraną", + "Update permissions" : "Atnaujinti leidimus", + "Updating permissions" : "Leidimų atnaujinimas", + "No poll drafts" : "Nėra apklausų projektų", + "There is no poll drafts yet saved for this conversation" : "Šio pokalbio metu dar nėra išsaugotų apklausų projektų", + "Create poll in {name}" : "Sukurti apklausą {name}", + "Create poll" : "Sukurti apklausą", + "Error while importing poll" : "Klaida importuojant apklausą", + "Question" : "Klausimas", + "Ask a question" : "Užduoti klausimą", + "Import draft from file" : "Importuoti projektą iš failo", + "Answers" : "Atsakymai", + "Answer {option}" : "Atsakymas {option}", + "Delete poll option" : "Ištrinti apklausos variantą", + "Add answer" : "Pridėti atsakymą", + "Settings" : "Nustatymai", + "Anonymous poll" : "Anoniminė apklausa", + "Multiple answers" : "Keli atsakymai", + "Save as draft" : "Išsaugoti kaip juodraštį", + "Export draft to file" : "Eksportuoti juodraštį į failą", + "_Final results • %n vote_::_Final results • %n votes_" : ["Galutiniai rezultatai • %n balsas","Galutiniai rezultatai • %n balsai","Galutiniai rezultatai • %n balsų","Galutiniai rezultatai • %n balsų"], + "Your vote is anonymous" : "Jūsų balsas yra anoniminis", + "You voted for this option" : "Jūs balsavote už šį variantą", + "End poll" : "Baigti apklausą", + "Change your vote" : "Keisti savo balsą", + "Withdraw vote" : "Atšaukti balsą", + "Results" : "Rezultatai", + "Download as spreadsheet" : "Atsisiųsti kaip skaičiuoklę", + "Download as CSV" : "Atsisiųsti kaip CSV", + "Voted participants" : "Balsavo dalyviai", + "Send a message to \"{roomName}\"" : "Siųsti žinutę „{roomName}“", + "Hide list of participants" : "Slėpti dalyvių sąrašą", + "Show list of participants" : "Rodyti dalyvių sąrašą", + "Assistance requested in {roomName}" : "Paprašyta pagalbos {roomName}", + "The message was sent to \"{roomName}\"" : "Žinutė buvo išsiųsta adresu „{roomName}“", + "Dismiss request for assistance" : "Atšaukti prašymą suteikti pagalbą", + "Send message to room" : "Siųsti žinutę į kambarį", + "Back to main room" : "Atgal į pagrindinį kambarį", + "Back to your room" : "Grįžti į savo kambarį", + "Message all rooms" : "Siųsti pranešimą į visus kambarius", + "Start session" : "Pradėti sesiją", + "Start a call before you start a breakout room session" : "Pradėkite skambutį prieš pradėdami grupinio darbo sesiją", + "Stop session" : "Sustabdyti sesiją", + "The message was sent to all breakout rooms" : "Žinutė buvo išsiųsta į visus grupinio darbo kambarius", + "Send a message to all breakout rooms" : "Siųsti žinutę į visus grupinio darbo kambarius", + "Breakout rooms are not started" : "Grupinio darbo kambariai nepradėti", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Skambučiai be didelio našumo posistemės gali sukelti ryšio problemų ir didelę įrenginių apkrovą. {linkstart} Sužinokite daugiau {linkend}", + "Talk setup incomplete" : "„Pokalbių“ nustatymas nebaigtas", + "Disable lobby" : "Išjungti laukimo salę", + "Settings for participant \"{user}\"" : "Dalyvio „{user}“ nustatymai", + "Participant \"{user}\"" : "Dalyvis „{user}“", + "moderator" : "moderatorius", + "bot" : "botas", + "guest" : "svečias", + "Ringing …" : "Skambina…", + "Call rejected" : "Skambutis atmestas", + "{time} talking …" : "{time} kalbama…", + "{time} talking time" : " pokalbio trukmė {time}", + "Raised their hand" : "Pakėlė ranką", + "Joined with video" : "Prisijungta su vaizdu", + "Joined via phone" : "Prisijungta telefonu", + "Joined with audio" : "Prisijungta su garsu", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Tekstas turi būti ne ilgesnis kaip {maxLength} simbolių arba trumpesnis. Jūsų dabartinis tekstas yra {charactersCount} simbolių ilgio.Teksto ilgis turi būti ne didesnis kaip ženklai. Jūsų dabartinis tekstas yra ženklai ilgio.", + "Remove group and members" : "Šalinti grupę ir narius", + "Remove team and members" : "Šalinti komandą ir narius", + "Remove participant" : "Šalinti dalyvį", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Ar tikrai norite pašalinti grupę „{displayName}“ ir jos narius iš šio pokalbio?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Ar tikrai norite pašalinti komandą „{displayName}“ ir jos narius iš šio pokalbio?", + "Do you really want to remove {displayName} from this conversation?" : "Ar tikrai norite pašalinti {displayName} iš šio pokalbio?", + "Notification was sent to {displayName}" : "Pranešimas išsiųstas {displayName}", + "Could not send notification to {displayName}" : "Nepavyko išsiųsti pranešimo {displayName}", + "Permissions granted to {displayName}" : "Suteikti leidimai {displayName}", + "Could not modify permissions for {displayName}" : "Nepavyko modifikuoti leidimų, skirtų {displayName}", + "Permissions removed for {displayName}" : "Leidimai pašalinti {displayName}", + "Permissions set to default for {displayName}" : "Leidimai {displayName} nustatyti pagal numatytuosius nustatymus", + "Phone number could not be hung up" : "Nepavyko padėti ragelio telefono numerio", + "Phone number could not be put on hold" : "Negalima perkelti skambučio į laukimo režimą", + "Phone number could not be muted" : "Nepavyko išjungti telefono skambučio garso", + "Phone number could not be unmuted" : "Nepavyko įjungti telefono skambučio garso", + "DTMF message could not be sent" : "Nepavyko išsiųsti DTMF pranešimo", + "Phone number copied to clipboard" : "Telefono numeris nukopijuotas į iškarpinę", + "Phone number could not be copied" : "Nepavyko nukopijuoti telefono numerio", + "in the lobby" : "laukiamąjame", + "Dial out phone" : "Išeinantis skambutis", + "Hang up phone" : "Padėti ragelį", + "Move back to lobby" : "Grįžti į laukiamąjį", + "Move to conversation" : "Pereiti prie pokalbio", + "Dial-in PIN" : "Skambinimo PIN kodas", + "Demote from moderator" : "Pažeminti iš moderatorių", + "Promote to moderator" : "Paaukštinti į moderatorius", + "Resend invitation" : "Siųsti pakvietimą iš naujo", + "Send call notification" : "Siųsti pranešimą apie skambutį", + "Dial out phone number" : "Surinkti telefono numerį", + "Resume call for phone number" : "Tęsti skambutį telefono numeriu", + "Put phone number on hold" : "Užlaikyti telefono numerį", + "Unmute phone number" : "Įjungti telefono numerio garsą", + "Mute phone number" : "Nutildyti telefono numerį", + "Copy phone number" : "Kopijuoti telefono numerį", + "Reset custom permissions" : "Atstatyti tinkintus leidimus", + "Grant all permissions" : "Suteikti visus leidimus", + "Remove all permissions" : "Šalinti visus leidimus", + "Also ban from this conversation" : "Taip pat uždrausti dalyvauti šiame pokalbyje", + "Internal note (reason to ban)" : "Vidinė pastaba (blokavimo priežastis)", + "Remove" : "Šalinti", + "Permissions modified for {displayName}" : "Leidimai atnaujinti {displayName}", + "Add users, groups or teams" : "Pridėti vartotojus, grupes arba komandas", + "Add users or groups" : "Pridėti vartotojus ar grupes", + "Add users or teams" : "Pridėti vartotojus arba komandas", + "Add users" : "Pridėti vartotojus", + "Add groups or teams" : "Pridėti grupes arba komandas", + "Add groups" : "Pridėti grupes", + "Add teams" : "Pridėti komandas", + "Add other sources" : "Pridėti kitus šaltinius", + "Add emails" : "Pridėti el. paštus", + "Integrations" : "Integracijos", + "Add federated users" : "Pridėti federuotus vartotojus", + "Searching …" : "Ieškoma…", + "Search for more users" : "Ieškoti daugiau vartotojų", + "You can search or add participants via name, email, or Federated Cloud ID" : "Galite ieškoti dalyvių arba juos pridėti pagal vardą, el. paštą arba federuotos debesijos ID“", + "Search or add participants" : "Ieškoti arba pridėti dalyvius", + "Invitation was sent to {actorId}" : "Kvietimas buvo išsiųstas {actorId}", + "An error occurred while adding the participants" : "Pridedant dalyvius įvyko klaida", + "A new group conversation with selected participant will be created" : "Bus sukurta nauja grupinė pokalbių sesija su pasirinktu dalyviu", + "Participants" : "Dalyviai", + "Pinned by a deleted user" : "Prisegė ištrintas vartotojas", + "Participants ({count})" : "Dalyviai ({count})", + "Open chat" : "Atverti pokalbį", + "You have new unread messages in the chat." : "Pokalbyje turite naujų neskaitytų žinučių.", + "You have been mentioned in the chat." : "Buvote paminėtas pokalbyje.", + "Search messages" : "Ieškoti žinučių", + "Chat" : "Pokalbis", + "Details" : "Išsamiau", + "Shared items" : "Bendrinami elementai", + "Search in {name}" : "Ieškoti esančių {name}", + "Threads in {name}" : "Temos esančios {name}", + "{actor} in {conversation}" : "{actor} pokalbyje {conversation}", + "Search messages …" : "Ieškoti žinučių...", + "Search options" : "Paieškos parinktys", + "From User" : "Iš vartotojo", + "Since" : "Nuo tada", + "Until" : "Iki", + "No results found" : "Nerasta jokių rezultatų", + "Load more results" : "Įkelti daugiau rezultatų", + "Recent threads" : "Naujausios temos", + "Projects" : "Projektai", + "No shared items" : "Nėra bendrinamų elementų", + "Thread notifications" : "Temos pranešimai", + "Thread actions" : "Temų veiksmai", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Nuoroda į pokalbį", + "No open conversations found" : "Nerasta jokių atvirų pokalbių", + "Either there are no open conversations or you joined all of them." : "Arba nėra atvirų pokalbių, arba jūs prie jų visų prisijungėte.", + "Check spelling or use complete words." : "Patikrinkite rašybą arba rašykite pilnais žodžiais.", + "Search conversations or users" : "Ieškoti pokalbių ar vartotojų", + "Select conversation" : "Pasirinkite pokalbį", + "Number length is not valid" : "Numerio ilgis netinkamas", + "Region code is not valid" : "Regiono kodas neteisingas", + "Number length is too short" : "Numerio ilgis per trumpas", + "Number length is too long" : "Numerio ilgis per didelis", + "Number is not valid" : "Numeris yra neteisingas", + "Phone numbers" : "Telefono numeriai", + "Display name: {name}" : "Rodomas vardas: {name}", + "Edit display name" : "Redaguoti rodomą vardą", + "Display name (required)" : "Rodomas vardas (privaloma)", + "Save name" : "Išsaugoti vardą", + "I picked message bubbles" : "Išsirinkau žinučių burbulus", + "I picked the list style" : "Pasirinkau sąrašo stilių", + "Error while setting personal setting" : "Klaida nustatant asmeninius nustatymus", + "Error while saving sounds setting" : "Klaida išsaugant garso nustatymus", + "Compact conversations list" : "Sutrumpintas pokalbių sąrašas", + "Chat appearance" : "Pokalbio išvaizda", + "Messages list" : "Žinučių sąrašas", + "Message bubbles" : "Žinučių burbulai", + "Play sounds when participants join or leave a call" : "Paleisti garsą, kai dalyviai prisijungia prie pokalbio arba jį palieka", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Šiuo metu negalima naudoti „iPhone“ ir „iPad“ įrenginiuose dėl gamintojo nustatytų techninių apribojimų", + "Notification settings" : "Pranešimų nustatymai", + "Sounds for chat and call notifications" : "Garsai, skirti pokalbių ir skambučių pranešimams", + "Invalid language ({languageId})" : "Neteisinga kalba ({languageId})", + "Default language" : "Numatytoji kalba", + "Default language ({languageName})" : "Numatomoji kalba ({languageName})", + "Error when trying to load the available live translation languages" : "Klaida bandant įkelti galimas vertimo realiuoju laiku kalbas", + "Error when trying to set live translation language" : "Klaida bandant nustatyti vertimo realiuoju laiku kalbą", + "Set language used to show the transcriptions" : "Nustatyti kalbą, kuria rodomos transkripcijos", + "Select location for attachments" : "Pasirinkti vietą priedams", + "Error while setting attachment folder" : "Klaida nustatant priedų aplanką", + "Error while setting read status privacy" : "Klaida nustatant skaitymo būsenos privatumą", + "Error while setting typing status privacy" : "Klaida nustatant rašymo būsenos privatumą", + "Error while setting default media state" : "Klaida nustatant numatytąjį medijos būseną", + "Turn camera and microphone off by default" : "Pagal numatytuosius nustatymus išjungti kamerą ir mikrofoną", + "Blur camera background by default" : "Pagal numatytuosius nustatymus išblukti kameros foną", + "Skip device preview before joining a call" : "Prieš prisijungiant prie pokalbio praleisti įrenginio peržiūrą", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Prisijungus kamera bus išjungta. Rodoma visada, jei reikalingas sutikimas įrašyti.", + "Appearance & Sounds" : "Išvaizda ir Garsai", + "Privacy" : "Privatumas", + "Send read receipts" : "Siųsti skaitymo patvirtinimus", + "When off, all read statuses will be hidden" : "Kai funkcija išjungta, visi skaitymo statusai bus paslėpti", + "Share typing status" : "Bendrinti rašymo būseną", + "When off, all typing indicators will be hidden" : "Kai funkcija išjungta, visi rašymo indikatoriai bus paslėpti", + "Attachments folder" : "Priedų aplankas", + "Toggle full screen" : "Perjungti visą ekraną", + "Return to Home screen" : "Grįžti į Pradžios ekraną", + "Search" : "Ieškoti", + "Shortcuts while in a chat" : "Spartieji klavišai dalyvaujant pokalbyje", + "Focus the chat input" : "Pasirinkti pokalbio rašymo laukelį", + "Unfocus the chat input to use shortcuts" : "Išeiti iš pokalbio rašymo laukelio, kad veiktų spartieji klavišai", + "Edit your last message" : "Redaguoti paskutinį pranešimą", + "Shortcuts while in a call" : "Spartieji klavišai dalyvaujant skambutyje", + "Camera on and off" : "Įjungti ar išjungti kamerą", + "Microphone on and off" : "Įjungti ar išjungti mikrofoną", + "Raise or lower hand" : "Pakelti ar nuleisti ranką", + "Push to talk or push to mute" : "Paspausk ir kalbėk arba paspausk ir nutildyk", + "Zoom-in / zoom-out a screen share" : "Padidinti / sumažinti ekrano vaizdą", + "Mouse wheel" : "Peles ratukas", + "Start call silently" : "Pradėti skambutį tyliai", + "Start call" : "Pradėti skambutį", + "End call" : "Baigti pokalbį", + "The server was updated, you cannot start or join a call." : "Serveris buvo atnaujintas, todėl negalite pradėti pokalbio ar prie jo prisijungti.", + "This call has just ended" : "Šis pokalbis ką tik baigėsi", + "You will be able to join the call only after a moderator starts it." : "Prisijungti prie pokalbio galėsite tik tada, kai jį pradės moderatorius.", + "End call for everyone" : "Baigti pokalbį visiems", + "Starting the recording" : "Pradėti įrašymą", + "Recording" : "Įrašymas", + "The call has been running for one hour." : "Skambutis vyksta jau valandą.", + "Cancel recording start" : "Atšaukti įrašymo pradžią", + "Stop recording" : "Sustabdyti įrašymą", + "Send a reaction" : "Siųsti reakciją", + "React with {reaction}" : "Reaguoti naudojant {reaction}", + "All tasks done!" : "Visos užduotys atliktos!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} iš %n užduoties","{done} iš %n užduočių","{done} iš %n užduočių","{done} iš %n užduočių"], + "Add participants to this call" : "Pridėti dalyvius prie šio skambučio", + "_%n participant in call_::_%n participants in call_" : ["%n dalyvis skambutyje","%n dalyviai skambutyje","%n dalyvių skambutyje","%n dalyvių skambutyje"], + "Scheduled messages" : "Iš anksto suplanuoti pranešimai", + "You are not allowed to enable screensharing" : "Jums neleidžiama įjungti ekrano bendrinimo", + "No screensharing" : "Nėra ekrano bendrinimo", + "Screensharing options" : "Ekrano bendrinimo parinktys", + "Enable screensharing" : "Įjungti ekrano bendrinimą", + "Bad sent video and screen quality." : "Prasta išsiųsto vaizdo ir ekrano kokybė.", + "Bad sent screen quality." : "Prasta išsiųsto ekrano kokybė.", + "Bad sent video quality." : "Prasta išsiųsto vaizdo kokybė.", + "Bad sent audio, video and screen quality." : "Prasta išsiųsto garso, vaizdo ir ekrano kokybė.", + "Bad sent audio and screen quality." : "Prasta išsiųsto garso ir ekrano kokybė.", + "Bad sent audio and video quality." : "Prasta išsiųsto garso ir vaizdo kokybė.", + "Bad sent audio quality." : "Prasta išsiųsto garso kokybė.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano. Norėdami išspręsti šią problemą, bandykite išjungti fono suliejimo funkciją arba savo vaizdo transliaciją, kai bendrinate ekraną.", + "Disable background blur" : "Išjungti fono suliejimą", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano. Norėdami išspręsti šią problemą, pabandykite išjungti vaizdo transliaciją, kol bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nematyti jūsų ekrano.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali jūsų nematyti.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra perkrautas, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, bandykite išjungti fono suliejimo funkciją arba išjungti vaizdo transliaciją, kai bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, ir nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo transliaciją, kol bendrinate ekraną.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, ir nematyti jūsų ekrano. Norėdami išspręsti šią problemą, pabandykite išjungti ekrano bendrinimą.", + "Disable screenshare" : "Išjungti ekrano bendrinimą", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo fono suliejimo funkciją arba išjungti vaizdo transliaciją.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote, arba nematyti jūsų. Norėdami pagerinti situaciją, pabandykite išjungti vaizdo transliaciją.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Jūsų interneto ryšys arba kompiuteris yra užimti, todėl kiti dalyviai gali nesuprasti, ką sakote.", + "Screen sharing is not supported by your browser." : "Jūsų naršyklė nepalaiko ekrano bendrinimo.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekrano bendrinimas reikalauja, kad puslapis būtų įkeltas per HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekrano bendrinimas reikalauja, kad puslapis būtų įkeltas per HTTPS.", + "An error occurred while starting screensharing." : "Pradedant ekrano bendrinimą, įvyko klaida.", + "Select virtual background" : "Pasirinkite virtualų foną", + "Show your screen" : "Rodyti savo ekraną", + "Stop screensharing" : "Stabdyti ekrano bendrinimą", + "Mute others" : "Išjungti kitų garsą", + "Start recording" : "Pradėti įrašymą", + "Set up breakout rooms" : "Sukurti grupinio darbo kambarius", + "Download attendance list" : "Atsisiųsti dalyvių sąrašą", + "Open Calendar" : "Atverti kalendorių", + "Remove participant {name}" : "Šalinti dalyvį {name}", + "Would you like to delete this conversation?" : "Ar norėtumėte ištrinti šį pokalbį?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Šis pokalbis bus automatiškai ištrintas visiems po %n dienos neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo.","Šis pokalbis bus automatiškai ištrintas visiems po %n dienų neaktyvumo."], + "Are you sure you want to delete this conversation?" : "Ar tikrai norite ištrinti šį pokalbį?", + "Delete now" : "Ištrinti dabar", + "Keep" : "Palikti", + "Open dialpad" : "Atverti numerio rinkiklį", + "Select a region" : "Pasirinkti regioną", + "Local time: {time}" : "Vietinis laikas: {time}", + "Scheduled {datetime}" : "Numatyta {datetime}", + "Scheduled for {datetime}" : "Suplanuota {datetime}", + "Search …" : "Ieškoti…", + "Message without mention" : "Rašyti be paminėjimo", + "Mention myself" : "Paminėti save", + "Mention everyone" : "Paminėti kiekvieną", + "Select a conversation" : "Pasirinkite pokalbį", + "Select a mode" : "Pasirinkite režimą", + "You do not have permissions to access this conversation." : "Jūs neturite leidimų pasiekti šio pokalbio.", + "Join a different conversation or start a new one." : "Prisijunkite prie kito pokalbio arba pradėkite naują.", + "The conversation does not exist" : "Pokalbio nėra", + "Join a conversation or start a new one!" : "Prisijunkite prie pokalbio arba pradėkite naują!", + "Duplicate session" : "Dubliuoti sesiją", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Šis pokalbis buvo atidarytas kitame skirtuke. Dabartinė serverio versija nepalaiko pokalbio atidarymo keliuose skirtukuose.", + "Creating and joining a conversation with \"{userid}\"" : "Pokalbio su „{userid}“ kūrimas ir prisijungimas prie jo", + "Join a conversation or start a new one" : "Prisijunkite prie pokalbio arba pradėkite naują", + "Error while joining the conversation" : "Klaida prisijungiant prie pokalbio", + "Another user" : "Kitas vartotojas", + "Hey! Are you using the list style or message bubbles?" : "Ei! Ar naudojate sąrašo stilių, ar pranešimų burbulus?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud vartotojas", + "User password" : "Naudotojo slaptažodis", + "Talk conversation" : "„Pokalbių“ pokalbis", + "Skip TLS verification" : "Praleiskite TLS patvirtinimą", + "Matrix server URL" : "Matrix serverio URL", + "User" : "Vartotojas", + "Matrix channel" : "Matrix kanalas", + "Mattermost server URL" : "„Mattermost“ serverio URL", + "Mattermost user" : "„Mattermost“ vartotojas", + "Team name" : "Komandos pavadinimas", + "Channel name" : "Kanalo pavadinimas", + "Rocket.Chat server URL" : "Rocket.Chat serverio URL", + "User name or email address" : "Naudotojo vardas ar el. pašto adresas", + "Rocket.Chat channel" : "Rocket.Chat kanalas", + "Zulip server URL" : "„Zulip“ serverio URL", + "Bot user name" : "Boto vartotojo vardas", + "Bot API key" : "Boto API raktas", + "Zulip channel" : "„Zulip“ kanalas", + "API token" : "API prieigos raktas", + "Slack channel" : "Slack kanalas", + "Server ID or name" : "Serverio ID ar pavadinimas", + "Channel ID (prefixed with \"ID:\") or name" : "Kanalo ID (su prefiksu „ID:“) arba pavadinimas", + "Channel" : "Kanalas", + "Login" : "Prisijungti", + "Chat ID" : "Pokalbio ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC serverio URL (pvz., chat.freenode.net:6667)", + "Nickname" : "Slapyvardis", + "Connection password" : "Ryšio slaptažodis", + "IRC channel" : "IRC kanalas", + "Channel password" : "Kanalo slaptažodis", + "NickServ nickname" : "„NickServ“ slapyvardis", + "NickServ password" : "„NickServ“ slaptažodis", + "Use TLS" : "Naudoti TLS", + "Use SASL" : "Naudoti SASL", + "Tenant ID" : "Nuomotojo ID", + "Client ID" : "Kliento ID", + "Team ID" : "Komandos ID", + "Thread ID" : "Temos ID", + "XMPP/Jabber server URL" : "XMPP/Jabber serverio URL", + "MUC server URL" : "MUC serverio URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Prisegtos žinutės", + "Media" : "Medija", + "Polls" : "Apklausos", + "Deck cards" : "„Darbų“ kortelės", + "Voice messages" : "Balso žinutės", + "Locations" : "Vietos", + "Call recordings" : "Skambučių įrašai", + "Audio" : "Garso įrašai", + "Show all pinned messages" : "Rodyti visas prisegtas žinutes", + "Show all media" : "Rodyti visą mediją", + "Show all files" : "Rodyti visus failus", + "Show all polls" : "Rodyti visas apklausas", + "Show all deck cards" : "Rodyti visas „Darbų“ korteles", + "Show all voice messages" : "Rodyti visus balso pranešimus", + "Show all locations" : "Rodyti visas vietas", + "Show all call recordings" : "Rodyti visus skambučių įrašus", + "Show all audio" : "Rodyti visus garso įrašus", + "Show all other" : "Rodyti visa kita", + "Follow conversation settings" : "Sekite pokalbio nustatymus", + "Group" : "Grupė", + "Team" : "Komanda", + "You reconnected to the call" : "Jūs vėl prisijungėte prie skambučio", + "{actor} reconnected to the call" : "{actor} vėl prisijungta prie skambučio", + "You added {user0} and {user1}" : "Jūs pridėjote {user0} ir {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Jūs pridėjote {user0}, {user1} ir %n dar kitą dalyvį","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių","Jūs pridėjote {user0}, {user1} ir %n dar daugiau dalyvių"], + "An administrator added you and {user0}" : "Administratorius pridėjo jus ir {user0}", + "{actor} added you and {user0}" : "{actor} pridėjo jus ir {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administratorius pridėjo jus, {user0} ir %n kitą dalyvį","Administratorius pridėjo jus, {user0} ir %n kitus dalyvius","Administratorius pridėjo jus, {user0} ir %n kitų dalyvių","Administratorius pridėjo jus, {user0} ir %n kitų dalyvių"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} pridėjo jus, {user0} ir %n kitą dalyvį","{actor} pridėjo jus, {user0} ir %n kitus dalyvius","{actor} pridėjo jus, {user0} ir %n kitų dalyvių","{actor} pridėjo jus, {user0} ir %n kitų dalyvių"], + "An administrator added {user0} and {user1}" : "Administratorius pridėjo {user0} ir {user1}", + "{actor} added {user0} and {user1}" : "{actor} pridėjo {user0} ir {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administratorius pridėjo {user0}, {user1} ir %n kitą dalyvį","Administratorius pridėjo {user0}, {user1} ir %n kitus dalyvius","Administratorius pridėjo {user0}, {user1} ir %n kitų dalyvių","Administratorius pridėjo {user0}, {user1} ir %n kitų dalyvių"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} pridėjo {user0}, {user1} ir %n kitą dalyvį","{actor} pridėjo {user0}, {user1} ir %n kitus dalyvius","{actor} pridėjo {user0}, {user1} ir %n kitų dalyvių","{actor} pridėjo {user0}, {user1} ir %n kitų dalyvių"], + "You removed {user0} and {user1}" : "Jūs pašalinote{user0} ir {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Jūs pašalinote {user0}, {user1} ir %n kitą dalyvį","Jūs pašalinote {user0}, {user1} ir %n kitus dalyvius","Jūs pašalinote {user0}, {user1} ir %n kitų dalyvių","Jūs pašalinote {user0}, {user1} ir %n kitų dalyvių"], + "An administrator removed you and {user0}" : "Administratorius pašalino jus ir {user0}", + "{actor} removed you and {user0}" : "{actor} pašalino jus ir {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administratorius pašalino jus, {user0} ir %n kitą dalyvį","Administratorius pašalino jus, {user0} ir %n kitus dalyvius","Administratorius pašalino jus, {user0} ir %n kitų dalyvių","Administratorius pašalino jus, {user0} ir %n kitų dalyvių"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} pašalino jus, {user0} ir %n kitą dalyvį","{actor} pašalino jus, {user0} ir %n kitus dalyvius","{actor} pašalino jus, {user0} ir %n kitų dalyvių","{actor} pašalino jus, {user0} ir %n kitų dalyvių"], + "An administrator removed {user0} and {user1}" : "Administratorius pašalino {user0} ir {user1}", + "{actor} removed {user0} and {user1}" : "{actor} pašalino {user0} ir {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administratorius pašalino {user0}, {user1} ir %n kitą dalyvį","Administratorius pašalino {user0}, {user1} ir %n kitus dalyvius","Administratorius pašalino {user0}, {user1} ir %n kitų dalyvių","Administratorius pašalino {user0}, {user1} ir %n kitų dalyvių"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} pašalino {user0}, {user1} ir %n kitą dalyvį","{actor} pašalino {user0}, {user1} ir %n kitus dalyvius","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių"], + "You and {user0} joined the call" : "Jūs ir {user0} prisijungėte prie pokalbio", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Jūs, {user0} ir %n kitas dalyvis prisijungėte prie pokalbio","Jūs, {user0} ir %n kiti dalyviai prisijungėte prie pokalbio","Jūs, {user0} ir %n kitų dalyvių prisijungėte prie pokalbio","Jūs, {user0} ir %n kitų dalyvių prisijungėte prie pokalbio"], + "{user0} and {user1} joined the call" : "{user0} ir {user1} prisijungė prie skambučio", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ir %n kitas dalyvis prisijungė prie skambučio","{user0}, {user1} ir %n kiti dalyviai prisijungė prie skambučio","{user0}, {user1} ir %n kitų dalyvių prisijungė prie skambučio","{user0}, {user1} ir %n kitų dalyvių prisijungė prie skambučio"], + "You and {user0} left the call" : "Jūs ir {user0} išėjote iš pokalbio", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Jūs, {user0} ir %n kitas dalyvis išėjote iš pokalbio","Jūs, {user0} ir %n kiti dalyviai išėjote iš pokalbio","Jūs, {user0} ir %n kitų dalyvių išėjote iš pokalbio","Jūs, {user0} ir %n kitų dalyvių išėjote iš pokalbio"], + "{user0} and {user1} left the call" : "{user0} ir {user1} išėjo iš pokalbio", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ir %n kitas dalyvis išėjo iš pokalbio","{user0}, {user1} ir %n kiti dalyviai išėjo iš pokalbio","{user0}, {user1} ir %n kitų dalyvių išėjo iš pokalbio","{user0}, {user1} ir %n kitų dalyvių išėjo iš pokalbio"], + "You promoted {user0} and {user1} to moderators" : "Jūs {user0} ir {user1} paskyrėte moderatoriais", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Jūs {user0}, {user1} ir %n kitą dalyvį paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitus dalyvius paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitų dalyvių paskyrėte moderatoriais","Jūs {user0}, {user1} ir %n kitų dalyvių paskyrėte moderatoriais"], + "An administrator promoted you and {user0} to moderators" : "Administratorius jus ir {user0} paskyrė moderatoriais", + "{actor} promoted you and {user0} to moderators" : "{actor} paskyrė jus ir {user0} moderatoriais", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administratorius jus, {user0} ir %n kitą dalyvį paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitus dalyvius paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitų dalyvių paskyrė moderatoriais","Administratorius jus, {user0} ir %n kitų dalyvių paskyrė moderatoriais"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} paskyrė jus, {user0} ir %n kitą dalyvį moderatoriais","{actor} paskyrė jus, {user0} ir %n kitus dalyvius moderatoriais","{actor} paskyrė jus, {user0} ir %n kitų dalyvių moderatoriais","{actor} paskyrė jus, {user0} ir %n kitų dalyvių moderatoriais"], + "An administrator promoted {user0} and {user1} to moderators" : "Administratorius {user0} ir {user1} paskyrė moderatoriais", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} paskyrė {user0} ir {user1} moderatoriais ", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administratorius {user0}, {user1} ir %n kitą dalyvį paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitus dalyvius paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitų dalyvių paskyrė moderatoriais","Administratorius {user0}, {user1} ir %n kitų dalyvių paskyrė moderatoriais"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} paskyrė {user0}, {user1} ir %n kitą dalyvį moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitus dalyvius moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitų dalyvių moderatoriais","{actor} paskyrė {user0}, {user1} ir %n kitų dalyvių moderatoriais"], + "You demoted {user0} and {user1} from moderators" : "Jūs nušalinote {user0} ir {user1} iš moderatorių", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Jūs nušalinote {user0}, {user1} ir %n kitą dalyvį iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitus dalyvius iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitų dalyvių iš moderatorių","Jūs nušalinote {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "An administrator demoted you and {user0} from moderators" : "Administratorius nušalino jus ir {user0} iš moderatorių", + "{actor} demoted you and {user0} from moderators" : "{actor} pašalino jus ir {user0} iš moderatorių", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administratorius nušalino jus, {user0} ir %n kitą dalyvį iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitus dalyvius iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitų dalyvių iš moderatorių","Administratorius nušalino jus, {user0} ir %n kitų dalyvių iš moderatorių"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} pašalino jus, {user0} ir %n kitą dalyvį iš moderatorių","{actor} pašalino jus, {user0} ir %n kitus dalyvius iš moderatorių","{actor} pašalino jus, {user0} ir %n kitų dalyvių iš moderatorių","{actor} pašalino jus, {user0} ir %n kitų dalyvių iš moderatorių"], + "An administrator demoted {user0} and {user1} from moderators" : "Administratorius nušalino {user0} ir {user1} iš moderatorių", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} pašalino {user0} ir {user1} iš moderatorių", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administratorius nušalino {user0}, {user1} ir %n kitą dalyvį iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitus dalyvius iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių","Administratorius nušalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} pašalino {user0}, {user1} ir %n kitą dalyvį iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitus dalyvius iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių","{actor} pašalino {user0}, {user1} ir %n kitų dalyvių iš moderatorių"], + "You:" : "Jūs:", + "You: {lastMessage}" : "Jūs: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serveris buvo atnaujintas.", + "(edited by you)" : "(jūsų redaguota)", + "(edited by a deleted user)" : "(redagavo ištrintas vartotojas)", + "(edited by {moderator})" : "(redagavo {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Bandote prisijungti prie pokalbio, nors kituose languose ar kituose įrenginiuose jau vyksta sesija. Šiuo metu Nextcloud „Pokalbiai“ šios funkcijos nepalaiko. Ką norite daryti?", + "Leave this page" : "Išeiti iš šio puslapio", + "Join here" : "Prisijunkite čia", + "Deck card has been posted to {conversation}" : "Darbų kortelė buvo išsiųsta į {conversation}", + "An error occurred while posting deck card to conversation" : "Įkeliant kortelę į pokalbį įvyko klaida", + "Post to a conversation" : "Paskelbti pokalbyje", + "Post to conversation" : "Paskelbti pokalbyje", + "The recording failed. Please contact your administrator." : "Įrašyti nepavyko. Susisiekite su administratoriumi.", + "Location has been posted to {conversation}" : "Vieta buvo paskelbta {conversation}", + "Conversation password has been saved" : "Pokalbio slaptažodis įrašytas", + "Conversation password has been removed" : "Pokalbio slaptažodis pašalintas", + "Error occurred while saving conversation password" : "Įrašant pokalbio slaptažodį įvyko klaida", + "Could not post message: {errorMessage}" : "Nepavyko paskelbti žinutės: {errorMessage}", + "An error occurred while fetching the participants" : "Gaunant dalyvius, įvyko klaida", + "Invitations sent" : "Pakvietimai išsiųsti", + "{guest} (guest)" : "{guest} (svečias)", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} sukūrė apklausą, pavadinimu „{name}“. Spustelėkite norėdami dalyvauti", + "Failed to add reaction" : "Nepavyko pridėti reakcijos", + "Failed to remove reaction" : "Nepavyko pašalinti reakcijos", + "You are not allowed to share files" : "Jums neleidžiama bendrinti failų", + "Error while sharing file" : "Klaida bendrinant failą", + "Later today – {timeLocale}" : "Šiandien vėliau – {timeLocale}", + "Tomorrow – {timeLocale}" : "Rytoj – {timeLocale}", + "This weekend – {timeLocale}" : "Šį savaitgalį – {timeLocale}", + "Next week – {timeLocale}" : "Kitą savaitę – {timeLocale}", + "Message link copied to clipboard" : "Žinutės nuoroda nukopijuota į iškarpinę", + "Conversation link copied to clipboard" : "Pokalbio nuoroda nukopijuota į iškarpinę", + "The link could not be copied" : "Nepavyko nukopijuoti nuorodos", + "Error while parsing a PROPFIND error" : "Klaida analizuojant „PROPFIND“ klaidą", + "Please reload the page." : "Prašome įkelti puslapį iš naujo.", + "Do not disturb" : "Netrukdyti", + "Away" : "Atsitraukęs", + "Microphone {number}" : "Mikrofonas {number}", + "Camera {number}" : "Kamera {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Atrodo, kad kalbate su išjungtu mikrofonu, įjunkite savo garsą, jei norite, kad kiti jus girdėtų", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tai užtrunka ilgiau, nei tikėtasi. Ar medijos leidimai jau yra suteikti (arba atmesti)? Jeigu taip, tuomet paleiskite savo naršyklę iš naujo, nes garsas ir vaizdas patiria nesėkmę", + "Access to microphone & camera is only possible with HTTPS" : "Prieiga prie mikrofono ir kameros yra įmanoma tik naudojant HTTPS", + "Please move your setup to HTTPS" : "Perkelkite savo sąranką į HTTPS", + "Access to microphone & camera was denied" : "Prieiga prie mikrofono ir kameros buvo uždrausta", + "WebRTC is not supported in your browser" : "Jūsų naršyklėje WebRTC nėra palaikoma", + "Please use a different browser like Firefox or Chrome" : "Naudokite kitą naršyklę, tokią kaip Firefox ar Chrome", + "Error while accessing microphone & camera" : "Klaida gaunant prieigą prie mikrofono ir kameros", + "%s Talk on your mobile devices" : "%s Pokalbiai jūsų mobiliuosiuose įrenginiuose", + "Join conversations at any time, anywhere, on any device." : "Prisijunkite prie pokalbių bet kur, bet kada, bet kokiame įrenginyje.", + "Android app" : "Android programėlė", + "iOS app" : "iOS programėlė", + "__language_name__" : "Lietuvių", + "Tasks" : "Užduotys", + "Notes" : "Užrašai", + "Talk conversation for event" : "„Pokalbių“ pokalbis renginiui", + "Set reminder for later today" : "Nustatyti priminimą šiandien vėliau", + "Set reminder for tomorrow" : "Nustatyti priminimą rytoj", + "Set reminder for this weekend" : "Nustatyti priminimą šį savaitgalį", + "Set reminder for next week" : "Nustatyti priminimą kitą savaitę", + "Talk recording from {time} ({conversation})" : "„Pokalbiai“ įrašas iš {time} ({conversation})", + "Your privacy setting has been saved" : "Jūsų privatumo nustatymas įrašytas" +},"pluralForm" :"nplurals=4; plural=(n % 10 == 1 && (n % 100 > 19 || n % 100 < 11) ? 0 : (n % 10 >= 2 && n % 10 <=9) && (n % 100 > 19 || n % 100 < 11) ? 1 : n % 1 != 0 ? 2: 3);" +} \ No newline at end of file diff --git a/l10n/lv.js b/l10n/lv.js new file mode 100644 index 0000000..3c5eb72 --- /dev/null +++ b/l10n/lv.js @@ -0,0 +1,567 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "saruna", + "(Duration %s)" : "(Ilgums %s)", + "You attended a call with {user1}" : "Tu piedalījies zvanā ar {user1}", + "_%n guest_::_%n guests_" : ["%n viesi","%n viesi","%n viesi"], + "You attended a call with {user1} and {user2}" : "Tu piedalījies zvanā ar {user1} un {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tu piedalījies zvanā ar {user1}, {user2} un {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tu piedalījies zvanā ar {user1}, {user2}, {user3} un {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tu piedalījies zvanā ar {user1}, {user2}, {user3}, {user4} un {user5}", + "_%n other_::_%n others_" : ["%n other","%n cits","%n citi"], + "{actor} invited you to {call}" : "{actor} uzaicināja Tevi {call}", + "Talk" : "Runāt", + "Guest" : "Viesis", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Viens pret vienu sarunas tagad ir pastāvīgas, un tās vairs nevar nejauši pārveidot par kopu sarunām. Kā arī, kad viens no dalībniekiem pamet sarunu, tā vairs netiek automātiski izdzēsta. Tikai ja abi dalībnieki izies, saruna tiks izdzēsta no servera", + "- In the sidebar you can now find an overview of the latest shared items" : "- Sānu joslā tagad var atrast pēdējo kopīgoto vienumu pārskatu", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Saruna **Piezīme sev** ir izmantojama, lai veiktu piezīmes un kopīgotu informāciju starp savām ierīcēm", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Sapulces uzlabotas ar viesu, kuri uzaicināti e-pastā, atpazīšanu, dalībnieku saraksta ievietošanu, aptauju melnraksti un dalībnieku sarakstu lejupielādēšanu.", + "Talk updates ✅" : "Talk atjauninājumi ✅", + "{actor} created the conversation" : "{actor} izveidoja sarunu", + "You created the conversation" : "Tu izveidoji sarunu", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} pārdēvēja sarunu no \"%1$s\" uz \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tu pārdēvēji sarunu no \"%1$s\" uz \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Pārvaldītājs pārdēvēja sarunu no \"%1$s\" uz \"%2$s\"", + "You removed the description" : "Tu noņēmi aprakstu", + "You started a call" : "Tu uzsāki zvanu", + "{actor} started a call" : "{actor} sācis zvanu", + "{actor} joined the call" : "{actor} pievienojies zvanam", + "You joined the call" : "Tu pievienojies zvanam", + "{actor} left the call" : "{actor} pameta zvanu", + "You left the call" : "Tu pameti zvanu", + "{actor} unlocked the conversation" : "{actor} atslēdz sarunu", + "You unlocked the conversation" : "Tu atslēdzi sarunu", + "{actor} locked the conversation" : "{actor} bloķē sarunu", + "You locked the conversation" : "Tu aizslēdzi sarunu", + "{actor} allowed guests" : "{actor} atļauj viesus", + "You allowed guests" : "Tu atļāvi viesus", + "{actor} disallowed guests" : "{actor} nepieļāva viesus", + "You disallowed guests" : "Tu neatļāvi viesus", + "{actor} set a password" : "{actor} iestatīja paroli", + "You set a password" : "Tu iestatīji paroli", + "{actor} removed the password" : "{actor} noņēma paroli", + "You removed the password" : "Tu noņēmi paroli", + "{actor} added {user}" : "{actor} pievienoja {user}", + "You joined the conversation" : "Tu pievienojies sarunai", + "{actor} joined the conversation" : "{actor} pievienojās sarunai", + "You added {user}" : "Tu pievienoji {user}", + "{actor} added you" : "{actor} pievienoja Tevi", + "You left the conversation" : "Tu pameti sarunu", + "{actor} left the conversation" : "{actor} pameta sarunu", + "{actor} removed {user}" : "{actor} noņēma {user}", + "You removed {user}" : "Tu noņēmi {user}", + "{actor} removed you" : "{actor} noņēma Tevi", + "You removed {federated_user}" : "Tu noņēmi {federated_user}", + "You added {phone}" : "Tu pievienoji {phone}", + "You removed {phone}" : "Tu noņēmi {phone}", + "{actor} promoted {user} to moderator" : "{actor} iecēla {user} par satura pārraudzītāju", + "You promoted {user} to moderator" : "Tu iecēli {user} par satura pārraudzītāju", + "{actor} promoted you to moderator" : "{actor} iecēla Tevi par satura pārraudzītāju", + "{actor} demoted {user} from moderator" : "{actor} pazemināja {user} no satura pārraudzītāja", + "You demoted {user} from moderator" : "Tu pazemināji {user} no satura pārraudzītāja", + "{actor} demoted you from moderator" : "{actor} pazemināja Tevi no satura pārraudzītāja", + "{actor} shared a file which is no longer available" : "{actor} kopīgoja datni, kas vairs nav pieejama", + "You shared a file which is no longer available" : "Tu kopīgoji datni, kas vairs nav pieejama", + "Message deleted by author" : "Ziņojumu izdzēsa autors", + "Administration" : "Pārvaldīšana", + "System" : "Sistēma", + "%s (guest)" : "%s (viesis)", + "Talk conversations" : "Sarunas", + "Talk to %s" : "Runāt ar %s", + "File not found" : "Datne nav atrasta", + "File is not shared, or shared but not with the user" : "Datne nav koplietota vai koplietots, bet nav koplietots ar lietotāju", + "File is too big" : "Datne ir par lielu", + "Invalid file provided" : "Norādīta nederīga datne", + "Invalid image" : "Nederīgs attēls", + "Unknown filetype" : "Nezināms datnes veids", + "Talk mentions" : "Pieminēšana Talk", + "More conversations" : "Vairāk sarunu", + "Say hi to your friends and colleagues!" : "Sasveicinies ar saviem draugiem un kolēģiem!", + "No unread mentions" : "Nav nelasītu pieminēšanu", + "Conversation invitation" : "Sarunas uzaicinājums", + "Description" : "Apraksts", + "Meeting" : "Tikšanās", + "Password request: %s" : "Paroles pieprasījums: %s", + "Private conversation" : "Privāta saruna", + "Dismiss notification" : "Noraidīt paziņojumu", + "Accept" : "Pieņemt", + "Decline" : "Noraidīt", + "New message" : "Jauna ziņa", + "Reminder" : "Atgādinājums", + "{user} sent you a private message" : "{user} nosūtīja jums privātu ziņojumu", + "{user} sent a message in conversation {call}" : "{user} nosūtīja ziņu sarunā {call}", + "A deleted user sent a message in conversation {call}" : "Izdzēsts lietotājs nosūtīja ziņojumu sarunā {call}", + "A guest sent a message in conversation {call}" : "Viesis nosūtījis ziņojumu sarunā {call}", + "{user} mentioned you in a private conversation" : "{user} tevi pieminēja privātā sarunā", + "{user} mentioned you in conversation {call}" : "{user} pieminēja Tevi sarunā {call}", + "A deleted user mentioned you in conversation {call}" : "Izdzēsts lietotājs pieminēja Tevi sarunā {call}", + "A guest mentioned you in conversation {call}" : "Viesis pieminēja Tevi sarunā {call}", + "{user} invited you to a group conversation: {call}" : "{user} uzaicināja Tevi uz grupas sarunu: {call}", + "Join call" : "Pievienoties zvanam", + "{user} would like to talk with you" : "{user} vēlas runāt ar Tevi", + "A group call has started in {call}" : "Grupas zvans ir sācies {call}", + "Open settings" : "Atvērt iestatījumus", + "error" : "kļūda", + "Open Talk" : "Atvērt Talk", + "Default" : "Noklusējuma", + "Presentation" : "Prezentācija", + "Avatar image is not square" : "Avatar attēls nav kvadrāts", + "Other" : "Cits", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Neizdevās izdzēst kontu, jo pārbaudes serveris nepareizi uzvedās. Lūgums atgriezties vēlāk.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Neizdevās izdzēst kontu, jo pārbaudes serveris nav sasniedzams. Lūgums atgriezties vēlāk.", + "Note to self" : "Piezīme sev", + "Let's get started!" : "Sāksim!", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## Sarunas iestatījumu pārvaldīšana\n\nSarunas izvēlnē var piekļūt dažādiem iestatījumiem, lai pārvaldītu savas sarunas. Piemēram:\n* labot informāciju par sarunām;\n* pārvaldīt paziņojumus;\n* pielietot dažādas satura pārraudzības kārtulas;\n* konfigurēt piekļuvi un drošību;\n* iespējot robotprogrammatūru;\n* un vēl.", + "Andorra" : "Andora", + "United Arab Emirates" : "Apvienotie Arābu Emirāti", + "Afghanistan" : "Afganistāna", + "Antigua and Barbuda" : "Antigva un Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albānija", + "Armenia" : "Armēnija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentīna", + "American Samoa" : "Amerikas Samoa", + "Austria" : "Austija", + "Australia" : "Austrālija", + "Aruba" : "Aruba", + "Åland Islands" : "Ālandu salas", + "Azerbaijan" : "Azerbaidžāna", + "Bosnia and Herzegovina" : "Bosnija un Hercogovina", + "Barbados" : "Barbadosa", + "Bangladesh" : "Bangladeša", + "Belgium" : "Beļģija", + "Burkina Faso" : "Burkinafaso", + "Bulgaria" : "Bulgārija", + "Bahrain" : "Bahreina", + "Burundi" : "Burundija", + "Benin" : "Benina", + "Saint Barthélemy" : "Senbartelmī", + "Bermuda" : "Bermudu salas", + "Brunei Darussalam" : "Bruneja Darusalama", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sintēstatiusa un Saba", + "Brazil" : "Brazīlija", + "Bahamas" : "Bahamu salas", + "Bhutan" : "Butāna", + "Bouvet Island" : "Buvē sala", + "Botswana" : "Botsvāna", + "Belarus" : "Baltkrievija", + "Belize" : "Beliza", + "Canada" : "Kanāda", + "Cocos (Keeling) Islands" : "Kokosu (Kīlinga) Salas", + "Central African Republic" : "Centrālāfrikas Republika", + "Congo" : "Kongo Republika", + "Switzerland" : "Šveice", + "Côte d'Ivoire" : "Kotdivuāra", + "Cook Islands" : "Kuka salas", + "Chile" : "Čīle", + "Cameroon" : "Kamerūna", + "China" : "Ķīna", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kaboverde", + "Curaçao" : "Kirasao", + "Christmas Island" : "Ziemassvētku sala", + "Cyprus" : "Ķipra", + "Czechia" : "Čehija", + "Germany" : "Vācija", + "Djibouti" : "Džibutija", + "Denmark" : "Dānija", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikānas Republika", + "Algeria" : "Alžīrija", + "Ecuador" : "Ekvadora", + "Estonia" : "Igaunija", + "Egypt" : "Ēģipte", + "Western Sahara" : "Rietumsahāra", + "Eritrea" : "Eritreja", + "Spain" : "Spānija", + "Ethiopia" : "Etiopija", + "Finland" : "Somija", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Folklenda salas (Malvinas)", + "Faroe Islands" : "Fēru salas", + "France" : "Francija", + "Gabon" : "Gabona", + "United Kingdom of Great Britain and Northern Ireland" : "Lielbritānijas un Ziemeļīrijas Apvienotā Karaliste", + "Grenada" : "Grenādā", + "Georgia" : "Gruzija", + "French Guiana" : "Franču Gviāna", + "Guernsey" : "Gērnsija", + "Ghana" : "Gana", + "Gibraltar" : "Ģibraltārs", + "Greenland" : "Grīnlande", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Ekvatoriālā Gvineja", + "Greece" : "Grieķija", + "South Georgia and the South Sandwich Islands" : "Dienviddžordžija un Dienvidsendviču salas", + "Guatemala" : "Gvatemala", + "Guam" : "Guama", + "Guinea-Bissau" : "Gvineja-Bisava", + "Guyana" : "Gajana", + "Hong Kong" : "Honkonga", + "Heard Island and McDonald Islands" : "Hērda Sala un Makdonalda Salas", + "Honduras" : "Hondurasa", + "Croatia" : "Horvātija", + "Haiti" : "Haiti", + "Hungary" : "Ungārija", + "Indonesia" : "Indonēzija", + "Ireland" : "Īrija", + "Israel" : "Izraēla", + "Isle of Man" : "Menas sala", + "India" : "Indija", + "British Indian Ocean Territory" : "Britu Indijas Okeāna Teritorija", + "Iraq" : "Irāka", + "Iceland" : "Islande", + "Italy" : "Itālija", + "Jersey" : "Džērsija", + "Jamaica" : "Jamaika", + "Jordan" : "Jordānija", + "Japan" : "Japāna", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizstāna", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komoras", + "Saint Kitts and Nevis" : "Sentkitsa un Nevisa", + "Kuwait" : "Kuveita", + "Cayman Islands" : "Kaimanu Salas", + "Kazakhstan" : "Kazahstāna", + "Lao People's Democratic Republic" : "Laosas Tautas Demokrātiskā Republika", + "Lebanon" : "Lebanona", + "Saint Lucia" : "Sentlūsija", + "Liechtenstein" : "Lihtenšteina", + "Sri Lanka" : "Šrilanka", + "Liberia" : "Libērija", + "Lesotho" : "Lesoto", + "Lithuania" : "Lietuve", + "Luxembourg" : "Luksemburga", + "Latvia" : "Latvija", + "Libya" : "Lībija", + "Morocco" : "Maroka", + "Monaco" : "Monako", + "Montenegro" : "Melnkalne", + "Saint Martin (French part)" : "Senmartēna (Francijas teritorija)", + "Madagascar" : "Madagaskāra", + "Marshall Islands" : "Māršala salas", + "Mali" : "Mali", + "Myanmar" : "Činlande", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Ziemeļu Marianas salas", + "Martinique" : "Martinika", + "Mauritania" : "Mauritānija", + "Montserrat" : "Montserrata", + "Malta" : "Malta", + "Mauritius" : "Maurīcija", + "Maldives" : "Maldīvu salas", + "Malawi" : "Malāvija", + "Mexico" : "Meksika", + "Malaysia" : "Malaizija", + "Mozambique" : "Mozambika", + "Namibia" : "Namībija", + "New Caledonia" : "Jaunkaledonija", + "Niger" : "Nigēra", + "Norfolk Island" : "Norfolkas sala", + "Nigeria" : "Nigērija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nīderlande", + "Norway" : "Norvēģija", + "Nepal" : "Nepāla", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Jaunzēlande", + "Oman" : "Omāna", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Franču Polinēzija", + "Papua New Guinea" : "Papua-Jaungvineja", + "Philippines" : "Filipīnas", + "Pakistan" : "Paķistāna", + "Poland" : "Polija", + "Saint Pierre and Miquelon" : "Senpjēra un Mikelona", + "Pitcairn" : "Pitkērna", + "Puerto Rico" : "Puertoriko", + "Palestine, State of" : "Palestīna", + "Portugal" : "Portugāle", + "Palau" : "Palau", + "Paraguay" : "Paragvaja", + "Qatar" : "Katāra", + "Réunion" : "Reinjona", + "Romania" : "Rumānija", + "Serbia" : "Serbija", + "Russian Federation" : "Krievijas Federācija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saūda Arābija", + "Solomon Islands" : "Zālamana salas", + "Seychelles" : "Seišelas", + "Sudan" : "Sudāna", + "Sweden" : "Zviedrija", + "Singapore" : "Singapūra", + "Saint Helena, Ascension and Tristan da Cunha" : "Svētās Helēnas sala, Debesbraukšanas sala un Tristana da Kuņas salas", + "Slovenia" : "Slovēnija", + "Svalbard and Jan Mayen" : "Svalbārai un Jana Majena", + "Slovakia" : "Slovākija", + "Sierra Leone" : "Sjerraleone", + "San Marino" : "Sanmarīno", + "Senegal" : "Senegāla", + "Somalia" : "Somālija", + "Suriname" : "Surinama", + "South Sudan" : "Dienvidsudāna", + "Sao Tome and Principe" : "Santome un Prinsipi", + "El Salvador" : "Salvadora", + "Sint Maarten (Dutch part)" : "Sintmārtena (Nīderlandes teritorija)", + "Syrian Arab Republic" : "Sīrijas Republika", + "Turks and Caicos Islands" : "Tērksas un Kaikosas salas", + "Chad" : "Čada", + "French Southern Territories" : "Francijas Dienvidjūru Zemes", + "Togo" : "Togo", + "Thailand" : "Taizeme", + "Tajikistan" : "Tadžikistāna", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Austrumtimora", + "Turkmenistan" : "Turkmenistāna", + "Tunisia" : "Tunisija", + "Tonga" : "Tonga", + "Turkey" : "Turcija", + "Trinidad and Tobago" : "Trinidāda un Tobāgo", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzānija, Apvienotā Republika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "ASV Mazās aizjūras salas", + "United States of America" : "Amerikas Savienotās Valstis", + "Uruguay" : "Urugvaja", + "Uzbekistan" : "Uzbekistāna", + "Holy See" : "Vatikāns", + "Saint Vincent and the Grenadines" : "Sentvinsenta un Grenadīnas", + "Viet Nam" : "Vjetnama", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Volisa un Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemena", + "Mayotte" : "Majota", + "South Africa" : "Dienvidāfrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Federation" : "Federācija", + "Invalid date, date format must be YYYY-MM-DD" : "Nederīgs datums, datuma formātam jābūt YYYY-MM-DD", + "Conversation not found" : "Saruna nav atrasta", + "Chat, video & audio-conferencing using WebRTC" : "Video un audio konferences, izmantojot WebRTC", + "Leave call" : "Pamest zvanu", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Mēs esam noteikuši vairākus nederīgus paroles mēģinājumus no šīs IP adreses, tādējādi nākamā pieteikšanās ir ierobežota līdz 30 sekundēm.", + "The password is wrong. Try again." : "Nepareiza parole. Jāmēģina vēlreiz.", + "Password" : "Parole", + "Submit" : "Iesniegt", + "Error requesting the password." : "Kļūda, pieprasot paroli.", + "Request password" : "Pieprasīt paroli", + "This conversation has ended" : "Šī saruna ir beigusies", + "Everyone" : "Visi", + "Save changes" : "Saglabāt izmaiņas", + "Saving …" : "Saglabā ...", + "Saved!" : "Saglabāts!", + "Limit to groups" : "Grupu ierobežojums", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ja ir atlasīta vismaz viena grupa, tikai cilvēki no sarakstā uzskaitītajām grupām var piedalīties sarunās.", + "Guests can still join public conversations." : "Viesi joprojām var pievienoties publiskām sarunām.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Lietotāji, kas vairs nevar izmantot Talk, joprojām tiks uzrādīti kā dalībnieki viņu iepriekšējās sarunās, kā arī tiks paturētas viņu ziņas.", + "Enabled" : "Iespējots", + "Disabled" : "Atspējots", + "State" : "Stāvoklis", + "Name" : "Nosaukums", + "Beta" : "Beta", + "Permissions" : "Atļaujas", + "General settings" : "Vispārīgi iestatījumi", + "Enable encryption" : "Ieslēgt šifrēšanu", + "Pending" : "Gaida", + "Error" : "Kļūda", + "Never" : "Nekad", + "Language" : "Valoda", + "Country" : "Valsts", + "Status" : "Status", + "Created at" : "Izveidots plkst.", + "Yes" : "Jā", + "No" : "Nē", + "Validate SSL certificate" : "Pārbaudīt SSL sertifikātu", + "Delete this server" : "Izdzēst šo serveri", + "Test this server" : "Testēt šo serveri", + "Shared secret" : "Koplietojams noslēpums", + "STUN server URL" : "STUN servera URL", + "STUN servers" : "STUN serveris", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN serveris tiek izmantots, lai noteiktu maršrutētāja dalībnieku publisko IP adresi.", + "TURN server URL" : "TURN servera URL", + "TURN server secret" : "TURN servera noslēpums", + "TURN server protocols" : "TURN servera protokols", + "TURN servers" : "TURN serveris", + "Failed" : "Neizdevās", + "OK" : "Labi", + "Confirm" : "Apstiprināt", + "Reset" : "Atiestatīt", + "Cancel" : "Atcelt", + "Back" : "Atpakaļ", + "Now" : "Tagad", + "Loading …" : "Ielādē…", + "From" : "No", + "To" : "Līdz", + "Calendar" : "Kalendārs", + "Attendees" : "Dalībnieki", + "Save" : "Saglabāt", + "No results" : "Nav iznākuma", + "Done" : "Pabeigts", + "Exit full screen (F)" : "Iziet no pilnekrāna (F)", + "Grid view" : "Režģa izkārtojums", + "Waiting for others to join the call …" : "Gaidot citus pievienoties zvanam …", + "You can invite others in the participant tab of the sidebar" : "Sānjoslā, dalībnieku cilnē var uzaicināt citus dalībniekus", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sānjoslas dalībnieku cilnē varat uzaicināt citus lietotājus vai kopīgot šo saiti, lai uzaicinātu citus.", + "Share this link to invite others!" : "Kopīgo šo saiti, lai uzaicinātu citus!", + "Copy link" : "Ievietot saiti starpliktuvē", + "Mute audio" : "Izslēgt audio skaņu", + "None" : "Nav", + "Disable video" : "Atspējot video", + "Enable video" : "Iespējot video", + "You" : "Tu", + "Show screen" : "Rādīt ekrānu", + "Collapse" : "Sakļaut", + "Favorite" : "Izlasē", + "Manage the list of banned users in this conversation." : "Pārvaldīt šīs sarunas liegto lietotāju sarakstu.", + "Date:" : "Datums:", + "Hide details" : "Paslēpt informāciju", + "Show details" : "Rādīt informāciju", + "Disable" : "Deaktivēt", + "Enable" : "Iespējot", + "Choose" : "Izvēlēties", + "The file must be a PNG or JPG" : "Datnei jābūt PNG vai JPG", + "Restricted" : "Ierobežota", + "Personal" : "Personīgs", + "Setup overview" : "Uzstādīšanas pārskats", + "Leave conversation" : "Atstāt sarunu", + "Delete conversation" : "Izdzēst sarunu", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Tiklīdz saruna ir pamesta, lai pievienotos slēgtai sarunai, ir nepieciešams uzaicinājums. Atvērtai sarunai var jebkurā brīdī pievienoties no jauna.", + "_%n hour_::_%n hours_" : ["%n stundu","%n stunda","%n stundas"], + "Password protection" : "Password protection", + "Open conversation" : "Atvērt sarunu", + "Edit" : "Labot", + "Delete" : "Izdzēst", + "Notifications" : "Paziņojumi", + "Join" : "Pievienoties", + "Hello, {displayName}" : "Sveiciens, {displayName}!", + "Create and copy link" : "Izveidot saiti un ievietot starpliktuvē", + "Open calendar" : "Atvērt kalendāru", + "Log in" : "Pieteikties", + "Remove from favorites" : "Noņemt no izlases", + "Add to favorites" : "Pievienot izlasei", + "You need to promote a new moderator before you can leave the conversation." : "Ir nepieciešams iecelt jaunu satura pārraudzītāju, lai Tu varētu pamest sarunu.", + "Home" : "Sākums", + "Alphabetically" : "Alfabētiskā secībā", + "You have no unread mentions." : "Nav nelasītu pieminēšanu.", + "Clear filter" : "Notīrīt atlasi", + "App settings" : "Lietotnes iestatījumi", + "Users" : "Lietotāji", + "Groups" : "Grupas", + "Teams" : "Komandas", + "Open conversations" : "Atvērt sarunas", + "Users and teams" : "Lietotāji un komandas", + "Devices" : "Ierīces", + "No audio" : "Nav audio", + "Invalid path selected" : "Atlasīts nederīgs ceļš", + "Upload" : "Augšupielādēt", + "Files" : "Datnes", + "24 hours" : "24 stundas", + "7 days" : "7 dienas", + "Message forwarded to \"Note to self\"" : "Ziņojums pārvirzīts uz “Piezīme sev”", + "Error while forwarding message to \"Note to self\"" : "Kļūda ziņojuma pārvirzīšanas uz “Piezīme sev” laikā", + "Reply" : "Atbildēt", + "Go to file" : "Doties uz datni", + "Translate" : "Tulkot", + "Dismiss" : "Atmest", + "Contact" : "Kontaktpersona", + "File to share" : "Kopīgojamā datne", + "Upload from device" : "Augšupielādēt no ierīces", + "New file" : "Jauna datne", + "Add more files" : "Pievienot vairāk datņu", + "Send" : "Sūtīt", + "Settings" : "Iestatījumi", + "Results" : "Rezultāti", + "moderator" : "satura pārraudzītājs", + "guest" : "viesis", + "Remove participant" : "Noņemt dalībnieku", + "Demote from moderator" : "Pazemināt no satura pārraudzītāja", + "Promote to moderator" : "Iecelt par satura pārraudzītāju", + "Remove" : "Noņemt", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Pievienot lietotājus vai komandas", + "Add teams" : "Pievienot komandas", + "Searching …" : "Meklē...", + "Participants" : "Dalībnieki", + "Open chat" : "Atvērt tērzēšanu", + "Chat" : "Tērzēt", + "Details" : "Informācija", + "From User" : "No lietotāja", + "Load more results" : "Ielādēt vairāk iznākumu", + "Projects" : "Projekti", + "Link to a conversation" : "Saite uz sarunu", + "Select conversation" : "Izvēlēties sarunu", + "Notification settings" : "Paziņojumu iestatījumi", + "Error while setting read status privacy" : "Kļūda lasīšanas stāvokļa privātuma iestatīšanas laikā", + "Error while setting typing status privacy" : "Kļūda rakstīšanas stāvokļa privātuma iestatīšanas laikā", + "Privacy" : "Privātums", + "Search" : "Meklēt", + "Start call" : "Sākt zvanu", + "All tasks done!" : "Visi uzdevumi paveikti.", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} no %n uzdevumiem","{done} no %n uzdevuma","{done} no %n uzdevumiem"], + "You are not allowed to enable screensharing" : "Nav ļauts iespējot ekrāna kopīgošanu", + "No screensharing" : "Nav ekrāna kopīgošanas", + "Screensharing options" : "Ekrāna kopīgošanas iespējas", + "Enable screensharing" : "Iespējot ekrāna kopīgošanu", + "Screensharing requires the page to be loaded through HTTPS." : "Ekrāna kopīgošanai ir nepieciešams lapu ielādēt ar HTTPS.", + "An error occurred while starting screensharing." : "Ekrāna kopīgošanas uzsākšanas laikā atgadījās kļūda.", + "Show your screen" : "Rādīt savu ekrānu", + "Stop screensharing" : "Apturēt ekrāna kopīgošanu", + "Start recording" : "Uzsākt ierakstīšanu", + "Open Calendar" : "Atvērt kalendāru", + "Would you like to delete this conversation?" : "Vai izdzēst šo sarunu?", + "Keep" : "Paturēt", + "Select a region" : "Atlasīt apgabalu", + "Duplicate session" : "Pavairot sesiju", + "Join a conversation or start a new one" : "Pievienoties sarunai vai sākt jaunu", + "User" : "Lietotājs", + "API token" : "API pilnvara", + "Login" : "Pieteikumvārds", + "Nickname" : "Iesauka", + "Client ID" : "Klienta ID", + "Media" : "Informācijas nesēji", + "Polls" : "Aptaujas", + "Audio" : "Audio", + "Show all files" : "Parādīt visas datnes", + "Show all polls" : "Parādīt visas aptaujas", + "Group" : "Grupa", + "Team" : "Komanda", + "You and {user0} left the call" : "Tu un {user0} pametāt zvanu", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Search in conversation: {conversation}" : "Meklēt sarunā: {conversation}", + "Error while sharing file" : "Kļūda datnes kopīgošanā", + "Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}", + "Please reload the page." : "Lūgums pārlādēt lapu", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tas aizņem vairāk laika, nekā paredzēts. Vai multivides atļaujas jau ir piešķirtas (vai noraidītas)? Ja atbilde ir “jā”, lūgums palaist savu pārlūku no jauna, jo ir skaņas un video atteice", + "Access to microphone & camera is only possible with HTTPS" : "Piekļuve mikrofonam un kamerai ir iespējama izmantojot tikai HTTPS", + "Please move your setup to HTTPS" : "Lūgums pārvietot serveri uz HTTPS", + "Access to microphone & camera was denied" : "Tika noraidīta piekļuve mikrofonam un kamerai", + "WebRTC is not supported in your browser" : "Pārlūkā netiek atbalstīts WebRTC", + "Please use a different browser like Firefox or Chrome" : "Lūgums izmantot citu pārlūku, piemēram, Firefox vai Chrome", + "Error while accessing microphone & camera" : "Kļūda, piekļūstot mikrofonam un kamerai", + "%s Talk on your mobile devices" : "%s Sarunas mobilajās ierīcēs", + "Android app" : "Android lietotne", + "iOS app" : "iOS lietotne", + "__language_name__" : "Latviešu", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Zvanu apkopojuma robotprogrammatūra izveido pārskata ziņojumu pēc zvana, uzskaitot visus dalībniekus un izklāstot uzdevumus", + "Tasks" : "Uzdevumi", + "Notes" : "Piezīmes", + "Reports" : "Atskaites", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nav uzstādīts, tas var novest pie veiktspējas sarežģījumiem, kad izmanto darbvirsmas klientus.", + "Set reminder for later today" : "Iestatīt atgādinājumu vēlākam šodien" +}, +"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);"); diff --git a/l10n/lv.json b/l10n/lv.json new file mode 100644 index 0000000..e53c9f7 --- /dev/null +++ b/l10n/lv.json @@ -0,0 +1,565 @@ +{ "translations": { + "a conversation" : "saruna", + "(Duration %s)" : "(Ilgums %s)", + "You attended a call with {user1}" : "Tu piedalījies zvanā ar {user1}", + "_%n guest_::_%n guests_" : ["%n viesi","%n viesi","%n viesi"], + "You attended a call with {user1} and {user2}" : "Tu piedalījies zvanā ar {user1} un {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Tu piedalījies zvanā ar {user1}, {user2} un {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Tu piedalījies zvanā ar {user1}, {user2}, {user3} un {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Tu piedalījies zvanā ar {user1}, {user2}, {user3}, {user4} un {user5}", + "_%n other_::_%n others_" : ["%n other","%n cits","%n citi"], + "{actor} invited you to {call}" : "{actor} uzaicināja Tevi {call}", + "Talk" : "Runāt", + "Guest" : "Viesis", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Viens pret vienu sarunas tagad ir pastāvīgas, un tās vairs nevar nejauši pārveidot par kopu sarunām. Kā arī, kad viens no dalībniekiem pamet sarunu, tā vairs netiek automātiski izdzēsta. Tikai ja abi dalībnieki izies, saruna tiks izdzēsta no servera", + "- In the sidebar you can now find an overview of the latest shared items" : "- Sānu joslā tagad var atrast pēdējo kopīgoto vienumu pārskatu", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Saruna **Piezīme sev** ir izmantojama, lai veiktu piezīmes un kopīgotu informāciju starp savām ierīcēm", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Sapulces uzlabotas ar viesu, kuri uzaicināti e-pastā, atpazīšanu, dalībnieku saraksta ievietošanu, aptauju melnraksti un dalībnieku sarakstu lejupielādēšanu.", + "Talk updates ✅" : "Talk atjauninājumi ✅", + "{actor} created the conversation" : "{actor} izveidoja sarunu", + "You created the conversation" : "Tu izveidoji sarunu", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} pārdēvēja sarunu no \"%1$s\" uz \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tu pārdēvēji sarunu no \"%1$s\" uz \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Pārvaldītājs pārdēvēja sarunu no \"%1$s\" uz \"%2$s\"", + "You removed the description" : "Tu noņēmi aprakstu", + "You started a call" : "Tu uzsāki zvanu", + "{actor} started a call" : "{actor} sācis zvanu", + "{actor} joined the call" : "{actor} pievienojies zvanam", + "You joined the call" : "Tu pievienojies zvanam", + "{actor} left the call" : "{actor} pameta zvanu", + "You left the call" : "Tu pameti zvanu", + "{actor} unlocked the conversation" : "{actor} atslēdz sarunu", + "You unlocked the conversation" : "Tu atslēdzi sarunu", + "{actor} locked the conversation" : "{actor} bloķē sarunu", + "You locked the conversation" : "Tu aizslēdzi sarunu", + "{actor} allowed guests" : "{actor} atļauj viesus", + "You allowed guests" : "Tu atļāvi viesus", + "{actor} disallowed guests" : "{actor} nepieļāva viesus", + "You disallowed guests" : "Tu neatļāvi viesus", + "{actor} set a password" : "{actor} iestatīja paroli", + "You set a password" : "Tu iestatīji paroli", + "{actor} removed the password" : "{actor} noņēma paroli", + "You removed the password" : "Tu noņēmi paroli", + "{actor} added {user}" : "{actor} pievienoja {user}", + "You joined the conversation" : "Tu pievienojies sarunai", + "{actor} joined the conversation" : "{actor} pievienojās sarunai", + "You added {user}" : "Tu pievienoji {user}", + "{actor} added you" : "{actor} pievienoja Tevi", + "You left the conversation" : "Tu pameti sarunu", + "{actor} left the conversation" : "{actor} pameta sarunu", + "{actor} removed {user}" : "{actor} noņēma {user}", + "You removed {user}" : "Tu noņēmi {user}", + "{actor} removed you" : "{actor} noņēma Tevi", + "You removed {federated_user}" : "Tu noņēmi {federated_user}", + "You added {phone}" : "Tu pievienoji {phone}", + "You removed {phone}" : "Tu noņēmi {phone}", + "{actor} promoted {user} to moderator" : "{actor} iecēla {user} par satura pārraudzītāju", + "You promoted {user} to moderator" : "Tu iecēli {user} par satura pārraudzītāju", + "{actor} promoted you to moderator" : "{actor} iecēla Tevi par satura pārraudzītāju", + "{actor} demoted {user} from moderator" : "{actor} pazemināja {user} no satura pārraudzītāja", + "You demoted {user} from moderator" : "Tu pazemināji {user} no satura pārraudzītāja", + "{actor} demoted you from moderator" : "{actor} pazemināja Tevi no satura pārraudzītāja", + "{actor} shared a file which is no longer available" : "{actor} kopīgoja datni, kas vairs nav pieejama", + "You shared a file which is no longer available" : "Tu kopīgoji datni, kas vairs nav pieejama", + "Message deleted by author" : "Ziņojumu izdzēsa autors", + "Administration" : "Pārvaldīšana", + "System" : "Sistēma", + "%s (guest)" : "%s (viesis)", + "Talk conversations" : "Sarunas", + "Talk to %s" : "Runāt ar %s", + "File not found" : "Datne nav atrasta", + "File is not shared, or shared but not with the user" : "Datne nav koplietota vai koplietots, bet nav koplietots ar lietotāju", + "File is too big" : "Datne ir par lielu", + "Invalid file provided" : "Norādīta nederīga datne", + "Invalid image" : "Nederīgs attēls", + "Unknown filetype" : "Nezināms datnes veids", + "Talk mentions" : "Pieminēšana Talk", + "More conversations" : "Vairāk sarunu", + "Say hi to your friends and colleagues!" : "Sasveicinies ar saviem draugiem un kolēģiem!", + "No unread mentions" : "Nav nelasītu pieminēšanu", + "Conversation invitation" : "Sarunas uzaicinājums", + "Description" : "Apraksts", + "Meeting" : "Tikšanās", + "Password request: %s" : "Paroles pieprasījums: %s", + "Private conversation" : "Privāta saruna", + "Dismiss notification" : "Noraidīt paziņojumu", + "Accept" : "Pieņemt", + "Decline" : "Noraidīt", + "New message" : "Jauna ziņa", + "Reminder" : "Atgādinājums", + "{user} sent you a private message" : "{user} nosūtīja jums privātu ziņojumu", + "{user} sent a message in conversation {call}" : "{user} nosūtīja ziņu sarunā {call}", + "A deleted user sent a message in conversation {call}" : "Izdzēsts lietotājs nosūtīja ziņojumu sarunā {call}", + "A guest sent a message in conversation {call}" : "Viesis nosūtījis ziņojumu sarunā {call}", + "{user} mentioned you in a private conversation" : "{user} tevi pieminēja privātā sarunā", + "{user} mentioned you in conversation {call}" : "{user} pieminēja Tevi sarunā {call}", + "A deleted user mentioned you in conversation {call}" : "Izdzēsts lietotājs pieminēja Tevi sarunā {call}", + "A guest mentioned you in conversation {call}" : "Viesis pieminēja Tevi sarunā {call}", + "{user} invited you to a group conversation: {call}" : "{user} uzaicināja Tevi uz grupas sarunu: {call}", + "Join call" : "Pievienoties zvanam", + "{user} would like to talk with you" : "{user} vēlas runāt ar Tevi", + "A group call has started in {call}" : "Grupas zvans ir sācies {call}", + "Open settings" : "Atvērt iestatījumus", + "error" : "kļūda", + "Open Talk" : "Atvērt Talk", + "Default" : "Noklusējuma", + "Presentation" : "Prezentācija", + "Avatar image is not square" : "Avatar attēls nav kvadrāts", + "Other" : "Cits", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Neizdevās izdzēst kontu, jo pārbaudes serveris nepareizi uzvedās. Lūgums atgriezties vēlāk.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Neizdevās izdzēst kontu, jo pārbaudes serveris nav sasniedzams. Lūgums atgriezties vēlāk.", + "Note to self" : "Piezīme sev", + "Let's get started!" : "Sāksim!", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## Sarunas iestatījumu pārvaldīšana\n\nSarunas izvēlnē var piekļūt dažādiem iestatījumiem, lai pārvaldītu savas sarunas. Piemēram:\n* labot informāciju par sarunām;\n* pārvaldīt paziņojumus;\n* pielietot dažādas satura pārraudzības kārtulas;\n* konfigurēt piekļuvi un drošību;\n* iespējot robotprogrammatūru;\n* un vēl.", + "Andorra" : "Andora", + "United Arab Emirates" : "Apvienotie Arābu Emirāti", + "Afghanistan" : "Afganistāna", + "Antigua and Barbuda" : "Antigva un Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albānija", + "Armenia" : "Armēnija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentīna", + "American Samoa" : "Amerikas Samoa", + "Austria" : "Austija", + "Australia" : "Austrālija", + "Aruba" : "Aruba", + "Åland Islands" : "Ālandu salas", + "Azerbaijan" : "Azerbaidžāna", + "Bosnia and Herzegovina" : "Bosnija un Hercogovina", + "Barbados" : "Barbadosa", + "Bangladesh" : "Bangladeša", + "Belgium" : "Beļģija", + "Burkina Faso" : "Burkinafaso", + "Bulgaria" : "Bulgārija", + "Bahrain" : "Bahreina", + "Burundi" : "Burundija", + "Benin" : "Benina", + "Saint Barthélemy" : "Senbartelmī", + "Bermuda" : "Bermudu salas", + "Brunei Darussalam" : "Bruneja Darusalama", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sintēstatiusa un Saba", + "Brazil" : "Brazīlija", + "Bahamas" : "Bahamu salas", + "Bhutan" : "Butāna", + "Bouvet Island" : "Buvē sala", + "Botswana" : "Botsvāna", + "Belarus" : "Baltkrievija", + "Belize" : "Beliza", + "Canada" : "Kanāda", + "Cocos (Keeling) Islands" : "Kokosu (Kīlinga) Salas", + "Central African Republic" : "Centrālāfrikas Republika", + "Congo" : "Kongo Republika", + "Switzerland" : "Šveice", + "Côte d'Ivoire" : "Kotdivuāra", + "Cook Islands" : "Kuka salas", + "Chile" : "Čīle", + "Cameroon" : "Kamerūna", + "China" : "Ķīna", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kaboverde", + "Curaçao" : "Kirasao", + "Christmas Island" : "Ziemassvētku sala", + "Cyprus" : "Ķipra", + "Czechia" : "Čehija", + "Germany" : "Vācija", + "Djibouti" : "Džibutija", + "Denmark" : "Dānija", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikānas Republika", + "Algeria" : "Alžīrija", + "Ecuador" : "Ekvadora", + "Estonia" : "Igaunija", + "Egypt" : "Ēģipte", + "Western Sahara" : "Rietumsahāra", + "Eritrea" : "Eritreja", + "Spain" : "Spānija", + "Ethiopia" : "Etiopija", + "Finland" : "Somija", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Folklenda salas (Malvinas)", + "Faroe Islands" : "Fēru salas", + "France" : "Francija", + "Gabon" : "Gabona", + "United Kingdom of Great Britain and Northern Ireland" : "Lielbritānijas un Ziemeļīrijas Apvienotā Karaliste", + "Grenada" : "Grenādā", + "Georgia" : "Gruzija", + "French Guiana" : "Franču Gviāna", + "Guernsey" : "Gērnsija", + "Ghana" : "Gana", + "Gibraltar" : "Ģibraltārs", + "Greenland" : "Grīnlande", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Ekvatoriālā Gvineja", + "Greece" : "Grieķija", + "South Georgia and the South Sandwich Islands" : "Dienviddžordžija un Dienvidsendviču salas", + "Guatemala" : "Gvatemala", + "Guam" : "Guama", + "Guinea-Bissau" : "Gvineja-Bisava", + "Guyana" : "Gajana", + "Hong Kong" : "Honkonga", + "Heard Island and McDonald Islands" : "Hērda Sala un Makdonalda Salas", + "Honduras" : "Hondurasa", + "Croatia" : "Horvātija", + "Haiti" : "Haiti", + "Hungary" : "Ungārija", + "Indonesia" : "Indonēzija", + "Ireland" : "Īrija", + "Israel" : "Izraēla", + "Isle of Man" : "Menas sala", + "India" : "Indija", + "British Indian Ocean Territory" : "Britu Indijas Okeāna Teritorija", + "Iraq" : "Irāka", + "Iceland" : "Islande", + "Italy" : "Itālija", + "Jersey" : "Džērsija", + "Jamaica" : "Jamaika", + "Jordan" : "Jordānija", + "Japan" : "Japāna", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizstāna", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komoras", + "Saint Kitts and Nevis" : "Sentkitsa un Nevisa", + "Kuwait" : "Kuveita", + "Cayman Islands" : "Kaimanu Salas", + "Kazakhstan" : "Kazahstāna", + "Lao People's Democratic Republic" : "Laosas Tautas Demokrātiskā Republika", + "Lebanon" : "Lebanona", + "Saint Lucia" : "Sentlūsija", + "Liechtenstein" : "Lihtenšteina", + "Sri Lanka" : "Šrilanka", + "Liberia" : "Libērija", + "Lesotho" : "Lesoto", + "Lithuania" : "Lietuve", + "Luxembourg" : "Luksemburga", + "Latvia" : "Latvija", + "Libya" : "Lībija", + "Morocco" : "Maroka", + "Monaco" : "Monako", + "Montenegro" : "Melnkalne", + "Saint Martin (French part)" : "Senmartēna (Francijas teritorija)", + "Madagascar" : "Madagaskāra", + "Marshall Islands" : "Māršala salas", + "Mali" : "Mali", + "Myanmar" : "Činlande", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Ziemeļu Marianas salas", + "Martinique" : "Martinika", + "Mauritania" : "Mauritānija", + "Montserrat" : "Montserrata", + "Malta" : "Malta", + "Mauritius" : "Maurīcija", + "Maldives" : "Maldīvu salas", + "Malawi" : "Malāvija", + "Mexico" : "Meksika", + "Malaysia" : "Malaizija", + "Mozambique" : "Mozambika", + "Namibia" : "Namībija", + "New Caledonia" : "Jaunkaledonija", + "Niger" : "Nigēra", + "Norfolk Island" : "Norfolkas sala", + "Nigeria" : "Nigērija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nīderlande", + "Norway" : "Norvēģija", + "Nepal" : "Nepāla", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Jaunzēlande", + "Oman" : "Omāna", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Franču Polinēzija", + "Papua New Guinea" : "Papua-Jaungvineja", + "Philippines" : "Filipīnas", + "Pakistan" : "Paķistāna", + "Poland" : "Polija", + "Saint Pierre and Miquelon" : "Senpjēra un Mikelona", + "Pitcairn" : "Pitkērna", + "Puerto Rico" : "Puertoriko", + "Palestine, State of" : "Palestīna", + "Portugal" : "Portugāle", + "Palau" : "Palau", + "Paraguay" : "Paragvaja", + "Qatar" : "Katāra", + "Réunion" : "Reinjona", + "Romania" : "Rumānija", + "Serbia" : "Serbija", + "Russian Federation" : "Krievijas Federācija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saūda Arābija", + "Solomon Islands" : "Zālamana salas", + "Seychelles" : "Seišelas", + "Sudan" : "Sudāna", + "Sweden" : "Zviedrija", + "Singapore" : "Singapūra", + "Saint Helena, Ascension and Tristan da Cunha" : "Svētās Helēnas sala, Debesbraukšanas sala un Tristana da Kuņas salas", + "Slovenia" : "Slovēnija", + "Svalbard and Jan Mayen" : "Svalbārai un Jana Majena", + "Slovakia" : "Slovākija", + "Sierra Leone" : "Sjerraleone", + "San Marino" : "Sanmarīno", + "Senegal" : "Senegāla", + "Somalia" : "Somālija", + "Suriname" : "Surinama", + "South Sudan" : "Dienvidsudāna", + "Sao Tome and Principe" : "Santome un Prinsipi", + "El Salvador" : "Salvadora", + "Sint Maarten (Dutch part)" : "Sintmārtena (Nīderlandes teritorija)", + "Syrian Arab Republic" : "Sīrijas Republika", + "Turks and Caicos Islands" : "Tērksas un Kaikosas salas", + "Chad" : "Čada", + "French Southern Territories" : "Francijas Dienvidjūru Zemes", + "Togo" : "Togo", + "Thailand" : "Taizeme", + "Tajikistan" : "Tadžikistāna", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Austrumtimora", + "Turkmenistan" : "Turkmenistāna", + "Tunisia" : "Tunisija", + "Tonga" : "Tonga", + "Turkey" : "Turcija", + "Trinidad and Tobago" : "Trinidāda un Tobāgo", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzānija, Apvienotā Republika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "ASV Mazās aizjūras salas", + "United States of America" : "Amerikas Savienotās Valstis", + "Uruguay" : "Urugvaja", + "Uzbekistan" : "Uzbekistāna", + "Holy See" : "Vatikāns", + "Saint Vincent and the Grenadines" : "Sentvinsenta un Grenadīnas", + "Viet Nam" : "Vjetnama", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Volisa un Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemena", + "Mayotte" : "Majota", + "South Africa" : "Dienvidāfrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Federation" : "Federācija", + "Invalid date, date format must be YYYY-MM-DD" : "Nederīgs datums, datuma formātam jābūt YYYY-MM-DD", + "Conversation not found" : "Saruna nav atrasta", + "Chat, video & audio-conferencing using WebRTC" : "Video un audio konferences, izmantojot WebRTC", + "Leave call" : "Pamest zvanu", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Mēs esam noteikuši vairākus nederīgus paroles mēģinājumus no šīs IP adreses, tādējādi nākamā pieteikšanās ir ierobežota līdz 30 sekundēm.", + "The password is wrong. Try again." : "Nepareiza parole. Jāmēģina vēlreiz.", + "Password" : "Parole", + "Submit" : "Iesniegt", + "Error requesting the password." : "Kļūda, pieprasot paroli.", + "Request password" : "Pieprasīt paroli", + "This conversation has ended" : "Šī saruna ir beigusies", + "Everyone" : "Visi", + "Save changes" : "Saglabāt izmaiņas", + "Saving …" : "Saglabā ...", + "Saved!" : "Saglabāts!", + "Limit to groups" : "Grupu ierobežojums", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ja ir atlasīta vismaz viena grupa, tikai cilvēki no sarakstā uzskaitītajām grupām var piedalīties sarunās.", + "Guests can still join public conversations." : "Viesi joprojām var pievienoties publiskām sarunām.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Lietotāji, kas vairs nevar izmantot Talk, joprojām tiks uzrādīti kā dalībnieki viņu iepriekšējās sarunās, kā arī tiks paturētas viņu ziņas.", + "Enabled" : "Iespējots", + "Disabled" : "Atspējots", + "State" : "Stāvoklis", + "Name" : "Nosaukums", + "Beta" : "Beta", + "Permissions" : "Atļaujas", + "General settings" : "Vispārīgi iestatījumi", + "Enable encryption" : "Ieslēgt šifrēšanu", + "Pending" : "Gaida", + "Error" : "Kļūda", + "Never" : "Nekad", + "Language" : "Valoda", + "Country" : "Valsts", + "Status" : "Status", + "Created at" : "Izveidots plkst.", + "Yes" : "Jā", + "No" : "Nē", + "Validate SSL certificate" : "Pārbaudīt SSL sertifikātu", + "Delete this server" : "Izdzēst šo serveri", + "Test this server" : "Testēt šo serveri", + "Shared secret" : "Koplietojams noslēpums", + "STUN server URL" : "STUN servera URL", + "STUN servers" : "STUN serveris", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN serveris tiek izmantots, lai noteiktu maršrutētāja dalībnieku publisko IP adresi.", + "TURN server URL" : "TURN servera URL", + "TURN server secret" : "TURN servera noslēpums", + "TURN server protocols" : "TURN servera protokols", + "TURN servers" : "TURN serveris", + "Failed" : "Neizdevās", + "OK" : "Labi", + "Confirm" : "Apstiprināt", + "Reset" : "Atiestatīt", + "Cancel" : "Atcelt", + "Back" : "Atpakaļ", + "Now" : "Tagad", + "Loading …" : "Ielādē…", + "From" : "No", + "To" : "Līdz", + "Calendar" : "Kalendārs", + "Attendees" : "Dalībnieki", + "Save" : "Saglabāt", + "No results" : "Nav iznākuma", + "Done" : "Pabeigts", + "Exit full screen (F)" : "Iziet no pilnekrāna (F)", + "Grid view" : "Režģa izkārtojums", + "Waiting for others to join the call …" : "Gaidot citus pievienoties zvanam …", + "You can invite others in the participant tab of the sidebar" : "Sānjoslā, dalībnieku cilnē var uzaicināt citus dalībniekus", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sānjoslas dalībnieku cilnē varat uzaicināt citus lietotājus vai kopīgot šo saiti, lai uzaicinātu citus.", + "Share this link to invite others!" : "Kopīgo šo saiti, lai uzaicinātu citus!", + "Copy link" : "Ievietot saiti starpliktuvē", + "Mute audio" : "Izslēgt audio skaņu", + "None" : "Nav", + "Disable video" : "Atspējot video", + "Enable video" : "Iespējot video", + "You" : "Tu", + "Show screen" : "Rādīt ekrānu", + "Collapse" : "Sakļaut", + "Favorite" : "Izlasē", + "Manage the list of banned users in this conversation." : "Pārvaldīt šīs sarunas liegto lietotāju sarakstu.", + "Date:" : "Datums:", + "Hide details" : "Paslēpt informāciju", + "Show details" : "Rādīt informāciju", + "Disable" : "Deaktivēt", + "Enable" : "Iespējot", + "Choose" : "Izvēlēties", + "The file must be a PNG or JPG" : "Datnei jābūt PNG vai JPG", + "Restricted" : "Ierobežota", + "Personal" : "Personīgs", + "Setup overview" : "Uzstādīšanas pārskats", + "Leave conversation" : "Atstāt sarunu", + "Delete conversation" : "Izdzēst sarunu", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Tiklīdz saruna ir pamesta, lai pievienotos slēgtai sarunai, ir nepieciešams uzaicinājums. Atvērtai sarunai var jebkurā brīdī pievienoties no jauna.", + "_%n hour_::_%n hours_" : ["%n stundu","%n stunda","%n stundas"], + "Password protection" : "Password protection", + "Open conversation" : "Atvērt sarunu", + "Edit" : "Labot", + "Delete" : "Izdzēst", + "Notifications" : "Paziņojumi", + "Join" : "Pievienoties", + "Hello, {displayName}" : "Sveiciens, {displayName}!", + "Create and copy link" : "Izveidot saiti un ievietot starpliktuvē", + "Open calendar" : "Atvērt kalendāru", + "Log in" : "Pieteikties", + "Remove from favorites" : "Noņemt no izlases", + "Add to favorites" : "Pievienot izlasei", + "You need to promote a new moderator before you can leave the conversation." : "Ir nepieciešams iecelt jaunu satura pārraudzītāju, lai Tu varētu pamest sarunu.", + "Home" : "Sākums", + "Alphabetically" : "Alfabētiskā secībā", + "You have no unread mentions." : "Nav nelasītu pieminēšanu.", + "Clear filter" : "Notīrīt atlasi", + "App settings" : "Lietotnes iestatījumi", + "Users" : "Lietotāji", + "Groups" : "Grupas", + "Teams" : "Komandas", + "Open conversations" : "Atvērt sarunas", + "Users and teams" : "Lietotāji un komandas", + "Devices" : "Ierīces", + "No audio" : "Nav audio", + "Invalid path selected" : "Atlasīts nederīgs ceļš", + "Upload" : "Augšupielādēt", + "Files" : "Datnes", + "24 hours" : "24 stundas", + "7 days" : "7 dienas", + "Message forwarded to \"Note to self\"" : "Ziņojums pārvirzīts uz “Piezīme sev”", + "Error while forwarding message to \"Note to self\"" : "Kļūda ziņojuma pārvirzīšanas uz “Piezīme sev” laikā", + "Reply" : "Atbildēt", + "Go to file" : "Doties uz datni", + "Translate" : "Tulkot", + "Dismiss" : "Atmest", + "Contact" : "Kontaktpersona", + "File to share" : "Kopīgojamā datne", + "Upload from device" : "Augšupielādēt no ierīces", + "New file" : "Jauna datne", + "Add more files" : "Pievienot vairāk datņu", + "Send" : "Sūtīt", + "Settings" : "Iestatījumi", + "Results" : "Rezultāti", + "moderator" : "satura pārraudzītājs", + "guest" : "viesis", + "Remove participant" : "Noņemt dalībnieku", + "Demote from moderator" : "Pazemināt no satura pārraudzītāja", + "Promote to moderator" : "Iecelt par satura pārraudzītāju", + "Remove" : "Noņemt", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Pievienot lietotājus vai komandas", + "Add teams" : "Pievienot komandas", + "Searching …" : "Meklē...", + "Participants" : "Dalībnieki", + "Open chat" : "Atvērt tērzēšanu", + "Chat" : "Tērzēt", + "Details" : "Informācija", + "From User" : "No lietotāja", + "Load more results" : "Ielādēt vairāk iznākumu", + "Projects" : "Projekti", + "Link to a conversation" : "Saite uz sarunu", + "Select conversation" : "Izvēlēties sarunu", + "Notification settings" : "Paziņojumu iestatījumi", + "Error while setting read status privacy" : "Kļūda lasīšanas stāvokļa privātuma iestatīšanas laikā", + "Error while setting typing status privacy" : "Kļūda rakstīšanas stāvokļa privātuma iestatīšanas laikā", + "Privacy" : "Privātums", + "Search" : "Meklēt", + "Start call" : "Sākt zvanu", + "All tasks done!" : "Visi uzdevumi paveikti.", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} no %n uzdevumiem","{done} no %n uzdevuma","{done} no %n uzdevumiem"], + "You are not allowed to enable screensharing" : "Nav ļauts iespējot ekrāna kopīgošanu", + "No screensharing" : "Nav ekrāna kopīgošanas", + "Screensharing options" : "Ekrāna kopīgošanas iespējas", + "Enable screensharing" : "Iespējot ekrāna kopīgošanu", + "Screensharing requires the page to be loaded through HTTPS." : "Ekrāna kopīgošanai ir nepieciešams lapu ielādēt ar HTTPS.", + "An error occurred while starting screensharing." : "Ekrāna kopīgošanas uzsākšanas laikā atgadījās kļūda.", + "Show your screen" : "Rādīt savu ekrānu", + "Stop screensharing" : "Apturēt ekrāna kopīgošanu", + "Start recording" : "Uzsākt ierakstīšanu", + "Open Calendar" : "Atvērt kalendāru", + "Would you like to delete this conversation?" : "Vai izdzēst šo sarunu?", + "Keep" : "Paturēt", + "Select a region" : "Atlasīt apgabalu", + "Duplicate session" : "Pavairot sesiju", + "Join a conversation or start a new one" : "Pievienoties sarunai vai sākt jaunu", + "User" : "Lietotājs", + "API token" : "API pilnvara", + "Login" : "Pieteikumvārds", + "Nickname" : "Iesauka", + "Client ID" : "Klienta ID", + "Media" : "Informācijas nesēji", + "Polls" : "Aptaujas", + "Audio" : "Audio", + "Show all files" : "Parādīt visas datnes", + "Show all polls" : "Parādīt visas aptaujas", + "Group" : "Grupa", + "Team" : "Komanda", + "You and {user0} left the call" : "Tu un {user0} pametāt zvanu", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Search in conversation: {conversation}" : "Meklēt sarunā: {conversation}", + "Error while sharing file" : "Kļūda datnes kopīgošanā", + "Later today – {timeLocale}" : "Vēlāk šodien – {timeLocale}", + "Please reload the page." : "Lūgums pārlādēt lapu", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Tas aizņem vairāk laika, nekā paredzēts. Vai multivides atļaujas jau ir piešķirtas (vai noraidītas)? Ja atbilde ir “jā”, lūgums palaist savu pārlūku no jauna, jo ir skaņas un video atteice", + "Access to microphone & camera is only possible with HTTPS" : "Piekļuve mikrofonam un kamerai ir iespējama izmantojot tikai HTTPS", + "Please move your setup to HTTPS" : "Lūgums pārvietot serveri uz HTTPS", + "Access to microphone & camera was denied" : "Tika noraidīta piekļuve mikrofonam un kamerai", + "WebRTC is not supported in your browser" : "Pārlūkā netiek atbalstīts WebRTC", + "Please use a different browser like Firefox or Chrome" : "Lūgums izmantot citu pārlūku, piemēram, Firefox vai Chrome", + "Error while accessing microphone & camera" : "Kļūda, piekļūstot mikrofonam un kamerai", + "%s Talk on your mobile devices" : "%s Sarunas mobilajās ierīcēs", + "Android app" : "Android lietotne", + "iOS app" : "iOS lietotne", + "__language_name__" : "Latviešu", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Zvanu apkopojuma robotprogrammatūra izveido pārskata ziņojumu pēc zvana, uzskaitot visus dalībniekus un izklāstot uzdevumus", + "Tasks" : "Uzdevumi", + "Notes" : "Piezīmes", + "Reports" : "Atskaites", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nav uzstādīts, tas var novest pie veiktspējas sarežģījumiem, kad izmanto darbvirsmas klientus.", + "Set reminder for later today" : "Iestatīt atgādinājumu vēlākam šodien" +},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : 2);" +} \ No newline at end of file diff --git a/l10n/mk.js b/l10n/mk.js new file mode 100644 index 0000000..f1c8bcf --- /dev/null +++ b/l10n/mk.js @@ -0,0 +1,1018 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "разговор", + "(Duration %s)" : "(Времетраење %s)", + "You attended a call with {user1}" : "Присуствувавте на повик со {user1}", + "_%n guest_::_%n guests_" : ["1 гостин","%n гости"], + "You attended a call with {user1} and {user2}" : "Присуствувавте на повик со {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Присуствувавте на повик со {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Присуствувавте на повик со {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Присуствувавте на повик со {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["уште %n","%n други"], + "{actor} invited you to {call}" : "{actor} ве покани во {call}", + "You were invited to a conversation or had a call" : "Поканети сте во разговор или имате повик", + "Other activities" : "Други активности", + "Talk" : "Разговор", + "Guest" : "Гостин", + "## New in Talk %s" : "## Ново во Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Safari сега може да се користат за учество во аудио и видео повици", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Разговорите еден на еден сега се постојани и не можат повеќе случајно да се претвораат во групни разговори. Исто така, кога еден од учесниците го напушта разговорот, разговорот не се брише автоматски. Само ако двајцата учесници заминат, разговорот е избришан од серверот", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Сега можете да ги известите сите учесници со објавување на „@all“ во разговорот", + "- With the \"arrow-up\" key you can repost your last message" : "- Со копчето \"стрелка нагоре\" можете повторно да ја објавите вашата последна порака", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Разговорот сега може да има команди, испратете \"/help\" како порака во разговорот за да видите дали вашиот администратор конфигурирал некои", + "- With projects you can create quick links between conversations, files and other items" : "- Со проекти можете да создадете брзи врски помеѓу разговорите, датотеките и другите ставки", + "- You can now mention guests in the chat" : "- Сега можете да ги споменете гостите во разговорот", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговорите сега можат да имаат лоби. Ова ќе им овозможи на модераторите да се приклучат на разговорот и да се јават за да ја подготват средбата, додека корисниците и гостите треба да почекаат", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Сега можете директно да одговорите на пораките што им даваат на другите корисници поголем контекст за што се однесува вашата порака", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Пребарувањето разговори и учесници исто така ќе ги филтрира вашите постојни разговори, што ќе го олесни наоѓањето на претходните разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Сега можете да додавате кориснички кориснички групи во разговорите кога е инсталирана апликацијата кругови", + "- Check out the new grid and call view" : "- Проверете ја новата мрежа и прегледот на повикот", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Сега можете да испраќате и повлекувате датотеки директно од вашиот уред во разговорот", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Споделените датотеки сега се отвораат директно во погледот на разговор со апликациите за прегледување", + "- You can now search for chats and messages in the unified search in the top bar" : "- Сега можете да пребарувате разговори и пораки во унифицираното пребарување во горната лента", + "- Spice up your messages with emojis from the emoji picker" : "- Додадете емотикони на вашите пораки од бирачот на емотикони", + "- You can now change your camera and microphone while being in a call" : "- Сега можете да ги менувате камерата и микрофонот додека сте на повик", + "- Use a poll to collect the opinions of others or settle on a date" : "- Користи анкета за да го дознаете мислењето на другите или за да договорите датум", + "Talk updates ✅" : "Talk ажурирања ✅", + "Reaction deleted by author" : "Реакцијата е отстранета од авторот", + "{actor} created the conversation" : "{actor} креираше разговор", + "You created the conversation" : "Креиравте разговор", + "An administrator created the conversation" : "Администраторот креираше разговор", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} го преименува разговорот од \"%1$s\" во \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Го преименувавте разговорот од \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администраторот го преименуваше разговорот од \"%1$s\" во \"%2$s\"", + "{actor} set the description" : "{actor} го постави описот", + "You set the description" : "Го поставивте описот", + "An administrator set the description" : "Администраторот го постави описот", + "{actor} removed the description" : "{actor} го избриша описот", + "You removed the description" : "Го избришавте описот", + "An administrator removed the description" : "Администраторот го избриша описот", + "You started a call" : "Стартувавте повик", + "{actor} started a call" : "{actor} стартуваше повик", + "{actor} joined the call" : "{actor} се приклучи кон ковикот", + "You joined the call" : "Се приклучивте кон повикот", + "{actor} left the call" : "{actor} го напушти повикот", + "You left the call" : "Го напуштивте повикот", + "{actor} unlocked the conversation" : "{actor} го одклучи разговорот", + "You unlocked the conversation" : "Го одклучивте разговорот", + "An administrator unlocked the conversation" : "Администраторот го отклучи разговорот", + "{actor} locked the conversation" : "{actor} го заклучи разговорот", + "You locked the conversation" : "Го заклучивте разговорот", + "An administrator locked the conversation" : "Администраторот го заклучи разговорот", + "{actor} limited the conversation to the current participants" : "{actor} го ограничи разговорот на сегашните учесници", + "You limited the conversation to the current participants" : "Оо ограничивте разговорот на сегашните учесници", + "An administrator limited the conversation to the current participants" : "Администраторот го ограничи разговорот на сегашните учесници", + "{actor} opened the conversation to registered users" : "{actor} го отвори разговорот за регистрирани корисници", + "You opened the conversation to registered users" : "Го отворивте разговорот за регистрирани корисници", + "An administrator opened the conversation to registered users" : "Администраторот го отвори разговорот за регистрирани корисници", + "The conversation is now open to everyone" : "Разговорот сега е отворен за сите", + "{actor} opened the conversation to everyone" : "{actor} го отвори разговорот за сите", + "You opened the conversation to everyone" : "Го отворивте разговорот за сите", + "{actor} restricted the conversation to moderators" : "{actor} го ограничи разговорот само на модератори", + "You restricted the conversation to moderators" : "Го ограничивте разговорот само на модератори", + "{actor} allowed guests" : "{actor} овозможи гости", + "You allowed guests" : "Овозможивте гости", + "An administrator allowed guests" : "Администраторот овозможи гости", + "{actor} disallowed guests" : "{actor} забрани гости", + "You disallowed guests" : "Забранивте гости", + "An administrator disallowed guests" : "Администраторот оневозможи гости", + "{actor} set a password" : "{actor} постави лозинка", + "You set a password" : "Поставивте лозинка", + "An administrator set a password" : "Администраторот постави лозинка", + "{actor} removed the password" : "{actor} ја отстрани лозинката", + "You removed the password" : "Ја отстранивте лозинката", + "An administrator removed the password" : "Администраторот ја избриша лозинката", + "{actor} added {user}" : "{actor} го додаде {user}", + "You joined the conversation" : "Се приклучивте кон разговорот", + "{actor} joined the conversation" : "{actor} се приклучи кон разговорот", + "You added {user}" : "Го додадовте {user}", + "{actor} added you" : "{actor} ве додаде", + "An administrator added you" : "Администраторот ве додаде", + "An administrator added {user}" : "Администраторот го додаде {user}", + "You left the conversation" : "Го напуштивте разговорот", + "{actor} left the conversation" : "{actor} го напушти разговорот", + "{actor} removed {user}" : "{actor} го отстрани {user}", + "You removed {user}" : "го отстранивте {user}", + "{actor} removed you" : "{actor} ве отстрани", + "An administrator removed you" : "Администраторот ве отстрани", + "An administrator removed {user}" : "Администраторот го отстрани {user}", + "{federated_user} accepted the invitation" : "{federated_user} ја прифати поканата", + "{actor} removed {federated_user}" : "{actor} го отстрани {federated_user}", + "You removed {federated_user}" : "го отстранивте {federated_user}", + "An administrator removed {federated_user}" : "Администраторот го отстрани {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ја одби поканата", + "{actor} added group {group}" : "{actor} додаде група {group}", + "You added group {group}" : "Додадовте група {group}", + "An administrator added group {group}" : "Администраторот додаде група {group}", + "{actor} removed group {group}" : "{actor} отстрани група {group}", + "You removed group {group}" : "Отстранивте {group}", + "An administrator removed group {group}" : "Администраторот отстрани група {group}", + "{actor} promoted {user} to moderator" : "{actor} го промовираше {user} во модератор", + "You promoted {user} to moderator" : "Го промовиравте {user} во модератор", + "{actor} promoted you to moderator" : "{actor} ве промовираше во модератор", + "An administrator promoted you to moderator" : "Администраторот ве промовирање во модератор", + "An administrator promoted {user} to moderator" : "Администраторот го промовираше {user} во модератор", + "{actor} demoted {user} from moderator" : "{actor} го деградираше {user} од модератор", + "You demoted {user} from moderator" : "Го деградиравте {user} од модератор", + "{actor} demoted you from moderator" : "{actor} те деградираше од модератор", + "An administrator demoted you from moderator" : "Администраторот ве деградираше од модератор", + "An administrator demoted {user} from moderator" : "Администраторот го деградираше {user} од модератор", + "{actor} shared a file which is no longer available" : "{actor} сподели датотека која не е достапна повеќе", + "You shared a file which is no longer available" : "Споделивте датотека која не е достапна повеќе", + "The shared location is malformed" : "Споделената локација е погрешно зададена", + "{actor} deleted a message" : "{actor} избриша порака", + "You deleted a message" : "Избришавте порака", + "{actor} deleted a reaction" : "{actor} избриша реакција", + "You deleted a reaction" : "Избришавте реакциј", + "{actor} ended the poll {poll}" : "{actor} ја затвори анкетата {poll}", + "You ended the poll {poll}" : "Ја затворивте анкетата {poll}", + "Someone voted on the poll {poll}" : "Некој гласаше на анкетата {poll}", + "Message deleted by author" : "Пораката е избришана од авторот", + "Deleted user" : "Избришан корисник", + "Administration" : "Администрација", + "System" : "Систем", + "%s (guest)" : "%s (гостин)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} го заврши повикот со 1 гостин (Времетраење {duration})","{actor} го заврши повикот со %n гости (Времетраење {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} го заврши повикот со {user1} (Времетраење {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} го заврши повикот со {user1} и {user2} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2 } и {user3} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2}, {user3} и {user4} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2}, {user3}, {user4} и {user5} (Времетраење {duration})", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Разговор со %s", + "File not found" : "Датотеката не е пронајдена", + "File is not shared, or shared but not with the user" : "Датотеката не е споделена, или е споделена но не со корисници", + "No account available to delete." : "Нема сметка достапна за бришење.", + "Poll" : "Анкета", + "No image file provided" : "Не е доставена фотографија или датотека", + "File is too big" : "Датотеката е премногу голема", + "Invalid file provided" : "Доставена е невалидна датотека", + "Invalid image" : "Невалидна фотографија", + "Unknown filetype" : "Непознат тип на датотека", + "Talk mentions" : "Спомнувања", + "Say hi to your friends and colleagues!" : "Кажи им здраво на твојте пријатели и колеги!", + "No unread mentions" : "Нема непрочитани спомнувања", + "Call in progress" : "Повик е во тек", + "You were mentioned" : "Споменати сте", + "Write to conversation" : "Пишивајте во разговорот", + "Writes event information into a conversation of your choice" : "Напишете информации за настанот во разговорот по ваш избор", + "Conversation invitation" : "Покана за разговор", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Истотака можете да се приклучите преку телефон со следниве детали", + "Dial-in information" : "Информации", + "Meeting ID" : "ID на средба", + "Your PIN" : "Вашиот ПИН", + "Meeting" : "Средба", + "Password request: %s" : "Барање за лозинка: %s", + "Private conversation" : "Приватен разговор", + "Deleted user (%s)" : "Избришан корисник (%s)", + "Dismiss notification" : "Отфрли известување", + "Accept" : "Прифати", + "Decline" : "Одбиј", + "New message" : "Нова порака", + "Reminder" : "Потсетник", + "Notification" : "Известување", + "Reminder: You in {call}" : "Потсетник: Вие во {call}", + "Reminder: {user} in {call}" : "Потсетник: {user} во {call}", + "Reminder: Deleted user in {call}" : "Потсетник: Избришан корисник во {call}", + "Reminder: {guest} (guest) in {call}" : "Потсетник: {guest} (гостин) во {call}", + "Reminder: Guest in {call}" : "Потсетник: гостин во {call}", + "{user} in {call}" : "{user} во {call}", + "Deleted user in {call}" : "Избришан корисник во {call}", + "{guest} (guest) in {call}" : "{guest} (guest) во {call}", + "Guest in {call}" : "Гостин во {call}", + "{user} sent you a private message" : "{user} ви испрати приватна порака", + "{user} sent a message in conversation {call}" : "{user} ви испрати порака во разговорот {call}", + "A deleted user sent a message in conversation {call}" : "Избришан корисник ви испрати порака во разговорот {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) ви испрати порака во разговорот {call}", + "A guest sent a message in conversation {call}" : "гостин ви испрати порака во разговорот {call}", + "{user} replied to your private message" : "{user} одговори на вашата приватна порака", + "{user} replied to your message in conversation {call}" : "{user} одговори на вашата порака во разговорот {call}", + "A deleted user replied to your message in conversation {call}" : "Избришан корисник одговори на вашата порака во разговорот {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) одговори на вашата порака во разговорот {call}", + "A guest replied to your message in conversation {call}" : "Гостин одговори на вашата порака во разговорот {call}", + "Reminder: You in private conversation {call}" : "Потсетник: Вие во приватен разговор {call}", + "Reminder: A deleted user in private conversation {call}" : "Потсетник: Избришан корисник во приватен разговор {call}", + "Reminder: {user} in private conversation" : "Потсетник: {user} во приватен разговор", + "Reminder: You in conversation {call}" : "Потсетник: Вие во разговор {call}", + "Reminder: {user} in conversation {call}" : "Потсетник: {user} во разговор {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: Избришан корисник во разговор {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Потсетник: {guest} (гостин) во разговор {call}", + "Reminder: A guest in conversation {call}" : "Потсетник: Гостин во разговор {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) реагираше со {reaction} на вашата порака во повикот {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gostin реагираше со {reaction} на вашата порака во повикот {call}", + "{user} mentioned you in a private conversation" : "{user} те спомна во приватен разговор", + "{user} mentioned you in conversation {call}" : "{user} те спомна во разговор {call}", + "A deleted user mentioned you in conversation {call}" : "Избришан корисник те спомна во разговор {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) те спомна во разговор {call}", + "A guest mentioned you in conversation {call}" : "Гостин те спомна во разговор {call}", + "Dismiss reminder" : "Избриши потсетник", + "View chat" : "Погледнете го разговорот", + "{user} invited you to a group conversation: {call}" : "{user} те покани на групен разговор: {call}", + "Join call" : "Приклучи се кон повикот", + "Answer call" : "Одговори на повикот", + "{user} would like to talk with you" : "{user} сака да разговара со вас", + "Call back" : "Јавете се назад", + "You missed a call from {user}" : "Имате пропуштен повик од {user}", + "A group call has started in {call}" : "Започна групен повик {call}", + "You missed a group call in {call}" : "Имате пропуштен групен повик во {call}", + "{email} is requesting the password to access {file}" : "{email} побара лозинка за пристап до {file}", + "{email} tried to request the password to access {file}" : "{email} побара лозинка за да пристапи до {file}", + "Someone is requesting the password to access {file}" : "Некој побара лозинка за да пристапи до {file}", + "Someone tried to request the password to access {file}" : "Некој се обиде да побара лозинка за да пристапи до {file}", + "Open settings" : "Отвори параметри", + "The hosted signaling server is now configured and will be used." : "Signaling сервер е конфигуриран и сега ќе се користи.", + "The hosted signaling server was removed and will not be used anymore." : "Signaling серверот е избришан и нема да се користи повеќе.", + "error" : "грешка", + "Contact via Talk" : "Разговор", + "Open Talk" : "Започни разговор", + "Default" : "Стандардно", + "Presentation" : "Презентација", + "Conversations" : "Разговори", + "{user}" : "{user}", + "Messages" : "Пораки", + "{user} in {conversation}" : "{user} во {conversation}", + "Messages in other conversations" : "Пораки во други разговори", + "Avatar image is not square" : "Сликата за Аватар не е квадратна", + "Room {number}" : "Соба {number}", + "Other" : "Останато", + "Something unexpected happened." : "Се случи нешто неочекувано.", + "The URL is invalid." : "Невалидна URL адреса.", + "An HTTPS URL is required." : "Потебна е HTTPS URL.", + "The email address is invalid." : "Невалидна е-пошта.", + "The language is invalid." : "Невалиден јазик.", + "The country is invalid." : "Невалидна држава.", + "Something unexpected happened. Please try again later." : "Се случи нешто неочекувано. Обидете се покасно.", + "Andorra" : "Андора", + "United Arab Emirates" : "Обединети Арапски Емирати", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигва и Барбуда", + "Anguilla" : "Ангила", + "Albania" : "Албанија", + "Armenia" : "Ерменија", + "Angola" : "Ангола", + "Antarctica" : "Антарктик", + "Argentina" : "Аргентина", + "American Samoa" : "Американска Самоа", + "Austria" : "Австрија", + "Australia" : "Австралија", + "Aruba" : "Аруба", + "Åland Islands" : "Оландски острови", + "Azerbaijan" : "Азербејџан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгија", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Бугарија", + "Bahrain" : "Бахреин", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Свети Вартоломеј", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Брунеј", + "Bolivia, Plurinational State of" : "Боливија, Повеќенационална Држава", + "Bonaire, Sint Eustatius and Saba" : "Бонер, Свети Евстахиј и Саба", + "Brazil" : "Бразил", + "Bahamas" : "Бахами", + "Bhutan" : "Бутан", + "Bouvet Island" : "Остров Буве", + "Botswana" : "Боцвана", + "Belarus" : "Белорусија", + "Belize" : "Белизе", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосови Острови", + "Congo, the Democratic Republic of the" : "Конго, Демократска Република", + "Central African Republic" : "Централна Африканска Република", + "Congo" : "Конго", + "Switzerland" : "Швајцарија", + "Côte d'Ivoire" : "Брегот на Слоновата Коска", + "Cook Islands" : "Кукови Острови", + "Chile" : "Чиле", + "Cameroon" : "Камерун", + "China" : "Кина", + "Colombia" : "Колумбија", + "Costa Rica" : "Костарика", + "Cuba" : "Куба", + "Cabo Verde" : "Зелен ’Рт", + "Curaçao" : "Курасао", + "Christmas Island" : "Божиќен Остров", + "Cyprus" : "Кипар", + "Czechia" : "Чешка", + "Germany" : "Германија", + "Djibouti" : "Џибути", + "Denmark" : "Данска", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска Република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонија", + "Egypt" : "Египет", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритреја", + "Spain" : "Шпанија", + "Ethiopia" : "Етиопија", + "Finland" : "Финска", + "Fiji" : "Фиџи", + "Falkland Islands (Malvinas)" : "Фолкландски Острови", + "Micronesia, Federated States of" : "Микронезија, Сојузни Држави", + "Faroe Islands" : "Фарски Острови", + "France" : "Франција", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Кралство на Велика Британија и Северна Ирска", + "Grenada" : "Гренада", + "Georgia" : "Грузија", + "French Guiana" : "Француска Гвајана", + "Guernsey" : "Гернзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамбија", + "Guinea" : "Гвинеја", + "Guadeloupe" : "Гваделуп", + "Equatorial Guinea" : "Екваторијална Гвинеја", + "Greece" : "Грција", + "South Georgia and the South Sandwich Islands" : "Јужна Џорџија и Јужни Сендвички Острови", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинеја-Бисао", + "Guyana" : "Гвајана", + "Hong Kong" : "Хонгконг", + "Heard Island and McDonald Islands" : "Островите Хард и Мекдоналдс", + "Honduras" : "Хондурас", + "Croatia" : "Хрватска", + "Haiti" : "Хаити", + "Hungary" : "Унгарија", + "Indonesia" : "Индонезија", + "Ireland" : "Ирска", + "Israel" : "Израел", + "Isle of Man" : "Остров Ман", + "India" : "Индија", + "British Indian Ocean Territory" : "Британска Индоокеанска Територија", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран, Исламска Република", + "Iceland" : "Исланд", + "Italy" : "Италија", + "Jersey" : "Џерси", + "Jamaica" : "Јамајка", + "Jordan" : "Јордан", + "Japan" : "Јапонија", + "Kenya" : "Кенија", + "Kyrgyzstan" : "Киргистан", + "Cambodia" : "Камбоџа", + "Kiribati" : "Кирибати", + "Comoros" : "Коморски Острови", + "Saint Kitts and Nevis" : "Свети Кристофер и Невис", + "Korea, Democratic People's Republic of" : "Кореја, Демократска Народна Република", + "Korea, Republic of" : "Кореја, Република", + "Kuwait" : "Кувајт", + "Cayman Islands" : "Кајмански Острови", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаошка Народна Демократска Република", + "Lebanon" : "Либан", + "Saint Lucia" : "Света Луција", + "Liechtenstein" : "Лихтенштајн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерија", + "Lesotho" : "Лесото", + "Lithuania" : "Литванија", + "Luxembourg" : "Луксембург", + "Latvia" : "Летонија", + "Libya" : "Либија", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдавија, Република", + "Montenegro" : "Црна Гора", + "Saint Martin (French part)" : "Свети Мартин (остров)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалски Острови", + "North Macedonia" : "Македонија", + "Mali" : "Мали", + "Myanmar" : "Мјанмар", + "Mongolia" : "Монголија", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северни Маријански Острови", + "Martinique" : "Мартиник", + "Mauritania" : "Мавританија", + "Montserrat" : "Монтсерат", + "Malta" : "Малта", + "Mauritius" : "Маврициус", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малезија", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибија", + "New Caledonia" : "Нова Каледонија", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолшки Остров", + "Nigeria" : "Нигерија", + "Nicaragua" : "Никарагва", + "Netherlands" : "Холандија", + "Norway" : "Норвешка", + "Nepal" : "Непал", + "Nauru" : "Република Науру", + "Niue" : "Ниуе", + "New Zealand" : "Нов Зеланд", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Француска Полинезија", + "Papua New Guinea" : "Папуа Нова Гвинеја", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Полска", + "Saint Pierre and Miquelon" : "Свети Пјер и Микелон", + "Pitcairn" : "Питкерн", + "Puerto Rico" : "Порто Рико", + "Palestine, State of" : "Држава Палестина", + "Portugal" : "Португалија", + "Palau" : "Република Палау", + "Paraguay" : "Парагвај", + "Qatar" : "Катар", + "Réunion" : "Реинион", + "Romania" : "Романија", + "Serbia" : "Србија", + "Russian Federation" : "Руска Федерација", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудиска Арабија", + "Solomon Islands" : "Соломонски острови", + "Seychelles" : "Сејшели", + "Sudan" : "Судан", + "Sweden" : "Шведска", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Елена, Вознесение и Тристан да Куња", + "Slovenia" : "Словенија", + "Svalbard and Jan Mayen" : "Свалбард и Јан Мејн\n ", + "Slovakia" : "Словачка", + "Sierra Leone" : "Сиера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалија", + "Suriname" : "Суринам", + "South Sudan" : "Јужен Судан", + "Sao Tome and Principe" : "Сао Томе и Принсипе", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Свети Мартин (Холандија)", + "Syrian Arab Republic" : "Сириска Арапска Република", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Туркс и Кајкос", + "Chad" : "Чад", + "French Southern Territories" : "Француски Јужни и Антарктички Земји", + "Togo" : "Того", + "Thailand" : "Тајланд", + "Tajikistan" : "Таџикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Тимор-Лест", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Tonga", + "Turkey" : "Турција", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Таиван, Провинција на Кина", + "Tanzania, United Republic of" : "Обединета Република Танзанија", + "Ukraine" : "Украина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Мали оддалечени острови на САД", + "United States of America" : "Соединетите Американски Држави", + "Uruguay" : "Уругвај", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Света столица", + "Saint Vincent and the Grenadines" : "Свети Винцент и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела, Боливарска република", + "Virgin Islands, British" : "Девствени Острови, Британски", + "Virgin Islands, U.S." : "Девствени Острови, Обединети Држави", + "Viet Nam" : "Социјалистичка Република Виетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Валис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Јемен", + "Mayotte" : "Мајот", + "South Africa" : "Јужна Африка", + "Zambia" : "Замбија", + "Zimbabwe" : "Зимбабве", + "Federation" : "Федерација", + "Error: Server did not respond with proper JSON" : "Грешка: Серверот не одговори со соодветна JSON", + "Error: Server responded with: {error}" : "Грешка: Серверот одговори со: {error}", + "Error: Unknown error occurred" : "Грешка: Се појави непозната грешка", + "SIP configuration" : "SIP конфигурација", + "Invalid date, date format must be YYYY-MM-DD" : "Невалиден датум, форматот мора да биде ГГГГ-ММ-ДД", + "Conversation not found" : "Разговорот не е пронајден", + "Chat, video & audio-conferencing using WebRTC" : "Разговор, видео и аудио конференција со користење на WebRTC", + "Leave call" : "Напушти го повикот", + "Stay in call" : "Остани во повикот", + "Discuss this file" : "Дискусија за оваа датотека", + "Share this file with others to discuss it" : "Сподели ја оваа датотека со другите за да дискутирате за неа", + "Share this file" : "Сподели ја оваа датотека", + "Join conversation" : "Приклучи се на разговорот", + "This conversation is password-protected." : "Овој разговор е заштитен со лозинка.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Детектирани се повеќе неуспешни најавувања од вашата IP адреса. Затоа вашиот следен обид за најавување е одложено за 30 секунди.", + "The password is wrong. Try again." : "Лозинката е погрешна. Обидите се повторно.", + "Password" : "Лозинка", + "Submit" : "Испрати", + "Error requesting the password." : "Грешка при барање на лозинка", + "Request password" : "Барање на лозинка", + "This conversation has ended" : "Овој разговор е завршен", + "Everyone" : "Сите", + "Users and moderators" : "Корисници и модератори", + "Moderators only" : "Само модераторите", + "Disable calls" : "Оневозможи повици", + "Save changes" : "Зачувај ги промените", + "Saving …" : "Зачувува ...", + "Saved!" : "Зачувано!", + "Limit to groups" : "Ограничување на групи", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Кога една група е избрана, само корисниците на таа група можат да бидат дел од разговорот.", + "Guests can still join public conversations." : "Гостите сеуште можат да се приклучат кон јавните разговори.", + "Limit using Talk" : "Ограничи користење на Talk", + "Limit creating a public and group conversation" : "Ограничи креирање на јавни и групни разговори", + "Limit creating conversations" : "Ограничи креирање на разговори", + "Limit starting a call" : "Ограничи започнување на повик", + "Limit starting calls" : "Ограничи започнување на повик", + "When a call has started, everyone with access to the conversation can join the call." : "Кога повикот е започнат, секој со пристап до разговорот може да се приклучи кон повикот.", + "Enabled" : "Овозможено", + "Disabled" : "Оневозможен", + "State" : "Статус", + "Name" : "Име", + "Last error" : "Последна грешка", + "Beta" : "Бета", + "Permissions" : "Дозволи", + "All messages" : "Сите пораки", + "@-mentions only" : "само @-спомнување ", + "Off" : "Исклучени", + "General settings" : "Општи параметри", + "Default notification settings" : "Стандардни поставки за известување", + "Default group notification" : "Стандардни групни известувања", + "Default group notification for new groups" : "Стандардни групни известувања за нови групи", + "Integration into other apps" : "Интеграција со други апликации", + "Allow conversations on files" : "Дозволи разговор на датотеките", + "Allow conversations on public shares for files" : "Дозволи разговор на јавно споделените датотеки", + "Enable encryption" : "Овозможи енкрипција", + "Pending" : "Чекање", + "Error" : "Грешка", + "Blocked" : "Блокирани", + "Active" : "Активно", + "Expired" : "Истечен", + "Never" : "Никогаш", + "URL of this Nextcloud instance" : "URL од оваа Nextcloud истанца", + "Language" : "Јазик", + "Country" : "Држава", + "Status" : "Статус", + "Created at" : "Создадено на", + "Expires at" : "Истекува на", + "Limits" : "Ограничувања", + "Yes" : "Да", + "No" : "Не", + "_%n user_::_%n users_" : ["1 корисник","%n корисници"], + "Installed version: {version}" : "Инсталирана верзија: {version}", + "Downloading …" : "Преземање ...", + "Install Talk Matterbridge" : "Инсталирај мост интеграција", + "Matterbridge integration" : "Мост интеграција", + "Enable Matterbridge integration" : "Овозможи мост интеграција", + "Status: Checking connection" : "Статус: Проверка на врската", + "OK: Running version: {version}" : "OK: Стартувана верзија: {version}", + "Delete this server" : "Избриши го овој сервер", + "Test this server" : "Тестирај го овој сервер", + "STUN server URL" : "STUN сервер URL", + "STUN servers" : "STUN сервери", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "TURN server URL" : "TURN сервер URL", + "TURN servers" : "TURN сервери", + "Failed" : "Неуспешно", + "OK" : "Добро", + "Checking …" : "Проверка ...", + "Federated user" : "Федерален корисник", + "Create rooms" : "Креирај соби", + "Confirm" : "Потврди", + "Reset" : "Ресетирање", + "Room {roomNumber}" : "Соба {roomNumber}", + "Cancel" : "Откажи", + "Back" : "Назад", + "Add participant \"{user}\"" : "Додади учесник \"{user}\"", + "Now" : "Сега", + "Loading …" : "Се вчитува…", + "From" : "Од", + "To" : "До", + "Calendar" : "Календар", + "Attendees" : "Присутни", + "Save" : "Зачувај", + "Search participants" : "Барај учесници", + "No results" : "Нема резултати", + "Done" : "Готово", + "Exit full screen (F)" : "Излез од цел екран (F)", + "Full screen (F)" : "Приказ на цел екран (F)", + "Speaker view" : "Поглед на тој што зборува", + "Grid view" : "Мрежа", + "This conversation is read-only" : "Разговорот е само за читање", + "Connecting …" : "Поврзување ...", + "Waiting for others to join the call …" : "Чекање на останатите да се приклучат кон повикот ...", + "You can invite others in the participant tab of the sidebar" : "Можете да поканите други учесници во картичката за учесници во страничната лента", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете да поканите други учесници во картичката за учесници во страничната лента или да ја споделите оваа врска за да поканите други учесници!", + "Share this link to invite others!" : "Споделете ја оваа врска за да поканите други учесници!", + "Copy link" : "Копирај линк", + "Mute audio" : "Занеми (Mute) аудио", + "Mute audio (M)" : "Занеми (Mute) го аудиото (М)", + "Unmute audio" : "Одзанеми (Unmute) го аудиото", + "Unmute audio (M)" : "Одзанеми (Unmute) го аудиото (М)", + "None" : "Ништо", + "Access to camera was denied" : "Нема пристап до камерата", + "Error while accessing camera" : "Грешка при пристап до камера", + "You have been muted by a moderator" : "Администраторот ве занеми", + "You are not allowed to enable video" : "Не сте овластени да го овозможите видеото", + "Disable video" : "Оневозможи видео", + "Disable video (V)" : "Овозможи видео (V)", + "Enable video" : "Овозможи видео", + "Enable video (V)" : "Оневозможи видео (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Овозможи видео (V) - Вашата врска ќе биде кратко прекината при овозможување на видеото за прв пат", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Овозможи видео. Вашата врска ќе биде кратко прекината при овозможување на видеото за прв пат", + "You" : "Ти", + "Mute" : "Занеми", + "Muted" : "Занемен", + "Show screen" : "Прикажи екран", + "Connection could not be established …" : "Врската неможе да се воспостави ...", + "Collapse" : "Собери", + "You need to be logged in to upload files" : "Треба да бидете најавени за да можете да прикачите датотеки", + "Drop your files to upload" : "Повлечи датотеки за да прикачите", + "Scroll to bottom" : "Скролај до долу", + "Favorite" : "Омилени", + "Date:" : "Датум:", + "Note:" : "Белешка:", + "Hide details" : "Сокриј детали", + "Show details" : "Прикажи детали", + "Edit conversation name" : "Уреди име на разговор", + "Edit conversation description" : "Уреди опис на разговор", + "Enter a description for this conversation" : "Внесете опис за овој разговор", + "Picture" : "Слика", + "Disable" : "Оневозможи", + "Enable" : "Овозможи", + "Choose" : "Избери", + "The file must be a PNG or JPG" : "Датотеката мора да биде PNG или JPG", + "Set picture" : "Постави слика", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Уреди ги стандардните дозволи за учесниците во овој разговор. Овие параметри не влијаат на модераторите.", + "All permissions" : "Сите дозволи", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учесниците имаат дозвола да започнат повик, да се придружуваат на повик, да овозможат аудио и видео и да споделуваат екран.", + "Restricted" : "Ограничена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учесниците може да се придружуваат на повици, но не можат да овозможат аудио или видео, ниту да споделуваат екран додека модераторот рачно не им даде дозвола.", + "Edit permissions" : "Уреди дозволи", + "Conversation settings" : "Параметри за разговор", + "Basic Info" : "Основни информации", + "Personal" : "Лично", + "Danger zone" : "Опасна зона", + "Leave conversation" : "Напушти разговор", + "Delete conversation" : "Избриши разговор", + "Do you really want to delete \"{displayName}\"?" : "Дали навистина сакате да го избришете \"{displayName}\"?", + "Delete all chat messages" : "Избришете ги сите пораки од разгоровот", + "Be careful, these actions cannot be undone." : "Бидете внимателни, овие дејства не можат да повратат.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Откако ќе излезете од разговорот, за повторно да се придружите на затворен разговор, потребна е покана. На отворен разговор може повторно да се придружите во секое време.", + "Permanently delete this conversation." : "Трајно избришете го овој разговор", + "Delete chat messages" : "Избришете ги пораките од разгоровот", + "Permanently delete all the messages in this conversation." : "Трајно избришете ги сите пораки во овој разговор.", + "_%n hour_::_%n hours_" : ["1 час","%n часа"], + "_%n day_::_%n days_" : ["1 ден","%n дена"], + "_%n week_::_%n weeks_" : ["1 недела","%n недели"], + "Password protection" : "Заштитено со лозинка", + "Set a password" : "Постави лозинка", + "Change password" : "Смени лозинка", + "Save password" : "Зачувај лозинка", + "Resend invitations" : "Повторно испратете ги поканите", + "Start time (optional)" : "Време на почеток (опционално)", + "Lock conversation" : "Заклучи разговор", + "Edit" : "Уреди", + "More information" : "Повеќе информации", + "Delete" : "Избриши", + "Log content" : "Содржина на записот", + "Notifications" : "Известувања", + "Notify about calls in this conversation" : "Извести ме за повиците во овој разговор", + "Join" : "Приклучи се", + "Error while creating the conversation" : "Грешка при креирање на разговор", + "Create a new conversation" : "Креирај нов разговор", + "Create conversation" : "Креирајте разговор", + "Enter your name" : "Внесете го вашето име", + "Mark as read" : "Означи како прочитано", + "Mark as unread" : "Означи како непрочитано", + "Remove from favorites" : "Отстрани од фаворити", + "Add to favorites" : "Додади во фаворити", + "You need to promote a new moderator before you can leave the conversation." : "Треба да промовирате нов модератор пред да го напуштите разговорот.", + "Conversation actions" : "Дејства за разговорот", + "Home" : "Дома", + "Unread" : "Непрочитана", + "Alphabetically" : "Азбучно", + "No matches found" : "Не се пронајдени совпаѓања", + "No conversations found" : "Нема пронајдено разговори", + "An error occurred while performing the search" : "Настана грешка при обидот за пребарување", + "Unread messages" : "Непрочитани пораки", + "Clear filter" : "Исчисти филтри", + "Users" : "Корисници", + "Groups" : "Групи", + "Teams" : "Тимови", + "Other sources" : "Други извори", + "No search results" : "Нема резултати од пребарувањето", + "Users and groups" : "Корисници и групи", + "You are currently waiting in the lobby" : "Моментално чекате во лобито", + "Select microphone" : "Избери микрофон", + "No microphone available" : "Нема микрофон", + "Select camera" : "Избери камера", + "No camera available" : "Нема камера", + "Select a device" : "Избери уред", + "Devices" : "Уреди", + "No audio" : "Нема аудио", + "No camera" : "Нема камера", + "Calls are not supported in your browser" : "Повици не се поддржани од вашиот прелистувач", + "Access to microphone is only possible with HTTPS" : "Пристап до микрофонот е возможен само преку безбедноска врска HTTPS", + "Access to microphone was denied" : "Нема пристап до микрофонот", + "Error while accessing microphone" : "Грешка при пристап до микрофон", + "Access to camera is only possible with HTTPS" : "Пристап до камерата е возможен само преку безбедноска врска HTTPS", + "Invalid path selected" : "Избрана невалидна патека", + "Blur" : "Замаглување", + "Upload" : "Прикачи", + "Files" : "Датотеки", + "24 hours" : "24 часа", + "Clear reminder – {timeLocale}" : "Избришан потсетник – {timeLocale}", + "Message text copied to clipboard" : "Пораката е копирана во клипборд", + "A reminder was successfully removed" : "Потсетникот е успешно избришан", + "A reminder was successfully set at {datetime}" : "Успешно е поставен потсетник во {datetime}", + "Error occurred when creating a reminder" : "Настана грешка при обид за поставување потсетник", + "Reply" : "Одговор", + "More actions" : "Повеќе акции", + "Set reminder" : "Постави потсетник", + "Edit message" : "Уреди порака", + "Copy message link" : "Копирај линк на пораката", + "Go to file" : "Оди до датотеката", + "Forward message" : "Препрати порака", + "Translate" : "Преведи", + "Set custom reminder" : "Постави прилагоден потсетник", + "Choose a conversation to forward the selected message." : "Избери разговор за да препратите избраната порака.", + "Error while forwarding message" : "Грешка при препраќање на пораката", + "The message has been forwarded to {selectedConversationName}" : "Пораката е препратена до {selectedConversationName}", + "Dismiss" : "Отфрли", + "Send now" : "Испрати сега", + "Message sent" : "Пораката е испратена", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} во {board}", + "Open poll" : "Отворена анкета", + "See results" : "Vidi rezultati", + "No messages" : "Нема пораки", + "Unpin" : "Од-ппинувај", + "Create a new group conversation" : "Креирајте нов групен разговор", + "Add participants" : "Додади учесници", + "Allow guests to join via link" : "Дозволи им на гостите да се приклучат преку линк", + "This conversation has been locked" : "Разговорот е заклучен", + "No permission to post messages in this conversation" : "Немате дозвола да испратите порака во овој разговор", + "Send message" : "Испрати порака", + "File to share" : "Датотека за споделување", + "Add emoji" : "Додади емотикон", + "Send later" : "Испрати покасно", + "Cancel editing" : "Откажи уредување", + "Share from {nextcloud}" : "Сподели од {nextcloud}", + "Share from Files" : "Сподели од датотеките", + "Share files to the conversation" : "Сподели датотеки во разговорот", + "Upload from device" : "Прикачи од уред", + "Create new poll" : "Направи анкета", + "Record voice message" : "Сними гласовна порака", + "End recording and send" : "Заврши снимање и испрати", + "Dismiss recording" : "Отфрли снимање", + "Error while recording audio" : "Грешка при снимање звук", + "New file" : "Нова датотека", + "Blank" : "Празно", + "Create and share a new file" : "Креирај и сподели датотека", + "Create file" : "Креирај датотека", + "Someone is typing …" : "Некој пишува …", + "{user1} is typing …" : "{user1} пишува …", + "{user1} and {user2} are typing …" : "{user1} и {user2} пишуваат …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} пишуваат …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и %n друг пишуваат …","{user1}, {user2}, {user3} и %n други пишуваат …"], + "Add more files" : "Додади повеќе датотеки", + "Send" : "Испрати", + "In this conversation {user} can:" : "Во овој разговор {user} може:", + "Edit default permissions for participants in {conversationName}" : "Уреди ги стандардните дозволи за учесниците во {conversationName}", + "Start a call" : "Повик", + "Skip the lobby" : "Прескокни го лобито", + "Can post messages and reactions" : "Може да се пишуваат пораки и рекции", + "Enable the microphone" : "Овозможи микрофон", + "Enable the camera" : "Овозможи камера", + "Share the screen" : "Споделување екран", + "Update permissions" : "Ажурирај дозволи", + "Updating permissions" : "Ажурирање на дозволи", + "Create poll" : "Креирај анкета", + "Question" : "Прашање", + "Ask a question" : "Постави прашање", + "Answers" : "Одговори", + "Answer {option}" : "Одговор {option}", + "Delete poll option" : "Избриши ја опцијата за анкета", + "Add answer" : "Додади одговор", + "Settings" : "Параметри", + "Multiple answers" : "Повеќе одговори", + "You voted for this option" : "Вие гласавте за оваа опција", + "End poll" : "Затвори анкета", + "Results" : "Резултати", + "Disable lobby" : "Оневозможи лоби", + "Settings for participant \"{user}\"" : "Параметри за учесникот \"{user}\"", + "Participant \"{user}\"" : "Учесник \"{user}\"", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гостин", + "{time} talking …" : "{time} зборува …", + "Raised their hand" : "Крена рака", + "Joined with video" : "Приклучи се со видео", + "Joined via phone" : "Приклучи се преку телефон", + "Joined with audio" : "Приклучи се со звук", + "Remove group and members" : "Избриши група и членови", + "Remove participant" : "Отстрани учесник", + "Notification was sent to {displayName}" : "Известување е испратено до {displayName}", + "Could not send notification to {displayName}" : "Неможе да се ипспрати известување до {displayName}", + "Permissions granted to {displayName}" : "Доделени дозволи на {displayName}", + "Could not modify permissions for {displayName}" : "Неможе да се променат дозволите на {displayName}", + "Permissions removed for {displayName}" : "Отстранети дозволи на {displayName}", + "Permissions set to default for {displayName}" : "Доделени стандардни дозволи на {displayName}", + "Demote from moderator" : "Деградирај од модератор", + "Promote to moderator" : "Промовирај во модератор", + "Resend invitation" : "Повторно испратете ги поканите", + "Send call notification" : "Испрати известување за повик", + "Grant all permissions" : "Додели ги сите дозволи", + "Remove all permissions" : "Отстрани ги сите дозволи", + "Remove" : "Отстрани ", + "Permissions modified for {displayName}" : "Дозволите на {displayName} се променети", + "Add users or groups" : "Add users or groups", + "Add users" : "Додади корисници", + "Add groups" : "Додади групи", + "Add other sources" : "Додади други извори", + "Add emails" : "Додади Е-пошти", + "Integrations" : "Интеграцијии", + "Add federated users" : "Додади федерални корисници", + "Searching …" : "Пребарување ...", + "Search for more users" : "Пребарувај повеќе корисници", + "Search or add participants" : "Барај или додади учесници", + "Invitation was sent to {actorId}" : "Покана е испратена до {actorId}", + "An error occurred while adding the participants" : "Настана грешка при обидот за додавање на учесници", + "Participants" : "Учесници", + "Participants ({count})" : "Учесници ({count})", + "Open chat" : "Започни разговор", + "You have new unread messages in the chat." : "Имате непрочитана порака во разговор.", + "You have been mentioned in the chat." : "Бевте споменати во разговор.", + "Chat" : "Разговор", + "Details" : "Детали", + "Shared items" : "Споделени предмети", + "No results found" : "Нема пронајдено резултати", + "Load more results" : "Вчитај повеќе резултати", + "Projects" : "Проекти", + "No shared items" : "Нема споделени предмети", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Линк до разговорот", + "Search conversations or users" : "Пребарување на разговори или корисници", + "Select conversation" : "Избери разговор", + "Edit display name" : "Иреди име", + "Save name" : "Зачувај име", + "Error while saving sounds setting" : "Грешка при зачувување на параметрите за звуци", + "Play sounds when participants join or leave a call" : "Репродуцирајте звуци кога учесниците се придружуваат или оставаат повик", + "Notification settings" : "Параметри за известување", + "Default language" : "Стандарден јазик", + "Select location for attachments" : "Избери локација за прилози", + "Error while setting attachment folder" : "Грешка при поставување на папка за прилози", + "Error while setting read status privacy" : "Грешка при зачувување на поставките за приватност", + "Privacy" : "Приватност", + "Attachments folder" : "Папка со прилози", + "Toggle full screen" : "Вклучи на цел екран", + "Search" : "Барај", + "Focus the chat input" : "Фокусирајте го курсорот на разговорот", + "Unfocus the chat input to use shortcuts" : "Отстранаете го курсорот од разговорот за да користите кратенки преку тастатура", + "Shortcuts while in a call" : "Кратенки за време на повик", + "Camera on and off" : "Вклучување и исклучување на камерата", + "Microphone on and off" : "Вклучување и исклучување на микрофонот", + "Raise or lower hand" : "Крени или спушти рака", + "Push to talk or push to mute" : "Притисни за разговор или притисни за занемување", + "Start call silently" : "Започни товок повик", + "Start call" : "Повик", + "You will be able to join the call only after a moderator starts it." : "Ќе може да се придружите на повикот само откако модераторот ќе го започне.", + "Send a reaction" : "Испрати реакција", + "React with {reaction}" : "Реагирај со {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n учесник во повикот","%n учесници во повикот"], + "You are not allowed to enable screensharing" : "Не сте овластени да го овозможите споделување на екранот", + "No screensharing" : "Нема споделување на екран", + "Screensharing options" : "Опции за споделување на екранот", + "Enable screensharing" : "Овозможи споделување на екранот", + "Bad sent video and screen quality." : "Лош квалитет на испратено видео и квалитет на екран.", + "Bad sent screen quality." : "Лош квалитет на испратен екран.", + "Bad sent video quality." : "Лош квалитет на испратено видео", + "Bad sent audio, video and screen quality." : "Лош квалитет на испратено аудио, видео и квалитет на екран.", + "Bad sent audio and screen quality." : "Лош квалитет на испратено аудио и квалитет на екран.", + "Bad sent audio and video quality." : "Лош квалитет на испратено аудио и видео.", + "Bad sent audio quality." : "Лош квалитет на испратено аудио", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да го видат вашиот екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат и видат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Disable screenshare" : "Оневозможи споделување на екранот", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат и видат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат.", + "Screen sharing is not supported by your browser." : "Споделување на екранот не е поддржано од вашиот пребарувач.", + "Screen sharing requires the page to be loaded through HTTPS." : "За безбедно споделување на екран треба да се поврзете преку безбедна врска HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "За безбедно споделување на екран треба да се поврзете преку безбедна врска HTTPS.", + "An error occurred while starting screensharing." : "Настана грешка при обидот за стартување на споделување на екранот.", + "Show your screen" : "Прикажи го вашиот екран", + "Stop screensharing" : "Запри споделување на екран", + "Mute others" : "Занеми ги останатите", + "Keep" : "Задржи", + "Select a region" : "Изберете регион", + "Search …" : "Пребарај ...", + "Message without mention" : "Пораки без спомнувања", + "Mention myself" : "Спомни се себеси", + "The conversation does not exist" : "Разговорот не постои", + "Join a conversation or start a new one!" : "Приклучи се кон разговор или започни нов!", + "Duplicate session" : "Дупликат сесија", + "Join a conversation or start a new one" : "Приклучи се кон разговор или започни нов", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud корисник", + "User password" : "Лозинка на корисник", + "Talk conversation" : "Talk раговор", + "Matrix server URL" : "Matrix сервер URL", + "User" : "Корисник", + "Matrix channel" : "Matrix канал", + "Bot user name" : "Име на ботот", + "Bot API key" : "API клуч за ботот", + "API token" : "API токен", + "Login" : "Login", + "Nickname" : "Прекар", + "Client ID" : "Клиент ИД", + "Media" : "Медија", + "Polls" : "Анкети", + "Voice messages" : "Говорни пораки", + "Locations" : "Локации", + "Audio" : "Аудио", + "Show all media" : "Прикажи ги сите медиа датотеки", + "Show all files" : "Прикажи ги сите датотеки", + "Show all polls" : "Прикажи ги сите анкети", + "Show all voice messages" : "Прикажи ги сите говорни пораки", + "Show all locations" : "Прикажи ги сите локации", + "Show all audio" : "Прикажи ги сите звуци", + "Show all other" : "Прикажи ги сите останати", + "Group" : "Група", + "Team" : "Тим", + "You: {lastMessage}" : "Ти: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Се обидувате да се приклучите на разговор додека имате активна сесија во друг прозорец или уред. Ова во моментов не е поддржано. Што сакаш да правиш?", + "Leave this page" : "Напушти ја оваа страна", + "Join here" : "Приклучи се овде", + "Post to a conversation" : "Објави во разговор", + "Post to conversation" : "Објава во разговор", + "An error occurred while posting location to conversation" : "Настана грешка при обид за објава на локација во разговор", + "Share to a conversation" : "Сподели во разговор", + "Share to conversation" : "Споделено во разговор", + "Error while clearing conversation history" : "Грешка при чистење на историјата во разговорот", + "Error occurred while allowing guests" : "Настана грешка при обидот за овозможување на гостите", + "Error occurred while disallowing guests" : "Настана грешка при обидот за оневозможување на гостите", + "Could not post message: {errorMessage}" : "Неможе да се испрати пораката: {errorMessage}", + "An error occurred while fetching the participants" : "Настана грешка при обидот за вчитување на учесниците", + "Could not send invitation to {actorId}" : "Неможе да се ипспрати покана до {actorId}", + "Invitations sent" : "Поканите се испратени", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "Настана грешка при гласање", + "An error occurred while ending the poll" : "Настана грешка при затварање на анкетата", + "Error while uploading file \"{fileName}\"" : "Грешка при прикачување на датотека \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Нема доволно простор за да се прикачи датотеката \"{fileName}\"", + "Error while sharing file" : "Грешка при споделување на датотека", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Прелистувачот што го користите не е целосно поддржан. Користете ја најновата верзија на Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "Later today – {timeLocale}" : "Денес покасно – {timeLocale}", + "Tomorrow – {timeLocale}" : "Утре – {timeLocale}", + "This weekend – {timeLocale}" : "Овој викенд – {timeLocale}", + "Next week – {timeLocale}" : "Следна недела – {timeLocale}", + "Message link copied to clipboard" : "Линкот до пораката е копиран во клипборд", + "Conversation link copied to clipboard" : "Линк до разговорот е копиран во клипборд", + "Error while parsing a PROPFIND error" : "Грешка при обработка на PROPFIND грешката", + "Please reload the page." : "Превчитајте ја страницата.", + "Do not disturb" : "Не вознемирувај", + "Away" : "Далеку", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Зборуваат {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Највероватно зборувавте додека вашиот микрофон е занемен (Mute), од-немете го микрофонот за да можете да бидете слушнати", + "Access to microphone & camera is only possible with HTTPS" : "Пристап до микрофонот и камерата е возможен само преку безбедноска врска HTTPS", + "Access to microphone & camera was denied" : "Нема пристап до микрофонот и камерата", + "WebRTC is not supported in your browser" : "Вашиот прелистувач не поддржува WebRTC", + "Please use a different browser like Firefox or Chrome" : "Користете друг прелистувач како Firefox или Chrome", + "Error while accessing microphone & camera" : "Грешка при пристап до микрофон и камера", + "%s Talk on your mobile devices" : "%s Разговор на вашиоте мобилни уреди", + "Join conversations at any time, anywhere, on any device." : "Придружете се на разговор во секое време, каде и да било, на кој било уред.", + "Android app" : "Android апликација", + "iOS app" : "iOS апликација", + "__language_name__" : "Македонски", + "Tasks" : "Задачи", + "Talk conversation for event" : "Talk разговор за настанот", + "Set reminder for later today" : "Постави потсетник за денес покасно", + "Set reminder for tomorrow" : "Постави потсетник за утре", + "Set reminder for this weekend" : "Постави потсетник за овој викенд", + "Set reminder for next week" : "Постави потсетник за наредната недела", + "Open poll • You voted already" : "Отворена анкета •Имате гласано", + "Open poll • Click to vote" : "Отворена анкета • Кликни за да гласаш", + "Poll • Ended" : "Анкета • Завршена", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати од анкетата • %n глас","Резултати од анкетата • %n гласови"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Отворена анкета • %n глас","Отворена анкета • %n гласови"], + "Submit vote" : "Гласај", + "Your privacy setting has been saved" : "Вашите поставки за приватност се зачувани", + "Failed to save sounds setting" : "Неуспешно зачувување на параметрите за звуци", + "Sounds setting saved" : "Параматрите за звуци се зачувани", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Се приклучивте на разговорот во друг прозорец или уред. Ова во моментов не е поддржано, па оваа сесија е затворена." +}, +"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;"); diff --git a/l10n/mk.json b/l10n/mk.json new file mode 100644 index 0000000..dc9016c --- /dev/null +++ b/l10n/mk.json @@ -0,0 +1,1016 @@ +{ "translations": { + "a conversation" : "разговор", + "(Duration %s)" : "(Времетраење %s)", + "You attended a call with {user1}" : "Присуствувавте на повик со {user1}", + "_%n guest_::_%n guests_" : ["1 гостин","%n гости"], + "You attended a call with {user1} and {user2}" : "Присуствувавте на повик со {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Присуствувавте на повик со {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Присуствувавте на повик со {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Присуствувавте на повик со {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["уште %n","%n други"], + "{actor} invited you to {call}" : "{actor} ве покани во {call}", + "You were invited to a conversation or had a call" : "Поканети сте во разговор или имате повик", + "Other activities" : "Други активности", + "Talk" : "Разговор", + "Guest" : "Гостин", + "## New in Talk %s" : "## Ново во Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Safari сега може да се користат за учество во аудио и видео повици", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Разговорите еден на еден сега се постојани и не можат повеќе случајно да се претвораат во групни разговори. Исто така, кога еден од учесниците го напушта разговорот, разговорот не се брише автоматски. Само ако двајцата учесници заминат, разговорот е избришан од серверот", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Сега можете да ги известите сите учесници со објавување на „@all“ во разговорот", + "- With the \"arrow-up\" key you can repost your last message" : "- Со копчето \"стрелка нагоре\" можете повторно да ја објавите вашата последна порака", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Разговорот сега може да има команди, испратете \"/help\" како порака во разговорот за да видите дали вашиот администратор конфигурирал некои", + "- With projects you can create quick links between conversations, files and other items" : "- Со проекти можете да создадете брзи врски помеѓу разговорите, датотеките и другите ставки", + "- You can now mention guests in the chat" : "- Сега можете да ги споменете гостите во разговорот", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговорите сега можат да имаат лоби. Ова ќе им овозможи на модераторите да се приклучат на разговорот и да се јават за да ја подготват средбата, додека корисниците и гостите треба да почекаат", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Сега можете директно да одговорите на пораките што им даваат на другите корисници поголем контекст за што се однесува вашата порака", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Пребарувањето разговори и учесници исто така ќе ги филтрира вашите постојни разговори, што ќе го олесни наоѓањето на претходните разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Сега можете да додавате кориснички кориснички групи во разговорите кога е инсталирана апликацијата кругови", + "- Check out the new grid and call view" : "- Проверете ја новата мрежа и прегледот на повикот", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Сега можете да испраќате и повлекувате датотеки директно од вашиот уред во разговорот", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Споделените датотеки сега се отвораат директно во погледот на разговор со апликациите за прегледување", + "- You can now search for chats and messages in the unified search in the top bar" : "- Сега можете да пребарувате разговори и пораки во унифицираното пребарување во горната лента", + "- Spice up your messages with emojis from the emoji picker" : "- Додадете емотикони на вашите пораки од бирачот на емотикони", + "- You can now change your camera and microphone while being in a call" : "- Сега можете да ги менувате камерата и микрофонот додека сте на повик", + "- Use a poll to collect the opinions of others or settle on a date" : "- Користи анкета за да го дознаете мислењето на другите или за да договорите датум", + "Talk updates ✅" : "Talk ажурирања ✅", + "Reaction deleted by author" : "Реакцијата е отстранета од авторот", + "{actor} created the conversation" : "{actor} креираше разговор", + "You created the conversation" : "Креиравте разговор", + "An administrator created the conversation" : "Администраторот креираше разговор", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} го преименува разговорот од \"%1$s\" во \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Го преименувавте разговорот од \"%1$s\" to \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администраторот го преименуваше разговорот од \"%1$s\" во \"%2$s\"", + "{actor} set the description" : "{actor} го постави описот", + "You set the description" : "Го поставивте описот", + "An administrator set the description" : "Администраторот го постави описот", + "{actor} removed the description" : "{actor} го избриша описот", + "You removed the description" : "Го избришавте описот", + "An administrator removed the description" : "Администраторот го избриша описот", + "You started a call" : "Стартувавте повик", + "{actor} started a call" : "{actor} стартуваше повик", + "{actor} joined the call" : "{actor} се приклучи кон ковикот", + "You joined the call" : "Се приклучивте кон повикот", + "{actor} left the call" : "{actor} го напушти повикот", + "You left the call" : "Го напуштивте повикот", + "{actor} unlocked the conversation" : "{actor} го одклучи разговорот", + "You unlocked the conversation" : "Го одклучивте разговорот", + "An administrator unlocked the conversation" : "Администраторот го отклучи разговорот", + "{actor} locked the conversation" : "{actor} го заклучи разговорот", + "You locked the conversation" : "Го заклучивте разговорот", + "An administrator locked the conversation" : "Администраторот го заклучи разговорот", + "{actor} limited the conversation to the current participants" : "{actor} го ограничи разговорот на сегашните учесници", + "You limited the conversation to the current participants" : "Оо ограничивте разговорот на сегашните учесници", + "An administrator limited the conversation to the current participants" : "Администраторот го ограничи разговорот на сегашните учесници", + "{actor} opened the conversation to registered users" : "{actor} го отвори разговорот за регистрирани корисници", + "You opened the conversation to registered users" : "Го отворивте разговорот за регистрирани корисници", + "An administrator opened the conversation to registered users" : "Администраторот го отвори разговорот за регистрирани корисници", + "The conversation is now open to everyone" : "Разговорот сега е отворен за сите", + "{actor} opened the conversation to everyone" : "{actor} го отвори разговорот за сите", + "You opened the conversation to everyone" : "Го отворивте разговорот за сите", + "{actor} restricted the conversation to moderators" : "{actor} го ограничи разговорот само на модератори", + "You restricted the conversation to moderators" : "Го ограничивте разговорот само на модератори", + "{actor} allowed guests" : "{actor} овозможи гости", + "You allowed guests" : "Овозможивте гости", + "An administrator allowed guests" : "Администраторот овозможи гости", + "{actor} disallowed guests" : "{actor} забрани гости", + "You disallowed guests" : "Забранивте гости", + "An administrator disallowed guests" : "Администраторот оневозможи гости", + "{actor} set a password" : "{actor} постави лозинка", + "You set a password" : "Поставивте лозинка", + "An administrator set a password" : "Администраторот постави лозинка", + "{actor} removed the password" : "{actor} ја отстрани лозинката", + "You removed the password" : "Ја отстранивте лозинката", + "An administrator removed the password" : "Администраторот ја избриша лозинката", + "{actor} added {user}" : "{actor} го додаде {user}", + "You joined the conversation" : "Се приклучивте кон разговорот", + "{actor} joined the conversation" : "{actor} се приклучи кон разговорот", + "You added {user}" : "Го додадовте {user}", + "{actor} added you" : "{actor} ве додаде", + "An administrator added you" : "Администраторот ве додаде", + "An administrator added {user}" : "Администраторот го додаде {user}", + "You left the conversation" : "Го напуштивте разговорот", + "{actor} left the conversation" : "{actor} го напушти разговорот", + "{actor} removed {user}" : "{actor} го отстрани {user}", + "You removed {user}" : "го отстранивте {user}", + "{actor} removed you" : "{actor} ве отстрани", + "An administrator removed you" : "Администраторот ве отстрани", + "An administrator removed {user}" : "Администраторот го отстрани {user}", + "{federated_user} accepted the invitation" : "{federated_user} ја прифати поканата", + "{actor} removed {federated_user}" : "{actor} го отстрани {federated_user}", + "You removed {federated_user}" : "го отстранивте {federated_user}", + "An administrator removed {federated_user}" : "Администраторот го отстрани {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} ја одби поканата", + "{actor} added group {group}" : "{actor} додаде група {group}", + "You added group {group}" : "Додадовте група {group}", + "An administrator added group {group}" : "Администраторот додаде група {group}", + "{actor} removed group {group}" : "{actor} отстрани група {group}", + "You removed group {group}" : "Отстранивте {group}", + "An administrator removed group {group}" : "Администраторот отстрани група {group}", + "{actor} promoted {user} to moderator" : "{actor} го промовираше {user} во модератор", + "You promoted {user} to moderator" : "Го промовиравте {user} во модератор", + "{actor} promoted you to moderator" : "{actor} ве промовираше во модератор", + "An administrator promoted you to moderator" : "Администраторот ве промовирање во модератор", + "An administrator promoted {user} to moderator" : "Администраторот го промовираше {user} во модератор", + "{actor} demoted {user} from moderator" : "{actor} го деградираше {user} од модератор", + "You demoted {user} from moderator" : "Го деградиравте {user} од модератор", + "{actor} demoted you from moderator" : "{actor} те деградираше од модератор", + "An administrator demoted you from moderator" : "Администраторот ве деградираше од модератор", + "An administrator demoted {user} from moderator" : "Администраторот го деградираше {user} од модератор", + "{actor} shared a file which is no longer available" : "{actor} сподели датотека која не е достапна повеќе", + "You shared a file which is no longer available" : "Споделивте датотека која не е достапна повеќе", + "The shared location is malformed" : "Споделената локација е погрешно зададена", + "{actor} deleted a message" : "{actor} избриша порака", + "You deleted a message" : "Избришавте порака", + "{actor} deleted a reaction" : "{actor} избриша реакција", + "You deleted a reaction" : "Избришавте реакциј", + "{actor} ended the poll {poll}" : "{actor} ја затвори анкетата {poll}", + "You ended the poll {poll}" : "Ја затворивте анкетата {poll}", + "Someone voted on the poll {poll}" : "Некој гласаше на анкетата {poll}", + "Message deleted by author" : "Пораката е избришана од авторот", + "Deleted user" : "Избришан корисник", + "Administration" : "Администрација", + "System" : "Систем", + "%s (guest)" : "%s (гостин)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} го заврши повикот со 1 гостин (Времетраење {duration})","{actor} го заврши повикот со %n гости (Времетраење {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} го заврши повикот со {user1} (Времетраење {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} го заврши повикот со {user1} и {user2} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2 } и {user3} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2}, {user3} и {user4} (Времетраење {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} го заврши повикот со {user1}, {user2}, {user3}, {user4} и {user5} (Времетраење {duration})", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Разговор со %s", + "File not found" : "Датотеката не е пронајдена", + "File is not shared, or shared but not with the user" : "Датотеката не е споделена, или е споделена но не со корисници", + "No account available to delete." : "Нема сметка достапна за бришење.", + "Poll" : "Анкета", + "No image file provided" : "Не е доставена фотографија или датотека", + "File is too big" : "Датотеката е премногу голема", + "Invalid file provided" : "Доставена е невалидна датотека", + "Invalid image" : "Невалидна фотографија", + "Unknown filetype" : "Непознат тип на датотека", + "Talk mentions" : "Спомнувања", + "Say hi to your friends and colleagues!" : "Кажи им здраво на твојте пријатели и колеги!", + "No unread mentions" : "Нема непрочитани спомнувања", + "Call in progress" : "Повик е во тек", + "You were mentioned" : "Споменати сте", + "Write to conversation" : "Пишивајте во разговорот", + "Writes event information into a conversation of your choice" : "Напишете информации за настанот во разговорот по ваш избор", + "Conversation invitation" : "Покана за разговор", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Истотака можете да се приклучите преку телефон со следниве детали", + "Dial-in information" : "Информации", + "Meeting ID" : "ID на средба", + "Your PIN" : "Вашиот ПИН", + "Meeting" : "Средба", + "Password request: %s" : "Барање за лозинка: %s", + "Private conversation" : "Приватен разговор", + "Deleted user (%s)" : "Избришан корисник (%s)", + "Dismiss notification" : "Отфрли известување", + "Accept" : "Прифати", + "Decline" : "Одбиј", + "New message" : "Нова порака", + "Reminder" : "Потсетник", + "Notification" : "Известување", + "Reminder: You in {call}" : "Потсетник: Вие во {call}", + "Reminder: {user} in {call}" : "Потсетник: {user} во {call}", + "Reminder: Deleted user in {call}" : "Потсетник: Избришан корисник во {call}", + "Reminder: {guest} (guest) in {call}" : "Потсетник: {guest} (гостин) во {call}", + "Reminder: Guest in {call}" : "Потсетник: гостин во {call}", + "{user} in {call}" : "{user} во {call}", + "Deleted user in {call}" : "Избришан корисник во {call}", + "{guest} (guest) in {call}" : "{guest} (guest) во {call}", + "Guest in {call}" : "Гостин во {call}", + "{user} sent you a private message" : "{user} ви испрати приватна порака", + "{user} sent a message in conversation {call}" : "{user} ви испрати порака во разговорот {call}", + "A deleted user sent a message in conversation {call}" : "Избришан корисник ви испрати порака во разговорот {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) ви испрати порака во разговорот {call}", + "A guest sent a message in conversation {call}" : "гостин ви испрати порака во разговорот {call}", + "{user} replied to your private message" : "{user} одговори на вашата приватна порака", + "{user} replied to your message in conversation {call}" : "{user} одговори на вашата порака во разговорот {call}", + "A deleted user replied to your message in conversation {call}" : "Избришан корисник одговори на вашата порака во разговорот {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) одговори на вашата порака во разговорот {call}", + "A guest replied to your message in conversation {call}" : "Гостин одговори на вашата порака во разговорот {call}", + "Reminder: You in private conversation {call}" : "Потсетник: Вие во приватен разговор {call}", + "Reminder: A deleted user in private conversation {call}" : "Потсетник: Избришан корисник во приватен разговор {call}", + "Reminder: {user} in private conversation" : "Потсетник: {user} во приватен разговор", + "Reminder: You in conversation {call}" : "Потсетник: Вие во разговор {call}", + "Reminder: {user} in conversation {call}" : "Потсетник: {user} во разговор {call}", + "Reminder: A deleted user in conversation {call}" : "Reminder: Избришан корисник во разговор {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Потсетник: {guest} (гостин) во разговор {call}", + "Reminder: A guest in conversation {call}" : "Потсетник: Гостин во разговор {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) реагираше со {reaction} на вашата порака во повикот {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gostin реагираше со {reaction} на вашата порака во повикот {call}", + "{user} mentioned you in a private conversation" : "{user} те спомна во приватен разговор", + "{user} mentioned you in conversation {call}" : "{user} те спомна во разговор {call}", + "A deleted user mentioned you in conversation {call}" : "Избришан корисник те спомна во разговор {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) те спомна во разговор {call}", + "A guest mentioned you in conversation {call}" : "Гостин те спомна во разговор {call}", + "Dismiss reminder" : "Избриши потсетник", + "View chat" : "Погледнете го разговорот", + "{user} invited you to a group conversation: {call}" : "{user} те покани на групен разговор: {call}", + "Join call" : "Приклучи се кон повикот", + "Answer call" : "Одговори на повикот", + "{user} would like to talk with you" : "{user} сака да разговара со вас", + "Call back" : "Јавете се назад", + "You missed a call from {user}" : "Имате пропуштен повик од {user}", + "A group call has started in {call}" : "Започна групен повик {call}", + "You missed a group call in {call}" : "Имате пропуштен групен повик во {call}", + "{email} is requesting the password to access {file}" : "{email} побара лозинка за пристап до {file}", + "{email} tried to request the password to access {file}" : "{email} побара лозинка за да пристапи до {file}", + "Someone is requesting the password to access {file}" : "Некој побара лозинка за да пристапи до {file}", + "Someone tried to request the password to access {file}" : "Некој се обиде да побара лозинка за да пристапи до {file}", + "Open settings" : "Отвори параметри", + "The hosted signaling server is now configured and will be used." : "Signaling сервер е конфигуриран и сега ќе се користи.", + "The hosted signaling server was removed and will not be used anymore." : "Signaling серверот е избришан и нема да се користи повеќе.", + "error" : "грешка", + "Contact via Talk" : "Разговор", + "Open Talk" : "Започни разговор", + "Default" : "Стандардно", + "Presentation" : "Презентација", + "Conversations" : "Разговори", + "{user}" : "{user}", + "Messages" : "Пораки", + "{user} in {conversation}" : "{user} во {conversation}", + "Messages in other conversations" : "Пораки во други разговори", + "Avatar image is not square" : "Сликата за Аватар не е квадратна", + "Room {number}" : "Соба {number}", + "Other" : "Останато", + "Something unexpected happened." : "Се случи нешто неочекувано.", + "The URL is invalid." : "Невалидна URL адреса.", + "An HTTPS URL is required." : "Потебна е HTTPS URL.", + "The email address is invalid." : "Невалидна е-пошта.", + "The language is invalid." : "Невалиден јазик.", + "The country is invalid." : "Невалидна држава.", + "Something unexpected happened. Please try again later." : "Се случи нешто неочекувано. Обидете се покасно.", + "Andorra" : "Андора", + "United Arab Emirates" : "Обединети Арапски Емирати", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигва и Барбуда", + "Anguilla" : "Ангила", + "Albania" : "Албанија", + "Armenia" : "Ерменија", + "Angola" : "Ангола", + "Antarctica" : "Антарктик", + "Argentina" : "Аргентина", + "American Samoa" : "Американска Самоа", + "Austria" : "Австрија", + "Australia" : "Австралија", + "Aruba" : "Аруба", + "Åland Islands" : "Оландски острови", + "Azerbaijan" : "Азербејџан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгија", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Бугарија", + "Bahrain" : "Бахреин", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Свети Вартоломеј", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Брунеј", + "Bolivia, Plurinational State of" : "Боливија, Повеќенационална Држава", + "Bonaire, Sint Eustatius and Saba" : "Бонер, Свети Евстахиј и Саба", + "Brazil" : "Бразил", + "Bahamas" : "Бахами", + "Bhutan" : "Бутан", + "Bouvet Island" : "Остров Буве", + "Botswana" : "Боцвана", + "Belarus" : "Белорусија", + "Belize" : "Белизе", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосови Острови", + "Congo, the Democratic Republic of the" : "Конго, Демократска Република", + "Central African Republic" : "Централна Африканска Република", + "Congo" : "Конго", + "Switzerland" : "Швајцарија", + "Côte d'Ivoire" : "Брегот на Слоновата Коска", + "Cook Islands" : "Кукови Острови", + "Chile" : "Чиле", + "Cameroon" : "Камерун", + "China" : "Кина", + "Colombia" : "Колумбија", + "Costa Rica" : "Костарика", + "Cuba" : "Куба", + "Cabo Verde" : "Зелен ’Рт", + "Curaçao" : "Курасао", + "Christmas Island" : "Божиќен Остров", + "Cyprus" : "Кипар", + "Czechia" : "Чешка", + "Germany" : "Германија", + "Djibouti" : "Џибути", + "Denmark" : "Данска", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска Република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонија", + "Egypt" : "Египет", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритреја", + "Spain" : "Шпанија", + "Ethiopia" : "Етиопија", + "Finland" : "Финска", + "Fiji" : "Фиџи", + "Falkland Islands (Malvinas)" : "Фолкландски Острови", + "Micronesia, Federated States of" : "Микронезија, Сојузни Држави", + "Faroe Islands" : "Фарски Острови", + "France" : "Франција", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Кралство на Велика Британија и Северна Ирска", + "Grenada" : "Гренада", + "Georgia" : "Грузија", + "French Guiana" : "Француска Гвајана", + "Guernsey" : "Гернзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамбија", + "Guinea" : "Гвинеја", + "Guadeloupe" : "Гваделуп", + "Equatorial Guinea" : "Екваторијална Гвинеја", + "Greece" : "Грција", + "South Georgia and the South Sandwich Islands" : "Јужна Џорџија и Јужни Сендвички Острови", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинеја-Бисао", + "Guyana" : "Гвајана", + "Hong Kong" : "Хонгконг", + "Heard Island and McDonald Islands" : "Островите Хард и Мекдоналдс", + "Honduras" : "Хондурас", + "Croatia" : "Хрватска", + "Haiti" : "Хаити", + "Hungary" : "Унгарија", + "Indonesia" : "Индонезија", + "Ireland" : "Ирска", + "Israel" : "Израел", + "Isle of Man" : "Остров Ман", + "India" : "Индија", + "British Indian Ocean Territory" : "Британска Индоокеанска Територија", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран, Исламска Република", + "Iceland" : "Исланд", + "Italy" : "Италија", + "Jersey" : "Џерси", + "Jamaica" : "Јамајка", + "Jordan" : "Јордан", + "Japan" : "Јапонија", + "Kenya" : "Кенија", + "Kyrgyzstan" : "Киргистан", + "Cambodia" : "Камбоџа", + "Kiribati" : "Кирибати", + "Comoros" : "Коморски Острови", + "Saint Kitts and Nevis" : "Свети Кристофер и Невис", + "Korea, Democratic People's Republic of" : "Кореја, Демократска Народна Република", + "Korea, Republic of" : "Кореја, Република", + "Kuwait" : "Кувајт", + "Cayman Islands" : "Кајмански Острови", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаошка Народна Демократска Република", + "Lebanon" : "Либан", + "Saint Lucia" : "Света Луција", + "Liechtenstein" : "Лихтенштајн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерија", + "Lesotho" : "Лесото", + "Lithuania" : "Литванија", + "Luxembourg" : "Луксембург", + "Latvia" : "Летонија", + "Libya" : "Либија", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдавија, Република", + "Montenegro" : "Црна Гора", + "Saint Martin (French part)" : "Свети Мартин (остров)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалски Острови", + "North Macedonia" : "Македонија", + "Mali" : "Мали", + "Myanmar" : "Мјанмар", + "Mongolia" : "Монголија", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северни Маријански Острови", + "Martinique" : "Мартиник", + "Mauritania" : "Мавританија", + "Montserrat" : "Монтсерат", + "Malta" : "Малта", + "Mauritius" : "Маврициус", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малезија", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибија", + "New Caledonia" : "Нова Каледонија", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолшки Остров", + "Nigeria" : "Нигерија", + "Nicaragua" : "Никарагва", + "Netherlands" : "Холандија", + "Norway" : "Норвешка", + "Nepal" : "Непал", + "Nauru" : "Република Науру", + "Niue" : "Ниуе", + "New Zealand" : "Нов Зеланд", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Француска Полинезија", + "Papua New Guinea" : "Папуа Нова Гвинеја", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Полска", + "Saint Pierre and Miquelon" : "Свети Пјер и Микелон", + "Pitcairn" : "Питкерн", + "Puerto Rico" : "Порто Рико", + "Palestine, State of" : "Држава Палестина", + "Portugal" : "Португалија", + "Palau" : "Република Палау", + "Paraguay" : "Парагвај", + "Qatar" : "Катар", + "Réunion" : "Реинион", + "Romania" : "Романија", + "Serbia" : "Србија", + "Russian Federation" : "Руска Федерација", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудиска Арабија", + "Solomon Islands" : "Соломонски острови", + "Seychelles" : "Сејшели", + "Sudan" : "Судан", + "Sweden" : "Шведска", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Елена, Вознесение и Тристан да Куња", + "Slovenia" : "Словенија", + "Svalbard and Jan Mayen" : "Свалбард и Јан Мејн\n ", + "Slovakia" : "Словачка", + "Sierra Leone" : "Сиера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалија", + "Suriname" : "Суринам", + "South Sudan" : "Јужен Судан", + "Sao Tome and Principe" : "Сао Томе и Принсипе", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Свети Мартин (Холандија)", + "Syrian Arab Republic" : "Сириска Арапска Република", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Туркс и Кајкос", + "Chad" : "Чад", + "French Southern Territories" : "Француски Јужни и Антарктички Земји", + "Togo" : "Того", + "Thailand" : "Тајланд", + "Tajikistan" : "Таџикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Тимор-Лест", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Tonga", + "Turkey" : "Турција", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Таиван, Провинција на Кина", + "Tanzania, United Republic of" : "Обединета Република Танзанија", + "Ukraine" : "Украина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Мали оддалечени острови на САД", + "United States of America" : "Соединетите Американски Држави", + "Uruguay" : "Уругвај", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Света столица", + "Saint Vincent and the Grenadines" : "Свети Винцент и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела, Боливарска република", + "Virgin Islands, British" : "Девствени Острови, Британски", + "Virgin Islands, U.S." : "Девствени Острови, Обединети Држави", + "Viet Nam" : "Социјалистичка Република Виетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Валис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Јемен", + "Mayotte" : "Мајот", + "South Africa" : "Јужна Африка", + "Zambia" : "Замбија", + "Zimbabwe" : "Зимбабве", + "Federation" : "Федерација", + "Error: Server did not respond with proper JSON" : "Грешка: Серверот не одговори со соодветна JSON", + "Error: Server responded with: {error}" : "Грешка: Серверот одговори со: {error}", + "Error: Unknown error occurred" : "Грешка: Се појави непозната грешка", + "SIP configuration" : "SIP конфигурација", + "Invalid date, date format must be YYYY-MM-DD" : "Невалиден датум, форматот мора да биде ГГГГ-ММ-ДД", + "Conversation not found" : "Разговорот не е пронајден", + "Chat, video & audio-conferencing using WebRTC" : "Разговор, видео и аудио конференција со користење на WebRTC", + "Leave call" : "Напушти го повикот", + "Stay in call" : "Остани во повикот", + "Discuss this file" : "Дискусија за оваа датотека", + "Share this file with others to discuss it" : "Сподели ја оваа датотека со другите за да дискутирате за неа", + "Share this file" : "Сподели ја оваа датотека", + "Join conversation" : "Приклучи се на разговорот", + "This conversation is password-protected." : "Овој разговор е заштитен со лозинка.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Детектирани се повеќе неуспешни најавувања од вашата IP адреса. Затоа вашиот следен обид за најавување е одложено за 30 секунди.", + "The password is wrong. Try again." : "Лозинката е погрешна. Обидите се повторно.", + "Password" : "Лозинка", + "Submit" : "Испрати", + "Error requesting the password." : "Грешка при барање на лозинка", + "Request password" : "Барање на лозинка", + "This conversation has ended" : "Овој разговор е завршен", + "Everyone" : "Сите", + "Users and moderators" : "Корисници и модератори", + "Moderators only" : "Само модераторите", + "Disable calls" : "Оневозможи повици", + "Save changes" : "Зачувај ги промените", + "Saving …" : "Зачувува ...", + "Saved!" : "Зачувано!", + "Limit to groups" : "Ограничување на групи", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Кога една група е избрана, само корисниците на таа група можат да бидат дел од разговорот.", + "Guests can still join public conversations." : "Гостите сеуште можат да се приклучат кон јавните разговори.", + "Limit using Talk" : "Ограничи користење на Talk", + "Limit creating a public and group conversation" : "Ограничи креирање на јавни и групни разговори", + "Limit creating conversations" : "Ограничи креирање на разговори", + "Limit starting a call" : "Ограничи започнување на повик", + "Limit starting calls" : "Ограничи започнување на повик", + "When a call has started, everyone with access to the conversation can join the call." : "Кога повикот е започнат, секој со пристап до разговорот може да се приклучи кон повикот.", + "Enabled" : "Овозможено", + "Disabled" : "Оневозможен", + "State" : "Статус", + "Name" : "Име", + "Last error" : "Последна грешка", + "Beta" : "Бета", + "Permissions" : "Дозволи", + "All messages" : "Сите пораки", + "@-mentions only" : "само @-спомнување ", + "Off" : "Исклучени", + "General settings" : "Општи параметри", + "Default notification settings" : "Стандардни поставки за известување", + "Default group notification" : "Стандардни групни известувања", + "Default group notification for new groups" : "Стандардни групни известувања за нови групи", + "Integration into other apps" : "Интеграција со други апликации", + "Allow conversations on files" : "Дозволи разговор на датотеките", + "Allow conversations on public shares for files" : "Дозволи разговор на јавно споделените датотеки", + "Enable encryption" : "Овозможи енкрипција", + "Pending" : "Чекање", + "Error" : "Грешка", + "Blocked" : "Блокирани", + "Active" : "Активно", + "Expired" : "Истечен", + "Never" : "Никогаш", + "URL of this Nextcloud instance" : "URL од оваа Nextcloud истанца", + "Language" : "Јазик", + "Country" : "Држава", + "Status" : "Статус", + "Created at" : "Создадено на", + "Expires at" : "Истекува на", + "Limits" : "Ограничувања", + "Yes" : "Да", + "No" : "Не", + "_%n user_::_%n users_" : ["1 корисник","%n корисници"], + "Installed version: {version}" : "Инсталирана верзија: {version}", + "Downloading …" : "Преземање ...", + "Install Talk Matterbridge" : "Инсталирај мост интеграција", + "Matterbridge integration" : "Мост интеграција", + "Enable Matterbridge integration" : "Овозможи мост интеграција", + "Status: Checking connection" : "Статус: Проверка на врската", + "OK: Running version: {version}" : "OK: Стартувана верзија: {version}", + "Delete this server" : "Избриши го овој сервер", + "Test this server" : "Тестирај го овој сервер", + "STUN server URL" : "STUN сервер URL", + "STUN servers" : "STUN сервери", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "TURN server URL" : "TURN сервер URL", + "TURN servers" : "TURN сервери", + "Failed" : "Неуспешно", + "OK" : "Добро", + "Checking …" : "Проверка ...", + "Federated user" : "Федерален корисник", + "Create rooms" : "Креирај соби", + "Confirm" : "Потврди", + "Reset" : "Ресетирање", + "Room {roomNumber}" : "Соба {roomNumber}", + "Cancel" : "Откажи", + "Back" : "Назад", + "Add participant \"{user}\"" : "Додади учесник \"{user}\"", + "Now" : "Сега", + "Loading …" : "Се вчитува…", + "From" : "Од", + "To" : "До", + "Calendar" : "Календар", + "Attendees" : "Присутни", + "Save" : "Зачувај", + "Search participants" : "Барај учесници", + "No results" : "Нема резултати", + "Done" : "Готово", + "Exit full screen (F)" : "Излез од цел екран (F)", + "Full screen (F)" : "Приказ на цел екран (F)", + "Speaker view" : "Поглед на тој што зборува", + "Grid view" : "Мрежа", + "This conversation is read-only" : "Разговорот е само за читање", + "Connecting …" : "Поврзување ...", + "Waiting for others to join the call …" : "Чекање на останатите да се приклучат кон повикот ...", + "You can invite others in the participant tab of the sidebar" : "Можете да поканите други учесници во картичката за учесници во страничната лента", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете да поканите други учесници во картичката за учесници во страничната лента или да ја споделите оваа врска за да поканите други учесници!", + "Share this link to invite others!" : "Споделете ја оваа врска за да поканите други учесници!", + "Copy link" : "Копирај линк", + "Mute audio" : "Занеми (Mute) аудио", + "Mute audio (M)" : "Занеми (Mute) го аудиото (М)", + "Unmute audio" : "Одзанеми (Unmute) го аудиото", + "Unmute audio (M)" : "Одзанеми (Unmute) го аудиото (М)", + "None" : "Ништо", + "Access to camera was denied" : "Нема пристап до камерата", + "Error while accessing camera" : "Грешка при пристап до камера", + "You have been muted by a moderator" : "Администраторот ве занеми", + "You are not allowed to enable video" : "Не сте овластени да го овозможите видеото", + "Disable video" : "Оневозможи видео", + "Disable video (V)" : "Овозможи видео (V)", + "Enable video" : "Овозможи видео", + "Enable video (V)" : "Оневозможи видео (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Овозможи видео (V) - Вашата врска ќе биде кратко прекината при овозможување на видеото за прв пат", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Овозможи видео. Вашата врска ќе биде кратко прекината при овозможување на видеото за прв пат", + "You" : "Ти", + "Mute" : "Занеми", + "Muted" : "Занемен", + "Show screen" : "Прикажи екран", + "Connection could not be established …" : "Врската неможе да се воспостави ...", + "Collapse" : "Собери", + "You need to be logged in to upload files" : "Треба да бидете најавени за да можете да прикачите датотеки", + "Drop your files to upload" : "Повлечи датотеки за да прикачите", + "Scroll to bottom" : "Скролај до долу", + "Favorite" : "Омилени", + "Date:" : "Датум:", + "Note:" : "Белешка:", + "Hide details" : "Сокриј детали", + "Show details" : "Прикажи детали", + "Edit conversation name" : "Уреди име на разговор", + "Edit conversation description" : "Уреди опис на разговор", + "Enter a description for this conversation" : "Внесете опис за овој разговор", + "Picture" : "Слика", + "Disable" : "Оневозможи", + "Enable" : "Овозможи", + "Choose" : "Избери", + "The file must be a PNG or JPG" : "Датотеката мора да биде PNG или JPG", + "Set picture" : "Постави слика", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Уреди ги стандардните дозволи за учесниците во овој разговор. Овие параметри не влијаат на модераторите.", + "All permissions" : "Сите дозволи", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учесниците имаат дозвола да започнат повик, да се придружуваат на повик, да овозможат аудио и видео и да споделуваат екран.", + "Restricted" : "Ограничена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учесниците може да се придружуваат на повици, но не можат да овозможат аудио или видео, ниту да споделуваат екран додека модераторот рачно не им даде дозвола.", + "Edit permissions" : "Уреди дозволи", + "Conversation settings" : "Параметри за разговор", + "Basic Info" : "Основни информации", + "Personal" : "Лично", + "Danger zone" : "Опасна зона", + "Leave conversation" : "Напушти разговор", + "Delete conversation" : "Избриши разговор", + "Do you really want to delete \"{displayName}\"?" : "Дали навистина сакате да го избришете \"{displayName}\"?", + "Delete all chat messages" : "Избришете ги сите пораки од разгоровот", + "Be careful, these actions cannot be undone." : "Бидете внимателни, овие дејства не можат да повратат.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Откако ќе излезете од разговорот, за повторно да се придружите на затворен разговор, потребна е покана. На отворен разговор може повторно да се придружите во секое време.", + "Permanently delete this conversation." : "Трајно избришете го овој разговор", + "Delete chat messages" : "Избришете ги пораките од разгоровот", + "Permanently delete all the messages in this conversation." : "Трајно избришете ги сите пораки во овој разговор.", + "_%n hour_::_%n hours_" : ["1 час","%n часа"], + "_%n day_::_%n days_" : ["1 ден","%n дена"], + "_%n week_::_%n weeks_" : ["1 недела","%n недели"], + "Password protection" : "Заштитено со лозинка", + "Set a password" : "Постави лозинка", + "Change password" : "Смени лозинка", + "Save password" : "Зачувај лозинка", + "Resend invitations" : "Повторно испратете ги поканите", + "Start time (optional)" : "Време на почеток (опционално)", + "Lock conversation" : "Заклучи разговор", + "Edit" : "Уреди", + "More information" : "Повеќе информации", + "Delete" : "Избриши", + "Log content" : "Содржина на записот", + "Notifications" : "Известувања", + "Notify about calls in this conversation" : "Извести ме за повиците во овој разговор", + "Join" : "Приклучи се", + "Error while creating the conversation" : "Грешка при креирање на разговор", + "Create a new conversation" : "Креирај нов разговор", + "Create conversation" : "Креирајте разговор", + "Enter your name" : "Внесете го вашето име", + "Mark as read" : "Означи како прочитано", + "Mark as unread" : "Означи како непрочитано", + "Remove from favorites" : "Отстрани од фаворити", + "Add to favorites" : "Додади во фаворити", + "You need to promote a new moderator before you can leave the conversation." : "Треба да промовирате нов модератор пред да го напуштите разговорот.", + "Conversation actions" : "Дејства за разговорот", + "Home" : "Дома", + "Unread" : "Непрочитана", + "Alphabetically" : "Азбучно", + "No matches found" : "Не се пронајдени совпаѓања", + "No conversations found" : "Нема пронајдено разговори", + "An error occurred while performing the search" : "Настана грешка при обидот за пребарување", + "Unread messages" : "Непрочитани пораки", + "Clear filter" : "Исчисти филтри", + "Users" : "Корисници", + "Groups" : "Групи", + "Teams" : "Тимови", + "Other sources" : "Други извори", + "No search results" : "Нема резултати од пребарувањето", + "Users and groups" : "Корисници и групи", + "You are currently waiting in the lobby" : "Моментално чекате во лобито", + "Select microphone" : "Избери микрофон", + "No microphone available" : "Нема микрофон", + "Select camera" : "Избери камера", + "No camera available" : "Нема камера", + "Select a device" : "Избери уред", + "Devices" : "Уреди", + "No audio" : "Нема аудио", + "No camera" : "Нема камера", + "Calls are not supported in your browser" : "Повици не се поддржани од вашиот прелистувач", + "Access to microphone is only possible with HTTPS" : "Пристап до микрофонот е возможен само преку безбедноска врска HTTPS", + "Access to microphone was denied" : "Нема пристап до микрофонот", + "Error while accessing microphone" : "Грешка при пристап до микрофон", + "Access to camera is only possible with HTTPS" : "Пристап до камерата е возможен само преку безбедноска врска HTTPS", + "Invalid path selected" : "Избрана невалидна патека", + "Blur" : "Замаглување", + "Upload" : "Прикачи", + "Files" : "Датотеки", + "24 hours" : "24 часа", + "Clear reminder – {timeLocale}" : "Избришан потсетник – {timeLocale}", + "Message text copied to clipboard" : "Пораката е копирана во клипборд", + "A reminder was successfully removed" : "Потсетникот е успешно избришан", + "A reminder was successfully set at {datetime}" : "Успешно е поставен потсетник во {datetime}", + "Error occurred when creating a reminder" : "Настана грешка при обид за поставување потсетник", + "Reply" : "Одговор", + "More actions" : "Повеќе акции", + "Set reminder" : "Постави потсетник", + "Edit message" : "Уреди порака", + "Copy message link" : "Копирај линк на пораката", + "Go to file" : "Оди до датотеката", + "Forward message" : "Препрати порака", + "Translate" : "Преведи", + "Set custom reminder" : "Постави прилагоден потсетник", + "Choose a conversation to forward the selected message." : "Избери разговор за да препратите избраната порака.", + "Error while forwarding message" : "Грешка при препраќање на пораката", + "The message has been forwarded to {selectedConversationName}" : "Пораката е препратена до {selectedConversationName}", + "Dismiss" : "Отфрли", + "Send now" : "Испрати сега", + "Message sent" : "Пораката е испратена", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} во {board}", + "Open poll" : "Отворена анкета", + "See results" : "Vidi rezultati", + "No messages" : "Нема пораки", + "Unpin" : "Од-ппинувај", + "Create a new group conversation" : "Креирајте нов групен разговор", + "Add participants" : "Додади учесници", + "Allow guests to join via link" : "Дозволи им на гостите да се приклучат преку линк", + "This conversation has been locked" : "Разговорот е заклучен", + "No permission to post messages in this conversation" : "Немате дозвола да испратите порака во овој разговор", + "Send message" : "Испрати порака", + "File to share" : "Датотека за споделување", + "Add emoji" : "Додади емотикон", + "Send later" : "Испрати покасно", + "Cancel editing" : "Откажи уредување", + "Share from {nextcloud}" : "Сподели од {nextcloud}", + "Share from Files" : "Сподели од датотеките", + "Share files to the conversation" : "Сподели датотеки во разговорот", + "Upload from device" : "Прикачи од уред", + "Create new poll" : "Направи анкета", + "Record voice message" : "Сними гласовна порака", + "End recording and send" : "Заврши снимање и испрати", + "Dismiss recording" : "Отфрли снимање", + "Error while recording audio" : "Грешка при снимање звук", + "New file" : "Нова датотека", + "Blank" : "Празно", + "Create and share a new file" : "Креирај и сподели датотека", + "Create file" : "Креирај датотека", + "Someone is typing …" : "Некој пишува …", + "{user1} is typing …" : "{user1} пишува …", + "{user1} and {user2} are typing …" : "{user1} и {user2} пишуваат …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} пишуваат …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и %n друг пишуваат …","{user1}, {user2}, {user3} и %n други пишуваат …"], + "Add more files" : "Додади повеќе датотеки", + "Send" : "Испрати", + "In this conversation {user} can:" : "Во овој разговор {user} може:", + "Edit default permissions for participants in {conversationName}" : "Уреди ги стандардните дозволи за учесниците во {conversationName}", + "Start a call" : "Повик", + "Skip the lobby" : "Прескокни го лобито", + "Can post messages and reactions" : "Може да се пишуваат пораки и рекции", + "Enable the microphone" : "Овозможи микрофон", + "Enable the camera" : "Овозможи камера", + "Share the screen" : "Споделување екран", + "Update permissions" : "Ажурирај дозволи", + "Updating permissions" : "Ажурирање на дозволи", + "Create poll" : "Креирај анкета", + "Question" : "Прашање", + "Ask a question" : "Постави прашање", + "Answers" : "Одговори", + "Answer {option}" : "Одговор {option}", + "Delete poll option" : "Избриши ја опцијата за анкета", + "Add answer" : "Додади одговор", + "Settings" : "Параметри", + "Multiple answers" : "Повеќе одговори", + "You voted for this option" : "Вие гласавте за оваа опција", + "End poll" : "Затвори анкета", + "Results" : "Резултати", + "Disable lobby" : "Оневозможи лоби", + "Settings for participant \"{user}\"" : "Параметри за учесникот \"{user}\"", + "Participant \"{user}\"" : "Учесник \"{user}\"", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гостин", + "{time} talking …" : "{time} зборува …", + "Raised their hand" : "Крена рака", + "Joined with video" : "Приклучи се со видео", + "Joined via phone" : "Приклучи се преку телефон", + "Joined with audio" : "Приклучи се со звук", + "Remove group and members" : "Избриши група и членови", + "Remove participant" : "Отстрани учесник", + "Notification was sent to {displayName}" : "Известување е испратено до {displayName}", + "Could not send notification to {displayName}" : "Неможе да се ипспрати известување до {displayName}", + "Permissions granted to {displayName}" : "Доделени дозволи на {displayName}", + "Could not modify permissions for {displayName}" : "Неможе да се променат дозволите на {displayName}", + "Permissions removed for {displayName}" : "Отстранети дозволи на {displayName}", + "Permissions set to default for {displayName}" : "Доделени стандардни дозволи на {displayName}", + "Demote from moderator" : "Деградирај од модератор", + "Promote to moderator" : "Промовирај во модератор", + "Resend invitation" : "Повторно испратете ги поканите", + "Send call notification" : "Испрати известување за повик", + "Grant all permissions" : "Додели ги сите дозволи", + "Remove all permissions" : "Отстрани ги сите дозволи", + "Remove" : "Отстрани ", + "Permissions modified for {displayName}" : "Дозволите на {displayName} се променети", + "Add users or groups" : "Add users or groups", + "Add users" : "Додади корисници", + "Add groups" : "Додади групи", + "Add other sources" : "Додади други извори", + "Add emails" : "Додади Е-пошти", + "Integrations" : "Интеграцијии", + "Add federated users" : "Додади федерални корисници", + "Searching …" : "Пребарување ...", + "Search for more users" : "Пребарувај повеќе корисници", + "Search or add participants" : "Барај или додади учесници", + "Invitation was sent to {actorId}" : "Покана е испратена до {actorId}", + "An error occurred while adding the participants" : "Настана грешка при обидот за додавање на учесници", + "Participants" : "Учесници", + "Participants ({count})" : "Учесници ({count})", + "Open chat" : "Започни разговор", + "You have new unread messages in the chat." : "Имате непрочитана порака во разговор.", + "You have been mentioned in the chat." : "Бевте споменати во разговор.", + "Chat" : "Разговор", + "Details" : "Детали", + "Shared items" : "Споделени предмети", + "No results found" : "Нема пронајдено резултати", + "Load more results" : "Вчитај повеќе резултати", + "Projects" : "Проекти", + "No shared items" : "Нема споделени предмети", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Линк до разговорот", + "Search conversations or users" : "Пребарување на разговори или корисници", + "Select conversation" : "Избери разговор", + "Edit display name" : "Иреди име", + "Save name" : "Зачувај име", + "Error while saving sounds setting" : "Грешка при зачувување на параметрите за звуци", + "Play sounds when participants join or leave a call" : "Репродуцирајте звуци кога учесниците се придружуваат или оставаат повик", + "Notification settings" : "Параметри за известување", + "Default language" : "Стандарден јазик", + "Select location for attachments" : "Избери локација за прилози", + "Error while setting attachment folder" : "Грешка при поставување на папка за прилози", + "Error while setting read status privacy" : "Грешка при зачувување на поставките за приватност", + "Privacy" : "Приватност", + "Attachments folder" : "Папка со прилози", + "Toggle full screen" : "Вклучи на цел екран", + "Search" : "Барај", + "Focus the chat input" : "Фокусирајте го курсорот на разговорот", + "Unfocus the chat input to use shortcuts" : "Отстранаете го курсорот од разговорот за да користите кратенки преку тастатура", + "Shortcuts while in a call" : "Кратенки за време на повик", + "Camera on and off" : "Вклучување и исклучување на камерата", + "Microphone on and off" : "Вклучување и исклучување на микрофонот", + "Raise or lower hand" : "Крени или спушти рака", + "Push to talk or push to mute" : "Притисни за разговор или притисни за занемување", + "Start call silently" : "Започни товок повик", + "Start call" : "Повик", + "You will be able to join the call only after a moderator starts it." : "Ќе може да се придружите на повикот само откако модераторот ќе го започне.", + "Send a reaction" : "Испрати реакција", + "React with {reaction}" : "Реагирај со {reaction}", + "_%n participant in call_::_%n participants in call_" : ["%n учесник во повикот","%n учесници во повикот"], + "You are not allowed to enable screensharing" : "Не сте овластени да го овозможите споделување на екранот", + "No screensharing" : "Нема споделување на екран", + "Screensharing options" : "Опции за споделување на екранот", + "Enable screensharing" : "Овозможи споделување на екранот", + "Bad sent video and screen quality." : "Лош квалитет на испратено видео и квалитет на екран.", + "Bad sent screen quality." : "Лош квалитет на испратен екран.", + "Bad sent video quality." : "Лош квалитет на испратено видео", + "Bad sent audio, video and screen quality." : "Лош квалитет на испратено аудио, видео и квалитет на екран.", + "Bad sent audio and screen quality." : "Лош квалитет на испратено аудио и квалитет на екран.", + "Bad sent audio and video quality." : "Лош квалитет на испратено аудио и видео.", + "Bad sent audio quality." : "Лош квалитет на испратено аудио", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да го видат вашиот екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве гледаат.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат и видат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео додека правите споделување на екранот.", + "Disable screenshare" : "Оневозможи споделување на екранот", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат и видат. За да ја подобрите ситуацијата, обидете се да го оневозможите вашето видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Вашата интернет-врска или компјутер се зафатени и другите учесници можеби нема да можат да ве разберат.", + "Screen sharing is not supported by your browser." : "Споделување на екранот не е поддржано од вашиот пребарувач.", + "Screen sharing requires the page to be loaded through HTTPS." : "За безбедно споделување на екран треба да се поврзете преку безбедна врска HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "За безбедно споделување на екран треба да се поврзете преку безбедна врска HTTPS.", + "An error occurred while starting screensharing." : "Настана грешка при обидот за стартување на споделување на екранот.", + "Show your screen" : "Прикажи го вашиот екран", + "Stop screensharing" : "Запри споделување на екран", + "Mute others" : "Занеми ги останатите", + "Keep" : "Задржи", + "Select a region" : "Изберете регион", + "Search …" : "Пребарај ...", + "Message without mention" : "Пораки без спомнувања", + "Mention myself" : "Спомни се себеси", + "The conversation does not exist" : "Разговорот не постои", + "Join a conversation or start a new one!" : "Приклучи се кон разговор или започни нов!", + "Duplicate session" : "Дупликат сесија", + "Join a conversation or start a new one" : "Приклучи се кон разговор или започни нов", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud корисник", + "User password" : "Лозинка на корисник", + "Talk conversation" : "Talk раговор", + "Matrix server URL" : "Matrix сервер URL", + "User" : "Корисник", + "Matrix channel" : "Matrix канал", + "Bot user name" : "Име на ботот", + "Bot API key" : "API клуч за ботот", + "API token" : "API токен", + "Login" : "Login", + "Nickname" : "Прекар", + "Client ID" : "Клиент ИД", + "Media" : "Медија", + "Polls" : "Анкети", + "Voice messages" : "Говорни пораки", + "Locations" : "Локации", + "Audio" : "Аудио", + "Show all media" : "Прикажи ги сите медиа датотеки", + "Show all files" : "Прикажи ги сите датотеки", + "Show all polls" : "Прикажи ги сите анкети", + "Show all voice messages" : "Прикажи ги сите говорни пораки", + "Show all locations" : "Прикажи ги сите локации", + "Show all audio" : "Прикажи ги сите звуци", + "Show all other" : "Прикажи ги сите останати", + "Group" : "Група", + "Team" : "Тим", + "You: {lastMessage}" : "Ти: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Се обидувате да се приклучите на разговор додека имате активна сесија во друг прозорец или уред. Ова во моментов не е поддржано. Што сакаш да правиш?", + "Leave this page" : "Напушти ја оваа страна", + "Join here" : "Приклучи се овде", + "Post to a conversation" : "Објави во разговор", + "Post to conversation" : "Објава во разговор", + "An error occurred while posting location to conversation" : "Настана грешка при обид за објава на локација во разговор", + "Share to a conversation" : "Сподели во разговор", + "Share to conversation" : "Споделено во разговор", + "Error while clearing conversation history" : "Грешка при чистење на историјата во разговорот", + "Error occurred while allowing guests" : "Настана грешка при обидот за овозможување на гостите", + "Error occurred while disallowing guests" : "Настана грешка при обидот за оневозможување на гостите", + "Could not post message: {errorMessage}" : "Неможе да се испрати пораката: {errorMessage}", + "An error occurred while fetching the participants" : "Настана грешка при обидот за вчитување на учесниците", + "Could not send invitation to {actorId}" : "Неможе да се ипспрати покана до {actorId}", + "Invitations sent" : "Поканите се испратени", + "{guest} (guest)" : "{guest} (guest)", + "An error occurred while submitting your vote" : "Настана грешка при гласање", + "An error occurred while ending the poll" : "Настана грешка при затварање на анкетата", + "Error while uploading file \"{fileName}\"" : "Грешка при прикачување на датотека \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Нема доволно простор за да се прикачи датотеката \"{fileName}\"", + "Error while sharing file" : "Грешка при споделување на датотека", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Прелистувачот што го користите не е целосно поддржан. Користете ја најновата верзија на Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "Later today – {timeLocale}" : "Денес покасно – {timeLocale}", + "Tomorrow – {timeLocale}" : "Утре – {timeLocale}", + "This weekend – {timeLocale}" : "Овој викенд – {timeLocale}", + "Next week – {timeLocale}" : "Следна недела – {timeLocale}", + "Message link copied to clipboard" : "Линкот до пораката е копиран во клипборд", + "Conversation link copied to clipboard" : "Линк до разговорот е копиран во клипборд", + "Error while parsing a PROPFIND error" : "Грешка при обработка на PROPFIND грешката", + "Please reload the page." : "Превчитајте ја страницата.", + "Do not disturb" : "Не вознемирувај", + "Away" : "Далеку", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Зборуваат {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Највероватно зборувавте додека вашиот микрофон е занемен (Mute), од-немете го микрофонот за да можете да бидете слушнати", + "Access to microphone & camera is only possible with HTTPS" : "Пристап до микрофонот и камерата е возможен само преку безбедноска врска HTTPS", + "Access to microphone & camera was denied" : "Нема пристап до микрофонот и камерата", + "WebRTC is not supported in your browser" : "Вашиот прелистувач не поддржува WebRTC", + "Please use a different browser like Firefox or Chrome" : "Користете друг прелистувач како Firefox или Chrome", + "Error while accessing microphone & camera" : "Грешка при пристап до микрофон и камера", + "%s Talk on your mobile devices" : "%s Разговор на вашиоте мобилни уреди", + "Join conversations at any time, anywhere, on any device." : "Придружете се на разговор во секое време, каде и да било, на кој било уред.", + "Android app" : "Android апликација", + "iOS app" : "iOS апликација", + "__language_name__" : "Македонски", + "Tasks" : "Задачи", + "Talk conversation for event" : "Talk разговор за настанот", + "Set reminder for later today" : "Постави потсетник за денес покасно", + "Set reminder for tomorrow" : "Постави потсетник за утре", + "Set reminder for this weekend" : "Постави потсетник за овој викенд", + "Set reminder for next week" : "Постави потсетник за наредната недела", + "Open poll • You voted already" : "Отворена анкета •Имате гласано", + "Open poll • Click to vote" : "Отворена анкета • Кликни за да гласаш", + "Poll • Ended" : "Анкета • Завршена", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати од анкетата • %n глас","Резултати од анкетата • %n гласови"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Отворена анкета • %n глас","Отворена анкета • %n гласови"], + "Submit vote" : "Гласај", + "Your privacy setting has been saved" : "Вашите поставки за приватност се зачувани", + "Failed to save sounds setting" : "Неуспешно зачувување на параметрите за звуци", + "Sounds setting saved" : "Параматрите за звуци се зачувани", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Се приклучивте на разговорот во друг прозорец или уред. Ова во моментов не е поддржано, па оваа сесија е затворена." +},"pluralForm" :"nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;" +} \ No newline at end of file diff --git a/l10n/mn.js b/l10n/mn.js new file mode 100644 index 0000000..fe793dd --- /dev/null +++ b/l10n/mn.js @@ -0,0 +1,2162 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "яриа", + "(Duration %s)" : "(Үргэлжлэх хугацаа %s)", + "You attended a call with {user1}" : "Та {user1}-тай дуудлагад оролцлоо", + "_%n guest_::_%n guests_" : ["%n зочин","%n зочин"], + "You attended a call with {user1} and {user2}" : "Та {user1} болон {user2}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2} and {user3}" : "Та {user1}, {user2} болон {user3}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Та {user1}, {user2}, {user3} болон {user4}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Та {user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлагад оролцлоо", + "_%n other_::_%n others_" : ["%n бусад","%n бусад"], + "{actor} invited you to {call}" : "{actor} таныг {call} руу урилаа", + "You were invited to a conversation or had a call" : "Та ярианд уригдсан эсвэл дуудлагад оролцсон", + "Other activities" : "Бусад үйл ажиллагаа", + "Talk" : "Talk", + "Guest" : "–ó–æ—á–∏–Ω", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud Talk-д тавтай морил!\nЭнэ яриан дотор Nextcloud Talk-д нэмэгдсэн шинэ боломжуудын талаар мэдээлэл авах болно.", + "## New in Talk %s" : "## Talk %s-д шинээр", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge болон Safari хөтчүүдийг ашиглан аудио, видео дуудлагад оролцох боломжтой болсон", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Хоёр хүний яриа одоо тогтмол бөгөөд санамсаргүйгээр бүлгийн яриа болж хувирахгүй. Мөн нэг оролцогч яриаг орхисон ч яриа автоматаар устахгүй. Зөвхөн хоёр оролцогч хоёулаа орхивол серверээс устгагдана", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Та одоо чатад \"@all\" гэж бичээд бүх оролцогчдод мэдэгдэл илгээх боломжтой", + "- With the \"arrow-up\" key you can repost your last message" : "- \"Дээш сум\" товчийг ашиглан сүүлийн мессежээ дахин илгээх боломжтой", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk одоо тушаалуудтай болсон, администратор тохируулсан эсэхийг шалгахын тулд чатад \"/help\" гэж бичээрэй", + "- With projects you can create quick links between conversations, files and other items" : "- Төслүүдийн тусламжтай яриа, файл болон бусад зүйлсийн хооронд хурдан холбоос үүсгэх боломжтой", + "- You can now mention guests in the chat" : "- Та одоо чатад зочдыг дурдаж болно", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Яриа одоо хүлээлгийн өрөөтэй байж болно. Энэ нь модераторуудад уулзалтад бэлтгэхийн тулд чат болон дуудлагад нэгдэх боломж олгох бөгөөд хэрэглэгчид болон зочид хүлээх шаардлагатай", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Та одоо мессежүүдэд шууд хариулж, бусад хэрэглэгчдэд таны мессеж юуны тухай болохыг ойлгуулах боломжтой", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Яриа болон оролцогчдыг хайхад одоо таны одоо байгаа яриануудыг мөн шүүх бөгөөд өмнөх яриануудыг олоход илүү хялбар болсон", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Circles апп суулгасан үед яриануудад хэрэглэгчийн тусгай бүлгүүд нэмэх боломжтой болсон", + "- Check out the new grid and call view" : "- Шинэ торон болон дуудлагын харагдацыг үзээрэй", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Та одоо төхөөрөмжөөсөө файлуудыг шууд чат руу байршуулах эсвэл чирж хаях боломжтой", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Хуваалцсан файлууд одоо үзэгч аппуудын тусламжтай чатын харагдацын дотор шууд нээгддэг", + "- You can now search for chats and messages in the unified search in the top bar" : "- Та одоо дээд мөрний нэгдсэн хайлтаар чат болон мессежүүдийг хайх боломжтой", + "- Spice up your messages with emojis from the emoji picker" : "- Эможи сонгогчоос эможи ашиглан мессежээ сайхан болго", + "- You can now change your camera and microphone while being in a call" : "- Та одоо дуудлагын үеэр камер болон микрофоноо солих боломжтой", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Ярианд тайлбар нэмж контекст өгөөд, нэвтэрсэн хэрэглэгчид олж, өөрсдөө нэгдэх боломжтой болго", + "- See a read status and send failed messages again" : "- Уншсан төлвийг харах ба илгээхэд алдаатай мессежүүдийг дахин илгээ", + "- Raise your hand in a call with the R key" : "- R товчийг дарж дуудлагад гараа өргө", + "- Join the same conversation and call from multiple devices" : "- Нэг яриа болон дуудлагад олон төхөөрөмжөөс нэгд", + "- Send voice messages, share your location or contact details" : "- Дуут мессеж илгээ, байршил эсвэл холбоо барих мэдээллээ хуваалц", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Яриад бүлгүүд нэмээд, шинэ бүлгийн гишүүд автоматаар оролцогчоор нэмэгдэнэ", + "- A preview of your audio and video is shown before joining a call" : "- Дуудлагад нэгдэхийн өмнө таны аудио болон видеоны урьдчилсан харагдац харуулагдана", + "- You can now blur your background in the newly designed call view" : "- Та одоо шинэ загварын дуудлагын харагдацад арын дэвсгэрээ бүдэгрүүлж болно", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторууд одоо оролцогчдод ерөнхий болон хувийн зөвшөөрлүүд олгох боломжтой", + "- You can now react to chat messages" : "- Та одоо чат мессежүүдэд хариу үйлдэл үзүүлж болно", + "- In the sidebar you can now find an overview of the latest shared items" : "- Хажуугийн самбараас хамгийн сүүлд хуваалцсан зүйлсийн тоймыг олох боломжтой болсон", + "- Use a poll to collect the opinions of others or settle on a date" : "- Бусдын санал бодлыг цуглуулах эсвэл огноо тохирохын тулд санал асуулга ашигла", + "- Configure an expiration time for chat messages" : "- Чат мессежүүдийн дуусах хугацааг тохируул", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Том яриануудад бусдад мэдэгдэхгүйгээр дуудлага эхлүүлээрэй. Дуудлага эхэлсний дараа тус тусад нь дуудлагын мэдэгдэл илгээх боломжтой.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Яаралтай биш бол хүлээн авагчдад мэдэгдэхгүйгээр чат мессеж илгээ", + "- Emojis can now be autocompleted by typing a \":\"" : "- \":\" бичиж эможи автоматаар гүйцээгдэх боломжтой болсон", + "- Link various items using the new smart-picker by typing a \"/\"" : "- \"/\" бичиж шинэ ухаалаг сонгогчийг ашиглан янз бүрийн зүйлсийг холбо", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модераторууд одоо салангид өрөөнүүд үүсгэх боломжтой (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Дуудлагуудыг одоо бичиж болно (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Conversations can now have an avatar or emoji as icon" : "- Яриа одоо аватар эсвэл эможи дүрс тэмдэгтэй байж болно", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Видео дуудлагад бүдэг арын дэвсгэрээс гадна виртуал арын дэвсгэр одоо боломжтой болсон", + "- Reactions are now available during calls" : "- Хариу үйлдэл дуудлагын үеэр одоо боломжтой", + "- Typing indicators show which users are currently typing a message" : "- Бичиж байгаа заагч нь ямар хэрэглэгчид мессеж бичиж байгааг харуулна", + "- Groups can now be mentioned in chats" : "- Бүлгүүдийг одоо чатад дурдах боломжтой", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Хэрэв хуулбарлах үйлчилгээ үзүүлэгч апп бүртгэгдсэн бол дуудлагын бичлэгүүд автоматаар хуулбарлагдана", + "- Chat messages can be translated if a translation provider app is registered" : "- Хэрэв орчуулгын үйлчилгээ үзүүлэгч апп бүртгэгдсэн бол чат мессежүүдийг орчуулах боломжтой", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown**-ыг одоо _чат_ мессежүүдэд ашиглах боломжтой", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Бот хэрэгжүүлэхийн тулд Webhook одоо боломжтой болсон. Дэлгэрэнгүй мэдээллийг баримт бичгээс үзнэ үү https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Дараа нь дахин мэдэгдэл авахын тулд чат мессежид сануулга тавь", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Өөртөө тэмдэглэл** яриаг ашиглан тэмдэглэл хөтөлж, төхөөрөмжүүдийн хооронд мэдээлэл хуваалцаарай", + "- Captions allow to send a message with a file at the same time" : "- Тайлбар нь файлтай хамт мессеж илгээх боломжийг олгодог", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Дэлгэц хуваалцаж байх үед илтгэгчийн видео одоо харагдах бөгөөд дуудлагын хариу үйлдлүүд хөдөлгөөнт болсон", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Нэвтэрсэн зохиогчид болон модераторууд мессежийг 6 цагийн турш засварлах боломжтой болсон", + "- Unsent message drafts are now saved in your browser" : "- Илгээгээгүй мессежийн ноорог одоо таны хөтөчид хадгалагдана", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текст чатыг одоо бусад Talk серверүүдтэй холбогдсон хэлбэрээр хийх боломжтой", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модераторууд одоо бүртгэлүүд болон зочдыг яриад дахин нэгдэхээс сэргийлж хориглох боломжтой", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Холбогдсон календарын үйл явдлуудаас удахгүй болох дуудлагууд болон ажлаас гадуур орлогчдыг одоо яриануудад харуулдаг", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Дуудлагуудыг одоо бусад Talk серверүүдтэй холбогдсон хэлбэрээр хийх боломжтой (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows, macOS болон Linux-д зориулсан Nextcloud Talk ширээний клиентийг танилцуулж байна: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud Assistant-ийн тусламжтай дуудлагын бичлэгүүд болон уншаагүй мессежүүдийг нэгтгэн хураангуйла", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- И-мэйл хаягаар урьсан зочдыг таних, оролцогчдын жагсаалт импортлох, санал асуулгын ноорог болон дуудлагын оролцогчдын жагсаалт татах зэргээр уулзалтуудыг сайжруулсан", + "- Archive conversations to stay focused" : "- Төвлөрөхийн тулд яриануудыг архивла", + "- Schedule a meeting into your calendar from within a conversation" : "- Ярианы дотроос календартаа уулзалт товло", + "- Search for messages of the current conversation directly in the right sidebar" : "- Одоогийн ярианы мессежүүдийг баруун хажуугийн самбараас шууд хайх", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Шинэ шахмал жагсаалтаар илүү олон яриаг нэг харцаар харах (Talk тохиргооноос идэвхжүүлнэ үү)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Уулзалтын яриа одоо календараас гарчиг болон тайлбарыг синхрончилж, эхлэх цаг ойртох хүртэл хайлтын шүүлтүүрээр нуугдана", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Мэдэгдлийн тохиргоонд яриануудыг нууцлалтай гэж тэмдэглэж, ярианы жагсаалт болон мэдэгдлүүдээс мессежийн агуулгыг нуу", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- \"Бүү саад бол\" горимын үед push мэдэгдэл хүлээн авахын тулд яриануудыг чухал гэж тэмдэглэ", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Шинэ бүлгийн дуудлагыг шууд үүсгэхийн тулд хоёр хүний дуудлагад бусад оролцогчдыг нэм", + "- Use threads to keep your chat and discussions organized" : "- Чат болон хэлэлцүүлгээ зохион байгуулалттай байлгахын тулд thread ашигла", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Дуудлагын үеэр шууд хуулбарлалт одоо боломжтой болсон (live-transcription ExApp болон Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Moderators can now pin messages so they are kept at the top" : "- Модераторууд зурвасуудыг дээд хэсэгт бэхлэх боломжтой болсон", + "- Schedule a message to send it at a later time" : "- Зурвасыг дараа илгээхээр товлох", + "_All %n participant_::_All %n participants_" : ["Бүх %n оролцогч","Бүх %n оролцогч"], + "Reaction deleted by author" : "Хариу үйлдэл зохиогчоор устгагдсан", + "{actor} created the conversation" : "{actor} яриаг үүсгэсэн", + "You created the conversation" : "Та яриаг үүсгэсэн", + "System created the conversation" : "Систем яриаг үүсгэсэн", + "An administrator created the conversation" : "Администратор яриаг үүсгэсэн", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Та ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "{actor} set the description" : "{actor} тайлбарыг тохируулсан", + "You set the description" : "Та тайлбарыг тохируулсан", + "An administrator set the description" : "Администратор тайлбарыг тохируулсан", + "{actor} removed the description" : "{actor} тайлбарыг устгасан", + "You removed the description" : "Та тайлбарыг устгасан", + "An administrator removed the description" : "Администратор тайлбарыг устгасан", + "You started a silent call" : "Та чимээгүй дуудлага эхлүүлсэн", + "Outgoing silent call" : "Гарах чимээгүй дуудлага", + "{actor} started a silent call" : "{actor} чимээгүй дуудлага эхлүүлсэн", + "Incoming silent call" : "Ирж буй чимээгүй дуудлага", + "You started a call" : "Та дуудлага эхлүүлсэн", + "Outgoing call" : "Гарах дуудлага", + "{actor} started a call" : "{actor} дуудлага эхлүүлсэн", + "Incoming call" : "Ирж буй дуудлага", + "{actor} joined the call" : "{actor} дуудлагад нэгдсэн", + "You joined the call" : "Та дуудлагад нэгдсэн", + "{actor} left the call" : "{actor} дуудлагаас гарсан", + "You left the call" : "Та дуудлагаас гарсан", + "{actor} unlocked the conversation" : "{actor} яриаг тайлсан", + "You unlocked the conversation" : "Та яриаг тайлсан", + "An administrator unlocked the conversation" : "Администратор яриаг тайлсан", + "{actor} locked the conversation" : "{actor} яриаг түгжсэн", + "You locked the conversation" : "Та яриаг түгжсэн", + "An administrator locked the conversation" : "Администратор яриаг түгжсэн", + "{actor} limited the conversation to the current participants" : "{actor} яриаг одоогийн оролцогчдоор хязгаарласан", + "You limited the conversation to the current participants" : "Та яриаг одоогийн оролцогчдоор хязгаарласан", + "An administrator limited the conversation to the current participants" : "Администратор яриаг одоогийн оролцогчдоор хязгаарласан", + "{actor} opened the conversation to registered users" : "{actor} яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "You opened the conversation to registered users" : "Та яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "An administrator opened the conversation to registered users" : "Администратор яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "You opened the conversation to registered users and users created with the Guests app" : "Та яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "The conversation is now open to everyone" : "Яриа одоо бүгдэд нээлттэй", + "{actor} opened the conversation to everyone" : "{actor} яриаг бүгдэд нээсэн", + "You opened the conversation to everyone" : "Та яриаг бүгдэд нээсэн", + "{actor} restricted the conversation to moderators" : "{actor} яриаг модераторуудаар хязгаарласан", + "You restricted the conversation to moderators" : "Та яриаг модераторуудаар хязгаарласан", + "{actor} started breakout rooms" : "{actor} салангид өрөөнүүдийг эхлүүлсэн", + "You started breakout rooms" : "Та салангид өрөөнүүдийг эхлүүлсэн", + "{actor} stopped breakout rooms" : "{actor} салангид өрөөнүүдийг зогсоосон", + "You stopped breakout rooms" : "Та салангид өрөөнүүдийг зогсоосон", + "{actor} allowed guests" : "{actor} зочдыг зөвшөөрсөн", + "You allowed guests" : "Та зочдыг зөвшөөрсөн", + "An administrator allowed guests" : "Администратор зочдыг зөвшөөрсөн", + "{actor} disallowed guests" : "{actor} зочдыг хориглосон", + "You disallowed guests" : "Та зочдыг хориглосон", + "An administrator disallowed guests" : "Администратор зочдыг хориглосон", + "{actor} set a password" : "{actor} нууц үг тохируулсан", + "You set a password" : "Та нууц үг тохируулсан", + "An administrator set a password" : "Администратор нууц үг тохируулсан", + "{actor} removed the password" : "{actor} нууц үгийг устгасан", + "You removed the password" : "Та нууц үгийг устгасан", + "An administrator removed the password" : "Администратор нууц үгийг устгасан", + "{actor} added {user}" : "{actor} {user}-ыг нэмсэн", + "You joined the conversation" : "Та яриад нэгдсэн", + "{actor} joined the conversation" : "{actor} яриад нэгдсэн", + "You added {user}" : "Та {user}-ыг нэмсэн", + "{actor} added you" : "{actor} таныг нэмсэн", + "An administrator added you" : "Администратор таныг нэмсэн", + "An administrator added {user}" : "Администратор {user}-ыг нэмсэн", + "You left the conversation" : "Та яриаг орхисон", + "{actor} left the conversation" : "{actor} яриаг орхисон", + "{actor} removed {user}" : "{actor} {user}-ыг хассан", + "You removed {user}" : "Та {user}-ыг хассан", + "{actor} removed you" : "{actor} таныг хассан", + "An administrator removed you" : "Администратор таныг хассан", + "An administrator removed {user}" : "Администратор {user}-ыг хассан", + "{actor} invited {federated_user}" : "{actor} {federated_user}-ыг урисан", + "You invited {federated_user}" : "Та {federated_user}-ыг урисан", + "You accepted the invitation" : "Та урилгыг зөвшөөрсөн", + "{actor} invited you" : "{actor} таныг урисан", + "An administrator invited you" : "Администратор таныг урисан", + "An administrator invited {federated_user}" : "Администратор {federated_user}-ыг урисан", + "{federated_user} accepted the invitation" : "{federated_user} урилгыг зөвшөөрсөн", + "{actor} removed {federated_user}" : "{actor} {federated_user}-ыг хассан", + "You removed {federated_user}" : "Та {federated_user}-ыг хассан", + "You declined the invitation" : "Та урилгаас татгалзсан", + "An administrator removed {federated_user}" : "Администратор {federated_user}-ыг хассан", + "{federated_user} declined the invitation" : "{federated_user} урилгаас татгалзсан", + "{actor} added group {group}" : "{actor} {group} бүлгийг нэмсэн", + "You added group {group}" : "Та {group} бүлгийг нэмсэн", + "An administrator added group {group}" : "Администратор {group} бүлгийг нэмсэн", + "{actor} removed group {group}" : "{actor} {group} бүлгийг хассан", + "You removed group {group}" : "Та {group} бүлгийг хассан", + "An administrator removed group {group}" : "Администратор {group} бүлгийг хассан", + "{actor} added team {circle}" : "{actor} {circle} багийг нэмсэн", + "You added team {circle}" : "Та {circle} багийг нэмсэн", + "An administrator added team {circle}" : "Администратор {circle} багийг нэмсэн", + "{actor} removed team {circle}" : "{actor} {circle} багийг хассан", + "You removed team {circle}" : "Та {circle} багийг хассан", + "An administrator removed team {circle}" : "Администратор {circle} багийг хассан", + "{actor} added {phone}" : "{actor} {phone}-ыг нэмсэн", + "You added {phone}" : "Та {phone}-ыг нэмсэн", + "An administrator added {phone}" : "Администратор {phone}-ыг нэмсэн", + "{actor} removed {phone}" : "{actor} {phone}-ыг хассан", + "You removed {phone}" : "Та {phone}-ыг хассан", + "An administrator removed {phone}" : "Администратор {phone}-ыг хассан", + "{actor} promoted {user} to moderator" : "{actor} {user}-ыг модератор болгосон", + "You promoted {user} to moderator" : "Та {user}-ыг модератор болгосон", + "{actor} promoted you to moderator" : "{actor} таныг модератор болгосон", + "An administrator promoted you to moderator" : "Администратор таныг модератор болгосон", + "An administrator promoted {user} to moderator" : "Администратор {user}-ыг модератор болгосон", + "{actor} demoted {user} from moderator" : "{actor} {user}-ыг модератор эрхээс хассан", + "You demoted {user} from moderator" : "Та {user}-ыг модератор эрхээс хассан", + "{actor} demoted you from moderator" : "{actor} таныг модератор эрхээс хассан", + "An administrator demoted you from moderator" : "Администратор таныг модератор эрхээс хассан", + "An administrator demoted {user} from moderator" : "Администратор {user}-ыг модератор эрхээс хассан", + "{actor} shared a file which is no longer available" : "{actor} хүчингүй болсон файл хуваалцсан", + "You shared a file which is no longer available" : "Та хүчингүй болсон файл хуваалцсан", + "File shares are currently not supported in federated conversations" : "Файл хуваалцах нь федерац ярианд одоогоор дэмжигдэхгүй байна", + "The shared location is malformed" : "Хуваалцсан байршил буруу форматтай байна", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} энэ яриаг бусад чатуудтай синхрончлохын тулд Matterbridge тохируулсан", + "You set up Matterbridge to synchronize this conversation with other chats" : "Та энэ яриаг бусад чатуудтай синхрончлохын тулд Matterbridge тохируулсан", + "{actor} created thread {title}" : "{actor} {title} thread үүсгэсэн", + "You created thread {title}" : "Та {title} thread үүсгэсэн", + "{actor} renamed thread {title}" : "{actor} {title} thread-ийн нэрийг өөрчилсөн", + "You renamed thread {title}" : "Та {title} thread-ийн нэрийг өөрчилсөн", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge тохиргоог шинэчилсэн", + "You updated the Matterbridge configuration" : "Та Matterbridge тохиргоог шинэчилсэн", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge тохиргоог устгасан", + "You removed the Matterbridge configuration" : "Та Matterbridge тохиргоог устгасан", + "{actor} started Matterbridge" : "{actor} Matterbridge-г эхлүүлсэн", + "You started Matterbridge" : "Та Matterbridge-г эхлүүлсэн", + "{actor} stopped Matterbridge" : "{actor} Matterbridge-г зогсоосон", + "You stopped Matterbridge" : "Та Matterbridge-г зогсоосон", + "{actor} deleted a message" : "{actor} мессеж устгасан", + "You deleted a message" : "Та мессеж устгасан", + "{actor} edited a message" : "{actor} мессеж засварласан", + "You edited a message" : "Та мессеж засварласан", + "{actor} pinned a message" : "{actor} мессеж бэхэлсэн", + "You pinned a message" : "Та мессеж бэхэлсэн", + "{actor} unpinned a message" : "{actor} мессеж бэхлэлтийг тайлсан", + "Message was automatically unpinned" : "Мессежийн бэхлэлт автоматаар тайлагдсан", + "You unpinned a message" : "Та мессеж бэхлэлтийг тайлсан", + "{actor} deleted a reaction" : "{actor} хариу үйлдлийг устгасан", + "You deleted a reaction" : "Та хариу үйлдлийг устгасан", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Та зурвасын хугацааг %n долоо хоног болгож тохируулсан","Та зурвасын хугацааг %n долоо хоног болгож тохируулсан"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Та зурвасын хугацааг %n өдөр болгож тохируулсан","Та зурвасын хугацааг %n өдөр болгож тохируулсан"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Та зурвасын хугацааг %n цаг болгож тохируулсан","Та зурвасын хугацааг %n цаг болгож тохируулсан"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Та зурвасын хугацааг %n минут болгож тохируулсан","Та зурвасын хугацааг %n минут болгож тохируулсан"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} зурвасын хугацааг %n долоо хоног болгож тохируулсан","{actor} зурвасын хугацааг %n долоо хоног болгож тохируулсан"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} зурвасын хугацааг %n өдөр болгож тохируулсан","{actor} зурвасын хугацааг %n өдөр болгож тохируулсан"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} зурвасын хугацааг %n цаг болгож тохируулсан","{actor} зурвасын хугацааг %n цаг болгож тохируулсан"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} зурвасын хугацааг %n минут болгож тохируулсан","{actor} зурвасын хугацааг %n минут болгож тохируулсан"], + "{actor} disabled message expiration" : "{actor} мессежийн дуусах хугацааг идэвхгүй болгосон", + "You disabled message expiration" : "Та мессежийн дуусах хугацааг идэвхгүй болгосон", + "{actor} cleared the history of the conversation" : "{actor} ярианы түүхийг цэвэрлэсэн", + "You cleared the history of the conversation" : "Та ярианы түүхийг цэвэрлэсэн", + "{actor} set the conversation picture" : "{actor} ярианы зургийг тохируулсан", + "You set the conversation picture" : "Та ярианы зургийг тохируулсан", + "{actor} removed the conversation picture" : "{actor} ярианы зургийг устгасан", + "You removed the conversation picture" : "Та ярианы зургийг устгасан", + "{actor} ended the poll {poll}" : "{actor} {poll} санал асуулгыг дуусгасан", + "You ended the poll {poll}" : "Та {poll} санал асуулгыг дуусгасан", + "{actor} started the video recording" : "{actor} видео бичлэгийг эхлүүлсэн", + "You started the video recording" : "Та видео бичлэгийг эхлүүлсэн", + "{actor} stopped the video recording" : "{actor} видео бичлэгийг зогсоосон", + "You stopped the video recording" : "Та видео бичлэгийг зогсоосон", + "{actor} started the audio recording" : "{actor} аудио бичлэгийг эхлүүлсэн", + "You started the audio recording" : "Та аудио бичлэгийг эхлүүлсэн", + "{actor} stopped the audio recording" : "{actor} аудио бичлэгийг зогсоосон", + "You stopped the audio recording" : "Та аудио бичлэгийг зогсоосон", + "The recording failed" : "Бичлэг амжилтгүй болсон", + "Someone voted on the poll {poll}" : "Хэн нэгэн {poll} санал асуулгад санал өгсөн", + "Message deleted by author" : "Мессеж зохиогчоор устгагдсан", + "Message deleted by {actor}" : "Мессеж {actor}-аар устгагдсан", + "Message deleted by you" : "Мессеж таны устгасан", + "Deleted user" : "Устгагдсан хэрэглэгч", + "Unknown number" : "Үл мэдэгдэх дугаар", + "Administration" : "Удирдлага", + "System" : "–°–∏—Å—Ç–µ–º", + "%s (guest)" : "%s (зочин)", + "Missed call" : "Алдагдсан дуудлага", + "Unanswered call" : "Хариулаагүй дуудлага", + "Call ended (Duration {duration})" : "Дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n зочинтой дуудлага дээд хугацаанд хүрсэн тул дууссан (Үргэлжилсэн хугацаа {duration})","%n зочинтой дуудлага дээд хугацаанд хүрсэн тул дууссан (Үргэлжилсэн хугацаа {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n зочинтой дуудлага дууссан (Үргэлжилсэн хугацаа {duration})","%n зочинтой дуудлага дууссан (Үргэлжилсэн хугацаа {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} %n зочинтой дуудлагыг дуусгасан (Үргэлжилсэн хугацаа {duration})","{actor} %n зочинтой дуудлагыг дуусгасан (Үргэлжилсэн хугацаа {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} {user1}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} болон {user2}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} болон {user2}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} {user1} болон {user2}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2} болон {user3}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1}, {user2} болон {user3}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} {user1}, {user2} болон {user3}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3} болон {user4}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1}, {user2}, {user3} болон {user4}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} {user1}, {user2}, {user3} болон {user4}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} {user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Message of {user} in {conversation}" : "{conversation} дахь {user}-ийн мессеж", + "Message of {user}" : "{user}-ийн мессеж", + "Message of a deleted user in {conversation}" : "{conversation} дахь устгагдсан хэрэглэгчийн мессеж", + "Talk conversations" : "Talk яриа", + "Talk to %s" : "%s-тай ярих", + "An error occurred. Please contact your administrator." : "Алдаа гарлаа. Администратортайгаа холбогдоно уу.", + "File not found" : "–§–∞–π–ª –æ–ª–¥—Å–æ–Ω–≥“Ø–π", + "File is not shared, or shared but not with the user" : "Файл хуваалцаагүй эсвэл хуваалцсан боловч хэрэглэгчтэй биш", + "No account available to delete." : "Устгах бүртгэл байхгүй.", + "Poll" : "Санал асуулга", + "Password needs to be set" : "Нууц үг тохируулах шаардлагатай", + "Uploading the file failed" : "Файл байршуулах амжилтгүй болсон", + "No image file provided" : "Зургийн файл өгөгдөөгүй", + "File is too big" : "–§–∞–π–ª—ã–Ω —Ö—ç–º–∂—ç—ç —Ö—ç—Ç –∏—Ö –±–∞–π–Ω–∞", + "Invalid file provided" : "–ë—É—Ä—É—É —Ñ–∞–π–ª –±–∞–π–Ω–∞", + "Invalid image" : "–±—É—Ä—É—É –∑—É—Ä–∞–≥", + "Unknown filetype" : "“Æ–ª –º—ç–¥—ç–≥–¥—ç—Ö —Ñ–∞–π–ª—ã–Ω —Ç”©—Ä”©–ª", + "Talk mentions" : "Talk дурдалтууд", + "More conversations" : "Бусад яриа", + "Say hi to your friends and colleagues!" : "Найз нөхөд болон хамт олондоо мэндчил!", + "No unread mentions" : "Уншаагүй дурдалт байхгүй", + "Call in progress" : "Дуудлага явагдаж байна", + "You were mentioned" : "Танийг дурдсан", + "Write to conversation" : "Яриа руу бичих", + "Writes event information into a conversation of your choice" : "Таны сонгосон яриа руу үйл явдлын мэдээлэл бичих", + "Missing email field in header line" : "Толгой мөрөнд имэйл талбар дутуу", + "Following lines are invalid: %s" : "Дараах мөрүүд буруу: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s таныг \"%2$s\" яриа руу урисан.", + "You were invited to conversation \"%s\"." : "Та \"%s\" яриа руу урьсан.", + "Conversation invitation" : "Ярианы урилга", + "Scheduled time" : "Товлосон цаг", + "Description" : "–¢–∞–π–ª–±–∞—Ä", + "You can also dial-in via phone with the following details" : "Та мөн дараах мэдээллийг ашиглан утсаар залгаж болно", + "Dial-in information" : "Залгах мэдээлэл", + "Meeting ID" : "Уулзалтын ID", + "Your PIN" : "Таны PIN", + "Click the button below to join the lobby now." : "Хүлээлгийн танхимд нэгдэхийн тулд доорх товчийг дарна уу.", + "Click the link below to join the lobby now." : "Хүлээлгийн танхимд нэгдэхийн тулд доорх холбоос дээр дарна уу.", + "Join lobby for \"%s\"" : "\"%s\" хүлээлгийн танхимд нэгдэх", + "Click the button below to join the conversation now." : "Яриад нэгдэхийн тулд доорх товчийг дарна уу.", + "Click the link below to join the conversation now." : "Яриад нэгдэхийн тулд доорх холбоос дээр дарна уу.", + "Join \"%s\"" : "\"%s\" нэгдэх", + "Meeting" : "Уулзалт", + "Password request: %s" : "Нууц үг хүсэлт: %s", + "Private conversation" : "Хувийн яриа", + "Deleted user (%s)" : "Устгагдсан хэрэглэгч (%s)", + "Failed to upload call recording" : "Дуудлагын бичлэг байршуулах амжилтгүй болсон", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Бичлэгийн сервер {call} дуудлагын бичлэгийг байршуулж чадсангүй. Администрацитай холбогдоно уу.", + "Share to chat" : "Чат руу хуваалцах", + "Dismiss notification" : "Мэдэгдлийг хаах", + "Call recording now available" : "Дуудлагын бичлэг одоо боломжтой", + "The recording for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын бичлэг {file} руу байршуулагдсан.", + "Transcript now available" : "Транскрипц одоо боломжтой", + "The transcript for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын транскрипц {file} руу байршуулагдсан.", + "Failed to transcript call recording" : "Дуудлагын бичлэгийг транскрипц хийх амжилтгүй болсон", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер {call} дахь дуудлагын {file} бичлэгийг хуулбарлаж чадсангүй. Администрацитай холбогдоно уу.", + "Call summary now available" : "Дуудлагын хураангуй одоо боломжтой", + "The summary for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын хураангуй {file} руу байршуулагдсан.", + "Failed to summarize call recording" : "Дуудлагын бичлэгийг хураангуйлах амжилтгүй болсон", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер {call} дахь дуудлагын {file} бичлэгийг хураангуйлж чадсангүй. Администрацитай холбогдоно уу.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} таныг {remoteServer} дээрх {roomName} руу нэгдэхийг урисан", + "Accept" : "–•“Ø–ª—ç—ç–Ω –∑”©–≤—à”©”©—Ä”©—Ö", + "Decline" : "–ó”©–≤—à”©”©—Ä”©—Ö–≥“Ø–π", + "{user1} invited you to a federated conversation" : "{user1} таныг федерац яриа руу урисан", + "Someone reacted" : "Хэн нэгэн хариу үйлдэл үзүүлсэн", + "New message" : "—à–∏–Ω—ç –∑—É—Ä–≤–∞—Å", + "Reminder" : "Сануулга", + "Someone mentioned you" : "Хэн нэгэн таныг дурдсан", + "Notification" : "Мэдэгдэл", + "Someone reacted in a private conversation" : "Хэн нэгэн хувийн яриад хариу үйлдэл үзүүлсэн", + "You received a message in a private conversation" : "Та хувийн яриад мессеж хүлээн авлаа", + "Reminder in a private conversation" : "Хувийн яриад сануулга", + "Someone mentioned you in a private conversation" : "Хэн нэгэн таныг хувийн яриад дурдсан", + "Notification in a private conversation" : "Хувийн яриад мэдэгдэл", + "Reminder: You in {call}" : "Сануулга: Та {call}-д", + "Reminder: {user} in {call}" : "Сануулга: {user} {call}-д", + "Reminder: Deleted user in {call}" : "Сануулга: Устгагдсан хэрэглэгч {call}-д", + "Reminder: {guest} (guest) in {call}" : "Сануулга: {guest} (зочин) {call}-д", + "Reminder: Guest in {call}" : "Сануулга: Зочин {call}-д", + "{user} reacted with {reaction}" : "{user} {reaction} хариу үйлдэл үзүүлсэн", + "{user} reacted with {reaction} in {call}" : "{user} {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "Deleted user reacted with {reaction} in {call}" : "Устгагдсан хэрэглэгч {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (зочин) {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "Guest reacted with {reaction} in {call}" : "Зочин {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "{user} in {call}" : "{user} {call}-д", + "Deleted user in {call}" : "Устгагдсан хэрэглэгч {call}-д", + "{guest} (guest) in {call}" : "{guest} (зочин) {call}-д", + "Guest in {call}" : "Зочин {call}-д", + "{user} sent you a private message" : "{user} танд хувийн мессеж илгээсэн", + "{user} sent a message in conversation {call}" : "{user} {call} яриад мессеж илгээсэн", + "A deleted user sent a message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриад мессеж илгээсэн", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (зочин) {call} яриад мессеж илгээсэн", + "A guest sent a message in conversation {call}" : "Зочин {call} яриад мессеж илгээсэн", + "{user} replied to your private message" : "{user} таны хувийн мессежид хариулсан", + "{user} replied to your message in conversation {call}" : "{user} {call} яриад таны мессежид хариулсан", + "A deleted user replied to your message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриад таны мессежид хариулсан", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (зочин) {call} яриад таны мессежид хариулсан", + "A guest replied to your message in conversation {call}" : "Зочин {call} яриад таны мессежид хариулсан", + "Reminder: You in private conversation {call}" : "Сануулга: Та {call} хувийн харилцан яриад", + "Reminder: A deleted user in private conversation {call}" : "Сануулга: Устгагдсан хэрэглэгч {call} хувийн харилцан яриад", + "Reminder: {user} in private conversation" : "Сануулга: {user} хувийн харилцан яриад", + "Reminder: You in conversation {call}" : "Сануулга: Та {call} харилцан яриад", + "Reminder: {user} in conversation {call}" : "Сануулга: {user} {call} харилцан яриад", + "Reminder: A deleted user in conversation {call}" : "Сануулга: Устгагдсан хэрэглэгч {call} харилцан яриад", + "Reminder: {guest} (guest) in conversation {call}" : "Сануулга: {guest} (зочин) {call} харилцан яриад", + "Reminder: A guest in conversation {call}" : "Сануулга: Зочин {call} харилцан яриад", + "{user} reacted with {reaction} to your private message" : "{user} таны хувийн мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} {call} харилцан ярианд таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриан дахь таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (зочин) {call} яриан дахь таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "A guest reacted with {reaction} to your message in conversation {call}" : "Зочин {call} харилцан ярианд таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{user} mentioned you in a private conversation" : "{user} таныг хувийн харилцан ярианд дурдсан", + "{user} mentioned group {group} in conversation {call}" : "{user} {call} харилцан ярианд {group} бүлгийг дурдсан", + "{user} mentioned team {team} in conversation {call}" : "{user} {call} харилцан ярианд {team} багийг дурдсан", + "{user} mentioned everyone in conversation {call}" : "{user} {call} харилцан ярианд бүгдийг дурдсан", + "{user} mentioned you in conversation {call}" : "{user} {call} харилцан ярианд таныг дурдсан", + "A deleted user mentioned group {group} in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд {group} бүлгийг дурдсан", + "A deleted user mentioned team {team} in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд {team} багийг дурдсан", + "A deleted user mentioned everyone in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд бүгдийг дурдсан", + "A deleted user mentioned you in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд таныг дурдсан", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд {group} бүлгийг дурдсан", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд {team} багийг дурдсан", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд бүгдийг дурдсан", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд таныг дурдсан", + "A guest mentioned group {group} in conversation {call}" : "Зочин {call} харилцан ярианд {group} бүлгийг дурдсан", + "A guest mentioned team {team} in conversation {call}" : "Зочин {call} харилцан ярианд {team} багийг дурдсан", + "A guest mentioned everyone in conversation {call}" : "Зочин {call} харилцан ярианд бүгдийг дурдсан", + "A guest mentioned you in conversation {call}" : "Зочин {call} харилцан ярианд таныг дурдсан", + "View message" : "Мессеж харах", + "Dismiss reminder" : "Сануулгыг хаах", + "View chat" : "Чат харах", + "{user} invited you to a group conversation: {call}" : "{user} таныг бүлгийн яриа руу урисан: {call}", + "Join call" : "Дуудлагад нэгдэх", + "Answer call" : "Дуудлага хариулах", + "{user} would like to talk with you" : "{user} тантай ярихыг хүсч байна", + "Call back" : "Буцаж залгах", + "You missed a call from {user}" : "Та {user}-ийн дуудлагыг алдсан", + "Accept call" : "Дуудлага хүлээн авах", + "Incoming phone call from {call}" : "{call}-аас ирж буй утасны дуудлага", + "You missed a phone call from {call}" : "Та {call}-ийн утасны дуудлагыг алдсан", + "A group call has started in {call}" : "{call}-д бүлгийн дуудлага эхэлсэн", + "You missed a group call in {call}" : "Та {call}-д бүлгийн дуудлагыг алдсан", + "{email} is requesting the password to access {file}" : "{email} {file} файлд хандах нууц үг хүсч байна", + "{email} tried to request the password to access {file}" : "{email} {file} файлд хандах нууц үг хүсэхийг оролдсон", + "Someone is requesting the password to access {file}" : "Хэн нэгэн {file} файлд хандах нууц үг хүсч байна", + "Someone tried to request the password to access {file}" : "Хэн нэгэн {file} файлд хандах нууц үг хүсэхийг оролдсон", + "Open settings" : "Тохиргоо нээх", + "Hosted signaling server added" : "Байршуулсан signaling сервер нэмэгдсэн", + "The hosted signaling server is now configured and will be used." : "Байршуулсан signaling сервер тохируулагдсан ба ашиглагдах болно.", + "Hosted signaling server removed" : "Байршуулсан signaling сервер устгагдсан", + "The hosted signaling server was removed and will not be used anymore." : "Байршуулсан signaling сервер устгагдсан ба цаашид ашиглагдахгүй.", + "Hosted signaling server changed" : "Байршуулсан signaling сервер өөрчлөгдсөн", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Байршуулсан дохионы серверийн бүртгэлийн төлөв \"{oldstatus}\"-аас \"{newstatus}\" болж өөрчлөгдсөн.", + "pending" : "хүлээгдэж байна", + "active" : "идэвхтэй", + "expired" : "дууссан", + "blocked" : "хаагдсан", + "error" : "алдаа", + "The certificate of {host} expires in {days} days" : "{host}-ийн сертификат {days} хоногийн дараа дуусна", + "The certificate of {host} expired" : "{host}-ийн сертификат дууссан", + "Contact via Talk" : "Talk-аар холбогдох", + "Open Talk" : "Talk нээх", + "Default" : "Өгөгдмөл", + "Presentation" : "Танилцуулга", + "Webinar" : "Вебинар", + "Conversations" : "Яриа", + "Messages in current conversation" : "Одоогийн ярианы мессежүүд", + "{user}" : "{user}", + "Messages" : "Мессежүүд", + "{user} in {conversation}" : "{user} {conversation}-д", + "Messages in other conversations" : "Бусад ярианы мессежүүд", + "One-to-one rooms always need to show the other users avatar" : "Нэг нэгтэйгээ өрөөнүүд үргэлж нөгөө хэрэглэгчийн аватарыг харуулах шаардлагатай", + "Invalid emoji character" : "Буруу эможи тэмдэгт", + "Invalid background color" : "Буруу дэвсгэр өнгө", + "Avatar image is not square" : "–•”©—Ä”©–≥ –∑—É—Ä–∞–≥ –¥”©—Ä–≤”©–ª–∂–∏–Ω –±–∏—à", + "Room {number}" : "Өрөө {number}", + "Other" : "–ë—É—Å–∞–¥", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Туршилтын сервер холбогдох боломжгүй тул туршилт хүсэж чадсангүй. Дараа дахин оролдоно уу.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Энэ серверийн нэвтрэлт танилтад асуудал байна. Магадгүй URL-ыг баталгаажуулахын тулд гаднаас хандах боломжгүй байж болно.", + "Something unexpected happened." : "Гэнэтийн зүйл тохиолдлоо.", + "The URL is invalid." : "URL буруу байна.", + "An HTTPS URL is required." : "HTTPS URL шаардлагатай.", + "The email address is invalid." : "Имэйл хаяг буруу байна.", + "The language is invalid." : "Хэл буруу байна.", + "The country is invalid." : "Улс буруу байна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Туршилтын хүсэлтэд асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "Too many requests are send from your servers address. Please try again later." : "Таны серверийн хаягаас хэт олон хүсэлт илгээгдсэн. Дараа дахин оролдоно уу.", + "There is already a trial registered for this Nextcloud instance." : "Энэ Nextcloud instance-д туршилт аль хэдийн бүртгэгдсэн байна.", + "Something unexpected happened. Please try again later." : "Гэнэтийн зүйл тохиолдлоо. Дараа дахин оролдоно уу.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Туршилтын сервер буруу ажилласан тул туршилт хүсэж чадсангүй. Дараа дахин оролдоно уу.", + "Trial requested but failed to get account information. Please check back later." : "Туршилт хүсэгдсэн боловч бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Энэ хүсэлтийн нэвтрэлт танилтад асуудал байна. Магадгүй URL-ыг баталгаажуулахын тулд гаднаас хандах боломжгүй байж болно.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Туршилтын сервер буруу ажилласан тул бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Бүртгэлийн мэдээллийг авахад асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "There is no such account registered." : "Ийм бүртгэл бүртгэгдээгүй байна.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Туршилтын сервер холбогдох боломжгүй тул бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "Deleting the hosted signaling server account failed. Please check back later." : "Байршуулсан дохионы серверийн бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Туршилтын сервер буруу ажилласан тул бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with deleting the account. Please check your logs for further information." : "Бүртгэлийг устгахад асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "Too many requests are sent from your servers address. Please try again later." : "Таны серверийн хаягаас хэт олон хүсэлт илгээгдсэн. Дараа дахин оролдоно уу.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Туршилтын сервер холбогдох боломжгүй тул бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "Note to self" : "Өөртөө тэмдэглэл", + "A place for your private notes, thoughts and ideas" : "Таны хувийн тэмдэглэл, бодол санаа бичих газар", + "Transcript is AI generated and may contain mistakes" : "Транскрипц нь AI-аар үүсгэгдсэн бөгөөд алдаа агуулж болно", + "Summary is AI generated and may contain mistakes" : "Хураангуй нь AI-аар үүсгэгдсэн бөгөөд алдаа агуулж болно", + "Let's get started!" : "Эхэлцгээе!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** нь Nextcloud экосистемтэй нягт уялдсан, аюулгүй, өөрийн серверт байршуулдаг харилцааны платформ юм.\n\n#### Nextcloud Talk-ийн гол боломжууд:\n\n* Хувийн болон бүлгийн чатад мессеж бичих\n* Дуу болон видео дуудлага\n* Файл хуваалцах ба бусад Nextcloud аппуудтай нэгтгэх\n* Ярианы тохиргоо, модераци болон нууцлалын удирдлага\n* Вэб, ширээний компьютер болон гар утас (iOS ба Android)\n* Хувийн ба аюулгүй харилцаа\n\n Дэлгэрэнгүйг [хэрэглэгчийн баримт бичиг](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)-ээс үзнэ үү.", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Talk-д тавтай морил\n\nNextcloud Talk нь Nextcloud-тай нэгтгэгдсэн хувийн бөгөөд хүчирхэг мессежийн апп юм. Хувийн эсвэл бүлгийн яриагаар чатлах, дуу болон видео дуудлагаар хамтран ажиллах, вебинар болон арга хэмжээ зохион байгуулах, яриагаа тохируулах болон бусад олон боломжтой.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Та мессежид хариулах, бусад чат болон хүмүүст дамжуулах, эсвэл мессежийн агуулгыг хуулах боломжтой.", + "Andorra" : "Андорра", + "United Arab Emirates" : "Арабын Нэгдсэн Эмират", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа ба Барбуда", + "Anguilla" : "Ангилья", + "Albania" : "Албани", + "Armenia" : "Армени", + "Angola" : "Ангол", + "Antarctica" : "Антарктид", + "Argentina" : "Аргентин", + "American Samoa" : "Америкийн Самоа", + "Austria" : "Австри", + "Australia" : "Австрали", + "Aruba" : "Аруба", + "Åland Islands" : "Аланд арлууд", + "Azerbaijan" : "Азербайжан", + "Bosnia and Herzegovina" : "Босни Герцеговин", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельги", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Болгар", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сент-Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливи", + "Bonaire, Sint Eustatius and Saba" : "Бонэйр, Синт-Эстатиус ба Саба", + "Brazil" : "Бразил", + "Bahamas" : "Багамын арлууд", + "Bhutan" : "Бутан", + "Bouvet Island" : "Бувэ арал", + "Botswana" : "Ботсвана", + "Belarus" : "Беларусь", + "Belize" : "Белиз", + "Canada" : "Канад", + "Cocos (Keeling) Islands" : "Кокос (Кийлинг) арлууд", + "Congo, the Democratic Republic of the" : "Бүгд Найрамдах Ардчилсан Конго", + "Central African Republic" : "Төв Африкийн Бүгд Найрамдах Улс", + "Congo" : "Конго", + "Switzerland" : "Швейцарь", + "Côte d'Ivoire" : "Кот-д'Ивуар", + "Cook Islands" : "Күүкийн арлууд", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Хятад", + "Colombia" : "Колумб", + "Costa Rica" : "Коста Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Зул сарын арал", + "Cyprus" : "Кипр", + "Czechia" : "Чех", + "Germany" : "Герман", + "Djibouti" : "Джибути", + "Denmark" : "Дани", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканы Бүгд Найрамдах Улс", + "Algeria" : "Алжир", + "Ecuador" : "Эквадор", + "Estonia" : "Эстони", + "Egypt" : "Египет", + "Western Sahara" : "Баруун Сахар", + "Eritrea" : "Эритрей", + "Spain" : "Испани", + "Ethiopia" : "Этиоп", + "Finland" : "Финланд", + "Fiji" : "Фижи", + "Falkland Islands (Malvinas)" : "Фолкландын арлууд", + "Micronesia, Federated States of" : "Микронезийн Холбооны Улс", + "Faroe Islands" : "Фарерын арлууд", + "France" : "Франц", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Их Британи ба Хойд Ирландын Нэгдсэн Хаант Улс", + "Grenada" : "Гренада", + "Georgia" : "Гүрж", + "French Guiana" : "Францын Гвиана", + "Guernsey" : "Гернси", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамби", + "Guinea" : "Гвиней", + "Guadeloupe" : "Гваделуп", + "Equatorial Guinea" : "Экваторын Гвиней", + "Greece" : "Грек", + "South Georgia and the South Sandwich Islands" : "Өмнөд Жоржиа ба Өмнөд Сэндвичийн арлууд", + "Guatemala" : "Гватемал", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвиней-Бисау", + "Guyana" : "Гайана", + "Hong Kong" : "Хонг Конг", + "Heard Island and McDonald Islands" : "Херд арал ба Макдональд арлууд", + "Honduras" : "Гондурас", + "Croatia" : "Хорват", + "Haiti" : "Гаити", + "Hungary" : "Унгар", + "Indonesia" : "Индонез", + "Ireland" : "Ирланд", + "Israel" : "Израиль", + "Isle of Man" : "Мэн арал", + "India" : "Энэтхэг", + "British Indian Ocean Territory" : "Британийн Энэтхэгийн далайн нутаг дэвсгэр", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран", + "Iceland" : "Исланд", + "Italy" : "Итали", + "Jersey" : "Жерси", + "Jamaica" : "Ямайка", + "Jordan" : "Иордан", + "Japan" : "Япон", + "Kenya" : "Кени", + "Kyrgyzstan" : "Киргиз", + "Cambodia" : "Камбож", + "Kiribati" : "Кирибати", + "Comoros" : "Коморын арлууд", + "Saint Kitts and Nevis" : "Сент-Киттс ба Невис", + "Korea, Democratic People's Republic of" : "Хойд Солонгос", + "Korea, Republic of" : "Өмнөд Солонгос", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманы арлууд", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сент-Люсиа", + "Liechtenstein" : "Лихтенштейн", + "Sri Lanka" : "Шри-Ланка", + "Liberia" : "Либери", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латви", + "Libya" : "Ливи", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдав", + "Montenegro" : "Монтенегро", + "Saint Martin (French part)" : "Сент-Мартин (Францын хэсэг)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршаллын арлууд", + "North Macedonia" : "Хойд Македони", + "Mali" : "Мали", + "Myanmar" : "Мьянмар", + "Mongolia" : "Монгол", + "Macao" : "Макао", + "Northern Mariana Islands" : "Хойд Марианы арлууд", + "Martinique" : "Мартиник", + "Mauritania" : "Мавритан", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикий", + "Maldives" : "Мальдив", + "Malawi" : "Малави", + "Mexico" : "Мексик", + "Malaysia" : "Малайз", + "Mozambique" : "Мозамбик", + "Namibia" : "Намиби", + "New Caledonia" : "Шинэ Каледони", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолк арал", + "Nigeria" : "Нигери", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерланд", + "Norway" : "Норвеги", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуэ", + "New Zealand" : "Шинэ Зеланд", + "Oman" : "Оман", + "Panama" : "Панам", + "Peru" : "Перу", + "French Polynesia" : "Францын Полинез", + "Papua New Guinea" : "Папуа Шинэ Гвиней", + "Philippines" : "Филиппин", + "Pakistan" : "Пакистан", + "Poland" : "Польш", + "Saint Pierre and Miquelon" : "Сент-Пьер ба Микелон", + "Pitcairn" : "Питкэрн", + "Puerto Rico" : "Пуэрто-Рико", + "Palestine, State of" : "Палестин", + "Portugal" : "Португал", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюнион", + "Romania" : "Румын", + "Serbia" : "Серби", + "Russian Federation" : "Орос", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудын Араб", + "Solomon Islands" : "Соломоны арлууд", + "Seychelles" : "Сейшелийн арлууд", + "Sudan" : "Судан", + "Sweden" : "Швед", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Сент-Хелена, Асенсион ба Тристан-да-Кунья", + "Slovenia" : "Словени", + "Svalbard and Jan Mayen" : "Свалбард ба Ян Майен", + "Slovakia" : "Словак", + "Sierra Leone" : "Сьерра-Леоне", + "San Marino" : "Сан-Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомали", + "Suriname" : "Суринам", + "South Sudan" : "Өмнөд Судан", + "Sao Tome and Principe" : "Сан-Томе ба Принсипи", + "El Salvador" : "Эль Сальвадор", + "Sint Maarten (Dutch part)" : "Синт-Мартен (Голландын хэсэг)", + "Syrian Arab Republic" : "Сири", + "Eswatini" : "Эсватини", + "Turks and Caicos Islands" : "Тёркс ба Кайкос арлууд", + "Chad" : "Чад", + "French Southern Territories" : "Францын өмнөд нутаг дэвсгэр", + "Togo" : "Того", + "Thailand" : "Тайланд", + "Tajikistan" : "Тажикстан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Зүүн Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турк", + "Trinidad and Tobago" : "Тринидад ба Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзани", + "Ukraine" : "Украин", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "АНУ-ын бага алслагдсан арлууд", + "United States of America" : "Америкийн Нэгдсэн Улс", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Ватикан", + "Saint Vincent and the Grenadines" : "Сент-Винсент ба Гренадин", + "Venezuela, Bolivarian Republic of" : "Венесуэл", + "Virgin Islands, British" : "Британийн Виржиний арлууд", + "Virgin Islands, U.S." : "АНУ-ын Виржиний арлууд", + "Viet Nam" : "Вьетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоллис ба Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майотта", + "South Africa" : "Өмнөд Африк", + "Zambia" : "Замби", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Дэвсгэр бүдгэрүүлэлт", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM ачааллын дэмжлэгийг шалгаж чадсангүй. Вэб сервер `.wasm` файлуудыг үйлчилж байгаа эсэхийг гараар шалгана уу.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Таны вэб сервер `.wasm` файлуудыг зөв дамжуулахаар тохируулагдаагүй байна. Энэ нь ихэвчлэн Nginx тохиргооны асуудал юм. Арын дэвсгэрийн бүдэгрүүлэлтийн хувьд `.wasm` файлуудыг мөн дамжуулахаар тохируулах шаардлагатай. Nginx тохиргоогоо бидний баримт бичиг дэх зөвлөмж болгосон тохиргоотой харьцуулна уу.", + "Talk configuration values" : "Talk тохиргооны утгууд", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Дуудлагын хугацааг албадах нь зөвхөн системийн cron-оор дэмжигддэг. Системийн cron-ыг идэвхжүүлэх эсвэл `max_call_duration` тохиргоог устгана уу.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Бага `max_call_duration` утгуудыг (одоо %d гэж тохируулагдсан) техникийн хязгаарлалтаас шалтгаалан хэрэгжүүлэх боломжгүй. Арын ажил зөвхөн 5 минут тутамд ажилладаг тул өөрийн эрсдэлээр ашиглана уу.", + "Federation" : "—Ö–æ–ª–±–æ–æ", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Talk Federation идэвхжүүлсэн үед \"memcache.locking\" тохируулахыг зөвлөж байна.", + "High-performance backend" : "Өндөр гүйцэтгэлтэй backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Өндөр гүйцэтгэлтэй backend тохируулагдаагүй - Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-гүйгээр ажиллуулах нь зөвхөн маш жижиг дуудлагуудад (хамгийн ихдээ 2-3 оролцогч) тохирно. Олон оролцогчтой дуудлагууд жигд ажиллахын тулд Өндөр гүйцэтгэлтэй backend тохируулна уу.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Өндөр гүйцэтгэлтэй backend-ийн \"conversation_cluster\" горимыг ажиллуулах нь хуучирсан бөгөөд дараагийн хувилбарт дэмжигдэхгүй болно. Өндөр гүйцэтгэлтэй backend одоо жинхэнэ кластерлалтыг дэмждэг бөгөөд үүнийг оронд нь ашиглах хэрэгтэй.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Олон Өндөр гүйцэтгэлтэй backend тодорхойлох нь хуучирсан бөгөөд дараагийн хувилбарт дэмжигдэхгүй болно. Үүний оронд кластерлагдсан дохионы серверүүдтэй хамт ачаалал тэнцвэржүүлэгч тохируулж, Talk тохиргоонд тохируулах хэрэгтэй.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "%1$s алгоритмд ашиглагдаж буй хадгалсан нийтийн түлхүүр хадгалсан хувийн түлхүүртэй таарахгүй байна. Асуудлыг засахын тулд %2$s ажиллуулна уу.", + "High-performance backend not configured correctly. Run %s for details." : "Өндөр гүйцэтгэлтэй backend зөв тохируулагдаагүй. Дэлгэрэнгүй мэдээлэл авахын тулд %s-г ажиллуулна уу.", + "High-performance backend not configured correctly" : "Өндөр гүйцэтгэлтэй backend зөв тохируулагдаагүй", + "Error: Cannot connect to server" : "Алдаа: Серверт холбогдох боломжгүй", + "Error: Server did not respond with proper JSON" : "Алдаа: Сервер зөв JSON-оор хариулсангүй", + "Error: Certificate expired" : "Алдаа: Сертификат дууссан", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Алдаа: Nextcloud сервер болон Өндөр гүйцэтгэлтэй backend серверийн системийн цаг синхрончлогдоогүй байна. Хоёр серверийг цагийн серверт холбох эсвэл цагийг гараар синхрончилно уу.", + "Could not get version" : "Хувилбарыг авч чадсангүй", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Алдаа: Ажиллаж буй хувилбар: {version}; Talk-ийн энэ хувилбартай нийцтэй болгохын тулд серверийг шинэчлэх шаардлагатай", + "Error: Server responded with: {error}" : "Алдаа: Сервер хариулсан: {error}", + "Error: Unknown error occurred" : "Алдаа: Үл мэдэгдэх алдаа гарлаа", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Анхааруулга: Ажиллаж буй хувилбар: {version}; Сервер Talk-ийн энэ хувилбарын бүх боломжуудыг дэмждэггүй, дутуу боломжууд: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-тэй ажиллуулахад санах ойн кэш тохируулахыг зөвлөж байна.", + "Client Push" : "Клиент Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push суулгагдсан, энэ нь Talk мэдэгдлүүдийн цаг тухайд нь ирэх байдлыг сайжруулна.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} суулгаагүй байна. Энэ нь Talk мэдэгдлүүдийг хоцроох магадлалтай.", + "Recording backend" : "Бичлэгийн backend", + "Using the recording backend requires a High-performance backend." : "Бичлэгийн backend ашиглахад Өндөр гүйцэтгэлтэй backend шаардлагатай.", + "No recording backend configured" : "Бичлэгийн backend тохируулагдаагүй", + "SIP configuration" : "SIP тохиргоо", + "Using the SIP functionality requires a High-performance backend." : "SIP функционал ашиглахад Өндөр гүйцэтгэлтэй backend шаардлагатай.", + "No SIP backend configured" : "SIP backend тохируулагдаагүй", + "Invalid date, date format must be YYYY-MM-DD" : "Огноо буруу, огнооны формат YYYY-MM-DD байх ёстой", + "Conversation not found" : "Яриа олдсонгүй", + "Path is already shared with this conversation" : "Зам аль хэдийн энэ яриатай хуваалцагдсан байна", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC ашиглан чат, видео болон аудио хурал", + "Leave call" : "Дуудлагаас гарах", + "Navigating away from the page will leave the call in {conversation}" : "Хуудаснаас гарах нь {conversation} дуудлагаас гарна", + "Stay in call" : "Дуудлагад үлдэх", + "Error occurred when getting the conversation information" : "Ярианы мэдээлэл авахад алдаа гарлаа", + "Discuss this file" : "Энэ файлыг хэлэлцэх", + "Share this file with others to discuss it" : "Энэ файлыг бусадтай хуваалцаж хэлэлцэх", + "Share this file" : "Энэ файлыг хуваалцах", + "Join conversation" : "Яриад нэгдэх", + "This conversation is password-protected." : "Энэ яриа нууц үгээр хамгаалагдсан.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Таны IP хаягаас олон удаагийн буруу нууц үг оруулах оролдлого илэрсэн. Тиймээс таны дараагийн оролдлогыг 30 секунд хүртэл хязгаарлав.", + "The password is wrong. Try again." : "Нууц үг буруу байна. Дахин оролдоно уу.", + "Password" : "–ù—É—É—Ü “Ø–≥", + "Submit" : "–º—ç–¥—ç–≥–¥—ç—Ö", + "Error requesting the password." : "Нууц үг хүсэхэд алдаа гарлаа.", + "Request password" : "Нууц үг хүсэх", + "This conversation has ended" : "Энэ яриа дууссан", + "Error occurred when joining the conversation" : "Яриад нэгдэхэд алдаа гарлаа", + "Close Talk sidebar" : "Talk хажуугийн мөрийг хаах", + "Open Talk sidebar" : "Talk хажуугийн мөрийг нээх", + "Everyone" : "–ë“Ø—Ö —Ö—ç—Ä—ç–≥–ª—ç–≥—á–∏–¥", + "Users and moderators" : "Хэрэглэгчид болон модераторууд", + "Moderators only" : "Зөвхөн модераторууд", + "Disable calls" : "Дуудлагыг идэвхгүй болгох", + "Save changes" : "”®”©—Ä—á–ª”©–ª—Ç–∏–π–≥ —Ö–∞–¥–≥–∞–ª–∞—Ö", + "Saving …" : "Хадгалж байна …", + "Saved!" : "–•–∞–¥–≥–∞–ª–∞–≥–¥–ª–∞–∞!", + "Limit to groups" : "Бүлгүүдэд хязгаарлах", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Дор хаяж нэг бүлэг сонгогдсон үед зөвхөн жагсаасан бүлгүүдийн хүмүүс яриануудад оролцох боломжтой.", + "Guests can still join public conversations." : "Зочид нийтийн яриануудад нэгдэх боломжтой хэвээр.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Talk ашиглах боломжгүй болсон хэрэглэгчид өмнөх яриануудад оролцогчоор жагсаасан хэвээр байх ба тэдний чат мессежүүд мөн хадгалагдана.", + "Limit using Talk" : "Talk ашиглахыг хязгаарлах", + "Limit creating a public and group conversation" : "Нийтийн болон бүлгийн яриа үүсгэхийг хязгаарлах", + "Limit creating conversations" : "Яриа үүсгэхийг хязгаарлах", + "Limit starting a call" : "Дуудлага эхлүүлэхийг хязгаарлах", + "Limit starting calls" : "Дуудлага эхлүүлэхийг хязгаарлах", + "When a call has started, everyone with access to the conversation can join the call." : "Дуудлага эхэлсэн үед яриад хандах эрхтэй бүх хүн дуудлагад нэгдэх боломжтой.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Дараах ботууд энэ серверт суулгагдсан. Баримт бичгээс {linkstart1}өөрийн бот хэрхэн бүтээх{linkend} эсвэл серверт идэвхжүүлэх {linkstart2}ботуудын жагсаалт{linkend}-ыг олж болно.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Энэ серверт ямар ч бот суулгагдаагүй байна. Баримт бичгээс {linkstart1}өөрийн бот хэрхэн бүтээх{linkend} эсвэл серверт идэвхжүүлэх {linkstart2}ботуудын жагсаалт{linkend}-ыг олж болно.", + "Description is not provided" : "Тодорхойлолт өгөгдөөгүй", + "Locked for moderators" : "Модераторуудад түгжигдсэн", + "Enabled" : "–ò–¥—ç–≤—Ö–∏–∂“ؓؖª—ç—Ö", + "Disabled" : "–∏–¥—ç–≤—Ö–∏–≥“Ø–π", + "Bots settings" : "Ботуудын тохиргоо", + "State" : "Төлөв", + "Name" : "–ù—ç—Ä", + "Last error" : "Сүүлийн алдаа", + "Total errors count" : "Нийт алдааны тоо", + "Find more bots" : "Илүү олон бот олох", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Итгэмжлэгдсэн серверүүдийг {linkstart}Хуваалцах тохиргооны хуудас{linkend}-аас тохируулж болно.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Холбогдсон чатууд болон дуудлагууд аль хэдийн ажиллаж байна. Хавсралт зохицуулалт ирээдүйн хувилбарт нэмэгдэнэ.", + "Enable Federation in Talk app" : "Talk апп-д Федерацийг идэвхжүүлэх", + "Permissions" : "Зөвшөөрлүүд", + "Allow users to be invited to federated conversations" : "Хэрэглэгчдийг федерацийн яриануудад урих боломжийг зөвшөөрөх", + "Allow users to invite federated users into conversation" : "Хэрэглэгчдэд федерацийн хэрэглэгчдийг яриад урих боломжийг зөвшөөрөх", + "Only allow to federate with trusted servers" : "Зөвхөн итгэмжит серверүүдтэй федерац хийхийг зөвшөөрөх", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Дор хаяж нэг бүлэг сонгогдсон үед зөвхөн жагсаасан бүлгүүдийн хүмүүс холбогдсон хэрэглэгчдийг яриануудад урих боломжтой.", + "Groups allowed to invite federated users" : "Федерацийн хэрэглэгчдийг урих эрхтэй бүлгүүд", + "All messages" : "Бүх мессеж", + "@-mentions only" : "Зөвхөн @-дурдалт", + "Off" : "Унтраах", + "General settings" : "Ерөнхий тохиргоо", + "Default notification settings" : "Өгөгдмөл мэдэгдлийн тохиргоо", + "Default group notification" : "Өгөгдмөл бүлгийн мэдэгдэл", + "Default group notification for new groups" : "Шинэ бүлгүүдэд зориулсан өгөгдмөл бүлгийн мэдэгдэл", + "Integration into other apps" : "Бусад апп-уудад нэгтгэл", + "Allow conversations on files" : "Файлууд дээр яриа зөвшөөрөх", + "Allow conversations on public shares for files" : "Файлуудын нийтийн хуваалцалт дээр яриа зөвшөөрөх", + "End-to-end encrypted calls" : "Төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагууд", + "Enable encryption" : "Шифрлэлтийг идэвхжүүлэх", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "SIP гүүртэй тохируулсан төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагууд нь Өндөр гүйцэтгэлтэй backend болон SIP гүүрийн шинэ хувилбар шаарддаг.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Гар утасны клиентүүд одоогоор төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагыг дэмждэггүй.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Дээрх товчийг дарснаар маягтын мэдээллийг Struktur AG-ийн серверүүд рүү илгээнэ. Нэмэлт мэдээллийг {linkstart}spreed.eu{linkend}-аас олж болно.", + "Pending" : "–•“Ø–ª—ç—ç–≥–¥—ç–∂ –±–∞–π–≥–∞–∞", + "Error" : "–ê–ª–¥–∞–∞", + "Blocked" : "–•–∞–∞–≥–¥—Å–∞–Ω", + "Active" : "Идэвхтэй", + "Expired" : "Дууссан", + "Never" : "—Ö—ç–∑—ç—ç—á", + "The trial could not be requested. Please try again later." : "Туршилтыг хүсэх боломжгүй байна. Дараа дахин оролдоно уу.", + "The account could not be deleted. Please try again later." : "Бүртгэлийг устгах боломжгүй байна. Дараа дахин оролдоно уу.", + "Hosted High-performance backend" : "Хостлогдсон Өндөр гүйцэтгэлтэй backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Бидний хамтрагч Struktur AG нь байршуулсан дохионы сервер хүсэх үйлчилгээ үзүүлдэг. Үүний тулд доорх маягтыг бөглөхөд л хангалттай бөгөөд таны Nextcloud хүсэлт илгээх болно. Сервер тохируулагдсаны дараа нэвтрэх мэдээлэл автоматаар бөглөгдөнө. Энэ нь одоо байгаа дохионы серверийн тохиргоог дарж бичнэ.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Хэрэв таны Өндөр гүйцэтгэлтэй backend бүртгэлд STUN ба/эсвэл TURN функц багтсан бол тохиргоо зохих ёсоор шинэчлэгдэнэ.", + "URL of this Nextcloud instance" : "Энэ Nextcloud instance-ийн URL", + "Full name of the user requesting the trial" : "Туршилт хүсэж буй хэрэглэгчийн бүтэн нэр", + "Email of the user" : "Хэрэглэгчийн имэйл", + "Language" : "–•—ç–ª", + "Country" : "–£–ª—Å", + "Request signaling server trial" : "Сигнал серверийн туршилт хүсэх", + "You can see the current status of your hosted signaling server in the following table." : "Байршуулсан дохионы серверийнхээ одоогийн төлөвийг дараах хүснэгтээс харж болно.", + "Status" : "—Ç”©–ª”©–≤", + "Created at" : "“ؓؗŖ≥—ç–≥–¥—Å—ç–Ω", + "Expires at" : "Дуусах", + "Limits" : "Хязгаарууд", + "STUN included" : "STUN багтсан", + "Yes" : "Тийм", + "No" : "Үгүй", + "TURN included" : "TURN багтсан", + "Delete the signaling server account" : "Сигнал серверийн бүртгэлийг устгах", + "_%n user_::_%n users_" : ["%n хэрэглэгч","%n хэрэглэгч"], + "Installed version: {version}" : "Суулгасан хувилбар: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Talk-ыг бусад үйлчилгээнүүдтэй холбохын тулд Matterbridge суулгаж болно, дэлгэрэнгүй мэдээллийг {linkstart1}GitHub хуудас{linkend}-аас үзнэ үү. Аппыг татаж суулгахад хэсэг хугацаа шаардагдаж болно. Хугацаа хэтэрвэл {linkstart2}Nextcloud App Store{linkend}-оос гараар суулгана уу.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary олдсонгүй эсвэл ажиллуулах боломжгүй.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Та мөн тохиргоогоор дамжуулан Matterbridge хоёртын файлын замыг гараар тохируулж болно. Нэмэлт мэдээллийг {linkstart}Matterbridge нэгтгэлийн баримт бичиг{linkend}-ээс шалгана уу.", + "Install Talk Matterbridge" : "Talk Matterbridge суулгах", + "An error occurred while installing the Matterbridge app" : "Matterbridge апп суулгахад алдаа гарлаа", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridge суулгах явцад алдаа гарлаа. Гараар суулгана уу", + "Failed to execute Matterbridge binary." : "Matterbridge binary ажиллуулж чадсангүй.", + "Matterbridge integration" : "Matterbridge нэгтгэл", + "Enable Matterbridge integration" : "Matterbridge нэгтгэлийг идэвхжүүлэх", + "Status: Checking connection" : "Төлөв: Холболтыг шалгаж байна", + "OK: Running version: {version}" : "За: Ажиллаж буй хувилбар: {version}", + "Error: Server seems to be a Signaling server" : "Алдаа: Сервер Signaling сервер байх бололтой", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Алдаа: Nextcloud сервер болон Бичлэгийн backend серверийн системийн цаг синхрончлогдоогүй байна. Хоёр серверийг цагийн серверт холбох эсвэл цагийг гараар синхрончилно уу.", + "Recording backend URL" : "Бичлэгийн backend URL", + "Validate SSL certificate" : "SSL сертификатыг баталгаажуулах", + "Delete this server" : "Энэ серверийг устгах", + "Test this server" : "Энэ серверийг тест хийх", + "Disabled for all calls" : "Бүх дуудлагад идэвхгүй болсон", + "Enabled for all calls" : "Бүх дуудлагад идэвхтэй", + "Configurable on conversation level by moderators" : "Модераторууд ярианы түвшинд тохируулж болно", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-ийн \"upload_max_filesize\" эсвэл \"post_max_size\" тохиргоо нь зөвхөн {maxUpload} хүртэлх хэмжээтэй файл байршуулахыг зөвшөөрнө.", + "Recording backend settings saved" : "Бичлэгийн backend тохиргоо хадгалагдлаа", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модераторуудад ярианы түвшинд зөвшөөрөл идэвхжүүлэх боломж олгоно. Энэ яриан дахь дуудлага бүрд нэгдэхийн өмнө оролцогч бүрээс бичлэг хийх зөвшөөрөл шаардагдана.", + "The consent to be recorded will be required for each participant before joining every call." : "Дуудлага бүрд нэгдэхийн өмнө оролцогч бүрээс бичлэг хийх зөвшөөрөл шаардагдана.", + "The consent to be recorded is not required." : "Бичигдэх зөвшөөрөл шаардлагагүй.", + "Recording backend configuration is only possible with a High-performance backend." : "Бичлэгийн backend тохиргоо нь зөвхөн Өндөр гүйцэтгэлтэй backend-тэй хамт боломжтой.", + "Add a new recording backend server" : "Шинэ бичлэгийн backend сервер нэмэх", + "Shared secret" : "Хуваалцсан нууц түлхүүр", + "Recording consent" : "Бичлэгийн зөвшөөрөл", + "Recording transcription" : "Бичлэгийн транскрипц", + "Automatically transcribe call recordings with a transcription provider" : "Дуудлагын бичлэгүүдийг транскрипц үйлчилгээ үзүүлэгчээр автоматаар хуулбарлах", + "Automatically summarize call recordings with transcription and summary providers" : "Хуулбарлалт болон хураангуйн үйлчилгээ үзүүлэгчийн тусламжтай дуудлагын бичлэгүүдийг автоматаар хураангуйл", + "SIP configuration saved!" : "SIP тохиргоо хадгалагдлаа!", + "SIP configuration is only possible with a High-performance backend." : "SIP тохиргоо нь зөвхөн Өндөр гүйцэтгэлтэй backend-тэй боломжтой.", + "Enable SIP Dial-out option" : "SIP залгах сонголтыг идэвхжүүлэх", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "SIP залгах боломжийг дэмжихийн тулд дохионы серверийг шинэчлэх шаардлагатай.", + "Do not show SIP Dial-out caller number" : "SIP залгах дугаарыг бүү харуулах", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Нэргүй дугаар дуудлага хүлээн авагчид \"тодорхойгүй\" эсвэл \"нуусан дугаар\" гэж харагдах ёстой", + "Dial-out number" : "Залгах дугаар", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Гарах дуудлагуудад нөөц дуудлага хийгчийн дугаар болгон E164 форматтай дугаар ашиглагдана", + "Dial-out prefix" : "Залгах угтвар", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Гадагш дуудлагын хэрэглэгчийн дугаарын өмнөх угтвар (өгөгдмөл нь `+`)", + "Restrict SIP configuration" : "SIP тохиргоог хязгаарлах", + "Enable SIP configuration" : "SIP тохиргоог идэвхжүүлэх", + "Only users of the following groups can enable SIP in conversations they moderate" : "Зөвхөн дараах бүлгүүдийн хэрэглэгчид өөрсдийн модераци хийдэг яриануудад SIP-ийг идэвхжүүлж чадна", + "Phone number (Country)" : "Утасны дугаар (Улс)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Энэ мэдээлэл урилгын и-мэйлээр илгээгдэх бөгөөд бүх оролцогчдод хажуугийн самбарт харуулагдана.", + "Nextcloud base URL" : "Nextcloud үндсэн URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Боломжит функцууд", + "Error: Websocket connection failed" : "Алдаа: Websocket холболт амжилтгүй болсон", + "Error code" : "Алдааны код", + "Error message" : "Алдааны мессеж", + "Error: Websocket connection failed. Check browser console" : "Алдаа: Websocket холболт амжилтгүй болсон. Хөтчийн консолыг шалгана уу", + "High-performance backend URL" : "Өндөр гүйцэтгэлтэй backend URL", + "Missing High-performance backend warning hidden" : "Өндөр гүйцэтгэлтэй backend дутуу анхааруулга нуугдсан", + "High-performance backend settings saved" : "Өндөр гүйцэтгэлтэй backend тохиргоо хадгалагдлаа", + "Nextcloud Talk setup not complete" : "Nextcloud Talk тохиргоо дуусаагүй", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Өндөр гүйцэтгэлтэй backend-гүйгээр 2-оос олон оролцогчтой дуудлагуудад оролцогчид холболтын асуудалтай тулгарах магадлалтай бөгөөд оролцож буй төхөөрөмжүүдэд их ачаалал үүсгэнэ гэдгийг анхаарна уу.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Олон оролцогчтой дуудлагууд жигд ажиллахын тулд Өндөр гүйцэтгэлтэй backend суулгана уу.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Хурдан суулгах заавар", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Олон оролцогчтой дуудлага болон яриануудад Өндөр гүйцэтгэлтэй backend шаардлагатай. Backend-гүйгээр бүх оролцогчид нэг бүрчлэн бусад оролцогч бүрд зориулж өөрсдийн видеог байршуулах шаардлагатай бөгөөд энэ нь холболтын асуудал болон оролцож буй төхөөрөмжүүдэд их ачаалал үүсгэнэ.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-тэй ашиглахад тархсан кэш тохируулахыг зөвлөж байна.", + "Add High-performance backend server" : "Өндөр гүйцэтгэлтэй backend сервер нэмэх", + "Warn about connectivity issues in calls with more than 2 participants" : "2-оос олон оролцогчтой дуудлагуудад холболтын асуудлын талаар анхааруулах", + "STUN server URL" : "STUN серверийн URL", + "The server address is invalid" : "Серверийн хаяг буруу байна", + "STUN settings saved" : "STUN тохиргоо хадгалагдлаа", + "STUN servers" : "STUN серверүүд", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN сервер нь чиглүүлэгчийн ард байгаа оролцогчдын нийтийн IP хаягийг тодорхойлоход ашиглагддаг.", + "Add a new STUN server" : "Шинэ STUN сервер нэмэх", + "{schema} scheme must be used with a domain" : "{schema} схемийг домайнтай хамт ашиглах ёстой", + "{option1} and {option2}" : "{option1} болон {option2}", + "{option} only" : "Зөвхөн {option}", + "OK: Successful ICE candidates returned by the TURN server" : "За: TURN сервер амжилттай ICE нэр дэвшигчид буцаасан", + "Error: No working ICE candidates returned by the TURN server" : "Алдаа: TURN сервер ажиллаж байгаа ICE нэр дэвшигч буцаасангүй", + "Testing whether the TURN server returns ICE candidates" : "TURN сервер ICE нэр дэвшигч буцааж байгаа эсэхийг тест хийж байна", + "TURN server schemes" : "TURN серверийн схемүүд", + "TURN server URL" : "TURN серверийн URL", + "TURN server secret" : "TURN серверийн нууц", + "TURN server protocols" : "TURN серверийн протоколууд", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сервер нь галт хана ард байгаа оролцогчдын урсгалыг прокси хийхэд ашиглагддаг. Хэрэв тодорхой оролцогчид бусадтай холбогдож чадахгүй бол TURN сервер шаардлагатай байх магадлалтай. Тохируулах зааврыг {linkstart}энэ баримт бичиг{linkend}-ээс үзнэ үү.", + "TURN settings saved" : "TURN тохиргоо хадгалагдлаа", + "TURN servers" : "TURN серверүүд", + "Add a new TURN server" : "Шинэ TURN сервер нэмэх", + "Failed" : "Амжилтгүй", + "OK" : "–æ–∫", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Амжилтгүй: WebAssembly идэвхгүй эсвэл энэ хөтчид дэмжигдэхгүй байна. Шалгалт хийхийн тулд WebAssembly-г идэвхжүүлэх эсвэл дэмждэг хөтөч ашиглана уу.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Амжилтгүй: \".wasm\" болон \".tflite\" файлуудыг вэб сервер зөв буцааж чадсангүй. Talk баримт бичгийн \"Системийн шаардлага\" хэсгийг шалгана уу.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "За: \".wasm\" ба \".tflite\" файлууд веб сервероос зөв буцаагдсан.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP болон Apache тохиргоо нийцэхгүй байна. PHP-ийг зөвхөн MPM_PREFORK модультай, PHP-FPM-ийг зөвхөн MPM_EVENT модультай ашиглах боломжтой гэдгийг анхаарна уу.", + "Web server setup checks" : "Веб серверийн тохиргооны шалгалтууд", + "Files required for virtual background can be loaded" : "Виртуал дэвсгэрт шаардлагатай файлуудыг ачаалах боломжтой", + "Federated user" : "Холбооны хэрэглэгч", + "Assign participants to rooms" : "Оролцогчдыг өрөөнүүдэд хуваарилах", + "Configure breakout rooms" : "Салангид өрөөнүүдийг тохируулах", + "Number of breakout rooms" : "Салангид өрөөнүүдийн тоо", + "You can create from 1 to 20 breakout rooms." : "Та 1-ээс 20 хүртэл салангид өрөө үүсгэх боломжтой.", + "Assignment method" : "Хуваарилах арга", + "Automatically assign participants" : "Оролцогчдыг автоматаар хуваарилах", + "Manually assign participants" : "Оролцогчдыг гараар хуваарилах", + "Allow participants to choose" : "Оролцогчдод сонгох боломж олгох", + "Create rooms" : "Өрөөнүүд үүсгэх", + "Confirm" : "–ë–∞—Ç–ª–∞—Ö", + "Create breakout rooms" : "Салангид өрөөнүүд үүсгэх", + "Reset" : "—Ç–æ—Ö–∏—Ä—É—É–ª–∞—Ö", + "Delete breakout rooms" : "Салангид өрөөнүүдийг устгах", + "Room {roomNumber}" : "Өрөө {roomNumber}", + "Current breakout rooms and settings will be lost" : "Одоогийн салангид өрөөнүүд болон тохиргоо алдагдана", + "Cancel" : "–±–æ–ª–∏—É–ª–∞—Ö", + "Unassigned participants" : "Хуваарилагдаагүй оролцогчид", + "Back" : "–±—É—Ü–∞—Ö", + "Assign" : "Хуваарилах", + "Add participant \"{user}\"" : "\"{user}\" оролцогч нэмэх", + "Now" : "Одоо", + "Invalid calendar selected" : "Буруу календар сонгосон", + "Invalid start time selected" : "Буруу эхлэх цаг сонгосон", + "Invalid end time selected" : "Буруу дуусах цаг сонгосон", + "Unknown error occurred" : "Үл мэдэгдэх алдаа гарлаа", + "Sending no invitations" : "Урилга илгээхгүй", + "{participant0} will receive an invitation" : "{participant0} урилга хүлээн авна", + "{participant0} and {participant1} will receive invitations" : "{participant0} болон {participant1} урилга хүлээн авна", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} болон %n бусад урилга хүлээн авна","{participant0}, {participant1} болон %n бусад урилга хүлээн авна"], + "Invite {user}" : "{user}-г урих", + "Invite all users and emails in this conversation" : "Энэ ярианд байгаа бүх хэрэглэгчид болон имэйлүүдийг урих", + "Meeting created" : "Уулзалт үүсгэгдлээ", + "Upcoming meetings" : "Удахгүй болох уулзалтууд", + "Loading …" : "Ачаалж байна …", + "No upcoming meetings" : "Удахгүй болох уулзалт байхгүй", + "Schedule a meeting" : "Уулзалт товлох", + "Meeting title" : "Уулзалтын гарчиг", + "From" : "Эхлэх", + "To" : "Хүртэл", + "Calendar" : "–ö–∞–ª–µ–Ω–¥–∞—Ä—å", + "Attendees" : "–û—Ä–æ–ª—Ü–æ–≥—á–∏–¥", + "No other participants to send invitations to." : "Урилга илгээх өөр оролцогч байхгүй.", + "Add attendees" : "Оролцогчид нэмэх", + "Save" : "–•–∞–¥–≥–∞–ª–∞—Ö", + "Search participants" : "Оролцогчид хайх", + "No results" : "“Æ—Ä –¥“Ø–Ω –±–∞–π—Ö–≥“Ø–π", + "Done" : "Дууслаа", + "Disable live transcription" : "Шууд транскрипцийг идэвхгүй болгох", + "Disable live translation" : "Шууд орчуулгыг идэвхгүй болгох", + "Original language: {languageName}" : "Эх хэл: {languageName}", + "Translated language" : "Орчуулсан хэл", + "Translated language: {languageName}" : "Орчуулсан хэл: {languageName}", + "Raise hand" : "Гар өргөх", + "Raise hand (R)" : "Гар өргөх (R)", + "Lower hand" : "Гар буулгах", + "Lower hand (R)" : "Гар буулгах (R)", + "Exit full screen (F)" : "Бүтэн дэлгэцнээс гарах (F)", + "Full screen (F)" : "Бүтэн дэлгэц (F)", + "Speaker view" : "Илтгэгчийн харагдац", + "Grid view" : "Торон харагдац", + "Error when trying to load the available live transcription languages" : "Боломжит шууд транскрипц хэлүүдийг ачаалахад алдаа гарлаа", + "Failed to enable live transcription" : "Шууд транскрипцийг идэвхжүүлж чадсангүй", + "Failed to enable live translations" : "Шууд орчуулгыг идэвхжүүлж чадсангүй", + "Failed to disable live translations" : "Шууд орчуулгыг идэвхгүй болгож чадсангүй", + "Recording consent is required" : "Бичлэгийн зөвшөөрөл шаардлагатай", + "This conversation is read-only" : "Энэ яриа зөвхөн унших горимд байна", + "Conversation not found or not joined" : "Яриа олдсонгүй эсвэл нэгдээгүй", + "Lobby is still active and you're not a moderator" : "Лобби идэвхтэй хэвээр байна, та модератор биш", + "Connection failed" : "Холболт амжилтгүй", + "Reload" : "Дахин ачаалах", + "{nickName} raised their hand." : "{nickName} гараа өргөлөө.", + "A participant raised their hand." : "Нэг оролцогч гараа өргөлөө.", + "Collapse stripe" : "Зураасыг хураах", + "Expand stripe" : "Зураасыг дэлгэх", + "Previous page of videos" : "Видеоны өмнөх хуудас", + "Next page of videos" : "Видеоны дараагийн хуудас", + "Waiting for {user} to join the call" : "{user} дуудлагад нэгдэхийг хүлээж байна", + "You can invite others in the participant tab of the sidebar" : "Та хажуугийн мөрний оролцогчийн табаас бусдыг урих боломжтой", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Та хажуугийн самбарын оролцогчид табаас бусдыг урих эсвэл энэ холбоосыг хуваалцаж бусдыг урих боломжтой!", + "Share this link to invite others!" : "Бусдыг урихын тулд энэ холбоосыг хуваалцаарай!", + "Copy link" : "–•–æ–ª–±–æ–æ—Å —Ö—É—É–ª–∞—Ö", + "You are not allowed to enable audio" : "Та аудио идэвхжүүлэх эрхгүй байна", + "No audio. Click to select device" : "Аудио байхгүй. Төхөөрөмж сонгохын тулд дарна уу", + "Mute audio" : "Аудио хаах", + "Mute audio (M)" : "Аудио хаах (M)", + "Unmute audio" : "Аудио нээх", + "Unmute audio (M)" : "Аудио нээх (M)", + "None" : "—é—É —á “Ø–≥“Ø–π", + "Select a microphone" : "Микрофон сонгох", + "Select a speaker" : "Чанга яригч сонгох", + "Microphone settings" : "Микрофоны тохиргоо", + "Check devices" : "Төхөөрөмжүүдийг шалгах", + "Access to camera was denied" : "Камерт хандах эрхийг татгалзлаа", + "Error while accessing camera: It is likely in use by another program" : "Камерт хандахад алдаа гарлаа: Өөр програм ашиглаж байх магадлалтай", + "Error while accessing camera" : "Камерт хандахад алдаа гарлаа", + "You have been muted by a moderator" : "Модератор таныг хаасан", + "Hide presenter video" : "Илтгэгчийн видеог нуух", + "You are not allowed to enable video" : "Та видео идэвхжүүлэх эрхгүй байна", + "No video. Click to select device" : "Видео байхгүй. Төхөөрөмж сонгохын тулд дарна уу", + "Disable video" : "Видео идэвхгүй болгох", + "Disable video (V)" : "Видео идэвхгүй болгох (V)", + "Enable video" : "Видео идэвхжүүлэх", + "Enable video (V)" : "Видео идэвхжүүлэх (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх - Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх (V) - Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх. Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Select a video device" : "Видео төхөөрөмж сонгох", + "Show presenter" : "Илтгэгчийг харуулах", + "You" : "Та", + "Mute" : "Хаах", + "Muted" : "Хаагдсан", + "Show screen" : "Дэлгэц харуулах", + "Stop following" : "Дагахаа зогсоох", + "Collapse" : "Хураах", + "Expand" : "Дэлгэх", + "You need to be logged in to upload files" : "Файл байршуулахын тулд нэвтрэх шаардлагатай", + "Drop your files to upload" : "Файлуудаа байршуулахын тулд энд тавина уу", + "Conversation messages" : "Ярианы мессежүүд", + "Scroll to bottom" : "Доош гүйлгэх", + "Post message" : "Мессеж илгээх", + "Federated conversation" : "Федерацийн яриа", + "Public conversation" : "Нийтийн яриа", + "Favorite" : "–î—É—Ä—Ç–∞–π", + "Banned users" : "Хориглогдсон хэрэглэгчид", + "Manage the list of banned users in this conversation." : "Энэ ярианд хориглогдсон хэрэглэгчдийн жагсаалтыг удирдах.", + "Manage bans" : "Хориглолтуудыг удирдах", + "No banned users" : "Хориглогдсон хэрэглэгч байхгүй", + "Banned by:" : "Хориглосон:", + "Date:" : "–û–≥–Ω–æ–æ:", + "Note:" : "Тэмдэглэл:", + "Hide details" : "Дэлгэрэнгүйг нуух", + "Show details" : "Дэлгэрэнгүйг харуулах", + "Unban" : "Хориг тайлах", + "Error while updating conversation name" : "Ярианы нэр шинэчлэхэд алдаа гарлаа", + "Error while updating conversation description" : "Ярианы тодорхойлолт шинэчлэхэд алдаа гарлаа", + "Enter a name for this conversation" : "Энэ яриаг нэрлэнэ үү", + "Edit conversation name" : "Ярианы нэр засах", + "Edit conversation description" : "Ярианы тодорхойлолт засах", + "Enter a description for this conversation" : "Энэ ярианы тодорхойлолт оруулна уу", + "Picture" : "Зураг", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Дараах ботуудыг энэ яриад идэвхжүүлж болно. Энэ серверт илүү олон бот суулгуулахын тулд администрацитайгаа холбогдоно уу.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Энэ серверт ямар ч бот суулгагдаагүй байна. Бот суулгуулахын тулд администрацитайгаа холбогдоно уу.", + "Disable" : "Идэвхгүй болгох", + "Enable" : "Идэвхжүүлэх", + "Breakout rooms" : "Салангид өрөөнүүд", + "Manage breakout rooms" : "Салангид өрөөнүүдийг удирдах", + "Set up breakout rooms for this conversation" : "Энэ яриад салангид өрөөнүүд тохируулах", + "Please select a valid PNG or JPG file" : "Хүчинтэй PNG эсвэл JPG файл сонгоно уу", + "Choose your conversation picture" : "Ярианы зургаа сонгоно уу", + "Choose" : "–°–æ–Ω–≥–æ—Ö", + "Error setting conversation picture" : "Ярианы зураг тохируулахад алдаа гарлаа", + "Could not set the conversation picture: {error}" : "Ярианы зургийг тохируулж чадсангүй: {error}", + "Error cropping conversation picture" : "Ярианы зургийг тайрахад алдаа гарлаа", + "Error removing conversation picture" : "Ярианы зургийг арилгахад алдаа гарлаа", + "Set emoji as conversation picture" : "Эможийг ярианы зураг болгох", + "Set background color for conversation picture" : "Ярианы зургийн дэвсгэр өнгө тохируулах", + "Upload conversation picture" : "Ярианы зураг байршуулах", + "Choose conversation picture from files" : "Файлуудаас ярианы зураг сонгох", + "Remove conversation picture" : "Ярианы зургийг арилгах", + "The file must be a PNG or JPG" : "Файл PNG эсвэл JPG байх ёстой", + "Set picture" : "Зураг тохируулах", + "Default permissions modified for {conversationName}" : "{conversationName}-ийн өгөгдмөл зөвшөөрлүүд өөрчлөгдлөө", + "Could not modify default permissions for {conversationName}" : "{conversationName}-ийн өгөгдмөл зөвшөөрлүүдийг өөрчлөх боломжгүй", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Энэ ярианы оролцогчдын анхдагч зөвшөөрлүүдийг засварла. Эдгээр тохиргоо модераторуудад нөлөөлөхгүй.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Энэ хэсэгт зөвшөөрлүүдийг өөрчлөх бүрд тодорхой оролцогчдод өмнө нь олгогдсон тусгай зөвшөөрлүүд устах болно.", + "All permissions" : "Бүх зөвшөөрөл", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Оролцогчид дуудлага эхлүүлэх, дуудлагад нэгдэх, аудио болон видео идэвхжүүлэх, дэлгэц хуваалцах зөвшөөрөлтэй.", + "Restricted" : "–•—è–∑–≥–∞–∞—Ä–ª–∞–≥–¥—Å–∞–Ω", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Оролцогчид дуудлагад нэгдэх боломжтой боловч модератор гараар зөвшөөрөл олгох хүртэл аудио, видео идэвхжүүлэх, дэлгэц хуваалцах боломжгүй.", + "Advanced permissions" : "Нарийвчилсан зөвшөөрлүүд", + "Edit permissions" : "Зөвшөөрлүүд засах", + "Conversation settings" : "Ярианы тохиргоо", + "Basic Info" : "Үндсэн мэдээлэл", + "Personal" : "–•—É–≤–∏–π–Ω", + "Moderation" : "Модераци", + "Setup overview" : "Тохиргооны тойм", + "Live transcription" : "Шууд транскрипц", + "Enable live transcription" : "Шууд транскрипцийг идэвхжүүлэх", + "Breakout Rooms" : "Салангид өрөөнүүд", + "Matterbridge" : "Matterbridge", + "Bots" : "Ботууд", + "Danger zone" : "Аюултай бүс", + "Archive conversation" : "Яриаг архивлах", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивлагдсан яриа анхдагчаар ярианы жагсаалтаас нуугддаг. Гэхдээ ярианы нэрээр хайх эсвэл архивлагдсан ярианы жагсаалтад хандахад харагдах болно.", + "Do you really want to leave \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" яриаг орхих уу?", + "You can archive this conversation instead." : "Та оронд нь энэ яриаг архивлаж болно.", + "Leave conversation" : "Яриаг орхих", + "You need to promote a new moderator before you can leave the conversation" : "Яриаг орхихын өмнө шинэ модератор дэвшүүлэх шаардлагатай", + "Delete conversation" : "Яриаг устгах", + "Do you really want to delete \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" яриаг устгах уу?", + "Error while deleting conversation" : "Яриаг устгахад алдаа гарлаа", + "Delete all chat messages" : "Бүх чат мессежийг устгах", + "Do you really want to delete all messages in \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" ярианы бүх мессежийг устгах уу?", + "Error while clearing chat history" : "Чатын түүхийг цэвэрлэхэд алдаа гарлаа", + "Be careful, these actions cannot be undone." : "Болгоомжтой байгаарай, эдгээр үйлдлийг буцаах боломжгүй.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Яриаг орхисны дараа хаалттай яриад дахин нэгдэхэд урилга шаардлагатай. Нээлттэй яриад хэдийд ч дахин нэгдэж болно.", + "Permanently delete this conversation." : "Энэ яриаг бүрмөсөн устгах.", + "Delete chat messages" : "Чат мессежийг устгах", + "Permanently delete all the messages in this conversation." : "Энэ ярианы бүх мессежийг бүрмөсөн устгах.", + "_%n hour_::_%n hours_" : ["%n цаг","%n цаг"], + "_%n day_::_%n days_" : ["%n өдөр","%n өдөр"], + "_%n week_::_%n weeks_" : ["%n долоо хоног","%n долоо хоног"], + "Custom expiration time" : "Тусгай дуусах хугацаа", + "Message expiration disabled" : "Мессежийн дуусах хугацаа идэвхгүй болсон", + "Message expiration set: {duration}" : "Мессежийн дуусах хугацаа тохируулагдсан: {duration}", + "Error when trying to set message expiration" : "Мессежийн дуусах хугацаа тохируулахад алдаа гарлаа", + "Message expiration" : "Мессежийн дуусах хугацаа", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Чат мессежүүд тодорхой хугацааны дараа хугацаа дуусч болно. Тэмдэглэл: Чатад хуваалцсан файлууд эзэмшигчийн хувьд устахгүй, гэхдээ яриан дотор хуваалцагдахаа болино.", + "Set message expiration" : "Мессежийн дуусах хугацаа тохируулах", + "Current message expiration" : "Одоогийн мессежийн дуусах хугацаа", + "Password copied to clipboard" : "Нууц үг санах ойд хуулагдлаа", + "Password could not be copied" : "Нууц үгийг хуулж чадсангүй", + "Guest access" : "Зочны хандалт", + "Breakout rooms are not allowed in public conversations." : "Нийтийн яриануудад салангид өрөөнүүд зөвшөөрөгдөхгүй.", + "Allow guests to join this conversation via link" : "Зочдод холбоосоор энэ яриад нэгдэхийг зөвшөөрөх", + "Password protection" : "Password protection", + "This conversation is password-protected. Guests need password to join" : "Энэ яриа нууц үгээр хамгаалагдсан. Зочид нэгдэхэд нууц үг хэрэгтэй", + "Password protection is needed for public conversations" : "Нийтийн яриануудад нууц үгээр хамгаалалт шаардлагатай", + "Set a password" : "Нууц үг тохируулах", + "Change password" : "Нууц үг өөрчлөх", + "Enter new password" : "Шинэ нууц үг оруулах", + "Save password" : "Нууц үг хадгалах", + "Copy password" : "Нууц үг хуулах", + "Guests are allowed to join this conversation via link" : "Зочдод холбоосоор энэ яриад нэгдэх зөвшөөрөгдсөн", + "Guests are not allowed to join this conversation" : "Зочдод энэ яриад нэгдэх зөвшөөрөгдөөгүй", + "Resend invitations" : "Урилга дахин илгээх", + "This conversation is open to both registered users and users created with the Guests app" : "Энэ яриа бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээлттэй", + "This conversation is open to registered users" : "Энэ яриа бүртгэлтэй хэрэглэгчдэд нээлттэй", + "This conversation is limited to the current participants" : "Энэ яриа одоогийн оролцогчдоор хязгаарлагдсан", + "You opened the conversation to both registered users and users created with the Guests app" : "Та яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "Error occurred when opening or limiting the conversation" : "Яриаг нээх эсвэл хязгаарлахад алдаа гарлаа", + "Open conversation to registered users, showing it in search results" : "Бүртгэлтэй хэрэглэгчдэд яриа нээх, хайлтын үр дүнд харуулах", + "Also open to users created with the Guests app" : "Мөн Зочин апп-аар үүсгэсэн хэрэглэгчдэд нээлттэй", + "Open conversation" : "Яриа нээх", + "Set language spoken in calls" : "Дуудлагад ярих хэлийг тохируулах", + "Languages could not be loaded" : "Хэлүүдийг ачаалж чадсангүй", + "Invalid language" : "Буруу хэл", + "Default language (English)" : "Өгөгдмөл хэл (Англи)", + "Default live transcription language set" : "Өгөгдмөл шууд транскрипцийн хэл тохируулагдлаа", + "Live transcription language set: {languageName}" : "Шууд транскрипцийн хэл тохируулагдсан: {languageName}", + "Error when trying to set live transcription language" : "Шууд транскрипцийн хэл тохируулахад алдаа гарлаа", + "Start time: {date}" : "Эхлэх цаг: {date}", + "Start time has been updated" : "Эхлэх цаг шинэчлэгдлээ", + "Error occurred while updating start time" : "Эхлэх цагийг шинэчлэхэд алдаа гарлаа", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Лобби идэвхжүүлснээр модератор биш хүмүүсийг явагдаж буй дуудлагаас хасна.", + "Enable lobby, restricting the conversation to moderators" : "Лобби идэвхжүүлж, яриаг модераторуудаар хязгаарлах", + "Meeting start time" : "Уулзалтын эхлэх цаг", + "Start time (optional)" : "Эхлэх цаг (заавал биш)", + "Import email participants" : "Имэйл оролцогчдыг импортлох", + "You can import a list of email participants from a CSV file." : "Та CSV файлаас имэйл оролцогчдын жагсаалтыг импортлож болно.", + "Poll drafts" : "Санал асуулгын ноорогууд", + "Browse poll drafts" : "Санал асуулгын нооргуудыг үзэх", + "Error occurred when locking the conversation" : "Яриаг түгжихэд алдаа гарлаа", + "Error occurred when unlocking the conversation" : "Ярианы түгжээг тайлахад алдаа гарлаа", + "Lock conversation" : "Яриаг түгжих", + "This will also terminate the ongoing call." : "Энэ мөн явагдаж буй дуудлагыг дуусгана.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Хэн ч мессеж бичих эсвэл дуудлага эхлүүлэхээс сэргийлж яриаг түгж", + "Edit" : "–∑–∞—Å–≤–∞—Ä–ª–∞—Ö", + "More information" : "Дэлгэрэнгүй мэдээлэл", + "Delete" : "–£—Å—Ç–≥–∞—Ö", + "Add new bridged channel to current conversation" : "Одоогийн яриад шинэ гүүр суваг нэмэх", + "unknown state" : "үл мэдэгдэх төлөв", + "running" : "ажиллаж байна", + "not running, check Matterbridge log" : "ажиллаагүй байна, Matterbridge логоо шалгана уу", + "not running" : "ажиллаагүй байна", + "Bridge saved" : "Гүүр хадгалагдлаа", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge-ийн тусламжтай янз бүрийн шуурхай мессежийн системүүдийн сувгуудыг холбож болно.", + "More info on Matterbridge" : "Matterbridge-ийн талаар дэлгэрэнгүй", + "Messaging systems" : "Мессежийн системүүд", + "Enable bridge" : "Гүүрийг идэвхжүүлэх", + "Show Matterbridge log" : "Matterbridge лог харуулах", + "Log content" : "Логын агуулга", + "Only moderators are allowed to mention @all" : "Зөвхөн модераторууд @all дурдах эрхтэй", + "All participants are allowed to mention @all" : "Бүх оролцогчид @all дурдах эрхтэй", + "Participants are now allowed to mention @all." : "Оролцогчдод одоо @all дурдах зөвшөөрөгдлөө.", + "Mentioning @all has been limited to moderators." : "@all дурдахыг модераторуудаар хязгаарлалаа.", + "Allow participants to mention @all" : "Оролцогчдод @all дурдахыг зөвшөөрөх", + "Mention permissions" : "Дурдах зөвшөөрлүүд", + "Notifications" : "–ú—ç–¥—ç–≥–¥—ç–ª", + "Notify about calls in this conversation" : "Энэ ярианы дуудлагуудын талаар мэдэгдэх", + "Important conversation" : "Чухал яриа", + "\"Do not disturb\" user status is ignored for important conversations" : "Чухал яриануудад \"Бүү саад бол\" хэрэглэгчийн төлөвийг үл хэрэгсэнэ", + "Sensitive conversation" : "Мэдрэмтгий яриа", + "Message preview will be disabled in conversation list and notifications" : "Мессежийн урьдчилсан харагдац ярианы жагсаалт болон мэдэгдлүүдэд идэвхгүй болно", + "Recording consent is required for calls in this conversation" : "Энэ ярианы дуудлагуудад бичлэгийн зөвшөөрөл шаардлагатай", + "Recording consent is not required for calls in this conversation" : "Энэ ярианы дуудлагуудад бичлэгийн зөвшөөрөл шаардлагагүй", + "Recording consent requirement was updated" : "Бичлэгийн зөвшөөрлийн шаардлага шинэчлэгдлээ", + "Error occurred while updating recording consent" : "Бичлэгийн зөвшөөрлийг шинэчлэхэд алдаа гарлаа", + "Recording Consent" : "Бичлэгийн зөвшөөрөл", + "Recording consent cannot be changed once a call or breakout session has started." : "Дуудлага эсвэл салангид хуралдаан эхэлсний дараа бичлэгийн зөвшөөрлийг өөрчлөх боломжгүй.", + "Require recording consent before joining call in this conversation" : "Энэ ярианы дуудлагад нэгдэхээс өмнө бичлэгийн зөвшөөрөл шаардах", + "Recording consent is required for all calls" : "Бүх дуудлагад бичлэгийн зөвшөөрөл шаардлагатай", + "SIP dial-in is now possible without PIN requirement" : "PIN шаардлагагүйгээр SIP залгах боломжтой болсон", + "SIP dial-in is now enabled" : "SIP залгалт одоо идэвхжлээ", + "SIP dial-in is now disabled" : "SIP залгалт одоо идэвхгүй болсон", + "Error occurred when enabling SIP dial-in" : "SIP залгалтыг идэвхжүүлэхэд алдаа гарлаа", + "Error occurred when disabling SIP dial-in" : "SIP залгалтыг идэвхгүй болгоход алдаа гарлаа", + "Phone and SIP dial-in" : "Утас болон SIP залгалт", + "Enable phone and SIP dial-in" : "Утас болон SIP залгалтыг идэвхжүүлэх", + "Allow to dial-in without a PIN" : "PIN-гүйгээр залгахыг зөвшөөрөх", + "Ongoing" : "Үргэлжилж байна", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n хүн зөвшөөрсөн","%n хүн зөвшөөрсөн"], + "_%n person declined_::_%n people declined_" : ["%n хүн татгалзсан","%n хүн татгалзсан"], + "_and %n other attachment_::_and %n other attachments_" : ["болон %n бусад хавсралт","болон %n бусад хавсралт"], + "With {displayName}" : "{displayName}-тай", + "In {conversation}" : "{conversation} яриад", + "View attachment" : "Хавсралт харах", + "Join" : "Нэгдэх", + "View conversation" : "Яриа харах", + "View event on Calendar" : "Календарт арга хэмжээ харах", + "Error while creating the conversation" : "Яриа үүсгэхэд алдаа гарлаа", + "Hello, {displayName}" : "Сайн байна уу, {displayName}", + "Start meeting now" : "Уулзалтыг одоо эхлүүлэх", + "Give your meeting a title" : "Уулзалтынхаа гарчгийг оруулна уу", + "Create and copy link" : "Үүсгэж холбоос хуулах", + "Create a new conversation" : "Шинэ яриа үүсгэх", + "Join open conversations" : "Нээлттэй яриануудад нэгдэх", + "Call a phone number" : "Утасны дугаар руу залгах", + "Scroll backward" : "Арагш гүйлгэх", + "Scroll forward" : "Урагш гүйлгэх", + "Schedule meetings" : "Уулзалтууд товлох", + "You don't have any upcoming meetings" : "Танд удахгүй болох уулзалт байхгүй", + "Open calendar" : "Календар нээх", + "Unread mentions" : "Уншаагүй дурдалтууд", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Таныг дурдсан мессежүүд энд харагдана. @ бичээд нэрийг нь оруулж хүмүүсийг дурдаж болно", + "Upcoming reminders" : "Удахгүй болох сануулгууд", + "Message reminders" : "Мессежийн сануулгууд", + "Set a reminder on a message to be notified" : "Мэдэгдэл авахын тулд мессеж дээр сануулга тохируулах", + "Start a group conversation" : "Бүлгийн яриа эхлүүлэх", + "Create conversation" : "Яриа үүсгэх", + "Enter your name" : "Нэрээ оруулна уу", + "Submit name and join" : "Нэр илгээж нэгдэх", + "Do you already have an account?" : "Танд аль хэдийн бүртгэл байна уу?", + "Log in" : "–ù—ç–≤—Ç—Ä—ç—Ö", + "Error while verifying uploaded file" : "Байршуулсан файлыг баталгаажуулахад алдаа гарлаа", + "Uploaded file is verified" : "Байршуулсан файл баталгаажлаа", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Агуулгын формат нь таслалаар тусгаарлагдсан утгууд (CSV):
- Толгой мөр шаардлагатай бөгөөд \"name\",\"email\" эсвэл зөвхөн \"email\" байх ёстой
- Мөр бүрт нэг оруулга (жишээ нь \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Оролцогчид амжилттай нэмэгдлээ", + "Error while adding participants" : "Оролцогчид нэмэхэд алдаа гарлаа", + "Import a file" : "Файл импортлох", + "Browse" : "Хайх", + "This might take a moment" : "Энэ хэсэг хугацаа шаардаж болно", + "Send invitations" : "Урилга илгээх", + "_%n invalid email_::_%n invalid emails_" : ["%n буруу имэйл","%n буруу имэйл"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n имэйл аль хэдийн импортлогдсон эсвэл давхардсан","%n имэйл аль хэдийн импортлогдсон эсвэл давхардсан"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n урилга илгээх боломжтой","%n урилга илгээх боломжтой"], + "An error occurred while calling a phone number" : "Утасны дугаар руу залгахад алдаа гарлаа", + "Phone number could not be called: {error}" : "Утасны дугаар руу залгах боломжгүй: {error}", + "Phone number could not be called" : "Утасны дугаар руу залгах боломжгүй", + "Search participants or phone numbers" : "Оролцогчид эсвэл утасны дугаар хайх", + "Mark as read" : "Уншсан гэж тэмдэглэх", + "Mark as unread" : "Уншаагүй гэж тэмдэглэх", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "Unarchive conversation" : "Архиваас гаргах", + "Ignore \"Do not disturb\"" : "\"Бүү саад бол\"-ыг үл хэрэгсэх", + "You need to promote a new moderator before you can leave the conversation." : "Яриаг орхихын өмнө шинэ модератор дэвшүүлэх шаардлагатай.", + "Conversation actions" : "Ярианы үйлдлүүд", + "Notify about calls" : "Дуудлагуудын талаар мэдэгдэх", + "Hide message text" : "Мессежийн текстийг нуух", + "Pending invitations" : "Хүлээгдэж буй урилгууд", + "From {user} at {remoteServer}" : "{remoteServer}-ийн {user}-аас", + "Decline invitation" : "Урилгаас татгалзах", + "Accept invitation" : "Урилга хүлээн авах", + "No pending invitations" : "Хүлээгдэж буй урилга байхгүй", + "Home" : "–ù“ؓؗÄ", + "Unread" : "Уншаагүй", + "Mentions" : "Дурдалтууд", + "Meetings" : "Уулзалтууд", + "Alphabetically" : "Цагаан толгойн дарааллаар", + "No followed threads" : "Дагасан thread байхгүй", + "No matches found" : "Тохирох зүйл олдсонгүй", + "No conversations found" : "Яриа олдсонгүй", + "You have no archived conversations." : "Танд архивлагдсан яриа байхгүй.", + "Subscribe to an existing thread or start your own." : "Одоо байгаа thread-д бүртгүүлэх эсвэл өөрийнхөө thread эхлүүлэх.", + "You have no unread mentions." : "Танд уншаагүй дурдалт байхгүй.", + "You have no unread messages." : "Танд уншаагүй мессеж байхгүй.", + "An error occurred while performing the search" : "Хайлт хийхэд алдаа гарлаа", + "Conversation list" : "Ярианы жагсаалт", + "Filter conversations by" : "Яриануудыг шүүх", + "Unread messages" : "Уншаагүй мессежүүд", + "Meeting conversations" : "Уулзалтын яриануудууд", + "Clear filters" : "Шүүлтүүр арилгах", + "New personal note" : "Шинэ хувийн тэмдэглэл", + "Back to conversations" : "Яриануудруу буцах", + "Archived conversations" : "Архивлагдсан яриануудууд", + "Threads" : "Thread-үүд", + "Clear filter" : "Шүүлтүүр арилгах", + "Show more threads" : "Илүү олон thread харуулах", + "App settings" : "Апп тохиргоо", + "Users" : "—Ö—ç—Ä—ç–≥–ª—ç–≥—á", + "Groups" : "–±“Ø–ª—ç–≥“ؓؖ¥", + "Teams" : "Багууд", + "Federated users" : "Федерацийн хэрэглэгчид", + "New private conversation" : "Шинэ хувийн яриа", + "Other sources" : "Бусад эх үүсвэрүүд", + "Open conversations" : "Нээлттэй яриануудууд", + "No search results" : "Хайлтын үр дүн байхгүй", + "Users, groups and teams" : "Хэрэглэгчид, бүлгүүд болон багууд", + "Users and groups" : "Хэрэглэгчид болон бүлгүүд", + "Users and teams" : "Хэрэглэгчид болон багууд", + "Groups and teams" : "Бүлгүүд болон багууд", + "New group conversation" : "Шинэ бүлгийн яриа", + "The meeting will start soon" : "Уулзалт удахгүй эхэлнэ", + "This meeting is scheduled for {startTime}" : "Энэ уулзалт {startTime}-д товлогдсон", + "You are currently waiting in the lobby" : "Та одоо лоббид хүлээж байна", + "Enable noise suppression" : "Дуу чимээ дарагчийг идэвхжүүлэх", + "Reduce background noises for better voice quality" : "Дуу хоолойн чанарыг сайжруулахын тулд арын дуу чимээг бууруулах", + "Enable echo cancellation" : "Цуурайн арилгалтыг идэвхжүүлэх", + "Minimize echo effect from own surrounding" : "Орчны цуурайн нөлөөг багасгах", + "Enable auto gain control" : "Автомат олшруулалтын хяналтыг идэвхжүүлэх", + "Dynamically adjust microphone volume for consistent level" : "Тогтвортой түвшин хадгалахын тулд микрофоны дууны хэмжээг автоматаар тохируулах", + "Select microphone" : "Микрофон сонгох", + "No microphone available" : "Микрофон байхгүй", + "Select speaker" : "Чанга яригч сонгох", + "No speaker available" : "Чанга яригч байхгүй", + "Select camera" : "Камер сонгох", + "No camera available" : "Камер байхгүй", + "Select a device" : "Төхөөрөмж сонгох", + "Test speakers" : "Чанга яригчийг тест хийх", + "Test" : "Тест", + "Devices" : "–¢”©—Ö”©”©—Ä”©–º–∂“ؓؖ¥", + "Backgrounds" : "Дэвсгэрүүд", + "No audio" : "Аудио байхгүй", + "No camera" : "Камер байхгүй", + "Display video as you will see it (mirrored)" : "Видеог таны харах байдлаар харуулах (толь)", + "Display video as others will see it" : "Видеог бусдын харах байдлаар харуулах", + "Calls are not supported in your browser" : "Таны хөтөч дуудлагыг дэмжихгүй", + "Access to microphone is only possible with HTTPS" : "Микрофонд хандах нь зөвхөн HTTPS-ээр боломжтой", + "Access to microphone was denied" : "Микрофонд хандах эрхийг татгалзлаа", + "Error while accessing microphone" : "Микрофонд хандахад алдаа гарлаа", + "Access to camera is only possible with HTTPS" : "Камерт хандах нь зөвхөн HTTPS-ээр боломжтой", + "The call is being recorded." : "Дуудлага бичигдэж байна.", + "The call might be recorded." : "Дуудлага бичигдэж байж болзошгүй.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Бичлэг нь таны дуу, камерын видео болон дэлгэц хуваалцалтыг агуулж болно. Дуудлагад нэгдэхийн өмнө таны зөвшөөрөл шаардлагатай.", + "Give consent to the recording of this call" : "Энэ дуудлагын бичлэгийг зөвшөөрөх", + "Show more info" : "Дэлгэрэнгүй мэдээлэл харуулах", + "Audio is not available" : "Аудио боломжгүй", + "Video is not available" : "Видео боломжгүй", + "Start recording immediately with the call" : "Дуудлагын хамт шууд бичлэг эхлүүлэх", + "Notify all participants about this call" : "Бүх оролцогчдод энэ дуудлагын талаар мэдэгдэх", + "Apply settings" : "Тохиргоог хэрэглэх", + "Select virtual office background" : "Виртуал оффисын дэвсгэр сонгох", + "Select virtual home background" : "Виртуал гэрийн дэвсгэр сонгох", + "Select virtual abstract background" : "Виртуал хийсвэр дэвсгэр сонгох", + "Select virtual beach background" : "Виртуал далайн эрэг дэвсгэр сонгох", + "Select virtual park background" : "Виртуал цэцэрлэгт хүрээлэн дэвсгэр сонгох", + "Select virtual theater background" : "Виртуал театр дэвсгэр сонгох", + "Select virtual library background" : "Виртуал номын сан дэвсгэр сонгох", + "Select virtual space station background" : "Виртуал сансрын станц дэвсгэр сонгох", + "Error while uploading the file" : "Файл байршуулахад алдаа гарлаа", + "Select a file" : "Файл сонгох", + "Invalid path selected" : "Буруу зам сонгосон", + "Select virtual background from file {fileName}" : "{fileName} файлаас виртуал дэвсгэр сонгох", + "Blur" : "Бүдэгрүүлэх", + "Upload" : "–±–∞–π—Ä—à—É—É–ª–∞—Ö", + "Files" : "—Ñ–∞–π–ª—É—É–¥", + "(editing)" : "(засаж байна)", + "(edited)" : "(засагдсан)", + "The message has expired or has been deleted" : "Мессеж дууссан эсвэл устгагдсан", + "Cancel quote" : "Ишлэлийг болих", + "24 hours" : "24 —Ü–∞–≥", + "7 days" : "7 хоног", + "30 days" : "30 хоног", + "Until unpin" : "Бэхлэлт тайлах хүртэл", + "Edited by {actor}" : "{actor} засварласан", + "Pinned by you" : "Та бэхлэсэн", + "Pinned by {actor}" : "{actor} бэхлэсэн", + "Until {absoluteDate}" : "{absoluteDate} хүртэл", + "Message text copied to clipboard" : "Мессежийн текст санах ойд хуулагдлаа", + "Message text could not be copied" : "Мессежийн текстийг хуулж чадсангүй", + "Message forwarded to \"Note to self\"" : "Мессеж \"Өөртөө тэмдэглэл\" рүү дамжуулагдлаа", + "Error while forwarding message to \"Note to self\"" : "Мессежийг \"Өөртөө тэмдэглэл\" рүү дамжуулахад алдаа гарлаа", + "A reminder was successfully removed" : "Сануулга амжилттай арилгагдлаа", + "Error occurred when removing a reminder" : "Сануулга арилгахад алдаа гарлаа", + "A reminder was successfully set at {datetime}" : "Сануулга {datetime}-д амжилттай тохируулагдлаа", + "Error occurred when creating a reminder" : "Сануулга үүсгэхэд алдаа гарлаа", + "Add a reaction to this message" : "Энэ мессежид хариу үйлдэл нэмэх", + "Reply" : "—Ö–∞—Ä–∏—É–ª—Ç", + "More actions" : "Нэмэлт үйлдлүүд", + "Set reminder" : "Сануулга тохируулах", + "Pin message" : "Мессеж бэхлэх", + "Unpin message" : "Мессеж бэхлэлт тайлах", + "Reply privately" : "Хувийн хариулах", + "Edit message" : "Мессеж засах", + "Copy message" : "Мессеж хуулах", + "Copy message link" : "Мессеж холбоос хуулах", + "Go to file" : "Файл руу очих", + "Download file" : "Файл татах", + "Go to thread" : "Thread руу очих", + "Edit thread details" : "Thread дэлгэрэнгүйг засах", + "Forward message" : "Мессеж дамжуулах", + "Translate" : "–û—Ä—á—É—É–ª–≥–∞", + "Set custom reminder" : "Тусгай сануулга тохируулах", + "Keep pinned for" : "Бэхлэгдсэн байх хугацаа", + "Set custom period" : "Тусгай хугацаа тохируулах", + "Close reactions menu" : "Хариу үйлдлийн цэсийг хаах", + "React with {emoji}" : "{emoji}-ээр хариу үзүүлэх", + "React with another emoji" : "Өөр эможигоор хариу үзүүлэх", + "Choose a conversation to forward the selected message." : "Сонгосон мессежийг дамжуулах яриа сонгоно уу.", + "Error while forwarding message" : "Мессеж дамжуулахад алдаа гарлаа", + "The message has been forwarded to {selectedConversationName}" : "Мессеж {selectedConversationName} руу дамжуулагдлаа", + "Dismiss" : "–ê—Ä–∏–ª–≥–∞—Ö", + "Go to conversation" : "Яриа руу очих", + "Detect language" : "Хэл илрүүлэх", + "The message could not be translated" : "Мессежийг орчуулж чадсангүй", + "Translation copied to clipboard" : "Орчуулга санах ойд хуулагдлаа", + "Translation could not be copied" : "Орчуулгыг хуулж чадсангүй", + "Translate message" : "Мессеж орчуулах", + "Source language to translate from" : "Орчуулах эх хэл", + "Translate from" : "Орчуулах хэл", + "Target language to translate into" : "Орчуулах зорилтот хэл", + "Translate to" : "Орчуулах хэл", + "Translating" : "Орчуулж байна", + "Copy translated text" : "Орчуулсан текстийг хуулах", + "Error when scheduling the message" : "Мессеж товлоход алдаа гарлаа", + "Reschedule" : "Дахин товлох", + "Send now" : "Одоо илгээх", + "Choose a time" : "Цаг сонгох", + "Send at custom time" : "Тусгай цагт илгээх", + "Will be sent without notification" : "Мэдэгдэлгүй илгээгдэнэ", + "Message read by everyone who shares their reading status" : "Унших төлөвөө хуваалцдаг бүгд мессежийг уншсан", + "Message sent" : "Мессеж илгээгдсэн", + "Sent without notification" : "Мэдэгдэлгүй илгээгдсэн", + "Deleting message" : "Мессеж устгаж байна", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Мессеж амжилттай устгагдсан, гэхдээ бот эсвэл Matterbridge тохируулагдсан тул мессеж аль хэдийн бусад үйлчилгээнүүд рүү тархсан байж болно", + "Message deleted successfully" : "Мессеж амжилттай устгагдлаа", + "Message could not be deleted because it is too old" : "Мессеж хэт хуучин учраас устгах боломжгүй", + "Only normal chat messages can be deleted" : "Зөвхөн энгийн чат мессежийг устгах боломжтой", + "An error occurred while deleting the message" : "Мессеж устгахад алдаа гарлаа", + "Pinned" : "Бэхлэгдсэн", + "Your browser does not support playing audio files" : "Таны хөтөч аудио файл тоглуулахыг дэмжихгүй", + "Contact" : "Холбоо барих", + "{stack} in {board}" : "{board} дахь {stack}", + "Deck Card" : "Deck карт", + "Remove {fileName}" : "{fileName} арилгах", + "Open this location in OpenStreetMap" : "Энэ байршлыг OpenStreetMap-д нээх", + "_%n reply_::_%n replies_" : ["%n хариулт","%n хариулт"], + "Sending message" : "Мессеж илгээж байна", + "Failed to send the message. Click to try again" : "Мессеж илгээж чадсангүй. Дахин оролдохын тулд дарна уу", + "Not enough free space to upload file" : "Файл байршуулах хангалттай зай байхгүй", + "You cannot send messages to this conversation at the moment" : "Та одоогоор энэ яриад мессеж илгээх боломжгүй", + "Could not update the message" : "Мессежийг шинэчлэж чадсангүй", + "Reply to thread \"{threadTitle}\"" : "\"{threadTitle}\" хэлэлцүүлэгт хариулах", + "_%n vote_::_%n votes_" : ["%n санал","%n санал"], + "Edit poll draft" : "Санал асуулгын ноорог засах", + "Delete poll draft" : "Санал асуулгын ноорог устгах", + "Open poll" : "Санал асуулга нээх", + "See results" : "Үр дүн харах", + "Reactions" : "Хариу үйлдлүүд", + "No permission to post reactions in this conversation" : "Энэ яриад хариу үйлдэл илгээх зөвшөөрөл байхгүй", + "and {participant}" : "болон {participant}", + "_and %n other participant_::_and %n other participants_" : ["болон %n бусад оролцогч","болон %n бусад оролцогч"], + "Show all reactions" : "Бүх хариу үйлдлийг харуулах", + "Add more reactions" : "Илүү олон хариу үйлдэл нэмэх", + "Show or collapse system messages" : "Системийн мессежийг харуулах эсвэл хураах", + "No messages" : "Мессеж байхгүй", + "All messages have expired or have been deleted." : "Бүх мессеж дууссан эсвэл устгагдсан.", + "{author} (pinned by you)" : "{author} (та бэхэлсэн)", + "{author} (pinned by {actor})" : "{author} ({actor} бэхэлсэн)", + "Unpin" : "Бэхлэлт авах", + "Cancel search" : "Хайлт болих", + "Add a phone number" : "Утасны дугаар нэмэх", + "Error: A password is required to create the conversation." : "Алдаа: Яриа үүсгэхэд нууц үг шаардлагатай.", + "All set, the conversation \"{conversationName}\" was created." : "Бүгд бэлэн, \"{conversationName}\" яриа үүсгэгдлээ.", + "Create a new group conversation" : "Шинэ бүлгийн яриа үүсгэх", + "Add participants" : "Оролцогчид нэмэх", + "Maximum length exceeded ({maxlength} characters)" : "Хамгийн их урт хэтэрсэн ({maxlength} тэмдэгт)", + "Conversation visibility" : "Ярианы харагдац", + "Allow guests to join via link" : "Зочдод холбоосоор нэгдэхийг зөвшөөрөх", + "Enter password" : "Нууц үг оруулах", + "This conversation has been locked" : "Энэ яриа түгжигдсэн", + "No permission to post messages in this conversation" : "Энэ яриад мессеж илгээх зөвшөөрөл байхгүй", + "Write a message without notification" : "Мэдэгдэлгүй мессеж бичих", + "Create a thread silently" : "Thread чимээгүй үүсгэх", + "Create a thread" : "Thread үүсгэх", + "Send message silently" : "Мессежийг чимээгүй илгээх", + "Send message" : "Мессеж илгээх", + "Send without notification" : "Мэдэгдэлгүй илгээх", + "The participant will not be notified about new messages" : "Оролцогчид шинэ мессежийн талаар мэдэгдэхгүй", + "Participants will not be notified about new messages" : "Оролцогчдод шинэ мессежийн талаар мэдэгдэхгүй", + "Message will be sent {datetimeString}" : "Мессеж {datetimeString}-д илгээгдэнэ", + "Thread title is required" : "Thread гарчиг шаардлагатай", + "Message text is required" : "Мессежийн текст шаардлагатай", + "The message could not be edited" : "Мессежийг засварлаж чадсангүй", + "File to share" : "Хуваалцах файл", + "File upload is not available in this conversation" : "Энэ яриад файл байршуулах боломжгүй", + "Message was successfully scheduled" : "Мессеж амжилттай товлогдлоо", + "Add emoji" : "Эможи нэмэх", + "Adding a mention will only notify users who did not read the message." : "Дурдалт нэмэх нь зөвхөн мессежийг уншаагүй хэрэглэгчдэд мэдэгдэнэ.", + "Thread title" : "Thread гарчиг", + "Send later" : "Дараа илгээх", + "Show scheduled messages" : "Товлогдсон мессежүүдийг харуулах", + "Cancel editing" : "Засварлалт болих", + "Schedule message" : "Мессеж товлох", + "{user} is out of office and might not respond." : "{user} оффисоос гадуур байгаа тул хариулахгүй байж болно.", + "Absence period: {startDate} - {endDate}" : "Эзгүй хугацаа: {startDate} - {endDate}", + "Replacement:" : "Орлогч:", + "Share from {nextcloud}" : "{nextcloud}-оос хуваалцах", + "Share from Files" : "Файлуудаас хуваалцах", + "Share files to the conversation" : "Яриад файлууд хуваалцах", + "Upload from device" : "Төхөөрөмжөөс байршуулах", + "Create new poll" : "Шинэ санал асуулга үүсгэх", + "Smart picker" : "Ухаалаг сонгогч", + "Record voice message" : "Дуут мессеж бичих", + "End recording and send" : "Бичлэг дуусгаж илгээх", + "Dismiss recording" : "Бичлэгийг хаях", + "Access to the microphone was denied" : "Микрофонд хандах эрхийг татгалзлаа", + "Microphone either not available or disabled in settings" : "Микрофон боломжгүй эсвэл тохиргоонд идэвхгүй болсон", + "Error while recording audio" : "Аудио бичихэд алдаа гарлаа", + "Summary is AI generated and might contain mistakes" : "Хураангуй нь AI-аар үүсгэгдсэн тул алдаа агуулж болзошгүй", + "Error occurred during a summary generation" : "Хураангуй үүсгэхэд алдаа гарлаа", + "New file" : "Шинэ файл", + "Blank" : "Хоосон", + "Error while creating file" : "Файл үүсгэхэд алдаа гарлаа", + "Create and share a new file" : "Шинэ файл үүсгэж хуваалцах", + "Name of the new file" : "Шинэ файлын нэр", + "Create file" : "Файл үүсгэх", + "Add more files" : "Илүү олон файл нэмэх", + "Send" : "–∏–ª–≥—ç—ç—Ö", + "In this conversation {user} can:" : "Энэ яриад {user} чадна:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} дахь оролцогчдын анхдагч зөвшөөрлүүдийг засварлах", + "Start a call" : "Дуудлага эхлүүлэх", + "Skip the lobby" : "Лоббийг алгасах", + "Can post messages" : "Зурвас бичих боломжтой", + "Can post messages and reactions" : "Мессеж болон хариу үйлдэл илгээх боломжтой", + "Can add reactions" : "Хариу үйлдэл нэмэх боломжтой", + "Enable the microphone" : "Микрофонийг идэвхжүүлэх", + "Enable the camera" : "Камерыг идэвхжүүлэх", + "Share the screen" : "Дэлгэцийг хуваалцах", + "Update permissions" : "Зөвшөөрлүүдийг шинэчлэх", + "Updating permissions" : "Зөвшөөрлүүдийг шинэчилж байна", + "No poll drafts" : "Санал асуулгын ноорог байхгүй", + "There is no poll drafts yet saved for this conversation" : "Энэ яриад санал асуулгын ноорог хадгалагдаагүй байна", + "Create poll in {name}" : "{name}-д санал асуулга үүсгэх", + "Create poll" : "Санал асуулга үүсгэх", + "Error while importing poll" : "Санал асуулга импортлоход алдаа гарлаа", + "Question" : "Асуулт", + "Ask a question" : "Асуулт асуух", + "Import draft from file" : "Файлаас ноорог импортлох", + "Answers" : "Хариултууд", + "Answer {option}" : "Хариулт {option}", + "Delete poll option" : "Санал асуулгын сонголтыг устгах", + "Add answer" : "Хариулт нэмэх", + "Settings" : "–¢–æ—Ö–∏—Ä–≥–æ–æ", + "Anonymous poll" : "Нэргүй санал асуулга", + "Multiple answers" : "Олон хариулт", + "Save as draft" : "Ноорог болгон хадгалах", + "Export draft to file" : "Нооргийг файл руу экспортлох", + "You voted for this option" : "Та энэ сонголтод санал өгсөн", + "End poll" : "Санал асуулга дуусгах", + "Change your vote" : "Санал өөрчлөх", + "Results" : "“Æ—Ä –¥“Ø–Ω", + "Voted participants" : "Санал өгсөн оролцогчид", + "Send a message to \"{roomName}\"" : "\"{roomName}\" руу мессеж илгээх", + "Hide list of participants" : "Оролцогчдын жагсаалтыг нуух", + "Show list of participants" : "Оролцогчдын жагсаалтыг харуулах", + "Assistance requested in {roomName}" : "{roomName}-д тусламж хүссэн", + "The message was sent to \"{roomName}\"" : "Мессеж \"{roomName}\" руу илгээгдлээ", + "Dismiss request for assistance" : "Тусламжийн хүсэлтийг хаях", + "Send message to room" : "Өрөөнд мессеж илгээх", + "Back to main room" : "Үндсэн өрөө рүү буцах", + "Back to your room" : "Өөрийн өрөө рүү буцах", + "Message all rooms" : "Бүх өрөөнд мессеж илгээх", + "Start session" : "Сесс эхлүүлэх", + "Start a call before you start a breakout room session" : "Салангид өрөөний сесс эхлүүлэхээс өмнө дуудлага эхлүүлнэ үү", + "Stop session" : "Сесс зогсоох", + "The message was sent to all breakout rooms" : "Мессеж бүх салангид өрөөнүүдэд илгээгдлээ", + "Send a message to all breakout rooms" : "Бүх салангид өрөөнүүдэд мессеж илгээх", + "Breakout rooms are not started" : "Салангид өрөөнүүд эхлээгүй", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Өндөр гүйцэтгэлтэй backend-гүй дуудлагууд холболтын асуудал болон төхөөрөмжүүдэд их ачаалал үүсгэж болно. {linkstart}Дэлгэрэнгүй{linkend}", + "Talk setup incomplete" : "Talk тохиргоо дуусаагүй", + "Disable lobby" : "Лоббийг идэвхгүй болгох", + "Settings for participant \"{user}\"" : "\"{user}\" оролцогчийн тохиргоо", + "Participant \"{user}\"" : "\"{user}\" оролцогч", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "зочин", + "Call rejected" : "Дуудлага татгалзагдсан", + "{time} talking time" : "{time} ярьсан хугацаа", + "Raised their hand" : "Гараа өргөсөн", + "Joined with video" : "Видеотой нэгдсэн", + "Joined via phone" : "Утсаар нэгдсэн", + "Joined with audio" : "Аудиотой нэгдсэн", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текст {maxLength} тэмдэгтээс бага эсвэл тэнцүү байх ёстой. Таны одоогийн текст {charactersCount} тэмдэгт урттай.", + "Remove group and members" : "Бүлэг болон гишүүдийг хасах", + "Remove team and members" : "Баг болон гишүүдийг хасах", + "Remove participant" : "Оролцогчийг хасах", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Та \"{displayName}\" бүлэг болон түүний гишүүдийг энэ яриаас устгахыг хүсэж байна уу?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Та \"{displayName}\" баг болон түүний гишүүдийг энэ яриаас устгахыг хүсэж байна уу?", + "Do you really want to remove {displayName} from this conversation?" : "Та үнэхээр {displayName}-г энэ яриаас хасах уу?", + "Notification was sent to {displayName}" : "Мэдэгдэл {displayName}-д илгээгдлээ", + "Could not send notification to {displayName}" : "{displayName}-д мэдэгдэл илгээж чадсангүй", + "Permissions granted to {displayName}" : "{displayName}-д зөвшөөрөл олгогдлоо", + "Could not modify permissions for {displayName}" : "{displayName}-ийн зөвшөөрлийг өөрчлөх боломжгүй", + "Permissions removed for {displayName}" : "{displayName}-ийн зөвшөөрлүүд хасагдлаа", + "Permissions set to default for {displayName}" : "{displayName}-ийн зөвшөөрлүүд өгөгдмөл болгогдлоо", + "Phone number could not be hung up" : "Утасны дугаарыг тасалж чадсангүй", + "Phone number could not be put on hold" : "Утасны дугаарыг хүлээлгээнд оруулж чадсангүй", + "Phone number could not be muted" : "Утасны дугаарыг хааж чадсангүй", + "Phone number could not be unmuted" : "Утасны дугаарын хаалтыг нээж чадсангүй", + "DTMF message could not be sent" : "DTMF мессежийг илгээж чадсангүй", + "Phone number copied to clipboard" : "Утасны дугаар санах ойд хуулагдлаа", + "Phone number could not be copied" : "Утасны дугаарыг хуулж чадсангүй", + "in the lobby" : "лоббид", + "Dial out phone" : "Утас руу залгах", + "Hang up phone" : "Утас тасалах", + "Move back to lobby" : "Лобби руу буцах", + "Move to conversation" : "Яриа руу шилжих", + "Dial-in PIN" : "Залгах PIN", + "Demote from moderator" : "Модератораас буулгах", + "Promote to moderator" : "Модератор болгох", + "Resend invitation" : "Урилга дахин илгээх", + "Send call notification" : "Дуудлагын мэдэгдэл илгээх", + "Dial out phone number" : "Утасны дугаар руу залгах", + "Resume call for phone number" : "Утасны дугаарын дуудлагыг үргэлжлүүлэх", + "Put phone number on hold" : "Утасны дугаарыг хүлээлгэнд оруулах", + "Unmute phone number" : "Утасны дугаарын хаалтыг нээх", + "Mute phone number" : "Утасны дугаарыг хаах", + "Copy phone number" : "Утасны дугаар хуулах", + "Reset custom permissions" : "Тусгай зөвшөөрлүүдийг дахин тохируулах", + "Grant all permissions" : "Бүх зөвшөөрөл олгох", + "Remove all permissions" : "Бүх зөвшөөрлийг хасах", + "Also ban from this conversation" : "Мөн энэ яриаг хориглох", + "Internal note (reason to ban)" : "Дотоод тэмдэглэл (хориглосон шалтгаан)", + "Remove" : "Хасах", + "Permissions modified for {displayName}" : "{displayName}-ийн зөвшөөрлүүд өөрчлөгдлөө", + "Add users, groups or teams" : "Хэрэглэгчид, бүлгүүд эсвэл багууд нэмэх", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Хэрэглэгчид эсвэл багууд нэмэх", + "Add users" : "Хэрэглэгчид нэмэх", + "Add groups or teams" : "Бүлгүүд эсвэл багууд нэмэх", + "Add groups" : "Бүлгүүд нэмэх", + "Add teams" : "Багууд нэмэх", + "Add other sources" : "Бусад эх үүсвэрүүд нэмэх", + "Add emails" : "Имэйлүүд нэмэх", + "Integrations" : "Нэгтгэлүүд", + "Add federated users" : "Федерацийн хэрэглэгчид нэмэх", + "Searching …" : "Хайж байна …", + "Search for more users" : "Илүү олон хэрэглэгч хайх", + "You can search or add participants via name, email, or Federated Cloud ID" : "Та нэр, и-мэйл эсвэл Холбогдсон Cloud ID-аар оролцогчдыг хайх эсвэл нэмж болно", + "Search or add participants" : "Оролцогчдыг хайх эсвэл нэмэх", + "Invitation was sent to {actorId}" : "Урилга {actorId}-д илгээгдлээ", + "An error occurred while adding the participants" : "Оролцогчдыг нэмэхэд алдаа гарлаа", + "A new group conversation with selected participant will be created" : "Сонгосон оролцогчтой шинэ бүлгийн яриа үүсгэгдэнэ", + "Participants" : "Оролцогчид", + "Pinned by a deleted user" : "Устгагдсан хэрэглэгч бэхэлсэн", + "Participants ({count})" : "Оролцогчид ({count})", + "Open chat" : "Чат нээх", + "You have new unread messages in the chat." : "Чатад шинэ уншаагүй мессежүүд байна.", + "You have been mentioned in the chat." : "Чатад таныг дурдсан.", + "Search messages" : "Мессеж хайх", + "Chat" : "Чат", + "Details" : "–î—ç–ª–≥—ç—Ä—ç–Ω–≥“Ø–π", + "Shared items" : "Хуваалцсан зүйлс", + "Search in {name}" : "{name}-д хайх", + "Threads in {name}" : "{name} дахь thread-үүд", + "{actor} in {conversation}" : "{conversation} дахь {actor}", + "Search options" : "Хайлтын сонголтууд", + "From User" : "Хэрэглэгчээс", + "Since" : "Хойш", + "Until" : "Хүртэл", + "No results found" : "Үр дүн олдсонгүй", + "Load more results" : "Нэмэлт үр дүн ачаалах", + "Recent threads" : "Сүүлийн thread-үүд", + "Projects" : "Төслүүд", + "No shared items" : "Хуваалцсан зүйлс байхгүй", + "Thread notifications" : "Thread мэдэгдлүүд", + "Thread actions" : "Thread үйлдлүүд", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Яриа руу холбоос", + "No open conversations found" : "Нээлттэй яриа олдсонгүй", + "Either there are no open conversations or you joined all of them." : "Нээлттэй яриа байхгүй эсвэл та бүгдэд нь нэгдсэн.", + "Check spelling or use complete words." : "Зөв бичгийн дүрмийг шалгах эсвэл бүтэн үг ашиглана уу.", + "Search conversations or users" : "Яриануудыг эсвэл хэрэглэгчдийг хайх", + "Select conversation" : "Яриа сонгох", + "Number length is not valid" : "Дугаарын урт буруу байна", + "Region code is not valid" : "Бүсийн код буруу байна", + "Number length is too short" : "Дугаарын урт хэт богино байна", + "Number length is too long" : "Дугаарын урт хэт урт байна", + "Number is not valid" : "Дугаар буруу байна", + "Phone numbers" : "Утасны дугаарууд", + "Display name: {name}" : "Дэлгэцийн нэр: {name}", + "Edit display name" : "Дэлгэцийн нэр засах", + "Display name (required)" : "Дэлгэцийн нэр (шаардлагатай)", + "Save name" : "Нэр хадгалах", + "I picked message bubbles" : "Би зурвасын бөмбөлгийг сонгосон", + "Error while setting personal setting" : "Хувийн тохиргоог тохируулахад алдаа гарлаа", + "Error while saving sounds setting" : "Дууны тохиргоог хадгалахад алдаа гарлаа", + "Compact conversations list" : "Нягт ярианы жагсаалт", + "Chat appearance" : "Чатын харагдах байдал", + "Messages list" : "Зурвасын жагсаалт", + "Message bubbles" : "Зурвасын бөмбөлөг", + "Play sounds when participants join or leave a call" : "Оролцогчид дуудлагад нэгдэх эсвэл гарахад дуу тоглуулах", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Үйлдвэрлэгчийн техникийн хязгаарлалтаас шалтгаалан iPhone болон iPad дээр одоогоор боломжгүй", + "Notification settings" : "Мэдэгдлийн тохиргоо", + "Sounds for chat and call notifications" : "Чат болон дуудлагын мэдэгдлийн дуу", + "Invalid language ({languageId})" : "Буруу хэл ({languageId})", + "Default language" : "Өгөгдмөл хэл", + "Default language ({languageName})" : "Өгөгдмөл хэл ({languageName})", + "Error when trying to load the available live translation languages" : "Шууд орчуулгын боломжит хэлүүдийг ачаалахад алдаа гарлаа", + "Error when trying to set live translation language" : "Шууд орчуулгын хэлийг тохируулахад алдаа гарлаа", + "Set language used to show the transcriptions" : "Хуулбар текстийг харуулах хэлийг тохируулах", + "Select location for attachments" : "Хавсралтуудын байршил сонгох", + "Error while setting attachment folder" : "Хавсралтын хавтас тохируулахад алдаа гарлаа", + "Error while setting read status privacy" : "Унших төлөвийн нууцлалыг тохируулахад алдаа гарлаа", + "Error while setting typing status privacy" : "Бичиж байгаа төлөвийн нууцлалыг тохируулахад алдаа гарлаа", + "Error while setting default media state" : "Өгөгдмөл медиа төлөвийг тохируулахад алдаа гарлаа", + "Turn camera and microphone off by default" : "Камер болон микрофоныг өгөгдмөлөөр унтраах", + "Blur camera background by default" : "Камерын дэвсгэрийг өгөгдмөлөөр бүдгэрүүлэх", + "Skip device preview before joining a call" : "Дуудлагад нэгдэхээс өмнө төхөөрөмжийн урьдчилсан харагдацыг алгасах", + "Appearance & Sounds" : "Гадаад төрх & Дуу", + "Privacy" : "–•—É–≤–∏–π–Ω –Ω—É—É—Ü", + "Send read receipts" : "Унших баталгаа илгээх", + "When off, all read statuses will be hidden" : "Унтраасан үед бүх унших төлөвүүд нуугдана", + "Share typing status" : "Бичиж байгаа төлөвийг хуваалцах", + "When off, all typing indicators will be hidden" : "Унтраасан үед бүх бичиж байгаа заагч нуугдана", + "Attachments folder" : "Хавсралтын хавтас", + "Toggle full screen" : "Бүтэн дэлгэц сэлгэх", + "Return to Home screen" : "Нүүр дэлгэц рүү буцах", + "Search" : "–•–∞–π—Ö", + "Shortcuts while in a chat" : "Чат дотор товчлолууд", + "Focus the chat input" : "Чатын оролтод анхаарах", + "Unfocus the chat input to use shortcuts" : "Товчлолуудыг ашиглахын тулд чатын оролтоос анхаарлаа холдуулах", + "Edit your last message" : "Сүүлийн мессежээ засах", + "Shortcuts while in a call" : "Дуудлага дотор товчлолууд", + "Camera on and off" : "Камер асаах, унтраах", + "Microphone on and off" : "Микрофон асаах, унтраах", + "Raise or lower hand" : "Гар өргөх эсвэл буулгах", + "Push to talk or push to mute" : "Ярихын тулд дарах эсвэл хаахын тулд дарах", + "Zoom-in / zoom-out a screen share" : "Дэлгэц хуваалцалтыг томруулах / жижигрүүлэх", + "Mouse wheel" : "Хулганы дугуй", + "Start call silently" : "Дуудлагыг чимээгүй эхлүүлэх", + "Start call" : "Дуудлага эхлүүлэх", + "End call" : "Дуудлага дуусгах", + "This call has just ended" : "Энэ дуудлага дөнгөж дууссан", + "You will be able to join the call only after a moderator starts it." : "Модератор дуудлага эхлүүлсний дараа л та нэгдэх боломжтой.", + "End call for everyone" : "Бүгдийн дуудлагыг дуусгах", + "Starting the recording" : "Бичлэг эхлүүлж байна", + "Recording" : "Бичлэг", + "The call has been running for one hour." : "Дуудлага нэг цагийн турш үргэлжилж байна.", + "Cancel recording start" : "Бичлэг эхлүүлэхийг болих", + "Stop recording" : "Бичлэгийг зогсоох", + "Send a reaction" : "Хариу үйлдэл илгээх", + "React with {reaction}" : "{reaction}-аар хариу үзүүлэх", + "All tasks done!" : "Бүх даалгавар дууслаа!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n даалгавар","{done} / %n даалгавар"], + "Add participants to this call" : "Энэ дуудлагад оролцогчид нэмэх", + "_%n participant in call_::_%n participants in call_" : ["Дуудлагад %n оролцогч","Дуудлагад %n оролцогч"], + "Scheduled messages" : "Товлосон мессежүүд", + "You are not allowed to enable screensharing" : "Та дэлгэц хуваалцах эрхгүй байна", + "No screensharing" : "Дэлгэц хуваалцахгүй", + "Screensharing options" : "Дэлгэц хуваалцах сонголтууд", + "Enable screensharing" : "Дэлгэц хуваалцахыг идэвхжүүлэх", + "Bad sent video and screen quality." : "Видео болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent screen quality." : "Дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent video quality." : "Видеоны чанар муу илгээгдэж байна.", + "Bad sent audio, video and screen quality." : "Аудио, видео болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent audio and screen quality." : "Аудио болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent audio and video quality." : "Аудио болон видеоны чанар муу илгээгдэж байна.", + "Bad sent audio quality." : "Аудионы чанар муу илгээгдэж байна.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Disable background blur" : "Дэвсгэр бүдгэрүүлэлтийг идэвхгүй болгох", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг харах боломжгүй байж болно.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон дэлгэцийг тань харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцалтаа идэвхгүй болго.", + "Disable screenshare" : "Дэлгэц хуваалцалтыг идэвхгүй болгох", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох боломжгүй байж болно.", + "Screen sharing is not supported by your browser." : "Таны хөтөч дэлгэц хуваалцахыг дэмжихгүй байна.", + "Screen sharing requires the page to be loaded through HTTPS." : "Дэлгэц хуваалцахад хуудас HTTPS-ээр ачаалагдсан байх шаардлагатай.", + "Screensharing requires the page to be loaded through HTTPS." : "Дэлгэц хуваалцахад хуудас HTTPS-ээр ачаалагдсан байх шаардлагатай.", + "An error occurred while starting screensharing." : "Дэлгэц хуваалцалт эхлүүлэхэд алдаа гарлаа.", + "Select virtual background" : "Виртуал дэвсгэр сонгох", + "Show your screen" : "Дэлгэцээ харуулах", + "Stop screensharing" : "Дэлгэц хуваалцахаа зогсоох", + "Mute others" : "Бусдыг хаах", + "Start recording" : "Бичлэг эхлүүлэх", + "Set up breakout rooms" : "Салангид өрөөнүүд тохируулах", + "Download attendance list" : "Оролцооны жагсаалтыг татах", + "Open Calendar" : "Календар нээх", + "Remove participant {name}" : "{name} оролцогчийг хасах", + "Would you like to delete this conversation?" : "Та энэ яриаг устгах уу?", + "Are you sure you want to delete this conversation?" : "Та энэ яриаг устгахдаа итгэлтэй байна уу?", + "Delete now" : "Одоо устгах", + "Keep" : "Хадгалах", + "Open dialpad" : "Дугаар цуглуулагч нээх", + "Select a region" : "Бүс сонгох", + "Local time: {time}" : "Орон нутгийн цаг: {time}", + "Scheduled {datetime}" : "Товлосон {datetime}", + "Scheduled for {datetime}" : "{datetime}-д товлосон", + "Message without mention" : "Дурдалтгүй мессеж", + "Mention myself" : "Өөрийгөө дурдах", + "Mention everyone" : "Бүгдийг дурдах", + "Select a conversation" : "Яриа сонгох", + "Select a mode" : "Горим сонгох", + "You do not have permissions to access this conversation." : "Танд энэ яриад хандах зөвшөөрөл байхгүй.", + "Join a different conversation or start a new one." : "Өөр яриад нэгдэх эсвэл шинийг эхлүүлнэ үү.", + "The conversation does not exist" : "Яриа байхгүй байна", + "Join a conversation or start a new one!" : "Яриад нэгдэх эсвэл шинийг эхлүүлнэ үү!", + "Duplicate session" : "Давхардсан сесс", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\"-тай яриа үүсгэж нэгдэж байна", + "Join a conversation or start a new one" : "Яриад нэгдэх эсвэл шинийг эхлүүлнэ үү", + "Error while joining the conversation" : "Яриад нэгдэхэд алдаа гарлаа", + "Another user" : "Өөр хэрэглэгч", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud хэрэглэгч", + "User password" : "Хэрэглэгчийн нууц үг", + "Talk conversation" : "Talk —è—Ä–∏–∞", + "Skip TLS verification" : "TLS баталгаажуулалтыг алгасах", + "Matrix server URL" : "Matrix серверийн URL", + "User" : "–•—ç—Ä—ç–≥–ª—ç–≥—á", + "Matrix channel" : "Matrix суваг", + "Mattermost server URL" : "Mattermost серверийн URL", + "Mattermost user" : "Mattermost хэрэглэгч", + "Team name" : "Багийн нэр", + "Channel name" : "Сувгийн нэр", + "Rocket.Chat server URL" : "Rocket.Chat серверийн URL", + "User name or email address" : "Хэрэглэгчийн нэр эсвэл имэйл хаяг", + "Rocket.Chat channel" : "Rocket.Chat суваг", + "Zulip server URL" : "Zulip серверийн URL", + "Bot user name" : "Ботын хэрэглэгчийн нэр", + "Bot API key" : "Ботын API түлхүүр", + "Zulip channel" : "Zulip суваг", + "API token" : "API токен", + "Slack channel" : "Slack суваг", + "Server ID or name" : "Серверийн ID эсвэл нэр", + "Channel ID (prefixed with \"ID:\") or name" : "Сувгийн ID (\"ID:\" угтвартай) эсвэл нэр", + "Channel" : "–°—É–≤–∞–≥", + "Login" : "–ù—ç–≤—Ç—Ä—ç—Ö", + "Chat ID" : "Чат ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC серверийн URL (жнь. chat.freenode.net:6667)", + "Nickname" : "–¢–æ–≤—á –Ω—ç—Ä", + "Connection password" : "Холболтын нууц үг", + "IRC channel" : "IRC суваг", + "Channel password" : "Сувгийн нууц үг", + "NickServ nickname" : "NickServ хоч", + "NickServ password" : "NickServ нууц үг", + "Use TLS" : "TLS ашиглах", + "Use SASL" : "SASL ашиглах", + "Tenant ID" : "Түрээслэгчийн ID", + "Client ID" : "–•—ç—Ä—ç–≥–ª—ç–≥—á–∏–π–Ω ID", + "Team ID" : "Багийн ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber серверийн URL", + "MUC server URL" : "MUC серверийн URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Бэхлэгдсэн мессежүүд", + "Media" : "Медиа", + "Polls" : "Санал асуулгууд", + "Deck cards" : "Deck картууд", + "Voice messages" : "Дуут мессежүүд", + "Locations" : "Байршлууд", + "Call recordings" : "Дуудлагын бичлэгүүд", + "Audio" : "–ê—É–¥–∏–æ", + "Show all pinned messages" : "Бүх бэхлэгдсэн мессежийг харуулах", + "Show all media" : "Бүх медиаг харуулах", + "Show all files" : "Бүх файлуудыг харуулах", + "Show all polls" : "Бүх санал асуулгыг харуулах", + "Show all deck cards" : "Бүх deck картуудыг харуулах", + "Show all voice messages" : "Бүх дуут мессежийг харуулах", + "Show all locations" : "Бүх байршлуудыг харуулах", + "Show all call recordings" : "Бүх дуудлагын бичлэгийг харуулах", + "Show all audio" : "Бүх аудиог харуулах", + "Show all other" : "Бусад бүгдийг харуулах", + "Follow conversation settings" : "Ярианы тохиргоог дагах", + "Group" : "–ë“Ø–ª—ç–≥", + "Team" : "Баг", + "You reconnected to the call" : "Та дуудлагад дахин холбогдлоо", + "{actor} reconnected to the call" : "{actor} дуудлагад дахин холбогдлоо", + "You added {user0} and {user1}" : "Та {user0} болон {user1}-г нэмлээ", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","Та {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "An administrator added you and {user0}" : "Админ та болон {user0}-г нэмлээ", + "{actor} added you and {user0}" : "{actor} та болон {user0}-г нэмлээ", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Админ та, {user0} болон %n бусад оролцогчийг нэмсэн","Админ та, {user0} болон %n бусад оролцогчийг нэмсэн"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} та, {user0} болон %n бусад оролцогчийг нэмсэн","{actor} та, {user0} болон %n бусад оролцогчийг нэмсэн"], + "An administrator added {user0} and {user1}" : "Админ {user0} болон {user1}-г нэмлээ", + "{actor} added {user0} and {user1}" : "{actor} {user0} болон {user1}-г нэмлээ", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Админ {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","Админ {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","{actor} {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "You removed {user0} and {user1}" : "Та {user0} болон {user1}-г хаслаа", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг хассан","Та {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "An administrator removed you and {user0}" : "Админ та болон {user0}-г хаслаа", + "{actor} removed you and {user0}" : "{actor} та болон {user0}-г хаслаа", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Админ та, {user0} болон %n бусад оролцогчийг хассан","Админ та, {user0} болон %n бусад оролцогчийг хассан"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} та, {user0} болон %n бусад оролцогчийг хассан","{actor} та, {user0} болон %n бусад оролцогчийг хассан"], + "An administrator removed {user0} and {user1}" : "Админ {user0} болон {user1}-г хаслаа", + "{actor} removed {user0} and {user1}" : "{actor} {user0} болон {user1}-г хаслаа", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Админ {user0}, {user1} болон %n бусад оролцогчийг хассан","Админ {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} {user0}, {user1} болон %n бусад оролцогчийг хассан","{actor} {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "You and {user0} joined the call" : "Та болон {user0} дуудлагад нэгдлээ", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Та, {user0} болон %n бусад оролцогч дуудлагад нэгдсэн","Та, {user0} болон %n бусад оролцогч дуудлагад нэгдсэн"], + "{user0} and {user1} joined the call" : "{user0} болон {user1} дуудлагад нэгдлээ", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} болон %n бусад оролцогч дуудлагад нэгдсэн","{user0}, {user1} болон %n бусад оролцогч дуудлагад нэгдсэн"], + "You and {user0} left the call" : "Та болон {user0} дуудлагаас гарлаа", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Та, {user0} болон %n бусад оролцогч дуудлагаас гарсан","Та, {user0} болон %n бусад оролцогч дуудлагаас гарсан"], + "{user0} and {user1} left the call" : "{user0} болон {user1} дуудлагаас гарлаа", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} болон %n бусад оролцогч дуудлагаас гарсан","{user0}, {user1} болон %n бусад оролцогч дуудлагаас гарсан"], + "You promoted {user0} and {user1} to moderators" : "Та {user0} болон {user1}-г модератор болгов", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг модератор болгосон","Та {user0}, {user1} болон %n бусад оролцогчийг модератор болгосон"], + "An administrator promoted you and {user0} to moderators" : "Админ та болон {user0}-г модератор болгов", + "{actor} promoted you and {user0} to moderators" : "{actor} та болон {user0}-г модератор болгов", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Админ та, {user0} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","Админ та, {user0} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} та, {user0} болон %n бусад оролцогчийг модератор болгосон","{actor} та, {user0} болон %n бусад оролцогчийг модератор болгосон"], + "An administrator promoted {user0} and {user1} to moderators" : "Админ {user0} болон {user1}-г модератор болгов", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} {user0} болон {user1}-г модератор болгов", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "You demoted {user0} and {user1} from moderators" : "Та {user0} болон {user1}-г модератораас буулгав", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг модератороос хассан","Та {user0}, {user1} болон %n бусад оролцогчийг модератороос хассан"], + "An administrator demoted you and {user0} from moderators" : "Админ та болон {user0}-г модератораас буулгав", + "{actor} demoted you and {user0} from moderators" : "{actor} та болон {user0}-г модератораас буулгав", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Админ та, {user0} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","Админ та, {user0} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} та, {user0} болон %n бусад оролцогчийг модератороос хассан","{actor} та, {user0} болон %n бусад оролцогчийг модератороос хассан"], + "An administrator demoted {user0} and {user1} from moderators" : "Админ {user0} болон {user1}-г модератораас буулгав", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} {user0} болон {user1}-г модератораас буулгав", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "You:" : "Та:", + "You: {lastMessage}" : "Та: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(та засварласан)", + "(edited by a deleted user)" : "(устгагдсан хэрэглэгч засварласан)", + "(edited by {moderator})" : "({moderator} засварласан)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Та өөр цонх эсвэл төхөөрөмж дээр идэвхтэй сесс байхад яриад нэгдэхийг оролдож байна. Nextcloud Talk одоогоор үүнийг дэмждэггүй. Та юу хийхийг хүсэж байна вэ?", + "Leave this page" : "Энэ хуудаснаас гарах", + "Join here" : "Энд нэгдэх", + "Deck card has been posted to {conversation}" : "Deck карт {conversation} яриад илгээгдлээ", + "An error occurred while posting deck card to conversation" : "Deck картыг яриад илгээхэд алдаа гарлаа", + "Post to a conversation" : "Яриад илгээх", + "Post to conversation" : "Яриад илгээх", + "The recording failed. Please contact your administrator." : "Бичлэг амжилтгүй болсон. Админтайгаа холбогдоно уу.", + "Location has been posted to {conversation}" : "Байршил {conversation} яриад илгээгдлээ", + "An error occurred while posting location to conversation" : "Байршлыг яриад илгээхэд алдаа гарлаа", + "Share to a conversation" : "Яриад хуваалцах", + "Share to conversation" : "Яриад хуваалцах", + "In conversation" : "Яриад", + "Search in conversation: {conversation}" : "{conversation} яриад хайх", + "Your requests are throttled at the moment due to brute force protection" : "Нэвтрэлтийн хүчний довтолгооноос хамгаалалтаас шалтгаалан таны хүсэлтүүд одоогоор хязгаарлагдсан", + "Error while clearing conversation history" : "Ярианы түүхийг цэвэрлэхэд алдаа гарлаа", + "Error occurred while allowing guests" : "Зочдыг зөвшөөрөхөд алдаа гарлаа", + "Error occurred while disallowing guests" : "Зочдыг зөвшөөрөхгүй болгоход алдаа гарлаа", + "Error occurred when restricting the conversation to moderator" : "Яриаг модераторт хязгаарлахад алдаа гарлаа", + "Error occurred when opening the conversation to everyone" : "Яриаг бүх хүнд нээхэд алдаа гарлаа", + "Conversation password has been saved" : "Ярианы нууц үг хадгалагдлаа", + "Conversation password has been removed" : "Ярианы нууц үг арилгагдлаа", + "Error occurred while saving conversation password" : "Ярианы нууц үг хадгалахад алдаа гарлаа", + "Call recording is starting." : "Дуудлагын бичлэг эхэлж байна.", + "Call recording stopped while starting." : "Дуудлагын бичлэг эхлэх үед зогссон.", + "Call recording stopped. You will be notified once the recording is available." : "Дуудлагын бичлэг зогссон. Бичлэг бэлэн болмогц танд мэдэгдэнэ.", + "Conversation picture set" : "Ярианы зураг тохируулагдлаа", + "Conversation picture deleted" : "Ярианы зураг устгагдлаа", + "Could not delete the conversation picture" : "Ярианы зургийг устгаж чадсангүй", + "Could not remove the automatic expiration" : "Автомат дуусах хугацааг арилгаж чадсангүй", + "Could not post message: {errorMessage}" : "Мессеж илгээж чадсангүй: {errorMessage}", + "Participant is banned successfully" : "Оролцогч амжилттай хориглогдлоо", + "Error while banning the participant" : "Оролцогчийг хориглоход алдаа гарлаа", + "An error occurred while fetching the participants" : "Оролцогчдыг авахад алдаа гарлаа", + "Could not send invitation to {actorId}" : "{actorId}-д урилга илгээж чадсангүй", + "Invitations sent" : "Урилгууд илгээгдлээ", + "Error occurred when sending invitations" : "Урилгууд илгээхэд алдаа гарлаа", + "Failed to join the conversation." : "Яриад нэгдэж чадсангүй.", + "An error occurred while creating breakout rooms" : "Салангид өрөөнүүд үүсгэхэд алдаа гарлаа", + "An error occurred while re-ordering the attendees" : "Оролцогчдыг дахин эрэмбэлэхэд алдаа гарлаа", + "An error occurred while deleting breakout rooms" : "Салангид өрөөнүүдийг устгахад алдаа гарлаа", + "An error occurred while starting breakout rooms" : "Салангид өрөөнүүдийг эхлүүлэхэд алдаа гарлаа", + "An error occurred while stopping breakout rooms" : "Салангид өрөөнүүдийг зогсооход алдаа гарлаа", + "An error occurred while sending a message to the breakout rooms" : "Салангид өрөөнүүдэд мессеж илгээхэд алдаа гарлаа", + "An error occurred while requesting assistance" : "Тусламж хүсэхэд алдаа гарлаа", + "An error occurred while resetting the request for assistance" : "Тусламжийн хүсэлтийг дахин тохируулахад алдаа гарлаа", + "An error occurred while joining breakout room" : "Салангид өрөөнд нэгдэхэд алдаа гарлаа", + "Failed to rename the thread" : "Thread-ийн нэрийг өөрчилж чадсангүй", + "Error fetching upcoming events" : "Удахгүй болох арга хэмжээнүүдийг авахад алдаа гарлаа", + "Error fetching upcoming reminders" : "Удахгүй болох сануулгуудыг авахад алдаа гарлаа", + "An error occurred while accepting an invitation" : "Урилга хүлээн авахад алдаа гарлаа", + "An error occurred while rejecting an invitation" : "Урилгаас татгалзахад алдаа гарлаа", + "{guest} (guest)" : "{guest} (зочин)", + "Poll draft has been saved" : "Санал асуулгын ноорог хадгалагдлаа", + "An error occurred while saving the draft" : "Ноорог хадгалахад алдаа гарлаа", + "An error occurred while submitting your vote" : "Санал өгөхөд алдаа гарлаа", + "An error occurred while ending the poll" : "Санал асуулга дуусгахад алдаа гарлаа", + "An error occurred while deleting the poll draft" : "Санал асуулгын ноорог устгахад алдаа гарлаа", + "Poll \"{name}\" was created by {user}. Click to vote" : "\"{name}\" санал асуулгыг {user} үүсгэсэн. Санал өгөхийн тулд дарна уу", + "Failed to add reaction" : "Хариу үйлдэл нэмж чадсангүй", + "Failed to remove reaction" : "Хариу үйлдэл арилгаж чадсангүй", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" файлыг байршуулахад алдаа гарлаа", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" файлыг байршуулах хангалттай зай байхгүй", + "You are not allowed to share files" : "Та файл хуваалцах эрхгүй байна", + "Error while sharing file" : "Файл хуваалцахад алдаа гарлаа", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Таны ашиглаж буй хөтчийг Nextcloud Talk бүрэн дэмждэггүй. Mozilla Firefox, Microsoft Edge, Google Chrome, Opera эсвэл Apple Safari-ийн хамгийн сүүлийн хувилбарыг ашиглана уу.", + "_In %n hour_::_In %n hours_" : ["%n цагийн дараа","%n цагийн дараа"], + "_%n minute _::_%n minutes_" : ["%n минут ","%n минут"], + "In {hours} and {minutes}" : "{hours} болон {minutes} дараа", + "_In %n minute_::_In %n minutes_" : ["%n минутын дараа","%n минутын дараа"], + "Set time for later today" : "Өнөөдөр дараа нь цаг тохируулах", + "Set time for tomorrow" : "Маргааш цаг тохируулах", + "Set time for this weekend" : "Энэ амралтын өдөр цаг тохируулах", + "Set time for next week" : "Дараа долоо хоног цаг тохируулах", + "Conversation link copied to clipboard" : "Ярианы холбоос санах ойд хуулагдлаа", + "The link could not be copied" : "Холбоосыг хуулж чадсангүй", + "Error while parsing a PROPFIND error" : "PROPFIND алдааг задлахад алдаа гарлаа", + "Sending signaling message has failed" : "Signaling мессеж илгээж чадсангүй", + "Lost connection to signaling server. Trying to reconnect." : "Signaling серверт холболт тасарлаа. Дахин холбогдож байна.", + "Lost connection to signaling server." : "Signaling серверт холболт тасарлаа.", + "Failed to connect. The signaling server may be set up incorrectly" : "Холбогдож чадсангүй. Дохионы сервер буруу тохируулагдсан байж магадгүй", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Тохируулагдсан дохионы серверийг Talk-ийн энэ хувилбартай нийцтэй болгохын тулд шинэчлэх шаардлагатай. Администрацитайгаа холбогдоно уу.", + "Please restart the app." : "Апп-ийг дахин эхлүүлнэ үү.", + "Please reload the page." : "–•—É—É–¥–∞—Å—ã–≥ –¥–∞—Ö–∏–Ω –∞—á–∞–∞–ª–Ω–∞ —É—É", + "Please try to restart the app." : "Апп-ийг дахин эхлүүлж үзнэ үү.", + "Please try to reload the page." : "Хуудсыг дахин ачаалж үзнэ үү.", + "Do not disturb" : "–ë“Ø“Ø —Å–∞–∞–¥ –±–æ–ª", + "Away" : "–•–æ–ª–¥—Å–æ–Ω", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камер {number}", + "Speaker {number}" : "Чанга яригч {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Та дуугаа хааж байхдаа ярьж байх шиг байна, бусдад сонсогдохын тулд дуугаа нээнэ үү", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Дор хаяж нэг оролцогчтой холболт тогтоож чадсангүй. Таны нөхцөлд TURN сервер шаардлагатай байж магадгүй. {linkstart}энэ баримт бичиг{linkend}-ийг дагаж тохируулахыг администратораасаа хүснэ үү.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Энэ нь хүлээгдэж байснаас удаж байна. Медиа зөвшөөрлүүд аль хэдийн олгогдсон (эсвэл татгалзсан) уу? Хэрэв тийм бол хөтчөө дахин эхлүүлнэ үү, учир нь аудио болон видео алдаатай байна", + "Access to microphone & camera is only possible with HTTPS" : "Микрофон болон камерт хандах нь зөвхөн HTTPS-ээр боломжтой", + "Please move your setup to HTTPS" : "Тохиргоогоо HTTPS рүү шилжүүлнэ үү", + "Access to microphone & camera was denied" : "Микрофон болон камерт хандах эрхийг татгалзлаа", + "WebRTC is not supported in your browser" : "Таны хөтөч WebRTC дэмжихгүй", + "Please use a different browser like Firefox or Chrome" : "Firefox эсвэл Chrome гэх мэт өөр хөтөч ашиглана уу", + "Error while accessing microphone & camera" : "Микрофон болон камерт хандахад алдаа гарлаа", + "%s Talk on your mobile devices" : "%s Talk таны гар утасны төхөөрөмжүүд дээр", + "Join conversations at any time, anywhere, on any device." : "Хэзээ ч, хаана ч, ямар ч төхөөрөмж дээр яриануудад нэгдээрэй.", + "Android app" : "Android апп", + "iOS app" : "iOS апп", + "__language_name__" : "__—Ö—ç–ª–Ω–∏–π_–Ω—ç—Ä__", + "Webhook Demo" : "Webhook демо", + "Call summary (%s)" : "–î—É—É–¥–ª–∞–≥—ã–Ω —Ö—É—Ä–∞–∞–Ω–≥—É–π (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Дуудлагын хураангуй бот дуудлагын дараа бүх оролцогчдыг жагсаасан болон даалгавруудыг тоймлосон мессеж оруулдаг", + "Tasks" : "–î–∞–∞–ª–≥–∞–≤–∞—Ä", + "Notes" : "–®–∏–Ω—ç ", + "Reports" : "Тайлангууд", + "Decisions" : "Шийдвэрүүд", + "Agenda" : "Хөтөлбөр", + "Call summary" : "Дуудлагын хураангуй", + "Call summary - {title}" : "–î—É—É–¥–ª–∞–≥—ã–Ω —Ö—É—Ä–∞–∞–Ω–≥—É–π - {title}", + "Talk conversation for event" : "Үйл явдлын Talk яриа", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push суулгагдсан, энэ нь ширээний клиентүүдийн гүйцэтгэлийг сайжруулна.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} суулгагдаагүй, энэ нь ширээний клиентүүд ашиглахад гүйцэтгэлийн асуудал үүсгэж болно.", + "Next meeting" : "Дараагийн уулзалт", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Календараасаа уулзалт товло. Энд харуулахын тулд Talk яриаг байршлаар тохируулах шаардлагатай", + "Join conversations from remote Nextcloud servers" : "Алсын Nextcloud серверүүдийн яриануудад нэгдэх", + "Your default media state has been saved" : "Таны өгөгдмөл медиа төлөв хадгалагдлаа", + "Set reminder for later today" : "Өнөөдөр дараа нь сануулга тохируулах", + "Set reminder for tomorrow" : "Маргааш сануулга тохируулах", + "Set reminder for this weekend" : "Энэ амралтын өдөр сануулга тохируулах", + "Set reminder for next week" : "Дараа долоо хоног сануулга тохируулах", + "Generate summary" : "Хураангуй үүсгэх", + "Talk recording from {time} ({conversation})" : "Talk бичлэг {time}-д ({conversation})", + "Submit vote" : "Санал өгөх", + "Your privacy setting has been saved" : "Таны нууцлалын тохиргоо хадгалагдлаа", + "Your personal setting has been saved" : "Таны хувийн тохиргоо хадгалагдлаа", + "Failed to save sounds setting" : "Дууны тохиргоог хадгалж чадсангүй", + "Sounds setting saved" : "Дууны тохиргоо хадгалагдлаа", + "Always shown if recording consent is required" : "Бичлэгийн зөвшөөрөл шаардлагатай бол үргэлж харуулагдана", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk шинэчлэгдсэн, та дуудлага эхлүүлэх эсвэл нэгдэх боломжгүй.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Та өөр цонх эсвэл төхөөрөмжөөс яриад нэгдсэн. Nextcloud Talk одоогоор үүнийг дэмждэггүй тул энэ сессийг хаасан.", + "Nextcloud Talk was updated." : "Nextcloud Talk шинэчлэгдлээ.", + "Nextcloud is in maintenance mode." : "Nextcloud засвар үйлчилгээний горимд байна.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation шинэчлэгдлээ.", + "Enable live translation" : "Шууд орчуулгыг идэвхжүүлэх", + "I picked list style" : "Би жагсаалт хэлбэрийг сонгосон", + "Hey! Are you using Talk in list style or with message bubbles?" : "Сайн уу! Та Talk-ыг жагсаалт хэлбэрээр ашиглаж байна уу, эсвэл зурвасын бөмбөлгөөр үү?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/mn.json b/l10n/mn.json new file mode 100644 index 0000000..64597af --- /dev/null +++ b/l10n/mn.json @@ -0,0 +1,2160 @@ +{ "translations": { + "a conversation" : "яриа", + "(Duration %s)" : "(Үргэлжлэх хугацаа %s)", + "You attended a call with {user1}" : "Та {user1}-тай дуудлагад оролцлоо", + "_%n guest_::_%n guests_" : ["%n зочин","%n зочин"], + "You attended a call with {user1} and {user2}" : "Та {user1} болон {user2}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2} and {user3}" : "Та {user1}, {user2} болон {user3}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Та {user1}, {user2}, {user3} болон {user4}-тай дуудлагад оролцлоо", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Та {user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлагад оролцлоо", + "_%n other_::_%n others_" : ["%n бусад","%n бусад"], + "{actor} invited you to {call}" : "{actor} таныг {call} руу урилаа", + "You were invited to a conversation or had a call" : "Та ярианд уригдсан эсвэл дуудлагад оролцсон", + "Other activities" : "Бусад үйл ажиллагаа", + "Talk" : "Talk", + "Guest" : "–ó–æ—á–∏–Ω", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud Talk-д тавтай морил!\nЭнэ яриан дотор Nextcloud Talk-д нэмэгдсэн шинэ боломжуудын талаар мэдээлэл авах болно.", + "## New in Talk %s" : "## Talk %s-д шинээр", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge болон Safari хөтчүүдийг ашиглан аудио, видео дуудлагад оролцох боломжтой болсон", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Хоёр хүний яриа одоо тогтмол бөгөөд санамсаргүйгээр бүлгийн яриа болж хувирахгүй. Мөн нэг оролцогч яриаг орхисон ч яриа автоматаар устахгүй. Зөвхөн хоёр оролцогч хоёулаа орхивол серверээс устгагдана", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Та одоо чатад \"@all\" гэж бичээд бүх оролцогчдод мэдэгдэл илгээх боломжтой", + "- With the \"arrow-up\" key you can repost your last message" : "- \"Дээш сум\" товчийг ашиглан сүүлийн мессежээ дахин илгээх боломжтой", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk одоо тушаалуудтай болсон, администратор тохируулсан эсэхийг шалгахын тулд чатад \"/help\" гэж бичээрэй", + "- With projects you can create quick links between conversations, files and other items" : "- Төслүүдийн тусламжтай яриа, файл болон бусад зүйлсийн хооронд хурдан холбоос үүсгэх боломжтой", + "- You can now mention guests in the chat" : "- Та одоо чатад зочдыг дурдаж болно", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Яриа одоо хүлээлгийн өрөөтэй байж болно. Энэ нь модераторуудад уулзалтад бэлтгэхийн тулд чат болон дуудлагад нэгдэх боломж олгох бөгөөд хэрэглэгчид болон зочид хүлээх шаардлагатай", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Та одоо мессежүүдэд шууд хариулж, бусад хэрэглэгчдэд таны мессеж юуны тухай болохыг ойлгуулах боломжтой", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Яриа болон оролцогчдыг хайхад одоо таны одоо байгаа яриануудыг мөн шүүх бөгөөд өмнөх яриануудыг олоход илүү хялбар болсон", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Circles апп суулгасан үед яриануудад хэрэглэгчийн тусгай бүлгүүд нэмэх боломжтой болсон", + "- Check out the new grid and call view" : "- Шинэ торон болон дуудлагын харагдацыг үзээрэй", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Та одоо төхөөрөмжөөсөө файлуудыг шууд чат руу байршуулах эсвэл чирж хаях боломжтой", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Хуваалцсан файлууд одоо үзэгч аппуудын тусламжтай чатын харагдацын дотор шууд нээгддэг", + "- You can now search for chats and messages in the unified search in the top bar" : "- Та одоо дээд мөрний нэгдсэн хайлтаар чат болон мессежүүдийг хайх боломжтой", + "- Spice up your messages with emojis from the emoji picker" : "- Эможи сонгогчоос эможи ашиглан мессежээ сайхан болго", + "- You can now change your camera and microphone while being in a call" : "- Та одоо дуудлагын үеэр камер болон микрофоноо солих боломжтой", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Ярианд тайлбар нэмж контекст өгөөд, нэвтэрсэн хэрэглэгчид олж, өөрсдөө нэгдэх боломжтой болго", + "- See a read status and send failed messages again" : "- Уншсан төлвийг харах ба илгээхэд алдаатай мессежүүдийг дахин илгээ", + "- Raise your hand in a call with the R key" : "- R товчийг дарж дуудлагад гараа өргө", + "- Join the same conversation and call from multiple devices" : "- Нэг яриа болон дуудлагад олон төхөөрөмжөөс нэгд", + "- Send voice messages, share your location or contact details" : "- Дуут мессеж илгээ, байршил эсвэл холбоо барих мэдээллээ хуваалц", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Яриад бүлгүүд нэмээд, шинэ бүлгийн гишүүд автоматаар оролцогчоор нэмэгдэнэ", + "- A preview of your audio and video is shown before joining a call" : "- Дуудлагад нэгдэхийн өмнө таны аудио болон видеоны урьдчилсан харагдац харуулагдана", + "- You can now blur your background in the newly designed call view" : "- Та одоо шинэ загварын дуудлагын харагдацад арын дэвсгэрээ бүдэгрүүлж болно", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторууд одоо оролцогчдод ерөнхий болон хувийн зөвшөөрлүүд олгох боломжтой", + "- You can now react to chat messages" : "- Та одоо чат мессежүүдэд хариу үйлдэл үзүүлж болно", + "- In the sidebar you can now find an overview of the latest shared items" : "- Хажуугийн самбараас хамгийн сүүлд хуваалцсан зүйлсийн тоймыг олох боломжтой болсон", + "- Use a poll to collect the opinions of others or settle on a date" : "- Бусдын санал бодлыг цуглуулах эсвэл огноо тохирохын тулд санал асуулга ашигла", + "- Configure an expiration time for chat messages" : "- Чат мессежүүдийн дуусах хугацааг тохируул", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Том яриануудад бусдад мэдэгдэхгүйгээр дуудлага эхлүүлээрэй. Дуудлага эхэлсний дараа тус тусад нь дуудлагын мэдэгдэл илгээх боломжтой.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Яаралтай биш бол хүлээн авагчдад мэдэгдэхгүйгээр чат мессеж илгээ", + "- Emojis can now be autocompleted by typing a \":\"" : "- \":\" бичиж эможи автоматаар гүйцээгдэх боломжтой болсон", + "- Link various items using the new smart-picker by typing a \"/\"" : "- \"/\" бичиж шинэ ухаалаг сонгогчийг ашиглан янз бүрийн зүйлсийг холбо", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модераторууд одоо салангид өрөөнүүд үүсгэх боломжтой (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Дуудлагуудыг одоо бичиж болно (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Conversations can now have an avatar or emoji as icon" : "- Яриа одоо аватар эсвэл эможи дүрс тэмдэгтэй байж болно", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Видео дуудлагад бүдэг арын дэвсгэрээс гадна виртуал арын дэвсгэр одоо боломжтой болсон", + "- Reactions are now available during calls" : "- Хариу үйлдэл дуудлагын үеэр одоо боломжтой", + "- Typing indicators show which users are currently typing a message" : "- Бичиж байгаа заагч нь ямар хэрэглэгчид мессеж бичиж байгааг харуулна", + "- Groups can now be mentioned in chats" : "- Бүлгүүдийг одоо чатад дурдах боломжтой", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Хэрэв хуулбарлах үйлчилгээ үзүүлэгч апп бүртгэгдсэн бол дуудлагын бичлэгүүд автоматаар хуулбарлагдана", + "- Chat messages can be translated if a translation provider app is registered" : "- Хэрэв орчуулгын үйлчилгээ үзүүлэгч апп бүртгэгдсэн бол чат мессежүүдийг орчуулах боломжтой", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown**-ыг одоо _чат_ мессежүүдэд ашиглах боломжтой", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Бот хэрэгжүүлэхийн тулд Webhook одоо боломжтой болсон. Дэлгэрэнгүй мэдээллийг баримт бичгээс үзнэ үү https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Дараа нь дахин мэдэгдэл авахын тулд чат мессежид сануулга тавь", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- **Өөртөө тэмдэглэл** яриаг ашиглан тэмдэглэл хөтөлж, төхөөрөмжүүдийн хооронд мэдээлэл хуваалцаарай", + "- Captions allow to send a message with a file at the same time" : "- Тайлбар нь файлтай хамт мессеж илгээх боломжийг олгодог", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Дэлгэц хуваалцаж байх үед илтгэгчийн видео одоо харагдах бөгөөд дуудлагын хариу үйлдлүүд хөдөлгөөнт болсон", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Нэвтэрсэн зохиогчид болон модераторууд мессежийг 6 цагийн турш засварлах боломжтой болсон", + "- Unsent message drafts are now saved in your browser" : "- Илгээгээгүй мессежийн ноорог одоо таны хөтөчид хадгалагдана", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текст чатыг одоо бусад Talk серверүүдтэй холбогдсон хэлбэрээр хийх боломжтой", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модераторууд одоо бүртгэлүүд болон зочдыг яриад дахин нэгдэхээс сэргийлж хориглох боломжтой", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Холбогдсон календарын үйл явдлуудаас удахгүй болох дуудлагууд болон ажлаас гадуур орлогчдыг одоо яриануудад харуулдаг", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Дуудлагуудыг одоо бусад Talk серверүүдтэй холбогдсон хэлбэрээр хийх боломжтой (Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows, macOS болон Linux-д зориулсан Nextcloud Talk ширээний клиентийг танилцуулж байна: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud Assistant-ийн тусламжтай дуудлагын бичлэгүүд болон уншаагүй мессежүүдийг нэгтгэн хураангуйла", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- И-мэйл хаягаар урьсан зочдыг таних, оролцогчдын жагсаалт импортлох, санал асуулгын ноорог болон дуудлагын оролцогчдын жагсаалт татах зэргээр уулзалтуудыг сайжруулсан", + "- Archive conversations to stay focused" : "- Төвлөрөхийн тулд яриануудыг архивла", + "- Schedule a meeting into your calendar from within a conversation" : "- Ярианы дотроос календартаа уулзалт товло", + "- Search for messages of the current conversation directly in the right sidebar" : "- Одоогийн ярианы мессежүүдийг баруун хажуугийн самбараас шууд хайх", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Шинэ шахмал жагсаалтаар илүү олон яриаг нэг харцаар харах (Talk тохиргооноос идэвхжүүлнэ үү)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Уулзалтын яриа одоо календараас гарчиг болон тайлбарыг синхрончилж, эхлэх цаг ойртох хүртэл хайлтын шүүлтүүрээр нуугдана", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Мэдэгдлийн тохиргоонд яриануудыг нууцлалтай гэж тэмдэглэж, ярианы жагсаалт болон мэдэгдлүүдээс мессежийн агуулгыг нуу", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- \"Бүү саад бол\" горимын үед push мэдэгдэл хүлээн авахын тулд яриануудыг чухал гэж тэмдэглэ", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Шинэ бүлгийн дуудлагыг шууд үүсгэхийн тулд хоёр хүний дуудлагад бусад оролцогчдыг нэм", + "- Use threads to keep your chat and discussions organized" : "- Чат болон хэлэлцүүлгээ зохион байгуулалттай байлгахын тулд thread ашигла", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Дуудлагын үеэр шууд хуулбарлалт одоо боломжтой болсон (live-transcription ExApp болон Өндөр гүйцэтгэлтэй backend шаардлагатай)", + "- Moderators can now pin messages so they are kept at the top" : "- Модераторууд зурвасуудыг дээд хэсэгт бэхлэх боломжтой болсон", + "- Schedule a message to send it at a later time" : "- Зурвасыг дараа илгээхээр товлох", + "_All %n participant_::_All %n participants_" : ["Бүх %n оролцогч","Бүх %n оролцогч"], + "Reaction deleted by author" : "Хариу үйлдэл зохиогчоор устгагдсан", + "{actor} created the conversation" : "{actor} яриаг үүсгэсэн", + "You created the conversation" : "Та яриаг үүсгэсэн", + "System created the conversation" : "Систем яриаг үүсгэсэн", + "An administrator created the conversation" : "Администратор яриаг үүсгэсэн", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Та ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор ярианы нэрийг \"%1$s\"-аас \"%2$s\" болгон өөрчилсөн", + "{actor} set the description" : "{actor} тайлбарыг тохируулсан", + "You set the description" : "Та тайлбарыг тохируулсан", + "An administrator set the description" : "Администратор тайлбарыг тохируулсан", + "{actor} removed the description" : "{actor} тайлбарыг устгасан", + "You removed the description" : "Та тайлбарыг устгасан", + "An administrator removed the description" : "Администратор тайлбарыг устгасан", + "You started a silent call" : "Та чимээгүй дуудлага эхлүүлсэн", + "Outgoing silent call" : "Гарах чимээгүй дуудлага", + "{actor} started a silent call" : "{actor} чимээгүй дуудлага эхлүүлсэн", + "Incoming silent call" : "Ирж буй чимээгүй дуудлага", + "You started a call" : "Та дуудлага эхлүүлсэн", + "Outgoing call" : "Гарах дуудлага", + "{actor} started a call" : "{actor} дуудлага эхлүүлсэн", + "Incoming call" : "Ирж буй дуудлага", + "{actor} joined the call" : "{actor} дуудлагад нэгдсэн", + "You joined the call" : "Та дуудлагад нэгдсэн", + "{actor} left the call" : "{actor} дуудлагаас гарсан", + "You left the call" : "Та дуудлагаас гарсан", + "{actor} unlocked the conversation" : "{actor} яриаг тайлсан", + "You unlocked the conversation" : "Та яриаг тайлсан", + "An administrator unlocked the conversation" : "Администратор яриаг тайлсан", + "{actor} locked the conversation" : "{actor} яриаг түгжсэн", + "You locked the conversation" : "Та яриаг түгжсэн", + "An administrator locked the conversation" : "Администратор яриаг түгжсэн", + "{actor} limited the conversation to the current participants" : "{actor} яриаг одоогийн оролцогчдоор хязгаарласан", + "You limited the conversation to the current participants" : "Та яриаг одоогийн оролцогчдоор хязгаарласан", + "An administrator limited the conversation to the current participants" : "Администратор яриаг одоогийн оролцогчдоор хязгаарласан", + "{actor} opened the conversation to registered users" : "{actor} яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "You opened the conversation to registered users" : "Та яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "An administrator opened the conversation to registered users" : "Администратор яриаг бүртгэлтэй хэрэглэгчдэд нээсэн", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "You opened the conversation to registered users and users created with the Guests app" : "Та яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "The conversation is now open to everyone" : "Яриа одоо бүгдэд нээлттэй", + "{actor} opened the conversation to everyone" : "{actor} яриаг бүгдэд нээсэн", + "You opened the conversation to everyone" : "Та яриаг бүгдэд нээсэн", + "{actor} restricted the conversation to moderators" : "{actor} яриаг модераторуудаар хязгаарласан", + "You restricted the conversation to moderators" : "Та яриаг модераторуудаар хязгаарласан", + "{actor} started breakout rooms" : "{actor} салангид өрөөнүүдийг эхлүүлсэн", + "You started breakout rooms" : "Та салангид өрөөнүүдийг эхлүүлсэн", + "{actor} stopped breakout rooms" : "{actor} салангид өрөөнүүдийг зогсоосон", + "You stopped breakout rooms" : "Та салангид өрөөнүүдийг зогсоосон", + "{actor} allowed guests" : "{actor} зочдыг зөвшөөрсөн", + "You allowed guests" : "Та зочдыг зөвшөөрсөн", + "An administrator allowed guests" : "Администратор зочдыг зөвшөөрсөн", + "{actor} disallowed guests" : "{actor} зочдыг хориглосон", + "You disallowed guests" : "Та зочдыг хориглосон", + "An administrator disallowed guests" : "Администратор зочдыг хориглосон", + "{actor} set a password" : "{actor} нууц үг тохируулсан", + "You set a password" : "Та нууц үг тохируулсан", + "An administrator set a password" : "Администратор нууц үг тохируулсан", + "{actor} removed the password" : "{actor} нууц үгийг устгасан", + "You removed the password" : "Та нууц үгийг устгасан", + "An administrator removed the password" : "Администратор нууц үгийг устгасан", + "{actor} added {user}" : "{actor} {user}-ыг нэмсэн", + "You joined the conversation" : "Та яриад нэгдсэн", + "{actor} joined the conversation" : "{actor} яриад нэгдсэн", + "You added {user}" : "Та {user}-ыг нэмсэн", + "{actor} added you" : "{actor} таныг нэмсэн", + "An administrator added you" : "Администратор таныг нэмсэн", + "An administrator added {user}" : "Администратор {user}-ыг нэмсэн", + "You left the conversation" : "Та яриаг орхисон", + "{actor} left the conversation" : "{actor} яриаг орхисон", + "{actor} removed {user}" : "{actor} {user}-ыг хассан", + "You removed {user}" : "Та {user}-ыг хассан", + "{actor} removed you" : "{actor} таныг хассан", + "An administrator removed you" : "Администратор таныг хассан", + "An administrator removed {user}" : "Администратор {user}-ыг хассан", + "{actor} invited {federated_user}" : "{actor} {federated_user}-ыг урисан", + "You invited {federated_user}" : "Та {federated_user}-ыг урисан", + "You accepted the invitation" : "Та урилгыг зөвшөөрсөн", + "{actor} invited you" : "{actor} таныг урисан", + "An administrator invited you" : "Администратор таныг урисан", + "An administrator invited {federated_user}" : "Администратор {federated_user}-ыг урисан", + "{federated_user} accepted the invitation" : "{federated_user} урилгыг зөвшөөрсөн", + "{actor} removed {federated_user}" : "{actor} {federated_user}-ыг хассан", + "You removed {federated_user}" : "Та {federated_user}-ыг хассан", + "You declined the invitation" : "Та урилгаас татгалзсан", + "An administrator removed {federated_user}" : "Администратор {federated_user}-ыг хассан", + "{federated_user} declined the invitation" : "{federated_user} урилгаас татгалзсан", + "{actor} added group {group}" : "{actor} {group} бүлгийг нэмсэн", + "You added group {group}" : "Та {group} бүлгийг нэмсэн", + "An administrator added group {group}" : "Администратор {group} бүлгийг нэмсэн", + "{actor} removed group {group}" : "{actor} {group} бүлгийг хассан", + "You removed group {group}" : "Та {group} бүлгийг хассан", + "An administrator removed group {group}" : "Администратор {group} бүлгийг хассан", + "{actor} added team {circle}" : "{actor} {circle} багийг нэмсэн", + "You added team {circle}" : "Та {circle} багийг нэмсэн", + "An administrator added team {circle}" : "Администратор {circle} багийг нэмсэн", + "{actor} removed team {circle}" : "{actor} {circle} багийг хассан", + "You removed team {circle}" : "Та {circle} багийг хассан", + "An administrator removed team {circle}" : "Администратор {circle} багийг хассан", + "{actor} added {phone}" : "{actor} {phone}-ыг нэмсэн", + "You added {phone}" : "Та {phone}-ыг нэмсэн", + "An administrator added {phone}" : "Администратор {phone}-ыг нэмсэн", + "{actor} removed {phone}" : "{actor} {phone}-ыг хассан", + "You removed {phone}" : "Та {phone}-ыг хассан", + "An administrator removed {phone}" : "Администратор {phone}-ыг хассан", + "{actor} promoted {user} to moderator" : "{actor} {user}-ыг модератор болгосон", + "You promoted {user} to moderator" : "Та {user}-ыг модератор болгосон", + "{actor} promoted you to moderator" : "{actor} таныг модератор болгосон", + "An administrator promoted you to moderator" : "Администратор таныг модератор болгосон", + "An administrator promoted {user} to moderator" : "Администратор {user}-ыг модератор болгосон", + "{actor} demoted {user} from moderator" : "{actor} {user}-ыг модератор эрхээс хассан", + "You demoted {user} from moderator" : "Та {user}-ыг модератор эрхээс хассан", + "{actor} demoted you from moderator" : "{actor} таныг модератор эрхээс хассан", + "An administrator demoted you from moderator" : "Администратор таныг модератор эрхээс хассан", + "An administrator demoted {user} from moderator" : "Администратор {user}-ыг модератор эрхээс хассан", + "{actor} shared a file which is no longer available" : "{actor} хүчингүй болсон файл хуваалцсан", + "You shared a file which is no longer available" : "Та хүчингүй болсон файл хуваалцсан", + "File shares are currently not supported in federated conversations" : "Файл хуваалцах нь федерац ярианд одоогоор дэмжигдэхгүй байна", + "The shared location is malformed" : "Хуваалцсан байршил буруу форматтай байна", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} энэ яриаг бусад чатуудтай синхрончлохын тулд Matterbridge тохируулсан", + "You set up Matterbridge to synchronize this conversation with other chats" : "Та энэ яриаг бусад чатуудтай синхрончлохын тулд Matterbridge тохируулсан", + "{actor} created thread {title}" : "{actor} {title} thread үүсгэсэн", + "You created thread {title}" : "Та {title} thread үүсгэсэн", + "{actor} renamed thread {title}" : "{actor} {title} thread-ийн нэрийг өөрчилсөн", + "You renamed thread {title}" : "Та {title} thread-ийн нэрийг өөрчилсөн", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge тохиргоог шинэчилсэн", + "You updated the Matterbridge configuration" : "Та Matterbridge тохиргоог шинэчилсэн", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge тохиргоог устгасан", + "You removed the Matterbridge configuration" : "Та Matterbridge тохиргоог устгасан", + "{actor} started Matterbridge" : "{actor} Matterbridge-г эхлүүлсэн", + "You started Matterbridge" : "Та Matterbridge-г эхлүүлсэн", + "{actor} stopped Matterbridge" : "{actor} Matterbridge-г зогсоосон", + "You stopped Matterbridge" : "Та Matterbridge-г зогсоосон", + "{actor} deleted a message" : "{actor} мессеж устгасан", + "You deleted a message" : "Та мессеж устгасан", + "{actor} edited a message" : "{actor} мессеж засварласан", + "You edited a message" : "Та мессеж засварласан", + "{actor} pinned a message" : "{actor} мессеж бэхэлсэн", + "You pinned a message" : "Та мессеж бэхэлсэн", + "{actor} unpinned a message" : "{actor} мессеж бэхлэлтийг тайлсан", + "Message was automatically unpinned" : "Мессежийн бэхлэлт автоматаар тайлагдсан", + "You unpinned a message" : "Та мессеж бэхлэлтийг тайлсан", + "{actor} deleted a reaction" : "{actor} хариу үйлдлийг устгасан", + "You deleted a reaction" : "Та хариу үйлдлийг устгасан", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Та зурвасын хугацааг %n долоо хоног болгож тохируулсан","Та зурвасын хугацааг %n долоо хоног болгож тохируулсан"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Та зурвасын хугацааг %n өдөр болгож тохируулсан","Та зурвасын хугацааг %n өдөр болгож тохируулсан"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Та зурвасын хугацааг %n цаг болгож тохируулсан","Та зурвасын хугацааг %n цаг болгож тохируулсан"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Та зурвасын хугацааг %n минут болгож тохируулсан","Та зурвасын хугацааг %n минут болгож тохируулсан"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} зурвасын хугацааг %n долоо хоног болгож тохируулсан","{actor} зурвасын хугацааг %n долоо хоног болгож тохируулсан"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} зурвасын хугацааг %n өдөр болгож тохируулсан","{actor} зурвасын хугацааг %n өдөр болгож тохируулсан"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} зурвасын хугацааг %n цаг болгож тохируулсан","{actor} зурвасын хугацааг %n цаг болгож тохируулсан"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} зурвасын хугацааг %n минут болгож тохируулсан","{actor} зурвасын хугацааг %n минут болгож тохируулсан"], + "{actor} disabled message expiration" : "{actor} мессежийн дуусах хугацааг идэвхгүй болгосон", + "You disabled message expiration" : "Та мессежийн дуусах хугацааг идэвхгүй болгосон", + "{actor} cleared the history of the conversation" : "{actor} ярианы түүхийг цэвэрлэсэн", + "You cleared the history of the conversation" : "Та ярианы түүхийг цэвэрлэсэн", + "{actor} set the conversation picture" : "{actor} ярианы зургийг тохируулсан", + "You set the conversation picture" : "Та ярианы зургийг тохируулсан", + "{actor} removed the conversation picture" : "{actor} ярианы зургийг устгасан", + "You removed the conversation picture" : "Та ярианы зургийг устгасан", + "{actor} ended the poll {poll}" : "{actor} {poll} санал асуулгыг дуусгасан", + "You ended the poll {poll}" : "Та {poll} санал асуулгыг дуусгасан", + "{actor} started the video recording" : "{actor} видео бичлэгийг эхлүүлсэн", + "You started the video recording" : "Та видео бичлэгийг эхлүүлсэн", + "{actor} stopped the video recording" : "{actor} видео бичлэгийг зогсоосон", + "You stopped the video recording" : "Та видео бичлэгийг зогсоосон", + "{actor} started the audio recording" : "{actor} аудио бичлэгийг эхлүүлсэн", + "You started the audio recording" : "Та аудио бичлэгийг эхлүүлсэн", + "{actor} stopped the audio recording" : "{actor} аудио бичлэгийг зогсоосон", + "You stopped the audio recording" : "Та аудио бичлэгийг зогсоосон", + "The recording failed" : "Бичлэг амжилтгүй болсон", + "Someone voted on the poll {poll}" : "Хэн нэгэн {poll} санал асуулгад санал өгсөн", + "Message deleted by author" : "Мессеж зохиогчоор устгагдсан", + "Message deleted by {actor}" : "Мессеж {actor}-аар устгагдсан", + "Message deleted by you" : "Мессеж таны устгасан", + "Deleted user" : "Устгагдсан хэрэглэгч", + "Unknown number" : "Үл мэдэгдэх дугаар", + "Administration" : "Удирдлага", + "System" : "–°–∏—Å—Ç–µ–º", + "%s (guest)" : "%s (зочин)", + "Missed call" : "Алдагдсан дуудлага", + "Unanswered call" : "Хариулаагүй дуудлага", + "Call ended (Duration {duration})" : "Дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n зочинтой дуудлага дээд хугацаанд хүрсэн тул дууссан (Үргэлжилсэн хугацаа {duration})","%n зочинтой дуудлага дээд хугацаанд хүрсэн тул дууссан (Үргэлжилсэн хугацаа {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n зочинтой дуудлага дууссан (Үргэлжилсэн хугацаа {duration})","%n зочинтой дуудлага дууссан (Үргэлжилсэн хугацаа {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} %n зочинтой дуудлагыг дуусгасан (Үргэлжилсэн хугацаа {duration})","{actor} %n зочинтой дуудлагыг дуусгасан (Үргэлжилсэн хугацаа {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} {user1}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} болон {user2}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} болон {user2}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} {user1} болон {user2}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2} болон {user3}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1}, {user2} болон {user3}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} {user1}, {user2} болон {user3}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3} болон {user4}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1}, {user2}, {user3} болон {user4}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} {user1}, {user2}, {user3} болон {user4}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлага дууссан, учир нь хамгийн их дуудлагын хугацаанд хүрсэн (Үргэлжлэх хугацаа {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлага дууссан (Үргэлжлэх хугацаа {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} {user1}, {user2}, {user3}, {user4} болон {user5}-тай дуудлагыг дуусгасан (Үргэлжлэх хугацаа {duration})", + "Message of {user} in {conversation}" : "{conversation} дахь {user}-ийн мессеж", + "Message of {user}" : "{user}-ийн мессеж", + "Message of a deleted user in {conversation}" : "{conversation} дахь устгагдсан хэрэглэгчийн мессеж", + "Talk conversations" : "Talk яриа", + "Talk to %s" : "%s-тай ярих", + "An error occurred. Please contact your administrator." : "Алдаа гарлаа. Администратортайгаа холбогдоно уу.", + "File not found" : "–§–∞–π–ª –æ–ª–¥—Å–æ–Ω–≥“Ø–π", + "File is not shared, or shared but not with the user" : "Файл хуваалцаагүй эсвэл хуваалцсан боловч хэрэглэгчтэй биш", + "No account available to delete." : "Устгах бүртгэл байхгүй.", + "Poll" : "Санал асуулга", + "Password needs to be set" : "Нууц үг тохируулах шаардлагатай", + "Uploading the file failed" : "Файл байршуулах амжилтгүй болсон", + "No image file provided" : "Зургийн файл өгөгдөөгүй", + "File is too big" : "–§–∞–π–ª—ã–Ω —Ö—ç–º–∂—ç—ç —Ö—ç—Ç –∏—Ö –±–∞–π–Ω–∞", + "Invalid file provided" : "–ë—É—Ä—É—É —Ñ–∞–π–ª –±–∞–π–Ω–∞", + "Invalid image" : "–±—É—Ä—É—É –∑—É—Ä–∞–≥", + "Unknown filetype" : "“Æ–ª –º—ç–¥—ç–≥–¥—ç—Ö —Ñ–∞–π–ª—ã–Ω —Ç”©—Ä”©–ª", + "Talk mentions" : "Talk дурдалтууд", + "More conversations" : "Бусад яриа", + "Say hi to your friends and colleagues!" : "Найз нөхөд болон хамт олондоо мэндчил!", + "No unread mentions" : "Уншаагүй дурдалт байхгүй", + "Call in progress" : "Дуудлага явагдаж байна", + "You were mentioned" : "Танийг дурдсан", + "Write to conversation" : "Яриа руу бичих", + "Writes event information into a conversation of your choice" : "Таны сонгосон яриа руу үйл явдлын мэдээлэл бичих", + "Missing email field in header line" : "Толгой мөрөнд имэйл талбар дутуу", + "Following lines are invalid: %s" : "Дараах мөрүүд буруу: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s таныг \"%2$s\" яриа руу урисан.", + "You were invited to conversation \"%s\"." : "Та \"%s\" яриа руу урьсан.", + "Conversation invitation" : "Ярианы урилга", + "Scheduled time" : "Товлосон цаг", + "Description" : "–¢–∞–π–ª–±–∞—Ä", + "You can also dial-in via phone with the following details" : "Та мөн дараах мэдээллийг ашиглан утсаар залгаж болно", + "Dial-in information" : "Залгах мэдээлэл", + "Meeting ID" : "Уулзалтын ID", + "Your PIN" : "Таны PIN", + "Click the button below to join the lobby now." : "Хүлээлгийн танхимд нэгдэхийн тулд доорх товчийг дарна уу.", + "Click the link below to join the lobby now." : "Хүлээлгийн танхимд нэгдэхийн тулд доорх холбоос дээр дарна уу.", + "Join lobby for \"%s\"" : "\"%s\" хүлээлгийн танхимд нэгдэх", + "Click the button below to join the conversation now." : "Яриад нэгдэхийн тулд доорх товчийг дарна уу.", + "Click the link below to join the conversation now." : "Яриад нэгдэхийн тулд доорх холбоос дээр дарна уу.", + "Join \"%s\"" : "\"%s\" нэгдэх", + "Meeting" : "Уулзалт", + "Password request: %s" : "Нууц үг хүсэлт: %s", + "Private conversation" : "Хувийн яриа", + "Deleted user (%s)" : "Устгагдсан хэрэглэгч (%s)", + "Failed to upload call recording" : "Дуудлагын бичлэг байршуулах амжилтгүй болсон", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Бичлэгийн сервер {call} дуудлагын бичлэгийг байршуулж чадсангүй. Администрацитай холбогдоно уу.", + "Share to chat" : "Чат руу хуваалцах", + "Dismiss notification" : "Мэдэгдлийг хаах", + "Call recording now available" : "Дуудлагын бичлэг одоо боломжтой", + "The recording for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын бичлэг {file} руу байршуулагдсан.", + "Transcript now available" : "Транскрипц одоо боломжтой", + "The transcript for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын транскрипц {file} руу байршуулагдсан.", + "Failed to transcript call recording" : "Дуудлагын бичлэгийг транскрипц хийх амжилтгүй болсон", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер {call} дахь дуудлагын {file} бичлэгийг хуулбарлаж чадсангүй. Администрацитай холбогдоно уу.", + "Call summary now available" : "Дуудлагын хураангуй одоо боломжтой", + "The summary for the call in {call} was uploaded to {file}." : "{call} дахь дуудлагын хураангуй {file} руу байршуулагдсан.", + "Failed to summarize call recording" : "Дуудлагын бичлэгийг хураангуйлах амжилтгүй болсон", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер {call} дахь дуудлагын {file} бичлэгийг хураангуйлж чадсангүй. Администрацитай холбогдоно уу.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} таныг {remoteServer} дээрх {roomName} руу нэгдэхийг урисан", + "Accept" : "–•“Ø–ª—ç—ç–Ω –∑”©–≤—à”©”©—Ä”©—Ö", + "Decline" : "–ó”©–≤—à”©”©—Ä”©—Ö–≥“Ø–π", + "{user1} invited you to a federated conversation" : "{user1} таныг федерац яриа руу урисан", + "Someone reacted" : "Хэн нэгэн хариу үйлдэл үзүүлсэн", + "New message" : "—à–∏–Ω—ç –∑—É—Ä–≤–∞—Å", + "Reminder" : "Сануулга", + "Someone mentioned you" : "Хэн нэгэн таныг дурдсан", + "Notification" : "Мэдэгдэл", + "Someone reacted in a private conversation" : "Хэн нэгэн хувийн яриад хариу үйлдэл үзүүлсэн", + "You received a message in a private conversation" : "Та хувийн яриад мессеж хүлээн авлаа", + "Reminder in a private conversation" : "Хувийн яриад сануулга", + "Someone mentioned you in a private conversation" : "Хэн нэгэн таныг хувийн яриад дурдсан", + "Notification in a private conversation" : "Хувийн яриад мэдэгдэл", + "Reminder: You in {call}" : "Сануулга: Та {call}-д", + "Reminder: {user} in {call}" : "Сануулга: {user} {call}-д", + "Reminder: Deleted user in {call}" : "Сануулга: Устгагдсан хэрэглэгч {call}-д", + "Reminder: {guest} (guest) in {call}" : "Сануулга: {guest} (зочин) {call}-д", + "Reminder: Guest in {call}" : "Сануулга: Зочин {call}-д", + "{user} reacted with {reaction}" : "{user} {reaction} хариу үйлдэл үзүүлсэн", + "{user} reacted with {reaction} in {call}" : "{user} {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "Deleted user reacted with {reaction} in {call}" : "Устгагдсан хэрэглэгч {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (зочин) {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "Guest reacted with {reaction} in {call}" : "Зочин {call}-д {reaction} хариу үйлдэл үзүүлсэн", + "{user} in {call}" : "{user} {call}-д", + "Deleted user in {call}" : "Устгагдсан хэрэглэгч {call}-д", + "{guest} (guest) in {call}" : "{guest} (зочин) {call}-д", + "Guest in {call}" : "Зочин {call}-д", + "{user} sent you a private message" : "{user} танд хувийн мессеж илгээсэн", + "{user} sent a message in conversation {call}" : "{user} {call} яриад мессеж илгээсэн", + "A deleted user sent a message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриад мессеж илгээсэн", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (зочин) {call} яриад мессеж илгээсэн", + "A guest sent a message in conversation {call}" : "Зочин {call} яриад мессеж илгээсэн", + "{user} replied to your private message" : "{user} таны хувийн мессежид хариулсан", + "{user} replied to your message in conversation {call}" : "{user} {call} яриад таны мессежид хариулсан", + "A deleted user replied to your message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриад таны мессежид хариулсан", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (зочин) {call} яриад таны мессежид хариулсан", + "A guest replied to your message in conversation {call}" : "Зочин {call} яриад таны мессежид хариулсан", + "Reminder: You in private conversation {call}" : "Сануулга: Та {call} хувийн харилцан яриад", + "Reminder: A deleted user in private conversation {call}" : "Сануулга: Устгагдсан хэрэглэгч {call} хувийн харилцан яриад", + "Reminder: {user} in private conversation" : "Сануулга: {user} хувийн харилцан яриад", + "Reminder: You in conversation {call}" : "Сануулга: Та {call} харилцан яриад", + "Reminder: {user} in conversation {call}" : "Сануулга: {user} {call} харилцан яриад", + "Reminder: A deleted user in conversation {call}" : "Сануулга: Устгагдсан хэрэглэгч {call} харилцан яриад", + "Reminder: {guest} (guest) in conversation {call}" : "Сануулга: {guest} (зочин) {call} харилцан яриад", + "Reminder: A guest in conversation {call}" : "Сануулга: Зочин {call} харилцан яриад", + "{user} reacted with {reaction} to your private message" : "{user} таны хувийн мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} {call} харилцан ярианд таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Устгагдсан хэрэглэгч {call} яриан дахь таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (зочин) {call} яриан дахь таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "A guest reacted with {reaction} to your message in conversation {call}" : "Зочин {call} харилцан ярианд таны мессежид {reaction} хариу үйлдэл үзүүлсэн", + "{user} mentioned you in a private conversation" : "{user} таныг хувийн харилцан ярианд дурдсан", + "{user} mentioned group {group} in conversation {call}" : "{user} {call} харилцан ярианд {group} бүлгийг дурдсан", + "{user} mentioned team {team} in conversation {call}" : "{user} {call} харилцан ярианд {team} багийг дурдсан", + "{user} mentioned everyone in conversation {call}" : "{user} {call} харилцан ярианд бүгдийг дурдсан", + "{user} mentioned you in conversation {call}" : "{user} {call} харилцан ярианд таныг дурдсан", + "A deleted user mentioned group {group} in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд {group} бүлгийг дурдсан", + "A deleted user mentioned team {team} in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд {team} багийг дурдсан", + "A deleted user mentioned everyone in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд бүгдийг дурдсан", + "A deleted user mentioned you in conversation {call}" : "Устгагдсан хэрэглэгч {call} харилцан ярианд таныг дурдсан", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд {group} бүлгийг дурдсан", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд {team} багийг дурдсан", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд бүгдийг дурдсан", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (зочин) {call} харилцан ярианд таныг дурдсан", + "A guest mentioned group {group} in conversation {call}" : "Зочин {call} харилцан ярианд {group} бүлгийг дурдсан", + "A guest mentioned team {team} in conversation {call}" : "Зочин {call} харилцан ярианд {team} багийг дурдсан", + "A guest mentioned everyone in conversation {call}" : "Зочин {call} харилцан ярианд бүгдийг дурдсан", + "A guest mentioned you in conversation {call}" : "Зочин {call} харилцан ярианд таныг дурдсан", + "View message" : "Мессеж харах", + "Dismiss reminder" : "Сануулгыг хаах", + "View chat" : "Чат харах", + "{user} invited you to a group conversation: {call}" : "{user} таныг бүлгийн яриа руу урисан: {call}", + "Join call" : "Дуудлагад нэгдэх", + "Answer call" : "Дуудлага хариулах", + "{user} would like to talk with you" : "{user} тантай ярихыг хүсч байна", + "Call back" : "Буцаж залгах", + "You missed a call from {user}" : "Та {user}-ийн дуудлагыг алдсан", + "Accept call" : "Дуудлага хүлээн авах", + "Incoming phone call from {call}" : "{call}-аас ирж буй утасны дуудлага", + "You missed a phone call from {call}" : "Та {call}-ийн утасны дуудлагыг алдсан", + "A group call has started in {call}" : "{call}-д бүлгийн дуудлага эхэлсэн", + "You missed a group call in {call}" : "Та {call}-д бүлгийн дуудлагыг алдсан", + "{email} is requesting the password to access {file}" : "{email} {file} файлд хандах нууц үг хүсч байна", + "{email} tried to request the password to access {file}" : "{email} {file} файлд хандах нууц үг хүсэхийг оролдсон", + "Someone is requesting the password to access {file}" : "Хэн нэгэн {file} файлд хандах нууц үг хүсч байна", + "Someone tried to request the password to access {file}" : "Хэн нэгэн {file} файлд хандах нууц үг хүсэхийг оролдсон", + "Open settings" : "Тохиргоо нээх", + "Hosted signaling server added" : "Байршуулсан signaling сервер нэмэгдсэн", + "The hosted signaling server is now configured and will be used." : "Байршуулсан signaling сервер тохируулагдсан ба ашиглагдах болно.", + "Hosted signaling server removed" : "Байршуулсан signaling сервер устгагдсан", + "The hosted signaling server was removed and will not be used anymore." : "Байршуулсан signaling сервер устгагдсан ба цаашид ашиглагдахгүй.", + "Hosted signaling server changed" : "Байршуулсан signaling сервер өөрчлөгдсөн", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Байршуулсан дохионы серверийн бүртгэлийн төлөв \"{oldstatus}\"-аас \"{newstatus}\" болж өөрчлөгдсөн.", + "pending" : "хүлээгдэж байна", + "active" : "идэвхтэй", + "expired" : "дууссан", + "blocked" : "хаагдсан", + "error" : "алдаа", + "The certificate of {host} expires in {days} days" : "{host}-ийн сертификат {days} хоногийн дараа дуусна", + "The certificate of {host} expired" : "{host}-ийн сертификат дууссан", + "Contact via Talk" : "Talk-аар холбогдох", + "Open Talk" : "Talk нээх", + "Default" : "Өгөгдмөл", + "Presentation" : "Танилцуулга", + "Webinar" : "Вебинар", + "Conversations" : "Яриа", + "Messages in current conversation" : "Одоогийн ярианы мессежүүд", + "{user}" : "{user}", + "Messages" : "Мессежүүд", + "{user} in {conversation}" : "{user} {conversation}-д", + "Messages in other conversations" : "Бусад ярианы мессежүүд", + "One-to-one rooms always need to show the other users avatar" : "Нэг нэгтэйгээ өрөөнүүд үргэлж нөгөө хэрэглэгчийн аватарыг харуулах шаардлагатай", + "Invalid emoji character" : "Буруу эможи тэмдэгт", + "Invalid background color" : "Буруу дэвсгэр өнгө", + "Avatar image is not square" : "–•”©—Ä”©–≥ –∑—É—Ä–∞–≥ –¥”©—Ä–≤”©–ª–∂–∏–Ω –±–∏—à", + "Room {number}" : "Өрөө {number}", + "Other" : "–ë—É—Å–∞–¥", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Туршилтын сервер холбогдох боломжгүй тул туршилт хүсэж чадсангүй. Дараа дахин оролдоно уу.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Энэ серверийн нэвтрэлт танилтад асуудал байна. Магадгүй URL-ыг баталгаажуулахын тулд гаднаас хандах боломжгүй байж болно.", + "Something unexpected happened." : "Гэнэтийн зүйл тохиолдлоо.", + "The URL is invalid." : "URL буруу байна.", + "An HTTPS URL is required." : "HTTPS URL шаардлагатай.", + "The email address is invalid." : "Имэйл хаяг буруу байна.", + "The language is invalid." : "Хэл буруу байна.", + "The country is invalid." : "Улс буруу байна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Туршилтын хүсэлтэд асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "Too many requests are send from your servers address. Please try again later." : "Таны серверийн хаягаас хэт олон хүсэлт илгээгдсэн. Дараа дахин оролдоно уу.", + "There is already a trial registered for this Nextcloud instance." : "Энэ Nextcloud instance-д туршилт аль хэдийн бүртгэгдсэн байна.", + "Something unexpected happened. Please try again later." : "Гэнэтийн зүйл тохиолдлоо. Дараа дахин оролдоно уу.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Туршилтын сервер буруу ажилласан тул туршилт хүсэж чадсангүй. Дараа дахин оролдоно уу.", + "Trial requested but failed to get account information. Please check back later." : "Туршилт хүсэгдсэн боловч бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Энэ хүсэлтийн нэвтрэлт танилтад асуудал байна. Магадгүй URL-ыг баталгаажуулахын тулд гаднаас хандах боломжгүй байж болно.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Туршилтын сервер буруу ажилласан тул бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Бүртгэлийн мэдээллийг авахад асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "There is no such account registered." : "Ийм бүртгэл бүртгэгдээгүй байна.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Туршилтын сервер холбогдох боломжгүй тул бүртгэлийн мэдээллийг авч чадсангүй. Дараа дахин шалгана уу.", + "Deleting the hosted signaling server account failed. Please check back later." : "Байршуулсан дохионы серверийн бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Туршилтын сервер буруу ажилласан тул бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "There is a problem with deleting the account. Please check your logs for further information." : "Бүртгэлийг устгахад асуудал гарлаа. Дэлгэрэнгүй мэдээллийг логоос шалгана уу.", + "Too many requests are sent from your servers address. Please try again later." : "Таны серверийн хаягаас хэт олон хүсэлт илгээгдсэн. Дараа дахин оролдоно уу.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Туршилтын сервер холбогдох боломжгүй тул бүртгэлийг устгаж чадсангүй. Дараа дахин шалгана уу.", + "Note to self" : "Өөртөө тэмдэглэл", + "A place for your private notes, thoughts and ideas" : "Таны хувийн тэмдэглэл, бодол санаа бичих газар", + "Transcript is AI generated and may contain mistakes" : "Транскрипц нь AI-аар үүсгэгдсэн бөгөөд алдаа агуулж болно", + "Summary is AI generated and may contain mistakes" : "Хураангуй нь AI-аар үүсгэгдсэн бөгөөд алдаа агуулж болно", + "Let's get started!" : "Эхэлцгээе!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** нь Nextcloud экосистемтэй нягт уялдсан, аюулгүй, өөрийн серверт байршуулдаг харилцааны платформ юм.\n\n#### Nextcloud Talk-ийн гол боломжууд:\n\n* Хувийн болон бүлгийн чатад мессеж бичих\n* Дуу болон видео дуудлага\n* Файл хуваалцах ба бусад Nextcloud аппуудтай нэгтгэх\n* Ярианы тохиргоо, модераци болон нууцлалын удирдлага\n* Вэб, ширээний компьютер болон гар утас (iOS ба Android)\n* Хувийн ба аюулгүй харилцаа\n\n Дэлгэрэнгүйг [хэрэглэгчийн баримт бичиг](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)-ээс үзнэ үү.", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Talk-д тавтай морил\n\nNextcloud Talk нь Nextcloud-тай нэгтгэгдсэн хувийн бөгөөд хүчирхэг мессежийн апп юм. Хувийн эсвэл бүлгийн яриагаар чатлах, дуу болон видео дуудлагаар хамтран ажиллах, вебинар болон арга хэмжээ зохион байгуулах, яриагаа тохируулах болон бусад олон боломжтой.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Та мессежид хариулах, бусад чат болон хүмүүст дамжуулах, эсвэл мессежийн агуулгыг хуулах боломжтой.", + "Andorra" : "Андорра", + "United Arab Emirates" : "Арабын Нэгдсэн Эмират", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа ба Барбуда", + "Anguilla" : "Ангилья", + "Albania" : "Албани", + "Armenia" : "Армени", + "Angola" : "Ангол", + "Antarctica" : "Антарктид", + "Argentina" : "Аргентин", + "American Samoa" : "Америкийн Самоа", + "Austria" : "Австри", + "Australia" : "Австрали", + "Aruba" : "Аруба", + "Åland Islands" : "Аланд арлууд", + "Azerbaijan" : "Азербайжан", + "Bosnia and Herzegovina" : "Босни Герцеговин", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельги", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Болгар", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сент-Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливи", + "Bonaire, Sint Eustatius and Saba" : "Бонэйр, Синт-Эстатиус ба Саба", + "Brazil" : "Бразил", + "Bahamas" : "Багамын арлууд", + "Bhutan" : "Бутан", + "Bouvet Island" : "Бувэ арал", + "Botswana" : "Ботсвана", + "Belarus" : "Беларусь", + "Belize" : "Белиз", + "Canada" : "Канад", + "Cocos (Keeling) Islands" : "Кокос (Кийлинг) арлууд", + "Congo, the Democratic Republic of the" : "Бүгд Найрамдах Ардчилсан Конго", + "Central African Republic" : "Төв Африкийн Бүгд Найрамдах Улс", + "Congo" : "Конго", + "Switzerland" : "Швейцарь", + "Côte d'Ivoire" : "Кот-д'Ивуар", + "Cook Islands" : "Күүкийн арлууд", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Хятад", + "Colombia" : "Колумб", + "Costa Rica" : "Коста Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Зул сарын арал", + "Cyprus" : "Кипр", + "Czechia" : "Чех", + "Germany" : "Герман", + "Djibouti" : "Джибути", + "Denmark" : "Дани", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканы Бүгд Найрамдах Улс", + "Algeria" : "Алжир", + "Ecuador" : "Эквадор", + "Estonia" : "Эстони", + "Egypt" : "Египет", + "Western Sahara" : "Баруун Сахар", + "Eritrea" : "Эритрей", + "Spain" : "Испани", + "Ethiopia" : "Этиоп", + "Finland" : "Финланд", + "Fiji" : "Фижи", + "Falkland Islands (Malvinas)" : "Фолкландын арлууд", + "Micronesia, Federated States of" : "Микронезийн Холбооны Улс", + "Faroe Islands" : "Фарерын арлууд", + "France" : "Франц", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Их Британи ба Хойд Ирландын Нэгдсэн Хаант Улс", + "Grenada" : "Гренада", + "Georgia" : "Гүрж", + "French Guiana" : "Францын Гвиана", + "Guernsey" : "Гернси", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамби", + "Guinea" : "Гвиней", + "Guadeloupe" : "Гваделуп", + "Equatorial Guinea" : "Экваторын Гвиней", + "Greece" : "Грек", + "South Georgia and the South Sandwich Islands" : "Өмнөд Жоржиа ба Өмнөд Сэндвичийн арлууд", + "Guatemala" : "Гватемал", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвиней-Бисау", + "Guyana" : "Гайана", + "Hong Kong" : "Хонг Конг", + "Heard Island and McDonald Islands" : "Херд арал ба Макдональд арлууд", + "Honduras" : "Гондурас", + "Croatia" : "Хорват", + "Haiti" : "Гаити", + "Hungary" : "Унгар", + "Indonesia" : "Индонез", + "Ireland" : "Ирланд", + "Israel" : "Израиль", + "Isle of Man" : "Мэн арал", + "India" : "Энэтхэг", + "British Indian Ocean Territory" : "Британийн Энэтхэгийн далайн нутаг дэвсгэр", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран", + "Iceland" : "Исланд", + "Italy" : "Итали", + "Jersey" : "Жерси", + "Jamaica" : "Ямайка", + "Jordan" : "Иордан", + "Japan" : "Япон", + "Kenya" : "Кени", + "Kyrgyzstan" : "Киргиз", + "Cambodia" : "Камбож", + "Kiribati" : "Кирибати", + "Comoros" : "Коморын арлууд", + "Saint Kitts and Nevis" : "Сент-Киттс ба Невис", + "Korea, Democratic People's Republic of" : "Хойд Солонгос", + "Korea, Republic of" : "Өмнөд Солонгос", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманы арлууд", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сент-Люсиа", + "Liechtenstein" : "Лихтенштейн", + "Sri Lanka" : "Шри-Ланка", + "Liberia" : "Либери", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латви", + "Libya" : "Ливи", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдав", + "Montenegro" : "Монтенегро", + "Saint Martin (French part)" : "Сент-Мартин (Францын хэсэг)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршаллын арлууд", + "North Macedonia" : "Хойд Македони", + "Mali" : "Мали", + "Myanmar" : "Мьянмар", + "Mongolia" : "Монгол", + "Macao" : "Макао", + "Northern Mariana Islands" : "Хойд Марианы арлууд", + "Martinique" : "Мартиник", + "Mauritania" : "Мавритан", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикий", + "Maldives" : "Мальдив", + "Malawi" : "Малави", + "Mexico" : "Мексик", + "Malaysia" : "Малайз", + "Mozambique" : "Мозамбик", + "Namibia" : "Намиби", + "New Caledonia" : "Шинэ Каледони", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолк арал", + "Nigeria" : "Нигери", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерланд", + "Norway" : "Норвеги", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуэ", + "New Zealand" : "Шинэ Зеланд", + "Oman" : "Оман", + "Panama" : "Панам", + "Peru" : "Перу", + "French Polynesia" : "Францын Полинез", + "Papua New Guinea" : "Папуа Шинэ Гвиней", + "Philippines" : "Филиппин", + "Pakistan" : "Пакистан", + "Poland" : "Польш", + "Saint Pierre and Miquelon" : "Сент-Пьер ба Микелон", + "Pitcairn" : "Питкэрн", + "Puerto Rico" : "Пуэрто-Рико", + "Palestine, State of" : "Палестин", + "Portugal" : "Португал", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюнион", + "Romania" : "Румын", + "Serbia" : "Серби", + "Russian Federation" : "Орос", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудын Араб", + "Solomon Islands" : "Соломоны арлууд", + "Seychelles" : "Сейшелийн арлууд", + "Sudan" : "Судан", + "Sweden" : "Швед", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Сент-Хелена, Асенсион ба Тристан-да-Кунья", + "Slovenia" : "Словени", + "Svalbard and Jan Mayen" : "Свалбард ба Ян Майен", + "Slovakia" : "Словак", + "Sierra Leone" : "Сьерра-Леоне", + "San Marino" : "Сан-Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомали", + "Suriname" : "Суринам", + "South Sudan" : "Өмнөд Судан", + "Sao Tome and Principe" : "Сан-Томе ба Принсипи", + "El Salvador" : "Эль Сальвадор", + "Sint Maarten (Dutch part)" : "Синт-Мартен (Голландын хэсэг)", + "Syrian Arab Republic" : "Сири", + "Eswatini" : "Эсватини", + "Turks and Caicos Islands" : "Тёркс ба Кайкос арлууд", + "Chad" : "Чад", + "French Southern Territories" : "Францын өмнөд нутаг дэвсгэр", + "Togo" : "Того", + "Thailand" : "Тайланд", + "Tajikistan" : "Тажикстан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Зүүн Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турк", + "Trinidad and Tobago" : "Тринидад ба Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзани", + "Ukraine" : "Украин", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "АНУ-ын бага алслагдсан арлууд", + "United States of America" : "Америкийн Нэгдсэн Улс", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Ватикан", + "Saint Vincent and the Grenadines" : "Сент-Винсент ба Гренадин", + "Venezuela, Bolivarian Republic of" : "Венесуэл", + "Virgin Islands, British" : "Британийн Виржиний арлууд", + "Virgin Islands, U.S." : "АНУ-ын Виржиний арлууд", + "Viet Nam" : "Вьетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоллис ба Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майотта", + "South Africa" : "Өмнөд Африк", + "Zambia" : "Замби", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Дэвсгэр бүдгэрүүлэлт", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM ачааллын дэмжлэгийг шалгаж чадсангүй. Вэб сервер `.wasm` файлуудыг үйлчилж байгаа эсэхийг гараар шалгана уу.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Таны вэб сервер `.wasm` файлуудыг зөв дамжуулахаар тохируулагдаагүй байна. Энэ нь ихэвчлэн Nginx тохиргооны асуудал юм. Арын дэвсгэрийн бүдэгрүүлэлтийн хувьд `.wasm` файлуудыг мөн дамжуулахаар тохируулах шаардлагатай. Nginx тохиргоогоо бидний баримт бичиг дэх зөвлөмж болгосон тохиргоотой харьцуулна уу.", + "Talk configuration values" : "Talk тохиргооны утгууд", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Дуудлагын хугацааг албадах нь зөвхөн системийн cron-оор дэмжигддэг. Системийн cron-ыг идэвхжүүлэх эсвэл `max_call_duration` тохиргоог устгана уу.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Бага `max_call_duration` утгуудыг (одоо %d гэж тохируулагдсан) техникийн хязгаарлалтаас шалтгаалан хэрэгжүүлэх боломжгүй. Арын ажил зөвхөн 5 минут тутамд ажилладаг тул өөрийн эрсдэлээр ашиглана уу.", + "Federation" : "—Ö–æ–ª–±–æ–æ", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Talk Federation идэвхжүүлсэн үед \"memcache.locking\" тохируулахыг зөвлөж байна.", + "High-performance backend" : "Өндөр гүйцэтгэлтэй backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Өндөр гүйцэтгэлтэй backend тохируулагдаагүй - Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-гүйгээр ажиллуулах нь зөвхөн маш жижиг дуудлагуудад (хамгийн ихдээ 2-3 оролцогч) тохирно. Олон оролцогчтой дуудлагууд жигд ажиллахын тулд Өндөр гүйцэтгэлтэй backend тохируулна уу.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Өндөр гүйцэтгэлтэй backend-ийн \"conversation_cluster\" горимыг ажиллуулах нь хуучирсан бөгөөд дараагийн хувилбарт дэмжигдэхгүй болно. Өндөр гүйцэтгэлтэй backend одоо жинхэнэ кластерлалтыг дэмждэг бөгөөд үүнийг оронд нь ашиглах хэрэгтэй.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Олон Өндөр гүйцэтгэлтэй backend тодорхойлох нь хуучирсан бөгөөд дараагийн хувилбарт дэмжигдэхгүй болно. Үүний оронд кластерлагдсан дохионы серверүүдтэй хамт ачаалал тэнцвэржүүлэгч тохируулж, Talk тохиргоонд тохируулах хэрэгтэй.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "%1$s алгоритмд ашиглагдаж буй хадгалсан нийтийн түлхүүр хадгалсан хувийн түлхүүртэй таарахгүй байна. Асуудлыг засахын тулд %2$s ажиллуулна уу.", + "High-performance backend not configured correctly. Run %s for details." : "Өндөр гүйцэтгэлтэй backend зөв тохируулагдаагүй. Дэлгэрэнгүй мэдээлэл авахын тулд %s-г ажиллуулна уу.", + "High-performance backend not configured correctly" : "Өндөр гүйцэтгэлтэй backend зөв тохируулагдаагүй", + "Error: Cannot connect to server" : "Алдаа: Серверт холбогдох боломжгүй", + "Error: Server did not respond with proper JSON" : "Алдаа: Сервер зөв JSON-оор хариулсангүй", + "Error: Certificate expired" : "Алдаа: Сертификат дууссан", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Алдаа: Nextcloud сервер болон Өндөр гүйцэтгэлтэй backend серверийн системийн цаг синхрончлогдоогүй байна. Хоёр серверийг цагийн серверт холбох эсвэл цагийг гараар синхрончилно уу.", + "Could not get version" : "Хувилбарыг авч чадсангүй", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Алдаа: Ажиллаж буй хувилбар: {version}; Talk-ийн энэ хувилбартай нийцтэй болгохын тулд серверийг шинэчлэх шаардлагатай", + "Error: Server responded with: {error}" : "Алдаа: Сервер хариулсан: {error}", + "Error: Unknown error occurred" : "Алдаа: Үл мэдэгдэх алдаа гарлаа", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Анхааруулга: Ажиллаж буй хувилбар: {version}; Сервер Talk-ийн энэ хувилбарын бүх боломжуудыг дэмждэггүй, дутуу боломжууд: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-тэй ажиллуулахад санах ойн кэш тохируулахыг зөвлөж байна.", + "Client Push" : "Клиент Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push суулгагдсан, энэ нь Talk мэдэгдлүүдийн цаг тухайд нь ирэх байдлыг сайжруулна.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} суулгаагүй байна. Энэ нь Talk мэдэгдлүүдийг хоцроох магадлалтай.", + "Recording backend" : "Бичлэгийн backend", + "Using the recording backend requires a High-performance backend." : "Бичлэгийн backend ашиглахад Өндөр гүйцэтгэлтэй backend шаардлагатай.", + "No recording backend configured" : "Бичлэгийн backend тохируулагдаагүй", + "SIP configuration" : "SIP тохиргоо", + "Using the SIP functionality requires a High-performance backend." : "SIP функционал ашиглахад Өндөр гүйцэтгэлтэй backend шаардлагатай.", + "No SIP backend configured" : "SIP backend тохируулагдаагүй", + "Invalid date, date format must be YYYY-MM-DD" : "Огноо буруу, огнооны формат YYYY-MM-DD байх ёстой", + "Conversation not found" : "Яриа олдсонгүй", + "Path is already shared with this conversation" : "Зам аль хэдийн энэ яриатай хуваалцагдсан байна", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC ашиглан чат, видео болон аудио хурал", + "Leave call" : "Дуудлагаас гарах", + "Navigating away from the page will leave the call in {conversation}" : "Хуудаснаас гарах нь {conversation} дуудлагаас гарна", + "Stay in call" : "Дуудлагад үлдэх", + "Error occurred when getting the conversation information" : "Ярианы мэдээлэл авахад алдаа гарлаа", + "Discuss this file" : "Энэ файлыг хэлэлцэх", + "Share this file with others to discuss it" : "Энэ файлыг бусадтай хуваалцаж хэлэлцэх", + "Share this file" : "Энэ файлыг хуваалцах", + "Join conversation" : "Яриад нэгдэх", + "This conversation is password-protected." : "Энэ яриа нууц үгээр хамгаалагдсан.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Таны IP хаягаас олон удаагийн буруу нууц үг оруулах оролдлого илэрсэн. Тиймээс таны дараагийн оролдлогыг 30 секунд хүртэл хязгаарлав.", + "The password is wrong. Try again." : "Нууц үг буруу байна. Дахин оролдоно уу.", + "Password" : "–ù—É—É—Ü “Ø–≥", + "Submit" : "–º—ç–¥—ç–≥–¥—ç—Ö", + "Error requesting the password." : "Нууц үг хүсэхэд алдаа гарлаа.", + "Request password" : "Нууц үг хүсэх", + "This conversation has ended" : "Энэ яриа дууссан", + "Error occurred when joining the conversation" : "Яриад нэгдэхэд алдаа гарлаа", + "Close Talk sidebar" : "Talk хажуугийн мөрийг хаах", + "Open Talk sidebar" : "Talk хажуугийн мөрийг нээх", + "Everyone" : "–ë“Ø—Ö —Ö—ç—Ä—ç–≥–ª—ç–≥—á–∏–¥", + "Users and moderators" : "Хэрэглэгчид болон модераторууд", + "Moderators only" : "Зөвхөн модераторууд", + "Disable calls" : "Дуудлагыг идэвхгүй болгох", + "Save changes" : "”®”©—Ä—á–ª”©–ª—Ç–∏–π–≥ —Ö–∞–¥–≥–∞–ª–∞—Ö", + "Saving …" : "Хадгалж байна …", + "Saved!" : "–•–∞–¥–≥–∞–ª–∞–≥–¥–ª–∞–∞!", + "Limit to groups" : "Бүлгүүдэд хязгаарлах", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Дор хаяж нэг бүлэг сонгогдсон үед зөвхөн жагсаасан бүлгүүдийн хүмүүс яриануудад оролцох боломжтой.", + "Guests can still join public conversations." : "Зочид нийтийн яриануудад нэгдэх боломжтой хэвээр.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Talk ашиглах боломжгүй болсон хэрэглэгчид өмнөх яриануудад оролцогчоор жагсаасан хэвээр байх ба тэдний чат мессежүүд мөн хадгалагдана.", + "Limit using Talk" : "Talk ашиглахыг хязгаарлах", + "Limit creating a public and group conversation" : "Нийтийн болон бүлгийн яриа үүсгэхийг хязгаарлах", + "Limit creating conversations" : "Яриа үүсгэхийг хязгаарлах", + "Limit starting a call" : "Дуудлага эхлүүлэхийг хязгаарлах", + "Limit starting calls" : "Дуудлага эхлүүлэхийг хязгаарлах", + "When a call has started, everyone with access to the conversation can join the call." : "Дуудлага эхэлсэн үед яриад хандах эрхтэй бүх хүн дуудлагад нэгдэх боломжтой.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Дараах ботууд энэ серверт суулгагдсан. Баримт бичгээс {linkstart1}өөрийн бот хэрхэн бүтээх{linkend} эсвэл серверт идэвхжүүлэх {linkstart2}ботуудын жагсаалт{linkend}-ыг олж болно.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Энэ серверт ямар ч бот суулгагдаагүй байна. Баримт бичгээс {linkstart1}өөрийн бот хэрхэн бүтээх{linkend} эсвэл серверт идэвхжүүлэх {linkstart2}ботуудын жагсаалт{linkend}-ыг олж болно.", + "Description is not provided" : "Тодорхойлолт өгөгдөөгүй", + "Locked for moderators" : "Модераторуудад түгжигдсэн", + "Enabled" : "–ò–¥—ç–≤—Ö–∏–∂“ؓؖª—ç—Ö", + "Disabled" : "–∏–¥—ç–≤—Ö–∏–≥“Ø–π", + "Bots settings" : "Ботуудын тохиргоо", + "State" : "Төлөв", + "Name" : "–ù—ç—Ä", + "Last error" : "Сүүлийн алдаа", + "Total errors count" : "Нийт алдааны тоо", + "Find more bots" : "Илүү олон бот олох", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Итгэмжлэгдсэн серверүүдийг {linkstart}Хуваалцах тохиргооны хуудас{linkend}-аас тохируулж болно.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Холбогдсон чатууд болон дуудлагууд аль хэдийн ажиллаж байна. Хавсралт зохицуулалт ирээдүйн хувилбарт нэмэгдэнэ.", + "Enable Federation in Talk app" : "Talk апп-д Федерацийг идэвхжүүлэх", + "Permissions" : "Зөвшөөрлүүд", + "Allow users to be invited to federated conversations" : "Хэрэглэгчдийг федерацийн яриануудад урих боломжийг зөвшөөрөх", + "Allow users to invite federated users into conversation" : "Хэрэглэгчдэд федерацийн хэрэглэгчдийг яриад урих боломжийг зөвшөөрөх", + "Only allow to federate with trusted servers" : "Зөвхөн итгэмжит серверүүдтэй федерац хийхийг зөвшөөрөх", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Дор хаяж нэг бүлэг сонгогдсон үед зөвхөн жагсаасан бүлгүүдийн хүмүүс холбогдсон хэрэглэгчдийг яриануудад урих боломжтой.", + "Groups allowed to invite federated users" : "Федерацийн хэрэглэгчдийг урих эрхтэй бүлгүүд", + "All messages" : "Бүх мессеж", + "@-mentions only" : "Зөвхөн @-дурдалт", + "Off" : "Унтраах", + "General settings" : "Ерөнхий тохиргоо", + "Default notification settings" : "Өгөгдмөл мэдэгдлийн тохиргоо", + "Default group notification" : "Өгөгдмөл бүлгийн мэдэгдэл", + "Default group notification for new groups" : "Шинэ бүлгүүдэд зориулсан өгөгдмөл бүлгийн мэдэгдэл", + "Integration into other apps" : "Бусад апп-уудад нэгтгэл", + "Allow conversations on files" : "Файлууд дээр яриа зөвшөөрөх", + "Allow conversations on public shares for files" : "Файлуудын нийтийн хуваалцалт дээр яриа зөвшөөрөх", + "End-to-end encrypted calls" : "Төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагууд", + "Enable encryption" : "Шифрлэлтийг идэвхжүүлэх", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "SIP гүүртэй тохируулсан төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагууд нь Өндөр гүйцэтгэлтэй backend болон SIP гүүрийн шинэ хувилбар шаарддаг.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Гар утасны клиентүүд одоогоор төгсгөлөөс төгсгөл хүртэл шифрлэгдсэн дуудлагыг дэмждэггүй.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Дээрх товчийг дарснаар маягтын мэдээллийг Struktur AG-ийн серверүүд рүү илгээнэ. Нэмэлт мэдээллийг {linkstart}spreed.eu{linkend}-аас олж болно.", + "Pending" : "–•“Ø–ª—ç—ç–≥–¥—ç–∂ –±–∞–π–≥–∞–∞", + "Error" : "–ê–ª–¥–∞–∞", + "Blocked" : "–•–∞–∞–≥–¥—Å–∞–Ω", + "Active" : "Идэвхтэй", + "Expired" : "Дууссан", + "Never" : "—Ö—ç–∑—ç—ç—á", + "The trial could not be requested. Please try again later." : "Туршилтыг хүсэх боломжгүй байна. Дараа дахин оролдоно уу.", + "The account could not be deleted. Please try again later." : "Бүртгэлийг устгах боломжгүй байна. Дараа дахин оролдоно уу.", + "Hosted High-performance backend" : "Хостлогдсон Өндөр гүйцэтгэлтэй backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Бидний хамтрагч Struktur AG нь байршуулсан дохионы сервер хүсэх үйлчилгээ үзүүлдэг. Үүний тулд доорх маягтыг бөглөхөд л хангалттай бөгөөд таны Nextcloud хүсэлт илгээх болно. Сервер тохируулагдсаны дараа нэвтрэх мэдээлэл автоматаар бөглөгдөнө. Энэ нь одоо байгаа дохионы серверийн тохиргоог дарж бичнэ.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Хэрэв таны Өндөр гүйцэтгэлтэй backend бүртгэлд STUN ба/эсвэл TURN функц багтсан бол тохиргоо зохих ёсоор шинэчлэгдэнэ.", + "URL of this Nextcloud instance" : "Энэ Nextcloud instance-ийн URL", + "Full name of the user requesting the trial" : "Туршилт хүсэж буй хэрэглэгчийн бүтэн нэр", + "Email of the user" : "Хэрэглэгчийн имэйл", + "Language" : "–•—ç–ª", + "Country" : "–£–ª—Å", + "Request signaling server trial" : "Сигнал серверийн туршилт хүсэх", + "You can see the current status of your hosted signaling server in the following table." : "Байршуулсан дохионы серверийнхээ одоогийн төлөвийг дараах хүснэгтээс харж болно.", + "Status" : "—Ç”©–ª”©–≤", + "Created at" : "“ؓؗŖ≥—ç–≥–¥—Å—ç–Ω", + "Expires at" : "Дуусах", + "Limits" : "Хязгаарууд", + "STUN included" : "STUN багтсан", + "Yes" : "Тийм", + "No" : "Үгүй", + "TURN included" : "TURN багтсан", + "Delete the signaling server account" : "Сигнал серверийн бүртгэлийг устгах", + "_%n user_::_%n users_" : ["%n хэрэглэгч","%n хэрэглэгч"], + "Installed version: {version}" : "Суулгасан хувилбар: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Talk-ыг бусад үйлчилгээнүүдтэй холбохын тулд Matterbridge суулгаж болно, дэлгэрэнгүй мэдээллийг {linkstart1}GitHub хуудас{linkend}-аас үзнэ үү. Аппыг татаж суулгахад хэсэг хугацаа шаардагдаж болно. Хугацаа хэтэрвэл {linkstart2}Nextcloud App Store{linkend}-оос гараар суулгана уу.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary олдсонгүй эсвэл ажиллуулах боломжгүй.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Та мөн тохиргоогоор дамжуулан Matterbridge хоёртын файлын замыг гараар тохируулж болно. Нэмэлт мэдээллийг {linkstart}Matterbridge нэгтгэлийн баримт бичиг{linkend}-ээс шалгана уу.", + "Install Talk Matterbridge" : "Talk Matterbridge суулгах", + "An error occurred while installing the Matterbridge app" : "Matterbridge апп суулгахад алдаа гарлаа", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridge суулгах явцад алдаа гарлаа. Гараар суулгана уу", + "Failed to execute Matterbridge binary." : "Matterbridge binary ажиллуулж чадсангүй.", + "Matterbridge integration" : "Matterbridge нэгтгэл", + "Enable Matterbridge integration" : "Matterbridge нэгтгэлийг идэвхжүүлэх", + "Status: Checking connection" : "Төлөв: Холболтыг шалгаж байна", + "OK: Running version: {version}" : "За: Ажиллаж буй хувилбар: {version}", + "Error: Server seems to be a Signaling server" : "Алдаа: Сервер Signaling сервер байх бололтой", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Алдаа: Nextcloud сервер болон Бичлэгийн backend серверийн системийн цаг синхрончлогдоогүй байна. Хоёр серверийг цагийн серверт холбох эсвэл цагийг гараар синхрончилно уу.", + "Recording backend URL" : "Бичлэгийн backend URL", + "Validate SSL certificate" : "SSL сертификатыг баталгаажуулах", + "Delete this server" : "Энэ серверийг устгах", + "Test this server" : "Энэ серверийг тест хийх", + "Disabled for all calls" : "Бүх дуудлагад идэвхгүй болсон", + "Enabled for all calls" : "Бүх дуудлагад идэвхтэй", + "Configurable on conversation level by moderators" : "Модераторууд ярианы түвшинд тохируулж болно", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-ийн \"upload_max_filesize\" эсвэл \"post_max_size\" тохиргоо нь зөвхөн {maxUpload} хүртэлх хэмжээтэй файл байршуулахыг зөвшөөрнө.", + "Recording backend settings saved" : "Бичлэгийн backend тохиргоо хадгалагдлаа", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модераторуудад ярианы түвшинд зөвшөөрөл идэвхжүүлэх боломж олгоно. Энэ яриан дахь дуудлага бүрд нэгдэхийн өмнө оролцогч бүрээс бичлэг хийх зөвшөөрөл шаардагдана.", + "The consent to be recorded will be required for each participant before joining every call." : "Дуудлага бүрд нэгдэхийн өмнө оролцогч бүрээс бичлэг хийх зөвшөөрөл шаардагдана.", + "The consent to be recorded is not required." : "Бичигдэх зөвшөөрөл шаардлагагүй.", + "Recording backend configuration is only possible with a High-performance backend." : "Бичлэгийн backend тохиргоо нь зөвхөн Өндөр гүйцэтгэлтэй backend-тэй хамт боломжтой.", + "Add a new recording backend server" : "Шинэ бичлэгийн backend сервер нэмэх", + "Shared secret" : "Хуваалцсан нууц түлхүүр", + "Recording consent" : "Бичлэгийн зөвшөөрөл", + "Recording transcription" : "Бичлэгийн транскрипц", + "Automatically transcribe call recordings with a transcription provider" : "Дуудлагын бичлэгүүдийг транскрипц үйлчилгээ үзүүлэгчээр автоматаар хуулбарлах", + "Automatically summarize call recordings with transcription and summary providers" : "Хуулбарлалт болон хураангуйн үйлчилгээ үзүүлэгчийн тусламжтай дуудлагын бичлэгүүдийг автоматаар хураангуйл", + "SIP configuration saved!" : "SIP тохиргоо хадгалагдлаа!", + "SIP configuration is only possible with a High-performance backend." : "SIP тохиргоо нь зөвхөн Өндөр гүйцэтгэлтэй backend-тэй боломжтой.", + "Enable SIP Dial-out option" : "SIP залгах сонголтыг идэвхжүүлэх", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "SIP залгах боломжийг дэмжихийн тулд дохионы серверийг шинэчлэх шаардлагатай.", + "Do not show SIP Dial-out caller number" : "SIP залгах дугаарыг бүү харуулах", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Нэргүй дугаар дуудлага хүлээн авагчид \"тодорхойгүй\" эсвэл \"нуусан дугаар\" гэж харагдах ёстой", + "Dial-out number" : "Залгах дугаар", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Гарах дуудлагуудад нөөц дуудлага хийгчийн дугаар болгон E164 форматтай дугаар ашиглагдана", + "Dial-out prefix" : "Залгах угтвар", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Гадагш дуудлагын хэрэглэгчийн дугаарын өмнөх угтвар (өгөгдмөл нь `+`)", + "Restrict SIP configuration" : "SIP тохиргоог хязгаарлах", + "Enable SIP configuration" : "SIP тохиргоог идэвхжүүлэх", + "Only users of the following groups can enable SIP in conversations they moderate" : "Зөвхөн дараах бүлгүүдийн хэрэглэгчид өөрсдийн модераци хийдэг яриануудад SIP-ийг идэвхжүүлж чадна", + "Phone number (Country)" : "Утасны дугаар (Улс)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Энэ мэдээлэл урилгын и-мэйлээр илгээгдэх бөгөөд бүх оролцогчдод хажуугийн самбарт харуулагдана.", + "Nextcloud base URL" : "Nextcloud үндсэн URL", + "Talk Backend URL" : "Talk Backend URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Боломжит функцууд", + "Error: Websocket connection failed" : "Алдаа: Websocket холболт амжилтгүй болсон", + "Error code" : "Алдааны код", + "Error message" : "Алдааны мессеж", + "Error: Websocket connection failed. Check browser console" : "Алдаа: Websocket холболт амжилтгүй болсон. Хөтчийн консолыг шалгана уу", + "High-performance backend URL" : "Өндөр гүйцэтгэлтэй backend URL", + "Missing High-performance backend warning hidden" : "Өндөр гүйцэтгэлтэй backend дутуу анхааруулга нуугдсан", + "High-performance backend settings saved" : "Өндөр гүйцэтгэлтэй backend тохиргоо хадгалагдлаа", + "Nextcloud Talk setup not complete" : "Nextcloud Talk тохиргоо дуусаагүй", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Өндөр гүйцэтгэлтэй backend-гүйгээр 2-оос олон оролцогчтой дуудлагуудад оролцогчид холболтын асуудалтай тулгарах магадлалтай бөгөөд оролцож буй төхөөрөмжүүдэд их ачаалал үүсгэнэ гэдгийг анхаарна уу.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Олон оролцогчтой дуудлагууд жигд ажиллахын тулд Өндөр гүйцэтгэлтэй backend суулгана уу.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Хурдан суулгах заавар", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Олон оролцогчтой дуудлага болон яриануудад Өндөр гүйцэтгэлтэй backend шаардлагатай. Backend-гүйгээр бүх оролцогчид нэг бүрчлэн бусад оролцогч бүрд зориулж өөрсдийн видеог байршуулах шаардлагатай бөгөөд энэ нь холболтын асуудал болон оролцож буй төхөөрөмжүүдэд их ачаалал үүсгэнэ.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Talk-ыг Өндөр гүйцэтгэлтэй backend-тэй ашиглахад тархсан кэш тохируулахыг зөвлөж байна.", + "Add High-performance backend server" : "Өндөр гүйцэтгэлтэй backend сервер нэмэх", + "Warn about connectivity issues in calls with more than 2 participants" : "2-оос олон оролцогчтой дуудлагуудад холболтын асуудлын талаар анхааруулах", + "STUN server URL" : "STUN серверийн URL", + "The server address is invalid" : "Серверийн хаяг буруу байна", + "STUN settings saved" : "STUN тохиргоо хадгалагдлаа", + "STUN servers" : "STUN серверүүд", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN сервер нь чиглүүлэгчийн ард байгаа оролцогчдын нийтийн IP хаягийг тодорхойлоход ашиглагддаг.", + "Add a new STUN server" : "Шинэ STUN сервер нэмэх", + "{schema} scheme must be used with a domain" : "{schema} схемийг домайнтай хамт ашиглах ёстой", + "{option1} and {option2}" : "{option1} болон {option2}", + "{option} only" : "Зөвхөн {option}", + "OK: Successful ICE candidates returned by the TURN server" : "За: TURN сервер амжилттай ICE нэр дэвшигчид буцаасан", + "Error: No working ICE candidates returned by the TURN server" : "Алдаа: TURN сервер ажиллаж байгаа ICE нэр дэвшигч буцаасангүй", + "Testing whether the TURN server returns ICE candidates" : "TURN сервер ICE нэр дэвшигч буцааж байгаа эсэхийг тест хийж байна", + "TURN server schemes" : "TURN серверийн схемүүд", + "TURN server URL" : "TURN серверийн URL", + "TURN server secret" : "TURN серверийн нууц", + "TURN server protocols" : "TURN серверийн протоколууд", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сервер нь галт хана ард байгаа оролцогчдын урсгалыг прокси хийхэд ашиглагддаг. Хэрэв тодорхой оролцогчид бусадтай холбогдож чадахгүй бол TURN сервер шаардлагатай байх магадлалтай. Тохируулах зааврыг {linkstart}энэ баримт бичиг{linkend}-ээс үзнэ үү.", + "TURN settings saved" : "TURN тохиргоо хадгалагдлаа", + "TURN servers" : "TURN серверүүд", + "Add a new TURN server" : "Шинэ TURN сервер нэмэх", + "Failed" : "Амжилтгүй", + "OK" : "–æ–∫", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Амжилтгүй: WebAssembly идэвхгүй эсвэл энэ хөтчид дэмжигдэхгүй байна. Шалгалт хийхийн тулд WebAssembly-г идэвхжүүлэх эсвэл дэмждэг хөтөч ашиглана уу.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Амжилтгүй: \".wasm\" болон \".tflite\" файлуудыг вэб сервер зөв буцааж чадсангүй. Talk баримт бичгийн \"Системийн шаардлага\" хэсгийг шалгана уу.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "За: \".wasm\" ба \".tflite\" файлууд веб сервероос зөв буцаагдсан.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP болон Apache тохиргоо нийцэхгүй байна. PHP-ийг зөвхөн MPM_PREFORK модультай, PHP-FPM-ийг зөвхөн MPM_EVENT модультай ашиглах боломжтой гэдгийг анхаарна уу.", + "Web server setup checks" : "Веб серверийн тохиргооны шалгалтууд", + "Files required for virtual background can be loaded" : "Виртуал дэвсгэрт шаардлагатай файлуудыг ачаалах боломжтой", + "Federated user" : "Холбооны хэрэглэгч", + "Assign participants to rooms" : "Оролцогчдыг өрөөнүүдэд хуваарилах", + "Configure breakout rooms" : "Салангид өрөөнүүдийг тохируулах", + "Number of breakout rooms" : "Салангид өрөөнүүдийн тоо", + "You can create from 1 to 20 breakout rooms." : "Та 1-ээс 20 хүртэл салангид өрөө үүсгэх боломжтой.", + "Assignment method" : "Хуваарилах арга", + "Automatically assign participants" : "Оролцогчдыг автоматаар хуваарилах", + "Manually assign participants" : "Оролцогчдыг гараар хуваарилах", + "Allow participants to choose" : "Оролцогчдод сонгох боломж олгох", + "Create rooms" : "Өрөөнүүд үүсгэх", + "Confirm" : "–ë–∞—Ç–ª–∞—Ö", + "Create breakout rooms" : "Салангид өрөөнүүд үүсгэх", + "Reset" : "—Ç–æ—Ö–∏—Ä—É—É–ª–∞—Ö", + "Delete breakout rooms" : "Салангид өрөөнүүдийг устгах", + "Room {roomNumber}" : "Өрөө {roomNumber}", + "Current breakout rooms and settings will be lost" : "Одоогийн салангид өрөөнүүд болон тохиргоо алдагдана", + "Cancel" : "–±–æ–ª–∏—É–ª–∞—Ö", + "Unassigned participants" : "Хуваарилагдаагүй оролцогчид", + "Back" : "–±—É—Ü–∞—Ö", + "Assign" : "Хуваарилах", + "Add participant \"{user}\"" : "\"{user}\" оролцогч нэмэх", + "Now" : "Одоо", + "Invalid calendar selected" : "Буруу календар сонгосон", + "Invalid start time selected" : "Буруу эхлэх цаг сонгосон", + "Invalid end time selected" : "Буруу дуусах цаг сонгосон", + "Unknown error occurred" : "Үл мэдэгдэх алдаа гарлаа", + "Sending no invitations" : "Урилга илгээхгүй", + "{participant0} will receive an invitation" : "{participant0} урилга хүлээн авна", + "{participant0} and {participant1} will receive invitations" : "{participant0} болон {participant1} урилга хүлээн авна", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} болон %n бусад урилга хүлээн авна","{participant0}, {participant1} болон %n бусад урилга хүлээн авна"], + "Invite {user}" : "{user}-г урих", + "Invite all users and emails in this conversation" : "Энэ ярианд байгаа бүх хэрэглэгчид болон имэйлүүдийг урих", + "Meeting created" : "Уулзалт үүсгэгдлээ", + "Upcoming meetings" : "Удахгүй болох уулзалтууд", + "Loading …" : "Ачаалж байна …", + "No upcoming meetings" : "Удахгүй болох уулзалт байхгүй", + "Schedule a meeting" : "Уулзалт товлох", + "Meeting title" : "Уулзалтын гарчиг", + "From" : "Эхлэх", + "To" : "Хүртэл", + "Calendar" : "–ö–∞–ª–µ–Ω–¥–∞—Ä—å", + "Attendees" : "–û—Ä–æ–ª—Ü–æ–≥—á–∏–¥", + "No other participants to send invitations to." : "Урилга илгээх өөр оролцогч байхгүй.", + "Add attendees" : "Оролцогчид нэмэх", + "Save" : "–•–∞–¥–≥–∞–ª–∞—Ö", + "Search participants" : "Оролцогчид хайх", + "No results" : "“Æ—Ä –¥“Ø–Ω –±–∞–π—Ö–≥“Ø–π", + "Done" : "Дууслаа", + "Disable live transcription" : "Шууд транскрипцийг идэвхгүй болгох", + "Disable live translation" : "Шууд орчуулгыг идэвхгүй болгох", + "Original language: {languageName}" : "Эх хэл: {languageName}", + "Translated language" : "Орчуулсан хэл", + "Translated language: {languageName}" : "Орчуулсан хэл: {languageName}", + "Raise hand" : "Гар өргөх", + "Raise hand (R)" : "Гар өргөх (R)", + "Lower hand" : "Гар буулгах", + "Lower hand (R)" : "Гар буулгах (R)", + "Exit full screen (F)" : "Бүтэн дэлгэцнээс гарах (F)", + "Full screen (F)" : "Бүтэн дэлгэц (F)", + "Speaker view" : "Илтгэгчийн харагдац", + "Grid view" : "Торон харагдац", + "Error when trying to load the available live transcription languages" : "Боломжит шууд транскрипц хэлүүдийг ачаалахад алдаа гарлаа", + "Failed to enable live transcription" : "Шууд транскрипцийг идэвхжүүлж чадсангүй", + "Failed to enable live translations" : "Шууд орчуулгыг идэвхжүүлж чадсангүй", + "Failed to disable live translations" : "Шууд орчуулгыг идэвхгүй болгож чадсангүй", + "Recording consent is required" : "Бичлэгийн зөвшөөрөл шаардлагатай", + "This conversation is read-only" : "Энэ яриа зөвхөн унших горимд байна", + "Conversation not found or not joined" : "Яриа олдсонгүй эсвэл нэгдээгүй", + "Lobby is still active and you're not a moderator" : "Лобби идэвхтэй хэвээр байна, та модератор биш", + "Connection failed" : "Холболт амжилтгүй", + "Reload" : "Дахин ачаалах", + "{nickName} raised their hand." : "{nickName} гараа өргөлөө.", + "A participant raised their hand." : "Нэг оролцогч гараа өргөлөө.", + "Collapse stripe" : "Зураасыг хураах", + "Expand stripe" : "Зураасыг дэлгэх", + "Previous page of videos" : "Видеоны өмнөх хуудас", + "Next page of videos" : "Видеоны дараагийн хуудас", + "Waiting for {user} to join the call" : "{user} дуудлагад нэгдэхийг хүлээж байна", + "You can invite others in the participant tab of the sidebar" : "Та хажуугийн мөрний оролцогчийн табаас бусдыг урих боломжтой", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Та хажуугийн самбарын оролцогчид табаас бусдыг урих эсвэл энэ холбоосыг хуваалцаж бусдыг урих боломжтой!", + "Share this link to invite others!" : "Бусдыг урихын тулд энэ холбоосыг хуваалцаарай!", + "Copy link" : "–•–æ–ª–±–æ–æ—Å —Ö—É—É–ª–∞—Ö", + "You are not allowed to enable audio" : "Та аудио идэвхжүүлэх эрхгүй байна", + "No audio. Click to select device" : "Аудио байхгүй. Төхөөрөмж сонгохын тулд дарна уу", + "Mute audio" : "Аудио хаах", + "Mute audio (M)" : "Аудио хаах (M)", + "Unmute audio" : "Аудио нээх", + "Unmute audio (M)" : "Аудио нээх (M)", + "None" : "—é—É —á “Ø–≥“Ø–π", + "Select a microphone" : "Микрофон сонгох", + "Select a speaker" : "Чанга яригч сонгох", + "Microphone settings" : "Микрофоны тохиргоо", + "Check devices" : "Төхөөрөмжүүдийг шалгах", + "Access to camera was denied" : "Камерт хандах эрхийг татгалзлаа", + "Error while accessing camera: It is likely in use by another program" : "Камерт хандахад алдаа гарлаа: Өөр програм ашиглаж байх магадлалтай", + "Error while accessing camera" : "Камерт хандахад алдаа гарлаа", + "You have been muted by a moderator" : "Модератор таныг хаасан", + "Hide presenter video" : "Илтгэгчийн видеог нуух", + "You are not allowed to enable video" : "Та видео идэвхжүүлэх эрхгүй байна", + "No video. Click to select device" : "Видео байхгүй. Төхөөрөмж сонгохын тулд дарна уу", + "Disable video" : "Видео идэвхгүй болгох", + "Disable video (V)" : "Видео идэвхгүй болгох (V)", + "Enable video" : "Видео идэвхжүүлэх", + "Enable video (V)" : "Видео идэвхжүүлэх (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх - Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх (V) - Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Видео идэвхжүүлэх. Видеог анх удаа идэвхжүүлэхэд таны холболт түр тасрах болно", + "Select a video device" : "Видео төхөөрөмж сонгох", + "Show presenter" : "Илтгэгчийг харуулах", + "You" : "Та", + "Mute" : "Хаах", + "Muted" : "Хаагдсан", + "Show screen" : "Дэлгэц харуулах", + "Stop following" : "Дагахаа зогсоох", + "Collapse" : "Хураах", + "Expand" : "Дэлгэх", + "You need to be logged in to upload files" : "Файл байршуулахын тулд нэвтрэх шаардлагатай", + "Drop your files to upload" : "Файлуудаа байршуулахын тулд энд тавина уу", + "Conversation messages" : "Ярианы мессежүүд", + "Scroll to bottom" : "Доош гүйлгэх", + "Post message" : "Мессеж илгээх", + "Federated conversation" : "Федерацийн яриа", + "Public conversation" : "Нийтийн яриа", + "Favorite" : "–î—É—Ä—Ç–∞–π", + "Banned users" : "Хориглогдсон хэрэглэгчид", + "Manage the list of banned users in this conversation." : "Энэ ярианд хориглогдсон хэрэглэгчдийн жагсаалтыг удирдах.", + "Manage bans" : "Хориглолтуудыг удирдах", + "No banned users" : "Хориглогдсон хэрэглэгч байхгүй", + "Banned by:" : "Хориглосон:", + "Date:" : "–û–≥–Ω–æ–æ:", + "Note:" : "Тэмдэглэл:", + "Hide details" : "Дэлгэрэнгүйг нуух", + "Show details" : "Дэлгэрэнгүйг харуулах", + "Unban" : "Хориг тайлах", + "Error while updating conversation name" : "Ярианы нэр шинэчлэхэд алдаа гарлаа", + "Error while updating conversation description" : "Ярианы тодорхойлолт шинэчлэхэд алдаа гарлаа", + "Enter a name for this conversation" : "Энэ яриаг нэрлэнэ үү", + "Edit conversation name" : "Ярианы нэр засах", + "Edit conversation description" : "Ярианы тодорхойлолт засах", + "Enter a description for this conversation" : "Энэ ярианы тодорхойлолт оруулна уу", + "Picture" : "Зураг", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Дараах ботуудыг энэ яриад идэвхжүүлж болно. Энэ серверт илүү олон бот суулгуулахын тулд администрацитайгаа холбогдоно уу.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Энэ серверт ямар ч бот суулгагдаагүй байна. Бот суулгуулахын тулд администрацитайгаа холбогдоно уу.", + "Disable" : "Идэвхгүй болгох", + "Enable" : "Идэвхжүүлэх", + "Breakout rooms" : "Салангид өрөөнүүд", + "Manage breakout rooms" : "Салангид өрөөнүүдийг удирдах", + "Set up breakout rooms for this conversation" : "Энэ яриад салангид өрөөнүүд тохируулах", + "Please select a valid PNG or JPG file" : "Хүчинтэй PNG эсвэл JPG файл сонгоно уу", + "Choose your conversation picture" : "Ярианы зургаа сонгоно уу", + "Choose" : "–°–æ–Ω–≥–æ—Ö", + "Error setting conversation picture" : "Ярианы зураг тохируулахад алдаа гарлаа", + "Could not set the conversation picture: {error}" : "Ярианы зургийг тохируулж чадсангүй: {error}", + "Error cropping conversation picture" : "Ярианы зургийг тайрахад алдаа гарлаа", + "Error removing conversation picture" : "Ярианы зургийг арилгахад алдаа гарлаа", + "Set emoji as conversation picture" : "Эможийг ярианы зураг болгох", + "Set background color for conversation picture" : "Ярианы зургийн дэвсгэр өнгө тохируулах", + "Upload conversation picture" : "Ярианы зураг байршуулах", + "Choose conversation picture from files" : "Файлуудаас ярианы зураг сонгох", + "Remove conversation picture" : "Ярианы зургийг арилгах", + "The file must be a PNG or JPG" : "Файл PNG эсвэл JPG байх ёстой", + "Set picture" : "Зураг тохируулах", + "Default permissions modified for {conversationName}" : "{conversationName}-ийн өгөгдмөл зөвшөөрлүүд өөрчлөгдлөө", + "Could not modify default permissions for {conversationName}" : "{conversationName}-ийн өгөгдмөл зөвшөөрлүүдийг өөрчлөх боломжгүй", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Энэ ярианы оролцогчдын анхдагч зөвшөөрлүүдийг засварла. Эдгээр тохиргоо модераторуудад нөлөөлөхгүй.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Энэ хэсэгт зөвшөөрлүүдийг өөрчлөх бүрд тодорхой оролцогчдод өмнө нь олгогдсон тусгай зөвшөөрлүүд устах болно.", + "All permissions" : "Бүх зөвшөөрөл", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Оролцогчид дуудлага эхлүүлэх, дуудлагад нэгдэх, аудио болон видео идэвхжүүлэх, дэлгэц хуваалцах зөвшөөрөлтэй.", + "Restricted" : "–•—è–∑–≥–∞–∞—Ä–ª–∞–≥–¥—Å–∞–Ω", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Оролцогчид дуудлагад нэгдэх боломжтой боловч модератор гараар зөвшөөрөл олгох хүртэл аудио, видео идэвхжүүлэх, дэлгэц хуваалцах боломжгүй.", + "Advanced permissions" : "Нарийвчилсан зөвшөөрлүүд", + "Edit permissions" : "Зөвшөөрлүүд засах", + "Conversation settings" : "Ярианы тохиргоо", + "Basic Info" : "Үндсэн мэдээлэл", + "Personal" : "–•—É–≤–∏–π–Ω", + "Moderation" : "Модераци", + "Setup overview" : "Тохиргооны тойм", + "Live transcription" : "Шууд транскрипц", + "Enable live transcription" : "Шууд транскрипцийг идэвхжүүлэх", + "Breakout Rooms" : "Салангид өрөөнүүд", + "Matterbridge" : "Matterbridge", + "Bots" : "Ботууд", + "Danger zone" : "Аюултай бүс", + "Archive conversation" : "Яриаг архивлах", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивлагдсан яриа анхдагчаар ярианы жагсаалтаас нуугддаг. Гэхдээ ярианы нэрээр хайх эсвэл архивлагдсан ярианы жагсаалтад хандахад харагдах болно.", + "Do you really want to leave \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" яриаг орхих уу?", + "You can archive this conversation instead." : "Та оронд нь энэ яриаг архивлаж болно.", + "Leave conversation" : "Яриаг орхих", + "You need to promote a new moderator before you can leave the conversation" : "Яриаг орхихын өмнө шинэ модератор дэвшүүлэх шаардлагатай", + "Delete conversation" : "Яриаг устгах", + "Do you really want to delete \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" яриаг устгах уу?", + "Error while deleting conversation" : "Яриаг устгахад алдаа гарлаа", + "Delete all chat messages" : "Бүх чат мессежийг устгах", + "Do you really want to delete all messages in \"{displayName}\"?" : "Та үнэхээр \"{displayName}\" ярианы бүх мессежийг устгах уу?", + "Error while clearing chat history" : "Чатын түүхийг цэвэрлэхэд алдаа гарлаа", + "Be careful, these actions cannot be undone." : "Болгоомжтой байгаарай, эдгээр үйлдлийг буцаах боломжгүй.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Яриаг орхисны дараа хаалттай яриад дахин нэгдэхэд урилга шаардлагатай. Нээлттэй яриад хэдийд ч дахин нэгдэж болно.", + "Permanently delete this conversation." : "Энэ яриаг бүрмөсөн устгах.", + "Delete chat messages" : "Чат мессежийг устгах", + "Permanently delete all the messages in this conversation." : "Энэ ярианы бүх мессежийг бүрмөсөн устгах.", + "_%n hour_::_%n hours_" : ["%n цаг","%n цаг"], + "_%n day_::_%n days_" : ["%n өдөр","%n өдөр"], + "_%n week_::_%n weeks_" : ["%n долоо хоног","%n долоо хоног"], + "Custom expiration time" : "Тусгай дуусах хугацаа", + "Message expiration disabled" : "Мессежийн дуусах хугацаа идэвхгүй болсон", + "Message expiration set: {duration}" : "Мессежийн дуусах хугацаа тохируулагдсан: {duration}", + "Error when trying to set message expiration" : "Мессежийн дуусах хугацаа тохируулахад алдаа гарлаа", + "Message expiration" : "Мессежийн дуусах хугацаа", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Чат мессежүүд тодорхой хугацааны дараа хугацаа дуусч болно. Тэмдэглэл: Чатад хуваалцсан файлууд эзэмшигчийн хувьд устахгүй, гэхдээ яриан дотор хуваалцагдахаа болино.", + "Set message expiration" : "Мессежийн дуусах хугацаа тохируулах", + "Current message expiration" : "Одоогийн мессежийн дуусах хугацаа", + "Password copied to clipboard" : "Нууц үг санах ойд хуулагдлаа", + "Password could not be copied" : "Нууц үгийг хуулж чадсангүй", + "Guest access" : "Зочны хандалт", + "Breakout rooms are not allowed in public conversations." : "Нийтийн яриануудад салангид өрөөнүүд зөвшөөрөгдөхгүй.", + "Allow guests to join this conversation via link" : "Зочдод холбоосоор энэ яриад нэгдэхийг зөвшөөрөх", + "Password protection" : "Password protection", + "This conversation is password-protected. Guests need password to join" : "Энэ яриа нууц үгээр хамгаалагдсан. Зочид нэгдэхэд нууц үг хэрэгтэй", + "Password protection is needed for public conversations" : "Нийтийн яриануудад нууц үгээр хамгаалалт шаардлагатай", + "Set a password" : "Нууц үг тохируулах", + "Change password" : "Нууц үг өөрчлөх", + "Enter new password" : "Шинэ нууц үг оруулах", + "Save password" : "Нууц үг хадгалах", + "Copy password" : "Нууц үг хуулах", + "Guests are allowed to join this conversation via link" : "Зочдод холбоосоор энэ яриад нэгдэх зөвшөөрөгдсөн", + "Guests are not allowed to join this conversation" : "Зочдод энэ яриад нэгдэх зөвшөөрөгдөөгүй", + "Resend invitations" : "Урилга дахин илгээх", + "This conversation is open to both registered users and users created with the Guests app" : "Энэ яриа бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээлттэй", + "This conversation is open to registered users" : "Энэ яриа бүртгэлтэй хэрэглэгчдэд нээлттэй", + "This conversation is limited to the current participants" : "Энэ яриа одоогийн оролцогчдоор хязгаарлагдсан", + "You opened the conversation to both registered users and users created with the Guests app" : "Та яриаг бүртгэлтэй хэрэглэгчид болон Guests аппаар үүсгэсэн хэрэглэгчдэд нээсэн", + "Error occurred when opening or limiting the conversation" : "Яриаг нээх эсвэл хязгаарлахад алдаа гарлаа", + "Open conversation to registered users, showing it in search results" : "Бүртгэлтэй хэрэглэгчдэд яриа нээх, хайлтын үр дүнд харуулах", + "Also open to users created with the Guests app" : "Мөн Зочин апп-аар үүсгэсэн хэрэглэгчдэд нээлттэй", + "Open conversation" : "Яриа нээх", + "Set language spoken in calls" : "Дуудлагад ярих хэлийг тохируулах", + "Languages could not be loaded" : "Хэлүүдийг ачаалж чадсангүй", + "Invalid language" : "Буруу хэл", + "Default language (English)" : "Өгөгдмөл хэл (Англи)", + "Default live transcription language set" : "Өгөгдмөл шууд транскрипцийн хэл тохируулагдлаа", + "Live transcription language set: {languageName}" : "Шууд транскрипцийн хэл тохируулагдсан: {languageName}", + "Error when trying to set live transcription language" : "Шууд транскрипцийн хэл тохируулахад алдаа гарлаа", + "Start time: {date}" : "Эхлэх цаг: {date}", + "Start time has been updated" : "Эхлэх цаг шинэчлэгдлээ", + "Error occurred while updating start time" : "Эхлэх цагийг шинэчлэхэд алдаа гарлаа", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Лобби идэвхжүүлснээр модератор биш хүмүүсийг явагдаж буй дуудлагаас хасна.", + "Enable lobby, restricting the conversation to moderators" : "Лобби идэвхжүүлж, яриаг модераторуудаар хязгаарлах", + "Meeting start time" : "Уулзалтын эхлэх цаг", + "Start time (optional)" : "Эхлэх цаг (заавал биш)", + "Import email participants" : "Имэйл оролцогчдыг импортлох", + "You can import a list of email participants from a CSV file." : "Та CSV файлаас имэйл оролцогчдын жагсаалтыг импортлож болно.", + "Poll drafts" : "Санал асуулгын ноорогууд", + "Browse poll drafts" : "Санал асуулгын нооргуудыг үзэх", + "Error occurred when locking the conversation" : "Яриаг түгжихэд алдаа гарлаа", + "Error occurred when unlocking the conversation" : "Ярианы түгжээг тайлахад алдаа гарлаа", + "Lock conversation" : "Яриаг түгжих", + "This will also terminate the ongoing call." : "Энэ мөн явагдаж буй дуудлагыг дуусгана.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Хэн ч мессеж бичих эсвэл дуудлага эхлүүлэхээс сэргийлж яриаг түгж", + "Edit" : "–∑–∞—Å–≤–∞—Ä–ª–∞—Ö", + "More information" : "Дэлгэрэнгүй мэдээлэл", + "Delete" : "–£—Å—Ç–≥–∞—Ö", + "Add new bridged channel to current conversation" : "Одоогийн яриад шинэ гүүр суваг нэмэх", + "unknown state" : "үл мэдэгдэх төлөв", + "running" : "ажиллаж байна", + "not running, check Matterbridge log" : "ажиллаагүй байна, Matterbridge логоо шалгана уу", + "not running" : "ажиллаагүй байна", + "Bridge saved" : "Гүүр хадгалагдлаа", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge-ийн тусламжтай янз бүрийн шуурхай мессежийн системүүдийн сувгуудыг холбож болно.", + "More info on Matterbridge" : "Matterbridge-ийн талаар дэлгэрэнгүй", + "Messaging systems" : "Мессежийн системүүд", + "Enable bridge" : "Гүүрийг идэвхжүүлэх", + "Show Matterbridge log" : "Matterbridge лог харуулах", + "Log content" : "Логын агуулга", + "Only moderators are allowed to mention @all" : "Зөвхөн модераторууд @all дурдах эрхтэй", + "All participants are allowed to mention @all" : "Бүх оролцогчид @all дурдах эрхтэй", + "Participants are now allowed to mention @all." : "Оролцогчдод одоо @all дурдах зөвшөөрөгдлөө.", + "Mentioning @all has been limited to moderators." : "@all дурдахыг модераторуудаар хязгаарлалаа.", + "Allow participants to mention @all" : "Оролцогчдод @all дурдахыг зөвшөөрөх", + "Mention permissions" : "Дурдах зөвшөөрлүүд", + "Notifications" : "–ú—ç–¥—ç–≥–¥—ç–ª", + "Notify about calls in this conversation" : "Энэ ярианы дуудлагуудын талаар мэдэгдэх", + "Important conversation" : "Чухал яриа", + "\"Do not disturb\" user status is ignored for important conversations" : "Чухал яриануудад \"Бүү саад бол\" хэрэглэгчийн төлөвийг үл хэрэгсэнэ", + "Sensitive conversation" : "Мэдрэмтгий яриа", + "Message preview will be disabled in conversation list and notifications" : "Мессежийн урьдчилсан харагдац ярианы жагсаалт болон мэдэгдлүүдэд идэвхгүй болно", + "Recording consent is required for calls in this conversation" : "Энэ ярианы дуудлагуудад бичлэгийн зөвшөөрөл шаардлагатай", + "Recording consent is not required for calls in this conversation" : "Энэ ярианы дуудлагуудад бичлэгийн зөвшөөрөл шаардлагагүй", + "Recording consent requirement was updated" : "Бичлэгийн зөвшөөрлийн шаардлага шинэчлэгдлээ", + "Error occurred while updating recording consent" : "Бичлэгийн зөвшөөрлийг шинэчлэхэд алдаа гарлаа", + "Recording Consent" : "Бичлэгийн зөвшөөрөл", + "Recording consent cannot be changed once a call or breakout session has started." : "Дуудлага эсвэл салангид хуралдаан эхэлсний дараа бичлэгийн зөвшөөрлийг өөрчлөх боломжгүй.", + "Require recording consent before joining call in this conversation" : "Энэ ярианы дуудлагад нэгдэхээс өмнө бичлэгийн зөвшөөрөл шаардах", + "Recording consent is required for all calls" : "Бүх дуудлагад бичлэгийн зөвшөөрөл шаардлагатай", + "SIP dial-in is now possible without PIN requirement" : "PIN шаардлагагүйгээр SIP залгах боломжтой болсон", + "SIP dial-in is now enabled" : "SIP залгалт одоо идэвхжлээ", + "SIP dial-in is now disabled" : "SIP залгалт одоо идэвхгүй болсон", + "Error occurred when enabling SIP dial-in" : "SIP залгалтыг идэвхжүүлэхэд алдаа гарлаа", + "Error occurred when disabling SIP dial-in" : "SIP залгалтыг идэвхгүй болгоход алдаа гарлаа", + "Phone and SIP dial-in" : "Утас болон SIP залгалт", + "Enable phone and SIP dial-in" : "Утас болон SIP залгалтыг идэвхжүүлэх", + "Allow to dial-in without a PIN" : "PIN-гүйгээр залгахыг зөвшөөрөх", + "Ongoing" : "Үргэлжилж байна", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n хүн зөвшөөрсөн","%n хүн зөвшөөрсөн"], + "_%n person declined_::_%n people declined_" : ["%n хүн татгалзсан","%n хүн татгалзсан"], + "_and %n other attachment_::_and %n other attachments_" : ["болон %n бусад хавсралт","болон %n бусад хавсралт"], + "With {displayName}" : "{displayName}-тай", + "In {conversation}" : "{conversation} яриад", + "View attachment" : "Хавсралт харах", + "Join" : "Нэгдэх", + "View conversation" : "Яриа харах", + "View event on Calendar" : "Календарт арга хэмжээ харах", + "Error while creating the conversation" : "Яриа үүсгэхэд алдаа гарлаа", + "Hello, {displayName}" : "Сайн байна уу, {displayName}", + "Start meeting now" : "Уулзалтыг одоо эхлүүлэх", + "Give your meeting a title" : "Уулзалтынхаа гарчгийг оруулна уу", + "Create and copy link" : "Үүсгэж холбоос хуулах", + "Create a new conversation" : "Шинэ яриа үүсгэх", + "Join open conversations" : "Нээлттэй яриануудад нэгдэх", + "Call a phone number" : "Утасны дугаар руу залгах", + "Scroll backward" : "Арагш гүйлгэх", + "Scroll forward" : "Урагш гүйлгэх", + "Schedule meetings" : "Уулзалтууд товлох", + "You don't have any upcoming meetings" : "Танд удахгүй болох уулзалт байхгүй", + "Open calendar" : "Календар нээх", + "Unread mentions" : "Уншаагүй дурдалтууд", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Таныг дурдсан мессежүүд энд харагдана. @ бичээд нэрийг нь оруулж хүмүүсийг дурдаж болно", + "Upcoming reminders" : "Удахгүй болох сануулгууд", + "Message reminders" : "Мессежийн сануулгууд", + "Set a reminder on a message to be notified" : "Мэдэгдэл авахын тулд мессеж дээр сануулга тохируулах", + "Start a group conversation" : "Бүлгийн яриа эхлүүлэх", + "Create conversation" : "Яриа үүсгэх", + "Enter your name" : "Нэрээ оруулна уу", + "Submit name and join" : "Нэр илгээж нэгдэх", + "Do you already have an account?" : "Танд аль хэдийн бүртгэл байна уу?", + "Log in" : "–ù—ç–≤—Ç—Ä—ç—Ö", + "Error while verifying uploaded file" : "Байршуулсан файлыг баталгаажуулахад алдаа гарлаа", + "Uploaded file is verified" : "Байршуулсан файл баталгаажлаа", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Агуулгын формат нь таслалаар тусгаарлагдсан утгууд (CSV):
- Толгой мөр шаардлагатай бөгөөд \"name\",\"email\" эсвэл зөвхөн \"email\" байх ёстой
- Мөр бүрт нэг оруулга (жишээ нь \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Оролцогчид амжилттай нэмэгдлээ", + "Error while adding participants" : "Оролцогчид нэмэхэд алдаа гарлаа", + "Import a file" : "Файл импортлох", + "Browse" : "Хайх", + "This might take a moment" : "Энэ хэсэг хугацаа шаардаж болно", + "Send invitations" : "Урилга илгээх", + "_%n invalid email_::_%n invalid emails_" : ["%n буруу имэйл","%n буруу имэйл"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n имэйл аль хэдийн импортлогдсон эсвэл давхардсан","%n имэйл аль хэдийн импортлогдсон эсвэл давхардсан"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n урилга илгээх боломжтой","%n урилга илгээх боломжтой"], + "An error occurred while calling a phone number" : "Утасны дугаар руу залгахад алдаа гарлаа", + "Phone number could not be called: {error}" : "Утасны дугаар руу залгах боломжгүй: {error}", + "Phone number could not be called" : "Утасны дугаар руу залгах боломжгүй", + "Search participants or phone numbers" : "Оролцогчид эсвэл утасны дугаар хайх", + "Mark as read" : "Уншсан гэж тэмдэглэх", + "Mark as unread" : "Уншаагүй гэж тэмдэглэх", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "Unarchive conversation" : "Архиваас гаргах", + "Ignore \"Do not disturb\"" : "\"Бүү саад бол\"-ыг үл хэрэгсэх", + "You need to promote a new moderator before you can leave the conversation." : "Яриаг орхихын өмнө шинэ модератор дэвшүүлэх шаардлагатай.", + "Conversation actions" : "Ярианы үйлдлүүд", + "Notify about calls" : "Дуудлагуудын талаар мэдэгдэх", + "Hide message text" : "Мессежийн текстийг нуух", + "Pending invitations" : "Хүлээгдэж буй урилгууд", + "From {user} at {remoteServer}" : "{remoteServer}-ийн {user}-аас", + "Decline invitation" : "Урилгаас татгалзах", + "Accept invitation" : "Урилга хүлээн авах", + "No pending invitations" : "Хүлээгдэж буй урилга байхгүй", + "Home" : "–ù“ؓؗÄ", + "Unread" : "Уншаагүй", + "Mentions" : "Дурдалтууд", + "Meetings" : "Уулзалтууд", + "Alphabetically" : "Цагаан толгойн дарааллаар", + "No followed threads" : "Дагасан thread байхгүй", + "No matches found" : "Тохирох зүйл олдсонгүй", + "No conversations found" : "Яриа олдсонгүй", + "You have no archived conversations." : "Танд архивлагдсан яриа байхгүй.", + "Subscribe to an existing thread or start your own." : "Одоо байгаа thread-д бүртгүүлэх эсвэл өөрийнхөө thread эхлүүлэх.", + "You have no unread mentions." : "Танд уншаагүй дурдалт байхгүй.", + "You have no unread messages." : "Танд уншаагүй мессеж байхгүй.", + "An error occurred while performing the search" : "Хайлт хийхэд алдаа гарлаа", + "Conversation list" : "Ярианы жагсаалт", + "Filter conversations by" : "Яриануудыг шүүх", + "Unread messages" : "Уншаагүй мессежүүд", + "Meeting conversations" : "Уулзалтын яриануудууд", + "Clear filters" : "Шүүлтүүр арилгах", + "New personal note" : "Шинэ хувийн тэмдэглэл", + "Back to conversations" : "Яриануудруу буцах", + "Archived conversations" : "Архивлагдсан яриануудууд", + "Threads" : "Thread-үүд", + "Clear filter" : "Шүүлтүүр арилгах", + "Show more threads" : "Илүү олон thread харуулах", + "App settings" : "Апп тохиргоо", + "Users" : "—Ö—ç—Ä—ç–≥–ª—ç–≥—á", + "Groups" : "–±“Ø–ª—ç–≥“ؓؖ¥", + "Teams" : "Багууд", + "Federated users" : "Федерацийн хэрэглэгчид", + "New private conversation" : "Шинэ хувийн яриа", + "Other sources" : "Бусад эх үүсвэрүүд", + "Open conversations" : "Нээлттэй яриануудууд", + "No search results" : "Хайлтын үр дүн байхгүй", + "Users, groups and teams" : "Хэрэглэгчид, бүлгүүд болон багууд", + "Users and groups" : "Хэрэглэгчид болон бүлгүүд", + "Users and teams" : "Хэрэглэгчид болон багууд", + "Groups and teams" : "Бүлгүүд болон багууд", + "New group conversation" : "Шинэ бүлгийн яриа", + "The meeting will start soon" : "Уулзалт удахгүй эхэлнэ", + "This meeting is scheduled for {startTime}" : "Энэ уулзалт {startTime}-д товлогдсон", + "You are currently waiting in the lobby" : "Та одоо лоббид хүлээж байна", + "Enable noise suppression" : "Дуу чимээ дарагчийг идэвхжүүлэх", + "Reduce background noises for better voice quality" : "Дуу хоолойн чанарыг сайжруулахын тулд арын дуу чимээг бууруулах", + "Enable echo cancellation" : "Цуурайн арилгалтыг идэвхжүүлэх", + "Minimize echo effect from own surrounding" : "Орчны цуурайн нөлөөг багасгах", + "Enable auto gain control" : "Автомат олшруулалтын хяналтыг идэвхжүүлэх", + "Dynamically adjust microphone volume for consistent level" : "Тогтвортой түвшин хадгалахын тулд микрофоны дууны хэмжээг автоматаар тохируулах", + "Select microphone" : "Микрофон сонгох", + "No microphone available" : "Микрофон байхгүй", + "Select speaker" : "Чанга яригч сонгох", + "No speaker available" : "Чанга яригч байхгүй", + "Select camera" : "Камер сонгох", + "No camera available" : "Камер байхгүй", + "Select a device" : "Төхөөрөмж сонгох", + "Test speakers" : "Чанга яригчийг тест хийх", + "Test" : "Тест", + "Devices" : "–¢”©—Ö”©”©—Ä”©–º–∂“ؓؖ¥", + "Backgrounds" : "Дэвсгэрүүд", + "No audio" : "Аудио байхгүй", + "No camera" : "Камер байхгүй", + "Display video as you will see it (mirrored)" : "Видеог таны харах байдлаар харуулах (толь)", + "Display video as others will see it" : "Видеог бусдын харах байдлаар харуулах", + "Calls are not supported in your browser" : "Таны хөтөч дуудлагыг дэмжихгүй", + "Access to microphone is only possible with HTTPS" : "Микрофонд хандах нь зөвхөн HTTPS-ээр боломжтой", + "Access to microphone was denied" : "Микрофонд хандах эрхийг татгалзлаа", + "Error while accessing microphone" : "Микрофонд хандахад алдаа гарлаа", + "Access to camera is only possible with HTTPS" : "Камерт хандах нь зөвхөн HTTPS-ээр боломжтой", + "The call is being recorded." : "Дуудлага бичигдэж байна.", + "The call might be recorded." : "Дуудлага бичигдэж байж болзошгүй.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Бичлэг нь таны дуу, камерын видео болон дэлгэц хуваалцалтыг агуулж болно. Дуудлагад нэгдэхийн өмнө таны зөвшөөрөл шаардлагатай.", + "Give consent to the recording of this call" : "Энэ дуудлагын бичлэгийг зөвшөөрөх", + "Show more info" : "Дэлгэрэнгүй мэдээлэл харуулах", + "Audio is not available" : "Аудио боломжгүй", + "Video is not available" : "Видео боломжгүй", + "Start recording immediately with the call" : "Дуудлагын хамт шууд бичлэг эхлүүлэх", + "Notify all participants about this call" : "Бүх оролцогчдод энэ дуудлагын талаар мэдэгдэх", + "Apply settings" : "Тохиргоог хэрэглэх", + "Select virtual office background" : "Виртуал оффисын дэвсгэр сонгох", + "Select virtual home background" : "Виртуал гэрийн дэвсгэр сонгох", + "Select virtual abstract background" : "Виртуал хийсвэр дэвсгэр сонгох", + "Select virtual beach background" : "Виртуал далайн эрэг дэвсгэр сонгох", + "Select virtual park background" : "Виртуал цэцэрлэгт хүрээлэн дэвсгэр сонгох", + "Select virtual theater background" : "Виртуал театр дэвсгэр сонгох", + "Select virtual library background" : "Виртуал номын сан дэвсгэр сонгох", + "Select virtual space station background" : "Виртуал сансрын станц дэвсгэр сонгох", + "Error while uploading the file" : "Файл байршуулахад алдаа гарлаа", + "Select a file" : "Файл сонгох", + "Invalid path selected" : "Буруу зам сонгосон", + "Select virtual background from file {fileName}" : "{fileName} файлаас виртуал дэвсгэр сонгох", + "Blur" : "Бүдэгрүүлэх", + "Upload" : "–±–∞–π—Ä—à—É—É–ª–∞—Ö", + "Files" : "—Ñ–∞–π–ª—É—É–¥", + "(editing)" : "(засаж байна)", + "(edited)" : "(засагдсан)", + "The message has expired or has been deleted" : "Мессеж дууссан эсвэл устгагдсан", + "Cancel quote" : "Ишлэлийг болих", + "24 hours" : "24 —Ü–∞–≥", + "7 days" : "7 хоног", + "30 days" : "30 хоног", + "Until unpin" : "Бэхлэлт тайлах хүртэл", + "Edited by {actor}" : "{actor} засварласан", + "Pinned by you" : "Та бэхлэсэн", + "Pinned by {actor}" : "{actor} бэхлэсэн", + "Until {absoluteDate}" : "{absoluteDate} хүртэл", + "Message text copied to clipboard" : "Мессежийн текст санах ойд хуулагдлаа", + "Message text could not be copied" : "Мессежийн текстийг хуулж чадсангүй", + "Message forwarded to \"Note to self\"" : "Мессеж \"Өөртөө тэмдэглэл\" рүү дамжуулагдлаа", + "Error while forwarding message to \"Note to self\"" : "Мессежийг \"Өөртөө тэмдэглэл\" рүү дамжуулахад алдаа гарлаа", + "A reminder was successfully removed" : "Сануулга амжилттай арилгагдлаа", + "Error occurred when removing a reminder" : "Сануулга арилгахад алдаа гарлаа", + "A reminder was successfully set at {datetime}" : "Сануулга {datetime}-д амжилттай тохируулагдлаа", + "Error occurred when creating a reminder" : "Сануулга үүсгэхэд алдаа гарлаа", + "Add a reaction to this message" : "Энэ мессежид хариу үйлдэл нэмэх", + "Reply" : "—Ö–∞—Ä–∏—É–ª—Ç", + "More actions" : "Нэмэлт үйлдлүүд", + "Set reminder" : "Сануулга тохируулах", + "Pin message" : "Мессеж бэхлэх", + "Unpin message" : "Мессеж бэхлэлт тайлах", + "Reply privately" : "Хувийн хариулах", + "Edit message" : "Мессеж засах", + "Copy message" : "Мессеж хуулах", + "Copy message link" : "Мессеж холбоос хуулах", + "Go to file" : "Файл руу очих", + "Download file" : "Файл татах", + "Go to thread" : "Thread руу очих", + "Edit thread details" : "Thread дэлгэрэнгүйг засах", + "Forward message" : "Мессеж дамжуулах", + "Translate" : "–û—Ä—á—É—É–ª–≥–∞", + "Set custom reminder" : "Тусгай сануулга тохируулах", + "Keep pinned for" : "Бэхлэгдсэн байх хугацаа", + "Set custom period" : "Тусгай хугацаа тохируулах", + "Close reactions menu" : "Хариу үйлдлийн цэсийг хаах", + "React with {emoji}" : "{emoji}-ээр хариу үзүүлэх", + "React with another emoji" : "Өөр эможигоор хариу үзүүлэх", + "Choose a conversation to forward the selected message." : "Сонгосон мессежийг дамжуулах яриа сонгоно уу.", + "Error while forwarding message" : "Мессеж дамжуулахад алдаа гарлаа", + "The message has been forwarded to {selectedConversationName}" : "Мессеж {selectedConversationName} руу дамжуулагдлаа", + "Dismiss" : "–ê—Ä–∏–ª–≥–∞—Ö", + "Go to conversation" : "Яриа руу очих", + "Detect language" : "Хэл илрүүлэх", + "The message could not be translated" : "Мессежийг орчуулж чадсангүй", + "Translation copied to clipboard" : "Орчуулга санах ойд хуулагдлаа", + "Translation could not be copied" : "Орчуулгыг хуулж чадсангүй", + "Translate message" : "Мессеж орчуулах", + "Source language to translate from" : "Орчуулах эх хэл", + "Translate from" : "Орчуулах хэл", + "Target language to translate into" : "Орчуулах зорилтот хэл", + "Translate to" : "Орчуулах хэл", + "Translating" : "Орчуулж байна", + "Copy translated text" : "Орчуулсан текстийг хуулах", + "Error when scheduling the message" : "Мессеж товлоход алдаа гарлаа", + "Reschedule" : "Дахин товлох", + "Send now" : "Одоо илгээх", + "Choose a time" : "Цаг сонгох", + "Send at custom time" : "Тусгай цагт илгээх", + "Will be sent without notification" : "Мэдэгдэлгүй илгээгдэнэ", + "Message read by everyone who shares their reading status" : "Унших төлөвөө хуваалцдаг бүгд мессежийг уншсан", + "Message sent" : "Мессеж илгээгдсэн", + "Sent without notification" : "Мэдэгдэлгүй илгээгдсэн", + "Deleting message" : "Мессеж устгаж байна", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Мессеж амжилттай устгагдсан, гэхдээ бот эсвэл Matterbridge тохируулагдсан тул мессеж аль хэдийн бусад үйлчилгээнүүд рүү тархсан байж болно", + "Message deleted successfully" : "Мессеж амжилттай устгагдлаа", + "Message could not be deleted because it is too old" : "Мессеж хэт хуучин учраас устгах боломжгүй", + "Only normal chat messages can be deleted" : "Зөвхөн энгийн чат мессежийг устгах боломжтой", + "An error occurred while deleting the message" : "Мессеж устгахад алдаа гарлаа", + "Pinned" : "Бэхлэгдсэн", + "Your browser does not support playing audio files" : "Таны хөтөч аудио файл тоглуулахыг дэмжихгүй", + "Contact" : "Холбоо барих", + "{stack} in {board}" : "{board} дахь {stack}", + "Deck Card" : "Deck карт", + "Remove {fileName}" : "{fileName} арилгах", + "Open this location in OpenStreetMap" : "Энэ байршлыг OpenStreetMap-д нээх", + "_%n reply_::_%n replies_" : ["%n хариулт","%n хариулт"], + "Sending message" : "Мессеж илгээж байна", + "Failed to send the message. Click to try again" : "Мессеж илгээж чадсангүй. Дахин оролдохын тулд дарна уу", + "Not enough free space to upload file" : "Файл байршуулах хангалттай зай байхгүй", + "You cannot send messages to this conversation at the moment" : "Та одоогоор энэ яриад мессеж илгээх боломжгүй", + "Could not update the message" : "Мессежийг шинэчлэж чадсангүй", + "Reply to thread \"{threadTitle}\"" : "\"{threadTitle}\" хэлэлцүүлэгт хариулах", + "_%n vote_::_%n votes_" : ["%n санал","%n санал"], + "Edit poll draft" : "Санал асуулгын ноорог засах", + "Delete poll draft" : "Санал асуулгын ноорог устгах", + "Open poll" : "Санал асуулга нээх", + "See results" : "Үр дүн харах", + "Reactions" : "Хариу үйлдлүүд", + "No permission to post reactions in this conversation" : "Энэ яриад хариу үйлдэл илгээх зөвшөөрөл байхгүй", + "and {participant}" : "болон {participant}", + "_and %n other participant_::_and %n other participants_" : ["болон %n бусад оролцогч","болон %n бусад оролцогч"], + "Show all reactions" : "Бүх хариу үйлдлийг харуулах", + "Add more reactions" : "Илүү олон хариу үйлдэл нэмэх", + "Show or collapse system messages" : "Системийн мессежийг харуулах эсвэл хураах", + "No messages" : "Мессеж байхгүй", + "All messages have expired or have been deleted." : "Бүх мессеж дууссан эсвэл устгагдсан.", + "{author} (pinned by you)" : "{author} (та бэхэлсэн)", + "{author} (pinned by {actor})" : "{author} ({actor} бэхэлсэн)", + "Unpin" : "Бэхлэлт авах", + "Cancel search" : "Хайлт болих", + "Add a phone number" : "Утасны дугаар нэмэх", + "Error: A password is required to create the conversation." : "Алдаа: Яриа үүсгэхэд нууц үг шаардлагатай.", + "All set, the conversation \"{conversationName}\" was created." : "Бүгд бэлэн, \"{conversationName}\" яриа үүсгэгдлээ.", + "Create a new group conversation" : "Шинэ бүлгийн яриа үүсгэх", + "Add participants" : "Оролцогчид нэмэх", + "Maximum length exceeded ({maxlength} characters)" : "Хамгийн их урт хэтэрсэн ({maxlength} тэмдэгт)", + "Conversation visibility" : "Ярианы харагдац", + "Allow guests to join via link" : "Зочдод холбоосоор нэгдэхийг зөвшөөрөх", + "Enter password" : "Нууц үг оруулах", + "This conversation has been locked" : "Энэ яриа түгжигдсэн", + "No permission to post messages in this conversation" : "Энэ яриад мессеж илгээх зөвшөөрөл байхгүй", + "Write a message without notification" : "Мэдэгдэлгүй мессеж бичих", + "Create a thread silently" : "Thread чимээгүй үүсгэх", + "Create a thread" : "Thread үүсгэх", + "Send message silently" : "Мессежийг чимээгүй илгээх", + "Send message" : "Мессеж илгээх", + "Send without notification" : "Мэдэгдэлгүй илгээх", + "The participant will not be notified about new messages" : "Оролцогчид шинэ мессежийн талаар мэдэгдэхгүй", + "Participants will not be notified about new messages" : "Оролцогчдод шинэ мессежийн талаар мэдэгдэхгүй", + "Message will be sent {datetimeString}" : "Мессеж {datetimeString}-д илгээгдэнэ", + "Thread title is required" : "Thread гарчиг шаардлагатай", + "Message text is required" : "Мессежийн текст шаардлагатай", + "The message could not be edited" : "Мессежийг засварлаж чадсангүй", + "File to share" : "Хуваалцах файл", + "File upload is not available in this conversation" : "Энэ яриад файл байршуулах боломжгүй", + "Message was successfully scheduled" : "Мессеж амжилттай товлогдлоо", + "Add emoji" : "Эможи нэмэх", + "Adding a mention will only notify users who did not read the message." : "Дурдалт нэмэх нь зөвхөн мессежийг уншаагүй хэрэглэгчдэд мэдэгдэнэ.", + "Thread title" : "Thread гарчиг", + "Send later" : "Дараа илгээх", + "Show scheduled messages" : "Товлогдсон мессежүүдийг харуулах", + "Cancel editing" : "Засварлалт болих", + "Schedule message" : "Мессеж товлох", + "{user} is out of office and might not respond." : "{user} оффисоос гадуур байгаа тул хариулахгүй байж болно.", + "Absence period: {startDate} - {endDate}" : "Эзгүй хугацаа: {startDate} - {endDate}", + "Replacement:" : "Орлогч:", + "Share from {nextcloud}" : "{nextcloud}-оос хуваалцах", + "Share from Files" : "Файлуудаас хуваалцах", + "Share files to the conversation" : "Яриад файлууд хуваалцах", + "Upload from device" : "Төхөөрөмжөөс байршуулах", + "Create new poll" : "Шинэ санал асуулга үүсгэх", + "Smart picker" : "Ухаалаг сонгогч", + "Record voice message" : "Дуут мессеж бичих", + "End recording and send" : "Бичлэг дуусгаж илгээх", + "Dismiss recording" : "Бичлэгийг хаях", + "Access to the microphone was denied" : "Микрофонд хандах эрхийг татгалзлаа", + "Microphone either not available or disabled in settings" : "Микрофон боломжгүй эсвэл тохиргоонд идэвхгүй болсон", + "Error while recording audio" : "Аудио бичихэд алдаа гарлаа", + "Summary is AI generated and might contain mistakes" : "Хураангуй нь AI-аар үүсгэгдсэн тул алдаа агуулж болзошгүй", + "Error occurred during a summary generation" : "Хураангуй үүсгэхэд алдаа гарлаа", + "New file" : "Шинэ файл", + "Blank" : "Хоосон", + "Error while creating file" : "Файл үүсгэхэд алдаа гарлаа", + "Create and share a new file" : "Шинэ файл үүсгэж хуваалцах", + "Name of the new file" : "Шинэ файлын нэр", + "Create file" : "Файл үүсгэх", + "Add more files" : "Илүү олон файл нэмэх", + "Send" : "–∏–ª–≥—ç—ç—Ö", + "In this conversation {user} can:" : "Энэ яриад {user} чадна:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} дахь оролцогчдын анхдагч зөвшөөрлүүдийг засварлах", + "Start a call" : "Дуудлага эхлүүлэх", + "Skip the lobby" : "Лоббийг алгасах", + "Can post messages" : "Зурвас бичих боломжтой", + "Can post messages and reactions" : "Мессеж болон хариу үйлдэл илгээх боломжтой", + "Can add reactions" : "Хариу үйлдэл нэмэх боломжтой", + "Enable the microphone" : "Микрофонийг идэвхжүүлэх", + "Enable the camera" : "Камерыг идэвхжүүлэх", + "Share the screen" : "Дэлгэцийг хуваалцах", + "Update permissions" : "Зөвшөөрлүүдийг шинэчлэх", + "Updating permissions" : "Зөвшөөрлүүдийг шинэчилж байна", + "No poll drafts" : "Санал асуулгын ноорог байхгүй", + "There is no poll drafts yet saved for this conversation" : "Энэ яриад санал асуулгын ноорог хадгалагдаагүй байна", + "Create poll in {name}" : "{name}-д санал асуулга үүсгэх", + "Create poll" : "Санал асуулга үүсгэх", + "Error while importing poll" : "Санал асуулга импортлоход алдаа гарлаа", + "Question" : "Асуулт", + "Ask a question" : "Асуулт асуух", + "Import draft from file" : "Файлаас ноорог импортлох", + "Answers" : "Хариултууд", + "Answer {option}" : "Хариулт {option}", + "Delete poll option" : "Санал асуулгын сонголтыг устгах", + "Add answer" : "Хариулт нэмэх", + "Settings" : "–¢–æ—Ö–∏—Ä–≥–æ–æ", + "Anonymous poll" : "Нэргүй санал асуулга", + "Multiple answers" : "Олон хариулт", + "Save as draft" : "Ноорог болгон хадгалах", + "Export draft to file" : "Нооргийг файл руу экспортлох", + "You voted for this option" : "Та энэ сонголтод санал өгсөн", + "End poll" : "Санал асуулга дуусгах", + "Change your vote" : "Санал өөрчлөх", + "Results" : "“Æ—Ä –¥“Ø–Ω", + "Voted participants" : "Санал өгсөн оролцогчид", + "Send a message to \"{roomName}\"" : "\"{roomName}\" руу мессеж илгээх", + "Hide list of participants" : "Оролцогчдын жагсаалтыг нуух", + "Show list of participants" : "Оролцогчдын жагсаалтыг харуулах", + "Assistance requested in {roomName}" : "{roomName}-д тусламж хүссэн", + "The message was sent to \"{roomName}\"" : "Мессеж \"{roomName}\" руу илгээгдлээ", + "Dismiss request for assistance" : "Тусламжийн хүсэлтийг хаях", + "Send message to room" : "Өрөөнд мессеж илгээх", + "Back to main room" : "Үндсэн өрөө рүү буцах", + "Back to your room" : "Өөрийн өрөө рүү буцах", + "Message all rooms" : "Бүх өрөөнд мессеж илгээх", + "Start session" : "Сесс эхлүүлэх", + "Start a call before you start a breakout room session" : "Салангид өрөөний сесс эхлүүлэхээс өмнө дуудлага эхлүүлнэ үү", + "Stop session" : "Сесс зогсоох", + "The message was sent to all breakout rooms" : "Мессеж бүх салангид өрөөнүүдэд илгээгдлээ", + "Send a message to all breakout rooms" : "Бүх салангид өрөөнүүдэд мессеж илгээх", + "Breakout rooms are not started" : "Салангид өрөөнүүд эхлээгүй", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Өндөр гүйцэтгэлтэй backend-гүй дуудлагууд холболтын асуудал болон төхөөрөмжүүдэд их ачаалал үүсгэж болно. {linkstart}Дэлгэрэнгүй{linkend}", + "Talk setup incomplete" : "Talk тохиргоо дуусаагүй", + "Disable lobby" : "Лоббийг идэвхгүй болгох", + "Settings for participant \"{user}\"" : "\"{user}\" оролцогчийн тохиргоо", + "Participant \"{user}\"" : "\"{user}\" оролцогч", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "зочин", + "Call rejected" : "Дуудлага татгалзагдсан", + "{time} talking time" : "{time} ярьсан хугацаа", + "Raised their hand" : "Гараа өргөсөн", + "Joined with video" : "Видеотой нэгдсэн", + "Joined via phone" : "Утсаар нэгдсэн", + "Joined with audio" : "Аудиотой нэгдсэн", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текст {maxLength} тэмдэгтээс бага эсвэл тэнцүү байх ёстой. Таны одоогийн текст {charactersCount} тэмдэгт урттай.", + "Remove group and members" : "Бүлэг болон гишүүдийг хасах", + "Remove team and members" : "Баг болон гишүүдийг хасах", + "Remove participant" : "Оролцогчийг хасах", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Та \"{displayName}\" бүлэг болон түүний гишүүдийг энэ яриаас устгахыг хүсэж байна уу?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Та \"{displayName}\" баг болон түүний гишүүдийг энэ яриаас устгахыг хүсэж байна уу?", + "Do you really want to remove {displayName} from this conversation?" : "Та үнэхээр {displayName}-г энэ яриаас хасах уу?", + "Notification was sent to {displayName}" : "Мэдэгдэл {displayName}-д илгээгдлээ", + "Could not send notification to {displayName}" : "{displayName}-д мэдэгдэл илгээж чадсангүй", + "Permissions granted to {displayName}" : "{displayName}-д зөвшөөрөл олгогдлоо", + "Could not modify permissions for {displayName}" : "{displayName}-ийн зөвшөөрлийг өөрчлөх боломжгүй", + "Permissions removed for {displayName}" : "{displayName}-ийн зөвшөөрлүүд хасагдлаа", + "Permissions set to default for {displayName}" : "{displayName}-ийн зөвшөөрлүүд өгөгдмөл болгогдлоо", + "Phone number could not be hung up" : "Утасны дугаарыг тасалж чадсангүй", + "Phone number could not be put on hold" : "Утасны дугаарыг хүлээлгээнд оруулж чадсангүй", + "Phone number could not be muted" : "Утасны дугаарыг хааж чадсангүй", + "Phone number could not be unmuted" : "Утасны дугаарын хаалтыг нээж чадсангүй", + "DTMF message could not be sent" : "DTMF мессежийг илгээж чадсангүй", + "Phone number copied to clipboard" : "Утасны дугаар санах ойд хуулагдлаа", + "Phone number could not be copied" : "Утасны дугаарыг хуулж чадсангүй", + "in the lobby" : "лоббид", + "Dial out phone" : "Утас руу залгах", + "Hang up phone" : "Утас тасалах", + "Move back to lobby" : "Лобби руу буцах", + "Move to conversation" : "Яриа руу шилжих", + "Dial-in PIN" : "Залгах PIN", + "Demote from moderator" : "Модератораас буулгах", + "Promote to moderator" : "Модератор болгох", + "Resend invitation" : "Урилга дахин илгээх", + "Send call notification" : "Дуудлагын мэдэгдэл илгээх", + "Dial out phone number" : "Утасны дугаар руу залгах", + "Resume call for phone number" : "Утасны дугаарын дуудлагыг үргэлжлүүлэх", + "Put phone number on hold" : "Утасны дугаарыг хүлээлгэнд оруулах", + "Unmute phone number" : "Утасны дугаарын хаалтыг нээх", + "Mute phone number" : "Утасны дугаарыг хаах", + "Copy phone number" : "Утасны дугаар хуулах", + "Reset custom permissions" : "Тусгай зөвшөөрлүүдийг дахин тохируулах", + "Grant all permissions" : "Бүх зөвшөөрөл олгох", + "Remove all permissions" : "Бүх зөвшөөрлийг хасах", + "Also ban from this conversation" : "Мөн энэ яриаг хориглох", + "Internal note (reason to ban)" : "Дотоод тэмдэглэл (хориглосон шалтгаан)", + "Remove" : "Хасах", + "Permissions modified for {displayName}" : "{displayName}-ийн зөвшөөрлүүд өөрчлөгдлөө", + "Add users, groups or teams" : "Хэрэглэгчид, бүлгүүд эсвэл багууд нэмэх", + "Add users or groups" : "Add users or groups", + "Add users or teams" : "Хэрэглэгчид эсвэл багууд нэмэх", + "Add users" : "Хэрэглэгчид нэмэх", + "Add groups or teams" : "Бүлгүүд эсвэл багууд нэмэх", + "Add groups" : "Бүлгүүд нэмэх", + "Add teams" : "Багууд нэмэх", + "Add other sources" : "Бусад эх үүсвэрүүд нэмэх", + "Add emails" : "Имэйлүүд нэмэх", + "Integrations" : "Нэгтгэлүүд", + "Add federated users" : "Федерацийн хэрэглэгчид нэмэх", + "Searching …" : "Хайж байна …", + "Search for more users" : "Илүү олон хэрэглэгч хайх", + "You can search or add participants via name, email, or Federated Cloud ID" : "Та нэр, и-мэйл эсвэл Холбогдсон Cloud ID-аар оролцогчдыг хайх эсвэл нэмж болно", + "Search or add participants" : "Оролцогчдыг хайх эсвэл нэмэх", + "Invitation was sent to {actorId}" : "Урилга {actorId}-д илгээгдлээ", + "An error occurred while adding the participants" : "Оролцогчдыг нэмэхэд алдаа гарлаа", + "A new group conversation with selected participant will be created" : "Сонгосон оролцогчтой шинэ бүлгийн яриа үүсгэгдэнэ", + "Participants" : "Оролцогчид", + "Pinned by a deleted user" : "Устгагдсан хэрэглэгч бэхэлсэн", + "Participants ({count})" : "Оролцогчид ({count})", + "Open chat" : "Чат нээх", + "You have new unread messages in the chat." : "Чатад шинэ уншаагүй мессежүүд байна.", + "You have been mentioned in the chat." : "Чатад таныг дурдсан.", + "Search messages" : "Мессеж хайх", + "Chat" : "Чат", + "Details" : "–î—ç–ª–≥—ç—Ä—ç–Ω–≥“Ø–π", + "Shared items" : "Хуваалцсан зүйлс", + "Search in {name}" : "{name}-д хайх", + "Threads in {name}" : "{name} дахь thread-үүд", + "{actor} in {conversation}" : "{conversation} дахь {actor}", + "Search options" : "Хайлтын сонголтууд", + "From User" : "Хэрэглэгчээс", + "Since" : "Хойш", + "Until" : "Хүртэл", + "No results found" : "Үр дүн олдсонгүй", + "Load more results" : "Нэмэлт үр дүн ачаалах", + "Recent threads" : "Сүүлийн thread-үүд", + "Projects" : "Төслүүд", + "No shared items" : "Хуваалцсан зүйлс байхгүй", + "Thread notifications" : "Thread мэдэгдлүүд", + "Thread actions" : "Thread үйлдлүүд", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Яриа руу холбоос", + "No open conversations found" : "Нээлттэй яриа олдсонгүй", + "Either there are no open conversations or you joined all of them." : "Нээлттэй яриа байхгүй эсвэл та бүгдэд нь нэгдсэн.", + "Check spelling or use complete words." : "Зөв бичгийн дүрмийг шалгах эсвэл бүтэн үг ашиглана уу.", + "Search conversations or users" : "Яриануудыг эсвэл хэрэглэгчдийг хайх", + "Select conversation" : "Яриа сонгох", + "Number length is not valid" : "Дугаарын урт буруу байна", + "Region code is not valid" : "Бүсийн код буруу байна", + "Number length is too short" : "Дугаарын урт хэт богино байна", + "Number length is too long" : "Дугаарын урт хэт урт байна", + "Number is not valid" : "Дугаар буруу байна", + "Phone numbers" : "Утасны дугаарууд", + "Display name: {name}" : "Дэлгэцийн нэр: {name}", + "Edit display name" : "Дэлгэцийн нэр засах", + "Display name (required)" : "Дэлгэцийн нэр (шаардлагатай)", + "Save name" : "Нэр хадгалах", + "I picked message bubbles" : "Би зурвасын бөмбөлгийг сонгосон", + "Error while setting personal setting" : "Хувийн тохиргоог тохируулахад алдаа гарлаа", + "Error while saving sounds setting" : "Дууны тохиргоог хадгалахад алдаа гарлаа", + "Compact conversations list" : "Нягт ярианы жагсаалт", + "Chat appearance" : "Чатын харагдах байдал", + "Messages list" : "Зурвасын жагсаалт", + "Message bubbles" : "Зурвасын бөмбөлөг", + "Play sounds when participants join or leave a call" : "Оролцогчид дуудлагад нэгдэх эсвэл гарахад дуу тоглуулах", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Үйлдвэрлэгчийн техникийн хязгаарлалтаас шалтгаалан iPhone болон iPad дээр одоогоор боломжгүй", + "Notification settings" : "Мэдэгдлийн тохиргоо", + "Sounds for chat and call notifications" : "Чат болон дуудлагын мэдэгдлийн дуу", + "Invalid language ({languageId})" : "Буруу хэл ({languageId})", + "Default language" : "Өгөгдмөл хэл", + "Default language ({languageName})" : "Өгөгдмөл хэл ({languageName})", + "Error when trying to load the available live translation languages" : "Шууд орчуулгын боломжит хэлүүдийг ачаалахад алдаа гарлаа", + "Error when trying to set live translation language" : "Шууд орчуулгын хэлийг тохируулахад алдаа гарлаа", + "Set language used to show the transcriptions" : "Хуулбар текстийг харуулах хэлийг тохируулах", + "Select location for attachments" : "Хавсралтуудын байршил сонгох", + "Error while setting attachment folder" : "Хавсралтын хавтас тохируулахад алдаа гарлаа", + "Error while setting read status privacy" : "Унших төлөвийн нууцлалыг тохируулахад алдаа гарлаа", + "Error while setting typing status privacy" : "Бичиж байгаа төлөвийн нууцлалыг тохируулахад алдаа гарлаа", + "Error while setting default media state" : "Өгөгдмөл медиа төлөвийг тохируулахад алдаа гарлаа", + "Turn camera and microphone off by default" : "Камер болон микрофоныг өгөгдмөлөөр унтраах", + "Blur camera background by default" : "Камерын дэвсгэрийг өгөгдмөлөөр бүдгэрүүлэх", + "Skip device preview before joining a call" : "Дуудлагад нэгдэхээс өмнө төхөөрөмжийн урьдчилсан харагдацыг алгасах", + "Appearance & Sounds" : "Гадаад төрх & Дуу", + "Privacy" : "–•—É–≤–∏–π–Ω –Ω—É—É—Ü", + "Send read receipts" : "Унших баталгаа илгээх", + "When off, all read statuses will be hidden" : "Унтраасан үед бүх унших төлөвүүд нуугдана", + "Share typing status" : "Бичиж байгаа төлөвийг хуваалцах", + "When off, all typing indicators will be hidden" : "Унтраасан үед бүх бичиж байгаа заагч нуугдана", + "Attachments folder" : "Хавсралтын хавтас", + "Toggle full screen" : "Бүтэн дэлгэц сэлгэх", + "Return to Home screen" : "Нүүр дэлгэц рүү буцах", + "Search" : "–•–∞–π—Ö", + "Shortcuts while in a chat" : "Чат дотор товчлолууд", + "Focus the chat input" : "Чатын оролтод анхаарах", + "Unfocus the chat input to use shortcuts" : "Товчлолуудыг ашиглахын тулд чатын оролтоос анхаарлаа холдуулах", + "Edit your last message" : "Сүүлийн мессежээ засах", + "Shortcuts while in a call" : "Дуудлага дотор товчлолууд", + "Camera on and off" : "Камер асаах, унтраах", + "Microphone on and off" : "Микрофон асаах, унтраах", + "Raise or lower hand" : "Гар өргөх эсвэл буулгах", + "Push to talk or push to mute" : "Ярихын тулд дарах эсвэл хаахын тулд дарах", + "Zoom-in / zoom-out a screen share" : "Дэлгэц хуваалцалтыг томруулах / жижигрүүлэх", + "Mouse wheel" : "Хулганы дугуй", + "Start call silently" : "Дуудлагыг чимээгүй эхлүүлэх", + "Start call" : "Дуудлага эхлүүлэх", + "End call" : "Дуудлага дуусгах", + "This call has just ended" : "Энэ дуудлага дөнгөж дууссан", + "You will be able to join the call only after a moderator starts it." : "Модератор дуудлага эхлүүлсний дараа л та нэгдэх боломжтой.", + "End call for everyone" : "Бүгдийн дуудлагыг дуусгах", + "Starting the recording" : "Бичлэг эхлүүлж байна", + "Recording" : "Бичлэг", + "The call has been running for one hour." : "Дуудлага нэг цагийн турш үргэлжилж байна.", + "Cancel recording start" : "Бичлэг эхлүүлэхийг болих", + "Stop recording" : "Бичлэгийг зогсоох", + "Send a reaction" : "Хариу үйлдэл илгээх", + "React with {reaction}" : "{reaction}-аар хариу үзүүлэх", + "All tasks done!" : "Бүх даалгавар дууслаа!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n даалгавар","{done} / %n даалгавар"], + "Add participants to this call" : "Энэ дуудлагад оролцогчид нэмэх", + "_%n participant in call_::_%n participants in call_" : ["Дуудлагад %n оролцогч","Дуудлагад %n оролцогч"], + "Scheduled messages" : "Товлосон мессежүүд", + "You are not allowed to enable screensharing" : "Та дэлгэц хуваалцах эрхгүй байна", + "No screensharing" : "Дэлгэц хуваалцахгүй", + "Screensharing options" : "Дэлгэц хуваалцах сонголтууд", + "Enable screensharing" : "Дэлгэц хуваалцахыг идэвхжүүлэх", + "Bad sent video and screen quality." : "Видео болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent screen quality." : "Дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent video quality." : "Видеоны чанар муу илгээгдэж байна.", + "Bad sent audio, video and screen quality." : "Аудио, видео болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent audio and screen quality." : "Аудио болон дэлгэцийн чанар муу илгээгдэж байна.", + "Bad sent audio and video quality." : "Аудио болон видеоны чанар муу илгээгдэж байна.", + "Bad sent audio quality." : "Аудионы чанар муу илгээгдэж байна.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Disable background blur" : "Дэвсгэр бүдгэрүүлэлтийг идэвхгүй болгох", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таны дэлгэцийг харах боломжгүй байж болно.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг харах боломжгүй байж болно.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцаж байхдаа видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон дэлгэцийг тань харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд дэлгэц хуваалцалтаа идэвхгүй болго.", + "Disable screenshare" : "Дэлгэц хуваалцалтыг идэвхгүй болгох", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд арын дэвсгэрийн бүдэгрүүлэлт эсвэл видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох болон харах боломжгүй байж болно. Нөхцөлийг сайжруулахын тулд видеогоо идэвхгүй болго.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Таны интернэт холболт эсвэл компьютер завгүй байгаа тул бусад оролцогчид таныг ойлгох боломжгүй байж болно.", + "Screen sharing is not supported by your browser." : "Таны хөтөч дэлгэц хуваалцахыг дэмжихгүй байна.", + "Screen sharing requires the page to be loaded through HTTPS." : "Дэлгэц хуваалцахад хуудас HTTPS-ээр ачаалагдсан байх шаардлагатай.", + "Screensharing requires the page to be loaded through HTTPS." : "Дэлгэц хуваалцахад хуудас HTTPS-ээр ачаалагдсан байх шаардлагатай.", + "An error occurred while starting screensharing." : "Дэлгэц хуваалцалт эхлүүлэхэд алдаа гарлаа.", + "Select virtual background" : "Виртуал дэвсгэр сонгох", + "Show your screen" : "Дэлгэцээ харуулах", + "Stop screensharing" : "Дэлгэц хуваалцахаа зогсоох", + "Mute others" : "Бусдыг хаах", + "Start recording" : "Бичлэг эхлүүлэх", + "Set up breakout rooms" : "Салангид өрөөнүүд тохируулах", + "Download attendance list" : "Оролцооны жагсаалтыг татах", + "Open Calendar" : "Календар нээх", + "Remove participant {name}" : "{name} оролцогчийг хасах", + "Would you like to delete this conversation?" : "Та энэ яриаг устгах уу?", + "Are you sure you want to delete this conversation?" : "Та энэ яриаг устгахдаа итгэлтэй байна уу?", + "Delete now" : "Одоо устгах", + "Keep" : "Хадгалах", + "Open dialpad" : "Дугаар цуглуулагч нээх", + "Select a region" : "Бүс сонгох", + "Local time: {time}" : "Орон нутгийн цаг: {time}", + "Scheduled {datetime}" : "Товлосон {datetime}", + "Scheduled for {datetime}" : "{datetime}-д товлосон", + "Message without mention" : "Дурдалтгүй мессеж", + "Mention myself" : "Өөрийгөө дурдах", + "Mention everyone" : "Бүгдийг дурдах", + "Select a conversation" : "Яриа сонгох", + "Select a mode" : "Горим сонгох", + "You do not have permissions to access this conversation." : "Танд энэ яриад хандах зөвшөөрөл байхгүй.", + "Join a different conversation or start a new one." : "Өөр яриад нэгдэх эсвэл шинийг эхлүүлнэ үү.", + "The conversation does not exist" : "Яриа байхгүй байна", + "Join a conversation or start a new one!" : "Яриад нэгдэх эсвэл шинийг эхлүүлнэ үү!", + "Duplicate session" : "Давхардсан сесс", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\"-тай яриа үүсгэж нэгдэж байна", + "Join a conversation or start a new one" : "Яриад нэгдэх эсвэл шинийг эхлүүлнэ үү", + "Error while joining the conversation" : "Яриад нэгдэхэд алдаа гарлаа", + "Another user" : "Өөр хэрэглэгч", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud хэрэглэгч", + "User password" : "Хэрэглэгчийн нууц үг", + "Talk conversation" : "Talk —è—Ä–∏–∞", + "Skip TLS verification" : "TLS баталгаажуулалтыг алгасах", + "Matrix server URL" : "Matrix серверийн URL", + "User" : "–•—ç—Ä—ç–≥–ª—ç–≥—á", + "Matrix channel" : "Matrix суваг", + "Mattermost server URL" : "Mattermost серверийн URL", + "Mattermost user" : "Mattermost хэрэглэгч", + "Team name" : "Багийн нэр", + "Channel name" : "Сувгийн нэр", + "Rocket.Chat server URL" : "Rocket.Chat серверийн URL", + "User name or email address" : "Хэрэглэгчийн нэр эсвэл имэйл хаяг", + "Rocket.Chat channel" : "Rocket.Chat суваг", + "Zulip server URL" : "Zulip серверийн URL", + "Bot user name" : "Ботын хэрэглэгчийн нэр", + "Bot API key" : "Ботын API түлхүүр", + "Zulip channel" : "Zulip суваг", + "API token" : "API токен", + "Slack channel" : "Slack суваг", + "Server ID or name" : "Серверийн ID эсвэл нэр", + "Channel ID (prefixed with \"ID:\") or name" : "Сувгийн ID (\"ID:\" угтвартай) эсвэл нэр", + "Channel" : "–°—É–≤–∞–≥", + "Login" : "–ù—ç–≤—Ç—Ä—ç—Ö", + "Chat ID" : "Чат ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC серверийн URL (жнь. chat.freenode.net:6667)", + "Nickname" : "–¢–æ–≤—á –Ω—ç—Ä", + "Connection password" : "Холболтын нууц үг", + "IRC channel" : "IRC суваг", + "Channel password" : "Сувгийн нууц үг", + "NickServ nickname" : "NickServ хоч", + "NickServ password" : "NickServ нууц үг", + "Use TLS" : "TLS ашиглах", + "Use SASL" : "SASL ашиглах", + "Tenant ID" : "Түрээслэгчийн ID", + "Client ID" : "–•—ç—Ä—ç–≥–ª—ç–≥—á–∏–π–Ω ID", + "Team ID" : "Багийн ID", + "Thread ID" : "Thread ID", + "XMPP/Jabber server URL" : "XMPP/Jabber серверийн URL", + "MUC server URL" : "MUC серверийн URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Бэхлэгдсэн мессежүүд", + "Media" : "Медиа", + "Polls" : "Санал асуулгууд", + "Deck cards" : "Deck картууд", + "Voice messages" : "Дуут мессежүүд", + "Locations" : "Байршлууд", + "Call recordings" : "Дуудлагын бичлэгүүд", + "Audio" : "–ê—É–¥–∏–æ", + "Show all pinned messages" : "Бүх бэхлэгдсэн мессежийг харуулах", + "Show all media" : "Бүх медиаг харуулах", + "Show all files" : "Бүх файлуудыг харуулах", + "Show all polls" : "Бүх санал асуулгыг харуулах", + "Show all deck cards" : "Бүх deck картуудыг харуулах", + "Show all voice messages" : "Бүх дуут мессежийг харуулах", + "Show all locations" : "Бүх байршлуудыг харуулах", + "Show all call recordings" : "Бүх дуудлагын бичлэгийг харуулах", + "Show all audio" : "Бүх аудиог харуулах", + "Show all other" : "Бусад бүгдийг харуулах", + "Follow conversation settings" : "Ярианы тохиргоог дагах", + "Group" : "–ë“Ø–ª—ç–≥", + "Team" : "Баг", + "You reconnected to the call" : "Та дуудлагад дахин холбогдлоо", + "{actor} reconnected to the call" : "{actor} дуудлагад дахин холбогдлоо", + "You added {user0} and {user1}" : "Та {user0} болон {user1}-г нэмлээ", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","Та {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "An administrator added you and {user0}" : "Админ та болон {user0}-г нэмлээ", + "{actor} added you and {user0}" : "{actor} та болон {user0}-г нэмлээ", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Админ та, {user0} болон %n бусад оролцогчийг нэмсэн","Админ та, {user0} болон %n бусад оролцогчийг нэмсэн"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} та, {user0} болон %n бусад оролцогчийг нэмсэн","{actor} та, {user0} болон %n бусад оролцогчийг нэмсэн"], + "An administrator added {user0} and {user1}" : "Админ {user0} болон {user1}-г нэмлээ", + "{actor} added {user0} and {user1}" : "{actor} {user0} болон {user1}-г нэмлээ", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Админ {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","Админ {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} {user0}, {user1} болон %n бусад оролцогчийг нэмсэн","{actor} {user0}, {user1} болон %n бусад оролцогчийг нэмсэн"], + "You removed {user0} and {user1}" : "Та {user0} болон {user1}-г хаслаа", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг хассан","Та {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "An administrator removed you and {user0}" : "Админ та болон {user0}-г хаслаа", + "{actor} removed you and {user0}" : "{actor} та болон {user0}-г хаслаа", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Админ та, {user0} болон %n бусад оролцогчийг хассан","Админ та, {user0} болон %n бусад оролцогчийг хассан"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} та, {user0} болон %n бусад оролцогчийг хассан","{actor} та, {user0} болон %n бусад оролцогчийг хассан"], + "An administrator removed {user0} and {user1}" : "Админ {user0} болон {user1}-г хаслаа", + "{actor} removed {user0} and {user1}" : "{actor} {user0} болон {user1}-г хаслаа", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Админ {user0}, {user1} болон %n бусад оролцогчийг хассан","Админ {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} {user0}, {user1} болон %n бусад оролцогчийг хассан","{actor} {user0}, {user1} болон %n бусад оролцогчийг хассан"], + "You and {user0} joined the call" : "Та болон {user0} дуудлагад нэгдлээ", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Та, {user0} болон %n бусад оролцогч дуудлагад нэгдсэн","Та, {user0} болон %n бусад оролцогч дуудлагад нэгдсэн"], + "{user0} and {user1} joined the call" : "{user0} болон {user1} дуудлагад нэгдлээ", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} болон %n бусад оролцогч дуудлагад нэгдсэн","{user0}, {user1} болон %n бусад оролцогч дуудлагад нэгдсэн"], + "You and {user0} left the call" : "Та болон {user0} дуудлагаас гарлаа", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Та, {user0} болон %n бусад оролцогч дуудлагаас гарсан","Та, {user0} болон %n бусад оролцогч дуудлагаас гарсан"], + "{user0} and {user1} left the call" : "{user0} болон {user1} дуудлагаас гарлаа", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} болон %n бусад оролцогч дуудлагаас гарсан","{user0}, {user1} болон %n бусад оролцогч дуудлагаас гарсан"], + "You promoted {user0} and {user1} to moderators" : "Та {user0} болон {user1}-г модератор болгов", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг модератор болгосон","Та {user0}, {user1} болон %n бусад оролцогчийг модератор болгосон"], + "An administrator promoted you and {user0} to moderators" : "Админ та болон {user0}-г модератор болгов", + "{actor} promoted you and {user0} to moderators" : "{actor} та болон {user0}-г модератор болгов", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Админ та, {user0} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","Админ та, {user0} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} та, {user0} болон %n бусад оролцогчийг модератор болгосон","{actor} та, {user0} болон %n бусад оролцогчийг модератор болгосон"], + "An administrator promoted {user0} and {user1} to moderators" : "Админ {user0} болон {user1}-г модератор болгов", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} {user0} болон {user1}-г модератор болгов", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ","{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модератор болгон дэвшүүллээ"], + "You demoted {user0} and {user1} from moderators" : "Та {user0} болон {user1}-г модератораас буулгав", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Та {user0}, {user1} болон %n бусад оролцогчийг модератороос хассан","Та {user0}, {user1} болон %n бусад оролцогчийг модератороос хассан"], + "An administrator demoted you and {user0} from moderators" : "Админ та болон {user0}-г модератораас буулгав", + "{actor} demoted you and {user0} from moderators" : "{actor} та болон {user0}-г модератораас буулгав", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Админ та, {user0} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","Админ та, {user0} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} та, {user0} болон %n бусад оролцогчийг модератороос хассан","{actor} та, {user0} болон %n бусад оролцогчийг модератороос хассан"], + "An administrator demoted {user0} and {user1} from moderators" : "Админ {user0} болон {user1}-г модератораас буулгав", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} {user0} болон {user1}-г модератораас буулгав", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","Админ {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа","{actor} нь {user0}, {user1} болон %n нэмэлт оролцогчийг модераторын эрхээс хаслаа"], + "You:" : "Та:", + "You: {lastMessage}" : "Та: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(та засварласан)", + "(edited by a deleted user)" : "(устгагдсан хэрэглэгч засварласан)", + "(edited by {moderator})" : "({moderator} засварласан)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Та өөр цонх эсвэл төхөөрөмж дээр идэвхтэй сесс байхад яриад нэгдэхийг оролдож байна. Nextcloud Talk одоогоор үүнийг дэмждэггүй. Та юу хийхийг хүсэж байна вэ?", + "Leave this page" : "Энэ хуудаснаас гарах", + "Join here" : "Энд нэгдэх", + "Deck card has been posted to {conversation}" : "Deck карт {conversation} яриад илгээгдлээ", + "An error occurred while posting deck card to conversation" : "Deck картыг яриад илгээхэд алдаа гарлаа", + "Post to a conversation" : "Яриад илгээх", + "Post to conversation" : "Яриад илгээх", + "The recording failed. Please contact your administrator." : "Бичлэг амжилтгүй болсон. Админтайгаа холбогдоно уу.", + "Location has been posted to {conversation}" : "Байршил {conversation} яриад илгээгдлээ", + "An error occurred while posting location to conversation" : "Байршлыг яриад илгээхэд алдаа гарлаа", + "Share to a conversation" : "Яриад хуваалцах", + "Share to conversation" : "Яриад хуваалцах", + "In conversation" : "Яриад", + "Search in conversation: {conversation}" : "{conversation} яриад хайх", + "Your requests are throttled at the moment due to brute force protection" : "Нэвтрэлтийн хүчний довтолгооноос хамгаалалтаас шалтгаалан таны хүсэлтүүд одоогоор хязгаарлагдсан", + "Error while clearing conversation history" : "Ярианы түүхийг цэвэрлэхэд алдаа гарлаа", + "Error occurred while allowing guests" : "Зочдыг зөвшөөрөхөд алдаа гарлаа", + "Error occurred while disallowing guests" : "Зочдыг зөвшөөрөхгүй болгоход алдаа гарлаа", + "Error occurred when restricting the conversation to moderator" : "Яриаг модераторт хязгаарлахад алдаа гарлаа", + "Error occurred when opening the conversation to everyone" : "Яриаг бүх хүнд нээхэд алдаа гарлаа", + "Conversation password has been saved" : "Ярианы нууц үг хадгалагдлаа", + "Conversation password has been removed" : "Ярианы нууц үг арилгагдлаа", + "Error occurred while saving conversation password" : "Ярианы нууц үг хадгалахад алдаа гарлаа", + "Call recording is starting." : "Дуудлагын бичлэг эхэлж байна.", + "Call recording stopped while starting." : "Дуудлагын бичлэг эхлэх үед зогссон.", + "Call recording stopped. You will be notified once the recording is available." : "Дуудлагын бичлэг зогссон. Бичлэг бэлэн болмогц танд мэдэгдэнэ.", + "Conversation picture set" : "Ярианы зураг тохируулагдлаа", + "Conversation picture deleted" : "Ярианы зураг устгагдлаа", + "Could not delete the conversation picture" : "Ярианы зургийг устгаж чадсангүй", + "Could not remove the automatic expiration" : "Автомат дуусах хугацааг арилгаж чадсангүй", + "Could not post message: {errorMessage}" : "Мессеж илгээж чадсангүй: {errorMessage}", + "Participant is banned successfully" : "Оролцогч амжилттай хориглогдлоо", + "Error while banning the participant" : "Оролцогчийг хориглоход алдаа гарлаа", + "An error occurred while fetching the participants" : "Оролцогчдыг авахад алдаа гарлаа", + "Could not send invitation to {actorId}" : "{actorId}-д урилга илгээж чадсангүй", + "Invitations sent" : "Урилгууд илгээгдлээ", + "Error occurred when sending invitations" : "Урилгууд илгээхэд алдаа гарлаа", + "Failed to join the conversation." : "Яриад нэгдэж чадсангүй.", + "An error occurred while creating breakout rooms" : "Салангид өрөөнүүд үүсгэхэд алдаа гарлаа", + "An error occurred while re-ordering the attendees" : "Оролцогчдыг дахин эрэмбэлэхэд алдаа гарлаа", + "An error occurred while deleting breakout rooms" : "Салангид өрөөнүүдийг устгахад алдаа гарлаа", + "An error occurred while starting breakout rooms" : "Салангид өрөөнүүдийг эхлүүлэхэд алдаа гарлаа", + "An error occurred while stopping breakout rooms" : "Салангид өрөөнүүдийг зогсооход алдаа гарлаа", + "An error occurred while sending a message to the breakout rooms" : "Салангид өрөөнүүдэд мессеж илгээхэд алдаа гарлаа", + "An error occurred while requesting assistance" : "Тусламж хүсэхэд алдаа гарлаа", + "An error occurred while resetting the request for assistance" : "Тусламжийн хүсэлтийг дахин тохируулахад алдаа гарлаа", + "An error occurred while joining breakout room" : "Салангид өрөөнд нэгдэхэд алдаа гарлаа", + "Failed to rename the thread" : "Thread-ийн нэрийг өөрчилж чадсангүй", + "Error fetching upcoming events" : "Удахгүй болох арга хэмжээнүүдийг авахад алдаа гарлаа", + "Error fetching upcoming reminders" : "Удахгүй болох сануулгуудыг авахад алдаа гарлаа", + "An error occurred while accepting an invitation" : "Урилга хүлээн авахад алдаа гарлаа", + "An error occurred while rejecting an invitation" : "Урилгаас татгалзахад алдаа гарлаа", + "{guest} (guest)" : "{guest} (зочин)", + "Poll draft has been saved" : "Санал асуулгын ноорог хадгалагдлаа", + "An error occurred while saving the draft" : "Ноорог хадгалахад алдаа гарлаа", + "An error occurred while submitting your vote" : "Санал өгөхөд алдаа гарлаа", + "An error occurred while ending the poll" : "Санал асуулга дуусгахад алдаа гарлаа", + "An error occurred while deleting the poll draft" : "Санал асуулгын ноорог устгахад алдаа гарлаа", + "Poll \"{name}\" was created by {user}. Click to vote" : "\"{name}\" санал асуулгыг {user} үүсгэсэн. Санал өгөхийн тулд дарна уу", + "Failed to add reaction" : "Хариу үйлдэл нэмж чадсангүй", + "Failed to remove reaction" : "Хариу үйлдэл арилгаж чадсангүй", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" файлыг байршуулахад алдаа гарлаа", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" файлыг байршуулах хангалттай зай байхгүй", + "You are not allowed to share files" : "Та файл хуваалцах эрхгүй байна", + "Error while sharing file" : "Файл хуваалцахад алдаа гарлаа", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Таны ашиглаж буй хөтчийг Nextcloud Talk бүрэн дэмждэггүй. Mozilla Firefox, Microsoft Edge, Google Chrome, Opera эсвэл Apple Safari-ийн хамгийн сүүлийн хувилбарыг ашиглана уу.", + "_In %n hour_::_In %n hours_" : ["%n цагийн дараа","%n цагийн дараа"], + "_%n minute _::_%n minutes_" : ["%n минут ","%n минут"], + "In {hours} and {minutes}" : "{hours} болон {minutes} дараа", + "_In %n minute_::_In %n minutes_" : ["%n минутын дараа","%n минутын дараа"], + "Set time for later today" : "Өнөөдөр дараа нь цаг тохируулах", + "Set time for tomorrow" : "Маргааш цаг тохируулах", + "Set time for this weekend" : "Энэ амралтын өдөр цаг тохируулах", + "Set time for next week" : "Дараа долоо хоног цаг тохируулах", + "Conversation link copied to clipboard" : "Ярианы холбоос санах ойд хуулагдлаа", + "The link could not be copied" : "Холбоосыг хуулж чадсангүй", + "Error while parsing a PROPFIND error" : "PROPFIND алдааг задлахад алдаа гарлаа", + "Sending signaling message has failed" : "Signaling мессеж илгээж чадсангүй", + "Lost connection to signaling server. Trying to reconnect." : "Signaling серверт холболт тасарлаа. Дахин холбогдож байна.", + "Lost connection to signaling server." : "Signaling серверт холболт тасарлаа.", + "Failed to connect. The signaling server may be set up incorrectly" : "Холбогдож чадсангүй. Дохионы сервер буруу тохируулагдсан байж магадгүй", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Тохируулагдсан дохионы серверийг Talk-ийн энэ хувилбартай нийцтэй болгохын тулд шинэчлэх шаардлагатай. Администрацитайгаа холбогдоно уу.", + "Please restart the app." : "Апп-ийг дахин эхлүүлнэ үү.", + "Please reload the page." : "–•—É—É–¥–∞—Å—ã–≥ –¥–∞—Ö–∏–Ω –∞—á–∞–∞–ª–Ω–∞ —É—É", + "Please try to restart the app." : "Апп-ийг дахин эхлүүлж үзнэ үү.", + "Please try to reload the page." : "Хуудсыг дахин ачаалж үзнэ үү.", + "Do not disturb" : "–ë“Ø“Ø —Å–∞–∞–¥ –±–æ–ª", + "Away" : "–•–æ–ª–¥—Å–æ–Ω", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камер {number}", + "Speaker {number}" : "Чанга яригч {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Та дуугаа хааж байхдаа ярьж байх шиг байна, бусдад сонсогдохын тулд дуугаа нээнэ үү", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Дор хаяж нэг оролцогчтой холболт тогтоож чадсангүй. Таны нөхцөлд TURN сервер шаардлагатай байж магадгүй. {linkstart}энэ баримт бичиг{linkend}-ийг дагаж тохируулахыг администратораасаа хүснэ үү.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Энэ нь хүлээгдэж байснаас удаж байна. Медиа зөвшөөрлүүд аль хэдийн олгогдсон (эсвэл татгалзсан) уу? Хэрэв тийм бол хөтчөө дахин эхлүүлнэ үү, учир нь аудио болон видео алдаатай байна", + "Access to microphone & camera is only possible with HTTPS" : "Микрофон болон камерт хандах нь зөвхөн HTTPS-ээр боломжтой", + "Please move your setup to HTTPS" : "Тохиргоогоо HTTPS рүү шилжүүлнэ үү", + "Access to microphone & camera was denied" : "Микрофон болон камерт хандах эрхийг татгалзлаа", + "WebRTC is not supported in your browser" : "Таны хөтөч WebRTC дэмжихгүй", + "Please use a different browser like Firefox or Chrome" : "Firefox эсвэл Chrome гэх мэт өөр хөтөч ашиглана уу", + "Error while accessing microphone & camera" : "Микрофон болон камерт хандахад алдаа гарлаа", + "%s Talk on your mobile devices" : "%s Talk таны гар утасны төхөөрөмжүүд дээр", + "Join conversations at any time, anywhere, on any device." : "Хэзээ ч, хаана ч, ямар ч төхөөрөмж дээр яриануудад нэгдээрэй.", + "Android app" : "Android апп", + "iOS app" : "iOS апп", + "__language_name__" : "__—Ö—ç–ª–Ω–∏–π_–Ω—ç—Ä__", + "Webhook Demo" : "Webhook демо", + "Call summary (%s)" : "–î—É—É–¥–ª–∞–≥—ã–Ω —Ö—É—Ä–∞–∞–Ω–≥—É–π (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Дуудлагын хураангуй бот дуудлагын дараа бүх оролцогчдыг жагсаасан болон даалгавруудыг тоймлосон мессеж оруулдаг", + "Tasks" : "–î–∞–∞–ª–≥–∞–≤–∞—Ä", + "Notes" : "–®–∏–Ω—ç ", + "Reports" : "Тайлангууд", + "Decisions" : "Шийдвэрүүд", + "Agenda" : "Хөтөлбөр", + "Call summary" : "Дуудлагын хураангуй", + "Call summary - {title}" : "–î—É—É–¥–ª–∞–≥—ã–Ω —Ö—É—Ä–∞–∞–Ω–≥—É–π - {title}", + "Talk conversation for event" : "Үйл явдлын Talk яриа", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push суулгагдсан, энэ нь ширээний клиентүүдийн гүйцэтгэлийг сайжруулна.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} суулгагдаагүй, энэ нь ширээний клиентүүд ашиглахад гүйцэтгэлийн асуудал үүсгэж болно.", + "Next meeting" : "Дараагийн уулзалт", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Календараасаа уулзалт товло. Энд харуулахын тулд Talk яриаг байршлаар тохируулах шаардлагатай", + "Join conversations from remote Nextcloud servers" : "Алсын Nextcloud серверүүдийн яриануудад нэгдэх", + "Your default media state has been saved" : "Таны өгөгдмөл медиа төлөв хадгалагдлаа", + "Set reminder for later today" : "Өнөөдөр дараа нь сануулга тохируулах", + "Set reminder for tomorrow" : "Маргааш сануулга тохируулах", + "Set reminder for this weekend" : "Энэ амралтын өдөр сануулга тохируулах", + "Set reminder for next week" : "Дараа долоо хоног сануулга тохируулах", + "Generate summary" : "Хураангуй үүсгэх", + "Talk recording from {time} ({conversation})" : "Talk бичлэг {time}-д ({conversation})", + "Submit vote" : "Санал өгөх", + "Your privacy setting has been saved" : "Таны нууцлалын тохиргоо хадгалагдлаа", + "Your personal setting has been saved" : "Таны хувийн тохиргоо хадгалагдлаа", + "Failed to save sounds setting" : "Дууны тохиргоог хадгалж чадсангүй", + "Sounds setting saved" : "Дууны тохиргоо хадгалагдлаа", + "Always shown if recording consent is required" : "Бичлэгийн зөвшөөрөл шаардлагатай бол үргэлж харуулагдана", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk шинэчлэгдсэн, та дуудлага эхлүүлэх эсвэл нэгдэх боломжгүй.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Та өөр цонх эсвэл төхөөрөмжөөс яриад нэгдсэн. Nextcloud Talk одоогоор үүнийг дэмждэггүй тул энэ сессийг хаасан.", + "Nextcloud Talk was updated." : "Nextcloud Talk шинэчлэгдлээ.", + "Nextcloud is in maintenance mode." : "Nextcloud засвар үйлчилгээний горимд байна.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation шинэчлэгдлээ.", + "Enable live translation" : "Шууд орчуулгыг идэвхжүүлэх", + "I picked list style" : "Би жагсаалт хэлбэрийг сонгосон", + "Hey! Are you using Talk in list style or with message bubbles?" : "Сайн уу! Та Talk-ыг жагсаалт хэлбэрээр ашиглаж байна уу, эсвэл зурвасын бөмбөлгөөр үү?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/nb.js b/l10n/nb.js new file mode 100644 index 0000000..47c3f13 --- /dev/null +++ b/l10n/nb.js @@ -0,0 +1,1795 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "en samtale", + "(Duration %s)" : "(Varighet %s)", + "You attended a call with {user1}" : "Du har tatt del i en samtale med {user1}", + "_%n guest_::_%n guests_" : ["%n gjest","%n gjester"], + "You attended a call with {user1} and {user2}" : "Du har tatt del i en samtale med {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du har tatt del i en samtale med {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du har tatt del i en samtale med {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du har tatt del i en samtale med {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["én annen person","%n andre"], + "{actor} invited you to {call}" : "{actor} inviterte deg til {call}", + "You were invited to a conversation or had a call" : "Du ble invitert til et samtale, eller fikk et anrop", + "Other activities" : "Andre aktiviteter", + "Talk" : "Samtale", + "Guest" : "Gjest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Velkommen til Nextcloud Talk!\nI denne samtalen vil du bli informert om nye funksjoner som er tilgjengelige i Nextcloud Talk.", + "## New in Talk %s" : "## Nytt i Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge og Safari kan nå bli benyttet for å delta i lyd- og videosamtaler", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-til-en-samtaler er nå vedvarende og kan ikke gjøres om til gruppesamtaler ved et uhell lenger. Også når en av deltakerne forlater samtalen, slettes ikke samtalen automatisk lenger. Bare hvis begge deltakerne forlater, slettes samtalen fra serveren.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Du kan nå varsle alle deltakerne ved å legge ut \"@all\" i chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Med \"pil opp\"-tasten kan du legge ut siste melding på nytt", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk kan nå ha kommandoer, send \"/help\" som en chatmelding for å se om administratoren har konfigurert noen", + "- With projects you can create quick links between conversations, files and other items" : "- Med prosjekter kan du opprette hurtigkoblinger mellom samtaler, filer og andre elementer", + "- You can now mention guests in the chat" : "- Du kan nå nevne gjester i chat'n", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Samtaler kan nå ha en lobby. Dette vil tillate moderatorer å bli med i chatten og ringe allerede for å forberede møtet, mens brukere og gjester må vente.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nå svare direkte på meldinger, noe som gir de andre brukerne mer kontekst hva meldingen handler om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Søk etter samtaler og deltakere vil nå også filtrere eksisterende samtaler, noe som gjør det mye enklere å finne tidligere samtaler", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nå legge til egendefinerte brukergrupper i samtaler når circles-appen er installert", + "- Check out the new grid and call view" : "- Ta en titt på det nye rutenettet og anropsvisningen", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Du kan nå laste opp og dra og slippe filer direkte fra enheten din til chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delte filer åpnes nå direkte i chatvisningen med visningsprogrammene", + "- You can now search for chats and messages in the unified search in the top bar" : "- Du kan nå søke etter chatter og meldinger i det enhetlige søket i topplinjen", + "- Spice up your messages with emojis from the emoji picker" : "- Krydre meldingene dine med emojier fra emoji-velgeren", + "- You can now change your camera and microphone while being in a call" : "- Du kan nå bytte kamera og mikrofon mens du er i en samtale", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Gi samtalene dine litt kontekst med en beskrivelse og åpne den slik at påloggede brukere kan finne den og bli med selv", + "- See a read status and send failed messages again" : "- Se en lesestatus og send meldinger som feilet på nytt", + "- Raise your hand in a call with the R key" : "- Rekk opp hånden i en samtale med R-tasten", + "- Join the same conversation and call from multiple devices" : "- Bli med i den samme samtalen og ring fra flere enheter", + "- Send voice messages, share your location or contact details" : "- Send talemeldinger, del posisjonen eller kontaktinformasjonen din", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Legg til grupper i en samtale, og nye gruppemedlemmer blir automatisk lagt til som deltakere", + "- A preview of your audio and video is shown before joining a call" : "- En forhåndsvisning av lyd og video vises før du blir med i en samtale", + "- You can now blur your background in the newly designed call view" : "- Du kan nå gjøre bakgrunnen uskarp i den nydesignede samtalevisningen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nå tildele generelle og individuelle tillatelser til deltakere", + "- You can now react to chat messages" : "- Du kan nå reagere på chatmeldinger", + "- In the sidebar you can now find an overview of the latest shared items" : "- I sidepanelet kan du nå finne en oversikt over de siste delte elementene", + "- Use a poll to collect the opinions of others or settle on a date" : "- Bruk en meningsmåling til å samle andres meninger eller bli enige om en dato", + "- Configure an expiration time for chat messages" : "- Konfigurer en utløpstid for chatmeldinger", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start samtaler uten å varsle andre i store samtaler. Du kan sende individuelle anropsvarsler når samtalen har startet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chatmeldinger uten å varsle mottakerne i tilfelle det ikke haster", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojier kan nå fullføres automatisk ved å skrive en \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Koble ulike elementer ved hjelp av den nye smartvelgeren ved å skrive en \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorer kan nå opprette grupperom (krever serverdelen med høy ytelse)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Samtaler kan nå tas opp (krever serverdelen med høy ytelse)", + "- Conversations can now have an avatar or emoji as icon" : "- Samtaler kan nå ha en avatar eller emoji som ikon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle bakgrunner er nå tilgjengelige i tillegg til den uskarpe bakgrunnen i videosamtaler", + "- Reactions are now available during calls" : "- Reaksjoner er nå tilgjengelige under samtaler", + "- Typing indicators show which users are currently typing a message" : "- Skriveindikatorer viser hvilke brukere som for øyeblikket skriver en melding", + "- Groups can now be mentioned in chats" : "- Grupper kan nå nevnes i chatter", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Samtaleopptak blir automatisk transkribert hvis en transkripsjonsleverandør-app er registrert", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatmeldinger kan oversettes hvis en oversettelsesleverandør-app er registrert", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kan nå bli brukt i _chat_ meldinger", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks er nå tilgjengelige for å implementere roboter. Se dokumentasjonen for mer informasjon https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Angi en påminnelse på en chatmelding for å bli varslet senere igjen", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Bruk **Notat til meg selv**-samtalen for å ta notater og dele informasjon mellom enhetene dine", + "- Captions allow to send a message with a file at the same time" : "- Bildetekster gjør det mulig å sende en melding med en fil samtidig", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video av taleren er nå synlig mens skjermen deles, og anropsreaksjoner er animerte", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Meldinger kan nå redigeres av innloggede forfattere og moderatorer i 6 timer", + "- Unsent message drafts are now saved in your browser" : "- Utkast til usendte meldinger lagres nå i nettleseren ", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nå utestenge kontoer og gjester for å hindre dem i å bli med i en samtale igjen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Kommende anrop fra koblede kalenderhendelser og ikke-tilstedeværende erstatninger vises nå i samtaler", + "_All %n participant_::_All %n participants_" : ["Alle %n deltaker","Alle %n deltakere"], + "Talk updates ✅" : "Talk oppdateringer ✅", + "Reaction deleted by author" : "Reaksjon slettet av forfatter", + "{actor} created the conversation" : "{actor} opprettet samtalen", + "You created the conversation" : "Du opprettet samtalen", + "System created the conversation" : "Systemet opprettet samtalen", + "An administrator created the conversation" : "En administrator opprettet samtalen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administrator endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "{actor} set the description" : "{actor} angi beskrivelsen", + "You set the description" : "Du angav beskrivelsen", + "An administrator set the description" : "En administrator angav beskrivelsen", + "{actor} removed the description" : "{actor} fjernet beskrivelsen", + "You removed the description" : "Du fjernet beskrivelsen", + "An administrator removed the description" : "En administrator fjernet beskrivelsen", + "You started a silent call" : "Du startet et stille anrop", + "{actor} started a silent call" : "{actor} startet et stille anrop", + "You started a call" : "Du startet et anrop", + "{actor} started a call" : "{actor} startet en samtale", + "{actor} joined the call" : "{actor} ble med i samtalen", + "You joined the call" : "Du ble med i samtalen", + "{actor} left the call" : "{actor} forlot samtalen", + "You left the call" : "Du forlot samtalen", + "{actor} unlocked the conversation" : "{actor} låste opp samtalen", + "You unlocked the conversation" : "Du låste opp samtalen", + "An administrator unlocked the conversation" : "En administrator låste opp samtalen", + "{actor} locked the conversation" : "{actor} låste samtalen", + "You locked the conversation" : "Du låste samtalen", + "An administrator locked the conversation" : "En administrator låste samtalen", + "{actor} limited the conversation to the current participants" : "{actor} begrenset samtalen til de nåværende deltakerne", + "You limited the conversation to the current participants" : "Du begrenset samtalen til de nåværende deltakerne", + "An administrator limited the conversation to the current participants" : "En administrator begrenset samtalen til de nåværende deltakerne", + "{actor} opened the conversation to registered users" : "{actor} åpnet samtalen for registrerte brukere", + "You opened the conversation to registered users" : "Du åpnet samtalen for registrerte brukere", + "An administrator opened the conversation to registered users" : "En administrator åpnet samtalen for registrerte brukere", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "You opened the conversation to registered users and users created with the Guests app" : "Du åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "An administrator opened the conversation to registered users and users created with the Guests app" : "En administrator åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "The conversation is now open to everyone" : "Samtalen er nå åpen for alle", + "{actor} opened the conversation to everyone" : "{actor} åpnet samtalen for alle", + "You opened the conversation to everyone" : "Du åpnet samtalen for alle", + "{actor} restricted the conversation to moderators" : "{actor} begrenset samtalen til moderatorer", + "You restricted the conversation to moderators" : "Du begrenset samtalen til moderatorer", + "{actor} started breakout rooms" : "{actor} startet grupperom", + "You started breakout rooms" : "Du startet grupperom", + "{actor} stopped breakout rooms" : "{actor} stoppet grupperom", + "You stopped breakout rooms" : "Du stoppet grupperom", + "{actor} allowed guests" : "{actor} tillot gjester", + "You allowed guests" : "Du tillot gjester", + "An administrator allowed guests" : "En administrator tillot gjester", + "{actor} disallowed guests" : "{actor} nektet gjester", + "You disallowed guests" : "Du nektet gjester", + "An administrator disallowed guests" : "En administrator nektet gjester", + "{actor} set a password" : "{actor} satte et passord", + "You set a password" : "Du satte et passord", + "An administrator set a password" : "En administrator satte et passord", + "{actor} removed the password" : "{actor} fjernet passordet", + "You removed the password" : "Du fjernet passordet", + "An administrator removed the password" : "En administrator fjernet passordet", + "{actor} added {user}" : "{actor} delte med {user}", + "You joined the conversation" : "Du ble med i samtalen", + "{actor} joined the conversation" : "{actor} ble med i samtalen", + "You added {user}" : "Du delte med {user}", + "{actor} added you" : "{actor} la til deg", + "An administrator added you" : "En administrator la til deg", + "An administrator added {user}" : "En administrator delte med {user}", + "You left the conversation" : "Du forlot samtalen", + "{actor} left the conversation" : "{actor} forlot samtalen", + "{actor} removed {user}" : "{actor} fjernet {user}", + "You removed {user}" : "Du fjernet {user}", + "{actor} removed you" : "{actor} fjernet deg", + "An administrator removed you" : "En administrator fjernet deg", + "An administrator removed {user}" : "En administrator fjernet {user}", + "{actor} invited {federated_user}" : "{actor} inviterte {federated_user}", + "You invited {federated_user}" : "Du inviterte {federated_user}", + "You accepted the invitation" : "Du godtok invitasjonen", + "{actor} invited you" : "{actor} inviterte deg", + "An administrator invited you" : "En administrator inviterte deg", + "An administrator invited {federated_user}" : "En administrator inviterte {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} godtok invitasjonen", + "{actor} removed {federated_user}" : "{actor} fjernet {federated_user}", + "You removed {federated_user}" : "Du fjernet {federated_user}", + "You declined the invitation" : "Du avslo invitasjonen", + "An administrator removed {federated_user}" : "En administrator fjernet {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} avviste invitasjonen", + "{actor} added group {group}" : "{actor} la til gruppe {group}", + "You added group {group}" : "Du la til gruppen {group}", + "An administrator added group {group}" : "En administrator la til gruppen {group}", + "{actor} removed group {group}" : "{actor} fjernet gruppen {group}", + "You removed group {group}" : "Du fjernet gruppen {group}", + "An administrator removed group {group}" : "En administrator fjernet gruppen {group}", + "{actor} added team {circle}" : "{actor} la til laget {circle}", + "You added team {circle}" : "Du la til laget {circle}", + "An administrator added team {circle}" : "En administrator la til laget {circle}", + "{actor} removed team {circle}" : "{actor} fjernet laget {circle}", + "You removed team {circle}" : "Du fjernet laget {circle}", + "An administrator removed team {circle}" : "En administrator fjernet laget {circle}", + "{actor} added {phone}" : "{actor} la til {phone}", + "You added {phone}" : "Du la til {phone}", + "An administrator added {phone}" : "En administrator la til {phone}", + "{actor} removed {phone}" : "{actor} fjernet {phone}", + "You removed {phone}" : "Du fjernet {phone}", + "An administrator removed {phone}" : "En administrator fjernet {phone}", + "{actor} promoted {user} to moderator" : "{actor} forfremmet {user} til moderator", + "You promoted {user} to moderator" : "Du forfremmet {user} til moderator", + "{actor} promoted you to moderator" : "{actor} forfremmet deg til moderator", + "An administrator promoted you to moderator" : "En administrator forfremmet deg til moderator", + "An administrator promoted {user} to moderator" : "En administrator forfremmet {user} til moderator", + "{actor} demoted {user} from moderator" : "{actor} nedgraderte {user} fra moderator", + "You demoted {user} from moderator" : "Du nedgraderte {user} fra moderator", + "{actor} demoted you from moderator" : "{actor} nedgraderte deg fra moderator", + "An administrator demoted you from moderator" : "En administrator nedgraderte deg fra moderator", + "An administrator demoted {user} from moderator" : "En administrator nedgraderte {user} fra moderator", + "{actor} shared a file which is no longer available" : "{actor} delte en fil som ikke lenger er tilgjengelig", + "You shared a file which is no longer available" : "Du delte en fil som ikke lenger er tilgjengelig", + "File shares are currently not supported in federated conversations" : "Delte filressurser støttes for øyeblikket ikke i forente diskusjoner", + "The shared location is malformed" : "Den delte plasseringen er misformet", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} satte opp Matterbridge for å synkronisere denne samtalen med andre chatter", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du satte opp Matterbridge for å synkronisere denne samtalen med andre chatter", + "{actor} updated the Matterbridge configuration" : "{actor} oppdaterte konfigurasjonen av Matterbridge", + "You updated the Matterbridge configuration" : "Du oppdaterte konfigurasjonen av Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} fjernet konfigurasjonen av Matterbridge", + "You removed the Matterbridge configuration" : "Du fjernet konfigurasjonen av Matterbridge", + "{actor} started Matterbridge" : "{actor} startet Matterbridge", + "You started Matterbridge" : "Du startet Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stoppet Matterbridge", + "You stopped Matterbridge" : "Du stoppet Matterbridge", + "{actor} deleted a message" : "{actor} slettet en melding", + "You deleted a message" : "Du slettet en melding", + "{actor} edited a message" : "{actor} redigerte en melding", + "You edited a message" : "Du redigerte en melding", + "{actor} deleted a reaction" : "{actor} slettet en reaksjon", + "You deleted a reaction" : "Du slettet en reaksjon", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du satte utløpsdatoen for meldingen til %n uke","Du satte utløpsdatoen for meldingen til %n uker"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du satte utløpsdatoen for meldingen til %n dag","Du satte utløpsdatoen for meldingen til %n dager"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du satte utløpsdatoen for meldingen til %n time","Du satte utløpsdatoen for meldingen til %n timer"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du satte utløpsdatoen for meldingen til %n minutt","Du satte utløpsdatoen for meldingen til %n minutter"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} satte utløpsdatoen for meldingen til %n uke","{actor} satte utløpsdatoen for meldingen til %n uker"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} satte utløpsdatoen for meldingen til %n dag","{actor} satte utløpsdatoen for meldingen til %n dager"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} satte utløpsdatoen for meldingen til %n time","{actor} satte utløpsdatoen for meldingen til %n timer"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} satte utløpsdatoen for meldingen til %n minutt","{actor} satte utløpsdatoen for meldingen til %n minutter"], + "{actor} disabled message expiration" : "{actor} deaktiverte utløpsdato for melding", + "You disabled message expiration" : "Du deaktiverte utløpsdato for melding", + "{actor} cleared the history of the conversation" : "{actor} tømte samtalens historikk", + "You cleared the history of the conversation" : "Du tømte samtalens historikk", + "{actor} set the conversation picture" : "{actor} satte samtalebildet", + "You set the conversation picture" : "Du satte samtalebildet", + "{actor} removed the conversation picture" : "{actor} fjernet samtalebildet", + "You removed the conversation picture" : "Du fjernet samtalebildet", + "{actor} ended the poll {poll}" : "{actor} avsluttet avstemningen {poll}", + "You ended the poll {poll}" : "Du avsluttet avstemningen {poll}", + "{actor} started the video recording" : "{actor} startet videoopptaket", + "You started the video recording" : "Du startet videoopptaket", + "{actor} stopped the video recording" : "{actor} stoppet videoopptaket", + "You stopped the video recording" : "Du stoppet videoopptaket", + "{actor} started the audio recording" : "{actor} startet lydopptaket", + "You started the audio recording" : "Du startet lydopptaket", + "{actor} stopped the audio recording" : "{actor} stoppet lydopptaket", + "You stopped the audio recording" : "Du stoppet lydopptaket", + "The recording failed" : "Opptaket feilet", + "Someone voted on the poll {poll}" : "Noen stemte på avstemningen {poll}", + "Message deleted by author" : "Melding slettet av forfatteren", + "Message deleted by {actor}" : "Melding slettet av {actor}", + "Message deleted by you" : "Melding slettet av deg", + "Deleted user" : "Slettet bruker", + "Unknown number" : "Ukjent nummer", + "Administration" : "Administrasjon", + "System" : "System", + "%s (guest)" : "%s (gjest)", + "Missed call" : "Tapt anrop", + "Call ended (Duration {duration})" : "Samtale avsluttet (Varighet {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Samtalen ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} avsluttet samtale (Varighet {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Samtalen med %n gjest ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})","Samtalen med %n gjester ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Samtale med %n gjest avsluttet (Varighet {duration})","Samtale med %n gjester avsluttet (Varighet {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} avsluttet samtalen med %n gjest (varighet {duration})","{actor} avsluttet samtalen med %n gjester (varighet {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} avsluttet samtalen med {user1} (varighet {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} avsluttet samtalen med {user1} og {user2} (varighet {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2} og {user3} (varighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2}, {user3} og {user4} (varighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2}, {user3}, {user4} og {user5} (varighet {duration})", + "Message of {user} in {conversation}" : "Melding om {user} i {conversation}", + "Message of {user}" : "Melding om {user}", + "Message of a deleted user in {conversation}" : "Message om en slettet bruker i {conversation}", + "Talk conversations" : "Talk-samtaler", + "Talk to %s" : "Snakk med %s", + "An error occurred. Please contact your administrator." : "Det oppstod en feil, vennligst kontakt administratoren din.", + "Storage quota exceeded" : "Overskredet lagringskvote", + "File not found" : "Finner ikke filen", + "File is not shared, or shared but not with the user" : "Filen er ikke delt, eller delt, men ikke med brukeren", + "No account available to delete." : "Ingen konto tilgjengelig for sletting.", + "Poll" : "Avstemning", + "No image file provided" : "Ingen bildefil angitt", + "File is too big" : "Filen er for stor", + "Invalid file provided" : "Ugyldig fil oppgitt", + "Invalid image" : "Ugyldig bilde", + "Unknown filetype" : "Ukjent filtype", + "Talk mentions" : "Talk nevner", + "More conversations" : "Flere samtaler", + "Say hi to your friends and colleagues!" : "Si hei til venner og kolleger!", + "No unread mentions" : "Ingen uleste nevner", + "Call in progress" : "Samtale pågår", + "You were mentioned" : "Du ble nevnt", + "Write to conversation" : "Skrive til samtalen", + "Writes event information into a conversation of your choice" : "Skriver hendelsesinformasjon til en diskusjon etter eget valg", + "Conversation invitation" : "Samtale invitasjon", + "Description" : "Beskrivelse", + "You can also dial-in via phone with the following details" : "Du kan også ringe via telefon med følgende detaljer", + "Dial-in information" : "Ringe informasjon", + "Meeting ID" : "Møte ID", + "Your PIN" : "Din PIN", + "Meeting" : "Møte", + "Password request: %s" : "Forespørsel om passord: %s", + "Private conversation" : "Privat samtale", + "Deleted user (%s)" : "Slettet bruker (%s)", + "Failed to upload call recording" : "Opplasting av samtaleopptak feilet", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Opptaksserveren kunne ikke laste opp opptak av samtale {call}. Vennligst ta kontakt med administrasjonen.", + "Share to chat" : "Del til chat", + "Dismiss notification" : "Ingen varsel", + "Call recording now available" : "Opptak av samtale er nå tilgjengelig", + "The recording for the call in {call} was uploaded to {file}." : "Opptaket for samtalen i {call} ble lastet opp til {file}.", + "Transcript now available" : "Transkripsjon er nå tilgjengelig", + "The transcript for the call in {call} was uploaded to {file}." : "Transkripsjonen for samtalen i {call} ble lastet opp til {file}.", + "Failed to transcript call recording" : "Transkript av samtaleopptak feilet", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveren kunne ikke transkribere opptaket i {file} for samtalen i {call}. Vennligst ta kontakt med administrasjonen.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} inviterte deg å bli med {roomName} på {remoteServer}", + "Accept" : "Aksepter", + "Decline" : "Avslå", + "{user1} invited you to a federated conversation" : "{user1} inviterte deg til en sammenknyttet samtale", + "New message" : "Ny melding", + "Reminder" : "Påminnelse", + "Reminder: You in {call}" : "Påminnelse: du i {call}", + "Reminder: {user} in {call}" : "Påminnelse: {user} i {call}", + "Reminder: Deleted user in {call}" : "Påminnelse: Slettet bruker i {call}", + "Reminder: {guest} (guest) in {call}" : "Påminnelse: {guest} (gjest) i {call}", + "Reminder: Guest in {call}" : "Påminnelse: gjest i {call}", + "{user} reacted with {reaction}" : "{user} reagerte med {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagerte med {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "Slettet bruker reagerte med {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gjest) reagerte med {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "Gjest reagerte med {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Slett bruker i {call}", + "{guest} (guest) in {call}" : "{guest} (gjest) i {call}", + "Guest in {call}" : "Gjest i {call}", + "{user} sent you a private message" : "{user} sente deg en privat melding", + "{user} sent a message in conversation {call}" : "{user} sente en melding i samtalen {call}", + "A deleted user sent a message in conversation {call}" : "En slettet bruker sende en melding i samtale {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gjest) sendte en melding i samtale {call}", + "A guest sent a message in conversation {call}" : "En gjest sendte en melding i samtale {call}", + "{user} replied to your private message" : "{user} svarte på din private melding", + "{user} replied to your message in conversation {call}" : "{user} svarte på din melding i samtale {call}", + "A deleted user replied to your message in conversation {call}" : "En slettet bruker svarte på din melding i samtale {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gjest) svarte på din melding i samtale {call}", + "A guest replied to your message in conversation {call}" : "En gjest svarte på din melding i samtale {call}", + "Reminder: You in private conversation {call}" : "Påminnelse: du i privat samtale {call}", + "Reminder: A deleted user in private conversation {call}" : "Påminnelse: en slettet bruker i privat samtale {call}", + "Reminder: {user} in private conversation" : "Påminnelse: {user} i privat samtale", + "Reminder: You in conversation {call}" : "Påminnelse: du i samtale {call}", + "Reminder: {user} in conversation {call}" : "Påminnelse: {user} i samtale {call}", + "Reminder: A deleted user in conversation {call}" : "Påminnelse: en slettet bruker i samtale {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Påminnelse: {guest} (gjest) i samtale {call}", + "Reminder: A guest in conversation {call}" : "Påminnelse: en gjest i samtale {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagerte med {reaction} på din private melding", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagerte med {reaction} på din melding i samtale {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "En slettet bruker reagerte med {reaction} på din melding i samtale {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gjest) reagerte med {reaction} på din melding i samtale {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "En gjest reagerte med {reaction} på din melding i samtale {call}", + "{user} mentioned you in a private conversation" : "{user} nevnte deg i en privat samtale", + "{user} mentioned group {group} in conversation {call}" : "{user} nevnte gruppe {group} i samtale {call}", + "{user} mentioned everyone in conversation {call}" : "{user} nevnte alle i samtale {call}", + "{user} mentioned you in conversation {call}" : "{user} nevnte deg i samtale {call}", + "A deleted user mentioned group {group} in conversation {call}" : "En slettet bruker nevnte gruppe {group} i samtale {call}", + "A deleted user mentioned everyone in conversation {call}" : "En slettet bruker nevnte alle i samtale {call}", + "A deleted user mentioned you in conversation {call}" : "En slettet bruker nevnte deg i samtale {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gjest) nevnte gruppe {group} i samtale {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gjest) nevnte alle i samtale {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gjest) nevnte deg i samtale {call}", + "A guest mentioned group {group} in conversation {call}" : "En gjest nevnte gruppe {group} i samtale {call}", + "A guest mentioned everyone in conversation {call}" : "En gjest nevnte alle i samtale {call}", + "A guest mentioned you in conversation {call}" : "En gjest nevnte deg i samtale {call}", + "View message" : "Se melding", + "Dismiss reminder" : "Avvis påminnelse", + "View chat" : "Vis samtale", + "{user} invited you to a group conversation: {call}" : "{user} inviterte deg til en gruppesamtale: {call}", + "Join call" : "Ta del i samtale", + "Answer call" : "Svar anrop", + "{user} would like to talk with you" : "{user} ønsker å snakke med deg", + "Call back" : "Ring tilbake", + "You missed a call from {user}" : "Du har et tapt anrop fra {user}", + "You missed a phone call from {call}" : "Du har et tapt telefonanrop fra {call}", + "A group call has started in {call}" : "En gruppesamtale har startet i {call}", + "You missed a group call in {call}" : "Du gikk glipp av en gruppesamtale i {call}", + "{email} is requesting the password to access {file}" : "{email} ber om passordet for å få tilgang til {file}", + "{email} tried to request the password to access {file}" : "{email} prøvde å be om passordet for å få tilgang til {file}", + "Someone is requesting the password to access {file}" : "Noen ber om passordet for å få tilgang til {file}", + "Someone tried to request the password to access {file}" : "Noen prøvde å be om passordet for å få tilgang til {file}", + "Open settings" : "Åpne innstillinger", + "Hosted signaling server added" : "Vertsbasert signalserver lagt til", + "The hosted signaling server is now configured and will be used." : "Den vertsbaserte signalserveren er nå konfigurert og vil bli brukt.", + "Hosted signaling server removed" : "Vertsbasert signalserver fjernet", + "The hosted signaling server was removed and will not be used anymore." : "Den vertsbaserte signalserveren ble fjernet og vil ikke bli brukt lenger.", + "Hosted signaling server changed" : "Vertsbasert signalserver endret", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Den vertsbaserte signalserverkontoen har endret statusen fra \"{oldstatus}\" til \"{newstatus}\".", + "pending" : "venter", + "active" : "aktiv", + "expired" : "utløpt", + "blocked" : "blokkert", + "error" : "feil", + "The certificate of {host} expires in {days} days" : "Sertifikatet til {host} utløper om {days} dager", + "The certificate of {host} expired" : "Sertifikatet til {host} er utløpt", + "Contact via Talk" : "Kontakt via Talk", + "Open Talk" : "Åpne Talk", + "Default" : "Standard", + "Presentation" : "Presentasjon", + "Conversations" : "Samtaler", + "Messages in current conversation" : "Meldinger i gjeldende samtale", + "{user}" : "{bruker}", + "Messages" : "Meldinger", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Meldinger i andre samtaler", + "One-to-one rooms always need to show the other users avatar" : "En-til-en-rom må alltid vise den andre brukerens avatar", + "Invalid emoji character" : "Ugyldig emoji-karakter", + "Invalid background color" : "Ugyldig bakgrunnsfarge", + "Avatar image is not square" : "Avatarbilde er ikke firkantet", + "Room {number}" : "Rom {number}", + "Other" : "Annet", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Kunne ikke be om prøveversjon fordi prøveserveren ikke er tilgjengelig. Vennligst prøv igjen senere.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Det er et problem med autentiseringen av denne forekomsten. Kanskje den ikke er tilgjengelig fra utsiden for å bekrefte dens nettadresse.", + "Something unexpected happened." : "Noe uventet inntraff.", + "The URL is invalid." : "Nettadressen er ugyldig.", + "An HTTPS URL is required." : "En HTTPS URL er påkrevd.", + "The email address is invalid." : "Epostadressen er ugyldig.", + "The language is invalid." : "Angitt språk er ugyldig.", + "The country is invalid." : "Angitt land er ugyldig", + "There is a problem with the request of the trial. Please check your logs for further information." : "Det er et problem med forespørselen om prøveversjonen. Vennligst sjekk loggene dine for mer informasjon.", + "Too many requests are send from your servers address. Please try again later." : "For mange forespørsler sendes fra serveradressen din. Vennligst prøv igjen senere.", + "There is already a trial registered for this Nextcloud instance." : "Det er allerede registrert en prøveversjon for denne Nextcloud-forekomsten.", + "Something unexpected happened. Please try again later." : "Noe uventet inntraff. Vennligst prøv igjen senere.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Kunne ikke be om prøveversjon fordi prøveserveren oppførte seg feil. Vennligst prøv igjen senere.", + "Trial requested but failed to get account information. Please check back later." : "Prøveversjonen ble bedt om, men fikk ikke kontoinformasjon. Vennligst kom tilbake senere.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Det er et problem med autentiseringen av denne forespørselen. Kanskje den ikke er tilgjengelig fra utsiden for å bekrefte dens nettadresse.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kunne ikke hente kontoinformasjon fordi prøveserveren oppførte seg feil. Vennligst kom tilbake senere.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Det har oppstått et problem med å hente kontoinformasjonen. Vennligst sjekk loggene dine for mer informasjon.", + "There is no such account registered." : "Det er ingen slik konto registrert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kan ikke hente kontoinformasjon fordi prøveserveren ikke kan nås. Vennligst kom tilbake senere.", + "Deleting the hosted signaling server account failed. Please check back later." : "Sletting av den vertsbaserte signalserverkontoen feilet. Vennligst kom tilbake senere.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kunne ikke slette kontoen fordi prøveserveren oppførte seg feil. Vennligst kom tilbake senere.", + "There is a problem with deleting the account. Please check your logs for further information." : "Det er et problem med å slette kontoen. Vennligst sjekk loggene dine for mer informasjon.", + "Too many requests are sent from your servers address. Please try again later." : "For mange forespørsler sendes fra serveradressen din. Vennligst prøv igjen senere.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kan ikke slette kontoen fordi prøveserveren ikke kan nås. Vennligst kom tilbake senere.", + "Note to self" : "Notat til meg selv", + "A place for your private notes, thoughts and ideas" : "Et sted for private notater, tanker og ideer", + "Andorra" : "Andorra", + "United Arab Emirates" : "De forente arabiske emirater", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua og Barbuda", + "Anguilla" : "Angola", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikansk Samoa", + "Austria" : "Østerike", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia og Hersegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius og Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetøya", + "Botswana" : "Botswana", + "Belarus" : "Hviterusland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosøyene", + "Congo, the Democratic Republic of the" : "Kongo (den demokratiske republikk)", + "Central African Republic" : "Den sentralafrikanske republikk", + "Congo" : "Kongo", + "Switzerland" : "Sveits", + "Côte d'Ivoire" : "Elfenbenskysten", + "Cook Islands" : "Cookøyene", + "Chile" : "Chile", + "Cameroon" : "Kameron", + "China" : "Kina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapp Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmasøya", + "Cyprus" : "Kypros", + "Czechia" : "Tsjekkia", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Den dominikanske republikk", + "Algeria" : "Algeri", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypt", + "Western Sahara" : "Vest-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spania", + "Ethiopia" : "Etiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandsøyene (Malvinas)", + "Micronesia, Federated States of" : "Mikronesiaføderasjonen", + "Faroe Islands" : "Færøyene", + "France" : "Frankrike", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Storbritannia og Nord-Irland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Fransk Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grønland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatorial-Guinea", + "Greece" : "Hellas", + "South Georgia and the South Sandwich Islands" : "Sør-Georgia og Sør-Sandwichøyene", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard- og McDonaldøyene", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesia", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "Det britiske territoriet i Indiahavet", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Kambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komorene", + "Saint Kitts and Nevis" : "Saint Kitts og Nevis", + "Korea, Democratic People's Republic of" : "Den demokratiske folkerepublikken Korea", + "Korea, Republic of" : "Republikken Korea", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (Fransk del)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshalløyene", + "North Macedonia" : "Nord-Makedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Nord-Marianene", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldivene", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Ny-Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkøya", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransk Polynesia", + "Papua New Guinea" : "Papua Ny-Guinea", + "Philippines" : "Filipinene", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russland", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychellene ", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard og Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sør Sudan", + "Sao Tome and Principe" : "Sao Tome og Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Nederlandsk del)", + "Syrian Arab Republic" : "Syria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- og Caicosøyene", + "Chad" : "Chad", + "French Southern Territories" : "De franske sørterritorier", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Tyrkia", + "Trinidad and Tobago" : "Trinidad og Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "USAs ytre småøyer", + "United States of America" : "USA", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Den hellige stol", + "Saint Vincent and the Grenadines" : "Saint Vincent og Grenadinene", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jomfruøyene, engelsk", + "Virgin Islands, U.S." : "Jomfruøyene, US", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis- og Futunaøyene", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sør-Afrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Sammenknytting", + "High-performance backend" : "Backend med høy ytelse", + "Error: Cannot connect to server" : "Feil: kan ikke koble til server", + "Error: Server did not respond with proper JSON" : "Feil: serveren svarte ikke med riktig JSON", + "Error: Certificate expired" : "Feil: sertifikat utløpt", + "Could not get version" : "Kunne ikke hente versjon", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Feil: kjørende versjon: {versjon}; serveren må oppdateres for å være kompatibel med denne versjonen av Talk.", + "Error: Server responded with: {error}" : "Feil: server svarte med: {error}", + "Error: Unknown error occurred" : "Feil: ukjent feil oppstod", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advarsel: kjørende versjon: {versjon}; server støtter ikke alle funksjonene i denne Talk-versjonen, mangler funksjoner: {funksjoner}.", + "Recording backend" : "Opptaks-backend", + "SIP configuration" : "SIP innstillinger", + "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", + "Conversation not found" : "Samtalen ble ikke funnet", + "Path is already shared with this conversation" : "Stien er allerede delt med denne samtalen", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video og lydkonferanser ved hjelp av WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video og lydkonferanser ved hjelp av WebRTC\n\n* 💬 **Chat** Nextcloud Talk leveres med en enkel tekstchat, slik at du kan dele eller laste opp filer fra Nextcloud Filer-appen eller den lokale enheten og nevne andre deltakere.\n* 👥 **Private, gruppe, offentlige og passordbeskyttede samtaler!** Inviter noen, en hel gruppe eller send en offentlig kobling for å invitere til en samtale.\n* 🌐 **Samlede chatter** Chat med andre Nextcloud-brukere på deres servere\n* 💻 **Skjermdeling!** Del skjermen din med deltakerne i samtalen.\n* 🚀 **Integrasjon med andre Nextcloud-apper** som Filer, Kalender, Brukerstatus, Dashboard, Flyt, Kart, Smart picker, Kontakter, Deck, og mange flere.\n* 🌉 **Synkroniser med andre chat-løsninger** Med [Matterbridge](https://github.com/42wim/matterbridge/) blir integrert i Talk, du kan enkelt synkronisere mange andre chat-løsninger til Nextcloud Talk og omvendt.", + "Leave call" : "Forlat samtalen", + "Navigating away from the page will leave the call in {conversation}" : "Navigering bort fra siden vil forlate samtalen i {conversation}", + "Stay in call" : "Forbli i samtalen", + "Discuss this file" : "Diskuter denne filen", + "Share this file with others to discuss it" : "Del denne filen med andre og diskuter den", + "Share this file" : "Del denne filen", + "Join conversation" : "Delta i samtale", + "This conversation is password-protected." : "Denne samtalen er passordbeskyttet", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Vi har oppdaget flere ugyldige passordforsøk fra IP-adressen din. Derfor strupes neste forsøk opptil 30 sekunder.", + "The password is wrong. Try again." : "Feil passord. Prøv igjen.", + "Password" : "Passord", + "Submit" : "Send inn", + "Error requesting the password." : "Feil ved forespørsel om passordet.", + "Request password" : "Forespør om passord", + "This conversation has ended" : "Denne samtalen er avsluttet", + "Error occurred when joining the conversation" : "Det oppstod en feil da du ble med i samtalen", + "Close Talk sidebar" : "Lukk Talk-sidefeltet", + "Open Talk sidebar" : "Åpne Talk-sidefeltet", + "Everyone" : "Alle", + "Users and moderators" : "Brukere og moderatorer", + "Moderators only" : "Kun moderatorer", + "Disable calls" : "Deaktiver anrop", + "Save changes" : "Lagre endringer", + "Saving …" : "Lagrer...", + "Saved!" : "Lagret!", + "Limit to groups" : "Begrens til grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Når minst én gruppe er valgt, kan bare personer i de oppførte gruppene delta i samtaler.", + "Guests can still join public conversations." : "Gjester kan fortsatt delta i offentlige samtaler.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Brukere som ikke kan bruke Talk lenger, vil fortsatt bli oppført som deltakere i tidligere samtaler, og chatmeldingene deres vil også bli beholdt.", + "Limit using Talk" : "Begrens bruk av Talk", + "Limit creating a public and group conversation" : "Begrens oppretting av en offentlig- og gruppesamtale", + "Limit creating conversations" : "Begrens oppretting av samtaler", + "Limit starting a call" : "Begrens å starte et anrop", + "Limit starting calls" : "Begrens å starte flere anrop", + "When a call has started, everyone with access to the conversation can join the call." : "Når en samtale har startet, kan alle med tilgang til samtalen bli med i samtalen.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Følgende roboter er installert på denne serveren. I dokumentasjonen finner du detaljer om hvordan du {linkstart1}bygger din egen bot{linkend} eller en {linkstart2}-liste over roboter{linkend} som skal aktiveres på serveren din.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Ingen roboter er installert på denne serveren. I dokumentasjonen finner du detaljer om hvordan du {linkstart1}bygger din egen bot{linkend} eller en {linkstart2}-liste over roboter{linkend} som skal aktiveres på serveren din.", + "Description is not provided" : "Beskrivelse er ikke gitt", + "Locked for moderators" : "Låst for moderatorer", + "Enabled" : "Aktivert", + "Disabled" : "Deaktivert", + "Bots settings" : "Innstillinger for roboter", + "State" : "Tilstand", + "Name" : "Navn", + "Last error" : "Siste feil", + "Total errors count" : "Totalt antall feil", + "Find more bots" : "Finn flere roboter", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Klarerte servere kan konfigureres på {linkstart}siden med innstillinger for deling{linkedin}.", + "Beta" : "Beta", + "Enable Federation in Talk app" : "Aktiver Federation i Talk-appen", + "Permissions" : "Rettigheter", + "Allow users to be invited to federated conversations" : "Tillat brukere å bli invitert til sammenknyttede samtaler", + "Allow users to invite federated users into conversation" : "Tillat brukere å invitere sammenknyttede brukere til samtale", + "Only allow to federate with trusted servers" : "Tillat bare å forene med pålitelige servere", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Når minst én gruppe er valgt, kan bare personer i de oppførte gruppene invitere sammenknyttede brukere til samtaler.", + "Groups allowed to invite federated users" : "Grupper som har tillatelse til å invitere sammenknyttede brukere", + "Select groups …" : "Velg grupper...", + "All messages" : "Alle meldinger", + "@-mentions only" : "kun @-nevner", + "Off" : "ett kvarter", + "General settings" : "Generelle innstillinger", + "Default notification settings" : "Standard varslingsinnstillinger", + "Default group notification" : "Standard gruppevarsling", + "Default group notification for new groups" : "Standard gruppevarsling for nye grupper", + "Integration into other apps" : "Integrering i andre apper", + "Allow conversations on files" : "Tillat samtaler på Files", + "Allow conversations on public shares for files" : "Tillat samtaler på delte offentlige ressurser for Files ", + "Enable encryption" : "Aktiver kryptering", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Ved å klikke på knappen over sendes informasjonen i skjemaet til serverne til Struktur AG. Du finner mer informasjon på {linkstart}spreed.eu{linkend}.", + "Pending" : "Venter", + "Error" : "Feil", + "Blocked" : "Blokkert", + "Active" : "Aktiv", + "Expired" : "Utløpt", + "Never" : "Aldri", + "The trial could not be requested. Please try again later." : "Prøveversjonen kunne ikke bes om. Vennligst forsøk igjen senere.", + "The account could not be deleted. Please try again later." : "Kontoen kunne ikke slettes. Vennligst forsøk igjen senere.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Vår partner Struktur AG leverer en tjeneste der en vertsbasert signalserver kan forespørres. For dette trenger du bare å fylle ut skjemaet nedenfor og din Nextcloud vil be om det. Når serveren er satt opp for deg, fylles legitimasjonen automatisk. Dette vil overskrive de eksisterende signalserverinnstillingene.", + "URL of this Nextcloud instance" : "Nettadressen til denne Nextcloud-forekomsten", + "Full name of the user requesting the trial" : "Fullt navn på brukeren som ber om prøveversjonen", + "Email of the user" : "E-post til brukeren", + "Language" : "Språk", + "Country" : "Land", + "Request signaling server trial" : "Be om prøveversjon av signalserver", + "You can see the current status of your hosted signaling server in the following table." : "Du kan se gjeldende status for den vertsbaserte signalserveren i tabellen nedenfor.", + "Status" : "Status", + "Created at" : "Opprettet den", + "Expires at" : "Utløper", + "Limits" : "Grenser", + "Yes" : "Ja", + "No" : "Nei", + "Delete the signaling server account" : "Slett signalserverkontoen", + "_%n user_::_%n users_" : ["%n bruker","%n brukere"], + "Installed version: {version}" : "Installert versjon: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kan installere Matterbridge for å koble Nextcloud Talk til noen andre tjenester, besøk deres {linkstart1}GitHub-side{linkend} for mer informasjon. Det kan ta litt tid å laste ned og installere appen. I tilfelle det blir tidsavbrutt, kan du installere det manuelt fra {linkstart2}Nextcloud App Store {linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge-binær ble ikke funnet eller kunne ikke utføres.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kan også angi stien til Matterbridge-binæren manuelt via konfigurasjonen. Se {linkstart}dokumentasjonen for Matterbridge-integrering{linkend} for mer informasjon.", + "Downloading …" : "Laster ned …", + "Install Talk Matterbridge" : "Installer Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Det oppstod en feil under installasjon av Matterbridge-appen", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Det oppstod en feil under installasjon av Talk Matterbridge. Vennligst installer det manuelt.", + "Failed to execute Matterbridge binary." : "Utførelse av Matterbridge-binær feilet.", + "Matterbridge integration" : "Integrasjon av Matterbridge", + "Enable Matterbridge integration" : "Aktiver integrasjon av Matterbridge", + "Status: Checking connection" : "Status: Sjekker tilkobling", + "OK: Running version: {version}" : "OK: kjører versjon: {version}", + "Error: Server seems to be a Signaling server" : "Feil: serveren ser ut til å være en signalserver", + "Recording backend URL" : "Nettadresse til opptaks-backend", + "Validate SSL certificate" : "Bekreft SSL-sertifikat", + "Delete this server" : "Slett denne serveren", + "Test this server" : "Test denne serveren", + "Disabled for all calls" : "Deaktivert for alle anrop", + "Enabled for all calls" : "Aktivert for alle anrop", + "Configurable on conversation level by moderators" : "Kan konfigureres på samtalenivå av moderatorer", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-innstillingene \"upload_max_filesize\" eller \"post_max_size\" vil bare tillate å laste opp filer opptil {maxUpload}.", + "Recording backend settings saved" : "Innstillingene for opptaks-backend lagret", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorer kan aktivere samtykke på samtalenivå. Samtykket som skal registreres vil være nødvendig for hver deltaker før han blir med i hver samtale i denne samtalen.", + "The consent to be recorded will be required for each participant before joining every call." : "Samtykket som skal registreres vil være nødvendig for hver deltaker før du blir med i hver samtale.", + "The consent to be recorded is not required." : "Samtykket som skal registreres er ikke nødvendig.", + "Add a new recording backend server" : "Legg til en ny opptaks-backend server", + "Shared secret" : "Delt hemmelighet", + "Recording consent" : "Samtykke til opptak", + "SIP configuration saved!" : "SIP-konfigurasjon lagret!", + "Enable SIP Dial-out option" : "Aktiver SIP-utringningsalternativ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalserveren må oppdateres til støttet SIP-utringningsfunksjon.", + "Restrict SIP configuration" : "Begrens SIP innstillinger", + "Enable SIP configuration" : "Aktiver SIP innstillinger", + "Only users of the following groups can enable SIP in conversations they moderate" : "Bare brukere av følgende grupper kan aktivere SIP i samtaler de modererer", + "Phone number (Country)" : "Telefonnumer (fast)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Denne informasjonen sendes i e-postinvitasjoner, samt vises i sidefeltet til alle deltakere.", + "Error code" : "Feilkode", + "High-performance backend URL" : "Nettadresse for backend med høy ytelse", + "High-performance backend settings saved" : "Backend-innstillinger med høy ytelse lagret", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "Serveradressen er ugyldig", + "STUN settings saved" : "STUN-innstillinger lagret", + "STUN servers" : "STUN-server", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server brukes til å fastsette den offentlige IP-adressen for deltagere bak en ruter.", + "Add a new STUN server" : "Legg til en ny STUN-server", + "{schema} scheme must be used with a domain" : "{schema} skjema må brukes med et domene", + "{option1} and {option2}" : "{option1} og {option2}", + "{option} only" : "kun {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: vellykkede ICE-kandidater returnert av TURN-serveren", + "Error: No working ICE candidates returned by the TURN server" : "Feil: ingen fungerende ICE-kandidater returnert av TURN-serveren", + "Testing whether the TURN server returns ICE candidates" : "Tester om TURN-serveren returnerer ICE-kandidater", + "TURN server schemes" : "TURN-serverskjemaer", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN-server hemmelighet", + "TURN server protocols" : "TURN-serverprotokoller", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "En TURN-server brukes til å proxy-tjene trafikken fra deltakere bak en brannmur. Hvis individuelle deltakere ikke kan koble til andre, er det mest sannsynlig nødvendig med en TURN-server. Se {linkstart}denne dokumentasjonen{linkend} for installasjonsinstruksjoner.", + "TURN settings saved" : "TURN-innstillinger lagret", + "TURN servers" : "TURN-servere", + "Add a new TURN server" : "Legg til en ny TURN-server", + "Failed" : "Mislyktes", + "OK" : "OK", + "Checking …" : "Sjekker…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Feilet: WebAssembly er deaktivert eller støttes ikke i denne nettleseren. Vennligst aktiver WebAssembly eller bruk en nettleser med støtte for den for å gjøre sjekken.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Feilet: \".wasm\"- og .tflite\"-filer ble ikke returnert på riktig måte av webserveren. Sjekk avsnittet \"Systemkrav\" i Talk-dokumentasjonen.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- og .tflite\"-filer ble returnert på riktig måte av webserveren.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det ser ut til at PHP- og Apache-konfigurasjonen ikke er kompatibel. Vær oppmerksom på at PHP bare kan brukes med MPM_PREFORK-modulen, og PHP-FPM kan bare brukes med MPM_EVENT-modulen.", + "Web server setup checks" : "Kontroller for oppsett av webserver", + "Files required for virtual background can be loaded" : "Filer som kreves for virtuell bakgrunn kan lastes inn", + "Federated user" : "Forent bruker", + "Assign participants to rooms" : "Tildel deltakere til rom", + "Configure breakout rooms" : "Konfigurer grupperom", + "Number of breakout rooms" : "Antall grupperom", + "You can create from 1 to 20 breakout rooms." : "Du kan opprette fra 1 til 20 grupperom.", + "Assignment method" : "Tildelingsmetode", + "Automatically assign participants" : "Tildel deltakere automatisk", + "Manually assign participants" : "Tildel deltakere manuelt", + "Allow participants to choose" : "La deltakerne velge", + "Create rooms" : "Opprett rom", + "Confirm" : "Bekreft", + "Create breakout rooms" : "Opprett grupperom", + "Reset" : "Tilbakestill", + "Delete breakout rooms" : "Slett grupperom", + "Room {roomNumber}" : "Rom {roomNumber}", + "Current breakout rooms and settings will be lost" : "Gjeldende grupperom og innstillinger vil gå tapt", + "Cancel" : "Avbryt", + "Unassigned participants" : "Ikke-tilordnede deltakere", + "Back" : "Tilbake", + "Assign" : "Tildel", + "Add participant \"{user}\"" : "Legg til deltaker \"{user}\"", + "Now" : "Nå", + "Loading …" : "Laster ...", + "From" : "Fra", + "To" : "Til", + "Calendar" : "Kalender", + "Attendees" : "Deltakere", + "Save" : "Lagre", + "Search participants" : "Søk etter deltakere", + "No results" : "Ingen resultater", + "Done" : "Ferdig", + "Raise hand" : "Løft hånden", + "Raise hand (R)" : "Rekk opp hånden (R)", + "Lower hand" : "Senk hånden", + "Lower hand (R)" : "Send hånden (R)", + "Exit full screen (F)" : "Avslutt fullskjerm (F)", + "Full screen (F)" : "Fullskjerm (F)", + "Speaker view" : "Høyttalervisning", + "Grid view" : "Rutenett-visning", + "Recording consent is required" : "Samtykke til opptak kreves", + "This conversation is read-only" : "Denne samtalen er skrivebeskyttet", + "Connection failed" : "Tilkobling feilet", + "Reload" : "Last på nytt", + "{nickName} raised their hand." : "{nickName} rakte opp hånden.", + "A participant raised their hand." : "En deltaker løftet hånden.", + "Collapse stripe" : "Skjul stripe", + "Expand stripe" : "Utvid stripe", + "Previous page of videos" : "Forrige side med videoer", + "Next page of videos" : "Neste side med videoer", + "Connecting …" : "Kobler til...", + "Calling …" : "Ringer...", + "Waiting for {user} to join the call" : "Venter på at {user} skal bli med i samtalen", + "Waiting for others to join the call …" : "Venter på at andre blir med i samtalen…", + "You can invite others in the participant tab of the sidebar" : "Du kan invitere andre fra deltagerfanen i sidepanel", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan invitere andre i deltagerfanen av sidepanel eller dele denne lenke for å invitere andre!", + "Share this link to invite others!" : "Klikk denne lenken for å invitere andre.", + "Copy link" : "Kopier lenke", + "You are not allowed to enable audio" : "Du har ikke lov til å aktivere lyd", + "No audio. Click to select device" : "Ingen lyd. Klikk for å velge enhet.", + "Mute audio" : "Slå av lyd", + "Mute audio (M)" : "Demp lyd (M)", + "Unmute audio" : "Slå på lyd", + "Unmute audio (M)" : "Slå på lyden (M)", + "None" : "Ingen", + "Access to camera was denied" : "Tilgang til kamera ble nektet", + "Error while accessing camera: It is likely in use by another program" : "Feil under tilgang til kamera: det er sannsynligvis i bruk av et annet program.", + "Error while accessing camera" : "Feil under tilgang til kameraet", + "You have been muted by a moderator" : "En moderator har dempet deg", + "Hide presenter video" : "Skjul presentatørvideo", + "You are not allowed to enable video" : "Du har ikke lov til å aktivere video", + "No video. Click to select device" : "Ingen video. Klikk for å velge enhet.", + "Disable video" : "Skru av video", + "Disable video (V)" : "Deaktiver video (V)", + "Enable video" : "Skru på video", + "Enable video (V)" : "Aktiver video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video (V) – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Show presenter" : "Vis presentatør", + "You" : "Du", + "Mute" : "Dempe", + "Muted" : "Dempet", + "Show screen" : "Vis skjerm", + "Stop following" : "Slutt å følge", + "Connection could not be established …" : "Forbindelsen kunne ikke opprettes...", + "Connection was lost and could not be re-established …" : "Forbindelsen ble brutt og kunne ikke gjenopprettes…", + "Connection could not be established. Trying again …" : "Forbindelsen kunne ikke opprettes. Forsøker igjen...", + "Connection lost. Trying to reconnect …" : "Forbindelsen er brutt. Prøver å koble til igjen…", + "Connection problems …" : "Tilkoblingsproblemer...", + "Collapse" : "Skjul", + "Expand" : "Ekspander", + "You need to be logged in to upload files" : "Du må være på logget for å laste opp filer", + "Drop your files to upload" : "Dropp filer for å laste opp", + "Conversation messages" : "Samtale meldinger", + "Scroll to bottom" : "Rull til bunnen", + "Post message" : "Send melding", + "Federated conversation" : "Forent samtale", + "Public conversation" : "Offentlig samtale", + "Favorite" : "Merk som favoritt", + "Banned users" : "Utestengte brukere", + "Manage the list of banned users in this conversation." : "Administrer listen over utestengte brukere i denne samtalen.", + "Manage bans" : "Administrer utestengelser", + "No banned users" : "Ingen utestengte brukere", + "Banned by:" : "Utestengt av:", + "Date:" : "Dato:", + "Note:" : "Merk:", + "Hide details" : "Skjul detaljer", + "Show details" : "Vis detaljer", + "Unban" : "Opphev utestengelsen", + "Error while updating conversation name" : "Feil under oppdatering av samtalenavn", + "Error while updating conversation description" : "Feil under oppdatering av samtalebeskrivelse", + "Enter a name for this conversation" : "Skriv inn et navn for denne samtalen", + "Edit conversation name" : "Rediger samtalenavn", + "Edit conversation description" : "Rediger samtalebeskrivelse", + "Enter a description for this conversation" : "Skriv inn en beskrivelse for denne samtalen", + "Picture" : "Bilde", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Følgende roboter kan aktiveres i denne samtalen. Ta kontakt med administrasjonen din for å få flere roboter installert på denne serveren.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Ingen roboter er installert på denne serveren. Ta kontakt med administrasjonen din for å få roboter installert på denne serveren.", + "Disable" : "Deaktiver", + "Enable" : "Aktiver", + "Breakout rooms" : "Grupperom", + "Manage breakout rooms" : "Administrer grupperom", + "Set up breakout rooms for this conversation" : "Sett opp grupperom for denne samtalen", + "Please select a valid PNG or JPG file" : "Vennligst velg en gyldig PNG eller JPG-fil", + "Choose your conversation picture" : "Velg ditt samtalebilde", + "Choose" : "Velg", + "Error setting conversation picture" : "Feil ved innstilling av samtalebilde", + "Could not set the conversation picture: {error}" : "Kunne ikke angi samtalebildet: {error}", + "Error cropping conversation picture" : "Feil ved beskjæring av samtalebilde", + "Error removing conversation picture" : "Feil ved fjerning av samtalebilde", + "Set emoji as conversation picture" : "Angi emoji som samtalebilde", + "Set background color for conversation picture" : "Angi bakgrunnsfarge for samtalebilde", + "Upload conversation picture" : "Last opp samtalebilde", + "Choose conversation picture from files" : "Velg samtalebilde blant filer", + "Remove conversation picture" : "Fjern samtalebilde", + "The file must be a PNG or JPG" : "Filen må være en .PNG eller .JPG", + "Set picture" : "Angi bilde", + "Default permissions modified for {conversationName}" : "Standard rettigheter modifisert for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kunne ikke modifisere standard rettigheter for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Rediger standardtillatelsene for deltakere i denne samtalen. Disse innstillingene påvirker ikke moderatorer.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Hver gang tillatelser endres i denne delen, går egendefinerte tillatelser som tidligere var tildelt individuelle deltakere, tapt.", + "All permissions" : "Alle rettigheter", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deltakerne har rettigheter til å starte en samtale, bli med i en samtale, aktivere lyd og video og dele skjermen.", + "Restricted" : "Begrenset", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deltakere kan bli med i samtaler, men kan ikke aktivere lyd eller video eller dele skjerm før en moderator manuelt gir dem tillatelser.", + "Advanced permissions" : "Avanserte rettigheter", + "Edit permissions" : "Rediger rettigheter", + "Conversation settings" : "Samtale innstillinger", + "Basic Info" : "Grunnleggende informasjon", + "Personal" : "Personlig", + "Moderation" : "Moderering", + "Setup overview" : "Oversikt over oppsett", + "Breakout Rooms" : "Grupperom", + "Matterbridge" : "Matterbridge", + "Bots" : "Roboter", + "Danger zone" : "Faresone", + "Leave conversation" : "Forlat samtale", + "You need to promote a new moderator before you can leave the conversation" : "Du må forfremme en ny moderator før du kan forlate samtalen", + "Delete conversation" : "Slett samtale", + "Do you really want to delete \"{displayName}\"?" : "Vil du virkelig slette \"{displayName}\"?", + "Error while deleting conversation" : "Feil under sletting av samtale", + "Delete all chat messages" : "Slett alle meldinger", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vil du virkelig slette alle meldinger i \"{displayName}\"?", + "Error while clearing chat history" : "Det oppsto en feil. Kan ikke slette meldingslogg", + "Be careful, these actions cannot be undone." : "Vær forsiktig, disse handlingene kan ikke angres.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Når en samtale forlates, er det nødvendig med en invitasjon for å bli med i en lukket samtale igjen. En åpen samtale kan når som helst kobles til igjen.", + "Permanently delete this conversation." : "Slett denne samtalen permanent.", + "Delete chat messages" : "Slett melding", + "Permanently delete all the messages in this conversation." : "Slett alle meldingene i denne samtalen permanent.", + "_%n hour_::_%n hours_" : ["%n time","%n timer"], + "_%n day_::_%n days_" : ["%n dag","%n dager"], + "_%n week_::_%n weeks_" : ["%n uke","%n uker"], + "Custom expiration time" : "Brukerdefinert utløpstid for melding", + "Message expiration disabled" : "Utløpstid for melding deaktivert", + "Message expiration set: {duration}" : "Utløpstid for melding angitt: {duration}", + "Error when trying to set message expiration" : "Feil ved forsøk på å angi utløpstid for melding", + "Message expiration" : "Utløp av melding", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatmeldinger kan utløpe etter en viss tid. Merk: filer som deles i chat, slettes ikke for eieren, men deles ikke lenger i samtalen.", + "Set message expiration" : "Angi utløpstid for melding", + "Current message expiration" : "Gjeldene utløpstid for melding", + "Guest access" : "Gjestetilgang", + "Breakout rooms are not allowed in public conversations." : "Grupperom er ikke tillatt i offentlige samtaler.", + "Allow guests to join this conversation via link" : "Tillat gjester å delta i denne samtalen via kobling", + "Password protection" : "Passordbeskyttelse", + "Set a password" : "Sett et passord", + "Change password" : "Endre passord", + "Enter new password" : "Angi nytt passord", + "Save password" : "Lagre passord", + "Guests are allowed to join this conversation via link" : "Gjester kan delta i denne samtalen via kobling", + "Guests are not allowed to join this conversation" : "Gjester kan ikke delta i denne samtalen", + "Resend invitations" : "Send invitasjoner på nytt", + "This conversation is open to both registered users and users created with the Guests app" : "Denne samtalen er åpen for både registrerte brukere og brukere som er opprettet med Guests-appen", + "This conversation is open to registered users" : "Denne samtalen er åpen for registrerte brukere", + "This conversation is limited to the current participants" : "Denne samtalen er begrenset til de nåværende deltakerne", + "You opened the conversation to both registered users and users created with the Guests app" : "Du åpnet samtalen for både registrerte brukere og brukere som er opprettet med Guests-appen", + "Error occurred when opening or limiting the conversation" : "Det oppstod en feil under åpning eller begrensning av samtalen", + "Open conversation to registered users, showing it in search results" : "Åpne samtalen for registrerte brukere, vis den i søkeresultatene", + "Also open to users created with the Guests app" : "Også åpen for brukere som er opprettet med Guests-appen", + "Open conversation" : "Åpen samtale", + "Invalid language" : "Ugyldig språk", + "Start time: {date}" : "Starttidspunkt: {date}", + "Start time has been updated" : "Starttidspunkt har blitt oppdatert", + "Error occurred while updating start time" : "Det oppstod en feil under oppdatering av starttid", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Aktivering av lobbyen vil fjerne ikke-moderatorer fra den pågående samtalen.", + "Enable lobby, restricting the conversation to moderators" : "Aktiver lobbyen, og begrens samtalen til moderatorer", + "Meeting start time" : "Møtets starttidspunkt", + "Start time (optional)" : "Starttidspunkt (valgfri)", + "Error occurred when locking the conversation" : "Det oppstod en feil under låsing av samtalen", + "Error occurred when unlocking the conversation" : "Det oppstod en feil under opplåsing av samtalen", + "Lock conversation" : "Lås samtalen", + "This will also terminate the ongoing call." : "Dette vil også avslutte den pågående samtalen.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lås samtalen for å hindre at noen legger inn meldinger eller starter samtaler", + "Edit" : "Rediger", + "More information" : "Mer informasjon", + "Delete" : "Slett", + "Add new bridged channel to current conversation" : "Legg til ny brokoblet kanal til gjeldende samtale", + "unknown state" : "ukjent tilstand", + "running" : "kjører", + "not running, check Matterbridge log" : "kjører ikke, sjekk loggen til Matterbridge", + "not running" : "kjører ikke", + "Bridge saved" : "Bro lagret", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Du kan bygge bro mellom kanaler fra forskjellige direktemeldingssystemer med Matterbridge.", + "More info on Matterbridge" : "Mer info om Matterbridge", + "Messaging systems" : "Meldingssystemer", + "Enable bridge" : "Aktiver bro", + "Show Matterbridge log" : "Vis Matterbridge-logg", + "Log content" : "Loggfør innhold", + "Only moderators are allowed to mention @all" : "Bare moderatorer har lov til å nevne @all", + "All participants are allowed to mention @all" : "Bare deltakere har lov til å nevne @all", + "Participants are now allowed to mention @all." : "Deltakere har nå tillatelse til å nevne @all.", + "Mentioning @all has been limited to moderators." : "Å nevne @all har blitt begrenset til moderatorer.", + "Allow participants to mention @all" : "La deltakerne nevne @all", + "Mention permissions" : "Nevn rettigheter", + "Notifications" : "Varsler", + "Notify about calls in this conversation" : "Varsle om anrop i denne samtalen", + "Important conversation" : "Viktig samtale", + "Recording consent is required for calls in this conversation" : "Det kreves samtykke til opptak av anrop i denne samtalen", + "Recording consent is not required for calls in this conversation" : "Samtykke til opptak er ikke nødvendig for anrop i denne samtalen", + "Recording consent requirement was updated" : "Samtykkekravet for opptak ble oppdatert", + "Error occurred while updating recording consent" : "Det oppstod en feil under oppdatering av samtykke til opptak", + "Recording Consent" : "Samtykke til opptak", + "Recording consent cannot be changed once a call or breakout session has started." : "Samtykke til opptak kan ikke endres når en samtale- eller grupperomøkt har startet.", + "Require recording consent before joining call in this conversation" : "Krev samtykke til opptak før du blir med i samtalen i denne samtalen", + "Recording consent is required for all calls" : "Det kreves samtykke til opptak for alle samtaler", + "SIP dial-in is now possible without PIN requirement" : "SIP-innringing er nå mulig uten krav om PIN-kode", + "SIP dial-in is now enabled" : "SIP-innringing er nå aktivert", + "SIP dial-in is now disabled" : "SIP-innringing er nå deaktivert", + "Error occurred when enabling SIP dial-in" : "Feil oppstod under aktivering av SIP-innringing", + "Error occurred when disabling SIP dial-in" : "Feil oppstod under deaktivering av SIP-innringing", + "Phone and SIP dial-in" : "Telefon- og SIP-innringing", + "Enable phone and SIP dial-in" : "Aktiver telefon- og SIP-innringing", + "Allow to dial-in without a PIN" : "Tillat innringing uten PIN-kode", + "Join" : "Bli med", + "Error while creating the conversation" : "Feil under oppretting av samtalen", + "Create a new conversation" : "Opprett en ny samtale", + "Join open conversations" : "Bli med i åpne samtaler", + "Call a phone number" : "Ring et telefonnummer", + "Unread mentions" : "Uleste nevner", + "Create conversation" : "Opprett samtale", + "Enter your name" : "Skriv inn navnet ditt", + "Submit name and join" : "Send inn navn og bli med", + "Do you already have an account?" : "Har du allerede en konto?", + "Log in" : "Logg inn", + "An error occurred while calling a phone number" : "Det oppstod en feil under anrop av et telefonnummer", + "Phone number could not be called: {error}" : "Telefonnummer kunne ikke ringes: {error}", + "Phone number could not be called" : "Telefonnummer kunne ikke ringes", + "Search participants or phone numbers" : "Søk etter deltakere eller telefonnumre", + "Creating the conversation …" : "Oppretter samtalen...", + "Mark as read" : "Merk som lest", + "Mark as unread" : "Merk som ulest", + "Remove from favorites" : "Fjern fra favoritter", + "Add to favorites" : "Legg til i favoritter", + "You need to promote a new moderator before you can leave the conversation." : "Du må utnevne en ny moderator før du kan forlate samtalen.", + "Conversation actions" : "Samtalehandlinger", + "Pending invitations" : "Ventende invitasjoner", + "From {user} at {remoteServer}" : "Fra {user} ved {remoteServer}", + "Decline invitation" : "Avslå invitasjon", + "Accept invitation" : "Aksepter invitasjon", + "No pending invitations" : "Ingen ventende invitasjoner", + "Home" : "Hjem", + "Unread" : "Ulest", + "Alphabetically" : "Alfabetisk", + "No matches found" : "Ingen treff funnet", + "No conversations found" : "Ingen samtaler funnet", + "You have no unread mentions." : "Du har ingen uleste nevner", + "You have no unread messages." : "Du har ingen uleste meldinger", + "An error occurred while performing the search" : "Det oppstod en feil under utføring av søket", + "Conversation list" : "Samtaleliste", + "Unread messages" : "Uleste meldinger", + "Clear filters" : "Tøm filtre", + "New personal note" : "Nytt personlig notat", + "Clear filter" : "Tøm filter", + "App settings" : "App-innstillinger", + "Users" : "Brukere", + "Groups" : "Grupper", + "Teams" : "Lag", + "Federated users" : "Forente brukere", + "New private conversation" : "Ny privat samtale", + "Other sources" : "Andre kilder", + "Open conversations" : "Åpne samtaler", + "No search results" : "Ingen søkeresultater", + "Users, groups and teams" : "Brukere, grupper og lag", + "Users and groups" : "Brukere og grupper", + "Users and teams" : "Brukere og lag", + "Groups and teams" : "Grupper og lag", + "New group conversation" : "Ny gruppesamtale", + "The meeting will start soon" : "Møtet starter snart", + "This meeting is scheduled for {startTime}" : "Dette møtet er planlagt til {startTime}", + "You are currently waiting in the lobby" : "Du venter for øyeblikket i lobbyen", + "Select microphone" : "Velg mikrofon", + "No microphone available" : "Ingen mikrofon er tilgjengelig", + "Select camera" : "Velg kamera", + "No camera available" : "Ingen kamera tilgjengelig", + "Select a device" : "Velg en enhet", + "Playing …" : "Spiller...", + "Test speakers" : "Test høyttalere", + "Test" : "Test", + "Devices" : "Enheter", + "Backgrounds" : "Bakgrunner", + "No audio" : "Ingen lyd", + "No camera" : "Ikke noe kamera", + "Display video as you will see it (mirrored)" : "Vis video slik du vil se den (speilet)", + "Display video as others will see it" : "Vis video slik andre vil se den", + "Calls are not supported in your browser" : "Anrop støttes ikke i nettleseren din", + "Access to microphone is only possible with HTTPS" : "Tilgang til mikrofon er bare mulig med HTTPS", + "Access to microphone was denied" : "Tilgang til mikrofon ble nektet", + "Error while accessing microphone" : "Feil under tilgang til mikrofon", + "Access to camera is only possible with HTTPS" : "Tilgang til kamera er bare mulig med HTTPS", + "The call is being recorded." : "Samtalen blir tatt opp.", + "The call might be recorded." : "Samtalen kan bli tatt opp.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Opptaket kan inneholde stemmen din, video fra kamera og skjermdeling. Ditt samtykke kreves før du blir med i samtalen.", + "Give consent to the recording of this call" : "Gi samtykke til opptak av denne samtalen", + "Start recording immediately with the call" : "Start opptaket umiddelbart med samtalen", + "Apply settings" : "Anvend innstillinger", + "Select virtual office background" : "Velg virtuell kontorbakgrunn", + "Select virtual home background" : "Velg virtuell hjemmebakgrunn", + "Select virtual abstract background" : "Velg virtuell abstrakt bakgrunn", + "Select virtual beach background" : "Velg virtuell strandbakgrunn", + "Select virtual park background" : "Velg virtuell parkbakgrunn", + "Select virtual theater background" : "Velg virtuell teaterbakgrunn", + "Select virtual library background" : "Velg virtuell biblioteksbakgrunn", + "Select virtual space station background" : "Velg bakgrunn for virtuell romstasjon", + "Error while uploading the file" : "Feil under opplasting av filen", + "Select a file" : "Velg en fil", + "Invalid path selected" : "Ugyldig angitt sti", + "Select virtual background from file {fileName}" : "Velg virtuell bakgrunn fra fil {fileName}", + "Blur" : "Uklar", + "Upload" : "Last opp", + "Files" : "Filer", + "(editing)" : "(redigerer)", + "(edited)" : "(redigert)", + "The message has expired or has been deleted" : "Denne meldingen er utløpt eller slettet", + "Cancel quote" : "Avbryt tilbud", + "24 hours" : "24 timer", + "7 days" : "7 dager", + "Clear reminder – {timeLocale}" : "Tydelig påminnelse – {timeLocale}", + "Edited by {actor}" : "Redigert av {actor}", + "Message text copied to clipboard" : "Meldingstekst kopiert til utklippstavlen", + "Message text could not be copied" : "Meldingsteksten kunne ikke kopieres", + "Message forwarded to \"Note to self\"" : "Melding videresend til \"Notat til meg selv\"", + "Error while forwarding message to \"Note to self\"" : "Feil under videresending av melding til \"Notat til meg selv\"", + "A reminder was successfully removed" : "En påminnelse ble fjernet", + "Error occurred when removing a reminder" : "Det oppstod en feil under fjerning av en påminnelse", + "A reminder was successfully set at {datetime}" : "En påminnelse ble satt kl. {datetime}", + "Error occurred when creating a reminder" : "Det oppstod en feil under oppretting av en påminnelse", + "Add a reaction to this message" : "Legg til en reaksjon på denne meldingen", + "Reply" : "Svar", + "More actions" : "Flere handlinger", + "Set reminder" : "Angi påminnelse", + "Reply privately" : "Svar privat", + "Edit message" : "Rediger melding", + "Copy message" : "Kopier melding", + "Copy message link" : "Kopier meldingskobling", + "Go to file" : "Gå til fil", + "Forward message" : "Videresend melding", + "Translate" : "Oversette", + "Set custom reminder" : "Angi egendefinert påminnelse", + "Close reactions menu" : "Lukk reaksjonsmenyen", + "React with {emoji}" : "Reager med {emoji}", + "React with another emoji" : "Reager med en annen emoji", + "Choose a conversation to forward the selected message." : "Velg en samtale for å videresende den merkede meldingen.", + "Error while forwarding message" : "Feil under videresending av melding", + "The message has been forwarded to {selectedConversationName}" : "Meldingen er videresendt til {selectedConversationName}", + "Dismiss" : "Forkast", + "Go to conversation" : "Gå til samtale", + "Detect language" : "Oppdag språk", + "The message could not be translated" : "Meldingen kan ikke oversettes", + "Translation copied to clipboard" : "Oversettelsen kopier til utklippstavlen", + "Translation could not be copied" : "Oversettelsen kunne ikke kopieres", + "Translate message" : "Oversett melding", + "Source language to translate from" : "Kildespråk å oversette fra", + "Translate from" : "Oversett fra", + "Target language to translate into" : "Målspråk å oversette til", + "Translate to" : "Oversett til", + "Translating" : "Oversetter", + "Copy translated text" : "Kopier oversatt tekst", + "Send now" : "Send nå", + "Message read by everyone who shares their reading status" : "Melding lest av alle som deler sin lesestatus", + "Message sent" : "Melding sendt", + "Deleting message" : "Sletter melding", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Meldingen er slettet, men en robot eller Matterbridge er konfigurert, og meldingen kan allerede være distribuert til andre tjenester", + "Message deleted successfully" : "Melding slettet", + "Message could not be deleted because it is too old" : "Meldingen kunne ikke slettes fordi den er for gammel", + "Only normal chat messages can be deleted" : "Kun vanlige meldinger kan slettes", + "An error occurred while deleting the message" : "Det oppstod en feil under sletting av meldingen", + "Your browser does not support playing audio files" : "Nettleseren din støtter ikke avspilling av lydfiler", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} i {board}", + "Deck Card" : "Deck-kort", + "Remove {fileName}" : "Fjern {fileName}", + "Open this location in OpenStreetMap" : "Åpne denne plasseringen i OpenStreetMap", + "Sending message" : "Sender melding", + "Failed to send the message. Click to try again" : "Kunne ikke sende meldingen. Klikk for å prøve igjen.", + "Not enough free space to upload file" : "Ikke nok ledig plass til å laste opp fil", + "You cannot send messages to this conversation at the moment" : "Du kan ikke sende meldinger til denne samtalen for øyeblikket", + "Could not update the message" : "Kunne ikke oppdatere meldingen", + "You voted" : "Du stemte", + "_%n vote_::_%n votes_" : ["%n stemme","%n stemmer"], + "Open poll" : "Åpen avstemning", + "See results" : "Vis resultater", + "Reactions" : "Reaksjoner", + "No permission to post reactions in this conversation" : "Ingen tillatelse til å legge inn reaksjoner i denne samtalen", + "and {participant}" : "og {participant}", + "_and %n other participant_::_and %n other participants_" : ["og %n deltaker til","og %n andre deltakere"], + "Show all reactions" : "Vis alle reaksjoner", + "Add more reactions" : "Legg til flere reaksjoner", + "Show or collapse system messages" : "Vis eller skjul systemmeldinger", + "No messages" : "Ingen meldinger", + "All messages have expired or have been deleted." : "Alle meldinger er utløpt eller slettet.", + "Unpin" : "Løsne", + "Cancel search" : "Avbryt søk", + "Add a phone number" : "Legg til et telefonnummer", + "All set, the conversation \"{conversationName}\" was created." : "Alt klart, samtalen \"{conversationName}\" ble opprettet.", + "Create a new group conversation" : "Opprett en ny gruppesamtale", + "Add participants" : "Legg til deltager", + "Maximum length exceeded ({maxlength} characters)" : "Maksimal lengde overskredet ({maxlength} tegn)", + "Conversation visibility" : "Synlighet for samtale", + "Allow guests to join via link" : "Tillat gjester å bli med via kobling", + "Enter password" : "Skriv inn passord", + "This conversation has been locked" : "Samtalen er låst", + "No permission to post messages in this conversation" : "Ingen tillatelse til å legge ut meldinger i denne samtalen", + "Joining conversation …" : "Blir med i samtalen...", + "Send message silently" : "Send melding stille", + "Send message" : "Send melding", + "Send without notification" : "Send uten varsel", + "The participant will not be notified about new messages" : "Mottakeren blir ikke varslet om nye meldinger", + "Participants will not be notified about new messages" : "Mottakere blir ikke varslet om nye meldinger", + "The message could not be edited" : "Meldingen kunne ikke redigeres", + "File to share" : "Fil for deling", + "File upload is not available in this conversation" : "Filopplasting er ikke tilgjengelig i denne samtalen", + "Add emoji" : "Legg til emoji", + "Adding a mention will only notify users who did not read the message." : "Hvis du legger til en nevner, varsles bare brukere som ikke har lest meldingen.", + "Send later" : "Send senere", + "Cancel editing" : "Avbryt redigering", + "{user} is out of office and might not respond." : "{user} er fraværende og svarer kanskje ikke.", + "Share from {nextcloud}" : "Del fra {nextcloud}", + "Share from Files" : "Del fra Filer", + "Share files to the conversation" : "Del filer til samtalen", + "Upload from device" : "Last opp fra enhet", + "Create new poll" : "Opprett ny avstemning", + "Smart picker" : "Smartvelger", + "Record voice message" : "Ta opp talemelding", + "End recording and send" : "Avslutt opptak og send", + "Dismiss recording" : "Avvis opptak", + "Access to the microphone was denied" : "Tilgang til mikrofonen ble nektet", + "Microphone either not available or disabled in settings" : "Mikrofon enten ikke tilgjengelig eller deaktivert i innstillingene", + "Error while recording audio" : "Feil under innspilling av lyd", + "New file" : "Ny fil", + "Blank" : "Blank", + "Error while creating file" : "Feil under oppretting av fil", + "Create and share a new file" : "Opprett og del en ny fil", + "Name of the new file" : "Navn på ny fil", + "Create file" : "Opprett fil", + "Someone is typing …" : "Noen skriver…", + "{user1} is typing …" : "{user1} skriver...", + "{user1} and {user2} are typing …" : "{user1} og {user2} skriver...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} og {user3} skriver...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} og %n annen skriver...","{user1}, {user2}, {user3} og %n andre skriver..."], + "Add more files" : "Legg til flere filer", + "Send" : "Send", + "In this conversation {user} can:" : "I denne samtalen {user} kan:", + "Edit default permissions for participants in {conversationName}" : "Rediger standard rettigheter for deltakere i {conversationName}", + "Start a call" : "Start et anrop", + "Skip the lobby" : "Hopp over lobbyen", + "Can post messages and reactions" : "Kan legge ut meldinger og reaksjoner", + "Enable the microphone" : "Aktiver mikrofonen", + "Enable the camera" : "Aktiver kameraet", + "Share the screen" : "Del skjermen", + "Update permissions" : "Oppdater rettigheter", + "Updating permissions" : "Oppdaterer rettigheter", + "Create poll" : "Opprett avstemning", + "Question" : "Spørsmål", + "Ask a question" : "Still et spørsmål", + "Answers" : "Svar", + "Answer {option}" : "Svar {option}", + "Delete poll option" : "Slett avstemningsalternativet", + "Add answer" : "Legg til svar", + "Settings" : "Innstillinger", + "Anonymous poll" : "Anonym avstemning", + "Multiple answers" : "Flere svar", + "You voted for this option" : "Du stemte på dette alternativet", + "End poll" : "Avslutt avstemning", + "Change your vote" : "Endre stemmen din", + "Results" : "Resultater", + "Voted participants" : "Stemte deltakere", + "Send a message to \"{roomName}\"" : "Send en melding til \"{roomName}\"", + "Hide list of participants" : "Skjul deltakerlisten", + "Show list of participants" : "Vis listen over deltakere", + "Assistance requested in {roomName}" : "Anmodet om bistand i {roomName}", + "The message was sent to \"{roomName}\"" : "Meldingen ble sendt til \"{roomName}\"", + "Dismiss request for assistance" : "Avvis forespørsel om bistand", + "Send message to room" : "Send melding til rom", + "Back to main room" : "Tilbake til hovedrommet", + "Back to your room" : "Tilbake til rommet ditt", + "Message all rooms" : "Send melding til alle rom", + "Start session" : "Start økten", + "Start a call before you start a breakout room session" : "Start en samtale før du starter en grupperomøkt", + "Stop session" : "Stopp økten", + "The message was sent to all breakout rooms" : "Meldingen ble sendt til alle grupperom", + "Send a message to all breakout rooms" : "Send en melding til alle grupperom", + "Breakout rooms are not started" : "Grupperom er ikke startet", + "Disable lobby" : "Deaktiver lobby", + "Settings for participant \"{user}\"" : "Innstillinger for deltaker \"{user}\"", + "Participant \"{user}\"" : "Deltaker \"{user}\"", + "moderator" : "moderator", + "bot" : "robot", + "guest" : "gjest", + "Ringing …" : "Ringer...", + "Call rejected" : "Anrop avvist", + "{time} talking …" : "{time} snakker...", + "{time} talking time" : "{time} taletid", + "Raised their hand" : "Rekte opp hånden", + "Joined with video" : "Sluttet seg til med video", + "Joined via phone" : "Sluttet seg til via telefon", + "Joined with audio" : "Sluttet seg til med lyd", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Teksten må bestå av mindre tegn enn eller lik {maxLength}. Den gjeldende teksten består av {charactersCount}-tegn.", + "Remove group and members" : "Fjern gruppe og medlemmer", + "Remove team and members" : "Fjern lag og medlemmer", + "Remove participant" : "Fjern deltaker", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vil du virkelig fjerne gruppen \"{displayName}\" og medlemmene fra denne samtalen?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vil du virkelig fjerne laget \"{displayName}\" og medlemmene fra denne samtalen?", + "Do you really want to remove {displayName} from this conversation?" : "Vil du virkelig fjerne {displayName} fra denne samtalen?", + "Notification was sent to {displayName}" : "Varsel sendt til {displayName}", + "Could not send notification to {displayName}" : "Kunne ikke sende invitasjon til {displayName}", + "Permissions granted to {displayName}" : "Rettigheter gitt til {displayName}", + "Could not modify permissions for {displayName}" : "Kan ikke endre rettigheter for {displayName}", + "Permissions removed for {displayName}" : "Rettigheter fjernet for {displayName}", + "Permissions set to default for {displayName}" : "Rettigheter satt til standard for {displayName}", + "Phone number could not be hung up" : "Telefonnummeret kunne ikke legges på", + "Phone number could not be put on hold" : "Telefonnummeret kunne ikke settes på vent", + "Phone number could not be muted" : "Telefonnummeret kunne ikke dempes", + "Phone number could not be unmuted" : "Telefonnummeret kunne ikke slå på lyden", + "DTMF message could not be sent" : "DTMF-melding kunne ikke sendes", + "Phone number copied to clipboard" : "Telefonnummer kopiert til utklippstavlen", + "Phone number could not be copied" : "Telefonnummer kunne ikke kopieres", + "in the lobby" : "i lobbyen", + "Dial out phone" : "Ring ut telefonen", + "Hang up phone" : "Legg på telefonen", + "Move back to lobby" : "Gå tilbake til lobbyen", + "Move to conversation" : "Gå til samtale", + "Dial-in PIN" : "Ring-inn PIN-kode", + "Demote from moderator" : "Fjern moderatorstatus", + "Promote to moderator" : "Gi moderatorstatus", + "Resend invitation" : "Send invitasjon på nytt", + "Send call notification" : "Send anropsvarsel", + "Dial out phone number" : "Ring ut telefonnummer", + "Resume call for phone number" : "Gjenoppta anrop for telefonnummer", + "Put phone number on hold" : "Sett telefonnummeret på vent", + "Unmute phone number" : "Oppheve demping av telefonnummer", + "Mute phone number" : "Demp telefonnummer", + "Copy phone number" : "Kopier telefonnummer", + "Reset custom permissions" : "Tilbakestill egendefinerte rettigheter", + "Grant all permissions" : "Gi alle rettigheter", + "Remove all permissions" : "Fjern alle rettigheter", + "Also ban from this conversation" : "Også utesteng fra denne samtalen", + "Internal note (reason to ban)" : "Intern merknad (grunn til å utestenge)", + "Remove" : "Fjern", + "Permissions modified for {displayName}" : "Rettigheter endret for {displayName}", + "Add users, groups or teams" : "Legg til brukere, grupper eller lag", + "Add users or groups" : "Legg til bruker eller gruppe", + "Add users or teams" : "Legg til brukere eller lag", + "Add users" : "Legg til brukere", + "Add groups or teams" : "Legg til brukere eller lag", + "Add groups" : "Legg til grupper", + "Add teams" : "Legg til lag", + "Add other sources" : "Legg til andre kilder", + "Add emails" : "Legg til e-post", + "Integrations" : "Integreringer", + "Add federated users" : "Legg til forente brukere", + "Searching …" : "Søker ...", + "Search for more users" : "Søk etter flere brukere", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kan søke etter eller legge til deltakere via navn, e-post eller Federated Cloud ID", + "Search or add participants" : "Finn eller legg til deltakere", + "Invitation was sent to {actorId}" : "Invitasjon sendt til {actorId}", + "An error occurred while adding the participants" : "Det oppsto en feil. Kan ikke legge til deltakerne", + "Participants" : "Deltakere", + "Participants ({count})" : "Deltakere ({count})", + "Open chat" : "Åpne Chat", + "You have new unread messages in the chat." : "Du har nye uleste meldinger i chatten.", + "You have been mentioned in the chat." : "Du har blitt nevnt i chatten.", + "Chat" : "Chat", + "Details" : "Detaljer", + "Shared items" : "Delte elementer", + "Until" : "Til", + "No results found" : "Ingen resultater funnet", + "Load more results" : "Hent flere resultat", + "Projects" : "Prosjekter", + "No shared items" : "Ingen delte elementer", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Kobling til en samtale", + "No open conversations found" : "Ingen åpne samtaler funnet", + "Either there are no open conversations or you joined all of them." : "Enten er det ingen åpne samtaler, eller så ble du med i dem alle.", + "Check spelling or use complete words." : "Kontroller stavemåten eller bruk fullstendige ord.", + "Search conversations or users" : "Søk etter samtaler eller brukere", + "Select conversation" : "Velg samtale", + "Number length is not valid" : "Tall-lengden er ikke gyldig", + "Region code is not valid" : "Regionskoden er ikke gyldig", + "Number length is too short" : "Tall-lengen er for kort", + "Number length is too long" : "Tall-lengen er for lang", + "Number is not valid" : "Nummer er ikke gyldig", + "Phone numbers" : "Telefonnumre", + "Display name: {name}" : "Visningsnavn: {name}", + "Edit display name" : "Rediger visningsnavn", + "Save name" : "Lagre navn", + "Error while saving sounds setting" : "Feil under lagring av lydinnstilling", + "Play sounds when participants join or leave a call" : "Spille av lyder når deltakere blir med i eller forlater en samtale", + "Notification settings" : "Innstillinger for notifiseringer", + "Default language" : "Standard språk", + "Select location for attachments" : "Velg plassering for vedlegg", + "Error while setting attachment folder" : "Feil under angivelse av vedleggsmappe", + "Error while setting read status privacy" : "Feil under angivelse av personvern for lesestatus", + "Error while setting typing status privacy" : "Feil under angivelse av personvern for skrivestatus", + "Privacy" : "Personvern", + "Attachments folder" : "Vedleggsmappe", + "Toggle full screen" : "Veksle fullskjerm", + "Search" : "Søk", + "Focus the chat input" : "Fokuser chat-inndataene", + "Unfocus the chat input to use shortcuts" : "Fjern fokuseringen på chat-inndataene for å bruke snarveier", + "Edit your last message" : "Rediger din seneste melding", + "Shortcuts while in a call" : "Snarveier i en samtale", + "Camera on and off" : "Kamera på og av", + "Microphone on and off" : "Mikrofon på og av", + "Raise or lower hand" : "Hev eller senk hånden", + "Push to talk or push to mute" : "Trykk for å snakke eller trykk for å dempe", + "Start call silently" : "Start stille anrop", + "Start call" : "Start samtale", + "End call" : "Avslutt samtale", + "You will be able to join the call only after a moderator starts it." : "Du vil bare kunne bli med i samtalen etter at en moderator har startet den.", + "End call for everyone" : "Avslutt samtale for alle", + "Starting the recording" : "Starter opptaket", + "Recording" : "Innspilling", + "The call has been running for one hour." : "Samtalen har pågått i én time.", + "Cancel recording start" : "Avbryt opptaksstart", + "Stop recording" : "Stopp opptak", + "Send a reaction" : "Send en reaksjon", + "React with {reaction}" : "Reager med {reaction}", + "All tasks done!" : "Alle oppgaver fullført!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} av %n oppgave","{done} av %n oppgaver"], + "_%n participant in call_::_%n participants in call_" : ["%n deltaker i samtale","%n deltakere i samtale"], + "You are not allowed to enable screensharing" : "Du har ikke lov til å aktivere skjermdeling", + "No screensharing" : "Ingen skjermdeling", + "Screensharing options" : "Skjermdelingsvalg", + "Enable screensharing" : "Skru på skjermdeling", + "Bad sent video and screen quality." : "Dårlig sendt video- og skjermkvalitet.", + "Bad sent screen quality." : "Dårlig sendt skjermkvalitet.", + "Bad sent video quality." : "Dårlig sendt videokvalitet.", + "Bad sent audio, video and screen quality." : "Dårlig sendt lyd-, video- og skjermkvalitet.", + "Bad sent audio and screen quality." : "Dårlig sendt lyd- og skjermkvalitet.", + "Bad sent audio and video quality." : "Dårlig sendt lyd- og videokvalitet.", + "Bad sent audio quality." : "Dårlig sendt lydkvalitet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din mens du deler skjermen.", + "Disable background blur" : "Deaktiver bakgrunnsuskarphet", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din. For å forbedre situasjonen, prøv å deaktivere videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke se deg.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå deg og se skjermen din. For å forbedre situasjonen, prøv å deaktivere skjermdelingen.", + "Disable screenshare" : "Deaktiver skjermdeling", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere videoen din.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå deg.", + "Screen sharing is not supported by your browser." : "Skjermdeling støttes ikke av nettleseren din.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skjermdeling krever at siden er innlastet med HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skjermdeling krever at siden er innlastet med HTTPS.", + "An error occurred while starting screensharing." : "En feil inntraff under oppstart av skjermdeling.", + "Show your screen" : "Vis din skjerm", + "Stop screensharing" : "Stopp skjermdeling", + "Mute others" : "Demp andre", + "Start recording" : "Start opptak", + "Set up breakout rooms" : "Sett opp grupperom", + "Open Calendar" : "Åpne Kalender", + "Remove participant {name}" : "Fjern deltaker {name}", + "Keep" : "Behold", + "Open dialpad" : "Åpne numerisk tastatur", + "Select a region" : "Velg region", + "Search …" : "Søk...", + "Message without mention" : "Melding uten å nevne", + "Mention myself" : "Nevn meg selv", + "Mention everyone" : "Nevn alle", + "Select a conversation" : "Velg en samtale", + "Select a mode" : "Velg en modus", + "You do not have permissions to access this conversation." : "Du har ikke tillatelse til å få tilgang til denne samtalen.", + "Join a different conversation or start a new one." : "Bli med i en annen samtale eller start en ny.", + "The conversation does not exist" : "Samtalen finnes ikke", + "Join a conversation or start a new one!" : "Bli med i en samtale eller start en ny!", + "Duplicate session" : "Dupliser økten", + "Creating and joining a conversation with \"{userid}\"" : "Opprette og bli med i en samtale med \"{userid}\"", + "Join a conversation or start a new one" : "Ta del i en samtale eller start en ny", + "Error while joining the conversation" : "Feil under å bli med i samtalen", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud-bruker", + "User password" : "Brukerpassord", + "Talk conversation" : "Talk-samtale", + "Skip TLS verification" : "Hopp over TLS-verifisering", + "Matrix server URL" : "Matrix server URL", + "User" : "Bruker", + "Matrix channel" : "Matrix-kanal", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost-bruker", + "Team name" : "Navn på team", + "Channel name" : "Kanalnavn", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "Brukernavn eller e-postadresse", + "Rocket.Chat channel" : "Rocket.Chat-kanal", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Brukernavn for robot", + "Bot API key" : "Robot API-nøkkel", + "Zulip channel" : "Zulip-kanal", + "API token" : "API-symbol", + "Slack channel" : "Slack-kanal", + "Server ID or name" : "Server-ID eller navn", + "Channel" : "Kanal", + "Login" : "Logg inn", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (f.eks. chat.freenode.net:6667)", + "Nickname" : "Kallenavn", + "Connection password" : "Passord for tilkobling", + "IRC channel" : "IRC-kanal", + "Channel password" : "Passord for kanal", + "NickServ nickname" : "NickServ-kallenavn", + "NickServ password" : "NickServ-passord", + "Use TLS" : "Bruk TLS", + "Use SASL" : "Bruk SASL", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Klient-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Tråd-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Avstemninger", + "Deck cards" : "Deck-kort", + "Voice messages" : "Talemeldinger", + "Locations" : "Steder", + "Call recordings" : "Samtaleopptak", + "Audio" : "Lyd", + "Show all media" : "Vis alle medier", + "Show all files" : "Vis alle filer", + "Show all polls" : "Vis alle avstemninger", + "Show all deck cards" : "Vis alle deck-kort", + "Show all voice messages" : "Vis alle talemeldinger", + "Show all locations" : "Vis alle plasseringer", + "Show all call recordings" : "Vis alle samtaleopptak", + "Show all audio" : "Vis all lyd", + "Show all other" : "Vi alt annet", + "Group" : "Gruppe", + "Team" : "Lag", + "You reconnected to the call" : "Du koblet til samtalen på nytt", + "{actor} reconnected to the call" : "{actor} koblet til samtalen på nytt", + "You added {user0} and {user1}" : "Du la til {user0} og {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du la til {user0}, {user1} 1 %n mer deltaker","Du la til {user0}, {user1} og %n flere deltakere"], + "An administrator added you and {user0}" : "En administrator la til deg og {user0}", + "{actor} added you and {user0}" : "{actor} la til deg og {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["En administrator la til deg, {user0} og %n mer deltaker","En administrator la til deg, {user0} and %n flere deltakere"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} la til deg, {user0} og %n mer deltaker","{actor} la til deg, {user0} og %n flere deltakere"], + "An administrator added {user0} and {user1}" : "En administrator la til {user0} og {user1}", + "{actor} added {user0} and {user1}" : "{actor} la til {user0} og {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["En administrator la til {user0}, {user1} og %n mer deltaker","En administrator la til {user0}, {user1} og %n flere deltakere"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} la til {user0}, {user1} og %n mer deltaker","{actor} la til {user0}, {user1} og %n flere deltakere"], + "You removed {user0} and {user1}" : "Du fjernet {user0} og {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du fjernet {user0}, {user1} og %n deltaker til","Du fjernet {user0}, {user1} og %n deltakere til"], + "An administrator removed you and {user0}" : "En administrator fjernet deg og {user0}", + "{actor} removed you and {user0}" : "{actor} fjernet deg og {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administrator fjernet deg, {user0} og %n deltaker til","En administrator fjernet deg, {user0} og %n deltakere til"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} fjernet deg, {user0} og %n deltaker til","{actor} fjernet deg, {user0} og %n deltakere til"], + "An administrator removed {user0} and {user1}" : "En administrator fjernet {user0} og {user1}", + "{actor} removed {user0} and {user1}" : "{actor} fjernet {user0} og {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administrator fjernet {user0}, {user1} og %n deltaker til","En administrator fjernet {user0}, {user1} og %n deltakere til"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} fjernet {user0}, {user1} og %n deltaker til","{actor} fjernet {user0}, {user1} og %n deltakere til"], + "You and {user0} joined the call" : "Du og {user0} ble med i samtalen", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} og %n deltaker til ble med i samtalen","Du, {user0} og %n flere deltakere ble med i samtalen"], + "{user0} and {user1} joined the call" : "{user0} og {user1} ble med i samtalen", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} og %n deltaker til ble med i samtalen","{user0}, {user1} og %n flere deltakere ble med i samtalen"], + "You and {user0} left the call" : "Du og {user0} forlot samtalen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} og %n deltaker til forlot samtalen","Du, {user0} og %n flere deltakere forlot samtalen"], + "{user0} and {user1} left the call" : "{user0} og {user1} forlot samtalen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} og %n deltaker til forlot samtalen","{user0}, {user1} og %n flere deltakere forlot samtalen"], + "You promoted {user0} and {user1} to moderators" : "Du forfremmet {user0} og {user1} til moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du forfremmet {user0}, {user1} og %n deltaker til moderatorer","Du forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administrator forfremmet deg og {user0} til moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} forfremmet deg og {user0} til moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administrator forfremmet deg, {user0} og %n mer deltaker til moderatorer","En administrator forfremmet deg, {user0} og %n flere deltakere til moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} forfremmet deg, {user0} og %n mer deltaker til moderatorer","{actor} forfremmet deg, {user0} og %n flere deltakere til moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administrator forfremmet {user0} og {user1} til moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} forfremmet {user0} og {user1} til moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administrator forfremmet {user0}, {user1} og %n mer deltaker til moderatorer","En administrator forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} forfremmet {user0}, {user1} og%n mer deltaker til moderatorer","{actor} forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "You demoted {user0} and {user1} from moderators" : "Du nedgraderte {user0} og {user1} fra moderatorer", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","Du nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "An administrator demoted you and {user0} from moderators" : "En administrator nedgraderte deg og {user0} fra moderatorer", + "{actor} demoted you and {user0} from moderators" : "{actor} nedgraderte deg og {user0} fra moderatorer", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["En administrator nedgraderte deg, {user0} og %n deltaker til fra moderatorer","En administrator nedgraderte deg, {user0} og %n flere deltakere fra moderatorer"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} nedgraderte deg, {user0} og %n deltaker til fra moderatorer","{actor} nedgraderte deg, {user0} og %n flere deltakere fra moderatorer"], + "An administrator demoted {user0} and {user1} from moderators" : "En administrator nedgraderte {user0} og {user1} fra moderatorer", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} nedgraderte {user0} og {user1} fra moderatorer", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["En administrator nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","En administrator nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","{actor} nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "You: {lastMessage}" : "Du: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(redigert av deg)", + "(edited by a deleted user)" : "(redigert av en slettet bruker)", + "(edited by {moderator})" : "(redigert av {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du prøver å bli med i en samtale mens du har en aktiv økt i et annet vindu eller en annen enhet. Dette støttes for øyeblikket ikke av Nextcloud Talk. Hva vil du gjøre?", + "Leave this page" : "Forlate denne siden", + "Join here" : "Bli med her", + "Deck card has been posted to {conversation}" : "Deck-kort er lagt til {conversation}", + "An error occurred while posting deck card to conversation" : "En feil oppstod ved å legge ut deck-kortet til samtalen", + "Post to a conversation" : "Legg ut til en samtale", + "Post to conversation" : "Legg ut til samtale", + "The recording failed. Please contact your administrator." : "Opptaket feilet, vennligst kontakt administratoren din.", + "Location has been posted to {conversation}" : "Plassering er lagt til {conversation}", + "An error occurred while posting location to conversation" : "En feil oppstod ved å legge ut plassering til samtale", + "Share to a conversation" : "Del til en samtale", + "Share to conversation" : "Del til samtale", + "In conversation" : "I samtale", + "Search in conversation: {conversation}" : "Søk i samtale: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Forespørslene dine blir strupet for øyeblikket på grunn av beskyttelse mot rå makt", + "Error while clearing conversation history" : "Feil under tømming av samtalelogg", + "Error occurred while allowing guests" : "Det oppstod en feil under godkjenning av gjester", + "Error occurred while disallowing guests" : "Det oppstod en feil under avvisning av gjester", + "Error occurred when restricting the conversation to moderator" : "Det oppstod en feil da samtalen ble begrenset til moderator", + "Error occurred when opening the conversation to everyone" : "Det oppstod en feil da samtalen ble åpnet for alle", + "Conversation password has been saved" : "Samtale passord er lagret", + "Conversation password has been removed" : "Samtale passord er fjernet", + "Error occurred while saving conversation password" : "Det oppstod en feil under lagring av samtalepassord", + "Call recording is starting." : "Samtaleopptaket starter.", + "Call recording stopped while starting." : "Samtaleopptaket stoppet under oppstart.", + "Call recording stopped. You will be notified once the recording is available." : "Samtaleopptak stoppet. Du vil bli varslet når opptaket er tilgjengelig.", + "Conversation picture set" : "Samtalebilde angitt", + "Conversation picture deleted" : "Samtalebilde slettet", + "Could not delete the conversation picture" : "Kunne ikke slette samtalebildet", + "Could not post message: {errorMessage}" : "Kunne ikke legge inn melding: {errorMessage}", + "Participant is banned successfully" : "Deltaker er utestengt", + "Error while banning the participant" : "Feil under utestenging av deltakeren", + "An error occurred while fetching the participants" : "Det oppstod en feil under henting av deltakerne", + "Could not send invitation to {actorId}" : "Kunne ikke sende invitasjon til {actorId}", + "Invitations sent" : "Invitasjoner sendt", + "Error occurred when sending invitations" : "Det oppstod en feil under sending av invitasjoner", + "An error occurred while creating breakout rooms" : "Det oppstod en feil under oppretting av grupperom", + "An error occurred while re-ordering the attendees" : "Det oppstod en feil under omorganisering av deltakerne", + "An error occurred while deleting breakout rooms" : "Det oppstod en feil under sletting av grupperom", + "An error occurred while starting breakout rooms" : "Det oppstod en feil under oppstart av grupperom", + "An error occurred while stopping breakout rooms" : "Det oppstod en feil under stopping av grupperom", + "An error occurred while sending a message to the breakout rooms" : "Det oppstod en feil under sending av en melding til grupperommene", + "An error occurred while requesting assistance" : "Det oppstod en feil under forespørsel om hjelp", + "An error occurred while resetting the request for assistance" : "Det oppstod en feil under tilbakestilling av forespørselen om hjelp", + "An error occurred while joining breakout room" : "Det oppstod en feil under tilknytning til grupperom", + "An error occurred while accepting an invitation" : "Det oppstod en feil under godkjennelse av invitasjonen", + "An error occurred while rejecting an invitation" : "Det oppstod en feil under avvisning av invitasjonen", + "{guest} (guest)" : "{guest} (gjest)", + "An error occurred while submitting your vote" : "Det oppstod en feil under innsending av stemmen", + "An error occurred while ending the poll" : "Det oppstod en feil under avslutning av avstemningen", + "Poll \"{name}\" was created by {user}. Click to vote" : "Avstemning \"{name}\" ble opprettet av {user}. Klikk for å stemme.", + "Failed to add reaction" : "Å legge til reaksjon feilet", + "Failed to remove reaction" : "Fjerning av reaksjon feilet", + "Error while uploading file \"{fileName}\"" : "Feil under opplasting av fil \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Ikke nok ledig plass til å laste opp fil \"{fileName}\"", + "You are not allowed to share files" : "Du har ikke lov til å dele filer", + "Error while sharing file" : "Feil under deling av fil", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nettleseren du bruker støttes ikke fullt ut av Nextcloud Talk. Bruk den nyeste versjonen av Mozilla Firefox, Microsoft Edge, Google Chrome, Opera eller Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Om %n time","Om %n timer"], + "_%n minute _::_%n minutes_" : ["%n minutt","%n minutter"], + "In {hours} and {minutes}" : "Om {hours} og {minutes}", + "_In %n minute_::_In %n minutes_" : ["Om %n minutt","Om %n minutter"], + "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "I morgen – {timeLocale}", + "This weekend – {timeLocale}" : "Denne helgen – {timeLocale}", + "Next week – {timeLocale}" : "Neste uke – {timeLocale}", + "Conversation link copied to clipboard" : "Kobling til samtale kopiert til utklippstavlen", + "The link could not be copied" : "Koblingen kunne ikke kopieres", + "Error while parsing a PROPFIND error" : "Feil under analyse av en PROPFIND-feil", + "Sending signaling message has failed" : "Sending av signalmelding feilet", + "Lost connection to signaling server. Trying to reconnect." : "Mistet forbindelsen til signalserveren. Prøver å koble til igjen.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Den konfigurerte signalserveren må oppdateres for å være kompatibel med denne versjonen av Talk. Ta kontakt med administrasjonen.", + "Please reload the page." : "Last inn siden på nytt.", + "Do not disturb" : "Ikke forstyrr", + "Away" : "Borte", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Høyttaler {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Du ser ut til å snakke mens du er dempet, vær så snill å slå på lyden for at andre skal høre deg", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Kunne ikke etablere en forbindelse med minst én deltaker. En TURN-server kan være nødvendig for scenariet ditt. Be administratoren om å konfigurere en etter {linkstart}denne dokumentasjonen{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dette tar lengre tid enn forventet. Er medietillatelsene allerede gitt (eller avvist)? Hvis ja, vennligst start nettleseren på nytt, da lyd og video svikter.", + "Access to microphone & camera is only possible with HTTPS" : "Tilgang til mikrofon og kamera er kun mulig via HTTPS", + "Please move your setup to HTTPS" : "Flytt oppsettet ditt til HTTPS", + "Access to microphone & camera was denied" : "Tilgang til mikrofon og kamera var avvist", + "WebRTC is not supported in your browser" : "WebRTC er ikke støttet av din nettleser", + "Please use a different browser like Firefox or Chrome" : "Bruk en annen nettleser, som Firefox eller Chrome", + "Error while accessing microphone & camera" : "Feil med tilgang til mikrofon og kamera", + "%s Talk on your mobile devices" : "%s Talk på dine mobile enheter", + "Join conversations at any time, anywhere, on any device." : "Bli med i samtaler når som helst, hvor som helst, på hvilken som helst enhet.", + "Android app" : "Android-app", + "iOS app" : "iOS-app", + "__language_name__" : "Norsk bokmål", + "Call summary (%s)" : "Samtalesammendrag (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Samtalesammendragsroboten legger ut en oversiktsmelding etter samtalen som viser alle deltakerne og skisserer oppgaver", + "Tasks" : "Oppgaver", + "Notes" : "Notater", + "Reports" : "Rapporter", + "Call summary" : "Samtalesammendrag", + "Call summary - {title}" : "Samtalesammendrag - {title}", + "Join conversations from remote Nextcloud servers" : "Bli med i samtaler fra eksterne Nextcloud-servere", + "Set reminder for later today" : "Sett påminnelse til senere i dag", + "Set reminder for tomorrow" : "Sett påminnelse for i morgen", + "Set reminder for this weekend" : "Sett påminnelse for denne helgen", + "Set reminder for next week" : "Sett påminnelse for neste uke", + "Open poll • You voted already" : "Åpen avstemning • Du har stemt allerede", + "Open poll • Click to vote" : "Åpen avstemning • Klikk for å stemme", + "Poll • Ended" : "Avstemning • Avsluttet", + "Talk recording from {time} ({conversation})" : "Taleopptak fra {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Avstemningsresultater • %n stemme","Avstemningsresultater • %n stemmer"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Åpen avstemning • %n stemme","Åpen avstemning • %n stemmer"], + "Submit vote" : "Send inn stemme", + "Your privacy setting has been saved" : "Personverninnstillingen din er lagret", + "Failed to save sounds setting" : "Kunne ikke lagre lydinnstillingen", + "Sounds setting saved" : "Lydinnstilling lagret", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du ble med i samtalen i et annet vindu eller på en annen enhet. Dette støttes for øyeblikket ikke av Nextcloud Talk, så denne økten ble lukket." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nb.json b/l10n/nb.json new file mode 100644 index 0000000..5d508b1 --- /dev/null +++ b/l10n/nb.json @@ -0,0 +1,1793 @@ +{ "translations": { + "a conversation" : "en samtale", + "(Duration %s)" : "(Varighet %s)", + "You attended a call with {user1}" : "Du har tatt del i en samtale med {user1}", + "_%n guest_::_%n guests_" : ["%n gjest","%n gjester"], + "You attended a call with {user1} and {user2}" : "Du har tatt del i en samtale med {user1} og {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du har tatt del i en samtale med {user1}, {user2} og {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du har tatt del i en samtale med {user1}, {user2}, {user3} og {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du har tatt del i en samtale med {user1}, {user2}, {user3}, {user4} og {user5}", + "_%n other_::_%n others_" : ["én annen person","%n andre"], + "{actor} invited you to {call}" : "{actor} inviterte deg til {call}", + "You were invited to a conversation or had a call" : "Du ble invitert til et samtale, eller fikk et anrop", + "Other activities" : "Andre aktiviteter", + "Talk" : "Samtale", + "Guest" : "Gjest", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Velkommen til Nextcloud Talk!\nI denne samtalen vil du bli informert om nye funksjoner som er tilgjengelige i Nextcloud Talk.", + "## New in Talk %s" : "## Nytt i Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge og Safari kan nå bli benyttet for å delta i lyd- og videosamtaler", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-til-en-samtaler er nå vedvarende og kan ikke gjøres om til gruppesamtaler ved et uhell lenger. Også når en av deltakerne forlater samtalen, slettes ikke samtalen automatisk lenger. Bare hvis begge deltakerne forlater, slettes samtalen fra serveren.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Du kan nå varsle alle deltakerne ved å legge ut \"@all\" i chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Med \"pil opp\"-tasten kan du legge ut siste melding på nytt", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk kan nå ha kommandoer, send \"/help\" som en chatmelding for å se om administratoren har konfigurert noen", + "- With projects you can create quick links between conversations, files and other items" : "- Med prosjekter kan du opprette hurtigkoblinger mellom samtaler, filer og andre elementer", + "- You can now mention guests in the chat" : "- Du kan nå nevne gjester i chat'n", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Samtaler kan nå ha en lobby. Dette vil tillate moderatorer å bli med i chatten og ringe allerede for å forberede møtet, mens brukere og gjester må vente.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nå svare direkte på meldinger, noe som gir de andre brukerne mer kontekst hva meldingen handler om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Søk etter samtaler og deltakere vil nå også filtrere eksisterende samtaler, noe som gjør det mye enklere å finne tidligere samtaler", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nå legge til egendefinerte brukergrupper i samtaler når circles-appen er installert", + "- Check out the new grid and call view" : "- Ta en titt på det nye rutenettet og anropsvisningen", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Du kan nå laste opp og dra og slippe filer direkte fra enheten din til chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delte filer åpnes nå direkte i chatvisningen med visningsprogrammene", + "- You can now search for chats and messages in the unified search in the top bar" : "- Du kan nå søke etter chatter og meldinger i det enhetlige søket i topplinjen", + "- Spice up your messages with emojis from the emoji picker" : "- Krydre meldingene dine med emojier fra emoji-velgeren", + "- You can now change your camera and microphone while being in a call" : "- Du kan nå bytte kamera og mikrofon mens du er i en samtale", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Gi samtalene dine litt kontekst med en beskrivelse og åpne den slik at påloggede brukere kan finne den og bli med selv", + "- See a read status and send failed messages again" : "- Se en lesestatus og send meldinger som feilet på nytt", + "- Raise your hand in a call with the R key" : "- Rekk opp hånden i en samtale med R-tasten", + "- Join the same conversation and call from multiple devices" : "- Bli med i den samme samtalen og ring fra flere enheter", + "- Send voice messages, share your location or contact details" : "- Send talemeldinger, del posisjonen eller kontaktinformasjonen din", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Legg til grupper i en samtale, og nye gruppemedlemmer blir automatisk lagt til som deltakere", + "- A preview of your audio and video is shown before joining a call" : "- En forhåndsvisning av lyd og video vises før du blir med i en samtale", + "- You can now blur your background in the newly designed call view" : "- Du kan nå gjøre bakgrunnen uskarp i den nydesignede samtalevisningen", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nå tildele generelle og individuelle tillatelser til deltakere", + "- You can now react to chat messages" : "- Du kan nå reagere på chatmeldinger", + "- In the sidebar you can now find an overview of the latest shared items" : "- I sidepanelet kan du nå finne en oversikt over de siste delte elementene", + "- Use a poll to collect the opinions of others or settle on a date" : "- Bruk en meningsmåling til å samle andres meninger eller bli enige om en dato", + "- Configure an expiration time for chat messages" : "- Konfigurer en utløpstid for chatmeldinger", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start samtaler uten å varsle andre i store samtaler. Du kan sende individuelle anropsvarsler når samtalen har startet.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Send chatmeldinger uten å varsle mottakerne i tilfelle det ikke haster", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojier kan nå fullføres automatisk ved å skrive en \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Koble ulike elementer ved hjelp av den nye smartvelgeren ved å skrive en \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorer kan nå opprette grupperom (krever serverdelen med høy ytelse)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Samtaler kan nå tas opp (krever serverdelen med høy ytelse)", + "- Conversations can now have an avatar or emoji as icon" : "- Samtaler kan nå ha en avatar eller emoji som ikon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuelle bakgrunner er nå tilgjengelige i tillegg til den uskarpe bakgrunnen i videosamtaler", + "- Reactions are now available during calls" : "- Reaksjoner er nå tilgjengelige under samtaler", + "- Typing indicators show which users are currently typing a message" : "- Skriveindikatorer viser hvilke brukere som for øyeblikket skriver en melding", + "- Groups can now be mentioned in chats" : "- Grupper kan nå nevnes i chatter", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Samtaleopptak blir automatisk transkribert hvis en transkripsjonsleverandør-app er registrert", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatmeldinger kan oversettes hvis en oversettelsesleverandør-app er registrert", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kan nå bli brukt i _chat_ meldinger", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks er nå tilgjengelige for å implementere roboter. Se dokumentasjonen for mer informasjon https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Angi en påminnelse på en chatmelding for å bli varslet senere igjen", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Bruk **Notat til meg selv**-samtalen for å ta notater og dele informasjon mellom enhetene dine", + "- Captions allow to send a message with a file at the same time" : "- Bildetekster gjør det mulig å sende en melding med en fil samtidig", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video av taleren er nå synlig mens skjermen deles, og anropsreaksjoner er animerte", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Meldinger kan nå redigeres av innloggede forfattere og moderatorer i 6 timer", + "- Unsent message drafts are now saved in your browser" : "- Utkast til usendte meldinger lagres nå i nettleseren ", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nå utestenge kontoer og gjester for å hindre dem i å bli med i en samtale igjen", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Kommende anrop fra koblede kalenderhendelser og ikke-tilstedeværende erstatninger vises nå i samtaler", + "_All %n participant_::_All %n participants_" : ["Alle %n deltaker","Alle %n deltakere"], + "Talk updates ✅" : "Talk oppdateringer ✅", + "Reaction deleted by author" : "Reaksjon slettet av forfatter", + "{actor} created the conversation" : "{actor} opprettet samtalen", + "You created the conversation" : "Du opprettet samtalen", + "System created the conversation" : "Systemet opprettet samtalen", + "An administrator created the conversation" : "En administrator opprettet samtalen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administrator endret navnet på samtalen fra \"%1$s\" til \"%2$s\"", + "{actor} set the description" : "{actor} angi beskrivelsen", + "You set the description" : "Du angav beskrivelsen", + "An administrator set the description" : "En administrator angav beskrivelsen", + "{actor} removed the description" : "{actor} fjernet beskrivelsen", + "You removed the description" : "Du fjernet beskrivelsen", + "An administrator removed the description" : "En administrator fjernet beskrivelsen", + "You started a silent call" : "Du startet et stille anrop", + "{actor} started a silent call" : "{actor} startet et stille anrop", + "You started a call" : "Du startet et anrop", + "{actor} started a call" : "{actor} startet en samtale", + "{actor} joined the call" : "{actor} ble med i samtalen", + "You joined the call" : "Du ble med i samtalen", + "{actor} left the call" : "{actor} forlot samtalen", + "You left the call" : "Du forlot samtalen", + "{actor} unlocked the conversation" : "{actor} låste opp samtalen", + "You unlocked the conversation" : "Du låste opp samtalen", + "An administrator unlocked the conversation" : "En administrator låste opp samtalen", + "{actor} locked the conversation" : "{actor} låste samtalen", + "You locked the conversation" : "Du låste samtalen", + "An administrator locked the conversation" : "En administrator låste samtalen", + "{actor} limited the conversation to the current participants" : "{actor} begrenset samtalen til de nåværende deltakerne", + "You limited the conversation to the current participants" : "Du begrenset samtalen til de nåværende deltakerne", + "An administrator limited the conversation to the current participants" : "En administrator begrenset samtalen til de nåværende deltakerne", + "{actor} opened the conversation to registered users" : "{actor} åpnet samtalen for registrerte brukere", + "You opened the conversation to registered users" : "Du åpnet samtalen for registrerte brukere", + "An administrator opened the conversation to registered users" : "En administrator åpnet samtalen for registrerte brukere", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "You opened the conversation to registered users and users created with the Guests app" : "Du åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "An administrator opened the conversation to registered users and users created with the Guests app" : "En administrator åpnet samtalen for registrerte brukere og brukere opprettet med Guests-appen", + "The conversation is now open to everyone" : "Samtalen er nå åpen for alle", + "{actor} opened the conversation to everyone" : "{actor} åpnet samtalen for alle", + "You opened the conversation to everyone" : "Du åpnet samtalen for alle", + "{actor} restricted the conversation to moderators" : "{actor} begrenset samtalen til moderatorer", + "You restricted the conversation to moderators" : "Du begrenset samtalen til moderatorer", + "{actor} started breakout rooms" : "{actor} startet grupperom", + "You started breakout rooms" : "Du startet grupperom", + "{actor} stopped breakout rooms" : "{actor} stoppet grupperom", + "You stopped breakout rooms" : "Du stoppet grupperom", + "{actor} allowed guests" : "{actor} tillot gjester", + "You allowed guests" : "Du tillot gjester", + "An administrator allowed guests" : "En administrator tillot gjester", + "{actor} disallowed guests" : "{actor} nektet gjester", + "You disallowed guests" : "Du nektet gjester", + "An administrator disallowed guests" : "En administrator nektet gjester", + "{actor} set a password" : "{actor} satte et passord", + "You set a password" : "Du satte et passord", + "An administrator set a password" : "En administrator satte et passord", + "{actor} removed the password" : "{actor} fjernet passordet", + "You removed the password" : "Du fjernet passordet", + "An administrator removed the password" : "En administrator fjernet passordet", + "{actor} added {user}" : "{actor} delte med {user}", + "You joined the conversation" : "Du ble med i samtalen", + "{actor} joined the conversation" : "{actor} ble med i samtalen", + "You added {user}" : "Du delte med {user}", + "{actor} added you" : "{actor} la til deg", + "An administrator added you" : "En administrator la til deg", + "An administrator added {user}" : "En administrator delte med {user}", + "You left the conversation" : "Du forlot samtalen", + "{actor} left the conversation" : "{actor} forlot samtalen", + "{actor} removed {user}" : "{actor} fjernet {user}", + "You removed {user}" : "Du fjernet {user}", + "{actor} removed you" : "{actor} fjernet deg", + "An administrator removed you" : "En administrator fjernet deg", + "An administrator removed {user}" : "En administrator fjernet {user}", + "{actor} invited {federated_user}" : "{actor} inviterte {federated_user}", + "You invited {federated_user}" : "Du inviterte {federated_user}", + "You accepted the invitation" : "Du godtok invitasjonen", + "{actor} invited you" : "{actor} inviterte deg", + "An administrator invited you" : "En administrator inviterte deg", + "An administrator invited {federated_user}" : "En administrator inviterte {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} godtok invitasjonen", + "{actor} removed {federated_user}" : "{actor} fjernet {federated_user}", + "You removed {federated_user}" : "Du fjernet {federated_user}", + "You declined the invitation" : "Du avslo invitasjonen", + "An administrator removed {federated_user}" : "En administrator fjernet {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} avviste invitasjonen", + "{actor} added group {group}" : "{actor} la til gruppe {group}", + "You added group {group}" : "Du la til gruppen {group}", + "An administrator added group {group}" : "En administrator la til gruppen {group}", + "{actor} removed group {group}" : "{actor} fjernet gruppen {group}", + "You removed group {group}" : "Du fjernet gruppen {group}", + "An administrator removed group {group}" : "En administrator fjernet gruppen {group}", + "{actor} added team {circle}" : "{actor} la til laget {circle}", + "You added team {circle}" : "Du la til laget {circle}", + "An administrator added team {circle}" : "En administrator la til laget {circle}", + "{actor} removed team {circle}" : "{actor} fjernet laget {circle}", + "You removed team {circle}" : "Du fjernet laget {circle}", + "An administrator removed team {circle}" : "En administrator fjernet laget {circle}", + "{actor} added {phone}" : "{actor} la til {phone}", + "You added {phone}" : "Du la til {phone}", + "An administrator added {phone}" : "En administrator la til {phone}", + "{actor} removed {phone}" : "{actor} fjernet {phone}", + "You removed {phone}" : "Du fjernet {phone}", + "An administrator removed {phone}" : "En administrator fjernet {phone}", + "{actor} promoted {user} to moderator" : "{actor} forfremmet {user} til moderator", + "You promoted {user} to moderator" : "Du forfremmet {user} til moderator", + "{actor} promoted you to moderator" : "{actor} forfremmet deg til moderator", + "An administrator promoted you to moderator" : "En administrator forfremmet deg til moderator", + "An administrator promoted {user} to moderator" : "En administrator forfremmet {user} til moderator", + "{actor} demoted {user} from moderator" : "{actor} nedgraderte {user} fra moderator", + "You demoted {user} from moderator" : "Du nedgraderte {user} fra moderator", + "{actor} demoted you from moderator" : "{actor} nedgraderte deg fra moderator", + "An administrator demoted you from moderator" : "En administrator nedgraderte deg fra moderator", + "An administrator demoted {user} from moderator" : "En administrator nedgraderte {user} fra moderator", + "{actor} shared a file which is no longer available" : "{actor} delte en fil som ikke lenger er tilgjengelig", + "You shared a file which is no longer available" : "Du delte en fil som ikke lenger er tilgjengelig", + "File shares are currently not supported in federated conversations" : "Delte filressurser støttes for øyeblikket ikke i forente diskusjoner", + "The shared location is malformed" : "Den delte plasseringen er misformet", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} satte opp Matterbridge for å synkronisere denne samtalen med andre chatter", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du satte opp Matterbridge for å synkronisere denne samtalen med andre chatter", + "{actor} updated the Matterbridge configuration" : "{actor} oppdaterte konfigurasjonen av Matterbridge", + "You updated the Matterbridge configuration" : "Du oppdaterte konfigurasjonen av Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} fjernet konfigurasjonen av Matterbridge", + "You removed the Matterbridge configuration" : "Du fjernet konfigurasjonen av Matterbridge", + "{actor} started Matterbridge" : "{actor} startet Matterbridge", + "You started Matterbridge" : "Du startet Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stoppet Matterbridge", + "You stopped Matterbridge" : "Du stoppet Matterbridge", + "{actor} deleted a message" : "{actor} slettet en melding", + "You deleted a message" : "Du slettet en melding", + "{actor} edited a message" : "{actor} redigerte en melding", + "You edited a message" : "Du redigerte en melding", + "{actor} deleted a reaction" : "{actor} slettet en reaksjon", + "You deleted a reaction" : "Du slettet en reaksjon", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du satte utløpsdatoen for meldingen til %n uke","Du satte utløpsdatoen for meldingen til %n uker"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du satte utløpsdatoen for meldingen til %n dag","Du satte utløpsdatoen for meldingen til %n dager"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du satte utløpsdatoen for meldingen til %n time","Du satte utløpsdatoen for meldingen til %n timer"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du satte utløpsdatoen for meldingen til %n minutt","Du satte utløpsdatoen for meldingen til %n minutter"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} satte utløpsdatoen for meldingen til %n uke","{actor} satte utløpsdatoen for meldingen til %n uker"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} satte utløpsdatoen for meldingen til %n dag","{actor} satte utløpsdatoen for meldingen til %n dager"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} satte utløpsdatoen for meldingen til %n time","{actor} satte utløpsdatoen for meldingen til %n timer"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} satte utløpsdatoen for meldingen til %n minutt","{actor} satte utløpsdatoen for meldingen til %n minutter"], + "{actor} disabled message expiration" : "{actor} deaktiverte utløpsdato for melding", + "You disabled message expiration" : "Du deaktiverte utløpsdato for melding", + "{actor} cleared the history of the conversation" : "{actor} tømte samtalens historikk", + "You cleared the history of the conversation" : "Du tømte samtalens historikk", + "{actor} set the conversation picture" : "{actor} satte samtalebildet", + "You set the conversation picture" : "Du satte samtalebildet", + "{actor} removed the conversation picture" : "{actor} fjernet samtalebildet", + "You removed the conversation picture" : "Du fjernet samtalebildet", + "{actor} ended the poll {poll}" : "{actor} avsluttet avstemningen {poll}", + "You ended the poll {poll}" : "Du avsluttet avstemningen {poll}", + "{actor} started the video recording" : "{actor} startet videoopptaket", + "You started the video recording" : "Du startet videoopptaket", + "{actor} stopped the video recording" : "{actor} stoppet videoopptaket", + "You stopped the video recording" : "Du stoppet videoopptaket", + "{actor} started the audio recording" : "{actor} startet lydopptaket", + "You started the audio recording" : "Du startet lydopptaket", + "{actor} stopped the audio recording" : "{actor} stoppet lydopptaket", + "You stopped the audio recording" : "Du stoppet lydopptaket", + "The recording failed" : "Opptaket feilet", + "Someone voted on the poll {poll}" : "Noen stemte på avstemningen {poll}", + "Message deleted by author" : "Melding slettet av forfatteren", + "Message deleted by {actor}" : "Melding slettet av {actor}", + "Message deleted by you" : "Melding slettet av deg", + "Deleted user" : "Slettet bruker", + "Unknown number" : "Ukjent nummer", + "Administration" : "Administrasjon", + "System" : "System", + "%s (guest)" : "%s (gjest)", + "Missed call" : "Tapt anrop", + "Call ended (Duration {duration})" : "Samtale avsluttet (Varighet {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Samtalen ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} avsluttet samtale (Varighet {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Samtalen med %n gjest ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})","Samtalen med %n gjester ble avsluttet da den nådde maksimal samtalevarighet (Varighet {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Samtale med %n gjest avsluttet (Varighet {duration})","Samtale med %n gjester avsluttet (Varighet {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} avsluttet samtalen med %n gjest (varighet {duration})","{actor} avsluttet samtalen med %n gjester (varighet {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} avsluttet samtalen med {user1} (varighet {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} avsluttet samtalen med {user1} og {user2} (varighet {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2} og {user3} (varighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2}, {user3} og {user4} (varighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} avsluttet samtalen med {user1}, {user2}, {user3}, {user4} og {user5} (varighet {duration})", + "Message of {user} in {conversation}" : "Melding om {user} i {conversation}", + "Message of {user}" : "Melding om {user}", + "Message of a deleted user in {conversation}" : "Message om en slettet bruker i {conversation}", + "Talk conversations" : "Talk-samtaler", + "Talk to %s" : "Snakk med %s", + "An error occurred. Please contact your administrator." : "Det oppstod en feil, vennligst kontakt administratoren din.", + "Storage quota exceeded" : "Overskredet lagringskvote", + "File not found" : "Finner ikke filen", + "File is not shared, or shared but not with the user" : "Filen er ikke delt, eller delt, men ikke med brukeren", + "No account available to delete." : "Ingen konto tilgjengelig for sletting.", + "Poll" : "Avstemning", + "No image file provided" : "Ingen bildefil angitt", + "File is too big" : "Filen er for stor", + "Invalid file provided" : "Ugyldig fil oppgitt", + "Invalid image" : "Ugyldig bilde", + "Unknown filetype" : "Ukjent filtype", + "Talk mentions" : "Talk nevner", + "More conversations" : "Flere samtaler", + "Say hi to your friends and colleagues!" : "Si hei til venner og kolleger!", + "No unread mentions" : "Ingen uleste nevner", + "Call in progress" : "Samtale pågår", + "You were mentioned" : "Du ble nevnt", + "Write to conversation" : "Skrive til samtalen", + "Writes event information into a conversation of your choice" : "Skriver hendelsesinformasjon til en diskusjon etter eget valg", + "Conversation invitation" : "Samtale invitasjon", + "Description" : "Beskrivelse", + "You can also dial-in via phone with the following details" : "Du kan også ringe via telefon med følgende detaljer", + "Dial-in information" : "Ringe informasjon", + "Meeting ID" : "Møte ID", + "Your PIN" : "Din PIN", + "Meeting" : "Møte", + "Password request: %s" : "Forespørsel om passord: %s", + "Private conversation" : "Privat samtale", + "Deleted user (%s)" : "Slettet bruker (%s)", + "Failed to upload call recording" : "Opplasting av samtaleopptak feilet", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Opptaksserveren kunne ikke laste opp opptak av samtale {call}. Vennligst ta kontakt med administrasjonen.", + "Share to chat" : "Del til chat", + "Dismiss notification" : "Ingen varsel", + "Call recording now available" : "Opptak av samtale er nå tilgjengelig", + "The recording for the call in {call} was uploaded to {file}." : "Opptaket for samtalen i {call} ble lastet opp til {file}.", + "Transcript now available" : "Transkripsjon er nå tilgjengelig", + "The transcript for the call in {call} was uploaded to {file}." : "Transkripsjonen for samtalen i {call} ble lastet opp til {file}.", + "Failed to transcript call recording" : "Transkript av samtaleopptak feilet", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveren kunne ikke transkribere opptaket i {file} for samtalen i {call}. Vennligst ta kontakt med administrasjonen.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} inviterte deg å bli med {roomName} på {remoteServer}", + "Accept" : "Aksepter", + "Decline" : "Avslå", + "{user1} invited you to a federated conversation" : "{user1} inviterte deg til en sammenknyttet samtale", + "New message" : "Ny melding", + "Reminder" : "Påminnelse", + "Reminder: You in {call}" : "Påminnelse: du i {call}", + "Reminder: {user} in {call}" : "Påminnelse: {user} i {call}", + "Reminder: Deleted user in {call}" : "Påminnelse: Slettet bruker i {call}", + "Reminder: {guest} (guest) in {call}" : "Påminnelse: {guest} (gjest) i {call}", + "Reminder: Guest in {call}" : "Påminnelse: gjest i {call}", + "{user} reacted with {reaction}" : "{user} reagerte med {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagerte med {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "Slettet bruker reagerte med {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gjest) reagerte med {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "Gjest reagerte med {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Slett bruker i {call}", + "{guest} (guest) in {call}" : "{guest} (gjest) i {call}", + "Guest in {call}" : "Gjest i {call}", + "{user} sent you a private message" : "{user} sente deg en privat melding", + "{user} sent a message in conversation {call}" : "{user} sente en melding i samtalen {call}", + "A deleted user sent a message in conversation {call}" : "En slettet bruker sende en melding i samtale {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gjest) sendte en melding i samtale {call}", + "A guest sent a message in conversation {call}" : "En gjest sendte en melding i samtale {call}", + "{user} replied to your private message" : "{user} svarte på din private melding", + "{user} replied to your message in conversation {call}" : "{user} svarte på din melding i samtale {call}", + "A deleted user replied to your message in conversation {call}" : "En slettet bruker svarte på din melding i samtale {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gjest) svarte på din melding i samtale {call}", + "A guest replied to your message in conversation {call}" : "En gjest svarte på din melding i samtale {call}", + "Reminder: You in private conversation {call}" : "Påminnelse: du i privat samtale {call}", + "Reminder: A deleted user in private conversation {call}" : "Påminnelse: en slettet bruker i privat samtale {call}", + "Reminder: {user} in private conversation" : "Påminnelse: {user} i privat samtale", + "Reminder: You in conversation {call}" : "Påminnelse: du i samtale {call}", + "Reminder: {user} in conversation {call}" : "Påminnelse: {user} i samtale {call}", + "Reminder: A deleted user in conversation {call}" : "Påminnelse: en slettet bruker i samtale {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Påminnelse: {guest} (gjest) i samtale {call}", + "Reminder: A guest in conversation {call}" : "Påminnelse: en gjest i samtale {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagerte med {reaction} på din private melding", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagerte med {reaction} på din melding i samtale {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "En slettet bruker reagerte med {reaction} på din melding i samtale {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gjest) reagerte med {reaction} på din melding i samtale {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "En gjest reagerte med {reaction} på din melding i samtale {call}", + "{user} mentioned you in a private conversation" : "{user} nevnte deg i en privat samtale", + "{user} mentioned group {group} in conversation {call}" : "{user} nevnte gruppe {group} i samtale {call}", + "{user} mentioned everyone in conversation {call}" : "{user} nevnte alle i samtale {call}", + "{user} mentioned you in conversation {call}" : "{user} nevnte deg i samtale {call}", + "A deleted user mentioned group {group} in conversation {call}" : "En slettet bruker nevnte gruppe {group} i samtale {call}", + "A deleted user mentioned everyone in conversation {call}" : "En slettet bruker nevnte alle i samtale {call}", + "A deleted user mentioned you in conversation {call}" : "En slettet bruker nevnte deg i samtale {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gjest) nevnte gruppe {group} i samtale {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gjest) nevnte alle i samtale {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gjest) nevnte deg i samtale {call}", + "A guest mentioned group {group} in conversation {call}" : "En gjest nevnte gruppe {group} i samtale {call}", + "A guest mentioned everyone in conversation {call}" : "En gjest nevnte alle i samtale {call}", + "A guest mentioned you in conversation {call}" : "En gjest nevnte deg i samtale {call}", + "View message" : "Se melding", + "Dismiss reminder" : "Avvis påminnelse", + "View chat" : "Vis samtale", + "{user} invited you to a group conversation: {call}" : "{user} inviterte deg til en gruppesamtale: {call}", + "Join call" : "Ta del i samtale", + "Answer call" : "Svar anrop", + "{user} would like to talk with you" : "{user} ønsker å snakke med deg", + "Call back" : "Ring tilbake", + "You missed a call from {user}" : "Du har et tapt anrop fra {user}", + "You missed a phone call from {call}" : "Du har et tapt telefonanrop fra {call}", + "A group call has started in {call}" : "En gruppesamtale har startet i {call}", + "You missed a group call in {call}" : "Du gikk glipp av en gruppesamtale i {call}", + "{email} is requesting the password to access {file}" : "{email} ber om passordet for å få tilgang til {file}", + "{email} tried to request the password to access {file}" : "{email} prøvde å be om passordet for å få tilgang til {file}", + "Someone is requesting the password to access {file}" : "Noen ber om passordet for å få tilgang til {file}", + "Someone tried to request the password to access {file}" : "Noen prøvde å be om passordet for å få tilgang til {file}", + "Open settings" : "Åpne innstillinger", + "Hosted signaling server added" : "Vertsbasert signalserver lagt til", + "The hosted signaling server is now configured and will be used." : "Den vertsbaserte signalserveren er nå konfigurert og vil bli brukt.", + "Hosted signaling server removed" : "Vertsbasert signalserver fjernet", + "The hosted signaling server was removed and will not be used anymore." : "Den vertsbaserte signalserveren ble fjernet og vil ikke bli brukt lenger.", + "Hosted signaling server changed" : "Vertsbasert signalserver endret", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Den vertsbaserte signalserverkontoen har endret statusen fra \"{oldstatus}\" til \"{newstatus}\".", + "pending" : "venter", + "active" : "aktiv", + "expired" : "utløpt", + "blocked" : "blokkert", + "error" : "feil", + "The certificate of {host} expires in {days} days" : "Sertifikatet til {host} utløper om {days} dager", + "The certificate of {host} expired" : "Sertifikatet til {host} er utløpt", + "Contact via Talk" : "Kontakt via Talk", + "Open Talk" : "Åpne Talk", + "Default" : "Standard", + "Presentation" : "Presentasjon", + "Conversations" : "Samtaler", + "Messages in current conversation" : "Meldinger i gjeldende samtale", + "{user}" : "{bruker}", + "Messages" : "Meldinger", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Meldinger i andre samtaler", + "One-to-one rooms always need to show the other users avatar" : "En-til-en-rom må alltid vise den andre brukerens avatar", + "Invalid emoji character" : "Ugyldig emoji-karakter", + "Invalid background color" : "Ugyldig bakgrunnsfarge", + "Avatar image is not square" : "Avatarbilde er ikke firkantet", + "Room {number}" : "Rom {number}", + "Other" : "Annet", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Kunne ikke be om prøveversjon fordi prøveserveren ikke er tilgjengelig. Vennligst prøv igjen senere.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Det er et problem med autentiseringen av denne forekomsten. Kanskje den ikke er tilgjengelig fra utsiden for å bekrefte dens nettadresse.", + "Something unexpected happened." : "Noe uventet inntraff.", + "The URL is invalid." : "Nettadressen er ugyldig.", + "An HTTPS URL is required." : "En HTTPS URL er påkrevd.", + "The email address is invalid." : "Epostadressen er ugyldig.", + "The language is invalid." : "Angitt språk er ugyldig.", + "The country is invalid." : "Angitt land er ugyldig", + "There is a problem with the request of the trial. Please check your logs for further information." : "Det er et problem med forespørselen om prøveversjonen. Vennligst sjekk loggene dine for mer informasjon.", + "Too many requests are send from your servers address. Please try again later." : "For mange forespørsler sendes fra serveradressen din. Vennligst prøv igjen senere.", + "There is already a trial registered for this Nextcloud instance." : "Det er allerede registrert en prøveversjon for denne Nextcloud-forekomsten.", + "Something unexpected happened. Please try again later." : "Noe uventet inntraff. Vennligst prøv igjen senere.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Kunne ikke be om prøveversjon fordi prøveserveren oppførte seg feil. Vennligst prøv igjen senere.", + "Trial requested but failed to get account information. Please check back later." : "Prøveversjonen ble bedt om, men fikk ikke kontoinformasjon. Vennligst kom tilbake senere.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Det er et problem med autentiseringen av denne forespørselen. Kanskje den ikke er tilgjengelig fra utsiden for å bekrefte dens nettadresse.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Kunne ikke hente kontoinformasjon fordi prøveserveren oppførte seg feil. Vennligst kom tilbake senere.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Det har oppstått et problem med å hente kontoinformasjonen. Vennligst sjekk loggene dine for mer informasjon.", + "There is no such account registered." : "Det er ingen slik konto registrert.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Kan ikke hente kontoinformasjon fordi prøveserveren ikke kan nås. Vennligst kom tilbake senere.", + "Deleting the hosted signaling server account failed. Please check back later." : "Sletting av den vertsbaserte signalserverkontoen feilet. Vennligst kom tilbake senere.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Kunne ikke slette kontoen fordi prøveserveren oppførte seg feil. Vennligst kom tilbake senere.", + "There is a problem with deleting the account. Please check your logs for further information." : "Det er et problem med å slette kontoen. Vennligst sjekk loggene dine for mer informasjon.", + "Too many requests are sent from your servers address. Please try again later." : "For mange forespørsler sendes fra serveradressen din. Vennligst prøv igjen senere.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Kan ikke slette kontoen fordi prøveserveren ikke kan nås. Vennligst kom tilbake senere.", + "Note to self" : "Notat til meg selv", + "A place for your private notes, thoughts and ideas" : "Et sted for private notater, tanker og ideer", + "Andorra" : "Andorra", + "United Arab Emirates" : "De forente arabiske emirater", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua og Barbuda", + "Anguilla" : "Angola", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikansk Samoa", + "Austria" : "Østerike", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia og Hersegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint-Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius og Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvetøya", + "Botswana" : "Botswana", + "Belarus" : "Hviterusland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosøyene", + "Congo, the Democratic Republic of the" : "Kongo (den demokratiske republikk)", + "Central African Republic" : "Den sentralafrikanske republikk", + "Congo" : "Kongo", + "Switzerland" : "Sveits", + "Côte d'Ivoire" : "Elfenbenskysten", + "Cook Islands" : "Cookøyene", + "Chile" : "Chile", + "Cameroon" : "Kameron", + "China" : "Kina", + "Colombia" : "Kolombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapp Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmasøya", + "Cyprus" : "Kypros", + "Czechia" : "Tsjekkia", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Den dominikanske republikk", + "Algeria" : "Algeri", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypt", + "Western Sahara" : "Vest-Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spania", + "Ethiopia" : "Etiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandsøyene (Malvinas)", + "Micronesia, Federated States of" : "Mikronesiaføderasjonen", + "Faroe Islands" : "Færøyene", + "France" : "Frankrike", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Storbritannia og Nord-Irland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Fransk Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grønland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatorial-Guinea", + "Greece" : "Hellas", + "South Georgia and the South Sandwich Islands" : "Sør-Georgia og Sør-Sandwichøyene", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard- og McDonaldøyene", + "Honduras" : "Honduras", + "Croatia" : "Kroatia", + "Haiti" : "Haiti", + "Hungary" : "Ungarn", + "Indonesia" : "Indonesia", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "Det britiske territoriet i Indiahavet", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Island", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Kambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Komorene", + "Saint Kitts and Nevis" : "Saint Kitts og Nevis", + "Korea, Democratic People's Republic of" : "Den demokratiske folkerepublikken Korea", + "Korea, Republic of" : "Republikken Korea", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (Fransk del)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshalløyene", + "North Macedonia" : "Nord-Makedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Nord-Marianene", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldivene", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mosambik", + "Namibia" : "Namibia", + "New Caledonia" : "Ny-Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolkøya", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransk Polynesia", + "Papua New Guinea" : "Papua Ny-Guinea", + "Philippines" : "Filipinene", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre og Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russland", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychellene ", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension og Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard og Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sør Sudan", + "Sao Tome and Principe" : "Sao Tome og Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Nederlandsk del)", + "Syrian Arab Republic" : "Syria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- og Caicosøyene", + "Chad" : "Chad", + "French Southern Territories" : "De franske sørterritorier", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Tyrkia", + "Trinidad and Tobago" : "Trinidad og Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "USAs ytre småøyer", + "United States of America" : "USA", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Den hellige stol", + "Saint Vincent and the Grenadines" : "Saint Vincent og Grenadinene", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Jomfruøyene, engelsk", + "Virgin Islands, U.S." : "Jomfruøyene, US", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis- og Futunaøyene", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sør-Afrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Sammenknytting", + "High-performance backend" : "Backend med høy ytelse", + "Error: Cannot connect to server" : "Feil: kan ikke koble til server", + "Error: Server did not respond with proper JSON" : "Feil: serveren svarte ikke med riktig JSON", + "Error: Certificate expired" : "Feil: sertifikat utløpt", + "Could not get version" : "Kunne ikke hente versjon", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Feil: kjørende versjon: {versjon}; serveren må oppdateres for å være kompatibel med denne versjonen av Talk.", + "Error: Server responded with: {error}" : "Feil: server svarte med: {error}", + "Error: Unknown error occurred" : "Feil: ukjent feil oppstod", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Advarsel: kjørende versjon: {versjon}; server støtter ikke alle funksjonene i denne Talk-versjonen, mangler funksjoner: {funksjoner}.", + "Recording backend" : "Opptaks-backend", + "SIP configuration" : "SIP innstillinger", + "Invalid date, date format must be YYYY-MM-DD" : "Feil dato, dato må være i formatet YYYY-MM-DD", + "Conversation not found" : "Samtalen ble ikke funnet", + "Path is already shared with this conversation" : "Stien er allerede delt med denne samtalen", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video og lydkonferanser ved hjelp av WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video og lydkonferanser ved hjelp av WebRTC\n\n* 💬 **Chat** Nextcloud Talk leveres med en enkel tekstchat, slik at du kan dele eller laste opp filer fra Nextcloud Filer-appen eller den lokale enheten og nevne andre deltakere.\n* 👥 **Private, gruppe, offentlige og passordbeskyttede samtaler!** Inviter noen, en hel gruppe eller send en offentlig kobling for å invitere til en samtale.\n* 🌐 **Samlede chatter** Chat med andre Nextcloud-brukere på deres servere\n* 💻 **Skjermdeling!** Del skjermen din med deltakerne i samtalen.\n* 🚀 **Integrasjon med andre Nextcloud-apper** som Filer, Kalender, Brukerstatus, Dashboard, Flyt, Kart, Smart picker, Kontakter, Deck, og mange flere.\n* 🌉 **Synkroniser med andre chat-løsninger** Med [Matterbridge](https://github.com/42wim/matterbridge/) blir integrert i Talk, du kan enkelt synkronisere mange andre chat-løsninger til Nextcloud Talk og omvendt.", + "Leave call" : "Forlat samtalen", + "Navigating away from the page will leave the call in {conversation}" : "Navigering bort fra siden vil forlate samtalen i {conversation}", + "Stay in call" : "Forbli i samtalen", + "Discuss this file" : "Diskuter denne filen", + "Share this file with others to discuss it" : "Del denne filen med andre og diskuter den", + "Share this file" : "Del denne filen", + "Join conversation" : "Delta i samtale", + "This conversation is password-protected." : "Denne samtalen er passordbeskyttet", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Vi har oppdaget flere ugyldige passordforsøk fra IP-adressen din. Derfor strupes neste forsøk opptil 30 sekunder.", + "The password is wrong. Try again." : "Feil passord. Prøv igjen.", + "Password" : "Passord", + "Submit" : "Send inn", + "Error requesting the password." : "Feil ved forespørsel om passordet.", + "Request password" : "Forespør om passord", + "This conversation has ended" : "Denne samtalen er avsluttet", + "Error occurred when joining the conversation" : "Det oppstod en feil da du ble med i samtalen", + "Close Talk sidebar" : "Lukk Talk-sidefeltet", + "Open Talk sidebar" : "Åpne Talk-sidefeltet", + "Everyone" : "Alle", + "Users and moderators" : "Brukere og moderatorer", + "Moderators only" : "Kun moderatorer", + "Disable calls" : "Deaktiver anrop", + "Save changes" : "Lagre endringer", + "Saving …" : "Lagrer...", + "Saved!" : "Lagret!", + "Limit to groups" : "Begrens til grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Når minst én gruppe er valgt, kan bare personer i de oppførte gruppene delta i samtaler.", + "Guests can still join public conversations." : "Gjester kan fortsatt delta i offentlige samtaler.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Brukere som ikke kan bruke Talk lenger, vil fortsatt bli oppført som deltakere i tidligere samtaler, og chatmeldingene deres vil også bli beholdt.", + "Limit using Talk" : "Begrens bruk av Talk", + "Limit creating a public and group conversation" : "Begrens oppretting av en offentlig- og gruppesamtale", + "Limit creating conversations" : "Begrens oppretting av samtaler", + "Limit starting a call" : "Begrens å starte et anrop", + "Limit starting calls" : "Begrens å starte flere anrop", + "When a call has started, everyone with access to the conversation can join the call." : "Når en samtale har startet, kan alle med tilgang til samtalen bli med i samtalen.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Følgende roboter er installert på denne serveren. I dokumentasjonen finner du detaljer om hvordan du {linkstart1}bygger din egen bot{linkend} eller en {linkstart2}-liste over roboter{linkend} som skal aktiveres på serveren din.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Ingen roboter er installert på denne serveren. I dokumentasjonen finner du detaljer om hvordan du {linkstart1}bygger din egen bot{linkend} eller en {linkstart2}-liste over roboter{linkend} som skal aktiveres på serveren din.", + "Description is not provided" : "Beskrivelse er ikke gitt", + "Locked for moderators" : "Låst for moderatorer", + "Enabled" : "Aktivert", + "Disabled" : "Deaktivert", + "Bots settings" : "Innstillinger for roboter", + "State" : "Tilstand", + "Name" : "Navn", + "Last error" : "Siste feil", + "Total errors count" : "Totalt antall feil", + "Find more bots" : "Finn flere roboter", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Klarerte servere kan konfigureres på {linkstart}siden med innstillinger for deling{linkedin}.", + "Beta" : "Beta", + "Enable Federation in Talk app" : "Aktiver Federation i Talk-appen", + "Permissions" : "Rettigheter", + "Allow users to be invited to federated conversations" : "Tillat brukere å bli invitert til sammenknyttede samtaler", + "Allow users to invite federated users into conversation" : "Tillat brukere å invitere sammenknyttede brukere til samtale", + "Only allow to federate with trusted servers" : "Tillat bare å forene med pålitelige servere", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Når minst én gruppe er valgt, kan bare personer i de oppførte gruppene invitere sammenknyttede brukere til samtaler.", + "Groups allowed to invite federated users" : "Grupper som har tillatelse til å invitere sammenknyttede brukere", + "Select groups …" : "Velg grupper...", + "All messages" : "Alle meldinger", + "@-mentions only" : "kun @-nevner", + "Off" : "ett kvarter", + "General settings" : "Generelle innstillinger", + "Default notification settings" : "Standard varslingsinnstillinger", + "Default group notification" : "Standard gruppevarsling", + "Default group notification for new groups" : "Standard gruppevarsling for nye grupper", + "Integration into other apps" : "Integrering i andre apper", + "Allow conversations on files" : "Tillat samtaler på Files", + "Allow conversations on public shares for files" : "Tillat samtaler på delte offentlige ressurser for Files ", + "Enable encryption" : "Aktiver kryptering", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Ved å klikke på knappen over sendes informasjonen i skjemaet til serverne til Struktur AG. Du finner mer informasjon på {linkstart}spreed.eu{linkend}.", + "Pending" : "Venter", + "Error" : "Feil", + "Blocked" : "Blokkert", + "Active" : "Aktiv", + "Expired" : "Utløpt", + "Never" : "Aldri", + "The trial could not be requested. Please try again later." : "Prøveversjonen kunne ikke bes om. Vennligst forsøk igjen senere.", + "The account could not be deleted. Please try again later." : "Kontoen kunne ikke slettes. Vennligst forsøk igjen senere.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Vår partner Struktur AG leverer en tjeneste der en vertsbasert signalserver kan forespørres. For dette trenger du bare å fylle ut skjemaet nedenfor og din Nextcloud vil be om det. Når serveren er satt opp for deg, fylles legitimasjonen automatisk. Dette vil overskrive de eksisterende signalserverinnstillingene.", + "URL of this Nextcloud instance" : "Nettadressen til denne Nextcloud-forekomsten", + "Full name of the user requesting the trial" : "Fullt navn på brukeren som ber om prøveversjonen", + "Email of the user" : "E-post til brukeren", + "Language" : "Språk", + "Country" : "Land", + "Request signaling server trial" : "Be om prøveversjon av signalserver", + "You can see the current status of your hosted signaling server in the following table." : "Du kan se gjeldende status for den vertsbaserte signalserveren i tabellen nedenfor.", + "Status" : "Status", + "Created at" : "Opprettet den", + "Expires at" : "Utløper", + "Limits" : "Grenser", + "Yes" : "Ja", + "No" : "Nei", + "Delete the signaling server account" : "Slett signalserverkontoen", + "_%n user_::_%n users_" : ["%n bruker","%n brukere"], + "Installed version: {version}" : "Installert versjon: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kan installere Matterbridge for å koble Nextcloud Talk til noen andre tjenester, besøk deres {linkstart1}GitHub-side{linkend} for mer informasjon. Det kan ta litt tid å laste ned og installere appen. I tilfelle det blir tidsavbrutt, kan du installere det manuelt fra {linkstart2}Nextcloud App Store {linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge-binær ble ikke funnet eller kunne ikke utføres.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kan også angi stien til Matterbridge-binæren manuelt via konfigurasjonen. Se {linkstart}dokumentasjonen for Matterbridge-integrering{linkend} for mer informasjon.", + "Downloading …" : "Laster ned …", + "Install Talk Matterbridge" : "Installer Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Det oppstod en feil under installasjon av Matterbridge-appen", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Det oppstod en feil under installasjon av Talk Matterbridge. Vennligst installer det manuelt.", + "Failed to execute Matterbridge binary." : "Utførelse av Matterbridge-binær feilet.", + "Matterbridge integration" : "Integrasjon av Matterbridge", + "Enable Matterbridge integration" : "Aktiver integrasjon av Matterbridge", + "Status: Checking connection" : "Status: Sjekker tilkobling", + "OK: Running version: {version}" : "OK: kjører versjon: {version}", + "Error: Server seems to be a Signaling server" : "Feil: serveren ser ut til å være en signalserver", + "Recording backend URL" : "Nettadresse til opptaks-backend", + "Validate SSL certificate" : "Bekreft SSL-sertifikat", + "Delete this server" : "Slett denne serveren", + "Test this server" : "Test denne serveren", + "Disabled for all calls" : "Deaktivert for alle anrop", + "Enabled for all calls" : "Aktivert for alle anrop", + "Configurable on conversation level by moderators" : "Kan konfigureres på samtalenivå av moderatorer", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-innstillingene \"upload_max_filesize\" eller \"post_max_size\" vil bare tillate å laste opp filer opptil {maxUpload}.", + "Recording backend settings saved" : "Innstillingene for opptaks-backend lagret", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorer kan aktivere samtykke på samtalenivå. Samtykket som skal registreres vil være nødvendig for hver deltaker før han blir med i hver samtale i denne samtalen.", + "The consent to be recorded will be required for each participant before joining every call." : "Samtykket som skal registreres vil være nødvendig for hver deltaker før du blir med i hver samtale.", + "The consent to be recorded is not required." : "Samtykket som skal registreres er ikke nødvendig.", + "Add a new recording backend server" : "Legg til en ny opptaks-backend server", + "Shared secret" : "Delt hemmelighet", + "Recording consent" : "Samtykke til opptak", + "SIP configuration saved!" : "SIP-konfigurasjon lagret!", + "Enable SIP Dial-out option" : "Aktiver SIP-utringningsalternativ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalserveren må oppdateres til støttet SIP-utringningsfunksjon.", + "Restrict SIP configuration" : "Begrens SIP innstillinger", + "Enable SIP configuration" : "Aktiver SIP innstillinger", + "Only users of the following groups can enable SIP in conversations they moderate" : "Bare brukere av følgende grupper kan aktivere SIP i samtaler de modererer", + "Phone number (Country)" : "Telefonnumer (fast)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Denne informasjonen sendes i e-postinvitasjoner, samt vises i sidefeltet til alle deltakere.", + "Error code" : "Feilkode", + "High-performance backend URL" : "Nettadresse for backend med høy ytelse", + "High-performance backend settings saved" : "Backend-innstillinger med høy ytelse lagret", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "Serveradressen er ugyldig", + "STUN settings saved" : "STUN-innstillinger lagret", + "STUN servers" : "STUN-server", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server brukes til å fastsette den offentlige IP-adressen for deltagere bak en ruter.", + "Add a new STUN server" : "Legg til en ny STUN-server", + "{schema} scheme must be used with a domain" : "{schema} skjema må brukes med et domene", + "{option1} and {option2}" : "{option1} og {option2}", + "{option} only" : "kun {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: vellykkede ICE-kandidater returnert av TURN-serveren", + "Error: No working ICE candidates returned by the TURN server" : "Feil: ingen fungerende ICE-kandidater returnert av TURN-serveren", + "Testing whether the TURN server returns ICE candidates" : "Tester om TURN-serveren returnerer ICE-kandidater", + "TURN server schemes" : "TURN-serverskjemaer", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN-server hemmelighet", + "TURN server protocols" : "TURN-serverprotokoller", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "En TURN-server brukes til å proxy-tjene trafikken fra deltakere bak en brannmur. Hvis individuelle deltakere ikke kan koble til andre, er det mest sannsynlig nødvendig med en TURN-server. Se {linkstart}denne dokumentasjonen{linkend} for installasjonsinstruksjoner.", + "TURN settings saved" : "TURN-innstillinger lagret", + "TURN servers" : "TURN-servere", + "Add a new TURN server" : "Legg til en ny TURN-server", + "Failed" : "Mislyktes", + "OK" : "OK", + "Checking …" : "Sjekker…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Feilet: WebAssembly er deaktivert eller støttes ikke i denne nettleseren. Vennligst aktiver WebAssembly eller bruk en nettleser med støtte for den for å gjøre sjekken.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Feilet: \".wasm\"- og .tflite\"-filer ble ikke returnert på riktig måte av webserveren. Sjekk avsnittet \"Systemkrav\" i Talk-dokumentasjonen.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- og .tflite\"-filer ble returnert på riktig måte av webserveren.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det ser ut til at PHP- og Apache-konfigurasjonen ikke er kompatibel. Vær oppmerksom på at PHP bare kan brukes med MPM_PREFORK-modulen, og PHP-FPM kan bare brukes med MPM_EVENT-modulen.", + "Web server setup checks" : "Kontroller for oppsett av webserver", + "Files required for virtual background can be loaded" : "Filer som kreves for virtuell bakgrunn kan lastes inn", + "Federated user" : "Forent bruker", + "Assign participants to rooms" : "Tildel deltakere til rom", + "Configure breakout rooms" : "Konfigurer grupperom", + "Number of breakout rooms" : "Antall grupperom", + "You can create from 1 to 20 breakout rooms." : "Du kan opprette fra 1 til 20 grupperom.", + "Assignment method" : "Tildelingsmetode", + "Automatically assign participants" : "Tildel deltakere automatisk", + "Manually assign participants" : "Tildel deltakere manuelt", + "Allow participants to choose" : "La deltakerne velge", + "Create rooms" : "Opprett rom", + "Confirm" : "Bekreft", + "Create breakout rooms" : "Opprett grupperom", + "Reset" : "Tilbakestill", + "Delete breakout rooms" : "Slett grupperom", + "Room {roomNumber}" : "Rom {roomNumber}", + "Current breakout rooms and settings will be lost" : "Gjeldende grupperom og innstillinger vil gå tapt", + "Cancel" : "Avbryt", + "Unassigned participants" : "Ikke-tilordnede deltakere", + "Back" : "Tilbake", + "Assign" : "Tildel", + "Add participant \"{user}\"" : "Legg til deltaker \"{user}\"", + "Now" : "Nå", + "Loading …" : "Laster ...", + "From" : "Fra", + "To" : "Til", + "Calendar" : "Kalender", + "Attendees" : "Deltakere", + "Save" : "Lagre", + "Search participants" : "Søk etter deltakere", + "No results" : "Ingen resultater", + "Done" : "Ferdig", + "Raise hand" : "Løft hånden", + "Raise hand (R)" : "Rekk opp hånden (R)", + "Lower hand" : "Senk hånden", + "Lower hand (R)" : "Send hånden (R)", + "Exit full screen (F)" : "Avslutt fullskjerm (F)", + "Full screen (F)" : "Fullskjerm (F)", + "Speaker view" : "Høyttalervisning", + "Grid view" : "Rutenett-visning", + "Recording consent is required" : "Samtykke til opptak kreves", + "This conversation is read-only" : "Denne samtalen er skrivebeskyttet", + "Connection failed" : "Tilkobling feilet", + "Reload" : "Last på nytt", + "{nickName} raised their hand." : "{nickName} rakte opp hånden.", + "A participant raised their hand." : "En deltaker løftet hånden.", + "Collapse stripe" : "Skjul stripe", + "Expand stripe" : "Utvid stripe", + "Previous page of videos" : "Forrige side med videoer", + "Next page of videos" : "Neste side med videoer", + "Connecting …" : "Kobler til...", + "Calling …" : "Ringer...", + "Waiting for {user} to join the call" : "Venter på at {user} skal bli med i samtalen", + "Waiting for others to join the call …" : "Venter på at andre blir med i samtalen…", + "You can invite others in the participant tab of the sidebar" : "Du kan invitere andre fra deltagerfanen i sidepanel", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan invitere andre i deltagerfanen av sidepanel eller dele denne lenke for å invitere andre!", + "Share this link to invite others!" : "Klikk denne lenken for å invitere andre.", + "Copy link" : "Kopier lenke", + "You are not allowed to enable audio" : "Du har ikke lov til å aktivere lyd", + "No audio. Click to select device" : "Ingen lyd. Klikk for å velge enhet.", + "Mute audio" : "Slå av lyd", + "Mute audio (M)" : "Demp lyd (M)", + "Unmute audio" : "Slå på lyd", + "Unmute audio (M)" : "Slå på lyden (M)", + "None" : "Ingen", + "Access to camera was denied" : "Tilgang til kamera ble nektet", + "Error while accessing camera: It is likely in use by another program" : "Feil under tilgang til kamera: det er sannsynligvis i bruk av et annet program.", + "Error while accessing camera" : "Feil under tilgang til kameraet", + "You have been muted by a moderator" : "En moderator har dempet deg", + "Hide presenter video" : "Skjul presentatørvideo", + "You are not allowed to enable video" : "Du har ikke lov til å aktivere video", + "No video. Click to select device" : "Ingen video. Klikk for å velge enhet.", + "Disable video" : "Skru av video", + "Disable video (V)" : "Deaktiver video (V)", + "Enable video" : "Skru på video", + "Enable video (V)" : "Aktiver video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video (V) – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Aktiver video – tilkoblingen din blir kort avbrutt når du aktiverer videoen for første gang", + "Show presenter" : "Vis presentatør", + "You" : "Du", + "Mute" : "Dempe", + "Muted" : "Dempet", + "Show screen" : "Vis skjerm", + "Stop following" : "Slutt å følge", + "Connection could not be established …" : "Forbindelsen kunne ikke opprettes...", + "Connection was lost and could not be re-established …" : "Forbindelsen ble brutt og kunne ikke gjenopprettes…", + "Connection could not be established. Trying again …" : "Forbindelsen kunne ikke opprettes. Forsøker igjen...", + "Connection lost. Trying to reconnect …" : "Forbindelsen er brutt. Prøver å koble til igjen…", + "Connection problems …" : "Tilkoblingsproblemer...", + "Collapse" : "Skjul", + "Expand" : "Ekspander", + "You need to be logged in to upload files" : "Du må være på logget for å laste opp filer", + "Drop your files to upload" : "Dropp filer for å laste opp", + "Conversation messages" : "Samtale meldinger", + "Scroll to bottom" : "Rull til bunnen", + "Post message" : "Send melding", + "Federated conversation" : "Forent samtale", + "Public conversation" : "Offentlig samtale", + "Favorite" : "Merk som favoritt", + "Banned users" : "Utestengte brukere", + "Manage the list of banned users in this conversation." : "Administrer listen over utestengte brukere i denne samtalen.", + "Manage bans" : "Administrer utestengelser", + "No banned users" : "Ingen utestengte brukere", + "Banned by:" : "Utestengt av:", + "Date:" : "Dato:", + "Note:" : "Merk:", + "Hide details" : "Skjul detaljer", + "Show details" : "Vis detaljer", + "Unban" : "Opphev utestengelsen", + "Error while updating conversation name" : "Feil under oppdatering av samtalenavn", + "Error while updating conversation description" : "Feil under oppdatering av samtalebeskrivelse", + "Enter a name for this conversation" : "Skriv inn et navn for denne samtalen", + "Edit conversation name" : "Rediger samtalenavn", + "Edit conversation description" : "Rediger samtalebeskrivelse", + "Enter a description for this conversation" : "Skriv inn en beskrivelse for denne samtalen", + "Picture" : "Bilde", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Følgende roboter kan aktiveres i denne samtalen. Ta kontakt med administrasjonen din for å få flere roboter installert på denne serveren.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Ingen roboter er installert på denne serveren. Ta kontakt med administrasjonen din for å få roboter installert på denne serveren.", + "Disable" : "Deaktiver", + "Enable" : "Aktiver", + "Breakout rooms" : "Grupperom", + "Manage breakout rooms" : "Administrer grupperom", + "Set up breakout rooms for this conversation" : "Sett opp grupperom for denne samtalen", + "Please select a valid PNG or JPG file" : "Vennligst velg en gyldig PNG eller JPG-fil", + "Choose your conversation picture" : "Velg ditt samtalebilde", + "Choose" : "Velg", + "Error setting conversation picture" : "Feil ved innstilling av samtalebilde", + "Could not set the conversation picture: {error}" : "Kunne ikke angi samtalebildet: {error}", + "Error cropping conversation picture" : "Feil ved beskjæring av samtalebilde", + "Error removing conversation picture" : "Feil ved fjerning av samtalebilde", + "Set emoji as conversation picture" : "Angi emoji som samtalebilde", + "Set background color for conversation picture" : "Angi bakgrunnsfarge for samtalebilde", + "Upload conversation picture" : "Last opp samtalebilde", + "Choose conversation picture from files" : "Velg samtalebilde blant filer", + "Remove conversation picture" : "Fjern samtalebilde", + "The file must be a PNG or JPG" : "Filen må være en .PNG eller .JPG", + "Set picture" : "Angi bilde", + "Default permissions modified for {conversationName}" : "Standard rettigheter modifisert for {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kunne ikke modifisere standard rettigheter for {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Rediger standardtillatelsene for deltakere i denne samtalen. Disse innstillingene påvirker ikke moderatorer.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Hver gang tillatelser endres i denne delen, går egendefinerte tillatelser som tidligere var tildelt individuelle deltakere, tapt.", + "All permissions" : "Alle rettigheter", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deltakerne har rettigheter til å starte en samtale, bli med i en samtale, aktivere lyd og video og dele skjermen.", + "Restricted" : "Begrenset", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deltakere kan bli med i samtaler, men kan ikke aktivere lyd eller video eller dele skjerm før en moderator manuelt gir dem tillatelser.", + "Advanced permissions" : "Avanserte rettigheter", + "Edit permissions" : "Rediger rettigheter", + "Conversation settings" : "Samtale innstillinger", + "Basic Info" : "Grunnleggende informasjon", + "Personal" : "Personlig", + "Moderation" : "Moderering", + "Setup overview" : "Oversikt over oppsett", + "Breakout Rooms" : "Grupperom", + "Matterbridge" : "Matterbridge", + "Bots" : "Roboter", + "Danger zone" : "Faresone", + "Leave conversation" : "Forlat samtale", + "You need to promote a new moderator before you can leave the conversation" : "Du må forfremme en ny moderator før du kan forlate samtalen", + "Delete conversation" : "Slett samtale", + "Do you really want to delete \"{displayName}\"?" : "Vil du virkelig slette \"{displayName}\"?", + "Error while deleting conversation" : "Feil under sletting av samtale", + "Delete all chat messages" : "Slett alle meldinger", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vil du virkelig slette alle meldinger i \"{displayName}\"?", + "Error while clearing chat history" : "Det oppsto en feil. Kan ikke slette meldingslogg", + "Be careful, these actions cannot be undone." : "Vær forsiktig, disse handlingene kan ikke angres.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Når en samtale forlates, er det nødvendig med en invitasjon for å bli med i en lukket samtale igjen. En åpen samtale kan når som helst kobles til igjen.", + "Permanently delete this conversation." : "Slett denne samtalen permanent.", + "Delete chat messages" : "Slett melding", + "Permanently delete all the messages in this conversation." : "Slett alle meldingene i denne samtalen permanent.", + "_%n hour_::_%n hours_" : ["%n time","%n timer"], + "_%n day_::_%n days_" : ["%n dag","%n dager"], + "_%n week_::_%n weeks_" : ["%n uke","%n uker"], + "Custom expiration time" : "Brukerdefinert utløpstid for melding", + "Message expiration disabled" : "Utløpstid for melding deaktivert", + "Message expiration set: {duration}" : "Utløpstid for melding angitt: {duration}", + "Error when trying to set message expiration" : "Feil ved forsøk på å angi utløpstid for melding", + "Message expiration" : "Utløp av melding", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatmeldinger kan utløpe etter en viss tid. Merk: filer som deles i chat, slettes ikke for eieren, men deles ikke lenger i samtalen.", + "Set message expiration" : "Angi utløpstid for melding", + "Current message expiration" : "Gjeldene utløpstid for melding", + "Guest access" : "Gjestetilgang", + "Breakout rooms are not allowed in public conversations." : "Grupperom er ikke tillatt i offentlige samtaler.", + "Allow guests to join this conversation via link" : "Tillat gjester å delta i denne samtalen via kobling", + "Password protection" : "Passordbeskyttelse", + "Set a password" : "Sett et passord", + "Change password" : "Endre passord", + "Enter new password" : "Angi nytt passord", + "Save password" : "Lagre passord", + "Guests are allowed to join this conversation via link" : "Gjester kan delta i denne samtalen via kobling", + "Guests are not allowed to join this conversation" : "Gjester kan ikke delta i denne samtalen", + "Resend invitations" : "Send invitasjoner på nytt", + "This conversation is open to both registered users and users created with the Guests app" : "Denne samtalen er åpen for både registrerte brukere og brukere som er opprettet med Guests-appen", + "This conversation is open to registered users" : "Denne samtalen er åpen for registrerte brukere", + "This conversation is limited to the current participants" : "Denne samtalen er begrenset til de nåværende deltakerne", + "You opened the conversation to both registered users and users created with the Guests app" : "Du åpnet samtalen for både registrerte brukere og brukere som er opprettet med Guests-appen", + "Error occurred when opening or limiting the conversation" : "Det oppstod en feil under åpning eller begrensning av samtalen", + "Open conversation to registered users, showing it in search results" : "Åpne samtalen for registrerte brukere, vis den i søkeresultatene", + "Also open to users created with the Guests app" : "Også åpen for brukere som er opprettet med Guests-appen", + "Open conversation" : "Åpen samtale", + "Invalid language" : "Ugyldig språk", + "Start time: {date}" : "Starttidspunkt: {date}", + "Start time has been updated" : "Starttidspunkt har blitt oppdatert", + "Error occurred while updating start time" : "Det oppstod en feil under oppdatering av starttid", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Aktivering av lobbyen vil fjerne ikke-moderatorer fra den pågående samtalen.", + "Enable lobby, restricting the conversation to moderators" : "Aktiver lobbyen, og begrens samtalen til moderatorer", + "Meeting start time" : "Møtets starttidspunkt", + "Start time (optional)" : "Starttidspunkt (valgfri)", + "Error occurred when locking the conversation" : "Det oppstod en feil under låsing av samtalen", + "Error occurred when unlocking the conversation" : "Det oppstod en feil under opplåsing av samtalen", + "Lock conversation" : "Lås samtalen", + "This will also terminate the ongoing call." : "Dette vil også avslutte den pågående samtalen.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lås samtalen for å hindre at noen legger inn meldinger eller starter samtaler", + "Edit" : "Rediger", + "More information" : "Mer informasjon", + "Delete" : "Slett", + "Add new bridged channel to current conversation" : "Legg til ny brokoblet kanal til gjeldende samtale", + "unknown state" : "ukjent tilstand", + "running" : "kjører", + "not running, check Matterbridge log" : "kjører ikke, sjekk loggen til Matterbridge", + "not running" : "kjører ikke", + "Bridge saved" : "Bro lagret", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Du kan bygge bro mellom kanaler fra forskjellige direktemeldingssystemer med Matterbridge.", + "More info on Matterbridge" : "Mer info om Matterbridge", + "Messaging systems" : "Meldingssystemer", + "Enable bridge" : "Aktiver bro", + "Show Matterbridge log" : "Vis Matterbridge-logg", + "Log content" : "Loggfør innhold", + "Only moderators are allowed to mention @all" : "Bare moderatorer har lov til å nevne @all", + "All participants are allowed to mention @all" : "Bare deltakere har lov til å nevne @all", + "Participants are now allowed to mention @all." : "Deltakere har nå tillatelse til å nevne @all.", + "Mentioning @all has been limited to moderators." : "Å nevne @all har blitt begrenset til moderatorer.", + "Allow participants to mention @all" : "La deltakerne nevne @all", + "Mention permissions" : "Nevn rettigheter", + "Notifications" : "Varsler", + "Notify about calls in this conversation" : "Varsle om anrop i denne samtalen", + "Important conversation" : "Viktig samtale", + "Recording consent is required for calls in this conversation" : "Det kreves samtykke til opptak av anrop i denne samtalen", + "Recording consent is not required for calls in this conversation" : "Samtykke til opptak er ikke nødvendig for anrop i denne samtalen", + "Recording consent requirement was updated" : "Samtykkekravet for opptak ble oppdatert", + "Error occurred while updating recording consent" : "Det oppstod en feil under oppdatering av samtykke til opptak", + "Recording Consent" : "Samtykke til opptak", + "Recording consent cannot be changed once a call or breakout session has started." : "Samtykke til opptak kan ikke endres når en samtale- eller grupperomøkt har startet.", + "Require recording consent before joining call in this conversation" : "Krev samtykke til opptak før du blir med i samtalen i denne samtalen", + "Recording consent is required for all calls" : "Det kreves samtykke til opptak for alle samtaler", + "SIP dial-in is now possible without PIN requirement" : "SIP-innringing er nå mulig uten krav om PIN-kode", + "SIP dial-in is now enabled" : "SIP-innringing er nå aktivert", + "SIP dial-in is now disabled" : "SIP-innringing er nå deaktivert", + "Error occurred when enabling SIP dial-in" : "Feil oppstod under aktivering av SIP-innringing", + "Error occurred when disabling SIP dial-in" : "Feil oppstod under deaktivering av SIP-innringing", + "Phone and SIP dial-in" : "Telefon- og SIP-innringing", + "Enable phone and SIP dial-in" : "Aktiver telefon- og SIP-innringing", + "Allow to dial-in without a PIN" : "Tillat innringing uten PIN-kode", + "Join" : "Bli med", + "Error while creating the conversation" : "Feil under oppretting av samtalen", + "Create a new conversation" : "Opprett en ny samtale", + "Join open conversations" : "Bli med i åpne samtaler", + "Call a phone number" : "Ring et telefonnummer", + "Unread mentions" : "Uleste nevner", + "Create conversation" : "Opprett samtale", + "Enter your name" : "Skriv inn navnet ditt", + "Submit name and join" : "Send inn navn og bli med", + "Do you already have an account?" : "Har du allerede en konto?", + "Log in" : "Logg inn", + "An error occurred while calling a phone number" : "Det oppstod en feil under anrop av et telefonnummer", + "Phone number could not be called: {error}" : "Telefonnummer kunne ikke ringes: {error}", + "Phone number could not be called" : "Telefonnummer kunne ikke ringes", + "Search participants or phone numbers" : "Søk etter deltakere eller telefonnumre", + "Creating the conversation …" : "Oppretter samtalen...", + "Mark as read" : "Merk som lest", + "Mark as unread" : "Merk som ulest", + "Remove from favorites" : "Fjern fra favoritter", + "Add to favorites" : "Legg til i favoritter", + "You need to promote a new moderator before you can leave the conversation." : "Du må utnevne en ny moderator før du kan forlate samtalen.", + "Conversation actions" : "Samtalehandlinger", + "Pending invitations" : "Ventende invitasjoner", + "From {user} at {remoteServer}" : "Fra {user} ved {remoteServer}", + "Decline invitation" : "Avslå invitasjon", + "Accept invitation" : "Aksepter invitasjon", + "No pending invitations" : "Ingen ventende invitasjoner", + "Home" : "Hjem", + "Unread" : "Ulest", + "Alphabetically" : "Alfabetisk", + "No matches found" : "Ingen treff funnet", + "No conversations found" : "Ingen samtaler funnet", + "You have no unread mentions." : "Du har ingen uleste nevner", + "You have no unread messages." : "Du har ingen uleste meldinger", + "An error occurred while performing the search" : "Det oppstod en feil under utføring av søket", + "Conversation list" : "Samtaleliste", + "Unread messages" : "Uleste meldinger", + "Clear filters" : "Tøm filtre", + "New personal note" : "Nytt personlig notat", + "Clear filter" : "Tøm filter", + "App settings" : "App-innstillinger", + "Users" : "Brukere", + "Groups" : "Grupper", + "Teams" : "Lag", + "Federated users" : "Forente brukere", + "New private conversation" : "Ny privat samtale", + "Other sources" : "Andre kilder", + "Open conversations" : "Åpne samtaler", + "No search results" : "Ingen søkeresultater", + "Users, groups and teams" : "Brukere, grupper og lag", + "Users and groups" : "Brukere og grupper", + "Users and teams" : "Brukere og lag", + "Groups and teams" : "Grupper og lag", + "New group conversation" : "Ny gruppesamtale", + "The meeting will start soon" : "Møtet starter snart", + "This meeting is scheduled for {startTime}" : "Dette møtet er planlagt til {startTime}", + "You are currently waiting in the lobby" : "Du venter for øyeblikket i lobbyen", + "Select microphone" : "Velg mikrofon", + "No microphone available" : "Ingen mikrofon er tilgjengelig", + "Select camera" : "Velg kamera", + "No camera available" : "Ingen kamera tilgjengelig", + "Select a device" : "Velg en enhet", + "Playing …" : "Spiller...", + "Test speakers" : "Test høyttalere", + "Test" : "Test", + "Devices" : "Enheter", + "Backgrounds" : "Bakgrunner", + "No audio" : "Ingen lyd", + "No camera" : "Ikke noe kamera", + "Display video as you will see it (mirrored)" : "Vis video slik du vil se den (speilet)", + "Display video as others will see it" : "Vis video slik andre vil se den", + "Calls are not supported in your browser" : "Anrop støttes ikke i nettleseren din", + "Access to microphone is only possible with HTTPS" : "Tilgang til mikrofon er bare mulig med HTTPS", + "Access to microphone was denied" : "Tilgang til mikrofon ble nektet", + "Error while accessing microphone" : "Feil under tilgang til mikrofon", + "Access to camera is only possible with HTTPS" : "Tilgang til kamera er bare mulig med HTTPS", + "The call is being recorded." : "Samtalen blir tatt opp.", + "The call might be recorded." : "Samtalen kan bli tatt opp.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Opptaket kan inneholde stemmen din, video fra kamera og skjermdeling. Ditt samtykke kreves før du blir med i samtalen.", + "Give consent to the recording of this call" : "Gi samtykke til opptak av denne samtalen", + "Start recording immediately with the call" : "Start opptaket umiddelbart med samtalen", + "Apply settings" : "Anvend innstillinger", + "Select virtual office background" : "Velg virtuell kontorbakgrunn", + "Select virtual home background" : "Velg virtuell hjemmebakgrunn", + "Select virtual abstract background" : "Velg virtuell abstrakt bakgrunn", + "Select virtual beach background" : "Velg virtuell strandbakgrunn", + "Select virtual park background" : "Velg virtuell parkbakgrunn", + "Select virtual theater background" : "Velg virtuell teaterbakgrunn", + "Select virtual library background" : "Velg virtuell biblioteksbakgrunn", + "Select virtual space station background" : "Velg bakgrunn for virtuell romstasjon", + "Error while uploading the file" : "Feil under opplasting av filen", + "Select a file" : "Velg en fil", + "Invalid path selected" : "Ugyldig angitt sti", + "Select virtual background from file {fileName}" : "Velg virtuell bakgrunn fra fil {fileName}", + "Blur" : "Uklar", + "Upload" : "Last opp", + "Files" : "Filer", + "(editing)" : "(redigerer)", + "(edited)" : "(redigert)", + "The message has expired or has been deleted" : "Denne meldingen er utløpt eller slettet", + "Cancel quote" : "Avbryt tilbud", + "24 hours" : "24 timer", + "7 days" : "7 dager", + "Clear reminder – {timeLocale}" : "Tydelig påminnelse – {timeLocale}", + "Edited by {actor}" : "Redigert av {actor}", + "Message text copied to clipboard" : "Meldingstekst kopiert til utklippstavlen", + "Message text could not be copied" : "Meldingsteksten kunne ikke kopieres", + "Message forwarded to \"Note to self\"" : "Melding videresend til \"Notat til meg selv\"", + "Error while forwarding message to \"Note to self\"" : "Feil under videresending av melding til \"Notat til meg selv\"", + "A reminder was successfully removed" : "En påminnelse ble fjernet", + "Error occurred when removing a reminder" : "Det oppstod en feil under fjerning av en påminnelse", + "A reminder was successfully set at {datetime}" : "En påminnelse ble satt kl. {datetime}", + "Error occurred when creating a reminder" : "Det oppstod en feil under oppretting av en påminnelse", + "Add a reaction to this message" : "Legg til en reaksjon på denne meldingen", + "Reply" : "Svar", + "More actions" : "Flere handlinger", + "Set reminder" : "Angi påminnelse", + "Reply privately" : "Svar privat", + "Edit message" : "Rediger melding", + "Copy message" : "Kopier melding", + "Copy message link" : "Kopier meldingskobling", + "Go to file" : "Gå til fil", + "Forward message" : "Videresend melding", + "Translate" : "Oversette", + "Set custom reminder" : "Angi egendefinert påminnelse", + "Close reactions menu" : "Lukk reaksjonsmenyen", + "React with {emoji}" : "Reager med {emoji}", + "React with another emoji" : "Reager med en annen emoji", + "Choose a conversation to forward the selected message." : "Velg en samtale for å videresende den merkede meldingen.", + "Error while forwarding message" : "Feil under videresending av melding", + "The message has been forwarded to {selectedConversationName}" : "Meldingen er videresendt til {selectedConversationName}", + "Dismiss" : "Forkast", + "Go to conversation" : "Gå til samtale", + "Detect language" : "Oppdag språk", + "The message could not be translated" : "Meldingen kan ikke oversettes", + "Translation copied to clipboard" : "Oversettelsen kopier til utklippstavlen", + "Translation could not be copied" : "Oversettelsen kunne ikke kopieres", + "Translate message" : "Oversett melding", + "Source language to translate from" : "Kildespråk å oversette fra", + "Translate from" : "Oversett fra", + "Target language to translate into" : "Målspråk å oversette til", + "Translate to" : "Oversett til", + "Translating" : "Oversetter", + "Copy translated text" : "Kopier oversatt tekst", + "Send now" : "Send nå", + "Message read by everyone who shares their reading status" : "Melding lest av alle som deler sin lesestatus", + "Message sent" : "Melding sendt", + "Deleting message" : "Sletter melding", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Meldingen er slettet, men en robot eller Matterbridge er konfigurert, og meldingen kan allerede være distribuert til andre tjenester", + "Message deleted successfully" : "Melding slettet", + "Message could not be deleted because it is too old" : "Meldingen kunne ikke slettes fordi den er for gammel", + "Only normal chat messages can be deleted" : "Kun vanlige meldinger kan slettes", + "An error occurred while deleting the message" : "Det oppstod en feil under sletting av meldingen", + "Your browser does not support playing audio files" : "Nettleseren din støtter ikke avspilling av lydfiler", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} i {board}", + "Deck Card" : "Deck-kort", + "Remove {fileName}" : "Fjern {fileName}", + "Open this location in OpenStreetMap" : "Åpne denne plasseringen i OpenStreetMap", + "Sending message" : "Sender melding", + "Failed to send the message. Click to try again" : "Kunne ikke sende meldingen. Klikk for å prøve igjen.", + "Not enough free space to upload file" : "Ikke nok ledig plass til å laste opp fil", + "You cannot send messages to this conversation at the moment" : "Du kan ikke sende meldinger til denne samtalen for øyeblikket", + "Could not update the message" : "Kunne ikke oppdatere meldingen", + "You voted" : "Du stemte", + "_%n vote_::_%n votes_" : ["%n stemme","%n stemmer"], + "Open poll" : "Åpen avstemning", + "See results" : "Vis resultater", + "Reactions" : "Reaksjoner", + "No permission to post reactions in this conversation" : "Ingen tillatelse til å legge inn reaksjoner i denne samtalen", + "and {participant}" : "og {participant}", + "_and %n other participant_::_and %n other participants_" : ["og %n deltaker til","og %n andre deltakere"], + "Show all reactions" : "Vis alle reaksjoner", + "Add more reactions" : "Legg til flere reaksjoner", + "Show or collapse system messages" : "Vis eller skjul systemmeldinger", + "No messages" : "Ingen meldinger", + "All messages have expired or have been deleted." : "Alle meldinger er utløpt eller slettet.", + "Unpin" : "Løsne", + "Cancel search" : "Avbryt søk", + "Add a phone number" : "Legg til et telefonnummer", + "All set, the conversation \"{conversationName}\" was created." : "Alt klart, samtalen \"{conversationName}\" ble opprettet.", + "Create a new group conversation" : "Opprett en ny gruppesamtale", + "Add participants" : "Legg til deltager", + "Maximum length exceeded ({maxlength} characters)" : "Maksimal lengde overskredet ({maxlength} tegn)", + "Conversation visibility" : "Synlighet for samtale", + "Allow guests to join via link" : "Tillat gjester å bli med via kobling", + "Enter password" : "Skriv inn passord", + "This conversation has been locked" : "Samtalen er låst", + "No permission to post messages in this conversation" : "Ingen tillatelse til å legge ut meldinger i denne samtalen", + "Joining conversation …" : "Blir med i samtalen...", + "Send message silently" : "Send melding stille", + "Send message" : "Send melding", + "Send without notification" : "Send uten varsel", + "The participant will not be notified about new messages" : "Mottakeren blir ikke varslet om nye meldinger", + "Participants will not be notified about new messages" : "Mottakere blir ikke varslet om nye meldinger", + "The message could not be edited" : "Meldingen kunne ikke redigeres", + "File to share" : "Fil for deling", + "File upload is not available in this conversation" : "Filopplasting er ikke tilgjengelig i denne samtalen", + "Add emoji" : "Legg til emoji", + "Adding a mention will only notify users who did not read the message." : "Hvis du legger til en nevner, varsles bare brukere som ikke har lest meldingen.", + "Send later" : "Send senere", + "Cancel editing" : "Avbryt redigering", + "{user} is out of office and might not respond." : "{user} er fraværende og svarer kanskje ikke.", + "Share from {nextcloud}" : "Del fra {nextcloud}", + "Share from Files" : "Del fra Filer", + "Share files to the conversation" : "Del filer til samtalen", + "Upload from device" : "Last opp fra enhet", + "Create new poll" : "Opprett ny avstemning", + "Smart picker" : "Smartvelger", + "Record voice message" : "Ta opp talemelding", + "End recording and send" : "Avslutt opptak og send", + "Dismiss recording" : "Avvis opptak", + "Access to the microphone was denied" : "Tilgang til mikrofonen ble nektet", + "Microphone either not available or disabled in settings" : "Mikrofon enten ikke tilgjengelig eller deaktivert i innstillingene", + "Error while recording audio" : "Feil under innspilling av lyd", + "New file" : "Ny fil", + "Blank" : "Blank", + "Error while creating file" : "Feil under oppretting av fil", + "Create and share a new file" : "Opprett og del en ny fil", + "Name of the new file" : "Navn på ny fil", + "Create file" : "Opprett fil", + "Someone is typing …" : "Noen skriver…", + "{user1} is typing …" : "{user1} skriver...", + "{user1} and {user2} are typing …" : "{user1} og {user2} skriver...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} og {user3} skriver...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} og %n annen skriver...","{user1}, {user2}, {user3} og %n andre skriver..."], + "Add more files" : "Legg til flere filer", + "Send" : "Send", + "In this conversation {user} can:" : "I denne samtalen {user} kan:", + "Edit default permissions for participants in {conversationName}" : "Rediger standard rettigheter for deltakere i {conversationName}", + "Start a call" : "Start et anrop", + "Skip the lobby" : "Hopp over lobbyen", + "Can post messages and reactions" : "Kan legge ut meldinger og reaksjoner", + "Enable the microphone" : "Aktiver mikrofonen", + "Enable the camera" : "Aktiver kameraet", + "Share the screen" : "Del skjermen", + "Update permissions" : "Oppdater rettigheter", + "Updating permissions" : "Oppdaterer rettigheter", + "Create poll" : "Opprett avstemning", + "Question" : "Spørsmål", + "Ask a question" : "Still et spørsmål", + "Answers" : "Svar", + "Answer {option}" : "Svar {option}", + "Delete poll option" : "Slett avstemningsalternativet", + "Add answer" : "Legg til svar", + "Settings" : "Innstillinger", + "Anonymous poll" : "Anonym avstemning", + "Multiple answers" : "Flere svar", + "You voted for this option" : "Du stemte på dette alternativet", + "End poll" : "Avslutt avstemning", + "Change your vote" : "Endre stemmen din", + "Results" : "Resultater", + "Voted participants" : "Stemte deltakere", + "Send a message to \"{roomName}\"" : "Send en melding til \"{roomName}\"", + "Hide list of participants" : "Skjul deltakerlisten", + "Show list of participants" : "Vis listen over deltakere", + "Assistance requested in {roomName}" : "Anmodet om bistand i {roomName}", + "The message was sent to \"{roomName}\"" : "Meldingen ble sendt til \"{roomName}\"", + "Dismiss request for assistance" : "Avvis forespørsel om bistand", + "Send message to room" : "Send melding til rom", + "Back to main room" : "Tilbake til hovedrommet", + "Back to your room" : "Tilbake til rommet ditt", + "Message all rooms" : "Send melding til alle rom", + "Start session" : "Start økten", + "Start a call before you start a breakout room session" : "Start en samtale før du starter en grupperomøkt", + "Stop session" : "Stopp økten", + "The message was sent to all breakout rooms" : "Meldingen ble sendt til alle grupperom", + "Send a message to all breakout rooms" : "Send en melding til alle grupperom", + "Breakout rooms are not started" : "Grupperom er ikke startet", + "Disable lobby" : "Deaktiver lobby", + "Settings for participant \"{user}\"" : "Innstillinger for deltaker \"{user}\"", + "Participant \"{user}\"" : "Deltaker \"{user}\"", + "moderator" : "moderator", + "bot" : "robot", + "guest" : "gjest", + "Ringing …" : "Ringer...", + "Call rejected" : "Anrop avvist", + "{time} talking …" : "{time} snakker...", + "{time} talking time" : "{time} taletid", + "Raised their hand" : "Rekte opp hånden", + "Joined with video" : "Sluttet seg til med video", + "Joined via phone" : "Sluttet seg til via telefon", + "Joined with audio" : "Sluttet seg til med lyd", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Teksten må bestå av mindre tegn enn eller lik {maxLength}. Den gjeldende teksten består av {charactersCount}-tegn.", + "Remove group and members" : "Fjern gruppe og medlemmer", + "Remove team and members" : "Fjern lag og medlemmer", + "Remove participant" : "Fjern deltaker", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vil du virkelig fjerne gruppen \"{displayName}\" og medlemmene fra denne samtalen?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vil du virkelig fjerne laget \"{displayName}\" og medlemmene fra denne samtalen?", + "Do you really want to remove {displayName} from this conversation?" : "Vil du virkelig fjerne {displayName} fra denne samtalen?", + "Notification was sent to {displayName}" : "Varsel sendt til {displayName}", + "Could not send notification to {displayName}" : "Kunne ikke sende invitasjon til {displayName}", + "Permissions granted to {displayName}" : "Rettigheter gitt til {displayName}", + "Could not modify permissions for {displayName}" : "Kan ikke endre rettigheter for {displayName}", + "Permissions removed for {displayName}" : "Rettigheter fjernet for {displayName}", + "Permissions set to default for {displayName}" : "Rettigheter satt til standard for {displayName}", + "Phone number could not be hung up" : "Telefonnummeret kunne ikke legges på", + "Phone number could not be put on hold" : "Telefonnummeret kunne ikke settes på vent", + "Phone number could not be muted" : "Telefonnummeret kunne ikke dempes", + "Phone number could not be unmuted" : "Telefonnummeret kunne ikke slå på lyden", + "DTMF message could not be sent" : "DTMF-melding kunne ikke sendes", + "Phone number copied to clipboard" : "Telefonnummer kopiert til utklippstavlen", + "Phone number could not be copied" : "Telefonnummer kunne ikke kopieres", + "in the lobby" : "i lobbyen", + "Dial out phone" : "Ring ut telefonen", + "Hang up phone" : "Legg på telefonen", + "Move back to lobby" : "Gå tilbake til lobbyen", + "Move to conversation" : "Gå til samtale", + "Dial-in PIN" : "Ring-inn PIN-kode", + "Demote from moderator" : "Fjern moderatorstatus", + "Promote to moderator" : "Gi moderatorstatus", + "Resend invitation" : "Send invitasjon på nytt", + "Send call notification" : "Send anropsvarsel", + "Dial out phone number" : "Ring ut telefonnummer", + "Resume call for phone number" : "Gjenoppta anrop for telefonnummer", + "Put phone number on hold" : "Sett telefonnummeret på vent", + "Unmute phone number" : "Oppheve demping av telefonnummer", + "Mute phone number" : "Demp telefonnummer", + "Copy phone number" : "Kopier telefonnummer", + "Reset custom permissions" : "Tilbakestill egendefinerte rettigheter", + "Grant all permissions" : "Gi alle rettigheter", + "Remove all permissions" : "Fjern alle rettigheter", + "Also ban from this conversation" : "Også utesteng fra denne samtalen", + "Internal note (reason to ban)" : "Intern merknad (grunn til å utestenge)", + "Remove" : "Fjern", + "Permissions modified for {displayName}" : "Rettigheter endret for {displayName}", + "Add users, groups or teams" : "Legg til brukere, grupper eller lag", + "Add users or groups" : "Legg til bruker eller gruppe", + "Add users or teams" : "Legg til brukere eller lag", + "Add users" : "Legg til brukere", + "Add groups or teams" : "Legg til brukere eller lag", + "Add groups" : "Legg til grupper", + "Add teams" : "Legg til lag", + "Add other sources" : "Legg til andre kilder", + "Add emails" : "Legg til e-post", + "Integrations" : "Integreringer", + "Add federated users" : "Legg til forente brukere", + "Searching …" : "Søker ...", + "Search for more users" : "Søk etter flere brukere", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kan søke etter eller legge til deltakere via navn, e-post eller Federated Cloud ID", + "Search or add participants" : "Finn eller legg til deltakere", + "Invitation was sent to {actorId}" : "Invitasjon sendt til {actorId}", + "An error occurred while adding the participants" : "Det oppsto en feil. Kan ikke legge til deltakerne", + "Participants" : "Deltakere", + "Participants ({count})" : "Deltakere ({count})", + "Open chat" : "Åpne Chat", + "You have new unread messages in the chat." : "Du har nye uleste meldinger i chatten.", + "You have been mentioned in the chat." : "Du har blitt nevnt i chatten.", + "Chat" : "Chat", + "Details" : "Detaljer", + "Shared items" : "Delte elementer", + "Until" : "Til", + "No results found" : "Ingen resultater funnet", + "Load more results" : "Hent flere resultat", + "Projects" : "Prosjekter", + "No shared items" : "Ingen delte elementer", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Kobling til en samtale", + "No open conversations found" : "Ingen åpne samtaler funnet", + "Either there are no open conversations or you joined all of them." : "Enten er det ingen åpne samtaler, eller så ble du med i dem alle.", + "Check spelling or use complete words." : "Kontroller stavemåten eller bruk fullstendige ord.", + "Search conversations or users" : "Søk etter samtaler eller brukere", + "Select conversation" : "Velg samtale", + "Number length is not valid" : "Tall-lengden er ikke gyldig", + "Region code is not valid" : "Regionskoden er ikke gyldig", + "Number length is too short" : "Tall-lengen er for kort", + "Number length is too long" : "Tall-lengen er for lang", + "Number is not valid" : "Nummer er ikke gyldig", + "Phone numbers" : "Telefonnumre", + "Display name: {name}" : "Visningsnavn: {name}", + "Edit display name" : "Rediger visningsnavn", + "Save name" : "Lagre navn", + "Error while saving sounds setting" : "Feil under lagring av lydinnstilling", + "Play sounds when participants join or leave a call" : "Spille av lyder når deltakere blir med i eller forlater en samtale", + "Notification settings" : "Innstillinger for notifiseringer", + "Default language" : "Standard språk", + "Select location for attachments" : "Velg plassering for vedlegg", + "Error while setting attachment folder" : "Feil under angivelse av vedleggsmappe", + "Error while setting read status privacy" : "Feil under angivelse av personvern for lesestatus", + "Error while setting typing status privacy" : "Feil under angivelse av personvern for skrivestatus", + "Privacy" : "Personvern", + "Attachments folder" : "Vedleggsmappe", + "Toggle full screen" : "Veksle fullskjerm", + "Search" : "Søk", + "Focus the chat input" : "Fokuser chat-inndataene", + "Unfocus the chat input to use shortcuts" : "Fjern fokuseringen på chat-inndataene for å bruke snarveier", + "Edit your last message" : "Rediger din seneste melding", + "Shortcuts while in a call" : "Snarveier i en samtale", + "Camera on and off" : "Kamera på og av", + "Microphone on and off" : "Mikrofon på og av", + "Raise or lower hand" : "Hev eller senk hånden", + "Push to talk or push to mute" : "Trykk for å snakke eller trykk for å dempe", + "Start call silently" : "Start stille anrop", + "Start call" : "Start samtale", + "End call" : "Avslutt samtale", + "You will be able to join the call only after a moderator starts it." : "Du vil bare kunne bli med i samtalen etter at en moderator har startet den.", + "End call for everyone" : "Avslutt samtale for alle", + "Starting the recording" : "Starter opptaket", + "Recording" : "Innspilling", + "The call has been running for one hour." : "Samtalen har pågått i én time.", + "Cancel recording start" : "Avbryt opptaksstart", + "Stop recording" : "Stopp opptak", + "Send a reaction" : "Send en reaksjon", + "React with {reaction}" : "Reager med {reaction}", + "All tasks done!" : "Alle oppgaver fullført!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} av %n oppgave","{done} av %n oppgaver"], + "_%n participant in call_::_%n participants in call_" : ["%n deltaker i samtale","%n deltakere i samtale"], + "You are not allowed to enable screensharing" : "Du har ikke lov til å aktivere skjermdeling", + "No screensharing" : "Ingen skjermdeling", + "Screensharing options" : "Skjermdelingsvalg", + "Enable screensharing" : "Skru på skjermdeling", + "Bad sent video and screen quality." : "Dårlig sendt video- og skjermkvalitet.", + "Bad sent screen quality." : "Dårlig sendt skjermkvalitet.", + "Bad sent video quality." : "Dårlig sendt videokvalitet.", + "Bad sent audio, video and screen quality." : "Dårlig sendt lyd-, video- og skjermkvalitet.", + "Bad sent audio and screen quality." : "Dårlig sendt lyd- og skjermkvalitet.", + "Bad sent audio and video quality." : "Dårlig sendt lyd- og videokvalitet.", + "Bad sent audio quality." : "Dårlig sendt lydkvalitet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din mens du deler skjermen.", + "Disable background blur" : "Deaktiver bakgrunnsuskarphet", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din. For å forbedre situasjonen, prøv å deaktivere videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Internett-tilkoblingen eller datamaskinen er opptatt, og andre deltakere kan kanskje ikke se skjermen din.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke se deg.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere videoen din mens du gjør en skjermdeling.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå deg og se skjermen din. For å forbedre situasjonen, prøv å deaktivere skjermdelingen.", + "Disable screenshare" : "Deaktiver skjermdeling", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere bakgrunnsuskarphet eller videoen din.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå og se deg. For å forbedre situasjonen, prøv å deaktivere videoen din.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Internett-tilkoblingen eller datamaskinen din er opptatt, og andre deltakere kan kanskje ikke forstå deg.", + "Screen sharing is not supported by your browser." : "Skjermdeling støttes ikke av nettleseren din.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skjermdeling krever at siden er innlastet med HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skjermdeling krever at siden er innlastet med HTTPS.", + "An error occurred while starting screensharing." : "En feil inntraff under oppstart av skjermdeling.", + "Show your screen" : "Vis din skjerm", + "Stop screensharing" : "Stopp skjermdeling", + "Mute others" : "Demp andre", + "Start recording" : "Start opptak", + "Set up breakout rooms" : "Sett opp grupperom", + "Open Calendar" : "Åpne Kalender", + "Remove participant {name}" : "Fjern deltaker {name}", + "Keep" : "Behold", + "Open dialpad" : "Åpne numerisk tastatur", + "Select a region" : "Velg region", + "Search …" : "Søk...", + "Message without mention" : "Melding uten å nevne", + "Mention myself" : "Nevn meg selv", + "Mention everyone" : "Nevn alle", + "Select a conversation" : "Velg en samtale", + "Select a mode" : "Velg en modus", + "You do not have permissions to access this conversation." : "Du har ikke tillatelse til å få tilgang til denne samtalen.", + "Join a different conversation or start a new one." : "Bli med i en annen samtale eller start en ny.", + "The conversation does not exist" : "Samtalen finnes ikke", + "Join a conversation or start a new one!" : "Bli med i en samtale eller start en ny!", + "Duplicate session" : "Dupliser økten", + "Creating and joining a conversation with \"{userid}\"" : "Opprette og bli med i en samtale med \"{userid}\"", + "Join a conversation or start a new one" : "Ta del i en samtale eller start en ny", + "Error while joining the conversation" : "Feil under å bli med i samtalen", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud-bruker", + "User password" : "Brukerpassord", + "Talk conversation" : "Talk-samtale", + "Skip TLS verification" : "Hopp over TLS-verifisering", + "Matrix server URL" : "Matrix server URL", + "User" : "Bruker", + "Matrix channel" : "Matrix-kanal", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost-bruker", + "Team name" : "Navn på team", + "Channel name" : "Kanalnavn", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "Brukernavn eller e-postadresse", + "Rocket.Chat channel" : "Rocket.Chat-kanal", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Brukernavn for robot", + "Bot API key" : "Robot API-nøkkel", + "Zulip channel" : "Zulip-kanal", + "API token" : "API-symbol", + "Slack channel" : "Slack-kanal", + "Server ID or name" : "Server-ID eller navn", + "Channel" : "Kanal", + "Login" : "Logg inn", + "Chat ID" : "Chat-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (f.eks. chat.freenode.net:6667)", + "Nickname" : "Kallenavn", + "Connection password" : "Passord for tilkobling", + "IRC channel" : "IRC-kanal", + "Channel password" : "Passord for kanal", + "NickServ nickname" : "NickServ-kallenavn", + "NickServ password" : "NickServ-passord", + "Use TLS" : "Bruk TLS", + "Use SASL" : "Bruk SASL", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Klient-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Tråd-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Avstemninger", + "Deck cards" : "Deck-kort", + "Voice messages" : "Talemeldinger", + "Locations" : "Steder", + "Call recordings" : "Samtaleopptak", + "Audio" : "Lyd", + "Show all media" : "Vis alle medier", + "Show all files" : "Vis alle filer", + "Show all polls" : "Vis alle avstemninger", + "Show all deck cards" : "Vis alle deck-kort", + "Show all voice messages" : "Vis alle talemeldinger", + "Show all locations" : "Vis alle plasseringer", + "Show all call recordings" : "Vis alle samtaleopptak", + "Show all audio" : "Vis all lyd", + "Show all other" : "Vi alt annet", + "Group" : "Gruppe", + "Team" : "Lag", + "You reconnected to the call" : "Du koblet til samtalen på nytt", + "{actor} reconnected to the call" : "{actor} koblet til samtalen på nytt", + "You added {user0} and {user1}" : "Du la til {user0} og {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du la til {user0}, {user1} 1 %n mer deltaker","Du la til {user0}, {user1} og %n flere deltakere"], + "An administrator added you and {user0}" : "En administrator la til deg og {user0}", + "{actor} added you and {user0}" : "{actor} la til deg og {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["En administrator la til deg, {user0} og %n mer deltaker","En administrator la til deg, {user0} and %n flere deltakere"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} la til deg, {user0} og %n mer deltaker","{actor} la til deg, {user0} og %n flere deltakere"], + "An administrator added {user0} and {user1}" : "En administrator la til {user0} og {user1}", + "{actor} added {user0} and {user1}" : "{actor} la til {user0} og {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["En administrator la til {user0}, {user1} og %n mer deltaker","En administrator la til {user0}, {user1} og %n flere deltakere"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} la til {user0}, {user1} og %n mer deltaker","{actor} la til {user0}, {user1} og %n flere deltakere"], + "You removed {user0} and {user1}" : "Du fjernet {user0} og {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du fjernet {user0}, {user1} og %n deltaker til","Du fjernet {user0}, {user1} og %n deltakere til"], + "An administrator removed you and {user0}" : "En administrator fjernet deg og {user0}", + "{actor} removed you and {user0}" : "{actor} fjernet deg og {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administrator fjernet deg, {user0} og %n deltaker til","En administrator fjernet deg, {user0} og %n deltakere til"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} fjernet deg, {user0} og %n deltaker til","{actor} fjernet deg, {user0} og %n deltakere til"], + "An administrator removed {user0} and {user1}" : "En administrator fjernet {user0} og {user1}", + "{actor} removed {user0} and {user1}" : "{actor} fjernet {user0} og {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administrator fjernet {user0}, {user1} og %n deltaker til","En administrator fjernet {user0}, {user1} og %n deltakere til"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} fjernet {user0}, {user1} og %n deltaker til","{actor} fjernet {user0}, {user1} og %n deltakere til"], + "You and {user0} joined the call" : "Du og {user0} ble med i samtalen", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} og %n deltaker til ble med i samtalen","Du, {user0} og %n flere deltakere ble med i samtalen"], + "{user0} and {user1} joined the call" : "{user0} og {user1} ble med i samtalen", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} og %n deltaker til ble med i samtalen","{user0}, {user1} og %n flere deltakere ble med i samtalen"], + "You and {user0} left the call" : "Du og {user0} forlot samtalen", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} og %n deltaker til forlot samtalen","Du, {user0} og %n flere deltakere forlot samtalen"], + "{user0} and {user1} left the call" : "{user0} og {user1} forlot samtalen", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} og %n deltaker til forlot samtalen","{user0}, {user1} og %n flere deltakere forlot samtalen"], + "You promoted {user0} and {user1} to moderators" : "Du forfremmet {user0} og {user1} til moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du forfremmet {user0}, {user1} og %n deltaker til moderatorer","Du forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administrator forfremmet deg og {user0} til moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} forfremmet deg og {user0} til moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administrator forfremmet deg, {user0} og %n mer deltaker til moderatorer","En administrator forfremmet deg, {user0} og %n flere deltakere til moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} forfremmet deg, {user0} og %n mer deltaker til moderatorer","{actor} forfremmet deg, {user0} og %n flere deltakere til moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administrator forfremmet {user0} og {user1} til moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} forfremmet {user0} og {user1} til moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administrator forfremmet {user0}, {user1} og %n mer deltaker til moderatorer","En administrator forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} forfremmet {user0}, {user1} og%n mer deltaker til moderatorer","{actor} forfremmet {user0}, {user1} og %n flere deltakere til moderatorer"], + "You demoted {user0} and {user1} from moderators" : "Du nedgraderte {user0} og {user1} fra moderatorer", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","Du nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "An administrator demoted you and {user0} from moderators" : "En administrator nedgraderte deg og {user0} fra moderatorer", + "{actor} demoted you and {user0} from moderators" : "{actor} nedgraderte deg og {user0} fra moderatorer", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["En administrator nedgraderte deg, {user0} og %n deltaker til fra moderatorer","En administrator nedgraderte deg, {user0} og %n flere deltakere fra moderatorer"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} nedgraderte deg, {user0} og %n deltaker til fra moderatorer","{actor} nedgraderte deg, {user0} og %n flere deltakere fra moderatorer"], + "An administrator demoted {user0} and {user1} from moderators" : "En administrator nedgraderte {user0} og {user1} fra moderatorer", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} nedgraderte {user0} og {user1} fra moderatorer", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["En administrator nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","En administrator nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} nedgraderte {user0}, {user1} og %n deltaker til fra moderatorer","{actor} nedgraderte {user0}, {user1} og %n flere deltakere fra moderatorer"], + "You: {lastMessage}" : "Du: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(redigert av deg)", + "(edited by a deleted user)" : "(redigert av en slettet bruker)", + "(edited by {moderator})" : "(redigert av {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du prøver å bli med i en samtale mens du har en aktiv økt i et annet vindu eller en annen enhet. Dette støttes for øyeblikket ikke av Nextcloud Talk. Hva vil du gjøre?", + "Leave this page" : "Forlate denne siden", + "Join here" : "Bli med her", + "Deck card has been posted to {conversation}" : "Deck-kort er lagt til {conversation}", + "An error occurred while posting deck card to conversation" : "En feil oppstod ved å legge ut deck-kortet til samtalen", + "Post to a conversation" : "Legg ut til en samtale", + "Post to conversation" : "Legg ut til samtale", + "The recording failed. Please contact your administrator." : "Opptaket feilet, vennligst kontakt administratoren din.", + "Location has been posted to {conversation}" : "Plassering er lagt til {conversation}", + "An error occurred while posting location to conversation" : "En feil oppstod ved å legge ut plassering til samtale", + "Share to a conversation" : "Del til en samtale", + "Share to conversation" : "Del til samtale", + "In conversation" : "I samtale", + "Search in conversation: {conversation}" : "Søk i samtale: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Forespørslene dine blir strupet for øyeblikket på grunn av beskyttelse mot rå makt", + "Error while clearing conversation history" : "Feil under tømming av samtalelogg", + "Error occurred while allowing guests" : "Det oppstod en feil under godkjenning av gjester", + "Error occurred while disallowing guests" : "Det oppstod en feil under avvisning av gjester", + "Error occurred when restricting the conversation to moderator" : "Det oppstod en feil da samtalen ble begrenset til moderator", + "Error occurred when opening the conversation to everyone" : "Det oppstod en feil da samtalen ble åpnet for alle", + "Conversation password has been saved" : "Samtale passord er lagret", + "Conversation password has been removed" : "Samtale passord er fjernet", + "Error occurred while saving conversation password" : "Det oppstod en feil under lagring av samtalepassord", + "Call recording is starting." : "Samtaleopptaket starter.", + "Call recording stopped while starting." : "Samtaleopptaket stoppet under oppstart.", + "Call recording stopped. You will be notified once the recording is available." : "Samtaleopptak stoppet. Du vil bli varslet når opptaket er tilgjengelig.", + "Conversation picture set" : "Samtalebilde angitt", + "Conversation picture deleted" : "Samtalebilde slettet", + "Could not delete the conversation picture" : "Kunne ikke slette samtalebildet", + "Could not post message: {errorMessage}" : "Kunne ikke legge inn melding: {errorMessage}", + "Participant is banned successfully" : "Deltaker er utestengt", + "Error while banning the participant" : "Feil under utestenging av deltakeren", + "An error occurred while fetching the participants" : "Det oppstod en feil under henting av deltakerne", + "Could not send invitation to {actorId}" : "Kunne ikke sende invitasjon til {actorId}", + "Invitations sent" : "Invitasjoner sendt", + "Error occurred when sending invitations" : "Det oppstod en feil under sending av invitasjoner", + "An error occurred while creating breakout rooms" : "Det oppstod en feil under oppretting av grupperom", + "An error occurred while re-ordering the attendees" : "Det oppstod en feil under omorganisering av deltakerne", + "An error occurred while deleting breakout rooms" : "Det oppstod en feil under sletting av grupperom", + "An error occurred while starting breakout rooms" : "Det oppstod en feil under oppstart av grupperom", + "An error occurred while stopping breakout rooms" : "Det oppstod en feil under stopping av grupperom", + "An error occurred while sending a message to the breakout rooms" : "Det oppstod en feil under sending av en melding til grupperommene", + "An error occurred while requesting assistance" : "Det oppstod en feil under forespørsel om hjelp", + "An error occurred while resetting the request for assistance" : "Det oppstod en feil under tilbakestilling av forespørselen om hjelp", + "An error occurred while joining breakout room" : "Det oppstod en feil under tilknytning til grupperom", + "An error occurred while accepting an invitation" : "Det oppstod en feil under godkjennelse av invitasjonen", + "An error occurred while rejecting an invitation" : "Det oppstod en feil under avvisning av invitasjonen", + "{guest} (guest)" : "{guest} (gjest)", + "An error occurred while submitting your vote" : "Det oppstod en feil under innsending av stemmen", + "An error occurred while ending the poll" : "Det oppstod en feil under avslutning av avstemningen", + "Poll \"{name}\" was created by {user}. Click to vote" : "Avstemning \"{name}\" ble opprettet av {user}. Klikk for å stemme.", + "Failed to add reaction" : "Å legge til reaksjon feilet", + "Failed to remove reaction" : "Fjerning av reaksjon feilet", + "Error while uploading file \"{fileName}\"" : "Feil under opplasting av fil \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Ikke nok ledig plass til å laste opp fil \"{fileName}\"", + "You are not allowed to share files" : "Du har ikke lov til å dele filer", + "Error while sharing file" : "Feil under deling av fil", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nettleseren du bruker støttes ikke fullt ut av Nextcloud Talk. Bruk den nyeste versjonen av Mozilla Firefox, Microsoft Edge, Google Chrome, Opera eller Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Om %n time","Om %n timer"], + "_%n minute _::_%n minutes_" : ["%n minutt","%n minutter"], + "In {hours} and {minutes}" : "Om {hours} og {minutes}", + "_In %n minute_::_In %n minutes_" : ["Om %n minutt","Om %n minutter"], + "Later today – {timeLocale}" : "Senere i dag – {timeLocale}", + "Tomorrow – {timeLocale}" : "I morgen – {timeLocale}", + "This weekend – {timeLocale}" : "Denne helgen – {timeLocale}", + "Next week – {timeLocale}" : "Neste uke – {timeLocale}", + "Conversation link copied to clipboard" : "Kobling til samtale kopiert til utklippstavlen", + "The link could not be copied" : "Koblingen kunne ikke kopieres", + "Error while parsing a PROPFIND error" : "Feil under analyse av en PROPFIND-feil", + "Sending signaling message has failed" : "Sending av signalmelding feilet", + "Lost connection to signaling server. Trying to reconnect." : "Mistet forbindelsen til signalserveren. Prøver å koble til igjen.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Den konfigurerte signalserveren må oppdateres for å være kompatibel med denne versjonen av Talk. Ta kontakt med administrasjonen.", + "Please reload the page." : "Last inn siden på nytt.", + "Do not disturb" : "Ikke forstyrr", + "Away" : "Borte", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Høyttaler {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Du ser ut til å snakke mens du er dempet, vær så snill å slå på lyden for at andre skal høre deg", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Kunne ikke etablere en forbindelse med minst én deltaker. En TURN-server kan være nødvendig for scenariet ditt. Be administratoren om å konfigurere en etter {linkstart}denne dokumentasjonen{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dette tar lengre tid enn forventet. Er medietillatelsene allerede gitt (eller avvist)? Hvis ja, vennligst start nettleseren på nytt, da lyd og video svikter.", + "Access to microphone & camera is only possible with HTTPS" : "Tilgang til mikrofon og kamera er kun mulig via HTTPS", + "Please move your setup to HTTPS" : "Flytt oppsettet ditt til HTTPS", + "Access to microphone & camera was denied" : "Tilgang til mikrofon og kamera var avvist", + "WebRTC is not supported in your browser" : "WebRTC er ikke støttet av din nettleser", + "Please use a different browser like Firefox or Chrome" : "Bruk en annen nettleser, som Firefox eller Chrome", + "Error while accessing microphone & camera" : "Feil med tilgang til mikrofon og kamera", + "%s Talk on your mobile devices" : "%s Talk på dine mobile enheter", + "Join conversations at any time, anywhere, on any device." : "Bli med i samtaler når som helst, hvor som helst, på hvilken som helst enhet.", + "Android app" : "Android-app", + "iOS app" : "iOS-app", + "__language_name__" : "Norsk bokmål", + "Call summary (%s)" : "Samtalesammendrag (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Samtalesammendragsroboten legger ut en oversiktsmelding etter samtalen som viser alle deltakerne og skisserer oppgaver", + "Tasks" : "Oppgaver", + "Notes" : "Notater", + "Reports" : "Rapporter", + "Call summary" : "Samtalesammendrag", + "Call summary - {title}" : "Samtalesammendrag - {title}", + "Join conversations from remote Nextcloud servers" : "Bli med i samtaler fra eksterne Nextcloud-servere", + "Set reminder for later today" : "Sett påminnelse til senere i dag", + "Set reminder for tomorrow" : "Sett påminnelse for i morgen", + "Set reminder for this weekend" : "Sett påminnelse for denne helgen", + "Set reminder for next week" : "Sett påminnelse for neste uke", + "Open poll • You voted already" : "Åpen avstemning • Du har stemt allerede", + "Open poll • Click to vote" : "Åpen avstemning • Klikk for å stemme", + "Poll • Ended" : "Avstemning • Avsluttet", + "Talk recording from {time} ({conversation})" : "Taleopptak fra {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Avstemningsresultater • %n stemme","Avstemningsresultater • %n stemmer"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Åpen avstemning • %n stemme","Åpen avstemning • %n stemmer"], + "Submit vote" : "Send inn stemme", + "Your privacy setting has been saved" : "Personverninnstillingen din er lagret", + "Failed to save sounds setting" : "Kunne ikke lagre lydinnstillingen", + "Sounds setting saved" : "Lydinnstilling lagret", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du ble med i samtalen i et annet vindu eller på en annen enhet. Dette støttes for øyeblikket ikke av Nextcloud Talk, så denne økten ble lukket." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/nl.js b/l10n/nl.js new file mode 100644 index 0000000..e28ac5d --- /dev/null +++ b/l10n/nl.js @@ -0,0 +1,1750 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "een gesprek", + "(Duration %s)" : "(Duur %s)", + "You attended a call with {user1}" : "Je nam deel aan een oproep met {user1}", + "_%n guest_::_%n guests_" : ["%n gast","%n gasten"], + "You attended a call with {user1} and {user2}" : "Je nam deel aan een oproep met {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Je nam deel aan een oproep met {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Je nam deel aan een oproep met {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Je nam deel aan een oproep met {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n andere","%n anderen"], + "{actor} invited you to {call}" : "{actor} heeft je uitgenodigd voor telefoongesprek {call}", + "You were invited to a conversation or had a call" : "Je bent uitgenodigd voor een gesprek of had een oproep", + "Other activities" : "Andere activiteiten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Welkom bij Nextcloud Talk!\nIn dit gesprek vertellen we je over de nieuwe functies die beschikbaar zijn in Nextcloud Talk.", + "## New in Talk %s" : "## Nieuw in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge en Safari kunnen nu worden gebruikt om deel te nemen aan audio- en videogesprekken", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- een-op-eengesprekken zijn nu blijvend en kunnen niet meer per ongeluk in groepsgesprekken worden veranderd. Wanneer een deelnemer het gesprek verlaat, wordt het gesprek daarnaast niet meer automatisch verwijderd. Alleen als beide deelnemers vertrekken, wordt het gesprek van de server verwijderd.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Je kunt nu alle deelnemers op de hoogte stellen door \"@all\" in de chat te plaatsen", + "- With the \"arrow-up\" key you can repost your last message" : "- Met de \"pijl-omhoog\"-toets kun je je laatste bericht opnieuw plaatsen", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk heeft nu ook commando's: stuur \"/help\" als chatbericht om te zien of er commando's door de beheerder zijn ingesteld", + "- With projects you can create quick links between conversations, files and other items" : "- Met projecten kun je snel links maken tussen gesprekken, bestanden en andere objecten", + "- You can now mention guests in the chat" : "- Je kunt nu gasten in de chat vernoemen met een mention", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Gesprekken kunnen nu een lobby hebben. Dit stelt moderators in staat om alvast deel te nemen aan de chat en het gesprek om de vergadering voor te bereiden, terwijl gebruikers en gasten moeten wachten", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Je kunt nu direct op berichten reageren, zodat je andere gebruikers meer context kunt geven over de inhoud van je bericht", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Zoeken naar gesprekken en deelnemers filtert nu ook je bestaande gesprekken, waardoor het veel gemakkelijker wordt om eerdere gesprekken te vinden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Je kunt nu aangepaste gebruikersgroepen toevoegen aan gesprekken wanneer de kringen-app is geïnstalleerd", + "- Check out the new grid and call view" : "- Een nieuw raster- en oproepoverzicht", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Je kunt bestanden nu rechtstreeks vanaf je apparaat naar de chat uploaden en slepen", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Gedeelde bestanden worden nu direct geopend in het chatvenster met de viewer-apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- Je kunt nu naar chats en berichten zoeken via de geïntegreerde zoekfunctie in de bovenste balk", + "- Spice up your messages with emojis from the emoji picker" : "- Geef je berichten meer pit met emoji's uit de emoji-kiezer", + "- You can now change your camera and microphone while being in a call" : "- Je kunt nu je camera en microfoon wijzigen tijdens een telefoongesprek", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Geef je gesprekken wat context met een beschrijving en open ze zodat ingelogde gebruikers ze kunnen vinden en zelf kunnen deelnemen", + "- See a read status and send failed messages again" : "- Zie een leesstatus en verzend mislukte berichten opnieuw", + "- Raise your hand in a call with the R key" : "- Steek tijdens een telefoongesprek je hand op met de R-toets", + "- Join the same conversation and call from multiple devices" : "- Neem deel aan en bel in hetzelfde gesprek vanaf meerdere apparaten", + "- Send voice messages, share your location or contact details" : "- Verstuur gesproken berichten, deel jou locatie of contact informatie", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Voeg groepen toe aan een gesprek en nieuwe groepsleden worden automatisch toegevoegd als deelnemers", + "- A preview of your audio and video is shown before joining a call" : "- Een preview van je audio en video wordt getoond voor het deelnemen aan een gesprek", + "- You can now blur your background in the newly designed call view" : "- Je kunt nu je achtergrond vervagen in het nieuw ontworpen gespreksoverzicht", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren kunnen nu algemene en individuele machtigingen aan deelnemers toekennen", + "- You can now react to chat messages" : "- Je kunt nu reageren op chat berichten", + "- In the sidebar you can now find an overview of the latest shared items" : "- In de zijbalk kun je nu een overzicht vinden van de laatst gedeelde objecten", + "- Use a poll to collect the opinions of others or settle on a date" : "- Bevraag de mening van anderen of gebruik een peiling om een datum te kiezen", + "- Configure an expiration time for chat messages" : "- Een vervaltijd voor chatberichten configureren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start gesprekken zonder anderen op de hoogte te stellen in grote gesprekken. U kunt individuele gespreksmeldingen sturen zodra het gesprek is gestart.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatberichten verzenden zonder de ontvangers hiervan op de hoogte te stellen voor gevallen dat het bericht niet dringend is", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoji's kunnen nu automatisch worden aangevuld door een \":\" te typen", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Koppel verschillende items met behulp van de nieuwe Smart Picker door een \"/\" te typen", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators kunnen nu breakout rooms creëeren (High-performance backend is noodzakelijk)", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Berichten kunnen nu worden aangepast door ingelogde auteurs en moderators tot maximaal 6 uur.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators kunnen nu accounts en gasten verbannen om te voorkomen dat ze terug komen in een gesprek.", + "- Schedule a meeting into your calendar from within a conversation" : "- Plan een vergadering in je eigen agenda vanuit het gesprek", + "- Moderators can now pin messages so they are kept at the top" : "- Moderators kunnen nu berichten vastzetten zodat ze bovenaan blijven staan.", + "_All %n participant_::_All %n participants_" : ["%n deelnemer","Alle %n deelenemers"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reactie verwijderd door schrijver", + "{actor} created the conversation" : "{actor} heeft het gesprek gemaakt", + "You created the conversation" : "Je hebt het gesprek gemaakt", + "System created the conversation" : "System heeft het gesprek aangemaakt", + "An administrator created the conversation" : "Een beheerder heeft het gesprek gemaakt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hernoemde gesprek van \"%1$s\" naar \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Je hernoemde het gesprek van \"%1$s\" naar \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Een beheerder hernoemde het gesprek van \"%1$s\" naar \"%2$s\"", + "{actor} set the description" : "{actor} de beschrijving ingesteld", + "You set the description" : "Jij hebt de beschrijving ingesteld", + "An administrator set the description" : "Een beheerder heeft de beschrijving ingesteld", + "{actor} removed the description" : "{actor} verwijderde de beschrijving", + "You removed the description" : "Jij verwijderde de beschrijving", + "An administrator removed the description" : "Een beheerder verwijderde de beschrijving", + "You started a silent call" : "Je startte een stille oproep", + "{actor} started a silent call" : "{actor} startte een stille oproep", + "You started a call" : "Je startte een telefoongesprek", + "{actor} started a call" : "{actor} startte een telefoongesprek", + "Incoming call" : "Inkomend gesprek", + "{actor} joined the call" : "{actor} heeft zich bij het telefoongesprek aangesloten", + "You joined the call" : "Je hebt je bij de oproep aangesloten", + "{actor} left the call" : "{actor} heeft de oproep verlaten", + "You left the call" : "Je hebt het telefoongesprek verlaten", + "{actor} unlocked the conversation" : "{actor} heeft het gesprek ontgrendeld", + "You unlocked the conversation" : "Je hebt het gesprek ontgrendeld.", + "An administrator unlocked the conversation" : "Een beheerder heeft het gesprek ontgrendeld", + "{actor} locked the conversation" : "{actor} heeft het gesprek vergrendeld", + "You locked the conversation" : "Je hebt het gesprek vergrendeld", + "An administrator locked the conversation" : "Een beheerder heeft het gesprek vergrendeld", + "{actor} limited the conversation to the current participants" : "{actor} heeft het gesprek beperkt tot de huidige deelnemers", + "You limited the conversation to the current participants" : "Je hebt het gesprek beperkt tot de huidige deelnemers", + "An administrator limited the conversation to the current participants" : "Een beheerder heeft het gesprek beperkt tot de huidige deelnemers", + "{actor} opened the conversation to registered users" : "{actor} heeft het gesprek geopend voor geregistreerde gebruikers", + "You opened the conversation to registered users" : "Je hebt het gesprek geopend voor geregistreerde gebruikers", + "An administrator opened the conversation to registered users" : "Een beheerder heeft het gesprek geopend voor geregistreerde gebruikers", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} heeft het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "You opened the conversation to registered users and users created with the Guests app" : "Je hebt het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Een beheerder heeft het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "The conversation is now open to everyone" : "Het gesprek is nu open voor iedereen", + "{actor} opened the conversation to everyone" : "{actor} heeft het gesprek voor iedereen geopend", + "You opened the conversation to everyone" : "Je hebt het gesprek voor iedereen geopend", + "{actor} restricted the conversation to moderators" : "{actor} beperkte het gesprek tot moderators", + "You restricted the conversation to moderators" : "Je hebt het gesprek beperkt tot moderators", + "{actor} started breakout rooms" : "{actor} startte aparte vergaderruimtes", + "You started breakout rooms" : "Je startte aparte vergaderruimtes", + "{actor} stopped breakout rooms" : "{actor} beëindigde aparte vergaderruimtes", + "You stopped breakout rooms" : "Je beëindigde aparte vergaderruimtes", + "{actor} allowed guests" : "{actor} heeft gasten toegelaten", + "You allowed guests" : "Je hebt gasten toegelaten", + "An administrator allowed guests" : "Een beheerder heeft gasten toegelaten", + "{actor} disallowed guests" : "{actor} heeft gasten geweigerd", + "You disallowed guests" : "Je hebt gasten geweigerd", + "An administrator disallowed guests" : "Een beheerder heeft gasten geweigerd", + "{actor} set a password" : "{actor} heeft een wachtwoord ingesteld", + "You set a password" : "Je hebt een wachtwoord ingesteld", + "An administrator set a password" : "Een beheerder heeft een wachtwoord ingesteld", + "{actor} removed the password" : "{actor} heeft het wachtwoord verwijderd", + "You removed the password" : "Je hebt het wachtwoord verwijderd", + "An administrator removed the password" : "Een beheerder heeft het wachtwoord verwijderd", + "{actor} added {user}" : "{actor} heeft {user} toegevoegd", + "You joined the conversation" : "Je neemt deel aan het gesprek", + "{actor} joined the conversation" : "{actor} neemt deel aan het gesprek", + "You added {user}" : "Je hebt {user} toegevoegd", + "{actor} added you" : "{actor} heeft jou toegevoegd", + "An administrator added you" : "Een beheerder heeft jou toegevoegd", + "An administrator added {user}" : "Een beheerder heeft {user} toegevoegd", + "You left the conversation" : "Je hebt het gesprek verlaten", + "{actor} left the conversation" : "{actor} heeft het gesprek verlaten", + "{actor} removed {user}" : "{actor} heeft {user} verwijderd", + "You removed {user}" : "Je hebt {user} verwijderd", + "{actor} removed you" : "{actor} heeft jou verwijderd", + "An administrator removed you" : "Een beheerder heeft jou verwijderd", + "An administrator removed {user}" : "Een beheerder heeft {user} verwijderd", + "{actor} invited {federated_user}" : "{actor} nodigde {federated_user} uit", + "You invited {federated_user}" : "Je nodigde {federated_user} uit", + "You accepted the invitation" : "Je hebt de uitnodiging geaccepteerd", + "{actor} invited you" : "{actor} heeft je uitgenodigd", + "An administrator invited you" : "Een beheerder heeft je uitgenodigd", + "An administrator invited {federated_user}" : "Een beheerder heeft {federated_user} uitgenodigd", + "{federated_user} accepted the invitation" : "{federated_user} heeft de uitnodiging geaccepteerd", + "{actor} removed {federated_user}" : "{actor} heeft {federated_user} verwijderd", + "You removed {federated_user}" : "Jij hebt {federated_user} verwijderd", + "You declined the invitation" : "Je hebt de uitnodiging afgewezen", + "An administrator removed {federated_user}" : "Een beheerder heeft {federated_user} verwijderd", + "{federated_user} declined the invitation" : "{federated_user} heeft de uitnodiging geweigerd", + "{actor} added group {group}" : "{actor} voegde groep {group} toe", + "You added group {group}" : "Je voegde groep {group} toe", + "An administrator added group {group}" : "Een beheerder voegde groep {group} toe", + "{actor} removed group {group}" : "{actor} verwijderde groep {group}", + "You removed group {group}" : "Je verwijderde groep {group}", + "An administrator removed group {group}" : "Een beheerder verwijderde groep {group}", + "{actor} added team {circle}" : "{actor} voegde team {circle} toe", + "You added team {circle}" : "Je voegde team {circle} toe", + "An administrator added team {circle}" : "Een beheerder voegde team {circle} toe", + "{actor} removed team {circle}" : "{actor} verwijderde team {circle}", + "You removed team {circle}" : "Je verwijderde team {circle}", + "An administrator removed team {circle}" : "Een beheerder heeft team {circle} verwijderd", + "{actor} added {phone}" : "{actor} voegde {phone} toe", + "You added {phone}" : "Je voegde {phone} toe.", + "An administrator added {phone}" : "Een beheerder heeft {phone} toegevoegd", + "{actor} removed {phone}" : "{actor} verwijderde {phone}", + "You removed {phone}" : "Je verwijderde {phone}", + "An administrator removed {phone}" : "Een beheerder heeft {phone} verwijderd", + "{actor} promoted {user} to moderator" : "{actor} heeft {user} bevorderd tot moderator", + "You promoted {user} to moderator" : "Je hebt {user} bevorderd tot moderator", + "{actor} promoted you to moderator" : "{actor} heeft jou tot moderator bevorderd", + "An administrator promoted you to moderator" : "Een beheerder heeft jou tot moderator bevorderd", + "An administrator promoted {user} to moderator" : "Een beheerder heeft {user} tot moderator bevorderd", + "{actor} demoted {user} from moderator" : "{actor} heeft {user} gedegradeerd als moderator", + "You demoted {user} from moderator" : "Je hebt {user} gedegradeerd als moderator", + "{actor} demoted you from moderator" : "{actor} heeft jou uit gedegradeerd als moderator", + "An administrator demoted you from moderator" : "Een beheerder heeft jou gedegradeerd als moderator", + "An administrator demoted {user} from moderator" : "Een beheerder heeft {user} gedegradeerd als moderator", + "{actor} shared a file which is no longer available" : "{actor} heeft een bestand gedeeld dat niet meer beschikbaar is", + "You shared a file which is no longer available" : "Je hebt een bestand gedeeld dat niet meer beschikbaar is", + "File shares are currently not supported in federated conversations" : "Bestandsdelen is momenteel niet ondersteund in gesprekken met andere Nextcloud servers", + "The shared location is malformed" : "De gedeelde locatie heeft een onjuiste opgemaakt", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} heeft Matterbridge opgezet om dit gesprek te synchroniseren met andere chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Je hebt Matterbridge opgezet om dit gesprek te synchroniseren met andere chats.", + "{actor} updated the Matterbridge configuration" : "{actor} heeft de Matterbridge-configuratie aangepast", + "You updated the Matterbridge configuration" : "Je hebt de Matterbridge-configuratie aangepast", + "{actor} removed the Matterbridge configuration" : "{actor} heeft de Matterbridge-configuratie verwijderd", + "You removed the Matterbridge configuration" : "Je hebt de Matterbridge-configuratie verwijderd", + "{actor} started Matterbridge" : "{actor} heeft Matterbridge gestart", + "You started Matterbridge" : "Je hebt Matterbridge gestart", + "{actor} stopped Matterbridge" : "{actor} heeft Matterbridge gestopt", + "You stopped Matterbridge" : "Je hebt Matterbridge gestopt", + "{actor} deleted a message" : "{actor} verwijderde een bericht", + "You deleted a message" : "Je verwijderde een bericht", + "{actor} edited a message" : "{actor} bewerkte een bericht", + "You edited a message" : "Je bewerkte een bericht", + "{actor} deleted a reaction" : "{actor} verwijderde een bericht.", + "You deleted a reaction" : "Je verwijderde een bericht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n week","Je hebt de vervalperiode voor berichten ingesteld op %n weken"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n dag","Je hebt de vervalperiode voor berichten ingesteld op %n dagen"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n uur","Je hebt de vervalperiode voor berichten ingesteld op %n uren"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n minuut","Je hebt de vervalperiode voor berichten ingesteld op %n minuten"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n week","{actor} heeft de vervalperiode voor berichten ingesteld op %n weken"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n dag","{actor} heeft de vervalperiode voor berichten ingesteld op %n dagen"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n uur","{actor} heeft de vervalperiode voor berichten ingesteld op %n uren"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n minuut","{actor} heeft de vervalperiode voor berichten ingesteld op %n minuten"], + "{actor} disabled message expiration" : "{actor} heeft berichtverval uitgeschakeld", + "You disabled message expiration" : "Jij hebt berichtverval uitgeschakeld", + "{actor} cleared the history of the conversation" : "{actor} heeft de gesprekshistorie leeggemaakt", + "You cleared the history of the conversation" : "Je hebt de gesprekshistorie schoongemaakt", + "{actor} set the conversation picture" : "{actor} heeft de gespreksafbeelding ingesteld", + "You set the conversation picture" : "Jij hebt de gespreksafbeelding ingesteld", + "{actor} removed the conversation picture" : "{actor} heeft de gespreksafbeelding verwijderd", + "You removed the conversation picture" : "Jij hebt de gespreksafbeelding verwijderd", + "{actor} ended the poll {poll}" : "{actor} beëindigde de peiling {poll}", + "You ended the poll {poll}" : "Je beëindigde de peiling {poll}", + "{actor} started the video recording" : "{actor} startte de video-opname", + "You started the video recording" : "Jij startte de video-opname", + "{actor} stopped the video recording" : "{actor} beëindigde de video-opname", + "You stopped the video recording" : "Jij beëindigde de video-opname", + "{actor} started the audio recording" : "{actor} startte de audio-opname", + "You started the audio recording" : "Jij startte de audio-opname", + "{actor} stopped the audio recording" : "{actor} beëindigde de audio-opname", + "You stopped the audio recording" : "Jij beëindigde de audio-opname", + "The recording failed" : "De opname is mislukt", + "Someone voted on the poll {poll}" : "Iemand heeft gestemd op de enquête {poll}", + "Message deleted by author" : "Bericht verwijderd door de schrijver", + "Message deleted by {actor}" : "Bericht verwijderd door {actor}", + "Message deleted by you" : "Bericht verwijderd door jou", + "Deleted user" : "Verwijderen gebruiker", + "Unknown number" : "Onbekend aantal", + "Administration" : "Beheer", + "System" : "Systeem", + "%s (guest)" : "%s (gast)", + "Call ended (Duration {duration})" : "Gesprek beëindigd (duur {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} beëindigde het gesprek (duur {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Gesprek met %n gast is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})","Gesprek met %n gasten is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Gesprek met %n gast is beëindigd (duur {duration})","Oproep met%n gasten is beëindigd (duur {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} beëindigde het gesprek met %n gasten (Duration {duration})","{actor} beëindigde het gesprek met %n gasten (Looptijd {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1} ended (Duration {duration})" : "Gesprek met {user1} is beëindigd (duur {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1} (Looptijd {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1} en {user2} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Gesprek met {user1} en {user2} is beëindigd (duur {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1} en {user2} (Looptijd {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2} en {user3} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Gesprek met {user1}, {user2} en {user3} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2} en {user3} (Looptijd {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3} en {user4} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3} en {user4} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2}, {user3} en {user4} (Looptijd {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3}, {user4} en {user5}is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3}, {user4} en {user5} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2}, {user3}, {user4} en {user5} (Looptijd {duration})", + "Message of {user} in {conversation}" : "Bericht van {user} in {conversation}", + "Message of {user}" : "Bericht van {user}", + "Message of a deleted user in {conversation}" : "Bericht van een verwijderde gebruiker in {conversation}", + "Talk conversations" : "Talk gesprekken", + "Talk to %s" : "Spreek met %s", + "An error occurred. Please contact your administrator." : "Er is een fout opgetreden. Neem contact op met de beheerder a.u.b.", + "Storage quota exceeded" : "Opslagquotum overschreden", + "File not found" : "Bestand niet gevonden", + "File is not shared, or shared but not with the user" : "Bestand is niet gedeeld, of wel gedeeld maar niet met de gebruiker", + "No account available to delete." : "Geen account beschikbaar om te verwijderen.", + "Poll" : "Peiling", + "Password needs to be set" : "Wachtwoord moet ingesteld worden", + "Uploading the file failed" : "Uploaden bestand mislukt", + "No image file provided" : "Geen afbeelding opgegeven", + "File is too big" : "Bestand te groot", + "Invalid file provided" : "Ongeldig bestand aangeleverd", + "Invalid image" : "Ongeldige afbeelding", + "Unknown filetype" : "Onbekend bestandsformaat", + "Talk mentions" : "Talk vermeldingen", + "More conversations" : "Meer gesprekken", + "Say hi to your friends and colleagues!" : "Zeg hallo tegen je vrienden en collega's!", + "No unread mentions" : "Geen ongelezen vermeldingen", + "Call in progress" : "Oproep is bezig", + "You were mentioned" : "Je werd vermeld", + "Write to conversation" : "Schrijf naar gesprek", + "Writes event information into a conversation of your choice" : "Schrijft gebeurtenisinformatie in een gesprek naar keuze", + "Missing email field in header line" : "E-mailveld mist in header-regel", + "Following lines are invalid: %s" : "De volgende regels zijn onjuist: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s nodigde je uit voor gesprek \"%2$s\".", + "You were invited to conversation \"%s\"." : "Je bent uitgenodigd voor gesprek \"%s\".", + "Conversation invitation" : "Gespreksuitnodiging", + "Description" : "Beschrijving", + "You can also dial-in via phone with the following details" : "Je kunt ook via telefoon inbellen met behulp van deze informatie", + "Dial-in information" : "Inbelinformatie", + "Meeting ID" : "Vergader-ID", + "Your PIN" : "Jouw PIN", + "Click the button below to join the lobby now." : "Klik op de onderstaan knop om in de lobby te komen", + "Click the link below to join the lobby now." : "Klik op de onderstaande link om in de lobby te komen", + "Join lobby for \"%s\"" : "Meldt je aan in de lobby voor \"%s\"", + "Click the button below to join the conversation now." : "Klik op de onderstaande knop om nu deel te nemen aan het gesprek.", + "Click the link below to join the conversation now." : "Klik op de onderstaande link om nu deel te namen aan het gesprek.", + "Meeting" : "Vergadering", + "Password request: %s" : "Wachtwoordverzoek: %s", + "Private conversation" : "Privégesprek", + "Deleted user (%s)" : "Verwijderde gebruiker (%s)", + "Failed to upload call recording" : "Upload gespreksopname mislukt", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "De opnameserver kon de gespreksopname {call} niet uploaden. Neem contact op met de administratie a.u.b.", + "Share to chat" : "Deel met chat", + "Dismiss notification" : "Handel melding af", + "Call recording now available" : "Gespreksopname nu beschikbaar", + "The recording for the call in {call} was uploaded to {file}." : "De opname van gesprek {call} is geüpload naar {file}", + "Transcript now available" : "Transcript nu beschikbaar", + "The transcript for the call in {call} was uploaded to {file}." : "De transcript voor gesprek {call} is geüpload naar {file}", + "Failed to transcript call recording" : "Transripten van gespreksopname is mislukt", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "De server kon de de opname van gesprek {call} niet transcriberen naar {file}. Neem contact op met de administratie a.u.b.", + "Call summary now available" : "Gesprekssamenvatting nu beschikbaar", + "The summary for the call in {call} was uploaded to {file}." : "De samenvatting van gesprek {call} is geüpload naar {file}.", + "Failed to summarize call recording" : "Samenvatten van gespreksopname is mislukt", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "De server kon gesprek {call} niet samenvatten naar{file}. Neem contact op met de administratie a.u.b.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} heeft je uitgenodigd om deel te nemen aan {roomName} op {remoteServer}", + "Accept" : "Accepteren", + "Decline" : "Afwijzen", + "{user1} invited you to a federated conversation" : "{user1} nodigde je uit voor een gefederaliseerd gesprek", + "New message" : "Nieuw bericht", + "Reminder" : "Herinnering", + "Notification" : "Melding", + "Someone reacted in a private conversation" : "Iemand reageerde in een privégesprek", + "You received a message in a private conversation" : "Je hebt een bericht ontvangen in een privégepsrek", + "Reminder in a private conversation" : "Herinnering in een privégesprek", + "Someone mentioned you in a private conversation" : "Iemand heeft je genoemd in een privégesprek", + "Notification in a private conversation" : "Melding in een privégesprek", + "Reminder: You in {call}" : "Herinnering: Jij in {call}", + "Reminder: {user} in {call}" : "Herinnering: {user} in {call}", + "Reminder: Deleted user in {call}" : "Herinnering: Verwijderde gebruiker in {call}", + "Reminder: {guest} (guest) in {call}" : "Herinnering: {guest} (gast) in {call}", + "Reminder: Guest in {call}" : "Herinnering: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reageerde meth {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reageerde met {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Verwijderde gebruiker reageerde met {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gast) reageerde met {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reageerde met {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gebruiker verwijderd in {call}", + "{guest} (guest) in {call}" : "{guest} (gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} heeft je een privébericht gestuurd", + "{user} sent a message in conversation {call}" : "{user} heeft een bericht gestuurd in gesprek {call}", + "A deleted user sent a message in conversation {call}" : "Een verwijderde gebruiker heeft een bericht gestuurd in gesprek {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gast) heeft een bericht gestuurd in gesprek {call}", + "A guest sent a message in conversation {call}" : "Een gast heeft een bericht gestuurd in gesprek {call}", + "{user} replied to your private message" : "{user} heeft op jouw privébericht gereageerd", + "{user} replied to your message in conversation {call}" : "{user} heeft op jouw bericht gereageerd in gesprek {call}", + "A deleted user replied to your message in conversation {call}" : "Een verwijderde gebruiker heeft op jouw bericht gereageerd in gesprek {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gast) heeft op jouw bericht gereageerd in gesprek {call}", + "A guest replied to your message in conversation {call}" : "Een gast heeft op jouw bericht gereageerd in gesprek {call}", + "Reminder: You in private conversation {call}" : "Herinnering: Jij in een privégesprek {call}", + "Reminder: A deleted user in private conversation {call}" : "Herinnering: Een verwijderde gebruiker in privégesprek {call}", + "Reminder: {user} in private conversation" : "Herinnering: {user} in privégesprek", + "Reminder: You in conversation {call}" : "Herinnering: Jij in gesprek {call}", + "Reminder: {user} in conversation {call}" : "Herinnering: {user} in gesprek {call}", + "Reminder: A deleted user in conversation {call}" : "Herinnering: Een verwijderde gebruiker in gesprek {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Herinnering: {guest} in gesprek {call}", + "Reminder: A guest in conversation {call}" : "Herinnering: Een gast in gesprek {call}", + "{user} reacted with {reaction} to your private message" : "{user} heeft op jouw privébericht geantwoord met {reaction}", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Een verwijderde gebruiker heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gast) heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Een gast heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "{user} mentioned you in a private conversation" : "{user} heeft jou in een privégesprek vermeld", + "{user} mentioned group {group} in conversation {call}" : "{user} vermelde groep {group} in gesprek {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} vermelde team {team} in gesprek {call}", + "{user} mentioned everyone in conversation {call}" : "{user} vermelde iedereen in gesprek {call}", + "{user} mentioned you in conversation {call}" : "{user} heeft jou in vermeld in gesprek {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Een verwijderde gebruiker vermelde groep {group} in gesprek {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Een verwijderde gebruiker vermelde team {team} in gesprek {call}", + "A deleted user mentioned everyone in conversation {call}" : "Een verwijderde gebruiker vermelde iedereen in gesprek {call}", + "A deleted user mentioned you in conversation {call}" : "Een verwijderde gebruiker heeft jou vermeld in gesprek {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gast) vermelde groep {group} in gesprek {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gast) vermelde team {team} in gesprek{call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gast) vermelde iedereen in gesprek {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gast) heeft jou vermeld in gesprek {call}", + "A guest mentioned group {group} in conversation {call}" : "Een gast vermelde groep {group} in gesprek {call}", + "A guest mentioned team {team} in conversation {call}" : "Een gast vermelde team {team} in gesprek {call}", + "A guest mentioned everyone in conversation {call}" : "Een gast vermelde iedereen in gesprek {call}", + "A guest mentioned you in conversation {call}" : "Een gast heeft jou vermeld in gesprek {call}", + "View message" : "Toon bericht", + "Dismiss reminder" : "Sluit herinnering", + "View chat" : "Bekijk chat", + "{user} invited you to a group conversation: {call}" : "{user} nodigde je uit voor een groepsgesprek: {call}", + "Join call" : "Deelnemen aan oproep", + "Answer call" : "Oproep beantwoorden", + "{user} would like to talk with you" : "{user} wil met je spreken", + "Call back" : "Terugbellen", + "You missed a call from {user}" : "Je hebt een gesprek gemist van {user}", + "A group call has started in {call}" : "Groepsgesprek is begonnen in {call}", + "You missed a group call in {call}" : "Je hebt een groepsgesprek gemist in {call}", + "{email} is requesting the password to access {file}" : "{email} verzoekt het wachtwoord voor toegang tot {file}", + "{email} tried to request the password to access {file}" : "{email} heeft geprobeerd het wachtwoord op te vragen voor toegang tot {file}", + "Someone is requesting the password to access {file}" : "Iemand verzoekt het wachtwoord voor toegang tot {file}", + "Someone tried to request the password to access {file}" : "Iemand heeft geprobeerd het wachtwoord op te vragen voor toegang tot {file}", + "Open settings" : "Instellingen openen", + "Hosted signaling server added" : "Gehoste signaling server toegevoegd", + "The hosted signaling server is now configured and will be used." : "De gehoste signaleringsserver is nu geconfigureerd en zal worden gebruikt.", + "Hosted signaling server removed" : "Gehoste signaling server verwijderd", + "The hosted signaling server was removed and will not be used anymore." : "De gehoste signaleringsserver is verwijderd en zal niet meer worden gebruikt.", + "Hosted signaling server changed" : "Gehoste signaling server veranderd", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Het account van gehoste signaleringsserver heeft de status gewijzigd van \"{oldstatus}\" naar \"{newstatus}\".", + "pending" : "in behandeling", + "active" : "actief", + "expired" : "verlopen", + "blocked" : "geblokkeerd", + "error" : "fout", + "The certificate of {host} expires in {days} days" : "Het certificaat van {host} loopt af in {days} dagen", + "The certificate of {host} expired" : "Het certificaat van {host} is afgelopen", + "Contact via Talk" : "Contacteer via Talk", + "Open Talk" : "Open Talk", + "Default" : "Standaard", + "Presentation" : "Presentatie", + "Voice room" : "Spraak room", + "Conversations" : "Gesprekken", + "Messages in current conversation" : "Berichten in huidig gesprek", + "{user}" : "{user}", + "Messages" : "Berichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Berichten in andere gesprekken", + "One-to-one rooms always need to show the other users avatar" : "Een-op-een gesprekken moeten altijd de avatar van de andere gebruiker laten zien", + "Invalid emoji character" : "Ongeldig emoji-teken", + "Invalid background color" : "Ongeldige achtergrondkleur", + "Avatar image is not square" : "Avatar afbeelding is niet vierkant", + "Room {number}" : "Vergaderruimte {number}", + "Other" : "Andere", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Het aanvragen van een proefversie is mislukt, omdat de proefserver niet bereikbaar is. Probeer het later opnieuw.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Er is een probleem met authenticatie van deze instantie. Misschien is deze niet van buitenaf bereikbaar om de URL te verifiëren.", + "Something unexpected happened." : "Er is iets onverwachts gebeurd.", + "The URL is invalid." : "De URL is ongeldig.", + "An HTTPS URL is required." : "Een HTTPS-URL is vereist.", + "The email address is invalid." : "Het e-mailadres is ongeldig.", + "The language is invalid." : "De taal is ongeldig.", + "The country is invalid." : "Het land is ongeldig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Er is een probleem met de aanvraag van de proefversie. Controleer de logs voor meer informatie.", + "Too many requests are send from your servers address. Please try again later." : "Er worden te veel verzoeken verzonden vanaf het adres van je server. Probeer het later opnieuw.", + "There is already a trial registered for this Nextcloud instance." : "Er is al een proefversie geregistreerd voor deze Nextcloud-instantie.", + "Something unexpected happened. Please try again later." : "Er is iets onverwachts gebeurd. Probeer het later opnieuw.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Het aanvragen van een proefversie is mislukt, vanwege onjuist gedrag van de proefserver. Probeer het later opnieuw.", + "Trial requested but failed to get account information. Please check back later." : "De proefperiode is aangevraagd, maar het ophalen van accountinformatie is mislukt. Controleer het later nog eens.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Er is een probleem met de authenticatie van dit verzoek. Misschien is het niet van buitenaf bereikbaar om de URL te verifiëren.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Het ophalen van accountinformatie is mislukt, vanwege onjuist gedrag van de proefserver. Controleer het later nog eens.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Er is een probleem met het ophalen van de accountgegevens. Controleer de logs voor meer informatie.", + "There is no such account registered." : "Dit account is niet geregistreerd.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Het ophalen van accountinformatie is mislukt, omdat de proefserver niet bereikbaar is. Controleer het later opnieuw.", + "Deleting the hosted signaling server account failed. Please check back later." : "Het verwijderd van het account van de gehoste signaleringsserver is mislukt. Controleer het later opnieuw.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Het account kan niet worden verwijderd, vanwege onjuist gedrag van de proefserver. Controleer het later opnieuw.", + "There is a problem with deleting the account. Please check your logs for further information." : "Er is een probleem met het verwijderen van het account. Controleer de logboeken voor meer informatie.", + "Too many requests are sent from your servers address. Please try again later." : "Er worden te veel verzoeken verzonden vanaf je serveradres. Probeer het later opnieuw.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Het account kan niet worden verwijderd omdat de proefserver niet bereikbaar is. Controleer het later opnieuw.", + "Note to self" : "Notitie aan mijzelf", + "A place for your private notes, thoughts and ideas" : "Een plek voor je privénotities, gedachten en ideeën", + "Transcript is AI generated and may contain mistakes" : "Transript is gegenereerd via AI en kan fouten bevatten", + "Summary is AI generated and may contain mistakes" : "Samenvatting is gegenereerd via AI en kan fouten bevatten", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a veilige, zelf-gehost communicatie platform wat volledig integreerd met het Nextcloud ecosysteem.\n\n#### Belangrijkste mogelijkheden van Nextcloud Talk:\n\n* Chat and berichtjes in prive en groepsgesprekken\n* Audio en video gesprekken\n* Bestanden delen en integratie met andere Nextcloud applicaties\n* Aanpasbare gespreksinstellingen, moderatie en privacy instellingen\n* Browser, desktop en mobiele (iOS and Android) toegang\n* Private & veilige communicatie\n\nVind meer informatie in de [gebruikershandleiding](https://docs.nextcloud.com/server/latest/user_manual/nl/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welkom bij Nextcloud Talk\n\nNextcloud Talk is een privacy-vriendelijke en geavanceerde chat applicatie die diep met Nextcloud integreerd. Chat in privé of of groepsgesprekken, werk samen aan documenten of whiteboards tijdens audio of video gesprekken, webinars en gebeurtenissen organiseren, gesprekken modereren en nog veel meer.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Doe meer met Smart Picker\n\nTyp eenvoudig \"/\" of ga naar het menu \"+\" om de Smart Picker te openen, waar je verschillende inhoud aan je berichten kunt toevoegen. je kunt de Smart Picker zo configureren dat je items uit Nextcloud-apps, GIF's, kaartlocaties, door AI gegenereerde inhoud en nog veel meer kunt toevoegen.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Verenigde Arabische Emiraten", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua en Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanië", + "Armenia" : "Armenië", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentinië", + "American Samoa" : "Amerikaans Samoa", + "Austria" : "Oostenrijk", + "Australia" : "Australië", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbeidjan", + "Bosnia and Herzegovina" : "Bosnië en Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "België", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarije", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia, Plurinationale Staat ", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius en Saba", + "Brazil" : "Brazilië", + "Bahamas" : "Bahama's", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouveteiland", + "Botswana" : "Botswana", + "Belarus" : "Wit-Rusland", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocoseilanden", + "Congo, the Democratic Republic of the" : "Congo, Democratische Republiek", + "Central African Republic" : "Centraal Afrikaanse Republiek", + "Congo" : "Congo", + "Switzerland" : "Zwitserland", + "Côte d'Ivoire" : "Ivoorkust", + "Cook Islands" : "Cookeilanden", + "Chile" : "Chili", + "Cameroon" : "Kameroen", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Kaapverdië", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmaseiland", + "Cyprus" : "Cyprus", + "Czechia" : "Tsjechië", + "Germany" : "Duitsland", + "Djibouti" : "Djibouti", + "Denmark" : "Denemarken", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominicaanse Republiek", + "Algeria" : "Algerije", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypte", + "Western Sahara" : "Westelijke Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanje", + "Ethiopia" : "Ethiopië", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandeilanden", + "Micronesia, Federated States of" : "Micronesia, Federale Staten van", + "Faroe Islands" : "Faeröer", + "France" : "Frankrijk", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Verenigd Koninkrijk", + "Grenada" : "Grenada", + "Georgia" : "Georgië", + "French Guiana" : "Frans-Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatoriaal Guinea", + "Greece" : "Griekenland", + "South Georgia and the South Sandwich Islands" : "Zuid-Georgia en de Zuidelijke Sandwicheilanden", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard en McDonaldeilanden", + "Honduras" : "Honduras", + "Croatia" : "Kroatië", + "Haiti" : "Haïti", + "Hungary" : "Hongarije", + "Indonesia" : "Indonesië", + "Ireland" : "Ierland", + "Israel" : "Israel", + "Isle of Man" : "Man (eiland)", + "India" : "India", + "British Indian Ocean Territory" : "Brits Indische Oceaanterritorium", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamitische republiek", + "Iceland" : "IJsland", + "Italy" : "Italië", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordanië", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgizië", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratische Volksrepubliek", + "Korea, Republic of" : "Korea, Republiek", + "Kuwait" : "Koeweit", + "Cayman Islands" : "Kaaimaneilanden", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litouwen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letland", + "Libya" : "Libië", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavië, Republiek", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshalleilanden", + "North Macedonia" : "Noord-Macedonië", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolië", + "Macao" : "Macao", + "Northern Mariana Islands" : "Noordelijke Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanië", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Maleisië", + "Mozambique" : "Mozambique", + "Namibia" : "Namibië", + "New Caledonia" : "Nieuw Caledonië", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk {eiland)", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Noorwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nieuw Zeeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Frans-Polynesië", + "Papua New Guinea" : "Papoea-Nieuw-Guinea", + "Philippines" : "Filippijnen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre en Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Roemenië", + "Serbia" : "Servië", + "Russian Federation" : "Russische Federatie", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saoedi-Arabië", + "Solomon Islands" : "Salomonseilanden", + "Seychelles" : "Seychellen", + "Sudan" : "Soedan", + "Sweden" : "Zweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sint-Helena, Ascension en Tristan da Cunha", + "Slovenia" : "Slovenië", + "Svalbard and Jan Mayen" : "Spitsbergen en Jan Mayen", + "Slovakia" : "Slowakije", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalië", + "Suriname" : "Suriname", + "South Sudan" : "Zuid-Soedan", + "Sao Tome and Principe" : "Sao Tomé en Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrië", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- en Caicoseilanden", + "Chad" : "Tsjaad", + "French Southern Territories" : "Franse Zuidelijke en Antarctische Gebieden", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadzjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Oost-Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisië", + "Tonga" : "Tonga", + "Turkey" : "Turkije", + "Trinidad and Tobago" : "Trinidad en Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Oekraine", + "Uganda" : "Oeganda", + "United States Minor Outlying Islands" : "Kleine afgelegen eilanden van de Verenigde Staten", + "United States of America" : "Verenigde Staten van Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Oezbekistan", + "Holy See" : "Heilige Stoel", + "Saint Vincent and the Grenadines" : "Saint Vincent en de Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivariaanse Republiek", + "Virgin Islands, British" : "Maagdeneilanden, Britse", + "Virgin Islands, U.S." : "Maagdeneilanden, Amerikaanse ", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis en Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Zuid-Afrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Achtergrondvervaging", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Was niet in staat om WASM ondersteuning te verifieren. Kijk aub met de hand of uw webserver `.wasm` bestanden kan serveren naar de browser.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Uw webserver is niet correct ingesteld om `.wasm`-bestanden te leveren. Dit is meestal een probleem met de Nginx-configuratie. Voor achtergrondvervaging is een aanpassing nodig om ook `.wasm`-bestanden te leveren. Vergelijk uw Nginx-configuratie met de aanbevolen configuratie in onze documentatie.", + "Talk configuration values" : "Talk configuratie waarden", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Het forceren van een gespreksduur wordt alleen ondersteund met systeemcron. Schakel systeemcron in of verwijder de `max_call_duration`-configuratie.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-waarden (momenteel ingesteld op %d) zijn niet afdwingbaar vanwege technische beperkingen. De achtergrondtaak wordt slechts elke 5 minuten uitgevoerd, dus gebruik dit op eigen risico.", + "Federation" : "Federatie", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Het wordt sterk aanbevolen om \"memcache.locking\" te configureren wanneer Talk Federation is ingeschakeld.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Geen High-performance backend geconfigureerd. Als u Nextcloud Talk gebruikt zonder de High-performance backend, werkt dit alleen soepel voor zeer kleine gesprekken (max. 2-5 deelnemers). Insalleer de High-performance backend om ervoor te zorgen dat gesprekken met grotere aantallen deelnemers goed verlopen.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Het uitvoeren van de High-performance backend \"conversation_cluster\"-modus is verouderd en wordt niet langer ondersteund in de komende versie. De High-performance backend ondersteunt tegenwoordig echte clustering, die in plaats daarvan gebruikt zou moeten worden.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Het definiëren van meerdere High-performance backends is verouderd en wordt niet langer ondersteund in de komende versie. In plaats daarvan moet een load-balancer worden ingesteld samen met geclusterde signaleringsservers en geconfigureerd in de Talk-instellingen.", + "High-performance backend not configured correctly" : "High-performance backend niet correct geconfigureerd", + "Error: Cannot connect to server" : "Fout: Kan niet verbinden met de server", + "Error: Server did not respond with proper JSON" : "Fout: Server reageerde niet met een juiste JSON", + "Error: Certificate expired" : "Waarschuwing: servercertificaat is verlopen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fout: Systeemtijden van Nextcloud-server en High-performance backend-server zijn niet gesynchroniseerd. Zorg ervoor dat beide servers zijn verbonden met een tijdserver of synchroniseer hun tijd handmatig.", + "Could not get version" : "Kan versie niet verkrijgen", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fout: Versie in gebruik: {version}; De server dient geüpdate te worden om compatibel te zijn met deze versie van Talk", + "Error: Server responded with: {error}" : "Fout: Server gaf foutmelding: {error}", + "Error: Unknown error occurred" : "Fout: Onbekende fout opgetreden!", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Waarschuwwing: Huidige versie: {version}; Server ondersteund niet alle mogelijkheden van deze Talk versie, u mist: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Het wordt sterk aanbevolen om een ​​geheugencache te configureren wanneer u Nextcloud Talk uitvoert met een High-performance backend.", + "Recording backend" : "Opname backend", + "Using the recording backend requires a High-performance backend." : "Om de opname-backend te kunnen gebruiken, is de High Performance backend vereist.", + "No recording backend configured" : "Geen opname-backend geconfigureerd", + "SIP configuration" : "SIP configuratie", + "Using the SIP functionality requires a High-performance backend." : "Voor het gebruik van de SIP-functionaliteit is een backend met hoge prestaties vereist.", + "No SIP backend configured" : "Geen SIP-backend geconfigureerd", + "Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, formaat is YYYY-MM-DD", + "Conversation not found" : "Gesprek niet gevonden.", + "Path is already shared with this conversation" : "Pad is al gedeeld met dit gesprek", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing via WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing met WebRTC\n\n* 💬 **Chat** Nextcloud Talk komt met een eenvoudige tekstchat, maakt het mogelijk om bestanden te delen en uploaden vanuit je Netxcloud Bestanden-app of je lokale apparaat en het noemen van andere deelnemers.\n* 👥 **Privé-, groep-, publieke en wachtwoordbeveiligde gesprekken!** Nodig iemand uit, of een hele groep of verstuur een openbare link om mensen uit te nodigen voor een gesprek.\n* 🌐 **Federated chats** Chat met andere gebruikers op hun Nextcloud servers\n* 💻 **Schermdelen!** Deel je scherm met de deelnemers van je gesprek.\n* 🚀 **Integratie met andere Nextcloud apps** zoals Bestanden, Agenda, Gebruikersstatus, Dashboard, Flow, Kaarten, Smart Picker, Contacten, Deck en vele andere.\n* 🌉 **Sync met andere chat-oplossingen** Met [Matterbridge](https://github.com/42wim/matterbridge/) geïntegreerd in Talk, kan je eenvoudig veel andere chat-oplossingen met Nextcloud Tals en vice versa.", + "Leave call" : "Verlaat oproep", + "Navigating away from the page will leave the call in {conversation}" : "Als je wegnavigeert van deze pagina, verlaat je het gesprek in {conversatie}", + "Stay in call" : "Blijf in de oproep", + "Error occurred when getting the conversation information" : "Fout opgetreden tijdens het ophalen van de gespreksinformatie", + "Discuss this file" : "Bespreek dit bestand", + "Share this file with others to discuss it" : "Deel dit bestand om met anderen te bespreken", + "Share this file" : "Deel dit bestand", + "Join conversation" : "Deelnemen aan gesprek", + "This conversation is password-protected." : "Dit gesprek is beveiligd met een wachtwoord.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We hebben meerdere ongeldige wachtwoord pogingen gedetecteerd vanaf jouw IP adres. Je volgende poging is daarom vertraagd met maximaal 30 seconden.", + "The password is wrong. Try again." : "Het wachtwoord is verkeerd. Probeer het opnieuw.", + "Password" : "Wachtwoord", + "Submit" : "Verwerken", + "Error requesting the password." : "Fout bij opvragen wachtwoord.", + "Request password" : "Aanvragen wachtwoord", + "This conversation has ended" : "Dit gesprek is beeindigd", + "Error occurred when joining the conversation" : "Er is een fout opgetreden bij het deelnemen aan het gesprek", + "Close Talk sidebar" : "Sluit Talk zijbalk", + "Open Talk sidebar" : "Open Talk zijbalk", + "Everyone" : "Iedereen", + "Users and moderators" : "Gebruikers en moderatoren", + "Moderators only" : "Alleen moderators", + "Disable calls" : "Gesprekken uitschakelen", + "Save changes" : "Wijzigingen bewaren", + "Saving …" : "Opslaan ...", + "Saved!" : "Opgeslagen!", + "Limit to groups" : "Beperk tot groepen", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Als er minimaal één groep is geselecteerd, kunnen alleen mensen uit de geslecteerde groepen deelnemen aan de gesprekken.", + "Guests can still join public conversations." : "Gasten kunnen nog deelnemen aan openbare gesprekken.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Gebruikers die Talk niet meer kunnen gebruiken, worden nog steeds als deelnemen in eerdere gesprekken getoond en ook hun chat-berichten worden nog steeds getoond.", + "Limit using Talk" : "Beperk gebruik van Talk", + "Limit creating a public and group conversation" : "Beperk maken van openbare en groepsgesprekken", + "Limit creating conversations" : "Beperk aanmaken gesprekken", + "Limit starting a call" : "Beperk het starten van een oproep", + "Limit starting calls" : "Beperk het starten van oproepen", + "When a call has started, everyone with access to the conversation can join the call." : "Zodra een oproep is gestart, kan iedereen met toegang tot het gesprek deelnemen aan de oproep.", + "Description is not provided" : "Beschrijving is niet verstrekt", + "Locked for moderators" : "Vergrendeld voor moderators", + "Enabled" : "Ingeschakeld", + "Disabled" : "Uitgeschakeld", + "Bots settings" : "Bots instellingen", + "State" : "Status", + "Name" : "Naam", + "Last error" : "Laatste fout", + "Total errors count" : "Totaal aantal fouten", + "Find more bots" : "Vind meer bots", + "Beta" : "Bèta", + "Permissions" : "Machtigingen", + "Select groups …" : "Selecteer groepen …", + "All messages" : "Alle berichten", + "@-mentions only" : "Alleen @-vermeldingen", + "Off" : "Uit", + "General settings" : "Algemene instellingen", + "Default notification settings" : "Standaard meldingsinstellingen", + "Default group notification" : "Standaard groepsmelding", + "Default group notification for new groups" : "Standaard groepsmelding voor nieuwe groepen", + "Integration into other apps" : "Integratie in andere apps", + "Allow conversations on files" : "Sta gesprekken in bestanden toe", + "Allow conversations on public shares for files" : "Sta gesprekken toe op openbaar gedeelde bestanden", + "Enable encryption" : "Schakel encryptie in", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Door op de knop hierboven te klikken wordt de informatie in het formulier naar de servers van Struktur AG gestuurd. Meer informatie vind je op {linkstart}spreed.eu{linkend}.", + "Pending" : "Onderhanden", + "Error" : "Fout", + "Blocked" : "Geblokkeerd", + "Active" : "Actief", + "Expired" : "Vervallen", + "Never" : "Nooit", + "The trial could not be requested. Please try again later." : "Het proces kon niet worden aangevraagd. Probeer het later opnieuw.", + "The account could not be deleted. Please try again later." : "Het account kon niet worden verwijderd. Probeer het later opnieuw.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Onze partner Struktur AG biedt een service waarbij een gehoste signaleringsserver kan worden aangevraagd. Hiervoor hoef je alleen maar het onderstaande formulier in te vullen en je Nextcloud zal erom vragen. Zodra de server voor je is ingesteld, worden de inloggegevens automatisch ingevuld. Hierdoor worden de bestaande instellingen van de signaleringsserver overschreven.", + "URL of this Nextcloud instance" : "URL van deze Nextcloud server", + "Full name of the user requesting the trial" : "Volledige naam van de gebruiker die de proef aanvraagt", + "Email of the user" : "E-mailadres van de gebruiker", + "Language" : "Taal", + "Country" : "Land", + "Request signaling server trial" : "Verzoek proefperiode signaleringsserver", + "You can see the current status of your hosted signaling server in the following table." : "Je kunt de huidige status van je gehoste signaleringsserver in de volgende tabel zien.", + "Status" : "Status", + "Created at" : "Gemaakt op", + "Expires at" : "Vervalt op", + "Limits" : "Limieten", + "Yes" : "Ja", + "No" : "Nee", + "Delete the signaling server account" : "Verwijder het signaleringsserveraccount", + "_%n user_::_%n users_" : ["%n gebruiker","%n gebruikers"], + "Installed version: {version}" : "Geïnstalleerde versie: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Je kunt de Matterbridge installeren om Nextcloud Talk te linken naar andere diensten, bezoek hun {linkstart1}GitHub pagina{linkend} voor nadere details. Het downloaden en installeren van de app kan even duren. Mocht er een time-out plaatsvinden, kan de app handmatig geïnstalleerd worden via de {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Het Matterbridge uitvoeringsbestand kon niet gevonden of uitgevoerd worden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Je kunt het pad naar het binaire bestand van Matterbridge ook handmatig instellen via de configuratie. Raadpleeg de {linkstart} Matterbridge-integratiedocumentatie {linkend} voor meer informatie.", + "Downloading …" : "Bezig met downloaden ...", + "Install Talk Matterbridge" : "Installeer Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Kon de Matterbridge binary niet uitvoeren", + "Matterbridge integration" : "Matterbridge integratie", + "Enable Matterbridge integration" : "Matterbridge integratie inschakelen", + "Status: Checking connection" : "Status: Controleren verbinding", + "OK: Running version: {version}" : "OK: Actuele versie: {version}", + "Validate SSL certificate" : "Valideer SSL certificaat", + "Delete this server" : "Verwijder deze server", + "Test this server" : "Test deze server", + "Disabled for all calls" : "Uitgeschakeld voor alle gesprekken", + "Enabled for all calls" : "Ingeschakeld voor alle gesprekken", + "Configurable on conversation level by moderators" : "Instelbaar op gespreksniveau door moderators", + "Shared secret" : "Gedeeld geheim", + "Recording consent" : "Toestemming opname", + "Recording transcription" : "Transcriptie wordt opgenomen", + "SIP configuration saved!" : "SIP configuratie opgeslagen!", + "Restrict SIP configuration" : "Beperk SIP configuratie", + "Enable SIP configuration" : "Inschakelen SIP configuratie", + "Only users of the following groups can enable SIP in conversations they moderate" : "Alleen gebruikers uit de volgende groepen kunnen SIP inschakelen in de gespreken die zij modereren", + "Phone number (Country)" : "Telefoonnummer (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Deze informatie wordt verzonden in uitnodigingsmails en ook getoond in de zijbalk voor alle deelnemers.", + "Error code" : "Foutcode", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend instellingen opgeslagen", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "Het server adres is ongeldig", + "STUN settings saved" : "STUN instellingen opgeslagen", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "De STUN server wordt gebruikt om het openbare IP-adres van deelnemers achter een router vast te stellen.", + "Add a new STUN server" : "Nieuwe STUN server toevoegen", + "{schema} scheme must be used with a domain" : "{schema} schema moet worden gebruikt met een domein", + "{option1} and {option2}" : "{option1} en {option2}", + "{option} only" : "{option} alleen", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Succesvolle ICE-kandidaten geretourneerd door de TURN-server", + "Error: No working ICE candidates returned by the TURN server" : "Fout: geen werkende ICE-kandidaten geretourneerd door de TURN-server", + "Testing whether the TURN server returns ICE candidates" : "Controleren of de TURN-server ICE-kandidaten retourneert", + "TURN server schemes" : "TURN server schema's", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocollen", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Een TURN server wordt gebruikt om verkeer van deelnemers achter een firewall te proxyen. Als individuele deelnemers niet rechtstreeks met anderen kunnen verbinden, is TURN server vermoedelijk vereist. Zie {linkstart}deze documentatie{linkend} voor instructies.", + "TURN settings saved" : "TURN instellingen opgeslagen", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Nieuwe TURN server toevoegen", + "Failed" : "Mislukt", + "OK" : "OK", + "Checking …" : "Controleren ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Mislukt: WebAssembly is uitgeschakeld of niet ondersteund in deze browser. Schakel WebAssembly in of gebruik een browser met ondersteuning ervoor voor de controle.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Mislukt: \".wasm\" and \".tflite\" bestanden waren niet juist geretourneerd door de webserver. Controleer \"Systeemvereisten\" sectie in de Talk documentatie.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- en \".tflite\"-bestanden zijn correct geretourneerd door de webserver.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Het lijkt erop dat de configuratie van PHP en Apache niet compatibel is. Houd er rekening mee dat PHP alleen kan worden gebruikt met de MPM_PREFORK-module en dat PHP-FPM alleen kan worden gebruikt met de MPM_EVENT-module.", + "Web server setup checks" : "Webserver installatiecontroles", + "Federated user" : "Gefedereerde gebruiker", + "Assign participants to rooms" : "Deelnemers aan ruimtes toewijzen", + "Configure breakout rooms" : "Instellen aparte vergaderruimtes", + "Number of breakout rooms" : "Aantal Aparte vergaderruimtes", + "You can create from 1 to 20 breakout rooms." : "Je kan 1 tot 20 aparte vergaderruimtes maken", + "Assignment method" : "Toewijzingswijze", + "Automatically assign participants" : "Deelnemers automatisch toewijzen", + "Manually assign participants" : "Deelnemers handmatig toewijzen", + "Allow participants to choose" : "Laat deelnemers kiezen", + "Create rooms" : "Maak vergaderruimtes", + "Confirm" : "Bevestigen", + "Create breakout rooms" : "Maak aparte vergaderruimtes", + "Reset" : "Herstellen", + "Delete breakout rooms" : "Verwijder aparte vergaderruimtes", + "Room {roomNumber}" : "Vergaderruimte {roomNumber}", + "Current breakout rooms and settings will be lost" : "Huidige vergaderruimtes en instellingen gaan verloren", + "Cancel" : "Annuleren", + "Unassigned participants" : "Niet-toegewezen deelnemers", + "Back" : "Terug", + "Assign" : "Toewijzen", + "Add participant \"{user}\"" : "Toevoegen deelnemer \"{user}\"", + "Now" : "Nu", + "Invalid calendar selected" : "Ongeldige agenda geselecteerd", + "Invalid start time selected" : "Ongeldige starttijd geselecteerd", + "Invalid end time selected" : "Ongeldige eindtijd geselecteerd", + "Invite all users and emails in this conversation" : "Nodig alle gebruikers en e-mailadressen uit in dit gesprek", + "Meeting created" : "Vergadering gecreëerd", + "Upcoming meetings" : "Aankomende vergaderingen", + "Loading …" : "Laden …", + "No upcoming meetings" : "Geen aankomende vergaderingen", + "Schedule a meeting" : "Plan een vergadering", + "Meeting title" : "Vergadering titel", + "From" : "Van", + "To" : "Naar", + "Calendar" : "Agenda", + "Attendees" : "Deelnemers", + "Save" : "Opslaan", + "Search participants" : "Zoek deelnemers", + "No results" : "Geen resultaten", + "Done" : "Klaar", + "Raise hand" : "Hand opsteken", + "Raise hand (R)" : "Hand omhoog (R)", + "Lower hand" : "Hand omlaag", + "Lower hand (R)" : "Hand omlaag (R)", + "Speaker view" : "Sprekerweergave", + "Grid view" : "Rasterweergave", + "Recording consent is required" : "Toestemming voor opname is vereist", + "This conversation is read-only" : "Dit gesprek is alleen-lezen", + "Conversation not found or not joined" : "Gesprek niet gevonden of aan deelgenomen", + "Lobby is still active and you're not a moderator" : "Lobby is nog actief en je bent geen moderator", + "Connection failed" : "Verbinding mislukt", + "Reload" : "Herladen", + "{nickName} raised their hand." : "{nickName} stak zijn/haar hand op", + "A participant raised their hand." : "Een deelnemer stak zijn/haar hand op.", + "Collapse stripe" : "Inklappen streep", + "Expand stripe" : "Uitvouwen streep", + "Previous page of videos" : "Voorgaande pagina met video's", + "Next page of videos" : "Volgende pagina met video's", + "Connecting …" : "Verbinden...", + "Calling …" : "Bellen ...", + "Waiting for {user} to join the call" : "Wachten op {user} om deel te nemen aan het gesprek", + "Waiting for others to join the call …" : "Aan het wachten aan andere deelnemers van de oproep ...", + "You can invite others in the participant tab of the sidebar" : "Je kunt anderen uitnodigen in de deelnemerstab van de zijbalk", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Je kunt anderen uitnodigen in het deelnemers tabblad, of deze link met anderen delen om ze uit te nodigen. ", + "Share this link to invite others!" : "Deel deze link om anderen uit te nodigen!", + "Copy link" : "Link kopiëren", + "You are not allowed to enable audio" : "Je bent niet bevoegd om audio te activeren", + "No audio. Click to select device" : "Geen audio. Klik om apparaat te selecteren", + "Mute audio" : "Geluid dempen", + "Mute audio (M)" : "Geluid dempen (M)", + "Unmute audio" : "Geluid niet meer dempen", + "Unmute audio (M)" : "Geluid niet meer dempen (M)", + "None" : "Geen", + "Access to camera was denied" : "Toegang tot de camera is geweigerd", + "Error while accessing camera: It is likely in use by another program" : "Fout bij toegang tot camera, vermoedelijk in gebruik bij andere app", + "Error while accessing camera" : "Fout bij toegang tot camera", + "You have been muted by a moderator" : "Je bent gedempt door een moderator", + "Hide presenter video" : "Verberg video van presentator", + "You are not allowed to enable video" : "Je bent niet geautoriseerd om video in te schakelen", + "No video. Click to select device" : "Geen video. Klik om apparaat te selecteren", + "Disable video" : "Video uitschakelen", + "Disable video (V)" : "Video uitschakelen (V)", + "Enable video" : "Inschakelen video", + "Enable video (V)" : "Video inschakelen (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video. Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video (V) - Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video. Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Show presenter" : "Toon presentator", + "You" : "Jij", + "Mute" : "Dempen", + "Muted" : "Gedempt", + "Show screen" : "Tonen scherm", + "Stop following" : "Stop met volgen", + "Connection could not be established …" : "Kon geen verbinding maken ...", + "Connection was lost and could not be re-established …" : "Verbinding verbroken en kon niet opnieuw verbinden ...", + "Connection could not be established. Trying again …" : "Kon geen verbinding maken. Opnieuw aan het proberen ...", + "Connection lost. Trying to reconnect …" : "Verbinding verbroken. Opnieuw aan het proberen ...", + "Connection problems …" : "Verbindingsproblemen ...", + "Collapse" : "Inklappen", + "Expand" : "Uitbreiden", + "You need to be logged in to upload files" : "Je moet ingelogd zijn om bestanden te uploaden", + "Drop your files to upload" : "Zet je bestanden hier neer om te uploaden", + "Conversation messages" : "Gespreksberichten", + "Scroll to bottom" : "Scroll naar beneden", + "Post message" : "Plaats bericht", + "Federated conversation" : "Gefedereerde gesprekken", + "Public conversation" : "Openbaar gesprek", + "Favorite" : "Favoriet", + "Banned users" : "Geblokkeerde gebruikers", + "Manage the list of banned users in this conversation." : "Beheer de lijst van geblokkeerde gebruikers voor dit gesprek.", + "Manage bans" : "Beheer blokkeringen", + "No banned users" : "Geen geblokkeerde gebruikers", + "Banned by:" : "Geblokkerd door:", + "Date:" : "Datum:", + "Note:" : "Notitie:", + "Hide details" : "Verberg details", + "Show details" : "Tonen details", + "Unban" : "Uitsluiten opheffen", + "Error while updating conversation name" : "Fout bij aanpassen gespreksnaam", + "Error while updating conversation description" : "Fout tijdens bijwerken gespreksbeschrijving", + "Enter a name for this conversation" : "Voer een naam in voor dit gesprek", + "Edit conversation name" : "Bewerk gespreksnaam", + "Edit conversation description" : "Bewerken gespreksbeschrijving", + "Enter a description for this conversation" : "Voer een beschrijving in voor dit gesprek", + "Picture" : "Afbeelding", + "Disable" : "Uitschakelen", + "Enable" : "Inschakelen", + "Breakout rooms" : "Aparte vergaderruimtes", + "Manage breakout rooms" : "Beheer aparte vergaderruimtes", + "Set up breakout rooms for this conversation" : "Stel aparte breakout room in voor dit gesprek", + "Please select a valid PNG or JPG file" : "Selecteer alstublieft een geldig png of jpg bestand", + "Choose your conversation picture" : "Kies de gespreksafbeelding", + "Choose" : "Kies", + "Error setting conversation picture" : "Fout bij instellen gespreksafbeelding", + "Could not set the conversation picture: {error}" : "Kon de gespreksafbeelding niet instellen: {error}", + "Error cropping conversation picture" : "Fout bij bijsnijden gespreksafbeelding", + "Error removing conversation picture" : "Fout bij verwijderen gespreksafbeelding", + "Set emoji as conversation picture" : "Stel emoji in als gespreksafbeelding", + "Set background color for conversation picture" : "Stel achtergrondkleur in voor gespreksafbeelding", + "Upload conversation picture" : "Upload gespreksafbeelding", + "Choose conversation picture from files" : "Kies gespreksafbeelding via bestanden", + "Remove conversation picture" : "Verwijder gespreksafbeelding", + "The file must be a PNG or JPG" : "Het bestand moet een PNG of JPG bestand zijn", + "Default permissions modified for {conversationName}" : "Standaardmachtigingen aangepast voor {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kon standaardmachtigingen niet aanpassen voor {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Pas de standaardmachtigingen voor deelnemers in dit gesprek aan. Deze instellingen gelden niet voor moderators.", + "All permissions" : "Alle machtigingen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deelnemers hebben machtigingen om een gesprek te starten, deel te nemen, audio en camera in te schakelen en het scherm te delen.", + "Restricted" : "Beperkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deelnemers kunnen deelnemen aan gesprekken, maar kunnen geen audio of camera inschakelen, of hun scherm delen totdat een moderator hen handmatig machtigt.", + "Advanced permissions" : "Geavanceerde machtigingen", + "Edit permissions" : "Pas machtigingen aan", + "Conversation settings" : "Gespreksinstellingen", + "Basic Info" : "Basisinformatie", + "Personal" : "Persoonlijk", + "Moderation" : "Beheer", + "Setup overview" : "Instellingenoverzicht", + "Live transcription" : "Live transcriptie", + "Breakout Rooms" : "Aparte vergaderruimtes", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gevarenzone", + "Archive conversation" : "Archiveer gesprek", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Gearchiveerde gesprekken zijn standaard verborgen van de gesprekken lijst. Echter, ze zullen nog steeds tevoorschijn komen zodra je zoekt op de naam van het gesprek of de lijst van gearchiveerde gesprekken opent.", + "Do you really want to leave \"{displayName}\"?" : "Wil je \"{displayName}\" echt verlaten?", + "You can archive this conversation instead." : "Je kan dit gesprek ook archiveren", + "Leave conversation" : "Verlaat een gesprek", + "You need to promote a new moderator before you can leave the conversation" : "Je moet een nieuwe moderator aanwijzen voordat je het gesprek kan verlaten", + "Delete conversation" : "Verwijder gesprek", + "Do you really want to delete \"{displayName}\"?" : "Wil je \"{displayName}\" echt verwijderen?", + "Error while deleting conversation" : "Fout bij verwijderen gesprek", + "Delete all chat messages" : "Alle chats verwijderen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Wil je echt alle berichten verwijderen in \"{displayName}\"?", + "Error while clearing chat history" : "Fout bij het verwijderen van de chathistorie", + "Be careful, these actions cannot be undone." : "Wees voorzichtig, dit kan niet worden ongedaan gemaakt.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Zodra een gesprek verlaten is, is een uitnodiging nodig om opnieuw deel te nemen aan het gesprek. Een open gesprek kan te allen tijde hervat worden.", + "Permanently delete this conversation." : "Verwijder dit gesprek permanent.", + "Delete chat messages" : "Alle chats verwijderen", + "Permanently delete all the messages in this conversation." : "Verwijder alle berichten in dit gesprek permanent.", + "_%n hour_::_%n hours_" : ["%n uur","%n uur"], + "_%n day_::_%n days_" : ["%n dag","%n dagen"], + "_%n week_::_%n weeks_" : ["%n week","weken"], + "Custom expiration time" : "Aangepaste vervalperiode", + "Message expiration disabled" : "Vervallen bericht uitgeschakeld", + "Message expiration set: {duration}" : "Vervallen bericht ingesteld: {duration}", + "Error when trying to set message expiration" : "Fout bij instellen vervallen bericht", + "Message expiration" : "Vervallen bericht", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatberichten kunnen na een bepaalde tijd verlopen. Noot: Bestanden die gedeeld zijn in een chat worden niet verwijderd door de eigenaar, maar worden niet langer gedeeld in het gesprek.", + "Set message expiration" : "Stel vervallen bericht in", + "Current message expiration" : "Vervallen huidig bericht", + "Password copied to clipboard" : "Wachtwoord gekopieerd naar het klembord!", + "Password could not be copied" : "Wachtwoord kon niet gekopieerd worden", + "Guest access" : "Gasttoegang", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms zijn niet toegestaan bij openbare gesprekken", + "Allow guests to join this conversation via link" : "Sta gasten toe om te deel nemen aan dit gesprek via een link", + "Password protection" : "Wachtwoordbeveiliging", + "This conversation is password-protected. Guests need password to join" : "Dit gesprek is beveiligd met een wachtwoord. Gasten hebben een wachtwoord nodig om deel te nemen", + "Password protection is needed for public conversations" : "Wachtwoordbeveiliging is verplicht voor openbare gesprekken", + "Set a password" : "Instellen wachtwoord", + "Change password" : "Wachtwoord wijzigen", + "Enter new password" : "Voer nieuw wachtwoord in", + "Save password" : "Wachtwoord opslaan", + "Copy password" : "Kopieer wachtwoord", + "Guests are allowed to join this conversation via link" : "Gaten kunnen deelnemen aan dit gesprek via een link", + "Guests are not allowed to join this conversation" : "Gaten kunnen niet deelnemen aan dit gesprek", + "Resend invitations" : "Opnieuw verzenden uitnodigingen", + "This conversation is open to both registered users and users created with the Guests app" : "Het gesprek is toegankelijk voor zowel geregistreerde gebruikers als gebruikers die met de Gasten app aangemaakt zijn", + "This conversation is open to registered users" : "Dit gesprek is toegankelijk voor geregistreerde gebruikers", + "This conversation is limited to the current participants" : "Dit gesprek is beperkt tot de huidige deelnemers", + "You opened the conversation to both registered users and users created with the Guests app" : "Je hebt het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "Error occurred when opening or limiting the conversation" : "Er is een fout opgetreden tijdens het openen of beperken van het gesprek", + "Open conversation to registered users, showing it in search results" : "Open gesprek voor geregistreerde gebruikers, het zal worden weergegeven in de zoekresultaten", + "Also open to users created with the Guests app" : "Ook toegankelijk voor gebruikers die met de Gasten app aangemaakt zijn", + "Open conversation" : "Open gesprek", + "Invalid language" : "Ongeldige taal", + "Start time: {date}" : "Starttijd: {date}", + "Start time has been updated" : "Starttijd bijgewerkt", + "Error occurred while updating start time" : "Fout bij bijwerken starttijd", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Inschakelen van de lobby zal niet-moderators uit het lopende gesprek verwijderen.", + "Enable lobby, restricting the conversation to moderators" : "Lobby inschakelen, gesprek beperken tot moderators", + "Meeting start time" : "Vergadering starttijd", + "Start time (optional)" : "Begintijd (optioneel)", + "Import email participants" : "Importeer e-maildeelnemers", + "You can import a list of email participants from a CSV file." : "Je kan een lijst van e-maildeelnemers importeren vanuit een CSV-bestand.", + "Browse poll drafts" : "Blader door peilingconcepten", + "Error occurred when locking the conversation" : "Er is een fout opgetreden bij het vergrendelen van het gesprek", + "Error occurred when unlocking the conversation" : "Er is een fout opgetreden bij het ontgrendelen van het gesprek", + "Lock conversation" : "Gesprek vergrendelen", + "This will also terminate the ongoing call." : "Hiermee wordt ook het lopende gesprek beëindigd.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Vergrendel het gesprek om te voorkomen dat iemand berichten kan plaatsen of gesprekken kan starten", + "Edit" : "Bewerk", + "More information" : "Meer informatie", + "Delete" : "Verwijderen", + "Add new bridged channel to current conversation" : "Een nieuw overbruggingskanaal naar het huidige gesprek", + "unknown state" : "onbekende staat", + "running" : "bezig", + "not running, check Matterbridge log" : "draait niet, controleer Matterbridge logbestand", + "not running" : "niet bezig", + "Bridge saved" : "Overbrugging opgeslagen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Je kunt kanalen van verschillende chatservices overbruggen met Matterbridge.", + "More info on Matterbridge" : "Meer info over Matterbridge.", + "Enable bridge" : "Inschakelen bridge", + "Show Matterbridge log" : "Toon Matterbridge logbestand", + "Log content" : "Inhoud logboek", + "Only moderators are allowed to mention @all" : "Alleen moderators mogen @all vermelden", + "Mentioning @all has been limited to moderators." : "Het vermelden van @all is beperkt tot moderators", + "Notifications" : "Meldingen", + "Notify about calls in this conversation" : "Stuur melding over telefoongesprekken in dit gesprek", + "Important conversation" : "Belangrijk gesprek", + "\"Do not disturb\" user status is ignored for important conversations" : "De gebruikersstatus ‘Niet storen’ wordt genegeerd voor belangrijke gesprekken", + "Sensitive conversation" : "Gevoelig gesprek", + "Message preview will be disabled in conversation list and notifications" : "Berichtvoorvertoning wordt uitgeschakeld in de gesprekslijst en meldingen", + "Recording consent is required for calls in this conversation" : "Toestemming voor opname is vereist voor oproepen in dit gesprek", + "Recording consent is not required for calls in this conversation" : "Toestemming voor opname is niet vereist voor oproepen in dit gesprek", + "Recording consent requirement was updated" : "Toestemming voor opname status is bijgewerkt", + "Error occurred while updating recording consent" : "Fout bij bijwerken toestemming opname", + "Recording Consent" : "Toestemming opname", + "Recording consent cannot be changed once a call or breakout session has started." : "Toestemming voor opname kan niet worden gewijzigd als een oproep of aparte vergaderruimtes zijn gestart.", + "Require recording consent before joining call in this conversation" : "Toestemming voor opname vereist voor deelname aan dit gesprek", + "Recording consent is required for all calls" : "Toestemming voor opname is vereist voor alle gesprekken", + "SIP dial-in is now possible without PIN requirement" : "Inbellen via SIP is nu mogelijk zonder PIN benodigdheid", + "SIP dial-in is now enabled" : "SIP inbellen is nu ingeschakeld", + "SIP dial-in is now disabled" : "SIP inbellen is nu uitgeschakeld", + "Error occurred when enabling SIP dial-in" : "Fout bij inschakelen SIP inbellen", + "Error occurred when disabling SIP dial-in" : "Fout bij uitschakelen SIP inbellen", + "Phone and SIP dial-in" : "Telefoon en SIP inbellen", + "Enable phone and SIP dial-in" : "Inschakelen telefoon en SIP inbellen", + "Allow to dial-in without a PIN" : "Inbellen zonder PIN toestaan", + "With {displayName}" : "Met {displayName}", + "In {conversation}" : "In {conversation}", + "Join" : "Deelnemen", + "View conversation" : "Toon gesprek", + "Error while creating the conversation" : "Fout bij creëren gesprek", + "Hello, {displayName}" : "Hallo, {displayName}", + "Start meeting now" : "Start vergadering nu", + "Give your meeting a title" : "Geef je vergadering een titel", + "Create a new conversation" : "Maak een nieuw gesprek", + "Join open conversations" : "Deelnemen aan open gesprekken", + "Call a phone number" : "Bel een telefoonnummer", + "Schedule meetings" : "Plan vergaderingen", + "You don't have any upcoming meetings" : "Je hebt geen aankomende vergaderingen", + "Unread mentions" : "Ongelezen vermeldingen", + "Start a group conversation" : "Start een groepsgesprek", + "Create conversation" : "Maak gesprek", + "Enter your name" : "Geef je naam op", + "Submit name and join" : "Verzend naam en neem deel", + "Do you already have an account?" : "Heb je al een account?", + "Log in" : "Aanmelden", + "Error while verifying uploaded file" : "Fout bij controleren geüpload bestand", + "Uploaded file is verified" : "Geüpload bestand is gecontroleerd", + "Participants added successfully" : "Deelnemers succesvol toegevoegd", + "Error while adding participants" : "Fout bij toevoegen deelnemers", + "Import a file" : "Importeer een bestand", + "Send invitations" : "Stuur uitnodigingen", + "_%n invalid email_::_%n invalid emails_" : ["%n ongeldige e-mail","%n ongeldige e-mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail al geimporteerd of duplicaat","%n e-mails al geimporteerd of duplicaten"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n uitnodiging kan verzonden worden","%n uitnodigingen kunnen verzonden worden"], + "An error occurred while calling a phone number" : "Er trad een fout op bij bellen van een telefoonnummer", + "Phone number could not be called: {error}" : "Telefoonnummer kon niet bereikt worden: {error} ", + "Phone number could not be called" : "Telefoonnummer kon niet bereikt worden", + "Search participants or phone numbers" : "Zoek deelnemers of telefoonnummers", + "Creating the conversation …" : "Het gesprek maken ...", + "Mark as read" : "Markeren als gelezen", + "Mark as unread" : "Markeren als ongelezen", + "Remove from favorites" : "Verwijderen uit favorieten", + "Add to favorites" : "Toevoegen aan favorieten", + "Unarchive conversation" : "Dearchiveer gesprek", + "You need to promote a new moderator before you can leave the conversation." : "Je moet een nieuwe moderator promoveren voordat je het gesprek kunt verlaten.", + "Conversation actions" : "Gespreksacties", + "Notify about calls" : "Melden inkomende gesprekken", + "Pending invitations" : "Wachtende uitnodigingen", + "Join conversations from other servers" : "Neem deel aan gesprekken van andere servers", + "From {user} at {remoteServer}" : "Van {user} op{remoteServer}", + "Decline invitation" : "Uitnodiging afwijzen", + "Accept invitation" : "Uitnodiging accepteren", + "No pending invitations" : "Geen wachtende uitnodigingen", + "Home" : "Startpagina", + "Unread" : "Ongelezen", + "Meetings" : "Vergaderingen", + "Alphabetically" : "Alfabetisch", + "No matches found" : "Geen overeenkomsten gevonden.", + "No conversations found" : "Geen gesprekken gevonden", + "You have no archived conversations." : "Je hebt geen gearchiveerde gesprekken.", + "You have no unread mentions." : "Je hebt geen ongelezen vermeldingen.", + "You have no unread messages." : "Je hebt geen ongelezen berichten..", + "An error occurred while performing the search" : "Er trad een fout op bij uitvoeren van de zoekopdracht", + "Conversation list" : "Gesprekkenlijst", + "Filter conversations by" : "Filter gesprekken op", + "Unread messages" : "Ongelezen berichten", + "Meeting conversations" : "Vergadering gesprekken", + "Clear filters" : "Wis filters", + "New personal note" : "Nieuwe persoonlijke notitie", + "Back to conversations" : "Terug naar gesprekken", + "Archived conversations" : "Gearchiveerde gesprekken", + "Threads" : "Draden", + "Clear filter" : "Filter leegmaken", + "App settings" : "App instellingen", + "Users" : "Gebruikers", + "Groups" : "Groepen", + "Teams" : "Teams", + "New private conversation" : "Nieuw privégesprek", + "Other sources" : "Andere bronnen", + "Open conversations" : "Open gesprekken", + "No search results" : "Geen zoekresultaten", + "Users, groups and teams" : "Gebruikers, groepen en teams", + "Users and groups" : "Gebruikers en groepen", + "Users and teams" : "Gebruikers en groepen", + "Groups and teams" : "Groepen en teams", + "New group conversation" : "Nieuw groepsgesprek", + "The meeting will start soon" : "De vergadering begint binnenkort", + "This meeting is scheduled for {startTime}" : "Deze vergadering is gepland voor {startTime}", + "You are currently waiting in the lobby" : "Je wacht nu in de lobby", + "Select microphone" : "Selecteer microfoon", + "No microphone available" : "Geen microfoon aanwezig", + "Select camera" : "Selecteer camera", + "No camera available" : "Geen camera aanwezig", + "Select a device" : "Selecteer een apparaat", + "Playing …" : "Afspelen...", + "Test speakers" : "Test speakers", + "Test" : "Test", + "Devices" : "Apparaten", + "Backgrounds" : "Achtergronden", + "No audio" : "Geen geluid", + "No camera" : "Geen camera", + "Display video as you will see it (mirrored)" : "Toon video zoals jij het zal zien (gespiegeld)", + "Display video as others will see it" : "Toon video zoals anderen het zullen zien", + "Calls are not supported in your browser" : "Oproepen worden niet ondersteund in je browser", + "Access to microphone is only possible with HTTPS" : "Toegang tot microfoon is alleen mogelijk met HTTPS", + "Access to microphone was denied" : "Toegang tot de microfoon is geweigerd", + "Error while accessing microphone" : "Fout bij toegang tot microfoon", + "Access to camera is only possible with HTTPS" : "Toegang tot de camera is alleen mogelijk met HTTPS", + "The call is being recorded." : "Het gesprek wordt opgenomen", + "The call might be recorded." : "Het gesprek kan opgenomen worden.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "De opname kan je stem, video van je camera en schermdelen bevatten. Je toestemming is nodig voorafgaand aan deelname aan het gesprek. ", + "Give consent to the recording of this call" : "Geef toestemming voor opname van dit gesprek", + "Start recording immediately with the call" : "Start opname meteen met het gesprek", + "Apply settings" : "Instellingen toepassen", + "Select virtual office background" : "Selecteer virtuele kantoorachtegrond", + "Select virtual home background" : "Selecteer virtuele thuis achtergrond", + "Select virtual abstract background" : "Selecteer virtuele abstracte achtergrond", + "Select virtual beach background" : "Selecteer virtuele strand achtergrond", + "Select virtual park background" : "Selecteer virtuele park achtergrond", + "Select virtual theater background" : "Selecteer virtuele theater achtergrond", + "Select virtual library background" : "Selecteer virtuele bibliotheek achtergrond", + "Select virtual space station background" : "Selecteer virtuele ruimtestation achtergrond", + "Error while uploading the file" : "Fout bij uploaden van het bestand", + "Select a file" : "Selecteer een bestand", + "Invalid path selected" : "Ongeldig pad geselecteerd", + "Select virtual background from file {fileName}" : "Selecteer virtuele achtergrond vanuit bestand {fileName}", + "Blur" : "Vervagen", + "Upload" : "Upload", + "Files" : "Bestanden", + "(edited)" : "(bewerkt)", + "The message has expired or has been deleted" : "Bericht is verlopen of verwijderd.", + "Cancel quote" : "Annuleer citaat", + "24 hours" : "24 uur", + "7 days" : "7 dagen", + "Until unpin" : "Tot ontpint", + "Edited by {actor}" : "Bewerkt door {actor}", + "Message text copied to clipboard" : "Berichttekst naar klembord gekopieerd", + "Message text could not be copied" : "Berichttekst kon niet gekopieerd worden", + "Message forwarded to \"Note to self\"" : "Bericht doorgestuurd naar \"Notitie voor mezelf\"", + "Error while forwarding message to \"Note to self\"" : "Fout bij doorsturen bericht naar \"Notitie voor mezelf\"", + "A reminder was successfully removed" : "Een herinnering succesvol verwijderd", + "Error occurred when removing a reminder" : "Fout opgetreden bij verwijderen herinnering", + "A reminder was successfully set at {datetime}" : "Een herinnering succesvol ingesteld op {datetime}", + "Error occurred when creating a reminder" : "Fout opgetreden bij maken herinnering", + "Add a reaction to this message" : "Een reactie toevoegen aan dit bericht", + "Reply" : "Antwoord", + "More actions" : "Meer acties", + "Set reminder" : "Herinnering instellen", + "Pin message" : "Pin bericht", + "Unpin message" : "Ontpin bericht", + "Reply privately" : "Antwoord privé", + "Edit message" : "Bewerk bericht", + "Copy message link" : "Kopiëren berichtlink", + "Go to file" : "Ga naar bestand", + "Download file" : "Downloaden bestand", + "Go to thread" : "Ga naar draad", + "Forward message" : "Bericht doorsturen", + "Translate" : "Vertaal", + "Set custom reminder" : "Aangepaste herinnering instellen", + "Close reactions menu" : "Reactie-menu sluiten", + "React with {emoji}" : "Reageer met {emoji}", + "React with another emoji" : "Reageer met een andere emoji", + "Choose a conversation to forward the selected message." : "Kies een gesprek om het geselecteerde bericht aan door te sturen.", + "Error while forwarding message" : "Fout bij doorsturen bericht", + "The message has been forwarded to {selectedConversationName}" : "Het bericht is doorgestuurd naar {selectedConversationName}", + "Dismiss" : "Weigeren", + "Go to conversation" : "Ga naar gesprek", + "Detect language" : "Detecteer taal", + "The message could not be translated" : "Het bericht kon niet vertaald worden", + "Translation copied to clipboard" : "Vertaling gekopieerd naar klembord", + "Translation could not be copied" : "Vertaling kon niet gekopieerd worden", + "Translate message" : "Vertaal bericht", + "Source language to translate from" : "Brontaal om vanuit te vertalen", + "Translate from" : "Vertaal vanuit", + "Target language to translate into" : "Doeltaal om naar te vertalen", + "Translate to" : "Vertaal naar", + "Translating" : "Vertalen", + "Copy translated text" : "Kopieer vertaalde tekst", + "Send now" : "Nu versturen", + "Message read by everyone who shares their reading status" : "Bericht gelezen door iedereen die de eigen leesstatus deelt", + "Message sent" : "Bericht verstuurd", + "Sent without notification" : "Verstuurd zonder melding", + "Deleting message" : "Bericht aan het verwijderen", + "Message deleted successfully" : "Bericht succesvol verwijderd", + "Message could not be deleted because it is too old" : "Bericht kon niet worden verwijderd omdat het te oud is", + "Only normal chat messages can be deleted" : "Alleen normale chatberichten kunnen worden verwijderd", + "An error occurred while deleting the message" : "Er trad een fout op bij het verwijderen van het bericht", + "Pinned" : "Gepind", + "Your browser does not support playing audio files" : "Je browser heeft geen ondersteuning voor afspelen audiobestanden.", + "Contact" : "Contactpersoon", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck kaart", + "Remove {fileName}" : "Verwijderen {fileName}", + "Open this location in OpenStreetMap" : "Open deze locatie in Openstreetmap", + "_%n reply_::_%n replies_" : ["%n antwoord","%n antwoordt"], + "Sending message" : "Versturen bericht", + "Failed to send the message. Click to try again" : "Versturen bericht is mislukt, tik om het opnieuw te proberen.", + "Not enough free space to upload file" : "Onvoldoende vrije ruimte voor opslaan bestand", + "You cannot send messages to this conversation at the moment" : "Je kunt nu geen berichten versturen binnen dit gesprek", + "Could not update the message" : "Kon het bericht niet bijwerken", + "You voted" : "Je hebt gestemd", + "_%n vote_::_%n votes_" : ["%n stem","%n stemmen"], + "See results" : "Zie resultaten", + "Reactions" : "Reacties", + "No permission to post reactions in this conversation" : "Geen toestemming om reacties te plaatsen in dit gesprek", + "Show or collapse system messages" : "Uit- of inklappen systeemberichten", + "No messages" : "Geen berichten", + "All messages have expired or have been deleted." : "Alle berichten zijn verlopen of zijn verwijderd.", + "Unpin" : "Losmaken", + "Cancel search" : "Zoekopdracht annuleren", + "Add a phone number" : "Voeg een telefoonnummer toe", + "Error: A password is required to create the conversation." : "Fout: Een wachtwoord is vereist om het gesprek te maken.", + "All set, the conversation \"{conversationName}\" was created." : "Klaar, het gesprek \"{conversationName}\" is aangemaakt.", + "Create a new group conversation" : "Maak een nieuw groepsgesprek", + "Add participants" : "Deelnemers toevoegen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale lengte overschreden ({maxlength}tekens)", + "Conversation visibility" : "Zichtbaarheid gesprek", + "Allow guests to join via link" : "Sta gasten toe om deel te nemen via een link", + "Enter password" : "Invullen wachtwoord", + "This conversation has been locked" : "Het gesprek is vergrendeld", + "No permission to post messages in this conversation" : "Geen machtiging om berichten in dit gesprek te plaatsen", + "Joining conversation …" : "Deelnemen aan gesprek ...", + "Write a message without notification" : "Schrijf een bericht zonder melding", + "Create a thread" : "Creëer een draad", + "Send message" : "Verstuur bericht", + "Send without notification" : "Versturen zonder melding", + "The participant will not be notified about new messages" : "De deelnemer zal niet ingelicht worden over nieuwe berichten", + "Participants will not be notified about new messages" : "Deelnemers zullen niet ingelicht worden over nieuwe berichten", + "The message could not be edited" : "Het bericht kon niet bewerkt worden", + "File to share" : "Bestand om te delen", + "File upload is not available in this conversation" : "Bestandsupload is niet beschikbaar in dit gesprek", + "Add emoji" : "Emoji toevoegen", + "Adding a mention will only notify users who did not read the message." : "Het toevoegen van een vermelding zal alleen de gebruikers berichten die het bericht nog niet gelezen hebben.", + "Thread title" : "Draad-titel", + "Send later" : "Verstuur later", + "Cancel editing" : "Annuleer bewerken", + "{user} is out of office and might not respond." : "{user} is afwezig en zal mogelijk niet antwoorden", + "Absence period: {startDate} - {endDate}" : "Afwezigheidsperiode: {startDate} - {endDate}", + "Share from Files" : "Delen vanuit Bestanden", + "Share files to the conversation" : "Deel bestanden binnen het gesprek", + "Upload from device" : "Uploaden vanaf apparaat", + "Create new poll" : "Nieuwe peiling aanmaken", + "Smart picker" : "Smart Picker", + "Record voice message" : "Opnemen gesproken bericht", + "End recording and send" : "Beëindigen opname en versturen", + "Dismiss recording" : "Opname sluiten", + "Access to the microphone was denied" : "Toegang tot de microfoon is geweigerd", + "Microphone either not available or disabled in settings" : "Microfoon niet beschikbaar of uitgeschakeld in instellingen", + "Error while recording audio" : "Fout tijdens opnemen audio", + "Voice message {time} ({conversation})" : "Spraak bericht {time} ({conversation})", + "Summary is AI generated and might contain mistakes" : "Samenvatting is gegenereerd via AI en kan fouten bevatten", + "Error occurred during a summary generation" : "Er trad een fout op tijdens genereren samenvatting", + "New file" : "Nieuw bestand", + "Blank" : "Blanco", + "Error while creating file" : "Fout bij maken bestand", + "Create and share a new file" : "Maak en deel een nieuw bestand", + "Name of the new file" : "Naam van het nieuwe bestand", + "Create file" : "Maak bestand", + "Someone is typing …" : "Iemand aan het typen ...", + "{user1} is typing …" : "{user1} aan het typen …", + "{user1} and {user2} are typing …" : "{user1} en {user2} aan het typen …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} en {user3} aan het typen …", + "Add more files" : "Voeg meer bestanden toe", + "Send" : "Verzend", + "In this conversation {user} can:" : "In dit gesprek kan {user}:", + "Edit default permissions for participants in {conversationName}" : "Pas standaardmachtigingen voor deelnemers in {conversationName} aan", + "Start a call" : "Start een telefoongesprek", + "Skip the lobby" : "Skip de lobby", + "Can post messages and reactions" : "Kan berichten en reacties plaatsen", + "Enable the microphone" : "Schakel microfoon in", + "Enable the camera" : "Camera aan zetten", + "Share the screen" : "Deel jouw scherm", + "Update permissions" : "Machtigingen bijwerken", + "Updating permissions" : "Update machtigingen", + "There is no poll drafts yet saved for this conversation" : "Er is nog geen concept poll opgeslagen voor dit gesprek", + "Create poll" : "Peiling aanmaken", + "Question" : "Vraag", + "Ask a question" : "Stel een vraag", + "Import draft from file" : "Importeer concept vanuit een bestand", + "Answers" : "Antwoorden", + "Settings" : "Instellingen", + "Anonymous poll" : "Anonieme peiling", + "Multiple answers" : "Meerdere antwoorden", + "End poll" : "Peiling beëindigen", + "Results" : "Resultaten", + "Send a message to \"{roomName}\"" : "Stuur een bericht naar \"{roomName}\"", + "Hide list of participants" : "Verberg lijst met deelnemers", + "Show list of participants" : "Toon lijst met deelnemers", + "Assistance requested in {roomName}" : "Assistentie gevraagd in {roomName}", + "The message was sent to \"{roomName}\"" : "Het bericht is verstuurd naar \"{roomName}\"", + "Send message to room" : "Stuur bericht naar ruimte", + "Back to main room" : "Terug naar hoofdruimte", + "Back to your room" : "Terug naar je ruimte", + "Message all rooms" : "Bericht alle ruimtes", + "Start session" : "Start sessie", + "Start a call before you start a breakout room session" : "Start een oproep voordat je vergaderruimtessessie start", + "Stop session" : "Stop sessie", + "The message was sent to all breakout rooms" : "Het bericht is verstuurd naar alle ruimtes", + "Send a message to all breakout rooms" : "Stuur een bericht naar alle ruimtes", + "Breakout rooms are not started" : "Aparte vergaderruimtes zijn niet gestart", + "Disable lobby" : "Lobby uitschakelen", + "Settings for participant \"{user}\"" : "Instellingen voor deelnemer \"{user}\"", + "Participant \"{user}\"" : "Deelnemer \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gast", + "Ringing …" : "Bellen ...", + "Call rejected" : "Gesprek afgewezen", + "{time} talking …" : "{time} bellend ...", + "{time} talking time" : "{time} beltijd", + "Raised their hand" : "Hand opgestoken", + "Joined with video" : "Deelname via video", + "Joined via phone" : "Deelname via telefoon", + "Joined with audio" : "Deelname via audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "De beschrijving moet kleiner zijn dan of gelijk zijn aan {maxLength} tekens. Je tekst is nu {charactersCount} tekens lang.", + "Remove group and members" : "Verwijderen groep en leden", + "Remove team and members" : "Verwijderen team en leden", + "Remove participant" : "Verwijder deelnemer", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Wilt je groep \"{displayName}\" en de leden ervan echt uit dit gesprek verwijderen?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Wilt je team \"{displayName}\" en zijn leden echt uit dit gesprek verwijderen?", + "Do you really want to remove {displayName} from this conversation?" : "Wilt je {displayName} echt uit dit gesprek verwijderen?", + "Notification was sent to {displayName}" : "Melding was verstuurd naar {displayName}", + "Could not send notification to {displayName}" : "Kon geen melding versturen naar {displayName}", + "Permissions granted to {displayName}" : "Machtiginen gegeven aan {displayName}", + "Could not modify permissions for {displayName}" : "Kon machtigingen voor {displayName} niet aanpassen", + "Permissions removed for {displayName}" : "Machtigingen verwijderd voor {displayName}", + "Permissions set to default for {displayName}" : "Machtigingen naar standaard hersteld voor {displayName}", + "in the lobby" : "in de lobby", + "Hang up phone" : "Telefoon ophangen", + "Move back to lobby" : "Verplaats terug naar lobby", + "Move to conversation" : "Verplaats naar gesprek", + "Dial-in PIN" : "Inbel PIN", + "Demote from moderator" : "Degradeer van moderator", + "Promote to moderator" : "Promoveer tot moderator", + "Resend invitation" : "Opnieuw verzenden uitnodiging", + "Send call notification" : "Verstuur gespreksmelding", + "Dial out phone number" : "Bel een telefoonnummer", + "Resume call for phone number" : "Hervat gesprek voor telefoonnummer", + "Put phone number on hold" : "Plaats telefoonummer in de wacht", + "Unmute phone number" : "Dempen telefoonnummer opheffen", + "Mute phone number" : "Demp telefoonnummer", + "Copy phone number" : "Kopieer telefoonnummer", + "Reset custom permissions" : "Herstel aangepaste machtigingen", + "Grant all permissions" : "Geef alle machtigingen", + "Remove all permissions" : "Verwijder alle machtigingen", + "Also ban from this conversation" : "Blokkeer ook voor dit gesprek", + "Internal note (reason to ban)" : "Interne notitie ( reden voor blokkeren)", + "Remove" : "Verwijderen", + "Permissions modified for {displayName}" : "Machtigingen aangepast voor {displayName}", + "Add users or groups" : "Toevoegen gebruikers of groepen", + "Add users" : "Toevoegen gebruikers", + "Add groups" : "Toevoegen groepen", + "Add teams" : "Teams toevoegen", + "Add other sources" : "Toevoegen andere bronnen", + "Add emails" : "Toevoegen e-mailadressen", + "Integrations" : "Integraties", + "Add federated users" : "Voeg gefedereerde gebruikers toe", + "Searching …" : "Zoeken ...", + "Search for more users" : "Zoek naar meer gebruikers", + "Search or add participants" : "Zoeken naar of toevoegen deelnemers", + "Invitation was sent to {actorId}" : "Uitnodig was verstuurd naar {actorId}", + "An error occurred while adding the participants" : "Er trad een fout op bij het toevoegen van deelnemers", + "Participants" : "Deelnemers", + "Participants ({count})" : "Deelnemers ({count})", + "Open chat" : "Openen gesprek", + "You have new unread messages in the chat." : "Je hebt nieuwe ongelezen berichten in de chat.", + "You have been mentioned in the chat." : "Je werd vermeld in een chat.", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Gedeelde objecten", + "No results found" : "Geen resultaten gevonden", + "Load more results" : "Laad meer resultaten", + "Recent threads" : "Recente draden", + "Projects" : "Projecten", + "No shared items" : "Geen gedeelde objecten", + "Thread notifications" : "Draad-berichten", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Verbind met een gesprek", + "Search conversations or users" : "Zoek in gesprekken of gebruikers", + "Select conversation" : "Selecteer een gesprek", + "Display name: {name}" : "Weergavenaam: {name}", + "Edit display name" : "Weergavenaam bewerken", + "Display name (required)" : "Weergavenaam (verplicht)", + "Save name" : "Naam opslaan", + "Error while saving sounds setting" : "Fout bij opslaan geluidsinstellingen", + "Play sounds when participants join or leave a call" : "Geluid afspelen wanneer deelnemers meedoen met een gesprek of het verlaten", + "Notification settings" : "Meldingsinstellingen", + "Invalid language ({languageId})" : "Ongeldige taal ({languageId})", + "Default language" : "Standaardtaal", + "Select location for attachments" : "Selecteer locatie voor bijlagen", + "Error while setting attachment folder" : "Fout bij instellen map voor bijlagen", + "Error while setting read status privacy" : "Fout bij instellen lees-status privacy", + "Privacy" : "Privacy", + "Attachments folder" : "Bijlagemap", + "Search" : "Zoeken", + "Focus the chat input" : "Focus op de chat invoer", + "Unfocus the chat input to use shortcuts" : "Verwijder focus op de chat invoer om sneltoetsen te kunnen gebruiken", + "Shortcuts while in a call" : "Snelkoppelingen tijdens een oproep", + "Camera on and off" : "Camera aan en uit", + "Microphone on and off" : "Microfoon aan en uit", + "Raise or lower hand" : "Hand omhoog of omlaag", + "Push to talk or push to mute" : "Tik om te praten of tik om te dempen", + "Start call silently" : "Start gesprek stil", + "Start call" : "Start oproep", + "End call" : "Beëindig gesprek", + "The server was updated, you cannot start or join a call." : "De server heeft een update gehad, je kan geen oproep starten of er aan deelnemen", + "You will be able to join the call only after a moderator starts it." : "Je kunt pas aan de oproep deelnemen als een moderator die gestart heeft.", + "End call for everyone" : "Beëindig gesprek voor iedereen", + "Recording" : "Opnemen", + "The call has been running for one hour." : "Dit gesprek is actief gedurende een uur", + "Cancel recording start" : "Annulleer start opname", + "Stop recording" : "Beëindig opname", + "You are not allowed to enable screensharing" : "Je bent niet bevoegd om schermdeling in te schakelen", + "No screensharing" : "Geen schermdelen", + "Screensharing options" : "Schermdelen opties", + "Enable screensharing" : "Inschakelen schermdelen", + "Bad sent video and screen quality." : "Slechte verzonden video- en schermkwaliteit.", + "Bad sent screen quality." : "Slechte verzonden schermkwaliteit.", + "Bad sent video quality." : "Slechte verzonden videokwaliteit.", + "Bad sent audio, video and screen quality." : "Slechte verzonden audio-, video- en schermkwaliteit.", + "Bad sent audio and screen quality." : "Slecht verzonden audio en schermkwaliteit.", + "Bad sent audio and video quality." : "Slechte verzonden audio- en videokwaliteit.", + "Bad sent audio quality." : "Slechte verzonden audiokwaliteit.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je scherm te zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren terwijl je je scherm deelt.", + "Disable background blur" : "Schakel vervaagde achtergrond uit", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Jouw internetverbinding of computer is overbelast en andere deelnemers kunnen jou scherm mogelijk niet zien. Om de situatie te verbeteren kun je jouw video uitzetten terwijl je screenshare gebruikt.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je scherm mogelijk niet zien.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet zien.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en je te zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren terwijl je je scherm deelt.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet verstaan ​​of zien. Om de situatie te verbeteren, kun je proberen je video uit te schakelen terwijl je een schermafbeelding uitvoert.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en je scherm te zien. Probeer je schermdeling uit te schakelen om de situatie te verbeteren.", + "Disable screenshare" : "Schakel Scherm-delen uit", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet verstaan ​​of zien. Probeer je video uit te schakelen om de situatie te verbeteren.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je misschien niet verstaan.", + "Screen sharing is not supported by your browser." : "Schermdelen wordt niet ondersteund door je browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Schermdelen vereist het over HTTPS laden van de pagina.", + "Screensharing requires the page to be loaded through HTTPS." : "Schermdelen vereist het over HTTPS laden van de pagina.", + "An error occurred while starting screensharing." : "Er trad een fout op bij starten schermdelen.", + "Show your screen" : "Mijn scherm weergeven", + "Stop screensharing" : "Stop schermdelen", + "Mute others" : "Anderen dempen", + "Start recording" : "Begin opname", + "Remove participant {name}" : "Deelnemer {name} verwijderen", + "Delete now" : "Verwijder nu", + "Keep" : "Behouden", + "Select a region" : "Selecteer een regie", + "Local time: {time}" : "Lokale tijd: {time}", + "Search …" : "Zoeken ...", + "Message without mention" : "Bericht zonder vermelding", + "Mention myself" : "Vermeld mezelf", + "The conversation does not exist" : "Het gesprek bestaat niet", + "Join a conversation or start a new one!" : "Doe mee met een discussie, of start een nieuwe!", + "Duplicate session" : "Dubbele sessie", + "Join a conversation or start a new one" : "Doe mee met een discussie, of start een nieuwe", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud gebruiker", + "User password" : "Gebruiker wachtwoord", + "Talk conversation" : "Talk gesprek", + "Skip TLS verification" : "TLS verificatie overslaan", + "Matrix server URL" : "Matrix server URL", + "User" : "Gebruiker", + "Matrix channel" : "Matrix kanaal", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost gebruiker", + "Team name" : "Team naam", + "Channel name" : "Kanaal naam", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "Gebruikersnaam of e-mailadres", + "Rocket.Chat channel" : "Rocket.Chat kanaal", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot gebruikersnaam", + "Bot API key" : "Bot API-sleutel", + "Zulip channel" : "Zulip kanaal", + "API token" : "API token", + "Slack channel" : "Slack kanaal", + "Server ID or name" : "Server ID of naam", + "Channel" : "Kanaal", + "Login" : "Inloggen", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (bijv. chat.freenode.net:6667)", + "Nickname" : "Roepnaam", + "Connection password" : "Verbinding wachtwoord", + "IRC channel" : "IRC kanaal", + "Channel password" : "Kanaal password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ wachtwoord", + "Use TLS" : "Gebruik TLS", + "Use SASL" : "Gebruik SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Draad ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Peilingen", + "Deck cards" : "Deck kaarten", + "Voice messages" : "Voice berichten", + "Locations" : "Locaties", + "Audio" : "Geluid", + "Show all media" : "Toon alle media", + "Show all files" : "Toon alle bestanden", + "Show all deck cards" : "Toon alle Deck kaarten", + "Show all voice messages" : "Toon alle voice berichten", + "Show all locations" : "Toon alle locaties", + "Show all audio" : "Toon alle audio", + "Show all other" : "Toon alle anderen", + "Follow conversation settings" : "Volg conversatie instellingen", + "Group" : "Groep", + "Team" : "Team", + "You promoted {user0} and {user1} to moderators" : "Je promoveerde {user0} en {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Je promoveerde{user0}, {user1} en %n meer deelnemer to moderators","Je promoveerde {user0}, {user1} en %n meer deelnemers tot moderators"], + "An administrator promoted you and {user0} to moderators" : "Een beheerder promoveerde jou en {user0} tot moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveerde jou en {user0} tot moderators", + "You:" : "Jij:", + "You: {lastMessage}" : "Jij: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "De server heeft een update gehad.", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Je probeert deel te nemen aan een gesprek terwijl je een actieve sessie hebt in een ander venster of apparaat. Dit wordt momenteel niet ondersteund door Nextcloud Talk. Wat wil je doen?", + "Leave this page" : "Verlaat deze pagina", + "Join here" : "Meld u hier aan", + "An error occurred while posting deck card to conversation" : "Een fout heeft plaatsgevonden bij het plaatsen van de deck kaart in het gesprek", + "Post to a conversation" : "Publiceer in een gesprek", + "Post to conversation" : "Publiceren naar gesprek", + "The recording failed. Please contact your administrator." : "The opname is mislukt. Neem contact op met je beheerder.", + "An error occurred while posting location to conversation" : "Een fout heeft plaatsgevonden bij het versturen van de locatie naar het gesprek", + "Share to a conversation" : "Deel naar een gesprek", + "Share to conversation" : "Deel naar gesprek", + "Error while clearing conversation history" : "Fout bij het verwijderen van de gespreksgeschiedenis", + "Error occurred while allowing guests" : "Fout bij toelaten gasten", + "Error occurred while disallowing guests" : "Fout bij toegang ontzeggen voor gasten", + "Error occurred when restricting the conversation to moderator" : "Er is een fout opgetreden bij het beperken van het gesprek tot moderator", + "Error occurred when opening the conversation to everyone" : "Er is een fout opgetreden bij het openen van het gesprek voor iedereen", + "Conversation password has been saved" : "Gesprekswachtwoord opgeslagen", + "Conversation password has been removed" : "Gesprekswachtwoord verwijderd", + "Error occurred while saving conversation password" : "Er trad een fout op bij het opslaan van het gesprekswachtwoord ", + "Could not post message: {errorMessage}" : "Kon bericht niet plaatsen: {errorMessage}", + "An error occurred while fetching the participants" : "Er trad een fout op bij het ophalen van de deelnemers", + "Could not send invitation to {actorId}" : "Kon uitnodiging niet versturen naar {actorId}", + "Invitations sent" : "Uitnodigingen verzonden", + "Error occurred when sending invitations" : "Er trad een fout op bij het verzenden van uitnodigingen", + "{guest} (guest)" : "{guest} (gast)", + "Failed to add reaction" : "Reactie toevoegen mislukt", + "Failed to remove reaction" : "Reactie verwijderen mislukt", + "The server is in maintenance mode." : "De server staat in onderhoudsmodus.", + "Federated server was updated." : "Gefedereerde server heeft een update gehad.", + "Error while uploading file \"{fileName}\"" : "Fout bij opslaan bestand \"{fileName}\".", + "Not enough free space to upload file \"{fileName}\"" : "Onvoldoende vrije ruimte om \"{fileName}\" op te slaan", + "You are not allowed to share files" : "Je bent niet geautoriseerd om bestanden te delen", + "Error while sharing file" : "Fout bij delen bestand", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "De browser die je gebruikt, wordt niet volledig ondersteund door Nextcloud Talk. Gebruik alsjeblieft de laatste versie van Mozilla Firefox, Microsoft Edge, Google Chrome, Opera of Apple Safari.", + "_%n minute _::_%n minutes_" : ["%n minuten","%n minuten"], + "In {hours} and {minutes}" : "In {hours} en {minutes}", + "_In %n minute_::_In %n minutes_" : ["Over %n minuten","Over %n minuten"], + "Later today – {timeLocale}" : "Later vandaag – {timeLocale}", + "Tomorrow – {timeLocale}" : "Morgen - {timeLocale}", + "This weekend – {timeLocale}" : "Dit weekend - {timeLocale}", + "Next week – {timeLocale}" : "Volgende week - {timeLocale}", + "Message link copied to clipboard" : "Bericht-link naar klembord gekopieerd", + "Conversation link copied to clipboard" : "Gespreks-link naar klembord gekopieerd", + "The link could not be copied" : "De link kon niet gekopieerd worden", + "Error while parsing a PROPFIND error" : "Fout tijdens het analyseren van een PROPFIND fout", + "Lost connection to signaling server. Trying to reconnect." : "Verbinding met signaleringsserver verbroken. Ik probeer opnieuw verbinding te maken.", + "Please reload the page." : "Herlaad deze pagina.", + "Do not disturb" : "Niet storen", + "Away" : "Afwezig", + "Microphone {number}" : "Microfoon {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Je lijkt te spreken terwijl je gedempt bent. Haal de demping weg zodat anderen je ook horen", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Kon geen verbinding maken met ten minste één deelnemer. Een TURN server kan nodig zijn. Neem contact op met je beheerder om er eentje te laten inrichten volgende {linkstart}deze instructies{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dit duurt langer dan verwacht. Zijn de mediamachtigingen al verstrekt (of geweigerd)? Zo ja, herstart dan je browser, omdat audio en video niet lukken", + "Access to microphone & camera is only possible with HTTPS" : "Toegang tot microfoon & camera is alleen mogelijk met HTTPS", + "Please move your setup to HTTPS" : "Stel de verbinding als HTTPS in", + "Access to microphone & camera was denied" : "Toegang tot microfoon & camera geweigerd", + "WebRTC is not supported in your browser" : "WebRTC wordt niet ondersteund door je browser", + "Please use a different browser like Firefox or Chrome" : "Gebruik een andere browser, zoals Firefox of Chrome", + "Error while accessing microphone & camera" : "Fout bij benaderen microfoon & camera", + "%s Talk on your mobile devices" : "%s Talk op je mobiele apparaten", + "Join conversations at any time, anywhere, on any device." : "Doe mee met gesprekken op elk tijdstip, overal met elk apparaat.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "Nederlands", + "Call summary (%s)" : "Gesprekssamenvatting (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "De bot gespekssamenvatting plaatst na de oproep een overzichtsbericht waarin alle deelnemers worden vermeld en taken worden beschreven", + "Tasks" : "Taken", + "Notes" : "Notities", + "Reports" : "Rapporten", + "Decisions" : "Besluiten", + "Agenda" : "Agenda", + "Call summary" : "Gesprekssamenvatting", + "Call summary - {title}" : "Gesprekssamenvatting - {title}", + "Talk conversation for event" : "Talk gesprek voor gebeurtenis", + "Next meeting" : "Volgende vergadering", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Plan een vergadering vanuit je agenda. Een Talk conversatie moet worden ingesteld als locatie om hier te verschijnen", + "Join conversations from remote Nextcloud servers" : "Neem deel aan gesprekken van andere Netxcloud servers", + "Set reminder for later today" : "Herinnering instellen voor later vandaag ", + "Set reminder for tomorrow" : "Herinnering instellen voor morgen ", + "Set reminder for this weekend" : "Herinnering instellen voor het weekend ", + "Set reminder for next week" : "Herinnering instellen voor volgende week", + "Generate summary" : "Maak samenvatting", + "Talk recording from {time} ({conversation})" : "Talk opnam van {time} ({conversation})", + "Your privacy setting has been saved" : "Je privacy-instellingen zijn opgeslagen", + "Failed to save sounds setting" : "Kon geluidsinstellingen niet opslaan", + "Sounds setting saved" : "Geluidsinstellingen opgeslagen", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Je nam deel aan het gesprek in een ander venster of apparaat. Dit wordt momenteel niet ondersteund door Nextcloud Talk, dus deze sessie is gesloten." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nl.json b/l10n/nl.json new file mode 100644 index 0000000..0e03a40 --- /dev/null +++ b/l10n/nl.json @@ -0,0 +1,1748 @@ +{ "translations": { + "a conversation" : "een gesprek", + "(Duration %s)" : "(Duur %s)", + "You attended a call with {user1}" : "Je nam deel aan een oproep met {user1}", + "_%n guest_::_%n guests_" : ["%n gast","%n gasten"], + "You attended a call with {user1} and {user2}" : "Je nam deel aan een oproep met {user1} and {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Je nam deel aan een oproep met {user1}, {user2} and {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Je nam deel aan een oproep met {user1}, {user2}, {user3} and {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Je nam deel aan een oproep met {user1}, {user2}, {user3}, {user4} and {user5}", + "_%n other_::_%n others_" : ["%n andere","%n anderen"], + "{actor} invited you to {call}" : "{actor} heeft je uitgenodigd voor telefoongesprek {call}", + "You were invited to a conversation or had a call" : "Je bent uitgenodigd voor een gesprek of had een oproep", + "Other activities" : "Andere activiteiten", + "Talk" : "Talk", + "Guest" : "Gast", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Welkom bij Nextcloud Talk!\nIn dit gesprek vertellen we je over de nieuwe functies die beschikbaar zijn in Nextcloud Talk.", + "## New in Talk %s" : "## Nieuw in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge en Safari kunnen nu worden gebruikt om deel te nemen aan audio- en videogesprekken", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- een-op-eengesprekken zijn nu blijvend en kunnen niet meer per ongeluk in groepsgesprekken worden veranderd. Wanneer een deelnemer het gesprek verlaat, wordt het gesprek daarnaast niet meer automatisch verwijderd. Alleen als beide deelnemers vertrekken, wordt het gesprek van de server verwijderd.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Je kunt nu alle deelnemers op de hoogte stellen door \"@all\" in de chat te plaatsen", + "- With the \"arrow-up\" key you can repost your last message" : "- Met de \"pijl-omhoog\"-toets kun je je laatste bericht opnieuw plaatsen", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk heeft nu ook commando's: stuur \"/help\" als chatbericht om te zien of er commando's door de beheerder zijn ingesteld", + "- With projects you can create quick links between conversations, files and other items" : "- Met projecten kun je snel links maken tussen gesprekken, bestanden en andere objecten", + "- You can now mention guests in the chat" : "- Je kunt nu gasten in de chat vernoemen met een mention", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Gesprekken kunnen nu een lobby hebben. Dit stelt moderators in staat om alvast deel te nemen aan de chat en het gesprek om de vergadering voor te bereiden, terwijl gebruikers en gasten moeten wachten", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Je kunt nu direct op berichten reageren, zodat je andere gebruikers meer context kunt geven over de inhoud van je bericht", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Zoeken naar gesprekken en deelnemers filtert nu ook je bestaande gesprekken, waardoor het veel gemakkelijker wordt om eerdere gesprekken te vinden", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Je kunt nu aangepaste gebruikersgroepen toevoegen aan gesprekken wanneer de kringen-app is geïnstalleerd", + "- Check out the new grid and call view" : "- Een nieuw raster- en oproepoverzicht", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Je kunt bestanden nu rechtstreeks vanaf je apparaat naar de chat uploaden en slepen", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Gedeelde bestanden worden nu direct geopend in het chatvenster met de viewer-apps", + "- You can now search for chats and messages in the unified search in the top bar" : "- Je kunt nu naar chats en berichten zoeken via de geïntegreerde zoekfunctie in de bovenste balk", + "- Spice up your messages with emojis from the emoji picker" : "- Geef je berichten meer pit met emoji's uit de emoji-kiezer", + "- You can now change your camera and microphone while being in a call" : "- Je kunt nu je camera en microfoon wijzigen tijdens een telefoongesprek", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Geef je gesprekken wat context met een beschrijving en open ze zodat ingelogde gebruikers ze kunnen vinden en zelf kunnen deelnemen", + "- See a read status and send failed messages again" : "- Zie een leesstatus en verzend mislukte berichten opnieuw", + "- Raise your hand in a call with the R key" : "- Steek tijdens een telefoongesprek je hand op met de R-toets", + "- Join the same conversation and call from multiple devices" : "- Neem deel aan en bel in hetzelfde gesprek vanaf meerdere apparaten", + "- Send voice messages, share your location or contact details" : "- Verstuur gesproken berichten, deel jou locatie of contact informatie", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Voeg groepen toe aan een gesprek en nieuwe groepsleden worden automatisch toegevoegd als deelnemers", + "- A preview of your audio and video is shown before joining a call" : "- Een preview van je audio en video wordt getoond voor het deelnemen aan een gesprek", + "- You can now blur your background in the newly designed call view" : "- Je kunt nu je achtergrond vervagen in het nieuw ontworpen gespreksoverzicht", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatoren kunnen nu algemene en individuele machtigingen aan deelnemers toekennen", + "- You can now react to chat messages" : "- Je kunt nu reageren op chat berichten", + "- In the sidebar you can now find an overview of the latest shared items" : "- In de zijbalk kun je nu een overzicht vinden van de laatst gedeelde objecten", + "- Use a poll to collect the opinions of others or settle on a date" : "- Bevraag de mening van anderen of gebruik een peiling om een datum te kiezen", + "- Configure an expiration time for chat messages" : "- Een vervaltijd voor chatberichten configureren", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Start gesprekken zonder anderen op de hoogte te stellen in grote gesprekken. U kunt individuele gespreksmeldingen sturen zodra het gesprek is gestart.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Chatberichten verzenden zonder de ontvangers hiervan op de hoogte te stellen voor gevallen dat het bericht niet dringend is", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoji's kunnen nu automatisch worden aangevuld door een \":\" te typen", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Koppel verschillende items met behulp van de nieuwe Smart Picker door een \"/\" te typen", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderators kunnen nu breakout rooms creëeren (High-performance backend is noodzakelijk)", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Berichten kunnen nu worden aangepast door ingelogde auteurs en moderators tot maximaal 6 uur.", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderators kunnen nu accounts en gasten verbannen om te voorkomen dat ze terug komen in een gesprek.", + "- Schedule a meeting into your calendar from within a conversation" : "- Plan een vergadering in je eigen agenda vanuit het gesprek", + "- Moderators can now pin messages so they are kept at the top" : "- Moderators kunnen nu berichten vastzetten zodat ze bovenaan blijven staan.", + "_All %n participant_::_All %n participants_" : ["%n deelnemer","Alle %n deelenemers"], + "Talk updates ✅" : "Talk updates ✅", + "Reaction deleted by author" : "Reactie verwijderd door schrijver", + "{actor} created the conversation" : "{actor} heeft het gesprek gemaakt", + "You created the conversation" : "Je hebt het gesprek gemaakt", + "System created the conversation" : "System heeft het gesprek aangemaakt", + "An administrator created the conversation" : "Een beheerder heeft het gesprek gemaakt", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} hernoemde gesprek van \"%1$s\" naar \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Je hernoemde het gesprek van \"%1$s\" naar \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Een beheerder hernoemde het gesprek van \"%1$s\" naar \"%2$s\"", + "{actor} set the description" : "{actor} de beschrijving ingesteld", + "You set the description" : "Jij hebt de beschrijving ingesteld", + "An administrator set the description" : "Een beheerder heeft de beschrijving ingesteld", + "{actor} removed the description" : "{actor} verwijderde de beschrijving", + "You removed the description" : "Jij verwijderde de beschrijving", + "An administrator removed the description" : "Een beheerder verwijderde de beschrijving", + "You started a silent call" : "Je startte een stille oproep", + "{actor} started a silent call" : "{actor} startte een stille oproep", + "You started a call" : "Je startte een telefoongesprek", + "{actor} started a call" : "{actor} startte een telefoongesprek", + "Incoming call" : "Inkomend gesprek", + "{actor} joined the call" : "{actor} heeft zich bij het telefoongesprek aangesloten", + "You joined the call" : "Je hebt je bij de oproep aangesloten", + "{actor} left the call" : "{actor} heeft de oproep verlaten", + "You left the call" : "Je hebt het telefoongesprek verlaten", + "{actor} unlocked the conversation" : "{actor} heeft het gesprek ontgrendeld", + "You unlocked the conversation" : "Je hebt het gesprek ontgrendeld.", + "An administrator unlocked the conversation" : "Een beheerder heeft het gesprek ontgrendeld", + "{actor} locked the conversation" : "{actor} heeft het gesprek vergrendeld", + "You locked the conversation" : "Je hebt het gesprek vergrendeld", + "An administrator locked the conversation" : "Een beheerder heeft het gesprek vergrendeld", + "{actor} limited the conversation to the current participants" : "{actor} heeft het gesprek beperkt tot de huidige deelnemers", + "You limited the conversation to the current participants" : "Je hebt het gesprek beperkt tot de huidige deelnemers", + "An administrator limited the conversation to the current participants" : "Een beheerder heeft het gesprek beperkt tot de huidige deelnemers", + "{actor} opened the conversation to registered users" : "{actor} heeft het gesprek geopend voor geregistreerde gebruikers", + "You opened the conversation to registered users" : "Je hebt het gesprek geopend voor geregistreerde gebruikers", + "An administrator opened the conversation to registered users" : "Een beheerder heeft het gesprek geopend voor geregistreerde gebruikers", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} heeft het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "You opened the conversation to registered users and users created with the Guests app" : "Je hebt het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Een beheerder heeft het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "The conversation is now open to everyone" : "Het gesprek is nu open voor iedereen", + "{actor} opened the conversation to everyone" : "{actor} heeft het gesprek voor iedereen geopend", + "You opened the conversation to everyone" : "Je hebt het gesprek voor iedereen geopend", + "{actor} restricted the conversation to moderators" : "{actor} beperkte het gesprek tot moderators", + "You restricted the conversation to moderators" : "Je hebt het gesprek beperkt tot moderators", + "{actor} started breakout rooms" : "{actor} startte aparte vergaderruimtes", + "You started breakout rooms" : "Je startte aparte vergaderruimtes", + "{actor} stopped breakout rooms" : "{actor} beëindigde aparte vergaderruimtes", + "You stopped breakout rooms" : "Je beëindigde aparte vergaderruimtes", + "{actor} allowed guests" : "{actor} heeft gasten toegelaten", + "You allowed guests" : "Je hebt gasten toegelaten", + "An administrator allowed guests" : "Een beheerder heeft gasten toegelaten", + "{actor} disallowed guests" : "{actor} heeft gasten geweigerd", + "You disallowed guests" : "Je hebt gasten geweigerd", + "An administrator disallowed guests" : "Een beheerder heeft gasten geweigerd", + "{actor} set a password" : "{actor} heeft een wachtwoord ingesteld", + "You set a password" : "Je hebt een wachtwoord ingesteld", + "An administrator set a password" : "Een beheerder heeft een wachtwoord ingesteld", + "{actor} removed the password" : "{actor} heeft het wachtwoord verwijderd", + "You removed the password" : "Je hebt het wachtwoord verwijderd", + "An administrator removed the password" : "Een beheerder heeft het wachtwoord verwijderd", + "{actor} added {user}" : "{actor} heeft {user} toegevoegd", + "You joined the conversation" : "Je neemt deel aan het gesprek", + "{actor} joined the conversation" : "{actor} neemt deel aan het gesprek", + "You added {user}" : "Je hebt {user} toegevoegd", + "{actor} added you" : "{actor} heeft jou toegevoegd", + "An administrator added you" : "Een beheerder heeft jou toegevoegd", + "An administrator added {user}" : "Een beheerder heeft {user} toegevoegd", + "You left the conversation" : "Je hebt het gesprek verlaten", + "{actor} left the conversation" : "{actor} heeft het gesprek verlaten", + "{actor} removed {user}" : "{actor} heeft {user} verwijderd", + "You removed {user}" : "Je hebt {user} verwijderd", + "{actor} removed you" : "{actor} heeft jou verwijderd", + "An administrator removed you" : "Een beheerder heeft jou verwijderd", + "An administrator removed {user}" : "Een beheerder heeft {user} verwijderd", + "{actor} invited {federated_user}" : "{actor} nodigde {federated_user} uit", + "You invited {federated_user}" : "Je nodigde {federated_user} uit", + "You accepted the invitation" : "Je hebt de uitnodiging geaccepteerd", + "{actor} invited you" : "{actor} heeft je uitgenodigd", + "An administrator invited you" : "Een beheerder heeft je uitgenodigd", + "An administrator invited {federated_user}" : "Een beheerder heeft {federated_user} uitgenodigd", + "{federated_user} accepted the invitation" : "{federated_user} heeft de uitnodiging geaccepteerd", + "{actor} removed {federated_user}" : "{actor} heeft {federated_user} verwijderd", + "You removed {federated_user}" : "Jij hebt {federated_user} verwijderd", + "You declined the invitation" : "Je hebt de uitnodiging afgewezen", + "An administrator removed {federated_user}" : "Een beheerder heeft {federated_user} verwijderd", + "{federated_user} declined the invitation" : "{federated_user} heeft de uitnodiging geweigerd", + "{actor} added group {group}" : "{actor} voegde groep {group} toe", + "You added group {group}" : "Je voegde groep {group} toe", + "An administrator added group {group}" : "Een beheerder voegde groep {group} toe", + "{actor} removed group {group}" : "{actor} verwijderde groep {group}", + "You removed group {group}" : "Je verwijderde groep {group}", + "An administrator removed group {group}" : "Een beheerder verwijderde groep {group}", + "{actor} added team {circle}" : "{actor} voegde team {circle} toe", + "You added team {circle}" : "Je voegde team {circle} toe", + "An administrator added team {circle}" : "Een beheerder voegde team {circle} toe", + "{actor} removed team {circle}" : "{actor} verwijderde team {circle}", + "You removed team {circle}" : "Je verwijderde team {circle}", + "An administrator removed team {circle}" : "Een beheerder heeft team {circle} verwijderd", + "{actor} added {phone}" : "{actor} voegde {phone} toe", + "You added {phone}" : "Je voegde {phone} toe.", + "An administrator added {phone}" : "Een beheerder heeft {phone} toegevoegd", + "{actor} removed {phone}" : "{actor} verwijderde {phone}", + "You removed {phone}" : "Je verwijderde {phone}", + "An administrator removed {phone}" : "Een beheerder heeft {phone} verwijderd", + "{actor} promoted {user} to moderator" : "{actor} heeft {user} bevorderd tot moderator", + "You promoted {user} to moderator" : "Je hebt {user} bevorderd tot moderator", + "{actor} promoted you to moderator" : "{actor} heeft jou tot moderator bevorderd", + "An administrator promoted you to moderator" : "Een beheerder heeft jou tot moderator bevorderd", + "An administrator promoted {user} to moderator" : "Een beheerder heeft {user} tot moderator bevorderd", + "{actor} demoted {user} from moderator" : "{actor} heeft {user} gedegradeerd als moderator", + "You demoted {user} from moderator" : "Je hebt {user} gedegradeerd als moderator", + "{actor} demoted you from moderator" : "{actor} heeft jou uit gedegradeerd als moderator", + "An administrator demoted you from moderator" : "Een beheerder heeft jou gedegradeerd als moderator", + "An administrator demoted {user} from moderator" : "Een beheerder heeft {user} gedegradeerd als moderator", + "{actor} shared a file which is no longer available" : "{actor} heeft een bestand gedeeld dat niet meer beschikbaar is", + "You shared a file which is no longer available" : "Je hebt een bestand gedeeld dat niet meer beschikbaar is", + "File shares are currently not supported in federated conversations" : "Bestandsdelen is momenteel niet ondersteund in gesprekken met andere Nextcloud servers", + "The shared location is malformed" : "De gedeelde locatie heeft een onjuiste opgemaakt", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} heeft Matterbridge opgezet om dit gesprek te synchroniseren met andere chats", + "You set up Matterbridge to synchronize this conversation with other chats" : "Je hebt Matterbridge opgezet om dit gesprek te synchroniseren met andere chats.", + "{actor} updated the Matterbridge configuration" : "{actor} heeft de Matterbridge-configuratie aangepast", + "You updated the Matterbridge configuration" : "Je hebt de Matterbridge-configuratie aangepast", + "{actor} removed the Matterbridge configuration" : "{actor} heeft de Matterbridge-configuratie verwijderd", + "You removed the Matterbridge configuration" : "Je hebt de Matterbridge-configuratie verwijderd", + "{actor} started Matterbridge" : "{actor} heeft Matterbridge gestart", + "You started Matterbridge" : "Je hebt Matterbridge gestart", + "{actor} stopped Matterbridge" : "{actor} heeft Matterbridge gestopt", + "You stopped Matterbridge" : "Je hebt Matterbridge gestopt", + "{actor} deleted a message" : "{actor} verwijderde een bericht", + "You deleted a message" : "Je verwijderde een bericht", + "{actor} edited a message" : "{actor} bewerkte een bericht", + "You edited a message" : "Je bewerkte een bericht", + "{actor} deleted a reaction" : "{actor} verwijderde een bericht.", + "You deleted a reaction" : "Je verwijderde een bericht", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n week","Je hebt de vervalperiode voor berichten ingesteld op %n weken"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n dag","Je hebt de vervalperiode voor berichten ingesteld op %n dagen"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n uur","Je hebt de vervalperiode voor berichten ingesteld op %n uren"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Je hebt de vervalperiode voor berichten ingesteld op %n minuut","Je hebt de vervalperiode voor berichten ingesteld op %n minuten"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n week","{actor} heeft de vervalperiode voor berichten ingesteld op %n weken"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n dag","{actor} heeft de vervalperiode voor berichten ingesteld op %n dagen"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n uur","{actor} heeft de vervalperiode voor berichten ingesteld op %n uren"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} heeft de vervalperiode voor berichten ingesteld op %n minuut","{actor} heeft de vervalperiode voor berichten ingesteld op %n minuten"], + "{actor} disabled message expiration" : "{actor} heeft berichtverval uitgeschakeld", + "You disabled message expiration" : "Jij hebt berichtverval uitgeschakeld", + "{actor} cleared the history of the conversation" : "{actor} heeft de gesprekshistorie leeggemaakt", + "You cleared the history of the conversation" : "Je hebt de gesprekshistorie schoongemaakt", + "{actor} set the conversation picture" : "{actor} heeft de gespreksafbeelding ingesteld", + "You set the conversation picture" : "Jij hebt de gespreksafbeelding ingesteld", + "{actor} removed the conversation picture" : "{actor} heeft de gespreksafbeelding verwijderd", + "You removed the conversation picture" : "Jij hebt de gespreksafbeelding verwijderd", + "{actor} ended the poll {poll}" : "{actor} beëindigde de peiling {poll}", + "You ended the poll {poll}" : "Je beëindigde de peiling {poll}", + "{actor} started the video recording" : "{actor} startte de video-opname", + "You started the video recording" : "Jij startte de video-opname", + "{actor} stopped the video recording" : "{actor} beëindigde de video-opname", + "You stopped the video recording" : "Jij beëindigde de video-opname", + "{actor} started the audio recording" : "{actor} startte de audio-opname", + "You started the audio recording" : "Jij startte de audio-opname", + "{actor} stopped the audio recording" : "{actor} beëindigde de audio-opname", + "You stopped the audio recording" : "Jij beëindigde de audio-opname", + "The recording failed" : "De opname is mislukt", + "Someone voted on the poll {poll}" : "Iemand heeft gestemd op de enquête {poll}", + "Message deleted by author" : "Bericht verwijderd door de schrijver", + "Message deleted by {actor}" : "Bericht verwijderd door {actor}", + "Message deleted by you" : "Bericht verwijderd door jou", + "Deleted user" : "Verwijderen gebruiker", + "Unknown number" : "Onbekend aantal", + "Administration" : "Beheer", + "System" : "Systeem", + "%s (guest)" : "%s (gast)", + "Call ended (Duration {duration})" : "Gesprek beëindigd (duur {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} beëindigde het gesprek (duur {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Gesprek met %n gast is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})","Gesprek met %n gasten is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Gesprek met %n gast is beëindigd (duur {duration})","Oproep met%n gasten is beëindigd (duur {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} beëindigde het gesprek met %n gasten (Duration {duration})","{actor} beëindigde het gesprek met %n gasten (Looptijd {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1} ended (Duration {duration})" : "Gesprek met {user1} is beëindigd (duur {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1} (Looptijd {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1} en {user2} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Gesprek met {user1} en {user2} is beëindigd (duur {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1} en {user2} (Looptijd {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2} en {user3} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Gesprek met {user1}, {user2} en {user3} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2} en {user3} (Looptijd {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3} en {user4} is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3} en {user4} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2}, {user3} en {user4} (Looptijd {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3}, {user4} en {user5}is beëindigd, omdat het de maximale gespreksduur heeft bereikt (duur {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Gesprek met {user1}, {user2}, {user3}, {user4} en {user5} is beëindigd (duur {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} beëindigde het gesprek met {user1}, {user2}, {user3}, {user4} en {user5} (Looptijd {duration})", + "Message of {user} in {conversation}" : "Bericht van {user} in {conversation}", + "Message of {user}" : "Bericht van {user}", + "Message of a deleted user in {conversation}" : "Bericht van een verwijderde gebruiker in {conversation}", + "Talk conversations" : "Talk gesprekken", + "Talk to %s" : "Spreek met %s", + "An error occurred. Please contact your administrator." : "Er is een fout opgetreden. Neem contact op met de beheerder a.u.b.", + "Storage quota exceeded" : "Opslagquotum overschreden", + "File not found" : "Bestand niet gevonden", + "File is not shared, or shared but not with the user" : "Bestand is niet gedeeld, of wel gedeeld maar niet met de gebruiker", + "No account available to delete." : "Geen account beschikbaar om te verwijderen.", + "Poll" : "Peiling", + "Password needs to be set" : "Wachtwoord moet ingesteld worden", + "Uploading the file failed" : "Uploaden bestand mislukt", + "No image file provided" : "Geen afbeelding opgegeven", + "File is too big" : "Bestand te groot", + "Invalid file provided" : "Ongeldig bestand aangeleverd", + "Invalid image" : "Ongeldige afbeelding", + "Unknown filetype" : "Onbekend bestandsformaat", + "Talk mentions" : "Talk vermeldingen", + "More conversations" : "Meer gesprekken", + "Say hi to your friends and colleagues!" : "Zeg hallo tegen je vrienden en collega's!", + "No unread mentions" : "Geen ongelezen vermeldingen", + "Call in progress" : "Oproep is bezig", + "You were mentioned" : "Je werd vermeld", + "Write to conversation" : "Schrijf naar gesprek", + "Writes event information into a conversation of your choice" : "Schrijft gebeurtenisinformatie in een gesprek naar keuze", + "Missing email field in header line" : "E-mailveld mist in header-regel", + "Following lines are invalid: %s" : "De volgende regels zijn onjuist: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s nodigde je uit voor gesprek \"%2$s\".", + "You were invited to conversation \"%s\"." : "Je bent uitgenodigd voor gesprek \"%s\".", + "Conversation invitation" : "Gespreksuitnodiging", + "Description" : "Beschrijving", + "You can also dial-in via phone with the following details" : "Je kunt ook via telefoon inbellen met behulp van deze informatie", + "Dial-in information" : "Inbelinformatie", + "Meeting ID" : "Vergader-ID", + "Your PIN" : "Jouw PIN", + "Click the button below to join the lobby now." : "Klik op de onderstaan knop om in de lobby te komen", + "Click the link below to join the lobby now." : "Klik op de onderstaande link om in de lobby te komen", + "Join lobby for \"%s\"" : "Meldt je aan in de lobby voor \"%s\"", + "Click the button below to join the conversation now." : "Klik op de onderstaande knop om nu deel te nemen aan het gesprek.", + "Click the link below to join the conversation now." : "Klik op de onderstaande link om nu deel te namen aan het gesprek.", + "Meeting" : "Vergadering", + "Password request: %s" : "Wachtwoordverzoek: %s", + "Private conversation" : "Privégesprek", + "Deleted user (%s)" : "Verwijderde gebruiker (%s)", + "Failed to upload call recording" : "Upload gespreksopname mislukt", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "De opnameserver kon de gespreksopname {call} niet uploaden. Neem contact op met de administratie a.u.b.", + "Share to chat" : "Deel met chat", + "Dismiss notification" : "Handel melding af", + "Call recording now available" : "Gespreksopname nu beschikbaar", + "The recording for the call in {call} was uploaded to {file}." : "De opname van gesprek {call} is geüpload naar {file}", + "Transcript now available" : "Transcript nu beschikbaar", + "The transcript for the call in {call} was uploaded to {file}." : "De transcript voor gesprek {call} is geüpload naar {file}", + "Failed to transcript call recording" : "Transripten van gespreksopname is mislukt", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "De server kon de de opname van gesprek {call} niet transcriberen naar {file}. Neem contact op met de administratie a.u.b.", + "Call summary now available" : "Gesprekssamenvatting nu beschikbaar", + "The summary for the call in {call} was uploaded to {file}." : "De samenvatting van gesprek {call} is geüpload naar {file}.", + "Failed to summarize call recording" : "Samenvatten van gespreksopname is mislukt", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "De server kon gesprek {call} niet samenvatten naar{file}. Neem contact op met de administratie a.u.b.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} heeft je uitgenodigd om deel te nemen aan {roomName} op {remoteServer}", + "Accept" : "Accepteren", + "Decline" : "Afwijzen", + "{user1} invited you to a federated conversation" : "{user1} nodigde je uit voor een gefederaliseerd gesprek", + "New message" : "Nieuw bericht", + "Reminder" : "Herinnering", + "Notification" : "Melding", + "Someone reacted in a private conversation" : "Iemand reageerde in een privégesprek", + "You received a message in a private conversation" : "Je hebt een bericht ontvangen in een privégepsrek", + "Reminder in a private conversation" : "Herinnering in een privégesprek", + "Someone mentioned you in a private conversation" : "Iemand heeft je genoemd in een privégesprek", + "Notification in a private conversation" : "Melding in een privégesprek", + "Reminder: You in {call}" : "Herinnering: Jij in {call}", + "Reminder: {user} in {call}" : "Herinnering: {user} in {call}", + "Reminder: Deleted user in {call}" : "Herinnering: Verwijderde gebruiker in {call}", + "Reminder: {guest} (guest) in {call}" : "Herinnering: {guest} (gast) in {call}", + "Reminder: Guest in {call}" : "Herinnering: Gast in {call}", + "{user} reacted with {reaction}" : "{user} reageerde meth {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reageerde met {reaction} in {call}", + "Deleted user reacted with {reaction} in {call}" : "Verwijderde gebruiker reageerde met {reaction} in {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gast) reageerde met {reaction} in {call}", + "Guest reacted with {reaction} in {call}" : "Gast reageerde met {reaction} in {call}", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Gebruiker verwijderd in {call}", + "{guest} (guest) in {call}" : "{guest} (gast) in {call}", + "Guest in {call}" : "Gast in {call}", + "{user} sent you a private message" : "{user} heeft je een privébericht gestuurd", + "{user} sent a message in conversation {call}" : "{user} heeft een bericht gestuurd in gesprek {call}", + "A deleted user sent a message in conversation {call}" : "Een verwijderde gebruiker heeft een bericht gestuurd in gesprek {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gast) heeft een bericht gestuurd in gesprek {call}", + "A guest sent a message in conversation {call}" : "Een gast heeft een bericht gestuurd in gesprek {call}", + "{user} replied to your private message" : "{user} heeft op jouw privébericht gereageerd", + "{user} replied to your message in conversation {call}" : "{user} heeft op jouw bericht gereageerd in gesprek {call}", + "A deleted user replied to your message in conversation {call}" : "Een verwijderde gebruiker heeft op jouw bericht gereageerd in gesprek {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gast) heeft op jouw bericht gereageerd in gesprek {call}", + "A guest replied to your message in conversation {call}" : "Een gast heeft op jouw bericht gereageerd in gesprek {call}", + "Reminder: You in private conversation {call}" : "Herinnering: Jij in een privégesprek {call}", + "Reminder: A deleted user in private conversation {call}" : "Herinnering: Een verwijderde gebruiker in privégesprek {call}", + "Reminder: {user} in private conversation" : "Herinnering: {user} in privégesprek", + "Reminder: You in conversation {call}" : "Herinnering: Jij in gesprek {call}", + "Reminder: {user} in conversation {call}" : "Herinnering: {user} in gesprek {call}", + "Reminder: A deleted user in conversation {call}" : "Herinnering: Een verwijderde gebruiker in gesprek {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Herinnering: {guest} in gesprek {call}", + "Reminder: A guest in conversation {call}" : "Herinnering: Een gast in gesprek {call}", + "{user} reacted with {reaction} to your private message" : "{user} heeft op jouw privébericht geantwoord met {reaction}", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Een verwijderde gebruiker heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gast) heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Een gast heeft met {reactie} gereageerd op jouw bericht in gesprek {call}", + "{user} mentioned you in a private conversation" : "{user} heeft jou in een privégesprek vermeld", + "{user} mentioned group {group} in conversation {call}" : "{user} vermelde groep {group} in gesprek {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} vermelde team {team} in gesprek {call}", + "{user} mentioned everyone in conversation {call}" : "{user} vermelde iedereen in gesprek {call}", + "{user} mentioned you in conversation {call}" : "{user} heeft jou in vermeld in gesprek {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Een verwijderde gebruiker vermelde groep {group} in gesprek {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Een verwijderde gebruiker vermelde team {team} in gesprek {call}", + "A deleted user mentioned everyone in conversation {call}" : "Een verwijderde gebruiker vermelde iedereen in gesprek {call}", + "A deleted user mentioned you in conversation {call}" : "Een verwijderde gebruiker heeft jou vermeld in gesprek {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gast) vermelde groep {group} in gesprek {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gast) vermelde team {team} in gesprek{call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gast) vermelde iedereen in gesprek {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gast) heeft jou vermeld in gesprek {call}", + "A guest mentioned group {group} in conversation {call}" : "Een gast vermelde groep {group} in gesprek {call}", + "A guest mentioned team {team} in conversation {call}" : "Een gast vermelde team {team} in gesprek {call}", + "A guest mentioned everyone in conversation {call}" : "Een gast vermelde iedereen in gesprek {call}", + "A guest mentioned you in conversation {call}" : "Een gast heeft jou vermeld in gesprek {call}", + "View message" : "Toon bericht", + "Dismiss reminder" : "Sluit herinnering", + "View chat" : "Bekijk chat", + "{user} invited you to a group conversation: {call}" : "{user} nodigde je uit voor een groepsgesprek: {call}", + "Join call" : "Deelnemen aan oproep", + "Answer call" : "Oproep beantwoorden", + "{user} would like to talk with you" : "{user} wil met je spreken", + "Call back" : "Terugbellen", + "You missed a call from {user}" : "Je hebt een gesprek gemist van {user}", + "A group call has started in {call}" : "Groepsgesprek is begonnen in {call}", + "You missed a group call in {call}" : "Je hebt een groepsgesprek gemist in {call}", + "{email} is requesting the password to access {file}" : "{email} verzoekt het wachtwoord voor toegang tot {file}", + "{email} tried to request the password to access {file}" : "{email} heeft geprobeerd het wachtwoord op te vragen voor toegang tot {file}", + "Someone is requesting the password to access {file}" : "Iemand verzoekt het wachtwoord voor toegang tot {file}", + "Someone tried to request the password to access {file}" : "Iemand heeft geprobeerd het wachtwoord op te vragen voor toegang tot {file}", + "Open settings" : "Instellingen openen", + "Hosted signaling server added" : "Gehoste signaling server toegevoegd", + "The hosted signaling server is now configured and will be used." : "De gehoste signaleringsserver is nu geconfigureerd en zal worden gebruikt.", + "Hosted signaling server removed" : "Gehoste signaling server verwijderd", + "The hosted signaling server was removed and will not be used anymore." : "De gehoste signaleringsserver is verwijderd en zal niet meer worden gebruikt.", + "Hosted signaling server changed" : "Gehoste signaling server veranderd", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Het account van gehoste signaleringsserver heeft de status gewijzigd van \"{oldstatus}\" naar \"{newstatus}\".", + "pending" : "in behandeling", + "active" : "actief", + "expired" : "verlopen", + "blocked" : "geblokkeerd", + "error" : "fout", + "The certificate of {host} expires in {days} days" : "Het certificaat van {host} loopt af in {days} dagen", + "The certificate of {host} expired" : "Het certificaat van {host} is afgelopen", + "Contact via Talk" : "Contacteer via Talk", + "Open Talk" : "Open Talk", + "Default" : "Standaard", + "Presentation" : "Presentatie", + "Voice room" : "Spraak room", + "Conversations" : "Gesprekken", + "Messages in current conversation" : "Berichten in huidig gesprek", + "{user}" : "{user}", + "Messages" : "Berichten", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Berichten in andere gesprekken", + "One-to-one rooms always need to show the other users avatar" : "Een-op-een gesprekken moeten altijd de avatar van de andere gebruiker laten zien", + "Invalid emoji character" : "Ongeldig emoji-teken", + "Invalid background color" : "Ongeldige achtergrondkleur", + "Avatar image is not square" : "Avatar afbeelding is niet vierkant", + "Room {number}" : "Vergaderruimte {number}", + "Other" : "Andere", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Het aanvragen van een proefversie is mislukt, omdat de proefserver niet bereikbaar is. Probeer het later opnieuw.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Er is een probleem met authenticatie van deze instantie. Misschien is deze niet van buitenaf bereikbaar om de URL te verifiëren.", + "Something unexpected happened." : "Er is iets onverwachts gebeurd.", + "The URL is invalid." : "De URL is ongeldig.", + "An HTTPS URL is required." : "Een HTTPS-URL is vereist.", + "The email address is invalid." : "Het e-mailadres is ongeldig.", + "The language is invalid." : "De taal is ongeldig.", + "The country is invalid." : "Het land is ongeldig.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Er is een probleem met de aanvraag van de proefversie. Controleer de logs voor meer informatie.", + "Too many requests are send from your servers address. Please try again later." : "Er worden te veel verzoeken verzonden vanaf het adres van je server. Probeer het later opnieuw.", + "There is already a trial registered for this Nextcloud instance." : "Er is al een proefversie geregistreerd voor deze Nextcloud-instantie.", + "Something unexpected happened. Please try again later." : "Er is iets onverwachts gebeurd. Probeer het later opnieuw.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Het aanvragen van een proefversie is mislukt, vanwege onjuist gedrag van de proefserver. Probeer het later opnieuw.", + "Trial requested but failed to get account information. Please check back later." : "De proefperiode is aangevraagd, maar het ophalen van accountinformatie is mislukt. Controleer het later nog eens.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Er is een probleem met de authenticatie van dit verzoek. Misschien is het niet van buitenaf bereikbaar om de URL te verifiëren.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Het ophalen van accountinformatie is mislukt, vanwege onjuist gedrag van de proefserver. Controleer het later nog eens.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Er is een probleem met het ophalen van de accountgegevens. Controleer de logs voor meer informatie.", + "There is no such account registered." : "Dit account is niet geregistreerd.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Het ophalen van accountinformatie is mislukt, omdat de proefserver niet bereikbaar is. Controleer het later opnieuw.", + "Deleting the hosted signaling server account failed. Please check back later." : "Het verwijderd van het account van de gehoste signaleringsserver is mislukt. Controleer het later opnieuw.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Het account kan niet worden verwijderd, vanwege onjuist gedrag van de proefserver. Controleer het later opnieuw.", + "There is a problem with deleting the account. Please check your logs for further information." : "Er is een probleem met het verwijderen van het account. Controleer de logboeken voor meer informatie.", + "Too many requests are sent from your servers address. Please try again later." : "Er worden te veel verzoeken verzonden vanaf je serveradres. Probeer het later opnieuw.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Het account kan niet worden verwijderd omdat de proefserver niet bereikbaar is. Controleer het later opnieuw.", + "Note to self" : "Notitie aan mijzelf", + "A place for your private notes, thoughts and ideas" : "Een plek voor je privénotities, gedachten en ideeën", + "Transcript is AI generated and may contain mistakes" : "Transript is gegenereerd via AI en kan fouten bevatten", + "Summary is AI generated and may contain mistakes" : "Samenvatting is gegenereerd via AI en kan fouten bevatten", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** is a veilige, zelf-gehost communicatie platform wat volledig integreerd met het Nextcloud ecosysteem.\n\n#### Belangrijkste mogelijkheden van Nextcloud Talk:\n\n* Chat and berichtjes in prive en groepsgesprekken\n* Audio en video gesprekken\n* Bestanden delen en integratie met andere Nextcloud applicaties\n* Aanpasbare gespreksinstellingen, moderatie en privacy instellingen\n* Browser, desktop en mobiele (iOS and Android) toegang\n* Private & veilige communicatie\n\nVind meer informatie in de [gebruikershandleiding](https://docs.nextcloud.com/server/latest/user_manual/nl/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Welkom bij Nextcloud Talk\n\nNextcloud Talk is een privacy-vriendelijke en geavanceerde chat applicatie die diep met Nextcloud integreerd. Chat in privé of of groepsgesprekken, werk samen aan documenten of whiteboards tijdens audio of video gesprekken, webinars en gebeurtenissen organiseren, gesprekken modereren en nog veel meer.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Doe meer met Smart Picker\n\nTyp eenvoudig \"/\" of ga naar het menu \"+\" om de Smart Picker te openen, waar je verschillende inhoud aan je berichten kunt toevoegen. je kunt de Smart Picker zo configureren dat je items uit Nextcloud-apps, GIF's, kaartlocaties, door AI gegenereerde inhoud en nog veel meer kunt toevoegen.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Verenigde Arabische Emiraten", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua en Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanië", + "Armenia" : "Armenië", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentinië", + "American Samoa" : "Amerikaans Samoa", + "Austria" : "Oostenrijk", + "Australia" : "Australië", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbeidjan", + "Bosnia and Herzegovina" : "Bosnië en Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "België", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarije", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bolivia, Plurinational State of" : "Bolivia, Plurinationale Staat ", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius en Saba", + "Brazil" : "Brazilië", + "Bahamas" : "Bahama's", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouveteiland", + "Botswana" : "Botswana", + "Belarus" : "Wit-Rusland", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocoseilanden", + "Congo, the Democratic Republic of the" : "Congo, Democratische Republiek", + "Central African Republic" : "Centraal Afrikaanse Republiek", + "Congo" : "Congo", + "Switzerland" : "Zwitserland", + "Côte d'Ivoire" : "Ivoorkust", + "Cook Islands" : "Cookeilanden", + "Chile" : "Chili", + "Cameroon" : "Kameroen", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Kaapverdië", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmaseiland", + "Cyprus" : "Cyprus", + "Czechia" : "Tsjechië", + "Germany" : "Duitsland", + "Djibouti" : "Djibouti", + "Denmark" : "Denemarken", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominicaanse Republiek", + "Algeria" : "Algerije", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypte", + "Western Sahara" : "Westelijke Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanje", + "Ethiopia" : "Ethiopië", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandeilanden", + "Micronesia, Federated States of" : "Micronesia, Federale Staten van", + "Faroe Islands" : "Faeröer", + "France" : "Frankrijk", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Verenigd Koninkrijk", + "Grenada" : "Grenada", + "Georgia" : "Georgië", + "French Guiana" : "Frans-Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatoriaal Guinea", + "Greece" : "Griekenland", + "South Georgia and the South Sandwich Islands" : "Zuid-Georgia en de Zuidelijke Sandwicheilanden", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard en McDonaldeilanden", + "Honduras" : "Honduras", + "Croatia" : "Kroatië", + "Haiti" : "Haïti", + "Hungary" : "Hongarije", + "Indonesia" : "Indonesië", + "Ireland" : "Ierland", + "Israel" : "Israel", + "Isle of Man" : "Man (eiland)", + "India" : "India", + "British Indian Ocean Territory" : "Brits Indische Oceaanterritorium", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamitische republiek", + "Iceland" : "IJsland", + "Italy" : "Italië", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordanië", + "Japan" : "Japan", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgizië", + "Cambodia" : "Cambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komoren", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratische Volksrepubliek", + "Korea, Republic of" : "Korea, Republiek", + "Kuwait" : "Koeweit", + "Cayman Islands" : "Kaaimaneilanden", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litouwen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Letland", + "Libya" : "Libië", + "Morocco" : "Marokko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavië, Republiek", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshalleilanden", + "North Macedonia" : "Noord-Macedonië", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolië", + "Macao" : "Macao", + "Northern Mariana Islands" : "Noordelijke Marianen", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanië", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediven", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Maleisië", + "Mozambique" : "Mozambique", + "Namibia" : "Namibië", + "New Caledonia" : "Nieuw Caledonië", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk {eiland)", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederland", + "Norway" : "Noorwegen", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nieuw Zeeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Frans-Polynesië", + "Papua New Guinea" : "Papoea-Nieuw-Guinea", + "Philippines" : "Filippijnen", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint-Pierre en Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Roemenië", + "Serbia" : "Servië", + "Russian Federation" : "Russische Federatie", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saoedi-Arabië", + "Solomon Islands" : "Salomonseilanden", + "Seychelles" : "Seychellen", + "Sudan" : "Soedan", + "Sweden" : "Zweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sint-Helena, Ascension en Tristan da Cunha", + "Slovenia" : "Slovenië", + "Svalbard and Jan Mayen" : "Spitsbergen en Jan Mayen", + "Slovakia" : "Slowakije", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalië", + "Suriname" : "Suriname", + "South Sudan" : "Zuid-Soedan", + "Sao Tome and Principe" : "Sao Tomé en Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten", + "Syrian Arab Republic" : "Syrië", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks- en Caicoseilanden", + "Chad" : "Tsjaad", + "French Southern Territories" : "Franse Zuidelijke en Antarctische Gebieden", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadzjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Oost-Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisië", + "Tonga" : "Tonga", + "Turkey" : "Turkije", + "Trinidad and Tobago" : "Trinidad en Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Oekraine", + "Uganda" : "Oeganda", + "United States Minor Outlying Islands" : "Kleine afgelegen eilanden van de Verenigde Staten", + "United States of America" : "Verenigde Staten van Amerika", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Oezbekistan", + "Holy See" : "Heilige Stoel", + "Saint Vincent and the Grenadines" : "Saint Vincent en de Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivariaanse Republiek", + "Virgin Islands, British" : "Maagdeneilanden, Britse", + "Virgin Islands, U.S." : "Maagdeneilanden, Amerikaanse ", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis en Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Zuid-Afrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Achtergrondvervaging", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Was niet in staat om WASM ondersteuning te verifieren. Kijk aub met de hand of uw webserver `.wasm` bestanden kan serveren naar de browser.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Uw webserver is niet correct ingesteld om `.wasm`-bestanden te leveren. Dit is meestal een probleem met de Nginx-configuratie. Voor achtergrondvervaging is een aanpassing nodig om ook `.wasm`-bestanden te leveren. Vergelijk uw Nginx-configuratie met de aanbevolen configuratie in onze documentatie.", + "Talk configuration values" : "Talk configuratie waarden", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Het forceren van een gespreksduur wordt alleen ondersteund met systeemcron. Schakel systeemcron in of verwijder de `max_call_duration`-configuratie.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Kleine `max_call_duration`-waarden (momenteel ingesteld op %d) zijn niet afdwingbaar vanwege technische beperkingen. De achtergrondtaak wordt slechts elke 5 minuten uitgevoerd, dus gebruik dit op eigen risico.", + "Federation" : "Federatie", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Het wordt sterk aanbevolen om \"memcache.locking\" te configureren wanneer Talk Federation is ingeschakeld.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Geen High-performance backend geconfigureerd. Als u Nextcloud Talk gebruikt zonder de High-performance backend, werkt dit alleen soepel voor zeer kleine gesprekken (max. 2-5 deelnemers). Insalleer de High-performance backend om ervoor te zorgen dat gesprekken met grotere aantallen deelnemers goed verlopen.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Het uitvoeren van de High-performance backend \"conversation_cluster\"-modus is verouderd en wordt niet langer ondersteund in de komende versie. De High-performance backend ondersteunt tegenwoordig echte clustering, die in plaats daarvan gebruikt zou moeten worden.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Het definiëren van meerdere High-performance backends is verouderd en wordt niet langer ondersteund in de komende versie. In plaats daarvan moet een load-balancer worden ingesteld samen met geclusterde signaleringsservers en geconfigureerd in de Talk-instellingen.", + "High-performance backend not configured correctly" : "High-performance backend niet correct geconfigureerd", + "Error: Cannot connect to server" : "Fout: Kan niet verbinden met de server", + "Error: Server did not respond with proper JSON" : "Fout: Server reageerde niet met een juiste JSON", + "Error: Certificate expired" : "Waarschuwing: servercertificaat is verlopen", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fout: Systeemtijden van Nextcloud-server en High-performance backend-server zijn niet gesynchroniseerd. Zorg ervoor dat beide servers zijn verbonden met een tijdserver of synchroniseer hun tijd handmatig.", + "Could not get version" : "Kan versie niet verkrijgen", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fout: Versie in gebruik: {version}; De server dient geüpdate te worden om compatibel te zijn met deze versie van Talk", + "Error: Server responded with: {error}" : "Fout: Server gaf foutmelding: {error}", + "Error: Unknown error occurred" : "Fout: Onbekende fout opgetreden!", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Waarschuwwing: Huidige versie: {version}; Server ondersteund niet alle mogelijkheden van deze Talk versie, u mist: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Het wordt sterk aanbevolen om een ​​geheugencache te configureren wanneer u Nextcloud Talk uitvoert met een High-performance backend.", + "Recording backend" : "Opname backend", + "Using the recording backend requires a High-performance backend." : "Om de opname-backend te kunnen gebruiken, is de High Performance backend vereist.", + "No recording backend configured" : "Geen opname-backend geconfigureerd", + "SIP configuration" : "SIP configuratie", + "Using the SIP functionality requires a High-performance backend." : "Voor het gebruik van de SIP-functionaliteit is een backend met hoge prestaties vereist.", + "No SIP backend configured" : "Geen SIP-backend geconfigureerd", + "Invalid date, date format must be YYYY-MM-DD" : "Ongeldige datum, formaat is YYYY-MM-DD", + "Conversation not found" : "Gesprek niet gevonden.", + "Path is already shared with this conversation" : "Pad is al gedeeld met dit gesprek", + "Chat, video & audio-conferencing using WebRTC" : "Chat, video & audio-conferencing via WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video & audio-conferencing met WebRTC\n\n* 💬 **Chat** Nextcloud Talk komt met een eenvoudige tekstchat, maakt het mogelijk om bestanden te delen en uploaden vanuit je Netxcloud Bestanden-app of je lokale apparaat en het noemen van andere deelnemers.\n* 👥 **Privé-, groep-, publieke en wachtwoordbeveiligde gesprekken!** Nodig iemand uit, of een hele groep of verstuur een openbare link om mensen uit te nodigen voor een gesprek.\n* 🌐 **Federated chats** Chat met andere gebruikers op hun Nextcloud servers\n* 💻 **Schermdelen!** Deel je scherm met de deelnemers van je gesprek.\n* 🚀 **Integratie met andere Nextcloud apps** zoals Bestanden, Agenda, Gebruikersstatus, Dashboard, Flow, Kaarten, Smart Picker, Contacten, Deck en vele andere.\n* 🌉 **Sync met andere chat-oplossingen** Met [Matterbridge](https://github.com/42wim/matterbridge/) geïntegreerd in Talk, kan je eenvoudig veel andere chat-oplossingen met Nextcloud Tals en vice versa.", + "Leave call" : "Verlaat oproep", + "Navigating away from the page will leave the call in {conversation}" : "Als je wegnavigeert van deze pagina, verlaat je het gesprek in {conversatie}", + "Stay in call" : "Blijf in de oproep", + "Error occurred when getting the conversation information" : "Fout opgetreden tijdens het ophalen van de gespreksinformatie", + "Discuss this file" : "Bespreek dit bestand", + "Share this file with others to discuss it" : "Deel dit bestand om met anderen te bespreken", + "Share this file" : "Deel dit bestand", + "Join conversation" : "Deelnemen aan gesprek", + "This conversation is password-protected." : "Dit gesprek is beveiligd met een wachtwoord.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "We hebben meerdere ongeldige wachtwoord pogingen gedetecteerd vanaf jouw IP adres. Je volgende poging is daarom vertraagd met maximaal 30 seconden.", + "The password is wrong. Try again." : "Het wachtwoord is verkeerd. Probeer het opnieuw.", + "Password" : "Wachtwoord", + "Submit" : "Verwerken", + "Error requesting the password." : "Fout bij opvragen wachtwoord.", + "Request password" : "Aanvragen wachtwoord", + "This conversation has ended" : "Dit gesprek is beeindigd", + "Error occurred when joining the conversation" : "Er is een fout opgetreden bij het deelnemen aan het gesprek", + "Close Talk sidebar" : "Sluit Talk zijbalk", + "Open Talk sidebar" : "Open Talk zijbalk", + "Everyone" : "Iedereen", + "Users and moderators" : "Gebruikers en moderatoren", + "Moderators only" : "Alleen moderators", + "Disable calls" : "Gesprekken uitschakelen", + "Save changes" : "Wijzigingen bewaren", + "Saving …" : "Opslaan ...", + "Saved!" : "Opgeslagen!", + "Limit to groups" : "Beperk tot groepen", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Als er minimaal één groep is geselecteerd, kunnen alleen mensen uit de geslecteerde groepen deelnemen aan de gesprekken.", + "Guests can still join public conversations." : "Gasten kunnen nog deelnemen aan openbare gesprekken.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Gebruikers die Talk niet meer kunnen gebruiken, worden nog steeds als deelnemen in eerdere gesprekken getoond en ook hun chat-berichten worden nog steeds getoond.", + "Limit using Talk" : "Beperk gebruik van Talk", + "Limit creating a public and group conversation" : "Beperk maken van openbare en groepsgesprekken", + "Limit creating conversations" : "Beperk aanmaken gesprekken", + "Limit starting a call" : "Beperk het starten van een oproep", + "Limit starting calls" : "Beperk het starten van oproepen", + "When a call has started, everyone with access to the conversation can join the call." : "Zodra een oproep is gestart, kan iedereen met toegang tot het gesprek deelnemen aan de oproep.", + "Description is not provided" : "Beschrijving is niet verstrekt", + "Locked for moderators" : "Vergrendeld voor moderators", + "Enabled" : "Ingeschakeld", + "Disabled" : "Uitgeschakeld", + "Bots settings" : "Bots instellingen", + "State" : "Status", + "Name" : "Naam", + "Last error" : "Laatste fout", + "Total errors count" : "Totaal aantal fouten", + "Find more bots" : "Vind meer bots", + "Beta" : "Bèta", + "Permissions" : "Machtigingen", + "Select groups …" : "Selecteer groepen …", + "All messages" : "Alle berichten", + "@-mentions only" : "Alleen @-vermeldingen", + "Off" : "Uit", + "General settings" : "Algemene instellingen", + "Default notification settings" : "Standaard meldingsinstellingen", + "Default group notification" : "Standaard groepsmelding", + "Default group notification for new groups" : "Standaard groepsmelding voor nieuwe groepen", + "Integration into other apps" : "Integratie in andere apps", + "Allow conversations on files" : "Sta gesprekken in bestanden toe", + "Allow conversations on public shares for files" : "Sta gesprekken toe op openbaar gedeelde bestanden", + "Enable encryption" : "Schakel encryptie in", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Door op de knop hierboven te klikken wordt de informatie in het formulier naar de servers van Struktur AG gestuurd. Meer informatie vind je op {linkstart}spreed.eu{linkend}.", + "Pending" : "Onderhanden", + "Error" : "Fout", + "Blocked" : "Geblokkeerd", + "Active" : "Actief", + "Expired" : "Vervallen", + "Never" : "Nooit", + "The trial could not be requested. Please try again later." : "Het proces kon niet worden aangevraagd. Probeer het later opnieuw.", + "The account could not be deleted. Please try again later." : "Het account kon niet worden verwijderd. Probeer het later opnieuw.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Onze partner Struktur AG biedt een service waarbij een gehoste signaleringsserver kan worden aangevraagd. Hiervoor hoef je alleen maar het onderstaande formulier in te vullen en je Nextcloud zal erom vragen. Zodra de server voor je is ingesteld, worden de inloggegevens automatisch ingevuld. Hierdoor worden de bestaande instellingen van de signaleringsserver overschreven.", + "URL of this Nextcloud instance" : "URL van deze Nextcloud server", + "Full name of the user requesting the trial" : "Volledige naam van de gebruiker die de proef aanvraagt", + "Email of the user" : "E-mailadres van de gebruiker", + "Language" : "Taal", + "Country" : "Land", + "Request signaling server trial" : "Verzoek proefperiode signaleringsserver", + "You can see the current status of your hosted signaling server in the following table." : "Je kunt de huidige status van je gehoste signaleringsserver in de volgende tabel zien.", + "Status" : "Status", + "Created at" : "Gemaakt op", + "Expires at" : "Vervalt op", + "Limits" : "Limieten", + "Yes" : "Ja", + "No" : "Nee", + "Delete the signaling server account" : "Verwijder het signaleringsserveraccount", + "_%n user_::_%n users_" : ["%n gebruiker","%n gebruikers"], + "Installed version: {version}" : "Geïnstalleerde versie: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Je kunt de Matterbridge installeren om Nextcloud Talk te linken naar andere diensten, bezoek hun {linkstart1}GitHub pagina{linkend} voor nadere details. Het downloaden en installeren van de app kan even duren. Mocht er een time-out plaatsvinden, kan de app handmatig geïnstalleerd worden via de {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Het Matterbridge uitvoeringsbestand kon niet gevonden of uitgevoerd worden.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Je kunt het pad naar het binaire bestand van Matterbridge ook handmatig instellen via de configuratie. Raadpleeg de {linkstart} Matterbridge-integratiedocumentatie {linkend} voor meer informatie.", + "Downloading …" : "Bezig met downloaden ...", + "Install Talk Matterbridge" : "Installeer Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Kon de Matterbridge binary niet uitvoeren", + "Matterbridge integration" : "Matterbridge integratie", + "Enable Matterbridge integration" : "Matterbridge integratie inschakelen", + "Status: Checking connection" : "Status: Controleren verbinding", + "OK: Running version: {version}" : "OK: Actuele versie: {version}", + "Validate SSL certificate" : "Valideer SSL certificaat", + "Delete this server" : "Verwijder deze server", + "Test this server" : "Test deze server", + "Disabled for all calls" : "Uitgeschakeld voor alle gesprekken", + "Enabled for all calls" : "Ingeschakeld voor alle gesprekken", + "Configurable on conversation level by moderators" : "Instelbaar op gespreksniveau door moderators", + "Shared secret" : "Gedeeld geheim", + "Recording consent" : "Toestemming opname", + "Recording transcription" : "Transcriptie wordt opgenomen", + "SIP configuration saved!" : "SIP configuratie opgeslagen!", + "Restrict SIP configuration" : "Beperk SIP configuratie", + "Enable SIP configuration" : "Inschakelen SIP configuratie", + "Only users of the following groups can enable SIP in conversations they moderate" : "Alleen gebruikers uit de volgende groepen kunnen SIP inschakelen in de gespreken die zij modereren", + "Phone number (Country)" : "Telefoonnummer (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Deze informatie wordt verzonden in uitnodigingsmails en ook getoond in de zijbalk voor alle deelnemers.", + "Error code" : "Foutcode", + "High-performance backend URL" : "High-performance backend URL", + "High-performance backend settings saved" : "High-performance backend instellingen opgeslagen", + "STUN server URL" : "STUN server URL", + "The server address is invalid" : "Het server adres is ongeldig", + "STUN settings saved" : "STUN instellingen opgeslagen", + "STUN servers" : "STUN servers", + "A STUN server is used to determine the public IP address of participants behind a router." : "De STUN server wordt gebruikt om het openbare IP-adres van deelnemers achter een router vast te stellen.", + "Add a new STUN server" : "Nieuwe STUN server toevoegen", + "{schema} scheme must be used with a domain" : "{schema} schema moet worden gebruikt met een domein", + "{option1} and {option2}" : "{option1} en {option2}", + "{option} only" : "{option} alleen", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Succesvolle ICE-kandidaten geretourneerd door de TURN-server", + "Error: No working ICE candidates returned by the TURN server" : "Fout: geen werkende ICE-kandidaten geretourneerd door de TURN-server", + "Testing whether the TURN server returns ICE candidates" : "Controleren of de TURN-server ICE-kandidaten retourneert", + "TURN server schemes" : "TURN server schema's", + "TURN server URL" : "TURN server URL", + "TURN server secret" : "TURN server secret", + "TURN server protocols" : "TURN server protocollen", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Een TURN server wordt gebruikt om verkeer van deelnemers achter een firewall te proxyen. Als individuele deelnemers niet rechtstreeks met anderen kunnen verbinden, is TURN server vermoedelijk vereist. Zie {linkstart}deze documentatie{linkend} voor instructies.", + "TURN settings saved" : "TURN instellingen opgeslagen", + "TURN servers" : "TURN servers", + "Add a new TURN server" : "Nieuwe TURN server toevoegen", + "Failed" : "Mislukt", + "OK" : "OK", + "Checking …" : "Controleren ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Mislukt: WebAssembly is uitgeschakeld of niet ondersteund in deze browser. Schakel WebAssembly in of gebruik een browser met ondersteuning ervoor voor de controle.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Mislukt: \".wasm\" and \".tflite\" bestanden waren niet juist geretourneerd door de webserver. Controleer \"Systeemvereisten\" sectie in de Talk documentatie.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- en \".tflite\"-bestanden zijn correct geretourneerd door de webserver.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Het lijkt erop dat de configuratie van PHP en Apache niet compatibel is. Houd er rekening mee dat PHP alleen kan worden gebruikt met de MPM_PREFORK-module en dat PHP-FPM alleen kan worden gebruikt met de MPM_EVENT-module.", + "Web server setup checks" : "Webserver installatiecontroles", + "Federated user" : "Gefedereerde gebruiker", + "Assign participants to rooms" : "Deelnemers aan ruimtes toewijzen", + "Configure breakout rooms" : "Instellen aparte vergaderruimtes", + "Number of breakout rooms" : "Aantal Aparte vergaderruimtes", + "You can create from 1 to 20 breakout rooms." : "Je kan 1 tot 20 aparte vergaderruimtes maken", + "Assignment method" : "Toewijzingswijze", + "Automatically assign participants" : "Deelnemers automatisch toewijzen", + "Manually assign participants" : "Deelnemers handmatig toewijzen", + "Allow participants to choose" : "Laat deelnemers kiezen", + "Create rooms" : "Maak vergaderruimtes", + "Confirm" : "Bevestigen", + "Create breakout rooms" : "Maak aparte vergaderruimtes", + "Reset" : "Herstellen", + "Delete breakout rooms" : "Verwijder aparte vergaderruimtes", + "Room {roomNumber}" : "Vergaderruimte {roomNumber}", + "Current breakout rooms and settings will be lost" : "Huidige vergaderruimtes en instellingen gaan verloren", + "Cancel" : "Annuleren", + "Unassigned participants" : "Niet-toegewezen deelnemers", + "Back" : "Terug", + "Assign" : "Toewijzen", + "Add participant \"{user}\"" : "Toevoegen deelnemer \"{user}\"", + "Now" : "Nu", + "Invalid calendar selected" : "Ongeldige agenda geselecteerd", + "Invalid start time selected" : "Ongeldige starttijd geselecteerd", + "Invalid end time selected" : "Ongeldige eindtijd geselecteerd", + "Invite all users and emails in this conversation" : "Nodig alle gebruikers en e-mailadressen uit in dit gesprek", + "Meeting created" : "Vergadering gecreëerd", + "Upcoming meetings" : "Aankomende vergaderingen", + "Loading …" : "Laden …", + "No upcoming meetings" : "Geen aankomende vergaderingen", + "Schedule a meeting" : "Plan een vergadering", + "Meeting title" : "Vergadering titel", + "From" : "Van", + "To" : "Naar", + "Calendar" : "Agenda", + "Attendees" : "Deelnemers", + "Save" : "Opslaan", + "Search participants" : "Zoek deelnemers", + "No results" : "Geen resultaten", + "Done" : "Klaar", + "Raise hand" : "Hand opsteken", + "Raise hand (R)" : "Hand omhoog (R)", + "Lower hand" : "Hand omlaag", + "Lower hand (R)" : "Hand omlaag (R)", + "Speaker view" : "Sprekerweergave", + "Grid view" : "Rasterweergave", + "Recording consent is required" : "Toestemming voor opname is vereist", + "This conversation is read-only" : "Dit gesprek is alleen-lezen", + "Conversation not found or not joined" : "Gesprek niet gevonden of aan deelgenomen", + "Lobby is still active and you're not a moderator" : "Lobby is nog actief en je bent geen moderator", + "Connection failed" : "Verbinding mislukt", + "Reload" : "Herladen", + "{nickName} raised their hand." : "{nickName} stak zijn/haar hand op", + "A participant raised their hand." : "Een deelnemer stak zijn/haar hand op.", + "Collapse stripe" : "Inklappen streep", + "Expand stripe" : "Uitvouwen streep", + "Previous page of videos" : "Voorgaande pagina met video's", + "Next page of videos" : "Volgende pagina met video's", + "Connecting …" : "Verbinden...", + "Calling …" : "Bellen ...", + "Waiting for {user} to join the call" : "Wachten op {user} om deel te nemen aan het gesprek", + "Waiting for others to join the call …" : "Aan het wachten aan andere deelnemers van de oproep ...", + "You can invite others in the participant tab of the sidebar" : "Je kunt anderen uitnodigen in de deelnemerstab van de zijbalk", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Je kunt anderen uitnodigen in het deelnemers tabblad, of deze link met anderen delen om ze uit te nodigen. ", + "Share this link to invite others!" : "Deel deze link om anderen uit te nodigen!", + "Copy link" : "Link kopiëren", + "You are not allowed to enable audio" : "Je bent niet bevoegd om audio te activeren", + "No audio. Click to select device" : "Geen audio. Klik om apparaat te selecteren", + "Mute audio" : "Geluid dempen", + "Mute audio (M)" : "Geluid dempen (M)", + "Unmute audio" : "Geluid niet meer dempen", + "Unmute audio (M)" : "Geluid niet meer dempen (M)", + "None" : "Geen", + "Access to camera was denied" : "Toegang tot de camera is geweigerd", + "Error while accessing camera: It is likely in use by another program" : "Fout bij toegang tot camera, vermoedelijk in gebruik bij andere app", + "Error while accessing camera" : "Fout bij toegang tot camera", + "You have been muted by a moderator" : "Je bent gedempt door een moderator", + "Hide presenter video" : "Verberg video van presentator", + "You are not allowed to enable video" : "Je bent niet geautoriseerd om video in te schakelen", + "No video. Click to select device" : "Geen video. Klik om apparaat te selecteren", + "Disable video" : "Video uitschakelen", + "Disable video (V)" : "Video uitschakelen (V)", + "Enable video" : "Inschakelen video", + "Enable video (V)" : "Video inschakelen (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video. Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video (V) - Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Inschakelen video. Je verbinding wordt kort onderbroken tijdens het voor de eerste keer inschakelen van video,", + "Show presenter" : "Toon presentator", + "You" : "Jij", + "Mute" : "Dempen", + "Muted" : "Gedempt", + "Show screen" : "Tonen scherm", + "Stop following" : "Stop met volgen", + "Connection could not be established …" : "Kon geen verbinding maken ...", + "Connection was lost and could not be re-established …" : "Verbinding verbroken en kon niet opnieuw verbinden ...", + "Connection could not be established. Trying again …" : "Kon geen verbinding maken. Opnieuw aan het proberen ...", + "Connection lost. Trying to reconnect …" : "Verbinding verbroken. Opnieuw aan het proberen ...", + "Connection problems …" : "Verbindingsproblemen ...", + "Collapse" : "Inklappen", + "Expand" : "Uitbreiden", + "You need to be logged in to upload files" : "Je moet ingelogd zijn om bestanden te uploaden", + "Drop your files to upload" : "Zet je bestanden hier neer om te uploaden", + "Conversation messages" : "Gespreksberichten", + "Scroll to bottom" : "Scroll naar beneden", + "Post message" : "Plaats bericht", + "Federated conversation" : "Gefedereerde gesprekken", + "Public conversation" : "Openbaar gesprek", + "Favorite" : "Favoriet", + "Banned users" : "Geblokkeerde gebruikers", + "Manage the list of banned users in this conversation." : "Beheer de lijst van geblokkeerde gebruikers voor dit gesprek.", + "Manage bans" : "Beheer blokkeringen", + "No banned users" : "Geen geblokkeerde gebruikers", + "Banned by:" : "Geblokkerd door:", + "Date:" : "Datum:", + "Note:" : "Notitie:", + "Hide details" : "Verberg details", + "Show details" : "Tonen details", + "Unban" : "Uitsluiten opheffen", + "Error while updating conversation name" : "Fout bij aanpassen gespreksnaam", + "Error while updating conversation description" : "Fout tijdens bijwerken gespreksbeschrijving", + "Enter a name for this conversation" : "Voer een naam in voor dit gesprek", + "Edit conversation name" : "Bewerk gespreksnaam", + "Edit conversation description" : "Bewerken gespreksbeschrijving", + "Enter a description for this conversation" : "Voer een beschrijving in voor dit gesprek", + "Picture" : "Afbeelding", + "Disable" : "Uitschakelen", + "Enable" : "Inschakelen", + "Breakout rooms" : "Aparte vergaderruimtes", + "Manage breakout rooms" : "Beheer aparte vergaderruimtes", + "Set up breakout rooms for this conversation" : "Stel aparte breakout room in voor dit gesprek", + "Please select a valid PNG or JPG file" : "Selecteer alstublieft een geldig png of jpg bestand", + "Choose your conversation picture" : "Kies de gespreksafbeelding", + "Choose" : "Kies", + "Error setting conversation picture" : "Fout bij instellen gespreksafbeelding", + "Could not set the conversation picture: {error}" : "Kon de gespreksafbeelding niet instellen: {error}", + "Error cropping conversation picture" : "Fout bij bijsnijden gespreksafbeelding", + "Error removing conversation picture" : "Fout bij verwijderen gespreksafbeelding", + "Set emoji as conversation picture" : "Stel emoji in als gespreksafbeelding", + "Set background color for conversation picture" : "Stel achtergrondkleur in voor gespreksafbeelding", + "Upload conversation picture" : "Upload gespreksafbeelding", + "Choose conversation picture from files" : "Kies gespreksafbeelding via bestanden", + "Remove conversation picture" : "Verwijder gespreksafbeelding", + "The file must be a PNG or JPG" : "Het bestand moet een PNG of JPG bestand zijn", + "Default permissions modified for {conversationName}" : "Standaardmachtigingen aangepast voor {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kon standaardmachtigingen niet aanpassen voor {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Pas de standaardmachtigingen voor deelnemers in dit gesprek aan. Deze instellingen gelden niet voor moderators.", + "All permissions" : "Alle machtigingen", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deelnemers hebben machtigingen om een gesprek te starten, deel te nemen, audio en camera in te schakelen en het scherm te delen.", + "Restricted" : "Beperkt", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deelnemers kunnen deelnemen aan gesprekken, maar kunnen geen audio of camera inschakelen, of hun scherm delen totdat een moderator hen handmatig machtigt.", + "Advanced permissions" : "Geavanceerde machtigingen", + "Edit permissions" : "Pas machtigingen aan", + "Conversation settings" : "Gespreksinstellingen", + "Basic Info" : "Basisinformatie", + "Personal" : "Persoonlijk", + "Moderation" : "Beheer", + "Setup overview" : "Instellingenoverzicht", + "Live transcription" : "Live transcriptie", + "Breakout Rooms" : "Aparte vergaderruimtes", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Gevarenzone", + "Archive conversation" : "Archiveer gesprek", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Gearchiveerde gesprekken zijn standaard verborgen van de gesprekken lijst. Echter, ze zullen nog steeds tevoorschijn komen zodra je zoekt op de naam van het gesprek of de lijst van gearchiveerde gesprekken opent.", + "Do you really want to leave \"{displayName}\"?" : "Wil je \"{displayName}\" echt verlaten?", + "You can archive this conversation instead." : "Je kan dit gesprek ook archiveren", + "Leave conversation" : "Verlaat een gesprek", + "You need to promote a new moderator before you can leave the conversation" : "Je moet een nieuwe moderator aanwijzen voordat je het gesprek kan verlaten", + "Delete conversation" : "Verwijder gesprek", + "Do you really want to delete \"{displayName}\"?" : "Wil je \"{displayName}\" echt verwijderen?", + "Error while deleting conversation" : "Fout bij verwijderen gesprek", + "Delete all chat messages" : "Alle chats verwijderen", + "Do you really want to delete all messages in \"{displayName}\"?" : "Wil je echt alle berichten verwijderen in \"{displayName}\"?", + "Error while clearing chat history" : "Fout bij het verwijderen van de chathistorie", + "Be careful, these actions cannot be undone." : "Wees voorzichtig, dit kan niet worden ongedaan gemaakt.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Zodra een gesprek verlaten is, is een uitnodiging nodig om opnieuw deel te nemen aan het gesprek. Een open gesprek kan te allen tijde hervat worden.", + "Permanently delete this conversation." : "Verwijder dit gesprek permanent.", + "Delete chat messages" : "Alle chats verwijderen", + "Permanently delete all the messages in this conversation." : "Verwijder alle berichten in dit gesprek permanent.", + "_%n hour_::_%n hours_" : ["%n uur","%n uur"], + "_%n day_::_%n days_" : ["%n dag","%n dagen"], + "_%n week_::_%n weeks_" : ["%n week","weken"], + "Custom expiration time" : "Aangepaste vervalperiode", + "Message expiration disabled" : "Vervallen bericht uitgeschakeld", + "Message expiration set: {duration}" : "Vervallen bericht ingesteld: {duration}", + "Error when trying to set message expiration" : "Fout bij instellen vervallen bericht", + "Message expiration" : "Vervallen bericht", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chatberichten kunnen na een bepaalde tijd verlopen. Noot: Bestanden die gedeeld zijn in een chat worden niet verwijderd door de eigenaar, maar worden niet langer gedeeld in het gesprek.", + "Set message expiration" : "Stel vervallen bericht in", + "Current message expiration" : "Vervallen huidig bericht", + "Password copied to clipboard" : "Wachtwoord gekopieerd naar het klembord!", + "Password could not be copied" : "Wachtwoord kon niet gekopieerd worden", + "Guest access" : "Gasttoegang", + "Breakout rooms are not allowed in public conversations." : "Breakout rooms zijn niet toegestaan bij openbare gesprekken", + "Allow guests to join this conversation via link" : "Sta gasten toe om te deel nemen aan dit gesprek via een link", + "Password protection" : "Wachtwoordbeveiliging", + "This conversation is password-protected. Guests need password to join" : "Dit gesprek is beveiligd met een wachtwoord. Gasten hebben een wachtwoord nodig om deel te nemen", + "Password protection is needed for public conversations" : "Wachtwoordbeveiliging is verplicht voor openbare gesprekken", + "Set a password" : "Instellen wachtwoord", + "Change password" : "Wachtwoord wijzigen", + "Enter new password" : "Voer nieuw wachtwoord in", + "Save password" : "Wachtwoord opslaan", + "Copy password" : "Kopieer wachtwoord", + "Guests are allowed to join this conversation via link" : "Gaten kunnen deelnemen aan dit gesprek via een link", + "Guests are not allowed to join this conversation" : "Gaten kunnen niet deelnemen aan dit gesprek", + "Resend invitations" : "Opnieuw verzenden uitnodigingen", + "This conversation is open to both registered users and users created with the Guests app" : "Het gesprek is toegankelijk voor zowel geregistreerde gebruikers als gebruikers die met de Gasten app aangemaakt zijn", + "This conversation is open to registered users" : "Dit gesprek is toegankelijk voor geregistreerde gebruikers", + "This conversation is limited to the current participants" : "Dit gesprek is beperkt tot de huidige deelnemers", + "You opened the conversation to both registered users and users created with the Guests app" : "Je hebt het gesprek geopend voor geregistreerde gebruikers en voor gebruikers gemaakt in de Gasten app", + "Error occurred when opening or limiting the conversation" : "Er is een fout opgetreden tijdens het openen of beperken van het gesprek", + "Open conversation to registered users, showing it in search results" : "Open gesprek voor geregistreerde gebruikers, het zal worden weergegeven in de zoekresultaten", + "Also open to users created with the Guests app" : "Ook toegankelijk voor gebruikers die met de Gasten app aangemaakt zijn", + "Open conversation" : "Open gesprek", + "Invalid language" : "Ongeldige taal", + "Start time: {date}" : "Starttijd: {date}", + "Start time has been updated" : "Starttijd bijgewerkt", + "Error occurred while updating start time" : "Fout bij bijwerken starttijd", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Inschakelen van de lobby zal niet-moderators uit het lopende gesprek verwijderen.", + "Enable lobby, restricting the conversation to moderators" : "Lobby inschakelen, gesprek beperken tot moderators", + "Meeting start time" : "Vergadering starttijd", + "Start time (optional)" : "Begintijd (optioneel)", + "Import email participants" : "Importeer e-maildeelnemers", + "You can import a list of email participants from a CSV file." : "Je kan een lijst van e-maildeelnemers importeren vanuit een CSV-bestand.", + "Browse poll drafts" : "Blader door peilingconcepten", + "Error occurred when locking the conversation" : "Er is een fout opgetreden bij het vergrendelen van het gesprek", + "Error occurred when unlocking the conversation" : "Er is een fout opgetreden bij het ontgrendelen van het gesprek", + "Lock conversation" : "Gesprek vergrendelen", + "This will also terminate the ongoing call." : "Hiermee wordt ook het lopende gesprek beëindigd.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Vergrendel het gesprek om te voorkomen dat iemand berichten kan plaatsen of gesprekken kan starten", + "Edit" : "Bewerk", + "More information" : "Meer informatie", + "Delete" : "Verwijderen", + "Add new bridged channel to current conversation" : "Een nieuw overbruggingskanaal naar het huidige gesprek", + "unknown state" : "onbekende staat", + "running" : "bezig", + "not running, check Matterbridge log" : "draait niet, controleer Matterbridge logbestand", + "not running" : "niet bezig", + "Bridge saved" : "Overbrugging opgeslagen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Je kunt kanalen van verschillende chatservices overbruggen met Matterbridge.", + "More info on Matterbridge" : "Meer info over Matterbridge.", + "Enable bridge" : "Inschakelen bridge", + "Show Matterbridge log" : "Toon Matterbridge logbestand", + "Log content" : "Inhoud logboek", + "Only moderators are allowed to mention @all" : "Alleen moderators mogen @all vermelden", + "Mentioning @all has been limited to moderators." : "Het vermelden van @all is beperkt tot moderators", + "Notifications" : "Meldingen", + "Notify about calls in this conversation" : "Stuur melding over telefoongesprekken in dit gesprek", + "Important conversation" : "Belangrijk gesprek", + "\"Do not disturb\" user status is ignored for important conversations" : "De gebruikersstatus ‘Niet storen’ wordt genegeerd voor belangrijke gesprekken", + "Sensitive conversation" : "Gevoelig gesprek", + "Message preview will be disabled in conversation list and notifications" : "Berichtvoorvertoning wordt uitgeschakeld in de gesprekslijst en meldingen", + "Recording consent is required for calls in this conversation" : "Toestemming voor opname is vereist voor oproepen in dit gesprek", + "Recording consent is not required for calls in this conversation" : "Toestemming voor opname is niet vereist voor oproepen in dit gesprek", + "Recording consent requirement was updated" : "Toestemming voor opname status is bijgewerkt", + "Error occurred while updating recording consent" : "Fout bij bijwerken toestemming opname", + "Recording Consent" : "Toestemming opname", + "Recording consent cannot be changed once a call or breakout session has started." : "Toestemming voor opname kan niet worden gewijzigd als een oproep of aparte vergaderruimtes zijn gestart.", + "Require recording consent before joining call in this conversation" : "Toestemming voor opname vereist voor deelname aan dit gesprek", + "Recording consent is required for all calls" : "Toestemming voor opname is vereist voor alle gesprekken", + "SIP dial-in is now possible without PIN requirement" : "Inbellen via SIP is nu mogelijk zonder PIN benodigdheid", + "SIP dial-in is now enabled" : "SIP inbellen is nu ingeschakeld", + "SIP dial-in is now disabled" : "SIP inbellen is nu uitgeschakeld", + "Error occurred when enabling SIP dial-in" : "Fout bij inschakelen SIP inbellen", + "Error occurred when disabling SIP dial-in" : "Fout bij uitschakelen SIP inbellen", + "Phone and SIP dial-in" : "Telefoon en SIP inbellen", + "Enable phone and SIP dial-in" : "Inschakelen telefoon en SIP inbellen", + "Allow to dial-in without a PIN" : "Inbellen zonder PIN toestaan", + "With {displayName}" : "Met {displayName}", + "In {conversation}" : "In {conversation}", + "Join" : "Deelnemen", + "View conversation" : "Toon gesprek", + "Error while creating the conversation" : "Fout bij creëren gesprek", + "Hello, {displayName}" : "Hallo, {displayName}", + "Start meeting now" : "Start vergadering nu", + "Give your meeting a title" : "Geef je vergadering een titel", + "Create a new conversation" : "Maak een nieuw gesprek", + "Join open conversations" : "Deelnemen aan open gesprekken", + "Call a phone number" : "Bel een telefoonnummer", + "Schedule meetings" : "Plan vergaderingen", + "You don't have any upcoming meetings" : "Je hebt geen aankomende vergaderingen", + "Unread mentions" : "Ongelezen vermeldingen", + "Start a group conversation" : "Start een groepsgesprek", + "Create conversation" : "Maak gesprek", + "Enter your name" : "Geef je naam op", + "Submit name and join" : "Verzend naam en neem deel", + "Do you already have an account?" : "Heb je al een account?", + "Log in" : "Aanmelden", + "Error while verifying uploaded file" : "Fout bij controleren geüpload bestand", + "Uploaded file is verified" : "Geüpload bestand is gecontroleerd", + "Participants added successfully" : "Deelnemers succesvol toegevoegd", + "Error while adding participants" : "Fout bij toevoegen deelnemers", + "Import a file" : "Importeer een bestand", + "Send invitations" : "Stuur uitnodigingen", + "_%n invalid email_::_%n invalid emails_" : ["%n ongeldige e-mail","%n ongeldige e-mails"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail al geimporteerd of duplicaat","%n e-mails al geimporteerd of duplicaten"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n uitnodiging kan verzonden worden","%n uitnodigingen kunnen verzonden worden"], + "An error occurred while calling a phone number" : "Er trad een fout op bij bellen van een telefoonnummer", + "Phone number could not be called: {error}" : "Telefoonnummer kon niet bereikt worden: {error} ", + "Phone number could not be called" : "Telefoonnummer kon niet bereikt worden", + "Search participants or phone numbers" : "Zoek deelnemers of telefoonnummers", + "Creating the conversation …" : "Het gesprek maken ...", + "Mark as read" : "Markeren als gelezen", + "Mark as unread" : "Markeren als ongelezen", + "Remove from favorites" : "Verwijderen uit favorieten", + "Add to favorites" : "Toevoegen aan favorieten", + "Unarchive conversation" : "Dearchiveer gesprek", + "You need to promote a new moderator before you can leave the conversation." : "Je moet een nieuwe moderator promoveren voordat je het gesprek kunt verlaten.", + "Conversation actions" : "Gespreksacties", + "Notify about calls" : "Melden inkomende gesprekken", + "Pending invitations" : "Wachtende uitnodigingen", + "Join conversations from other servers" : "Neem deel aan gesprekken van andere servers", + "From {user} at {remoteServer}" : "Van {user} op{remoteServer}", + "Decline invitation" : "Uitnodiging afwijzen", + "Accept invitation" : "Uitnodiging accepteren", + "No pending invitations" : "Geen wachtende uitnodigingen", + "Home" : "Startpagina", + "Unread" : "Ongelezen", + "Meetings" : "Vergaderingen", + "Alphabetically" : "Alfabetisch", + "No matches found" : "Geen overeenkomsten gevonden.", + "No conversations found" : "Geen gesprekken gevonden", + "You have no archived conversations." : "Je hebt geen gearchiveerde gesprekken.", + "You have no unread mentions." : "Je hebt geen ongelezen vermeldingen.", + "You have no unread messages." : "Je hebt geen ongelezen berichten..", + "An error occurred while performing the search" : "Er trad een fout op bij uitvoeren van de zoekopdracht", + "Conversation list" : "Gesprekkenlijst", + "Filter conversations by" : "Filter gesprekken op", + "Unread messages" : "Ongelezen berichten", + "Meeting conversations" : "Vergadering gesprekken", + "Clear filters" : "Wis filters", + "New personal note" : "Nieuwe persoonlijke notitie", + "Back to conversations" : "Terug naar gesprekken", + "Archived conversations" : "Gearchiveerde gesprekken", + "Threads" : "Draden", + "Clear filter" : "Filter leegmaken", + "App settings" : "App instellingen", + "Users" : "Gebruikers", + "Groups" : "Groepen", + "Teams" : "Teams", + "New private conversation" : "Nieuw privégesprek", + "Other sources" : "Andere bronnen", + "Open conversations" : "Open gesprekken", + "No search results" : "Geen zoekresultaten", + "Users, groups and teams" : "Gebruikers, groepen en teams", + "Users and groups" : "Gebruikers en groepen", + "Users and teams" : "Gebruikers en groepen", + "Groups and teams" : "Groepen en teams", + "New group conversation" : "Nieuw groepsgesprek", + "The meeting will start soon" : "De vergadering begint binnenkort", + "This meeting is scheduled for {startTime}" : "Deze vergadering is gepland voor {startTime}", + "You are currently waiting in the lobby" : "Je wacht nu in de lobby", + "Select microphone" : "Selecteer microfoon", + "No microphone available" : "Geen microfoon aanwezig", + "Select camera" : "Selecteer camera", + "No camera available" : "Geen camera aanwezig", + "Select a device" : "Selecteer een apparaat", + "Playing …" : "Afspelen...", + "Test speakers" : "Test speakers", + "Test" : "Test", + "Devices" : "Apparaten", + "Backgrounds" : "Achtergronden", + "No audio" : "Geen geluid", + "No camera" : "Geen camera", + "Display video as you will see it (mirrored)" : "Toon video zoals jij het zal zien (gespiegeld)", + "Display video as others will see it" : "Toon video zoals anderen het zullen zien", + "Calls are not supported in your browser" : "Oproepen worden niet ondersteund in je browser", + "Access to microphone is only possible with HTTPS" : "Toegang tot microfoon is alleen mogelijk met HTTPS", + "Access to microphone was denied" : "Toegang tot de microfoon is geweigerd", + "Error while accessing microphone" : "Fout bij toegang tot microfoon", + "Access to camera is only possible with HTTPS" : "Toegang tot de camera is alleen mogelijk met HTTPS", + "The call is being recorded." : "Het gesprek wordt opgenomen", + "The call might be recorded." : "Het gesprek kan opgenomen worden.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "De opname kan je stem, video van je camera en schermdelen bevatten. Je toestemming is nodig voorafgaand aan deelname aan het gesprek. ", + "Give consent to the recording of this call" : "Geef toestemming voor opname van dit gesprek", + "Start recording immediately with the call" : "Start opname meteen met het gesprek", + "Apply settings" : "Instellingen toepassen", + "Select virtual office background" : "Selecteer virtuele kantoorachtegrond", + "Select virtual home background" : "Selecteer virtuele thuis achtergrond", + "Select virtual abstract background" : "Selecteer virtuele abstracte achtergrond", + "Select virtual beach background" : "Selecteer virtuele strand achtergrond", + "Select virtual park background" : "Selecteer virtuele park achtergrond", + "Select virtual theater background" : "Selecteer virtuele theater achtergrond", + "Select virtual library background" : "Selecteer virtuele bibliotheek achtergrond", + "Select virtual space station background" : "Selecteer virtuele ruimtestation achtergrond", + "Error while uploading the file" : "Fout bij uploaden van het bestand", + "Select a file" : "Selecteer een bestand", + "Invalid path selected" : "Ongeldig pad geselecteerd", + "Select virtual background from file {fileName}" : "Selecteer virtuele achtergrond vanuit bestand {fileName}", + "Blur" : "Vervagen", + "Upload" : "Upload", + "Files" : "Bestanden", + "(edited)" : "(bewerkt)", + "The message has expired or has been deleted" : "Bericht is verlopen of verwijderd.", + "Cancel quote" : "Annuleer citaat", + "24 hours" : "24 uur", + "7 days" : "7 dagen", + "Until unpin" : "Tot ontpint", + "Edited by {actor}" : "Bewerkt door {actor}", + "Message text copied to clipboard" : "Berichttekst naar klembord gekopieerd", + "Message text could not be copied" : "Berichttekst kon niet gekopieerd worden", + "Message forwarded to \"Note to self\"" : "Bericht doorgestuurd naar \"Notitie voor mezelf\"", + "Error while forwarding message to \"Note to self\"" : "Fout bij doorsturen bericht naar \"Notitie voor mezelf\"", + "A reminder was successfully removed" : "Een herinnering succesvol verwijderd", + "Error occurred when removing a reminder" : "Fout opgetreden bij verwijderen herinnering", + "A reminder was successfully set at {datetime}" : "Een herinnering succesvol ingesteld op {datetime}", + "Error occurred when creating a reminder" : "Fout opgetreden bij maken herinnering", + "Add a reaction to this message" : "Een reactie toevoegen aan dit bericht", + "Reply" : "Antwoord", + "More actions" : "Meer acties", + "Set reminder" : "Herinnering instellen", + "Pin message" : "Pin bericht", + "Unpin message" : "Ontpin bericht", + "Reply privately" : "Antwoord privé", + "Edit message" : "Bewerk bericht", + "Copy message link" : "Kopiëren berichtlink", + "Go to file" : "Ga naar bestand", + "Download file" : "Downloaden bestand", + "Go to thread" : "Ga naar draad", + "Forward message" : "Bericht doorsturen", + "Translate" : "Vertaal", + "Set custom reminder" : "Aangepaste herinnering instellen", + "Close reactions menu" : "Reactie-menu sluiten", + "React with {emoji}" : "Reageer met {emoji}", + "React with another emoji" : "Reageer met een andere emoji", + "Choose a conversation to forward the selected message." : "Kies een gesprek om het geselecteerde bericht aan door te sturen.", + "Error while forwarding message" : "Fout bij doorsturen bericht", + "The message has been forwarded to {selectedConversationName}" : "Het bericht is doorgestuurd naar {selectedConversationName}", + "Dismiss" : "Weigeren", + "Go to conversation" : "Ga naar gesprek", + "Detect language" : "Detecteer taal", + "The message could not be translated" : "Het bericht kon niet vertaald worden", + "Translation copied to clipboard" : "Vertaling gekopieerd naar klembord", + "Translation could not be copied" : "Vertaling kon niet gekopieerd worden", + "Translate message" : "Vertaal bericht", + "Source language to translate from" : "Brontaal om vanuit te vertalen", + "Translate from" : "Vertaal vanuit", + "Target language to translate into" : "Doeltaal om naar te vertalen", + "Translate to" : "Vertaal naar", + "Translating" : "Vertalen", + "Copy translated text" : "Kopieer vertaalde tekst", + "Send now" : "Nu versturen", + "Message read by everyone who shares their reading status" : "Bericht gelezen door iedereen die de eigen leesstatus deelt", + "Message sent" : "Bericht verstuurd", + "Sent without notification" : "Verstuurd zonder melding", + "Deleting message" : "Bericht aan het verwijderen", + "Message deleted successfully" : "Bericht succesvol verwijderd", + "Message could not be deleted because it is too old" : "Bericht kon niet worden verwijderd omdat het te oud is", + "Only normal chat messages can be deleted" : "Alleen normale chatberichten kunnen worden verwijderd", + "An error occurred while deleting the message" : "Er trad een fout op bij het verwijderen van het bericht", + "Pinned" : "Gepind", + "Your browser does not support playing audio files" : "Je browser heeft geen ondersteuning voor afspelen audiobestanden.", + "Contact" : "Contactpersoon", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Deck kaart", + "Remove {fileName}" : "Verwijderen {fileName}", + "Open this location in OpenStreetMap" : "Open deze locatie in Openstreetmap", + "_%n reply_::_%n replies_" : ["%n antwoord","%n antwoordt"], + "Sending message" : "Versturen bericht", + "Failed to send the message. Click to try again" : "Versturen bericht is mislukt, tik om het opnieuw te proberen.", + "Not enough free space to upload file" : "Onvoldoende vrije ruimte voor opslaan bestand", + "You cannot send messages to this conversation at the moment" : "Je kunt nu geen berichten versturen binnen dit gesprek", + "Could not update the message" : "Kon het bericht niet bijwerken", + "You voted" : "Je hebt gestemd", + "_%n vote_::_%n votes_" : ["%n stem","%n stemmen"], + "See results" : "Zie resultaten", + "Reactions" : "Reacties", + "No permission to post reactions in this conversation" : "Geen toestemming om reacties te plaatsen in dit gesprek", + "Show or collapse system messages" : "Uit- of inklappen systeemberichten", + "No messages" : "Geen berichten", + "All messages have expired or have been deleted." : "Alle berichten zijn verlopen of zijn verwijderd.", + "Unpin" : "Losmaken", + "Cancel search" : "Zoekopdracht annuleren", + "Add a phone number" : "Voeg een telefoonnummer toe", + "Error: A password is required to create the conversation." : "Fout: Een wachtwoord is vereist om het gesprek te maken.", + "All set, the conversation \"{conversationName}\" was created." : "Klaar, het gesprek \"{conversationName}\" is aangemaakt.", + "Create a new group conversation" : "Maak een nieuw groepsgesprek", + "Add participants" : "Deelnemers toevoegen", + "Maximum length exceeded ({maxlength} characters)" : "Maximale lengte overschreden ({maxlength}tekens)", + "Conversation visibility" : "Zichtbaarheid gesprek", + "Allow guests to join via link" : "Sta gasten toe om deel te nemen via een link", + "Enter password" : "Invullen wachtwoord", + "This conversation has been locked" : "Het gesprek is vergrendeld", + "No permission to post messages in this conversation" : "Geen machtiging om berichten in dit gesprek te plaatsen", + "Joining conversation …" : "Deelnemen aan gesprek ...", + "Write a message without notification" : "Schrijf een bericht zonder melding", + "Create a thread" : "Creëer een draad", + "Send message" : "Verstuur bericht", + "Send without notification" : "Versturen zonder melding", + "The participant will not be notified about new messages" : "De deelnemer zal niet ingelicht worden over nieuwe berichten", + "Participants will not be notified about new messages" : "Deelnemers zullen niet ingelicht worden over nieuwe berichten", + "The message could not be edited" : "Het bericht kon niet bewerkt worden", + "File to share" : "Bestand om te delen", + "File upload is not available in this conversation" : "Bestandsupload is niet beschikbaar in dit gesprek", + "Add emoji" : "Emoji toevoegen", + "Adding a mention will only notify users who did not read the message." : "Het toevoegen van een vermelding zal alleen de gebruikers berichten die het bericht nog niet gelezen hebben.", + "Thread title" : "Draad-titel", + "Send later" : "Verstuur later", + "Cancel editing" : "Annuleer bewerken", + "{user} is out of office and might not respond." : "{user} is afwezig en zal mogelijk niet antwoorden", + "Absence period: {startDate} - {endDate}" : "Afwezigheidsperiode: {startDate} - {endDate}", + "Share from Files" : "Delen vanuit Bestanden", + "Share files to the conversation" : "Deel bestanden binnen het gesprek", + "Upload from device" : "Uploaden vanaf apparaat", + "Create new poll" : "Nieuwe peiling aanmaken", + "Smart picker" : "Smart Picker", + "Record voice message" : "Opnemen gesproken bericht", + "End recording and send" : "Beëindigen opname en versturen", + "Dismiss recording" : "Opname sluiten", + "Access to the microphone was denied" : "Toegang tot de microfoon is geweigerd", + "Microphone either not available or disabled in settings" : "Microfoon niet beschikbaar of uitgeschakeld in instellingen", + "Error while recording audio" : "Fout tijdens opnemen audio", + "Voice message {time} ({conversation})" : "Spraak bericht {time} ({conversation})", + "Summary is AI generated and might contain mistakes" : "Samenvatting is gegenereerd via AI en kan fouten bevatten", + "Error occurred during a summary generation" : "Er trad een fout op tijdens genereren samenvatting", + "New file" : "Nieuw bestand", + "Blank" : "Blanco", + "Error while creating file" : "Fout bij maken bestand", + "Create and share a new file" : "Maak en deel een nieuw bestand", + "Name of the new file" : "Naam van het nieuwe bestand", + "Create file" : "Maak bestand", + "Someone is typing …" : "Iemand aan het typen ...", + "{user1} is typing …" : "{user1} aan het typen …", + "{user1} and {user2} are typing …" : "{user1} en {user2} aan het typen …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} en {user3} aan het typen …", + "Add more files" : "Voeg meer bestanden toe", + "Send" : "Verzend", + "In this conversation {user} can:" : "In dit gesprek kan {user}:", + "Edit default permissions for participants in {conversationName}" : "Pas standaardmachtigingen voor deelnemers in {conversationName} aan", + "Start a call" : "Start een telefoongesprek", + "Skip the lobby" : "Skip de lobby", + "Can post messages and reactions" : "Kan berichten en reacties plaatsen", + "Enable the microphone" : "Schakel microfoon in", + "Enable the camera" : "Camera aan zetten", + "Share the screen" : "Deel jouw scherm", + "Update permissions" : "Machtigingen bijwerken", + "Updating permissions" : "Update machtigingen", + "There is no poll drafts yet saved for this conversation" : "Er is nog geen concept poll opgeslagen voor dit gesprek", + "Create poll" : "Peiling aanmaken", + "Question" : "Vraag", + "Ask a question" : "Stel een vraag", + "Import draft from file" : "Importeer concept vanuit een bestand", + "Answers" : "Antwoorden", + "Settings" : "Instellingen", + "Anonymous poll" : "Anonieme peiling", + "Multiple answers" : "Meerdere antwoorden", + "End poll" : "Peiling beëindigen", + "Results" : "Resultaten", + "Send a message to \"{roomName}\"" : "Stuur een bericht naar \"{roomName}\"", + "Hide list of participants" : "Verberg lijst met deelnemers", + "Show list of participants" : "Toon lijst met deelnemers", + "Assistance requested in {roomName}" : "Assistentie gevraagd in {roomName}", + "The message was sent to \"{roomName}\"" : "Het bericht is verstuurd naar \"{roomName}\"", + "Send message to room" : "Stuur bericht naar ruimte", + "Back to main room" : "Terug naar hoofdruimte", + "Back to your room" : "Terug naar je ruimte", + "Message all rooms" : "Bericht alle ruimtes", + "Start session" : "Start sessie", + "Start a call before you start a breakout room session" : "Start een oproep voordat je vergaderruimtessessie start", + "Stop session" : "Stop sessie", + "The message was sent to all breakout rooms" : "Het bericht is verstuurd naar alle ruimtes", + "Send a message to all breakout rooms" : "Stuur een bericht naar alle ruimtes", + "Breakout rooms are not started" : "Aparte vergaderruimtes zijn niet gestart", + "Disable lobby" : "Lobby uitschakelen", + "Settings for participant \"{user}\"" : "Instellingen voor deelnemer \"{user}\"", + "Participant \"{user}\"" : "Deelnemer \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gast", + "Ringing …" : "Bellen ...", + "Call rejected" : "Gesprek afgewezen", + "{time} talking …" : "{time} bellend ...", + "{time} talking time" : "{time} beltijd", + "Raised their hand" : "Hand opgestoken", + "Joined with video" : "Deelname via video", + "Joined via phone" : "Deelname via telefoon", + "Joined with audio" : "Deelname via audio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "De beschrijving moet kleiner zijn dan of gelijk zijn aan {maxLength} tekens. Je tekst is nu {charactersCount} tekens lang.", + "Remove group and members" : "Verwijderen groep en leden", + "Remove team and members" : "Verwijderen team en leden", + "Remove participant" : "Verwijder deelnemer", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Wilt je groep \"{displayName}\" en de leden ervan echt uit dit gesprek verwijderen?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Wilt je team \"{displayName}\" en zijn leden echt uit dit gesprek verwijderen?", + "Do you really want to remove {displayName} from this conversation?" : "Wilt je {displayName} echt uit dit gesprek verwijderen?", + "Notification was sent to {displayName}" : "Melding was verstuurd naar {displayName}", + "Could not send notification to {displayName}" : "Kon geen melding versturen naar {displayName}", + "Permissions granted to {displayName}" : "Machtiginen gegeven aan {displayName}", + "Could not modify permissions for {displayName}" : "Kon machtigingen voor {displayName} niet aanpassen", + "Permissions removed for {displayName}" : "Machtigingen verwijderd voor {displayName}", + "Permissions set to default for {displayName}" : "Machtigingen naar standaard hersteld voor {displayName}", + "in the lobby" : "in de lobby", + "Hang up phone" : "Telefoon ophangen", + "Move back to lobby" : "Verplaats terug naar lobby", + "Move to conversation" : "Verplaats naar gesprek", + "Dial-in PIN" : "Inbel PIN", + "Demote from moderator" : "Degradeer van moderator", + "Promote to moderator" : "Promoveer tot moderator", + "Resend invitation" : "Opnieuw verzenden uitnodiging", + "Send call notification" : "Verstuur gespreksmelding", + "Dial out phone number" : "Bel een telefoonnummer", + "Resume call for phone number" : "Hervat gesprek voor telefoonnummer", + "Put phone number on hold" : "Plaats telefoonummer in de wacht", + "Unmute phone number" : "Dempen telefoonnummer opheffen", + "Mute phone number" : "Demp telefoonnummer", + "Copy phone number" : "Kopieer telefoonnummer", + "Reset custom permissions" : "Herstel aangepaste machtigingen", + "Grant all permissions" : "Geef alle machtigingen", + "Remove all permissions" : "Verwijder alle machtigingen", + "Also ban from this conversation" : "Blokkeer ook voor dit gesprek", + "Internal note (reason to ban)" : "Interne notitie ( reden voor blokkeren)", + "Remove" : "Verwijderen", + "Permissions modified for {displayName}" : "Machtigingen aangepast voor {displayName}", + "Add users or groups" : "Toevoegen gebruikers of groepen", + "Add users" : "Toevoegen gebruikers", + "Add groups" : "Toevoegen groepen", + "Add teams" : "Teams toevoegen", + "Add other sources" : "Toevoegen andere bronnen", + "Add emails" : "Toevoegen e-mailadressen", + "Integrations" : "Integraties", + "Add federated users" : "Voeg gefedereerde gebruikers toe", + "Searching …" : "Zoeken ...", + "Search for more users" : "Zoek naar meer gebruikers", + "Search or add participants" : "Zoeken naar of toevoegen deelnemers", + "Invitation was sent to {actorId}" : "Uitnodig was verstuurd naar {actorId}", + "An error occurred while adding the participants" : "Er trad een fout op bij het toevoegen van deelnemers", + "Participants" : "Deelnemers", + "Participants ({count})" : "Deelnemers ({count})", + "Open chat" : "Openen gesprek", + "You have new unread messages in the chat." : "Je hebt nieuwe ongelezen berichten in de chat.", + "You have been mentioned in the chat." : "Je werd vermeld in een chat.", + "Chat" : "Chat", + "Details" : "Details", + "Shared items" : "Gedeelde objecten", + "No results found" : "Geen resultaten gevonden", + "Load more results" : "Laad meer resultaten", + "Recent threads" : "Recente draden", + "Projects" : "Projecten", + "No shared items" : "Geen gedeelde objecten", + "Thread notifications" : "Draad-berichten", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Verbind met een gesprek", + "Search conversations or users" : "Zoek in gesprekken of gebruikers", + "Select conversation" : "Selecteer een gesprek", + "Display name: {name}" : "Weergavenaam: {name}", + "Edit display name" : "Weergavenaam bewerken", + "Display name (required)" : "Weergavenaam (verplicht)", + "Save name" : "Naam opslaan", + "Error while saving sounds setting" : "Fout bij opslaan geluidsinstellingen", + "Play sounds when participants join or leave a call" : "Geluid afspelen wanneer deelnemers meedoen met een gesprek of het verlaten", + "Notification settings" : "Meldingsinstellingen", + "Invalid language ({languageId})" : "Ongeldige taal ({languageId})", + "Default language" : "Standaardtaal", + "Select location for attachments" : "Selecteer locatie voor bijlagen", + "Error while setting attachment folder" : "Fout bij instellen map voor bijlagen", + "Error while setting read status privacy" : "Fout bij instellen lees-status privacy", + "Privacy" : "Privacy", + "Attachments folder" : "Bijlagemap", + "Search" : "Zoeken", + "Focus the chat input" : "Focus op de chat invoer", + "Unfocus the chat input to use shortcuts" : "Verwijder focus op de chat invoer om sneltoetsen te kunnen gebruiken", + "Shortcuts while in a call" : "Snelkoppelingen tijdens een oproep", + "Camera on and off" : "Camera aan en uit", + "Microphone on and off" : "Microfoon aan en uit", + "Raise or lower hand" : "Hand omhoog of omlaag", + "Push to talk or push to mute" : "Tik om te praten of tik om te dempen", + "Start call silently" : "Start gesprek stil", + "Start call" : "Start oproep", + "End call" : "Beëindig gesprek", + "The server was updated, you cannot start or join a call." : "De server heeft een update gehad, je kan geen oproep starten of er aan deelnemen", + "You will be able to join the call only after a moderator starts it." : "Je kunt pas aan de oproep deelnemen als een moderator die gestart heeft.", + "End call for everyone" : "Beëindig gesprek voor iedereen", + "Recording" : "Opnemen", + "The call has been running for one hour." : "Dit gesprek is actief gedurende een uur", + "Cancel recording start" : "Annulleer start opname", + "Stop recording" : "Beëindig opname", + "You are not allowed to enable screensharing" : "Je bent niet bevoegd om schermdeling in te schakelen", + "No screensharing" : "Geen schermdelen", + "Screensharing options" : "Schermdelen opties", + "Enable screensharing" : "Inschakelen schermdelen", + "Bad sent video and screen quality." : "Slechte verzonden video- en schermkwaliteit.", + "Bad sent screen quality." : "Slechte verzonden schermkwaliteit.", + "Bad sent video quality." : "Slechte verzonden videokwaliteit.", + "Bad sent audio, video and screen quality." : "Slechte verzonden audio-, video- en schermkwaliteit.", + "Bad sent audio and screen quality." : "Slecht verzonden audio en schermkwaliteit.", + "Bad sent audio and video quality." : "Slechte verzonden audio- en videokwaliteit.", + "Bad sent audio quality." : "Slechte verzonden audiokwaliteit.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je scherm te zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren terwijl je je scherm deelt.", + "Disable background blur" : "Schakel vervaagde achtergrond uit", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Jouw internetverbinding of computer is overbelast en andere deelnemers kunnen jou scherm mogelijk niet zien. Om de situatie te verbeteren kun je jouw video uitzetten terwijl je screenshare gebruikt.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je scherm mogelijk niet zien.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet zien.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en je te zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren terwijl je je scherm deelt.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet verstaan ​​of zien. Om de situatie te verbeteren, kun je proberen je video uit te schakelen terwijl je een schermafbeelding uitvoert.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en je scherm te zien. Probeer je schermdeling uit te schakelen om de situatie te verbeteren.", + "Disable screenshare" : "Schakel Scherm-delen uit", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Je internetverbinding of computer zijn bezig en andere deelnemers zijn mogelijk niet in staat je te verstaan en zien. Probeer de achtergrondvervaging of je camera uit te schakelen om de situatie te verbeteren.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je mogelijk niet verstaan ​​of zien. Probeer je video uit te schakelen om de situatie te verbeteren.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Je internetverbinding of computer is overbelast en andere deelnemers kunnen je misschien niet verstaan.", + "Screen sharing is not supported by your browser." : "Schermdelen wordt niet ondersteund door je browser.", + "Screen sharing requires the page to be loaded through HTTPS." : "Schermdelen vereist het over HTTPS laden van de pagina.", + "Screensharing requires the page to be loaded through HTTPS." : "Schermdelen vereist het over HTTPS laden van de pagina.", + "An error occurred while starting screensharing." : "Er trad een fout op bij starten schermdelen.", + "Show your screen" : "Mijn scherm weergeven", + "Stop screensharing" : "Stop schermdelen", + "Mute others" : "Anderen dempen", + "Start recording" : "Begin opname", + "Remove participant {name}" : "Deelnemer {name} verwijderen", + "Delete now" : "Verwijder nu", + "Keep" : "Behouden", + "Select a region" : "Selecteer een regie", + "Local time: {time}" : "Lokale tijd: {time}", + "Search …" : "Zoeken ...", + "Message without mention" : "Bericht zonder vermelding", + "Mention myself" : "Vermeld mezelf", + "The conversation does not exist" : "Het gesprek bestaat niet", + "Join a conversation or start a new one!" : "Doe mee met een discussie, of start een nieuwe!", + "Duplicate session" : "Dubbele sessie", + "Join a conversation or start a new one" : "Doe mee met een discussie, of start een nieuwe", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud gebruiker", + "User password" : "Gebruiker wachtwoord", + "Talk conversation" : "Talk gesprek", + "Skip TLS verification" : "TLS verificatie overslaan", + "Matrix server URL" : "Matrix server URL", + "User" : "Gebruiker", + "Matrix channel" : "Matrix kanaal", + "Mattermost server URL" : "Mattermost server URL", + "Mattermost user" : "Mattermost gebruiker", + "Team name" : "Team naam", + "Channel name" : "Kanaal naam", + "Rocket.Chat server URL" : "Rocket.Chat server URL", + "User name or email address" : "Gebruikersnaam of e-mailadres", + "Rocket.Chat channel" : "Rocket.Chat kanaal", + "Zulip server URL" : "Zulip server URL", + "Bot user name" : "Bot gebruikersnaam", + "Bot API key" : "Bot API-sleutel", + "Zulip channel" : "Zulip kanaal", + "API token" : "API token", + "Slack channel" : "Slack kanaal", + "Server ID or name" : "Server ID of naam", + "Channel" : "Kanaal", + "Login" : "Inloggen", + "Chat ID" : "Chat ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server URL (bijv. chat.freenode.net:6667)", + "Nickname" : "Roepnaam", + "Connection password" : "Verbinding wachtwoord", + "IRC channel" : "IRC kanaal", + "Channel password" : "Kanaal password", + "NickServ nickname" : "NickServ nickname", + "NickServ password" : "NickServ wachtwoord", + "Use TLS" : "Gebruik TLS", + "Use SASL" : "Gebruik SASL", + "Tenant ID" : "Tenant ID", + "Client ID" : "Client ID", + "Team ID" : "Team ID", + "Thread ID" : "Draad ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server URL", + "MUC server URL" : "MUC server URL", + "Jabber ID" : "Jabber ID", + "Media" : "Media", + "Polls" : "Peilingen", + "Deck cards" : "Deck kaarten", + "Voice messages" : "Voice berichten", + "Locations" : "Locaties", + "Audio" : "Geluid", + "Show all media" : "Toon alle media", + "Show all files" : "Toon alle bestanden", + "Show all deck cards" : "Toon alle Deck kaarten", + "Show all voice messages" : "Toon alle voice berichten", + "Show all locations" : "Toon alle locaties", + "Show all audio" : "Toon alle audio", + "Show all other" : "Toon alle anderen", + "Follow conversation settings" : "Volg conversatie instellingen", + "Group" : "Groep", + "Team" : "Team", + "You promoted {user0} and {user1} to moderators" : "Je promoveerde {user0} en {user1} to moderators", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Je promoveerde{user0}, {user1} en %n meer deelnemer to moderators","Je promoveerde {user0}, {user1} en %n meer deelnemers tot moderators"], + "An administrator promoted you and {user0} to moderators" : "Een beheerder promoveerde jou en {user0} tot moderators", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveerde jou en {user0} tot moderators", + "You:" : "Jij:", + "You: {lastMessage}" : "Jij: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "De server heeft een update gehad.", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Je probeert deel te nemen aan een gesprek terwijl je een actieve sessie hebt in een ander venster of apparaat. Dit wordt momenteel niet ondersteund door Nextcloud Talk. Wat wil je doen?", + "Leave this page" : "Verlaat deze pagina", + "Join here" : "Meld u hier aan", + "An error occurred while posting deck card to conversation" : "Een fout heeft plaatsgevonden bij het plaatsen van de deck kaart in het gesprek", + "Post to a conversation" : "Publiceer in een gesprek", + "Post to conversation" : "Publiceren naar gesprek", + "The recording failed. Please contact your administrator." : "The opname is mislukt. Neem contact op met je beheerder.", + "An error occurred while posting location to conversation" : "Een fout heeft plaatsgevonden bij het versturen van de locatie naar het gesprek", + "Share to a conversation" : "Deel naar een gesprek", + "Share to conversation" : "Deel naar gesprek", + "Error while clearing conversation history" : "Fout bij het verwijderen van de gespreksgeschiedenis", + "Error occurred while allowing guests" : "Fout bij toelaten gasten", + "Error occurred while disallowing guests" : "Fout bij toegang ontzeggen voor gasten", + "Error occurred when restricting the conversation to moderator" : "Er is een fout opgetreden bij het beperken van het gesprek tot moderator", + "Error occurred when opening the conversation to everyone" : "Er is een fout opgetreden bij het openen van het gesprek voor iedereen", + "Conversation password has been saved" : "Gesprekswachtwoord opgeslagen", + "Conversation password has been removed" : "Gesprekswachtwoord verwijderd", + "Error occurred while saving conversation password" : "Er trad een fout op bij het opslaan van het gesprekswachtwoord ", + "Could not post message: {errorMessage}" : "Kon bericht niet plaatsen: {errorMessage}", + "An error occurred while fetching the participants" : "Er trad een fout op bij het ophalen van de deelnemers", + "Could not send invitation to {actorId}" : "Kon uitnodiging niet versturen naar {actorId}", + "Invitations sent" : "Uitnodigingen verzonden", + "Error occurred when sending invitations" : "Er trad een fout op bij het verzenden van uitnodigingen", + "{guest} (guest)" : "{guest} (gast)", + "Failed to add reaction" : "Reactie toevoegen mislukt", + "Failed to remove reaction" : "Reactie verwijderen mislukt", + "The server is in maintenance mode." : "De server staat in onderhoudsmodus.", + "Federated server was updated." : "Gefedereerde server heeft een update gehad.", + "Error while uploading file \"{fileName}\"" : "Fout bij opslaan bestand \"{fileName}\".", + "Not enough free space to upload file \"{fileName}\"" : "Onvoldoende vrije ruimte om \"{fileName}\" op te slaan", + "You are not allowed to share files" : "Je bent niet geautoriseerd om bestanden te delen", + "Error while sharing file" : "Fout bij delen bestand", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "De browser die je gebruikt, wordt niet volledig ondersteund door Nextcloud Talk. Gebruik alsjeblieft de laatste versie van Mozilla Firefox, Microsoft Edge, Google Chrome, Opera of Apple Safari.", + "_%n minute _::_%n minutes_" : ["%n minuten","%n minuten"], + "In {hours} and {minutes}" : "In {hours} en {minutes}", + "_In %n minute_::_In %n minutes_" : ["Over %n minuten","Over %n minuten"], + "Later today – {timeLocale}" : "Later vandaag – {timeLocale}", + "Tomorrow – {timeLocale}" : "Morgen - {timeLocale}", + "This weekend – {timeLocale}" : "Dit weekend - {timeLocale}", + "Next week – {timeLocale}" : "Volgende week - {timeLocale}", + "Message link copied to clipboard" : "Bericht-link naar klembord gekopieerd", + "Conversation link copied to clipboard" : "Gespreks-link naar klembord gekopieerd", + "The link could not be copied" : "De link kon niet gekopieerd worden", + "Error while parsing a PROPFIND error" : "Fout tijdens het analyseren van een PROPFIND fout", + "Lost connection to signaling server. Trying to reconnect." : "Verbinding met signaleringsserver verbroken. Ik probeer opnieuw verbinding te maken.", + "Please reload the page." : "Herlaad deze pagina.", + "Do not disturb" : "Niet storen", + "Away" : "Afwezig", + "Microphone {number}" : "Microfoon {number}", + "Camera {number}" : "Camera {number}", + "Speaker {number}" : "Speaker {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Je lijkt te spreken terwijl je gedempt bent. Haal de demping weg zodat anderen je ook horen", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Kon geen verbinding maken met ten minste één deelnemer. Een TURN server kan nodig zijn. Neem contact op met je beheerder om er eentje te laten inrichten volgende {linkstart}deze instructies{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Dit duurt langer dan verwacht. Zijn de mediamachtigingen al verstrekt (of geweigerd)? Zo ja, herstart dan je browser, omdat audio en video niet lukken", + "Access to microphone & camera is only possible with HTTPS" : "Toegang tot microfoon & camera is alleen mogelijk met HTTPS", + "Please move your setup to HTTPS" : "Stel de verbinding als HTTPS in", + "Access to microphone & camera was denied" : "Toegang tot microfoon & camera geweigerd", + "WebRTC is not supported in your browser" : "WebRTC wordt niet ondersteund door je browser", + "Please use a different browser like Firefox or Chrome" : "Gebruik een andere browser, zoals Firefox of Chrome", + "Error while accessing microphone & camera" : "Fout bij benaderen microfoon & camera", + "%s Talk on your mobile devices" : "%s Talk op je mobiele apparaten", + "Join conversations at any time, anywhere, on any device." : "Doe mee met gesprekken op elk tijdstip, overal met elk apparaat.", + "Android app" : "Android app", + "iOS app" : "iOS app", + "__language_name__" : "Nederlands", + "Call summary (%s)" : "Gesprekssamenvatting (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "De bot gespekssamenvatting plaatst na de oproep een overzichtsbericht waarin alle deelnemers worden vermeld en taken worden beschreven", + "Tasks" : "Taken", + "Notes" : "Notities", + "Reports" : "Rapporten", + "Decisions" : "Besluiten", + "Agenda" : "Agenda", + "Call summary" : "Gesprekssamenvatting", + "Call summary - {title}" : "Gesprekssamenvatting - {title}", + "Talk conversation for event" : "Talk gesprek voor gebeurtenis", + "Next meeting" : "Volgende vergadering", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Plan een vergadering vanuit je agenda. Een Talk conversatie moet worden ingesteld als locatie om hier te verschijnen", + "Join conversations from remote Nextcloud servers" : "Neem deel aan gesprekken van andere Netxcloud servers", + "Set reminder for later today" : "Herinnering instellen voor later vandaag ", + "Set reminder for tomorrow" : "Herinnering instellen voor morgen ", + "Set reminder for this weekend" : "Herinnering instellen voor het weekend ", + "Set reminder for next week" : "Herinnering instellen voor volgende week", + "Generate summary" : "Maak samenvatting", + "Talk recording from {time} ({conversation})" : "Talk opnam van {time} ({conversation})", + "Your privacy setting has been saved" : "Je privacy-instellingen zijn opgeslagen", + "Failed to save sounds setting" : "Kon geluidsinstellingen niet opslaan", + "Sounds setting saved" : "Geluidsinstellingen opgeslagen", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Je nam deel aan het gesprek in een ander venster of apparaat. Dit wordt momenteel niet ondersteund door Nextcloud Talk, dus deze sessie is gesloten." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/nn_NO.js b/l10n/nn_NO.js new file mode 100644 index 0000000..e6fad66 --- /dev/null +++ b/l10n/nn_NO.js @@ -0,0 +1,131 @@ +OC.L10N.register( + "spreed", + { + "Talk" : "Prat", + "Guest" : "Gjest", + "Administration" : "Administrasjon", + "System" : "System", + "File not found" : "Fann ikkje fila", + "File is too big" : "Fila er for stor", + "Invalid file provided" : "Ugyldig fil", + "Invalid image" : "Ugyldig bilete", + "Unknown filetype" : "Ukjend filtype", + "Say hi to your friends and colleagues!" : "Sei hei til dine venner og kollegar!", + "Description" : "Skildring", + "Open settings" : "Opne instillingar", + "Default" : "Standard", + "Messages" : "Meldingar", + "Other" : "Anna", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Argentina" : "Argentina", + "Austria" : "Austerrike", + "Australia" : "Australia", + "Belgium" : "Belgia", + "Bulgaria" : "Bulgaria", + "Bahamas" : "Bahamas", + "Chile" : "Chile", + "Germany" : "Tyskland", + "Denmark" : "Danmark", + "Estonia" : "Estland", + "Egypt" : "Egypt", + "Finland" : "Finland", + "France" : "Frankrike", + "Georgia" : "Georgia", + "Greece" : "Hellas", + "Indonesia" : "Indonesia", + "Ireland" : "Irland", + "Israel" : "Israel", + "India" : "India", + "Iceland" : "Island", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kuwait" : "Kuwait", + "Lebanon" : "Libanon", + "Lithuania" : "Litauen", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Mexico" : "Mexico", + "Nigeria" : "Nigeria", + "Netherlands" : "Nederland", + "Norway" : "Noreg", + "The password is wrong. Try again." : "Passordet er gale. Prøv igjen.", + "Password" : "Passord", + "Everyone" : "Alle", + "Disabled" : "Deaktivert", + "Name" : "Namn", + "Enable encryption" : "Aktiver kryptering", + "Pending" : "Under vegs", + "Error" : "Feil", + "Language" : "Språk", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Skapt den", + "OK" : "OK", + "Cancel" : "Avbryt", + "Back" : "Tilbake", + "Calendar" : "Kalendar", + "Attendees" : "Deltakarar", + "Save" : "Lagre", + "Grid view" : "Rutenett visning", + "Copy link" : "Kopier lenkje", + "None" : "Ingen", + "Favorite" : "Favoritt", + "Disable" : "Slå av", + "Enable" : "SLå på", + "Choose" : "Vel", + "Personal" : "Personleg", + "Leave conversation" : "Forlat samtalen", + "Delete conversation" : "Slett samtale", + "Password protection" : "Password protection", + "Set a password" : "Lag eit passord", + "Edit" : "Endra", + "More information" : "Meir informasjon", + "Delete" : "Slett", + "Notifications" : "Varsel", + "Important conversation" : "Viktig samtale", + "Log in" : "Logg inn", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "Home" : "Heim", + "Unread messages" : "Meldingar er ikkje lest", + "Users" : "Brukarare", + "Groups" : "Grupper", + "Upload" : "Last opp", + "Files" : "Filer", + "Reply" : "Svare", + "Reply privately" : "Svar privat", + "Dismiss" : "Forkast", + "Message sent" : "Melding sendt", + "Contact" : "Kontakt", + "Add participants" : "Legg til deltakarar", + "Send message" : "Send melding", + "Record voice message" : "Ta opp lyd melding ", + "Send" : "Send", + "Settings" : "Instillingar", + "Remove group and members" : "Eksterne gruppe og medlemmar", + "Remove participant" : "Eksterne deltakarar", + "Demote from moderator" : "Nedrykk frå moderator", + "Promote to moderator" : "Fremje til moderator", + "Add users or groups" : "Add users or groups", + "Participants" : "Deltakarar", + "Open chat" : "Start lynmelding", + "Chat" : "Lynmelding", + "Details" : "Detaljar", + "Notification settings" : "Varsel innstillingar", + "Privacy" : "Personvern", + "Search" : "Search", + "Join a conversation or start a new one" : "Delta i ein samtale eller start ein ny ein", + "User" : "Bruker", + "Login" : "Login", + "Nickname" : "Kallenamn", + "Client ID" : "Klient-ID", + "Group" : "Gruppe", + "Please reload the page." : "Ver venleg og last sida på nytt.", + "Away" : "Borte", + "__language_name__" : "Nynorsk", + "Tasks" : "Oppgåver" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/nn_NO.json b/l10n/nn_NO.json new file mode 100644 index 0000000..658e13a --- /dev/null +++ b/l10n/nn_NO.json @@ -0,0 +1,129 @@ +{ "translations": { + "Talk" : "Prat", + "Guest" : "Gjest", + "Administration" : "Administrasjon", + "System" : "System", + "File not found" : "Fann ikkje fila", + "File is too big" : "Fila er for stor", + "Invalid file provided" : "Ugyldig fil", + "Invalid image" : "Ugyldig bilete", + "Unknown filetype" : "Ukjend filtype", + "Say hi to your friends and colleagues!" : "Sei hei til dine venner og kollegar!", + "Description" : "Skildring", + "Open settings" : "Opne instillingar", + "Default" : "Standard", + "Messages" : "Meldingar", + "Other" : "Anna", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Argentina" : "Argentina", + "Austria" : "Austerrike", + "Australia" : "Australia", + "Belgium" : "Belgia", + "Bulgaria" : "Bulgaria", + "Bahamas" : "Bahamas", + "Chile" : "Chile", + "Germany" : "Tyskland", + "Denmark" : "Danmark", + "Estonia" : "Estland", + "Egypt" : "Egypt", + "Finland" : "Finland", + "France" : "Frankrike", + "Georgia" : "Georgia", + "Greece" : "Hellas", + "Indonesia" : "Indonesia", + "Ireland" : "Irland", + "Israel" : "Israel", + "India" : "India", + "Iceland" : "Island", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kuwait" : "Kuwait", + "Lebanon" : "Libanon", + "Lithuania" : "Litauen", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Mexico" : "Mexico", + "Nigeria" : "Nigeria", + "Netherlands" : "Nederland", + "Norway" : "Noreg", + "The password is wrong. Try again." : "Passordet er gale. Prøv igjen.", + "Password" : "Passord", + "Everyone" : "Alle", + "Disabled" : "Deaktivert", + "Name" : "Namn", + "Enable encryption" : "Aktiver kryptering", + "Pending" : "Under vegs", + "Error" : "Feil", + "Language" : "Språk", + "Country" : "Land", + "Status" : "Status", + "Created at" : "Skapt den", + "OK" : "OK", + "Cancel" : "Avbryt", + "Back" : "Tilbake", + "Calendar" : "Kalendar", + "Attendees" : "Deltakarar", + "Save" : "Lagre", + "Grid view" : "Rutenett visning", + "Copy link" : "Kopier lenkje", + "None" : "Ingen", + "Favorite" : "Favoritt", + "Disable" : "Slå av", + "Enable" : "SLå på", + "Choose" : "Vel", + "Personal" : "Personleg", + "Leave conversation" : "Forlat samtalen", + "Delete conversation" : "Slett samtale", + "Password protection" : "Password protection", + "Set a password" : "Lag eit passord", + "Edit" : "Endra", + "More information" : "Meir informasjon", + "Delete" : "Slett", + "Notifications" : "Varsel", + "Important conversation" : "Viktig samtale", + "Log in" : "Logg inn", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Add to favorites", + "Home" : "Heim", + "Unread messages" : "Meldingar er ikkje lest", + "Users" : "Brukarare", + "Groups" : "Grupper", + "Upload" : "Last opp", + "Files" : "Filer", + "Reply" : "Svare", + "Reply privately" : "Svar privat", + "Dismiss" : "Forkast", + "Message sent" : "Melding sendt", + "Contact" : "Kontakt", + "Add participants" : "Legg til deltakarar", + "Send message" : "Send melding", + "Record voice message" : "Ta opp lyd melding ", + "Send" : "Send", + "Settings" : "Instillingar", + "Remove group and members" : "Eksterne gruppe og medlemmar", + "Remove participant" : "Eksterne deltakarar", + "Demote from moderator" : "Nedrykk frå moderator", + "Promote to moderator" : "Fremje til moderator", + "Add users or groups" : "Add users or groups", + "Participants" : "Deltakarar", + "Open chat" : "Start lynmelding", + "Chat" : "Lynmelding", + "Details" : "Detaljar", + "Notification settings" : "Varsel innstillingar", + "Privacy" : "Personvern", + "Search" : "Search", + "Join a conversation or start a new one" : "Delta i ein samtale eller start ein ny ein", + "User" : "Bruker", + "Login" : "Login", + "Nickname" : "Kallenamn", + "Client ID" : "Klient-ID", + "Group" : "Gruppe", + "Please reload the page." : "Ver venleg og last sida på nytt.", + "Away" : "Borte", + "__language_name__" : "Nynorsk", + "Tasks" : "Oppgåver" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/oc.js b/l10n/oc.js new file mode 100644 index 0000000..2fce3d2 --- /dev/null +++ b/l10n/oc.js @@ -0,0 +1,1099 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una conversacion", + "(Duration %s)" : "(Durada %s)", + "You attended a call with {user1}" : "Avètz assistit a una sonada amb {user1}", + "_%n guest_::_%n guests_" : ["%n convidat","%n convidats"], + "You attended a call with {user1} and {user2}" : "Avètz assistit a una sonada amb {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Avètz assistit a una sonada amb {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Avètz assistit a una sonada amb {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Avètz assistit a una sonada amb {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n autre","%n autres"], + "{actor} invited you to {call}" : "{actor} vos a convidat a {call}", + "You were invited to a conversation or had a call" : "Sètz convidat a una conversacion o avètz agut una sonada", + "Other activities" : "Autras activitats", + "Talk" : "Talk", + "Guest" : "Convidat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## La benvenguda a Nextcloud Talk!\nDins aquesta conversacion seràs avisats de la foncionalitats novèlas disponiblas dins Nextcloud Talk.", + "## New in Talk %s" : "## Nòu dins Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge e Safari pòdon ara utilizar la conversacion àudio e vidèo", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Podètz ara notificar totes los participants en publicant « @all » al chat", + "- You can now mention guests in the chat" : "- Podètz ara mencionar los convidats al chat", + "- Join the same conversation and call from multiple devices" : "- Participar a la meteissa conversacion e sonada de mantun aparelh estant", + "- Send voice messages, share your location or contact details" : "- Enviar de messatges vocals, partejar vòstra posicion e detalhs de contactes", + "Talk updates ✅" : "Mesas a jorn Talk ✅", + "Reaction deleted by author" : "Reaccion suprimida per son autor", + "{actor} created the conversation" : "{actor} a creat la conversacion", + "You created the conversation" : "Avètz creat la conversacion", + "System created the conversation" : "Lo sistèma creèt la conversacion", + "An administrator created the conversation" : "Un administrator a creat la conversacion", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a renomenat la conversacion de « %1$s » a « %2$s »", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Avètz renomenat la conversacion de « %1$s » a « %2$s »", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrator a renomenat la conversacion de « %1$s » a « %2$s »", + "{actor} set the description" : "{actor} escriguèt la descripcion", + "You set the description" : "Avètz escricha la descripcion", + "An administrator set the description" : "Un administrator escriguèt la descripcion", + "{actor} removed the description" : "{actor} a tirat la descripcion", + "You removed the description" : "Avètz tirat la descripcion", + "An administrator removed the description" : "Un administrator a tirat la descripcion", + "You started a call" : "Avètz començat una sonada", + "{actor} started a call" : "{actor} a començat una sonada", + "{actor} joined the call" : "{actor} a rejonh la sonada", + "You joined the call" : "Avètz rejonch la sonada", + "{actor} left the call" : "{actor} a quitat la sonada", + "You left the call" : "Avètz quitat la sonada", + "{actor} unlocked the conversation" : "{actor} a desverrolhat la conversacion", + "You unlocked the conversation" : "Avètz desverrolhat la conversacion", + "An administrator unlocked the conversation" : "Un administrator a desverrolhat la conversacion", + "{actor} locked the conversation" : "{actor} a clavat la conversacion", + "You locked the conversation" : "Avètz clavat la conversacion", + "An administrator locked the conversation" : "Un administrator a clavat la conversacion", + "{actor} limited the conversation to the current participants" : "{actor} a limitat la conversacion als participants actuals", + "You limited the conversation to the current participants" : "Avètz limitat la conversacion als participants actuals", + "An administrator limited the conversation to the current participants" : "Un administrator a limitat la conversacion als participants actuals", + "{actor} opened the conversation to registered users" : "{actor} dobriguèt la conversacion als utilizaires enregistrats", + "You opened the conversation to registered users" : "Dobriretz la conversacion als utilizaires enregistrats", + "An administrator opened the conversation to registered users" : "Un administrator dobriguèt la conversacion als utilizaires enregistrats", + "The conversation is now open to everyone" : "La conversacion es ara dubèrta a tot lo monde", + "{actor} opened the conversation to everyone" : "{actor} a dubèrta la conversacion a tot lo monde", + "You opened the conversation to everyone" : "Avètz dobèrta la conversacion a tot lo monde", + "{actor} restricted the conversation to moderators" : "{actor} a restrench la conversacion als moderators", + "You restricted the conversation to moderators" : "Avètz restrench la conversacion als moderators", + "{actor} allowed guests" : "{actor} autorizèt los convidats", + "You allowed guests" : "Avètz autorizat los convidats", + "An administrator allowed guests" : "Un administrator autorizèt los convidats", + "{actor} disallowed guests" : "{actor} interdiguèt los convidats", + "You disallowed guests" : "Avètz interdich los convidats", + "An administrator disallowed guests" : "Un administrator desactivèt los convidats", + "{actor} set a password" : "{actor} a definit un senhal", + "You set a password" : "Avètz definit un senhal", + "An administrator set a password" : "Un administrator a definit un senhal", + "{actor} removed the password" : "{actor} a tirat lo senhal", + "You removed the password" : "Avètz tirat lo senhal", + "An administrator removed the password" : "Un administrator a tirat lo senhal", + "{actor} added {user}" : "{actor} a apondut {user}", + "You joined the conversation" : "Rejonhètz la conversacion", + "{actor} joined the conversation" : "{actor} dintra dins la conversacion", + "You added {user}" : "Avètz apondut {user}", + "{actor} added you" : "{actor} vos a apondut", + "An administrator added you" : "Un administrator vos a apondut", + "An administrator added {user}" : "Un administrator a apondut {user}", + "You left the conversation" : "Avètz quitat la conversacion", + "{actor} left the conversation" : "{actor} a quitat la conversacion", + "{actor} removed {user}" : "{actor} a levat {user}", + "You removed {user}" : "Avètz levat {user}", + "{actor} removed you" : "{actor} vos a levat", + "An administrator removed you" : "Un administrator vos a levat", + "An administrator removed {user}" : "Un administrator a tirat {user}", + "{actor} invited {federated_user}" : "{actor} a invitat {federated_user}", + "You invited {federated_user}" : "As invitat {federated_user}", + "An administrator invited {federated_user}" : "Un administrator a invitat {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} a acceptat l’invitacion", + "{actor} removed {federated_user}" : "{actor} a tirat {federated_user}", + "You removed {federated_user}" : "Avètz tirat {federated_user}", + "An administrator removed {federated_user}" : "Un administrator a tirat {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} a refusat l’invitacion", + "{actor} added group {group}" : "{actor} apondèt lo grop {group}", + "You added group {group}" : "Avètz apondut lo grop {group}", + "An administrator added group {group}" : "Un administrator apondèt lo grop {group}", + "{actor} removed group {group}" : "{actor} levèt lo grop {group}", + "You removed group {group}" : "Avètz levat lo grop {group}", + "An administrator removed group {group}" : "Un administrator tirèt lo grop {group}", + "{actor} added {phone}" : "{actor} a apondut {phone}", + "You added {phone}" : "Avètz apondut {phone}", + "{actor} promoted {user} to moderator" : "{actor} faguèt passar {user} moderator", + "You promoted {user} to moderator" : "Avètz fach passar {user} moderator", + "{actor} promoted you to moderator" : "{actor} vos faguèt passar moderator", + "An administrator promoted you to moderator" : "Un administrator vos faguèt passar moderator", + "An administrator promoted {user} to moderator" : "Un administrator faguèt passar {user} moderator", + "{actor} demoted {user} from moderator" : "{actor} retrogradèt {user} de l’estat de moderator", + "You demoted {user} from moderator" : "Avètz retrogradat {user} de l’estat de moderator", + "{actor} demoted you from moderator" : "{actor} vos retrogradèt de l’estat de moderator", + "An administrator demoted you from moderator" : "Un administrator vos retrogradèt de l’estat de moderator", + "An administrator demoted {user} from moderator" : "Un administrator retrogradèt {user} de l’estat de moderator", + "{actor} shared a file which is no longer available" : "{actor} partegèt un fichièr qu’es pas pus disponible", + "You shared a file which is no longer available" : "Partegèretz un fichièr qu'es pas pus disponible", + "The shared location is malformed" : "L’emplaçament partejat es mal format", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurèt Matterbridge per sincronizar aquesta conversacion amb d’autras discussions", + "You set up Matterbridge to synchronize this conversation with other chats" : "Avètz configurat Matterbridge per sincronizar aquesta conversacion amb d’autras discussions", + "{actor} updated the Matterbridge configuration" : "{actor} actualizèt la configuracion Matterbridge", + "You updated the Matterbridge configuration" : "Avètz actualizada la configuracion Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} suprimissèt la configuracion Matterbridge", + "You removed the Matterbridge configuration" : "Avètz suprimida la configuracion Matterbdrige", + "{actor} started Matterbridge" : "{actor} a lançat Matterbridge", + "You started Matterbridge" : "Avètz lançat Matterbridge", + "{actor} stopped Matterbridge" : "{actor} arrestèt Matterbridge", + "You stopped Matterbridge" : "Avètz arrestat Matterbridge", + "{actor} deleted a message" : "{actor} a suprimit un messatge", + "You deleted a message" : "Avètz suprimit un messatge", + "{actor} deleted a reaction" : "{actor} a suprimit una reaccion", + "You deleted a reaction" : "Avètz suprimit una reaccion", + "You disabled message expiration" : "Avètz desactivat l’expiracion dels messatges", + "{actor} cleared the history of the conversation" : "{actor} escafèt l'istoric de la conversacion", + "You cleared the history of the conversation" : "Avètz escafat l'istoric de la conversacion", + "You started the audio recording" : "Avètz lançat l'enregistrament àudio", + "You stopped the audio recording" : "Avètz arrestat l'enregistrament àudio", + "The recording failed" : "L'enregistrament a pas foncionat", + "Someone voted on the poll {poll}" : "Qualqu’un a votat dins lo sondatge {poll}", + "Message deleted by author" : "Messatge suprimit per son autor", + "Message deleted by {actor}" : "Messatge suprimit per {actor}", + "Message deleted by you" : "Messatge suprimit per vos", + "Deleted user" : "Utilizaire suprimit", + "Unknown number" : "Numèro desconegut", + "Administration" : "Administracion", + "%s (guest)" : "%s (convidat)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} acabèt la sonada amb %n convidat (Durada {duration})","{actor} acabèt la sonada amb %n convidats (Durada {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} acabèt la sonada amb {user1} (Durada {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} acabèt la sonada amb {user1} e {user2} (Durada {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2} e {user3} (Durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2}, {user3} e {user4} (Durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2}, {user3}, {user4} {user5} (Durada {duration})", + "Message of {user} in {conversation}" : "Messatge de {user} dins {conversation}", + "Message of {user}" : "Messatge de {user}", + "Message of a deleted user in {conversation}" : "Messatge d'un utilizaire suprimit dins {conversation}", + "Talk conversations" : "Conversacions Talk", + "Talk to %s" : "Parlar a %s", + "File not found" : "Fichièr pas trobat", + "File is not shared, or shared but not with the user" : "Fichièr pas partejat, o partejat mas pas a l’utilizaire", + "No account available to delete." : "Cap de compte pas disponible per la supression.", + "Poll" : "Sondatge", + "No image file provided" : "Cap de fichièr imatge provesit", + "File is too big" : "Fichièr tròp pesuc", + "Invalid file provided" : "Fichièr provesit invalid", + "Invalid image" : "Imatge invalid", + "Unknown filetype" : "filetype desconegut", + "Talk mentions" : "Mencions Talk", + "Say hi to your friends and colleagues!" : "Saludatz vòstres amics e collègas !", + "No unread mentions" : "Cap de mencion pas legida", + "Call in progress" : "Sonada en cors", + "You were mentioned" : "Qualqu’un vos a mencionat", + "Write to conversation" : "Escriure dins la conversacion", + "Conversation invitation" : "Convit de conversacion", + "Description" : "Descripcion", + "Dial-in information" : "Entresenhas de sonada", + "Meeting ID" : "Identificant reünion", + "Your PIN" : "Vòstre còdi", + "Meeting" : "Reünion", + "Password request: %s" : "Senhal requerit : %s", + "Private conversation" : "Conversacion privada", + "Deleted user (%s)" : "Utilizaire suprimit (%s)", + "Dismiss notification" : "Ignorar la notificacion", + "Call recording now available" : "L'enregistrament de sonada es ara disponible", + "Accept" : "Acceptar", + "Decline" : "Declinar", + "Reminder" : "Recòrd", + "Notification" : "Notificacion", + "{user} reacted with {reaction}" : "{user} a reagit amb {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a reagit amb {reaction} dins {call}", + "{user} in {call}" : "{user} dins {call}", + "Deleted user in {call}" : "Utilizaire suprimit dins {call}", + "{guest} (guest) in {call}" : "{guest} (convidat) dins {call}", + "Guest in {call}" : "Convidat dins {call}", + "{user} sent you a private message" : "{user} vos a enviat un messatge privat", + "{user} sent a message in conversation {call}" : "{user} a enviat un messatge dins la conversacion {call}", + "A deleted user sent a message in conversation {call}" : "Un utilizaire suprimit vos envièt un messatge dins la conversacion {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (convidat) mandèt un messatge dins la conversacion {call}", + "A guest sent a message in conversation {call}" : "Un convidat a enviat un messatge dins la conversacion {call}", + "{user} replied to your private message" : "{user} a respondut a vòstre messatge privat", + "{user} replied to your message in conversation {call}" : "{user} a respondut a vòstre messatge dins la conversacion {call}", + "A deleted user replied to your message in conversation {call}" : "Un utilizaire suprimit a respondut a vòstre messatge dins la conversacion {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidat) respondèt a vòstre messatge dins la conversacion {call}", + "A guest replied to your message in conversation {call}" : "Un convidat respondèt a vòstre messatge dins la conversacion {call}", + "{user} reacted with {reaction} to your private message" : "{user} a reagit amb {reaction} a vòstre messatge privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utilizaire suprimit a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidat) a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidat a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "{user} mentioned you in a private conversation" : "{user} vos mencionèt dins una conversacion privada", + "{user} mentioned you in conversation {call}" : "{user} vos a mencionat dins la conversacion {call}", + "A deleted user mentioned you in conversation {call}" : "Un utilizaire suprimit vos a mencionat dins la conversacion {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (convidat) vos a mencionat dins la conversacion {call}", + "A guest mentioned you in conversation {call}" : "Un convidat vos a mencionat dins la conversacion {call}", + "View message" : "Veire lo messatge", + "View chat" : "Veire lo chat", + "{user} invited you to a group conversation: {call}" : "{user} vos a convidat a un conversacion de grop : {call}", + "Join call" : "Rejónher la sonada", + "Answer call" : "Respondre a l’apèl", + "{user} would like to talk with you" : "{user} volriá vos parlar", + "Call back" : "Tornar", + "You missed a call from {user}" : "Avètz mancat una sonada de {user}", + "A group call has started in {call}" : "Una sonada de grop a començat dins {call}", + "You missed a group call in {call}" : "Avètz mancat una sonada de grop dins {call}", + "{email} is requesting the password to access {file}" : "{email} demanda l’accès al fichièr {file}", + "{email} tried to request the password to access {file}" : "{email} ensagèt de demandar lo senhal per accedir a {file}", + "Someone is requesting the password to access {file}" : "Qualqu’un demanda lo senhal per accedir a {file}", + "Someone tried to request the password to access {file}" : "Qualqu’un ensagèt de demandar lo senhal per accedir a {file}", + "Open settings" : "Dobrir los paramètres", + "The hosted signaling server is now configured and will be used." : "Lo servidor de senhalament albergat es ara configurat e serà utilizat.", + "pending" : "pendent", + "active" : "actiu", + "expired" : "expirat", + "blocked" : "blocat", + "error" : "error", + "Contact via Talk" : "Contactar via Talk", + "Open Talk" : "Dobrir la conversacion", + "Default" : "Defaut", + "Presentation" : "Presentacion", + "Conversations" : "Discussions", + "Messages in current conversation" : "Messatge de la conversacion actuala", + "{user}" : "{user}", + "Messages" : "Messatges", + "{user} in {conversation}" : "{user} dins {conversation}", + "Messages in other conversations" : "Messatges dins autras conversacions", + "Invalid emoji character" : "Caractèr d'emoji invalid", + "Invalid background color" : "Color de rèireplan invalida", + "Room {number}" : "Sala {number}", + "Other" : "Autre", + "Something unexpected happened." : "Quicòm d’inesperat s’es produch.", + "The URL is invalid." : "L’URL es invalida.", + "An HTTPS URL is required." : "Una URL HTTPS es requerida.", + "The email address is invalid." : "L’adreça email es invalida.", + "The language is invalid." : "La lenga es invalida.", + "The country is invalid." : "Lo país es invalid.", + "Too many requests are send from your servers address. Please try again later." : "Tròp de requèstas enviadas de vòstras adreça de servidor. Ensajatz mai tard.", + "Something unexpected happened. Please try again later." : "Quicòm d’inesperat s’es produch. Volgatz ensajar mai tard.", + "There is no such account registered." : "Cal de tal compte pas enregistrat.", + "Too many requests are sent from your servers address. Please try again later." : "Tròp de requèstas enviadas de vòstras adreça de servidor. Ensajatz mai tard.", + "Andorra" : "Andòrra", + "United Arab Emirates" : "Emirats Arabis Units", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angòla", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "Amèrica, nord", + "Austria" : "Austria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Illas Åland", + "Azerbaijan" : "Azerbaitjan", + "Bosnia and Herzegovina" : "Bòsnia e Ercegovina", + "Barbados" : "Barbada", + "Bangladesh" : "Bangladèsh", + "Belgium" : "Bèlgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Barein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sant Bartomieu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Sultanat de Brunei", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Botan", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorusia", + "Belize" : "Belize", + "Canada" : "Canadà", + "Cocos (Keeling) Islands" : "Illas Cocos (Keeling)", + "Central African Republic" : "Centrafrica", + "Congo" : "Congò", + "Switzerland" : "Soïssa", + "Côte d'Ivoire" : "Còsta d'Evòri", + "Cook Islands" : "Illas Cook", + "Chile" : "Chile", + "Cameroon" : "Cameron", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Còsta Rica", + "Cuba" : "Cubà", + "Cabo Verde" : "Cap Verd", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Cristmas", + "Cyprus" : "Chipre", + "Czechia" : "Republica Chèca", + "Germany" : "Alemanha", + "Djibouti" : "Jiboti", + "Denmark" : "Danemarc", + "Dominica" : "Dominica", + "Dominican Republic" : "Republica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Eqüator", + "Estonia" : "Estònia", + "Egypt" : "Egipte", + "Western Sahara" : "Sahara occidental", + "Eritrea" : "Eritrèa", + "Spain" : "Espanha", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Illas Maldivas", + "Micronesia, Federated States of" : "Micronesia, Estats Federats de", + "Faroe Islands" : "Illas Feròe", + "France" : "França", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Reialme Unit de Grand Bretanha e d’Irlanda del Nòrd", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana francesa", + "Guernsey" : "Alemanya", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambia", + "Guinea" : "Guinèa", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinèa Eqüatoriala", + "Greece" : "Grèça", + "South Georgia and the South Sandwich Islands" : "Georgia del Sud e las illas Sandwich del Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinèa-Bissau", + "Guyana" : "Guianà", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illas de Heard e McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croacia", + "Haiti" : "Aïtí", + "Hungary" : "Ongria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Territòris britanics de l'ocean indian", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Islàndia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaïca", + "Jordan" : "Jordan", + "Japan" : "Japon", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirghizstan", + "Cambodia" : "Cambòtja", + "Kiribati" : "Kiribati", + "Comoros" : "Comòras", + "Saint Kitts and Nevis" : "Sant Kitts e Nevis", + "Korea, Democratic People's Republic of" : "Corèa, Republica Populara Democratica de", + "Korea, Republic of" : "Corea", + "Kuwait" : "Koweit", + "Cayman Islands" : "Illas Caiman", + "Kazakhstan" : "Cazacstan", + "Lao People's Democratic Republic" : "Laòs", + "Lebanon" : "Lebanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituània", + "Luxembourg" : "Luxemborg", + "Latvia" : "Letònia", + "Libya" : "Libia", + "Morocco" : "Marròc", + "Monaco" : "Monegue", + "Moldova, Republic of" : "Moldàvia", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sant Martin (francés)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illas Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Kanu", + "Northern Mariana Islands" : "Illas Marianas del Nòrd", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurici", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "Mexic", + "Malaysia" : "Malàisia", + "Mozambique" : "Moçambic", + "Namibia" : "Namibia", + "New Caledonia" : "Nòva Caledònia", + "Niger" : "Nigèr", + "Norfolk Island" : "Norfòlk, Illa", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holanda", + "Norway" : "Norvègia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Novèla Zelanda", + "Oman" : "Oman", + "Panama" : "Panamà", + "Peru" : "Peru", + "French Polynesia" : "Polinesia francesa", + "Papua New Guinea" : "Papoa-Nòva Guinèa", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistan", + "Poland" : "Polonha", + "Saint Pierre and Miquelon" : "Sant Pèire e Miquelon", + "Pitcairn" : "Illas Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Estat de Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "La Reünion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federacion russa", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Illas Salomon", + "Seychelles" : "Seichèlas", + "Sudan" : "Sodan", + "Sweden" : "Suècia", + "Singapore" : "Singapor", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard e illa Jan Mayen", + "Slovakia" : "Eslòvac", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Sant Marin", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sodan del Sud", + "Sao Tome and Principe" : "São Tomé e Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sant Martin (part neerlandesa)", + "Syrian Arab Republic" : "Siria", + "Turks and Caicos Islands" : "Illas Turcas e Caïcas", + "Chad" : "Chad", + "French Southern Territories" : "Tèrras australas francesas", + "Togo" : "Tògo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tatgiquistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tònga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinitat e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Província de China", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ucraïna", + "Uganda" : "Oganda", + "United States Minor Outlying Islands" : "Illas menoras aluenhadas dels Estats Units d'America", + "United States of America" : "Estats Units d'America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Ozbequistan", + "Holy See" : "Santa Ses", + "Saint Vincent and the Grenadines" : "Sant Vincenç e las Grenadinas", + "Venezuela, Bolivarian Republic of" : "República Bolivariana de Venezuela", + "Virgin Islands, British" : "Illas Verges Britanicas", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Vinyes", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemèn", + "Mayotte" : "Maiòta", + "South Africa" : "Sudafrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Error: Cannot connect to server" : "Error : connexion impossibla al servidor", + "Error: Server did not respond with proper JSON" : "Error: lo servidor a pas respondut amb un JSON corrèct", + "Could not get version" : "Obtencion impossibla de la version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error  : execucion de la version {version}, lo servidor requerís una actualizacion per èsser compatible amb aquesta version de Talk", + "Error: Server responded with: {error}" : "Error : lo servidor a respondut : {error}", + "Error: Unknown error occurred" : "Error : una error desconeguda s'es produsida", + "SIP configuration" : "Configuracion SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Invalida data, lo format de data deu èsser YYYY-MM-DD", + "Conversation not found" : "Conversacion pas trobada", + "Chat, video & audio-conferencing using WebRTC" : "Messatjariá, conferéncias vidèo e àudio amb WebRTC", + "Leave call" : "Quitar la sonada", + "Stay in call" : "Demorar en linha", + "Discuss this file" : "Discutir d’aqueste fichièr", + "Share this file with others to discuss it" : "Partejar aqueste fichièr amb d’autres per ne discutir", + "Share this file" : "Partejar aqueste fichièr", + "Join conversation" : "Rejónher la conversacion", + "The password is wrong. Try again." : "Lo senhal es incorrècte. Ensajatz tornamai.", + "Password" : "Senhal", + "Submit" : "Transmetre", + "Error requesting the password." : "Error en demandant lo senhal.", + "Request password" : "Demandar senhal", + "This conversation has ended" : "La conversacion es acabada", + "Close Talk sidebar" : "Tampar la barra laterala de Talk", + "Open Talk sidebar" : "Dobrir la barra laterala de Talk", + "Everyone" : "Tot lo monde", + "Users and moderators" : "Utilizaires e moderators", + "Moderators only" : "Moderators solament", + "Save changes" : "Salvar los cambiaments", + "Saving …" : "Enregistrament…", + "Saved!" : "Enregistrat", + "Limit to groups" : "Limitar als grops", + "Guests can still join public conversations." : "Los convidats pòdon encara rejónher las conversacions publicas.", + "Limit using Talk" : "Limits d’utilizacion de Talk", + "Limit creating a public and group conversation" : "Limitar la creacion de grops e publicas de conversacions", + "Limit creating conversations" : "Limitar la creacion de conversacions", + "Limit starting a call" : "Limitar l’aviada de sonada", + "Enabled" : "Activada", + "Disabled" : "Desactivat", + "Name" : "Nom", + "Beta" : "Bèta", + "Permissions" : "Autorizacions", + "All messages" : "Totes los messatges", + "@-mentions only" : "@-mencions sonque", + "Off" : "Atudat", + "General settings" : "Paramètres generals", + "Default notification settings" : "Paramètres de notificacion per defaut", + "Default group notification" : "Notificacion de grop per defaut", + "Integration into other apps" : "Integracion dins d’autras aplicacions", + "Allow conversations on files" : "Permetre las conversacions suls fichièrs", + "Allow conversations on public shares for files" : "Permetre las conversacions suls partiment de fichièrs", + "Enable encryption" : "Activar lo chiframent", + "Pending" : "En espèra", + "Error" : "Error", + "Blocked" : "Blocat", + "Active" : "Activa", + "Expired" : "Expirat", + "Never" : "Jamai", + "URL of this Nextcloud instance" : "URL d’aquesta instància Nextcloud", + "Email of the user" : "Email de l’utilizaire", + "Language" : "Lenga", + "Country" : "País", + "Status" : "Estatut", + "Created at" : "Creat lo", + "Expires at" : "Expira lo", + "Limits" : "Limits", + "Yes" : "Òc", + "No" : "Non", + "_%n user_::_%n users_" : ["%n utilizaire","%n utilizaires"], + "Installed version: {version}" : "Version installada : {version}", + "Downloading …" : "Telecargament…", + "Install Talk Matterbridge" : "Installar Talk Matterbridge", + "Matterbridge integration" : "Integracion Matterbridge", + "Enable Matterbridge integration" : "Activar l’integracion Matterbridge", + "Status: Checking connection" : "Estat : verificacion de la connexion", + "OK: Running version: {version}" : "OK : execucion de la version : {version}", + "Validate SSL certificate" : "Validar lo certificat SSL", + "Delete this server" : "Suprimir aqueste servidor", + "Test this server" : "Ensajar aqueste servidor", + "Shared secret" : "Secret partejat", + "Recording consent" : "Consentiment d’enregistrament", + "Enable SIP configuration" : "Activar la configuracion SIP", + "Phone number (Country)" : "Numèro de telefòn (País)", + "STUN server URL" : "URL servidor STUN", + "The server address is invalid" : "L'adreça del servidor es invalida", + "STUN servers" : "Servidors STUN", + "{schema} scheme must be used with a domain" : "l’esquèma {schema} deu èsser utilizat amb un domeni", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} sonque", + "TURN server schemes" : "Esquèmas servidor TURN", + "TURN server URL" : "URL servidor TURN", + "TURN server secret" : "Secrèt servidor TURN", + "TURN server protocols" : "Protocòls servidor TURN", + "TURN servers" : "Servidor TURN", + "Failed" : "Fracàs", + "OK" : "D’acòrdi", + "Checking …" : "Verificacion…", + "Web server setup checks" : "Verificacions de configuracion del servidor Web", + "Confirm" : "Confirmar", + "Reset" : "Reïnicializar", + "Cancel" : "Anullar", + "Back" : "Retorn", + "Add participant \"{user}\"" : "Apondre participant « {user} »", + "Loading …" : "Cargament…", + "From" : "De", + "Calendar" : "Calendièr", + "Attendees" : "Convidats", + "Save" : "Salvar", + "Search participants" : "Cercar participants", + "No results" : "Pas cap de resultat", + "Raise hand" : "Levar la man", + "Raise hand (R)" : "Levar la man (R)", + "Lower hand" : "Baissar la man", + "Lower hand (R)" : "Baissar la man (R)", + "Exit full screen (F)" : "Sortir de l'ecran complèt (F)", + "Full screen (F)" : "Ecran complèt (F)", + "Speaker view" : "Vista parlaire", + "Grid view" : "Vista en grasilha", + "This conversation is read-only" : "Aquesta conversacion es en lectura sola", + "Reload" : "Recargar", + "{nickName} raised their hand." : "{nickName} a levat la man.", + "A participant raised their hand." : "Un participant a levat la man.", + "Previous page of videos" : "Pagina de vidèos precedenta", + "Next page of videos" : "Pagina de vidèos seguenta", + "Connecting …" : "Connexion…", + "Calling …" : "Sonada...", + "Waiting for {user} to join the call" : "En espèra de {user} dins la sonada", + "Waiting for others to join the call …" : "En espèra que d’autres arriben…", + "You can invite others in the participant tab of the sidebar" : "Podètz convidar d’autre monde amb l’onglet dels participants de la barra laterala", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podètz convidar d’autre monde amb l’onglet dels participants de la barra laterala o partejar aqueste ligam per los convidar !", + "Share this link to invite others!" : "Partejatz aqueste ligam per convidar mai de monde !", + "Copy link" : "Copiar lo ligam", + "You are not allowed to enable audio" : "Avètz pas l'autorizacion per activar l’àudio", + "No audio. Click to select device" : "Cap d'àudio. Clicatz per seleccionar un periferic", + "Mute audio" : "Copar lo son", + "Mute audio (M)" : "Copar lo son (M)", + "Unmute audio" : "Restablir lo son", + "Unmute audio (M)" : "Restablir lo son (M)", + "None" : "Pas cap", + "Access to camera was denied" : "L’accès a la camèra es estat refusat", + "Error while accessing camera: It is likely in use by another program" : "Error d’accès a la camèra : poiriá arribar qu’un autre programa l’utilize", + "Error while accessing camera" : "Error pendent l’accès a la camèra", + "You have been muted by a moderator" : "Un moderator vos a amudit", + "You are not allowed to enable video" : "Avètz pas l'autorizacion per activar la vidèo", + "No video. Click to select device" : "Cap de vièoa. Clicatz per seleccionar un periferic", + "Disable video" : "Desactivar la vidèo", + "Disable video (V)" : "Desactivar la vidèo (V)", + "Enable video" : "Activar la vidèo", + "Enable video (V)" : "Activar la vidèo (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar la vidèo (V) - La connexion serà interrompuda brèvament pendent l’activacion de la vidèo pel primièr còp", + "Show presenter" : "Mostrar lo presentator", + "You" : "Vos", + "Mute" : "Mut", + "Show screen" : "Far veire l’ecran", + "Stop following" : "Quitar de seguir", + "Connection could not be established …" : "Establiment impossible de la connexion…", + "Connection was lost and could not be re-established …" : "Connexion perduda e restabliment impossibla…", + "Connection could not be established. Trying again …" : "Establiment impossible… Novèl ensag…", + "Connection lost. Trying to reconnect …" : "Connexion perduda. Ensag de reconnexion…", + "Connection problems …" : "Problèmas de connexion…", + "Collapse" : "Replegar", + "You need to be logged in to upload files" : "Devètz èsser autentificat per enviar de fichièrs", + "Drop your files to upload" : "Depausatz los fichièrs d’enviar", + "Conversation messages" : "Messatges de conversacion", + "Scroll to bottom" : "Defilar enbàs", + "Post message" : "Publicar messatge", + "Favorite" : "Favorit", + "Date:" : "Data :", + "Hide details" : "Amagar detalhs", + "Show details" : "Mostrar detalhs", + "Error while updating conversation description" : "Error pendent l’actualizacion de la descripcion de la conversacion", + "Edit conversation name" : "Modificar lo nom de la conversacion", + "Edit conversation description" : "Editar la descripcion de la conversacion", + "Enter a description for this conversation" : "Picatz una descripcion per aquesta conversacion", + "Picture" : "Imatge", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Choose your conversation picture" : "Causissètz un imatge de conversacion", + "Choose" : "Causir", + "Set picture" : "Definir l'imatge", + "Default permissions modified for {conversationName}" : "Permissions per defaut modificadas per {conversationName}", + "Could not modify default permissions for {conversationName}" : "Las permissions per defaut se podiá pas modificar {conversationName}", + "All permissions" : "Totas las permissions", + "Restricted" : "Restrencha", + "Advanced permissions" : "Permissions avançadas", + "Edit permissions" : "Modificar las autorizacions", + "Conversation settings" : "Paramètres de conversacion", + "Personal" : "Personal", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zòna perilhosa", + "Leave conversation" : "Quitar la conversacion", + "Delete conversation" : "Suprimir la conversacion", + "Do you really want to delete \"{displayName}\"?" : "Volètz vertadièrament suprimir « {displayName} » ?", + "Error while deleting conversation" : "Error pendent la supression de la conversacion", + "Delete all chat messages" : "Suprimir totes los messatges del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Volètz vertadièrament suprimir totes los messatges dins « {displayName} » ?", + "Error while clearing chat history" : "Error pendent l’escafament de l’istoric del chat", + "Be careful, these actions cannot be undone." : "Fasètz atencion, aquelas accions pòdon pas èsser anulladas.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Un còp quitada, per tornar a un conversacion tampada, cal un convit. Una conversacion dubèrta es totjorn accessibla.", + "Permanently delete this conversation." : "Suprimir permanent aquesta conversacion", + "Delete chat messages" : "Suprimir los messatges del chat", + "Permanently delete all the messages in this conversation." : "Suprimir per totjorn totes los messatges d’aquesta conversacion.", + "_%n hour_::_%n hours_" : ["%n ora","%n oras"], + "_%n day_::_%n days_" : ["%n jorn","%n jorns"], + "_%n week_::_%n weeks_" : ["%n setmana","%n setmanas"], + "Guest access" : "Accès convidat", + "Password protection" : "Protegir via senhal", + "Set a password" : "Definir lo senhal", + "Enter new password" : "Picar un senhal novèl", + "Save password" : "Enregistrar lo senhal", + "Resend invitations" : "Tornar enviar las invitacions", + "Error occurred when opening or limiting the conversation" : "Error en dobrissent o limitant la conversacion", + "Open conversation" : "Dobrir la conversacion", + "Start time has been updated" : "L'ora de debuta es estada actualizada", + "Error occurred while updating start time" : "Error pendent la mesa a jorn de l’ora de debuta", + "Meeting start time" : "Ora de debuta de la conferéncia", + "Start time (optional)" : "Ora de debuta (opcional)", + "Error occurred when locking the conversation" : "Error pendent lo verrolhatge de la conversacion", + "Error occurred when unlocking the conversation" : "Error pendent lo desverrolhatge de la conversacion", + "Lock conversation" : "Verrolhar la conversacion", + "This will also terminate the ongoing call." : "Aquò acabarà tanben la sonada en cors.", + "Edit" : "Modificar", + "More information" : "Mai d’informacions", + "Delete" : "Suprimir", + "unknown state" : "estat desconegut", + "running" : "en cors d'execucion", + "not running" : "pas en execucion", + "Bridge saved" : "Pont enregistrat", + "More info on Matterbridge" : "Mai d’info sus Matterbridge", + "Enable bridge" : "Activar lo pont", + "Show Matterbridge log" : "Veire los jornals de Matterbridge", + "Notifications" : "Notificacions", + "Notify about calls in this conversation" : "Notificar las sonadas d’aquesta conversacion", + "Recording Consent" : "Consentiment d'enregistrament", + "Join" : "Rejónher", + "Error while creating the conversation" : "Error pendent la creacion de la conversacion", + "Create a new conversation" : "Crear una conversacion novèla", + "Unread mentions" : "Mencions pas legidas", + "Create conversation" : "Crear conversacion", + "Enter your name" : "Picatz vòstre nom", + "Log in" : "Connexion", + "Creating the conversation …" : "Creacion de la conversacion...", + "Mark as read" : "Marcar coma legit", + "Mark as unread" : "Marcar coma pas legit", + "Remove from favorites" : "Tirar dels favorits", + "Add to favorites" : "Apondre als favorits", + "Conversation actions" : "Accions de conversacion", + "Alphabetically" : "Alfabeticament", + "No matches found" : "Cap de correspondéncia pas trobada", + "No conversations found" : "Cap de conversacion pas trobada", + "You have no unread messages." : "Avètz un messatge pas legit.", + "An error occurred while performing the search" : "Una error s'es producha en realizant la recèrca", + "Conversation list" : "Lista de conversacion", + "Unread messages" : "Messatges pas legits", + "Clear filters" : "Escafar los filtres", + "App settings" : "Paramètres d’aplicacion", + "Users" : "Utilizaires", + "Groups" : "Gropes", + "Other sources" : "Autras fonts", + "Open conversations" : "Dobrir las conversacions", + "No search results" : "pas cap de resultats de recèrca", + "Users and groups" : "Utilizaires e grops", + "The meeting will start soon" : "La conferéncia començarà lèu", + "This meeting is scheduled for {startTime}" : "La conferéncia es planificada per {startTime}", + "You are currently waiting in the lobby" : "Sètz a esperar dins la sala d’espèra", + "Select microphone" : "Causir microfòn", + "No microphone available" : "Cap de microfòn pas disponible", + "Select camera" : "Causir una camèra", + "No camera available" : "Cap de camèra pas disponibla", + "Devices" : "Periferics", + "Backgrounds" : "Rèireplans", + "No audio" : "Cap d’àudio", + "No camera" : "Cap de camèra", + "Calls are not supported in your browser" : "Vòstre navegador pren pas encarga las sonadas", + "Access to microphone is only possible with HTTPS" : "L’accès al microfòn es sonque possibla amb HTTPS", + "Access to microphone was denied" : "L’accès al microfòn es estat refusat", + "Error while accessing microphone" : "Error pendent l’accès al microfòn", + "Access to camera is only possible with HTTPS" : "L’accès a la camèra es sonque possibla amb HTTPS", + "Invalid path selected" : "Camin seleccionat invalid", + "Upload" : "Cargament", + "Files" : "Fichièrs", + "24 hours" : "24 oras", + "7 days" : "7 jorns", + "Add a reaction to this message" : "Apondre una reaccion a aqueste messatge", + "Reply" : "Respondre", + "More actions" : "Mai d’accions", + "Reply privately" : "Respondre en privat", + "Copy message link" : "Copiar ligam messatge", + "Go to file" : "Anar al fichièr", + "Forward message" : "Transferir lo messatge", + "Translate" : "Tradurre", + "Close reactions menu" : "Tampar lo menú de reaccions", + "React with {emoji}" : "Reagir amb {emoji}", + "React with another emoji" : "Reagir amb un autre emoji", + "Choose a conversation to forward the selected message." : "Causir una conversacion destinària del messatge seleccionat.", + "Error while forwarding message" : "Error en transferissent lo messatge", + "The message has been forwarded to {selectedConversationName}" : "Lo messatge es estat transferit a {selectedConversationName}", + "Dismiss" : "Regetar", + "Go to conversation" : "Anar a la conversacion", + "Translate message" : "Traduire lo messatge", + "Translating" : "Traduccion", + "Message read by everyone who shares their reading status" : "Messatge legit per tot lo monde que partejan lo estatut de lectura", + "Message sent" : "Messatge mandat", + "Deleting message" : "Supression del messatge", + "Message deleted successfully" : "Messatge corrèctament suprimit", + "Message could not be deleted because it is too old" : "Lo messatge a pas pogut èsser suprimit perque es tròp ancian", + "Only normal chat messages can be deleted" : "Sonque los messatges de chat normal pòdon èsser suprimits", + "An error occurred while deleting the message" : "Error pendent la supression del messatge", + "Your browser does not support playing audio files" : "Vòstre navegador pren pas en carga la lectura dels fichièrs àudio", + "Contact" : "Contacte", + "{stack} in {board}" : "{stack} dins {board}", + "Remove {fileName}" : "Suprimir {fileName}", + "Open this location in OpenStreetMap" : "Dobrir aquesta posicion dins OpenStreetMap", + "Sending message" : "Mandadís del messatge", + "Failed to send the message. Click to try again" : "Mandadís del messatge impossible. Clicatz per tornar ensajar", + "Not enough free space to upload file" : "Pas pro d’espaci liure per enviar lo fichièr", + "You cannot send messages to this conversation at the moment" : "Podètz pas enviar de messatges a aquesta conversacion pel moment", + "Open poll" : "Dobrir lo sondatge", + "See results" : "Veire los resultats", + "No messages" : "Cap de messatge", + "Cancel search" : "Anullar la recèrca", + "Add a phone number" : "Apondre un numèro de telefòn", + "Create a new group conversation" : "Crear una conversacion de grop novèla", + "Add participants" : "Apondre participants", + "Conversation visibility" : "Visibilitat de la conversacion", + "Allow guests to join via link" : "Permetre als convidats de rejónher via ligam", + "Enter password" : "Picar lo senhal", + "This conversation has been locked" : "Aquesta conversacion foguèt clavada", + "Joining conversation …" : "Dintra dins la conversacion…", + "Send message" : "Enviar un messatge", + "File to share" : "Fichièr de partejar", + "Add emoji" : "Apondre emoji", + "Cancel editing" : "Anullar la modificacion", + "Share from Files" : "Partejar a partir dels Fichièrs", + "Share files to the conversation" : "Partejar de fichièrs dins la conversacion", + "Record voice message" : "Enregistrar messatge vocal", + "End recording and send" : "Acabar àudio e enviar", + "Dismiss recording" : "Anullar l’enregistrament", + "Access to the microphone was denied" : "L’accès al microfòn es estat refusat", + "Microphone either not available or disabled in settings" : "Microfòn siá indisponible o desactivat dins los paramètres", + "Error while recording audio" : "Error en enregistrant l’àudio", + "New file" : "Fichièr novèl", + "Create file" : "Crear un fichièr", + "Someone is typing …" : "Qualqu’un pica...", + "{user1} is typing …" : "{user1} pica…", + "{user1} and {user2} are typing …" : "{user1} e {user2} pican…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} pican…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n autre pican…","{user1}, {user2}, {user3} e %n autres pican…"], + "Add more files" : "Apondre mai de fichièrs", + "Send" : "Mandar", + "In this conversation {user} can:" : "Dins aquesta conversacion {user} pòt :", + "Edit default permissions for participants in {conversationName}" : "Modificar las permissions per defaut dels participants dins {conversationName}", + "Start a call" : "Començar una sonada", + "Skip the lobby" : "Passar la sala d’espèra", + "Enable the microphone" : "Activar lo microfòn", + "Enable the camera" : "Activar la camèra", + "Share the screen" : "Partejar l’ecran", + "Update permissions" : "Actualizar las autorizacions", + "Updating permissions" : "Actualizacion de las permissions", + "Create poll" : "Crear un sondatge", + "Question" : "Question", + "Ask a question" : "Pausar una question", + "Answers" : "Responsas", + "Answer {option}" : "Responsa {option}", + "Delete poll option" : "Suprimir l’opcion de sondatge", + "Add answer" : "Apondre responsa", + "Settings" : "Paramètres", + "Multiple answers" : "Multi responsas", + "End poll" : "Terminar lo sondatge", + "Change your vote" : "Cambiar lo vòt", + "Stop session" : "Arrestar la session", + "Disable lobby" : "Desactivar la sala d’espèra", + "Settings for participant \"{user}\"" : "Paramètres pel participant « {user} »", + "Participant \"{user}\"" : "Participant « {user} »", + "moderator" : "moderator", + "bot" : "robòt", + "guest" : "convidat", + "Raised their hand" : "Levèt la man", + "Joined with video" : "Rejonhèt amb vidèo", + "Joined via phone" : "Rejonhèt via telefòn", + "Joined with audio" : "Rejonhèt amb l’àudio", + "Remove group and members" : "Levar de grops e membres", + "Remove participant" : "Tirar participant", + "Permissions granted to {displayName}" : "Autorizacions acordadas a {displayName}", + "Permissions removed for {displayName}" : "Permissions suprimidas per {displayName}", + "Permissions set to default for {displayName}" : "Permissions definidas a defaut per {displayName}", + "Resend invitation" : "Renviar invitacion", + "Reset custom permissions" : "Reïnicializar las permissions personalizadas", + "Remove all permissions" : "Suprimir totas las permissions", + "Remove" : "Suprimir", + "Permissions modified for {displayName}" : "Permissions modificadas per {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Apondre utilizaires", + "Add groups" : "Apondre grops", + "Add other sources" : "Apondre d'autras fonts", + "Add emails" : "Apondre emails", + "Integrations" : "Integracions", + "Add federated users" : "Apondre d’utilizaires federats", + "Searching …" : "Recèrca…", + "Search for more users" : "Cercar mai d’utilizaires", + "Search or add participants" : "Cercar o apondre participants", + "An error occurred while adding the participants" : "Una error s’es producha en ajustant los participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "You have new unread messages in the chat." : "Avètz un messatge pas legit al chat.", + "You have been mentioned in the chat." : "Qualqu’un vos a mencionat al chat.", + "Chat" : "Messatjariá", + "Details" : "Detalhs", + "Shared items" : "Elements partejats", + "Load more results" : "Cargar mai de resultats", + "Projects" : "Projèctes", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Ligam cap a la conversacion", + "Search conversations or users" : "Cercar de conversacions o utilizaires", + "Select conversation" : "Seleccionar una conversacion", + "Number length is not valid" : "La longor del numèro de telefòn es invalida", + "Region code is not valid" : "Lo còdi de region es invalida", + "Number length is too short" : "La longor del numèro es tròp corta", + "Number length is too long" : "La longor del numèro es tròp longa", + "Number is not valid" : "Lo numèro es pas valid", + "Phone numbers" : "Numèros de telefòn", + "Display name: {name}" : "Nom d’afichatge : {name}", + "Save name" : "Enregistrar lo nom", + "Error while saving sounds setting" : "Error en enregistrant lo paramètre de son", + "Play sounds when participants join or leave a call" : "Emetre sons quand los participants rejonhon o quitan una sonada", + "Notification settings" : "Paramètres de notificacions", + "Default language" : "Lenga per defaut", + "Select location for attachments" : "Causir un emplaçament per las pèças juntas", + "Error while setting attachment folder" : "Error pendent la definicion del dossièr de pèça junta", + "Error while setting read status privacy" : "Error lor de definicion de la confidencialitat de l'estatut", + "Privacy" : "Confidencialitat", + "Attachments folder" : "Dossièr de pèças-juntas", + "Toggle full screen" : "Alternar ecran complèt", + "Search" : "Search", + "Shortcuts while in a call" : "Acorchis pendent una sonada", + "Camera on and off" : "Vidèo activada/desactivada", + "Microphone on and off" : "Microfòn activat/desactivat", + "Raise or lower hand" : "Levar o baissar la man", + "Push to talk or push to mute" : "Tocar per parlar o tocar per copar lo son", + "Start call silently" : "Començar la sonada en silenci", + "Start call" : "Començar sonada", + "End call" : "Acabar la sonada", + "You will be able to join the call only after a moderator starts it." : "Poiretz sonque participar a la sonada un còp qu'un moderator l'aja començada.", + "End call for everyone" : "Acabar la sonada per totes", + "Starting the recording" : "L'enregistrament comença", + "Recording" : "Enregistrament", + "Stop recording" : "Arrestar l'enregistrament", + "Send a reaction" : "Enviar una reaccion", + "React with {reaction}" : "Reagir amb {reaction}", + "You are not allowed to enable screensharing" : "Avètz pas l'autorizacion per activar lo partiment d’ecran", + "No screensharing" : "Cap de partiment d’ecran", + "Screensharing options" : "Opcion de partiment d’ecran", + "Enable screensharing" : "Activar lo partiment d’ecran", + "Bad sent video and screen quality." : "Marrida vidèo enviada e qualitat d’ecran.", + "Bad sent screen quality." : "Marrida qualitat d’ecran enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo pendent un partiment d’ecran.", + "Disable background blur" : "Desactivar lo rèireplan trebol", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas. Per melhorar la situacion ensajatz de desactivar la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar lo partiment d’ecran.", + "Disable screenshare" : "Desactivar lo partiment d’ecran", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas. Per melhorar la situacion ensajatz de desactivar la vidèo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas.", + "Screen sharing is not supported by your browser." : "Vòstre navegador pren pas en carga lo partiment d’ecran.", + "Screen sharing requires the page to be loaded through HTTPS." : "Lo partiment d’ecran requerís que la pagina siá cargada via HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Lo partiment d’ecran requerís un cargament via HTTPS.", + "An error occurred while starting screensharing." : "S’es producha una error en aviant lo partiment d’ecran.", + "Show your screen" : "Partejar l’ecran", + "Stop screensharing" : "Arrestar partiment d’ecran", + "Mute others" : "Copar lo son dels autres", + "Start recording" : "Lançar l'enregistrament", + "Select a region" : "Seleccionatz una region", + "Search …" : "Recercar...", + "Message without mention" : "Messatge sens mencion", + "Mention myself" : "Me mencionar", + "The conversation does not exist" : "La conversacion existís pas", + "Join a conversation or start a new one!" : "Rejonhètz una conversacion o creatz-ne una !", + "Duplicate session" : "Duplicar la session", + "Join a conversation or start a new one" : "Rejónher una conversacion o ne crear una", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utilizaire Nextcloud", + "User password" : "Senhal utilizaire", + "Talk conversation" : "Conversacion Talk", + "Skip TLS verification" : "Passar la verificacion TLS", + "Matrix server URL" : "URL servidor Matrix", + "User" : "User", + "Matrix channel" : "Cadena Matrix", + "Mattermost server URL" : "URL servidor Mattermost", + "Mattermost user" : "Utilizaire Mattermost", + "Team name" : "Nom de la còla", + "Channel name" : "Nom de la cadena", + "Rocket.Chat server URL" : "URL del servidor Rocket.Chat", + "User name or email address" : "Nom d’utilizaire o adreça email", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL servidor Zulip", + "Bot user name" : "Nom d’utilizaire robòt", + "Bot API key" : "Clau d’API robòt", + "Zulip channel" : "Canal Zulip", + "API token" : "Geton API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "ID o nom del servidor", + "Channel" : "Cadena", + "Login" : "Login", + "Chat ID" : "ID del chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL servidor IRC (per exemple chat.freenode.net:6667)", + "Nickname" : "Escais", + "Connection password" : "Senhal de connexion", + "IRC channel" : "Cadena IRC", + "Channel password" : "Senhal de cadena", + "NickServ nickname" : "Nom d’utilizaire NickServ", + "NickServ password" : "Senhal NickServ", + "Use TLS" : "Utilizar TLS", + "Use SASL" : "Utilizar SASL", + "Tenant ID" : "ID Tenant", + "Client ID" : "ID client", + "Team ID" : "ID Team", + "Thread ID" : "ID fial", + "XMPP/Jabber server URL" : "URL servidor XMPP/Jabber", + "MUC server URL" : "URL servidor MUC", + "Jabber ID" : "ID Jabber", + "Media" : "Mèdia", + "Polls" : "Sondatges", + "Voice messages" : "Messatges àudio", + "Locations" : "Emplaçaments", + "Audio" : "Àudio", + "Show all media" : "Veire totes los mèdia", + "Show all files" : "Veire totes los fichièrs", + "Show all polls" : "Mostrar totes los sondatges", + "Show all voice messages" : "Veire totes los messatges àudio", + "Show all locations" : "Veire totes los emplaçaments", + "Show all call recordings" : "Mostrar los enregistraments de sonadas", + "Show all audio" : "Veire totes los àudios", + "Show all other" : "Veire tota la rèsta", + "Group" : "Grop", + "You: {lastMessage}" : "Vos : {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Leave this page" : "Quitar aquesta pagina", + "Join here" : "Rejónher aquí", + "Post to a conversation" : "Publicar dins una conversacion", + "Post to conversation" : "Publicar a la conversacion", + "An error occurred while posting location to conversation" : "Error en publicant la localizacion dins la conversacion", + "Share to a conversation" : "Partejar dins una conversacion", + "Share to conversation" : "Partejar dins una conversacion", + "Error while clearing conversation history" : "Error pendent escafament de l’istoric de la conversacion", + "Error occurred while allowing guests" : "Error en autorizant los convidats", + "Error occurred while disallowing guests" : "Error en autorizant pas mai los convidats", + "Error occurred when restricting the conversation to moderator" : "Error pendent la restriccion de la conversacion al moderator", + "Error occurred when opening the conversation to everyone" : "Error pendent la dubertura de la conversacion a tot lo monde", + "Conversation password has been saved" : "Lo senhal de conversacion es estat enregistrat", + "Conversation password has been removed" : "Lo senhal de conversacion es estat suprimit", + "Error occurred while saving conversation password" : "Error pendent l'enregistrament del senhal de la conversacion", + "Could not post message: {errorMessage}" : "Fracàs de la publicacion : {errorMessage}", + "An error occurred while fetching the participants" : "Una error s’es producha en recuperant los participants", + "Could not send invitation to {actorId}" : "Mandadís impossible del convit a {actorId}", + "Invitations sent" : "Invitacions enviadas", + "Error occurred when sending invitations" : "Error en enviant las invitacions", + "{guest} (guest)" : "{guest} (convidat)", + "Failed to add reaction" : "Apondon impossible de reaccion", + "Failed to remove reaction" : "Supression impossibla de reaccion", + "Error while uploading file \"{fileName}\"" : "Error en enviant lo fichièr « {fileName} »", + "Not enough free space to upload file \"{fileName}\"" : "Pas pro d’espaci liure per enviar lo fichièr « {fileName} »", + "You are not allowed to share files" : "Avètz pas lo drech de partejar de fichièrs", + "Error while sharing file" : "Error pendent lo partiment del fichièr", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Lo navegador qu’utilizatz es pas complètament pres en cargar per Nextcloud Talk. Mercés d’utilizar la darrièra version de Mozilla Firefox, Microsoft Edge, Google Chrome o Apple Safari.", + "Tomorrow – {timeLocale}" : "Deman – {timeLocale}", + "Lost connection to signaling server. Trying to reconnect." : "Connexion perduda al servidor de senhalament. Ensag de reconnexion.", + "Please reload the page." : "Volgatz recargar la pagina.", + "Do not disturb" : "Me desrengar pas", + "Away" : "Absent", + "Microphone {number}" : "Microfòn {number}", + "Camera {number}" : "Camèra {number}", + "Speaker {number}" : "Naut-parlaire {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembla que parlatz mentre que lo son es copat, mercés de vos restablir lo son per que vos entendan los autres", + "Access to microphone & camera is only possible with HTTPS" : "L’accès al microfòn e a la camèra es sonque possibla amb HTTPS", + "Please move your setup to HTTPS" : "Mercés de passar vòstra configuracion al HTTPS", + "Access to microphone & camera was denied" : "L’accès al microfòn e a la camèra es estat refusat", + "WebRTC is not supported in your browser" : "Vòstre navegador pren pas en carga lo WebRTC", + "Please use a different browser like Firefox or Chrome" : "Volgatz utilizar un navegador diferent coma Firefox o Chrome", + "Error while accessing microphone & camera" : "Error pendent l’accès al microfòn e a la camèra", + "%s Talk on your mobile devices" : "%sTalk on vòstres aparelhs mobiles", + "Join conversations at any time, anywhere, on any device." : "Participatz a las conversacion quand volètz, d’ont volètz, sus tot aparelh.", + "Android app" : "Aplicacion Android", + "iOS app" : "Aplicacion iOS", + "__language_name__" : "Occitan", + "Tasks" : "Prètzfaches", + "Open poll • You voted already" : "Sondatge・Avètz ja votat", + "Open poll • Click to vote" : "Sondatge・Clicar per votar", + "Poll • Ended" : "Sondatge・Terminat", + "Talk recording from {time} ({conversation})" : "Enregistrament Talk a partir de {time} ({conversation})", + "Submit vote" : "Enviar lo vòt", + "Your privacy setting has been saved" : "Paramètre de confidencialitat enregistrat", + "Failed to save sounds setting" : "Cargament impossible del paramètre de son", + "Sounds setting saved" : "Paramètres de son enregistrats", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Avètz rejonch la conversacion dins una autra fenèstra o periferic. Aquò es actualament pas pres en cargar per Nextcloud Talk doncas aquesta session es estada tampada." +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/oc.json b/l10n/oc.json new file mode 100644 index 0000000..2697bf7 --- /dev/null +++ b/l10n/oc.json @@ -0,0 +1,1097 @@ +{ "translations": { + "a conversation" : "una conversacion", + "(Duration %s)" : "(Durada %s)", + "You attended a call with {user1}" : "Avètz assistit a una sonada amb {user1}", + "_%n guest_::_%n guests_" : ["%n convidat","%n convidats"], + "You attended a call with {user1} and {user2}" : "Avètz assistit a una sonada amb {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Avètz assistit a una sonada amb {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Avètz assistit a una sonada amb {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Avètz assistit a una sonada amb {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n autre","%n autres"], + "{actor} invited you to {call}" : "{actor} vos a convidat a {call}", + "You were invited to a conversation or had a call" : "Sètz convidat a una conversacion o avètz agut una sonada", + "Other activities" : "Autras activitats", + "Talk" : "Talk", + "Guest" : "Convidat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## La benvenguda a Nextcloud Talk!\nDins aquesta conversacion seràs avisats de la foncionalitats novèlas disponiblas dins Nextcloud Talk.", + "## New in Talk %s" : "## Nòu dins Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge e Safari pòdon ara utilizar la conversacion àudio e vidèo", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Podètz ara notificar totes los participants en publicant « @all » al chat", + "- You can now mention guests in the chat" : "- Podètz ara mencionar los convidats al chat", + "- Join the same conversation and call from multiple devices" : "- Participar a la meteissa conversacion e sonada de mantun aparelh estant", + "- Send voice messages, share your location or contact details" : "- Enviar de messatges vocals, partejar vòstra posicion e detalhs de contactes", + "Talk updates ✅" : "Mesas a jorn Talk ✅", + "Reaction deleted by author" : "Reaccion suprimida per son autor", + "{actor} created the conversation" : "{actor} a creat la conversacion", + "You created the conversation" : "Avètz creat la conversacion", + "System created the conversation" : "Lo sistèma creèt la conversacion", + "An administrator created the conversation" : "Un administrator a creat la conversacion", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a renomenat la conversacion de « %1$s » a « %2$s »", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Avètz renomenat la conversacion de « %1$s » a « %2$s »", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrator a renomenat la conversacion de « %1$s » a « %2$s »", + "{actor} set the description" : "{actor} escriguèt la descripcion", + "You set the description" : "Avètz escricha la descripcion", + "An administrator set the description" : "Un administrator escriguèt la descripcion", + "{actor} removed the description" : "{actor} a tirat la descripcion", + "You removed the description" : "Avètz tirat la descripcion", + "An administrator removed the description" : "Un administrator a tirat la descripcion", + "You started a call" : "Avètz començat una sonada", + "{actor} started a call" : "{actor} a començat una sonada", + "{actor} joined the call" : "{actor} a rejonh la sonada", + "You joined the call" : "Avètz rejonch la sonada", + "{actor} left the call" : "{actor} a quitat la sonada", + "You left the call" : "Avètz quitat la sonada", + "{actor} unlocked the conversation" : "{actor} a desverrolhat la conversacion", + "You unlocked the conversation" : "Avètz desverrolhat la conversacion", + "An administrator unlocked the conversation" : "Un administrator a desverrolhat la conversacion", + "{actor} locked the conversation" : "{actor} a clavat la conversacion", + "You locked the conversation" : "Avètz clavat la conversacion", + "An administrator locked the conversation" : "Un administrator a clavat la conversacion", + "{actor} limited the conversation to the current participants" : "{actor} a limitat la conversacion als participants actuals", + "You limited the conversation to the current participants" : "Avètz limitat la conversacion als participants actuals", + "An administrator limited the conversation to the current participants" : "Un administrator a limitat la conversacion als participants actuals", + "{actor} opened the conversation to registered users" : "{actor} dobriguèt la conversacion als utilizaires enregistrats", + "You opened the conversation to registered users" : "Dobriretz la conversacion als utilizaires enregistrats", + "An administrator opened the conversation to registered users" : "Un administrator dobriguèt la conversacion als utilizaires enregistrats", + "The conversation is now open to everyone" : "La conversacion es ara dubèrta a tot lo monde", + "{actor} opened the conversation to everyone" : "{actor} a dubèrta la conversacion a tot lo monde", + "You opened the conversation to everyone" : "Avètz dobèrta la conversacion a tot lo monde", + "{actor} restricted the conversation to moderators" : "{actor} a restrench la conversacion als moderators", + "You restricted the conversation to moderators" : "Avètz restrench la conversacion als moderators", + "{actor} allowed guests" : "{actor} autorizèt los convidats", + "You allowed guests" : "Avètz autorizat los convidats", + "An administrator allowed guests" : "Un administrator autorizèt los convidats", + "{actor} disallowed guests" : "{actor} interdiguèt los convidats", + "You disallowed guests" : "Avètz interdich los convidats", + "An administrator disallowed guests" : "Un administrator desactivèt los convidats", + "{actor} set a password" : "{actor} a definit un senhal", + "You set a password" : "Avètz definit un senhal", + "An administrator set a password" : "Un administrator a definit un senhal", + "{actor} removed the password" : "{actor} a tirat lo senhal", + "You removed the password" : "Avètz tirat lo senhal", + "An administrator removed the password" : "Un administrator a tirat lo senhal", + "{actor} added {user}" : "{actor} a apondut {user}", + "You joined the conversation" : "Rejonhètz la conversacion", + "{actor} joined the conversation" : "{actor} dintra dins la conversacion", + "You added {user}" : "Avètz apondut {user}", + "{actor} added you" : "{actor} vos a apondut", + "An administrator added you" : "Un administrator vos a apondut", + "An administrator added {user}" : "Un administrator a apondut {user}", + "You left the conversation" : "Avètz quitat la conversacion", + "{actor} left the conversation" : "{actor} a quitat la conversacion", + "{actor} removed {user}" : "{actor} a levat {user}", + "You removed {user}" : "Avètz levat {user}", + "{actor} removed you" : "{actor} vos a levat", + "An administrator removed you" : "Un administrator vos a levat", + "An administrator removed {user}" : "Un administrator a tirat {user}", + "{actor} invited {federated_user}" : "{actor} a invitat {federated_user}", + "You invited {federated_user}" : "As invitat {federated_user}", + "An administrator invited {federated_user}" : "Un administrator a invitat {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} a acceptat l’invitacion", + "{actor} removed {federated_user}" : "{actor} a tirat {federated_user}", + "You removed {federated_user}" : "Avètz tirat {federated_user}", + "An administrator removed {federated_user}" : "Un administrator a tirat {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} a refusat l’invitacion", + "{actor} added group {group}" : "{actor} apondèt lo grop {group}", + "You added group {group}" : "Avètz apondut lo grop {group}", + "An administrator added group {group}" : "Un administrator apondèt lo grop {group}", + "{actor} removed group {group}" : "{actor} levèt lo grop {group}", + "You removed group {group}" : "Avètz levat lo grop {group}", + "An administrator removed group {group}" : "Un administrator tirèt lo grop {group}", + "{actor} added {phone}" : "{actor} a apondut {phone}", + "You added {phone}" : "Avètz apondut {phone}", + "{actor} promoted {user} to moderator" : "{actor} faguèt passar {user} moderator", + "You promoted {user} to moderator" : "Avètz fach passar {user} moderator", + "{actor} promoted you to moderator" : "{actor} vos faguèt passar moderator", + "An administrator promoted you to moderator" : "Un administrator vos faguèt passar moderator", + "An administrator promoted {user} to moderator" : "Un administrator faguèt passar {user} moderator", + "{actor} demoted {user} from moderator" : "{actor} retrogradèt {user} de l’estat de moderator", + "You demoted {user} from moderator" : "Avètz retrogradat {user} de l’estat de moderator", + "{actor} demoted you from moderator" : "{actor} vos retrogradèt de l’estat de moderator", + "An administrator demoted you from moderator" : "Un administrator vos retrogradèt de l’estat de moderator", + "An administrator demoted {user} from moderator" : "Un administrator retrogradèt {user} de l’estat de moderator", + "{actor} shared a file which is no longer available" : "{actor} partegèt un fichièr qu’es pas pus disponible", + "You shared a file which is no longer available" : "Partegèretz un fichièr qu'es pas pus disponible", + "The shared location is malformed" : "L’emplaçament partejat es mal format", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurèt Matterbridge per sincronizar aquesta conversacion amb d’autras discussions", + "You set up Matterbridge to synchronize this conversation with other chats" : "Avètz configurat Matterbridge per sincronizar aquesta conversacion amb d’autras discussions", + "{actor} updated the Matterbridge configuration" : "{actor} actualizèt la configuracion Matterbridge", + "You updated the Matterbridge configuration" : "Avètz actualizada la configuracion Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} suprimissèt la configuracion Matterbridge", + "You removed the Matterbridge configuration" : "Avètz suprimida la configuracion Matterbdrige", + "{actor} started Matterbridge" : "{actor} a lançat Matterbridge", + "You started Matterbridge" : "Avètz lançat Matterbridge", + "{actor} stopped Matterbridge" : "{actor} arrestèt Matterbridge", + "You stopped Matterbridge" : "Avètz arrestat Matterbridge", + "{actor} deleted a message" : "{actor} a suprimit un messatge", + "You deleted a message" : "Avètz suprimit un messatge", + "{actor} deleted a reaction" : "{actor} a suprimit una reaccion", + "You deleted a reaction" : "Avètz suprimit una reaccion", + "You disabled message expiration" : "Avètz desactivat l’expiracion dels messatges", + "{actor} cleared the history of the conversation" : "{actor} escafèt l'istoric de la conversacion", + "You cleared the history of the conversation" : "Avètz escafat l'istoric de la conversacion", + "You started the audio recording" : "Avètz lançat l'enregistrament àudio", + "You stopped the audio recording" : "Avètz arrestat l'enregistrament àudio", + "The recording failed" : "L'enregistrament a pas foncionat", + "Someone voted on the poll {poll}" : "Qualqu’un a votat dins lo sondatge {poll}", + "Message deleted by author" : "Messatge suprimit per son autor", + "Message deleted by {actor}" : "Messatge suprimit per {actor}", + "Message deleted by you" : "Messatge suprimit per vos", + "Deleted user" : "Utilizaire suprimit", + "Unknown number" : "Numèro desconegut", + "Administration" : "Administracion", + "%s (guest)" : "%s (convidat)", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} acabèt la sonada amb %n convidat (Durada {duration})","{actor} acabèt la sonada amb %n convidats (Durada {duration})"], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} acabèt la sonada amb {user1} (Durada {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} acabèt la sonada amb {user1} e {user2} (Durada {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2} e {user3} (Durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2}, {user3} e {user4} (Durada {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} acabèt la sonada amb {user1}, {user2}, {user3}, {user4} {user5} (Durada {duration})", + "Message of {user} in {conversation}" : "Messatge de {user} dins {conversation}", + "Message of {user}" : "Messatge de {user}", + "Message of a deleted user in {conversation}" : "Messatge d'un utilizaire suprimit dins {conversation}", + "Talk conversations" : "Conversacions Talk", + "Talk to %s" : "Parlar a %s", + "File not found" : "Fichièr pas trobat", + "File is not shared, or shared but not with the user" : "Fichièr pas partejat, o partejat mas pas a l’utilizaire", + "No account available to delete." : "Cap de compte pas disponible per la supression.", + "Poll" : "Sondatge", + "No image file provided" : "Cap de fichièr imatge provesit", + "File is too big" : "Fichièr tròp pesuc", + "Invalid file provided" : "Fichièr provesit invalid", + "Invalid image" : "Imatge invalid", + "Unknown filetype" : "filetype desconegut", + "Talk mentions" : "Mencions Talk", + "Say hi to your friends and colleagues!" : "Saludatz vòstres amics e collègas !", + "No unread mentions" : "Cap de mencion pas legida", + "Call in progress" : "Sonada en cors", + "You were mentioned" : "Qualqu’un vos a mencionat", + "Write to conversation" : "Escriure dins la conversacion", + "Conversation invitation" : "Convit de conversacion", + "Description" : "Descripcion", + "Dial-in information" : "Entresenhas de sonada", + "Meeting ID" : "Identificant reünion", + "Your PIN" : "Vòstre còdi", + "Meeting" : "Reünion", + "Password request: %s" : "Senhal requerit : %s", + "Private conversation" : "Conversacion privada", + "Deleted user (%s)" : "Utilizaire suprimit (%s)", + "Dismiss notification" : "Ignorar la notificacion", + "Call recording now available" : "L'enregistrament de sonada es ara disponible", + "Accept" : "Acceptar", + "Decline" : "Declinar", + "Reminder" : "Recòrd", + "Notification" : "Notificacion", + "{user} reacted with {reaction}" : "{user} a reagit amb {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a reagit amb {reaction} dins {call}", + "{user} in {call}" : "{user} dins {call}", + "Deleted user in {call}" : "Utilizaire suprimit dins {call}", + "{guest} (guest) in {call}" : "{guest} (convidat) dins {call}", + "Guest in {call}" : "Convidat dins {call}", + "{user} sent you a private message" : "{user} vos a enviat un messatge privat", + "{user} sent a message in conversation {call}" : "{user} a enviat un messatge dins la conversacion {call}", + "A deleted user sent a message in conversation {call}" : "Un utilizaire suprimit vos envièt un messatge dins la conversacion {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (convidat) mandèt un messatge dins la conversacion {call}", + "A guest sent a message in conversation {call}" : "Un convidat a enviat un messatge dins la conversacion {call}", + "{user} replied to your private message" : "{user} a respondut a vòstre messatge privat", + "{user} replied to your message in conversation {call}" : "{user} a respondut a vòstre messatge dins la conversacion {call}", + "A deleted user replied to your message in conversation {call}" : "Un utilizaire suprimit a respondut a vòstre messatge dins la conversacion {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (convidat) respondèt a vòstre messatge dins la conversacion {call}", + "A guest replied to your message in conversation {call}" : "Un convidat respondèt a vòstre messatge dins la conversacion {call}", + "{user} reacted with {reaction} to your private message" : "{user} a reagit amb {reaction} a vòstre messatge privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Un utilizaire suprimit a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidat) a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Un convidat a reagit amb {reaction} a vòstre messatge dins la conversacion {call}", + "{user} mentioned you in a private conversation" : "{user} vos mencionèt dins una conversacion privada", + "{user} mentioned you in conversation {call}" : "{user} vos a mencionat dins la conversacion {call}", + "A deleted user mentioned you in conversation {call}" : "Un utilizaire suprimit vos a mencionat dins la conversacion {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (convidat) vos a mencionat dins la conversacion {call}", + "A guest mentioned you in conversation {call}" : "Un convidat vos a mencionat dins la conversacion {call}", + "View message" : "Veire lo messatge", + "View chat" : "Veire lo chat", + "{user} invited you to a group conversation: {call}" : "{user} vos a convidat a un conversacion de grop : {call}", + "Join call" : "Rejónher la sonada", + "Answer call" : "Respondre a l’apèl", + "{user} would like to talk with you" : "{user} volriá vos parlar", + "Call back" : "Tornar", + "You missed a call from {user}" : "Avètz mancat una sonada de {user}", + "A group call has started in {call}" : "Una sonada de grop a començat dins {call}", + "You missed a group call in {call}" : "Avètz mancat una sonada de grop dins {call}", + "{email} is requesting the password to access {file}" : "{email} demanda l’accès al fichièr {file}", + "{email} tried to request the password to access {file}" : "{email} ensagèt de demandar lo senhal per accedir a {file}", + "Someone is requesting the password to access {file}" : "Qualqu’un demanda lo senhal per accedir a {file}", + "Someone tried to request the password to access {file}" : "Qualqu’un ensagèt de demandar lo senhal per accedir a {file}", + "Open settings" : "Dobrir los paramètres", + "The hosted signaling server is now configured and will be used." : "Lo servidor de senhalament albergat es ara configurat e serà utilizat.", + "pending" : "pendent", + "active" : "actiu", + "expired" : "expirat", + "blocked" : "blocat", + "error" : "error", + "Contact via Talk" : "Contactar via Talk", + "Open Talk" : "Dobrir la conversacion", + "Default" : "Defaut", + "Presentation" : "Presentacion", + "Conversations" : "Discussions", + "Messages in current conversation" : "Messatge de la conversacion actuala", + "{user}" : "{user}", + "Messages" : "Messatges", + "{user} in {conversation}" : "{user} dins {conversation}", + "Messages in other conversations" : "Messatges dins autras conversacions", + "Invalid emoji character" : "Caractèr d'emoji invalid", + "Invalid background color" : "Color de rèireplan invalida", + "Room {number}" : "Sala {number}", + "Other" : "Autre", + "Something unexpected happened." : "Quicòm d’inesperat s’es produch.", + "The URL is invalid." : "L’URL es invalida.", + "An HTTPS URL is required." : "Una URL HTTPS es requerida.", + "The email address is invalid." : "L’adreça email es invalida.", + "The language is invalid." : "La lenga es invalida.", + "The country is invalid." : "Lo país es invalid.", + "Too many requests are send from your servers address. Please try again later." : "Tròp de requèstas enviadas de vòstras adreça de servidor. Ensajatz mai tard.", + "Something unexpected happened. Please try again later." : "Quicòm d’inesperat s’es produch. Volgatz ensajar mai tard.", + "There is no such account registered." : "Cal de tal compte pas enregistrat.", + "Too many requests are sent from your servers address. Please try again later." : "Tròp de requèstas enviadas de vòstras adreça de servidor. Ensajatz mai tard.", + "Andorra" : "Andòrra", + "United Arab Emirates" : "Emirats Arabis Units", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angòla", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "Amèrica, nord", + "Austria" : "Austria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Illas Åland", + "Azerbaijan" : "Azerbaitjan", + "Bosnia and Herzegovina" : "Bòsnia e Ercegovina", + "Barbados" : "Barbada", + "Bangladesh" : "Bangladèsh", + "Belgium" : "Bèlgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Barein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sant Bartomieu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Sultanat de Brunei", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Botan", + "Bouvet Island" : "Illa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorusia", + "Belize" : "Belize", + "Canada" : "Canadà", + "Cocos (Keeling) Islands" : "Illas Cocos (Keeling)", + "Central African Republic" : "Centrafrica", + "Congo" : "Congò", + "Switzerland" : "Soïssa", + "Côte d'Ivoire" : "Còsta d'Evòri", + "Cook Islands" : "Illas Cook", + "Chile" : "Chile", + "Cameroon" : "Cameron", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Còsta Rica", + "Cuba" : "Cubà", + "Cabo Verde" : "Cap Verd", + "Curaçao" : "Curaçao", + "Christmas Island" : "Illa Cristmas", + "Cyprus" : "Chipre", + "Czechia" : "Republica Chèca", + "Germany" : "Alemanha", + "Djibouti" : "Jiboti", + "Denmark" : "Danemarc", + "Dominica" : "Dominica", + "Dominican Republic" : "Republica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Eqüator", + "Estonia" : "Estònia", + "Egypt" : "Egipte", + "Western Sahara" : "Sahara occidental", + "Eritrea" : "Eritrèa", + "Spain" : "Espanha", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Illas Maldivas", + "Micronesia, Federated States of" : "Micronesia, Estats Federats de", + "Faroe Islands" : "Illas Feròe", + "France" : "França", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Reialme Unit de Grand Bretanha e d’Irlanda del Nòrd", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana francesa", + "Guernsey" : "Alemanya", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenland", + "Gambia" : "Gambia", + "Guinea" : "Guinèa", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Guinèa Eqüatoriala", + "Greece" : "Grèça", + "South Georgia and the South Sandwich Islands" : "Georgia del Sud e las illas Sandwich del Sud", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinèa-Bissau", + "Guyana" : "Guianà", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Illas de Heard e McDonald", + "Honduras" : "Hondures", + "Croatia" : "Croacia", + "Haiti" : "Aïtí", + "Hungary" : "Ongria", + "Indonesia" : "Indonesia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Illa de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Territòris britanics de l'ocean indian", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran", + "Iceland" : "Islàndia", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaïca", + "Jordan" : "Jordan", + "Japan" : "Japon", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirghizstan", + "Cambodia" : "Cambòtja", + "Kiribati" : "Kiribati", + "Comoros" : "Comòras", + "Saint Kitts and Nevis" : "Sant Kitts e Nevis", + "Korea, Democratic People's Republic of" : "Corèa, Republica Populara Democratica de", + "Korea, Republic of" : "Corea", + "Kuwait" : "Koweit", + "Cayman Islands" : "Illas Caiman", + "Kazakhstan" : "Cazacstan", + "Lao People's Democratic Republic" : "Laòs", + "Lebanon" : "Lebanon", + "Saint Lucia" : "St. Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituània", + "Luxembourg" : "Luxemborg", + "Latvia" : "Letònia", + "Libya" : "Libia", + "Morocco" : "Marròc", + "Monaco" : "Monegue", + "Moldova, Republic of" : "Moldàvia", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Sant Martin (francés)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Illas Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Kanu", + "Northern Mariana Islands" : "Illas Marianas del Nòrd", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurici", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "Mexic", + "Malaysia" : "Malàisia", + "Mozambique" : "Moçambic", + "Namibia" : "Namibia", + "New Caledonia" : "Nòva Caledònia", + "Niger" : "Nigèr", + "Norfolk Island" : "Norfòlk, Illa", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Holanda", + "Norway" : "Norvègia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Novèla Zelanda", + "Oman" : "Oman", + "Panama" : "Panamà", + "Peru" : "Peru", + "French Polynesia" : "Polinesia francesa", + "Papua New Guinea" : "Papoa-Nòva Guinèa", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistan", + "Poland" : "Polonha", + "Saint Pierre and Miquelon" : "Sant Pèire e Miquelon", + "Pitcairn" : "Illas Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Estat de Palestina", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Qatar", + "Réunion" : "La Reünion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Federacion russa", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saudita", + "Solomon Islands" : "Illas Salomon", + "Seychelles" : "Seichèlas", + "Sudan" : "Sodan", + "Sweden" : "Suècia", + "Singapore" : "Singapor", + "Slovenia" : "Eslovenia", + "Svalbard and Jan Mayen" : "Svalbard e illa Jan Mayen", + "Slovakia" : "Eslòvac", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Sant Marin", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sodan del Sud", + "Sao Tome and Principe" : "São Tomé e Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sant Martin (part neerlandesa)", + "Syrian Arab Republic" : "Siria", + "Turks and Caicos Islands" : "Illas Turcas e Caïcas", + "Chad" : "Chad", + "French Southern Territories" : "Tèrras australas francesas", + "Togo" : "Tògo", + "Thailand" : "Tailandia", + "Tajikistan" : "Tatgiquistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tònga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinitat e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Província de China", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ucraïna", + "Uganda" : "Oganda", + "United States Minor Outlying Islands" : "Illas menoras aluenhadas dels Estats Units d'America", + "United States of America" : "Estats Units d'America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Ozbequistan", + "Holy See" : "Santa Ses", + "Saint Vincent and the Grenadines" : "Sant Vincenç e las Grenadinas", + "Venezuela, Bolivarian Republic of" : "República Bolivariana de Venezuela", + "Virgin Islands, British" : "Illas Verges Britanicas", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Vinyes", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iemèn", + "Mayotte" : "Maiòta", + "South Africa" : "Sudafrica", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Error: Cannot connect to server" : "Error : connexion impossibla al servidor", + "Error: Server did not respond with proper JSON" : "Error: lo servidor a pas respondut amb un JSON corrèct", + "Could not get version" : "Obtencion impossibla de la version", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Error  : execucion de la version {version}, lo servidor requerís una actualizacion per èsser compatible amb aquesta version de Talk", + "Error: Server responded with: {error}" : "Error : lo servidor a respondut : {error}", + "Error: Unknown error occurred" : "Error : una error desconeguda s'es produsida", + "SIP configuration" : "Configuracion SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Invalida data, lo format de data deu èsser YYYY-MM-DD", + "Conversation not found" : "Conversacion pas trobada", + "Chat, video & audio-conferencing using WebRTC" : "Messatjariá, conferéncias vidèo e àudio amb WebRTC", + "Leave call" : "Quitar la sonada", + "Stay in call" : "Demorar en linha", + "Discuss this file" : "Discutir d’aqueste fichièr", + "Share this file with others to discuss it" : "Partejar aqueste fichièr amb d’autres per ne discutir", + "Share this file" : "Partejar aqueste fichièr", + "Join conversation" : "Rejónher la conversacion", + "The password is wrong. Try again." : "Lo senhal es incorrècte. Ensajatz tornamai.", + "Password" : "Senhal", + "Submit" : "Transmetre", + "Error requesting the password." : "Error en demandant lo senhal.", + "Request password" : "Demandar senhal", + "This conversation has ended" : "La conversacion es acabada", + "Close Talk sidebar" : "Tampar la barra laterala de Talk", + "Open Talk sidebar" : "Dobrir la barra laterala de Talk", + "Everyone" : "Tot lo monde", + "Users and moderators" : "Utilizaires e moderators", + "Moderators only" : "Moderators solament", + "Save changes" : "Salvar los cambiaments", + "Saving …" : "Enregistrament…", + "Saved!" : "Enregistrat", + "Limit to groups" : "Limitar als grops", + "Guests can still join public conversations." : "Los convidats pòdon encara rejónher las conversacions publicas.", + "Limit using Talk" : "Limits d’utilizacion de Talk", + "Limit creating a public and group conversation" : "Limitar la creacion de grops e publicas de conversacions", + "Limit creating conversations" : "Limitar la creacion de conversacions", + "Limit starting a call" : "Limitar l’aviada de sonada", + "Enabled" : "Activada", + "Disabled" : "Desactivat", + "Name" : "Nom", + "Beta" : "Bèta", + "Permissions" : "Autorizacions", + "All messages" : "Totes los messatges", + "@-mentions only" : "@-mencions sonque", + "Off" : "Atudat", + "General settings" : "Paramètres generals", + "Default notification settings" : "Paramètres de notificacion per defaut", + "Default group notification" : "Notificacion de grop per defaut", + "Integration into other apps" : "Integracion dins d’autras aplicacions", + "Allow conversations on files" : "Permetre las conversacions suls fichièrs", + "Allow conversations on public shares for files" : "Permetre las conversacions suls partiment de fichièrs", + "Enable encryption" : "Activar lo chiframent", + "Pending" : "En espèra", + "Error" : "Error", + "Blocked" : "Blocat", + "Active" : "Activa", + "Expired" : "Expirat", + "Never" : "Jamai", + "URL of this Nextcloud instance" : "URL d’aquesta instància Nextcloud", + "Email of the user" : "Email de l’utilizaire", + "Language" : "Lenga", + "Country" : "País", + "Status" : "Estatut", + "Created at" : "Creat lo", + "Expires at" : "Expira lo", + "Limits" : "Limits", + "Yes" : "Òc", + "No" : "Non", + "_%n user_::_%n users_" : ["%n utilizaire","%n utilizaires"], + "Installed version: {version}" : "Version installada : {version}", + "Downloading …" : "Telecargament…", + "Install Talk Matterbridge" : "Installar Talk Matterbridge", + "Matterbridge integration" : "Integracion Matterbridge", + "Enable Matterbridge integration" : "Activar l’integracion Matterbridge", + "Status: Checking connection" : "Estat : verificacion de la connexion", + "OK: Running version: {version}" : "OK : execucion de la version : {version}", + "Validate SSL certificate" : "Validar lo certificat SSL", + "Delete this server" : "Suprimir aqueste servidor", + "Test this server" : "Ensajar aqueste servidor", + "Shared secret" : "Secret partejat", + "Recording consent" : "Consentiment d’enregistrament", + "Enable SIP configuration" : "Activar la configuracion SIP", + "Phone number (Country)" : "Numèro de telefòn (País)", + "STUN server URL" : "URL servidor STUN", + "The server address is invalid" : "L'adreça del servidor es invalida", + "STUN servers" : "Servidors STUN", + "{schema} scheme must be used with a domain" : "l’esquèma {schema} deu èsser utilizat amb un domeni", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} sonque", + "TURN server schemes" : "Esquèmas servidor TURN", + "TURN server URL" : "URL servidor TURN", + "TURN server secret" : "Secrèt servidor TURN", + "TURN server protocols" : "Protocòls servidor TURN", + "TURN servers" : "Servidor TURN", + "Failed" : "Fracàs", + "OK" : "D’acòrdi", + "Checking …" : "Verificacion…", + "Web server setup checks" : "Verificacions de configuracion del servidor Web", + "Confirm" : "Confirmar", + "Reset" : "Reïnicializar", + "Cancel" : "Anullar", + "Back" : "Retorn", + "Add participant \"{user}\"" : "Apondre participant « {user} »", + "Loading …" : "Cargament…", + "From" : "De", + "Calendar" : "Calendièr", + "Attendees" : "Convidats", + "Save" : "Salvar", + "Search participants" : "Cercar participants", + "No results" : "Pas cap de resultat", + "Raise hand" : "Levar la man", + "Raise hand (R)" : "Levar la man (R)", + "Lower hand" : "Baissar la man", + "Lower hand (R)" : "Baissar la man (R)", + "Exit full screen (F)" : "Sortir de l'ecran complèt (F)", + "Full screen (F)" : "Ecran complèt (F)", + "Speaker view" : "Vista parlaire", + "Grid view" : "Vista en grasilha", + "This conversation is read-only" : "Aquesta conversacion es en lectura sola", + "Reload" : "Recargar", + "{nickName} raised their hand." : "{nickName} a levat la man.", + "A participant raised their hand." : "Un participant a levat la man.", + "Previous page of videos" : "Pagina de vidèos precedenta", + "Next page of videos" : "Pagina de vidèos seguenta", + "Connecting …" : "Connexion…", + "Calling …" : "Sonada...", + "Waiting for {user} to join the call" : "En espèra de {user} dins la sonada", + "Waiting for others to join the call …" : "En espèra que d’autres arriben…", + "You can invite others in the participant tab of the sidebar" : "Podètz convidar d’autre monde amb l’onglet dels participants de la barra laterala", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podètz convidar d’autre monde amb l’onglet dels participants de la barra laterala o partejar aqueste ligam per los convidar !", + "Share this link to invite others!" : "Partejatz aqueste ligam per convidar mai de monde !", + "Copy link" : "Copiar lo ligam", + "You are not allowed to enable audio" : "Avètz pas l'autorizacion per activar l’àudio", + "No audio. Click to select device" : "Cap d'àudio. Clicatz per seleccionar un periferic", + "Mute audio" : "Copar lo son", + "Mute audio (M)" : "Copar lo son (M)", + "Unmute audio" : "Restablir lo son", + "Unmute audio (M)" : "Restablir lo son (M)", + "None" : "Pas cap", + "Access to camera was denied" : "L’accès a la camèra es estat refusat", + "Error while accessing camera: It is likely in use by another program" : "Error d’accès a la camèra : poiriá arribar qu’un autre programa l’utilize", + "Error while accessing camera" : "Error pendent l’accès a la camèra", + "You have been muted by a moderator" : "Un moderator vos a amudit", + "You are not allowed to enable video" : "Avètz pas l'autorizacion per activar la vidèo", + "No video. Click to select device" : "Cap de vièoa. Clicatz per seleccionar un periferic", + "Disable video" : "Desactivar la vidèo", + "Disable video (V)" : "Desactivar la vidèo (V)", + "Enable video" : "Activar la vidèo", + "Enable video (V)" : "Activar la vidèo (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Activar la vidèo (V) - La connexion serà interrompuda brèvament pendent l’activacion de la vidèo pel primièr còp", + "Show presenter" : "Mostrar lo presentator", + "You" : "Vos", + "Mute" : "Mut", + "Show screen" : "Far veire l’ecran", + "Stop following" : "Quitar de seguir", + "Connection could not be established …" : "Establiment impossible de la connexion…", + "Connection was lost and could not be re-established …" : "Connexion perduda e restabliment impossibla…", + "Connection could not be established. Trying again …" : "Establiment impossible… Novèl ensag…", + "Connection lost. Trying to reconnect …" : "Connexion perduda. Ensag de reconnexion…", + "Connection problems …" : "Problèmas de connexion…", + "Collapse" : "Replegar", + "You need to be logged in to upload files" : "Devètz èsser autentificat per enviar de fichièrs", + "Drop your files to upload" : "Depausatz los fichièrs d’enviar", + "Conversation messages" : "Messatges de conversacion", + "Scroll to bottom" : "Defilar enbàs", + "Post message" : "Publicar messatge", + "Favorite" : "Favorit", + "Date:" : "Data :", + "Hide details" : "Amagar detalhs", + "Show details" : "Mostrar detalhs", + "Error while updating conversation description" : "Error pendent l’actualizacion de la descripcion de la conversacion", + "Edit conversation name" : "Modificar lo nom de la conversacion", + "Edit conversation description" : "Editar la descripcion de la conversacion", + "Enter a description for this conversation" : "Picatz una descripcion per aquesta conversacion", + "Picture" : "Imatge", + "Disable" : "Desactivar", + "Enable" : "Activar", + "Choose your conversation picture" : "Causissètz un imatge de conversacion", + "Choose" : "Causir", + "Set picture" : "Definir l'imatge", + "Default permissions modified for {conversationName}" : "Permissions per defaut modificadas per {conversationName}", + "Could not modify default permissions for {conversationName}" : "Las permissions per defaut se podiá pas modificar {conversationName}", + "All permissions" : "Totas las permissions", + "Restricted" : "Restrencha", + "Advanced permissions" : "Permissions avançadas", + "Edit permissions" : "Modificar las autorizacions", + "Conversation settings" : "Paramètres de conversacion", + "Personal" : "Personal", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zòna perilhosa", + "Leave conversation" : "Quitar la conversacion", + "Delete conversation" : "Suprimir la conversacion", + "Do you really want to delete \"{displayName}\"?" : "Volètz vertadièrament suprimir « {displayName} » ?", + "Error while deleting conversation" : "Error pendent la supression de la conversacion", + "Delete all chat messages" : "Suprimir totes los messatges del chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Volètz vertadièrament suprimir totes los messatges dins « {displayName} » ?", + "Error while clearing chat history" : "Error pendent l’escafament de l’istoric del chat", + "Be careful, these actions cannot be undone." : "Fasètz atencion, aquelas accions pòdon pas èsser anulladas.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Un còp quitada, per tornar a un conversacion tampada, cal un convit. Una conversacion dubèrta es totjorn accessibla.", + "Permanently delete this conversation." : "Suprimir permanent aquesta conversacion", + "Delete chat messages" : "Suprimir los messatges del chat", + "Permanently delete all the messages in this conversation." : "Suprimir per totjorn totes los messatges d’aquesta conversacion.", + "_%n hour_::_%n hours_" : ["%n ora","%n oras"], + "_%n day_::_%n days_" : ["%n jorn","%n jorns"], + "_%n week_::_%n weeks_" : ["%n setmana","%n setmanas"], + "Guest access" : "Accès convidat", + "Password protection" : "Protegir via senhal", + "Set a password" : "Definir lo senhal", + "Enter new password" : "Picar un senhal novèl", + "Save password" : "Enregistrar lo senhal", + "Resend invitations" : "Tornar enviar las invitacions", + "Error occurred when opening or limiting the conversation" : "Error en dobrissent o limitant la conversacion", + "Open conversation" : "Dobrir la conversacion", + "Start time has been updated" : "L'ora de debuta es estada actualizada", + "Error occurred while updating start time" : "Error pendent la mesa a jorn de l’ora de debuta", + "Meeting start time" : "Ora de debuta de la conferéncia", + "Start time (optional)" : "Ora de debuta (opcional)", + "Error occurred when locking the conversation" : "Error pendent lo verrolhatge de la conversacion", + "Error occurred when unlocking the conversation" : "Error pendent lo desverrolhatge de la conversacion", + "Lock conversation" : "Verrolhar la conversacion", + "This will also terminate the ongoing call." : "Aquò acabarà tanben la sonada en cors.", + "Edit" : "Modificar", + "More information" : "Mai d’informacions", + "Delete" : "Suprimir", + "unknown state" : "estat desconegut", + "running" : "en cors d'execucion", + "not running" : "pas en execucion", + "Bridge saved" : "Pont enregistrat", + "More info on Matterbridge" : "Mai d’info sus Matterbridge", + "Enable bridge" : "Activar lo pont", + "Show Matterbridge log" : "Veire los jornals de Matterbridge", + "Notifications" : "Notificacions", + "Notify about calls in this conversation" : "Notificar las sonadas d’aquesta conversacion", + "Recording Consent" : "Consentiment d'enregistrament", + "Join" : "Rejónher", + "Error while creating the conversation" : "Error pendent la creacion de la conversacion", + "Create a new conversation" : "Crear una conversacion novèla", + "Unread mentions" : "Mencions pas legidas", + "Create conversation" : "Crear conversacion", + "Enter your name" : "Picatz vòstre nom", + "Log in" : "Connexion", + "Creating the conversation …" : "Creacion de la conversacion...", + "Mark as read" : "Marcar coma legit", + "Mark as unread" : "Marcar coma pas legit", + "Remove from favorites" : "Tirar dels favorits", + "Add to favorites" : "Apondre als favorits", + "Conversation actions" : "Accions de conversacion", + "Alphabetically" : "Alfabeticament", + "No matches found" : "Cap de correspondéncia pas trobada", + "No conversations found" : "Cap de conversacion pas trobada", + "You have no unread messages." : "Avètz un messatge pas legit.", + "An error occurred while performing the search" : "Una error s'es producha en realizant la recèrca", + "Conversation list" : "Lista de conversacion", + "Unread messages" : "Messatges pas legits", + "Clear filters" : "Escafar los filtres", + "App settings" : "Paramètres d’aplicacion", + "Users" : "Utilizaires", + "Groups" : "Gropes", + "Other sources" : "Autras fonts", + "Open conversations" : "Dobrir las conversacions", + "No search results" : "pas cap de resultats de recèrca", + "Users and groups" : "Utilizaires e grops", + "The meeting will start soon" : "La conferéncia començarà lèu", + "This meeting is scheduled for {startTime}" : "La conferéncia es planificada per {startTime}", + "You are currently waiting in the lobby" : "Sètz a esperar dins la sala d’espèra", + "Select microphone" : "Causir microfòn", + "No microphone available" : "Cap de microfòn pas disponible", + "Select camera" : "Causir una camèra", + "No camera available" : "Cap de camèra pas disponibla", + "Devices" : "Periferics", + "Backgrounds" : "Rèireplans", + "No audio" : "Cap d’àudio", + "No camera" : "Cap de camèra", + "Calls are not supported in your browser" : "Vòstre navegador pren pas encarga las sonadas", + "Access to microphone is only possible with HTTPS" : "L’accès al microfòn es sonque possibla amb HTTPS", + "Access to microphone was denied" : "L’accès al microfòn es estat refusat", + "Error while accessing microphone" : "Error pendent l’accès al microfòn", + "Access to camera is only possible with HTTPS" : "L’accès a la camèra es sonque possibla amb HTTPS", + "Invalid path selected" : "Camin seleccionat invalid", + "Upload" : "Cargament", + "Files" : "Fichièrs", + "24 hours" : "24 oras", + "7 days" : "7 jorns", + "Add a reaction to this message" : "Apondre una reaccion a aqueste messatge", + "Reply" : "Respondre", + "More actions" : "Mai d’accions", + "Reply privately" : "Respondre en privat", + "Copy message link" : "Copiar ligam messatge", + "Go to file" : "Anar al fichièr", + "Forward message" : "Transferir lo messatge", + "Translate" : "Tradurre", + "Close reactions menu" : "Tampar lo menú de reaccions", + "React with {emoji}" : "Reagir amb {emoji}", + "React with another emoji" : "Reagir amb un autre emoji", + "Choose a conversation to forward the selected message." : "Causir una conversacion destinària del messatge seleccionat.", + "Error while forwarding message" : "Error en transferissent lo messatge", + "The message has been forwarded to {selectedConversationName}" : "Lo messatge es estat transferit a {selectedConversationName}", + "Dismiss" : "Regetar", + "Go to conversation" : "Anar a la conversacion", + "Translate message" : "Traduire lo messatge", + "Translating" : "Traduccion", + "Message read by everyone who shares their reading status" : "Messatge legit per tot lo monde que partejan lo estatut de lectura", + "Message sent" : "Messatge mandat", + "Deleting message" : "Supression del messatge", + "Message deleted successfully" : "Messatge corrèctament suprimit", + "Message could not be deleted because it is too old" : "Lo messatge a pas pogut èsser suprimit perque es tròp ancian", + "Only normal chat messages can be deleted" : "Sonque los messatges de chat normal pòdon èsser suprimits", + "An error occurred while deleting the message" : "Error pendent la supression del messatge", + "Your browser does not support playing audio files" : "Vòstre navegador pren pas en carga la lectura dels fichièrs àudio", + "Contact" : "Contacte", + "{stack} in {board}" : "{stack} dins {board}", + "Remove {fileName}" : "Suprimir {fileName}", + "Open this location in OpenStreetMap" : "Dobrir aquesta posicion dins OpenStreetMap", + "Sending message" : "Mandadís del messatge", + "Failed to send the message. Click to try again" : "Mandadís del messatge impossible. Clicatz per tornar ensajar", + "Not enough free space to upload file" : "Pas pro d’espaci liure per enviar lo fichièr", + "You cannot send messages to this conversation at the moment" : "Podètz pas enviar de messatges a aquesta conversacion pel moment", + "Open poll" : "Dobrir lo sondatge", + "See results" : "Veire los resultats", + "No messages" : "Cap de messatge", + "Cancel search" : "Anullar la recèrca", + "Add a phone number" : "Apondre un numèro de telefòn", + "Create a new group conversation" : "Crear una conversacion de grop novèla", + "Add participants" : "Apondre participants", + "Conversation visibility" : "Visibilitat de la conversacion", + "Allow guests to join via link" : "Permetre als convidats de rejónher via ligam", + "Enter password" : "Picar lo senhal", + "This conversation has been locked" : "Aquesta conversacion foguèt clavada", + "Joining conversation …" : "Dintra dins la conversacion…", + "Send message" : "Enviar un messatge", + "File to share" : "Fichièr de partejar", + "Add emoji" : "Apondre emoji", + "Cancel editing" : "Anullar la modificacion", + "Share from Files" : "Partejar a partir dels Fichièrs", + "Share files to the conversation" : "Partejar de fichièrs dins la conversacion", + "Record voice message" : "Enregistrar messatge vocal", + "End recording and send" : "Acabar àudio e enviar", + "Dismiss recording" : "Anullar l’enregistrament", + "Access to the microphone was denied" : "L’accès al microfòn es estat refusat", + "Microphone either not available or disabled in settings" : "Microfòn siá indisponible o desactivat dins los paramètres", + "Error while recording audio" : "Error en enregistrant l’àudio", + "New file" : "Fichièr novèl", + "Create file" : "Crear un fichièr", + "Someone is typing …" : "Qualqu’un pica...", + "{user1} is typing …" : "{user1} pica…", + "{user1} and {user2} are typing …" : "{user1} e {user2} pican…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} pican…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n autre pican…","{user1}, {user2}, {user3} e %n autres pican…"], + "Add more files" : "Apondre mai de fichièrs", + "Send" : "Mandar", + "In this conversation {user} can:" : "Dins aquesta conversacion {user} pòt :", + "Edit default permissions for participants in {conversationName}" : "Modificar las permissions per defaut dels participants dins {conversationName}", + "Start a call" : "Començar una sonada", + "Skip the lobby" : "Passar la sala d’espèra", + "Enable the microphone" : "Activar lo microfòn", + "Enable the camera" : "Activar la camèra", + "Share the screen" : "Partejar l’ecran", + "Update permissions" : "Actualizar las autorizacions", + "Updating permissions" : "Actualizacion de las permissions", + "Create poll" : "Crear un sondatge", + "Question" : "Question", + "Ask a question" : "Pausar una question", + "Answers" : "Responsas", + "Answer {option}" : "Responsa {option}", + "Delete poll option" : "Suprimir l’opcion de sondatge", + "Add answer" : "Apondre responsa", + "Settings" : "Paramètres", + "Multiple answers" : "Multi responsas", + "End poll" : "Terminar lo sondatge", + "Change your vote" : "Cambiar lo vòt", + "Stop session" : "Arrestar la session", + "Disable lobby" : "Desactivar la sala d’espèra", + "Settings for participant \"{user}\"" : "Paramètres pel participant « {user} »", + "Participant \"{user}\"" : "Participant « {user} »", + "moderator" : "moderator", + "bot" : "robòt", + "guest" : "convidat", + "Raised their hand" : "Levèt la man", + "Joined with video" : "Rejonhèt amb vidèo", + "Joined via phone" : "Rejonhèt via telefòn", + "Joined with audio" : "Rejonhèt amb l’àudio", + "Remove group and members" : "Levar de grops e membres", + "Remove participant" : "Tirar participant", + "Permissions granted to {displayName}" : "Autorizacions acordadas a {displayName}", + "Permissions removed for {displayName}" : "Permissions suprimidas per {displayName}", + "Permissions set to default for {displayName}" : "Permissions definidas a defaut per {displayName}", + "Resend invitation" : "Renviar invitacion", + "Reset custom permissions" : "Reïnicializar las permissions personalizadas", + "Remove all permissions" : "Suprimir totas las permissions", + "Remove" : "Suprimir", + "Permissions modified for {displayName}" : "Permissions modificadas per {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Apondre utilizaires", + "Add groups" : "Apondre grops", + "Add other sources" : "Apondre d'autras fonts", + "Add emails" : "Apondre emails", + "Integrations" : "Integracions", + "Add federated users" : "Apondre d’utilizaires federats", + "Searching …" : "Recèrca…", + "Search for more users" : "Cercar mai d’utilizaires", + "Search or add participants" : "Cercar o apondre participants", + "An error occurred while adding the participants" : "Una error s’es producha en ajustant los participants", + "Participants" : "Participants", + "Participants ({count})" : "Participants ({count})", + "You have new unread messages in the chat." : "Avètz un messatge pas legit al chat.", + "You have been mentioned in the chat." : "Qualqu’un vos a mencionat al chat.", + "Chat" : "Messatjariá", + "Details" : "Detalhs", + "Shared items" : "Elements partejats", + "Load more results" : "Cargar mai de resultats", + "Projects" : "Projèctes", + "{actor}: {lastMessage}" : "{actor} : {lastMessage}", + "Link to a conversation" : "Ligam cap a la conversacion", + "Search conversations or users" : "Cercar de conversacions o utilizaires", + "Select conversation" : "Seleccionar una conversacion", + "Number length is not valid" : "La longor del numèro de telefòn es invalida", + "Region code is not valid" : "Lo còdi de region es invalida", + "Number length is too short" : "La longor del numèro es tròp corta", + "Number length is too long" : "La longor del numèro es tròp longa", + "Number is not valid" : "Lo numèro es pas valid", + "Phone numbers" : "Numèros de telefòn", + "Display name: {name}" : "Nom d’afichatge : {name}", + "Save name" : "Enregistrar lo nom", + "Error while saving sounds setting" : "Error en enregistrant lo paramètre de son", + "Play sounds when participants join or leave a call" : "Emetre sons quand los participants rejonhon o quitan una sonada", + "Notification settings" : "Paramètres de notificacions", + "Default language" : "Lenga per defaut", + "Select location for attachments" : "Causir un emplaçament per las pèças juntas", + "Error while setting attachment folder" : "Error pendent la definicion del dossièr de pèça junta", + "Error while setting read status privacy" : "Error lor de definicion de la confidencialitat de l'estatut", + "Privacy" : "Confidencialitat", + "Attachments folder" : "Dossièr de pèças-juntas", + "Toggle full screen" : "Alternar ecran complèt", + "Search" : "Search", + "Shortcuts while in a call" : "Acorchis pendent una sonada", + "Camera on and off" : "Vidèo activada/desactivada", + "Microphone on and off" : "Microfòn activat/desactivat", + "Raise or lower hand" : "Levar o baissar la man", + "Push to talk or push to mute" : "Tocar per parlar o tocar per copar lo son", + "Start call silently" : "Començar la sonada en silenci", + "Start call" : "Començar sonada", + "End call" : "Acabar la sonada", + "You will be able to join the call only after a moderator starts it." : "Poiretz sonque participar a la sonada un còp qu'un moderator l'aja començada.", + "End call for everyone" : "Acabar la sonada per totes", + "Starting the recording" : "L'enregistrament comença", + "Recording" : "Enregistrament", + "Stop recording" : "Arrestar l'enregistrament", + "Send a reaction" : "Enviar una reaccion", + "React with {reaction}" : "Reagir amb {reaction}", + "You are not allowed to enable screensharing" : "Avètz pas l'autorizacion per activar lo partiment d’ecran", + "No screensharing" : "Cap de partiment d’ecran", + "Screensharing options" : "Opcion de partiment d’ecran", + "Enable screensharing" : "Activar lo partiment d’ecran", + "Bad sent video and screen quality." : "Marrida vidèo enviada e qualitat d’ecran.", + "Bad sent screen quality." : "Marrida qualitat d’ecran enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo pendent un partiment d’ecran.", + "Disable background blur" : "Desactivar lo rèireplan trebol", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vejan pas vòstre ecran.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas. Per melhorar la situacion ensajatz de desactivar la vidèo pendent un partiment d’ecran.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas vòstre ecran. Per melhorar la situacion ensajatz de desactivar lo partiment d’ecran.", + "Disable screenshare" : "Desactivar lo partiment d’ecran", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos vejan pas. Per melhorar la situacion ensajatz de desactivar lo rèireplan o la vidèo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas. Per melhorar la situacion ensajatz de desactivar la vidèo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vòstra connexion Internet o vòstre ordenador es ocupat poiriá arribar que los demai participants vos comprengan o vejan pas.", + "Screen sharing is not supported by your browser." : "Vòstre navegador pren pas en carga lo partiment d’ecran.", + "Screen sharing requires the page to be loaded through HTTPS." : "Lo partiment d’ecran requerís que la pagina siá cargada via HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Lo partiment d’ecran requerís un cargament via HTTPS.", + "An error occurred while starting screensharing." : "S’es producha una error en aviant lo partiment d’ecran.", + "Show your screen" : "Partejar l’ecran", + "Stop screensharing" : "Arrestar partiment d’ecran", + "Mute others" : "Copar lo son dels autres", + "Start recording" : "Lançar l'enregistrament", + "Select a region" : "Seleccionatz una region", + "Search …" : "Recercar...", + "Message without mention" : "Messatge sens mencion", + "Mention myself" : "Me mencionar", + "The conversation does not exist" : "La conversacion existís pas", + "Join a conversation or start a new one!" : "Rejonhètz una conversacion o creatz-ne una !", + "Duplicate session" : "Duplicar la session", + "Join a conversation or start a new one" : "Rejónher una conversacion o ne crear una", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Utilizaire Nextcloud", + "User password" : "Senhal utilizaire", + "Talk conversation" : "Conversacion Talk", + "Skip TLS verification" : "Passar la verificacion TLS", + "Matrix server URL" : "URL servidor Matrix", + "User" : "User", + "Matrix channel" : "Cadena Matrix", + "Mattermost server URL" : "URL servidor Mattermost", + "Mattermost user" : "Utilizaire Mattermost", + "Team name" : "Nom de la còla", + "Channel name" : "Nom de la cadena", + "Rocket.Chat server URL" : "URL del servidor Rocket.Chat", + "User name or email address" : "Nom d’utilizaire o adreça email", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL servidor Zulip", + "Bot user name" : "Nom d’utilizaire robòt", + "Bot API key" : "Clau d’API robòt", + "Zulip channel" : "Canal Zulip", + "API token" : "Geton API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "ID o nom del servidor", + "Channel" : "Cadena", + "Login" : "Login", + "Chat ID" : "ID del chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL servidor IRC (per exemple chat.freenode.net:6667)", + "Nickname" : "Escais", + "Connection password" : "Senhal de connexion", + "IRC channel" : "Cadena IRC", + "Channel password" : "Senhal de cadena", + "NickServ nickname" : "Nom d’utilizaire NickServ", + "NickServ password" : "Senhal NickServ", + "Use TLS" : "Utilizar TLS", + "Use SASL" : "Utilizar SASL", + "Tenant ID" : "ID Tenant", + "Client ID" : "ID client", + "Team ID" : "ID Team", + "Thread ID" : "ID fial", + "XMPP/Jabber server URL" : "URL servidor XMPP/Jabber", + "MUC server URL" : "URL servidor MUC", + "Jabber ID" : "ID Jabber", + "Media" : "Mèdia", + "Polls" : "Sondatges", + "Voice messages" : "Messatges àudio", + "Locations" : "Emplaçaments", + "Audio" : "Àudio", + "Show all media" : "Veire totes los mèdia", + "Show all files" : "Veire totes los fichièrs", + "Show all polls" : "Mostrar totes los sondatges", + "Show all voice messages" : "Veire totes los messatges àudio", + "Show all locations" : "Veire totes los emplaçaments", + "Show all call recordings" : "Mostrar los enregistraments de sonadas", + "Show all audio" : "Veire totes los àudios", + "Show all other" : "Veire tota la rèsta", + "Group" : "Grop", + "You: {lastMessage}" : "Vos : {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Leave this page" : "Quitar aquesta pagina", + "Join here" : "Rejónher aquí", + "Post to a conversation" : "Publicar dins una conversacion", + "Post to conversation" : "Publicar a la conversacion", + "An error occurred while posting location to conversation" : "Error en publicant la localizacion dins la conversacion", + "Share to a conversation" : "Partejar dins una conversacion", + "Share to conversation" : "Partejar dins una conversacion", + "Error while clearing conversation history" : "Error pendent escafament de l’istoric de la conversacion", + "Error occurred while allowing guests" : "Error en autorizant los convidats", + "Error occurred while disallowing guests" : "Error en autorizant pas mai los convidats", + "Error occurred when restricting the conversation to moderator" : "Error pendent la restriccion de la conversacion al moderator", + "Error occurred when opening the conversation to everyone" : "Error pendent la dubertura de la conversacion a tot lo monde", + "Conversation password has been saved" : "Lo senhal de conversacion es estat enregistrat", + "Conversation password has been removed" : "Lo senhal de conversacion es estat suprimit", + "Error occurred while saving conversation password" : "Error pendent l'enregistrament del senhal de la conversacion", + "Could not post message: {errorMessage}" : "Fracàs de la publicacion : {errorMessage}", + "An error occurred while fetching the participants" : "Una error s’es producha en recuperant los participants", + "Could not send invitation to {actorId}" : "Mandadís impossible del convit a {actorId}", + "Invitations sent" : "Invitacions enviadas", + "Error occurred when sending invitations" : "Error en enviant las invitacions", + "{guest} (guest)" : "{guest} (convidat)", + "Failed to add reaction" : "Apondon impossible de reaccion", + "Failed to remove reaction" : "Supression impossibla de reaccion", + "Error while uploading file \"{fileName}\"" : "Error en enviant lo fichièr « {fileName} »", + "Not enough free space to upload file \"{fileName}\"" : "Pas pro d’espaci liure per enviar lo fichièr « {fileName} »", + "You are not allowed to share files" : "Avètz pas lo drech de partejar de fichièrs", + "Error while sharing file" : "Error pendent lo partiment del fichièr", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Lo navegador qu’utilizatz es pas complètament pres en cargar per Nextcloud Talk. Mercés d’utilizar la darrièra version de Mozilla Firefox, Microsoft Edge, Google Chrome o Apple Safari.", + "Tomorrow – {timeLocale}" : "Deman – {timeLocale}", + "Lost connection to signaling server. Trying to reconnect." : "Connexion perduda al servidor de senhalament. Ensag de reconnexion.", + "Please reload the page." : "Volgatz recargar la pagina.", + "Do not disturb" : "Me desrengar pas", + "Away" : "Absent", + "Microphone {number}" : "Microfòn {number}", + "Camera {number}" : "Camèra {number}", + "Speaker {number}" : "Naut-parlaire {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Sembla que parlatz mentre que lo son es copat, mercés de vos restablir lo son per que vos entendan los autres", + "Access to microphone & camera is only possible with HTTPS" : "L’accès al microfòn e a la camèra es sonque possibla amb HTTPS", + "Please move your setup to HTTPS" : "Mercés de passar vòstra configuracion al HTTPS", + "Access to microphone & camera was denied" : "L’accès al microfòn e a la camèra es estat refusat", + "WebRTC is not supported in your browser" : "Vòstre navegador pren pas en carga lo WebRTC", + "Please use a different browser like Firefox or Chrome" : "Volgatz utilizar un navegador diferent coma Firefox o Chrome", + "Error while accessing microphone & camera" : "Error pendent l’accès al microfòn e a la camèra", + "%s Talk on your mobile devices" : "%sTalk on vòstres aparelhs mobiles", + "Join conversations at any time, anywhere, on any device." : "Participatz a las conversacion quand volètz, d’ont volètz, sus tot aparelh.", + "Android app" : "Aplicacion Android", + "iOS app" : "Aplicacion iOS", + "__language_name__" : "Occitan", + "Tasks" : "Prètzfaches", + "Open poll • You voted already" : "Sondatge・Avètz ja votat", + "Open poll • Click to vote" : "Sondatge・Clicar per votar", + "Poll • Ended" : "Sondatge・Terminat", + "Talk recording from {time} ({conversation})" : "Enregistrament Talk a partir de {time} ({conversation})", + "Submit vote" : "Enviar lo vòt", + "Your privacy setting has been saved" : "Paramètre de confidencialitat enregistrat", + "Failed to save sounds setting" : "Cargament impossible del paramètre de son", + "Sounds setting saved" : "Paramètres de son enregistrats", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Avètz rejonch la conversacion dins una autra fenèstra o periferic. Aquò es actualament pas pres en cargar per Nextcloud Talk doncas aquesta session es estada tampada." +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/pl.js b/l10n/pl.js new file mode 100644 index 0000000..ed27675 --- /dev/null +++ b/l10n/pl.js @@ -0,0 +1,2256 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "rozmowa", + "(Duration %s)" : "(Czas trwania %s)", + "You attended a call with {user1}" : "Brałeś udział w rozmowie z {user1}", + "_%n guest_::_%n guests_" : ["%n gość","%n gości","%n gości","%n gości"], + "You attended a call with {user1} and {user2}" : "Brałeś udział w rozmowie z {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Brałeś udział w rozmowie z {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Brałeś udział w rozmowie z {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Brałeś udział w rozmowie z {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["%n innym","%n innymi","%n innymi","%n innymi"], + "{actor} invited you to {call}" : "{actor} zaprosił Ciebie do {call}", + "You were invited to a conversation or had a call" : "Zostałeś zaproszony do rozmowy lub miałeś połączenie", + "Other activities" : "Inne aktywności", + "Talk" : "Talk", + "Guest" : "Gość", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Witamy w Nextcloud Talk!\nW tej rozmowie zostaniesz poinformowany o nowych funkcjach dostępnych w Nextcloud Talk.", + "## New in Talk %s" : "## Nowość w Talku %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge i Safari mogą być teraz używane do połączeń audio i wideo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Rozmowy indywidualne są teraz stałe i nie można ich przypadkowo zmienić na rozmowy grupowe. Również gdy jeden z uczestników opuszcza rozmowę, rozmowa nie jest automatycznie usuwana. Rozmowa zostanie usunięta z serwera tylko wtedy, gdy obaj uczestnicy opuszczą ją.", + "- You can now notify all participants by posting \"@all\" into the chat" : "* Możesz teraz powiadomić wszystkich uczestników, wysyłając na czacie wiadomość \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Za pomocą klawisza \"strzałka w górę\" możesz ponownie umieścić swoją ostatnią wiadomość", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk obsługuje teraz polecenia. Aby sprawdzić, czy administrator skonfigurował je, wyślij \"/help\" jako wiadomość na czacie", + "- With projects you can create quick links between conversations, files and other items" : "- Dzięki projektom możesz tworzyć szybkie łącza między rozmowami, plikami i innymi elementami", + "- You can now mention guests in the chat" : "- Możesz teraz wspomnieć o gościach na czacie", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Rozmowy mają teraz poczekalnie. Umożliwia to moderatorom dołączenie do czatu, aby porozmawiać o przygotowaniu spotkania, podczas oczekiwania na nią przez użytkowników i gości", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Możesz teraz bezpośrednio odpowiadać na wiadomości, dając innym użytkownikom szerszy kontekst na temat Twojej wiadomości", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Wyszukiwanie rozmów i uczestników będzie teraz również filtrować istniejące rozmowy, co znacznie ułatwi znajdowanie wcześniejszych rozmów", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Możesz teraz dodawać własne grupy użytkowników do rozmów dzięki zainstalowanej aplikacji kręgów", + "- Check out the new grid and call view" : "- Sprawdź nowy widok siatki i połączeń", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Możesz teraz przesyłać i przeciągać pliki bezpośrednio z urządzenia do czatu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Udostępniane pliki są teraz otwierane bezpośrednio w widoku czatu za pomocą aplikacji przeglądarki", + "- You can now search for chats and messages in the unified search in the top bar" : "- Możesz teraz wyszukiwać czaty i wiadomości w ujednoliconym wyszukiwaniu na górnym pasku", + "- Spice up your messages with emojis from the emoji picker" : "- Urozmaicaj swoje wiadomości emotikonami z selektora emoji", + "- You can now change your camera and microphone while being in a call" : "- Możesz teraz zmienić kamerę i mikrofon podczas rozmowy", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Nadaj swoim rozmowom kontekst za pomocą opisu i otwórz go, aby zalogowani użytkownicy mogli go znaleźć i dołączyć do Ciebie", + "- See a read status and send failed messages again" : "- Zobacz status odczytu i ponownie wyślij nieodczytane wiadomości", + "- Raise your hand in a call with the R key" : "- Podnieś rękę w rozmowie za pomocą klawisza R.", + "- Join the same conversation and call from multiple devices" : "- Dołącz do tej samej rozmowy i wykonuj połączenia z wielu urządzeń", + "- Send voice messages, share your location or contact details" : "- Wysyłaj wiadomości głosowe, udostępniaj swoją lokalizację lub dane kontaktowe", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodaj grupy do rozmowy, a nowi członkowie grupy zostaną automatycznie dodani jako uczestnicy", + "- A preview of your audio and video is shown before joining a call" : "- Podgląd audio i wideo jest wyświetlany przed dołączeniem do połączenia", + "- You can now blur your background in the newly designed call view" : "- Możesz teraz rozmyć tło w nowo zaprojektowanym widoku połączenia", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorzy mogą teraz przydzielać uczestnikom ogólne i indywidualne uprawnienia", + "- You can now react to chat messages" : "- Możesz teraz reagować na wiadomości na czacie", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na pasku bocznym możesz teraz znaleźć przegląd najnowszych udostępnionych elementów", + "- Use a poll to collect the opinions of others or settle on a date" : "- Użyj sondy, aby zebrać opinie innych lub ustalić datę", + "- Configure an expiration time for chat messages" : "- Skonfiguruj czas wygaśnięcia wiadomości na czacie", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Rozpocznij rozmowy bez powiadamiania innych o dużych rozmowach. Po rozpoczęciu połączenia możesz wysyłać indywidualne powiadomienia o połączeniach.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Wysyłaj wiadomości na czacie bez powiadamiania odbiorców, jeśli nie jest to pilne", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoje można teraz uzupełniać automatycznie, wpisując \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Połącz różne elementy za pomocą nowego inteligentnego wyboru, wpisując \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorzy mogą teraz tworzyć pokoje podgrup (wymaga zaplecza o wysokiej wydajności)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Można teraz nagrywać rozmowy (wymaga zaplecza o wysokiej wydajności)", + "- Conversations can now have an avatar or emoji as icon" : "- Rozmowy mogą teraz mieć awatar lub emoji jako ikonę", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Oprócz rozmytego tła w wideo rozmowach dostępne są teraz wirtualne tła", + "- Reactions are now available during calls" : "- Reakcje są teraz dostępne podczas połączeń", + "- Typing indicators show which users are currently typing a message" : "- Wskaźniki pisania pokazują, którzy użytkownicy aktualnie piszą wiadomość", + "- Groups can now be mentioned in chats" : "- Można teraz wspominać o grupach na czatach", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Nagrania rozmów są automatycznie transkrybowane, jeśli zarejestrowana jest aplikacja dostawcy transkrypcji", + "- Chat messages can be translated if a translation provider app is registered" : "- Wiadomości czatu można tłumaczyć, jeśli zarejestrowana jest aplikacja dostawcy tłumaczeń", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** może być teraz używany w _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Dostępne są teraz webhooki umożliwiające wdrażanie botów. Zobacz dokumentację, aby uzyskać więcej informacji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ustaw przypomnienie w wiadomości na czacie, aby otrzymać później powiadomienie", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Korzystaj z konwersacji **Notatka dla siebie**, aby robić notatki i udostępniać informacje między swoimi urządzeniami", + "- Captions allow to send a message with a file at the same time" : "- Tytuły umożliwiają jednoczesne wysłanie wiadomości z plikiem", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Wideo mówiącego jest teraz widoczne podczas udostępniania ekranu, a reakcje w połączeniach są animowane", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Wiadomości mogą teraz być edytowane przez zalogowanych autorów i moderatorów przez 6 godzin", + "- Unsent message drafts are now saved in your browser" : "- Wersje robocze niewysłanych wiadomości są teraz zapisywane w Twojej przeglądarce", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Rozmowy tekstowe można teraz prowadzić w sposób stowarzyszony z innymi serwerami Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorzy mogą teraz blokować konta i gości, aby uniemożliwić im ponowne dołączenie do rozmowy", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadchodzące połączenia z powiązanych wydarzeń w kalendarzu i zastępstw, gdy jest się poza biurem są teraz wyświetlane w rozmowach", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Połączenia mogą być teraz wykonywane w sposób federacyjny z innymi serwerami Talk (wymaga wysokowydajnego zaplecza)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Przedstawiamy klienta stacjonarnego Nextcloud Talk dla systemów Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Podsumowuj nagrania rozmów i nieprzeczytane wiadomości na czatach za pomocą Asystenta Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Usprawnienie spotkań z rozpoznawaniem zaproszonych gości na podstawie ich adresu e-mail, importem list uczestników, szkicami ankiet i pobieraniem list uczestników rozmów", + "- Archive conversations to stay focused" : "- Archiwizuj rozmowy, aby zachować koncentrację", + "- Schedule a meeting into your calendar from within a conversation" : "- Zaplanuj spotkanie w kalendarzu z poziomu rozmowy", + "- Search for messages of the current conversation directly in the right sidebar" : "- Wyszukaj wiadomości z bieżącej rozmowy bezpośrednio na pasku bocznym po prawej stronie", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Zobacz więcej rozmów na pierwszy rzut oka dzięki nowej, kompaktowej liście (można ją włączyć w ustawieniach rozmów)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "– Rozmowy spotkań są teraz synchronizowane z tytułem i opisem z kalendarza i pozostają ukryte w wynikach wyszukiwania aż do momentu zbliżenia się terminu rozpoczęcia.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "– Oznacz rozmowy jako wrażliwe w ustawieniach powiadomień, aby ukryć treść wiadomości na liście rozmów i w powiadomieniach.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "– Aby otrzymywać powiadomienia push podczas trybu „Nie przeszkadzać”, oznacz rozmowy jako ważne", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "– Dodaj innych uczestników do połączenia jeden na jeden, aby dynamicznie utworzyć nowe połączenie grupowe", + "- Use threads to keep your chat and discussions organized" : "- Używaj wątków, aby utrzymać porządek w czatach i dyskusjach", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Transkrypcje na żywo są teraz dostępne podczas rozmowy (wymaga aplikacji ExApp do transkrypcji na żywo i wydajnego backendu)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatorzy mogą teraz przypinać wiadomości, aby były wyświetlane na górze", + "- Schedule a message to send it at a later time" : "- Zaplanuj wysłanie wiadomości na później", + "_All %n participant_::_All %n participants_" : ["Wszyscy %n uczestnik","Wszyscy %n uczestników","Wszyscy %n uczestników","Wszyscy %n uczestników"], + "Talk updates ✅" : "Aktualizacje Talka ✅", + "Reaction deleted by author" : "Reakcja usunięta przez autora", + "{actor} created the conversation" : "{actor} utworzył rozmowę", + "You created the conversation" : "Utworzyłeś rozmowę", + "System created the conversation" : "System utworzył rozmowę", + "An administrator created the conversation" : "Administrator utworzył rozmowę", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} zmienił nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Zmieniłeś nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrator zmienił nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "{actor} set the description" : "{actor} ustawił opis", + "You set the description" : "Ustawiłeś opis", + "An administrator set the description" : "Administrator ustawił opis", + "{actor} removed the description" : "{actor} usunął opis", + "You removed the description" : "Usunąłeś opis", + "An administrator removed the description" : "Administrator usunął opis", + "You started a silent call" : "Rozpocząłeś cichą rozmowę", + "Outgoing silent call" : "Wychodzące, ciche połączenie", + "{actor} started a silent call" : "{actor} rozpoczął cichą rozmowę", + "Incoming silent call" : "Przychodzące ciche połączenie", + "You started a call" : "Rozpocząłeś połączenie", + "Outgoing call" : "Połączenie wychodzące", + "{actor} started a call" : "{actor} rozpoczął połączenie", + "Incoming call" : "Przychodzące połączenie", + "{actor} joined the call" : "{actor} dołączył do rozmowy", + "You joined the call" : "Dołączyłeś do rozmowy", + "{actor} left the call" : "{actor} rozłączył się", + "You left the call" : "Rozłączyłeś się", + "{actor} unlocked the conversation" : "{actor} odblokował rozmowę", + "You unlocked the conversation" : "Odblokowałeś rozmowę", + "An administrator unlocked the conversation" : "Administrator odblokował rozmowę", + "{actor} locked the conversation" : "{actor} zablokował rozmowę", + "You locked the conversation" : "Zablokowałeś rozmowę", + "An administrator locked the conversation" : "Administrator zablokował rozmowę", + "{actor} limited the conversation to the current participants" : "{actor} ograniczył rozmowę do obecnych uczestników", + "You limited the conversation to the current participants" : "Ograniczyłeś rozmowę do obecnych uczestników", + "An administrator limited the conversation to the current participants" : "Administrator ograniczył rozmowę do obecnych uczestników", + "{actor} opened the conversation to registered users" : "{actor} otworzył rozmowę dla zarejestrowanych użytkowników", + "You opened the conversation to registered users" : "Otworzyłeś rozmowę dla zarejestrowanych użytkowników", + "An administrator opened the conversation to registered users" : "Administrator otworzył rozmowę dla zarejestrowanych użytkowników", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otworzył rozmowę zarejestrowanym użytkownikom i użytkownikom utworzonym za pomocą aplikacji Goście", + "You opened the conversation to registered users and users created with the Guests app" : "Otworzyłeś rozmowę dla zarejestrowanych użytkowników i użytkowników utworzonych za pomocą aplikacji Goście", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrator otworzył rozmowę zarejestrowanym użytkownikom i użytkownikom utworzonym za pomocą aplikacji Goście", + "The conversation is now open to everyone" : "Rozmowa jest teraz otwarta dla wszystkich", + "{actor} opened the conversation to everyone" : "{actor} otworzył rozmowę dla wszystkich", + "You opened the conversation to everyone" : "Otworzyłeś rozmowę dla wszystkich", + "{actor} restricted the conversation to moderators" : "{actor} ograniczył rozmowę tylko dla moderatorów", + "You restricted the conversation to moderators" : "Ograniczyłeś rozmowę tylko dla moderatorów", + "{actor} started breakout rooms" : "{actor} założył pokoje podgrup", + "You started breakout rooms" : "Założyłeś pokoje podgrup", + "{actor} stopped breakout rooms" : "{actor} zatrzymał pokoje podgrup", + "You stopped breakout rooms" : "Zatrzymałeś pokoje podgrup", + "{actor} allowed guests" : "{actor} pozwolił gościom", + "You allowed guests" : "Pozwoliłeś gościom", + "An administrator allowed guests" : "Administrator pozwolił gościom", + "{actor} disallowed guests" : "{actor} odzrzucił gości", + "You disallowed guests" : "Odrzuciłeś gości", + "An administrator disallowed guests" : "Administrator zabronił gościom", + "{actor} set a password" : "{actor} ustawił hasło", + "You set a password" : "Ustawiłeś hasło", + "An administrator set a password" : "Administrator ustawił hasło", + "{actor} removed the password" : "{actor} usunął hasło", + "You removed the password" : "Usunąłeś hasło", + "An administrator removed the password" : "Administrator usunął hasło", + "{actor} added {user}" : "{actor} dodał {user}", + "You joined the conversation" : "Dołączyłeś do rozmowy", + "{actor} joined the conversation" : "{actor} dołączył do rozmowy", + "You added {user}" : "Dodałeś {user}", + "{actor} added you" : "{actor} dodał Ciebie", + "An administrator added you" : "Administrator dodał Ciebie", + "An administrator added {user}" : "Administrator dodał {user}", + "You left the conversation" : "Opuściłeś rozmowę", + "{actor} left the conversation" : "{actor} opuścił rozmowę", + "{actor} removed {user}" : "{actor} usunął {user}", + "You removed {user}" : "Usunąłeś {user}", + "{actor} removed you" : "{actor} usunął Ciebie", + "An administrator removed you" : "Administrator usunął Ciebie", + "An administrator removed {user}" : "Administrator usunął {user}", + "{actor} invited {federated_user}" : "{actor} zaprosił {federated_user}", + "You invited {federated_user}" : "Zaprosiłeś {federated_user}", + "You accepted the invitation" : "Przyjąłeś zaproszenie", + "{actor} invited you" : "{actor} zaprosił Ciebie", + "An administrator invited you" : "Administrator zaprosił Ciebie", + "An administrator invited {federated_user}" : "Administrator zaprosił {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} przyjął zaproszenie", + "{actor} removed {federated_user}" : "{actor} usunął {federated_user}", + "You removed {federated_user}" : "Usunąłeś {federated_user}", + "You declined the invitation" : "Odrzuciłeś zaproszenie", + "An administrator removed {federated_user}" : "Administrator usunął {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odrzucił zaproszenie", + "{actor} added group {group}" : "{actor} dodał grupę {group}", + "You added group {group}" : "Dodałeś grupę {group}", + "An administrator added group {group}" : "Administrator dodał grupę {group}", + "{actor} removed group {group}" : "{actor} usunął grupę {group}", + "You removed group {group}" : "Usunąłeś grupę {group}", + "An administrator removed group {group}" : "Administrator usunął grupę {group}", + "{actor} added team {circle}" : "{actor} dodał zespół {circle}", + "You added team {circle}" : "Dodałeś zespół {circle}", + "An administrator added team {circle}" : "Administrator dodał zespół {circle}", + "{actor} removed team {circle}" : "{actor} usunął zespół {circle}", + "You removed team {circle}" : "Usunąłeś zespół {circle}", + "An administrator removed team {circle}" : "Administrator usunął zespół {circle}", + "{actor} added {phone}" : "{actor} dodał {phone}", + "You added {phone}" : "Dodałeś {phone}", + "An administrator added {phone}" : "Administrator dodał {phone}", + "{actor} removed {phone}" : "{actor} usunął {phone}", + "You removed {phone}" : "Usunąłeś {phone}", + "An administrator removed {phone}" : "Administrator usunął telefon {phone}", + "{actor} promoted {user} to moderator" : "{actor} awansował {user} na moderatora", + "You promoted {user} to moderator" : "Awansowałeś {user} na moderatora", + "{actor} promoted you to moderator" : "{actor} awansował Ciebie na moderatora", + "An administrator promoted you to moderator" : "Administrator awansował Ciebie na moderatora", + "An administrator promoted {user} to moderator" : "Administrator awansował {user} na moderatora", + "{actor} demoted {user} from moderator" : "{actor} zdegradował {user} z moderatora", + "You demoted {user} from moderator" : "Zdegradowałeś {user} z moderatora", + "{actor} demoted you from moderator" : "{actor} zdegradował Ciebie z moderatora", + "An administrator demoted you from moderator" : "Administrator zdegradował Ciebie z moderatora", + "An administrator demoted {user} from moderator" : "Administrator zdegradował {user} z moderatora", + "{actor} shared a file which is no longer available" : "{actor} udostępnił plik, który nie jest już dostępny", + "You shared a file which is no longer available" : "Udostępniłeś plik, który nie jest już dostępny", + "File shares are currently not supported in federated conversations" : "Współdzielenie plików nie jest obecnie obsługiwane w konwersacjach federacyjnych", + "The shared location is malformed" : "Udostępniona lokalizacja jest zniekształcona", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} skonfigurował Matterbridge, aby zsynchronizować tę rozmowę z innymi czatami", + "You set up Matterbridge to synchronize this conversation with other chats" : "Skonfigurowałeś Matterbridge, aby zsynchronizować tę rozmowę z innymi czatami", + "{actor} created thread {title}" : "{actor} utworzył wątek {title}", + "You created thread {title}" : "Utworzyłeś wątek {title}", + "{actor} renamed thread {title}" : "{actor} zmienił nazwę wątku {title}", + "You renamed thread {title}" : "Zmieniłeś nazwę wątku {title}", + "{actor} updated the Matterbridge configuration" : "{actor} zaktualizował konfigurację Matterbridge", + "You updated the Matterbridge configuration" : "Zaktualizowałeś konfigurację Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} usunął konfigurację Matterbridge", + "You removed the Matterbridge configuration" : "Usunąłeś konfigurację Matterbridge", + "{actor} started Matterbridge" : "{actor} uruchomił Matterbridge", + "You started Matterbridge" : "Uruchomiłeś Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zatrzymał Matterbridge", + "You stopped Matterbridge" : "Zatrzymałeś Matterbridge", + "{actor} deleted a message" : "{actor} usunął wiadomość", + "You deleted a message" : "Usunąłeś wiadomość", + "{actor} edited a message" : "{actor} edytował wiadomość", + "You edited a message" : "Edytowałeś wiadomość", + "{actor} pinned a message" : "{actor} przypiął wiadomość", + "You pinned a message" : "Przypiąłeś wiadomość", + "{actor} unpinned a message" : "{actor} odpiął wiadomość", + "Message was automatically unpinned" : "Wiadomość została automatycznie odpięta", + "You unpinned a message" : "Odpiąłeś wiadomość", + "{actor} deleted a reaction" : "{actor} usunął reakcję", + "You deleted a reaction" : "Usunąłeś reakcję", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ustawiasz termin ważności wiadomości na %n tydzień","Ustawiasz termin ważności wiadomości na %n tygodnie","Ustawiasz termin ważności wiadomości na %n tygodni","Ustawiasz termin ważności wiadomości na %n tygodni"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ustawiasz termin ważności wiadomości na %n dzień","Ustawiasz termin ważności wiadomości na %n dni","Ustawiasz termin ważności wiadomości na %n dni","Ustawiasz termin ważności wiadomości na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ustawiasz termin ważności wiadomości na %n godzinę","Ustawiasz termin ważności wiadomości na %n godziny","Ustawiasz termin ważności wiadomości na %n godzin","Ustawiasz termin ważności wiadomości na %n godzin"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ustawiasz termin ważności wiadomości na %n minutę","Ustawiasz termin ważności wiadomości na %n minuty","Ustawiasz termin ważności wiadomości na %n minut","Ustawiasz termin ważności wiadomości na %n minut"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ustawił wygaśnięcie wiadomości na %n tydzień","{actor} ustawił wygaśnięcie wiadomości na %n tygodnie","{actor} ustawił wygaśnięcie wiadomości na %n tygodni","{actor} ustawił wygaśnięcie wiadomości na %n tygodni"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ustawił wygaśnięcie wiadomości na %n dzień","{actor} ustawił wygaśnięcie wiadomości na %n dni","{actor} ustawił wygaśnięcie wiadomości na %n dni","{actor} ustawił wygaśnięcie wiadomości na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ustawił wygaśnięcie wiadomości na %n godzinę","{actor} ustawił wygaśnięcie wiadomości na %n godziny","{actor} ustawił wygaśnięcie wiadomości na %n godzin","{actor} ustawił wygaśnięcie wiadomości na %n godzin"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ustawił wygaśnięcie wiadomości na %n minutę","{actor} ustawił wygaśnięcie wiadomości na %n minuty","{actor} ustawił wygaśnięcie wiadomości na %n minut","{actor} ustawił wygaśnięcie wiadomości na %n minut"], + "{actor} disabled message expiration" : "{actor} wyłączył wygaśnięcie wiadomości", + "You disabled message expiration" : "Wyłączyłeś wygaśnięcie wiadomości", + "{actor} cleared the history of the conversation" : "{actor} wyczyścił historię rozmowy", + "You cleared the history of the conversation" : "Wyczyściłeś historię rozmowy", + "{actor} set the conversation picture" : "{actor} ustawił obraz rozmowy", + "You set the conversation picture" : "Ustawiłeś obraz rozmowy", + "{actor} removed the conversation picture" : "{actor} usunął obraz rozmowy", + "You removed the conversation picture" : "Usunąłeś obraz rozmowy", + "{actor} ended the poll {poll}" : "{actor} zakończył sondę {poll}", + "You ended the poll {poll}" : "Zakończyłeś sondę {poll}", + "{actor} started the video recording" : "{actor} rozpoczął nagrywanie wideo", + "You started the video recording" : "Rozpocząłeś nagrywanie wideo", + "{actor} stopped the video recording" : "{actor} zatrzymał nagrywanie wideo", + "You stopped the video recording" : "Zatrzymałeś nagrywanie wideo", + "{actor} started the audio recording" : "{actor} rozpoczął nagrywanie dźwięku", + "You started the audio recording" : "Rozpocząłeś nagrywanie dźwięku", + "{actor} stopped the audio recording" : "{actor} zatrzymał nagrywanie dźwięku", + "You stopped the audio recording" : "Zatrzymałeś nagrywanie dźwięku", + "The recording failed" : "Nagrywanie nie powiodło się", + "Someone voted on the poll {poll}" : "Ktoś zagłosował w sondzie {poll}", + "Message deleted by author" : "Wiadomość usunięta przez autora", + "Message deleted by {actor}" : "Wiadomość usunięta przez {actor}", + "Message deleted by you" : "Wiadomość usunięta przez Ciebie", + "Deleted user" : "Usunięty użytkownik", + "Unknown number" : "Nieznany numer", + "Administration" : "Administracja", + "System" : "System", + "%s (guest)" : "%s (gość)", + "Missed call" : "Nieodebrane połączenie", + "Unanswered call" : "Połączenie bez odpowiedzi", + "Call ended (Duration {duration})" : "Połączenie zakończone (czas trwania {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} zakończył połączenie (Czas trwania {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Połączenie z %n gościem zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Połączenie z %n gościem zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} zakończył połączenie z gościem (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1} ended (Duration {duration})" : "Połączenie z {user1} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} zakończył połączenie z {user1} (Czas trwania {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1} i {user2} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Połączenie z {user1} i {user2} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} zakończył połączenie z {user1} i {user2} (Czas trwania {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2} i {user3} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Połączenie z {user1}, {user2} i {user3} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2} i {user3} (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3} i {user4} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3} i {user4} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2}, {user3} i {user4} (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3}, {user4} i {user5} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3}, {user4} i {user5} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2}, {user3}, {user4} i {user5} (Czas trwania {duration})", + "Message of {user} in {conversation}" : "Wiadomość od {user} w {conversation}", + "Message of {user}" : "Wiadomość od {user}", + "Message of a deleted user in {conversation}" : "Wiadomość od usuniętego użytkownika w {conversation}", + "Talk conversations" : "Rozmowy Talk", + "Talk to %s" : "Rozmawiaj z %s", + "An error occurred. Please contact your administrator." : "Wystąpił błąd. Skontaktuj się z administratorem.", + "App disabled" : "Aplikacja wyłączona", + "Conversation subfolders are disabled" : "Podfoldery rozmów są wyłączone", + "Storage quota exceeded" : "Limit przekroczony", + "Could not prepare conversation folder" : "Nie można przygotować folderu rozmowy", + "File not found" : "Nie odnaleziono pliku", + "Path must point to a file" : "Ścieżka musi wskazywać na plik", + "File is not inside the conversation draft folder for this room" : "Plik nie znajduje się w folderze wersji roboczych rozmowy dla tego pokoju", + "File is not shared, or shared but not with the user" : "Plik nie jest udostępniony, albo nie jest dostępny dla użytkownika", + "No account available to delete." : "Brak konta do usunięcia.", + "Poll" : "Sonda", + "Password needs to be set" : "Należy ustawić hasło", + "Uploading the file failed" : "Przesyłanie pliku nie powiodło się", + "No image file provided" : "Nie wskazano pliku obrazu", + "File is too big" : "Plik jest za duży", + "Invalid file provided" : "Wskazano nieprawidłowy plik", + "Invalid image" : "Nieprawidłowy obraz", + "Unknown filetype" : "Nieznany typ pliku", + "Talk mentions" : "Wzmianki w Rozmowach", + "More conversations" : "Więcej rozmów", + "Say hi to your friends and colleagues!" : "Przywitaj się z przyjaciółmi i współpracownikami!", + "No unread mentions" : "Brak nieprzeczytanych wzmianek", + "Call in progress" : "Trwa połączenie", + "You were mentioned" : "Wspomniano o Tobie", + "Write to conversation" : "Napisz w rozmowie", + "Writes event information into a conversation of your choice" : "Zapisuje informacje o zdarzeniu w wybranej rozmowie", + "Missing email field in header line" : "Brak pola adresu e-mail w wierszu nagłówka", + "Following lines are invalid: %s" : "Następujące wiersze są nieprawidłowe: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$szaprosił Cię do rozmowy \"%2$s\".", + "You were invited to conversation \"%s\"." : "Otrzymujesz zaproszenie do rozmowy \"%s\".", + "Conversation invitation" : "Zaproszenie do rozmowy", + "Scheduled time" : "Zaplanowany czas", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Możesz także połączyć się przez telefon z następującymi detalami", + "Dial-in information" : "Informacje dotyczące połączeń telefonicznych", + "Meeting ID" : "ID spotkania", + "Your PIN" : "Twój kod PIN", + "Click the button below to join the lobby now." : "Kliknij przycisk poniżej, aby dołączyć do poczekalni.", + "Click the link below to join the lobby now." : "Kliknij link poniżej, aby dołączyć do poczekalni.", + "Join lobby for \"%s\"" : "Dołącz do poczekalni dla \"%s\"", + "Click the button below to join the conversation now." : "Kliknij przycisk poniżej, aby dołączyć do rozmowy.", + "Click the link below to join the conversation now." : "Kliknij poniższy link, aby dołączyć do rozmowy.", + "Join \"%s\"" : "Dołącz \"%s\"", + "Meeting" : "Zebranie", + "Password request: %s" : "Żądanie hasła: %s", + "Private conversation" : "Rozmowa prywatna", + "Deleted user (%s)" : "Usunięty użytkownik (%s)", + "Failed to upload call recording" : "Nie udało się przesłać nagrania rozmowy", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Serwer nagrywający nie mógł przesłać nagrania rozmowy {call}. Skontaktuj się z administracją.", + "Share to chat" : "Udostępnij na czacie", + "Dismiss notification" : "Odrzuć powiadomienie", + "Call recording now available" : "Nagrywanie rozmów jest już dostępne", + "The recording for the call in {call} was uploaded to {file}." : "Nagranie rozmowy z {call} zostało przesłane do {file}.", + "Transcript now available" : "Transkrypcja jest już dostępna", + "The transcript for the call in {call} was uploaded to {file}." : "Transkrypcja rozmowy w {call} została przesłana do {file}.", + "Failed to transcript call recording" : "Nie udało się dokonać transkrypcji nagrania rozmowy", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serwer nie zapisał nagrania w pliku {file} dla połączenia {call}. Skontaktuj się z administracją.", + "Call summary now available" : "Podsumowanie rozmowy już dostępne", + "The summary for the call in {call} was uploaded to {file}." : "Podsumowanie rozmowy z {call} zostało przesłane do {file}.", + "Failed to summarize call recording" : "Nie udało się podsumować nagrywania rozmowy", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serwer nie mógł podsumować nagrania w {file} dla połączenia z {call}. Skontaktuj się z administracją.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} zaprosił Cię do dołączenia do {roomName} na {remoteServer}", + "Accept" : "Akceptuj", + "Decline" : "Odrzuć", + "{user1} invited you to a federated conversation" : "{user1} zaprosił Cię do rozmowy federacyjnej", + "Someone reacted" : "Ktoś zareagował", + "New message" : "Nowa wiadomość", + "Reminder" : "Przypomnienie", + "Someone mentioned you" : "Ktoś o Tobie wspomniał", + "Notification" : "Powiadomienie", + "Someone reacted in a private conversation" : "Ktoś zareagował w prywatnej rozmowie", + "You received a message in a private conversation" : "Otrzymałeś wiadomość w prywatnej rozmowie", + "Reminder in a private conversation" : "Przypomnienie w prywatnej rozmowie", + "Someone mentioned you in a private conversation" : "Ktoś wspomniał o Tobie w prywatnej rozmowie", + "Notification in a private conversation" : "Powiadomienie w prywatnej rozmowie", + "Reminder: You in {call}" : "Przypomnienie: Jesteś w {call}", + "Reminder: {user} in {call}" : "Przypomnienie: {user} w {call}", + "Reminder: Deleted user in {call}" : "Przypomnienie: Usunięto użytkownika w {call}", + "Reminder: {guest} (guest) in {call}" : "Przypomnienie: {guest} (guest) w {call}", + "Reminder: Guest in {call}" : "Przypomnienie: Gość w {call}", + "{user} reacted with {reaction}" : "{user} zareagował {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} zareagował {reaction} w rozmowie {call}", + "Deleted user reacted with {reaction} in {call}" : "Usunięty użytkownik zareagował {reaction} w rozmowie {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gość) zareagował {reaction} w rozmowie {call}", + "Guest reacted with {reaction} in {call}" : "Gość zareagował {reaction} w trakcie {call}", + "{user} in {call}" : "{user} w {call}", + "Deleted user in {call}" : "Usunięty użytkownik w {call}", + "{guest} (guest) in {call}" : "{guest} (gość) w {call}", + "Guest in {call}" : "Gość w {call}", + "{user} sent you a private message" : "{user} wysłał Ci prywatną wiadomość", + "{user} sent a message in conversation {call}" : "{user} wysłał wiadomość podczas rozmowy {call}", + "A deleted user sent a message in conversation {call}" : "Usunięty użytkownik wysłał wiadomość w rozmowie {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gość) wysłał wiadomość w rozmowie {call}", + "A guest sent a message in conversation {call}" : "Gość wysłał wiadomość podczas rozmowy {call}", + "{user} replied to your private message" : "{user} odpowiedział na Twoją prywatną wiadomość", + "{user} replied to your message in conversation {call}" : "{user} odpowiedział na Twoją wiadomość w rozmowie {call}", + "A deleted user replied to your message in conversation {call}" : "Usunięty użytkownik odpowiedział na Twoją wiadomość w rozmowie {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gość) odpowiedział na Twoją wiadomość w rozmowie {call}", + "A guest replied to your message in conversation {call}" : "Gość odpowiedział na Twoją wiadomość w rozmowie {call}", + "Reminder: You in private conversation {call}" : "Przypomnienie: Prowadzisz rozmowę prywatną {call}", + "Reminder: A deleted user in private conversation {call}" : "Przypomnienie: Usunięty użytkownik w rozmowie prywatnej {call}", + "Reminder: {user} in private conversation" : "Przypomnienie: {user} w rozmowie prywatnej", + "Reminder: You in conversation {call}" : "Przypomnienie: Jesteś w rozmowie {call}", + "Reminder: {user} in conversation {call}" : "Przypomnienie: {user} w rozmowie {call}", + "Reminder: A deleted user in conversation {call}" : "Przypomnienie: Usunięty użytkownik w rozmowie {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Przypomnienie: {guest} (gość) w rozmowie {call}", + "Reminder: A guest in conversation {call}" : "Przypomnienie: Gość w rozmowie {call}", + "{user} reacted with {reaction} to your private message" : "{user} odpowiedział {reaction} na Twoją prywatną wiadomość", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Usunięty użytkownik odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gość) odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gość odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "{user} mentioned you in a private conversation" : "{user} wspomniał o Tobie w prywatnej rozmowie", + "{user} mentioned group {group} in conversation {call}" : "{user} wspomniał o grupie {group} w rozmowie {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} wspomniał o zespole {team} w rozmowie {call}", + "{user} mentioned everyone in conversation {call}" : "{user} wspomniał o wszystkich w rozmowie {call}", + "{user} mentioned you in conversation {call}" : "{user} wspomniał o Tobie w rozmowie {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Usunięty użytkownik wspomniał o grupie {group} w rozmowie {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Usunięty użytkownik wspomniał o zespole {team} w rozmowie {call}", + "A deleted user mentioned everyone in conversation {call}" : "Usunięty użytkownik wspomniał o wszystkich w rozmowie {call}", + "A deleted user mentioned you in conversation {call}" : "Usunięty użytkownik wspomniał o Tobie w rozmowie {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gość) wspomniał o grupie {group} w rozmowie {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gość) wspomniał o zespole {team} w rozmowie {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gość) wspomniał o wszystkich w rozmowie {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gość) wspomniał o Tobie w rozmowie {call}", + "A guest mentioned group {group} in conversation {call}" : "Gość wspomniał o grupie {group} w rozmowie {call}", + "A guest mentioned team {team} in conversation {call}" : "Gość wspomniał o zespole {team} w rozmowie {call}", + "A guest mentioned everyone in conversation {call}" : "Gość wspomniał o wszystkich w rozmowie {call}", + "A guest mentioned you in conversation {call}" : "Gość wspomniał o Tobie w rozmowie {call}", + "View message" : "Wyświetl wiadomość", + "Dismiss reminder" : "Odrzuć przypomnienie", + "View chat" : "Wyświetl rozmowę", + "{user} invited you to a group conversation: {call}" : "{user} zaprosił Ciebie na rozmowę grupową: {call}", + "Join call" : "Dołącz do połączenia", + "Answer call" : "Odbierz połączenie", + "{user} would like to talk with you" : "{user} chciałby z Tobą porozmawiać", + "Call back" : "Oddzwoń", + "You missed a call from {user}" : "Przeoczyłeś połączenie od {user}", + "Accept call" : "Zaakceptuj połączenie", + "Incoming phone call from {call}" : "Nadchodząca rozmowa telefoniczna od {call}", + "You missed a phone call from {call}" : "Nieodebrane połączenie telefoniczne od {call}", + "A group call has started in {call}" : "Połączenie grupowe zostało rozpoczęte w {call}", + "You missed a group call in {call}" : "Przeoczyłeś połączenie grupowe w {call}", + "{email} is requesting the password to access {file}" : "{email} prosi o hasło dostępu do {file}", + "{email} tried to request the password to access {file}" : "{email} próbował poprosić o hasło dostępu do {file}", + "Someone is requesting the password to access {file}" : "Ktoś prosi o hasło, aby uzyskać dostęp do {file}", + "Someone tried to request the password to access {file}" : "Ktoś próbował poprosić o hasło dostępu do {file}", + "Open settings" : "Otwórz ustawienia", + "Hosted signaling server added" : "Dodano hostowany serwer sygnalizacyjny", + "The hosted signaling server is now configured and will be used." : "Hostowany serwer sygnalizacyjny jest teraz skonfigurowany i gotowy do użycia.", + "Hosted signaling server removed" : "Usunięto hostowany serwer sygnalizacyjny", + "The hosted signaling server was removed and will not be used anymore." : "Hostowany serwer sygnalizacyjny został usunięty i nie będzie już używany.", + "Hosted signaling server changed" : "Zmieniono hostowany serwer sygnalizacyjny", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Konto hostowanego serwera sygnalizacyjnego zmieniło status z \"{oldstatus}\" na \"{newstatus}\".", + "pending" : "oczekujące", + "active" : "aktywne", + "expired" : "wygasłe", + "blocked" : "zablokowane", + "error" : "błąd", + "The certificate of {host} expires in {days} days" : "Certyfikat {host} wygasa za {days} dni", + "The certificate of {host} expired" : "Certyfikat {host} wygasł", + "Contact via Talk" : "Kontakt przez Talk", + "Open Talk" : "Otwórz Talka", + "Default" : "Domyślnie", + "Send messages, create threads, and start voice and video calls." : "Wysyłaj wiadomości, twórz wątki oraz rozpoczynaj połączenia głosowe i wideo.", + "Presentation" : "Prezentacja", + "Voice room" : "Pokój głosowy", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Dołącz bezpośrednio do rozmowy, idealne do szybkich spotkań lub spontanicznych rozmów.", + "Webinar" : "Webinarium", + "Conversations" : "Rozmowy", + "Messages in current conversation" : "Wiadomości w bieżącej rozmowie", + "{user}" : "{user}", + "Messages" : "Wiadomości", + "{user} in {conversation}" : "{user} w {conversation}", + "Messages in other conversations" : "Wiadomości w innych rozmowach", + "One-to-one rooms always need to show the other users avatar" : "Pokoje rozmów indywidualnych zawsze muszą pokazywać awatary innych użytkowników", + "Invalid emoji character" : "Nieprawidłowy znak emoji", + "Invalid background color" : "Nieprawidłowy kolor tła", + "Avatar image is not square" : "Obraz awatara nie jest kwadratowy", + "Room {number}" : "Pokój {number}", + "Other" : "Inne", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nie można żądać wersji testowej, ponieważ serwer testowy jest nieosiągalny. Spróbuj ponownie później.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Wystąpił problem z uwierzytelnieniem tej instancji. Może nie jest dostępny z zewnątrz, aby zweryfikować jego adres URL.", + "Something unexpected happened." : "Wydarzyło się coś nieoczekiwanego.", + "The URL is invalid." : "Adres URL jest nieprawidłowy.", + "An HTTPS URL is required." : "Adres URL HTTPS jest wymagany.", + "The email address is invalid." : "Adres e-mail jest nieprawidłowy.", + "The language is invalid." : "Język jest nieprawidłowy.", + "The country is invalid." : "Kraj jest nieprawidłowy.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Wystąpił problem z żądaniem o wersję testową. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "Too many requests are send from your servers address. Please try again later." : "Zbyt wiele żądań jest wysyłanych z adresu Twojego serwera. Spróbuj ponownie później.", + "There is already a trial registered for this Nextcloud instance." : "Jest już zarejestrowany okres testowy dla tej instancji Nextcloud.", + "Something unexpected happened. Please try again later." : "Wydarzyło się coś nieoczekiwanego. Spróbuj ponownie później.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nie można żądać o wersję testową, ponieważ serwer testowy zadziałał nieprawidłowo. Spróbuj ponownie później.", + "Trial requested but failed to get account information. Please check back later." : "Próba testowa nie powiodła się. Nie można było uzyskać informacji o koncie. Sprawdź później.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Wystąpił problem z uwierzytelnieniem tego żądania. Może nie jest dostępny z zewnątrz, aby zweryfikować jego adres URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nie udało się pobrać informacji o koncie, ponieważ serwer testowy zadziałał nieprawidłowo. Sprawdź później.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Wystąpił problem z pobraniem informacji o koncie. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "There is no such account registered." : "Nie ma takiego zarejestrowanego konta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nie udało się pobrać informacji o koncie, ponieważ serwer testowy jest nieosiągalny. Sprawdź później.", + "Deleting the hosted signaling server account failed. Please check back later." : "Usunięcie konta hostowanego serwera sygnalizacyjnego nie powiodło się. Sprawdź później.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nie udało się usunąć konta, ponieważ serwer testowy zadziałał nieprawidłowo. Sprawdź później.", + "There is a problem with deleting the account. Please check your logs for further information." : "Wystąpił problem z usunięciem konta. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresu Twojego serwera jest wysyłanych zbyt wiele żądań. Spróbuj ponownie później.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nie udało się usunąć konta, ponieważ serwer testowy jest nieosiągalny. Sprawdź później.", + "Note to self" : "Notatka dla siebie", + "A place for your private notes, thoughts and ideas" : "Miejsce na Twoje prywatne notatki, przemyślenia i pomysły", + "Transcript is AI generated and may contain mistakes" : "Transkrypcja jest generowana przez sztuczną inteligencję i może zawierać błędy", + "Summary is AI generated and may contain mistakes" : "Podsumowanie jest generowane przez sztuczną inteligencję i może zawierać błędy", + "Let's get started!" : "Zaczynajmy!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** to bezpieczna, samodzielnie hostowana platforma komunikacyjna, która bezproblemowo integruje się z ekosystemem Nextcloud.\n\n#### Główne funkcje Nextcloud Talk:\n\n* Czat i wiadomości w prywatnych i grupowych czatach\n* Połączenia głosowe i wideo\n* Udostępnianie plików i integracja z innymi aplikacjami Nextcloud\n* Konfigurowalne ustawienia rozmów, moderacja i kontrola prywatności\n* Internet, komputer i urządzenie mobilne (iOS i Android)\n* Prywatna i bezpieczna komunikacja\n\nDowiedz się więcej w [dokumentacji użytkownika](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Witamy w Nextcloud Talk\n\nNextcloud Talk to prywatna i wydajna aplikacja do przesyłania wiadomości, która integruje się z Nextcloud. Rozmawiaj w prywatnych lub grupowych rozmów, współpracuj przez połączenia głosowe i wideo, organizuj webinaria i wydarzenia, dostosowuj swoje rozmowy i nie tylko.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatuj teksty, aby tworzyć bogate wiadomości\n\nW Nextcloud Talk możesz używać składni Markdown do formatowania wiadomości. Na przykład zastosuj formatowanie **bold** lub *italic* lub `highlight texts as code`. Możesz nawet tworzyć tabele i dodawać nagłówki do tekstu.\n\nMusisz poprawić literówkę lub zmienić formatowanie? Edytuj wiadomość, klikając \"Edytuj wiadomość\" w menu wiadomości.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dodaj załączniki i linki\n\nDołącz pliki z Nextcloud Hub za pomocą przycisku \"+\". Udostępniaj elementy z Plików i różnych aplikacji Nextcloud. Niektóre aplikacje obsługują nawet interaktywne widżety, na przykład aplikacja Tekst.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭Niech rozmowy płyną: wspominaj użytkowników, reaguj na wiadomości i więcej\n\nMożesz wspomnieć wszystkich uczestników rozmowy, używając %s lub oznaczyć konkretne osoby, wpisując \"@\" i wybierając ich imię z listy", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Możesz odpowiadać na wiadomości, przekazywać je do innych czatów i osób lub kopiować treść wiadomości.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Zrób więcej dzięki Smart Picker\n\nPo prostu wpisz \"/\" lub przejdź do menu \"+\", aby otworzyć Smart Picker, w którym możesz dołączać różne treści do swoich wiadomości. Możesz skonfigurować Smart Picker, aby móc dodawać elementy z aplikacji Nextcloud, pliki GIF, lokalizacje na mapie, treści generowane przez AI i wiele więcej.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Zarządzaj ustawieniami rozmów\n\nW menu rozmów możesz uzyskać dostęp do różnych ustawień, aby zarządzać swoimi rozmowami, takich jak:\n* Edycja informacji o rozmowie\n* Zarządzanie powiadomieniami\n* Stosowanie licznych reguł moderacji\n* Konfigurowanie dostępu i bezpieczeństwa\n* Włączanie botów\n* i więcej!", + "Andorra" : "Andora", + "United Arab Emirates" : "Zjednoczone Emiraty Arabskie", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua i Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktyda", + "Argentina" : "Argentyna", + "American Samoa" : "Samoa Amerykańskie", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Wyspy Alandzkie", + "Azerbaijan" : "Azerbejdżan", + "Bosnia and Herzegovina" : "Bośnia i Hercegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesz", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bułgaria", + "Bahrain" : "Bahrajn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Boliwia, Wielonarodowe Państwo", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius i Saba (Holandia Karaibska)", + "Brazil" : "Brazylia", + "Bahamas" : "Bahamy", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Wyspa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Białoruś", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Wyspy Kokosowe (Keelinga)", + "Congo, the Democratic Republic of the" : "Kongo, Demokratyczna Republika", + "Central African Republic" : "Republika Środkowoafrykańska", + "Congo" : "Kongo", + "Switzerland" : "Szwajcaria", + "Côte d'Ivoire" : "Wybrzeże Kości Słoniowej", + "Cook Islands" : "Wyspy Cooka", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Chiny", + "Colombia" : "Kolumbia", + "Costa Rica" : "Kostaryka", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Wyspa Bożego Narodzenia", + "Cyprus" : "Cypr", + "Czechia" : "Czechy", + "Germany" : "Niemcy", + "Djibouti" : "Dżibuti", + "Denmark" : "Dania", + "Dominica" : "Dominika", + "Dominican Republic" : "Republika Dominikany", + "Algeria" : "Algieria", + "Ecuador" : "Ekwador", + "Estonia" : "Estonia", + "Egypt" : "Egipt", + "Western Sahara" : "Sahara Zachodnia", + "Eritrea" : "Erytrea", + "Spain" : "Hiszpania", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fidżi ", + "Falkland Islands (Malvinas)" : "Falklandy (Malwiny)", + "Micronesia, Federated States of" : "Mikronezja, Federalne Stany", + "Faroe Islands" : "Wyspy Owcze", + "France" : "Francja", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej", + "Grenada" : "Grenada", + "Georgia" : "Gruzja", + "French Guiana" : "Gujana Francuska", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandia", + "Gambia" : "Gambia", + "Guinea" : "Gwinea", + "Guadeloupe" : "Gwadelupa", + "Equatorial Guinea" : "Gwinea Równikowa", + "Greece" : "Grecja", + "South Georgia and the South Sandwich Islands" : "Georgia Południowa i Sandwich Południowy", + "Guatemala" : "Gwatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gwinea Bissau", + "Guyana" : "Gujana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Wyspy Heard i McDonalda", + "Honduras" : "Honduras", + "Croatia" : "Chorwacja", + "Haiti" : "Haiti", + "Hungary" : "Węgry", + "Indonesia" : "Indonezja", + "Ireland" : "Irlandia", + "Israel" : "Izrael", + "Isle of Man" : "Wyspa Man", + "India" : "Indie", + "British Indian Ocean Territory" : "Brytyjskie Terytorium Oceanu Indyjskiego", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska Republika", + "Iceland" : "Islandia", + "Italy" : "Włochy", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordania", + "Japan" : "Japonia", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodża", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Saint Kitts i Nevis", + "Korea, Democratic People's Republic of" : "Korea, Demokratyczna Republika Ludowa", + "Korea, Republic of" : "Korea, Republika", + "Kuwait" : "Kuwejt", + "Cayman Islands" : "Kajmany", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laotańska Republika Ludowo-Demokratyczna", + "Lebanon" : "Liban", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litwa", + "Luxembourg" : "Luksemburg", + "Latvia" : "Łotwa", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Mołdawia, Republika", + "Montenegro" : "Czarnogóra", + "Saint Martin (French part)" : "Saint Martin (część francuska)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Wyspy Marshalla", + "North Macedonia" : "Macedonia Północna", + "Mali" : "Mali", + "Myanmar" : "Mjanma", + "Mongolia" : "Mongolia", + "Macao" : "Makau", + "Northern Mariana Islands" : "Mariany Północne", + "Martinique" : "Martynika", + "Mauritania" : "Mauretania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediwy", + "Malawi" : "Malawi", + "Mexico" : "Meksyk", + "Malaysia" : "Malezja", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Nowa Kaledonia", + "Niger" : "Niger", + "Norfolk Island" : "Wyspa Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Holandia", + "Norway" : "Norwegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nowa Zelandia", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinezja Francuska", + "Papua New Guinea" : "Papua Nowa Gwinea", + "Philippines" : "Filipiny", + "Pakistan" : "Pakistan", + "Poland" : "Polska", + "Saint Pierre and Miquelon" : "Saint Pierre i Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoryko", + "Palestine, State of" : "Palestyna, Stan", + "Portugal" : "Portugalia", + "Palau" : "Palau", + "Paraguay" : "Paragwaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunia", + "Serbia" : "Serbia", + "Russian Federation" : "Rosja", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saudyjska", + "Solomon Islands" : "Wyspy Solomona", + "Seychelles" : "Seszele", + "Sudan" : "Sudan", + "Sweden" : "Szwecja", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Wyspa Świętej Heleny, Wyspa Wniebowstąpienia i Tristan da Cunha", + "Slovenia" : "Słowenia", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Słowacja", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudan Południowy", + "Sao Tome and Principe" : "Wyspy Świętego Tomasza i Książęca", + "El Salvador" : "Salwador", + "Sint Maarten (Dutch part)" : "Sint Maarten (część holenderska)", + "Syrian Arab Republic" : "Syria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Wyspy Turks i Caicos", + "Chad" : "Czad", + "French Southern Territories" : "Francuskie Terytoria Południowe", + "Togo" : "Togo", + "Thailand" : "Tajlandia", + "Tajikistan" : "Tadżykistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Wschodni", + "Turkmenistan" : "Turkmenia", + "Tunisia" : "Tunezja", + "Tonga" : "Tonga", + "Turkey" : "Turcja", + "Trinidad and Tobago" : "Trynidad i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajwan", + "Tanzania, United Republic of" : "Tanzania, Zjednoczona Republika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Dalekie Wyspy Mniejsze Stanów Zjednoczonych", + "United States of America" : "Stany Zjednoczone", + "Uruguay" : "Urugwaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Stolica Apostolska", + "Saint Vincent and the Grenadines" : "Saint Vincent i Grenadyny", + "Venezuela, Bolivarian Republic of" : "Wenezuela, Boliwariańska Republika", + "Virgin Islands, British" : "Wyspy Dziewicze, Brytyjskie", + "Virgin Islands, U.S." : "Wyspy Dziewicze, Stany Zjednoczone", + "Viet Nam" : "Wietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Majotta", + "South Africa" : "Republika Południowej Afryki", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmycie tła", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nie można sprawdzić obsługi ładowania WASM. Sprawdź ręcznie, czy Twój serwer internetowy obsługuje pliki `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Twój serwer internetowy nie jest prawidłowo skonfigurowany do dostarczania plików `.wasm`. Jest to zazwyczaj problem z konfiguracją Nginx. W przypadku rozmycia tła wymaga dostosowania, aby dostarczać także pliki `.wasm`. Porównaj swoją konfigurację Nginx z konfiguracją zalecaną w naszej dokumentacji.", + "Talk configuration values" : "Wartości konfiguracji Talka", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Wymuszanie czasu trwania połączenia jest obsługiwane tylko przez system cron. Włącz system cron lub usuń konfigurację `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Małe wartości `max_call_duration` (obecnie ustawione na %d) nie są egzekwowalne ze względu na ograniczenia techniczne. Zadanie w tle jest wykonywane tylko co 5 minut, więc używaj na własne ryzyko.", + "Federation" : "Federacja", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Zdecydowanie zaleca się skonfigurowanie \"memcache.locking\", gdy włączony jest Talk Federacyjny.", + "High-performance backend" : "Zaplecze o wysokiej wydajności", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Brak skonfigurowanego zaplecza o wysokiej wydajności - Uruchomienie Nextcloud Talk bez zaplecza o wysokiej wydajności jest skalowalne tylko dla bardzo małych połączeń (maks. 2–3 uczestników). Skonfiguruj zaplecze o wysokiej wydajności, aby zapewnić bezproblemową pracę połączeń z wieloma uczestnikami.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Uruchamianie trybu \"conversation_cluster\" zaplecza o wysokiej wydajności jest przestarzałe i nie będzie już obsługiwane w nadchodzącej wersji. Zaplecze o wysokiej wydajności obsługuje obecnie prawdziwe klastrowanie, które powinno być używane zamiast tego.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definiowanie wielu zapleczy o wysokiej wydajności jest przestarzałe i nie będzie już obsługiwane w nadchodzącej wersji. Zamiast tego należy skonfigurować moduł równoważenia obciążenia razem z klastrowanymi serwerami sygnalizacyjnymi i skonfigurować go w ustawieniach Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Zapisany klucz publiczny dla używanego algorytmu %1$s nie pasuje do zapisanego klucza prywatnego. Uruchom %2$s, aby naprawić problem.", + "High-performance backend not configured correctly. Run %s for details." : "Backend o wysokiej wydajności nie został poprawnie skonfigurowany. Uruchom %s, aby uzyskać szczegóły.", + "High-performance backend not configured correctly" : "Zaplecze o wysokiej wydajności nie zostało poprawnie skonfigurowane", + "Error: Cannot connect to server" : "Błąd: Nie można połączyć się z serwerem", + "Error: Server did not respond with proper JSON" : "Błąd: Serwer nie odpowiedział poprawnie JSON", + "Error: Certificate expired" : "Błąd: Certyfikat wygasł", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Błąd: Czasy systemowe serwera Nextcloud i serwera zaplecza o wysokiej wydajności są niezsynchronizowane. Upewnij się, że oba serwery są połączone z serwerem czasu lub ręcznie zsynchronizuj ich czas.", + "Could not get version" : "Nie udało się pobrać wersji", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Błąd: Wersja uruchomiona: {version}; Serwer wymaga aktualizacji, aby był kompatybilny z tą wersją Talk", + "Error: Server responded with: {error}" : "Błąd: Serwer odpowiedział: {error}", + "Error: Unknown error occurred" : "Błąd: Wystąpił nieznany błąd", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Ostrzeżenie: Działająca wersja: {version}; Serwer nie obsługuje wszystkich funkcji tej wersji Talka, brakuje funkcji: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Zdecydowanie zaleca się skonfigurowanie pamięci podręcznej w przypadku uruchamiania Nextcloud Talk z zapleczem o wysokiej wydajności.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push jest zainstalowany, to poprawia terminowość powiadomień Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nie jest zainstalowany. Może to powodować opóźnienia powiadomień Talk.", + "Recording backend" : "Zaplecze nagrywania", + "Using the recording backend requires a High-performance backend." : "Korzystanie z zaplecza nagrywania wymaga zaplecza o wysokiej wydajności.", + "No recording backend configured" : "Brak skonfigurowanego zaplecza nagrywania", + "SIP configuration" : "Konfiguracja SIP", + "Using the SIP functionality requires a High-performance backend." : "Korzystanie z funkcji SIP wymaga zaplecza o wysokiej wydajności.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Przypisane numery telefonów Talk nie mogą zaczynać się od + ani 0. Usuń lub zaktualizuj następujące numery:\n{list}", + "No SIP backend configured" : "Brak skonfigurowanego zaplecza SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być RRRR-MM-DD", + "Conversation not found" : "Nie znaleziono rozmowy", + "Path is already shared with this conversation" : "Ścieżka jest już udostępniona w tej rozmowie", + "Chat, video & audio-conferencing using WebRTC" : "Czat, wideo i konferencje audio za pomocą WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Czat, wideokonferencje i audiokonferencje z użyciem WebRTC\n\n* 💬 **Czat** Nextcloud Talk oferuje prosty czat tekstowy, umożliwiający udostępnianie lub przesyłanie plików z aplikacji Pliki Nextcloud lub lokalnego urządzenia oraz wspominanie innych uczestników.\n\n* 👥 **Prywatne, grupowe, publiczne i chronione hasłem połączenia!** Zaproś kogoś, całą grupę lub wyślij publiczny link, aby zaprosić do połączenia.\n\n* 🌐 **Federacyjne czaty** Czatuj z innymi użytkownikami Nextcloud na ich serwerach\n* 💻 **Udostępnianie ekranu!** Udostępnij swój ekran uczestnikom połączenia.\n\n* 🚀 **Integracja z innymi aplikacjami Nextcloud**, takimi jak Pliki, Kalendarz, Status użytkownika, Pulpit nawigacyjny, Przepływ, Mapy, Inteligentny selektor, Kontakty, Tablica i wiele innych.\n* 🌉 **Synchronizacja z innymi rozwiązaniami do czatów** Dzięki integracji [Matterbridge](https://github.com/42wim/matterbridge/) z Talk możesz łatwo zsynchronizować wiele innych rozwiązań do czatów z Talk Nextcloud i odwrotnie.", + "Leave call" : "Rozłącz się", + "Navigating away from the page will leave the call in {conversation}" : "Zamknięcie strony spowoduje opuszczenie połączenia w {conversation}", + "Stay in call" : "Pozostań w połączeniu", + "Error occurred when getting the conversation information" : "Wystąpił błąd podczas pobierania informacji o konwersacji.", + "Discuss this file" : "Omów ten plik", + "Share this file with others to discuss it" : "Udostępnij ten plik innym osobom, aby go omówić", + "Share this file" : "Udostępnij ten plik", + "Join conversation" : "Dołącz do rozmowy", + "This conversation is password-protected." : "Ta rozmowa jest chroniona hasłem.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Wykryliśmy wiele nieprawidłowych prób podania hasła z Twojego adresu IP. Dlatego Twoja następna próba będzie blokowana do 30 sekund.", + "The password is wrong. Try again." : "Błędne hasło. Spróbuj ponownie.", + "Password" : "Hasło", + "Submit" : "Wyślij", + "Error requesting the password." : "Błąd podczas żądania hasła.", + "Request password" : "Żądanie hasła", + "This conversation has ended" : "Rozmowa została zakończona", + "Error occurred when joining the conversation" : "Wystąpił błąd podczas dołączania do rozmowy", + "Close Talk sidebar" : "Zamknij pasek boczny Talka", + "Open Talk sidebar" : "Otwórz pasek boczny Talka", + "Everyone" : "Wszyscy", + "Users and moderators" : "Użytkownicy i moderatorzy", + "Moderators only" : "Tylko moderatorzy", + "Disable calls" : "Wyłącz połączenia", + "Save changes" : "Zapisz zmiany", + "Saving …" : "Zapisywanie…", + "Saved!" : "Zapisano!", + "Limit to groups" : "Ogranicz dla grup", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Gdy wybrana jest co najmniej jedna grupa, to tylko osoby z wymienionej grupy mogą brać udział w rozmowie.", + "Guests can still join public conversations." : "Goście nadal mogą brać udział w publicznych rozmowach.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Użytkownicy, którzy nie korzystają już z Talka, będą nadal wyświetlani jako uczestnicy poprzednich rozmów wraz z ich wiadomościami, które będą przechowywane w danej rozmowie.", + "Limit using Talk" : "Ogranicz używanie Talka", + "Limit creating a public and group conversation" : "Ogranicz tworzenie rozmowy publicznej i grupowej", + "Limit creating conversations" : "Ogranicz tworzenie rozmów", + "Limit starting a call" : "Ogranicz rozpoczynanie połączenia", + "Limit starting calls" : "Ogranicz rozpoczynanie połączeń", + "When a call has started, everyone with access to the conversation can join the call." : "Wszyscy mający dostęp do rozmowy mogą również dołączyć do połączenia po jego rozpoczęciu.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tym serwerze zainstalowane są następujące boty. W dokumentacji znajdziesz szczegółowe informacje na temat {linkstart1}budowania własnego bota{linkend} lub {linkstart2}listę botów{linkend}, które możesz włączyć na swoim serwerze.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tym serwerze nie są zainstalowane żadne boty. W dokumentacji znajdziesz szczegółowe informacje na temat {linkstart1}budowania własnego bota{linkend} lub {linkstart2}listę botów{linkend}, które możesz włączyć na swoim serwerze.", + "Description is not provided" : "Opis nie jest podany", + "Locked for moderators" : "Zablokowane dla moderatorów", + "Enabled" : "Włączone", + "Disabled" : "Wyłączone", + "Bots settings" : "Ustawienia botów", + "State" : "Stan", + "Name" : "Nazwa", + "Last error" : "Ostatni błąd", + "Total errors count" : "Całkowita liczba błędów", + "Find more bots" : "Znajdź więcej botów", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Zaufane serwery można skonfigurować na stronie {linkstart}Ustawienia udostępniania{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federacyjne czaty i połączenia działają już. Obsługa załączników pojawi się w przyszłej wersji.", + "Enable Federation in Talk app" : "Włącz Federację w programie Talk", + "Permissions" : "Uprawnienia", + "Allow users to be invited to federated conversations" : "Zezwalaj użytkownikom na zapraszanie ich do rozmów federacyjnych", + "Allow users to invite federated users into conversation" : "Zezwalaj użytkownikom na zapraszanie użytkowników federacyjnych do rozmów", + "Only allow to federate with trusted servers" : "Zezwalaj na federację tylko z zaufanymi serwerami", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Gdy zostanie wybrana co najmniej jedna grupa, jedynie osoby z wymienionych grup będą mogły zapraszać użytkowników federacyjnych do rozmów.", + "Groups allowed to invite federated users" : "Grupy, którym wolno zapraszać użytkowników federacyjnych", + "Select groups …" : "Wybierz grupy…", + "All messages" : "Wszystkie wiadomości", + "@-mentions only" : "Tylko, gdy @-wspomniano", + "Off" : "Wyłączone", + "General settings" : "Ustawienia główne", + "Default notification settings" : "Domyślne ustawienia powiadomienia", + "Default group notification" : "Domyślne powiadomienie grupy", + "Default group notification for new groups" : "Domyślne powiadomienie grupy dla nowych grup", + "Integration into other apps" : "Integracja z innymi aplikacjami", + "Allow conversations on files" : "Zezwalaj na rozmowy przy plikach", + "Allow conversations on public shares for files" : "Zezwalaj na rozmowy przy plikach udostępnionych publicznie", + "End-to-end encrypted calls" : "Szyfrowane połączenia End-to-End", + "Enable encryption" : "Włącz szyfrowanie", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Połączenia szyfrowane typu End-to-End ze skonfigurowanym mostem SIP wymagają nowszej wersji bardziej wydajnego zaplecza i mostu SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Klienci mobilni nie obsługują obecnie połączeń szyfrowanych metodą End-to-End.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Klikając powyższy przycisk, informacje zawarte w formularzu zostaną wysłane na serwery Struktur AG. Więcej informacji można znaleźć na stronie {linkstart}spreed.eu{linkend}.", + "Pending" : "Oczekuje", + "Error" : "Błąd", + "Blocked" : "Zablokowani", + "Active" : "Aktywne", + "Expired" : "Wygasł", + "Never" : "Nigdy", + "The trial could not be requested. Please try again later." : "Nie można zażądać testu. Spróbuj ponownie później.", + "The account could not be deleted. Please try again later." : "Nie można usunąć konta. Spróbuj ponownie później.", + "Hosted High-performance backend" : "Hostowane zaplecze o wysokiej wydajności", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nasz partner Struktur AG zapewnia usługę, na której można zamówić hostowany serwer sygnalizacyjny. W tym celu wystarczy jedynie wypełnić poniższy formularz, a Twoja usługa Nextcloud zrobi to za Ciebie. Po skonfigurowaniu serwera dane uwierzytelniające zostaną wypełnione automatycznie. Spowoduje to zastąpienie istniejących ustawień serwera sygnalizacyjnego.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Jeśli Twoje konto wydajnego backendu zawiera funkcje STUN i/lub TURN, ustawienia zostaną odpowiednio zaktualizowane.", + "URL of this Nextcloud instance" : "Adres URL tej instancji Nextcloud", + "Full name of the user requesting the trial" : "Pełna nazwa użytkownika proszącego o test", + "Email of the user" : "E-mail użytkownika", + "Language" : "Język", + "Country" : "Kraj", + "Request signaling server trial" : "Poproś o próbny serwer sygnalizacyjny", + "You can see the current status of your hosted signaling server in the following table." : "Aktualny stan hostowanego serwera sygnalizacyjnego można zobaczyć w poniższej tabeli.", + "Status" : "Status", + "Created at" : "Utworzono", + "Expires at" : "Wygasa o", + "Limits" : "Limity", + "STUN included" : "STUN włączony", + "Yes" : "Tak", + "No" : "Nie", + "TURN included" : "TURN włączony", + "Delete the signaling server account" : "Usuń konto serwera sygnalizacyjnego", + "_%n user_::_%n users_" : ["%n użytkownik","%n użytkowników","%n użytkowników","%n użytkowników"], + "Installed version: {version}" : "Zainstalowana wersja: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Możesz zainstalować Matterbridge, aby połączyć Nextcloud Talk z innymi usługami. Odwiedź {linkstart1}stronę GitHub{linkend}, aby uzyskać więcej informacji. Pobieranie i instalowanie aplikacji może chwilę potrwać. W przypadku przekroczenia limitu czasu, zainstaluj ją ręcznie z {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że plik binarny Matterbridge jest własnością właściwego użytkownika i ma ustawione prawo do wykonania. Znajdziesz go w „/…/nextcloud/apps/talk_matterbridge/bin/”", + "Matterbridge binary was not found or couldn't be executed." : "Nie znaleziono pliku binarnego Matterbridge lub nie można go uruchomić.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Możesz również ustawić ścieżkę do pliku binarnego Matterbridge ręcznie za pomocą pliku config. Więcej informacji znajdziesz w {linkstart}dokumentacji integracji Matterbridge{linkend}.", + "Downloading …" : "Pobieranie…", + "Install Talk Matterbridge" : "Zainstaluj Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Wystąpił błąd podczas instalacji aplikacji Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Wystąpił błąd podczas instalacji Talk Matterbridge. Zainstaluj ręcznie.", + "Failed to execute Matterbridge binary." : "Nie udało się uruchomić pliku binarnego Matterbridge.", + "Matterbridge integration" : "Integracja z Matterbridge", + "Enable Matterbridge integration" : "Włącz integrację Matterbridge", + "Status: Checking connection" : "Status: Sprawdzanie połączenia", + "OK: Running version: {version}" : "W porządku: Uruchomiona wersja: {version}", + "Error: Server seems to be a Signaling server" : "Błąd: Serwer wydaje się być serwerem sygnalizacyjnym", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Błąd: Czasy systemowe serwera Nextcloud i serwera zaplecza \"Nagrywanie\" są niezsynchronizowane. Upewnij się, że oba serwery są połączone z serwerem czasu lub ręcznie zsynchronizuj ich czas.", + "Recording backend URL" : "Rejestrowanie adresu URL zaplecza", + "Validate SSL certificate" : "Potwierdź certyfikat SSL", + "Delete this server" : "Usuń ten serwer", + "Test this server" : "Przetestuj ten serwer", + "Disabled for all calls" : "Wyłączone dla wszystkich połączeń", + "Enabled for all calls" : "Włączone dla wszystkich połączeń", + "Configurable on conversation level by moderators" : "Konfigurowalne na poziomie konwersacji przez moderatorów", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Ustawienia PHP \"upload_max_filesize\" lub \"post_max_size\" pozwalają na wysyłanie plików tylko do rozmiaru {maxUpload}.", + "Recording backend settings saved" : "Zapisano ustawienia zaplecza nagrywania", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorzy będą mogli włączyć zgodę na poziomie rozmowy. Zgoda na nagrywanie będzie wymagana od każdego uczestnika przed dołączeniem do każdego połączenia w tej rozmowie.", + "The consent to be recorded will be required for each participant before joining every call." : "Przed przystąpieniem do każdej rozmowy wymagana będzie zgoda na nagrywanie każdego uczestnika.", + "The consent to be recorded is not required." : "Zgoda na nagrywanie nie jest wymagana.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfiguracja zaplecza \"Nagrywanie\" jest możliwe tylko przy użyciu zaplecza o wysokiej wydajności.", + "Add a new recording backend server" : "Dodaj nowy serwer zaplecza nagrywania", + "Shared secret" : "Klucz współdzielony", + "Recording consent" : "Zgoda na nagrywanie", + "Recording transcription" : "Transkrypcja nagrań", + "Automatically transcribe call recordings with a transcription provider" : "Automatyczne transkrybowanie nagrań rozmów za pomocą dostawcy usług transkrypcji", + "Automatically summarize call recordings with transcription and summary providers" : "Automatyczne podsumowywanie nagrań rozmów za pomocą dostawców transkrypcji i podsumowań", + "SIP configuration saved!" : "Konfiguracja SIP zapisana!", + "SIP configuration is only possible with a High-performance backend." : "Konfiguracja SIP jest możliwa wyłącznie przy użyciu wydajnego zaplecza.", + "Enable SIP Dial-out option" : "Włącz opcję wybierania numeru SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Serwer sygnalizacyjny musi zostać zaktualizowany do obsługiwanej funkcji wybierania numeru SIP.", + "Do not show SIP Dial-out caller number" : "Nie pokazuj numeru dzwoniącego SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonimowy numer powinien być wyświetlany jako „nieznany” lub „ukryty numer” dla odbiorcy połączenia ukryty numer", + "Dial-out number" : "Numer Dial-out", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numer w formacie E164 używany jako zapasowy numer dzwoniącego dla połączeń wychodzących", + "Dial-out prefix" : "Prefiks Dial-out", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefiks do skonfigurowanego numeru użytkownika dla połączeń wychodzących (domyślnie „+”)", + "Restrict SIP configuration" : "Ogranicz konfigurację SIP", + "Enable SIP configuration" : "Włącz konfigurację SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Tylko użytkownicy z następujących grup mogą włączać SIP w rozmowach, które moderują", + "Phone number (Country)" : "Numer telefonu (kraj)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Informacje te są wysyłane w wiadomościach e-maili z zaproszeniami, a także wyświetlane na pasku bocznym wszystkim uczestnikom.", + "Nextcloud base URL" : "Podstawowy adres URL Nextcloud", + "Talk Backend URL" : "Adres URL zaplecza Talk", + "WebSocket URL" : "Adres URL WebSocket", + "Available features" : "Dostępne funkcje", + "Error: Websocket connection failed" : "Błąd: Połączenie WebSocket nie powiodło się", + "Error code" : "Kod błędu", + "Error message" : "Komunikat o błędzie", + "Error: Websocket connection failed. Check browser console" : "Błąd: Połączenie Websocket nie powiodło się. Sprawdź konsolę przeglądarki", + "High-performance backend URL" : "Adres URL zaplecza o wysokiej wydajności", + "Missing High-performance backend warning hidden" : "Ukryte ostrzeżenie zaplecza o wysokiej wydajności", + "High-performance backend settings saved" : "Zapisano ustawienia zaplecza o wysokiej wydajności", + "Nextcloud Talk setup not complete" : "Konfiguracja Nextcloud Talk nie została ukończona", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Należy pamiętać, że w przypadku połączeń z więcej niż 2-oma uczestnikami bez zaawansowanego zaplecza, uczestnicy najprawdopodobniej napotkają problemy z łącznością, co spowoduje duże obciążenie urządzeń.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Zainstaluj wydajne zaplecze, aby mieć pewność, że połączenia z wieloma uczestnikami będą przebiegać bezproblemowo.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Krótki przewodnik instalacji", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Wydajne zaplecze jest wymagane do połączeń i rozmów z wieloma uczestnikami. Bez zaplecza wszyscy uczestnicy muszą wysyłać własne wideo indywidualnie do każdego uczestnika, co najprawdopodobniej spowoduje problemy z łącznością i duże obciążenie urządzeń uczestniczących.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Zdecydowanie zaleca się skonfigurowanie rozproszonej pamięci podręcznej w przypadku korzystania z Nextcloud Talk z zapleczem o wysokiej wydajności.", + "Add High-performance backend server" : "Dodaj wydajny serwer zaplecza", + "Warn about connectivity issues in calls with more than 2 participants" : "Ostrzegaj o problemach z łącznością podczas rozmów z udziałem więcej niż z 2-oma uczestnikami", + "STUN server URL" : "Adres URL serwera STUN", + "The server address is invalid" : "Adres serwera jest nieprawidłowy", + "STUN settings saved" : "Zapisano ustawienia STUN", + "STUN servers" : "Serwery STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Serwer STUN służy do określenia publicznego adresu IP uczestników znajdujących się za routerem.", + "Add a new STUN server" : "Dodaj nowy serwer STUN", + "{schema} scheme must be used with a domain" : "Schemat {schema} musi być używany z domeną", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "tylko {option}", + "OK: Successful ICE candidates returned by the TURN server" : "W porządku: Pomyślnie zwróceni kandydaci ICE przez serwer TURN", + "Error: No working ICE candidates returned by the TURN server" : "Błąd: Nie działa zwrot kandydatów ICE przez serwer TURN", + "Testing whether the TURN server returns ICE candidates" : "Testowanie, czy serwer TURN zwraca kandydatów ICE", + "TURN server schemes" : "Schematy serwerów TURN", + "TURN server URL" : "Adres URL serwera TURN", + "TURN server secret" : "Poufny serwer TURN", + "TURN server protocols" : "Protokoły serwera TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Serwer TURN używany jest do połączeń przez proxy dla uczestników za zaporą. Jeśli poszczególni uczestnicy nie mogą połączyć się z innymi, najprawdopodobniej wymagany jest serwer TURN. Instrukcje instalacji znajdują się w {linkstart}dokumentacji{linkend}.", + "TURN settings saved" : "Zapisano ustawienia TURN", + "TURN servers" : "Serwery TURN", + "Add a new TURN server" : "Dodaj nowy serwer TURN", + "Failed" : "Nie powiodło się", + "OK" : "OK", + "Checking …" : "Sprawdzanie ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Niepowodzenie: WebAssembly jest wyłączony lub nie jest obsługiwany w tej przeglądarce. Włącz WebAssembly lub użyj przeglądarki z obsługą, aby sprawdzić.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Niepowodzenie: Pliki \".wasm\" i \".tflite\" nie zostały poprawnie zwrócone przez serwer sieciowy. Sprawdź sekcję \"Wymagania systemowe\" w dokumentacji Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Pliki \".wasm\" i \".tflite\" zostały poprawnie zwrócone przez serwer WWW.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Wygląda na to, że konfiguracja PHP i Apache nie jest kompatybilna. Należy pamiętać, że PHP może być używane tylko z modułem MPM_PREFORK, a PHP-FPM może być używane tylko z modułem MPM_EVENT.", + "Web server setup checks" : "Sprawdzanie konfiguracji serwera WWW", + "Files required for virtual background can be loaded" : "Można załadować pliki potrzebne do wirtualnego tła", + "Federated user" : "Użytkownik sfederowany", + "Assign participants to rooms" : "Przypisz uczestników do pokoi", + "Configure breakout rooms" : "Skonfiguruj pokoje podgrup", + "Number of breakout rooms" : "Liczba pokoi podgrup", + "You can create from 1 to 20 breakout rooms." : "Możesz utworzyć od 1 do 20 pokoi podgrup.", + "Assignment method" : "Metoda przydzielenia", + "Automatically assign participants" : "Automatycznie przypisz uczestników", + "Manually assign participants" : "Ręcznie przypisz uczestników", + "Allow participants to choose" : "Zezwalaj uczestnikom wybrać", + "Create rooms" : "Utwórz pokoje", + "Confirm" : "Potwierdź", + "Create breakout rooms" : "Twórz pokoje podgrup", + "Reset" : "Resetuj", + "Delete breakout rooms" : "Usuń pokoje podgrup", + "Room {roomNumber}" : "Pokój {roomNumber}", + "Current breakout rooms and settings will be lost" : "Bieżące pokoje podgrup i ustawienia zostaną utracone", + "Cancel" : "Anuluj", + "Unassigned participants" : "Nieprzypisani uczestnicy", + "Back" : "Wstecz", + "Assign" : "Przydziel", + "Add participant \"{user}\"" : "Dodaj uczestnika \"{user}\"", + "Now" : "Teraz", + "Invalid calendar selected" : "Wybrano nieprawidłowy kalendarz", + "Invalid start time selected" : "Wybrano nieprawidłową godzinę rozpoczęcia", + "Invalid end time selected" : "Wybrano nieprawidłowy czas zakończenia", + "Unknown error occurred" : "Wystąpił nieznany błąd", + "Sending no invitations" : "Brak wysyłań zaproszeń", + "{participant0} will receive an invitation" : "{participant0} otrzyma zaproszenie", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} otrzymają zaproszenia", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i %n inna osoba otrzymają zaproszenia","{participant0}, {participant1} i %n inne osoby otrzymają zaproszenia","{participant0}, {participant1} i %n innych osób otrzymają zaproszenia","{participant0}, {participant1} i %n innych osób otrzymają zaproszenia"], + "Invite {user}" : "Zaproś {user}", + "Invite all users and emails in this conversation" : "Zaproś wszystkich użytkowników i adresy e-mail w tej rozmowie", + "Meeting created" : "Spotkanie utworzone", + "Upcoming meetings" : "Nadchodzące spotkania", + "Loading …" : "Wczytywanie…", + "No upcoming meetings" : "Brak zaplanowanych spotkań", + "Schedule a meeting" : "Zaplanuj spotkanie", + "Meeting title" : "Tytuł spotkania", + "From" : "Z", + "To" : "Na", + "Calendar" : "Kalendarz", + "Attendees" : "Uczestnicy", + "No other participants to send invitations to." : "Brak innych uczestników do zaproszenia.", + "Add attendees" : "Dodaj uczestników", + "Save" : "Zapisz", + "Search participants" : "Wyszukaj uczestników", + "No results" : "Brak wyników", + "Done" : "Gotowe", + "Disable live transcription" : "Wyłącz transkrypcję na żywo", + "Enable live transcription (generated by AI)" : "Włącz transkrypcję na żywo (generowaną przez AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Włącz transkrypcję na żywo (aplikacja Live transcriptions nie jest zainstalowana)", + "Disable live translation" : "Wyłącz tłumaczenie na żywo", + "Enable live translation (generated by AI)" : "Włącz tłumaczenie na żywo (generowane przez AI)", + "Original language" : "Język oryginalny", + "Live translations app is not installed" : "Aplikacja Live translations nie jest zainstalowana", + "Original language: {languageName}" : "Język oryginalny: {languageName}", + "Translated language" : "Język tłumaczenia", + "Translated language: {languageName}" : "Język tłumaczenia: {languageName}", + "Raise hand" : "Podnieść rękę", + "Raise hand (R)" : "Podnieś rękę (R)", + "Lower hand" : "Opuścić rękę", + "Lower hand (R)" : "Opuść rękę (R)", + "Exit full screen (F)" : "Wyjdź z trybu pełnoekranowego (F)", + "Full screen (F)" : "Tryb pełnoekranowy (F)", + "Speaker view" : "Widok mówcy", + "Grid view" : "Widok siatki", + "Error when trying to load the available live transcription languages" : "Błąd podczas próby załadowania dostępnych języków transkrypcji na żywo", + "Failed to enable live transcription" : "Nie udało się włączyć transkrypcji na żywo", + "Failed to enable live translations" : "Nie udało się włączyć tłumaczeń na żywo", + "Failed to disable live translations" : "Nie udało się wyłączyć tłumaczeń na żywo", + "Recording consent is required" : "Wymagana jest zgoda na nagrywanie", + "This conversation is read-only" : "Ta rozmowa jest tylko do odczytu", + "Conversation not found or not joined" : "Nie znaleziono rozmowy lub nie dołączono do niej", + "Lobby is still active and you're not a moderator" : "Poczekalnia jest nadal aktywna i nie jesteś moderatorem", + "Connection failed" : "Błąd połączenia", + "Reload" : "Przeładuj", + "{nickName} raised their hand." : "{nickName} podniósł rękę.", + "A participant raised their hand." : "Uczestnik podniósł rękę.", + "Collapse stripe" : "Zwiń pasek", + "Expand stripe" : "Rozwiń pasek", + "Previous page of videos" : "Poprzednia strona obrazów wideo", + "Next page of videos" : "Następna strona obrazów wideo", + "Connecting …" : "Łączę…", + "Calling …" : "Łączenie…", + "Waiting for {user} to join the call" : "Oczekiwanie na {user}, aż dołączy do połączenia", + "Waiting for others to join the call …" : "Oczekiwanie na dołączenie się pozostałych do połączenia…", + "You can invite others in the participant tab of the sidebar" : "Możesz zapraszać inne osoby z zakładki uczestników na pasku bocznym", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Możesz zapraszać inne osoby z zakładki uczestników na pasku bocznym lub udostępnić ten link do zaproszenia!", + "Share this link to invite others!" : "Udostępnij ten link, aby zaprosić inne osoby!", + "Copy link" : "Kopiuj link", + "You are not allowed to enable audio" : "Nie możesz włączyć dźwięku", + "No audio. Click to select device" : "Bez dźwięku. Kliknij, aby wybrać urządzenie", + "Mute audio" : "Wycisz dźwięk", + "Mute audio (M)" : "Wycisz dźwięk (M)", + "Unmute audio" : "Wyłącz wyciszenie dźwięku", + "Unmute audio (M)" : "Wyłącz wyciszenie dźwięku (M)", + "None" : "Żaden", + "Select a microphone" : "Wybierz mikrofon", + "Select a speaker" : "Wybierz głośnik", + "Microphone settings" : "Ustawienia mikrofonu", + "Check devices" : "Sprawdź urządzenia", + "Access to camera was denied" : "Odmowa dostępu do kamery", + "Error while accessing camera: It is likely in use by another program" : "Błąd podczas uzyskiwania dostępu do kamery: Prawdopodobnie jest używana przez inny program", + "Error while accessing camera" : "Wystąpił błąd podczas dostępu do kamery", + "You have been muted by a moderator" : "Zostałeś wyciszony przez moderatora", + "Hide presenter video" : "Ukryj wideo prezentera", + "You are not allowed to enable video" : "Nie możesz włączyć obrazu wideo", + "No video. Click to select device" : "Brak wideo. Kliknij, aby wybrać urządzenie", + "Disable video" : "Wyłącz obraz wideo", + "Disable video (V)" : "Wyłącz obraz wideo (V)", + "Enable video" : "Włącz obraz wideo", + "Enable video (V)" : "Włącz obraz wideo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo — połączenie zostanie na chwilę przerwane przy pierwszym włączeniu obrazu wideo", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo (V) - Twoje połączenie zostanie na chwilę przerwane po pierwszym włączeniu obrazu wideo", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo. Twoje połączenie zostanie na chwilę przerwane po pierwszym włączeniu obrazu wideo", + "Select a video device" : "Wybierz urządzenie wideo", + "Show presenter" : "Pokaż prezentera", + "You" : "Ty", + "Mute" : "Wycisz", + "Muted" : "Wyciszony", + "Show screen" : "Pokaż ekran", + "Stop following" : "Zakończ obserwowanie", + "Connection could not be established …" : "Nie udało się nawiązać połączenia…", + "Connection was lost and could not be re-established …" : "Połączenie zostało utracone i nie można go było przywrócić…", + "Connection could not be established. Trying again …" : "Nie udało się nawiązać połączenia. Ponowna próba…", + "Connection lost. Trying to reconnect …" : "Utracono połączenie. Ponowna próba połączenia…", + "Connection problems …" : "Problemy z połączeniem…", + "Collapse" : "Zwiń", + "Expand" : "Rozwiń", + "You need to be logged in to upload files" : "Musisz się zalogować, aby wysyłać pliki", + "Drop your files to upload" : "Upuść swoje pliki do wysłania", + "Conversation messages" : "Wiadomości w rozmowie", + "Scroll to bottom" : "Przewiń do dołu", + "Post message" : "Wyślij wiadomość", + "Federated conversation" : "Rozmowa federacyjna", + "Public conversation" : "Rozmowa publiczna", + "Favorite" : "Ulubione", + "Banned users" : "Zbanowani użytkownicy", + "Manage the list of banned users in this conversation." : "Zarządzaj listą zablokowanych użytkowników w tej rozmowie.", + "Manage bans" : "Zarządzanie blokadami", + "No banned users" : "Brak zbanowanych użytkowników", + "Banned by:" : "Zablokowany przez:", + "Date:" : "Data:", + "Note:" : "Notatka:", + "Hide details" : "Ukryj szczegóły", + "Show details" : "Pokaż szczegóły", + "Unban" : "Odblokuj", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Możesz zmienić tytuł i opis w Kalendarzu {linkstart} ↗ {linkend}.", + "Error while updating conversation name" : "Błąd podczas aktualizowania nazwy rozmowy", + "Error while updating conversation description" : "Błąd podczas aktualizowania opisu rozmowy", + "Enter a name for this conversation" : "Wpisz nazwę tej rozmowy", + "Edit conversation name" : "Edytuj nazwę rozmowy", + "Edit conversation description" : "Edytuj opis rozmowy", + "Enter a description for this conversation" : "Podaj opis dla tej rozmowy", + "Picture" : "Obraz", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "W tej rozmowie można włączyć następujące boty. Skontaktuj się z administracją, aby zainstalować więcej botów na tym serwerze.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na tym serwerze nie są zainstalowane żadne boty. Skontaktuj się z administracją, aby zainstalować boty na tym serwerze.", + "Disable" : "Wyłącz", + "Enable" : "Włącz", + "The bot is not available anymore" : "Bot nie jest już dostępny", + "Breakout rooms" : "Pokoje podgrup", + "Manage breakout rooms" : "Zarządzaj pokojami podgrup", + "Set up breakout rooms for this conversation" : "Skonfiguruj pokoje podgrup dla tej rozmowy", + "Please select a valid PNG or JPG file" : "Wybierz prawidłowy plik PNG lub JPG", + "Choose your conversation picture" : "Wybierz obraz rozmowy", + "Choose" : "Wybierz", + "Error setting conversation picture" : "Błąd podczas ustawiania obrazu rozmowy", + "Could not set the conversation picture: {error}" : "Nie można ustawić obrazu rozmowy: {error}", + "Error cropping conversation picture" : "Błąd podczas przycinania obrazu rozmowy", + "Error removing conversation picture" : "Błąd podczas usuwania obrazu rozmowy", + "Set emoji as conversation picture" : "Ustaw emoji jako obraz rozmowy", + "Set background color for conversation picture" : "Ustaw kolor tła obrazu rozmowy", + "Upload conversation picture" : "Wyślij obraz rozmowy", + "Choose conversation picture from files" : "Wybierz obraz rozmowy z plików", + "Remove conversation picture" : "Usuń obraz rozmowy", + "The file must be a PNG or JPG" : "Plik musi być w formacie PNG lub JPG", + "Set picture" : "Ustaw obraz", + "Default permissions modified for {conversationName}" : "Zmieniono uprawnienia domyślne dla {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nie udało się zmienić uprawnień domyślnych dla {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edytuj domyślne uprawnienia uczestników tej rozmowy. Te ustawienia nie mają wpływu na moderatorów.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Za każdym razem, gdy uprawnienia zostaną zmodyfikowane w tej sekcji, uprawnienia niestandardowe wcześniej przypisane poszczególnym uczestnikom zostaną utracone.", + "All permissions" : "Wszystkie uprawnienia", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Uczestnicy mają uprawnienia do rozpoczynania połączenia, dołączania do rozmowy, włączania dźwięku i obrazu wideo oraz udostępniania ekranu.", + "Restricted" : "Ograniczone", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Uczestnicy mogą dołączać do połączeń, ale nie mogą włączać dźwięku i obrazu wideo ani udostępniać ekranu, dopóki moderator nie przyzna im odpowiednich uprawnień.", + "Advanced permissions" : "Uprawnienia zaawansowane", + "Edit permissions" : "Edytuj uprawnienia", + "Conversation settings" : "Ustawienia rozmowy", + "Basic Info" : "Podstawowa informacja", + "Personal" : "Osobiste", + "Moderation" : "Moderacja", + "Setup overview" : "Przegląd konfiguracji", + "Live transcription" : "Transkrypcja na żywo", + "Live transcriptions app is not installed" : "Aplikacja Live transcriptions nie jest zainstalowana", + "Enable live transcription" : "Włącz transkrypcję na żywo", + "Breakout Rooms" : "Pokoje podgrup", + "Matterbridge" : "Matterbridge", + "Bots" : "Boty", + "Danger zone" : "Strefa niebezpieczeństwa", + "Archive conversation" : "Archiwizuj rozmowę", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Zarchiwizowane rozmowy są domyślnie ukryte na liście konwersacji. Jednak nadal będą się pojawiać, gdy wyszukasz nazwę rozmowy lub uzyskasz dostęp do listy zarchiwizowanych rozmów.", + "Do you really want to leave \"{displayName}\"?" : "Czy naprawdę chcesz opuścić \"{displayName}\"?", + "You can archive this conversation instead." : "Zamiast tego możesz zarchiwizować tę rozmowę.", + "Leave conversation" : "Opuść rozmowę", + "You need to promote a new moderator before you can leave the conversation" : "Zanim opuścisz rozmowę, musisz wybrać nowego moderatora", + "Delete conversation" : "Usuń rozmowę", + "Do you really want to delete \"{displayName}\"?" : "Czy na pewno chcesz usunąć \"{displayName}\"?", + "Error while deleting conversation" : "Błąd podczas usuwania rozmowy", + "Delete all chat messages" : "Usuń wszystkie wiadomości czatu", + "Do you really want to delete all messages in \"{displayName}\"?" : "Czy na pewno chcesz usunąć wszystkie wiadomości w \"{displayName}\"?", + "Error while clearing chat history" : "Błąd podczas czyszczenia historii czatu", + "Be careful, these actions cannot be undone." : "Uważaj, tych działań nie można cofnąć.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Po opuszczeniu rozmowy, aby ponownie dołączyć do zamkniętej rozmowy, potrzebne będzie zaproszenie. Do otwartej rozmowy będzie można dołączyć w dowolnym momencie.", + "Permanently delete this conversation." : "Usuń trwale rozmowę.", + "Delete chat messages" : "Usuń wiadomości czatu", + "Permanently delete all the messages in this conversation." : "Usuń trwale wszystkie wiadomości w tej rozmowie.", + "_%n hour_::_%n hours_" : ["%n godzina","%n godziny","%n godzin","%n godzin"], + "_%n day_::_%n days_" : ["%n dzień","%n dni","%n dni","%n dni"], + "_%n week_::_%n weeks_" : ["%n tydzień","%n tygodnie","%n tygodni","%n tygodni"], + "Custom expiration time" : "Własny czas wygaśnięcia", + "Message expiration disabled" : "Wygaśnięcie wiadomości wyłączone", + "Message expiration set: {duration}" : "Ustawione wygaśnięcie wiadomości: {duration}", + "Error when trying to set message expiration" : "Błąd podczas próby ustawienia wygaśnięcia wiadomości", + "Message expiration" : "Wygaśnięcie wiadomości", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Wiadomości na czacie mogą wygasnąć po pewnym czasie. Uwaga: pliki udostępnione na czacie nie zostaną usunięte dla właściciela, ale nie będą już udostępniane w rozmowie.", + "Set message expiration" : "Ustaw datę ważności wiadomości", + "Current message expiration" : "Aktualny termin ważności wiadomości", + "Password copied to clipboard" : "Hasło skopiowano do schowka", + "Password could not be copied" : "Nie można skopiować hasła", + "Guest access" : "Dostęp dla gościa", + "Breakout rooms are not allowed in public conversations." : "Podczas publicznych rozmów nie wolno korzystać z pokoi spotkań.", + "Allow guests to join this conversation via link" : "Zezwalaj gościom na dołączenie do tej rozmowy za pomocą linku", + "Password protection" : "Ochrona hasłem", + "This conversation is password-protected. Guests need password to join" : "Rozmowa jest chroniona hasłem. Goście potrzebują hasła, aby dołączyć", + "Password protection is needed for public conversations" : "Ochrona hasłem jest wymagana w przypadku rozmów publicznych", + "Set a password" : "Ustaw hasło", + "Change password" : "Zmień hasło", + "Enter new password" : "Wprowadź nowe hasło", + "Save password" : "Zapisz hasło", + "Copy password" : "Kopiuj hasło", + "Guests are allowed to join this conversation via link" : "Goście mogą dołączyć do tej rozmowy za pomocą linku", + "Guests are not allowed to join this conversation" : "Goście nie mogą przyłączać się do tej rozmowy", + "Resend invitations" : "Wyślij ponownie zaproszenia", + "This conversation is open to both registered users and users created with the Guests app" : "Rozmowa jest dostępna zarówno dla zarejestrowanych użytkowników, jak i użytkowników utworzonych za pomocą aplikacji Goście", + "This conversation is open to registered users" : "Rozmowa jest dostępna dla zarejestrowanych użytkowników", + "This conversation is limited to the current participants" : "Rozmowa jest ograniczona do obecnych uczestników", + "You opened the conversation to both registered users and users created with the Guests app" : "Otworzyłeś rozmowę zarówno dla zarejestrowanych użytkowników, jak i użytkowników utworzonych za pomocą aplikacji Goście", + "Error occurred when opening or limiting the conversation" : "Wystąpił błąd podczas otwierania lub ograniczania rozmowy", + "Open conversation to registered users, showing it in search results" : "Otwórz rozmowę dla zarejestrowanych użytkowników, pokazując ją w wynikach wyszukiwania", + "Also open to users created with the Guests app" : "Dostępne także dla użytkowników utworzonych za pomocą aplikacji Goście", + "Open conversation" : "Otwarta rozmowa", + "Set language spoken in calls" : "Ustaw język używany podczas rozmów", + "Languages could not be loaded" : "Nie udało się załadować języków", + "Loading languages …" : "Ładowanie języków ...", + "Invalid language" : "Nieprawidłowy język", + "Default language (English)" : "Domyślny język (angielski)", + "Default live transcription language set" : "Ustawiono domyślny język transkrypcji na żywo", + "Live transcription language set: {languageName}" : "Ustawiono język transkrypcji na żywo: {languageName}", + "Error when trying to set live transcription language" : "Błąd podczas próby ustawienia języka transkrypcji na żywo", + "Start time: {date}" : "Godzina rozpoczęcia: {date}", + "Start time has been updated" : "Czas rozpoczęcia został zaktualizowany", + "Error occurred while updating start time" : "Wystąpił błąd podczas aktualizowania czasu rozpoczęcia", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Włączenie poczekalni spowoduje usunięcie osób niebędących moderatorami z trwającej rozmowy.", + "Enable lobby, restricting the conversation to moderators" : "Włącz poczekalnię, ograniczając rozmowę dla moderatorów", + "Meeting start time" : "Czas rozpoczęcia spotkania", + "Start time (optional)" : "Czas rozpoczęcia (opcjonalnie)", + "Import email participants" : "Importuj uczestników z adresów e-mail", + "You can import a list of email participants from a CSV file." : "Listę uczestników adresów e-mail można zaimportować z pliku CSV.", + "Poll drafts" : "Projekty ankiet", + "Browse poll drafts" : "Przeglądaj projekty sond", + "Error occurred when locking the conversation" : "Wystąpił błąd podczas zablokowywania rozmowy", + "Error occurred when unlocking the conversation" : "Wystąpił błąd podczas odblokowywania rozmowy", + "Lock conversation" : "Zablokuj rozmowę", + "This will also terminate the ongoing call." : "Spowoduje to również zakończenie trwającego połączenia.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zablokuj rozmowę, aby nikt nie mógł publikować wiadomości ani rozpoczynać połączeń", + "Edit" : "Edytuj", + "More information" : "Więcej informacji", + "Delete" : "Usuń", + "Add new bridged channel to current conversation" : "Dodaj nowy zmostkowany kanał do bieżącej rozmowy", + "unknown state" : "stan nieznany", + "running" : "uruchomiony", + "not running, check Matterbridge log" : "nie działa, sprawdź dziennik Matterbridge", + "not running" : "nie działa", + "Bridge saved" : "Połączenie zapisane", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Możesz łączyć kanały z różnych systemów wiadomości natychmiastowych z Matterbridge.", + "More info on Matterbridge" : "Więcej informacji o Matterbridge", + "Messaging systems" : "Wiadomości systemowe", + "Enable bridge" : "Włącz mostkowanie", + "Show Matterbridge log" : "Pokaż dziennik Matterbridge", + "Log content" : "Zawiera", + "Only moderators are allowed to mention @all" : "Tylko moderatorzy mogą wspominać dla @all", + "All participants are allowed to mention @all" : "Wszyscy uczestnicy mogą wspomnieć dla @all", + "Participants are now allowed to mention @all." : "Uczestnicy mogą teraz wspominać dla @all.", + "Mentioning @all has been limited to moderators." : "Wzmianki @all są dostępne wyłącznie dla moderatorów.", + "Allow participants to mention @all" : "Zezwalaj uczestnikom na wspominanie @all", + "Mention permissions" : "Wspomnij o uprawnieniach", + "Notifications" : "Powiadomienia", + "Notify about calls in this conversation" : "Powiadamiaj o połączeniach w tej rozmowie", + "Important conversation" : "Ważna rozmowa", + "\"Do not disturb\" user status is ignored for important conversations" : "Status użytkownika „Nie przeszkadzać” jest ignorowany dla ważnych rozmów.", + "Sensitive conversation" : "Rozmowa poufna", + "Message preview will be disabled in conversation list and notifications" : "Podgląd wiadomości zostanie wyłączony na liście rozmów i w powiadomieniach.", + "Recording consent is required for calls in this conversation" : "W przypadku rozmów w tym połączeniu wymagana jest zgoda na nagrywanie", + "Recording consent is not required for calls in this conversation" : "W przypadku rozmów w tym połączeniu nie jest wymagana zgoda na nagrywanie", + "Recording consent requirement was updated" : "Zaktualizowano wymóg dotyczący zgody na nagrywanie", + "Error occurred while updating recording consent" : "Wystąpił błąd podczas aktualizowania zgody na nagrywanie", + "Recording Consent" : "Zgoda na nagrywanie", + "Recording consent cannot be changed once a call or breakout session has started." : "Zgody na nagrywanie nie można zmienić po rozpoczęciu rozmowy lub sesji grupowej.", + "Require recording consent before joining call in this conversation" : "Wymagaj zgody na nagrywanie przed dołączeniem do tej rozmowy", + "Recording consent is required for all calls" : "W przypadku wszystkich połączeń wymagana jest zgoda na nagrywanie", + "SIP dial-in is now possible without PIN requirement" : "Połączenie telefoniczne SIP jest teraz możliwe bez konieczności podawania kodu PIN", + "SIP dial-in is now enabled" : "Połączenie telefoniczne SIP jest teraz włączone", + "SIP dial-in is now disabled" : "Połączenie telefoniczne SIP jest teraz wyłączone", + "Error occurred when enabling SIP dial-in" : "Wystąpił błąd podczas włączania połączenia telefonicznego SIP", + "Error occurred when disabling SIP dial-in" : "Wystąpił błąd podczas wyłączania połączenia telefonicznego SIP", + "Phone and SIP dial-in" : "Połączenie telefoniczne i SIP", + "Enable phone and SIP dial-in" : "Włącz połączenie telefoniczne i SIP", + "Allow to dial-in without a PIN" : "Zezwalaj na połączenie telefoniczne bez kodu PIN", + "Ongoing" : "Trwające", + "{dayPrefix} {dateTime}" : "{dayPrefix}{dateTime}", + "_%n person accepted_::_%n people accepted_" : ["Zaakceptowane przez %n osobę","Zaakceptowane przez %n osoby","Zaakceptowało %n osób","Zaakceptowało %nosób"], + "_%n person declined_::_%n people declined_" : ["%n osoba odrzuciła","%n osoby odrzuciły","%n osób odrzuciło","%n osób odrzuciło"], + "_and %n other attachment_::_and %n other attachments_" : ["i %n inny załącznik","i %n inne załączniki","i %n innych załączników","i %n innych załączników"], + "With {displayName}" : "Z {displayName}", + "In {conversation}" : "w {conversation}", + "View attachment" : "Wyświetl załącznik", + "Join" : "Dołącz", + "View conversation" : "Pokaż rozmowę", + "View event on Calendar" : "Pokaż zdarzenie w Kalendarzu", + "Error while creating the conversation" : "Błąd podczas tworzenia rozmowy", + "Hello, {displayName}" : "Witaj, {displayName}", + "Start meeting now" : "Rozpocznij spotkanie", + "Give your meeting a title" : "Wpisz tytuł swojego spotkania", + "Create and copy link" : "Utwórz i skopiuj link", + "Create a new conversation" : "Utwórz nową rozmowę", + "Join open conversations" : "Dołącz do otwartych rozmów", + "Call a phone number" : "Zadzwoń pod numer telefonu", + "Scroll backward" : "Przewiń wstecz", + "Scroll forward" : "Przewiń do przodu", + "Schedule meetings" : "Planowanie spotkań", + "You don't have any upcoming meetings" : "Nie masz żadnych nadchodzących spotkań", + "Open calendar" : "Otwórz kalendarz", + "Unread mentions" : "Nieprzeczytane wzmianki", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Wiadomości, w których zostałeś wspomniany, pojawią się tutaj. Możesz wspominać ludzi, wpisując @ i ich nazwę", + "Upcoming reminders" : "Nadchodzące przypomnienia", + "Message reminders" : "Przypomnienia wiadomości", + "Set a reminder on a message to be notified" : "Ustaw przypomnienie dla wiadomości, aby otrzymać powiadomienie", + "Start a group conversation" : "Rozpocznij rozmowę grupową", + "Create conversation" : "Utwórz rozmowę", + "Enter your name" : "Wpisz swoją nazwę", + "Submit name and join" : "Podaj nazwę i dołącz", + "Do you already have an account?" : "Czy masz już konto?", + "Log in" : "Zaloguj się", + "Error while verifying uploaded file" : "Wystąpił błąd podczas weryfikacji przesłanego pliku", + "Uploaded file is verified" : "Wysłany plik został zweryfikowany", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Format treści to wartości rozdzielone przecinkami (CSV):
- Wiersz nagłówka jest wymagany i musi odpowiadać słowom \"name\",\"email\" lub po prostu \"email\"
- Jeden wpis w wierszu (np. \"Jan Kowalski\",\"jan@przyklad.pl\")", + "Participants added successfully" : "Uczestnicy dodani pomyślnie", + "Error while adding participants" : "Błąd podczas dodawania uczestników", + "Import a file" : "Importuj plik", + "Browse" : "Przeglądaj", + "Verifying uploaded file …" : "Weryfikacja przesłanego pliku…", + "This might take a moment" : "To może chwilę potrwać.", + "Send invitations" : "Wyślij zaproszenia", + "_%n invalid email_::_%n invalid emails_" : ["%n adres e-mail nieprawidłowy","%n adresy e-mail nieprawidłowe","%n adresów e-mail nieprawidłowych","%n adresów e-mail nieprawidłowych"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adres e-mail został już zaimportowanych lub jest duplikatem","%n adresy e-mail zostały już zaimportowane lub są duplikatami","%n adresów e-mail zostało już zaimportowanych lub są duplikatami","%n adresów e-mail zostało już zaimportowanych lub są duplikatami"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Można wysłać %n zaproszenie","Można wysłać %n zaproszenia","Można wysłać %n zaproszeń","Można wysłać %n zaproszeń"], + "An error occurred while calling a phone number" : "Wystąpił błąd podczas wybierania numeru telefonu", + "Phone number could not be called: {error}" : "Nie można było zadzwonić pod numer telefonu: {error}", + "Phone number could not be called" : "Nie można było zadzwonić pod numer telefonu", + "Search participants or phone numbers" : "Wyszukaj uczestników lub numery telefonów", + "Creating the conversation …" : "Tworzenie rozmowy…", + "Mark as read" : "Oznacz jako przeczytane", + "Mark as unread" : "Oznacz jako nieprzeczytane", + "Remove from favorites" : "Usuń z ulubionych", + "Add to favorites" : "Dodaj do ulubionych", + "Unarchive conversation" : "Przywróć archiwum rozmowy", + "Ignore \"Do not disturb\"" : "Ignoruj \"Nie przeszkadzać\"", + "You need to promote a new moderator before you can leave the conversation." : "Zanim opuścisz rozmowę, musisz wybrać nowego moderatora.", + "Conversation actions" : "Akcje rozmowy", + "Notify about calls" : "Powiadom o połączeniach", + "Hide message text" : "Ukryj treść wiadomości", + "Pending invitations" : "Oczekujące zaproszenia", + "Join conversations from other servers" : "Dołącz do rozmów z innych serwerów", + "From {user} at {remoteServer}" : "Od {user} z {remoteServer}", + "Decline invitation" : "Odrzuć zaproszenie", + "Accept invitation" : "Zaakceptuj zaproszenie", + "No pending invitations" : "Brak oczekujących zaproszeń", + "Home" : "Strona główna", + "Unread" : "Nieprzeczytane", + "Mentions" : "Wzmianki", + "Meetings" : "Spotkania", + "Sort conversations" : "Sortuj rozmowy", + "By recent activity" : "Według ostatniej aktywności", + "Alphabetically" : "Alfabetycznie", + "Do not group by type" : "Nie grupuj według typu", + "Show private ones first" : "Najpierw pokazuj prywatne", + "Show group ones first" : "Najpierw pokazuj grupowe", + "No followed threads" : "Brak obserwowanych wątków", + "No matches found" : "Nie znaleziono pasujących", + "No conversations found" : "Nie znaleziono rozmów", + "You have no archived conversations." : "Nie masz żadnych zarchiwizowanych rozmów.", + "Subscribe to an existing thread or start your own." : "Zasubskrybuj istniejący wątek lub rozpocznij własny.", + "You have no unread mentions." : "Nie masz nieprzeczytanych wzmianek.", + "You have no unread messages." : "Nie masz nieprzeczytanych wiadomości.", + "An error occurred while performing the search" : "Wystąpił błąd podczas wyszukiwania", + "Conversation list" : "Lista rozmów", + "Filter conversations by" : "Filtruj rozmowy po", + "Unread messages" : "Nieprzeczytane wiadomości", + "Meeting conversations" : "Rozmowy spotkań", + "Clear filters" : "Wyczyść filtry", + "New personal note" : "Nowa notatka osobista", + "SIP backend is not installed" : "Backend SIP nie jest zainstalowany", + "Back to conversations" : "Powrót do rozmów", + "Archived conversations" : "Zarchiwizowane rozmowy", + "Threads" : "Wątki", + "Clear filter" : "Wyczyść filtr", + "Show more threads" : "Pokaż więcej wątków", + "App settings" : "Ustawienia aplikacji", + "Users" : "Użytkownicy", + "Groups" : "Grupy", + "Teams" : "Zespoły", + "Federated users" : "Użytkownicy federacyjni", + "New private conversation" : "Nowa rozmowa prywatna", + "Other sources" : "Inne źródła", + "Open conversations" : "Otwarte rozmowy", + "No search results" : "Brak wyników wyszukiwania", + "Users, groups and teams" : "Użytkownicy, grupy i zespoły", + "Users and groups" : "Użytkownicy i grupy", + "Users and teams" : "Użytkownicy i zespoły", + "Groups and teams" : "Grupy i zespoły", + "New group conversation" : "Nowa rozmowa grupowa", + "The meeting will start soon" : "Spotkanie wkrótce się rozpocznie", + "This meeting is scheduled for {startTime}" : "Spotkanie jest zaplanowane na {startTime}", + "You are currently waiting in the lobby" : "Obecnie czekasz w poczekalni", + "Enable noise suppression" : "Włącz redukcję szumów", + "Reduce background noises for better voice quality" : "Zredukuj szumy tła, aby poprawić jakość dźwięku", + "Enable echo cancellation" : "Włącz eliminację echa", + "Minimize echo effect from own surrounding" : "Minimalizuj efekt echa z otoczenia", + "Enable auto gain control" : "Włącz automatyczną regulację wzmocnienia", + "Dynamically adjust microphone volume for consistent level" : "Dynamicznie dostosuj głośność mikrofonu, aby utrzymać stały poziom", + "Select microphone" : "Wybierz mikrofon", + "No microphone available" : "Brak dostępnego mikrofonu", + "Select speaker" : "Wybierz głośnik", + "No speaker available" : "Brak dostępnych głośników", + "Select camera" : "Wybierz kamerę", + "No camera available" : "Brak dostępnej kamery", + "Select a device" : "Wybierz urządzenie", + "Playing …" : "Odtwarzanie…", + "Test speakers" : "Test głośników", + "Test" : "Test", + "Devices" : "Urządzenia", + "Backgrounds" : "Tła", + "No audio" : "Brak dźwięku", + "No camera" : "Brak kamery", + "Display video as you will see it (mirrored)" : "Wyświetl wideo tak, jak je widzisz (odbicie lustrzane)", + "Display video as others will see it" : "Wyświetlaj wideo tak, jak będą je widzieć inni", + "Calls are not supported in your browser" : "Twoja przeglądarka nie obsługuje połączeń", + "Access to microphone is only possible with HTTPS" : "Dostęp do mikrofonu jest możliwy tylko przy użyciu protokołu HTTPS", + "Access to microphone was denied" : "Odmowa dostępu do mikrofonu", + "Error while accessing microphone" : "Błąd podczas uzyskiwania dostępu do mikrofonu", + "Access to camera is only possible with HTTPS" : "Dostęp do kamery jest możliwy tylko przy użyciu protokołu HTTPS", + "The call is being recorded." : "Rozmowa jest nagrywana.", + "The call might be recorded." : "Rozmowa może zostać nagrana.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Nagranie może obejmować Twój głos, wideo z kamery i udostępniony ekran. Przed dołączeniem do rozmowy wymagana jest Twoja zgoda.", + "Give consent to the recording of this call" : "Wyraź zgodę na nagrywanie tej rozmowy", + "Show more info" : "Pokaż więcej informacji", + "Audio is not available" : "Dźwięk jest niedostępny", + "Video is not available" : "Wideo jest niedostępne", + "Start recording immediately with the call" : "Rozpocznij nagrywanie natychmiast po połączeniu", + "Recording backend is not installed" : "Backend nagrywania nie jest zainstalowany", + "Notify all participants about this call" : "Powiadom wszystkich uczestników o tym połączeniu", + "Apply settings" : "Zastosuj ustawienia", + "Select virtual office background" : "Wybierz tło wirtualnego biura", + "Select virtual home background" : "Wybierz tło wirtualnego domu", + "Select virtual abstract background" : "Wybierz wirtualne abstrakcyjne tło", + "Select virtual beach background" : "Wybierz tło wirtualnej plaży", + "Select virtual park background" : "Wybierz tło wirtualnego parku", + "Select virtual theater background" : "Wybierz tło wirtualnego teatru", + "Select virtual library background" : "Wybierz tło wirtualnej biblioteki", + "Select virtual space station background" : "Wybierz tło wirtualnej stacji kosmicznej", + "Error while uploading the file" : "Błąd podczas wysyłania pliku", + "Select a file" : "Wybierz plik", + "Invalid path selected" : "Wybrano nieprawidłową ścieżkę", + "Select virtual background from file {fileName}" : "Wybierz wirtualne tło z pliku {fileName}", + "Blur" : "Plama", + "Upload" : "Wyślij", + "Files" : "Pliki", + "(editing)" : "(redagowanie)", + "(edited)" : "(edytowane)", + "The message has expired or has been deleted" : "Wiadomość wygasła lub została usunięta", + "Cancel quote" : "Anuluj cytowanie", + "24 hours" : "24 godziny", + "7 days" : "7 dni", + "30 days" : "30 dni", + "Until unpin" : "Do odpięcia", + "Clear reminder – {timeLocale}" : "Wyczyść przypomnienie – {timeLocale}", + "Edited by {actor}" : "Edytowane przez {actor}", + "Pinned by you" : "Przypięte przez Ciebie", + "Pinned by {actor}" : "Przypięte przez {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Tekst wiadomości skopiowany do schowka", + "Message text could not be copied" : "Nie udało się skopiować tekstu wiadomości", + "Message forwarded to \"Note to self\"" : "Wiadomość przekazana do \"Notatka dla siebie\"", + "Error while forwarding message to \"Note to self\"" : "Błąd podczas przekazywania wiadomości do \"Notatka dla siebie\"", + "A reminder was successfully removed" : "Przypomnienie zostało pomyślnie usunięte", + "Error occurred when removing a reminder" : "Wystąpił błąd podczas usuwania przypomnienia", + "A reminder was successfully set at {datetime}" : "Przypomnienie zostało pomyślnie ustawione na {datetime}", + "Error occurred when creating a reminder" : "Podczas tworzenia przypomnienia wystąpił błąd", + "Add a reaction to this message" : "Dodaj reakcję na tę wiadomość", + "Reply" : "Odpowiedz", + "More actions" : "Więcej akcji", + "Set reminder" : "Ustaw przypomnienie", + "Pin message" : "Przypnij wiadomość", + "Unpin message" : "Odepnij wiadomość", + "Reply privately" : "Odpowiedz prywatnie", + "Edit message" : "Edytuj wiadomość", + "Copy message" : "Skopiuj wiadomość", + "Copy message link" : "Kopiuj link wiadomości", + "Go to file" : "Przejdź do pliku", + "Download file" : "Pobierz plik", + "Go to thread" : "Przejdź do wątku", + "Edit thread details" : "Edytuj szczegóły wątku", + "Forward message" : "Przekaż wiadomość", + "Translate" : "Tłumaczenie", + "Set custom reminder" : "Ustaw niestandardowe przypomnienie", + "Keep pinned for" : "Zachowaj przypięcie przez", + "Set custom period" : "Ustaw niestandardowy okres", + "Close reactions menu" : "Zamknij menu reakcji", + "React with {emoji}" : "Reakcja za pomocą {emoji}", + "React with another emoji" : "Reakcja za pomocą innego emoji", + "Choose a conversation to forward the selected message." : "Wybierz rozmowę, aby przekazać wybraną wiadomość.", + "Error while forwarding message" : "Błąd podczas przekazywania wiadomości", + "The message has been forwarded to {selectedConversationName}" : "Wiadomość została przekazana do {selectedConversationName}", + "Dismiss" : "Odrzuć", + "Go to conversation" : "Przejdź do rozmowy", + "Detect language" : "Wykryj język", + "The message could not be translated" : "Nie udało się przetłumaczyć wiadomości", + "Translation copied to clipboard" : "Tłumaczenie skopiowane do schowka", + "Translation could not be copied" : "Nie można skopiować tłumaczenia", + "Translate message" : "Przetłumacz wiadomość", + "Source language to translate from" : "Język źródłowy, z którego chcesz tłumaczyć", + "Translate from" : "Przetłumacz z", + "Target language to translate into" : "Język docelowy, na który chcesz tłumaczyć", + "Translate to" : "Przetłumacz na", + "Translating" : "Tłumaczenie", + "This translation is AI generated and may contain mistakes." : "To tłumaczenie zostało wygenerowane przez AI i może zawierać błędy", + "Copy translated text" : "Kopiuj przetłumaczony tekst", + "Error when scheduling the message" : "Błąd podczas planowania wiadomości", + "Reschedule" : "Zmień harmonogram", + "Send now" : "Wyślij teraz", + "Choose a time" : "Wybierz godzinę", + "Send at custom time" : "Wyślij o niestandardowej porze", + "Will be sent without notification" : "Zostanie wysłane bez powiadomienia", + "Message read by everyone who shares their reading status" : "Wiadomość przeczytana przez wszystkich, którzy udostępniają swój status odczytu", + "Message sent" : "Wiadomość wysłana", + "Sent without notification" : "Wysłano bez powiadomienia", + "Deleting message" : "Usuwanie wiadomości", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Wiadomość została pomyślnie usunięta, ale skonfigurowano bota lub Matterbridge, a wiadomość mogła już zostać przesłana do innych usług", + "Message deleted successfully" : "Wiadomość została pomyślnie usunięta", + "Message could not be deleted because it is too old" : "Nie można usunąć wiadomości, ponieważ jest zbyt stara", + "Only normal chat messages can be deleted" : "Usunąć można tylko zwykłe wiadomości czatu", + "An error occurred while deleting the message" : "Wystąpił błąd podczas usuwania wiadomości", + "Pinned" : "Przypięte", + "Your browser does not support playing audio files" : "Twoja przeglądarka nie obsługuje odtwarzania plików audio", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} na {board}", + "Deck Card" : "Karta Deck", + "Remove {fileName}" : "Usuń {fileName}", + "Open this location in OpenStreetMap" : "Otwórz lokalizację w OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odpowiedź","%n odpowiedzi","%n odpowiedzi","%n odpowiedzi"], + "Sending message" : "Wysyłanie wiadomości", + "Failed to send the message. Click to try again" : "Nie udało się wysłać wiadomości. Kliknij, aby spróbować ponownie", + "Not enough free space to upload file" : "Za mało wolnego miejsca, aby wysłać plik", + "You cannot send messages to this conversation at the moment" : "W tej chwili nie możesz wysyłać wiadomości dla tej rozmowy", + "Could not update the message" : "Nie udało się zaktualizować wiadomości", + "Reply to thread \"{threadTitle}\"" : "Odpowiedz w wątku \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Oddałeś głos • %n głos","Oddałeś głos • %n głosów","Oddałeś głos • %n głosów","Oddałeś głos • %n głosy"], + "You voted" : "Zagłosowałeś", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknij, aby zagłosować • %n głos","Kliknij, aby zagłosować • %n głosów","Kliknij, aby zagłosować • %n głosów","Kliknij, aby zagłosować • %n głosy"], + "Click to vote" : "Kliknij, aby zagłosować", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Projekt sondy • %n opcja","Projekt sondy • %n opcje","Projekt sondy • %n opcji","Projekt sondy • %n opcji"], + "_%n vote_::_%n votes_" : ["%n głos","%n głosów","%n głosów","%n głosy"], + "Edit poll draft" : "Edytuj projekt sondy", + "Delete poll draft" : "Usuń wersję roboczą ankiety", + "Open poll" : "Otwórz sondę", + "Closed poll" : "Głosowanie zamknięte", + "See results" : "Zobacz wyniki", + "Reactions" : "Reakcje", + "No permission to post reactions in this conversation" : "Brak uprawnień do publikowanie reakcji w tej rozmowie", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i %n inny uczestnik","i %n innych uczestników","i %n innych uczestników","i %n innych uczestników"], + "Show all reactions" : "Pokaż wszystkie reakcje", + "Add more reactions" : "Dodaj więcej reakcji", + "Show or collapse system messages" : "Pokaż lub zwiń komunikaty systemowe", + "No messages" : "Brak wiadomości", + "All messages have expired or have been deleted." : "Wszystkie wiadomości wygasły lub zostały usunięte.", + "Generate summary with AI" : "Wygeneruj podsumowanie za pomocą AI", + "{author} (pinned by you)" : "{author} (przypięte przez Ciebie)", + "{author} (pinned by {actor})" : "{author} (przypięte przez {actor})", + "Unpin" : "Odepnij", + "Cancel search" : "Anuluj wyszukiwanie", + "Add a phone number" : "Dodaj numer telefonu", + "Error: A password is required to create the conversation." : "Błąd: Do utworzenia rozmowy wymagane jest hasło.", + "All set, the conversation \"{conversationName}\" was created." : "Wszystko gotowe, rozmowa \"{conversationName}\" została utworzona.", + "Create a new group conversation" : "Utwórz nową rozmowę grupową", + "Add participants" : "Dodaj uczestników", + "Maximum length exceeded ({maxlength} characters)" : "Przekroczono maksymalną długość ({maxlength} znaków)", + "Conversation type" : "Typ rozmowy", + "Conversation visibility" : "Widoczność rozmowy", + "Allow guests to join via link" : "Zezwalaj gościom na dołączanie za pomocą linku", + "Enter password" : "Wprowadź hasło", + "This conversation has been locked" : "Ta rozmowa została zablokowana", + "No permission to post messages in this conversation" : "Brak uprawnień do publikowania wiadomości w tej rozmowie", + "Joining conversation …" : "Dołączanie do rozmowy…", + "Write a message without notification" : "Napisz wiadomość bez powiadomienia", + "Create a thread silently" : "Utwórz wątek po cichu", + "Create a thread" : "Utwórz wątek", + "Send message silently" : "Wyślij wiadomość w trybie cichym", + "Send message" : "Wyślij wiadomość", + "Send without notification" : "Wyślij bez powiadomienia", + "The participant will not be notified about new messages" : "Uczestnik nie będzie powiadamiany o nowych wiadomościach", + "Participants will not be notified about new messages" : "Uczestnicy nie będą powiadamiani o nowych wiadomościach", + "Message will be sent {datetimeString}" : "Wiadomość zostanie wysłana {datetimeString}", + "Thread title is required" : "Tytuł wątku jest wymagany", + "Message text is required" : "Wymagany jest tekst wiadomości", + "The message could not be edited" : "Wiadomości nie można edytować", + "File to share" : "Plik do udostępnienia", + "File upload is not available in this conversation" : "W tej rozmowie nie jest dostępne przesyłanie plików", + "Message was successfully scheduled" : "Wiadomość została pomyślnie zaplanowana", + "Add emoji" : "Dodaj emoji", + "Adding a mention will only notify users who did not read the message." : "Dodanie wzmianki spowoduje powiadomienie tylko użytkowników, którzy nie przeczytali wiadomości.", + "Thread title" : "Tytuł wątku", + "Send later" : "Wyślij później", + "Show scheduled messages" : "Pokaż zaplanowane wiadomości", + "Cancel editing" : "Anuluj edycję", + "Schedule message" : "Zaplanuj wiadomość", + "{user} is out of office and might not respond." : "{user} jest poza biurem i może nie odpowiadać.", + "Absence period: {startDate} - {endDate}" : "Okres nieobecności: {startDate} - {endDate}", + "Replacement:" : "Zastępstwo:", + "Share from {nextcloud}" : "Udostępnij z {nextcloud}", + "Share from Files" : "Udostępnij z Plików", + "Share files to the conversation" : "Udostępnij pliki w rozmowie", + "Upload from device" : "Wyślij z urządzenia", + "Create new poll" : "Stwórz nową sondę", + "Smart picker" : "Inteligentna selekcja", + "Record voice message" : "Nagraj wiadomość głosową", + "End recording and send" : "Zakończ nagrywanie i wyślij", + "Dismiss recording" : "Odrzuć nagranie", + "Access to the microphone was denied" : "Odmowa dostępu do mikrofonu", + "Microphone either not available or disabled in settings" : "Mikrofon jest niedostępny lub wyłączony w ustawieniach", + "Error while recording audio" : "Błąd podczas nagrywania dźwięku", + "Voice message {time} ({conversation})" : "Wiadomość głosowa {time} ({conversation})", + "Generating summary of unread messages …" : "Trwa generowanie podsumowania nieprzeczytanych wiadomości…", + "Summary is AI generated and might contain mistakes" : "Podsumowanie jest generowane przez sztuczną inteligencję i może zawierać błędy", + "Error occurred during a summary generation" : "Wystąpił błąd podczas generowania podsumowania", + "New file" : "Nowy plik", + "Blank" : "Pusty", + "Error while creating file" : "Błąd podczas tworzenia pliku", + "Create and share a new file" : "Utwórz i udostępnij nowy plik", + "Name of the new file" : "Nazwa nowego pliku", + "Create file" : "Utwórz plik", + "Someone is typing …" : "Ktoś pisze…", + "{user1} is typing …" : "{user1} pisze…", + "{user1} and {user2} are typing …" : "{user1} i {user2} piszą…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} piszą…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i %n inny pisze…","{user1}, {user2}, {user3} i %n innych pisze…","{user1}, {user2}, {user3} i %n innych piszą…","{user1}, {user2}, {user3} i %n innych piszą…"], + "Add more files" : "Dodaj więcej plików", + "Send" : "Wyślij", + "In this conversation {user} can:" : "W tej rozmowie {user} może:", + "Edit default permissions for participants in {conversationName}" : "Edytuj uprawnienia domyślne dla uczestników w {conversationName}", + "Start a call" : "Rozpocznij połączenie", + "Skip the lobby" : "Pomiń poczekalnie", + "Can post messages" : "Może publikować wiadomości", + "Can post messages and reactions" : "Może publikować wiadomości i reakcje", + "Can add reactions" : "Może dodawać reakcje", + "Enable the microphone" : "Włącz mikrofon", + "Enable the camera" : "Włącz kamerę", + "Share the screen" : "Udostępnij ekran", + "Update permissions" : "Zaktualizuj uprawnienia", + "Updating permissions" : "Aktualizowanie uprawnień", + "No poll drafts" : "Brak wersji roboczych ankiet", + "There is no poll drafts yet saved for this conversation" : "Dla tej rozmowy nie zapisano jeszcze żadnych wersji roboczych ankiety", + "Create poll in {name}" : "Utwórz sondę w {name}", + "Create poll" : "Utwórz sondę", + "Error while importing poll" : "Błąd podczas importowania ankiety", + "Question" : "Pytanie", + "Ask a question" : "Zadaj pytanie", + "Import draft from file" : "Importuj wersję roboczą z pliku", + "Answers" : "Odpowiedzi", + "Answer {option}" : "Odpowiedź {option}", + "Delete poll option" : "Usuń opcję sondy", + "Add answer" : "Dodaj odpowiedź", + "Settings" : "Ustawienia", + "Anonymous poll" : "Anonimowa sonda", + "Multiple answers" : "Wiele odpowiedzi", + "Save as draft" : "Zapisz jako wersję roboczą", + "Export draft to file" : "Eksportuj wersję roboczą do pliku", + "_Final results • %n vote_::_Final results • %n votes_" : ["Wyniki końcowe •  %n głos","Wyniki końcowe •  %n głosów","Wyniki końcowe •  %n głosów","Wyniki końcowe •  %n głosów"], + "Your vote is anonymous" : "Twój głos jest anonimowy", + "You voted for this option" : "Głosowałeś na tę opcję", + "End poll" : "Zakończ sondę", + "Change your vote" : "Zmień swój głos", + "Withdraw vote" : "Wycofaj głos", + "Results" : "Wyniki", + "Voted participants" : "Uczestnicy w głosowaniu", + "Send a message to \"{roomName}\"" : "Wyślij wiadomość do \"{roomName}\"", + "Hide list of participants" : "Ukryj listę uczestników", + "Show list of participants" : "Pokaż listę uczestników", + "Assistance requested in {roomName}" : "Prośba o pomoc w {roomName}", + "The message was sent to \"{roomName}\"" : "Wiadomość została wysłana do \"{roomName}\"", + "Dismiss request for assistance" : "Odrzuć prośbę o pomoc", + "Send message to room" : "Wyślij wiadomość do pokoju", + "Back to main room" : "Powrót do głównego pokoju", + "Back to your room" : "Wróć do swojego pokoju", + "Message all rooms" : "Wyślij wiadomość do wszystkich pokoi", + "Start session" : "Rozpocznij sesję", + "Start a call before you start a breakout room session" : "Rozpocznij rozmowę przed rozpoczęciem sesji w pokoju podgrup", + "Stop session" : "Zatrzymaj sesję", + "The message was sent to all breakout rooms" : "Wiadomość została wysłana do wszystkich pokoi podgrup", + "Send a message to all breakout rooms" : "Wyślij wiadomość do wszystkich pokoi podgrup", + "Breakout rooms are not started" : "Pokoje podgrup nie są uruchamiane", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Połączenia bez wydajnego zaplecza mogą powodować problemy z łącznością i duże obciążenie urządzeń. {linkstart}Dowiedz się więcej{linkend}", + "Talk setup incomplete" : "Konfiguracja Talka niekompletna", + "Disable lobby" : "Wyłącz poczekalnię", + "Settings for participant \"{user}\"" : "Ustawienia dla uczestnika \"{user}\"", + "Participant \"{user}\"" : "Uczestnik \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gość", + "Ringing …" : "Dzwoni…", + "Call rejected" : "Połączenie odrzucone", + "{time} talking …" : "Rozmawiam {time}…", + "{time} talking time" : "Czas rozmowy {time}", + "Raised their hand" : "Podnieśli rękę", + "Joined with video" : "Połączony z obrazem wideo", + "Joined via phone" : "Połączony przez telefon", + "Joined with audio" : "Połączony z dźwiękiem", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Długość tekstu musi być mniejsza lub równa {maxLength} znaków. Twój obecny tekst ma długość {charactersCount} znaków.", + "Remove group and members" : "Usuń grupę i członków", + "Remove team and members" : "Usuń zespół i członków", + "Remove participant" : "Usuń uczestnika", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Czy na pewno chcesz usunąć grupę \"{displayName}\" i jej członków z tej rozmowy?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Czy na pewno chcesz usunąć zespół \"{displayName}\" i jego członków z tej rozmowy?", + "Do you really want to remove {displayName} from this conversation?" : "Czy na pewno chcesz usunąć {displayName} z tej rozmowy?", + "Notification was sent to {displayName}" : "Powiadomienie zostało wysłane do {displayName}", + "Could not send notification to {displayName}" : "Nie udało się wysłać powiadomienia do {displayName}", + "Permissions granted to {displayName}" : "Uprawnienia przyznane {displayName}", + "Could not modify permissions for {displayName}" : "Nie udało się zmienić uprawnień dla {displayName}", + "Permissions removed for {displayName}" : "Usunięto uprawnienia dla {displayName}", + "Permissions set to default for {displayName}" : "Uprawnienia ustawione na domyślne dla {displayName}", + "Phone number could not be hung up" : "Nie można rozłączyć numeru telefonu", + "Phone number could not be put on hold" : "Nie można zawiesić numeru telefonu", + "Phone number could not be muted" : "Nie można wyciszyć numeru telefonu", + "Phone number could not be unmuted" : "Nie można wyłączyć wyciszenia numeru telefonu", + "DTMF message could not be sent" : "Nie można wysłać wiadomości DTMF", + "Phone number copied to clipboard" : "Numer telefonu skopiowany do schowka", + "Phone number could not be copied" : "Nie udało się skopiować numeru telefonu", + "in the lobby" : "w poczekalni", + "Dial out phone" : "Wybierz telefon", + "Hang up phone" : "Odłóż słuchawkę", + "Move back to lobby" : "Powrót do poczekali", + "Move to conversation" : "Przejdź do rozmowy", + "Dial-in PIN" : "Kod PIN połączenia telefonicznego", + "Demote from moderator" : "Degraduj z moderatora", + "Promote to moderator" : "Awansuj na moderatora", + "Resend invitation" : "Wyślij ponownie zaproszenie", + "Send call notification" : "Wyślij powiadomienie o połączeniu", + "Dial out phone number" : "Wybierz numer telefonu", + "Resume call for phone number" : "Wznów połączenie dla numeru telefonu", + "Put phone number on hold" : "Zawieś numer telefonu", + "Unmute phone number" : "Wyłącz wyciszenie numeru telefonu", + "Mute phone number" : "Wycisz numer telefonu", + "Copy phone number" : "Kopiuj numer telefonu", + "Reset custom permissions" : "Zresetuj uprawnienia niestandardowe", + "Grant all permissions" : "Przyznaj wszystkie uprawnienia", + "Remove all permissions" : "Usuń wszystkie uprawnienia", + "Also ban from this conversation" : "Zbanuj także z tej rozmowy", + "Internal note (reason to ban)" : "Notatka wewnętrzna (powód zbanowania)", + "Remove" : "Usuń", + "Permissions modified for {displayName}" : "Zmieniono uprawnienia dla {displayName}", + "Add users, groups or teams" : "Dodaj użytkowników, grupy lub zespoły", + "Add users or groups" : "Dodaj użytkowników lub grupy", + "Add users or teams" : "Dodaj użytkowników lub zespoły", + "Add users" : "Dodaj użytkowników", + "Add groups or teams" : "Dodaj grupy lub zespoły", + "Add groups" : "Dodaj grupy", + "Add teams" : "Dodaj zespoły", + "Add other sources" : "Dodaj inne źródła", + "Add emails" : "Dodaj e-maile", + "Integrations" : "Integracje", + "Add federated users" : "Dodaj użytkowników federacyjnych", + "Searching …" : "Wyszukiwanie…", + "Search for more users" : "Wyszukaj więcej użytkowników", + "You can search or add participants via name, email, or Federated Cloud ID" : "Możesz wyszukiwać i dodawać uczestników po nazwisku, adresie e-mail lub ID Chmury Federacyjnej", + "Search or add participants" : "Wyszukaj lub dodaj uczestników", + "Invitation was sent to {actorId}" : "Zaproszenie zostało wysłane do {actorId}", + "An error occurred while adding the participants" : "Wystąpił błąd podczas dodawania uczestników", + "A new group conversation with selected participant will be created" : "Zostanie utworzona nowa rozmowa grupowa z wybranym uczestnikiem", + "Participants" : "Uczestnicy", + "Pinned by a deleted user" : "Przypięte przez usuniętego użytkownika", + "Participants ({count})" : "Uczestnicy ({count})", + "Open chat" : "Otwórz rozmowę", + "You have new unread messages in the chat." : "Masz nowe nieprzeczytane wiadomości na czacie.", + "You have been mentioned in the chat." : "Zostałeś wspomniany na czacie.", + "Search messages" : "Szukaj wiadomości", + "Chat" : "Rozmowa", + "Details" : "Szczegóły", + "Shared items" : "Udostępnione elementy", + "Search in {name}" : "Szukaj w {name}", + "Threads in {name}" : "Wątki w {name}", + "{actor} in {conversation}" : "{actor} w {conversation}", + "Search messages …" : "Szukaj wiadomości…", + "Search options" : "Opcje wyszukiwania", + "From User" : "Od użytkownika", + "Since" : "Od", + "Until" : "Dopóki", + "No results found" : "Nie znaleziono wyników", + "Load more results" : "Wczytaj więcej wyników", + "Recent threads" : "Ostatnie wątki", + "Projects" : "Projekty", + "No shared items" : "Brak udostępnionych elementów", + "Thread notifications" : "Powiadomienia wątków", + "Thread actions" : "Akcje wątków", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link do rozmowy", + "No open conversations found" : "Nie znaleziono otwartych rozmów", + "Either there are no open conversations or you joined all of them." : "Albo nie ma żadnych otwartych rozmów, albo dołączyłeś do wszystkich.", + "Check spelling or use complete words." : "Sprawdź pisownię lub użyj pełnych słów.", + "Search conversations or users" : "Szukaj rozmów lub użytkowników", + "Select conversation" : "Wybierz rozmowę", + "Number length is not valid" : "Długość numeru jest nieprawidłowa", + "Region code is not valid" : "Kod regionu jest nieprawidłowy", + "Number length is too short" : "Długość numeru jest za krótka", + "Number length is too long" : "Długość numeru jest za długa", + "Number is not valid" : "Numer jest nieprawidłowy", + "Phone numbers" : "Numery telefonu", + "Display name: {name}" : "Wyświetlana nazwa: {name}", + "Edit display name" : "Edytuj wyświetlaną nazwę", + "Display name (required)" : "Wymagana nazwa wyświetlana", + "Save name" : "Zapisz nazwę", + "I picked message bubbles" : "Wybrałem dymki wiadomości", + "I picked the list style" : "Wybrałem styl listy", + "Error while setting personal setting" : "Błąd podczas ustawiania ustawień osobistych", + "Error while saving sounds setting" : "Błąd podczas zapisywania ustawień dźwięków", + "Compact conversations list" : "Kompaktowa lista rozmów", + "Chat appearance" : "Wygląd czatu", + "Messages list" : "Lista wiadomości", + "Message bubbles" : "Dymki wiadomości", + "Play sounds when participants join or leave a call" : "Odtwarzaj dźwięki, gdy uczestnicy dołączają lub opuszczają połączenie", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Obecnie niedostępne na iPhonie i iPadzie z powodu ograniczeń technicznych narzuconych przez producenta", + "Notification settings" : "Ustawienia powiadomień", + "Sounds for chat and call notifications" : "Dźwięki powiadomień czatu i połączeń", + "Invalid language ({languageId})" : "Nieprawidłowy język ({languageId})", + "Default language" : "Domyślny język", + "Default language ({languageName})" : "Język domyślny ({languageName})", + "Error when trying to load the available live translation languages" : "Błąd podczas próby wczytania dostępnych języków tłumaczenia na żywo", + "Error when trying to set live translation language" : "Błąd podczas próby ustawienia języka tłumaczenia na żywo", + "Set language used to show the transcriptions" : "Ustaw język używany do wyświetlania transkrypcji", + "Select location for attachments" : "Wybierz lokalizację dla załączników", + "Error while setting attachment folder" : "Błąd podczas ustawiania katalogu dla załącznika", + "Error while setting read status privacy" : "Błąd podczas ustawiania prywatności statusu odczytu", + "Error while setting typing status privacy" : "Błąd podczas ustawiania prywatności statusu pisania", + "Error while setting default media state" : "Błąd podczas ustawiania domyślnego stanu multimediów", + "Turn camera and microphone off by default" : "Domyślnie wyłącz kamerę i mikrofon", + "Blur camera background by default" : "Domyślnie rozmyj tło kamery", + "Skip device preview before joining a call" : "Pomiń podgląd urządzeń przed dołączeniem do rozmowy", + "Appearance & Sounds" : "Wygląd i dźwięki", + "Privacy" : "Prywatność", + "Send read receipts" : "Wysyłaj potwierdzenia odczytu", + "When off, all read statuses will be hidden" : "Gdy wyłączone, wszystkie statusy odczytu będą ukryte", + "Share typing status" : "Udostępniaj status pisania", + "When off, all typing indicators will be hidden" : "Gdy wyłączone, wszystkie wskaźniki pisania będą ukryte", + "Attachments folder" : "Katalog z załącznikami", + "Toggle full screen" : "Przełącz tryb pełnoekranowy", + "Return to Home screen" : "Wróć do ekranu głównego", + "Search" : "Szukaj", + "Shortcuts while in a chat" : "Skróty klawiaturowe w czacie", + "Focus the chat input" : "Skoncentruj się na rozmowie", + "Unfocus the chat input to use shortcuts" : "Zakończ koncentrację na rozmowie, aby używać skrótów", + "Edit your last message" : "Edytuj swoją ostatnią wiadomość", + "Shortcuts while in a call" : "Skróty podczas połączenia", + "Camera on and off" : "Włącz i wyłącz kamerę", + "Microphone on and off" : "Włącz i wyłącz mikrofon", + "Raise or lower hand" : "Podnieś lub opuść rękę", + "Push to talk or push to mute" : "Naciśnij, aby mówić lub naciśnij, aby wyciszyć", + "Zoom-in / zoom-out a screen share" : "Powiększanie/pomniejszanie udostępnionego ekranu", + "Mouse wheel" : "Kółko myszy", + "Start call silently" : "Rozpocznij połączenie po cichu", + "Start call" : "Rozpocznij połączenie", + "End call" : "Zakończ połączenie", + "The server was updated, you cannot start or join a call." : "Serwer został zaktualizowany, nie możesz rozpocząć ani dołączyć do rozmowy", + "This call has just ended" : "To połączenie właśnie się zakończyło", + "You will be able to join the call only after a moderator starts it." : "Do rozmowy będziesz mógł dołączyć dopiero jako moderator.", + "End call for everyone" : "Zakończ połączenie dla wszystkich", + "Starting the recording" : "Rozpoczęcie nagrywania", + "Recording" : "Nagranie", + "The call has been running for one hour." : "Połączenie trwa od godziny.", + "Cancel recording start" : "Anuluj rozpoczęcie nagrywania", + "Stop recording" : "Zatrzymaj nagrywanie", + "Send a reaction" : "Wyślij reakcję", + "React with {reaction}" : "Reakcja {reaction}", + "All tasks done!" : "Wszystkie zadania wykonane!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n zadania","{done} z %n zadań","{done} z %n zadań","{done} z %n zadań"], + "Add participants to this call" : "Dodaj uczestników do tej rozmowy", + "_%n participant in call_::_%n participants in call_" : ["%n uczestnik rozmowy","%n uczestników rozmowy","%n uczestników rozmowy","%n uczestników rozmowy"], + "Scheduled messages" : "Zaplanowane wiadomości", + "You are not allowed to enable screensharing" : "Nie możesz włączyć udostępniania ekranu", + "No screensharing" : "Brak udostępniania ekranu", + "Screensharing options" : "Opcje udostępniania ekranu", + "Enable screensharing" : "Włącz udostępnianie ekranu", + "Bad sent video and screen quality." : "Zła jakość wysyłanego obrazu wideo i ekranu.", + "Bad sent screen quality." : "Zła jakość wysyłanego ekranu.", + "Bad sent video quality." : "Zła jakość wysyłanego obrazu wideo.", + "Bad sent audio, video and screen quality." : "Zła jakość wysyłanego dźwięku, obrazu wideo i ekranu.", + "Bad sent audio and screen quality." : "Zła jakość wysyłanego dźwięku i ekranu.", + "Bad sent audio and video quality." : "Zła jakość wysyłanego dźwięku i obrazu wideo.", + "Bad sent audio quality." : "Zła jakość wysyłanego dźwięku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie widzieć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo podczas udostępniania ekranu.", + "Disable background blur" : "Wyłącz rozmycie tła", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie widzieć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą nie widzieć Twojego ekranu.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie widzieć.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć i nie widzieć. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć udostępnianie ekranu.", + "Disable screenshare" : "Wyłącz udostępnianie ekranu", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć i nie widzieć. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć.", + "Screen sharing is not supported by your browser." : "Udostępnianie ekranu nie jest obsługiwane przez Twoją przeglądarkę.", + "Screen sharing requires the page to be loaded through HTTPS." : "Udostępnianie ekranu wymaga załadowania strony za pomocą protokołu HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Udostępnianie ekranu wymaga załadowania strony za pomocą protokołu HTTPS.", + "An error occurred while starting screensharing." : "Wystąpił błąd podczas uruchamiania udostępniania ekranu.", + "Select virtual background" : "Wybierz wirtualne tło", + "Show your screen" : "Pokaż swój ekran", + "Stop screensharing" : "Zatrzymaj udostępnianie ekranu", + "Mute others" : "Wycisz innych", + "Start recording" : "Rozpocznij nagrywanie", + "Set up breakout rooms" : "Skonfiguruj pokoje podgrup", + "Download attendance list" : "Pobierz listę obecności", + "Open Calendar" : "Otwórz Kalendarz", + "Remove participant {name}" : "Usuń uczestnika {name}", + "Would you like to delete this conversation?" : "Czy chcesz usunąć tą rozmowę?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniu braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności"], + "Are you sure you want to delete this conversation?" : "Czy na pewno chcesz usunąć tę rozmowę?", + "Delete now" : "Usuń teraz", + "Keep" : "Pozostaw", + "Open dialpad" : "Otwórz klawiaturę numeryczną", + "Select a region" : "Wybierz region", + "Local time: {time}" : "Czas lokalny: {time}", + "Scheduled {datetime}" : "Zaplanowano {datetime}", + "Scheduled for {datetime}" : "Zaplanowano na {datetime}", + "Search …" : "Szukaj…", + "Message without mention" : "Wiadomość bez wzmianki", + "Mention myself" : "Wspomnij o sobie", + "Mention everyone" : "Wspomnij wszystkich", + "Select a conversation" : "Wybierz rozmowę", + "Select a mode" : "Wybierz tryb", + "You do not have permissions to access this conversation." : "Nie masz uprawnień dostępu do tej rozmowy.", + "Join a different conversation or start a new one." : "Dołącz do innej rozmowy lub rozpocznij nową.", + "The conversation does not exist" : "Rozmowa nie istnieje", + "Join a conversation or start a new one!" : "Dołącz do rozmowy lub rozpocznij nową!", + "Duplicate session" : "Duplikat sesji", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ta rozmowa została otwarta w innej karcie. Bieżąca wersja serwera nie obsługuje otwierania rozmowy w wielu kartach", + "Creating and joining a conversation with \"{userid}\"" : "Tworzenie i dołączanie do rozmowy z „{userid}”", + "Join a conversation or start a new one" : "Dołącz do rozmowy lub rozpocznij nową", + "Error while joining the conversation" : "Błąd podczas dołączania do rozmowy", + "Another user" : "Inny użytkownik", + "Hey! Are you using the list style or message bubbles?" : "Hej! Czy używasz stylu listy czy dymków wiadomości?", + "Nextcloud URL" : "Adres URL Nextcloud", + "Nextcloud user" : "Użytkownik Nextcloud", + "User password" : "Hasło użytkownika", + "Talk conversation" : "Rozmowa Talk", + "Skip TLS verification" : "Pomiń weryfikację TLS", + "Matrix server URL" : "Adres URL serwera Matrix", + "User" : "Użytkownik", + "Matrix channel" : "Kanał Matrix", + "Mattermost server URL" : "Adres URL serwera Mattermost", + "Mattermost user" : "Użytkownik Mattermost", + "Team name" : "Nazwa zespołu", + "Channel name" : "Nazwa kanału", + "Rocket.Chat server URL" : "Adres URL serwera Rocket.Chat", + "User name or email address" : "Nazwa użytkownika lub adres e-mail", + "Rocket.Chat channel" : "Kanał Rocket.Chat", + "Zulip server URL" : "Adres URL serwera Zulip", + "Bot user name" : "Nazwa użytkownika bota", + "Bot API key" : "Klucz API bota", + "Zulip channel" : "Kanał Zulip", + "API token" : "Token API", + "Slack channel" : "Kanał Slack", + "Server ID or name" : "ID lub nazwa serwera", + "Channel ID (prefixed with \"ID:\") or name" : "Identyfikator kanału (poprzedzony „ID:”) lub nazwa", + "Channel" : "Kanał", + "Login" : "Login", + "Chat ID" : "ID rozmowy", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Adres URL serwera IRC (np. chat.freenode.net:6667)", + "Nickname" : "Pseudonim", + "Connection password" : "Hasło połączenia", + "IRC channel" : "Kanał IRC", + "Channel password" : "Hasło kanału", + "NickServ nickname" : "Nazwa NickServ", + "NickServ password" : "Hasło NickServ", + "Use TLS" : "Użyj TLS", + "Use SASL" : "Użyj SASL", + "Tenant ID" : "ID Tenant", + "Client ID" : "ID klienta", + "Team ID" : "ID Team", + "Thread ID" : "ID Thread", + "XMPP/Jabber server URL" : "Adres URL serwera XMPP/Jabber", + "MUC server URL" : "Adres URL serwera MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Przypięte wiadomości", + "Media" : "Multimedia", + "Polls" : "Sondy", + "Deck cards" : "Karty tablicy", + "Voice messages" : "Wiadomości głosowe", + "Locations" : "Lokalizacje", + "Call recordings" : "Nagrania rozmów", + "Audio" : "Audio", + "Show all pinned messages" : "Pokaż wszystkie przypięte wiadomości", + "Show all media" : "Pokaż wszystkie multimedia", + "Show all files" : "Pokaż wszystkie pliki", + "Show all polls" : "Pokaż wszystkie sondy", + "Show all deck cards" : "Pokaż wszystkie karty tablicy", + "Show all voice messages" : "Pokaż wszystkie wiadomości głosowe", + "Show all locations" : "Pokaż wszystkie lokalizacje", + "Show all call recordings" : "Pokaż wszystkie nagrania rozmów", + "Show all audio" : "Pokaż wszystkie audio", + "Show all other" : "Pokaż wszystkie inne", + "Follow conversation settings" : "Śledź ustawienia rozmowy", + "Group" : "Grupa", + "Team" : "Zespół", + "You reconnected to the call" : "Ponownie połączyłeś się z połączeniem", + "{actor} reconnected to the call" : "{actor} ponownie połączył się z połączeniem", + "You added {user0} and {user1}" : "Dodałeś {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Dodałeś {user0}, {user1} i %n uczestnika","Dodałeś {user0}, {user1} i %n uczestników","Dodałeś {user0}, {user1} i %n uczestników","Dodałeś {user0}, {user1} i %n uczestników"], + "An administrator added you and {user0}" : "Administrator dodał Ciebie i {user0}", + "{actor} added you and {user0}" : "{actor} dodał Ciebie i {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrator dodał Ciebie, {user0} i %n uczestnika","Administrator dodał Ciebie, {user0} i %n uczestników","Administrator dodał Ciebie, {user0} i %n uczestników","Administrator dodał Ciebie, {user0} i %n uczestników"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} dodał Ciebie, {user0} i %n uczestnika","{actor} dodał Ciebie, {user0} i %n uczestników","{actor} dodał Ciebie, {user0} i %n uczestników","{actor} dodał Ciebie, {user0} i %n uczestników"], + "An administrator added {user0} and {user1}" : "Administrator dodał {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} dodał {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrator dodał {user0}, {user1} i %n uczestnika","Administrator dodał {user0}, {user1} i %n uczestników","Administrator dodał {user0}, {user1} i %n uczestników","Administrator dodał {user0}, {user1} i %n uczestników"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} dodał {user0}, {user1} i %n uczestnika","{actor} dodał {user0}, {user1} i %n uczestników","{actor} dodał {user0}, {user1} i %n uczestników","{actor} dodał {user0}, {user1} i %n uczestników"], + "You removed {user0} and {user1}" : "Usunąłeś {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Usunąłeś {user0}, {user1} i %n uczestnika","Usunąłeś {user0}, {user1} i %n uczestników","Usunąłeś {user0}, {user1} i %n uczestników","Usunąłeś {user0}, {user1} i %n uczestników"], + "An administrator removed you and {user0}" : "Administrator usunął Cię i {user0}", + "{actor} removed you and {user0}" : "{actor} usunął Ciebie i {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrator usunął Ciebie, {user0} i %n uczestnika","Administrator usunął Ciebie, {user0} i %n uczestników","Administrator usunął Ciebie, {user0} i %n uczestników","Administrator usunął Ciebie, {user0} i %n uczestników"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} usunął Ciebie, {user0} i %n uczestnika","{actor} usunął Ciebie, {user0} i %n uczestników","{actor} usunął Ciebie, {user0} i %n uczestników","{actor} usunął Ciebie, {user0} i %n uczestników"], + "An administrator removed {user0} and {user1}" : "Administrator usunął {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} usunął {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrator usunął {user0}, {user1} i %n innego uczestnika","Administrator usunął {user0}, {user1} i %n innych uczestników","Administrator usunął {user0}, {user1} i %n innych uczestników","Administrator usunął {user0}, {user1} i %n innych uczestników"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} usuną {user0}, {user1} i %n innego uczestnika","{actor} usuną {user0}, {user1} i %n innych uczestników","{actor} usuną {user0}, {user1} i %n innych uczestników","{actor} usuną {user0}, {user1} i %n innych uczestników"], + "You and {user0} joined the call" : "Ty i {user0} dołączyliście do połączenia", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ty, {user0} i %n uczestnik dołączył do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia"], + "{user0} and {user1} joined the call" : "{user0} i {user1} dołączyli do połączenia", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i %n uczestnik dołączył do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia"], + "You and {user0} left the call" : "Ty i {user0} opuściliście połączenie", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ty, {user0} i %n uczestnik opuścił połączenie","Ty, {user0} i %n uczestników opuściło połączenie","Ty, {user0} i %n uczestników opuściło połączenie","Ty, {user0} i %n uczestników opuściło połączenie"], + "{user0} and {user1} left the call" : "{user0} i {user1} opuścili połączenie", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i %n uczestnik opuścił połączenie","{user0}, {user1} i %n uczestników opuściło połączenie","{user0}, {user1} i %n uczestników opuściło połączenie","{user0}, {user1} i %n uczestników opuściło połączenie"], + "You promoted {user0} and {user1} to moderators" : "Awansowałeś {user0} i {user1} na moderatorów", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestnika","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników"], + "An administrator promoted you and {user0} to moderators" : "Administrator awansował Ciebie i {user0} na moderatorów", + "{actor} promoted you and {user0} to moderators" : "{actor} awansował Ciebie i {user0} na moderatorów", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrator awansował Ciebie, {user0} i %n uczestnika na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} awansował Ciebie, {user0} i %n uczestnika na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrator awansował {user0} i {user1} na moderatorów", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} awansował {user0} i {user1} na moderatorów", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrator awansował {user0}, {user1} i %n uczestnika na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} awansował {user0}, {user1} i %n uczestnika na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów"], + "You demoted {user0} and {user1} from moderators" : "Zdegradowałeś {user0} i {user1} z moderatorów", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Zdegradowałeś {user0}, {user1} i %n innego uczestnika z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów"], + "An administrator demoted you and {user0} from moderators" : "Administrator zdegradował Ciebie i użytkownika {user0} z moderatorów", + "{actor} demoted you and {user0} from moderators" : "{actor} zdegradował Ciebie i {user0} z moderatorów", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrator zdegradował Ciebie, {user0} i %n innego uczestnika z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} zdegradował Ciebie, {user0} i %n innego uczestnika z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrator zdegradował użytkowników {user0} i {user1} z moderatorów", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} zdegradował użytkowników {user0} i {user1} z moderatorów", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrator zdegradował {user0}, {user1} i %n uczestnika z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} zdegradował {user0}, {user1} i %n innego uczestnika z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów"], + "You:" : "Ty:", + "You: {lastMessage}" : "Ty: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serwer został zaktualizowany", + "(edited by you)" : "(edytowane przez Ciebie)", + "(edited by a deleted user)" : "(edytowane przez usuniętego użytkownika)", + "(edited by {moderator})" : "(edytowane przez {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Próbujesz dołączyć do rozmowy, mając aktywną sesję w innym oknie lub urządzeniu. Obecnie ta sesja nie jest jeszcze obsługiwana przez Nextcloud Talk. Co chcesz zrobić?", + "Leave this page" : "Opuść stronę", + "Join here" : "Dołącz tutaj", + "Deck card has been posted to {conversation}" : "Tablica została opublikowana w {conversation}", + "An error occurred while posting deck card to conversation" : "Wystąpił błąd podczas dodawania karty do rozmowy", + "Post to a conversation" : "Opublikuj w rozmowie", + "Post to conversation" : "Opublikuj w rozmowie", + "The recording failed. Please contact your administrator." : "Nagrywanie nie powiodło się. Skontaktuj się z administratorem.", + "Location has been posted to {conversation}" : "Lokalizacja została wysłana do {conversation}", + "An error occurred while posting location to conversation" : "Wystąpił błąd podczas publikowania lokalizacji w rozmowie", + "Share to a conversation" : "Udostępnij w rozmowie", + "Share to conversation" : "Udostępnij w rozmowie", + "In conversation" : "W rozmowie", + "Search in conversation: {conversation}" : "Szukaj w rozmowie: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Twoje żądania są obecnie ograniczane ze względu na ochronę przed atakami typu brute force", + "Error while clearing conversation history" : "Błąd podczas czyszczenia historii rozmowy", + "Error occurred while allowing guests" : "Wystąpił błąd podczas zezwalania gościom", + "Error occurred while disallowing guests" : "Wystąpił błąd podczas blokowania gościom", + "Error occurred when restricting the conversation to moderator" : "Wystąpił błąd podczas ograniczania rozmowy do moderatora", + "Error occurred when opening the conversation to everyone" : "Wystąpił błąd podczas otwierania rozmowy dla wszystkich", + "Conversation password has been saved" : "Hasło do rozmowy zostało zapisane", + "Conversation password has been removed" : "Hasło do rozmowy zostało usunięte", + "Error occurred while saving conversation password" : "Wystąpił błąd podczas zapisywania hasła do rozmowy", + "Call recording is starting." : "Rozpoczęło się nagrywanie rozmowy.", + "Call recording stopped while starting." : "Nagrywanie rozmowy zostało zatrzymane podczas uruchamiania.", + "Call recording stopped. You will be notified once the recording is available." : "Nagrywanie rozmowy zostało zatrzymane. Otrzymasz powiadomienie, gdy nagranie będzie dostępne.", + "Conversation picture set" : "Zestaw obrazów rozmowy", + "Conversation picture deleted" : "Obraz rozmowy został usunięty", + "Could not delete the conversation picture" : "Nie można usunąć obrazu rozmowy", + "Could not remove the automatic expiration" : "Nie udało się usunąć automatycznego wygaśnięcia", + "Could not post message: {errorMessage}" : "Nie można wysłać wiadomości: {errorMessage}", + "Participant is banned successfully" : "Uczestnik został pomyślnie zbanowany", + "Error while banning the participant" : "Błąd podczas blokowania uczestnika", + "An error occurred while fetching the participants" : "Wystąpił błąd podczas pobierania uczestników", + "Could not send invitation to {actorId}" : "Nie można wysłać zaproszenia do {actorId}", + "Invitations sent" : "Wysłano zaproszenia", + "Error occurred when sending invitations" : "Wystąpił błąd podczas wysyłania zaproszeń", + "Failed to join the conversation." : "Nie udało się dołączyć do rozmowy.", + "An error occurred while creating breakout rooms" : "Podczas tworzenia pokoi podgrup wystąpił błąd", + "An error occurred while re-ordering the attendees" : "Podczas zmiany kolejności uczestników wystąpił błąd", + "An error occurred while deleting breakout rooms" : "Podczas usuwania pokoi podgrup wystąpił błąd", + "An error occurred while starting breakout rooms" : "Podczas uruchamiania pokoi podgrup wystąpił błąd", + "An error occurred while stopping breakout rooms" : "Podczas zatrzymywania pokoi podgrup wystąpił błąd", + "An error occurred while sending a message to the breakout rooms" : "Podczas wysyłania wiadomości do pokoi podgrup wystąpił błąd", + "An error occurred while requesting assistance" : "Wystąpił błąd podczas prośby o pomoc", + "An error occurred while resetting the request for assistance" : "Wystąpił błąd podczas resetowania prośby o pomoc", + "An error occurred while joining breakout room" : "Podczas dołączania do podgrupy wystąpił błąd", + "Failed to rename the thread" : "Nieudana próba zmiany nazwy wątku", + "Error fetching upcoming events" : "Błąd podczas pobierania nadchodzących wydarzeń", + "Error fetching upcoming reminders" : "Błąd podczas pobierania nadchodzących przypomnień", + "An error occurred while accepting an invitation" : "Wystąpił błąd podczas akceptowania zaproszenia", + "An error occurred while rejecting an invitation" : "Wystąpił błąd podczas odrzucania zaproszenia", + "{guest} (guest)" : "{guest} (gość)", + "Poll draft has been saved" : "Wersja robocza ankiety została zapisana", + "An error occurred while saving the draft" : "Wystąpił błąd podczas zapisywania wersji roboczej", + "An error occurred while submitting your vote" : "Wystąpił błąd podczas wysyłania głosu", + "An error occurred while ending the poll" : "Wystąpił błąd podczas zamykania sondy", + "An error occurred while deleting the poll draft" : "Wystąpił błąd podczas usuwania wersji roboczej ankiety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Sonda \"{name}\" została utworzona przez {user}. Kliknij, aby zagłosować", + "Failed to add reaction" : "Nie udało się dodać reakcji", + "Failed to remove reaction" : "Nie udało się usunąć reakcji", + "The server is in maintenance mode." : "Serwer jest w trybie konserwacji", + "Federated server was updated." : "Zaktualizowano serwer federacyjny", + "Error while uploading file \"{fileName}\"" : "Błąd podczas wysyłania pliku \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Za mało wolnego miejsca, aby wysłać plik \"{fileName}\"", + "You are not allowed to share files" : "Nie możesz udostępniać plików", + "Error while sharing file" : "Błąd podczas udostępniania pliku", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Używana przeglądarka nie obsługuje w pełni Nextcloud Talk. Użyj najnowszej wersji Mozilla Firefox, Microsoft Edge, Google Chrome, Opera lub Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Za %n godzinę","Za %n godziny","Za %n godzin","Za %n godzin"], + "_%n minute _::_%n minutes_" : ["%n minutę","%n minuty","%n minut","%n minut"], + "In {hours} and {minutes}" : "Za {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["Za %n minutę","Za %n minuty","Za %n minut","Za %n minut"], + "Later today – {timeLocale}" : "Później dzisiaj – {timeLocale}", + "Set time for later today" : "Ustaw czas na później dziś", + "Tomorrow – {timeLocale}" : "Jutro – {timeLocale}", + "Set time for tomorrow" : "Ustaw czas na jutro", + "This weekend – {timeLocale}" : "W ten weekend – {timeLocale}", + "Set time for this weekend" : "Ustaw czas na ten weekend", + "Next week – {timeLocale}" : "Następny tydzień – {timeLocale}", + "Set time for next week" : "Ustaw czas na przyszły tydzień", + "Message link copied to clipboard" : "Link wiadomości został skopiowany do schowka", + "Conversation link copied to clipboard" : "Link do rozmowy skopiowany do schowka", + "The link could not be copied" : "Nie można skopiować linku", + "Error while parsing a PROPFIND error" : "Wystąpił błąd podczas analizowania błędu PROPFIND", + "Sending signaling message has failed" : "Wysłanie wiadomości sygnalizacyjnej nie powiodło się", + "Lost connection to signaling server. Trying to reconnect." : "Utracono połączenie z serwerem sygnalizacyjnym. Ponowna próba połączenia się.", + "Lost connection to signaling server." : "Utracono połączenie z serwerem sygnalizacyjnym.", + "Connecting is taking longer than expected …" : "Łączenie trwa dłużej niż oczekiwano…", + "Failed to connect. Retrying …" : "Nie udało się połączyć. Ponawianie…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nie udało się połączyć. Serwer sygnalizacyjny może być nieprawidłowo skonfigurowany", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Skonfigurowany serwer sygnalizacyjny wymaga aktualizacji, aby był kompatybilny z tą wersją Talka. Skontaktuj się z administracją.", + "Please restart the app." : "Uruchom ponownie aplikację.", + "Please reload the page." : "Przeładuj stronę.", + "Please try to restart the app." : "Spróbuj ponownie uruchomić aplikację.", + "Please try to reload the page." : "Spróbuj ponownie wczytać stronę.", + "Do not disturb" : "Nie przeszkadzać", + "Away" : "Bezczynny", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Głośnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Wygląda na to, że jesteś wyciszony podczas rozmowy. Wyłącz wyciszenie, aby inni mogli Ciebie usłyszeć.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nie można nawiązać połączenia z żadnym uczestnikiem. Serwer TURN może być potrzebny w Twoim przypadku. Poproś administratora o skonfigurowanie go zgodnie z {linkstart}tą dokumentacją{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Trwa to dłużej niż oczekiwano. Czy uprawnienia do mediów zostały już przyznane (lub odrzucone)? Jeśli tak, to uruchom ponownie przeglądarkę, ponieważ dźwięk i obraz wideo nie działają poprawnie", + "Access to microphone & camera is only possible with HTTPS" : "Dostęp do mikrofonu i kamery jest możliwy tylko przy użyciu protokołu HTTPS", + "Please move your setup to HTTPS" : "Przenieś konfigurację do HTTPS", + "Access to microphone & camera was denied" : "Odmówiono dostępu do mikrofonu i kamery", + "WebRTC is not supported in your browser" : "WebRTC nie jest obsługiwany w Twojej przeglądarce", + "Please use a different browser like Firefox or Chrome" : "Użyj innej przeglądarki, takiej jak Firefox lub Chrome", + "Error while accessing microphone & camera" : "Wystąpił błąd podczas dostępu do mikrofonu i kamery", + "%s Talk on your mobile devices" : "%s Talk na urządzeniach mobilnych", + "Join conversations at any time, anywhere, on any device." : "Dołącz do rozmów w dowolnym momencie, w dowolnym miejscu i na dowolnym urządzeniu.", + "Android app" : "Aplikacja Android", + "iOS app" : "Aplikacja na iOS", + "__language_name__" : "Polski", + "Webhook Demo" : "Demo Webhook", + "Call summary (%s)" : "Podsumowanie połączenia (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot podsumowujący rozmowę publikuje po połączeniu wiadomość zawierającą listę wszystkich uczestników i opis zadań", + "Tasks" : "Zadania", + "Notes" : "Notatki", + "Reports" : "Raporty", + "Decisions" : "Decyzje", + "Agenda" : "Porządek obrad", + "Call summary" : "Podsumowanie rozmowy", + "Call summary - {title}" : "Podsumowanie rozmowy - {title}", + "Talk conversation for event" : "Rozpocznij rozmowę dotyczącą wydarzenia", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push jest zainstalowany, a to znacząco zwiększa wydajność w klienckich aplikacjach desktopowych. ", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nie jest zainstalowane, to może prowadzić do problemów z wydjanością i prawidłowym działaniem aplikacji klienckich. ", + "Next meeting" : "Następne spotkanie", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Zaplanuj spotkanie z kalendarza. Rozmowa w Talk musi być ustawiona jako lokalizacja, aby pojawiła się tutaj", + "Join conversations from remote Nextcloud servers" : "Dołącz do rozmów ze zdalnych serwerów Nextcloud", + "Your default media state has been saved" : "Twój domyślny stan multimediów został zapisany", + "Set reminder for later today" : "Ustaw przypomnienie na dzisiaj na późniejszy czas", + "Set reminder for tomorrow" : "Ustaw przypomnienie na jutro", + "Set reminder for this weekend" : "Ustaw przypomnienie na ten weekend", + "Set reminder for next week" : "Ustaw przypomnienie na przyszły tydzień", + "Generate summary" : "Wygeneruj podsumowanie", + "Open poll • You voted already" : "Otwórz sondę • Już głosowałeś", + "Open poll • Click to vote" : "Otwórz sondę • Kliknij, aby głosować", + "Poll • Ended" : "Sonda • Zakończona", + "Talk recording from {time} ({conversation})" : "Nagranie rozmowy z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Wyniki sondy • %n głos","Wyniki sondy • %n głosy","Wyniki sondy • %n głosów","Wyniki sondy • %n głosów"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otwórz sondę • %n głos","Otwórz sondę • %n głosy","Otwórz sondę • %n głosów","Otwórz sondę • %n głosów"], + "Submit vote" : "Wyślij głos", + "Your privacy setting has been saved" : "Twoje ustawienia prywatności zostały zapisane", + "Your personal setting has been saved" : "Twoje ustawienia osobiste zostały zapisane", + "Failed to save sounds setting" : "Nie udało się zapisać ustawienia dźwięków", + "Sounds setting saved" : "Zapisano ustawienia dźwięków", + "Always shown if recording consent is required" : "Zawsze wyświetlane, jeśli wymagana jest zgoda na nagrywanie", + "Nextcloud Talk was updated, you cannot start or join a call." : "Usługa Nextcloud Talk została zaktualizowana. Nie można rozpocząć ani dołączyć do rozmowy.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Dołączyłeś do rozmowy w innym oknie lub urządzeniu. Ta sesja została zamknięta, ponieważ nie jest obecnie obsługiwana przez Nextcloud Talk.", + "Nextcloud Talk was updated." : "Zaktualizowano Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud jest w trybie konserwacji.", + "Nextcloud Talk Federation was updated." : "Zaktualizowano Nextcloud Talk Federation.", + "Enable live translation" : "Włącz tłumaczenie na żywo", + "I picked list style" : "Wybrałem widok listy", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Korzystasz z Talk w widoku listy czy z dymkami wiadomości?" +}, +"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);"); diff --git a/l10n/pl.json b/l10n/pl.json new file mode 100644 index 0000000..d58b6c2 --- /dev/null +++ b/l10n/pl.json @@ -0,0 +1,2254 @@ +{ "translations": { + "a conversation" : "rozmowa", + "(Duration %s)" : "(Czas trwania %s)", + "You attended a call with {user1}" : "Brałeś udział w rozmowie z {user1}", + "_%n guest_::_%n guests_" : ["%n gość","%n gości","%n gości","%n gości"], + "You attended a call with {user1} and {user2}" : "Brałeś udział w rozmowie z {user1} i {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Brałeś udział w rozmowie z {user1}, {user2} i {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Brałeś udział w rozmowie z {user1}, {user2}, {user3} i {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Brałeś udział w rozmowie z {user1}, {user2}, {user3}, {user4} i {user5}", + "_%n other_::_%n others_" : ["%n innym","%n innymi","%n innymi","%n innymi"], + "{actor} invited you to {call}" : "{actor} zaprosił Ciebie do {call}", + "You were invited to a conversation or had a call" : "Zostałeś zaproszony do rozmowy lub miałeś połączenie", + "Other activities" : "Inne aktywności", + "Talk" : "Talk", + "Guest" : "Gość", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Witamy w Nextcloud Talk!\nW tej rozmowie zostaniesz poinformowany o nowych funkcjach dostępnych w Nextcloud Talk.", + "## New in Talk %s" : "## Nowość w Talku %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge i Safari mogą być teraz używane do połączeń audio i wideo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Rozmowy indywidualne są teraz stałe i nie można ich przypadkowo zmienić na rozmowy grupowe. Również gdy jeden z uczestników opuszcza rozmowę, rozmowa nie jest automatycznie usuwana. Rozmowa zostanie usunięta z serwera tylko wtedy, gdy obaj uczestnicy opuszczą ją.", + "- You can now notify all participants by posting \"@all\" into the chat" : "* Możesz teraz powiadomić wszystkich uczestników, wysyłając na czacie wiadomość \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Za pomocą klawisza \"strzałka w górę\" możesz ponownie umieścić swoją ostatnią wiadomość", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk obsługuje teraz polecenia. Aby sprawdzić, czy administrator skonfigurował je, wyślij \"/help\" jako wiadomość na czacie", + "- With projects you can create quick links between conversations, files and other items" : "- Dzięki projektom możesz tworzyć szybkie łącza między rozmowami, plikami i innymi elementami", + "- You can now mention guests in the chat" : "- Możesz teraz wspomnieć o gościach na czacie", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Rozmowy mają teraz poczekalnie. Umożliwia to moderatorom dołączenie do czatu, aby porozmawiać o przygotowaniu spotkania, podczas oczekiwania na nią przez użytkowników i gości", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Możesz teraz bezpośrednio odpowiadać na wiadomości, dając innym użytkownikom szerszy kontekst na temat Twojej wiadomości", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Wyszukiwanie rozmów i uczestników będzie teraz również filtrować istniejące rozmowy, co znacznie ułatwi znajdowanie wcześniejszych rozmów", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Możesz teraz dodawać własne grupy użytkowników do rozmów dzięki zainstalowanej aplikacji kręgów", + "- Check out the new grid and call view" : "- Sprawdź nowy widok siatki i połączeń", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Możesz teraz przesyłać i przeciągać pliki bezpośrednio z urządzenia do czatu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Udostępniane pliki są teraz otwierane bezpośrednio w widoku czatu za pomocą aplikacji przeglądarki", + "- You can now search for chats and messages in the unified search in the top bar" : "- Możesz teraz wyszukiwać czaty i wiadomości w ujednoliconym wyszukiwaniu na górnym pasku", + "- Spice up your messages with emojis from the emoji picker" : "- Urozmaicaj swoje wiadomości emotikonami z selektora emoji", + "- You can now change your camera and microphone while being in a call" : "- Możesz teraz zmienić kamerę i mikrofon podczas rozmowy", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Nadaj swoim rozmowom kontekst za pomocą opisu i otwórz go, aby zalogowani użytkownicy mogli go znaleźć i dołączyć do Ciebie", + "- See a read status and send failed messages again" : "- Zobacz status odczytu i ponownie wyślij nieodczytane wiadomości", + "- Raise your hand in a call with the R key" : "- Podnieś rękę w rozmowie za pomocą klawisza R.", + "- Join the same conversation and call from multiple devices" : "- Dołącz do tej samej rozmowy i wykonuj połączenia z wielu urządzeń", + "- Send voice messages, share your location or contact details" : "- Wysyłaj wiadomości głosowe, udostępniaj swoją lokalizację lub dane kontaktowe", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodaj grupy do rozmowy, a nowi członkowie grupy zostaną automatycznie dodani jako uczestnicy", + "- A preview of your audio and video is shown before joining a call" : "- Podgląd audio i wideo jest wyświetlany przed dołączeniem do połączenia", + "- You can now blur your background in the newly designed call view" : "- Możesz teraz rozmyć tło w nowo zaprojektowanym widoku połączenia", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorzy mogą teraz przydzielać uczestnikom ogólne i indywidualne uprawnienia", + "- You can now react to chat messages" : "- Możesz teraz reagować na wiadomości na czacie", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na pasku bocznym możesz teraz znaleźć przegląd najnowszych udostępnionych elementów", + "- Use a poll to collect the opinions of others or settle on a date" : "- Użyj sondy, aby zebrać opinie innych lub ustalić datę", + "- Configure an expiration time for chat messages" : "- Skonfiguruj czas wygaśnięcia wiadomości na czacie", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Rozpocznij rozmowy bez powiadamiania innych o dużych rozmowach. Po rozpoczęciu połączenia możesz wysyłać indywidualne powiadomienia o połączeniach.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Wysyłaj wiadomości na czacie bez powiadamiania odbiorców, jeśli nie jest to pilne", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoje można teraz uzupełniać automatycznie, wpisując \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Połącz różne elementy za pomocą nowego inteligentnego wyboru, wpisując \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorzy mogą teraz tworzyć pokoje podgrup (wymaga zaplecza o wysokiej wydajności)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Można teraz nagrywać rozmowy (wymaga zaplecza o wysokiej wydajności)", + "- Conversations can now have an avatar or emoji as icon" : "- Rozmowy mogą teraz mieć awatar lub emoji jako ikonę", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Oprócz rozmytego tła w wideo rozmowach dostępne są teraz wirtualne tła", + "- Reactions are now available during calls" : "- Reakcje są teraz dostępne podczas połączeń", + "- Typing indicators show which users are currently typing a message" : "- Wskaźniki pisania pokazują, którzy użytkownicy aktualnie piszą wiadomość", + "- Groups can now be mentioned in chats" : "- Można teraz wspominać o grupach na czatach", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Nagrania rozmów są automatycznie transkrybowane, jeśli zarejestrowana jest aplikacja dostawcy transkrypcji", + "- Chat messages can be translated if a translation provider app is registered" : "- Wiadomości czatu można tłumaczyć, jeśli zarejestrowana jest aplikacja dostawcy tłumaczeń", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** może być teraz używany w _chat_ messages", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Dostępne są teraz webhooki umożliwiające wdrażanie botów. Zobacz dokumentację, aby uzyskać więcej informacji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ustaw przypomnienie w wiadomości na czacie, aby otrzymać później powiadomienie", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Korzystaj z konwersacji **Notatka dla siebie**, aby robić notatki i udostępniać informacje między swoimi urządzeniami", + "- Captions allow to send a message with a file at the same time" : "- Tytuły umożliwiają jednoczesne wysłanie wiadomości z plikiem", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Wideo mówiącego jest teraz widoczne podczas udostępniania ekranu, a reakcje w połączeniach są animowane", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Wiadomości mogą teraz być edytowane przez zalogowanych autorów i moderatorów przez 6 godzin", + "- Unsent message drafts are now saved in your browser" : "- Wersje robocze niewysłanych wiadomości są teraz zapisywane w Twojej przeglądarce", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Rozmowy tekstowe można teraz prowadzić w sposób stowarzyszony z innymi serwerami Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorzy mogą teraz blokować konta i gości, aby uniemożliwić im ponowne dołączenie do rozmowy", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadchodzące połączenia z powiązanych wydarzeń w kalendarzu i zastępstw, gdy jest się poza biurem są teraz wyświetlane w rozmowach", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Połączenia mogą być teraz wykonywane w sposób federacyjny z innymi serwerami Talk (wymaga wysokowydajnego zaplecza)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Przedstawiamy klienta stacjonarnego Nextcloud Talk dla systemów Windows, macOS i Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Podsumowuj nagrania rozmów i nieprzeczytane wiadomości na czatach za pomocą Asystenta Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Usprawnienie spotkań z rozpoznawaniem zaproszonych gości na podstawie ich adresu e-mail, importem list uczestników, szkicami ankiet i pobieraniem list uczestników rozmów", + "- Archive conversations to stay focused" : "- Archiwizuj rozmowy, aby zachować koncentrację", + "- Schedule a meeting into your calendar from within a conversation" : "- Zaplanuj spotkanie w kalendarzu z poziomu rozmowy", + "- Search for messages of the current conversation directly in the right sidebar" : "- Wyszukaj wiadomości z bieżącej rozmowy bezpośrednio na pasku bocznym po prawej stronie", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Zobacz więcej rozmów na pierwszy rzut oka dzięki nowej, kompaktowej liście (można ją włączyć w ustawieniach rozmów)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "– Rozmowy spotkań są teraz synchronizowane z tytułem i opisem z kalendarza i pozostają ukryte w wynikach wyszukiwania aż do momentu zbliżenia się terminu rozpoczęcia.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "– Oznacz rozmowy jako wrażliwe w ustawieniach powiadomień, aby ukryć treść wiadomości na liście rozmów i w powiadomieniach.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "– Aby otrzymywać powiadomienia push podczas trybu „Nie przeszkadzać”, oznacz rozmowy jako ważne", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "– Dodaj innych uczestników do połączenia jeden na jeden, aby dynamicznie utworzyć nowe połączenie grupowe", + "- Use threads to keep your chat and discussions organized" : "- Używaj wątków, aby utrzymać porządek w czatach i dyskusjach", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Transkrypcje na żywo są teraz dostępne podczas rozmowy (wymaga aplikacji ExApp do transkrypcji na żywo i wydajnego backendu)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatorzy mogą teraz przypinać wiadomości, aby były wyświetlane na górze", + "- Schedule a message to send it at a later time" : "- Zaplanuj wysłanie wiadomości na później", + "_All %n participant_::_All %n participants_" : ["Wszyscy %n uczestnik","Wszyscy %n uczestników","Wszyscy %n uczestników","Wszyscy %n uczestników"], + "Talk updates ✅" : "Aktualizacje Talka ✅", + "Reaction deleted by author" : "Reakcja usunięta przez autora", + "{actor} created the conversation" : "{actor} utworzył rozmowę", + "You created the conversation" : "Utworzyłeś rozmowę", + "System created the conversation" : "System utworzył rozmowę", + "An administrator created the conversation" : "Administrator utworzył rozmowę", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} zmienił nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Zmieniłeś nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrator zmienił nazwę rozmowy z \"%1$s\" na \"%2$s\"", + "{actor} set the description" : "{actor} ustawił opis", + "You set the description" : "Ustawiłeś opis", + "An administrator set the description" : "Administrator ustawił opis", + "{actor} removed the description" : "{actor} usunął opis", + "You removed the description" : "Usunąłeś opis", + "An administrator removed the description" : "Administrator usunął opis", + "You started a silent call" : "Rozpocząłeś cichą rozmowę", + "Outgoing silent call" : "Wychodzące, ciche połączenie", + "{actor} started a silent call" : "{actor} rozpoczął cichą rozmowę", + "Incoming silent call" : "Przychodzące ciche połączenie", + "You started a call" : "Rozpocząłeś połączenie", + "Outgoing call" : "Połączenie wychodzące", + "{actor} started a call" : "{actor} rozpoczął połączenie", + "Incoming call" : "Przychodzące połączenie", + "{actor} joined the call" : "{actor} dołączył do rozmowy", + "You joined the call" : "Dołączyłeś do rozmowy", + "{actor} left the call" : "{actor} rozłączył się", + "You left the call" : "Rozłączyłeś się", + "{actor} unlocked the conversation" : "{actor} odblokował rozmowę", + "You unlocked the conversation" : "Odblokowałeś rozmowę", + "An administrator unlocked the conversation" : "Administrator odblokował rozmowę", + "{actor} locked the conversation" : "{actor} zablokował rozmowę", + "You locked the conversation" : "Zablokowałeś rozmowę", + "An administrator locked the conversation" : "Administrator zablokował rozmowę", + "{actor} limited the conversation to the current participants" : "{actor} ograniczył rozmowę do obecnych uczestników", + "You limited the conversation to the current participants" : "Ograniczyłeś rozmowę do obecnych uczestników", + "An administrator limited the conversation to the current participants" : "Administrator ograniczył rozmowę do obecnych uczestników", + "{actor} opened the conversation to registered users" : "{actor} otworzył rozmowę dla zarejestrowanych użytkowników", + "You opened the conversation to registered users" : "Otworzyłeś rozmowę dla zarejestrowanych użytkowników", + "An administrator opened the conversation to registered users" : "Administrator otworzył rozmowę dla zarejestrowanych użytkowników", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otworzył rozmowę zarejestrowanym użytkownikom i użytkownikom utworzonym za pomocą aplikacji Goście", + "You opened the conversation to registered users and users created with the Guests app" : "Otworzyłeś rozmowę dla zarejestrowanych użytkowników i użytkowników utworzonych za pomocą aplikacji Goście", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrator otworzył rozmowę zarejestrowanym użytkownikom i użytkownikom utworzonym za pomocą aplikacji Goście", + "The conversation is now open to everyone" : "Rozmowa jest teraz otwarta dla wszystkich", + "{actor} opened the conversation to everyone" : "{actor} otworzył rozmowę dla wszystkich", + "You opened the conversation to everyone" : "Otworzyłeś rozmowę dla wszystkich", + "{actor} restricted the conversation to moderators" : "{actor} ograniczył rozmowę tylko dla moderatorów", + "You restricted the conversation to moderators" : "Ograniczyłeś rozmowę tylko dla moderatorów", + "{actor} started breakout rooms" : "{actor} założył pokoje podgrup", + "You started breakout rooms" : "Założyłeś pokoje podgrup", + "{actor} stopped breakout rooms" : "{actor} zatrzymał pokoje podgrup", + "You stopped breakout rooms" : "Zatrzymałeś pokoje podgrup", + "{actor} allowed guests" : "{actor} pozwolił gościom", + "You allowed guests" : "Pozwoliłeś gościom", + "An administrator allowed guests" : "Administrator pozwolił gościom", + "{actor} disallowed guests" : "{actor} odzrzucił gości", + "You disallowed guests" : "Odrzuciłeś gości", + "An administrator disallowed guests" : "Administrator zabronił gościom", + "{actor} set a password" : "{actor} ustawił hasło", + "You set a password" : "Ustawiłeś hasło", + "An administrator set a password" : "Administrator ustawił hasło", + "{actor} removed the password" : "{actor} usunął hasło", + "You removed the password" : "Usunąłeś hasło", + "An administrator removed the password" : "Administrator usunął hasło", + "{actor} added {user}" : "{actor} dodał {user}", + "You joined the conversation" : "Dołączyłeś do rozmowy", + "{actor} joined the conversation" : "{actor} dołączył do rozmowy", + "You added {user}" : "Dodałeś {user}", + "{actor} added you" : "{actor} dodał Ciebie", + "An administrator added you" : "Administrator dodał Ciebie", + "An administrator added {user}" : "Administrator dodał {user}", + "You left the conversation" : "Opuściłeś rozmowę", + "{actor} left the conversation" : "{actor} opuścił rozmowę", + "{actor} removed {user}" : "{actor} usunął {user}", + "You removed {user}" : "Usunąłeś {user}", + "{actor} removed you" : "{actor} usunął Ciebie", + "An administrator removed you" : "Administrator usunął Ciebie", + "An administrator removed {user}" : "Administrator usunął {user}", + "{actor} invited {federated_user}" : "{actor} zaprosił {federated_user}", + "You invited {federated_user}" : "Zaprosiłeś {federated_user}", + "You accepted the invitation" : "Przyjąłeś zaproszenie", + "{actor} invited you" : "{actor} zaprosił Ciebie", + "An administrator invited you" : "Administrator zaprosił Ciebie", + "An administrator invited {federated_user}" : "Administrator zaprosił {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} przyjął zaproszenie", + "{actor} removed {federated_user}" : "{actor} usunął {federated_user}", + "You removed {federated_user}" : "Usunąłeś {federated_user}", + "You declined the invitation" : "Odrzuciłeś zaproszenie", + "An administrator removed {federated_user}" : "Administrator usunął {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odrzucił zaproszenie", + "{actor} added group {group}" : "{actor} dodał grupę {group}", + "You added group {group}" : "Dodałeś grupę {group}", + "An administrator added group {group}" : "Administrator dodał grupę {group}", + "{actor} removed group {group}" : "{actor} usunął grupę {group}", + "You removed group {group}" : "Usunąłeś grupę {group}", + "An administrator removed group {group}" : "Administrator usunął grupę {group}", + "{actor} added team {circle}" : "{actor} dodał zespół {circle}", + "You added team {circle}" : "Dodałeś zespół {circle}", + "An administrator added team {circle}" : "Administrator dodał zespół {circle}", + "{actor} removed team {circle}" : "{actor} usunął zespół {circle}", + "You removed team {circle}" : "Usunąłeś zespół {circle}", + "An administrator removed team {circle}" : "Administrator usunął zespół {circle}", + "{actor} added {phone}" : "{actor} dodał {phone}", + "You added {phone}" : "Dodałeś {phone}", + "An administrator added {phone}" : "Administrator dodał {phone}", + "{actor} removed {phone}" : "{actor} usunął {phone}", + "You removed {phone}" : "Usunąłeś {phone}", + "An administrator removed {phone}" : "Administrator usunął telefon {phone}", + "{actor} promoted {user} to moderator" : "{actor} awansował {user} na moderatora", + "You promoted {user} to moderator" : "Awansowałeś {user} na moderatora", + "{actor} promoted you to moderator" : "{actor} awansował Ciebie na moderatora", + "An administrator promoted you to moderator" : "Administrator awansował Ciebie na moderatora", + "An administrator promoted {user} to moderator" : "Administrator awansował {user} na moderatora", + "{actor} demoted {user} from moderator" : "{actor} zdegradował {user} z moderatora", + "You demoted {user} from moderator" : "Zdegradowałeś {user} z moderatora", + "{actor} demoted you from moderator" : "{actor} zdegradował Ciebie z moderatora", + "An administrator demoted you from moderator" : "Administrator zdegradował Ciebie z moderatora", + "An administrator demoted {user} from moderator" : "Administrator zdegradował {user} z moderatora", + "{actor} shared a file which is no longer available" : "{actor} udostępnił plik, który nie jest już dostępny", + "You shared a file which is no longer available" : "Udostępniłeś plik, który nie jest już dostępny", + "File shares are currently not supported in federated conversations" : "Współdzielenie plików nie jest obecnie obsługiwane w konwersacjach federacyjnych", + "The shared location is malformed" : "Udostępniona lokalizacja jest zniekształcona", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} skonfigurował Matterbridge, aby zsynchronizować tę rozmowę z innymi czatami", + "You set up Matterbridge to synchronize this conversation with other chats" : "Skonfigurowałeś Matterbridge, aby zsynchronizować tę rozmowę z innymi czatami", + "{actor} created thread {title}" : "{actor} utworzył wątek {title}", + "You created thread {title}" : "Utworzyłeś wątek {title}", + "{actor} renamed thread {title}" : "{actor} zmienił nazwę wątku {title}", + "You renamed thread {title}" : "Zmieniłeś nazwę wątku {title}", + "{actor} updated the Matterbridge configuration" : "{actor} zaktualizował konfigurację Matterbridge", + "You updated the Matterbridge configuration" : "Zaktualizowałeś konfigurację Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} usunął konfigurację Matterbridge", + "You removed the Matterbridge configuration" : "Usunąłeś konfigurację Matterbridge", + "{actor} started Matterbridge" : "{actor} uruchomił Matterbridge", + "You started Matterbridge" : "Uruchomiłeś Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zatrzymał Matterbridge", + "You stopped Matterbridge" : "Zatrzymałeś Matterbridge", + "{actor} deleted a message" : "{actor} usunął wiadomość", + "You deleted a message" : "Usunąłeś wiadomość", + "{actor} edited a message" : "{actor} edytował wiadomość", + "You edited a message" : "Edytowałeś wiadomość", + "{actor} pinned a message" : "{actor} przypiął wiadomość", + "You pinned a message" : "Przypiąłeś wiadomość", + "{actor} unpinned a message" : "{actor} odpiął wiadomość", + "Message was automatically unpinned" : "Wiadomość została automatycznie odpięta", + "You unpinned a message" : "Odpiąłeś wiadomość", + "{actor} deleted a reaction" : "{actor} usunął reakcję", + "You deleted a reaction" : "Usunąłeś reakcję", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ustawiasz termin ważności wiadomości na %n tydzień","Ustawiasz termin ważności wiadomości na %n tygodnie","Ustawiasz termin ważności wiadomości na %n tygodni","Ustawiasz termin ważności wiadomości na %n tygodni"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ustawiasz termin ważności wiadomości na %n dzień","Ustawiasz termin ważności wiadomości na %n dni","Ustawiasz termin ważności wiadomości na %n dni","Ustawiasz termin ważności wiadomości na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ustawiasz termin ważności wiadomości na %n godzinę","Ustawiasz termin ważności wiadomości na %n godziny","Ustawiasz termin ważności wiadomości na %n godzin","Ustawiasz termin ważności wiadomości na %n godzin"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ustawiasz termin ważności wiadomości na %n minutę","Ustawiasz termin ważności wiadomości na %n minuty","Ustawiasz termin ważności wiadomości na %n minut","Ustawiasz termin ważności wiadomości na %n minut"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ustawił wygaśnięcie wiadomości na %n tydzień","{actor} ustawił wygaśnięcie wiadomości na %n tygodnie","{actor} ustawił wygaśnięcie wiadomości na %n tygodni","{actor} ustawił wygaśnięcie wiadomości na %n tygodni"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ustawił wygaśnięcie wiadomości na %n dzień","{actor} ustawił wygaśnięcie wiadomości na %n dni","{actor} ustawił wygaśnięcie wiadomości na %n dni","{actor} ustawił wygaśnięcie wiadomości na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ustawił wygaśnięcie wiadomości na %n godzinę","{actor} ustawił wygaśnięcie wiadomości na %n godziny","{actor} ustawił wygaśnięcie wiadomości na %n godzin","{actor} ustawił wygaśnięcie wiadomości na %n godzin"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ustawił wygaśnięcie wiadomości na %n minutę","{actor} ustawił wygaśnięcie wiadomości na %n minuty","{actor} ustawił wygaśnięcie wiadomości na %n minut","{actor} ustawił wygaśnięcie wiadomości na %n minut"], + "{actor} disabled message expiration" : "{actor} wyłączył wygaśnięcie wiadomości", + "You disabled message expiration" : "Wyłączyłeś wygaśnięcie wiadomości", + "{actor} cleared the history of the conversation" : "{actor} wyczyścił historię rozmowy", + "You cleared the history of the conversation" : "Wyczyściłeś historię rozmowy", + "{actor} set the conversation picture" : "{actor} ustawił obraz rozmowy", + "You set the conversation picture" : "Ustawiłeś obraz rozmowy", + "{actor} removed the conversation picture" : "{actor} usunął obraz rozmowy", + "You removed the conversation picture" : "Usunąłeś obraz rozmowy", + "{actor} ended the poll {poll}" : "{actor} zakończył sondę {poll}", + "You ended the poll {poll}" : "Zakończyłeś sondę {poll}", + "{actor} started the video recording" : "{actor} rozpoczął nagrywanie wideo", + "You started the video recording" : "Rozpocząłeś nagrywanie wideo", + "{actor} stopped the video recording" : "{actor} zatrzymał nagrywanie wideo", + "You stopped the video recording" : "Zatrzymałeś nagrywanie wideo", + "{actor} started the audio recording" : "{actor} rozpoczął nagrywanie dźwięku", + "You started the audio recording" : "Rozpocząłeś nagrywanie dźwięku", + "{actor} stopped the audio recording" : "{actor} zatrzymał nagrywanie dźwięku", + "You stopped the audio recording" : "Zatrzymałeś nagrywanie dźwięku", + "The recording failed" : "Nagrywanie nie powiodło się", + "Someone voted on the poll {poll}" : "Ktoś zagłosował w sondzie {poll}", + "Message deleted by author" : "Wiadomość usunięta przez autora", + "Message deleted by {actor}" : "Wiadomość usunięta przez {actor}", + "Message deleted by you" : "Wiadomość usunięta przez Ciebie", + "Deleted user" : "Usunięty użytkownik", + "Unknown number" : "Nieznany numer", + "Administration" : "Administracja", + "System" : "System", + "%s (guest)" : "%s (gość)", + "Missed call" : "Nieodebrane połączenie", + "Unanswered call" : "Połączenie bez odpowiedzi", + "Call ended (Duration {duration})" : "Połączenie zakończone (czas trwania {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} zakończył połączenie (Czas trwania {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Połączenie z %n gościem zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})","Połączenie z %n gośćmi zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Połączenie z %n gościem zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})","Połączenie z %n gośćmi zakończone (Czas trwania {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} zakończył połączenie z gościem (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})","{actor} zakończył połączenie z gośćmi (Czas trwania {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1} ended (Duration {duration})" : "Połączenie z {user1} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} zakończył połączenie z {user1} (Czas trwania {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1} i {user2} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Połączenie z {user1} i {user2} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} zakończył połączenie z {user1} i {user2} (Czas trwania {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2} i {user3} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Połączenie z {user1}, {user2} i {user3} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2} i {user3} (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3} i {user4} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3} i {user4} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2}, {user3} i {user4} (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3}, {user4} i {user5} zostało zakończone, ponieważ osiągnięto maksymalny czas trwania połączenia (Czas trwania {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Połączenie z {user1}, {user2}, {user3}, {user4} i {user5} zakończone (Czas trwania {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} zakończył połączenie z {user1}, {user2}, {user3}, {user4} i {user5} (Czas trwania {duration})", + "Message of {user} in {conversation}" : "Wiadomość od {user} w {conversation}", + "Message of {user}" : "Wiadomość od {user}", + "Message of a deleted user in {conversation}" : "Wiadomość od usuniętego użytkownika w {conversation}", + "Talk conversations" : "Rozmowy Talk", + "Talk to %s" : "Rozmawiaj z %s", + "An error occurred. Please contact your administrator." : "Wystąpił błąd. Skontaktuj się z administratorem.", + "App disabled" : "Aplikacja wyłączona", + "Conversation subfolders are disabled" : "Podfoldery rozmów są wyłączone", + "Storage quota exceeded" : "Limit przekroczony", + "Could not prepare conversation folder" : "Nie można przygotować folderu rozmowy", + "File not found" : "Nie odnaleziono pliku", + "Path must point to a file" : "Ścieżka musi wskazywać na plik", + "File is not inside the conversation draft folder for this room" : "Plik nie znajduje się w folderze wersji roboczych rozmowy dla tego pokoju", + "File is not shared, or shared but not with the user" : "Plik nie jest udostępniony, albo nie jest dostępny dla użytkownika", + "No account available to delete." : "Brak konta do usunięcia.", + "Poll" : "Sonda", + "Password needs to be set" : "Należy ustawić hasło", + "Uploading the file failed" : "Przesyłanie pliku nie powiodło się", + "No image file provided" : "Nie wskazano pliku obrazu", + "File is too big" : "Plik jest za duży", + "Invalid file provided" : "Wskazano nieprawidłowy plik", + "Invalid image" : "Nieprawidłowy obraz", + "Unknown filetype" : "Nieznany typ pliku", + "Talk mentions" : "Wzmianki w Rozmowach", + "More conversations" : "Więcej rozmów", + "Say hi to your friends and colleagues!" : "Przywitaj się z przyjaciółmi i współpracownikami!", + "No unread mentions" : "Brak nieprzeczytanych wzmianek", + "Call in progress" : "Trwa połączenie", + "You were mentioned" : "Wspomniano o Tobie", + "Write to conversation" : "Napisz w rozmowie", + "Writes event information into a conversation of your choice" : "Zapisuje informacje o zdarzeniu w wybranej rozmowie", + "Missing email field in header line" : "Brak pola adresu e-mail w wierszu nagłówka", + "Following lines are invalid: %s" : "Następujące wiersze są nieprawidłowe: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$szaprosił Cię do rozmowy \"%2$s\".", + "You were invited to conversation \"%s\"." : "Otrzymujesz zaproszenie do rozmowy \"%s\".", + "Conversation invitation" : "Zaproszenie do rozmowy", + "Scheduled time" : "Zaplanowany czas", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Możesz także połączyć się przez telefon z następującymi detalami", + "Dial-in information" : "Informacje dotyczące połączeń telefonicznych", + "Meeting ID" : "ID spotkania", + "Your PIN" : "Twój kod PIN", + "Click the button below to join the lobby now." : "Kliknij przycisk poniżej, aby dołączyć do poczekalni.", + "Click the link below to join the lobby now." : "Kliknij link poniżej, aby dołączyć do poczekalni.", + "Join lobby for \"%s\"" : "Dołącz do poczekalni dla \"%s\"", + "Click the button below to join the conversation now." : "Kliknij przycisk poniżej, aby dołączyć do rozmowy.", + "Click the link below to join the conversation now." : "Kliknij poniższy link, aby dołączyć do rozmowy.", + "Join \"%s\"" : "Dołącz \"%s\"", + "Meeting" : "Zebranie", + "Password request: %s" : "Żądanie hasła: %s", + "Private conversation" : "Rozmowa prywatna", + "Deleted user (%s)" : "Usunięty użytkownik (%s)", + "Failed to upload call recording" : "Nie udało się przesłać nagrania rozmowy", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Serwer nagrywający nie mógł przesłać nagrania rozmowy {call}. Skontaktuj się z administracją.", + "Share to chat" : "Udostępnij na czacie", + "Dismiss notification" : "Odrzuć powiadomienie", + "Call recording now available" : "Nagrywanie rozmów jest już dostępne", + "The recording for the call in {call} was uploaded to {file}." : "Nagranie rozmowy z {call} zostało przesłane do {file}.", + "Transcript now available" : "Transkrypcja jest już dostępna", + "The transcript for the call in {call} was uploaded to {file}." : "Transkrypcja rozmowy w {call} została przesłana do {file}.", + "Failed to transcript call recording" : "Nie udało się dokonać transkrypcji nagrania rozmowy", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Serwer nie zapisał nagrania w pliku {file} dla połączenia {call}. Skontaktuj się z administracją.", + "Call summary now available" : "Podsumowanie rozmowy już dostępne", + "The summary for the call in {call} was uploaded to {file}." : "Podsumowanie rozmowy z {call} zostało przesłane do {file}.", + "Failed to summarize call recording" : "Nie udało się podsumować nagrywania rozmowy", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serwer nie mógł podsumować nagrania w {file} dla połączenia z {call}. Skontaktuj się z administracją.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} zaprosił Cię do dołączenia do {roomName} na {remoteServer}", + "Accept" : "Akceptuj", + "Decline" : "Odrzuć", + "{user1} invited you to a federated conversation" : "{user1} zaprosił Cię do rozmowy federacyjnej", + "Someone reacted" : "Ktoś zareagował", + "New message" : "Nowa wiadomość", + "Reminder" : "Przypomnienie", + "Someone mentioned you" : "Ktoś o Tobie wspomniał", + "Notification" : "Powiadomienie", + "Someone reacted in a private conversation" : "Ktoś zareagował w prywatnej rozmowie", + "You received a message in a private conversation" : "Otrzymałeś wiadomość w prywatnej rozmowie", + "Reminder in a private conversation" : "Przypomnienie w prywatnej rozmowie", + "Someone mentioned you in a private conversation" : "Ktoś wspomniał o Tobie w prywatnej rozmowie", + "Notification in a private conversation" : "Powiadomienie w prywatnej rozmowie", + "Reminder: You in {call}" : "Przypomnienie: Jesteś w {call}", + "Reminder: {user} in {call}" : "Przypomnienie: {user} w {call}", + "Reminder: Deleted user in {call}" : "Przypomnienie: Usunięto użytkownika w {call}", + "Reminder: {guest} (guest) in {call}" : "Przypomnienie: {guest} (guest) w {call}", + "Reminder: Guest in {call}" : "Przypomnienie: Gość w {call}", + "{user} reacted with {reaction}" : "{user} zareagował {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} zareagował {reaction} w rozmowie {call}", + "Deleted user reacted with {reaction} in {call}" : "Usunięty użytkownik zareagował {reaction} w rozmowie {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (gość) zareagował {reaction} w rozmowie {call}", + "Guest reacted with {reaction} in {call}" : "Gość zareagował {reaction} w trakcie {call}", + "{user} in {call}" : "{user} w {call}", + "Deleted user in {call}" : "Usunięty użytkownik w {call}", + "{guest} (guest) in {call}" : "{guest} (gość) w {call}", + "Guest in {call}" : "Gość w {call}", + "{user} sent you a private message" : "{user} wysłał Ci prywatną wiadomość", + "{user} sent a message in conversation {call}" : "{user} wysłał wiadomość podczas rozmowy {call}", + "A deleted user sent a message in conversation {call}" : "Usunięty użytkownik wysłał wiadomość w rozmowie {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gość) wysłał wiadomość w rozmowie {call}", + "A guest sent a message in conversation {call}" : "Gość wysłał wiadomość podczas rozmowy {call}", + "{user} replied to your private message" : "{user} odpowiedział na Twoją prywatną wiadomość", + "{user} replied to your message in conversation {call}" : "{user} odpowiedział na Twoją wiadomość w rozmowie {call}", + "A deleted user replied to your message in conversation {call}" : "Usunięty użytkownik odpowiedział na Twoją wiadomość w rozmowie {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gość) odpowiedział na Twoją wiadomość w rozmowie {call}", + "A guest replied to your message in conversation {call}" : "Gość odpowiedział na Twoją wiadomość w rozmowie {call}", + "Reminder: You in private conversation {call}" : "Przypomnienie: Prowadzisz rozmowę prywatną {call}", + "Reminder: A deleted user in private conversation {call}" : "Przypomnienie: Usunięty użytkownik w rozmowie prywatnej {call}", + "Reminder: {user} in private conversation" : "Przypomnienie: {user} w rozmowie prywatnej", + "Reminder: You in conversation {call}" : "Przypomnienie: Jesteś w rozmowie {call}", + "Reminder: {user} in conversation {call}" : "Przypomnienie: {user} w rozmowie {call}", + "Reminder: A deleted user in conversation {call}" : "Przypomnienie: Usunięty użytkownik w rozmowie {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Przypomnienie: {guest} (gość) w rozmowie {call}", + "Reminder: A guest in conversation {call}" : "Przypomnienie: Gość w rozmowie {call}", + "{user} reacted with {reaction} to your private message" : "{user} odpowiedział {reaction} na Twoją prywatną wiadomość", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Usunięty użytkownik odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gość) odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gość odpowiedział {reaction} na Twoją wiadomość w rozmowie {call}", + "{user} mentioned you in a private conversation" : "{user} wspomniał o Tobie w prywatnej rozmowie", + "{user} mentioned group {group} in conversation {call}" : "{user} wspomniał o grupie {group} w rozmowie {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} wspomniał o zespole {team} w rozmowie {call}", + "{user} mentioned everyone in conversation {call}" : "{user} wspomniał o wszystkich w rozmowie {call}", + "{user} mentioned you in conversation {call}" : "{user} wspomniał o Tobie w rozmowie {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Usunięty użytkownik wspomniał o grupie {group} w rozmowie {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Usunięty użytkownik wspomniał o zespole {team} w rozmowie {call}", + "A deleted user mentioned everyone in conversation {call}" : "Usunięty użytkownik wspomniał o wszystkich w rozmowie {call}", + "A deleted user mentioned you in conversation {call}" : "Usunięty użytkownik wspomniał o Tobie w rozmowie {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (gość) wspomniał o grupie {group} w rozmowie {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gość) wspomniał o zespole {team} w rozmowie {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gość) wspomniał o wszystkich w rozmowie {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gość) wspomniał o Tobie w rozmowie {call}", + "A guest mentioned group {group} in conversation {call}" : "Gość wspomniał o grupie {group} w rozmowie {call}", + "A guest mentioned team {team} in conversation {call}" : "Gość wspomniał o zespole {team} w rozmowie {call}", + "A guest mentioned everyone in conversation {call}" : "Gość wspomniał o wszystkich w rozmowie {call}", + "A guest mentioned you in conversation {call}" : "Gość wspomniał o Tobie w rozmowie {call}", + "View message" : "Wyświetl wiadomość", + "Dismiss reminder" : "Odrzuć przypomnienie", + "View chat" : "Wyświetl rozmowę", + "{user} invited you to a group conversation: {call}" : "{user} zaprosił Ciebie na rozmowę grupową: {call}", + "Join call" : "Dołącz do połączenia", + "Answer call" : "Odbierz połączenie", + "{user} would like to talk with you" : "{user} chciałby z Tobą porozmawiać", + "Call back" : "Oddzwoń", + "You missed a call from {user}" : "Przeoczyłeś połączenie od {user}", + "Accept call" : "Zaakceptuj połączenie", + "Incoming phone call from {call}" : "Nadchodząca rozmowa telefoniczna od {call}", + "You missed a phone call from {call}" : "Nieodebrane połączenie telefoniczne od {call}", + "A group call has started in {call}" : "Połączenie grupowe zostało rozpoczęte w {call}", + "You missed a group call in {call}" : "Przeoczyłeś połączenie grupowe w {call}", + "{email} is requesting the password to access {file}" : "{email} prosi o hasło dostępu do {file}", + "{email} tried to request the password to access {file}" : "{email} próbował poprosić o hasło dostępu do {file}", + "Someone is requesting the password to access {file}" : "Ktoś prosi o hasło, aby uzyskać dostęp do {file}", + "Someone tried to request the password to access {file}" : "Ktoś próbował poprosić o hasło dostępu do {file}", + "Open settings" : "Otwórz ustawienia", + "Hosted signaling server added" : "Dodano hostowany serwer sygnalizacyjny", + "The hosted signaling server is now configured and will be used." : "Hostowany serwer sygnalizacyjny jest teraz skonfigurowany i gotowy do użycia.", + "Hosted signaling server removed" : "Usunięto hostowany serwer sygnalizacyjny", + "The hosted signaling server was removed and will not be used anymore." : "Hostowany serwer sygnalizacyjny został usunięty i nie będzie już używany.", + "Hosted signaling server changed" : "Zmieniono hostowany serwer sygnalizacyjny", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Konto hostowanego serwera sygnalizacyjnego zmieniło status z \"{oldstatus}\" na \"{newstatus}\".", + "pending" : "oczekujące", + "active" : "aktywne", + "expired" : "wygasłe", + "blocked" : "zablokowane", + "error" : "błąd", + "The certificate of {host} expires in {days} days" : "Certyfikat {host} wygasa za {days} dni", + "The certificate of {host} expired" : "Certyfikat {host} wygasł", + "Contact via Talk" : "Kontakt przez Talk", + "Open Talk" : "Otwórz Talka", + "Default" : "Domyślnie", + "Send messages, create threads, and start voice and video calls." : "Wysyłaj wiadomości, twórz wątki oraz rozpoczynaj połączenia głosowe i wideo.", + "Presentation" : "Prezentacja", + "Voice room" : "Pokój głosowy", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Dołącz bezpośrednio do rozmowy, idealne do szybkich spotkań lub spontanicznych rozmów.", + "Webinar" : "Webinarium", + "Conversations" : "Rozmowy", + "Messages in current conversation" : "Wiadomości w bieżącej rozmowie", + "{user}" : "{user}", + "Messages" : "Wiadomości", + "{user} in {conversation}" : "{user} w {conversation}", + "Messages in other conversations" : "Wiadomości w innych rozmowach", + "One-to-one rooms always need to show the other users avatar" : "Pokoje rozmów indywidualnych zawsze muszą pokazywać awatary innych użytkowników", + "Invalid emoji character" : "Nieprawidłowy znak emoji", + "Invalid background color" : "Nieprawidłowy kolor tła", + "Avatar image is not square" : "Obraz awatara nie jest kwadratowy", + "Room {number}" : "Pokój {number}", + "Other" : "Inne", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nie można żądać wersji testowej, ponieważ serwer testowy jest nieosiągalny. Spróbuj ponownie później.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Wystąpił problem z uwierzytelnieniem tej instancji. Może nie jest dostępny z zewnątrz, aby zweryfikować jego adres URL.", + "Something unexpected happened." : "Wydarzyło się coś nieoczekiwanego.", + "The URL is invalid." : "Adres URL jest nieprawidłowy.", + "An HTTPS URL is required." : "Adres URL HTTPS jest wymagany.", + "The email address is invalid." : "Adres e-mail jest nieprawidłowy.", + "The language is invalid." : "Język jest nieprawidłowy.", + "The country is invalid." : "Kraj jest nieprawidłowy.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Wystąpił problem z żądaniem o wersję testową. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "Too many requests are send from your servers address. Please try again later." : "Zbyt wiele żądań jest wysyłanych z adresu Twojego serwera. Spróbuj ponownie później.", + "There is already a trial registered for this Nextcloud instance." : "Jest już zarejestrowany okres testowy dla tej instancji Nextcloud.", + "Something unexpected happened. Please try again later." : "Wydarzyło się coś nieoczekiwanego. Spróbuj ponownie później.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nie można żądać o wersję testową, ponieważ serwer testowy zadziałał nieprawidłowo. Spróbuj ponownie później.", + "Trial requested but failed to get account information. Please check back later." : "Próba testowa nie powiodła się. Nie można było uzyskać informacji o koncie. Sprawdź później.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Wystąpił problem z uwierzytelnieniem tego żądania. Może nie jest dostępny z zewnątrz, aby zweryfikować jego adres URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nie udało się pobrać informacji o koncie, ponieważ serwer testowy zadziałał nieprawidłowo. Sprawdź później.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Wystąpił problem z pobraniem informacji o koncie. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "There is no such account registered." : "Nie ma takiego zarejestrowanego konta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nie udało się pobrać informacji o koncie, ponieważ serwer testowy jest nieosiągalny. Sprawdź później.", + "Deleting the hosted signaling server account failed. Please check back later." : "Usunięcie konta hostowanego serwera sygnalizacyjnego nie powiodło się. Sprawdź później.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nie udało się usunąć konta, ponieważ serwer testowy zadziałał nieprawidłowo. Sprawdź później.", + "There is a problem with deleting the account. Please check your logs for further information." : "Wystąpił problem z usunięciem konta. Sprawdź swój dziennik, aby uzyskać dodatkowe informacje.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresu Twojego serwera jest wysyłanych zbyt wiele żądań. Spróbuj ponownie później.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nie udało się usunąć konta, ponieważ serwer testowy jest nieosiągalny. Sprawdź później.", + "Note to self" : "Notatka dla siebie", + "A place for your private notes, thoughts and ideas" : "Miejsce na Twoje prywatne notatki, przemyślenia i pomysły", + "Transcript is AI generated and may contain mistakes" : "Transkrypcja jest generowana przez sztuczną inteligencję i może zawierać błędy", + "Summary is AI generated and may contain mistakes" : "Podsumowanie jest generowane przez sztuczną inteligencję i może zawierać błędy", + "Let's get started!" : "Zaczynajmy!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** to bezpieczna, samodzielnie hostowana platforma komunikacyjna, która bezproblemowo integruje się z ekosystemem Nextcloud.\n\n#### Główne funkcje Nextcloud Talk:\n\n* Czat i wiadomości w prywatnych i grupowych czatach\n* Połączenia głosowe i wideo\n* Udostępnianie plików i integracja z innymi aplikacjami Nextcloud\n* Konfigurowalne ustawienia rozmów, moderacja i kontrola prywatności\n* Internet, komputer i urządzenie mobilne (iOS i Android)\n* Prywatna i bezpieczna komunikacja\n\nDowiedz się więcej w [dokumentacji użytkownika](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Witamy w Nextcloud Talk\n\nNextcloud Talk to prywatna i wydajna aplikacja do przesyłania wiadomości, która integruje się z Nextcloud. Rozmawiaj w prywatnych lub grupowych rozmów, współpracuj przez połączenia głosowe i wideo, organizuj webinaria i wydarzenia, dostosowuj swoje rozmowy i nie tylko.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatuj teksty, aby tworzyć bogate wiadomości\n\nW Nextcloud Talk możesz używać składni Markdown do formatowania wiadomości. Na przykład zastosuj formatowanie **bold** lub *italic* lub `highlight texts as code`. Możesz nawet tworzyć tabele i dodawać nagłówki do tekstu.\n\nMusisz poprawić literówkę lub zmienić formatowanie? Edytuj wiadomość, klikając \"Edytuj wiadomość\" w menu wiadomości.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dodaj załączniki i linki\n\nDołącz pliki z Nextcloud Hub za pomocą przycisku \"+\". Udostępniaj elementy z Plików i różnych aplikacji Nextcloud. Niektóre aplikacje obsługują nawet interaktywne widżety, na przykład aplikacja Tekst.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭Niech rozmowy płyną: wspominaj użytkowników, reaguj na wiadomości i więcej\n\nMożesz wspomnieć wszystkich uczestników rozmowy, używając %s lub oznaczyć konkretne osoby, wpisując \"@\" i wybierając ich imię z listy", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Możesz odpowiadać na wiadomości, przekazywać je do innych czatów i osób lub kopiować treść wiadomości.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Zrób więcej dzięki Smart Picker\n\nPo prostu wpisz \"/\" lub przejdź do menu \"+\", aby otworzyć Smart Picker, w którym możesz dołączać różne treści do swoich wiadomości. Możesz skonfigurować Smart Picker, aby móc dodawać elementy z aplikacji Nextcloud, pliki GIF, lokalizacje na mapie, treści generowane przez AI i wiele więcej.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Zarządzaj ustawieniami rozmów\n\nW menu rozmów możesz uzyskać dostęp do różnych ustawień, aby zarządzać swoimi rozmowami, takich jak:\n* Edycja informacji o rozmowie\n* Zarządzanie powiadomieniami\n* Stosowanie licznych reguł moderacji\n* Konfigurowanie dostępu i bezpieczeństwa\n* Włączanie botów\n* i więcej!", + "Andorra" : "Andora", + "United Arab Emirates" : "Zjednoczone Emiraty Arabskie", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua i Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktyda", + "Argentina" : "Argentyna", + "American Samoa" : "Samoa Amerykańskie", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Wyspy Alandzkie", + "Azerbaijan" : "Azerbejdżan", + "Bosnia and Herzegovina" : "Bośnia i Hercegowina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesz", + "Belgium" : "Belgia", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bułgaria", + "Bahrain" : "Bahrajn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Boliwia, Wielonarodowe Państwo", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius i Saba (Holandia Karaibska)", + "Brazil" : "Brazylia", + "Bahamas" : "Bahamy", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Wyspa Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Białoruś", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Wyspy Kokosowe (Keelinga)", + "Congo, the Democratic Republic of the" : "Kongo, Demokratyczna Republika", + "Central African Republic" : "Republika Środkowoafrykańska", + "Congo" : "Kongo", + "Switzerland" : "Szwajcaria", + "Côte d'Ivoire" : "Wybrzeże Kości Słoniowej", + "Cook Islands" : "Wyspy Cooka", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Chiny", + "Colombia" : "Kolumbia", + "Costa Rica" : "Kostaryka", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Wyspa Bożego Narodzenia", + "Cyprus" : "Cypr", + "Czechia" : "Czechy", + "Germany" : "Niemcy", + "Djibouti" : "Dżibuti", + "Denmark" : "Dania", + "Dominica" : "Dominika", + "Dominican Republic" : "Republika Dominikany", + "Algeria" : "Algieria", + "Ecuador" : "Ekwador", + "Estonia" : "Estonia", + "Egypt" : "Egipt", + "Western Sahara" : "Sahara Zachodnia", + "Eritrea" : "Erytrea", + "Spain" : "Hiszpania", + "Ethiopia" : "Etiopia", + "Finland" : "Finlandia", + "Fiji" : "Fidżi ", + "Falkland Islands (Malvinas)" : "Falklandy (Malwiny)", + "Micronesia, Federated States of" : "Mikronezja, Federalne Stany", + "Faroe Islands" : "Wyspy Owcze", + "France" : "Francja", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Zjednoczone Królestwo Wielkiej Brytanii i Irlandii Północnej", + "Grenada" : "Grenada", + "Georgia" : "Gruzja", + "French Guiana" : "Gujana Francuska", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandia", + "Gambia" : "Gambia", + "Guinea" : "Gwinea", + "Guadeloupe" : "Gwadelupa", + "Equatorial Guinea" : "Gwinea Równikowa", + "Greece" : "Grecja", + "South Georgia and the South Sandwich Islands" : "Georgia Południowa i Sandwich Południowy", + "Guatemala" : "Gwatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gwinea Bissau", + "Guyana" : "Gujana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Wyspy Heard i McDonalda", + "Honduras" : "Honduras", + "Croatia" : "Chorwacja", + "Haiti" : "Haiti", + "Hungary" : "Węgry", + "Indonesia" : "Indonezja", + "Ireland" : "Irlandia", + "Israel" : "Izrael", + "Isle of Man" : "Wyspa Man", + "India" : "Indie", + "British Indian Ocean Territory" : "Brytyjskie Terytorium Oceanu Indyjskiego", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska Republika", + "Iceland" : "Islandia", + "Italy" : "Włochy", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordania", + "Japan" : "Japonia", + "Kenya" : "Kenia", + "Kyrgyzstan" : "Kirgistan", + "Cambodia" : "Kambodża", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Saint Kitts i Nevis", + "Korea, Democratic People's Republic of" : "Korea, Demokratyczna Republika Ludowa", + "Korea, Republic of" : "Korea, Republika", + "Kuwait" : "Kuwejt", + "Cayman Islands" : "Kajmany", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laotańska Republika Ludowo-Demokratyczna", + "Lebanon" : "Liban", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litwa", + "Luxembourg" : "Luksemburg", + "Latvia" : "Łotwa", + "Libya" : "Libia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Mołdawia, Republika", + "Montenegro" : "Czarnogóra", + "Saint Martin (French part)" : "Saint Martin (część francuska)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Wyspy Marshalla", + "North Macedonia" : "Macedonia Północna", + "Mali" : "Mali", + "Myanmar" : "Mjanma", + "Mongolia" : "Mongolia", + "Macao" : "Makau", + "Northern Mariana Islands" : "Mariany Północne", + "Martinique" : "Martynika", + "Mauritania" : "Mauretania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Malediwy", + "Malawi" : "Malawi", + "Mexico" : "Meksyk", + "Malaysia" : "Malezja", + "Mozambique" : "Mozambik", + "Namibia" : "Namibia", + "New Caledonia" : "Nowa Kaledonia", + "Niger" : "Niger", + "Norfolk Island" : "Wyspa Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Holandia", + "Norway" : "Norwegia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nowa Zelandia", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polinezja Francuska", + "Papua New Guinea" : "Papua Nowa Gwinea", + "Philippines" : "Filipiny", + "Pakistan" : "Pakistan", + "Poland" : "Polska", + "Saint Pierre and Miquelon" : "Saint Pierre i Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoryko", + "Palestine, State of" : "Palestyna, Stan", + "Portugal" : "Portugalia", + "Palau" : "Palau", + "Paraguay" : "Paragwaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Rumunia", + "Serbia" : "Serbia", + "Russian Federation" : "Rosja", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Arabia Saudyjska", + "Solomon Islands" : "Wyspy Solomona", + "Seychelles" : "Seszele", + "Sudan" : "Sudan", + "Sweden" : "Szwecja", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Wyspa Świętej Heleny, Wyspa Wniebowstąpienia i Tristan da Cunha", + "Slovenia" : "Słowenia", + "Svalbard and Jan Mayen" : "Svalbard i Jan Mayen", + "Slovakia" : "Słowacja", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "Sudan Południowy", + "Sao Tome and Principe" : "Wyspy Świętego Tomasza i Książęca", + "El Salvador" : "Salwador", + "Sint Maarten (Dutch part)" : "Sint Maarten (część holenderska)", + "Syrian Arab Republic" : "Syria", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Wyspy Turks i Caicos", + "Chad" : "Czad", + "French Southern Territories" : "Francuskie Terytoria Południowe", + "Togo" : "Togo", + "Thailand" : "Tajlandia", + "Tajikistan" : "Tadżykistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor Wschodni", + "Turkmenistan" : "Turkmenia", + "Tunisia" : "Tunezja", + "Tonga" : "Tonga", + "Turkey" : "Turcja", + "Trinidad and Tobago" : "Trynidad i Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajwan", + "Tanzania, United Republic of" : "Tanzania, Zjednoczona Republika", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Dalekie Wyspy Mniejsze Stanów Zjednoczonych", + "United States of America" : "Stany Zjednoczone", + "Uruguay" : "Urugwaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Stolica Apostolska", + "Saint Vincent and the Grenadines" : "Saint Vincent i Grenadyny", + "Venezuela, Bolivarian Republic of" : "Wenezuela, Boliwariańska Republika", + "Virgin Islands, British" : "Wyspy Dziewicze, Brytyjskie", + "Virgin Islands, U.S." : "Wyspy Dziewicze, Stany Zjednoczone", + "Viet Nam" : "Wietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis i Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Majotta", + "South Africa" : "Republika Południowej Afryki", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmycie tła", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nie można sprawdzić obsługi ładowania WASM. Sprawdź ręcznie, czy Twój serwer internetowy obsługuje pliki `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Twój serwer internetowy nie jest prawidłowo skonfigurowany do dostarczania plików `.wasm`. Jest to zazwyczaj problem z konfiguracją Nginx. W przypadku rozmycia tła wymaga dostosowania, aby dostarczać także pliki `.wasm`. Porównaj swoją konfigurację Nginx z konfiguracją zalecaną w naszej dokumentacji.", + "Talk configuration values" : "Wartości konfiguracji Talka", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Wymuszanie czasu trwania połączenia jest obsługiwane tylko przez system cron. Włącz system cron lub usuń konfigurację `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Małe wartości `max_call_duration` (obecnie ustawione na %d) nie są egzekwowalne ze względu na ograniczenia techniczne. Zadanie w tle jest wykonywane tylko co 5 minut, więc używaj na własne ryzyko.", + "Federation" : "Federacja", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Zdecydowanie zaleca się skonfigurowanie \"memcache.locking\", gdy włączony jest Talk Federacyjny.", + "High-performance backend" : "Zaplecze o wysokiej wydajności", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Brak skonfigurowanego zaplecza o wysokiej wydajności - Uruchomienie Nextcloud Talk bez zaplecza o wysokiej wydajności jest skalowalne tylko dla bardzo małych połączeń (maks. 2–3 uczestników). Skonfiguruj zaplecze o wysokiej wydajności, aby zapewnić bezproblemową pracę połączeń z wieloma uczestnikami.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Uruchamianie trybu \"conversation_cluster\" zaplecza o wysokiej wydajności jest przestarzałe i nie będzie już obsługiwane w nadchodzącej wersji. Zaplecze o wysokiej wydajności obsługuje obecnie prawdziwe klastrowanie, które powinno być używane zamiast tego.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definiowanie wielu zapleczy o wysokiej wydajności jest przestarzałe i nie będzie już obsługiwane w nadchodzącej wersji. Zamiast tego należy skonfigurować moduł równoważenia obciążenia razem z klastrowanymi serwerami sygnalizacyjnymi i skonfigurować go w ustawieniach Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Zapisany klucz publiczny dla używanego algorytmu %1$s nie pasuje do zapisanego klucza prywatnego. Uruchom %2$s, aby naprawić problem.", + "High-performance backend not configured correctly. Run %s for details." : "Backend o wysokiej wydajności nie został poprawnie skonfigurowany. Uruchom %s, aby uzyskać szczegóły.", + "High-performance backend not configured correctly" : "Zaplecze o wysokiej wydajności nie zostało poprawnie skonfigurowane", + "Error: Cannot connect to server" : "Błąd: Nie można połączyć się z serwerem", + "Error: Server did not respond with proper JSON" : "Błąd: Serwer nie odpowiedział poprawnie JSON", + "Error: Certificate expired" : "Błąd: Certyfikat wygasł", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Błąd: Czasy systemowe serwera Nextcloud i serwera zaplecza o wysokiej wydajności są niezsynchronizowane. Upewnij się, że oba serwery są połączone z serwerem czasu lub ręcznie zsynchronizuj ich czas.", + "Could not get version" : "Nie udało się pobrać wersji", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Błąd: Wersja uruchomiona: {version}; Serwer wymaga aktualizacji, aby był kompatybilny z tą wersją Talk", + "Error: Server responded with: {error}" : "Błąd: Serwer odpowiedział: {error}", + "Error: Unknown error occurred" : "Błąd: Wystąpił nieznany błąd", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Ostrzeżenie: Działająca wersja: {version}; Serwer nie obsługuje wszystkich funkcji tej wersji Talka, brakuje funkcji: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Zdecydowanie zaleca się skonfigurowanie pamięci podręcznej w przypadku uruchamiania Nextcloud Talk z zapleczem o wysokiej wydajności.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push jest zainstalowany, to poprawia terminowość powiadomień Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nie jest zainstalowany. Może to powodować opóźnienia powiadomień Talk.", + "Recording backend" : "Zaplecze nagrywania", + "Using the recording backend requires a High-performance backend." : "Korzystanie z zaplecza nagrywania wymaga zaplecza o wysokiej wydajności.", + "No recording backend configured" : "Brak skonfigurowanego zaplecza nagrywania", + "SIP configuration" : "Konfiguracja SIP", + "Using the SIP functionality requires a High-performance backend." : "Korzystanie z funkcji SIP wymaga zaplecza o wysokiej wydajności.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Przypisane numery telefonów Talk nie mogą zaczynać się od + ani 0. Usuń lub zaktualizuj następujące numery:\n{list}", + "No SIP backend configured" : "Brak skonfigurowanego zaplecza SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Nieprawidłowa data, format daty musi być RRRR-MM-DD", + "Conversation not found" : "Nie znaleziono rozmowy", + "Path is already shared with this conversation" : "Ścieżka jest już udostępniona w tej rozmowie", + "Chat, video & audio-conferencing using WebRTC" : "Czat, wideo i konferencje audio za pomocą WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Czat, wideokonferencje i audiokonferencje z użyciem WebRTC\n\n* 💬 **Czat** Nextcloud Talk oferuje prosty czat tekstowy, umożliwiający udostępnianie lub przesyłanie plików z aplikacji Pliki Nextcloud lub lokalnego urządzenia oraz wspominanie innych uczestników.\n\n* 👥 **Prywatne, grupowe, publiczne i chronione hasłem połączenia!** Zaproś kogoś, całą grupę lub wyślij publiczny link, aby zaprosić do połączenia.\n\n* 🌐 **Federacyjne czaty** Czatuj z innymi użytkownikami Nextcloud na ich serwerach\n* 💻 **Udostępnianie ekranu!** Udostępnij swój ekran uczestnikom połączenia.\n\n* 🚀 **Integracja z innymi aplikacjami Nextcloud**, takimi jak Pliki, Kalendarz, Status użytkownika, Pulpit nawigacyjny, Przepływ, Mapy, Inteligentny selektor, Kontakty, Tablica i wiele innych.\n* 🌉 **Synchronizacja z innymi rozwiązaniami do czatów** Dzięki integracji [Matterbridge](https://github.com/42wim/matterbridge/) z Talk możesz łatwo zsynchronizować wiele innych rozwiązań do czatów z Talk Nextcloud i odwrotnie.", + "Leave call" : "Rozłącz się", + "Navigating away from the page will leave the call in {conversation}" : "Zamknięcie strony spowoduje opuszczenie połączenia w {conversation}", + "Stay in call" : "Pozostań w połączeniu", + "Error occurred when getting the conversation information" : "Wystąpił błąd podczas pobierania informacji o konwersacji.", + "Discuss this file" : "Omów ten plik", + "Share this file with others to discuss it" : "Udostępnij ten plik innym osobom, aby go omówić", + "Share this file" : "Udostępnij ten plik", + "Join conversation" : "Dołącz do rozmowy", + "This conversation is password-protected." : "Ta rozmowa jest chroniona hasłem.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Wykryliśmy wiele nieprawidłowych prób podania hasła z Twojego adresu IP. Dlatego Twoja następna próba będzie blokowana do 30 sekund.", + "The password is wrong. Try again." : "Błędne hasło. Spróbuj ponownie.", + "Password" : "Hasło", + "Submit" : "Wyślij", + "Error requesting the password." : "Błąd podczas żądania hasła.", + "Request password" : "Żądanie hasła", + "This conversation has ended" : "Rozmowa została zakończona", + "Error occurred when joining the conversation" : "Wystąpił błąd podczas dołączania do rozmowy", + "Close Talk sidebar" : "Zamknij pasek boczny Talka", + "Open Talk sidebar" : "Otwórz pasek boczny Talka", + "Everyone" : "Wszyscy", + "Users and moderators" : "Użytkownicy i moderatorzy", + "Moderators only" : "Tylko moderatorzy", + "Disable calls" : "Wyłącz połączenia", + "Save changes" : "Zapisz zmiany", + "Saving …" : "Zapisywanie…", + "Saved!" : "Zapisano!", + "Limit to groups" : "Ogranicz dla grup", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Gdy wybrana jest co najmniej jedna grupa, to tylko osoby z wymienionej grupy mogą brać udział w rozmowie.", + "Guests can still join public conversations." : "Goście nadal mogą brać udział w publicznych rozmowach.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Użytkownicy, którzy nie korzystają już z Talka, będą nadal wyświetlani jako uczestnicy poprzednich rozmów wraz z ich wiadomościami, które będą przechowywane w danej rozmowie.", + "Limit using Talk" : "Ogranicz używanie Talka", + "Limit creating a public and group conversation" : "Ogranicz tworzenie rozmowy publicznej i grupowej", + "Limit creating conversations" : "Ogranicz tworzenie rozmów", + "Limit starting a call" : "Ogranicz rozpoczynanie połączenia", + "Limit starting calls" : "Ogranicz rozpoczynanie połączeń", + "When a call has started, everyone with access to the conversation can join the call." : "Wszyscy mający dostęp do rozmowy mogą również dołączyć do połączenia po jego rozpoczęciu.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tym serwerze zainstalowane są następujące boty. W dokumentacji znajdziesz szczegółowe informacje na temat {linkstart1}budowania własnego bota{linkend} lub {linkstart2}listę botów{linkend}, które możesz włączyć na swoim serwerze.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na tym serwerze nie są zainstalowane żadne boty. W dokumentacji znajdziesz szczegółowe informacje na temat {linkstart1}budowania własnego bota{linkend} lub {linkstart2}listę botów{linkend}, które możesz włączyć na swoim serwerze.", + "Description is not provided" : "Opis nie jest podany", + "Locked for moderators" : "Zablokowane dla moderatorów", + "Enabled" : "Włączone", + "Disabled" : "Wyłączone", + "Bots settings" : "Ustawienia botów", + "State" : "Stan", + "Name" : "Nazwa", + "Last error" : "Ostatni błąd", + "Total errors count" : "Całkowita liczba błędów", + "Find more bots" : "Znajdź więcej botów", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Zaufane serwery można skonfigurować na stronie {linkstart}Ustawienia udostępniania{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federacyjne czaty i połączenia działają już. Obsługa załączników pojawi się w przyszłej wersji.", + "Enable Federation in Talk app" : "Włącz Federację w programie Talk", + "Permissions" : "Uprawnienia", + "Allow users to be invited to federated conversations" : "Zezwalaj użytkownikom na zapraszanie ich do rozmów federacyjnych", + "Allow users to invite federated users into conversation" : "Zezwalaj użytkownikom na zapraszanie użytkowników federacyjnych do rozmów", + "Only allow to federate with trusted servers" : "Zezwalaj na federację tylko z zaufanymi serwerami", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Gdy zostanie wybrana co najmniej jedna grupa, jedynie osoby z wymienionych grup będą mogły zapraszać użytkowników federacyjnych do rozmów.", + "Groups allowed to invite federated users" : "Grupy, którym wolno zapraszać użytkowników federacyjnych", + "Select groups …" : "Wybierz grupy…", + "All messages" : "Wszystkie wiadomości", + "@-mentions only" : "Tylko, gdy @-wspomniano", + "Off" : "Wyłączone", + "General settings" : "Ustawienia główne", + "Default notification settings" : "Domyślne ustawienia powiadomienia", + "Default group notification" : "Domyślne powiadomienie grupy", + "Default group notification for new groups" : "Domyślne powiadomienie grupy dla nowych grup", + "Integration into other apps" : "Integracja z innymi aplikacjami", + "Allow conversations on files" : "Zezwalaj na rozmowy przy plikach", + "Allow conversations on public shares for files" : "Zezwalaj na rozmowy przy plikach udostępnionych publicznie", + "End-to-end encrypted calls" : "Szyfrowane połączenia End-to-End", + "Enable encryption" : "Włącz szyfrowanie", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Połączenia szyfrowane typu End-to-End ze skonfigurowanym mostem SIP wymagają nowszej wersji bardziej wydajnego zaplecza i mostu SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Klienci mobilni nie obsługują obecnie połączeń szyfrowanych metodą End-to-End.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Klikając powyższy przycisk, informacje zawarte w formularzu zostaną wysłane na serwery Struktur AG. Więcej informacji można znaleźć na stronie {linkstart}spreed.eu{linkend}.", + "Pending" : "Oczekuje", + "Error" : "Błąd", + "Blocked" : "Zablokowani", + "Active" : "Aktywne", + "Expired" : "Wygasł", + "Never" : "Nigdy", + "The trial could not be requested. Please try again later." : "Nie można zażądać testu. Spróbuj ponownie później.", + "The account could not be deleted. Please try again later." : "Nie można usunąć konta. Spróbuj ponownie później.", + "Hosted High-performance backend" : "Hostowane zaplecze o wysokiej wydajności", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nasz partner Struktur AG zapewnia usługę, na której można zamówić hostowany serwer sygnalizacyjny. W tym celu wystarczy jedynie wypełnić poniższy formularz, a Twoja usługa Nextcloud zrobi to za Ciebie. Po skonfigurowaniu serwera dane uwierzytelniające zostaną wypełnione automatycznie. Spowoduje to zastąpienie istniejących ustawień serwera sygnalizacyjnego.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Jeśli Twoje konto wydajnego backendu zawiera funkcje STUN i/lub TURN, ustawienia zostaną odpowiednio zaktualizowane.", + "URL of this Nextcloud instance" : "Adres URL tej instancji Nextcloud", + "Full name of the user requesting the trial" : "Pełna nazwa użytkownika proszącego o test", + "Email of the user" : "E-mail użytkownika", + "Language" : "Język", + "Country" : "Kraj", + "Request signaling server trial" : "Poproś o próbny serwer sygnalizacyjny", + "You can see the current status of your hosted signaling server in the following table." : "Aktualny stan hostowanego serwera sygnalizacyjnego można zobaczyć w poniższej tabeli.", + "Status" : "Status", + "Created at" : "Utworzono", + "Expires at" : "Wygasa o", + "Limits" : "Limity", + "STUN included" : "STUN włączony", + "Yes" : "Tak", + "No" : "Nie", + "TURN included" : "TURN włączony", + "Delete the signaling server account" : "Usuń konto serwera sygnalizacyjnego", + "_%n user_::_%n users_" : ["%n użytkownik","%n użytkowników","%n użytkowników","%n użytkowników"], + "Installed version: {version}" : "Zainstalowana wersja: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Możesz zainstalować Matterbridge, aby połączyć Nextcloud Talk z innymi usługami. Odwiedź {linkstart1}stronę GitHub{linkend}, aby uzyskać więcej informacji. Pobieranie i instalowanie aplikacji może chwilę potrwać. W przypadku przekroczenia limitu czasu, zainstaluj ją ręcznie z {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Plik binarny Matterbridge ma nieprawidłowe uprawnienia. Upewnij się, że plik binarny Matterbridge jest własnością właściwego użytkownika i ma ustawione prawo do wykonania. Znajdziesz go w „/…/nextcloud/apps/talk_matterbridge/bin/”", + "Matterbridge binary was not found or couldn't be executed." : "Nie znaleziono pliku binarnego Matterbridge lub nie można go uruchomić.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Możesz również ustawić ścieżkę do pliku binarnego Matterbridge ręcznie za pomocą pliku config. Więcej informacji znajdziesz w {linkstart}dokumentacji integracji Matterbridge{linkend}.", + "Downloading …" : "Pobieranie…", + "Install Talk Matterbridge" : "Zainstaluj Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Wystąpił błąd podczas instalacji aplikacji Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Wystąpił błąd podczas instalacji Talk Matterbridge. Zainstaluj ręcznie.", + "Failed to execute Matterbridge binary." : "Nie udało się uruchomić pliku binarnego Matterbridge.", + "Matterbridge integration" : "Integracja z Matterbridge", + "Enable Matterbridge integration" : "Włącz integrację Matterbridge", + "Status: Checking connection" : "Status: Sprawdzanie połączenia", + "OK: Running version: {version}" : "W porządku: Uruchomiona wersja: {version}", + "Error: Server seems to be a Signaling server" : "Błąd: Serwer wydaje się być serwerem sygnalizacyjnym", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Błąd: Czasy systemowe serwera Nextcloud i serwera zaplecza \"Nagrywanie\" są niezsynchronizowane. Upewnij się, że oba serwery są połączone z serwerem czasu lub ręcznie zsynchronizuj ich czas.", + "Recording backend URL" : "Rejestrowanie adresu URL zaplecza", + "Validate SSL certificate" : "Potwierdź certyfikat SSL", + "Delete this server" : "Usuń ten serwer", + "Test this server" : "Przetestuj ten serwer", + "Disabled for all calls" : "Wyłączone dla wszystkich połączeń", + "Enabled for all calls" : "Włączone dla wszystkich połączeń", + "Configurable on conversation level by moderators" : "Konfigurowalne na poziomie konwersacji przez moderatorów", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Ustawienia PHP \"upload_max_filesize\" lub \"post_max_size\" pozwalają na wysyłanie plików tylko do rozmiaru {maxUpload}.", + "Recording backend settings saved" : "Zapisano ustawienia zaplecza nagrywania", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorzy będą mogli włączyć zgodę na poziomie rozmowy. Zgoda na nagrywanie będzie wymagana od każdego uczestnika przed dołączeniem do każdego połączenia w tej rozmowie.", + "The consent to be recorded will be required for each participant before joining every call." : "Przed przystąpieniem do każdej rozmowy wymagana będzie zgoda na nagrywanie każdego uczestnika.", + "The consent to be recorded is not required." : "Zgoda na nagrywanie nie jest wymagana.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfiguracja zaplecza \"Nagrywanie\" jest możliwe tylko przy użyciu zaplecza o wysokiej wydajności.", + "Add a new recording backend server" : "Dodaj nowy serwer zaplecza nagrywania", + "Shared secret" : "Klucz współdzielony", + "Recording consent" : "Zgoda na nagrywanie", + "Recording transcription" : "Transkrypcja nagrań", + "Automatically transcribe call recordings with a transcription provider" : "Automatyczne transkrybowanie nagrań rozmów za pomocą dostawcy usług transkrypcji", + "Automatically summarize call recordings with transcription and summary providers" : "Automatyczne podsumowywanie nagrań rozmów za pomocą dostawców transkrypcji i podsumowań", + "SIP configuration saved!" : "Konfiguracja SIP zapisana!", + "SIP configuration is only possible with a High-performance backend." : "Konfiguracja SIP jest możliwa wyłącznie przy użyciu wydajnego zaplecza.", + "Enable SIP Dial-out option" : "Włącz opcję wybierania numeru SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Serwer sygnalizacyjny musi zostać zaktualizowany do obsługiwanej funkcji wybierania numeru SIP.", + "Do not show SIP Dial-out caller number" : "Nie pokazuj numeru dzwoniącego SIP Dial-out", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonimowy numer powinien być wyświetlany jako „nieznany” lub „ukryty numer” dla odbiorcy połączenia ukryty numer", + "Dial-out number" : "Numer Dial-out", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Numer w formacie E164 używany jako zapasowy numer dzwoniącego dla połączeń wychodzących", + "Dial-out prefix" : "Prefiks Dial-out", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefiks do skonfigurowanego numeru użytkownika dla połączeń wychodzących (domyślnie „+”)", + "Restrict SIP configuration" : "Ogranicz konfigurację SIP", + "Enable SIP configuration" : "Włącz konfigurację SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Tylko użytkownicy z następujących grup mogą włączać SIP w rozmowach, które moderują", + "Phone number (Country)" : "Numer telefonu (kraj)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Informacje te są wysyłane w wiadomościach e-maili z zaproszeniami, a także wyświetlane na pasku bocznym wszystkim uczestnikom.", + "Nextcloud base URL" : "Podstawowy adres URL Nextcloud", + "Talk Backend URL" : "Adres URL zaplecza Talk", + "WebSocket URL" : "Adres URL WebSocket", + "Available features" : "Dostępne funkcje", + "Error: Websocket connection failed" : "Błąd: Połączenie WebSocket nie powiodło się", + "Error code" : "Kod błędu", + "Error message" : "Komunikat o błędzie", + "Error: Websocket connection failed. Check browser console" : "Błąd: Połączenie Websocket nie powiodło się. Sprawdź konsolę przeglądarki", + "High-performance backend URL" : "Adres URL zaplecza o wysokiej wydajności", + "Missing High-performance backend warning hidden" : "Ukryte ostrzeżenie zaplecza o wysokiej wydajności", + "High-performance backend settings saved" : "Zapisano ustawienia zaplecza o wysokiej wydajności", + "Nextcloud Talk setup not complete" : "Konfiguracja Nextcloud Talk nie została ukończona", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Należy pamiętać, że w przypadku połączeń z więcej niż 2-oma uczestnikami bez zaawansowanego zaplecza, uczestnicy najprawdopodobniej napotkają problemy z łącznością, co spowoduje duże obciążenie urządzeń.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Zainstaluj wydajne zaplecze, aby mieć pewność, że połączenia z wieloma uczestnikami będą przebiegać bezproblemowo.", + "Nextcloud portal" : "Portal Nextcloud", + "Quick installation guide" : "Krótki przewodnik instalacji", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Wydajne zaplecze jest wymagane do połączeń i rozmów z wieloma uczestnikami. Bez zaplecza wszyscy uczestnicy muszą wysyłać własne wideo indywidualnie do każdego uczestnika, co najprawdopodobniej spowoduje problemy z łącznością i duże obciążenie urządzeń uczestniczących.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Zdecydowanie zaleca się skonfigurowanie rozproszonej pamięci podręcznej w przypadku korzystania z Nextcloud Talk z zapleczem o wysokiej wydajności.", + "Add High-performance backend server" : "Dodaj wydajny serwer zaplecza", + "Warn about connectivity issues in calls with more than 2 participants" : "Ostrzegaj o problemach z łącznością podczas rozmów z udziałem więcej niż z 2-oma uczestnikami", + "STUN server URL" : "Adres URL serwera STUN", + "The server address is invalid" : "Adres serwera jest nieprawidłowy", + "STUN settings saved" : "Zapisano ustawienia STUN", + "STUN servers" : "Serwery STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Serwer STUN służy do określenia publicznego adresu IP uczestników znajdujących się za routerem.", + "Add a new STUN server" : "Dodaj nowy serwer STUN", + "{schema} scheme must be used with a domain" : "Schemat {schema} musi być używany z domeną", + "{option1} and {option2}" : "{option1} i {option2}", + "{option} only" : "tylko {option}", + "OK: Successful ICE candidates returned by the TURN server" : "W porządku: Pomyślnie zwróceni kandydaci ICE przez serwer TURN", + "Error: No working ICE candidates returned by the TURN server" : "Błąd: Nie działa zwrot kandydatów ICE przez serwer TURN", + "Testing whether the TURN server returns ICE candidates" : "Testowanie, czy serwer TURN zwraca kandydatów ICE", + "TURN server schemes" : "Schematy serwerów TURN", + "TURN server URL" : "Adres URL serwera TURN", + "TURN server secret" : "Poufny serwer TURN", + "TURN server protocols" : "Protokoły serwera TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Serwer TURN używany jest do połączeń przez proxy dla uczestników za zaporą. Jeśli poszczególni uczestnicy nie mogą połączyć się z innymi, najprawdopodobniej wymagany jest serwer TURN. Instrukcje instalacji znajdują się w {linkstart}dokumentacji{linkend}.", + "TURN settings saved" : "Zapisano ustawienia TURN", + "TURN servers" : "Serwery TURN", + "Add a new TURN server" : "Dodaj nowy serwer TURN", + "Failed" : "Nie powiodło się", + "OK" : "OK", + "Checking …" : "Sprawdzanie ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Niepowodzenie: WebAssembly jest wyłączony lub nie jest obsługiwany w tej przeglądarce. Włącz WebAssembly lub użyj przeglądarki z obsługą, aby sprawdzić.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Niepowodzenie: Pliki \".wasm\" i \".tflite\" nie zostały poprawnie zwrócone przez serwer sieciowy. Sprawdź sekcję \"Wymagania systemowe\" w dokumentacji Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Pliki \".wasm\" i \".tflite\" zostały poprawnie zwrócone przez serwer WWW.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Wygląda na to, że konfiguracja PHP i Apache nie jest kompatybilna. Należy pamiętać, że PHP może być używane tylko z modułem MPM_PREFORK, a PHP-FPM może być używane tylko z modułem MPM_EVENT.", + "Web server setup checks" : "Sprawdzanie konfiguracji serwera WWW", + "Files required for virtual background can be loaded" : "Można załadować pliki potrzebne do wirtualnego tła", + "Federated user" : "Użytkownik sfederowany", + "Assign participants to rooms" : "Przypisz uczestników do pokoi", + "Configure breakout rooms" : "Skonfiguruj pokoje podgrup", + "Number of breakout rooms" : "Liczba pokoi podgrup", + "You can create from 1 to 20 breakout rooms." : "Możesz utworzyć od 1 do 20 pokoi podgrup.", + "Assignment method" : "Metoda przydzielenia", + "Automatically assign participants" : "Automatycznie przypisz uczestników", + "Manually assign participants" : "Ręcznie przypisz uczestników", + "Allow participants to choose" : "Zezwalaj uczestnikom wybrać", + "Create rooms" : "Utwórz pokoje", + "Confirm" : "Potwierdź", + "Create breakout rooms" : "Twórz pokoje podgrup", + "Reset" : "Resetuj", + "Delete breakout rooms" : "Usuń pokoje podgrup", + "Room {roomNumber}" : "Pokój {roomNumber}", + "Current breakout rooms and settings will be lost" : "Bieżące pokoje podgrup i ustawienia zostaną utracone", + "Cancel" : "Anuluj", + "Unassigned participants" : "Nieprzypisani uczestnicy", + "Back" : "Wstecz", + "Assign" : "Przydziel", + "Add participant \"{user}\"" : "Dodaj uczestnika \"{user}\"", + "Now" : "Teraz", + "Invalid calendar selected" : "Wybrano nieprawidłowy kalendarz", + "Invalid start time selected" : "Wybrano nieprawidłową godzinę rozpoczęcia", + "Invalid end time selected" : "Wybrano nieprawidłowy czas zakończenia", + "Unknown error occurred" : "Wystąpił nieznany błąd", + "Sending no invitations" : "Brak wysyłań zaproszeń", + "{participant0} will receive an invitation" : "{participant0} otrzyma zaproszenie", + "{participant0} and {participant1} will receive invitations" : "{participant0} i {participant1} otrzymają zaproszenia", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} i %n inna osoba otrzymają zaproszenia","{participant0}, {participant1} i %n inne osoby otrzymają zaproszenia","{participant0}, {participant1} i %n innych osób otrzymają zaproszenia","{participant0}, {participant1} i %n innych osób otrzymają zaproszenia"], + "Invite {user}" : "Zaproś {user}", + "Invite all users and emails in this conversation" : "Zaproś wszystkich użytkowników i adresy e-mail w tej rozmowie", + "Meeting created" : "Spotkanie utworzone", + "Upcoming meetings" : "Nadchodzące spotkania", + "Loading …" : "Wczytywanie…", + "No upcoming meetings" : "Brak zaplanowanych spotkań", + "Schedule a meeting" : "Zaplanuj spotkanie", + "Meeting title" : "Tytuł spotkania", + "From" : "Z", + "To" : "Na", + "Calendar" : "Kalendarz", + "Attendees" : "Uczestnicy", + "No other participants to send invitations to." : "Brak innych uczestników do zaproszenia.", + "Add attendees" : "Dodaj uczestników", + "Save" : "Zapisz", + "Search participants" : "Wyszukaj uczestników", + "No results" : "Brak wyników", + "Done" : "Gotowe", + "Disable live transcription" : "Wyłącz transkrypcję na żywo", + "Enable live transcription (generated by AI)" : "Włącz transkrypcję na żywo (generowaną przez AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Włącz transkrypcję na żywo (aplikacja Live transcriptions nie jest zainstalowana)", + "Disable live translation" : "Wyłącz tłumaczenie na żywo", + "Enable live translation (generated by AI)" : "Włącz tłumaczenie na żywo (generowane przez AI)", + "Original language" : "Język oryginalny", + "Live translations app is not installed" : "Aplikacja Live translations nie jest zainstalowana", + "Original language: {languageName}" : "Język oryginalny: {languageName}", + "Translated language" : "Język tłumaczenia", + "Translated language: {languageName}" : "Język tłumaczenia: {languageName}", + "Raise hand" : "Podnieść rękę", + "Raise hand (R)" : "Podnieś rękę (R)", + "Lower hand" : "Opuścić rękę", + "Lower hand (R)" : "Opuść rękę (R)", + "Exit full screen (F)" : "Wyjdź z trybu pełnoekranowego (F)", + "Full screen (F)" : "Tryb pełnoekranowy (F)", + "Speaker view" : "Widok mówcy", + "Grid view" : "Widok siatki", + "Error when trying to load the available live transcription languages" : "Błąd podczas próby załadowania dostępnych języków transkrypcji na żywo", + "Failed to enable live transcription" : "Nie udało się włączyć transkrypcji na żywo", + "Failed to enable live translations" : "Nie udało się włączyć tłumaczeń na żywo", + "Failed to disable live translations" : "Nie udało się wyłączyć tłumaczeń na żywo", + "Recording consent is required" : "Wymagana jest zgoda na nagrywanie", + "This conversation is read-only" : "Ta rozmowa jest tylko do odczytu", + "Conversation not found or not joined" : "Nie znaleziono rozmowy lub nie dołączono do niej", + "Lobby is still active and you're not a moderator" : "Poczekalnia jest nadal aktywna i nie jesteś moderatorem", + "Connection failed" : "Błąd połączenia", + "Reload" : "Przeładuj", + "{nickName} raised their hand." : "{nickName} podniósł rękę.", + "A participant raised their hand." : "Uczestnik podniósł rękę.", + "Collapse stripe" : "Zwiń pasek", + "Expand stripe" : "Rozwiń pasek", + "Previous page of videos" : "Poprzednia strona obrazów wideo", + "Next page of videos" : "Następna strona obrazów wideo", + "Connecting …" : "Łączę…", + "Calling …" : "Łączenie…", + "Waiting for {user} to join the call" : "Oczekiwanie na {user}, aż dołączy do połączenia", + "Waiting for others to join the call …" : "Oczekiwanie na dołączenie się pozostałych do połączenia…", + "You can invite others in the participant tab of the sidebar" : "Możesz zapraszać inne osoby z zakładki uczestników na pasku bocznym", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Możesz zapraszać inne osoby z zakładki uczestników na pasku bocznym lub udostępnić ten link do zaproszenia!", + "Share this link to invite others!" : "Udostępnij ten link, aby zaprosić inne osoby!", + "Copy link" : "Kopiuj link", + "You are not allowed to enable audio" : "Nie możesz włączyć dźwięku", + "No audio. Click to select device" : "Bez dźwięku. Kliknij, aby wybrać urządzenie", + "Mute audio" : "Wycisz dźwięk", + "Mute audio (M)" : "Wycisz dźwięk (M)", + "Unmute audio" : "Wyłącz wyciszenie dźwięku", + "Unmute audio (M)" : "Wyłącz wyciszenie dźwięku (M)", + "None" : "Żaden", + "Select a microphone" : "Wybierz mikrofon", + "Select a speaker" : "Wybierz głośnik", + "Microphone settings" : "Ustawienia mikrofonu", + "Check devices" : "Sprawdź urządzenia", + "Access to camera was denied" : "Odmowa dostępu do kamery", + "Error while accessing camera: It is likely in use by another program" : "Błąd podczas uzyskiwania dostępu do kamery: Prawdopodobnie jest używana przez inny program", + "Error while accessing camera" : "Wystąpił błąd podczas dostępu do kamery", + "You have been muted by a moderator" : "Zostałeś wyciszony przez moderatora", + "Hide presenter video" : "Ukryj wideo prezentera", + "You are not allowed to enable video" : "Nie możesz włączyć obrazu wideo", + "No video. Click to select device" : "Brak wideo. Kliknij, aby wybrać urządzenie", + "Disable video" : "Wyłącz obraz wideo", + "Disable video (V)" : "Wyłącz obraz wideo (V)", + "Enable video" : "Włącz obraz wideo", + "Enable video (V)" : "Włącz obraz wideo (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo — połączenie zostanie na chwilę przerwane przy pierwszym włączeniu obrazu wideo", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo (V) - Twoje połączenie zostanie na chwilę przerwane po pierwszym włączeniu obrazu wideo", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Włącz obraz wideo. Twoje połączenie zostanie na chwilę przerwane po pierwszym włączeniu obrazu wideo", + "Select a video device" : "Wybierz urządzenie wideo", + "Show presenter" : "Pokaż prezentera", + "You" : "Ty", + "Mute" : "Wycisz", + "Muted" : "Wyciszony", + "Show screen" : "Pokaż ekran", + "Stop following" : "Zakończ obserwowanie", + "Connection could not be established …" : "Nie udało się nawiązać połączenia…", + "Connection was lost and could not be re-established …" : "Połączenie zostało utracone i nie można go było przywrócić…", + "Connection could not be established. Trying again …" : "Nie udało się nawiązać połączenia. Ponowna próba…", + "Connection lost. Trying to reconnect …" : "Utracono połączenie. Ponowna próba połączenia…", + "Connection problems …" : "Problemy z połączeniem…", + "Collapse" : "Zwiń", + "Expand" : "Rozwiń", + "You need to be logged in to upload files" : "Musisz się zalogować, aby wysyłać pliki", + "Drop your files to upload" : "Upuść swoje pliki do wysłania", + "Conversation messages" : "Wiadomości w rozmowie", + "Scroll to bottom" : "Przewiń do dołu", + "Post message" : "Wyślij wiadomość", + "Federated conversation" : "Rozmowa federacyjna", + "Public conversation" : "Rozmowa publiczna", + "Favorite" : "Ulubione", + "Banned users" : "Zbanowani użytkownicy", + "Manage the list of banned users in this conversation." : "Zarządzaj listą zablokowanych użytkowników w tej rozmowie.", + "Manage bans" : "Zarządzanie blokadami", + "No banned users" : "Brak zbanowanych użytkowników", + "Banned by:" : "Zablokowany przez:", + "Date:" : "Data:", + "Note:" : "Notatka:", + "Hide details" : "Ukryj szczegóły", + "Show details" : "Pokaż szczegóły", + "Unban" : "Odblokuj", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Możesz zmienić tytuł i opis w Kalendarzu {linkstart} ↗ {linkend}.", + "Error while updating conversation name" : "Błąd podczas aktualizowania nazwy rozmowy", + "Error while updating conversation description" : "Błąd podczas aktualizowania opisu rozmowy", + "Enter a name for this conversation" : "Wpisz nazwę tej rozmowy", + "Edit conversation name" : "Edytuj nazwę rozmowy", + "Edit conversation description" : "Edytuj opis rozmowy", + "Enter a description for this conversation" : "Podaj opis dla tej rozmowy", + "Picture" : "Obraz", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "W tej rozmowie można włączyć następujące boty. Skontaktuj się z administracją, aby zainstalować więcej botów na tym serwerze.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na tym serwerze nie są zainstalowane żadne boty. Skontaktuj się z administracją, aby zainstalować boty na tym serwerze.", + "Disable" : "Wyłącz", + "Enable" : "Włącz", + "The bot is not available anymore" : "Bot nie jest już dostępny", + "Breakout rooms" : "Pokoje podgrup", + "Manage breakout rooms" : "Zarządzaj pokojami podgrup", + "Set up breakout rooms for this conversation" : "Skonfiguruj pokoje podgrup dla tej rozmowy", + "Please select a valid PNG or JPG file" : "Wybierz prawidłowy plik PNG lub JPG", + "Choose your conversation picture" : "Wybierz obraz rozmowy", + "Choose" : "Wybierz", + "Error setting conversation picture" : "Błąd podczas ustawiania obrazu rozmowy", + "Could not set the conversation picture: {error}" : "Nie można ustawić obrazu rozmowy: {error}", + "Error cropping conversation picture" : "Błąd podczas przycinania obrazu rozmowy", + "Error removing conversation picture" : "Błąd podczas usuwania obrazu rozmowy", + "Set emoji as conversation picture" : "Ustaw emoji jako obraz rozmowy", + "Set background color for conversation picture" : "Ustaw kolor tła obrazu rozmowy", + "Upload conversation picture" : "Wyślij obraz rozmowy", + "Choose conversation picture from files" : "Wybierz obraz rozmowy z plików", + "Remove conversation picture" : "Usuń obraz rozmowy", + "The file must be a PNG or JPG" : "Plik musi być w formacie PNG lub JPG", + "Set picture" : "Ustaw obraz", + "Default permissions modified for {conversationName}" : "Zmieniono uprawnienia domyślne dla {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nie udało się zmienić uprawnień domyślnych dla {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edytuj domyślne uprawnienia uczestników tej rozmowy. Te ustawienia nie mają wpływu na moderatorów.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Za każdym razem, gdy uprawnienia zostaną zmodyfikowane w tej sekcji, uprawnienia niestandardowe wcześniej przypisane poszczególnym uczestnikom zostaną utracone.", + "All permissions" : "Wszystkie uprawnienia", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Uczestnicy mają uprawnienia do rozpoczynania połączenia, dołączania do rozmowy, włączania dźwięku i obrazu wideo oraz udostępniania ekranu.", + "Restricted" : "Ograniczone", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Uczestnicy mogą dołączać do połączeń, ale nie mogą włączać dźwięku i obrazu wideo ani udostępniać ekranu, dopóki moderator nie przyzna im odpowiednich uprawnień.", + "Advanced permissions" : "Uprawnienia zaawansowane", + "Edit permissions" : "Edytuj uprawnienia", + "Conversation settings" : "Ustawienia rozmowy", + "Basic Info" : "Podstawowa informacja", + "Personal" : "Osobiste", + "Moderation" : "Moderacja", + "Setup overview" : "Przegląd konfiguracji", + "Live transcription" : "Transkrypcja na żywo", + "Live transcriptions app is not installed" : "Aplikacja Live transcriptions nie jest zainstalowana", + "Enable live transcription" : "Włącz transkrypcję na żywo", + "Breakout Rooms" : "Pokoje podgrup", + "Matterbridge" : "Matterbridge", + "Bots" : "Boty", + "Danger zone" : "Strefa niebezpieczeństwa", + "Archive conversation" : "Archiwizuj rozmowę", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Zarchiwizowane rozmowy są domyślnie ukryte na liście konwersacji. Jednak nadal będą się pojawiać, gdy wyszukasz nazwę rozmowy lub uzyskasz dostęp do listy zarchiwizowanych rozmów.", + "Do you really want to leave \"{displayName}\"?" : "Czy naprawdę chcesz opuścić \"{displayName}\"?", + "You can archive this conversation instead." : "Zamiast tego możesz zarchiwizować tę rozmowę.", + "Leave conversation" : "Opuść rozmowę", + "You need to promote a new moderator before you can leave the conversation" : "Zanim opuścisz rozmowę, musisz wybrać nowego moderatora", + "Delete conversation" : "Usuń rozmowę", + "Do you really want to delete \"{displayName}\"?" : "Czy na pewno chcesz usunąć \"{displayName}\"?", + "Error while deleting conversation" : "Błąd podczas usuwania rozmowy", + "Delete all chat messages" : "Usuń wszystkie wiadomości czatu", + "Do you really want to delete all messages in \"{displayName}\"?" : "Czy na pewno chcesz usunąć wszystkie wiadomości w \"{displayName}\"?", + "Error while clearing chat history" : "Błąd podczas czyszczenia historii czatu", + "Be careful, these actions cannot be undone." : "Uważaj, tych działań nie można cofnąć.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Po opuszczeniu rozmowy, aby ponownie dołączyć do zamkniętej rozmowy, potrzebne będzie zaproszenie. Do otwartej rozmowy będzie można dołączyć w dowolnym momencie.", + "Permanently delete this conversation." : "Usuń trwale rozmowę.", + "Delete chat messages" : "Usuń wiadomości czatu", + "Permanently delete all the messages in this conversation." : "Usuń trwale wszystkie wiadomości w tej rozmowie.", + "_%n hour_::_%n hours_" : ["%n godzina","%n godziny","%n godzin","%n godzin"], + "_%n day_::_%n days_" : ["%n dzień","%n dni","%n dni","%n dni"], + "_%n week_::_%n weeks_" : ["%n tydzień","%n tygodnie","%n tygodni","%n tygodni"], + "Custom expiration time" : "Własny czas wygaśnięcia", + "Message expiration disabled" : "Wygaśnięcie wiadomości wyłączone", + "Message expiration set: {duration}" : "Ustawione wygaśnięcie wiadomości: {duration}", + "Error when trying to set message expiration" : "Błąd podczas próby ustawienia wygaśnięcia wiadomości", + "Message expiration" : "Wygaśnięcie wiadomości", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Wiadomości na czacie mogą wygasnąć po pewnym czasie. Uwaga: pliki udostępnione na czacie nie zostaną usunięte dla właściciela, ale nie będą już udostępniane w rozmowie.", + "Set message expiration" : "Ustaw datę ważności wiadomości", + "Current message expiration" : "Aktualny termin ważności wiadomości", + "Password copied to clipboard" : "Hasło skopiowano do schowka", + "Password could not be copied" : "Nie można skopiować hasła", + "Guest access" : "Dostęp dla gościa", + "Breakout rooms are not allowed in public conversations." : "Podczas publicznych rozmów nie wolno korzystać z pokoi spotkań.", + "Allow guests to join this conversation via link" : "Zezwalaj gościom na dołączenie do tej rozmowy za pomocą linku", + "Password protection" : "Ochrona hasłem", + "This conversation is password-protected. Guests need password to join" : "Rozmowa jest chroniona hasłem. Goście potrzebują hasła, aby dołączyć", + "Password protection is needed for public conversations" : "Ochrona hasłem jest wymagana w przypadku rozmów publicznych", + "Set a password" : "Ustaw hasło", + "Change password" : "Zmień hasło", + "Enter new password" : "Wprowadź nowe hasło", + "Save password" : "Zapisz hasło", + "Copy password" : "Kopiuj hasło", + "Guests are allowed to join this conversation via link" : "Goście mogą dołączyć do tej rozmowy za pomocą linku", + "Guests are not allowed to join this conversation" : "Goście nie mogą przyłączać się do tej rozmowy", + "Resend invitations" : "Wyślij ponownie zaproszenia", + "This conversation is open to both registered users and users created with the Guests app" : "Rozmowa jest dostępna zarówno dla zarejestrowanych użytkowników, jak i użytkowników utworzonych za pomocą aplikacji Goście", + "This conversation is open to registered users" : "Rozmowa jest dostępna dla zarejestrowanych użytkowników", + "This conversation is limited to the current participants" : "Rozmowa jest ograniczona do obecnych uczestników", + "You opened the conversation to both registered users and users created with the Guests app" : "Otworzyłeś rozmowę zarówno dla zarejestrowanych użytkowników, jak i użytkowników utworzonych za pomocą aplikacji Goście", + "Error occurred when opening or limiting the conversation" : "Wystąpił błąd podczas otwierania lub ograniczania rozmowy", + "Open conversation to registered users, showing it in search results" : "Otwórz rozmowę dla zarejestrowanych użytkowników, pokazując ją w wynikach wyszukiwania", + "Also open to users created with the Guests app" : "Dostępne także dla użytkowników utworzonych za pomocą aplikacji Goście", + "Open conversation" : "Otwarta rozmowa", + "Set language spoken in calls" : "Ustaw język używany podczas rozmów", + "Languages could not be loaded" : "Nie udało się załadować języków", + "Loading languages …" : "Ładowanie języków ...", + "Invalid language" : "Nieprawidłowy język", + "Default language (English)" : "Domyślny język (angielski)", + "Default live transcription language set" : "Ustawiono domyślny język transkrypcji na żywo", + "Live transcription language set: {languageName}" : "Ustawiono język transkrypcji na żywo: {languageName}", + "Error when trying to set live transcription language" : "Błąd podczas próby ustawienia języka transkrypcji na żywo", + "Start time: {date}" : "Godzina rozpoczęcia: {date}", + "Start time has been updated" : "Czas rozpoczęcia został zaktualizowany", + "Error occurred while updating start time" : "Wystąpił błąd podczas aktualizowania czasu rozpoczęcia", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Włączenie poczekalni spowoduje usunięcie osób niebędących moderatorami z trwającej rozmowy.", + "Enable lobby, restricting the conversation to moderators" : "Włącz poczekalnię, ograniczając rozmowę dla moderatorów", + "Meeting start time" : "Czas rozpoczęcia spotkania", + "Start time (optional)" : "Czas rozpoczęcia (opcjonalnie)", + "Import email participants" : "Importuj uczestników z adresów e-mail", + "You can import a list of email participants from a CSV file." : "Listę uczestników adresów e-mail można zaimportować z pliku CSV.", + "Poll drafts" : "Projekty ankiet", + "Browse poll drafts" : "Przeglądaj projekty sond", + "Error occurred when locking the conversation" : "Wystąpił błąd podczas zablokowywania rozmowy", + "Error occurred when unlocking the conversation" : "Wystąpił błąd podczas odblokowywania rozmowy", + "Lock conversation" : "Zablokuj rozmowę", + "This will also terminate the ongoing call." : "Spowoduje to również zakończenie trwającego połączenia.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zablokuj rozmowę, aby nikt nie mógł publikować wiadomości ani rozpoczynać połączeń", + "Edit" : "Edytuj", + "More information" : "Więcej informacji", + "Delete" : "Usuń", + "Add new bridged channel to current conversation" : "Dodaj nowy zmostkowany kanał do bieżącej rozmowy", + "unknown state" : "stan nieznany", + "running" : "uruchomiony", + "not running, check Matterbridge log" : "nie działa, sprawdź dziennik Matterbridge", + "not running" : "nie działa", + "Bridge saved" : "Połączenie zapisane", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Możesz łączyć kanały z różnych systemów wiadomości natychmiastowych z Matterbridge.", + "More info on Matterbridge" : "Więcej informacji o Matterbridge", + "Messaging systems" : "Wiadomości systemowe", + "Enable bridge" : "Włącz mostkowanie", + "Show Matterbridge log" : "Pokaż dziennik Matterbridge", + "Log content" : "Zawiera", + "Only moderators are allowed to mention @all" : "Tylko moderatorzy mogą wspominać dla @all", + "All participants are allowed to mention @all" : "Wszyscy uczestnicy mogą wspomnieć dla @all", + "Participants are now allowed to mention @all." : "Uczestnicy mogą teraz wspominać dla @all.", + "Mentioning @all has been limited to moderators." : "Wzmianki @all są dostępne wyłącznie dla moderatorów.", + "Allow participants to mention @all" : "Zezwalaj uczestnikom na wspominanie @all", + "Mention permissions" : "Wspomnij o uprawnieniach", + "Notifications" : "Powiadomienia", + "Notify about calls in this conversation" : "Powiadamiaj o połączeniach w tej rozmowie", + "Important conversation" : "Ważna rozmowa", + "\"Do not disturb\" user status is ignored for important conversations" : "Status użytkownika „Nie przeszkadzać” jest ignorowany dla ważnych rozmów.", + "Sensitive conversation" : "Rozmowa poufna", + "Message preview will be disabled in conversation list and notifications" : "Podgląd wiadomości zostanie wyłączony na liście rozmów i w powiadomieniach.", + "Recording consent is required for calls in this conversation" : "W przypadku rozmów w tym połączeniu wymagana jest zgoda na nagrywanie", + "Recording consent is not required for calls in this conversation" : "W przypadku rozmów w tym połączeniu nie jest wymagana zgoda na nagrywanie", + "Recording consent requirement was updated" : "Zaktualizowano wymóg dotyczący zgody na nagrywanie", + "Error occurred while updating recording consent" : "Wystąpił błąd podczas aktualizowania zgody na nagrywanie", + "Recording Consent" : "Zgoda na nagrywanie", + "Recording consent cannot be changed once a call or breakout session has started." : "Zgody na nagrywanie nie można zmienić po rozpoczęciu rozmowy lub sesji grupowej.", + "Require recording consent before joining call in this conversation" : "Wymagaj zgody na nagrywanie przed dołączeniem do tej rozmowy", + "Recording consent is required for all calls" : "W przypadku wszystkich połączeń wymagana jest zgoda na nagrywanie", + "SIP dial-in is now possible without PIN requirement" : "Połączenie telefoniczne SIP jest teraz możliwe bez konieczności podawania kodu PIN", + "SIP dial-in is now enabled" : "Połączenie telefoniczne SIP jest teraz włączone", + "SIP dial-in is now disabled" : "Połączenie telefoniczne SIP jest teraz wyłączone", + "Error occurred when enabling SIP dial-in" : "Wystąpił błąd podczas włączania połączenia telefonicznego SIP", + "Error occurred when disabling SIP dial-in" : "Wystąpił błąd podczas wyłączania połączenia telefonicznego SIP", + "Phone and SIP dial-in" : "Połączenie telefoniczne i SIP", + "Enable phone and SIP dial-in" : "Włącz połączenie telefoniczne i SIP", + "Allow to dial-in without a PIN" : "Zezwalaj na połączenie telefoniczne bez kodu PIN", + "Ongoing" : "Trwające", + "{dayPrefix} {dateTime}" : "{dayPrefix}{dateTime}", + "_%n person accepted_::_%n people accepted_" : ["Zaakceptowane przez %n osobę","Zaakceptowane przez %n osoby","Zaakceptowało %n osób","Zaakceptowało %nosób"], + "_%n person declined_::_%n people declined_" : ["%n osoba odrzuciła","%n osoby odrzuciły","%n osób odrzuciło","%n osób odrzuciło"], + "_and %n other attachment_::_and %n other attachments_" : ["i %n inny załącznik","i %n inne załączniki","i %n innych załączników","i %n innych załączników"], + "With {displayName}" : "Z {displayName}", + "In {conversation}" : "w {conversation}", + "View attachment" : "Wyświetl załącznik", + "Join" : "Dołącz", + "View conversation" : "Pokaż rozmowę", + "View event on Calendar" : "Pokaż zdarzenie w Kalendarzu", + "Error while creating the conversation" : "Błąd podczas tworzenia rozmowy", + "Hello, {displayName}" : "Witaj, {displayName}", + "Start meeting now" : "Rozpocznij spotkanie", + "Give your meeting a title" : "Wpisz tytuł swojego spotkania", + "Create and copy link" : "Utwórz i skopiuj link", + "Create a new conversation" : "Utwórz nową rozmowę", + "Join open conversations" : "Dołącz do otwartych rozmów", + "Call a phone number" : "Zadzwoń pod numer telefonu", + "Scroll backward" : "Przewiń wstecz", + "Scroll forward" : "Przewiń do przodu", + "Schedule meetings" : "Planowanie spotkań", + "You don't have any upcoming meetings" : "Nie masz żadnych nadchodzących spotkań", + "Open calendar" : "Otwórz kalendarz", + "Unread mentions" : "Nieprzeczytane wzmianki", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Wiadomości, w których zostałeś wspomniany, pojawią się tutaj. Możesz wspominać ludzi, wpisując @ i ich nazwę", + "Upcoming reminders" : "Nadchodzące przypomnienia", + "Message reminders" : "Przypomnienia wiadomości", + "Set a reminder on a message to be notified" : "Ustaw przypomnienie dla wiadomości, aby otrzymać powiadomienie", + "Start a group conversation" : "Rozpocznij rozmowę grupową", + "Create conversation" : "Utwórz rozmowę", + "Enter your name" : "Wpisz swoją nazwę", + "Submit name and join" : "Podaj nazwę i dołącz", + "Do you already have an account?" : "Czy masz już konto?", + "Log in" : "Zaloguj się", + "Error while verifying uploaded file" : "Wystąpił błąd podczas weryfikacji przesłanego pliku", + "Uploaded file is verified" : "Wysłany plik został zweryfikowany", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Format treści to wartości rozdzielone przecinkami (CSV):
- Wiersz nagłówka jest wymagany i musi odpowiadać słowom \"name\",\"email\" lub po prostu \"email\"
- Jeden wpis w wierszu (np. \"Jan Kowalski\",\"jan@przyklad.pl\")", + "Participants added successfully" : "Uczestnicy dodani pomyślnie", + "Error while adding participants" : "Błąd podczas dodawania uczestników", + "Import a file" : "Importuj plik", + "Browse" : "Przeglądaj", + "Verifying uploaded file …" : "Weryfikacja przesłanego pliku…", + "This might take a moment" : "To może chwilę potrwać.", + "Send invitations" : "Wyślij zaproszenia", + "_%n invalid email_::_%n invalid emails_" : ["%n adres e-mail nieprawidłowy","%n adresy e-mail nieprawidłowe","%n adresów e-mail nieprawidłowych","%n adresów e-mail nieprawidłowych"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n adres e-mail został już zaimportowanych lub jest duplikatem","%n adresy e-mail zostały już zaimportowane lub są duplikatami","%n adresów e-mail zostało już zaimportowanych lub są duplikatami","%n adresów e-mail zostało już zaimportowanych lub są duplikatami"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["Można wysłać %n zaproszenie","Można wysłać %n zaproszenia","Można wysłać %n zaproszeń","Można wysłać %n zaproszeń"], + "An error occurred while calling a phone number" : "Wystąpił błąd podczas wybierania numeru telefonu", + "Phone number could not be called: {error}" : "Nie można było zadzwonić pod numer telefonu: {error}", + "Phone number could not be called" : "Nie można było zadzwonić pod numer telefonu", + "Search participants or phone numbers" : "Wyszukaj uczestników lub numery telefonów", + "Creating the conversation …" : "Tworzenie rozmowy…", + "Mark as read" : "Oznacz jako przeczytane", + "Mark as unread" : "Oznacz jako nieprzeczytane", + "Remove from favorites" : "Usuń z ulubionych", + "Add to favorites" : "Dodaj do ulubionych", + "Unarchive conversation" : "Przywróć archiwum rozmowy", + "Ignore \"Do not disturb\"" : "Ignoruj \"Nie przeszkadzać\"", + "You need to promote a new moderator before you can leave the conversation." : "Zanim opuścisz rozmowę, musisz wybrać nowego moderatora.", + "Conversation actions" : "Akcje rozmowy", + "Notify about calls" : "Powiadom o połączeniach", + "Hide message text" : "Ukryj treść wiadomości", + "Pending invitations" : "Oczekujące zaproszenia", + "Join conversations from other servers" : "Dołącz do rozmów z innych serwerów", + "From {user} at {remoteServer}" : "Od {user} z {remoteServer}", + "Decline invitation" : "Odrzuć zaproszenie", + "Accept invitation" : "Zaakceptuj zaproszenie", + "No pending invitations" : "Brak oczekujących zaproszeń", + "Home" : "Strona główna", + "Unread" : "Nieprzeczytane", + "Mentions" : "Wzmianki", + "Meetings" : "Spotkania", + "Sort conversations" : "Sortuj rozmowy", + "By recent activity" : "Według ostatniej aktywności", + "Alphabetically" : "Alfabetycznie", + "Do not group by type" : "Nie grupuj według typu", + "Show private ones first" : "Najpierw pokazuj prywatne", + "Show group ones first" : "Najpierw pokazuj grupowe", + "No followed threads" : "Brak obserwowanych wątków", + "No matches found" : "Nie znaleziono pasujących", + "No conversations found" : "Nie znaleziono rozmów", + "You have no archived conversations." : "Nie masz żadnych zarchiwizowanych rozmów.", + "Subscribe to an existing thread or start your own." : "Zasubskrybuj istniejący wątek lub rozpocznij własny.", + "You have no unread mentions." : "Nie masz nieprzeczytanych wzmianek.", + "You have no unread messages." : "Nie masz nieprzeczytanych wiadomości.", + "An error occurred while performing the search" : "Wystąpił błąd podczas wyszukiwania", + "Conversation list" : "Lista rozmów", + "Filter conversations by" : "Filtruj rozmowy po", + "Unread messages" : "Nieprzeczytane wiadomości", + "Meeting conversations" : "Rozmowy spotkań", + "Clear filters" : "Wyczyść filtry", + "New personal note" : "Nowa notatka osobista", + "SIP backend is not installed" : "Backend SIP nie jest zainstalowany", + "Back to conversations" : "Powrót do rozmów", + "Archived conversations" : "Zarchiwizowane rozmowy", + "Threads" : "Wątki", + "Clear filter" : "Wyczyść filtr", + "Show more threads" : "Pokaż więcej wątków", + "App settings" : "Ustawienia aplikacji", + "Users" : "Użytkownicy", + "Groups" : "Grupy", + "Teams" : "Zespoły", + "Federated users" : "Użytkownicy federacyjni", + "New private conversation" : "Nowa rozmowa prywatna", + "Other sources" : "Inne źródła", + "Open conversations" : "Otwarte rozmowy", + "No search results" : "Brak wyników wyszukiwania", + "Users, groups and teams" : "Użytkownicy, grupy i zespoły", + "Users and groups" : "Użytkownicy i grupy", + "Users and teams" : "Użytkownicy i zespoły", + "Groups and teams" : "Grupy i zespoły", + "New group conversation" : "Nowa rozmowa grupowa", + "The meeting will start soon" : "Spotkanie wkrótce się rozpocznie", + "This meeting is scheduled for {startTime}" : "Spotkanie jest zaplanowane na {startTime}", + "You are currently waiting in the lobby" : "Obecnie czekasz w poczekalni", + "Enable noise suppression" : "Włącz redukcję szumów", + "Reduce background noises for better voice quality" : "Zredukuj szumy tła, aby poprawić jakość dźwięku", + "Enable echo cancellation" : "Włącz eliminację echa", + "Minimize echo effect from own surrounding" : "Minimalizuj efekt echa z otoczenia", + "Enable auto gain control" : "Włącz automatyczną regulację wzmocnienia", + "Dynamically adjust microphone volume for consistent level" : "Dynamicznie dostosuj głośność mikrofonu, aby utrzymać stały poziom", + "Select microphone" : "Wybierz mikrofon", + "No microphone available" : "Brak dostępnego mikrofonu", + "Select speaker" : "Wybierz głośnik", + "No speaker available" : "Brak dostępnych głośników", + "Select camera" : "Wybierz kamerę", + "No camera available" : "Brak dostępnej kamery", + "Select a device" : "Wybierz urządzenie", + "Playing …" : "Odtwarzanie…", + "Test speakers" : "Test głośników", + "Test" : "Test", + "Devices" : "Urządzenia", + "Backgrounds" : "Tła", + "No audio" : "Brak dźwięku", + "No camera" : "Brak kamery", + "Display video as you will see it (mirrored)" : "Wyświetl wideo tak, jak je widzisz (odbicie lustrzane)", + "Display video as others will see it" : "Wyświetlaj wideo tak, jak będą je widzieć inni", + "Calls are not supported in your browser" : "Twoja przeglądarka nie obsługuje połączeń", + "Access to microphone is only possible with HTTPS" : "Dostęp do mikrofonu jest możliwy tylko przy użyciu protokołu HTTPS", + "Access to microphone was denied" : "Odmowa dostępu do mikrofonu", + "Error while accessing microphone" : "Błąd podczas uzyskiwania dostępu do mikrofonu", + "Access to camera is only possible with HTTPS" : "Dostęp do kamery jest możliwy tylko przy użyciu protokołu HTTPS", + "The call is being recorded." : "Rozmowa jest nagrywana.", + "The call might be recorded." : "Rozmowa może zostać nagrana.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Nagranie może obejmować Twój głos, wideo z kamery i udostępniony ekran. Przed dołączeniem do rozmowy wymagana jest Twoja zgoda.", + "Give consent to the recording of this call" : "Wyraź zgodę na nagrywanie tej rozmowy", + "Show more info" : "Pokaż więcej informacji", + "Audio is not available" : "Dźwięk jest niedostępny", + "Video is not available" : "Wideo jest niedostępne", + "Start recording immediately with the call" : "Rozpocznij nagrywanie natychmiast po połączeniu", + "Recording backend is not installed" : "Backend nagrywania nie jest zainstalowany", + "Notify all participants about this call" : "Powiadom wszystkich uczestników o tym połączeniu", + "Apply settings" : "Zastosuj ustawienia", + "Select virtual office background" : "Wybierz tło wirtualnego biura", + "Select virtual home background" : "Wybierz tło wirtualnego domu", + "Select virtual abstract background" : "Wybierz wirtualne abstrakcyjne tło", + "Select virtual beach background" : "Wybierz tło wirtualnej plaży", + "Select virtual park background" : "Wybierz tło wirtualnego parku", + "Select virtual theater background" : "Wybierz tło wirtualnego teatru", + "Select virtual library background" : "Wybierz tło wirtualnej biblioteki", + "Select virtual space station background" : "Wybierz tło wirtualnej stacji kosmicznej", + "Error while uploading the file" : "Błąd podczas wysyłania pliku", + "Select a file" : "Wybierz plik", + "Invalid path selected" : "Wybrano nieprawidłową ścieżkę", + "Select virtual background from file {fileName}" : "Wybierz wirtualne tło z pliku {fileName}", + "Blur" : "Plama", + "Upload" : "Wyślij", + "Files" : "Pliki", + "(editing)" : "(redagowanie)", + "(edited)" : "(edytowane)", + "The message has expired or has been deleted" : "Wiadomość wygasła lub została usunięta", + "Cancel quote" : "Anuluj cytowanie", + "24 hours" : "24 godziny", + "7 days" : "7 dni", + "30 days" : "30 dni", + "Until unpin" : "Do odpięcia", + "Clear reminder – {timeLocale}" : "Wyczyść przypomnienie – {timeLocale}", + "Edited by {actor}" : "Edytowane przez {actor}", + "Pinned by you" : "Przypięte przez Ciebie", + "Pinned by {actor}" : "Przypięte przez {actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Tekst wiadomości skopiowany do schowka", + "Message text could not be copied" : "Nie udało się skopiować tekstu wiadomości", + "Message forwarded to \"Note to self\"" : "Wiadomość przekazana do \"Notatka dla siebie\"", + "Error while forwarding message to \"Note to self\"" : "Błąd podczas przekazywania wiadomości do \"Notatka dla siebie\"", + "A reminder was successfully removed" : "Przypomnienie zostało pomyślnie usunięte", + "Error occurred when removing a reminder" : "Wystąpił błąd podczas usuwania przypomnienia", + "A reminder was successfully set at {datetime}" : "Przypomnienie zostało pomyślnie ustawione na {datetime}", + "Error occurred when creating a reminder" : "Podczas tworzenia przypomnienia wystąpił błąd", + "Add a reaction to this message" : "Dodaj reakcję na tę wiadomość", + "Reply" : "Odpowiedz", + "More actions" : "Więcej akcji", + "Set reminder" : "Ustaw przypomnienie", + "Pin message" : "Przypnij wiadomość", + "Unpin message" : "Odepnij wiadomość", + "Reply privately" : "Odpowiedz prywatnie", + "Edit message" : "Edytuj wiadomość", + "Copy message" : "Skopiuj wiadomość", + "Copy message link" : "Kopiuj link wiadomości", + "Go to file" : "Przejdź do pliku", + "Download file" : "Pobierz plik", + "Go to thread" : "Przejdź do wątku", + "Edit thread details" : "Edytuj szczegóły wątku", + "Forward message" : "Przekaż wiadomość", + "Translate" : "Tłumaczenie", + "Set custom reminder" : "Ustaw niestandardowe przypomnienie", + "Keep pinned for" : "Zachowaj przypięcie przez", + "Set custom period" : "Ustaw niestandardowy okres", + "Close reactions menu" : "Zamknij menu reakcji", + "React with {emoji}" : "Reakcja za pomocą {emoji}", + "React with another emoji" : "Reakcja za pomocą innego emoji", + "Choose a conversation to forward the selected message." : "Wybierz rozmowę, aby przekazać wybraną wiadomość.", + "Error while forwarding message" : "Błąd podczas przekazywania wiadomości", + "The message has been forwarded to {selectedConversationName}" : "Wiadomość została przekazana do {selectedConversationName}", + "Dismiss" : "Odrzuć", + "Go to conversation" : "Przejdź do rozmowy", + "Detect language" : "Wykryj język", + "The message could not be translated" : "Nie udało się przetłumaczyć wiadomości", + "Translation copied to clipboard" : "Tłumaczenie skopiowane do schowka", + "Translation could not be copied" : "Nie można skopiować tłumaczenia", + "Translate message" : "Przetłumacz wiadomość", + "Source language to translate from" : "Język źródłowy, z którego chcesz tłumaczyć", + "Translate from" : "Przetłumacz z", + "Target language to translate into" : "Język docelowy, na który chcesz tłumaczyć", + "Translate to" : "Przetłumacz na", + "Translating" : "Tłumaczenie", + "This translation is AI generated and may contain mistakes." : "To tłumaczenie zostało wygenerowane przez AI i może zawierać błędy", + "Copy translated text" : "Kopiuj przetłumaczony tekst", + "Error when scheduling the message" : "Błąd podczas planowania wiadomości", + "Reschedule" : "Zmień harmonogram", + "Send now" : "Wyślij teraz", + "Choose a time" : "Wybierz godzinę", + "Send at custom time" : "Wyślij o niestandardowej porze", + "Will be sent without notification" : "Zostanie wysłane bez powiadomienia", + "Message read by everyone who shares their reading status" : "Wiadomość przeczytana przez wszystkich, którzy udostępniają swój status odczytu", + "Message sent" : "Wiadomość wysłana", + "Sent without notification" : "Wysłano bez powiadomienia", + "Deleting message" : "Usuwanie wiadomości", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Wiadomość została pomyślnie usunięta, ale skonfigurowano bota lub Matterbridge, a wiadomość mogła już zostać przesłana do innych usług", + "Message deleted successfully" : "Wiadomość została pomyślnie usunięta", + "Message could not be deleted because it is too old" : "Nie można usunąć wiadomości, ponieważ jest zbyt stara", + "Only normal chat messages can be deleted" : "Usunąć można tylko zwykłe wiadomości czatu", + "An error occurred while deleting the message" : "Wystąpił błąd podczas usuwania wiadomości", + "Pinned" : "Przypięte", + "Your browser does not support playing audio files" : "Twoja przeglądarka nie obsługuje odtwarzania plików audio", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} na {board}", + "Deck Card" : "Karta Deck", + "Remove {fileName}" : "Usuń {fileName}", + "Open this location in OpenStreetMap" : "Otwórz lokalizację w OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n odpowiedź","%n odpowiedzi","%n odpowiedzi","%n odpowiedzi"], + "Sending message" : "Wysyłanie wiadomości", + "Failed to send the message. Click to try again" : "Nie udało się wysłać wiadomości. Kliknij, aby spróbować ponownie", + "Not enough free space to upload file" : "Za mało wolnego miejsca, aby wysłać plik", + "You cannot send messages to this conversation at the moment" : "W tej chwili nie możesz wysyłać wiadomości dla tej rozmowy", + "Could not update the message" : "Nie udało się zaktualizować wiadomości", + "Reply to thread \"{threadTitle}\"" : "Odpowiedz w wątku \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Oddałeś głos • %n głos","Oddałeś głos • %n głosów","Oddałeś głos • %n głosów","Oddałeś głos • %n głosy"], + "You voted" : "Zagłosowałeś", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknij, aby zagłosować • %n głos","Kliknij, aby zagłosować • %n głosów","Kliknij, aby zagłosować • %n głosów","Kliknij, aby zagłosować • %n głosy"], + "Click to vote" : "Kliknij, aby zagłosować", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Projekt sondy • %n opcja","Projekt sondy • %n opcje","Projekt sondy • %n opcji","Projekt sondy • %n opcji"], + "_%n vote_::_%n votes_" : ["%n głos","%n głosów","%n głosów","%n głosy"], + "Edit poll draft" : "Edytuj projekt sondy", + "Delete poll draft" : "Usuń wersję roboczą ankiety", + "Open poll" : "Otwórz sondę", + "Closed poll" : "Głosowanie zamknięte", + "See results" : "Zobacz wyniki", + "Reactions" : "Reakcje", + "No permission to post reactions in this conversation" : "Brak uprawnień do publikowanie reakcji w tej rozmowie", + "and {participant}" : "i {participant}", + "_and %n other participant_::_and %n other participants_" : ["i %n inny uczestnik","i %n innych uczestników","i %n innych uczestników","i %n innych uczestników"], + "Show all reactions" : "Pokaż wszystkie reakcje", + "Add more reactions" : "Dodaj więcej reakcji", + "Show or collapse system messages" : "Pokaż lub zwiń komunikaty systemowe", + "No messages" : "Brak wiadomości", + "All messages have expired or have been deleted." : "Wszystkie wiadomości wygasły lub zostały usunięte.", + "Generate summary with AI" : "Wygeneruj podsumowanie za pomocą AI", + "{author} (pinned by you)" : "{author} (przypięte przez Ciebie)", + "{author} (pinned by {actor})" : "{author} (przypięte przez {actor})", + "Unpin" : "Odepnij", + "Cancel search" : "Anuluj wyszukiwanie", + "Add a phone number" : "Dodaj numer telefonu", + "Error: A password is required to create the conversation." : "Błąd: Do utworzenia rozmowy wymagane jest hasło.", + "All set, the conversation \"{conversationName}\" was created." : "Wszystko gotowe, rozmowa \"{conversationName}\" została utworzona.", + "Create a new group conversation" : "Utwórz nową rozmowę grupową", + "Add participants" : "Dodaj uczestników", + "Maximum length exceeded ({maxlength} characters)" : "Przekroczono maksymalną długość ({maxlength} znaków)", + "Conversation type" : "Typ rozmowy", + "Conversation visibility" : "Widoczność rozmowy", + "Allow guests to join via link" : "Zezwalaj gościom na dołączanie za pomocą linku", + "Enter password" : "Wprowadź hasło", + "This conversation has been locked" : "Ta rozmowa została zablokowana", + "No permission to post messages in this conversation" : "Brak uprawnień do publikowania wiadomości w tej rozmowie", + "Joining conversation …" : "Dołączanie do rozmowy…", + "Write a message without notification" : "Napisz wiadomość bez powiadomienia", + "Create a thread silently" : "Utwórz wątek po cichu", + "Create a thread" : "Utwórz wątek", + "Send message silently" : "Wyślij wiadomość w trybie cichym", + "Send message" : "Wyślij wiadomość", + "Send without notification" : "Wyślij bez powiadomienia", + "The participant will not be notified about new messages" : "Uczestnik nie będzie powiadamiany o nowych wiadomościach", + "Participants will not be notified about new messages" : "Uczestnicy nie będą powiadamiani o nowych wiadomościach", + "Message will be sent {datetimeString}" : "Wiadomość zostanie wysłana {datetimeString}", + "Thread title is required" : "Tytuł wątku jest wymagany", + "Message text is required" : "Wymagany jest tekst wiadomości", + "The message could not be edited" : "Wiadomości nie można edytować", + "File to share" : "Plik do udostępnienia", + "File upload is not available in this conversation" : "W tej rozmowie nie jest dostępne przesyłanie plików", + "Message was successfully scheduled" : "Wiadomość została pomyślnie zaplanowana", + "Add emoji" : "Dodaj emoji", + "Adding a mention will only notify users who did not read the message." : "Dodanie wzmianki spowoduje powiadomienie tylko użytkowników, którzy nie przeczytali wiadomości.", + "Thread title" : "Tytuł wątku", + "Send later" : "Wyślij później", + "Show scheduled messages" : "Pokaż zaplanowane wiadomości", + "Cancel editing" : "Anuluj edycję", + "Schedule message" : "Zaplanuj wiadomość", + "{user} is out of office and might not respond." : "{user} jest poza biurem i może nie odpowiadać.", + "Absence period: {startDate} - {endDate}" : "Okres nieobecności: {startDate} - {endDate}", + "Replacement:" : "Zastępstwo:", + "Share from {nextcloud}" : "Udostępnij z {nextcloud}", + "Share from Files" : "Udostępnij z Plików", + "Share files to the conversation" : "Udostępnij pliki w rozmowie", + "Upload from device" : "Wyślij z urządzenia", + "Create new poll" : "Stwórz nową sondę", + "Smart picker" : "Inteligentna selekcja", + "Record voice message" : "Nagraj wiadomość głosową", + "End recording and send" : "Zakończ nagrywanie i wyślij", + "Dismiss recording" : "Odrzuć nagranie", + "Access to the microphone was denied" : "Odmowa dostępu do mikrofonu", + "Microphone either not available or disabled in settings" : "Mikrofon jest niedostępny lub wyłączony w ustawieniach", + "Error while recording audio" : "Błąd podczas nagrywania dźwięku", + "Voice message {time} ({conversation})" : "Wiadomość głosowa {time} ({conversation})", + "Generating summary of unread messages …" : "Trwa generowanie podsumowania nieprzeczytanych wiadomości…", + "Summary is AI generated and might contain mistakes" : "Podsumowanie jest generowane przez sztuczną inteligencję i może zawierać błędy", + "Error occurred during a summary generation" : "Wystąpił błąd podczas generowania podsumowania", + "New file" : "Nowy plik", + "Blank" : "Pusty", + "Error while creating file" : "Błąd podczas tworzenia pliku", + "Create and share a new file" : "Utwórz i udostępnij nowy plik", + "Name of the new file" : "Nazwa nowego pliku", + "Create file" : "Utwórz plik", + "Someone is typing …" : "Ktoś pisze…", + "{user1} is typing …" : "{user1} pisze…", + "{user1} and {user2} are typing …" : "{user1} i {user2} piszą…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} i {user3} piszą…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} i %n inny pisze…","{user1}, {user2}, {user3} i %n innych pisze…","{user1}, {user2}, {user3} i %n innych piszą…","{user1}, {user2}, {user3} i %n innych piszą…"], + "Add more files" : "Dodaj więcej plików", + "Send" : "Wyślij", + "In this conversation {user} can:" : "W tej rozmowie {user} może:", + "Edit default permissions for participants in {conversationName}" : "Edytuj uprawnienia domyślne dla uczestników w {conversationName}", + "Start a call" : "Rozpocznij połączenie", + "Skip the lobby" : "Pomiń poczekalnie", + "Can post messages" : "Może publikować wiadomości", + "Can post messages and reactions" : "Może publikować wiadomości i reakcje", + "Can add reactions" : "Może dodawać reakcje", + "Enable the microphone" : "Włącz mikrofon", + "Enable the camera" : "Włącz kamerę", + "Share the screen" : "Udostępnij ekran", + "Update permissions" : "Zaktualizuj uprawnienia", + "Updating permissions" : "Aktualizowanie uprawnień", + "No poll drafts" : "Brak wersji roboczych ankiet", + "There is no poll drafts yet saved for this conversation" : "Dla tej rozmowy nie zapisano jeszcze żadnych wersji roboczych ankiety", + "Create poll in {name}" : "Utwórz sondę w {name}", + "Create poll" : "Utwórz sondę", + "Error while importing poll" : "Błąd podczas importowania ankiety", + "Question" : "Pytanie", + "Ask a question" : "Zadaj pytanie", + "Import draft from file" : "Importuj wersję roboczą z pliku", + "Answers" : "Odpowiedzi", + "Answer {option}" : "Odpowiedź {option}", + "Delete poll option" : "Usuń opcję sondy", + "Add answer" : "Dodaj odpowiedź", + "Settings" : "Ustawienia", + "Anonymous poll" : "Anonimowa sonda", + "Multiple answers" : "Wiele odpowiedzi", + "Save as draft" : "Zapisz jako wersję roboczą", + "Export draft to file" : "Eksportuj wersję roboczą do pliku", + "_Final results • %n vote_::_Final results • %n votes_" : ["Wyniki końcowe •  %n głos","Wyniki końcowe •  %n głosów","Wyniki końcowe •  %n głosów","Wyniki końcowe •  %n głosów"], + "Your vote is anonymous" : "Twój głos jest anonimowy", + "You voted for this option" : "Głosowałeś na tę opcję", + "End poll" : "Zakończ sondę", + "Change your vote" : "Zmień swój głos", + "Withdraw vote" : "Wycofaj głos", + "Results" : "Wyniki", + "Voted participants" : "Uczestnicy w głosowaniu", + "Send a message to \"{roomName}\"" : "Wyślij wiadomość do \"{roomName}\"", + "Hide list of participants" : "Ukryj listę uczestników", + "Show list of participants" : "Pokaż listę uczestników", + "Assistance requested in {roomName}" : "Prośba o pomoc w {roomName}", + "The message was sent to \"{roomName}\"" : "Wiadomość została wysłana do \"{roomName}\"", + "Dismiss request for assistance" : "Odrzuć prośbę o pomoc", + "Send message to room" : "Wyślij wiadomość do pokoju", + "Back to main room" : "Powrót do głównego pokoju", + "Back to your room" : "Wróć do swojego pokoju", + "Message all rooms" : "Wyślij wiadomość do wszystkich pokoi", + "Start session" : "Rozpocznij sesję", + "Start a call before you start a breakout room session" : "Rozpocznij rozmowę przed rozpoczęciem sesji w pokoju podgrup", + "Stop session" : "Zatrzymaj sesję", + "The message was sent to all breakout rooms" : "Wiadomość została wysłana do wszystkich pokoi podgrup", + "Send a message to all breakout rooms" : "Wyślij wiadomość do wszystkich pokoi podgrup", + "Breakout rooms are not started" : "Pokoje podgrup nie są uruchamiane", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Połączenia bez wydajnego zaplecza mogą powodować problemy z łącznością i duże obciążenie urządzeń. {linkstart}Dowiedz się więcej{linkend}", + "Talk setup incomplete" : "Konfiguracja Talka niekompletna", + "Disable lobby" : "Wyłącz poczekalnię", + "Settings for participant \"{user}\"" : "Ustawienia dla uczestnika \"{user}\"", + "Participant \"{user}\"" : "Uczestnik \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gość", + "Ringing …" : "Dzwoni…", + "Call rejected" : "Połączenie odrzucone", + "{time} talking …" : "Rozmawiam {time}…", + "{time} talking time" : "Czas rozmowy {time}", + "Raised their hand" : "Podnieśli rękę", + "Joined with video" : "Połączony z obrazem wideo", + "Joined via phone" : "Połączony przez telefon", + "Joined with audio" : "Połączony z dźwiękiem", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Długość tekstu musi być mniejsza lub równa {maxLength} znaków. Twój obecny tekst ma długość {charactersCount} znaków.", + "Remove group and members" : "Usuń grupę i członków", + "Remove team and members" : "Usuń zespół i członków", + "Remove participant" : "Usuń uczestnika", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Czy na pewno chcesz usunąć grupę \"{displayName}\" i jej członków z tej rozmowy?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Czy na pewno chcesz usunąć zespół \"{displayName}\" i jego członków z tej rozmowy?", + "Do you really want to remove {displayName} from this conversation?" : "Czy na pewno chcesz usunąć {displayName} z tej rozmowy?", + "Notification was sent to {displayName}" : "Powiadomienie zostało wysłane do {displayName}", + "Could not send notification to {displayName}" : "Nie udało się wysłać powiadomienia do {displayName}", + "Permissions granted to {displayName}" : "Uprawnienia przyznane {displayName}", + "Could not modify permissions for {displayName}" : "Nie udało się zmienić uprawnień dla {displayName}", + "Permissions removed for {displayName}" : "Usunięto uprawnienia dla {displayName}", + "Permissions set to default for {displayName}" : "Uprawnienia ustawione na domyślne dla {displayName}", + "Phone number could not be hung up" : "Nie można rozłączyć numeru telefonu", + "Phone number could not be put on hold" : "Nie można zawiesić numeru telefonu", + "Phone number could not be muted" : "Nie można wyciszyć numeru telefonu", + "Phone number could not be unmuted" : "Nie można wyłączyć wyciszenia numeru telefonu", + "DTMF message could not be sent" : "Nie można wysłać wiadomości DTMF", + "Phone number copied to clipboard" : "Numer telefonu skopiowany do schowka", + "Phone number could not be copied" : "Nie udało się skopiować numeru telefonu", + "in the lobby" : "w poczekalni", + "Dial out phone" : "Wybierz telefon", + "Hang up phone" : "Odłóż słuchawkę", + "Move back to lobby" : "Powrót do poczekali", + "Move to conversation" : "Przejdź do rozmowy", + "Dial-in PIN" : "Kod PIN połączenia telefonicznego", + "Demote from moderator" : "Degraduj z moderatora", + "Promote to moderator" : "Awansuj na moderatora", + "Resend invitation" : "Wyślij ponownie zaproszenie", + "Send call notification" : "Wyślij powiadomienie o połączeniu", + "Dial out phone number" : "Wybierz numer telefonu", + "Resume call for phone number" : "Wznów połączenie dla numeru telefonu", + "Put phone number on hold" : "Zawieś numer telefonu", + "Unmute phone number" : "Wyłącz wyciszenie numeru telefonu", + "Mute phone number" : "Wycisz numer telefonu", + "Copy phone number" : "Kopiuj numer telefonu", + "Reset custom permissions" : "Zresetuj uprawnienia niestandardowe", + "Grant all permissions" : "Przyznaj wszystkie uprawnienia", + "Remove all permissions" : "Usuń wszystkie uprawnienia", + "Also ban from this conversation" : "Zbanuj także z tej rozmowy", + "Internal note (reason to ban)" : "Notatka wewnętrzna (powód zbanowania)", + "Remove" : "Usuń", + "Permissions modified for {displayName}" : "Zmieniono uprawnienia dla {displayName}", + "Add users, groups or teams" : "Dodaj użytkowników, grupy lub zespoły", + "Add users or groups" : "Dodaj użytkowników lub grupy", + "Add users or teams" : "Dodaj użytkowników lub zespoły", + "Add users" : "Dodaj użytkowników", + "Add groups or teams" : "Dodaj grupy lub zespoły", + "Add groups" : "Dodaj grupy", + "Add teams" : "Dodaj zespoły", + "Add other sources" : "Dodaj inne źródła", + "Add emails" : "Dodaj e-maile", + "Integrations" : "Integracje", + "Add federated users" : "Dodaj użytkowników federacyjnych", + "Searching …" : "Wyszukiwanie…", + "Search for more users" : "Wyszukaj więcej użytkowników", + "You can search or add participants via name, email, or Federated Cloud ID" : "Możesz wyszukiwać i dodawać uczestników po nazwisku, adresie e-mail lub ID Chmury Federacyjnej", + "Search or add participants" : "Wyszukaj lub dodaj uczestników", + "Invitation was sent to {actorId}" : "Zaproszenie zostało wysłane do {actorId}", + "An error occurred while adding the participants" : "Wystąpił błąd podczas dodawania uczestników", + "A new group conversation with selected participant will be created" : "Zostanie utworzona nowa rozmowa grupowa z wybranym uczestnikiem", + "Participants" : "Uczestnicy", + "Pinned by a deleted user" : "Przypięte przez usuniętego użytkownika", + "Participants ({count})" : "Uczestnicy ({count})", + "Open chat" : "Otwórz rozmowę", + "You have new unread messages in the chat." : "Masz nowe nieprzeczytane wiadomości na czacie.", + "You have been mentioned in the chat." : "Zostałeś wspomniany na czacie.", + "Search messages" : "Szukaj wiadomości", + "Chat" : "Rozmowa", + "Details" : "Szczegóły", + "Shared items" : "Udostępnione elementy", + "Search in {name}" : "Szukaj w {name}", + "Threads in {name}" : "Wątki w {name}", + "{actor} in {conversation}" : "{actor} w {conversation}", + "Search messages …" : "Szukaj wiadomości…", + "Search options" : "Opcje wyszukiwania", + "From User" : "Od użytkownika", + "Since" : "Od", + "Until" : "Dopóki", + "No results found" : "Nie znaleziono wyników", + "Load more results" : "Wczytaj więcej wyników", + "Recent threads" : "Ostatnie wątki", + "Projects" : "Projekty", + "No shared items" : "Brak udostępnionych elementów", + "Thread notifications" : "Powiadomienia wątków", + "Thread actions" : "Akcje wątków", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link do rozmowy", + "No open conversations found" : "Nie znaleziono otwartych rozmów", + "Either there are no open conversations or you joined all of them." : "Albo nie ma żadnych otwartych rozmów, albo dołączyłeś do wszystkich.", + "Check spelling or use complete words." : "Sprawdź pisownię lub użyj pełnych słów.", + "Search conversations or users" : "Szukaj rozmów lub użytkowników", + "Select conversation" : "Wybierz rozmowę", + "Number length is not valid" : "Długość numeru jest nieprawidłowa", + "Region code is not valid" : "Kod regionu jest nieprawidłowy", + "Number length is too short" : "Długość numeru jest za krótka", + "Number length is too long" : "Długość numeru jest za długa", + "Number is not valid" : "Numer jest nieprawidłowy", + "Phone numbers" : "Numery telefonu", + "Display name: {name}" : "Wyświetlana nazwa: {name}", + "Edit display name" : "Edytuj wyświetlaną nazwę", + "Display name (required)" : "Wymagana nazwa wyświetlana", + "Save name" : "Zapisz nazwę", + "I picked message bubbles" : "Wybrałem dymki wiadomości", + "I picked the list style" : "Wybrałem styl listy", + "Error while setting personal setting" : "Błąd podczas ustawiania ustawień osobistych", + "Error while saving sounds setting" : "Błąd podczas zapisywania ustawień dźwięków", + "Compact conversations list" : "Kompaktowa lista rozmów", + "Chat appearance" : "Wygląd czatu", + "Messages list" : "Lista wiadomości", + "Message bubbles" : "Dymki wiadomości", + "Play sounds when participants join or leave a call" : "Odtwarzaj dźwięki, gdy uczestnicy dołączają lub opuszczają połączenie", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Obecnie niedostępne na iPhonie i iPadzie z powodu ograniczeń technicznych narzuconych przez producenta", + "Notification settings" : "Ustawienia powiadomień", + "Sounds for chat and call notifications" : "Dźwięki powiadomień czatu i połączeń", + "Invalid language ({languageId})" : "Nieprawidłowy język ({languageId})", + "Default language" : "Domyślny język", + "Default language ({languageName})" : "Język domyślny ({languageName})", + "Error when trying to load the available live translation languages" : "Błąd podczas próby wczytania dostępnych języków tłumaczenia na żywo", + "Error when trying to set live translation language" : "Błąd podczas próby ustawienia języka tłumaczenia na żywo", + "Set language used to show the transcriptions" : "Ustaw język używany do wyświetlania transkrypcji", + "Select location for attachments" : "Wybierz lokalizację dla załączników", + "Error while setting attachment folder" : "Błąd podczas ustawiania katalogu dla załącznika", + "Error while setting read status privacy" : "Błąd podczas ustawiania prywatności statusu odczytu", + "Error while setting typing status privacy" : "Błąd podczas ustawiania prywatności statusu pisania", + "Error while setting default media state" : "Błąd podczas ustawiania domyślnego stanu multimediów", + "Turn camera and microphone off by default" : "Domyślnie wyłącz kamerę i mikrofon", + "Blur camera background by default" : "Domyślnie rozmyj tło kamery", + "Skip device preview before joining a call" : "Pomiń podgląd urządzeń przed dołączeniem do rozmowy", + "Appearance & Sounds" : "Wygląd i dźwięki", + "Privacy" : "Prywatność", + "Send read receipts" : "Wysyłaj potwierdzenia odczytu", + "When off, all read statuses will be hidden" : "Gdy wyłączone, wszystkie statusy odczytu będą ukryte", + "Share typing status" : "Udostępniaj status pisania", + "When off, all typing indicators will be hidden" : "Gdy wyłączone, wszystkie wskaźniki pisania będą ukryte", + "Attachments folder" : "Katalog z załącznikami", + "Toggle full screen" : "Przełącz tryb pełnoekranowy", + "Return to Home screen" : "Wróć do ekranu głównego", + "Search" : "Szukaj", + "Shortcuts while in a chat" : "Skróty klawiaturowe w czacie", + "Focus the chat input" : "Skoncentruj się na rozmowie", + "Unfocus the chat input to use shortcuts" : "Zakończ koncentrację na rozmowie, aby używać skrótów", + "Edit your last message" : "Edytuj swoją ostatnią wiadomość", + "Shortcuts while in a call" : "Skróty podczas połączenia", + "Camera on and off" : "Włącz i wyłącz kamerę", + "Microphone on and off" : "Włącz i wyłącz mikrofon", + "Raise or lower hand" : "Podnieś lub opuść rękę", + "Push to talk or push to mute" : "Naciśnij, aby mówić lub naciśnij, aby wyciszyć", + "Zoom-in / zoom-out a screen share" : "Powiększanie/pomniejszanie udostępnionego ekranu", + "Mouse wheel" : "Kółko myszy", + "Start call silently" : "Rozpocznij połączenie po cichu", + "Start call" : "Rozpocznij połączenie", + "End call" : "Zakończ połączenie", + "The server was updated, you cannot start or join a call." : "Serwer został zaktualizowany, nie możesz rozpocząć ani dołączyć do rozmowy", + "This call has just ended" : "To połączenie właśnie się zakończyło", + "You will be able to join the call only after a moderator starts it." : "Do rozmowy będziesz mógł dołączyć dopiero jako moderator.", + "End call for everyone" : "Zakończ połączenie dla wszystkich", + "Starting the recording" : "Rozpoczęcie nagrywania", + "Recording" : "Nagranie", + "The call has been running for one hour." : "Połączenie trwa od godziny.", + "Cancel recording start" : "Anuluj rozpoczęcie nagrywania", + "Stop recording" : "Zatrzymaj nagrywanie", + "Send a reaction" : "Wyślij reakcję", + "React with {reaction}" : "Reakcja {reaction}", + "All tasks done!" : "Wszystkie zadania wykonane!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n zadania","{done} z %n zadań","{done} z %n zadań","{done} z %n zadań"], + "Add participants to this call" : "Dodaj uczestników do tej rozmowy", + "_%n participant in call_::_%n participants in call_" : ["%n uczestnik rozmowy","%n uczestników rozmowy","%n uczestników rozmowy","%n uczestników rozmowy"], + "Scheduled messages" : "Zaplanowane wiadomości", + "You are not allowed to enable screensharing" : "Nie możesz włączyć udostępniania ekranu", + "No screensharing" : "Brak udostępniania ekranu", + "Screensharing options" : "Opcje udostępniania ekranu", + "Enable screensharing" : "Włącz udostępnianie ekranu", + "Bad sent video and screen quality." : "Zła jakość wysyłanego obrazu wideo i ekranu.", + "Bad sent screen quality." : "Zła jakość wysyłanego ekranu.", + "Bad sent video quality." : "Zła jakość wysyłanego obrazu wideo.", + "Bad sent audio, video and screen quality." : "Zła jakość wysyłanego dźwięku, obrazu wideo i ekranu.", + "Bad sent audio and screen quality." : "Zła jakość wysyłanego dźwięku i ekranu.", + "Bad sent audio and video quality." : "Zła jakość wysyłanego dźwięku i obrazu wideo.", + "Bad sent audio quality." : "Zła jakość wysyłanego dźwięku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie widzieć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo podczas udostępniania ekranu.", + "Disable background blur" : "Wyłącz rozmycie tła", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie widzieć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą nie widzieć Twojego ekranu.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie widzieć.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć i nie widzieć. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo podczas udostępniania ekranu.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć Twojego ekranu. Aby poprawić sytuację, spróbuj wyłączyć udostępnianie ekranu.", + "Disable screenshare" : "Wyłącz udostępnianie ekranu", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony i inni uczestnicy mogą nie być w stanie Ciebie zrozumieć i zobaczyć. Aby poprawić sytuację, spróbuj wyłączyć rozmycie tła lub obraz wideo.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć i nie widzieć. Aby poprawić sytuację, spróbuj wyłączyć obraz wideo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Twoje połączenie internetowe lub komputer jest znacznie obciążony. Inni uczestnicy mogą Ciebie nie zrozumieć.", + "Screen sharing is not supported by your browser." : "Udostępnianie ekranu nie jest obsługiwane przez Twoją przeglądarkę.", + "Screen sharing requires the page to be loaded through HTTPS." : "Udostępnianie ekranu wymaga załadowania strony za pomocą protokołu HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Udostępnianie ekranu wymaga załadowania strony za pomocą protokołu HTTPS.", + "An error occurred while starting screensharing." : "Wystąpił błąd podczas uruchamiania udostępniania ekranu.", + "Select virtual background" : "Wybierz wirtualne tło", + "Show your screen" : "Pokaż swój ekran", + "Stop screensharing" : "Zatrzymaj udostępnianie ekranu", + "Mute others" : "Wycisz innych", + "Start recording" : "Rozpocznij nagrywanie", + "Set up breakout rooms" : "Skonfiguruj pokoje podgrup", + "Download attendance list" : "Pobierz listę obecności", + "Open Calendar" : "Otwórz Kalendarz", + "Remove participant {name}" : "Usuń uczestnika {name}", + "Would you like to delete this conversation?" : "Czy chcesz usunąć tą rozmowę?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniu braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności","Ta rozmowa zostanie automatycznie usunięta dla wszystkich po %n dniach braku aktywności"], + "Are you sure you want to delete this conversation?" : "Czy na pewno chcesz usunąć tę rozmowę?", + "Delete now" : "Usuń teraz", + "Keep" : "Pozostaw", + "Open dialpad" : "Otwórz klawiaturę numeryczną", + "Select a region" : "Wybierz region", + "Local time: {time}" : "Czas lokalny: {time}", + "Scheduled {datetime}" : "Zaplanowano {datetime}", + "Scheduled for {datetime}" : "Zaplanowano na {datetime}", + "Search …" : "Szukaj…", + "Message without mention" : "Wiadomość bez wzmianki", + "Mention myself" : "Wspomnij o sobie", + "Mention everyone" : "Wspomnij wszystkich", + "Select a conversation" : "Wybierz rozmowę", + "Select a mode" : "Wybierz tryb", + "You do not have permissions to access this conversation." : "Nie masz uprawnień dostępu do tej rozmowy.", + "Join a different conversation or start a new one." : "Dołącz do innej rozmowy lub rozpocznij nową.", + "The conversation does not exist" : "Rozmowa nie istnieje", + "Join a conversation or start a new one!" : "Dołącz do rozmowy lub rozpocznij nową!", + "Duplicate session" : "Duplikat sesji", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Ta rozmowa została otwarta w innej karcie. Bieżąca wersja serwera nie obsługuje otwierania rozmowy w wielu kartach", + "Creating and joining a conversation with \"{userid}\"" : "Tworzenie i dołączanie do rozmowy z „{userid}”", + "Join a conversation or start a new one" : "Dołącz do rozmowy lub rozpocznij nową", + "Error while joining the conversation" : "Błąd podczas dołączania do rozmowy", + "Another user" : "Inny użytkownik", + "Hey! Are you using the list style or message bubbles?" : "Hej! Czy używasz stylu listy czy dymków wiadomości?", + "Nextcloud URL" : "Adres URL Nextcloud", + "Nextcloud user" : "Użytkownik Nextcloud", + "User password" : "Hasło użytkownika", + "Talk conversation" : "Rozmowa Talk", + "Skip TLS verification" : "Pomiń weryfikację TLS", + "Matrix server URL" : "Adres URL serwera Matrix", + "User" : "Użytkownik", + "Matrix channel" : "Kanał Matrix", + "Mattermost server URL" : "Adres URL serwera Mattermost", + "Mattermost user" : "Użytkownik Mattermost", + "Team name" : "Nazwa zespołu", + "Channel name" : "Nazwa kanału", + "Rocket.Chat server URL" : "Adres URL serwera Rocket.Chat", + "User name or email address" : "Nazwa użytkownika lub adres e-mail", + "Rocket.Chat channel" : "Kanał Rocket.Chat", + "Zulip server URL" : "Adres URL serwera Zulip", + "Bot user name" : "Nazwa użytkownika bota", + "Bot API key" : "Klucz API bota", + "Zulip channel" : "Kanał Zulip", + "API token" : "Token API", + "Slack channel" : "Kanał Slack", + "Server ID or name" : "ID lub nazwa serwera", + "Channel ID (prefixed with \"ID:\") or name" : "Identyfikator kanału (poprzedzony „ID:”) lub nazwa", + "Channel" : "Kanał", + "Login" : "Login", + "Chat ID" : "ID rozmowy", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Adres URL serwera IRC (np. chat.freenode.net:6667)", + "Nickname" : "Pseudonim", + "Connection password" : "Hasło połączenia", + "IRC channel" : "Kanał IRC", + "Channel password" : "Hasło kanału", + "NickServ nickname" : "Nazwa NickServ", + "NickServ password" : "Hasło NickServ", + "Use TLS" : "Użyj TLS", + "Use SASL" : "Użyj SASL", + "Tenant ID" : "ID Tenant", + "Client ID" : "ID klienta", + "Team ID" : "ID Team", + "Thread ID" : "ID Thread", + "XMPP/Jabber server URL" : "Adres URL serwera XMPP/Jabber", + "MUC server URL" : "Adres URL serwera MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Przypięte wiadomości", + "Media" : "Multimedia", + "Polls" : "Sondy", + "Deck cards" : "Karty tablicy", + "Voice messages" : "Wiadomości głosowe", + "Locations" : "Lokalizacje", + "Call recordings" : "Nagrania rozmów", + "Audio" : "Audio", + "Show all pinned messages" : "Pokaż wszystkie przypięte wiadomości", + "Show all media" : "Pokaż wszystkie multimedia", + "Show all files" : "Pokaż wszystkie pliki", + "Show all polls" : "Pokaż wszystkie sondy", + "Show all deck cards" : "Pokaż wszystkie karty tablicy", + "Show all voice messages" : "Pokaż wszystkie wiadomości głosowe", + "Show all locations" : "Pokaż wszystkie lokalizacje", + "Show all call recordings" : "Pokaż wszystkie nagrania rozmów", + "Show all audio" : "Pokaż wszystkie audio", + "Show all other" : "Pokaż wszystkie inne", + "Follow conversation settings" : "Śledź ustawienia rozmowy", + "Group" : "Grupa", + "Team" : "Zespół", + "You reconnected to the call" : "Ponownie połączyłeś się z połączeniem", + "{actor} reconnected to the call" : "{actor} ponownie połączył się z połączeniem", + "You added {user0} and {user1}" : "Dodałeś {user0} i {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Dodałeś {user0}, {user1} i %n uczestnika","Dodałeś {user0}, {user1} i %n uczestników","Dodałeś {user0}, {user1} i %n uczestników","Dodałeś {user0}, {user1} i %n uczestników"], + "An administrator added you and {user0}" : "Administrator dodał Ciebie i {user0}", + "{actor} added you and {user0}" : "{actor} dodał Ciebie i {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrator dodał Ciebie, {user0} i %n uczestnika","Administrator dodał Ciebie, {user0} i %n uczestników","Administrator dodał Ciebie, {user0} i %n uczestników","Administrator dodał Ciebie, {user0} i %n uczestników"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} dodał Ciebie, {user0} i %n uczestnika","{actor} dodał Ciebie, {user0} i %n uczestników","{actor} dodał Ciebie, {user0} i %n uczestników","{actor} dodał Ciebie, {user0} i %n uczestników"], + "An administrator added {user0} and {user1}" : "Administrator dodał {user0} and {user1}", + "{actor} added {user0} and {user1}" : "{actor} dodał {user0} i {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrator dodał {user0}, {user1} i %n uczestnika","Administrator dodał {user0}, {user1} i %n uczestników","Administrator dodał {user0}, {user1} i %n uczestników","Administrator dodał {user0}, {user1} i %n uczestników"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} dodał {user0}, {user1} i %n uczestnika","{actor} dodał {user0}, {user1} i %n uczestników","{actor} dodał {user0}, {user1} i %n uczestników","{actor} dodał {user0}, {user1} i %n uczestników"], + "You removed {user0} and {user1}" : "Usunąłeś {user0} i {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Usunąłeś {user0}, {user1} i %n uczestnika","Usunąłeś {user0}, {user1} i %n uczestników","Usunąłeś {user0}, {user1} i %n uczestników","Usunąłeś {user0}, {user1} i %n uczestników"], + "An administrator removed you and {user0}" : "Administrator usunął Cię i {user0}", + "{actor} removed you and {user0}" : "{actor} usunął Ciebie i {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrator usunął Ciebie, {user0} i %n uczestnika","Administrator usunął Ciebie, {user0} i %n uczestników","Administrator usunął Ciebie, {user0} i %n uczestników","Administrator usunął Ciebie, {user0} i %n uczestników"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} usunął Ciebie, {user0} i %n uczestnika","{actor} usunął Ciebie, {user0} i %n uczestników","{actor} usunął Ciebie, {user0} i %n uczestników","{actor} usunął Ciebie, {user0} i %n uczestników"], + "An administrator removed {user0} and {user1}" : "Administrator usunął {user0} i {user1}", + "{actor} removed {user0} and {user1}" : "{actor} usunął {user0} i {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrator usunął {user0}, {user1} i %n innego uczestnika","Administrator usunął {user0}, {user1} i %n innych uczestników","Administrator usunął {user0}, {user1} i %n innych uczestników","Administrator usunął {user0}, {user1} i %n innych uczestników"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} usuną {user0}, {user1} i %n innego uczestnika","{actor} usuną {user0}, {user1} i %n innych uczestników","{actor} usuną {user0}, {user1} i %n innych uczestników","{actor} usuną {user0}, {user1} i %n innych uczestników"], + "You and {user0} joined the call" : "Ty i {user0} dołączyliście do połączenia", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ty, {user0} i %n uczestnik dołączył do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia","Ty, {user0} i %n uczestników dołączyło do połączenia"], + "{user0} and {user1} joined the call" : "{user0} i {user1} dołączyli do połączenia", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} i %n uczestnik dołączył do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia","{user0}, {user1} i %n uczestników dołączyło do połączenia"], + "You and {user0} left the call" : "Ty i {user0} opuściliście połączenie", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ty, {user0} i %n uczestnik opuścił połączenie","Ty, {user0} i %n uczestników opuściło połączenie","Ty, {user0} i %n uczestników opuściło połączenie","Ty, {user0} i %n uczestników opuściło połączenie"], + "{user0} and {user1} left the call" : "{user0} i {user1} opuścili połączenie", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} i %n uczestnik opuścił połączenie","{user0}, {user1} i %n uczestników opuściło połączenie","{user0}, {user1} i %n uczestników opuściło połączenie","{user0}, {user1} i %n uczestników opuściło połączenie"], + "You promoted {user0} and {user1} to moderators" : "Awansowałeś {user0} i {user1} na moderatorów", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestnika","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników","Awansowałeś użytkowników na moderatorów: {user0}, {user1} i %n uczestników"], + "An administrator promoted you and {user0} to moderators" : "Administrator awansował Ciebie i {user0} na moderatorów", + "{actor} promoted you and {user0} to moderators" : "{actor} awansował Ciebie i {user0} na moderatorów", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrator awansował Ciebie, {user0} i %n uczestnika na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów","Administrator awansował Ciebie, {user0} i %n uczestników na moderatorów"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} awansował Ciebie, {user0} i %n uczestnika na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów","{actor} awansował Ciebie, {user0} i %n uczestników na moderatorów"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrator awansował {user0} i {user1} na moderatorów", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} awansował {user0} i {user1} na moderatorów", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrator awansował {user0}, {user1} i %n uczestnika na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów","Administrator awansował {user0}, {user1} i %n uczestników na moderatorów"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} awansował {user0}, {user1} i %n uczestnika na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów","{actor} awansował {user0}, {user1} i %n uczestników na moderatorów"], + "You demoted {user0} and {user1} from moderators" : "Zdegradowałeś {user0} i {user1} z moderatorów", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Zdegradowałeś {user0}, {user1} i %n innego uczestnika z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów","Zdegradowałeś {user0}, {user1} i %n innych uczestników z moderatorów"], + "An administrator demoted you and {user0} from moderators" : "Administrator zdegradował Ciebie i użytkownika {user0} z moderatorów", + "{actor} demoted you and {user0} from moderators" : "{actor} zdegradował Ciebie i {user0} z moderatorów", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrator zdegradował Ciebie, {user0} i %n innego uczestnika z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","Administrator zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} zdegradował Ciebie, {user0} i %n innego uczestnika z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów","{actor} zdegradował Ciebie, {user0} i %n innych uczestników z moderatorów"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrator zdegradował użytkowników {user0} i {user1} z moderatorów", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} zdegradował użytkowników {user0} i {user1} z moderatorów", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrator zdegradował {user0}, {user1} i %n uczestnika z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów","Administrator zdegradował {user0}, {user1} i %n uczestników z moderatorów"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} zdegradował {user0}, {user1} i %n innego uczestnika z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów","{actor} zdegradował {user0}, {user1} i %n innych uczestników z moderatorów"], + "You:" : "Ty:", + "You: {lastMessage}" : "Ty: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Serwer został zaktualizowany", + "(edited by you)" : "(edytowane przez Ciebie)", + "(edited by a deleted user)" : "(edytowane przez usuniętego użytkownika)", + "(edited by {moderator})" : "(edytowane przez {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Próbujesz dołączyć do rozmowy, mając aktywną sesję w innym oknie lub urządzeniu. Obecnie ta sesja nie jest jeszcze obsługiwana przez Nextcloud Talk. Co chcesz zrobić?", + "Leave this page" : "Opuść stronę", + "Join here" : "Dołącz tutaj", + "Deck card has been posted to {conversation}" : "Tablica została opublikowana w {conversation}", + "An error occurred while posting deck card to conversation" : "Wystąpił błąd podczas dodawania karty do rozmowy", + "Post to a conversation" : "Opublikuj w rozmowie", + "Post to conversation" : "Opublikuj w rozmowie", + "The recording failed. Please contact your administrator." : "Nagrywanie nie powiodło się. Skontaktuj się z administratorem.", + "Location has been posted to {conversation}" : "Lokalizacja została wysłana do {conversation}", + "An error occurred while posting location to conversation" : "Wystąpił błąd podczas publikowania lokalizacji w rozmowie", + "Share to a conversation" : "Udostępnij w rozmowie", + "Share to conversation" : "Udostępnij w rozmowie", + "In conversation" : "W rozmowie", + "Search in conversation: {conversation}" : "Szukaj w rozmowie: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Twoje żądania są obecnie ograniczane ze względu na ochronę przed atakami typu brute force", + "Error while clearing conversation history" : "Błąd podczas czyszczenia historii rozmowy", + "Error occurred while allowing guests" : "Wystąpił błąd podczas zezwalania gościom", + "Error occurred while disallowing guests" : "Wystąpił błąd podczas blokowania gościom", + "Error occurred when restricting the conversation to moderator" : "Wystąpił błąd podczas ograniczania rozmowy do moderatora", + "Error occurred when opening the conversation to everyone" : "Wystąpił błąd podczas otwierania rozmowy dla wszystkich", + "Conversation password has been saved" : "Hasło do rozmowy zostało zapisane", + "Conversation password has been removed" : "Hasło do rozmowy zostało usunięte", + "Error occurred while saving conversation password" : "Wystąpił błąd podczas zapisywania hasła do rozmowy", + "Call recording is starting." : "Rozpoczęło się nagrywanie rozmowy.", + "Call recording stopped while starting." : "Nagrywanie rozmowy zostało zatrzymane podczas uruchamiania.", + "Call recording stopped. You will be notified once the recording is available." : "Nagrywanie rozmowy zostało zatrzymane. Otrzymasz powiadomienie, gdy nagranie będzie dostępne.", + "Conversation picture set" : "Zestaw obrazów rozmowy", + "Conversation picture deleted" : "Obraz rozmowy został usunięty", + "Could not delete the conversation picture" : "Nie można usunąć obrazu rozmowy", + "Could not remove the automatic expiration" : "Nie udało się usunąć automatycznego wygaśnięcia", + "Could not post message: {errorMessage}" : "Nie można wysłać wiadomości: {errorMessage}", + "Participant is banned successfully" : "Uczestnik został pomyślnie zbanowany", + "Error while banning the participant" : "Błąd podczas blokowania uczestnika", + "An error occurred while fetching the participants" : "Wystąpił błąd podczas pobierania uczestników", + "Could not send invitation to {actorId}" : "Nie można wysłać zaproszenia do {actorId}", + "Invitations sent" : "Wysłano zaproszenia", + "Error occurred when sending invitations" : "Wystąpił błąd podczas wysyłania zaproszeń", + "Failed to join the conversation." : "Nie udało się dołączyć do rozmowy.", + "An error occurred while creating breakout rooms" : "Podczas tworzenia pokoi podgrup wystąpił błąd", + "An error occurred while re-ordering the attendees" : "Podczas zmiany kolejności uczestników wystąpił błąd", + "An error occurred while deleting breakout rooms" : "Podczas usuwania pokoi podgrup wystąpił błąd", + "An error occurred while starting breakout rooms" : "Podczas uruchamiania pokoi podgrup wystąpił błąd", + "An error occurred while stopping breakout rooms" : "Podczas zatrzymywania pokoi podgrup wystąpił błąd", + "An error occurred while sending a message to the breakout rooms" : "Podczas wysyłania wiadomości do pokoi podgrup wystąpił błąd", + "An error occurred while requesting assistance" : "Wystąpił błąd podczas prośby o pomoc", + "An error occurred while resetting the request for assistance" : "Wystąpił błąd podczas resetowania prośby o pomoc", + "An error occurred while joining breakout room" : "Podczas dołączania do podgrupy wystąpił błąd", + "Failed to rename the thread" : "Nieudana próba zmiany nazwy wątku", + "Error fetching upcoming events" : "Błąd podczas pobierania nadchodzących wydarzeń", + "Error fetching upcoming reminders" : "Błąd podczas pobierania nadchodzących przypomnień", + "An error occurred while accepting an invitation" : "Wystąpił błąd podczas akceptowania zaproszenia", + "An error occurred while rejecting an invitation" : "Wystąpił błąd podczas odrzucania zaproszenia", + "{guest} (guest)" : "{guest} (gość)", + "Poll draft has been saved" : "Wersja robocza ankiety została zapisana", + "An error occurred while saving the draft" : "Wystąpił błąd podczas zapisywania wersji roboczej", + "An error occurred while submitting your vote" : "Wystąpił błąd podczas wysyłania głosu", + "An error occurred while ending the poll" : "Wystąpił błąd podczas zamykania sondy", + "An error occurred while deleting the poll draft" : "Wystąpił błąd podczas usuwania wersji roboczej ankiety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Sonda \"{name}\" została utworzona przez {user}. Kliknij, aby zagłosować", + "Failed to add reaction" : "Nie udało się dodać reakcji", + "Failed to remove reaction" : "Nie udało się usunąć reakcji", + "The server is in maintenance mode." : "Serwer jest w trybie konserwacji", + "Federated server was updated." : "Zaktualizowano serwer federacyjny", + "Error while uploading file \"{fileName}\"" : "Błąd podczas wysyłania pliku \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Za mało wolnego miejsca, aby wysłać plik \"{fileName}\"", + "You are not allowed to share files" : "Nie możesz udostępniać plików", + "Error while sharing file" : "Błąd podczas udostępniania pliku", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Używana przeglądarka nie obsługuje w pełni Nextcloud Talk. Użyj najnowszej wersji Mozilla Firefox, Microsoft Edge, Google Chrome, Opera lub Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Za %n godzinę","Za %n godziny","Za %n godzin","Za %n godzin"], + "_%n minute _::_%n minutes_" : ["%n minutę","%n minuty","%n minut","%n minut"], + "In {hours} and {minutes}" : "Za {hours} i {minutes}", + "_In %n minute_::_In %n minutes_" : ["Za %n minutę","Za %n minuty","Za %n minut","Za %n minut"], + "Later today – {timeLocale}" : "Później dzisiaj – {timeLocale}", + "Set time for later today" : "Ustaw czas na później dziś", + "Tomorrow – {timeLocale}" : "Jutro – {timeLocale}", + "Set time for tomorrow" : "Ustaw czas na jutro", + "This weekend – {timeLocale}" : "W ten weekend – {timeLocale}", + "Set time for this weekend" : "Ustaw czas na ten weekend", + "Next week – {timeLocale}" : "Następny tydzień – {timeLocale}", + "Set time for next week" : "Ustaw czas na przyszły tydzień", + "Message link copied to clipboard" : "Link wiadomości został skopiowany do schowka", + "Conversation link copied to clipboard" : "Link do rozmowy skopiowany do schowka", + "The link could not be copied" : "Nie można skopiować linku", + "Error while parsing a PROPFIND error" : "Wystąpił błąd podczas analizowania błędu PROPFIND", + "Sending signaling message has failed" : "Wysłanie wiadomości sygnalizacyjnej nie powiodło się", + "Lost connection to signaling server. Trying to reconnect." : "Utracono połączenie z serwerem sygnalizacyjnym. Ponowna próba połączenia się.", + "Lost connection to signaling server." : "Utracono połączenie z serwerem sygnalizacyjnym.", + "Connecting is taking longer than expected …" : "Łączenie trwa dłużej niż oczekiwano…", + "Failed to connect. Retrying …" : "Nie udało się połączyć. Ponawianie…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nie udało się połączyć. Serwer sygnalizacyjny może być nieprawidłowo skonfigurowany", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Skonfigurowany serwer sygnalizacyjny wymaga aktualizacji, aby był kompatybilny z tą wersją Talka. Skontaktuj się z administracją.", + "Please restart the app." : "Uruchom ponownie aplikację.", + "Please reload the page." : "Przeładuj stronę.", + "Please try to restart the app." : "Spróbuj ponownie uruchomić aplikację.", + "Please try to reload the page." : "Spróbuj ponownie wczytać stronę.", + "Do not disturb" : "Nie przeszkadzać", + "Away" : "Bezczynny", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Głośnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Wygląda na to, że jesteś wyciszony podczas rozmowy. Wyłącz wyciszenie, aby inni mogli Ciebie usłyszeć.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nie można nawiązać połączenia z żadnym uczestnikiem. Serwer TURN może być potrzebny w Twoim przypadku. Poproś administratora o skonfigurowanie go zgodnie z {linkstart}tą dokumentacją{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Trwa to dłużej niż oczekiwano. Czy uprawnienia do mediów zostały już przyznane (lub odrzucone)? Jeśli tak, to uruchom ponownie przeglądarkę, ponieważ dźwięk i obraz wideo nie działają poprawnie", + "Access to microphone & camera is only possible with HTTPS" : "Dostęp do mikrofonu i kamery jest możliwy tylko przy użyciu protokołu HTTPS", + "Please move your setup to HTTPS" : "Przenieś konfigurację do HTTPS", + "Access to microphone & camera was denied" : "Odmówiono dostępu do mikrofonu i kamery", + "WebRTC is not supported in your browser" : "WebRTC nie jest obsługiwany w Twojej przeglądarce", + "Please use a different browser like Firefox or Chrome" : "Użyj innej przeglądarki, takiej jak Firefox lub Chrome", + "Error while accessing microphone & camera" : "Wystąpił błąd podczas dostępu do mikrofonu i kamery", + "%s Talk on your mobile devices" : "%s Talk na urządzeniach mobilnych", + "Join conversations at any time, anywhere, on any device." : "Dołącz do rozmów w dowolnym momencie, w dowolnym miejscu i na dowolnym urządzeniu.", + "Android app" : "Aplikacja Android", + "iOS app" : "Aplikacja na iOS", + "__language_name__" : "Polski", + "Webhook Demo" : "Demo Webhook", + "Call summary (%s)" : "Podsumowanie połączenia (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot podsumowujący rozmowę publikuje po połączeniu wiadomość zawierającą listę wszystkich uczestników i opis zadań", + "Tasks" : "Zadania", + "Notes" : "Notatki", + "Reports" : "Raporty", + "Decisions" : "Decyzje", + "Agenda" : "Porządek obrad", + "Call summary" : "Podsumowanie rozmowy", + "Call summary - {title}" : "Podsumowanie rozmowy - {title}", + "Talk conversation for event" : "Rozpocznij rozmowę dotyczącą wydarzenia", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push jest zainstalowany, a to znacząco zwiększa wydajność w klienckich aplikacjach desktopowych. ", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nie jest zainstalowane, to może prowadzić do problemów z wydjanością i prawidłowym działaniem aplikacji klienckich. ", + "Next meeting" : "Następne spotkanie", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Zaplanuj spotkanie z kalendarza. Rozmowa w Talk musi być ustawiona jako lokalizacja, aby pojawiła się tutaj", + "Join conversations from remote Nextcloud servers" : "Dołącz do rozmów ze zdalnych serwerów Nextcloud", + "Your default media state has been saved" : "Twój domyślny stan multimediów został zapisany", + "Set reminder for later today" : "Ustaw przypomnienie na dzisiaj na późniejszy czas", + "Set reminder for tomorrow" : "Ustaw przypomnienie na jutro", + "Set reminder for this weekend" : "Ustaw przypomnienie na ten weekend", + "Set reminder for next week" : "Ustaw przypomnienie na przyszły tydzień", + "Generate summary" : "Wygeneruj podsumowanie", + "Open poll • You voted already" : "Otwórz sondę • Już głosowałeś", + "Open poll • Click to vote" : "Otwórz sondę • Kliknij, aby głosować", + "Poll • Ended" : "Sonda • Zakończona", + "Talk recording from {time} ({conversation})" : "Nagranie rozmowy z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Wyniki sondy • %n głos","Wyniki sondy • %n głosy","Wyniki sondy • %n głosów","Wyniki sondy • %n głosów"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otwórz sondę • %n głos","Otwórz sondę • %n głosy","Otwórz sondę • %n głosów","Otwórz sondę • %n głosów"], + "Submit vote" : "Wyślij głos", + "Your privacy setting has been saved" : "Twoje ustawienia prywatności zostały zapisane", + "Your personal setting has been saved" : "Twoje ustawienia osobiste zostały zapisane", + "Failed to save sounds setting" : "Nie udało się zapisać ustawienia dźwięków", + "Sounds setting saved" : "Zapisano ustawienia dźwięków", + "Always shown if recording consent is required" : "Zawsze wyświetlane, jeśli wymagana jest zgoda na nagrywanie", + "Nextcloud Talk was updated, you cannot start or join a call." : "Usługa Nextcloud Talk została zaktualizowana. Nie można rozpocząć ani dołączyć do rozmowy.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Dołączyłeś do rozmowy w innym oknie lub urządzeniu. Ta sesja została zamknięta, ponieważ nie jest obecnie obsługiwana przez Nextcloud Talk.", + "Nextcloud Talk was updated." : "Zaktualizowano Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud jest w trybie konserwacji.", + "Nextcloud Talk Federation was updated." : "Zaktualizowano Nextcloud Talk Federation.", + "Enable live translation" : "Włącz tłumaczenie na żywo", + "I picked list style" : "Wybrałem widok listy", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Korzystasz z Talk w widoku listy czy z dymkami wiadomości?" +},"pluralForm" :"nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/pt_BR.js b/l10n/pt_BR.js new file mode 100644 index 0000000..7a0feba --- /dev/null +++ b/l10n/pt_BR.js @@ -0,0 +1,2260 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "uma conversa", + "(Duration %s)" : "(Duração %s)", + "You attended a call with {user1}" : "Você atendeu uma chamada com {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados","%n convidados"], + "You attended a call with {user1} and {user2}" : "Você atendeu uma chamada com {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Você atendeu uma chamada com {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Você atendeu uma chamada com {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Você atendeu uma chamada com {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n outro","%n outros","%n outros"], + "{actor} invited you to {call}" : "{actor} convidou você para {call}", + "You were invited to a conversation or had a call" : "Você foi convidado para uma conversa ou recebeu uma chamada", + "Other activities" : "Outras atividades", + "Talk" : "Talk", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bem-vindo ao Nextcloud Talk!\nNesta conversa você será informado sobre as novidades disponíveis no Nextcloud Talk.", + "## New in Talk %s" : "## Novo no Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora o Microsoft Edge e o Safari podem ser usados para participar de chamadas de áudio e vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- As conversas individuais agora são persistentes e não podem mais ser transformadas em conversas em grupo por acidente. Além disso, quando um dos participantes sai da conversa, a conversa não é mais excluída automaticamente. Somente se ambos os participantes saírem, a conversa será excluída do servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora você pode notificar todos os participantes postando \"@all\" no chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Com a tecla \"seta para cima\" você pode repostar sua última mensagem", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Agora o Talk pode ter comandos, envie \"/help\" como uma mensagem de chat para ver se o seu administrador configurou algum", + "- With projects you can create quick links between conversations, files and other items" : "- Com projetos você pode criar links rápidos entre conversas, arquivos e outros itens", + "- You can now mention guests in the chat" : "- Agora você pode mencionar convidados no chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- As conversas agora podem ter uma sala de espera. Isso permitirá que os moderadores já entrem no bate-papo e chamada para preparar a reunião, enquanto os usuários e convidados terão que esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Agora você pode responder diretamente a mensagens, dando aos outros usuários mais contexto sobre o que é sua mensagem", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A pesquisa de conversas e participantes agora também filtrará as conversas existentes, facilitando a localização de conversas anteriores.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Agora você pode adicionar grupos de usuários personalizados a conversas quando o aplicativo de círculos estiver instalado", + "- Check out the new grid and call view" : "- Confira a nova grade e visualização de chamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Agora você pode enviar e arrastar arquivos diretamente do seu dispositivo para o chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Os arquivos compartilhados agora são abertos diretamente dentro da visualização de bate-papo com aplicativos visualizadores", + "- You can now search for chats and messages in the unified search in the top bar" : "- Você pode buscar conversas e mensagens usando a pesquisa unificada na barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Anime suas mensagens com emojis do seletor de emojis", + "- You can now change your camera and microphone while being in a call" : "- Você pode mudar a câmera e o microfone enquanto está em uma chamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dê às suas conversas algum contexto com uma descrição e abra-as para que os usuários conectados possam encontrá-las e juntar-se a elas ", + "- See a read status and send failed messages again" : "- Ver um status de leitura e enviar novamente as mensagens com falha", + "- Raise your hand in a call with the R key" : "- Levante a mão com a tecla R durante uma chamada", + "- Join the same conversation and call from multiple devices" : "- Entre na mesma conversa e ligue de vários dispositivos ", + "- Send voice messages, share your location or contact details" : "- Envie mensagens de voz, compartilhe sua localização ou detalhes de contato ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Adicione grupos a uma conversa e novos membros do grupo serão automaticamente adicionados como participantes ", + "- A preview of your audio and video is shown before joining a call" : "- Uma pré-visualização de seu áudio e vídeo é mostrada antes de entrar em uma chamada", + "- You can now blur your background in the newly designed call view" : "- Agora você pode desfocar seu plano de fundo na visualização de chamada recém-redesenhada", + "- Moderators can now assign general and individual permissions to participants" : "- Os moderadores agora podem atribuir permissões gerais e individuais aos participantes", + "- You can now react to chat messages" : "- Agora você pode reagir às mensagens do chat", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na barra lateral, agora você pode encontrar uma visão geral dos últimos itens compartilhados", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use uma enquete para coletar as opiniões de outras pessoas ou estabelecer uma data", + "- Configure an expiration time for chat messages" : "- Configure um tempo de expiração para mensagens de bate-papo", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie chamadas sem notificar outras pessoas em grandes conversas. Você pode enviar notificações de chamadas individuais assim que a chamada for iniciada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envie mensagens de bate-papo sem notificar os destinatários caso não seja urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis agora podem ser preenchidos automaticamente digitando um \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Vincule vários itens usando o novo seletor inteligente digitando um \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Os moderadores agora podem criar salas temáticas (requer o back-end de alto desempenho)", + "- Calls can now be recorded (requires the High-performance backend)" : "- As chamadas agora podem ser gravadas (requer o back-end de alto desempenho)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversas agora podem ter um avatar ou um emoji como ícone", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Planos de fundo virtuais agora estão disponível além do plano de fundo desfocado nas chamadas de vídeo", + "- Reactions are now available during calls" : "- Reações agora estão disponíveis durante chamadas", + "- Typing indicators show which users are currently typing a message" : "- Os indicadores de digitação mostram quais usuários estão digitando uma mensagem no momento", + "- Groups can now be mentioned in chats" : "- Grupos agora podem ser mencionados em bate-papos", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- As gravações de conferências são transcritas automaticamente se um aplicativo que faz transcrições estiver disponível", + "- Chat messages can be translated if a translation provider app is registered" : "- Mensagens de chat podem ser traduzidas se um provedor de traduções estiver disponível", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** agora pode ser usado em mensagens de _bate-papo_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks agora estão disponíveis para implementar bots. Consulte a documentação para obter mais informações https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Defina um lembrete em uma mensagem de bate-papo para ser notificado novamente mais tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use a conversa **Nota para si mesmo** para fazer anotações e compartilhar informações entre seus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- As legendas permitem enviar uma mensagem com um arquivo ao mesmo tempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- O vídeo do orador agora está visível ao compartilhar a tela e as reações da chamada são animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- As mensagens agora podem ser editadas por autores e moderadores logados por 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Rascunhos de mensagens não enviadas agora são salvos em seu navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- O bate-papo por texto agora pode ser feito de forma federada com outros servidores Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Os moderadores agora podem banir contas e convidados para impedir que eles voltem a participar de uma conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- As próximas chamadas de eventos de calendário vinculados e os substitutos de ausência do escritório agora são exibidos nas conversas", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- As chamadas agora podem ser feitas de forma federada com outros servidores Talk (requer o back-end de alto desempenho)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Apresentando o cliente de desktop Nextcloud Talk para Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resuma gravações de chamadas e mensagens não lidas em bate-papos com o Assistente Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reuniões aprimoradas com reconhecimento de convidados por meio de seus endereços de e-mail, importação de listas de participantes, rascunhos para enquetes e download de listas de participantes de chamadas", + "- Archive conversations to stay focused" : "- Arquive conversas para manter o foco", + "- Schedule a meeting into your calendar from within a conversation" : "- Agende uma reunião em seu calendário a partir de uma conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Pesquise mensagens da conversa atual diretamente na barra lateral direita", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Veja mais conversas em uma primeira olhada com a nova lista compacta (ative nas configurações do Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- As conversas de reunião agora sincronizam o título e a descrição do calendário e ficam ocultas com um filtro de pesquisa até que estejam próximas do início", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marque as conversas como confidenciais nas configurações de notificação para ocultar o conteúdo da mensagem da lista de conversas e das notificações", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para receber notificações push durante o \"Não perturbe\", marque as conversas como importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Adicione outros participantes a uma chamada individual para criar uma nova chamada em grupo em tempo real", + "- Use threads to keep your chat and discussions organized" : "- Use fios para manter suas conversas e discussões organizadas", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Transcrições em tempo real agora disponíveis durante a chamada (requer o ExApp de transcrição em tempo real e o back-end de alto desempenho)", + "- Moderators can now pin messages so they are kept at the top" : "- Os moderadores agora podem fixar mensagens para que elas permaneçam no topo", + "- Schedule a message to send it at a later time" : "- Agende uma mensagem para enviá-la mais tarde", + "_All %n participant_::_All %n participants_" : ["Todos os %n participantes","Todos os %n participantes","Todos os %n participantes"], + "Talk updates ✅" : "Atualizações do Talk ✅", + "Reaction deleted by author" : "Reação excluída pelo autor", + "{actor} created the conversation" : "{actor} criou a conversa", + "You created the conversation" : "Você criou a conversa", + "System created the conversation" : "O sistema criou a conversa", + "An administrator created the conversation" : "Um administrador criou a conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomeou a conversa de \"%1$s\" para \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Você renomeou a conversa de \"%1$s\" para \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Um administrador renomeou a conversa \"%1$s\" para \"%2$s\"", + "{actor} set the description" : "{actor} definiu a descrição", + "You set the description" : "Você definiu a descrição", + "An administrator set the description" : "Um administrador definiu a descrição", + "{actor} removed the description" : "{actor} removeu a descrição", + "You removed the description" : "Você removeu a descrição", + "An administrator removed the description" : "Um administrador removeu a descrição", + "You started a silent call" : "Você iniciou uma chamada silenciosa", + "Outgoing silent call" : "Chamada silenciosa de saída", + "{actor} started a silent call" : "{actor} iniciou uma chamada silenciosa", + "Incoming silent call" : "Chamada silenciosa recebida", + "You started a call" : "Você iniciou uma chamada", + "Outgoing call" : "Chamada de saída", + "{actor} started a call" : "{actor} iniciou uma chamada", + "Incoming call" : "Chamada recebida", + "{actor} joined the call" : "{actor} entrou na chamada", + "You joined the call" : "Você entrou na chamada", + "{actor} left the call" : "{actor} saiu da chamada", + "You left the call" : "Você saiu da chamada", + "{actor} unlocked the conversation" : "{actor} destrancou a conversa", + "You unlocked the conversation" : "Você destrancou a conversa", + "An administrator unlocked the conversation" : "Um administrador destrancou a conversa", + "{actor} locked the conversation" : "{actor} trancou a conversa", + "You locked the conversation" : "Você trancou a conversa", + "An administrator locked the conversation" : "Um administrador trancou a conversa", + "{actor} limited the conversation to the current participants" : "{actor} limitou a conversa aos atuais participantes", + "You limited the conversation to the current participants" : "Você limitou a conversa aos atuais participantes", + "An administrator limited the conversation to the current participants" : "Um administrador limitou a conversa aos atuais participantes", + "{actor} opened the conversation to registered users" : "{actor} abriu a conversa aos usuários registrados", + "You opened the conversation to registered users" : "Você abriu a conversa aos usuários registrados", + "An administrator opened the conversation to registered users" : "Um administrador abriu a conversa aos usuários registrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "You opened the conversation to registered users and users created with the Guests app" : "Você abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Um administrador abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "The conversation is now open to everyone" : "A conversa está aberta a todos agora", + "{actor} opened the conversation to everyone" : "{actor} abriu a conversa a todos", + "You opened the conversation to everyone" : "Você abriu a conversa para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringiu a conversa aos moderadores", + "You restricted the conversation to moderators" : "Você restringiu a conversa aos moderadores", + "{actor} started breakout rooms" : "{actor} iniciou salas temáticas", + "You started breakout rooms" : "Você iniciou salas temáticas", + "{actor} stopped breakout rooms" : "{actor} interrompeu as salas temáticas", + "You stopped breakout rooms" : "Você interrompeu as salas temáticas", + "{actor} allowed guests" : "{actor} permitiu convidados", + "You allowed guests" : "Você permitiu convidados", + "An administrator allowed guests" : "Um administrador autorizou convidados", + "{actor} disallowed guests" : "{actor} bloqueou convidados", + "You disallowed guests" : "Você bloqueou convidados", + "An administrator disallowed guests" : "Um administrador desautorizou convidados", + "{actor} set a password" : "{actor} definiu uma senha", + "You set a password" : "Você definiu uma senha", + "An administrator set a password" : "Um administrador definiu uma senha", + "{actor} removed the password" : "{actor} removeu a senha", + "You removed the password" : "Você removeu a senha", + "An administrator removed the password" : "Um administrador removeu a senha", + "{actor} added {user}" : "{actor} adicionou {user}", + "You joined the conversation" : "Você juntou-se à conversa", + "{actor} joined the conversation" : "{actor} juntou-se à conversa", + "You added {user}" : "Você adicionou {user}", + "{actor} added you" : "{actor} adicionou você", + "An administrator added you" : "Um administrador adicionou você", + "An administrator added {user}" : "Um administrador adicionou {user}", + "You left the conversation" : "Você saiu da conversa", + "{actor} left the conversation" : "{actor} saiu da conversa", + "{actor} removed {user}" : "{actor} removeu {user}", + "You removed {user}" : "Você removeu {user}", + "{actor} removed you" : "{actor} removeu você", + "An administrator removed you" : "Um administrador excluiu você", + "An administrator removed {user}" : "Um administrador removeu {user}", + "{actor} invited {federated_user}" : "{actor} convidou {federated_user}", + "You invited {federated_user}" : "Você convidou {federated_user}", + "You accepted the invitation" : "Você aceitou o convite", + "{actor} invited you" : "{actor} convidou você", + "An administrator invited you" : "Um administrador convidou você", + "An administrator invited {federated_user}" : "Um administrador convidou {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceitou o convite", + "{actor} removed {federated_user}" : "{actor} removeu {federated_user}", + "You removed {federated_user}" : "Você removeu {federated_user}", + "You declined the invitation" : "Você recusou o convite", + "An administrator removed {federated_user}" : "Um administrador removeu {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} recusou o convite", + "{actor} added group {group}" : "{actor} adiciniou o grupo {group}", + "You added group {group}" : "Você adicionou o grupo {group}", + "An administrator added group {group}" : "Um administrador adicionou o grupo {group}", + "{actor} removed group {group}" : "{actor} removeu o grupo {group}", + "You removed group {group}" : "Você removeu o grupo {group}", + "An administrator removed group {group}" : "Um administrador removeu o grupo {group}", + "{actor} added team {circle}" : "{actor} adicionou a equipe {circle}", + "You added team {circle}" : "Você adicionou a equipe {circle}", + "An administrator added team {circle}" : "Um administrador adicionou a equipe {circle}", + "{actor} removed team {circle}" : "{actor} removeu a equipe {circle}", + "You removed team {circle}" : "Você removeu a equipe {circle}", + "An administrator removed team {circle}" : "Um administrador removeu a equipe {circle}", + "{actor} added {phone}" : "{actor} adicionou {phone}", + "You added {phone}" : "Você adicionou {phone}", + "An administrator added {phone}" : "Um administrador adicionou {phone}", + "{actor} removed {phone}" : "{actor} removeu {phone}", + "You removed {phone}" : "Você removeu {phone}", + "An administrator removed {phone}" : "Um administrador removeu {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoveu {user} a moderador", + "You promoted {user} to moderator" : "Você promoveu {user} a moderador", + "{actor} promoted you to moderator" : "{actor} promoveu você a moderador", + "An administrator promoted you to moderator" : "Um administrador promoveu você a moderador", + "An administrator promoted {user} to moderator" : "Um administrador promoveu {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} removeu {user} da moderação", + "You demoted {user} from moderator" : "Você removeu {user} da moderação", + "{actor} demoted you from moderator" : "{actor} removeu você da moderação", + "An administrator demoted you from moderator" : "Um administrador removeu você da moderação", + "An administrator demoted {user} from moderator" : "Um administrador removeu {user} da moderação", + "{actor} shared a file which is no longer available" : "{actor} compartilhou um arquivo não mais disponível", + "You shared a file which is no longer available" : "Você compartilhou um arquivo não mais disponível", + "File shares are currently not supported in federated conversations" : "Atualmente, os compartilhamentos de arquivos não são suportados em conversas federadas", + "The shared location is malformed" : "O local compartilhado está malformado", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurou Matterbridge para sincronizar esta conversa com outros bate-papos", + "You set up Matterbridge to synchronize this conversation with other chats" : "Você configurou Matterbridge para sincronizar esta conversa com outros bate-papos", + "{actor} created thread {title}" : "{actor} criou o fio {title}", + "You created thread {title}" : "Você criou o fio {title}", + "{actor} renamed thread {title}" : "{actor} renomeou o fio {title}", + "You renamed thread {title}" : "Você renomeou o fio {title}", + "{actor} updated the Matterbridge configuration" : "{actor} atualizou a configuração Matterbridge", + "You updated the Matterbridge configuration" : "Você atualizou a configuração Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} removeu a configuração Matterbridge", + "You removed the Matterbridge configuration" : "Você removeu a configuração Matterbridge", + "{actor} started Matterbridge" : "{actor} iniciou Matterbridge", + "You started Matterbridge" : "Você iniciou Matterbridge", + "{actor} stopped Matterbridge" : "{actor} parou Matterbridge", + "You stopped Matterbridge" : "Você parou Matterbridge.", + "{actor} deleted a message" : "{actor} excluiu uma mensagem", + "You deleted a message" : "Você excluiu uma mensagem", + "{actor} edited a message" : "{actor} editou uma mensagem", + "You edited a message" : "Você editou uma mensagem", + "{actor} pinned a message" : "{actor} fixou uma mensagem", + "You pinned a message" : "Você fixou uma mensagem", + "{actor} unpinned a message" : "{actor} desfixou uma mensagem", + "Message was automatically unpinned" : "A mensagem foi desfixada automaticamente", + "You unpinned a message" : "Você desfixou uma mensagem", + "{actor} deleted a reaction" : "{actor} excluiu uma reação", + "You deleted a reaction" : "Você excluiu uma reação", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Você definiu a expiração de mensagens para %n semana","Você definiu a expiração de mensagens para %n semanas","Você definiu a expiração de mensagens para %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Você definiu a expiração de mensagens para %n dia","Você definiu a expiração de mensagens para %n dias","Você definiu a expiração de mensagens para %n dias"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Você definiu a expiração de mensagens para %n hora","Você definiu a expiração de mensagens para %n horas","Você definiu a expiração de mensagens para %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Você definiu a expiração de mensagens para %n minuto","Você definiu a expiração de mensagens para %n minutos","Você definiu a expiração de mensagens para %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} definiu a expiração de mensagens para %n semana","{actor} definiu a expiração de mensagens para %n semanas","{actor} definiu a expiração de mensagens para %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} definiu a expiração de mensagens para %n dia","{actor} definiu a expiração de mensagens para %n dias","{actor} definiu a expiração de mensagens para %n dias"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} definiu a expiração de mensagens para %n hora","{actor} definiu a expiração de mensagens para %n horas","{actor} definiu a expiração de mensagens para %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} definiu a expiração de mensagens para %n minuto","{actor} definiu a expiração de mensagens para %n minutos","{actor} definiu a expiração de mensagens para %n minutos"], + "{actor} disabled message expiration" : "{actor} desativou a expiração de mensagens", + "You disabled message expiration" : "Você desativou a expiração de mensagens", + "{actor} cleared the history of the conversation" : "{actor} limpou o histórico da conversa ", + "You cleared the history of the conversation" : "Você limpou o histórico da conversa ", + "{actor} set the conversation picture" : "{actor} definiu a imagem da conversa", + "You set the conversation picture" : "Você definiu a imagem da conversa", + "{actor} removed the conversation picture" : "{actor} removeu a imagem da conversa", + "You removed the conversation picture" : "Você removeu a imagem da conversa", + "{actor} ended the poll {poll}" : "{actor} encerrou a enquete {poll}", + "You ended the poll {poll}" : "Você encerrou a enquete {poll}", + "{actor} started the video recording" : "{actor} iniciou a gravação de vídeo", + "You started the video recording" : "Você iniciou a gravação de vídeo", + "{actor} stopped the video recording" : "{actor} parou a gravação de vídeo", + "You stopped the video recording" : "Você parou a gravação de vídeo", + "{actor} started the audio recording" : "{actor} iniciou a gravação de áudio", + "You started the audio recording" : "Você iniciou a gravação de áudio", + "{actor} stopped the audio recording" : "{actor} parou a gravação de áudio", + "You stopped the audio recording" : "Você parou a gravação de áudio", + "The recording failed" : "A gravação falhou", + "Someone voted on the poll {poll}" : "Alguém votou na enquete {poll}", + "Message deleted by author" : "Mensagem excluída pelo autor", + "Message deleted by {actor}" : "Mensagem excluída por {actor}", + "Message deleted by you" : "Mensagem excluída por você", + "Deleted user" : "Usuário excluído", + "Unknown number" : "Número desconhecido", + "Administration" : "Administração", + "System" : "Sistema", + "%s (guest)" : "%s (convidado)", + "Missed call" : "Chamada perdida", + "Unanswered call" : "Chamada não atendida", + "Call ended (Duration {duration})" : "Chamada encerrada (Duração {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada foi encerrada, pois atingiu a duração máxima (Duração {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} encerrou a chamada (Duração {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["A chamada com %n convidado foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})","A chamada com %n convidados foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})","A chamada com %n convidados foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Chamada com %n convidado encerrada (Duração {duration})","Chamada com %n convidados encerrada (Duração {duration})","Chamada com %n convidados encerrada (Duração {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} encerrou a chamada com %n convidado (Duração {duration})","{actor} encerrou a chamada com %n convidados (Duração {duration})","{actor} encerrou a chamada com %n convidados (Duração {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1} ended (Duration {duration})" : "Chamada com {user1} encerrada (Duração {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} encerrou a chamada com {user1} (Duração {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1} e {user2} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Chamada com {user1} e {user2} encerrada (Duração {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} encerrou a chamada com {user1} e {user2} (Duração {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2} e {user3} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Chamada com {user1}, {user2} e {user3} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2} e {user3} (Duração {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2}, {user3} e {user4} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Chamada com {user1}, {user2}, {user3} e {user4} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2}, {user3} e {user4} (Duração {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2}, {user3}, {user4} e {user5} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Chamada com {user1}, {user2}, {user3}, {user4} e {user5} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2}, {user3}, {user4} e {user5} (Duração {duration})", + "Message of {user} in {conversation}" : "Mensagem de {user} em {conversation}", + "Message of {user}" : "Mensagem de {user}", + "Message of a deleted user in {conversation}" : "Mensagem de um usuário excluído em {conversation}", + "Talk conversations" : "Conversas do Talk", + "Talk to %s" : "Falar com %s", + "An error occurred. Please contact your administrator." : "Um erro ocorreu. Entre em contato com seu administrador.", + "App disabled" : "Aplicativo desativado", + "Conversation subfolders are disabled" : "As subpastas de conversas estão desativadas", + "Storage quota exceeded" : "Cota de armazenamento excedida", + "Could not prepare conversation folder" : "Não foi possível preparar a pasta de conversas", + "File not found" : "Arquivo não encontrado", + "Path must point to a file" : "O caminho deve apontar para um arquivo", + "File is not inside the conversation draft folder for this room" : "O arquivo não está na pasta de rascunhos de conversas desta sala", + "File is not shared, or shared but not with the user" : "O arquivo não é compartilhado com o usuário ou nem é compartilhado", + "No account available to delete." : "Não há contas a excluir.", + "Poll" : "Enquete", + "Password needs to be set" : "É necessário definir uma senha", + "Uploading the file failed" : "Falha no upload do arquivo", + "No image file provided" : "Nenhum arquivo de imagem fornecido", + "File is too big" : "O arquivo é muito grande", + "Invalid file provided" : "Arquivo fornecido inválido", + "Invalid image" : "Imagem inválida", + "Unknown filetype" : "Tipo de arquivo desconhecido", + "Talk mentions" : "Menções na conversa", + "More conversations" : "Mais conversas", + "Say hi to your friends and colleagues!" : "Diga oi para seus amigos e colegas!", + "No unread mentions" : "Não há citações não lidas", + "Call in progress" : "Chamada em andamento", + "You were mentioned" : "Você foi citado", + "Write to conversation" : "Escreva na conversa", + "Writes event information into a conversation of your choice" : "Grava informações do evento em uma conversa de sua escolha", + "Missing email field in header line" : "Campo de e-mail ausente na linha de cabeçalho", + "Following lines are invalid: %s" : "As seguintes linhas estão inválidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s convidou você para a conversa \"%2$s\".", + "You were invited to conversation \"%s\"." : "Você foi convidado para a conversa \"%s\".", + "Conversation invitation" : "Convite para conversa", + "Scheduled time" : "Horário agendado", + "Description" : "Descrição", + "You can also dial-in via phone with the following details" : "Você também pode discar via telefone com os seguintes detalhes", + "Dial-in information" : "Informação de discagem", + "Meeting ID" : "ID da reunião", + "Your PIN" : "Seu PIN", + "Click the button below to join the lobby now." : "Clique no botão abaixo para entrar na sala de espera agora.", + "Click the link below to join the lobby now." : "Clique no link abaixo para entrar na sala de espera agora.", + "Join lobby for \"%s\"" : "Entrar na sala de espera para \"%s\"", + "Click the button below to join the conversation now." : "Clique no botão abaixo para entrar na conversa agora.", + "Click the link below to join the conversation now." : "Clique no link abaixo para entrar na conversa agora.", + "Join \"%s\"" : "Entrar na \"%s\"", + "Meeting" : "Reunião", + "Password request: %s" : "Pedido de senha: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Excluir usuário (%s)", + "Failed to upload call recording" : "Falha ao fazer upload da gravação da chamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "O servidor de gravação falhou ao fazer upload da gravação da chamada {call}. Por favor, entre em contato com a administração.", + "Share to chat" : "Compartilhar no bate-papo", + "Dismiss notification" : "Dispensar notificação", + "Call recording now available" : "Gravação da chamada agora está disponível", + "The recording for the call in {call} was uploaded to {file}." : "A gravação da chamada em {call} foi carregada em {file}.", + "Transcript now available" : "Transcrição disponível", + "The transcript for the call in {call} was uploaded to {file}." : "A transcrição para a chamada em {call} foi carregada em {file}.", + "Failed to transcript call recording" : "Falha ao transcrever gravação da chamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor falhou ao transcrever a gravação em {file} para a chamada em {call}. Por favor, entre em contato com a administração.", + "Call summary now available" : "Resumo da chamada agora está disponível", + "The summary for the call in {call} was uploaded to {file}." : "O resumo para a chamada em {call} foi carregado para {file}.", + "Failed to summarize call recording" : "Falha ao resumir a gravação da chamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor falhou ao resumir a gravação em {file} para a chamada em {call}. Por favor, entre em contato com a administração.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} convidou você para entrar na sala {roomName} em {remoteServer}", + "Accept" : "Aceitar", + "Decline" : "Recusar", + "{user1} invited you to a federated conversation" : "{user1} convidou você para uma conversa federada", + "Someone reacted" : "Alguém reagiu", + "New message" : "Nova mensagem", + "Reminder" : "Lembrete", + "Someone mentioned you" : "Alguém mencionou você", + "Notification" : "Notificação", + "Someone reacted in a private conversation" : "Alguém reagiu em uma conversa privada", + "You received a message in a private conversation" : "Você recebeu uma mensagem em uma conversa privada", + "Reminder in a private conversation" : "Lembrete em uma conversa privada", + "Someone mentioned you in a private conversation" : "Alguém mencionou você em uma conversa privada", + "Notification in a private conversation" : "Notificação em uma conversa privada", + "Reminder: You in {call}" : "Lembrete: Você em {call}", + "Reminder: {user} in {call}" : "Lembrete: {user} em {call}", + "Reminder: Deleted user in {call}" : "Lembrete: Usuário excluído em {call}", + "Reminder: {guest} (guest) in {call}" : "Lembrete: {guest} (convidado) em {call}", + "Reminder: Guest in {call}" : "Lembrete: Convidado em {call}", + "{user} reacted with {reaction}" : "{user} reagiu com {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagiu com {reaction} em {call}", + "Deleted user reacted with {reaction} in {call}" : "Usuário excluído reagiu com {reaction} em {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidado) reagiu com {reaction} em {call}", + "Guest reacted with {reaction} in {call}" : "Convidado reagiu com {reaction} em {call}", + "{user} in {call}" : "{user} em {call}", + "Deleted user in {call}" : "Usuário excluído de {call}", + "{guest} (guest) in {call}" : "{guest} (convidado) em {call}", + "Guest in {call}" : "Convidado em {call}", + "{user} sent you a private message" : "{user} te enviou uma mensagem privada", + "{user} sent a message in conversation {call}" : "{user} enviou uma mensagem na conversa {call}", + "A deleted user sent a message in conversation {call}" : "Um usuário excluído enviou uma mensagem na conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) enviou uma mensagem na conversa {call}", + "A guest sent a message in conversation {call}" : "Um convidado enviou uma mensagem na conversa {call}", + "{user} replied to your private message" : "{user} respondeu a sua mensagem privada", + "{user} replied to your message in conversation {call}" : "{user} respondeu à sua mensagem na conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Um usuário removido respondeu à sua mensagem na conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) respondeu sua mensagem na conversa {call}", + "A guest replied to your message in conversation {call}" : "Um convidado respondeu à sua mensagem na conversa {call}", + "Reminder: You in private conversation {call}" : "Lembrete: Você na conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Lembrete: Um usuário excluído na conversa privada {call}", + "Reminder: {user} in private conversation" : "Lembrete: {user} em uma conversa privada", + "Reminder: You in conversation {call}" : "Lembrete: Você na conversa {call}", + "Reminder: {user} in conversation {call}" : "Lembrete: {user} na conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Lembrete: Um usuário excluído na conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Lembrete: {guest} (convidado) na conversa {call}", + "Reminder: A guest in conversation {call}" : "Lembrete: Um convidado na conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagiu com {reaction} à sua mensagem privada", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagiu com {reaction} à sua mensagem na conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Um usuário excluído reagiu com {reaction} à sua mensagem na conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidado) reagiu com {reaction} à sua mensagem na conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Um convidado reagiu com {reaction} à sua mensagem na conversa {call}", + "{user} mentioned you in a private conversation" : "{user} mencionou você em uma conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionou o grupo {group} na conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionou a equipe {team} na conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionou todas as pessoas na conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} mencionou você na conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Um usuário excluído mencionou o grupo {group} na conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Um usuário excluído mencionou a equipe {team} na conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Um usuário excluído mencionou todas as pessoas na conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Um usuário excluído mencionou você na conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidado) mencionou o {group} na conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidado) mencionou a equipe {team} na conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidado) mencionou todas as pessoas na conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) citou você na conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Um convidado mencionou o grupo {group} na conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Um convidado mencionou a equipe {team} na conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Um convidado mencionou todas as pessoas na conversa {call}", + "A guest mentioned you in conversation {call}" : "Um convidado mencionou você na conversa {call}", + "View message" : "Exibir mensagem", + "Dismiss reminder" : "Dispensar lembrete", + "View chat" : "Ver o chat", + "{user} invited you to a group conversation: {call}" : "{user} convidou você para uma conversa em grupo: {call}", + "Join call" : "Entrar na chamada", + "Answer call" : "Atender chamada", + "{user} would like to talk with you" : "{user} gostaria de falar com você", + "Call back" : "Ligar de volta", + "You missed a call from {user}" : "Você perdeu uma ligação de {user}", + "Accept call" : "Atender chamada", + "Incoming phone call from {call}" : "Chamada recebida de {call}", + "You missed a phone call from {call}" : "Você perdeu uma chamada de {call}", + "A group call has started in {call}" : "Uma chamada de grupo foi iniciada em {call}", + "You missed a group call in {call}" : "Você perdeu uma ligação em grupo em {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando a senha para acessar {file}", + "{email} tried to request the password to access {file}" : "{email} tentou solicitar a senha para acessar {file}", + "Someone is requesting the password to access {file}" : "Alguém está solicitando a senha para acessar {file}", + "Someone tried to request the password to access {file}" : "Alguém tentou solicitar a senha para acessar {file}", + "Open settings" : "Abrir as configurações", + "Hosted signaling server added" : "Servidor de sinalização hospedado adicionado", + "The hosted signaling server is now configured and will be used." : "O servidor de sinalização hospedado está agora configurado e será usado.", + "Hosted signaling server removed" : "Servidor de sinalização hospedado removido", + "The hosted signaling server was removed and will not be used anymore." : "O servidor de sinalização hospedado foi removido e não será mais usado.", + "Hosted signaling server changed" : "Servidor de sinalização hospedado alterado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "O servidor de sinalização hospedado mudou seu status de \"{oldstatus}\" para \"{newstatus}\".", + "pending" : "pendente", + "active" : "ativo", + "expired" : "expirado", + "blocked" : "bloqueado", + "error" : "erro", + "The certificate of {host} expires in {days} days" : "O certificado de {host} expirará em {days} dias", + "The certificate of {host} expired" : "O certificado de {host} expirou", + "Contact via Talk" : "Contato via Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Padrão", + "Send messages, create threads, and start voice and video calls." : "Envie mensagens, crie fios e inicie chamadas de voz e vídeo.", + "Presentation" : "Apresentação", + "Voice room" : "Sala de voz", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Entre diretamente na chamada, ideal para colocar o papo em dia ou para reuniões espontâneas.", + "Webinar" : "Webinário", + "Conversations" : "Conversas", + "Messages in current conversation" : "Mensagens na conversa atual", + "{user}" : "{user}", + "Messages" : "Mensagens", + "{user} in {conversation}" : "{user} em {conversation}", + "Messages in other conversations" : "Mensagens em outras conversas", + "One-to-one rooms always need to show the other users avatar" : "As salas individuais sempre precisam mostrar o avatar do outro usuário", + "Invalid emoji character" : "Caractér de emoji inválido", + "Invalid background color" : "Cor de plano de fundo inválida", + "Avatar image is not square" : "A imagem do avatar não é quadrada", + "Room {number}" : "Sala {number}", + "Other" : "Outro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Falha ao solicitar a avaliação porque o servidor está inacessível. Tente novamente mais tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Há um problema com a autenticação desta instância. Talvez não seja acessível externamente para verificar sua URL.", + "Something unexpected happened." : "Algo inesperado aconteceu.", + "The URL is invalid." : "A URL é inválida.", + "An HTTPS URL is required." : "Uma URL HTTPS é necessária.", + "The email address is invalid." : "O e-mail é inválido.", + "The language is invalid." : "O idioma é inválido.", + "The country is invalid." : "O país é inválido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Há um problema com a solicitação da avaliação. Verifique os logs para obter mais informações.", + "Too many requests are send from your servers address. Please try again later." : "Muitas solicitações foram enviadas do endereço do servidor. Tente novamente mais tarde.", + "There is already a trial registered for this Nextcloud instance." : "Já existe uma avaliação registrada para esta instância do Nextcloud.", + "Something unexpected happened. Please try again later." : "Algo inesperado aconteceu. Tente novamente mais tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Falha ao solicitar a avaliação porque o servidor de avaliação se comportou incorretamente. Tente novamente mais tarde.", + "Trial requested but failed to get account information. Please check back later." : "Avaliação solicitada mas falhou ao obter informações da conta. Tente novamente mais tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Há um problema com a autenticação desta solicitação. Talvez não seja acessível externamente para verificar seu URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Erro ao buscar informações da conta porque o servidor de avaliação se comportou incorretamente. Tente novamente mais tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Há um problema ao buscar as informações da conta. Verifique os logs para obter mais informações.", + "There is no such account registered." : "Não há registro desta conta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Falha ao buscar informações da conta porque o servidor de avaliação está inacessível. Por favor, volte mais tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "A exclusão da conta do servidor de sinalização hospedada falhou. Tente novamente mais tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Falha ao excluir a conta porque o servidor de avaliação se comportou incorretamente. Por favor, tente novamente mais tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Há um problema com a exclusão da conta. Verifique os logs para obter mais informações.", + "Too many requests are sent from your servers address. Please try again later." : "Muitas solicitações são enviadas dos endereços dos seus servidores. Tente novamente mais tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Falha ao excluir a conta porque o servidor de avaliação está inacessível. Tente novamente mais tarde.", + "Note to self" : "Nota para si mesmo", + "A place for your private notes, thoughts and ideas" : "Um lugar para suas notas, pensamentos e ideias privados", + "Transcript is AI generated and may contain mistakes" : "A transcrição é gerada por IA e pode conter erros", + "Summary is AI generated and may contain mistakes" : "O resumo é gerado por IA e pode conter erros", + "Let's get started!" : "Vamos começar!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** é uma plataforma de comunicação segura e auto-hospedada que se integra perfeitamente ao ecossistema Nextcloud.\n\n#### Principais Recursos do Nextcloud Talk:\n\n* Bate-papo e mensagens em bate-papos privados e em grupo\n* Chamadas de voz e vídeo\n* Compartilhamento de arquivos e integração com outros aplicativos Nextcloud\n* Configurações de conversa personalizáveis, moderação e controles de privacidade\n* Web, desktop e celular (iOS e Android)\n* Comunicação privada & segura\n\nSaiba mais na [documentação do usuário](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bem-vindo ao Nextcloud Talk\n\nNextcloud Talk é um aplicativo de mensagens privado e poderoso que se integra ao Nextcloud. Converse em conversas privadas ou em grupo, colabore em chamadas de voz e vídeo, organize webinários e eventos, personalize suas conversas e muito mais.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatar textos para criar mensagens ricas\n\nNo Nextcloud Talk, você pode usar a sintaxe Markdown para formatar suas mensagens. Por exemplo, aplique a formatação **negrito** ou *itálico*, ou `destaque textos como código`. Você pode até mesmo criar tabelas e adicionar cabeçalhos ao seu texto.\n\nPrecisa corrigir um erro de digitação ou alterar a formatação? Edite sua mensagem clicando em \"Editar mensagem\" no menu de mensagens.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Adicionar anexos e links\n\nAnexe arquivos do seu Nextcloud Hub usando o botão \"+\". Compartilhe itens de Arquivos e de vários aplicativos do Nextcloud. Alguns aplicativos até suportam widgets interativos, por exemplo, o aplicativo Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deixe as conversas fluírem: mencione usuários, reaja a mensagens e muito mais\n\nVocê pode mencionar todos na conversa usando %s ou mencionar participantes específicos digitando \"@\" e escolhendo o nome deles na lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Você pode responder a mensagens, encaminhá-las para outros bate-papos e pessoas ou copiar o conteúdo da mensagem.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faça mais com o Seletor Inteligente\n\nBasta digitar \"/\" ou acessar o menu \"+\" para abrir o Seletor Inteligente, onde você pode anexar vários conteúdos às suas mensagens. Você pode configurar o Seletor Inteligente para poder adicionar itens de aplicativos Nextcloud, GIFs, localizações de mapas, conteúdo gerado por IA e muito mais.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gerenciar configurações de conversa\n\nNo menu de conversas, você pode acessar várias configurações para gerenciar suas conversas, como:\n* Editar informações da conversa\n* Gerenciar notificações\n* Aplicar várias regras de moderação\n* Configurar acesso e segurança\n* Ativar bots\n* e muito mais!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Árabes Unidos", + "Afghanistan" : "Afeganistão", + "Antigua and Barbuda" : "Antígua e Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albânia", + "Armenia" : "Armênia", + "Angola" : "Angola", + "Antarctica" : "Antártica", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Áustria", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Åland Islands" : "Ilhas Aland", + "Azerbaijan" : "Azerbaijão", + "Bosnia and Herzegovina" : "Bósnia e Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Bahrain" : "Barém", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "São Bartolomeu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolívia, Estado Plurinacional da", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Santo Eustáquio e Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butão", + "Bouvet Island" : "Ilha Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Ilhas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democrática do", + "Central African Republic" : "República Centro-Africana", + "Congo" : "Congo", + "Switzerland" : "Suíça", + "Côte d'Ivoire" : "Costa do Marfim", + "Cook Islands" : "Ilhas Cook", + "Chile" : "Chile", + "Cameroon" : "Camarões", + "China" : "China", + "Colombia" : "Colômbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Ilha do Natal", + "Cyprus" : "Chipre", + "Czechia" : "República Checa", + "Germany" : "Alemanha", + "Djibouti" : "Djibuti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algéria", + "Ecuador" : "Equador", + "Estonia" : "Estônia", + "Egypt" : "Egito", + "Western Sahara" : "Saara Ocidental", + "Eritrea" : "Eritréia", + "Spain" : "Espanha", + "Ethiopia" : "Etiópia", + "Finland" : "Finlândia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Ilhas Falkland (Malvinas)", + "Micronesia, Federated States of" : "Micronésia, Estados Federados da", + "Faroe Islands" : "ilhas Faroé", + "France" : "França", + "Gabon" : "Gabão", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido da Grã-Bretanha e Irlanda do Norte", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlândia", + "Gambia" : "Gâmbia", + "Guinea" : "Guiné", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guiné Equatorial", + "Greece" : "Grécia", + "South Georgia and the South Sandwich Islands" : "Geórgia do Sul e Ilhas Sandwich do Sul", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guiné-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Ilha Heard e Ilhas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croácia", + "Haiti" : "Haiti", + "Hungary" : "Hungria", + "Indonesia" : "Indonésia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Ilha de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Território Britânico do Oceano Índico", + "Iraq" : "Iraque", + "Iran, Islamic Republic of" : "Irã (Republic Islâmica do)", + "Iceland" : "Islândia", + "Italy" : "Itália", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordânia", + "Japan" : "Japão", + "Kenya" : "Quênia", + "Kyrgyzstan" : "Quirguistão", + "Cambodia" : "Camboja", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "São Cristóvão e Neves", + "Korea, Democratic People's Republic of" : "Coreia, República Popular Democrática da", + "Korea, Republic of" : "Coreia, República da", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ilhas Cayman", + "Kazakhstan" : "Cazaquistão", + "Lao People's Democratic Republic" : "República Popular Democrática do Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lúcia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituânia", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letônia", + "Libya" : "Líbia", + "Morocco" : "Marrocos", + "Monaco" : "Mônaco", + "Moldova, Republic of" : "Moldova, República da", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "São Martinho (parte Francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Ilhas Marshall", + "North Macedonia" : "Macedônia do Norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongólia", + "Macao" : "Macau", + "Northern Mariana Islands" : "Ilhas Marianas do Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritânia", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurício", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malásia", + "Mozambique" : "Moçambique", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledônia", + "Niger" : "Nigéria", + "Norfolk Island" : "Ilha Norfolk", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicarágua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niuê", + "New Zealand" : "Nova Zelândia", + "Oman" : "Omã", + "Panama" : "Panamá", + "Peru" : "Peru", + "French Polynesia" : "Polinésia Francesa", + "Papua New Guinea" : "Papua Nova Guiné", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistão", + "Poland" : "Polônia", + "Saint Pierre and Miquelon" : "São Pedro e Miquelão", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Estado da", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Catar", + "Réunion" : "Reunião", + "Romania" : "Romênia", + "Serbia" : "Sérvia", + "Russian Federation" : "Federação Russa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arábia Saudita", + "Solomon Islands" : "Ilhas Salomão", + "Seychelles" : "Seicheles", + "Sudan" : "Sudão", + "Sweden" : "Suécia", + "Singapore" : "Cingapura", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascensão e Tristão da Cunha", + "Slovenia" : "Eslovênia", + "Svalbard and Jan Mayen" : "Svalbard e Jan Mayen", + "Slovakia" : "Eslováquia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somália", + "Suriname" : "Suriname", + "South Sudan" : "Sudão do Sul", + "Sao Tome and Principe" : "São Tome e Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "São Martinho (parte Holandesa)", + "Syrian Arab Republic" : "República Árabe da Síria", + "Eswatini" : "Suazilândia", + "Turks and Caicos Islands" : "Ilhas Turcas e Caicos", + "Chad" : "Chade", + "French Southern Territories" : "Territórios Franceses do Sul", + "Togo" : "Togo", + "Thailand" : "Tailândia", + "Tajikistan" : "Tajiquistão", + "Tokelau" : "Toquelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcomenistão", + "Tunisia" : "Tunísia", + "Tonga" : "Tonganês", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinidade e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Província da China", + "Tanzania, United Republic of" : "Tanzânia, República Unida da", + "Ukraine" : "Ucrânia", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ilhas Menores Distantes dos Estados Unidos", + "United States of America" : "Estados Unidos da America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbequistão", + "Holy See" : "Santa Sé", + "Saint Vincent and the Grenadines" : "São Vicente e Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana da", + "Virgin Islands, British" : "Ilhas Virgens, Britânicas", + "Virgin Islands, U.S." : "Ilhas Virgens, U.S.", + "Viet Nam" : "Vietnã", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iêmen", + "Mayotte" : "Maiote", + "South Africa" : "África do Sul", + "Zambia" : "Zâmbia", + "Zimbabwe" : "Zimbábue", + "Background blur" : "Desfoque de fundo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Não foi possível verificar o suporte ao carregamento do WASM. Verifique manualmente se o seu servidor web serve arquivos `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Seu servidor web não está configurado corretamente para entregar arquivos `.wasm`. Normalmente, isso é um problema com a configuração do Nginx. Para desfoque de fundo, é necessário um ajuste para entregar também arquivos `.wasm`. Compare sua configuração do Nginx com a configuração recomendada em nossa documentação.", + "Talk configuration values" : "Valores de configuração do Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forçar uma duração de chamada só é suportado com o cron do sistema. Habilite o cron do sistema ou remova a configuração `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Valores pequenos de `max_call_duration` (atualmente definido como %d) não são aplicáveis ​​devido a limitações técnicas. O trabalho em segundo plano é executado apenas a cada 5 minutos, então use por sua conta e risco.", + "Federation" : "Federação", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "É altamente recomendável configurar \"memcache.locking\" quando o Talk Federation estiver ativado.", + "High-performance backend" : "Back-end de alto desempenho", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nenhum back-end de alto desempenho configurado - A execução do Nextcloud Talk sem o back-end de alto desempenho só é dimensionada para chamadas muito pequenas (máximo de 2 a 3 participantes). Por favor, configure o back-end de alto desempenho para garantir que as chamadas com vários participantes funcionem sem problemas.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "A execução do modo \"conversation_cluster\" de back-end de alto desempenho está obsoleta e não será mais suportada na próxima versão. O back-end de alto desempenho atualmente suporta clustering real, que deve ser usado em vez disso.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definir múltiplos back-ends de alto desempenho está obsoleto e não será mais suportado na próxima versão. Em vez disso, um balanceador de carga deve ser configurado junto com servidores de sinalização em cluster e configurado nas configurações do Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A chave pública armazenada para o algoritmo %1$s usado não corresponde à chave privada armazenada. Execute %2$s para corrigir o problema.", + "High-performance backend not configured correctly. Run %s for details." : "O back-end de alto desempenho não está configurado corretamente. Execute %s para obter detalhes.", + "High-performance backend not configured correctly" : "Back-end de alto desempenho não configurado corretamente", + "Error: Cannot connect to server" : "Erro: Não foi possível conectar ao servidor", + "Error: Server did not respond with proper JSON" : "Erro: Servidor não respondeu com o JSON apropriado", + "Error: Certificate expired" : "Erro: Certificado expirado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: Os horários do sistema do servidor Nextcloud e do servidor de back-end de alto desempenho estão fora de sincronia. Por favor, certifique-se de que ambos os servidores estejam conectados a um servidor de tempo ou sincronize manualmente o horário deles.", + "Could not get version" : "Não foi possível obter a versão", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erro: Versão em execução: {version}; O servidor precisa ser atualizado para ser compatível com esta versão do Talk", + "Error: Server responded with: {error}" : "Erro: Servidor respondeu com: {error}", + "Error: Unknown error occurred" : "Erro: Ocorreu um erro desconhecido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Aviso: Versão em execução: {version}; O servidor não oferece suporte a todos os recursos desta versão do Talk, recursos ausentes: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "É altamente recomendável configurar um cache de memória ao executar Nextcloud Talk com back-end de alto desempenho.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "O Client Push está instalado, o que melhora a pontualidade das notificações do Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} não está instalado. Isso pode causar atrasos nas notificações do Talk.", + "Recording backend" : "Back-end de gravação", + "Using the recording backend requires a High-performance backend." : "Usar o back-end de gravação requer um back-end de alto desempenho.", + "No recording backend configured" : "Nenhum back-end de gravação configurado", + "SIP configuration" : "Configuração SIP", + "Using the SIP functionality requires a High-performance backend." : "O uso da funcionalidade SIP requer um back-end de alto desempenho.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Os números de telefone atribuídos ao Talk não devem começar com + ou 0. Remova ou atualize os seguintes números:\n{list}", + "No SIP backend configured" : "Nenhum back-end SIP configurado", + "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato deve ser YYYY-MM-DD", + "Conversation not found" : "Conversa não encontrada", + "Path is already shared with this conversation" : "O caminho já está compartilhado com esta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Bate-papo, vídeo e audioconferência usando o WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Bate-papo, vídeo & audioconferência usando WebRTC\n\n* 💬 **Bate-papo** Nextcloud Talk vem com um bate-papo de texto simples, permitindo que você compartilhe ou carregue arquivos de seu aplicativo Nextcloud Arquivos ou dispositivo local e mencione outros participantes.\n* 👥 **Chamadas privadas, em grupo, públicas e protegidas por senha!** Convide alguém, um grupo inteiro ou envie um link público para convidar para uma chamada.\n* 🌐 **Bate-papos federados** Converse com outros usuários do Nextcloud nos servidores deles\n* 💻 **Compartilhamento de tela!** Compartilhe sua tela com os participantes da sua chamada.\n* 🚀 **Integração com outros aplicativos Nextcloud** como Arquivos, Calendário, Status do usuário, Painel, Fluxo, Mapas, Seletor Inteligente, Contatos, Deck e muitos mais.\n* 🌉 **Sincronização com outras soluções de bate-papo** Com a integração do [Matterbridge](https://github.com/42wim/matterbridge/) no Talk, você pode sincronizar facilmente muitas outras soluções de bate-papo com o Nextcloud Talk e vice-versa.", + "Leave call" : "Sair da chamada", + "Navigating away from the page will leave the call in {conversation}" : "Se você sair da página, sairá da ligação com {conversation}", + "Stay in call" : "Permanecer na chamada", + "Error occurred when getting the conversation information" : "Ocorreu um erro ao obter as informações da conversa", + "Discuss this file" : "Discutir sobre este arquivo", + "Share this file with others to discuss it" : "Compartilhe este arquivo com outros para discuti-lo", + "Share this file" : "Compartilhar este arquivo", + "Join conversation" : "Juntar-se à conversa", + "This conversation is password-protected." : "Esta conversa é protegida por senha.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Detectamos várias tentativas de senhas inválidas de seu IP. Portanto, sua próxima tentativa será limitada a 30 segundos.", + "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", + "Password" : "Senha", + "Submit" : "Enviar", + "Error requesting the password." : "Erro ao solicitar a senha.", + "Request password" : "Solicitar senha", + "This conversation has ended" : "Esta conversa acabou", + "Error occurred when joining the conversation" : "Ocorreu um erro ao entrar na conversa", + "Close Talk sidebar" : "Fechar barra lateral do Talk", + "Open Talk sidebar" : "Abrir barra lateral do Talk", + "Everyone" : "Qualquer um", + "Users and moderators" : "Usuários e moderadores", + "Moderators only" : "Somente moderadores", + "Disable calls" : "Desativar chamadas", + "Save changes" : "Salvar alterações", + "Saving …" : "Salvando...", + "Saved!" : "Salvo!", + "Limit to groups" : "Limitar a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quando pelo menos um grupo é selecionado, somente pessoas destes grupos podem fazer parte de conversas.", + "Guests can still join public conversations." : "Convidados ainda podem juntar-se a conversas públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Os usuários que não podem mais usar o aplicativo Talk ainda serão listados como participantes em suas conversas anteriores e também suas mensagens de chat serão mantidas.", + "Limit using Talk" : "Limitar o uso do Talk", + "Limit creating a public and group conversation" : "Limitar criar uma conversa pública ou de grupo", + "Limit creating conversations" : "Limitar criar conversas", + "Limit starting a call" : "Limitar iniciar uma chamada", + "Limit starting calls" : "Limitar iniciar chamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Quando uma chamada é iniciada, todos que têm acesso à conversa podem entrar na chamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Os seguintes bots estão instalados neste servidor. Na documentação, você pode encontrar detalhes sobre como {linkstart1}criar seu próprio bot{linkend} ou uma {linkstart2}lista de bots{linkend} para habilitar em seu servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nenhum bot está instalado neste servidor. Na documentação, você pode encontrar detalhes sobre como {linkstart1}criar seu próprio bot{linkend} ou uma {linkstart2}lista de bots{linkend} para habilitar em seu servidor.", + "Description is not provided" : "Descrição não é fornecida", + "Locked for moderators" : "Trancado para moderadores", + "Enabled" : "Ativado", + "Disabled" : "Desativado", + "Bots settings" : "Configurações de bots", + "State" : "Estado", + "Name" : "Nome", + "Last error" : "Último erro", + "Total errors count" : "Contagem total de erros", + "Find more bots" : "Encontre mais bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Servidores confiáveis ​​podem ser configurados na {linkstart}página de configurações de compartilhamento{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Os bate-papos federados e as chamadas federadas já funcionam. O manuseio de anexos será feito em uma versão futura.", + "Enable Federation in Talk app" : "Ativar Federação no aplicativo Talk", + "Permissions" : "Permissões", + "Allow users to be invited to federated conversations" : "Permitir que os usuários sejam convidados para conversas federadas", + "Allow users to invite federated users into conversation" : "Permitir que os usuários convidem usuários federados para uma conversa", + "Only allow to federate with trusted servers" : "Permitir federar apenas com servidores confiáveis", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quando pelo menos um grupo for selecionado, somente as pessoas dos grupos listados poderão convidar usuários federados para conversas.", + "Groups allowed to invite federated users" : "Grupos com permissão para convidar usuários federados", + "Select groups …" : "Selecionar grupos …", + "All messages" : "Todas as mensagens", + "@-mentions only" : "Somente @-mentions", + "Off" : "Desligar", + "General settings" : "Configurações gerais", + "Default notification settings" : "Configurações de notificação padrão", + "Default group notification" : "Notificação padrão de grupo", + "Default group notification for new groups" : "Notificação padrão de grupo para novos grupos", + "Integration into other apps" : "Integração com outros aplicativos", + "Allow conversations on files" : "Permitir conversas em arquivos", + "Allow conversations on public shares for files" : "Permitir conversas em compartilhamentos públicos para arquivos", + "End-to-end encrypted calls" : "Chamadas criptografadas de ponta-a-ponta", + "Enable encryption" : "Ativar criptografia", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "As chamadas criptografadas de ponta-a-ponta com uma ponte SIP configurada exigem uma versão mais recente do back-end de alto desempenho e da ponte SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "No momento, os clientes móveis não oferecem suporte a chamadas criptografadas de ponta-a-ponta.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Ao clicar no botão acima, as informações no formulário são enviadas para os servidores da Struktur AG. Você pode encontrar mais informações em {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendente", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Active" : "Ativar", + "Expired" : "Expirado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "A avaliação não pôde ser solicitada. Tente novamente mais tarde.", + "The account could not be deleted. Please try again later." : "Não foi possível excluir a conta. Tente novamente mais tarde.", + "Hosted High-performance backend" : "Back-end de alto desempenho hospedado", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nosso parceiro Struktur AG fornece um serviço no qual um servidor de sinalização hospedado pode ser solicitado. Para isso, você só precisa preencher o formulário abaixo e seu Nextcloud solicitará. Depois que o servidor estiver configurado para você, as credenciais serão preenchidas automaticamente. Isso substituirá as configurações existentes do servidor de sinalização.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se sua conta do back-end de alto desempenho incluir a funcionalidade STUN e/ou TURN, as configurações serão atualizadas de acordo.", + "URL of this Nextcloud instance" : "URL desta instância Nextcloud", + "Full name of the user requesting the trial" : "Nome completo do usuário que solicitou a avaliação", + "Email of the user" : "E-mail do usuário ", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar avaliação de servidor de sinalização", + "You can see the current status of your hosted signaling server in the following table." : "Você pode ver o status atual do seu servidor de sinalização na tabela a seguir.", + "Status" : "Status", + "Created at" : "Criado em", + "Expires at" : "Expira em", + "Limits" : "Limites", + "STUN included" : "STUN incluído", + "Yes" : "Sim", + "No" : "Não", + "TURN included" : "TURN incluído", + "Delete the signaling server account" : "Excluir a conta do servidor de sinalização", + "_%n user_::_%n users_" : ["%n usuário","%n usuários","%n usuários"], + "Installed version: {version}" : "Versão instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Você pode instalar o Matterbridge para vincular o Nextcloud Talk a alguns outros serviços, visite a {linkstart1}página do GitHub{linkend} para obter mais detalhes. Baixar e instalar o aplicativo pode demorar um pouco. Caso expire, instale-o manualmente a partir da {linkstart2}Loja de Aplicativos do Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "O binário do Matterbridge tem permissões incorretas. Verifique se o arquivo binário do Matterbridge é de propriedade do usuário correto e se pode ser executado. Ele pode ser encontrado em \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "O binário Matterbridge não foi encontrado ou não pôde ser executado.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Você também pode definir o caminho para o binário Matterbridge manualmente por meio da configuração. Verifique a {linkstart}documentação de integração do Matterbridge{linkend} para mais informações.", + "Downloading …" : "Baixando…", + "Install Talk Matterbridge" : "Instalar Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Um erro ocorreu ao instalar o aplicativo Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocorreu um erro ao instalar o Talk Matterbridge. Por favor, instale-o manualmente", + "Failed to execute Matterbridge binary." : "Erro ao executar o binário Matterbridge.", + "Matterbridge integration" : "Integração Matterbridge", + "Enable Matterbridge integration" : "Ativar a integração Matterbridge", + "Status: Checking connection" : "Status: Verificando conexão", + "OK: Running version: {version}" : "OK: Versão rodando: {version}", + "Error: Server seems to be a Signaling server" : "Erro: O servidor parece ser um servidor de Sinalização", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: Os horários do sistema do servidor Nextcloud e do servidor de back-end de gravação estão fora de sincronia. Por favor, certifique-se de que ambos os servidores estejam conectados a um servidor de horário ou sincronize manualmente o horário deles.", + "Recording backend URL" : "URL de back-end de gravação", + "Validate SSL certificate" : "Validar o certificado SSL", + "Delete this server" : "Excluir este servidor", + "Test this server" : "Testar este servidor", + "Disabled for all calls" : "Desativado para todas as chamadas", + "Enabled for all calls" : "Ativado para todas as chamadas", + "Configurable on conversation level by moderators" : "Configurável no nível da conversa pelos moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "A configuração PHP \"upload_max_filesize\" ou \"post_max_size\" só permitirá o upload de arquivos de até {maxUpload}.", + "Recording backend settings saved" : "Configurações de back-end de gravação salvas", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Os moderadores terão permissão para ativar o consentimento no nível da conversa. O consentimento para gravação será exigido de cada participante antes de entrar em cada chamada desta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "O consentimento para gravação será exigido de cada participante antes de entrar em cada chamada.", + "The consent to be recorded is not required." : "O consentimento para ser gravado não é necessário.", + "Recording backend configuration is only possible with a High-performance backend." : "A configuração do back-end de gravação só é possível com um back-end de alto desempenho.", + "Add a new recording backend server" : "Adicionar um novo servidor de back-end de gravação", + "Shared secret" : "Segredo compartilhado", + "Recording consent" : "Consentimento de gravação", + "Recording transcription" : "Transcrição de gravações", + "Automatically transcribe call recordings with a transcription provider" : "Transcrever automaticamente gravações de chamadas com um provedor de transcrição", + "Automatically summarize call recordings with transcription and summary providers" : "Resumir automaticamente gravações de chamadas com provedores de transcrição e resumo", + "SIP configuration saved!" : "Configuração SIP salva!", + "SIP configuration is only possible with a High-performance backend." : "A configuração de SIP só é possível com um back-end de alto desempenho.", + "Enable SIP Dial-out option" : "Ativar opção de discagem SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "O servidor de sinalização precisa ser atualizado para o recurso de discagem SIP suportado.", + "Do not show SIP Dial-out caller number" : "Não mostrar o número de discagem SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "O número anônimo deve aparecer como \"desconhecido\" ou \"número restrito\" para o destinatário da chamada.", + "Dial-out number" : "Número de discagem", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número no formato E164 usado como número de retorno de chamada para chamadas efetuadas", + "Dial-out prefix" : "Prefixo de discagem", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefixo para o número de usuário configurado para chamadas efetuadas (o padrão é `+`)", + "Restrict SIP configuration" : "Restringir configuração SIP", + "Enable SIP configuration" : "Ativar configuração SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Apenas usuários dos grupos a seguir podem ativar o SIP em conversas que moderam", + "Phone number (Country)" : "Número do telefone (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Estas informações são enviadas em e-mails de convite e também exibidas na barra lateral para todos os participantes.", + "Nextcloud base URL" : "URL base do Nextcloud", + "Talk Backend URL" : "URL do Back-end do Talk", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Recursos disponíveis", + "Error: Websocket connection failed" : "Erro: Falha na conexão Websocket", + "Error code" : "Código de erro", + "Error message" : "Mensagem de erro", + "Error: Websocket connection failed. Check browser console" : "Erro: Falha na conexão do websocket. Verifique o console do navegador", + "High-performance backend URL" : "URL do back-end de alto desempenho", + "Missing High-performance backend warning hidden" : "Aviso de falta do back-end de alto desempenho oculto", + "High-performance backend settings saved" : "Configurações de back-end de alta performance salvas", + "Nextcloud Talk setup not complete" : "A configuração do Nextcloud Talk não foi concluída", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Observe que, em chamadas com mais de 2 participantes sem o back-end de alto desempenho, os participantes provavelmente terão problemas de conectividade e causarão alta carga nos dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale o back-end de alto desempenho para garantir que as chamadas com vários participantes funcionem sem problemas.", + "Nextcloud portal" : "Portal do Nextcloud", + "Quick installation guide" : "Guia de instalação rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "O back-end de alto desempenho é necessário para chamadas e conversas com vários participantes. Sem o back-end, todos os participantes precisam carregar seus próprios vídeos individualmente para cada um dos outros participantes, o que provavelmente causará problemas de conectividade e alta carga nos dispositivos participantes.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "É altamente recomendável configurar um cache distribuído ao usar o Nextcloud Talk com um back-end de alto desempenho.", + "Add High-performance backend server" : "Adicionar servidor de back-end de alto desempenho", + "Warn about connectivity issues in calls with more than 2 participants" : "Avisar sobre problemas de conectividade em chamadas com mais de 2 participantes", + "STUN server URL" : "URL do servidor de STUN", + "The server address is invalid" : "O endereço do servidor é inválido", + "STUN settings saved" : "Configurações de STUN salvas", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Um servidor STUN é usado para determinar o endereço IP público dos participantes por detrás de um roteador.", + "Add a new STUN server" : "Adicionar um novo servidor STUN", + "{schema} scheme must be used with a domain" : "O esquema {schema} deve ser usado com um domínio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} apenas", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidatos ICE foram retornados pelo servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Erro: Nenhum candidato ICE foi retornado pelo servidor TURN", + "Testing whether the TURN server returns ICE candidates" : "Testando para ver se o servidor TURN retorna candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN", + "TURN server URL" : "URL do servidor de TURN", + "TURN server secret" : "Segredo do servidor TURN", + "TURN server protocols" : "Protocolos do servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Um servidor TURN é usado como proxy do tráfego dos participantes por trás de um firewall. Se os participantes individuais não puderem se conectar a outros, provavelmente será necessário um servidor TURN. Consulte {linkstart}esta documentação{linkend} para obter instruções de configuração. ", + "TURN settings saved" : "Configurações TURN salvas", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Adicionar um novo servidor TURN", + "Failed" : "Falhou", + "OK" : "OK", + "Checking …" : "Verificando …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Falha: WebAssembly está desativado ou não é compatível com este navegador. Habilite o WebAssembly ou use um navegador com suporte para fazer a verificação.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Falha: Os arquivos \".wasm\" e \".tflite\" não foram retornados corretamente pelo servidor web. Verifique a seção \"Requisitos do sistema\" na documentação do Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Os arquivos \".wasm\" e \".tflite\" foram retornados corretamente pelo servidor da web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que a configuração do PHP e do Apache não é compatível. Observe que o PHP só pode ser usado com o módulo MPM_PREFORK e o PHP-FPM só pode ser usado com o módulo MPM_EVENT.", + "Web server setup checks" : "Verificações de configuração do servidor web", + "Files required for virtual background can be loaded" : "Arquivos necessários para o plano de fundo virtual podem ser carregados", + "Federated user" : "Usuário federado", + "Assign participants to rooms" : "Atribuir participantes a salas", + "Configure breakout rooms" : "Configurar salas temáticas", + "Number of breakout rooms" : "Número de salas temáticas", + "You can create from 1 to 20 breakout rooms." : "Você pode criar de 1 a 20 salas temáticas.", + "Assignment method" : "Método de atribuição", + "Automatically assign participants" : "Atribuir participantes automaticamente", + "Manually assign participants" : "Atribuir participantes manualmente", + "Allow participants to choose" : "Permitir que os participantes escolham", + "Create rooms" : "Criar salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Criar salas temáticas", + "Reset" : "Redefinir", + "Delete breakout rooms" : "Excluir salas temáticas", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "As salas temáticas e as configurações atuais serão perdidas", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes não atribuídos", + "Back" : "Voltar", + "Assign" : "Atribuir", + "Add participant \"{user}\"" : "Adicionar participante \"{user}\"", + "Now" : "Agora", + "Invalid calendar selected" : "Calendário inválido selecionado", + "Invalid start time selected" : "Hora de início inválida selecionada", + "Invalid end time selected" : "Hora de término inválida selecionada", + "Unknown error occurred" : "Ocorreu um erro desconhecido", + "Sending no invitations" : "Não enviando convites", + "{participant0} will receive an invitation" : "{participant0} receberá um convite", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} receberão um convite", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e mais %n receberão convites","{participant0}, {participant1} e mais %n receberão convites","{participant0}, {participant1} e mais %n receberão convites"], + "Invite {user}" : "Convidar {user}", + "Invite all users and emails in this conversation" : "Convidar todos os usuários e e-mails nesta conversa", + "Meeting created" : "Reunião criada", + "Upcoming meetings" : "Próximas reuniões", + "Loading …" : "Carregando …", + "No upcoming meetings" : "Nenhuma próxima reunião", + "Schedule a meeting" : "Agendar uma reunião", + "Meeting title" : "Título da reunião", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendário", + "Attendees" : "Participantes", + "No other participants to send invitations to." : "Não há outros participantes para enviar convites.", + "Add attendees" : "Adicionar participantes", + "Save" : "Salvar", + "Search participants" : "Procurar participantes", + "No results" : "Nenhum resultado", + "Done" : "Concluído", + "Disable live transcription" : "Desativar transcrição em tempo real", + "Enable live transcription (generated by AI)" : "Ativar transcrição em tempo real (gerada por IA)", + "Enable live transcription (Live transcriptions app is not installed)" : "Ativar transcrição em tempo real (o aplicativo de transcrição em tempo real não está instalado)", + "Disable live translation" : "Desativar tradução em tempo real", + "Enable live translation (generated by AI)" : "Ativar tradução em tempo real (gerada por IA)", + "Original language" : "Idioma original", + "Live translations app is not installed" : "O aplicativo de tradução em tempo real não está instalado", + "Original language: {languageName}" : "Idioma original: {languageName}", + "Translated language" : "Idioma traduzido", + "Translated language: {languageName}" : "Idioma traduzido: {languageName}", + "Raise hand" : "Levantar a mão", + "Raise hand (R)" : "Levantar a mão (R) ", + "Lower hand" : "Abaixar a mão", + "Lower hand (R)" : "Abaixar a mão (R)", + "Exit full screen (F)" : "Sair da tela cheia (F)", + "Full screen (F)" : "Tela cheia (F)", + "Speaker view" : "Visualização de orador", + "Grid view" : "Vista em grade", + "Error when trying to load the available live transcription languages" : "Erro ao carregar os idiomas disponíveis para transcrição em tempo real", + "Failed to enable live transcription" : "Erro ao ativar a transcrição em tempo real", + "Failed to enable live translations" : "Falha ao ativar a tradução em tempo real", + "Failed to disable live translations" : "Falha ao desativar a tradução em tempo real", + "Recording consent is required" : "É necessário o consentimento de gravação", + "This conversation is read-only" : "Esta conversa é somente leitura", + "Conversation not found or not joined" : "Conversa não encontrada ou não entrou", + "Lobby is still active and you're not a moderator" : "A sala de espera ainda está ativa e você não é um moderador", + "Connection failed" : "Falha na conexão", + "Reload" : "Recarregar", + "{nickName} raised their hand." : "{nickName} levantou a mão.", + "A participant raised their hand." : "Um participante levantou a mão.", + "Collapse stripe" : "Recolher faixa", + "Expand stripe" : "Expandir faixa", + "Previous page of videos" : "Página anterior de vídeos", + "Next page of videos" : "Próxima página de vídeos", + "Connecting …" : "Conectando …", + "Calling …" : "Ligando …", + "Waiting for {user} to join the call" : "Aguardando a entrada de {user} na chamada", + "Waiting for others to join the call …" : "Esperando outros entrarem na chamada...", + "You can invite others in the participant tab of the sidebar" : "Você pode convidar outros na aba de participantes da barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Você pode convidar outros na aba de participantes da barra lateral ou compartilhar esse link para convidar outras pessoas!", + "Share this link to invite others!" : "Compartilhe este link para convidar outros!", + "Copy link" : "Copiar link", + "You are not allowed to enable audio" : "Você não tem permissão para habilitar o áudio", + "No audio. Click to select device" : "Sem áudio. Clique para selecionar um dispositivo", + "Mute audio" : "Desativar microfone", + "Mute audio (M)" : "Desativar microfone (M)", + "Unmute audio" : "Ativar microfone", + "Unmute audio (M)" : "Ativar microfone (M)", + "None" : "Nenhum", + "Select a microphone" : "Selecione um microfone", + "Select a speaker" : "Selecione um alto-falante", + "Microphone settings" : "Configurações do microfone", + "Check devices" : "Verificar dispositivos", + "Access to camera was denied" : "O acesso à câmera foi negado", + "Error while accessing camera: It is likely in use by another program" : "Erro ao acessar a câmera: Ela provavelmente está sendo usada por outro programa", + "Error while accessing camera" : "Erro ao acessar a câmera", + "You have been muted by a moderator" : "Você foi silenciado por um moderador", + "Hide presenter video" : "Ocultar vídeo do apresentador", + "You are not allowed to enable video" : "Você não tem permissão para habilitar o vídeo", + "No video. Click to select device" : "Sem vídeo. Clique para selecionar um dispositivo", + "Disable video" : "Desativar vídeo", + "Disable video (V)" : "Desativar vídeo (V) ", + "Enable video" : "Ativar vídeo", + "Enable video (V)" : "Ativar vídeo (V) ", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo - Sua conexão será interrompida brevemente ao ativar o vídeo pela primeira vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo (V) - Sua conexão será interrompida brevemente ao ativar o vídeo pela primeira vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo. Sua conexão será brevemente interrompida ao ativar o vídeo pela primeira vez", + "Select a video device" : "Selecione um dispositivo de vídeo", + "Show presenter" : "Mostrar apresentador", + "You" : "Você", + "Mute" : "Desativar microfone", + "Muted" : "Microfone desativado", + "Show screen" : "Exibir tela", + "Stop following" : "Parar de seguir", + "Connection could not be established …" : "Não foi possível estabelecer a conexão …", + "Connection was lost and could not be re-established …" : "A conexão foi perdida e não pôde ser restabelecida …", + "Connection could not be established. Trying again …" : "Não foi possível estabelecer a conexão. Tentando novamente …", + "Connection lost. Trying to reconnect …" : "Conexão perdida. Tentando reconectar …", + "Connection problems …" : "Problemas de conexão ...", + "Collapse" : "Recolher", + "Expand" : "Expandir", + "You need to be logged in to upload files" : "Você precisa fazer login para enviar arquivos", + "Drop your files to upload" : "Arraste seus arquivos para enviar", + "Conversation messages" : "Mensagens de conversa", + "Scroll to bottom" : "Rolar para baixo", + "Post message" : "Postar mensagem", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Favorito", + "Banned users" : "Usuários banidos", + "Manage the list of banned users in this conversation." : "Gerencie a lista de usuários banidos nesta conversa.", + "Manage bans" : "Gerenciar banimentos", + "No banned users" : "Nenhum usuário banido", + "Banned by:" : "Banido por:", + "Date:" : "Data:", + "Note:" : "Anotação:", + "Hide details" : "Ocultar detalhes", + "Show details" : "Exibir detalhes", + "Unban" : "Desbanir", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Você pode alterar o título e a descrição no {linkstart}Calendário ↗{linkend}.", + "Error while updating conversation name" : "Erro ao atualizar o nome da conversa", + "Error while updating conversation description" : "Ocorreu um erro ao editar a descrição da conversa", + "Enter a name for this conversation" : "Digite um nome para esta conversa", + "Edit conversation name" : "Editar o nome da conversa", + "Edit conversation description" : "Editar descrição da conversa", + "Enter a description for this conversation" : "Digite uma descrição para esta conversa ", + "Picture" : "Imagem", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Os seguintes bots podem ser ativados nesta conversa. Entre em contato com sua administração para obter mais bots instalados neste servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nenhum bot está instalado neste servidor. Entre em contato com sua administração para instalar bots neste servidor.", + "Disable" : "Desativar", + "Enable" : "Ativar", + "The bot is not available anymore" : "O robô não está mais disponível", + "Breakout rooms" : "Salas temáticas", + "Manage breakout rooms" : "Gerenciar salas temáticas", + "Set up breakout rooms for this conversation" : "Criar salas temáticas para esta conversa", + "Please select a valid PNG or JPG file" : "Por favor, selecione um arquivo PNG ou JPG válido", + "Choose your conversation picture" : "Escolha sua imagem da conversa", + "Choose" : "Escolher", + "Error setting conversation picture" : "Erro ao configurar imagem da conversa", + "Could not set the conversation picture: {error}" : "Não foi possível definir imagem da conversa: {error}", + "Error cropping conversation picture" : "Erro ao cortar imagem da conversa", + "Error removing conversation picture" : "Erro ao remover imagem da conversa", + "Set emoji as conversation picture" : "Configurar emoji como imagem da conversa", + "Set background color for conversation picture" : "Configurar cor do plano de fundo para imagem da conversa", + "Upload conversation picture" : "Fazer upload da imagem da conversa", + "Choose conversation picture from files" : "Escolher imagem da conversa a partir dos arquivos", + "Remove conversation picture" : "Remover imagem da conversa", + "The file must be a PNG or JPG" : "O arquivo deve ser um PNG ou JPG", + "Set picture" : "Configurar imagem", + "Default permissions modified for {conversationName}" : "Permissões padrão modificadas para {conversationName}", + "Could not modify default permissions for {conversationName}" : "Não foi possível modificar as permissões padrão para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edite as permissões padrão para os participantes desta conversa. Essas configurações não afetam os moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Toda vez que as permissões são modificadas nesta seção, as permissões personalizadas anteriormente atribuídas a participantes individuais serão perdidas.", + "All permissions" : "Todas as permissões", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Os participantes têm permissão para iniciar uma chamada, entrar em uma chamada, ativar áudio e vídeo e compartilhar a tela.", + "Participants can use all available features." : "Os participantes podem utilizar todos os recursos disponíveis.", + "Restricted" : "Restritas", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Os participantes podem entrar em chamadas, mas não podem ativar áudio ou vídeo, nem compartilhar a tela até que um moderador lhes conceda as permissões manualmente.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Os participantes têm acesso a um conjunto reduzido de recursos até que um moderador conceda manualmente permissões adicionais.", + "Advanced permissions" : "Permissões avançadas", + "Edit permissions" : "Editar permissões ", + "Conversation settings" : "Configurações da conversa", + "Basic Info" : "Informações Básicas", + "Personal" : "Pessoal", + "Moderation" : "Moderação", + "Setup overview" : "Visão geral da configuração", + "Live transcription" : "Transcrição em tempo real", + "Live transcriptions app is not installed" : "O aplicativo de transcrição em tempo real não está instalado", + "Enable live transcription" : "Ativar transcrição em tempo real", + "Breakout Rooms" : "Salas Temáticas", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de perigo", + "Archive conversation" : "Arquivar conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Conversas arquivadas são ocultadas da lista de conversas por padrão. No entanto, elas ainda aparecerão quando você pesquisar o nome da conversa ou acessar uma lista de conversas arquivadas.", + "Do you really want to leave \"{displayName}\"?" : "Você realmente quer sair de \"{displayName}\"?", + "You can archive this conversation instead." : "Em vez disso, você pode arquivar esta conversa.", + "Leave conversation" : "Encerrar conversa", + "You need to promote a new moderator before you can leave the conversation" : "Você precisa promover um novo moderador antes de sair da conversa", + "Delete conversation" : "Excluir conversa", + "Do you really want to delete \"{displayName}\"?" : "Você realmente quer excluir \"{displayName}\"?", + "Error while deleting conversation" : "Erro ao excluir a conversa", + "Delete all chat messages" : "Excluir todas as mensagens de bate-papo ", + "Do you really want to delete all messages in \"{displayName}\"?" : "Você realmente quer excluir todas as mensagens em \"{displayName}\"?", + "Error while clearing chat history" : "Erro ao limpar o histórico de bate-papo ", + "Be careful, these actions cannot be undone." : "Cuidado, estas ações não podem ser desfeitas.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Depois que uma conversa é encerrada, para voltar a uma conversa encerrada, é necessário um convite. Uma conversa aberta pode ser retomada a qualquer momento. ", + "Permanently delete this conversation." : "Excluir esta conversa permanentemente. ", + "Delete chat messages" : "Excluir mensagens de bate-papo ", + "Permanently delete all the messages in this conversation." : "Excluir permanentemente todas as mensagens desta conversa. ", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas","%n semanas"], + "Custom expiration time" : "Tempo de expiração personalizado", + "Message expiration disabled" : "Expiração de mensagens desativada", + "Message expiration set: {duration}" : "Expiração de mensagens configurada: {duration}", + "Error when trying to set message expiration" : "Erro ao tentar definir a expiração de mensagens", + "Message expiration" : "Expiração de mensagens", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensagens de bate-papo podem expirar após um certo tempo. Observação: Os arquivos compartilhados no bate-papo não serão excluídos para o proprietário, mas não serão mais compartilhados na conversa.", + "Set message expiration" : "Definir expiração de mensagens", + "Current message expiration" : "Expiração de mensagens atual", + "Password copied to clipboard" : "Senha copiada para a área de transferência", + "Password could not be copied" : "Não foi possível copiar a senha", + "Guest access" : "Acesso para convidados", + "Breakout rooms are not allowed in public conversations." : "Salas temáticas não são permitidas em conversas públicas.", + "Allow guests to join this conversation via link" : "Permitir que os convidados entrem nesta conversa por meio de um link", + "Password protection" : "Proteção por senha", + "This conversation is password-protected. Guests need password to join" : "Esta conversa é protegida por senha. Os convidados precisam de senha para participar", + "Password protection is needed for public conversations" : "A proteção por senha é necessária para conversas públicas", + "Set a password" : "Definir uma senha", + "Change password" : "Alterar senha", + "Enter new password" : "Insira a nova senha", + "Save password" : "Salvar senha", + "Copy password" : "Copiar a senha", + "Guests are allowed to join this conversation via link" : "Convidados têm permissão para entrar nesta conversa por meio de um link", + "Guests are not allowed to join this conversation" : "Convidados não têm permissão para entrar nesta conversa", + "Resend invitations" : "Reenviar convites", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversa está aberta tanto para usuários registrados quanto para usuários criados com o aplicativo Convidados", + "This conversation is open to registered users" : "Esta conversa está aberta a usuários registrados", + "This conversation is limited to the current participants" : "Esta conversa é limitada aos participantes atuais", + "You opened the conversation to both registered users and users created with the Guests app" : "Você abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "Error occurred when opening or limiting the conversation" : "Ocorreu um erro ao abrir ou limitar a conversa", + "Open conversation to registered users, showing it in search results" : "Abrir a conversa para usuários registrados, mostrando-a nos resultados da pesquisa", + "Also open to users created with the Guests app" : "Também abrir para usuários criados com o aplicativo Convidados", + "Open conversation" : "Abrir conversa", + "Set language spoken in calls" : "Definir idioma falado nas chamadas", + "Languages could not be loaded" : "Não foi possível carregar os idiomas", + "Loading languages …" : "Carregando idiomas …", + "Invalid language" : "Idioma inválido", + "Default language (English)" : "Idioma padrão (inglês)", + "Default live transcription language set" : "Idioma padrão definido para transcrição em tempo real", + "Live transcription language set: {languageName}" : "Idioma definido para transcrição em tempo real: {languageName}", + "Error when trying to set live transcription language" : "Erro ao definir o idioma para transcrição em tempo real", + "Start time: {date}" : "Hora de início: {date}", + "Start time has been updated" : "A hora de início foi atualizada", + "Error occurred while updating start time" : "Ocorreu um erro ao atualizar a hora de início", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ativar a sala de espera removerá os não moderadores da chamada em andamento.", + "Enable lobby, restricting the conversation to moderators" : "Ativar sala de espera, restringindo a conversa aos moderadores", + "Meeting start time" : "Hora de início da reunião", + "Start time (optional)" : "Horário de início (opcional)", + "Import email participants" : "Importar e-mail dos participantes", + "You can import a list of email participants from a CSV file." : "Você pode importar uma lista de participantes de e-mail de um arquivo CSV.", + "Poll drafts" : "Rascunhos de enquetes", + "Browse poll drafts" : "Navegar pelos rascunhos de enquetes", + "Error occurred when locking the conversation" : "Ocorreu um erro ao trancar a conversa", + "Error occurred when unlocking the conversation" : "Ocorreu um erro ao destrancar a conversa", + "Lock conversation" : "Trancar conversa", + "This will also terminate the ongoing call." : "Isso também encerrará a chamada em andamento. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Tranque a conversa para impedir que alguém poste mensagens ou inicie chamadas", + "Edit" : "Editar", + "More information" : "Mais informações", + "Delete" : "Excluir", + "Add new bridged channel to current conversation" : "Adicionar novo canal de comunicação para a conversa atual", + "unknown state" : "estado desconhecido", + "running" : "rodando", + "not running, check Matterbridge log" : "não está funcionando, verifique o log do Matterbridge", + "not running" : "sem funcionamento", + "Bridge saved" : "Ponte salva", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Você pode conectar canais de vários sistemas de mensagens instantâneas com Matterbridge.", + "More info on Matterbridge" : "Mais informações no Matterbridge", + "Messaging systems" : "Sistemas de mensagens", + "Enable bridge" : "Ativar ponte", + "Show Matterbridge log" : "Mostrar log do Matterbridge", + "Log content" : "Conteúdo do registro", + "Only moderators are allowed to mention @all" : "Somente moderadores podem mencionar @all", + "All participants are allowed to mention @all" : "Todos os participantes podem mencionar @all", + "Participants are now allowed to mention @all." : "Os participantes agora podem mencionar @all.", + "Mentioning @all has been limited to moderators." : "Mencionar @all foi limitado aos moderadores.", + "Allow participants to mention @all" : "Permitir que os participantes mencionem @all", + "Mention permissions" : "Permissões de menção", + "Notifications" : "Notificações", + "Notify about calls in this conversation" : "Notificar sobre chamadas nesta conversa ", + "Important conversation" : "Conversa importante", + "\"Do not disturb\" user status is ignored for important conversations" : "O status de usuário \"Não perturbe\" é ignorado em conversas importantes", + "Sensitive conversation" : "Conversa sensível", + "Message preview will be disabled in conversation list and notifications" : "A visualização de mensagens será desativada na lista de conversas e nas notificações", + "Recording consent is required for calls in this conversation" : "O consentimento de gravação é necessário para chamadas nesta conversa", + "Recording consent is not required for calls in this conversation" : "O consentimento de gravação não é necessário para chamadas nesta conversa", + "Recording consent requirement was updated" : "O requisito de consentimento de gravação foi atualizado", + "Error occurred while updating recording consent" : "Ocorreu um erro ao atualizar o consentimento de gravação", + "Recording Consent" : "Consentimento de Gravação", + "Recording consent cannot be changed once a call or breakout session has started." : "O consentimento de gravação não pode ser alterado após o início de uma chamada ou sessão de sala temática.", + "Require recording consent before joining call in this conversation" : "Exigir consentimento de gravação antes de entrar em uma chamada nesta conversa", + "Recording consent is required for all calls" : "O consentimento de gravação é necessário para todas as chamadas", + "SIP dial-in is now possible without PIN requirement" : "A discagem SIP agora é possível sem a necessidade de PIN", + "SIP dial-in is now enabled" : "A discagem SIP agora está ativada", + "SIP dial-in is now disabled" : "A discagem SIP agora está desativada", + "Error occurred when enabling SIP dial-in" : "Ocorreu um erro ao ativar a discagem SIP", + "Error occurred when disabling SIP dial-in" : "Ocorreu um erro ao desativar a discagem SIP", + "Phone and SIP dial-in" : "Discagem por telefone e SIP", + "Enable phone and SIP dial-in" : "Ativar discagem por telefone e SIP", + "Allow to dial-in without a PIN" : "Permitir discar sem um PIN", + "Ongoing" : "Em andamento", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n pessoa aceitou","%n pessoas aceitaram","%n pessoas aceitaram"], + "_%n person declined_::_%n people declined_" : ["%n pessoa recusou","%n pessoas recusaram","%n pessoas recusaram"], + "_and %n other attachment_::_and %n other attachments_" : ["e %n outro anexo","e %n de outros anexos","e %n outros anexos"], + "With {displayName}" : "Com {displayName}", + "In {conversation}" : "Em {conversation}", + "View attachment" : "Exibir anexo", + "Join" : "Entrar", + "View conversation" : "Exibir conversa", + "View event on Calendar" : "Exibir evento no Calendário", + "Error while creating the conversation" : "Erro ao criar a conversa", + "Hello, {displayName}" : "Olá, {displayName}", + "Start meeting now" : "Iniciar reunião agora", + "Give your meeting a title" : "Dê um título à sua reunião", + "Create and copy link" : "Criar e copiar link", + "Create a new conversation" : "Criar uma nova conversa", + "Join open conversations" : "Entrar em conversas abertas", + "Call a phone number" : "Ligar para um número de telefone", + "Scroll backward" : "Rolar para trás", + "Scroll forward" : "Rolar para frente", + "Schedule meetings" : "Agendar reuniões", + "You don't have any upcoming meetings" : "Você não tem nenhuma reunião em breve.", + "Calendar events with a conversation link as the location are shown here" : "Os eventos do calendário cujo local é um link de conversa são exibidos aqui", + "Open calendar" : "Abrir calendário", + "Unread mentions" : "Menções não lidas", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "As mensagens em que você foi mencionado aparecerão aqui. Você pode mencionar pessoas digitando @ seguido do nome delas.", + "Upcoming reminders" : "Próximos lembretes", + "Message reminders" : "Lembretes de mensagens", + "Set a reminder on a message to be notified" : "Defina um lembrete em uma mensagem para ser notificado", + "Start a group conversation" : "Iniciar conversa de grupo", + "Create conversation" : "Criando conversa", + "Enter your name" : "Digite seu nome", + "Submit name and join" : "Envie o nome e entre", + "Do you already have an account?" : "Você já tem uma conta?", + "Log in" : "Login", + "Error while verifying uploaded file" : "Erro ao verificar o arquivo carregado", + "Uploaded file is verified" : "O arquivo carregado foi verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "O formato do conteúdo é valores separados por vírgula (CSV):
- A linha do cabeçalho é obrigatória e deve corresponder a \"name\",\"email\" ou apenas \"email\"
- Uma entrada por linha (p. ex., \"João da Silva\",\"joao@example.tld\")", + "Participants added successfully" : "Participantes adicionados com sucesso", + "Error while adding participants" : "Erro ao adicionar participantes", + "Import a file" : "Importar um arquivo", + "Browse" : "Navegar", + "Verifying uploaded file …" : "Verificando arquivo carregado …", + "This might take a moment" : "Isso pode demorar um pouco", + "Send invitations" : "Enviar convites", + "_%n invalid email_::_%n invalid emails_" : ["%n e-mail inválido","%n e-mails inválidos","%n e-mails inválidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail já foi importado ou duplicado","%n e-mails já foram importados ou duplicados","%n e-mails já foram importados ou duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n convite pode ser enviado","%n convites podem ser enviados","%n convites podem ser enviados"], + "An error occurred while calling a phone number" : "Ocorreu um erro ao ligar para um número de telefone", + "Phone number could not be called: {error}" : "Não foi possível ligar para o número de telefone: {error}", + "Phone number could not be called" : "Não foi possível ligar para o número de telefone", + "Search participants or phone numbers" : "Pesquisar participantes ou números de telefone", + "Creating the conversation …" : "Criando a conversa …", + "Mark as read" : "Marcar como lido ", + "Mark as unread" : "Marcar como não lido", + "Remove from favorites" : "Remover dos favoritos", + "Add to favorites" : "Adicionar aos favoritos", + "Unarchive conversation" : "Desarquivar conversa", + "Ignore \"Do not disturb\"" : "Ignorar \"Não perturbe\"", + "You need to promote a new moderator before you can leave the conversation." : "Você precisa promover um novo moderador antes de sair da conversa.", + "Conversation actions" : "Ações de conversa", + "Notify about calls" : "Notificar sobre chamadas", + "Hide message text" : "Ocultar texto da mensagem", + "Pending invitations" : "Convites pendentes", + "Join conversations from other servers" : "Entrar nas conversas de outros servidores", + "From {user} at {remoteServer}" : "De {user} em {remoteServer}", + "Decline invitation" : "Recusar convite", + "Accept invitation" : "Aceitar convite", + "No pending invitations" : "Nenhum convite pendente", + "Home" : "Início", + "Unread" : "Não lido", + "Mentions" : "Menções", + "Meetings" : "Reuniões", + "Sort conversations" : "Ordenar conversas", + "By recent activity" : "Por atividade recente", + "Alphabetically" : "Alfabeticamente", + "Do not group by type" : "Não agrupar por tipo", + "Show private ones first" : "Mostrar primeiro as privadas", + "Show group ones first" : "Mostrar primeiro as agrupadas", + "No followed threads" : "Sem fios seguidos", + "No matches found" : "Nenhuma correspondência encontrada", + "No conversations found" : "Nenhuma conversa encontrada", + "You have no archived conversations." : "Você não tem conversas arquivadas", + "Subscribe to an existing thread or start your own." : "Assine um fio já existente ou inicie o seu próprio.", + "You have no unread mentions." : "Você não tem menções não lidas.", + "You have no unread messages." : "Você não tem mensagens não lidas.", + "An error occurred while performing the search" : "Erro ao pesquisar", + "Conversation list" : "Lista de conversas", + "Filter conversations by" : "Filtrar conversa por", + "Unread messages" : "Mensagens não lidas", + "Meeting conversations" : "Conversas de reuniões", + "Clear filters" : "Limpar filtros", + "New personal note" : "Nova nota pessoal", + "SIP backend is not installed" : "O back-end SIP não está instalado", + "Back to conversations" : "Voltar às conversas", + "Archived conversations" : "Conversas arquivadas", + "Threads" : "Fios", + "Clear filter" : "Limpar filtro", + "Show more threads" : "Mostrar mais fios", + "App settings" : "Configurações do aplicativo", + "Users" : "Usuários", + "Groups" : "Grupos", + "Teams" : "Equipes", + "Federated users" : "Usuários federados", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Outras fontes", + "Open conversations" : "Abrir conversas", + "No search results" : "Nenhum resultado encontrado", + "Users, groups and teams" : "Usuários, grupos e equipes", + "Users and groups" : "Usuários e grupos", + "Users and teams" : "Usuários e equipes", + "Groups and teams" : "Grupos e equipes", + "New group conversation" : "Nova conversa em grupo", + "The meeting will start soon" : "A reunião iniciará em breve", + "This meeting is scheduled for {startTime}" : "Esta reunião está agendada para iniciar em {startTime}", + "You are currently waiting in the lobby" : "Você está atualmente esperando na sala de espera", + "Enable noise suppression" : "Ativar supressão de ruído", + "Reduce background noises for better voice quality" : "Reduza os ruídos de fundo para obter uma melhor qualidade de voz", + "Enable echo cancellation" : "Ativar cancelamento de eco", + "Minimize echo effect from own surrounding" : "Minimize o efeito de eco do próprio ambiente", + "Enable auto gain control" : "Ativar controle automático de ganho", + "Dynamically adjust microphone volume for consistent level" : "Ajuste dinamicamente o volume do microfone para obter um nível consistente", + "Select microphone" : "Selecionar microfone", + "No microphone available" : "Nenhum microfone disponível", + "Select speaker" : "Selecionar alto-falante", + "No speaker available" : "Nenhum alto-falante disponível", + "Select camera" : "Selecionar câmera", + "No camera available" : "Nenhuma câmera disponível", + "Select a device" : "Selecionar um dispositivo", + "Playing …" : "Reproduzindo …", + "Test speakers" : "Testar alto-falantes", + "Test" : "Teste", + "Devices" : "Dispositivos", + "Backgrounds" : "Planos de Fundo", + "No audio" : "Sem áudio", + "No camera" : "Sem câmera", + "Display video as you will see it (mirrored)" : "Exibir vídeo como você o verá (espelhado)", + "Display video as others will see it" : "Exibir vídeo como os outros o verão", + "Calls are not supported in your browser" : "Seu navegador não suporta chamadas", + "Access to microphone is only possible with HTTPS" : "O acesso ao microfone somente é possível via HTTPS", + "Access to microphone was denied" : "O acesso ao microfone foi negado", + "Error while accessing microphone" : "Erro ao acessar microfone", + "Access to camera is only possible with HTTPS" : "O acesso à câmera somente é possível via HTTPS", + "The call is being recorded." : "A chamada está sendo gravada.", + "The call might be recorded." : "A chamada pode ser gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A gravação pode incluir sua voz, vídeo da câmera e compartilhamento de tela. Seu consentimento é necessário antes de entrar na chamada.", + "Give consent to the recording of this call" : "Dê consentimento para a gravação desta chamada", + "Show more info" : "Mostrar mais informações", + "Audio is not available" : "Áudio não está disponível", + "Video is not available" : "Vídeo não está disponível", + "Start recording immediately with the call" : "Iniciar a gravação imediatamente com a chamada", + "Recording backend is not installed" : "O back-end de gravação não está instalado", + "Notify all participants about this call" : "Notificar todos os participantes sobre esta chamada", + "Apply settings" : "Aplicar configurações", + "Select virtual office background" : "Selecionar o plano de fundo de escritório virtual", + "Select virtual home background" : "Selecionar o plano de fundo de casa virtual", + "Select virtual abstract background" : "Selecione o plano de fundo abstrato virtual", + "Select virtual beach background" : "Selecione o plano do fundo de praia virtual", + "Select virtual park background" : "Selecione o plano de fundo de parque virtual", + "Select virtual theater background" : "Selecionar o plano de fundo de teatro virtual", + "Select virtual library background" : "Selecione o plano de fundo de biblioteca virtual", + "Select virtual space station background" : "Selecionar o plano de fundo de estação espacial virtual", + "Error while uploading the file" : "Erro no upload do arquivo", + "Select a file" : "Selecionar um arquivo", + "Invalid path selected" : "Caminho inválido selecionado", + "Select virtual background from file {fileName}" : "Selecionar o plano de fundo virtual do arquivo {fileName}", + "Blur" : "Desfocar", + "Upload" : "Carregar", + "Files" : "Arquivos", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "A mensagem expirou ou foi excluída", + "Cancel quote" : "Cancelar citação", + "24 hours" : "24 horas", + "7 days" : "7 dias", + "30 days" : "30 dias", + "Until unpin" : "Até desfixar", + "Clear reminder – {timeLocale}" : "Limpar lembrete – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Pinned by you" : "Fixada por você", + "Pinned by {actor}" : "Fixada por {actor}", + "Until {absoluteDate}" : "Até {absoluteDate}", + "Message text copied to clipboard" : "Texto da mensagem copiado para a área de transferência", + "Message text could not be copied" : "Não foi possível copiar o texto da mensagem", + "Message forwarded to \"Note to self\"" : "Mensagem encaminhada para \"Nota para si mesmo\"", + "Error while forwarding message to \"Note to self\"" : "Erro ao encaminhar mensagem para \"Nota para si mesmo\"", + "A reminder was successfully removed" : "Um lembrete foi removido com sucesso", + "Error occurred when removing a reminder" : "Ocorreu um erro ao remover um lembrete", + "A reminder was successfully set at {datetime}" : "Um lembrete foi definido com sucesso em {datetime}", + "Error occurred when creating a reminder" : "Ocorreu um erro ao criar um lembrete", + "Add a reaction to this message" : "Adicionar uma reação a esta mensagem", + "Reply" : "Responder", + "More actions" : "Mais ações", + "Set reminder" : "Definir lembrete", + "Pin message" : "Fixar mensagem", + "Unpin message" : "Desfixar mensagem", + "Reply privately" : "Responda em particular", + "Edit message" : "Editar mensagem", + "Copy message" : "Copiar mensagem", + "Copy message link" : "Copiar link da mensagem", + "Go to file" : "Ir para o arquivo", + "Download file" : "Baixar arquivo", + "Go to thread" : "Ir para fio", + "Edit thread details" : "Editar detalhes do fio", + "Forward message" : "Encaminhar mensagem", + "Translate" : "Traduzir", + "Set custom reminder" : "Definir lembrete personalizado", + "Keep pinned for" : "Manter fixada para", + "Set custom period" : "Definir período personalizado", + "Close reactions menu" : "Fechar menu de reações", + "React with {emoji}" : "Reagir com {emoji}", + "React with another emoji" : "Reagir com outro emoji", + "Choose a conversation to forward the selected message." : "Escolha uma conversa para encaminhar a mensagem selecionada. ", + "Error while forwarding message" : "Erro ao encaminhar mensagem ", + "The message has been forwarded to {selectedConversationName}" : "A mensagem foi encaminhada para {selectedConversationName}", + "Dismiss" : "Dispensar", + "Go to conversation" : "Ir para a conversa ", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "A mensagem não pôde ser traduzida", + "Translation copied to clipboard" : "Tradução copiada para a área de transferência", + "Translation could not be copied" : "A tradução não pôde ser copiada", + "Translate message" : "Traduzir mensagem", + "Source language to translate from" : "Idioma de origem do qual traduzir", + "Translate from" : "Traduzir de", + "Target language to translate into" : "Idioma de destino para o qual traduzir", + "Translate to" : "Traduzir para", + "Translating" : "Traduzindo", + "This translation is AI generated and may contain mistakes." : "Esta tradução foi gerada por IA e pode conter erros.", + "Copy translated text" : "Copiar texto traduzido", + "Error when scheduling the message" : "Erro ao agendar a mensagem", + "Reschedule" : "Reagendar", + "Send now" : "Enviar agora", + "Choose a time" : "Escolha um horário", + "Send at custom time" : "Enviar em horário personalizado", + "Will be sent without notification" : "Será enviada sem notificação", + "Message read by everyone who shares their reading status" : "Mensagem lida por todos que compartilham seu status de leitura", + "Message sent" : "Mensagem enviada", + "Sent without notification" : "Enviada sem notificação", + "Deleting message" : "Excluindo mensagem", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Mensagem excluída com êxito, mas um bot ou Matterbridge está configurado e a mensagem pode já estar distribuída para outros serviços", + "Message deleted successfully" : "Mensagem excluída com sucesso", + "Message could not be deleted because it is too old" : "A mensagem não pôde ser excluída porque é muito antiga", + "Only normal chat messages can be deleted" : "Apenas mensagens normais de bate-papo podem ser excluídas", + "An error occurred while deleting the message" : "Ocorreu um erro ao excluir a mensagem", + "Pinned" : "Fixada", + "Your browser does not support playing audio files" : "Seu navegador não suporta a reprodução de arquivos de áudio", + "Contact" : "Contato", + "{stack} in {board}" : "{stack} de {board}", + "Deck Card" : "Cartão Deck", + "Remove {fileName}" : "Remover {fileName} ", + "Open this location in OpenStreetMap" : "Abrir este local no OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n resposta","%n de respostas","%n respostas"], + "Sending message" : "Enviando mensagem", + "Failed to send the message. Click to try again" : "Ocorreu um erro ao enviar a mensagem. Clique para tentar novamente.", + "Not enough free space to upload file" : "Espaço livre insuficiente para enviar o arquivo", + "You cannot send messages to this conversation at the moment" : "No momento, você não pode enviar mensagens para esta conversa", + "Could not update the message" : "Não foi possível atualizar a mensagem", + "Reply to thread \"{threadTitle}\"" : "Responder ao fio \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Você votou • %n voto","Você votou • %n de votos","Você votou • %n votos"], + "You voted" : "Você votou", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Clique para votar • %n voto","Clique para votar • %n de votos","Clique para votar • %n votos"], + "Click to vote" : "Clique para votar", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Rascunho de enquete • %n opção","Rascunho de enquete • %n opções","Rascunho de enquete • %n opções"], + "_%n vote_::_%n votes_" : ["%n voto","%n de votos","%n votos"], + "Edit poll draft" : "Editar o rascunho da enquete", + "Delete poll draft" : "Excluir o rascunho da enquete", + "Open poll" : "Enquete aberta", + "Closed poll" : "Enquete encerrada", + "See results" : "Ver resultados", + "Reactions" : "Reações", + "No permission to post reactions in this conversation" : "Sem permissão para postar reações nesta conversa", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e %n outro participante","e %n outros participantes","e %n outros participantes"], + "Show all reactions" : "Mostrar todas as reações", + "Add more reactions" : "Adicionar mais reações", + "Show or collapse system messages" : "Mostrar ou recolher mensagens do sistema", + "No messages" : "Sem mensagens", + "All messages have expired or have been deleted." : "Todas as mensagens expiraram ou foram excluídas.", + "Generate summary with AI" : "Gerar resumo com IA", + "{author} (pinned by you)" : "{author} (fixada por você)", + "{author} (pinned by {actor})" : "{author} (fixada por {actor})", + "Unpin" : "Desfixar", + "Cancel search" : "Cancelar pesquisa", + "Add a phone number" : "Adicionar um número de telefone", + "Error: A password is required to create the conversation." : "Erro: É necessária uma senha para criar a conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Tudo pronto, a conversa \"{conversationName}\" foi criada.", + "Create a new group conversation" : "Criar um novo grupo de conversa", + "Add participants" : "Adicionar participantes", + "Maximum length exceeded ({maxlength} characters)" : "Comprimento máximo excedido ({maxlength} caracteres)", + "Conversation type" : "Tipo de conversa", + "Conversation visibility" : "Visibilidade da conversa", + "Allow guests to join via link" : "Permitir que convidados participem via link", + "Enter password" : "Digite a senha ", + "This conversation has been locked" : "Esta conversa foi trancada", + "No permission to post messages in this conversation" : "Sem permissão para postar mensagens nesta conversa", + "Joining conversation …" : "Entrando na conversa...", + "Write a message without notification" : "Escreva uma mensagem sem notificação", + "Create a thread silently" : "Criar um fio silenciosamente", + "Create a thread" : "Criar um fio", + "Send message silently" : "Enviar mensagem silenciosamente", + "Send message" : "Enviar mensagem", + "Send without notification" : "Enviar sem notificação", + "The participant will not be notified about new messages" : "O participante não será notificado sobre novas mensagens", + "Participants will not be notified about new messages" : "Participantes não serão notificados sobre novas mensagens", + "Message will be sent {datetimeString}" : "A mensagem será enviada em {datetimeString}", + "Thread title is required" : "O título do fio é obrigatório", + "Message text is required" : "O texto da mensagem é obrigatório", + "The message could not be edited" : "A mensagem não pôde ser editada", + "File to share" : "Arquivo a compartilhar", + "File upload is not available in this conversation" : "O upload de arquivo não está disponível nesta conversa", + "Message was successfully scheduled" : "A mensagem foi agendada com êxito", + "Add emoji" : "Adicionar emoji", + "Adding a mention will only notify users who did not read the message." : "Adicionar uma menção notificará apenas os usuários que não leram a mensagem.", + "Thread title" : "Título do fio", + "Send later" : "Enviar mais tarde", + "Show scheduled messages" : "Mostrar mensagens agendadas", + "Cancel editing" : "Cancelar edição", + "Schedule message" : "Agendar mensagem", + "{user} is out of office and might not respond." : "{user}está fora do escritório e talvez não responda.", + "Absence period: {startDate} - {endDate}" : "Período de ausência: {startDate} - {endDate}", + "Replacement:" : "Subsituto:", + "Share from {nextcloud}" : "Compartilhar de {nextcloud}", + "Share from Files" : "Compartilhar de Arquivos", + "Share files to the conversation" : "Compartilhar arquivos na conversa", + "Upload from device" : "Fazer upload do dispositivo", + "Create new poll" : "Criar nova enquete", + "Smart picker" : "Seletor inteligente", + "Record voice message" : "Gravar mensagem de voz", + "End recording and send" : "Terminar a gravação e enviar", + "Dismiss recording" : "Dispensar gravação", + "Access to the microphone was denied" : "Acesso ao microfone foi negado", + "Microphone either not available or disabled in settings" : "Microfone ou não disponível ou está desativado nas configurações", + "Error while recording audio" : "Erro ao gravar áudio", + "Voice message {time} ({conversation})" : "Mensagem de voz {time} ({conversation})", + "Generating summary of unread messages …" : "Geração de resumo de mensagens não lidas …", + "Summary is AI generated and might contain mistakes" : "O resumo é gerado por IA e pode conter erros", + "Error occurred during a summary generation" : "Ocorreu um erro durante a geração de um resumo", + "New file" : "Novo arquivo", + "Blank" : "Vazio", + "Error while creating file" : "Erro ao criar arquivo", + "Create and share a new file" : "Criar e compartilhar um novo arquivo", + "Name of the new file" : "Nome do novo arquivo", + "Create file" : "Criar arquivo", + "Someone is typing …" : "Alguém está digitando …", + "{user1} is typing …" : "{user1} está digitando …", + "{user1} and {user2} are typing …" : "{user1} e {user2} estão digitando …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} estão digitando …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n outro estão digitando …","{user1}, {user2}, {user3} e %n outros estão digitando …","{user1}, {user2}, {user3} e %n outros estão digitando …"], + "Add more files" : "Adicionar mais arquivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "Nesta conversa, {user} pode:", + "Edit default permissions for participants in {conversationName}" : "Editar permissões padrão para participantes em {conversationName}", + "Start a call" : "Iniciar uma chamada", + "Skip the lobby" : "Pular a sala de espera", + "Can post messages" : "Pode postar mensagens", + "Can post messages and reactions" : "Postar mensagens e reações", + "Can add reactions" : "Pode adicionar reações", + "Enable the microphone" : "Ativar o microfone", + "Enable the camera" : "Ativar a câmera", + "Share the screen" : "Compartilhar a tela ", + "Update permissions" : "Atualizar permissões", + "Updating permissions" : "Atualizando permissões", + "No poll drafts" : "Sem rascunhos de enquetes", + "There is no poll drafts yet saved for this conversation" : "Ainda não há rascunhos de enquete salvos para esta conversa", + "Create poll in {name}" : "Criar enquete em {name}", + "Create poll" : "Criar enquete", + "Error while importing poll" : "Erro ao importar enquete", + "Question" : "Pergunta", + "Ask a question" : "Faça uma pergunta", + "Import draft from file" : "Importar rascunho do arquivo", + "Answers" : "Respostas", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Excluir opção de enquete", + "Add answer" : "Adicionar resposta", + "Settings" : "Configurações", + "Anonymous poll" : "Enquete anônima", + "Multiple answers" : "Respostas múltiplas", + "Save as draft" : "Salvar como rascunho", + "Export draft to file" : "Exportar rascunho para arquivo", + "_Final results • %n vote_::_Final results • %n votes_" : ["Resultados finais • %n voto","Resultados finais • %n de votos","Resultados finais • %n votos"], + "Your vote is anonymous" : "Seu voto é anônimo", + "You voted for this option" : "Você votou nesta opção", + "End poll" : "Encerrar enquete", + "Change your vote" : "Alterar seu voto", + "Withdraw vote" : "Retirar voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votantes", + "Send a message to \"{roomName}\"" : "Enviar uma mensagem para \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Exibir lista de participantes", + "Assistance requested in {roomName}" : "Assistência solicitada em {roomName}", + "The message was sent to \"{roomName}\"" : "A mensagem foi enviada para \"{roomName}\"", + "Dismiss request for assistance" : "Dispensar pedido de assistência", + "Send message to room" : "Enviar mensagem para sala", + "Back to main room" : "Voltar à sala principal", + "Back to your room" : "Voltar à sua sala", + "Message all rooms" : "Mensagem para todas as salas", + "Start session" : "Iniciar sessão", + "Start a call before you start a breakout room session" : "Inicie uma chamada antes de você iniciar uma sessão de sala temática", + "Stop session" : "Encerrar sessão", + "The message was sent to all breakout rooms" : "A mensagem foi enviada para todas as salas temáticas", + "Send a message to all breakout rooms" : "Enviar uma mensagem para todas as salas temáticas", + "Breakout rooms are not started" : "As salas temáticas não foram iniciadas.", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Chamadas sem back-end de alto desempenho podem causar problemas de conectividade e alta carga nos dispositivos. {linkstart}Saiba mais{linkend}", + "Talk setup incomplete" : "Configuração do Talk incompleta", + "Disable lobby" : "Desativar sala de espera", + "Settings for participant \"{user}\"" : "Configurações para o participante \"{user}\"", + "Participant \"{user}\"" : "Participante \"{user}\"", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "convidado", + "Ringing …" : "Tocando …", + "Call rejected" : "Chamada rejeitada", + "{time} talking …" : "Conversando por {time} …", + "{time} talking time" : "{time} de tempo de conversa", + "Raised their hand" : "Levantou a mão", + "Joined with video" : "Entrou com video", + "Joined via phone" : "Entrou via telefone", + "Joined with audio" : "Entrou com áudio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "O texto deve ter menos ou igual a {maxLength} caracteres. Seu texto atual tem {charactersCount} caracteres.", + "Remove group and members" : "Remover grupo e membros", + "Remove team and members" : "Remover equipe e membros", + "Remove participant" : "Remover participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Você realmente deseja remover o grupo \"{displayName}\" e seus membros desta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Você realmente deseja remover a equipe \"{displayName}\" e seus membros desta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Você realmente deseja remover {displayName} desta conversa?", + "Notification was sent to {displayName}" : "A notificação foi enviada para {displayName}", + "Could not send notification to {displayName}" : "Não foi possível enviar a notificação para {displayName}", + "Permissions granted to {displayName}" : "Permissões concedidas a {displayName} ", + "Could not modify permissions for {displayName}" : "Não foi possível modificar as permissões para {displayName} ", + "Permissions removed for {displayName}" : "Permissões removidas para {displayName} ", + "Permissions set to default for {displayName}" : "Permissões definidas como padrão para {displayName}", + "Phone number could not be hung up" : "Não foi possível desligar o número de telefone", + "Phone number could not be put on hold" : "Não foi possível colocar o número de telefone em espera", + "Phone number could not be muted" : "Não foi possível silenciar o número de telefone", + "Phone number could not be unmuted" : "Não foi possível ativar o som do número de telefone", + "DTMF message could not be sent" : "A mensagem DTMF não pôde ser enviada", + "Phone number copied to clipboard" : "Número de telefone copiado para a área de transferência", + "Phone number could not be copied" : "Não foi possível copiar o número de telefone", + "in the lobby" : "na sala de espera", + "Dial out phone" : "Discar telefone", + "Hang up phone" : "Desligar telefone", + "Move back to lobby" : "Voltar para a sala de espera", + "Move to conversation" : "Mover para conversa", + "Dial-in PIN" : "PIN de discagem", + "Demote from moderator" : "Excluído da moderação", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Reenviar convite", + "Send call notification" : "Enviar notificação de chamada", + "Dial out phone number" : "Disque o número de telefone", + "Resume call for phone number" : "Retomar chamada para número de telefone", + "Put phone number on hold" : "Colocar número de telefone em espera", + "Unmute phone number" : "Dessilenciar número de telefone", + "Mute phone number" : "Silenciar número de telefone", + "Copy phone number" : "Copiar número de telefone", + "Reset custom permissions" : "Redefinir permissões personalizadas", + "Grant all permissions" : "Conceder todas as permissões", + "Remove all permissions" : "Remover todas as permissões", + "Also ban from this conversation" : "Também banir desta conversa", + "Internal note (reason to ban)" : "Nota interna (motivo para banimento)", + "Remove" : "Remover", + "Permissions modified for {displayName}" : "Permissões modificadas para {displayName} ", + "Add users, groups or teams" : "Adicionar usuários, grupos ou equipes", + "Add users or groups" : "Adicionar usuários ou grupos", + "Add users or teams" : "Adicionar usuários ou equipes", + "Add users" : "Adicionar usuários", + "Add groups or teams" : "Adicionar grupos ou equipes", + "Add groups" : "Adicionar grupos", + "Add teams" : "Adicionar equipes", + "Add other sources" : "Adicionar outras fontes", + "Add emails" : "Adicionar e-mails", + "Integrations" : "Integrações", + "Add federated users" : "Adicionar usuários federados", + "Searching …" : "Pesquisando...", + "Search for more users" : "Pesquisar por mais usuários", + "You can search or add participants via name, email, or Federated Cloud ID" : "Você pode pesquisar ou adicionar participantes por nome, e-mail ou ID de Nuvem Federada", + "Search or add participants" : "Procure ou adicione participantes", + "Invitation was sent to {actorId}" : "O convite foi enviado para {actorId}", + "An error occurred while adding the participants" : "Ocorreu um erro ao adicionar os participantes", + "A new group conversation with selected participant will be created" : "Será criada uma nova conversa de grupo com o participante selecionado", + "Participants" : "Participantes", + "Pinned by a deleted user" : "Fixada por um usuário excluído", + "Participants ({count})" : "Participantes ({count}) ", + "Open chat" : "Abrir bate-papo", + "You have new unread messages in the chat." : "Você tem novas mensagens não lidas no bate-papo.", + "You have been mentioned in the chat." : "Você foi mencionado no bate-papo.", + "Search messages" : "Pesquisar mensagens", + "Chat" : "Conversa", + "Details" : "Detalhes", + "Shared items" : "Itens compartilhados", + "Search in {name}" : "Pesquisar em {name}", + "Threads in {name}" : "Fios em {name}", + "{actor} in {conversation}" : "{actor} em {conversation}", + "Search messages …" : "Pesquisar mensagens …", + "Search options" : "Opções de pesquisa", + "From User" : "Do Usuário", + "Since" : "Desde", + "Until" : "Até", + "No results found" : "Nenhum resultado encontrado", + "Load more results" : "Carregar mais resultados ", + "Recent threads" : "Fios recentes", + "Projects" : "Projetos", + "No shared items" : "Nenhum item compartilhado", + "Thread notifications" : "Notificações de fios", + "Thread actions" : "Ações de fios", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link para uma conversa", + "No open conversations found" : "Nenhuma conversa aberta encontrada", + "Either there are no open conversations or you joined all of them." : "Ou não há conversas abertas ou você entrou em todas elas.", + "Check spelling or use complete words." : "Verifique a ortografia ou use palavras completas.", + "Search conversations or users" : "Pesquisar conversas ou usuários", + "Select conversation" : "Selecionar conversa", + "Number length is not valid" : "O comprimento do número não é válido", + "Region code is not valid" : "O código de região não é válido", + "Number length is too short" : "O comprimento do número é muito curto", + "Number length is too long" : "O comprimento do número é muito longo", + "Number is not valid" : "O número não é válido", + "Phone numbers" : "Números de telefone", + "Display name: {name}" : "Nome de exibição: {name}", + "Edit display name" : "Editar nome de exibição", + "Display name (required)" : "Nome de exibição (obrigatório)", + "Save name" : "Salvar o nome", + "I picked message bubbles" : "Eu escolhi balões de mensagem", + "I picked the list style" : "Eu escolhi o estilo em lista", + "Error while setting personal setting" : "Erro ao definir a configuração pessoal", + "Error while saving sounds setting" : "Erro ao salvar configuração de sons ", + "Compact conversations list" : "Lista de conversas compacta", + "Chat appearance" : "Aparência de bate-papos", + "Messages list" : "Lista de mensagens", + "Message bubbles" : "Balões de mensagem", + "Play sounds when participants join or leave a call" : "Reproduzir sons quando os participantes entram ou saem de uma chamada", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Atualmente indisponível no iPhone e iPad devido a restrições técnicas do fabricante", + "Notification settings" : "Configurações de notificação", + "Sounds for chat and call notifications" : "Sons para notificações de bate-papos e chamadas", + "Invalid language ({languageId})" : "Idioma inválido ({languageId})", + "Default language" : "Idioma padrão", + "Default language ({languageName})" : "Idioma padrão ({languageName})", + "Error when trying to load the available live translation languages" : "Erro ao tentar carregar os idiomas de tradução em tempo real disponíveis", + "Error when trying to set live translation language" : "Erro ao tentar definir o idioma da tradução em tempo real", + "Set language used to show the transcriptions" : "Definir o idioma usado para mostrar as transcrições", + "Select location for attachments" : "Selecionar localização para os anexos", + "Error while setting attachment folder" : "Erro ao definir a pasta do anexo", + "Error while setting read status privacy" : "Ocorreu um erro ao definir a privacidade do status de leitura", + "Error while setting typing status privacy" : "Erro ao definir a privacidade do status de digitação", + "Error while setting default media state" : "Erro ao definir o estado de mídia padrão", + "Turn camera and microphone off by default" : "Desativar câmera e microfone por padrão", + "Blur camera background by default" : "Desfocar o fundo da câmera por padrão", + "Skip device preview before joining a call" : "Pular a pré-visualização dos dispositivos antes de entrar em uma chamada", + "Camera will be turned off when joining. Always shown if recording consent is required." : "A câmera será desligada ao entrar na chamada. Será sempre exibido se for necessário consentimento para a gravação.", + "Appearance & Sounds" : "Aparência & Sons", + "Privacy" : "Privacidade", + "Send read receipts" : "Enviar confirmação de recebimento", + "When off, all read statuses will be hidden" : "Quando desativado, todos os status de leitura serão ocultados", + "Share typing status" : "Compartilhar status de digitação", + "When off, all typing indicators will be hidden" : "Quando desativado, todos os indicadores de digitação serão ocultados", + "Attachments folder" : "Pasta para os anexos", + "Toggle full screen" : "Alternar modo de tela cheia", + "Return to Home screen" : "Voltar à página inicial", + "Search" : "Pesquisar", + "Shortcuts while in a chat" : "Atalhos durante um bate-bapo", + "Focus the chat input" : "Foco na entrada do bate-papo", + "Unfocus the chat input to use shortcuts" : "Desfoque a entrada do bate-papo para usar atalhos", + "Edit your last message" : "Editar sua última mensagem", + "Shortcuts while in a call" : "Atalhos durante a chamada", + "Camera on and off" : "Câmera ligada e desligada", + "Microphone on and off" : "Microfone ligado e desligado", + "Raise or lower hand" : "Levantar ou baixar a mão", + "Push to talk or push to mute" : "Aperte para falar ou para deixar mudo", + "Zoom-in / zoom-out a screen share" : "Aumentar / diminuir o zoom de um compartilhamento de tela", + "Mouse wheel" : "Roda do mouse", + "Start call silently" : "Iniciar chamada silenciosamente", + "Start call" : "Iniciar chamada", + "End call" : "Encerrar chamada", + "The server was updated, you cannot start or join a call." : "O servidor foi atualizado, você não pode iniciar ou participar de uma chamada.", + "This call has just ended" : "Esta chamada acabou de terminar", + "You will be able to join the call only after a moderator starts it." : "Você só poderá entrar na chamada depois que um moderador a iniciar.", + "End call for everyone" : "Encerrar chamada para todos", + "Starting the recording" : "Iniciando a gravação", + "Recording" : "Gravação", + "The call has been running for one hour." : "A chamada está em andamento há uma hora.", + "Cancel recording start" : "Cancelar início da gravação", + "Stop recording" : "Encerrar gravação", + "Send a reaction" : "Enviar reação", + "React with {reaction}" : "Reagir com {reaction}", + "All tasks done!" : "Todas as tarefas concluídas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarefa","{done} de %n tarefas","{done} de %n tarefas"], + "Add participants to this call" : "Adicionar participantes a esta chamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante na chamada","%n participantes na chamada","%n participantes na chamada"], + "Scheduled messages" : "Mensagens agendadas", + "You are not allowed to enable screensharing" : "Você não tem permissão para ativar o compartilhamento de tela", + "No screensharing" : "Sem compartilhamento de tela", + "Screensharing options" : "Opções de compartilhamento de tela", + "Enable screensharing" : "Ativar compartilhamento de tela", + "Bad sent video and screen quality." : "Má qualidade de vídeo e tela enviados.", + "Bad sent screen quality." : "Má qualidade da tela enviada.", + "Bad sent video quality." : "Má qualidade de vídeo enviada.", + "Bad sent audio, video and screen quality." : "Má qualidade de áudio, vídeo e tela enviados.", + "Bad sent audio and screen quality." : "Má qualidade de áudio e tela enviados.", + "Bad sent audio and video quality." : "Má qualidade de áudio e vídeo enviados.", + "Bad sent audio quality." : "Má qualidade de áudio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam ver sua tela. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo ao fazer um compartilhamento de tela.", + "Disable background blur" : "Desativar o desfoque do plano de fundo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam ver sua tela. Para melhorar a situação, tente desativar seu vídeo ao fazer um compartilhamento de tela.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver sua tela.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver você.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender e ver você. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo ao fazer um compartilhamento de tela. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver e entender você. Para melhorar a situação, tente desativar seu vídeo ao fazer um compartilhamento de tela.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender você e ver sua tela. Para melhorar a situação, tente desativar o compartilhamento de tela. ", + "Disable screenshare" : "Desativar compartilhamento de tela", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender e ver você. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver e entender você. Para melhorar a situação, tente desativar seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam entender você.", + "Screen sharing is not supported by your browser." : "O compartilhamento de tela não é suportado pelo seu navegador.", + "Screen sharing requires the page to be loaded through HTTPS." : "O compartilhamento de tela exige que a página seja carregada por HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "O compartilhamento de tela requer que a página seja carregada através de HTTPS.", + "An error occurred while starting screensharing." : "Ocorreu um erro ao iniciar o compartilhamento de tela.", + "Select virtual background" : "Selecionar fundo virtual", + "Show your screen" : "Exibir sua tela", + "Stop screensharing" : "Encerrar compartilhamento da tela", + "Mute others" : "Silenciar outros", + "Start recording" : "Iniciar gravação", + "Set up breakout rooms" : "Criar salas temáticas", + "Download attendance list" : "Baixar a lista de presença", + "Open Calendar" : "Abrir Calendário", + "Remove participant {name}" : "Remover participante {name}", + "Would you like to delete this conversation?" : "Você gostaria de excluir esta conversa?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Esta conversa será automaticamente excluída para todos após %n dia de inatividade.","Esta conversa será automaticamente excluída para todos após %n de dias de inatividade.","Esta conversa será automaticamente excluída para todos após %n dias de inatividade."], + "Are you sure you want to delete this conversation?" : "Tem certeza de que deseja excluir esta conversa?", + "Delete now" : "Excluir agora", + "Keep" : "Manter", + "Open dialpad" : "Abrir teclado de discagem", + "Select a region" : "Selecionar uma região", + "Local time: {time}" : "Horário local: {time}", + "Scheduled {datetime}" : "Agendado {datetime}", + "Scheduled for {datetime}" : "Agendado para {datetime}", + "Search …" : "Pesquisar …", + "Message without mention" : "Mensagem sem menção", + "Mention myself" : "Mencionar-me", + "Mention everyone" : "Mencionar todo mundo", + "Select a conversation" : "Selecionar uma conversa", + "Select a mode" : "Selecionar um modo", + "You do not have permissions to access this conversation." : "Você não tem permissões para acessar esta conversa.", + "Join a different conversation or start a new one." : "Entre em uma conversa diferente ou inicie uma nova.", + "The conversation does not exist" : "A conversa não existe", + "Join a conversation or start a new one!" : "Juntar-se à uma conversa ou iniciar um nova!", + "Duplicate session" : "Sessão duplicada", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Esta conversa foi aberta em outra aba. A versão atual do servidor não suporta a abertura de uma conversa em várias abas.", + "Creating and joining a conversation with \"{userid}\"" : "Criando e entrando em uma conversa com \"{userid}\"", + "Join a conversation or start a new one" : "Entre em uma conversa ou inicie outra", + "Error while joining the conversation" : "Erro ao entrar na conversa", + "Another user" : "Outro usuário", + "Hey! Are you using the list style or message bubbles?" : "Ei! Você está usando o estilo em lista ou balões de mensagem?", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Usuário Nextcloud", + "User password" : "Senha do usuário", + "Talk conversation" : "Conversa Talk", + "Skip TLS verification" : "Ignorar verificação TLS", + "Matrix server URL" : "URL do servidor Matrix", + "User" : "Usuário", + "Matrix channel" : "Canal Matrix", + "Mattermost server URL" : "URL do servidor Mattermost", + "Mattermost user" : "Usuário Mattermost", + "Team name" : "Nome do team", + "Channel name" : "Nome do canal", + "Rocket.Chat server URL" : "URL do servidor Rocket.Chat", + "User name or email address" : "Nome de usuário ou endereço de e-mail ", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL do servidor Zulip", + "Bot user name" : "Nome do usuário Bot", + "Bot API key" : "Chave API do BOT", + "Zulip channel" : "Canal Zulip", + "API token" : "Token de API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "Nome ou ID do servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID do canal (prefixado com \"ID:\") ou nome", + "Channel" : "Canal", + "Login" : "Login", + "Chat ID" : "ID do Chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL do servidor IRC (por ex. chat.freenode.net:6667)", + "Nickname" : "Apelido", + "Connection password" : "Senha de conexão", + "IRC channel" : "Canal IRC", + "Channel password" : "Senha do canal", + "NickServ nickname" : "Apelido do NickServ", + "NickServ password" : "Senha do NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID do Tenant", + "Client ID" : "ID do cliente", + "Team ID" : "ID do Team", + "Thread ID" : "ID da Thread", + "XMPP/Jabber server URL" : "URL do servidor XMPP/Jabber", + "MUC server URL" : "URL do servidor MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Mensagem fixada", + "Media" : "Mídia", + "Polls" : "Enquetes", + "Deck cards" : "Cartões de Deck", + "Voice messages" : "Mensagens de voz", + "Locations" : "Localizações", + "Call recordings" : "Gravações de chamadas", + "Audio" : "Áudio", + "Show all pinned messages" : "Mostrar todas as mensagens fixadas", + "Show all media" : "Mostrar todas as mídias", + "Show all files" : "Mostrar todos os arquivos", + "Show all polls" : "Mostrar todas as enquetes", + "Show all deck cards" : "Mostrar todos os cartões de Deck", + "Show all voice messages" : "Mostrar todas as mensagens de voz", + "Show all locations" : "Mostrar todas as localizações", + "Show all call recordings" : "Mostrar todas as gravações", + "Show all audio" : "Mostrar todos o áudios", + "Show all other" : "Mostrar todos os outros", + "Follow conversation settings" : "Seguir as configurações da conversa", + "Group" : "Grupo", + "Team" : "Equipe", + "You reconnected to the call" : "Você se reconectou à chamada", + "{actor} reconnected to the call" : "{actor} se reconectou à chamada", + "You added {user0} and {user1}" : "Você adicionou {user0} e {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Você adicionou {user0}, {user1} e mais %n participante","Você adicionou {user0}, {user1} e mais %n participantes","Você adicionou {user0}, {user1} e mais %n participantes"], + "An administrator added you and {user0}" : "Um administrador adicionou você e {user0}", + "{actor} added you and {user0}" : "{actor} adicionou você e {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Um administrador adicionou você, {user0} e mais %n participante","Um administrador adicionou você, {user0} e mais %n participantes","Um administrador adicionou você, {user0} e mais %n participantes"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} adicionou você, {user0} e mais %n participante","{actor} adicionou você, {user0} e mais %n participantes","{actor} adicionou você, {user0} e mais %n participantes"], + "An administrator added {user0} and {user1}" : "Um administrador adicionou {user0} e {user1}", + "{actor} added {user0} and {user1}" : "{actor} adicionou {user0} e {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Um administrador adicionou {user0}, {user1} e mais %n participante","Um administrador adicionou {user0}, {user1} e mais %n participantes","Um administrador adicionou {user0}, {user1} e mais %n participantes"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} adicionou {user0}, {user1} e mais %n participante","{actor} adicionou {user0}, {user1} e mais %n participantes","{actor} adicionou {user0}, {user1} e mais %n participantes"], + "You removed {user0} and {user1}" : "Você removeu {user0} e {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Você removeu {user0}, {user1} e mais %n participante","Você removeu {user0}, {user1} e mais %n participantes","Você removeu {user0}, {user1} e mais %n participantes"], + "An administrator removed you and {user0}" : "Um administrador removeu você e {user0}", + "{actor} removed you and {user0}" : "{actor} removeu você e {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Um administrador removeu você, {user0} e mais %n participante","Um administrador removeu você, {user0} e mais %n participantes","Um administrador removeu você, {user0} e mais %n participantes"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removeu você, {user0} e mais %n participante","{actor} removeu você, {user0} e mais %n participantes","{actor} removeu você, {user0} e mais %n participantes"], + "An administrator removed {user0} and {user1}" : "Um administrador removeu {user0} e {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removeu {user0} e {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Um administrador removeu {user0}, {user1} e mais %n participante","Um administrador removeu {user0}, {user1} e mais %n participantes","Um administrador removeu {user0}, {user1} e mais %n participantes"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removeu {user0}, {user1} e mais %n participante","{actor} removeu {user0}, {user1} e mais %n participantes","{actor} removeu {user0}, {user1} e mais %n participantes"], + "You and {user0} joined the call" : "Você e {user0} entraram na chamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Você, {user0} e mais %n participante entraram na chamada","Você, {user0} e mais %n participantes entraram na chamada","Você, {user0} e mais %n participantes entraram na chamada"], + "{user0} and {user1} joined the call" : "{user0} e {user1} entraram na chamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e mais %n participante entraram na chamada","{user0}, {user1} e mais %n participantes entraram na chamada","{user0}, {user1} e mais %n participantes entraram na chamada"], + "You and {user0} left the call" : "Você e {user0} saíram da chamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Você, {user0} e mais %n participante saíram a chamada","Você, {user0} e mais %n participantes saíram a chamada","Você, {user0} e mais %n participantes saíram a chamada"], + "{user0} and {user1} left the call" : "{user0} e {user1} saíram a chamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e mais %n participante saíram a chamada","{user0}, {user1} e mais %n participantes saíram a chamada","{user0}, {user1} e mais %n participantes saíram a chamada"], + "You promoted {user0} and {user1} to moderators" : "Você promoveu {user0} e {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Você promoveu {user0}, {user1} e mais %n participante a moderadores","Você promoveu {user0}, {user1} e mais %n participantes a moderadores","Você promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Um administrador promoveu você e {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveu você e {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Um administrador promoveu você, {user0} e mais %n participante a moderadores","Um administrador promoveu você, {user0} e mais %n participantes a moderadores","Um administrador promoveu você, {user0} e mais %n participantes a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoveu você, {user0} e mais %n participante a moderadores","{actor} promoveu você, {user0} e mais %n participantes a moderadores","{actor} promoveu você, {user0} e mais %n participantes a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Um administrador promoveu {user0} e {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoveu {user0} e {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Um administrador promoveu {user0}, {user1} e mais %n participante a moderadores","Um administrador promoveu {user0}, {user1} e mais %n participantes a moderadores","Um administrador promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoveu {user0}, {user1} e mais %n participante a moderadores","{actor} promoveu {user0}, {user1} e mais %n participantes a moderadores","{actor} promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Você rebaixou {user0} e {user1} de moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Você rebaixou {user0}, {user1} e mais %n participante de moderadores","Você rebaixou {user0}, {user1} e mais %n participantes de moderadores","Você rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "An administrator demoted you and {user0} from moderators" : "Um administrador rebaixou você e {user0} de moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} rebaixou você e {user0} de moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Um administrador rebaixou você, {user0} e mais %n participante de moderadores","Um administrador rebaixou você, {user0} e mais %n participantes de moderadores","Um administrador rebaixou você, {user0} e mais %n participantes de moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} rebaixou você, {user0} e mais %n participante de moderadores","{actor} rebaixou você, {user0} e mais %n participantes de moderadores","{actor} rebaixou você, {user0} e mais %n participantes de moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Um administrador rebaixou {user0} e {user1} de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} rebaixou {user0} e {user1} de moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Um administrador rebaixou {user0}, {user1} e mais %n participante de moderadores","Um administrador rebaixou {user0}, {user1} e mais %n participantes de moderadores","Um administrador rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} rebaixou {user0}, {user1} e mais %n participante de moderadores","{actor} rebaixou {user0}, {user1} e mais %n participantes de moderadores","{actor} rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "You:" : "Você:", + "You: {lastMessage}" : "Você: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "O servidor foi atualizado.", + "(edited by you)" : "(editado por você)", + "(edited by a deleted user)" : "(editado por um usuário excluído)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Você está tentando ingressar em uma conversa enquanto realiza uma sessão ativa em outra janela ou dispositivo. No momento, isso não é suportado pelo Nextcloud Talk. O que você deseja fazer?", + "Leave this page" : "Sair desta página", + "Join here" : "Ingressar aqui", + "Deck card has been posted to {conversation}" : "O cartão do Deck foi postada em {conversation}", + "An error occurred while posting deck card to conversation" : "Ocorreu um erro ao postar o cartão do Deck na conversa", + "Post to a conversation" : "Postar em uma conversa", + "Post to conversation" : "Postar na conversa", + "The recording failed. Please contact your administrator." : "A gravação falhou. Por favor, contate seu administrador.", + "Location has been posted to {conversation}" : "O localização foi postado em {conversation}", + "An error occurred while posting location to conversation" : "Ocorreu um erro ao postar a localização na conversa", + "Share to a conversation" : "Compartilhar em uma conversa", + "Share to conversation" : "Compartilhar na conversa", + "In conversation" : "Em conversação", + "Search in conversation: {conversation}" : "Pesquisar na conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Suas solicitações estão limitadas no momento devido à proteção contra força bruta", + "Error while clearing conversation history" : "Erro ao limpar o histórico da conversa ", + "Error occurred while allowing guests" : "Erro ocorrido ao permitir convidados", + "Error occurred while disallowing guests" : "Erro ocorrido ao não permitir convidados", + "Error occurred when restricting the conversation to moderator" : "Ocorreu um erro ao restringir a conversa ao moderador", + "Error occurred when opening the conversation to everyone" : "Ocorreu um erro ao abrir a conversa para todos", + "Conversation password has been saved" : "A senha da conversa foi salva", + "Conversation password has been removed" : "A senha da conversa foi removida", + "Error occurred while saving conversation password" : "Ocorreu um erro ao salvar a senha da conversa", + "Call recording is starting." : "Iniciando gravação da chamada.", + "Call recording stopped while starting." : "A gravação da chamada foi interrompida ao iniciar.", + "Call recording stopped. You will be notified once the recording is available." : "A gravação da chamada foi interrompida. Você será notificado assim que a gravação estiver disponível.", + "Conversation picture set" : "Imagem da conversa definida", + "Conversation picture deleted" : "Imagem da conversa excluída", + "Could not delete the conversation picture" : "Não foi possível excluir a imagem da conversa", + "Could not remove the automatic expiration" : "Não foi possível remover a expiração automática", + "Could not post message: {errorMessage}" : "Não foi possível postar a mensagem: {errorMessage}", + "Participant is banned successfully" : "Participante está banido com sucesso", + "Error while banning the participant" : "Erro ao banir o participante", + "An error occurred while fetching the participants" : "Erro ao buscar os participantes", + "Could not send invitation to {actorId}" : "Não foi possível enviar o convite para {actorId}", + "Invitations sent" : "Convites enviados", + "Error occurred when sending invitations" : "Ocorreu um erro ao enviar convites", + "Failed to join the conversation." : "Falha ao entrar na conversa.", + "An error occurred while creating breakout rooms" : "Ocorreu um erro ao criar salas temáticas", + "An error occurred while re-ordering the attendees" : "Ocorreu um erro ao reordenar os participantes", + "An error occurred while deleting breakout rooms" : "Ocorreu um erro ao excluir salas temáticas", + "An error occurred while starting breakout rooms" : "Ocorreu um erro ao iniciar salas temáticas", + "An error occurred while stopping breakout rooms" : "Ocorreu um erro ao interromper salas temáticas", + "An error occurred while sending a message to the breakout rooms" : "Ocorreu um erro ao enviar uma mensagem para as salas temáticas", + "An error occurred while requesting assistance" : "Ocorreu um erro ao solicitar assistência", + "An error occurred while resetting the request for assistance" : "Ocorreu um erro ao redefinir o pedido de assistência", + "An error occurred while joining breakout room" : "Ocorreu um erro ao entrar na sala temática", + "Failed to rename the thread" : "Falha ao renomear o fio", + "Error fetching upcoming events" : "Erro ao buscar próximos eventos", + "Error fetching upcoming reminders" : "Erro ao buscar próximos lembretes", + "An error occurred while accepting an invitation" : "Ocorreu um erro ao aceitar um convite", + "An error occurred while rejecting an invitation" : "Ocorreu um erro ao rejeitar um convite", + "{guest} (guest)" : "{guest} (convidado)", + "Poll draft has been saved" : "O rascunho da enquete foi salva", + "An error occurred while saving the draft" : "Ocorreu um erro ao salvar o rascunho", + "An error occurred while submitting your vote" : "Um erro ocorreu ao enviar seu voto", + "An error occurred while ending the poll" : "Ocorreu um erro ao encerrar a enquete", + "An error occurred while deleting the poll draft" : "Ocorreu um erro ao excluir o rascunho da enquete", + "Poll \"{name}\" was created by {user}. Click to vote" : "A enquete \"{name}\" foi criada por {user}. Clique para votar", + "Failed to add reaction" : "Falha ao adicionar reação", + "Failed to remove reaction" : "Falha ao remover reação", + "The server is in maintenance mode." : "O servidor está em modo de manutenção.", + "Federated server was updated." : "O servidor federado foi atualizado.", + "Error while uploading file \"{fileName}\"" : "Erro ao enviar o arquivo \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Espaço livre insuficiente para enviar o arquivo \"{fileName}\"", + "You are not allowed to share files" : "Você não tem permissão para compartilhar arquivos", + "Error while sharing file" : "Erro ao compartilhar arquivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "O navegador que você está usando não possui suporte completo pelo Nextcloud Talk. Use a última versão do Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Em %n hora","Em %n horas","Em %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos","%n minutos"], + "In {hours} and {minutes}" : "Em {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["Em %n minuto","Em %n minutos","Em %n minutos"], + "Later today – {timeLocale}" : "Hoje mais tarde – {timeLocale}", + "Set time for later today" : "Definir um horário para mais tarde hoje", + "Tomorrow – {timeLocale}" : "Amanhã – {timeLocale}", + "Set time for tomorrow" : "Definir um horário para amanhã", + "This weekend – {timeLocale}" : "Este fim de semana – {timeLocale}", + "Set time for this weekend" : "Definir um horário para este fim de semana", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Set time for next week" : "Definir um horário para a semana que vem", + "Message link copied to clipboard" : "Link da mensagem copiado para a área de transferência", + "Conversation link copied to clipboard" : "Link da conversa copiado para a área de transferência", + "The link could not be copied" : "O link não pôde ser copiado", + "Error while parsing a PROPFIND error" : "Erro ao analisar um erro PROPFIND", + "Sending signaling message has failed" : "Erro no envio da mensagem de sinalização", + "Lost connection to signaling server. Trying to reconnect." : "Conexão perdida com o servidor de sinalização. Tentando reconectar.", + "Lost connection to signaling server." : "Perda de conexão com o servidor de sinalização.", + "Connecting is taking longer than expected …" : "A conexão está demorando mais do que o esperado …", + "Failed to connect. Retrying …" : "Falha na conexão. Tentando novamente …", + "Failed to connect. The signaling server may be set up incorrectly" : "Falha na conexão. O servidor de sinalização pode estar configurado incorretamente", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "O servidor de sinalização configurado precisa ser atualizado para ser compatível com esta versão do Talk. Entre em contato com o seu administrador.", + "Please restart the app." : "Por favor, reinicie o aplicativo.", + "Please reload the page." : "Por favor, recarregue a página", + "Please try to restart the app." : "Por favor, tente reiniciar o aplicativo.", + "Please try to reload the page." : "Por favor, tente recarregar a página.", + "Do not disturb" : "Não perturbe", + "Away" : "Fora", + "Microphone {number}" : "Microfone {number}", + "Camera {number}" : "Câmera {number}", + "Speaker {number}" : "Alto falante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que você está falando no \"mudo\". Ligue o microfone para outros ouvirem", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Não foi possível estabelecer uma conexão com pelo menos um participante. Pode ser necessário um servidor TURN para sua instalação. Peça ao seu administrador para configurar um seguindo {linkstart}esta documentação{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Isso está demorando mais que o esperado. As permissões de mídia já foram concedidas (ou rejeitadas)? Se sim, reinicie o seu navegador, pois o áudio e vídeo estão falhando", + "Access to microphone & camera is only possible with HTTPS" : "O acesso ao microfone e à câmera só é possível com HTTPS", + "Please move your setup to HTTPS" : "Altere sua configuração para HTTPS", + "Access to microphone & camera was denied" : "O acesso ao microfone e à câmera foi negado", + "WebRTC is not supported in your browser" : "WebRTC não é suportado pelo seu navegador", + "Please use a different browser like Firefox or Chrome" : "Utilize um navegador diferente como o Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erro ao acessar microfone & câmera", + "%s Talk on your mobile devices" : "%s Converse em seus dispositivos móveis", + "Join conversations at any time, anywhere, on any device." : "Participe de conversas a qualquer momento, lugar e dispositivo.", + "Android app" : "Aplicativo Android", + "iOS app" : "Aplicativo iOS", + "__language_name__" : "Português Brasileiro", + "Webhook Demo" : "Demonstração de Webhook", + "Call summary (%s)" : "Resumo da chamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "O bot de resumo da chamada posta uma mensagem de visão geral após a chamada, listando todos os participantes e descrevendo as tarefas", + "Tasks" : "Tarefas", + "Notes" : "Notas ", + "Reports" : "Relatórios", + "Decisions" : "Decisões", + "Agenda" : "Agenda", + "Call summary" : "Resumo da chamada", + "Call summary - {title}" : "Resumo da chamada - {title}", + "Talk conversation for event" : "Conversa do Talk para evento", + "Client Push is installed, this improves the performance of desktop clients." : "O Client Push está instalado, o que melhora o desempenho dos clientes de desktop.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "O {notify_push} não está instalado, o que pode levar a problemas de desempenho ao usar clientes de desktop.", + "Next meeting" : "Próxima reunião", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Agende uma reunião a partir do seu calendário. Uma conversa no Talk precisa ser definida como local para aparecer aqui.", + "Join conversations from remote Nextcloud servers" : "Entre em conversas de servidores Nextcloud remotos", + "Your default media state has been saved" : "Seu estado de mídia padrão foi salvo", + "Set reminder for later today" : "Definir lembrete para hoje mais tarde", + "Set reminder for tomorrow" : "Definir lembrete para amanhã", + "Set reminder for this weekend" : "Definir lembrete para este fim de semana", + "Set reminder for next week" : "Definir lembrete para a próxima semana", + "Generate summary" : "Gerar resumo", + "Open poll • You voted already" : "Enquete aberta • Você já votou", + "Open poll • Click to vote" : "Enquete aberta • Clique para votar", + "Poll • Ended" : "Enquete • Encerrada", + "Talk recording from {time} ({conversation})" : "Gravação do Talk de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultado da enquete • %n voto","Resultado da enquete • %n votos","Resultado da enquete • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquete aberta • %n voto","Enquete aberta • %n votos","Enquete aberta • %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Sua configuração de privacidade foi salva", + "Your personal setting has been saved" : "Sua configuração pessoal foi salva", + "Failed to save sounds setting" : "Falha ao salvar configuração de sons", + "Sounds setting saved" : "Configuração de sons salva ", + "Always shown if recording consent is required" : "Sempre exibido se for necessário consentimento para gravação", + "Nextcloud Talk was updated, you cannot start or join a call." : "O Nextcloud Talk foi atualizado, você não pode iniciar ou entrar em uma chamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Você ingressou na conversa em outra janela ou dispositivo. No momento, isso não é suportado pelo Nextcloud Talk e portanto esta sessão foi encerrada.", + "Nextcloud Talk was updated." : "O Nextcloud Talk foi atualizado.", + "Nextcloud is in maintenance mode." : "O Nextcloud está em modo de manutenção.", + "Nextcloud Talk Federation was updated." : "O Nextcloud Talk Federation foi atualizado.", + "Enable live translation" : "Ativar tradução em tempo real", + "I picked list style" : "Eu escolhi o estilo lista", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ei! Você está usando o Talk no estilo lista ou com balões de mensagem?" +}, +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/pt_BR.json b/l10n/pt_BR.json new file mode 100644 index 0000000..fcf1fa2 --- /dev/null +++ b/l10n/pt_BR.json @@ -0,0 +1,2258 @@ +{ "translations": { + "a conversation" : "uma conversa", + "(Duration %s)" : "(Duração %s)", + "You attended a call with {user1}" : "Você atendeu uma chamada com {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados","%n convidados"], + "You attended a call with {user1} and {user2}" : "Você atendeu uma chamada com {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Você atendeu uma chamada com {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Você atendeu uma chamada com {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Você atendeu uma chamada com {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n outro","%n outros","%n outros"], + "{actor} invited you to {call}" : "{actor} convidou você para {call}", + "You were invited to a conversation or had a call" : "Você foi convidado para uma conversa ou recebeu uma chamada", + "Other activities" : "Outras atividades", + "Talk" : "Talk", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bem-vindo ao Nextcloud Talk!\nNesta conversa você será informado sobre as novidades disponíveis no Nextcloud Talk.", + "## New in Talk %s" : "## Novo no Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Agora o Microsoft Edge e o Safari podem ser usados para participar de chamadas de áudio e vídeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- As conversas individuais agora são persistentes e não podem mais ser transformadas em conversas em grupo por acidente. Além disso, quando um dos participantes sai da conversa, a conversa não é mais excluída automaticamente. Somente se ambos os participantes saírem, a conversa será excluída do servidor", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora você pode notificar todos os participantes postando \"@all\" no chat", + "- With the \"arrow-up\" key you can repost your last message" : "- Com a tecla \"seta para cima\" você pode repostar sua última mensagem", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Agora o Talk pode ter comandos, envie \"/help\" como uma mensagem de chat para ver se o seu administrador configurou algum", + "- With projects you can create quick links between conversations, files and other items" : "- Com projetos você pode criar links rápidos entre conversas, arquivos e outros itens", + "- You can now mention guests in the chat" : "- Agora você pode mencionar convidados no chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- As conversas agora podem ter uma sala de espera. Isso permitirá que os moderadores já entrem no bate-papo e chamada para preparar a reunião, enquanto os usuários e convidados terão que esperar", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Agora você pode responder diretamente a mensagens, dando aos outros usuários mais contexto sobre o que é sua mensagem", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- A pesquisa de conversas e participantes agora também filtrará as conversas existentes, facilitando a localização de conversas anteriores.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Agora você pode adicionar grupos de usuários personalizados a conversas quando o aplicativo de círculos estiver instalado", + "- Check out the new grid and call view" : "- Confira a nova grade e visualização de chamadas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Agora você pode enviar e arrastar arquivos diretamente do seu dispositivo para o chat", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Os arquivos compartilhados agora são abertos diretamente dentro da visualização de bate-papo com aplicativos visualizadores", + "- You can now search for chats and messages in the unified search in the top bar" : "- Você pode buscar conversas e mensagens usando a pesquisa unificada na barra superior", + "- Spice up your messages with emojis from the emoji picker" : "- Anime suas mensagens com emojis do seletor de emojis", + "- You can now change your camera and microphone while being in a call" : "- Você pode mudar a câmera e o microfone enquanto está em uma chamada", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dê às suas conversas algum contexto com uma descrição e abra-as para que os usuários conectados possam encontrá-las e juntar-se a elas ", + "- See a read status and send failed messages again" : "- Ver um status de leitura e enviar novamente as mensagens com falha", + "- Raise your hand in a call with the R key" : "- Levante a mão com a tecla R durante uma chamada", + "- Join the same conversation and call from multiple devices" : "- Entre na mesma conversa e ligue de vários dispositivos ", + "- Send voice messages, share your location or contact details" : "- Envie mensagens de voz, compartilhe sua localização ou detalhes de contato ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Adicione grupos a uma conversa e novos membros do grupo serão automaticamente adicionados como participantes ", + "- A preview of your audio and video is shown before joining a call" : "- Uma pré-visualização de seu áudio e vídeo é mostrada antes de entrar em uma chamada", + "- You can now blur your background in the newly designed call view" : "- Agora você pode desfocar seu plano de fundo na visualização de chamada recém-redesenhada", + "- Moderators can now assign general and individual permissions to participants" : "- Os moderadores agora podem atribuir permissões gerais e individuais aos participantes", + "- You can now react to chat messages" : "- Agora você pode reagir às mensagens do chat", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na barra lateral, agora você pode encontrar uma visão geral dos últimos itens compartilhados", + "- Use a poll to collect the opinions of others or settle on a date" : "- Use uma enquete para coletar as opiniões de outras pessoas ou estabelecer uma data", + "- Configure an expiration time for chat messages" : "- Configure um tempo de expiração para mensagens de bate-papo", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Inicie chamadas sem notificar outras pessoas em grandes conversas. Você pode enviar notificações de chamadas individuais assim que a chamada for iniciada.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Envie mensagens de bate-papo sem notificar os destinatários caso não seja urgente", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis agora podem ser preenchidos automaticamente digitando um \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Vincule vários itens usando o novo seletor inteligente digitando um \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Os moderadores agora podem criar salas temáticas (requer o back-end de alto desempenho)", + "- Calls can now be recorded (requires the High-performance backend)" : "- As chamadas agora podem ser gravadas (requer o back-end de alto desempenho)", + "- Conversations can now have an avatar or emoji as icon" : "- Conversas agora podem ter um avatar ou um emoji como ícone", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Planos de fundo virtuais agora estão disponível além do plano de fundo desfocado nas chamadas de vídeo", + "- Reactions are now available during calls" : "- Reações agora estão disponíveis durante chamadas", + "- Typing indicators show which users are currently typing a message" : "- Os indicadores de digitação mostram quais usuários estão digitando uma mensagem no momento", + "- Groups can now be mentioned in chats" : "- Grupos agora podem ser mencionados em bate-papos", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- As gravações de conferências são transcritas automaticamente se um aplicativo que faz transcrições estiver disponível", + "- Chat messages can be translated if a translation provider app is registered" : "- Mensagens de chat podem ser traduzidas se um provedor de traduções estiver disponível", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** agora pode ser usado em mensagens de _bate-papo_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks agora estão disponíveis para implementar bots. Consulte a documentação para obter mais informações https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Defina um lembrete em uma mensagem de bate-papo para ser notificado novamente mais tarde", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Use a conversa **Nota para si mesmo** para fazer anotações e compartilhar informações entre seus dispositivos", + "- Captions allow to send a message with a file at the same time" : "- As legendas permitem enviar uma mensagem com um arquivo ao mesmo tempo", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- O vídeo do orador agora está visível ao compartilhar a tela e as reações da chamada são animadas", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- As mensagens agora podem ser editadas por autores e moderadores logados por 6 horas", + "- Unsent message drafts are now saved in your browser" : "- Rascunhos de mensagens não enviadas agora são salvos em seu navegador", + "- Text chatting can now be done in a federated way with other Talk servers" : "- O bate-papo por texto agora pode ser feito de forma federada com outros servidores Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Os moderadores agora podem banir contas e convidados para impedir que eles voltem a participar de uma conversa", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- As próximas chamadas de eventos de calendário vinculados e os substitutos de ausência do escritório agora são exibidos nas conversas", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- As chamadas agora podem ser feitas de forma federada com outros servidores Talk (requer o back-end de alto desempenho)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Apresentando o cliente de desktop Nextcloud Talk para Windows, macOS e Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Resuma gravações de chamadas e mensagens não lidas em bate-papos com o Assistente Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Reuniões aprimoradas com reconhecimento de convidados por meio de seus endereços de e-mail, importação de listas de participantes, rascunhos para enquetes e download de listas de participantes de chamadas", + "- Archive conversations to stay focused" : "- Arquive conversas para manter o foco", + "- Schedule a meeting into your calendar from within a conversation" : "- Agende uma reunião em seu calendário a partir de uma conversa", + "- Search for messages of the current conversation directly in the right sidebar" : "- Pesquise mensagens da conversa atual diretamente na barra lateral direita", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Veja mais conversas em uma primeira olhada com a nova lista compacta (ative nas configurações do Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- As conversas de reunião agora sincronizam o título e a descrição do calendário e ficam ocultas com um filtro de pesquisa até que estejam próximas do início", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Marque as conversas como confidenciais nas configurações de notificação para ocultar o conteúdo da mensagem da lista de conversas e das notificações", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Para receber notificações push durante o \"Não perturbe\", marque as conversas como importantes", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Adicione outros participantes a uma chamada individual para criar uma nova chamada em grupo em tempo real", + "- Use threads to keep your chat and discussions organized" : "- Use fios para manter suas conversas e discussões organizadas", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Transcrições em tempo real agora disponíveis durante a chamada (requer o ExApp de transcrição em tempo real e o back-end de alto desempenho)", + "- Moderators can now pin messages so they are kept at the top" : "- Os moderadores agora podem fixar mensagens para que elas permaneçam no topo", + "- Schedule a message to send it at a later time" : "- Agende uma mensagem para enviá-la mais tarde", + "_All %n participant_::_All %n participants_" : ["Todos os %n participantes","Todos os %n participantes","Todos os %n participantes"], + "Talk updates ✅" : "Atualizações do Talk ✅", + "Reaction deleted by author" : "Reação excluída pelo autor", + "{actor} created the conversation" : "{actor} criou a conversa", + "You created the conversation" : "Você criou a conversa", + "System created the conversation" : "O sistema criou a conversa", + "An administrator created the conversation" : "Um administrador criou a conversa", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} renomeou a conversa de \"%1$s\" para \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Você renomeou a conversa de \"%1$s\" para \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Um administrador renomeou a conversa \"%1$s\" para \"%2$s\"", + "{actor} set the description" : "{actor} definiu a descrição", + "You set the description" : "Você definiu a descrição", + "An administrator set the description" : "Um administrador definiu a descrição", + "{actor} removed the description" : "{actor} removeu a descrição", + "You removed the description" : "Você removeu a descrição", + "An administrator removed the description" : "Um administrador removeu a descrição", + "You started a silent call" : "Você iniciou uma chamada silenciosa", + "Outgoing silent call" : "Chamada silenciosa de saída", + "{actor} started a silent call" : "{actor} iniciou uma chamada silenciosa", + "Incoming silent call" : "Chamada silenciosa recebida", + "You started a call" : "Você iniciou uma chamada", + "Outgoing call" : "Chamada de saída", + "{actor} started a call" : "{actor} iniciou uma chamada", + "Incoming call" : "Chamada recebida", + "{actor} joined the call" : "{actor} entrou na chamada", + "You joined the call" : "Você entrou na chamada", + "{actor} left the call" : "{actor} saiu da chamada", + "You left the call" : "Você saiu da chamada", + "{actor} unlocked the conversation" : "{actor} destrancou a conversa", + "You unlocked the conversation" : "Você destrancou a conversa", + "An administrator unlocked the conversation" : "Um administrador destrancou a conversa", + "{actor} locked the conversation" : "{actor} trancou a conversa", + "You locked the conversation" : "Você trancou a conversa", + "An administrator locked the conversation" : "Um administrador trancou a conversa", + "{actor} limited the conversation to the current participants" : "{actor} limitou a conversa aos atuais participantes", + "You limited the conversation to the current participants" : "Você limitou a conversa aos atuais participantes", + "An administrator limited the conversation to the current participants" : "Um administrador limitou a conversa aos atuais participantes", + "{actor} opened the conversation to registered users" : "{actor} abriu a conversa aos usuários registrados", + "You opened the conversation to registered users" : "Você abriu a conversa aos usuários registrados", + "An administrator opened the conversation to registered users" : "Um administrador abriu a conversa aos usuários registrados", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "You opened the conversation to registered users and users created with the Guests app" : "Você abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Um administrador abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "The conversation is now open to everyone" : "A conversa está aberta a todos agora", + "{actor} opened the conversation to everyone" : "{actor} abriu a conversa a todos", + "You opened the conversation to everyone" : "Você abriu a conversa para todos", + "{actor} restricted the conversation to moderators" : "{actor} restringiu a conversa aos moderadores", + "You restricted the conversation to moderators" : "Você restringiu a conversa aos moderadores", + "{actor} started breakout rooms" : "{actor} iniciou salas temáticas", + "You started breakout rooms" : "Você iniciou salas temáticas", + "{actor} stopped breakout rooms" : "{actor} interrompeu as salas temáticas", + "You stopped breakout rooms" : "Você interrompeu as salas temáticas", + "{actor} allowed guests" : "{actor} permitiu convidados", + "You allowed guests" : "Você permitiu convidados", + "An administrator allowed guests" : "Um administrador autorizou convidados", + "{actor} disallowed guests" : "{actor} bloqueou convidados", + "You disallowed guests" : "Você bloqueou convidados", + "An administrator disallowed guests" : "Um administrador desautorizou convidados", + "{actor} set a password" : "{actor} definiu uma senha", + "You set a password" : "Você definiu uma senha", + "An administrator set a password" : "Um administrador definiu uma senha", + "{actor} removed the password" : "{actor} removeu a senha", + "You removed the password" : "Você removeu a senha", + "An administrator removed the password" : "Um administrador removeu a senha", + "{actor} added {user}" : "{actor} adicionou {user}", + "You joined the conversation" : "Você juntou-se à conversa", + "{actor} joined the conversation" : "{actor} juntou-se à conversa", + "You added {user}" : "Você adicionou {user}", + "{actor} added you" : "{actor} adicionou você", + "An administrator added you" : "Um administrador adicionou você", + "An administrator added {user}" : "Um administrador adicionou {user}", + "You left the conversation" : "Você saiu da conversa", + "{actor} left the conversation" : "{actor} saiu da conversa", + "{actor} removed {user}" : "{actor} removeu {user}", + "You removed {user}" : "Você removeu {user}", + "{actor} removed you" : "{actor} removeu você", + "An administrator removed you" : "Um administrador excluiu você", + "An administrator removed {user}" : "Um administrador removeu {user}", + "{actor} invited {federated_user}" : "{actor} convidou {federated_user}", + "You invited {federated_user}" : "Você convidou {federated_user}", + "You accepted the invitation" : "Você aceitou o convite", + "{actor} invited you" : "{actor} convidou você", + "An administrator invited you" : "Um administrador convidou você", + "An administrator invited {federated_user}" : "Um administrador convidou {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} aceitou o convite", + "{actor} removed {federated_user}" : "{actor} removeu {federated_user}", + "You removed {federated_user}" : "Você removeu {federated_user}", + "You declined the invitation" : "Você recusou o convite", + "An administrator removed {federated_user}" : "Um administrador removeu {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} recusou o convite", + "{actor} added group {group}" : "{actor} adiciniou o grupo {group}", + "You added group {group}" : "Você adicionou o grupo {group}", + "An administrator added group {group}" : "Um administrador adicionou o grupo {group}", + "{actor} removed group {group}" : "{actor} removeu o grupo {group}", + "You removed group {group}" : "Você removeu o grupo {group}", + "An administrator removed group {group}" : "Um administrador removeu o grupo {group}", + "{actor} added team {circle}" : "{actor} adicionou a equipe {circle}", + "You added team {circle}" : "Você adicionou a equipe {circle}", + "An administrator added team {circle}" : "Um administrador adicionou a equipe {circle}", + "{actor} removed team {circle}" : "{actor} removeu a equipe {circle}", + "You removed team {circle}" : "Você removeu a equipe {circle}", + "An administrator removed team {circle}" : "Um administrador removeu a equipe {circle}", + "{actor} added {phone}" : "{actor} adicionou {phone}", + "You added {phone}" : "Você adicionou {phone}", + "An administrator added {phone}" : "Um administrador adicionou {phone}", + "{actor} removed {phone}" : "{actor} removeu {phone}", + "You removed {phone}" : "Você removeu {phone}", + "An administrator removed {phone}" : "Um administrador removeu {phone}", + "{actor} promoted {user} to moderator" : "{actor} promoveu {user} a moderador", + "You promoted {user} to moderator" : "Você promoveu {user} a moderador", + "{actor} promoted you to moderator" : "{actor} promoveu você a moderador", + "An administrator promoted you to moderator" : "Um administrador promoveu você a moderador", + "An administrator promoted {user} to moderator" : "Um administrador promoveu {user} a moderador", + "{actor} demoted {user} from moderator" : "{actor} removeu {user} da moderação", + "You demoted {user} from moderator" : "Você removeu {user} da moderação", + "{actor} demoted you from moderator" : "{actor} removeu você da moderação", + "An administrator demoted you from moderator" : "Um administrador removeu você da moderação", + "An administrator demoted {user} from moderator" : "Um administrador removeu {user} da moderação", + "{actor} shared a file which is no longer available" : "{actor} compartilhou um arquivo não mais disponível", + "You shared a file which is no longer available" : "Você compartilhou um arquivo não mais disponível", + "File shares are currently not supported in federated conversations" : "Atualmente, os compartilhamentos de arquivos não são suportados em conversas federadas", + "The shared location is malformed" : "O local compartilhado está malformado", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} configurou Matterbridge para sincronizar esta conversa com outros bate-papos", + "You set up Matterbridge to synchronize this conversation with other chats" : "Você configurou Matterbridge para sincronizar esta conversa com outros bate-papos", + "{actor} created thread {title}" : "{actor} criou o fio {title}", + "You created thread {title}" : "Você criou o fio {title}", + "{actor} renamed thread {title}" : "{actor} renomeou o fio {title}", + "You renamed thread {title}" : "Você renomeou o fio {title}", + "{actor} updated the Matterbridge configuration" : "{actor} atualizou a configuração Matterbridge", + "You updated the Matterbridge configuration" : "Você atualizou a configuração Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} removeu a configuração Matterbridge", + "You removed the Matterbridge configuration" : "Você removeu a configuração Matterbridge", + "{actor} started Matterbridge" : "{actor} iniciou Matterbridge", + "You started Matterbridge" : "Você iniciou Matterbridge", + "{actor} stopped Matterbridge" : "{actor} parou Matterbridge", + "You stopped Matterbridge" : "Você parou Matterbridge.", + "{actor} deleted a message" : "{actor} excluiu uma mensagem", + "You deleted a message" : "Você excluiu uma mensagem", + "{actor} edited a message" : "{actor} editou uma mensagem", + "You edited a message" : "Você editou uma mensagem", + "{actor} pinned a message" : "{actor} fixou uma mensagem", + "You pinned a message" : "Você fixou uma mensagem", + "{actor} unpinned a message" : "{actor} desfixou uma mensagem", + "Message was automatically unpinned" : "A mensagem foi desfixada automaticamente", + "You unpinned a message" : "Você desfixou uma mensagem", + "{actor} deleted a reaction" : "{actor} excluiu uma reação", + "You deleted a reaction" : "Você excluiu uma reação", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Você definiu a expiração de mensagens para %n semana","Você definiu a expiração de mensagens para %n semanas","Você definiu a expiração de mensagens para %n semanas"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Você definiu a expiração de mensagens para %n dia","Você definiu a expiração de mensagens para %n dias","Você definiu a expiração de mensagens para %n dias"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Você definiu a expiração de mensagens para %n hora","Você definiu a expiração de mensagens para %n horas","Você definiu a expiração de mensagens para %n horas"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Você definiu a expiração de mensagens para %n minuto","Você definiu a expiração de mensagens para %n minutos","Você definiu a expiração de mensagens para %n minutos"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} definiu a expiração de mensagens para %n semana","{actor} definiu a expiração de mensagens para %n semanas","{actor} definiu a expiração de mensagens para %n semanas"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} definiu a expiração de mensagens para %n dia","{actor} definiu a expiração de mensagens para %n dias","{actor} definiu a expiração de mensagens para %n dias"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} definiu a expiração de mensagens para %n hora","{actor} definiu a expiração de mensagens para %n horas","{actor} definiu a expiração de mensagens para %n horas"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} definiu a expiração de mensagens para %n minuto","{actor} definiu a expiração de mensagens para %n minutos","{actor} definiu a expiração de mensagens para %n minutos"], + "{actor} disabled message expiration" : "{actor} desativou a expiração de mensagens", + "You disabled message expiration" : "Você desativou a expiração de mensagens", + "{actor} cleared the history of the conversation" : "{actor} limpou o histórico da conversa ", + "You cleared the history of the conversation" : "Você limpou o histórico da conversa ", + "{actor} set the conversation picture" : "{actor} definiu a imagem da conversa", + "You set the conversation picture" : "Você definiu a imagem da conversa", + "{actor} removed the conversation picture" : "{actor} removeu a imagem da conversa", + "You removed the conversation picture" : "Você removeu a imagem da conversa", + "{actor} ended the poll {poll}" : "{actor} encerrou a enquete {poll}", + "You ended the poll {poll}" : "Você encerrou a enquete {poll}", + "{actor} started the video recording" : "{actor} iniciou a gravação de vídeo", + "You started the video recording" : "Você iniciou a gravação de vídeo", + "{actor} stopped the video recording" : "{actor} parou a gravação de vídeo", + "You stopped the video recording" : "Você parou a gravação de vídeo", + "{actor} started the audio recording" : "{actor} iniciou a gravação de áudio", + "You started the audio recording" : "Você iniciou a gravação de áudio", + "{actor} stopped the audio recording" : "{actor} parou a gravação de áudio", + "You stopped the audio recording" : "Você parou a gravação de áudio", + "The recording failed" : "A gravação falhou", + "Someone voted on the poll {poll}" : "Alguém votou na enquete {poll}", + "Message deleted by author" : "Mensagem excluída pelo autor", + "Message deleted by {actor}" : "Mensagem excluída por {actor}", + "Message deleted by you" : "Mensagem excluída por você", + "Deleted user" : "Usuário excluído", + "Unknown number" : "Número desconhecido", + "Administration" : "Administração", + "System" : "Sistema", + "%s (guest)" : "%s (convidado)", + "Missed call" : "Chamada perdida", + "Unanswered call" : "Chamada não atendida", + "Call ended (Duration {duration})" : "Chamada encerrada (Duração {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada foi encerrada, pois atingiu a duração máxima (Duração {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} encerrou a chamada (Duração {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["A chamada com %n convidado foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})","A chamada com %n convidados foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})","A chamada com %n convidados foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Chamada com %n convidado encerrada (Duração {duration})","Chamada com %n convidados encerrada (Duração {duration})","Chamada com %n convidados encerrada (Duração {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} encerrou a chamada com %n convidado (Duração {duration})","{actor} encerrou a chamada com %n convidados (Duração {duration})","{actor} encerrou a chamada com %n convidados (Duração {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1} ended (Duration {duration})" : "Chamada com {user1} encerrada (Duração {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} encerrou a chamada com {user1} (Duração {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1} e {user2} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Chamada com {user1} e {user2} encerrada (Duração {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} encerrou a chamada com {user1} e {user2} (Duração {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2} e {user3} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Chamada com {user1}, {user2} e {user3} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2} e {user3} (Duração {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2}, {user3} e {user4} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Chamada com {user1}, {user2}, {user3} e {user4} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2}, {user3} e {user4} (Duração {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "A chamada com {user1}, {user2}, {user3}, {user4} e {user5} foi encerrada, pois atingiu a duração máxima da chamada (Duração {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Chamada com {user1}, {user2}, {user3}, {user4} e {user5} encerrada (Duração {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} encerrou a chamada com {user1}, {user2}, {user3}, {user4} e {user5} (Duração {duration})", + "Message of {user} in {conversation}" : "Mensagem de {user} em {conversation}", + "Message of {user}" : "Mensagem de {user}", + "Message of a deleted user in {conversation}" : "Mensagem de um usuário excluído em {conversation}", + "Talk conversations" : "Conversas do Talk", + "Talk to %s" : "Falar com %s", + "An error occurred. Please contact your administrator." : "Um erro ocorreu. Entre em contato com seu administrador.", + "App disabled" : "Aplicativo desativado", + "Conversation subfolders are disabled" : "As subpastas de conversas estão desativadas", + "Storage quota exceeded" : "Cota de armazenamento excedida", + "Could not prepare conversation folder" : "Não foi possível preparar a pasta de conversas", + "File not found" : "Arquivo não encontrado", + "Path must point to a file" : "O caminho deve apontar para um arquivo", + "File is not inside the conversation draft folder for this room" : "O arquivo não está na pasta de rascunhos de conversas desta sala", + "File is not shared, or shared but not with the user" : "O arquivo não é compartilhado com o usuário ou nem é compartilhado", + "No account available to delete." : "Não há contas a excluir.", + "Poll" : "Enquete", + "Password needs to be set" : "É necessário definir uma senha", + "Uploading the file failed" : "Falha no upload do arquivo", + "No image file provided" : "Nenhum arquivo de imagem fornecido", + "File is too big" : "O arquivo é muito grande", + "Invalid file provided" : "Arquivo fornecido inválido", + "Invalid image" : "Imagem inválida", + "Unknown filetype" : "Tipo de arquivo desconhecido", + "Talk mentions" : "Menções na conversa", + "More conversations" : "Mais conversas", + "Say hi to your friends and colleagues!" : "Diga oi para seus amigos e colegas!", + "No unread mentions" : "Não há citações não lidas", + "Call in progress" : "Chamada em andamento", + "You were mentioned" : "Você foi citado", + "Write to conversation" : "Escreva na conversa", + "Writes event information into a conversation of your choice" : "Grava informações do evento em uma conversa de sua escolha", + "Missing email field in header line" : "Campo de e-mail ausente na linha de cabeçalho", + "Following lines are invalid: %s" : "As seguintes linhas estão inválidas: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s convidou você para a conversa \"%2$s\".", + "You were invited to conversation \"%s\"." : "Você foi convidado para a conversa \"%s\".", + "Conversation invitation" : "Convite para conversa", + "Scheduled time" : "Horário agendado", + "Description" : "Descrição", + "You can also dial-in via phone with the following details" : "Você também pode discar via telefone com os seguintes detalhes", + "Dial-in information" : "Informação de discagem", + "Meeting ID" : "ID da reunião", + "Your PIN" : "Seu PIN", + "Click the button below to join the lobby now." : "Clique no botão abaixo para entrar na sala de espera agora.", + "Click the link below to join the lobby now." : "Clique no link abaixo para entrar na sala de espera agora.", + "Join lobby for \"%s\"" : "Entrar na sala de espera para \"%s\"", + "Click the button below to join the conversation now." : "Clique no botão abaixo para entrar na conversa agora.", + "Click the link below to join the conversation now." : "Clique no link abaixo para entrar na conversa agora.", + "Join \"%s\"" : "Entrar na \"%s\"", + "Meeting" : "Reunião", + "Password request: %s" : "Pedido de senha: %s", + "Private conversation" : "Conversa privada", + "Deleted user (%s)" : "Excluir usuário (%s)", + "Failed to upload call recording" : "Falha ao fazer upload da gravação da chamada", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "O servidor de gravação falhou ao fazer upload da gravação da chamada {call}. Por favor, entre em contato com a administração.", + "Share to chat" : "Compartilhar no bate-papo", + "Dismiss notification" : "Dispensar notificação", + "Call recording now available" : "Gravação da chamada agora está disponível", + "The recording for the call in {call} was uploaded to {file}." : "A gravação da chamada em {call} foi carregada em {file}.", + "Transcript now available" : "Transcrição disponível", + "The transcript for the call in {call} was uploaded to {file}." : "A transcrição para a chamada em {call} foi carregada em {file}.", + "Failed to transcript call recording" : "Falha ao transcrever gravação da chamada", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor falhou ao transcrever a gravação em {file} para a chamada em {call}. Por favor, entre em contato com a administração.", + "Call summary now available" : "Resumo da chamada agora está disponível", + "The summary for the call in {call} was uploaded to {file}." : "O resumo para a chamada em {call} foi carregado para {file}.", + "Failed to summarize call recording" : "Falha ao resumir a gravação da chamada", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "O servidor falhou ao resumir a gravação em {file} para a chamada em {call}. Por favor, entre em contato com a administração.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} convidou você para entrar na sala {roomName} em {remoteServer}", + "Accept" : "Aceitar", + "Decline" : "Recusar", + "{user1} invited you to a federated conversation" : "{user1} convidou você para uma conversa federada", + "Someone reacted" : "Alguém reagiu", + "New message" : "Nova mensagem", + "Reminder" : "Lembrete", + "Someone mentioned you" : "Alguém mencionou você", + "Notification" : "Notificação", + "Someone reacted in a private conversation" : "Alguém reagiu em uma conversa privada", + "You received a message in a private conversation" : "Você recebeu uma mensagem em uma conversa privada", + "Reminder in a private conversation" : "Lembrete em uma conversa privada", + "Someone mentioned you in a private conversation" : "Alguém mencionou você em uma conversa privada", + "Notification in a private conversation" : "Notificação em uma conversa privada", + "Reminder: You in {call}" : "Lembrete: Você em {call}", + "Reminder: {user} in {call}" : "Lembrete: {user} em {call}", + "Reminder: Deleted user in {call}" : "Lembrete: Usuário excluído em {call}", + "Reminder: {guest} (guest) in {call}" : "Lembrete: {guest} (convidado) em {call}", + "Reminder: Guest in {call}" : "Lembrete: Convidado em {call}", + "{user} reacted with {reaction}" : "{user} reagiu com {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagiu com {reaction} em {call}", + "Deleted user reacted with {reaction} in {call}" : "Usuário excluído reagiu com {reaction} em {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (convidado) reagiu com {reaction} em {call}", + "Guest reacted with {reaction} in {call}" : "Convidado reagiu com {reaction} em {call}", + "{user} in {call}" : "{user} em {call}", + "Deleted user in {call}" : "Usuário excluído de {call}", + "{guest} (guest) in {call}" : "{guest} (convidado) em {call}", + "Guest in {call}" : "Convidado em {call}", + "{user} sent you a private message" : "{user} te enviou uma mensagem privada", + "{user} sent a message in conversation {call}" : "{user} enviou uma mensagem na conversa {call}", + "A deleted user sent a message in conversation {call}" : "Um usuário excluído enviou uma mensagem na conversa {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) enviou uma mensagem na conversa {call}", + "A guest sent a message in conversation {call}" : "Um convidado enviou uma mensagem na conversa {call}", + "{user} replied to your private message" : "{user} respondeu a sua mensagem privada", + "{user} replied to your message in conversation {call}" : "{user} respondeu à sua mensagem na conversa {call}", + "A deleted user replied to your message in conversation {call}" : "Um usuário removido respondeu à sua mensagem na conversa {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) respondeu sua mensagem na conversa {call}", + "A guest replied to your message in conversation {call}" : "Um convidado respondeu à sua mensagem na conversa {call}", + "Reminder: You in private conversation {call}" : "Lembrete: Você na conversa privada {call}", + "Reminder: A deleted user in private conversation {call}" : "Lembrete: Um usuário excluído na conversa privada {call}", + "Reminder: {user} in private conversation" : "Lembrete: {user} em uma conversa privada", + "Reminder: You in conversation {call}" : "Lembrete: Você na conversa {call}", + "Reminder: {user} in conversation {call}" : "Lembrete: {user} na conversa {call}", + "Reminder: A deleted user in conversation {call}" : "Lembrete: Um usuário excluído na conversa {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Lembrete: {guest} (convidado) na conversa {call}", + "Reminder: A guest in conversation {call}" : "Lembrete: Um convidado na conversa {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagiu com {reaction} à sua mensagem privada", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagiu com {reaction} à sua mensagem na conversa {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Um usuário excluído reagiu com {reaction} à sua mensagem na conversa {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (convidado) reagiu com {reaction} à sua mensagem na conversa {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Um convidado reagiu com {reaction} à sua mensagem na conversa {call}", + "{user} mentioned you in a private conversation" : "{user} mencionou você em uma conversa privada", + "{user} mentioned group {group} in conversation {call}" : "{user} mencionou o grupo {group} na conversa {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} mencionou a equipe {team} na conversa {call}", + "{user} mentioned everyone in conversation {call}" : "{user} mencionou todas as pessoas na conversa {call}", + "{user} mentioned you in conversation {call}" : "{user} mencionou você na conversa {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Um usuário excluído mencionou o grupo {group} na conversa {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Um usuário excluído mencionou a equipe {team} na conversa {call}", + "A deleted user mentioned everyone in conversation {call}" : "Um usuário excluído mencionou todas as pessoas na conversa {call}", + "A deleted user mentioned you in conversation {call}" : "Um usuário excluído mencionou você na conversa {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (convidado) mencionou o {group} na conversa {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (convidado) mencionou a equipe {team} na conversa {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (convidado) mencionou todas as pessoas na conversa {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (guest) citou você na conversa {call}", + "A guest mentioned group {group} in conversation {call}" : "Um convidado mencionou o grupo {group} na conversa {call}", + "A guest mentioned team {team} in conversation {call}" : "Um convidado mencionou a equipe {team} na conversa {call}", + "A guest mentioned everyone in conversation {call}" : "Um convidado mencionou todas as pessoas na conversa {call}", + "A guest mentioned you in conversation {call}" : "Um convidado mencionou você na conversa {call}", + "View message" : "Exibir mensagem", + "Dismiss reminder" : "Dispensar lembrete", + "View chat" : "Ver o chat", + "{user} invited you to a group conversation: {call}" : "{user} convidou você para uma conversa em grupo: {call}", + "Join call" : "Entrar na chamada", + "Answer call" : "Atender chamada", + "{user} would like to talk with you" : "{user} gostaria de falar com você", + "Call back" : "Ligar de volta", + "You missed a call from {user}" : "Você perdeu uma ligação de {user}", + "Accept call" : "Atender chamada", + "Incoming phone call from {call}" : "Chamada recebida de {call}", + "You missed a phone call from {call}" : "Você perdeu uma chamada de {call}", + "A group call has started in {call}" : "Uma chamada de grupo foi iniciada em {call}", + "You missed a group call in {call}" : "Você perdeu uma ligação em grupo em {call}", + "{email} is requesting the password to access {file}" : "{email} está solicitando a senha para acessar {file}", + "{email} tried to request the password to access {file}" : "{email} tentou solicitar a senha para acessar {file}", + "Someone is requesting the password to access {file}" : "Alguém está solicitando a senha para acessar {file}", + "Someone tried to request the password to access {file}" : "Alguém tentou solicitar a senha para acessar {file}", + "Open settings" : "Abrir as configurações", + "Hosted signaling server added" : "Servidor de sinalização hospedado adicionado", + "The hosted signaling server is now configured and will be used." : "O servidor de sinalização hospedado está agora configurado e será usado.", + "Hosted signaling server removed" : "Servidor de sinalização hospedado removido", + "The hosted signaling server was removed and will not be used anymore." : "O servidor de sinalização hospedado foi removido e não será mais usado.", + "Hosted signaling server changed" : "Servidor de sinalização hospedado alterado", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "O servidor de sinalização hospedado mudou seu status de \"{oldstatus}\" para \"{newstatus}\".", + "pending" : "pendente", + "active" : "ativo", + "expired" : "expirado", + "blocked" : "bloqueado", + "error" : "erro", + "The certificate of {host} expires in {days} days" : "O certificado de {host} expirará em {days} dias", + "The certificate of {host} expired" : "O certificado de {host} expirou", + "Contact via Talk" : "Contato via Talk", + "Open Talk" : "Abrir Talk", + "Default" : "Padrão", + "Send messages, create threads, and start voice and video calls." : "Envie mensagens, crie fios e inicie chamadas de voz e vídeo.", + "Presentation" : "Apresentação", + "Voice room" : "Sala de voz", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Entre diretamente na chamada, ideal para colocar o papo em dia ou para reuniões espontâneas.", + "Webinar" : "Webinário", + "Conversations" : "Conversas", + "Messages in current conversation" : "Mensagens na conversa atual", + "{user}" : "{user}", + "Messages" : "Mensagens", + "{user} in {conversation}" : "{user} em {conversation}", + "Messages in other conversations" : "Mensagens em outras conversas", + "One-to-one rooms always need to show the other users avatar" : "As salas individuais sempre precisam mostrar o avatar do outro usuário", + "Invalid emoji character" : "Caractér de emoji inválido", + "Invalid background color" : "Cor de plano de fundo inválida", + "Avatar image is not square" : "A imagem do avatar não é quadrada", + "Room {number}" : "Sala {number}", + "Other" : "Outro", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Falha ao solicitar a avaliação porque o servidor está inacessível. Tente novamente mais tarde.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Há um problema com a autenticação desta instância. Talvez não seja acessível externamente para verificar sua URL.", + "Something unexpected happened." : "Algo inesperado aconteceu.", + "The URL is invalid." : "A URL é inválida.", + "An HTTPS URL is required." : "Uma URL HTTPS é necessária.", + "The email address is invalid." : "O e-mail é inválido.", + "The language is invalid." : "O idioma é inválido.", + "The country is invalid." : "O país é inválido.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Há um problema com a solicitação da avaliação. Verifique os logs para obter mais informações.", + "Too many requests are send from your servers address. Please try again later." : "Muitas solicitações foram enviadas do endereço do servidor. Tente novamente mais tarde.", + "There is already a trial registered for this Nextcloud instance." : "Já existe uma avaliação registrada para esta instância do Nextcloud.", + "Something unexpected happened. Please try again later." : "Algo inesperado aconteceu. Tente novamente mais tarde.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Falha ao solicitar a avaliação porque o servidor de avaliação se comportou incorretamente. Tente novamente mais tarde.", + "Trial requested but failed to get account information. Please check back later." : "Avaliação solicitada mas falhou ao obter informações da conta. Tente novamente mais tarde.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Há um problema com a autenticação desta solicitação. Talvez não seja acessível externamente para verificar seu URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Erro ao buscar informações da conta porque o servidor de avaliação se comportou incorretamente. Tente novamente mais tarde.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Há um problema ao buscar as informações da conta. Verifique os logs para obter mais informações.", + "There is no such account registered." : "Não há registro desta conta.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Falha ao buscar informações da conta porque o servidor de avaliação está inacessível. Por favor, volte mais tarde.", + "Deleting the hosted signaling server account failed. Please check back later." : "A exclusão da conta do servidor de sinalização hospedada falhou. Tente novamente mais tarde.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Falha ao excluir a conta porque o servidor de avaliação se comportou incorretamente. Por favor, tente novamente mais tarde.", + "There is a problem with deleting the account. Please check your logs for further information." : "Há um problema com a exclusão da conta. Verifique os logs para obter mais informações.", + "Too many requests are sent from your servers address. Please try again later." : "Muitas solicitações são enviadas dos endereços dos seus servidores. Tente novamente mais tarde.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Falha ao excluir a conta porque o servidor de avaliação está inacessível. Tente novamente mais tarde.", + "Note to self" : "Nota para si mesmo", + "A place for your private notes, thoughts and ideas" : "Um lugar para suas notas, pensamentos e ideias privados", + "Transcript is AI generated and may contain mistakes" : "A transcrição é gerada por IA e pode conter erros", + "Summary is AI generated and may contain mistakes" : "O resumo é gerado por IA e pode conter erros", + "Let's get started!" : "Vamos começar!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** é uma plataforma de comunicação segura e auto-hospedada que se integra perfeitamente ao ecossistema Nextcloud.\n\n#### Principais Recursos do Nextcloud Talk:\n\n* Bate-papo e mensagens em bate-papos privados e em grupo\n* Chamadas de voz e vídeo\n* Compartilhamento de arquivos e integração com outros aplicativos Nextcloud\n* Configurações de conversa personalizáveis, moderação e controles de privacidade\n* Web, desktop e celular (iOS e Android)\n* Comunicação privada & segura\n\nSaiba mais na [documentação do usuário](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Bem-vindo ao Nextcloud Talk\n\nNextcloud Talk é um aplicativo de mensagens privado e poderoso que se integra ao Nextcloud. Converse em conversas privadas ou em grupo, colabore em chamadas de voz e vídeo, organize webinários e eventos, personalize suas conversas e muito mais.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatar textos para criar mensagens ricas\n\nNo Nextcloud Talk, você pode usar a sintaxe Markdown para formatar suas mensagens. Por exemplo, aplique a formatação **negrito** ou *itálico*, ou `destaque textos como código`. Você pode até mesmo criar tabelas e adicionar cabeçalhos ao seu texto.\n\nPrecisa corrigir um erro de digitação ou alterar a formatação? Edite sua mensagem clicando em \"Editar mensagem\" no menu de mensagens.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Adicionar anexos e links\n\nAnexe arquivos do seu Nextcloud Hub usando o botão \"+\". Compartilhe itens de Arquivos e de vários aplicativos do Nextcloud. Alguns aplicativos até suportam widgets interativos, por exemplo, o aplicativo Texto.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Deixe as conversas fluírem: mencione usuários, reaja a mensagens e muito mais\n\nVocê pode mencionar todos na conversa usando %s ou mencionar participantes específicos digitando \"@\" e escolhendo o nome deles na lista.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Você pode responder a mensagens, encaminhá-las para outros bate-papos e pessoas ou copiar o conteúdo da mensagem.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Faça mais com o Seletor Inteligente\n\nBasta digitar \"/\" ou acessar o menu \"+\" para abrir o Seletor Inteligente, onde você pode anexar vários conteúdos às suas mensagens. Você pode configurar o Seletor Inteligente para poder adicionar itens de aplicativos Nextcloud, GIFs, localizações de mapas, conteúdo gerado por IA e muito mais.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Gerenciar configurações de conversa\n\nNo menu de conversas, você pode acessar várias configurações para gerenciar suas conversas, como:\n* Editar informações da conversa\n* Gerenciar notificações\n* Aplicar várias regras de moderação\n* Configurar acesso e segurança\n* Ativar bots\n* e muito mais!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Árabes Unidos", + "Afghanistan" : "Afeganistão", + "Antigua and Barbuda" : "Antígua e Barbuda", + "Anguilla" : "Anguila", + "Albania" : "Albânia", + "Armenia" : "Armênia", + "Angola" : "Angola", + "Antarctica" : "Antártica", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Áustria", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Åland Islands" : "Ilhas Aland", + "Azerbaijan" : "Azerbaijão", + "Bosnia and Herzegovina" : "Bósnia e Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Bahrain" : "Barém", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "São Bartolomeu", + "Bermuda" : "Bermudas", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolívia, Estado Plurinacional da", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Santo Eustáquio e Saba", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butão", + "Bouvet Island" : "Ilha Bouvet", + "Botswana" : "Botsuana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canadá", + "Cocos (Keeling) Islands" : "Ilhas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Congo, República Democrática do", + "Central African Republic" : "República Centro-Africana", + "Congo" : "Congo", + "Switzerland" : "Suíça", + "Côte d'Ivoire" : "Costa do Marfim", + "Cook Islands" : "Ilhas Cook", + "Chile" : "Chile", + "Cameroon" : "Camarões", + "China" : "China", + "Colombia" : "Colômbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Ilha do Natal", + "Cyprus" : "Chipre", + "Czechia" : "República Checa", + "Germany" : "Alemanha", + "Djibouti" : "Djibuti", + "Denmark" : "Dinamarca", + "Dominica" : "Dominica", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algéria", + "Ecuador" : "Equador", + "Estonia" : "Estônia", + "Egypt" : "Egito", + "Western Sahara" : "Saara Ocidental", + "Eritrea" : "Eritréia", + "Spain" : "Espanha", + "Ethiopia" : "Etiópia", + "Finland" : "Finlândia", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Ilhas Falkland (Malvinas)", + "Micronesia, Federated States of" : "Micronésia, Estados Federados da", + "Faroe Islands" : "ilhas Faroé", + "France" : "França", + "Gabon" : "Gabão", + "United Kingdom of Great Britain and Northern Ireland" : "Reino Unido da Grã-Bretanha e Irlanda do Norte", + "Grenada" : "Granada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Groenlândia", + "Gambia" : "Gâmbia", + "Guinea" : "Guiné", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guiné Equatorial", + "Greece" : "Grécia", + "South Georgia and the South Sandwich Islands" : "Geórgia do Sul e Ilhas Sandwich do Sul", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guiné-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Ilha Heard e Ilhas McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croácia", + "Haiti" : "Haiti", + "Hungary" : "Hungria", + "Indonesia" : "Indonésia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Ilha de Man", + "India" : "Índia", + "British Indian Ocean Territory" : "Território Britânico do Oceano Índico", + "Iraq" : "Iraque", + "Iran, Islamic Republic of" : "Irã (Republic Islâmica do)", + "Iceland" : "Islândia", + "Italy" : "Itália", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordânia", + "Japan" : "Japão", + "Kenya" : "Quênia", + "Kyrgyzstan" : "Quirguistão", + "Cambodia" : "Camboja", + "Kiribati" : "Kiribati", + "Comoros" : "Comores", + "Saint Kitts and Nevis" : "São Cristóvão e Neves", + "Korea, Democratic People's Republic of" : "Coreia, República Popular Democrática da", + "Korea, Republic of" : "Coreia, República da", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ilhas Cayman", + "Kazakhstan" : "Cazaquistão", + "Lao People's Democratic Republic" : "República Popular Democrática do Laos", + "Lebanon" : "Líbano", + "Saint Lucia" : "Santa Lúcia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituânia", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letônia", + "Libya" : "Líbia", + "Morocco" : "Marrocos", + "Monaco" : "Mônaco", + "Moldova, Republic of" : "Moldova, República da", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "São Martinho (parte Francesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Ilhas Marshall", + "North Macedonia" : "Macedônia do Norte", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongólia", + "Macao" : "Macau", + "Northern Mariana Islands" : "Ilhas Marianas do Norte", + "Martinique" : "Martinica", + "Mauritania" : "Mauritânia", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurício", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malásia", + "Mozambique" : "Moçambique", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledônia", + "Niger" : "Nigéria", + "Norfolk Island" : "Ilha Norfolk", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicarágua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niuê", + "New Zealand" : "Nova Zelândia", + "Oman" : "Omã", + "Panama" : "Panamá", + "Peru" : "Peru", + "French Polynesia" : "Polinésia Francesa", + "Papua New Guinea" : "Papua Nova Guiné", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistão", + "Poland" : "Polônia", + "Saint Pierre and Miquelon" : "São Pedro e Miquelão", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Porto Rico", + "Palestine, State of" : "Palestina, Estado da", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguai", + "Qatar" : "Catar", + "Réunion" : "Reunião", + "Romania" : "Romênia", + "Serbia" : "Sérvia", + "Russian Federation" : "Federação Russa", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arábia Saudita", + "Solomon Islands" : "Ilhas Salomão", + "Seychelles" : "Seicheles", + "Sudan" : "Sudão", + "Sweden" : "Suécia", + "Singapore" : "Cingapura", + "Saint Helena, Ascension and Tristan da Cunha" : "Santa Helena, Ascensão e Tristão da Cunha", + "Slovenia" : "Eslovênia", + "Svalbard and Jan Mayen" : "Svalbard e Jan Mayen", + "Slovakia" : "Eslováquia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somália", + "Suriname" : "Suriname", + "South Sudan" : "Sudão do Sul", + "Sao Tome and Principe" : "São Tome e Príncipe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "São Martinho (parte Holandesa)", + "Syrian Arab Republic" : "República Árabe da Síria", + "Eswatini" : "Suazilândia", + "Turks and Caicos Islands" : "Ilhas Turcas e Caicos", + "Chad" : "Chade", + "French Southern Territories" : "Territórios Franceses do Sul", + "Togo" : "Togo", + "Thailand" : "Tailândia", + "Tajikistan" : "Tajiquistão", + "Tokelau" : "Toquelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcomenistão", + "Tunisia" : "Tunísia", + "Tonga" : "Tonganês", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinidade e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Província da China", + "Tanzania, United Republic of" : "Tanzânia, República Unida da", + "Ukraine" : "Ucrânia", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ilhas Menores Distantes dos Estados Unidos", + "United States of America" : "Estados Unidos da America", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbequistão", + "Holy See" : "Santa Sé", + "Saint Vincent and the Grenadines" : "São Vicente e Granadinas", + "Venezuela, Bolivarian Republic of" : "Venezuela, República Bolivariana da", + "Virgin Islands, British" : "Ilhas Virgens, Britânicas", + "Virgin Islands, U.S." : "Ilhas Virgens, U.S.", + "Viet Nam" : "Vietnã", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis e Futuna", + "Samoa" : "Samoa", + "Yemen" : "Iêmen", + "Mayotte" : "Maiote", + "South Africa" : "África do Sul", + "Zambia" : "Zâmbia", + "Zimbabwe" : "Zimbábue", + "Background blur" : "Desfoque de fundo", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Não foi possível verificar o suporte ao carregamento do WASM. Verifique manualmente se o seu servidor web serve arquivos `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Seu servidor web não está configurado corretamente para entregar arquivos `.wasm`. Normalmente, isso é um problema com a configuração do Nginx. Para desfoque de fundo, é necessário um ajuste para entregar também arquivos `.wasm`. Compare sua configuração do Nginx com a configuração recomendada em nossa documentação.", + "Talk configuration values" : "Valores de configuração do Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Forçar uma duração de chamada só é suportado com o cron do sistema. Habilite o cron do sistema ou remova a configuração `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Valores pequenos de `max_call_duration` (atualmente definido como %d) não são aplicáveis ​​devido a limitações técnicas. O trabalho em segundo plano é executado apenas a cada 5 minutos, então use por sua conta e risco.", + "Federation" : "Federação", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "É altamente recomendável configurar \"memcache.locking\" quando o Talk Federation estiver ativado.", + "High-performance backend" : "Back-end de alto desempenho", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nenhum back-end de alto desempenho configurado - A execução do Nextcloud Talk sem o back-end de alto desempenho só é dimensionada para chamadas muito pequenas (máximo de 2 a 3 participantes). Por favor, configure o back-end de alto desempenho para garantir que as chamadas com vários participantes funcionem sem problemas.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "A execução do modo \"conversation_cluster\" de back-end de alto desempenho está obsoleta e não será mais suportada na próxima versão. O back-end de alto desempenho atualmente suporta clustering real, que deve ser usado em vez disso.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definir múltiplos back-ends de alto desempenho está obsoleto e não será mais suportado na próxima versão. Em vez disso, um balanceador de carga deve ser configurado junto com servidores de sinalização em cluster e configurado nas configurações do Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "A chave pública armazenada para o algoritmo %1$s usado não corresponde à chave privada armazenada. Execute %2$s para corrigir o problema.", + "High-performance backend not configured correctly. Run %s for details." : "O back-end de alto desempenho não está configurado corretamente. Execute %s para obter detalhes.", + "High-performance backend not configured correctly" : "Back-end de alto desempenho não configurado corretamente", + "Error: Cannot connect to server" : "Erro: Não foi possível conectar ao servidor", + "Error: Server did not respond with proper JSON" : "Erro: Servidor não respondeu com o JSON apropriado", + "Error: Certificate expired" : "Erro: Certificado expirado", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: Os horários do sistema do servidor Nextcloud e do servidor de back-end de alto desempenho estão fora de sincronia. Por favor, certifique-se de que ambos os servidores estejam conectados a um servidor de tempo ou sincronize manualmente o horário deles.", + "Could not get version" : "Não foi possível obter a versão", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Erro: Versão em execução: {version}; O servidor precisa ser atualizado para ser compatível com esta versão do Talk", + "Error: Server responded with: {error}" : "Erro: Servidor respondeu com: {error}", + "Error: Unknown error occurred" : "Erro: Ocorreu um erro desconhecido", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Aviso: Versão em execução: {version}; O servidor não oferece suporte a todos os recursos desta versão do Talk, recursos ausentes: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "É altamente recomendável configurar um cache de memória ao executar Nextcloud Talk com back-end de alto desempenho.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "O Client Push está instalado, o que melhora a pontualidade das notificações do Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} não está instalado. Isso pode causar atrasos nas notificações do Talk.", + "Recording backend" : "Back-end de gravação", + "Using the recording backend requires a High-performance backend." : "Usar o back-end de gravação requer um back-end de alto desempenho.", + "No recording backend configured" : "Nenhum back-end de gravação configurado", + "SIP configuration" : "Configuração SIP", + "Using the SIP functionality requires a High-performance backend." : "O uso da funcionalidade SIP requer um back-end de alto desempenho.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Os números de telefone atribuídos ao Talk não devem começar com + ou 0. Remova ou atualize os seguintes números:\n{list}", + "No SIP backend configured" : "Nenhum back-end SIP configurado", + "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato deve ser YYYY-MM-DD", + "Conversation not found" : "Conversa não encontrada", + "Path is already shared with this conversation" : "O caminho já está compartilhado com esta conversa", + "Chat, video & audio-conferencing using WebRTC" : "Bate-papo, vídeo e audioconferência usando o WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Bate-papo, vídeo & audioconferência usando WebRTC\n\n* 💬 **Bate-papo** Nextcloud Talk vem com um bate-papo de texto simples, permitindo que você compartilhe ou carregue arquivos de seu aplicativo Nextcloud Arquivos ou dispositivo local e mencione outros participantes.\n* 👥 **Chamadas privadas, em grupo, públicas e protegidas por senha!** Convide alguém, um grupo inteiro ou envie um link público para convidar para uma chamada.\n* 🌐 **Bate-papos federados** Converse com outros usuários do Nextcloud nos servidores deles\n* 💻 **Compartilhamento de tela!** Compartilhe sua tela com os participantes da sua chamada.\n* 🚀 **Integração com outros aplicativos Nextcloud** como Arquivos, Calendário, Status do usuário, Painel, Fluxo, Mapas, Seletor Inteligente, Contatos, Deck e muitos mais.\n* 🌉 **Sincronização com outras soluções de bate-papo** Com a integração do [Matterbridge](https://github.com/42wim/matterbridge/) no Talk, você pode sincronizar facilmente muitas outras soluções de bate-papo com o Nextcloud Talk e vice-versa.", + "Leave call" : "Sair da chamada", + "Navigating away from the page will leave the call in {conversation}" : "Se você sair da página, sairá da ligação com {conversation}", + "Stay in call" : "Permanecer na chamada", + "Error occurred when getting the conversation information" : "Ocorreu um erro ao obter as informações da conversa", + "Discuss this file" : "Discutir sobre este arquivo", + "Share this file with others to discuss it" : "Compartilhe este arquivo com outros para discuti-lo", + "Share this file" : "Compartilhar este arquivo", + "Join conversation" : "Juntar-se à conversa", + "This conversation is password-protected." : "Esta conversa é protegida por senha.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Detectamos várias tentativas de senhas inválidas de seu IP. Portanto, sua próxima tentativa será limitada a 30 segundos.", + "The password is wrong. Try again." : "Senha incorreta. Tente novamente.", + "Password" : "Senha", + "Submit" : "Enviar", + "Error requesting the password." : "Erro ao solicitar a senha.", + "Request password" : "Solicitar senha", + "This conversation has ended" : "Esta conversa acabou", + "Error occurred when joining the conversation" : "Ocorreu um erro ao entrar na conversa", + "Close Talk sidebar" : "Fechar barra lateral do Talk", + "Open Talk sidebar" : "Abrir barra lateral do Talk", + "Everyone" : "Qualquer um", + "Users and moderators" : "Usuários e moderadores", + "Moderators only" : "Somente moderadores", + "Disable calls" : "Desativar chamadas", + "Save changes" : "Salvar alterações", + "Saving …" : "Salvando...", + "Saved!" : "Salvo!", + "Limit to groups" : "Limitar a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Quando pelo menos um grupo é selecionado, somente pessoas destes grupos podem fazer parte de conversas.", + "Guests can still join public conversations." : "Convidados ainda podem juntar-se a conversas públicas.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Os usuários que não podem mais usar o aplicativo Talk ainda serão listados como participantes em suas conversas anteriores e também suas mensagens de chat serão mantidas.", + "Limit using Talk" : "Limitar o uso do Talk", + "Limit creating a public and group conversation" : "Limitar criar uma conversa pública ou de grupo", + "Limit creating conversations" : "Limitar criar conversas", + "Limit starting a call" : "Limitar iniciar uma chamada", + "Limit starting calls" : "Limitar iniciar chamadas", + "When a call has started, everyone with access to the conversation can join the call." : "Quando uma chamada é iniciada, todos que têm acesso à conversa podem entrar na chamada.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Os seguintes bots estão instalados neste servidor. Na documentação, você pode encontrar detalhes sobre como {linkstart1}criar seu próprio bot{linkend} ou uma {linkstart2}lista de bots{linkend} para habilitar em seu servidor.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nenhum bot está instalado neste servidor. Na documentação, você pode encontrar detalhes sobre como {linkstart1}criar seu próprio bot{linkend} ou uma {linkstart2}lista de bots{linkend} para habilitar em seu servidor.", + "Description is not provided" : "Descrição não é fornecida", + "Locked for moderators" : "Trancado para moderadores", + "Enabled" : "Ativado", + "Disabled" : "Desativado", + "Bots settings" : "Configurações de bots", + "State" : "Estado", + "Name" : "Nome", + "Last error" : "Último erro", + "Total errors count" : "Contagem total de erros", + "Find more bots" : "Encontre mais bots", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Servidores confiáveis ​​podem ser configurados na {linkstart}página de configurações de compartilhamento{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Os bate-papos federados e as chamadas federadas já funcionam. O manuseio de anexos será feito em uma versão futura.", + "Enable Federation in Talk app" : "Ativar Federação no aplicativo Talk", + "Permissions" : "Permissões", + "Allow users to be invited to federated conversations" : "Permitir que os usuários sejam convidados para conversas federadas", + "Allow users to invite federated users into conversation" : "Permitir que os usuários convidem usuários federados para uma conversa", + "Only allow to federate with trusted servers" : "Permitir federar apenas com servidores confiáveis", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Quando pelo menos um grupo for selecionado, somente as pessoas dos grupos listados poderão convidar usuários federados para conversas.", + "Groups allowed to invite federated users" : "Grupos com permissão para convidar usuários federados", + "Select groups …" : "Selecionar grupos …", + "All messages" : "Todas as mensagens", + "@-mentions only" : "Somente @-mentions", + "Off" : "Desligar", + "General settings" : "Configurações gerais", + "Default notification settings" : "Configurações de notificação padrão", + "Default group notification" : "Notificação padrão de grupo", + "Default group notification for new groups" : "Notificação padrão de grupo para novos grupos", + "Integration into other apps" : "Integração com outros aplicativos", + "Allow conversations on files" : "Permitir conversas em arquivos", + "Allow conversations on public shares for files" : "Permitir conversas em compartilhamentos públicos para arquivos", + "End-to-end encrypted calls" : "Chamadas criptografadas de ponta-a-ponta", + "Enable encryption" : "Ativar criptografia", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "As chamadas criptografadas de ponta-a-ponta com uma ponte SIP configurada exigem uma versão mais recente do back-end de alto desempenho e da ponte SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "No momento, os clientes móveis não oferecem suporte a chamadas criptografadas de ponta-a-ponta.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Ao clicar no botão acima, as informações no formulário são enviadas para os servidores da Struktur AG. Você pode encontrar mais informações em {linkstart}spreed.eu{linkend}.", + "Pending" : "Pendente", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Active" : "Ativar", + "Expired" : "Expirado", + "Never" : "Nunca", + "The trial could not be requested. Please try again later." : "A avaliação não pôde ser solicitada. Tente novamente mais tarde.", + "The account could not be deleted. Please try again later." : "Não foi possível excluir a conta. Tente novamente mais tarde.", + "Hosted High-performance backend" : "Back-end de alto desempenho hospedado", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Nosso parceiro Struktur AG fornece um serviço no qual um servidor de sinalização hospedado pode ser solicitado. Para isso, você só precisa preencher o formulário abaixo e seu Nextcloud solicitará. Depois que o servidor estiver configurado para você, as credenciais serão preenchidas automaticamente. Isso substituirá as configurações existentes do servidor de sinalização.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Se sua conta do back-end de alto desempenho incluir a funcionalidade STUN e/ou TURN, as configurações serão atualizadas de acordo.", + "URL of this Nextcloud instance" : "URL desta instância Nextcloud", + "Full name of the user requesting the trial" : "Nome completo do usuário que solicitou a avaliação", + "Email of the user" : "E-mail do usuário ", + "Language" : "Idioma", + "Country" : "País", + "Request signaling server trial" : "Solicitar avaliação de servidor de sinalização", + "You can see the current status of your hosted signaling server in the following table." : "Você pode ver o status atual do seu servidor de sinalização na tabela a seguir.", + "Status" : "Status", + "Created at" : "Criado em", + "Expires at" : "Expira em", + "Limits" : "Limites", + "STUN included" : "STUN incluído", + "Yes" : "Sim", + "No" : "Não", + "TURN included" : "TURN incluído", + "Delete the signaling server account" : "Excluir a conta do servidor de sinalização", + "_%n user_::_%n users_" : ["%n usuário","%n usuários","%n usuários"], + "Installed version: {version}" : "Versão instalada: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Você pode instalar o Matterbridge para vincular o Nextcloud Talk a alguns outros serviços, visite a {linkstart1}página do GitHub{linkend} para obter mais detalhes. Baixar e instalar o aplicativo pode demorar um pouco. Caso expire, instale-o manualmente a partir da {linkstart2}Loja de Aplicativos do Nextcloud{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "O binário do Matterbridge tem permissões incorretas. Verifique se o arquivo binário do Matterbridge é de propriedade do usuário correto e se pode ser executado. Ele pode ser encontrado em \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "O binário Matterbridge não foi encontrado ou não pôde ser executado.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Você também pode definir o caminho para o binário Matterbridge manualmente por meio da configuração. Verifique a {linkstart}documentação de integração do Matterbridge{linkend} para mais informações.", + "Downloading …" : "Baixando…", + "Install Talk Matterbridge" : "Instalar Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Um erro ocorreu ao instalar o aplicativo Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ocorreu um erro ao instalar o Talk Matterbridge. Por favor, instale-o manualmente", + "Failed to execute Matterbridge binary." : "Erro ao executar o binário Matterbridge.", + "Matterbridge integration" : "Integração Matterbridge", + "Enable Matterbridge integration" : "Ativar a integração Matterbridge", + "Status: Checking connection" : "Status: Verificando conexão", + "OK: Running version: {version}" : "OK: Versão rodando: {version}", + "Error: Server seems to be a Signaling server" : "Erro: O servidor parece ser um servidor de Sinalização", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Erro: Os horários do sistema do servidor Nextcloud e do servidor de back-end de gravação estão fora de sincronia. Por favor, certifique-se de que ambos os servidores estejam conectados a um servidor de horário ou sincronize manualmente o horário deles.", + "Recording backend URL" : "URL de back-end de gravação", + "Validate SSL certificate" : "Validar o certificado SSL", + "Delete this server" : "Excluir este servidor", + "Test this server" : "Testar este servidor", + "Disabled for all calls" : "Desativado para todas as chamadas", + "Enabled for all calls" : "Ativado para todas as chamadas", + "Configurable on conversation level by moderators" : "Configurável no nível da conversa pelos moderadores", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "A configuração PHP \"upload_max_filesize\" ou \"post_max_size\" só permitirá o upload de arquivos de até {maxUpload}.", + "Recording backend settings saved" : "Configurações de back-end de gravação salvas", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Os moderadores terão permissão para ativar o consentimento no nível da conversa. O consentimento para gravação será exigido de cada participante antes de entrar em cada chamada desta conversa.", + "The consent to be recorded will be required for each participant before joining every call." : "O consentimento para gravação será exigido de cada participante antes de entrar em cada chamada.", + "The consent to be recorded is not required." : "O consentimento para ser gravado não é necessário.", + "Recording backend configuration is only possible with a High-performance backend." : "A configuração do back-end de gravação só é possível com um back-end de alto desempenho.", + "Add a new recording backend server" : "Adicionar um novo servidor de back-end de gravação", + "Shared secret" : "Segredo compartilhado", + "Recording consent" : "Consentimento de gravação", + "Recording transcription" : "Transcrição de gravações", + "Automatically transcribe call recordings with a transcription provider" : "Transcrever automaticamente gravações de chamadas com um provedor de transcrição", + "Automatically summarize call recordings with transcription and summary providers" : "Resumir automaticamente gravações de chamadas com provedores de transcrição e resumo", + "SIP configuration saved!" : "Configuração SIP salva!", + "SIP configuration is only possible with a High-performance backend." : "A configuração de SIP só é possível com um back-end de alto desempenho.", + "Enable SIP Dial-out option" : "Ativar opção de discagem SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "O servidor de sinalização precisa ser atualizado para o recurso de discagem SIP suportado.", + "Do not show SIP Dial-out caller number" : "Não mostrar o número de discagem SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "O número anônimo deve aparecer como \"desconhecido\" ou \"número restrito\" para o destinatário da chamada.", + "Dial-out number" : "Número de discagem", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Número no formato E164 usado como número de retorno de chamada para chamadas efetuadas", + "Dial-out prefix" : "Prefixo de discagem", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefixo para o número de usuário configurado para chamadas efetuadas (o padrão é `+`)", + "Restrict SIP configuration" : "Restringir configuração SIP", + "Enable SIP configuration" : "Ativar configuração SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Apenas usuários dos grupos a seguir podem ativar o SIP em conversas que moderam", + "Phone number (Country)" : "Número do telefone (País)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Estas informações são enviadas em e-mails de convite e também exibidas na barra lateral para todos os participantes.", + "Nextcloud base URL" : "URL base do Nextcloud", + "Talk Backend URL" : "URL do Back-end do Talk", + "WebSocket URL" : "URL de WebSocket", + "Available features" : "Recursos disponíveis", + "Error: Websocket connection failed" : "Erro: Falha na conexão Websocket", + "Error code" : "Código de erro", + "Error message" : "Mensagem de erro", + "Error: Websocket connection failed. Check browser console" : "Erro: Falha na conexão do websocket. Verifique o console do navegador", + "High-performance backend URL" : "URL do back-end de alto desempenho", + "Missing High-performance backend warning hidden" : "Aviso de falta do back-end de alto desempenho oculto", + "High-performance backend settings saved" : "Configurações de back-end de alta performance salvas", + "Nextcloud Talk setup not complete" : "A configuração do Nextcloud Talk não foi concluída", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Observe que, em chamadas com mais de 2 participantes sem o back-end de alto desempenho, os participantes provavelmente terão problemas de conectividade e causarão alta carga nos dispositivos participantes.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Instale o back-end de alto desempenho para garantir que as chamadas com vários participantes funcionem sem problemas.", + "Nextcloud portal" : "Portal do Nextcloud", + "Quick installation guide" : "Guia de instalação rápida", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "O back-end de alto desempenho é necessário para chamadas e conversas com vários participantes. Sem o back-end, todos os participantes precisam carregar seus próprios vídeos individualmente para cada um dos outros participantes, o que provavelmente causará problemas de conectividade e alta carga nos dispositivos participantes.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "É altamente recomendável configurar um cache distribuído ao usar o Nextcloud Talk com um back-end de alto desempenho.", + "Add High-performance backend server" : "Adicionar servidor de back-end de alto desempenho", + "Warn about connectivity issues in calls with more than 2 participants" : "Avisar sobre problemas de conectividade em chamadas com mais de 2 participantes", + "STUN server URL" : "URL do servidor de STUN", + "The server address is invalid" : "O endereço do servidor é inválido", + "STUN settings saved" : "Configurações de STUN salvas", + "STUN servers" : "Servidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Um servidor STUN é usado para determinar o endereço IP público dos participantes por detrás de um roteador.", + "Add a new STUN server" : "Adicionar um novo servidor STUN", + "{schema} scheme must be used with a domain" : "O esquema {schema} deve ser usado com um domínio", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} apenas", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidatos ICE foram retornados pelo servidor TURN", + "Error: No working ICE candidates returned by the TURN server" : "Erro: Nenhum candidato ICE foi retornado pelo servidor TURN", + "Testing whether the TURN server returns ICE candidates" : "Testando para ver se o servidor TURN retorna candidatos ICE", + "TURN server schemes" : "Esquemas de servidor TURN", + "TURN server URL" : "URL do servidor de TURN", + "TURN server secret" : "Segredo do servidor TURN", + "TURN server protocols" : "Protocolos do servidor TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Um servidor TURN é usado como proxy do tráfego dos participantes por trás de um firewall. Se os participantes individuais não puderem se conectar a outros, provavelmente será necessário um servidor TURN. Consulte {linkstart}esta documentação{linkend} para obter instruções de configuração. ", + "TURN settings saved" : "Configurações TURN salvas", + "TURN servers" : "Servidores TURN", + "Add a new TURN server" : "Adicionar um novo servidor TURN", + "Failed" : "Falhou", + "OK" : "OK", + "Checking …" : "Verificando …", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Falha: WebAssembly está desativado ou não é compatível com este navegador. Habilite o WebAssembly ou use um navegador com suporte para fazer a verificação.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Falha: Os arquivos \".wasm\" e \".tflite\" não foram retornados corretamente pelo servidor web. Verifique a seção \"Requisitos do sistema\" na documentação do Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Os arquivos \".wasm\" e \".tflite\" foram retornados corretamente pelo servidor da web.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Parece que a configuração do PHP e do Apache não é compatível. Observe que o PHP só pode ser usado com o módulo MPM_PREFORK e o PHP-FPM só pode ser usado com o módulo MPM_EVENT.", + "Web server setup checks" : "Verificações de configuração do servidor web", + "Files required for virtual background can be loaded" : "Arquivos necessários para o plano de fundo virtual podem ser carregados", + "Federated user" : "Usuário federado", + "Assign participants to rooms" : "Atribuir participantes a salas", + "Configure breakout rooms" : "Configurar salas temáticas", + "Number of breakout rooms" : "Número de salas temáticas", + "You can create from 1 to 20 breakout rooms." : "Você pode criar de 1 a 20 salas temáticas.", + "Assignment method" : "Método de atribuição", + "Automatically assign participants" : "Atribuir participantes automaticamente", + "Manually assign participants" : "Atribuir participantes manualmente", + "Allow participants to choose" : "Permitir que os participantes escolham", + "Create rooms" : "Criar salas", + "Confirm" : "Confirmar", + "Create breakout rooms" : "Criar salas temáticas", + "Reset" : "Redefinir", + "Delete breakout rooms" : "Excluir salas temáticas", + "Room {roomNumber}" : "Sala {roomNumber}", + "Current breakout rooms and settings will be lost" : "As salas temáticas e as configurações atuais serão perdidas", + "Cancel" : "Cancelar", + "Unassigned participants" : "Participantes não atribuídos", + "Back" : "Voltar", + "Assign" : "Atribuir", + "Add participant \"{user}\"" : "Adicionar participante \"{user}\"", + "Now" : "Agora", + "Invalid calendar selected" : "Calendário inválido selecionado", + "Invalid start time selected" : "Hora de início inválida selecionada", + "Invalid end time selected" : "Hora de término inválida selecionada", + "Unknown error occurred" : "Ocorreu um erro desconhecido", + "Sending no invitations" : "Não enviando convites", + "{participant0} will receive an invitation" : "{participant0} receberá um convite", + "{participant0} and {participant1} will receive invitations" : "{participant0} e {participant1} receberão um convite", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} e mais %n receberão convites","{participant0}, {participant1} e mais %n receberão convites","{participant0}, {participant1} e mais %n receberão convites"], + "Invite {user}" : "Convidar {user}", + "Invite all users and emails in this conversation" : "Convidar todos os usuários e e-mails nesta conversa", + "Meeting created" : "Reunião criada", + "Upcoming meetings" : "Próximas reuniões", + "Loading …" : "Carregando …", + "No upcoming meetings" : "Nenhuma próxima reunião", + "Schedule a meeting" : "Agendar uma reunião", + "Meeting title" : "Título da reunião", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendário", + "Attendees" : "Participantes", + "No other participants to send invitations to." : "Não há outros participantes para enviar convites.", + "Add attendees" : "Adicionar participantes", + "Save" : "Salvar", + "Search participants" : "Procurar participantes", + "No results" : "Nenhum resultado", + "Done" : "Concluído", + "Disable live transcription" : "Desativar transcrição em tempo real", + "Enable live transcription (generated by AI)" : "Ativar transcrição em tempo real (gerada por IA)", + "Enable live transcription (Live transcriptions app is not installed)" : "Ativar transcrição em tempo real (o aplicativo de transcrição em tempo real não está instalado)", + "Disable live translation" : "Desativar tradução em tempo real", + "Enable live translation (generated by AI)" : "Ativar tradução em tempo real (gerada por IA)", + "Original language" : "Idioma original", + "Live translations app is not installed" : "O aplicativo de tradução em tempo real não está instalado", + "Original language: {languageName}" : "Idioma original: {languageName}", + "Translated language" : "Idioma traduzido", + "Translated language: {languageName}" : "Idioma traduzido: {languageName}", + "Raise hand" : "Levantar a mão", + "Raise hand (R)" : "Levantar a mão (R) ", + "Lower hand" : "Abaixar a mão", + "Lower hand (R)" : "Abaixar a mão (R)", + "Exit full screen (F)" : "Sair da tela cheia (F)", + "Full screen (F)" : "Tela cheia (F)", + "Speaker view" : "Visualização de orador", + "Grid view" : "Vista em grade", + "Error when trying to load the available live transcription languages" : "Erro ao carregar os idiomas disponíveis para transcrição em tempo real", + "Failed to enable live transcription" : "Erro ao ativar a transcrição em tempo real", + "Failed to enable live translations" : "Falha ao ativar a tradução em tempo real", + "Failed to disable live translations" : "Falha ao desativar a tradução em tempo real", + "Recording consent is required" : "É necessário o consentimento de gravação", + "This conversation is read-only" : "Esta conversa é somente leitura", + "Conversation not found or not joined" : "Conversa não encontrada ou não entrou", + "Lobby is still active and you're not a moderator" : "A sala de espera ainda está ativa e você não é um moderador", + "Connection failed" : "Falha na conexão", + "Reload" : "Recarregar", + "{nickName} raised their hand." : "{nickName} levantou a mão.", + "A participant raised their hand." : "Um participante levantou a mão.", + "Collapse stripe" : "Recolher faixa", + "Expand stripe" : "Expandir faixa", + "Previous page of videos" : "Página anterior de vídeos", + "Next page of videos" : "Próxima página de vídeos", + "Connecting …" : "Conectando …", + "Calling …" : "Ligando …", + "Waiting for {user} to join the call" : "Aguardando a entrada de {user} na chamada", + "Waiting for others to join the call …" : "Esperando outros entrarem na chamada...", + "You can invite others in the participant tab of the sidebar" : "Você pode convidar outros na aba de participantes da barra lateral", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Você pode convidar outros na aba de participantes da barra lateral ou compartilhar esse link para convidar outras pessoas!", + "Share this link to invite others!" : "Compartilhe este link para convidar outros!", + "Copy link" : "Copiar link", + "You are not allowed to enable audio" : "Você não tem permissão para habilitar o áudio", + "No audio. Click to select device" : "Sem áudio. Clique para selecionar um dispositivo", + "Mute audio" : "Desativar microfone", + "Mute audio (M)" : "Desativar microfone (M)", + "Unmute audio" : "Ativar microfone", + "Unmute audio (M)" : "Ativar microfone (M)", + "None" : "Nenhum", + "Select a microphone" : "Selecione um microfone", + "Select a speaker" : "Selecione um alto-falante", + "Microphone settings" : "Configurações do microfone", + "Check devices" : "Verificar dispositivos", + "Access to camera was denied" : "O acesso à câmera foi negado", + "Error while accessing camera: It is likely in use by another program" : "Erro ao acessar a câmera: Ela provavelmente está sendo usada por outro programa", + "Error while accessing camera" : "Erro ao acessar a câmera", + "You have been muted by a moderator" : "Você foi silenciado por um moderador", + "Hide presenter video" : "Ocultar vídeo do apresentador", + "You are not allowed to enable video" : "Você não tem permissão para habilitar o vídeo", + "No video. Click to select device" : "Sem vídeo. Clique para selecionar um dispositivo", + "Disable video" : "Desativar vídeo", + "Disable video (V)" : "Desativar vídeo (V) ", + "Enable video" : "Ativar vídeo", + "Enable video (V)" : "Ativar vídeo (V) ", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo - Sua conexão será interrompida brevemente ao ativar o vídeo pela primeira vez", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo (V) - Sua conexão será interrompida brevemente ao ativar o vídeo pela primeira vez", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ativar vídeo. Sua conexão será brevemente interrompida ao ativar o vídeo pela primeira vez", + "Select a video device" : "Selecione um dispositivo de vídeo", + "Show presenter" : "Mostrar apresentador", + "You" : "Você", + "Mute" : "Desativar microfone", + "Muted" : "Microfone desativado", + "Show screen" : "Exibir tela", + "Stop following" : "Parar de seguir", + "Connection could not be established …" : "Não foi possível estabelecer a conexão …", + "Connection was lost and could not be re-established …" : "A conexão foi perdida e não pôde ser restabelecida …", + "Connection could not be established. Trying again …" : "Não foi possível estabelecer a conexão. Tentando novamente …", + "Connection lost. Trying to reconnect …" : "Conexão perdida. Tentando reconectar …", + "Connection problems …" : "Problemas de conexão ...", + "Collapse" : "Recolher", + "Expand" : "Expandir", + "You need to be logged in to upload files" : "Você precisa fazer login para enviar arquivos", + "Drop your files to upload" : "Arraste seus arquivos para enviar", + "Conversation messages" : "Mensagens de conversa", + "Scroll to bottom" : "Rolar para baixo", + "Post message" : "Postar mensagem", + "Federated conversation" : "Conversa federada", + "Public conversation" : "Conversa pública", + "Favorite" : "Favorito", + "Banned users" : "Usuários banidos", + "Manage the list of banned users in this conversation." : "Gerencie a lista de usuários banidos nesta conversa.", + "Manage bans" : "Gerenciar banimentos", + "No banned users" : "Nenhum usuário banido", + "Banned by:" : "Banido por:", + "Date:" : "Data:", + "Note:" : "Anotação:", + "Hide details" : "Ocultar detalhes", + "Show details" : "Exibir detalhes", + "Unban" : "Desbanir", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Você pode alterar o título e a descrição no {linkstart}Calendário ↗{linkend}.", + "Error while updating conversation name" : "Erro ao atualizar o nome da conversa", + "Error while updating conversation description" : "Ocorreu um erro ao editar a descrição da conversa", + "Enter a name for this conversation" : "Digite um nome para esta conversa", + "Edit conversation name" : "Editar o nome da conversa", + "Edit conversation description" : "Editar descrição da conversa", + "Enter a description for this conversation" : "Digite uma descrição para esta conversa ", + "Picture" : "Imagem", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Os seguintes bots podem ser ativados nesta conversa. Entre em contato com sua administração para obter mais bots instalados neste servidor.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Nenhum bot está instalado neste servidor. Entre em contato com sua administração para instalar bots neste servidor.", + "Disable" : "Desativar", + "Enable" : "Ativar", + "The bot is not available anymore" : "O robô não está mais disponível", + "Breakout rooms" : "Salas temáticas", + "Manage breakout rooms" : "Gerenciar salas temáticas", + "Set up breakout rooms for this conversation" : "Criar salas temáticas para esta conversa", + "Please select a valid PNG or JPG file" : "Por favor, selecione um arquivo PNG ou JPG válido", + "Choose your conversation picture" : "Escolha sua imagem da conversa", + "Choose" : "Escolher", + "Error setting conversation picture" : "Erro ao configurar imagem da conversa", + "Could not set the conversation picture: {error}" : "Não foi possível definir imagem da conversa: {error}", + "Error cropping conversation picture" : "Erro ao cortar imagem da conversa", + "Error removing conversation picture" : "Erro ao remover imagem da conversa", + "Set emoji as conversation picture" : "Configurar emoji como imagem da conversa", + "Set background color for conversation picture" : "Configurar cor do plano de fundo para imagem da conversa", + "Upload conversation picture" : "Fazer upload da imagem da conversa", + "Choose conversation picture from files" : "Escolher imagem da conversa a partir dos arquivos", + "Remove conversation picture" : "Remover imagem da conversa", + "The file must be a PNG or JPG" : "O arquivo deve ser um PNG ou JPG", + "Set picture" : "Configurar imagem", + "Default permissions modified for {conversationName}" : "Permissões padrão modificadas para {conversationName}", + "Could not modify default permissions for {conversationName}" : "Não foi possível modificar as permissões padrão para {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Edite as permissões padrão para os participantes desta conversa. Essas configurações não afetam os moderadores.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Toda vez que as permissões são modificadas nesta seção, as permissões personalizadas anteriormente atribuídas a participantes individuais serão perdidas.", + "All permissions" : "Todas as permissões", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Os participantes têm permissão para iniciar uma chamada, entrar em uma chamada, ativar áudio e vídeo e compartilhar a tela.", + "Participants can use all available features." : "Os participantes podem utilizar todos os recursos disponíveis.", + "Restricted" : "Restritas", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Os participantes podem entrar em chamadas, mas não podem ativar áudio ou vídeo, nem compartilhar a tela até que um moderador lhes conceda as permissões manualmente.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Os participantes têm acesso a um conjunto reduzido de recursos até que um moderador conceda manualmente permissões adicionais.", + "Advanced permissions" : "Permissões avançadas", + "Edit permissions" : "Editar permissões ", + "Conversation settings" : "Configurações da conversa", + "Basic Info" : "Informações Básicas", + "Personal" : "Pessoal", + "Moderation" : "Moderação", + "Setup overview" : "Visão geral da configuração", + "Live transcription" : "Transcrição em tempo real", + "Live transcriptions app is not installed" : "O aplicativo de transcrição em tempo real não está instalado", + "Enable live transcription" : "Ativar transcrição em tempo real", + "Breakout Rooms" : "Salas Temáticas", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Zona de perigo", + "Archive conversation" : "Arquivar conversa", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Conversas arquivadas são ocultadas da lista de conversas por padrão. No entanto, elas ainda aparecerão quando você pesquisar o nome da conversa ou acessar uma lista de conversas arquivadas.", + "Do you really want to leave \"{displayName}\"?" : "Você realmente quer sair de \"{displayName}\"?", + "You can archive this conversation instead." : "Em vez disso, você pode arquivar esta conversa.", + "Leave conversation" : "Encerrar conversa", + "You need to promote a new moderator before you can leave the conversation" : "Você precisa promover um novo moderador antes de sair da conversa", + "Delete conversation" : "Excluir conversa", + "Do you really want to delete \"{displayName}\"?" : "Você realmente quer excluir \"{displayName}\"?", + "Error while deleting conversation" : "Erro ao excluir a conversa", + "Delete all chat messages" : "Excluir todas as mensagens de bate-papo ", + "Do you really want to delete all messages in \"{displayName}\"?" : "Você realmente quer excluir todas as mensagens em \"{displayName}\"?", + "Error while clearing chat history" : "Erro ao limpar o histórico de bate-papo ", + "Be careful, these actions cannot be undone." : "Cuidado, estas ações não podem ser desfeitas.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Depois que uma conversa é encerrada, para voltar a uma conversa encerrada, é necessário um convite. Uma conversa aberta pode ser retomada a qualquer momento. ", + "Permanently delete this conversation." : "Excluir esta conversa permanentemente. ", + "Delete chat messages" : "Excluir mensagens de bate-papo ", + "Permanently delete all the messages in this conversation." : "Excluir permanentemente todas as mensagens desta conversa. ", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], + "_%n week_::_%n weeks_" : ["%n semana","%n semanas","%n semanas"], + "Custom expiration time" : "Tempo de expiração personalizado", + "Message expiration disabled" : "Expiração de mensagens desativada", + "Message expiration set: {duration}" : "Expiração de mensagens configurada: {duration}", + "Error when trying to set message expiration" : "Erro ao tentar definir a expiração de mensagens", + "Message expiration" : "Expiração de mensagens", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensagens de bate-papo podem expirar após um certo tempo. Observação: Os arquivos compartilhados no bate-papo não serão excluídos para o proprietário, mas não serão mais compartilhados na conversa.", + "Set message expiration" : "Definir expiração de mensagens", + "Current message expiration" : "Expiração de mensagens atual", + "Password copied to clipboard" : "Senha copiada para a área de transferência", + "Password could not be copied" : "Não foi possível copiar a senha", + "Guest access" : "Acesso para convidados", + "Breakout rooms are not allowed in public conversations." : "Salas temáticas não são permitidas em conversas públicas.", + "Allow guests to join this conversation via link" : "Permitir que os convidados entrem nesta conversa por meio de um link", + "Password protection" : "Proteção por senha", + "This conversation is password-protected. Guests need password to join" : "Esta conversa é protegida por senha. Os convidados precisam de senha para participar", + "Password protection is needed for public conversations" : "A proteção por senha é necessária para conversas públicas", + "Set a password" : "Definir uma senha", + "Change password" : "Alterar senha", + "Enter new password" : "Insira a nova senha", + "Save password" : "Salvar senha", + "Copy password" : "Copiar a senha", + "Guests are allowed to join this conversation via link" : "Convidados têm permissão para entrar nesta conversa por meio de um link", + "Guests are not allowed to join this conversation" : "Convidados não têm permissão para entrar nesta conversa", + "Resend invitations" : "Reenviar convites", + "This conversation is open to both registered users and users created with the Guests app" : "Esta conversa está aberta tanto para usuários registrados quanto para usuários criados com o aplicativo Convidados", + "This conversation is open to registered users" : "Esta conversa está aberta a usuários registrados", + "This conversation is limited to the current participants" : "Esta conversa é limitada aos participantes atuais", + "You opened the conversation to both registered users and users created with the Guests app" : "Você abriu a conversa para usuários registrados e usuários criados com o aplicativo Convidados", + "Error occurred when opening or limiting the conversation" : "Ocorreu um erro ao abrir ou limitar a conversa", + "Open conversation to registered users, showing it in search results" : "Abrir a conversa para usuários registrados, mostrando-a nos resultados da pesquisa", + "Also open to users created with the Guests app" : "Também abrir para usuários criados com o aplicativo Convidados", + "Open conversation" : "Abrir conversa", + "Set language spoken in calls" : "Definir idioma falado nas chamadas", + "Languages could not be loaded" : "Não foi possível carregar os idiomas", + "Loading languages …" : "Carregando idiomas …", + "Invalid language" : "Idioma inválido", + "Default language (English)" : "Idioma padrão (inglês)", + "Default live transcription language set" : "Idioma padrão definido para transcrição em tempo real", + "Live transcription language set: {languageName}" : "Idioma definido para transcrição em tempo real: {languageName}", + "Error when trying to set live transcription language" : "Erro ao definir o idioma para transcrição em tempo real", + "Start time: {date}" : "Hora de início: {date}", + "Start time has been updated" : "A hora de início foi atualizada", + "Error occurred while updating start time" : "Ocorreu um erro ao atualizar a hora de início", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Ativar a sala de espera removerá os não moderadores da chamada em andamento.", + "Enable lobby, restricting the conversation to moderators" : "Ativar sala de espera, restringindo a conversa aos moderadores", + "Meeting start time" : "Hora de início da reunião", + "Start time (optional)" : "Horário de início (opcional)", + "Import email participants" : "Importar e-mail dos participantes", + "You can import a list of email participants from a CSV file." : "Você pode importar uma lista de participantes de e-mail de um arquivo CSV.", + "Poll drafts" : "Rascunhos de enquetes", + "Browse poll drafts" : "Navegar pelos rascunhos de enquetes", + "Error occurred when locking the conversation" : "Ocorreu um erro ao trancar a conversa", + "Error occurred when unlocking the conversation" : "Ocorreu um erro ao destrancar a conversa", + "Lock conversation" : "Trancar conversa", + "This will also terminate the ongoing call." : "Isso também encerrará a chamada em andamento. ", + "Lock the conversation to prevent anyone to post messages or start calls" : "Tranque a conversa para impedir que alguém poste mensagens ou inicie chamadas", + "Edit" : "Editar", + "More information" : "Mais informações", + "Delete" : "Excluir", + "Add new bridged channel to current conversation" : "Adicionar novo canal de comunicação para a conversa atual", + "unknown state" : "estado desconhecido", + "running" : "rodando", + "not running, check Matterbridge log" : "não está funcionando, verifique o log do Matterbridge", + "not running" : "sem funcionamento", + "Bridge saved" : "Ponte salva", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Você pode conectar canais de vários sistemas de mensagens instantâneas com Matterbridge.", + "More info on Matterbridge" : "Mais informações no Matterbridge", + "Messaging systems" : "Sistemas de mensagens", + "Enable bridge" : "Ativar ponte", + "Show Matterbridge log" : "Mostrar log do Matterbridge", + "Log content" : "Conteúdo do registro", + "Only moderators are allowed to mention @all" : "Somente moderadores podem mencionar @all", + "All participants are allowed to mention @all" : "Todos os participantes podem mencionar @all", + "Participants are now allowed to mention @all." : "Os participantes agora podem mencionar @all.", + "Mentioning @all has been limited to moderators." : "Mencionar @all foi limitado aos moderadores.", + "Allow participants to mention @all" : "Permitir que os participantes mencionem @all", + "Mention permissions" : "Permissões de menção", + "Notifications" : "Notificações", + "Notify about calls in this conversation" : "Notificar sobre chamadas nesta conversa ", + "Important conversation" : "Conversa importante", + "\"Do not disturb\" user status is ignored for important conversations" : "O status de usuário \"Não perturbe\" é ignorado em conversas importantes", + "Sensitive conversation" : "Conversa sensível", + "Message preview will be disabled in conversation list and notifications" : "A visualização de mensagens será desativada na lista de conversas e nas notificações", + "Recording consent is required for calls in this conversation" : "O consentimento de gravação é necessário para chamadas nesta conversa", + "Recording consent is not required for calls in this conversation" : "O consentimento de gravação não é necessário para chamadas nesta conversa", + "Recording consent requirement was updated" : "O requisito de consentimento de gravação foi atualizado", + "Error occurred while updating recording consent" : "Ocorreu um erro ao atualizar o consentimento de gravação", + "Recording Consent" : "Consentimento de Gravação", + "Recording consent cannot be changed once a call or breakout session has started." : "O consentimento de gravação não pode ser alterado após o início de uma chamada ou sessão de sala temática.", + "Require recording consent before joining call in this conversation" : "Exigir consentimento de gravação antes de entrar em uma chamada nesta conversa", + "Recording consent is required for all calls" : "O consentimento de gravação é necessário para todas as chamadas", + "SIP dial-in is now possible without PIN requirement" : "A discagem SIP agora é possível sem a necessidade de PIN", + "SIP dial-in is now enabled" : "A discagem SIP agora está ativada", + "SIP dial-in is now disabled" : "A discagem SIP agora está desativada", + "Error occurred when enabling SIP dial-in" : "Ocorreu um erro ao ativar a discagem SIP", + "Error occurred when disabling SIP dial-in" : "Ocorreu um erro ao desativar a discagem SIP", + "Phone and SIP dial-in" : "Discagem por telefone e SIP", + "Enable phone and SIP dial-in" : "Ativar discagem por telefone e SIP", + "Allow to dial-in without a PIN" : "Permitir discar sem um PIN", + "Ongoing" : "Em andamento", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n pessoa aceitou","%n pessoas aceitaram","%n pessoas aceitaram"], + "_%n person declined_::_%n people declined_" : ["%n pessoa recusou","%n pessoas recusaram","%n pessoas recusaram"], + "_and %n other attachment_::_and %n other attachments_" : ["e %n outro anexo","e %n de outros anexos","e %n outros anexos"], + "With {displayName}" : "Com {displayName}", + "In {conversation}" : "Em {conversation}", + "View attachment" : "Exibir anexo", + "Join" : "Entrar", + "View conversation" : "Exibir conversa", + "View event on Calendar" : "Exibir evento no Calendário", + "Error while creating the conversation" : "Erro ao criar a conversa", + "Hello, {displayName}" : "Olá, {displayName}", + "Start meeting now" : "Iniciar reunião agora", + "Give your meeting a title" : "Dê um título à sua reunião", + "Create and copy link" : "Criar e copiar link", + "Create a new conversation" : "Criar uma nova conversa", + "Join open conversations" : "Entrar em conversas abertas", + "Call a phone number" : "Ligar para um número de telefone", + "Scroll backward" : "Rolar para trás", + "Scroll forward" : "Rolar para frente", + "Schedule meetings" : "Agendar reuniões", + "You don't have any upcoming meetings" : "Você não tem nenhuma reunião em breve.", + "Calendar events with a conversation link as the location are shown here" : "Os eventos do calendário cujo local é um link de conversa são exibidos aqui", + "Open calendar" : "Abrir calendário", + "Unread mentions" : "Menções não lidas", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "As mensagens em que você foi mencionado aparecerão aqui. Você pode mencionar pessoas digitando @ seguido do nome delas.", + "Upcoming reminders" : "Próximos lembretes", + "Message reminders" : "Lembretes de mensagens", + "Set a reminder on a message to be notified" : "Defina um lembrete em uma mensagem para ser notificado", + "Start a group conversation" : "Iniciar conversa de grupo", + "Create conversation" : "Criando conversa", + "Enter your name" : "Digite seu nome", + "Submit name and join" : "Envie o nome e entre", + "Do you already have an account?" : "Você já tem uma conta?", + "Log in" : "Login", + "Error while verifying uploaded file" : "Erro ao verificar o arquivo carregado", + "Uploaded file is verified" : "O arquivo carregado foi verificado", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "O formato do conteúdo é valores separados por vírgula (CSV):
- A linha do cabeçalho é obrigatória e deve corresponder a \"name\",\"email\" ou apenas \"email\"
- Uma entrada por linha (p. ex., \"João da Silva\",\"joao@example.tld\")", + "Participants added successfully" : "Participantes adicionados com sucesso", + "Error while adding participants" : "Erro ao adicionar participantes", + "Import a file" : "Importar um arquivo", + "Browse" : "Navegar", + "Verifying uploaded file …" : "Verificando arquivo carregado …", + "This might take a moment" : "Isso pode demorar um pouco", + "Send invitations" : "Enviar convites", + "_%n invalid email_::_%n invalid emails_" : ["%n e-mail inválido","%n e-mails inválidos","%n e-mails inválidos"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail já foi importado ou duplicado","%n e-mails já foram importados ou duplicados","%n e-mails já foram importados ou duplicados"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n convite pode ser enviado","%n convites podem ser enviados","%n convites podem ser enviados"], + "An error occurred while calling a phone number" : "Ocorreu um erro ao ligar para um número de telefone", + "Phone number could not be called: {error}" : "Não foi possível ligar para o número de telefone: {error}", + "Phone number could not be called" : "Não foi possível ligar para o número de telefone", + "Search participants or phone numbers" : "Pesquisar participantes ou números de telefone", + "Creating the conversation …" : "Criando a conversa …", + "Mark as read" : "Marcar como lido ", + "Mark as unread" : "Marcar como não lido", + "Remove from favorites" : "Remover dos favoritos", + "Add to favorites" : "Adicionar aos favoritos", + "Unarchive conversation" : "Desarquivar conversa", + "Ignore \"Do not disturb\"" : "Ignorar \"Não perturbe\"", + "You need to promote a new moderator before you can leave the conversation." : "Você precisa promover um novo moderador antes de sair da conversa.", + "Conversation actions" : "Ações de conversa", + "Notify about calls" : "Notificar sobre chamadas", + "Hide message text" : "Ocultar texto da mensagem", + "Pending invitations" : "Convites pendentes", + "Join conversations from other servers" : "Entrar nas conversas de outros servidores", + "From {user} at {remoteServer}" : "De {user} em {remoteServer}", + "Decline invitation" : "Recusar convite", + "Accept invitation" : "Aceitar convite", + "No pending invitations" : "Nenhum convite pendente", + "Home" : "Início", + "Unread" : "Não lido", + "Mentions" : "Menções", + "Meetings" : "Reuniões", + "Sort conversations" : "Ordenar conversas", + "By recent activity" : "Por atividade recente", + "Alphabetically" : "Alfabeticamente", + "Do not group by type" : "Não agrupar por tipo", + "Show private ones first" : "Mostrar primeiro as privadas", + "Show group ones first" : "Mostrar primeiro as agrupadas", + "No followed threads" : "Sem fios seguidos", + "No matches found" : "Nenhuma correspondência encontrada", + "No conversations found" : "Nenhuma conversa encontrada", + "You have no archived conversations." : "Você não tem conversas arquivadas", + "Subscribe to an existing thread or start your own." : "Assine um fio já existente ou inicie o seu próprio.", + "You have no unread mentions." : "Você não tem menções não lidas.", + "You have no unread messages." : "Você não tem mensagens não lidas.", + "An error occurred while performing the search" : "Erro ao pesquisar", + "Conversation list" : "Lista de conversas", + "Filter conversations by" : "Filtrar conversa por", + "Unread messages" : "Mensagens não lidas", + "Meeting conversations" : "Conversas de reuniões", + "Clear filters" : "Limpar filtros", + "New personal note" : "Nova nota pessoal", + "SIP backend is not installed" : "O back-end SIP não está instalado", + "Back to conversations" : "Voltar às conversas", + "Archived conversations" : "Conversas arquivadas", + "Threads" : "Fios", + "Clear filter" : "Limpar filtro", + "Show more threads" : "Mostrar mais fios", + "App settings" : "Configurações do aplicativo", + "Users" : "Usuários", + "Groups" : "Grupos", + "Teams" : "Equipes", + "Federated users" : "Usuários federados", + "New private conversation" : "Nova conversa privada", + "Other sources" : "Outras fontes", + "Open conversations" : "Abrir conversas", + "No search results" : "Nenhum resultado encontrado", + "Users, groups and teams" : "Usuários, grupos e equipes", + "Users and groups" : "Usuários e grupos", + "Users and teams" : "Usuários e equipes", + "Groups and teams" : "Grupos e equipes", + "New group conversation" : "Nova conversa em grupo", + "The meeting will start soon" : "A reunião iniciará em breve", + "This meeting is scheduled for {startTime}" : "Esta reunião está agendada para iniciar em {startTime}", + "You are currently waiting in the lobby" : "Você está atualmente esperando na sala de espera", + "Enable noise suppression" : "Ativar supressão de ruído", + "Reduce background noises for better voice quality" : "Reduza os ruídos de fundo para obter uma melhor qualidade de voz", + "Enable echo cancellation" : "Ativar cancelamento de eco", + "Minimize echo effect from own surrounding" : "Minimize o efeito de eco do próprio ambiente", + "Enable auto gain control" : "Ativar controle automático de ganho", + "Dynamically adjust microphone volume for consistent level" : "Ajuste dinamicamente o volume do microfone para obter um nível consistente", + "Select microphone" : "Selecionar microfone", + "No microphone available" : "Nenhum microfone disponível", + "Select speaker" : "Selecionar alto-falante", + "No speaker available" : "Nenhum alto-falante disponível", + "Select camera" : "Selecionar câmera", + "No camera available" : "Nenhuma câmera disponível", + "Select a device" : "Selecionar um dispositivo", + "Playing …" : "Reproduzindo …", + "Test speakers" : "Testar alto-falantes", + "Test" : "Teste", + "Devices" : "Dispositivos", + "Backgrounds" : "Planos de Fundo", + "No audio" : "Sem áudio", + "No camera" : "Sem câmera", + "Display video as you will see it (mirrored)" : "Exibir vídeo como você o verá (espelhado)", + "Display video as others will see it" : "Exibir vídeo como os outros o verão", + "Calls are not supported in your browser" : "Seu navegador não suporta chamadas", + "Access to microphone is only possible with HTTPS" : "O acesso ao microfone somente é possível via HTTPS", + "Access to microphone was denied" : "O acesso ao microfone foi negado", + "Error while accessing microphone" : "Erro ao acessar microfone", + "Access to camera is only possible with HTTPS" : "O acesso à câmera somente é possível via HTTPS", + "The call is being recorded." : "A chamada está sendo gravada.", + "The call might be recorded." : "A chamada pode ser gravada.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "A gravação pode incluir sua voz, vídeo da câmera e compartilhamento de tela. Seu consentimento é necessário antes de entrar na chamada.", + "Give consent to the recording of this call" : "Dê consentimento para a gravação desta chamada", + "Show more info" : "Mostrar mais informações", + "Audio is not available" : "Áudio não está disponível", + "Video is not available" : "Vídeo não está disponível", + "Start recording immediately with the call" : "Iniciar a gravação imediatamente com a chamada", + "Recording backend is not installed" : "O back-end de gravação não está instalado", + "Notify all participants about this call" : "Notificar todos os participantes sobre esta chamada", + "Apply settings" : "Aplicar configurações", + "Select virtual office background" : "Selecionar o plano de fundo de escritório virtual", + "Select virtual home background" : "Selecionar o plano de fundo de casa virtual", + "Select virtual abstract background" : "Selecione o plano de fundo abstrato virtual", + "Select virtual beach background" : "Selecione o plano do fundo de praia virtual", + "Select virtual park background" : "Selecione o plano de fundo de parque virtual", + "Select virtual theater background" : "Selecionar o plano de fundo de teatro virtual", + "Select virtual library background" : "Selecione o plano de fundo de biblioteca virtual", + "Select virtual space station background" : "Selecionar o plano de fundo de estação espacial virtual", + "Error while uploading the file" : "Erro no upload do arquivo", + "Select a file" : "Selecionar um arquivo", + "Invalid path selected" : "Caminho inválido selecionado", + "Select virtual background from file {fileName}" : "Selecionar o plano de fundo virtual do arquivo {fileName}", + "Blur" : "Desfocar", + "Upload" : "Carregar", + "Files" : "Arquivos", + "(editing)" : "(editando)", + "(edited)" : "(editado)", + "The message has expired or has been deleted" : "A mensagem expirou ou foi excluída", + "Cancel quote" : "Cancelar citação", + "24 hours" : "24 horas", + "7 days" : "7 dias", + "30 days" : "30 dias", + "Until unpin" : "Até desfixar", + "Clear reminder – {timeLocale}" : "Limpar lembrete – {timeLocale}", + "Edited by {actor}" : "Editado por {actor}", + "Pinned by you" : "Fixada por você", + "Pinned by {actor}" : "Fixada por {actor}", + "Until {absoluteDate}" : "Até {absoluteDate}", + "Message text copied to clipboard" : "Texto da mensagem copiado para a área de transferência", + "Message text could not be copied" : "Não foi possível copiar o texto da mensagem", + "Message forwarded to \"Note to self\"" : "Mensagem encaminhada para \"Nota para si mesmo\"", + "Error while forwarding message to \"Note to self\"" : "Erro ao encaminhar mensagem para \"Nota para si mesmo\"", + "A reminder was successfully removed" : "Um lembrete foi removido com sucesso", + "Error occurred when removing a reminder" : "Ocorreu um erro ao remover um lembrete", + "A reminder was successfully set at {datetime}" : "Um lembrete foi definido com sucesso em {datetime}", + "Error occurred when creating a reminder" : "Ocorreu um erro ao criar um lembrete", + "Add a reaction to this message" : "Adicionar uma reação a esta mensagem", + "Reply" : "Responder", + "More actions" : "Mais ações", + "Set reminder" : "Definir lembrete", + "Pin message" : "Fixar mensagem", + "Unpin message" : "Desfixar mensagem", + "Reply privately" : "Responda em particular", + "Edit message" : "Editar mensagem", + "Copy message" : "Copiar mensagem", + "Copy message link" : "Copiar link da mensagem", + "Go to file" : "Ir para o arquivo", + "Download file" : "Baixar arquivo", + "Go to thread" : "Ir para fio", + "Edit thread details" : "Editar detalhes do fio", + "Forward message" : "Encaminhar mensagem", + "Translate" : "Traduzir", + "Set custom reminder" : "Definir lembrete personalizado", + "Keep pinned for" : "Manter fixada para", + "Set custom period" : "Definir período personalizado", + "Close reactions menu" : "Fechar menu de reações", + "React with {emoji}" : "Reagir com {emoji}", + "React with another emoji" : "Reagir com outro emoji", + "Choose a conversation to forward the selected message." : "Escolha uma conversa para encaminhar a mensagem selecionada. ", + "Error while forwarding message" : "Erro ao encaminhar mensagem ", + "The message has been forwarded to {selectedConversationName}" : "A mensagem foi encaminhada para {selectedConversationName}", + "Dismiss" : "Dispensar", + "Go to conversation" : "Ir para a conversa ", + "Detect language" : "Detectar idioma", + "The message could not be translated" : "A mensagem não pôde ser traduzida", + "Translation copied to clipboard" : "Tradução copiada para a área de transferência", + "Translation could not be copied" : "A tradução não pôde ser copiada", + "Translate message" : "Traduzir mensagem", + "Source language to translate from" : "Idioma de origem do qual traduzir", + "Translate from" : "Traduzir de", + "Target language to translate into" : "Idioma de destino para o qual traduzir", + "Translate to" : "Traduzir para", + "Translating" : "Traduzindo", + "This translation is AI generated and may contain mistakes." : "Esta tradução foi gerada por IA e pode conter erros.", + "Copy translated text" : "Copiar texto traduzido", + "Error when scheduling the message" : "Erro ao agendar a mensagem", + "Reschedule" : "Reagendar", + "Send now" : "Enviar agora", + "Choose a time" : "Escolha um horário", + "Send at custom time" : "Enviar em horário personalizado", + "Will be sent without notification" : "Será enviada sem notificação", + "Message read by everyone who shares their reading status" : "Mensagem lida por todos que compartilham seu status de leitura", + "Message sent" : "Mensagem enviada", + "Sent without notification" : "Enviada sem notificação", + "Deleting message" : "Excluindo mensagem", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Mensagem excluída com êxito, mas um bot ou Matterbridge está configurado e a mensagem pode já estar distribuída para outros serviços", + "Message deleted successfully" : "Mensagem excluída com sucesso", + "Message could not be deleted because it is too old" : "A mensagem não pôde ser excluída porque é muito antiga", + "Only normal chat messages can be deleted" : "Apenas mensagens normais de bate-papo podem ser excluídas", + "An error occurred while deleting the message" : "Ocorreu um erro ao excluir a mensagem", + "Pinned" : "Fixada", + "Your browser does not support playing audio files" : "Seu navegador não suporta a reprodução de arquivos de áudio", + "Contact" : "Contato", + "{stack} in {board}" : "{stack} de {board}", + "Deck Card" : "Cartão Deck", + "Remove {fileName}" : "Remover {fileName} ", + "Open this location in OpenStreetMap" : "Abrir este local no OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n resposta","%n de respostas","%n respostas"], + "Sending message" : "Enviando mensagem", + "Failed to send the message. Click to try again" : "Ocorreu um erro ao enviar a mensagem. Clique para tentar novamente.", + "Not enough free space to upload file" : "Espaço livre insuficiente para enviar o arquivo", + "You cannot send messages to this conversation at the moment" : "No momento, você não pode enviar mensagens para esta conversa", + "Could not update the message" : "Não foi possível atualizar a mensagem", + "Reply to thread \"{threadTitle}\"" : "Responder ao fio \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Você votou • %n voto","Você votou • %n de votos","Você votou • %n votos"], + "You voted" : "Você votou", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Clique para votar • %n voto","Clique para votar • %n de votos","Clique para votar • %n votos"], + "Click to vote" : "Clique para votar", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Rascunho de enquete • %n opção","Rascunho de enquete • %n opções","Rascunho de enquete • %n opções"], + "_%n vote_::_%n votes_" : ["%n voto","%n de votos","%n votos"], + "Edit poll draft" : "Editar o rascunho da enquete", + "Delete poll draft" : "Excluir o rascunho da enquete", + "Open poll" : "Enquete aberta", + "Closed poll" : "Enquete encerrada", + "See results" : "Ver resultados", + "Reactions" : "Reações", + "No permission to post reactions in this conversation" : "Sem permissão para postar reações nesta conversa", + "and {participant}" : "e {participant}", + "_and %n other participant_::_and %n other participants_" : ["e %n outro participante","e %n outros participantes","e %n outros participantes"], + "Show all reactions" : "Mostrar todas as reações", + "Add more reactions" : "Adicionar mais reações", + "Show or collapse system messages" : "Mostrar ou recolher mensagens do sistema", + "No messages" : "Sem mensagens", + "All messages have expired or have been deleted." : "Todas as mensagens expiraram ou foram excluídas.", + "Generate summary with AI" : "Gerar resumo com IA", + "{author} (pinned by you)" : "{author} (fixada por você)", + "{author} (pinned by {actor})" : "{author} (fixada por {actor})", + "Unpin" : "Desfixar", + "Cancel search" : "Cancelar pesquisa", + "Add a phone number" : "Adicionar um número de telefone", + "Error: A password is required to create the conversation." : "Erro: É necessária uma senha para criar a conversa.", + "All set, the conversation \"{conversationName}\" was created." : "Tudo pronto, a conversa \"{conversationName}\" foi criada.", + "Create a new group conversation" : "Criar um novo grupo de conversa", + "Add participants" : "Adicionar participantes", + "Maximum length exceeded ({maxlength} characters)" : "Comprimento máximo excedido ({maxlength} caracteres)", + "Conversation type" : "Tipo de conversa", + "Conversation visibility" : "Visibilidade da conversa", + "Allow guests to join via link" : "Permitir que convidados participem via link", + "Enter password" : "Digite a senha ", + "This conversation has been locked" : "Esta conversa foi trancada", + "No permission to post messages in this conversation" : "Sem permissão para postar mensagens nesta conversa", + "Joining conversation …" : "Entrando na conversa...", + "Write a message without notification" : "Escreva uma mensagem sem notificação", + "Create a thread silently" : "Criar um fio silenciosamente", + "Create a thread" : "Criar um fio", + "Send message silently" : "Enviar mensagem silenciosamente", + "Send message" : "Enviar mensagem", + "Send without notification" : "Enviar sem notificação", + "The participant will not be notified about new messages" : "O participante não será notificado sobre novas mensagens", + "Participants will not be notified about new messages" : "Participantes não serão notificados sobre novas mensagens", + "Message will be sent {datetimeString}" : "A mensagem será enviada em {datetimeString}", + "Thread title is required" : "O título do fio é obrigatório", + "Message text is required" : "O texto da mensagem é obrigatório", + "The message could not be edited" : "A mensagem não pôde ser editada", + "File to share" : "Arquivo a compartilhar", + "File upload is not available in this conversation" : "O upload de arquivo não está disponível nesta conversa", + "Message was successfully scheduled" : "A mensagem foi agendada com êxito", + "Add emoji" : "Adicionar emoji", + "Adding a mention will only notify users who did not read the message." : "Adicionar uma menção notificará apenas os usuários que não leram a mensagem.", + "Thread title" : "Título do fio", + "Send later" : "Enviar mais tarde", + "Show scheduled messages" : "Mostrar mensagens agendadas", + "Cancel editing" : "Cancelar edição", + "Schedule message" : "Agendar mensagem", + "{user} is out of office and might not respond." : "{user}está fora do escritório e talvez não responda.", + "Absence period: {startDate} - {endDate}" : "Período de ausência: {startDate} - {endDate}", + "Replacement:" : "Subsituto:", + "Share from {nextcloud}" : "Compartilhar de {nextcloud}", + "Share from Files" : "Compartilhar de Arquivos", + "Share files to the conversation" : "Compartilhar arquivos na conversa", + "Upload from device" : "Fazer upload do dispositivo", + "Create new poll" : "Criar nova enquete", + "Smart picker" : "Seletor inteligente", + "Record voice message" : "Gravar mensagem de voz", + "End recording and send" : "Terminar a gravação e enviar", + "Dismiss recording" : "Dispensar gravação", + "Access to the microphone was denied" : "Acesso ao microfone foi negado", + "Microphone either not available or disabled in settings" : "Microfone ou não disponível ou está desativado nas configurações", + "Error while recording audio" : "Erro ao gravar áudio", + "Voice message {time} ({conversation})" : "Mensagem de voz {time} ({conversation})", + "Generating summary of unread messages …" : "Geração de resumo de mensagens não lidas …", + "Summary is AI generated and might contain mistakes" : "O resumo é gerado por IA e pode conter erros", + "Error occurred during a summary generation" : "Ocorreu um erro durante a geração de um resumo", + "New file" : "Novo arquivo", + "Blank" : "Vazio", + "Error while creating file" : "Erro ao criar arquivo", + "Create and share a new file" : "Criar e compartilhar um novo arquivo", + "Name of the new file" : "Nome do novo arquivo", + "Create file" : "Criar arquivo", + "Someone is typing …" : "Alguém está digitando …", + "{user1} is typing …" : "{user1} está digitando …", + "{user1} and {user2} are typing …" : "{user1} e {user2} estão digitando …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} e {user3} estão digitando …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} e %n outro estão digitando …","{user1}, {user2}, {user3} e %n outros estão digitando …","{user1}, {user2}, {user3} e %n outros estão digitando …"], + "Add more files" : "Adicionar mais arquivos", + "Send" : "Enviar", + "In this conversation {user} can:" : "Nesta conversa, {user} pode:", + "Edit default permissions for participants in {conversationName}" : "Editar permissões padrão para participantes em {conversationName}", + "Start a call" : "Iniciar uma chamada", + "Skip the lobby" : "Pular a sala de espera", + "Can post messages" : "Pode postar mensagens", + "Can post messages and reactions" : "Postar mensagens e reações", + "Can add reactions" : "Pode adicionar reações", + "Enable the microphone" : "Ativar o microfone", + "Enable the camera" : "Ativar a câmera", + "Share the screen" : "Compartilhar a tela ", + "Update permissions" : "Atualizar permissões", + "Updating permissions" : "Atualizando permissões", + "No poll drafts" : "Sem rascunhos de enquetes", + "There is no poll drafts yet saved for this conversation" : "Ainda não há rascunhos de enquete salvos para esta conversa", + "Create poll in {name}" : "Criar enquete em {name}", + "Create poll" : "Criar enquete", + "Error while importing poll" : "Erro ao importar enquete", + "Question" : "Pergunta", + "Ask a question" : "Faça uma pergunta", + "Import draft from file" : "Importar rascunho do arquivo", + "Answers" : "Respostas", + "Answer {option}" : "Resposta {option}", + "Delete poll option" : "Excluir opção de enquete", + "Add answer" : "Adicionar resposta", + "Settings" : "Configurações", + "Anonymous poll" : "Enquete anônima", + "Multiple answers" : "Respostas múltiplas", + "Save as draft" : "Salvar como rascunho", + "Export draft to file" : "Exportar rascunho para arquivo", + "_Final results • %n vote_::_Final results • %n votes_" : ["Resultados finais • %n voto","Resultados finais • %n de votos","Resultados finais • %n votos"], + "Your vote is anonymous" : "Seu voto é anônimo", + "You voted for this option" : "Você votou nesta opção", + "End poll" : "Encerrar enquete", + "Change your vote" : "Alterar seu voto", + "Withdraw vote" : "Retirar voto", + "Results" : "Resultados", + "Voted participants" : "Participantes votantes", + "Send a message to \"{roomName}\"" : "Enviar uma mensagem para \"{roomName}\"", + "Hide list of participants" : "Ocultar lista de participantes", + "Show list of participants" : "Exibir lista de participantes", + "Assistance requested in {roomName}" : "Assistência solicitada em {roomName}", + "The message was sent to \"{roomName}\"" : "A mensagem foi enviada para \"{roomName}\"", + "Dismiss request for assistance" : "Dispensar pedido de assistência", + "Send message to room" : "Enviar mensagem para sala", + "Back to main room" : "Voltar à sala principal", + "Back to your room" : "Voltar à sua sala", + "Message all rooms" : "Mensagem para todas as salas", + "Start session" : "Iniciar sessão", + "Start a call before you start a breakout room session" : "Inicie uma chamada antes de você iniciar uma sessão de sala temática", + "Stop session" : "Encerrar sessão", + "The message was sent to all breakout rooms" : "A mensagem foi enviada para todas as salas temáticas", + "Send a message to all breakout rooms" : "Enviar uma mensagem para todas as salas temáticas", + "Breakout rooms are not started" : "As salas temáticas não foram iniciadas.", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Chamadas sem back-end de alto desempenho podem causar problemas de conectividade e alta carga nos dispositivos. {linkstart}Saiba mais{linkend}", + "Talk setup incomplete" : "Configuração do Talk incompleta", + "Disable lobby" : "Desativar sala de espera", + "Settings for participant \"{user}\"" : "Configurações para o participante \"{user}\"", + "Participant \"{user}\"" : "Participante \"{user}\"", + "moderator" : "moderador", + "bot" : "bot", + "guest" : "convidado", + "Ringing …" : "Tocando …", + "Call rejected" : "Chamada rejeitada", + "{time} talking …" : "Conversando por {time} …", + "{time} talking time" : "{time} de tempo de conversa", + "Raised their hand" : "Levantou a mão", + "Joined with video" : "Entrou com video", + "Joined via phone" : "Entrou via telefone", + "Joined with audio" : "Entrou com áudio", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "O texto deve ter menos ou igual a {maxLength} caracteres. Seu texto atual tem {charactersCount} caracteres.", + "Remove group and members" : "Remover grupo e membros", + "Remove team and members" : "Remover equipe e membros", + "Remove participant" : "Remover participante", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Você realmente deseja remover o grupo \"{displayName}\" e seus membros desta conversa?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Você realmente deseja remover a equipe \"{displayName}\" e seus membros desta conversa?", + "Do you really want to remove {displayName} from this conversation?" : "Você realmente deseja remover {displayName} desta conversa?", + "Notification was sent to {displayName}" : "A notificação foi enviada para {displayName}", + "Could not send notification to {displayName}" : "Não foi possível enviar a notificação para {displayName}", + "Permissions granted to {displayName}" : "Permissões concedidas a {displayName} ", + "Could not modify permissions for {displayName}" : "Não foi possível modificar as permissões para {displayName} ", + "Permissions removed for {displayName}" : "Permissões removidas para {displayName} ", + "Permissions set to default for {displayName}" : "Permissões definidas como padrão para {displayName}", + "Phone number could not be hung up" : "Não foi possível desligar o número de telefone", + "Phone number could not be put on hold" : "Não foi possível colocar o número de telefone em espera", + "Phone number could not be muted" : "Não foi possível silenciar o número de telefone", + "Phone number could not be unmuted" : "Não foi possível ativar o som do número de telefone", + "DTMF message could not be sent" : "A mensagem DTMF não pôde ser enviada", + "Phone number copied to clipboard" : "Número de telefone copiado para a área de transferência", + "Phone number could not be copied" : "Não foi possível copiar o número de telefone", + "in the lobby" : "na sala de espera", + "Dial out phone" : "Discar telefone", + "Hang up phone" : "Desligar telefone", + "Move back to lobby" : "Voltar para a sala de espera", + "Move to conversation" : "Mover para conversa", + "Dial-in PIN" : "PIN de discagem", + "Demote from moderator" : "Excluído da moderação", + "Promote to moderator" : "Promover a moderador", + "Resend invitation" : "Reenviar convite", + "Send call notification" : "Enviar notificação de chamada", + "Dial out phone number" : "Disque o número de telefone", + "Resume call for phone number" : "Retomar chamada para número de telefone", + "Put phone number on hold" : "Colocar número de telefone em espera", + "Unmute phone number" : "Dessilenciar número de telefone", + "Mute phone number" : "Silenciar número de telefone", + "Copy phone number" : "Copiar número de telefone", + "Reset custom permissions" : "Redefinir permissões personalizadas", + "Grant all permissions" : "Conceder todas as permissões", + "Remove all permissions" : "Remover todas as permissões", + "Also ban from this conversation" : "Também banir desta conversa", + "Internal note (reason to ban)" : "Nota interna (motivo para banimento)", + "Remove" : "Remover", + "Permissions modified for {displayName}" : "Permissões modificadas para {displayName} ", + "Add users, groups or teams" : "Adicionar usuários, grupos ou equipes", + "Add users or groups" : "Adicionar usuários ou grupos", + "Add users or teams" : "Adicionar usuários ou equipes", + "Add users" : "Adicionar usuários", + "Add groups or teams" : "Adicionar grupos ou equipes", + "Add groups" : "Adicionar grupos", + "Add teams" : "Adicionar equipes", + "Add other sources" : "Adicionar outras fontes", + "Add emails" : "Adicionar e-mails", + "Integrations" : "Integrações", + "Add federated users" : "Adicionar usuários federados", + "Searching …" : "Pesquisando...", + "Search for more users" : "Pesquisar por mais usuários", + "You can search or add participants via name, email, or Federated Cloud ID" : "Você pode pesquisar ou adicionar participantes por nome, e-mail ou ID de Nuvem Federada", + "Search or add participants" : "Procure ou adicione participantes", + "Invitation was sent to {actorId}" : "O convite foi enviado para {actorId}", + "An error occurred while adding the participants" : "Ocorreu um erro ao adicionar os participantes", + "A new group conversation with selected participant will be created" : "Será criada uma nova conversa de grupo com o participante selecionado", + "Participants" : "Participantes", + "Pinned by a deleted user" : "Fixada por um usuário excluído", + "Participants ({count})" : "Participantes ({count}) ", + "Open chat" : "Abrir bate-papo", + "You have new unread messages in the chat." : "Você tem novas mensagens não lidas no bate-papo.", + "You have been mentioned in the chat." : "Você foi mencionado no bate-papo.", + "Search messages" : "Pesquisar mensagens", + "Chat" : "Conversa", + "Details" : "Detalhes", + "Shared items" : "Itens compartilhados", + "Search in {name}" : "Pesquisar em {name}", + "Threads in {name}" : "Fios em {name}", + "{actor} in {conversation}" : "{actor} em {conversation}", + "Search messages …" : "Pesquisar mensagens …", + "Search options" : "Opções de pesquisa", + "From User" : "Do Usuário", + "Since" : "Desde", + "Until" : "Até", + "No results found" : "Nenhum resultado encontrado", + "Load more results" : "Carregar mais resultados ", + "Recent threads" : "Fios recentes", + "Projects" : "Projetos", + "No shared items" : "Nenhum item compartilhado", + "Thread notifications" : "Notificações de fios", + "Thread actions" : "Ações de fios", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Link para uma conversa", + "No open conversations found" : "Nenhuma conversa aberta encontrada", + "Either there are no open conversations or you joined all of them." : "Ou não há conversas abertas ou você entrou em todas elas.", + "Check spelling or use complete words." : "Verifique a ortografia ou use palavras completas.", + "Search conversations or users" : "Pesquisar conversas ou usuários", + "Select conversation" : "Selecionar conversa", + "Number length is not valid" : "O comprimento do número não é válido", + "Region code is not valid" : "O código de região não é válido", + "Number length is too short" : "O comprimento do número é muito curto", + "Number length is too long" : "O comprimento do número é muito longo", + "Number is not valid" : "O número não é válido", + "Phone numbers" : "Números de telefone", + "Display name: {name}" : "Nome de exibição: {name}", + "Edit display name" : "Editar nome de exibição", + "Display name (required)" : "Nome de exibição (obrigatório)", + "Save name" : "Salvar o nome", + "I picked message bubbles" : "Eu escolhi balões de mensagem", + "I picked the list style" : "Eu escolhi o estilo em lista", + "Error while setting personal setting" : "Erro ao definir a configuração pessoal", + "Error while saving sounds setting" : "Erro ao salvar configuração de sons ", + "Compact conversations list" : "Lista de conversas compacta", + "Chat appearance" : "Aparência de bate-papos", + "Messages list" : "Lista de mensagens", + "Message bubbles" : "Balões de mensagem", + "Play sounds when participants join or leave a call" : "Reproduzir sons quando os participantes entram ou saem de uma chamada", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Atualmente indisponível no iPhone e iPad devido a restrições técnicas do fabricante", + "Notification settings" : "Configurações de notificação", + "Sounds for chat and call notifications" : "Sons para notificações de bate-papos e chamadas", + "Invalid language ({languageId})" : "Idioma inválido ({languageId})", + "Default language" : "Idioma padrão", + "Default language ({languageName})" : "Idioma padrão ({languageName})", + "Error when trying to load the available live translation languages" : "Erro ao tentar carregar os idiomas de tradução em tempo real disponíveis", + "Error when trying to set live translation language" : "Erro ao tentar definir o idioma da tradução em tempo real", + "Set language used to show the transcriptions" : "Definir o idioma usado para mostrar as transcrições", + "Select location for attachments" : "Selecionar localização para os anexos", + "Error while setting attachment folder" : "Erro ao definir a pasta do anexo", + "Error while setting read status privacy" : "Ocorreu um erro ao definir a privacidade do status de leitura", + "Error while setting typing status privacy" : "Erro ao definir a privacidade do status de digitação", + "Error while setting default media state" : "Erro ao definir o estado de mídia padrão", + "Turn camera and microphone off by default" : "Desativar câmera e microfone por padrão", + "Blur camera background by default" : "Desfocar o fundo da câmera por padrão", + "Skip device preview before joining a call" : "Pular a pré-visualização dos dispositivos antes de entrar em uma chamada", + "Camera will be turned off when joining. Always shown if recording consent is required." : "A câmera será desligada ao entrar na chamada. Será sempre exibido se for necessário consentimento para a gravação.", + "Appearance & Sounds" : "Aparência & Sons", + "Privacy" : "Privacidade", + "Send read receipts" : "Enviar confirmação de recebimento", + "When off, all read statuses will be hidden" : "Quando desativado, todos os status de leitura serão ocultados", + "Share typing status" : "Compartilhar status de digitação", + "When off, all typing indicators will be hidden" : "Quando desativado, todos os indicadores de digitação serão ocultados", + "Attachments folder" : "Pasta para os anexos", + "Toggle full screen" : "Alternar modo de tela cheia", + "Return to Home screen" : "Voltar à página inicial", + "Search" : "Pesquisar", + "Shortcuts while in a chat" : "Atalhos durante um bate-bapo", + "Focus the chat input" : "Foco na entrada do bate-papo", + "Unfocus the chat input to use shortcuts" : "Desfoque a entrada do bate-papo para usar atalhos", + "Edit your last message" : "Editar sua última mensagem", + "Shortcuts while in a call" : "Atalhos durante a chamada", + "Camera on and off" : "Câmera ligada e desligada", + "Microphone on and off" : "Microfone ligado e desligado", + "Raise or lower hand" : "Levantar ou baixar a mão", + "Push to talk or push to mute" : "Aperte para falar ou para deixar mudo", + "Zoom-in / zoom-out a screen share" : "Aumentar / diminuir o zoom de um compartilhamento de tela", + "Mouse wheel" : "Roda do mouse", + "Start call silently" : "Iniciar chamada silenciosamente", + "Start call" : "Iniciar chamada", + "End call" : "Encerrar chamada", + "The server was updated, you cannot start or join a call." : "O servidor foi atualizado, você não pode iniciar ou participar de uma chamada.", + "This call has just ended" : "Esta chamada acabou de terminar", + "You will be able to join the call only after a moderator starts it." : "Você só poderá entrar na chamada depois que um moderador a iniciar.", + "End call for everyone" : "Encerrar chamada para todos", + "Starting the recording" : "Iniciando a gravação", + "Recording" : "Gravação", + "The call has been running for one hour." : "A chamada está em andamento há uma hora.", + "Cancel recording start" : "Cancelar início da gravação", + "Stop recording" : "Encerrar gravação", + "Send a reaction" : "Enviar reação", + "React with {reaction}" : "Reagir com {reaction}", + "All tasks done!" : "Todas as tarefas concluídas!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} de %n tarefa","{done} de %n tarefas","{done} de %n tarefas"], + "Add participants to this call" : "Adicionar participantes a esta chamada", + "_%n participant in call_::_%n participants in call_" : ["%n participante na chamada","%n participantes na chamada","%n participantes na chamada"], + "Scheduled messages" : "Mensagens agendadas", + "You are not allowed to enable screensharing" : "Você não tem permissão para ativar o compartilhamento de tela", + "No screensharing" : "Sem compartilhamento de tela", + "Screensharing options" : "Opções de compartilhamento de tela", + "Enable screensharing" : "Ativar compartilhamento de tela", + "Bad sent video and screen quality." : "Má qualidade de vídeo e tela enviados.", + "Bad sent screen quality." : "Má qualidade da tela enviada.", + "Bad sent video quality." : "Má qualidade de vídeo enviada.", + "Bad sent audio, video and screen quality." : "Má qualidade de áudio, vídeo e tela enviados.", + "Bad sent audio and screen quality." : "Má qualidade de áudio e tela enviados.", + "Bad sent audio and video quality." : "Má qualidade de áudio e vídeo enviados.", + "Bad sent audio quality." : "Má qualidade de áudio enviada.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam ver sua tela. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo ao fazer um compartilhamento de tela.", + "Disable background blur" : "Desativar o desfoque do plano de fundo", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam ver sua tela. Para melhorar a situação, tente desativar seu vídeo ao fazer um compartilhamento de tela.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver sua tela.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver você.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender e ver você. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo ao fazer um compartilhamento de tela. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver e entender você. Para melhorar a situação, tente desativar seu vídeo ao fazer um compartilhamento de tela.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender você e ver sua tela. Para melhorar a situação, tente desativar o compartilhamento de tela. ", + "Disable screenshare" : "Desativar compartilhamento de tela", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Sua conexão com a Internet ou computador estão ocupados e outros participantes talvez não consigam entender e ver você. Para melhorar a situação, tente desativar o desfoque do plano de fundo ou seu vídeo. ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam ver e entender você. Para melhorar a situação, tente desativar seu vídeo.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sua conexão à internet ou o computador estão ocupados e outros participantes talvez não consigam entender você.", + "Screen sharing is not supported by your browser." : "O compartilhamento de tela não é suportado pelo seu navegador.", + "Screen sharing requires the page to be loaded through HTTPS." : "O compartilhamento de tela exige que a página seja carregada por HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "O compartilhamento de tela requer que a página seja carregada através de HTTPS.", + "An error occurred while starting screensharing." : "Ocorreu um erro ao iniciar o compartilhamento de tela.", + "Select virtual background" : "Selecionar fundo virtual", + "Show your screen" : "Exibir sua tela", + "Stop screensharing" : "Encerrar compartilhamento da tela", + "Mute others" : "Silenciar outros", + "Start recording" : "Iniciar gravação", + "Set up breakout rooms" : "Criar salas temáticas", + "Download attendance list" : "Baixar a lista de presença", + "Open Calendar" : "Abrir Calendário", + "Remove participant {name}" : "Remover participante {name}", + "Would you like to delete this conversation?" : "Você gostaria de excluir esta conversa?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Esta conversa será automaticamente excluída para todos após %n dia de inatividade.","Esta conversa será automaticamente excluída para todos após %n de dias de inatividade.","Esta conversa será automaticamente excluída para todos após %n dias de inatividade."], + "Are you sure you want to delete this conversation?" : "Tem certeza de que deseja excluir esta conversa?", + "Delete now" : "Excluir agora", + "Keep" : "Manter", + "Open dialpad" : "Abrir teclado de discagem", + "Select a region" : "Selecionar uma região", + "Local time: {time}" : "Horário local: {time}", + "Scheduled {datetime}" : "Agendado {datetime}", + "Scheduled for {datetime}" : "Agendado para {datetime}", + "Search …" : "Pesquisar …", + "Message without mention" : "Mensagem sem menção", + "Mention myself" : "Mencionar-me", + "Mention everyone" : "Mencionar todo mundo", + "Select a conversation" : "Selecionar uma conversa", + "Select a mode" : "Selecionar um modo", + "You do not have permissions to access this conversation." : "Você não tem permissões para acessar esta conversa.", + "Join a different conversation or start a new one." : "Entre em uma conversa diferente ou inicie uma nova.", + "The conversation does not exist" : "A conversa não existe", + "Join a conversation or start a new one!" : "Juntar-se à uma conversa ou iniciar um nova!", + "Duplicate session" : "Sessão duplicada", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Esta conversa foi aberta em outra aba. A versão atual do servidor não suporta a abertura de uma conversa em várias abas.", + "Creating and joining a conversation with \"{userid}\"" : "Criando e entrando em uma conversa com \"{userid}\"", + "Join a conversation or start a new one" : "Entre em uma conversa ou inicie outra", + "Error while joining the conversation" : "Erro ao entrar na conversa", + "Another user" : "Outro usuário", + "Hey! Are you using the list style or message bubbles?" : "Ei! Você está usando o estilo em lista ou balões de mensagem?", + "Nextcloud URL" : "URL Nextcloud", + "Nextcloud user" : "Usuário Nextcloud", + "User password" : "Senha do usuário", + "Talk conversation" : "Conversa Talk", + "Skip TLS verification" : "Ignorar verificação TLS", + "Matrix server URL" : "URL do servidor Matrix", + "User" : "Usuário", + "Matrix channel" : "Canal Matrix", + "Mattermost server URL" : "URL do servidor Mattermost", + "Mattermost user" : "Usuário Mattermost", + "Team name" : "Nome do team", + "Channel name" : "Nome do canal", + "Rocket.Chat server URL" : "URL do servidor Rocket.Chat", + "User name or email address" : "Nome de usuário ou endereço de e-mail ", + "Rocket.Chat channel" : "Canal Rocket.Chat", + "Zulip server URL" : "URL do servidor Zulip", + "Bot user name" : "Nome do usuário Bot", + "Bot API key" : "Chave API do BOT", + "Zulip channel" : "Canal Zulip", + "API token" : "Token de API", + "Slack channel" : "Canal Slack", + "Server ID or name" : "Nome ou ID do servidor", + "Channel ID (prefixed with \"ID:\") or name" : "ID do canal (prefixado com \"ID:\") ou nome", + "Channel" : "Canal", + "Login" : "Login", + "Chat ID" : "ID do Chat", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL do servidor IRC (por ex. chat.freenode.net:6667)", + "Nickname" : "Apelido", + "Connection password" : "Senha de conexão", + "IRC channel" : "Canal IRC", + "Channel password" : "Senha do canal", + "NickServ nickname" : "Apelido do NickServ", + "NickServ password" : "Senha do NickServ", + "Use TLS" : "Usar TLS", + "Use SASL" : "Usar SASL", + "Tenant ID" : "ID do Tenant", + "Client ID" : "ID do cliente", + "Team ID" : "ID do Team", + "Thread ID" : "ID da Thread", + "XMPP/Jabber server URL" : "URL do servidor XMPP/Jabber", + "MUC server URL" : "URL do servidor MUC", + "Jabber ID" : "ID Jabber", + "Pinned messages" : "Mensagem fixada", + "Media" : "Mídia", + "Polls" : "Enquetes", + "Deck cards" : "Cartões de Deck", + "Voice messages" : "Mensagens de voz", + "Locations" : "Localizações", + "Call recordings" : "Gravações de chamadas", + "Audio" : "Áudio", + "Show all pinned messages" : "Mostrar todas as mensagens fixadas", + "Show all media" : "Mostrar todas as mídias", + "Show all files" : "Mostrar todos os arquivos", + "Show all polls" : "Mostrar todas as enquetes", + "Show all deck cards" : "Mostrar todos os cartões de Deck", + "Show all voice messages" : "Mostrar todas as mensagens de voz", + "Show all locations" : "Mostrar todas as localizações", + "Show all call recordings" : "Mostrar todas as gravações", + "Show all audio" : "Mostrar todos o áudios", + "Show all other" : "Mostrar todos os outros", + "Follow conversation settings" : "Seguir as configurações da conversa", + "Group" : "Grupo", + "Team" : "Equipe", + "You reconnected to the call" : "Você se reconectou à chamada", + "{actor} reconnected to the call" : "{actor} se reconectou à chamada", + "You added {user0} and {user1}" : "Você adicionou {user0} e {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Você adicionou {user0}, {user1} e mais %n participante","Você adicionou {user0}, {user1} e mais %n participantes","Você adicionou {user0}, {user1} e mais %n participantes"], + "An administrator added you and {user0}" : "Um administrador adicionou você e {user0}", + "{actor} added you and {user0}" : "{actor} adicionou você e {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Um administrador adicionou você, {user0} e mais %n participante","Um administrador adicionou você, {user0} e mais %n participantes","Um administrador adicionou você, {user0} e mais %n participantes"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} adicionou você, {user0} e mais %n participante","{actor} adicionou você, {user0} e mais %n participantes","{actor} adicionou você, {user0} e mais %n participantes"], + "An administrator added {user0} and {user1}" : "Um administrador adicionou {user0} e {user1}", + "{actor} added {user0} and {user1}" : "{actor} adicionou {user0} e {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Um administrador adicionou {user0}, {user1} e mais %n participante","Um administrador adicionou {user0}, {user1} e mais %n participantes","Um administrador adicionou {user0}, {user1} e mais %n participantes"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} adicionou {user0}, {user1} e mais %n participante","{actor} adicionou {user0}, {user1} e mais %n participantes","{actor} adicionou {user0}, {user1} e mais %n participantes"], + "You removed {user0} and {user1}" : "Você removeu {user0} e {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Você removeu {user0}, {user1} e mais %n participante","Você removeu {user0}, {user1} e mais %n participantes","Você removeu {user0}, {user1} e mais %n participantes"], + "An administrator removed you and {user0}" : "Um administrador removeu você e {user0}", + "{actor} removed you and {user0}" : "{actor} removeu você e {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Um administrador removeu você, {user0} e mais %n participante","Um administrador removeu você, {user0} e mais %n participantes","Um administrador removeu você, {user0} e mais %n participantes"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removeu você, {user0} e mais %n participante","{actor} removeu você, {user0} e mais %n participantes","{actor} removeu você, {user0} e mais %n participantes"], + "An administrator removed {user0} and {user1}" : "Um administrador removeu {user0} e {user1}", + "{actor} removed {user0} and {user1}" : "{actor} removeu {user0} e {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Um administrador removeu {user0}, {user1} e mais %n participante","Um administrador removeu {user0}, {user1} e mais %n participantes","Um administrador removeu {user0}, {user1} e mais %n participantes"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removeu {user0}, {user1} e mais %n participante","{actor} removeu {user0}, {user1} e mais %n participantes","{actor} removeu {user0}, {user1} e mais %n participantes"], + "You and {user0} joined the call" : "Você e {user0} entraram na chamada", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Você, {user0} e mais %n participante entraram na chamada","Você, {user0} e mais %n participantes entraram na chamada","Você, {user0} e mais %n participantes entraram na chamada"], + "{user0} and {user1} joined the call" : "{user0} e {user1} entraram na chamada", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} e mais %n participante entraram na chamada","{user0}, {user1} e mais %n participantes entraram na chamada","{user0}, {user1} e mais %n participantes entraram na chamada"], + "You and {user0} left the call" : "Você e {user0} saíram da chamada", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Você, {user0} e mais %n participante saíram a chamada","Você, {user0} e mais %n participantes saíram a chamada","Você, {user0} e mais %n participantes saíram a chamada"], + "{user0} and {user1} left the call" : "{user0} e {user1} saíram a chamada", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} e mais %n participante saíram a chamada","{user0}, {user1} e mais %n participantes saíram a chamada","{user0}, {user1} e mais %n participantes saíram a chamada"], + "You promoted {user0} and {user1} to moderators" : "Você promoveu {user0} e {user1} a moderadores", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Você promoveu {user0}, {user1} e mais %n participante a moderadores","Você promoveu {user0}, {user1} e mais %n participantes a moderadores","Você promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "An administrator promoted you and {user0} to moderators" : "Um administrador promoveu você e {user0} a moderadores", + "{actor} promoted you and {user0} to moderators" : "{actor} promoveu você e {user0} a moderadores", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Um administrador promoveu você, {user0} e mais %n participante a moderadores","Um administrador promoveu você, {user0} e mais %n participantes a moderadores","Um administrador promoveu você, {user0} e mais %n participantes a moderadores"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoveu você, {user0} e mais %n participante a moderadores","{actor} promoveu você, {user0} e mais %n participantes a moderadores","{actor} promoveu você, {user0} e mais %n participantes a moderadores"], + "An administrator promoted {user0} and {user1} to moderators" : "Um administrador promoveu {user0} e {user1} a moderadores", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} promoveu {user0} e {user1} a moderadores", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Um administrador promoveu {user0}, {user1} e mais %n participante a moderadores","Um administrador promoveu {user0}, {user1} e mais %n participantes a moderadores","Um administrador promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoveu {user0}, {user1} e mais %n participante a moderadores","{actor} promoveu {user0}, {user1} e mais %n participantes a moderadores","{actor} promoveu {user0}, {user1} e mais %n participantes a moderadores"], + "You demoted {user0} and {user1} from moderators" : "Você rebaixou {user0} e {user1} de moderadores", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Você rebaixou {user0}, {user1} e mais %n participante de moderadores","Você rebaixou {user0}, {user1} e mais %n participantes de moderadores","Você rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "An administrator demoted you and {user0} from moderators" : "Um administrador rebaixou você e {user0} de moderadores", + "{actor} demoted you and {user0} from moderators" : "{actor} rebaixou você e {user0} de moderadores", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Um administrador rebaixou você, {user0} e mais %n participante de moderadores","Um administrador rebaixou você, {user0} e mais %n participantes de moderadores","Um administrador rebaixou você, {user0} e mais %n participantes de moderadores"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} rebaixou você, {user0} e mais %n participante de moderadores","{actor} rebaixou você, {user0} e mais %n participantes de moderadores","{actor} rebaixou você, {user0} e mais %n participantes de moderadores"], + "An administrator demoted {user0} and {user1} from moderators" : "Um administrador rebaixou {user0} e {user1} de moderadores", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} rebaixou {user0} e {user1} de moderadores", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Um administrador rebaixou {user0}, {user1} e mais %n participante de moderadores","Um administrador rebaixou {user0}, {user1} e mais %n participantes de moderadores","Um administrador rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} rebaixou {user0}, {user1} e mais %n participante de moderadores","{actor} rebaixou {user0}, {user1} e mais %n participantes de moderadores","{actor} rebaixou {user0}, {user1} e mais %n participantes de moderadores"], + "You:" : "Você:", + "You: {lastMessage}" : "Você: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "O servidor foi atualizado.", + "(edited by you)" : "(editado por você)", + "(edited by a deleted user)" : "(editado por um usuário excluído)", + "(edited by {moderator})" : "(editado por {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Você está tentando ingressar em uma conversa enquanto realiza uma sessão ativa em outra janela ou dispositivo. No momento, isso não é suportado pelo Nextcloud Talk. O que você deseja fazer?", + "Leave this page" : "Sair desta página", + "Join here" : "Ingressar aqui", + "Deck card has been posted to {conversation}" : "O cartão do Deck foi postada em {conversation}", + "An error occurred while posting deck card to conversation" : "Ocorreu um erro ao postar o cartão do Deck na conversa", + "Post to a conversation" : "Postar em uma conversa", + "Post to conversation" : "Postar na conversa", + "The recording failed. Please contact your administrator." : "A gravação falhou. Por favor, contate seu administrador.", + "Location has been posted to {conversation}" : "O localização foi postado em {conversation}", + "An error occurred while posting location to conversation" : "Ocorreu um erro ao postar a localização na conversa", + "Share to a conversation" : "Compartilhar em uma conversa", + "Share to conversation" : "Compartilhar na conversa", + "In conversation" : "Em conversação", + "Search in conversation: {conversation}" : "Pesquisar na conversa: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Suas solicitações estão limitadas no momento devido à proteção contra força bruta", + "Error while clearing conversation history" : "Erro ao limpar o histórico da conversa ", + "Error occurred while allowing guests" : "Erro ocorrido ao permitir convidados", + "Error occurred while disallowing guests" : "Erro ocorrido ao não permitir convidados", + "Error occurred when restricting the conversation to moderator" : "Ocorreu um erro ao restringir a conversa ao moderador", + "Error occurred when opening the conversation to everyone" : "Ocorreu um erro ao abrir a conversa para todos", + "Conversation password has been saved" : "A senha da conversa foi salva", + "Conversation password has been removed" : "A senha da conversa foi removida", + "Error occurred while saving conversation password" : "Ocorreu um erro ao salvar a senha da conversa", + "Call recording is starting." : "Iniciando gravação da chamada.", + "Call recording stopped while starting." : "A gravação da chamada foi interrompida ao iniciar.", + "Call recording stopped. You will be notified once the recording is available." : "A gravação da chamada foi interrompida. Você será notificado assim que a gravação estiver disponível.", + "Conversation picture set" : "Imagem da conversa definida", + "Conversation picture deleted" : "Imagem da conversa excluída", + "Could not delete the conversation picture" : "Não foi possível excluir a imagem da conversa", + "Could not remove the automatic expiration" : "Não foi possível remover a expiração automática", + "Could not post message: {errorMessage}" : "Não foi possível postar a mensagem: {errorMessage}", + "Participant is banned successfully" : "Participante está banido com sucesso", + "Error while banning the participant" : "Erro ao banir o participante", + "An error occurred while fetching the participants" : "Erro ao buscar os participantes", + "Could not send invitation to {actorId}" : "Não foi possível enviar o convite para {actorId}", + "Invitations sent" : "Convites enviados", + "Error occurred when sending invitations" : "Ocorreu um erro ao enviar convites", + "Failed to join the conversation." : "Falha ao entrar na conversa.", + "An error occurred while creating breakout rooms" : "Ocorreu um erro ao criar salas temáticas", + "An error occurred while re-ordering the attendees" : "Ocorreu um erro ao reordenar os participantes", + "An error occurred while deleting breakout rooms" : "Ocorreu um erro ao excluir salas temáticas", + "An error occurred while starting breakout rooms" : "Ocorreu um erro ao iniciar salas temáticas", + "An error occurred while stopping breakout rooms" : "Ocorreu um erro ao interromper salas temáticas", + "An error occurred while sending a message to the breakout rooms" : "Ocorreu um erro ao enviar uma mensagem para as salas temáticas", + "An error occurred while requesting assistance" : "Ocorreu um erro ao solicitar assistência", + "An error occurred while resetting the request for assistance" : "Ocorreu um erro ao redefinir o pedido de assistência", + "An error occurred while joining breakout room" : "Ocorreu um erro ao entrar na sala temática", + "Failed to rename the thread" : "Falha ao renomear o fio", + "Error fetching upcoming events" : "Erro ao buscar próximos eventos", + "Error fetching upcoming reminders" : "Erro ao buscar próximos lembretes", + "An error occurred while accepting an invitation" : "Ocorreu um erro ao aceitar um convite", + "An error occurred while rejecting an invitation" : "Ocorreu um erro ao rejeitar um convite", + "{guest} (guest)" : "{guest} (convidado)", + "Poll draft has been saved" : "O rascunho da enquete foi salva", + "An error occurred while saving the draft" : "Ocorreu um erro ao salvar o rascunho", + "An error occurred while submitting your vote" : "Um erro ocorreu ao enviar seu voto", + "An error occurred while ending the poll" : "Ocorreu um erro ao encerrar a enquete", + "An error occurred while deleting the poll draft" : "Ocorreu um erro ao excluir o rascunho da enquete", + "Poll \"{name}\" was created by {user}. Click to vote" : "A enquete \"{name}\" foi criada por {user}. Clique para votar", + "Failed to add reaction" : "Falha ao adicionar reação", + "Failed to remove reaction" : "Falha ao remover reação", + "The server is in maintenance mode." : "O servidor está em modo de manutenção.", + "Federated server was updated." : "O servidor federado foi atualizado.", + "Error while uploading file \"{fileName}\"" : "Erro ao enviar o arquivo \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Espaço livre insuficiente para enviar o arquivo \"{fileName}\"", + "You are not allowed to share files" : "Você não tem permissão para compartilhar arquivos", + "Error while sharing file" : "Erro ao compartilhar arquivo", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "O navegador que você está usando não possui suporte completo pelo Nextcloud Talk. Use a última versão do Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ou Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Em %n hora","Em %n horas","Em %n horas"], + "_%n minute _::_%n minutes_" : ["%n minuto","%n minutos","%n minutos"], + "In {hours} and {minutes}" : "Em {hours} e {minutes}", + "_In %n minute_::_In %n minutes_" : ["Em %n minuto","Em %n minutos","Em %n minutos"], + "Later today – {timeLocale}" : "Hoje mais tarde – {timeLocale}", + "Set time for later today" : "Definir um horário para mais tarde hoje", + "Tomorrow – {timeLocale}" : "Amanhã – {timeLocale}", + "Set time for tomorrow" : "Definir um horário para amanhã", + "This weekend – {timeLocale}" : "Este fim de semana – {timeLocale}", + "Set time for this weekend" : "Definir um horário para este fim de semana", + "Next week – {timeLocale}" : "Próxima semana – {timeLocale}", + "Set time for next week" : "Definir um horário para a semana que vem", + "Message link copied to clipboard" : "Link da mensagem copiado para a área de transferência", + "Conversation link copied to clipboard" : "Link da conversa copiado para a área de transferência", + "The link could not be copied" : "O link não pôde ser copiado", + "Error while parsing a PROPFIND error" : "Erro ao analisar um erro PROPFIND", + "Sending signaling message has failed" : "Erro no envio da mensagem de sinalização", + "Lost connection to signaling server. Trying to reconnect." : "Conexão perdida com o servidor de sinalização. Tentando reconectar.", + "Lost connection to signaling server." : "Perda de conexão com o servidor de sinalização.", + "Connecting is taking longer than expected …" : "A conexão está demorando mais do que o esperado …", + "Failed to connect. Retrying …" : "Falha na conexão. Tentando novamente …", + "Failed to connect. The signaling server may be set up incorrectly" : "Falha na conexão. O servidor de sinalização pode estar configurado incorretamente", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "O servidor de sinalização configurado precisa ser atualizado para ser compatível com esta versão do Talk. Entre em contato com o seu administrador.", + "Please restart the app." : "Por favor, reinicie o aplicativo.", + "Please reload the page." : "Por favor, recarregue a página", + "Please try to restart the app." : "Por favor, tente reiniciar o aplicativo.", + "Please try to reload the page." : "Por favor, tente recarregar a página.", + "Do not disturb" : "Não perturbe", + "Away" : "Fora", + "Microphone {number}" : "Microfone {number}", + "Camera {number}" : "Câmera {number}", + "Speaker {number}" : "Alto falante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parece que você está falando no \"mudo\". Ligue o microfone para outros ouvirem", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Não foi possível estabelecer uma conexão com pelo menos um participante. Pode ser necessário um servidor TURN para sua instalação. Peça ao seu administrador para configurar um seguindo {linkstart}esta documentação{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Isso está demorando mais que o esperado. As permissões de mídia já foram concedidas (ou rejeitadas)? Se sim, reinicie o seu navegador, pois o áudio e vídeo estão falhando", + "Access to microphone & camera is only possible with HTTPS" : "O acesso ao microfone e à câmera só é possível com HTTPS", + "Please move your setup to HTTPS" : "Altere sua configuração para HTTPS", + "Access to microphone & camera was denied" : "O acesso ao microfone e à câmera foi negado", + "WebRTC is not supported in your browser" : "WebRTC não é suportado pelo seu navegador", + "Please use a different browser like Firefox or Chrome" : "Utilize um navegador diferente como o Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erro ao acessar microfone & câmera", + "%s Talk on your mobile devices" : "%s Converse em seus dispositivos móveis", + "Join conversations at any time, anywhere, on any device." : "Participe de conversas a qualquer momento, lugar e dispositivo.", + "Android app" : "Aplicativo Android", + "iOS app" : "Aplicativo iOS", + "__language_name__" : "Português Brasileiro", + "Webhook Demo" : "Demonstração de Webhook", + "Call summary (%s)" : "Resumo da chamada (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "O bot de resumo da chamada posta uma mensagem de visão geral após a chamada, listando todos os participantes e descrevendo as tarefas", + "Tasks" : "Tarefas", + "Notes" : "Notas ", + "Reports" : "Relatórios", + "Decisions" : "Decisões", + "Agenda" : "Agenda", + "Call summary" : "Resumo da chamada", + "Call summary - {title}" : "Resumo da chamada - {title}", + "Talk conversation for event" : "Conversa do Talk para evento", + "Client Push is installed, this improves the performance of desktop clients." : "O Client Push está instalado, o que melhora o desempenho dos clientes de desktop.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "O {notify_push} não está instalado, o que pode levar a problemas de desempenho ao usar clientes de desktop.", + "Next meeting" : "Próxima reunião", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Agende uma reunião a partir do seu calendário. Uma conversa no Talk precisa ser definida como local para aparecer aqui.", + "Join conversations from remote Nextcloud servers" : "Entre em conversas de servidores Nextcloud remotos", + "Your default media state has been saved" : "Seu estado de mídia padrão foi salvo", + "Set reminder for later today" : "Definir lembrete para hoje mais tarde", + "Set reminder for tomorrow" : "Definir lembrete para amanhã", + "Set reminder for this weekend" : "Definir lembrete para este fim de semana", + "Set reminder for next week" : "Definir lembrete para a próxima semana", + "Generate summary" : "Gerar resumo", + "Open poll • You voted already" : "Enquete aberta • Você já votou", + "Open poll • Click to vote" : "Enquete aberta • Clique para votar", + "Poll • Ended" : "Enquete • Encerrada", + "Talk recording from {time} ({conversation})" : "Gravação do Talk de {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Resultado da enquete • %n voto","Resultado da enquete • %n votos","Resultado da enquete • %n votos"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Enquete aberta • %n voto","Enquete aberta • %n votos","Enquete aberta • %n votos"], + "Submit vote" : "Enviar voto", + "Your privacy setting has been saved" : "Sua configuração de privacidade foi salva", + "Your personal setting has been saved" : "Sua configuração pessoal foi salva", + "Failed to save sounds setting" : "Falha ao salvar configuração de sons", + "Sounds setting saved" : "Configuração de sons salva ", + "Always shown if recording consent is required" : "Sempre exibido se for necessário consentimento para gravação", + "Nextcloud Talk was updated, you cannot start or join a call." : "O Nextcloud Talk foi atualizado, você não pode iniciar ou entrar em uma chamada.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Você ingressou na conversa em outra janela ou dispositivo. No momento, isso não é suportado pelo Nextcloud Talk e portanto esta sessão foi encerrada.", + "Nextcloud Talk was updated." : "O Nextcloud Talk foi atualizado.", + "Nextcloud is in maintenance mode." : "O Nextcloud está em modo de manutenção.", + "Nextcloud Talk Federation was updated." : "O Nextcloud Talk Federation foi atualizado.", + "Enable live translation" : "Ativar tradução em tempo real", + "I picked list style" : "Eu escolhi o estilo lista", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ei! Você está usando o Talk no estilo lista ou com balões de mensagem?" +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/pt_PT.js b/l10n/pt_PT.js new file mode 100644 index 0000000..3bc246c --- /dev/null +++ b/l10n/pt_PT.js @@ -0,0 +1,409 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "uma conversa", + "(Duration %s)" : "(Duração %s)", + "You attended a call with {user1}" : "Esteve numa chamada com {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados","%n convidados"], + "You attended a call with {user1} and {user2}" : "Esteve numa chamada com {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Esteve numa chamada com {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Esteve numa chamada com {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Esteve numa chamada com {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n outro","%n outros","%n outros"], + "{actor} invited you to {call}" : "{actor} convidou-o para {call}", + "You were invited to a conversation or had a call" : "Foi convidado para uma conversa ou teve uma chamada", + "Other activities" : "Outras atividades", + "Talk" : "Falar", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bem-vindo ao Nextcloud Talk!\nNesta conversa será informado sobre as novidades disponíveis no Nextcloud Talk.", + "## New in Talk %s" : "## Novo no Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- O Microsoft Edge e o Safari podem, agora, ser utilizados para participar em chamadas áudio e vídeo.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Agora as conversas individuais são persistentes e já não podem ser convertidas em conversas de grupo por acidente. Além disso, quando um dos participantes deixa a conversa, esta passa a não ser apagada automaticamente. A conversa só é apagada do servidor se ambos os participantes a deixarem.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora pode notificar todos os participantes ao escrever \"@all\" na conversa", + "- With the \"arrow-up\" key you can repost your last message" : "- Com a tecla \"seta para cima\" você pode repostar sua última mensagem", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Agora o Talk aceita comandos, envie \"/help\" como mensagem na conversa para ver se o seu administrador configurou algum", + "- With projects you can create quick links between conversations, files and other items" : "- Com projetos pode criar links rápidos entre conversas, ficheiros e outros itens", + "- You can now mention guests in the chat" : "- Agora pode mencionar convidados na conversa", + "Talk updates ✅" : "Atualizações do Falar ✅", + "System created the conversation" : "O sistema criou a conversa", + "Message deleted by author" : "Mensagem apagada pelo autor", + "Administration" : "Administração", + "System" : "Sistema", + "Talk conversations" : "Conversas no Talk", + "Talk to %s" : "Falar com %s", + "File not found" : "Ficheiro não encontrado", + "File is too big" : "O ficheiro é demasiado grande", + "Invalid file provided" : "Fornecido ficheiro inválido", + "Invalid image" : "Imagem inválida", + "Unknown filetype" : "Tipo de ficheiro desconhecido", + "Talk mentions" : "Menções no Falar", + "No unread mentions" : "Nenhuma menção por ler", + "Description" : "Descrição", + "Dismiss notification" : "Dispensar notificação", + "Accept" : "Aceitar", + "Decline" : "Recusar", + "New message" : "Nova mensagem", + "Reminder" : "Lembrete", + "Join call" : "Juntar-se à chamada", + "A group call has started in {call}" : "Uma chamada de grupo começou em {call}", + "Open settings" : "Abrir definições", + "error" : "erro", + "Default" : "Predefinida", + "Presentation" : "Apresentação", + "Conversations" : "Conversações", + "Messages" : "Mensagens", + "Avatar image is not square" : "A imagem do avatar não é quadrada.", + "Other" : "Outro", + "Note to self" : "Nota a mim", + "A place for your private notes, thoughts and ideas" : "Um local para os seus pensamentos, notas e ideias privados", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Árabes Unidos", + "Afghanistan" : "Afeganistão", + "Albania" : "Albânia", + "Armenia" : "Arménia", + "Angola" : "Angola", + "Antarctica" : "Antárctica", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Áustria", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Azerbaijan" : "Azerbaijão", + "Bosnia and Herzegovina" : "Bosnia Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Burundi" : "Burundi", + "Benin" : "Benim", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butão", + "Botswana" : "Botswana", + "Belarus" : "Bielorrússia", + "Belize" : "Belize", + "Canada" : "Canada", + "Central African Republic" : "República Central Africana", + "Congo" : "Congo", + "Switzerland" : "Suiça", + "Cook Islands" : "Ilhas Cook", + "Chile" : "Chile", + "Cameroon" : "Camarões", + "China" : "China", + "Colombia" : "Colômbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Cyprus" : "Chipre", + "Germany" : "Alemanha", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algéria", + "Ecuador" : "Equador", + "Estonia" : "Estónia", + "Egypt" : "Egipto", + "Eritrea" : "Eritreia", + "Spain" : "Espanha", + "Ethiopia" : "Etiópia", + "Finland" : "Finlândia", + "Fiji" : "Ilhas Fiji", + "Faroe Islands" : "Ilhas Faroe", + "France" : "França", + "Gabon" : "Gabão", + "Grenada" : "Granada", + "Georgia" : "Geórgia", + "French Guiana" : "Guiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Islândia", + "Gambia" : "Gambia", + "Guinea" : "Guiné", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guiné Equatorial", + "Greece" : "Grécia", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guiné-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Honduras" : "Honduras", + "Croatia" : "Croácia", + "Haiti" : "Haiti", + "Hungary" : "Hungria", + "Indonesia" : "Indonésia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Ilha de Man", + "India" : "Índia", + "Iraq" : "Iraque", + "Iceland" : "Islândia", + "Italy" : "Italia", + "Jamaica" : "Jamaica", + "Jordan" : "Jordânia", + "Japan" : "Japão", + "Kenya" : "Quénia", + "Kyrgyzstan" : "Quirquistão", + "Cambodia" : "Cambodja", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ilhas Caimão", + "Kazakhstan" : "Casaquistão", + "Lebanon" : "Líbano", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letónia", + "Libya" : "Libia", + "Morocco" : "Marrocos", + "Monaco" : "Mónaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagáscar", + "Marshall Islands" : "Ilhas Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macau", + "Mauritania" : "Mauritânia", + "Montserrat" : "Monserrate", + "Malta" : "Malta", + "Mauritius" : "Ilhas Maurícias", + "Maldives" : "Ilhas Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Moçambique", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledónia", + "Niger" : "Níger", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicarágua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "New Zealand" : "Nova Zelândia", + "Oman" : "Oman", + "Panama" : "Panamá", + "Peru" : "Peru", + "French Polynesia" : "Polinésia Francesa", + "Papua New Guinea" : "Papua Nova Guiné", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistão", + "Poland" : "Polónia", + "Puerto Rico" : "Porto Rico", + "Portugal" : "Portugal", + "Paraguay" : "Paraguai", + "Qatar" : "Quatar ", + "Romania" : "Roménia", + "Serbia" : "Servia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arábia Saudita", + "Solomon Islands" : "Ilhas Salomão", + "Seychelles" : "Ilhas Seychelles", + "Sudan" : "Sudão", + "Sweden" : "Suécia", + "Singapore" : "Singapura", + "Slovenia" : "Eslovénia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somália", + "Suriname" : "Suriname", + "Sao Tome and Principe" : "São Tomé e Príncipe", + "El Salvador" : "El Salvador", + "Chad" : "Chade", + "Togo" : "Togo", + "Thailand" : "Tailândia", + "Tajikistan" : "Tajaquistão", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcomenistão", + "Tunisia" : "Tunísia", + "Tonga" : "Tonga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucrânia", + "Uganda" : "Uganda", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbequistão", + "Vanuatu" : "Vanuatu", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "South Africa" : "África do Sul", + "Zambia" : "Zâmbia", + "Zimbabwe" : "Zimbábue ", + "Federation" : "Federação", + "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD", + "Leave call" : "Sair da chamada", + "The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.", + "Password" : "Palavra-passe", + "Submit" : "Submeter", + "Everyone" : "Para todos", + "Save changes" : "Guardar alterações", + "Saving …" : "A guardar...", + "Saved!" : "Gravado!", + "Limit to groups" : "Limitado a grupos", + "Enabled" : "Ativado", + "Disabled" : "Desativado", + "State" : "Estado", + "Name" : "Nome", + "General settings" : "Definições Gerais", + "Enable encryption" : "Ativar a encriptação", + "Pending" : "Pendente", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estado", + "Created at" : "Criado em", + "Yes" : "Sim", + "No" : "Não", + "Downloading …" : "A transferir…", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Segredo partilhado", + "TURN server protocols" : "Protocolos do servidor TURN", + "OK" : "Ok", + "Checking …" : "A verificar...", + "Federated user" : "Utilizador federado", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Anterior", + "Now" : "Agora", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendário", + "Attendees" : "Participantes", + "Save" : "Guardar", + "No results" : "Sem resultados", + "Done" : "Concluído", + "Grid view" : "Vista em grelha", + "Reload" : "Recarregar", + "Waiting for others to join the call …" : "À espera que outros se juntem à chamada ..", + "You can invite others in the participant tab of the sidebar" : "Pode convidar outros no separador participantes na barra lateral ", + "Share this link to invite others!" : "Envie este link para convidar outros!", + "Copy link" : "Copiar ligação", + "Mute audio" : "Silenciar áudio", + "None" : "Nenhum", + "Disable video" : "desativar vídeo", + "Enable video" : "ativar vídeo", + "You" : "Você", + "Show screen" : "Mostrar ecrã", + "Collapse" : "Expandir", + "Favorite" : "Favorito", + "Date:" : "Data:", + "Hide details" : "Ocultar detalhes", + "Show details" : "Mostrar detalhes", + "Disable" : "Desativar", + "Enable" : "Ativar", + "Choose" : "Escolher", + "Restricted" : "Restrito", + "Personal" : "Pessoal", + "Leave conversation" : "Sair da conversação", + "Delete conversation" : "Eliminar conversação", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensagens de chat podem expirar após um determinado período. Nota: os ficheiros partilhados no chat não serão eliminados para o proprietário, mas deixarão de ser partilhados na conversa.", + "Password protection" : "Protegido por palavra-passe", + "Set a password" : "Definir uma palavra-passe", + "Edit" : "Editar", + "Delete" : "Apagar", + "Notifications" : "Notificações", + "Join" : "Aderir", + "Create a new conversation" : "Criar nova conversa", + "Join open conversations" : "Juntar-me a conversas abertas", + "Log in" : "Iniciar sessão", + "Remove from favorites" : "Remover de favoritos", + "Add to favorites" : "Adicionar aos favoritos", + "Home" : "Início", + "Alphabetically" : "Alfabeticamente", + "Clear filter" : "Limpar filtro", + "Users" : "Utilizadores", + "Groups" : "Grupos", + "Teams" : "Grupos", + "Test" : "Teste", + "Invalid path selected" : "Caminho inválido selecionado", + "Blur" : "Blur", + "Upload" : "Enviar", + "Files" : "Ficheiros", + "24 hours" : "24 horas", + "7 days" : "7 dias", + "Message forwarded to \"Note to self\"" : "Mensagem reencaminhada para \"Nota a mim\"", + "Error while forwarding message to \"Note to self\"" : "Erro ao reencaminhar mensagem para \"Nota a mim\"", + "Reply" : "Resposta", + "More actions" : "Mais ações", + "Download file" : "Transferir ficheiro", + "Translate" : "Traduzir", + "Dismiss" : "Dispensar", + "Contact" : "Contacto", + "No messages" : "Sem mensagens", + "Create a new group conversation" : "Criar nova conversa de grupo", + "Send message" : "Enviar mensagem", + "File to share" : "Ficheiro a partilhar", + "New file" : "Ficheiro novo", + "Send" : "Enviar", + "Settings" : "Definições", + "Results" : "Resultados", + "moderator" : "moderador", + "guest" : "convidado", + "Remove participant" : "Remover participante", + "Demote from moderator" : "Relegar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Remover", + "Add users or groups" : "Add users or groups", + "Add users" : "Adicionar utilizadores", + "Integrations" : "Integrações", + "Searching …" : "À procura …", + "Participants" : "Participantes", + "Chat" : "Conversa", + "Details" : "Detalhes", + "Search in {name}" : "Procurar em {name}", + "No results found" : "No results found", + "Load more results" : "Mostrar mais resultados", + "Projects" : "Projectos", + "No shared items" : "Sem itens partilhados", + "Notification settings" : "Definições de notificação", + "Appearance & Sounds" : "Aspeto e sons", + "Privacy" : "Privacidade", + "Search" : "Pesquisa sobre", + "Screensharing options" : "Opções de partilha de ecrã", + "Enable screensharing" : "Ativar partilha de ecrã", + "Screensharing requires the page to be loaded through HTTPS." : "A partilha de ecrã requer que a página seja carregada através de HTTPS.", + "An error occurred while starting screensharing." : "Ocorreu um erro enquanto iniciava a partilha de ecrã.", + "Download attendance list" : "Transferir lista de presenças", + "Keep" : "Manter", + "Select a region" : "Selecione uma região", + "User" : "Utilizador", + "API token" : "Token de API", + "Login" : "Iniciar sessão", + "Nickname" : "Alcunha", + "Client ID" : "Id. do Cliente", + "Media" : "Media", + "Locations" : "Localizações", + "Audio" : "Áudio", + "Group" : "Grupo", + "Team" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Erro ao partilhar ficheiro", + "Please reload the page." : "Por favor, recarregue a página.", + "Do not disturb" : "Não incomodar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "Só é possível aceder ao microfone & câmera com HTTPS", + "Access to microphone & camera was denied" : "Acesso recusado ao microfone & câmera", + "WebRTC is not supported in your browser" : "WebRTC não é suportado pelo seu browser", + "Please use a different browser like Firefox or Chrome" : "Por favor use um browser diferente como Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erro a aceder ao microfone & câmera", + "Android app" : "Aplicação Android", + "iOS app" : "Aplicação iOS", + "__language_name__" : "Português", + "Tasks" : "Tarefas", + "Notes" : "Notas", + "Reports" : "Relatórios" +}, +"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;"); diff --git a/l10n/pt_PT.json b/l10n/pt_PT.json new file mode 100644 index 0000000..c37ae1c --- /dev/null +++ b/l10n/pt_PT.json @@ -0,0 +1,407 @@ +{ "translations": { + "a conversation" : "uma conversa", + "(Duration %s)" : "(Duração %s)", + "You attended a call with {user1}" : "Esteve numa chamada com {user1}", + "_%n guest_::_%n guests_" : ["%n convidado","%n convidados","%n convidados"], + "You attended a call with {user1} and {user2}" : "Esteve numa chamada com {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Esteve numa chamada com {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Esteve numa chamada com {user1}, {user2}, {user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Esteve numa chamada com {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n outro","%n outros","%n outros"], + "{actor} invited you to {call}" : "{actor} convidou-o para {call}", + "You were invited to a conversation or had a call" : "Foi convidado para uma conversa ou teve uma chamada", + "Other activities" : "Outras atividades", + "Talk" : "Falar", + "Guest" : "Convidado", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bem-vindo ao Nextcloud Talk!\nNesta conversa será informado sobre as novidades disponíveis no Nextcloud Talk.", + "## New in Talk %s" : "## Novo no Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- O Microsoft Edge e o Safari podem, agora, ser utilizados para participar em chamadas áudio e vídeo.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Agora as conversas individuais são persistentes e já não podem ser convertidas em conversas de grupo por acidente. Além disso, quando um dos participantes deixa a conversa, esta passa a não ser apagada automaticamente. A conversa só é apagada do servidor se ambos os participantes a deixarem.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Agora pode notificar todos os participantes ao escrever \"@all\" na conversa", + "- With the \"arrow-up\" key you can repost your last message" : "- Com a tecla \"seta para cima\" você pode repostar sua última mensagem", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Agora o Talk aceita comandos, envie \"/help\" como mensagem na conversa para ver se o seu administrador configurou algum", + "- With projects you can create quick links between conversations, files and other items" : "- Com projetos pode criar links rápidos entre conversas, ficheiros e outros itens", + "- You can now mention guests in the chat" : "- Agora pode mencionar convidados na conversa", + "Talk updates ✅" : "Atualizações do Falar ✅", + "System created the conversation" : "O sistema criou a conversa", + "Message deleted by author" : "Mensagem apagada pelo autor", + "Administration" : "Administração", + "System" : "Sistema", + "Talk conversations" : "Conversas no Talk", + "Talk to %s" : "Falar com %s", + "File not found" : "Ficheiro não encontrado", + "File is too big" : "O ficheiro é demasiado grande", + "Invalid file provided" : "Fornecido ficheiro inválido", + "Invalid image" : "Imagem inválida", + "Unknown filetype" : "Tipo de ficheiro desconhecido", + "Talk mentions" : "Menções no Falar", + "No unread mentions" : "Nenhuma menção por ler", + "Description" : "Descrição", + "Dismiss notification" : "Dispensar notificação", + "Accept" : "Aceitar", + "Decline" : "Recusar", + "New message" : "Nova mensagem", + "Reminder" : "Lembrete", + "Join call" : "Juntar-se à chamada", + "A group call has started in {call}" : "Uma chamada de grupo começou em {call}", + "Open settings" : "Abrir definições", + "error" : "erro", + "Default" : "Predefinida", + "Presentation" : "Apresentação", + "Conversations" : "Conversações", + "Messages" : "Mensagens", + "Avatar image is not square" : "A imagem do avatar não é quadrada.", + "Other" : "Outro", + "Note to self" : "Nota a mim", + "A place for your private notes, thoughts and ideas" : "Um local para os seus pensamentos, notas e ideias privados", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Árabes Unidos", + "Afghanistan" : "Afeganistão", + "Albania" : "Albânia", + "Armenia" : "Arménia", + "Angola" : "Angola", + "Antarctica" : "Antárctica", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americana", + "Austria" : "Áustria", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Azerbaijan" : "Azerbaijão", + "Bosnia and Herzegovina" : "Bosnia Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bélgica", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgária", + "Burundi" : "Burundi", + "Benin" : "Benim", + "Brazil" : "Brasil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butão", + "Botswana" : "Botswana", + "Belarus" : "Bielorrússia", + "Belize" : "Belize", + "Canada" : "Canada", + "Central African Republic" : "República Central Africana", + "Congo" : "Congo", + "Switzerland" : "Suiça", + "Cook Islands" : "Ilhas Cook", + "Chile" : "Chile", + "Cameroon" : "Camarões", + "China" : "China", + "Colombia" : "Colômbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Cyprus" : "Chipre", + "Germany" : "Alemanha", + "Djibouti" : "Djibouti", + "Denmark" : "Dinamarca", + "Dominican Republic" : "República Dominicana", + "Algeria" : "Algéria", + "Ecuador" : "Equador", + "Estonia" : "Estónia", + "Egypt" : "Egipto", + "Eritrea" : "Eritreia", + "Spain" : "Espanha", + "Ethiopia" : "Etiópia", + "Finland" : "Finlândia", + "Fiji" : "Ilhas Fiji", + "Faroe Islands" : "Ilhas Faroe", + "France" : "França", + "Gabon" : "Gabão", + "Grenada" : "Granada", + "Georgia" : "Geórgia", + "French Guiana" : "Guiana Francesa", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Islândia", + "Gambia" : "Gambia", + "Guinea" : "Guiné", + "Guadeloupe" : "Guadalupe", + "Equatorial Guinea" : "Guiné Equatorial", + "Greece" : "Grécia", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guiné-Bissau", + "Guyana" : "Guiana", + "Hong Kong" : "Hong Kong", + "Honduras" : "Honduras", + "Croatia" : "Croácia", + "Haiti" : "Haiti", + "Hungary" : "Hungria", + "Indonesia" : "Indonésia", + "Ireland" : "Irlanda", + "Israel" : "Israel", + "Isle of Man" : "Ilha de Man", + "India" : "Índia", + "Iraq" : "Iraque", + "Iceland" : "Islândia", + "Italy" : "Italia", + "Jamaica" : "Jamaica", + "Jordan" : "Jordânia", + "Japan" : "Japão", + "Kenya" : "Quénia", + "Kyrgyzstan" : "Quirquistão", + "Cambodia" : "Cambodja", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ilhas Caimão", + "Kazakhstan" : "Casaquistão", + "Lebanon" : "Líbano", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesoto", + "Lithuania" : "Lituania", + "Luxembourg" : "Luxemburgo", + "Latvia" : "Letónia", + "Libya" : "Libia", + "Morocco" : "Marrocos", + "Monaco" : "Mónaco", + "Montenegro" : "Montenegro", + "Madagascar" : "Madagáscar", + "Marshall Islands" : "Ilhas Marshall", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macau", + "Mauritania" : "Mauritânia", + "Montserrat" : "Monserrate", + "Malta" : "Malta", + "Mauritius" : "Ilhas Maurícias", + "Maldives" : "Ilhas Maldivas", + "Malawi" : "Malawi", + "Mexico" : "México", + "Malaysia" : "Malasia", + "Mozambique" : "Moçambique", + "Namibia" : "Namíbia", + "New Caledonia" : "Nova Caledónia", + "Niger" : "Níger", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nicarágua", + "Netherlands" : "Holanda", + "Norway" : "Noruega", + "Nepal" : "Nepal", + "New Zealand" : "Nova Zelândia", + "Oman" : "Oman", + "Panama" : "Panamá", + "Peru" : "Peru", + "French Polynesia" : "Polinésia Francesa", + "Papua New Guinea" : "Papua Nova Guiné", + "Philippines" : "Filipinas", + "Pakistan" : "Paquistão", + "Poland" : "Polónia", + "Puerto Rico" : "Porto Rico", + "Portugal" : "Portugal", + "Paraguay" : "Paraguai", + "Qatar" : "Quatar ", + "Romania" : "Roménia", + "Serbia" : "Servia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Arábia Saudita", + "Solomon Islands" : "Ilhas Salomão", + "Seychelles" : "Ilhas Seychelles", + "Sudan" : "Sudão", + "Sweden" : "Suécia", + "Singapore" : "Singapura", + "Slovenia" : "Eslovénia", + "Sierra Leone" : "Serra Leoa", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somália", + "Suriname" : "Suriname", + "Sao Tome and Principe" : "São Tomé e Príncipe", + "El Salvador" : "El Salvador", + "Chad" : "Chade", + "Togo" : "Togo", + "Thailand" : "Tailândia", + "Tajikistan" : "Tajaquistão", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turcomenistão", + "Tunisia" : "Tunísia", + "Tonga" : "Tonga", + "Turkey" : "Turquia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Ukraine" : "Ucrânia", + "Uganda" : "Uganda", + "Uruguay" : "Uruguai", + "Uzbekistan" : "Uzbequistão", + "Vanuatu" : "Vanuatu", + "Samoa" : "Samoa", + "Yemen" : "Iemen", + "South Africa" : "África do Sul", + "Zambia" : "Zâmbia", + "Zimbabwe" : "Zimbábue ", + "Federation" : "Federação", + "Invalid date, date format must be YYYY-MM-DD" : "Data inválida, o formato da data deve ser AAAA-MM-DD", + "Leave call" : "Sair da chamada", + "The password is wrong. Try again." : "A palavra-passe está errada. Por favor, tente de novo.", + "Password" : "Palavra-passe", + "Submit" : "Submeter", + "Everyone" : "Para todos", + "Save changes" : "Guardar alterações", + "Saving …" : "A guardar...", + "Saved!" : "Gravado!", + "Limit to groups" : "Limitado a grupos", + "Enabled" : "Ativado", + "Disabled" : "Desativado", + "State" : "Estado", + "Name" : "Nome", + "General settings" : "Definições Gerais", + "Enable encryption" : "Ativar a encriptação", + "Pending" : "Pendente", + "Error" : "Erro", + "Blocked" : "Bloqueado", + "Expired" : "Expirado", + "Never" : "Nunca", + "Language" : "Idioma", + "Country" : "País", + "Status" : "Estado", + "Created at" : "Criado em", + "Yes" : "Sim", + "No" : "Não", + "Downloading …" : "A transferir…", + "Validate SSL certificate" : "Validar certificado SSL", + "Shared secret" : "Segredo partilhado", + "TURN server protocols" : "Protocolos do servidor TURN", + "OK" : "Ok", + "Checking …" : "A verificar...", + "Federated user" : "Utilizador federado", + "Confirm" : "Confirmar", + "Reset" : "Reiniciar", + "Cancel" : "Cancelar", + "Back" : "Anterior", + "Now" : "Agora", + "From" : "De", + "To" : "Para", + "Calendar" : "Calendário", + "Attendees" : "Participantes", + "Save" : "Guardar", + "No results" : "Sem resultados", + "Done" : "Concluído", + "Grid view" : "Vista em grelha", + "Reload" : "Recarregar", + "Waiting for others to join the call …" : "À espera que outros se juntem à chamada ..", + "You can invite others in the participant tab of the sidebar" : "Pode convidar outros no separador participantes na barra lateral ", + "Share this link to invite others!" : "Envie este link para convidar outros!", + "Copy link" : "Copiar ligação", + "Mute audio" : "Silenciar áudio", + "None" : "Nenhum", + "Disable video" : "desativar vídeo", + "Enable video" : "ativar vídeo", + "You" : "Você", + "Show screen" : "Mostrar ecrã", + "Collapse" : "Expandir", + "Favorite" : "Favorito", + "Date:" : "Data:", + "Hide details" : "Ocultar detalhes", + "Show details" : "Mostrar detalhes", + "Disable" : "Desativar", + "Enable" : "Ativar", + "Choose" : "Escolher", + "Restricted" : "Restrito", + "Personal" : "Pessoal", + "Leave conversation" : "Sair da conversação", + "Delete conversation" : "Eliminar conversação", + "_%n hour_::_%n hours_" : ["%n hora","%n horas","%n horas"], + "_%n day_::_%n days_" : ["%n dia","%n dias","%n dias"], + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "As mensagens de chat podem expirar após um determinado período. Nota: os ficheiros partilhados no chat não serão eliminados para o proprietário, mas deixarão de ser partilhados na conversa.", + "Password protection" : "Protegido por palavra-passe", + "Set a password" : "Definir uma palavra-passe", + "Edit" : "Editar", + "Delete" : "Apagar", + "Notifications" : "Notificações", + "Join" : "Aderir", + "Create a new conversation" : "Criar nova conversa", + "Join open conversations" : "Juntar-me a conversas abertas", + "Log in" : "Iniciar sessão", + "Remove from favorites" : "Remover de favoritos", + "Add to favorites" : "Adicionar aos favoritos", + "Home" : "Início", + "Alphabetically" : "Alfabeticamente", + "Clear filter" : "Limpar filtro", + "Users" : "Utilizadores", + "Groups" : "Grupos", + "Teams" : "Grupos", + "Test" : "Teste", + "Invalid path selected" : "Caminho inválido selecionado", + "Blur" : "Blur", + "Upload" : "Enviar", + "Files" : "Ficheiros", + "24 hours" : "24 horas", + "7 days" : "7 dias", + "Message forwarded to \"Note to self\"" : "Mensagem reencaminhada para \"Nota a mim\"", + "Error while forwarding message to \"Note to self\"" : "Erro ao reencaminhar mensagem para \"Nota a mim\"", + "Reply" : "Resposta", + "More actions" : "Mais ações", + "Download file" : "Transferir ficheiro", + "Translate" : "Traduzir", + "Dismiss" : "Dispensar", + "Contact" : "Contacto", + "No messages" : "Sem mensagens", + "Create a new group conversation" : "Criar nova conversa de grupo", + "Send message" : "Enviar mensagem", + "File to share" : "Ficheiro a partilhar", + "New file" : "Ficheiro novo", + "Send" : "Enviar", + "Settings" : "Definições", + "Results" : "Resultados", + "moderator" : "moderador", + "guest" : "convidado", + "Remove participant" : "Remover participante", + "Demote from moderator" : "Relegar de moderador", + "Promote to moderator" : "Promover a moderador", + "Remove" : "Remover", + "Add users or groups" : "Add users or groups", + "Add users" : "Adicionar utilizadores", + "Integrations" : "Integrações", + "Searching …" : "À procura …", + "Participants" : "Participantes", + "Chat" : "Conversa", + "Details" : "Detalhes", + "Search in {name}" : "Procurar em {name}", + "No results found" : "No results found", + "Load more results" : "Mostrar mais resultados", + "Projects" : "Projectos", + "No shared items" : "Sem itens partilhados", + "Notification settings" : "Definições de notificação", + "Appearance & Sounds" : "Aspeto e sons", + "Privacy" : "Privacidade", + "Search" : "Pesquisa sobre", + "Screensharing options" : "Opções de partilha de ecrã", + "Enable screensharing" : "Ativar partilha de ecrã", + "Screensharing requires the page to be loaded through HTTPS." : "A partilha de ecrã requer que a página seja carregada através de HTTPS.", + "An error occurred while starting screensharing." : "Ocorreu um erro enquanto iniciava a partilha de ecrã.", + "Download attendance list" : "Transferir lista de presenças", + "Keep" : "Manter", + "Select a region" : "Selecione uma região", + "User" : "Utilizador", + "API token" : "Token de API", + "Login" : "Iniciar sessão", + "Nickname" : "Alcunha", + "Client ID" : "Id. do Cliente", + "Media" : "Media", + "Locations" : "Localizações", + "Audio" : "Áudio", + "Group" : "Grupo", + "Team" : "Grupo", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "Error while sharing file" : "Erro ao partilhar ficheiro", + "Please reload the page." : "Por favor, recarregue a página.", + "Do not disturb" : "Não incomodar", + "Away" : "Ausente", + "Access to microphone & camera is only possible with HTTPS" : "Só é possível aceder ao microfone & câmera com HTTPS", + "Access to microphone & camera was denied" : "Acesso recusado ao microfone & câmera", + "WebRTC is not supported in your browser" : "WebRTC não é suportado pelo seu browser", + "Please use a different browser like Firefox or Chrome" : "Por favor use um browser diferente como Firefox ou Chrome", + "Error while accessing microphone & camera" : "Erro a aceder ao microfone & câmera", + "Android app" : "Aplicação Android", + "iOS app" : "Aplicação iOS", + "__language_name__" : "Português", + "Tasks" : "Tarefas", + "Notes" : "Notas", + "Reports" : "Relatórios" +},"pluralForm" :"nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;" +} \ No newline at end of file diff --git a/l10n/ro.js b/l10n/ro.js new file mode 100644 index 0000000..6770884 --- /dev/null +++ b/l10n/ro.js @@ -0,0 +1,883 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "o conversație", + "(Duration %s)" : "(Durata %s)", + "You attended a call with {user1}" : "Ați participat la un apel cu {user1}", + "_%n guest_::_%n guests_" : ["%n oaspete","%n oaspeți","%n oaspeți"], + "You attended a call with {user1} and {user2}" : "Ați participat la un apel cu {user1} și {user2}.", + "You attended a call with {user1}, {user2} and {user3}" : "Ați participat la un apel cu {user1}, {user2} și {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ați participat la un apel cu {user1}, {user2}, {user3} și {user4}.", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ați participat la un apel cu {user1}, {user2}, {user3}, {user4} și {user5}", + "_%n other_::_%n others_" : ["%n altul","& alții","& alții"], + "{actor} invited you to {call}" : "{actor} te-a invitat la {call}", + "You were invited to a conversation or had a call" : "Ați fost invitat la o conversație sau ați primit un apel", + "Other activities" : "Alte activități", + "Talk" : "Discuție", + "Guest" : "Invitat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bine ați venit la Nextcloud Talk!\nÎn această conversație veți fi informat despre noile caracteristici disponibile în Nextcloud Talk.", + "## New in Talk %s" : "## Nou în Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge și Safari pot fi folosite acum pentru a participa la apeluri audio și video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Conversațiile individuale sunt acum persistente și nu mai pot fi transformate din greșeală în conversații de grup. De asemenea, atunci când unul dintre participanți părăsește conversația, aceasta nu mai este ștearsă automat. Numai dacă ambii participanți pleacă, conversația este ștearsă de pe server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Acum puteți notifica toți participanții prin postarea \"@all\" în chat.", + "- With the \"arrow-up\" key you can repost your last message" : "- Cu ajutorul tastei \"săgeată în sus\" puteți reposta ultimul mesaj.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk poate avea acum comenzi, trimiteți \"/help\" ca mesaj de chat pentru a vedea dacă administratorul dvs. a configurat câteva", + "- With projects you can create quick links between conversations, files and other items" : "- Cu ajutorul proiectelor puteți crea legături rapide între conversații, fișiere și alte elemente.", + "- You can now mention guests in the chat" : "- Acum puteți menționa oaspeții în chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversațiile pot avea acum un lobby. Acest lucru va permite moderatorilor să se alăture conversației și să sune deja pentru a pregăti întâlnirea, în timp ce utilizatorii și invitații trebuie să aștepte", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Acum puteți răspunde direct la mesaje, oferindu-le celorlalți utilizatori mai mult context despre ce este vorba în mesajul dvs.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Căutarea conversațiilor și a participanților va filtra acum și conversațiile existente, facilitând astfel găsirea conversațiilor anterioare", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Acum puteți adăuga grupuri de utilizatori personalizați la conversații atunci când este instalată aplicația cercuri", + "- Check out the new grid and call view" : "- Consultați noua grilă și vizualizarea apelurilor", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Acum puteți încărca și glisa fișiere direct de pe dispozitiv în chat.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Fişierele partajate se vor deschide direct in chat cu aplicaţia de vizualizare", + "Reaction deleted by author" : "Reacție ștearsă de autor", + "{actor} created the conversation" : "{actor} a creat conversația", + "You created the conversation" : "Ați creat această conversație", + "System created the conversation" : "Conversație creată de sistem", + "An administrator created the conversation" : "Conversație creată de administrator", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a redenumit conversația din \"%1$s\" în \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ați redenumit conversația din \"%1$s\" în \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrator a redenumit conversația din \"%1$s\" în \"%2$s\"", + "{actor} set the description" : "{actor} a configurat descrierea", + "You set the description" : "Ați configurat descrierea", + "An administrator set the description" : "Un administrator a configurat descrierea", + "{actor} removed the description" : "{actor} a șters descrierea", + "You removed the description" : "Ați șters descrierea", + "An administrator removed the description" : "Un administrator a șters descrierea", + "You started a call" : "Ați inițiat o videoconferință", + "{actor} started a call" : "{actor} a inițiat o videoconferință", + "{actor} joined the call" : "{actor} s-a alăturat videoconferinței", + "You joined the call" : "V-ați alăturat la videoconferință", + "{actor} left the call" : "{actor} a părăsit videoconferința", + "You left the call" : "Ați părăsit videoconferința", + "{actor} unlocked the conversation" : "{actor} a deblocat conversația", + "You unlocked the conversation" : "Ați deblocat conversația", + "An administrator unlocked the conversation" : "Un administrator a deblocat conversația", + "{actor} locked the conversation" : "{actor} a blocat conversația", + "You locked the conversation" : "Ați blocat conversația", + "An administrator locked the conversation" : "Un administrator a blocat conversația", + "{actor} limited the conversation to the current participants" : "{actor} a limitat conversația la participanții actuali", + "You limited the conversation to the current participants" : "Ați limitat conversația la participanții actuali", + "An administrator limited the conversation to the current participants" : "Un administrator a limitat conversația la participanții actuali", + "The conversation is now open to everyone" : "Conversația este deschisă acum oricui", + "{actor} set a password" : "{actor} a configurat o parolă", + "You set a password" : "Ați pus o parolă", + "An administrator set a password" : "Un administrator a pus o parolă", + "{actor} added {user}" : "{actor} a adăugat pe {user}", + "You joined the conversation" : "V-ați alăturat conversației", + "{actor} joined the conversation" : "{actor} s-a alăturat conversației", + "You added {user}" : "Ați adăugat pe {user}", + "{actor} added you" : "{actor} v-a adăugat", + "An administrator added you" : "V-a adăugat un administrator", + "An administrator added {user}" : "Un administrator a adăugat pe {user}", + "You left the conversation" : "Ați părăsit conversația", + "{actor} left the conversation" : "{actor} a părăsit conversația", + "{actor} removed {user}" : "{actor} a eliminat pe {user}", + "You removed {user}" : "Ați eliminat pe {user}", + "{actor} removed you" : "{actor} v-a eliminat", + "An administrator removed you" : "V-a eliminat un administrator", + "An administrator removed {user}" : "Un administrator a eliminat pe {user}", + "{actor} added group {group}" : "{actor} a adăugat grupul {group}", + "You added group {group}" : "Ați adăugat grupul {group}", + "An administrator added group {group}" : "Un administrator a adăugat grupul {group}", + "{actor} removed group {group}" : "{actor} a eliminat grupul {group}", + "You removed group {group}" : "Ați eliminat grupul {group}", + "An administrator removed group {group}" : "Un administrator a eliminat grupul {group}", + "{actor} deleted a message" : "{actor} a șters un mesaj", + "You deleted a message" : "Ați șters un mesaj", + "{actor} deleted a reaction" : "{actor} a șters o reacție", + "You deleted a reaction" : "Ați șters o reacție", + "{actor} disabled message expiration" : "{actor} a eliminat timpul de expirare a mesajului", + "You disabled message expiration" : "Ați eliminat timpul de expirare al mesajului", + "{actor} cleared the history of the conversation" : "{actor} a șters istoricul conversației", + "You cleared the history of the conversation" : "Ați șters istoricul conversației", + "{actor} set the conversation picture" : "{actor} a setat imaginea conversației", + "You set the conversation picture" : "Ați setat imaginea conversației", + "{actor} ended the poll {poll}" : "{actor} a încheiat votul {poll}", + "You ended the poll {poll}" : "Ați încheiat votul {poll}", + "{actor} started the video recording" : "{actor} a pornit înregistrarea video", + "You started the video recording" : "Ați pornit înregistrarea video", + "{actor} stopped the video recording" : "{actor} a oprit înregistrarea video", + "You stopped the video recording" : "Ați oprit înregistrarea video", + "{actor} started the audio recording" : "{actor} a pornit înregistrarea audio", + "You started the audio recording" : "Ați pornit înregistrarea audio", + "{actor} stopped the audio recording" : "{actor} a oprit înregistrarea audio", + "You stopped the audio recording" : "Ați oprit înregistrarea audio", + "The recording failed" : "Înregistrarea a eșuat", + "Someone voted on the poll {poll}" : "A votat cineva în {poll}", + "Message deleted by author" : "Mesaj șters de autor", + "Message deleted by {actor}" : "Mesaj șters de {actor}", + "Message deleted by you" : "Ați șters mesajul", + "Deleted user" : "Utilizator șters", + "Unknown number" : "Număr necunoscut", + "Administration" : "Administrare", + "System" : "Sistem", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} a închis apelul cu {user1} (Durată {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} a închis apelul cu {user1} și {user2} (Durată {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2} și {user3} (Durată {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2}, {user3} și {user4} (Durată {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2}, {user3}, {user4} și {user5} (Durată {duration})", + "Message of {user} in {conversation}" : "Mesaj al {user} în {conversation}", + "Message of {user}" : "Mesaj al {user}", + "Message of a deleted user in {conversation}" : "Mesaj al unui utilizator șters în {conversation}", + "Talk conversations" : "Conversații", + "Talk to %s" : "Conversați cu %s", + "An error occurred. Please contact your administrator." : "A apărut o eroare. Contactați administratorul.", + "File not found" : "Fișierul nu a fost găsit", + "File is not shared, or shared but not with the user" : "Fișierul nu este partajat sau nu este partajat cu utilizatorul", + "No image file provided" : "Nu s-a furnizat un fișier de imagine", + "File is too big" : "Fișierul este prea mare", + "Invalid file provided" : "Numele fișierului pe care l-ai oferit este invalid", + "Invalid image" : "Imagine invalidă", + "Unknown filetype" : "Tip fișier necunoscut", + "Talk mentions" : "Menționări", + "Say hi to your friends and colleagues!" : "Spuneți bună prietenilor și colegilor!", + "No unread mentions" : "Nicio menționare necitită", + "Call in progress" : "Videoconferință în curs", + "You were mentioned" : "Ați fost menționat", + "Write to conversation" : "Postați în conversație", + "Conversation invitation" : "Invitație în conversație", + "Description" : "Descriere", + "Meeting ID" : "ID întâlnire", + "Meeting" : "Videoconferință", + "Password request: %s" : "Solicitare parolă: %s", + "Private conversation" : "Conversație privată", + "Deleted user (%s)" : "Utilizator (%s) șters", + "Share to chat" : "Partajați în chat", + "Dismiss notification" : "Elimină notificarea", + "Call recording now available" : "Înregistrarea este acum disponibilă", + "Transcript now available" : "Transcrierea este acum disponibilă", + "Accept" : "Accept", + "Decline" : "Refuză", + "New message" : "Mesaj nou", + "Reminder" : "Memento", + "Notification" : "Notificări", + "{user} reacted with {reaction}" : "{user} a reacționat cu {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a reacționat cu {reaction} în {call}", + "{user} in {call}" : "{user} în {call}", + "{user} sent you a private message" : "{user} v-a trimis un mesaj privat", + "{user} sent a message in conversation {call}" : "{user} a trimis un mesaj în conversația {call}", + "{user} replied to your private message" : "{user} v-a răspuns la mesajul privat", + "{user} replied to your message in conversation {call}" : "{user} v-a răspuns la mesajul din conversația {call}", + "Reminder: You in private conversation {call}" : "Memento: Sunteți în conversația privată {call}", + "Reminder: {user} in private conversation" : "Memento: {user} în conversație privată", + "Reminder: You in conversation {call}" : "Memento: Sunteți în conversația privată {call}", + "Reminder: {user} in conversation {call}" : "Memento: {user} în conversația privată {call}", + "{user} reacted with {reaction} to your private message" : "{user} a reacționat cu {reaction} la mesajul privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a reacționat cu {reaction} la mesajul din conversația {call}", + "{user} mentioned you in a private conversation" : "{user} v-a menționat într-o conversație privată", + "{user} mentioned group {group} in conversation {call}" : "{user} a menționat grupul {group} în conversația {call}", + "{user} mentioned everyone in conversation {call}" : "{user} i-a menționat pe toți în conversația {call}", + "{user} mentioned you in conversation {call}" : "{user} v-a menționat în conversația {call}", + "View message" : "Vedeți mesajul", + "View chat" : "Vedeți chat", + "{user} invited you to a group conversation: {call}" : "{user} v-a invitat la o conversație de grup: {call}", + "Join call" : "Participați la videoconferință", + "Answer call" : "Răspundeți apelului", + "{user} would like to talk with you" : "{user} ar dori să vorbiți", + "Call back" : "Apelează înapoi", + "You missed a call from {user}" : "Ați pierdut un apel de la {user}", + "A group call has started in {call}" : "A început un apel de grup în {call}", + "You missed a group call in {call}" : "Ați pierdut un apel de grup în {call}", + "{email} is requesting the password to access {file}" : "{email} solicită parola pentru a accesa {file}", + "{email} tried to request the password to access {file}" : "{email} a încercat să solicite parola pentru a accesa {file}", + "Someone is requesting the password to access {file}" : "Cineva solicită parola pentru a accesa {file}", + "Someone tried to request the password to access {file}" : "Cineva a încercat să solicite parola pentru a accesa {file}", + "Open settings" : "Deschide setările", + "error" : "eroare", + "Contact via Talk" : "Contactați via Talk", + "Open Talk" : "Deschideți Talk", + "Default" : "Implicit", + "Presentation" : "Prezentare", + "Conversations" : "Conversații", + "Messages in current conversation" : "Mesajele din conversația curentă", + "Messages" : "Mesaje", + "Messages in other conversations" : "Mesaje din alte conversații", + "Avatar image is not square" : "Imaginea de avatar nu este pătrată", + "Other" : "Altele", + "Something unexpected happened." : "S-a întâmplat ceva neașteptat", + "The URL is invalid." : "URL-ul este greșit", + "The email address is invalid." : "Emailul este invalid", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federare", + "Invalid date, date format must be YYYY-MM-DD" : "Dată invalidă, formatul trebuie să fie AAAA-LL-ZZ", + "Conversation not found" : "Conversație negăsită", + "Leave call" : "Părăsește videoconferința", + "Navigating away from the page will leave the call in {conversation}" : "Părăsind pagina se va părăsi conversația {conversation}", + "Stay in call" : "Rămâneți în videoconferință", + "Discuss this file" : "Discutați acest fișier", + "Share this file with others to discuss it" : "Partajați acest fișier cu ceilalți pentru a-l discuta", + "Share this file" : "Partajați acest fișier", + "Join conversation" : "Alăturați-vă conversației", + "The password is wrong. Try again." : "Parola este incorectă. Încercaţi din nou.", + "Password" : "Parolă", + "Submit" : "Trimite", + "Error requesting the password." : "Eroare la solicitarea parolei", + "Request password" : "Solicitați o parolă", + "This conversation has ended" : "Această conversație s-a încheiat", + "Error occurred when joining the conversation" : "Eroare la încercarea de participare la conversație", + "Close Talk sidebar" : "Închide bara laterală Talk", + "Open Talk sidebar" : "Deschide bara laterală Talk", + "Everyone" : "Toți", + "Users and moderators" : "Utilizatori și moderatori", + "Moderators only" : "Doar moderatori", + "Disable calls" : "Dezactivează apelurile", + "Save changes" : "Salvează modificările", + "Saving …" : "Se salvează", + "Saved!" : "Salvat!", + "Limit to groups" : "Limitează pentru grupuri", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Când este selectat cel puțin un grup, doar persoanele din grupurile listate pot lua parte la conversație.", + "Description is not provided" : "Nu este furnizată o descriere", + "Locked for moderators" : "Blocat pentru moderatori", + "Enabled" : "Activat", + "Disabled" : "Dezactivați", + "State" : "Stadiu", + "Name" : "Nume", + "Last error" : "Ultima eroare", + "Total errors count" : "Total erori", + "Beta" : "Beta", + "Permissions" : "Permisiuni", + "All messages" : "Toate mesajele", + "Off" : "Oprit", + "Enable encryption" : "Activează criptarea", + "Pending" : "În așteptare", + "Error" : "Eroare", + "Blocked" : "Blocat", + "Active" : "Activ", + "Never" : "Niciodată", + "Language" : "Limba", + "Country" : "Țară", + "Status" : "Stare", + "Created at" : "Creat la", + "Yes" : "Da", + "No" : "Nu", + "Downloading …" : "Se descarcă ...", + "Failed" : "Eșuat", + "OK" : "OK", + "Assignment method" : "Metoda de atribuire", + "Automatically assign participants" : "Atribuie automat participanții", + "Manually assign participants" : "Atribuie participanții manual", + "Allow participants to choose" : "Permite participanților să aleagă", + "Confirm" : "Confirmă", + "Reset" : "Resetare", + "Cancel" : "Anulare", + "Unassigned participants" : "Participanți neasociați", + "Back" : "Înapoi", + "Assign" : "Atribuie", + "Add participant \"{user}\"" : "Adaugă participant \"{user}\"", + "Now" : "Acum", + "From" : "De la", + "To" : "Către", + "Calendar" : "Calendar", + "Attendees" : "Participanți", + "Save" : "Salvează", + "Search participants" : "Caută participanți", + "No results" : "Niciun rezultat", + "Done" : "Realizat", + "Raise hand" : "Ridică mâna", + "Raise hand (R)" : "Ridică mâna (R)", + "Lower hand" : "Coboară mâna", + "Lower hand (R)" : "Coboară mâna (R)", + "Exit full screen (F)" : "Ieșire din ecran complet (F)", + "Full screen (F)" : "Ecran complet (F)", + "Speaker view" : "Vizualizare vorbitor", + "Grid view" : "Afișare în grilă", + "This conversation is read-only" : "Această conversație este read-only", + "Reload" : "Reîncarcă", + "{nickName} raised their hand." : "{nickName} a ridicat mâna.", + "A participant raised their hand." : "Un participant a ridicat mâna.", + "Connecting …" : "Se conectează ...", + "Calling …" : "Se apelează ...", + "Waiting for {user} to join the call" : "Se așteaptă ca {user} să intre în videoconferință", + "Waiting for others to join the call …" : "Se așteaptă ca alții să intre în videoconferință ...", + "You can invite others in the participant tab of the sidebar" : "Puteți invita pe alții din tabul Participanți, în bara laterală", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puteți invita pe alții din tabul Participanți din bara laterală sau să partajați acest link pentru a invita pe altcineva!", + "Share this link to invite others!" : "Partajați acest link pentru a invita pe altcineva!", + "Copy link" : "Copiză link", + "You are not allowed to enable audio" : "Nu aveți permisiunea de a activa sunetul", + "No audio. Click to select device" : "Lipsă sunet. Click pentru selectare dispozitiv", + "Mute audio" : "Oprire sunet", + "Mute audio (M)" : "Oprire sunet (M)", + "Unmute audio" : "Reactivare sunet", + "Unmute audio (M)" : "Reactivare sunet (M)", + "None" : "Niciuna", + "Access to camera was denied" : "Accesul la cameră a fost respins", + "Error while accessing camera: It is likely in use by another program" : "Eroare la accesul la cameră: Poate este folosită de alt program", + "Error while accessing camera" : "Eroare la accesarea camerei", + "You have been muted by a moderator" : "Vi s-a tăiat sonorul de către un moderator", + "You are not allowed to enable video" : "Nu aveți permisiunea să activați video", + "No video. Click to select device" : "Lipsă video. Click pentru selectare dispozitiv", + "Disable video" : "Dezactivează video", + "Disable video (V)" : "Dezactivează video (V)", + "Enable video" : "Activează video", + "Enable video (V)" : "Activează video (V) ", + "Show presenter" : "Arată prezentatorul", + "You" : "Tu", + "Mute" : "Oprește sunetul", + "Muted" : "Sunet oprit", + "Show screen" : "Prezintă ecranul", + "Stop following" : "Oprire urmărire", + "Collapse" : "Restrânge", + "Expand" : "Extinde", + "You need to be logged in to upload files" : "Trebuie să fiți autentificat pentru a încărca fișiere", + "Drop your files to upload" : "Trageți fișierele pentru încărcare", + "Conversation messages" : "Mesajele conversației", + "Scroll to bottom" : "Derulează la sfârșit", + "Favorite" : "Favorite", + "Date:" : "Data:", + "Hide details" : "Ascunde detaliile", + "Show details" : "Arată detaliile", + "Enter a name for this conversation" : "Introduceți un nume pentru conversație", + "Edit conversation name" : "Editează numele conversației", + "Edit conversation description" : "Editează descrierea conversației", + "Enter a description for this conversation" : "Introduceți o descriere pentru conversație", + "Picture" : "Imagine", + "Disable" : "Dezactivează", + "Enable" : "Activare", + "Choose your conversation picture" : "Alegeți imaginea conversației", + "Choose" : "Alege", + "Upload conversation picture" : "Încarcă imaginea pentru conversație", + "Choose conversation picture from files" : "Selectează imaginea conversației din Fișiere", + "Remove conversation picture" : "Înlătură imaginea conversației", + "Set picture" : "Setează imaginea", + "Default permissions modified for {conversationName}" : "Permisiunile implicite modificate pentru {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nu au fost modificate permisiunile implicite pentru {conversationName}", + "All permissions" : "Toate permisiunile", + "Restricted" : "Restricționat", + "Advanced permissions" : "Permisiuni avansate", + "Edit permissions" : "Editare permisiuni", + "Conversation settings" : "Configurația conversației", + "Basic Info" : "Informații de bază", + "Personal" : "Personal", + "Moderation" : "Moderare", + "Leave conversation" : "Părăsiți conversația", + "Delete conversation" : "Șterge conversația", + "Do you really want to delete \"{displayName}\"?" : "Sigur ștergeți \"{displayName}\"?", + "Error while deleting conversation" : "Eroare la ștergerea conversației", + "Delete all chat messages" : "Șterge toate mesajele de chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Sigur ștergeți toate mesajele din \"{displayName}\"?", + "Error while clearing chat history" : "Eroare la ștergerea istoricului de chat", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Odată ce ați părăsit o conversație, pentru a vă realătura aveți nevoie de o invitație. Conversațiile deschise pot fi accesate oricând.", + "Permanently delete this conversation." : "Șterge permanent conversația", + "Delete chat messages" : "Șterge mesajele de chat", + "Permanently delete all the messages in this conversation." : "Șterge permanent toate mesajele din conversație", + "Message expiration disabled" : "Expirarea mesajului dezactivată", + "Message expiration set: {duration}" : "Expirarea mesajului la: {duration}", + "Message expiration" : "Expirare mesaj", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Mesajele de chat pot fi configurate să expire după un timp. Notă: Fișierele partajate în chat nu vor fi șterse pentru posesor, dar nu vor mai fi partajate în conversație.", + "Set message expiration" : "Setează expirarea mesajului", + "Current message expiration" : "Data expirării mesajului", + "Password protection" : "Password protection", + "Enter new password" : "Introduceți o nouă parolă", + "Save password" : "Salvează parola", + "Resend invitations" : "Trimite din nou invitațiile", + "Error occurred when opening or limiting the conversation" : "Eroare la deschiderea sau la limitarea conversației ", + "Open conversation" : "Deschide conversația", + "Start time has been updated" : "Ora de început a fost actualizată", + "Meeting start time" : "Ora de început a videoconferinței", + "Start time (optional)" : "Ora de început (opțional)", + "Lock conversation" : "Blochează conversația", + "This will also terminate the ongoing call." : "Aceasta va termina, de asemenea, videoconferința în curs.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blocați conversația pentru a împiedica postarea mesajelor sau apelurile", + "Edit" : "Editează", + "More information" : "Mai multe informații", + "Delete" : "Șterge", + "Notifications" : "Notificări", + "Create a new conversation" : "Creează o nouă conversație", + "Unread mentions" : "Menționări necitite", + "Create conversation" : "Creați o conversație", + "Enter your name" : "Introduceți numele", + "Submit name and join" : "Transmite numele și participați", + "Log in" : "Autentificare", + "Search participants or phone numbers" : "Căutare participanți sau numere de telefon", + "Creating the conversation …" : "Se creează conversația ...", + "Mark as read" : "Marchează ca citit", + "Mark as unread" : "Marchează ca necitit", + "Remove from favorites" : "Șterge din favorite", + "Add to favorites" : "Adăugați la favorite", + "Conversation actions" : "Acțiuni conversație", + "Unread" : "Necitit", + "Alphabetically" : "Alfabetic", + "No matches found" : "Nicio potrivire", + "No conversations found" : "Nu sunt conversații", + "You have no unread mentions." : "Nu aveți menționări necitite.", + "You have no unread messages." : "Nu aveți mesaje necitite.", + "Conversation list" : "Lista de conversații", + "Clear filters" : "Șterge filtrele", + "New personal note" : "Notă personală nouă", + "Clear filter" : "Șterge filtrul", + "Users" : "Utilizatori", + "Groups" : "Grupuri", + "Other sources" : "Alte surse", + "Open conversations" : "Conversații deschise", + "No search results" : "Căutarea nu are rezultate", + "Users and groups" : "Utilizatori și grupuri", + "The meeting will start soon" : "Întâlnirea va începe în curând", + "Devices" : "Dispozitive", + "Calls are not supported in your browser" : "Apelurile video nu sunt suportate de browser", + "Access to microphone was denied" : "Accesul la microfon a fost respins", + "Error while accessing microphone" : "Eroare la accesarea microfonului", + "Invalid path selected" : "Calea selectată este invalidă", + "Blur" : "Blurează", + "Upload" : "Încărcare", + "Files" : "Fișiere", + "24 hours" : "24 de ore", + "Clear reminder – {timeLocale}" : "Șterge memento – {timeLocale}", + "Reply" : "Răspunde", + "More actions" : "Mai multe acțiuni", + "Set reminder" : "Setează memo", + "Edit message" : "Editare mesaj", + "Translate" : "Tradu", + "Set custom reminder" : "Setează memento particular", + "Dismiss" : "Elimină", + "Send now" : "Trimite acum", + "Message sent" : "Mesajul a fost transmis", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} în {board}", + "No messages" : "Niciun mesaj", + "Cancel search" : "Renunță la căutare", + "All set, the conversation \"{conversationName}\" was created." : "Totul a fost configurat, conversația \"{conversationName}\" a fost creată.", + "Create a new group conversation" : "Creați o nouă conversație de grup", + "Add participants" : "Adăugați participanți", + "Conversation visibility" : "Vizibilitatea conversației", + "Enter password" : "Introduceți parola", + "Joining conversation …" : "Alăturare la conversație ...", + "File to share" : "Fișier de partajat", + "Send later" : "Trimite mai târziu", + "Cancel editing" : "Anulează editarea", + "Share from Files" : "Partajează din Fișiere", + "Upload from device" : "Încarcă din dispozitiv", + "New file" : "Fișier nou", + "Blank" : "Gol", + "Send" : "Trimite", + "Question" : "Întrebare", + "Settings" : "Setări", + "Results" : "Rezultate", + "Settings for participant \"{user}\"" : "Setări pentru participant \"{user}\"", + "guest" : "invitat", + "Ringing …" : "Apel …", + "Raised their hand" : "Au ridicat mâna", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Textul trebuie să fie mai scurt sau egal cu {maxLength} caractere. Textul curent are {charactersCount} caractere.", + "Remove group and members" : "Elimină grup și membri", + "Remove participant" : "Elimină participant", + "Notification was sent to {displayName}" : "Notificarea a fost trimisă către {displayName}", + "Could not send notification to {displayName}" : "Nu a fost trimisă notificarea către {displayName}", + "Permissions granted to {displayName}" : "Permisiunile au fost acordate {displayName}", + "Could not modify permissions for {displayName}" : "Nu au fost modificate permisiunile pentrur {displayName}", + "Permissions removed for {displayName}" : "Au fost eliminate permisiunile pentru {displayName}", + "Permissions set to default for {displayName}" : "Au fost aplicate permisiunile implicite pentru {displayName}", + "Demote from moderator" : "Depromovează de la moderator", + "Promote to moderator" : "Promovează la moderator", + "Resend invitation" : "Retransmite invitația", + "Send call notification" : "Trimite notificare de apel", + "Grant all permissions" : "Acordă toate permisiunile", + "Remove all permissions" : "Elimină toate permisiunile", + "Remove" : "Elimină", + "Permissions modified for {displayName}" : "Au fost modificate permisiunile pentru {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Adaugă utilizatori", + "Add groups" : "Adaugă grupuri", + "Add other sources" : "Adaugă alte surse", + "Add emails" : "Adaugă emailuri", + "Integrations" : "Integrări", + "Searching …" : "Căutare ...", + "Search for more users" : "Căutare mai mulți utilizatori", + "Search or add participants" : "Căutare sau adăugare participanți", + "Invitation was sent to {actorId}" : "Invitația a fost trimisă către {actorId}", + "An error occurred while adding the participants" : "Eroare la adăugarea participanților", + "Participants" : "Participanți", + "Participants ({count})" : "Participanți ({count})", + "Open chat" : "Dechide chat", + "You have new unread messages in the chat." : "Aveți mesaje necitite în chat", + "You have been mentioned in the chat." : "Ați fost menționat în chat", + "Details" : "Detalii", + "Shared items" : "Elemente partajate", + "No results found" : "Nu s-a găsit nimic", + "Load more results" : "Încarcă mai multe rezultate", + "Projects" : "Proiecte", + "No shared items" : "Nicio partajare", + "Link to a conversation" : "Link la conversație", + "No open conversations found" : "Nu au fost găsite conversații deschise", + "Either there are no open conversations or you joined all of them." : "Nu sunt conversații deschise sau participați la toate", + "Check spelling or use complete words." : "Verificați ortografia sau folosiți cuvinte întregi", + "Search conversations or users" : "Căutare conversații sau utilizatori", + "Select conversation" : "Selectare conversație", + "Number length is not valid" : "Lungime număr incorectă", + "Phone numbers" : "Numere de telefon", + "Display name: {name}" : "Numele afișat: {name}", + "Save name" : "Salvează numele", + "Error while saving sounds setting" : "Eroare la salvarea setărilor de sunet", + "Play sounds when participants join or leave a call" : "Avertizează sonor când cineva se alătură sau părăsește o videoconferință", + "Notification settings" : "Setări notificări", + "Default language" : "Limba implicită", + "Select location for attachments" : "Selectați locația atașamentelor", + "Error while setting attachment folder" : "Eroare la setarea dosarului pentru atașamente", + "Error while setting read status privacy" : "Eroare la setarea confidențialității statusului de citire", + "Error while setting typing status privacy" : "Eroare la setarea confidențialității tastării", + "Privacy" : "Confidențialitate", + "Attachments folder" : "Dosarul pentru atașamente", + "Toggle full screen" : "Comută în ecran complet", + "Search" : "Caută", + "Focus the chat input" : "Focalizează inputul în chat", + "Unfocus the chat input to use shortcuts" : "Defocalizează inputul în chat pentru folosirea scurtăturilor", + "Shortcuts while in a call" : "Scurtături pentru videoconferință", + "Camera on and off" : "Activează și dezactivează camera", + "Microphone on and off" : "Activează și dezactivează microfonul", + "Raise or lower hand" : "Ridicare sau coborâre mână", + "Push to talk or push to mute" : "Apăsați pentru a vorbi sau pentru a suprima microfonul", + "Start call silently" : "Pornește videoconferința fără sunet", + "Start call" : "Pornește videoconferința", + "End call" : "Închidere videoconferință", + "You will be able to join the call only after a moderator starts it." : "Veți putea să participați după ce videoconferința va fi pornită de un moderator", + "End call for everyone" : "Închide videoconferința pentru toți", + "The call has been running for one hour." : "Videoconferința durează de o oră", + "Send a reaction" : "Trimite o reacție", + "React with {reaction}" : "Reacționează cu {reaction}", + "You are not allowed to enable screensharing" : "Nu aveți permisiunea de partajare a ecranului", + "No screensharing" : "Nicio partajare de ecran", + "Screensharing options" : "Opțiuni pentru partajarea ecranului", + "Enable screensharing" : "Activează partajarea ecranului", + "Bad sent video and screen quality." : "Video transmis corupt și calitate proastă a imaginii.", + "Bad sent screen quality." : "Calitate proastă a imaginii.", + "Bad sent video quality." : "Calitate proastă video.", + "Bad sent audio, video and screen quality." : "Calitate proastă audio și video.", + "Bad sent audio and screen quality." : "Calitate proastă audio și imagine.", + "Bad sent audio and video quality." : "Calitate proastă audio și video.", + "Bad sent audio quality." : "Calitate audio proastă.", + "Disable background blur" : "Dezactivează blurarea fundalului", + "Disable screenshare" : "Dezactivează partajarea ecranului", + "Screen sharing is not supported by your browser." : "Partajarea ecranului nu e posibilă în acest browser.", + "An error occurred while starting screensharing." : "Eroare la partajarea ecranului.", + "Show your screen" : "Prezentați ecranul", + "Stop screensharing" : "Oprește partajarea ecranului", + "Mute others" : "Închide microfonul celorlalți", + "Remove participant {name}" : "Elimină participantul {name}", + "Keep" : "Păstrare", + "Select a region" : "Selectează o regiune", + "Search …" : "Caută ...", + "Message without mention" : "Mesaj fără mențiuni", + "Mention myself" : "Mă menționez", + "The conversation does not exist" : "Conversația nu există", + "Join a conversation or start a new one!" : "Particiăați la o conversație sau creați una nouă!", + "Duplicate session" : "Sesiune duplicat", + "Join a conversation or start a new one" : "Participați la o conversație sau începeți una nouă", + "Talk conversation" : "Conversație Talk", + "User" : "Utilizator", + "Login" : "Autentificare", + "Nickname" : "Pseudonim", + "Client ID" : "ID client", + "Media" : "Media", + "Polls" : "Voturi", + "Deck cards" : "Carduri Deck", + "Voice messages" : "Mesaje vocale", + "Locations" : "Locații", + "Audio" : "Audio", + "Show all media" : "Arată toată media", + "Show all files" : "Arată toate fișierele", + "Show all polls" : "Arată toate voturile", + "Show all deck cards" : "Arată toate cardurile Deck", + "Show all voice messages" : "Arată toate mesajele vocale", + "Show all locations" : "Arată toate locațiile", + "Show all audio" : "Arată audio", + "Show all other" : "Arată celelalte", + "Group" : "Grup", + "Team" : "Echipă", + "You reconnected to the call" : "V-ați reconectat", + "{actor} reconnected to the call" : "{actor} s-a reconectat", + "You added {user0} and {user1}" : "Ați adăugat pe {user0} și {user1}", + "An administrator added you and {user0}" : "V-a adăugat un administrator, și pe {user0}", + "{actor} added you and {user0}" : "{actor} v-a adăugat, și pe {user0}", + "An administrator added {user0} and {user1}" : "Un administrator a adăugat pe {user0} și pe {user1}", + "{actor} added {user0} and {user1}" : "{actor} a adăugat pe {user0} și pe {user1}", + "You: {lastMessage}" : "Tu: {lastMessage}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Încercați să participați la o conversație având o sesiune activă în altă fereastră sau dispozitiv. Acest lucru nu este suportat în prezent în Nextcloud Talk. Ce doriți să faceți?", + "Leave this page" : "Părăsește pagina", + "Join here" : "Alăturare aici", + "Deck card has been posted to {conversation}" : "Cardul Deck a fost postat la conversația {conversation}", + "An error occurred while posting deck card to conversation" : "Eroare la postarea cardului Deck în conversație", + "Post to a conversation" : "Postare într-o conversație", + "Post to conversation" : "Postare în conversație", + "Share to a conversation" : "Partajare la o conversație", + "Share to conversation" : "Partajare la conversație", + "Error while clearing conversation history" : "Eroare la ștergerea istoricului conversației", + "Conversation password has been saved" : "Parola conversației a fost salvată", + "Conversation password has been removed" : "Parola conversație a fost ștearsă", + "Conversation picture set" : "Imaginea conversației a fost configurată", + "Conversation picture deleted" : "Imaginea conversației a fost ștearsă", + "Could not post message: {errorMessage}" : "Nu s-a putut posta mesajul: {errorMessage}", + "An error occurred while fetching the participants" : "Eroare la preluarea listei de participanți", + "Could not send invitation to {actorId}" : "Nu a fost trimisă invitația către {actorId}", + "Invitations sent" : "Invitațiile au fost trimise", + "An error occurred while requesting assistance" : "Eroare la solicitarea de asistență", + "An error occurred while resetting the request for assistance" : "Eroare la resetarea solicitării de asistență", + "An error occurred while submitting your vote" : "Eroare la transmiterea votului", + "An error occurred while ending the poll" : "Eroare la încheierea votării", + "Failed to add reaction" : "Eroare la adăugarea reacției", + "Failed to remove reaction" : "Eroare la ștergerea reacției", + "Error while uploading file \"{fileName}\"" : "Eroare la încărcarea fișierului \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Spațiu insuficient pentru încărcarea fișierului \"{fileName}\"", + "Error while sharing file" : "Eroare la partajarea fișierului", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Browserul folosit nu este compatibil cu Nextcloud Talk. Folosiți ultima versiune a Mozilla Firefox, Microsoft Edge, Google Chrome sau Apple Safari.", + "Later today – {timeLocale}" : "Azi, mai târziu – {timeLocale}", + "Tomorrow – {timeLocale}" : "Mâine – {timeLocale}", + "This weekend – {timeLocale}" : "În acest weekend – {timeLocale}", + "Next week – {timeLocale}" : "Săptămâna viitoare– {timeLocale}", + "Message link copied to clipboard" : "Linkul mesajului a fost copiat", + "Conversation link copied to clipboard" : "Linkul conversației a fost copiat", + "The link could not be copied" : "Linkul nu s-a putut copia", + "Please reload the page." : "Te rugăm să reîncarci pagina.", + "Do not disturb" : "Nu deranja", + "Away" : "Plecat", + "Microphone {number}" : "Microfon {number}", + "Speaker {number}" : "Vorbitor {number}", + "Access to microphone & camera was denied" : "Accesul la microfon și cameră a fost refuzat", + "Android app" : "Aplicație Android", + "iOS app" : "Aplicație iOS", + "__language_name__" : "Română", + "Tasks" : "Sarcini", + "Notes" : "Notițe", + "Set reminder for later today" : "Setează memo pentru azi, mai târziu", + "Set reminder for tomorrow" : "Setează memo pentru mâine", + "Set reminder for this weekend" : "Setează memo pentru acest weekend", + "Set reminder for next week" : "Setează memo pentru săptămâna viitoare", + "Your privacy setting has been saved" : "Setările de confidențialitate au fost salvate", + "Failed to save sounds setting" : "Eroare la salvarea setărilor de sunet", + "Sounds setting saved" : "Setările de sunet au fost salvate" +}, +"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));"); diff --git a/l10n/ro.json b/l10n/ro.json new file mode 100644 index 0000000..045a179 --- /dev/null +++ b/l10n/ro.json @@ -0,0 +1,881 @@ +{ "translations": { + "a conversation" : "o conversație", + "(Duration %s)" : "(Durata %s)", + "You attended a call with {user1}" : "Ați participat la un apel cu {user1}", + "_%n guest_::_%n guests_" : ["%n oaspete","%n oaspeți","%n oaspeți"], + "You attended a call with {user1} and {user2}" : "Ați participat la un apel cu {user1} și {user2}.", + "You attended a call with {user1}, {user2} and {user3}" : "Ați participat la un apel cu {user1}, {user2} și {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ați participat la un apel cu {user1}, {user2}, {user3} și {user4}.", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ați participat la un apel cu {user1}, {user2}, {user3}, {user4} și {user5}", + "_%n other_::_%n others_" : ["%n altul","& alții","& alții"], + "{actor} invited you to {call}" : "{actor} te-a invitat la {call}", + "You were invited to a conversation or had a call" : "Ați fost invitat la o conversație sau ați primit un apel", + "Other activities" : "Alte activități", + "Talk" : "Discuție", + "Guest" : "Invitat", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Bine ați venit la Nextcloud Talk!\nÎn această conversație veți fi informat despre noile caracteristici disponibile în Nextcloud Talk.", + "## New in Talk %s" : "## Nou în Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge și Safari pot fi folosite acum pentru a participa la apeluri audio și video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Conversațiile individuale sunt acum persistente și nu mai pot fi transformate din greșeală în conversații de grup. De asemenea, atunci când unul dintre participanți părăsește conversația, aceasta nu mai este ștearsă automat. Numai dacă ambii participanți pleacă, conversația este ștearsă de pe server", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Acum puteți notifica toți participanții prin postarea \"@all\" în chat.", + "- With the \"arrow-up\" key you can repost your last message" : "- Cu ajutorul tastei \"săgeată în sus\" puteți reposta ultimul mesaj.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk poate avea acum comenzi, trimiteți \"/help\" ca mesaj de chat pentru a vedea dacă administratorul dvs. a configurat câteva", + "- With projects you can create quick links between conversations, files and other items" : "- Cu ajutorul proiectelor puteți crea legături rapide între conversații, fișiere și alte elemente.", + "- You can now mention guests in the chat" : "- Acum puteți menționa oaspeții în chat", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Conversațiile pot avea acum un lobby. Acest lucru va permite moderatorilor să se alăture conversației și să sune deja pentru a pregăti întâlnirea, în timp ce utilizatorii și invitații trebuie să aștepte", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Acum puteți răspunde direct la mesaje, oferindu-le celorlalți utilizatori mai mult context despre ce este vorba în mesajul dvs.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Căutarea conversațiilor și a participanților va filtra acum și conversațiile existente, facilitând astfel găsirea conversațiilor anterioare", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Acum puteți adăuga grupuri de utilizatori personalizați la conversații atunci când este instalată aplicația cercuri", + "- Check out the new grid and call view" : "- Consultați noua grilă și vizualizarea apelurilor", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Acum puteți încărca și glisa fișiere direct de pe dispozitiv în chat.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Fişierele partajate se vor deschide direct in chat cu aplicaţia de vizualizare", + "Reaction deleted by author" : "Reacție ștearsă de autor", + "{actor} created the conversation" : "{actor} a creat conversația", + "You created the conversation" : "Ați creat această conversație", + "System created the conversation" : "Conversație creată de sistem", + "An administrator created the conversation" : "Conversație creată de administrator", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} a redenumit conversația din \"%1$s\" în \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ați redenumit conversația din \"%1$s\" în \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Un administrator a redenumit conversația din \"%1$s\" în \"%2$s\"", + "{actor} set the description" : "{actor} a configurat descrierea", + "You set the description" : "Ați configurat descrierea", + "An administrator set the description" : "Un administrator a configurat descrierea", + "{actor} removed the description" : "{actor} a șters descrierea", + "You removed the description" : "Ați șters descrierea", + "An administrator removed the description" : "Un administrator a șters descrierea", + "You started a call" : "Ați inițiat o videoconferință", + "{actor} started a call" : "{actor} a inițiat o videoconferință", + "{actor} joined the call" : "{actor} s-a alăturat videoconferinței", + "You joined the call" : "V-ați alăturat la videoconferință", + "{actor} left the call" : "{actor} a părăsit videoconferința", + "You left the call" : "Ați părăsit videoconferința", + "{actor} unlocked the conversation" : "{actor} a deblocat conversația", + "You unlocked the conversation" : "Ați deblocat conversația", + "An administrator unlocked the conversation" : "Un administrator a deblocat conversația", + "{actor} locked the conversation" : "{actor} a blocat conversația", + "You locked the conversation" : "Ați blocat conversația", + "An administrator locked the conversation" : "Un administrator a blocat conversația", + "{actor} limited the conversation to the current participants" : "{actor} a limitat conversația la participanții actuali", + "You limited the conversation to the current participants" : "Ați limitat conversația la participanții actuali", + "An administrator limited the conversation to the current participants" : "Un administrator a limitat conversația la participanții actuali", + "The conversation is now open to everyone" : "Conversația este deschisă acum oricui", + "{actor} set a password" : "{actor} a configurat o parolă", + "You set a password" : "Ați pus o parolă", + "An administrator set a password" : "Un administrator a pus o parolă", + "{actor} added {user}" : "{actor} a adăugat pe {user}", + "You joined the conversation" : "V-ați alăturat conversației", + "{actor} joined the conversation" : "{actor} s-a alăturat conversației", + "You added {user}" : "Ați adăugat pe {user}", + "{actor} added you" : "{actor} v-a adăugat", + "An administrator added you" : "V-a adăugat un administrator", + "An administrator added {user}" : "Un administrator a adăugat pe {user}", + "You left the conversation" : "Ați părăsit conversația", + "{actor} left the conversation" : "{actor} a părăsit conversația", + "{actor} removed {user}" : "{actor} a eliminat pe {user}", + "You removed {user}" : "Ați eliminat pe {user}", + "{actor} removed you" : "{actor} v-a eliminat", + "An administrator removed you" : "V-a eliminat un administrator", + "An administrator removed {user}" : "Un administrator a eliminat pe {user}", + "{actor} added group {group}" : "{actor} a adăugat grupul {group}", + "You added group {group}" : "Ați adăugat grupul {group}", + "An administrator added group {group}" : "Un administrator a adăugat grupul {group}", + "{actor} removed group {group}" : "{actor} a eliminat grupul {group}", + "You removed group {group}" : "Ați eliminat grupul {group}", + "An administrator removed group {group}" : "Un administrator a eliminat grupul {group}", + "{actor} deleted a message" : "{actor} a șters un mesaj", + "You deleted a message" : "Ați șters un mesaj", + "{actor} deleted a reaction" : "{actor} a șters o reacție", + "You deleted a reaction" : "Ați șters o reacție", + "{actor} disabled message expiration" : "{actor} a eliminat timpul de expirare a mesajului", + "You disabled message expiration" : "Ați eliminat timpul de expirare al mesajului", + "{actor} cleared the history of the conversation" : "{actor} a șters istoricul conversației", + "You cleared the history of the conversation" : "Ați șters istoricul conversației", + "{actor} set the conversation picture" : "{actor} a setat imaginea conversației", + "You set the conversation picture" : "Ați setat imaginea conversației", + "{actor} ended the poll {poll}" : "{actor} a încheiat votul {poll}", + "You ended the poll {poll}" : "Ați încheiat votul {poll}", + "{actor} started the video recording" : "{actor} a pornit înregistrarea video", + "You started the video recording" : "Ați pornit înregistrarea video", + "{actor} stopped the video recording" : "{actor} a oprit înregistrarea video", + "You stopped the video recording" : "Ați oprit înregistrarea video", + "{actor} started the audio recording" : "{actor} a pornit înregistrarea audio", + "You started the audio recording" : "Ați pornit înregistrarea audio", + "{actor} stopped the audio recording" : "{actor} a oprit înregistrarea audio", + "You stopped the audio recording" : "Ați oprit înregistrarea audio", + "The recording failed" : "Înregistrarea a eșuat", + "Someone voted on the poll {poll}" : "A votat cineva în {poll}", + "Message deleted by author" : "Mesaj șters de autor", + "Message deleted by {actor}" : "Mesaj șters de {actor}", + "Message deleted by you" : "Ați șters mesajul", + "Deleted user" : "Utilizator șters", + "Unknown number" : "Număr necunoscut", + "Administration" : "Administrare", + "System" : "Sistem", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} a închis apelul cu {user1} (Durată {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} a închis apelul cu {user1} și {user2} (Durată {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2} și {user3} (Durată {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2}, {user3} și {user4} (Durată {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} a încheiat apelul cu {user1}, {user2}, {user3}, {user4} și {user5} (Durată {duration})", + "Message of {user} in {conversation}" : "Mesaj al {user} în {conversation}", + "Message of {user}" : "Mesaj al {user}", + "Message of a deleted user in {conversation}" : "Mesaj al unui utilizator șters în {conversation}", + "Talk conversations" : "Conversații", + "Talk to %s" : "Conversați cu %s", + "An error occurred. Please contact your administrator." : "A apărut o eroare. Contactați administratorul.", + "File not found" : "Fișierul nu a fost găsit", + "File is not shared, or shared but not with the user" : "Fișierul nu este partajat sau nu este partajat cu utilizatorul", + "No image file provided" : "Nu s-a furnizat un fișier de imagine", + "File is too big" : "Fișierul este prea mare", + "Invalid file provided" : "Numele fișierului pe care l-ai oferit este invalid", + "Invalid image" : "Imagine invalidă", + "Unknown filetype" : "Tip fișier necunoscut", + "Talk mentions" : "Menționări", + "Say hi to your friends and colleagues!" : "Spuneți bună prietenilor și colegilor!", + "No unread mentions" : "Nicio menționare necitită", + "Call in progress" : "Videoconferință în curs", + "You were mentioned" : "Ați fost menționat", + "Write to conversation" : "Postați în conversație", + "Conversation invitation" : "Invitație în conversație", + "Description" : "Descriere", + "Meeting ID" : "ID întâlnire", + "Meeting" : "Videoconferință", + "Password request: %s" : "Solicitare parolă: %s", + "Private conversation" : "Conversație privată", + "Deleted user (%s)" : "Utilizator (%s) șters", + "Share to chat" : "Partajați în chat", + "Dismiss notification" : "Elimină notificarea", + "Call recording now available" : "Înregistrarea este acum disponibilă", + "Transcript now available" : "Transcrierea este acum disponibilă", + "Accept" : "Accept", + "Decline" : "Refuză", + "New message" : "Mesaj nou", + "Reminder" : "Memento", + "Notification" : "Notificări", + "{user} reacted with {reaction}" : "{user} a reacționat cu {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} a reacționat cu {reaction} în {call}", + "{user} in {call}" : "{user} în {call}", + "{user} sent you a private message" : "{user} v-a trimis un mesaj privat", + "{user} sent a message in conversation {call}" : "{user} a trimis un mesaj în conversația {call}", + "{user} replied to your private message" : "{user} v-a răspuns la mesajul privat", + "{user} replied to your message in conversation {call}" : "{user} v-a răspuns la mesajul din conversația {call}", + "Reminder: You in private conversation {call}" : "Memento: Sunteți în conversația privată {call}", + "Reminder: {user} in private conversation" : "Memento: {user} în conversație privată", + "Reminder: You in conversation {call}" : "Memento: Sunteți în conversația privată {call}", + "Reminder: {user} in conversation {call}" : "Memento: {user} în conversația privată {call}", + "{user} reacted with {reaction} to your private message" : "{user} a reacționat cu {reaction} la mesajul privat", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} a reacționat cu {reaction} la mesajul din conversația {call}", + "{user} mentioned you in a private conversation" : "{user} v-a menționat într-o conversație privată", + "{user} mentioned group {group} in conversation {call}" : "{user} a menționat grupul {group} în conversația {call}", + "{user} mentioned everyone in conversation {call}" : "{user} i-a menționat pe toți în conversația {call}", + "{user} mentioned you in conversation {call}" : "{user} v-a menționat în conversația {call}", + "View message" : "Vedeți mesajul", + "View chat" : "Vedeți chat", + "{user} invited you to a group conversation: {call}" : "{user} v-a invitat la o conversație de grup: {call}", + "Join call" : "Participați la videoconferință", + "Answer call" : "Răspundeți apelului", + "{user} would like to talk with you" : "{user} ar dori să vorbiți", + "Call back" : "Apelează înapoi", + "You missed a call from {user}" : "Ați pierdut un apel de la {user}", + "A group call has started in {call}" : "A început un apel de grup în {call}", + "You missed a group call in {call}" : "Ați pierdut un apel de grup în {call}", + "{email} is requesting the password to access {file}" : "{email} solicită parola pentru a accesa {file}", + "{email} tried to request the password to access {file}" : "{email} a încercat să solicite parola pentru a accesa {file}", + "Someone is requesting the password to access {file}" : "Cineva solicită parola pentru a accesa {file}", + "Someone tried to request the password to access {file}" : "Cineva a încercat să solicite parola pentru a accesa {file}", + "Open settings" : "Deschide setările", + "error" : "eroare", + "Contact via Talk" : "Contactați via Talk", + "Open Talk" : "Deschideți Talk", + "Default" : "Implicit", + "Presentation" : "Prezentare", + "Conversations" : "Conversații", + "Messages in current conversation" : "Mesajele din conversația curentă", + "Messages" : "Mesaje", + "Messages in other conversations" : "Mesaje din alte conversații", + "Avatar image is not square" : "Imaginea de avatar nu este pătrată", + "Other" : "Altele", + "Something unexpected happened." : "S-a întâmplat ceva neașteptat", + "The URL is invalid." : "URL-ul este greșit", + "The email address is invalid." : "Emailul este invalid", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgium", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Switzerland", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Island", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Germany", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominican Republic", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Egypt", + "Western Sahara" : "Western Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Spain", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Faroe Islands" : "Faroe Islands", + "France" : "France", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Greece", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island and McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iceland" : "Iceland", + "Italy" : "Italy", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Marshall Islands", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Netherlands", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Solomon Islands", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Turks and Caicos Islands" : "Turks and Caicos Islands", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turkey", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "South Africa", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federare", + "Invalid date, date format must be YYYY-MM-DD" : "Dată invalidă, formatul trebuie să fie AAAA-LL-ZZ", + "Conversation not found" : "Conversație negăsită", + "Leave call" : "Părăsește videoconferința", + "Navigating away from the page will leave the call in {conversation}" : "Părăsind pagina se va părăsi conversația {conversation}", + "Stay in call" : "Rămâneți în videoconferință", + "Discuss this file" : "Discutați acest fișier", + "Share this file with others to discuss it" : "Partajați acest fișier cu ceilalți pentru a-l discuta", + "Share this file" : "Partajați acest fișier", + "Join conversation" : "Alăturați-vă conversației", + "The password is wrong. Try again." : "Parola este incorectă. Încercaţi din nou.", + "Password" : "Parolă", + "Submit" : "Trimite", + "Error requesting the password." : "Eroare la solicitarea parolei", + "Request password" : "Solicitați o parolă", + "This conversation has ended" : "Această conversație s-a încheiat", + "Error occurred when joining the conversation" : "Eroare la încercarea de participare la conversație", + "Close Talk sidebar" : "Închide bara laterală Talk", + "Open Talk sidebar" : "Deschide bara laterală Talk", + "Everyone" : "Toți", + "Users and moderators" : "Utilizatori și moderatori", + "Moderators only" : "Doar moderatori", + "Disable calls" : "Dezactivează apelurile", + "Save changes" : "Salvează modificările", + "Saving …" : "Se salvează", + "Saved!" : "Salvat!", + "Limit to groups" : "Limitează pentru grupuri", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Când este selectat cel puțin un grup, doar persoanele din grupurile listate pot lua parte la conversație.", + "Description is not provided" : "Nu este furnizată o descriere", + "Locked for moderators" : "Blocat pentru moderatori", + "Enabled" : "Activat", + "Disabled" : "Dezactivați", + "State" : "Stadiu", + "Name" : "Nume", + "Last error" : "Ultima eroare", + "Total errors count" : "Total erori", + "Beta" : "Beta", + "Permissions" : "Permisiuni", + "All messages" : "Toate mesajele", + "Off" : "Oprit", + "Enable encryption" : "Activează criptarea", + "Pending" : "În așteptare", + "Error" : "Eroare", + "Blocked" : "Blocat", + "Active" : "Activ", + "Never" : "Niciodată", + "Language" : "Limba", + "Country" : "Țară", + "Status" : "Stare", + "Created at" : "Creat la", + "Yes" : "Da", + "No" : "Nu", + "Downloading …" : "Se descarcă ...", + "Failed" : "Eșuat", + "OK" : "OK", + "Assignment method" : "Metoda de atribuire", + "Automatically assign participants" : "Atribuie automat participanții", + "Manually assign participants" : "Atribuie participanții manual", + "Allow participants to choose" : "Permite participanților să aleagă", + "Confirm" : "Confirmă", + "Reset" : "Resetare", + "Cancel" : "Anulare", + "Unassigned participants" : "Participanți neasociați", + "Back" : "Înapoi", + "Assign" : "Atribuie", + "Add participant \"{user}\"" : "Adaugă participant \"{user}\"", + "Now" : "Acum", + "From" : "De la", + "To" : "Către", + "Calendar" : "Calendar", + "Attendees" : "Participanți", + "Save" : "Salvează", + "Search participants" : "Caută participanți", + "No results" : "Niciun rezultat", + "Done" : "Realizat", + "Raise hand" : "Ridică mâna", + "Raise hand (R)" : "Ridică mâna (R)", + "Lower hand" : "Coboară mâna", + "Lower hand (R)" : "Coboară mâna (R)", + "Exit full screen (F)" : "Ieșire din ecran complet (F)", + "Full screen (F)" : "Ecran complet (F)", + "Speaker view" : "Vizualizare vorbitor", + "Grid view" : "Afișare în grilă", + "This conversation is read-only" : "Această conversație este read-only", + "Reload" : "Reîncarcă", + "{nickName} raised their hand." : "{nickName} a ridicat mâna.", + "A participant raised their hand." : "Un participant a ridicat mâna.", + "Connecting …" : "Se conectează ...", + "Calling …" : "Se apelează ...", + "Waiting for {user} to join the call" : "Se așteaptă ca {user} să intre în videoconferință", + "Waiting for others to join the call …" : "Se așteaptă ca alții să intre în videoconferință ...", + "You can invite others in the participant tab of the sidebar" : "Puteți invita pe alții din tabul Participanți, în bara laterală", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Puteți invita pe alții din tabul Participanți din bara laterală sau să partajați acest link pentru a invita pe altcineva!", + "Share this link to invite others!" : "Partajați acest link pentru a invita pe altcineva!", + "Copy link" : "Copiză link", + "You are not allowed to enable audio" : "Nu aveți permisiunea de a activa sunetul", + "No audio. Click to select device" : "Lipsă sunet. Click pentru selectare dispozitiv", + "Mute audio" : "Oprire sunet", + "Mute audio (M)" : "Oprire sunet (M)", + "Unmute audio" : "Reactivare sunet", + "Unmute audio (M)" : "Reactivare sunet (M)", + "None" : "Niciuna", + "Access to camera was denied" : "Accesul la cameră a fost respins", + "Error while accessing camera: It is likely in use by another program" : "Eroare la accesul la cameră: Poate este folosită de alt program", + "Error while accessing camera" : "Eroare la accesarea camerei", + "You have been muted by a moderator" : "Vi s-a tăiat sonorul de către un moderator", + "You are not allowed to enable video" : "Nu aveți permisiunea să activați video", + "No video. Click to select device" : "Lipsă video. Click pentru selectare dispozitiv", + "Disable video" : "Dezactivează video", + "Disable video (V)" : "Dezactivează video (V)", + "Enable video" : "Activează video", + "Enable video (V)" : "Activează video (V) ", + "Show presenter" : "Arată prezentatorul", + "You" : "Tu", + "Mute" : "Oprește sunetul", + "Muted" : "Sunet oprit", + "Show screen" : "Prezintă ecranul", + "Stop following" : "Oprire urmărire", + "Collapse" : "Restrânge", + "Expand" : "Extinde", + "You need to be logged in to upload files" : "Trebuie să fiți autentificat pentru a încărca fișiere", + "Drop your files to upload" : "Trageți fișierele pentru încărcare", + "Conversation messages" : "Mesajele conversației", + "Scroll to bottom" : "Derulează la sfârșit", + "Favorite" : "Favorite", + "Date:" : "Data:", + "Hide details" : "Ascunde detaliile", + "Show details" : "Arată detaliile", + "Enter a name for this conversation" : "Introduceți un nume pentru conversație", + "Edit conversation name" : "Editează numele conversației", + "Edit conversation description" : "Editează descrierea conversației", + "Enter a description for this conversation" : "Introduceți o descriere pentru conversație", + "Picture" : "Imagine", + "Disable" : "Dezactivează", + "Enable" : "Activare", + "Choose your conversation picture" : "Alegeți imaginea conversației", + "Choose" : "Alege", + "Upload conversation picture" : "Încarcă imaginea pentru conversație", + "Choose conversation picture from files" : "Selectează imaginea conversației din Fișiere", + "Remove conversation picture" : "Înlătură imaginea conversației", + "Set picture" : "Setează imaginea", + "Default permissions modified for {conversationName}" : "Permisiunile implicite modificate pentru {conversationName}", + "Could not modify default permissions for {conversationName}" : "Nu au fost modificate permisiunile implicite pentru {conversationName}", + "All permissions" : "Toate permisiunile", + "Restricted" : "Restricționat", + "Advanced permissions" : "Permisiuni avansate", + "Edit permissions" : "Editare permisiuni", + "Conversation settings" : "Configurația conversației", + "Basic Info" : "Informații de bază", + "Personal" : "Personal", + "Moderation" : "Moderare", + "Leave conversation" : "Părăsiți conversația", + "Delete conversation" : "Șterge conversația", + "Do you really want to delete \"{displayName}\"?" : "Sigur ștergeți \"{displayName}\"?", + "Error while deleting conversation" : "Eroare la ștergerea conversației", + "Delete all chat messages" : "Șterge toate mesajele de chat", + "Do you really want to delete all messages in \"{displayName}\"?" : "Sigur ștergeți toate mesajele din \"{displayName}\"?", + "Error while clearing chat history" : "Eroare la ștergerea istoricului de chat", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Odată ce ați părăsit o conversație, pentru a vă realătura aveți nevoie de o invitație. Conversațiile deschise pot fi accesate oricând.", + "Permanently delete this conversation." : "Șterge permanent conversația", + "Delete chat messages" : "Șterge mesajele de chat", + "Permanently delete all the messages in this conversation." : "Șterge permanent toate mesajele din conversație", + "Message expiration disabled" : "Expirarea mesajului dezactivată", + "Message expiration set: {duration}" : "Expirarea mesajului la: {duration}", + "Message expiration" : "Expirare mesaj", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Mesajele de chat pot fi configurate să expire după un timp. Notă: Fișierele partajate în chat nu vor fi șterse pentru posesor, dar nu vor mai fi partajate în conversație.", + "Set message expiration" : "Setează expirarea mesajului", + "Current message expiration" : "Data expirării mesajului", + "Password protection" : "Password protection", + "Enter new password" : "Introduceți o nouă parolă", + "Save password" : "Salvează parola", + "Resend invitations" : "Trimite din nou invitațiile", + "Error occurred when opening or limiting the conversation" : "Eroare la deschiderea sau la limitarea conversației ", + "Open conversation" : "Deschide conversația", + "Start time has been updated" : "Ora de început a fost actualizată", + "Meeting start time" : "Ora de început a videoconferinței", + "Start time (optional)" : "Ora de început (opțional)", + "Lock conversation" : "Blochează conversația", + "This will also terminate the ongoing call." : "Aceasta va termina, de asemenea, videoconferința în curs.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Blocați conversația pentru a împiedica postarea mesajelor sau apelurile", + "Edit" : "Editează", + "More information" : "Mai multe informații", + "Delete" : "Șterge", + "Notifications" : "Notificări", + "Create a new conversation" : "Creează o nouă conversație", + "Unread mentions" : "Menționări necitite", + "Create conversation" : "Creați o conversație", + "Enter your name" : "Introduceți numele", + "Submit name and join" : "Transmite numele și participați", + "Log in" : "Autentificare", + "Search participants or phone numbers" : "Căutare participanți sau numere de telefon", + "Creating the conversation …" : "Se creează conversația ...", + "Mark as read" : "Marchează ca citit", + "Mark as unread" : "Marchează ca necitit", + "Remove from favorites" : "Șterge din favorite", + "Add to favorites" : "Adăugați la favorite", + "Conversation actions" : "Acțiuni conversație", + "Unread" : "Necitit", + "Alphabetically" : "Alfabetic", + "No matches found" : "Nicio potrivire", + "No conversations found" : "Nu sunt conversații", + "You have no unread mentions." : "Nu aveți menționări necitite.", + "You have no unread messages." : "Nu aveți mesaje necitite.", + "Conversation list" : "Lista de conversații", + "Clear filters" : "Șterge filtrele", + "New personal note" : "Notă personală nouă", + "Clear filter" : "Șterge filtrul", + "Users" : "Utilizatori", + "Groups" : "Grupuri", + "Other sources" : "Alte surse", + "Open conversations" : "Conversații deschise", + "No search results" : "Căutarea nu are rezultate", + "Users and groups" : "Utilizatori și grupuri", + "The meeting will start soon" : "Întâlnirea va începe în curând", + "Devices" : "Dispozitive", + "Calls are not supported in your browser" : "Apelurile video nu sunt suportate de browser", + "Access to microphone was denied" : "Accesul la microfon a fost respins", + "Error while accessing microphone" : "Eroare la accesarea microfonului", + "Invalid path selected" : "Calea selectată este invalidă", + "Blur" : "Blurează", + "Upload" : "Încărcare", + "Files" : "Fișiere", + "24 hours" : "24 de ore", + "Clear reminder – {timeLocale}" : "Șterge memento – {timeLocale}", + "Reply" : "Răspunde", + "More actions" : "Mai multe acțiuni", + "Set reminder" : "Setează memo", + "Edit message" : "Editare mesaj", + "Translate" : "Tradu", + "Set custom reminder" : "Setează memento particular", + "Dismiss" : "Elimină", + "Send now" : "Trimite acum", + "Message sent" : "Mesajul a fost transmis", + "Contact" : "Contact", + "{stack} in {board}" : "{stack} în {board}", + "No messages" : "Niciun mesaj", + "Cancel search" : "Renunță la căutare", + "All set, the conversation \"{conversationName}\" was created." : "Totul a fost configurat, conversația \"{conversationName}\" a fost creată.", + "Create a new group conversation" : "Creați o nouă conversație de grup", + "Add participants" : "Adăugați participanți", + "Conversation visibility" : "Vizibilitatea conversației", + "Enter password" : "Introduceți parola", + "Joining conversation …" : "Alăturare la conversație ...", + "File to share" : "Fișier de partajat", + "Send later" : "Trimite mai târziu", + "Cancel editing" : "Anulează editarea", + "Share from Files" : "Partajează din Fișiere", + "Upload from device" : "Încarcă din dispozitiv", + "New file" : "Fișier nou", + "Blank" : "Gol", + "Send" : "Trimite", + "Question" : "Întrebare", + "Settings" : "Setări", + "Results" : "Rezultate", + "Settings for participant \"{user}\"" : "Setări pentru participant \"{user}\"", + "guest" : "invitat", + "Ringing …" : "Apel …", + "Raised their hand" : "Au ridicat mâna", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Textul trebuie să fie mai scurt sau egal cu {maxLength} caractere. Textul curent are {charactersCount} caractere.", + "Remove group and members" : "Elimină grup și membri", + "Remove participant" : "Elimină participant", + "Notification was sent to {displayName}" : "Notificarea a fost trimisă către {displayName}", + "Could not send notification to {displayName}" : "Nu a fost trimisă notificarea către {displayName}", + "Permissions granted to {displayName}" : "Permisiunile au fost acordate {displayName}", + "Could not modify permissions for {displayName}" : "Nu au fost modificate permisiunile pentrur {displayName}", + "Permissions removed for {displayName}" : "Au fost eliminate permisiunile pentru {displayName}", + "Permissions set to default for {displayName}" : "Au fost aplicate permisiunile implicite pentru {displayName}", + "Demote from moderator" : "Depromovează de la moderator", + "Promote to moderator" : "Promovează la moderator", + "Resend invitation" : "Retransmite invitația", + "Send call notification" : "Trimite notificare de apel", + "Grant all permissions" : "Acordă toate permisiunile", + "Remove all permissions" : "Elimină toate permisiunile", + "Remove" : "Elimină", + "Permissions modified for {displayName}" : "Au fost modificate permisiunile pentru {displayName}", + "Add users or groups" : "Add users or groups", + "Add users" : "Adaugă utilizatori", + "Add groups" : "Adaugă grupuri", + "Add other sources" : "Adaugă alte surse", + "Add emails" : "Adaugă emailuri", + "Integrations" : "Integrări", + "Searching …" : "Căutare ...", + "Search for more users" : "Căutare mai mulți utilizatori", + "Search or add participants" : "Căutare sau adăugare participanți", + "Invitation was sent to {actorId}" : "Invitația a fost trimisă către {actorId}", + "An error occurred while adding the participants" : "Eroare la adăugarea participanților", + "Participants" : "Participanți", + "Participants ({count})" : "Participanți ({count})", + "Open chat" : "Dechide chat", + "You have new unread messages in the chat." : "Aveți mesaje necitite în chat", + "You have been mentioned in the chat." : "Ați fost menționat în chat", + "Details" : "Detalii", + "Shared items" : "Elemente partajate", + "No results found" : "Nu s-a găsit nimic", + "Load more results" : "Încarcă mai multe rezultate", + "Projects" : "Proiecte", + "No shared items" : "Nicio partajare", + "Link to a conversation" : "Link la conversație", + "No open conversations found" : "Nu au fost găsite conversații deschise", + "Either there are no open conversations or you joined all of them." : "Nu sunt conversații deschise sau participați la toate", + "Check spelling or use complete words." : "Verificați ortografia sau folosiți cuvinte întregi", + "Search conversations or users" : "Căutare conversații sau utilizatori", + "Select conversation" : "Selectare conversație", + "Number length is not valid" : "Lungime număr incorectă", + "Phone numbers" : "Numere de telefon", + "Display name: {name}" : "Numele afișat: {name}", + "Save name" : "Salvează numele", + "Error while saving sounds setting" : "Eroare la salvarea setărilor de sunet", + "Play sounds when participants join or leave a call" : "Avertizează sonor când cineva se alătură sau părăsește o videoconferință", + "Notification settings" : "Setări notificări", + "Default language" : "Limba implicită", + "Select location for attachments" : "Selectați locația atașamentelor", + "Error while setting attachment folder" : "Eroare la setarea dosarului pentru atașamente", + "Error while setting read status privacy" : "Eroare la setarea confidențialității statusului de citire", + "Error while setting typing status privacy" : "Eroare la setarea confidențialității tastării", + "Privacy" : "Confidențialitate", + "Attachments folder" : "Dosarul pentru atașamente", + "Toggle full screen" : "Comută în ecran complet", + "Search" : "Caută", + "Focus the chat input" : "Focalizează inputul în chat", + "Unfocus the chat input to use shortcuts" : "Defocalizează inputul în chat pentru folosirea scurtăturilor", + "Shortcuts while in a call" : "Scurtături pentru videoconferință", + "Camera on and off" : "Activează și dezactivează camera", + "Microphone on and off" : "Activează și dezactivează microfonul", + "Raise or lower hand" : "Ridicare sau coborâre mână", + "Push to talk or push to mute" : "Apăsați pentru a vorbi sau pentru a suprima microfonul", + "Start call silently" : "Pornește videoconferința fără sunet", + "Start call" : "Pornește videoconferința", + "End call" : "Închidere videoconferință", + "You will be able to join the call only after a moderator starts it." : "Veți putea să participați după ce videoconferința va fi pornită de un moderator", + "End call for everyone" : "Închide videoconferința pentru toți", + "The call has been running for one hour." : "Videoconferința durează de o oră", + "Send a reaction" : "Trimite o reacție", + "React with {reaction}" : "Reacționează cu {reaction}", + "You are not allowed to enable screensharing" : "Nu aveți permisiunea de partajare a ecranului", + "No screensharing" : "Nicio partajare de ecran", + "Screensharing options" : "Opțiuni pentru partajarea ecranului", + "Enable screensharing" : "Activează partajarea ecranului", + "Bad sent video and screen quality." : "Video transmis corupt și calitate proastă a imaginii.", + "Bad sent screen quality." : "Calitate proastă a imaginii.", + "Bad sent video quality." : "Calitate proastă video.", + "Bad sent audio, video and screen quality." : "Calitate proastă audio și video.", + "Bad sent audio and screen quality." : "Calitate proastă audio și imagine.", + "Bad sent audio and video quality." : "Calitate proastă audio și video.", + "Bad sent audio quality." : "Calitate audio proastă.", + "Disable background blur" : "Dezactivează blurarea fundalului", + "Disable screenshare" : "Dezactivează partajarea ecranului", + "Screen sharing is not supported by your browser." : "Partajarea ecranului nu e posibilă în acest browser.", + "An error occurred while starting screensharing." : "Eroare la partajarea ecranului.", + "Show your screen" : "Prezentați ecranul", + "Stop screensharing" : "Oprește partajarea ecranului", + "Mute others" : "Închide microfonul celorlalți", + "Remove participant {name}" : "Elimină participantul {name}", + "Keep" : "Păstrare", + "Select a region" : "Selectează o regiune", + "Search …" : "Caută ...", + "Message without mention" : "Mesaj fără mențiuni", + "Mention myself" : "Mă menționez", + "The conversation does not exist" : "Conversația nu există", + "Join a conversation or start a new one!" : "Particiăați la o conversație sau creați una nouă!", + "Duplicate session" : "Sesiune duplicat", + "Join a conversation or start a new one" : "Participați la o conversație sau începeți una nouă", + "Talk conversation" : "Conversație Talk", + "User" : "Utilizator", + "Login" : "Autentificare", + "Nickname" : "Pseudonim", + "Client ID" : "ID client", + "Media" : "Media", + "Polls" : "Voturi", + "Deck cards" : "Carduri Deck", + "Voice messages" : "Mesaje vocale", + "Locations" : "Locații", + "Audio" : "Audio", + "Show all media" : "Arată toată media", + "Show all files" : "Arată toate fișierele", + "Show all polls" : "Arată toate voturile", + "Show all deck cards" : "Arată toate cardurile Deck", + "Show all voice messages" : "Arată toate mesajele vocale", + "Show all locations" : "Arată toate locațiile", + "Show all audio" : "Arată audio", + "Show all other" : "Arată celelalte", + "Group" : "Grup", + "Team" : "Echipă", + "You reconnected to the call" : "V-ați reconectat", + "{actor} reconnected to the call" : "{actor} s-a reconectat", + "You added {user0} and {user1}" : "Ați adăugat pe {user0} și {user1}", + "An administrator added you and {user0}" : "V-a adăugat un administrator, și pe {user0}", + "{actor} added you and {user0}" : "{actor} v-a adăugat, și pe {user0}", + "An administrator added {user0} and {user1}" : "Un administrator a adăugat pe {user0} și pe {user1}", + "{actor} added {user0} and {user1}" : "{actor} a adăugat pe {user0} și pe {user1}", + "You: {lastMessage}" : "Tu: {lastMessage}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Încercați să participați la o conversație având o sesiune activă în altă fereastră sau dispozitiv. Acest lucru nu este suportat în prezent în Nextcloud Talk. Ce doriți să faceți?", + "Leave this page" : "Părăsește pagina", + "Join here" : "Alăturare aici", + "Deck card has been posted to {conversation}" : "Cardul Deck a fost postat la conversația {conversation}", + "An error occurred while posting deck card to conversation" : "Eroare la postarea cardului Deck în conversație", + "Post to a conversation" : "Postare într-o conversație", + "Post to conversation" : "Postare în conversație", + "Share to a conversation" : "Partajare la o conversație", + "Share to conversation" : "Partajare la conversație", + "Error while clearing conversation history" : "Eroare la ștergerea istoricului conversației", + "Conversation password has been saved" : "Parola conversației a fost salvată", + "Conversation password has been removed" : "Parola conversație a fost ștearsă", + "Conversation picture set" : "Imaginea conversației a fost configurată", + "Conversation picture deleted" : "Imaginea conversației a fost ștearsă", + "Could not post message: {errorMessage}" : "Nu s-a putut posta mesajul: {errorMessage}", + "An error occurred while fetching the participants" : "Eroare la preluarea listei de participanți", + "Could not send invitation to {actorId}" : "Nu a fost trimisă invitația către {actorId}", + "Invitations sent" : "Invitațiile au fost trimise", + "An error occurred while requesting assistance" : "Eroare la solicitarea de asistență", + "An error occurred while resetting the request for assistance" : "Eroare la resetarea solicitării de asistență", + "An error occurred while submitting your vote" : "Eroare la transmiterea votului", + "An error occurred while ending the poll" : "Eroare la încheierea votării", + "Failed to add reaction" : "Eroare la adăugarea reacției", + "Failed to remove reaction" : "Eroare la ștergerea reacției", + "Error while uploading file \"{fileName}\"" : "Eroare la încărcarea fișierului \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Spațiu insuficient pentru încărcarea fișierului \"{fileName}\"", + "Error while sharing file" : "Eroare la partajarea fișierului", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Browserul folosit nu este compatibil cu Nextcloud Talk. Folosiți ultima versiune a Mozilla Firefox, Microsoft Edge, Google Chrome sau Apple Safari.", + "Later today – {timeLocale}" : "Azi, mai târziu – {timeLocale}", + "Tomorrow – {timeLocale}" : "Mâine – {timeLocale}", + "This weekend – {timeLocale}" : "În acest weekend – {timeLocale}", + "Next week – {timeLocale}" : "Săptămâna viitoare– {timeLocale}", + "Message link copied to clipboard" : "Linkul mesajului a fost copiat", + "Conversation link copied to clipboard" : "Linkul conversației a fost copiat", + "The link could not be copied" : "Linkul nu s-a putut copia", + "Please reload the page." : "Te rugăm să reîncarci pagina.", + "Do not disturb" : "Nu deranja", + "Away" : "Plecat", + "Microphone {number}" : "Microfon {number}", + "Speaker {number}" : "Vorbitor {number}", + "Access to microphone & camera was denied" : "Accesul la microfon și cameră a fost refuzat", + "Android app" : "Aplicație Android", + "iOS app" : "Aplicație iOS", + "__language_name__" : "Română", + "Tasks" : "Sarcini", + "Notes" : "Notițe", + "Set reminder for later today" : "Setează memo pentru azi, mai târziu", + "Set reminder for tomorrow" : "Setează memo pentru mâine", + "Set reminder for this weekend" : "Setează memo pentru acest weekend", + "Set reminder for next week" : "Setează memo pentru săptămâna viitoare", + "Your privacy setting has been saved" : "Setările de confidențialitate au fost salvate", + "Failed to save sounds setting" : "Eroare la salvarea setărilor de sunet", + "Sounds setting saved" : "Setările de sunet au fost salvate" +},"pluralForm" :"nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));" +} \ No newline at end of file diff --git a/l10n/ru.js b/l10n/ru.js new file mode 100644 index 0000000..da34424 --- /dev/null +++ b/l10n/ru.js @@ -0,0 +1,2256 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "обсуждение", + "(Duration %s)" : "(Продолжительность %s)", + "You attended a call with {user1}" : "Вы участвовали в вызове с пользователем {user1}", + "_%n guest_::_%n guests_" : ["%n гость","%n гостя","%n гостей","%n гостей"], + "You attended a call with {user1} and {user2}" : "Вы участвовали в вызове с пользователями {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Вы участвовали в вызове с пользователями {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Вы участвовали в вызове с пользователями {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Вы участвовали в вызове с пользователями {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["ещё %n","ещё %n","ещё %n","ещё %n"], + "{actor} invited you to {call}" : "{actor} приглашает вас в вызов «{call}»", + "You were invited to a conversation or had a call" : "Вы были приглашены в обсуждение или в вызов", + "Other activities" : "Другие события", + "Talk" : "Конференции", + "Guest" : "Гость", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Добро пожаловать в приложение Конференции для Nextcloud!\nВ этом обсуждении приведена информация о новых функциях приложения.", + "## New in Talk %s" : "## Новое в приложении «Конференции» версии %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Браузеры Microsoft Edge и Safari теперь могут быть использованы для участия в аудио- и видеовызовах", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Частные обсуждения теперь постоянны и не могут быть преобразованы в групповые обсуждения путём добавления новых участником. Также, когда один из участников покидает такое обсуждение, оно больше не удаляется автоматически. Только если оба участника покинули обсуждение, оно удаляется с сервера", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Теперь вы можете уведомлять всех участников, написав в чат \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Нажатием клавиши ↑ вы можете переслать своё последнее сообщение", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Теперь в приложении есть команды. Напишите \"/help\" в чат, чтобы увидеть, какие команды настроил ваш администратор", + "- With projects you can create quick links between conversations, files and other items" : "- С помощью проектов вы можете создавать быстрые ссылки между обсуждениями, файлами и другими объектами", + "- You can now mention guests in the chat" : "- Возможноcть упоминать гостей в сообщениях", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- У обсуждений теперь может быть лобби. Это позволит модераторам присоединиться к обсуждениям и вызовам раньше, чтобы подготовить встречу, в то время как пользователи и гости должны будут дождаться готовности", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Возможность непосредственного ответа на сообщения позволяет другим пользователям получать больше контекстной информации о содержимом сообщения", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Использование фильтра при поиске обсуждений и участников в существующих обсуждениях для упрощения поиска;", + "- You can now add custom user groups to conversations when the circles app is installed" : "- возможность добавлять к обсуждениям собственные группы пользователей при установленном приложении «Круги»;", + "- Check out the new grid and call view" : " - Новый режим просмотра «Сетка» и новый экран вызова;", + "- You can now upload and drag'n'drop files directly from your device into the chat" : " - Возможность загружать и перетаскивать в чат файлы с используемого устройства;", + "- Shared files are now opened directly inside the chat view with the viewer apps" : " - Возможность просматривать опубликованные файлы непосредственно в чате с использованием приложения для просмотра;", + "- You can now search for chats and messages in the unified search in the top bar" : " - Поиск обсуждений и сообщений из общей строки поиска, расположенной на верхней панели;", + "- Spice up your messages with emojis from the emoji picker" : " - Панель выбора эмодзи;", + "- You can now change your camera and microphone while being in a call" : " - Возможность сменить используемую камеру и микрофон во время вызова;", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : " - Возможность назначить обсуждениям контекст и описание для облегчения их поиска другими пользователями;", + "- See a read status and send failed messages again" : " - Просмотр статуса прочтения сообщения и повторная отправка сообщений в случае сбоя при их доставке;", + "- Raise your hand in a call with the R key" : " - Возможность «поднять руку» во время вызова (клавиша «R»);", + "- Join the same conversation and call from multiple devices" : "- Возможность одновременно подключаться к обсуждениям и вызовам с различных устройств;", + "- Send voice messages, share your location or contact details" : "- Передача голосовых сообщений, публикация местоположения и карточек контактов;", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Возможность добавить группу пользователей в обсуждение. Все новые члены группы будут автоматически добавлены в качестве участников;", + "- A preview of your audio and video is shown before joining a call" : "- Перед подключением к звонку отображается предварительный просмотр аудио- и видео c камеры", + "- You can now blur your background in the newly designed call view" : "- Теперь вы можете размыть фон в новом дизайне окна вызова", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторы теперь могут назначать общие и индивидуальные разрешения для участников", + "- You can now react to chat messages" : "- Теперь вы можете реагировать на сообщения в чате", + "- In the sidebar you can now find an overview of the latest shared items" : "- На боковой панели теперь можно найти обзор последних общих элементов", + "- Use a poll to collect the opinions of others or settle on a date" : "- Используйте опрос, чтобы узнать мнение других людей или договориться о дате", + "- Configure an expiration time for chat messages" : "- Настройка срока жизни сообщений чата", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Начинайте вызовы, не уведомляя других участников большого обсуждения. Вы можете отправить индивидуальные уведомления о вызове после его начала.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Отправлять сообщения чата без уведомления пользователей, если они не являются срочными", + "- Emojis can now be autocompleted by typing a \":\"" : "- Эмодзи теперь можно заполнять автоматически, набрав «:»", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Свяжите различные элементы, используя новый смарт-выборщик, набрав «/»", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модераторы теперь могут создавать комнаты обсуждения (требуется Высокопроизводительный сервер).", + "- Calls can now be recorded (requires the High-performance backend)" : "- Вызовы теперь могут быть записаны (требуется Высокопроизводительный сервер)", + "- Conversations can now have an avatar or emoji as icon" : "- Разговоры теперь могут иметь аватар или эмодзи в качестве значка", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- В дополнение к размытому фону в видеовызовах теперь доступны виртуальные фоны", + "- Reactions are now available during calls" : "- Реакции теперь доступны во время вызовов", + "- Typing indicators show which users are currently typing a message" : "- Индикаторы набора показывают, какие пользователи в данный момент набирают сообщение", + "- Groups can now be mentioned in chats" : "- Группы теперь можно упоминать в сообщениях чата", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Записи вызовов автоматически расшифровываются, если зарегистрировано приложение - транскриптор", + "- Chat messages can be translated if a translation provider app is registered" : "- Сообщения чата могут быть переведены, если зарегистрировано приложение - переводчик", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** разметка теперь доступна в сообщениях _чата_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Теперь доступны веб-хуки для внедрения ботов. Дополнительную информацию смотрите в документации https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Установите напоминание на сообщение чата, чтобы позже снова получить уведомление", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Используйте **Личные заметки**, чтобы делать заметки и делиться информацией между вашими устройствами", + "- Captions allow to send a message with a file at the same time" : "- Подписи позволяют отправить текстовое сообщение одновременно с файлом", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Видео выступающего теперь отображается при презентации экрана, и реакции в вызове анимированы", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Сообщения теперь могут быть изменены авторами и модераторами в течение 6 часов", + "- Unsent message drafts are now saved in your browser" : "- Черновики неотправленных сообщений теперь сохраняются в вашем браузере.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Обмен сообщениями теперь может происходит в федеративных обсуждениях с другими серверами Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модераторы теперь могут блокировать аккаунты и гостей, чтобы они не могли снова присоединиться к обсуждению", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Предстоящие вызовы из связанных с календарем событий и замены вне офиса теперь отображаются в обсуждениях", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Вызовы теперь можно совершать через федерации с другими Talk серверами (требуется Высокопроизводительный сервер)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- «Nextcloud Talk» клиент для настольных ПК доступен для Windows, macOS и Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Резюме записанных вызовов и непрочитанных сообщений в чате с помощью «Nextcloud Assistant»", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "Улучшенные встречи: распознавание гостей, приглашенных через адрес эл. почты, импорт списка участников в обсуждение, экспорт списка участников вызова и черновики опросов.", + "- Archive conversations to stay focused" : "- Возможность архивировать обсуждения", + "- Schedule a meeting into your calendar from within a conversation" : "- Назначение встречи в своём календаре прямо из обсуждения", + "- Search for messages of the current conversation directly in the right sidebar" : "- Поиск по сообщениям в текущем обсуждении через боковую панель", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "Обзор большего числа обсуждений с помощью нового компактного списка (доступно в настройках приложения)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "Обсуждения - встречи теперь синхронизируют название и описание из календаря и скрыты с помощью фильтра поиска до тех пор, пока они не будут близки ко времени начала", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Отметьте обсуждения как конфиденциальные в настройках уведомлений, чтобы скрыть содержимое сообщений из списка обсуждений и уведомлений", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Чтобы получать уведомления в режиме «Не беспокоить», отмечайте обсуждения как важные", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Добавляйте других участников к частному вызову, чтобы создать новый групповой вызов на лету", + "- Use threads to keep your chat and discussions organized" : "- Используйте темы для организации чата и дискуссий", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Транскрипция вызовов в реальном времени теперь доступна (требуется ExApp для транскрипций в реальном времени и Высокопроизводительный сервер)", + "- Moderators can now pin messages so they are kept at the top" : "- Теперь модераторы могут закреплять сообщения, чтобы они оставались вверху", + "- Schedule a message to send it at a later time" : "- Запланировать сообщение к отправке в указанное время", + "_All %n participant_::_All %n participants_" : ["%n участник","Все %n участника","Все %n участников","Все %n участников"], + "Talk updates ✅" : "Обновления приложения «Конференции» ✅", + "Reaction deleted by author" : "Реакция удалена автором", + "{actor} created the conversation" : "{actor} создал(а) обсуждение", + "You created the conversation" : "Вы создали обсуждение", + "System created the conversation" : "Обсуждение создано системой автоматически", + "An administrator created the conversation" : "Администратор создал обсуждение", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} переименовал(а) обсуждение «%1$s» в «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вы переименовали обсуждение «%1$s» в «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор переименовал обсуждение «%1$s» в «%2$s»", + "{actor} set the description" : "{actor} установил(а) описание", + "You set the description" : "Вы установили описание", + "An administrator set the description" : "Администратор установил описание", + "{actor} removed the description" : "{actor} удалил(a) описание", + "You removed the description" : "Вы удалили описание", + "An administrator removed the description" : "Администратор удалил описание", + "You started a silent call" : "Вы начали тихий вызов", + "Outgoing silent call" : "Исходящий тихий вызов", + "{actor} started a silent call" : "{actor} начал(а) тихий вызов", + "Incoming silent call" : "Входящий тихий вызов", + "You started a call" : "Вы начали вызов", + "Outgoing call" : "Исходящий вызов", + "{actor} started a call" : "{actor} начал(а) вызов", + "Incoming call" : "Входящий вызов", + "{actor} joined the call" : "{actor} присоединился(лась) к вызову", + "You joined the call" : "Вы присоединились к вызову", + "{actor} left the call" : "{actor} покинул(а) вызов", + "You left the call" : "Вы покинули вызов", + "{actor} unlocked the conversation" : "{actor} разблокировал(а) обсуждение", + "You unlocked the conversation" : "Вы разблокировали обсуждение", + "An administrator unlocked the conversation" : "Администратор разблокировал обсуждение", + "{actor} locked the conversation" : "{actor} заблокировал(а) обсуждение", + "You locked the conversation" : "Вы заблокировали обсуждение", + "An administrator locked the conversation" : "Администратор заблокировал обсуждение", + "{actor} limited the conversation to the current participants" : "{actor} ограничил(а) доступ к обсуждению только текущими участниками", + "You limited the conversation to the current participants" : "Вы ограничили доступ к обсуждению только текущими участниками", + "An administrator limited the conversation to the current participants" : "Администратор ограничил доступ к обсуждению только текущими участниками", + "{actor} opened the conversation to registered users" : "{actor} открыл(а) доступ к обсуждению для зарегистрированных пользователей", + "You opened the conversation to registered users" : "Вы открыли доступ к обсуждению для зарегистрированных пользователей", + "An administrator opened the conversation to registered users" : "Администратор открыл доступ к обсуждению для зарегистрированных пользователей", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} открыл обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "You opened the conversation to registered users and users created with the Guests app" : "Вы открыли обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор открыл обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "The conversation is now open to everyone" : "Обсуждение теперь открыто для всех", + "{actor} opened the conversation to everyone" : "{actor} открыл(а) обсуждение для всех", + "You opened the conversation to everyone" : "Вы открыли обсуждение для всех", + "{actor} restricted the conversation to moderators" : "{actor} ограничил(а) доступ к обсуждению только для модераторов", + "You restricted the conversation to moderators" : "Вы ограничили доступ к обсуждению только для модераторов", + "{actor} started breakout rooms" : "{actor} запустил(а) комнаты обсуждения", + "You started breakout rooms" : "Вы запустили комнаты обсуждения", + "{actor} stopped breakout rooms" : "{actor} остановил(а) комнаты обсуждения", + "You stopped breakout rooms" : "Вы остановили комнаты обсуждения", + "{actor} allowed guests" : "{actor} разрешил(а) участие гостей", + "You allowed guests" : "Вы разрешили участие гостей", + "An administrator allowed guests" : "Администратор разрешил участие гостей", + "{actor} disallowed guests" : "{actor} запретил(а) участие гостей", + "You disallowed guests" : "Вы запретили участие гостей", + "An administrator disallowed guests" : "Администратор запретил участие гостей", + "{actor} set a password" : "{actor} установил(а) пароль", + "You set a password" : "Вы установили пароль", + "An administrator set a password" : "Администратор установил пароль", + "{actor} removed the password" : "{actor} удалил(а) пароль", + "You removed the password" : "Вы удалили пароль", + "An administrator removed the password" : "Администратор удалил пароль", + "{actor} added {user}" : "{actor} добавил(а) пользователя {user}", + "You joined the conversation" : "Вы присоединились к обсуждению", + "{actor} joined the conversation" : "{actor} присоединился(лась) к обсуждению", + "You added {user}" : "Вы добавили {user}", + "{actor} added you" : "{actor} добавил(а) Вас", + "An administrator added you" : "Администратор добавил вас", + "An administrator added {user}" : "Администратор добавил {user} ", + "You left the conversation" : "Вы покинули обсуждение", + "{actor} left the conversation" : "{actor} покинул(а) обсуждение", + "{actor} removed {user}" : "{actor} исключил(а) {user}", + "You removed {user}" : "Вы исключили {user}", + "{actor} removed you" : "{actor} исключил(а) Вас", + "An administrator removed you" : "Администратор исключил вас", + "An administrator removed {user}" : "Администратор исключил {user} ", + "{actor} invited {federated_user}" : "{actor} пригласил(а) {federated_user}", + "You invited {federated_user}" : "Вы пригласили {federated_user}", + "You accepted the invitation" : "Вы приняли приглашение", + "{actor} invited you" : "{actor} пригласил(а) Вас", + "An administrator invited you" : "Администратор пригласил Вас", + "An administrator invited {federated_user}" : "Администратор пригласил {federated_user} ", + "{federated_user} accepted the invitation" : "{federated_user} принял(а) приглашение", + "{actor} removed {federated_user}" : "{actor} исключил(а) {federated_user}", + "You removed {federated_user}" : "Вы исключили {federated_user}", + "You declined the invitation" : "Вы отклонили приглашение", + "An administrator removed {federated_user}" : "Администратор исключил {federated_user} ", + "{federated_user} declined the invitation" : "{federated_user} отклонил(а) приглашение", + "{actor} added group {group}" : "{actor} добавил(а) группу {group}", + "You added group {group}" : "Вы добавили группу {group}", + "An administrator added group {group}" : "Администратор добавил группу {group}", + "{actor} removed group {group}" : "{actor} исключил(а) группу {group}", + "You removed group {group}" : "Вы исключили группу {group}", + "An administrator removed group {group}" : "Администратор исключил группу {group}", + "{actor} added team {circle}" : "{actor} добавил(а) команду {circle}", + "You added team {circle}" : "Вы добавили команду {circle}", + "An administrator added team {circle}" : "Администратор добавил команду {circle}", + "{actor} removed team {circle}" : "{actor} исключил(а) команду {circle}", + "You removed team {circle}" : "Вы исключили команду {circle}", + "An administrator removed team {circle}" : "Администратор исключил команду {circle}", + "{actor} added {phone}" : "{actor} добавил(а) {phone}", + "You added {phone}" : "Вы добавили {phone}", + "An administrator added {phone}" : "Администратор добавил {phone} ", + "{actor} removed {phone}" : "{actor} исключил(а) {phone}", + "You removed {phone}" : "Вы исключили {phone}", + "An administrator removed {phone}" : "Администратор исключил {phone}", + "{actor} promoted {user} to moderator" : "{actor} назначил(а) пользователя {user} модератором", + "You promoted {user} to moderator" : "Вы назначили {user} модератором", + "{actor} promoted you to moderator" : "{actor} назначил(а) Вас модератором", + "An administrator promoted you to moderator" : "Администратор назначил Вас модератором", + "An administrator promoted {user} to moderator" : "Администратор назначил {user} модератором", + "{actor} demoted {user} from moderator" : "{actor} исключил(а) пользователя {user} из модераторов", + "You demoted {user} from moderator" : "Вы исключили {user} из модераторов", + "{actor} demoted you from moderator" : "{actor} исключил(а) Вас из модераторов", + "An administrator demoted you from moderator" : "Администратор исключил Вас из модераторов", + "An administrator demoted {user} from moderator" : "Администратор исключил {user} из модераторов", + "{actor} shared a file which is no longer available" : "{actor} предоставил(а) общий доступ к файлу, который более не доступен", + "You shared a file which is no longer available" : "Вы поделились файлом, который более не доступен", + "File shares are currently not supported in federated conversations" : "Обмен файлами на данный момент не поддерживается федеративными обсуждениями", + "The shared location is malformed" : "Неправильно указано общее местоположение ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} настроил(а) Matterbridge для обмена сообщениями с другими чатами", + "You set up Matterbridge to synchronize this conversation with other chats" : "Вы настроили Matterbridge для обмена сообщениями с другими чатами", + "{actor} created thread {title}" : "{actor} создал(а) тему {title}", + "You created thread {title}" : "Вы создали тему {title}", + "{actor} renamed thread {title}" : "{actor} переименовал тему {title}", + "You renamed thread {title}" : "Вы переименовали тему {title}", + "{actor} updated the Matterbridge configuration" : "{actor} изменил(а) конфигурацию системы обмена сообщениями Matterbridge", + "You updated the Matterbridge configuration" : "Вы изменили конфигурацию системы обмена сообщениями Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} удалил(а) конфигурацию системы обмена сообщениями Matterbridge", + "You removed the Matterbridge configuration" : "Вы удалили конфигурацию системы обмена сообщениями Matterbridge", + "{actor} started Matterbridge" : "{actor} запустил(а) систему обмена сообщениями Matterbridge", + "You started Matterbridge" : "Вы запустили систему обмена сообщениями Matterbridge", + "{actor} stopped Matterbridge" : "{actor} остановил(а) систему обмена сообщениями Matterbridge", + "You stopped Matterbridge" : "Вы остановили систему обмена сообщениями Matterbridge", + "{actor} deleted a message" : "{actor} удалил(а) сообщение", + "You deleted a message" : "Вы удалили сообщение", + "{actor} edited a message" : "{actor} изменил(а) сообщение", + "You edited a message" : "Вы изменили сообщение", + "{actor} pinned a message" : "{actor} закрепил(а) сообщение", + "You pinned a message" : "Вы закрепили сообщение", + "{actor} unpinned a message" : "{actor} открепил(а) сообщение", + "Message was automatically unpinned" : "Сообщение было автоматически откреплено", + "You unpinned a message" : "Вы открепили сообщение", + "{actor} deleted a reaction" : "{actor} удалил(а) реакцию", + "You deleted a reaction" : "Вы удалили реакцию", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Вы установили срок жизни сообщений в %n неделю","Вы установили срок жизни сообщений в %n недели","Вы установили срок жизни сообщений в %n недель","Вы установили срок жизни сообщений в %n недель"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Вы установили срок жизни сообщений в %n день","Вы установили срок жизни сообщений в %n дня","Вы установили срок жизни сообщений в %n дней","Вы установили срок жизни сообщений в %n дней"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Вы установили срок жизни сообщений в %n час","Вы установили срок жизни сообщений в %n часа","Вы установили срок жизни сообщений в %n часов","Вы установили срок жизни сообщений в %n часов"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Вы установили срок жизни сообщений в %n минуту","Вы установили срок жизни сообщений в %n минуты","Вы установили срок жизни сообщений в %n минут","Вы установили срок жизни сообщений в %n минут"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} установил(а) срок жизни сообщений в %n неделю","{actor} установил(а) срок жизни сообщений в %n недели","{actor} установил(а) срок жизни сообщений в %n недель","{actor} установил(а) срок жизни сообщений в %n недель"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} установил(а) срок жизни сообщений в %n день","{actor} установил(а) срок жизни сообщений в %n дня","{actor} установил(а) срок жизни сообщений в %n дней","{actor} установил(а) срок жизни сообщений в %n дней"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} установил(а) срок жизни сообщений в %n час","{actor} установил(а) срок жизни сообщений в %n часа","{actor} установил(а) срок жизни сообщений в %n часов","{actor} установил(а) срок жизни сообщений в %n часов"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} установил(а) срок жизни сообщений в %n минуту","{actor} установил(а) срок жизни сообщений в %n минуты","{actor} установил(а) срок жизни сообщений в %n минут","{actor} установил(а) срок жизни сообщений в %n минут"], + "{actor} disabled message expiration" : "{actor} отключил срок жизни сообщений", + "You disabled message expiration" : "Вы отключили срок жизни сообщений", + "{actor} cleared the history of the conversation" : "{actor} удалил(а) историю обсуждения", + "You cleared the history of the conversation" : "Вы очистили историю обсуждения", + "{actor} set the conversation picture" : "{actor} установил изображение обсуждения", + "You set the conversation picture" : "Вы установили изображение обсуждения", + "{actor} removed the conversation picture" : "{actor} удалил изображение обсуждения", + "You removed the conversation picture" : "Вы удалили изображение обсуждения", + "{actor} ended the poll {poll}" : "{actor} завершил(а) опрос {poll}", + "You ended the poll {poll}" : "Вы завершили опрос {poll}", + "{actor} started the video recording" : "{actor} начал(а) запись видео", + "You started the video recording" : "Вы начали запись видео", + "{actor} stopped the video recording" : "{actor} остановил запись видео", + "You stopped the video recording" : "Вы остановили запись видео", + "{actor} started the audio recording" : "{actor} начал(а) запись аудио", + "You started the audio recording" : "Вы начали запись аудио", + "{actor} stopped the audio recording" : "{actor} остановил запись аудио", + "You stopped the audio recording" : "Вы остановили запись аудио", + "The recording failed" : "Ошибка записи", + "Someone voted on the poll {poll}" : "Кто-то проголосовал в опросе {poll}", + "Message deleted by author" : "Сообщение удалено автором", + "Message deleted by {actor}" : "Сообщение удалено {actor}", + "Message deleted by you" : "Сообщение удалено Вами", + "Deleted user" : "Удалённый пользователь", + "Unknown number" : "Неизвестный номер", + "Administration" : "Администрирование", + "System" : "Системный", + "%s (guest)" : "%s (гость)", + "Missed call" : "Пропущенный вызов", + "Unanswered call" : "Вызов без ответа", + "Call ended (Duration {duration})" : "Вызов завершён (Продолжительность {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завершил(а) вызов (Продолжительность {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Вызов с %n гостем завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Вызов с %n гостем завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} завершил(а) вызов с %n гостем (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1} ended (Duration {duration})" : "Вызов с {user1} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завершил(а) вызов с {user1} (Продолжительность {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1} и {user2} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Вызов с {user1} и {user2} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завершил(а) вызов с {user1} и {user2} (Продолжительность {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2} и {user3} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Вызов с {user1}, {user2} и {user3} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2} и {user3} (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2}, {user3} и {user4} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Вызов с {user1}, {user2}, {user3} и {user4} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2}, {user3} и {user4} (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2}, {user3}, {user4} и {user5} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Вызов с {user1}, {user2}, {user3}, {user4} и {user5} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2}, {user3}, {user4} и {user5} (Продолжительность {duration})", + "Message of {user} in {conversation}" : "Сообщение от {user} в {conversation}", + "Message of {user}" : "Сообщение от {user}", + "Message of a deleted user in {conversation}" : "Сообщение от удалённого пользователя в {conversation}", + "Talk conversations" : "Обсуждения", + "Talk to %s" : "Начать обсуждение с %s", + "An error occurred. Please contact your administrator." : "Произошла ошибка. Пожалуйста, свяжитесь с администратором.", + "App disabled" : "Приложение отключено", + "Conversation subfolders are disabled" : "Подпапки для обсуждений отключены", + "Storage quota exceeded" : "Превышена квота хранилища", + "Could not prepare conversation folder" : "Не удалось подготовить папку для обсуждения", + "File not found" : "Файл не найден", + "Path must point to a file" : "Путь должен указывать на файл", + "File is not inside the conversation draft folder for this room" : "Файл не найден в черновой папке для этого обсуждения", + "File is not shared, or shared but not with the user" : "Файл не имеет общего доступа, либо имеет, но не с пользователем", + "No account available to delete." : "Отсутствуют учётные записи, которые возможно удалить.", + "Poll" : "Опрос", + "Password needs to be set" : "Необходимо установить пароль", + "Uploading the file failed" : "Не удалось загрузить файл", + "No image file provided" : "Файл изображения не указан", + "File is too big" : "Файл слишком большой", + "Invalid file provided" : "Указан неправильный файл", + "Invalid image" : "Некорректное изображение", + "Unknown filetype" : "Неизвестный тип файла", + "Talk mentions" : "Упоминания в обсуждениях", + "More conversations" : "Больше обсуждений", + "Say hi to your friends and colleagues!" : "Поприветствуйте своих друзей и коллег.", + "No unread mentions" : "Нет ни одного непрочитанного упоминания", + "Call in progress" : "Выполняется вызов", + "You were mentioned" : "Вы были упомянуты", + "Write to conversation" : "Написать в обсуждение", + "Writes event information into a conversation of your choice" : "Выводит в обсуждение выбранную информацию о событии", + "Missing email field in header line" : "Отсутствует поле «email» в строке заголовка", + "Following lines are invalid: %s" : "Следующие строки некорректны: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s пригласил вас в обсуждение «%2$s».", + "You were invited to conversation \"%s\"." : "Вы были приглашены в обсуждение «%s».", + "Conversation invitation" : "Приглашение на участие в обсуждении", + "Scheduled time" : "Запланированное время", + "Description" : "Описание", + "You can also dial-in via phone with the following details" : "Вы можете позвонить в конференцию, использую приведённые ниже данные", + "Dial-in information" : "Сведения для звонка", + "Meeting ID" : "Идентификатор встречи (ID)", + "Your PIN" : "Ваш ПИН", + "Click the button below to join the lobby now." : "Нажмите кнопку ниже, чтобы присоединиться к лобби прямо сейчас.", + "Click the link below to join the lobby now." : "Нажмите ссылку ниже, чтобы присоединиться к лобби прямо сейчас.", + "Join lobby for \"%s\"" : "Присоединиться к лобби в «%s»", + "Click the button below to join the conversation now." : "Нажмите кнопку ниже, чтобы присоединиться к обсуждению прямо сейчас.", + "Click the link below to join the conversation now." : "Нажмите ссылку ниже, чтобы присоединиться к обсуждению прямо сейчас.", + "Join \"%s\"" : "Присоединиться к «%s»", + "Meeting" : "Встреча", + "Password request: %s" : "Запрос пароля: %s", + "Private conversation" : "Частное обсуждение", + "Deleted user (%s)" : "Удалённый пользователь (%s)", + "Failed to upload call recording" : "Не удалось загрузить запись вызова", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Серверу записи не удалось загрузить запись вызова {call}. Пожалуйста, обратитесь к администрации.", + "Share to chat" : "Поделиться в чате", + "Dismiss notification" : "Скрыть уведомление", + "Call recording now available" : "Доступна запись вызовов", + "The recording for the call in {call} was uploaded to {file}." : "Запись вызова в {call} была загружена в {file}.", + "Transcript now available" : "Расшифровка теперь доступна", + "The transcript for the call in {call} was uploaded to {file}." : "Расшифровка вызова в {call} была загружена в {file}.", + "Failed to transcript call recording" : "Не удалось загрузить расшифровку вызова", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не удалось расшифровать запись из {file} для вызова {call}. Пожалуйста, обратитесь к администрации.", + "Call summary now available" : "Доступно текстовое резюме вызова", + "The summary for the call in {call} was uploaded to {file}." : "Текстовое резюме вызова в {call} было загружено в {file}.", + "Failed to summarize call recording" : "Не удалось резюмировать запись вызова", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не удалось резюмировать запись из {file} для вызова {call}. Пожалуйста, обратитесь к администрации.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} пригласил вас присоединиться к обсуждению {roomName} на {remoteServer}", + "Accept" : "Принять", + "Decline" : "Отклонить", + "{user1} invited you to a federated conversation" : "{user} пригласил(а) вас в федеративное обсуждение", + "Someone reacted" : "Кто-то отреагировал", + "New message" : "Создать сообщение", + "Reminder" : "Напоминание", + "Someone mentioned you" : "Кто-то упомянул вас", + "Notification" : "Уведомление", + "Someone reacted in a private conversation" : "Кто-то отреагировал в частном обсуждении", + "You received a message in a private conversation" : "Вы получили сообщение в частном обсуждении", + "Reminder in a private conversation" : "Напоминание в частном обсуждении", + "Someone mentioned you in a private conversation" : "Кто-то упомянул вас в частном обсуждении", + "Notification in a private conversation" : "Уведомление в частном обсуждении", + "Reminder: You in {call}" : "Напоминание: Вы в {call}", + "Reminder: {user} in {call}" : "Напоминание: {user} в {call}", + "Reminder: Deleted user in {call}" : "Напоминание: удалённый пользователь в {call}", + "Reminder: {guest} (guest) in {call}" : "Напоминание: {guest} (гость) в {call}", + "Reminder: Guest in {call}" : "Напоминание: Гость в {call}", + "{user} reacted with {reaction}" : "{user} отреагировал(а) с {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} отреагировал(а) с {reaction} в {call}", + "Deleted user reacted with {reaction} in {call}" : "Удалённый пользователь отреагировал с {reaction} в {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (гость) отреагировал(а) с {reaction} в {call}", + "Guest reacted with {reaction} in {call}" : "Гость отреагировал с {reaction} в {call}", + "{user} in {call}" : "{user} в {call}", + "Deleted user in {call}" : "Удалённый пользователь в {call}", + "{guest} (guest) in {call}" : "{guest} (гость) в {call}", + "Guest in {call}" : "Гость в {call}", + "{user} sent you a private message" : "{user} отправил(а) Вам личное сообщение", + "{user} sent a message in conversation {call}" : "{user} отправил(а) сообщение в обсуждении {call}", + "A deleted user sent a message in conversation {call}" : "Удалённый пользователь отправил сообщение в обсуждении {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гость) отправил(а) сообщение в обсуждении {call}", + "A guest sent a message in conversation {call}" : "Гость отправил сообщение в обсуждении {call}", + "{user} replied to your private message" : "{user} ответил(а) на ваше личное сообщение", + "{user} replied to your message in conversation {call}" : "{user} ответил(а) на ваше сообщение в обсуждении {call}", + "A deleted user replied to your message in conversation {call}" : "Удалённый пользователь ответил на ваше сообщение в обсуждении {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гость) ответил(а) на ваше сообщение в обсуждении {call}", + "A guest replied to your message in conversation {call}" : "Гость ответил на ваше сообщение в обсуждении {call}", + "Reminder: You in private conversation {call}" : "Напоминание: Вы в частном обсуждении {call}", + "Reminder: A deleted user in private conversation {call}" : "Напоминание: удалённый пользователь в частном обсуждении {call}", + "Reminder: {user} in private conversation" : "Напоминание: {user} в частном обсуждении", + "Reminder: You in conversation {call}" : "Напоминание: Вы в обсуждении {call}", + "Reminder: {user} in conversation {call}" : "Напоминание: {user} в обсуждении {call}", + "Reminder: A deleted user in conversation {call}" : "Напоминание: удалённый пользователь в обсуждении {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Напоминание: {guest} (гость) в обсуждении {call}", + "Reminder: A guest in conversation {call}" : "Напоминание: Гость в обсуждении {call}", + "{user} reacted with {reaction} to your private message" : "{user} отреагировал(а) с {reaction} на ваше личное сообщение", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} отреагировал(а) с {reaction} на ваше сообщение в обсуждении {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Удалённый пользователь отреагировал с {reaction} на ваше сообщение в обсуждении {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гость) отреагировал(а) с {reaction} на ваше сообщение в обсуждении {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гость отреагировал с {reaction} на ваше сообщение в обсуждении {call}", + "{user} mentioned you in a private conversation" : "{user} упомянул(а) Вас в частном обсуждении", + "{user} mentioned group {group} in conversation {call}" : "{user} упомянул(а) группу {group} в обсуждении {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} упомянул(а) команду {team} в обсуждении {call}", + "{user} mentioned everyone in conversation {call}" : "{user} упомянул(а) всех в обсуждении {call}", + "{user} mentioned you in conversation {call}" : "{user} упомянул(а) Вас в обсуждении {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Удалённый пользователь упомянул группу {group} в обсуждении {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Удалённый пользователь упомянул команду {team} в обсуждении {call}", + "A deleted user mentioned everyone in conversation {call}" : "Удалённый пользователь упомянул всех в обсуждении {call}", + "A deleted user mentioned you in conversation {call}" : "Удалённый пользователь упомянул Вас в обсуждении {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гость) упомянул(а) группу {group} в обсуждении {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гость) упомянул(а) команду {team} в обсуждении {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гость) упомянул(а) всех в обсуждении {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гость) упомянул(а) Вас в обсуждении {call}", + "A guest mentioned group {group} in conversation {call}" : "Гость упомянул группу {group} в обсуждении {call}", + "A guest mentioned team {team} in conversation {call}" : "Гость упомянул команду {team} в обсуждении {call}", + "A guest mentioned everyone in conversation {call}" : "Гость упомянул всех в обсуждении {call}", + "A guest mentioned you in conversation {call}" : "Гость упомянул Вас в обсуждении {call}", + "View message" : "Просмотреть сообщение", + "Dismiss reminder" : "Отменить напоминание", + "View chat" : "Просмотреть чат", + "{user} invited you to a group conversation: {call}" : "{user} пригласил(а) вас в групповое обсуждение {call}", + "Join call" : "Присоединиться к вызову", + "Answer call" : "Ответить на вызов", + "{user} would like to talk with you" : "{user} хочет начать с Вами обсуждение", + "Call back" : "Перезвонить", + "You missed a call from {user}" : "Вы пропустили вызов от {user}", + "Accept call" : "Принять вызов", + "Incoming phone call from {call}" : "Входящий телефонный вызов от {call}", + "You missed a phone call from {call}" : "Вы пропустили телефонный вызов от {call}", + "A group call has started in {call}" : "Вызов начался в обсуждении {call}", + "You missed a group call in {call}" : "Вы пропустили вызов в обсуждении {call}", + "{email} is requesting the password to access {file}" : "{email} запрашивает пароль для доступа к файлу «{file}»", + "{email} tried to request the password to access {file}" : "Попытка запроса пароля от {email} для доступа к «{file}»", + "Someone is requesting the password to access {file}" : "Кто-то запрашивает пароль для доступа к файлу «{file}»", + "Someone tried to request the password to access {file}" : "Кто-то пытался запросить пароль для доступа к «{file}»", + "Open settings" : "Открыть настройки", + "Hosted signaling server added" : "Размещённый сигнальный сервер добавлен", + "The hosted signaling server is now configured and will be used." : "Размещённый сигнальный сервер настроен и готов к использованию.", + "Hosted signaling server removed" : "Размещённый сигнальный сервер удален", + "The hosted signaling server was removed and will not be used anymore." : "Размещенный сигнальный сервер был удален и больше не будет использоваться.", + "Hosted signaling server changed" : "Размещённый сигнальный сервер изменен", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Состояние учётной записи размещённого сигнального сервера изменено с «{oldstatus}» на «{newstatus}».", + "pending" : "ожидается", + "active" : "активно", + "expired" : "истёк", + "blocked" : "заблокирован", + "error" : "ошибка", + "The certificate of {host} expires in {days} days" : "Сертификат {host} истечет через {days} дней", + "The certificate of {host} expired" : "Сертификат {host} истёк", + "Contact via Talk" : "Связаться через Конференции", + "Open Talk" : "Перейти в Конференции", + "Default" : "По умолчанию", + "Send messages, create threads, and start voice and video calls." : "Отправляйте сообщения, создавайте темы и начинайте аудио- и видеовызовы.", + "Presentation" : "Презентация", + "Voice room" : "Голосовой чат", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Напрямую присоединяйтесь к вызову: идеально для спонтанных встреч", + "Webinar" : "Вебинар", + "Conversations" : "Обсуждения", + "Messages in current conversation" : "Сообщения в текущем обсуждении", + "{user}" : "{user}", + "Messages" : "Сообщения", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Сообщения в других обсуждениях", + "One-to-one rooms always need to show the other users avatar" : "Личные чаты всегда должны показывать аватар собеседника", + "Invalid emoji character" : "Недопустимый символ эмодзи", + "Invalid background color" : "Недопустимый цвет фона", + "Avatar image is not square" : "Изображение аватара не квадратное", + "Room {number}" : "Комната {number}", + "Other" : "Другое", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Не удалось запросить пробный период использования, сервер недоступен, попытайтесь повторить запрос через некоторое время.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Не удалось проверить подлинность этого сервера, возможно он не прошёл проверку адреса, т.к. недоступен из интернета.", + "Something unexpected happened." : "Произошла неожиданная ошибка.", + "The URL is invalid." : "URL указан некорректно.", + "An HTTPS URL is required." : "Необходимо указать HTTPS URL.", + "The email address is invalid." : "Адрес электронной почты указан некорректно.", + "The language is invalid." : "Язык указан некорректно.", + "The country is invalid." : "Страна указана некорректно.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Не удалось запросить пробный период, дополнительная информация сохранена в файлах журналов.", + "Too many requests are send from your servers address. Please try again later." : "С адреса этого сервера поступило слишком много запросов, попытайтесь повторить через некоторое время.", + "There is already a trial registered for this Nextcloud instance." : "Для этого сервера уже предоставлен пробный период использования.", + "Something unexpected happened. Please try again later." : "Произошла неожиданная ошибка, попытайтесь позднее.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Не удалось запросить пробный период использования, так как от вашего сервера получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "Trial requested but failed to get account information. Please check back later." : "Запрос пробного периода получен, но не удалось получить информацию об учётных данных, попытайтесь повторить запрос через некоторое время.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Не удалось проверить подлинность запроса, возможно ваш сервер не прошёл проверку адреса, так как недоступен из интернета.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Не удалось запросить пробный период использования, так как от сервера, предоставляющего эту услугу, получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Не удалось получить данные об учётной записи, более подробные сведения приведены в файлах журналов.", + "There is no such account registered." : "Указанная учётная запись не зарегистрирована.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Не удалось получить сведения об учётной записи, т.к. недоступен сервер, предоставляющий услугу на пробный период.", + "Deleting the hosted signaling server account failed. Please check back later." : "Не удалось удалить учётную запись сигнального сервера, повторите попытку через некоторое время.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Не удалось удалить учётную запись, так как от сервера, предоставляющего эту услугу, получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "There is a problem with deleting the account. Please check your logs for further information." : "Не удалось удалить учётную запись, более подробные сведения приведены в файлах журналов.", + "Too many requests are sent from your servers address. Please try again later." : "С адреса этого сервера поступило слишком много запросов, попытайтесь повторить через некоторое время.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Не удалось удалить учётную запись, т.к. недоступен сервер, предоставляющий услугу на пробный период. Попытайтесь повторить через некоторое время.", + "Note to self" : "Личные заметки", + "A place for your private notes, thoughts and ideas" : "Место для ваших личных заметок, мыслей и идей", + "Transcript is AI generated and may contain mistakes" : "Расшифровка сгенерирована при помощи AI и может быть неточной", + "Summary is AI generated and may contain mistakes" : "Резюме сгенерировано при помощи AI и может быть неточным", + "Let's get started!" : "Давайте начнём!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** - это безопасная коммуникационная платформа на собственном хостинге, которая легко интегрируется в экосистему Nextcloud.\n\n#### Ключевые особенности Nextcloud Talk:\n\n* Чат и обмен сообщениями в личных и групповых чатах.\n* Голосовые и видео-вызовы\n* Обмен файлами и интеграция с другими приложениями Nextcloud.\n* Настраиваемые параметры обсуждений, модерация и контроль конфиденциальности.\n* Веб-клиент, клиенты для настольных ПК и мобильных устройств (iOS и Android)\n* Частное и безопасное общение\n\nУзнайте больше в [пользовательской документации](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Добро пожаловать в Nextcloud Talk\n\nNextcloud Talk - это приватный и мощный мессенджер, интегрированный с Nextcloud. Общайтесь в частных или групповых обсуждениях, сотрудничайте с помощью голосовых и видео-вызовов, организуйте вебинары и мероприятия, настраивайте свои обсуждения и многое другое.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматирование текста для создания ярких сообщений\n\nВ Nextcloud Talk вы можете использовать синтаксис Markdown для форматирования сообщений. Например, применить форматирование **жирным шрифтом** или *курсивом* или `выделить текст как код`. Вы даже можете создавать таблицы и добавлять заголовки в текст.\n\nНужно исправить опечатку или изменить форматирование? Отредактируйте свое сообщение, нажав «Редактировать сообщение» в меню сообщения.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Добавление вложений и ссылок\n\nПрикрепляйте файлы из Nextcloud Hub с помощью кнопки «+». Делитесь элементами из «Файлов» и других приложений Nextcloud. Некоторые приложения даже поддерживают интерактивные виджеты, например, «Текст».", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Пусть разговоры идут своим чередом: упоминайте пользователей, реагируйте на сообщения и многое другое\n\nВы можете упомянуть всех участников обсуждения при помощи «%s», или конкретных участников, набрав «@» и выбрав имя из списка.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Вы можете отвечать на сообщения, пересылать их в другие чаты и людям, а также копировать содержимое сообщений.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Делайте больше с помощью Smart Picker\n\nПросто наберите «/» или перейдите в меню «+», чтобы открыть Smart Picker, где вы можете прикреплять к сообщениям различный контент. Вы можете настроить Smart Picker на добавление элементов из приложений Nextcloud, GIF-файлов, местоположения на карте, контента, сгенерированного ИИ, и многого другого.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Управление настройками обсуждения\n\nВ меню обсуждения вы можете получить доступ к различным настройкам, например:\n* Редактировать информацию об обсуждении\n* Управлять уведомлениями\n* Применять многочисленные правила модерации\n* Настроить доступ и безопасность\n* Включить ботов\n* и многое другое!", + "Andorra" : "Андорра", + "United Arab Emirates" : "Объединенные Арабские Эмираты", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа и Барбуда", + "Anguilla" : "Ангилья", + "Albania" : "Албания", + "Armenia" : "Армения", + "Angola" : "Ангола", + "Antarctica" : "Антарктика", + "Argentina" : "Аргентина", + "American Samoa" : "Американское Самоа", + "Austria" : "Австрия", + "Australia" : "Австралия", + "Aruba" : "Аруба", + "Åland Islands" : "Аландские острова", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Босния и Герцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельгия", + "Burkina Faso" : "Буркина-Фасо", + "Bulgaria" : "Болгария", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сен-Бартелеми", + "Bermuda" : "Бермудские Острова", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливия", + "Bonaire, Sint Eustatius and Saba" : "Бонэйр, Синт-Эстатиус и Саба", + "Brazil" : "Бразилия", + "Bahamas" : "Багамские острова", + "Bhutan" : "Бутан", + "Bouvet Island" : "Остров Буве", + "Botswana" : "Ботсвана", + "Belarus" : "Беларусь", + "Belize" : "Белиз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосовые (Килинг) острова", + "Congo, the Democratic Republic of the" : "Конго (Демократическая Республика)", + "Central African Republic" : "Центральная Африканская Республика", + "Congo" : "Конго", + "Switzerland" : "Швейцария", + "Côte d'Ivoire" : "Кот-д’Ивуар", + "Cook Islands" : "Острова Кука", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Китай", + "Colombia" : "Колумбия", + "Costa Rica" : "Коста-Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Остров Рождества", + "Cyprus" : "Кипр", + "Czechia" : "Чехия", + "Germany" : "Германия", + "Djibouti" : "Джибути", + "Denmark" : "Дания", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканская Республика", + "Algeria" : "Алжир", + "Ecuador" : "Эквадор", + "Estonia" : "Эстония", + "Egypt" : "Египет", + "Western Sahara" : "Западная Сахара", + "Eritrea" : "Эритрея", + "Spain" : "Испания", + "Ethiopia" : "Эфиопия", + "Finland" : "Финляндия", + "Fiji" : "Фиджи", + "Falkland Islands (Malvinas)" : "Фолкленские Острова", + "Micronesia, Federated States of" : "Федеративные Штаты Микронезии", + "Faroe Islands" : "Фарерские острова", + "France" : "Франция", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Соединённое Королевство Великобритании и Северной Ирландии", + "Grenada" : "Гренада", + "Georgia" : "Грузия", + "French Guiana" : "Французская Гайана", + "Guernsey" : "Гернси", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренландия", + "Gambia" : "Гамбия", + "Guinea" : "Гвинея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Экваториальная Гвинея", + "Greece" : "Греция", + "South Georgia and the South Sandwich Islands" : "Южная Георгия и Южные Сандвичевы Острова", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинея-Бисау", + "Guyana" : "Гайана", + "Hong Kong" : "Гонконг", + "Heard Island and McDonald Islands" : "Остров Херд и острова Макдональд", + "Honduras" : "Гондурас", + "Croatia" : "Хорватия", + "Haiti" : "Гаити", + "Hungary" : "Венгрия", + "Indonesia" : "Индонезия", + "Ireland" : "Ирландия", + "Israel" : "Израиль", + "Isle of Man" : "Остров Мэн", + "India" : "Индия", + "British Indian Ocean Territory" : "Британская территория Индийского океана", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Исламская Республика Иран", + "Iceland" : "Исландия", + "Italy" : "Италия", + "Jersey" : "Джерси", + "Jamaica" : "Ямайка", + "Jordan" : "Иордания", + "Japan" : "Япония", + "Kenya" : "Кения", + "Kyrgyzstan" : "Киргизия", + "Cambodia" : "Камбожда", + "Kiribati" : "Кирибати", + "Comoros" : "Коморы", + "Saint Kitts and Nevis" : "Сент-Китс и Невис", + "Korea, Democratic People's Republic of" : "Корейская Народная Демократическая Республика (КНДР)", + "Korea, Republic of" : "Корея", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Каймановы острова", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сент-Люсия", + "Liechtenstein" : "Лихтенштейн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерия", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвия", + "Libya" : "Ливия", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Черногория", + "Saint Martin (French part)" : "Сен-Мартен (владение Франции)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалловы Острова", + "North Macedonia" : "Северная Македония", + "Mali" : "Мали", + "Myanmar" : "Мьянма", + "Mongolia" : "Монголия", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северные Марианские Острова", + "Martinique" : "Мартиника", + "Mauritania" : "Мавритания", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикий", + "Maldives" : "Мальдивы", + "Malawi" : "Малави", + "Mexico" : "Мексика", + "Malaysia" : "Малайзия", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибия", + "New Caledonia" : "Новая Каледония", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолские Острова", + "Nigeria" : "Нигерия", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерланды", + "Norway" : "Норвегия", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуэ", + "New Zealand" : "Новая Зеландия", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французская Полинезия", + "Papua New Guinea" : "Папуа Новая Гвинея", + "Philippines" : "Филиппины", + "Pakistan" : "Пакистан", + "Poland" : "Польша", + "Saint Pierre and Miquelon" : "Сен-Пьер и Микелон", + "Pitcairn" : "Острова Питкэрн", + "Puerto Rico" : "Пуэрто Рико", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалия", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюньон", + "Romania" : "Румыния", + "Serbia" : "Сербия", + "Russian Federation" : "Российская Федерация", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудовская Аравия", + "Solomon Islands" : "Соломоновы Острова", + "Seychelles" : "Сейшельские Острова", + "Sudan" : "Судан", + "Sweden" : "Швеция", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Острова Святой Елены, Вознесения и Тристан-да-Кунья", + "Slovenia" : "Словения", + "Svalbard and Jan Mayen" : "Шпицберген и Ян-Майен", + "Slovakia" : "Словакия", + "Sierra Leone" : "Сьерра Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомали", + "Suriname" : "Суринам", + "South Sudan" : "Южный Судан", + "Sao Tome and Principe" : "Сантоме и Принсипи", + "El Salvador" : "Эль-Сальвадор", + "Sint Maarten (Dutch part)" : "Синт-Мартен Королевства Нидерландов", + "Syrian Arab Republic" : "Сирийская Арабская Республика", + "Eswatini" : "Эсватини", + "Turks and Caicos Islands" : "Теркс и Кайкос", + "Chad" : "Чад", + "French Southern Territories" : "Французские Южные Территории", + "Togo" : "Того", + "Thailand" : "Таиланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Восточный Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турция", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзания", + "Ukraine" : "Украина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Внешние малые острова США", + "United States of America" : "Соединенные Штаты Америки", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Ватикан", + "Saint Vincent and the Grenadines" : "Сант Винсент и Гренадины", + "Venezuela, Bolivarian Republic of" : "Венесуэла", + "Virgin Islands, British" : "Британские Вирджинские Острова", + "Virgin Islands, U.S." : "Американские Вирджинские Острова", + "Viet Nam" : "Вьетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоллис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майотта", + "South Africa" : "Южная Африка", + "Zambia" : "Замбия", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Размытие фона", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Не удалось проверить поддержку загрузки WASM. Проверьте вручную, обслуживает ли ваш веб-сервер файлы `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб-сервер неправильно настроен для доставки файлов `.wasm`. Обычно это проблема конфигурации Nginx. Для размытия фона требуется настройка, чтобы также доставлять файлы `.wasm`. Сравните вашу конфигурацию Nginx с рекомендуемой конфигурацией в нашей документации.", + "Talk configuration values" : "Значения конфигурации Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Принудительное задание продолжительности вызова поддерживается только системным cron. Включите системный cron или удалите конфигурацию `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Малые значения `max_call_duration` (в настоящее время установлено %d) не могут быть реализованы из-за технических ограничений. Фоновоя задача выполняется только каждые 5 минут, поэтому используйте его на свой риск.", + "Federation" : "Федерация", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Настойчиво рекомендуется настроить \"memcache.locking\" когда Talk Федерации включены.", + "High-performance backend" : "Высокопроизводительный сервер", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Высокопроизводительный сервер не сконфигурирован - использование Nextcloud Talk без Высокопроизводительного сервера подходит только для очень маленьких вызовов (не более 2-3 участников). Пожалуйста, настройте Высокопроизводительный сервер, чтобы обеспечить бесперебойную работу вызовов с несколькими участниками.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Режим Высокопроизводительного сервера \"conversation_cluster\" устарел и больше не будет поддерживаться в следующих версиях. Высокопроизводительный сервер теперь поддерживает настоящую кластеризацию, которую следует использовать вместо этого.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Поддержка нескольких Высокопроизводительных серверов устарела и больше не будет поддерживаться в следующих версиях. Вместо этого балансировщик нагрузки должен быть установлен вместе с кластеризованными сигнальными серверами и настроен в конфигурации Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Сохранённый открытый ключ для алгоритма %1$s не совпадает с сохранённым приватным ключом. Выполните %2$s чтобы исправить проблему.", + "High-performance backend not configured correctly. Run %s for details." : "Высокопроизводительный сервер неверно сконфигурирован. Выполните %s для получения деталей.", + "High-performance backend not configured correctly" : "Высокопроизводительный сервер неверно сконфигурирован", + "Error: Cannot connect to server" : "Ошибка: Не могу подключиться к серверу", + "Error: Server did not respond with proper JSON" : "Ошибка: Сервер вернул неверный JSON", + "Error: Certificate expired" : "Ошибка: Сертификат истёк", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Ошибка: Системное время сервера Nextcloud и Высокопроизводительного сервера не синхронизировано. Убедитесь, что оба сервера подключены к серверу времени, или вручную синхронизируйте их время.", + "Could not get version" : "Не удалось получить версию", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Ошибка: Текущая версия: {version}; Сервер необходимо обновить для совместимости с этой версией Talk", + "Error: Server responded with: {error}" : "Ошибка: Ответ сервера: {error}", + "Error: Unknown error occurred" : "Ошибка: Произошла неизвестная ошибка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Внимание: Текущая версия: {version}; Сервер не поддерживает все функции этой версии Talk, недоступные функции: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Настойчиво рекомендуется настроить распределенный кэш для использования Nextcloud Talk совместно с Высокопроизводительным сервером.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "«Client Push» установлен, это улучшает скорость получения уведомлений в Talk", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "«{notify_push}» не установлен, это может привести к замедленному получению уведомлений в Talk", + "Recording backend" : "Сервер записи вызовов", + "Using the recording backend requires a High-performance backend." : "Использование сервера для записи вызовов требует для работы Высокопроизводительный сервер", + "No recording backend configured" : "Сервер записи вызовов не настроен", + "SIP configuration" : "Параметры SIP", + "Using the SIP functionality requires a High-performance backend." : "Использование функционала SIP требует для работы Высокопроизводительный сервер", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Назначенные номера телефонов Talk не должны начинаться с + или 0. Пожалуйста, удалите или обновите следующие номера:\n{list}", + "No SIP backend configured" : "Сервер SIP не настроен", + "Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, дата должна быть в формате «ГГГГ-ММ-ДД»", + "Conversation not found" : "Обсуждение не найдено", + "Path is already shared with this conversation" : "Этот путь уже опубликован в обсуждении", + "Chat, video & audio-conferencing using WebRTC" : "Чат, видео- и аудиоконференции, основанные на технологии WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Мессенджер, видео- и аудио-конференции с использованием WebRTC\n\n* 💬 **Мессенджер** Nextcloud Talk предлагает простой чат для обмена сообщениями, позволяя делиться или загружать файлы из вашего приложения Nextcloud Files или устройства и упоминать других участников.\n* 👥 **Персональные, групповые, публичные и защищенные паролем звонки!** Пригласите человека, целую группу или отправьте публичную ссылку чтобы пригласить в вызов.\n* 🌐 **Федеративные обсуждения** Обменивайтесь сообщениями с другими пользователями Nextcloud на удаленном сервере\n* 💻 **Демонстрация экрана!** Делитесь своим экраном с участниками вызова.\n* 🚀 **Интеграция с другими приложениями Nextcloud** как Файлы, Календарь, Состояние, Виджеты, Обработка файлов, Карты, Умный выбор, Контакты, Карточки, и другие.\n* 🌉 **Синхронизация с другими мессенджерами** С помощью [Matterbridge](https://github.com/42wim/matterbridge/) интегрированного в Talk, вы легко можете синхронизировать множество других мессенджеров и решений с Nextcloud Talk и наоборот.", + "Leave call" : "Покинуть вызов", + "Navigating away from the page will leave the call in {conversation}" : "При переходе с этой страницы вы покинете вызов в {conversation}", + "Stay in call" : "Не покидать вызов", + "Error occurred when getting the conversation information" : "Произошла ошибка при получении информации об обсуждении", + "Discuss this file" : "Обсудить этот файл", + "Share this file with others to discuss it" : "Опубликовать этот файл для обсуждения", + "Share this file" : "Опубликовать файл", + "Join conversation" : "Присоединиться к обсуждению", + "This conversation is password-protected." : "Это обсуждение защищено паролем.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "С вашего IP-адреса было выполнено множество неудачных попыток входа в систему. Следующую попытку можно будет выполнить через 30 секунд.", + "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", + "Password" : "Пароль", + "Submit" : "Отправить ответ", + "Error requesting the password." : "Ошибка запроса пароля", + "Request password" : "Запрос пароля", + "This conversation has ended" : "Обсуждение закончено", + "Error occurred when joining the conversation" : "Произошла ошибка при присоединении к обсуждению", + "Close Talk sidebar" : "Закрыть боковую панель", + "Open Talk sidebar" : "Открыть боковую панель", + "Everyone" : "Все", + "Users and moderators" : "Пользователи и модераторы", + "Moderators only" : "Только модераторы", + "Disable calls" : "Отключить вызовы", + "Save changes" : "Сохранить изменения", + "Saving …" : "Сохранение…", + "Saved!" : "Сохранено!", + "Limit to groups" : "Разрешить использование только участникам этих групп", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Когда выбрана хотя бы одна группа, только участники перечисленных групп могут участвовать в обсуждениях.", + "Guests can still join public conversations." : "Ограничения не распространяются на гостей в открытых обсуждениях.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Пользователи, которые больше не смогут использовать приложение «Talk», всё ещё будут перечислены, как участники своих прошлых обсуждений, а их сообщения будут сохранены.", + "Limit using Talk" : "Ограничить использование Talk", + "Limit creating a public and group conversation" : "Ограничить создание открытых и групповых обсуждений", + "Limit creating conversations" : "Ограничить создание обсуждений", + "Limit starting a call" : "Ограничить возможность начинать вызов", + "Limit starting calls" : "Ограничить возможность начинать вызов", + "When a call has started, everyone with access to the conversation can join the call." : "Присоединиться к выполняемому вызову могут все, обладающими правами доступа к обсуждению.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Следующие боты установлены на этом сервере. В документации вы можете найти подробную информацию о том, как {linkstart1}создать собственного бота{linkend}, или {linkstart2}список ботов{linkend}, которых можно включить на вашем сервере.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Ни один бот не установлен на этом сервере. В документации вы можете найти подробную информацию о том, как {linkstart1}создать собственного бота{linkend}, или {linkstart2}список ботов{linkend}, которых можно включить на вашем сервере.", + "Description is not provided" : "Описание не предоставлено", + "Locked for moderators" : "Заблокировано для модераторов", + "Enabled" : "Включено", + "Disabled" : "Отключено", + "Bots settings" : "Настройки ботов", + "State" : "Состояние", + "Name" : "Название", + "Last error" : "Последняя ошибка", + "Total errors count" : "Общее количество ошибок", + "Find more bots" : "Найти больше ботов", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Доверенные серверы можно настроить на {linkstart}странице настроек обмена{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Обмен сообщениями и вызовы в федеративных обсуждениях работают. Обмен файлами появится в будущих версиях.", + "Enable Federation in Talk app" : "Включить Федерацию в приложении Talk", + "Permissions" : "Права доступа", + "Allow users to be invited to federated conversations" : "Разрешить пользователям быть приглашенными в федеративные обсуждения", + "Allow users to invite federated users into conversation" : "Разрешить пользователям приглашать федеративных пользователей в обсуждение", + "Only allow to federate with trusted servers" : "Разрешить федерации только с доверенными серверами", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Когда выбрана хотя бы одна группа, только участники перечисленных групп могут приглашать федеративных пользователей в обсуждения.", + "Groups allowed to invite federated users" : "Группы, которым разрешено приглашать федеративных пользователей", + "Select groups …" : "Выбрать группы …", + "All messages" : "Все сообщения", + "@-mentions only" : "Только @-упоминания", + "Off" : "Отключить", + "General settings" : "Основные настройки", + "Default notification settings" : "Настройки уведомлений по умолчанию", + "Default group notification" : "Групповое уведомление по умолчанию:", + "Default group notification for new groups" : "Уведомление для новых групп по умолчанию", + "Integration into other apps" : "Встраивание в другие приложения", + "Allow conversations on files" : "Разрешить обсуждения файлов", + "Allow conversations on public shares for files" : "Разрешить создание обсуждений для общедоступных файлов", + "End-to-end encrypted calls" : "Вызовы со сквозным шифрованием", + "Enable encryption" : "Включить шифрование", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Для вызовов со сквозным шифрованием с настроенным SIP-мостом требуется более новая версия Высокопроизводительного сервера и SIP-моста.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Мобильные устройства на данный момент не поддерживают сквозное шифрование вызовов.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "При нажатии кнопки, расположенной выше, заполненные данные формы будут переданы на серверы компании Struktur AG. Дополнительные сведения представлены на сайте {linkstart}spreed.eu{linkend}.", + "Pending" : "Ожидается", + "Error" : "Ошибка", + "Blocked" : "Заблокировано", + "Active" : "Активно", + "Expired" : "Истекло", + "Never" : "Никогда", + "The trial could not be requested. Please try again later." : "Не удалось запросить пробный период использования, повторите попытку через некоторое время.", + "The account could not be deleted. Please try again later." : "Аккаунт не может быть удален. Повторите попытку позже.", + "Hosted High-performance backend" : "Размещенный Высокопроизводительный сервер", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Struktur AG, партнёр Nextcloud, предоставляет возможность запросить запросить использование размещаемого сигнального сервера. Для получения доступа требуется заполнить приведённую ниже форму. После настройки сервера данные для подключения будут заполнены автоматически. Внимание: это действие перезапишет существующие параметры сигнального сервера.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Если ваш аккаунт Высокопроизводительного сервера включает STUN и/или TURN, настройки будут обновлены автоматически.", + "URL of this Nextcloud instance" : "URL данного сервера Nextcloud", + "Full name of the user requesting the trial" : "Полное имя пользователя, запрашивающего пробную версию", + "Email of the user" : "Адрес эл.почты пользователя", + "Language" : "Язык", + "Country" : "Страна", + "Request signaling server trial" : "Запросить пробную версию сигнального сервера", + "You can see the current status of your hosted signaling server in the following table." : "Вы можете просматривать статус вашего сигнального сервера в таблице ниже.", + "Status" : "Статус", + "Created at" : "Создано", + "Expires at" : "Истекает", + "Limits" : "Ограничения", + "STUN included" : "STUN включён", + "Yes" : "Да", + "No" : "Нет", + "TURN included" : "TURN включён", + "Delete the signaling server account" : "Удалить аккаунт сигнального сервера", + "_%n user_::_%n users_" : ["%n пользователь","%n пользователя","%n пользователей","%n пользователя"], + "Installed version: {version}" : "Установленная версия: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Вы можете установить Matterbridge, чтобы связать Nextcloud Talk с некоторыми другими сервисами. Подробную информацию можно найти на их {linkstart1}странице GitHub{linkend}. Загрузка и установка приложения может занять некоторое время. Если время ожидания истекло, установите его вручную из {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Исполняемому файлу Matterbridge назначены неверные права доступа. Убедитесь, что файлу назначен верный владелец и права на исполнение. Файл расположен в каталоге «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Исполняемый файл Matterbridge не найден или не может быть запущен.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Расположение исполняемых файлов Matterbridge может быть заданно вручную в файле конфигурации. Дополнительные сведения представлены в {linkstart}документации по настройке Matterbridge{linkend}.", + "Downloading …" : "Загрузка…", + "Install Talk Matterbridge" : "Установить Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Не удалось установить приложение Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Не удалось установить Talk Matterbridge, установите его вручную", + "Failed to execute Matterbridge binary." : "Не удалось запустить исполняемый файл Matterbridge.", + "Matterbridge integration" : "Интеграция Matterbridge", + "Enable Matterbridge integration" : "Включить Matterbridge", + "Status: Checking connection" : "Статус: Проверка соединения", + "OK: Running version: {version}" : "OK: Текущая версия: {version}", + "Error: Server seems to be a Signaling server" : "Ошибка: сервер являетcя сигнальным сервером", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Ошибка: Системное время сервера Nextcloud и сервера записи вызовов не синхронизировано. Убедитесь, что оба сервера подключены к серверу времени, или вручную синхронизируйте их время.", + "Recording backend URL" : "URL сервера записи вызовов", + "Validate SSL certificate" : "Проверять сертификат SSL", + "Delete this server" : "Удалить этот сервер", + "Test this server" : "Проверить сервер", + "Disabled for all calls" : "Отключено для всех вызовов", + "Enabled for all calls" : "Включено для всех вызовов", + "Configurable on conversation level by moderators" : "Настраиваемо модераторами на уровне обсуждения", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Настройки PHP \"upload_max_filesize\" или \"post_max_size\" позволяют загружать только файлы размером до {maxUpload}.", + "Recording backend settings saved" : "Настройки бэкенда записи ВКС сохранены", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модераторам будет разрешено включать согласие на запись на уровне обсуждения. Подтвержденное согласие будет требоваться от каждого участника перед присоединением к каждому вызову в этом обсуждении.", + "The consent to be recorded will be required for each participant before joining every call." : "Согласие на запись будет требоваться от каждого участника перед присоединением к каждому вызову.", + "The consent to be recorded is not required." : "Согласие на запись не требуется.", + "Recording backend configuration is only possible with a High-performance backend." : "Конфигурация сервера для записи вызовов возможна только с Высокопроизводительным сервером.", + "Add a new recording backend server" : "Добавить новый сервер записи вызовов", + "Shared secret" : "Общая секретная фраза", + "Recording consent" : "Согласие на запись вызова", + "Recording transcription" : "Расшифровка записей вызовов", + "Automatically transcribe call recordings with a transcription provider" : "Автоматическая расшифровка записей вызовов с помощью приложения - транскриптора", + "Automatically summarize call recordings with transcription and summary providers" : "Автоматическое резюме записей вызовов с помощью приложений - транскриптора и резюме", + "SIP configuration saved!" : "Параметры SIP сохранены", + "SIP configuration is only possible with a High-performance backend." : "Конфигурация SIP возможна только с Высокопроизводительным сервером.", + "Enable SIP Dial-out option" : "Включить опцию исходящего вызова по SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Сигнальный сервер необходимо обновить для поддержки функции исходящего вызова по SIP.", + "Do not show SIP Dial-out caller number" : "Не показывать номер исходящего вызова по SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонимный номер должен отобразиться как \"Неизвестный\" или \"Номер скрыт\" для ответчика", + "Dial-out number" : "Номер исходящего вызова", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Номер в формате E164, используемый как резервный номер звонящего для исходящих вызовов", + "Dial-out prefix" : "Префикс исходящего вызова", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префикс к номеру пользователя для исходящих вызовов (`+` по умолчанию)", + "Restrict SIP configuration" : "Ограничить возможность настройки SIP", + "Enable SIP configuration" : "Выберите группы, которым разрешено использовать SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Разрешить использование протокола SIP только пользователям указанных групп в модерируемых ими конференциях", + "Phone number (Country)" : "Номер телефона", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Эти сведения будут добавлены в письма-приглашения и показаны всем участникам в боковой панели.", + "Nextcloud base URL" : "Адрес сервера Nextcloud (base URL)", + "Talk Backend URL" : "Адрес сервера Talk (Backend URL)", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Доступные возможности", + "Error: Websocket connection failed" : "Ошибка при установлении Websocket соединения", + "Error code" : "Код ошибки", + "Error message" : "Сообщение ошибки", + "Error: Websocket connection failed. Check browser console" : "Ошибка при установлении Websocket соединения. Проверьте консоль браузера", + "High-performance backend URL" : "URL Высокопроизводительного сервера", + "Missing High-performance backend warning hidden" : "Скрыто предупреждение об отсутствующем Высокопроизводительном сервере", + "High-performance backend settings saved" : "Параметры Высокопроизводительного сервера сохранены", + "Nextcloud Talk setup not complete" : "Конфигурация Nextcloud Talk не завершена", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Обратите внимание, что в вызовах с более чем 2 участниками без Высокопроизводительного сервера, участники могут испытывать проблемы со связью и получать сильную нагрузку на свои устройства.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Установите Высокопроизводительный сервер, чтобы вызовы с несколькими участниками работали корректно.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Краткое руководство по установке", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Высокопроизводительный сервер необходим для вызовов и обсуждений с несколькими участниками. Без сервера всем участникам придется загружать свое видео отдельно для каждого собеседника, что, скорее всего, приведет к проблемам со связью и высокой нагрузке на используемые устройства.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Настойчиво рекомендуется настроить распределенный кэш для использования Nextcloud Talk совместно с Высокопроизводительным сервером.", + "Add High-performance backend server" : "Добавить Высокопроизводительный сервер", + "Warn about connectivity issues in calls with more than 2 participants" : "Предупреждать о проблемах со связью в вызовах с более чем 2 участниками", + "STUN server URL" : "URL cервера STUN", + "The server address is invalid" : "Указан недействительный адрес сервера", + "STUN settings saved" : "Параметры STUN сохранены", + "STUN servers" : "Сервер STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Сервер STUN используется для определения общедоступного IP адреса участников за маршрутизатором.", + "Add a new STUN server" : "Добавить сервер STUN", + "{schema} scheme must be used with a domain" : "использование схемы {schema} возможно только в домене", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "только {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: кандидаты ICE получены с сервера TURN", + "Error: No working ICE candidates returned by the TURN server" : "Ошибка: работоспособные кандидаты ICE не получены с сервера TURN", + "Testing whether the TURN server returns ICE candidates" : "Проверка получения кандидатов ICE с сервера TURN", + "TURN server schemes" : "Схемы сервера TURN", + "TURN server URL" : "URL сервера TURN", + "TURN server secret" : "Секретный ключ TURN-сервера", + "TURN server protocols" : "Протоколы сервера TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Сервер TURN (Traversal Using Relay NAT) используется для перенаправления данных для участников, расположенных за брандмауэром. Сервер TURN необходим, если участники не могут устанавливать прямое соединение. Сведения по настройке приведены в {linkstart}документации{linkend}.", + "TURN settings saved" : "Параметры TURN сохранены", + "TURN servers" : "TURN-серверы", + "Add a new TURN server" : "Добавить сервер TURN", + "Failed" : "Не удалось", + "OK" : "ОК", + "Checking …" : "Проверка...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Не удалось: WebAssembly отключена или не поддерживается в этом браузере. Пожалуйста, включите WebAssembly или используйте браузер с его поддержкой для выполнения проверки.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Не удалось: Файлы \".wasm\" и \".tflite\" некорректно возвращены веб-сервером. Пожалуйста, проверьте раздел \"Системные требования\" в документации Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файлы \".wasm\" и \".tflite\" корректно возвращены веб-сервером.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Предположительно, конфигурация PHP и Apache несовместима. Обратите внимание, что PHP можно использовать только с модулем MPM_PREFORK, а PHP-FPM можно использовать только с модулем MPM_EVENT.", + "Web server setup checks" : "Проверка настройки веб-сервера", + "Files required for virtual background can be loaded" : "Файлы, необходимые для виртуального фона, могут быть загружены", + "Federated user" : "Федеративный пользователь", + "Assign participants to rooms" : "Назначить участников в комнаты", + "Configure breakout rooms" : "Настроить комнаты обсуждения", + "Number of breakout rooms" : "Количество комнат обсуждения", + "You can create from 1 to 20 breakout rooms." : "Вы можете создать от 1 до 20 комнат обсуждения.", + "Assignment method" : "Метод назначения", + "Automatically assign participants" : "Назначить участников автоматически", + "Manually assign participants" : "Назначить участников вручную", + "Allow participants to choose" : "Разрешить участникам выбирать", + "Create rooms" : "Создать комнаты обсуждения", + "Confirm" : "Подтвердить", + "Create breakout rooms" : "Создать комнаты обсуждения", + "Reset" : "Сбросить", + "Delete breakout rooms" : "Удалить комнаты обсуждения", + "Room {roomNumber}" : "Комната {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текущие комнаты обсуждения и настройки будут сброшены", + "Cancel" : "Отмена", + "Unassigned participants" : "Неназначенные участники", + "Back" : "Назад", + "Assign" : "Назначить", + "Add participant \"{user}\"" : "Добавить участника «{user}»", + "Now" : "Сейчас", + "Invalid calendar selected" : "Выбран недопустимый календарь", + "Invalid start time selected" : "Выбрано недопустимое время старта", + "Invalid end time selected" : "Выбрано недопустимое время окончания", + "Unknown error occurred" : "Произошла неизвестная ошибка", + "Sending no invitations" : "Не отправлять никаких приглашений", + "{participant0} will receive an invitation" : "{participant0} получит приглашение", + "{participant0} and {participant1} will receive invitations" : "{participant0} и {participant1} получат приглашения", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения"], + "Invite {user}" : "Пригласить {user}", + "Invite all users and emails in this conversation" : "Пригласить всех пользователей и адреса эл. почты в этом обсуждении", + "Meeting created" : "Встреча создана", + "Upcoming meetings" : "Предстоящие встречи", + "Loading …" : "Загрузка…", + "No upcoming meetings" : "Нет предстоящих встреч", + "Schedule a meeting" : "Запланировать встречу", + "Meeting title" : "Заголовок встречи", + "From" : "От", + "To" : "Кому", + "Calendar" : "Календарь", + "Attendees" : "Участники", + "No other participants to send invitations to." : "Нет других участников, чтобы отправить приглашения.", + "Add attendees" : "Добавить участников", + "Save" : "Сохранить", + "Search participants" : "Искать участников", + "No results" : "Нет результатов", + "Done" : "Выполненные", + "Disable live transcription" : "Отключить онлайн-транскрипцию", + "Enable live transcription (generated by AI)" : "Включить онлайн-транскрипцию (генерируется с ИИ)", + "Enable live transcription (Live transcriptions app is not installed)" : "Включить онлайн-транскрипцию (приложение не установлено)", + "Disable live translation" : "Отключить онлайн-перевод", + "Enable live translation (generated by AI)" : "Включить онлайн-перевод (генерируется с ИИ)", + "Original language" : "Исходный язык", + "Live translations app is not installed" : "Приложение для онлайн-перевода не установлно", + "Original language: {languageName}" : "Язык оригинала: {languageName}", + "Translated language" : "Язык для перевода", + "Translated language: {languageName}" : "Язык для перевода: {languageName}", + "Raise hand" : "Поднять руку", + "Raise hand (R)" : "Поднять руку (R)", + "Lower hand" : "Опустить руку", + "Lower hand (R)" : "Опустить руку (R)", + "Exit full screen (F)" : "Выйти из полноэкранного режима (F)", + "Full screen (F)" : "Во весь экран (F)", + "Speaker view" : "Режим показа выступающего", + "Grid view" : "Вид сеткой", + "Error when trying to load the available live transcription languages" : "Ошибка при попытке загрузить доступные языки для онлайн-транскрипции", + "Failed to enable live transcription" : "Ошибка при включении онлайн-транскрипции", + "Failed to enable live translations" : "Ошибка при включении онлайн-перевода", + "Failed to disable live translations" : "Ошибка при отключении онлайн-перевода", + "Recording consent is required" : "Требуется согласие на запись", + "This conversation is read-only" : "Это обсуждение доступно только для чтения", + "Conversation not found or not joined" : "Обсуждение не найдено или к нему не присоединились", + "Lobby is still active and you're not a moderator" : "Комната ожидания ещё активна и вы не являетесь модератором", + "Connection failed" : "Сбой подключения", + "Reload" : "Обновить", + "{nickName} raised their hand." : "{nickName} поднял(а) руку.", + "A participant raised their hand." : "Участник поднял руку.", + "Collapse stripe" : "Свернуть ленту", + "Expand stripe" : "Развернуть ленту", + "Previous page of videos" : "Предыдущая страница с видео", + "Next page of videos" : "Следующая страница с видео", + "Connecting …" : "Соединение…", + "Calling …" : "Вызов …", + "Waiting for {user} to join the call" : "Ожидание подключения к вызову пользователя {user}", + "Waiting for others to join the call …" : "Ожидание подключения к вызову остальных пользователей…", + "You can invite others in the participant tab of the sidebar" : "Другие участники могут быть приглашены через боковую панель", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Вы можете пригласить других на вкладке участников боковой панели или поделиться этой ссылкой для приглашения!", + "Share this link to invite others!" : "Используйте эту ссылку для приглашения других участников!", + "Copy link" : "Копировать ссылку", + "You are not allowed to enable audio" : "Вам не разрешено использовать аудио", + "No audio. Click to select device" : "Нет аудио. Нажмите, чтобы выбрать устройство", + "Mute audio" : "Отключить звук", + "Mute audio (M)" : "Отключить звук (M)", + "Unmute audio" : "Включить звук", + "Unmute audio (M)" : "Включить звук (M)", + "None" : "Не использовать", + "Select a microphone" : "Выбрать микрофон", + "Select a speaker" : "Выбрать динамик", + "Microphone settings" : "Параметры микрофона", + "Check devices" : "Проверить устройства", + "Access to camera was denied" : "Доступ к камере запрещён", + "Error while accessing camera: It is likely in use by another program" : "Ошибка при доступе к камере: Вероятно, она используется другой программой", + "Error while accessing camera" : "Ошибка при доступе к камере", + "You have been muted by a moderator" : "Ваш микрофон был отключен модератором", + "Hide presenter video" : "Скрыть видео выступающего", + "You are not allowed to enable video" : "Вам не разрешено использовать видео", + "No video. Click to select device" : "Нет видео. Нажмите, чтобы выбрать устройство", + "Disable video" : "Отключить видео", + "Disable video (V)" : "Отключить видео (V)", + "Enable video" : "Включить видео", + "Enable video (V)" : "Включить видео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Разрешить видео - Ваше соединение будет прервано, когда разрешаете видео в первый раз", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Включение трансляции видео (V) - подключение будет кратковременно прервано при первом включении.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Включение трансляции видео. Подключение будет кратковременно прервано при первом включении.", + "Select a video device" : "Выбрать камеру", + "Show presenter" : "показать выступающего", + "You" : "Вы", + "Mute" : "Отключить звук", + "Muted" : "Звук отключен", + "Show screen" : "Показать экран", + "Stop following" : "Прекратить отслеживание", + "Connection could not be established …" : "Не удалось установить соединение ...", + "Connection was lost and could not be re-established …" : "Соединение было потеряно и не может быть восстановлено ...", + "Connection could not be established. Trying again …" : "Не удалось установить соединение. Повторите попытку ...", + "Connection lost. Trying to reconnect …" : "Соединение потеряно. Попытка повторного подключения ...", + "Connection problems …" : "Проблемы с подключением ...", + "Collapse" : "Свернуть", + "Expand" : "Развернуть", + "You need to be logged in to upload files" : "Для добавления файлов необходимо войти в систему", + "Drop your files to upload" : "Для загрузки файлов, перетащите их сюда", + "Conversation messages" : "Сообщения обсуждения", + "Scroll to bottom" : "Прокрутить вниз", + "Post message" : "Опубликовать сообщение", + "Federated conversation" : "Федеративное обсуждение", + "Public conversation" : "Открытое обсуждение", + "Favorite" : "Избранное", + "Banned users" : "Забаненные пользователи", + "Manage the list of banned users in this conversation." : "Управляйте списком забаненных пользователей в этом обсуждении.", + "Manage bans" : "Управлять банами", + "No banned users" : "Нет забаненных пользователей", + "Banned by:" : "Забанен:", + "Date:" : "Дата:", + "Note:" : "Примечание:", + "Hide details" : "Скрыть подробные сведения", + "Show details" : "Подробные сведения", + "Unban" : "Разбанить", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : " Вы можете изменить название и описание в {linkstart}Календаре ↗{linkend}.", + "Error while updating conversation name" : "Ошибка при изменении названия обсуждения", + "Error while updating conversation description" : "Не удалось изменить описание обсуждения", + "Enter a name for this conversation" : "Введите название обсуждения", + "Edit conversation name" : "Изменить название обсуждения", + "Edit conversation description" : "Изменить описание обсуждения", + "Enter a description for this conversation" : "Задайте описание этого обсуждения", + "Picture" : "Изображение", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Следующие боты могут быть включены в этом обсуждении. Свяжитесь с вашей администрацией, чтобы установить больше ботов на этом сервере.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Ни один бот не установлен на этом сервере. Свяжитесь с вашей администрацией, чтобы установить больше ботов на этом сервере.", + "Disable" : "Отключить", + "Enable" : "Включить", + "The bot is not available anymore" : "Бот больше не доступен", + "Breakout rooms" : "Комнаты обсуждения", + "Manage breakout rooms" : "Управлять комнатами обсуждения", + "Set up breakout rooms for this conversation" : "Настроить комнаты обсуждения для этого обсуждения", + "Please select a valid PNG or JPG file" : "Выберите файл в формате .png или .jpg", + "Choose your conversation picture" : "Выберите свое изображение для обсуждения ", + "Choose" : "Выберите", + "Error setting conversation picture" : "Ошибка при установке изображения для обсуждения", + "Could not set the conversation picture: {error}" : "Не удалось установить изображение для обсуждения: {error}", + "Error cropping conversation picture" : "Не удалось обрезать изображение для обсуждения", + "Error removing conversation picture" : "Ошибка удаления изображения из обсуждения", + "Set emoji as conversation picture" : "Установить эмодзи в качестве изображения обсуждения", + "Set background color for conversation picture" : "Установить цвет фона для изображения обсуждения", + "Upload conversation picture" : "Загрузить изображение обсуждения", + "Choose conversation picture from files" : "Выбрать аватар обсуждения из Файлов", + "Remove conversation picture" : "Удалить изображение обсуждения", + "The file must be a PNG or JPG" : "Файл должен быть в формате PNG или JPG", + "Set picture" : "Установить изображение", + "Default permissions modified for {conversationName}" : "Разрешения по умолчанию изменены для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не удалось изменить разрешения по умолчанию для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Редактирование разрешений по умолчанию для участников этого обсуждения. Эти настройки не влияют на модераторов.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Каждый раз, когда разрешения изменяются в этом разделе, пользовательские разрешения, ранее назначенные отдельным участникам, будут потеряны.", + "All permissions" : "Все разрешения", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Участники полноправны начинать вызов, присоединяться к вызову, включать аудио- и видеосвязь и транслировать экран.", + "Restricted" : "Ограниченный", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Участники могут присоединиться к звонкам, но не могут включить аудио- и видеосвязь, а также трансляцию экрана, пока модератор вручную не предоставит им соответствующие разрешения.", + "Advanced permissions" : "Дополнительные разрешения", + "Edit permissions" : "Разрешения на редактирование", + "Conversation settings" : "Настройки обсуждения", + "Basic Info" : "Базовая информация", + "Personal" : "Личное", + "Moderation" : "Модерация", + "Setup overview" : "Обзор настроек", + "Live transcription" : "Онлайн-транскрипция", + "Live transcriptions app is not installed" : "Приложение для онлайн-транскрипции не установлно", + "Enable live transcription" : "Включить онлайн-транскрипцию", + "Breakout Rooms" : "Комнаты обсуждения", + "Matterbridge" : "Matterbridge", + "Bots" : "Боты", + "Danger zone" : "Опасная зона", + "Archive conversation" : "Архивировать обсуждение", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивированные обсуждения скрыты из списка обсуждений по умолчанию. Однако, они всё ещё доступны при поиске обсуждения по имени или при открытии списка архивированных обсуждений", + "Do you really want to leave \"{displayName}\"?" : "Действительно покинуть «{displayName}»?", + "You can archive this conversation instead." : "Вместо этого Вы можете архивировать обсуждение.", + "Leave conversation" : "Покинуть обсуждение", + "You need to promote a new moderator before you can leave the conversation" : "Вам нужно назначить нового модератора перед тем, как покинуть обсуждение", + "Delete conversation" : "Удалить обсуждение", + "Do you really want to delete \"{displayName}\"?" : "Действительно удалить «{displayName}»?", + "Error while deleting conversation" : "Ошибка при удалении обсуждения", + "Delete all chat messages" : "Удалить все сообщения", + "Do you really want to delete all messages in \"{displayName}\"?" : "Действительно удалить все сообщения в «{displayName}\"»?", + "Error while clearing chat history" : "Не удалось очистить историю сообщений", + "Be careful, these actions cannot be undone." : "Будьте осторожны, эти действия нельзя отменить.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Если обсуждение было покинуто, для повторного присоединения требуется приглашение. К открытым обсуждениям возможно присоединиться в любое время.", + "Permanently delete this conversation." : "Безвозвратно удалить это обсуждениe.", + "Delete chat messages" : "Удалить сообщения", + "Permanently delete all the messages in this conversation." : "Безвозвратно удалить все сообщения в этом обсуждении.", + "_%n hour_::_%n hours_" : ["%n час","%n часа","%n часов","%n часа"], + "_%n day_::_%n days_" : ["%n день","%n дня","%n дней","%n дня"], + "_%n week_::_%n weeks_" : ["%n неделя","%n недели","%n недель","%n недели"], + "Custom expiration time" : "Установить срок жизни", + "Message expiration disabled" : "Срок жизни сообщений отключен", + "Message expiration set: {duration}" : "Срок жизни сообщений установлен: {duration}", + "Error when trying to set message expiration" : "Ошибка при попытке установить срок жизни сообщений", + "Message expiration" : "Срок жизни сообщений", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Сообщения чата могут быть удалены по истечении определенного времени. Примечание: Файлы, переданные в чате, не будут удалены для владельца, но больше не будут доступны в обсуждении.", + "Set message expiration" : "Установить срок жизни сообщений", + "Current message expiration" : "Текущий срок жизни сообщений", + "Password copied to clipboard" : "Пароль скопирован в буфер обмена", + "Password could not be copied" : "Не удалось скопировать пароль", + "Guest access" : "Гостевой доступ", + "Breakout rooms are not allowed in public conversations." : "Комнаты обсуждения недоступны в открытых обсуждениях", + "Allow guests to join this conversation via link" : "Разрешить гостям присоединяться к обсуждению по ссылке", + "Password protection" : "Защита паролем", + "This conversation is password-protected. Guests need password to join" : "Это обсуждение защищено паролем. Гостям требуется пароль, чтобы присоединиться", + "Password protection is needed for public conversations" : "Защита паролем требуется для публичных обсуждений", + "Set a password" : "Задать пароль", + "Change password" : "Сменить пароль", + "Enter new password" : "Введите новый пароль", + "Save password" : "Сохранить пароль", + "Copy password" : "Копировать пароль", + "Guests are allowed to join this conversation via link" : "Гости могут присоединяться к обсуждению по ссылке", + "Guests are not allowed to join this conversation" : "Гостям не разрешено присоединяться к этому обсуждению", + "Resend invitations" : "Повторно отправить приглашения", + "This conversation is open to both registered users and users created with the Guests app" : "Это обсуждение открыто для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "This conversation is open to registered users" : "Обсуждение открыто для зарегистрированных пользователей", + "This conversation is limited to the current participants" : "Обсуждение ограничено текущими участниками", + "You opened the conversation to both registered users and users created with the Guests app" : "Вы открыли обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "Error occurred when opening or limiting the conversation" : "Не удалось открыть или ограничить доступ к обсуждению", + "Open conversation to registered users, showing it in search results" : "Это обсуждение будет показано в результатах поиска для зарегистрированных пользователей", + "Also open to users created with the Guests app" : "Также открыть для пользователей, созданных через приложение «Гости»", + "Open conversation" : "Открытое обсуждение", + "Set language spoken in calls" : "Установить язык, используемый при вызове", + "Languages could not be loaded" : "Языки не могут быть загружены", + "Loading languages …" : "Загрузка языков …", + "Invalid language" : "Недопустимый язык", + "Default language (English)" : "Язык по умолчанию (English)", + "Default live transcription language set" : "Язык для онлайн-транскрипции по умолчанию установлен", + "Live transcription language set: {languageName}" : "Язык для онлайн-транскрипции установлен: {languageName}", + "Error when trying to set live transcription language" : "Ошибка при попытке установить язык для онлайн-транскрипции", + "Start time: {date}" : "Время начала: {date}", + "Start time has been updated" : "Время начала изменено", + "Error occurred while updating start time" : "Не удалось изменить время начала", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Включение лобби отключит всех, кроме модераторов, от текущего вызова.", + "Enable lobby, restricting the conversation to moderators" : "Включить лобби, ограничив доступ к обсуждению только для модераторов", + "Meeting start time" : "Время начала встречи", + "Start time (optional)" : "Время начала (необязательно)", + "Import email participants" : "Импортировать участников по адресам эл. почты", + "You can import a list of email participants from a CSV file." : "Вы можете импортировать участников по адресам эл. почты из CSV файла.", + "Poll drafts" : "Черновики опросов", + "Browse poll drafts" : "Просмотреть черновики опросов", + "Error occurred when locking the conversation" : "Не удалось заблокировать обсуждение", + "Error occurred when unlocking the conversation" : "Не удалось разблокировать обсуждение", + "Lock conversation" : "Заблокировать обсуждение", + "This will also terminate the ongoing call." : "Это также прервет текущий разговор.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Заблокировать обсуждение, чтобы запретить кому-либо отправлять сообщения или начинать вызов", + "Edit" : "Редактировать", + "More information" : "Дополнительные сведения", + "Delete" : "Удалить", + "Add new bridged channel to current conversation" : "Добавить к обсуждению новый канал обмена сообщениями", + "unknown state" : "неизвестное состояние", + "running" : "запущено", + "not running, check Matterbridge log" : "не запущено, проверьте журнал Matterbridge", + "not running" : "не запущено", + "Bridge saved" : "Параметры обмена сохранены", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge позволяет настроить обмен сообщеними с различными службами моментальных сообщений.", + "More info on Matterbridge" : "Дополнительные сведения о Matterbridge", + "Messaging systems" : "Системы обмена сообщениями", + "Enable bridge" : "Включить обмен собщениями", + "Show Matterbridge log" : "Открыть журнал Matterbridge", + "Log content" : "Записи журнала", + "Only moderators are allowed to mention @all" : "Только модераторы могут упоминать всех (@all)", + "All participants are allowed to mention @all" : "Все участники могут упоминать всех (@all)", + "Participants are now allowed to mention @all." : "Теперь участники могут упоминать всех (@all)", + "Mentioning @all has been limited to moderators." : " Упоминание всех (@all) было ограничено только для модераторов", + "Allow participants to mention @all" : "Разрешить участникам упоминать всех (@all)", + "Mention permissions" : "Упоминание разрешений", + "Notifications" : "Уведомления", + "Notify about calls in this conversation" : "Уведомлять о вызовах в этом обсуждении", + "Important conversation" : "Важное обсуждение", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус «Не беспокоить» игнорируется для важных обсуждений", + "Sensitive conversation" : "Конфиденциальное обсуждение", + "Message preview will be disabled in conversation list and notifications" : "Предварительный просмотр сообщений будет отключен в списке обсуждений и уведомлениях", + "Recording consent is required for calls in this conversation" : "Согласие на запись требуется для вызовов в этом обсуждении", + "Recording consent is not required for calls in this conversation" : "Согласие на запись не требуется для вызовов в этом обсуждении", + "Recording consent requirement was updated" : "Требование на согласие с записью вызова было изменено", + "Error occurred while updating recording consent" : "Произошла ошибка при изменении согласия на запись вызова", + "Recording Consent" : "Согласие на запись вызова", + "Recording consent cannot be changed once a call or breakout session has started." : "Согласие на запись не может быть изменено после начала вызова или сессии в комнатах обсуждения.", + "Require recording consent before joining call in this conversation" : "Требовать согласие на запись перед присоединением к вызову в этом обсуждении", + "Recording consent is required for all calls" : "Согласие на запись требуется для всех вызовов", + "SIP dial-in is now possible without PIN requirement" : "SIP-вызовы теперь возможны без запроса PIN-кода", + "SIP dial-in is now enabled" : "Входящие вызовы с использованием протокола SIP включены", + "SIP dial-in is now disabled" : "Входящие вызовы с использованием протокола SIP отключены", + "Error occurred when enabling SIP dial-in" : "Не удалось включить входящие SIP-вызовы", + "Error occurred when disabling SIP dial-in" : "Не удалось отключить входящие SIP-вызовы", + "Phone and SIP dial-in" : "Телефон и SIP-вызовы", + "Enable phone and SIP dial-in" : "Включить телефон и входящие SIP-вызовы", + "Allow to dial-in without a PIN" : "Разрешить набор номера без PIN-кода", + "Ongoing" : "Текущий", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n человек принял","%n человека приняли","%n человек приняли","%n человек приняли"], + "_%n person declined_::_%n people declined_" : ["%n человек отклонил","%n человека отклонили","%n человек отклонили","%n человек отклонили"], + "_and %n other attachment_::_and %n other attachments_" : ["и ещё %n вложение","и ещё %n вложения","и ещё %n вложений","и ещё %n вложений"], + "With {displayName}" : "С {displayName}", + "In {conversation}" : "В {conversation}", + "View attachment" : "Просмотреть вложение", + "Join" : "Присоединиться", + "View conversation" : "Просмотреть обсуждение", + "View event on Calendar" : "Просмотреть событие в Календаре", + "Error while creating the conversation" : "Не удалось создать обсуждение", + "Hello, {displayName}" : "Привет, {displayName}", + "Start meeting now" : "Начать встречу сейчас", + "Give your meeting a title" : "Дайте заголовок вашей встрече", + "Create and copy link" : "Создать и скопировать ссылку", + "Create a new conversation" : "Создать новое обсуждение", + "Join open conversations" : "Присоединиться к открытым обсуждениям", + "Call a phone number" : "Вызвать номер телефона", + "Scroll backward" : "Прокрутить назад", + "Scroll forward" : "Прокрутить вперед", + "Schedule meetings" : "Запланировать встречи", + "You don't have any upcoming meetings" : "У вас нет предстоящих встреч", + "Open calendar" : "Открыть Календарь", + "Unread mentions" : "Непрочитанные упоминания", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Сообщения с вашим упоминанием появятся здесь. Вы также можете упоминать людей, печатая \"@\" и имя пользователя", + "Upcoming reminders" : "Предстоящие напоминания", + "Message reminders" : "Напоминания о сообщениях", + "Set a reminder on a message to be notified" : "Установите напоминание о сообщении, чтобы получать уведомления", + "Start a group conversation" : "Начать групповое обсуждение", + "Create conversation" : "Создать обсуждение", + "Enter your name" : "Введите ваше имя", + "Submit name and join" : "Укажите имя и присоединитесь", + "Do you already have an account?" : "У вас уже есть учетная запись?", + "Log in" : "Войти", + "Error while verifying uploaded file" : "Ошибка при проверке загруженного файла", + "Uploaded file is verified" : "Загруженный файл проверен", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Содержимое в формате «сomma-separated values» (CSV):
- Строка заголовка обязательна и должна совпадать с \"name\",\"email\" или только \"email\"
- Один участник на одну линию (например, \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Участники успешно добавлены", + "Error while adding participants" : "Ошибка при добавлении участников", + "Import a file" : "Импортировать файл", + "Browse" : "Выбрать", + "Verifying uploaded file …" : "Проверка загруженного файла …", + "This might take a moment" : "Это может занять некоторое время", + "Send invitations" : "Отправить приглашения", + "_%n invalid email_::_%n invalid emails_" : ["%n некорректный адрес эл. почты","%n некорректных адреса эл. почты","%n некорректных адресов эл. почты","%n некорректных адресов эл. почты"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n адрес эл. почты уже добавлен или дублируется","%n адреса эл. почты уже добавлены или дублируются","%n адресов эл. почты уже добавлены или дублируются","%n адресов эл. почты уже добавлены или дублируются"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n приглашение может быть отправлено","%n приглашения может быть отправлено","%n приглашений может быть отправлено","%n приглашений может быть отправлено"], + "An error occurred while calling a phone number" : "Произошла ошибка при вызове номера телефона", + "Phone number could not be called: {error}" : "Номер телефона не может быть вызван: {error}", + "Phone number could not be called" : "Номер телефона не может быть вызван", + "Search participants or phone numbers" : "Искать участников или номера телефона", + "Creating the conversation …" : "Создание обсуждения …", + "Mark as read" : "Пометить прочитанным", + "Mark as unread" : "Пометить непрочитанным", + "Remove from favorites" : "Удалить из избранного", + "Add to favorites" : "Добавить в избранное", + "Unarchive conversation" : "Разархивировать обсуждение", + "Ignore \"Do not disturb\"" : "Игнорировать \"Не беспокоить\"", + "You need to promote a new moderator before you can leave the conversation." : "Вам нужно назначить нового модератора перед тем, как покинуть обсуждение.", + "Conversation actions" : "Действия для обсуждения", + "Notify about calls" : "Уведомлять о вызовах", + "Hide message text" : "Скрыть текст сообщений", + "Pending invitations" : "Ожидающие приглашения", + "Join conversations from other servers" : "Присоединитесь к обсуждениям на удалённых серверах", + "From {user} at {remoteServer}" : "От {user} с {remoteServer}", + "Decline invitation" : "Отклонить приглашение", + "Accept invitation" : "Принять приглашение", + "No pending invitations" : "Нет ожидающих приглашений", + "Home" : "Домашняя страница", + "Unread" : "Непрочитанное", + "Mentions" : "Упоминания", + "Meetings" : "Встречи", + "Sort conversations" : "Сортировать обсуждения", + "By recent activity" : "По недавней активности", + "Alphabetically" : "В алфавитном порядке", + "Do not group by type" : "Не группировать", + "Show private ones first" : "Показать сначала частные", + "Show group ones first" : "Показать сначала групповые", + "No followed threads" : "Нет отслеживаемых тем", + "No matches found" : "Соответствий не найдено", + "No conversations found" : "Не найдено ни одного обсуждения", + "You have no archived conversations." : "У Вас нет архивированных обсуждений.", + "Subscribe to an existing thread or start your own." : "Начните отслеживать существующую тему или создайте новую.", + "You have no unread mentions." : "У Вас нет непрочитанных упоминаний или личных сообщений.", + "You have no unread messages." : "У Вас нет непрочитанных сообщений.", + "An error occurred while performing the search" : "Не удалось выполнить поиск", + "Conversation list" : "Список обсуждений", + "Filter conversations by" : "Фильтровать обсуждения", + "Unread messages" : "Непрочитанные сообщения", + "Meeting conversations" : "Обсуждения - встречи", + "Clear filters" : "Сбросить фильтры", + "New personal note" : "Новая личная заметка", + "SIP backend is not installed" : "SIP сервер не установлен", + "Back to conversations" : "Обратно к обсуждениям", + "Archived conversations" : "Архивированные обсуждения", + "Threads" : "Темы", + "Clear filter" : "Сбросить фильтр", + "Show more threads" : "Показать больше тем", + "App settings" : "Настройки приложения", + "Users" : "Пользователи", + "Groups" : "Группы", + "Teams" : "Команды", + "Federated users" : "Федеративные пользователи", + "New private conversation" : "Новое частное обсуждение", + "Other sources" : "Другие источники", + "Open conversations" : "Открытые обсуждения", + "No search results" : "Ничего не найдено", + "Users, groups and teams" : "Пользователи, группы и команды", + "Users and groups" : "Пользователи и группы", + "Users and teams" : "Пользователи и команды", + "Groups and teams" : "Группы и команды", + "New group conversation" : "Новое групповое обсуждение", + "The meeting will start soon" : "Встреча скоро начнётся", + "This meeting is scheduled for {startTime}" : "Начало встречи запланировано на {startTime}", + "You are currently waiting in the lobby" : "В данный момент вы ожидаете в лобби", + "Enable noise suppression" : "Включить подавление шума", + "Reduce background noises for better voice quality" : "Уменьшить фоновый шум для лучшего качества голоса", + "Enable echo cancellation" : "Включить подавление эха", + "Minimize echo effect from own surrounding" : "Уменьшить эффект эха от собственного окружения", + "Enable auto gain control" : "Включить авторегулировку громкости", + "Dynamically adjust microphone volume for consistent level" : "Динамически подстраивать громкость микрофона для стабильного уровня", + "Select microphone" : "Выберите микрофон", + "No microphone available" : "Нет ни одного доступного микрофона", + "Select speaker" : "Выберите динамик", + "No speaker available" : "Нет ни одного доступного динамика", + "Select camera" : "Выберите камеру", + "No camera available" : "Нет ни одной доступной камеры", + "Select a device" : "Выберите устройство", + "Playing …" : "Воспроизводится …", + "Test speakers" : "Проверить динамики", + "Test" : "Проверить", + "Devices" : "Устройства", + "Backgrounds" : "Фоны", + "No audio" : "Без звука", + "No camera" : "Камера отсуствует", + "Display video as you will see it (mirrored)" : "Показать видео как Вы его видите (зеркально)", + "Display video as others will see it" : "Показать видео как другие его видят", + "Calls are not supported in your browser" : "Ваш браузер не поддерживает вызовы", + "Access to microphone is only possible with HTTPS" : "Доступ к микрофону разрешён только при использовании протокола HTTPS", + "Access to microphone was denied" : "Доступ к микрофону запрещён", + "Error while accessing microphone" : "Не удалось получить доступ к микрофону", + "Access to camera is only possible with HTTPS" : "Доступ к камере разрешён только при использовании протокола HTTPS", + "The call is being recorded." : "Вызов записывается.", + "The call might be recorded." : "Вызов может быть записан.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запись может включать ваш голос, видео с камеры и трансляцию экрана. Прежде чем присоединиться к вызову, требуется ваше согласие.", + "Give consent to the recording of this call" : "Дать согласие на запись этого вызова", + "Show more info" : "Показать больше", + "Audio is not available" : "Аудио недоступно", + "Video is not available" : "Видео недоступно", + "Start recording immediately with the call" : "Начать запись одновременно с вызовом", + "Recording backend is not installed" : "Сервер записи вызовов не установлен", + "Notify all participants about this call" : "Уведомить всех участников о начале вызова", + "Apply settings" : "Применить настройки", + "Select virtual office background" : "Выбрать виртуальный фон офиса", + "Select virtual home background" : "Выбрать виртуальный фон дома", + "Select virtual abstract background" : "Выбрать абстрактный виртуальный фон", + "Select virtual beach background" : "Выбрать виртуальный фон пляжа", + "Select virtual park background" : "Выбрать виртуальный фон парка", + "Select virtual theater background" : "Выбрать виртуальный фон театра", + "Select virtual library background" : "Выбрать виртуальный фон библиотеки", + "Select virtual space station background" : "Выбрать виртуальный фон космической станции", + "Error while uploading the file" : "Ошибка при загрузке файла", + "Select a file" : "Выберите файл", + "Invalid path selected" : "Указан некорректный путь", + "Select virtual background from file {fileName}" : "Выбрать виртуальный фон из файла {fileName}", + "Blur" : "Размытие", + "Upload" : "Отправить", + "Files" : "Файлы", + "(editing)" : "(редактируется)", + "(edited)" : "(изменено)", + "The message has expired or has been deleted" : "Срок жизни сообщения истёк или оно было удалено", + "Cancel quote" : "Отменить квоту", + "24 hours" : "24 часа", + "7 days" : "7 дней", + "30 days" : "30 дней", + "Until unpin" : "До открепления", + "Clear reminder – {timeLocale}" : "Очистить напоминание – {timeLocale}", + "Edited by {actor}" : "Изменено {actor}", + "Pinned by you" : "Закреплено Вами", + "Pinned by {actor}" : "Закреплено {actor}", + "Until {absoluteDate}" : "До {absoluteDate}", + "Message text copied to clipboard" : "Сообщение скопировано в буфер обмена", + "Message text could not be copied" : "Не удалось скопировать текст сообщения", + "Message forwarded to \"Note to self\"" : "Сообщение перенаправлено в «Личные заметки»", + "Error while forwarding message to \"Note to self\"" : "Ошибка при пересылке сообщения в «Личные заметки»", + "A reminder was successfully removed" : "Напоминание было успешно удалено", + "Error occurred when removing a reminder" : "Произошла ошибка при удалении напоминания", + "A reminder was successfully set at {datetime}" : "Напоминание было успешно установлено на {datetime}", + "Error occurred when creating a reminder" : "Произошла ошибка при создании напоминания", + "Add a reaction to this message" : "Отреагировать на это сообщение", + "Reply" : "Ответить", + "More actions" : "Больше действий", + "Set reminder" : "Установить напоминание", + "Pin message" : "Закрепить сообщение", + "Unpin message" : "Открепить сообщение", + "Reply privately" : "Ответить личным сообщением", + "Edit message" : "Редактировать сообщение", + "Copy message" : "Копировать сообщение", + "Copy message link" : "Скопировать ссылку на сообщение", + "Go to file" : "Перейти к файлу", + "Download file" : "Скачать файл", + "Go to thread" : "Перейти в тему", + "Edit thread details" : "Изменить детали темы", + "Forward message" : "Переслать сообщение", + "Translate" : "Перевести", + "Set custom reminder" : "Установить особое напоминание", + "Keep pinned for" : "Держать закрепленным:", + "Set custom period" : "Установить особый период", + "Close reactions menu" : "Закрыть меню реакций", + "React with {emoji}" : "Отреагируйте с {emoji}", + "React with another emoji" : "Отреагировать другим эмодзи", + "Choose a conversation to forward the selected message." : "Выберите обсуждение для пересылки выбранного сообщения.", + "Error while forwarding message" : "Не удалось переслать сообщение", + "The message has been forwarded to {selectedConversationName}" : "Сообщение переслано в {selectedConversationName}", + "Dismiss" : "Отклонить", + "Go to conversation" : "Перейти в обсуждение", + "Detect language" : "Определить язык", + "The message could not be translated" : "Сообщение не может быть переведено", + "Translation copied to clipboard" : "Перевод скопирован в буфер обмена", + "Translation could not be copied" : "Не удалось скопировать перевод", + "Translate message" : "Перевести сообщение", + "Source language to translate from" : "Исходный язык для перевода с", + "Translate from" : "Перевод с", + "Target language to translate into" : "Целевой язык для перевода на", + "Translate to" : "Перевести на", + "Translating" : "Идет перевод", + "This translation is AI generated and may contain mistakes." : "Перевод сгенерирован при помощи AI и может быть неточным", + "Copy translated text" : "Копировать переведенный текст", + "Error when scheduling the message" : "Ошибка при планировании сообщения", + "Reschedule" : "Перенести", + "Send now" : "Отправить сейчас", + "Choose a time" : "Выберите время", + "Send at custom time" : "Отправить в указанное время", + "Will be sent without notification" : "Будет отправлено без уведомления", + "Message read by everyone who shares their reading status" : "Сообщение прочитано всеми пользователями, включившими отчёт о прочтении", + "Message sent" : "Сообщение отправлено", + "Sent without notification" : "Отправлено без уведомления", + "Deleting message" : "Сообщение удаляется", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Сообщение успешно удалено, но настроен бот или Matterbridge, и сообщение может быть уже распространено на другие сервисы", + "Message deleted successfully" : "Сообщение успешно удалено", + "Message could not be deleted because it is too old" : "Сообщение не может быть удалено, т.к. оно было отправлено давно", + "Only normal chat messages can be deleted" : "Только обычные сообщения могут быть удалены", + "An error occurred while deleting the message" : "Не удалось удалить сообщение", + "Pinned" : "Закреплено", + "Your browser does not support playing audio files" : "Ваш браузер не поддерживает воспроизведение звуковых файлов", + "Contact" : "Контакт", + "{stack} in {board}" : "«{stack}» с доски «{board}»", + "Deck Card" : "Карточка", + "Remove {fileName}" : "Удалить {fileName}", + "Open this location in OpenStreetMap" : "Открыть местоположение в OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n ответ","%n ответа","%n ответов","%n ответов"], + "Sending message" : "Сообщение отправляется", + "Failed to send the message. Click to try again" : "Не удалось отправить сообщение; нажмите, чтобы попробовать ещё раз", + "Not enough free space to upload file" : "Недостаточно свободного места для передачи файла на сервер", + "You cannot send messages to this conversation at the moment" : "Сейчас вы не можете отправлять сообщения в это обсуждение", + "Could not update the message" : "Не удалось обновить сообщение", + "Reply to thread \"{threadTitle}\"" : "Ответить в теме «{threadTitle}»", + "_You voted • %n vote_::_You voted • %n votes_" : ["Вы проголосовали • %n голос","Вы проголосовали • %n голоса","Вы проголосовали • %n голосов","Вы проголосовали • %n голосов"], + "You voted" : "Вы проголосовали", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Нажмите для голосования • %n голос","Нажмите для голосования • %n голоса","Нажмите для голосования • %n голосов","Нажмите для голосования • %n голосов"], + "Click to vote" : "Нажмите для голосования", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Черновик опроса • %n вариант","Черновик опроса • %n варианта","Черновик опроса • %n вариантов","Черновик опроса • %n вариантов"], + "_%n vote_::_%n votes_" : ["%n голос","%n голоса","%n голосов","%n голосов"], + "Edit poll draft" : "Изменить черновик опроса", + "Delete poll draft" : "Удалить черновик опроса", + "Open poll" : "Открытый опрос", + "Closed poll" : "Закрытый опрос", + "See results" : "Посмотреть результаты", + "Reactions" : "Реакции", + "No permission to post reactions in this conversation" : "Нет разрешения на публикацию реакций в этом обсуждении", + "and {participant}" : "и {participant}", + "_and %n other participant_::_and %n other participants_" : ["и ещё %n участник","и ещё %n участника","и ещё %n участников","и ещё %n участников"], + "Show all reactions" : "Показать все реакции", + "Add more reactions" : "Добавить больше реакций", + "Show or collapse system messages" : "Показать или скрыть системные сообщения", + "No messages" : "Нет ни одного сообщения", + "All messages have expired or have been deleted." : "Срок жизни сообщений истек или они были удалены.", + "Generate summary with AI" : "Сгенерировать резюме с ИИ", + "{author} (pinned by you)" : "{author} (закреплено Вами)", + "{author} (pinned by {actor})" : "{author} (закреплено {actor})", + "Unpin" : "Открепить", + "Cancel search" : "Отменить поиск", + "Add a phone number" : "Добавить номер телефона", + "Error: A password is required to create the conversation." : "Ошибка: для создания обсуждения требуется пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Всё готово, обсуждение \"{conversationName}\" создано.", + "Create a new group conversation" : "Создать новое групповое обсуждение", + "Add participants" : "Добавить участников", + "Maximum length exceeded ({maxlength} characters)" : "Максимальная длина превышена ({maxlength} символов)", + "Conversation type" : "Тип обсуждения", + "Conversation visibility" : "Видимость обсуждения", + "Allow guests to join via link" : "Разрешить гостям присоединяться по ссылке", + "Enter password" : "Введите пароль", + "This conversation has been locked" : "Это обсуждение заблокировано", + "No permission to post messages in this conversation" : "Отсутствует разрешение на публикацию сообщений в этом обсуждении", + "Joining conversation …" : "Подключение к обсуждению…", + "Write a message without notification" : "Напишите сообщение без уведомления", + "Create a thread silently" : "Создать тему тихо", + "Create a thread" : "Создать тему", + "Send message silently" : "Отправить сообщение без звука", + "Send message" : "Отправить сообщение", + "Send without notification" : "Отправить без уведомления", + "The participant will not be notified about new messages" : "Участник не получит уведомление о новых сообщениях", + "Participants will not be notified about new messages" : "Участники не получат уведомлений о новых сообщениях", + "Message will be sent {datetimeString}" : "Сообщение будет отправлено {datetimeString}", + "Thread title is required" : "Заголовок темы обязателен", + "Message text is required" : "Требуется текстовое сообщение", + "The message could not be edited" : "Сообщение не может быть изменено", + "File to share" : "Поделиться файлом", + "File upload is not available in this conversation" : "Загрузка файлов недоступна для этого обсуждения", + "Message was successfully scheduled" : "Сообщение успешно запланировано", + "Add emoji" : "Добавить эмодзи", + "Adding a mention will only notify users who did not read the message." : "Добавление упоминания уведомит только тех пользователей, кто ещё не прочитал сообщение.", + "Thread title" : "Заголовок темы", + "Send later" : "Отправить позже", + "Show scheduled messages" : "Показать запланированные сообщения", + "Cancel editing" : "Отменить редактирование", + "Schedule message" : "Запланировать сообщение", + "{user} is out of office and might not respond." : "{user} вне офиса и может не ответить.", + "Absence period: {startDate} - {endDate}" : "Период отсутствия: {startDate} - {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Опубликовать из {nextcloud}", + "Share from Files" : "Опубликовать из приложения «Файлы»", + "Share files to the conversation" : "Поделиться файлами в обсуждении", + "Upload from device" : "Загрузить с устройства", + "Create new poll" : "Создать новый опрос", + "Smart picker" : "Умный подборщик", + "Record voice message" : "Записать голосовое сообщение", + "End recording and send" : "Завершить запись и отправить", + "Dismiss recording" : "Отменить запись", + "Access to the microphone was denied" : "Не удалось получить доступ к микрофону", + "Microphone either not available or disabled in settings" : "Микрофон недоступен или отключен", + "Error while recording audio" : "Не удалось записать звук", + "Voice message {time} ({conversation})" : "Голосовое сообщение {time} ({conversation})", + "Generating summary of unread messages …" : "Резюме непрочитанных сообщений генерируется …", + "Summary is AI generated and might contain mistakes" : "Резюме сгенерировано при помощи AI и может быть неточным", + "Error occurred during a summary generation" : "Произошла ошибка при генерировании резюме", + "New file" : "Новый файл", + "Blank" : "Пустой", + "Error while creating file" : "Не удалось создать файл", + "Create and share a new file" : "Создайте и поделитесь новым файлом", + "Name of the new file" : "Название нового файла", + "Create file" : "Создать файл", + "Someone is typing …" : "Кто-то печатает …", + "{user1} is typing …" : "{user1} печатает …", + "{user1} and {user2} are typing …" : "{user1} и {user2} печатают …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} печатают …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и еще %n другой пользователь печатают …","{user1}, {user2}, {user3} и еще %n других пользователя печатают …","{user1}, {user2}, {user3} и еще %n других пользователей печатают …","{user1}, {user2}, {user3} и еще %n других пользователей печатают …"], + "Add more files" : "Добавить файлы", + "Send" : "Отправить", + "In this conversation {user} can:" : "В этом обсуждении {user} может:", + "Edit default permissions for participants in {conversationName}" : "Изменить разрешения по умолчанию для участников {conversationName}", + "Start a call" : "Начать вызов", + "Skip the lobby" : "Пропустить лобби", + "Can post messages" : "Отправлять сообщения", + "Can post messages and reactions" : "Отправлять сообщения и реакции", + "Can add reactions" : "Добавлять реакции", + "Enable the microphone" : "Включить микрофон", + "Enable the camera" : "Включить камеру", + "Share the screen" : "Поделиться экраном", + "Update permissions" : "Обновление разрешений", + "Updating permissions" : "Обновление разрешений", + "No poll drafts" : "Нет черновиков опросов", + "There is no poll drafts yet saved for this conversation" : "Для этого обсуждения пока не сохранено ни одного черновика опроса", + "Create poll in {name}" : "Создать опрос в {name}", + "Create poll" : "Создать опрос", + "Error while importing poll" : "Ошибка при импорте опроса", + "Question" : "Вопрос", + "Ask a question" : "Задать вопрос", + "Import draft from file" : "Импортировать черновик из файла", + "Answers" : "Ответы", + "Answer {option}" : "Ответ «{option}»", + "Delete poll option" : "Удалить вариант опроса", + "Add answer" : "Добавить ответ", + "Settings" : "Настройки", + "Anonymous poll" : "Анонимный опрос", + "Multiple answers" : "Множество ответов", + "Save as draft" : "Сохранить как черновик", + "Export draft to file" : "Экспортировать черновик в файл", + "_Final results • %n vote_::_Final results • %n votes_" : ["Результаты опроса • %n голос","Результаты опроса • %n голоса","Результаты опроса • %n голосов","Результаты опроса • %n голосов"], + "Your vote is anonymous" : "Ваш голос анонимен", + "You voted for this option" : "Вы проголосовали за этот вариант", + "End poll" : "Завершить опрос", + "Change your vote" : "Изменить ваш голос", + "Withdraw vote" : "Отозвать голос", + "Results" : "Результаты", + "Voted participants" : "Проголосовавшие участники", + "Send a message to \"{roomName}\"" : "Отправить сообщение в «{roomName}»", + "Hide list of participants" : "Скрыть список участников", + "Show list of participants" : "Показать список участников", + "Assistance requested in {roomName}" : "Запрошена помощь в {roomName}", + "The message was sent to \"{roomName}\"" : "Сообщение было отправлено в «{roomName}»", + "Dismiss request for assistance" : "Отклонить запрос о помощи", + "Send message to room" : "Отправить сообщение в комнату", + "Back to main room" : "Вернуться в главную комнату", + "Back to your room" : "Вернуться в свою комнату", + "Message all rooms" : "Сообщение всем комнатам", + "Start session" : "Начать сессию", + "Start a call before you start a breakout room session" : "Начните вызов, прежде чем запустить сессию в комнатах обсуждения", + "Stop session" : "Остановить сеанс", + "The message was sent to all breakout rooms" : "Сообщение было отправлено во все комнаты обсуждения", + "Send a message to all breakout rooms" : "Отправить сообщение во все комнаты обсуждения", + "Breakout rooms are not started" : "Комнаты обсуждения не запущены", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Вызовы без Высокопроизводительного сервера могут вызвать проблемы со связью и высокую нагрузку на устройства. {linkstart}Узнать больше{linkend}", + "Talk setup incomplete" : "Конфигурация Talk не завершена", + "Disable lobby" : "Отключить лобби", + "Settings for participant \"{user}\"" : "Параметры участника «{user}»", + "Participant \"{user}\"" : "Участник «{user}»", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гость", + "Ringing …" : "Вызываем ...", + "Call rejected" : "Вызов отклонен", + "{time} talking …" : "{time} говорит …", + "{time} talking time" : "{time} время разговора", + "Raised their hand" : "Поднял руку", + "Joined with video" : "Передача видео включена", + "Joined via phone" : "Телефонное соединение", + "Joined with audio" : "Передача звука включена", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Описание должно быть не длиннее {maxLength} символов. Длина введённого текста: {charactersCount} cимволов.", + "Remove group and members" : "Исключить группу и её участников", + "Remove team and members" : "Исключить команду и её участников", + "Remove participant" : "Исключить участника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Вы действительно хотите исключить группу «{displayName}» и её участников из этого обсуждения?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Вы действительно хотите исключить команду «{displayName}» и её участников из этого обсуждения?", + "Do you really want to remove {displayName} from this conversation?" : "Вы действительно хотите исключить {displayName} из этого обсуждения?", + "Notification was sent to {displayName}" : "Уведомление было отправлено для {displayName}", + "Could not send notification to {displayName}" : "Не удалось отправить уведомление для {displayName}", + "Permissions granted to {displayName}" : "Разрешения предоставлены {displayName}", + "Could not modify permissions for {displayName}" : "Не удалось изменить разрешения для {displayName}", + "Permissions removed for {displayName}" : "Разрешения удалены для {displayName}", + "Permissions set to default for {displayName}" : "Разрешения установлены по умолчанию для {displayName}", + "Phone number could not be hung up" : "Номер телефона не может быть повешен", + "Phone number could not be put on hold" : "Номер телефона не может быть поставлен на удержание", + "Phone number could not be muted" : "Звук для номера телефона не может быть отключен", + "Phone number could not be unmuted" : "Звук для номера телефона не может быть включен", + "DTMF message could not be sent" : "DTMF сообщение не может быть отправлено", + "Phone number copied to clipboard" : "Номер телефона скопирован в буфер обмена", + "Phone number could not be copied" : "Номер телефона не может быть скопирован", + "in the lobby" : "В лобби", + "Dial out phone" : "Набрать номер", + "Hang up phone" : "Повесить номер", + "Move back to lobby" : "Отправить в лобби", + "Move to conversation" : "Добавить в обсуждение", + "Dial-in PIN" : "PIN для звонка", + "Demote from moderator" : "Исключить из модераторов", + "Promote to moderator" : "Назначить модератором", + "Resend invitation" : "Повторно отправить приглашение", + "Send call notification" : "Отправить уведомление о вызове", + "Dial out phone number" : "Набрать номер телефона", + "Resume call for phone number" : "Продолжить вызов для номера телефона", + "Put phone number on hold" : "Поставить номер телефона на удержание", + "Unmute phone number" : "Включить звук для номера телефона", + "Mute phone number" : "Отключить звук для номера телефона", + "Copy phone number" : "Копировать номер телефона", + "Reset custom permissions" : "Сброс пользовательских разрешений", + "Grant all permissions" : "Предоставить все разрешения", + "Remove all permissions" : "Удалить все разрешения", + "Also ban from this conversation" : "Также забанить в этом обсуждении", + "Internal note (reason to ban)" : "Внутреняя заметка (причина бана)", + "Remove" : "Исключить", + "Permissions modified for {displayName}" : "Разрешения изменены для {displayName}", + "Add users, groups or teams" : "Добавить пользователей, группы или команды", + "Add users or groups" : "Добавить пользователей или группы", + "Add users or teams" : "Добавить пользователей или команды", + "Add users" : "Добавить пользователей", + "Add groups or teams" : "Добавить группы или команды", + "Add groups" : "Добавить группы", + "Add teams" : "Добавить команды", + "Add other sources" : "Добавить другие источники", + "Add emails" : "Добавить по адресам эл. почты", + "Integrations" : "Интеграции", + "Add federated users" : "Добавить федеративных пользователей", + "Searching …" : "Поиск…", + "Search for more users" : "Искать других пользователей", + "You can search or add participants via name, email, or Federated Cloud ID" : "Вы можете искать или добавлять участников по имени, адресу электронной почты или идентификатору Federated Cloud.", + "Search or add participants" : "Искать или добавить участников", + "Invitation was sent to {actorId}" : "Приглашение отправлено {actorId}", + "An error occurred while adding the participants" : "Произошла ошибка при добавлении участников", + "A new group conversation with selected participant will be created" : "Будет создано новое групповое обсуждение с выбранным участником", + "Participants" : "Участники", + "Pinned by a deleted user" : "Закреплено удаленным пользователем", + "Participants ({count})" : "Участники ({count})", + "Open chat" : "Открыть чат", + "You have new unread messages in the chat." : "В обсуждении имеются непрочитанные сообщения.", + "You have been mentioned in the chat." : "Вы были упомянуты в обсуждении.", + "Search messages" : "Искать сообщения", + "Chat" : "Чат", + "Details" : "Дополнительно", + "Shared items" : "Общие элементы", + "Search in {name}" : "Поиск в {name}", + "Threads in {name}" : "Темы в {name}", + "{actor} in {conversation}" : "{actor} в {conversation}", + "Search messages …" : "Искать сообщения …", + "Search options" : "Параметры поиска", + "From User" : "От пользователя", + "Since" : "С", + "Until" : "До", + "No results found" : "Результаты отсутствуют", + "Load more results" : "Показать больше результатов", + "Recent threads" : "Недавние темы", + "Projects" : "Проекты", + "No shared items" : "Нет общих элементов", + "Thread notifications" : "Уведомления для темы", + "Thread actions" : "Действия с темой", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Ссылка на обсуждение", + "No open conversations found" : "Не найдено ни одного открытого обсуждения", + "Either there are no open conversations or you joined all of them." : "Открытых обсуждений нет, или вы присоединились ко всем возможным.", + "Check spelling or use complete words." : "Проверьте правописание или используйте полные слова", + "Search conversations or users" : "Искать обсуждения или пользователей", + "Select conversation" : "Выберите обсуждение", + "Number length is not valid" : "Длина номера некорректна", + "Region code is not valid" : "Код региона некорректен", + "Number length is too short" : "Длина номера слишком короткая", + "Number length is too long" : "Длина номера слишком длинная", + "Number is not valid" : "Номер указан некорректно", + "Phone numbers" : "Номера телефонов", + "Display name: {name}" : "Отображаемое имя: {name}", + "Edit display name" : "Изменить отображаемое имя", + "Display name (required)" : "Отображаемое имя (обязательно)", + "Save name" : "Сохранить имя", + "I picked message bubbles" : "Я выбираю пузыри сообщений", + "I picked the list style" : "Я выбираю в стиле списка", + "Error while setting personal setting" : "Ошибка при сохранении персональных параметров", + "Error while saving sounds setting" : "Не удалось сохранить параметры звука", + "Compact conversations list" : "Компактный список обсуждений", + "Chat appearance" : "Внешний вид чата", + "Messages list" : "Список сообщений", + "Message bubbles" : "Сообщения в пузырях", + "Play sounds when participants join or leave a call" : "Воспроизводить звуки, когда участники присоединяются к вызову или покидают его", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "В настоящее время недоступно на iPhone и iPad из-за технических ограничений производителя.", + "Notification settings" : "Настройки уведомлений", + "Sounds for chat and call notifications" : "Звуки уведомлений о новых сообщениях или вызове", + "Invalid language ({languageId})" : "Недопустимый язык ({languageId})", + "Default language" : "Язык по умолчанию", + "Default language ({languageName})" : "Язык по умолчанию ({languageName})", + "Error when trying to load the available live translation languages" : "Ошибка при попытке загрузить доступные языки для онлайн-перевода", + "Error when trying to set live translation language" : "Ошибка при попытке установить язык для онлайн-перевода", + "Set language used to show the transcriptions" : "Установить язык для отображения транскрипции", + "Select location for attachments" : "Выберите путь для сохранения вложений", + "Error while setting attachment folder" : "Не удалось задать папку для вложений", + "Error while setting read status privacy" : "Не удалось сохранить параметр состояния прочтения", + "Error while setting typing status privacy" : "Ошибка при настройке конфиденциальности статуса ввода", + "Error while setting default media state" : "Ошибка при сохранении параметров медиа по умолчанию", + "Turn camera and microphone off by default" : "Отключить камеру и микрофон по умолчанию", + "Blur camera background by default" : "Размытие фона камеры по умолчанию", + "Skip device preview before joining a call" : "Пропустить просмотр устройств перед присоединением к вызову", + "Appearance & Sounds" : "Внешний вид и звуковые уведомления", + "Privacy" : "Конфиденциальность", + "Send read receipts" : "Делиться уведомлениями о прочтении", + "When off, all read statuses will be hidden" : "Если выключено, все уведомления о прочтении будут скрыты", + "Share typing status" : "Делиться статусом набора текста", + "When off, all typing indicators will be hidden" : "Если выключено, все статусы набора текста будут скрыты", + "Attachments folder" : "Папка для вложений", + "Toggle full screen" : "Переключиться на полный экран", + "Return to Home screen" : "Вернуться на начальный экран", + "Search" : "Поиск", + "Shortcuts while in a chat" : "Комбинации клавиш в чате", + "Focus the chat input" : "Переключиться в окно ввода текста", + "Unfocus the chat input to use shortcuts" : "Переключиться из поля ввода текста для использования комбинаций клавиш", + "Edit your last message" : "Изменить Ваше последнее сообщение", + "Shortcuts while in a call" : "Комбинации клавиш во время вызова", + "Camera on and off" : "Включение и выключение камеры", + "Microphone on and off" : "Включить или отключить микрофон", + "Raise or lower hand" : "Поднять или опустить руку", + "Push to talk or push to mute" : "Кнопка для включения (PTT) или отключения (PTM) передачи голоса ", + "Zoom-in / zoom-out a screen share" : "Увеличить / уменьшить масштаб трансляции экрана", + "Mouse wheel" : "Колесо мыши", + "Start call silently" : "Начать тихий вызов", + "Start call" : "Начать вызов", + "End call" : "Завершить вызов", + "The server was updated, you cannot start or join a call." : "Сервер был обновлен, вы не можете начать или присоединиться к вызову.", + "This call has just ended" : "Этот вызов только что завершён", + "You will be able to join the call only after a moderator starts it." : "Вы сможете присоединиться к вызову только после того, как его начнет модератор.", + "End call for everyone" : "Завершить вызов для всех", + "Starting the recording" : "Начало записи", + "Recording" : "Запись", + "The call has been running for one hour." : "Вызов длится уже более часа", + "Cancel recording start" : "Отменить начало записи", + "Stop recording" : "Остановить запись", + "Send a reaction" : "Отправить реакцию", + "React with {reaction}" : "Отреагировать с {reaction}", + "All tasks done!" : "Все задачи выполнены!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} из %n задач","{done} из %n задач","{done} из %n задач","{done} из %n задач"], + "Add participants to this call" : "Добавить участников в этот вызов", + "_%n participant in call_::_%n participants in call_" : ["%n участник в вызове","%n участника в вызове","%n участников в вызове","%n участников в вызове"], + "Scheduled messages" : "Запланированные сообщения", + "You are not allowed to enable screensharing" : "Вам не разрешено транслировать экран", + "No screensharing" : "Трансляция экрана недоступна", + "Screensharing options" : "Параметры трансляции экрана", + "Enable screensharing" : "Включить трансляцию экрана", + "Bad sent video and screen quality." : "Плохое качество видео и изображения.", + "Bad sent screen quality." : "Плохое качество изображения.", + "Bad sent video quality." : "Плохое качество видео.", + "Bad sent audio, video and screen quality." : "Плохое качество звука, видео и изображения.", + "Bad sent audio and screen quality." : "Плохое качество звука и изображения.", + "Bad sent audio and video quality." : "Плохое качество звука и видео.", + "Bad sent audio quality." : "Плохое качество звука.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео во время трансляции экрана.", + "Disable background blur" : "Отключить размытый фон", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут не видеть ваш экран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не видеть.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать или не видеть. Для улучшения ситуации попробуйте отключить видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить трансляцию экрана.", + "Disable screenshare" : "Отключить трансляцию экрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать или не видеть. Для улучшения ситуации попробуйте отключить видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать.", + "Screen sharing is not supported by your browser." : "Ваш браузер не подерживает трансляцию экрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Для трансляции экрана требуется загрузка этой страницы с использованием протокола HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Для трансляции экрана требуется загрузка этой страницы с использованием протокола HTTPS.", + "An error occurred while starting screensharing." : "Не удалось начать трансляцию экрана.", + "Select virtual background" : "Выбрать виртуальный фон", + "Show your screen" : "Показать ваш экран", + "Stop screensharing" : "Прекратить трансляцию экрана", + "Mute others" : "Отключить микрофоны других пользователей", + "Start recording" : "Начать запись", + "Set up breakout rooms" : "Настроить комнаты обсуждения", + "Download attendance list" : "Скачать список участников", + "Open Calendar" : "Окрыть календарь", + "Remove participant {name}" : "Исключить участника {name}", + "Would you like to delete this conversation?" : "Вы хотите удалить это обсуждение?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Обсуждение будет автоматически удалено для всех после %n дня отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности."], + "Are you sure you want to delete this conversation?" : "Вы уверены, что хотите удалить это обсуждение?", + "Delete now" : "Удалить сейчас", + "Keep" : "Сохранить", + "Open dialpad" : "Открыть панель набора", + "Select a region" : "Выберите регион", + "Local time: {time}" : "Местное время: {time}", + "Scheduled {datetime}" : "Запланировано {datetime} ", + "Scheduled for {datetime}" : "Запланировано на {datetime}", + "Search …" : "Поиск …", + "Message without mention" : "Сообщение без упоминания", + "Mention myself" : "Упоминание себя", + "Mention everyone" : "Упомянуть всех", + "Select a conversation" : "Выберите обсуждение", + "Select a mode" : "Выберите режим", + "You do not have permissions to access this conversation." : "У вас нет прав доступа к этому обсуждению.", + "Join a different conversation or start a new one." : "Присоединитесь к другому обсуждению или начните новое.", + "The conversation does not exist" : "Обсуждения не существует", + "Join a conversation or start a new one!" : "Присоединитесь к обсуждению или начните новое!", + "Duplicate session" : "Повторяющийся сеанс", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Обсуждение было открыто в другой вкладке. Текущая версия сервера не поддерживает открытие одного обсуждения в нескольких вкладках.", + "Creating and joining a conversation with \"{userid}\"" : "Создание и присоединение к обсуждению с пользователем \"{userid}\"", + "Join a conversation or start a new one" : "Присоединитесь к обсуждению или начните новое", + "Error while joining the conversation" : "Ошибка при присоединении к обсуждению", + "Another user" : "Другой пользователь", + "Hey! Are you using the list style or message bubbles?" : "Привет! Ты используешь чат в Конференциях в стиле списка или пузырей?", + "Nextcloud URL" : "Адрес сервера Nextcloud", + "Nextcloud user" : "Имя пользователя Nextcloud", + "User password" : "Пароль пользователя", + "Talk conversation" : "Название обсуждения", + "Skip TLS verification" : "Не использовать проверку подлинности TLS", + "Matrix server URL" : "Адрес сервера Matrix", + "User" : "Пользователь", + "Matrix channel" : "Канал Matrix", + "Mattermost server URL" : "Адрес сервера Mattermost", + "Mattermost user" : "Пользователь Mattermost", + "Team name" : "Название команды", + "Channel name" : "Название канала", + "Rocket.Chat server URL" : "URL сервера Rocket.Chat", + "User name or email address" : "Имя пользователя или адрес эл. почты", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "Адрес сервера Zulip", + "Bot user name" : "Имя пользователя-бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "API токен", + "Slack channel" : "Канал Slack", + "Server ID or name" : "ID или имя сервера", + "Channel ID (prefixed with \"ID:\") or name" : "ID канала (с префиксом \"ID:\") или имя", + "Channel" : "Канал", + "Login" : "Логин", + "Chat ID" : "ID чата", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Адрес сервера IRC (к примеру: chat.freenode.net:6667)", + "Nickname" : "Псевдоним", + "Connection password" : "Пароль для подключения", + "IRC channel" : "Канал IRC", + "Channel password" : "Пароль для канала", + "NickServ nickname" : "Псевдоним NickServ", + "NickServ password" : "Пароль для NickServ", + "Use TLS" : "Использовать TLS", + "Use SASL" : "Использовать SASL", + "Tenant ID" : "ID участника", + "Client ID" : "ID клиента", + "Team ID" : "ID команды", + "Thread ID" : "ID ветки обсуждения", + "XMPP/Jabber server URL" : "Адрес сервера XMPP или Jabber", + "MUC server URL" : "Адрес сервера MUC", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Закрепленные сообщения", + "Media" : "Медиа", + "Polls" : "Опросы", + "Deck cards" : "Карточки", + "Voice messages" : "Голосовые сообщения", + "Locations" : "Места", + "Call recordings" : "Записи вызовов", + "Audio" : "Звук", + "Show all pinned messages" : "Показать все закрепленные сообщения", + "Show all media" : "Показать все медиа", + "Show all files" : "Показать все файлы", + "Show all polls" : "Показать все опросы", + "Show all deck cards" : "Показать все карточки", + "Show all voice messages" : "Показать все голосовые сообщения", + "Show all locations" : "Показать все местоположения", + "Show all call recordings" : "Показать все записи вызовов", + "Show all audio" : "Показать все аудио", + "Show all other" : "Показать все остальное", + "Follow conversation settings" : "Следовать настройкам обсуждения", + "Group" : "Группа", + "Team" : "Команда", + "You reconnected to the call" : "Вы переподключились к вызову", + "{actor} reconnected to the call" : "{actor} переподключился(лась) к вызову", + "You added {user0} and {user1}" : "Вы добавили {user0} и {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Вы добавили {user0}, {user1} и ещё %n участника","Вы добавили {user0}, {user1} и ещё %n участников","Вы добавили {user0}, {user1} и ещё %n участников","Вы добавили {user0}, {user1} и ещё %n участников"], + "An administrator added you and {user0}" : "Администратор добавил Вас и {user0} ", + "{actor} added you and {user0}" : "{actor} добавил(а) Вас и {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Администратор добавил Вас, {user0} и ещё %n участника","Администратор добавил Вас, {user0} и ещё %n участников","Администратор добавил Вас, {user0} и ещё %n участников","Администратор добавил Вас, {user0} и ещё %n участников"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} добавил(а) Вас, {user0} и ещё %n участника","{actor} добавил(а) Вас, {user0} и ещё %n участников","{actor} добавил(а) Вас, {user0} и ещё %n участников","{actor} добавил(а) Вас, {user0} и ещё %n участников"], + "An administrator added {user0} and {user1}" : "Администратор добавил {user0} и {user1} ", + "{actor} added {user0} and {user1}" : "{actor} добавил(а) {user0} и {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Администратор добавил {user0}, {user1} и ещё %n участника","Администратор добавил {user0}, {user1} и ещё %n участников","Администратор добавил {user0}, {user1} и ещё %n участников","Администратор добавил {user0}, {user1} и ещё %n участников"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} добавил(а) {user0}, {user1} и ещё %n участника","{actor} добавил(а) {user0}, {user1} и ещё %n участников","{actor} добавил(а) {user0}, {user1} и ещё %n участников","{actor} добавил(а) {user0}, {user1} и ещё %n участников"], + "You removed {user0} and {user1}" : "Вы исключили {user0} и {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Вы исключили {user0}, {user1} и ещё %n участника","Вы исключили {user0}, {user1} и ещё %n участников","Вы исключили {user0}, {user1} и ещё %n участников","Вы исключили {user0}, {user1} и ещё %n участников"], + "An administrator removed you and {user0}" : "Администратор исключил Вас и {user0} ", + "{actor} removed you and {user0}" : "{actor} исключил(а) Вас и {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Администратор исключил Вас, {user0} и ещё %n участника","Администратор исключил Вас, {user0} и ещё %n участников","Администратор исключил Вас, {user0} и ещё %n участников","Администратор исключил Вас, {user0} и ещё %n участников"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} исключил(а) Вас, {user0} и ещё %n участника","{actor} исключил(а) Вас, {user0} и ещё %n участников","{actor} исключил(а) Вас, {user0} и ещё %n участников","{actor} исключил(а) Вас, {user0} и ещё %n участников"], + "An administrator removed {user0} and {user1}" : "Администратор исключил {user0} и {user1} ", + "{actor} removed {user0} and {user1}" : "{actor} исключил(а) {user0} и {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Администратор исключил {user0}, {user1} и ещё %n участника","Администратор исключил {user0}, {user1} и ещё %n участников","Администратор исключил {user0}, {user1} и ещё %n участников","Администратор исключил {user0}, {user1} и ещё %n участников"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} исключил(а) {user0}, {user1} и ещё %n участника","{actor} исключил(а) {user0}, {user1} и ещё %n участников","{actor} исключил(а) {user0}, {user1} и ещё %n участников","{actor} исключил(а) {user0}, {user1} и ещё %n участников"], + "You and {user0} joined the call" : "Вы и {user0} присоединились к вызову", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Вы, {user0} и ещё %n участник присоединились к вызову","Вы, {user0} и ещё %n участника присоединились к вызову","Вы, {user0} и ещё %n участников присоединились к вызову","Вы, {user0} и ещё %n участников присоединились к вызову"], + "{user0} and {user1} joined the call" : "{user0} и {user1} присоединились к вызову", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} и ещё %n участник присоединились к вызову","{user0}, {user1} и ещё %n участника присоединились к вызову","{user0}, {user1} и ещё %n участников присоединились к вызову","{user0}, {user1} и ещё %n участников присоединились к вызову"], + "You and {user0} left the call" : "Вы и {user0} покинули вызов", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Вы, {user0} и ещё %n участник покинули вызов","Вы, {user0} и ещё %n участника покинули вызов","Вы, {user0} и ещё %n участников покинули вызов","Вы, {user0} и ещё %n участников покинули вызов"], + "{user0} and {user1} left the call" : "{user0} и {user1} покинули вызов", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} и ещё %n участник покинули вызов","{user0}, {user1} и ещё %n участника покинули вызов","{user0}, {user1} и ещё %n участников покинули вызов","{user0}, {user1} и ещё %n участников покинули вызов"], + "You promoted {user0} and {user1} to moderators" : "Вы назначили {user0} и {user1} модераторами", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Вы назначили {user0}, {user1} и ещё %n участника модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами"], + "An administrator promoted you and {user0} to moderators" : "Администратор назначил Вас и {user0} модераторами", + "{actor} promoted you and {user0} to moderators" : "{actor} назначил(а) Вас и {user0} модераторами", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Администратор назначил Вас, {user0} и ещё %n участника модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} назначил(а) Вас, {user0} и ещё %n участника модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами"], + "An administrator promoted {user0} and {user1} to moderators" : "Администратор назначил {user0} и {user1} модераторами", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} назначил(а) {user0} и {user1} модераторами", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Администратор назначил {user0} , {user1} и ещё %n участника модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} назначил(а) {user0}, {user1} и ещё %n участника модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами"], + "You demoted {user0} and {user1} from moderators" : "Вы исключили {user0} и {user1} из модераторов", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Вы исключили {user0}, {user1} и ещё %n участника из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов"], + "An administrator demoted you and {user0} from moderators" : "Администратор исключил Вас и {user0} из модераторов", + "{actor} demoted you and {user0} from moderators" : "{actor} исключил(а) Вас и {user0} из модераторов", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Администратор исключил Вас, {user0} и ещё %n участника из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} исключил(а) Вас, {user0} и ещё %n участника из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов"], + "An administrator demoted {user0} and {user1} from moderators" : "Администратор исключил {user0} и {user1} из модераторов", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} исключил(а) {user0} и {user1} из модераторов", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Администратор исключил {user0}, {user1} и ещё %n участника из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} исключил(а) {user0}, {user1} и ещё %n участника из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов"], + "You:" : "Вы:", + "You: {lastMessage}" : "Вы: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Сервер был обновлен.", + "(edited by you)" : "(изменено Вами)", + "(edited by a deleted user)" : "(изменено удаленным пользователем)", + "(edited by {moderator})" : "(изменено {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Вы пытаетесь присоединиться к обсуждению, в котором уже есть активные сессии из другого окна или устройства. В данный момент данная возможность не поддерживается сервером Nextcloud Talk. Что вы хотите сделать?", + "Leave this page" : "Покинуть страницу", + "Join here" : "Присоединиться", + "Deck card has been posted to {conversation}" : "Карточка была отправлена в {conversation}", + "An error occurred while posting deck card to conversation" : "Произошла ошибка при отправке карточки в обсуждение", + "Post to a conversation" : "Опубликовать в обсуждении", + "Post to conversation" : "Опубликовать в обсуждении", + "The recording failed. Please contact your administrator." : "Не удалось записать звонок. Пожалуйста, свяжитесь с администратором.", + "Location has been posted to {conversation}" : "Местоположение было отправлено в {conversation}", + "An error occurred while posting location to conversation" : "Произошла ошибка при отправке местоположения в обсуждение", + "Share to a conversation" : "Опубликовать в обсуждении", + "Share to conversation" : "Опубликовать в обсуждении", + "In conversation" : "В обсуждении", + "Search in conversation: {conversation}" : "Найти в обсуждении: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "В настоящий момент ваши запросы ограничены из-за защиты от брутфорс-атак", + "Error while clearing conversation history" : "Не удалось удалить историю сообщений обсуждения", + "Error occurred while allowing guests" : "Произошла ошибка при открытии доступа для гостей", + "Error occurred while disallowing guests" : "Произошла ошибка при закрытии доступа для гостей", + "Error occurred when restricting the conversation to moderator" : "Не удалось ограничить доступ к обсуждению только для модераторов", + "Error occurred when opening the conversation to everyone" : "Не удалось открыть доступ к обсуждению всем пользователям", + "Conversation password has been saved" : "Пароль для обсуждения сохранён", + "Conversation password has been removed" : "Пароль обсуждения был удалён", + "Error occurred while saving conversation password" : "Не удалось сохранить пароль для обсуждения", + "Call recording is starting." : "Начата запись вызова.", + "Call recording stopped while starting." : "Запись вызова остановлена ​​при запуске.", + "Call recording stopped. You will be notified once the recording is available." : "Запись вызова остановлена. Вы будете уведомлены, как только запись будет доступна.", + "Conversation picture set" : "Изображение обсуждения установлено", + "Conversation picture deleted" : "Изображение обсуждения удалено", + "Could not delete the conversation picture" : "Не удалось удалить изображение обсуждения", + "Could not remove the automatic expiration" : "Не удалось удалить автоматическое истечение срока действия", + "Could not post message: {errorMessage}" : "Не удалось опубликовать сообщение: {errorMessage}", + "Participant is banned successfully" : "Участник успешно забанен", + "Error while banning the participant" : "Ошибка при бане участника", + "An error occurred while fetching the participants" : "Произошла ошибка при получении списка участников", + "Could not send invitation to {actorId}" : "Не удалось отправить приглашение {actorId}", + "Invitations sent" : "Приглашения отправлены", + "Error occurred when sending invitations" : "Не удалось отправить приглашения", + "Failed to join the conversation." : "Не удалось присоединиться к обсуждению.", + "An error occurred while creating breakout rooms" : "Произошла ошибка при создании комнат обсуждения", + "An error occurred while re-ordering the attendees" : "Произошла ошибка при изменении порядка участников", + "An error occurred while deleting breakout rooms" : "Произошла ошибка при удалении комнат обсуждения", + "An error occurred while starting breakout rooms" : "Произошла ошибка при запуске комнат обсуждения", + "An error occurred while stopping breakout rooms" : "Произошла ошибка при остановке комнат обсуждения", + "An error occurred while sending a message to the breakout rooms" : "Произошла ошибка при отправке сообщения в комнаты обсуждения", + "An error occurred while requesting assistance" : "Произошла ошибка при запросе помощи", + "An error occurred while resetting the request for assistance" : "Произошла ошибка при сбросе запроса на помощь", + "An error occurred while joining breakout room" : "Произошла ошибка при присоединении к комнате обсуждения", + "Failed to rename the thread" : "Не удалось переименовать тему", + "Error fetching upcoming events" : "Ошибка при загрузке предстоящих встреч", + "Error fetching upcoming reminders" : "Ошибка при загрузке предстоящих напоминаний", + "An error occurred while accepting an invitation" : "Произошла ошибка при принятии приглашения", + "An error occurred while rejecting an invitation" : "Произошла ошибка при отклонении приглашения", + "{guest} (guest)" : "{guest} (гость)", + "Poll draft has been saved" : "Черновик опроса сохранён", + "An error occurred while saving the draft" : "Произошла ошибка при сохранении черновика", + "An error occurred while submitting your vote" : "При отправке вашего голоса произошла ошибка", + "An error occurred while ending the poll" : "Произошла ошибка при завершении опроса", + "An error occurred while deleting the poll draft" : "Произошла ошибка при удалении черновика опроса", + "Poll \"{name}\" was created by {user}. Click to vote" : "Опрос «{name}» создан {user}. Нажмите, чтобы проголосовать", + "Failed to add reaction" : "Не удалось добавить раакцию", + "Failed to remove reaction" : "Не удалось удалить реакцию", + "The server is in maintenance mode." : "Сервер в режиме обслуживания.", + "Federated server was updated." : "Федеративный сервер был обновлен.", + "Error while uploading file \"{fileName}\"" : "Не удалось передать на сервер файл «{fileName}»", + "Not enough free space to upload file \"{fileName}\"" : "Недостаточно свободного места для передачи на сервер файла «{fileName}» ", + "You are not allowed to share files" : "Вам не разрешено публиковать файлы", + "Error while sharing file" : "Ошибка сохранения файла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Приложение Talk для Nextcloud не полностью поддерживает браузер, который вы используете. Рекомендованные браузеры: Mozilla Firefox, Microsoft Edge, Google Chrome, Opera и Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Через %n час","Через %n часа","Через %n часов","Через %n часов"], + "_%n minute _::_%n minutes_" : ["%n минуту","%n минуты","%n минут","%n минут"], + "In {hours} and {minutes}" : "Через {hours} и {minutes}", + "_In %n minute_::_In %n minutes_" : ["Через %n минуту","Через %n минуты","Через %n минут","Через %n минут"], + "Later today – {timeLocale}" : "Позднее сегодня – {timeLocale}", + "Set time for later today" : "Установить время позднее сегодня", + "Tomorrow – {timeLocale}" : "Завтра – {timeLocale}", + "Set time for tomorrow" : "Установить время на завтра", + "This weekend – {timeLocale}" : "Эти выходные – {timeLocale}", + "Set time for this weekend" : "Установить время на эти выходные", + "Next week – {timeLocale}" : "Следующая неделя – {timeLocale}", + "Set time for next week" : "Установить время на следующую неделю", + "Message link copied to clipboard" : "Ссылка на сообщение скопирована в буфер обмена", + "Conversation link copied to clipboard" : "Ссылка на обсуждение скопирована в буфер обмена", + "The link could not be copied" : "Не удалось скопировать ссылку", + "Error while parsing a PROPFIND error" : "Ошибка при анализе ошибки PROPFIND", + "Sending signaling message has failed" : "Не удалось отправить сигнальное сообщение.", + "Lost connection to signaling server. Trying to reconnect." : "Потеряно соединение с сигнальным сервером. Попытка переподключения.", + "Lost connection to signaling server." : "Потеряно соединение с сигнальным сервером.", + "Connecting is taking longer than expected …" : "Подключение занимает больше времени чем ожидалось …", + "Failed to connect. Retrying …" : "Не удалось подключиться. Повторная попытка …", + "Failed to connect. The signaling server may be set up incorrectly" : "Не удалось подключиться. Сигнальный сервер может быть неверно настроен", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Настроенный сигнальный сервер необходимо обновить, чтобы он был совместим с этой версией Talk. Пожалуйста, свяжитесь с вашей технической поддержкой.", + "Please restart the app." : "Пожалуйста, перезапустите приложение.", + "Please reload the page." : "Обновите страницу.", + "Please try to restart the app." : "Пожалуйста, попробуйте перезапустить приложение.", + "Please try to reload the page." : "Пожалуйста, попробуйте перезагрузить страницу.", + "Do not disturb" : "Не беспокоить", + "Away" : "Отсутствует", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Выступающий {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Похоже, что вы разговариваете с выключенным звуком, пожалуйста, включите звук, чтобы другие смогли услышать вас", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не удалось установить соединение хотя бы с одним участником. Сервер TURN может быть необходим для вашего сценария. Пожалуйста, попросите вашего администратора настроить его, следуя {linkstart} этой документации {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Это занимает больше времени, чем ожидалось. Проверьте, установлены ли медиаразрешения браузера? Если да, пожалуйста, перезапустите браузер, так как аудио и видео не работают", + "Access to microphone & camera is only possible with HTTPS" : "Доступ к микрофону и камере возможен только по HTTPS", + "Please move your setup to HTTPS" : "Пожалуйста, используйте HTTPS", + "Access to microphone & camera was denied" : "Доступ к микрофону и камере был запрещён", + "WebRTC is not supported in your browser" : "Технология WebRTC не поддерживается вашим браузером", + "Please use a different browser like Firefox or Chrome" : "Воспользуйтесь другим браузером, например Firefox или Chrome", + "Error while accessing microphone & camera" : "Ошибка при доступе к микрофону и камере", + "%s Talk on your mobile devices" : "%s Talk для мобильных устройств", + "Join conversations at any time, anywhere, on any device." : "Присоединяйтесь к обсуждениям в любое время, в любом месте, с любого устройства.", + "Android app" : "Android приложение", + "iOS app" : "iOS приложение", + "__language_name__" : "Русский", + "Webhook Demo" : "Webhook демо", + "Call summary (%s)" : "Резюме вызова (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Бот для резюме вызова публикует обзорное сообщение сразу после вызова с перечислением всех участников и описанием задач", + "Tasks" : "Задачи", + "Notes" : "Заметки", + "Reports" : "Отчёты", + "Decisions" : "Итоги", + "Agenda" : "Агенда", + "Call summary" : "Резюме вызова", + "Call summary - {title}" : "Резюме вызова - {title}", + "Talk conversation for event" : "Обсуждение события в Talk", + "Client Push is installed, this improves the performance of desktop clients." : "«Client Push» установлен, это улучшает производительность настольных ПК-клиентов.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "«{notify_push}» не установлен, это может привести к проблемам с производительностью при использовании настольных ПК-клиентов.", + "Next meeting" : "Следующая встреча", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Запланируйте встречу из своего календаря. Обсуждение должно быть установлено как местоположение, чтобы отобразиться здесь", + "Join conversations from remote Nextcloud servers" : "Присоединитесь к беседам на удалённых серверах Nextcloud", + "Your default media state has been saved" : "Параметры медиа по умолчанию сохранены", + "Set reminder for later today" : "Установить напоминание позднее сегодня", + "Set reminder for tomorrow" : "Установить напоминание на завтра", + "Set reminder for this weekend" : "Установить напоминание на эти выходные", + "Set reminder for next week" : "Установить напоминание на следующую неделю", + "Generate summary" : "Сгенерировать резюме", + "Open poll • You voted already" : "Открытый опрос • Вы уже проголосовали", + "Open poll • Click to vote" : "Открытый опрос • Нажмите, чтобы проголосовать", + "Poll • Ended" : "Опрос • Завершён", + "Talk recording from {time} ({conversation})" : "Голосовое сообщение записано в {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Результаты опроса • %n голос","Результаты опроса • %n голоса","Результаты опроса • %n голосов","Результаты опроса • %n голосов"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Открытый опрос • %n голос","Открытый опрос • %n голоса","Открытый опрос • %n голосов","Открытый опрос • %n голосов"], + "Submit vote" : "Проголосовать", + "Your privacy setting has been saved" : "Параметры конфиденциальности сохранены", + "Your personal setting has been saved" : "Персональные параметры сохранены", + "Failed to save sounds setting" : "Не удалось сохранить настройки звуков", + "Sounds setting saved" : "Параметры звука сохранены", + "Always shown if recording consent is required" : "Всегда отображается, если требуется согласие на запись вызова", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk был обновлен, вы не можете начать или присоединиться к вызову.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Вы подключены к обсуждению в другом окне или устройстве. Данная возможность не поддерживается Nextcloud Talk в настоящее время, поэтому данная сессия будет закрыта.", + "Nextcloud Talk was updated." : "Nextcloud Talk был обновлен.", + "Nextcloud is in maintenance mode." : "Сервер находится в режиме обслуживания.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Федерация была обновлена.", + "Enable live translation" : "Включить онлайн-перевод", + "I picked list style" : "Я выбираю в стиле списка", + "Hey! Are you using Talk in list style or with message bubbles?" : "Привет! Ты используешь чат в Конференциях в стиле списка или пузырей?" +}, +"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);"); diff --git a/l10n/ru.json b/l10n/ru.json new file mode 100644 index 0000000..14b50d6 --- /dev/null +++ b/l10n/ru.json @@ -0,0 +1,2254 @@ +{ "translations": { + "a conversation" : "обсуждение", + "(Duration %s)" : "(Продолжительность %s)", + "You attended a call with {user1}" : "Вы участвовали в вызове с пользователем {user1}", + "_%n guest_::_%n guests_" : ["%n гость","%n гостя","%n гостей","%n гостей"], + "You attended a call with {user1} and {user2}" : "Вы участвовали в вызове с пользователями {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Вы участвовали в вызове с пользователями {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Вы участвовали в вызове с пользователями {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Вы участвовали в вызове с пользователями {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["ещё %n","ещё %n","ещё %n","ещё %n"], + "{actor} invited you to {call}" : "{actor} приглашает вас в вызов «{call}»", + "You were invited to a conversation or had a call" : "Вы были приглашены в обсуждение или в вызов", + "Other activities" : "Другие события", + "Talk" : "Конференции", + "Guest" : "Гость", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Добро пожаловать в приложение Конференции для Nextcloud!\nВ этом обсуждении приведена информация о новых функциях приложения.", + "## New in Talk %s" : "## Новое в приложении «Конференции» версии %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Браузеры Microsoft Edge и Safari теперь могут быть использованы для участия в аудио- и видеовызовах", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Частные обсуждения теперь постоянны и не могут быть преобразованы в групповые обсуждения путём добавления новых участником. Также, когда один из участников покидает такое обсуждение, оно больше не удаляется автоматически. Только если оба участника покинули обсуждение, оно удаляется с сервера", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Теперь вы можете уведомлять всех участников, написав в чат \"@all\"", + "- With the \"arrow-up\" key you can repost your last message" : "- Нажатием клавиши ↑ вы можете переслать своё последнее сообщение", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Теперь в приложении есть команды. Напишите \"/help\" в чат, чтобы увидеть, какие команды настроил ваш администратор", + "- With projects you can create quick links between conversations, files and other items" : "- С помощью проектов вы можете создавать быстрые ссылки между обсуждениями, файлами и другими объектами", + "- You can now mention guests in the chat" : "- Возможноcть упоминать гостей в сообщениях", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- У обсуждений теперь может быть лобби. Это позволит модераторам присоединиться к обсуждениям и вызовам раньше, чтобы подготовить встречу, в то время как пользователи и гости должны будут дождаться готовности", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Возможность непосредственного ответа на сообщения позволяет другим пользователям получать больше контекстной информации о содержимом сообщения", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Использование фильтра при поиске обсуждений и участников в существующих обсуждениях для упрощения поиска;", + "- You can now add custom user groups to conversations when the circles app is installed" : "- возможность добавлять к обсуждениям собственные группы пользователей при установленном приложении «Круги»;", + "- Check out the new grid and call view" : " - Новый режим просмотра «Сетка» и новый экран вызова;", + "- You can now upload and drag'n'drop files directly from your device into the chat" : " - Возможность загружать и перетаскивать в чат файлы с используемого устройства;", + "- Shared files are now opened directly inside the chat view with the viewer apps" : " - Возможность просматривать опубликованные файлы непосредственно в чате с использованием приложения для просмотра;", + "- You can now search for chats and messages in the unified search in the top bar" : " - Поиск обсуждений и сообщений из общей строки поиска, расположенной на верхней панели;", + "- Spice up your messages with emojis from the emoji picker" : " - Панель выбора эмодзи;", + "- You can now change your camera and microphone while being in a call" : " - Возможность сменить используемую камеру и микрофон во время вызова;", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : " - Возможность назначить обсуждениям контекст и описание для облегчения их поиска другими пользователями;", + "- See a read status and send failed messages again" : " - Просмотр статуса прочтения сообщения и повторная отправка сообщений в случае сбоя при их доставке;", + "- Raise your hand in a call with the R key" : " - Возможность «поднять руку» во время вызова (клавиша «R»);", + "- Join the same conversation and call from multiple devices" : "- Возможность одновременно подключаться к обсуждениям и вызовам с различных устройств;", + "- Send voice messages, share your location or contact details" : "- Передача голосовых сообщений, публикация местоположения и карточек контактов;", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Возможность добавить группу пользователей в обсуждение. Все новые члены группы будут автоматически добавлены в качестве участников;", + "- A preview of your audio and video is shown before joining a call" : "- Перед подключением к звонку отображается предварительный просмотр аудио- и видео c камеры", + "- You can now blur your background in the newly designed call view" : "- Теперь вы можете размыть фон в новом дизайне окна вызова", + "- Moderators can now assign general and individual permissions to participants" : "- Модераторы теперь могут назначать общие и индивидуальные разрешения для участников", + "- You can now react to chat messages" : "- Теперь вы можете реагировать на сообщения в чате", + "- In the sidebar you can now find an overview of the latest shared items" : "- На боковой панели теперь можно найти обзор последних общих элементов", + "- Use a poll to collect the opinions of others or settle on a date" : "- Используйте опрос, чтобы узнать мнение других людей или договориться о дате", + "- Configure an expiration time for chat messages" : "- Настройка срока жизни сообщений чата", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Начинайте вызовы, не уведомляя других участников большого обсуждения. Вы можете отправить индивидуальные уведомления о вызове после его начала.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Отправлять сообщения чата без уведомления пользователей, если они не являются срочными", + "- Emojis can now be autocompleted by typing a \":\"" : "- Эмодзи теперь можно заполнять автоматически, набрав «:»", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Свяжите различные элементы, используя новый смарт-выборщик, набрав «/»", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модераторы теперь могут создавать комнаты обсуждения (требуется Высокопроизводительный сервер).", + "- Calls can now be recorded (requires the High-performance backend)" : "- Вызовы теперь могут быть записаны (требуется Высокопроизводительный сервер)", + "- Conversations can now have an avatar or emoji as icon" : "- Разговоры теперь могут иметь аватар или эмодзи в качестве значка", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- В дополнение к размытому фону в видеовызовах теперь доступны виртуальные фоны", + "- Reactions are now available during calls" : "- Реакции теперь доступны во время вызовов", + "- Typing indicators show which users are currently typing a message" : "- Индикаторы набора показывают, какие пользователи в данный момент набирают сообщение", + "- Groups can now be mentioned in chats" : "- Группы теперь можно упоминать в сообщениях чата", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Записи вызовов автоматически расшифровываются, если зарегистрировано приложение - транскриптор", + "- Chat messages can be translated if a translation provider app is registered" : "- Сообщения чата могут быть переведены, если зарегистрировано приложение - переводчик", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** разметка теперь доступна в сообщениях _чата_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Теперь доступны веб-хуки для внедрения ботов. Дополнительную информацию смотрите в документации https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Установите напоминание на сообщение чата, чтобы позже снова получить уведомление", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Используйте **Личные заметки**, чтобы делать заметки и делиться информацией между вашими устройствами", + "- Captions allow to send a message with a file at the same time" : "- Подписи позволяют отправить текстовое сообщение одновременно с файлом", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Видео выступающего теперь отображается при презентации экрана, и реакции в вызове анимированы", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Сообщения теперь могут быть изменены авторами и модераторами в течение 6 часов", + "- Unsent message drafts are now saved in your browser" : "- Черновики неотправленных сообщений теперь сохраняются в вашем браузере.", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Обмен сообщениями теперь может происходит в федеративных обсуждениях с другими серверами Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модераторы теперь могут блокировать аккаунты и гостей, чтобы они не могли снова присоединиться к обсуждению", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Предстоящие вызовы из связанных с календарем событий и замены вне офиса теперь отображаются в обсуждениях", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Вызовы теперь можно совершать через федерации с другими Talk серверами (требуется Высокопроизводительный сервер)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- «Nextcloud Talk» клиент для настольных ПК доступен для Windows, macOS и Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Резюме записанных вызовов и непрочитанных сообщений в чате с помощью «Nextcloud Assistant»", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "Улучшенные встречи: распознавание гостей, приглашенных через адрес эл. почты, импорт списка участников в обсуждение, экспорт списка участников вызова и черновики опросов.", + "- Archive conversations to stay focused" : "- Возможность архивировать обсуждения", + "- Schedule a meeting into your calendar from within a conversation" : "- Назначение встречи в своём календаре прямо из обсуждения", + "- Search for messages of the current conversation directly in the right sidebar" : "- Поиск по сообщениям в текущем обсуждении через боковую панель", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "Обзор большего числа обсуждений с помощью нового компактного списка (доступно в настройках приложения)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "Обсуждения - встречи теперь синхронизируют название и описание из календаря и скрыты с помощью фильтра поиска до тех пор, пока они не будут близки ко времени начала", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Отметьте обсуждения как конфиденциальные в настройках уведомлений, чтобы скрыть содержимое сообщений из списка обсуждений и уведомлений", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Чтобы получать уведомления в режиме «Не беспокоить», отмечайте обсуждения как важные", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Добавляйте других участников к частному вызову, чтобы создать новый групповой вызов на лету", + "- Use threads to keep your chat and discussions organized" : "- Используйте темы для организации чата и дискуссий", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Транскрипция вызовов в реальном времени теперь доступна (требуется ExApp для транскрипций в реальном времени и Высокопроизводительный сервер)", + "- Moderators can now pin messages so they are kept at the top" : "- Теперь модераторы могут закреплять сообщения, чтобы они оставались вверху", + "- Schedule a message to send it at a later time" : "- Запланировать сообщение к отправке в указанное время", + "_All %n participant_::_All %n participants_" : ["%n участник","Все %n участника","Все %n участников","Все %n участников"], + "Talk updates ✅" : "Обновления приложения «Конференции» ✅", + "Reaction deleted by author" : "Реакция удалена автором", + "{actor} created the conversation" : "{actor} создал(а) обсуждение", + "You created the conversation" : "Вы создали обсуждение", + "System created the conversation" : "Обсуждение создано системой автоматически", + "An administrator created the conversation" : "Администратор создал обсуждение", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} переименовал(а) обсуждение «%1$s» в «%2$s»", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Вы переименовали обсуждение «%1$s» в «%2$s»", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор переименовал обсуждение «%1$s» в «%2$s»", + "{actor} set the description" : "{actor} установил(а) описание", + "You set the description" : "Вы установили описание", + "An administrator set the description" : "Администратор установил описание", + "{actor} removed the description" : "{actor} удалил(a) описание", + "You removed the description" : "Вы удалили описание", + "An administrator removed the description" : "Администратор удалил описание", + "You started a silent call" : "Вы начали тихий вызов", + "Outgoing silent call" : "Исходящий тихий вызов", + "{actor} started a silent call" : "{actor} начал(а) тихий вызов", + "Incoming silent call" : "Входящий тихий вызов", + "You started a call" : "Вы начали вызов", + "Outgoing call" : "Исходящий вызов", + "{actor} started a call" : "{actor} начал(а) вызов", + "Incoming call" : "Входящий вызов", + "{actor} joined the call" : "{actor} присоединился(лась) к вызову", + "You joined the call" : "Вы присоединились к вызову", + "{actor} left the call" : "{actor} покинул(а) вызов", + "You left the call" : "Вы покинули вызов", + "{actor} unlocked the conversation" : "{actor} разблокировал(а) обсуждение", + "You unlocked the conversation" : "Вы разблокировали обсуждение", + "An administrator unlocked the conversation" : "Администратор разблокировал обсуждение", + "{actor} locked the conversation" : "{actor} заблокировал(а) обсуждение", + "You locked the conversation" : "Вы заблокировали обсуждение", + "An administrator locked the conversation" : "Администратор заблокировал обсуждение", + "{actor} limited the conversation to the current participants" : "{actor} ограничил(а) доступ к обсуждению только текущими участниками", + "You limited the conversation to the current participants" : "Вы ограничили доступ к обсуждению только текущими участниками", + "An administrator limited the conversation to the current participants" : "Администратор ограничил доступ к обсуждению только текущими участниками", + "{actor} opened the conversation to registered users" : "{actor} открыл(а) доступ к обсуждению для зарегистрированных пользователей", + "You opened the conversation to registered users" : "Вы открыли доступ к обсуждению для зарегистрированных пользователей", + "An administrator opened the conversation to registered users" : "Администратор открыл доступ к обсуждению для зарегистрированных пользователей", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} открыл обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "You opened the conversation to registered users and users created with the Guests app" : "Вы открыли обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор открыл обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "The conversation is now open to everyone" : "Обсуждение теперь открыто для всех", + "{actor} opened the conversation to everyone" : "{actor} открыл(а) обсуждение для всех", + "You opened the conversation to everyone" : "Вы открыли обсуждение для всех", + "{actor} restricted the conversation to moderators" : "{actor} ограничил(а) доступ к обсуждению только для модераторов", + "You restricted the conversation to moderators" : "Вы ограничили доступ к обсуждению только для модераторов", + "{actor} started breakout rooms" : "{actor} запустил(а) комнаты обсуждения", + "You started breakout rooms" : "Вы запустили комнаты обсуждения", + "{actor} stopped breakout rooms" : "{actor} остановил(а) комнаты обсуждения", + "You stopped breakout rooms" : "Вы остановили комнаты обсуждения", + "{actor} allowed guests" : "{actor} разрешил(а) участие гостей", + "You allowed guests" : "Вы разрешили участие гостей", + "An administrator allowed guests" : "Администратор разрешил участие гостей", + "{actor} disallowed guests" : "{actor} запретил(а) участие гостей", + "You disallowed guests" : "Вы запретили участие гостей", + "An administrator disallowed guests" : "Администратор запретил участие гостей", + "{actor} set a password" : "{actor} установил(а) пароль", + "You set a password" : "Вы установили пароль", + "An administrator set a password" : "Администратор установил пароль", + "{actor} removed the password" : "{actor} удалил(а) пароль", + "You removed the password" : "Вы удалили пароль", + "An administrator removed the password" : "Администратор удалил пароль", + "{actor} added {user}" : "{actor} добавил(а) пользователя {user}", + "You joined the conversation" : "Вы присоединились к обсуждению", + "{actor} joined the conversation" : "{actor} присоединился(лась) к обсуждению", + "You added {user}" : "Вы добавили {user}", + "{actor} added you" : "{actor} добавил(а) Вас", + "An administrator added you" : "Администратор добавил вас", + "An administrator added {user}" : "Администратор добавил {user} ", + "You left the conversation" : "Вы покинули обсуждение", + "{actor} left the conversation" : "{actor} покинул(а) обсуждение", + "{actor} removed {user}" : "{actor} исключил(а) {user}", + "You removed {user}" : "Вы исключили {user}", + "{actor} removed you" : "{actor} исключил(а) Вас", + "An administrator removed you" : "Администратор исключил вас", + "An administrator removed {user}" : "Администратор исключил {user} ", + "{actor} invited {federated_user}" : "{actor} пригласил(а) {federated_user}", + "You invited {federated_user}" : "Вы пригласили {federated_user}", + "You accepted the invitation" : "Вы приняли приглашение", + "{actor} invited you" : "{actor} пригласил(а) Вас", + "An administrator invited you" : "Администратор пригласил Вас", + "An administrator invited {federated_user}" : "Администратор пригласил {federated_user} ", + "{federated_user} accepted the invitation" : "{federated_user} принял(а) приглашение", + "{actor} removed {federated_user}" : "{actor} исключил(а) {federated_user}", + "You removed {federated_user}" : "Вы исключили {federated_user}", + "You declined the invitation" : "Вы отклонили приглашение", + "An administrator removed {federated_user}" : "Администратор исключил {federated_user} ", + "{federated_user} declined the invitation" : "{federated_user} отклонил(а) приглашение", + "{actor} added group {group}" : "{actor} добавил(а) группу {group}", + "You added group {group}" : "Вы добавили группу {group}", + "An administrator added group {group}" : "Администратор добавил группу {group}", + "{actor} removed group {group}" : "{actor} исключил(а) группу {group}", + "You removed group {group}" : "Вы исключили группу {group}", + "An administrator removed group {group}" : "Администратор исключил группу {group}", + "{actor} added team {circle}" : "{actor} добавил(а) команду {circle}", + "You added team {circle}" : "Вы добавили команду {circle}", + "An administrator added team {circle}" : "Администратор добавил команду {circle}", + "{actor} removed team {circle}" : "{actor} исключил(а) команду {circle}", + "You removed team {circle}" : "Вы исключили команду {circle}", + "An administrator removed team {circle}" : "Администратор исключил команду {circle}", + "{actor} added {phone}" : "{actor} добавил(а) {phone}", + "You added {phone}" : "Вы добавили {phone}", + "An administrator added {phone}" : "Администратор добавил {phone} ", + "{actor} removed {phone}" : "{actor} исключил(а) {phone}", + "You removed {phone}" : "Вы исключили {phone}", + "An administrator removed {phone}" : "Администратор исключил {phone}", + "{actor} promoted {user} to moderator" : "{actor} назначил(а) пользователя {user} модератором", + "You promoted {user} to moderator" : "Вы назначили {user} модератором", + "{actor} promoted you to moderator" : "{actor} назначил(а) Вас модератором", + "An administrator promoted you to moderator" : "Администратор назначил Вас модератором", + "An administrator promoted {user} to moderator" : "Администратор назначил {user} модератором", + "{actor} demoted {user} from moderator" : "{actor} исключил(а) пользователя {user} из модераторов", + "You demoted {user} from moderator" : "Вы исключили {user} из модераторов", + "{actor} demoted you from moderator" : "{actor} исключил(а) Вас из модераторов", + "An administrator demoted you from moderator" : "Администратор исключил Вас из модераторов", + "An administrator demoted {user} from moderator" : "Администратор исключил {user} из модераторов", + "{actor} shared a file which is no longer available" : "{actor} предоставил(а) общий доступ к файлу, который более не доступен", + "You shared a file which is no longer available" : "Вы поделились файлом, который более не доступен", + "File shares are currently not supported in federated conversations" : "Обмен файлами на данный момент не поддерживается федеративными обсуждениями", + "The shared location is malformed" : "Неправильно указано общее местоположение ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} настроил(а) Matterbridge для обмена сообщениями с другими чатами", + "You set up Matterbridge to synchronize this conversation with other chats" : "Вы настроили Matterbridge для обмена сообщениями с другими чатами", + "{actor} created thread {title}" : "{actor} создал(а) тему {title}", + "You created thread {title}" : "Вы создали тему {title}", + "{actor} renamed thread {title}" : "{actor} переименовал тему {title}", + "You renamed thread {title}" : "Вы переименовали тему {title}", + "{actor} updated the Matterbridge configuration" : "{actor} изменил(а) конфигурацию системы обмена сообщениями Matterbridge", + "You updated the Matterbridge configuration" : "Вы изменили конфигурацию системы обмена сообщениями Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} удалил(а) конфигурацию системы обмена сообщениями Matterbridge", + "You removed the Matterbridge configuration" : "Вы удалили конфигурацию системы обмена сообщениями Matterbridge", + "{actor} started Matterbridge" : "{actor} запустил(а) систему обмена сообщениями Matterbridge", + "You started Matterbridge" : "Вы запустили систему обмена сообщениями Matterbridge", + "{actor} stopped Matterbridge" : "{actor} остановил(а) систему обмена сообщениями Matterbridge", + "You stopped Matterbridge" : "Вы остановили систему обмена сообщениями Matterbridge", + "{actor} deleted a message" : "{actor} удалил(а) сообщение", + "You deleted a message" : "Вы удалили сообщение", + "{actor} edited a message" : "{actor} изменил(а) сообщение", + "You edited a message" : "Вы изменили сообщение", + "{actor} pinned a message" : "{actor} закрепил(а) сообщение", + "You pinned a message" : "Вы закрепили сообщение", + "{actor} unpinned a message" : "{actor} открепил(а) сообщение", + "Message was automatically unpinned" : "Сообщение было автоматически откреплено", + "You unpinned a message" : "Вы открепили сообщение", + "{actor} deleted a reaction" : "{actor} удалил(а) реакцию", + "You deleted a reaction" : "Вы удалили реакцию", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Вы установили срок жизни сообщений в %n неделю","Вы установили срок жизни сообщений в %n недели","Вы установили срок жизни сообщений в %n недель","Вы установили срок жизни сообщений в %n недель"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Вы установили срок жизни сообщений в %n день","Вы установили срок жизни сообщений в %n дня","Вы установили срок жизни сообщений в %n дней","Вы установили срок жизни сообщений в %n дней"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Вы установили срок жизни сообщений в %n час","Вы установили срок жизни сообщений в %n часа","Вы установили срок жизни сообщений в %n часов","Вы установили срок жизни сообщений в %n часов"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Вы установили срок жизни сообщений в %n минуту","Вы установили срок жизни сообщений в %n минуты","Вы установили срок жизни сообщений в %n минут","Вы установили срок жизни сообщений в %n минут"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} установил(а) срок жизни сообщений в %n неделю","{actor} установил(а) срок жизни сообщений в %n недели","{actor} установил(а) срок жизни сообщений в %n недель","{actor} установил(а) срок жизни сообщений в %n недель"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} установил(а) срок жизни сообщений в %n день","{actor} установил(а) срок жизни сообщений в %n дня","{actor} установил(а) срок жизни сообщений в %n дней","{actor} установил(а) срок жизни сообщений в %n дней"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} установил(а) срок жизни сообщений в %n час","{actor} установил(а) срок жизни сообщений в %n часа","{actor} установил(а) срок жизни сообщений в %n часов","{actor} установил(а) срок жизни сообщений в %n часов"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} установил(а) срок жизни сообщений в %n минуту","{actor} установил(а) срок жизни сообщений в %n минуты","{actor} установил(а) срок жизни сообщений в %n минут","{actor} установил(а) срок жизни сообщений в %n минут"], + "{actor} disabled message expiration" : "{actor} отключил срок жизни сообщений", + "You disabled message expiration" : "Вы отключили срок жизни сообщений", + "{actor} cleared the history of the conversation" : "{actor} удалил(а) историю обсуждения", + "You cleared the history of the conversation" : "Вы очистили историю обсуждения", + "{actor} set the conversation picture" : "{actor} установил изображение обсуждения", + "You set the conversation picture" : "Вы установили изображение обсуждения", + "{actor} removed the conversation picture" : "{actor} удалил изображение обсуждения", + "You removed the conversation picture" : "Вы удалили изображение обсуждения", + "{actor} ended the poll {poll}" : "{actor} завершил(а) опрос {poll}", + "You ended the poll {poll}" : "Вы завершили опрос {poll}", + "{actor} started the video recording" : "{actor} начал(а) запись видео", + "You started the video recording" : "Вы начали запись видео", + "{actor} stopped the video recording" : "{actor} остановил запись видео", + "You stopped the video recording" : "Вы остановили запись видео", + "{actor} started the audio recording" : "{actor} начал(а) запись аудио", + "You started the audio recording" : "Вы начали запись аудио", + "{actor} stopped the audio recording" : "{actor} остановил запись аудио", + "You stopped the audio recording" : "Вы остановили запись аудио", + "The recording failed" : "Ошибка записи", + "Someone voted on the poll {poll}" : "Кто-то проголосовал в опросе {poll}", + "Message deleted by author" : "Сообщение удалено автором", + "Message deleted by {actor}" : "Сообщение удалено {actor}", + "Message deleted by you" : "Сообщение удалено Вами", + "Deleted user" : "Удалённый пользователь", + "Unknown number" : "Неизвестный номер", + "Administration" : "Администрирование", + "System" : "Системный", + "%s (guest)" : "%s (гость)", + "Missed call" : "Пропущенный вызов", + "Unanswered call" : "Вызов без ответа", + "Call ended (Duration {duration})" : "Вызов завершён (Продолжительность {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завершил(а) вызов (Продолжительность {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Вызов с %n гостем завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})","Вызов с %n гостями завершён по достижении максимальной продолжительности (Продолжительность {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Вызов с %n гостем завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})","Вызов с %n гостями завершён (Продолжительность {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} завершил(а) вызов с %n гостем (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})","{actor} завершил(а) вызов с %n гостями (Продолжительность {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1} ended (Duration {duration})" : "Вызов с {user1} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завершил(а) вызов с {user1} (Продолжительность {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1} и {user2} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Вызов с {user1} и {user2} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завершил(а) вызов с {user1} и {user2} (Продолжительность {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2} и {user3} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Вызов с {user1}, {user2} и {user3} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2} и {user3} (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2}, {user3} и {user4} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Вызов с {user1}, {user2}, {user3} и {user4} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2}, {user3} и {user4} (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Вызов с {user1}, {user2}, {user3}, {user4} и {user5} завершён по достижении максимальной продолжительности (Продолжительность {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Вызов с {user1}, {user2}, {user3}, {user4} и {user5} завершён (Продолжительность {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завершил(а) вызов с {user1}, {user2}, {user3}, {user4} и {user5} (Продолжительность {duration})", + "Message of {user} in {conversation}" : "Сообщение от {user} в {conversation}", + "Message of {user}" : "Сообщение от {user}", + "Message of a deleted user in {conversation}" : "Сообщение от удалённого пользователя в {conversation}", + "Talk conversations" : "Обсуждения", + "Talk to %s" : "Начать обсуждение с %s", + "An error occurred. Please contact your administrator." : "Произошла ошибка. Пожалуйста, свяжитесь с администратором.", + "App disabled" : "Приложение отключено", + "Conversation subfolders are disabled" : "Подпапки для обсуждений отключены", + "Storage quota exceeded" : "Превышена квота хранилища", + "Could not prepare conversation folder" : "Не удалось подготовить папку для обсуждения", + "File not found" : "Файл не найден", + "Path must point to a file" : "Путь должен указывать на файл", + "File is not inside the conversation draft folder for this room" : "Файл не найден в черновой папке для этого обсуждения", + "File is not shared, or shared but not with the user" : "Файл не имеет общего доступа, либо имеет, но не с пользователем", + "No account available to delete." : "Отсутствуют учётные записи, которые возможно удалить.", + "Poll" : "Опрос", + "Password needs to be set" : "Необходимо установить пароль", + "Uploading the file failed" : "Не удалось загрузить файл", + "No image file provided" : "Файл изображения не указан", + "File is too big" : "Файл слишком большой", + "Invalid file provided" : "Указан неправильный файл", + "Invalid image" : "Некорректное изображение", + "Unknown filetype" : "Неизвестный тип файла", + "Talk mentions" : "Упоминания в обсуждениях", + "More conversations" : "Больше обсуждений", + "Say hi to your friends and colleagues!" : "Поприветствуйте своих друзей и коллег.", + "No unread mentions" : "Нет ни одного непрочитанного упоминания", + "Call in progress" : "Выполняется вызов", + "You were mentioned" : "Вы были упомянуты", + "Write to conversation" : "Написать в обсуждение", + "Writes event information into a conversation of your choice" : "Выводит в обсуждение выбранную информацию о событии", + "Missing email field in header line" : "Отсутствует поле «email» в строке заголовка", + "Following lines are invalid: %s" : "Следующие строки некорректны: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s пригласил вас в обсуждение «%2$s».", + "You were invited to conversation \"%s\"." : "Вы были приглашены в обсуждение «%s».", + "Conversation invitation" : "Приглашение на участие в обсуждении", + "Scheduled time" : "Запланированное время", + "Description" : "Описание", + "You can also dial-in via phone with the following details" : "Вы можете позвонить в конференцию, использую приведённые ниже данные", + "Dial-in information" : "Сведения для звонка", + "Meeting ID" : "Идентификатор встречи (ID)", + "Your PIN" : "Ваш ПИН", + "Click the button below to join the lobby now." : "Нажмите кнопку ниже, чтобы присоединиться к лобби прямо сейчас.", + "Click the link below to join the lobby now." : "Нажмите ссылку ниже, чтобы присоединиться к лобби прямо сейчас.", + "Join lobby for \"%s\"" : "Присоединиться к лобби в «%s»", + "Click the button below to join the conversation now." : "Нажмите кнопку ниже, чтобы присоединиться к обсуждению прямо сейчас.", + "Click the link below to join the conversation now." : "Нажмите ссылку ниже, чтобы присоединиться к обсуждению прямо сейчас.", + "Join \"%s\"" : "Присоединиться к «%s»", + "Meeting" : "Встреча", + "Password request: %s" : "Запрос пароля: %s", + "Private conversation" : "Частное обсуждение", + "Deleted user (%s)" : "Удалённый пользователь (%s)", + "Failed to upload call recording" : "Не удалось загрузить запись вызова", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Серверу записи не удалось загрузить запись вызова {call}. Пожалуйста, обратитесь к администрации.", + "Share to chat" : "Поделиться в чате", + "Dismiss notification" : "Скрыть уведомление", + "Call recording now available" : "Доступна запись вызовов", + "The recording for the call in {call} was uploaded to {file}." : "Запись вызова в {call} была загружена в {file}.", + "Transcript now available" : "Расшифровка теперь доступна", + "The transcript for the call in {call} was uploaded to {file}." : "Расшифровка вызова в {call} была загружена в {file}.", + "Failed to transcript call recording" : "Не удалось загрузить расшифровку вызова", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не удалось расшифровать запись из {file} для вызова {call}. Пожалуйста, обратитесь к администрации.", + "Call summary now available" : "Доступно текстовое резюме вызова", + "The summary for the call in {call} was uploaded to {file}." : "Текстовое резюме вызова в {call} было загружено в {file}.", + "Failed to summarize call recording" : "Не удалось резюмировать запись вызова", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не удалось резюмировать запись из {file} для вызова {call}. Пожалуйста, обратитесь к администрации.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} пригласил вас присоединиться к обсуждению {roomName} на {remoteServer}", + "Accept" : "Принять", + "Decline" : "Отклонить", + "{user1} invited you to a federated conversation" : "{user} пригласил(а) вас в федеративное обсуждение", + "Someone reacted" : "Кто-то отреагировал", + "New message" : "Создать сообщение", + "Reminder" : "Напоминание", + "Someone mentioned you" : "Кто-то упомянул вас", + "Notification" : "Уведомление", + "Someone reacted in a private conversation" : "Кто-то отреагировал в частном обсуждении", + "You received a message in a private conversation" : "Вы получили сообщение в частном обсуждении", + "Reminder in a private conversation" : "Напоминание в частном обсуждении", + "Someone mentioned you in a private conversation" : "Кто-то упомянул вас в частном обсуждении", + "Notification in a private conversation" : "Уведомление в частном обсуждении", + "Reminder: You in {call}" : "Напоминание: Вы в {call}", + "Reminder: {user} in {call}" : "Напоминание: {user} в {call}", + "Reminder: Deleted user in {call}" : "Напоминание: удалённый пользователь в {call}", + "Reminder: {guest} (guest) in {call}" : "Напоминание: {guest} (гость) в {call}", + "Reminder: Guest in {call}" : "Напоминание: Гость в {call}", + "{user} reacted with {reaction}" : "{user} отреагировал(а) с {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} отреагировал(а) с {reaction} в {call}", + "Deleted user reacted with {reaction} in {call}" : "Удалённый пользователь отреагировал с {reaction} в {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (гость) отреагировал(а) с {reaction} в {call}", + "Guest reacted with {reaction} in {call}" : "Гость отреагировал с {reaction} в {call}", + "{user} in {call}" : "{user} в {call}", + "Deleted user in {call}" : "Удалённый пользователь в {call}", + "{guest} (guest) in {call}" : "{guest} (гость) в {call}", + "Guest in {call}" : "Гость в {call}", + "{user} sent you a private message" : "{user} отправил(а) Вам личное сообщение", + "{user} sent a message in conversation {call}" : "{user} отправил(а) сообщение в обсуждении {call}", + "A deleted user sent a message in conversation {call}" : "Удалённый пользователь отправил сообщение в обсуждении {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гость) отправил(а) сообщение в обсуждении {call}", + "A guest sent a message in conversation {call}" : "Гость отправил сообщение в обсуждении {call}", + "{user} replied to your private message" : "{user} ответил(а) на ваше личное сообщение", + "{user} replied to your message in conversation {call}" : "{user} ответил(а) на ваше сообщение в обсуждении {call}", + "A deleted user replied to your message in conversation {call}" : "Удалённый пользователь ответил на ваше сообщение в обсуждении {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гость) ответил(а) на ваше сообщение в обсуждении {call}", + "A guest replied to your message in conversation {call}" : "Гость ответил на ваше сообщение в обсуждении {call}", + "Reminder: You in private conversation {call}" : "Напоминание: Вы в частном обсуждении {call}", + "Reminder: A deleted user in private conversation {call}" : "Напоминание: удалённый пользователь в частном обсуждении {call}", + "Reminder: {user} in private conversation" : "Напоминание: {user} в частном обсуждении", + "Reminder: You in conversation {call}" : "Напоминание: Вы в обсуждении {call}", + "Reminder: {user} in conversation {call}" : "Напоминание: {user} в обсуждении {call}", + "Reminder: A deleted user in conversation {call}" : "Напоминание: удалённый пользователь в обсуждении {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Напоминание: {guest} (гость) в обсуждении {call}", + "Reminder: A guest in conversation {call}" : "Напоминание: Гость в обсуждении {call}", + "{user} reacted with {reaction} to your private message" : "{user} отреагировал(а) с {reaction} на ваше личное сообщение", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} отреагировал(а) с {reaction} на ваше сообщение в обсуждении {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Удалённый пользователь отреагировал с {reaction} на ваше сообщение в обсуждении {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гость) отреагировал(а) с {reaction} на ваше сообщение в обсуждении {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гость отреагировал с {reaction} на ваше сообщение в обсуждении {call}", + "{user} mentioned you in a private conversation" : "{user} упомянул(а) Вас в частном обсуждении", + "{user} mentioned group {group} in conversation {call}" : "{user} упомянул(а) группу {group} в обсуждении {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} упомянул(а) команду {team} в обсуждении {call}", + "{user} mentioned everyone in conversation {call}" : "{user} упомянул(а) всех в обсуждении {call}", + "{user} mentioned you in conversation {call}" : "{user} упомянул(а) Вас в обсуждении {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Удалённый пользователь упомянул группу {group} в обсуждении {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Удалённый пользователь упомянул команду {team} в обсуждении {call}", + "A deleted user mentioned everyone in conversation {call}" : "Удалённый пользователь упомянул всех в обсуждении {call}", + "A deleted user mentioned you in conversation {call}" : "Удалённый пользователь упомянул Вас в обсуждении {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гость) упомянул(а) группу {group} в обсуждении {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гость) упомянул(а) команду {team} в обсуждении {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гость) упомянул(а) всех в обсуждении {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гость) упомянул(а) Вас в обсуждении {call}", + "A guest mentioned group {group} in conversation {call}" : "Гость упомянул группу {group} в обсуждении {call}", + "A guest mentioned team {team} in conversation {call}" : "Гость упомянул команду {team} в обсуждении {call}", + "A guest mentioned everyone in conversation {call}" : "Гость упомянул всех в обсуждении {call}", + "A guest mentioned you in conversation {call}" : "Гость упомянул Вас в обсуждении {call}", + "View message" : "Просмотреть сообщение", + "Dismiss reminder" : "Отменить напоминание", + "View chat" : "Просмотреть чат", + "{user} invited you to a group conversation: {call}" : "{user} пригласил(а) вас в групповое обсуждение {call}", + "Join call" : "Присоединиться к вызову", + "Answer call" : "Ответить на вызов", + "{user} would like to talk with you" : "{user} хочет начать с Вами обсуждение", + "Call back" : "Перезвонить", + "You missed a call from {user}" : "Вы пропустили вызов от {user}", + "Accept call" : "Принять вызов", + "Incoming phone call from {call}" : "Входящий телефонный вызов от {call}", + "You missed a phone call from {call}" : "Вы пропустили телефонный вызов от {call}", + "A group call has started in {call}" : "Вызов начался в обсуждении {call}", + "You missed a group call in {call}" : "Вы пропустили вызов в обсуждении {call}", + "{email} is requesting the password to access {file}" : "{email} запрашивает пароль для доступа к файлу «{file}»", + "{email} tried to request the password to access {file}" : "Попытка запроса пароля от {email} для доступа к «{file}»", + "Someone is requesting the password to access {file}" : "Кто-то запрашивает пароль для доступа к файлу «{file}»", + "Someone tried to request the password to access {file}" : "Кто-то пытался запросить пароль для доступа к «{file}»", + "Open settings" : "Открыть настройки", + "Hosted signaling server added" : "Размещённый сигнальный сервер добавлен", + "The hosted signaling server is now configured and will be used." : "Размещённый сигнальный сервер настроен и готов к использованию.", + "Hosted signaling server removed" : "Размещённый сигнальный сервер удален", + "The hosted signaling server was removed and will not be used anymore." : "Размещенный сигнальный сервер был удален и больше не будет использоваться.", + "Hosted signaling server changed" : "Размещённый сигнальный сервер изменен", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Состояние учётной записи размещённого сигнального сервера изменено с «{oldstatus}» на «{newstatus}».", + "pending" : "ожидается", + "active" : "активно", + "expired" : "истёк", + "blocked" : "заблокирован", + "error" : "ошибка", + "The certificate of {host} expires in {days} days" : "Сертификат {host} истечет через {days} дней", + "The certificate of {host} expired" : "Сертификат {host} истёк", + "Contact via Talk" : "Связаться через Конференции", + "Open Talk" : "Перейти в Конференции", + "Default" : "По умолчанию", + "Send messages, create threads, and start voice and video calls." : "Отправляйте сообщения, создавайте темы и начинайте аудио- и видеовызовы.", + "Presentation" : "Презентация", + "Voice room" : "Голосовой чат", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Напрямую присоединяйтесь к вызову: идеально для спонтанных встреч", + "Webinar" : "Вебинар", + "Conversations" : "Обсуждения", + "Messages in current conversation" : "Сообщения в текущем обсуждении", + "{user}" : "{user}", + "Messages" : "Сообщения", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Сообщения в других обсуждениях", + "One-to-one rooms always need to show the other users avatar" : "Личные чаты всегда должны показывать аватар собеседника", + "Invalid emoji character" : "Недопустимый символ эмодзи", + "Invalid background color" : "Недопустимый цвет фона", + "Avatar image is not square" : "Изображение аватара не квадратное", + "Room {number}" : "Комната {number}", + "Other" : "Другое", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Не удалось запросить пробный период использования, сервер недоступен, попытайтесь повторить запрос через некоторое время.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Не удалось проверить подлинность этого сервера, возможно он не прошёл проверку адреса, т.к. недоступен из интернета.", + "Something unexpected happened." : "Произошла неожиданная ошибка.", + "The URL is invalid." : "URL указан некорректно.", + "An HTTPS URL is required." : "Необходимо указать HTTPS URL.", + "The email address is invalid." : "Адрес электронной почты указан некорректно.", + "The language is invalid." : "Язык указан некорректно.", + "The country is invalid." : "Страна указана некорректно.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Не удалось запросить пробный период, дополнительная информация сохранена в файлах журналов.", + "Too many requests are send from your servers address. Please try again later." : "С адреса этого сервера поступило слишком много запросов, попытайтесь повторить через некоторое время.", + "There is already a trial registered for this Nextcloud instance." : "Для этого сервера уже предоставлен пробный период использования.", + "Something unexpected happened. Please try again later." : "Произошла неожиданная ошибка, попытайтесь позднее.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Не удалось запросить пробный период использования, так как от вашего сервера получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "Trial requested but failed to get account information. Please check back later." : "Запрос пробного периода получен, но не удалось получить информацию об учётных данных, попытайтесь повторить запрос через некоторое время.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Не удалось проверить подлинность запроса, возможно ваш сервер не прошёл проверку адреса, так как недоступен из интернета.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Не удалось запросить пробный период использования, так как от сервера, предоставляющего эту услугу, получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Не удалось получить данные об учётной записи, более подробные сведения приведены в файлах журналов.", + "There is no such account registered." : "Указанная учётная запись не зарегистрирована.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Не удалось получить сведения об учётной записи, т.к. недоступен сервер, предоставляющий услугу на пробный период.", + "Deleting the hosted signaling server account failed. Please check back later." : "Не удалось удалить учётную запись сигнального сервера, повторите попытку через некоторое время.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Не удалось удалить учётную запись, так как от сервера, предоставляющего эту услугу, получены неожиданные данные. Попытайтесь повторить запрос через некоторое время.", + "There is a problem with deleting the account. Please check your logs for further information." : "Не удалось удалить учётную запись, более подробные сведения приведены в файлах журналов.", + "Too many requests are sent from your servers address. Please try again later." : "С адреса этого сервера поступило слишком много запросов, попытайтесь повторить через некоторое время.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Не удалось удалить учётную запись, т.к. недоступен сервер, предоставляющий услугу на пробный период. Попытайтесь повторить через некоторое время.", + "Note to self" : "Личные заметки", + "A place for your private notes, thoughts and ideas" : "Место для ваших личных заметок, мыслей и идей", + "Transcript is AI generated and may contain mistakes" : "Расшифровка сгенерирована при помощи AI и может быть неточной", + "Summary is AI generated and may contain mistakes" : "Резюме сгенерировано при помощи AI и может быть неточным", + "Let's get started!" : "Давайте начнём!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** - это безопасная коммуникационная платформа на собственном хостинге, которая легко интегрируется в экосистему Nextcloud.\n\n#### Ключевые особенности Nextcloud Talk:\n\n* Чат и обмен сообщениями в личных и групповых чатах.\n* Голосовые и видео-вызовы\n* Обмен файлами и интеграция с другими приложениями Nextcloud.\n* Настраиваемые параметры обсуждений, модерация и контроль конфиденциальности.\n* Веб-клиент, клиенты для настольных ПК и мобильных устройств (iOS и Android)\n* Частное и безопасное общение\n\nУзнайте больше в [пользовательской документации](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Добро пожаловать в Nextcloud Talk\n\nNextcloud Talk - это приватный и мощный мессенджер, интегрированный с Nextcloud. Общайтесь в частных или групповых обсуждениях, сотрудничайте с помощью голосовых и видео-вызовов, организуйте вебинары и мероприятия, настраивайте свои обсуждения и многое другое.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматирование текста для создания ярких сообщений\n\nВ Nextcloud Talk вы можете использовать синтаксис Markdown для форматирования сообщений. Например, применить форматирование **жирным шрифтом** или *курсивом* или `выделить текст как код`. Вы даже можете создавать таблицы и добавлять заголовки в текст.\n\nНужно исправить опечатку или изменить форматирование? Отредактируйте свое сообщение, нажав «Редактировать сообщение» в меню сообщения.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Добавление вложений и ссылок\n\nПрикрепляйте файлы из Nextcloud Hub с помощью кнопки «+». Делитесь элементами из «Файлов» и других приложений Nextcloud. Некоторые приложения даже поддерживают интерактивные виджеты, например, «Текст».", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Пусть разговоры идут своим чередом: упоминайте пользователей, реагируйте на сообщения и многое другое\n\nВы можете упомянуть всех участников обсуждения при помощи «%s», или конкретных участников, набрав «@» и выбрав имя из списка.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Вы можете отвечать на сообщения, пересылать их в другие чаты и людям, а также копировать содержимое сообщений.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Делайте больше с помощью Smart Picker\n\nПросто наберите «/» или перейдите в меню «+», чтобы открыть Smart Picker, где вы можете прикреплять к сообщениям различный контент. Вы можете настроить Smart Picker на добавление элементов из приложений Nextcloud, GIF-файлов, местоположения на карте, контента, сгенерированного ИИ, и многого другого.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Управление настройками обсуждения\n\nВ меню обсуждения вы можете получить доступ к различным настройкам, например:\n* Редактировать информацию об обсуждении\n* Управлять уведомлениями\n* Применять многочисленные правила модерации\n* Настроить доступ и безопасность\n* Включить ботов\n* и многое другое!", + "Andorra" : "Андорра", + "United Arab Emirates" : "Объединенные Арабские Эмираты", + "Afghanistan" : "Афганистан", + "Antigua and Barbuda" : "Антигуа и Барбуда", + "Anguilla" : "Ангилья", + "Albania" : "Албания", + "Armenia" : "Армения", + "Angola" : "Ангола", + "Antarctica" : "Антарктика", + "Argentina" : "Аргентина", + "American Samoa" : "Американское Самоа", + "Austria" : "Австрия", + "Australia" : "Австралия", + "Aruba" : "Аруба", + "Åland Islands" : "Аландские острова", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Босния и Герцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельгия", + "Burkina Faso" : "Буркина-Фасо", + "Bulgaria" : "Болгария", + "Bahrain" : "Бахрейн", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сен-Бартелеми", + "Bermuda" : "Бермудские Острова", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Боливия", + "Bonaire, Sint Eustatius and Saba" : "Бонэйр, Синт-Эстатиус и Саба", + "Brazil" : "Бразилия", + "Bahamas" : "Багамские острова", + "Bhutan" : "Бутан", + "Bouvet Island" : "Остров Буве", + "Botswana" : "Ботсвана", + "Belarus" : "Беларусь", + "Belize" : "Белиз", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосовые (Килинг) острова", + "Congo, the Democratic Republic of the" : "Конго (Демократическая Республика)", + "Central African Republic" : "Центральная Африканская Республика", + "Congo" : "Конго", + "Switzerland" : "Швейцария", + "Côte d'Ivoire" : "Кот-д’Ивуар", + "Cook Islands" : "Острова Кука", + "Chile" : "Чили", + "Cameroon" : "Камерун", + "China" : "Китай", + "Colombia" : "Колумбия", + "Costa Rica" : "Коста-Рика", + "Cuba" : "Куба", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Остров Рождества", + "Cyprus" : "Кипр", + "Czechia" : "Чехия", + "Germany" : "Германия", + "Djibouti" : "Джибути", + "Denmark" : "Дания", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканская Республика", + "Algeria" : "Алжир", + "Ecuador" : "Эквадор", + "Estonia" : "Эстония", + "Egypt" : "Египет", + "Western Sahara" : "Западная Сахара", + "Eritrea" : "Эритрея", + "Spain" : "Испания", + "Ethiopia" : "Эфиопия", + "Finland" : "Финляндия", + "Fiji" : "Фиджи", + "Falkland Islands (Malvinas)" : "Фолкленские Острова", + "Micronesia, Federated States of" : "Федеративные Штаты Микронезии", + "Faroe Islands" : "Фарерские острова", + "France" : "Франция", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Соединённое Королевство Великобритании и Северной Ирландии", + "Grenada" : "Гренада", + "Georgia" : "Грузия", + "French Guiana" : "Французская Гайана", + "Guernsey" : "Гернси", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренландия", + "Gambia" : "Гамбия", + "Guinea" : "Гвинея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Экваториальная Гвинея", + "Greece" : "Греция", + "South Georgia and the South Sandwich Islands" : "Южная Георгия и Южные Сандвичевы Острова", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвинея-Бисау", + "Guyana" : "Гайана", + "Hong Kong" : "Гонконг", + "Heard Island and McDonald Islands" : "Остров Херд и острова Макдональд", + "Honduras" : "Гондурас", + "Croatia" : "Хорватия", + "Haiti" : "Гаити", + "Hungary" : "Венгрия", + "Indonesia" : "Индонезия", + "Ireland" : "Ирландия", + "Israel" : "Израиль", + "Isle of Man" : "Остров Мэн", + "India" : "Индия", + "British Indian Ocean Territory" : "Британская территория Индийского океана", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Исламская Республика Иран", + "Iceland" : "Исландия", + "Italy" : "Италия", + "Jersey" : "Джерси", + "Jamaica" : "Ямайка", + "Jordan" : "Иордания", + "Japan" : "Япония", + "Kenya" : "Кения", + "Kyrgyzstan" : "Киргизия", + "Cambodia" : "Камбожда", + "Kiribati" : "Кирибати", + "Comoros" : "Коморы", + "Saint Kitts and Nevis" : "Сент-Китс и Невис", + "Korea, Democratic People's Republic of" : "Корейская Народная Демократическая Республика (КНДР)", + "Korea, Republic of" : "Корея", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Каймановы острова", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаос", + "Lebanon" : "Ливан", + "Saint Lucia" : "Сент-Люсия", + "Liechtenstein" : "Лихтенштейн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерия", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвия", + "Libya" : "Ливия", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Черногория", + "Saint Martin (French part)" : "Сен-Мартен (владение Франции)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалловы Острова", + "North Macedonia" : "Северная Македония", + "Mali" : "Мали", + "Myanmar" : "Мьянма", + "Mongolia" : "Монголия", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северные Марианские Острова", + "Martinique" : "Мартиника", + "Mauritania" : "Мавритания", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикий", + "Maldives" : "Мальдивы", + "Malawi" : "Малави", + "Mexico" : "Мексика", + "Malaysia" : "Малайзия", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибия", + "New Caledonia" : "Новая Каледония", + "Niger" : "Нигер", + "Norfolk Island" : "Норфолские Острова", + "Nigeria" : "Нигерия", + "Nicaragua" : "Никарагуа", + "Netherlands" : "Нидерланды", + "Norway" : "Норвегия", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ниуэ", + "New Zealand" : "Новая Зеландия", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французская Полинезия", + "Papua New Guinea" : "Папуа Новая Гвинея", + "Philippines" : "Филиппины", + "Pakistan" : "Пакистан", + "Poland" : "Польша", + "Saint Pierre and Miquelon" : "Сен-Пьер и Микелон", + "Pitcairn" : "Острова Питкэрн", + "Puerto Rico" : "Пуэрто Рико", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалия", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюньон", + "Romania" : "Румыния", + "Serbia" : "Сербия", + "Russian Federation" : "Российская Федерация", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудовская Аравия", + "Solomon Islands" : "Соломоновы Острова", + "Seychelles" : "Сейшельские Острова", + "Sudan" : "Судан", + "Sweden" : "Швеция", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Острова Святой Елены, Вознесения и Тристан-да-Кунья", + "Slovenia" : "Словения", + "Svalbard and Jan Mayen" : "Шпицберген и Ян-Майен", + "Slovakia" : "Словакия", + "Sierra Leone" : "Сьерра Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомали", + "Suriname" : "Суринам", + "South Sudan" : "Южный Судан", + "Sao Tome and Principe" : "Сантоме и Принсипи", + "El Salvador" : "Эль-Сальвадор", + "Sint Maarten (Dutch part)" : "Синт-Мартен Королевства Нидерландов", + "Syrian Arab Republic" : "Сирийская Арабская Республика", + "Eswatini" : "Эсватини", + "Turks and Caicos Islands" : "Теркс и Кайкос", + "Chad" : "Чад", + "French Southern Territories" : "Французские Южные Территории", + "Togo" : "Того", + "Thailand" : "Таиланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Восточный Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турция", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзания", + "Ukraine" : "Украина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Внешние малые острова США", + "United States of America" : "Соединенные Штаты Америки", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Ватикан", + "Saint Vincent and the Grenadines" : "Сант Винсент и Гренадины", + "Venezuela, Bolivarian Republic of" : "Венесуэла", + "Virgin Islands, British" : "Британские Вирджинские Острова", + "Virgin Islands, U.S." : "Американские Вирджинские Острова", + "Viet Nam" : "Вьетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уоллис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Йемен", + "Mayotte" : "Майотта", + "South Africa" : "Южная Африка", + "Zambia" : "Замбия", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Размытие фона", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Не удалось проверить поддержку загрузки WASM. Проверьте вручную, обслуживает ли ваш веб-сервер файлы `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб-сервер неправильно настроен для доставки файлов `.wasm`. Обычно это проблема конфигурации Nginx. Для размытия фона требуется настройка, чтобы также доставлять файлы `.wasm`. Сравните вашу конфигурацию Nginx с рекомендуемой конфигурацией в нашей документации.", + "Talk configuration values" : "Значения конфигурации Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Принудительное задание продолжительности вызова поддерживается только системным cron. Включите системный cron или удалите конфигурацию `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Малые значения `max_call_duration` (в настоящее время установлено %d) не могут быть реализованы из-за технических ограничений. Фоновоя задача выполняется только каждые 5 минут, поэтому используйте его на свой риск.", + "Federation" : "Федерация", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Настойчиво рекомендуется настроить \"memcache.locking\" когда Talk Федерации включены.", + "High-performance backend" : "Высокопроизводительный сервер", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Высокопроизводительный сервер не сконфигурирован - использование Nextcloud Talk без Высокопроизводительного сервера подходит только для очень маленьких вызовов (не более 2-3 участников). Пожалуйста, настройте Высокопроизводительный сервер, чтобы обеспечить бесперебойную работу вызовов с несколькими участниками.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Режим Высокопроизводительного сервера \"conversation_cluster\" устарел и больше не будет поддерживаться в следующих версиях. Высокопроизводительный сервер теперь поддерживает настоящую кластеризацию, которую следует использовать вместо этого.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Поддержка нескольких Высокопроизводительных серверов устарела и больше не будет поддерживаться в следующих версиях. Вместо этого балансировщик нагрузки должен быть установлен вместе с кластеризованными сигнальными серверами и настроен в конфигурации Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Сохранённый открытый ключ для алгоритма %1$s не совпадает с сохранённым приватным ключом. Выполните %2$s чтобы исправить проблему.", + "High-performance backend not configured correctly. Run %s for details." : "Высокопроизводительный сервер неверно сконфигурирован. Выполните %s для получения деталей.", + "High-performance backend not configured correctly" : "Высокопроизводительный сервер неверно сконфигурирован", + "Error: Cannot connect to server" : "Ошибка: Не могу подключиться к серверу", + "Error: Server did not respond with proper JSON" : "Ошибка: Сервер вернул неверный JSON", + "Error: Certificate expired" : "Ошибка: Сертификат истёк", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Ошибка: Системное время сервера Nextcloud и Высокопроизводительного сервера не синхронизировано. Убедитесь, что оба сервера подключены к серверу времени, или вручную синхронизируйте их время.", + "Could not get version" : "Не удалось получить версию", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Ошибка: Текущая версия: {version}; Сервер необходимо обновить для совместимости с этой версией Talk", + "Error: Server responded with: {error}" : "Ошибка: Ответ сервера: {error}", + "Error: Unknown error occurred" : "Ошибка: Произошла неизвестная ошибка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Внимание: Текущая версия: {version}; Сервер не поддерживает все функции этой версии Talk, недоступные функции: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Настойчиво рекомендуется настроить распределенный кэш для использования Nextcloud Talk совместно с Высокопроизводительным сервером.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "«Client Push» установлен, это улучшает скорость получения уведомлений в Talk", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "«{notify_push}» не установлен, это может привести к замедленному получению уведомлений в Talk", + "Recording backend" : "Сервер записи вызовов", + "Using the recording backend requires a High-performance backend." : "Использование сервера для записи вызовов требует для работы Высокопроизводительный сервер", + "No recording backend configured" : "Сервер записи вызовов не настроен", + "SIP configuration" : "Параметры SIP", + "Using the SIP functionality requires a High-performance backend." : "Использование функционала SIP требует для работы Высокопроизводительный сервер", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Назначенные номера телефонов Talk не должны начинаться с + или 0. Пожалуйста, удалите или обновите следующие номера:\n{list}", + "No SIP backend configured" : "Сервер SIP не настроен", + "Invalid date, date format must be YYYY-MM-DD" : "Неверная дата, дата должна быть в формате «ГГГГ-ММ-ДД»", + "Conversation not found" : "Обсуждение не найдено", + "Path is already shared with this conversation" : "Этот путь уже опубликован в обсуждении", + "Chat, video & audio-conferencing using WebRTC" : "Чат, видео- и аудиоконференции, основанные на технологии WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Мессенджер, видео- и аудио-конференции с использованием WebRTC\n\n* 💬 **Мессенджер** Nextcloud Talk предлагает простой чат для обмена сообщениями, позволяя делиться или загружать файлы из вашего приложения Nextcloud Files или устройства и упоминать других участников.\n* 👥 **Персональные, групповые, публичные и защищенные паролем звонки!** Пригласите человека, целую группу или отправьте публичную ссылку чтобы пригласить в вызов.\n* 🌐 **Федеративные обсуждения** Обменивайтесь сообщениями с другими пользователями Nextcloud на удаленном сервере\n* 💻 **Демонстрация экрана!** Делитесь своим экраном с участниками вызова.\n* 🚀 **Интеграция с другими приложениями Nextcloud** как Файлы, Календарь, Состояние, Виджеты, Обработка файлов, Карты, Умный выбор, Контакты, Карточки, и другие.\n* 🌉 **Синхронизация с другими мессенджерами** С помощью [Matterbridge](https://github.com/42wim/matterbridge/) интегрированного в Talk, вы легко можете синхронизировать множество других мессенджеров и решений с Nextcloud Talk и наоборот.", + "Leave call" : "Покинуть вызов", + "Navigating away from the page will leave the call in {conversation}" : "При переходе с этой страницы вы покинете вызов в {conversation}", + "Stay in call" : "Не покидать вызов", + "Error occurred when getting the conversation information" : "Произошла ошибка при получении информации об обсуждении", + "Discuss this file" : "Обсудить этот файл", + "Share this file with others to discuss it" : "Опубликовать этот файл для обсуждения", + "Share this file" : "Опубликовать файл", + "Join conversation" : "Присоединиться к обсуждению", + "This conversation is password-protected." : "Это обсуждение защищено паролем.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "С вашего IP-адреса было выполнено множество неудачных попыток входа в систему. Следующую попытку можно будет выполнить через 30 секунд.", + "The password is wrong. Try again." : "Неверный пароль. Попробуйте еще раз.", + "Password" : "Пароль", + "Submit" : "Отправить ответ", + "Error requesting the password." : "Ошибка запроса пароля", + "Request password" : "Запрос пароля", + "This conversation has ended" : "Обсуждение закончено", + "Error occurred when joining the conversation" : "Произошла ошибка при присоединении к обсуждению", + "Close Talk sidebar" : "Закрыть боковую панель", + "Open Talk sidebar" : "Открыть боковую панель", + "Everyone" : "Все", + "Users and moderators" : "Пользователи и модераторы", + "Moderators only" : "Только модераторы", + "Disable calls" : "Отключить вызовы", + "Save changes" : "Сохранить изменения", + "Saving …" : "Сохранение…", + "Saved!" : "Сохранено!", + "Limit to groups" : "Разрешить использование только участникам этих групп", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Когда выбрана хотя бы одна группа, только участники перечисленных групп могут участвовать в обсуждениях.", + "Guests can still join public conversations." : "Ограничения не распространяются на гостей в открытых обсуждениях.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Пользователи, которые больше не смогут использовать приложение «Talk», всё ещё будут перечислены, как участники своих прошлых обсуждений, а их сообщения будут сохранены.", + "Limit using Talk" : "Ограничить использование Talk", + "Limit creating a public and group conversation" : "Ограничить создание открытых и групповых обсуждений", + "Limit creating conversations" : "Ограничить создание обсуждений", + "Limit starting a call" : "Ограничить возможность начинать вызов", + "Limit starting calls" : "Ограничить возможность начинать вызов", + "When a call has started, everyone with access to the conversation can join the call." : "Присоединиться к выполняемому вызову могут все, обладающими правами доступа к обсуждению.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Следующие боты установлены на этом сервере. В документации вы можете найти подробную информацию о том, как {linkstart1}создать собственного бота{linkend}, или {linkstart2}список ботов{linkend}, которых можно включить на вашем сервере.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Ни один бот не установлен на этом сервере. В документации вы можете найти подробную информацию о том, как {linkstart1}создать собственного бота{linkend}, или {linkstart2}список ботов{linkend}, которых можно включить на вашем сервере.", + "Description is not provided" : "Описание не предоставлено", + "Locked for moderators" : "Заблокировано для модераторов", + "Enabled" : "Включено", + "Disabled" : "Отключено", + "Bots settings" : "Настройки ботов", + "State" : "Состояние", + "Name" : "Название", + "Last error" : "Последняя ошибка", + "Total errors count" : "Общее количество ошибок", + "Find more bots" : "Найти больше ботов", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Доверенные серверы можно настроить на {linkstart}странице настроек обмена{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Обмен сообщениями и вызовы в федеративных обсуждениях работают. Обмен файлами появится в будущих версиях.", + "Enable Federation in Talk app" : "Включить Федерацию в приложении Talk", + "Permissions" : "Права доступа", + "Allow users to be invited to federated conversations" : "Разрешить пользователям быть приглашенными в федеративные обсуждения", + "Allow users to invite federated users into conversation" : "Разрешить пользователям приглашать федеративных пользователей в обсуждение", + "Only allow to federate with trusted servers" : "Разрешить федерации только с доверенными серверами", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Когда выбрана хотя бы одна группа, только участники перечисленных групп могут приглашать федеративных пользователей в обсуждения.", + "Groups allowed to invite federated users" : "Группы, которым разрешено приглашать федеративных пользователей", + "Select groups …" : "Выбрать группы …", + "All messages" : "Все сообщения", + "@-mentions only" : "Только @-упоминания", + "Off" : "Отключить", + "General settings" : "Основные настройки", + "Default notification settings" : "Настройки уведомлений по умолчанию", + "Default group notification" : "Групповое уведомление по умолчанию:", + "Default group notification for new groups" : "Уведомление для новых групп по умолчанию", + "Integration into other apps" : "Встраивание в другие приложения", + "Allow conversations on files" : "Разрешить обсуждения файлов", + "Allow conversations on public shares for files" : "Разрешить создание обсуждений для общедоступных файлов", + "End-to-end encrypted calls" : "Вызовы со сквозным шифрованием", + "Enable encryption" : "Включить шифрование", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Для вызовов со сквозным шифрованием с настроенным SIP-мостом требуется более новая версия Высокопроизводительного сервера и SIP-моста.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Мобильные устройства на данный момент не поддерживают сквозное шифрование вызовов.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "При нажатии кнопки, расположенной выше, заполненные данные формы будут переданы на серверы компании Struktur AG. Дополнительные сведения представлены на сайте {linkstart}spreed.eu{linkend}.", + "Pending" : "Ожидается", + "Error" : "Ошибка", + "Blocked" : "Заблокировано", + "Active" : "Активно", + "Expired" : "Истекло", + "Never" : "Никогда", + "The trial could not be requested. Please try again later." : "Не удалось запросить пробный период использования, повторите попытку через некоторое время.", + "The account could not be deleted. Please try again later." : "Аккаунт не может быть удален. Повторите попытку позже.", + "Hosted High-performance backend" : "Размещенный Высокопроизводительный сервер", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Struktur AG, партнёр Nextcloud, предоставляет возможность запросить запросить использование размещаемого сигнального сервера. Для получения доступа требуется заполнить приведённую ниже форму. После настройки сервера данные для подключения будут заполнены автоматически. Внимание: это действие перезапишет существующие параметры сигнального сервера.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Если ваш аккаунт Высокопроизводительного сервера включает STUN и/или TURN, настройки будут обновлены автоматически.", + "URL of this Nextcloud instance" : "URL данного сервера Nextcloud", + "Full name of the user requesting the trial" : "Полное имя пользователя, запрашивающего пробную версию", + "Email of the user" : "Адрес эл.почты пользователя", + "Language" : "Язык", + "Country" : "Страна", + "Request signaling server trial" : "Запросить пробную версию сигнального сервера", + "You can see the current status of your hosted signaling server in the following table." : "Вы можете просматривать статус вашего сигнального сервера в таблице ниже.", + "Status" : "Статус", + "Created at" : "Создано", + "Expires at" : "Истекает", + "Limits" : "Ограничения", + "STUN included" : "STUN включён", + "Yes" : "Да", + "No" : "Нет", + "TURN included" : "TURN включён", + "Delete the signaling server account" : "Удалить аккаунт сигнального сервера", + "_%n user_::_%n users_" : ["%n пользователь","%n пользователя","%n пользователей","%n пользователя"], + "Installed version: {version}" : "Установленная версия: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Вы можете установить Matterbridge, чтобы связать Nextcloud Talk с некоторыми другими сервисами. Подробную информацию можно найти на их {linkstart1}странице GitHub{linkend}. Загрузка и установка приложения может занять некоторое время. Если время ожидания истекло, установите его вручную из {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Исполняемому файлу Matterbridge назначены неверные права доступа. Убедитесь, что файлу назначен верный владелец и права на исполнение. Файл расположен в каталоге «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Исполняемый файл Matterbridge не найден или не может быть запущен.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Расположение исполняемых файлов Matterbridge может быть заданно вручную в файле конфигурации. Дополнительные сведения представлены в {linkstart}документации по настройке Matterbridge{linkend}.", + "Downloading …" : "Загрузка…", + "Install Talk Matterbridge" : "Установить Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Не удалось установить приложение Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Не удалось установить Talk Matterbridge, установите его вручную", + "Failed to execute Matterbridge binary." : "Не удалось запустить исполняемый файл Matterbridge.", + "Matterbridge integration" : "Интеграция Matterbridge", + "Enable Matterbridge integration" : "Включить Matterbridge", + "Status: Checking connection" : "Статус: Проверка соединения", + "OK: Running version: {version}" : "OK: Текущая версия: {version}", + "Error: Server seems to be a Signaling server" : "Ошибка: сервер являетcя сигнальным сервером", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Ошибка: Системное время сервера Nextcloud и сервера записи вызовов не синхронизировано. Убедитесь, что оба сервера подключены к серверу времени, или вручную синхронизируйте их время.", + "Recording backend URL" : "URL сервера записи вызовов", + "Validate SSL certificate" : "Проверять сертификат SSL", + "Delete this server" : "Удалить этот сервер", + "Test this server" : "Проверить сервер", + "Disabled for all calls" : "Отключено для всех вызовов", + "Enabled for all calls" : "Включено для всех вызовов", + "Configurable on conversation level by moderators" : "Настраиваемо модераторами на уровне обсуждения", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Настройки PHP \"upload_max_filesize\" или \"post_max_size\" позволяют загружать только файлы размером до {maxUpload}.", + "Recording backend settings saved" : "Настройки бэкенда записи ВКС сохранены", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модераторам будет разрешено включать согласие на запись на уровне обсуждения. Подтвержденное согласие будет требоваться от каждого участника перед присоединением к каждому вызову в этом обсуждении.", + "The consent to be recorded will be required for each participant before joining every call." : "Согласие на запись будет требоваться от каждого участника перед присоединением к каждому вызову.", + "The consent to be recorded is not required." : "Согласие на запись не требуется.", + "Recording backend configuration is only possible with a High-performance backend." : "Конфигурация сервера для записи вызовов возможна только с Высокопроизводительным сервером.", + "Add a new recording backend server" : "Добавить новый сервер записи вызовов", + "Shared secret" : "Общая секретная фраза", + "Recording consent" : "Согласие на запись вызова", + "Recording transcription" : "Расшифровка записей вызовов", + "Automatically transcribe call recordings with a transcription provider" : "Автоматическая расшифровка записей вызовов с помощью приложения - транскриптора", + "Automatically summarize call recordings with transcription and summary providers" : "Автоматическое резюме записей вызовов с помощью приложений - транскриптора и резюме", + "SIP configuration saved!" : "Параметры SIP сохранены", + "SIP configuration is only possible with a High-performance backend." : "Конфигурация SIP возможна только с Высокопроизводительным сервером.", + "Enable SIP Dial-out option" : "Включить опцию исходящего вызова по SIP", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Сигнальный сервер необходимо обновить для поддержки функции исходящего вызова по SIP.", + "Do not show SIP Dial-out caller number" : "Не показывать номер исходящего вызова по SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонимный номер должен отобразиться как \"Неизвестный\" или \"Номер скрыт\" для ответчика", + "Dial-out number" : "Номер исходящего вызова", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Номер в формате E164, используемый как резервный номер звонящего для исходящих вызовов", + "Dial-out prefix" : "Префикс исходящего вызова", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префикс к номеру пользователя для исходящих вызовов (`+` по умолчанию)", + "Restrict SIP configuration" : "Ограничить возможность настройки SIP", + "Enable SIP configuration" : "Выберите группы, которым разрешено использовать SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Разрешить использование протокола SIP только пользователям указанных групп в модерируемых ими конференциях", + "Phone number (Country)" : "Номер телефона", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Эти сведения будут добавлены в письма-приглашения и показаны всем участникам в боковой панели.", + "Nextcloud base URL" : "Адрес сервера Nextcloud (base URL)", + "Talk Backend URL" : "Адрес сервера Talk (Backend URL)", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Доступные возможности", + "Error: Websocket connection failed" : "Ошибка при установлении Websocket соединения", + "Error code" : "Код ошибки", + "Error message" : "Сообщение ошибки", + "Error: Websocket connection failed. Check browser console" : "Ошибка при установлении Websocket соединения. Проверьте консоль браузера", + "High-performance backend URL" : "URL Высокопроизводительного сервера", + "Missing High-performance backend warning hidden" : "Скрыто предупреждение об отсутствующем Высокопроизводительном сервере", + "High-performance backend settings saved" : "Параметры Высокопроизводительного сервера сохранены", + "Nextcloud Talk setup not complete" : "Конфигурация Nextcloud Talk не завершена", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Обратите внимание, что в вызовах с более чем 2 участниками без Высокопроизводительного сервера, участники могут испытывать проблемы со связью и получать сильную нагрузку на свои устройства.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Установите Высокопроизводительный сервер, чтобы вызовы с несколькими участниками работали корректно.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Краткое руководство по установке", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Высокопроизводительный сервер необходим для вызовов и обсуждений с несколькими участниками. Без сервера всем участникам придется загружать свое видео отдельно для каждого собеседника, что, скорее всего, приведет к проблемам со связью и высокой нагрузке на используемые устройства.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Настойчиво рекомендуется настроить распределенный кэш для использования Nextcloud Talk совместно с Высокопроизводительным сервером.", + "Add High-performance backend server" : "Добавить Высокопроизводительный сервер", + "Warn about connectivity issues in calls with more than 2 participants" : "Предупреждать о проблемах со связью в вызовах с более чем 2 участниками", + "STUN server URL" : "URL cервера STUN", + "The server address is invalid" : "Указан недействительный адрес сервера", + "STUN settings saved" : "Параметры STUN сохранены", + "STUN servers" : "Сервер STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Сервер STUN используется для определения общедоступного IP адреса участников за маршрутизатором.", + "Add a new STUN server" : "Добавить сервер STUN", + "{schema} scheme must be used with a domain" : "использование схемы {schema} возможно только в домене", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "только {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: кандидаты ICE получены с сервера TURN", + "Error: No working ICE candidates returned by the TURN server" : "Ошибка: работоспособные кандидаты ICE не получены с сервера TURN", + "Testing whether the TURN server returns ICE candidates" : "Проверка получения кандидатов ICE с сервера TURN", + "TURN server schemes" : "Схемы сервера TURN", + "TURN server URL" : "URL сервера TURN", + "TURN server secret" : "Секретный ключ TURN-сервера", + "TURN server protocols" : "Протоколы сервера TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Сервер TURN (Traversal Using Relay NAT) используется для перенаправления данных для участников, расположенных за брандмауэром. Сервер TURN необходим, если участники не могут устанавливать прямое соединение. Сведения по настройке приведены в {linkstart}документации{linkend}.", + "TURN settings saved" : "Параметры TURN сохранены", + "TURN servers" : "TURN-серверы", + "Add a new TURN server" : "Добавить сервер TURN", + "Failed" : "Не удалось", + "OK" : "ОК", + "Checking …" : "Проверка...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Не удалось: WebAssembly отключена или не поддерживается в этом браузере. Пожалуйста, включите WebAssembly или используйте браузер с его поддержкой для выполнения проверки.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Не удалось: Файлы \".wasm\" и \".tflite\" некорректно возвращены веб-сервером. Пожалуйста, проверьте раздел \"Системные требования\" в документации Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файлы \".wasm\" и \".tflite\" корректно возвращены веб-сервером.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Предположительно, конфигурация PHP и Apache несовместима. Обратите внимание, что PHP можно использовать только с модулем MPM_PREFORK, а PHP-FPM можно использовать только с модулем MPM_EVENT.", + "Web server setup checks" : "Проверка настройки веб-сервера", + "Files required for virtual background can be loaded" : "Файлы, необходимые для виртуального фона, могут быть загружены", + "Federated user" : "Федеративный пользователь", + "Assign participants to rooms" : "Назначить участников в комнаты", + "Configure breakout rooms" : "Настроить комнаты обсуждения", + "Number of breakout rooms" : "Количество комнат обсуждения", + "You can create from 1 to 20 breakout rooms." : "Вы можете создать от 1 до 20 комнат обсуждения.", + "Assignment method" : "Метод назначения", + "Automatically assign participants" : "Назначить участников автоматически", + "Manually assign participants" : "Назначить участников вручную", + "Allow participants to choose" : "Разрешить участникам выбирать", + "Create rooms" : "Создать комнаты обсуждения", + "Confirm" : "Подтвердить", + "Create breakout rooms" : "Создать комнаты обсуждения", + "Reset" : "Сбросить", + "Delete breakout rooms" : "Удалить комнаты обсуждения", + "Room {roomNumber}" : "Комната {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текущие комнаты обсуждения и настройки будут сброшены", + "Cancel" : "Отмена", + "Unassigned participants" : "Неназначенные участники", + "Back" : "Назад", + "Assign" : "Назначить", + "Add participant \"{user}\"" : "Добавить участника «{user}»", + "Now" : "Сейчас", + "Invalid calendar selected" : "Выбран недопустимый календарь", + "Invalid start time selected" : "Выбрано недопустимое время старта", + "Invalid end time selected" : "Выбрано недопустимое время окончания", + "Unknown error occurred" : "Произошла неизвестная ошибка", + "Sending no invitations" : "Не отправлять никаких приглашений", + "{participant0} will receive an invitation" : "{participant0} получит приглашение", + "{participant0} and {participant1} will receive invitations" : "{participant0} и {participant1} получат приглашения", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения","{participant0}, {participant1} и ещё %n получат приглашения"], + "Invite {user}" : "Пригласить {user}", + "Invite all users and emails in this conversation" : "Пригласить всех пользователей и адреса эл. почты в этом обсуждении", + "Meeting created" : "Встреча создана", + "Upcoming meetings" : "Предстоящие встречи", + "Loading …" : "Загрузка…", + "No upcoming meetings" : "Нет предстоящих встреч", + "Schedule a meeting" : "Запланировать встречу", + "Meeting title" : "Заголовок встречи", + "From" : "От", + "To" : "Кому", + "Calendar" : "Календарь", + "Attendees" : "Участники", + "No other participants to send invitations to." : "Нет других участников, чтобы отправить приглашения.", + "Add attendees" : "Добавить участников", + "Save" : "Сохранить", + "Search participants" : "Искать участников", + "No results" : "Нет результатов", + "Done" : "Выполненные", + "Disable live transcription" : "Отключить онлайн-транскрипцию", + "Enable live transcription (generated by AI)" : "Включить онлайн-транскрипцию (генерируется с ИИ)", + "Enable live transcription (Live transcriptions app is not installed)" : "Включить онлайн-транскрипцию (приложение не установлено)", + "Disable live translation" : "Отключить онлайн-перевод", + "Enable live translation (generated by AI)" : "Включить онлайн-перевод (генерируется с ИИ)", + "Original language" : "Исходный язык", + "Live translations app is not installed" : "Приложение для онлайн-перевода не установлно", + "Original language: {languageName}" : "Язык оригинала: {languageName}", + "Translated language" : "Язык для перевода", + "Translated language: {languageName}" : "Язык для перевода: {languageName}", + "Raise hand" : "Поднять руку", + "Raise hand (R)" : "Поднять руку (R)", + "Lower hand" : "Опустить руку", + "Lower hand (R)" : "Опустить руку (R)", + "Exit full screen (F)" : "Выйти из полноэкранного режима (F)", + "Full screen (F)" : "Во весь экран (F)", + "Speaker view" : "Режим показа выступающего", + "Grid view" : "Вид сеткой", + "Error when trying to load the available live transcription languages" : "Ошибка при попытке загрузить доступные языки для онлайн-транскрипции", + "Failed to enable live transcription" : "Ошибка при включении онлайн-транскрипции", + "Failed to enable live translations" : "Ошибка при включении онлайн-перевода", + "Failed to disable live translations" : "Ошибка при отключении онлайн-перевода", + "Recording consent is required" : "Требуется согласие на запись", + "This conversation is read-only" : "Это обсуждение доступно только для чтения", + "Conversation not found or not joined" : "Обсуждение не найдено или к нему не присоединились", + "Lobby is still active and you're not a moderator" : "Комната ожидания ещё активна и вы не являетесь модератором", + "Connection failed" : "Сбой подключения", + "Reload" : "Обновить", + "{nickName} raised their hand." : "{nickName} поднял(а) руку.", + "A participant raised their hand." : "Участник поднял руку.", + "Collapse stripe" : "Свернуть ленту", + "Expand stripe" : "Развернуть ленту", + "Previous page of videos" : "Предыдущая страница с видео", + "Next page of videos" : "Следующая страница с видео", + "Connecting …" : "Соединение…", + "Calling …" : "Вызов …", + "Waiting for {user} to join the call" : "Ожидание подключения к вызову пользователя {user}", + "Waiting for others to join the call …" : "Ожидание подключения к вызову остальных пользователей…", + "You can invite others in the participant tab of the sidebar" : "Другие участники могут быть приглашены через боковую панель", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Вы можете пригласить других на вкладке участников боковой панели или поделиться этой ссылкой для приглашения!", + "Share this link to invite others!" : "Используйте эту ссылку для приглашения других участников!", + "Copy link" : "Копировать ссылку", + "You are not allowed to enable audio" : "Вам не разрешено использовать аудио", + "No audio. Click to select device" : "Нет аудио. Нажмите, чтобы выбрать устройство", + "Mute audio" : "Отключить звук", + "Mute audio (M)" : "Отключить звук (M)", + "Unmute audio" : "Включить звук", + "Unmute audio (M)" : "Включить звук (M)", + "None" : "Не использовать", + "Select a microphone" : "Выбрать микрофон", + "Select a speaker" : "Выбрать динамик", + "Microphone settings" : "Параметры микрофона", + "Check devices" : "Проверить устройства", + "Access to camera was denied" : "Доступ к камере запрещён", + "Error while accessing camera: It is likely in use by another program" : "Ошибка при доступе к камере: Вероятно, она используется другой программой", + "Error while accessing camera" : "Ошибка при доступе к камере", + "You have been muted by a moderator" : "Ваш микрофон был отключен модератором", + "Hide presenter video" : "Скрыть видео выступающего", + "You are not allowed to enable video" : "Вам не разрешено использовать видео", + "No video. Click to select device" : "Нет видео. Нажмите, чтобы выбрать устройство", + "Disable video" : "Отключить видео", + "Disable video (V)" : "Отключить видео (V)", + "Enable video" : "Включить видео", + "Enable video (V)" : "Включить видео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Разрешить видео - Ваше соединение будет прервано, когда разрешаете видео в первый раз", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Включение трансляции видео (V) - подключение будет кратковременно прервано при первом включении.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Включение трансляции видео. Подключение будет кратковременно прервано при первом включении.", + "Select a video device" : "Выбрать камеру", + "Show presenter" : "показать выступающего", + "You" : "Вы", + "Mute" : "Отключить звук", + "Muted" : "Звук отключен", + "Show screen" : "Показать экран", + "Stop following" : "Прекратить отслеживание", + "Connection could not be established …" : "Не удалось установить соединение ...", + "Connection was lost and could not be re-established …" : "Соединение было потеряно и не может быть восстановлено ...", + "Connection could not be established. Trying again …" : "Не удалось установить соединение. Повторите попытку ...", + "Connection lost. Trying to reconnect …" : "Соединение потеряно. Попытка повторного подключения ...", + "Connection problems …" : "Проблемы с подключением ...", + "Collapse" : "Свернуть", + "Expand" : "Развернуть", + "You need to be logged in to upload files" : "Для добавления файлов необходимо войти в систему", + "Drop your files to upload" : "Для загрузки файлов, перетащите их сюда", + "Conversation messages" : "Сообщения обсуждения", + "Scroll to bottom" : "Прокрутить вниз", + "Post message" : "Опубликовать сообщение", + "Federated conversation" : "Федеративное обсуждение", + "Public conversation" : "Открытое обсуждение", + "Favorite" : "Избранное", + "Banned users" : "Забаненные пользователи", + "Manage the list of banned users in this conversation." : "Управляйте списком забаненных пользователей в этом обсуждении.", + "Manage bans" : "Управлять банами", + "No banned users" : "Нет забаненных пользователей", + "Banned by:" : "Забанен:", + "Date:" : "Дата:", + "Note:" : "Примечание:", + "Hide details" : "Скрыть подробные сведения", + "Show details" : "Подробные сведения", + "Unban" : "Разбанить", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : " Вы можете изменить название и описание в {linkstart}Календаре ↗{linkend}.", + "Error while updating conversation name" : "Ошибка при изменении названия обсуждения", + "Error while updating conversation description" : "Не удалось изменить описание обсуждения", + "Enter a name for this conversation" : "Введите название обсуждения", + "Edit conversation name" : "Изменить название обсуждения", + "Edit conversation description" : "Изменить описание обсуждения", + "Enter a description for this conversation" : "Задайте описание этого обсуждения", + "Picture" : "Изображение", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Следующие боты могут быть включены в этом обсуждении. Свяжитесь с вашей администрацией, чтобы установить больше ботов на этом сервере.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Ни один бот не установлен на этом сервере. Свяжитесь с вашей администрацией, чтобы установить больше ботов на этом сервере.", + "Disable" : "Отключить", + "Enable" : "Включить", + "The bot is not available anymore" : "Бот больше не доступен", + "Breakout rooms" : "Комнаты обсуждения", + "Manage breakout rooms" : "Управлять комнатами обсуждения", + "Set up breakout rooms for this conversation" : "Настроить комнаты обсуждения для этого обсуждения", + "Please select a valid PNG or JPG file" : "Выберите файл в формате .png или .jpg", + "Choose your conversation picture" : "Выберите свое изображение для обсуждения ", + "Choose" : "Выберите", + "Error setting conversation picture" : "Ошибка при установке изображения для обсуждения", + "Could not set the conversation picture: {error}" : "Не удалось установить изображение для обсуждения: {error}", + "Error cropping conversation picture" : "Не удалось обрезать изображение для обсуждения", + "Error removing conversation picture" : "Ошибка удаления изображения из обсуждения", + "Set emoji as conversation picture" : "Установить эмодзи в качестве изображения обсуждения", + "Set background color for conversation picture" : "Установить цвет фона для изображения обсуждения", + "Upload conversation picture" : "Загрузить изображение обсуждения", + "Choose conversation picture from files" : "Выбрать аватар обсуждения из Файлов", + "Remove conversation picture" : "Удалить изображение обсуждения", + "The file must be a PNG or JPG" : "Файл должен быть в формате PNG или JPG", + "Set picture" : "Установить изображение", + "Default permissions modified for {conversationName}" : "Разрешения по умолчанию изменены для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не удалось изменить разрешения по умолчанию для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Редактирование разрешений по умолчанию для участников этого обсуждения. Эти настройки не влияют на модераторов.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Каждый раз, когда разрешения изменяются в этом разделе, пользовательские разрешения, ранее назначенные отдельным участникам, будут потеряны.", + "All permissions" : "Все разрешения", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Участники полноправны начинать вызов, присоединяться к вызову, включать аудио- и видеосвязь и транслировать экран.", + "Restricted" : "Ограниченный", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Участники могут присоединиться к звонкам, но не могут включить аудио- и видеосвязь, а также трансляцию экрана, пока модератор вручную не предоставит им соответствующие разрешения.", + "Advanced permissions" : "Дополнительные разрешения", + "Edit permissions" : "Разрешения на редактирование", + "Conversation settings" : "Настройки обсуждения", + "Basic Info" : "Базовая информация", + "Personal" : "Личное", + "Moderation" : "Модерация", + "Setup overview" : "Обзор настроек", + "Live transcription" : "Онлайн-транскрипция", + "Live transcriptions app is not installed" : "Приложение для онлайн-транскрипции не установлно", + "Enable live transcription" : "Включить онлайн-транскрипцию", + "Breakout Rooms" : "Комнаты обсуждения", + "Matterbridge" : "Matterbridge", + "Bots" : "Боты", + "Danger zone" : "Опасная зона", + "Archive conversation" : "Архивировать обсуждение", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивированные обсуждения скрыты из списка обсуждений по умолчанию. Однако, они всё ещё доступны при поиске обсуждения по имени или при открытии списка архивированных обсуждений", + "Do you really want to leave \"{displayName}\"?" : "Действительно покинуть «{displayName}»?", + "You can archive this conversation instead." : "Вместо этого Вы можете архивировать обсуждение.", + "Leave conversation" : "Покинуть обсуждение", + "You need to promote a new moderator before you can leave the conversation" : "Вам нужно назначить нового модератора перед тем, как покинуть обсуждение", + "Delete conversation" : "Удалить обсуждение", + "Do you really want to delete \"{displayName}\"?" : "Действительно удалить «{displayName}»?", + "Error while deleting conversation" : "Ошибка при удалении обсуждения", + "Delete all chat messages" : "Удалить все сообщения", + "Do you really want to delete all messages in \"{displayName}\"?" : "Действительно удалить все сообщения в «{displayName}\"»?", + "Error while clearing chat history" : "Не удалось очистить историю сообщений", + "Be careful, these actions cannot be undone." : "Будьте осторожны, эти действия нельзя отменить.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Если обсуждение было покинуто, для повторного присоединения требуется приглашение. К открытым обсуждениям возможно присоединиться в любое время.", + "Permanently delete this conversation." : "Безвозвратно удалить это обсуждениe.", + "Delete chat messages" : "Удалить сообщения", + "Permanently delete all the messages in this conversation." : "Безвозвратно удалить все сообщения в этом обсуждении.", + "_%n hour_::_%n hours_" : ["%n час","%n часа","%n часов","%n часа"], + "_%n day_::_%n days_" : ["%n день","%n дня","%n дней","%n дня"], + "_%n week_::_%n weeks_" : ["%n неделя","%n недели","%n недель","%n недели"], + "Custom expiration time" : "Установить срок жизни", + "Message expiration disabled" : "Срок жизни сообщений отключен", + "Message expiration set: {duration}" : "Срок жизни сообщений установлен: {duration}", + "Error when trying to set message expiration" : "Ошибка при попытке установить срок жизни сообщений", + "Message expiration" : "Срок жизни сообщений", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Сообщения чата могут быть удалены по истечении определенного времени. Примечание: Файлы, переданные в чате, не будут удалены для владельца, но больше не будут доступны в обсуждении.", + "Set message expiration" : "Установить срок жизни сообщений", + "Current message expiration" : "Текущий срок жизни сообщений", + "Password copied to clipboard" : "Пароль скопирован в буфер обмена", + "Password could not be copied" : "Не удалось скопировать пароль", + "Guest access" : "Гостевой доступ", + "Breakout rooms are not allowed in public conversations." : "Комнаты обсуждения недоступны в открытых обсуждениях", + "Allow guests to join this conversation via link" : "Разрешить гостям присоединяться к обсуждению по ссылке", + "Password protection" : "Защита паролем", + "This conversation is password-protected. Guests need password to join" : "Это обсуждение защищено паролем. Гостям требуется пароль, чтобы присоединиться", + "Password protection is needed for public conversations" : "Защита паролем требуется для публичных обсуждений", + "Set a password" : "Задать пароль", + "Change password" : "Сменить пароль", + "Enter new password" : "Введите новый пароль", + "Save password" : "Сохранить пароль", + "Copy password" : "Копировать пароль", + "Guests are allowed to join this conversation via link" : "Гости могут присоединяться к обсуждению по ссылке", + "Guests are not allowed to join this conversation" : "Гостям не разрешено присоединяться к этому обсуждению", + "Resend invitations" : "Повторно отправить приглашения", + "This conversation is open to both registered users and users created with the Guests app" : "Это обсуждение открыто для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "This conversation is open to registered users" : "Обсуждение открыто для зарегистрированных пользователей", + "This conversation is limited to the current participants" : "Обсуждение ограничено текущими участниками", + "You opened the conversation to both registered users and users created with the Guests app" : "Вы открыли обсуждение для зарегистрированных пользователей и пользователей, созданных через приложение «Гости»", + "Error occurred when opening or limiting the conversation" : "Не удалось открыть или ограничить доступ к обсуждению", + "Open conversation to registered users, showing it in search results" : "Это обсуждение будет показано в результатах поиска для зарегистрированных пользователей", + "Also open to users created with the Guests app" : "Также открыть для пользователей, созданных через приложение «Гости»", + "Open conversation" : "Открытое обсуждение", + "Set language spoken in calls" : "Установить язык, используемый при вызове", + "Languages could not be loaded" : "Языки не могут быть загружены", + "Loading languages …" : "Загрузка языков …", + "Invalid language" : "Недопустимый язык", + "Default language (English)" : "Язык по умолчанию (English)", + "Default live transcription language set" : "Язык для онлайн-транскрипции по умолчанию установлен", + "Live transcription language set: {languageName}" : "Язык для онлайн-транскрипции установлен: {languageName}", + "Error when trying to set live transcription language" : "Ошибка при попытке установить язык для онлайн-транскрипции", + "Start time: {date}" : "Время начала: {date}", + "Start time has been updated" : "Время начала изменено", + "Error occurred while updating start time" : "Не удалось изменить время начала", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Включение лобби отключит всех, кроме модераторов, от текущего вызова.", + "Enable lobby, restricting the conversation to moderators" : "Включить лобби, ограничив доступ к обсуждению только для модераторов", + "Meeting start time" : "Время начала встречи", + "Start time (optional)" : "Время начала (необязательно)", + "Import email participants" : "Импортировать участников по адресам эл. почты", + "You can import a list of email participants from a CSV file." : "Вы можете импортировать участников по адресам эл. почты из CSV файла.", + "Poll drafts" : "Черновики опросов", + "Browse poll drafts" : "Просмотреть черновики опросов", + "Error occurred when locking the conversation" : "Не удалось заблокировать обсуждение", + "Error occurred when unlocking the conversation" : "Не удалось разблокировать обсуждение", + "Lock conversation" : "Заблокировать обсуждение", + "This will also terminate the ongoing call." : "Это также прервет текущий разговор.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Заблокировать обсуждение, чтобы запретить кому-либо отправлять сообщения или начинать вызов", + "Edit" : "Редактировать", + "More information" : "Дополнительные сведения", + "Delete" : "Удалить", + "Add new bridged channel to current conversation" : "Добавить к обсуждению новый канал обмена сообщениями", + "unknown state" : "неизвестное состояние", + "running" : "запущено", + "not running, check Matterbridge log" : "не запущено, проверьте журнал Matterbridge", + "not running" : "не запущено", + "Bridge saved" : "Параметры обмена сохранены", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge позволяет настроить обмен сообщеними с различными службами моментальных сообщений.", + "More info on Matterbridge" : "Дополнительные сведения о Matterbridge", + "Messaging systems" : "Системы обмена сообщениями", + "Enable bridge" : "Включить обмен собщениями", + "Show Matterbridge log" : "Открыть журнал Matterbridge", + "Log content" : "Записи журнала", + "Only moderators are allowed to mention @all" : "Только модераторы могут упоминать всех (@all)", + "All participants are allowed to mention @all" : "Все участники могут упоминать всех (@all)", + "Participants are now allowed to mention @all." : "Теперь участники могут упоминать всех (@all)", + "Mentioning @all has been limited to moderators." : " Упоминание всех (@all) было ограничено только для модераторов", + "Allow participants to mention @all" : "Разрешить участникам упоминать всех (@all)", + "Mention permissions" : "Упоминание разрешений", + "Notifications" : "Уведомления", + "Notify about calls in this conversation" : "Уведомлять о вызовах в этом обсуждении", + "Important conversation" : "Важное обсуждение", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус «Не беспокоить» игнорируется для важных обсуждений", + "Sensitive conversation" : "Конфиденциальное обсуждение", + "Message preview will be disabled in conversation list and notifications" : "Предварительный просмотр сообщений будет отключен в списке обсуждений и уведомлениях", + "Recording consent is required for calls in this conversation" : "Согласие на запись требуется для вызовов в этом обсуждении", + "Recording consent is not required for calls in this conversation" : "Согласие на запись не требуется для вызовов в этом обсуждении", + "Recording consent requirement was updated" : "Требование на согласие с записью вызова было изменено", + "Error occurred while updating recording consent" : "Произошла ошибка при изменении согласия на запись вызова", + "Recording Consent" : "Согласие на запись вызова", + "Recording consent cannot be changed once a call or breakout session has started." : "Согласие на запись не может быть изменено после начала вызова или сессии в комнатах обсуждения.", + "Require recording consent before joining call in this conversation" : "Требовать согласие на запись перед присоединением к вызову в этом обсуждении", + "Recording consent is required for all calls" : "Согласие на запись требуется для всех вызовов", + "SIP dial-in is now possible without PIN requirement" : "SIP-вызовы теперь возможны без запроса PIN-кода", + "SIP dial-in is now enabled" : "Входящие вызовы с использованием протокола SIP включены", + "SIP dial-in is now disabled" : "Входящие вызовы с использованием протокола SIP отключены", + "Error occurred when enabling SIP dial-in" : "Не удалось включить входящие SIP-вызовы", + "Error occurred when disabling SIP dial-in" : "Не удалось отключить входящие SIP-вызовы", + "Phone and SIP dial-in" : "Телефон и SIP-вызовы", + "Enable phone and SIP dial-in" : "Включить телефон и входящие SIP-вызовы", + "Allow to dial-in without a PIN" : "Разрешить набор номера без PIN-кода", + "Ongoing" : "Текущий", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n человек принял","%n человека приняли","%n человек приняли","%n человек приняли"], + "_%n person declined_::_%n people declined_" : ["%n человек отклонил","%n человека отклонили","%n человек отклонили","%n человек отклонили"], + "_and %n other attachment_::_and %n other attachments_" : ["и ещё %n вложение","и ещё %n вложения","и ещё %n вложений","и ещё %n вложений"], + "With {displayName}" : "С {displayName}", + "In {conversation}" : "В {conversation}", + "View attachment" : "Просмотреть вложение", + "Join" : "Присоединиться", + "View conversation" : "Просмотреть обсуждение", + "View event on Calendar" : "Просмотреть событие в Календаре", + "Error while creating the conversation" : "Не удалось создать обсуждение", + "Hello, {displayName}" : "Привет, {displayName}", + "Start meeting now" : "Начать встречу сейчас", + "Give your meeting a title" : "Дайте заголовок вашей встрече", + "Create and copy link" : "Создать и скопировать ссылку", + "Create a new conversation" : "Создать новое обсуждение", + "Join open conversations" : "Присоединиться к открытым обсуждениям", + "Call a phone number" : "Вызвать номер телефона", + "Scroll backward" : "Прокрутить назад", + "Scroll forward" : "Прокрутить вперед", + "Schedule meetings" : "Запланировать встречи", + "You don't have any upcoming meetings" : "У вас нет предстоящих встреч", + "Open calendar" : "Открыть Календарь", + "Unread mentions" : "Непрочитанные упоминания", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Сообщения с вашим упоминанием появятся здесь. Вы также можете упоминать людей, печатая \"@\" и имя пользователя", + "Upcoming reminders" : "Предстоящие напоминания", + "Message reminders" : "Напоминания о сообщениях", + "Set a reminder on a message to be notified" : "Установите напоминание о сообщении, чтобы получать уведомления", + "Start a group conversation" : "Начать групповое обсуждение", + "Create conversation" : "Создать обсуждение", + "Enter your name" : "Введите ваше имя", + "Submit name and join" : "Укажите имя и присоединитесь", + "Do you already have an account?" : "У вас уже есть учетная запись?", + "Log in" : "Войти", + "Error while verifying uploaded file" : "Ошибка при проверке загруженного файла", + "Uploaded file is verified" : "Загруженный файл проверен", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Содержимое в формате «сomma-separated values» (CSV):
- Строка заголовка обязательна и должна совпадать с \"name\",\"email\" или только \"email\"
- Один участник на одну линию (например, \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Участники успешно добавлены", + "Error while adding participants" : "Ошибка при добавлении участников", + "Import a file" : "Импортировать файл", + "Browse" : "Выбрать", + "Verifying uploaded file …" : "Проверка загруженного файла …", + "This might take a moment" : "Это может занять некоторое время", + "Send invitations" : "Отправить приглашения", + "_%n invalid email_::_%n invalid emails_" : ["%n некорректный адрес эл. почты","%n некорректных адреса эл. почты","%n некорректных адресов эл. почты","%n некорректных адресов эл. почты"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n адрес эл. почты уже добавлен или дублируется","%n адреса эл. почты уже добавлены или дублируются","%n адресов эл. почты уже добавлены или дублируются","%n адресов эл. почты уже добавлены или дублируются"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n приглашение может быть отправлено","%n приглашения может быть отправлено","%n приглашений может быть отправлено","%n приглашений может быть отправлено"], + "An error occurred while calling a phone number" : "Произошла ошибка при вызове номера телефона", + "Phone number could not be called: {error}" : "Номер телефона не может быть вызван: {error}", + "Phone number could not be called" : "Номер телефона не может быть вызван", + "Search participants or phone numbers" : "Искать участников или номера телефона", + "Creating the conversation …" : "Создание обсуждения …", + "Mark as read" : "Пометить прочитанным", + "Mark as unread" : "Пометить непрочитанным", + "Remove from favorites" : "Удалить из избранного", + "Add to favorites" : "Добавить в избранное", + "Unarchive conversation" : "Разархивировать обсуждение", + "Ignore \"Do not disturb\"" : "Игнорировать \"Не беспокоить\"", + "You need to promote a new moderator before you can leave the conversation." : "Вам нужно назначить нового модератора перед тем, как покинуть обсуждение.", + "Conversation actions" : "Действия для обсуждения", + "Notify about calls" : "Уведомлять о вызовах", + "Hide message text" : "Скрыть текст сообщений", + "Pending invitations" : "Ожидающие приглашения", + "Join conversations from other servers" : "Присоединитесь к обсуждениям на удалённых серверах", + "From {user} at {remoteServer}" : "От {user} с {remoteServer}", + "Decline invitation" : "Отклонить приглашение", + "Accept invitation" : "Принять приглашение", + "No pending invitations" : "Нет ожидающих приглашений", + "Home" : "Домашняя страница", + "Unread" : "Непрочитанное", + "Mentions" : "Упоминания", + "Meetings" : "Встречи", + "Sort conversations" : "Сортировать обсуждения", + "By recent activity" : "По недавней активности", + "Alphabetically" : "В алфавитном порядке", + "Do not group by type" : "Не группировать", + "Show private ones first" : "Показать сначала частные", + "Show group ones first" : "Показать сначала групповые", + "No followed threads" : "Нет отслеживаемых тем", + "No matches found" : "Соответствий не найдено", + "No conversations found" : "Не найдено ни одного обсуждения", + "You have no archived conversations." : "У Вас нет архивированных обсуждений.", + "Subscribe to an existing thread or start your own." : "Начните отслеживать существующую тему или создайте новую.", + "You have no unread mentions." : "У Вас нет непрочитанных упоминаний или личных сообщений.", + "You have no unread messages." : "У Вас нет непрочитанных сообщений.", + "An error occurred while performing the search" : "Не удалось выполнить поиск", + "Conversation list" : "Список обсуждений", + "Filter conversations by" : "Фильтровать обсуждения", + "Unread messages" : "Непрочитанные сообщения", + "Meeting conversations" : "Обсуждения - встречи", + "Clear filters" : "Сбросить фильтры", + "New personal note" : "Новая личная заметка", + "SIP backend is not installed" : "SIP сервер не установлен", + "Back to conversations" : "Обратно к обсуждениям", + "Archived conversations" : "Архивированные обсуждения", + "Threads" : "Темы", + "Clear filter" : "Сбросить фильтр", + "Show more threads" : "Показать больше тем", + "App settings" : "Настройки приложения", + "Users" : "Пользователи", + "Groups" : "Группы", + "Teams" : "Команды", + "Federated users" : "Федеративные пользователи", + "New private conversation" : "Новое частное обсуждение", + "Other sources" : "Другие источники", + "Open conversations" : "Открытые обсуждения", + "No search results" : "Ничего не найдено", + "Users, groups and teams" : "Пользователи, группы и команды", + "Users and groups" : "Пользователи и группы", + "Users and teams" : "Пользователи и команды", + "Groups and teams" : "Группы и команды", + "New group conversation" : "Новое групповое обсуждение", + "The meeting will start soon" : "Встреча скоро начнётся", + "This meeting is scheduled for {startTime}" : "Начало встречи запланировано на {startTime}", + "You are currently waiting in the lobby" : "В данный момент вы ожидаете в лобби", + "Enable noise suppression" : "Включить подавление шума", + "Reduce background noises for better voice quality" : "Уменьшить фоновый шум для лучшего качества голоса", + "Enable echo cancellation" : "Включить подавление эха", + "Minimize echo effect from own surrounding" : "Уменьшить эффект эха от собственного окружения", + "Enable auto gain control" : "Включить авторегулировку громкости", + "Dynamically adjust microphone volume for consistent level" : "Динамически подстраивать громкость микрофона для стабильного уровня", + "Select microphone" : "Выберите микрофон", + "No microphone available" : "Нет ни одного доступного микрофона", + "Select speaker" : "Выберите динамик", + "No speaker available" : "Нет ни одного доступного динамика", + "Select camera" : "Выберите камеру", + "No camera available" : "Нет ни одной доступной камеры", + "Select a device" : "Выберите устройство", + "Playing …" : "Воспроизводится …", + "Test speakers" : "Проверить динамики", + "Test" : "Проверить", + "Devices" : "Устройства", + "Backgrounds" : "Фоны", + "No audio" : "Без звука", + "No camera" : "Камера отсуствует", + "Display video as you will see it (mirrored)" : "Показать видео как Вы его видите (зеркально)", + "Display video as others will see it" : "Показать видео как другие его видят", + "Calls are not supported in your browser" : "Ваш браузер не поддерживает вызовы", + "Access to microphone is only possible with HTTPS" : "Доступ к микрофону разрешён только при использовании протокола HTTPS", + "Access to microphone was denied" : "Доступ к микрофону запрещён", + "Error while accessing microphone" : "Не удалось получить доступ к микрофону", + "Access to camera is only possible with HTTPS" : "Доступ к камере разрешён только при использовании протокола HTTPS", + "The call is being recorded." : "Вызов записывается.", + "The call might be recorded." : "Вызов может быть записан.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запись может включать ваш голос, видео с камеры и трансляцию экрана. Прежде чем присоединиться к вызову, требуется ваше согласие.", + "Give consent to the recording of this call" : "Дать согласие на запись этого вызова", + "Show more info" : "Показать больше", + "Audio is not available" : "Аудио недоступно", + "Video is not available" : "Видео недоступно", + "Start recording immediately with the call" : "Начать запись одновременно с вызовом", + "Recording backend is not installed" : "Сервер записи вызовов не установлен", + "Notify all participants about this call" : "Уведомить всех участников о начале вызова", + "Apply settings" : "Применить настройки", + "Select virtual office background" : "Выбрать виртуальный фон офиса", + "Select virtual home background" : "Выбрать виртуальный фон дома", + "Select virtual abstract background" : "Выбрать абстрактный виртуальный фон", + "Select virtual beach background" : "Выбрать виртуальный фон пляжа", + "Select virtual park background" : "Выбрать виртуальный фон парка", + "Select virtual theater background" : "Выбрать виртуальный фон театра", + "Select virtual library background" : "Выбрать виртуальный фон библиотеки", + "Select virtual space station background" : "Выбрать виртуальный фон космической станции", + "Error while uploading the file" : "Ошибка при загрузке файла", + "Select a file" : "Выберите файл", + "Invalid path selected" : "Указан некорректный путь", + "Select virtual background from file {fileName}" : "Выбрать виртуальный фон из файла {fileName}", + "Blur" : "Размытие", + "Upload" : "Отправить", + "Files" : "Файлы", + "(editing)" : "(редактируется)", + "(edited)" : "(изменено)", + "The message has expired or has been deleted" : "Срок жизни сообщения истёк или оно было удалено", + "Cancel quote" : "Отменить квоту", + "24 hours" : "24 часа", + "7 days" : "7 дней", + "30 days" : "30 дней", + "Until unpin" : "До открепления", + "Clear reminder – {timeLocale}" : "Очистить напоминание – {timeLocale}", + "Edited by {actor}" : "Изменено {actor}", + "Pinned by you" : "Закреплено Вами", + "Pinned by {actor}" : "Закреплено {actor}", + "Until {absoluteDate}" : "До {absoluteDate}", + "Message text copied to clipboard" : "Сообщение скопировано в буфер обмена", + "Message text could not be copied" : "Не удалось скопировать текст сообщения", + "Message forwarded to \"Note to self\"" : "Сообщение перенаправлено в «Личные заметки»", + "Error while forwarding message to \"Note to self\"" : "Ошибка при пересылке сообщения в «Личные заметки»", + "A reminder was successfully removed" : "Напоминание было успешно удалено", + "Error occurred when removing a reminder" : "Произошла ошибка при удалении напоминания", + "A reminder was successfully set at {datetime}" : "Напоминание было успешно установлено на {datetime}", + "Error occurred when creating a reminder" : "Произошла ошибка при создании напоминания", + "Add a reaction to this message" : "Отреагировать на это сообщение", + "Reply" : "Ответить", + "More actions" : "Больше действий", + "Set reminder" : "Установить напоминание", + "Pin message" : "Закрепить сообщение", + "Unpin message" : "Открепить сообщение", + "Reply privately" : "Ответить личным сообщением", + "Edit message" : "Редактировать сообщение", + "Copy message" : "Копировать сообщение", + "Copy message link" : "Скопировать ссылку на сообщение", + "Go to file" : "Перейти к файлу", + "Download file" : "Скачать файл", + "Go to thread" : "Перейти в тему", + "Edit thread details" : "Изменить детали темы", + "Forward message" : "Переслать сообщение", + "Translate" : "Перевести", + "Set custom reminder" : "Установить особое напоминание", + "Keep pinned for" : "Держать закрепленным:", + "Set custom period" : "Установить особый период", + "Close reactions menu" : "Закрыть меню реакций", + "React with {emoji}" : "Отреагируйте с {emoji}", + "React with another emoji" : "Отреагировать другим эмодзи", + "Choose a conversation to forward the selected message." : "Выберите обсуждение для пересылки выбранного сообщения.", + "Error while forwarding message" : "Не удалось переслать сообщение", + "The message has been forwarded to {selectedConversationName}" : "Сообщение переслано в {selectedConversationName}", + "Dismiss" : "Отклонить", + "Go to conversation" : "Перейти в обсуждение", + "Detect language" : "Определить язык", + "The message could not be translated" : "Сообщение не может быть переведено", + "Translation copied to clipboard" : "Перевод скопирован в буфер обмена", + "Translation could not be copied" : "Не удалось скопировать перевод", + "Translate message" : "Перевести сообщение", + "Source language to translate from" : "Исходный язык для перевода с", + "Translate from" : "Перевод с", + "Target language to translate into" : "Целевой язык для перевода на", + "Translate to" : "Перевести на", + "Translating" : "Идет перевод", + "This translation is AI generated and may contain mistakes." : "Перевод сгенерирован при помощи AI и может быть неточным", + "Copy translated text" : "Копировать переведенный текст", + "Error when scheduling the message" : "Ошибка при планировании сообщения", + "Reschedule" : "Перенести", + "Send now" : "Отправить сейчас", + "Choose a time" : "Выберите время", + "Send at custom time" : "Отправить в указанное время", + "Will be sent without notification" : "Будет отправлено без уведомления", + "Message read by everyone who shares their reading status" : "Сообщение прочитано всеми пользователями, включившими отчёт о прочтении", + "Message sent" : "Сообщение отправлено", + "Sent without notification" : "Отправлено без уведомления", + "Deleting message" : "Сообщение удаляется", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Сообщение успешно удалено, но настроен бот или Matterbridge, и сообщение может быть уже распространено на другие сервисы", + "Message deleted successfully" : "Сообщение успешно удалено", + "Message could not be deleted because it is too old" : "Сообщение не может быть удалено, т.к. оно было отправлено давно", + "Only normal chat messages can be deleted" : "Только обычные сообщения могут быть удалены", + "An error occurred while deleting the message" : "Не удалось удалить сообщение", + "Pinned" : "Закреплено", + "Your browser does not support playing audio files" : "Ваш браузер не поддерживает воспроизведение звуковых файлов", + "Contact" : "Контакт", + "{stack} in {board}" : "«{stack}» с доски «{board}»", + "Deck Card" : "Карточка", + "Remove {fileName}" : "Удалить {fileName}", + "Open this location in OpenStreetMap" : "Открыть местоположение в OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n ответ","%n ответа","%n ответов","%n ответов"], + "Sending message" : "Сообщение отправляется", + "Failed to send the message. Click to try again" : "Не удалось отправить сообщение; нажмите, чтобы попробовать ещё раз", + "Not enough free space to upload file" : "Недостаточно свободного места для передачи файла на сервер", + "You cannot send messages to this conversation at the moment" : "Сейчас вы не можете отправлять сообщения в это обсуждение", + "Could not update the message" : "Не удалось обновить сообщение", + "Reply to thread \"{threadTitle}\"" : "Ответить в теме «{threadTitle}»", + "_You voted • %n vote_::_You voted • %n votes_" : ["Вы проголосовали • %n голос","Вы проголосовали • %n голоса","Вы проголосовали • %n голосов","Вы проголосовали • %n голосов"], + "You voted" : "Вы проголосовали", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Нажмите для голосования • %n голос","Нажмите для голосования • %n голоса","Нажмите для голосования • %n голосов","Нажмите для голосования • %n голосов"], + "Click to vote" : "Нажмите для голосования", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Черновик опроса • %n вариант","Черновик опроса • %n варианта","Черновик опроса • %n вариантов","Черновик опроса • %n вариантов"], + "_%n vote_::_%n votes_" : ["%n голос","%n голоса","%n голосов","%n голосов"], + "Edit poll draft" : "Изменить черновик опроса", + "Delete poll draft" : "Удалить черновик опроса", + "Open poll" : "Открытый опрос", + "Closed poll" : "Закрытый опрос", + "See results" : "Посмотреть результаты", + "Reactions" : "Реакции", + "No permission to post reactions in this conversation" : "Нет разрешения на публикацию реакций в этом обсуждении", + "and {participant}" : "и {participant}", + "_and %n other participant_::_and %n other participants_" : ["и ещё %n участник","и ещё %n участника","и ещё %n участников","и ещё %n участников"], + "Show all reactions" : "Показать все реакции", + "Add more reactions" : "Добавить больше реакций", + "Show or collapse system messages" : "Показать или скрыть системные сообщения", + "No messages" : "Нет ни одного сообщения", + "All messages have expired or have been deleted." : "Срок жизни сообщений истек или они были удалены.", + "Generate summary with AI" : "Сгенерировать резюме с ИИ", + "{author} (pinned by you)" : "{author} (закреплено Вами)", + "{author} (pinned by {actor})" : "{author} (закреплено {actor})", + "Unpin" : "Открепить", + "Cancel search" : "Отменить поиск", + "Add a phone number" : "Добавить номер телефона", + "Error: A password is required to create the conversation." : "Ошибка: для создания обсуждения требуется пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Всё готово, обсуждение \"{conversationName}\" создано.", + "Create a new group conversation" : "Создать новое групповое обсуждение", + "Add participants" : "Добавить участников", + "Maximum length exceeded ({maxlength} characters)" : "Максимальная длина превышена ({maxlength} символов)", + "Conversation type" : "Тип обсуждения", + "Conversation visibility" : "Видимость обсуждения", + "Allow guests to join via link" : "Разрешить гостям присоединяться по ссылке", + "Enter password" : "Введите пароль", + "This conversation has been locked" : "Это обсуждение заблокировано", + "No permission to post messages in this conversation" : "Отсутствует разрешение на публикацию сообщений в этом обсуждении", + "Joining conversation …" : "Подключение к обсуждению…", + "Write a message without notification" : "Напишите сообщение без уведомления", + "Create a thread silently" : "Создать тему тихо", + "Create a thread" : "Создать тему", + "Send message silently" : "Отправить сообщение без звука", + "Send message" : "Отправить сообщение", + "Send without notification" : "Отправить без уведомления", + "The participant will not be notified about new messages" : "Участник не получит уведомление о новых сообщениях", + "Participants will not be notified about new messages" : "Участники не получат уведомлений о новых сообщениях", + "Message will be sent {datetimeString}" : "Сообщение будет отправлено {datetimeString}", + "Thread title is required" : "Заголовок темы обязателен", + "Message text is required" : "Требуется текстовое сообщение", + "The message could not be edited" : "Сообщение не может быть изменено", + "File to share" : "Поделиться файлом", + "File upload is not available in this conversation" : "Загрузка файлов недоступна для этого обсуждения", + "Message was successfully scheduled" : "Сообщение успешно запланировано", + "Add emoji" : "Добавить эмодзи", + "Adding a mention will only notify users who did not read the message." : "Добавление упоминания уведомит только тех пользователей, кто ещё не прочитал сообщение.", + "Thread title" : "Заголовок темы", + "Send later" : "Отправить позже", + "Show scheduled messages" : "Показать запланированные сообщения", + "Cancel editing" : "Отменить редактирование", + "Schedule message" : "Запланировать сообщение", + "{user} is out of office and might not respond." : "{user} вне офиса и может не ответить.", + "Absence period: {startDate} - {endDate}" : "Период отсутствия: {startDate} - {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Опубликовать из {nextcloud}", + "Share from Files" : "Опубликовать из приложения «Файлы»", + "Share files to the conversation" : "Поделиться файлами в обсуждении", + "Upload from device" : "Загрузить с устройства", + "Create new poll" : "Создать новый опрос", + "Smart picker" : "Умный подборщик", + "Record voice message" : "Записать голосовое сообщение", + "End recording and send" : "Завершить запись и отправить", + "Dismiss recording" : "Отменить запись", + "Access to the microphone was denied" : "Не удалось получить доступ к микрофону", + "Microphone either not available or disabled in settings" : "Микрофон недоступен или отключен", + "Error while recording audio" : "Не удалось записать звук", + "Voice message {time} ({conversation})" : "Голосовое сообщение {time} ({conversation})", + "Generating summary of unread messages …" : "Резюме непрочитанных сообщений генерируется …", + "Summary is AI generated and might contain mistakes" : "Резюме сгенерировано при помощи AI и может быть неточным", + "Error occurred during a summary generation" : "Произошла ошибка при генерировании резюме", + "New file" : "Новый файл", + "Blank" : "Пустой", + "Error while creating file" : "Не удалось создать файл", + "Create and share a new file" : "Создайте и поделитесь новым файлом", + "Name of the new file" : "Название нового файла", + "Create file" : "Создать файл", + "Someone is typing …" : "Кто-то печатает …", + "{user1} is typing …" : "{user1} печатает …", + "{user1} and {user2} are typing …" : "{user1} и {user2} печатают …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} печатают …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и еще %n другой пользователь печатают …","{user1}, {user2}, {user3} и еще %n других пользователя печатают …","{user1}, {user2}, {user3} и еще %n других пользователей печатают …","{user1}, {user2}, {user3} и еще %n других пользователей печатают …"], + "Add more files" : "Добавить файлы", + "Send" : "Отправить", + "In this conversation {user} can:" : "В этом обсуждении {user} может:", + "Edit default permissions for participants in {conversationName}" : "Изменить разрешения по умолчанию для участников {conversationName}", + "Start a call" : "Начать вызов", + "Skip the lobby" : "Пропустить лобби", + "Can post messages" : "Отправлять сообщения", + "Can post messages and reactions" : "Отправлять сообщения и реакции", + "Can add reactions" : "Добавлять реакции", + "Enable the microphone" : "Включить микрофон", + "Enable the camera" : "Включить камеру", + "Share the screen" : "Поделиться экраном", + "Update permissions" : "Обновление разрешений", + "Updating permissions" : "Обновление разрешений", + "No poll drafts" : "Нет черновиков опросов", + "There is no poll drafts yet saved for this conversation" : "Для этого обсуждения пока не сохранено ни одного черновика опроса", + "Create poll in {name}" : "Создать опрос в {name}", + "Create poll" : "Создать опрос", + "Error while importing poll" : "Ошибка при импорте опроса", + "Question" : "Вопрос", + "Ask a question" : "Задать вопрос", + "Import draft from file" : "Импортировать черновик из файла", + "Answers" : "Ответы", + "Answer {option}" : "Ответ «{option}»", + "Delete poll option" : "Удалить вариант опроса", + "Add answer" : "Добавить ответ", + "Settings" : "Настройки", + "Anonymous poll" : "Анонимный опрос", + "Multiple answers" : "Множество ответов", + "Save as draft" : "Сохранить как черновик", + "Export draft to file" : "Экспортировать черновик в файл", + "_Final results • %n vote_::_Final results • %n votes_" : ["Результаты опроса • %n голос","Результаты опроса • %n голоса","Результаты опроса • %n голосов","Результаты опроса • %n голосов"], + "Your vote is anonymous" : "Ваш голос анонимен", + "You voted for this option" : "Вы проголосовали за этот вариант", + "End poll" : "Завершить опрос", + "Change your vote" : "Изменить ваш голос", + "Withdraw vote" : "Отозвать голос", + "Results" : "Результаты", + "Voted participants" : "Проголосовавшие участники", + "Send a message to \"{roomName}\"" : "Отправить сообщение в «{roomName}»", + "Hide list of participants" : "Скрыть список участников", + "Show list of participants" : "Показать список участников", + "Assistance requested in {roomName}" : "Запрошена помощь в {roomName}", + "The message was sent to \"{roomName}\"" : "Сообщение было отправлено в «{roomName}»", + "Dismiss request for assistance" : "Отклонить запрос о помощи", + "Send message to room" : "Отправить сообщение в комнату", + "Back to main room" : "Вернуться в главную комнату", + "Back to your room" : "Вернуться в свою комнату", + "Message all rooms" : "Сообщение всем комнатам", + "Start session" : "Начать сессию", + "Start a call before you start a breakout room session" : "Начните вызов, прежде чем запустить сессию в комнатах обсуждения", + "Stop session" : "Остановить сеанс", + "The message was sent to all breakout rooms" : "Сообщение было отправлено во все комнаты обсуждения", + "Send a message to all breakout rooms" : "Отправить сообщение во все комнаты обсуждения", + "Breakout rooms are not started" : "Комнаты обсуждения не запущены", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Вызовы без Высокопроизводительного сервера могут вызвать проблемы со связью и высокую нагрузку на устройства. {linkstart}Узнать больше{linkend}", + "Talk setup incomplete" : "Конфигурация Talk не завершена", + "Disable lobby" : "Отключить лобби", + "Settings for participant \"{user}\"" : "Параметры участника «{user}»", + "Participant \"{user}\"" : "Участник «{user}»", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гость", + "Ringing …" : "Вызываем ...", + "Call rejected" : "Вызов отклонен", + "{time} talking …" : "{time} говорит …", + "{time} talking time" : "{time} время разговора", + "Raised their hand" : "Поднял руку", + "Joined with video" : "Передача видео включена", + "Joined via phone" : "Телефонное соединение", + "Joined with audio" : "Передача звука включена", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Описание должно быть не длиннее {maxLength} символов. Длина введённого текста: {charactersCount} cимволов.", + "Remove group and members" : "Исключить группу и её участников", + "Remove team and members" : "Исключить команду и её участников", + "Remove participant" : "Исключить участника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Вы действительно хотите исключить группу «{displayName}» и её участников из этого обсуждения?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Вы действительно хотите исключить команду «{displayName}» и её участников из этого обсуждения?", + "Do you really want to remove {displayName} from this conversation?" : "Вы действительно хотите исключить {displayName} из этого обсуждения?", + "Notification was sent to {displayName}" : "Уведомление было отправлено для {displayName}", + "Could not send notification to {displayName}" : "Не удалось отправить уведомление для {displayName}", + "Permissions granted to {displayName}" : "Разрешения предоставлены {displayName}", + "Could not modify permissions for {displayName}" : "Не удалось изменить разрешения для {displayName}", + "Permissions removed for {displayName}" : "Разрешения удалены для {displayName}", + "Permissions set to default for {displayName}" : "Разрешения установлены по умолчанию для {displayName}", + "Phone number could not be hung up" : "Номер телефона не может быть повешен", + "Phone number could not be put on hold" : "Номер телефона не может быть поставлен на удержание", + "Phone number could not be muted" : "Звук для номера телефона не может быть отключен", + "Phone number could not be unmuted" : "Звук для номера телефона не может быть включен", + "DTMF message could not be sent" : "DTMF сообщение не может быть отправлено", + "Phone number copied to clipboard" : "Номер телефона скопирован в буфер обмена", + "Phone number could not be copied" : "Номер телефона не может быть скопирован", + "in the lobby" : "В лобби", + "Dial out phone" : "Набрать номер", + "Hang up phone" : "Повесить номер", + "Move back to lobby" : "Отправить в лобби", + "Move to conversation" : "Добавить в обсуждение", + "Dial-in PIN" : "PIN для звонка", + "Demote from moderator" : "Исключить из модераторов", + "Promote to moderator" : "Назначить модератором", + "Resend invitation" : "Повторно отправить приглашение", + "Send call notification" : "Отправить уведомление о вызове", + "Dial out phone number" : "Набрать номер телефона", + "Resume call for phone number" : "Продолжить вызов для номера телефона", + "Put phone number on hold" : "Поставить номер телефона на удержание", + "Unmute phone number" : "Включить звук для номера телефона", + "Mute phone number" : "Отключить звук для номера телефона", + "Copy phone number" : "Копировать номер телефона", + "Reset custom permissions" : "Сброс пользовательских разрешений", + "Grant all permissions" : "Предоставить все разрешения", + "Remove all permissions" : "Удалить все разрешения", + "Also ban from this conversation" : "Также забанить в этом обсуждении", + "Internal note (reason to ban)" : "Внутреняя заметка (причина бана)", + "Remove" : "Исключить", + "Permissions modified for {displayName}" : "Разрешения изменены для {displayName}", + "Add users, groups or teams" : "Добавить пользователей, группы или команды", + "Add users or groups" : "Добавить пользователей или группы", + "Add users or teams" : "Добавить пользователей или команды", + "Add users" : "Добавить пользователей", + "Add groups or teams" : "Добавить группы или команды", + "Add groups" : "Добавить группы", + "Add teams" : "Добавить команды", + "Add other sources" : "Добавить другие источники", + "Add emails" : "Добавить по адресам эл. почты", + "Integrations" : "Интеграции", + "Add federated users" : "Добавить федеративных пользователей", + "Searching …" : "Поиск…", + "Search for more users" : "Искать других пользователей", + "You can search or add participants via name, email, or Federated Cloud ID" : "Вы можете искать или добавлять участников по имени, адресу электронной почты или идентификатору Federated Cloud.", + "Search or add participants" : "Искать или добавить участников", + "Invitation was sent to {actorId}" : "Приглашение отправлено {actorId}", + "An error occurred while adding the participants" : "Произошла ошибка при добавлении участников", + "A new group conversation with selected participant will be created" : "Будет создано новое групповое обсуждение с выбранным участником", + "Participants" : "Участники", + "Pinned by a deleted user" : "Закреплено удаленным пользователем", + "Participants ({count})" : "Участники ({count})", + "Open chat" : "Открыть чат", + "You have new unread messages in the chat." : "В обсуждении имеются непрочитанные сообщения.", + "You have been mentioned in the chat." : "Вы были упомянуты в обсуждении.", + "Search messages" : "Искать сообщения", + "Chat" : "Чат", + "Details" : "Дополнительно", + "Shared items" : "Общие элементы", + "Search in {name}" : "Поиск в {name}", + "Threads in {name}" : "Темы в {name}", + "{actor} in {conversation}" : "{actor} в {conversation}", + "Search messages …" : "Искать сообщения …", + "Search options" : "Параметры поиска", + "From User" : "От пользователя", + "Since" : "С", + "Until" : "До", + "No results found" : "Результаты отсутствуют", + "Load more results" : "Показать больше результатов", + "Recent threads" : "Недавние темы", + "Projects" : "Проекты", + "No shared items" : "Нет общих элементов", + "Thread notifications" : "Уведомления для темы", + "Thread actions" : "Действия с темой", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Ссылка на обсуждение", + "No open conversations found" : "Не найдено ни одного открытого обсуждения", + "Either there are no open conversations or you joined all of them." : "Открытых обсуждений нет, или вы присоединились ко всем возможным.", + "Check spelling or use complete words." : "Проверьте правописание или используйте полные слова", + "Search conversations or users" : "Искать обсуждения или пользователей", + "Select conversation" : "Выберите обсуждение", + "Number length is not valid" : "Длина номера некорректна", + "Region code is not valid" : "Код региона некорректен", + "Number length is too short" : "Длина номера слишком короткая", + "Number length is too long" : "Длина номера слишком длинная", + "Number is not valid" : "Номер указан некорректно", + "Phone numbers" : "Номера телефонов", + "Display name: {name}" : "Отображаемое имя: {name}", + "Edit display name" : "Изменить отображаемое имя", + "Display name (required)" : "Отображаемое имя (обязательно)", + "Save name" : "Сохранить имя", + "I picked message bubbles" : "Я выбираю пузыри сообщений", + "I picked the list style" : "Я выбираю в стиле списка", + "Error while setting personal setting" : "Ошибка при сохранении персональных параметров", + "Error while saving sounds setting" : "Не удалось сохранить параметры звука", + "Compact conversations list" : "Компактный список обсуждений", + "Chat appearance" : "Внешний вид чата", + "Messages list" : "Список сообщений", + "Message bubbles" : "Сообщения в пузырях", + "Play sounds when participants join or leave a call" : "Воспроизводить звуки, когда участники присоединяются к вызову или покидают его", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "В настоящее время недоступно на iPhone и iPad из-за технических ограничений производителя.", + "Notification settings" : "Настройки уведомлений", + "Sounds for chat and call notifications" : "Звуки уведомлений о новых сообщениях или вызове", + "Invalid language ({languageId})" : "Недопустимый язык ({languageId})", + "Default language" : "Язык по умолчанию", + "Default language ({languageName})" : "Язык по умолчанию ({languageName})", + "Error when trying to load the available live translation languages" : "Ошибка при попытке загрузить доступные языки для онлайн-перевода", + "Error when trying to set live translation language" : "Ошибка при попытке установить язык для онлайн-перевода", + "Set language used to show the transcriptions" : "Установить язык для отображения транскрипции", + "Select location for attachments" : "Выберите путь для сохранения вложений", + "Error while setting attachment folder" : "Не удалось задать папку для вложений", + "Error while setting read status privacy" : "Не удалось сохранить параметр состояния прочтения", + "Error while setting typing status privacy" : "Ошибка при настройке конфиденциальности статуса ввода", + "Error while setting default media state" : "Ошибка при сохранении параметров медиа по умолчанию", + "Turn camera and microphone off by default" : "Отключить камеру и микрофон по умолчанию", + "Blur camera background by default" : "Размытие фона камеры по умолчанию", + "Skip device preview before joining a call" : "Пропустить просмотр устройств перед присоединением к вызову", + "Appearance & Sounds" : "Внешний вид и звуковые уведомления", + "Privacy" : "Конфиденциальность", + "Send read receipts" : "Делиться уведомлениями о прочтении", + "When off, all read statuses will be hidden" : "Если выключено, все уведомления о прочтении будут скрыты", + "Share typing status" : "Делиться статусом набора текста", + "When off, all typing indicators will be hidden" : "Если выключено, все статусы набора текста будут скрыты", + "Attachments folder" : "Папка для вложений", + "Toggle full screen" : "Переключиться на полный экран", + "Return to Home screen" : "Вернуться на начальный экран", + "Search" : "Поиск", + "Shortcuts while in a chat" : "Комбинации клавиш в чате", + "Focus the chat input" : "Переключиться в окно ввода текста", + "Unfocus the chat input to use shortcuts" : "Переключиться из поля ввода текста для использования комбинаций клавиш", + "Edit your last message" : "Изменить Ваше последнее сообщение", + "Shortcuts while in a call" : "Комбинации клавиш во время вызова", + "Camera on and off" : "Включение и выключение камеры", + "Microphone on and off" : "Включить или отключить микрофон", + "Raise or lower hand" : "Поднять или опустить руку", + "Push to talk or push to mute" : "Кнопка для включения (PTT) или отключения (PTM) передачи голоса ", + "Zoom-in / zoom-out a screen share" : "Увеличить / уменьшить масштаб трансляции экрана", + "Mouse wheel" : "Колесо мыши", + "Start call silently" : "Начать тихий вызов", + "Start call" : "Начать вызов", + "End call" : "Завершить вызов", + "The server was updated, you cannot start or join a call." : "Сервер был обновлен, вы не можете начать или присоединиться к вызову.", + "This call has just ended" : "Этот вызов только что завершён", + "You will be able to join the call only after a moderator starts it." : "Вы сможете присоединиться к вызову только после того, как его начнет модератор.", + "End call for everyone" : "Завершить вызов для всех", + "Starting the recording" : "Начало записи", + "Recording" : "Запись", + "The call has been running for one hour." : "Вызов длится уже более часа", + "Cancel recording start" : "Отменить начало записи", + "Stop recording" : "Остановить запись", + "Send a reaction" : "Отправить реакцию", + "React with {reaction}" : "Отреагировать с {reaction}", + "All tasks done!" : "Все задачи выполнены!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} из %n задач","{done} из %n задач","{done} из %n задач","{done} из %n задач"], + "Add participants to this call" : "Добавить участников в этот вызов", + "_%n participant in call_::_%n participants in call_" : ["%n участник в вызове","%n участника в вызове","%n участников в вызове","%n участников в вызове"], + "Scheduled messages" : "Запланированные сообщения", + "You are not allowed to enable screensharing" : "Вам не разрешено транслировать экран", + "No screensharing" : "Трансляция экрана недоступна", + "Screensharing options" : "Параметры трансляции экрана", + "Enable screensharing" : "Включить трансляцию экрана", + "Bad sent video and screen quality." : "Плохое качество видео и изображения.", + "Bad sent screen quality." : "Плохое качество изображения.", + "Bad sent video quality." : "Плохое качество видео.", + "Bad sent audio, video and screen quality." : "Плохое качество звука, видео и изображения.", + "Bad sent audio and screen quality." : "Плохое качество звука и изображения.", + "Bad sent audio and video quality." : "Плохое качество звука и видео.", + "Bad sent audio quality." : "Плохое качество звука.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео во время трансляции экрана.", + "Disable background blur" : "Отключить размытый фон", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут не видеть ваш экран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не видеть.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать или не видеть. Для улучшения ситуации попробуйте отключить видео во время трансляции экрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить трансляцию экрана.", + "Disable screenshare" : "Отключить трансляцию экрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваше интернет соединение или компьютер перегружены, и другие участники не могут видеть ваш экран. Чтобы исправить, попробуйте отключить размытие фона или видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать или не видеть. Для улучшения ситуации попробуйте отключить видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваше интернет-подключение или компьютер сильно загружены и другие пользователи могут вас не понимать.", + "Screen sharing is not supported by your browser." : "Ваш браузер не подерживает трансляцию экрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Для трансляции экрана требуется загрузка этой страницы с использованием протокола HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Для трансляции экрана требуется загрузка этой страницы с использованием протокола HTTPS.", + "An error occurred while starting screensharing." : "Не удалось начать трансляцию экрана.", + "Select virtual background" : "Выбрать виртуальный фон", + "Show your screen" : "Показать ваш экран", + "Stop screensharing" : "Прекратить трансляцию экрана", + "Mute others" : "Отключить микрофоны других пользователей", + "Start recording" : "Начать запись", + "Set up breakout rooms" : "Настроить комнаты обсуждения", + "Download attendance list" : "Скачать список участников", + "Open Calendar" : "Окрыть календарь", + "Remove participant {name}" : "Исключить участника {name}", + "Would you like to delete this conversation?" : "Вы хотите удалить это обсуждение?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Обсуждение будет автоматически удалено для всех после %n дня отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности.","Обсуждение будет автоматически удалено для всех после %n дней отсутствия активности."], + "Are you sure you want to delete this conversation?" : "Вы уверены, что хотите удалить это обсуждение?", + "Delete now" : "Удалить сейчас", + "Keep" : "Сохранить", + "Open dialpad" : "Открыть панель набора", + "Select a region" : "Выберите регион", + "Local time: {time}" : "Местное время: {time}", + "Scheduled {datetime}" : "Запланировано {datetime} ", + "Scheduled for {datetime}" : "Запланировано на {datetime}", + "Search …" : "Поиск …", + "Message without mention" : "Сообщение без упоминания", + "Mention myself" : "Упоминание себя", + "Mention everyone" : "Упомянуть всех", + "Select a conversation" : "Выберите обсуждение", + "Select a mode" : "Выберите режим", + "You do not have permissions to access this conversation." : "У вас нет прав доступа к этому обсуждению.", + "Join a different conversation or start a new one." : "Присоединитесь к другому обсуждению или начните новое.", + "The conversation does not exist" : "Обсуждения не существует", + "Join a conversation or start a new one!" : "Присоединитесь к обсуждению или начните новое!", + "Duplicate session" : "Повторяющийся сеанс", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Обсуждение было открыто в другой вкладке. Текущая версия сервера не поддерживает открытие одного обсуждения в нескольких вкладках.", + "Creating and joining a conversation with \"{userid}\"" : "Создание и присоединение к обсуждению с пользователем \"{userid}\"", + "Join a conversation or start a new one" : "Присоединитесь к обсуждению или начните новое", + "Error while joining the conversation" : "Ошибка при присоединении к обсуждению", + "Another user" : "Другой пользователь", + "Hey! Are you using the list style or message bubbles?" : "Привет! Ты используешь чат в Конференциях в стиле списка или пузырей?", + "Nextcloud URL" : "Адрес сервера Nextcloud", + "Nextcloud user" : "Имя пользователя Nextcloud", + "User password" : "Пароль пользователя", + "Talk conversation" : "Название обсуждения", + "Skip TLS verification" : "Не использовать проверку подлинности TLS", + "Matrix server URL" : "Адрес сервера Matrix", + "User" : "Пользователь", + "Matrix channel" : "Канал Matrix", + "Mattermost server URL" : "Адрес сервера Mattermost", + "Mattermost user" : "Пользователь Mattermost", + "Team name" : "Название команды", + "Channel name" : "Название канала", + "Rocket.Chat server URL" : "URL сервера Rocket.Chat", + "User name or email address" : "Имя пользователя или адрес эл. почты", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "Адрес сервера Zulip", + "Bot user name" : "Имя пользователя-бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "API токен", + "Slack channel" : "Канал Slack", + "Server ID or name" : "ID или имя сервера", + "Channel ID (prefixed with \"ID:\") or name" : "ID канала (с префиксом \"ID:\") или имя", + "Channel" : "Канал", + "Login" : "Логин", + "Chat ID" : "ID чата", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Адрес сервера IRC (к примеру: chat.freenode.net:6667)", + "Nickname" : "Псевдоним", + "Connection password" : "Пароль для подключения", + "IRC channel" : "Канал IRC", + "Channel password" : "Пароль для канала", + "NickServ nickname" : "Псевдоним NickServ", + "NickServ password" : "Пароль для NickServ", + "Use TLS" : "Использовать TLS", + "Use SASL" : "Использовать SASL", + "Tenant ID" : "ID участника", + "Client ID" : "ID клиента", + "Team ID" : "ID команды", + "Thread ID" : "ID ветки обсуждения", + "XMPP/Jabber server URL" : "Адрес сервера XMPP или Jabber", + "MUC server URL" : "Адрес сервера MUC", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "Закрепленные сообщения", + "Media" : "Медиа", + "Polls" : "Опросы", + "Deck cards" : "Карточки", + "Voice messages" : "Голосовые сообщения", + "Locations" : "Места", + "Call recordings" : "Записи вызовов", + "Audio" : "Звук", + "Show all pinned messages" : "Показать все закрепленные сообщения", + "Show all media" : "Показать все медиа", + "Show all files" : "Показать все файлы", + "Show all polls" : "Показать все опросы", + "Show all deck cards" : "Показать все карточки", + "Show all voice messages" : "Показать все голосовые сообщения", + "Show all locations" : "Показать все местоположения", + "Show all call recordings" : "Показать все записи вызовов", + "Show all audio" : "Показать все аудио", + "Show all other" : "Показать все остальное", + "Follow conversation settings" : "Следовать настройкам обсуждения", + "Group" : "Группа", + "Team" : "Команда", + "You reconnected to the call" : "Вы переподключились к вызову", + "{actor} reconnected to the call" : "{actor} переподключился(лась) к вызову", + "You added {user0} and {user1}" : "Вы добавили {user0} и {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Вы добавили {user0}, {user1} и ещё %n участника","Вы добавили {user0}, {user1} и ещё %n участников","Вы добавили {user0}, {user1} и ещё %n участников","Вы добавили {user0}, {user1} и ещё %n участников"], + "An administrator added you and {user0}" : "Администратор добавил Вас и {user0} ", + "{actor} added you and {user0}" : "{actor} добавил(а) Вас и {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Администратор добавил Вас, {user0} и ещё %n участника","Администратор добавил Вас, {user0} и ещё %n участников","Администратор добавил Вас, {user0} и ещё %n участников","Администратор добавил Вас, {user0} и ещё %n участников"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} добавил(а) Вас, {user0} и ещё %n участника","{actor} добавил(а) Вас, {user0} и ещё %n участников","{actor} добавил(а) Вас, {user0} и ещё %n участников","{actor} добавил(а) Вас, {user0} и ещё %n участников"], + "An administrator added {user0} and {user1}" : "Администратор добавил {user0} и {user1} ", + "{actor} added {user0} and {user1}" : "{actor} добавил(а) {user0} и {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Администратор добавил {user0}, {user1} и ещё %n участника","Администратор добавил {user0}, {user1} и ещё %n участников","Администратор добавил {user0}, {user1} и ещё %n участников","Администратор добавил {user0}, {user1} и ещё %n участников"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} добавил(а) {user0}, {user1} и ещё %n участника","{actor} добавил(а) {user0}, {user1} и ещё %n участников","{actor} добавил(а) {user0}, {user1} и ещё %n участников","{actor} добавил(а) {user0}, {user1} и ещё %n участников"], + "You removed {user0} and {user1}" : "Вы исключили {user0} и {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Вы исключили {user0}, {user1} и ещё %n участника","Вы исключили {user0}, {user1} и ещё %n участников","Вы исключили {user0}, {user1} и ещё %n участников","Вы исключили {user0}, {user1} и ещё %n участников"], + "An administrator removed you and {user0}" : "Администратор исключил Вас и {user0} ", + "{actor} removed you and {user0}" : "{actor} исключил(а) Вас и {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Администратор исключил Вас, {user0} и ещё %n участника","Администратор исключил Вас, {user0} и ещё %n участников","Администратор исключил Вас, {user0} и ещё %n участников","Администратор исключил Вас, {user0} и ещё %n участников"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} исключил(а) Вас, {user0} и ещё %n участника","{actor} исключил(а) Вас, {user0} и ещё %n участников","{actor} исключил(а) Вас, {user0} и ещё %n участников","{actor} исключил(а) Вас, {user0} и ещё %n участников"], + "An administrator removed {user0} and {user1}" : "Администратор исключил {user0} и {user1} ", + "{actor} removed {user0} and {user1}" : "{actor} исключил(а) {user0} и {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Администратор исключил {user0}, {user1} и ещё %n участника","Администратор исключил {user0}, {user1} и ещё %n участников","Администратор исключил {user0}, {user1} и ещё %n участников","Администратор исключил {user0}, {user1} и ещё %n участников"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} исключил(а) {user0}, {user1} и ещё %n участника","{actor} исключил(а) {user0}, {user1} и ещё %n участников","{actor} исключил(а) {user0}, {user1} и ещё %n участников","{actor} исключил(а) {user0}, {user1} и ещё %n участников"], + "You and {user0} joined the call" : "Вы и {user0} присоединились к вызову", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Вы, {user0} и ещё %n участник присоединились к вызову","Вы, {user0} и ещё %n участника присоединились к вызову","Вы, {user0} и ещё %n участников присоединились к вызову","Вы, {user0} и ещё %n участников присоединились к вызову"], + "{user0} and {user1} joined the call" : "{user0} и {user1} присоединились к вызову", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} и ещё %n участник присоединились к вызову","{user0}, {user1} и ещё %n участника присоединились к вызову","{user0}, {user1} и ещё %n участников присоединились к вызову","{user0}, {user1} и ещё %n участников присоединились к вызову"], + "You and {user0} left the call" : "Вы и {user0} покинули вызов", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Вы, {user0} и ещё %n участник покинули вызов","Вы, {user0} и ещё %n участника покинули вызов","Вы, {user0} и ещё %n участников покинули вызов","Вы, {user0} и ещё %n участников покинули вызов"], + "{user0} and {user1} left the call" : "{user0} и {user1} покинули вызов", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} и ещё %n участник покинули вызов","{user0}, {user1} и ещё %n участника покинули вызов","{user0}, {user1} и ещё %n участников покинули вызов","{user0}, {user1} и ещё %n участников покинули вызов"], + "You promoted {user0} and {user1} to moderators" : "Вы назначили {user0} и {user1} модераторами", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Вы назначили {user0}, {user1} и ещё %n участника модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами","Вы назначили {user0}, {user1} и ещё %n участников модераторами"], + "An administrator promoted you and {user0} to moderators" : "Администратор назначил Вас и {user0} модераторами", + "{actor} promoted you and {user0} to moderators" : "{actor} назначил(а) Вас и {user0} модераторами", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Администратор назначил Вас, {user0} и ещё %n участника модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами","Администратор назначил Вас, {user0} и ещё %n участников модераторами"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} назначил(а) Вас, {user0} и ещё %n участника модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами","{actor} назначил(а) Вас, {user0} и ещё %n участников модераторами"], + "An administrator promoted {user0} and {user1} to moderators" : "Администратор назначил {user0} и {user1} модераторами", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} назначил(а) {user0} и {user1} модераторами", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Администратор назначил {user0} , {user1} и ещё %n участника модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами","Администратор назначил {user0} , {user1} и ещё %n участников модераторами"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} назначил(а) {user0}, {user1} и ещё %n участника модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами","{actor} назначил(а) {user0}, {user1} и ещё %n участников модераторами"], + "You demoted {user0} and {user1} from moderators" : "Вы исключили {user0} и {user1} из модераторов", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Вы исключили {user0}, {user1} и ещё %n участника из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов","Вы исключили {user0}, {user1} и ещё %n участников из модераторов"], + "An administrator demoted you and {user0} from moderators" : "Администратор исключил Вас и {user0} из модераторов", + "{actor} demoted you and {user0} from moderators" : "{actor} исключил(а) Вас и {user0} из модераторов", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Администратор исключил Вас, {user0} и ещё %n участника из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов","Администратор исключил Вас, {user0} и ещё %n участников из модераторов"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} исключил(а) Вас, {user0} и ещё %n участника из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов","{actor} исключил(а) Вас, {user0} и ещё %n участников из модераторов"], + "An administrator demoted {user0} and {user1} from moderators" : "Администратор исключил {user0} и {user1} из модераторов", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} исключил(а) {user0} и {user1} из модераторов", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Администратор исключил {user0}, {user1} и ещё %n участника из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов","Администратор исключил {user0}, {user1} и ещё %n участников из модераторов"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} исключил(а) {user0}, {user1} и ещё %n участника из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов","{actor} исключил(а) {user0}, {user1} и ещё %n участников из модераторов"], + "You:" : "Вы:", + "You: {lastMessage}" : "Вы: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Сервер был обновлен.", + "(edited by you)" : "(изменено Вами)", + "(edited by a deleted user)" : "(изменено удаленным пользователем)", + "(edited by {moderator})" : "(изменено {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Вы пытаетесь присоединиться к обсуждению, в котором уже есть активные сессии из другого окна или устройства. В данный момент данная возможность не поддерживается сервером Nextcloud Talk. Что вы хотите сделать?", + "Leave this page" : "Покинуть страницу", + "Join here" : "Присоединиться", + "Deck card has been posted to {conversation}" : "Карточка была отправлена в {conversation}", + "An error occurred while posting deck card to conversation" : "Произошла ошибка при отправке карточки в обсуждение", + "Post to a conversation" : "Опубликовать в обсуждении", + "Post to conversation" : "Опубликовать в обсуждении", + "The recording failed. Please contact your administrator." : "Не удалось записать звонок. Пожалуйста, свяжитесь с администратором.", + "Location has been posted to {conversation}" : "Местоположение было отправлено в {conversation}", + "An error occurred while posting location to conversation" : "Произошла ошибка при отправке местоположения в обсуждение", + "Share to a conversation" : "Опубликовать в обсуждении", + "Share to conversation" : "Опубликовать в обсуждении", + "In conversation" : "В обсуждении", + "Search in conversation: {conversation}" : "Найти в обсуждении: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "В настоящий момент ваши запросы ограничены из-за защиты от брутфорс-атак", + "Error while clearing conversation history" : "Не удалось удалить историю сообщений обсуждения", + "Error occurred while allowing guests" : "Произошла ошибка при открытии доступа для гостей", + "Error occurred while disallowing guests" : "Произошла ошибка при закрытии доступа для гостей", + "Error occurred when restricting the conversation to moderator" : "Не удалось ограничить доступ к обсуждению только для модераторов", + "Error occurred when opening the conversation to everyone" : "Не удалось открыть доступ к обсуждению всем пользователям", + "Conversation password has been saved" : "Пароль для обсуждения сохранён", + "Conversation password has been removed" : "Пароль обсуждения был удалён", + "Error occurred while saving conversation password" : "Не удалось сохранить пароль для обсуждения", + "Call recording is starting." : "Начата запись вызова.", + "Call recording stopped while starting." : "Запись вызова остановлена ​​при запуске.", + "Call recording stopped. You will be notified once the recording is available." : "Запись вызова остановлена. Вы будете уведомлены, как только запись будет доступна.", + "Conversation picture set" : "Изображение обсуждения установлено", + "Conversation picture deleted" : "Изображение обсуждения удалено", + "Could not delete the conversation picture" : "Не удалось удалить изображение обсуждения", + "Could not remove the automatic expiration" : "Не удалось удалить автоматическое истечение срока действия", + "Could not post message: {errorMessage}" : "Не удалось опубликовать сообщение: {errorMessage}", + "Participant is banned successfully" : "Участник успешно забанен", + "Error while banning the participant" : "Ошибка при бане участника", + "An error occurred while fetching the participants" : "Произошла ошибка при получении списка участников", + "Could not send invitation to {actorId}" : "Не удалось отправить приглашение {actorId}", + "Invitations sent" : "Приглашения отправлены", + "Error occurred when sending invitations" : "Не удалось отправить приглашения", + "Failed to join the conversation." : "Не удалось присоединиться к обсуждению.", + "An error occurred while creating breakout rooms" : "Произошла ошибка при создании комнат обсуждения", + "An error occurred while re-ordering the attendees" : "Произошла ошибка при изменении порядка участников", + "An error occurred while deleting breakout rooms" : "Произошла ошибка при удалении комнат обсуждения", + "An error occurred while starting breakout rooms" : "Произошла ошибка при запуске комнат обсуждения", + "An error occurred while stopping breakout rooms" : "Произошла ошибка при остановке комнат обсуждения", + "An error occurred while sending a message to the breakout rooms" : "Произошла ошибка при отправке сообщения в комнаты обсуждения", + "An error occurred while requesting assistance" : "Произошла ошибка при запросе помощи", + "An error occurred while resetting the request for assistance" : "Произошла ошибка при сбросе запроса на помощь", + "An error occurred while joining breakout room" : "Произошла ошибка при присоединении к комнате обсуждения", + "Failed to rename the thread" : "Не удалось переименовать тему", + "Error fetching upcoming events" : "Ошибка при загрузке предстоящих встреч", + "Error fetching upcoming reminders" : "Ошибка при загрузке предстоящих напоминаний", + "An error occurred while accepting an invitation" : "Произошла ошибка при принятии приглашения", + "An error occurred while rejecting an invitation" : "Произошла ошибка при отклонении приглашения", + "{guest} (guest)" : "{guest} (гость)", + "Poll draft has been saved" : "Черновик опроса сохранён", + "An error occurred while saving the draft" : "Произошла ошибка при сохранении черновика", + "An error occurred while submitting your vote" : "При отправке вашего голоса произошла ошибка", + "An error occurred while ending the poll" : "Произошла ошибка при завершении опроса", + "An error occurred while deleting the poll draft" : "Произошла ошибка при удалении черновика опроса", + "Poll \"{name}\" was created by {user}. Click to vote" : "Опрос «{name}» создан {user}. Нажмите, чтобы проголосовать", + "Failed to add reaction" : "Не удалось добавить раакцию", + "Failed to remove reaction" : "Не удалось удалить реакцию", + "The server is in maintenance mode." : "Сервер в режиме обслуживания.", + "Federated server was updated." : "Федеративный сервер был обновлен.", + "Error while uploading file \"{fileName}\"" : "Не удалось передать на сервер файл «{fileName}»", + "Not enough free space to upload file \"{fileName}\"" : "Недостаточно свободного места для передачи на сервер файла «{fileName}» ", + "You are not allowed to share files" : "Вам не разрешено публиковать файлы", + "Error while sharing file" : "Ошибка сохранения файла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Приложение Talk для Nextcloud не полностью поддерживает браузер, который вы используете. Рекомендованные браузеры: Mozilla Firefox, Microsoft Edge, Google Chrome, Opera и Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Через %n час","Через %n часа","Через %n часов","Через %n часов"], + "_%n minute _::_%n minutes_" : ["%n минуту","%n минуты","%n минут","%n минут"], + "In {hours} and {minutes}" : "Через {hours} и {minutes}", + "_In %n minute_::_In %n minutes_" : ["Через %n минуту","Через %n минуты","Через %n минут","Через %n минут"], + "Later today – {timeLocale}" : "Позднее сегодня – {timeLocale}", + "Set time for later today" : "Установить время позднее сегодня", + "Tomorrow – {timeLocale}" : "Завтра – {timeLocale}", + "Set time for tomorrow" : "Установить время на завтра", + "This weekend – {timeLocale}" : "Эти выходные – {timeLocale}", + "Set time for this weekend" : "Установить время на эти выходные", + "Next week – {timeLocale}" : "Следующая неделя – {timeLocale}", + "Set time for next week" : "Установить время на следующую неделю", + "Message link copied to clipboard" : "Ссылка на сообщение скопирована в буфер обмена", + "Conversation link copied to clipboard" : "Ссылка на обсуждение скопирована в буфер обмена", + "The link could not be copied" : "Не удалось скопировать ссылку", + "Error while parsing a PROPFIND error" : "Ошибка при анализе ошибки PROPFIND", + "Sending signaling message has failed" : "Не удалось отправить сигнальное сообщение.", + "Lost connection to signaling server. Trying to reconnect." : "Потеряно соединение с сигнальным сервером. Попытка переподключения.", + "Lost connection to signaling server." : "Потеряно соединение с сигнальным сервером.", + "Connecting is taking longer than expected …" : "Подключение занимает больше времени чем ожидалось …", + "Failed to connect. Retrying …" : "Не удалось подключиться. Повторная попытка …", + "Failed to connect. The signaling server may be set up incorrectly" : "Не удалось подключиться. Сигнальный сервер может быть неверно настроен", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Настроенный сигнальный сервер необходимо обновить, чтобы он был совместим с этой версией Talk. Пожалуйста, свяжитесь с вашей технической поддержкой.", + "Please restart the app." : "Пожалуйста, перезапустите приложение.", + "Please reload the page." : "Обновите страницу.", + "Please try to restart the app." : "Пожалуйста, попробуйте перезапустить приложение.", + "Please try to reload the page." : "Пожалуйста, попробуйте перезагрузить страницу.", + "Do not disturb" : "Не беспокоить", + "Away" : "Отсутствует", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Выступающий {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Похоже, что вы разговариваете с выключенным звуком, пожалуйста, включите звук, чтобы другие смогли услышать вас", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не удалось установить соединение хотя бы с одним участником. Сервер TURN может быть необходим для вашего сценария. Пожалуйста, попросите вашего администратора настроить его, следуя {linkstart} этой документации {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Это занимает больше времени, чем ожидалось. Проверьте, установлены ли медиаразрешения браузера? Если да, пожалуйста, перезапустите браузер, так как аудио и видео не работают", + "Access to microphone & camera is only possible with HTTPS" : "Доступ к микрофону и камере возможен только по HTTPS", + "Please move your setup to HTTPS" : "Пожалуйста, используйте HTTPS", + "Access to microphone & camera was denied" : "Доступ к микрофону и камере был запрещён", + "WebRTC is not supported in your browser" : "Технология WebRTC не поддерживается вашим браузером", + "Please use a different browser like Firefox or Chrome" : "Воспользуйтесь другим браузером, например Firefox или Chrome", + "Error while accessing microphone & camera" : "Ошибка при доступе к микрофону и камере", + "%s Talk on your mobile devices" : "%s Talk для мобильных устройств", + "Join conversations at any time, anywhere, on any device." : "Присоединяйтесь к обсуждениям в любое время, в любом месте, с любого устройства.", + "Android app" : "Android приложение", + "iOS app" : "iOS приложение", + "__language_name__" : "Русский", + "Webhook Demo" : "Webhook демо", + "Call summary (%s)" : "Резюме вызова (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Бот для резюме вызова публикует обзорное сообщение сразу после вызова с перечислением всех участников и описанием задач", + "Tasks" : "Задачи", + "Notes" : "Заметки", + "Reports" : "Отчёты", + "Decisions" : "Итоги", + "Agenda" : "Агенда", + "Call summary" : "Резюме вызова", + "Call summary - {title}" : "Резюме вызова - {title}", + "Talk conversation for event" : "Обсуждение события в Talk", + "Client Push is installed, this improves the performance of desktop clients." : "«Client Push» установлен, это улучшает производительность настольных ПК-клиентов.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "«{notify_push}» не установлен, это может привести к проблемам с производительностью при использовании настольных ПК-клиентов.", + "Next meeting" : "Следующая встреча", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Запланируйте встречу из своего календаря. Обсуждение должно быть установлено как местоположение, чтобы отобразиться здесь", + "Join conversations from remote Nextcloud servers" : "Присоединитесь к беседам на удалённых серверах Nextcloud", + "Your default media state has been saved" : "Параметры медиа по умолчанию сохранены", + "Set reminder for later today" : "Установить напоминание позднее сегодня", + "Set reminder for tomorrow" : "Установить напоминание на завтра", + "Set reminder for this weekend" : "Установить напоминание на эти выходные", + "Set reminder for next week" : "Установить напоминание на следующую неделю", + "Generate summary" : "Сгенерировать резюме", + "Open poll • You voted already" : "Открытый опрос • Вы уже проголосовали", + "Open poll • Click to vote" : "Открытый опрос • Нажмите, чтобы проголосовать", + "Poll • Ended" : "Опрос • Завершён", + "Talk recording from {time} ({conversation})" : "Голосовое сообщение записано в {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Результаты опроса • %n голос","Результаты опроса • %n голоса","Результаты опроса • %n голосов","Результаты опроса • %n голосов"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Открытый опрос • %n голос","Открытый опрос • %n голоса","Открытый опрос • %n голосов","Открытый опрос • %n голосов"], + "Submit vote" : "Проголосовать", + "Your privacy setting has been saved" : "Параметры конфиденциальности сохранены", + "Your personal setting has been saved" : "Персональные параметры сохранены", + "Failed to save sounds setting" : "Не удалось сохранить настройки звуков", + "Sounds setting saved" : "Параметры звука сохранены", + "Always shown if recording consent is required" : "Всегда отображается, если требуется согласие на запись вызова", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk был обновлен, вы не можете начать или присоединиться к вызову.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Вы подключены к обсуждению в другом окне или устройстве. Данная возможность не поддерживается Nextcloud Talk в настоящее время, поэтому данная сессия будет закрыта.", + "Nextcloud Talk was updated." : "Nextcloud Talk был обновлен.", + "Nextcloud is in maintenance mode." : "Сервер находится в режиме обслуживания.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Федерация была обновлена.", + "Enable live translation" : "Включить онлайн-перевод", + "I picked list style" : "Я выбираю в стиле списка", + "Hey! Are you using Talk in list style or with message bubbles?" : "Привет! Ты используешь чат в Конференциях в стиле списка или пузырей?" +},"pluralForm" :"nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/sc.js b/l10n/sc.js new file mode 100644 index 0000000..ea2dcfc --- /dev/null +++ b/l10n/sc.js @@ -0,0 +1,1044 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "una resonada", + "(Duration %s)" : "(Tempus %s)", + "You attended a call with {user1}" : "As partitzipadu a una mutida cun {user1}", + "_%n guest_::_%n guests_" : ["%npersone invitada","%npersones invitadas"], + "You attended a call with {user1} and {user2}" : "As partitzipadu a una mutida cun {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "As partitzipadu a una mutida cun {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "As partitzipadu a una mutida cun {user1}, {user2}{user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "As partitzipadu a una mutida cun {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n other","%n àtere"], + "{actor} invited you to {call}" : "{actor} t'at cumbidadu a {call}", + "You were invited to a conversation or had a call" : "T'ant cumbidadu a una resonada o as tentu una mutida", + "Other activities" : "Àteras atividades", + "Talk" : "Faedda", + "Guest" : "Persone invitada", + "## New in Talk %s" : "## Nou in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "Immoe podes impreare Microsoft Edge e Safari pro partetzipare in mutidas àudio e vìdeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Is resonadas fache a pare immoe sunt sighidas e non podent èssere furriadas prus in resonadas de grupu pro errore. Puru cando una persone lassat sa resonada, custa no si cantzellat prus de manera automàtica. Sa resonada si cantzellat dae su serbidore isceti chi is duas persones chi partetzipant dda lassant.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Immoe podes imbiare notìficas a is partetzipantes iscriende \"@totus\" in sa tzarrada.", + "- With the \"arrow-up\" key you can repost your last message" : "- Cun su tastu \"fertza-in-susu\" podes torrare a publicare s'ùrtimu messàgiu tuo.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Immoe Talk podet tènnere cumandos, imbia \"agiudu\" comente messàgiu de sa tzarrada pro bìdere chi chie amministrat nd'at cunfiguradu calecunu", + "- With projects you can create quick links between conversations, files and other items" : "- Cun is progetos podes creare ligòngios lestros intre resonadas, archìvios e àteros elementos", + "- You can now mention guests in the chat" : "- Immoe podes mentovare zente istràngia in sa tzarrada", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Immoe is resonadas podent tènnere un'intrada. Custu at a permìtere a chie moderat de si collegare in antis a sa tzarrada po preparare s'atòbiu, in su interis chi is utentes e sa zente istràngia depent isetare", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Immoe podes respòndere deretu a is messàgios donende a is utentes prus cuntestu subra de su messàgiu tuo", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Sa chirca de resonadas e partitzipantes immoe at a filtrare cussas chi nche sunt giai, aici at a èssere prus fàtzile agatare resonadas pretzedentes", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Immoe podes agiùnghere grupos de utentes abituales a is resonadas cando s'aplicatzione de tzìrculos est installada", + "- Check out the new grid and call view" : "Controlla sa grìglia noa e sa vista de is mutidas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Immoe podes carrigare e trisinare archìvios deretu dae su dispositivu a sa tzarrada", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Immoe is archìvios cumpartzidos s'aberrent deretu in sa vista de sa tzarrada cun is aplicatziones ammustradoras", + "- You can now search for chats and messages in the unified search in the top bar" : "Immoe podes chircare tzarradas e messàgios in sa traessa generale de chirca de subra", + "- Spice up your messages with emojis from the emoji picker" : "- Alluta is messàgios tuos cun is carigheddas dae sa regorta", + "- You can now change your camera and microphone while being in a call" : "- Immoe podes cambiare sa càmera e su micròfono in s'interis chi ses in una mutida", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dona cuntestu a is resonadas cun una descritzione e lassa•dda visìbile gasi is utentes chi ant fatu s'atzessu dda podent agatare e intrare pro contu issoro", + "- See a read status and send failed messages again" : "- Càstia is informatziones de letura e torra a mandare is messàgios faddidos", + "- Raise your hand in a call with the R key" : "- Àrtzia sa manu in una mutida cun su tastu R", + "- Join the same conversation and call from multiple devices" : "- Intra in sa pròpria resonada e tzèrria cun prus dispositivos", + "- Send voice messages, share your location or contact details" : "- Imbia messàgios de boghe, cumpartzi sa positzione tua o is detàllios de cuntatu", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Agiunghe grupos a una resonada e is membros noos ant a èssere agiuntos in automàticu comente partetzipantes", + "Talk updates ✅" : "Agiornamentos de Talk ✅", + "{actor} created the conversation" : "{actor} at creadu sa resonada", + "You created the conversation" : "Tue as creadu sa resonada", + "An administrator created the conversation" : "S'amministratzione at creadu sa resonada", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} at cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tue as cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "S'amministratzione at cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} at cunfiguradu sa descritzione", + "You set the description" : "As cunfiguradu sa descritzione", + "An administrator set the description" : "S'amministratzione at cunfiguradu sa descritzione", + "{actor} removed the description" : "{actor} nch'at bogadu sa descritzione", + "You removed the description" : "Tue nch'as bogadu sa descritzione", + "An administrator removed the description" : "S'amministratzione nch'at bogadu sa descritzione", + "You started a call" : "Tue as abertu una mutida", + "{actor} started a call" : "{actor} at abertu una mutida", + "{actor} joined the call" : "{actor} at fatu s'atzessu in sa mutida", + "You joined the call" : "As fatu s'atzessu in sa mutida", + "{actor} left the call" : "{actor} at lassadu sa mutida", + "You left the call" : "Tue as lassadu sa mutida", + "{actor} unlocked the conversation" : "{actor} at isblocadu sa resonada", + "You unlocked the conversation" : "Tue as isblocadu sa resonada", + "An administrator unlocked the conversation" : "S'amministratzione at isblocadu sa resonada", + "{actor} locked the conversation" : "{actor} at blocadu sa resonada", + "You locked the conversation" : "Tue as blocadu sa resonada", + "An administrator locked the conversation" : "S'amministratzione at blocadu sa resonada", + "{actor} limited the conversation to the current participants" : "{actor} at limitadu sa resonada a is partetzipantes atuales", + "You limited the conversation to the current participants" : "Tue as limitadu sa resonada a is partetzipantes atuales", + "An administrator limited the conversation to the current participants" : "S'amministratzione at limitadu sa resonada a is partetzipantes atuales", + "{actor} opened the conversation to registered users" : "{actor} at abertu sa resonada a s'utèntzia registrada", + "You opened the conversation to registered users" : "Tue as abertu sa resonada a s'utèntzia registrada", + "An administrator opened the conversation to registered users" : "S'amministratzione at abertu sa resonada a s'utèntzia registrada", + "The conversation is now open to everyone" : "Immoe sa resonada est aberta a totus", + "{actor} opened the conversation to everyone" : "{actor} at abertu sa resonada a totus", + "You opened the conversation to everyone" : "Tue as abertu sa resonada a totus", + "{actor} restricted the conversation to moderators" : "{actor} at istrintu sa resonada a chie moderat", + "You restricted the conversation to moderators" : " Tue as istrintu sa resonada a chie moderat", + "{actor} allowed guests" : "{actor} at ammìtidu s'utèntzia istràngia", + "You allowed guests" : "Tue as ammìtidu s'utèntzia istràngia", + "An administrator allowed guests" : "S'amministratzione at ammìtidu s'utèntzia istràngia", + "{actor} disallowed guests" : "{actor} at refudadu s'utèntzia istràngia", + "You disallowed guests" : "Tue as refudadu s'utèntzia istràngia", + "An administrator disallowed guests" : "S'amministratzione at refudadu s'utèntzia istràngia", + "{actor} set a password" : "{actor} at cunfiguradu una crae", + "You set a password" : "As cunfiguradu una crae", + "An administrator set a password" : "S'amministratzione at cunfiguradu una crae", + "{actor} removed the password" : "{actor} nch'at bogadu sa crae", + "You removed the password" : "Nch'as bogadu sa crae", + "An administrator removed the password" : "S'amministratzione nch'at bogadu sa crae", + "{actor} added {user}" : "{actor} at agiuntu a {user}", + "You joined the conversation" : "As fatu s'atzessu in sa resonada", + "{actor} joined the conversation" : "{actor} at fatu s'atzessu in sa resonada", + "You added {user}" : "As agiuntu a {user}", + "{actor} added you" : "{actor} t'at agiuntu", + "An administrator added you" : "S'amministratzione t'at agiuntu", + "An administrator added {user}" : "S'amministratzione at agiuntu {user}", + "You left the conversation" : "As lassadu sa resonada", + "{actor} left the conversation" : "{actor} at lassadu sa resonada", + "{actor} removed {user}" : "{actor} nch'at bogadu a {user}", + "You removed {user}" : "Nch'as bogadu a {user}", + "{actor} removed you" : "{actor} ti nch'at bogadu", + "An administrator removed you" : "S'amministratzione ti nch'at bogadu", + "An administrator removed {user}" : "S'amministrazione nch'at bogadu {user}", + "{actor} added group {group}" : "{actor} at agiuntu su grupu {group}", + "You added group {group}" : "As agiuntu su grupu {group}", + "An administrator added group {group}" : "S'amministratzione at agiuntu su grupu {group}", + "{actor} removed group {group}" : "{actor} nch'at bogadu su grupu {group}", + "You removed group {group}" : "Nch'as bogadu su grupu {group}", + "An administrator removed group {group}" : "S'amministratzione nch'at bogadu su grupu {group}", + "{actor} promoted {user} to moderator" : "{actor} at autorizadu {user} a moderare", + "You promoted {user} to moderator" : "As autorizadu a {user} a moderare", + "{actor} promoted you to moderator" : "{actor} t'at autorizadu a moderare", + "An administrator promoted you to moderator" : "S'amministratzione t'at autorizadu a moderare", + "An administrator promoted {user} to moderator" : "S'amministratzione at autorizadu {user} a moderare", + "{actor} demoted {user} from moderator" : "{actor} nd'at leadu su permissu de moderare a {user} ", + "You demoted {user} from moderator" : "Nd'as leadu su permissu de moderare a {user}", + "{actor} demoted you from moderator" : "{actor} ti nd'at leadu su permissu de moderare", + "An administrator demoted you from moderator" : "S'amministratzione ti nd'at leadu su permissu de moderare", + "An administrator demoted {user} from moderator" : "S'amministratzione nd'at leadu su permissu de moderare a {user}", + "{actor} shared a file which is no longer available" : "{actor} at cumpartzidu un'archìviu chi no est prus disponìbile", + "You shared a file which is no longer available" : "As cumpartzidu un'archìviu chi no est prus disponìbile", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} at cunfiguradu Matterbridge pro sincronizare custa resonada cun àteras tzarradas", + "You set up Matterbridge to synchronize this conversation with other chats" : "As cunfiguradu Matterbridge pro sincronizare custa resonada cun àteras tzarradas", + "{actor} updated the Matterbridge configuration" : "{actor} at agiornadu sa cunfiguratzione de Matterbridge", + "You updated the Matterbridge configuration" : "As agiornadu sa cunfiguratzione de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} nch'at bogadu sa cunfiguratzione de Matterbridge", + "You removed the Matterbridge configuration" : "Nch'as bogadu sa cunfiguratzione de Matterbridge", + "{actor} started Matterbridge" : "{actor} at abertu Matterbridge", + "You started Matterbridge" : "As abertu Matterbridge", + "{actor} stopped Matterbridge" : "{actor} at firmadu Matterbridge", + "You stopped Matterbridge" : "As firmadu Matterbridge", + "{actor} deleted a message" : "{actor} at cantzelladu unu messàgiu", + "You deleted a message" : "As cantzelladu unu messàgiu", + "{actor} cleared the history of the conversation" : "{actor} at limpiadu s'istòria de sa resonada", + "You cleared the history of the conversation" : "As limpiadu s'istòria de sa resonada", + "Message deleted by author" : "Messàgiu cantzelladu dae s'autore", + "Message deleted by {actor}" : "Messàgiu cantzelladu dae {actor}", + "Message deleted by you" : "Messàgiu cantzelladu dae tue", + "Administration" : "Amministratzione", + "System" : "Sistema", + "%s (guest)" : "%s (persone invitada)", + "Talk conversations" : "Resonadas de Talk", + "Talk to %s" : "Faedda cun %s", + "File not found" : "Archìviu no agatadu", + "File is not shared, or shared but not with the user" : "S'archìviu no est cumpartzidu, o est cumpartzidu ma no cun s'utente", + "No account available to delete." : "Perunu contu disponìbile de cantzellare.", + "No image file provided" : "Perunu archìviu de immàgine frunidu", + "File is too big" : "S'archìviu est tropu mannu", + "Invalid file provided" : "S'archìviu frunidu no est vàlidu", + "Invalid image" : "Immàgine non bàlida", + "Unknown filetype" : "Genia de archìviu disconnota", + "Talk mentions" : "Mentovos de Talk", + "Say hi to your friends and colleagues!" : "Saluda a sa gente!", + "No unread mentions" : "Perunu mentovu chena lèghere", + "Call in progress" : "Mutida in cursu", + "You were mentioned" : "Ses istadu mentovadu", + "Write to conversation" : "Iscrie in sa resonada", + "Writes event information into a conversation of your choice" : "Iscriet is informatziones de s'eventu in una resonada de sèberu tuo", + "Conversation invitation" : "Cumbidu a sa resonada", + "Description" : "Descritzione", + "You can also dial-in via phone with the following details" : "Ti podes connètere puru cun su telèfono cun is detàllios in fatu", + "Dial-in information" : "Informatziones de connessione", + "Meeting ID" : "ID de s'atòbiu", + "Your PIN" : "Su PIN tuo", + "Meeting" : "Atòbiu", + "Password request: %s" : "Rechesta de crae: %s", + "Private conversation" : "Cunversatzione privada", + "Deleted user (%s)" : "Utente cantzelladu (%s)", + "Dismiss notification" : "Iscarta notìfica", + "Accept" : "Atzeta", + "Decline" : "Refuda", + "New message" : "Messàgiu nou", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Utente cantzelladu in {call}", + "{guest} (guest) in {call}" : "{guest} (utèntzia istràngia) in {call}", + "Guest in {call}" : "Utèntzia istràngia in {call}", + "{user} sent you a private message" : "{user} t'at imbiadu unu messàgiu privadu", + "{user} sent a message in conversation {call}" : "{user} at imbiadu unu messàgiu in sa resonada {call}", + "A deleted user sent a message in conversation {call}" : "Un'utèntzia cantzellada at imbiadu unu messàgiu in sa resonada {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (utèntzia istràngia) at imbiadu unu messàgiu in sa resonada {call}", + "A guest sent a message in conversation {call}" : "Un'utèntzia istràngia at imbiadu unu messàgiu in sa resonada {call}", + "{user} replied to your private message" : "{user} at respostu a su messàgiu privadu tuo", + "{user} replied to your message in conversation {call}" : "{user} at respostu a su messàgiu tuo in sa resonada {call}", + "A deleted user replied to your message in conversation {call}" : "Un'utèntzia cantzellada at respostu a su messàgiu tuo in sa resonada {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (utèntzia istràngia) at respostu a su messàgiu tuo in sa resonada {call}", + "A guest replied to your message in conversation {call}" : "Un'utèntzia istràngia at respostu a su messàgiu tuo in sa resonada {call}", + "{user} mentioned you in a private conversation" : "{user} t'at mentovadu in una resonada privada", + "{user} mentioned you in conversation {call}" : "{user} t'at mentovadu in sa resonada {call}", + "A deleted user mentioned you in conversation {call}" : "Un'utèntzia cantzellada t'at mentovadu in sa resonada {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (utèntzia istràngia) t'at mentovadu in sa resonada {call}", + "A guest mentioned you in conversation {call}" : "Un'utèntzia istràngia t'at mentovadu in sa resonada {call}", + "View chat" : "Visualiza sa tzarrada", + "{user} invited you to a group conversation: {call}" : "{user} t'at invitadu a una resonada de grupu: {call}", + "Join call" : "Intra in sa mutida", + "Answer call" : "Responde a sa mutida", + "{user} would like to talk with you" : "{user} diat bòlere faeddare cun tue", + "Call back" : "Torra a mutire", + "You missed a call from {user}" : "As pèrdidu una mutida dae {user}", + "A group call has started in {call}" : "Est incarrerada una mutida de grupu in {call}", + "You missed a group call in {call}" : "As pèrdidu una mutida de grupu in {call}", + "{email} is requesting the password to access {file}" : "{email} est pedende sa crae pro atzèdere {file}", + "{email} tried to request the password to access {file}" : "{email} at proadu a pedire sa crae pro atzèdere {file}", + "Someone is requesting the password to access {file}" : "Calicunu est pedende sa crae pro atzèdere {file}", + "Someone tried to request the password to access {file}" : "Calicunu at proadu a pedire sa crae pro atzèdere {file}", + "Open settings" : "Aberi sa cunfiguratzione", + "The hosted signaling server is now configured and will be used." : "Su serbidore de signalatzione retzidu immoe est cunfiguradu e podet èssere impreadu.", + "The hosted signaling server was removed and will not be used anymore." : "Si nch'at bogadu su serbidore de signalatzione retzidu e non s'at a podère impreare prus.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Su contu de su serbidore de signalatzione retzidu at cambiadu s'istadu dae \"{oldstatus}\" a \"{newstatus}\".", + "error" : "errore", + "Contact via Talk" : "Cuntatu pro mèdiu de Talk", + "Default" : "Predefinidu", + "Presentation" : "Presentatzione", + "Conversations" : "Cunversatziones", + "{user}" : "{user}", + "Messages" : "Messàgios", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messàgios in àteras resonadas", + "Avatar image is not square" : "S'immàgine de s'avatar no est cuadrada", + "Other" : "Àteru", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No s'at pòdidu pedire sa versione de proa, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "B'at unu problema cun s'autenticatzione de custa istàntzia. Fortzis no si podet cuntatare dae foras pro verificare s'URL.", + "Something unexpected happened." : "Est sutzèdida calincuna cosa no prevèdida.", + "The URL is invalid." : "S'URL no est bàlidu.", + "An HTTPS URL is required." : "Est rechertu unu HTTPS URL.", + "The email address is invalid." : "S'indiritzu de posta eletrònica no est bàlidu.", + "The language is invalid." : "Su limbàgiu no est bàlidu.", + "The country is invalid." : "S'Istadu no est bàlidu.", + "There is a problem with the request of the trial. Please check your logs for further information." : "B'at unu problema cun sa rechesta de sa versione de proa. Càstia is registros tuos pro àteras informatziones.", + "Too many requests are send from your servers address. Please try again later." : "B'at tropu rechestas imbiadas dae s'indiritzu de su serbidore tuo. Torra a proare luego.", + "There is already a trial registered for this Nextcloud instance." : "B'at giai una versione de proa registrada pro custa istàntzia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Est sutzèdida calincuna cosa no prevèdida. Torra a proare luego.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No s'at pòdidu pedire sa versione de proa, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "Trial requested but failed to get account information. Please check back later." : "Versione de proa rechèdida, ma no si podet atzèdere a is informatziones de su contu. Torra a castiare luego.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "B'at unu problema cun s'autenticatzione de custa rechesta. Fortzis no si podet cuntatare dae foras pro verificare s'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No s'at pòdidu recuperare is informatziones de su contu, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "There is a problem with fetching the account information. Please check your logs for further information." : "B'at unu problema cun su recùperu de is informatziones de su contu. Càstia is registros tuos pro àteras informatziones.", + "There is no such account registered." : "Perunu contu de custa genia registradu.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No s'at pòdidu recuperare is informatziones de su contu, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "Deleting the hosted signaling server account failed. Please check back later." : "Cantzellende su contu faddidu de su serbidore de signalatzione retzidu. Torra a castiare luego.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No s'at pòdidu cantzellare su contu, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "There is a problem with deleting the account. Please check your logs for further information." : "B'at unu problema pro cantzellare su contu. Càstia is registros tuos pro àtera informatziones.", + "Too many requests are sent from your servers address. Please try again later." : "B'at tropu rechestas imbiadas dae s'indiritzu de su serbidore tuo. Torra a proare luego.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No s'at pòdidu cantzellare su contu, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Àrabos Unidos", + "Afghanistan" : "Afganistàn", + "Antigua and Barbuda" : "Antìgua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armènia", + "Angola" : "Angola", + "Antarctica" : "Antàrtide", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americanas", + "Austria" : "Àustria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Ìsulas Åland ", + "Azerbaijan" : "Azerbaijàn", + "Bosnia and Herzegovina" : "Bòsnia e Erzegòvina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bèlgiu", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baharain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei ", + "Bolivia, Plurinational State of" : "Bolìvia", + "Bonaire, Sint Eustatius and Saba" : "Paisos Bassos Caraìbicos", + "Brazil" : "Brasile", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Ìsula Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorùssia", + "Belize" : "Belize", + "Canada" : "Cànada", + "Cocos (Keeling) Islands" : "Ìsulas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Repùblica Democràtica de su Congo", + "Central African Republic" : "Rpùblica Tzentrafricana", + "Congo" : "Repùblica de su Congo", + "Switzerland" : "Isvìtzera", + "Côte d'Ivoire" : "Costa Avòriu", + "Cook Islands" : "Ìsulas Cook", + "Chile" : "Cile", + "Cameroon" : "Camerun", + "China" : "Cina", + "Colombia" : "Colòmbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabu Birde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Ìsula de Paschighedda", + "Cyprus" : "Cipru", + "Czechia" : "Repùbblica Ceca", + "Germany" : "Germània", + "Djibouti" : "Gibuti", + "Denmark" : "Danimarca", + "Dominica" : "Dominica", + "Dominican Republic" : "Repùblica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estònia", + "Egypt" : "Egitu", + "Western Sahara" : "Sahara Otzidentale", + "Eritrea" : "Eritrea", + "Spain" : "Ispagna", + "Ethiopia" : "Etiòpia", + "Finland" : "Finlàndia", + "Fiji" : "Figi", + "Falkland Islands (Malvinas)" : "Ìsulas Falkand (Malvinas)", + "Micronesia, Federated States of" : "Micronèsia", + "Faroe Islands" : "Ìsulas Faroe", + "France" : "Frantza", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regnu Unidu", + "Grenada" : "Grenada", + "Georgia" : "Geòrgia", + "French Guiana" : "Guyana Frantzesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibilterra", + "Greenland" : "Groenlàndia", + "Gambia" : "Gàmbia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupa", + "Equatorial Guinea" : "Guinea Ecuatoriale", + "Greece" : "Grècia", + "South Georgia and the South Sandwich Islands" : "Geòrgia de su Sud e Ìsulas Sandwich Meridionales", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Ìsulas Heard e McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croàtzia", + "Haiti" : "Haiti", + "Hungary" : "Ungheria", + "Indonesia" : "Indonèsia", + "Ireland" : "Irlanda", + "Israel" : "Israele", + "Isle of Man" : "Ìsula de Man", + "India" : "Ìndia", + "British Indian Ocean Territory" : "Territòriu Britànnicu de s'Oceanu Indianu", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Repùblica Islàmica de Iran", + "Iceland" : "Islanda", + "Italy" : "Itàlia", + "Jersey" : "Jersey", + "Jamaica" : "Giamàica", + "Jordan" : "Giordània", + "Japan" : "Giapone", + "Kenya" : "Kènya", + "Kyrgyzstan" : "Kirghizistan", + "Cambodia" : "Cambògia", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "San Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Corea de su Nord", + "Korea, Republic of" : "Corea de su Sud", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ìsulas Caiman", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Lìbanu", + "Saint Lucia" : "Santa Lughia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituània", + "Luxembourg" : "Lussemburgu", + "Latvia" : "Letònia", + "Libya" : "Lìbia", + "Morocco" : "Marocu", + "Monaco" : "Printzipadu de Mònaco", + "Moldova, Republic of" : "Moldàvia", + "Montenegro" : "Montenegru", + "Saint Martin (French part)" : "San Martin (parte Frantzesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Ìsulas Marshall", + "North Macedonia" : "Macedònia de su Nord", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongòlia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Ìsulas Mariannas Setentrionales", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurìtius", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "Mèssicu", + "Malaysia" : "Malèsia", + "Mozambique" : "Mozambicu", + "Namibia" : "Namìbia", + "New Caledonia" : "Caledònia noa", + "Niger" : "Niger", + "Norfolk Island" : "Ìsulas Norfolk", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaràgua", + "Netherlands" : "Paisos Bàscios", + "Norway" : "Norvègia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Noa Zelanda", + "Oman" : "Oman", + "Panama" : "Pànama", + "Peru" : "Perù", + "French Polynesia" : "Polinèsia Frantzesa", + "Papua New Guinea" : "Pàpua Guinea Noa", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistan", + "Poland" : "Polònia", + "Saint Pierre and Miquelon" : "San Pierre e Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portu Ricu", + "Palestine, State of" : "Istadu de Palestina", + "Portugal" : "Portogallu", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Sèrbia", + "Russian Federation" : "Rùssia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Aràbia Saudita", + "Solomon Islands" : "Ìsulas Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Isvètzia", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sant Elene", + "Slovenia" : "Slovènia", + "Svalbard and Jan Mayen" : "Svalbarg e Jan Mayen", + "Slovakia" : "Slovàchia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Santu Marinu", + "Senegal" : "Senegal", + "Somalia" : "Somàlia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan de su Sud", + "Sao Tome and Principe" : "Sao Tome e Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Marteen (parte Olandese)", + "Syrian Arab Republic" : "Sìria", + "Eswatini" : "Swaziland", + "Turks and Caicos Islands" : "Ìsulas Turks e Caicos", + "Chad" : "Ciad", + "French Southern Territories" : "Territòrios Frantzesos de su Sud", + "Togo" : "Togo", + "Thailand" : "Tailàndia", + "Tajikistan" : "Tagikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor de Est", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turchia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzània", + "Ukraine" : "Ucraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ìsulas perifèricas secundàrias de Istados Unidos", + "United States of America" : "Istados Unidos de Amèrica", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Tzitade de su Vaticanu", + "Saint Vincent and the Grenadines" : "Saint Vincent and Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Ìsulas Bìrghines de Regnu Unidu", + "Virgin Islands, U.S." : "Ìsulas Bìrghines de Istados Unidos", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudàfrica", + "Zambia" : "Zàmbia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federatzione", + "High-performance backend" : "Motore de prestatziones artas", + "Error: Cannot connect to server" : "Errore: non si podet istabilire connessione cun su serbidore", + "Error: Server did not respond with proper JSON" : "Errore: Su serbidore non at respostu cun su JSON curretu", + "Error: Server responded with: {error}" : "Errore: Su serbidore at respostu cun: {error}", + "Error: Unknown error occurred" : "Errore: B'at àpidu un'errore disconnotu", + "SIP configuration" : "Cunfiguratzione de SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Data non bàlida, su formadu de sa data depet èssere AAAA-MM-GG", + "Conversation not found" : "Resonada no agatada", + "Chat, video & audio-conferencing using WebRTC" : "Tzarradas, cunferèntzias vìdeo e àudio impreende WebRTC", + "Leave call" : "Lassa sa mutida", + "Navigating away from the page will leave the call in {conversation}" : "Bessire dae sa pàgina at a fàghere lassare sa mutida in {conversation}", + "Stay in call" : "Abarra in sa mutida", + "Discuss this file" : "Chistiona de custu archìviu", + "Share this file with others to discuss it" : "Cumpartzi custu archìviu cun àtere pro nde chistionare", + "Share this file" : "Cumpartzi custu archìviu", + "Join conversation" : "Intra in sa resonada", + "The password is wrong. Try again." : "Sa crae est isballiada. Torra a proare.", + "Password" : "Crae", + "Submit" : "Imbia", + "Error requesting the password." : "Errore pedende sa crae.", + "Request password" : "Pedi sa crae", + "This conversation has ended" : "Custa resonada est acabada.", + "Everyone" : "Chie chi siat", + "Users and moderators" : "Lista de is utentes e de chie moderat", + "Moderators only" : "Isceti chie moderat", + "Save changes" : "Sarva càmbios", + "Saving …" : "Sarvende ...", + "Saved!" : "Sarvadu!", + "Limit to groups" : "Lìmita a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cando a su mancu unu grupu est seletzionadu, isceti is persones de is grupos in sa lista podent pigare parte de sa resonada.", + "Guests can still join public conversations." : "Is persones invitadas podent ancora intrare in resonadas pùblicas. ", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Is utentes chi no podent prus impreare Talk ant a abarrare in sa lista comente partetzipantes in is resonadas pretzedentes e puru is messàgios issoro podent abarrare sarvados in sa tzarrada.", + "Limit using Talk" : "Lìmita s'impreu de Talk", + "Limit creating a public and group conversation" : "Lìmita sa creatzione de una resonada pùblica e de grupu.", + "Limit creating conversations" : "Lìmita sa creatzione de resonadas", + "Limit starting a call" : "Lìmita s'inghitzu de una mutida", + "Limit starting calls" : "Lìmita s'inghitzu de mutidas", + "When a call has started, everyone with access to the conversation can join the call." : "Cando una mutida est giai incarrerada, is chi tenent atzessu bi podent intrare.", + "Enabled" : "Ativadu", + "Disabled" : "Disabilitada", + "State" : "Istadu", + "Name" : "Nùmene", + "Beta" : "Beta", + "Permissions" : "Permissos", + "All messages" : "Totu is messàgios", + "@-mentions only" : "@-mentovos isceti", + "Off" : "Istudadu", + "General settings" : "Cunfiguratzione generale", + "Default notification settings" : "Cunfiguratzione de notìficas predefinidas", + "Default group notification" : "Notìfica de grupu predefinida", + "Default group notification for new groups" : "Notìfica de grupu predefinida pro grupos noos", + "Integration into other apps" : "Integratzione in àteras aplicatziones", + "Allow conversations on files" : "Permite resonadas in is archìvios", + "Allow conversations on public shares for files" : "Permite resonadas in is cumpartziduras pùblicas pro is archìvios", + "Enable encryption" : "Ativa tzifradura", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Incarchende su butone subra, s'informatzione in su mòdulu benit imbiada a is serbidores de Struktur AG. Podes agatare àteras informatzione in {linkstart}spreed.eu{linkend}.", + "Pending" : "In suspesu", + "Error" : "Errore", + "Blocked" : "Blocadu", + "Active" : "Ativu", + "Expired" : "Iscadidu", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "Non si podet pedire sa proa. Torra a proare a coa.", + "The account could not be deleted. Please try again later." : "Non si podet cantzellare su contu. Torra a proare a coa.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Su partner nostru Struktur AG frunit unu servìtziu in ue si podet pedire unu serbidore de signalatzione retzidu. Bastat a compilare su mòdulu a suta e Nextcloud dd'at a pedire pro tue. Una borta chi su serbidore est cunfiguradu, is credentziales s'ant a compilare de manera automàtica. Custu at a subriscrìere sa cunfiguratzione esistente de su serbidore de signalatzione.", + "URL of this Nextcloud instance" : "URL de custa istàntzia Nextcloud", + "Full name of the user requesting the trial" : "Nùmene cumpridu de s'utente chi pedit sa proa", + "Email of the user" : "Email de s'utente", + "Language" : "Limba", + "Country" : "Istadu", + "Request signaling server trial" : "Pedi sa proa de su serbidore de signalatzione", + "You can see the current status of your hosted signaling server in the following table." : "Podes bìdere s'istatus atuale de su serbidore de signalatzione retzidu in sa tabella in fatu.", + "Status" : "Istadu", + "Created at" : "Creadu su", + "Expires at" : "Iscadit su", + "Limits" : "Lìmites", + "Yes" : "Si", + "No" : "No", + "Delete the signaling server account" : "Cantzella su contu de su serbidore de signalatzione", + "_%n user_::_%n users_" : ["%nutente","%n utentes"], + "Installed version: {version}" : "Versione installada: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Su binàriu de Matterbridge non est istadu agatadu o non podet èssere esecutadu.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Podes agatare su percursu de su binàriu de Matterbridge a manu puru, cun sa cunfiguratzione. Controlla sa {linkstart}Documentatzione de s'integratzione de Matterbridge{linkend} pro àteras informatziones.", + "Downloading …" : "Iscarrighende ...", + "Install Talk Matterbridge" : "Installa Talk Matterbridge", + "Failed to execute Matterbridge binary." : "No at fatu a esecutare su binàriu de Matterbridge.", + "Matterbridge integration" : "Integratzione cun Matterbridge", + "Enable Matterbridge integration" : "Ativa s'integratzione cun Matterbridge", + "Status: Checking connection" : "Istatus: Controllende sa connessione", + "OK: Running version: {version}" : "OK: Versione currente: {version}", + "Validate SSL certificate" : "Cunvàlida su tzertificadu SSL", + "Delete this server" : "Cantzella custu serbidore", + "Test this server" : "Proa custu serbidore", + "Shared secret" : "Segretu cumpartzidu", + "Restrict SIP configuration" : "Lìmita sa cunfiguratzione SIP", + "Enable SIP configuration" : "Ativa sa cunfiguratzione SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Isceti is utentes de custus grupos podent ativare SIP in is resonadas chi moderant.", + "Phone number (Country)" : "Nùmero de telèfonu (Istadu)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Custas informatziones s'imbiant cun s'email e si mustrant a in s'istanca laterale a totus is persones chi partetzipant.", + "High-performance backend URL" : "URL de su motore de prestatziones artas", + "STUN server URL" : "URL de su serbidore STUN", + "STUN servers" : "Serbidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Unu serbidore STUN s'impreat pro determinare s'indiritzu IP pùblicu de is partetzipantes a secus de unu router.", + "{schema} scheme must be used with a domain" : "S'ischema {schema} si depet impreare cun unu domìniu", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} isceti", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidados ICE bàlidos torrados dae su serbidore TURN", + "Error: No working ICE candidates returned by the TURN server" : "Errore: Perunu candidadu ICE funtzionante torradu dae su serbidore TURN", + "Testing whether the TURN server returns ICE candidates" : "Proende chi su serbidore TURN torrat candidados ICE", + "TURN server schemes" : "Ischemas de su serbidore TURN", + "TURN server URL" : "URL de su serbidore TURN", + "TURN server secret" : "Segretu de su serbidore TURN", + "TURN server protocols" : "Protocollos de su serbidore TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Unu serbidore TURN s'impreat pro imbiare su tràficu dae is partezipantes a secus de unu firewall. Chi is partetzipantes individuales non si podent connètere cun is àteras persones, est probàbile chi serbat unu serbidore TURN. Controlla {linkstart}custa documentatzione{linkend} pro is istrutziones de cunfiguratzione.", + "TURN servers" : "TURN serbidores", + "OK" : "AB", + "Confirm" : "Cunfirma", + "Reset" : "Ripristina", + "Cancel" : "Annulla", + "Back" : "In segus", + "Add participant \"{user}\"" : "Agiunghe partetzipante \"{user}\"", + "Loading …" : "Carrigamentu …", + "From" : "Dae", + "To" : "A", + "Calendar" : "Calendàriu", + "Attendees" : "Partetzipantes", + "Save" : "Sarva", + "Search participants" : "Chirca partetzipantes", + "No results" : "Perunu resurtadu", + "Raise hand" : "Àrtzia sa manu ", + "Raise hand (R)" : "Àrtzia sa manu (R)", + "Lower hand" : "Bàscia sa manu ", + "Lower hand (R)" : "Bàscia sa manu (R)", + "Speaker view" : "Bista de sa persone chi faeddat", + "Grid view" : "Bisione grìllia", + "This conversation is read-only" : "Custa resonada est de letura sola", + "Reload" : "Torra a carrigare", + "{nickName} raised their hand." : "{nickName} ant artziadu sa manu", + "A participant raised their hand." : "Una persona at artziadu sa manu", + "Collapse stripe" : "Istringhe sa tira", + "Expand stripe" : "Ammània sa tira", + "Previous page of videos" : "Pàgina de vìdeos pretzedente ", + "Next page of videos" : "Pàgina de vìdeos imbeniente", + "Connecting …" : "Connetende ...", + "Waiting for others to join the call …" : "Abetende chi is àteras persones intrent in sa mutida", + "You can invite others in the participant tab of the sidebar" : "Podes invitare àteras persones in s'ischeda dei partetzipantes de s'istanca laterale", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podes invitare àteras persones in s'ischeda de is partetzipantes de s'istanca laterale o cumpartzende custu ligòngiu!", + "Share this link to invite others!" : "Cumpartzi custu link pro invitare àteras persones!", + "Copy link" : "Còpia ligòngiu", + "You are not allowed to enable audio" : "Non tenes su permissu de ativare àudio", + "Mute audio" : "Istuda s'àudiu", + "Mute audio (M)" : "Istuda s'àudiu (M)", + "Unmute audio" : "Allue s'àudiu ", + "Unmute audio (M)" : "Allue s'àudiu (M)", + "None" : "Perunu", + "Access to camera was denied" : "S'atzessu a sa càmera est istadu negadu", + "Error while accessing camera" : "Errore in s'atzessu a sa càmera", + "You have been muted by a moderator" : "Una persona chi moderat ti nd'at tiradu s'àudiu", + "You are not allowed to enable video" : "Non tenes su permissu pro ativare vìdeo", + "Disable video" : "Disativa vìdeu", + "Disable video (V)" : "Disativa vìdeu (V)", + "Enable video" : "Ativa vìdeu", + "Enable video (V)" : "Ativa vìdeu (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativa vìdeu (V) - Sa connessione s'at a blocare pro pagu tempus cando s'ativat su vìdeu pro sa prima borta", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ativa vìdeu - Sa connessione s'at a blocare pro pagu tempus cando s'ativat su vìdeu pro sa prima borta", + "You" : "Tue", + "Mute" : "Tira s'àudiu", + "Show screen" : "Mustra s'ischermu", + "Stop following" : "No sigas prus", + "Collapse" : "Cuntrae", + "You need to be logged in to upload files" : "Depes fàghere s'atzessu pro carrigare is archìvios", + "Drop your files to upload" : "Iscapa is archìvios pro ddus carrigare", + "Conversation messages" : "Messàgios de sa resonada", + "Scroll to bottom" : "Iscurre a bàsciu", + "Post message" : "Pùblica messàgiu", + "Favorite" : "Preferidu", + "Date:" : "Data:", + "Hide details" : "Cua detàllios", + "Show details" : "Mustra detàllios", + "Error while updating conversation description" : "Errore in s'agiornamentu de sa descritzione de sa resonada", + "Edit conversation description" : "Modìfica sa descritzione de sa resonada", + "Enter a description for this conversation" : "Inserta una descritzione pro custa resonada", + "Disable" : "Disativa", + "Enable" : "Ativa", + "Choose" : "Sèbera", + "The file must be a PNG or JPG" : "S'archìviu depet èssere unu PNG o JPG", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Ogni borta chi is permissos sunt modificados in custa setzione, is permissos personalizados assignados in pretzedèntzia a partetzipantes individuales ant a èssere pèrdidos.", + "Restricted" : "Limitadu", + "Conversation settings" : "Cunfiguratzione de sa resonada", + "Personal" : "Personale", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zona de perìgulu", + "Leave conversation" : "Lassa sa resonada", + "Delete conversation" : "Cantzella sa resonada", + "Do you really want to delete \"{displayName}\"?" : "A beru boles cantzellare \"{displayName}\"?", + "Error while deleting conversation" : "Errore in sa cantzelladura de sa resonada", + "Delete all chat messages" : "Cantzella totu is messàgios de is tzarradas", + "Do you really want to delete all messages in \"{displayName}\"?" : "A beru boles cantzellare totu is messàgios in \"{displayName}\"?", + "Error while clearing chat history" : "Errore limpiende s'istòria de sa tzarrada", + "Be careful, these actions cannot be undone." : "Atentzione, custas atziones non si podent annullare", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Lassada una resonada, pro torrare a intrare in una resonada serrada, tocat de tènnere s'invitu. Si podet semper torrare a intrare in una resonada aberta.", + "Permanently delete this conversation." : "Cantzella in manera definitiva custa resonada.", + "Delete chat messages" : "Cantzella is messàgios de is tzarradas", + "Permanently delete all the messages in this conversation." : "Cantzella in manera definitiva totu is messàgios in custa resonada.", + "Password protection" : "Bardiadura de sa crae", + "Set a password" : "Cunfigura una crae", + "Change password" : "Càmbia crae", + "Enter new password" : "Inserta sa crae noa", + "Save password" : "Sarva sa crae", + "Resend invitations" : "Torra a imbiare is invitos", + "Error occurred when opening or limiting the conversation" : "B'at àpidu un'errore aberrende o limitende sa resonada", + "Start time has been updated" : "S'ora de cumintzu est istada agiornada", + "Error occurred while updating start time" : "B'at àpidu un'errore agiornende s'ora de cumintzu", + "Meeting start time" : "Ora de cumintzu de sa riunione", + "Start time (optional)" : "Ora de cumintzu (a sèberu)", + "Error occurred when locking the conversation" : "B'at àpidu un errore blochende sa resonada", + "Error occurred when unlocking the conversation" : "B'at àpidu un'errore isblochende sa resonada", + "Lock conversation" : "Bloca resonada", + "This will also terminate the ongoing call." : "Cust'atzione at a acabare sa mutida in cursu puru.", + "Edit" : "Modìfica ", + "More information" : "Àteras informatziones", + "Delete" : "Cantzella", + "Add new bridged channel to current conversation" : "Agiunghe àteros canales collegados a custa resonada", + "unknown state" : "istadu disconnotu", + "running" : "in esecutzione", + "not running, check Matterbridge log" : "non in esecutzione, controlla su registru de Matterbridge", + "not running" : "non in esecutzione", + "Bridge saved" : "Collegamentu sarvadu", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Podes collegare canales dae àteros sistemas de messàgios istantàneos cun Matterbridge.", + "More info on Matterbridge" : "Àteras informatziones subra de Matterbridge", + "Enable bridge" : "Ativa collegamentu", + "Show Matterbridge log" : "Mustra su registru de Matterbridge", + "Log content" : "Cuntenutu de is registros", + "Notifications" : "Notìficas", + "Important conversation" : "Tzarrada importante", + "SIP dial-in is now enabled" : "S'atzessu SIP immoe est ativu", + "SIP dial-in is now disabled" : "S'atzessu SIP immoe est disativu", + "Error occurred when enabling SIP dial-in" : "B'at àpidu un'errore ativende s'atzessu SIP", + "Error occurred when disabling SIP dial-in" : "B'at àpidu un'errore disativende s'atzessu SIP", + "Join" : "Intra", + "Error while creating the conversation" : "Errore creende sa resonada ", + "Create a new conversation" : "Crea una resonada noa", + "Create conversation" : "Crea resonada", + "Enter your name" : "Inserta•nche su nùmene tuo", + "Log in" : "Intra", + "Mark as read" : "Marca comente lèghidu", + "Mark as unread" : "Marca comente non lèghidu", + "Remove from favorites" : "Boga dae preferidos", + "Add to favorites" : "Agiunghe a preferidos", + "You need to promote a new moderator before you can leave the conversation." : "Depes promòvere un'àtera persona chi moderet antis de lassare sa resonada.", + "Conversation actions" : "Atziones de is resonadas", + "Home" : "Pàgina printzipale", + "Unread" : "De lèghere", + "Alphabetically" : "Òrdine alfabèticu", + "No matches found" : "Peruna currispondèntzia agatada", + "No conversations found" : "Peruna resonada agatada", + "An error occurred while performing the search" : "B'at àpidu un'errore in sa chirca", + "Conversation list" : "Lista de is resonadas", + "Unread messages" : "Messàgios non lèghidos", + "New personal note" : "Nota personale noa", + "Clear filter" : "Lìmpia filtru", + "App settings" : "Cunfiguratzione de s'aplicatzione", + "Users" : "Utentes", + "Groups" : "Grupos", + "New private conversation" : "Resonada privada noa", + "Other sources" : "Àteras fontes", + "Open conversations" : "Aberre is resonadas", + "No search results" : "Perunu resurtadu de chirca", + "Users and groups" : "Utentes e grupos", + "New group conversation" : "Resonada de grupu noa", + "You are currently waiting in the lobby" : "Immoe ses abetende in s'intrada", + "Select microphone" : "Seletziona su micròfonu", + "No microphone available" : "Perunu micròfonu a disponimentu", + "Select camera" : "Seletziona sa fotocàmera", + "No camera available" : "Peruna fotocàmera a disponimentu", + "Test" : "Proa", + "Devices" : "Dispositivos", + "No audio" : "Àudiu perunu", + "No camera" : "Peruna fotocàmera", + "Calls are not supported in your browser" : "Is mutidas no sunt suportadas in su navigadore tuo", + "Access to microphone is only possible with HTTPS" : "S'atzessu a su micròfonu si podet fàghere isceti cun HTTPS", + "Access to microphone was denied" : "S'atzessu a su micròfonu est istadu negadu", + "Error while accessing microphone" : "Errore in s'atzessu a su micròfonu", + "Access to camera is only possible with HTTPS" : "S'atzessu a sa càmera si podet fàghere isceti cun HTTPS", + "Invalid path selected" : "Percursu seletzionadu non bàlidu", + "Upload" : "Càrriga", + "Files" : "Archìvios", + "24 hours" : "24 oras", + "A reminder was successfully set at {datetime}" : "Apuntu cunfiguradu pro {datetime}", + "Reply" : "Risponde", + "More actions" : "Àteras atziones", + "Set reminder" : "Cunfigura un'apuntu", + "Reply privately" : "Risponde in privadu", + "Copy message link" : "Còpia su ligòngiu de su messàgiu", + "Go to file" : "Bae a s'archìviu", + "Forward message" : "Torra a imbiare su messàgiu", + "Translate" : "Borta", + "Set custom reminder" : "Cunfigura un'apuntu personalizadu", + "Choose a conversation to forward the selected message." : "Sèbera una resonada pro torrare a imbiare su messàgiu seletzionadu.", + "Error while forwarding message" : "Errore torrende a imbiare su messàgiu", + "The message has been forwarded to {selectedConversationName}" : "Messàgiu torradu a imbiare a {selectedConversationName}", + "Dismiss" : "Iscarta", + "Go to conversation" : "Bae a sa resonada", + "Message read by everyone who shares their reading status" : "Messàgiu lèghidu dae totu is persones chi cumpartzint s'istadu de letura issoro", + "Message sent" : "Messàgiu imbiadu", + "Deleting message" : "Cantzellende su messàgiu", + "Message deleted successfully" : "Messàgiu cantzelladu", + "Message could not be deleted because it is too old" : "Su messàgiu non si podet cantzellare ca est tropu betzu", + "Only normal chat messages can be deleted" : "Si podent cantzellare isceti is messàgios de tzarrada normales", + "An error occurred while deleting the message" : "B'at àpidu un'errore cantzellende su messàgiu", + "Your browser does not support playing audio files" : "Su serbidore tuo non suportat sa riprodutzione de archìvios àudio", + "Contact" : "Cuntata", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Ischeda de Deck", + "Remove {fileName}" : "Boga•nche {fileName}", + "Sending message" : "Imbiende su messàgiu", + "Failed to send the message. Click to try again" : "No at fatu a imbiare su messàgiu. Incarca pro torrare a proare", + "Not enough free space to upload file" : "Non b'at logu lìberu pro carrigare s'archìviu", + "You cannot send messages to this conversation at the moment" : "Non podes imbiare messàgios in custa resonada in custu momentu", + "No messages" : "Perunu messàgiu", + "Unpin" : "No apicare", + "Create a new group conversation" : "Crea unu grupu de resonada nou", + "Add participants" : "Agiunghe partetzipantes", + "Allow guests to join via link" : "Permite a is persones invitadas de intrare cun unu ligòngiu", + "Enter password" : "Inserta crae", + "This conversation has been locked" : "Custa resonada est istada blocada", + "No permission to post messages in this conversation" : "Perunu permissu pro publicare messàgios in custa resonada", + "Joining conversation …" : "Intrende in sa resonada", + "Send message" : "Imbia messàgiu", + "The participant will not be notified about new messages" : "Su partetzipante no ant a retzire notìficas de is messàgios noos", + "Participants will not be notified about new messages" : "Is partetzipantes no ant a retzire notìficas de is messàgios noos", + "File to share" : "Archìviu de cumpartzire", + "Add emoji" : "Agiunghe carighedda", + "Share from Files" : "Cumpartzi dae Archìvios", + "Share files to the conversation" : "Cumpartzi archìvios in sa resonada", + "Upload from device" : "Càrriga dae su dispositivu", + "Create new poll" : "Crea unu sondàgiu nou", + "Record voice message" : "Registra messàgiu de boghe", + "End recording and send" : "Agabba sa registratzione e imbia", + "Dismiss recording" : "Iscarta sa registratzione", + "Access to the microphone was denied" : "S'atzessu a su mocròfonu est istadu negadu", + "Microphone either not available or disabled in settings" : "Su micròfonu no est a disponimentu o est disativadu in sa cunfiguratzione", + "Error while recording audio" : "Errore in sa registratzione de s'àudio", + "New file" : "Archìviu nou", + "Blank" : "Isbòidu", + "Create and share a new file" : "Crea e cumpartzi un'archìviu nou", + "Name of the new file" : "Nùmene de s'archìviu nou", + "Add more files" : "Agiunghe àteros archìvios", + "Send" : "Imbia", + "Settings" : "Cunfiguratzione", + "Anonymous poll" : "Sondàgiu anònimu", + "Results" : "Resurtados", + "Disable lobby" : "Disativa intrada", + "Settings for participant \"{user}\"" : "Cunfiguratzione pro partetzipante \"{user}\"", + "Participant \"{user}\"" : "Partetzipante \"{user}\"", + "moderator" : "Chie moderat", + "bot" : "bot", + "guest" : "persone invitada", + "Raised their hand" : "An artziadu sa manu", + "Joined with video" : "Atzessu fatu cun vìdeu", + "Joined via phone" : "Atzessu fatu dae telèfonu", + "Joined with audio" : "Atzessu fatu cun àudio", + "Remove group and members" : "Boga·nche grupu e partetzipantes", + "Remove participant" : "Boga·nche partetzipante", + "Dial-in PIN" : "PIN de atzessu", + "Demote from moderator" : "Lea su permissu de moderare a ", + "Promote to moderator" : "Autoriza a moderare", + "Resend invitation" : "Torra a imbiare s'invitu", + "Reset custom permissions" : "Riprìstina is permissos personalizados", + "Remove" : "Boga", + "Add users or groups" : "Agiunghe utentes o grupos", + "Add users" : "Agiunghe utentes", + "Add groups" : "Agiunghe grupos", + "Add other sources" : "Agiunghe àteras fontes", + "Add emails" : "Agiunghe email", + "Integrations" : "Integratziones", + "Searching …" : "Chirchende …", + "Search for more users" : "Chirca àteras utèntzias", + "Search or add participants" : "Chirca o agiunghe partetzipantes", + "An error occurred while adding the participants" : "B'at àpidu un'errore agiunghende is partetzipantes", + "Participants" : "Partetzipantes", + "Open chat" : "Aberi tzarrada", + "You have new unread messages in the chat." : "Tenes messàgios non lèghidos noos in sa tzarrada.", + "You have been mentioned in the chat." : "T'ant mentovadu in sa tzarrada.", + "Chat" : "Tzarrada", + "Details" : "Detàllios", + "No results found" : "Perunu resurtadu agatadu", + "Load more results" : "Càrriga àteros resurtados", + "Projects" : "Progetos", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Collega a una resonada", + "Search conversations or users" : "Chirca resonadas o utentes", + "Select conversation" : "Seletziona resonada", + "Error while saving sounds setting" : "Errore sarvende sa cunfiguratzione de is sonos", + "Play sounds when participants join or leave a call" : "Ativa is sonos cando is partetzipantes intrant o lassant una mutida", + "Notification settings" : "Cunfiguratzione de notìficas", + "Default language" : "Limba predefinida", + "Select location for attachments" : "Seletziona sa positzione pro is alligongiados", + "Error while setting attachment folder" : "Errore in sa cunfiguratzione de sa cartella de is alligongiados", + "Error while setting read status privacy" : "Errore in sa cunfiguratzione de sa riservadesa de s'istadu de letura", + "Privacy" : "Riservadesa", + "Attachments folder" : "Cartella de alligongiados", + "Search" : "Chirca", + "Focus the chat input" : "Ativa sa digitatzione de sa tzarrada", + "Unfocus the chat input to use shortcuts" : "Disativa sa digitatzione de sa tzarrada pro impreare is curtziadòrgios", + "Shortcuts while in a call" : "Curtziadòrgios in s'interis de una mutida", + "Microphone on and off" : "Micròfonu allutu e istudadu", + "Raise or lower hand" : "Àrtzia o bàscia sa manu", + "Push to talk or push to mute" : "Ispinghe pro faeddare o ispinghe pro tirare s'àudio", + "Start call" : "Cumintza mutida", + "You will be able to join the call only after a moderator starts it." : "As a pòdere intrare in una mutida isceti a pustis chi una persone chi moderat dda cumintzet.", + "Recording" : "Registratzione", + "You are not allowed to enable screensharing" : "Non tenes su permissu de ativare sa cumpartzidura de s'ischermu", + "No screensharing" : "Peruna cumpartzidura de ischermu", + "Screensharing options" : "Sèberos de sa cumpartzidura de s'ischermu", + "Enable screensharing" : "Ativa sa cumpartzidura de s'ischermu", + "Bad sent video and screen quality." : "Calidade mala de su vìdeu e de s'ischermu imbiados.", + "Bad sent screen quality." : "Calidade mala de s'ischermu imbiadu.", + "Bad sent video quality." : "Calidade mala de su vìdeu imbiadu.", + "Bad sent audio, video and screen quality." : "Calidade de s'àudiu, de su vìdeu e de s'ischermu imbiados.", + "Bad sent audio and screen quality." : "Calidade mala de s'àudiu e de s'ischermu imbiados.", + "Bad sent audio and video quality." : "Calidade mala de s'àudiu e de su vìdeu imbiados.", + "Bad sent audio quality." : "Calidade mala de s'àudiu imbiadu.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non bidant s'ischermu tuo.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti bidant.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti bidant nen ti cumprendant. Pro megiorare sa situatzione, proa a disativare s'ischermu tuo in s'interis chi faghes una cumpartzidura.", + "Disable screenshare" : "Disativa sa cumpartzidura de s'ischermu", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti cumprendant nen ti bidant. Pro megiorare sa situatzione, proa a disativare su vìdeu.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti cumprendant.", + "Screen sharing is not supported by your browser." : "Sa cumpartzidura de s'ischermu non est suportada dae su navigadore tuo", + "Screen sharing requires the page to be loaded through HTTPS." : "Pro sa cumpartzidura de s'ischermu tocat a carrigare sa pàgina cun HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Pro Screensharing tocat a carrigare sa pàgina cun HTTPS", + "An error occurred while starting screensharing." : "B'at àpidu un'errore incarrerende sa cumpartzidura de s'ischermu.", + "Show your screen" : "Mustra s'ischermu tuo", + "Stop screensharing" : "Firma sa cumpartzidura de s'ischermu", + "Mute others" : "Tira s'àudio a àtere", + "Keep" : "Mantene", + "Select a region" : "Seletziona una regione", + "Message without mention" : "Messàgiu chena mentovu", + "Mention myself" : "Mentova a mie etotu", + "Join a different conversation or start a new one." : "Aderi a una resonada diferente o cumintza·nde una noa.", + "The conversation does not exist" : "Sa resonada no esistit", + "Join a conversation or start a new one!" : "Intra in una resonada o cumintza•nde una noa!", + "Duplicate session" : "Dùplica sa sessione", + "Join a conversation or start a new one" : "Intra in una resonada o cumintza•nde una noa", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Utente de Nextcloud", + "User password" : "Crae de s'utente", + "Talk conversation" : "Resonada de Talk", + "Skip TLS verification" : "Sàrtia sa verìfica TLS", + "Matrix server URL" : "URL de su serbidore de Matrix", + "User" : "Utente", + "Matrix channel" : "Canale de Matrix", + "Mattermost server URL" : "URL de su serbidore de Mattermost", + "Mattermost user" : "Utente de Mattermost", + "Team name" : "Nùmene de su grupu", + "Channel name" : "Nùmene de su canale", + "Rocket.Chat server URL" : "URL de su serbidore de Rocket.Chat", + "User name or email address" : "Nùmene de s'utente o indiritzu email", + "Rocket.Chat channel" : "Canale de Rocket.Chat", + "Zulip server URL" : "URL de su serbidore de Zulip", + "Bot user name" : "Nùmene de utente de su bot", + "Bot API key" : "Crae API de su programma automàticu", + "Zulip channel" : "Canale de Zulip", + "API token" : "Token API", + "Slack channel" : "Canale de Slack", + "Server ID or name" : "ID o nùmene de su serbidore ", + "Channel" : "Canale", + "Login" : "Atzessu", + "Chat ID" : "ID de sa tzarrada", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL de su serbidore IRC (esèmpiu: chat.freenode.net:6667)", + "Nickname" : "Nùmene", + "Connection password" : "Crae de connessione", + "IRC channel" : "Canale IRC", + "Channel password" : "Crae de su canale", + "NickServ nickname" : "Nùmene de NickServ", + "NickServ password" : "Crae de NickServ", + "Use TLS" : "Imprea TLS", + "Use SASL" : "Imprea SASL", + "Tenant ID" : "ID de incuilinu", + "Client ID" : "ID de cliente", + "Team ID" : "ID de grupu", + "Thread ID" : "ID de filu", + "XMPP/Jabber server URL" : "URL de su serbidore XMPP/Jabber", + "MUC server URL" : "URL de su serbidore MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Media", + "Polls" : "Sondàgios", + "Locations" : "Positziones", + "Audio" : "Àudio", + "Show all files" : "Mustra totu is documentos", + "Group" : "Grupu", + "You: {lastMessage}" : "Tue: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ses proende a intrare in una resonada cun una sessione ativa in un'àtera ventana o dispositivu. In custu momentu cust'atzione no est suportada dae Nextcloud Talk. Ite boles fàghere?", + "Leave this page" : "Lassa custa pàgina", + "Join here" : "Intra inoghe", + "Post to a conversation" : "Pùblica in una resonada", + "Post to conversation" : "Pùblica in sa resonada", + "Error while clearing conversation history" : "Errore limpiende s'istòria de sa resonada", + "Error occurred while allowing guests" : "B'at àpidu un'errore autorizende is persones invitadas", + "Error occurred while disallowing guests" : "B'at àpidu un'errore refudende is persones invitadas", + "Error occurred when restricting the conversation to moderator" : "B'at àpidu un'errore limitende sa resonada a chie moderat", + "Error occurred when opening the conversation to everyone" : "B'at àpidu un'errore aberrende sa resonada a totus", + "Conversation password has been saved" : "Sa crae de sa resonada est istada sarvada", + "Conversation password has been removed" : "Sa crae de sa resonada nch'est istada bogada", + "Error occurred while saving conversation password" : "B'at àpidu un'errore sarvende sa crae de sa resonada", + "Could not post message: {errorMessage}" : "No at fatu a publicare su messàgiu: {errorMessage}", + "An error occurred while fetching the participants" : "B'at àpidu un'errore in su recùperu de is partetzipantes", + "Could not send invitation to {actorId}" : "No at fatu a imbiare s'invitu a {actorId}.", + "Invitations sent" : "Invitos imbiados", + "Error occurred when sending invitations" : "B'at àpidu un'errore imbiende is invitos", + "Error while uploading file \"{fileName}\"" : "Errore carrighende s'archìviu \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Non b'at logu lìberu pro carrigare s'archìviu \"{fileName}\"", + "You are not allowed to share files" : "Non tenes su permissu de cumpartzire archìvios", + "Error while sharing file" : "Errore in sa cumpartzidura de s'archìviu", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Su navigadore chi ses impreende no est suportadu totu dae Nextcloud. Imprea s'ùrtima versione de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "Lost connection to signaling server. Trying to reconnect." : "Connessione pèrdida cun su serbidore de signalatzione. Proende a torrare a connètere", + "Please reload the page." : "Torra a carrigare sa pàgina.", + "Do not disturb" : "No istorbes", + "Away" : "Foras", + "Microphone {number}" : "Micròfonu {number}", + "Camera {number}" : "Fotocàmera {number}", + "Speaker {number}" : "Altoparlante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parret chi siast faeddende cun s'àudio istudadu, allue•ddu pro chi is àteras persones ti potzant intèndere", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No faghet a istabilire una connessione cun a su mancu una persone. In custu casu, unu serbidore TURN podet agiudare. Pregonta a s'amministratzione de nde cunfigurare unu sighende {linkstart}custa documentatzione{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Cust'atividade est istentende prus de su tempus prevèdidu. Is permissos multimediales sunt giai istados atzetados (o negados)? Chi eja, torra a abèrrere su navigadore, ca àudio e vìdeo no sunt funtzionende", + "Access to microphone & camera is only possible with HTTPS" : "S'atzessu a micròfonu & fotocàmera si podet fàghere isceti cun HTTPS", + "Please move your setup to HTTPS" : "Càmbia sa cunfiguratzione a HTTPS", + "Access to microphone & camera was denied" : "S'atzessu a micròfonu &fotocàmera est istadu negadu", + "WebRTC is not supported in your browser" : "WebRTC no est suportadu dae su navigadore tuo", + "Please use a different browser like Firefox or Chrome" : "Imprea un'àteru navigadore, comente Firefox o Chrome", + "Error while accessing microphone & camera" : "Errore in s'atzessu a micròfonu e fotocàmera", + "%s Talk on your mobile devices" : "%s Talk in is dispositivos mòbiles tuos", + "Join conversations at any time, anywhere, on any device." : "Intra in una resonada in cada momentu, dae cada parte, in cada dispositivu", + "Android app" : "Aplicatzione Android", + "iOS app" : "Aplicatzione iOS", + "__language_name__" : "sardu", + "Tasks" : "Fainas", + "Notes" : "Notas", + "Set reminder for later today" : "Cunfigura un'apuntu pro luego", + "Set reminder for tomorrow" : "Cunfigura un'apuntu pro cras", + "Set reminder for this weekend" : "Cunfigura un'apuntu pro custu fine de chida", + "Set reminder for next week" : "Cunfigura un'apuntu pro chida chi benit", + "Talk recording from {time} ({conversation})" : "Registratzione de boghe {time} ({conversation})", + "Your privacy setting has been saved" : "Sa cunfiguratzione de riservadesa tua est istada sarvada", + "Failed to save sounds setting" : "Non at fatu a sarvare sa cunfiguratzione de is sonos", + "Sounds setting saved" : "Cunfiguratzione de is sonos sarvada", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "As fatu s'atzessu in sa resonada in un'àtera ventana o dispositivu. In custu momentu cust'atzione no est suportada dae Nextcloud Talk tando sa sessione est istada serrada." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sc.json b/l10n/sc.json new file mode 100644 index 0000000..5e0c56b --- /dev/null +++ b/l10n/sc.json @@ -0,0 +1,1042 @@ +{ "translations": { + "a conversation" : "una resonada", + "(Duration %s)" : "(Tempus %s)", + "You attended a call with {user1}" : "As partitzipadu a una mutida cun {user1}", + "_%n guest_::_%n guests_" : ["%npersone invitada","%npersones invitadas"], + "You attended a call with {user1} and {user2}" : "As partitzipadu a una mutida cun {user1} e {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "As partitzipadu a una mutida cun {user1}, {user2} e {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "As partitzipadu a una mutida cun {user1}, {user2}{user3} e {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "As partitzipadu a una mutida cun {user1}, {user2}, {user3}, {user4} e {user5}", + "_%n other_::_%n others_" : ["%n other","%n àtere"], + "{actor} invited you to {call}" : "{actor} t'at cumbidadu a {call}", + "You were invited to a conversation or had a call" : "T'ant cumbidadu a una resonada o as tentu una mutida", + "Other activities" : "Àteras atividades", + "Talk" : "Faedda", + "Guest" : "Persone invitada", + "## New in Talk %s" : "## Nou in Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "Immoe podes impreare Microsoft Edge e Safari pro partetzipare in mutidas àudio e vìdeo", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Is resonadas fache a pare immoe sunt sighidas e non podent èssere furriadas prus in resonadas de grupu pro errore. Puru cando una persone lassat sa resonada, custa no si cantzellat prus de manera automàtica. Sa resonada si cantzellat dae su serbidore isceti chi is duas persones chi partetzipant dda lassant.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Immoe podes imbiare notìficas a is partetzipantes iscriende \"@totus\" in sa tzarrada.", + "- With the \"arrow-up\" key you can repost your last message" : "- Cun su tastu \"fertza-in-susu\" podes torrare a publicare s'ùrtimu messàgiu tuo.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Immoe Talk podet tènnere cumandos, imbia \"agiudu\" comente messàgiu de sa tzarrada pro bìdere chi chie amministrat nd'at cunfiguradu calecunu", + "- With projects you can create quick links between conversations, files and other items" : "- Cun is progetos podes creare ligòngios lestros intre resonadas, archìvios e àteros elementos", + "- You can now mention guests in the chat" : "- Immoe podes mentovare zente istràngia in sa tzarrada", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Immoe is resonadas podent tènnere un'intrada. Custu at a permìtere a chie moderat de si collegare in antis a sa tzarrada po preparare s'atòbiu, in su interis chi is utentes e sa zente istràngia depent isetare", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Immoe podes respòndere deretu a is messàgios donende a is utentes prus cuntestu subra de su messàgiu tuo", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Sa chirca de resonadas e partitzipantes immoe at a filtrare cussas chi nche sunt giai, aici at a èssere prus fàtzile agatare resonadas pretzedentes", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Immoe podes agiùnghere grupos de utentes abituales a is resonadas cando s'aplicatzione de tzìrculos est installada", + "- Check out the new grid and call view" : "Controlla sa grìglia noa e sa vista de is mutidas", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Immoe podes carrigare e trisinare archìvios deretu dae su dispositivu a sa tzarrada", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Immoe is archìvios cumpartzidos s'aberrent deretu in sa vista de sa tzarrada cun is aplicatziones ammustradoras", + "- You can now search for chats and messages in the unified search in the top bar" : "Immoe podes chircare tzarradas e messàgios in sa traessa generale de chirca de subra", + "- Spice up your messages with emojis from the emoji picker" : "- Alluta is messàgios tuos cun is carigheddas dae sa regorta", + "- You can now change your camera and microphone while being in a call" : "- Immoe podes cambiare sa càmera e su micròfono in s'interis chi ses in una mutida", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Dona cuntestu a is resonadas cun una descritzione e lassa•dda visìbile gasi is utentes chi ant fatu s'atzessu dda podent agatare e intrare pro contu issoro", + "- See a read status and send failed messages again" : "- Càstia is informatziones de letura e torra a mandare is messàgios faddidos", + "- Raise your hand in a call with the R key" : "- Àrtzia sa manu in una mutida cun su tastu R", + "- Join the same conversation and call from multiple devices" : "- Intra in sa pròpria resonada e tzèrria cun prus dispositivos", + "- Send voice messages, share your location or contact details" : "- Imbia messàgios de boghe, cumpartzi sa positzione tua o is detàllios de cuntatu", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Agiunghe grupos a una resonada e is membros noos ant a èssere agiuntos in automàticu comente partetzipantes", + "Talk updates ✅" : "Agiornamentos de Talk ✅", + "{actor} created the conversation" : "{actor} at creadu sa resonada", + "You created the conversation" : "Tue as creadu sa resonada", + "An administrator created the conversation" : "S'amministratzione at creadu sa resonada", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} at cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Tue as cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "S'amministratzione at cambiadu su nùmene de sa resonada dae \"%1$s\" a \"%2$s\"", + "{actor} set the description" : "{actor} at cunfiguradu sa descritzione", + "You set the description" : "As cunfiguradu sa descritzione", + "An administrator set the description" : "S'amministratzione at cunfiguradu sa descritzione", + "{actor} removed the description" : "{actor} nch'at bogadu sa descritzione", + "You removed the description" : "Tue nch'as bogadu sa descritzione", + "An administrator removed the description" : "S'amministratzione nch'at bogadu sa descritzione", + "You started a call" : "Tue as abertu una mutida", + "{actor} started a call" : "{actor} at abertu una mutida", + "{actor} joined the call" : "{actor} at fatu s'atzessu in sa mutida", + "You joined the call" : "As fatu s'atzessu in sa mutida", + "{actor} left the call" : "{actor} at lassadu sa mutida", + "You left the call" : "Tue as lassadu sa mutida", + "{actor} unlocked the conversation" : "{actor} at isblocadu sa resonada", + "You unlocked the conversation" : "Tue as isblocadu sa resonada", + "An administrator unlocked the conversation" : "S'amministratzione at isblocadu sa resonada", + "{actor} locked the conversation" : "{actor} at blocadu sa resonada", + "You locked the conversation" : "Tue as blocadu sa resonada", + "An administrator locked the conversation" : "S'amministratzione at blocadu sa resonada", + "{actor} limited the conversation to the current participants" : "{actor} at limitadu sa resonada a is partetzipantes atuales", + "You limited the conversation to the current participants" : "Tue as limitadu sa resonada a is partetzipantes atuales", + "An administrator limited the conversation to the current participants" : "S'amministratzione at limitadu sa resonada a is partetzipantes atuales", + "{actor} opened the conversation to registered users" : "{actor} at abertu sa resonada a s'utèntzia registrada", + "You opened the conversation to registered users" : "Tue as abertu sa resonada a s'utèntzia registrada", + "An administrator opened the conversation to registered users" : "S'amministratzione at abertu sa resonada a s'utèntzia registrada", + "The conversation is now open to everyone" : "Immoe sa resonada est aberta a totus", + "{actor} opened the conversation to everyone" : "{actor} at abertu sa resonada a totus", + "You opened the conversation to everyone" : "Tue as abertu sa resonada a totus", + "{actor} restricted the conversation to moderators" : "{actor} at istrintu sa resonada a chie moderat", + "You restricted the conversation to moderators" : " Tue as istrintu sa resonada a chie moderat", + "{actor} allowed guests" : "{actor} at ammìtidu s'utèntzia istràngia", + "You allowed guests" : "Tue as ammìtidu s'utèntzia istràngia", + "An administrator allowed guests" : "S'amministratzione at ammìtidu s'utèntzia istràngia", + "{actor} disallowed guests" : "{actor} at refudadu s'utèntzia istràngia", + "You disallowed guests" : "Tue as refudadu s'utèntzia istràngia", + "An administrator disallowed guests" : "S'amministratzione at refudadu s'utèntzia istràngia", + "{actor} set a password" : "{actor} at cunfiguradu una crae", + "You set a password" : "As cunfiguradu una crae", + "An administrator set a password" : "S'amministratzione at cunfiguradu una crae", + "{actor} removed the password" : "{actor} nch'at bogadu sa crae", + "You removed the password" : "Nch'as bogadu sa crae", + "An administrator removed the password" : "S'amministratzione nch'at bogadu sa crae", + "{actor} added {user}" : "{actor} at agiuntu a {user}", + "You joined the conversation" : "As fatu s'atzessu in sa resonada", + "{actor} joined the conversation" : "{actor} at fatu s'atzessu in sa resonada", + "You added {user}" : "As agiuntu a {user}", + "{actor} added you" : "{actor} t'at agiuntu", + "An administrator added you" : "S'amministratzione t'at agiuntu", + "An administrator added {user}" : "S'amministratzione at agiuntu {user}", + "You left the conversation" : "As lassadu sa resonada", + "{actor} left the conversation" : "{actor} at lassadu sa resonada", + "{actor} removed {user}" : "{actor} nch'at bogadu a {user}", + "You removed {user}" : "Nch'as bogadu a {user}", + "{actor} removed you" : "{actor} ti nch'at bogadu", + "An administrator removed you" : "S'amministratzione ti nch'at bogadu", + "An administrator removed {user}" : "S'amministrazione nch'at bogadu {user}", + "{actor} added group {group}" : "{actor} at agiuntu su grupu {group}", + "You added group {group}" : "As agiuntu su grupu {group}", + "An administrator added group {group}" : "S'amministratzione at agiuntu su grupu {group}", + "{actor} removed group {group}" : "{actor} nch'at bogadu su grupu {group}", + "You removed group {group}" : "Nch'as bogadu su grupu {group}", + "An administrator removed group {group}" : "S'amministratzione nch'at bogadu su grupu {group}", + "{actor} promoted {user} to moderator" : "{actor} at autorizadu {user} a moderare", + "You promoted {user} to moderator" : "As autorizadu a {user} a moderare", + "{actor} promoted you to moderator" : "{actor} t'at autorizadu a moderare", + "An administrator promoted you to moderator" : "S'amministratzione t'at autorizadu a moderare", + "An administrator promoted {user} to moderator" : "S'amministratzione at autorizadu {user} a moderare", + "{actor} demoted {user} from moderator" : "{actor} nd'at leadu su permissu de moderare a {user} ", + "You demoted {user} from moderator" : "Nd'as leadu su permissu de moderare a {user}", + "{actor} demoted you from moderator" : "{actor} ti nd'at leadu su permissu de moderare", + "An administrator demoted you from moderator" : "S'amministratzione ti nd'at leadu su permissu de moderare", + "An administrator demoted {user} from moderator" : "S'amministratzione nd'at leadu su permissu de moderare a {user}", + "{actor} shared a file which is no longer available" : "{actor} at cumpartzidu un'archìviu chi no est prus disponìbile", + "You shared a file which is no longer available" : "As cumpartzidu un'archìviu chi no est prus disponìbile", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} at cunfiguradu Matterbridge pro sincronizare custa resonada cun àteras tzarradas", + "You set up Matterbridge to synchronize this conversation with other chats" : "As cunfiguradu Matterbridge pro sincronizare custa resonada cun àteras tzarradas", + "{actor} updated the Matterbridge configuration" : "{actor} at agiornadu sa cunfiguratzione de Matterbridge", + "You updated the Matterbridge configuration" : "As agiornadu sa cunfiguratzione de Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} nch'at bogadu sa cunfiguratzione de Matterbridge", + "You removed the Matterbridge configuration" : "Nch'as bogadu sa cunfiguratzione de Matterbridge", + "{actor} started Matterbridge" : "{actor} at abertu Matterbridge", + "You started Matterbridge" : "As abertu Matterbridge", + "{actor} stopped Matterbridge" : "{actor} at firmadu Matterbridge", + "You stopped Matterbridge" : "As firmadu Matterbridge", + "{actor} deleted a message" : "{actor} at cantzelladu unu messàgiu", + "You deleted a message" : "As cantzelladu unu messàgiu", + "{actor} cleared the history of the conversation" : "{actor} at limpiadu s'istòria de sa resonada", + "You cleared the history of the conversation" : "As limpiadu s'istòria de sa resonada", + "Message deleted by author" : "Messàgiu cantzelladu dae s'autore", + "Message deleted by {actor}" : "Messàgiu cantzelladu dae {actor}", + "Message deleted by you" : "Messàgiu cantzelladu dae tue", + "Administration" : "Amministratzione", + "System" : "Sistema", + "%s (guest)" : "%s (persone invitada)", + "Talk conversations" : "Resonadas de Talk", + "Talk to %s" : "Faedda cun %s", + "File not found" : "Archìviu no agatadu", + "File is not shared, or shared but not with the user" : "S'archìviu no est cumpartzidu, o est cumpartzidu ma no cun s'utente", + "No account available to delete." : "Perunu contu disponìbile de cantzellare.", + "No image file provided" : "Perunu archìviu de immàgine frunidu", + "File is too big" : "S'archìviu est tropu mannu", + "Invalid file provided" : "S'archìviu frunidu no est vàlidu", + "Invalid image" : "Immàgine non bàlida", + "Unknown filetype" : "Genia de archìviu disconnota", + "Talk mentions" : "Mentovos de Talk", + "Say hi to your friends and colleagues!" : "Saluda a sa gente!", + "No unread mentions" : "Perunu mentovu chena lèghere", + "Call in progress" : "Mutida in cursu", + "You were mentioned" : "Ses istadu mentovadu", + "Write to conversation" : "Iscrie in sa resonada", + "Writes event information into a conversation of your choice" : "Iscriet is informatziones de s'eventu in una resonada de sèberu tuo", + "Conversation invitation" : "Cumbidu a sa resonada", + "Description" : "Descritzione", + "You can also dial-in via phone with the following details" : "Ti podes connètere puru cun su telèfono cun is detàllios in fatu", + "Dial-in information" : "Informatziones de connessione", + "Meeting ID" : "ID de s'atòbiu", + "Your PIN" : "Su PIN tuo", + "Meeting" : "Atòbiu", + "Password request: %s" : "Rechesta de crae: %s", + "Private conversation" : "Cunversatzione privada", + "Deleted user (%s)" : "Utente cantzelladu (%s)", + "Dismiss notification" : "Iscarta notìfica", + "Accept" : "Atzeta", + "Decline" : "Refuda", + "New message" : "Messàgiu nou", + "{user} in {call}" : "{user} in {call}", + "Deleted user in {call}" : "Utente cantzelladu in {call}", + "{guest} (guest) in {call}" : "{guest} (utèntzia istràngia) in {call}", + "Guest in {call}" : "Utèntzia istràngia in {call}", + "{user} sent you a private message" : "{user} t'at imbiadu unu messàgiu privadu", + "{user} sent a message in conversation {call}" : "{user} at imbiadu unu messàgiu in sa resonada {call}", + "A deleted user sent a message in conversation {call}" : "Un'utèntzia cantzellada at imbiadu unu messàgiu in sa resonada {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (utèntzia istràngia) at imbiadu unu messàgiu in sa resonada {call}", + "A guest sent a message in conversation {call}" : "Un'utèntzia istràngia at imbiadu unu messàgiu in sa resonada {call}", + "{user} replied to your private message" : "{user} at respostu a su messàgiu privadu tuo", + "{user} replied to your message in conversation {call}" : "{user} at respostu a su messàgiu tuo in sa resonada {call}", + "A deleted user replied to your message in conversation {call}" : "Un'utèntzia cantzellada at respostu a su messàgiu tuo in sa resonada {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (utèntzia istràngia) at respostu a su messàgiu tuo in sa resonada {call}", + "A guest replied to your message in conversation {call}" : "Un'utèntzia istràngia at respostu a su messàgiu tuo in sa resonada {call}", + "{user} mentioned you in a private conversation" : "{user} t'at mentovadu in una resonada privada", + "{user} mentioned you in conversation {call}" : "{user} t'at mentovadu in sa resonada {call}", + "A deleted user mentioned you in conversation {call}" : "Un'utèntzia cantzellada t'at mentovadu in sa resonada {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (utèntzia istràngia) t'at mentovadu in sa resonada {call}", + "A guest mentioned you in conversation {call}" : "Un'utèntzia istràngia t'at mentovadu in sa resonada {call}", + "View chat" : "Visualiza sa tzarrada", + "{user} invited you to a group conversation: {call}" : "{user} t'at invitadu a una resonada de grupu: {call}", + "Join call" : "Intra in sa mutida", + "Answer call" : "Responde a sa mutida", + "{user} would like to talk with you" : "{user} diat bòlere faeddare cun tue", + "Call back" : "Torra a mutire", + "You missed a call from {user}" : "As pèrdidu una mutida dae {user}", + "A group call has started in {call}" : "Est incarrerada una mutida de grupu in {call}", + "You missed a group call in {call}" : "As pèrdidu una mutida de grupu in {call}", + "{email} is requesting the password to access {file}" : "{email} est pedende sa crae pro atzèdere {file}", + "{email} tried to request the password to access {file}" : "{email} at proadu a pedire sa crae pro atzèdere {file}", + "Someone is requesting the password to access {file}" : "Calicunu est pedende sa crae pro atzèdere {file}", + "Someone tried to request the password to access {file}" : "Calicunu at proadu a pedire sa crae pro atzèdere {file}", + "Open settings" : "Aberi sa cunfiguratzione", + "The hosted signaling server is now configured and will be used." : "Su serbidore de signalatzione retzidu immoe est cunfiguradu e podet èssere impreadu.", + "The hosted signaling server was removed and will not be used anymore." : "Si nch'at bogadu su serbidore de signalatzione retzidu e non s'at a podère impreare prus.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Su contu de su serbidore de signalatzione retzidu at cambiadu s'istadu dae \"{oldstatus}\" a \"{newstatus}\".", + "error" : "errore", + "Contact via Talk" : "Cuntatu pro mèdiu de Talk", + "Default" : "Predefinidu", + "Presentation" : "Presentatzione", + "Conversations" : "Cunversatziones", + "{user}" : "{user}", + "Messages" : "Messàgios", + "{user} in {conversation}" : "{user} in {conversation}", + "Messages in other conversations" : "Messàgios in àteras resonadas", + "Avatar image is not square" : "S'immàgine de s'avatar no est cuadrada", + "Other" : "Àteru", + "Failed to request trial because the trial server is unreachable. Please try again later." : "No s'at pòdidu pedire sa versione de proa, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "B'at unu problema cun s'autenticatzione de custa istàntzia. Fortzis no si podet cuntatare dae foras pro verificare s'URL.", + "Something unexpected happened." : "Est sutzèdida calincuna cosa no prevèdida.", + "The URL is invalid." : "S'URL no est bàlidu.", + "An HTTPS URL is required." : "Est rechertu unu HTTPS URL.", + "The email address is invalid." : "S'indiritzu de posta eletrònica no est bàlidu.", + "The language is invalid." : "Su limbàgiu no est bàlidu.", + "The country is invalid." : "S'Istadu no est bàlidu.", + "There is a problem with the request of the trial. Please check your logs for further information." : "B'at unu problema cun sa rechesta de sa versione de proa. Càstia is registros tuos pro àteras informatziones.", + "Too many requests are send from your servers address. Please try again later." : "B'at tropu rechestas imbiadas dae s'indiritzu de su serbidore tuo. Torra a proare luego.", + "There is already a trial registered for this Nextcloud instance." : "B'at giai una versione de proa registrada pro custa istàntzia de Nextcloud.", + "Something unexpected happened. Please try again later." : "Est sutzèdida calincuna cosa no prevèdida. Torra a proare luego.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "No s'at pòdidu pedire sa versione de proa, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "Trial requested but failed to get account information. Please check back later." : "Versione de proa rechèdida, ma no si podet atzèdere a is informatziones de su contu. Torra a castiare luego.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "B'at unu problema cun s'autenticatzione de custa rechesta. Fortzis no si podet cuntatare dae foras pro verificare s'URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "No s'at pòdidu recuperare is informatziones de su contu, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "There is a problem with fetching the account information. Please check your logs for further information." : "B'at unu problema cun su recùperu de is informatziones de su contu. Càstia is registros tuos pro àteras informatziones.", + "There is no such account registered." : "Perunu contu de custa genia registradu.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "No s'at pòdidu recuperare is informatziones de su contu, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "Deleting the hosted signaling server account failed. Please check back later." : "Cantzellende su contu faddidu de su serbidore de signalatzione retzidu. Torra a castiare luego.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "No s'at pòdidu cantzellare su contu, ca b'at àpidu errores in su funtzionamentu de su serbidore de proa. Torra a proare luego.", + "There is a problem with deleting the account. Please check your logs for further information." : "B'at unu problema pro cantzellare su contu. Càstia is registros tuos pro àtera informatziones.", + "Too many requests are sent from your servers address. Please try again later." : "B'at tropu rechestas imbiadas dae s'indiritzu de su serbidore tuo. Torra a proare luego.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "No s'at pòdidu cantzellare su contu, ca su serbidore de proa no si podet cuntatare. Torra a proare luego.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emirados Àrabos Unidos", + "Afghanistan" : "Afganistàn", + "Antigua and Barbuda" : "Antìgua e Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armènia", + "Angola" : "Angola", + "Antarctica" : "Antàrtide", + "Argentina" : "Argentina", + "American Samoa" : "Samoa Americanas", + "Austria" : "Àustria", + "Australia" : "Austràlia", + "Aruba" : "Aruba", + "Åland Islands" : "Ìsulas Åland ", + "Azerbaijan" : "Azerbaijàn", + "Bosnia and Herzegovina" : "Bòsnia e Erzegòvina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bèlgiu", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Baharain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei ", + "Bolivia, Plurinational State of" : "Bolìvia", + "Bonaire, Sint Eustatius and Saba" : "Paisos Bassos Caraìbicos", + "Brazil" : "Brasile", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Ìsula Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Bielorùssia", + "Belize" : "Belize", + "Canada" : "Cànada", + "Cocos (Keeling) Islands" : "Ìsulas Cocos (Keeling)", + "Congo, the Democratic Republic of the" : "Repùblica Democràtica de su Congo", + "Central African Republic" : "Rpùblica Tzentrafricana", + "Congo" : "Repùblica de su Congo", + "Switzerland" : "Isvìtzera", + "Côte d'Ivoire" : "Costa Avòriu", + "Cook Islands" : "Ìsulas Cook", + "Chile" : "Cile", + "Cameroon" : "Camerun", + "China" : "Cina", + "Colombia" : "Colòmbia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabu Birde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Ìsula de Paschighedda", + "Cyprus" : "Cipru", + "Czechia" : "Repùbblica Ceca", + "Germany" : "Germània", + "Djibouti" : "Gibuti", + "Denmark" : "Danimarca", + "Dominica" : "Dominica", + "Dominican Republic" : "Repùblica Dominicana", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estònia", + "Egypt" : "Egitu", + "Western Sahara" : "Sahara Otzidentale", + "Eritrea" : "Eritrea", + "Spain" : "Ispagna", + "Ethiopia" : "Etiòpia", + "Finland" : "Finlàndia", + "Fiji" : "Figi", + "Falkland Islands (Malvinas)" : "Ìsulas Falkand (Malvinas)", + "Micronesia, Federated States of" : "Micronèsia", + "Faroe Islands" : "Ìsulas Faroe", + "France" : "Frantza", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Regnu Unidu", + "Grenada" : "Grenada", + "Georgia" : "Geòrgia", + "French Guiana" : "Guyana Frantzesa", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibilterra", + "Greenland" : "Groenlàndia", + "Gambia" : "Gàmbia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadalupa", + "Equatorial Guinea" : "Guinea Ecuatoriale", + "Greece" : "Grècia", + "South Georgia and the South Sandwich Islands" : "Geòrgia de su Sud e Ìsulas Sandwich Meridionales", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Ìsulas Heard e McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croàtzia", + "Haiti" : "Haiti", + "Hungary" : "Ungheria", + "Indonesia" : "Indonèsia", + "Ireland" : "Irlanda", + "Israel" : "Israele", + "Isle of Man" : "Ìsula de Man", + "India" : "Ìndia", + "British Indian Ocean Territory" : "Territòriu Britànnicu de s'Oceanu Indianu", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Repùblica Islàmica de Iran", + "Iceland" : "Islanda", + "Italy" : "Itàlia", + "Jersey" : "Jersey", + "Jamaica" : "Giamàica", + "Jordan" : "Giordània", + "Japan" : "Giapone", + "Kenya" : "Kènya", + "Kyrgyzstan" : "Kirghizistan", + "Cambodia" : "Cambògia", + "Kiribati" : "Kiribati", + "Comoros" : "Comore", + "Saint Kitts and Nevis" : "San Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Corea de su Nord", + "Korea, Republic of" : "Corea de su Sud", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Ìsulas Caiman", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Laos", + "Lebanon" : "Lìbanu", + "Saint Lucia" : "Santa Lughia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Libèria", + "Lesotho" : "Lesotho", + "Lithuania" : "Lituània", + "Luxembourg" : "Lussemburgu", + "Latvia" : "Letònia", + "Libya" : "Lìbia", + "Morocco" : "Marocu", + "Monaco" : "Printzipadu de Mònaco", + "Moldova, Republic of" : "Moldàvia", + "Montenegro" : "Montenegru", + "Saint Martin (French part)" : "San Martin (parte Frantzesa)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Ìsulas Marshall", + "North Macedonia" : "Macedònia de su Nord", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongòlia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Ìsulas Mariannas Setentrionales", + "Martinique" : "Martinica", + "Mauritania" : "Mauritània", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurìtius", + "Maldives" : "Maldivas", + "Malawi" : "Malawi", + "Mexico" : "Mèssicu", + "Malaysia" : "Malèsia", + "Mozambique" : "Mozambicu", + "Namibia" : "Namìbia", + "New Caledonia" : "Caledònia noa", + "Niger" : "Niger", + "Norfolk Island" : "Ìsulas Norfolk", + "Nigeria" : "Nigèria", + "Nicaragua" : "Nicaràgua", + "Netherlands" : "Paisos Bàscios", + "Norway" : "Norvègia", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Noa Zelanda", + "Oman" : "Oman", + "Panama" : "Pànama", + "Peru" : "Perù", + "French Polynesia" : "Polinèsia Frantzesa", + "Papua New Guinea" : "Pàpua Guinea Noa", + "Philippines" : "Filipinas", + "Pakistan" : "Pakistan", + "Poland" : "Polònia", + "Saint Pierre and Miquelon" : "San Pierre e Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portu Ricu", + "Palestine, State of" : "Istadu de Palestina", + "Portugal" : "Portogallu", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Sèrbia", + "Russian Federation" : "Rùssia", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Aràbia Saudita", + "Solomon Islands" : "Ìsulas Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Isvètzia", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Sant Elene", + "Slovenia" : "Slovènia", + "Svalbard and Jan Mayen" : "Svalbarg e Jan Mayen", + "Slovakia" : "Slovàchia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "Santu Marinu", + "Senegal" : "Senegal", + "Somalia" : "Somàlia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan de su Sud", + "Sao Tome and Principe" : "Sao Tome e Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Marteen (parte Olandese)", + "Syrian Arab Republic" : "Sìria", + "Eswatini" : "Swaziland", + "Turks and Caicos Islands" : "Ìsulas Turks e Caicos", + "Chad" : "Ciad", + "French Southern Territories" : "Territòrios Frantzesos de su Sud", + "Togo" : "Togo", + "Thailand" : "Tailàndia", + "Tajikistan" : "Tagikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor de Est", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Turchia", + "Trinidad and Tobago" : "Trinidad e Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzània", + "Ukraine" : "Ucraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ìsulas perifèricas secundàrias de Istados Unidos", + "United States of America" : "Istados Unidos de Amèrica", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Tzitade de su Vaticanu", + "Saint Vincent and the Grenadines" : "Saint Vincent and Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Ìsulas Bìrghines de Regnu Unidu", + "Virgin Islands, U.S." : "Ìsulas Bìrghines de Istados Unidos", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sudàfrica", + "Zambia" : "Zàmbia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Federatzione", + "High-performance backend" : "Motore de prestatziones artas", + "Error: Cannot connect to server" : "Errore: non si podet istabilire connessione cun su serbidore", + "Error: Server did not respond with proper JSON" : "Errore: Su serbidore non at respostu cun su JSON curretu", + "Error: Server responded with: {error}" : "Errore: Su serbidore at respostu cun: {error}", + "Error: Unknown error occurred" : "Errore: B'at àpidu un'errore disconnotu", + "SIP configuration" : "Cunfiguratzione de SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Data non bàlida, su formadu de sa data depet èssere AAAA-MM-GG", + "Conversation not found" : "Resonada no agatada", + "Chat, video & audio-conferencing using WebRTC" : "Tzarradas, cunferèntzias vìdeo e àudio impreende WebRTC", + "Leave call" : "Lassa sa mutida", + "Navigating away from the page will leave the call in {conversation}" : "Bessire dae sa pàgina at a fàghere lassare sa mutida in {conversation}", + "Stay in call" : "Abarra in sa mutida", + "Discuss this file" : "Chistiona de custu archìviu", + "Share this file with others to discuss it" : "Cumpartzi custu archìviu cun àtere pro nde chistionare", + "Share this file" : "Cumpartzi custu archìviu", + "Join conversation" : "Intra in sa resonada", + "The password is wrong. Try again." : "Sa crae est isballiada. Torra a proare.", + "Password" : "Crae", + "Submit" : "Imbia", + "Error requesting the password." : "Errore pedende sa crae.", + "Request password" : "Pedi sa crae", + "This conversation has ended" : "Custa resonada est acabada.", + "Everyone" : "Chie chi siat", + "Users and moderators" : "Lista de is utentes e de chie moderat", + "Moderators only" : "Isceti chie moderat", + "Save changes" : "Sarva càmbios", + "Saving …" : "Sarvende ...", + "Saved!" : "Sarvadu!", + "Limit to groups" : "Lìmita a grupos", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Cando a su mancu unu grupu est seletzionadu, isceti is persones de is grupos in sa lista podent pigare parte de sa resonada.", + "Guests can still join public conversations." : "Is persones invitadas podent ancora intrare in resonadas pùblicas. ", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Is utentes chi no podent prus impreare Talk ant a abarrare in sa lista comente partetzipantes in is resonadas pretzedentes e puru is messàgios issoro podent abarrare sarvados in sa tzarrada.", + "Limit using Talk" : "Lìmita s'impreu de Talk", + "Limit creating a public and group conversation" : "Lìmita sa creatzione de una resonada pùblica e de grupu.", + "Limit creating conversations" : "Lìmita sa creatzione de resonadas", + "Limit starting a call" : "Lìmita s'inghitzu de una mutida", + "Limit starting calls" : "Lìmita s'inghitzu de mutidas", + "When a call has started, everyone with access to the conversation can join the call." : "Cando una mutida est giai incarrerada, is chi tenent atzessu bi podent intrare.", + "Enabled" : "Ativadu", + "Disabled" : "Disabilitada", + "State" : "Istadu", + "Name" : "Nùmene", + "Beta" : "Beta", + "Permissions" : "Permissos", + "All messages" : "Totu is messàgios", + "@-mentions only" : "@-mentovos isceti", + "Off" : "Istudadu", + "General settings" : "Cunfiguratzione generale", + "Default notification settings" : "Cunfiguratzione de notìficas predefinidas", + "Default group notification" : "Notìfica de grupu predefinida", + "Default group notification for new groups" : "Notìfica de grupu predefinida pro grupos noos", + "Integration into other apps" : "Integratzione in àteras aplicatziones", + "Allow conversations on files" : "Permite resonadas in is archìvios", + "Allow conversations on public shares for files" : "Permite resonadas in is cumpartziduras pùblicas pro is archìvios", + "Enable encryption" : "Ativa tzifradura", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Incarchende su butone subra, s'informatzione in su mòdulu benit imbiada a is serbidores de Struktur AG. Podes agatare àteras informatzione in {linkstart}spreed.eu{linkend}.", + "Pending" : "In suspesu", + "Error" : "Errore", + "Blocked" : "Blocadu", + "Active" : "Ativu", + "Expired" : "Iscadidu", + "Never" : "Mai", + "The trial could not be requested. Please try again later." : "Non si podet pedire sa proa. Torra a proare a coa.", + "The account could not be deleted. Please try again later." : "Non si podet cantzellare su contu. Torra a proare a coa.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Su partner nostru Struktur AG frunit unu servìtziu in ue si podet pedire unu serbidore de signalatzione retzidu. Bastat a compilare su mòdulu a suta e Nextcloud dd'at a pedire pro tue. Una borta chi su serbidore est cunfiguradu, is credentziales s'ant a compilare de manera automàtica. Custu at a subriscrìere sa cunfiguratzione esistente de su serbidore de signalatzione.", + "URL of this Nextcloud instance" : "URL de custa istàntzia Nextcloud", + "Full name of the user requesting the trial" : "Nùmene cumpridu de s'utente chi pedit sa proa", + "Email of the user" : "Email de s'utente", + "Language" : "Limba", + "Country" : "Istadu", + "Request signaling server trial" : "Pedi sa proa de su serbidore de signalatzione", + "You can see the current status of your hosted signaling server in the following table." : "Podes bìdere s'istatus atuale de su serbidore de signalatzione retzidu in sa tabella in fatu.", + "Status" : "Istadu", + "Created at" : "Creadu su", + "Expires at" : "Iscadit su", + "Limits" : "Lìmites", + "Yes" : "Si", + "No" : "No", + "Delete the signaling server account" : "Cantzella su contu de su serbidore de signalatzione", + "_%n user_::_%n users_" : ["%nutente","%n utentes"], + "Installed version: {version}" : "Versione installada: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Su binàriu de Matterbridge non est istadu agatadu o non podet èssere esecutadu.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Podes agatare su percursu de su binàriu de Matterbridge a manu puru, cun sa cunfiguratzione. Controlla sa {linkstart}Documentatzione de s'integratzione de Matterbridge{linkend} pro àteras informatziones.", + "Downloading …" : "Iscarrighende ...", + "Install Talk Matterbridge" : "Installa Talk Matterbridge", + "Failed to execute Matterbridge binary." : "No at fatu a esecutare su binàriu de Matterbridge.", + "Matterbridge integration" : "Integratzione cun Matterbridge", + "Enable Matterbridge integration" : "Ativa s'integratzione cun Matterbridge", + "Status: Checking connection" : "Istatus: Controllende sa connessione", + "OK: Running version: {version}" : "OK: Versione currente: {version}", + "Validate SSL certificate" : "Cunvàlida su tzertificadu SSL", + "Delete this server" : "Cantzella custu serbidore", + "Test this server" : "Proa custu serbidore", + "Shared secret" : "Segretu cumpartzidu", + "Restrict SIP configuration" : "Lìmita sa cunfiguratzione SIP", + "Enable SIP configuration" : "Ativa sa cunfiguratzione SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Isceti is utentes de custus grupos podent ativare SIP in is resonadas chi moderant.", + "Phone number (Country)" : "Nùmero de telèfonu (Istadu)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Custas informatziones s'imbiant cun s'email e si mustrant a in s'istanca laterale a totus is persones chi partetzipant.", + "High-performance backend URL" : "URL de su motore de prestatziones artas", + "STUN server URL" : "URL de su serbidore STUN", + "STUN servers" : "Serbidores STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Unu serbidore STUN s'impreat pro determinare s'indiritzu IP pùblicu de is partetzipantes a secus de unu router.", + "{schema} scheme must be used with a domain" : "S'ischema {schema} si depet impreare cun unu domìniu", + "{option1} and {option2}" : "{option1} e {option2}", + "{option} only" : "{option} isceti", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Candidados ICE bàlidos torrados dae su serbidore TURN", + "Error: No working ICE candidates returned by the TURN server" : "Errore: Perunu candidadu ICE funtzionante torradu dae su serbidore TURN", + "Testing whether the TURN server returns ICE candidates" : "Proende chi su serbidore TURN torrat candidados ICE", + "TURN server schemes" : "Ischemas de su serbidore TURN", + "TURN server URL" : "URL de su serbidore TURN", + "TURN server secret" : "Segretu de su serbidore TURN", + "TURN server protocols" : "Protocollos de su serbidore TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Unu serbidore TURN s'impreat pro imbiare su tràficu dae is partezipantes a secus de unu firewall. Chi is partetzipantes individuales non si podent connètere cun is àteras persones, est probàbile chi serbat unu serbidore TURN. Controlla {linkstart}custa documentatzione{linkend} pro is istrutziones de cunfiguratzione.", + "TURN servers" : "TURN serbidores", + "OK" : "AB", + "Confirm" : "Cunfirma", + "Reset" : "Ripristina", + "Cancel" : "Annulla", + "Back" : "In segus", + "Add participant \"{user}\"" : "Agiunghe partetzipante \"{user}\"", + "Loading …" : "Carrigamentu …", + "From" : "Dae", + "To" : "A", + "Calendar" : "Calendàriu", + "Attendees" : "Partetzipantes", + "Save" : "Sarva", + "Search participants" : "Chirca partetzipantes", + "No results" : "Perunu resurtadu", + "Raise hand" : "Àrtzia sa manu ", + "Raise hand (R)" : "Àrtzia sa manu (R)", + "Lower hand" : "Bàscia sa manu ", + "Lower hand (R)" : "Bàscia sa manu (R)", + "Speaker view" : "Bista de sa persone chi faeddat", + "Grid view" : "Bisione grìllia", + "This conversation is read-only" : "Custa resonada est de letura sola", + "Reload" : "Torra a carrigare", + "{nickName} raised their hand." : "{nickName} ant artziadu sa manu", + "A participant raised their hand." : "Una persona at artziadu sa manu", + "Collapse stripe" : "Istringhe sa tira", + "Expand stripe" : "Ammània sa tira", + "Previous page of videos" : "Pàgina de vìdeos pretzedente ", + "Next page of videos" : "Pàgina de vìdeos imbeniente", + "Connecting …" : "Connetende ...", + "Waiting for others to join the call …" : "Abetende chi is àteras persones intrent in sa mutida", + "You can invite others in the participant tab of the sidebar" : "Podes invitare àteras persones in s'ischeda dei partetzipantes de s'istanca laterale", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Podes invitare àteras persones in s'ischeda de is partetzipantes de s'istanca laterale o cumpartzende custu ligòngiu!", + "Share this link to invite others!" : "Cumpartzi custu link pro invitare àteras persones!", + "Copy link" : "Còpia ligòngiu", + "You are not allowed to enable audio" : "Non tenes su permissu de ativare àudio", + "Mute audio" : "Istuda s'àudiu", + "Mute audio (M)" : "Istuda s'àudiu (M)", + "Unmute audio" : "Allue s'àudiu ", + "Unmute audio (M)" : "Allue s'àudiu (M)", + "None" : "Perunu", + "Access to camera was denied" : "S'atzessu a sa càmera est istadu negadu", + "Error while accessing camera" : "Errore in s'atzessu a sa càmera", + "You have been muted by a moderator" : "Una persona chi moderat ti nd'at tiradu s'àudiu", + "You are not allowed to enable video" : "Non tenes su permissu pro ativare vìdeo", + "Disable video" : "Disativa vìdeu", + "Disable video (V)" : "Disativa vìdeu (V)", + "Enable video" : "Ativa vìdeu", + "Enable video (V)" : "Ativa vìdeu (V)", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Ativa vìdeu (V) - Sa connessione s'at a blocare pro pagu tempus cando s'ativat su vìdeu pro sa prima borta", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Ativa vìdeu - Sa connessione s'at a blocare pro pagu tempus cando s'ativat su vìdeu pro sa prima borta", + "You" : "Tue", + "Mute" : "Tira s'àudiu", + "Show screen" : "Mustra s'ischermu", + "Stop following" : "No sigas prus", + "Collapse" : "Cuntrae", + "You need to be logged in to upload files" : "Depes fàghere s'atzessu pro carrigare is archìvios", + "Drop your files to upload" : "Iscapa is archìvios pro ddus carrigare", + "Conversation messages" : "Messàgios de sa resonada", + "Scroll to bottom" : "Iscurre a bàsciu", + "Post message" : "Pùblica messàgiu", + "Favorite" : "Preferidu", + "Date:" : "Data:", + "Hide details" : "Cua detàllios", + "Show details" : "Mustra detàllios", + "Error while updating conversation description" : "Errore in s'agiornamentu de sa descritzione de sa resonada", + "Edit conversation description" : "Modìfica sa descritzione de sa resonada", + "Enter a description for this conversation" : "Inserta una descritzione pro custa resonada", + "Disable" : "Disativa", + "Enable" : "Ativa", + "Choose" : "Sèbera", + "The file must be a PNG or JPG" : "S'archìviu depet èssere unu PNG o JPG", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Ogni borta chi is permissos sunt modificados in custa setzione, is permissos personalizados assignados in pretzedèntzia a partetzipantes individuales ant a èssere pèrdidos.", + "Restricted" : "Limitadu", + "Conversation settings" : "Cunfiguratzione de sa resonada", + "Personal" : "Personale", + "Matterbridge" : "Matterbridge", + "Danger zone" : "Zona de perìgulu", + "Leave conversation" : "Lassa sa resonada", + "Delete conversation" : "Cantzella sa resonada", + "Do you really want to delete \"{displayName}\"?" : "A beru boles cantzellare \"{displayName}\"?", + "Error while deleting conversation" : "Errore in sa cantzelladura de sa resonada", + "Delete all chat messages" : "Cantzella totu is messàgios de is tzarradas", + "Do you really want to delete all messages in \"{displayName}\"?" : "A beru boles cantzellare totu is messàgios in \"{displayName}\"?", + "Error while clearing chat history" : "Errore limpiende s'istòria de sa tzarrada", + "Be careful, these actions cannot be undone." : "Atentzione, custas atziones non si podent annullare", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Lassada una resonada, pro torrare a intrare in una resonada serrada, tocat de tènnere s'invitu. Si podet semper torrare a intrare in una resonada aberta.", + "Permanently delete this conversation." : "Cantzella in manera definitiva custa resonada.", + "Delete chat messages" : "Cantzella is messàgios de is tzarradas", + "Permanently delete all the messages in this conversation." : "Cantzella in manera definitiva totu is messàgios in custa resonada.", + "Password protection" : "Bardiadura de sa crae", + "Set a password" : "Cunfigura una crae", + "Change password" : "Càmbia crae", + "Enter new password" : "Inserta sa crae noa", + "Save password" : "Sarva sa crae", + "Resend invitations" : "Torra a imbiare is invitos", + "Error occurred when opening or limiting the conversation" : "B'at àpidu un'errore aberrende o limitende sa resonada", + "Start time has been updated" : "S'ora de cumintzu est istada agiornada", + "Error occurred while updating start time" : "B'at àpidu un'errore agiornende s'ora de cumintzu", + "Meeting start time" : "Ora de cumintzu de sa riunione", + "Start time (optional)" : "Ora de cumintzu (a sèberu)", + "Error occurred when locking the conversation" : "B'at àpidu un errore blochende sa resonada", + "Error occurred when unlocking the conversation" : "B'at àpidu un'errore isblochende sa resonada", + "Lock conversation" : "Bloca resonada", + "This will also terminate the ongoing call." : "Cust'atzione at a acabare sa mutida in cursu puru.", + "Edit" : "Modìfica ", + "More information" : "Àteras informatziones", + "Delete" : "Cantzella", + "Add new bridged channel to current conversation" : "Agiunghe àteros canales collegados a custa resonada", + "unknown state" : "istadu disconnotu", + "running" : "in esecutzione", + "not running, check Matterbridge log" : "non in esecutzione, controlla su registru de Matterbridge", + "not running" : "non in esecutzione", + "Bridge saved" : "Collegamentu sarvadu", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Podes collegare canales dae àteros sistemas de messàgios istantàneos cun Matterbridge.", + "More info on Matterbridge" : "Àteras informatziones subra de Matterbridge", + "Enable bridge" : "Ativa collegamentu", + "Show Matterbridge log" : "Mustra su registru de Matterbridge", + "Log content" : "Cuntenutu de is registros", + "Notifications" : "Notìficas", + "Important conversation" : "Tzarrada importante", + "SIP dial-in is now enabled" : "S'atzessu SIP immoe est ativu", + "SIP dial-in is now disabled" : "S'atzessu SIP immoe est disativu", + "Error occurred when enabling SIP dial-in" : "B'at àpidu un'errore ativende s'atzessu SIP", + "Error occurred when disabling SIP dial-in" : "B'at àpidu un'errore disativende s'atzessu SIP", + "Join" : "Intra", + "Error while creating the conversation" : "Errore creende sa resonada ", + "Create a new conversation" : "Crea una resonada noa", + "Create conversation" : "Crea resonada", + "Enter your name" : "Inserta•nche su nùmene tuo", + "Log in" : "Intra", + "Mark as read" : "Marca comente lèghidu", + "Mark as unread" : "Marca comente non lèghidu", + "Remove from favorites" : "Boga dae preferidos", + "Add to favorites" : "Agiunghe a preferidos", + "You need to promote a new moderator before you can leave the conversation." : "Depes promòvere un'àtera persona chi moderet antis de lassare sa resonada.", + "Conversation actions" : "Atziones de is resonadas", + "Home" : "Pàgina printzipale", + "Unread" : "De lèghere", + "Alphabetically" : "Òrdine alfabèticu", + "No matches found" : "Peruna currispondèntzia agatada", + "No conversations found" : "Peruna resonada agatada", + "An error occurred while performing the search" : "B'at àpidu un'errore in sa chirca", + "Conversation list" : "Lista de is resonadas", + "Unread messages" : "Messàgios non lèghidos", + "New personal note" : "Nota personale noa", + "Clear filter" : "Lìmpia filtru", + "App settings" : "Cunfiguratzione de s'aplicatzione", + "Users" : "Utentes", + "Groups" : "Grupos", + "New private conversation" : "Resonada privada noa", + "Other sources" : "Àteras fontes", + "Open conversations" : "Aberre is resonadas", + "No search results" : "Perunu resurtadu de chirca", + "Users and groups" : "Utentes e grupos", + "New group conversation" : "Resonada de grupu noa", + "You are currently waiting in the lobby" : "Immoe ses abetende in s'intrada", + "Select microphone" : "Seletziona su micròfonu", + "No microphone available" : "Perunu micròfonu a disponimentu", + "Select camera" : "Seletziona sa fotocàmera", + "No camera available" : "Peruna fotocàmera a disponimentu", + "Test" : "Proa", + "Devices" : "Dispositivos", + "No audio" : "Àudiu perunu", + "No camera" : "Peruna fotocàmera", + "Calls are not supported in your browser" : "Is mutidas no sunt suportadas in su navigadore tuo", + "Access to microphone is only possible with HTTPS" : "S'atzessu a su micròfonu si podet fàghere isceti cun HTTPS", + "Access to microphone was denied" : "S'atzessu a su micròfonu est istadu negadu", + "Error while accessing microphone" : "Errore in s'atzessu a su micròfonu", + "Access to camera is only possible with HTTPS" : "S'atzessu a sa càmera si podet fàghere isceti cun HTTPS", + "Invalid path selected" : "Percursu seletzionadu non bàlidu", + "Upload" : "Càrriga", + "Files" : "Archìvios", + "24 hours" : "24 oras", + "A reminder was successfully set at {datetime}" : "Apuntu cunfiguradu pro {datetime}", + "Reply" : "Risponde", + "More actions" : "Àteras atziones", + "Set reminder" : "Cunfigura un'apuntu", + "Reply privately" : "Risponde in privadu", + "Copy message link" : "Còpia su ligòngiu de su messàgiu", + "Go to file" : "Bae a s'archìviu", + "Forward message" : "Torra a imbiare su messàgiu", + "Translate" : "Borta", + "Set custom reminder" : "Cunfigura un'apuntu personalizadu", + "Choose a conversation to forward the selected message." : "Sèbera una resonada pro torrare a imbiare su messàgiu seletzionadu.", + "Error while forwarding message" : "Errore torrende a imbiare su messàgiu", + "The message has been forwarded to {selectedConversationName}" : "Messàgiu torradu a imbiare a {selectedConversationName}", + "Dismiss" : "Iscarta", + "Go to conversation" : "Bae a sa resonada", + "Message read by everyone who shares their reading status" : "Messàgiu lèghidu dae totu is persones chi cumpartzint s'istadu de letura issoro", + "Message sent" : "Messàgiu imbiadu", + "Deleting message" : "Cantzellende su messàgiu", + "Message deleted successfully" : "Messàgiu cantzelladu", + "Message could not be deleted because it is too old" : "Su messàgiu non si podet cantzellare ca est tropu betzu", + "Only normal chat messages can be deleted" : "Si podent cantzellare isceti is messàgios de tzarrada normales", + "An error occurred while deleting the message" : "B'at àpidu un'errore cantzellende su messàgiu", + "Your browser does not support playing audio files" : "Su serbidore tuo non suportat sa riprodutzione de archìvios àudio", + "Contact" : "Cuntata", + "{stack} in {board}" : "{stack} in {board}", + "Deck Card" : "Ischeda de Deck", + "Remove {fileName}" : "Boga•nche {fileName}", + "Sending message" : "Imbiende su messàgiu", + "Failed to send the message. Click to try again" : "No at fatu a imbiare su messàgiu. Incarca pro torrare a proare", + "Not enough free space to upload file" : "Non b'at logu lìberu pro carrigare s'archìviu", + "You cannot send messages to this conversation at the moment" : "Non podes imbiare messàgios in custa resonada in custu momentu", + "No messages" : "Perunu messàgiu", + "Unpin" : "No apicare", + "Create a new group conversation" : "Crea unu grupu de resonada nou", + "Add participants" : "Agiunghe partetzipantes", + "Allow guests to join via link" : "Permite a is persones invitadas de intrare cun unu ligòngiu", + "Enter password" : "Inserta crae", + "This conversation has been locked" : "Custa resonada est istada blocada", + "No permission to post messages in this conversation" : "Perunu permissu pro publicare messàgios in custa resonada", + "Joining conversation …" : "Intrende in sa resonada", + "Send message" : "Imbia messàgiu", + "The participant will not be notified about new messages" : "Su partetzipante no ant a retzire notìficas de is messàgios noos", + "Participants will not be notified about new messages" : "Is partetzipantes no ant a retzire notìficas de is messàgios noos", + "File to share" : "Archìviu de cumpartzire", + "Add emoji" : "Agiunghe carighedda", + "Share from Files" : "Cumpartzi dae Archìvios", + "Share files to the conversation" : "Cumpartzi archìvios in sa resonada", + "Upload from device" : "Càrriga dae su dispositivu", + "Create new poll" : "Crea unu sondàgiu nou", + "Record voice message" : "Registra messàgiu de boghe", + "End recording and send" : "Agabba sa registratzione e imbia", + "Dismiss recording" : "Iscarta sa registratzione", + "Access to the microphone was denied" : "S'atzessu a su mocròfonu est istadu negadu", + "Microphone either not available or disabled in settings" : "Su micròfonu no est a disponimentu o est disativadu in sa cunfiguratzione", + "Error while recording audio" : "Errore in sa registratzione de s'àudio", + "New file" : "Archìviu nou", + "Blank" : "Isbòidu", + "Create and share a new file" : "Crea e cumpartzi un'archìviu nou", + "Name of the new file" : "Nùmene de s'archìviu nou", + "Add more files" : "Agiunghe àteros archìvios", + "Send" : "Imbia", + "Settings" : "Cunfiguratzione", + "Anonymous poll" : "Sondàgiu anònimu", + "Results" : "Resurtados", + "Disable lobby" : "Disativa intrada", + "Settings for participant \"{user}\"" : "Cunfiguratzione pro partetzipante \"{user}\"", + "Participant \"{user}\"" : "Partetzipante \"{user}\"", + "moderator" : "Chie moderat", + "bot" : "bot", + "guest" : "persone invitada", + "Raised their hand" : "An artziadu sa manu", + "Joined with video" : "Atzessu fatu cun vìdeu", + "Joined via phone" : "Atzessu fatu dae telèfonu", + "Joined with audio" : "Atzessu fatu cun àudio", + "Remove group and members" : "Boga·nche grupu e partetzipantes", + "Remove participant" : "Boga·nche partetzipante", + "Dial-in PIN" : "PIN de atzessu", + "Demote from moderator" : "Lea su permissu de moderare a ", + "Promote to moderator" : "Autoriza a moderare", + "Resend invitation" : "Torra a imbiare s'invitu", + "Reset custom permissions" : "Riprìstina is permissos personalizados", + "Remove" : "Boga", + "Add users or groups" : "Agiunghe utentes o grupos", + "Add users" : "Agiunghe utentes", + "Add groups" : "Agiunghe grupos", + "Add other sources" : "Agiunghe àteras fontes", + "Add emails" : "Agiunghe email", + "Integrations" : "Integratziones", + "Searching …" : "Chirchende …", + "Search for more users" : "Chirca àteras utèntzias", + "Search or add participants" : "Chirca o agiunghe partetzipantes", + "An error occurred while adding the participants" : "B'at àpidu un'errore agiunghende is partetzipantes", + "Participants" : "Partetzipantes", + "Open chat" : "Aberi tzarrada", + "You have new unread messages in the chat." : "Tenes messàgios non lèghidos noos in sa tzarrada.", + "You have been mentioned in the chat." : "T'ant mentovadu in sa tzarrada.", + "Chat" : "Tzarrada", + "Details" : "Detàllios", + "No results found" : "Perunu resurtadu agatadu", + "Load more results" : "Càrriga àteros resurtados", + "Projects" : "Progetos", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Collega a una resonada", + "Search conversations or users" : "Chirca resonadas o utentes", + "Select conversation" : "Seletziona resonada", + "Error while saving sounds setting" : "Errore sarvende sa cunfiguratzione de is sonos", + "Play sounds when participants join or leave a call" : "Ativa is sonos cando is partetzipantes intrant o lassant una mutida", + "Notification settings" : "Cunfiguratzione de notìficas", + "Default language" : "Limba predefinida", + "Select location for attachments" : "Seletziona sa positzione pro is alligongiados", + "Error while setting attachment folder" : "Errore in sa cunfiguratzione de sa cartella de is alligongiados", + "Error while setting read status privacy" : "Errore in sa cunfiguratzione de sa riservadesa de s'istadu de letura", + "Privacy" : "Riservadesa", + "Attachments folder" : "Cartella de alligongiados", + "Search" : "Chirca", + "Focus the chat input" : "Ativa sa digitatzione de sa tzarrada", + "Unfocus the chat input to use shortcuts" : "Disativa sa digitatzione de sa tzarrada pro impreare is curtziadòrgios", + "Shortcuts while in a call" : "Curtziadòrgios in s'interis de una mutida", + "Microphone on and off" : "Micròfonu allutu e istudadu", + "Raise or lower hand" : "Àrtzia o bàscia sa manu", + "Push to talk or push to mute" : "Ispinghe pro faeddare o ispinghe pro tirare s'àudio", + "Start call" : "Cumintza mutida", + "You will be able to join the call only after a moderator starts it." : "As a pòdere intrare in una mutida isceti a pustis chi una persone chi moderat dda cumintzet.", + "Recording" : "Registratzione", + "You are not allowed to enable screensharing" : "Non tenes su permissu de ativare sa cumpartzidura de s'ischermu", + "No screensharing" : "Peruna cumpartzidura de ischermu", + "Screensharing options" : "Sèberos de sa cumpartzidura de s'ischermu", + "Enable screensharing" : "Ativa sa cumpartzidura de s'ischermu", + "Bad sent video and screen quality." : "Calidade mala de su vìdeu e de s'ischermu imbiados.", + "Bad sent screen quality." : "Calidade mala de s'ischermu imbiadu.", + "Bad sent video quality." : "Calidade mala de su vìdeu imbiadu.", + "Bad sent audio, video and screen quality." : "Calidade de s'àudiu, de su vìdeu e de s'ischermu imbiados.", + "Bad sent audio and screen quality." : "Calidade mala de s'àudiu e de s'ischermu imbiados.", + "Bad sent audio and video quality." : "Calidade mala de s'àudiu e de su vìdeu imbiados.", + "Bad sent audio quality." : "Calidade mala de s'àudiu imbiadu.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non bidant s'ischermu tuo.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti bidant.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti bidant nen ti cumprendant. Pro megiorare sa situatzione, proa a disativare s'ischermu tuo in s'interis chi faghes una cumpartzidura.", + "Disable screenshare" : "Disativa sa cumpartzidura de s'ischermu", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti cumprendant nen ti bidant. Pro megiorare sa situatzione, proa a disativare su vìdeu.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Sa connessione o s'elaboradore tuo sunt ocupados e est possìbile chi is partetzipantes non ti cumprendant.", + "Screen sharing is not supported by your browser." : "Sa cumpartzidura de s'ischermu non est suportada dae su navigadore tuo", + "Screen sharing requires the page to be loaded through HTTPS." : "Pro sa cumpartzidura de s'ischermu tocat a carrigare sa pàgina cun HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Pro Screensharing tocat a carrigare sa pàgina cun HTTPS", + "An error occurred while starting screensharing." : "B'at àpidu un'errore incarrerende sa cumpartzidura de s'ischermu.", + "Show your screen" : "Mustra s'ischermu tuo", + "Stop screensharing" : "Firma sa cumpartzidura de s'ischermu", + "Mute others" : "Tira s'àudio a àtere", + "Keep" : "Mantene", + "Select a region" : "Seletziona una regione", + "Message without mention" : "Messàgiu chena mentovu", + "Mention myself" : "Mentova a mie etotu", + "Join a different conversation or start a new one." : "Aderi a una resonada diferente o cumintza·nde una noa.", + "The conversation does not exist" : "Sa resonada no esistit", + "Join a conversation or start a new one!" : "Intra in una resonada o cumintza•nde una noa!", + "Duplicate session" : "Dùplica sa sessione", + "Join a conversation or start a new one" : "Intra in una resonada o cumintza•nde una noa", + "Nextcloud URL" : "URL de Nextcloud", + "Nextcloud user" : "Utente de Nextcloud", + "User password" : "Crae de s'utente", + "Talk conversation" : "Resonada de Talk", + "Skip TLS verification" : "Sàrtia sa verìfica TLS", + "Matrix server URL" : "URL de su serbidore de Matrix", + "User" : "Utente", + "Matrix channel" : "Canale de Matrix", + "Mattermost server URL" : "URL de su serbidore de Mattermost", + "Mattermost user" : "Utente de Mattermost", + "Team name" : "Nùmene de su grupu", + "Channel name" : "Nùmene de su canale", + "Rocket.Chat server URL" : "URL de su serbidore de Rocket.Chat", + "User name or email address" : "Nùmene de s'utente o indiritzu email", + "Rocket.Chat channel" : "Canale de Rocket.Chat", + "Zulip server URL" : "URL de su serbidore de Zulip", + "Bot user name" : "Nùmene de utente de su bot", + "Bot API key" : "Crae API de su programma automàticu", + "Zulip channel" : "Canale de Zulip", + "API token" : "Token API", + "Slack channel" : "Canale de Slack", + "Server ID or name" : "ID o nùmene de su serbidore ", + "Channel" : "Canale", + "Login" : "Atzessu", + "Chat ID" : "ID de sa tzarrada", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL de su serbidore IRC (esèmpiu: chat.freenode.net:6667)", + "Nickname" : "Nùmene", + "Connection password" : "Crae de connessione", + "IRC channel" : "Canale IRC", + "Channel password" : "Crae de su canale", + "NickServ nickname" : "Nùmene de NickServ", + "NickServ password" : "Crae de NickServ", + "Use TLS" : "Imprea TLS", + "Use SASL" : "Imprea SASL", + "Tenant ID" : "ID de incuilinu", + "Client ID" : "ID de cliente", + "Team ID" : "ID de grupu", + "Thread ID" : "ID de filu", + "XMPP/Jabber server URL" : "URL de su serbidore XMPP/Jabber", + "MUC server URL" : "URL de su serbidore MUC", + "Jabber ID" : "ID de Jabber", + "Media" : "Media", + "Polls" : "Sondàgios", + "Locations" : "Positziones", + "Audio" : "Àudio", + "Show all files" : "Mustra totu is documentos", + "Group" : "Grupu", + "You: {lastMessage}" : "Tue: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ses proende a intrare in una resonada cun una sessione ativa in un'àtera ventana o dispositivu. In custu momentu cust'atzione no est suportada dae Nextcloud Talk. Ite boles fàghere?", + "Leave this page" : "Lassa custa pàgina", + "Join here" : "Intra inoghe", + "Post to a conversation" : "Pùblica in una resonada", + "Post to conversation" : "Pùblica in sa resonada", + "Error while clearing conversation history" : "Errore limpiende s'istòria de sa resonada", + "Error occurred while allowing guests" : "B'at àpidu un'errore autorizende is persones invitadas", + "Error occurred while disallowing guests" : "B'at àpidu un'errore refudende is persones invitadas", + "Error occurred when restricting the conversation to moderator" : "B'at àpidu un'errore limitende sa resonada a chie moderat", + "Error occurred when opening the conversation to everyone" : "B'at àpidu un'errore aberrende sa resonada a totus", + "Conversation password has been saved" : "Sa crae de sa resonada est istada sarvada", + "Conversation password has been removed" : "Sa crae de sa resonada nch'est istada bogada", + "Error occurred while saving conversation password" : "B'at àpidu un'errore sarvende sa crae de sa resonada", + "Could not post message: {errorMessage}" : "No at fatu a publicare su messàgiu: {errorMessage}", + "An error occurred while fetching the participants" : "B'at àpidu un'errore in su recùperu de is partetzipantes", + "Could not send invitation to {actorId}" : "No at fatu a imbiare s'invitu a {actorId}.", + "Invitations sent" : "Invitos imbiados", + "Error occurred when sending invitations" : "B'at àpidu un'errore imbiende is invitos", + "Error while uploading file \"{fileName}\"" : "Errore carrighende s'archìviu \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Non b'at logu lìberu pro carrigare s'archìviu \"{fileName}\"", + "You are not allowed to share files" : "Non tenes su permissu de cumpartzire archìvios", + "Error while sharing file" : "Errore in sa cumpartzidura de s'archìviu", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Su navigadore chi ses impreende no est suportadu totu dae Nextcloud. Imprea s'ùrtima versione de Mozilla Firefox, Microsoft Edge, Google Chrome, Opera o Apple Safari.", + "Lost connection to signaling server. Trying to reconnect." : "Connessione pèrdida cun su serbidore de signalatzione. Proende a torrare a connètere", + "Please reload the page." : "Torra a carrigare sa pàgina.", + "Do not disturb" : "No istorbes", + "Away" : "Foras", + "Microphone {number}" : "Micròfonu {number}", + "Camera {number}" : "Fotocàmera {number}", + "Speaker {number}" : "Altoparlante {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Parret chi siast faeddende cun s'àudio istudadu, allue•ddu pro chi is àteras persones ti potzant intèndere", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "No faghet a istabilire una connessione cun a su mancu una persone. In custu casu, unu serbidore TURN podet agiudare. Pregonta a s'amministratzione de nde cunfigurare unu sighende {linkstart}custa documentatzione{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Cust'atividade est istentende prus de su tempus prevèdidu. Is permissos multimediales sunt giai istados atzetados (o negados)? Chi eja, torra a abèrrere su navigadore, ca àudio e vìdeo no sunt funtzionende", + "Access to microphone & camera is only possible with HTTPS" : "S'atzessu a micròfonu & fotocàmera si podet fàghere isceti cun HTTPS", + "Please move your setup to HTTPS" : "Càmbia sa cunfiguratzione a HTTPS", + "Access to microphone & camera was denied" : "S'atzessu a micròfonu &fotocàmera est istadu negadu", + "WebRTC is not supported in your browser" : "WebRTC no est suportadu dae su navigadore tuo", + "Please use a different browser like Firefox or Chrome" : "Imprea un'àteru navigadore, comente Firefox o Chrome", + "Error while accessing microphone & camera" : "Errore in s'atzessu a micròfonu e fotocàmera", + "%s Talk on your mobile devices" : "%s Talk in is dispositivos mòbiles tuos", + "Join conversations at any time, anywhere, on any device." : "Intra in una resonada in cada momentu, dae cada parte, in cada dispositivu", + "Android app" : "Aplicatzione Android", + "iOS app" : "Aplicatzione iOS", + "__language_name__" : "sardu", + "Tasks" : "Fainas", + "Notes" : "Notas", + "Set reminder for later today" : "Cunfigura un'apuntu pro luego", + "Set reminder for tomorrow" : "Cunfigura un'apuntu pro cras", + "Set reminder for this weekend" : "Cunfigura un'apuntu pro custu fine de chida", + "Set reminder for next week" : "Cunfigura un'apuntu pro chida chi benit", + "Talk recording from {time} ({conversation})" : "Registratzione de boghe {time} ({conversation})", + "Your privacy setting has been saved" : "Sa cunfiguratzione de riservadesa tua est istada sarvada", + "Failed to save sounds setting" : "Non at fatu a sarvare sa cunfiguratzione de is sonos", + "Sounds setting saved" : "Cunfiguratzione de is sonos sarvada", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "As fatu s'atzessu in sa resonada in un'àtera ventana o dispositivu. In custu momentu cust'atzione no est suportada dae Nextcloud Talk tando sa sessione est istada serrada." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/sk.js b/l10n/sk.js new file mode 100644 index 0000000..9f1cf19 --- /dev/null +++ b/l10n/sk.js @@ -0,0 +1,2256 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "konverzácia", + "(Duration %s)" : "(Trvanie %s)", + "You attended a call with {user1}" : "Zúčastnili ste sa hovoru s {user1}", + "_%n guest_::_%n guests_" : ["%n hosť","%n hostí","%n hostí","%n hostí"], + "You attended a call with {user1} and {user2}" : "Zúčastnili ste sa hovoru s {user1} a {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Zúčastnili ste sa hovoru s {user1}, {user2} a {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Zúčastnili ste sa hovoru s {user1}, {user2}, {user3} a {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Zúčastnili ste sa hovoru s {user1}, {user2}, {user3}, {user4} a {user5}", + "_%n other_::_%n others_" : ["%n ďalší","%n ďalší","%n ďalších","%niní"], + "{actor} invited you to {call}" : "{actor} Vás pozval na {call}", + "You were invited to a conversation or had a call" : "Boli ste pozvaní na rozhovor alebo vám niekto volal", + "Other activities" : "Iné aktivity", + "Talk" : "Talk /Rozhovor/", + "Guest" : "Hosť", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Vitajte v Nextcloud Talk /Rozhovore/!\nV tejto konverzácii vás budeme informovať o nových funkciách, ktoré sú dostupné v aplikácii Nextcloud Talk /Rozhovor/.", + "## New in Talk %s" : "## Novinky v Talk /Rozhovore/ 1%s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge a Safari sa teraz môžu využívať na audio a video hovory", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Rozhovory typu jeden na jedného sú teraz trvalé a už ich nemožno náhodou zmeniť na skupinové rozhovory. Keď jeden z účastníkov opustí rozhovor, tento sa už automaticky neodstráni. Rozhovor sa odstráni zo servera, iba ak ho opustia obaja účastníci", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Teraz môžete upozorniť všetkých účastníkov uverejnením „@all“ do četu", + "- With the \"arrow-up\" key you can repost your last message" : "- Pomocou tlačidla „šípka nahor“ môžete znova odoslať svoju poslednú správu", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Aplikácia Talk /Rozhovor/ teraz disponuje príkazmi pre aplikáciu. To, či správca vášho Nextcloud nejaké nastavil, zistíte zaslaním správy s textom „/ help“", + "- With projects you can create quick links between conversations, files and other items" : "- Pomocou projektov môžete vytvárať prepojenia medzi konverzáciami, súbormi a inými položkami", + "- You can now mention guests in the chat" : "- Teraz môžete v rozhovore „spomenúť“ hostí", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konverzácie teraz môžu mať čakáreň. To umožní moderátorom pripojiť sa k četu alebo rozhovoru s predstihom na prípravu schôdzky, zatiaľ čo ostatní používatelia a hostia čakajú", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Teraz môžete odpovedať na správy priamo a poskytnúť tak ostatným predstavu o kontexte vašej správy", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Vyhľadávanie v rozhovoroch a účastníkoch teraz odfiltruje aj vaše existujúce rozhovory, čím sa oveľa ľahšie nájdu predchádzajúce rozhovory", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Po nainštalovaní aplikácie Kruhy môžete do konverzácií pridať vlastné skupiny používateľov", + "- Check out the new grid and call view" : "- Vyskúšajte nové zobrazenie v mriežke a hovorov", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Teraz môžete nahrávať a presúvať súbory priamo z vášho zariadenia do četu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Zdieľané súbory sa teraz otvárajú priamo v zobrazení četu pomocou aplikácií prehliadača", + "- You can now search for chats and messages in the unified search in the top bar" : "- Teraz môžete hľadať čety a správy v zjednotenom vyhľadávaní v hornej lište", + "- Spice up your messages with emojis from the emoji picker" : "- Okoreňte svoje správy emotikonami vďaka dialógu na ich výber", + "- You can now change your camera and microphone while being in a call" : "- Počas hovoru môžete teraz zmeniť kameru a mikrofón", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Poskytnite svojim konverzáciám určitý kontext s popisom a otvorte ich, aby ich prihlásení používatelia mohli nájsť a pripojiť sa", + "- See a read status and send failed messages again" : "- Uvidíte stav načítania a znova pošlete správy, ktoré zlyhali", + "- Raise your hand in a call with the R key" : "- zdvihnite ruku v hovore pomocou klávesy R", + "- Join the same conversation and call from multiple devices" : "- Pripojte sa k tej istej konverzácii a telefonujte z viacerých zariadení", + "- Send voice messages, share your location or contact details" : "- Posielajte hlasové správy, zdieľajte svoju polohu alebo kontaktné údaje", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Pridajte skupiny do konverzácie a noví členovia skupiny sa automaticky pridajú ako účastníci", + "- A preview of your audio and video is shown before joining a call" : "- Pred pripojením k hovoru sa zobrazí ukážka vášho zvuku a videa", + "- You can now blur your background in the newly designed call view" : "- Teraz môžete rozmazať pozadie v novom zobrazení hovoru", + "- Moderators can now assign general and individual permissions to participants" : "- Moderátori môžu teraz prideľovať účastníkom všeobecné a individuálne práva", + "- You can now react to chat messages" : "- Teraz môžete reagovať na správu v čete", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na bočnom paneli teraz nájdete prehľad najnovších zdieľaných položiek", + "- Use a poll to collect the opinions of others or settle on a date" : "- Použite anketu na zhromaždenie názorov ostatných alebo sa dohodnite na rande", + "- Configure an expiration time for chat messages" : "- Nakonfigurujte čas vypršania platnosti četových správ", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Začnite hovory bez upozorňovania ostatných vo veľkých rozhovoroch. Po začatí hovoru môžete odosielať upozornenia individuálne.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Posielajte četové správy bez upozornenia príjemcov v prípade, že to nie je naliehavé", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emotikony môžu byť automaticky doplnené napísaním \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Prepojte rôzne položky pomocou nového inteligentného vyberania tým, že napíšete \"/\".", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderátori odteraz môžu vytvoriť oddelené miestnosti (vyžaduje vysokovýkonný backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Hovory môžu byť odteraz zaznamenané (vyžaduje vysokovýkonný backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Konverzácie môžu teraz mať ako ikonu avatara alebo emotikon.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuálne pozadia sú teraz dostupné spolu s rozmazaným pozadím pri videohovoroch.", + "- Reactions are now available during calls" : "- Reakcie sú teraz dostupné počas hovorov", + "- Typing indicators show which users are currently typing a message" : "- Indikátory písania ukazujú, ktorí užívatelia práve píšu správu", + "- Groups can now be mentioned in chats" : "- Skupiny môžu teraz byť spomínané v chatoch", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Hovory sú automaticky prepisované na text, ak je zaregistrovaná aplikácia poskytujúca prepisovanie na text", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatovacie správy môžu byť preložené, ak je zaregistrovaná aplikácia pre poskytovanie prekladov", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** je teraz možné používať v _chatovacích_ správach", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooky sú teraz k dispozícii na implementáciu botov. Viac informácií nájdete v dokumentácii https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nastavte si pripomienku na správu v chate, aby ste boli neskôr znovu upozornení", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Použite konverzáciu **Poznámka pre seba**, aby ste si robili poznámky a sprístupňovali informácie medzi vašimi zariadeniami", + "- Captions allow to send a message with a file at the same time" : "- Titulky umožňujú súčasne odoslať správu so súborom", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video rečníka je teraz viditeľné pri sprístupňovaní obrazovky a reakcie na hovor sú animované", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Správy teraz môžu upravovať prihlásení autori a moderátori po dobu 6 hodín", + "- Unsent message drafts are now saved in your browser" : "- Koncepty neodoslaných správ sú odteraz uložené vo vašom prehliadači", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textové chatovanie je odteraz možné vykonávať federatívnym spôsobom s inými servermi Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderátori môžu zakázať účty a hostí, aby im zabránili znovu sa pripojiť ku konverzácii", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadchádzajúce hovory z prepojených udalostí v kalendári a náhrada za kolegu mimo kancelárie sa teraz zobrazujú v konverzáciách", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Hovory je teraz možné uskutočňovať federatívnym spôsobom s inými servermi Talk (vyžaduje vysokovýkonný backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Predstavujeme desktopového klienta Nextcloud Talk pre Windows, MacOS a Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zhrnutie nahrávok hovorov a neprečítaných správ v rozhovoroch pomocou asistenta Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Vylepšené stretnutia s rozpoznávaním hostí pozvaných prostredníctvom ich e-mailovej adresy, import zoznamov účastníkov, koncepty pre prieskumy a sťahovanie zoznamov účastníkov hovorov", + "- Archive conversations to stay focused" : "- Archivujte konverzácie, aby ste sa mohli sústrediť", + "- Schedule a meeting into your calendar from within a conversation" : "- Naplánujte si stretnutie do kalendára priamo z konverzácie", + "- Search for messages of the current conversation directly in the right sidebar" : "- Vyhľadajte správy aktuálnej konverzácie priamo v pravom bočnom paneli", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Na prvý pohľad uvidíte viac konverzácií s novým kompaktným zoznamom (Nutné povoliť v nastaveniach Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Konverzácie v schôdzkach teraz synchronizujú názov a popis z kalendára a sú skryté pomocou filtra vyhľadávania, kým sa nezačnú blížiť k začiatku", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označiť konverzácie ako citlivé v nastaveniach notifikácií, aby sa skryl obsah správy zo zoznamu konverzácií a notifikácií", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Aby ste dostávali push notifikácie počas režimu \"Nerušiť\", označte konverzácie ako dôležité", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Pridajte ďalších účastníkov do hovorov jeden na jedného a vytvorte nový skupinový hovor na mieste", + "- Use threads to keep your chat and discussions organized" : "- Použite vlákna na udržanie poriadku vo vašich chatoch a diskusiách", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Živé prepisy sú teraz k dispozícii počas hovoru (vyžaduje aplikáciu ExApp pre živý prepis a vysoko výkonný backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderátori teraz môžu pripnúť správy, aby zostali na vrchu.", + "- Schedule a message to send it at a later time" : "- Naplánovať správu na odoslanie neskôr.", + "_All %n participant_::_All %n participants_" : ["%n účastník","Všetci %n účastníci","Všetkých %n účastníkov","Všetkých %n účastníkov"], + "Talk updates ✅" : "Aktualizácie Talk /Rozhovor/ ✅", + "Reaction deleted by author" : "Reakcia bola vymazaná autorom", + "{actor} created the conversation" : "Používateľ {actor} vytvoril rozhovor", + "You created the conversation" : "Vytvorili ste konverzáciu", + "System created the conversation" : "Systém vytvoril konverzáciu", + "An administrator created the conversation" : "Administrátor vytvoril rozhovor.", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "Používateľ {actor} premenoval rozhovor z \"%1$s\" na \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Premenovali ste rozhovor z \"%1$s\" na \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrátor premenoval rozhovor z „%1$s“ na „%2$s“.", + "{actor} set the description" : "{actor} nastavil popis", + "You set the description" : "Nastavili ste popis", + "An administrator set the description" : "Administrátor nastavil popis", + "{actor} removed the description" : "{actor} odstránil popis", + "You removed the description" : "Odstránili ste popis", + "An administrator removed the description" : "Administrátor odstránil popis", + "You started a silent call" : "Začali ste tichý rozhovor", + "Outgoing silent call" : "Odchodzí hovor bez vyzváňania", + "{actor} started a silent call" : "{actor} začal tichý rozhovor", + "Incoming silent call" : "Príchodzí hovor bez vyzváňania", + "You started a call" : "Začali ste hovor", + "Outgoing call" : "Odchodzí hovor", + "{actor} started a call" : "{actor} začal hovor", + "Incoming call" : "Prichádzajúci hovor", + "{actor} joined the call" : "{actor} sa pripojil k hovoru", + "You joined the call" : "Pridali ste sa k hovoru", + "{actor} left the call" : "{actor} odišiel z hovoru", + "You left the call" : "Odišli ste z hovoru", + "{actor} unlocked the conversation" : "{actor} odomkol rozhovor", + "You unlocked the conversation" : "Odomkli ste rozhovor", + "An administrator unlocked the conversation" : "Administrátor odomkol rozhovor", + "{actor} locked the conversation" : "{actor} zamkol rozhovor", + "You locked the conversation" : "Uzamkli ste rozhovor", + "An administrator locked the conversation" : "Administrátor zamkol rozhovor", + "{actor} limited the conversation to the current participants" : "{actor} obmedzil konverzáciu na aktuálnych účastníkov", + "You limited the conversation to the current participants" : "Konverzáciu ste obmedzili na aktuálnych účastníkov", + "An administrator limited the conversation to the current participants" : "Administrátor obmedzil konverzáciu na aktuálnych účastníkov", + "{actor} opened the conversation to registered users" : "{actor} otvoril rozhovor registrovaným užívateľom", + "You opened the conversation to registered users" : "Otvorili ste rozhovor registrovaným užívateľom", + "An administrator opened the conversation to registered users" : "Administrátor otvoril rozhovor registrovaným užívateľom", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otvoril konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "You opened the conversation to registered users and users created with the Guests app" : "Otvorili ste konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrátor otvoril konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "The conversation is now open to everyone" : "Rozhovor je teraz otvorený pre každého", + "{actor} opened the conversation to everyone" : "{actor} otvoril rozhovor všetkým", + "You opened the conversation to everyone" : "Rozhovor ste otvorili všetkým", + "{actor} restricted the conversation to moderators" : "{actor} obmedzil rozhovor na moderátorov", + "You restricted the conversation to moderators" : "Rozhovor ste obmedzili na moderátorov", + "{actor} started breakout rooms" : "{actor} spustil vyhradené miestnosti", + "You started breakout rooms" : "Otvorili ste vyhradené miestnosti", + "{actor} stopped breakout rooms" : "{actor} zastavil(a) vyhradené miestnosti", + "You stopped breakout rooms" : "Uzatvorili ste vyhradené miestnosti", + "{actor} allowed guests" : "{actor} povolil hostí", + "You allowed guests" : "Povolili ste hostí", + "An administrator allowed guests" : "Administrátor povolil hostí", + "{actor} disallowed guests" : "{actor} zákazal hostí", + "You disallowed guests" : "Zakázali ste hostí", + "An administrator disallowed guests" : "Administrátor nepovolil hostí", + "{actor} set a password" : "{actor} nastavil heslo", + "You set a password" : "Nastavili ste heslo", + "An administrator set a password" : "Administrátor nastavil heslo", + "{actor} removed the password" : "{actor} zrušil heslo", + "You removed the password" : "Zrušili ste heslo", + "An administrator removed the password" : "Administrátor odstránil heslo", + "{actor} added {user}" : "{actor} pridal {user}", + "You joined the conversation" : "Pripojili ste sa k rozhovoru", + "{actor} joined the conversation" : "Používateľ {actor} sa pripojil k rozhovoru", + "You added {user}" : "Pridali ste {user}", + "{actor} added you" : "{actor} Vás pridal", + "An administrator added you" : "Pridal vás administrátor", + "An administrator added {user}" : "Administrátor pridal {user}", + "You left the conversation" : "Opustili ste rozhovor", + "{actor} left the conversation" : "Používateľ {actor} opustil rozhovor", + "{actor} removed {user}" : "{actor} odstránil {user}", + "You removed {user}" : "Odstránili ste {user}", + "{actor} removed you" : "{actor} Vás odstránil", + "An administrator removed you" : "Administrátor vás odstránil", + "An administrator removed {user}" : "Administrátor odstránil {user}", + "{actor} invited {federated_user}" : " {actor} pozval {federated_user}", + "You invited {federated_user}" : "Poslali ste pozvánku {federated_user}", + "You accepted the invitation" : "Prijali ste pozvánku", + "{actor} invited you" : "{actor} vás pozval", + "An administrator invited you" : "Administrátor vás pozval", + "An administrator invited {federated_user}" : "Administrátor pozval {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} akceptoval pozvánku", + "{actor} removed {federated_user}" : "{actor} odstránil {federated_user}", + "You removed {federated_user}" : "Odstránili ste {federated_user}", + "You declined the invitation" : "Toto pozvanie ste odmietli", + "An administrator removed {federated_user}" : "Administrátor odstránil {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odmietol pozvánku", + "{actor} added group {group}" : "{actor} pridal skupinu {group}", + "You added group {group}" : "Pridali ste skupinu {group}", + "An administrator added group {group}" : "Administrátor bol pridaný do skupiny {group}", + "{actor} removed group {group}" : "{actor} odstránil skupinu {group}", + "You removed group {group}" : "Odstránili ste skupinu {group}", + "An administrator removed group {group}" : "Administrátor odstránil skupinu {group}", + "{actor} added team {circle}" : "{actor} pridal tím {circle}", + "You added team {circle}" : "Pridali ste tím {circle}", + "An administrator added team {circle}" : "Administrátor pridal tím {circle}", + "{actor} removed team {circle}" : "{actor} odobral tím {circle}", + "You removed team {circle}" : "Odobrali ste tím {circle}", + "An administrator removed team {circle}" : "Administrátor odobral tím {circle}", + "{actor} added {phone}" : "{actor} pridal {phone}", + "You added {phone}" : "Pridali ste {phone}", + "An administrator added {phone}" : "Administrátor pridal {phone}", + "{actor} removed {phone}" : "{actor} odstránil {phone}", + "You removed {phone}" : "Odstránili ste {phone}", + "An administrator removed {phone}" : "Administrátor odstránil {phone}", + "{actor} promoted {user} to moderator" : "{actor} povýšil {user} na moderátora", + "You promoted {user} to moderator" : "Povýšili ste {user} na moderátora", + "{actor} promoted you to moderator" : "{actor} Vás povýšil na moderátora", + "An administrator promoted you to moderator" : "Administrátor vás zadal ako moderátora", + "An administrator promoted {user} to moderator" : "Administrátor zadal {user} ako moderátora", + "{actor} demoted {user} from moderator" : "{actor} odobral {user} moderovanie", + "You demoted {user} from moderator" : "Odobrali ste {user} moderovanie", + "{actor} demoted you from moderator" : "{actor} Vám odobral moderovanie", + "An administrator demoted you from moderator" : "Administrátor vás zrušil ako moderátora", + "An administrator demoted {user} from moderator" : "Administrátor zrušil {user} ako moderátora", + "{actor} shared a file which is no longer available" : "{actor} sprístupnil súbor ktorý už nie je dostupný", + "You shared a file which is no longer available" : "Sprístupnili ste súbor ktorý už nie je dostupný", + "File shares are currently not supported in federated conversations" : "Zdieľanie súborov v súčasnosti nie je podporované vo federatívnych konverzáciách", + "The shared location is malformed" : "Zdieľané umiestnenie je poškodené", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavil Matterbridge na synchronizáciu tejto konverzácie s inými rozhovormi.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavili ste Matterbridge na synchronizáciu tejto konverzácie s inými rozhovormi.", + "{actor} created thread {title}" : "{actor} vytvoril vlákno {title}", + "You created thread {title}" : "Vytvorili ste vlákno {title}", + "{actor} renamed thread {title}" : "{actor} premenoval vlákno {title}", + "You renamed thread {title}" : "Premenovali ste vlákno {title}", + "{actor} updated the Matterbridge configuration" : "{actor} aktualizoval nastavenie Matterbridge", + "You updated the Matterbridge configuration" : "Aktualizovali ste nastavenie Matterbridge.", + "{actor} removed the Matterbridge configuration" : "{actor} odstránil nastavenie Matterbridge", + "You removed the Matterbridge configuration" : "Odstránili ste nastavenie Matterbridge", + "{actor} started Matterbridge" : "{actor} spustil Matterbridge", + "You started Matterbridge" : "Spustili ste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zastavil Matterbridge", + "You stopped Matterbridge" : "Zastavili ste Matterbridge", + "{actor} deleted a message" : "{actor} zmazal správu", + "You deleted a message" : "Zmazali ste správu", + "{actor} edited a message" : "{actor} upravil správu", + "You edited a message" : "Upravili ste správu", + "{actor} pinned a message" : "{actor} pripol správu", + "You pinned a message" : "Pripli ste správu", + "{actor} unpinned a message" : "{actor} odopol správu", + "Message was automatically unpinned" : "Správa bola automaticky odopnutá", + "You unpinned a message" : "Odopli ste správu", + "{actor} deleted a reaction" : "{actor} vymazal reakciu", + "You deleted a reaction" : "Odstránili ste reakciu", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nastavili ste platnosť správy na %n týždeň","Nastavili ste platnosť správy na %n týždne","Nastavili ste platnosť správy na %n týždňov","Nastavili ste platnosť správy na %n týždne"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nastavili ste platnosť správy na %n deň","Nastavili ste platnosť správy na %n dni","Nastavili ste platnosť správy na %n dní","Nastavili ste platnosť správy na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nastavili ste platnosť správy na %n hodinu","Nastavili ste platnosť správy na %n hodiny","Nastavili ste platnosť správy na %n hodín","Nastavili ste platnosť správy na %n hodiny"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nastavili ste platnosť správy na %n minútu","Nastavili ste platnosť správy na %n minúty","Nastavili ste platnosť správy na %n minút","Nastavili ste platnosť správy na %n minúty"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavil platnosť správy na %n týždeň","{actor} nastavil platnosť správy na %n týždne","{actor} nastavil platnosť správy na %n týždňov","{actor} nastavil platnosť správy na %n týždne"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavil platnosť správy na %n deň","{actor} nastavil platnosť správy na %n dni","{actor} nastavil platnosť správy na %n dní","{actor} nastavil platnosť správy na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavil platnosť správy na %n hodinu","{actor} nastavil platnosť správy na %n hodiny","{actor} nastavil platnosť správy na %n hodín","{actor} nastavil platnosť správy na %n hodiny"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavil platnosť správy na %n minútu","{actor} nastavil platnosť správy na %n minúty","{actor} nastavil platnosť správy na %n minút","{actor} nastavil platnosť správy na %n minúty"], + "{actor} disabled message expiration" : "{actor} zakázal vypršanie platnosti správy", + "You disabled message expiration" : "Zakázali ste vypršanie platnosti správy", + "{actor} cleared the history of the conversation" : "{actor} vyčistil históriu konverzácie", + "You cleared the history of the conversation" : "Vyčistili ste históriu konverzácie", + "{actor} set the conversation picture" : "{actor} nastavil(a) obrázok konverzácie", + "You set the conversation picture" : "Nastavili ste obrázok konverzácie", + "{actor} removed the conversation picture" : "{actor} odstránil(a) obrázok konverzácie", + "You removed the conversation picture" : "Odstránili ste obrázok konverzácie", + "{actor} ended the poll {poll}" : "{actor} ukončil anketu {poll}", + "You ended the poll {poll}" : "Ukončili ste anketu {poll}", + "{actor} started the video recording" : "{actor} spustil(a) nahrávanie videa", + "You started the video recording" : "Spustili ste nahrávania videa", + "{actor} stopped the video recording" : "{actor} zastavil(a) nahrávanie videa", + "You stopped the video recording" : "Zastavili ste nahrávanie videa", + "{actor} started the audio recording" : "{actor} spustil(a) nahrávanie zvuku", + "You started the audio recording" : "Spustili ste nahrávanie zvuku", + "{actor} stopped the audio recording" : "{actor} zastavil nahrávanie zvuku", + "You stopped the audio recording" : "Zastavili ste nahrávanie zvuku", + "The recording failed" : "Nahrávanie skončilo s chybou", + "Someone voted on the poll {poll}" : "Niekto hlasoval v ankete {poll}", + "Message deleted by author" : "Správa vymazaná autorom", + "Message deleted by {actor}" : "Správa vymazaná od {actor}", + "Message deleted by you" : "Správu ste odstránili", + "Deleted user" : "Zmazaný užívateľ", + "Unknown number" : "Neznáme číslo", + "Administration" : "Administrácia", + "System" : "Systém", + "%s (guest)" : "%s (guest)", + "Missed call" : "Zmeškaný hovor", + "Unanswered call" : "Neprijatý hovor", + "Call ended (Duration {duration})" : "Hovor skončil (Doba hovoru {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ukončil hovor (Doba hovoru {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Hovor s %n návštevníkom bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Hovor s %n návštevníkom bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ukončil hovor s %n návštevníkom (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1} ended (Duration {duration})" : "Hovor s {user1} bol ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ukončil hovor s {user1} (Trvanie {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} a {user2} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Hovor s {user1} a {user2} bol ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ukončil hovor s {user1} a {user2} (Trvanie {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2} a {user3} (Trvanie {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3} a {user4} (Trvanie {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3}, {user4} a {user5} (Trvanie {duration})", + "Message of {user} in {conversation}" : "Správa od {author} v {conversation}", + "Message of {user}" : "Správa od {user}", + "Message of a deleted user in {conversation}" : "Správa od zmazaného užívateľa v {conversation}", + "Talk conversations" : "Talk /Rozhovor/ konverzácia", + "Talk to %s" : "Talk /Rozhovor/ s %s", + "An error occurred. Please contact your administrator." : "Vyskytla sa chyba. Prosím, kontaktujte svojho správcu.", + "App disabled" : "Aplikácia vypnutá", + "Conversation subfolders are disabled" : "Podpriečinky konverzácie sú vypnuté", + "Storage quota exceeded" : "Kapacita úložiska prekročená", + "Could not prepare conversation folder" : "Nepodarilo sa pripraviť priečinok konverzácie", + "File not found" : "Súbor nenájdený", + "Path must point to a file" : "Cesta musí smerovať k súboru", + "File is not inside the conversation draft folder for this room" : "Súbor nie je vo vnútri priečinka konceptov konverzácie pre túto miestnosť", + "File is not shared, or shared but not with the user" : "Súbor nie je sprístupnený alebo je sprístupnený inému používateľovi", + "No account available to delete." : "Na odstránenie nie je k dispozícii žiadny účet.", + "Poll" : "Anketa", + "Password needs to be set" : "Heslo musí byť nastavené", + "Uploading the file failed" : "Nahrávanie súboru zlyhalo", + "No image file provided" : "Súbor obrázku nebol zadaný", + "File is too big" : "Súbor je príliš veľký", + "Invalid file provided" : "Zadaný neplatný súbor", + "Invalid image" : "Chybný obrázok", + "Unknown filetype" : "Neznámy typ súboru", + "Talk mentions" : "Zmienky v Talk /Rozhovore/", + "More conversations" : "Viac konverzácií", + "Say hi to your friends and colleagues!" : "Pozdravte svojich priateľov a kolegov!", + "No unread mentions" : "Žiadne neprečítané upozornenia", + "Call in progress" : "Prebieha hovor", + "You were mentioned" : "Boli ste spomenutí", + "Write to conversation" : "Napísať do rozhovoru", + "Writes event information into a conversation of your choice" : "Napíše informáce o udalosti do rozhovoru, ktorý vyberiete", + "Missing email field in header line" : "V riadku hlavičky chýba pole e-mailu", + "Following lines are invalid: %s" : "Nasledujúce riadky nie sú platné: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s ťa pozval/a na rozhovor \"%2$s\".", + "You were invited to conversation \"%s\"." : "Boli ste pozvaní na konverzáciu \"%s\".", + "Conversation invitation" : "Prizvanie ku konverzácii", + "Scheduled time" : "Naplánovaný čas", + "Description" : "Popis", + "You can also dial-in via phone with the following details" : "Môžete sa tiež pripojiť telefonicky pomocou nasledujúcich podrobností", + "Dial-in information" : "Informácia o prichádzajúcom volaní.", + "Meeting ID" : "ID schôdzky", + "Your PIN" : "Váš PIN", + "Click the button below to join the lobby now." : "Kliknite na tlačidlo nižšie a pripojte sa do čakárne teraz.", + "Click the link below to join the lobby now." : "Kliknite na nižšie uvedený odkaz a pripojte sa do čakárne teraz.", + "Join lobby for \"%s\"" : "Pripojiť sa do čakárne \"%s\"", + "Click the button below to join the conversation now." : "Kliknite na tlačidlo nižšie a pripojte sa k rozhovoru teraz.", + "Click the link below to join the conversation now." : "Kliknite na nižšie uvedený odkaz a pridajte sa do rozhovoru teraz.", + "Join \"%s\"" : "Pripojiť sa k \"%s\"", + "Meeting" : "Porada", + "Password request: %s" : "Požiadavka na heslo: %s", + "Private conversation" : "Súkromná konverzácia", + "Deleted user (%s)" : "Odstránený používateľ (%s)", + "Failed to upload call recording" : "Chyba pri nahrávaní záznamu hovoru", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Záznamový server zlyhal pri nahrávaní nahrávky hovoru {call}. Prosím, obráťte sa na administráciu.", + "Share to chat" : "Zdieľať v chate", + "Dismiss notification" : "Zatvoriť upozornenie", + "Call recording now available" : "Nahrávka hovoru je teraz dostupná", + "The recording for the call in {call} was uploaded to {file}." : "Záznam hovoru v {call} bol nahraný do {file}.", + "Transcript now available" : "Prepisovanie na text je teraz k dispozícii", + "The transcript for the call in {call} was uploaded to {file}." : "Záznam prepisu na text hovoru v {call} bol nahraný do {file}.", + "Failed to transcript call recording" : "Nepodarilo sa prepísať na text nahrávku hovoru", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Server sa nepodarilo prepísať na text nahrávku v súbore {file} pre hovor {call}. Prosím, obráťte sa na administráciu.", + "Call summary now available" : "Zhrnutie hovoru je pripravené", + "The summary for the call in {call} was uploaded to {file}." : "Zhrnutie hovoru {call} bolo nahrané do {file}.", + "Failed to summarize call recording" : "Nepodarilo sa vytvoriť zhrnutie záznamu hovoru", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru sa nepodarilo zhrnúť nahrávku v súbore {file} pre hovor v {call}. Prosím, kontaktujte administráciu.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} ťa pozval, aby si sa pripojil k miestnosti {roomName} na {remoteServer}", + "Accept" : "Prijať", + "Decline" : "Zahodiť", + "{user1} invited you to a federated conversation" : "Používateľ {user1} vás pozval ku federovanému rozhovoru", + "Someone reacted" : "Niekto reagoval", + "New message" : "Nová správa", + "Reminder" : "Pripomienka", + "Someone mentioned you" : "Niekto ťa spomenul", + "Notification" : "Oznámenie", + "Someone reacted in a private conversation" : "Niekto reagoval v súkromnej konverzácii", + "You received a message in a private conversation" : "Dostali ste správu v súkromnej konverzácii", + "Reminder in a private conversation" : "Pripomienka v súkromnej konverzácii", + "Someone mentioned you in a private conversation" : "Niekto ťa spomenul v súkromnej konverzácii", + "Notification in a private conversation" : "Oznámenie v súkromnej konverzácii", + "Reminder: You in {call}" : "Pripomienka: Vy v {call}", + "Reminder: {user} in {call}" : "Pripomienka: {user} v {call}", + "Reminder: Deleted user in {call}" : "Pripomienka: Odstránený používateľ v {call}", + "Reminder: {guest} (guest) in {call}" : "Pripomienka: {guest} (hosť) v {call}", + "Reminder: Guest in {call}" : "Pripomienka: Hosť v {call}", + "{user} reacted with {reaction}" : "{user} zareagoval s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} zareagoval s {reaction} v {call}", + "Deleted user reacted with {reaction} in {call}" : "Vymazaný užívateľ zareagoval s {reaction} v {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (hosť) zareagoval s {reaction} v {call}", + "Guest reacted with {reaction} in {call}" : "Hosť reagoval s {reaction} v {call}", + "{user} in {call}" : "{user} v {call}", + "Deleted user in {call}" : "Odstránený užívateľ v {call}", + "{guest} (guest) in {call}" : "{guest} (guest) v {call}", + "Guest in {call}" : "Hosť v {call}", + "{user} sent you a private message" : "{user} Vám poslal súkromnú správu", + "{user} sent a message in conversation {call}" : "Používateľ {user} odoslal správu v rozhovore {call}", + "A deleted user sent a message in conversation {call}" : "Odstránený používateľ odoslal správu v rozhovore {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (hosť) poslal(a) správu v rozhovore {call}", + "A guest sent a message in conversation {call}" : "Hosť odoslal správu v rozhovore {call}", + "{user} replied to your private message" : "{user} odpovedal(a) na vašu súkromnú správu", + "{user} replied to your message in conversation {call}" : "{user} odpovedal(a) na vašu správu v rozhovore {call}", + "A deleted user replied to your message in conversation {call}" : "Odstránený používateľ odpovedal na vašu správu v rozhovore {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (hosť) odpovedal(a) na vašu správu v rozhovore {call}", + "A guest replied to your message in conversation {call}" : "Hosť odpovedal na vašu správu v rozhovore {call}", + "Reminder: You in private conversation {call}" : "Pripomienka: Ste v súkromnej konverzácii {call}", + "Reminder: A deleted user in private conversation {call}" : "Pripomienka: Vymazaný užívateľ v súkromnej konverzácii {call}", + "Reminder: {user} in private conversation" : "Pripomienka: {user} v súkromnej konverzácii", + "Reminder: You in conversation {call}" : "Pripomienka: Ste v konverzácii {call}", + "Reminder: {user} in conversation {call}" : "Pripomienka: {user} v konverzácii {call}", + "Reminder: A deleted user in conversation {call}" : "Pripomienka: Vymazaný užívateľ v konverzácii {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Pripomienka: {guest} (hosť) v konverzácii {call}", + "Reminder: A guest in conversation {call}" : "Pripomienka: Hosť v konverzácii {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagoval {reaction} na vašu súkromnú správu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Odstránený používateľ reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (návštevník) reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Návštevník reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "{user} mentioned you in a private conversation" : "Používateľ {user} vás spomenul v súkromnom rozhovore", + "{user} mentioned group {group} in conversation {call}" : "{user} spomenul skupinu {group} v konverzácii {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} spomenul/a {team} v konverzácii {call}", + "{user} mentioned everyone in conversation {call}" : "Užívateľ {user} spomenul všetkých v rozhovore {call}", + "{user} mentioned you in conversation {call}" : "Používateľ {user} vás spomenul v rozhovore {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Odstránený užívateľ spomenul skupinu {group} v konverzácii {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Vymazaný používateľ spomenul tím {team} v konverzácii {call}.", + "A deleted user mentioned everyone in conversation {call}" : "Odstránený užívateľ spomenul všetkých v rozhovore {call}", + "A deleted user mentioned you in conversation {call}" : "Odstránený používateľ vás spomenul v rozhovore {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (hosť) spomenul skupinu {group} v konverzácii {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (hosť) spomenul tím {team} v rozhovore {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Užívateľ {guest} spomenul všetkých v rozhovore {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (hosť) vás spomenul v rozhovore {call}", + "A guest mentioned group {group} in conversation {call}" : "Hosť spomenul skupinu {group} v konverzácii {call}", + "A guest mentioned team {team} in conversation {call}" : "Hosť spomenul tím {team} v konverzácii {call}", + "A guest mentioned everyone in conversation {call}" : "Hosť vás spomenul v rozhovore {call}", + "A guest mentioned you in conversation {call}" : "Hosť vás spomenul v rozhovore {call}", + "View message" : "Zobraziť správu", + "Dismiss reminder" : "Zatvoriť pripomienku", + "View chat" : "Zobraziť čet", + "{user} invited you to a group conversation: {call}" : "Používateľ {user} vás prizval ku skupinovému rozhovoru: {call}", + "Join call" : "Pripojiť sa k hovoru", + "Answer call" : "Prijať hovor", + "{user} would like to talk with you" : "{user} by sa chcel s vami porozprávať", + "Call back" : "Zavolať späť", + "You missed a call from {user}" : "Zmeškali ste hovor od používateľa {user}", + "Accept call" : "Prijať hovor", + "Incoming phone call from {call}" : "Prichádzajúci hovor od {call}", + "You missed a phone call from {call}" : "Zmeškali ste hovor od {call}", + "A group call has started in {call}" : "Skupinový hovor začal v {call}", + "You missed a group call in {call}" : "Zmeškali ste skupinový hovor v {call}", + "{email} is requesting the password to access {file}" : "{email} požaduje heslo pre prístup k {súboru}", + "{email} tried to request the password to access {file}" : "{email} sa pokúsil požiadať o heslo pre prístup k {file}", + "Someone is requesting the password to access {file}" : "Niekto požaduje heslo pre prístup k {file}", + "Someone tried to request the password to access {file}" : "Niekto sa pokúsil požiadať o heslo pre prístup k {file}", + "Open settings" : "Otvoriť nastavenia", + "Hosted signaling server added" : "Hostovaný signalizačný server pridaný", + "The hosted signaling server is now configured and will be used." : "Teraz je nastavený hosťovaný signalizačný server a bude sa používať.", + "Hosted signaling server removed" : "Hostovaný signalizačný server odstránený", + "The hosted signaling server was removed and will not be used anymore." : "Hosťovaný signalizačný server bol odstránený a už sa nebude používať.", + "Hosted signaling server changed" : "Hostovaný signalizačný server zmenený", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Účet hosťovaného signalizačného servera zmenil stav z \"{oldstatus}\" na \"{newstatus}\".", + "pending" : "čakajúce", + "active" : "aktívne", + "expired" : "expirované", + "blocked" : "blokované", + "error" : "chyba", + "The certificate of {host} expires in {days} days" : "Certifikát pre {host} vyprší o {days} dní", + "The certificate of {host} expired" : "Certifikát pre {host} vypršal", + "Contact via Talk" : "Kontaktovať cez Talk /Rozhovor/", + "Open Talk" : "Otvoriť Talk /Rozhovor/", + "Default" : "Predvolené", + "Send messages, create threads, and start voice and video calls." : "Odosielajte správy, vytvárajte vlákna a začnite hlasové a videohovory.", + "Presentation" : "Prezentácia", + "Voice room" : "Hlasová miestnosť", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Priamo sa pripojte k hovoru, ideálne na rýchle aktualizácie alebo spontánne stretnutia.", + "Webinar" : "Webinár", + "Conversations" : "Konverzácie", + "Messages in current conversation" : "Správy v aktuálnej konverzácii", + "{user}" : "{user}", + "Messages" : "Správy", + "{user} in {conversation}" : "{user} v {conversation}", + "Messages in other conversations" : "Správy v iných konverzáciách", + "One-to-one rooms always need to show the other users avatar" : " Miestnosti jeden na jedného musia vždy zobraziť avatara ostatných užívateľov.", + "Invalid emoji character" : "Neplatný znak emotikonu", + "Invalid background color" : "Neplatná farba pozadia", + "Avatar image is not square" : "Obrázok avatara nie je štvorcový", + "Room {number}" : "Miestnosť {number}", + "Other" : "Iné", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepodarilo sa požiadať o skúšobnú verziu, pretože skúšobný server je nedostupný. Skúste to neskôr.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Vyskytol sa problém s overením tejto inštancie. Možno nie je zvonka prístupná zvonku na overenie jej URL.", + "Something unexpected happened." : "Stalo sa niečo neočakávané.", + "The URL is invalid." : "URL je neplatná.", + "An HTTPS URL is required." : "Je vyžadovaná HTTPS URL.", + "The email address is invalid." : "E-mailová adresa je neplatná.", + "The language is invalid." : "Jazyk je neplatný.", + "The country is invalid." : "Krajina je neplatná.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Vyskytol sa problém so skúšobnou verziou. ďalšie informácie získate v záznamoch udalostí.", + "Too many requests are send from your servers address. Please try again later." : "Z adresy servera sa odoslalo príliš veľa požiadaviek. Skúste to neskôr prosím.", + "There is already a trial registered for this Nextcloud instance." : "Pre túto inštanciu Nextcloud je už zaregistrovaná skúšobná verzia.", + "Something unexpected happened. Please try again later." : "Stalo sa niečo neočakávané. Skúste to neskôr prosím.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepodarilo sa požiadať o skúšobnú verziu, pretože skúšobný server sa správal chybne. Skúste to neskôr.", + "Trial requested but failed to get account information. Please check back later." : "Požiadavka o skúšobnú verziu bola odoslaná, ale nepodarilo sa získať informácie o účte. Skúste to znova neskôr.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Vyskytol sa problém s overením tejto požiadavky. Možno nie je zvonku prístup na overenie jej URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepodarilo sa načítať informácie o účte, pretože skúšobný server sa správal chybne. Skúste to znova neskôr.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Vyskytol sa problém s načítaním informácií o účte. Skontrolujte ďalšie informácie v záznamoch udalostí.", + "There is no such account registered." : "Takýto účet nie je zaregistrovaný.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepodarilo sa načítať informácie o účte, pretože skúšobný server je nedostupný. Skúste to znova neskôr.", + "Deleting the hosted signaling server account failed. Please check back later." : "Odstránenie účtu hosťovaného signalizačného servera zlyhalo. Skúste to znova neskôr.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nepodarilo sa odstrániť účet, pretože skúšobný server sa správal chybne. Skúste to znova neskôr.", + "There is a problem with deleting the account. Please check your logs for further information." : "Vyskytol sa problém s odstránením účtu. Ďalšie informácie získate v záznamoch udalostí.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresy servera sa odoslalo príliš veľa požiadaviek. Skúste to neskôr prosím.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nepodarilo sa odstrániť účet, pretože skúšobný server je nedostupný. Skúste to znova neskôr.", + "Note to self" : "Poznámka pre seba", + "A place for your private notes, thoughts and ideas" : "Miesto pre vaše súkromné poznámky, myšlienky a nápady", + "Transcript is AI generated and may contain mistakes" : "Prepis je generovaný umelou inteligenciou a môže obsahovať chyby", + "Summary is AI generated and may contain mistakes" : "Zhrnutie je generované umelou inteligenciou a môže obsahovať chyby", + "Let's get started!" : "Poďme začať!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je bezpečná komunikačná platforma na vlastnom serveri, ktorá sa hladko integruje do ekosystému Nextcloud.\n\n#### Kľúčové vlastnosti Nextcloud Talk:\n\n* Chat a správy v súkromných a skupinových chatoch\n* Hlasové hovory a videohovory\n* Zdieľanie súborov a integrácia s inými aplikáciami Nextcloud\n* Prispôsobiteľné nastavenia konverzácie, moderovanie a ovládanie súkromia\n* Web, počítač a mobil (iOS a Android)\n* Súkromná a bezpečná komunikácia\n\nViac informácií nájdete v [používateľskej dokumentácii](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Vitajte v Nextcloud Talk\n\nNextcloud Talk je súkromná a výkonná aplikácia na odosielanie správ, ktorá sa integruje s Nextcloud. Chatujte v súkromných alebo skupinových konverzáciách, spolupracujte prostredníctvom hlasových hovorov a videohovorov, organizujte webináre a udalosti, prispôsobujte si konverzácie a ďalšie.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formátujte texty pre vytváranie formátovaných správ\n\nV Nextcloud Talk môžete použiť syntax Markdown na formátovanie správ. Použite napríklad formátovanie **tučné** alebo *kurzíva* alebo „zvýraznenie textov ako kódu“. Môžete dokonca vytvárať tabuľky a pridávať nadpisy do textu.\n\nPotrebujete opraviť preklep alebo zmeniť formátovanie? Upravte svoju správu kliknutím na „Upraviť správu“ v ponuke správ.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Pridajte prílohy a odkazy\n\nPripojte súbory z vášho Nextcloud Hub pomocou tlačidla „+“. Zdieľajte položky zo súborov a rôznych aplikácií Nextcloud. Niektoré aplikácie dokonca podporujú interaktívne miniaplikácie, napríklad aplikácia Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Nechajte konverzácie plynúť: spomínajte používateľov, reagujte na správy a viac.\n\nV konverzácii môžete spomenúť každého použitím %s alebo konkrétnych účastníkov tak, že napíšete \"@\" a vyberiete ich meno zo zoznamu.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Môžete odpovedať na správy, preposielať ich do ďalších chatov a ľuďom alebo kopírovať obsah správy.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Urobte viac pomocou funkcie Smart Picker\n\nJednoducho napíšte „/“ alebo prejdite do ponuky „+“ a otvorte Smart Picker, kde môžete k svojim správam pripojiť rôzny obsah. Inteligentný výber môžete nakonfigurovať tak, aby bolo možné pridávať položky z aplikácií Nextcloud, súbory GIF, miesta na mape, obsah generovaný AI a oveľa viac.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Spravujte nastavenia konverzácie\n\nV ponuke konverzácie máte prístup k rôznym nastaveniam na správu konverzácií, ako napríklad:\n* Upravte informácie o konverzácii\n* Spravujte upozornenia\n* Aplikujte početné pravidlá moderovania\n* Nakonfigurujte prístup a zabezpečenie\n* Povoľte roboty\n* a ďalšie!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Spojené Arabské Emiráty", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua a Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánsko", + "Armenia" : "Arménsko", + "Angola" : "Angola", + "Antarctica" : "Antarktída", + "Argentina" : "Argentína", + "American Samoa" : "Americká Samo", + "Austria" : "Rakúsko", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Åland Islands" : "Alandy", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna a Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladéš", + "Belgium" : "Belgicko", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulharsko", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Svätý Bartolomej", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunej-Darussalam", + "Bolivia, Plurinational State of" : "Bolívia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius a Saba", + "Brazil" : "Brazília", + "Bahamas" : "Bahamské ostrovy", + "Bhutan" : "Bhután", + "Bouvet Island" : "Bouvetský ostrov", + "Botswana" : "Botswana", + "Belarus" : "Bielorusko", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosové ostrovy", + "Congo, the Democratic Republic of the" : "Kongo", + "Central African Republic" : "Stredoafrická republika", + "Congo" : "Kongo", + "Switzerland" : "Švajčiarsko", + "Côte d'Ivoire" : "Pobrežie Slonoviny", + "Cook Islands" : "Cookove ostrovy", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Čína", + "Colombia" : "Kolumbia", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapverdy", + "Curaçao" : "Curaçao", + "Christmas Island" : "Vianočný ostrov", + "Cyprus" : "Cyprus", + "Czechia" : "Česká repubika", + "Germany" : "Nemecko", + "Djibouti" : "Džibutsko", + "Denmark" : "Dánsko", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikánska republika", + "Algeria" : "Alžírsko", + "Ecuador" : "Ekvádor", + "Estonia" : "Estónsko", + "Egypt" : "Egypt", + "Western Sahara" : "Západná Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Španielsko", + "Ethiopia" : "Etiópia", + "Finland" : "Fínsko", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandské ostrovy", + "Micronesia, Federated States of" : "Mikronézia", + "Faroe Islands" : "Faerské ostrovy", + "France" : "Francúzsko", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Spojené kráľovstvo Veľkej Británie a Severného Írska", + "Grenada" : "Grenada", + "Georgia" : "Gruzínsko", + "French Guiana" : "Francúzska Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltár", + "Greenland" : "Grónsko", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Rovníková Guinea", + "Greece" : "Grécko", + "South Georgia and the South Sandwich Islands" : "Južná Georgia a Južné Sandwichove ostrovy", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heardove a McDonaldove ostrovy", + "Honduras" : "Honduras", + "Croatia" : "Chorvátsko", + "Haiti" : "Haiti", + "Hungary" : "Maďarsko", + "Indonesia" : "Indonézia", + "Ireland" : "Írsko", + "Israel" : "Izrael", + "Isle of Man" : "ostrov Man", + "India" : "India", + "British Indian Ocean Territory" : "Britské indickooceánske územie", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irán", + "Iceland" : "Island", + "Italy" : "Taliansko", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordánsko", + "Japan" : "Japonsko", + "Kenya" : "Keňa", + "Kyrgyzstan" : "Kirgizsko", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Svätý Krištof a Nevis", + "Korea, Democratic People's Republic of" : "Severná Kórea", + "Korea, Republic of" : "Južná Kórea", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanské ostrovy", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laoská ľudovodemokratická republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Svätá Lucia", + "Liechtenstein" : "Lichtenštajnsko", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesothské kráľovstvo", + "Lithuania" : "Litva", + "Luxembourg" : "Luxembursko", + "Latvia" : "Lotyšsko", + "Libya" : "Líbia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavská republika", + "Montenegro" : "Čierna Hora", + "Saint Martin (French part)" : "Svätý Martin (francúzska časť)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallove ostrovy", + "North Macedonia" : "Severné Macedónsko", + "Mali" : "Mali", + "Myanmar" : "Mjanmarsko", + "Mongolia" : "Mongolsko", + "Macao" : "Makao", + "Northern Mariana Islands" : "Severné Mariany", + "Martinique" : "Martinik", + "Mauritania" : "Mauritánia", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurícius", + "Maldives" : "Maledivy", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malajzia", + "Mozambique" : "Mozambik", + "Namibia" : "Namíbia", + "New Caledonia" : "Nová Kaledónia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Holandsko", + "Norway" : "Nórsko", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nový Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francúzska Polynézia", + "Papua New Guinea" : "Papua-Nová Guinea", + "Philippines" : "Filipíny", + "Pakistan" : "Pakistan", + "Poland" : "Poľsko", + "Saint Pierre and Miquelon" : "Saint Pierre a Miquelon", + "Pitcairn" : "Pitcairnove ostrovy", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestína", + "Portugal" : "Portugalsko", + "Palau" : "Palau", + "Paraguay" : "Paraguaj", + "Qatar" : "Katar", + "Réunion" : "Reunion", + "Romania" : "Rumunsko", + "Serbia" : "Srbsko", + "Russian Federation" : "Ruská federácia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudská Arábia", + "Solomon Islands" : "Šalamúnove ostrovy", + "Seychelles" : "Seychely", + "Sudan" : "Sudán", + "Sweden" : "Švédsko", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Svätá Helena, Ascension a Tristan da Cunha", + "Slovenia" : "Slovinsko", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovensko", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Maríno", + "Senegal" : "Senegal", + "Somalia" : "Somálsko", + "Suriname" : "Surinam", + "South Sudan" : "Južný Sudán", + "Sao Tome and Principe" : "Svätý Tomáš a Princov ostrov", + "El Salvador" : "Salvádor", + "Sint Maarten (Dutch part)" : "Sint Maarten (holandská časť)", + "Syrian Arab Republic" : "Sýria", + "Eswatini" : "Svazijsko", + "Turks and Caicos Islands" : "ostrovy Turks a Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francúzska južná a antarktická oblasť", + "Togo" : "Togo", + "Thailand" : "Thajsko", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Východný Timor", + "Turkmenistan" : "Turkménsko", + "Tunisia" : "Tunisko", + "Tonga" : "Tonga", + "Turkey" : "Turecko", + "Trinidad and Tobago" : "Trinidad a Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzánia", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Menšie odľahlé ostrovy Spojených štátov", + "United States of America" : "Spojené štáty americké", + "Uruguay" : "Uruguaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Vatikán", + "Saint Vincent and the Grenadines" : "Svätý Vincent a Grenadíny", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Britské Paneské ostrovy", + "Virgin Islands, U.S." : "U.S. Panenské ostrovy", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Juhoafrická republika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmazanie pozadia", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepodarilo sa skontrolovať podporu načítania WASM. Prosím skontrolujte manuálne, či váš webový server poskytuje súbory `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Váš webový server nie je správne nastavený na doručovanie súborov `.wasm`. Toto je zvyčajne problém s konfiguráciou Nginx. Pre rozostrenie pozadia potrebuje úpravu, aby doručoval aj súbory `.wasm`. Porovnajte svoju konfiguráciu Nginx s odporúčanou konfiguráciou v našej dokumentácii.", + "Talk configuration values" : "Konfiguračné hodnoty aplikácie Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Vynútenie trvania hovoru je podporované iba systémovým cronom. Povoľte systémový cron alebo odstráňte konfiguráciu `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Malé hodnoty „max_call_duration“ (momentálne nastavené na %d) nie sú vynútiteľné z dôvodu technických obmedzení. Úloha na pozadí sa vykonáva iba každých 5 minút, takže použitie na vlastné riziko.", + "Federation" : "Združovanie", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Dôrazne sa odporúča nakonfigurovať \"memcache.locking\", keď je zapnutá Talk Federation.", + "High-performance backend" : "Vysoko výkonná podporná vrstva", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nie je nakonfigurovaný vysokovýkonný backend - Spustenie Nextcloud Talk bez vysokovýkonného backendu je možné len pre veľmi malé hovory (max. 2-3 účastníci). Nastavte si vysokovýkonný backend, aby ste zabezpečili bezproblémové fungovanie hovorov s viacerými účastníkmi.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Spustenie vysokovýkonného backendového režimu „conversation_cluster“ je zastarané a v nadchádzajúcej verzii už nebude podporované. Vysokovýkonný backend v súčasnosti podporuje skutočné klastrovanie, ktoré by sa malo použiť namiesto neho.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definovanie viacerých vysokovýkonných backendov je zastarané a v pripravovanej verzii už nebude podporované. Namiesto toho by mal byť nastavený vyrovnávač zaťaženia spolu s klastrovými signalizačnými servermi a nakonfigurovaný v nastaveniach Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Uložený verejný kľúč pre použitý algoritmus %1$s sa nezhoduje s uloženým súkromným kľúčom. Spustite %2$s na opravu problému.", + "High-performance backend not configured correctly. Run %s for details." : "Vysokovýkonný backend nie je správne nakonfigurovaný. Spustite %s pre podrobnosti.", + "High-performance backend not configured correctly" : "Vysokovýkonný backend nie je správne nakonfigurovaný", + "Error: Cannot connect to server" : "Chyba: Nedá sa pripojiť k serveru", + "Error: Server did not respond with proper JSON" : "Chyba: Server neodpovedal správnym JSON", + "Error: Certificate expired" : "Chyba: Certifikát vypršal", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: Systémové časy servera Nextcloud a vysokovýkonného servera backend nie sú synchronizované. Uistite sa, že sú oba servery pripojené k časovému serveru alebo manuálne synchronizujte ich čas.", + "Could not get version" : "Nie je možné zistiť verziu", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Chyba: Spustené verzia: {version}; Server musí byť aktualizovaný pre kompatibilitu s touto verziou Rozhovoru", + "Error: Server responded with: {error}" : "Chyba: Server odpovedal s: {error}", + "Error: Unknown error occurred" : "Chyba: Vyskytla sa neznáma chyba", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Upozornenie: Bežiaca verzia: {version}; Server nepodporuje všetky funkcie tejto verzie Talk, chýbajúce funkcie: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Pri spustení Nextcloud Talk s vysokovýkonným backendom sa dôrazne odporúča nakonfigurovať vyrovnávaciu pamäť.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Klient Push je nainštalovaný, čo zlepšuje presnosť notifikácií v aplikácii Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nie je nainštalovaný. To môže spôsobiť oneskorené oznámenia o hovore.", + "Recording backend" : "Backend pre záznam", + "Using the recording backend requires a High-performance backend." : "Používanie backendu nahrávania vyžaduje vysokovýkonný backend.", + "No recording backend configured" : "Nie je nakonfigurovaný žiadny backend nahrávania", + "SIP configuration" : "Nastavenie SIP", + "Using the SIP functionality requires a High-performance backend." : "Používanie funkcionality SIP vyžaduje vysokovýkonný backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Pridelené telefónne čísla Talk nesmú začínať + alebo 0. Odstráňte alebo aktualizujte nasledujúce čísla:\n{list}", + "No SIP backend configured" : "Nie je nakonfigurovaný žiadny SIP backend", + "Invalid date, date format must be YYYY-MM-DD" : "Neplatný dátum, formát musí byť v tvare YYYY-MM-DD", + "Conversation not found" : "Rozhovor sa nenašiel", + "Path is already shared with this conversation" : "Cesta je už nazdieľaná v tejto konverzácii", + "Chat, video & audio-conferencing using WebRTC" : "Čet, video a audio konferencie pomocou WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video a audiokonferencie pomocou WebRTC\n\n* 💬 **Chat** Nextcloud Talk prichádza s jednoduchým textovým chatom, ktorý vám umožňuje zdieľať alebo nahrávať súbory z vašej aplikácie Nextcloud Files alebo miestneho zariadenia a spomenúť ďalších účastníkov.\n* 👥 **Súkromné, skupinové, verejné a heslom chránené hovory!** Pozvite niekoho, celú skupinu alebo pošlite verejný odkaz na pozvanie na hovor.\n* 🌐 **Federované chaty** Chatujte s ostatnými používateľmi Nextcloud na ich serveroch\n* 💻 **Zdieľanie obrazovky!** Zdieľajte svoju obrazovku s účastníkmi vášho hovoru.\n* 🚀 **Integrácia s ďalšími aplikáciami Nextcloud**, ako sú Súbory, Kalendár, Stav používateľa, Dashboard, Flow, Mapy, Inteligentný výber, Kontakty, Deck a mnoho ďalších.\n* 🌉 **Synchronizácia s inými chatovacími riešeniami** Vďaka integrácii [Matterbridge](https://github.com/42wim/matterbridge/) do aplikácie Talk môžete jednoducho synchronizovať množstvo ďalších chatovacích riešení so službou Nextcloud Talk a naopak.", + "Leave call" : "Opustiť hovor", + "Navigating away from the page will leave the call in {conversation}" : "Ak opustíte stránku, hovor ostane v {conversation}", + "Stay in call" : "Neopustiť hovor", + "Error occurred when getting the conversation information" : "Došlo k chybe pri získavaní informácií o konverzácii", + "Discuss this file" : "Diskutujte o tomto súbore", + "Share this file with others to discuss it" : "Zdieľajte tento súbor s ostatnými a diskutujte o ňom", + "Share this file" : "Zdieľať tento súbor", + "Join conversation" : "Pripojiť sa ku konverzácii", + "This conversation is password-protected." : "Táto konverzácia je chránená heslom.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Zaznamenali sme viacnásobné chybné prihlásenie z vašej IP adresy. Vaše nasledujúce prihlásenie bude pozdržané o 30 sekúnd.", + "The password is wrong. Try again." : "Heslo je nesprávne. Skúste znova.", + "Password" : "Heslo", + "Submit" : "Odoslať", + "Error requesting the password." : "Chyba pri vyžiadaní hesla", + "Request password" : "Vyžiadať heslo", + "This conversation has ended" : "Tento rozhovor bol ukončený", + "Error occurred when joining the conversation" : "Nastala chyba pri pripájaní ku konverzácii", + "Close Talk sidebar" : "Zavrieť bočný panel Rozhovor", + "Open Talk sidebar" : "Otvoriť bočný panel Rozhovoru", + "Everyone" : "Všetci", + "Users and moderators" : "Používatelia a moderátori", + "Moderators only" : "Iba moderátori", + "Disable calls" : "Zakázať hovory", + "Save changes" : "Uložiť zmeny", + "Saving …" : "Ukladá sa...", + "Saved!" : "Uložené!", + "Limit to groups" : "Povoľ len pre skupiny", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Keď je vybratá aspoň jedna skupina, tak sa rozhovoru môžu zúčastniť len používatelia z uvedených skupín.", + "Guests can still join public conversations." : "Hostia sa vždy môžu pripojiť k verejným rozhovorom.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Používatelia, ktorí už nemôžu používať službu Rozhovor, budú naďalej uvedení ako účastníci predchádzajúcich rozhovorov a aj ich správy v rozhovoroch budú zachované.", + "Limit using Talk" : "Obmedziť používanie Rozhovoru", + "Limit creating a public and group conversation" : "Obmedziť vytváranie verejných a skupinových rozhovorov", + "Limit creating conversations" : "Obmedziť vytváranie rozhovorov", + "Limit starting a call" : "Obmedziť začatie hovoru", + "Limit starting calls" : "Obmedziť začatie hovorov", + "When a call has started, everyone with access to the conversation can join the call." : "Po začatí hovoru sa k hovoru môžu pripojiť všetci, ktorí majú k nemu prístup.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nasledujúce roboty sú nainštalované na tomto serveri. V dokumentácii nájdete podrobnosti o tom, ako {linkstart1}vytvoriť vlastného bota{linkend} alebo {linkstart2}zoznam robotov{linkend}, ktoré môžete povoliť na vašom serveri.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Žiadne boty nie sú nainštalované na tomto serveri. V dokumentácii nájdete podrobnosti o tom, ako {linkstart1}vytvoriť vlastného bota{linkend} alebo {linkstart2}zoznam robotov{linkend}, ktoré môžete povoliť na vašom serveri.", + "Description is not provided" : "Popis nie je uvedený", + "Locked for moderators" : "Zamknuté pre moderátorov", + "Enabled" : "Zapnuté", + "Disabled" : "Vypnuté", + "Bots settings" : "Nastavenia botov", + "State" : "Stav", + "Name" : "Názov", + "Last error" : "Posledná chyba", + "Total errors count" : "Celkový počet chýb", + "Find more bots" : "Nájsť viac botov", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Dôveryhodné servery je možné konfigurovať na {linkstart}stránke Nastavenia zdieľania{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Združené rozhovory a hovory už fungujú. Spracovanie príloh príde v budúcej verzii.", + "Enable Federation in Talk app" : "Povoliť združovanie v aplikácii Talk /Rozhovor/", + "Permissions" : "Oprávnenia", + "Allow users to be invited to federated conversations" : "Povoliť užívateľom pozývať na združené konverzácie", + "Allow users to invite federated users into conversation" : "Povoliť užívateľom pozývať federovaných užívateľov do konverzácií", + "Only allow to federate with trusted servers" : "Povoliť iba federácie s dôveryhodnými servermi", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Keď je vybratá aspoň jedna skupina, tak sa rozhovoru môžu zúčastniť len užívatelia z uvedených skupín.", + "Groups allowed to invite federated users" : "Skupiny oprávnené pozvať federovaných používateľov", + "Select groups …" : "Vybrať skupinu ...", + "All messages" : "Všetky správy", + "@-mentions only" : "Iba zmienky v tvare @-meno", + "Off" : "Vypnúť", + "General settings" : "Všeobecné nastavenia", + "Default notification settings" : "Predvolené nastavenia upozornení", + "Default group notification" : "Predvolené upozornenia pre skupinu", + "Default group notification for new groups" : "Predvolené upozornenia pre nové skupiny", + "Integration into other apps" : "Napojenie na iné aplikácie", + "Allow conversations on files" : "Povoliť konverzácie pri súboroch", + "Allow conversations on public shares for files" : "Povoliť konverzácie pri verejných zdieľaniach súborov", + "End-to-end encrypted calls" : "Koncové šifrovanie hovorov", + "Enable encryption" : "Povoliť šifrovanie", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Šifrované hovory typu end-to-end s nakonfigurovaným mostom SIP vyžadujú novšiu verziu vysokovýkonného backendu a mosta SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilní klienti momentálne nepodporujú end-to-end šifrované hovory", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kliknutím na tlačidlo vyššie sa odošlú informácie z formulára na servery Struktur AG. Ďalšie informácie nájdete na stránke {linkstart}spreed.eu {linkend}.", + "Pending" : "Prebieha", + "Error" : "Chyba", + "Blocked" : "Zablokovaný", + "Active" : "Aktívne", + "Expired" : "Platnosť skončila", + "Never" : "Nikdy", + "The trial could not be requested. Please try again later." : "Nemožno požiadať o skúšobnú verziu. Skúste to neskôr prosím.", + "The account could not be deleted. Please try again later." : "Účet sa nepodarilo odstrániť. Skúste to neskôr prosím.", + "Hosted High-performance backend" : "Hosťovaný vysokovýkonný backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Náš partner Struktur AG poskytuje službu, kde je možné požiadať o hosťovaný signalizačný server. Na tento účel stačí vyplniť nasledujúci formulár a Nextcloud o to požiada. Po nastavení servera sa prihlasovacie údaje vyplnia automaticky. Týmto sa prepíšu existujúce nastavenia signalizačného servera.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ak váš účet pre backend s vysokým výkonom zahŕňa funkcie STUN a/alebo TURN, nastavenia budú aktualizované podľa toho.", + "URL of this Nextcloud instance" : "URL tejto inštancie Nextcloudu", + "Full name of the user requesting the trial" : "Úplné meno používateľa, ktorý žiada o skúšobnú verziu", + "Email of the user" : "E-mail užívateľa", + "Language" : "Jazyk", + "Country" : "Krajina", + "Request signaling server trial" : "Vyžiadať skúšobnú verziu signalizačného servera", + "You can see the current status of your hosted signaling server in the following table." : "Aktuálny stav hosťovaného signalizačného servera môžete vidieť v nasledujúcej tabuľke.", + "Status" : "Stav", + "Created at" : "Vytvorené:", + "Expires at" : "Platnosť končí", + "Limits" : "Limity", + "STUN included" : "STUN zahrnutý", + "Yes" : "Áno", + "No" : "Nie", + "TURN included" : "TURN zahrnutý", + "Delete the signaling server account" : "Odstrániť účet signalizačného servera", + "_%n user_::_%n users_" : ["%n používateľ","%n používatelia","%n používatelia","%n používateľov"], + "Installed version: {version}" : "Naištalovaná verzia: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Môžete si nainštalovať Matterbridge a prepojiť Nextcloud Talk /Rozhovor/ s niektorými ďalšími službami. Ďalšie podrobnosti nájdete na ich {linkstart1}stránke GitHub{linkend}. Stiahnutie a inštalácia aplikácie môže chvíľu trvať. V prípade, že uplynie časový limit, nainštalujte ho manuálne z {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Binárny súbor Matterbridge má nesprávne oprávnenia. Uistite sa, že binárny súbor Matterbridge patrí správnemu používateľovi a môže byť spustený. Nachádza sa v adresári \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Spustiteľný súbor Matterbridge nebol nájdený alebo nemohol byť spustený.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "V nastavení je možné ručne nastaviť cestu spustiteľného súboru Matterbridge. Podrobnosti nájdete v {linkstart}dokumentácii k napojeniu Matterbridge{linkend}.", + "Downloading …" : "Sťahujem …", + "Install Talk Matterbridge" : "Inštalovať Matterbridge pre Talk /Rozhovor/", + "An error occurred while installing the Matterbridge app" : "Pri pokuse o inštaláciu Matterbridge sa vyskytla chyba", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Pri pokuse o inštaláciu Talk /Rozhovor/ Matterbridge sa vyskytla chyba. Inštalujte ju ručne, prosím.", + "Failed to execute Matterbridge binary." : "Nepodarilo sa spustiť súbor Matterbridge.", + "Matterbridge integration" : "Napojenie na Matterbridge", + "Enable Matterbridge integration" : "Zapnúť napojenie na Matterbridge", + "Status: Checking connection" : "Stav: Kontrola pripojenia", + "OK: Running version: {version}" : "OK: Spustená verzia: {version}", + "Error: Server seems to be a Signaling server" : "Chyba: Server sa zdá byť signalizačným serverom", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: Systémové časy servera Nextcloud a servera pre nahrávací backend nie sú synchronizované. Uistite sa, že sú oba servery pripojené k časovému serveru alebo manuálne synchronizujte ich čas.", + "Recording backend URL" : "URL adresa backendu pre záznam", + "Validate SSL certificate" : "Overiť SSL certifikát", + "Delete this server" : "Zmazať server", + "Test this server" : "Vyskúšť tento server", + "Disabled for all calls" : "Zakázané pre všetky hovory", + "Enabled for all calls" : "Povolené pre všetky hovory", + "Configurable on conversation level by moderators" : "Konfigurovateľné na úrovni konverzácie moderátormi", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP nastavenia \"upload_max_filesize\" alebo \"post_max_size\" umožňujú nahrávať súbory iba do veľkosti {maxUpload}.", + "Recording backend settings saved" : "Nastavenia záznamového backendu boli uložené", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderátori budú môcť povoliť súhlas pre záznam na úrovni konverzácie. Súhlas, pre záznam, bude vyžadovaný pre každého účastníka pred pripojením sa k hovoru v tejto konverzácii.", + "The consent to be recorded will be required for each participant before joining every call." : "Súhlas so záznamom bude vyžadovaný od každého účastníka pred pripojením sa ku každému hovoru.", + "The consent to be recorded is not required." : "Súhlas so záznamom nie je potrebný.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfigurácia backendu nahrávania je možná len s vysokovýkonným backendom.", + "Add a new recording backend server" : "Pridajte nový server pre záznamový backend", + "Shared secret" : "Shared secret", + "Recording consent" : "Súhlas so záznamom", + "Recording transcription" : "Prepis nahrávky", + "Automatically transcribe call recordings with a transcription provider" : "Automaticky prepisujte nahrávky hovorov pomocou poskytovateľa prepisov", + "Automatically summarize call recordings with transcription and summary providers" : "Automaticky zhrnúť nahrávky hovorov s poskytovateľmi prepisu a súhrnu", + "SIP configuration saved!" : "Nastavenie SIP bolo uložené!", + "SIP configuration is only possible with a High-performance backend." : "Konfigurácia SIP je možná len s vysokovýkonným backendom.", + "Enable SIP Dial-out option" : "Povoliť možnosť SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signálny server musí byť aktualizovaný, aby podporoval funkcie SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Nezobrazovať číslo volajúceho pri volaní cez SIP.", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymné číslo by malo byť zobrazené ako \"neznáme\" alebo \"zablokované číslo\" pre príjemcu hovoru", + "Dial-out number" : "Číslo na vytočenie", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Číslo v formáte E164 používané ako náhradné číslo volajúceho pre odchádzajúce hovory", + "Dial-out prefix" : "Predvoľba na vytočenie", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Predpona k nakonfigurovanému číslu používateľa pre odchádzajúce hovory (predvolené je `+`)", + "Restrict SIP configuration" : "Obmedziť nastavenie SIP", + "Enable SIP configuration" : "Zapnúť nastavenie SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Iba používatelia nasledujúcich skupín môžu povoliť SIP v konverzáciách, ktoré moderujú", + "Phone number (Country)" : "Telefónne číslo (Štát)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Tieto informácie sa odosielajú v pozývacích e-mailoch a tiež sa zobrazujú na bočnom paneli všetkým účastníkom.", + "Nextcloud base URL" : "Základná URL Nextcloud", + "Talk Backend URL" : "Backend URL aplikácie Talk", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Dostupné funkcie", + "Error: Websocket connection failed" : "Chyba: Zlyhalo pripojenie cez Websocket", + "Error code" : "Chybový kód", + "Error message" : "Chybové hlásenie", + "Error: Websocket connection failed. Check browser console" : "Chyba: Pripojenie cez Websocket zlyhalo. Skontrolujte konzolu prehliadača", + "High-performance backend URL" : "URL vysoko výkonnej podpornej vrstvy", + "Missing High-performance backend warning hidden" : "Upozornenie na chýbajúci backend s vysokým výkonom je skryté", + "High-performance backend settings saved" : "Nastavenia vysokovýkonného backendu boli uložené", + "Nextcloud Talk setup not complete" : "Nastavenie Nextcloud Talk nie je kompletné", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Upozorňujeme, že pri hovoroch s viac ako 2 účastníkmi bez vysokovýkonného backendu sa u účastníkov s najväčšou pravdepodobnosťou vyskytnú problémy s pripojením a spôsobia vysoké zaťaženie zúčastnených zariadení.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nainštalujte si vysokovýkonný backend, aby ste zabezpečili bezproblémové fungovanie hovorov s viacerými účastníkmi.", + "Nextcloud portal" : "Portál Nextcloud", + "Quick installation guide" : "Rýchla inštalačná príručka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Pre hovory a konverzácie s viacerými účastníkmi je potrebný vysokovýkonný backend. Bez backendu musia všetci účastníci nahrávať svoje vlastné video jednotlivo pre každého iného účastníka, čo s najväčšou pravdepodobnosťou spôsobí problémy s pripojením a vysoké zaťaženie zúčastnených zariadení.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Pri používaní Nextcloud Talk s vysokovýkonným backendom sa dôrazne odporúča nastaviť distribuovanú vyrovnávaciu pamäť.", + "Add High-performance backend server" : "Pridať vysoko výkonný backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Upozorniť na problémy s pripojením pri hovoroch s viac ako 2 účastníkmi", + "STUN server URL" : "URL STUN servera", + "The server address is invalid" : "Adresa servera je neplatná", + "STUN settings saved" : "Nastavenia STUN boli uložené", + "STUN servers" : "STUN server", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN server je používaný na zistenie verejnej IP adresy účastníkov za smerovačom.", + "Add a new STUN server" : "Pridať nový STUN server", + "{schema} scheme must be used with a domain" : "Schéma {schema} sa musí používať s doménou", + "{option1} and {option2}" : "{option1} a {option2}", + "{option} only" : "iba {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN server vrátil úspešných ICE kandidátov", + "Error: No working ICE candidates returned by the TURN server" : "Chyba: TURN server nevrátil žiadnych funkčných ICE kandidátov", + "Testing whether the TURN server returns ICE candidates" : "Zisťuje sa, či server TURN vracia ICE kandidátov", + "TURN server schemes" : "Popis TURN serveru", + "TURN server URL" : "URL TURN servera", + "TURN server secret" : "Kód pre TURN server", + "TURN server protocols" : "Protokoly servera TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN server slúži ako proxy pre prenos od účastníkov, ktorí sú za bránou firewall. Ak sa jednotliví účastníci nemôžu spojiť s ostatnými, najskor je potrebný TURN server. Pokyny na nastavenie nájdete v {linkstart}tejto dokumentácii{linkend}.", + "TURN settings saved" : "Nastavenia TURN boli uložené", + "TURN servers" : "TURN servery", + "Add a new TURN server" : "Pridať nový TURN server", + "Failed" : "Zlyhalo", + "OK" : "OK", + "Checking …" : "Kontrolujem ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Zlyhalo: WebAssembly je v tomto prehliadači zakázané alebo nie je podporované. Povoľte WebAssembly alebo použite prehliadač s podporou na vykonanie kontroly.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Zlyhalo: Webový server správne nevrátil súbory „.wasm“ a „.tflite“. Skontrolujte časť „Systémové požiadavky“ v dokumentácii Talk /Rozhovor/.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Webový server správne vrátil súbory „.wasm“ a „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Zdá sa, že konfigurácia PHP a Apache nie je kompatibilná. Upozorňujeme, že PHP je možné použiť iba s modulom MPM_PREFORK a PHP-FPM je možné použiť iba s modulom MPM_EVENT.", + "Web server setup checks" : "Kontroly nastavenia webového servera", + "Files required for virtual background can be loaded" : "Súbory potrebné pre virtuálne pozadie môžu byť nahrané", + "Federated user" : "Združený užívateľ", + "Assign participants to rooms" : "Priraďte účastníkov do miestností", + "Configure breakout rooms" : "Nastaviť vyhradené miestnosti", + "Number of breakout rooms" : "Počet vyhradených miestností", + "You can create from 1 to 20 breakout rooms." : "Môžete vytvoriť od 1 do 20 odpočinkových miestností.", + "Assignment method" : "Spôsob rozdelenia do skupín", + "Automatically assign participants" : "Automaticky rozdeliť účastníkov", + "Manually assign participants" : "Manuálne rozdeliť účastníkov", + "Allow participants to choose" : "Dovoľte účastníkom vybrať si", + "Create rooms" : "Vytvoriť miestnosti", + "Confirm" : "Potvrdiť", + "Create breakout rooms" : "Vytvoriť vyhradené miestnosti", + "Reset" : "Resetovať", + "Delete breakout rooms" : "Odstrániť vyhradené miestnosti", + "Room {roomNumber}" : "Miestnosť {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuálne odpočinkové miestnosti a nastavenia sa stratia", + "Cancel" : "Zrušiť", + "Unassigned participants" : "Nepripradení účastníci", + "Back" : "Späť", + "Assign" : "Priradiť", + "Add participant \"{user}\"" : "Pridať účastníka \"{user}\"", + "Now" : "Teraz", + "Invalid calendar selected" : "Bol vybraný neplatný kalendár", + "Invalid start time selected" : "Bol vybraný neplatný čas začiatku", + "Invalid end time selected" : "Bol vybraný neplatný čas konca", + "Unknown error occurred" : "Nastala neznáma chyba", + "Sending no invitations" : "Neposielajú sa žiadne upozornenia", + "{participant0} will receive an invitation" : "{participant0} dostane pozvánku", + "{participant0} and {participant1} will receive invitations" : "{participant0} a {participant1} dostanú pozvánku", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania"], + "Invite {user}" : "Pozvať {user}", + "Invite all users and emails in this conversation" : "Pozvite všetkých používateľov a e-maily v tejto konverzácii.", + "Meeting created" : "Stretnutie vytvorené", + "Upcoming meetings" : "Nadchádzajúce stretnutia", + "Loading …" : "Načítavam …", + "No upcoming meetings" : "Žiadne nadchádzajúce stretnutia", + "Schedule a meeting" : "Naplánovať stretnutie", + "Meeting title" : "Názov stretnutia", + "From" : "Od", + "To" : "Pre", + "Calendar" : "Kalendár", + "Attendees" : "Účastníci", + "No other participants to send invitations to." : "Nie sú žiadni ďalší účastníci, ktorým by bolo možné poslať pozvánky.", + "Add attendees" : "Pridať účastníkov", + "Save" : "Uložiť", + "Search participants" : "Vyhľadať účastníkov", + "No results" : "Žiadne výsledky", + "Done" : "Hotovo", + "Disable live transcription" : "Zakázať živý prepis", + "Enable live transcription (generated by AI)" : "Povoliť živý prepis (generovaný AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Povoliť živý prepis (Aplikácia Live transcriptions nie je nainštalovaná)", + "Disable live translation" : "Vypnúť živý preklad", + "Enable live translation (generated by AI)" : "Povoliť živý preklad (generovaný AI)", + "Original language" : "Pôvodný jazyk", + "Live translations app is not installed" : "Aplikácia pre živé preklady nie je nainštalovaná", + "Original language: {languageName}" : "Pôvodný jazyk: {languageName}", + "Translated language" : "Jazyk prekladu", + "Translated language: {languageName}" : "Jazyk prekladu: {languageName}", + "Raise hand" : "Zdvihnúť ruku", + "Raise hand (R)" : "Zdvihnúť ruku (R)", + "Lower hand" : "Dať ruku dole", + "Lower hand (R)" : "Dať ruku dole (R)", + "Exit full screen (F)" : "Ukončiť režim celej obrazovky (F)", + "Full screen (F)" : "Na celú obrazovku (F)", + "Speaker view" : "Zobrazenie rečníka", + "Grid view" : "Zobrazenie v mriežke", + "Error when trying to load the available live transcription languages" : "Chyba pri pokuse o načítanie dostupných jazykov pre živý prepis", + "Failed to enable live transcription" : "Nepodarilo sa povoliť živý prepis", + "Failed to enable live translations" : "Nepodarilo sa povoliť živé preklady", + "Failed to disable live translations" : "Nepodarilo sa vypnúť živé preklady", + "Recording consent is required" : "Vyžaduje sa súhlas so zaznamenávaním", + "This conversation is read-only" : "Táto konverzácia je iba na čítanie", + "Conversation not found or not joined" : "Konverzácia nebola nájdená alebo nebola pripojená", + "Lobby is still active and you're not a moderator" : "Čakáreň je stále aktívna a nie si moderátor.", + "Connection failed" : "Pripojenie zlyhalo", + "Reload" : "Znovu načítať", + "{nickName} raised their hand." : "{nickName} zdvihol ruku.", + "A participant raised their hand." : "Účastník zdvihol ruku.", + "Collapse stripe" : "Zbaliť pruh", + "Expand stripe" : "Rozbaliť pruh", + "Previous page of videos" : "Predchodzia stránka videí", + "Next page of videos" : "Ďalšia stránka videí", + "Connecting …" : "Pripájam sa...", + "Calling …" : "Volám ...", + "Waiting for {user} to join the call" : "Čaká sa, kým sa k rozhovoru pripojí {user}", + "Waiting for others to join the call …" : "Čaká sa na ostatných kým sa pripoja na hovor ...", + "You can invite others in the participant tab of the sidebar" : "Ostatných môžete pozvať v záložke účastníkov v bočnom paneli", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ostatných môžete pozvať v záložke účastníkov v bočnom paneli, alebo zdieľajte odkaz pre pozvanie iných.", + "Share this link to invite others!" : "Zdieľajte tento odkaz na pozvanie ostatných!", + "Copy link" : "Kopírovať odkaz", + "You are not allowed to enable audio" : "Nemáte oprávnenie povoliť zvuk", + "No audio. Click to select device" : "Žiadny zvuk. Kliknite pre výber zariadenia", + "Mute audio" : "Vypnúť zvuk", + "Mute audio (M)" : "Stlmiť zvuk (M)", + "Unmute audio" : "Obnoviť zvuk", + "Unmute audio (M)" : "Zapnúť zvuk (M)", + "None" : "Žiadne", + "Select a microphone" : "Vybrať mikrofón", + "Select a speaker" : "Vybrať reproduktor", + "Microphone settings" : "Nastavenia mikrofónu", + "Check devices" : "Skontrolovať zariadenia", + "Access to camera was denied" : "Prístup ku kamere bol zamietnutý", + "Error while accessing camera: It is likely in use by another program" : "Chyba pri prístupe ku kamere: pravdepodobne ju používa iný program", + "Error while accessing camera" : "Nastala chyba pri prístupe ku kamere", + "You have been muted by a moderator" : "Stlmil vás moderator", + "Hide presenter video" : "Skyť video moderátora", + "You are not allowed to enable video" : "Nemáte oprávnenie povoliť video", + "No video. Click to select device" : "Žiadne video. Kliknite pre výber zariadenia", + "Disable video" : "Zakázať video", + "Disable video (V)" : "Vypnúť video (V)", + "Enable video" : "Zapnúť video", + "Enable video (V)" : "Povoliť video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnúť video. Vaše pripojenie bude pri prvom zapnutí videa krátko prerušené", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Povoliť video (V) - Pri prvom povolení videa sa vaše pripojenie na chvíľu preruší", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnúť video. Vaše pripojenie bude pri prvom zapnutí videa krátko prerušené", + "Select a video device" : "Vybrať video zariadenie", + "Show presenter" : "Zobraziť prezentujúceho", + "You" : "Vy", + "Mute" : "Stlmiť", + "Muted" : "Stlmené", + "Show screen" : "Ukázať obrazovku", + "Stop following" : "Prestať sledovať", + "Connection could not be established …" : "Nie je možné sa pripojiť ...", + "Connection was lost and could not be re-established …" : "Pripojenie sa prerušilo a nemôže byť obnovené ...", + "Connection could not be established. Trying again …" : "Nie je možné sa pripojiť. Skúšam znova ...", + "Connection lost. Trying to reconnect …" : "Pripojenie sa prerušilo. Skúšam sa pripojiť znova ...", + "Connection problems …" : "Problémy s pripojením ...", + "Collapse" : "Zvinúť", + "Expand" : "Rozbaliť", + "You need to be logged in to upload files" : "Pre nahrávenie súborov musíte byť prihlásený", + "Drop your files to upload" : "Pretiahnite sem súbory, ktoré chcete nahrať", + "Conversation messages" : "Správy konverzácie", + "Scroll to bottom" : "Posuňte sa nadol", + "Post message" : "Uverejniť správu", + "Federated conversation" : "Federovaný rozhovor", + "Public conversation" : "Verejný rozhovor", + "Favorite" : "Obľúbené", + "Banned users" : "Zakázaný užívatelia", + "Manage the list of banned users in this conversation." : "Spravovať zoznam zakázaných uživateľov v tejto konverzácii.", + "Manage bans" : "Spravovať zákazy", + "No banned users" : "Žiadny zakázaný uživatelia", + "Banned by:" : "Zakazané od:", + "Date:" : "Dátum:", + "Note:" : "Poznámka:", + "Hide details" : "Skryť podrobnosti", + "Show details" : "Zobraziť podrobnosti", + "Unban" : "Zrušiť zákaz", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Môžete zmeniť názov a popis v {linkstart} Kalendári ↗ {linkend}.", + "Error while updating conversation name" : "Chyba pri aktualizácii názvu konverzácie", + "Error while updating conversation description" : "Chyba pri úprave popisu konverzácie", + "Enter a name for this conversation" : "Zadajte názov pre túto konverzáciu", + "Edit conversation name" : "Upraviť názov konverzácie", + "Edit conversation description" : "Upraviť popis konverzácie", + "Enter a description for this conversation" : "Vložte popis tejto konverzácie", + "Picture" : "Obrázok", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Nasledujúce boty môžu byť povolené v tejto konverzácii. Obráťte sa na svoju administráciu, aby ste získali ďalšie boty nainštalované na tomto serveri.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Žiadne roboty nie sú nainštalované na tomto serveri. Obráťte sa na svoju administráciu, aby ste získali zoznam robotov na tomto serveri.", + "Disable" : "Zakázať", + "Enable" : "Povoliť", + "The bot is not available anymore" : "Bot už nie je k dispozícii", + "Breakout rooms" : "Vyhradené miestnosti", + "Manage breakout rooms" : "Spravovať vyhradené miestnosti", + "Set up breakout rooms for this conversation" : "Nastaviť vyhradené miestnosti pre túto konverzáciu", + "Please select a valid PNG or JPG file" : "Prosím vyberte platný PNG alebo JPG súbor", + "Choose your conversation picture" : "Vyberte obrázok konverzácie", + "Choose" : "Vybrať", + "Error setting conversation picture" : "Chyba pri nastavovaní obrázka konverzácie", + "Could not set the conversation picture: {error}" : "Nepodarilo sa nastaviť obrázok konverzácie: {error}", + "Error cropping conversation picture" : "Chyba pri orezávaní obrázka konverzácie", + "Error removing conversation picture" : "Chyba pri odstraňovaní obrázka konverzácie", + "Set emoji as conversation picture" : "Nastavte emotikon ako obrázok konverzácie", + "Set background color for conversation picture" : "Nastavte farbu pozadia pre obrázok konverzácie", + "Upload conversation picture" : "Nahrať obrázok konverzácie", + "Choose conversation picture from files" : "Vyberte obrázok konverzácie zo súborov", + "Remove conversation picture" : "Odstrániť obrázok konverzácie", + "The file must be a PNG or JPG" : "Súbor musí byť vo formáte PNG alebo JPG", + "Set picture" : "Nastaviť obrázok", + "Default permissions modified for {conversationName}" : "Predvolené oprávnenia pre {conversationName} boli upravené", + "Could not modify default permissions for {conversationName}" : "Nie je možné upraviť oprávnenia pre {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Upravte predvolené práva pre účastníkov tejto konverzácie. Tieto nastavenia neovplyvňujú moderátorov.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Zakaždým, keď sa v tejto sekcii upravia oprávnenia, vlastné oprávnenia, ktoré boli predtým pridelené jednotlivým účastníkom, sa stratia.", + "All permissions" : "Všetky oprávnenia", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Účastníci majú oprávnenia začať hovor, pripojiť sa k hovoru, povoliť zvuk, video a zdieľanie obrazovky.", + "Restricted" : "Obmedzené", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Účastníci sa môžu pripojiť k hovorom, ale nemôžu povoliť zvuk, video alebo zdieľanie obrazovky, kým im moderátor manuálne neudelí oprávnenia.", + "Advanced permissions" : "Rozšírené oprávnenia", + "Edit permissions" : "Upraviť oprávnenia", + "Conversation settings" : "Nastavenia konverzácie", + "Basic Info" : "Základné informácie", + "Personal" : "Osobné", + "Moderation" : "Moderovanie", + "Setup overview" : "Prehľad nastavenia", + "Live transcription" : "Živý prepis", + "Live transcriptions app is not installed" : "Aplikácia pre živé prepisy nie je nainštalovaná", + "Enable live transcription" : "Povoliť živý prepis", + "Breakout Rooms" : "Vyhradené miestnosti", + "Matterbridge" : "Matterbridge", + "Bots" : "Boty", + "Danger zone" : "Nebezpečná oblasť", + "Archive conversation" : "Archivovať konverzáciu", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivované konverzácie sú predvolene skryté v zozname konverzácií. Stále sa však zobrazia, keď vyhľadáte názov konverzácie alebo pristupujete k zoznamu archivovaných konverzácií.", + "Do you really want to leave \"{displayName}\"?" : "Naozaj chcete opustiť \"{displayName}\"?", + "You can archive this conversation instead." : "Môžete túto konverzáciu namiesto toho archivovať.", + "Leave conversation" : "Opustiť konverzáciu", + "You need to promote a new moderator before you can leave the conversation" : "Skôr než budete môcť opustiť rozhovor, je potrebné niekomu odovzdať rolu moderátora.", + "Delete conversation" : "Odstrániť konverzáciu", + "Do you really want to delete \"{displayName}\"?" : "Naozaj chcete odstrániť „{displayName}“?", + "Error while deleting conversation" : "Chyba pri vymazávaní konverzácie", + "Delete all chat messages" : "Vymazať všetky správy v rozhovore", + "Do you really want to delete all messages in \"{displayName}\"?" : "Naozaj chcete odstrániť všetky správy v priečinku „{displayName}“?", + "Error while clearing chat history" : "Chyba pri čistení histórie rozhovoru", + "Be careful, these actions cannot be undone." : "Buďte obozretný, táto akcia sa nedá vrátiť späť.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Keď je konverzácia opustená, na opätovné zapojenie do uzavretej konverzácie je potrebné pozvánka. K otvorenej konverzácii sa môžete pripojiť kedykoľvek.", + "Permanently delete this conversation." : "Natrvalo odstrániť túto konverzáciu.", + "Delete chat messages" : "Vymazať správy z rozhovoru", + "Permanently delete all the messages in this conversation." : "Natrvalo odstrániť všetky správy v tejto konverzácii.", + "_%n hour_::_%n hours_" : ["%n hodina","%n hodiny","%n hodín","%n hodiny"], + "_%n day_::_%n days_" : ["%n deň","%n dni","%n dní","%n dni"], + "_%n week_::_%n weeks_" : ["%n týždeň","%n týždne","%n týždňov","%n týždne"], + "Custom expiration time" : "Vlastný čas vypršania platnosti správy", + "Message expiration disabled" : "Vypršanie platnosti správy je vypnuté", + "Message expiration set: {duration}" : "Vypršanie platnosti správy nastavené na: {duration}", + "Error when trying to set message expiration" : "Chyba pri pokuse o nastavenie uplynutia platnosti správy", + "Message expiration" : "Vypršanie platnosti správy", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Platnosť četových správ môže po určitom čase vypršať. Poznámka: Súbory zdieľané v chate sa vlastníkovi neodstránia, ale už sa nebudú zdieľať v konverzácii.", + "Set message expiration" : "Nastaviť platnosť správ", + "Current message expiration" : "Súčasná expirácia správ", + "Password copied to clipboard" : "Heslo bolo skopírované do schránky", + "Password could not be copied" : "Heslo sa nepodarilo skopírovať.", + "Guest access" : "Prístup pre hostí", + "Breakout rooms are not allowed in public conversations." : "Oddelené miestnosti nie sú povolené v verejných rozhovoroch.", + "Allow guests to join this conversation via link" : "Umožniť hosťom pripojiť sa k rozhovoru prostredníctvom odkazu", + "Password protection" : "Ochrana heslom", + "This conversation is password-protected. Guests need password to join" : "Táto konverzácia je chránená heslom. Hostia potrebujú heslo na pripojenie.", + "Password protection is needed for public conversations" : "Ochrana heslom je potrebná pre verejné konverzácie.", + "Set a password" : "Nastavte si heslo", + "Change password" : "Zmeniť heslo", + "Enter new password" : "Zadať nové heslo", + "Save password" : "Uložiť heslo", + "Copy password" : "Kopírovať heslo", + "Guests are allowed to join this conversation via link" : "Hostia majú povolené pripojiť sa k tejto konverzácii cez odkaz", + "Guests are not allowed to join this conversation" : "Hostia nemajú povolené pridať sa k tejto konverzácii", + "Resend invitations" : "Znovy odslať pozvánky", + "This conversation is open to both registered users and users created with the Guests app" : "Táto konverzácia je otvorená pre registrovaných užívateľov aj pre užívateľov vytvorených pomocou aplikácie Guests.", + "This conversation is open to registered users" : "Táto konverzácia je otvorená pre registrovaných užívateľov", + "This conversation is limited to the current participants" : "Táto konverzácia je obmedzená na súčasných účastníkov", + "You opened the conversation to both registered users and users created with the Guests app" : "Otvorili ste konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "Error occurred when opening or limiting the conversation" : "Pri otváraní alebo obmedzovaní konverzácie nastala chyba", + "Open conversation to registered users, showing it in search results" : "Otvoriť konverzáciu pre registrovaných užívateľov a zobraziť ju vo výsledkoch vyhľadávania", + "Also open to users created with the Guests app" : "Taktiež otvorené pre užívateľov vytvorených pomocou aplikácie Guests", + "Open conversation" : "Otvoriť konverzáciu", + "Set language spoken in calls" : "Nastaviť jazyk používaný počas hovorov", + "Languages could not be loaded" : "Jazyky sa nedali načítať", + "Loading languages …" : "Načítavanie jazykov …", + "Invalid language" : "Neplatný jazyk", + "Default language (English)" : "Predvolený jazyk (angličtina)", + "Default live transcription language set" : "Predvolený jazyk živého prepisu nastavený", + "Live transcription language set: {languageName}" : "Jazyk živého prepisu nastavený na: {languageName}", + "Error when trying to set live transcription language" : "Chyba pri pokuse o nastavenie jazyka živého prepisu", + "Start time: {date}" : "Čas začiatku: {date}", + "Start time has been updated" : "Čas začiatku bol zmenený", + "Error occurred while updating start time" : "Pri nastavovaní času začiatku sa vyskytla chyba", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Zapnutie čakárne odstráni nemoderátorov z prebiehajúceho hovoru.", + "Enable lobby, restricting the conversation to moderators" : "Povoliť čakáreň, obmedziť konverzáciu iba na moderátorov", + "Meeting start time" : "Čas začatia schôdzky", + "Start time (optional)" : "Čas začiatku (voliteľné)", + "Import email participants" : "Importovať účastníkov e-mailu", + "You can import a list of email participants from a CSV file." : "Môžete importovať zoznam účastníkov e-mailu zo súboru CSV.", + "Poll drafts" : "Návrhy ankiet", + "Browse poll drafts" : "Prehľadávať návrhy ankiet", + "Error occurred when locking the conversation" : "Pri zamykaní konverzácie nastala chyba", + "Error occurred when unlocking the conversation" : "Pri odomykaní konverzácie nastala chyba", + "Lock conversation" : "Zamknúť konverzáciu", + "This will also terminate the ongoing call." : "Týmto sa ukončí aj prebiehajúci hovor.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Uzamknite konverzáciu, aby ste zabránili komukoľvek uverejňovať správy alebo začínať hovory", + "Edit" : "Upraviť", + "More information" : "Viac informácií", + "Delete" : "Zmazať", + "Add new bridged channel to current conversation" : "Pridajte do aktuálnej konverzácie nový premosťovací kanál", + "unknown state" : "neznámy stav", + "running" : "spustené", + "not running, check Matterbridge log" : "nebeží, skontrolujte Matterbridge log", + "not running" : "nespustené", + "Bridge saved" : "Premostenie uložené", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Pomocou Matterbridge môžete premosťovať kanály z rôznych systémov okamžitých správ.", + "More info on Matterbridge" : "Viac informácií o Matterbridge", + "Messaging systems" : "Systémy posielania správ", + "Enable bridge" : "Povoliť most", + "Show Matterbridge log" : "Zobraziť záznam udalostí Matterbridge", + "Log content" : "Obsah logov", + "Only moderators are allowed to mention @all" : "Iba moderátori smú spomínať @all", + "All participants are allowed to mention @all" : "Všetkým účastníkom je povolené spomenúť @all.", + "Participants are now allowed to mention @all." : "Účastníci môžu teraz spomínať @all.", + "Mentioning @all has been limited to moderators." : "Zmienka o @all bola obmedzená na moderátorov.", + "Allow participants to mention @all" : "Dovoliť účastníkom spomenúť @all (všetkých)", + "Mention permissions" : "Oprávnenia pre zmienku", + "Notifications" : "Upozornenia", + "Notify about calls in this conversation" : "Upozorniť na hovory v tejto konverzácii", + "Important conversation" : "Dôležitá konverzácia", + "\"Do not disturb\" user status is ignored for important conversations" : "Stav používateľa „Nerušiť“ sa pri dôležitých konverzáciách ignoruje.", + "Sensitive conversation" : "Citlivá konverzácia", + "Message preview will be disabled in conversation list and notifications" : "Ukážka správy bude v zozname konverzácií a v upozorneniach vypnutá", + "Recording consent is required for calls in this conversation" : "Súhlas so záznamom je potrebný pre hovory v tejto konverzácii", + "Recording consent is not required for calls in this conversation" : "Súhlas so záznamom nie je potrebný pre hovory v tejto konverzácii", + "Recording consent requirement was updated" : "Požiadavka o súhlas so záznamom bola aktualizovaná.", + "Error occurred while updating recording consent" : "Pri aktualizácii súhlasu so záznamom sa vyskytla chyba", + "Recording Consent" : "Súhlas so záznamom", + "Recording consent cannot be changed once a call or breakout session has started." : "Súhlas s nahrávaním nemôže byť zmenený, akonáhle sa začne hovor alebo odpočinková relácia.", + "Require recording consent before joining call in this conversation" : "Vyžadovať súhlas so záznamom pred pripojením hovoru v tejto konverzácii", + "Recording consent is required for all calls" : "Súhlas so záznamom je potrebný pre všetky hovory", + "SIP dial-in is now possible without PIN requirement" : "SIP telefonické pripojenie je teraz možné bez požiadavky na PIN", + "SIP dial-in is now enabled" : "SIP prijatie hovoru je teraz zapnuté", + "SIP dial-in is now disabled" : "SIP prijatie hovoru je teraz vypnuté", + "Error occurred when enabling SIP dial-in" : "Nastala chyba pri povoľovaní prijatia hovoru cez SIP", + "Error occurred when disabling SIP dial-in" : "Nastala chyba pri vypínaní prijatia hovoru cez SIP", + "Phone and SIP dial-in" : "Vytáčanie telefónom a SIP ", + "Enable phone and SIP dial-in" : "Povoliť vytáčanie telefónom a SIP ", + "Allow to dial-in without a PIN" : "Povoliť vytáčanie bez pin-u", + "Ongoing" : "Prebieha", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba prijala","%n ľudí prijalo","%n ľudí prijalo","%n ľudí prijalo"], + "_%n person declined_::_%n people declined_" : ["%n osoba odmietla","%n ľudí odmietlo","%n ľudí odmietlo","%n ľudia odmietli"], + "_and %n other attachment_::_and %n other attachments_" : ["a %n iná príloha","a %n iných príloh","a %n iných príloh","a %n iných príloh"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "V {conversation}", + "View attachment" : "Zobraziť prílohu", + "Join" : "Pripojiť", + "View conversation" : "Zobraziť konverzáciu", + "View event on Calendar" : "Zobraziť udalosť v kalendári", + "Error while creating the conversation" : "Pri vytváraní konverzácie sa vyskytla chyba", + "Hello, {displayName}" : "Ahoj, {displayName}", + "Start meeting now" : "Začať stretnutie teraz", + "Give your meeting a title" : "Dajte svojej schôdzke názov", + "Create and copy link" : "Vytvoriť a skopírovať odkaz", + "Create a new conversation" : "Vytvoriť novú konverzáciu", + "Join open conversations" : "Pripojiť sa k prebiehajúcim konverzáciam", + "Call a phone number" : "Zavolať na telefónne číslo", + "Scroll backward" : "Prejsť späť", + "Scroll forward" : "Posunúť dopredu", + "Schedule meetings" : "Plánovať stretnutia", + "You don't have any upcoming meetings" : "Nemáte žiadne nadchádzajúce stretnutia", + "Open calendar" : "Otvoriť kalendár", + "Unread mentions" : "Neprečítané upozornenia", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Správy, v ktorých ste boli spomenutí, sa tu zobrazia. Ľudí môžete spomenúť tak, že napíšete @ nasledované ich menom.", + "Upcoming reminders" : "Nadchádzajúce pripomienky", + "Message reminders" : "Pripomienky správ", + "Set a reminder on a message to be notified" : "Pre upozornenie nastavte pripomienku na správu", + "Start a group conversation" : "Začnite skupinovú konverzáciu", + "Create conversation" : "Vytvoriť konverzáciu", + "Enter your name" : "Zadajte svoje meno", + "Submit name and join" : "Odoslať meno a pripojiť sa", + "Do you already have an account?" : "Už máte účeť?", + "Log in" : "Prihlásiť sa", + "Error while verifying uploaded file" : "Chyba pri overovaní nahraného súboru", + "Uploaded file is verified" : "Nahraný súbor je overený", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Formát obsahu je hodnoty oddelené čiarkami (CSV):
- Hlavičkový riadok je povinný a musí zodpovedať \"meno\",\"email\" alebo len \"email\"
- Jeden záznam na riadok (napr. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Účastníci boli úspešne pridaní", + "Error while adding participants" : "Chyba pri pridávaní účastníkov", + "Import a file" : "Importovať súbor", + "Browse" : "Prechádzať", + "Verifying uploaded file …" : "Overovanie nahraného súboru ...", + "This might take a moment" : "Toto môže chvíľu trvať.", + "Send invitations" : "Odoslať pozvánky", + "_%n invalid email_::_%n invalid emails_" : ["%n neplatný email","%n neplatné emaily","%n neplatných emailov","%n neplatných emailov"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail je už importovaný alebo je duplikát","%n e-mailov sú už importované alebo sú duplikáty","%n e-mailov sú už importované alebo sú duplikáty","%n e-maily sú už importované alebo sú duplikáty"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n pozvánka môže byť odoslaná","%n pozvánky môžu byť odoslané","%n pozvánok môže byť odoslaných","%n pozvánok môže byť odoslaných"], + "An error occurred while calling a phone number" : "Pri volaní na telefónne číslo sa vyskytla chyba", + "Phone number could not be called: {error}" : "Telefónne číslo sa nedalo zavolať: {error}", + "Phone number could not be called" : "Telefónne číslo sa nedalo zavolať", + "Search participants or phone numbers" : "Hľadať účastníkov alebo telefónne čísla", + "Creating the conversation …" : "Vytváram konverzáciu ...", + "Mark as read" : "Označiť ako prečítané", + "Mark as unread" : "Označiť ako neprečítané", + "Remove from favorites" : "Odstrániť z obľúbených", + "Add to favorites" : "Pridať do obľúbených", + "Unarchive conversation" : "Zrušiť archiváciu konverzácie", + "Ignore \"Do not disturb\"" : "Ignorovať \"Nevyrušovať\"", + "You need to promote a new moderator before you can leave the conversation." : "Skôr než budete môcť opustiť rozhovor, je potrebné niekomu odovzdať rolu moderátora.", + "Conversation actions" : "Akcie konverzácie", + "Notify about calls" : "Upozorniť na hovory", + "Hide message text" : "Skryť text správy", + "Pending invitations" : "Čakajúce pozvánky", + "Join conversations from other servers" : "Pripojte sa k rozhovorom z iných serverov", + "From {user} at {remoteServer}" : "Od {user} na {remoteServer}", + "Decline invitation" : "Odmietnuť pozvánku", + "Accept invitation" : "Prijať pozvánku", + "No pending invitations" : "Žiadne čakajúce pozvánky", + "Home" : "Domov", + "Unread" : "Neprečítané", + "Mentions" : "Zmienky", + "Meetings" : "Stretnutia", + "Sort conversations" : "Zoradiť konverzácie", + "By recent activity" : "Podľa nedávnej aktivity", + "Alphabetically" : "Abecedne", + "Do not group by type" : "Nezoskupovať podľa typu", + "Show private ones first" : "Najprv zobraz súkromné položky", + "Show group ones first" : "Zobraziť najprv skupiny", + "No followed threads" : "Žiadne sledované vlákna", + "No matches found" : "Nebola nájdená žiadna zhoda", + "No conversations found" : "Neboli nájdené žiadne konverzácie", + "You have no archived conversations." : "Nemáte žiadne archivované konverzácie", + "Subscribe to an existing thread or start your own." : "Prihláste sa do existujúceho vlákna alebo začnite svoje vlastné.", + "You have no unread mentions." : "Nemáte žiadne neprečítané upozornenia.", + "You have no unread messages." : "Nemáte žiadne neprečítané správy.", + "An error occurred while performing the search" : "Pri vyhľadávaní sa vyskytla chyba", + "Conversation list" : "Zoznam konverzácií", + "Filter conversations by" : "Filtrovať konverzácie podľa", + "Unread messages" : "Neprečítané správy", + "Meeting conversations" : "Konverzácie na stretnutiach", + "Clear filters" : "Vyčistiť filtre", + "New personal note" : "Nová osobná poznámka", + "SIP backend is not installed" : "Backend SIP nie je nainštalovaný", + "Back to conversations" : "Naspäť do konverzácií", + "Archived conversations" : "Archivovať konverzácie", + "Threads" : "Vlákna", + "Clear filter" : "Vyčistiť filter", + "Show more threads" : "Zobraziť viac vlákien", + "App settings" : "Nastavenia Aplikácie", + "Users" : "Používatelia", + "Groups" : "Skupiny", + "Teams" : "Tímy", + "Federated users" : "Združený užívateľ", + "New private conversation" : "Nová súkromná konverzácia", + "Other sources" : "Iné zdroje", + "Open conversations" : "Otvoriť konverzácie", + "No search results" : "Žiadne výsledky vyhľadávania", + "Users, groups and teams" : "Užívatelia, skupiny a tímy", + "Users and groups" : "Používatelia a skupiny", + "Users and teams" : "Užívatelia a tímy", + "Groups and teams" : "Skupiny a tímy", + "New group conversation" : "Nová skupinová konverzácia", + "The meeting will start soon" : "Rozhovor začne čoskoro", + "This meeting is scheduled for {startTime}" : "Tento rozhovor je naplánovaný na {startTime}", + "You are currently waiting in the lobby" : "Momentálne ste v čakárni", + "Enable noise suppression" : "Povoliť potlačenie šumu", + "Reduce background noises for better voice quality" : "Znížiť šum v pozadí pre lepšiu kvalitu hlasu", + "Enable echo cancellation" : "Povoliť zrušenie ozveny", + "Minimize echo effect from own surrounding" : "Minimalizovať efekt ozveny z vlastného okolia", + "Enable auto gain control" : "Povoliť automatické ovládanie zosilnenia", + "Dynamically adjust microphone volume for consistent level" : "Dynamické upravovanie hlasitosti mikrofónu pre konzistentnú úroveň", + "Select microphone" : "Vyberte mikrofón", + "No microphone available" : "Mikrofón nie je k dispozícii", + "Select speaker" : "Vybrať reproduktor", + "No speaker available" : "Reproduktor nie je k dispozícii", + "Select camera" : "Vyberte kameru", + "No camera available" : "Kamera nie je k dispozícii", + "Select a device" : "Vyberte zariadenie", + "Playing …" : "Prehrávam ...", + "Test speakers" : "Test reproduktorov", + "Test" : "Vyskúšať", + "Devices" : "Zariadenia", + "Backgrounds" : "Pozadia", + "No audio" : "Žiadny zvuk", + "No camera" : "Žiadna kamera", + "Display video as you will see it (mirrored)" : "Zobraziť video ako ho uvidíte vy (zrkadlenie)", + "Display video as others will see it" : "Zobraziť video ako ho uvidia ostatný", + "Calls are not supported in your browser" : "Váš prehliadač nepodporuje hovory", + "Access to microphone is only possible with HTTPS" : "Prístup k mikrofónu je možný iba pomocou protokolu HTTPS", + "Access to microphone was denied" : "Prístup k mikrofónu bol zamietnutý", + "Error while accessing microphone" : "Nastala chyba pri prístupe k mikrofónu", + "Access to camera is only possible with HTTPS" : "Prístup ku kamere je možný iba pomocou protokolu HTTPS", + "The call is being recorded." : "Hovor sa nahráva.", + "The call might be recorded." : "Hovor môže byť zaznamenaný.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Záznam by mohol obsahovať váš hlas, video z kamery a zdieľanú obrazovku. Pred pripojením k hovoru je potrebný váš súhlas.", + "Give consent to the recording of this call" : "Dajte súhlas na nahrávanie tohto hovoru", + "Show more info" : "Zobraziť viac informácií", + "Audio is not available" : "Zvuk nie je k dispozícii.", + "Video is not available" : "Video nie je k dispozícii", + "Start recording immediately with the call" : "Po začatí hovoru spustiť hneď nahrávanie", + "Recording backend is not installed" : "Prostredie pre nahrávanie nie je nainštalované", + "Notify all participants about this call" : "Poslať všetkým účastníkom upozornenie na tento hovor", + "Apply settings" : "Použiť nastavenia", + "Select virtual office background" : "Vybrať pozadie virtuálna kancelária", + "Select virtual home background" : "Vybrať pozadie virtuálny domov", + "Select virtual abstract background" : "Vybrať virtuálne abstraktné pozadie", + "Select virtual beach background" : "Vybrať pozadie virtuálna pláž", + "Select virtual park background" : "Vybrať pozadie virtuálny park", + "Select virtual theater background" : "Vybrať pozadie virtuálne divadlo", + "Select virtual library background" : "Vybrať pozadie virtuálna knižnica", + "Select virtual space station background" : "Vybrať pozadie virtuálna vesmírna stanica", + "Error while uploading the file" : "Chyba pri nahrávaní súboru", + "Select a file" : "Vybrať súbor", + "Invalid path selected" : "Bola vybraná neplatná cesta", + "Select virtual background from file {fileName}" : "Vybrať virtuálne pozadie zo súboru {fileName}", + "Blur" : "Rozmazať", + "Upload" : "Nahrať", + "Files" : "Súbory", + "(editing)" : "(upravuje)", + "(edited)" : "(editované)", + "The message has expired or has been deleted" : "Správe vypršala platnoť alebo bola zmazaná", + "Cancel quote" : "Zrušiť citáciu", + "24 hours" : "24 hodín", + "7 days" : "7 dní", + "30 days" : "30 dní", + "Until unpin" : "Až do odopnutia", + "Clear reminder – {timeLocale}" : "Zrušiť pripomienku – {timeLocale}", + "Edited by {actor}" : "Upravené od {actor}", + "Pinned by you" : "Pripnuté Vami", + "Pinned by {actor}" : "Pripnuté od{actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Text správy bol skopírovaný do schránky", + "Message text could not be copied" : "Text správy sa nepodarilo skopírovať", + "Message forwarded to \"Note to self\"" : "Správa preposlaná do \"Poznámky pre seba\"", + "Error while forwarding message to \"Note to self\"" : "Chyba pri preposielaní správy do \"Poznámky pre seba\"", + "A reminder was successfully removed" : "Pripomienka bola úspešne odstránená", + "Error occurred when removing a reminder" : " Pri odstraňovaní pripomienky sa vyskytla chyba", + "A reminder was successfully set at {datetime}" : "Pripomienka bola úspešne nastavená na {datetime}", + "Error occurred when creating a reminder" : "Pri vytváraní pripomienky sa vyskytla chyba", + "Add a reaction to this message" : "Reagovať na túto správu", + "Reply" : "Odpovedať", + "More actions" : "Viac akcií", + "Set reminder" : "Nastaviť pripomienku", + "Pin message" : "Pripnúť správu", + "Unpin message" : "Odopnúť správu", + "Reply privately" : "Odpovedať súkromne", + "Edit message" : "Upraviť správu", + "Copy message" : "Kopírovať správu", + "Copy message link" : "Kopírovať odkaz správy", + "Go to file" : "Prejsť na súbor", + "Download file" : "Stiahnuť súbor", + "Go to thread" : "Prejsť na vlákno", + "Edit thread details" : "Upraviť detaily vlákna", + "Forward message" : "Preposlať správu", + "Translate" : "Preložiť", + "Set custom reminder" : "Nastaviť vlastnú pripomienku", + "Keep pinned for" : "Zachovať pripnuté pre", + "Set custom period" : "Nastaviť vlastné obdobie", + "Close reactions menu" : "Zatvoriť ponuku reakcií", + "React with {emoji}" : "Reagovať s {emoji}", + "React with another emoji" : "Reagovať s inou emotikonou.", + "Choose a conversation to forward the selected message." : "Vyberte konverzáciu, ktorou chcete vybranú správu poslať ďalej.", + "Error while forwarding message" : "Chyba počas preposielania správy", + "The message has been forwarded to {selectedConversationName}" : "Správa bola preposlaná na adresu {selectedConversationName}", + "Dismiss" : "Zatvoriť", + "Go to conversation" : "Prejisť na konverzáciu", + "Detect language" : "Zistiť jazyk", + "The message could not be translated" : "Správa sa nedala preložiť", + "Translation copied to clipboard" : "Preklad skopírovaný do schránky", + "Translation could not be copied" : "Preklad sa nepodarilo skopírovať", + "Translate message" : "Preložiť správu", + "Source language to translate from" : "Zdrojový jazyk pre preklad", + "Translate from" : "Preložiť z", + "Target language to translate into" : "Cieľový jazyk prekladu", + "Translate to" : "Preložiť do", + "Translating" : "Prekladanie", + "This translation is AI generated and may contain mistakes." : "Táto preklad je generovaný pomocou AI a môže obsahovať chyby.", + "Copy translated text" : "Kopírovať preložený text", + "Error when scheduling the message" : "Chyba pri plánovaní správy", + "Reschedule" : "Preplánovať", + "Send now" : "Odoslať teraz", + "Choose a time" : "Vyberte čas", + "Send at custom time" : "Odoslať v upravenom čase", + "Will be sent without notification" : "Bude odoslané bez upozornenia.", + "Message read by everyone who shares their reading status" : "Správa prečítaná každým, kto zdieľa svoj stav", + "Message sent" : "Správa bola odoslaná", + "Sent without notification" : "Odoslať bez upozornenia", + "Deleting message" : "Mažem správu", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Správa bola úspešne odstránená, ale bot alebo Matterbridge sú nakonfigurované a správa už môže byť distribuovaná do iných služieb", + "Message deleted successfully" : "Správa úspešne vymazaná.", + "Message could not be deleted because it is too old" : "Správa nemôže byť vymazaná pretože je príliš stará", + "Only normal chat messages can be deleted" : "Odstrániť sa dajú iba bežné správy z četu", + "An error occurred while deleting the message" : "Pri vymazávaní správy sa vyskytla chyba", + "Pinned" : "Pripnuté", + "Your browser does not support playing audio files" : "Váš prehliadač nepodporuje prehrávanie zvukových súborov", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Karta aplikácie Deck", + "Remove {fileName}" : "Dostrániť {fileName}", + "Open this location in OpenStreetMap" : "Otvoriť toto umiestnenie v Openstreetmap", + "_%n reply_::_%n replies_" : ["%n odpoveď","%n odpovede","%n odpovedí","%n odpovedí"], + "Sending message" : "Odosielam správu", + "Failed to send the message. Click to try again" : "Nepodarilo sa odoslať správu. Kliknite pre opakovanie", + "Not enough free space to upload file" : "Nie je voľné miesto pre nahranie súboru", + "You cannot send messages to this conversation at the moment" : "Teraz nemôžete poslať správu do tejto konverzácie", + "Could not update the message" : "Nepodarilo sa aktualizovať správu", + "Reply to thread \"{threadTitle}\"" : "Odpovedať na vlákno \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Hlasovali ste • %n hla","Hlasovali ste • %n hlasov","Hlasovali ste • %n hlasov","Hlasovali ste • %n hlasy"], + "You voted" : "Hlasovali ste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknite pre hlasovanie • %n hlas","Kliknite pre hlasovanie • %n hlasov","Kliknite pre hlasovanie • %n hlasov","Kliknite pre hlasovanie • %n hlasy"], + "Click to vote" : "Kliknite pre hlasovanie", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Koncept ankety • %n voľba","Koncept ankety • %n voľby","Koncept ankety • %n volieb","Koncept ankety • %n volieb"], + "_%n vote_::_%n votes_" : ["%n hlas","%n hlasy","%n hlasov","%n hlasov"], + "Edit poll draft" : "Upraviť koncept ankety", + "Delete poll draft" : "Zmazať koncept ankety", + "Open poll" : "Otvoriť anketu", + "Closed poll" : "Uzavretá anketa", + "See results" : "Zobraziť výsledky", + "Reactions" : "Reakcie", + "No permission to post reactions in this conversation" : "Nemáte oprávnenie na uverejňovanie reakcií v tomto rozhovore", + "and {participant}" : "a {participant}", + "_and %n other participant_::_and %n other participants_" : ["a %n ďalší účastník","a %n ďalší účastníci","a %n ďalších účastníkov","a %n ďalších účastníkov"], + "Show all reactions" : "Zobraziť všetky reakcie", + "Add more reactions" : "Pridať viac reakcií", + "Show or collapse system messages" : "Zobraziť alebo skryť systémové správy", + "No messages" : "Žiadne správy", + "All messages have expired or have been deleted." : "Všetkým správam vypršala platnosť alebo boli zmazané.", + "Generate summary with AI" : "Vygenerovať zhrnutie pomocou AI", + "{author} (pinned by you)" : "{author} (pripnuté Vami)", + "{author} (pinned by {actor})" : "{author} (pripnuté od{actor})", + "Unpin" : "Odopnúť", + "Cancel search" : "Zrušiť vyhľadávanie", + "Add a phone number" : "Pridať telefónne číslo", + "Error: A password is required to create the conversation." : "Chyba: Na vytvorenie konverzácie je potrebné zadať heslo.", + "All set, the conversation \"{conversationName}\" was created." : "Všetko je pripravené, konverzácia \"{conversationName}\" bola vytvorená.", + "Create a new group conversation" : "Vytvoriť novú skupinovú konverzáciu", + "Add participants" : "Pridať účastníkov", + "Maximum length exceeded ({maxlength} characters)" : "Prekročená maximálna dĺžka ({maxlength} znakov)", + "Conversation type" : "Typ konverzácie", + "Conversation visibility" : "Viditeľnosť konverzácie", + "Allow guests to join via link" : "Umožniť hosťom pripojiť sa prostredníctvom odkazu", + "Enter password" : "Zadajte heslo", + "This conversation has been locked" : "Rozhovor bol zamknutý", + "No permission to post messages in this conversation" : "Nemáte povolenie na uverejňovanie správ v tomto rozhovore", + "Joining conversation …" : "Pripájam sa ku konverzácii ...", + "Write a message without notification" : "Napíšte správu bez upozornenia", + "Create a thread silently" : "Vytvorte vlákno potichu", + "Create a thread" : "Vytvoriť vlákno", + "Send message silently" : "Odoslať správu potichu", + "Send message" : "Odoslať správu", + "Send without notification" : "Poslať bez upozornenia", + "The participant will not be notified about new messages" : "Účastník nebude upozornený na nové správy", + "Participants will not be notified about new messages" : "Účastníci nebudú upozornený na nové správy", + "Message will be sent {datetimeString}" : "Správa bude odoslaná {datetimeString}", + "Thread title is required" : "Názov vlákna je povinný", + "Message text is required" : "Text správy je povinný", + "The message could not be edited" : "Správu sa nepodarilo upraviť", + "File to share" : "Súbor na zdieľanie", + "File upload is not available in this conversation" : "Nahrávanie súboru nie je v tejto konverzácii dostupné", + "Message was successfully scheduled" : "Správa bola úspešne naplánovaná", + "Add emoji" : "Pridať emotikonu", + "Adding a mention will only notify users who did not read the message." : "Pridanie pripomienky upozorní len užívateľov, ktorí správu nečítali.", + "Thread title" : "Názov vlákna", + "Send later" : "Odoslať neskôr", + "Show scheduled messages" : "Zobraziť naplánované správy", + "Cancel editing" : "Zrušiť úpravy", + "Schedule message" : "Naplánovať správu", + "{user} is out of office and might not respond." : "{user} je mimo kancelárie a pravdepodobne nebude odpovedať.", + "Absence period: {startDate} - {endDate}" : "Obdobie absencie: {startDate} - {endDate}", + "Replacement:" : "Náhrada:", + "Share from {nextcloud}" : "Zdieľané z {nextcloud}u", + "Share from Files" : "Zdieľať zo Súborov", + "Share files to the conversation" : "Zdieľať súbory v konverzácii", + "Upload from device" : "Nahrať zo zariadenia", + "Create new poll" : "Vytvoriť novú anketu", + "Smart picker" : "Inteligentný výber", + "Record voice message" : "Nahrať hlasovú správu", + "End recording and send" : "Zastaviť nahrávanie a odoslať", + "Dismiss recording" : "Zrušiť nahrávanie", + "Access to the microphone was denied" : "Prístup k mikrofónu bol zamietnutý", + "Microphone either not available or disabled in settings" : "Mikrofón buď nie je k dispozícii, alebo je v nastaveniach zakázaný", + "Error while recording audio" : "Chyba pri nahrávaní zvuku", + "Voice message {time} ({conversation})" : "Hlasová správa {time} ({conversation})", + "Generating summary of unread messages …" : "Generovanie súhrnu neprečítaných správ …", + "Summary is AI generated and might contain mistakes" : "Zhrnutie je generované pomocou AI a môže obsahovať chyby.", + "Error occurred during a summary generation" : "Došlo k chybe počas generovania súhrnu.", + "New file" : "Nový súbor", + "Blank" : "Prázdne", + "Error while creating file" : "Chyba pri vytváraní súboru", + "Create and share a new file" : "Vytvoriť a zdieľať nový súbor", + "Name of the new file" : "Názov nového súboru", + "Create file" : "Vytvoriť súbor", + "Someone is typing …" : "Niekto píše ...", + "{user1} is typing …" : "{user1} píše ...", + "{user1} and {user2} are typing …" : "{user1} a {user2} píšu ...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} a {user3} píšu ...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} a %n ďalší píše ...","{user1}, {user2}, {user3} a %n ďalších píše ...","{user1}, {user2}, {user3} a %n ďalších píše ...","{user1}, {user2}, {user3} a %n ďalších píše ..."], + "Add more files" : "Pridať viac súborov", + "Send" : "Odoslať", + "In this conversation {user} can:" : "V tomto rozhovore {user} môže:", + "Edit default permissions for participants in {conversationName}" : "Upraviť predvolené oprávnenia pre účastníkov v {conversationName}", + "Start a call" : "Začať hovor", + "Skip the lobby" : "Preskočiť čakáreň", + "Can post messages" : "Môže posielať správy", + "Can post messages and reactions" : "Môže pridať správu a reagovať", + "Can add reactions" : "Môže pridať reakcie", + "Enable the microphone" : "Povoliť mikrofón", + "Enable the camera" : "Povoliť kameru", + "Share the screen" : "Zdieľať obrazovku", + "Update permissions" : "Aktualizovať oprávnenia", + "Updating permissions" : "Aktualizujem oprávnenia", + "No poll drafts" : "Žiadne návrhy ankiet", + "There is no poll drafts yet saved for this conversation" : "Pre túto konverzáciu ešte neboli uložené žiadne návrhy ankiet.", + "Create poll in {name}" : "Vytvoriť anketu v {name}", + "Create poll" : "Vytvoriť anketu", + "Error while importing poll" : "Chyba pri importe ankety", + "Question" : "Otázka", + "Ask a question" : "Opýtať sa otázku", + "Import draft from file" : "Importovať koncept zo súboru", + "Answers" : "Odpovede", + "Answer {option}" : "Odpoveď {option}", + "Delete poll option" : "Odstrániť voľbu z ankety", + "Add answer" : "Pridať odpoveď", + "Settings" : "Nastavenia", + "Anonymous poll" : "Anonymná anketa", + "Multiple answers" : "Viac odpovedí", + "Save as draft" : "Uložiť ako koncept", + "Export draft to file" : "Exportovať koncept do súboru", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konečné výsledky • %n hlas","Konečné výsledky • %n hlasov","Konečné výsledky • %n hlasov","Konečné výsledky • %n hlasy"], + "Your vote is anonymous" : "Váš hlas je anonymný", + "You voted for this option" : "Hlasovali ste pre túto možnosť", + "End poll" : "Ukončiť anketu", + "Change your vote" : "Zmeniť hlasovanie", + "Withdraw vote" : "Stiahnuť hlas", + "Results" : "Výsledky", + "Voted participants" : "Hlasujúci účastníci", + "Send a message to \"{roomName}\"" : "Poslať správu do \"{roomName}\"", + "Hide list of participants" : "Skryť zoznam účastníkov", + "Show list of participants" : "Zobraziť zoznam účastníkov", + "Assistance requested in {roomName}" : "Pomoc požadovaná v {roomName}", + "The message was sent to \"{roomName}\"" : "Správa bola odoslaná do \"{roomName}\"", + "Dismiss request for assistance" : "Zamietnuť žiadosť o pomoc", + "Send message to room" : "Poslať správu do miestnosti", + "Back to main room" : "Späť do hlavnej miestnosti", + "Back to your room" : "Späť do vlastnej miestnosti", + "Message all rooms" : "Správa všetkým miestnostiam", + "Start session" : "Začať reláciu", + "Start a call before you start a breakout room session" : "Začať hovor predtým, než začnete sedenie v miestnosti", + "Stop session" : "Zastaviť reláciu", + "The message was sent to all breakout rooms" : "Správa bola odoslaná do všetkých miestností.", + "Send a message to all breakout rooms" : "Poslať správu do všetkých miestností", + "Breakout rooms are not started" : "Vyhradené miestnosti neboli otvorené", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Hovory bez vysokovýkonného backendu môžu spôsobiť problémy s konektivitou a vysoké zaťaženie zariadení. {linkstart} Zistite viac {linkend}", + "Talk setup incomplete" : "Nastavenie Talk neúplné", + "Disable lobby" : "Vypnúť čakáreň", + "Settings for participant \"{user}\"" : "Nastavenia účastníka \"{user}\"", + "Participant \"{user}\"" : "Účastník \"{user}\"", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "hosť", + "Ringing …" : "Zvoní ...", + "Call rejected" : "Hovor odmietnutý", + "{time} talking …" : "hovorí {time} ...", + "{time} talking time" : "{time} čas hovoru", + "Raised their hand" : "Zdvihli ruky", + "Joined with video" : "Pripojené s videom", + "Joined via phone" : "Pripojené cez telefón", + "Joined with audio" : "Pripojené so zvukom", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Popis musí byť menší alebo rovný {maxLength} znakov. Váš aktuálny text má {charactersCount} znakov.", + "Remove group and members" : "Odobrať skupinu a členov", + "Remove team and members" : "Odstrániť tím a členov", + "Remove participant" : "Odstrániť účastníka", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Naozaj chcete odstrániť skupinu \"{displayName}\" a jej členov z tejto konverzácie?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Naozaj chcete odstrániť tím \"{displayName}\" a jeho členov z tejto konverzácie?", + "Do you really want to remove {displayName} from this conversation?" : "Naozaj chcete odstrániť {displayName} z tejto konverzácie?", + "Notification was sent to {displayName}" : "Pozvánka odoslaná pre {displayName}", + "Could not send notification to {displayName}" : "Nemôžem odoslať pozvánku pre {displayName}", + "Permissions granted to {displayName}" : "Oprávnenia udelené pre {displayName}", + "Could not modify permissions for {displayName}" : "Nie je možné upraviť oprávnenia pre {displayName}", + "Permissions removed for {displayName}" : "Oprávnenia pre {displayName} boli odstránené", + "Permissions set to default for {displayName}" : "Oprávnenia pre {displayName} boli nastavené na predvolené", + "Phone number could not be hung up" : "Telefónne číslo sa nedalo zavolať", + "Phone number could not be put on hold" : "Hovor nebolo možné podržať", + "Phone number could not be muted" : "Hovor nebolo možné stíšiť", + "Phone number could not be unmuted" : "Nebolo možné zrušiť stíšenie pre hovor", + "DTMF message could not be sent" : "Správu DTMF sa nepodarilo odoslať", + "Phone number copied to clipboard" : "Telefónne číslo bolo skopírované do schránky", + "Phone number could not be copied" : "Telefónne číslo sa nemôže byť skopírované", + "in the lobby" : "v hale", + "Dial out phone" : "Vytočiť telefónne číslo", + "Hang up phone" : "Zdvihnúť telefón", + "Move back to lobby" : "Vrátiť sa do lobby", + "Move to conversation" : "Presunúť do konverzácie", + "Dial-in PIN" : "PIN pre príchodzie hovory", + "Demote from moderator" : "Odobrať moderovanie", + "Promote to moderator" : "Povýšiť na moderátora", + "Resend invitation" : "Znovu odoslať pozvánku", + "Send call notification" : "Odoslať upozornenie na hovor", + "Dial out phone number" : "Vytočiť telefónne číslo", + "Resume call for phone number" : "Obnoviť hovor pre telefónne číslo", + "Put phone number on hold" : "Podržať hovor", + "Unmute phone number" : "Zrušiť stlmenie telefónneho čísla", + "Mute phone number" : "Stlmiť telefónne číslo", + "Copy phone number" : "Kopírovať telefónne číslo", + "Reset custom permissions" : "Obnoviť vlastné oprávnenia", + "Grant all permissions" : "Udeliť všetky oprávnenia", + "Remove all permissions" : "Odstrániť všetky oprávnenia", + "Also ban from this conversation" : "Tiež zakázať prístup k tejto konverzácii", + "Internal note (reason to ban)" : "Interná poznámka (dôvod zákazu)", + "Remove" : "Odobrať", + "Permissions modified for {displayName}" : "Oprávnenia pre {displayName} boli upravené", + "Add users, groups or teams" : "Pridať užívateľov, skupiny alebo tímy", + "Add users or groups" : "Pridať používateľov alebo skupiny", + "Add users or teams" : "Pridajte užívateľov alebo tímy", + "Add users" : "Pridať používateľov", + "Add groups or teams" : "Pridať skupiny alebo tímy", + "Add groups" : "Pridať skupiny", + "Add teams" : "Pridať tímy", + "Add other sources" : "Pridať iné zdroje", + "Add emails" : "Pridať e-maily", + "Integrations" : "Integrácie", + "Add federated users" : "Pridajte združených používateľov", + "Searching …" : "Hľadá sa …", + "Search for more users" : "Vyhľadajte ďalších používateľov", + "You can search or add participants via name, email, or Federated Cloud ID" : "Môžete vyhľadávať alebo pridávať účastníkov podľa mena, e-mailu alebo Federovaného cloudového ID.", + "Search or add participants" : "Vyhľadať alebo pridať účastníkov", + "Invitation was sent to {actorId}" : "Pozvánka odoslaná pre {actorId}", + "An error occurred while adding the participants" : "Pri pridávaní účastníkov sa vyskytla chyba", + "A new group conversation with selected participant will be created" : "Bude vytvorený nový skupinový rozhovor so zvoleným účastníkom", + "Participants" : "Účastníci", + "Pinned by a deleted user" : "Pripnuté používateľom, ktorý bol odstránený", + "Participants ({count})" : "({count}) účastníkov", + "Open chat" : "Otvoriť rozhovor", + "You have new unread messages in the chat." : "Máte novú neprečítanú správu v rozhovore.", + "You have been mentioned in the chat." : "Boli ste spomenutý v rozhovore.", + "Search messages" : "Vyhľadať správy", + "Chat" : "Správy", + "Details" : "Podrobnosti", + "Shared items" : "Zdieľané položky", + "Search in {name}" : "Vyhľadať v {name}", + "Threads in {name}" : "Vlákien v {name}", + "{actor} in {conversation}" : "{actor} v {conversation}", + "Search messages …" : "Vyhľadať správy ...", + "Search options" : "Možnosti vyhľadávania", + "From User" : "Od Užívateľa", + "Since" : "Do", + "Until" : "Do", + "No results found" : "Neboli nájdené žiadne výsledky", + "Load more results" : "Načítať viac výsledkov", + "Recent threads" : "Nedávne vlákna", + "Projects" : "Projekty", + "No shared items" : "Žiadne zdieľané položky", + "Thread notifications" : "Upozornenia na vlákna", + "Thread actions" : "Akcie vlákna", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Odkaz na konverzáciu", + "No open conversations found" : "Neboli nájdené žiadne prebiehajúce konverzácie", + "Either there are no open conversations or you joined all of them." : "Buď aktuálne neprebiehajú žiadne konverzácie alebo sa už všetkých účastníte.", + "Check spelling or use complete words." : "Skontrovať pravopis alebo použiť celé slová.", + "Search conversations or users" : "Vyhľadajte konverzácie alebo používateľov", + "Select conversation" : "Vybrať konveráciu", + "Number length is not valid" : "Dĺžka čísla nie je platná", + "Region code is not valid" : "Kód predvoľby nie je platný", + "Number length is too short" : "Dĺžka čísla je príliš krátka", + "Number length is too long" : "Číslo je príliš dlhé", + "Number is not valid" : "Číslo nie je platné", + "Phone numbers" : "Telefónne čísla", + "Display name: {name}" : "Zobrazované meno: {name}", + "Edit display name" : "Upraviť zobrazované meno", + "Display name (required)" : "Zobrazované meno (povinné)", + "Save name" : "Uložiť meno", + "I picked message bubbles" : "Vybral/a som si správy v bublinách", + "I picked the list style" : "Vybral som štýl zoznamu", + "Error while setting personal setting" : "Chyba pri nastavovaní osobného nastavenia", + "Error while saving sounds setting" : "Chyba pri ukladaní nastavenia zvuku", + "Compact conversations list" : "Zoznam kompaktných rozhovorov", + "Chat appearance" : "Vzhľad chatu", + "Messages list" : "Zoznam správ", + "Message bubbles" : "Bubliny správ", + "Play sounds when participants join or leave a call" : "Prehrávať zvuky, keď sa účastníci pripoja alebo odchádzajú z hovoru", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Momentálne nie je k dispozícii na iPhone a iPade z dôvodu technických obmedzení výrobcu.", + "Notification settings" : "Nastavenie notifikácií", + "Sounds for chat and call notifications" : "Zvuky pre upozornenia na chat a hovory", + "Invalid language ({languageId})" : "Neplatný jazyk ({languageId})", + "Default language" : "Predvolený jazyk", + "Default language ({languageName})" : "Predvolený jazyk ({languageName})", + "Error when trying to load the available live translation languages" : "Chyba pri pokuse o načítanie dostupných jazykov živého prekladu", + "Error when trying to set live translation language" : "Chyba pri pokuse o nastavenie jazyka živého prekladu", + "Set language used to show the transcriptions" : "Nastaviť jazyk, ktorý sa použije na zobrazenie prepisov", + "Select location for attachments" : "Vyberte umiestnenie príloh", + "Error while setting attachment folder" : "Pri nastavovaní priečinka pre prílohy sa vyskytla chyba", + "Error while setting read status privacy" : "Chyba pri nastavovaní oznámenia o prečítaní", + "Error while setting typing status privacy" : "Chyba pri nastavovaní súkromného stavu písania", + "Error while setting default media state" : "Chyba pri nastavovaní predvoleného stavu médií", + "Turn camera and microphone off by default" : "Vypnúť kameru a mikrofón predvolene", + "Blur camera background by default" : "Rozmazať pozadie kamery predvolene", + "Skip device preview before joining a call" : "Preskočiť náhľad zariadenia pred pripojením k hovoru", + "Appearance & Sounds" : "Vzhľad a Zvuky", + "Privacy" : "Súkromie", + "Send read receipts" : "Odoslať potvrdenia o prečítaní", + "When off, all read statuses will be hidden" : "Keď je vypnuté, všetky stavy čítania budú skryté.", + "Share typing status" : "Zdieľať stav písania", + "When off, all typing indicators will be hidden" : "Keď je vypnuté, všetky indikátory písania budú skryté.", + "Attachments folder" : "Priečinok s prílohami", + "Toggle full screen" : "Prepnúť režim celej obrazovky", + "Return to Home screen" : "Návrat na domovskú obrazovku", + "Search" : "Hľadať", + "Shortcuts while in a chat" : "Skratky počas chatu", + "Focus the chat input" : "Zamerať na písanie v čete", + "Unfocus the chat input to use shortcuts" : "Aby ste mohli používať klávesové skratky, je treba zrušiť zameranie na písanie v čete", + "Edit your last message" : "Upraviť vašu poslednú správu", + "Shortcuts while in a call" : "Klávesové skratky počas hovoru", + "Camera on and off" : "Zapnúť a vypnúť video", + "Microphone on and off" : "Zapnúť a vypnúť mikrofón", + "Raise or lower hand" : "Zdvihnúť alebo dať dole ruku", + "Push to talk or push to mute" : "Stlačte a hovorte alebo stlačte pre stlmenie", + "Zoom-in / zoom-out a screen share" : "Priblíženie / oddialenie zdieľania obrazovky", + "Mouse wheel" : "Kolečko myši", + "Start call silently" : "Začat hovor potichu", + "Start call" : "Začať hovor", + "End call" : "Ukončiť hovor", + "The server was updated, you cannot start or join a call." : "Server bol aktualizovaný, nemôžete začať ani sa pripojiť k hovoru.", + "This call has just ended" : "Hovor práve skončil", + "You will be able to join the call only after a moderator starts it." : "K hovoru sa budete môcť pripojiť až potom, keď ho moderátor začne.", + "End call for everyone" : "Ukončiť hovor pre všetkých", + "Starting the recording" : "Začínam nahrávanie", + "Recording" : "Záznam", + "The call has been running for one hour." : "Hovor už trvá viac ako jednu hodinu.", + "Cancel recording start" : "Zrušiť začiatok nahrávania", + "Stop recording" : "Zastaviť nahrávanie", + "Send a reaction" : "Poslať reakciu", + "React with {reaction}" : "Reagovať s {reaction}", + "All tasks done!" : "Všetky úlohy boli splnené!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n úlohy","{done} z %n úloh","{done} z %n úloh","{done} z %n úloh"], + "Add participants to this call" : "Pridať účastníkov do tohto hovoru", + "_%n participant in call_::_%n participants in call_" : ["%n účastník v hovore","%n účastníci v hovore","%n účastníkov v hovore","%n účastníkov v hovore"], + "Scheduled messages" : "Plánované správy", + "You are not allowed to enable screensharing" : "Nemáte oprávnenie k zdieľaniu obrazovky", + "No screensharing" : "Žiadne zdieľanie obrazovky", + "Screensharing options" : "Nastavenia zdieľania obrazovky", + "Enable screensharing" : "Povoliť zdieľanie obrazovky", + "Bad sent video and screen quality." : "Zlá kvalita odoslaného videa a rozlíšenia.", + "Bad sent screen quality." : "Zlá kvalita odoslaného rozlíšenia.", + "Bad sent video quality." : "Zlá kvalita odoslaného videa.", + "Bad sent audio, video and screen quality." : "Zlá kvalita odoslaného zvuku, videa a rozlíšenia.", + "Bad sent audio and screen quality." : "Zlá kvalita odoslaného zvuku a rozlíšenia.", + "Bad sent audio and video quality." : "Zlá kvalita odoslaného zvuku a videa.", + "Bad sent audio quality." : "Zlá kvalita odoslaného zvuku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci nemusia vidieť vašu obrazovku. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video počas zdieľania obrazovky.", + "Disable background blur" : "Vypnúť rozmazanie pozadia", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste počas zdieľania obrazovky zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci nemusia vidieť vašu obrazovku.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video počas zdieľania obrazovky.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vás vidieť. Ak chcete situáciu zlepšiť, skúste počas zdieľania obrazovky zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vidieť vašu obrazovku. Ak chcete situáciu zlepšiť, skúste zakázať zdieľanie obrazovky.", + "Disable screenshare" : "Zakázať zdieľanie obrazovky", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vás vidieť. Ak chcete situáciu zlepšiť, skúste počas zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás možno nebudú rozumieť.", + "Screen sharing is not supported by your browser." : "Váš prehliadač nepodporuje zdieľanie obrazovky.", + "Screen sharing requires the page to be loaded through HTTPS." : "Zdieľanie obrazovky vyžaduje načítanie stránka cez HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Zdieľanie obrazovky vyžaduje, aby bola stánka načítaná cez protokol HTTPS.", + "An error occurred while starting screensharing." : "Pri pokuse o zdieľanie obrazovky nastala chyba.", + "Select virtual background" : "Vybrať virtuálne pozadie", + "Show your screen" : "Ukázať Vašu obrazovku", + "Stop screensharing" : "Zastaviť zdieľanie obrazovky", + "Mute others" : "Stlmiť ostatných", + "Start recording" : "Spustiť nahrávanie", + "Set up breakout rooms" : "Nastaviť vyhradené miestnosti", + "Download attendance list" : "Stiahnuť zoznam účastníkov", + "Open Calendar" : "Otvoriť Kalendár", + "Remove participant {name}" : "Odobrať účastníka {name}", + "Would you like to delete this conversation?" : "Chceli by ste túto konverzáciu vymazať?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Táto konverzácia bude automaticky odstránená pre všetkých po %n dni nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti."], + "Are you sure you want to delete this conversation?" : "Ste si istí, že chcete túto konverzáciu vymazať?", + "Delete now" : "Odstrániť teraz", + "Keep" : "Ponechať", + "Open dialpad" : "Otvoriť číselník", + "Select a region" : "Vyberte oblasť", + "Local time: {time}" : "Miestny čas: {time}", + "Scheduled {datetime}" : "Naplánované {datetime}", + "Scheduled for {datetime}" : "Naplánované na {datetime}", + "Search …" : "Hľadať …", + "Message without mention" : "Správa bez zmienky", + "Mention myself" : "Spomenúť seba", + "Mention everyone" : "Spomenúť všetkých", + "Select a conversation" : "Vybrať rozhovor", + "Select a mode" : "Vybrať režim", + "You do not have permissions to access this conversation." : "Nemáte povolenie na prístup k tejto konverzácii.", + "Join a different conversation or start a new one." : "Pridajte sa k inej konverzácii alebo začnite novú.", + "The conversation does not exist" : "Konverzácia neexistuje", + "Join a conversation or start a new one!" : "Pripojte sa k rozhovoru alebo začnite nový!", + "Duplicate session" : "Zduplikovať sedenie", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Táto konverzácia bola otvorená v inom paneli. Súčasná verzia servera nepodporuje otváranie konverzácie vo viacerých paneloch.", + "Creating and joining a conversation with \"{userid}\"" : "Vytváranie konverzácie s užívateľom „{userid}“ a pripojenie sa k nej", + "Join a conversation or start a new one" : "Pripojte sa k rozhovoru alebo začnite nový", + "Error while joining the conversation" : "Chyba pri pripájaní sa ku konverzácii", + "Another user" : "Iný používateľ", + "Hey! Are you using the list style or message bubbles?" : "Ahoj! Používaš štýl zoznamu alebo bubliny správ?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Používateľ Nextcloud", + "User password" : "Heslo používateľa", + "Talk conversation" : "Konverzácia v Talk /Rozhovore/", + "Skip TLS verification" : "Preskočiť overovanie TLS", + "Matrix server URL" : "URL Matrix servera", + "User" : "Používateľ", + "Matrix channel" : "Matrix kanál", + "Mattermost server URL" : "URL Mattermost servera", + "Mattermost user" : "Používateľ Mattermost", + "Team name" : "Názov tímu", + "Channel name" : "Názov kanálu", + "Rocket.Chat server URL" : "URL Rocket.Chat servera", + "User name or email address" : "Užívateľské meno alebo e-mailová adresa", + "Rocket.Chat channel" : "Rocket.Chat kanál", + "Zulip server URL" : "URL Zulip servera", + "Bot user name" : "Používateľské meno bota", + "Bot API key" : "Kľúč k API pre bota", + "Zulip channel" : "Zulip kanál", + "API token" : "API token", + "Slack channel" : "Slack kanál", + "Server ID or name" : "Identifikátor alebo názov servera", + "Channel ID (prefixed with \"ID:\") or name" : "ID kanála (s predponou \"ID:\") alebo názov", + "Channel" : "Kanál", + "Login" : "Prihlásiť sa", + "Chat ID" : "Identifikátor četu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC servera (napr. chat.freenode.net:6667)", + "Nickname" : "Prezývka", + "Connection password" : "Heslo pripojenia", + "IRC channel" : "IRC kanál", + "Channel password" : "Heslo pre kanál", + "NickServ nickname" : "Prezývka na NickServ", + "NickServ password" : "Heslo pre NickServ", + "Use TLS" : "Použiť TLS", + "Use SASL" : "Použiť SASL", + "Tenant ID" : "Identifikátor Tenant", + "Client ID" : "Client ID", + "Team ID" : "Identifikátor tímu", + "Thread ID" : "Identifikátor vlákna", + "XMPP/Jabber server URL" : "URL XMPP/Jabber servera", + "MUC server URL" : "URL MUC servera", + "Jabber ID" : "Identifikátor Jabber", + "Pinned messages" : "Pripnuté správy", + "Media" : "Média", + "Polls" : "Ankety", + "Deck cards" : "Karty aplikácie Deck", + "Voice messages" : "Hlasové správy", + "Locations" : "Umiestnenie", + "Call recordings" : "Zoznam nahraných hovorov", + "Audio" : "Zvuk", + "Show all pinned messages" : "Zobraziť všetky pripnuté správy", + "Show all media" : "Zobraziť všetky médiá", + "Show all files" : "Zobraziť všetky súbory", + "Show all polls" : "Zobraziť všetky ankety", + "Show all deck cards" : "Zobraziť všetky karty deck", + "Show all voice messages" : "Zobraziť všetky hlasové správy", + "Show all locations" : "Zobraziť všetky umiestnenia", + "Show all call recordings" : "Zobraziť všetky nahrávky hovorov", + "Show all audio" : "Zobraziť všetku hudbu", + "Show all other" : "Zobraziť všetko ostatné", + "Follow conversation settings" : "Sledovať nastavenia konverzácie", + "Group" : "Skupina", + "Team" : "Tím", + "You reconnected to the call" : "Opäť ste sa pripojili k hovoru", + "{actor} reconnected to the call" : "{actor} sa opäť pripojil k hovoru", + "You added {user0} and {user1}" : "Pridali ste {user0} a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Pridali ste účastníkov {user0}, {user1} a ďalšieho %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n"], + "An administrator added you and {user0}" : "Správca pridal vás a {user0}", + "{actor} added you and {user0}" : "{actor} pridal/a vás a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrátor pridal vás, užívateľa {user0} a %n ďalšieho účastníka","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} pridal vás, užívateľa {user0} a %n ďalšieho účastníka","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov"], + "An administrator added {user0} and {user1}" : "Administrátor pridal {user0} a {user1}", + "{actor} added {user0} and {user1}" : "{actor} pridal {user0} a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrátor pridal {user0}, {user1} a %n ďalšieho účastníka","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} pridal {user0}, {user1} a %n ďalšieho účastníka","{actor} pridal {user0}, {user1} a %n ďalších účastníkov","{actor} pridal {user0}, {user1} a %n ďalších účastníkov","{actor} pridal {user0}, {user1} a %n ďalších účastníkov"], + "You removed {user0} and {user1}" : "Odstránili ste {user0} a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Odstránili ste {user0}, {user1} a %n účastníka","Odstránili ste {user0}, {user1} a %n účastníkov","Odstránili ste {user0}, {user1} a %n účastníkov","Odstránili ste {user0}, {user1} a %n účastníkov"], + "An administrator removed you and {user0}" : "Administrátor odstránil vás a {user0}", + "{actor} removed you and {user0}" : "{actor} odstránil vás a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrátor odstránil vás, užívateľa {user0} a %n ďalšieho účastníka","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} odstránil vás, {user0} a %n ďalšieho účastníka","{actor} odstránil vás, {user0} a %n ďalších účastníkov","{actor} odstránil vás, {user0} a %n ďalších účastníkov","{actor} odstránil vás, {user0} a %n ďalších účastníkov"], + "An administrator removed {user0} and {user1}" : "Administrátor odstránil {user0} a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} odstránil {user0} a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrátor odstránil {user0}, {user1} a %n ďalšieho účastníka","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} odstránil {user0}, {user1} a %n ďalšieho účastníka","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov"], + "You and {user0} joined the call" : "Vy a {user0} ste sa pridali k hovoru", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vy, {user0} a %n účastník sa pridali k hovoru","Vy, {user0} a %n účastníci sa pridali k hovoru","Vy, {user0} a %n účastníkov sa pridali k hovoru","Vy, {user0} a %n účastníkov sa pridali k hovoru"], + "{user0} and {user1} joined the call" : "{user0} a {user1} sa pridali k hovoru", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} a %n účastník sa pridali k hovoru","{user0}, {user1} a %n účastníci sa pridali k hovoru","{user0}, {user1} a %n účastníkov sa pridali k hovoru","{user0}, {user1} a %n účastníkov sa pridali k hovoru"], + "You and {user0} left the call" : "Vy a {user0} opustili hovor", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vy, {user0} a %n účastník opustili hovor","Vy, {user0} a %n účastníci opustili hovor","Vy, {user0} a %n účastníkov opustilo hovor","Vy, {user0} a %n účastníkov opustilo hovor"], + "{user0} and {user1} left the call" : "{user0} a {user1} opustili hovor", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} a %n účastník opustili hovor","{user0}, {user1} a %n účastníci opustili hovor","{user0}, {user1} a %n účastníkov opustilo hovor","{user0}, {user1} a %n účastníkov opustilo hovor"], + "You promoted {user0} and {user1} to moderators" : "Povýšili ste {user0} a {user1} na moderátorov", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Povýšili ste {user0}, {user1} a %n účastníka na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov"], + "An administrator promoted you and {user0} to moderators" : "Administrátor povýšil vás a {user0} na moderátora", + "{actor} promoted you and {user0} to moderators" : "{actor} povýšil vás a {user0} na moderátorov", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrátor povýšil vás, {user0} a %n účastníka na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} povýšil vás, {user0} a %n účastníka na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrátor povýšil {user0} a {user1} na moderátorov", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} povýšil {user0} a {user1} na moderátorov", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrátor povýšil {user0}, {user1} a ďalších %n účastníka na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} povýšil {user0}, {user1} a %n účastníka na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov"], + "You demoted {user0} and {user1} from moderators" : "Degradovali ste {user0} a {user1} z moderátorov", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Degradovali ste {user0}, {user1} a %n účastníka z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov"], + "An administrator demoted you and {user0} from moderators" : "Administrátor degradoval vás a {user0} z moderátorov", + "{actor} demoted you and {user0} from moderators" : "{actor} degradoval vás a {user0} z moderátorov", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrátor degradoval vás, {user0} a %n účastníka z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} degradoval vás, {user0} a %n účastníka z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrátor degradoval {user0} a {user1} na moderátorov", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degradoval {user0} a {user1} z moderátorov", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrátor degradoval {user0}, {user1} a ďalších %n účastníka z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} degradoval {user0}, {user1} a %n účastníka z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov"], + "You:" : "Vy", + "You: {lastMessage}" : "Vy: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Server bol aktualizovaný.", + "(edited by you)" : "(editované vami)", + "(edited by a deleted user)" : "(editoval zmazaný užívateľ)", + "(edited by {moderator})" : "(editoval {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "K rozhovoru sa pokúšate pripojiť počas aktívnej relácie v inom okne alebo zariadení. Nextcloud Talk /Rozhovor/ v súčasnosti túto možnosť nepodporuje. Čo chcete urobiť?", + "Leave this page" : "Opustiť túto stránku", + "Join here" : "Pripojiť sa tu", + "Deck card has been posted to {conversation}" : "Karta Deck bola odoslaná do {conversation}", + "An error occurred while posting deck card to conversation" : "Pri odosielaní karty do konverzácie aplikácie Deck nastala chyba", + "Post to a conversation" : "Uverejniť príspevok v konverzácii", + "Post to conversation" : "Uverejniť príspevok v konverzácii", + "The recording failed. Please contact your administrator." : "Nahrávanie zlyhalo. Prosím, kontaktujte správcu.", + "Location has been posted to {conversation}" : "Miesto bolo odoslané do {conversation}", + "An error occurred while posting location to conversation" : "Pri odosielaní umiestnenia do konverzácie nastala chyba", + "Share to a conversation" : "Zdieľať v rozhovore", + "Share to conversation" : "Zdieľat v rozhovore", + "In conversation" : "V konverzácii", + "Search in conversation: {conversation}" : "Hľadať v konverzácii: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vaše požiadavky sú momentálne obmedzené z dôvodu ochrany pred útokom hrubou silou", + "Error while clearing conversation history" : "Chyba pri čistení histórie konverzácie", + "Error occurred while allowing guests" : "Pri povoľovaní hostí nastala chyba", + "Error occurred while disallowing guests" : "Pri zakazovaní hostí nastala chyba", + "Error occurred when restricting the conversation to moderator" : "Pri obmedzovaní konverzácie na moderátora sa vyskytla chyba", + "Error occurred when opening the conversation to everyone" : "Pri otváraní konverzácie pre všetkých sa vyskytla chyba", + "Conversation password has been saved" : "Heslo konverzácie bolo uložené", + "Conversation password has been removed" : "Heslo konverzácie bolo odstránené", + "Error occurred while saving conversation password" : "Pri ukladaní hesla konverzácie sa vyskytla chyba", + "Call recording is starting." : "Spúšťa sa nahrávanie hovoru.", + "Call recording stopped while starting." : "Nahrávanie hovoru zastavené počas spúšťania.", + "Call recording stopped. You will be notified once the recording is available." : "Nahrávanie hovoru bolo zastavené. Keď bude záznam dostupný, budete informovaní.", + "Conversation picture set" : "Obrázok konverzácie bol nastavený", + "Conversation picture deleted" : "Obrázok konverzácie bol zmazaný", + "Could not delete the conversation picture" : "Nepodarilo sa zmazať obrázok konverzácie", + "Could not remove the automatic expiration" : "Nebolo možné odstrániť automatické vypršanie platnosti", + "Could not post message: {errorMessage}" : "Správu sa nepodarilo zverejniť: {errorMessage}", + "Participant is banned successfully" : "Účastník bol úspešne zablokovaný", + "Error while banning the participant" : "Chyba pri zablokovaní účastníka", + "An error occurred while fetching the participants" : "Pri načítavaní účastníkov sa vyskytla chyba", + "Could not send invitation to {actorId}" : "Nemôžem odoslať pozvánku pre {actorId}", + "Invitations sent" : "Pozvánky odoslané", + "Error occurred when sending invitations" : "Pri posielaní pozvánok nastala chyba", + "Failed to join the conversation." : "Nepodarilo sa pripojiť k hovoru.", + "An error occurred while creating breakout rooms" : "Pri vytváraní oddelených miestností sa vyskytla chyba", + "An error occurred while re-ordering the attendees" : "Pri opätovnom zvolávaní účastníkov sa vyskytla chyba", + "An error occurred while deleting breakout rooms" : "Pri odstraňovaní oddelených miestností sa vyskytla chyba", + "An error occurred while starting breakout rooms" : "Pri spúšťaní oddelených miestností sa vyskytla chyba", + "An error occurred while stopping breakout rooms" : "Pri zastavovaní oddelených miestností sa vyskytla chyba", + "An error occurred while sending a message to the breakout rooms" : "Pri odosielaní správy do oddelených miestností sa vyskytla chyba", + "An error occurred while requesting assistance" : "Pri žiadosti o pomoc sa vyskytla chyba", + "An error occurred while resetting the request for assistance" : "Pri resetovaní žiadosti o pomoc sa vyskytla chyba", + "An error occurred while joining breakout room" : "Pri pripájaní k oddelenej miestnosti sa vyskytla chyba", + "Failed to rename the thread" : "Nezabezpečilo sa premenovanie vlákna", + "Error fetching upcoming events" : "Chyba pri načítavaní nadchádzajúcich udalostí", + "Error fetching upcoming reminders" : "Chyba pri načítavaní nadchádzajúcich pripomienok", + "An error occurred while accepting an invitation" : "Pri potvrdzovaní pozvánky sa vyskytla chyba", + "An error occurred while rejecting an invitation" : "Pri odmietnutí pozvánky sa vyskytla chyba", + "{guest} (guest)" : "{guest} (návštevník)", + "Poll draft has been saved" : "Návrh ankety bol uložený", + "An error occurred while saving the draft" : "Došlo k chybe pri ukladaní konceptu", + "An error occurred while submitting your vote" : "Pri odosielaní vašeho hlasu nastala chyba", + "An error occurred while ending the poll" : "Pri ukončovaní ankety nastala chyba", + "An error occurred while deleting the poll draft" : "Došlo k chybe pri odstraňovaní návrhu ankety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketu „{name}“ vytvoril {user}. Kliknite pre hlasovanie", + "Failed to add reaction" : "Nepodarilo sa pridať reakciu", + "Failed to remove reaction" : "Nepodarilo sa odstrániť reakciu", + "The server is in maintenance mode." : "Server je v režime údržby.", + "Federated server was updated." : "Združený server bol aktualizovaný.", + "Error while uploading file \"{fileName}\"" : "Chyba pri nahrávaní súboru \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nie je voľné miesto pre nahranie súboru \"{fileName}\"", + "You are not allowed to share files" : "Nemôžete sprístupniť súbory", + "Error while sharing file" : "Pri zdieľaní súboru došlo k chybe", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Prehliadač, ktorý používate, nie je službou Nextcloud Talk /Rozhovor/ plne podporovaný. Použite najnovšiu verziu prehliadača Mozilla Firefox, Microsoft Edge, Google Chrome alebo Apple Safari.", + "_In %n hour_::_In %n hours_" : ["O %n hodinu","O %n hodiny","O %n hodín","O %n hodín"], + "_%n minute _::_%n minutes_" : ["%n minúta","%n minúty","%n minút","%n minút"], + "In {hours} and {minutes}" : "O {hours} a {minutes}", + "_In %n minute_::_In %n minutes_" : ["O %n minútu","O %n minúty","O %n minút","O %n minút"], + "Later today – {timeLocale}" : "Neskôr dnes - {timeLocale}", + "Set time for later today" : "Nastaviť čas na neskôr dnes", + "Tomorrow – {timeLocale}" : "Zajtra – {timeLocale}", + "Set time for tomorrow" : "Nastaviť čas na zajtra", + "This weekend – {timeLocale}" : "Tento víkend – {timeLocale}", + "Set time for this weekend" : "Nastavte čas na tento víkend", + "Next week – {timeLocale}" : "Budúci týždeň – {timeLocale}", + "Set time for next week" : "Nastaviť čas na budúci týždeň", + "Message link copied to clipboard" : "Odkaz na správu bol skopírovaný do schránky.", + "Conversation link copied to clipboard" : "Odkaz na konverzáciu bol skopírovaný do schránky", + "The link could not be copied" : "Odkaz sa nepodarilo skopírovať.", + "Error while parsing a PROPFIND error" : "Chyba pri parsovaní chyby PROPFIND", + "Sending signaling message has failed" : "Odoslanie signalizačnej správy zlyhalo", + "Lost connection to signaling server. Trying to reconnect." : "Stratené pripojenie k signalizačnému serveru. Pokúšam sa znova pripojiť.", + "Lost connection to signaling server." : "Stratené pripojenie k signalizačnému serveru.", + "Connecting is taking longer than expected …" : "Pripojenie trvá dlhšie, než sa očakávalo…", + "Failed to connect. Retrying …" : "Nepodarilo sa pripojiť. Skúšam znova…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nepodarilo sa pripojiť. Signálny server môže byť nesprávne nastavený.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nakonfigurovaný signalizačný server je potrebné aktualizovať, aby bol kompatibilný s touto verziou Talk /Rozhovor/. Kontaktujte svojho správcu.", + "Please restart the app." : "Prosím, reštartujte aplikáciu.", + "Please reload the page." : "Obnovte prosím stránku.", + "Please try to restart the app." : "Skúste prosím reštartovať aplikáciu.", + "Please try to reload the page." : "Skúste znovu načítať stránku.", + "Do not disturb" : "Nerušiť", + "Away" : "Preč", + "Microphone {number}" : "Mikrofón {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Reproduktor {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Zdá sa, že hovoríte, zatiaľ čo máte stlmené, zrušte ho, aby vás ostatní počuli", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nepodarilo sa nadviazať spojenie aspoň s jedným účastníkom. Pre váš scenár môže byť potrebný server TURN. Požiadajte svojho administrátora, o nastavenie nejakého podľa {linkstart}tejto dokumentácie{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Trvá to dlhšie, ako sa očakávalo. Povolili ste prístup k médiám (alebo nie)? Ak áno, reštartujte prehliadač, pretože zvuk a video zlyhávajú", + "Access to microphone & camera is only possible with HTTPS" : "Prístup ku mikrofónu a kamere je možný iba použitím HTTPS", + "Please move your setup to HTTPS" : "Prosím, prejdite na používanie HTTPS", + "Access to microphone & camera was denied" : "Prístup ku mikrofónu a kamere bol zamietnutý", + "WebRTC is not supported in your browser" : "WebRTC nie je podporované vaším prehliadačom", + "Please use a different browser like Firefox or Chrome" : "Použite prosím iný prehliadač, napríklad Firefox alebo Chrome", + "Error while accessing microphone & camera" : "Nastala chyba pri prístupe ku mikrofónu a kamere", + "%s Talk on your mobile devices" : "%s Rozhovor na Vašich mobilných zariadeniach", + "Join conversations at any time, anywhere, on any device." : "Pripojte sa ku konverzáciám kedykoľvek a kdekoľvek na akomkoľvek zariadení.", + "Android app" : "Android apka", + "iOS app" : "iOS apka", + "__language_name__" : "Slovenčina", + "Webhook Demo" : "Demo Webhooku", + "Call summary (%s)" : "Zhrnutie hovoru (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot so súhrnom hovorov uverejní po hovore súhrnnú správu so zoznamom všetkých účastníkov a načrtnutím úloh", + "Tasks" : "Úlohy", + "Notes" : "Poznámky", + "Reports" : "Zostavy", + "Decisions" : "Rozhodnutia", + "Agenda" : "Agenda", + "Call summary" : "Zhrnutie hovoru", + "Call summary - {title}" : "Zhrnutie hovoru - {title}", + "Talk conversation for event" : "Konverzácia Talk pre udalosť", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push je nainštalovaný, čím sa zlepšuje výkon desktopových klientov.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nie je nainštalovaný, čo môže viesť k problémom s výkonom pri používaní desktopových klientov.", + "Next meeting" : "Ďalšie stretnutie", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Naplánujte stretnutie z vášho kalendára. Na zobrazenie tu je potrebné nastaviť konverzáciu Talk ako miesto", + "Join conversations from remote Nextcloud servers" : "Pripojte sa k rozhovorom zo vzdialených serverov Nextcloud", + "Your default media state has been saved" : "Vaše predvolené nastavenie médií bolo uložené.", + "Set reminder for later today" : "Nastaviť pripomienku na dnes-neskôr.", + "Set reminder for tomorrow" : "Nastaviť pripomienku na zajtra", + "Set reminder for this weekend" : "Nastaviť pripomienku na tento víkend", + "Set reminder for next week" : "Nastaviť pripomienku na budúci týždeň", + "Generate summary" : "Vygenerovať zhrnutie", + "Open poll • You voted already" : "Otvorená anketa • Už ste hlasovali", + "Open poll • Click to vote" : "Otvorená anketa • Kliknite pre hlasovanie", + "Poll • Ended" : "Anketa ・ Ukončená", + "Talk recording from {time} ({conversation})" : "Nahrávanie hovoru z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Výsledky ankety • %n hlas","Výsledky ankety • %n hlasy","Výsledky ankety • %n hlasov","Výsledky ankety • %n hlasy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otvorená anketa • %n hlas","Otvorená anketa • %n hlasy","Otvorená anketa • %n hlasov","Otvorená anketa • %n hlasov"], + "Submit vote" : "Odoslať hlas", + "Your privacy setting has been saved" : "Vaša nastavenie ochrany osobných údajov bolo uložené", + "Your personal setting has been saved" : "Vaše osobné nastavenia boli uložené.", + "Failed to save sounds setting" : "Nepodarilo sa uložiť nastavenie zvukov", + "Sounds setting saved" : "Nastavenie zvukov uložené", + "Always shown if recording consent is required" : "Vždy zobrazené, ak je potrebný súhlas na nahrávanie", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk bol aktualizovaný, nemôžete začať alebo pripojiť hovor.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pripojili ste sa k rozhovoru v inom okne alebo zariadení. Nextcloud Talk /Rozhovor/ v súčasnosti túto možnosť nepodporuje, preto bolo sedenie ukončené.", + "Nextcloud Talk was updated." : "Nextcloud Talk bol aktualizovaný.", + "Nextcloud is in maintenance mode." : "Nextcloud je v režime údržby.", + "Nextcloud Talk Federation was updated." : "Federácia Nextcloud Talk bola aktualizovaná.", + "Enable live translation" : "Povoliť živý preklad", + "I picked list style" : "Vybral/a som si štýl zoznamu", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ahoj! Používaš Talk v zoznamovom štýle alebo s bublinami správ?" +}, +"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);"); diff --git a/l10n/sk.json b/l10n/sk.json new file mode 100644 index 0000000..72409b4 --- /dev/null +++ b/l10n/sk.json @@ -0,0 +1,2254 @@ +{ "translations": { + "a conversation" : "konverzácia", + "(Duration %s)" : "(Trvanie %s)", + "You attended a call with {user1}" : "Zúčastnili ste sa hovoru s {user1}", + "_%n guest_::_%n guests_" : ["%n hosť","%n hostí","%n hostí","%n hostí"], + "You attended a call with {user1} and {user2}" : "Zúčastnili ste sa hovoru s {user1} a {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Zúčastnili ste sa hovoru s {user1}, {user2} a {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Zúčastnili ste sa hovoru s {user1}, {user2}, {user3} a {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Zúčastnili ste sa hovoru s {user1}, {user2}, {user3}, {user4} a {user5}", + "_%n other_::_%n others_" : ["%n ďalší","%n ďalší","%n ďalších","%niní"], + "{actor} invited you to {call}" : "{actor} Vás pozval na {call}", + "You were invited to a conversation or had a call" : "Boli ste pozvaní na rozhovor alebo vám niekto volal", + "Other activities" : "Iné aktivity", + "Talk" : "Talk /Rozhovor/", + "Guest" : "Hosť", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "Vitajte v Nextcloud Talk /Rozhovore/!\nV tejto konverzácii vás budeme informovať o nových funkciách, ktoré sú dostupné v aplikácii Nextcloud Talk /Rozhovor/.", + "## New in Talk %s" : "## Novinky v Talk /Rozhovore/ 1%s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge a Safari sa teraz môžu využívať na audio a video hovory", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Rozhovory typu jeden na jedného sú teraz trvalé a už ich nemožno náhodou zmeniť na skupinové rozhovory. Keď jeden z účastníkov opustí rozhovor, tento sa už automaticky neodstráni. Rozhovor sa odstráni zo servera, iba ak ho opustia obaja účastníci", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Teraz môžete upozorniť všetkých účastníkov uverejnením „@all“ do četu", + "- With the \"arrow-up\" key you can repost your last message" : "- Pomocou tlačidla „šípka nahor“ môžete znova odoslať svoju poslednú správu", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Aplikácia Talk /Rozhovor/ teraz disponuje príkazmi pre aplikáciu. To, či správca vášho Nextcloud nejaké nastavil, zistíte zaslaním správy s textom „/ help“", + "- With projects you can create quick links between conversations, files and other items" : "- Pomocou projektov môžete vytvárať prepojenia medzi konverzáciami, súbormi a inými položkami", + "- You can now mention guests in the chat" : "- Teraz môžete v rozhovore „spomenúť“ hostí", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konverzácie teraz môžu mať čakáreň. To umožní moderátorom pripojiť sa k četu alebo rozhovoru s predstihom na prípravu schôdzky, zatiaľ čo ostatní používatelia a hostia čakajú", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Teraz môžete odpovedať na správy priamo a poskytnúť tak ostatným predstavu o kontexte vašej správy", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Vyhľadávanie v rozhovoroch a účastníkoch teraz odfiltruje aj vaše existujúce rozhovory, čím sa oveľa ľahšie nájdu predchádzajúce rozhovory", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Po nainštalovaní aplikácie Kruhy môžete do konverzácií pridať vlastné skupiny používateľov", + "- Check out the new grid and call view" : "- Vyskúšajte nové zobrazenie v mriežke a hovorov", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Teraz môžete nahrávať a presúvať súbory priamo z vášho zariadenia do četu", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Zdieľané súbory sa teraz otvárajú priamo v zobrazení četu pomocou aplikácií prehliadača", + "- You can now search for chats and messages in the unified search in the top bar" : "- Teraz môžete hľadať čety a správy v zjednotenom vyhľadávaní v hornej lište", + "- Spice up your messages with emojis from the emoji picker" : "- Okoreňte svoje správy emotikonami vďaka dialógu na ich výber", + "- You can now change your camera and microphone while being in a call" : "- Počas hovoru môžete teraz zmeniť kameru a mikrofón", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Poskytnite svojim konverzáciám určitý kontext s popisom a otvorte ich, aby ich prihlásení používatelia mohli nájsť a pripojiť sa", + "- See a read status and send failed messages again" : "- Uvidíte stav načítania a znova pošlete správy, ktoré zlyhali", + "- Raise your hand in a call with the R key" : "- zdvihnite ruku v hovore pomocou klávesy R", + "- Join the same conversation and call from multiple devices" : "- Pripojte sa k tej istej konverzácii a telefonujte z viacerých zariadení", + "- Send voice messages, share your location or contact details" : "- Posielajte hlasové správy, zdieľajte svoju polohu alebo kontaktné údaje", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Pridajte skupiny do konverzácie a noví členovia skupiny sa automaticky pridajú ako účastníci", + "- A preview of your audio and video is shown before joining a call" : "- Pred pripojením k hovoru sa zobrazí ukážka vášho zvuku a videa", + "- You can now blur your background in the newly designed call view" : "- Teraz môžete rozmazať pozadie v novom zobrazení hovoru", + "- Moderators can now assign general and individual permissions to participants" : "- Moderátori môžu teraz prideľovať účastníkom všeobecné a individuálne práva", + "- You can now react to chat messages" : "- Teraz môžete reagovať na správu v čete", + "- In the sidebar you can now find an overview of the latest shared items" : "- Na bočnom paneli teraz nájdete prehľad najnovších zdieľaných položiek", + "- Use a poll to collect the opinions of others or settle on a date" : "- Použite anketu na zhromaždenie názorov ostatných alebo sa dohodnite na rande", + "- Configure an expiration time for chat messages" : "- Nakonfigurujte čas vypršania platnosti četových správ", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Začnite hovory bez upozorňovania ostatných vo veľkých rozhovoroch. Po začatí hovoru môžete odosielať upozornenia individuálne.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Posielajte četové správy bez upozornenia príjemcov v prípade, že to nie je naliehavé", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emotikony môžu byť automaticky doplnené napísaním \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Prepojte rôzne položky pomocou nového inteligentného vyberania tým, že napíšete \"/\".", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderátori odteraz môžu vytvoriť oddelené miestnosti (vyžaduje vysokovýkonný backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Hovory môžu byť odteraz zaznamenané (vyžaduje vysokovýkonný backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Konverzácie môžu teraz mať ako ikonu avatara alebo emotikon.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Virtuálne pozadia sú teraz dostupné spolu s rozmazaným pozadím pri videohovoroch.", + "- Reactions are now available during calls" : "- Reakcie sú teraz dostupné počas hovorov", + "- Typing indicators show which users are currently typing a message" : "- Indikátory písania ukazujú, ktorí užívatelia práve píšu správu", + "- Groups can now be mentioned in chats" : "- Skupiny môžu teraz byť spomínané v chatoch", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Hovory sú automaticky prepisované na text, ak je zaregistrovaná aplikácia poskytujúca prepisovanie na text", + "- Chat messages can be translated if a translation provider app is registered" : "- Chatovacie správy môžu byť preložené, ak je zaregistrovaná aplikácia pre poskytovanie prekladov", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** je teraz možné používať v _chatovacích_ správach", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooky sú teraz k dispozícii na implementáciu botov. Viac informácií nájdete v dokumentácii https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Nastavte si pripomienku na správu v chate, aby ste boli neskôr znovu upozornení", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Použite konverzáciu **Poznámka pre seba**, aby ste si robili poznámky a sprístupňovali informácie medzi vašimi zariadeniami", + "- Captions allow to send a message with a file at the same time" : "- Titulky umožňujú súčasne odoslať správu so súborom", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video rečníka je teraz viditeľné pri sprístupňovaní obrazovky a reakcie na hovor sú animované", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Správy teraz môžu upravovať prihlásení autori a moderátori po dobu 6 hodín", + "- Unsent message drafts are now saved in your browser" : "- Koncepty neodoslaných správ sú odteraz uložené vo vašom prehliadači", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textové chatovanie je odteraz možné vykonávať federatívnym spôsobom s inými servermi Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderátori môžu zakázať účty a hostí, aby im zabránili znovu sa pripojiť ku konverzácii", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Nadchádzajúce hovory z prepojených udalostí v kalendári a náhrada za kolegu mimo kancelárie sa teraz zobrazujú v konverzáciách", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Hovory je teraz možné uskutočňovať federatívnym spôsobom s inými servermi Talk (vyžaduje vysokovýkonný backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Predstavujeme desktopového klienta Nextcloud Talk pre Windows, MacOS a Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Zhrnutie nahrávok hovorov a neprečítaných správ v rozhovoroch pomocou asistenta Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Vylepšené stretnutia s rozpoznávaním hostí pozvaných prostredníctvom ich e-mailovej adresy, import zoznamov účastníkov, koncepty pre prieskumy a sťahovanie zoznamov účastníkov hovorov", + "- Archive conversations to stay focused" : "- Archivujte konverzácie, aby ste sa mohli sústrediť", + "- Schedule a meeting into your calendar from within a conversation" : "- Naplánujte si stretnutie do kalendára priamo z konverzácie", + "- Search for messages of the current conversation directly in the right sidebar" : "- Vyhľadajte správy aktuálnej konverzácie priamo v pravom bočnom paneli", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Na prvý pohľad uvidíte viac konverzácií s novým kompaktným zoznamom (Nutné povoliť v nastaveniach Talk)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Konverzácie v schôdzkach teraz synchronizujú názov a popis z kalendára a sú skryté pomocou filtra vyhľadávania, kým sa nezačnú blížiť k začiatku", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Označiť konverzácie ako citlivé v nastaveniach notifikácií, aby sa skryl obsah správy zo zoznamu konverzácií a notifikácií", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Aby ste dostávali push notifikácie počas režimu \"Nerušiť\", označte konverzácie ako dôležité", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Pridajte ďalších účastníkov do hovorov jeden na jedného a vytvorte nový skupinový hovor na mieste", + "- Use threads to keep your chat and discussions organized" : "- Použite vlákna na udržanie poriadku vo vašich chatoch a diskusiách", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Živé prepisy sú teraz k dispozícii počas hovoru (vyžaduje aplikáciu ExApp pre živý prepis a vysoko výkonný backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderátori teraz môžu pripnúť správy, aby zostali na vrchu.", + "- Schedule a message to send it at a later time" : "- Naplánovať správu na odoslanie neskôr.", + "_All %n participant_::_All %n participants_" : ["%n účastník","Všetci %n účastníci","Všetkých %n účastníkov","Všetkých %n účastníkov"], + "Talk updates ✅" : "Aktualizácie Talk /Rozhovor/ ✅", + "Reaction deleted by author" : "Reakcia bola vymazaná autorom", + "{actor} created the conversation" : "Používateľ {actor} vytvoril rozhovor", + "You created the conversation" : "Vytvorili ste konverzáciu", + "System created the conversation" : "Systém vytvoril konverzáciu", + "An administrator created the conversation" : "Administrátor vytvoril rozhovor.", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "Používateľ {actor} premenoval rozhovor z \"%1$s\" na \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Premenovali ste rozhovor z \"%1$s\" na \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Administrátor premenoval rozhovor z „%1$s“ na „%2$s“.", + "{actor} set the description" : "{actor} nastavil popis", + "You set the description" : "Nastavili ste popis", + "An administrator set the description" : "Administrátor nastavil popis", + "{actor} removed the description" : "{actor} odstránil popis", + "You removed the description" : "Odstránili ste popis", + "An administrator removed the description" : "Administrátor odstránil popis", + "You started a silent call" : "Začali ste tichý rozhovor", + "Outgoing silent call" : "Odchodzí hovor bez vyzváňania", + "{actor} started a silent call" : "{actor} začal tichý rozhovor", + "Incoming silent call" : "Príchodzí hovor bez vyzváňania", + "You started a call" : "Začali ste hovor", + "Outgoing call" : "Odchodzí hovor", + "{actor} started a call" : "{actor} začal hovor", + "Incoming call" : "Prichádzajúci hovor", + "{actor} joined the call" : "{actor} sa pripojil k hovoru", + "You joined the call" : "Pridali ste sa k hovoru", + "{actor} left the call" : "{actor} odišiel z hovoru", + "You left the call" : "Odišli ste z hovoru", + "{actor} unlocked the conversation" : "{actor} odomkol rozhovor", + "You unlocked the conversation" : "Odomkli ste rozhovor", + "An administrator unlocked the conversation" : "Administrátor odomkol rozhovor", + "{actor} locked the conversation" : "{actor} zamkol rozhovor", + "You locked the conversation" : "Uzamkli ste rozhovor", + "An administrator locked the conversation" : "Administrátor zamkol rozhovor", + "{actor} limited the conversation to the current participants" : "{actor} obmedzil konverzáciu na aktuálnych účastníkov", + "You limited the conversation to the current participants" : "Konverzáciu ste obmedzili na aktuálnych účastníkov", + "An administrator limited the conversation to the current participants" : "Administrátor obmedzil konverzáciu na aktuálnych účastníkov", + "{actor} opened the conversation to registered users" : "{actor} otvoril rozhovor registrovaným užívateľom", + "You opened the conversation to registered users" : "Otvorili ste rozhovor registrovaným užívateľom", + "An administrator opened the conversation to registered users" : "Administrátor otvoril rozhovor registrovaným užívateľom", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} otvoril konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "You opened the conversation to registered users and users created with the Guests app" : "Otvorili ste konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Administrátor otvoril konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "The conversation is now open to everyone" : "Rozhovor je teraz otvorený pre každého", + "{actor} opened the conversation to everyone" : "{actor} otvoril rozhovor všetkým", + "You opened the conversation to everyone" : "Rozhovor ste otvorili všetkým", + "{actor} restricted the conversation to moderators" : "{actor} obmedzil rozhovor na moderátorov", + "You restricted the conversation to moderators" : "Rozhovor ste obmedzili na moderátorov", + "{actor} started breakout rooms" : "{actor} spustil vyhradené miestnosti", + "You started breakout rooms" : "Otvorili ste vyhradené miestnosti", + "{actor} stopped breakout rooms" : "{actor} zastavil(a) vyhradené miestnosti", + "You stopped breakout rooms" : "Uzatvorili ste vyhradené miestnosti", + "{actor} allowed guests" : "{actor} povolil hostí", + "You allowed guests" : "Povolili ste hostí", + "An administrator allowed guests" : "Administrátor povolil hostí", + "{actor} disallowed guests" : "{actor} zákazal hostí", + "You disallowed guests" : "Zakázali ste hostí", + "An administrator disallowed guests" : "Administrátor nepovolil hostí", + "{actor} set a password" : "{actor} nastavil heslo", + "You set a password" : "Nastavili ste heslo", + "An administrator set a password" : "Administrátor nastavil heslo", + "{actor} removed the password" : "{actor} zrušil heslo", + "You removed the password" : "Zrušili ste heslo", + "An administrator removed the password" : "Administrátor odstránil heslo", + "{actor} added {user}" : "{actor} pridal {user}", + "You joined the conversation" : "Pripojili ste sa k rozhovoru", + "{actor} joined the conversation" : "Používateľ {actor} sa pripojil k rozhovoru", + "You added {user}" : "Pridali ste {user}", + "{actor} added you" : "{actor} Vás pridal", + "An administrator added you" : "Pridal vás administrátor", + "An administrator added {user}" : "Administrátor pridal {user}", + "You left the conversation" : "Opustili ste rozhovor", + "{actor} left the conversation" : "Používateľ {actor} opustil rozhovor", + "{actor} removed {user}" : "{actor} odstránil {user}", + "You removed {user}" : "Odstránili ste {user}", + "{actor} removed you" : "{actor} Vás odstránil", + "An administrator removed you" : "Administrátor vás odstránil", + "An administrator removed {user}" : "Administrátor odstránil {user}", + "{actor} invited {federated_user}" : " {actor} pozval {federated_user}", + "You invited {federated_user}" : "Poslali ste pozvánku {federated_user}", + "You accepted the invitation" : "Prijali ste pozvánku", + "{actor} invited you" : "{actor} vás pozval", + "An administrator invited you" : "Administrátor vás pozval", + "An administrator invited {federated_user}" : "Administrátor pozval {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} akceptoval pozvánku", + "{actor} removed {federated_user}" : "{actor} odstránil {federated_user}", + "You removed {federated_user}" : "Odstránili ste {federated_user}", + "You declined the invitation" : "Toto pozvanie ste odmietli", + "An administrator removed {federated_user}" : "Administrátor odstránil {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} odmietol pozvánku", + "{actor} added group {group}" : "{actor} pridal skupinu {group}", + "You added group {group}" : "Pridali ste skupinu {group}", + "An administrator added group {group}" : "Administrátor bol pridaný do skupiny {group}", + "{actor} removed group {group}" : "{actor} odstránil skupinu {group}", + "You removed group {group}" : "Odstránili ste skupinu {group}", + "An administrator removed group {group}" : "Administrátor odstránil skupinu {group}", + "{actor} added team {circle}" : "{actor} pridal tím {circle}", + "You added team {circle}" : "Pridali ste tím {circle}", + "An administrator added team {circle}" : "Administrátor pridal tím {circle}", + "{actor} removed team {circle}" : "{actor} odobral tím {circle}", + "You removed team {circle}" : "Odobrali ste tím {circle}", + "An administrator removed team {circle}" : "Administrátor odobral tím {circle}", + "{actor} added {phone}" : "{actor} pridal {phone}", + "You added {phone}" : "Pridali ste {phone}", + "An administrator added {phone}" : "Administrátor pridal {phone}", + "{actor} removed {phone}" : "{actor} odstránil {phone}", + "You removed {phone}" : "Odstránili ste {phone}", + "An administrator removed {phone}" : "Administrátor odstránil {phone}", + "{actor} promoted {user} to moderator" : "{actor} povýšil {user} na moderátora", + "You promoted {user} to moderator" : "Povýšili ste {user} na moderátora", + "{actor} promoted you to moderator" : "{actor} Vás povýšil na moderátora", + "An administrator promoted you to moderator" : "Administrátor vás zadal ako moderátora", + "An administrator promoted {user} to moderator" : "Administrátor zadal {user} ako moderátora", + "{actor} demoted {user} from moderator" : "{actor} odobral {user} moderovanie", + "You demoted {user} from moderator" : "Odobrali ste {user} moderovanie", + "{actor} demoted you from moderator" : "{actor} Vám odobral moderovanie", + "An administrator demoted you from moderator" : "Administrátor vás zrušil ako moderátora", + "An administrator demoted {user} from moderator" : "Administrátor zrušil {user} ako moderátora", + "{actor} shared a file which is no longer available" : "{actor} sprístupnil súbor ktorý už nie je dostupný", + "You shared a file which is no longer available" : "Sprístupnili ste súbor ktorý už nie je dostupný", + "File shares are currently not supported in federated conversations" : "Zdieľanie súborov v súčasnosti nie je podporované vo federatívnych konverzáciách", + "The shared location is malformed" : "Zdieľané umiestnenie je poškodené", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavil Matterbridge na synchronizáciu tejto konverzácie s inými rozhovormi.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavili ste Matterbridge na synchronizáciu tejto konverzácie s inými rozhovormi.", + "{actor} created thread {title}" : "{actor} vytvoril vlákno {title}", + "You created thread {title}" : "Vytvorili ste vlákno {title}", + "{actor} renamed thread {title}" : "{actor} premenoval vlákno {title}", + "You renamed thread {title}" : "Premenovali ste vlákno {title}", + "{actor} updated the Matterbridge configuration" : "{actor} aktualizoval nastavenie Matterbridge", + "You updated the Matterbridge configuration" : "Aktualizovali ste nastavenie Matterbridge.", + "{actor} removed the Matterbridge configuration" : "{actor} odstránil nastavenie Matterbridge", + "You removed the Matterbridge configuration" : "Odstránili ste nastavenie Matterbridge", + "{actor} started Matterbridge" : "{actor} spustil Matterbridge", + "You started Matterbridge" : "Spustili ste Matterbridge", + "{actor} stopped Matterbridge" : "{actor} zastavil Matterbridge", + "You stopped Matterbridge" : "Zastavili ste Matterbridge", + "{actor} deleted a message" : "{actor} zmazal správu", + "You deleted a message" : "Zmazali ste správu", + "{actor} edited a message" : "{actor} upravil správu", + "You edited a message" : "Upravili ste správu", + "{actor} pinned a message" : "{actor} pripol správu", + "You pinned a message" : "Pripli ste správu", + "{actor} unpinned a message" : "{actor} odopol správu", + "Message was automatically unpinned" : "Správa bola automaticky odopnutá", + "You unpinned a message" : "Odopli ste správu", + "{actor} deleted a reaction" : "{actor} vymazal reakciu", + "You deleted a reaction" : "Odstránili ste reakciu", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Nastavili ste platnosť správy na %n týždeň","Nastavili ste platnosť správy na %n týždne","Nastavili ste platnosť správy na %n týždňov","Nastavili ste platnosť správy na %n týždne"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Nastavili ste platnosť správy na %n deň","Nastavili ste platnosť správy na %n dni","Nastavili ste platnosť správy na %n dní","Nastavili ste platnosť správy na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Nastavili ste platnosť správy na %n hodinu","Nastavili ste platnosť správy na %n hodiny","Nastavili ste platnosť správy na %n hodín","Nastavili ste platnosť správy na %n hodiny"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Nastavili ste platnosť správy na %n minútu","Nastavili ste platnosť správy na %n minúty","Nastavili ste platnosť správy na %n minút","Nastavili ste platnosť správy na %n minúty"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavil platnosť správy na %n týždeň","{actor} nastavil platnosť správy na %n týždne","{actor} nastavil platnosť správy na %n týždňov","{actor} nastavil platnosť správy na %n týždne"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavil platnosť správy na %n deň","{actor} nastavil platnosť správy na %n dni","{actor} nastavil platnosť správy na %n dní","{actor} nastavil platnosť správy na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavil platnosť správy na %n hodinu","{actor} nastavil platnosť správy na %n hodiny","{actor} nastavil platnosť správy na %n hodín","{actor} nastavil platnosť správy na %n hodiny"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavil platnosť správy na %n minútu","{actor} nastavil platnosť správy na %n minúty","{actor} nastavil platnosť správy na %n minút","{actor} nastavil platnosť správy na %n minúty"], + "{actor} disabled message expiration" : "{actor} zakázal vypršanie platnosti správy", + "You disabled message expiration" : "Zakázali ste vypršanie platnosti správy", + "{actor} cleared the history of the conversation" : "{actor} vyčistil históriu konverzácie", + "You cleared the history of the conversation" : "Vyčistili ste históriu konverzácie", + "{actor} set the conversation picture" : "{actor} nastavil(a) obrázok konverzácie", + "You set the conversation picture" : "Nastavili ste obrázok konverzácie", + "{actor} removed the conversation picture" : "{actor} odstránil(a) obrázok konverzácie", + "You removed the conversation picture" : "Odstránili ste obrázok konverzácie", + "{actor} ended the poll {poll}" : "{actor} ukončil anketu {poll}", + "You ended the poll {poll}" : "Ukončili ste anketu {poll}", + "{actor} started the video recording" : "{actor} spustil(a) nahrávanie videa", + "You started the video recording" : "Spustili ste nahrávania videa", + "{actor} stopped the video recording" : "{actor} zastavil(a) nahrávanie videa", + "You stopped the video recording" : "Zastavili ste nahrávanie videa", + "{actor} started the audio recording" : "{actor} spustil(a) nahrávanie zvuku", + "You started the audio recording" : "Spustili ste nahrávanie zvuku", + "{actor} stopped the audio recording" : "{actor} zastavil nahrávanie zvuku", + "You stopped the audio recording" : "Zastavili ste nahrávanie zvuku", + "The recording failed" : "Nahrávanie skončilo s chybou", + "Someone voted on the poll {poll}" : "Niekto hlasoval v ankete {poll}", + "Message deleted by author" : "Správa vymazaná autorom", + "Message deleted by {actor}" : "Správa vymazaná od {actor}", + "Message deleted by you" : "Správu ste odstránili", + "Deleted user" : "Zmazaný užívateľ", + "Unknown number" : "Neznáme číslo", + "Administration" : "Administrácia", + "System" : "Systém", + "%s (guest)" : "%s (guest)", + "Missed call" : "Zmeškaný hovor", + "Unanswered call" : "Neprijatý hovor", + "Call ended (Duration {duration})" : "Hovor skončil (Doba hovoru {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} ukončil hovor (Doba hovoru {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Hovor s %n návštevníkom bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Hovor s %n návštevníkom bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})","Hovor s %n návštevníkmi bol ukončený (Doba hovoru {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ukončil hovor s %n návštevníkom (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})","{actor} ukončil hovor s %n návštevníkmi (Trvanie {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1} ended (Duration {duration})" : "Hovor s {user1} bol ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} ukončil hovor s {user1} (Trvanie {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1} a {user2} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Hovor s {user1} a {user2} bol ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} ukončil hovor s {user1} a {user2} (Trvanie {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Hovor s {user1}, {user2} a {user3} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2} a {user3} (Trvanie {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3} a {user4} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3} a {user4} (Trvanie {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} bol ukončený, keďže dosiahol maximálnu dĺžku hovoru (Doba hovoru {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Hovor s {user1}, {user2}, {user3}, {user4} a {user5} ukončený (Doba hovoru {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} ukončil hovor s {user1}, {user2}, {user3}, {user4} a {user5} (Trvanie {duration})", + "Message of {user} in {conversation}" : "Správa od {author} v {conversation}", + "Message of {user}" : "Správa od {user}", + "Message of a deleted user in {conversation}" : "Správa od zmazaného užívateľa v {conversation}", + "Talk conversations" : "Talk /Rozhovor/ konverzácia", + "Talk to %s" : "Talk /Rozhovor/ s %s", + "An error occurred. Please contact your administrator." : "Vyskytla sa chyba. Prosím, kontaktujte svojho správcu.", + "App disabled" : "Aplikácia vypnutá", + "Conversation subfolders are disabled" : "Podpriečinky konverzácie sú vypnuté", + "Storage quota exceeded" : "Kapacita úložiska prekročená", + "Could not prepare conversation folder" : "Nepodarilo sa pripraviť priečinok konverzácie", + "File not found" : "Súbor nenájdený", + "Path must point to a file" : "Cesta musí smerovať k súboru", + "File is not inside the conversation draft folder for this room" : "Súbor nie je vo vnútri priečinka konceptov konverzácie pre túto miestnosť", + "File is not shared, or shared but not with the user" : "Súbor nie je sprístupnený alebo je sprístupnený inému používateľovi", + "No account available to delete." : "Na odstránenie nie je k dispozícii žiadny účet.", + "Poll" : "Anketa", + "Password needs to be set" : "Heslo musí byť nastavené", + "Uploading the file failed" : "Nahrávanie súboru zlyhalo", + "No image file provided" : "Súbor obrázku nebol zadaný", + "File is too big" : "Súbor je príliš veľký", + "Invalid file provided" : "Zadaný neplatný súbor", + "Invalid image" : "Chybný obrázok", + "Unknown filetype" : "Neznámy typ súboru", + "Talk mentions" : "Zmienky v Talk /Rozhovore/", + "More conversations" : "Viac konverzácií", + "Say hi to your friends and colleagues!" : "Pozdravte svojich priateľov a kolegov!", + "No unread mentions" : "Žiadne neprečítané upozornenia", + "Call in progress" : "Prebieha hovor", + "You were mentioned" : "Boli ste spomenutí", + "Write to conversation" : "Napísať do rozhovoru", + "Writes event information into a conversation of your choice" : "Napíše informáce o udalosti do rozhovoru, ktorý vyberiete", + "Missing email field in header line" : "V riadku hlavičky chýba pole e-mailu", + "Following lines are invalid: %s" : "Nasledujúce riadky nie sú platné: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s ťa pozval/a na rozhovor \"%2$s\".", + "You were invited to conversation \"%s\"." : "Boli ste pozvaní na konverzáciu \"%s\".", + "Conversation invitation" : "Prizvanie ku konverzácii", + "Scheduled time" : "Naplánovaný čas", + "Description" : "Popis", + "You can also dial-in via phone with the following details" : "Môžete sa tiež pripojiť telefonicky pomocou nasledujúcich podrobností", + "Dial-in information" : "Informácia o prichádzajúcom volaní.", + "Meeting ID" : "ID schôdzky", + "Your PIN" : "Váš PIN", + "Click the button below to join the lobby now." : "Kliknite na tlačidlo nižšie a pripojte sa do čakárne teraz.", + "Click the link below to join the lobby now." : "Kliknite na nižšie uvedený odkaz a pripojte sa do čakárne teraz.", + "Join lobby for \"%s\"" : "Pripojiť sa do čakárne \"%s\"", + "Click the button below to join the conversation now." : "Kliknite na tlačidlo nižšie a pripojte sa k rozhovoru teraz.", + "Click the link below to join the conversation now." : "Kliknite na nižšie uvedený odkaz a pridajte sa do rozhovoru teraz.", + "Join \"%s\"" : "Pripojiť sa k \"%s\"", + "Meeting" : "Porada", + "Password request: %s" : "Požiadavka na heslo: %s", + "Private conversation" : "Súkromná konverzácia", + "Deleted user (%s)" : "Odstránený používateľ (%s)", + "Failed to upload call recording" : "Chyba pri nahrávaní záznamu hovoru", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Záznamový server zlyhal pri nahrávaní nahrávky hovoru {call}. Prosím, obráťte sa na administráciu.", + "Share to chat" : "Zdieľať v chate", + "Dismiss notification" : "Zatvoriť upozornenie", + "Call recording now available" : "Nahrávka hovoru je teraz dostupná", + "The recording for the call in {call} was uploaded to {file}." : "Záznam hovoru v {call} bol nahraný do {file}.", + "Transcript now available" : "Prepisovanie na text je teraz k dispozícii", + "The transcript for the call in {call} was uploaded to {file}." : "Záznam prepisu na text hovoru v {call} bol nahraný do {file}.", + "Failed to transcript call recording" : "Nepodarilo sa prepísať na text nahrávku hovoru", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Server sa nepodarilo prepísať na text nahrávku v súbore {file} pre hovor {call}. Prosím, obráťte sa na administráciu.", + "Call summary now available" : "Zhrnutie hovoru je pripravené", + "The summary for the call in {call} was uploaded to {file}." : "Zhrnutie hovoru {call} bolo nahrané do {file}.", + "Failed to summarize call recording" : "Nepodarilo sa vytvoriť zhrnutie záznamu hovoru", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Serveru sa nepodarilo zhrnúť nahrávku v súbore {file} pre hovor v {call}. Prosím, kontaktujte administráciu.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} ťa pozval, aby si sa pripojil k miestnosti {roomName} na {remoteServer}", + "Accept" : "Prijať", + "Decline" : "Zahodiť", + "{user1} invited you to a federated conversation" : "Používateľ {user1} vás pozval ku federovanému rozhovoru", + "Someone reacted" : "Niekto reagoval", + "New message" : "Nová správa", + "Reminder" : "Pripomienka", + "Someone mentioned you" : "Niekto ťa spomenul", + "Notification" : "Oznámenie", + "Someone reacted in a private conversation" : "Niekto reagoval v súkromnej konverzácii", + "You received a message in a private conversation" : "Dostali ste správu v súkromnej konverzácii", + "Reminder in a private conversation" : "Pripomienka v súkromnej konverzácii", + "Someone mentioned you in a private conversation" : "Niekto ťa spomenul v súkromnej konverzácii", + "Notification in a private conversation" : "Oznámenie v súkromnej konverzácii", + "Reminder: You in {call}" : "Pripomienka: Vy v {call}", + "Reminder: {user} in {call}" : "Pripomienka: {user} v {call}", + "Reminder: Deleted user in {call}" : "Pripomienka: Odstránený používateľ v {call}", + "Reminder: {guest} (guest) in {call}" : "Pripomienka: {guest} (hosť) v {call}", + "Reminder: Guest in {call}" : "Pripomienka: Hosť v {call}", + "{user} reacted with {reaction}" : "{user} zareagoval s {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} zareagoval s {reaction} v {call}", + "Deleted user reacted with {reaction} in {call}" : "Vymazaný užívateľ zareagoval s {reaction} v {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (hosť) zareagoval s {reaction} v {call}", + "Guest reacted with {reaction} in {call}" : "Hosť reagoval s {reaction} v {call}", + "{user} in {call}" : "{user} v {call}", + "Deleted user in {call}" : "Odstránený užívateľ v {call}", + "{guest} (guest) in {call}" : "{guest} (guest) v {call}", + "Guest in {call}" : "Hosť v {call}", + "{user} sent you a private message" : "{user} Vám poslal súkromnú správu", + "{user} sent a message in conversation {call}" : "Používateľ {user} odoslal správu v rozhovore {call}", + "A deleted user sent a message in conversation {call}" : "Odstránený používateľ odoslal správu v rozhovore {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (hosť) poslal(a) správu v rozhovore {call}", + "A guest sent a message in conversation {call}" : "Hosť odoslal správu v rozhovore {call}", + "{user} replied to your private message" : "{user} odpovedal(a) na vašu súkromnú správu", + "{user} replied to your message in conversation {call}" : "{user} odpovedal(a) na vašu správu v rozhovore {call}", + "A deleted user replied to your message in conversation {call}" : "Odstránený používateľ odpovedal na vašu správu v rozhovore {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (hosť) odpovedal(a) na vašu správu v rozhovore {call}", + "A guest replied to your message in conversation {call}" : "Hosť odpovedal na vašu správu v rozhovore {call}", + "Reminder: You in private conversation {call}" : "Pripomienka: Ste v súkromnej konverzácii {call}", + "Reminder: A deleted user in private conversation {call}" : "Pripomienka: Vymazaný užívateľ v súkromnej konverzácii {call}", + "Reminder: {user} in private conversation" : "Pripomienka: {user} v súkromnej konverzácii", + "Reminder: You in conversation {call}" : "Pripomienka: Ste v konverzácii {call}", + "Reminder: {user} in conversation {call}" : "Pripomienka: {user} v konverzácii {call}", + "Reminder: A deleted user in conversation {call}" : "Pripomienka: Vymazaný užívateľ v konverzácii {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Pripomienka: {guest} (hosť) v konverzácii {call}", + "Reminder: A guest in conversation {call}" : "Pripomienka: Hosť v konverzácii {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagoval {reaction} na vašu súkromnú správu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Odstránený používateľ reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (návštevník) reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Návštevník reagoval(a) {reaction} na vašu správu v rozhovore {call}", + "{user} mentioned you in a private conversation" : "Používateľ {user} vás spomenul v súkromnom rozhovore", + "{user} mentioned group {group} in conversation {call}" : "{user} spomenul skupinu {group} v konverzácii {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} spomenul/a {team} v konverzácii {call}", + "{user} mentioned everyone in conversation {call}" : "Užívateľ {user} spomenul všetkých v rozhovore {call}", + "{user} mentioned you in conversation {call}" : "Používateľ {user} vás spomenul v rozhovore {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Odstránený užívateľ spomenul skupinu {group} v konverzácii {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Vymazaný používateľ spomenul tím {team} v konverzácii {call}.", + "A deleted user mentioned everyone in conversation {call}" : "Odstránený užívateľ spomenul všetkých v rozhovore {call}", + "A deleted user mentioned you in conversation {call}" : "Odstránený používateľ vás spomenul v rozhovore {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (hosť) spomenul skupinu {group} v konverzácii {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (hosť) spomenul tím {team} v rozhovore {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "Užívateľ {guest} spomenul všetkých v rozhovore {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (hosť) vás spomenul v rozhovore {call}", + "A guest mentioned group {group} in conversation {call}" : "Hosť spomenul skupinu {group} v konverzácii {call}", + "A guest mentioned team {team} in conversation {call}" : "Hosť spomenul tím {team} v konverzácii {call}", + "A guest mentioned everyone in conversation {call}" : "Hosť vás spomenul v rozhovore {call}", + "A guest mentioned you in conversation {call}" : "Hosť vás spomenul v rozhovore {call}", + "View message" : "Zobraziť správu", + "Dismiss reminder" : "Zatvoriť pripomienku", + "View chat" : "Zobraziť čet", + "{user} invited you to a group conversation: {call}" : "Používateľ {user} vás prizval ku skupinovému rozhovoru: {call}", + "Join call" : "Pripojiť sa k hovoru", + "Answer call" : "Prijať hovor", + "{user} would like to talk with you" : "{user} by sa chcel s vami porozprávať", + "Call back" : "Zavolať späť", + "You missed a call from {user}" : "Zmeškali ste hovor od používateľa {user}", + "Accept call" : "Prijať hovor", + "Incoming phone call from {call}" : "Prichádzajúci hovor od {call}", + "You missed a phone call from {call}" : "Zmeškali ste hovor od {call}", + "A group call has started in {call}" : "Skupinový hovor začal v {call}", + "You missed a group call in {call}" : "Zmeškali ste skupinový hovor v {call}", + "{email} is requesting the password to access {file}" : "{email} požaduje heslo pre prístup k {súboru}", + "{email} tried to request the password to access {file}" : "{email} sa pokúsil požiadať o heslo pre prístup k {file}", + "Someone is requesting the password to access {file}" : "Niekto požaduje heslo pre prístup k {file}", + "Someone tried to request the password to access {file}" : "Niekto sa pokúsil požiadať o heslo pre prístup k {file}", + "Open settings" : "Otvoriť nastavenia", + "Hosted signaling server added" : "Hostovaný signalizačný server pridaný", + "The hosted signaling server is now configured and will be used." : "Teraz je nastavený hosťovaný signalizačný server a bude sa používať.", + "Hosted signaling server removed" : "Hostovaný signalizačný server odstránený", + "The hosted signaling server was removed and will not be used anymore." : "Hosťovaný signalizačný server bol odstránený a už sa nebude používať.", + "Hosted signaling server changed" : "Hostovaný signalizačný server zmenený", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Účet hosťovaného signalizačného servera zmenil stav z \"{oldstatus}\" na \"{newstatus}\".", + "pending" : "čakajúce", + "active" : "aktívne", + "expired" : "expirované", + "blocked" : "blokované", + "error" : "chyba", + "The certificate of {host} expires in {days} days" : "Certifikát pre {host} vyprší o {days} dní", + "The certificate of {host} expired" : "Certifikát pre {host} vypršal", + "Contact via Talk" : "Kontaktovať cez Talk /Rozhovor/", + "Open Talk" : "Otvoriť Talk /Rozhovor/", + "Default" : "Predvolené", + "Send messages, create threads, and start voice and video calls." : "Odosielajte správy, vytvárajte vlákna a začnite hlasové a videohovory.", + "Presentation" : "Prezentácia", + "Voice room" : "Hlasová miestnosť", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Priamo sa pripojte k hovoru, ideálne na rýchle aktualizácie alebo spontánne stretnutia.", + "Webinar" : "Webinár", + "Conversations" : "Konverzácie", + "Messages in current conversation" : "Správy v aktuálnej konverzácii", + "{user}" : "{user}", + "Messages" : "Správy", + "{user} in {conversation}" : "{user} v {conversation}", + "Messages in other conversations" : "Správy v iných konverzáciách", + "One-to-one rooms always need to show the other users avatar" : " Miestnosti jeden na jedného musia vždy zobraziť avatara ostatných užívateľov.", + "Invalid emoji character" : "Neplatný znak emotikonu", + "Invalid background color" : "Neplatná farba pozadia", + "Avatar image is not square" : "Obrázok avatara nie je štvorcový", + "Room {number}" : "Miestnosť {number}", + "Other" : "Iné", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Nepodarilo sa požiadať o skúšobnú verziu, pretože skúšobný server je nedostupný. Skúste to neskôr.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Vyskytol sa problém s overením tejto inštancie. Možno nie je zvonka prístupná zvonku na overenie jej URL.", + "Something unexpected happened." : "Stalo sa niečo neočakávané.", + "The URL is invalid." : "URL je neplatná.", + "An HTTPS URL is required." : "Je vyžadovaná HTTPS URL.", + "The email address is invalid." : "E-mailová adresa je neplatná.", + "The language is invalid." : "Jazyk je neplatný.", + "The country is invalid." : "Krajina je neplatná.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Vyskytol sa problém so skúšobnou verziou. ďalšie informácie získate v záznamoch udalostí.", + "Too many requests are send from your servers address. Please try again later." : "Z adresy servera sa odoslalo príliš veľa požiadaviek. Skúste to neskôr prosím.", + "There is already a trial registered for this Nextcloud instance." : "Pre túto inštanciu Nextcloud je už zaregistrovaná skúšobná verzia.", + "Something unexpected happened. Please try again later." : "Stalo sa niečo neočakávané. Skúste to neskôr prosím.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Nepodarilo sa požiadať o skúšobnú verziu, pretože skúšobný server sa správal chybne. Skúste to neskôr.", + "Trial requested but failed to get account information. Please check back later." : "Požiadavka o skúšobnú verziu bola odoslaná, ale nepodarilo sa získať informácie o účte. Skúste to znova neskôr.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Vyskytol sa problém s overením tejto požiadavky. Možno nie je zvonku prístup na overenie jej URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Nepodarilo sa načítať informácie o účte, pretože skúšobný server sa správal chybne. Skúste to znova neskôr.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Vyskytol sa problém s načítaním informácií o účte. Skontrolujte ďalšie informácie v záznamoch udalostí.", + "There is no such account registered." : "Takýto účet nie je zaregistrovaný.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Nepodarilo sa načítať informácie o účte, pretože skúšobný server je nedostupný. Skúste to znova neskôr.", + "Deleting the hosted signaling server account failed. Please check back later." : "Odstránenie účtu hosťovaného signalizačného servera zlyhalo. Skúste to znova neskôr.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Nepodarilo sa odstrániť účet, pretože skúšobný server sa správal chybne. Skúste to znova neskôr.", + "There is a problem with deleting the account. Please check your logs for further information." : "Vyskytol sa problém s odstránením účtu. Ďalšie informácie získate v záznamoch udalostí.", + "Too many requests are sent from your servers address. Please try again later." : "Z adresy servera sa odoslalo príliš veľa požiadaviek. Skúste to neskôr prosím.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Nepodarilo sa odstrániť účet, pretože skúšobný server je nedostupný. Skúste to znova neskôr.", + "Note to self" : "Poznámka pre seba", + "A place for your private notes, thoughts and ideas" : "Miesto pre vaše súkromné poznámky, myšlienky a nápady", + "Transcript is AI generated and may contain mistakes" : "Prepis je generovaný umelou inteligenciou a môže obsahovať chyby", + "Summary is AI generated and may contain mistakes" : "Zhrnutie je generované umelou inteligenciou a môže obsahovať chyby", + "Let's get started!" : "Poďme začať!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** je bezpečná komunikačná platforma na vlastnom serveri, ktorá sa hladko integruje do ekosystému Nextcloud.\n\n#### Kľúčové vlastnosti Nextcloud Talk:\n\n* Chat a správy v súkromných a skupinových chatoch\n* Hlasové hovory a videohovory\n* Zdieľanie súborov a integrácia s inými aplikáciami Nextcloud\n* Prispôsobiteľné nastavenia konverzácie, moderovanie a ovládanie súkromia\n* Web, počítač a mobil (iOS a Android)\n* Súkromná a bezpečná komunikácia\n\nViac informácií nájdete v [používateľskej dokumentácii](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Vitajte v Nextcloud Talk\n\nNextcloud Talk je súkromná a výkonná aplikácia na odosielanie správ, ktorá sa integruje s Nextcloud. Chatujte v súkromných alebo skupinových konverzáciách, spolupracujte prostredníctvom hlasových hovorov a videohovorov, organizujte webináre a udalosti, prispôsobujte si konverzácie a ďalšie.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formátujte texty pre vytváranie formátovaných správ\n\nV Nextcloud Talk môžete použiť syntax Markdown na formátovanie správ. Použite napríklad formátovanie **tučné** alebo *kurzíva* alebo „zvýraznenie textov ako kódu“. Môžete dokonca vytvárať tabuľky a pridávať nadpisy do textu.\n\nPotrebujete opraviť preklep alebo zmeniť formátovanie? Upravte svoju správu kliknutím na „Upraviť správu“ v ponuke správ.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Pridajte prílohy a odkazy\n\nPripojte súbory z vášho Nextcloud Hub pomocou tlačidla „+“. Zdieľajte položky zo súborov a rôznych aplikácií Nextcloud. Niektoré aplikácie dokonca podporujú interaktívne miniaplikácie, napríklad aplikácia Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Nechajte konverzácie plynúť: spomínajte používateľov, reagujte na správy a viac.\n\nV konverzácii môžete spomenúť každého použitím %s alebo konkrétnych účastníkov tak, že napíšete \"@\" a vyberiete ich meno zo zoznamu.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Môžete odpovedať na správy, preposielať ich do ďalších chatov a ľuďom alebo kopírovať obsah správy.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Urobte viac pomocou funkcie Smart Picker\n\nJednoducho napíšte „/“ alebo prejdite do ponuky „+“ a otvorte Smart Picker, kde môžete k svojim správam pripojiť rôzny obsah. Inteligentný výber môžete nakonfigurovať tak, aby bolo možné pridávať položky z aplikácií Nextcloud, súbory GIF, miesta na mape, obsah generovaný AI a oveľa viac.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Spravujte nastavenia konverzácie\n\nV ponuke konverzácie máte prístup k rôznym nastaveniam na správu konverzácií, ako napríklad:\n* Upravte informácie o konverzácii\n* Spravujte upozornenia\n* Aplikujte početné pravidlá moderovania\n* Nakonfigurujte prístup a zabezpečenie\n* Povoľte roboty\n* a ďalšie!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Spojené Arabské Emiráty", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua a Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albánsko", + "Armenia" : "Arménsko", + "Angola" : "Angola", + "Antarctica" : "Antarktída", + "Argentina" : "Argentína", + "American Samoa" : "Americká Samo", + "Austria" : "Rakúsko", + "Australia" : "Austrália", + "Aruba" : "Aruba", + "Åland Islands" : "Alandy", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna a Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladéš", + "Belgium" : "Belgicko", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulharsko", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Svätý Bartolomej", + "Bermuda" : "Bermudy", + "Brunei Darussalam" : "Brunej-Darussalam", + "Bolivia, Plurinational State of" : "Bolívia", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius a Saba", + "Brazil" : "Brazília", + "Bahamas" : "Bahamské ostrovy", + "Bhutan" : "Bhután", + "Bouvet Island" : "Bouvetský ostrov", + "Botswana" : "Botswana", + "Belarus" : "Bielorusko", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosové ostrovy", + "Congo, the Democratic Republic of the" : "Kongo", + "Central African Republic" : "Stredoafrická republika", + "Congo" : "Kongo", + "Switzerland" : "Švajčiarsko", + "Côte d'Ivoire" : "Pobrežie Slonoviny", + "Cook Islands" : "Cookove ostrovy", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Čína", + "Colombia" : "Kolumbia", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kapverdy", + "Curaçao" : "Curaçao", + "Christmas Island" : "Vianočný ostrov", + "Cyprus" : "Cyprus", + "Czechia" : "Česká repubika", + "Germany" : "Nemecko", + "Djibouti" : "Džibutsko", + "Denmark" : "Dánsko", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikánska republika", + "Algeria" : "Alžírsko", + "Ecuador" : "Ekvádor", + "Estonia" : "Estónsko", + "Egypt" : "Egypt", + "Western Sahara" : "Západná Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Španielsko", + "Ethiopia" : "Etiópia", + "Finland" : "Fínsko", + "Fiji" : "Fidži", + "Falkland Islands (Malvinas)" : "Falklandské ostrovy", + "Micronesia, Federated States of" : "Mikronézia", + "Faroe Islands" : "Faerské ostrovy", + "France" : "Francúzsko", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Spojené kráľovstvo Veľkej Británie a Severného Írska", + "Grenada" : "Grenada", + "Georgia" : "Gruzínsko", + "French Guiana" : "Francúzska Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltár", + "Greenland" : "Grónsko", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Rovníková Guinea", + "Greece" : "Grécko", + "South Georgia and the South Sandwich Islands" : "Južná Georgia a Južné Sandwichove ostrovy", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heardove a McDonaldove ostrovy", + "Honduras" : "Honduras", + "Croatia" : "Chorvátsko", + "Haiti" : "Haiti", + "Hungary" : "Maďarsko", + "Indonesia" : "Indonézia", + "Ireland" : "Írsko", + "Israel" : "Izrael", + "Isle of Man" : "ostrov Man", + "India" : "India", + "British Indian Ocean Territory" : "Britské indickooceánske územie", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Irán", + "Iceland" : "Island", + "Italy" : "Taliansko", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordánsko", + "Japan" : "Japonsko", + "Kenya" : "Keňa", + "Kyrgyzstan" : "Kirgizsko", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komory", + "Saint Kitts and Nevis" : "Svätý Krištof a Nevis", + "Korea, Democratic People's Republic of" : "Severná Kórea", + "Korea, Republic of" : "Južná Kórea", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmanské ostrovy", + "Kazakhstan" : "Kazachstan", + "Lao People's Democratic Republic" : "Laoská ľudovodemokratická republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Svätá Lucia", + "Liechtenstein" : "Lichtenštajnsko", + "Sri Lanka" : "Srí Lanka", + "Liberia" : "Libéria", + "Lesotho" : "Lesothské kráľovstvo", + "Lithuania" : "Litva", + "Luxembourg" : "Luxembursko", + "Latvia" : "Lotyšsko", + "Libya" : "Líbia", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavská republika", + "Montenegro" : "Čierna Hora", + "Saint Martin (French part)" : "Svätý Martin (francúzska časť)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshallove ostrovy", + "North Macedonia" : "Severné Macedónsko", + "Mali" : "Mali", + "Myanmar" : "Mjanmarsko", + "Mongolia" : "Mongolsko", + "Macao" : "Makao", + "Northern Mariana Islands" : "Severné Mariany", + "Martinique" : "Martinik", + "Mauritania" : "Mauritánia", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Maurícius", + "Maldives" : "Maledivy", + "Malawi" : "Malawi", + "Mexico" : "Mexiko", + "Malaysia" : "Malajzia", + "Mozambique" : "Mozambik", + "Namibia" : "Namíbia", + "New Caledonia" : "Nová Kaledónia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigéria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Holandsko", + "Norway" : "Nórsko", + "Nepal" : "Nepál", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nový Zéland", + "Oman" : "Omán", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francúzska Polynézia", + "Papua New Guinea" : "Papua-Nová Guinea", + "Philippines" : "Filipíny", + "Pakistan" : "Pakistan", + "Poland" : "Poľsko", + "Saint Pierre and Miquelon" : "Saint Pierre a Miquelon", + "Pitcairn" : "Pitcairnove ostrovy", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestína", + "Portugal" : "Portugalsko", + "Palau" : "Palau", + "Paraguay" : "Paraguaj", + "Qatar" : "Katar", + "Réunion" : "Reunion", + "Romania" : "Rumunsko", + "Serbia" : "Srbsko", + "Russian Federation" : "Ruská federácia", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudská Arábia", + "Solomon Islands" : "Šalamúnove ostrovy", + "Seychelles" : "Seychely", + "Sudan" : "Sudán", + "Sweden" : "Švédsko", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Svätá Helena, Ascension a Tristan da Cunha", + "Slovenia" : "Slovinsko", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovensko", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Maríno", + "Senegal" : "Senegal", + "Somalia" : "Somálsko", + "Suriname" : "Surinam", + "South Sudan" : "Južný Sudán", + "Sao Tome and Principe" : "Svätý Tomáš a Princov ostrov", + "El Salvador" : "Salvádor", + "Sint Maarten (Dutch part)" : "Sint Maarten (holandská časť)", + "Syrian Arab Republic" : "Sýria", + "Eswatini" : "Svazijsko", + "Turks and Caicos Islands" : "ostrovy Turks a Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francúzska južná a antarktická oblasť", + "Togo" : "Togo", + "Thailand" : "Thajsko", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Východný Timor", + "Turkmenistan" : "Turkménsko", + "Tunisia" : "Tunisko", + "Tonga" : "Tonga", + "Turkey" : "Turecko", + "Trinidad and Tobago" : "Trinidad a Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzánia", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Menšie odľahlé ostrovy Spojených štátov", + "United States of America" : "Spojené štáty americké", + "Uruguay" : "Uruguaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Vatikán", + "Saint Vincent and the Grenadines" : "Svätý Vincent a Grenadíny", + "Venezuela, Bolivarian Republic of" : "Venezuela", + "Virgin Islands, British" : "Britské Paneské ostrovy", + "Virgin Islands, U.S." : "U.S. Panenské ostrovy", + "Viet Nam" : "Vietnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Juhoafrická republika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Rozmazanie pozadia", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Nepodarilo sa skontrolovať podporu načítania WASM. Prosím skontrolujte manuálne, či váš webový server poskytuje súbory `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Váš webový server nie je správne nastavený na doručovanie súborov `.wasm`. Toto je zvyčajne problém s konfiguráciou Nginx. Pre rozostrenie pozadia potrebuje úpravu, aby doručoval aj súbory `.wasm`. Porovnajte svoju konfiguráciu Nginx s odporúčanou konfiguráciou v našej dokumentácii.", + "Talk configuration values" : "Konfiguračné hodnoty aplikácie Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Vynútenie trvania hovoru je podporované iba systémovým cronom. Povoľte systémový cron alebo odstráňte konfiguráciu `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Malé hodnoty „max_call_duration“ (momentálne nastavené na %d) nie sú vynútiteľné z dôvodu technických obmedzení. Úloha na pozadí sa vykonáva iba každých 5 minút, takže použitie na vlastné riziko.", + "Federation" : "Združovanie", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Dôrazne sa odporúča nakonfigurovať \"memcache.locking\", keď je zapnutá Talk Federation.", + "High-performance backend" : "Vysoko výkonná podporná vrstva", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nie je nakonfigurovaný vysokovýkonný backend - Spustenie Nextcloud Talk bez vysokovýkonného backendu je možné len pre veľmi malé hovory (max. 2-3 účastníci). Nastavte si vysokovýkonný backend, aby ste zabezpečili bezproblémové fungovanie hovorov s viacerými účastníkmi.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Spustenie vysokovýkonného backendového režimu „conversation_cluster“ je zastarané a v nadchádzajúcej verzii už nebude podporované. Vysokovýkonný backend v súčasnosti podporuje skutočné klastrovanie, ktoré by sa malo použiť namiesto neho.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Definovanie viacerých vysokovýkonných backendov je zastarané a v pripravovanej verzii už nebude podporované. Namiesto toho by mal byť nastavený vyrovnávač zaťaženia spolu s klastrovými signalizačnými servermi a nakonfigurovaný v nastaveniach Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Uložený verejný kľúč pre použitý algoritmus %1$s sa nezhoduje s uloženým súkromným kľúčom. Spustite %2$s na opravu problému.", + "High-performance backend not configured correctly. Run %s for details." : "Vysokovýkonný backend nie je správne nakonfigurovaný. Spustite %s pre podrobnosti.", + "High-performance backend not configured correctly" : "Vysokovýkonný backend nie je správne nakonfigurovaný", + "Error: Cannot connect to server" : "Chyba: Nedá sa pripojiť k serveru", + "Error: Server did not respond with proper JSON" : "Chyba: Server neodpovedal správnym JSON", + "Error: Certificate expired" : "Chyba: Certifikát vypršal", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: Systémové časy servera Nextcloud a vysokovýkonného servera backend nie sú synchronizované. Uistite sa, že sú oba servery pripojené k časovému serveru alebo manuálne synchronizujte ich čas.", + "Could not get version" : "Nie je možné zistiť verziu", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Chyba: Spustené verzia: {version}; Server musí byť aktualizovaný pre kompatibilitu s touto verziou Rozhovoru", + "Error: Server responded with: {error}" : "Chyba: Server odpovedal s: {error}", + "Error: Unknown error occurred" : "Chyba: Vyskytla sa neznáma chyba", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Upozornenie: Bežiaca verzia: {version}; Server nepodporuje všetky funkcie tejto verzie Talk, chýbajúce funkcie: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Pri spustení Nextcloud Talk s vysokovýkonným backendom sa dôrazne odporúča nakonfigurovať vyrovnávaciu pamäť.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Klient Push je nainštalovaný, čo zlepšuje presnosť notifikácií v aplikácii Talk.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} nie je nainštalovaný. To môže spôsobiť oneskorené oznámenia o hovore.", + "Recording backend" : "Backend pre záznam", + "Using the recording backend requires a High-performance backend." : "Používanie backendu nahrávania vyžaduje vysokovýkonný backend.", + "No recording backend configured" : "Nie je nakonfigurovaný žiadny backend nahrávania", + "SIP configuration" : "Nastavenie SIP", + "Using the SIP functionality requires a High-performance backend." : "Používanie funkcionality SIP vyžaduje vysokovýkonný backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Pridelené telefónne čísla Talk nesmú začínať + alebo 0. Odstráňte alebo aktualizujte nasledujúce čísla:\n{list}", + "No SIP backend configured" : "Nie je nakonfigurovaný žiadny SIP backend", + "Invalid date, date format must be YYYY-MM-DD" : "Neplatný dátum, formát musí byť v tvare YYYY-MM-DD", + "Conversation not found" : "Rozhovor sa nenašiel", + "Path is already shared with this conversation" : "Cesta je už nazdieľaná v tejto konverzácii", + "Chat, video & audio-conferencing using WebRTC" : "Čet, video a audio konferencie pomocou WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chat, video a audiokonferencie pomocou WebRTC\n\n* 💬 **Chat** Nextcloud Talk prichádza s jednoduchým textovým chatom, ktorý vám umožňuje zdieľať alebo nahrávať súbory z vašej aplikácie Nextcloud Files alebo miestneho zariadenia a spomenúť ďalších účastníkov.\n* 👥 **Súkromné, skupinové, verejné a heslom chránené hovory!** Pozvite niekoho, celú skupinu alebo pošlite verejný odkaz na pozvanie na hovor.\n* 🌐 **Federované chaty** Chatujte s ostatnými používateľmi Nextcloud na ich serveroch\n* 💻 **Zdieľanie obrazovky!** Zdieľajte svoju obrazovku s účastníkmi vášho hovoru.\n* 🚀 **Integrácia s ďalšími aplikáciami Nextcloud**, ako sú Súbory, Kalendár, Stav používateľa, Dashboard, Flow, Mapy, Inteligentný výber, Kontakty, Deck a mnoho ďalších.\n* 🌉 **Synchronizácia s inými chatovacími riešeniami** Vďaka integrácii [Matterbridge](https://github.com/42wim/matterbridge/) do aplikácie Talk môžete jednoducho synchronizovať množstvo ďalších chatovacích riešení so službou Nextcloud Talk a naopak.", + "Leave call" : "Opustiť hovor", + "Navigating away from the page will leave the call in {conversation}" : "Ak opustíte stránku, hovor ostane v {conversation}", + "Stay in call" : "Neopustiť hovor", + "Error occurred when getting the conversation information" : "Došlo k chybe pri získavaní informácií o konverzácii", + "Discuss this file" : "Diskutujte o tomto súbore", + "Share this file with others to discuss it" : "Zdieľajte tento súbor s ostatnými a diskutujte o ňom", + "Share this file" : "Zdieľať tento súbor", + "Join conversation" : "Pripojiť sa ku konverzácii", + "This conversation is password-protected." : "Táto konverzácia je chránená heslom.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Zaznamenali sme viacnásobné chybné prihlásenie z vašej IP adresy. Vaše nasledujúce prihlásenie bude pozdržané o 30 sekúnd.", + "The password is wrong. Try again." : "Heslo je nesprávne. Skúste znova.", + "Password" : "Heslo", + "Submit" : "Odoslať", + "Error requesting the password." : "Chyba pri vyžiadaní hesla", + "Request password" : "Vyžiadať heslo", + "This conversation has ended" : "Tento rozhovor bol ukončený", + "Error occurred when joining the conversation" : "Nastala chyba pri pripájaní ku konverzácii", + "Close Talk sidebar" : "Zavrieť bočný panel Rozhovor", + "Open Talk sidebar" : "Otvoriť bočný panel Rozhovoru", + "Everyone" : "Všetci", + "Users and moderators" : "Používatelia a moderátori", + "Moderators only" : "Iba moderátori", + "Disable calls" : "Zakázať hovory", + "Save changes" : "Uložiť zmeny", + "Saving …" : "Ukladá sa...", + "Saved!" : "Uložené!", + "Limit to groups" : "Povoľ len pre skupiny", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Keď je vybratá aspoň jedna skupina, tak sa rozhovoru môžu zúčastniť len používatelia z uvedených skupín.", + "Guests can still join public conversations." : "Hostia sa vždy môžu pripojiť k verejným rozhovorom.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Používatelia, ktorí už nemôžu používať službu Rozhovor, budú naďalej uvedení ako účastníci predchádzajúcich rozhovorov a aj ich správy v rozhovoroch budú zachované.", + "Limit using Talk" : "Obmedziť používanie Rozhovoru", + "Limit creating a public and group conversation" : "Obmedziť vytváranie verejných a skupinových rozhovorov", + "Limit creating conversations" : "Obmedziť vytváranie rozhovorov", + "Limit starting a call" : "Obmedziť začatie hovoru", + "Limit starting calls" : "Obmedziť začatie hovorov", + "When a call has started, everyone with access to the conversation can join the call." : "Po začatí hovoru sa k hovoru môžu pripojiť všetci, ktorí majú k nemu prístup.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Nasledujúce roboty sú nainštalované na tomto serveri. V dokumentácii nájdete podrobnosti o tom, ako {linkstart1}vytvoriť vlastného bota{linkend} alebo {linkstart2}zoznam robotov{linkend}, ktoré môžete povoliť na vašom serveri.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Žiadne boty nie sú nainštalované na tomto serveri. V dokumentácii nájdete podrobnosti o tom, ako {linkstart1}vytvoriť vlastného bota{linkend} alebo {linkstart2}zoznam robotov{linkend}, ktoré môžete povoliť na vašom serveri.", + "Description is not provided" : "Popis nie je uvedený", + "Locked for moderators" : "Zamknuté pre moderátorov", + "Enabled" : "Zapnuté", + "Disabled" : "Vypnuté", + "Bots settings" : "Nastavenia botov", + "State" : "Stav", + "Name" : "Názov", + "Last error" : "Posledná chyba", + "Total errors count" : "Celkový počet chýb", + "Find more bots" : "Nájsť viac botov", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Dôveryhodné servery je možné konfigurovať na {linkstart}stránke Nastavenia zdieľania{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Združené rozhovory a hovory už fungujú. Spracovanie príloh príde v budúcej verzii.", + "Enable Federation in Talk app" : "Povoliť združovanie v aplikácii Talk /Rozhovor/", + "Permissions" : "Oprávnenia", + "Allow users to be invited to federated conversations" : "Povoliť užívateľom pozývať na združené konverzácie", + "Allow users to invite federated users into conversation" : "Povoliť užívateľom pozývať federovaných užívateľov do konverzácií", + "Only allow to federate with trusted servers" : "Povoliť iba federácie s dôveryhodnými servermi", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Keď je vybratá aspoň jedna skupina, tak sa rozhovoru môžu zúčastniť len užívatelia z uvedených skupín.", + "Groups allowed to invite federated users" : "Skupiny oprávnené pozvať federovaných používateľov", + "Select groups …" : "Vybrať skupinu ...", + "All messages" : "Všetky správy", + "@-mentions only" : "Iba zmienky v tvare @-meno", + "Off" : "Vypnúť", + "General settings" : "Všeobecné nastavenia", + "Default notification settings" : "Predvolené nastavenia upozornení", + "Default group notification" : "Predvolené upozornenia pre skupinu", + "Default group notification for new groups" : "Predvolené upozornenia pre nové skupiny", + "Integration into other apps" : "Napojenie na iné aplikácie", + "Allow conversations on files" : "Povoliť konverzácie pri súboroch", + "Allow conversations on public shares for files" : "Povoliť konverzácie pri verejných zdieľaniach súborov", + "End-to-end encrypted calls" : "Koncové šifrovanie hovorov", + "Enable encryption" : "Povoliť šifrovanie", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Šifrované hovory typu end-to-end s nakonfigurovaným mostom SIP vyžadujú novšiu verziu vysokovýkonného backendu a mosta SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobilní klienti momentálne nepodporujú end-to-end šifrované hovory", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kliknutím na tlačidlo vyššie sa odošlú informácie z formulára na servery Struktur AG. Ďalšie informácie nájdete na stránke {linkstart}spreed.eu {linkend}.", + "Pending" : "Prebieha", + "Error" : "Chyba", + "Blocked" : "Zablokovaný", + "Active" : "Aktívne", + "Expired" : "Platnosť skončila", + "Never" : "Nikdy", + "The trial could not be requested. Please try again later." : "Nemožno požiadať o skúšobnú verziu. Skúste to neskôr prosím.", + "The account could not be deleted. Please try again later." : "Účet sa nepodarilo odstrániť. Skúste to neskôr prosím.", + "Hosted High-performance backend" : "Hosťovaný vysokovýkonný backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Náš partner Struktur AG poskytuje službu, kde je možné požiadať o hosťovaný signalizačný server. Na tento účel stačí vyplniť nasledujúci formulár a Nextcloud o to požiada. Po nastavení servera sa prihlasovacie údaje vyplnia automaticky. Týmto sa prepíšu existujúce nastavenia signalizačného servera.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ak váš účet pre backend s vysokým výkonom zahŕňa funkcie STUN a/alebo TURN, nastavenia budú aktualizované podľa toho.", + "URL of this Nextcloud instance" : "URL tejto inštancie Nextcloudu", + "Full name of the user requesting the trial" : "Úplné meno používateľa, ktorý žiada o skúšobnú verziu", + "Email of the user" : "E-mail užívateľa", + "Language" : "Jazyk", + "Country" : "Krajina", + "Request signaling server trial" : "Vyžiadať skúšobnú verziu signalizačného servera", + "You can see the current status of your hosted signaling server in the following table." : "Aktuálny stav hosťovaného signalizačného servera môžete vidieť v nasledujúcej tabuľke.", + "Status" : "Stav", + "Created at" : "Vytvorené:", + "Expires at" : "Platnosť končí", + "Limits" : "Limity", + "STUN included" : "STUN zahrnutý", + "Yes" : "Áno", + "No" : "Nie", + "TURN included" : "TURN zahrnutý", + "Delete the signaling server account" : "Odstrániť účet signalizačného servera", + "_%n user_::_%n users_" : ["%n používateľ","%n používatelia","%n používatelia","%n používateľov"], + "Installed version: {version}" : "Naištalovaná verzia: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Môžete si nainštalovať Matterbridge a prepojiť Nextcloud Talk /Rozhovor/ s niektorými ďalšími službami. Ďalšie podrobnosti nájdete na ich {linkstart1}stránke GitHub{linkend}. Stiahnutie a inštalácia aplikácie môže chvíľu trvať. V prípade, že uplynie časový limit, nainštalujte ho manuálne z {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Binárny súbor Matterbridge má nesprávne oprávnenia. Uistite sa, že binárny súbor Matterbridge patrí správnemu používateľovi a môže byť spustený. Nachádza sa v adresári \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Spustiteľný súbor Matterbridge nebol nájdený alebo nemohol byť spustený.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "V nastavení je možné ručne nastaviť cestu spustiteľného súboru Matterbridge. Podrobnosti nájdete v {linkstart}dokumentácii k napojeniu Matterbridge{linkend}.", + "Downloading …" : "Sťahujem …", + "Install Talk Matterbridge" : "Inštalovať Matterbridge pre Talk /Rozhovor/", + "An error occurred while installing the Matterbridge app" : "Pri pokuse o inštaláciu Matterbridge sa vyskytla chyba", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Pri pokuse o inštaláciu Talk /Rozhovor/ Matterbridge sa vyskytla chyba. Inštalujte ju ručne, prosím.", + "Failed to execute Matterbridge binary." : "Nepodarilo sa spustiť súbor Matterbridge.", + "Matterbridge integration" : "Napojenie na Matterbridge", + "Enable Matterbridge integration" : "Zapnúť napojenie na Matterbridge", + "Status: Checking connection" : "Stav: Kontrola pripojenia", + "OK: Running version: {version}" : "OK: Spustená verzia: {version}", + "Error: Server seems to be a Signaling server" : "Chyba: Server sa zdá byť signalizačným serverom", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Chyba: Systémové časy servera Nextcloud a servera pre nahrávací backend nie sú synchronizované. Uistite sa, že sú oba servery pripojené k časovému serveru alebo manuálne synchronizujte ich čas.", + "Recording backend URL" : "URL adresa backendu pre záznam", + "Validate SSL certificate" : "Overiť SSL certifikát", + "Delete this server" : "Zmazať server", + "Test this server" : "Vyskúšť tento server", + "Disabled for all calls" : "Zakázané pre všetky hovory", + "Enabled for all calls" : "Povolené pre všetky hovory", + "Configurable on conversation level by moderators" : "Konfigurovateľné na úrovni konverzácie moderátormi", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP nastavenia \"upload_max_filesize\" alebo \"post_max_size\" umožňujú nahrávať súbory iba do veľkosti {maxUpload}.", + "Recording backend settings saved" : "Nastavenia záznamového backendu boli uložené", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderátori budú môcť povoliť súhlas pre záznam na úrovni konverzácie. Súhlas, pre záznam, bude vyžadovaný pre každého účastníka pred pripojením sa k hovoru v tejto konverzácii.", + "The consent to be recorded will be required for each participant before joining every call." : "Súhlas so záznamom bude vyžadovaný od každého účastníka pred pripojením sa ku každému hovoru.", + "The consent to be recorded is not required." : "Súhlas so záznamom nie je potrebný.", + "Recording backend configuration is only possible with a High-performance backend." : "Konfigurácia backendu nahrávania je možná len s vysokovýkonným backendom.", + "Add a new recording backend server" : "Pridajte nový server pre záznamový backend", + "Shared secret" : "Shared secret", + "Recording consent" : "Súhlas so záznamom", + "Recording transcription" : "Prepis nahrávky", + "Automatically transcribe call recordings with a transcription provider" : "Automaticky prepisujte nahrávky hovorov pomocou poskytovateľa prepisov", + "Automatically summarize call recordings with transcription and summary providers" : "Automaticky zhrnúť nahrávky hovorov s poskytovateľmi prepisu a súhrnu", + "SIP configuration saved!" : "Nastavenie SIP bolo uložené!", + "SIP configuration is only possible with a High-performance backend." : "Konfigurácia SIP je možná len s vysokovýkonným backendom.", + "Enable SIP Dial-out option" : "Povoliť možnosť SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signálny server musí byť aktualizovaný, aby podporoval funkcie SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Nezobrazovať číslo volajúceho pri volaní cez SIP.", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymné číslo by malo byť zobrazené ako \"neznáme\" alebo \"zablokované číslo\" pre príjemcu hovoru", + "Dial-out number" : "Číslo na vytočenie", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Číslo v formáte E164 používané ako náhradné číslo volajúceho pre odchádzajúce hovory", + "Dial-out prefix" : "Predvoľba na vytočenie", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Predpona k nakonfigurovanému číslu používateľa pre odchádzajúce hovory (predvolené je `+`)", + "Restrict SIP configuration" : "Obmedziť nastavenie SIP", + "Enable SIP configuration" : "Zapnúť nastavenie SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Iba používatelia nasledujúcich skupín môžu povoliť SIP v konverzáciách, ktoré moderujú", + "Phone number (Country)" : "Telefónne číslo (Štát)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Tieto informácie sa odosielajú v pozývacích e-mailoch a tiež sa zobrazujú na bočnom paneli všetkým účastníkom.", + "Nextcloud base URL" : "Základná URL Nextcloud", + "Talk Backend URL" : "Backend URL aplikácie Talk", + "WebSocket URL" : "WebSocket URL", + "Available features" : "Dostupné funkcie", + "Error: Websocket connection failed" : "Chyba: Zlyhalo pripojenie cez Websocket", + "Error code" : "Chybový kód", + "Error message" : "Chybové hlásenie", + "Error: Websocket connection failed. Check browser console" : "Chyba: Pripojenie cez Websocket zlyhalo. Skontrolujte konzolu prehliadača", + "High-performance backend URL" : "URL vysoko výkonnej podpornej vrstvy", + "Missing High-performance backend warning hidden" : "Upozornenie na chýbajúci backend s vysokým výkonom je skryté", + "High-performance backend settings saved" : "Nastavenia vysokovýkonného backendu boli uložené", + "Nextcloud Talk setup not complete" : "Nastavenie Nextcloud Talk nie je kompletné", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Upozorňujeme, že pri hovoroch s viac ako 2 účastníkmi bez vysokovýkonného backendu sa u účastníkov s najväčšou pravdepodobnosťou vyskytnú problémy s pripojením a spôsobia vysoké zaťaženie zúčastnených zariadení.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Nainštalujte si vysokovýkonný backend, aby ste zabezpečili bezproblémové fungovanie hovorov s viacerými účastníkmi.", + "Nextcloud portal" : "Portál Nextcloud", + "Quick installation guide" : "Rýchla inštalačná príručka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Pre hovory a konverzácie s viacerými účastníkmi je potrebný vysokovýkonný backend. Bez backendu musia všetci účastníci nahrávať svoje vlastné video jednotlivo pre každého iného účastníka, čo s najväčšou pravdepodobnosťou spôsobí problémy s pripojením a vysoké zaťaženie zúčastnených zariadení.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Pri používaní Nextcloud Talk s vysokovýkonným backendom sa dôrazne odporúča nastaviť distribuovanú vyrovnávaciu pamäť.", + "Add High-performance backend server" : "Pridať vysoko výkonný backend server", + "Warn about connectivity issues in calls with more than 2 participants" : "Upozorniť na problémy s pripojením pri hovoroch s viac ako 2 účastníkmi", + "STUN server URL" : "URL STUN servera", + "The server address is invalid" : "Adresa servera je neplatná", + "STUN settings saved" : "Nastavenia STUN boli uložené", + "STUN servers" : "STUN server", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN server je používaný na zistenie verejnej IP adresy účastníkov za smerovačom.", + "Add a new STUN server" : "Pridať nový STUN server", + "{schema} scheme must be used with a domain" : "Schéma {schema} sa musí používať s doménou", + "{option1} and {option2}" : "{option1} a {option2}", + "{option} only" : "iba {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN server vrátil úspešných ICE kandidátov", + "Error: No working ICE candidates returned by the TURN server" : "Chyba: TURN server nevrátil žiadnych funkčných ICE kandidátov", + "Testing whether the TURN server returns ICE candidates" : "Zisťuje sa, či server TURN vracia ICE kandidátov", + "TURN server schemes" : "Popis TURN serveru", + "TURN server URL" : "URL TURN servera", + "TURN server secret" : "Kód pre TURN server", + "TURN server protocols" : "Protokoly servera TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN server slúži ako proxy pre prenos od účastníkov, ktorí sú za bránou firewall. Ak sa jednotliví účastníci nemôžu spojiť s ostatnými, najskor je potrebný TURN server. Pokyny na nastavenie nájdete v {linkstart}tejto dokumentácii{linkend}.", + "TURN settings saved" : "Nastavenia TURN boli uložené", + "TURN servers" : "TURN servery", + "Add a new TURN server" : "Pridať nový TURN server", + "Failed" : "Zlyhalo", + "OK" : "OK", + "Checking …" : "Kontrolujem ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Zlyhalo: WebAssembly je v tomto prehliadači zakázané alebo nie je podporované. Povoľte WebAssembly alebo použite prehliadač s podporou na vykonanie kontroly.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Zlyhalo: Webový server správne nevrátil súbory „.wasm“ a „.tflite“. Skontrolujte časť „Systémové požiadavky“ v dokumentácii Talk /Rozhovor/.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: Webový server správne vrátil súbory „.wasm“ a „.tflite“.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Zdá sa, že konfigurácia PHP a Apache nie je kompatibilná. Upozorňujeme, že PHP je možné použiť iba s modulom MPM_PREFORK a PHP-FPM je možné použiť iba s modulom MPM_EVENT.", + "Web server setup checks" : "Kontroly nastavenia webového servera", + "Files required for virtual background can be loaded" : "Súbory potrebné pre virtuálne pozadie môžu byť nahrané", + "Federated user" : "Združený užívateľ", + "Assign participants to rooms" : "Priraďte účastníkov do miestností", + "Configure breakout rooms" : "Nastaviť vyhradené miestnosti", + "Number of breakout rooms" : "Počet vyhradených miestností", + "You can create from 1 to 20 breakout rooms." : "Môžete vytvoriť od 1 do 20 odpočinkových miestností.", + "Assignment method" : "Spôsob rozdelenia do skupín", + "Automatically assign participants" : "Automaticky rozdeliť účastníkov", + "Manually assign participants" : "Manuálne rozdeliť účastníkov", + "Allow participants to choose" : "Dovoľte účastníkom vybrať si", + "Create rooms" : "Vytvoriť miestnosti", + "Confirm" : "Potvrdiť", + "Create breakout rooms" : "Vytvoriť vyhradené miestnosti", + "Reset" : "Resetovať", + "Delete breakout rooms" : "Odstrániť vyhradené miestnosti", + "Room {roomNumber}" : "Miestnosť {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuálne odpočinkové miestnosti a nastavenia sa stratia", + "Cancel" : "Zrušiť", + "Unassigned participants" : "Nepripradení účastníci", + "Back" : "Späť", + "Assign" : "Priradiť", + "Add participant \"{user}\"" : "Pridať účastníka \"{user}\"", + "Now" : "Teraz", + "Invalid calendar selected" : "Bol vybraný neplatný kalendár", + "Invalid start time selected" : "Bol vybraný neplatný čas začiatku", + "Invalid end time selected" : "Bol vybraný neplatný čas konca", + "Unknown error occurred" : "Nastala neznáma chyba", + "Sending no invitations" : "Neposielajú sa žiadne upozornenia", + "{participant0} will receive an invitation" : "{participant0} dostane pozvánku", + "{participant0} and {participant1} will receive invitations" : "{participant0} a {participant1} dostanú pozvánku", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania","{participant0}, {participant1} a %n ostatní dostanú pozvania"], + "Invite {user}" : "Pozvať {user}", + "Invite all users and emails in this conversation" : "Pozvite všetkých používateľov a e-maily v tejto konverzácii.", + "Meeting created" : "Stretnutie vytvorené", + "Upcoming meetings" : "Nadchádzajúce stretnutia", + "Loading …" : "Načítavam …", + "No upcoming meetings" : "Žiadne nadchádzajúce stretnutia", + "Schedule a meeting" : "Naplánovať stretnutie", + "Meeting title" : "Názov stretnutia", + "From" : "Od", + "To" : "Pre", + "Calendar" : "Kalendár", + "Attendees" : "Účastníci", + "No other participants to send invitations to." : "Nie sú žiadni ďalší účastníci, ktorým by bolo možné poslať pozvánky.", + "Add attendees" : "Pridať účastníkov", + "Save" : "Uložiť", + "Search participants" : "Vyhľadať účastníkov", + "No results" : "Žiadne výsledky", + "Done" : "Hotovo", + "Disable live transcription" : "Zakázať živý prepis", + "Enable live transcription (generated by AI)" : "Povoliť živý prepis (generovaný AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Povoliť živý prepis (Aplikácia Live transcriptions nie je nainštalovaná)", + "Disable live translation" : "Vypnúť živý preklad", + "Enable live translation (generated by AI)" : "Povoliť živý preklad (generovaný AI)", + "Original language" : "Pôvodný jazyk", + "Live translations app is not installed" : "Aplikácia pre živé preklady nie je nainštalovaná", + "Original language: {languageName}" : "Pôvodný jazyk: {languageName}", + "Translated language" : "Jazyk prekladu", + "Translated language: {languageName}" : "Jazyk prekladu: {languageName}", + "Raise hand" : "Zdvihnúť ruku", + "Raise hand (R)" : "Zdvihnúť ruku (R)", + "Lower hand" : "Dať ruku dole", + "Lower hand (R)" : "Dať ruku dole (R)", + "Exit full screen (F)" : "Ukončiť režim celej obrazovky (F)", + "Full screen (F)" : "Na celú obrazovku (F)", + "Speaker view" : "Zobrazenie rečníka", + "Grid view" : "Zobrazenie v mriežke", + "Error when trying to load the available live transcription languages" : "Chyba pri pokuse o načítanie dostupných jazykov pre živý prepis", + "Failed to enable live transcription" : "Nepodarilo sa povoliť živý prepis", + "Failed to enable live translations" : "Nepodarilo sa povoliť živé preklady", + "Failed to disable live translations" : "Nepodarilo sa vypnúť živé preklady", + "Recording consent is required" : "Vyžaduje sa súhlas so zaznamenávaním", + "This conversation is read-only" : "Táto konverzácia je iba na čítanie", + "Conversation not found or not joined" : "Konverzácia nebola nájdená alebo nebola pripojená", + "Lobby is still active and you're not a moderator" : "Čakáreň je stále aktívna a nie si moderátor.", + "Connection failed" : "Pripojenie zlyhalo", + "Reload" : "Znovu načítať", + "{nickName} raised their hand." : "{nickName} zdvihol ruku.", + "A participant raised their hand." : "Účastník zdvihol ruku.", + "Collapse stripe" : "Zbaliť pruh", + "Expand stripe" : "Rozbaliť pruh", + "Previous page of videos" : "Predchodzia stránka videí", + "Next page of videos" : "Ďalšia stránka videí", + "Connecting …" : "Pripájam sa...", + "Calling …" : "Volám ...", + "Waiting for {user} to join the call" : "Čaká sa, kým sa k rozhovoru pripojí {user}", + "Waiting for others to join the call …" : "Čaká sa na ostatných kým sa pripoja na hovor ...", + "You can invite others in the participant tab of the sidebar" : "Ostatných môžete pozvať v záložke účastníkov v bočnom paneli", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ostatných môžete pozvať v záložke účastníkov v bočnom paneli, alebo zdieľajte odkaz pre pozvanie iných.", + "Share this link to invite others!" : "Zdieľajte tento odkaz na pozvanie ostatných!", + "Copy link" : "Kopírovať odkaz", + "You are not allowed to enable audio" : "Nemáte oprávnenie povoliť zvuk", + "No audio. Click to select device" : "Žiadny zvuk. Kliknite pre výber zariadenia", + "Mute audio" : "Vypnúť zvuk", + "Mute audio (M)" : "Stlmiť zvuk (M)", + "Unmute audio" : "Obnoviť zvuk", + "Unmute audio (M)" : "Zapnúť zvuk (M)", + "None" : "Žiadne", + "Select a microphone" : "Vybrať mikrofón", + "Select a speaker" : "Vybrať reproduktor", + "Microphone settings" : "Nastavenia mikrofónu", + "Check devices" : "Skontrolovať zariadenia", + "Access to camera was denied" : "Prístup ku kamere bol zamietnutý", + "Error while accessing camera: It is likely in use by another program" : "Chyba pri prístupe ku kamere: pravdepodobne ju používa iný program", + "Error while accessing camera" : "Nastala chyba pri prístupe ku kamere", + "You have been muted by a moderator" : "Stlmil vás moderator", + "Hide presenter video" : "Skyť video moderátora", + "You are not allowed to enable video" : "Nemáte oprávnenie povoliť video", + "No video. Click to select device" : "Žiadne video. Kliknite pre výber zariadenia", + "Disable video" : "Zakázať video", + "Disable video (V)" : "Vypnúť video (V)", + "Enable video" : "Zapnúť video", + "Enable video (V)" : "Povoliť video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnúť video. Vaše pripojenie bude pri prvom zapnutí videa krátko prerušené", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Povoliť video (V) - Pri prvom povolení videa sa vaše pripojenie na chvíľu preruší", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Zapnúť video. Vaše pripojenie bude pri prvom zapnutí videa krátko prerušené", + "Select a video device" : "Vybrať video zariadenie", + "Show presenter" : "Zobraziť prezentujúceho", + "You" : "Vy", + "Mute" : "Stlmiť", + "Muted" : "Stlmené", + "Show screen" : "Ukázať obrazovku", + "Stop following" : "Prestať sledovať", + "Connection could not be established …" : "Nie je možné sa pripojiť ...", + "Connection was lost and could not be re-established …" : "Pripojenie sa prerušilo a nemôže byť obnovené ...", + "Connection could not be established. Trying again …" : "Nie je možné sa pripojiť. Skúšam znova ...", + "Connection lost. Trying to reconnect …" : "Pripojenie sa prerušilo. Skúšam sa pripojiť znova ...", + "Connection problems …" : "Problémy s pripojením ...", + "Collapse" : "Zvinúť", + "Expand" : "Rozbaliť", + "You need to be logged in to upload files" : "Pre nahrávenie súborov musíte byť prihlásený", + "Drop your files to upload" : "Pretiahnite sem súbory, ktoré chcete nahrať", + "Conversation messages" : "Správy konverzácie", + "Scroll to bottom" : "Posuňte sa nadol", + "Post message" : "Uverejniť správu", + "Federated conversation" : "Federovaný rozhovor", + "Public conversation" : "Verejný rozhovor", + "Favorite" : "Obľúbené", + "Banned users" : "Zakázaný užívatelia", + "Manage the list of banned users in this conversation." : "Spravovať zoznam zakázaných uživateľov v tejto konverzácii.", + "Manage bans" : "Spravovať zákazy", + "No banned users" : "Žiadny zakázaný uživatelia", + "Banned by:" : "Zakazané od:", + "Date:" : "Dátum:", + "Note:" : "Poznámka:", + "Hide details" : "Skryť podrobnosti", + "Show details" : "Zobraziť podrobnosti", + "Unban" : "Zrušiť zákaz", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Môžete zmeniť názov a popis v {linkstart} Kalendári ↗ {linkend}.", + "Error while updating conversation name" : "Chyba pri aktualizácii názvu konverzácie", + "Error while updating conversation description" : "Chyba pri úprave popisu konverzácie", + "Enter a name for this conversation" : "Zadajte názov pre túto konverzáciu", + "Edit conversation name" : "Upraviť názov konverzácie", + "Edit conversation description" : "Upraviť popis konverzácie", + "Enter a description for this conversation" : "Vložte popis tejto konverzácie", + "Picture" : "Obrázok", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Nasledujúce boty môžu byť povolené v tejto konverzácii. Obráťte sa na svoju administráciu, aby ste získali ďalšie boty nainštalované na tomto serveri.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Žiadne roboty nie sú nainštalované na tomto serveri. Obráťte sa na svoju administráciu, aby ste získali zoznam robotov na tomto serveri.", + "Disable" : "Zakázať", + "Enable" : "Povoliť", + "The bot is not available anymore" : "Bot už nie je k dispozícii", + "Breakout rooms" : "Vyhradené miestnosti", + "Manage breakout rooms" : "Spravovať vyhradené miestnosti", + "Set up breakout rooms for this conversation" : "Nastaviť vyhradené miestnosti pre túto konverzáciu", + "Please select a valid PNG or JPG file" : "Prosím vyberte platný PNG alebo JPG súbor", + "Choose your conversation picture" : "Vyberte obrázok konverzácie", + "Choose" : "Vybrať", + "Error setting conversation picture" : "Chyba pri nastavovaní obrázka konverzácie", + "Could not set the conversation picture: {error}" : "Nepodarilo sa nastaviť obrázok konverzácie: {error}", + "Error cropping conversation picture" : "Chyba pri orezávaní obrázka konverzácie", + "Error removing conversation picture" : "Chyba pri odstraňovaní obrázka konverzácie", + "Set emoji as conversation picture" : "Nastavte emotikon ako obrázok konverzácie", + "Set background color for conversation picture" : "Nastavte farbu pozadia pre obrázok konverzácie", + "Upload conversation picture" : "Nahrať obrázok konverzácie", + "Choose conversation picture from files" : "Vyberte obrázok konverzácie zo súborov", + "Remove conversation picture" : "Odstrániť obrázok konverzácie", + "The file must be a PNG or JPG" : "Súbor musí byť vo formáte PNG alebo JPG", + "Set picture" : "Nastaviť obrázok", + "Default permissions modified for {conversationName}" : "Predvolené oprávnenia pre {conversationName} boli upravené", + "Could not modify default permissions for {conversationName}" : "Nie je možné upraviť oprávnenia pre {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Upravte predvolené práva pre účastníkov tejto konverzácie. Tieto nastavenia neovplyvňujú moderátorov.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Zakaždým, keď sa v tejto sekcii upravia oprávnenia, vlastné oprávnenia, ktoré boli predtým pridelené jednotlivým účastníkom, sa stratia.", + "All permissions" : "Všetky oprávnenia", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Účastníci majú oprávnenia začať hovor, pripojiť sa k hovoru, povoliť zvuk, video a zdieľanie obrazovky.", + "Restricted" : "Obmedzené", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Účastníci sa môžu pripojiť k hovorom, ale nemôžu povoliť zvuk, video alebo zdieľanie obrazovky, kým im moderátor manuálne neudelí oprávnenia.", + "Advanced permissions" : "Rozšírené oprávnenia", + "Edit permissions" : "Upraviť oprávnenia", + "Conversation settings" : "Nastavenia konverzácie", + "Basic Info" : "Základné informácie", + "Personal" : "Osobné", + "Moderation" : "Moderovanie", + "Setup overview" : "Prehľad nastavenia", + "Live transcription" : "Živý prepis", + "Live transcriptions app is not installed" : "Aplikácia pre živé prepisy nie je nainštalovaná", + "Enable live transcription" : "Povoliť živý prepis", + "Breakout Rooms" : "Vyhradené miestnosti", + "Matterbridge" : "Matterbridge", + "Bots" : "Boty", + "Danger zone" : "Nebezpečná oblasť", + "Archive conversation" : "Archivovať konverzáciu", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Archivované konverzácie sú predvolene skryté v zozname konverzácií. Stále sa však zobrazia, keď vyhľadáte názov konverzácie alebo pristupujete k zoznamu archivovaných konverzácií.", + "Do you really want to leave \"{displayName}\"?" : "Naozaj chcete opustiť \"{displayName}\"?", + "You can archive this conversation instead." : "Môžete túto konverzáciu namiesto toho archivovať.", + "Leave conversation" : "Opustiť konverzáciu", + "You need to promote a new moderator before you can leave the conversation" : "Skôr než budete môcť opustiť rozhovor, je potrebné niekomu odovzdať rolu moderátora.", + "Delete conversation" : "Odstrániť konverzáciu", + "Do you really want to delete \"{displayName}\"?" : "Naozaj chcete odstrániť „{displayName}“?", + "Error while deleting conversation" : "Chyba pri vymazávaní konverzácie", + "Delete all chat messages" : "Vymazať všetky správy v rozhovore", + "Do you really want to delete all messages in \"{displayName}\"?" : "Naozaj chcete odstrániť všetky správy v priečinku „{displayName}“?", + "Error while clearing chat history" : "Chyba pri čistení histórie rozhovoru", + "Be careful, these actions cannot be undone." : "Buďte obozretný, táto akcia sa nedá vrátiť späť.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Keď je konverzácia opustená, na opätovné zapojenie do uzavretej konverzácie je potrebné pozvánka. K otvorenej konverzácii sa môžete pripojiť kedykoľvek.", + "Permanently delete this conversation." : "Natrvalo odstrániť túto konverzáciu.", + "Delete chat messages" : "Vymazať správy z rozhovoru", + "Permanently delete all the messages in this conversation." : "Natrvalo odstrániť všetky správy v tejto konverzácii.", + "_%n hour_::_%n hours_" : ["%n hodina","%n hodiny","%n hodín","%n hodiny"], + "_%n day_::_%n days_" : ["%n deň","%n dni","%n dní","%n dni"], + "_%n week_::_%n weeks_" : ["%n týždeň","%n týždne","%n týždňov","%n týždne"], + "Custom expiration time" : "Vlastný čas vypršania platnosti správy", + "Message expiration disabled" : "Vypršanie platnosti správy je vypnuté", + "Message expiration set: {duration}" : "Vypršanie platnosti správy nastavené na: {duration}", + "Error when trying to set message expiration" : "Chyba pri pokuse o nastavenie uplynutia platnosti správy", + "Message expiration" : "Vypršanie platnosti správy", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Platnosť četových správ môže po určitom čase vypršať. Poznámka: Súbory zdieľané v chate sa vlastníkovi neodstránia, ale už sa nebudú zdieľať v konverzácii.", + "Set message expiration" : "Nastaviť platnosť správ", + "Current message expiration" : "Súčasná expirácia správ", + "Password copied to clipboard" : "Heslo bolo skopírované do schránky", + "Password could not be copied" : "Heslo sa nepodarilo skopírovať.", + "Guest access" : "Prístup pre hostí", + "Breakout rooms are not allowed in public conversations." : "Oddelené miestnosti nie sú povolené v verejných rozhovoroch.", + "Allow guests to join this conversation via link" : "Umožniť hosťom pripojiť sa k rozhovoru prostredníctvom odkazu", + "Password protection" : "Ochrana heslom", + "This conversation is password-protected. Guests need password to join" : "Táto konverzácia je chránená heslom. Hostia potrebujú heslo na pripojenie.", + "Password protection is needed for public conversations" : "Ochrana heslom je potrebná pre verejné konverzácie.", + "Set a password" : "Nastavte si heslo", + "Change password" : "Zmeniť heslo", + "Enter new password" : "Zadať nové heslo", + "Save password" : "Uložiť heslo", + "Copy password" : "Kopírovať heslo", + "Guests are allowed to join this conversation via link" : "Hostia majú povolené pripojiť sa k tejto konverzácii cez odkaz", + "Guests are not allowed to join this conversation" : "Hostia nemajú povolené pridať sa k tejto konverzácii", + "Resend invitations" : "Znovy odslať pozvánky", + "This conversation is open to both registered users and users created with the Guests app" : "Táto konverzácia je otvorená pre registrovaných užívateľov aj pre užívateľov vytvorených pomocou aplikácie Guests.", + "This conversation is open to registered users" : "Táto konverzácia je otvorená pre registrovaných užívateľov", + "This conversation is limited to the current participants" : "Táto konverzácia je obmedzená na súčasných účastníkov", + "You opened the conversation to both registered users and users created with the Guests app" : "Otvorili ste konverzáciu pre registrovaných užívateľov a užívateľov vytvorených pomocou aplikácie Guests", + "Error occurred when opening or limiting the conversation" : "Pri otváraní alebo obmedzovaní konverzácie nastala chyba", + "Open conversation to registered users, showing it in search results" : "Otvoriť konverzáciu pre registrovaných užívateľov a zobraziť ju vo výsledkoch vyhľadávania", + "Also open to users created with the Guests app" : "Taktiež otvorené pre užívateľov vytvorených pomocou aplikácie Guests", + "Open conversation" : "Otvoriť konverzáciu", + "Set language spoken in calls" : "Nastaviť jazyk používaný počas hovorov", + "Languages could not be loaded" : "Jazyky sa nedali načítať", + "Loading languages …" : "Načítavanie jazykov …", + "Invalid language" : "Neplatný jazyk", + "Default language (English)" : "Predvolený jazyk (angličtina)", + "Default live transcription language set" : "Predvolený jazyk živého prepisu nastavený", + "Live transcription language set: {languageName}" : "Jazyk živého prepisu nastavený na: {languageName}", + "Error when trying to set live transcription language" : "Chyba pri pokuse o nastavenie jazyka živého prepisu", + "Start time: {date}" : "Čas začiatku: {date}", + "Start time has been updated" : "Čas začiatku bol zmenený", + "Error occurred while updating start time" : "Pri nastavovaní času začiatku sa vyskytla chyba", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Zapnutie čakárne odstráni nemoderátorov z prebiehajúceho hovoru.", + "Enable lobby, restricting the conversation to moderators" : "Povoliť čakáreň, obmedziť konverzáciu iba na moderátorov", + "Meeting start time" : "Čas začatia schôdzky", + "Start time (optional)" : "Čas začiatku (voliteľné)", + "Import email participants" : "Importovať účastníkov e-mailu", + "You can import a list of email participants from a CSV file." : "Môžete importovať zoznam účastníkov e-mailu zo súboru CSV.", + "Poll drafts" : "Návrhy ankiet", + "Browse poll drafts" : "Prehľadávať návrhy ankiet", + "Error occurred when locking the conversation" : "Pri zamykaní konverzácie nastala chyba", + "Error occurred when unlocking the conversation" : "Pri odomykaní konverzácie nastala chyba", + "Lock conversation" : "Zamknúť konverzáciu", + "This will also terminate the ongoing call." : "Týmto sa ukončí aj prebiehajúci hovor.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Uzamknite konverzáciu, aby ste zabránili komukoľvek uverejňovať správy alebo začínať hovory", + "Edit" : "Upraviť", + "More information" : "Viac informácií", + "Delete" : "Zmazať", + "Add new bridged channel to current conversation" : "Pridajte do aktuálnej konverzácie nový premosťovací kanál", + "unknown state" : "neznámy stav", + "running" : "spustené", + "not running, check Matterbridge log" : "nebeží, skontrolujte Matterbridge log", + "not running" : "nespustené", + "Bridge saved" : "Premostenie uložené", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Pomocou Matterbridge môžete premosťovať kanály z rôznych systémov okamžitých správ.", + "More info on Matterbridge" : "Viac informácií o Matterbridge", + "Messaging systems" : "Systémy posielania správ", + "Enable bridge" : "Povoliť most", + "Show Matterbridge log" : "Zobraziť záznam udalostí Matterbridge", + "Log content" : "Obsah logov", + "Only moderators are allowed to mention @all" : "Iba moderátori smú spomínať @all", + "All participants are allowed to mention @all" : "Všetkým účastníkom je povolené spomenúť @all.", + "Participants are now allowed to mention @all." : "Účastníci môžu teraz spomínať @all.", + "Mentioning @all has been limited to moderators." : "Zmienka o @all bola obmedzená na moderátorov.", + "Allow participants to mention @all" : "Dovoliť účastníkom spomenúť @all (všetkých)", + "Mention permissions" : "Oprávnenia pre zmienku", + "Notifications" : "Upozornenia", + "Notify about calls in this conversation" : "Upozorniť na hovory v tejto konverzácii", + "Important conversation" : "Dôležitá konverzácia", + "\"Do not disturb\" user status is ignored for important conversations" : "Stav používateľa „Nerušiť“ sa pri dôležitých konverzáciách ignoruje.", + "Sensitive conversation" : "Citlivá konverzácia", + "Message preview will be disabled in conversation list and notifications" : "Ukážka správy bude v zozname konverzácií a v upozorneniach vypnutá", + "Recording consent is required for calls in this conversation" : "Súhlas so záznamom je potrebný pre hovory v tejto konverzácii", + "Recording consent is not required for calls in this conversation" : "Súhlas so záznamom nie je potrebný pre hovory v tejto konverzácii", + "Recording consent requirement was updated" : "Požiadavka o súhlas so záznamom bola aktualizovaná.", + "Error occurred while updating recording consent" : "Pri aktualizácii súhlasu so záznamom sa vyskytla chyba", + "Recording Consent" : "Súhlas so záznamom", + "Recording consent cannot be changed once a call or breakout session has started." : "Súhlas s nahrávaním nemôže byť zmenený, akonáhle sa začne hovor alebo odpočinková relácia.", + "Require recording consent before joining call in this conversation" : "Vyžadovať súhlas so záznamom pred pripojením hovoru v tejto konverzácii", + "Recording consent is required for all calls" : "Súhlas so záznamom je potrebný pre všetky hovory", + "SIP dial-in is now possible without PIN requirement" : "SIP telefonické pripojenie je teraz možné bez požiadavky na PIN", + "SIP dial-in is now enabled" : "SIP prijatie hovoru je teraz zapnuté", + "SIP dial-in is now disabled" : "SIP prijatie hovoru je teraz vypnuté", + "Error occurred when enabling SIP dial-in" : "Nastala chyba pri povoľovaní prijatia hovoru cez SIP", + "Error occurred when disabling SIP dial-in" : "Nastala chyba pri vypínaní prijatia hovoru cez SIP", + "Phone and SIP dial-in" : "Vytáčanie telefónom a SIP ", + "Enable phone and SIP dial-in" : "Povoliť vytáčanie telefónom a SIP ", + "Allow to dial-in without a PIN" : "Povoliť vytáčanie bez pin-u", + "Ongoing" : "Prebieha", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n osoba prijala","%n ľudí prijalo","%n ľudí prijalo","%n ľudí prijalo"], + "_%n person declined_::_%n people declined_" : ["%n osoba odmietla","%n ľudí odmietlo","%n ľudí odmietlo","%n ľudia odmietli"], + "_and %n other attachment_::_and %n other attachments_" : ["a %n iná príloha","a %n iných príloh","a %n iných príloh","a %n iných príloh"], + "With {displayName}" : "S {displayName}", + "In {conversation}" : "V {conversation}", + "View attachment" : "Zobraziť prílohu", + "Join" : "Pripojiť", + "View conversation" : "Zobraziť konverzáciu", + "View event on Calendar" : "Zobraziť udalosť v kalendári", + "Error while creating the conversation" : "Pri vytváraní konverzácie sa vyskytla chyba", + "Hello, {displayName}" : "Ahoj, {displayName}", + "Start meeting now" : "Začať stretnutie teraz", + "Give your meeting a title" : "Dajte svojej schôdzke názov", + "Create and copy link" : "Vytvoriť a skopírovať odkaz", + "Create a new conversation" : "Vytvoriť novú konverzáciu", + "Join open conversations" : "Pripojiť sa k prebiehajúcim konverzáciam", + "Call a phone number" : "Zavolať na telefónne číslo", + "Scroll backward" : "Prejsť späť", + "Scroll forward" : "Posunúť dopredu", + "Schedule meetings" : "Plánovať stretnutia", + "You don't have any upcoming meetings" : "Nemáte žiadne nadchádzajúce stretnutia", + "Open calendar" : "Otvoriť kalendár", + "Unread mentions" : "Neprečítané upozornenia", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Správy, v ktorých ste boli spomenutí, sa tu zobrazia. Ľudí môžete spomenúť tak, že napíšete @ nasledované ich menom.", + "Upcoming reminders" : "Nadchádzajúce pripomienky", + "Message reminders" : "Pripomienky správ", + "Set a reminder on a message to be notified" : "Pre upozornenie nastavte pripomienku na správu", + "Start a group conversation" : "Začnite skupinovú konverzáciu", + "Create conversation" : "Vytvoriť konverzáciu", + "Enter your name" : "Zadajte svoje meno", + "Submit name and join" : "Odoslať meno a pripojiť sa", + "Do you already have an account?" : "Už máte účeť?", + "Log in" : "Prihlásiť sa", + "Error while verifying uploaded file" : "Chyba pri overovaní nahraného súboru", + "Uploaded file is verified" : "Nahraný súbor je overený", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Formát obsahu je hodnoty oddelené čiarkami (CSV):
- Hlavičkový riadok je povinný a musí zodpovedať \"meno\",\"email\" alebo len \"email\"
- Jeden záznam na riadok (napr. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Účastníci boli úspešne pridaní", + "Error while adding participants" : "Chyba pri pridávaní účastníkov", + "Import a file" : "Importovať súbor", + "Browse" : "Prechádzať", + "Verifying uploaded file …" : "Overovanie nahraného súboru ...", + "This might take a moment" : "Toto môže chvíľu trvať.", + "Send invitations" : "Odoslať pozvánky", + "_%n invalid email_::_%n invalid emails_" : ["%n neplatný email","%n neplatné emaily","%n neplatných emailov","%n neplatných emailov"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-mail je už importovaný alebo je duplikát","%n e-mailov sú už importované alebo sú duplikáty","%n e-mailov sú už importované alebo sú duplikáty","%n e-maily sú už importované alebo sú duplikáty"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n pozvánka môže byť odoslaná","%n pozvánky môžu byť odoslané","%n pozvánok môže byť odoslaných","%n pozvánok môže byť odoslaných"], + "An error occurred while calling a phone number" : "Pri volaní na telefónne číslo sa vyskytla chyba", + "Phone number could not be called: {error}" : "Telefónne číslo sa nedalo zavolať: {error}", + "Phone number could not be called" : "Telefónne číslo sa nedalo zavolať", + "Search participants or phone numbers" : "Hľadať účastníkov alebo telefónne čísla", + "Creating the conversation …" : "Vytváram konverzáciu ...", + "Mark as read" : "Označiť ako prečítané", + "Mark as unread" : "Označiť ako neprečítané", + "Remove from favorites" : "Odstrániť z obľúbených", + "Add to favorites" : "Pridať do obľúbených", + "Unarchive conversation" : "Zrušiť archiváciu konverzácie", + "Ignore \"Do not disturb\"" : "Ignorovať \"Nevyrušovať\"", + "You need to promote a new moderator before you can leave the conversation." : "Skôr než budete môcť opustiť rozhovor, je potrebné niekomu odovzdať rolu moderátora.", + "Conversation actions" : "Akcie konverzácie", + "Notify about calls" : "Upozorniť na hovory", + "Hide message text" : "Skryť text správy", + "Pending invitations" : "Čakajúce pozvánky", + "Join conversations from other servers" : "Pripojte sa k rozhovorom z iných serverov", + "From {user} at {remoteServer}" : "Od {user} na {remoteServer}", + "Decline invitation" : "Odmietnuť pozvánku", + "Accept invitation" : "Prijať pozvánku", + "No pending invitations" : "Žiadne čakajúce pozvánky", + "Home" : "Domov", + "Unread" : "Neprečítané", + "Mentions" : "Zmienky", + "Meetings" : "Stretnutia", + "Sort conversations" : "Zoradiť konverzácie", + "By recent activity" : "Podľa nedávnej aktivity", + "Alphabetically" : "Abecedne", + "Do not group by type" : "Nezoskupovať podľa typu", + "Show private ones first" : "Najprv zobraz súkromné položky", + "Show group ones first" : "Zobraziť najprv skupiny", + "No followed threads" : "Žiadne sledované vlákna", + "No matches found" : "Nebola nájdená žiadna zhoda", + "No conversations found" : "Neboli nájdené žiadne konverzácie", + "You have no archived conversations." : "Nemáte žiadne archivované konverzácie", + "Subscribe to an existing thread or start your own." : "Prihláste sa do existujúceho vlákna alebo začnite svoje vlastné.", + "You have no unread mentions." : "Nemáte žiadne neprečítané upozornenia.", + "You have no unread messages." : "Nemáte žiadne neprečítané správy.", + "An error occurred while performing the search" : "Pri vyhľadávaní sa vyskytla chyba", + "Conversation list" : "Zoznam konverzácií", + "Filter conversations by" : "Filtrovať konverzácie podľa", + "Unread messages" : "Neprečítané správy", + "Meeting conversations" : "Konverzácie na stretnutiach", + "Clear filters" : "Vyčistiť filtre", + "New personal note" : "Nová osobná poznámka", + "SIP backend is not installed" : "Backend SIP nie je nainštalovaný", + "Back to conversations" : "Naspäť do konverzácií", + "Archived conversations" : "Archivovať konverzácie", + "Threads" : "Vlákna", + "Clear filter" : "Vyčistiť filter", + "Show more threads" : "Zobraziť viac vlákien", + "App settings" : "Nastavenia Aplikácie", + "Users" : "Používatelia", + "Groups" : "Skupiny", + "Teams" : "Tímy", + "Federated users" : "Združený užívateľ", + "New private conversation" : "Nová súkromná konverzácia", + "Other sources" : "Iné zdroje", + "Open conversations" : "Otvoriť konverzácie", + "No search results" : "Žiadne výsledky vyhľadávania", + "Users, groups and teams" : "Užívatelia, skupiny a tímy", + "Users and groups" : "Používatelia a skupiny", + "Users and teams" : "Užívatelia a tímy", + "Groups and teams" : "Skupiny a tímy", + "New group conversation" : "Nová skupinová konverzácia", + "The meeting will start soon" : "Rozhovor začne čoskoro", + "This meeting is scheduled for {startTime}" : "Tento rozhovor je naplánovaný na {startTime}", + "You are currently waiting in the lobby" : "Momentálne ste v čakárni", + "Enable noise suppression" : "Povoliť potlačenie šumu", + "Reduce background noises for better voice quality" : "Znížiť šum v pozadí pre lepšiu kvalitu hlasu", + "Enable echo cancellation" : "Povoliť zrušenie ozveny", + "Minimize echo effect from own surrounding" : "Minimalizovať efekt ozveny z vlastného okolia", + "Enable auto gain control" : "Povoliť automatické ovládanie zosilnenia", + "Dynamically adjust microphone volume for consistent level" : "Dynamické upravovanie hlasitosti mikrofónu pre konzistentnú úroveň", + "Select microphone" : "Vyberte mikrofón", + "No microphone available" : "Mikrofón nie je k dispozícii", + "Select speaker" : "Vybrať reproduktor", + "No speaker available" : "Reproduktor nie je k dispozícii", + "Select camera" : "Vyberte kameru", + "No camera available" : "Kamera nie je k dispozícii", + "Select a device" : "Vyberte zariadenie", + "Playing …" : "Prehrávam ...", + "Test speakers" : "Test reproduktorov", + "Test" : "Vyskúšať", + "Devices" : "Zariadenia", + "Backgrounds" : "Pozadia", + "No audio" : "Žiadny zvuk", + "No camera" : "Žiadna kamera", + "Display video as you will see it (mirrored)" : "Zobraziť video ako ho uvidíte vy (zrkadlenie)", + "Display video as others will see it" : "Zobraziť video ako ho uvidia ostatný", + "Calls are not supported in your browser" : "Váš prehliadač nepodporuje hovory", + "Access to microphone is only possible with HTTPS" : "Prístup k mikrofónu je možný iba pomocou protokolu HTTPS", + "Access to microphone was denied" : "Prístup k mikrofónu bol zamietnutý", + "Error while accessing microphone" : "Nastala chyba pri prístupe k mikrofónu", + "Access to camera is only possible with HTTPS" : "Prístup ku kamere je možný iba pomocou protokolu HTTPS", + "The call is being recorded." : "Hovor sa nahráva.", + "The call might be recorded." : "Hovor môže byť zaznamenaný.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Záznam by mohol obsahovať váš hlas, video z kamery a zdieľanú obrazovku. Pred pripojením k hovoru je potrebný váš súhlas.", + "Give consent to the recording of this call" : "Dajte súhlas na nahrávanie tohto hovoru", + "Show more info" : "Zobraziť viac informácií", + "Audio is not available" : "Zvuk nie je k dispozícii.", + "Video is not available" : "Video nie je k dispozícii", + "Start recording immediately with the call" : "Po začatí hovoru spustiť hneď nahrávanie", + "Recording backend is not installed" : "Prostredie pre nahrávanie nie je nainštalované", + "Notify all participants about this call" : "Poslať všetkým účastníkom upozornenie na tento hovor", + "Apply settings" : "Použiť nastavenia", + "Select virtual office background" : "Vybrať pozadie virtuálna kancelária", + "Select virtual home background" : "Vybrať pozadie virtuálny domov", + "Select virtual abstract background" : "Vybrať virtuálne abstraktné pozadie", + "Select virtual beach background" : "Vybrať pozadie virtuálna pláž", + "Select virtual park background" : "Vybrať pozadie virtuálny park", + "Select virtual theater background" : "Vybrať pozadie virtuálne divadlo", + "Select virtual library background" : "Vybrať pozadie virtuálna knižnica", + "Select virtual space station background" : "Vybrať pozadie virtuálna vesmírna stanica", + "Error while uploading the file" : "Chyba pri nahrávaní súboru", + "Select a file" : "Vybrať súbor", + "Invalid path selected" : "Bola vybraná neplatná cesta", + "Select virtual background from file {fileName}" : "Vybrať virtuálne pozadie zo súboru {fileName}", + "Blur" : "Rozmazať", + "Upload" : "Nahrať", + "Files" : "Súbory", + "(editing)" : "(upravuje)", + "(edited)" : "(editované)", + "The message has expired or has been deleted" : "Správe vypršala platnoť alebo bola zmazaná", + "Cancel quote" : "Zrušiť citáciu", + "24 hours" : "24 hodín", + "7 days" : "7 dní", + "30 days" : "30 dní", + "Until unpin" : "Až do odopnutia", + "Clear reminder – {timeLocale}" : "Zrušiť pripomienku – {timeLocale}", + "Edited by {actor}" : "Upravené od {actor}", + "Pinned by you" : "Pripnuté Vami", + "Pinned by {actor}" : "Pripnuté od{actor}", + "Until {absoluteDate}" : "Do {absoluteDate}", + "Message text copied to clipboard" : "Text správy bol skopírovaný do schránky", + "Message text could not be copied" : "Text správy sa nepodarilo skopírovať", + "Message forwarded to \"Note to self\"" : "Správa preposlaná do \"Poznámky pre seba\"", + "Error while forwarding message to \"Note to self\"" : "Chyba pri preposielaní správy do \"Poznámky pre seba\"", + "A reminder was successfully removed" : "Pripomienka bola úspešne odstránená", + "Error occurred when removing a reminder" : " Pri odstraňovaní pripomienky sa vyskytla chyba", + "A reminder was successfully set at {datetime}" : "Pripomienka bola úspešne nastavená na {datetime}", + "Error occurred when creating a reminder" : "Pri vytváraní pripomienky sa vyskytla chyba", + "Add a reaction to this message" : "Reagovať na túto správu", + "Reply" : "Odpovedať", + "More actions" : "Viac akcií", + "Set reminder" : "Nastaviť pripomienku", + "Pin message" : "Pripnúť správu", + "Unpin message" : "Odopnúť správu", + "Reply privately" : "Odpovedať súkromne", + "Edit message" : "Upraviť správu", + "Copy message" : "Kopírovať správu", + "Copy message link" : "Kopírovať odkaz správy", + "Go to file" : "Prejsť na súbor", + "Download file" : "Stiahnuť súbor", + "Go to thread" : "Prejsť na vlákno", + "Edit thread details" : "Upraviť detaily vlákna", + "Forward message" : "Preposlať správu", + "Translate" : "Preložiť", + "Set custom reminder" : "Nastaviť vlastnú pripomienku", + "Keep pinned for" : "Zachovať pripnuté pre", + "Set custom period" : "Nastaviť vlastné obdobie", + "Close reactions menu" : "Zatvoriť ponuku reakcií", + "React with {emoji}" : "Reagovať s {emoji}", + "React with another emoji" : "Reagovať s inou emotikonou.", + "Choose a conversation to forward the selected message." : "Vyberte konverzáciu, ktorou chcete vybranú správu poslať ďalej.", + "Error while forwarding message" : "Chyba počas preposielania správy", + "The message has been forwarded to {selectedConversationName}" : "Správa bola preposlaná na adresu {selectedConversationName}", + "Dismiss" : "Zatvoriť", + "Go to conversation" : "Prejisť na konverzáciu", + "Detect language" : "Zistiť jazyk", + "The message could not be translated" : "Správa sa nedala preložiť", + "Translation copied to clipboard" : "Preklad skopírovaný do schránky", + "Translation could not be copied" : "Preklad sa nepodarilo skopírovať", + "Translate message" : "Preložiť správu", + "Source language to translate from" : "Zdrojový jazyk pre preklad", + "Translate from" : "Preložiť z", + "Target language to translate into" : "Cieľový jazyk prekladu", + "Translate to" : "Preložiť do", + "Translating" : "Prekladanie", + "This translation is AI generated and may contain mistakes." : "Táto preklad je generovaný pomocou AI a môže obsahovať chyby.", + "Copy translated text" : "Kopírovať preložený text", + "Error when scheduling the message" : "Chyba pri plánovaní správy", + "Reschedule" : "Preplánovať", + "Send now" : "Odoslať teraz", + "Choose a time" : "Vyberte čas", + "Send at custom time" : "Odoslať v upravenom čase", + "Will be sent without notification" : "Bude odoslané bez upozornenia.", + "Message read by everyone who shares their reading status" : "Správa prečítaná každým, kto zdieľa svoj stav", + "Message sent" : "Správa bola odoslaná", + "Sent without notification" : "Odoslať bez upozornenia", + "Deleting message" : "Mažem správu", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Správa bola úspešne odstránená, ale bot alebo Matterbridge sú nakonfigurované a správa už môže byť distribuovaná do iných služieb", + "Message deleted successfully" : "Správa úspešne vymazaná.", + "Message could not be deleted because it is too old" : "Správa nemôže byť vymazaná pretože je príliš stará", + "Only normal chat messages can be deleted" : "Odstrániť sa dajú iba bežné správy z četu", + "An error occurred while deleting the message" : "Pri vymazávaní správy sa vyskytla chyba", + "Pinned" : "Pripnuté", + "Your browser does not support playing audio files" : "Váš prehliadač nepodporuje prehrávanie zvukových súborov", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Karta aplikácie Deck", + "Remove {fileName}" : "Dostrániť {fileName}", + "Open this location in OpenStreetMap" : "Otvoriť toto umiestnenie v Openstreetmap", + "_%n reply_::_%n replies_" : ["%n odpoveď","%n odpovede","%n odpovedí","%n odpovedí"], + "Sending message" : "Odosielam správu", + "Failed to send the message. Click to try again" : "Nepodarilo sa odoslať správu. Kliknite pre opakovanie", + "Not enough free space to upload file" : "Nie je voľné miesto pre nahranie súboru", + "You cannot send messages to this conversation at the moment" : "Teraz nemôžete poslať správu do tejto konverzácie", + "Could not update the message" : "Nepodarilo sa aktualizovať správu", + "Reply to thread \"{threadTitle}\"" : "Odpovedať na vlákno \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Hlasovali ste • %n hla","Hlasovali ste • %n hlasov","Hlasovali ste • %n hlasov","Hlasovali ste • %n hlasy"], + "You voted" : "Hlasovali ste", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Kliknite pre hlasovanie • %n hlas","Kliknite pre hlasovanie • %n hlasov","Kliknite pre hlasovanie • %n hlasov","Kliknite pre hlasovanie • %n hlasy"], + "Click to vote" : "Kliknite pre hlasovanie", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Koncept ankety • %n voľba","Koncept ankety • %n voľby","Koncept ankety • %n volieb","Koncept ankety • %n volieb"], + "_%n vote_::_%n votes_" : ["%n hlas","%n hlasy","%n hlasov","%n hlasov"], + "Edit poll draft" : "Upraviť koncept ankety", + "Delete poll draft" : "Zmazať koncept ankety", + "Open poll" : "Otvoriť anketu", + "Closed poll" : "Uzavretá anketa", + "See results" : "Zobraziť výsledky", + "Reactions" : "Reakcie", + "No permission to post reactions in this conversation" : "Nemáte oprávnenie na uverejňovanie reakcií v tomto rozhovore", + "and {participant}" : "a {participant}", + "_and %n other participant_::_and %n other participants_" : ["a %n ďalší účastník","a %n ďalší účastníci","a %n ďalších účastníkov","a %n ďalších účastníkov"], + "Show all reactions" : "Zobraziť všetky reakcie", + "Add more reactions" : "Pridať viac reakcií", + "Show or collapse system messages" : "Zobraziť alebo skryť systémové správy", + "No messages" : "Žiadne správy", + "All messages have expired or have been deleted." : "Všetkým správam vypršala platnosť alebo boli zmazané.", + "Generate summary with AI" : "Vygenerovať zhrnutie pomocou AI", + "{author} (pinned by you)" : "{author} (pripnuté Vami)", + "{author} (pinned by {actor})" : "{author} (pripnuté od{actor})", + "Unpin" : "Odopnúť", + "Cancel search" : "Zrušiť vyhľadávanie", + "Add a phone number" : "Pridať telefónne číslo", + "Error: A password is required to create the conversation." : "Chyba: Na vytvorenie konverzácie je potrebné zadať heslo.", + "All set, the conversation \"{conversationName}\" was created." : "Všetko je pripravené, konverzácia \"{conversationName}\" bola vytvorená.", + "Create a new group conversation" : "Vytvoriť novú skupinovú konverzáciu", + "Add participants" : "Pridať účastníkov", + "Maximum length exceeded ({maxlength} characters)" : "Prekročená maximálna dĺžka ({maxlength} znakov)", + "Conversation type" : "Typ konverzácie", + "Conversation visibility" : "Viditeľnosť konverzácie", + "Allow guests to join via link" : "Umožniť hosťom pripojiť sa prostredníctvom odkazu", + "Enter password" : "Zadajte heslo", + "This conversation has been locked" : "Rozhovor bol zamknutý", + "No permission to post messages in this conversation" : "Nemáte povolenie na uverejňovanie správ v tomto rozhovore", + "Joining conversation …" : "Pripájam sa ku konverzácii ...", + "Write a message without notification" : "Napíšte správu bez upozornenia", + "Create a thread silently" : "Vytvorte vlákno potichu", + "Create a thread" : "Vytvoriť vlákno", + "Send message silently" : "Odoslať správu potichu", + "Send message" : "Odoslať správu", + "Send without notification" : "Poslať bez upozornenia", + "The participant will not be notified about new messages" : "Účastník nebude upozornený na nové správy", + "Participants will not be notified about new messages" : "Účastníci nebudú upozornený na nové správy", + "Message will be sent {datetimeString}" : "Správa bude odoslaná {datetimeString}", + "Thread title is required" : "Názov vlákna je povinný", + "Message text is required" : "Text správy je povinný", + "The message could not be edited" : "Správu sa nepodarilo upraviť", + "File to share" : "Súbor na zdieľanie", + "File upload is not available in this conversation" : "Nahrávanie súboru nie je v tejto konverzácii dostupné", + "Message was successfully scheduled" : "Správa bola úspešne naplánovaná", + "Add emoji" : "Pridať emotikonu", + "Adding a mention will only notify users who did not read the message." : "Pridanie pripomienky upozorní len užívateľov, ktorí správu nečítali.", + "Thread title" : "Názov vlákna", + "Send later" : "Odoslať neskôr", + "Show scheduled messages" : "Zobraziť naplánované správy", + "Cancel editing" : "Zrušiť úpravy", + "Schedule message" : "Naplánovať správu", + "{user} is out of office and might not respond." : "{user} je mimo kancelárie a pravdepodobne nebude odpovedať.", + "Absence period: {startDate} - {endDate}" : "Obdobie absencie: {startDate} - {endDate}", + "Replacement:" : "Náhrada:", + "Share from {nextcloud}" : "Zdieľané z {nextcloud}u", + "Share from Files" : "Zdieľať zo Súborov", + "Share files to the conversation" : "Zdieľať súbory v konverzácii", + "Upload from device" : "Nahrať zo zariadenia", + "Create new poll" : "Vytvoriť novú anketu", + "Smart picker" : "Inteligentný výber", + "Record voice message" : "Nahrať hlasovú správu", + "End recording and send" : "Zastaviť nahrávanie a odoslať", + "Dismiss recording" : "Zrušiť nahrávanie", + "Access to the microphone was denied" : "Prístup k mikrofónu bol zamietnutý", + "Microphone either not available or disabled in settings" : "Mikrofón buď nie je k dispozícii, alebo je v nastaveniach zakázaný", + "Error while recording audio" : "Chyba pri nahrávaní zvuku", + "Voice message {time} ({conversation})" : "Hlasová správa {time} ({conversation})", + "Generating summary of unread messages …" : "Generovanie súhrnu neprečítaných správ …", + "Summary is AI generated and might contain mistakes" : "Zhrnutie je generované pomocou AI a môže obsahovať chyby.", + "Error occurred during a summary generation" : "Došlo k chybe počas generovania súhrnu.", + "New file" : "Nový súbor", + "Blank" : "Prázdne", + "Error while creating file" : "Chyba pri vytváraní súboru", + "Create and share a new file" : "Vytvoriť a zdieľať nový súbor", + "Name of the new file" : "Názov nového súboru", + "Create file" : "Vytvoriť súbor", + "Someone is typing …" : "Niekto píše ...", + "{user1} is typing …" : "{user1} píše ...", + "{user1} and {user2} are typing …" : "{user1} a {user2} píšu ...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} a {user3} píšu ...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} a %n ďalší píše ...","{user1}, {user2}, {user3} a %n ďalších píše ...","{user1}, {user2}, {user3} a %n ďalších píše ...","{user1}, {user2}, {user3} a %n ďalších píše ..."], + "Add more files" : "Pridať viac súborov", + "Send" : "Odoslať", + "In this conversation {user} can:" : "V tomto rozhovore {user} môže:", + "Edit default permissions for participants in {conversationName}" : "Upraviť predvolené oprávnenia pre účastníkov v {conversationName}", + "Start a call" : "Začať hovor", + "Skip the lobby" : "Preskočiť čakáreň", + "Can post messages" : "Môže posielať správy", + "Can post messages and reactions" : "Môže pridať správu a reagovať", + "Can add reactions" : "Môže pridať reakcie", + "Enable the microphone" : "Povoliť mikrofón", + "Enable the camera" : "Povoliť kameru", + "Share the screen" : "Zdieľať obrazovku", + "Update permissions" : "Aktualizovať oprávnenia", + "Updating permissions" : "Aktualizujem oprávnenia", + "No poll drafts" : "Žiadne návrhy ankiet", + "There is no poll drafts yet saved for this conversation" : "Pre túto konverzáciu ešte neboli uložené žiadne návrhy ankiet.", + "Create poll in {name}" : "Vytvoriť anketu v {name}", + "Create poll" : "Vytvoriť anketu", + "Error while importing poll" : "Chyba pri importe ankety", + "Question" : "Otázka", + "Ask a question" : "Opýtať sa otázku", + "Import draft from file" : "Importovať koncept zo súboru", + "Answers" : "Odpovede", + "Answer {option}" : "Odpoveď {option}", + "Delete poll option" : "Odstrániť voľbu z ankety", + "Add answer" : "Pridať odpoveď", + "Settings" : "Nastavenia", + "Anonymous poll" : "Anonymná anketa", + "Multiple answers" : "Viac odpovedí", + "Save as draft" : "Uložiť ako koncept", + "Export draft to file" : "Exportovať koncept do súboru", + "_Final results • %n vote_::_Final results • %n votes_" : ["Konečné výsledky • %n hlas","Konečné výsledky • %n hlasov","Konečné výsledky • %n hlasov","Konečné výsledky • %n hlasy"], + "Your vote is anonymous" : "Váš hlas je anonymný", + "You voted for this option" : "Hlasovali ste pre túto možnosť", + "End poll" : "Ukončiť anketu", + "Change your vote" : "Zmeniť hlasovanie", + "Withdraw vote" : "Stiahnuť hlas", + "Results" : "Výsledky", + "Voted participants" : "Hlasujúci účastníci", + "Send a message to \"{roomName}\"" : "Poslať správu do \"{roomName}\"", + "Hide list of participants" : "Skryť zoznam účastníkov", + "Show list of participants" : "Zobraziť zoznam účastníkov", + "Assistance requested in {roomName}" : "Pomoc požadovaná v {roomName}", + "The message was sent to \"{roomName}\"" : "Správa bola odoslaná do \"{roomName}\"", + "Dismiss request for assistance" : "Zamietnuť žiadosť o pomoc", + "Send message to room" : "Poslať správu do miestnosti", + "Back to main room" : "Späť do hlavnej miestnosti", + "Back to your room" : "Späť do vlastnej miestnosti", + "Message all rooms" : "Správa všetkým miestnostiam", + "Start session" : "Začať reláciu", + "Start a call before you start a breakout room session" : "Začať hovor predtým, než začnete sedenie v miestnosti", + "Stop session" : "Zastaviť reláciu", + "The message was sent to all breakout rooms" : "Správa bola odoslaná do všetkých miestností.", + "Send a message to all breakout rooms" : "Poslať správu do všetkých miestností", + "Breakout rooms are not started" : "Vyhradené miestnosti neboli otvorené", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Hovory bez vysokovýkonného backendu môžu spôsobiť problémy s konektivitou a vysoké zaťaženie zariadení. {linkstart} Zistite viac {linkend}", + "Talk setup incomplete" : "Nastavenie Talk neúplné", + "Disable lobby" : "Vypnúť čakáreň", + "Settings for participant \"{user}\"" : "Nastavenia účastníka \"{user}\"", + "Participant \"{user}\"" : "Účastník \"{user}\"", + "moderator" : "moderátor", + "bot" : "bot", + "guest" : "hosť", + "Ringing …" : "Zvoní ...", + "Call rejected" : "Hovor odmietnutý", + "{time} talking …" : "hovorí {time} ...", + "{time} talking time" : "{time} čas hovoru", + "Raised their hand" : "Zdvihli ruky", + "Joined with video" : "Pripojené s videom", + "Joined via phone" : "Pripojené cez telefón", + "Joined with audio" : "Pripojené so zvukom", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Popis musí byť menší alebo rovný {maxLength} znakov. Váš aktuálny text má {charactersCount} znakov.", + "Remove group and members" : "Odobrať skupinu a členov", + "Remove team and members" : "Odstrániť tím a členov", + "Remove participant" : "Odstrániť účastníka", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Naozaj chcete odstrániť skupinu \"{displayName}\" a jej členov z tejto konverzácie?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Naozaj chcete odstrániť tím \"{displayName}\" a jeho členov z tejto konverzácie?", + "Do you really want to remove {displayName} from this conversation?" : "Naozaj chcete odstrániť {displayName} z tejto konverzácie?", + "Notification was sent to {displayName}" : "Pozvánka odoslaná pre {displayName}", + "Could not send notification to {displayName}" : "Nemôžem odoslať pozvánku pre {displayName}", + "Permissions granted to {displayName}" : "Oprávnenia udelené pre {displayName}", + "Could not modify permissions for {displayName}" : "Nie je možné upraviť oprávnenia pre {displayName}", + "Permissions removed for {displayName}" : "Oprávnenia pre {displayName} boli odstránené", + "Permissions set to default for {displayName}" : "Oprávnenia pre {displayName} boli nastavené na predvolené", + "Phone number could not be hung up" : "Telefónne číslo sa nedalo zavolať", + "Phone number could not be put on hold" : "Hovor nebolo možné podržať", + "Phone number could not be muted" : "Hovor nebolo možné stíšiť", + "Phone number could not be unmuted" : "Nebolo možné zrušiť stíšenie pre hovor", + "DTMF message could not be sent" : "Správu DTMF sa nepodarilo odoslať", + "Phone number copied to clipboard" : "Telefónne číslo bolo skopírované do schránky", + "Phone number could not be copied" : "Telefónne číslo sa nemôže byť skopírované", + "in the lobby" : "v hale", + "Dial out phone" : "Vytočiť telefónne číslo", + "Hang up phone" : "Zdvihnúť telefón", + "Move back to lobby" : "Vrátiť sa do lobby", + "Move to conversation" : "Presunúť do konverzácie", + "Dial-in PIN" : "PIN pre príchodzie hovory", + "Demote from moderator" : "Odobrať moderovanie", + "Promote to moderator" : "Povýšiť na moderátora", + "Resend invitation" : "Znovu odoslať pozvánku", + "Send call notification" : "Odoslať upozornenie na hovor", + "Dial out phone number" : "Vytočiť telefónne číslo", + "Resume call for phone number" : "Obnoviť hovor pre telefónne číslo", + "Put phone number on hold" : "Podržať hovor", + "Unmute phone number" : "Zrušiť stlmenie telefónneho čísla", + "Mute phone number" : "Stlmiť telefónne číslo", + "Copy phone number" : "Kopírovať telefónne číslo", + "Reset custom permissions" : "Obnoviť vlastné oprávnenia", + "Grant all permissions" : "Udeliť všetky oprávnenia", + "Remove all permissions" : "Odstrániť všetky oprávnenia", + "Also ban from this conversation" : "Tiež zakázať prístup k tejto konverzácii", + "Internal note (reason to ban)" : "Interná poznámka (dôvod zákazu)", + "Remove" : "Odobrať", + "Permissions modified for {displayName}" : "Oprávnenia pre {displayName} boli upravené", + "Add users, groups or teams" : "Pridať užívateľov, skupiny alebo tímy", + "Add users or groups" : "Pridať používateľov alebo skupiny", + "Add users or teams" : "Pridajte užívateľov alebo tímy", + "Add users" : "Pridať používateľov", + "Add groups or teams" : "Pridať skupiny alebo tímy", + "Add groups" : "Pridať skupiny", + "Add teams" : "Pridať tímy", + "Add other sources" : "Pridať iné zdroje", + "Add emails" : "Pridať e-maily", + "Integrations" : "Integrácie", + "Add federated users" : "Pridajte združených používateľov", + "Searching …" : "Hľadá sa …", + "Search for more users" : "Vyhľadajte ďalších používateľov", + "You can search or add participants via name, email, or Federated Cloud ID" : "Môžete vyhľadávať alebo pridávať účastníkov podľa mena, e-mailu alebo Federovaného cloudového ID.", + "Search or add participants" : "Vyhľadať alebo pridať účastníkov", + "Invitation was sent to {actorId}" : "Pozvánka odoslaná pre {actorId}", + "An error occurred while adding the participants" : "Pri pridávaní účastníkov sa vyskytla chyba", + "A new group conversation with selected participant will be created" : "Bude vytvorený nový skupinový rozhovor so zvoleným účastníkom", + "Participants" : "Účastníci", + "Pinned by a deleted user" : "Pripnuté používateľom, ktorý bol odstránený", + "Participants ({count})" : "({count}) účastníkov", + "Open chat" : "Otvoriť rozhovor", + "You have new unread messages in the chat." : "Máte novú neprečítanú správu v rozhovore.", + "You have been mentioned in the chat." : "Boli ste spomenutý v rozhovore.", + "Search messages" : "Vyhľadať správy", + "Chat" : "Správy", + "Details" : "Podrobnosti", + "Shared items" : "Zdieľané položky", + "Search in {name}" : "Vyhľadať v {name}", + "Threads in {name}" : "Vlákien v {name}", + "{actor} in {conversation}" : "{actor} v {conversation}", + "Search messages …" : "Vyhľadať správy ...", + "Search options" : "Možnosti vyhľadávania", + "From User" : "Od Užívateľa", + "Since" : "Do", + "Until" : "Do", + "No results found" : "Neboli nájdené žiadne výsledky", + "Load more results" : "Načítať viac výsledkov", + "Recent threads" : "Nedávne vlákna", + "Projects" : "Projekty", + "No shared items" : "Žiadne zdieľané položky", + "Thread notifications" : "Upozornenia na vlákna", + "Thread actions" : "Akcie vlákna", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Odkaz na konverzáciu", + "No open conversations found" : "Neboli nájdené žiadne prebiehajúce konverzácie", + "Either there are no open conversations or you joined all of them." : "Buď aktuálne neprebiehajú žiadne konverzácie alebo sa už všetkých účastníte.", + "Check spelling or use complete words." : "Skontrovať pravopis alebo použiť celé slová.", + "Search conversations or users" : "Vyhľadajte konverzácie alebo používateľov", + "Select conversation" : "Vybrať konveráciu", + "Number length is not valid" : "Dĺžka čísla nie je platná", + "Region code is not valid" : "Kód predvoľby nie je platný", + "Number length is too short" : "Dĺžka čísla je príliš krátka", + "Number length is too long" : "Číslo je príliš dlhé", + "Number is not valid" : "Číslo nie je platné", + "Phone numbers" : "Telefónne čísla", + "Display name: {name}" : "Zobrazované meno: {name}", + "Edit display name" : "Upraviť zobrazované meno", + "Display name (required)" : "Zobrazované meno (povinné)", + "Save name" : "Uložiť meno", + "I picked message bubbles" : "Vybral/a som si správy v bublinách", + "I picked the list style" : "Vybral som štýl zoznamu", + "Error while setting personal setting" : "Chyba pri nastavovaní osobného nastavenia", + "Error while saving sounds setting" : "Chyba pri ukladaní nastavenia zvuku", + "Compact conversations list" : "Zoznam kompaktných rozhovorov", + "Chat appearance" : "Vzhľad chatu", + "Messages list" : "Zoznam správ", + "Message bubbles" : "Bubliny správ", + "Play sounds when participants join or leave a call" : "Prehrávať zvuky, keď sa účastníci pripoja alebo odchádzajú z hovoru", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Momentálne nie je k dispozícii na iPhone a iPade z dôvodu technických obmedzení výrobcu.", + "Notification settings" : "Nastavenie notifikácií", + "Sounds for chat and call notifications" : "Zvuky pre upozornenia na chat a hovory", + "Invalid language ({languageId})" : "Neplatný jazyk ({languageId})", + "Default language" : "Predvolený jazyk", + "Default language ({languageName})" : "Predvolený jazyk ({languageName})", + "Error when trying to load the available live translation languages" : "Chyba pri pokuse o načítanie dostupných jazykov živého prekladu", + "Error when trying to set live translation language" : "Chyba pri pokuse o nastavenie jazyka živého prekladu", + "Set language used to show the transcriptions" : "Nastaviť jazyk, ktorý sa použije na zobrazenie prepisov", + "Select location for attachments" : "Vyberte umiestnenie príloh", + "Error while setting attachment folder" : "Pri nastavovaní priečinka pre prílohy sa vyskytla chyba", + "Error while setting read status privacy" : "Chyba pri nastavovaní oznámenia o prečítaní", + "Error while setting typing status privacy" : "Chyba pri nastavovaní súkromného stavu písania", + "Error while setting default media state" : "Chyba pri nastavovaní predvoleného stavu médií", + "Turn camera and microphone off by default" : "Vypnúť kameru a mikrofón predvolene", + "Blur camera background by default" : "Rozmazať pozadie kamery predvolene", + "Skip device preview before joining a call" : "Preskočiť náhľad zariadenia pred pripojením k hovoru", + "Appearance & Sounds" : "Vzhľad a Zvuky", + "Privacy" : "Súkromie", + "Send read receipts" : "Odoslať potvrdenia o prečítaní", + "When off, all read statuses will be hidden" : "Keď je vypnuté, všetky stavy čítania budú skryté.", + "Share typing status" : "Zdieľať stav písania", + "When off, all typing indicators will be hidden" : "Keď je vypnuté, všetky indikátory písania budú skryté.", + "Attachments folder" : "Priečinok s prílohami", + "Toggle full screen" : "Prepnúť režim celej obrazovky", + "Return to Home screen" : "Návrat na domovskú obrazovku", + "Search" : "Hľadať", + "Shortcuts while in a chat" : "Skratky počas chatu", + "Focus the chat input" : "Zamerať na písanie v čete", + "Unfocus the chat input to use shortcuts" : "Aby ste mohli používať klávesové skratky, je treba zrušiť zameranie na písanie v čete", + "Edit your last message" : "Upraviť vašu poslednú správu", + "Shortcuts while in a call" : "Klávesové skratky počas hovoru", + "Camera on and off" : "Zapnúť a vypnúť video", + "Microphone on and off" : "Zapnúť a vypnúť mikrofón", + "Raise or lower hand" : "Zdvihnúť alebo dať dole ruku", + "Push to talk or push to mute" : "Stlačte a hovorte alebo stlačte pre stlmenie", + "Zoom-in / zoom-out a screen share" : "Priblíženie / oddialenie zdieľania obrazovky", + "Mouse wheel" : "Kolečko myši", + "Start call silently" : "Začat hovor potichu", + "Start call" : "Začať hovor", + "End call" : "Ukončiť hovor", + "The server was updated, you cannot start or join a call." : "Server bol aktualizovaný, nemôžete začať ani sa pripojiť k hovoru.", + "This call has just ended" : "Hovor práve skončil", + "You will be able to join the call only after a moderator starts it." : "K hovoru sa budete môcť pripojiť až potom, keď ho moderátor začne.", + "End call for everyone" : "Ukončiť hovor pre všetkých", + "Starting the recording" : "Začínam nahrávanie", + "Recording" : "Záznam", + "The call has been running for one hour." : "Hovor už trvá viac ako jednu hodinu.", + "Cancel recording start" : "Zrušiť začiatok nahrávania", + "Stop recording" : "Zastaviť nahrávanie", + "Send a reaction" : "Poslať reakciu", + "React with {reaction}" : "Reagovať s {reaction}", + "All tasks done!" : "Všetky úlohy boli splnené!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} z %n úlohy","{done} z %n úloh","{done} z %n úloh","{done} z %n úloh"], + "Add participants to this call" : "Pridať účastníkov do tohto hovoru", + "_%n participant in call_::_%n participants in call_" : ["%n účastník v hovore","%n účastníci v hovore","%n účastníkov v hovore","%n účastníkov v hovore"], + "Scheduled messages" : "Plánované správy", + "You are not allowed to enable screensharing" : "Nemáte oprávnenie k zdieľaniu obrazovky", + "No screensharing" : "Žiadne zdieľanie obrazovky", + "Screensharing options" : "Nastavenia zdieľania obrazovky", + "Enable screensharing" : "Povoliť zdieľanie obrazovky", + "Bad sent video and screen quality." : "Zlá kvalita odoslaného videa a rozlíšenia.", + "Bad sent screen quality." : "Zlá kvalita odoslaného rozlíšenia.", + "Bad sent video quality." : "Zlá kvalita odoslaného videa.", + "Bad sent audio, video and screen quality." : "Zlá kvalita odoslaného zvuku, videa a rozlíšenia.", + "Bad sent audio and screen quality." : "Zlá kvalita odoslaného zvuku a rozlíšenia.", + "Bad sent audio and video quality." : "Zlá kvalita odoslaného zvuku a videa.", + "Bad sent audio quality." : "Zlá kvalita odoslaného zvuku.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci nemusia vidieť vašu obrazovku. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video počas zdieľania obrazovky.", + "Disable background blur" : "Vypnúť rozmazanie pozadia", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste počas zdieľania obrazovky zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci nemusia vidieť vašu obrazovku.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video počas zdieľania obrazovky.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vás vidieť. Ak chcete situáciu zlepšiť, skúste počas zdieľania obrazovky zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vidieť vašu obrazovku. Ak chcete situáciu zlepšiť, skúste zakázať zdieľanie obrazovky.", + "Disable screenshare" : "Zakázať zdieľanie obrazovky", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás nemusia vidieť. Ak chcete situáciu zlepšiť, skúste zakázať rozmazávanie pozadia alebo zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vám nemusia rozumieť a/alebo vás vidieť. Ak chcete situáciu zlepšiť, skúste počas zakázať video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Vaše internetové pripojenie alebo počítač sú zaneprázdnené a ostatní účastníci vás možno nebudú rozumieť.", + "Screen sharing is not supported by your browser." : "Váš prehliadač nepodporuje zdieľanie obrazovky.", + "Screen sharing requires the page to be loaded through HTTPS." : "Zdieľanie obrazovky vyžaduje načítanie stránka cez HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Zdieľanie obrazovky vyžaduje, aby bola stánka načítaná cez protokol HTTPS.", + "An error occurred while starting screensharing." : "Pri pokuse o zdieľanie obrazovky nastala chyba.", + "Select virtual background" : "Vybrať virtuálne pozadie", + "Show your screen" : "Ukázať Vašu obrazovku", + "Stop screensharing" : "Zastaviť zdieľanie obrazovky", + "Mute others" : "Stlmiť ostatných", + "Start recording" : "Spustiť nahrávanie", + "Set up breakout rooms" : "Nastaviť vyhradené miestnosti", + "Download attendance list" : "Stiahnuť zoznam účastníkov", + "Open Calendar" : "Otvoriť Kalendár", + "Remove participant {name}" : "Odobrať účastníka {name}", + "Would you like to delete this conversation?" : "Chceli by ste túto konverzáciu vymazať?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Táto konverzácia bude automaticky odstránená pre všetkých po %n dni nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti.","Táto konverzácia bude automaticky odstránená pre všetkých po %n dňoch nečinnosti."], + "Are you sure you want to delete this conversation?" : "Ste si istí, že chcete túto konverzáciu vymazať?", + "Delete now" : "Odstrániť teraz", + "Keep" : "Ponechať", + "Open dialpad" : "Otvoriť číselník", + "Select a region" : "Vyberte oblasť", + "Local time: {time}" : "Miestny čas: {time}", + "Scheduled {datetime}" : "Naplánované {datetime}", + "Scheduled for {datetime}" : "Naplánované na {datetime}", + "Search …" : "Hľadať …", + "Message without mention" : "Správa bez zmienky", + "Mention myself" : "Spomenúť seba", + "Mention everyone" : "Spomenúť všetkých", + "Select a conversation" : "Vybrať rozhovor", + "Select a mode" : "Vybrať režim", + "You do not have permissions to access this conversation." : "Nemáte povolenie na prístup k tejto konverzácii.", + "Join a different conversation or start a new one." : "Pridajte sa k inej konverzácii alebo začnite novú.", + "The conversation does not exist" : "Konverzácia neexistuje", + "Join a conversation or start a new one!" : "Pripojte sa k rozhovoru alebo začnite nový!", + "Duplicate session" : "Zduplikovať sedenie", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Táto konverzácia bola otvorená v inom paneli. Súčasná verzia servera nepodporuje otváranie konverzácie vo viacerých paneloch.", + "Creating and joining a conversation with \"{userid}\"" : "Vytváranie konverzácie s užívateľom „{userid}“ a pripojenie sa k nej", + "Join a conversation or start a new one" : "Pripojte sa k rozhovoru alebo začnite nový", + "Error while joining the conversation" : "Chyba pri pripájaní sa ku konverzácii", + "Another user" : "Iný používateľ", + "Hey! Are you using the list style or message bubbles?" : "Ahoj! Používaš štýl zoznamu alebo bubliny správ?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Používateľ Nextcloud", + "User password" : "Heslo používateľa", + "Talk conversation" : "Konverzácia v Talk /Rozhovore/", + "Skip TLS verification" : "Preskočiť overovanie TLS", + "Matrix server URL" : "URL Matrix servera", + "User" : "Používateľ", + "Matrix channel" : "Matrix kanál", + "Mattermost server URL" : "URL Mattermost servera", + "Mattermost user" : "Používateľ Mattermost", + "Team name" : "Názov tímu", + "Channel name" : "Názov kanálu", + "Rocket.Chat server URL" : "URL Rocket.Chat servera", + "User name or email address" : "Užívateľské meno alebo e-mailová adresa", + "Rocket.Chat channel" : "Rocket.Chat kanál", + "Zulip server URL" : "URL Zulip servera", + "Bot user name" : "Používateľské meno bota", + "Bot API key" : "Kľúč k API pre bota", + "Zulip channel" : "Zulip kanál", + "API token" : "API token", + "Slack channel" : "Slack kanál", + "Server ID or name" : "Identifikátor alebo názov servera", + "Channel ID (prefixed with \"ID:\") or name" : "ID kanála (s predponou \"ID:\") alebo názov", + "Channel" : "Kanál", + "Login" : "Prihlásiť sa", + "Chat ID" : "Identifikátor četu", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC servera (napr. chat.freenode.net:6667)", + "Nickname" : "Prezývka", + "Connection password" : "Heslo pripojenia", + "IRC channel" : "IRC kanál", + "Channel password" : "Heslo pre kanál", + "NickServ nickname" : "Prezývka na NickServ", + "NickServ password" : "Heslo pre NickServ", + "Use TLS" : "Použiť TLS", + "Use SASL" : "Použiť SASL", + "Tenant ID" : "Identifikátor Tenant", + "Client ID" : "Client ID", + "Team ID" : "Identifikátor tímu", + "Thread ID" : "Identifikátor vlákna", + "XMPP/Jabber server URL" : "URL XMPP/Jabber servera", + "MUC server URL" : "URL MUC servera", + "Jabber ID" : "Identifikátor Jabber", + "Pinned messages" : "Pripnuté správy", + "Media" : "Média", + "Polls" : "Ankety", + "Deck cards" : "Karty aplikácie Deck", + "Voice messages" : "Hlasové správy", + "Locations" : "Umiestnenie", + "Call recordings" : "Zoznam nahraných hovorov", + "Audio" : "Zvuk", + "Show all pinned messages" : "Zobraziť všetky pripnuté správy", + "Show all media" : "Zobraziť všetky médiá", + "Show all files" : "Zobraziť všetky súbory", + "Show all polls" : "Zobraziť všetky ankety", + "Show all deck cards" : "Zobraziť všetky karty deck", + "Show all voice messages" : "Zobraziť všetky hlasové správy", + "Show all locations" : "Zobraziť všetky umiestnenia", + "Show all call recordings" : "Zobraziť všetky nahrávky hovorov", + "Show all audio" : "Zobraziť všetku hudbu", + "Show all other" : "Zobraziť všetko ostatné", + "Follow conversation settings" : "Sledovať nastavenia konverzácie", + "Group" : "Skupina", + "Team" : "Tím", + "You reconnected to the call" : "Opäť ste sa pripojili k hovoru", + "{actor} reconnected to the call" : "{actor} sa opäť pripojil k hovoru", + "You added {user0} and {user1}" : "Pridali ste {user0} a {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Pridali ste účastníkov {user0}, {user1} a ďalšieho %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n","Pridali ste účastníkov {user0}, {user1} a ďalších %n"], + "An administrator added you and {user0}" : "Správca pridal vás a {user0}", + "{actor} added you and {user0}" : "{actor} pridal/a vás a {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Administrátor pridal vás, užívateľa {user0} a %n ďalšieho účastníka","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor pridal vás, užívateľa {user0} a %n ďalších účastníkov"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} pridal vás, užívateľa {user0} a %n ďalšieho účastníka","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov","{actor} pridal vás, užívateľa {user0} a %n ďalších účastníkov"], + "An administrator added {user0} and {user1}" : "Administrátor pridal {user0} a {user1}", + "{actor} added {user0} and {user1}" : "{actor} pridal {user0} a {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Administrátor pridal {user0}, {user1} a %n ďalšieho účastníka","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov","Administrátor pridal {user0}, {user1} a %n ďalších účastníkov"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} pridal {user0}, {user1} a %n ďalšieho účastníka","{actor} pridal {user0}, {user1} a %n ďalších účastníkov","{actor} pridal {user0}, {user1} a %n ďalších účastníkov","{actor} pridal {user0}, {user1} a %n ďalších účastníkov"], + "You removed {user0} and {user1}" : "Odstránili ste {user0} a {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Odstránili ste {user0}, {user1} a %n účastníka","Odstránili ste {user0}, {user1} a %n účastníkov","Odstránili ste {user0}, {user1} a %n účastníkov","Odstránili ste {user0}, {user1} a %n účastníkov"], + "An administrator removed you and {user0}" : "Administrátor odstránil vás a {user0}", + "{actor} removed you and {user0}" : "{actor} odstránil vás a {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Administrátor odstránil vás, užívateľa {user0} a %n ďalšieho účastníka","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov","Administrátor odstránil vás, užívateľa {user0} a %n ďalších účastníkov"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} odstránil vás, {user0} a %n ďalšieho účastníka","{actor} odstránil vás, {user0} a %n ďalších účastníkov","{actor} odstránil vás, {user0} a %n ďalších účastníkov","{actor} odstránil vás, {user0} a %n ďalších účastníkov"], + "An administrator removed {user0} and {user1}" : "Administrátor odstránil {user0} a {user1}", + "{actor} removed {user0} and {user1}" : "{actor} odstránil {user0} a {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Administrátor odstránil {user0}, {user1} a %n ďalšieho účastníka","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov","Administrátor odstránil {user0}, {user1} a %n ďalších účastníkov"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} odstránil {user0}, {user1} a %n ďalšieho účastníka","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov","{actor} odstránil {user0}, {user1} a %n ďalších účastníkov"], + "You and {user0} joined the call" : "Vy a {user0} ste sa pridali k hovoru", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Vy, {user0} a %n účastník sa pridali k hovoru","Vy, {user0} a %n účastníci sa pridali k hovoru","Vy, {user0} a %n účastníkov sa pridali k hovoru","Vy, {user0} a %n účastníkov sa pridali k hovoru"], + "{user0} and {user1} joined the call" : "{user0} a {user1} sa pridali k hovoru", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} a %n účastník sa pridali k hovoru","{user0}, {user1} a %n účastníci sa pridali k hovoru","{user0}, {user1} a %n účastníkov sa pridali k hovoru","{user0}, {user1} a %n účastníkov sa pridali k hovoru"], + "You and {user0} left the call" : "Vy a {user0} opustili hovor", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Vy, {user0} a %n účastník opustili hovor","Vy, {user0} a %n účastníci opustili hovor","Vy, {user0} a %n účastníkov opustilo hovor","Vy, {user0} a %n účastníkov opustilo hovor"], + "{user0} and {user1} left the call" : "{user0} a {user1} opustili hovor", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} a %n účastník opustili hovor","{user0}, {user1} a %n účastníci opustili hovor","{user0}, {user1} a %n účastníkov opustilo hovor","{user0}, {user1} a %n účastníkov opustilo hovor"], + "You promoted {user0} and {user1} to moderators" : "Povýšili ste {user0} a {user1} na moderátorov", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Povýšili ste {user0}, {user1} a %n účastníka na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov","Povýšili ste {user0}, {user1} a %n účastníkov na moderátorov"], + "An administrator promoted you and {user0} to moderators" : "Administrátor povýšil vás a {user0} na moderátora", + "{actor} promoted you and {user0} to moderators" : "{actor} povýšil vás a {user0} na moderátorov", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Administrátor povýšil vás, {user0} a %n účastníka na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov","Administrátor povýšil vás, {user0} a %n účastníkov na moderátorov"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} povýšil vás, {user0} a %n účastníka na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov","{actor} povýšil vás, {user0} a %n účastníkov na moderátorov"], + "An administrator promoted {user0} and {user1} to moderators" : "Administrátor povýšil {user0} a {user1} na moderátorov", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} povýšil {user0} a {user1} na moderátorov", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Administrátor povýšil {user0}, {user1} a ďalších %n účastníka na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov","Administrátor povýšil {user0}, {user1} a ďalších %n účastníkov na moderátorov"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} povýšil {user0}, {user1} a %n účastníka na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov","{actor} povýšil {user0}, {user1} a %n účastníkov na moderátorov"], + "You demoted {user0} and {user1} from moderators" : "Degradovali ste {user0} a {user1} z moderátorov", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Degradovali ste {user0}, {user1} a %n účastníka z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov","Degradovali ste {user0}, {user1} a %n účastníkov z moderátorov"], + "An administrator demoted you and {user0} from moderators" : "Administrátor degradoval vás a {user0} z moderátorov", + "{actor} demoted you and {user0} from moderators" : "{actor} degradoval vás a {user0} z moderátorov", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Administrátor degradoval vás, {user0} a %n účastníka z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov","Administrátor degradoval vás, {user0} a %n účastníkov z moderátorov"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} degradoval vás, {user0} a %n účastníka z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov","{actor} degradoval vás, {user0} a %n účastníkov z moderátorov"], + "An administrator demoted {user0} and {user1} from moderators" : "Administrátor degradoval {user0} a {user1} na moderátorov", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degradoval {user0} a {user1} z moderátorov", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Administrátor degradoval {user0}, {user1} a ďalších %n účastníka z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov","Administrátor degradoval {user0}, {user1} a ďalších %n účastníkov z moderátorov"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} degradoval {user0}, {user1} a %n účastníka z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov","{actor} degradoval {user0}, {user1} a %n účastníkov z moderátorov"], + "You:" : "Vy", + "You: {lastMessage}" : "Vy: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Server bol aktualizovaný.", + "(edited by you)" : "(editované vami)", + "(edited by a deleted user)" : "(editoval zmazaný užívateľ)", + "(edited by {moderator})" : "(editoval {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "K rozhovoru sa pokúšate pripojiť počas aktívnej relácie v inom okne alebo zariadení. Nextcloud Talk /Rozhovor/ v súčasnosti túto možnosť nepodporuje. Čo chcete urobiť?", + "Leave this page" : "Opustiť túto stránku", + "Join here" : "Pripojiť sa tu", + "Deck card has been posted to {conversation}" : "Karta Deck bola odoslaná do {conversation}", + "An error occurred while posting deck card to conversation" : "Pri odosielaní karty do konverzácie aplikácie Deck nastala chyba", + "Post to a conversation" : "Uverejniť príspevok v konverzácii", + "Post to conversation" : "Uverejniť príspevok v konverzácii", + "The recording failed. Please contact your administrator." : "Nahrávanie zlyhalo. Prosím, kontaktujte správcu.", + "Location has been posted to {conversation}" : "Miesto bolo odoslané do {conversation}", + "An error occurred while posting location to conversation" : "Pri odosielaní umiestnenia do konverzácie nastala chyba", + "Share to a conversation" : "Zdieľať v rozhovore", + "Share to conversation" : "Zdieľat v rozhovore", + "In conversation" : "V konverzácii", + "Search in conversation: {conversation}" : "Hľadať v konverzácii: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Vaše požiadavky sú momentálne obmedzené z dôvodu ochrany pred útokom hrubou silou", + "Error while clearing conversation history" : "Chyba pri čistení histórie konverzácie", + "Error occurred while allowing guests" : "Pri povoľovaní hostí nastala chyba", + "Error occurred while disallowing guests" : "Pri zakazovaní hostí nastala chyba", + "Error occurred when restricting the conversation to moderator" : "Pri obmedzovaní konverzácie na moderátora sa vyskytla chyba", + "Error occurred when opening the conversation to everyone" : "Pri otváraní konverzácie pre všetkých sa vyskytla chyba", + "Conversation password has been saved" : "Heslo konverzácie bolo uložené", + "Conversation password has been removed" : "Heslo konverzácie bolo odstránené", + "Error occurred while saving conversation password" : "Pri ukladaní hesla konverzácie sa vyskytla chyba", + "Call recording is starting." : "Spúšťa sa nahrávanie hovoru.", + "Call recording stopped while starting." : "Nahrávanie hovoru zastavené počas spúšťania.", + "Call recording stopped. You will be notified once the recording is available." : "Nahrávanie hovoru bolo zastavené. Keď bude záznam dostupný, budete informovaní.", + "Conversation picture set" : "Obrázok konverzácie bol nastavený", + "Conversation picture deleted" : "Obrázok konverzácie bol zmazaný", + "Could not delete the conversation picture" : "Nepodarilo sa zmazať obrázok konverzácie", + "Could not remove the automatic expiration" : "Nebolo možné odstrániť automatické vypršanie platnosti", + "Could not post message: {errorMessage}" : "Správu sa nepodarilo zverejniť: {errorMessage}", + "Participant is banned successfully" : "Účastník bol úspešne zablokovaný", + "Error while banning the participant" : "Chyba pri zablokovaní účastníka", + "An error occurred while fetching the participants" : "Pri načítavaní účastníkov sa vyskytla chyba", + "Could not send invitation to {actorId}" : "Nemôžem odoslať pozvánku pre {actorId}", + "Invitations sent" : "Pozvánky odoslané", + "Error occurred when sending invitations" : "Pri posielaní pozvánok nastala chyba", + "Failed to join the conversation." : "Nepodarilo sa pripojiť k hovoru.", + "An error occurred while creating breakout rooms" : "Pri vytváraní oddelených miestností sa vyskytla chyba", + "An error occurred while re-ordering the attendees" : "Pri opätovnom zvolávaní účastníkov sa vyskytla chyba", + "An error occurred while deleting breakout rooms" : "Pri odstraňovaní oddelených miestností sa vyskytla chyba", + "An error occurred while starting breakout rooms" : "Pri spúšťaní oddelených miestností sa vyskytla chyba", + "An error occurred while stopping breakout rooms" : "Pri zastavovaní oddelených miestností sa vyskytla chyba", + "An error occurred while sending a message to the breakout rooms" : "Pri odosielaní správy do oddelených miestností sa vyskytla chyba", + "An error occurred while requesting assistance" : "Pri žiadosti o pomoc sa vyskytla chyba", + "An error occurred while resetting the request for assistance" : "Pri resetovaní žiadosti o pomoc sa vyskytla chyba", + "An error occurred while joining breakout room" : "Pri pripájaní k oddelenej miestnosti sa vyskytla chyba", + "Failed to rename the thread" : "Nezabezpečilo sa premenovanie vlákna", + "Error fetching upcoming events" : "Chyba pri načítavaní nadchádzajúcich udalostí", + "Error fetching upcoming reminders" : "Chyba pri načítavaní nadchádzajúcich pripomienok", + "An error occurred while accepting an invitation" : "Pri potvrdzovaní pozvánky sa vyskytla chyba", + "An error occurred while rejecting an invitation" : "Pri odmietnutí pozvánky sa vyskytla chyba", + "{guest} (guest)" : "{guest} (návštevník)", + "Poll draft has been saved" : "Návrh ankety bol uložený", + "An error occurred while saving the draft" : "Došlo k chybe pri ukladaní konceptu", + "An error occurred while submitting your vote" : "Pri odosielaní vašeho hlasu nastala chyba", + "An error occurred while ending the poll" : "Pri ukončovaní ankety nastala chyba", + "An error occurred while deleting the poll draft" : "Došlo k chybe pri odstraňovaní návrhu ankety", + "Poll \"{name}\" was created by {user}. Click to vote" : "Anketu „{name}“ vytvoril {user}. Kliknite pre hlasovanie", + "Failed to add reaction" : "Nepodarilo sa pridať reakciu", + "Failed to remove reaction" : "Nepodarilo sa odstrániť reakciu", + "The server is in maintenance mode." : "Server je v režime údržby.", + "Federated server was updated." : "Združený server bol aktualizovaný.", + "Error while uploading file \"{fileName}\"" : "Chyba pri nahrávaní súboru \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Nie je voľné miesto pre nahranie súboru \"{fileName}\"", + "You are not allowed to share files" : "Nemôžete sprístupniť súbory", + "Error while sharing file" : "Pri zdieľaní súboru došlo k chybe", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Prehliadač, ktorý používate, nie je službou Nextcloud Talk /Rozhovor/ plne podporovaný. Použite najnovšiu verziu prehliadača Mozilla Firefox, Microsoft Edge, Google Chrome alebo Apple Safari.", + "_In %n hour_::_In %n hours_" : ["O %n hodinu","O %n hodiny","O %n hodín","O %n hodín"], + "_%n minute _::_%n minutes_" : ["%n minúta","%n minúty","%n minút","%n minút"], + "In {hours} and {minutes}" : "O {hours} a {minutes}", + "_In %n minute_::_In %n minutes_" : ["O %n minútu","O %n minúty","O %n minút","O %n minút"], + "Later today – {timeLocale}" : "Neskôr dnes - {timeLocale}", + "Set time for later today" : "Nastaviť čas na neskôr dnes", + "Tomorrow – {timeLocale}" : "Zajtra – {timeLocale}", + "Set time for tomorrow" : "Nastaviť čas na zajtra", + "This weekend – {timeLocale}" : "Tento víkend – {timeLocale}", + "Set time for this weekend" : "Nastavte čas na tento víkend", + "Next week – {timeLocale}" : "Budúci týždeň – {timeLocale}", + "Set time for next week" : "Nastaviť čas na budúci týždeň", + "Message link copied to clipboard" : "Odkaz na správu bol skopírovaný do schránky.", + "Conversation link copied to clipboard" : "Odkaz na konverzáciu bol skopírovaný do schránky", + "The link could not be copied" : "Odkaz sa nepodarilo skopírovať.", + "Error while parsing a PROPFIND error" : "Chyba pri parsovaní chyby PROPFIND", + "Sending signaling message has failed" : "Odoslanie signalizačnej správy zlyhalo", + "Lost connection to signaling server. Trying to reconnect." : "Stratené pripojenie k signalizačnému serveru. Pokúšam sa znova pripojiť.", + "Lost connection to signaling server." : "Stratené pripojenie k signalizačnému serveru.", + "Connecting is taking longer than expected …" : "Pripojenie trvá dlhšie, než sa očakávalo…", + "Failed to connect. Retrying …" : "Nepodarilo sa pripojiť. Skúšam znova…", + "Failed to connect. The signaling server may be set up incorrectly" : "Nepodarilo sa pripojiť. Signálny server môže byť nesprávne nastavený.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nakonfigurovaný signalizačný server je potrebné aktualizovať, aby bol kompatibilný s touto verziou Talk /Rozhovor/. Kontaktujte svojho správcu.", + "Please restart the app." : "Prosím, reštartujte aplikáciu.", + "Please reload the page." : "Obnovte prosím stránku.", + "Please try to restart the app." : "Skúste prosím reštartovať aplikáciu.", + "Please try to reload the page." : "Skúste znovu načítať stránku.", + "Do not disturb" : "Nerušiť", + "Away" : "Preč", + "Microphone {number}" : "Mikrofón {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Reproduktor {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Zdá sa, že hovoríte, zatiaľ čo máte stlmené, zrušte ho, aby vás ostatní počuli", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Nepodarilo sa nadviazať spojenie aspoň s jedným účastníkom. Pre váš scenár môže byť potrebný server TURN. Požiadajte svojho administrátora, o nastavenie nejakého podľa {linkstart}tejto dokumentácie{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Trvá to dlhšie, ako sa očakávalo. Povolili ste prístup k médiám (alebo nie)? Ak áno, reštartujte prehliadač, pretože zvuk a video zlyhávajú", + "Access to microphone & camera is only possible with HTTPS" : "Prístup ku mikrofónu a kamere je možný iba použitím HTTPS", + "Please move your setup to HTTPS" : "Prosím, prejdite na používanie HTTPS", + "Access to microphone & camera was denied" : "Prístup ku mikrofónu a kamere bol zamietnutý", + "WebRTC is not supported in your browser" : "WebRTC nie je podporované vaším prehliadačom", + "Please use a different browser like Firefox or Chrome" : "Použite prosím iný prehliadač, napríklad Firefox alebo Chrome", + "Error while accessing microphone & camera" : "Nastala chyba pri prístupe ku mikrofónu a kamere", + "%s Talk on your mobile devices" : "%s Rozhovor na Vašich mobilných zariadeniach", + "Join conversations at any time, anywhere, on any device." : "Pripojte sa ku konverzáciám kedykoľvek a kdekoľvek na akomkoľvek zariadení.", + "Android app" : "Android apka", + "iOS app" : "iOS apka", + "__language_name__" : "Slovenčina", + "Webhook Demo" : "Demo Webhooku", + "Call summary (%s)" : "Zhrnutie hovoru (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Bot so súhrnom hovorov uverejní po hovore súhrnnú správu so zoznamom všetkých účastníkov a načrtnutím úloh", + "Tasks" : "Úlohy", + "Notes" : "Poznámky", + "Reports" : "Zostavy", + "Decisions" : "Rozhodnutia", + "Agenda" : "Agenda", + "Call summary" : "Zhrnutie hovoru", + "Call summary - {title}" : "Zhrnutie hovoru - {title}", + "Talk conversation for event" : "Konverzácia Talk pre udalosť", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push je nainštalovaný, čím sa zlepšuje výkon desktopových klientov.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} nie je nainštalovaný, čo môže viesť k problémom s výkonom pri používaní desktopových klientov.", + "Next meeting" : "Ďalšie stretnutie", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Naplánujte stretnutie z vášho kalendára. Na zobrazenie tu je potrebné nastaviť konverzáciu Talk ako miesto", + "Join conversations from remote Nextcloud servers" : "Pripojte sa k rozhovorom zo vzdialených serverov Nextcloud", + "Your default media state has been saved" : "Vaše predvolené nastavenie médií bolo uložené.", + "Set reminder for later today" : "Nastaviť pripomienku na dnes-neskôr.", + "Set reminder for tomorrow" : "Nastaviť pripomienku na zajtra", + "Set reminder for this weekend" : "Nastaviť pripomienku na tento víkend", + "Set reminder for next week" : "Nastaviť pripomienku na budúci týždeň", + "Generate summary" : "Vygenerovať zhrnutie", + "Open poll • You voted already" : "Otvorená anketa • Už ste hlasovali", + "Open poll • Click to vote" : "Otvorená anketa • Kliknite pre hlasovanie", + "Poll • Ended" : "Anketa ・ Ukončená", + "Talk recording from {time} ({conversation})" : "Nahrávanie hovoru z {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Výsledky ankety • %n hlas","Výsledky ankety • %n hlasy","Výsledky ankety • %n hlasov","Výsledky ankety • %n hlasy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Otvorená anketa • %n hlas","Otvorená anketa • %n hlasy","Otvorená anketa • %n hlasov","Otvorená anketa • %n hlasov"], + "Submit vote" : "Odoslať hlas", + "Your privacy setting has been saved" : "Vaša nastavenie ochrany osobných údajov bolo uložené", + "Your personal setting has been saved" : "Vaše osobné nastavenia boli uložené.", + "Failed to save sounds setting" : "Nepodarilo sa uložiť nastavenie zvukov", + "Sounds setting saved" : "Nastavenie zvukov uložené", + "Always shown if recording consent is required" : "Vždy zobrazené, ak je potrebný súhlas na nahrávanie", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk bol aktualizovaný, nemôžete začať alebo pripojiť hovor.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pripojili ste sa k rozhovoru v inom okne alebo zariadení. Nextcloud Talk /Rozhovor/ v súčasnosti túto možnosť nepodporuje, preto bolo sedenie ukončené.", + "Nextcloud Talk was updated." : "Nextcloud Talk bol aktualizovaný.", + "Nextcloud is in maintenance mode." : "Nextcloud je v režime údržby.", + "Nextcloud Talk Federation was updated." : "Federácia Nextcloud Talk bola aktualizovaná.", + "Enable live translation" : "Povoliť živý preklad", + "I picked list style" : "Vybral/a som si štýl zoznamu", + "Hey! Are you using Talk in list style or with message bubbles?" : "Ahoj! Používaš Talk v zoznamovom štýle alebo s bublinami správ?" +},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);" +} \ No newline at end of file diff --git a/l10n/sl.js b/l10n/sl.js new file mode 100644 index 0000000..d57c698 --- /dev/null +++ b/l10n/sl.js @@ -0,0 +1,1629 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "pogovor", + "(Duration %s)" : "(Trajanje %s)", + "You attended a call with {user1}" : "Opravite klic: {user1}", + "_%n guest_::_%n guests_" : ["%n gost","%n gosta","%n gostje","%n gostov"], + "You attended a call with {user1} and {user2}" : "Opravite klic: {user1} in {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Opravite klic: {user1}, {user2} in {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Opravite klic: {user1}, {user2}, {user3} in {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Opravite klic: {user1}, {user2}, {user3}, {user4} in {user5}", + "_%n other_::_%n others_" : ["%n drug","%n druga","%n drugi","%n drugih"], + "{actor} invited you to {call}" : "{actor} pošlje povabilo na {call}", + "You were invited to a conversation or had a call" : "Povabljeni ste bili v pogovor, ali pa ste prejeli klic", + "Other activities" : "Druge dejavnosti", + "Talk" : "Talk", + "Guest" : "Gost", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dobrodošli v program Nextcloud Talk!\nTa pogovor je namenjen obvestilom in podrobnostim o novih zmožnosti programa.", + "## New in Talk %s" : "## Novo v Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Po novem tudi programa Microsoft Edge in Safari podpirata zvočno in video klicanje.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Pogovori Ena-na-Ena so po novem stalni in jih ni več mogoče po nesreči pretvoriti v skupinski pogovor. Prav tako se, ko eden izmed udeležencev zapusti pogovor, ta samodejno ne izbriše. Izbriše se šele, ko pogovor zapustita oba udeleženca.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Mogoče je poslati obvestilo vsem udeležencem z vpisom »@all« v vpisno polje.", + "- With the \"arrow-up\" key you can repost your last message" : "- Pritisk tipke »puščico navzgor« ponovi izpis zadnjega vnosa klepeta.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Program podpira ukaze v vnosni vrstici; napišite »/help« kot sporočilo, če so ukazi skrbniško omogočeni.", + "- With projects you can create quick links between conversations, files and other items" : "- S projekti lahko ustvarite hitre povezave med pogovori, da datotekami in drugimi predmeti.", + "- You can now mention guests in the chat" : "- V klepetu je mogoče omeniti goste.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Pogovori imajo možnost čakalnice. Ta omogoča moderatorjem pripravo, usklajevanje in pogovor pred začetkom sestanka, uporabniki in gosti pa čakajo na začetek.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Mogoče je neposredno odgovoriti na posamezno sporočilo in omogočiti kontekst sporočila.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- iskalnik pogovorov in stikov omogoča filtriranje obstoječih pogovorov in s tem hitrejše iskanje predhodnih.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Dodati je mogoče skupine uporabnikov po meri, če je nameščen tudi program Krogi.", + "- Check out the new grid and call view" : "- Preizkusite nov mrežni in posodobljen klicni pogled.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Po novem je mogoče poslati datoteke neposredno iz naprave v pogovor.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Datoteke v souporabi se sedaj odprejo znotraj klepetalnega pogleda s programi za pregledovanje.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Mogoče je iskati med klepeti in sporočili prek enotnega iskalnega polja.", + "- Spice up your messages with emojis from the emoji picker" : "- Poživite sporočila z izraznimi ikonami prek izbirnika.", + "- You can now change your camera and microphone while being in a call" : "- Spremeniti je mogoče kamero in mikrofon kar med klicem.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Pogovoru je mogoče dodati vsebinski opis in ga odpreti, da se prijavljeni uporabniki enostavno pridružijo.", + "- See a read status and send failed messages again" : "- Prikazano je stanje branja in možnost ponovnega pošiljanja spodletelega sporočila.", + "- Raise your hand in a call with the R key" : "- Roko je mogoče dvigniti s pritiskom na tipko » R «.", + "- Join the same conversation and call from multiple devices" : "- Možnost povezave v isti pogovor z več različnih naprav.", + "- Send voice messages, share your location or contact details" : "- Pošiljanje glasovnih sporočil, objavo položaja in podrobnosti profila.", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodajanje skupin v pogovor in samodejno dodajanje novih članov skupine kot udeležence.", + "- A preview of your audio and video is shown before joining a call" : "- Pred vklopom v pogovor je na voljo predogled slike iz zvoka.", + "- You can now blur your background in the newly designed call view" : "- V na novo zasnovanem pogledu klica je mogoče zamegliti ozadje.", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorji lahko dodelijo splošna in posamezna dovoljenja udeležencem.", + "- You can now react to chat messages" : "- Po novem se je mogoče odzvati na sporočila v klepetu.", + "- In the sidebar you can now find an overview of the latest shared items" : "- V bočnem oknu je sedaj pregledni seznam predmetov v souporabi.", + "- Use a poll to collect the opinions of others or settle on a date" : "- Uporabite lahko anketo za zbiranje mnenj in usklajevanje datumov dogodkov.", + "- Configure an expiration time for chat messages" : "- Podprto je nastavljanje časa poteka sporočil v klepetu.", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Mogoče je začeti posamezen klic brez vednosti udeležencev v pogovorih z več sodelujočimi. Po začetku je mogoče pošiljati tudi posamezna obvestila.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Mogoče je poslati sporočila v klepet brez prikaza obvestila, če sporočilo ni pomembno.", + "- Emojis can now be autocompleted by typing a \":\"" : "- Izrazne ikone je mogoče izrisovati z vpisom dvopičja »:«.", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Različne predmete je mogoče povezovati z uporabo izbirnika » / «.", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorji lahko ustvarjajo ločene skupine (zahteva nastavitev zunanjega signalnega strežnika).", + "- Calls can now be recorded (requires the High-performance backend)" : "- Klice je mogoče posneti (zahteva nastavitev zunanjega signalnega strežnika)", + "- Conversations can now have an avatar or emoji as icon" : "- Pogovoru je mogoče določiti podobo ali izrazno ikono.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ob zamegljenem so na voljo tudi navidezna ozadja v videokonferencah.", + "- Reactions are now available during calls" : "- Med klicem je mogoče uporabiti grafične odzive.", + "- Typing indicators show which users are currently typing a message" : "- Kazalnik tipkanja se zažene, ko uporabniki začnejo vpisovati sporočila.", + "- Groups can now be mentioned in chats" : "- V pogovorih je mogoče omeniti tudi skupine.", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Posnetke klicev je mogoče samodejno prepisati v besedilo, če je na voljo podporni program.", + "- Chat messages can be translated if a translation provider app is registered" : "- Sporočila klepeta je mogoče samodejno prevesti, če je na voljo podporni program.", + "- **Markdown** can now be used in _chat_ messages" : "- V pogovorih je mogoče uporabiti oblikovanje **Markdown**.", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Na voljo so spletne kljuke za dodajanje botov. Več podrobnosti je zapisanih v dokumentaciji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/.", + "- Set a reminder on a chat message to be notified later again" : "- Nastaviti je mogoče opomnik na sporočilo klepeta za kasnejše obveščanje.", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- »Sporočilo sebi« je mogoče uporabiti za opomnike in izmenjavo podatkov med različnimi napravami.", + "- Captions allow to send a message with a file at the same time" : "- Napisi omogočajo pošiljanje sporočila sočasno z datoteko.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video govorca je zdaj vidno med souporabo zaslona, odzivi slušateljev pa so animirani.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Sporočila lahko prijavljeni avtorji in moderatorji urejajo še 6 ur po vpisu", + "- Unsent message drafts are now saved in your browser" : "- Neposlani osnutki sporočil se shranjujejo v pomnilnik brskalnika", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Klepetanje je mogoče tudi z zveznimi uporabniki z zunanjimi strežniki Talk", + "_All %n participant_::_All %n participants_" : ["%n udeleženec","%n udeleženca"," %n udeleženci"," %n udeležencev"], + "Talk updates ✅" : "Posodobitve programa Talk ✅", + "Reaction deleted by author" : "Avtor izbriše odziv", + "{actor} created the conversation" : "{actor} ustvari pogovor", + "You created the conversation" : "Ustvarite pogovor", + "System created the conversation" : "Sistem ustvari pogovor", + "An administrator created the conversation" : "Skrbnik je ustvaril pogovor", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} preimenuje pogovor »%1$s« v »%2$s«", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Preimenujete pogovor »%1$s« v »%2$s", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Skrbnik je preimenoval pogovor »%1$s« v »%2$s«", + "{actor} set the description" : "{actor} nastavi opis", + "You set the description" : "Nastavite opis", + "An administrator set the description" : "Skrbnik nastavi opis", + "{actor} removed the description" : "{actor} odstrani opis", + "You removed the description" : "Odstranite opis", + "An administrator removed the description" : "Skrbnik odstrani opis", + "You started a silent call" : "Začeli ste tihi klic", + "Outgoing silent call" : "Odhodni tihi klic", + "{actor} started a silent call" : "{actor} začne tihi klic", + "Incoming silent call" : "Dohodni tihi klic", + "You started a call" : "Začnete klic", + "Outgoing call" : "Odhodni klic", + "{actor} started a call" : "{actor} začne klic", + "Incoming call" : "Dohodni klic", + "{actor} joined the call" : "{actor} se pridruži klicu", + "You joined the call" : "Pridružite se klicu", + "{actor} left the call" : "{actor} zapusti klic", + "You left the call" : "Zapustite klic", + "{actor} unlocked the conversation" : "{actor} odklene pogovor", + "You unlocked the conversation" : "Odklenete pogovor", + "An administrator unlocked the conversation" : "Skrbnik je odklenil pogovor", + "{actor} locked the conversation" : "{actor} zaklene pogovor", + "You locked the conversation" : "Zaklenete pogovor", + "An administrator locked the conversation" : "Skrbnik je zaklenil pogovor", + "{actor} limited the conversation to the current participants" : "{actor} omeji pogovor na trenutno povezane udeležence", + "You limited the conversation to the current participants" : "Omejili ste pogovor na trenutno povezane udeležence", + "An administrator limited the conversation to the current participants" : "Skrbnik je omejil pogovor na trenutno povezane udeležence", + "{actor} opened the conversation to registered users" : "{actor} odpre pogovor za vse vpisane uporabnike", + "You opened the conversation to registered users" : "Odprli ste pogovor za vse vpisane uporabnike", + "An administrator opened the conversation to registered users" : "Skrbnik je odprl pogovor za vse vpisane uporabnike", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} odpre pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "You opened the conversation to registered users and users created with the Guests app" : "Odprete pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Skrbnik odpre pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "The conversation is now open to everyone" : "Pogovor je sedaj odprt za vse", + "{actor} opened the conversation to everyone" : "{actor} odpre pogovor za vse", + "You opened the conversation to everyone" : "Odprete pogovor za vse", + "{actor} restricted the conversation to moderators" : "{actor} omeji pogovor na moderatorje", + "You restricted the conversation to moderators" : "Omejite pogovor na moderatorje", + "{actor} started breakout rooms" : "{actor} odpre mesta za ločene skupine", + "You started breakout rooms" : "Odprete mesta za ločene skupine", + "{actor} stopped breakout rooms" : "{actor} zapre ločene skupine", + "You stopped breakout rooms" : "Zaprli ste ločene skupine", + "{actor} allowed guests" : "{actor} dovoli sodelovanje gostov", + "You allowed guests" : "Dovolite sodelovanje gostov", + "An administrator allowed guests" : "Skrbnik je odobril dostop gostom", + "{actor} disallowed guests" : "{actor} prepove sodelovanje gostom", + "You disallowed guests" : "Prepoveste sodelovanje gostom", + "An administrator disallowed guests" : "Skrbnik je onemogočil dostop gostom", + "{actor} set a password" : "{actor} nastavi geslo", + "You set a password" : "Nastavite geslo", + "An administrator set a password" : "Skrbnik je nastavil geslo", + "{actor} removed the password" : "{actor} odstrani geslo", + "You removed the password" : "Odstranite geslo", + "An administrator removed the password" : "Skrbnik je odstranil geslo", + "{actor} added {user}" : "{actor} doda stik {user}", + "You joined the conversation" : "Pridružite se pogovoru", + "{actor} joined the conversation" : "{actor} se pridruži pogovoru", + "You added {user}" : "Dodate uporabnika {user}", + "{actor} added you" : "{actor} vas doda v pogovor", + "An administrator added you" : "Skrbnik vas je dodal", + "An administrator added {user}" : "Skrbnik doda uporabnika: {user}", + "You left the conversation" : "Zapustite pogovor", + "{actor} left the conversation" : "{actor} zapusti pogovor", + "{actor} removed {user}" : "{actor} odstrani stik {user}", + "You removed {user}" : "Odstranite uporabnika {user}", + "{actor} removed you" : "{actor} vas odstrani", + "An administrator removed you" : "Skrbnik vas je odstranil", + "An administrator removed {user}" : "Skrbnik odstrani uporabnika: {user}", + "{actor} invited {federated_user}" : "{actor} povabi {federated_user}", + "You invited {federated_user}" : "Povabite {federated_user}", + "You accepted the invitation" : "Sprejeli ste vabilo", + "{actor} invited you" : "{actor} vsa povabi v klepet", + "An administrator invited you" : "Skrbnik vas je povabil", + "An administrator invited {federated_user}" : "Skrbnik povabi osebo {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} sprejme povabilo", + "{actor} removed {federated_user}" : "{actor} odstrani osebo {federated_user}", + "You removed {federated_user}" : "Odstranite osebo {federated_user}", + "You declined the invitation" : "Zavrnete povabilo", + "An administrator removed {federated_user}" : "Skrbnik odstrani osebo {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} zavrne povabilo", + "{actor} added group {group}" : "{actor} doda skupino {group}", + "You added group {group}" : "Dodate skupino {group}", + "An administrator added group {group}" : "Skrbnik doda skupino {group}", + "{actor} removed group {group}" : "{actor} odstrani skupino {group}", + "You removed group {group}" : "Odstranite skupino {group}", + "An administrator removed group {group}" : "Skrbnik odstrani skupino {group}", + "{actor} added {phone}" : "{actor} doda telefonsko številko {phone}", + "You added {phone}" : "Dodate telefonsko številko {phone}", + "An administrator added {phone}" : "Skrbnik doda telefonsko številko {phone}", + "{actor} removed {phone}" : "{actor} odstrani telefonsko številko {phone}", + "You removed {phone}" : "Odstranite telefonsko številko {phone}", + "An administrator removed {phone}" : "Skrbnik odstrani telefonsko številko {phone}", + "{actor} promoted {user} to moderator" : "{actor} dodeli osebi {user} vlogo moderatorja", + "You promoted {user} to moderator" : "Osebi {user} ste dodelili vlogo moderatorja", + "{actor} promoted you to moderator" : "{actor} vam dodali vlogo moderatorja", + "An administrator promoted you to moderator" : "Skrbnik vam dodeli vlogo moderatorja", + "An administrator promoted {user} to moderator" : "Skrbnik je določil moderatorja: {user}", + "{actor} demoted {user} from moderator" : "{actor} osebi {user} odstrani vlogo moderatorja", + "You demoted {user} from moderator" : "Osebi {user} ste odvzeli vlogo moderatorja", + "{actor} demoted you from moderator" : "{actor} vam odvzame vlogo moderatorja", + "An administrator demoted you from moderator" : "Skrbnik vam je odvzel vlogo moderatorja", + "An administrator demoted {user} from moderator" : "Skrbnik je odstranil moderatorja: {user}", + "{actor} shared a file which is no longer available" : "{actor}: datoteka v souporabi ni več na voljo", + "You shared a file which is no longer available" : "Datoteka ni več na voljo ...", + "The shared location is malformed" : "Objavljeno trenutno mesto je napačno oblikovano", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavi povezavo Matterbridge za usklajevanje tega pogovora z drugimi klepeti.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavite povezavo Matterbridge za usklajevanje tega pogovora z drugimi klepeti.", + "{actor} updated the Matterbridge configuration" : "{actor} posodobi nastavitve Matterbridge.", + "You updated the Matterbridge configuration" : "Posodobite nastavitev Matterbridge.", + "{actor} removed the Matterbridge configuration" : "{actor} odstrani nastavitve Matterbridge.", + "You removed the Matterbridge configuration" : "Odstranili ste nastavitve Matterbridge.", + "{actor} started Matterbridge" : "{actor} omogoči Matterbridge.", + "You started Matterbridge" : "Omogočite Matterbridge.", + "{actor} stopped Matterbridge" : "{actor} zaustavi Matterbridge.", + "You stopped Matterbridge" : "Zaustavite Matterbridge.", + "{actor} deleted a message" : "{actor} izbriše sporočilo", + "You deleted a message" : "Izbrisali ste sporočilo", + "You edited a message" : "Uredili ste sporočilo", + "{actor} deleted a reaction" : "{actor} izbriše odziv", + "You deleted a reaction" : "Izbrisali ste odziv", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Pretek sporočil ste nastavili na %n teden","Pretek sporočil ste nastavili na %n tedna","Pretek sporočil ste nastavili na %n tedne","Pretek sporočil ste nastavili na %n tednov"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Pretek sporočil ste nastavili na %n dan","Pretek sporočil ste nastavili na %n dneva","Pretek sporočil ste nastavili na %n dni","Pretek sporočil ste nastavili na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Pretek sporočil ste nastavili na %n uro","Pretek sporočil ste nastavili na %n uri","Pretek sporočil ste nastavili na %n ure","Pretek sporočil ste nastavili na %n ur"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Pretek sporočil ste nastavili na %n minuto","Pretek sporočil ste nastavili na %n minuti","Pretek sporočil ste nastavili na %n minute","Pretek sporočil ste nastavili na %n minut"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavi pretek sporočil na %n teden","{actor} nastavi pretek sporočil na %n tedna","{actor} nastavi pretek sporočil na %n tedne","{actor} nastavi pretek sporočil na %n tednov"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavi pretek sporočil na %n dan","{actor} nastavi pretek sporočil na %n dneva","{actor} nastavi pretek sporočil na %n dni","{actor} nastavi pretek sporočil na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavi pretek sporočil na %n uro","{actor} nastavi pretek sporočil na %n uri","{actor} nastavi pretek sporočil na %n ure","{actor} nastavi pretek sporočil na %n ur"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavi pretek sporočil na %n minuto","{actor} nastavi pretek sporočil na %n minuti","{actor} nastavi pretek sporočil na %n minute","{actor} nastavi pretek sporočil na %n minut"], + "{actor} disabled message expiration" : "{actor} onemogoči pretek sporočil", + "You disabled message expiration" : "Onemogočili ste pretek sporočil", + "{actor} cleared the history of the conversation" : "{actor} počisti zgodovino pogovora.", + "You cleared the history of the conversation" : "Počistili ste zgodovino pogovora.", + "{actor} set the conversation picture" : "{actor} nastavi sliko pogovora", + "You set the conversation picture" : "Nastavili ste sliko pogovora", + "{actor} removed the conversation picture" : "{actor} odstrani sliko pogovora", + "You removed the conversation picture" : "Odstranili ste sliko pogovora", + "{actor} ended the poll {poll}" : "{actor} konča anketo {poll}", + "You ended the poll {poll}" : "Končate anketo {poll}", + "{actor} started the video recording" : "{actor} začne snemati video", + "You started the video recording" : "Začnete snemati video", + "{actor} stopped the video recording" : "{actor} zaustavi snemanje videa", + "You stopped the video recording" : "Zaustavite snemanje videa", + "{actor} started the audio recording" : "{actor} začne snemati zvok", + "You started the audio recording" : "Začnete snemati zvok", + "{actor} stopped the audio recording" : "{actor} zaustavi snemanje zvoka", + "You stopped the audio recording" : "Zaustavite snemanje zvoka", + "The recording failed" : "Snemanje je spodletelo", + "Someone voted on the poll {poll}" : "Nekdo je oddal glas v anketi {poll}", + "Message deleted by author" : "Sporočilo je avtor izbrisal.", + "Message deleted by {actor}" : "{actor} je izbrisal sporočilo", + "Message deleted by you" : "Sporočilo ste izbrisali", + "Deleted user" : "Izbrisan uporabnik", + "Unknown number" : "Neznana številka", + "Administration" : "Skrbništvo", + "System" : "Sistem", + "%s (guest)" : "%s (gost)", + "Missed call" : "Zgrešen klic", + "Unanswered call" : "Neodgovorjen klic", + "Call ended (Duration {duration})" : "Konferenčni klic je končan (Trajanje: {duration})", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} konča klic z %n gostom (trajanje: {duration}).","{actor} konča klic s skupaj %n gostoma (trajanje: {duration}).","{actor} konča klic s skupaj %n gosti (trajanje: {duration}).","{actor} konča klic s skupaj %n gosti (trajanje: {duration})."], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} konča klic z osebo {user1} (trajanje {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} konča klic z osebama {user1} in {user2} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2} in {user3} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2}, {user3} in {user4} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2}, {user3}, {user4} in {user5} (trajanje {duration})", + "Message of {user} in {conversation}" : "Sporočilo osebe {user} v pogovoru {conversation}", + "Message of {user}" : "Sporočilo osebe {user}", + "Message of a deleted user in {conversation}" : "Sporočilo izbrisane osebe v pogovoru {conversation}", + "Talk conversations" : "Pogovori Talk", + "Talk to %s" : "Pogovor: %s", + "An error occurred. Please contact your administrator." : "Prišlo je do napake. Stopite v stik s skrbnikom sistema.", + "File not found" : "Datoteke ni mogoče najti", + "File is not shared, or shared but not with the user" : "Datoteka ni v uporabi, ali pa ni v uporabi z uporabnikom", + "No account available to delete." : "Ni računa za brisanje.", + "Poll" : "Anketa", + "Password needs to be set" : "Nastaviti je treba geslo", + "Uploading the file failed" : "Pošiljanje datoteke je spodletelo", + "No image file provided" : "Ni podane slikovne datoteke", + "File is too big" : "Datoteka je prevelika", + "Invalid file provided" : "Podana je neveljavna daoteka", + "Invalid image" : "Neveljavna slika", + "Unknown filetype" : "Neznana vrsta datoteke", + "Talk mentions" : "Omembe v Talk", + "More conversations" : "Več pogovorov", + "Say hi to your friends and colleagues!" : "Pozdravite prijatelje in znance.", + "No unread mentions" : "Ni neprebranih sporočil", + "Call in progress" : "Klic je v teku ...", + "You were mentioned" : "Omenjeni ste bili v klepetu", + "Write to conversation" : "Zapisuj v pogovor", + "Writes event information into a conversation of your choice" : "Zapiše podrobnosti dogodka v pogovor po vaši izbiri", + "Conversation invitation" : "Povabilo k pogovoru", + "Scheduled time" : "Načrtovan time", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Povezati se je mogoče tudi prek telefonske povezave z naslednjimi podatki", + "Dial-in information" : "Podrobnosti klicne povezave", + "Meeting ID" : "ID Sestanka", + "Your PIN" : "Koda PIN", + "Meeting" : "Srečanje", + "Password request: %s" : "Geslo: %s", + "Private conversation" : "Zasebni pogovor", + "Deleted user (%s)" : "Izbrisan uporabnik (%s)", + "Failed to upload call recording" : "Pošiljanje posnetka pogovora je spodletelo", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Pošiljanje posnetka s strežnika za snemanje je spodletelo za klic {call}. Stopite v stik s skrbnikom sistema.", + "Share to chat" : "Objavi v pogovor", + "Dismiss notification" : "Opusti obvestilo", + "Call recording now available" : "Posnetek klica je zdaj na voljo", + "Transcript now available" : "Prepis je sedaj na voljo", + "Failed to transcript call recording" : "Prepis posnetka je spodletel", + "Accept" : "Sprejmi", + "Decline" : "Zavrni", + "Someone reacted" : "Nekdo se je odzval", + "New message" : "Novo sporočilo", + "Reminder" : "Opomnik", + "Notification" : "Obvestilo", + "Reminder: Guest in {call}" : "Opomnik: Gost v klicu {call}", + "{user} in {call}" : "{user} v pogovoru {call}", + "Deleted user in {call}" : "Iz klica {call} je izbrisan uporabnik", + "{guest} (guest) in {call}" : "{guest} (gost) v klicu {call}", + "Guest in {call}" : "Gost v klicu {call}", + "{user} sent you a private message" : "{user} vam pošlje zasebno sporočilo", + "{user} sent a message in conversation {call}" : "{actor} vam pošlje sporočilo v pogovor {call} ", + "A deleted user sent a message in conversation {call}" : "Izbrisan uporabnik pošlje sporočilo v pogovor {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gost) pošlje sporočilo v pogovor {call}", + "A guest sent a message in conversation {call}" : "Gost je poslal sporočilo v pogovor {call}", + "{user} replied to your private message" : "{user} odgovori na vaše zasebno sporočilo", + "{user} replied to your message in conversation {call}" : "{user} odgovori na vaše sporočilo v pogovoru {call}", + "A deleted user replied to your message in conversation {call}" : "Izbrisan uporabnik odgovori na vaše sporočilo v pogovoru {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gost) odgovori na vaše sporočilo v pogovoru {call}", + "A guest replied to your message in conversation {call}" : "Gost odgovori na vaše sporočilo v pogovoru {call}", + "{user} reacted with {reaction} to your private message" : "{user} se odzove z {reaction} v zasebnem sporočilu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} se odzove z {reaction} na vaše sporočilo v klicu {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Izbrisan uporabnik se odzove z {reaction} na vaše sporočilo v klicu {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gost) se odzove z {reaction} na vaše sporočilo v klicu {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gost se odzove z {reaction} na vaše sporočilo v klicu {call}", + "{user} mentioned you in a private conversation" : "{user} vas omeni v zasebnem pogovoru", + "{user} mentioned group {group} in conversation {call}" : "{user} omeni skupino {group} v pogovoru {call}", + "{user} mentioned everyone in conversation {call}" : "{user} omeni vse v pogovoru {call}", + "{user} mentioned you in conversation {call}" : "{user} vas omeni v pogovoru {call}", + "A deleted user mentioned you in conversation {call}" : "Izbrisan uporabnik vas omeni v pogovoru {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gost) vas omeni v pogovoru {call}", + "A guest mentioned you in conversation {call}" : "Gost vas omeni v pogovoru {call}", + "View message" : "Poglej sporočilo", + "Dismiss reminder" : "Opusti opomnik", + "View chat" : "Pokaži klepet", + "{user} invited you to a group conversation: {call}" : "{user} pošlje povabilo na skupinski pogovor: {call}", + "Join call" : "Pridruži se klicu", + "Answer call" : "Odzovi se na klic", + "{user} would like to talk with you" : "{user} želi govoriti z vami", + "Call back" : "Pokličite nazaj", + "You missed a call from {user}" : "Zamudili ste klic stika {user}", + "Accept call" : "Sprejmi klic", + "A group call has started in {call}" : "Začet je skupinski pogovor v {call}", + "You missed a group call in {call}" : "Zamudili ste skupinski klic {call}", + "{email} is requesting the password to access {file}" : "{email} zahteva geslo za dostop do datoteke {file}", + "{email} tried to request the password to access {file}" : "{email} prosi za geslo za dostop do datoteke {file}", + "Someone is requesting the password to access {file}" : "Nekdo zahteva geslo za dostop do datoteke {file}", + "Someone tried to request the password to access {file}" : "Nekdo prosi za geslo za dostop do datoteke {file}", + "Open settings" : "Odpri nastavitve", + "The hosted signaling server is now configured and will be used." : "Gostiteljski signalni strežnik je nastavljen in bo v uporabi.", + "The hosted signaling server was removed and will not be used anymore." : "Gostiteljski signalni strežnik je bil odstranjen in ne bo več v uporabi.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Račun gostiteljskega signalnega strežnika je spremenjen iz stanja »{oldstatus}« v »{newstatus}«.", + "pending" : "na čakanju", + "active" : "dejavno", + "expired" : "poteklo", + "blocked" : "zavrnjeno", + "error" : "napaka", + "The certificate of {host} expires in {days} days" : "Potrdilo gostitelja {host} poteče v {days} dneh", + "The certificate of {host} expired" : "Potrdilo gostitelja {host} je poteklo", + "Contact via Talk" : "Stopi v stik s Talk", + "Open Talk" : "Odpri Talk", + "Default" : "Privzeta", + "Presentation" : "Predstavitev", + "Webinar" : "Webinar", + "Conversations" : "Pogovori", + "Messages in current conversation" : "Sporočila v trenutnem pogovoru", + "{user}" : "{user}", + "Messages" : "Sporočila", + "{user} in {conversation}" : "{user} v pogovoru {conversation}", + "Messages in other conversations" : "Sporočila v drugih pogovorih", + "Invalid emoji character" : "Neveljaven znak izrazne ikone", + "Invalid background color" : "Neveljavna barva ozadja", + "Avatar image is not square" : "Slika podobe ni kvadratna", + "Room {number}" : "Skupina {number}", + "Other" : "Drugo", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Izdaja preizkusne zahteve je spodletela, ker preizkusni strežnik ni dosegljiv.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Prišlo je do težav z overitvijo zagnane seje. Morda strežnik ni dosegljiv od zunaj za preverjanje naslova URL.", + "Something unexpected happened." : "Prišlo jo do nepričakovane napake.", + "The URL is invalid." : "Naslov URL je neveljaven.", + "An HTTPS URL is required." : "Zahtevan je naslov URL HTTPS.", + "The email address is invalid." : "Naslov elektronske pošte je neveljaven.", + "The language is invalid." : "Izbran jezik je neveljaven.", + "The country is invalid." : "Izbrana država je neveljavna.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Prišlo je do težav z zahtevanjem preizkusa. Preverite dnevniške zapise za podrobnosti.", + "Too many requests are send from your servers address. Please try again later." : "Z naslova strežnika je poslanih preveč zahtev. Poskusite znova kasneje.", + "There is already a trial registered for this Nextcloud instance." : "Preizkusni strežnik način za to namestitev je že vpisan.", + "Something unexpected happened. Please try again later." : "Prišlo jo do nepričakovane napake. Poskusite znova kasneje.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Izdaja preizkusne zahteve je spodletela, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "Trial requested but failed to get account information. Please check back later." : "Poslana je zahteva za preizkusni način, a je spodletelo pridobivanje podrobnosti računa. Opravilo ponovite kasneje.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Prišlo je do težav z overitvijo zahteve. Morda strežnik ni dosegljiv od zunaj za preverjanje naslova URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Pridobivanje podrobnosti računa je spodletelo, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Prišlo je do napake med pridobivanjem podrobnosti računa. Preverite dnevniške zapise za podrobnosti.", + "There is no such account registered." : "Takega računa še ni vpisanega.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Pridobivanje podrobnosti računa je spodletelo, je preizkusni strežnik nedosegljiv. Poskusite znova kasneje.", + "Deleting the hosted signaling server account failed. Please check back later." : "Brisanje gostiteljskega signalnega strežnika je spodletelo. Opravilo ponovite kasneje.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Brisanje računa je spodletelo, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "There is a problem with deleting the account. Please check your logs for further information." : "Prišlo je do napake med brisanjem računa. Preverite dnevniške zapise za podrobnosti.", + "Too many requests are sent from your servers address. Please try again later." : "Z naslova strežnika je poslanih preveč zahtev. Poskusite znova kasneje.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Brisanje računa je spodletelo, ker preizkusni strežnik ni dosegljiv. Opravilo ponovite kasneje.", + "Note to self" : "Opomba sebi", + "A place for your private notes, thoughts and ideas" : "Mesto za zasebne opombe, misli in zamisli", + "Let's get started!" : "Začnimo!", + "Andorra" : "Andora", + "United Arab Emirates" : "Združeni Arabski Emirati", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigva in Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanija", + "Armenia" : "Armenija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Ameriška Samoa", + "Austria" : "Avstrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Otočje Åland", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna in Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeš", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bolgarija", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunej Darussalam", + "Bolivia, Plurinational State of" : "Bolivija, večnacionalna država", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius in Saba", + "Brazil" : "Brazilija", + "Bahamas" : "Bahami", + "Bhutan" : "Butan", + "Bouvet Island" : "Otok Bouvet", + "Botswana" : "Botsvana", + "Belarus" : "Belorusija", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosovi otoki (Keeling)", + "Congo, the Democratic Republic of the" : "Kongo, demokratična republika", + "Central African Republic" : "Centralno Afriška Republika", + "Congo" : "Kongo", + "Switzerland" : "Švica", + "Côte d'Ivoire" : "Slonokoščeni otoki", + "Cook Islands" : "Cookovi otoki", + "Chile" : "Čile", + "Cameroon" : "Kamerun", + "China" : "Kitajska", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Božični otoki", + "Cyprus" : "Ciper", + "Czechia" : "Češka", + "Germany" : "Nemčija", + "Djibouti" : "Džibuti", + "Denmark" : "Danska", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikanska republika", + "Algeria" : "Alžirija", + "Ecuador" : "Ekvador", + "Estonia" : "Estonija", + "Egypt" : "Egipt", + "Western Sahara" : "Severna Sahara", + "Eritrea" : "Eritreja", + "Spain" : "Španija", + "Ethiopia" : "Etiopija", + "Finland" : "Finska", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandski otoki", + "Micronesia, Federated States of" : "Mikronezija, federativne države", + "Faroe Islands" : "Ferski otoki", + "France" : "Francija", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Združeno kraljestvo Velike Britanije in Severne Irske", + "Grenada" : "Grenada", + "Georgia" : "Gruzija", + "French Guiana" : "Francoska Gvajana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandija", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatorialna Gvineja", + "Greece" : "Grčija", + "South Georgia and the South Sandwich Islands" : "Južna Georgija in Južni Sandwichevi otoki", + "Guatemala" : "Gvatemala", + "Guam" : "Gvam", + "Guinea-Bissau" : "Gvineja-Bissau", + "Guyana" : "Gvajana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Otoka Heard in McDonald", + "Honduras" : "Honduras", + "Croatia" : "Hrvaška", + "Haiti" : "Haiti", + "Hungary" : "Madžarska", + "Indonesia" : "Indonezija", + "Ireland" : "Irska", + "Israel" : "Izrael", + "Isle of Man" : "Otok Man", + "India" : "Indija", + "British Indian Ocean Territory" : "Britanski teritorij v Indijskem oceanu", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska republika", + "Iceland" : "Islandija", + "Italy" : "Italija", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordanija", + "Japan" : "Japonska", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komori", + "Saint Kitts and Nevis" : "Sveti Krištof in Nevis", + "Korea, Democratic People's Republic of" : "Koreja, Demokratična ljudska republika", + "Korea, Republic of" : "Koreja, republika", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmansko otočje", + "Kazakhstan" : "Kazahstan", + "Lao People's Democratic Republic" : "Laos, Ljudska demokratična republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sveta Lucija", + "Liechtenstein" : "Lihtenštajn", + "Sri Lanka" : "Šrilanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesoto", + "Lithuania" : "Litva", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavija, republika", + "Montenegro" : "Črna Gora", + "Saint Martin (French part)" : "Sveti Martin (francoski del)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovi otoki", + "North Macedonia" : "Severna Makedonija", + "Mali" : "Mali", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Severni Marijanski otoki", + "Martinique" : "Martinik", + "Mauritania" : "Mavretanija", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mavricijus", + "Maldives" : "Maldivi", + "Malawi" : "Malavi", + "Mexico" : "Mehika", + "Malaysia" : "Malezija", + "Mozambique" : "Mozambik", + "Namibia" : "Namibija", + "New Caledonia" : "Nova Kaledonija", + "Niger" : "Niger", + "Norfolk Island" : "Otok Norfolk", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nizozemska", + "Norway" : "Norveška", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Zelandija", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francoska polinezija", + "Papua New Guinea" : "Papua Nova Gvineja", + "Philippines" : "Filipini", + "Pakistan" : "Pakistan", + "Poland" : "Poljska", + "Saint Pierre and Miquelon" : "Saint Pierre in Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugalska", + "Palau" : "Palau", + "Paraguay" : "Paragvaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Romunija", + "Serbia" : "Srbija", + "Russian Federation" : "Ruska federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Savdova Arabija", + "Solomon Islands" : "Solomonovi otoki", + "Seychelles" : "Sejšeli", + "Sudan" : "Sudan", + "Sweden" : "Švedska", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Sveta Helena, Ascension in Tristan da Cunha", + "Slovenia" : "Slovenija", + "Svalbard and Jan Mayen" : "Svalbard in Jan Mayen", + "Slovakia" : "Slovaška", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalija", + "Suriname" : "Surinam", + "South Sudan" : "Južni Sudan", + "Sao Tome and Principe" : "Sao Tome in Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sveti Martin (nizozemski del)", + "Syrian Arab Republic" : "Sirska arabska republika", + "Eswatini" : "Esvatini", + "Turks and Caicos Islands" : "Otoki Turks in Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francoski južni teritorij", + "Togo" : "Togo", + "Thailand" : "Tajska", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizija", + "Tonga" : "Tonga", + "Turkey" : "Turčija", + "Trinidad and Tobago" : "Trinidad in Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan, provinca Kitajske", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ameriški mali oddaljeni otoki", + "United States of America" : "Združene države Amerike", + "Uruguay" : "Urugvaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Sveti sedež", + "Saint Vincent and the Grenadines" : "Sveti Vincencij in Grenadine", + "Venezuela, Bolivarian Republic of" : "Venezuela, bolivarska republika", + "Virgin Islands, British" : "Deviški otoki, britanski", + "Virgin Islands, U.S." : "Deviški otoki, ameriški", + "Viet Nam" : "Vijetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis in Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Južna Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Background blur" : "Zamegljeno ozadje", + "Federation" : "Zvezni oblaki", + "High-performance backend" : "Visoko zmogljivi ozadnji program", + "Error: Cannot connect to server" : "Napaka: ni se mogoče povezati s strežnikom", + "Error: Server did not respond with proper JSON" : "Napaka: odziv strežnika ni ustrezno oblikovan v zapisu JSON", + "Error: Certificate expired" : "Napaka: potrdilo je poteklo", + "Could not get version" : "Ni mogoče pridobiti podatkov različice", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Napaka zagnane različice {version}: za pravilno delovanje je treba strežnik posodobiti na različico, skladno s trenutno nameščenim programom Talk.", + "Error: Server responded with: {error}" : "Napaka: odziv strežnika: {error}", + "Error: Unknown error occurred" : "Napak: prišlo je do neznane napake", + "Recording backend" : "Ozadje posnetka", + "SIP configuration" : "Nastavitve klicne seje SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Neveljaven zapis časa; biti mora v zapisu YYYY-MM-DD", + "Conversation not found" : "Pogovora ni mogoče najti", + "Chat, video & audio-conferencing using WebRTC" : "Klepet in videokonferenčni klici z uporabo WebRT", + "Leave call" : "Zapusti klic", + "Navigating away from the page will leave the call in {conversation}" : "Odhod s strani pusti odprt klic {converstaion}", + "Stay in call" : "Ostani v klicu", + "Discuss this file" : "Pogovor o datoteki", + "Share this file with others to discuss it" : "Za pogovor o datoteki je treba najprej omogočiti souporabo.", + "Share this file" : "Omogoči souporabo", + "Join conversation" : "Pridruži se pogovoru", + "This conversation is password-protected." : "Ta pogovor je zaščiten z geslom", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Zaznanih je več neveljavnih poskusov prijave iz trenutnega naslova IP. Iz varnostnih razlogov bo možnost naslednjega poskusa prijave zadržana za 30 sekund.", + "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", + "Password" : "Geslo", + "Submit" : "Pošlji", + "Error requesting the password." : "Prišlo je do napake med zahtevanjem gesla", + "Request password" : "Zahtevaj geslo", + "This conversation has ended" : "Pogovor je končan", + "Error occurred when joining the conversation" : "Prišlo je do napake med povezovanjem v pogovor", + "Close Talk sidebar" : "Zapri bočno okno Talk", + "Open Talk sidebar" : "Odpri bočno okno Talk", + "Everyone" : "Vsi", + "Users and moderators" : "Uporabniki in moderatorji", + "Moderators only" : "Le moderatorji", + "Disable calls" : "Onemogoči klice", + "Save changes" : "Shrani spremembe", + "Saving …" : "Shranjevanje...", + "Saved!" : "Shranjeno!", + "Limit to groups" : "Omeji na skupine", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ko je izbrana vsaj ena skupina, so lahko udeleženci pogovora le člani izbranih skupin.", + "Guests can still join public conversations." : "Gosti se še vedno lahko pridružijo javnim pogovorom.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Uporabniki, ki ne morejo več uporabljati programa Talk, bodo še vedno na seznamu udeležencev v predhodnih pogovorih, ohranjena bodo tudi njihova sporočila.", + "Limit using Talk" : "Omeji uporabo programa Talk", + "Limit creating a public and group conversation" : "Omeji ustvarjanje javnega ali skupinskega pogovora", + "Limit creating conversations" : "Omeji ustvarjanje pogovorov", + "Limit starting a call" : "Omeji začenjanje pogovora", + "Limit starting calls" : "Omeji začenjanje pogovora", + "When a call has started, everyone with access to the conversation can join the call." : "Ko se klic začne, se lahko kdorkoli z dostopom do pogovora samodejno pridruži.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na strežniku so nameščeni navedeni boti. V dokumentaciji lahko najdete več podrobnosti o {linkstart1}izgradnji lastnih botov{linkend} oziroma možnosti {linkstart2}dodajanja že obstoječih{linkend} na strežnik.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na strežniku ni nameščenega nobenega bota. V dokumentaciji lahko najdete več podrobnosti o {linkstart1}izgradnji lastnih botov{linkend} oziroma možnosti {linkstart2}dodajanja že obstoječih{linkend} na strežnik.", + "Description is not provided" : "Opis ni podan", + "Locked for moderators" : "Zaklenjeno za moderatorje", + "Enabled" : "Omogočeno", + "Disabled" : "Onemogočeno", + "Bots settings" : "Nastavitve botov", + "State" : "Stanje", + "Name" : "Ime", + "Last error" : "Zadnja napaka", + "Total errors count" : "Skupno število napak", + "Find more bots" : "Poišči več botov", + "Beta" : "Preizkusno", + "Enable Federation in Talk app" : "Omogoči podporo zveznim povezavam v programu Talk", + "Permissions" : "Dovoljenja", + "Select groups …" : "Izbor skupin ...", + "All messages" : "Vsa sporočila", + "@-mentions only" : "Le @-omembe", + "Off" : "Onemogočeno", + "General settings" : "Splošne nastavitve", + "Default notification settings" : "Privzete nastavitve obveščanja", + "Default group notification" : "Privzeta skupinska obveščanja", + "Default group notification for new groups" : "Privzeto skupinsko obveščanje za nove skupine", + "Integration into other apps" : "Združevanje z drugimi programi", + "Allow conversations on files" : "Dovoli pogovore pri datotekah", + "Allow conversations on public shares for files" : "Dovoli pogovore na javnih povezavah pri datotekah", + "Enable encryption" : "Omogoči šifriranje", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "S klikom na potrditveni gumb bodo podatki poslani na strežnik Struktur AG. Več podrobnosti je zbranih na povezavi {linkstart}spreed.eu{linkend}.", + "Pending" : "Na čakanju ...", + "Error" : "Napaka", + "Blocked" : "Zavrnjen", + "Active" : "Dejavno", + "Expired" : "Preteklo", + "Never" : "nikoli", + "The trial could not be requested. Please try again later." : "Zahteve za dostop do preizkusnega strežnika ni mogoče poslati. Poskusite znova kasneje.", + "The account could not be deleted. Please try again later." : "Računa ni mogoče izbrisati. Poskusite znova kasneje.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Partnersko podjetje Struktur AG ponuja storitev, pri kateri je mogoče zahtevati dostop do gostujočega signalnega strežnika. Izpolniti je treba le spodnji obrazec in zahteva bo poslana. Ko je strežnik nastavljen za uporabo bodo vaša poverila samodejno posodobljena, kar prepiše obstoječe nastavitve.", + "URL of this Nextcloud instance" : "Naslov URL te namestitve Nextcloud", + "Full name of the user requesting the trial" : "Polno ime uporabnika, ki zahteva preizkusni dostop", + "Email of the user" : "Elektronski naslov uporabnika", + "Language" : "Jezik", + "Country" : "Država", + "Request signaling server trial" : "Zahtevaj preizkusno uporabo signalnega strežnika", + "You can see the current status of your hosted signaling server in the following table." : "Trenutno stanje gositeljskega signalnega strežnika si lahko ogledate v spodnji razpredelnici.", + "Status" : "Stanje", + "Created at" : "Ustvarjeno", + "Expires at" : "Preteče", + "Limits" : "Omejitve", + "Yes" : "Da", + "No" : "Ne", + "Delete the signaling server account" : "Izbriši račun signalnega strežnika", + "_%n user_::_%n users_" : ["%n uporabnik","%n uporabnika","%n uporabniki","%n uporabnikov"], + "Installed version: {version}" : "Nameščena različica: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Namestitev protokola Matterbridge omogoča povezovanje programa Nextcloud Talk z drugimi storitvami. Za več podrobnosti si oglejte {linkstart1}strani GitHub{linkend}. Prejemanje in nameščanje programa je lahko dolgotrajno, če pa časovno poteče, bo treba namestitev izvesti ročno iz {linkstart2}Trgovine Nextcloud{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Zagonske datoteke Matterbridge ni mogoče najti, ali pa je ni mogoče zagnati.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Pot do izvedljive datoteke Matterbridge je mogoče nastaviti tudi ročno med nastavitvami. Za več podrobnosti si oglejte {linkstart}Dokumentacijo združevalnika Matterbridge{linkend}.", + "Downloading …" : "Poteka prejemanje …", + "Install Talk Matterbridge" : "Namesti Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Prišlo je do napake med nameščanjem programa Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Prišlo je do napake med nameščanjem programa Matterbridge Talk. Namestite ga ročno.", + "Failed to execute Matterbridge binary." : "Zagon izvedljive datoteke Matterbridge je spodletel.", + "Matterbridge integration" : "Združevalnik Matterbridge", + "Enable Matterbridge integration" : "Omogoči združevalnik Matterbridge", + "Status: Checking connection" : "Stanje: preverjanje povezave", + "OK: Running version: {version}" : "Brez napak: zagnana različica: {version}", + "Error: Server seems to be a Signaling server" : "Napaka: kaže, da je povezan signalni strežnik", + "Recording backend URL" : "Naslov URL ozadja posnetka", + "Validate SSL certificate" : "Overi potrdilo SSL", + "Delete this server" : "Izbriši strežnik", + "Test this server" : "Preizkusi strežnik", + "Disabled for all calls" : "Onemogoči za vse klice", + "Enabled for all calls" : "Omogoči za vse klice", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Nastavitvi PHP »upload_max_filesize« oziroma »post_max_size« omogočata pošiljanje datotek do velikosti {maxUpload}.", + "Recording backend settings saved" : "Nastavitve snemalnega ozadnjega strežnika so shranjene", + "Add a new recording backend server" : "Dodaj nov snemalni ozadnji strežnik", + "Shared secret" : "Skrivna koda", + "Recording consent" : "Strinjanje s snemanjem", + "SIP configuration saved!" : "Nastavitve klicne seje SIP so shranjene!", + "Restrict SIP configuration" : "Omeji nastavitve klicne seje SIP", + "Enable SIP configuration" : "Omogoči nastavitve sklicne seje SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Le uporabniki navedenih skupin lahko omogočijo klicno sejo SIP pri pogovorih, ki jih vodijo.", + "Phone number (Country)" : "Telefonska številka (država)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Te podrobnosti so poslane v vabilih, prav tako so prikazane v bočnem oknu vseh udeležencev.", + "Error code" : "Koda napake", + "High-performance backend URL" : "Naslov URL do gostujočega visoko zmogljivega ozadnjega programa", + "High-performance backend settings saved" : "Nastavitve visoko zmogljivega ozadnjega strežnika so shranjene", + "STUN server URL" : "Naslov URL strežnika STUN", + "The server address is invalid" : "Naslov strežnika ni veljaven", + "STUN settings saved" : "Nastavitve strežnika STUN so shranjene", + "STUN servers" : "Strežniki STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Strežnik TURN se uporablja za določanje javnega naslova IP udeležencev za požarnim zidom.", + "Add a new STUN server" : "Dodaj nov strežnik STUN", + "{schema} scheme must be used with a domain" : "Shema {schema} mora biti uporabljena z domeno.", + "{option1} and {option2}" : "{option1} in {option2}", + "{option} only" : "le {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: strežnik TURN vrača uspešno zaznane kandidate ICE", + "Error: No working ICE candidates returned by the TURN server" : "Napaka: strežnik TURN ni vrnil seznama kandidateov ICE", + "Testing whether the TURN server returns ICE candidates" : "Preizkušanje, ali strežnik TURN vrne seznam kandidatov ICE", + "TURN server schemes" : "Sheme strežnika TURN", + "TURN server URL" : "Naslov URL strežnika TURN", + "TURN server secret" : "Skrivno geslo strežnika TURN", + "TURN server protocols" : "Protokoli strežnika TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Strežnik TURN se uporablja za posredovanje podatkovnega prometa udeležencev za požarnimi zidovi. O tovrstnih rešitvah je dobro razmisliti, kadar se uporabniki ne uspejo povezati drug z drugim. Za več podrobnosti o možnostih namestitve in uporabe strežnikov TURN si oglejte {linkstart}dokumentacijo{linkend}.", + "TURN settings saved" : "Nastavitve strežnika TURN so shranjene", + "TURN servers" : "Strežniki TURN", + "Add a new TURN server" : "Dodaj nov strežnik TURN", + "Failed" : "Opravilo je spodletelo!", + "OK" : "V redu", + "Checking …" : "Poteka preverjanje ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Spodletelo opravilo: program WebAssembly je onemogočen ali pa v tej različici brskalnika ni podprt. Omogočite program oziroma uporabite ustreznejši brskalnik za preverjanje.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Spodletelo opravilo: s strežnika so vrnjene neustrezne datoteke ».wasm« in ».tflite«. V dokumentaciji »Sistemskih zahtev« preverite določila za program Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Uspešna izvedba: s spletnega strežnika so vrnjene ustrezne datoteke ».wasm« in ».tflite«.", + "Web server setup checks" : "Preverjanje nastavitev spletnega strežnika", + "Files required for virtual background can be loaded" : "Datoteke, uporabljene za zamegljevanje ozadja, je mogoče naložiti.", + "Federated user" : "Zvezni uporabnik", + "Assign participants to rooms" : "Dodeli udeležence v skupine", + "Configure breakout rooms" : "Nastavi ločene skupine", + "Number of breakout rooms" : "Število ločenih skupin", + "Assignment method" : "Način dodeljevanja", + "Automatically assign participants" : "Samodejno razvrsti udeležence", + "Manually assign participants" : "Ročno razvrsti udeležence", + "Allow participants to choose" : "Dovoli udeležencem izbor skupine", + "Create rooms" : "Ustvari ločene skupine", + "Confirm" : "Potrdi", + "Create breakout rooms" : "Ustvari ločene skupine", + "Reset" : "Ponastavi", + "Delete breakout rooms" : "Izbriši ločene skupine", + "Room {roomNumber}" : "Skupina {roomNumber}", + "Current breakout rooms and settings will be lost" : "Trenutne nastavitve skupin in dejavne skupine bodo odstranjenje", + "Cancel" : "Prekliči", + "Unassigned participants" : "Nedodeljeni udeleženci", + "Back" : "Nazaj", + "Assign" : "Dodeli", + "Add participant \"{user}\"" : "Dodaj uporabnika »{user}«", + "Invalid calendar selected" : "Izbran je neveljaven koledar", + "Unknown error occurred" : "Prišlo je do neznane napake.", + "Meeting created" : "Srečanje je ustvarjeno.", + "Upcoming meetings" : "Prihajajoča srečanja", + "Loading …" : "Poteka nalaganje …", + "No upcoming meetings" : "Ni prihajajočih srečanj", + "Schedule a meeting" : "Načrtovanje srečanja", + "Meeting title" : "Naslov srečanja", + "From" : "Od", + "To" : "Za", + "Calendar" : "Koledar", + "Attendees" : "Udeleženci", + "Add attendees" : "Dodaj udeležence", + "Save" : "Shrani", + "Search participants" : "Poišči udeležence", + "No results" : "Ni zadetkov", + "Done" : "Končano", + "Raise hand" : "Dvigni roko", + "Raise hand (R)" : "Dvigni roko (R)", + "Lower hand" : "Spusti roko", + "Lower hand (R)" : "Spusti roko (R)", + "Exit full screen (F)" : "Končaj celozaslonski način (F)", + "Full screen (F)" : "Celozaslonski način (F)", + "Speaker view" : "Pogled govorca", + "Grid view" : "Mrežni pogled", + "Recording consent is required" : "Zahtevano je soglasje za snamenje", + "This conversation is read-only" : "Ta pogovor je le za branje", + "Connection failed" : "Povezava je spodletela", + "Reload" : "Ponovno naloži", + "{nickName} raised their hand." : "{nickName} dvigne roko.", + "A participant raised their hand." : "Udeleženec dvigne roko.", + "Collapse stripe" : "Skrči polja", + "Expand stripe" : "Razširi polja", + "Previous page of videos" : "Predhodna stran videoposnetkov", + "Next page of videos" : "Naslednja stran videoposnetkov", + "Connecting …" : "Poteka vzpostavljanje povezave ...", + "Calling …" : "Poteka klicanje ...", + "Waiting for {user} to join the call" : "Čakajoč na osebo {user}, da se pridruži klicu ...", + "Waiting for others to join the call …" : "V pričakovanju odziva drugih udeleženev ...", + "You can invite others in the participant tab of the sidebar" : "Sogovornike lahko dodate z uporabo iskalnika v zavihku Udeleženci bočnega okna", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sogovornike lahko dodate prek iskalnika v zavihku Udeleženci bočnega okna, ali pa jim pošljete povezavo!", + "Share this link to invite others!" : "Objavite to povezavo in povabite tudi druge!", + "Copy link" : "Kopiraj povezavo", + "You are not allowed to enable audio" : "Ni ustreznih dovoljenj za omogočanje zvoka", + "No audio. Click to select device" : "Ni zvoka. Kliknite za izbor naprave.", + "Mute audio" : "Utišaj zvok", + "Mute audio (M)" : "Utišaj zvok (M)", + "Unmute audio" : "Povrni zvok", + "Unmute audio (M)" : "Povrni zvok (M)", + "None" : "Brez", + "Access to camera was denied" : "Dostop do kamere je bil zavrnjen.", + "Error while accessing camera: It is likely in use by another program" : "Napaka dostopa do kamere: najverjetneje je v uporabi pri drugem programu.", + "Error while accessing camera" : "Napaka med dostopom do kamere", + "You have been muted by a moderator" : "Moderator vas je začasno utišal", + "Hide presenter video" : "Skrij video predstavljalca", + "You are not allowed to enable video" : "Ni ustreznih dovoljenj za omogočanje videa", + "No video. Click to select device" : "Ni slike. Kliknite za izbor naprave.", + "Disable video" : "Onemogoči video", + "Disable video (V)" : "Onemogoči video (V)", + "Enable video" : "Omogoči video", + "Enable video (V)" : "Omogoči video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video (v) – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video. – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Show presenter" : "Pokaži govorca", + "You" : "Jaz", + "Mute" : "Utišaj", + "Muted" : "Utišano", + "Show screen" : "Pokaži zaslon", + "Stop following" : "Prekini osrednji pogled", + "Connection could not be established …" : "Povezave ni mogoče vzpostaviti ...", + "Connection was lost and could not be re-established …" : "Povezava je izgubljena in je ni mogoče znova vzpostaviti ...", + "Connection could not be established. Trying again …" : "Povezave ni bilo mogoče vzpostaviti. Poteka ponovno vzpostavljanje ...", + "Connection lost. Trying to reconnect …" : "Povezava je bila prekinjena. Poteka poskus ponovne povezave ...", + "Connection problems …" : "Zaznane so težave s povezavo ...", + "Collapse" : "Skrči", + "Expand" : "Razširi", + "You need to be logged in to upload files" : "Za pošiljanje datotek morate biti prijavljeni v oblak", + "Drop your files to upload" : "Spustite datoteke za pošiljanje v oblak", + "Conversation messages" : "Sporočila pogovora", + "Scroll to bottom" : "Podrsajte do dna", + "Post message" : "Objavi sporočilo", + "Federated conversation" : "Zvezni pogovor", + "Public conversation" : "Javni pogovor", + "Favorite" : "Priljubljeno", + "Banned users" : "Zavrnjeni uporabniki", + "Date:" : "Datum:", + "Note:" : "Opomba:", + "Hide details" : "Skrij podrobnosti", + "Show details" : "Pokaži podrobnosti", + "Error while updating conversation name" : "Prišlo je do napake med posodabljanjem imena pogovora", + "Error while updating conversation description" : "Prišlo je do napake med posodabljanjem opisa pogovora", + "Enter a name for this conversation" : "Naziv novega pogovora", + "Edit conversation name" : "Uredi ime pogovora", + "Edit conversation description" : "Uredi opis pogovora", + "Enter a description for this conversation" : "Vpis opisa za ta pogovor", + "Picture" : "Slika", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "V pogovoru so na voljo navedeni boti. Za več možnosti stopite v stik s skrbnikom sistema.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na strežniku še ni nameščenih botov. Za uporabo te možnosti stopite v stik s skrbnikom sistema.", + "Disable" : "Onemogoči", + "Enable" : "Omogoči", + "Breakout rooms" : "Ločene skupine", + "Manage breakout rooms" : "Upravljaj ločene skupine", + "Set up breakout rooms for this conversation" : "Nastavitev ločenih skupin za ta pogovor", + "Please select a valid PNG or JPG file" : "Izbrati je treba veljavno datoteko png ali jpg.", + "Choose your conversation picture" : "Izberi sliko pogovora", + "Choose" : "Izbor", + "Error setting conversation picture" : "Prišlo je do napake med nastavljanjem slike pogovora", + "Could not set the conversation picture: {error}" : "Ni mogoče nastaviti slike pogovora: {error}", + "Error cropping conversation picture" : "Prišlo je do napake med obrezovanjem slike pogovora", + "Error removing conversation picture" : "Prišlo je do napake med odstranjevanjem slike pogovora", + "Set emoji as conversation picture" : "Nastavi izrazno ikono kot sliko pogovora", + "Set background color for conversation picture" : "Nastavi barvo ozadja za sliko pogovora", + "Upload conversation picture" : "Pošlji sliko pogovora", + "Choose conversation picture from files" : "Izberi sliko pogovore med datotekami", + "Remove conversation picture" : "Odstrani sliko pogovora", + "The file must be a PNG or JPG" : "Datoteka mora biti v zapisu PNG ali JPG", + "Set picture" : "Nastavi sliko", + "Default permissions modified for {conversationName}" : "Za pogovor {conversationName} so spremenjena privzeta dovoljenja.", + "Could not modify default permissions for {conversationName}" : "Za pogovor {conversationName} ni mogoče spremeniti privzetih dovoljenj.", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Nastavitve določajo privzeta dovoljenja udeležencev tega pogovora. Te ne posegajo v dovoljenja moderatorjev.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Po vsaki spremembi dovoljenj v tem odseku se dovoljenja po meri, predhodno dodeljena posameznim udeležencem, samodejno odstranijo.", + "All permissions" : "Vsa dovoljenja", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Udeleženci imajo dovoljenje začeti klic, se pridružiti klicu, omogočiti zvok in sliko ter omogočiti prikaz zaslona.", + "Restricted" : "Omejeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Udeleženci se lahko pridružijo klicu, vendar ne morejo omogočiti zvoka, videa in prikaza zaslona, dokler jim moderator ročno ne dodeli teh dovoljenj.", + "Advanced permissions" : "Napredna dovoljenja", + "Edit permissions" : "Uredi dovoljenja", + "Conversation settings" : "Nastavitve pogovora", + "Basic Info" : "Osnovni podatki", + "Personal" : "Osebno", + "Moderation" : "Moderacija", + "Setup overview" : "Pregled nastavitve", + "Breakout Rooms" : "Ločene skupine", + "Matterbridge" : "Matterbridge", + "Bots" : "Boti", + "Danger zone" : "Spremljanje pogovora", + "Leave conversation" : "Zapusti pogovor", + "You need to promote a new moderator before you can leave the conversation" : "Pred odhodom iz pogovora je treba nekoga določiti za moderatorja.", + "Delete conversation" : "Razumem tveganje, izbriši pogovor", + "Do you really want to delete \"{displayName}\"?" : "Ali res želite izbrisati »{displayName}«?", + "Error while deleting conversation" : "Napaka med brisanjem pogovora", + "Delete all chat messages" : "Izbriši vsa sporočila klepeta", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ali res želite izbrisati vsa sporočila v »{displayName}«?", + "Error while clearing chat history" : "Prišlo je do napake med čiščenjem zgodovine klepeta", + "Be careful, these actions cannot be undone." : "Nepremišljenega izbora možnosti spodaj ni mogoče povrniti. Priporočena je previdnost pri uporabi.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Ko pogovor enkrat zapustite, se sami ne morete več pridružiti, za pogovor morate spet prejeti povabilo. To ne velja za odprte pogovore, ti so vedno dostopni.", + "Permanently delete this conversation." : "Trajno izbriši ta pogovor.", + "Delete chat messages" : "Izbriši sporočila klepeta", + "Permanently delete all the messages in this conversation." : "Trajno izbriši vsa sporočila tega pogovora.", + "_%n hour_::_%n hours_" : ["%n ura","%n uri","%n ure","%n ur"], + "_%n day_::_%n days_" : ["%n dan","%n dneva","%n dni","%n dni"], + "_%n week_::_%n weeks_" : ["%n teden","%n tedna","%n tedne","%n tednov"], + "Custom expiration time" : "Datum preteka po meri", + "Message expiration disabled" : "Možnost preteka sporočila je onemogočena", + "Message expiration set: {duration}" : "Možnost preteka sporočila je nastavljena: {duration}", + "Error when trying to set message expiration" : "Napaka pri nastavljanju preteka sporočil", + "Message expiration" : "Pretek sporočila", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Sporočila klepeta lahko po določenem času potečejo. Opomba: datoteke, ki so v skupni rabi v klepetu, se za lastnika ne izbrišejo, vendar se bodo več zbrane v pogovoru.", + "Set message expiration" : "Nastavi pretek sporočila", + "Current message expiration" : "Trenuten pretek sporočila", + "Password copied to clipboard" : "Geslo je kopirano v odložišče!", + "Password could not be copied" : "Gesla ni mogoče kopirati.", + "Guest access" : "Dostop gostov", + "Allow guests to join this conversation via link" : "Dovoli gostom povezovanje v pogovor prek povezave", + "Password protection" : "Zaščiti z geslom", + "Set a password" : "Nastavi geslo", + "Change password" : "Spremeni geslo", + "Enter new password" : "Vpis novega gesla", + "Save password" : "Shrani geslo", + "Copy password" : "Kopiraj geslo", + "Resend invitations" : "Ponovno pošlji vabila", + "This conversation is limited to the current participants" : "Pogovor je omejen na trenutne udeležence", + "Error occurred when opening or limiting the conversation" : "Prišlo je do napake med odpiranjem oziroma omejevanjem dostopa do pogovora", + "Open conversation to registered users, showing it in search results" : "Odpri pogovor za vpisane uporabnike in prikaži pogovor med zadetki iskanja.", + "Open conversation" : "Odpri pogovor", + "Start time: {date}" : "Začetek: {date}", + "Start time has been updated" : "Čas začetka je posodobljen", + "Error occurred while updating start time" : "Prišlo je do napake med posodabljanjem časa začetka.", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Omogočanje čakalnice odstrani udeležence iz trenutnega pogovora. Vloga moderatorja se ne spremeni.", + "Enable lobby, restricting the conversation to moderators" : "Omogoči čakalnico in omeji pogovor na moderatorje", + "Meeting start time" : "Čas začetka sestanka", + "Start time (optional)" : "Čas začetka (izbirno)", + "Error occurred when locking the conversation" : "Prišlo je do napake med zaklepanjem pogovora.", + "Error occurred when unlocking the conversation" : "Prišlo je do napake med odklepanjem pogovora.", + "Lock conversation" : "Zakleni pogovor", + "This will also terminate the ongoing call." : "S tem dejanjem bo končan tudi trenutni klic.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zakleni pogovor in prepreči vsakršno objavljanje sporočil in začenjanje klicev.", + "Edit" : "Uredi", + "More information" : "Več podrobnosti", + "Delete" : "Izbriši", + "Add new bridged channel to current conversation" : "Dodaj nov premostitveni kanal za trenutni pogovor", + "unknown state" : "neznano stanje", + "running" : "zagnano", + "not running, check Matterbridge log" : "ni zagnano; preverite dnevniški zapis Matterbridge", + "not running" : "nedejavno", + "Bridge saved" : "Premostitveni kanal je shranjen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Z Matterbridge je mogoče premostiti kanale različnih sistemov hipnega sporočanja.", + "More info on Matterbridge" : "Več podrobnosti o Matterbridge", + "Enable bridge" : "Omogoči premoščanje", + "Show Matterbridge log" : "Pokaži dnevnik Matterbridge", + "Log content" : "Vsebina dnevnika", + "Notifications" : "Obvestila", + "Notify about calls in this conversation" : "Obvesti o klicih v pogovoru", + "Important conversation" : "Pomemben pogovor", + "SIP dial-in is now possible without PIN requirement" : "Klicanje preko SIP je mogoče brez zahteve vpisa kode PIN", + "SIP dial-in is now enabled" : "Povezovanje prek klicne seje SIP je omogočeno", + "SIP dial-in is now disabled" : "Povezovanje prek klicne seje SIP je onemogočeno", + "Error occurred when enabling SIP dial-in" : "Prišlo je do napake med omogočanjem povezave prek klicne seje SIP", + "Error occurred when disabling SIP dial-in" : "Prišlo je do napake med onemogočanjem povezave prek klicne seje SIP", + "Phone and SIP dial-in" : "Telefonske in klicne povezave SIP", + "Enable phone and SIP dial-in" : "Omogoči telefonske in klicne povezave SIP", + "Allow to dial-in without a PIN" : "Dovoli klicanje brez kode PIN", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "Join" : "Pridruži se", + "Error while creating the conversation" : "Prišlo je do napake med ustvarjanjem pogovora", + "Create a new conversation" : "Ustvari nov pogovor", + "Join open conversations" : "Pridruži se odprtemu pogovoru", + "Call a phone number" : "Pokliči telefonsko številko", + "Unread mentions" : "Neprebrane omembe", + "Create conversation" : "Ustvari pogovor", + "Enter your name" : "Vpišite ime", + "Submit name and join" : "Pošlji ime in se pridruži", + "Log in" : "Prijava", + "Import a file" : "Uvozi datoteko", + "Browse" : "Prebrskaj", + "Verifying uploaded file …" : "Overi poslano datoteko ...", + "This might take a moment" : "Opravilo lahko traja.", + "Send invitations" : "Pošlji vabila", + "Creating the conversation …" : "Poteka ustvarjanje pogovora ...", + "Mark as read" : "Označi kot prebrano", + "Mark as unread" : "Označi kot neprebrano", + "Remove from favorites" : "Odstrani iz priljubljenih", + "Add to favorites" : "Dodaj med priljubljene", + "You need to promote a new moderator before you can leave the conversation." : "Pred odhodom iz pogovora je treba nekoga določiti za moderatorja.", + "Conversation actions" : "Dejanja pogovora", + "Hide message text" : "Skrij besedilo sporočila", + "Pending invitations" : "Čakajoča vabila", + "Decline invitation" : "Zavrni povabilo", + "Accept invitation" : "Sprejmi povabilo", + "Home" : "Začetna stran", + "Unread" : "Neprebrano", + "Mentions" : "Omembe", + "Meetings" : "Srečanja", + "Alphabetically" : "Abecedno", + "No matches found" : "Ni najdenih zadetkov", + "No conversations found" : "Pogovora ni mogoče najti", + "You have no unread mentions." : "Ni neodgovorjenih omemb.", + "You have no unread messages." : "Ni neodgovorjenih spodočil.", + "An error occurred while performing the search" : "Me iskanjem je prišlo do napake", + "Conversation list" : "Seznam pogovorov", + "Unread messages" : "Neprebrana sporočila", + "Clear filters" : "Počisti filtre", + "New personal note" : "Novo osebno sporočilo", + "Clear filter" : "Počisti filter", + "App settings" : "Nastavitve programa", + "Users" : "Uporabniki", + "Groups" : "Skupine", + "Teams" : "Ekipe", + "Federated users" : "Zvezni uporabniki", + "New private conversation" : "Nov zasebni pogovor", + "Other sources" : "Drugi viri", + "Open conversations" : "Odprti pogovori", + "No search results" : "Ni zadetkov iskanja", + "Users, groups and teams" : "Uporabniki, skupine in ekipe", + "Users and groups" : "Uporabniki in skupine", + "Users and teams" : "Uporabniki in ekipe", + "Groups and teams" : "Skupine in ekipe", + "The meeting will start soon" : "Srečanje se bo kmalu začelo", + "This meeting is scheduled for {startTime}" : "Začetek srečanja je načrtovan ob {startTime}", + "You are currently waiting in the lobby" : "Trenutno čakate v spletni čakalnici.", + "Select microphone" : "Izbor mikrofona", + "No microphone available" : "Ni razpoložljivega mikrofona", + "Select camera" : "Izbor kamere", + "No camera available" : "Ni razpoložljive kamere", + "Select a device" : "Izbor naprave", + "Playing …" : "Predvajanje ...", + "Test speakers" : "Preizkusi zvočnike", + "Test" : "Preizkus", + "Devices" : "Naprave", + "Backgrounds" : "Ozadja", + "No audio" : "Brez zvoka", + "No camera" : "Ni zaznane kamere", + "Calls are not supported in your browser" : "Klici v tem brskalniku niso podprti", + "Access to microphone is only possible with HTTPS" : "Dostop do mikrofona je mogoče le prek protokola HTTPS", + "Access to microphone was denied" : "Dostop do mikrofona je bil zavrnjen.", + "Error while accessing microphone" : "Napaka med dostopom do mikrofona", + "Access to camera is only possible with HTTPS" : "Dostop do kamere je mogoče le prek protokola HTTPS", + "The call is being recorded." : "Klic se snema.", + "The call might be recorded." : "Klic se morda snema.", + "Apply settings" : "Uveljavi nastavitve", + "Select virtual office background" : "Izbor slike pisarne za ozadje", + "Select virtual home background" : "Izbor domačega okolja za sliko ozadja", + "Select virtual abstract background" : "Izbor abstraktne slike za ozadje", + "Select virtual beach background" : "Izbor slike plaže za ozadje", + "Select virtual park background" : "Izbor slike parka za ozadje", + "Select virtual theater background" : "Izbor slike gledališče za ozadje", + "Select virtual library background" : "Izbor slike knjižnice za ozadje", + "Select virtual space station background" : "Izbor slike vesoljske postaje za ozadje", + "Error while uploading the file" : "Prišlo je do napake med pošiljanjem slike", + "Select a file" : "Izbor datoteke", + "Invalid path selected" : "Izbrana je neveljavna pot", + "Select virtual background from file {fileName}" : "Izbor slike ozadje iz datoteke {fileName}", + "Blur" : "Zameglitev", + "Upload" : "Pošlji", + "Files" : "Datoteke", + "(editing)" : "(urejanje)", + "(edited)" : "(spremenjeno)", + "The message has expired or has been deleted" : "Sporočilo je poteklo ali pa je bilo izbrisano", + "Cancel quote" : "Prekliči navedek", + "24 hours" : "24 ur", + "7 days" : "7 dni", + "Clear reminder – {timeLocale}" : "Počisti opomnik – {timeLocale}", + "Message text copied to clipboard" : "Besedilo sporočila je kopirano v odložišče", + "Message text could not be copied" : "Besedila sporočila ni mogoče kopirati", + "A reminder was successfully removed" : "Opomnik je uspešno odstranjen", + "Error occurred when removing a reminder" : "Prišlo je do napake med odstranjevanjem opomnika", + "Error occurred when creating a reminder" : "Prišlo je do napake med ustvarjanjem opomnika", + "Add a reaction to this message" : "Dodaj odziv na to sporočilo", + "Reply" : "Odgovori", + "More actions" : "Več dejanj", + "Set reminder" : "Nastavi opomnik", + "Reply privately" : "Odgovori zasebno", + "Edit message" : "Uredi sporočilo", + "Copy message" : "Kopiraj sporočilo", + "Copy message link" : "Kopiraj povezavo sporočila", + "Go to file" : "Odpri mesto datoteke", + "Download file" : "Prejmi datoteko", + "Forward message" : "Posreduj sporočilo", + "Translate" : "Prevodi", + "Set custom reminder" : "Nastavi opomnik po meri", + "Close reactions menu" : "Zapri meni odzivov", + "React with {emoji}" : "Odzovi se z {emoji}", + "React with another emoji" : "Odzovi se z novo izrazno ikono", + "Choose a conversation to forward the selected message." : "Izbor pogovora za posredovanje izbranega sporočila.", + "Error while forwarding message" : "Prišlo je do napake med posredovanjem sporočil.", + "The message has been forwarded to {selectedConversationName}" : "Sporočilo je posredovano v pogovor {selectedConversationName}", + "Dismiss" : "Opusti", + "Go to conversation" : "Pojdi na pogovor", + "Detect language" : "Zaznava jezika", + "The message could not be translated" : "Sporočila ni mogoče prevesti", + "Translation copied to clipboard" : "Prevod je kopiran v odložišče", + "Translation could not be copied" : "Prevoda ni mogoče kopirati!", + "Translate message" : "Prevedi sporočilo", + "Source language to translate from" : "Izvorni jezik za prevod", + "Translate from" : "Prevedi iz", + "Target language to translate into" : "Ciljni jezik za prevod", + "Translate to" : "Prevedi v", + "Translating" : "Poteka prevajanje", + "Copy translated text" : "Kopiraj prevedeno besedilo", + "Send now" : "Pošlji takoj", + "Message read by everyone who shares their reading status" : "Sporočilo lahko prebere vsak, ki objavlja nastavitev stanja branja", + "Message sent" : "Sporočilo je poslano", + "Deleting message" : "Brisanje sporočila", + "Message deleted successfully" : "Sporočilo je uspešno izbrisano", + "Message could not be deleted because it is too old" : "Sporočila ni mogoče izbrisati, ker je prestaro", + "Only normal chat messages can be deleted" : "Izbrisati je mogoče le običajna sporočila v klepetu", + "An error occurred while deleting the message" : "Prišlo je do napake med brisanjem sporočila", + "Your browser does not support playing audio files" : "Določen spletni brskalnik ne podpira možnosti predvajanja zvoka.", + "Contact" : "Stik", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Naloga Deck", + "Remove {fileName}" : "Odstrani datoteko {fileName}", + "Open this location in OpenStreetMap" : "Odpri to mesto v programu Openstreetmap", + "Sending message" : "Poteka pošiljanje sporočila", + "Failed to send the message. Click to try again" : "Pošiljanje sporočila je spodletelo. Poskusite znova.", + "Not enough free space to upload file" : "Ni dovolj prostora za pošiljanje datoteke", + "You cannot send messages to this conversation at the moment" : "Trenutno v ta pogovor ni mogoče pošiljati sporočil.", + "Could not update the message" : "Sporočila ni mogoče posodobiti", + "Open poll" : "Odprta anketa", + "See results" : "Pokaži rezultate", + "Reactions" : "Odzivi", + "No permission to post reactions in this conversation" : "Ni ustreznih dovoljenj za objavo odzivov v pogovoru", + "Show all reactions" : "Pokaži vse odzive", + "Add more reactions" : "Dodaj več odzivov", + "Show or collapse system messages" : "Pokaže ali skrije sistemska sporočila", + "No messages" : "Ni sporočil", + "All messages have expired or have been deleted." : "Vsa sporočila so potekla ali pa so bila izbrisana", + "Unpin" : "Odpni", + "Cancel search" : "Prekliči iskanje", + "Add a phone number" : "Dodaj telefonsko številko", + "Create a new group conversation" : "Ustvari nov skupinski pogovor", + "Add participants" : "Dodaj udeležence", + "Conversation visibility" : "Vidnost pogovora", + "Allow guests to join via link" : "Dovoli gostom povezovanje prek povezave", + "Enter password" : "Vpis gesla", + "This conversation has been locked" : "Ta pogovor je zaklenjen", + "No permission to post messages in this conversation" : "Za objavo sporočil v ta pogovor so zahtevana posebna dovoljenja.", + "Joining conversation …" : "Poteka povezovanje v pogovor ...", + "Send message silently" : "Sporočila pošlji tiho", + "Send message" : "Pošlji sporočilo", + "Send without notification" : "Pošlji brez obvestila", + "The participant will not be notified about new messages" : "Udeleženec ne bo obveščen o tem sporočilu", + "File to share" : "Datoteka za souporabo", + "File upload is not available in this conversation" : "V tem pogovoru pošiljanje datotek ni mogoče", + "Add emoji" : "Vstavi izrazno ikono", + "Send later" : "Pošlji kasneje", + "Cancel editing" : "Prekliči urejanje", + "{user} is out of office and might not respond." : "{user} ni na voljo in morda ne bo odziva.", + "Share from {nextcloud}" : "Pošlji iz {nextcloud}", + "Share from Files" : "Poveži iz oblaka", + "Share files to the conversation" : "Poveži datoteke s pogovorom", + "Upload from device" : "Pošlji z naprave", + "Create new poll" : "Ustvari novo anketo", + "Smart picker" : "Pametni izbirnik", + "Record voice message" : "Posnemi glasovno sporočilo", + "End recording and send" : "Končaj snemanje in pošlji", + "Dismiss recording" : "Opusti posnetek", + "Access to the microphone was denied" : "Dostop do mikrofona je bil zavrnjen.", + "Microphone either not available or disabled in settings" : "Mikrofon ni na voljo ali pa je onemogočen med nastavitvami", + "Error while recording audio" : "Prišlo je do napake med snemanjem zvoka", + "New file" : "Nova datoteka", + "Blank" : "Prazno", + "Error while creating file" : "Prišlo je do napake med ustvarjanjem datoteke", + "Create and share a new file" : "Ustvari in omogoči souporabo nove datoteke", + "Name of the new file" : "Ime nove datoteke", + "Create file" : "Ustvari datoteko", + "Someone is typing …" : "Nekdo vnaša besedilo ...", + "{user1} is typing …" : "{user1} vnaša besedilo ...", + "{user1} and {user2} are typing …" : "{user1} in {user2} vnašata besedilo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} in {user3} vnašajo besedilo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} in %n drug uporabnik vnašajo besedilo …","{user1}, {user2}, {user3} in %n druga uporabnika vnašajo besedilo …","{user1}, {user2}, {user3} in %n drugih uporabniki vnašajo besedilo …","{user1}, {user2}, {user3} in %n drugih uporabnikov vnaša besedilo …"], + "Add more files" : "Dodaj več datotek", + "Send" : "Pošlji", + "In this conversation {user} can:" : "V tem pogovoru lahko {user}:", + "Edit default permissions for participants in {conversationName}" : "Napredna dovoljenja za udeležence v pogovoru {conversationName}", + "Start a call" : "Začenjanje klicev", + "Skip the lobby" : "Preskakovanje čakalnice", + "Can post messages and reactions" : "Pošiljanje sporočil in odzivov", + "Enable the microphone" : "Omogočanje mikrofona", + "Enable the camera" : "Omogočanje kamere", + "Share the screen" : "Omogočanje prikaza zaslona", + "Update permissions" : "Posodobi dovoljenja", + "Updating permissions" : "Poteka posodabljanje dovoljenj", + "Create poll" : "Ustvari anketo", + "Question" : "Vprašanje", + "Ask a question" : "Zastavite vprašanje", + "Answers" : "Dogovori", + "Answer {option}" : "Odgovor {option}", + "Delete poll option" : "Izbriši možnost ankete", + "Add answer" : "Dodaj odgovor", + "Settings" : "Nastavitve", + "Anonymous poll" : "Anonimna anketa", + "Multiple answers" : "Več odgovorov", + "You voted for this option" : "Glasovali ste za to možnost", + "End poll" : "Končaj anketo", + "Change your vote" : "Spremenite glasovanje", + "Results" : "Zadetki", + "Voted participants" : "Dejavni udeleženci", + "Send a message to \"{roomName}\"" : "Pošlji sporočilo v skupino »{roomName}«", + "Hide list of participants" : "Skrij seznam udeležencev", + "Show list of participants" : "Pokaži seznam udeležencev", + "Assistance requested in {roomName}" : "Poslana je zahteva za pomoč v ločeni skupini {roomName}", + "The message was sent to \"{roomName}\"" : "Sporočilo je poslano v skupino »{roomName}«", + "Dismiss request for assistance" : "Opusti zahtevo za pomoč", + "Send message to room" : "Pošlji sporočilo v ločene skupine", + "Back to main room" : "Nazaj na skupno mesto", + "Back to your room" : "Nazaj v dodeljeno ločeno skupino", + "Message all rooms" : "Sporočilo za vse ločene skupine", + "Start session" : "Začni sejo", + "Start a call before you start a breakout room session" : "Pred odpiranjem ločenih skupin je treba začeti klic", + "Stop session" : "Zaustavi sejo", + "The message was sent to all breakout rooms" : "Sporočilo je bilo poslano v vse ločene skupine", + "Send a message to all breakout rooms" : "Pošlji sporočilo v vse ločene skupine", + "Breakout rooms are not started" : "Ločene seje niso zagnane", + "Disable lobby" : "Onemogoči čakalnico", + "Settings for participant \"{user}\"" : "Nastavitve za udeleženca »{user}«", + "Participant \"{user}\"" : "Uporabnik »{user}«", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gost", + "Ringing …" : "Zvoni na drugi strani ...", + "Call rejected" : "Klic je zavrnjen", + "{time} talking …" : "{time} pogovora …", + "{time} talking time" : "{time} pogovora", + "Raised their hand" : "Dvigne roko", + "Joined with video" : "Povezano z videom", + "Joined via phone" : "Povezano pred telefona", + "Joined with audio" : "Povezano z zvokom", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Opis lahko sestavlja največ {maxLength} znakov. Trenutno sporočilo jih ima {charactersCount}.", + "Remove group and members" : "Odstrani skupino in člane", + "Remove team and members" : "odstrani ekipo in člane", + "Remove participant" : "Odstrani udeleženca", + "Permissions set to default for {displayName}" : "Dovoljenja za {displayName} so nastavljena na privzete vrednosti.", + "Phone number could not be muted" : "Telefonske številke ni mogoče utišati", + "Phone number could not be unmuted" : "Telefonski številki ni mogoče povrniti glasu", + "DTMF message could not be sent" : "Sporočila DTMF ni mogoče poslati.", + "Phone number copied to clipboard" : "Telefonska številka je kopirana v odložišče", + "Phone number could not be copied" : "Telefonske številke ni mogoče kopirati", + "in the lobby" : "v čakalnici", + "Dial out phone" : "Pokliči telefon", + "Hang up phone" : "Prekini telefon", + "Move back to lobby" : "Premakni nazaj v čakalnico", + "Move to conversation" : "Premakni v pogovor", + "Dial-in PIN" : "Koda PIN klica", + "Demote from moderator" : "Odstrani vlogo moderatorja", + "Promote to moderator" : "Dodeli vlogo moderatorja", + "Resend invitation" : "Ponovno pošlji vabilo", + "Send call notification" : "Pošlji obvestilo klica", + "Dial out phone number" : "Pokliči telefonsko številko", + "Resume call for phone number" : "Obnovi klic telefonske številke", + "Put phone number on hold" : "Zadrži klic telefonske številke", + "Unmute phone number" : "Povrni zvok telefonske številke", + "Mute phone number" : "Utišaj telefonsko številko", + "Copy phone number" : "Kopiraj telefonsko številko", + "Reset custom permissions" : "Ponastavi dovoljenja po meri", + "Grant all permissions" : "Odobri vsa dovoljenja", + "Remove all permissions" : "Odstrani vsa dovoljenja", + "Remove" : "Odstrani", + "Add users, groups or teams" : "Dodaj uporabnike, skupine in ekipe", + "Add users or groups" : "Dodaj uporabnike ali skupine", + "Add users or teams" : "Dodaj uporabnike ali ekipe", + "Add users" : "Dodaj uporabnike", + "Add groups or teams" : "Dodaj skupine ali ekipe", + "Add groups" : "Dodaj skupine", + "Add teams" : "Dodaj ekipe", + "Add other sources" : "Dodaj druge vire", + "Add emails" : "Dodaj elektronske naslove", + "Integrations" : "Združevalniki", + "Add federated users" : "Dodaj zvezne uporabnike", + "Searching …" : "Poteka iskanje ...", + "Search for more users" : "Poišči več uporabnikov", + "Search or add participants" : "Iskanje in dodajanje udeležencev", + "An error occurred while adding the participants" : "Prišlo je do napake med dodajanjem udeležencev", + "Participants" : "Udeleženci", + "Participants ({count})" : "Udeleženci ({count})", + "Open chat" : "Odpri klepet", + "You have new unread messages in the chat." : "V pogovoru imate neprebrana sporočila.", + "You have been mentioned in the chat." : "Omenjeni ste bili v klepetu.", + "Chat" : "Pogovor", + "Details" : "Podrobnosti", + "Shared items" : "Predmeti v souporabi", + "Search options" : "Možnosti iskanja", + "Until" : "Do", + "No results found" : "Ni najdenih zadetkov", + "Load more results" : "Naloži več zadetkov", + "Projects" : "Projekti", + "No shared items" : "Ni predmetov v souporabi", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Povezava do pogovora", + "No open conversations found" : "Ni mogoče najti nobenega odprtega pogovora", + "Either there are no open conversations or you joined all of them." : "Ali ni odprtih pogovorov ali pa ste se pridružili vsem.", + "Check spelling or use complete words." : "Preveri črkovanje oziroma uporabi celotne besede.", + "Search conversations or users" : "Poišči med stiki in pogovori", + "Select conversation" : "pogovora", + "Number length is not valid" : "Dolžina telefonske številke ni veljavna", + "Region code is not valid" : "Koda regije ni veljavna", + "Number length is too short" : "Dolžina telefonske številke je prekratka", + "Number length is too long" : "Dolžina telefonske številke je predolga", + "Number is not valid" : "Številka ni veljavna", + "Phone numbers" : "Telefonske številke", + "Display name: {name}" : "Prikazano ime: {name}", + "Edit display name" : "Uredi prikazno ime", + "Save name" : "Shrani ime", + "Error while saving sounds setting" : "Prišlo je do napake med shranjevanjem nastavitev zvoka", + "Play sounds when participants join or leave a call" : "Predvajaj zvok ob priklopu oziroma odklopu uporabnika.", + "Notification settings" : "Nastavitve obveščanja", + "Default language" : "Privzeti jezik", + "Select location for attachments" : "Izbor mesta prilog", + "Error while setting attachment folder" : "Napaka med nastavljanjem mape prilog", + "Error while setting read status privacy" : "Napaka med nastavljanjem stanja zasebnosti", + "Error while setting typing status privacy" : "Napaka med nastavljanjem zasebnosti stanja pisanja", + "Privacy" : "Zasebnost", + "Attachments folder" : "Mapa prilog", + "Toggle full screen" : "Preklopi celozaslonski način", + "Search" : "Odpre iskalno polje.", + "Focus the chat input" : "V žarišče postavi vnosno polje klepeta", + "Unfocus the chat input to use shortcuts" : "Zaustavi vnos besedila za uporabo tipkovnih bližnjic.", + "Shortcuts while in a call" : "Omogoči tipkovne bližnjice tudi v času klica.", + "Camera on and off" : "Preklop in izklop kamere", + "Microphone on and off" : "Preklopi delovanje mikrofona", + "Raise or lower hand" : "Dvigne ali Spusti digitalno roko", + "Push to talk or push to mute" : "Pritisk tipke omogoči govor, ponoven pritisk utišanje.", + "Start call silently" : "Začni klic tiho", + "Start call" : "Začni klic", + "End call" : "Končaj klic", + "You will be able to join the call only after a moderator starts it." : "Pogovoru se je mogoče pridružiti šele, ko ga moderator začne.", + "End call for everyone" : "Končaj klic za vse", + "Starting the recording" : "Poteka začenjanje snemanja", + "Recording" : "Snemanje", + "The call has been running for one hour." : "Pogovor traja že eno uro.", + "Cancel recording start" : "Prekliči začenjanje snemanja", + "Stop recording" : "Ustavi snemanje", + "Send a reaction" : "Pošlji odziv", + "React with {reaction}" : "Odzovi se z {reaction}", + "_%n participant in call_::_%n participants in call_" : ["Sodeluje %n udeleženec","Sodelujeta %n udeleženca","Sodelujejo %n udeleženci","Sodeluje %n udeležencev"], + "You are not allowed to enable screensharing" : "Ni ustreznih dovoljenj za omogočanje prikaza zaslonske slike", + "No screensharing" : "Prikaz zaslona ni na voljo", + "Screensharing options" : "Možnosti prikazovanja zaslona", + "Enable screensharing" : "Omogoči souporabo zaslona", + "Bad sent video and screen quality." : "Poslana je slaba kakovost videa in slike zaslona. ", + "Bad sent screen quality." : "Poslana je slaba kakovost slike zaslona.", + "Bad sent video quality." : "Poslana je slaba kakovost videa.", + "Bad sent audio, video and screen quality." : "Poslana je slaba kakovost videa, zvoka in slike zaslona.", + "Bad sent audio and screen quality." : "Poslana je slaba kakovost zvoka in slike zaslona.", + "Bad sent audio and video quality." : "Poslana je slaba kakovost videa in zvoka.", + "Bad sent audio quality." : "Poslana je slaba kakovost zvoka.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato udeleženci morda ne bodo videli zaslona. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Disable background blur" : "Onemogoči motno ozadje", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato udeleženci morda ne bodo zaslona. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo videli zaslonske slike.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo videli.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli in videli. Za izboljšanje prikaza poskusite med prikazom zaslona video onemogočiti.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato drugi udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite onemogočiti prikazovanje zaslona.", + "Disable screenshare" : "Onemogoči souporabo zaslona", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli in videli. Za izboljšanje prikaza poskusite onemogočiti video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli.", + "Screen sharing is not supported by your browser." : "Uporabljen spletni brskalnik ne podpira prikazovanja zaslona", + "Screen sharing requires the page to be loaded through HTTPS." : "Prikaz zaslona zahteva povezavo strani prek protokola HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Prikaz zaslona zahteva povezavo strani prek protokola HTTPS.", + "An error occurred while starting screensharing." : "Prišlo je do napake med omogočanjem souporabe zaslona.", + "Show your screen" : "Pokaži zaslon", + "Stop screensharing" : "Prekini prikaz zaslona", + "Mute others" : "Utišaj ostale", + "Start recording" : "Začni s snemanjem", + "Set up breakout rooms" : "Začni ločene sobe", + "Remove participant {name}" : "Odstrani udeleženca {name}", + "Delete now" : "Izbriši", + "Keep" : "Ohrani", + "Open dialpad" : "Pokaži številčnico", + "Select a region" : "Izbor regije", + "Local time: {time}" : "Krajevni čas: {time}", + "Search …" : "Poišči …", + "Message without mention" : "Sporočilo brez omenjanja", + "Mention myself" : "Omenjanje sebe", + "Mention everyone" : "Omeni vse", + "Select a conversation" : "Izbor pogovora", + "Select a mode" : "Izbor načina", + "The conversation does not exist" : "Pogovor ne obstaja", + "Join a conversation or start a new one!" : "Pridružite se pogovoru ali pa začnite novega!", + "Duplicate session" : "Podvojena seja", + "Join a conversation or start a new one" : "Pridružite se pogovoru, ali pa začnite novega.", + "Error while joining the conversation" : "Prišlo je do napake med pridruževanjem k pogovoru", + "Nextcloud URL" : "Naslov URL Nextcloud", + "Nextcloud user" : "Uporabnik Nextcloud", + "User password" : "Uporabniško geslo", + "Talk conversation" : "Pogovor Talk", + "Skip TLS verification" : "Preskoči overjanje TLS", + "Matrix server URL" : "Naslov URL strežnika Matrix", + "User" : "Uporabnik", + "Matrix channel" : "Kanal Matrix", + "Mattermost server URL" : "Naslov URL strežnika Mattermost", + "Mattermost user" : "Uporabnik Mattermost", + "Team name" : "Ime skupine", + "Channel name" : "Ime kanala", + "Rocket.Chat server URL" : "Naslov URL strežnika Rocket.Chat", + "User name or email address" : "Uporabniško ime ali elektronski naslov", + "Rocket.Chat channel" : "Kanal Rocket.Chat", + "Zulip server URL" : "Naslov URL strežnika Zulip", + "Bot user name" : "Ime uporabniškega bota", + "Bot API key" : "Ključ vmesnika API bota", + "Zulip channel" : "Kanal Zulip", + "API token" : "Žeton vmesnika API", + "Slack channel" : "Kanal Slack", + "Server ID or name" : "Določilo ID strežnika ali ime", + "Channel" : "Kanal", + "Login" : "Prijava", + "Chat ID" : "Določilo ID klepeta", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Naslov URL strežnika IRC (npr. chat.freenode.net:6667)", + "Nickname" : "Vzdevek", + "Connection password" : "Geslo povezave", + "IRC channel" : "Kanal IRC", + "Channel password" : "Geslo kanala", + "NickServ nickname" : "Vzdevek NickServ", + "NickServ password" : "Geslo NickServ", + "Use TLS" : "Uporabi TLS", + "Use SASL" : "Uporabi SASL", + "Tenant ID" : "ID Udeleženca", + "Client ID" : "ID odjemalca", + "Team ID" : "ID Skupine", + "Thread ID" : "ID Niti", + "XMPP/Jabber server URL" : "Naslov URL strežnika XMPP/Jabber", + "MUC server URL" : "Naslov URL strežnika MUC", + "Jabber ID" : "Jabber ID", + "Media" : "Predstavna vsebina", + "Polls" : "Ankete", + "Deck cards" : "Zbirke nalog", + "Voice messages" : "Glasovna sporočila", + "Locations" : "Mesta", + "Call recordings" : "Posnetki klicev", + "Audio" : "Zvok", + "Show all media" : "Pokaži vso predstavno vsebino", + "Show all files" : "Pokaži vse datoteke", + "Show all polls" : "Pokaži vse ankete", + "Show all deck cards" : "Pokaži vse zbirke nalog", + "Show all voice messages" : "Pokaži vsa glasovna sporočila", + "Show all locations" : "Pokaži vsa mesta", + "Show all call recordings" : "Pokaži vse posnetke klicev", + "Show all audio" : "Pokaži vse zvočne posnetke", + "Show all other" : "Pokaži vse ostalo", + "Group" : "Skupina", + "Team" : "Skupina", + "You: {lastMessage}" : "Jaz: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pogovoru ste se pridružili v novem oknu brskalnika, ali na drugi napravi. Nextcloud Talk te možnosti trenutno ne omogoča. Kako želite nadaljevati?", + "Leave this page" : "Zapusti trenutno stran", + "Join here" : "Pridruži se v tem oknu", + "An error occurred while posting deck card to conversation" : "Prišlo je do napake med dodajanjem naloge v pogovor.", + "Post to a conversation" : "Dodaj v pogovor", + "Post to conversation" : "Dodaj v pogovor", + "The recording failed. Please contact your administrator." : "Snemanje je spodletelo. Stopite v stik s skrbnikom sistema.", + "An error occurred while posting location to conversation" : "Prišlo je do napake med pošiljanjem podatkom o trenutnem mestu v pogovor.", + "Share to a conversation" : "Objavi v pogovor", + "Share to conversation" : "Dodaj v pogovor", + "In conversation" : "V pogovoru", + "Error while clearing conversation history" : "Prišlo je do napake med čiščenjem zgodovine pogovora", + "Error occurred while allowing guests" : "Prišlo je do napake med omogočanjem dostopa gostov.", + "Error occurred while disallowing guests" : "Prišlo je do napake med onemogočanjem dostopa gostov.", + "Error occurred when restricting the conversation to moderator" : "Prišlo je do napake med omejevanjem pogovora za moderatorja.", + "Error occurred when opening the conversation to everyone" : "Prišlo je do napake med odpiranjem pogovora za vse udeležence.", + "Conversation password has been saved" : "Geslo pogovora je shranjeno", + "Conversation password has been removed" : "Geslo pogovora je odstranjeno", + "Error occurred while saving conversation password" : "Prišlo je do napake med shranjevanjem gesla pogovora.", + "Call recording is starting." : "Začenja se snemanje pogovora", + "Call recording stopped while starting." : "Začenja se snemanje pogovora se je ustavilo.", + "Call recording stopped. You will be notified once the recording is available." : "Snemanje klica je ustavljeno. Ko bo posnetek na voljo, bo prikazano obvestilo.", + "Conversation picture set" : "Slika pogovora je nastavljena", + "Conversation picture deleted" : "Slika pogovora je izbrisana", + "Could not delete the conversation picture" : "Ni mogoče izbrisati slike pogovora", + "Could not post message: {errorMessage}" : "Sporočila ni mogoče objaviti: {errorMessage}", + "An error occurred while fetching the participants" : "Med pridobivanjem udeležencev je prišlo do napake", + "Could not send invitation to {actorId}" : "Ni mogoče poslati povabila: {actorId}.", + "Invitations sent" : "Vabila so poslana.", + "Error occurred when sending invitations" : "Med pošiljanjem vabil je prišlo do napake.", + "An error occurred while creating breakout rooms" : "Prišlo je do napake med ustvarjanjem ločenih skupin", + "An error occurred while deleting breakout rooms" : "Prišlo je do napake med brisanjem ločenih skupin", + "An error occurred while starting breakout rooms" : "Prišlo je do napake med začenjanjem ločenih skupin", + "An error occurred while stopping breakout rooms" : "Prišlo je do napake med prekinjanjem ločenih skupin", + "An error occurred while sending a message to the breakout rooms" : "Prišlo je do napake med pošiljanjem sporočila v ločene skupine", + "An error occurred while requesting assistance" : "Prišlo je do napake med pošiljanjem zahteve za pomoč", + "An error occurred while resetting the request for assistance" : "Prišlo je do napake med ponastavljanjem zahteve za pomoč", + "An error occurred while joining breakout room" : "Prišlo je do napake med pridruževanjem v ločeno skupino", + "{guest} (guest)" : "{guest} (gost)", + "An error occurred while submitting your vote" : "Prišlo je do napake med pošiljanjem odziva na anketo", + "An error occurred while ending the poll" : "Prišlo je do napake med končanjem ankete", + "Failed to add reaction" : "Dodajanje odziva je spodletelo", + "Failed to remove reaction" : "Odstranjevanje odziva je spodletelo", + "Error while uploading file \"{fileName}\"" : "Napaka pri pošiljanju datoteke »{fileName}«", + "Not enough free space to upload file \"{fileName}\"" : "Ni dovolj prostora za pošiljanje datoteke »{fileName}«", + "You are not allowed to share files" : "Ni ustreznih dovoljenj za omogočanje souporabe datotek", + "Error while sharing file" : "Prišlo je do napake med souporabo datoteke", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Brskalnik, ki ga trenutno uporabljate ne podpira popolnoma možnosti programa Nextcloud Talk. Priporočljivo je uporabiti najnovejšo različico brskalnika Mozilla Firefox, Microsoft Edge, Google Chrome oziroma Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Čez %n uro","Čez %n uri","Čez %n ure","Čez %n ur"], + "_%n minute _::_%n minutes_" : ["%n minuta","%n minuti","%n minute","%n minut"], + "In {hours} and {minutes}" : "Čez {hours} in {minutes}", + "_In %n minute_::_In %n minutes_" : ["Čez %n minuto","Čez %n minuti","Čez %n minute","Čez %n minut"], + "Later today – {timeLocale}" : "Danes – {timeLocale}", + "Tomorrow – {timeLocale}" : "Jutri – {timeLocale}", + "This weekend – {timeLocale}" : "Ta teden – {timeLocale}", + "Next week – {timeLocale}" : "Naslednji teden – {timeLocale}", + "Message link copied to clipboard" : "Povezava sporočila je kopirana v odložišče.", + "Conversation link copied to clipboard" : "Povezava do pogovora je kopirana v odložišče.", + "The link could not be copied" : "Povezave ni mogoče kopirati.", + "Sending signaling message has failed" : "Pošiljanje signalnega sporočila je spodletelo.", + "Lost connection to signaling server. Trying to reconnect." : "Povezava s signalnim strežnikom je izgubljena. Izveden bo ponovni poskus povezave.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nastavljen signalni strežnik je treba posodobiti, da bo skladen s trenutno uporabljeno različico programa Talk. Stopite v stik s skrbnikom sistema.", + "Please reload the page." : "Stran je treba osvežiti.", + "Do not disturb" : "Ne pustim se motiti", + "Away" : "Trenutno ne spremljam", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Zvočnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Kaže, da govorite, medtem ko ste utišani. Povrnite zvok, da vas drugi udeleženci slišijo.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ni mogoče vzpostaviti povezave z niti enim udeležencem. Za vaš pogovor je morda treba nastaviti strežnik TURN. Stopite v stik s skrbnikom za nastavitev po navodilih, zapisanih v {linkstart}documentaciji{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Opravilo traja dlje, kot je pričakovano. Ali so dovoljenja za dostop do predstavnih predmetov odobrena (ali zavrnjena)? Če to drži, ponovno zaženite brskalnik, ker trenutno zvoka in slike ni mogoče uporabiti.", + "Access to microphone & camera is only possible with HTTPS" : "Dostop do mikrofona in kamere je mogoče le z uporabo protokola HTTPS", + "Please move your setup to HTTPS" : "Prilagodite nastavite za uporabo protokola HTTPS", + "Access to microphone & camera was denied" : "Dostop do mikrofona in kamere je bil zavrnjen.", + "WebRTC is not supported in your browser" : "Uporabljen brskalnik ne podpira protokola WebRTC", + "Please use a different browser like Firefox or Chrome" : "Priporočljivo je uporabiti drug brskalnik, kot sta Firefox in Chrome", + "Error while accessing microphone & camera" : "Napaka med dostopom do mikrofona in kamere", + "%s Talk on your mobile devices" : "%s Talk na vaši mobilni napravi", + "Join conversations at any time, anywhere, on any device." : "Pridružite se pogovoru kadarkoli, kjerkoli in s katerekoli naprave.", + "Android app" : "Odjemalec za Android", + "iOS app" : "Odjemalec za iOS", + "__language_name__" : "Slovenščina", + "Call summary (%s)" : "Povzetek klica (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Vstavek za povzetek klica po koncu pogovora pokaže pregledno sporočilo, v katerem so navedeni vsi udeleženci in opisane naloge.", + "Tasks" : "Naloge", + "Notes" : "Beležke", + "Reports" : "Poročila", + "Decisions" : "Odločitve", + "Call summary" : "Povzetek klica", + "Call summary - {title}" : "Povzetek klica – {title}", + "Next meeting" : "Naslednje srečanje", + "Set reminder for later today" : "Nastavi opomnik za danes", + "Set reminder for tomorrow" : "Nastavi opomnik za jutri", + "Set reminder for this weekend" : "Nastavi opomnik za ta teden", + "Set reminder for next week" : "Nastavi opomnik za naslednji teden", + "Open poll • You voted already" : "Odprta anketa • Glas ste že oddali", + "Open poll • Click to vote" : "Odprta anketa • Kliknite za glasovanje", + "Poll • Ended" : "Anketa • Zaključena", + "Talk recording from {time} ({conversation})" : "Snemanje pogovora Talk {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Rezultati ankete • %n glas","Rezultati ankete • %n glasova","Rezultati ankete • %n glasovi","Rezultati ankete • %n glasov"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Odprta anketa • %n glas","Odprta anketa • %n glasovs","Odprta anketa • %n glasovi","Odprta anketa • %n glasov"], + "Submit vote" : "Objavi glasovanje", + "Your privacy setting has been saved" : "Nastavitve zasebnosti so shranjene.", + "Failed to save sounds setting" : "Shranjevanje nastavitev zvoka je spodletelo", + "Sounds setting saved" : "Nastavitve zvokov so shranjene.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pogovoru ste se pridružili v novem oknu brskalnika, ali na drugi napravi. Nextcloud Talk te možnosti trenutno ne omogoča, zato je bila druga seja preklicana." +}, +"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);"); diff --git a/l10n/sl.json b/l10n/sl.json new file mode 100644 index 0000000..ede3cf5 --- /dev/null +++ b/l10n/sl.json @@ -0,0 +1,1627 @@ +{ "translations": { + "a conversation" : "pogovor", + "(Duration %s)" : "(Trajanje %s)", + "You attended a call with {user1}" : "Opravite klic: {user1}", + "_%n guest_::_%n guests_" : ["%n gost","%n gosta","%n gostje","%n gostov"], + "You attended a call with {user1} and {user2}" : "Opravite klic: {user1} in {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Opravite klic: {user1}, {user2} in {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Opravite klic: {user1}, {user2}, {user3} in {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Opravite klic: {user1}, {user2}, {user3}, {user4} in {user5}", + "_%n other_::_%n others_" : ["%n drug","%n druga","%n drugi","%n drugih"], + "{actor} invited you to {call}" : "{actor} pošlje povabilo na {call}", + "You were invited to a conversation or had a call" : "Povabljeni ste bili v pogovor, ali pa ste prejeli klic", + "Other activities" : "Druge dejavnosti", + "Talk" : "Talk", + "Guest" : "Gost", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Dobrodošli v program Nextcloud Talk!\nTa pogovor je namenjen obvestilom in podrobnostim o novih zmožnosti programa.", + "## New in Talk %s" : "## Novo v Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Po novem tudi programa Microsoft Edge in Safari podpirata zvočno in video klicanje.", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Pogovori Ena-na-Ena so po novem stalni in jih ni več mogoče po nesreči pretvoriti v skupinski pogovor. Prav tako se, ko eden izmed udeležencev zapusti pogovor, ta samodejno ne izbriše. Izbriše se šele, ko pogovor zapustita oba udeleženca.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Mogoče je poslati obvestilo vsem udeležencem z vpisom »@all« v vpisno polje.", + "- With the \"arrow-up\" key you can repost your last message" : "- Pritisk tipke »puščico navzgor« ponovi izpis zadnjega vnosa klepeta.", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Program podpira ukaze v vnosni vrstici; napišite »/help« kot sporočilo, če so ukazi skrbniško omogočeni.", + "- With projects you can create quick links between conversations, files and other items" : "- S projekti lahko ustvarite hitre povezave med pogovori, da datotekami in drugimi predmeti.", + "- You can now mention guests in the chat" : "- V klepetu je mogoče omeniti goste.", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Pogovori imajo možnost čakalnice. Ta omogoča moderatorjem pripravo, usklajevanje in pogovor pred začetkom sestanka, uporabniki in gosti pa čakajo na začetek.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Mogoče je neposredno odgovoriti na posamezno sporočilo in omogočiti kontekst sporočila.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- iskalnik pogovorov in stikov omogoča filtriranje obstoječih pogovorov in s tem hitrejše iskanje predhodnih.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Dodati je mogoče skupine uporabnikov po meri, če je nameščen tudi program Krogi.", + "- Check out the new grid and call view" : "- Preizkusite nov mrežni in posodobljen klicni pogled.", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Po novem je mogoče poslati datoteke neposredno iz naprave v pogovor.", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Datoteke v souporabi se sedaj odprejo znotraj klepetalnega pogleda s programi za pregledovanje.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Mogoče je iskati med klepeti in sporočili prek enotnega iskalnega polja.", + "- Spice up your messages with emojis from the emoji picker" : "- Poživite sporočila z izraznimi ikonami prek izbirnika.", + "- You can now change your camera and microphone while being in a call" : "- Spremeniti je mogoče kamero in mikrofon kar med klicem.", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Pogovoru je mogoče dodati vsebinski opis in ga odpreti, da se prijavljeni uporabniki enostavno pridružijo.", + "- See a read status and send failed messages again" : "- Prikazano je stanje branja in možnost ponovnega pošiljanja spodletelega sporočila.", + "- Raise your hand in a call with the R key" : "- Roko je mogoče dvigniti s pritiskom na tipko » R «.", + "- Join the same conversation and call from multiple devices" : "- Možnost povezave v isti pogovor z več različnih naprav.", + "- Send voice messages, share your location or contact details" : "- Pošiljanje glasovnih sporočil, objavo položaja in podrobnosti profila.", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Dodajanje skupin v pogovor in samodejno dodajanje novih članov skupine kot udeležence.", + "- A preview of your audio and video is shown before joining a call" : "- Pred vklopom v pogovor je na voljo predogled slike iz zvoka.", + "- You can now blur your background in the newly designed call view" : "- V na novo zasnovanem pogledu klica je mogoče zamegliti ozadje.", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorji lahko dodelijo splošna in posamezna dovoljenja udeležencem.", + "- You can now react to chat messages" : "- Po novem se je mogoče odzvati na sporočila v klepetu.", + "- In the sidebar you can now find an overview of the latest shared items" : "- V bočnem oknu je sedaj pregledni seznam predmetov v souporabi.", + "- Use a poll to collect the opinions of others or settle on a date" : "- Uporabite lahko anketo za zbiranje mnenj in usklajevanje datumov dogodkov.", + "- Configure an expiration time for chat messages" : "- Podprto je nastavljanje časa poteka sporočil v klepetu.", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Mogoče je začeti posamezen klic brez vednosti udeležencev v pogovorih z več sodelujočimi. Po začetku je mogoče pošiljati tudi posamezna obvestila.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Mogoče je poslati sporočila v klepet brez prikaza obvestila, če sporočilo ni pomembno.", + "- Emojis can now be autocompleted by typing a \":\"" : "- Izrazne ikone je mogoče izrisovati z vpisom dvopičja »:«.", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Različne predmete je mogoče povezovati z uporabo izbirnika » / «.", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorji lahko ustvarjajo ločene skupine (zahteva nastavitev zunanjega signalnega strežnika).", + "- Calls can now be recorded (requires the High-performance backend)" : "- Klice je mogoče posneti (zahteva nastavitev zunanjega signalnega strežnika)", + "- Conversations can now have an avatar or emoji as icon" : "- Pogovoru je mogoče določiti podobo ali izrazno ikono.", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Ob zamegljenem so na voljo tudi navidezna ozadja v videokonferencah.", + "- Reactions are now available during calls" : "- Med klicem je mogoče uporabiti grafične odzive.", + "- Typing indicators show which users are currently typing a message" : "- Kazalnik tipkanja se zažene, ko uporabniki začnejo vpisovati sporočila.", + "- Groups can now be mentioned in chats" : "- V pogovorih je mogoče omeniti tudi skupine.", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Posnetke klicev je mogoče samodejno prepisati v besedilo, če je na voljo podporni program.", + "- Chat messages can be translated if a translation provider app is registered" : "- Sporočila klepeta je mogoče samodejno prevesti, če je na voljo podporni program.", + "- **Markdown** can now be used in _chat_ messages" : "- V pogovorih je mogoče uporabiti oblikovanje **Markdown**.", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Na voljo so spletne kljuke za dodajanje botov. Več podrobnosti je zapisanih v dokumentaciji https://nextcloud-talk.readthedocs.io/en/latest/bot-list/.", + "- Set a reminder on a chat message to be notified later again" : "- Nastaviti je mogoče opomnik na sporočilo klepeta za kasnejše obveščanje.", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- »Sporočilo sebi« je mogoče uporabiti za opomnike in izmenjavo podatkov med različnimi napravami.", + "- Captions allow to send a message with a file at the same time" : "- Napisi omogočajo pošiljanje sporočila sočasno z datoteko.", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video govorca je zdaj vidno med souporabo zaslona, odzivi slušateljev pa so animirani.", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Sporočila lahko prijavljeni avtorji in moderatorji urejajo še 6 ur po vpisu", + "- Unsent message drafts are now saved in your browser" : "- Neposlani osnutki sporočil se shranjujejo v pomnilnik brskalnika", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Klepetanje je mogoče tudi z zveznimi uporabniki z zunanjimi strežniki Talk", + "_All %n participant_::_All %n participants_" : ["%n udeleženec","%n udeleženca"," %n udeleženci"," %n udeležencev"], + "Talk updates ✅" : "Posodobitve programa Talk ✅", + "Reaction deleted by author" : "Avtor izbriše odziv", + "{actor} created the conversation" : "{actor} ustvari pogovor", + "You created the conversation" : "Ustvarite pogovor", + "System created the conversation" : "Sistem ustvari pogovor", + "An administrator created the conversation" : "Skrbnik je ustvaril pogovor", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} preimenuje pogovor »%1$s« v »%2$s«", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Preimenujete pogovor »%1$s« v »%2$s", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Skrbnik je preimenoval pogovor »%1$s« v »%2$s«", + "{actor} set the description" : "{actor} nastavi opis", + "You set the description" : "Nastavite opis", + "An administrator set the description" : "Skrbnik nastavi opis", + "{actor} removed the description" : "{actor} odstrani opis", + "You removed the description" : "Odstranite opis", + "An administrator removed the description" : "Skrbnik odstrani opis", + "You started a silent call" : "Začeli ste tihi klic", + "Outgoing silent call" : "Odhodni tihi klic", + "{actor} started a silent call" : "{actor} začne tihi klic", + "Incoming silent call" : "Dohodni tihi klic", + "You started a call" : "Začnete klic", + "Outgoing call" : "Odhodni klic", + "{actor} started a call" : "{actor} začne klic", + "Incoming call" : "Dohodni klic", + "{actor} joined the call" : "{actor} se pridruži klicu", + "You joined the call" : "Pridružite se klicu", + "{actor} left the call" : "{actor} zapusti klic", + "You left the call" : "Zapustite klic", + "{actor} unlocked the conversation" : "{actor} odklene pogovor", + "You unlocked the conversation" : "Odklenete pogovor", + "An administrator unlocked the conversation" : "Skrbnik je odklenil pogovor", + "{actor} locked the conversation" : "{actor} zaklene pogovor", + "You locked the conversation" : "Zaklenete pogovor", + "An administrator locked the conversation" : "Skrbnik je zaklenil pogovor", + "{actor} limited the conversation to the current participants" : "{actor} omeji pogovor na trenutno povezane udeležence", + "You limited the conversation to the current participants" : "Omejili ste pogovor na trenutno povezane udeležence", + "An administrator limited the conversation to the current participants" : "Skrbnik je omejil pogovor na trenutno povezane udeležence", + "{actor} opened the conversation to registered users" : "{actor} odpre pogovor za vse vpisane uporabnike", + "You opened the conversation to registered users" : "Odprli ste pogovor za vse vpisane uporabnike", + "An administrator opened the conversation to registered users" : "Skrbnik je odprl pogovor za vse vpisane uporabnike", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} odpre pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "You opened the conversation to registered users and users created with the Guests app" : "Odprete pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Skrbnik odpre pogovor za vpisane uporabnike in tiste, ki katerih račun je ustvarjen kot gosti.", + "The conversation is now open to everyone" : "Pogovor je sedaj odprt za vse", + "{actor} opened the conversation to everyone" : "{actor} odpre pogovor za vse", + "You opened the conversation to everyone" : "Odprete pogovor za vse", + "{actor} restricted the conversation to moderators" : "{actor} omeji pogovor na moderatorje", + "You restricted the conversation to moderators" : "Omejite pogovor na moderatorje", + "{actor} started breakout rooms" : "{actor} odpre mesta za ločene skupine", + "You started breakout rooms" : "Odprete mesta za ločene skupine", + "{actor} stopped breakout rooms" : "{actor} zapre ločene skupine", + "You stopped breakout rooms" : "Zaprli ste ločene skupine", + "{actor} allowed guests" : "{actor} dovoli sodelovanje gostov", + "You allowed guests" : "Dovolite sodelovanje gostov", + "An administrator allowed guests" : "Skrbnik je odobril dostop gostom", + "{actor} disallowed guests" : "{actor} prepove sodelovanje gostom", + "You disallowed guests" : "Prepoveste sodelovanje gostom", + "An administrator disallowed guests" : "Skrbnik je onemogočil dostop gostom", + "{actor} set a password" : "{actor} nastavi geslo", + "You set a password" : "Nastavite geslo", + "An administrator set a password" : "Skrbnik je nastavil geslo", + "{actor} removed the password" : "{actor} odstrani geslo", + "You removed the password" : "Odstranite geslo", + "An administrator removed the password" : "Skrbnik je odstranil geslo", + "{actor} added {user}" : "{actor} doda stik {user}", + "You joined the conversation" : "Pridružite se pogovoru", + "{actor} joined the conversation" : "{actor} se pridruži pogovoru", + "You added {user}" : "Dodate uporabnika {user}", + "{actor} added you" : "{actor} vas doda v pogovor", + "An administrator added you" : "Skrbnik vas je dodal", + "An administrator added {user}" : "Skrbnik doda uporabnika: {user}", + "You left the conversation" : "Zapustite pogovor", + "{actor} left the conversation" : "{actor} zapusti pogovor", + "{actor} removed {user}" : "{actor} odstrani stik {user}", + "You removed {user}" : "Odstranite uporabnika {user}", + "{actor} removed you" : "{actor} vas odstrani", + "An administrator removed you" : "Skrbnik vas je odstranil", + "An administrator removed {user}" : "Skrbnik odstrani uporabnika: {user}", + "{actor} invited {federated_user}" : "{actor} povabi {federated_user}", + "You invited {federated_user}" : "Povabite {federated_user}", + "You accepted the invitation" : "Sprejeli ste vabilo", + "{actor} invited you" : "{actor} vsa povabi v klepet", + "An administrator invited you" : "Skrbnik vas je povabil", + "An administrator invited {federated_user}" : "Skrbnik povabi osebo {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} sprejme povabilo", + "{actor} removed {federated_user}" : "{actor} odstrani osebo {federated_user}", + "You removed {federated_user}" : "Odstranite osebo {federated_user}", + "You declined the invitation" : "Zavrnete povabilo", + "An administrator removed {federated_user}" : "Skrbnik odstrani osebo {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} zavrne povabilo", + "{actor} added group {group}" : "{actor} doda skupino {group}", + "You added group {group}" : "Dodate skupino {group}", + "An administrator added group {group}" : "Skrbnik doda skupino {group}", + "{actor} removed group {group}" : "{actor} odstrani skupino {group}", + "You removed group {group}" : "Odstranite skupino {group}", + "An administrator removed group {group}" : "Skrbnik odstrani skupino {group}", + "{actor} added {phone}" : "{actor} doda telefonsko številko {phone}", + "You added {phone}" : "Dodate telefonsko številko {phone}", + "An administrator added {phone}" : "Skrbnik doda telefonsko številko {phone}", + "{actor} removed {phone}" : "{actor} odstrani telefonsko številko {phone}", + "You removed {phone}" : "Odstranite telefonsko številko {phone}", + "An administrator removed {phone}" : "Skrbnik odstrani telefonsko številko {phone}", + "{actor} promoted {user} to moderator" : "{actor} dodeli osebi {user} vlogo moderatorja", + "You promoted {user} to moderator" : "Osebi {user} ste dodelili vlogo moderatorja", + "{actor} promoted you to moderator" : "{actor} vam dodali vlogo moderatorja", + "An administrator promoted you to moderator" : "Skrbnik vam dodeli vlogo moderatorja", + "An administrator promoted {user} to moderator" : "Skrbnik je določil moderatorja: {user}", + "{actor} demoted {user} from moderator" : "{actor} osebi {user} odstrani vlogo moderatorja", + "You demoted {user} from moderator" : "Osebi {user} ste odvzeli vlogo moderatorja", + "{actor} demoted you from moderator" : "{actor} vam odvzame vlogo moderatorja", + "An administrator demoted you from moderator" : "Skrbnik vam je odvzel vlogo moderatorja", + "An administrator demoted {user} from moderator" : "Skrbnik je odstranil moderatorja: {user}", + "{actor} shared a file which is no longer available" : "{actor}: datoteka v souporabi ni več na voljo", + "You shared a file which is no longer available" : "Datoteka ni več na voljo ...", + "The shared location is malformed" : "Objavljeno trenutno mesto je napačno oblikovano", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} nastavi povezavo Matterbridge za usklajevanje tega pogovora z drugimi klepeti.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Nastavite povezavo Matterbridge za usklajevanje tega pogovora z drugimi klepeti.", + "{actor} updated the Matterbridge configuration" : "{actor} posodobi nastavitve Matterbridge.", + "You updated the Matterbridge configuration" : "Posodobite nastavitev Matterbridge.", + "{actor} removed the Matterbridge configuration" : "{actor} odstrani nastavitve Matterbridge.", + "You removed the Matterbridge configuration" : "Odstranili ste nastavitve Matterbridge.", + "{actor} started Matterbridge" : "{actor} omogoči Matterbridge.", + "You started Matterbridge" : "Omogočite Matterbridge.", + "{actor} stopped Matterbridge" : "{actor} zaustavi Matterbridge.", + "You stopped Matterbridge" : "Zaustavite Matterbridge.", + "{actor} deleted a message" : "{actor} izbriše sporočilo", + "You deleted a message" : "Izbrisali ste sporočilo", + "You edited a message" : "Uredili ste sporočilo", + "{actor} deleted a reaction" : "{actor} izbriše odziv", + "You deleted a reaction" : "Izbrisali ste odziv", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Pretek sporočil ste nastavili na %n teden","Pretek sporočil ste nastavili na %n tedna","Pretek sporočil ste nastavili na %n tedne","Pretek sporočil ste nastavili na %n tednov"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Pretek sporočil ste nastavili na %n dan","Pretek sporočil ste nastavili na %n dneva","Pretek sporočil ste nastavili na %n dni","Pretek sporočil ste nastavili na %n dni"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Pretek sporočil ste nastavili na %n uro","Pretek sporočil ste nastavili na %n uri","Pretek sporočil ste nastavili na %n ure","Pretek sporočil ste nastavili na %n ur"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Pretek sporočil ste nastavili na %n minuto","Pretek sporočil ste nastavili na %n minuti","Pretek sporočil ste nastavili na %n minute","Pretek sporočil ste nastavili na %n minut"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} nastavi pretek sporočil na %n teden","{actor} nastavi pretek sporočil na %n tedna","{actor} nastavi pretek sporočil na %n tedne","{actor} nastavi pretek sporočil na %n tednov"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} nastavi pretek sporočil na %n dan","{actor} nastavi pretek sporočil na %n dneva","{actor} nastavi pretek sporočil na %n dni","{actor} nastavi pretek sporočil na %n dni"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} nastavi pretek sporočil na %n uro","{actor} nastavi pretek sporočil na %n uri","{actor} nastavi pretek sporočil na %n ure","{actor} nastavi pretek sporočil na %n ur"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} nastavi pretek sporočil na %n minuto","{actor} nastavi pretek sporočil na %n minuti","{actor} nastavi pretek sporočil na %n minute","{actor} nastavi pretek sporočil na %n minut"], + "{actor} disabled message expiration" : "{actor} onemogoči pretek sporočil", + "You disabled message expiration" : "Onemogočili ste pretek sporočil", + "{actor} cleared the history of the conversation" : "{actor} počisti zgodovino pogovora.", + "You cleared the history of the conversation" : "Počistili ste zgodovino pogovora.", + "{actor} set the conversation picture" : "{actor} nastavi sliko pogovora", + "You set the conversation picture" : "Nastavili ste sliko pogovora", + "{actor} removed the conversation picture" : "{actor} odstrani sliko pogovora", + "You removed the conversation picture" : "Odstranili ste sliko pogovora", + "{actor} ended the poll {poll}" : "{actor} konča anketo {poll}", + "You ended the poll {poll}" : "Končate anketo {poll}", + "{actor} started the video recording" : "{actor} začne snemati video", + "You started the video recording" : "Začnete snemati video", + "{actor} stopped the video recording" : "{actor} zaustavi snemanje videa", + "You stopped the video recording" : "Zaustavite snemanje videa", + "{actor} started the audio recording" : "{actor} začne snemati zvok", + "You started the audio recording" : "Začnete snemati zvok", + "{actor} stopped the audio recording" : "{actor} zaustavi snemanje zvoka", + "You stopped the audio recording" : "Zaustavite snemanje zvoka", + "The recording failed" : "Snemanje je spodletelo", + "Someone voted on the poll {poll}" : "Nekdo je oddal glas v anketi {poll}", + "Message deleted by author" : "Sporočilo je avtor izbrisal.", + "Message deleted by {actor}" : "{actor} je izbrisal sporočilo", + "Message deleted by you" : "Sporočilo ste izbrisali", + "Deleted user" : "Izbrisan uporabnik", + "Unknown number" : "Neznana številka", + "Administration" : "Skrbništvo", + "System" : "Sistem", + "%s (guest)" : "%s (gost)", + "Missed call" : "Zgrešen klic", + "Unanswered call" : "Neodgovorjen klic", + "Call ended (Duration {duration})" : "Konferenčni klic je končan (Trajanje: {duration})", + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} konča klic z %n gostom (trajanje: {duration}).","{actor} konča klic s skupaj %n gostoma (trajanje: {duration}).","{actor} konča klic s skupaj %n gosti (trajanje: {duration}).","{actor} konča klic s skupaj %n gosti (trajanje: {duration})."], + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} konča klic z osebo {user1} (trajanje {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} konča klic z osebama {user1} in {user2} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2} in {user3} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2}, {user3} in {user4} (trajanje {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} konča klic z osebami {user1}, {user2}, {user3}, {user4} in {user5} (trajanje {duration})", + "Message of {user} in {conversation}" : "Sporočilo osebe {user} v pogovoru {conversation}", + "Message of {user}" : "Sporočilo osebe {user}", + "Message of a deleted user in {conversation}" : "Sporočilo izbrisane osebe v pogovoru {conversation}", + "Talk conversations" : "Pogovori Talk", + "Talk to %s" : "Pogovor: %s", + "An error occurred. Please contact your administrator." : "Prišlo je do napake. Stopite v stik s skrbnikom sistema.", + "File not found" : "Datoteke ni mogoče najti", + "File is not shared, or shared but not with the user" : "Datoteka ni v uporabi, ali pa ni v uporabi z uporabnikom", + "No account available to delete." : "Ni računa za brisanje.", + "Poll" : "Anketa", + "Password needs to be set" : "Nastaviti je treba geslo", + "Uploading the file failed" : "Pošiljanje datoteke je spodletelo", + "No image file provided" : "Ni podane slikovne datoteke", + "File is too big" : "Datoteka je prevelika", + "Invalid file provided" : "Podana je neveljavna daoteka", + "Invalid image" : "Neveljavna slika", + "Unknown filetype" : "Neznana vrsta datoteke", + "Talk mentions" : "Omembe v Talk", + "More conversations" : "Več pogovorov", + "Say hi to your friends and colleagues!" : "Pozdravite prijatelje in znance.", + "No unread mentions" : "Ni neprebranih sporočil", + "Call in progress" : "Klic je v teku ...", + "You were mentioned" : "Omenjeni ste bili v klepetu", + "Write to conversation" : "Zapisuj v pogovor", + "Writes event information into a conversation of your choice" : "Zapiše podrobnosti dogodka v pogovor po vaši izbiri", + "Conversation invitation" : "Povabilo k pogovoru", + "Scheduled time" : "Načrtovan time", + "Description" : "Opis", + "You can also dial-in via phone with the following details" : "Povezati se je mogoče tudi prek telefonske povezave z naslednjimi podatki", + "Dial-in information" : "Podrobnosti klicne povezave", + "Meeting ID" : "ID Sestanka", + "Your PIN" : "Koda PIN", + "Meeting" : "Srečanje", + "Password request: %s" : "Geslo: %s", + "Private conversation" : "Zasebni pogovor", + "Deleted user (%s)" : "Izbrisan uporabnik (%s)", + "Failed to upload call recording" : "Pošiljanje posnetka pogovora je spodletelo", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Pošiljanje posnetka s strežnika za snemanje je spodletelo za klic {call}. Stopite v stik s skrbnikom sistema.", + "Share to chat" : "Objavi v pogovor", + "Dismiss notification" : "Opusti obvestilo", + "Call recording now available" : "Posnetek klica je zdaj na voljo", + "Transcript now available" : "Prepis je sedaj na voljo", + "Failed to transcript call recording" : "Prepis posnetka je spodletel", + "Accept" : "Sprejmi", + "Decline" : "Zavrni", + "Someone reacted" : "Nekdo se je odzval", + "New message" : "Novo sporočilo", + "Reminder" : "Opomnik", + "Notification" : "Obvestilo", + "Reminder: Guest in {call}" : "Opomnik: Gost v klicu {call}", + "{user} in {call}" : "{user} v pogovoru {call}", + "Deleted user in {call}" : "Iz klica {call} je izbrisan uporabnik", + "{guest} (guest) in {call}" : "{guest} (gost) v klicu {call}", + "Guest in {call}" : "Gost v klicu {call}", + "{user} sent you a private message" : "{user} vam pošlje zasebno sporočilo", + "{user} sent a message in conversation {call}" : "{actor} vam pošlje sporočilo v pogovor {call} ", + "A deleted user sent a message in conversation {call}" : "Izbrisan uporabnik pošlje sporočilo v pogovor {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gost) pošlje sporočilo v pogovor {call}", + "A guest sent a message in conversation {call}" : "Gost je poslal sporočilo v pogovor {call}", + "{user} replied to your private message" : "{user} odgovori na vaše zasebno sporočilo", + "{user} replied to your message in conversation {call}" : "{user} odgovori na vaše sporočilo v pogovoru {call}", + "A deleted user replied to your message in conversation {call}" : "Izbrisan uporabnik odgovori na vaše sporočilo v pogovoru {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gost) odgovori na vaše sporočilo v pogovoru {call}", + "A guest replied to your message in conversation {call}" : "Gost odgovori na vaše sporočilo v pogovoru {call}", + "{user} reacted with {reaction} to your private message" : "{user} se odzove z {reaction} v zasebnem sporočilu", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} se odzove z {reaction} na vaše sporočilo v klicu {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Izbrisan uporabnik se odzove z {reaction} na vaše sporočilo v klicu {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (gost) se odzove z {reaction} na vaše sporočilo v klicu {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Gost se odzove z {reaction} na vaše sporočilo v klicu {call}", + "{user} mentioned you in a private conversation" : "{user} vas omeni v zasebnem pogovoru", + "{user} mentioned group {group} in conversation {call}" : "{user} omeni skupino {group} v pogovoru {call}", + "{user} mentioned everyone in conversation {call}" : "{user} omeni vse v pogovoru {call}", + "{user} mentioned you in conversation {call}" : "{user} vas omeni v pogovoru {call}", + "A deleted user mentioned you in conversation {call}" : "Izbrisan uporabnik vas omeni v pogovoru {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gost) vas omeni v pogovoru {call}", + "A guest mentioned you in conversation {call}" : "Gost vas omeni v pogovoru {call}", + "View message" : "Poglej sporočilo", + "Dismiss reminder" : "Opusti opomnik", + "View chat" : "Pokaži klepet", + "{user} invited you to a group conversation: {call}" : "{user} pošlje povabilo na skupinski pogovor: {call}", + "Join call" : "Pridruži se klicu", + "Answer call" : "Odzovi se na klic", + "{user} would like to talk with you" : "{user} želi govoriti z vami", + "Call back" : "Pokličite nazaj", + "You missed a call from {user}" : "Zamudili ste klic stika {user}", + "Accept call" : "Sprejmi klic", + "A group call has started in {call}" : "Začet je skupinski pogovor v {call}", + "You missed a group call in {call}" : "Zamudili ste skupinski klic {call}", + "{email} is requesting the password to access {file}" : "{email} zahteva geslo za dostop do datoteke {file}", + "{email} tried to request the password to access {file}" : "{email} prosi za geslo za dostop do datoteke {file}", + "Someone is requesting the password to access {file}" : "Nekdo zahteva geslo za dostop do datoteke {file}", + "Someone tried to request the password to access {file}" : "Nekdo prosi za geslo za dostop do datoteke {file}", + "Open settings" : "Odpri nastavitve", + "The hosted signaling server is now configured and will be used." : "Gostiteljski signalni strežnik je nastavljen in bo v uporabi.", + "The hosted signaling server was removed and will not be used anymore." : "Gostiteljski signalni strežnik je bil odstranjen in ne bo več v uporabi.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Račun gostiteljskega signalnega strežnika je spremenjen iz stanja »{oldstatus}« v »{newstatus}«.", + "pending" : "na čakanju", + "active" : "dejavno", + "expired" : "poteklo", + "blocked" : "zavrnjeno", + "error" : "napaka", + "The certificate of {host} expires in {days} days" : "Potrdilo gostitelja {host} poteče v {days} dneh", + "The certificate of {host} expired" : "Potrdilo gostitelja {host} je poteklo", + "Contact via Talk" : "Stopi v stik s Talk", + "Open Talk" : "Odpri Talk", + "Default" : "Privzeta", + "Presentation" : "Predstavitev", + "Webinar" : "Webinar", + "Conversations" : "Pogovori", + "Messages in current conversation" : "Sporočila v trenutnem pogovoru", + "{user}" : "{user}", + "Messages" : "Sporočila", + "{user} in {conversation}" : "{user} v pogovoru {conversation}", + "Messages in other conversations" : "Sporočila v drugih pogovorih", + "Invalid emoji character" : "Neveljaven znak izrazne ikone", + "Invalid background color" : "Neveljavna barva ozadja", + "Avatar image is not square" : "Slika podobe ni kvadratna", + "Room {number}" : "Skupina {number}", + "Other" : "Drugo", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Izdaja preizkusne zahteve je spodletela, ker preizkusni strežnik ni dosegljiv.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Prišlo je do težav z overitvijo zagnane seje. Morda strežnik ni dosegljiv od zunaj za preverjanje naslova URL.", + "Something unexpected happened." : "Prišlo jo do nepričakovane napake.", + "The URL is invalid." : "Naslov URL je neveljaven.", + "An HTTPS URL is required." : "Zahtevan je naslov URL HTTPS.", + "The email address is invalid." : "Naslov elektronske pošte je neveljaven.", + "The language is invalid." : "Izbran jezik je neveljaven.", + "The country is invalid." : "Izbrana država je neveljavna.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Prišlo je do težav z zahtevanjem preizkusa. Preverite dnevniške zapise za podrobnosti.", + "Too many requests are send from your servers address. Please try again later." : "Z naslova strežnika je poslanih preveč zahtev. Poskusite znova kasneje.", + "There is already a trial registered for this Nextcloud instance." : "Preizkusni strežnik način za to namestitev je že vpisan.", + "Something unexpected happened. Please try again later." : "Prišlo jo do nepričakovane napake. Poskusite znova kasneje.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Izdaja preizkusne zahteve je spodletela, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "Trial requested but failed to get account information. Please check back later." : "Poslana je zahteva za preizkusni način, a je spodletelo pridobivanje podrobnosti računa. Opravilo ponovite kasneje.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Prišlo je do težav z overitvijo zahteve. Morda strežnik ni dosegljiv od zunaj za preverjanje naslova URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Pridobivanje podrobnosti računa je spodletelo, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Prišlo je do napake med pridobivanjem podrobnosti računa. Preverite dnevniške zapise za podrobnosti.", + "There is no such account registered." : "Takega računa še ni vpisanega.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Pridobivanje podrobnosti računa je spodletelo, je preizkusni strežnik nedosegljiv. Poskusite znova kasneje.", + "Deleting the hosted signaling server account failed. Please check back later." : "Brisanje gostiteljskega signalnega strežnika je spodletelo. Opravilo ponovite kasneje.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Brisanje računa je spodletelo, ker pošilja preizkusni strežnik neustrezne odzive. Poskusite znova kasneje.", + "There is a problem with deleting the account. Please check your logs for further information." : "Prišlo je do napake med brisanjem računa. Preverite dnevniške zapise za podrobnosti.", + "Too many requests are sent from your servers address. Please try again later." : "Z naslova strežnika je poslanih preveč zahtev. Poskusite znova kasneje.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Brisanje računa je spodletelo, ker preizkusni strežnik ni dosegljiv. Opravilo ponovite kasneje.", + "Note to self" : "Opomba sebi", + "A place for your private notes, thoughts and ideas" : "Mesto za zasebne opombe, misli in zamisli", + "Let's get started!" : "Začnimo!", + "Andorra" : "Andora", + "United Arab Emirates" : "Združeni Arabski Emirati", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigva in Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanija", + "Armenia" : "Armenija", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Argentina", + "American Samoa" : "Ameriška Samoa", + "Austria" : "Avstrija", + "Australia" : "Australija", + "Aruba" : "Aruba", + "Åland Islands" : "Otočje Åland", + "Azerbaijan" : "Azerbajdžan", + "Bosnia and Herzegovina" : "Bosna in Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeš", + "Belgium" : "Belgija", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bolgarija", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunej Darussalam", + "Bolivia, Plurinational State of" : "Bolivija, večnacionalna država", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius in Saba", + "Brazil" : "Brazilija", + "Bahamas" : "Bahami", + "Bhutan" : "Butan", + "Bouvet Island" : "Otok Bouvet", + "Botswana" : "Botsvana", + "Belarus" : "Belorusija", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokosovi otoki (Keeling)", + "Congo, the Democratic Republic of the" : "Kongo, demokratična republika", + "Central African Republic" : "Centralno Afriška Republika", + "Congo" : "Kongo", + "Switzerland" : "Švica", + "Côte d'Ivoire" : "Slonokoščeni otoki", + "Cook Islands" : "Cookovi otoki", + "Chile" : "Čile", + "Cameroon" : "Kamerun", + "China" : "Kitajska", + "Colombia" : "Kolumbija", + "Costa Rica" : "Kostarika", + "Cuba" : "Kuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Božični otoki", + "Cyprus" : "Ciper", + "Czechia" : "Češka", + "Germany" : "Nemčija", + "Djibouti" : "Džibuti", + "Denmark" : "Danska", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominikanska republika", + "Algeria" : "Alžirija", + "Ecuador" : "Ekvador", + "Estonia" : "Estonija", + "Egypt" : "Egipt", + "Western Sahara" : "Severna Sahara", + "Eritrea" : "Eritreja", + "Spain" : "Španija", + "Ethiopia" : "Etiopija", + "Finland" : "Finska", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandski otoki", + "Micronesia, Federated States of" : "Mikronezija, federativne države", + "Faroe Islands" : "Ferski otoki", + "France" : "Francija", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Združeno kraljestvo Velike Britanije in Severne Irske", + "Grenada" : "Grenada", + "Georgia" : "Gruzija", + "French Guiana" : "Francoska Gvajana", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandija", + "Gambia" : "Gambija", + "Guinea" : "Gvineja", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvatorialna Gvineja", + "Greece" : "Grčija", + "South Georgia and the South Sandwich Islands" : "Južna Georgija in Južni Sandwichevi otoki", + "Guatemala" : "Gvatemala", + "Guam" : "Gvam", + "Guinea-Bissau" : "Gvineja-Bissau", + "Guyana" : "Gvajana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Otoka Heard in McDonald", + "Honduras" : "Honduras", + "Croatia" : "Hrvaška", + "Haiti" : "Haiti", + "Hungary" : "Madžarska", + "Indonesia" : "Indonezija", + "Ireland" : "Irska", + "Israel" : "Izrael", + "Isle of Man" : "Otok Man", + "India" : "Indija", + "British Indian Ocean Territory" : "Britanski teritorij v Indijskem oceanu", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, Islamska republika", + "Iceland" : "Islandija", + "Italy" : "Italija", + "Jersey" : "Jersey", + "Jamaica" : "Jamajka", + "Jordan" : "Jordanija", + "Japan" : "Japonska", + "Kenya" : "Kenija", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kambodža", + "Kiribati" : "Kiribati", + "Comoros" : "Komori", + "Saint Kitts and Nevis" : "Sveti Krištof in Nevis", + "Korea, Democratic People's Republic of" : "Koreja, Demokratična ljudska republika", + "Korea, Republic of" : "Koreja, republika", + "Kuwait" : "Kuvajt", + "Cayman Islands" : "Kajmansko otočje", + "Kazakhstan" : "Kazahstan", + "Lao People's Democratic Republic" : "Laos, Ljudska demokratična republika", + "Lebanon" : "Libanon", + "Saint Lucia" : "Sveta Lucija", + "Liechtenstein" : "Lihtenštajn", + "Sri Lanka" : "Šrilanka", + "Liberia" : "Liberija", + "Lesotho" : "Lesoto", + "Lithuania" : "Litva", + "Luxembourg" : "Luksemburg", + "Latvia" : "Latvija", + "Libya" : "Libija", + "Morocco" : "Maroko", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldavija, republika", + "Montenegro" : "Črna Gora", + "Saint Martin (French part)" : "Sveti Martin (francoski del)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Maršalovi otoki", + "North Macedonia" : "Severna Makedonija", + "Mali" : "Mali", + "Myanmar" : "Mjanmar", + "Mongolia" : "Mongolija", + "Macao" : "Makao", + "Northern Mariana Islands" : "Severni Marijanski otoki", + "Martinique" : "Martinik", + "Mauritania" : "Mavretanija", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mavricijus", + "Maldives" : "Maldivi", + "Malawi" : "Malavi", + "Mexico" : "Mehika", + "Malaysia" : "Malezija", + "Mozambique" : "Mozambik", + "Namibia" : "Namibija", + "New Caledonia" : "Nova Kaledonija", + "Niger" : "Niger", + "Norfolk Island" : "Otok Norfolk", + "Nigeria" : "Nigerija", + "Nicaragua" : "Nikaragva", + "Netherlands" : "Nizozemska", + "Norway" : "Norveška", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nova Zelandija", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Francoska polinezija", + "Papua New Guinea" : "Papua Nova Gvineja", + "Philippines" : "Filipini", + "Pakistan" : "Pakistan", + "Poland" : "Poljska", + "Saint Pierre and Miquelon" : "Saint Pierre in Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Portoriko", + "Palestine, State of" : "Palestina", + "Portugal" : "Portugalska", + "Palau" : "Palau", + "Paraguay" : "Paragvaj", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Romunija", + "Serbia" : "Srbija", + "Russian Federation" : "Ruska federacija", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Savdova Arabija", + "Solomon Islands" : "Solomonovi otoki", + "Seychelles" : "Sejšeli", + "Sudan" : "Sudan", + "Sweden" : "Švedska", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Sveta Helena, Ascension in Tristan da Cunha", + "Slovenia" : "Slovenija", + "Svalbard and Jan Mayen" : "Svalbard in Jan Mayen", + "Slovakia" : "Slovaška", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalija", + "Suriname" : "Surinam", + "South Sudan" : "Južni Sudan", + "Sao Tome and Principe" : "Sao Tome in Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sveti Martin (nizozemski del)", + "Syrian Arab Republic" : "Sirska arabska republika", + "Eswatini" : "Esvatini", + "Turks and Caicos Islands" : "Otoki Turks in Caicos", + "Chad" : "Čad", + "French Southern Territories" : "Francoski južni teritorij", + "Togo" : "Togo", + "Thailand" : "Tajska", + "Tajikistan" : "Tadžikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizija", + "Tonga" : "Tonga", + "Turkey" : "Turčija", + "Trinidad and Tobago" : "Trinidad in Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tajvan, provinca Kitajske", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukrajina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Ameriški mali oddaljeni otoki", + "United States of America" : "Združene države Amerike", + "Uruguay" : "Urugvaj", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Sveti sedež", + "Saint Vincent and the Grenadines" : "Sveti Vincencij in Grenadine", + "Venezuela, Bolivarian Republic of" : "Venezuela, bolivarska republika", + "Virgin Islands, British" : "Deviški otoki, britanski", + "Virgin Islands, U.S." : "Deviški otoki, ameriški", + "Viet Nam" : "Vijetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis in Futuna", + "Samoa" : "Samoa", + "Yemen" : "Jemen", + "Mayotte" : "Mayotte", + "South Africa" : "Južna Afrika", + "Zambia" : "Zambija", + "Zimbabwe" : "Zimbabve", + "Background blur" : "Zamegljeno ozadje", + "Federation" : "Zvezni oblaki", + "High-performance backend" : "Visoko zmogljivi ozadnji program", + "Error: Cannot connect to server" : "Napaka: ni se mogoče povezati s strežnikom", + "Error: Server did not respond with proper JSON" : "Napaka: odziv strežnika ni ustrezno oblikovan v zapisu JSON", + "Error: Certificate expired" : "Napaka: potrdilo je poteklo", + "Could not get version" : "Ni mogoče pridobiti podatkov različice", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Napaka zagnane različice {version}: za pravilno delovanje je treba strežnik posodobiti na različico, skladno s trenutno nameščenim programom Talk.", + "Error: Server responded with: {error}" : "Napaka: odziv strežnika: {error}", + "Error: Unknown error occurred" : "Napak: prišlo je do neznane napake", + "Recording backend" : "Ozadje posnetka", + "SIP configuration" : "Nastavitve klicne seje SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Neveljaven zapis časa; biti mora v zapisu YYYY-MM-DD", + "Conversation not found" : "Pogovora ni mogoče najti", + "Chat, video & audio-conferencing using WebRTC" : "Klepet in videokonferenčni klici z uporabo WebRT", + "Leave call" : "Zapusti klic", + "Navigating away from the page will leave the call in {conversation}" : "Odhod s strani pusti odprt klic {converstaion}", + "Stay in call" : "Ostani v klicu", + "Discuss this file" : "Pogovor o datoteki", + "Share this file with others to discuss it" : "Za pogovor o datoteki je treba najprej omogočiti souporabo.", + "Share this file" : "Omogoči souporabo", + "Join conversation" : "Pridruži se pogovoru", + "This conversation is password-protected." : "Ta pogovor je zaščiten z geslom", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Zaznanih je več neveljavnih poskusov prijave iz trenutnega naslova IP. Iz varnostnih razlogov bo možnost naslednjega poskusa prijave zadržana za 30 sekund.", + "The password is wrong. Try again." : "Geslo je napačno. Poskusite znova.", + "Password" : "Geslo", + "Submit" : "Pošlji", + "Error requesting the password." : "Prišlo je do napake med zahtevanjem gesla", + "Request password" : "Zahtevaj geslo", + "This conversation has ended" : "Pogovor je končan", + "Error occurred when joining the conversation" : "Prišlo je do napake med povezovanjem v pogovor", + "Close Talk sidebar" : "Zapri bočno okno Talk", + "Open Talk sidebar" : "Odpri bočno okno Talk", + "Everyone" : "Vsi", + "Users and moderators" : "Uporabniki in moderatorji", + "Moderators only" : "Le moderatorji", + "Disable calls" : "Onemogoči klice", + "Save changes" : "Shrani spremembe", + "Saving …" : "Shranjevanje...", + "Saved!" : "Shranjeno!", + "Limit to groups" : "Omeji na skupine", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Ko je izbrana vsaj ena skupina, so lahko udeleženci pogovora le člani izbranih skupin.", + "Guests can still join public conversations." : "Gosti se še vedno lahko pridružijo javnim pogovorom.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Uporabniki, ki ne morejo več uporabljati programa Talk, bodo še vedno na seznamu udeležencev v predhodnih pogovorih, ohranjena bodo tudi njihova sporočila.", + "Limit using Talk" : "Omeji uporabo programa Talk", + "Limit creating a public and group conversation" : "Omeji ustvarjanje javnega ali skupinskega pogovora", + "Limit creating conversations" : "Omeji ustvarjanje pogovorov", + "Limit starting a call" : "Omeji začenjanje pogovora", + "Limit starting calls" : "Omeji začenjanje pogovora", + "When a call has started, everyone with access to the conversation can join the call." : "Ko se klic začne, se lahko kdorkoli z dostopom do pogovora samodejno pridruži.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na strežniku so nameščeni navedeni boti. V dokumentaciji lahko najdete več podrobnosti o {linkstart1}izgradnji lastnih botov{linkend} oziroma možnosti {linkstart2}dodajanja že obstoječih{linkend} na strežnik.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Na strežniku ni nameščenega nobenega bota. V dokumentaciji lahko najdete več podrobnosti o {linkstart1}izgradnji lastnih botov{linkend} oziroma možnosti {linkstart2}dodajanja že obstoječih{linkend} na strežnik.", + "Description is not provided" : "Opis ni podan", + "Locked for moderators" : "Zaklenjeno za moderatorje", + "Enabled" : "Omogočeno", + "Disabled" : "Onemogočeno", + "Bots settings" : "Nastavitve botov", + "State" : "Stanje", + "Name" : "Ime", + "Last error" : "Zadnja napaka", + "Total errors count" : "Skupno število napak", + "Find more bots" : "Poišči več botov", + "Beta" : "Preizkusno", + "Enable Federation in Talk app" : "Omogoči podporo zveznim povezavam v programu Talk", + "Permissions" : "Dovoljenja", + "Select groups …" : "Izbor skupin ...", + "All messages" : "Vsa sporočila", + "@-mentions only" : "Le @-omembe", + "Off" : "Onemogočeno", + "General settings" : "Splošne nastavitve", + "Default notification settings" : "Privzete nastavitve obveščanja", + "Default group notification" : "Privzeta skupinska obveščanja", + "Default group notification for new groups" : "Privzeto skupinsko obveščanje za nove skupine", + "Integration into other apps" : "Združevanje z drugimi programi", + "Allow conversations on files" : "Dovoli pogovore pri datotekah", + "Allow conversations on public shares for files" : "Dovoli pogovore na javnih povezavah pri datotekah", + "Enable encryption" : "Omogoči šifriranje", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "S klikom na potrditveni gumb bodo podatki poslani na strežnik Struktur AG. Več podrobnosti je zbranih na povezavi {linkstart}spreed.eu{linkend}.", + "Pending" : "Na čakanju ...", + "Error" : "Napaka", + "Blocked" : "Zavrnjen", + "Active" : "Dejavno", + "Expired" : "Preteklo", + "Never" : "nikoli", + "The trial could not be requested. Please try again later." : "Zahteve za dostop do preizkusnega strežnika ni mogoče poslati. Poskusite znova kasneje.", + "The account could not be deleted. Please try again later." : "Računa ni mogoče izbrisati. Poskusite znova kasneje.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Partnersko podjetje Struktur AG ponuja storitev, pri kateri je mogoče zahtevati dostop do gostujočega signalnega strežnika. Izpolniti je treba le spodnji obrazec in zahteva bo poslana. Ko je strežnik nastavljen za uporabo bodo vaša poverila samodejno posodobljena, kar prepiše obstoječe nastavitve.", + "URL of this Nextcloud instance" : "Naslov URL te namestitve Nextcloud", + "Full name of the user requesting the trial" : "Polno ime uporabnika, ki zahteva preizkusni dostop", + "Email of the user" : "Elektronski naslov uporabnika", + "Language" : "Jezik", + "Country" : "Država", + "Request signaling server trial" : "Zahtevaj preizkusno uporabo signalnega strežnika", + "You can see the current status of your hosted signaling server in the following table." : "Trenutno stanje gositeljskega signalnega strežnika si lahko ogledate v spodnji razpredelnici.", + "Status" : "Stanje", + "Created at" : "Ustvarjeno", + "Expires at" : "Preteče", + "Limits" : "Omejitve", + "Yes" : "Da", + "No" : "Ne", + "Delete the signaling server account" : "Izbriši račun signalnega strežnika", + "_%n user_::_%n users_" : ["%n uporabnik","%n uporabnika","%n uporabniki","%n uporabnikov"], + "Installed version: {version}" : "Nameščena različica: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Namestitev protokola Matterbridge omogoča povezovanje programa Nextcloud Talk z drugimi storitvami. Za več podrobnosti si oglejte {linkstart1}strani GitHub{linkend}. Prejemanje in nameščanje programa je lahko dolgotrajno, če pa časovno poteče, bo treba namestitev izvesti ročno iz {linkstart2}Trgovine Nextcloud{linkend}.", + "Matterbridge binary was not found or couldn't be executed." : "Zagonske datoteke Matterbridge ni mogoče najti, ali pa je ni mogoče zagnati.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Pot do izvedljive datoteke Matterbridge je mogoče nastaviti tudi ročno med nastavitvami. Za več podrobnosti si oglejte {linkstart}Dokumentacijo združevalnika Matterbridge{linkend}.", + "Downloading …" : "Poteka prejemanje …", + "Install Talk Matterbridge" : "Namesti Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Prišlo je do napake med nameščanjem programa Matterbridge.", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Prišlo je do napake med nameščanjem programa Matterbridge Talk. Namestite ga ročno.", + "Failed to execute Matterbridge binary." : "Zagon izvedljive datoteke Matterbridge je spodletel.", + "Matterbridge integration" : "Združevalnik Matterbridge", + "Enable Matterbridge integration" : "Omogoči združevalnik Matterbridge", + "Status: Checking connection" : "Stanje: preverjanje povezave", + "OK: Running version: {version}" : "Brez napak: zagnana različica: {version}", + "Error: Server seems to be a Signaling server" : "Napaka: kaže, da je povezan signalni strežnik", + "Recording backend URL" : "Naslov URL ozadja posnetka", + "Validate SSL certificate" : "Overi potrdilo SSL", + "Delete this server" : "Izbriši strežnik", + "Test this server" : "Preizkusi strežnik", + "Disabled for all calls" : "Onemogoči za vse klice", + "Enabled for all calls" : "Omogoči za vse klice", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Nastavitvi PHP »upload_max_filesize« oziroma »post_max_size« omogočata pošiljanje datotek do velikosti {maxUpload}.", + "Recording backend settings saved" : "Nastavitve snemalnega ozadnjega strežnika so shranjene", + "Add a new recording backend server" : "Dodaj nov snemalni ozadnji strežnik", + "Shared secret" : "Skrivna koda", + "Recording consent" : "Strinjanje s snemanjem", + "SIP configuration saved!" : "Nastavitve klicne seje SIP so shranjene!", + "Restrict SIP configuration" : "Omeji nastavitve klicne seje SIP", + "Enable SIP configuration" : "Omogoči nastavitve sklicne seje SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Le uporabniki navedenih skupin lahko omogočijo klicno sejo SIP pri pogovorih, ki jih vodijo.", + "Phone number (Country)" : "Telefonska številka (država)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Te podrobnosti so poslane v vabilih, prav tako so prikazane v bočnem oknu vseh udeležencev.", + "Error code" : "Koda napake", + "High-performance backend URL" : "Naslov URL do gostujočega visoko zmogljivega ozadnjega programa", + "High-performance backend settings saved" : "Nastavitve visoko zmogljivega ozadnjega strežnika so shranjene", + "STUN server URL" : "Naslov URL strežnika STUN", + "The server address is invalid" : "Naslov strežnika ni veljaven", + "STUN settings saved" : "Nastavitve strežnika STUN so shranjene", + "STUN servers" : "Strežniki STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Strežnik TURN se uporablja za določanje javnega naslova IP udeležencev za požarnim zidom.", + "Add a new STUN server" : "Dodaj nov strežnik STUN", + "{schema} scheme must be used with a domain" : "Shema {schema} mora biti uporabljena z domeno.", + "{option1} and {option2}" : "{option1} in {option2}", + "{option} only" : "le {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: strežnik TURN vrača uspešno zaznane kandidate ICE", + "Error: No working ICE candidates returned by the TURN server" : "Napaka: strežnik TURN ni vrnil seznama kandidateov ICE", + "Testing whether the TURN server returns ICE candidates" : "Preizkušanje, ali strežnik TURN vrne seznam kandidatov ICE", + "TURN server schemes" : "Sheme strežnika TURN", + "TURN server URL" : "Naslov URL strežnika TURN", + "TURN server secret" : "Skrivno geslo strežnika TURN", + "TURN server protocols" : "Protokoli strežnika TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Strežnik TURN se uporablja za posredovanje podatkovnega prometa udeležencev za požarnimi zidovi. O tovrstnih rešitvah je dobro razmisliti, kadar se uporabniki ne uspejo povezati drug z drugim. Za več podrobnosti o možnostih namestitve in uporabe strežnikov TURN si oglejte {linkstart}dokumentacijo{linkend}.", + "TURN settings saved" : "Nastavitve strežnika TURN so shranjene", + "TURN servers" : "Strežniki TURN", + "Add a new TURN server" : "Dodaj nov strežnik TURN", + "Failed" : "Opravilo je spodletelo!", + "OK" : "V redu", + "Checking …" : "Poteka preverjanje ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Spodletelo opravilo: program WebAssembly je onemogočen ali pa v tej različici brskalnika ni podprt. Omogočite program oziroma uporabite ustreznejši brskalnik za preverjanje.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Spodletelo opravilo: s strežnika so vrnjene neustrezne datoteke ».wasm« in ».tflite«. V dokumentaciji »Sistemskih zahtev« preverite določila za program Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Uspešna izvedba: s spletnega strežnika so vrnjene ustrezne datoteke ».wasm« in ».tflite«.", + "Web server setup checks" : "Preverjanje nastavitev spletnega strežnika", + "Files required for virtual background can be loaded" : "Datoteke, uporabljene za zamegljevanje ozadja, je mogoče naložiti.", + "Federated user" : "Zvezni uporabnik", + "Assign participants to rooms" : "Dodeli udeležence v skupine", + "Configure breakout rooms" : "Nastavi ločene skupine", + "Number of breakout rooms" : "Število ločenih skupin", + "Assignment method" : "Način dodeljevanja", + "Automatically assign participants" : "Samodejno razvrsti udeležence", + "Manually assign participants" : "Ročno razvrsti udeležence", + "Allow participants to choose" : "Dovoli udeležencem izbor skupine", + "Create rooms" : "Ustvari ločene skupine", + "Confirm" : "Potrdi", + "Create breakout rooms" : "Ustvari ločene skupine", + "Reset" : "Ponastavi", + "Delete breakout rooms" : "Izbriši ločene skupine", + "Room {roomNumber}" : "Skupina {roomNumber}", + "Current breakout rooms and settings will be lost" : "Trenutne nastavitve skupin in dejavne skupine bodo odstranjenje", + "Cancel" : "Prekliči", + "Unassigned participants" : "Nedodeljeni udeleženci", + "Back" : "Nazaj", + "Assign" : "Dodeli", + "Add participant \"{user}\"" : "Dodaj uporabnika »{user}«", + "Invalid calendar selected" : "Izbran je neveljaven koledar", + "Unknown error occurred" : "Prišlo je do neznane napake.", + "Meeting created" : "Srečanje je ustvarjeno.", + "Upcoming meetings" : "Prihajajoča srečanja", + "Loading …" : "Poteka nalaganje …", + "No upcoming meetings" : "Ni prihajajočih srečanj", + "Schedule a meeting" : "Načrtovanje srečanja", + "Meeting title" : "Naslov srečanja", + "From" : "Od", + "To" : "Za", + "Calendar" : "Koledar", + "Attendees" : "Udeleženci", + "Add attendees" : "Dodaj udeležence", + "Save" : "Shrani", + "Search participants" : "Poišči udeležence", + "No results" : "Ni zadetkov", + "Done" : "Končano", + "Raise hand" : "Dvigni roko", + "Raise hand (R)" : "Dvigni roko (R)", + "Lower hand" : "Spusti roko", + "Lower hand (R)" : "Spusti roko (R)", + "Exit full screen (F)" : "Končaj celozaslonski način (F)", + "Full screen (F)" : "Celozaslonski način (F)", + "Speaker view" : "Pogled govorca", + "Grid view" : "Mrežni pogled", + "Recording consent is required" : "Zahtevano je soglasje za snamenje", + "This conversation is read-only" : "Ta pogovor je le za branje", + "Connection failed" : "Povezava je spodletela", + "Reload" : "Ponovno naloži", + "{nickName} raised their hand." : "{nickName} dvigne roko.", + "A participant raised their hand." : "Udeleženec dvigne roko.", + "Collapse stripe" : "Skrči polja", + "Expand stripe" : "Razširi polja", + "Previous page of videos" : "Predhodna stran videoposnetkov", + "Next page of videos" : "Naslednja stran videoposnetkov", + "Connecting …" : "Poteka vzpostavljanje povezave ...", + "Calling …" : "Poteka klicanje ...", + "Waiting for {user} to join the call" : "Čakajoč na osebo {user}, da se pridruži klicu ...", + "Waiting for others to join the call …" : "V pričakovanju odziva drugih udeleženev ...", + "You can invite others in the participant tab of the sidebar" : "Sogovornike lahko dodate z uporabo iskalnika v zavihku Udeleženci bočnega okna", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Sogovornike lahko dodate prek iskalnika v zavihku Udeleženci bočnega okna, ali pa jim pošljete povezavo!", + "Share this link to invite others!" : "Objavite to povezavo in povabite tudi druge!", + "Copy link" : "Kopiraj povezavo", + "You are not allowed to enable audio" : "Ni ustreznih dovoljenj za omogočanje zvoka", + "No audio. Click to select device" : "Ni zvoka. Kliknite za izbor naprave.", + "Mute audio" : "Utišaj zvok", + "Mute audio (M)" : "Utišaj zvok (M)", + "Unmute audio" : "Povrni zvok", + "Unmute audio (M)" : "Povrni zvok (M)", + "None" : "Brez", + "Access to camera was denied" : "Dostop do kamere je bil zavrnjen.", + "Error while accessing camera: It is likely in use by another program" : "Napaka dostopa do kamere: najverjetneje je v uporabi pri drugem programu.", + "Error while accessing camera" : "Napaka med dostopom do kamere", + "You have been muted by a moderator" : "Moderator vas je začasno utišal", + "Hide presenter video" : "Skrij video predstavljalca", + "You are not allowed to enable video" : "Ni ustreznih dovoljenj za omogočanje videa", + "No video. Click to select device" : "Ni slike. Kliknite za izbor naprave.", + "Disable video" : "Onemogoči video", + "Disable video (V)" : "Onemogoči video (V)", + "Enable video" : "Omogoči video", + "Enable video (V)" : "Omogoči video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video (v) – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Omogoči video. – Med prvim omogočanjem bo povezava za trenutek prekinjena.", + "Show presenter" : "Pokaži govorca", + "You" : "Jaz", + "Mute" : "Utišaj", + "Muted" : "Utišano", + "Show screen" : "Pokaži zaslon", + "Stop following" : "Prekini osrednji pogled", + "Connection could not be established …" : "Povezave ni mogoče vzpostaviti ...", + "Connection was lost and could not be re-established …" : "Povezava je izgubljena in je ni mogoče znova vzpostaviti ...", + "Connection could not be established. Trying again …" : "Povezave ni bilo mogoče vzpostaviti. Poteka ponovno vzpostavljanje ...", + "Connection lost. Trying to reconnect …" : "Povezava je bila prekinjena. Poteka poskus ponovne povezave ...", + "Connection problems …" : "Zaznane so težave s povezavo ...", + "Collapse" : "Skrči", + "Expand" : "Razširi", + "You need to be logged in to upload files" : "Za pošiljanje datotek morate biti prijavljeni v oblak", + "Drop your files to upload" : "Spustite datoteke za pošiljanje v oblak", + "Conversation messages" : "Sporočila pogovora", + "Scroll to bottom" : "Podrsajte do dna", + "Post message" : "Objavi sporočilo", + "Federated conversation" : "Zvezni pogovor", + "Public conversation" : "Javni pogovor", + "Favorite" : "Priljubljeno", + "Banned users" : "Zavrnjeni uporabniki", + "Date:" : "Datum:", + "Note:" : "Opomba:", + "Hide details" : "Skrij podrobnosti", + "Show details" : "Pokaži podrobnosti", + "Error while updating conversation name" : "Prišlo je do napake med posodabljanjem imena pogovora", + "Error while updating conversation description" : "Prišlo je do napake med posodabljanjem opisa pogovora", + "Enter a name for this conversation" : "Naziv novega pogovora", + "Edit conversation name" : "Uredi ime pogovora", + "Edit conversation description" : "Uredi opis pogovora", + "Enter a description for this conversation" : "Vpis opisa za ta pogovor", + "Picture" : "Slika", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "V pogovoru so na voljo navedeni boti. Za več možnosti stopite v stik s skrbnikom sistema.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Na strežniku še ni nameščenih botov. Za uporabo te možnosti stopite v stik s skrbnikom sistema.", + "Disable" : "Onemogoči", + "Enable" : "Omogoči", + "Breakout rooms" : "Ločene skupine", + "Manage breakout rooms" : "Upravljaj ločene skupine", + "Set up breakout rooms for this conversation" : "Nastavitev ločenih skupin za ta pogovor", + "Please select a valid PNG or JPG file" : "Izbrati je treba veljavno datoteko png ali jpg.", + "Choose your conversation picture" : "Izberi sliko pogovora", + "Choose" : "Izbor", + "Error setting conversation picture" : "Prišlo je do napake med nastavljanjem slike pogovora", + "Could not set the conversation picture: {error}" : "Ni mogoče nastaviti slike pogovora: {error}", + "Error cropping conversation picture" : "Prišlo je do napake med obrezovanjem slike pogovora", + "Error removing conversation picture" : "Prišlo je do napake med odstranjevanjem slike pogovora", + "Set emoji as conversation picture" : "Nastavi izrazno ikono kot sliko pogovora", + "Set background color for conversation picture" : "Nastavi barvo ozadja za sliko pogovora", + "Upload conversation picture" : "Pošlji sliko pogovora", + "Choose conversation picture from files" : "Izberi sliko pogovore med datotekami", + "Remove conversation picture" : "Odstrani sliko pogovora", + "The file must be a PNG or JPG" : "Datoteka mora biti v zapisu PNG ali JPG", + "Set picture" : "Nastavi sliko", + "Default permissions modified for {conversationName}" : "Za pogovor {conversationName} so spremenjena privzeta dovoljenja.", + "Could not modify default permissions for {conversationName}" : "Za pogovor {conversationName} ni mogoče spremeniti privzetih dovoljenj.", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Nastavitve določajo privzeta dovoljenja udeležencev tega pogovora. Te ne posegajo v dovoljenja moderatorjev.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Po vsaki spremembi dovoljenj v tem odseku se dovoljenja po meri, predhodno dodeljena posameznim udeležencem, samodejno odstranijo.", + "All permissions" : "Vsa dovoljenja", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Udeleženci imajo dovoljenje začeti klic, se pridružiti klicu, omogočiti zvok in sliko ter omogočiti prikaz zaslona.", + "Restricted" : "Omejeno", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Udeleženci se lahko pridružijo klicu, vendar ne morejo omogočiti zvoka, videa in prikaza zaslona, dokler jim moderator ročno ne dodeli teh dovoljenj.", + "Advanced permissions" : "Napredna dovoljenja", + "Edit permissions" : "Uredi dovoljenja", + "Conversation settings" : "Nastavitve pogovora", + "Basic Info" : "Osnovni podatki", + "Personal" : "Osebno", + "Moderation" : "Moderacija", + "Setup overview" : "Pregled nastavitve", + "Breakout Rooms" : "Ločene skupine", + "Matterbridge" : "Matterbridge", + "Bots" : "Boti", + "Danger zone" : "Spremljanje pogovora", + "Leave conversation" : "Zapusti pogovor", + "You need to promote a new moderator before you can leave the conversation" : "Pred odhodom iz pogovora je treba nekoga določiti za moderatorja.", + "Delete conversation" : "Razumem tveganje, izbriši pogovor", + "Do you really want to delete \"{displayName}\"?" : "Ali res želite izbrisati »{displayName}«?", + "Error while deleting conversation" : "Napaka med brisanjem pogovora", + "Delete all chat messages" : "Izbriši vsa sporočila klepeta", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ali res želite izbrisati vsa sporočila v »{displayName}«?", + "Error while clearing chat history" : "Prišlo je do napake med čiščenjem zgodovine klepeta", + "Be careful, these actions cannot be undone." : "Nepremišljenega izbora možnosti spodaj ni mogoče povrniti. Priporočena je previdnost pri uporabi.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Ko pogovor enkrat zapustite, se sami ne morete več pridružiti, za pogovor morate spet prejeti povabilo. To ne velja za odprte pogovore, ti so vedno dostopni.", + "Permanently delete this conversation." : "Trajno izbriši ta pogovor.", + "Delete chat messages" : "Izbriši sporočila klepeta", + "Permanently delete all the messages in this conversation." : "Trajno izbriši vsa sporočila tega pogovora.", + "_%n hour_::_%n hours_" : ["%n ura","%n uri","%n ure","%n ur"], + "_%n day_::_%n days_" : ["%n dan","%n dneva","%n dni","%n dni"], + "_%n week_::_%n weeks_" : ["%n teden","%n tedna","%n tedne","%n tednov"], + "Custom expiration time" : "Datum preteka po meri", + "Message expiration disabled" : "Možnost preteka sporočila je onemogočena", + "Message expiration set: {duration}" : "Možnost preteka sporočila je nastavljena: {duration}", + "Error when trying to set message expiration" : "Napaka pri nastavljanju preteka sporočil", + "Message expiration" : "Pretek sporočila", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Sporočila klepeta lahko po določenem času potečejo. Opomba: datoteke, ki so v skupni rabi v klepetu, se za lastnika ne izbrišejo, vendar se bodo več zbrane v pogovoru.", + "Set message expiration" : "Nastavi pretek sporočila", + "Current message expiration" : "Trenuten pretek sporočila", + "Password copied to clipboard" : "Geslo je kopirano v odložišče!", + "Password could not be copied" : "Gesla ni mogoče kopirati.", + "Guest access" : "Dostop gostov", + "Allow guests to join this conversation via link" : "Dovoli gostom povezovanje v pogovor prek povezave", + "Password protection" : "Zaščiti z geslom", + "Set a password" : "Nastavi geslo", + "Change password" : "Spremeni geslo", + "Enter new password" : "Vpis novega gesla", + "Save password" : "Shrani geslo", + "Copy password" : "Kopiraj geslo", + "Resend invitations" : "Ponovno pošlji vabila", + "This conversation is limited to the current participants" : "Pogovor je omejen na trenutne udeležence", + "Error occurred when opening or limiting the conversation" : "Prišlo je do napake med odpiranjem oziroma omejevanjem dostopa do pogovora", + "Open conversation to registered users, showing it in search results" : "Odpri pogovor za vpisane uporabnike in prikaži pogovor med zadetki iskanja.", + "Open conversation" : "Odpri pogovor", + "Start time: {date}" : "Začetek: {date}", + "Start time has been updated" : "Čas začetka je posodobljen", + "Error occurred while updating start time" : "Prišlo je do napake med posodabljanjem časa začetka.", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Omogočanje čakalnice odstrani udeležence iz trenutnega pogovora. Vloga moderatorja se ne spremeni.", + "Enable lobby, restricting the conversation to moderators" : "Omogoči čakalnico in omeji pogovor na moderatorje", + "Meeting start time" : "Čas začetka sestanka", + "Start time (optional)" : "Čas začetka (izbirno)", + "Error occurred when locking the conversation" : "Prišlo je do napake med zaklepanjem pogovora.", + "Error occurred when unlocking the conversation" : "Prišlo je do napake med odklepanjem pogovora.", + "Lock conversation" : "Zakleni pogovor", + "This will also terminate the ongoing call." : "S tem dejanjem bo končan tudi trenutni klic.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Zakleni pogovor in prepreči vsakršno objavljanje sporočil in začenjanje klicev.", + "Edit" : "Uredi", + "More information" : "Več podrobnosti", + "Delete" : "Izbriši", + "Add new bridged channel to current conversation" : "Dodaj nov premostitveni kanal za trenutni pogovor", + "unknown state" : "neznano stanje", + "running" : "zagnano", + "not running, check Matterbridge log" : "ni zagnano; preverite dnevniški zapis Matterbridge", + "not running" : "nedejavno", + "Bridge saved" : "Premostitveni kanal je shranjen", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Z Matterbridge je mogoče premostiti kanale različnih sistemov hipnega sporočanja.", + "More info on Matterbridge" : "Več podrobnosti o Matterbridge", + "Enable bridge" : "Omogoči premoščanje", + "Show Matterbridge log" : "Pokaži dnevnik Matterbridge", + "Log content" : "Vsebina dnevnika", + "Notifications" : "Obvestila", + "Notify about calls in this conversation" : "Obvesti o klicih v pogovoru", + "Important conversation" : "Pomemben pogovor", + "SIP dial-in is now possible without PIN requirement" : "Klicanje preko SIP je mogoče brez zahteve vpisa kode PIN", + "SIP dial-in is now enabled" : "Povezovanje prek klicne seje SIP je omogočeno", + "SIP dial-in is now disabled" : "Povezovanje prek klicne seje SIP je onemogočeno", + "Error occurred when enabling SIP dial-in" : "Prišlo je do napake med omogočanjem povezave prek klicne seje SIP", + "Error occurred when disabling SIP dial-in" : "Prišlo je do napake med onemogočanjem povezave prek klicne seje SIP", + "Phone and SIP dial-in" : "Telefonske in klicne povezave SIP", + "Enable phone and SIP dial-in" : "Omogoči telefonske in klicne povezave SIP", + "Allow to dial-in without a PIN" : "Dovoli klicanje brez kode PIN", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "Join" : "Pridruži se", + "Error while creating the conversation" : "Prišlo je do napake med ustvarjanjem pogovora", + "Create a new conversation" : "Ustvari nov pogovor", + "Join open conversations" : "Pridruži se odprtemu pogovoru", + "Call a phone number" : "Pokliči telefonsko številko", + "Unread mentions" : "Neprebrane omembe", + "Create conversation" : "Ustvari pogovor", + "Enter your name" : "Vpišite ime", + "Submit name and join" : "Pošlji ime in se pridruži", + "Log in" : "Prijava", + "Import a file" : "Uvozi datoteko", + "Browse" : "Prebrskaj", + "Verifying uploaded file …" : "Overi poslano datoteko ...", + "This might take a moment" : "Opravilo lahko traja.", + "Send invitations" : "Pošlji vabila", + "Creating the conversation …" : "Poteka ustvarjanje pogovora ...", + "Mark as read" : "Označi kot prebrano", + "Mark as unread" : "Označi kot neprebrano", + "Remove from favorites" : "Odstrani iz priljubljenih", + "Add to favorites" : "Dodaj med priljubljene", + "You need to promote a new moderator before you can leave the conversation." : "Pred odhodom iz pogovora je treba nekoga določiti za moderatorja.", + "Conversation actions" : "Dejanja pogovora", + "Hide message text" : "Skrij besedilo sporočila", + "Pending invitations" : "Čakajoča vabila", + "Decline invitation" : "Zavrni povabilo", + "Accept invitation" : "Sprejmi povabilo", + "Home" : "Začetna stran", + "Unread" : "Neprebrano", + "Mentions" : "Omembe", + "Meetings" : "Srečanja", + "Alphabetically" : "Abecedno", + "No matches found" : "Ni najdenih zadetkov", + "No conversations found" : "Pogovora ni mogoče najti", + "You have no unread mentions." : "Ni neodgovorjenih omemb.", + "You have no unread messages." : "Ni neodgovorjenih spodočil.", + "An error occurred while performing the search" : "Me iskanjem je prišlo do napake", + "Conversation list" : "Seznam pogovorov", + "Unread messages" : "Neprebrana sporočila", + "Clear filters" : "Počisti filtre", + "New personal note" : "Novo osebno sporočilo", + "Clear filter" : "Počisti filter", + "App settings" : "Nastavitve programa", + "Users" : "Uporabniki", + "Groups" : "Skupine", + "Teams" : "Ekipe", + "Federated users" : "Zvezni uporabniki", + "New private conversation" : "Nov zasebni pogovor", + "Other sources" : "Drugi viri", + "Open conversations" : "Odprti pogovori", + "No search results" : "Ni zadetkov iskanja", + "Users, groups and teams" : "Uporabniki, skupine in ekipe", + "Users and groups" : "Uporabniki in skupine", + "Users and teams" : "Uporabniki in ekipe", + "Groups and teams" : "Skupine in ekipe", + "The meeting will start soon" : "Srečanje se bo kmalu začelo", + "This meeting is scheduled for {startTime}" : "Začetek srečanja je načrtovan ob {startTime}", + "You are currently waiting in the lobby" : "Trenutno čakate v spletni čakalnici.", + "Select microphone" : "Izbor mikrofona", + "No microphone available" : "Ni razpoložljivega mikrofona", + "Select camera" : "Izbor kamere", + "No camera available" : "Ni razpoložljive kamere", + "Select a device" : "Izbor naprave", + "Playing …" : "Predvajanje ...", + "Test speakers" : "Preizkusi zvočnike", + "Test" : "Preizkus", + "Devices" : "Naprave", + "Backgrounds" : "Ozadja", + "No audio" : "Brez zvoka", + "No camera" : "Ni zaznane kamere", + "Calls are not supported in your browser" : "Klici v tem brskalniku niso podprti", + "Access to microphone is only possible with HTTPS" : "Dostop do mikrofona je mogoče le prek protokola HTTPS", + "Access to microphone was denied" : "Dostop do mikrofona je bil zavrnjen.", + "Error while accessing microphone" : "Napaka med dostopom do mikrofona", + "Access to camera is only possible with HTTPS" : "Dostop do kamere je mogoče le prek protokola HTTPS", + "The call is being recorded." : "Klic se snema.", + "The call might be recorded." : "Klic se morda snema.", + "Apply settings" : "Uveljavi nastavitve", + "Select virtual office background" : "Izbor slike pisarne za ozadje", + "Select virtual home background" : "Izbor domačega okolja za sliko ozadja", + "Select virtual abstract background" : "Izbor abstraktne slike za ozadje", + "Select virtual beach background" : "Izbor slike plaže za ozadje", + "Select virtual park background" : "Izbor slike parka za ozadje", + "Select virtual theater background" : "Izbor slike gledališče za ozadje", + "Select virtual library background" : "Izbor slike knjižnice za ozadje", + "Select virtual space station background" : "Izbor slike vesoljske postaje za ozadje", + "Error while uploading the file" : "Prišlo je do napake med pošiljanjem slike", + "Select a file" : "Izbor datoteke", + "Invalid path selected" : "Izbrana je neveljavna pot", + "Select virtual background from file {fileName}" : "Izbor slike ozadje iz datoteke {fileName}", + "Blur" : "Zameglitev", + "Upload" : "Pošlji", + "Files" : "Datoteke", + "(editing)" : "(urejanje)", + "(edited)" : "(spremenjeno)", + "The message has expired or has been deleted" : "Sporočilo je poteklo ali pa je bilo izbrisano", + "Cancel quote" : "Prekliči navedek", + "24 hours" : "24 ur", + "7 days" : "7 dni", + "Clear reminder – {timeLocale}" : "Počisti opomnik – {timeLocale}", + "Message text copied to clipboard" : "Besedilo sporočila je kopirano v odložišče", + "Message text could not be copied" : "Besedila sporočila ni mogoče kopirati", + "A reminder was successfully removed" : "Opomnik je uspešno odstranjen", + "Error occurred when removing a reminder" : "Prišlo je do napake med odstranjevanjem opomnika", + "Error occurred when creating a reminder" : "Prišlo je do napake med ustvarjanjem opomnika", + "Add a reaction to this message" : "Dodaj odziv na to sporočilo", + "Reply" : "Odgovori", + "More actions" : "Več dejanj", + "Set reminder" : "Nastavi opomnik", + "Reply privately" : "Odgovori zasebno", + "Edit message" : "Uredi sporočilo", + "Copy message" : "Kopiraj sporočilo", + "Copy message link" : "Kopiraj povezavo sporočila", + "Go to file" : "Odpri mesto datoteke", + "Download file" : "Prejmi datoteko", + "Forward message" : "Posreduj sporočilo", + "Translate" : "Prevodi", + "Set custom reminder" : "Nastavi opomnik po meri", + "Close reactions menu" : "Zapri meni odzivov", + "React with {emoji}" : "Odzovi se z {emoji}", + "React with another emoji" : "Odzovi se z novo izrazno ikono", + "Choose a conversation to forward the selected message." : "Izbor pogovora za posredovanje izbranega sporočila.", + "Error while forwarding message" : "Prišlo je do napake med posredovanjem sporočil.", + "The message has been forwarded to {selectedConversationName}" : "Sporočilo je posredovano v pogovor {selectedConversationName}", + "Dismiss" : "Opusti", + "Go to conversation" : "Pojdi na pogovor", + "Detect language" : "Zaznava jezika", + "The message could not be translated" : "Sporočila ni mogoče prevesti", + "Translation copied to clipboard" : "Prevod je kopiran v odložišče", + "Translation could not be copied" : "Prevoda ni mogoče kopirati!", + "Translate message" : "Prevedi sporočilo", + "Source language to translate from" : "Izvorni jezik za prevod", + "Translate from" : "Prevedi iz", + "Target language to translate into" : "Ciljni jezik za prevod", + "Translate to" : "Prevedi v", + "Translating" : "Poteka prevajanje", + "Copy translated text" : "Kopiraj prevedeno besedilo", + "Send now" : "Pošlji takoj", + "Message read by everyone who shares their reading status" : "Sporočilo lahko prebere vsak, ki objavlja nastavitev stanja branja", + "Message sent" : "Sporočilo je poslano", + "Deleting message" : "Brisanje sporočila", + "Message deleted successfully" : "Sporočilo je uspešno izbrisano", + "Message could not be deleted because it is too old" : "Sporočila ni mogoče izbrisati, ker je prestaro", + "Only normal chat messages can be deleted" : "Izbrisati je mogoče le običajna sporočila v klepetu", + "An error occurred while deleting the message" : "Prišlo je do napake med brisanjem sporočila", + "Your browser does not support playing audio files" : "Določen spletni brskalnik ne podpira možnosti predvajanja zvoka.", + "Contact" : "Stik", + "{stack} in {board}" : "{stack} v {board}", + "Deck Card" : "Naloga Deck", + "Remove {fileName}" : "Odstrani datoteko {fileName}", + "Open this location in OpenStreetMap" : "Odpri to mesto v programu Openstreetmap", + "Sending message" : "Poteka pošiljanje sporočila", + "Failed to send the message. Click to try again" : "Pošiljanje sporočila je spodletelo. Poskusite znova.", + "Not enough free space to upload file" : "Ni dovolj prostora za pošiljanje datoteke", + "You cannot send messages to this conversation at the moment" : "Trenutno v ta pogovor ni mogoče pošiljati sporočil.", + "Could not update the message" : "Sporočila ni mogoče posodobiti", + "Open poll" : "Odprta anketa", + "See results" : "Pokaži rezultate", + "Reactions" : "Odzivi", + "No permission to post reactions in this conversation" : "Ni ustreznih dovoljenj za objavo odzivov v pogovoru", + "Show all reactions" : "Pokaži vse odzive", + "Add more reactions" : "Dodaj več odzivov", + "Show or collapse system messages" : "Pokaže ali skrije sistemska sporočila", + "No messages" : "Ni sporočil", + "All messages have expired or have been deleted." : "Vsa sporočila so potekla ali pa so bila izbrisana", + "Unpin" : "Odpni", + "Cancel search" : "Prekliči iskanje", + "Add a phone number" : "Dodaj telefonsko številko", + "Create a new group conversation" : "Ustvari nov skupinski pogovor", + "Add participants" : "Dodaj udeležence", + "Conversation visibility" : "Vidnost pogovora", + "Allow guests to join via link" : "Dovoli gostom povezovanje prek povezave", + "Enter password" : "Vpis gesla", + "This conversation has been locked" : "Ta pogovor je zaklenjen", + "No permission to post messages in this conversation" : "Za objavo sporočil v ta pogovor so zahtevana posebna dovoljenja.", + "Joining conversation …" : "Poteka povezovanje v pogovor ...", + "Send message silently" : "Sporočila pošlji tiho", + "Send message" : "Pošlji sporočilo", + "Send without notification" : "Pošlji brez obvestila", + "The participant will not be notified about new messages" : "Udeleženec ne bo obveščen o tem sporočilu", + "File to share" : "Datoteka za souporabo", + "File upload is not available in this conversation" : "V tem pogovoru pošiljanje datotek ni mogoče", + "Add emoji" : "Vstavi izrazno ikono", + "Send later" : "Pošlji kasneje", + "Cancel editing" : "Prekliči urejanje", + "{user} is out of office and might not respond." : "{user} ni na voljo in morda ne bo odziva.", + "Share from {nextcloud}" : "Pošlji iz {nextcloud}", + "Share from Files" : "Poveži iz oblaka", + "Share files to the conversation" : "Poveži datoteke s pogovorom", + "Upload from device" : "Pošlji z naprave", + "Create new poll" : "Ustvari novo anketo", + "Smart picker" : "Pametni izbirnik", + "Record voice message" : "Posnemi glasovno sporočilo", + "End recording and send" : "Končaj snemanje in pošlji", + "Dismiss recording" : "Opusti posnetek", + "Access to the microphone was denied" : "Dostop do mikrofona je bil zavrnjen.", + "Microphone either not available or disabled in settings" : "Mikrofon ni na voljo ali pa je onemogočen med nastavitvami", + "Error while recording audio" : "Prišlo je do napake med snemanjem zvoka", + "New file" : "Nova datoteka", + "Blank" : "Prazno", + "Error while creating file" : "Prišlo je do napake med ustvarjanjem datoteke", + "Create and share a new file" : "Ustvari in omogoči souporabo nove datoteke", + "Name of the new file" : "Ime nove datoteke", + "Create file" : "Ustvari datoteko", + "Someone is typing …" : "Nekdo vnaša besedilo ...", + "{user1} is typing …" : "{user1} vnaša besedilo ...", + "{user1} and {user2} are typing …" : "{user1} in {user2} vnašata besedilo …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} in {user3} vnašajo besedilo …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} in %n drug uporabnik vnašajo besedilo …","{user1}, {user2}, {user3} in %n druga uporabnika vnašajo besedilo …","{user1}, {user2}, {user3} in %n drugih uporabniki vnašajo besedilo …","{user1}, {user2}, {user3} in %n drugih uporabnikov vnaša besedilo …"], + "Add more files" : "Dodaj več datotek", + "Send" : "Pošlji", + "In this conversation {user} can:" : "V tem pogovoru lahko {user}:", + "Edit default permissions for participants in {conversationName}" : "Napredna dovoljenja za udeležence v pogovoru {conversationName}", + "Start a call" : "Začenjanje klicev", + "Skip the lobby" : "Preskakovanje čakalnice", + "Can post messages and reactions" : "Pošiljanje sporočil in odzivov", + "Enable the microphone" : "Omogočanje mikrofona", + "Enable the camera" : "Omogočanje kamere", + "Share the screen" : "Omogočanje prikaza zaslona", + "Update permissions" : "Posodobi dovoljenja", + "Updating permissions" : "Poteka posodabljanje dovoljenj", + "Create poll" : "Ustvari anketo", + "Question" : "Vprašanje", + "Ask a question" : "Zastavite vprašanje", + "Answers" : "Dogovori", + "Answer {option}" : "Odgovor {option}", + "Delete poll option" : "Izbriši možnost ankete", + "Add answer" : "Dodaj odgovor", + "Settings" : "Nastavitve", + "Anonymous poll" : "Anonimna anketa", + "Multiple answers" : "Več odgovorov", + "You voted for this option" : "Glasovali ste za to možnost", + "End poll" : "Končaj anketo", + "Change your vote" : "Spremenite glasovanje", + "Results" : "Zadetki", + "Voted participants" : "Dejavni udeleženci", + "Send a message to \"{roomName}\"" : "Pošlji sporočilo v skupino »{roomName}«", + "Hide list of participants" : "Skrij seznam udeležencev", + "Show list of participants" : "Pokaži seznam udeležencev", + "Assistance requested in {roomName}" : "Poslana je zahteva za pomoč v ločeni skupini {roomName}", + "The message was sent to \"{roomName}\"" : "Sporočilo je poslano v skupino »{roomName}«", + "Dismiss request for assistance" : "Opusti zahtevo za pomoč", + "Send message to room" : "Pošlji sporočilo v ločene skupine", + "Back to main room" : "Nazaj na skupno mesto", + "Back to your room" : "Nazaj v dodeljeno ločeno skupino", + "Message all rooms" : "Sporočilo za vse ločene skupine", + "Start session" : "Začni sejo", + "Start a call before you start a breakout room session" : "Pred odpiranjem ločenih skupin je treba začeti klic", + "Stop session" : "Zaustavi sejo", + "The message was sent to all breakout rooms" : "Sporočilo je bilo poslano v vse ločene skupine", + "Send a message to all breakout rooms" : "Pošlji sporočilo v vse ločene skupine", + "Breakout rooms are not started" : "Ločene seje niso zagnane", + "Disable lobby" : "Onemogoči čakalnico", + "Settings for participant \"{user}\"" : "Nastavitve za udeleženca »{user}«", + "Participant \"{user}\"" : "Uporabnik »{user}«", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "gost", + "Ringing …" : "Zvoni na drugi strani ...", + "Call rejected" : "Klic je zavrnjen", + "{time} talking …" : "{time} pogovora …", + "{time} talking time" : "{time} pogovora", + "Raised their hand" : "Dvigne roko", + "Joined with video" : "Povezano z videom", + "Joined via phone" : "Povezano pred telefona", + "Joined with audio" : "Povezano z zvokom", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Opis lahko sestavlja največ {maxLength} znakov. Trenutno sporočilo jih ima {charactersCount}.", + "Remove group and members" : "Odstrani skupino in člane", + "Remove team and members" : "odstrani ekipo in člane", + "Remove participant" : "Odstrani udeleženca", + "Permissions set to default for {displayName}" : "Dovoljenja za {displayName} so nastavljena na privzete vrednosti.", + "Phone number could not be muted" : "Telefonske številke ni mogoče utišati", + "Phone number could not be unmuted" : "Telefonski številki ni mogoče povrniti glasu", + "DTMF message could not be sent" : "Sporočila DTMF ni mogoče poslati.", + "Phone number copied to clipboard" : "Telefonska številka je kopirana v odložišče", + "Phone number could not be copied" : "Telefonske številke ni mogoče kopirati", + "in the lobby" : "v čakalnici", + "Dial out phone" : "Pokliči telefon", + "Hang up phone" : "Prekini telefon", + "Move back to lobby" : "Premakni nazaj v čakalnico", + "Move to conversation" : "Premakni v pogovor", + "Dial-in PIN" : "Koda PIN klica", + "Demote from moderator" : "Odstrani vlogo moderatorja", + "Promote to moderator" : "Dodeli vlogo moderatorja", + "Resend invitation" : "Ponovno pošlji vabilo", + "Send call notification" : "Pošlji obvestilo klica", + "Dial out phone number" : "Pokliči telefonsko številko", + "Resume call for phone number" : "Obnovi klic telefonske številke", + "Put phone number on hold" : "Zadrži klic telefonske številke", + "Unmute phone number" : "Povrni zvok telefonske številke", + "Mute phone number" : "Utišaj telefonsko številko", + "Copy phone number" : "Kopiraj telefonsko številko", + "Reset custom permissions" : "Ponastavi dovoljenja po meri", + "Grant all permissions" : "Odobri vsa dovoljenja", + "Remove all permissions" : "Odstrani vsa dovoljenja", + "Remove" : "Odstrani", + "Add users, groups or teams" : "Dodaj uporabnike, skupine in ekipe", + "Add users or groups" : "Dodaj uporabnike ali skupine", + "Add users or teams" : "Dodaj uporabnike ali ekipe", + "Add users" : "Dodaj uporabnike", + "Add groups or teams" : "Dodaj skupine ali ekipe", + "Add groups" : "Dodaj skupine", + "Add teams" : "Dodaj ekipe", + "Add other sources" : "Dodaj druge vire", + "Add emails" : "Dodaj elektronske naslove", + "Integrations" : "Združevalniki", + "Add federated users" : "Dodaj zvezne uporabnike", + "Searching …" : "Poteka iskanje ...", + "Search for more users" : "Poišči več uporabnikov", + "Search or add participants" : "Iskanje in dodajanje udeležencev", + "An error occurred while adding the participants" : "Prišlo je do napake med dodajanjem udeležencev", + "Participants" : "Udeleženci", + "Participants ({count})" : "Udeleženci ({count})", + "Open chat" : "Odpri klepet", + "You have new unread messages in the chat." : "V pogovoru imate neprebrana sporočila.", + "You have been mentioned in the chat." : "Omenjeni ste bili v klepetu.", + "Chat" : "Pogovor", + "Details" : "Podrobnosti", + "Shared items" : "Predmeti v souporabi", + "Search options" : "Možnosti iskanja", + "Until" : "Do", + "No results found" : "Ni najdenih zadetkov", + "Load more results" : "Naloži več zadetkov", + "Projects" : "Projekti", + "No shared items" : "Ni predmetov v souporabi", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Povezava do pogovora", + "No open conversations found" : "Ni mogoče najti nobenega odprtega pogovora", + "Either there are no open conversations or you joined all of them." : "Ali ni odprtih pogovorov ali pa ste se pridružili vsem.", + "Check spelling or use complete words." : "Preveri črkovanje oziroma uporabi celotne besede.", + "Search conversations or users" : "Poišči med stiki in pogovori", + "Select conversation" : "pogovora", + "Number length is not valid" : "Dolžina telefonske številke ni veljavna", + "Region code is not valid" : "Koda regije ni veljavna", + "Number length is too short" : "Dolžina telefonske številke je prekratka", + "Number length is too long" : "Dolžina telefonske številke je predolga", + "Number is not valid" : "Številka ni veljavna", + "Phone numbers" : "Telefonske številke", + "Display name: {name}" : "Prikazano ime: {name}", + "Edit display name" : "Uredi prikazno ime", + "Save name" : "Shrani ime", + "Error while saving sounds setting" : "Prišlo je do napake med shranjevanjem nastavitev zvoka", + "Play sounds when participants join or leave a call" : "Predvajaj zvok ob priklopu oziroma odklopu uporabnika.", + "Notification settings" : "Nastavitve obveščanja", + "Default language" : "Privzeti jezik", + "Select location for attachments" : "Izbor mesta prilog", + "Error while setting attachment folder" : "Napaka med nastavljanjem mape prilog", + "Error while setting read status privacy" : "Napaka med nastavljanjem stanja zasebnosti", + "Error while setting typing status privacy" : "Napaka med nastavljanjem zasebnosti stanja pisanja", + "Privacy" : "Zasebnost", + "Attachments folder" : "Mapa prilog", + "Toggle full screen" : "Preklopi celozaslonski način", + "Search" : "Odpre iskalno polje.", + "Focus the chat input" : "V žarišče postavi vnosno polje klepeta", + "Unfocus the chat input to use shortcuts" : "Zaustavi vnos besedila za uporabo tipkovnih bližnjic.", + "Shortcuts while in a call" : "Omogoči tipkovne bližnjice tudi v času klica.", + "Camera on and off" : "Preklop in izklop kamere", + "Microphone on and off" : "Preklopi delovanje mikrofona", + "Raise or lower hand" : "Dvigne ali Spusti digitalno roko", + "Push to talk or push to mute" : "Pritisk tipke omogoči govor, ponoven pritisk utišanje.", + "Start call silently" : "Začni klic tiho", + "Start call" : "Začni klic", + "End call" : "Končaj klic", + "You will be able to join the call only after a moderator starts it." : "Pogovoru se je mogoče pridružiti šele, ko ga moderator začne.", + "End call for everyone" : "Končaj klic za vse", + "Starting the recording" : "Poteka začenjanje snemanja", + "Recording" : "Snemanje", + "The call has been running for one hour." : "Pogovor traja že eno uro.", + "Cancel recording start" : "Prekliči začenjanje snemanja", + "Stop recording" : "Ustavi snemanje", + "Send a reaction" : "Pošlji odziv", + "React with {reaction}" : "Odzovi se z {reaction}", + "_%n participant in call_::_%n participants in call_" : ["Sodeluje %n udeleženec","Sodelujeta %n udeleženca","Sodelujejo %n udeleženci","Sodeluje %n udeležencev"], + "You are not allowed to enable screensharing" : "Ni ustreznih dovoljenj za omogočanje prikaza zaslonske slike", + "No screensharing" : "Prikaz zaslona ni na voljo", + "Screensharing options" : "Možnosti prikazovanja zaslona", + "Enable screensharing" : "Omogoči souporabo zaslona", + "Bad sent video and screen quality." : "Poslana je slaba kakovost videa in slike zaslona. ", + "Bad sent screen quality." : "Poslana je slaba kakovost slike zaslona.", + "Bad sent video quality." : "Poslana je slaba kakovost videa.", + "Bad sent audio, video and screen quality." : "Poslana je slaba kakovost videa, zvoka in slike zaslona.", + "Bad sent audio and screen quality." : "Poslana je slaba kakovost zvoka in slike zaslona.", + "Bad sent audio and video quality." : "Poslana je slaba kakovost videa in zvoka.", + "Bad sent audio quality." : "Poslana je slaba kakovost zvoka.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato udeleženci morda ne bodo videli zaslona. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Disable background blur" : "Onemogoči motno ozadje", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato udeleženci morda ne bodo zaslona. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo videli zaslonske slike.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo videli.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli in videli. Za izboljšanje prikaza poskusite med prikazom zaslona video onemogočiti.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato drugi udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite onemogočiti prikazovanje zaslona.", + "Disable screenshare" : "Onemogoči souporabo zaslona", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas udeleženci morda ne bodo ne videli ne slišali. Za izboljšanje delovanja poskusite med prikazovanjem zaslona izklopiti zabrisano ozadje ali prikaz videa.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli in videli. Za izboljšanje prikaza poskusite onemogočiti video.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Spletna povezava oziroma delovanje računalnika je preobremenjeno, zato vas drugi udeleženci morda ne bodo razumeli.", + "Screen sharing is not supported by your browser." : "Uporabljen spletni brskalnik ne podpira prikazovanja zaslona", + "Screen sharing requires the page to be loaded through HTTPS." : "Prikaz zaslona zahteva povezavo strani prek protokola HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Prikaz zaslona zahteva povezavo strani prek protokola HTTPS.", + "An error occurred while starting screensharing." : "Prišlo je do napake med omogočanjem souporabe zaslona.", + "Show your screen" : "Pokaži zaslon", + "Stop screensharing" : "Prekini prikaz zaslona", + "Mute others" : "Utišaj ostale", + "Start recording" : "Začni s snemanjem", + "Set up breakout rooms" : "Začni ločene sobe", + "Remove participant {name}" : "Odstrani udeleženca {name}", + "Delete now" : "Izbriši", + "Keep" : "Ohrani", + "Open dialpad" : "Pokaži številčnico", + "Select a region" : "Izbor regije", + "Local time: {time}" : "Krajevni čas: {time}", + "Search …" : "Poišči …", + "Message without mention" : "Sporočilo brez omenjanja", + "Mention myself" : "Omenjanje sebe", + "Mention everyone" : "Omeni vse", + "Select a conversation" : "Izbor pogovora", + "Select a mode" : "Izbor načina", + "The conversation does not exist" : "Pogovor ne obstaja", + "Join a conversation or start a new one!" : "Pridružite se pogovoru ali pa začnite novega!", + "Duplicate session" : "Podvojena seja", + "Join a conversation or start a new one" : "Pridružite se pogovoru, ali pa začnite novega.", + "Error while joining the conversation" : "Prišlo je do napake med pridruževanjem k pogovoru", + "Nextcloud URL" : "Naslov URL Nextcloud", + "Nextcloud user" : "Uporabnik Nextcloud", + "User password" : "Uporabniško geslo", + "Talk conversation" : "Pogovor Talk", + "Skip TLS verification" : "Preskoči overjanje TLS", + "Matrix server URL" : "Naslov URL strežnika Matrix", + "User" : "Uporabnik", + "Matrix channel" : "Kanal Matrix", + "Mattermost server URL" : "Naslov URL strežnika Mattermost", + "Mattermost user" : "Uporabnik Mattermost", + "Team name" : "Ime skupine", + "Channel name" : "Ime kanala", + "Rocket.Chat server URL" : "Naslov URL strežnika Rocket.Chat", + "User name or email address" : "Uporabniško ime ali elektronski naslov", + "Rocket.Chat channel" : "Kanal Rocket.Chat", + "Zulip server URL" : "Naslov URL strežnika Zulip", + "Bot user name" : "Ime uporabniškega bota", + "Bot API key" : "Ključ vmesnika API bota", + "Zulip channel" : "Kanal Zulip", + "API token" : "Žeton vmesnika API", + "Slack channel" : "Kanal Slack", + "Server ID or name" : "Določilo ID strežnika ali ime", + "Channel" : "Kanal", + "Login" : "Prijava", + "Chat ID" : "Določilo ID klepeta", + "IRC server URL (e.g. chat.freenode.net:6667)" : "Naslov URL strežnika IRC (npr. chat.freenode.net:6667)", + "Nickname" : "Vzdevek", + "Connection password" : "Geslo povezave", + "IRC channel" : "Kanal IRC", + "Channel password" : "Geslo kanala", + "NickServ nickname" : "Vzdevek NickServ", + "NickServ password" : "Geslo NickServ", + "Use TLS" : "Uporabi TLS", + "Use SASL" : "Uporabi SASL", + "Tenant ID" : "ID Udeleženca", + "Client ID" : "ID odjemalca", + "Team ID" : "ID Skupine", + "Thread ID" : "ID Niti", + "XMPP/Jabber server URL" : "Naslov URL strežnika XMPP/Jabber", + "MUC server URL" : "Naslov URL strežnika MUC", + "Jabber ID" : "Jabber ID", + "Media" : "Predstavna vsebina", + "Polls" : "Ankete", + "Deck cards" : "Zbirke nalog", + "Voice messages" : "Glasovna sporočila", + "Locations" : "Mesta", + "Call recordings" : "Posnetki klicev", + "Audio" : "Zvok", + "Show all media" : "Pokaži vso predstavno vsebino", + "Show all files" : "Pokaži vse datoteke", + "Show all polls" : "Pokaži vse ankete", + "Show all deck cards" : "Pokaži vse zbirke nalog", + "Show all voice messages" : "Pokaži vsa glasovna sporočila", + "Show all locations" : "Pokaži vsa mesta", + "Show all call recordings" : "Pokaži vse posnetke klicev", + "Show all audio" : "Pokaži vse zvočne posnetke", + "Show all other" : "Pokaži vse ostalo", + "Group" : "Skupina", + "Team" : "Skupina", + "You: {lastMessage}" : "Jaz: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Pogovoru ste se pridružili v novem oknu brskalnika, ali na drugi napravi. Nextcloud Talk te možnosti trenutno ne omogoča. Kako želite nadaljevati?", + "Leave this page" : "Zapusti trenutno stran", + "Join here" : "Pridruži se v tem oknu", + "An error occurred while posting deck card to conversation" : "Prišlo je do napake med dodajanjem naloge v pogovor.", + "Post to a conversation" : "Dodaj v pogovor", + "Post to conversation" : "Dodaj v pogovor", + "The recording failed. Please contact your administrator." : "Snemanje je spodletelo. Stopite v stik s skrbnikom sistema.", + "An error occurred while posting location to conversation" : "Prišlo je do napake med pošiljanjem podatkom o trenutnem mestu v pogovor.", + "Share to a conversation" : "Objavi v pogovor", + "Share to conversation" : "Dodaj v pogovor", + "In conversation" : "V pogovoru", + "Error while clearing conversation history" : "Prišlo je do napake med čiščenjem zgodovine pogovora", + "Error occurred while allowing guests" : "Prišlo je do napake med omogočanjem dostopa gostov.", + "Error occurred while disallowing guests" : "Prišlo je do napake med onemogočanjem dostopa gostov.", + "Error occurred when restricting the conversation to moderator" : "Prišlo je do napake med omejevanjem pogovora za moderatorja.", + "Error occurred when opening the conversation to everyone" : "Prišlo je do napake med odpiranjem pogovora za vse udeležence.", + "Conversation password has been saved" : "Geslo pogovora je shranjeno", + "Conversation password has been removed" : "Geslo pogovora je odstranjeno", + "Error occurred while saving conversation password" : "Prišlo je do napake med shranjevanjem gesla pogovora.", + "Call recording is starting." : "Začenja se snemanje pogovora", + "Call recording stopped while starting." : "Začenja se snemanje pogovora se je ustavilo.", + "Call recording stopped. You will be notified once the recording is available." : "Snemanje klica je ustavljeno. Ko bo posnetek na voljo, bo prikazano obvestilo.", + "Conversation picture set" : "Slika pogovora je nastavljena", + "Conversation picture deleted" : "Slika pogovora je izbrisana", + "Could not delete the conversation picture" : "Ni mogoče izbrisati slike pogovora", + "Could not post message: {errorMessage}" : "Sporočila ni mogoče objaviti: {errorMessage}", + "An error occurred while fetching the participants" : "Med pridobivanjem udeležencev je prišlo do napake", + "Could not send invitation to {actorId}" : "Ni mogoče poslati povabila: {actorId}.", + "Invitations sent" : "Vabila so poslana.", + "Error occurred when sending invitations" : "Med pošiljanjem vabil je prišlo do napake.", + "An error occurred while creating breakout rooms" : "Prišlo je do napake med ustvarjanjem ločenih skupin", + "An error occurred while deleting breakout rooms" : "Prišlo je do napake med brisanjem ločenih skupin", + "An error occurred while starting breakout rooms" : "Prišlo je do napake med začenjanjem ločenih skupin", + "An error occurred while stopping breakout rooms" : "Prišlo je do napake med prekinjanjem ločenih skupin", + "An error occurred while sending a message to the breakout rooms" : "Prišlo je do napake med pošiljanjem sporočila v ločene skupine", + "An error occurred while requesting assistance" : "Prišlo je do napake med pošiljanjem zahteve za pomoč", + "An error occurred while resetting the request for assistance" : "Prišlo je do napake med ponastavljanjem zahteve za pomoč", + "An error occurred while joining breakout room" : "Prišlo je do napake med pridruževanjem v ločeno skupino", + "{guest} (guest)" : "{guest} (gost)", + "An error occurred while submitting your vote" : "Prišlo je do napake med pošiljanjem odziva na anketo", + "An error occurred while ending the poll" : "Prišlo je do napake med končanjem ankete", + "Failed to add reaction" : "Dodajanje odziva je spodletelo", + "Failed to remove reaction" : "Odstranjevanje odziva je spodletelo", + "Error while uploading file \"{fileName}\"" : "Napaka pri pošiljanju datoteke »{fileName}«", + "Not enough free space to upload file \"{fileName}\"" : "Ni dovolj prostora za pošiljanje datoteke »{fileName}«", + "You are not allowed to share files" : "Ni ustreznih dovoljenj za omogočanje souporabe datotek", + "Error while sharing file" : "Prišlo je do napake med souporabo datoteke", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Brskalnik, ki ga trenutno uporabljate ne podpira popolnoma možnosti programa Nextcloud Talk. Priporočljivo je uporabiti najnovejšo različico brskalnika Mozilla Firefox, Microsoft Edge, Google Chrome oziroma Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Čez %n uro","Čez %n uri","Čez %n ure","Čez %n ur"], + "_%n minute _::_%n minutes_" : ["%n minuta","%n minuti","%n minute","%n minut"], + "In {hours} and {minutes}" : "Čez {hours} in {minutes}", + "_In %n minute_::_In %n minutes_" : ["Čez %n minuto","Čez %n minuti","Čez %n minute","Čez %n minut"], + "Later today – {timeLocale}" : "Danes – {timeLocale}", + "Tomorrow – {timeLocale}" : "Jutri – {timeLocale}", + "This weekend – {timeLocale}" : "Ta teden – {timeLocale}", + "Next week – {timeLocale}" : "Naslednji teden – {timeLocale}", + "Message link copied to clipboard" : "Povezava sporočila je kopirana v odložišče.", + "Conversation link copied to clipboard" : "Povezava do pogovora je kopirana v odložišče.", + "The link could not be copied" : "Povezave ni mogoče kopirati.", + "Sending signaling message has failed" : "Pošiljanje signalnega sporočila je spodletelo.", + "Lost connection to signaling server. Trying to reconnect." : "Povezava s signalnim strežnikom je izgubljena. Izveden bo ponovni poskus povezave.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Nastavljen signalni strežnik je treba posodobiti, da bo skladen s trenutno uporabljeno različico programa Talk. Stopite v stik s skrbnikom sistema.", + "Please reload the page." : "Stran je treba osvežiti.", + "Do not disturb" : "Ne pustim se motiti", + "Away" : "Trenutno ne spremljam", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Zvočnik {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Kaže, da govorite, medtem ko ste utišani. Povrnite zvok, da vas drugi udeleženci slišijo.", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Ni mogoče vzpostaviti povezave z niti enim udeležencem. Za vaš pogovor je morda treba nastaviti strežnik TURN. Stopite v stik s skrbnikom za nastavitev po navodilih, zapisanih v {linkstart}documentaciji{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Opravilo traja dlje, kot je pričakovano. Ali so dovoljenja za dostop do predstavnih predmetov odobrena (ali zavrnjena)? Če to drži, ponovno zaženite brskalnik, ker trenutno zvoka in slike ni mogoče uporabiti.", + "Access to microphone & camera is only possible with HTTPS" : "Dostop do mikrofona in kamere je mogoče le z uporabo protokola HTTPS", + "Please move your setup to HTTPS" : "Prilagodite nastavite za uporabo protokola HTTPS", + "Access to microphone & camera was denied" : "Dostop do mikrofona in kamere je bil zavrnjen.", + "WebRTC is not supported in your browser" : "Uporabljen brskalnik ne podpira protokola WebRTC", + "Please use a different browser like Firefox or Chrome" : "Priporočljivo je uporabiti drug brskalnik, kot sta Firefox in Chrome", + "Error while accessing microphone & camera" : "Napaka med dostopom do mikrofona in kamere", + "%s Talk on your mobile devices" : "%s Talk na vaši mobilni napravi", + "Join conversations at any time, anywhere, on any device." : "Pridružite se pogovoru kadarkoli, kjerkoli in s katerekoli naprave.", + "Android app" : "Odjemalec za Android", + "iOS app" : "Odjemalec za iOS", + "__language_name__" : "Slovenščina", + "Call summary (%s)" : "Povzetek klica (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Vstavek za povzetek klica po koncu pogovora pokaže pregledno sporočilo, v katerem so navedeni vsi udeleženci in opisane naloge.", + "Tasks" : "Naloge", + "Notes" : "Beležke", + "Reports" : "Poročila", + "Decisions" : "Odločitve", + "Call summary" : "Povzetek klica", + "Call summary - {title}" : "Povzetek klica – {title}", + "Next meeting" : "Naslednje srečanje", + "Set reminder for later today" : "Nastavi opomnik za danes", + "Set reminder for tomorrow" : "Nastavi opomnik za jutri", + "Set reminder for this weekend" : "Nastavi opomnik za ta teden", + "Set reminder for next week" : "Nastavi opomnik za naslednji teden", + "Open poll • You voted already" : "Odprta anketa • Glas ste že oddali", + "Open poll • Click to vote" : "Odprta anketa • Kliknite za glasovanje", + "Poll • Ended" : "Anketa • Zaključena", + "Talk recording from {time} ({conversation})" : "Snemanje pogovora Talk {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Rezultati ankete • %n glas","Rezultati ankete • %n glasova","Rezultati ankete • %n glasovi","Rezultati ankete • %n glasov"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Odprta anketa • %n glas","Odprta anketa • %n glasovs","Odprta anketa • %n glasovi","Odprta anketa • %n glasov"], + "Submit vote" : "Objavi glasovanje", + "Your privacy setting has been saved" : "Nastavitve zasebnosti so shranjene.", + "Failed to save sounds setting" : "Shranjevanje nastavitev zvoka je spodletelo", + "Sounds setting saved" : "Nastavitve zvokov so shranjene.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Pogovoru ste se pridružili v novem oknu brskalnika, ali na drugi napravi. Nextcloud Talk te možnosti trenutno ne omogoča, zato je bila druga seja preklicana." +},"pluralForm" :"nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);" +} \ No newline at end of file diff --git a/l10n/sq.js b/l10n/sq.js new file mode 100644 index 0000000..3a4659c --- /dev/null +++ b/l10n/sq.js @@ -0,0 +1,283 @@ +OC.L10N.register( + "spreed", + { + "_%n guest_::_%n guests_" : ["%n të ftuar","%n të ftuar"], + "Guest" : "I ftuar", + "Message deleted by author" : "Mesazhi u fshi nga autori", + "System" : "Sistem", + "File not found" : "S’u gjet kartelë", + "File is too big" : "Skedari është shumë i madh", + "Invalid file provided" : "U dha kartelë e pavlefshme", + "Invalid image" : "Figurë e pavlefshme", + "Unknown filetype" : "Lloj i panjohur skedari", + "Description" : "Përshkrim", + "Dismiss notification" : "Hiq lajmërimin", + "Accept" : "Prano", + "Decline" : "Refuzo", + "New message" : "Mesazh i ri", + "Open settings" : "Hap rregullimet", + "error" : "gabim", + "Default" : "E paracaktuar", + "Presentation" : "Paraqitje", + "Conversations" : "Bisedat", + "Avatar image is not square" : "Imazhi avatar nuk është katror", + "Other" : "Tjetër", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratet e Bashkuara Arabe", + "Afghanistan" : "Afganistani", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Shqipëria", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktiku", + "Argentina" : "Argjentina", + "American Samoa" : "Samoa Amerikane", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Ishujt Oland", + "Azerbaijan" : "Azerbajxhani", + "Bosnia and Herzegovina" : "Bosnja and Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgjika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bullgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Bermuda" : "Bermuda", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butani", + "Botswana" : "Botsvana", + "Belarus" : "Bjellorusi", + "Belize" : "Belize", + "Canada" : "Kanada", + "Congo" : "Kongo", + "Switzerland" : "Zvicër", + "Côte d'Ivoire" : "Bregu i Fildishtë", + "Chile" : "Kili", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Kolumbi", + "Cuba" : "Kubë", + "Cabo Verde" : "Kepi i Gjelbër", + "Cyprus" : "Qipro", + "Germany" : "Gjermani", + "Denmark" : "Danimarkë", + "Algeria" : "Algjeria", + "Ecuador" : "Ekuadori", + "Estonia" : "Estonia", + "Egypt" : "Egjipt", + "Eritrea" : "Eritrea", + "Spain" : "Spanja", + "Ethiopia" : "Etiopia", + "Finland" : "Finlanda", + "Fiji" : "Fixhi", + "France" : "Franca", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Mbretëria e Bashkuar e Britanisë së Madhe dhe Irlandës Veriore", + "Georgia" : "Gjeorgji", + "Ghana" : "Gana", + "Gibraltar" : "Gjibraltar", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Greece" : "Greqi", + "Guatemala" : "Guatemala", + "Honduras" : "Honduras", + "Croatia" : "Kroaci", + "Haiti" : "Haiti", + "Hungary" : "Hungari", + "Indonesia" : "Indonezia", + "Ireland" : "Irlanda", + "Israel" : "Izraeli", + "India" : "India", + "Iraq" : "Irak", + "Iceland" : "Islanda", + "Italy" : "Itali", + "Jamaica" : "Xhamaika", + "Jordan" : "Jordani", + "Japan" : "Japoni", + "Kenya" : "Kenia", + "Cambodia" : "Kamboxhia", + "Kiribati" : "Kiribati", + "Kuwait" : "Kuvajti", + "Kazakhstan" : "Kazakistani", + "Lebanon" : "Lebanon", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lithuania" : "Lituania", + "Luxembourg" : "Luksemburgu", + "Libya" : "Libia", + "Morocco" : "Maroku", + "Montenegro" : "Mali i Zi", + "Mali" : "Mali", + "Mongolia" : "Mongolia", + "Malta" : "Malta", + "Mexico" : "Meksikë", + "Niger" : "Niger", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Hollandë", + "Norway" : "Norvegji", + "Nepal" : "Nepal", + "New Zealand" : "Zelanda e Re", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "Pakistan" : "Pakistan", + "Poland" : "Poloni", + "Puerto Rico" : "Puerto Riko", + "Portugal" : "Portugali", + "Paraguay" : "Paraguaj", + "Qatar" : "Qatar", + "Romania" : "Rumania", + "Serbia" : "Serbi", + "Russian Federation" : "Federata Ruse", + "Saudi Arabia" : "Arabia Saudite", + "Sudan" : "Sudan", + "Sweden" : "Suedi", + "Singapore" : "Singapori", + "Slovenia" : "Sllovenia", + "Slovakia" : "Sllovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegali", + "Somalia" : "Somalia", + "Syrian Arab Republic" : "Republika Arabe e Sirisë", + "Chad" : "Çad", + "Togo" : "Togo", + "Thailand" : "Tajlanda", + "Tajikistan" : "Taxhikistan", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizia", + "Tonga" : "Tonga", + "Turkey" : "Turqi", + "Ukraine" : "Ukrainë", + "Uganda" : "Uganda", + "United States of America" : "Shtetet e Bashkuara të Amerikës", + "Uruguay" : "Uruguaj", + "Zambia" : "Zambia", + "Federation" : "Federim", + "Invalid date, date format must be YYYY-MM-DD" : "Datë e pavlefshme, formati i datës duhet të jetë VVVV-MM-DD", + "Leave call" : "Lini një thirrje", + "The password is wrong. Try again." : "Fjalëkalim i gabuar. Provojeni sërish.", + "Password" : "Fjalëkalim", + "Submit" : "Dërgo", + "Everyone" : "Kushdo", + "Save changes" : "Ruaj ndryshimet", + "Saved!" : "I/E ruajtur!", + "Limit to groups" : "Kufizo grupet", + "Enabled" : "E aktivizuar", + "Disabled" : "I çaktivizuar", + "State" : "Gjendja", + "Name" : "Emri", + "Permissions" : "Lejet", + "General settings" : "Opsjonet e Pergjithshme", + "Enable encryption" : "Aktivizoni fshehtëzim", + "Pending" : "Në Pritje të Konfirmimit", + "Error" : "Error", + "Blocked" : "I bllokuar", + "Never" : "Kurrë", + "Language" : "Gjuha", + "Country" : "Vend", + "Status" : "Status", + "Created at" : "U krijua në", + "Yes" : "Po", + "TURN server protocols" : "Protokollet e serverit TURN", + "OK" : "OK", + "Checking …" : "Duke kontrolluar ...", + "Confirm" : "Konfirmo", + "Reset" : "Rivendos", + "Cancel" : "Anullo", + "Back" : "Prapa", + "Calendar" : "Kalendar", + "Attendees" : "Pjesëmarrës", + "Save" : "Ruaj", + "No results" : "Asnjë rezultat", + "Done" : "U bë", + "Grid view" : "Pamje galeri", + "Reload" : "Ringarkoje", + "Waiting for others to join the call …" : "Duke pritur që të tjerët t'i bashkohen thirrjes ...", + "Copy link" : "Kopjo linkun", + "Mute audio" : "Mute audio", + "None" : "Asnjë", + "Disable video" : "Çaktivizo video", + "You" : "Ju", + "Collapse" : "Tkurre", + "Favorite" : "I/E Preferuar", + "Hide details" : "Fsheh detajet", + "Disable" : "Çaktivizoje", + "Enable" : "Aktivizoje", + "Choose" : "Zgjidhni", + "Restricted" : "I/E kufizuar", + "Personal" : "Personale", + "Leave conversation" : "Largohuni nga biseda", + "Delete conversation" : "Fshijeni bisedën", + "Password protection" : "Password protection", + "Set a password" : "Vendosni një fjalëkalim", + "Change password" : "Ndrysho fjalëkalimin", + "Edit" : "Përpuno", + "Delete" : "Fshij", + "Log content" : "Përmbajtja e hyrjes", + "Notifications" : "Njoftimet", + "Log in" : "Hyni", + "Mark as read" : "Shënoje si të lexuar", + "Mark as unread" : "Shënoje si të palexuar", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Shtoje tek të parapëlqyerat", + "Home" : "Kryefaqja", + "Alphabetically" : "Alfabetikisht", + "Users" : "Përdoruesit", + "Groups" : "Grupet", + "Devices" : "Pajisjet", + "Upload" : "Ngarkoni", + "Files" : "Skedarët", + "24 hours" : "24 orë", + "7 days" : "7 ditë ", + "Reply" : "Përgjigju", + "More actions" : "Më tepër veprime ", + "Translate" : "Përkthe", + "Dismiss" : "Hiq", + "Message sent" : "Mesazhi u dërgua", + "Contact" : "Kontakt", + "Send message" : "Dërgo mesazh", + "Create new poll" : "Krijo sondazh të ri", + "New file" : "Skedë e re", + "Send" : "Dërgo", + "Create poll" : "Krijo sondazh", + "Settings" : "Rregullimet", + "guest" : "vizitor", + "Remove" : "Hiqe", + "Add users or groups" : "Add users or groups", + "Details" : "Detajet", + "Privacy" : "Privatësia", + "Search" : "Kërko", + "Screensharing requires the page to be loaded through HTTPS." : "Ndarja e ekranit kërkon faqen të ngarkohet përmes HTTPS.", + "An error occurred while starting screensharing." : "Ndodhi një gabim gjatë fillimit të ndarjes së ekranit.", + "Show your screen" : "Shfaq ekranin tënd", + "Stop screensharing" : "Ndalo ndarjen e ekranit", + "Keep" : "Mbaje", + "User" : "Përdorues", + "API token" : "Çelës identifikues i API-t ", + "Login" : "Hyrje", + "Nickname" : "Nofkë", + "Client ID" : "ID klienti", + "Media" : "Media", + "Polls" : "Sondazhe", + "Audio" : "Audio", + "Group" : "Grup", + "Please reload the page." : "Ju lutemi, ringarkoni faqen.", + "Access to microphone & camera is only possible with HTTPS" : "Aksesi në mikrofon & kamera është i mundur vetëm me HTTPS", + "Access to microphone & camera was denied" : "Aksesi tek mikrofoni & kamera u mohua", + "WebRTC is not supported in your browser" : "WebRTC nuk mbështetet nga shfletuesi juaj.", + "Please use a different browser like Firefox or Chrome" : "Ju lutem zgjidhni një shfletues tjetër si Firefox apo Chrome", + "Error while accessing microphone & camera" : "gabim ", + "Android app" : "Aplikacion Android", + "iOS app" : "Aplikacion iOS", + "__language_name__" : "Shqip", + "Tasks" : "Detyra" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sq.json b/l10n/sq.json new file mode 100644 index 0000000..2f1b258 --- /dev/null +++ b/l10n/sq.json @@ -0,0 +1,281 @@ +{ "translations": { + "_%n guest_::_%n guests_" : ["%n të ftuar","%n të ftuar"], + "Guest" : "I ftuar", + "Message deleted by author" : "Mesazhi u fshi nga autori", + "System" : "Sistem", + "File not found" : "S’u gjet kartelë", + "File is too big" : "Skedari është shumë i madh", + "Invalid file provided" : "U dha kartelë e pavlefshme", + "Invalid image" : "Figurë e pavlefshme", + "Unknown filetype" : "Lloj i panjohur skedari", + "Description" : "Përshkrim", + "Dismiss notification" : "Hiq lajmërimin", + "Accept" : "Prano", + "Decline" : "Refuzo", + "New message" : "Mesazh i ri", + "Open settings" : "Hap rregullimet", + "error" : "gabim", + "Default" : "E paracaktuar", + "Presentation" : "Paraqitje", + "Conversations" : "Bisedat", + "Avatar image is not square" : "Imazhi avatar nuk është katror", + "Other" : "Tjetër", + "Andorra" : "Andorra", + "United Arab Emirates" : "Emiratet e Bashkuara Arabe", + "Afghanistan" : "Afganistani", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Shqipëria", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarktiku", + "Argentina" : "Argjentina", + "American Samoa" : "Samoa Amerikane", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Ishujt Oland", + "Azerbaijan" : "Azerbajxhani", + "Bosnia and Herzegovina" : "Bosnja and Hercegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgjika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bullgaria", + "Bahrain" : "Bahrein", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Bermuda" : "Bermuda", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Butani", + "Botswana" : "Botsvana", + "Belarus" : "Bjellorusi", + "Belize" : "Belize", + "Canada" : "Kanada", + "Congo" : "Kongo", + "Switzerland" : "Zvicër", + "Côte d'Ivoire" : "Bregu i Fildishtë", + "Chile" : "Kili", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Kolumbi", + "Cuba" : "Kubë", + "Cabo Verde" : "Kepi i Gjelbër", + "Cyprus" : "Qipro", + "Germany" : "Gjermani", + "Denmark" : "Danimarkë", + "Algeria" : "Algjeria", + "Ecuador" : "Ekuadori", + "Estonia" : "Estonia", + "Egypt" : "Egjipt", + "Eritrea" : "Eritrea", + "Spain" : "Spanja", + "Ethiopia" : "Etiopia", + "Finland" : "Finlanda", + "Fiji" : "Fixhi", + "France" : "Franca", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Mbretëria e Bashkuar e Britanisë së Madhe dhe Irlandës Veriore", + "Georgia" : "Gjeorgji", + "Ghana" : "Gana", + "Gibraltar" : "Gjibraltar", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Greece" : "Greqi", + "Guatemala" : "Guatemala", + "Honduras" : "Honduras", + "Croatia" : "Kroaci", + "Haiti" : "Haiti", + "Hungary" : "Hungari", + "Indonesia" : "Indonezia", + "Ireland" : "Irlanda", + "Israel" : "Izraeli", + "India" : "India", + "Iraq" : "Irak", + "Iceland" : "Islanda", + "Italy" : "Itali", + "Jamaica" : "Xhamaika", + "Jordan" : "Jordani", + "Japan" : "Japoni", + "Kenya" : "Kenia", + "Cambodia" : "Kamboxhia", + "Kiribati" : "Kiribati", + "Kuwait" : "Kuvajti", + "Kazakhstan" : "Kazakistani", + "Lebanon" : "Lebanon", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lithuania" : "Lituania", + "Luxembourg" : "Luksemburgu", + "Libya" : "Libia", + "Morocco" : "Maroku", + "Montenegro" : "Mali i Zi", + "Mali" : "Mali", + "Mongolia" : "Mongolia", + "Malta" : "Malta", + "Mexico" : "Meksikë", + "Niger" : "Niger", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Hollandë", + "Norway" : "Norvegji", + "Nepal" : "Nepal", + "New Zealand" : "Zelanda e Re", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "Pakistan" : "Pakistan", + "Poland" : "Poloni", + "Puerto Rico" : "Puerto Riko", + "Portugal" : "Portugali", + "Paraguay" : "Paraguaj", + "Qatar" : "Qatar", + "Romania" : "Rumania", + "Serbia" : "Serbi", + "Russian Federation" : "Federata Ruse", + "Saudi Arabia" : "Arabia Saudite", + "Sudan" : "Sudan", + "Sweden" : "Suedi", + "Singapore" : "Singapori", + "Slovenia" : "Sllovenia", + "Slovakia" : "Sllovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegali", + "Somalia" : "Somalia", + "Syrian Arab Republic" : "Republika Arabe e Sirisë", + "Chad" : "Çad", + "Togo" : "Togo", + "Thailand" : "Tajlanda", + "Tajikistan" : "Taxhikistan", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunizia", + "Tonga" : "Tonga", + "Turkey" : "Turqi", + "Ukraine" : "Ukrainë", + "Uganda" : "Uganda", + "United States of America" : "Shtetet e Bashkuara të Amerikës", + "Uruguay" : "Uruguaj", + "Zambia" : "Zambia", + "Federation" : "Federim", + "Invalid date, date format must be YYYY-MM-DD" : "Datë e pavlefshme, formati i datës duhet të jetë VVVV-MM-DD", + "Leave call" : "Lini një thirrje", + "The password is wrong. Try again." : "Fjalëkalim i gabuar. Provojeni sërish.", + "Password" : "Fjalëkalim", + "Submit" : "Dërgo", + "Everyone" : "Kushdo", + "Save changes" : "Ruaj ndryshimet", + "Saved!" : "I/E ruajtur!", + "Limit to groups" : "Kufizo grupet", + "Enabled" : "E aktivizuar", + "Disabled" : "I çaktivizuar", + "State" : "Gjendja", + "Name" : "Emri", + "Permissions" : "Lejet", + "General settings" : "Opsjonet e Pergjithshme", + "Enable encryption" : "Aktivizoni fshehtëzim", + "Pending" : "Në Pritje të Konfirmimit", + "Error" : "Error", + "Blocked" : "I bllokuar", + "Never" : "Kurrë", + "Language" : "Gjuha", + "Country" : "Vend", + "Status" : "Status", + "Created at" : "U krijua në", + "Yes" : "Po", + "TURN server protocols" : "Protokollet e serverit TURN", + "OK" : "OK", + "Checking …" : "Duke kontrolluar ...", + "Confirm" : "Konfirmo", + "Reset" : "Rivendos", + "Cancel" : "Anullo", + "Back" : "Prapa", + "Calendar" : "Kalendar", + "Attendees" : "Pjesëmarrës", + "Save" : "Ruaj", + "No results" : "Asnjë rezultat", + "Done" : "U bë", + "Grid view" : "Pamje galeri", + "Reload" : "Ringarkoje", + "Waiting for others to join the call …" : "Duke pritur që të tjerët t'i bashkohen thirrjes ...", + "Copy link" : "Kopjo linkun", + "Mute audio" : "Mute audio", + "None" : "Asnjë", + "Disable video" : "Çaktivizo video", + "You" : "Ju", + "Collapse" : "Tkurre", + "Favorite" : "I/E Preferuar", + "Hide details" : "Fsheh detajet", + "Disable" : "Çaktivizoje", + "Enable" : "Aktivizoje", + "Choose" : "Zgjidhni", + "Restricted" : "I/E kufizuar", + "Personal" : "Personale", + "Leave conversation" : "Largohuni nga biseda", + "Delete conversation" : "Fshijeni bisedën", + "Password protection" : "Password protection", + "Set a password" : "Vendosni një fjalëkalim", + "Change password" : "Ndrysho fjalëkalimin", + "Edit" : "Përpuno", + "Delete" : "Fshij", + "Log content" : "Përmbajtja e hyrjes", + "Notifications" : "Njoftimet", + "Log in" : "Hyni", + "Mark as read" : "Shënoje si të lexuar", + "Mark as unread" : "Shënoje si të palexuar", + "Remove from favorites" : "Remove from favorites", + "Add to favorites" : "Shtoje tek të parapëlqyerat", + "Home" : "Kryefaqja", + "Alphabetically" : "Alfabetikisht", + "Users" : "Përdoruesit", + "Groups" : "Grupet", + "Devices" : "Pajisjet", + "Upload" : "Ngarkoni", + "Files" : "Skedarët", + "24 hours" : "24 orë", + "7 days" : "7 ditë ", + "Reply" : "Përgjigju", + "More actions" : "Më tepër veprime ", + "Translate" : "Përkthe", + "Dismiss" : "Hiq", + "Message sent" : "Mesazhi u dërgua", + "Contact" : "Kontakt", + "Send message" : "Dërgo mesazh", + "Create new poll" : "Krijo sondazh të ri", + "New file" : "Skedë e re", + "Send" : "Dërgo", + "Create poll" : "Krijo sondazh", + "Settings" : "Rregullimet", + "guest" : "vizitor", + "Remove" : "Hiqe", + "Add users or groups" : "Add users or groups", + "Details" : "Detajet", + "Privacy" : "Privatësia", + "Search" : "Kërko", + "Screensharing requires the page to be loaded through HTTPS." : "Ndarja e ekranit kërkon faqen të ngarkohet përmes HTTPS.", + "An error occurred while starting screensharing." : "Ndodhi një gabim gjatë fillimit të ndarjes së ekranit.", + "Show your screen" : "Shfaq ekranin tënd", + "Stop screensharing" : "Ndalo ndarjen e ekranit", + "Keep" : "Mbaje", + "User" : "Përdorues", + "API token" : "Çelës identifikues i API-t ", + "Login" : "Hyrje", + "Nickname" : "Nofkë", + "Client ID" : "ID klienti", + "Media" : "Media", + "Polls" : "Sondazhe", + "Audio" : "Audio", + "Group" : "Grup", + "Please reload the page." : "Ju lutemi, ringarkoni faqen.", + "Access to microphone & camera is only possible with HTTPS" : "Aksesi në mikrofon & kamera është i mundur vetëm me HTTPS", + "Access to microphone & camera was denied" : "Aksesi tek mikrofoni & kamera u mohua", + "WebRTC is not supported in your browser" : "WebRTC nuk mbështetet nga shfletuesi juaj.", + "Please use a different browser like Firefox or Chrome" : "Ju lutem zgjidhni një shfletues tjetër si Firefox apo Chrome", + "Error while accessing microphone & camera" : "gabim ", + "Android app" : "Aplikacion Android", + "iOS app" : "Aplikacion iOS", + "__language_name__" : "Shqip", + "Tasks" : "Detyra" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/sr.js b/l10n/sr.js new file mode 100644 index 0000000..88085c0 --- /dev/null +++ b/l10n/sr.js @@ -0,0 +1,2131 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "разговор", + "(Duration %s)" : "(трајање %s)", + "You attended a call with {user1}" : "Били сте на разговору са корисником {user1}", + "_%n guest_::_%n guests_" : ["%n гост","%n госта","%n гостију"], + "You attended a call with {user1} and {user2}" : "Били сте на разговору са корисницима {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Били сте на разговору са корисницима {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Били сте на разговору са корисницима {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Били сте на разговору са корисницима {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["%n остали","%n осталих","%n осталих"], + "{actor} invited you to {call}" : "{actor} Вас је позвао у разговор {call}", + "You were invited to a conversation or had a call" : "Били сте позвани у собу на разговор или сте имали позив", + "Other activities" : "Остале активности", + "Talk" : "Разговор", + "Guest" : "Гост", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Добродошли у Nextcloud Talk!\nУ овом разговору ћете бити обавештавани о новим функционалностима која постану доступна у апликацији Nextcloud Talk.", + "## New in Talk %s" : "## Ново у Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Сафари сада могу да се користе да учествујете у аудио и видео позивима", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Један-на-један разговори су сада стални и више не могу случајно да се претворе у групне разговоре. Такође, када један од учесника напусти разговор, разговор се више не брише аутоматски. Разговор се брише са сервера само ако га напусте оба учесника", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Сада можете да обавестите све учесника тако што објавите „@all“ у разговору", + "- With the \"arrow-up\" key you can repost your last message" : "- Са „стрелицом горе“ можете поново објавити последњу поруку", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk сада има команде, пошаљите „/help“ као поруку у ћаскању да видите да ли је администратор подесио нешто", + "- With projects you can create quick links between conversations, files and other items" : "- Уз помоћ пројеката можете да направите брзе везе између разговора, фајлова и других ставки", + "- You can now mention guests in the chat" : "- Сада можете поменути госте у ћаскању", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговори сада могу да имају предсобље. То ће омогућити модераторима да приступе чету и позиву како би припремили састанак, док остали учесници и гости морају да чекају", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Сада директно можете да одговорите на поруке пружајући осталим корисницима о више контекста о чему се ради у вашој поруци", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Сада ће претрага разговора и учесника такође да филтрира ваше постојеће разговоре, тако да ће бити лакше да се пронађу претходни разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Када је инсталирана апликација кругови, сада можете да у разговор додате произвољне групе корисника", + "- Check out the new grid and call view" : "- Погледајте нове погледе мреже и позива", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Сада у разговор можете да отпремите или превучете и упустите фајлове директно са вашег уређаја", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Дељени фајлови се сада отварају директно у погледу чета апликацијама за преглед", + "- You can now search for chats and messages in the unified search in the top bar" : "- Сада можете да претражујете четове и поруке у обједињеној претрази у линији на врху", + "- Spice up your messages with emojis from the emoji picker" : "- Зачините своје поруке емођијима из бирача емођија", + "- You can now change your camera and microphone while being in a call" : "- Сада током разговора можете да проемените своју камеру и микрофон", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Дајте описом мало контекста својим разговорима и отворите их тако да пријављени корисници могу да их пронађу и да им се придруже", + "- See a read status and send failed messages again" : "- Погледајте статус читања и поново пошаљите поруке које нису успешно послате", + "- Raise your hand in a call with the R key" : "- Подигните руку у позиву тастером R", + "- Join the same conversation and call from multiple devices" : "- Придружите се истом разговору и позиву са више уређаја", + "- Send voice messages, share your location or contact details" : "- Шаљите гласовне поруке, делите своју локацију или контакт детаље", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Додајте групе у разговор, па ће нови чланови групе аутоматски да се додају као учесници", + "- A preview of your audio and video is shown before joining a call" : "- Преглед вашег звука и видео слике се приказује пре приступања позиву", + "- You can now blur your background in the newly designed call view" : "- Сада можете да замутите своју позадину у свеже дизајнираном погледу позива", + "- Moderators can now assign general and individual permissions to participants" : "- Сада модератори могу да доделе опште и појединачне дозволе учесницима", + "- You can now react to chat messages" : "- Сада можете да реагујете на чет поруке", + "- In the sidebar you can now find an overview of the latest shared items" : "- На бочној траци сада можете пронаћи преглед најновијих дељених ставки", + "- Use a poll to collect the opinions of others or settle on a date" : "- Користите гласање да прикупите мишљења других или да се усагласите у вези са датумом", + "- Configure an expiration time for chat messages" : "- Подесите време истека чет порука", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Започните позиве без обавештавања осталих у великим разговорима. Сада можете да шаљете појединачна обавештења након почетка разговора.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Шаљите чет поруке без обавештавања прималаца у скучају да порука није хитна.", + "- Emojis can now be autocompleted by typing a \":\"" : "- Сада је могуће да се емођији аутоматски довршавају куцањем „:”", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Повежите разне ствари користећи нови паметни бирач куцањем „/”", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модератори сада могу да креирају сепарее (потребан је позадински механизам високих перформанси)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Разговори сада могу да се снимају (потребан је позадински механизам високих перформанси)", + "- Conversations can now have an avatar or emoji as icon" : "- Разговори сада као икону могу да имају аватар или емођи", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Сада су у видео позивима уз замагљену позадину доступне су и виртуелне позадине", + "- Reactions are now available during calls" : "- Сада су током позива доступне реакције", + "- Typing indicators show which users are currently typing a message" : "- Индикатори куцања показују који корисници тренутно куцају поруку", + "- Groups can now be mentioned in chats" : "- Сада у четовима могу да се помену групе", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Снимци позива се аутоматски транскрибују ако је регистрована апликација пружаоца услуге транскрибовања", + "- Chat messages can be translated if a translation provider app is registered" : "- Чет поруке могу да се преведу ако је регистрована апликација пружаоца услуге превода", + "- **Markdown** can now be used in _chat_ messages" : "- Сада у _чет_ порукама може да се користи **Markdown**", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- За имплементирање ботова су доступне веб куке. За више информација, погледајте документацију https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Поставите подсетник на чет поруку који вас касније подсећа на њу", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Употреба **Белешка за себе** разговора за узимање белешки и дељење информација између ваших уређаја", + "- Captions allow to send a message with a file at the same time" : "- Наслови омогућавају слање поруке уз фајл у исто време", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Видео говорника се сада види док се дели екран и реакције у позиву су анимиране", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Пријављени аутори и модератори сада у року од 6 сати могу да уређују поруке", + "- Unsent message drafts are now saved in your browser" : "- Нацрти непослатих порука се сада чувају у вашем интернет прегледачу", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текст четовање са осталим Talk серверима сада може да се врши на федерисани начин", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модератори сада могу да забране налоге и госте и да их тако спрече да поново приступе разговору", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Сада се у разговорима приказују предстојећи позови из догађаја повезаних календара и замене ван-канцеларије", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Позиви сада могу да се обаве на федерисани начин са осталим Talk серверима (потребан је позадински механизам високих перформанси)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Уводи се Nextcloud Talk десктоп клијент за Windows, macOS и Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Резиме снимака разговора и непрочитаних порука у ћаскањима са Nextcloud Асистентом", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Побољшани састанци са препознавањем гостију који су позвани преко и-мејл адресе, увоз листи учесника, нацрти за гласања и преузимање листи учесника позива", + "- Archive conversations to stay focused" : "- Архивирајте разговоре и останите фокусирани", + "- Schedule a meeting into your calendar from within a conversation" : "- Закажите састанак у свој календар директно из разговора", + "- Search for messages of the current conversation directly in the right sidebar" : "- Претражујте поруке текућег разговора директно у десној бочној траци", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Једним погледом видите још разговора помоћу нове збијене листе (укључите у Talk подешавањима)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Разговори састанка сада синхронизују наслов и опис из календара и скривени су од филтера претраге све док нису близу почетка", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Означите разговоре као осетљиве у подешавањима обавештења, тако да се у листи разговора и обавештењима сакрије садржај поруке", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Ако желите да током „Не узнемиравај” статуса примате брза обавештења, означите разговоре као важне", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Додајте остале учеснике у разговор један-на-један и тако у ходу креирајте групни позив", + "- Use threads to keep your chat and discussions organized" : "- Користите низове да ваши четови и дискусије буду организовани", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Сада је током позива доступна транскрипција уживо (потребна је live-transcription ExApp и позадински механизам високих перформанси)", + "_All %n participant_::_All %n participants_" : ["%n учесник","%n учесника","Свих %n учесника"], + "Talk updates ✅" : "Ажурирања Разговор апликације ✅", + "Reaction deleted by author" : "Аутор је обрисао реакцију", + "{actor} created the conversation" : "{actor} је креирао разговор", + "You created the conversation" : "Направили сте разговор", + "System created the conversation" : "Систем је креирао разговор", + "An administrator created the conversation" : "Администратор је креирао разговор", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} је преименовао разговор са „%1$s“ на „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Преименовали сте разговор са „%1$s“ на „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор је променио назив разговора са „%1$s” на „%2$s”", + "{actor} set the description" : "{actor} је поставио опис", + "You set the description" : "Поставили сте опис", + "An administrator set the description" : "Администратор је поставио опис", + "{actor} removed the description" : "{actor} је уклонио опис", + "You removed the description" : "Уклонили сте опис", + "An administrator removed the description" : "Администратор је уклонио опис", + "You started a silent call" : "Започели сте утишани позив", + "Outgoing silent call" : "Одлазни утишани позив", + "{actor} started a silent call" : "{actor} је започео утишани позив", + "Incoming silent call" : "Долазни утишани позив", + "You started a call" : "Ви сте започели позив", + "Outgoing call" : "Одлазни позив", + "{actor} started a call" : "{actor} је започео/ла позив", + "Incoming call" : "Долазни позив", + "{actor} joined the call" : "{actor} се придружио позиву", + "You joined the call" : "Придружили сте се позиву", + "{actor} left the call" : "{actor} је напустио позив", + "You left the call" : "Напустили сте позив", + "{actor} unlocked the conversation" : "{actor} је откључао разговор", + "You unlocked the conversation" : "Откључали сте разговор", + "An administrator unlocked the conversation" : "Администратор је откључао разговор", + "{actor} locked the conversation" : "{actor} је закључао разговор", + "You locked the conversation" : "Закључали сте разговор", + "An administrator locked the conversation" : "Администратор је закључао разговор", + "{actor} limited the conversation to the current participants" : "{actor} је ограничио разговор на текуће учеснике", + "You limited the conversation to the current participants" : "Ограничили сте разговор на текуће учеснике", + "An administrator limited the conversation to the current participants" : "Администратор је ограничио разговор на текуће учеснике", + "{actor} opened the conversation to registered users" : "{actor} је отворио разговор свим регистрованим корисницима", + "You opened the conversation to registered users" : "Отворили сте разговор свим регистрованим корисницима", + "An administrator opened the conversation to registered users" : "Администратор је отворио разговор свим регистрованим корисницима", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} је отворио разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "You opened the conversation to registered users and users created with the Guests app" : "Отворили сте разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор је отворио разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "The conversation is now open to everyone" : "Овај разговор је сада отворен свима", + "{actor} opened the conversation to everyone" : "{actor} је отворио разговор свима", + "You opened the conversation to everyone" : "Ви сте отворили разговор свима", + "{actor} restricted the conversation to moderators" : "{actor} је ограничио разговор на модераторе", + "You restricted the conversation to moderators" : "Ви сте ограничили разговор на модераторе", + "{actor} started breakout rooms" : "{actor} је покренуо сепарее", + "You started breakout rooms" : "Покренули сте сепарее", + "{actor} stopped breakout rooms" : "{actor} је зауставио сепарее", + "You stopped breakout rooms" : "Зауставили сте сепарее", + "{actor} allowed guests" : "{actor} је дозволио госте", + "You allowed guests" : "Ви сте дозволили госте", + "An administrator allowed guests" : "Администратор је дозволио госте", + "{actor} disallowed guests" : "{actor} је забранио госте", + "You disallowed guests" : "Ви сте забранили госте", + "An administrator disallowed guests" : "Администратор је забранио госте", + "{actor} set a password" : "{actor} је поставио лозинку", + "You set a password" : "Ви сте поставили лозинку", + "An administrator set a password" : "Администратор је поставио лозинку", + "{actor} removed the password" : "{actor} је уклонио лозинку", + "You removed the password" : "Ви сте уклонили лозинку", + "An administrator removed the password" : "Администратор је уклонио лозинку", + "{actor} added {user}" : "{actor} је додао корисника {user}", + "You joined the conversation" : "Придружили сте се разговору", + "{actor} joined the conversation" : "{actor} се придружио разговору", + "You added {user}" : "Ви сте додали корисника {user}", + "{actor} added you" : "{actor} Вас је додао", + "An administrator added you" : "Администратор вас је додао", + "An administrator added {user}" : "Администратор је додао корисника {user}", + "You left the conversation" : "Напустили сте разговор", + "{actor} left the conversation" : "{actor} је напустио разговор", + "{actor} removed {user}" : "{actor} је уклонио корисника {user}", + "You removed {user}" : "Ви сте уклонили корисника {user}", + "{actor} removed you" : "{actor} Вас је уклонио", + "An administrator removed you" : "Администратор вас је уклонио", + "An administrator removed {user}" : "Администратор је уклонио корисника {user}", + "{actor} invited {federated_user}" : "{actor} је позвао корисника {federated_user}", + "You invited {federated_user}" : "Позвали сте корисника {federated_user}", + "You accepted the invitation" : "Прихватили сте позивницу", + "{actor} invited you" : "{actor} вас је позвао", + "An administrator invited you" : "Администратор вас је позвао", + "An administrator invited {federated_user}" : "Администратор је позвао корисника {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} је прихватио позив", + "{actor} removed {federated_user}" : "{actor} је уклонио корисника {federated_user}", + "You removed {federated_user}" : "Уклонили сте корисника {federated_user}", + "You declined the invitation" : "Одбили сте позивницу", + "An administrator removed {federated_user}" : "Администратор је уклонио корисника {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} је одбио позив", + "{actor} added group {group}" : "{actor} је додао групу {group}", + "You added group {group}" : "Додали сте групу {group}", + "An administrator added group {group}" : "Администратор је додао групу {group}", + "{actor} removed group {group}" : "{actor} је уклонио групу {group}", + "You removed group {group}" : "Уклонили сте групу {group}", + "An administrator removed group {group}" : "Администратор је уклонио групу {group}", + "{actor} added team {circle}" : "{actor} је додао тим {circle}", + "You added team {circle}" : "Додали сте тим {circle}", + "An administrator added team {circle}" : "Администратор је додао тим {circle}", + "{actor} removed team {circle}" : "{actor} је уклонио тим {circle}", + "You removed team {circle}" : "Уклонили сте тим {circle}", + "An administrator removed team {circle}" : "Администратор је уклонио тим {circle}", + "{actor} added {phone}" : "{actor} је додао {phone}", + "You added {phone}" : "Додали сте {phone}", + "An administrator added {phone}" : "Администратор је додао {phone}", + "{actor} removed {phone}" : "{actor} је уклонио {phone}", + "You removed {phone}" : "Уклонили сте {phone}", + "An administrator removed {phone}" : "Администратор је уклонио {phone}", + "{actor} promoted {user} to moderator" : "{actor} је унапредио корисника {user} у модератора", + "You promoted {user} to moderator" : "Унапредили сте корисника {user} у модератора", + "{actor} promoted you to moderator" : "{actor} Вас је унапредио у модератора", + "An administrator promoted you to moderator" : "Администратор вас је унапредио у модератора", + "An administrator promoted {user} to moderator" : "Администратор је унапредио корисника {user} у модератора", + "{actor} demoted {user} from moderator" : "{actor} је скинуо улогу модератора кориснику {user}", + "You demoted {user} from moderator" : "Скинули сте улогу модератора кориснику {user}", + "{actor} demoted you from moderator" : "{actor} Вам је скинуо улогу модератора", + "An administrator demoted you from moderator" : "Администратор вам је скинуо улогу модератора", + "An administrator demoted {user} from moderator" : "Администратор је скинуо улогу модератора кориснику {user}", + "{actor} shared a file which is no longer available" : "{actor} је поделио фајл који више није доступан", + "You shared a file which is no longer available" : "Поделили сте фајл који више није доступан", + "File shares are currently not supported in federated conversations" : "Дељења фајлова се тренутно не подржавају у федерисаним разговорима", + "The shared location is malformed" : "Дељена локација није исправно формирана", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} је подесио Matterbridge да синхронизује овај чет са осталим четовима", + "You set up Matterbridge to synchronize this conversation with other chats" : "Подесили сте Matterbridge да синхронизује овај чет са осталим четовима", + "{actor} created thread {title}" : "{actor} је креирао низ {title}", + "You created thread {title}" : "Креирали сте низ {title}", + "{actor} renamed thread {title}" : "{actor} је променио име низа {title}", + "You renamed thread {title}" : "Променили сте име низа {title}", + "{actor} updated the Matterbridge configuration" : "{actor} је ажурирао Matterbridge конфигурацију", + "You updated the Matterbridge configuration" : "Ажурирали сте Matterbridge конфигурацију", + "{actor} removed the Matterbridge configuration" : "{actor} је уклонио Matterbridge конфигурацију", + "You removed the Matterbridge configuration" : "Уклонили сте Matterbridge конфигурацију", + "{actor} started Matterbridge" : "{actor} је покренуо Matterbridge", + "You started Matterbridge" : "Покренули сте Matterbridge", + "{actor} stopped Matterbridge" : "{actor} је зауставио Matterbridge", + "You stopped Matterbridge" : "Зауставили сте Matterbridge", + "{actor} deleted a message" : "{actor} је обрисао поруку", + "You deleted a message" : "Обрисали сте поруку", + "{actor} edited a message" : "{actor} је уредио поруку", + "You edited a message" : "Уредили сте поруку", + "{actor} pinned a message" : "{actor} је закачио поруку", + "You pinned a message" : "Закачили сте поруку", + "{actor} unpinned a message" : "{actor} је откачио поруку", + "Message was automatically unpinned" : "Порука је аутоматски откачена", + "You unpinned a message" : "Откачили сте поруку", + "{actor} deleted a reaction" : "{actor} је обрисао реакцију", + "You deleted a reaction" : "Обрисали сте реакцију", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Подесили сте да поруке истичу за %n недељу","Подесили сте да поруке истичу за %n недеље","Подесили сте да поруке истичу за %n недеља"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Подесили сте да поруке истичу за %n дан","Подесили сте да поруке истичу за %n дана","Подесили сте да поруке истичу за %n дана"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Подесили сте да поруке истичу за %n сат","Подесили сте да поруке истичу за %n сата","Подесили сте да поруке истичу за %n сати"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Подесили сте да поруке истичу за %n минут","Подесили сте да поруке истичу за %n минута","Подесили сте да поруке истичу за %n минута"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} је подесио да поруке истичу за %n недељу","{actor} је подесио да поруке истичу за %n недеље","{actor} је подесио да поруке истичу за %n недеља"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} је подесио да поруке истичу за %n дан","{actor} је подесио да поруке истичу за %n дана","{actor} је подесио да поруке истичу за %n дана"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} је подесио да поруке истичу за %n сат","{actor} је подесио да поруке истичу за %n сата","{actor} је подесио да поруке истичу за %n сати"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} је подесио да поруке истичу за %n минут","{actor} је подесио да поруке истичу за %n минута","{actor} је подесио да поруке истичу за %n минута"], + "{actor} disabled message expiration" : "{actor} је искључио рок важења порука", + "You disabled message expiration" : "Искључили сте рок важења порука", + "{actor} cleared the history of the conversation" : "{actor} је обрисао историју разговора", + "You cleared the history of the conversation" : "Обрисали сте историју разговора", + "{actor} set the conversation picture" : "{actor} је поставио слику разговора", + "You set the conversation picture" : "Поставили сте слику разговора", + "{actor} removed the conversation picture" : "{actor} је уклонио слику разговора", + "You removed the conversation picture" : "Уклонили сте слику разговора", + "{actor} ended the poll {poll}" : "{actor} је затворио гласање {poll}", + "You ended the poll {poll}" : "Затворили сте гласање {poll}", + "{actor} started the video recording" : "{actor} је започео видео снимање", + "You started the video recording" : "Започели сте видео снимање", + "{actor} stopped the video recording" : "{actor} је зауставио видео снимање", + "You stopped the video recording" : "Зауставили сте видео снимање", + "{actor} started the audio recording" : "{actor} је започео снимање звука", + "You started the audio recording" : "Започели сте снимање звука", + "{actor} stopped the audio recording" : "{actor} је зауставио снимање звука", + "You stopped the audio recording" : "Зауставили сте снимање звука", + "The recording failed" : "Снимање није успело", + "Someone voted on the poll {poll}" : "Неко је гласао у гласању {poll}", + "Message deleted by author" : "Аутор је обрисао поруку", + "Message deleted by {actor}" : "{actor} је обрисао поруку", + "Message deleted by you" : "Обрисали сте поруку", + "Deleted user" : "Обрисани корисник", + "Unknown number" : "Непознати број", + "Administration" : "Администрација", + "System" : "Систем", + "%s (guest)" : "%s (гост)", + "Missed call" : "Пропуштени позив", + "Unanswered call" : "Пропуштени позив", + "Call ended (Duration {duration})" : "Позив је завршен (Трајање {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Позив се завршио јер је достигнуто максимално трајање позива (Трајање {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} је завршио позив (Трајање {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Завршен је позив са %n гостом јер је достигнуто максимално трајање позива (Трајање {duration})","Завршен је позив са %n госта јер је достигнуто максимално трајање позива (Трајање {duration})","Завршен је позив са %n гостију јер је достигнуто максимално трајање позива (Трајање {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Завршен је позив са %n гостом (трајање {duration})","Завршен је позив са %n госта (трајање {duration})","Завршен је позив са %n гостију (трајање {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} је завршио позив са %n гостом (Трајање {duration})","{actor} је завршио позив са %n госта (Трајање {duration})","{actor} је завршио позив са %n гостију (Трајање {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршен је позив са корисником {user1} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1} ended (Duration {duration})" : "Завршене је позив са корисником {user1} (Трајање {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} је завршио позив са корисником {user1} (Трајање {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1} и {user2} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Завршене је позив са корисницима {user1} и {user2} (трајање {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1} и {user2} (Трајање {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2} и {user3} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2} и {user3} (трајање {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2} и {user3} (Трајање {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2}, {user3} и {user4} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2}, {user3} и {user4} (трајање {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2}, {user3} и {user4} (Трајање {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2}, {user3}, {user4} и {user5} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2} {user3}, {user4} и {user5} (трајање {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2}, {user3}, {user4} и {user5} (Трајање {duration})", + "Message of {user} in {conversation}" : "Порука од {user} у {conversation}", + "Message of {user}" : "Порука од {user}", + "Message of a deleted user in {conversation}" : "Порука од обрисаног корисника у {conversation}", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Причај са %s", + "An error occurred. Please contact your administrator." : "Дошло је до грешке. Молимо вас да се обратите свом администратору.", + "Storage quota exceeded" : "Прекорачена је квота за складиште", + "File not found" : "Фајл није нађен", + "File is not shared, or shared but not with the user" : "Фајл није дељен, или је дељен али не са корисником", + "No account available to delete." : "Нема налога који треба да се обрише.", + "Poll" : "Гласање", + "Password needs to be set" : "Потребно је да се постави лозинка", + "Uploading the file failed" : "Није успело отпремање фајла", + "No image file provided" : "Није понуђен фајл слике", + "File is too big" : "Фајл је превелики", + "Invalid file provided" : "Дати фајл је неисправан", + "Invalid image" : "Неисправна слика", + "Unknown filetype" : "Непознат тип фајла", + "Talk mentions" : "Talk спомињања", + "More conversations" : "Још разговора", + "Say hi to your friends and colleagues!" : "Поздравите Ваше пријатеље и колеге!", + "No unread mentions" : "Нема непрочитаних помињања", + "Call in progress" : "Позив је у току", + "You were mentioned" : "Поменути сте", + "Write to conversation" : "Пиши у разговор", + "Writes event information into a conversation of your choice" : "Пише информације о догађају у разговор који изаберете", + "Missing email field in header line" : "У линији заглавља недостаје поље и-мејла", + "Following lines are invalid: %s" : "Нису исправне следеће линије: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s вас је позвао у разговор „%2$s”.", + "You were invited to conversation \"%s\"." : "Позвани сте у разговор „%s”.", + "Conversation invitation" : "Позив за разговор", + "Scheduled time" : "Заказано време", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Такође можете да позовете телефоном користећи следеће детаље", + "Dial-in information" : "Информације за позив", + "Meeting ID" : "ID састанка", + "Your PIN" : "Ваш PIN", + "Click the button below to join the lobby now." : "Кликните на дугме испод да уђете у предсобље.", + "Click the link below to join the lobby now." : "Кликните на линк испод да уђете у предсобље.", + "Join lobby for \"%s\"" : "Уђите у предсобље за „%s”.", + "Click the button below to join the conversation now." : "Кликните на дугме испод да уђете у разговор.", + "Click the link below to join the conversation now." : "Кликните на линк испод да уђете у разговор.", + "Join \"%s\"" : "Придружи се разговору „%s”", + "Meeting" : "Састанак", + "Password request: %s" : "Захтев за лозинком: %s", + "Private conversation" : "Приватни разговор", + "Deleted user (%s)" : "Обрисани корисник (%s)", + "Failed to upload call recording" : "Није успело отпремање снимка позива", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Сервер за снимање није успео да опреми снимак позива {call}. Молимо вас да се обратите администрацији.", + "Share to chat" : "Дели у чет", + "Dismiss notification" : "Уклони обавештење", + "Call recording now available" : "Сада је доступно снимање позива", + "The recording for the call in {call} was uploaded to {file}." : "Снимак позива {call} је отпремљен у {file}.", + "Transcript now available" : "Сада је доступан транскрипт", + "The transcript for the call in {call} was uploaded to {file}." : "Транскрипт позива {call} је отпремљен у {file}.", + "Failed to transcript call recording" : "Није успело креирање транскрипта снимка позива", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер није успео да креира транскрипт снимка позива {file} за позив {call}. Молимо вас да се обратите администрацији.", + "Call summary now available" : "Сада је доступан резиме позива", + "The summary for the call in {call} was uploaded to {file}." : "Резиме за позив у {call} је отпремљен у {file}.", + "Failed to summarize call recording" : "Није успело резимирање снимка разговора", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер није успео да резимира снимак позива {file} за позив {call}. Молимо вас да се обратите администрацији.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Позвао вас је {user1} да се придружите {roomName} на {remoteServer}", + "Accept" : "Прихвати", + "Decline" : "Одбиј", + "{user1} invited you to a federated conversation" : "{user1} вас је позвао у здружени разговор", + "Someone reacted" : "Неко је реаговао", + "New message" : "Нова порука", + "Reminder" : "Подсетник", + "Someone mentioned you" : "Неко вас је поменуо", + "Notification" : "Обавештење", + "Someone reacted in a private conversation" : "Неко је реаговао у приватном разговору", + "You received a message in a private conversation" : "Примили сте поруку у приватном разговору", + "Reminder in a private conversation" : "Подсетник у приватном разговору", + "Someone mentioned you in a private conversation" : "Неко вас је поменуо у приватном разговору", + "Notification in a private conversation" : "Обавештење у приватном разговору", + "Reminder: You in {call}" : "Подсетник: Ви у {call}", + "Reminder: {user} in {call}" : "Подсетник: {user} у {call}", + "Reminder: Deleted user in {call}" : "Подсетник: Обрисани корисник у {call}", + "Reminder: {guest} (guest) in {call}" : "Подсетник: {guest} (гост) у {call}", + "Reminder: Guest in {call}" : "Подсетник: Гост у {call}", + "{user} reacted with {reaction}" : "{user} је реаговао са {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} је у {call} реаговао са {reaction}", + "Deleted user reacted with {reaction} in {call}" : "Обрисано је корисник је у {call} реаговао са {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (гост) је {call} реаговао са {reaction}", + "Guest reacted with {reaction} in {call}" : "Гост је {call} реаговао са {reaction}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Обрисани корисник у {call}", + "{guest} (guest) in {call}" : "{guest} (гост) у {call}", + "Guest in {call}" : "Гост у {call}", + "{user} sent you a private message" : "{user} Вам је послао приватну поруку", + "{user} sent a message in conversation {call}" : "{user} Вам је послао поруку у разговору: {call}", + "A deleted user sent a message in conversation {call}" : "Обрисани корисник је послао поруку у разговору {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гост) је послао поруку у разговору {call}", + "A guest sent a message in conversation {call}" : "Гост је послао поруку у разговору {call}", + "{user} replied to your private message" : "{user} је одговорио на Ваше приватне поруке", + "{user} replied to your message in conversation {call}" : "{user} је одговорио на Ваше поруке у разговору {call}", + "A deleted user replied to your message in conversation {call}" : "Обрисани корисник је одговорио на Вашу поруку у разговору {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гост) је одговорио на Вашу поруку у разговору {call}", + "A guest replied to your message in conversation {call}" : "Гост је одговорио на Вашу поруку у разговору {call}", + "Reminder: You in private conversation {call}" : "Подсетник: Ви у приватном разговору {call}", + "Reminder: A deleted user in private conversation {call}" : "Подсетник: Обрисани корисник у приватном разговору {call}", + "Reminder: {user} in private conversation" : "Подсетник: {user} у приватном разговору", + "Reminder: You in conversation {call}" : "Подсетник: Ви у разговору {call}", + "Reminder: {user} in conversation {call}" : "Подсетник: {user} у разговору {call}", + "Reminder: A deleted user in conversation {call}" : "Подсетник: Обрисани корисник у разговору {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Подсетник: {guest} (гост) у разговору {call}", + "Reminder: A guest in conversation {call}" : "Подсетник: Гост у разговору {call}", + "{user} reacted with {reaction} to your private message" : "{user} је реаговао са {reaction} на вашу приватну поруку", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} је реаговао са {reaction} на вашу поруку у разговору {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Обрисани корисник је реаговао са {reaction} на вашу поруку у разговору {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гост) је реаговао са {reaction} на вашу поруку у разговору {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гост је реаговао са {reaction} на вашу поруку у разговору {call}", + "{user} mentioned you in a private conversation" : "{user} Вас је споменуо/ла у приватном разговору", + "{user} mentioned group {group} in conversation {call}" : "{user} је поменуо групу {group} у разговору {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} је поменуо тим {team} у разговору {call}", + "{user} mentioned everyone in conversation {call}" : "{user} је поменуо све у разговору {call}", + "{user} mentioned you in conversation {call}" : "{user} Вас је споменуо/ла у разговору: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Обрисани корисник је поменуо групу {group} у разговору {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Обрисани корисник је поменуо тим {team} у разговору {call}", + "A deleted user mentioned everyone in conversation {call}" : "Обрисани корисник је поменуо све у разговору {call}", + "A deleted user mentioned you in conversation {call}" : "Обрисани корисник Вас је споменуо/ла у разговору: {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гост) је поменуо групу {group} у разговору {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гост) је поменуо тим {team} у разговору {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гост) је поменуо све у разговору {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гост) Вас је поменуо у разговору {call}", + "A guest mentioned group {group} in conversation {call}" : "Гост је поменуо групу {group} у разговору {call}", + "A guest mentioned team {team} in conversation {call}" : "Гост је поменуо тим {team} у разговору {call}", + "A guest mentioned everyone in conversation {call}" : "Гост је поменуо све у разговору {call}", + "A guest mentioned you in conversation {call}" : "Гост Вас је споменуо у разговору: {call}", + "View message" : "Прикажи поруку", + "Dismiss reminder" : "Одбаци подсетник", + "View chat" : "Види ћаскање", + "{user} invited you to a group conversation: {call}" : "{user} Вас је позвао/ла на групни разговор: {call}", + "Join call" : "Придружи се разговору", + "Answer call" : "Одговори на позив", + "{user} would like to talk with you" : "{user} жели да прича са вама", + "Call back" : "Узврати позив", + "You missed a call from {user}" : "Пропустили сте позив од корисника {user}", + "Accept call" : "Прихвати позив", + "Incoming phone call from {call}" : "Долазни телефонски позив од {call}", + "You missed a phone call from {call}" : "Пропустили сте телефонски позив од {call}", + "A group call has started in {call}" : "Групни разговор је започет у {call}", + "You missed a group call in {call}" : "Пропустили сте групни позив у разговору {call}", + "{email} is requesting the password to access {file}" : "{email} је затражио лозинку да приступи фајлу {file}", + "{email} tried to request the password to access {file}" : "{email} је покушао да затражи лозинку за приступ фајлу {file}", + "Someone is requesting the password to access {file}" : "Неко је затражио лозинку да приступи фајлу {file}", + "Someone tried to request the password to access {file}" : "Неко је покушао да затражи лозинку за приступ фајлу {file}", + "Open settings" : "Отвори поставке", + "Hosted signaling server added" : "Додат је хостовани сервер за сигнализацију", + "The hosted signaling server is now configured and will be used." : "Хостовани сервер за синализирање је сада подешен и користиће се.", + "Hosted signaling server removed" : "Уклоњен је хостовани сервер за сигнализацију", + "The hosted signaling server was removed and will not be used anymore." : "Хостовани сервер за синализирање је уклоњен и више се неће користити.", + "Hosted signaling server changed" : "Промењен је хостовани сервер за сигнализацију", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Налог хостованог сервера за сигнализирање је променио статус са „{oldstatus}” на „{newstatus}”.", + "pending" : "на чекању", + "active" : "активна", + "expired" : "истекла", + "blocked" : "блокирана", + "error" : "грешка", + "The certificate of {host} expires in {days} days" : "Важење сертификата за {host} истиче за {days} дана", + "The certificate of {host} expired" : "Важење сертификата за {host} истекло", + "Contact via Talk" : "Контактирај преко Talk", + "Open Talk" : "Отвори Talk", + "Default" : "Подразумевано", + "Presentation" : "Презентација", + "Conversations" : "Разговори", + "Messages in current conversation" : "Поруке у текућем разговору", + "{user}" : "{user}", + "Messages" : "Поруке", + "{user} in {conversation}" : "{user} у {conversation}", + "Messages in other conversations" : "Поруке у осталим разговорима", + "One-to-one rooms always need to show the other users avatar" : "Један-на-један собе увек морају да прикажу аватаре осталих корисника", + "Invalid emoji character" : "Неисправан емођи карактер", + "Invalid background color" : "Неисправна боја позадине", + "Avatar image is not square" : "Слика аватара није квадратна", + "Room {number}" : "Соба {number}", + "Other" : "Остало", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Није успео захтев за пробу јер пробни сервер није доступан. Молимо вас да покушате касније.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Постоји проблем са потврђивањем ове инстанце. Можда није доступна споља, па не може да се провери њен URL.", + "Something unexpected happened." : "Десило се нешто неочекивано.", + "The URL is invalid." : "URL није исправан.", + "An HTTPS URL is required." : "Захтева се HTTPS URL.", + "The email address is invalid." : "И-мејл адреса није исправна.", + "The language is invalid." : "Језик је неисправан.", + "The country is invalid." : "Земља је неисправна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Постоји проблем за захтевом за пробу. Молимо вас да погледате своје дневнике за више информација.", + "Too many requests are send from your servers address. Please try again later." : "Са адресе вашег сервера се шаље превише захтева. Молимо вас да покушате поново касније.", + "There is already a trial registered for this Nextcloud instance." : "Већ постоји проба регистрована за ову Nextcloud инстанцу.", + "Something unexpected happened. Please try again later." : "Десило се нешто неочекивано. Молимо вас да покушате поново касније.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Није успео захтев за пробу јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "Trial requested but failed to get account information. Please check back later." : "Проба је захтевана али није успело добављање информације о налогу. Молимо вас да поново проверите касније.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Постоји проблем са потрврђивањем овог разлога. Можда није доступан споља, па не може да се провери њен URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Није успело добављање информација о налогу јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Постоји проблем за добављањем информација о налогу. Молимо вас да погледате своје дневнике за више информација.", + "There is no such account registered." : "Такав налог није регистрован.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Није успело добављање информација о налогу јер пробни сервер није доступан. Молимо вас да покушате касније.", + "Deleting the hosted signaling server account failed. Please check back later." : "Није успело брисање налога хостованог сервера за сигнализирање. Молимо вас да поново проверите касније.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Није успело брисање налога јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "There is a problem with deleting the account. Please check your logs for further information." : "Постоји проблем за брисањем налога. Молимо вас да погледате своје дневнике за више информација.", + "Too many requests are sent from your servers address. Please try again later." : "Са адресе вашег сервера се шаље превише захтева. Молимо вас да покушате поново касније.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Није успело брисање налога јер пробни сервер није доступан. Молимо вас да покушате касније.", + "Note to self" : "Белешка самом себи", + "A place for your private notes, thoughts and ideas" : "Место за ваше приватне белешке, мисли и идеје", + "Transcript is AI generated and may contain mistakes" : "Транскрипт је генерисала AI и може да садржи грешке", + "Summary is AI generated and may contain mistakes" : "Резиме је генерисала AI и може да садржи грешке", + "Let's get started!" : "Хајде да почнемо!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** је сигурна платфора за комуникацију која је хостована на вашој инфраструктури и која се неприметно интегрише у Nextcloud екосистем.\n\n#### Кључне могућности апликације Nextcloud Talk:\n\n* Чет и размена порука у приватним и групним ћаскањима\n* Гласовни и видео позиви\n* Дељење фајлова и интеграција са осталим Nextcloud апликацијама\n* Прилагодљива подешавања разговора, модерисање и контрола приватности\n* Веб, десктоп и мобилна верзија (iOS и Android)\n* Приватна и безбедна комуникација\n\n Сазнајте више у [корисничкој документацији](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Добродошли у Nextcloud Talk\n\nNextcloud Talk је приватна и моћна апликација за размену порука која се интегрише са Nextcloud. Чет у приватним и групним разговорима, сарадња преко гласовних и видео позива, организација вебинара и догађаја, прилагођавање ваших разговора и још доста тога.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматирајте текст и креирајте обогаћене поруке\n\nУ Nextcloud Talk можете да користите Markdown синтаксу за означавање порука које шаљете. На пример, примените **подебљано** или *курзив* форматирање, или `истакните текст као изворни кôд`. Можете чак да креирате и табеле или да додате наслове у свој текст.\n\nТреба да исправите грешку у куцању или да измените форматирање? Уредите своју поруку кликом на „Уреди поруку” у менију поруке.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Додајте прилоге и линкове\n\nКористећи дугме „+” можете да додате фајлове из свог Nextcloud Hub. Делите ставке из Фајлова и разних Nextcloud апликација. Неке апликације чак подржавају и интерактивне виџете, на пример, апликација Текст.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Нека разговор тече: помените кориснике, реагујте на поруке и још тога\n\nУ разговору можете да поменете све користећи %s или одређене учеснике тако што откуцате „@” па из листе изаберете њихово име.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Можете да одговорите на поруке, да их проследите у друга ћаскања и другим особама, или да копирате садржај поруке.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Урадите више употребом Паметног бирача\n\nКада желите да отворите Паметни бирач, просто откуцајте „/” или идите на „+” мени, и тако прикачите разни садржај у своје поруке. Паметни бирач можете подесити тако да буде у могућности да додаје ставке из Nextcloud апликација, GIF-ове, локације на мапи, AI генерисани садржај и још много тога.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Управљајте подешавањима разговора\n\nУ менију разговора можете да приступите разним подешавањима којима управљате својим разговорима, као што су:\n* Уређивање информација о разговору\n* Управљање обавештењима\n* Примена бројних правила модерације\n* Подешавање права приступа и безбедности\n* Укључивање ботова\n* и још више!", + "Andorra" : "Андора", + "United Arab Emirates" : "Уједињени Арапски Емирати", + "Afghanistan" : "Авганистан", + "Antigua and Barbuda" : "Антигва и Барбуда", + "Anguilla" : "Ангвила", + "Albania" : "Албанија", + "Armenia" : "Јерменија", + "Angola" : "Ангола", + "Antarctica" : "Антарктик", + "Argentina" : "Аргентина", + "American Samoa" : "Америчка Самоа", + "Austria" : "Аустрија", + "Australia" : "Аустралија", + "Aruba" : "Аруба", + "Åland Islands" : "Оландска острва", + "Azerbaijan" : "Азербејџан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгија", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Бугарска", + "Bahrain" : "Бахреин", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сент Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Брунеј", + "Bolivia, Plurinational State of" : "Боливија, Вишенационална држава", + "Bonaire, Sint Eustatius and Saba" : "Карипска Холандија", + "Brazil" : "Бразил", + "Bahamas" : "Бахами", + "Bhutan" : "Бутан", + "Bouvet Island" : "Буве", + "Botswana" : "Боцвана", + "Belarus" : "Белорусија", + "Belize" : "Белизе", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосова (Килинг) Острва", + "Congo, the Democratic Republic of the" : "Конго, Демократска Република", + "Central African Republic" : "Централноафричка Република", + "Congo" : "Конго", + "Switzerland" : "Швајцарска", + "Côte d'Ivoire" : "Обала Слоноваче", + "Cook Islands" : "Кукова Острва", + "Chile" : "Чиле", + "Cameroon" : "Камерун", + "China" : "Кина", + "Colombia" : "Колумбија", + "Costa Rica" : "Костарика", + "Cuba" : "Куба", + "Cabo Verde" : "Зеленортска острва", + "Curaçao" : "Курасао", + "Christmas Island" : "Ускршња острва", + "Cyprus" : "Кипар", + "Czechia" : "Чешка", + "Germany" : "Немачка", + "Djibouti" : "Џибути", + "Denmark" : "Данска", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска Република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонија", + "Egypt" : "Египат", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритреја", + "Spain" : "Шпанија", + "Ethiopia" : "Етиопија", + "Finland" : "Финска", + "Fiji" : "Фиџи", + "Falkland Islands (Malvinas)" : "Фолкландска (Малвинска) острва", + "Micronesia, Federated States of" : "Микронезије, Савезне државе", + "Faroe Islands" : "Фарска Острва", + "France" : "Француска", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Уједињено Краљевство", + "Grenada" : "Гренада", + "Georgia" : "Грузија", + "French Guiana" : "Француска Гвајана", + "Guernsey" : "Гернзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамбија", + "Guinea" : "Гвинеја", + "Guadeloupe" : "Гвадалупе", + "Equatorial Guinea" : "Екваторијална Гвинеја", + "Greece" : "Грчка", + "South Georgia and the South Sandwich Islands" : "Јужна Џорџија и Јужна Сендвичка острва", + "Guatemala" : "Гватемала", + "Guam" : "Гвам", + "Guinea-Bissau" : "Гвинеја Бисао", + "Guyana" : "Гвајана", + "Hong Kong" : "Хонг Конг", + "Heard Island and McDonald Islands" : "Острво Херд и острва Макдоналд", + "Honduras" : "Хондурас", + "Croatia" : "Хрватска", + "Haiti" : "Хаити", + "Hungary" : "Мађарска", + "Indonesia" : "Индонезија", + "Ireland" : "Ирска", + "Israel" : "Израел", + "Isle of Man" : "Острво Мен", + "India" : "Индија", + "British Indian Ocean Territory" : "Британска територија Индијског океана", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран, Исламска република", + "Iceland" : "Исланд", + "Italy" : "Италија", + "Jersey" : "Џерзи", + "Jamaica" : "Јамајка", + "Jordan" : "Јордан", + "Japan" : "Јапан", + "Kenya" : "Кенија", + "Kyrgyzstan" : "Киргистан", + "Cambodia" : "Камбоџа", + "Kiribati" : "Кирибати", + "Comoros" : "Комори", + "Saint Kitts and Nevis" : "Сент Китс и Невис", + "Korea, Democratic People's Republic of" : "Кореја, Демократска народна република", + "Korea, Republic of" : "Кореја, Република", + "Kuwait" : "Кувајт", + "Cayman Islands" : "Кајманска острва", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоска Народна Демократска Република", + "Lebanon" : "Либан", + "Saint Lucia" : "Света Луција", + "Liechtenstein" : "Лихтенштајн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерија", + "Lesotho" : "Лесото", + "Lithuania" : "Литванија", + "Luxembourg" : "Луксембург", + "Latvia" : "Летонија", + "Libya" : "Либија", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдавија, Република", + "Montenegro" : "Црна Гора", + "Saint Martin (French part)" : "Свети Мартин (Француска)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалска Острва", + "North Macedonia" : "Северна Македонија", + "Mali" : "Мали", + "Myanmar" : "Мјанмар", + "Mongolia" : "Монголија", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северна Маријанска Острва", + "Martinique" : "Мартиник", + "Mauritania" : "Мауританија", + "Montserrat" : "Монтсерат", + "Malta" : "Малта", + "Mauritius" : "Маурицијус", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малезија", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибија", + "New Caledonia" : "Нова Каледонија", + "Niger" : "Нигер", + "Norfolk Island" : "Острво Норфок", + "Nigeria" : "Нигерија", + "Nicaragua" : "Никарагва", + "Netherlands" : "Холандија", + "Norway" : "Норвешка", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Нијуе", + "New Zealand" : "Нови Зеланд", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Француска Полинезија", + "Papua New Guinea" : "Папуа Нова Гвинеја", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Пољска", + "Saint Pierre and Miquelon" : "Сен Пјер и Микелон", + "Pitcairn" : "Питкерн", + "Puerto Rico" : "Порторико", + "Palestine, State of" : "Држава Палестина", + "Portugal" : "Португалија", + "Palau" : "Палау", + "Paraguay" : "Парагвај", + "Qatar" : "Катар", + "Réunion" : "Реинион", + "Romania" : "Румунија", + "Serbia" : "Србија", + "Russian Federation" : "Руска Федерација", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудијска Арабија", + "Solomon Islands" : "Соломонска Острва", + "Seychelles" : "Сејшели", + "Sudan" : "Судан", + "Sweden" : "Шведска", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Јелена, Асенсион и Тристан да Куња", + "Slovenia" : "Словенија", + "Svalbard and Jan Mayen" : "Свалбард и Јан Мајен острва", + "Slovakia" : "Словачка", + "Sierra Leone" : "Сијера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалија", + "Suriname" : "Суринам", + "South Sudan" : "Јужни Судан", + "Sao Tome and Principe" : "Сао Томе и Принципе", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Свети Мартин (Холандија)", + "Syrian Arab Republic" : "Сирија", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Теркс и Кејкос", + "Chad" : "Чад", + "French Southern Territories" : "Француске јужне и антарктичке земље", + "Togo" : "Того", + "Thailand" : "Тајланд", + "Tajikistan" : "Таџикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Источни Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турска", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тајван, провинција Кине", + "Tanzania, United Republic of" : "Танзанија", + "Ukraine" : "Украјина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Мала спољна острва Сједињених Држава", + "United States of America" : "Сједињене Америчке Државе", + "Uruguay" : "Уругвај", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Света столица", + "Saint Vincent and the Grenadines" : "Сент Винсент и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела, Боливарска република", + "Virgin Islands, British" : "Девичанска Острва, Британска", + "Virgin Islands, U.S." : "Девичанска Острва, Америчка", + "Viet Nam" : "Вијетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Валис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Јемен", + "Mayotte" : "Мајот", + "South Africa" : "Јужноафричка република", + "Zambia" : "Замбија", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Замућење позадине", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Није могла да се провери подршка за учитавање WASM фајлова. Молимо вас да ручно проверите да ли ваш веб сервер сервира `.wasm` фајлове.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб сервер није исправно подешен да испоручи .wasm фајлове. Ово је обично проблем са Nginx конфигурацијом. За замућење позадине је неопходно да се направе измене у конфигурацији како би могли да се испоруче и .wasm фајлови. Упоредите своју Nginx конфигурацију са препорученом конфигурацијом у нашој документацији.", + "Talk configuration values" : "Вредности Talk конфигурације", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Форсирање трајања разговора се подржава само на системима са cron. Молимо вас да укључите системски cron или да уклоните `max_call_duration` конфигурацију.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Мале `max_call_duration` вредности (тренутно је постављено на %d) не могу да се форсирају услед техничких ограничења. Позадински посао се извршава само сваких пет минута, тако да ово радите на сопствени ризик.", + "Federation" : "Здруживање", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Када је укључена Talk федерација, снажно се препоручује конфигурисање „memcache.locking”.", + "High-performance backend" : "Позадински механизам високих перформанси", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Није подешен ниједан позадински механизам високих перформанси - Извршавање Nextcloud Talk апликације без позадинског механизма високих перформанси има смисла само за врло мале позиве (2-3 учесника максимално). Молимо вас да подесите позадински механизам високих перформанси јер се тако обезбеђује да позиви са више учесника раде без проблема.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Извршавање „conversation_cluster” режима позадинског механизма високих перформанси је застарело и неће се подржавати у наредној верзији. Позадински механизам високих перформанси у данашње време подржава право груписање, тако да би то требало да се користи.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Дефинисање више позадинских механизама високих перформанси је застарело и неће се подржавати у наредној верзији. Уместо тога, требало би да се подеси балансер оптерећења заједно са груписаним серверима за сигнализацију и да се конфигурише у подешавањима Talk апликације.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Сачувани јавни кључ за алгоритам који се користи %1$s не одговара сачуваном приватном кључу. Покрените %2$s да поправите проблем.", + "High-performance backend not configured correctly. Run %s for details." : "Позадински механизам високих перформанси није исправно подешен. Покрените %s за детаље.", + "High-performance backend not configured correctly" : "Позадински механизам високих перформанси није исправно подешен", + "Error: Cannot connect to server" : "Грешка: не може да се успостави веза са сервером", + "Error: Server did not respond with proper JSON" : "Error: сервер није одговорио са исправним JSON", + "Error: Certificate expired" : "Грешка: важење сертификата је истекло", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Грешка: системскко време Nextcloud сервера и сервера позадинског механизма високе перформансе. Молимо вас да обезбедите везу оба сервера са сервером тачног времена, или ручно ускладите време на њима.", + "Could not get version" : "Не може да се добави верзија", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Грешка: Верзија која се извршава: {version}; потребно је да се сервер ажурира да би био компатибилан са овом верзијом апликације Talk", + "Error: Server responded with: {error}" : "Error: сервер је одговорио са: {error}", + "Error: Unknown error occurred" : "Error: дошло је до непознате грешке", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Упозорење: Верзија која се извршава: {version}; Сервер не подржава све могућности ове Talk верзије, недостају функције: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Када се Nextcloud Talk користи заједно са позадинским механизмом високих перформанси, снажно се препоручује да се подеси кеширање меморије.", + "Client Push" : "Client Push", + "Recording backend" : "Позадински механизам са снимање", + "Using the recording backend requires a High-performance backend." : "Када се користи позадински механизам за снимање, потребно је да се користи и позадински механизам високих перформанси.", + "No recording backend configured" : "Није подешен ниједан позадински механизам за снимање", + "SIP configuration" : "SIP конфигурација", + "Using the SIP functionality requires a High-performance backend." : "Употреба SIP функционалности захтева коришћење позадинског механизма високих перформанси.", + "No SIP backend configured" : "Није подешен ниједан SIP позадински механизам", + "Invalid date, date format must be YYYY-MM-DD" : "Неисправан датим, формат датума мора бити ГГГГ-ММ-ДД", + "Conversation not found" : "Разговор није нађен", + "Path is already shared with this conversation" : "Путања се већ дели у овом разговору", + "Chat, video & audio-conferencing using WebRTC" : "Ћаскање, аудио & видео конференцијски позиви преко WebRTC-а", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чет, видео & аудио конференције помоћу WebRTC\n\n* 💬 **Чет** Nextcloud Talk се испоручује са једноставним текст четом који вам омогућава да делите или отпремате фајлове из ваше апликације Nextcloud Фајлови или са локалног уређаја, као и да помињете остале учеснике.\n* 👥 **Приватни, групни, јавни и лозинком заштићени позиви!** Позовите некога, целу групу, или пошаљите јавни линк да бисте позвали у позив.\n* 🌐 **Федерисани четови** Четујте са осталим Nextcloud корисницима на њиховим серверима\n* 💻 **Дељење екрана!** Делите свој екран са учесницима позива.\n* 🚀 **Интеграција са осталим Nextcloud апликацијама** као што су Фајлови, Календар, Статус корисника, Контролна табла, Ток, Мапе, Паметни бирач, Контакти, Шпил и многе друге.\n* 🌉 **Синхронизација са осталим чет решењима** Пошто је [Matterbridge](https://github.com/42wim/matterbridge/) интегрисан у Talk, једноставно можете да синхронизујте велики број осталих чет решења у Nextcloud Talk и обрнуто.", + "Leave call" : "Напусти разговор", + "Navigating away from the page will leave the call in {conversation}" : "Одлазак са странице ће оставити позив у {conversation}", + "Stay in call" : "Остани у позиву", + "Error occurred when getting the conversation information" : "Дошло је до грешке током преузимања информација о разговору", + "Discuss this file" : "Причај о овом фајлу", + "Share this file with others to discuss it" : "Дели овај фајл са другима да причаш о њему", + "Share this file" : "Подели овај фајл", + "Join conversation" : "Укључи се у разговор", + "This conversation is password-protected." : "Овај разговор је заштићен лозинком.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Приметили смо више неисправних покушаја пријава са ваше IP адресе. Зато ће ваша следећа пријава бити могућа тек за 30 секунди.", + "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", + "Password" : "Лозинка", + "Submit" : "Пошаљи", + "Error requesting the password." : "Грешка приликом захтевања лозинке.", + "Request password" : "Захтевај лозинку", + "This conversation has ended" : "Разговор је завршен", + "Error occurred when joining the conversation" : "Дошло је до грешке током приступања разговору", + "Close Talk sidebar" : "Затвори Talk бочну траку", + "Open Talk sidebar" : "Отвори Talk бочну траку", + "Everyone" : "Сви", + "Users and moderators" : "Корисници и модератори", + "Moderators only" : "Само модератори", + "Disable calls" : "Искључи позиве", + "Save changes" : "Сними измене", + "Saving …" : "Чувам…", + "Saved!" : "Сачувано!", + "Limit to groups" : "Ограничи на групе", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Када се означи бар једна група, само људи из излистаних група ће бити део разговора.", + "Guests can still join public conversations." : "Гости и даље могу да се придруже јавним разговорима.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Корисници који више не могу да користе Talk ће и даље бити наведени као учесници у њиховим претходним разговорима и чуваће се и њихове поруке.", + "Limit using Talk" : "Ограничи коришћење talk", + "Limit creating a public and group conversation" : "Ограничи креирање јавних и групних разговора", + "Limit creating conversations" : "Ограничи креирање разговора", + "Limit starting a call" : "Ограничи започињање позива", + "Limit starting calls" : "Limit starting позива", + "When a call has started, everyone with access to the conversation can join the call." : "Када је позив започет, свако са приступом разговору може да се придружи и позиву.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На овом серверу су инсталирани следећи ботови. У документацији можете пронаћи детаље како да {linkstart1}изградите сопствени бот{linkend} или {linkstart2}листу ботова{linkend} које можете да укључите на серверу.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На овом серверу није инсталиран ниједан бот. У документацији можете пронаћи детаље како да {linkstart1}изградите сопствени бот{linkend} или {linkstart2}листу ботова{linkend} које можете да укључите на серверу.", + "Description is not provided" : "Није достављена документација", + "Locked for moderators" : "Закључано за модераторе", + "Enabled" : "укључено", + "Disabled" : "Искључено", + "Bots settings" : "Оба подешавања", + "State" : "Стање", + "Name" : "Име", + "Last error" : "Последња грешка", + "Total errors count" : "Укупан број грешака", + "Find more bots" : "Пронађи још ботова", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Сервери којима се верује мегу да се подесе на {linkstart}страници Подешавања дељења{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Здружени четови и позиви већ функционишу. Обрада прилога ће доћи у будућој верзији.", + "Enable Federation in Talk app" : "Укључи Заједницу у Talk апликацији", + "Permissions" : "Дозволе", + "Allow users to be invited to federated conversations" : "Дозволи да се коринисници позивају у федерисане разговоре", + "Allow users to invite federated users into conversation" : "Дозволи да корисници позивају федерисане кориснике у разговор", + "Only allow to federate with trusted servers" : "Дозволи федерисање само са серверима којима се верује", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Када се означи бар једна група, само ће људи из наведених група моћи да позивају федерисане кориснике у разговор.", + "Groups allowed to invite federated users" : "Групе којима је дозвољено да позивају федерисане кориснике", + "Select groups …" : "Изаберите групе…", + "All messages" : "Све поруке", + "@-mentions only" : "Само @-помињања", + "Off" : "Искључена", + "General settings" : "Опште поставке", + "Default notification settings" : "Подразумевана подешавања обавештења", + "Default group notification" : "Подразумевана групна обавештења", + "Default group notification for new groups" : "Подразумевана групна обавештења за нове групе", + "Integration into other apps" : "Интеграција у друге апликације", + "Allow conversations on files" : "Дозволи разговоре у фајловима", + "Allow conversations on public shares for files" : "Дозволи разговоре на јавним дељењима фајлова", + "End-to-end encrypted calls" : "Позиви шифровани с-краја-на-крај", + "Enable encryption" : "Укључи шифровање", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Позиви шифровани с-краја-на-крај са подешеним SIP мостом захтевају употребу новије верзије позадинског механизма високих перформанси и SIP мост.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Мобилни клијенти тренутно не подржавају позиве шифроване с-краја-на-крај.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Кликом на горње дугме се информације из формулара шаљу серверима фирме Struktur AG. Више информација можете да видите на {linkstart}spreed.eu{linkend}.", + "Pending" : "На чекању", + "Error" : "Грешка", + "Blocked" : "Блокиран", + "Active" : "Активан", + "Expired" : "Истекао", + "Never" : "Никад", + "The trial could not be requested. Please try again later." : "Проба не може да се захтева. Молимо вас да покушате касније.", + "The account could not be deleted. Please try again later." : "Налог не може да се обрише. Молимо вас да покушате касније.", + "Hosted High-performance backend" : "Хостовани позадински механизам високих перформанси", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Наш партнер Struktur AG обезбеђује сервис којим може да се захтева хостовани сервер за сигнализацију. За ово је потребно само да испуните доњи формулар и ваш Nextcloud ће послати захтев. Једном кад се сервер постави за вас, подаци за пријаву ће се аутоматски попунити. Ово ће да препише постојећа подешавања сервера за сигнализацију.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ако ваш позадински механизам има STUN и/или TURN функионалност, подешавања ће се ажурирати у складу са тим.", + "URL of this Nextcloud instance" : "URL ове Nextcloud инстанце", + "Full name of the user requesting the trial" : "Пуно име коринсика који захтева пробу", + "Email of the user" : "И-мејл корисника", + "Language" : "Језик", + "Country" : "Држава", + "Request signaling server trial" : "Захтев за пробу сервера за сигнализацију", + "You can see the current status of your hosted signaling server in the following table." : "У следећој табели можете да видите статус свог хостованог сервера за сигнализацију.", + "Status" : "Статус", + "Created at" : "Направљено", + "Expires at" : "Истиче дана", + "Limits" : "Ограничења", + "STUN included" : "STUN је укључен", + "Yes" : "Да", + "No" : "Не", + "TURN included" : "TURN је укључен", + "Delete the signaling server account" : "Обриши налог сервера за сигнализацију", + "_%n user_::_%n users_" : ["%n корисник","%n корисника","%n корисника"], + "Installed version: {version}" : "Инсталирана верзија: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Можете да инсталирате Matterbridge да бисте повезали Nextcloud Talk са неким другим сервисима, посетите њихову {linkstart1}GitHub страницу{linkend} за више детаља. Преузимање и инсталирање апликације може да потраје. У случају да истекне време, молимо вас да је ручно инсталирате из {linkstart2}Nextcloud продавнице апликација{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge бинарни фајл нема исправне дозволе. Молимо вас да обезбедите да је власник Matterbridge бинарног фајла одговарајући корисник и да може да се изврши. Можете га пронаћи у „/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "Није пронађен Matterbridge бинарни фајл, или не може да се изврши.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "У конфигурацији можете и ручно да поставите путању до Matterbridge бинарног фајла. Погледајте {linkstart}документацију Matterbridge интеграције{linkend} за више информација.", + "Downloading …" : "Преузима се...", + "Install Talk Matterbridge" : "Инсталирај Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Дошло је до грешке приликом инсталирања Matterbridge апликације", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Дошло је до грешке током инсталације Talk Matterbridge. Молимо вас да је инсталирате ручно", + "Failed to execute Matterbridge binary." : "Matterbridge бинарни фајл није могао да се изврши.", + "Matterbridge integration" : "Matterbridge интеграција", + "Enable Matterbridge integration" : "Укључи Matterbridge интеграцију", + "Status: Checking connection" : "Статус: проверава се веза", + "OK: Running version: {version}" : "OK: Верзија која се извршава: {version}", + "Error: Server seems to be a Signaling server" : "Грешка: изгледа да је сервер Сервер за сигнализирање", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Грешка: системскко време Nextcloud сервера и сервера позадинског механизма снимања нису синхронизована. Молимо вас да обезбедите везу оба сервера са сервером тачног времена, или ручно ускладите време на њима.", + "Recording backend URL" : "URL позадинског механизма за снимање", + "Validate SSL certificate" : "Потвди SSL сертификат", + "Delete this server" : "Обриши овај сервер", + "Test this server" : "Тестирај овај сервер", + "Disabled for all calls" : "Искључено за све позиве", + "Enabled for all calls" : "Укључено за све позиве", + "Configurable on conversation level by moderators" : "Модератори могу да подесе на нивоу разговора", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP подешавања „upload_max_filesize” или „post_max_size” ће само да дозволе отпремање фајлова величине до {maxUpload}.", + "Recording backend settings saved" : "Сачувана су подешавања позадинског механизма са снимање", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модератори ће моћи да укључе сагласност на нивоз разговора. Пре него што било који учесник приступи сваком позиву овог разговора, биће потребно да пристане да буде сниман.", + "The consent to be recorded will be required for each participant before joining every call." : "Сагласност да буде сниман ће се тражити од сваког корисника пре него што приступи сваком позиву.", + "The consent to be recorded is not required." : "Није потребна сагласност да се буде снимљен.", + "Recording backend configuration is only possible with a High-performance backend." : "Конфигурација позадинског механизма за снимање је могућа само са позадинским механизмом високих перформанси.", + "Add a new recording backend server" : "Додај нови сервер позадинског механизма за снимање", + "Shared secret" : "Дељена тајна", + "Recording consent" : "Сагласност за снимање", + "Recording transcription" : "Транскрипт снимка", + "Automatically transcribe call recordings with a transcription provider" : "Снимци разговора се аутоматски транскрибују помоћу пружаоца услуге транскрипције", + "Automatically summarize call recordings with transcription and summary providers" : "Снимци разговора се аутоматски резимирају помоћу пружаоца услуге транскрипције и резимирања", + "SIP configuration saved!" : "Сачувана је SIP конфигурација!", + "SIP configuration is only possible with a High-performance backend." : "SIP конфигурација је могућа само са позадинским механизмом високих перформанси.", + "Enable SIP Dial-out option" : "Укључи SIP одлазни позив опцију", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Потребно је да се ажурира сигнализирајући сервер да би се могла користити SIP одлсзни позив функција.", + "Do not show SIP Dial-out caller number" : "Не приказуј SIP одлазни број позиваоца", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонимни број би примаоцу позива требало да се појави као „unknown” или „withheld number”", + "Dial-out number" : "Одлазни број", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 форматирани број који се користи као број позиваоца у крајњој нужди за одлазне позиве", + "Dial-out prefix" : "Одлазни префикс", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префикс подешеног броја корисника за одлазне позиве (подразумевано је `+`)", + "Restrict SIP configuration" : "Ограничи SIP конфигурисање", + "Enable SIP configuration" : "Омогући SIP конфигурисање", + "Only users of the following groups can enable SIP in conversations they moderate" : "Само корисници следећих група могу да укључе SIP у разговорима које модеришу", + "Phone number (Country)" : "Број телефона (Земља)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ове информације се шаљу у е-порукама са позивницама и приказују се на бочној траци свим учесницима.", + "Nextcloud base URL" : "Nextcloud базна URL адреса", + "Talk Backend URL" : "URL адреса Talk позадинског механизма", + "WebSocket URL" : "URL адреса WebSocket сервера", + "Available features" : "Доступне фукнционалности", + "Error: Websocket connection failed" : "Грешка: Websocket веза није успела", + "Error code" : "Кôд грешке", + "Error message" : "Порука о грешки", + "Error: Websocket connection failed. Check browser console" : "Грешка: Websocket веза није успела. Погледајте конзолу интернет прегледача", + "High-performance backend URL" : "URL позадинског механизма високих перформанси", + "Missing High-performance backend warning hidden" : "Сакривено је упозорење о недостајућем позадинском механизму високих перформанси", + "High-performance backend settings saved" : "Сачувана су подешавања позадинског механизма високих перформанси", + "Nextcloud Talk setup not complete" : "Nextcloud Talk подешавање није довршено", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Молимо вас да имате на уму да ће се у позивима са више од 2 учесника без позадинског механизма високих перформанси искусити проблеми са везом и велико оптерећење уређаја учесника у разговору.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Инсталирајте позадински механизам високих перформанси да би позиви са више учесника функционисали беспрекорно.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Брзи водич за инсталацију", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "За позиве са више учесника је неопходан позадински механизам високих перформанси. Без њега, сви учесници појединачно морају да отпремају свој видео сваком осталом учеснику, што ће највероватније да проузрокује проблеме са повезивањем и велико оптерећење уређаја који учествују у позиву.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Када се користи Nextcloud Talk са позадинским механизмом високих перформанси, снажно се препоручује да се подеси дистрибуирани кеш.", + "Add High-performance backend server" : "Додај сервер позадинског механизма високих перформанси", + "Warn about connectivity issues in calls with more than 2 participants" : "Упозоравај на проблеме са конекцијом у разговорима са више од 2 учесника", + "STUN server URL" : "Адреса „STUN“ сервера", + "The server address is invalid" : "Адреса сервера није исправна", + "STUN settings saved" : "Сачувана су STUN подешавања", + "STUN servers" : "„STUN“ сервери", + "A STUN server is used to determine the public IP address of participants behind a router." : "„STUN“ сервер се користи да одреди јавну ИП адресу учесника који су иза рутера.", + "Add a new STUN server" : "Додај нови STUN сервер", + "{schema} scheme must be used with a domain" : "{schema} шема мора да се користи са доменом", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN сервер је вратио успешне ICE кандидате", + "Error: No working ICE candidates returned by the TURN server" : "OK: TURN сервер није вратио ICE кандидате који раде", + "Testing whether the TURN server returns ICE candidates" : "Тестирање да ли TURN сервер враћа ICE кандидате", + "TURN server schemes" : "Шеме TURN сервера", + "TURN server URL" : "Адреса TURN сервера", + "TURN server secret" : "Тајна TURN сервера", + "TURN server protocols" : "TURN серверски протокол", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сервер се користи да прослеђује саобраћај од учесника који се налазе иза заштитног зида. Ако поједини учесници не могу да се повеђу са осталима, највероватније је потребан TURN сервер. За упутства о подешавању, погледајте {linkstart}ову документацију{linkend}.", + "TURN settings saved" : "Сачувана су TURN подешавања", + "TURN servers" : "TURN сервери", + "Add a new TURN server" : "Додај нови TURN сервер", + "Failed" : "Није успело", + "OK" : "У реду", + "Checking …" : "Проверавам…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Неуспешно: WebAssembly је искључен или га овај прегледач не подржава. Да би се извршила провера, молимо вас да укључите WebAssembly или да користите прегледач који га подржава.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Неуспешно: веб сервер није исправно вратио „.wasm” и „.tflite” фајлове. Молимо вас да погледате одељак „System requirements” у Talk документацији.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: веб сервер је исправно вратио „.wasm” и „.tflite” фајлове.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Изгледа да PHP и Apache конфигурација није компатибилна. Имајте на уму да PHP може да се користи само са MPM_PREFORK модулом и да PHP-FPM може да се користи само са MPM_EVENT модулом.", + "Web server setup checks" : "Провере подешавања веб сервера", + "Files required for virtual background can be loaded" : "Могу да се учитају фајлови неопходни за виртуелну позадину", + "Federated user" : "Федерисани корисник", + "Assign participants to rooms" : "Додели учеснике собама", + "Configure breakout rooms" : "Конфигуриши сепарее", + "Number of breakout rooms" : "Број сепареа", + "You can create from 1 to 20 breakout rooms." : "Можете да креирате од 1 до 20 сепареа", + "Assignment method" : "Метод доделе", + "Automatically assign participants" : "Аутоматски додели учеснике", + "Manually assign participants" : "Ручно додели учеснике", + "Allow participants to choose" : "Дозволи да учесници изаберу", + "Create rooms" : "Креирај собе", + "Confirm" : "Потврди", + "Create breakout rooms" : "Креирај сепарее", + "Reset" : "Ресетуј", + "Delete breakout rooms" : "Обриши сепарее", + "Room {roomNumber}" : "Соба {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текући сепаре и подешавања ће се изгубити", + "Cancel" : "Откажи", + "Unassigned participants" : "Недодељени учесници", + "Back" : "Назад", + "Assign" : "Додели", + "Add participant \"{user}\"" : "Додај учесника „{user}”", + "Now" : "Сада", + "Invalid calendar selected" : "Изабран је неисправан календар", + "Invalid start time selected" : "Изабрано је неисправно време почетка", + "Invalid end time selected" : "Изабрано је неисправно време краја", + "Unknown error occurred" : "Дошло је до непознате грешке", + "Sending no invitations" : "Не шаље се ниједна позивница", + "{participant0} will receive an invitation" : "{participant0} ће примити позивницу", + "{participant0} and {participant1} will receive invitations" : "{participant0} и {participant1} ће примити позивницу", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} и још %n ће примити позивнице","{participant0}, {participant1} и још %n осталих ће примити позивнице","{participant0}, {participant1} и још %n осталих ће примити позивнице"], + "Invite {user}" : "Позови {user}", + "Invite all users and emails in this conversation" : "Позови све кориснике и и-мејл адресе у овај разговор", + "Meeting created" : "Креиран је састанак", + "Upcoming meetings" : "Предстојећи састанци", + "Loading …" : "Учитавање…", + "No upcoming meetings" : "Нема предстојећих састанака", + "Schedule a meeting" : "Закажи састанак", + "Meeting title" : "Наслов састанка", + "From" : "Од", + "To" : "За", + "Calendar" : "Календар", + "Attendees" : "Присутни", + "No other participants to send invitations to." : "Нема осталих учесника којима би могла да се пошаље позивница.", + "Add attendees" : " Додај учеснике", + "Save" : "Сачувај", + "Search participants" : "Претражи учеснике", + "No results" : "Нема резултата", + "Done" : "Завршено", + "Disable live transcription" : "Искључи транскрипцију уживо", + "Raise hand" : "Подигни руку", + "Raise hand (R)" : "Подигни руку (R)", + "Lower hand" : "Спуштена рука", + "Lower hand (R)" : "Спусти руку (R)", + "Exit full screen (F)" : "Напусти пун екран (F)", + "Full screen (F)" : "Пун екран (F)", + "Speaker view" : "Поглед говорника", + "Grid view" : "Приказ мреже", + "Error when trying to load the available live transcription languages" : "Грешка приликом покушаја учитавања доступних језика за транскрипцију уживо", + "Failed to enable live transcription" : "Није успело укључивање транскрипције уживо", + "Recording consent is required" : "Потребна је сагласност за снимање", + "This conversation is read-only" : "Овај разговор је само-за-читање", + "Conversation not found or not joined" : "Није пронађен разговор или му нисте приступили", + "Lobby is still active and you're not a moderator" : "Предсобље је још увек активно и ви нисте модератор", + "Connection failed" : "Није успело повезивање", + "Reload" : "Поново учитај", + "{nickName} raised their hand." : "{nickName} је подигао руку.", + "A participant raised their hand." : "Учесник је подигао руку.", + "Collapse stripe" : "Сажми црту", + "Expand stripe" : "Развиј црту", + "Previous page of videos" : "Претходна страница видеа", + "Next page of videos" : "Наредна страница видеа", + "Connecting …" : "Повезивање ..", + "Calling …" : "Позивање", + "Waiting for {user} to join the call" : "Чека се да {user} приступи позиву", + "Waiting for others to join the call …" : "Чекам да се остали прикључе разговору…", + "You can invite others in the participant tab of the sidebar" : "Можете позвати остале у језичку са учесницима у траци са стране", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете позвати остале у језичку са учесницима у траци са стране или поделити ову везу као позивницу!", + "Share this link to invite others!" : "Поделите ову везу да позовете остале!", + "Copy link" : "Копирај везу", + "You are not allowed to enable audio" : "Није вам дозвољено да укључите звук", + "No audio. Click to select device" : "Нема звука. Кликните да изаберете уређај", + "Mute audio" : "Искључи звук", + "Mute audio (M)" : "Утули звук (М)", + "Unmute audio" : "Пусти звук", + "Unmute audio (M)" : "Пусти звук (М)", + "None" : "Нико", + "Select a microphone" : "Изаберите микрофон", + "Select a speaker" : "Изаберите звучник", + "Check devices" : "Провери уређаје", + "Access to camera was denied" : "Приступ камери је одбијен", + "Error while accessing camera: It is likely in use by another program" : "Грешка приликом приступања камери: највероватније је користи неки други програм", + "Error while accessing camera" : "Грешка приликом приступања камери", + "You have been muted by a moderator" : "Модератор вас је утишао", + "Hide presenter video" : "Сакриј видео презентера", + "You are not allowed to enable video" : "Није вам дозвољено да укључите видео", + "No video. Click to select device" : "Нема видеа. Кликните да изаберете уређај", + "Disable video" : "Искључи видео", + "Disable video (V)" : "Искључи видео (V)", + "Enable video" : "Укључи видео", + "Enable video (V)" : "Укључи видео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео - Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео (V) - Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео. Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Select a video device" : "Изаберите видео уређај", + "Show presenter" : "Прикажи особу која излаже", + "You" : "Ви", + "Mute" : "Утули", + "Muted" : "Утуљено", + "Show screen" : "Прикажи екран", + "Stop following" : "Прекини праћење", + "Connection could not be established …" : "Није могла да се успостави веза...", + "Connection was lost and could not be re-established …" : "Веза је изгубљена и није могла поново да се успостави...", + "Connection could not be established. Trying again …" : "Није могла да се успостави веза. Покушава се поново...", + "Connection lost. Trying to reconnect …" : "Веза је изгубљена. Покушава се поновно повезивање...", + "Connection problems …" : "Проблеми са везом", + "Collapse" : "Скупи", + "Expand" : "Proširi", + "You need to be logged in to upload files" : "Да бисте отпремали фајлове, морате бити пријављени", + "Drop your files to upload" : "Отпустите фајлове за отпремање", + "Conversation messages" : "Поруке у разговору", + "Scroll to bottom" : "Скролуј на дно", + "Post message" : "Објави поруку", + "Federated conversation" : "Федерисани разговор", + "Public conversation" : "Јавни разговор", + "Favorite" : "Омиљени", + "Banned users" : "Забрањени корисници", + "Manage the list of banned users in this conversation." : "Управљање листом забрањених корисника у овом разговору.", + "Manage bans" : "Управљај забранама", + "No banned users" : "Нема забрањених корисника", + "Banned by:" : "Забранио:", + "Date:" : "Датум:", + "Note:" : "Белешка:", + "Hide details" : "Сакриј детаље", + "Show details" : "Прикажи детаље", + "Unban" : "Уклони забрану", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Наслов и опис можете да промените у {linkstart}Календару ↗{linkend}.", + "Error while updating conversation name" : "Грешка приликом ажурирања назива разговора", + "Error while updating conversation description" : "Грешка приликом ажурирања описа разговора", + "Enter a name for this conversation" : "Унесите назив овог разговора", + "Edit conversation name" : "Уреди назив разговора", + "Edit conversation description" : "Уреди опис разговора", + "Enter a description for this conversation" : "Унесите опис овог разговора", + "Picture" : "Слика", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У овом разговору могу да се укључе следећи ботови. Обратите се администрацији ако желите да добијете још ботова инсталираних на овом серверу.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На овом серверу није инсталиран ниједан бот. Обратите се администрацији ако желите да инсталирате ботове на овај сервер.", + "Disable" : "Искључи", + "Enable" : "Укључи", + "Breakout rooms" : "Сепареи", + "Manage breakout rooms" : "Управљај сепареима", + "Set up breakout rooms for this conversation" : "Подесите сепарее за овај разговор", + "Please select a valid PNG or JPG file" : "Молимо вас да изаберете исправан PNG или JPG фајл", + "Choose your conversation picture" : "Изаберите слику за свој разговор", + "Choose" : "Изаберите", + "Error setting conversation picture" : "Грешка приликом постављања слике разговора", + "Could not set the conversation picture: {error}" : "Није могла да се постави слика разговора: {error}", + "Error cropping conversation picture" : "Грешка приликом опсецања слике разговора", + "Error removing conversation picture" : "Грешка приликом уклањања слике разговора", + "Set emoji as conversation picture" : "Постави емођи као слику разговора", + "Set background color for conversation picture" : "Постави боју позадине слике разговора", + "Upload conversation picture" : "Отпреми слику разговора", + "Choose conversation picture from files" : "Изабери слику разговора међу фајловима", + "Remove conversation picture" : "Уклони слику разговора", + "The file must be a PNG or JPG" : "Фајл мора да буде PNG или JPG", + "Set picture" : "Постави слику", + "Default permissions modified for {conversationName}" : "Подразумеване дозволе измењене за {conversationName}", + "Could not modify default permissions for {conversationName}" : "Нису могле да се измене подразумеване дозволе за {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Уређивање подразумеваних дозвола за учеснике овог разговора. Ова подешавања не утичу на модераторе.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Сваки пут када се у овом одељку измене дозволе, губе се произвољне дозволе које су раније додељене појединим учесницима.", + "All permissions" : "Све дозволе", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учесници имају дозволу да започну позив, приступе позиву, укључе звук и видео и деле екран.", + "Restricted" : "Ограничена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учесници могу да приступе позивима, али не могу да укључе ни звук ни видео, нити могу да деле екран све док им модератор то не дозволи.", + "Advanced permissions" : "Напредне дозволе", + "Edit permissions" : "Уреди дозволе", + "Conversation settings" : "Подешавања разговора", + "Basic Info" : "Основне информације", + "Personal" : "Лично", + "Moderation" : "Модерација", + "Setup overview" : "Подеси преглед", + "Live transcription" : "Транскрипција уживо", + "Enable live transcription" : "Укључи транскрипцију уживо", + "Breakout Rooms" : "Сепареи", + "Matterbridge" : "Matterbridge", + "Bots" : "Ботови", + "Danger zone" : "Зона опасности", + "Archive conversation" : "Архивирај разговор", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивирани разговори се подразумевано не виде на листи разговора. Међутим, ипак ће се појављивати када претражујете по имену разговора или приступите листи архивираних разговора.", + "Do you really want to leave \"{displayName}\"?" : "Да ли заиста желите да напустите „{displayName}”?", + "You can archive this conversation instead." : "Уместо тога, овај разговор можете да архивирате.", + "Leave conversation" : "Напусти разговор", + "You need to promote a new moderator before you can leave the conversation" : "Морате да промовишете новог модератора пре него што напустите разговор", + "Delete conversation" : "Обриши разовор", + "Do you really want to delete \"{displayName}\"?" : "Да ли заиста желите да обришете „{displayName}”?", + "Error while deleting conversation" : "Грешка приликом брисања разговора", + "Delete all chat messages" : "Обриши све чет поруке", + "Do you really want to delete all messages in \"{displayName}\"?" : "Да ли заиста желите да обришете све поруке у „{displayName}”?", + "Error while clearing chat history" : "Грешка приликом брисања чет историје", + "Be careful, these actions cannot be undone." : "Будите опрезни, ове акције не могу да се пониште", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Једном када се разговор напусти, за поновно приступање затвореном разговору је потребна позивница. Отвореном разговору може да се поново приступи у било које време.", + "Permanently delete this conversation." : "Трајно брисање оваг разговора.", + "Delete chat messages" : "Обриши чет поруке", + "Permanently delete all the messages in this conversation." : "Трајно брисање свих порука у овом разговору.", + "_%n hour_::_%n hours_" : ["%n сат","%n сата","%n сати"], + "_%n day_::_%n days_" : ["%n дан","%n дана","%n дана"], + "_%n week_::_%n weeks_" : ["%n седмица","%n седмице","%n седмица"], + "Custom expiration time" : "Произвољно време трајања", + "Message expiration disabled" : "Искључен је рок трајања поруке", + "Message expiration set: {duration}" : "Постављен је рок трајања поруке: {duration}", + "Error when trying to set message expiration" : "Грешка приликом покушаја да се постави рок трајања поруке", + "Message expiration" : "Рок трајања поруке", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Чет поруке могу да истекну након одређеног времена. Напомена: фајлови који су подељени у чету се неће обрисати за власника, али више неће бити дељени у разговору.", + "Set message expiration" : "Постави рок важења поруке", + "Current message expiration" : "Текући рок важења поруке", + "Password copied to clipboard" : "Лозинка је копирана у клипборд", + "Password could not be copied" : "Лозинка није могла да се копира", + "Guest access" : "Приступ госта", + "Breakout rooms are not allowed in public conversations." : "У јавним разговорима нису дозвољени сепареи.", + "Allow guests to join this conversation via link" : "Дозволи да гости приступе разговору путем линка", + "Password protection" : "Заштита лозинком", + "This conversation is password-protected. Guests need password to join" : "Овај разговор је заштићен лозинком. Гости морају да наведу лозинку ако желе да се придруже", + "Password protection is needed for public conversations" : "За јавне разговоре је обавезна заштита лозинком", + "Set a password" : "Постави лозинку", + "Change password" : "Измени лозинку", + "Enter new password" : "Унесите нову лозинку", + "Save password" : "Сачувај лозинку", + "Copy password" : "Копирај лозинку", + "Guests are allowed to join this conversation via link" : "Гости могу да приступе овом разговору путем линка", + "Guests are not allowed to join this conversation" : "Гости не могу да приступе овом разговору", + "Resend invitations" : "Поново пошаљи позивнице", + "This conversation is open to both registered users and users created with the Guests app" : "Овај разговор је отворен и за регистроване и за кориснике креиране апликацијом Гости", + "This conversation is open to registered users" : "Овај разговор је отворен за регистроване кориснике", + "This conversation is limited to the current participants" : "Овај разговор је ограничен на тренутне учеснике", + "You opened the conversation to both registered users and users created with the Guests app" : "Отворили сте разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "Error occurred when opening or limiting the conversation" : "Дошло је до грешке током отварања или ограничавања разговора", + "Open conversation to registered users, showing it in search results" : "Отвори разговор за регистроване кориснике и приказуј га у резултатима претраге", + "Also open to users created with the Guests app" : "Такође је отворен корисницима креираним апликацијом Гости", + "Open conversation" : "Отвори разговор", + "Set language spoken in calls" : "Поставите језике који се говоре у позивима", + "Languages could not be loaded" : "Нису могли да се учитају језици", + "Loading languages …" : "Језици се учитавају", + "Invalid language" : "Неисправни језик", + "Default language (English)" : "Подразумевани језик (енглески)", + "Default live transcription language set" : "Постављен је подразумевани језик за транскрипцију уживо", + "Live transcription language set: {languageName}" : "Постављени језик за транскрипцију уживо: {languageName}", + "Error when trying to set live transcription language" : "Грешка приликом покушаја постављања језика за транскрипцију уживо", + "Start time: {date}" : "Време почетка: {date}", + "Start time has been updated" : "Ажурирано је време почетка", + "Error occurred while updating start time" : "Дошло је до грешке приликом ажурирања времена почетка", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Укључивање предсобља ће да из текућег позива уклони све учеснике који нису модератори.", + "Enable lobby, restricting the conversation to moderators" : "Укључи предсобље и ограничи разговор само на модераторе", + "Meeting start time" : "Време почетка састанка", + "Start time (optional)" : "Време почетка (опционо)", + "Import email participants" : "Увези и-мејл учеснике", + "You can import a list of email participants from a CSV file." : "Листу и-мејл учесника можете да увезете из CSV фајла.", + "Poll drafts" : "Нацрти гласања", + "Browse poll drafts" : "Прегледај нацрте гласања", + "Error occurred when locking the conversation" : "Дошло је до грешке приликом закључавања разговора", + "Error occurred when unlocking the conversation" : "Дошло је до грешке приликом откључавања разговора", + "Lock conversation" : "Закључај разговор", + "This will also terminate the ongoing call." : "Ово ће такође да прекине текући позив.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Закључај разговор и спречи све да објављују поруке или започињу позиве", + "Edit" : "Измени", + "More information" : "Још информација", + "Delete" : "Избриши", + "Add new bridged channel to current conversation" : "Додај нови премошћени канал у текући разговор", + "unknown state" : "непознато стање", + "running" : "извршава се", + "not running, check Matterbridge log" : "не извршава се, погледајте Matterbridge дневник", + "not running" : "не извршава се", + "Bridge saved" : "Мост је сачуван", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Са Matterbridge можете да премостите канале са разних система за тренутну размену порука.", + "More info on Matterbridge" : "Више информација о Matterbridge", + "Messaging systems" : "Системи за размену порука", + "Enable bridge" : "Укључи мост", + "Show Matterbridge log" : "Прикажи Matterbridge дневник", + "Log content" : "Садржај дневника", + "Only moderators are allowed to mention @all" : "Само модератори смеју да помену @all", + "All participants are allowed to mention @all" : "Сви учесници смеју да помену @all", + "Participants are now allowed to mention @all." : "Учесници не смеју да помену @all.", + "Mentioning @all has been limited to moderators." : "Помињање @all је ограничено на модераторе.", + "Allow participants to mention @all" : "Дозволи да учесници помену @all", + "Mention permissions" : "Дозволе за помињање", + "Notifications" : "Обавештења", + "Notify about calls in this conversation" : "Обавести о позивима у овом разговору", + "Important conversation" : "Битан разговор", + "\"Do not disturb\" user status is ignored for important conversations" : "Кориснички статус „Не узнемиравај” се игнорише за важне разговоре", + "Sensitive conversation" : "Осетљиви разговор", + "Message preview will be disabled in conversation list and notifications" : "Преглед поруке ће се сакрити у листи разговора и у обавештењима", + "Recording consent is required for calls in this conversation" : "Сагласност за снимање се захтева за позиве у овом разговору", + "Recording consent is not required for calls in this conversation" : "Сагласност за снимање није потребна за позиве у овом разговору", + "Recording consent requirement was updated" : "Ажурирано је подешавање захтева за сагласност снимања", + "Error occurred while updating recording consent" : "Дошло је до грешке приликом ажурирања сагласности за снмање", + "Recording Consent" : "Сагласност за снимање", + "Recording consent cannot be changed once a call or breakout session has started." : "Када се покрене позив или сесија сепареа, пристанак на снимање не може да се измени.", + "Require recording consent before joining call in this conversation" : "Захтевај сагласност за снимање пре приступања позиву у овом разговору", + "Recording consent is required for all calls" : "Сагласност за снимање се захтева за све позиве", + "SIP dial-in is now possible without PIN requirement" : "SIP приступ је сада могућ без уношења PIN", + "SIP dial-in is now enabled" : "Сада је укључен SIP приступ", + "SIP dial-in is now disabled" : "Сада је искључен SIP приступ", + "Error occurred when enabling SIP dial-in" : "Дошло је до грешке приликом укључивања SIP приступа", + "Error occurred when disabling SIP dial-in" : "Дошло је до грешке приликом искључивања SIP приступа", + "Phone and SIP dial-in" : "Телефонски и SIP приступ", + "Enable phone and SIP dial-in" : "Уљкучи телефонски и SIP приступ", + "Allow to dial-in without a PIN" : "Дозволи приступ без PIN", + "Ongoing" : "Траје", + "{dayPrefix} {dateTime}" : "{dayPrefix} од {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n особа је прихватила","%n особа су прихватиле","%n особа је прихватило"], + "_%n person declined_::_%n people declined_" : ["%n особа је одбила","%n особа су одбиле","%n особа је одбило"], + "_and %n other attachment_::_and %n other attachments_" : ["и још %n прилог","и још %n прилога","и још %n прилога"], + "With {displayName}" : "Са {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Прикажи прилог", + "Join" : "Придружи се", + "View conversation" : "Прикажи разговор", + "View event on Calendar" : "Прикажи догађај у Календару", + "Error while creating the conversation" : "Грешка приликом креирања разговора", + "Hello, {displayName}" : "Здраво, {displayName}", + "Start meeting now" : "Започни састанак одмах", + "Give your meeting a title" : "Дајте наслов свом састанку", + "Create and copy link" : "Креирај и копирај линк", + "Create a new conversation" : "Креирај нови разговор", + "Join open conversations" : "Придружи се отвореном разговору", + "Call a phone number" : "Позови телефонски број", + "Scroll backward" : "Скролуј уназад", + "Scroll forward" : "Скролуј унапред", + "Schedule meetings" : "Закажи састанке", + "You don't have any upcoming meetings" : "Немате ниједан предстојећи састанак", + "Open calendar" : "Отвори календар", + "Unread mentions" : "Непрочитана помињања", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Овде ће се појавити поруке у којима сте поменути. Људе можете да поменете тако што откуцате @ испред њиховог имена", + "Upcoming reminders" : "Предстојећи подсетници", + "Message reminders" : "Подсетници о порукама", + "Set a reminder on a message to be notified" : "Поставите подсетник на поруку да би сте били обавештени", + "Start a group conversation" : "Започни групни разговор", + "Create conversation" : "Креирај разговор", + "Enter your name" : "Унесите Ваше име", + "Submit name and join" : "Поднеси име и приступи", + "Do you already have an account?" : "Да ли већ имате налог?", + "Log in" : "Пријава", + "Error while verifying uploaded file" : "Грешка током провере отпремљеног фајла", + "Uploaded file is verified" : "Отпремљени фајл је проверен", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Формат садржаја су вредности раздвојене запетом (CSV):
- Линија заглавља је потребна и мора да се подудара са \"name\",\"email\" или само \"email\"
- Једна ставка по линији (нпр. \"Петар Петровић\",\"pera@primer.tld\")", + "Participants added successfully" : "Учесници су успешно додати", + "Error while adding participants" : "Грешка приликом додавања учесника", + "Import a file" : "Увези фајл", + "Browse" : "Прегледај", + "Verifying uploaded file …" : "Отпремљени фајл се потврђује", + "This might take a moment" : "Ово би могло мало да потраје", + "Send invitations" : "Пошаљи позивнице", + "_%n invalid email_::_%n invalid emails_" : ["%n неисправан и-мејл","%n неисправна и-мејла","%n неисправних и-мејлова"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n и-мејл је већ увезен или је дупликат","%n и-мејла су већ увезени или су дупликати","%n и-мејлова је већ увезено или су дупликати"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n позивница може да се пошаље","%n позивнице могу да се пошаљу","%n позивница може да се пошаље"], + "An error occurred while calling a phone number" : "Дошло је до грешке током позивања телефонског броја", + "Phone number could not be called: {error}" : "Телефонски број не може да се позове: {error}", + "Phone number could not be called" : "Телефонски број не може да се позове", + "Search participants or phone numbers" : "Претражи учеснике или телефонске бројеве", + "Creating the conversation …" : "Разговор се креира", + "Mark as read" : "Означи као прочитано", + "Mark as unread" : "Означи као непрочитано", + "Remove from favorites" : "Уклони из омиљених", + "Add to favorites" : "Додаје у омиљене", + "Unarchive conversation" : "Деархивирај разговор", + "Ignore \"Do not disturb\"" : "Игнориши „Не узнемиравај”", + "You need to promote a new moderator before you can leave the conversation." : "Морате унапредити новог модератора пре него што напустите разговор.", + "Conversation actions" : "Акције разговора", + "Notify about calls" : "Обавести о позивима", + "Hide message text" : "Сакриј текст поруке", + "Pending invitations" : "Позивнице на чекању", + "From {user} at {remoteServer}" : "Од {user} на {remoteServer}", + "Decline invitation" : "Одбиј позивницу", + "Accept invitation" : "Прихвати позивницу", + "No pending invitations" : "Нема позивница на чекању", + "Home" : "Почетна", + "Unread" : "Непрочитано", + "Mentions" : "Помињања", + "Meetings" : "Састанци", + "Alphabetically" : "Абецедно", + "No followed threads" : "Нема низова које пратите", + "No matches found" : "Нема подударања", + "No conversations found" : "Није пронађен ниједан разговор", + "You have no archived conversations." : "Немате ниједан архивирани разговор.", + "Subscribe to an existing thread or start your own." : "Претплатите се не постојећи низ или започните свој.", + "You have no unread mentions." : "Немате помињања која нисте прочитали.", + "You have no unread messages." : "Немате порука која нисте прочитали.", + "An error occurred while performing the search" : "Грешка приликом претраге", + "Conversation list" : "Листа разговора", + "Filter conversations by" : "Филтрирај разговоре по", + "Unread messages" : "Непрочитане поруке", + "Meeting conversations" : "Разговори у састанку", + "Clear filters" : "Уклони филтере", + "New personal note" : "Нова лична белешка", + "Back to conversations" : "Назад на разговоре", + "Archived conversations" : "Архивирани разговори", + "Threads" : "Нити", + "Clear filter" : "Очисти филтер", + "Show more threads" : "Прикажи још нити", + "App settings" : "Подешавања апликације", + "Users" : "Корисници", + "Groups" : "Групе", + "Teams" : "Тимови", + "Federated users" : "Федерисани корисници", + "New private conversation" : "Нови приватни разговор", + "Other sources" : "Остали извори", + "Open conversations" : "Отвори разговор", + "No search results" : "Нема резултата претраге", + "Users, groups and teams" : "Корисници, групе и тимови", + "Users and groups" : "Корисници и групе", + "Users and teams" : "Корисници и тимови", + "Groups and teams" : "Групе и тимови", + "New group conversation" : "Нови групни разговор", + "The meeting will start soon" : "Састанак ће ускоро да почне", + "This meeting is scheduled for {startTime}" : "Овај састанак је заказан за {startTime}", + "You are currently waiting in the lobby" : "Тренутно чекате у лобију", + "Select microphone" : "Изаберите микрофон", + "No microphone available" : "Нема доступног микрофона", + "Select speaker" : "Изаберите говорника", + "No speaker available" : "Није доступан ниједан говорник", + "Select camera" : "Изаберите камеру", + "No camera available" : "Нема доступне камере", + "Select a device" : "Изаберите уређај", + "Playing …" : "Пушта се", + "Test speakers" : "Тест звучника", + "Test" : "Тест", + "Devices" : "Уређаји", + "Backgrounds" : "Позадине", + "No audio" : "Нема звука", + "No camera" : "Без камере", + "Display video as you will see it (mirrored)" : "Видео се приказује онако како га ви видите (у огледалу)", + "Display video as others will see it" : "Видео се приказује онако како виде остали", + "Calls are not supported in your browser" : "Ваш прегледач не подржава позиве", + "Access to microphone is only possible with HTTPS" : "Приступ микрофону је могућ само кроз HTTPS протокол", + "Access to microphone was denied" : "Приступ микрофону је одбијен", + "Error while accessing microphone" : "Грешка приликом приступања микрофону", + "Access to camera is only possible with HTTPS" : "Приступ камери је могућ само кроз HTTPS протокол", + "The call is being recorded." : "Позив се снима.", + "The call might be recorded." : "Овај позив би могао да се снима.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Може се снимати ваш глас, видео са камере и садржај екрана који делите. Пре него што приступите позиву, морате дати своју сагласност.", + "Give consent to the recording of this call" : "Дајте сагласност за снимање овог позива", + "Show more info" : "Прикажи више информација", + "Audio is not available" : "Није доступан аудио", + "Video is not available" : "Није доступан видео", + "Start recording immediately with the call" : "Одмах започни снимање заједно са позивом", + "Notify all participants about this call" : "Обавести све учеснике о овом позиву", + "Apply settings" : "Примени подешавања", + "Select virtual office background" : "Изаберите позадину виртуелне канцеларије", + "Select virtual home background" : "Изаберите позадину виртуелног дома", + "Select virtual abstract background" : "Изаберите апстрактну виртуелну позадину", + "Select virtual beach background" : "Изаберите позадину виртуелне плаже", + "Select virtual park background" : "Изаберите позадину виртуелног парка", + "Select virtual theater background" : "Изаберите позадину виртуелног позоришта", + "Select virtual library background" : "Изаберите позадину виртуелне библиотеке", + "Select virtual space station background" : "Изаберите позадину виртуелне свемирске станице", + "Error while uploading the file" : "Грешка приликом отпремања фајла", + "Select a file" : "Изаберите фајл", + "Invalid path selected" : "Одабрана неисправна путања", + "Select virtual background from file {fileName}" : "Изаберите виртуелну позадину из фајла {fileName}", + "Blur" : "Замућење", + "Upload" : "Отпреми", + "Files" : "Фајлови", + "(editing)" : "(уређивање)", + "(edited)" : "(уређено)", + "The message has expired or has been deleted" : "Рок важења поруке је истекао или је обрисана", + "Cancel quote" : "Откажи цитат", + "24 hours" : "24 сата", + "7 days" : "7 дана", + "Clear reminder – {timeLocale}" : "Обриши подсетник – {timeLocale}", + "Edited by {actor}" : "Уредио је {actor}", + "Message text copied to clipboard" : "Текст поруке је копиран у клипборд", + "Message text could not be copied" : "Текст поруке није могао да се копира", + "Message forwarded to \"Note to self\"" : "Порука је прослеђена у „Белешка самом себи”", + "Error while forwarding message to \"Note to self\"" : "Грешка приликом прослеђивања поруке у „Белешка самом себи”", + "A reminder was successfully removed" : "Подсетник је успешно уклоњен", + "Error occurred when removing a reminder" : "Дошло је до грешке приликом уклањања подсетника", + "A reminder was successfully set at {datetime}" : "Подсетник је успешно постављен на {datetime}", + "Error occurred when creating a reminder" : "Дошло је до грешке током креирања подсетника", + "Add a reaction to this message" : "Додај реакцију на ову поруку", + "Reply" : "Одговори", + "More actions" : "Још акција", + "Set reminder" : "Постави подсетник", + "Reply privately" : "Одговори приватно", + "Edit message" : "Уреди поруку", + "Copy message" : "Копирај поруку", + "Copy message link" : "Копирај линк поруке", + "Go to file" : "Иди на фајл", + "Download file" : "Преузми фајл", + "Go to thread" : "Иди на нит", + "Edit thread details" : "Уреди детаље о низу", + "Forward message" : "Проследи поруку", + "Translate" : "Превођење", + "Set custom reminder" : "Постави произвољни подсетник", + "Close reactions menu" : "Затвори мени реакција", + "React with {emoji}" : "Реагуј са {emoji}", + "React with another emoji" : "Реагуј са другим емођијем", + "Choose a conversation to forward the selected message." : "Изаберите разговор на који треба да се проследи изабрана порука.", + "Error while forwarding message" : "Грешка приликом прослеђивања поруке", + "The message has been forwarded to {selectedConversationName}" : "Порука је прослеђена у {selectedConversationName}", + "Dismiss" : "Уклони", + "Go to conversation" : "Иди на разговор", + "Detect language" : "Откриј језик", + "The message could not be translated" : "Није могла да се преведе порука", + "Translation copied to clipboard" : "Превод је копиран у клипборд", + "Translation could not be copied" : "Превод није могао да се је копира", + "Translate message" : "Преведи поруку", + "Source language to translate from" : "Изворни језик са ког се преводи", + "Translate from" : "Преведи са", + "Target language to translate into" : "Циљни језик на који се преводи", + "Translate to" : "Преведи на", + "Translating" : "Преводи се", + "Copy translated text" : "Копирај преведени текст", + "Send now" : "Пошаљи одмах", + "Message read by everyone who shares their reading status" : "Поруку су прочитали сви који деле свој статус читања", + "Message sent" : "Порука послата", + "Sent without notification" : "Послато без обавештења", + "Deleting message" : "Брисање поруке", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Порука је успешно обрисана, али је бот или Matterbridge тако подешен да је порука већ прослеђена осталим сервисима", + "Message deleted successfully" : "Порука је успешно обрисана", + "Message could not be deleted because it is too old" : "Порука није могла да се обрише јер је сувише стара", + "Only normal chat messages can be deleted" : "Могу да се обришу само обичне чет поруке", + "An error occurred while deleting the message" : "Дошло је до грешке приликом брисања поруке", + "Your browser does not support playing audio files" : "Ваш прегледач не подржава пуштање звучних фајлова", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} у {board}", + "Deck Card" : "Шпил картица", + "Remove {fileName}" : "Уклони {fileName}", + "Open this location in OpenStreetMap" : "Отвори ову локацију у OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n одговор","%n одговора","%n одговора"], + "Sending message" : "Слање поруке", + "Failed to send the message. Click to try again" : "Није успело слање поруке. Кликните да се покуша поново", + "Not enough free space to upload file" : "Нема довољно слободног простора за отпремање фајла", + "You cannot send messages to this conversation at the moment" : "Тренутно не можете да шаљете поруке у овај разговор", + "Could not update the message" : "Није могла да се ажурира порука", + "You voted" : "Гласали сте", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Нацрт гласања • %n опција","Нацрт гласања • %n опција","Нацрт гласања • %n опција"], + "_%n vote_::_%n votes_" : ["%n глас","%n гласа","%n гласова"], + "Edit poll draft" : "Уреди нацрт гласања", + "Delete poll draft" : "Обриши нацрт гласања", + "Open poll" : "Отворено гласање", + "See results" : "Поглдајте резултате", + "Reactions" : "Реакције", + "No permission to post reactions in this conversation" : "Нема дозвола за објављивање реакција у овом разговору", + "and {participant}" : "и {participant}", + "_and %n other participant_::_and %n other participants_" : ["и још %n други учесник","и још %n друга учесника","и још %n других учесника"], + "Show all reactions" : "Прикажи сва реаговања", + "Add more reactions" : "Додај још реакција", + "Show or collapse system messages" : "Прикажи или сажми системске поруке", + "No messages" : "Нема порука", + "All messages have expired or have been deleted." : "Свим порукама је истекао рок важења или су обрисане.", + "Unpin" : "Откачи", + "Cancel search" : "Откажи претрагу", + "Add a phone number" : "Додаје телефонски број", + "Error: A password is required to create the conversation." : "Грешка: потребна је лозинка да би се креирао разговор.", + "All set, the conversation \"{conversationName}\" was created." : "Све је завршено, креиран је разговор „{conversationName}”.", + "Create a new group conversation" : "Креирај нови групни разговор", + "Add participants" : "Додај учеснике", + "Maximum length exceeded ({maxlength} characters)" : "Прекорачена је максимална дужина ({maxlength} карактера)", + "Conversation visibility" : "Видљивост разговора", + "Allow guests to join via link" : "Дозволи да гости приступе путем линка", + "Enter password" : "Унесите лозинку", + "This conversation has been locked" : "Разговор је закључан", + "No permission to post messages in this conversation" : "Нема дозвола за објављивање порука у овај разговор", + "Joining conversation …" : "Приступа се разговору...", + "Write a message without notification" : "Напиши поруку без обавештења", + "Create a thread silently" : "Креирај низ у тишини", + "Create a thread" : "Креирај нит", + "Send message silently" : "Пошаљи поруку у тишини", + "Send message" : "Пошаљи поруку", + "Send without notification" : "Пошаљи без обавештења", + "The participant will not be notified about new messages" : "Учесник неће бити обавештен о новим порукама", + "Participants will not be notified about new messages" : "Учесници неће бити обавештени о новим порукама", + "Thread title is required" : "Потребан је наслов низа", + "Message text is required" : "Потребан је текст поруке", + "The message could not be edited" : "Порука није могла да се уреди", + "File to share" : "Фајл за дељење", + "File upload is not available in this conversation" : "У овај разговор не може да се отпреми фајл", + "Add emoji" : "Додај емођи", + "Adding a mention will only notify users who did not read the message." : "Додавање помињања ће обавестити само кориснике који још увек нису прочитали поруку.", + "Thread title" : "Наслов низа", + "Send later" : "Пошаљи касније", + "Cancel editing" : "Откажи уређивање", + "{user} is out of office and might not respond." : "{user} је ван канцеларије у можда неће одговорити.", + "Absence period: {startDate} - {endDate}" : "Период одсутности: {startDate} – {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Дељење од {nextcloud}", + "Share from Files" : "Подели из Фајлова", + "Share files to the conversation" : "Дели фајлове у разговор", + "Upload from device" : "Отпреми са уређаја", + "Create new poll" : "Направи ново гласање", + "Smart picker" : "Паметни бирач", + "Record voice message" : "Сними гласовну поруку", + "End recording and send" : "Заврши снимање и пошаљи", + "Dismiss recording" : "Одбаци снимак", + "Access to the microphone was denied" : "Приступ микрофону је одбијен", + "Microphone either not available or disabled in settings" : "Микрофон или није доступан, или је искључен у подешавањима", + "Error while recording audio" : "Грешка приликом снимања звука", + "Generating summary of unread messages …" : "Генерише се резиме непрочитаних порука", + "Summary is AI generated and might contain mistakes" : "Резиме је генерисала AI и можда садржи грешке", + "Error occurred during a summary generation" : "Дошло је до грешке током генерисања резимеа", + "New file" : "Нови фајл", + "Blank" : "Празно", + "Error while creating file" : "Грешка приликом креирања фајла", + "Create and share a new file" : "Креирај и подели нови фајл", + "Name of the new file" : "Име новог фајла", + "Create file" : "Креирај фајл", + "Someone is typing …" : "Неко куца...", + "{user1} is typing …" : "{user1} куца…", + "{user1} and {user2} are typing …" : "{user1} и {user2} куцају…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} куцају…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и још %n корисник куцају…","{user1}, {user2}, {user3} и још %n корисника куцају…","{user1}, {user2}, {user3} и још %n корисника куцају…"], + "Add more files" : "Додај још фајлова", + "Send" : "Пошаљи", + "In this conversation {user} can:" : "Корисник {user} у овом разговору може да:", + "Edit default permissions for participants in {conversationName}" : "Уреди подразумеване дозволе за учеснике разговора {conversationName}", + "Start a call" : "Започни позив", + "Skip the lobby" : "Прескочи предсобље", + "Can post messages and reactions" : "Могу да се објаве поруке и реакције", + "Enable the microphone" : "Укључи микрофон", + "Enable the camera" : "Укључи камеру", + "Share the screen" : "Дели екран", + "Update permissions" : "Ажурирај дозволе", + "Updating permissions" : "Ажурирање дозвола", + "No poll drafts" : "Нема ниједног нацрта гласања", + "There is no poll drafts yet saved for this conversation" : "За овај разговор још увек није сачуван ниједан нацрт гласања", + "Create poll in {name}" : "Креирај гласање у {name}", + "Create poll" : "Направи гласање", + "Error while importing poll" : "Грешка током увоза гласања", + "Question" : "Питање", + "Ask a question" : "Постави питање", + "Import draft from file" : "Увези нацрт из фајла", + "Answers" : "Одговори", + "Answer {option}" : "Одговор {option}", + "Delete poll option" : "Обриши опцију гласања", + "Add answer" : "Додај одговор", + "Settings" : "Поставке", + "Anonymous poll" : "Анонимно гласање", + "Multiple answers" : "Вишеструки одговори", + "Save as draft" : "Сачувај као нацрт", + "Export draft to file" : "Извези нацрт из фајла", + "You voted for this option" : "Гласали сте за ову опцију", + "End poll" : "Заврши гласање", + "Change your vote" : "Измените свој глас", + "Results" : "Резултати", + "Voted participants" : "Учесници који су гласали", + "Send a message to \"{roomName}\"" : "Пошаљи поруку у „{roomName}”", + "Hide list of participants" : "Сакриј листу учесника", + "Show list of participants" : "Прикажи листу учесника", + "Assistance requested in {roomName}" : "Затражена је помоћ у соби {roomName}", + "The message was sent to \"{roomName}\"" : "Порука је послата у „{roomName}”", + "Dismiss request for assistance" : "Одбаци захтев за помоћ", + "Send message to room" : "Пошаљи поруку у собу", + "Back to main room" : "Назад на главну собу", + "Back to your room" : "Назад на вашу собу", + "Message all rooms" : "Пошаљи поруку у све собе", + "Start session" : "Започни сесију", + "Start a call before you start a breakout room session" : "Покрените позив пре него што започнете сесију сепареа", + "Stop session" : "Заустави сесију", + "The message was sent to all breakout rooms" : "Порука је послата у све сепарее", + "Send a message to all breakout rooms" : "Пошаљи поруку у све сепарее", + "Breakout rooms are not started" : "Сепареи нису покренути", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Позиви без позадинског механизма високих перформанси могу имати проблеме са везом и да проузрокују велико оптерећење уређаја. {linkstart}Сазнајте више{linkend}", + "Talk setup incomplete" : "Talk подешавање није довршено", + "Disable lobby" : "Искључи предсобље", + "Settings for participant \"{user}\"" : "Подешавања за учесника „{user}”", + "Participant \"{user}\"" : "Учесник „{user}”", + "moderator" : "модератор", + "bot" : "bot", + "guest" : "гост", + "Ringing …" : "Звони", + "Call rejected" : "Позив је одбијен", + "{time} talking …" : "{time} говори …", + "{time} talking time" : "{time} време разговора", + "Raised their hand" : "Подигао је руку", + "Joined with video" : "Приступио са видеом", + "Joined via phone" : "Приступио телефоном", + "Joined with audio" : "Приступио са звуком", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Дужина текста мора бити краћа или једнака од {maxLength} карактера. Дужина вашег текућег текста је {charactersCount} карактера.", + "Remove group and members" : "Уклони групу и чланове", + "Remove team and members" : "Уклони тим и чланове", + "Remove participant" : "Уклони учесника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Да ли заиста желите да уклоните групу „{displayName}” и све њене чланове из овог разговора?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Да ли заиста желите да уклоните тим „{displayName}” и све његове чланове из овог разговора?", + "Do you really want to remove {displayName} from this conversation?" : "Да ли заиста желите да уклоните {displayName} из овог разговора?", + "Notification was sent to {displayName}" : "Обавештење је послато на име {displayName}", + "Could not send notification to {displayName}" : "Није могло да се пошаље обавештење {displayName}", + "Permissions granted to {displayName}" : "Одобрена је дозвола за {displayName}", + "Could not modify permissions for {displayName}" : "Нису могле да се измене дозволе за {displayName}", + "Permissions removed for {displayName}" : "Укинуте су дозволе за {displayName}", + "Permissions set to default for {displayName}" : "Дозволе за {displayName} су постављене на подразумеване вредности", + "Phone number could not be hung up" : "Није успело прекидање везе са бројем телефона", + "Phone number could not be put on hold" : "Број телефона није могао да се постави на чекање", + "Phone number could not be muted" : "Није успело искључивање микрофона за број телефона", + "Phone number could not be unmuted" : "Није успело укључивање микрофона за број телефона", + "DTMF message could not be sent" : "Није могла да се пошаље DTMF порука", + "Phone number copied to clipboard" : "Број телефона је копиран у клипборд", + "Phone number could not be copied" : "Није успело копирање броја телефона", + "in the lobby" : "у предсобљу", + "Dial out phone" : "Окрени број", + "Hang up phone" : "Прекини везу", + "Move back to lobby" : "Премести назад у предсобље", + "Move to conversation" : "Премести у разговор", + "Dial-in PIN" : "PIN за приступ", + "Demote from moderator" : "Скини улогу модератора", + "Promote to moderator" : "Унапреди на модератора", + "Resend invitation" : "Поново пошаљи позивницу", + "Send call notification" : "Пошаљи обавештење о позиву", + "Dial out phone number" : "Окрени телефонски број", + "Resume call for phone number" : "Настави позив за телефонски број", + "Put phone number on hold" : "Стави телефонски број на чекање", + "Unmute phone number" : "Укључи звук за телефонски број", + "Mute phone number" : "Искључи микрофон за телефонски број", + "Copy phone number" : "Копирај телефонски број", + "Reset custom permissions" : "Ресетуј произвољне дозволе", + "Grant all permissions" : "Одобри све дозволе", + "Remove all permissions" : "Уклони све дозволе", + "Also ban from this conversation" : "Такође забрани за овај разговор", + "Internal note (reason to ban)" : "Интерна напомена (разлог забране)", + "Remove" : "Уклони", + "Permissions modified for {displayName}" : "Измењене су дозволе за {displayName}", + "Add users, groups or teams" : "Додај кориснике, групе или тимове", + "Add users or groups" : "Додај кориснике или групе", + "Add users or teams" : "Додај кориснике или тимове", + "Add users" : "Додај кориснике", + "Add groups or teams" : "Додај групе или тимове", + "Add groups" : "Додај групе", + "Add teams" : "Додај тимове", + "Add other sources" : "Додај остале изворе", + "Add emails" : "Додај и-мејлове", + "Integrations" : "Интеграције", + "Add federated users" : "Додај федерисане кориснике", + "Searching …" : "Тражим…", + "Search for more users" : "Претражи још корисника", + "You can search or add participants via name, email, or Federated Cloud ID" : "Учеснике можете да претражујете или додате помоћу имена, и-мејла или ID здруженог облака", + "Search or add participants" : "Претражи или додај учеснике", + "Invitation was sent to {actorId}" : "Позивница је послата на {actorId}", + "An error occurred while adding the participants" : "Дошло је до грешке приликом додавања учесника", + "A new group conversation with selected participant will be created" : "Креираће се нови групни разговор са изабраним учесником", + "Participants" : "Учесници", + "Participants ({count})" : "Учесника ({count})", + "Open chat" : "Отвори ћаскање", + "You have new unread messages in the chat." : "Имате нове непрочитане поруке у чету.", + "You have been mentioned in the chat." : "Поменути сте у чету.", + "Search messages" : "Претражи поруке", + "Chat" : "Ћаскање", + "Details" : "Детаљи", + "Shared items" : "Дељене ставке", + "Search in {name}" : "Тражи у {name}", + "Threads in {name}" : "Нити у {name}", + "{actor} in {conversation}" : "{actor} у {conversation}", + "Search messages …" : "Претражују се поруке", + "Search options" : "Опције претраге", + "From User" : "Од корисника", + "Since" : "Од", + "Until" : "До", + "No results found" : "Нема пронађених резултата", + "Load more results" : "Учитај још резултата", + "Recent threads" : "Скорашње нити", + "Projects" : "Пројекти", + "No shared items" : "Нема дељених ставки", + "Thread notifications" : "Обавештења низова", + "Thread actions" : "Акције над низовима", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Веза ка разговору", + "No open conversations found" : "Није пронађен ниједан отворени разговор", + "Either there are no open conversations or you joined all of them." : "Или нема ниједног отвореног разговора, или учествујете у свим отвореним разговорима.", + "Check spelling or use complete words." : "Проверите правопис или употребите комплетне речи.", + "Search conversations or users" : "Претрага разговора или учесника", + "Select conversation" : "Одаберите разговор", + "Number length is not valid" : "Дужина броја није исправна", + "Region code is not valid" : "Позивни број није исправан", + "Number length is too short" : "Дужина броја је сувише кратка", + "Number length is too long" : "Дужина броја је превише дугачка", + "Number is not valid" : "Број није исправан", + "Phone numbers" : "Бројеви телефона", + "Display name: {name}" : "Име за приказ: {name}", + "Edit display name" : "Уреди име за приказ", + "Display name (required)" : "Име за приказ (обавезно)", + "Save name" : "Сачувај име", + "Error while setting personal setting" : "Грешка приликом постављања личног подешавања", + "Error while saving sounds setting" : "Грешка приликом чувања поставки звукова", + "Play sounds when participants join or leave a call" : "Пусти звукове када учесници приступе позиву или када га напусте", + "Notification settings" : "Поставке обавештења", + "Default language" : "Подразумевани језик", + "Select location for attachments" : "Избор локације за прилоге", + "Error while setting attachment folder" : "Грешка приликом постављања фолдера за прилоге", + "Error while setting read status privacy" : "Грешка приликом постављања приватности статуса читања", + "Error while setting typing status privacy" : "Грешка приликом постављања приватности статуса куцања", + "Error while setting default media state" : "Грешка приликом постављања подразумеваног стања медија", + "Privacy" : "Приватност", + "Attachments folder" : "Фолдер са прилозима", + "Toggle full screen" : "Укљ./Искљ. пун екран", + "Search" : "Претрага", + "Focus the chat input" : "Фокусирање чет уноса", + "Unfocus the chat input to use shortcuts" : "Уклањање фокуса са чет уноса да би се користиле пречице", + "Edit your last message" : "Уредите своју последњу поруку", + "Shortcuts while in a call" : "Пречице током позива", + "Camera on and off" : "Укљ./Искљ. камере", + "Microphone on and off" : "Укљ./Искљ. миикрофона", + "Raise or lower hand" : "Подизање или спуштање руке", + "Push to talk or push to mute" : "Притисните да говорите или притисните да утулите", + "Zoom-in / zoom-out a screen share" : "Увећај / Умањи дељење екрана", + "Mouse wheel" : "Точкић миша", + "Start call silently" : "Започни позив у тишини", + "Start call" : "Почни позив", + "End call" : "Заврши позив", + "This call has just ended" : "Овај позив се управо завршио", + "You will be able to join the call only after a moderator starts it." : "Моћи ћете да приступите позиву само када га модератор покрене.", + "End call for everyone" : "Заврши позив за све", + "Starting the recording" : "Почиње снимање", + "Recording" : "Снимање", + "The call has been running for one hour." : "Позив траје један сат.", + "Cancel recording start" : "Откажи почетак снимања", + "Stop recording" : "Заустави снимање", + "Send a reaction" : "Пошаљи реакцију", + "React with {reaction}" : "Реагуј са {reaction}", + "All tasks done!" : "Завршени су сви задаци!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} од %n задатка","{done} од %n задатка","{done} од %n задатака"], + "Add participants to this call" : "Додај учеснике у овај разговор", + "_%n participant in call_::_%n participants in call_" : ["У позиву је %n учесник","У позиву је %n учесника","У позиву је %n учесника"], + "You are not allowed to enable screensharing" : "Није вам дозвољено да укључите дељење екрана", + "No screensharing" : "Нема дељења екрана", + "Screensharing options" : "Опције дељења екрана", + "Enable screensharing" : "Укључи дељење екрана", + "Bad sent video and screen quality." : "Лош квалитет видеа и екрана који се шаље.", + "Bad sent screen quality." : "Лош квалитет екрана.", + "Bad sent video quality." : "Лош квалитет видеа који се шаље.", + "Bad sent audio, video and screen quality." : "Лош квалитет звука, видеа и екрана који се шаље.", + "Bad sent audio and screen quality." : "Лош квалитет звука, и екрана који се шаље.", + "Bad sent audio and video quality." : "Лош квалитет звука и видеа који се шаље.", + "Bad sent audio quality." : "Лош квалитет звука који се шаље.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео док делите екран.", + "Disable background blur" : "Искључи замућење позадине", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас виде.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите дељење вашег екрана.", + "Disable screenshare" : "Искључи дељење екрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите ваш видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју.", + "Screen sharing is not supported by your browser." : "Ваш веб прегледач не подржава дељење екрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Дељење екрана захтева да се страна учита HTTPS протоколом.", + "Screensharing requires the page to be loaded through HTTPS." : "Дељење екрана захтева да се страна учита преко HTTPS-а.", + "An error occurred while starting screensharing." : "Десила се грешка при покретању дељења екрана.", + "Select virtual background" : "Изаберите виртуелну позадину", + "Show your screen" : "Прикажите екран", + "Stop screensharing" : "Заустави дељење екрана", + "Mute others" : "Утули остале", + "Start recording" : "Почни снимање", + "Set up breakout rooms" : "Постави сепарее", + "Download attendance list" : "Преузми листу присутних", + "Open Calendar" : "Отвори Календар", + "Remove participant {name}" : "Уклони учесника {name}", + "Would you like to delete this conversation?" : "Да ли желите да обришете овај разговор?", + "Are you sure you want to delete this conversation?" : "Да заиста желите да обришете овај разговор?", + "Delete now" : "Обриши одмах", + "Keep" : "Задржи", + "Open dialpad" : "Отвори тастатуру", + "Select a region" : "Одаберите регију", + "Local time: {time}" : "Локално време: {time}", + "Search …" : "Претрага ...", + "Message without mention" : "Порука без помињања", + "Mention myself" : "Помени мене", + "Mention everyone" : "Помени све", + "Select a conversation" : "Изаберите разговор", + "Select a mode" : "Изаберите режим", + "You do not have permissions to access this conversation." : "Немате дозволу да приступите овом разговору.", + "Join a different conversation or start a new one." : "Приступите другом разговору, или започните нови.", + "The conversation does not exist" : "Разговор не постоји", + "Join a conversation or start a new one!" : "Приступите разговору или креирајте нови!", + "Duplicate session" : "Дупликат сесија", + "Creating and joining a conversation with \"{userid}\"" : "Креира се и приступа у разговор са „{userid}”", + "Join a conversation or start a new one" : "Придружи се разговору или започни нови", + "Error while joining the conversation" : "Грешка приликом приступања у разговор", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud корисник", + "User password" : "Корисничка лозинка", + "Talk conversation" : "Talk разговори", + "Skip TLS verification" : "Прескочи TLS потврђивање", + "Matrix server URL" : "URL матрикс сервера", + "User" : "Корисник", + "Matrix channel" : "Matrix канал", + "Mattermost server URL" : "URL Mattermost сервера", + "Mattermost user" : "Mattermost корисник", + "Team name" : "Назив тима", + "Channel name" : "Назив канала", + "Rocket.Chat server URL" : "URL Rocket.Chat сервера", + "User name or email address" : "Корисничко име или и-мејл адреса", + "Rocket.Chat channel" : "Rocket.Chat канал", + "Zulip server URL" : "URL Zulip сервера ", + "Bot user name" : "Bot корисничко име", + "Bot API key" : "Bot API кључ", + "Zulip channel" : "Zulip канал", + "API token" : "API токен", + "Slack channel" : "Slack канал", + "Server ID or name" : "ID сервера или име", + "Channel ID (prefixed with \"ID:\") or name" : "ID канала (са префиксом \"ID:\") или име", + "Channel" : "Канал", + "Login" : "Пријава", + "Chat ID" : "ID чета", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC сервера (нпр. chat.freenode.net:6667)", + "Nickname" : "Надимак", + "Connection password" : "Лозинка везе", + "IRC channel" : "IRC канал", + "Channel password" : "Лозинка канала", + "NickServ nickname" : "NickServ надимак", + "NickServ password" : "NickServ лозинка", + "Use TLS" : "Користи TLS", + "Use SASL" : "Користи SASL", + "Tenant ID" : "ID станара", + "Client ID" : "ID клијента", + "Team ID" : "ID тима", + "Thread ID" : "ID нити", + "XMPP/Jabber server URL" : "URL XMPP/Jabber сервера", + "MUC server URL" : "URL MUC сервера", + "Jabber ID" : "Jabber ID", + "Media" : "Мултимедија", + "Polls" : "Гласања", + "Deck cards" : "Шпил картица", + "Voice messages" : "Гласовне поруке", + "Locations" : "Локације", + "Call recordings" : "Снимци позива", + "Audio" : "Звук", + "Show all media" : "Прикажи све медије", + "Show all files" : "Прикажи све фајлове", + "Show all polls" : "Прикажи сва гласања", + "Show all deck cards" : "Прикажи све шпилове картица", + "Show all voice messages" : "ПРикажи све гласовне поруке", + "Show all locations" : "Прикажи све локације", + "Show all call recordings" : "Прикажи све снимке позива", + "Show all audio" : "Прикажи сав звук", + "Show all other" : "Прикажи све остало", + "Follow conversation settings" : "Прати подешавања разговора", + "Group" : "Група", + "Team" : "Тим", + "You reconnected to the call" : "Поново сте се повезали на позив", + "{actor} reconnected to the call" : "{actor} се поново придружио позиву", + "You added {user0} and {user1}" : "Додали сте кориснике {user0} и {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Додали сте кориснике {user0}, {user1} и још %n учесника","Додали сте кориснике {user0}, {user1} и још %n учесника","Додали сте кориснике {user0}, {user1} и још %n учесника"], + "An administrator added you and {user0}" : "Администратор је додао вас и корисника {user0}", + "{actor} added you and {user0}" : "{actor} је додао вас и корисника {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Администратор је додао вас, корисника {user0} и још %n учесника","Администратор је додао вас, корисника {user0} и још %n учесника","Администратор је додао вас, корисника {user0} и још %n учесника"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} је додао вас, корисника {user0} и још %n учесника","{actor} је додао вас, корисника {user0} и још %n учесника","{actor} је додао вас, корисника {user0} и још %n учесника"], + "An administrator added {user0} and {user1}" : "Администратор је додао кориснике {user0} и {user1}", + "{actor} added {user0} and {user1}" : "{actor} је додао кориснике {user0} и {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Администратор је додао кориснике {user0}, {user1} и још %n учесника","Администратор је додао кориснике {user0}, {user1} и још %n учесника","Администратор је додао кориснике {user0}, {user1} и још %n учесника"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} је додао кориснике {user0}, {user1} и још %n учесника","{actor} је додао кориснике {user0}, {user1} и још %n учесника","{actor} је додао кориснике {user0}, {user1} и још %n учесника"], + "You removed {user0} and {user1}" : "Уклонили сте кориснике {user0} и {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Уклонили сте кориснике {user0}, {user1} и још %n учесника","Уклонили сте кориснике {user0}, {user1} и још %n учесника","Уклонили сте кориснике {user0}, {user1} и још %n учесника"], + "An administrator removed you and {user0}" : "Администратор је уклонио вас и корисника {user0}", + "{actor} removed you and {user0}" : "{actor} је уклонио вас и корисника {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Администратор је уклонио вас, корисника {user0} и још %n учесника","Администратор је уклонио вас, корисника {user0} и још %n учесника","Администратор је уклонио вас, корисника {user0} и још %n учесника"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} је уклонио вас, корисника {user0} и још %n учесника","{actor} је уклонио вас, корисника {user0} и још %n учесника","{actor} је уклонио вас, корисника {user0} и још %n учесника"], + "An administrator removed {user0} and {user1}" : "Администратор је уклонио кориснике {user0} и {user1}", + "{actor} removed {user0} and {user1}" : "{actor} је уклонио кориснике {user0} и {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Администратор је уклонио кориснике {user0}, {user1} и још %n учесника","Администратор је уклонио кориснике {user0}, {user1} и још %n учесника","Администратор је уклонио кориснике {user0}, {user1} и још %n учесника"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} је уклонио кориснике {user0}, {user1} и још %n учесника","{actor} је уклонио кориснике {user0}, {user1} и још %n учесника","{actor} је уклонио кориснике {user0}, {user1} и још %n учесника"], + "You and {user0} joined the call" : "Ви и {user0} сте се придружили позиву", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ви, {user0} и још %n учесник сте се придружили позиву","Ви, {user0} и још %n учесника сте се придружили позиву","Ви, {user0} и још %n учесника сте се придружили позиву"], + "{user0} and {user1} joined the call" : "{user0} и {user1} су се придружили позиву", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} и још %n учесник су се придружили позиву","{user0}, {user1} и још %n учесника су се придружили позиву","{user0}, {user1} и још %n учесника су се придружили позиву"], + "You and {user0} left the call" : "Ви и {user0} сте напустили позив", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ви, {user0} и још %n учесник сте напустили позив","Ви, {user0} и још %n учесника сте напустили позив","Ви, {user0} и још %n учесника сте напустили позив"], + "{user0} and {user1} left the call" : "{user0} и {user1} су напустили позив", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} и још %n учесник су напустили позив","{user0}, {user1} и још %n учесника су напустили позив","{user0}, {user1} и још %n учесника су напустили позив"], + "You promoted {user0} and {user1} to moderators" : "Унапредили сте кориснике {user0} и {user1} у модераторе", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе","Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе","Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе"], + "An administrator promoted you and {user0} to moderators" : "Администратор је унапредио вас и корисника {user0} у модераторе", + "{actor} promoted you and {user0} to moderators" : "{actor} је унапредио вас и корисника {user0} у модераторе", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе","Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе","Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе","{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе","{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе"], + "An administrator promoted {user0} and {user1} to moderators" : "Администратор је унапредио кориснике {user0} и {user1} у модераторе", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} је унапредио кориснике {user0} и {user1} у модераторе", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе"], + "You demoted {user0} and {user1} from moderators" : "Скинули сте улогу модератора за кориснике {user0} и {user1}", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "An administrator demoted you and {user0} from moderators" : "Администратор је скинуо улогу модератора за вас и за корисника {user0}", + "{actor} demoted you and {user0} from moderators" : "{actor} је скинуо улогу модератора за вас и за корисника {user0}", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника"], + "An administrator demoted {user0} and {user1} from moderators" : "Администратор је скинуо улогу модератора за кориснике {user0} и {user1}", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} је скинуо улогу модератора за кориснике {user0} и {user1}", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "You:" : "Ви:", + "You: {lastMessage}" : "Ви: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(ви сте уредили)", + "(edited by a deleted user)" : "(уредио је обрисани корисник)", + "(edited by {moderator})" : "(уредио {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Покушавате да приступите разговору док имате активну сесију у другом прозору или на другом уређају. Nextcloud Talk тренутно то не подржава. Шта желите да урадите?", + "Leave this page" : "Напусти ову страницу", + "Join here" : "Приступи овде", + "Deck card has been posted to {conversation}" : "Шпил карата је објављен у {conversation}", + "An error occurred while posting deck card to conversation" : "Дошло је до грешке током објављивања шпила картица у разговор", + "Post to a conversation" : "Објави у разговор", + "Post to conversation" : "Објави у разговор", + "The recording failed. Please contact your administrator." : "Снимање није успело. Молимо вас да се обратите свом администратору.", + "Location has been posted to {conversation}" : "Локација је објављена у {conversation}", + "An error occurred while posting location to conversation" : "Дошло је до грешке током објављивања локације у разговор", + "Share to a conversation" : "Дели у разговор", + "Share to conversation" : "Дели у разговор", + "In conversation" : "У разговору", + "Search in conversation: {conversation}" : "Претражи у разговору: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Тренутно су ваши захтеви пригушени услед заштите од грубе силе.", + "Error while clearing conversation history" : "Грешка приликом брисања историје разговора", + "Error occurred while allowing guests" : "Дошло је до грешке током дозвољавања гостију", + "Error occurred while disallowing guests" : "Дошло је до грешке током забране гостију", + "Error occurred when restricting the conversation to moderator" : "Дошло је до грешке током ограничавања разговора на модератора", + "Error occurred when opening the conversation to everyone" : "Дошло је до грешке током отварања разговора за све", + "Conversation password has been saved" : "Сачувана је лозинка разговора", + "Conversation password has been removed" : "Уклоњена је лозинка разговора", + "Error occurred while saving conversation password" : "Дошло је до грешке током чувања лозинке разговора", + "Call recording is starting." : "Покреће се снимање позива.", + "Call recording stopped while starting." : "Снимање позива је заустављено током покретања.", + "Call recording stopped. You will be notified once the recording is available." : "Заустављено је снимање позива. Бићете обавештени када снимак буде доступан.", + "Conversation picture set" : "Постављена је слика разговора", + "Conversation picture deleted" : "Обрисана је слика разговора", + "Could not delete the conversation picture" : "Није могла да се обрише слика разговора", + "Could not remove the automatic expiration" : "Не може да се уклони аутоматско време истека", + "Could not post message: {errorMessage}" : "Порука није могла да се објави: {errorMessage}", + "Participant is banned successfully" : "Учесник је успешно забрањен", + "Error while banning the participant" : "Грешка приликом забране учесника", + "An error occurred while fetching the participants" : "Грешка приликом дохватања учесника", + "Could not send invitation to {actorId}" : "Није могла да се пошаље позивница на {actorId}", + "Invitations sent" : "Позивнице су послате", + "Error occurred when sending invitations" : "Дошло је до грешке приликом слања позивница", + "Failed to join the conversation." : "Није успело приступање позиву.", + "An error occurred while creating breakout rooms" : "Дошло је до грешке приликом креирања сепареа", + "An error occurred while re-ordering the attendees" : "Дошло је до грешке приликом мењања редоследа учесника", + "An error occurred while deleting breakout rooms" : "Дошло је до грешке приликом брисања сепареа", + "An error occurred while starting breakout rooms" : "Дошло је до грешке приликом покретања сепареа", + "An error occurred while stopping breakout rooms" : "Дошло је до грешке приликом заустављања сепареа", + "An error occurred while sending a message to the breakout rooms" : "Дошло је до грешке приликом слања поруке у сепарее", + "An error occurred while requesting assistance" : "Дошло је до грешке током захтева за помоћ", + "An error occurred while resetting the request for assistance" : "Дошло је до грешке током уклањања захтева за помоћ", + "An error occurred while joining breakout room" : "Дошло је до грешке приликом приступања сепареу", + "Failed to rename the thread" : "Није успела промена имена низа", + "Error fetching upcoming events" : "Грешка приликом преузимања предстојећих догађаја", + "Error fetching upcoming reminders" : "Грешка приликом преузимања предстојећих подсетника", + "An error occurred while accepting an invitation" : "Дошло је до грешке приликом прихватања позивнице", + "An error occurred while rejecting an invitation" : "Дошло је до грешке приликом одбијања позивнице", + "{guest} (guest)" : "{guest} (гост)", + "Poll draft has been saved" : "Сачуван је нацрт гласања", + "An error occurred while saving the draft" : "Дошло је до грешке током чувања нацрта", + "An error occurred while submitting your vote" : "Дошло је до грешке приликом давања вашег гласа", + "An error occurred while ending the poll" : "Дошло је до грешке током завршавања гласања", + "An error occurred while deleting the poll draft" : "Дошло је до грешке током брисања нацрта гласања", + "Poll \"{name}\" was created by {user}. Click to vote" : "Гласање „{name}” је креирао {user}. Кликните да гласате", + "Failed to add reaction" : "Није успело додавање реакције", + "Failed to remove reaction" : "Није успело уклањање реакције", + "Error while uploading file \"{fileName}\"" : "Грешка приликом отпремања фајла „{fileName}”", + "Not enough free space to upload file \"{fileName}\"" : "Нема довољно слободног простора да се отпреми „{fileName}”", + "You are not allowed to share files" : "Није вам дозвољено да делите фајлове", + "Error while sharing file" : "Грешка приликом дељења фајла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk не подржава у потпуности прегледач који користите. Молимо вас да користите последњу верзију Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "_In %n hour_::_In %n hours_" : ["За %n сат","За %n сата","За %n сати"], + "_%n minute _::_%n minutes_" : ["%n минут","%n минута","%n минута"], + "In {hours} and {minutes}" : "За {hours} и {minutes}", + "_In %n minute_::_In %n minutes_" : ["За %n минут","За %n минута","За %n минута"], + "Later today – {timeLocale}" : "Касније данас – {timeLocale}", + "Tomorrow – {timeLocale}" : "Сутра – {timeLocale}", + "This weekend – {timeLocale}" : "Овог викенда – {timeLocale}", + "Next week – {timeLocale}" : "Наредна недеља – {timeLocale}", + "Message link copied to clipboard" : "Линк на поруку је копиран у клипборд", + "Conversation link copied to clipboard" : "Линк на разговор је копиран у клипборд", + "The link could not be copied" : "Линк није могао да се копира", + "Error while parsing a PROPFIND error" : "Грешка приликом парсирања PROPFIND грешке", + "Sending signaling message has failed" : "Није успело слање поруке сигнализирања", + "Lost connection to signaling server. Trying to reconnect." : "Изгубљена је веза са сервером за сигнализирање. Покушава се поновно успостављање везе.", + "Lost connection to signaling server." : "Изгубљена је веза са сервером за сигнализирање.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Подешени сервер за сигнализирање мора да се ажурира како би био компатибилан са овом верзијом апликације Talk. Молимо вас да се обратите својој администрацији.", + "Please restart the app." : "Молимо вас да поново покренете апликацију.", + "Please reload the page." : "Поново учитајте страницу.", + "Please try to restart the app." : "Молимо вас, покушајте поново да покренете апликацију.", + "Please try to reload the page." : "Молимо вас, покушајте поново да учитате страницу.", + "Do not disturb" : "Не узнемиравај", + "Away" : "Одсутан", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Звучник {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Изгледа да причате док сте утишани. Укључите звук да би Вас други чули", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не може да се успостави веза са барем једним од учесника. Можда је у вашем случају потребан TURN сервер. Молимо вас да замолите свог администратора да постави један пратећи упутства у {linkstart}овој документацији{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Ово траје дуже него што је очекивано. Да ли су дозволе за мултимедију већ дозвољене (или одбијене)? Ако јесу, рестартујте веб читач, пошто аудио/видео не ради", + "Access to microphone & camera is only possible with HTTPS" : "Приступ микрофону & камери је могућ само кроз HTTPS протокол", + "Please move your setup to HTTPS" : "Молимо померите Вашу инсталацију на HTTPS", + "Access to microphone & camera was denied" : "Приступ микрофону & камери одбијен", + "WebRTC is not supported in your browser" : "WebRTC није подржан у Вашем веб читачу", + "Please use a different browser like Firefox or Chrome" : "Користите други веб читач, као што су Фајерфокс или Хром", + "Error while accessing microphone & camera" : "Грешка при приступању микрофону & камери", + "%s Talk on your mobile devices" : "%s „Разговор“ на мобилним уређајима", + "Join conversations at any time, anywhere, on any device." : "Придружите се разговорима било кад, било где, са било ког уређаја.", + "Android app" : "Андроид апликација", + "iOS app" : "iOS апликација", + "__language_name__" : "Српски", + "Webhook Demo" : "Приказ веб куке", + "Call summary (%s)" : "Резиме позива (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Бот резимеа позива објављује поруку прегледа након позива у којој исписује све учеснике и истиче задатке", + "Tasks" : "Задаци", + "Notes" : "Белешке", + "Reports" : "Извештај", + "Decisions" : "Одлуке", + "Agenda" : "Дневни распоред", + "Call summary" : "Резиме позива", + "Call summary - {title}" : "Резиме позива - {title}", + "Talk conversation for event" : "Talk разговор за догађај", + "Client Push is installed, this improves the performance of desktop clients." : "Инсталиран је Client Push, ово унапређује перформансе десктоп клијената.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} није инсталирано, можете имати проблема са перформансама када користите десктоп клијенте.", + "Next meeting" : "Наредни састанак", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Закажите састанак директно из календара. Talk разговор мора да се постави као локација да би се овде приказао", + "Join conversations from remote Nextcloud servers" : "Приступи разговорима са удаљених Nextcloud сервера", + "Your default media state has been saved" : "Сачувана је ваша поставка подразумеваног стања медија", + "Set reminder for later today" : "Поставља подсетник касније дана", + "Set reminder for tomorrow" : "Поставља подсетник за сутра", + "Set reminder for this weekend" : "Поставља подсетник за овај викенд", + "Set reminder for next week" : "Поставља подсетник за наредну недељу", + "Generate summary" : "Генериши резиме", + "Open poll • You voted already" : "Отворено гласање • Већ сте гласали", + "Open poll • Click to vote" : "Отворено гласање • Кликните да гласате", + "Poll • Ended" : "Гласање • Завршено", + "Talk recording from {time} ({conversation})" : "Talk снимак од {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати гласања • %n глас","Резултати гласања • %n гласа","Резултати гласања • %n гласова"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Отворено гласање • %n глас","Отворено гласање • %n гласа","Отворено гласање • %n гласова"], + "Submit vote" : "Постави глас", + "Your privacy setting has been saved" : "Ваша поставка приватности је сачувана", + "Your personal setting has been saved" : "Сачувана су ваша лична подешавања", + "Failed to save sounds setting" : "Није успело чување поставки звукова", + "Sounds setting saved" : "Сачуване су поставке звукова", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk је ажуриран, не можете да започнете или да се придружите позиву.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Приступили сте разговору у другом прозору или на другом уређају. Nextcloud Talk то тренутно не подржава, па је ова сесија затворена.", + "Nextcloud Talk was updated." : "Nextcloud talk је ажуриран.", + "Nextcloud is in maintenance mode." : "Nextcloud је у режиму одржавања.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation је ажуриран." +}, +"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);"); diff --git a/l10n/sr.json b/l10n/sr.json new file mode 100644 index 0000000..e71f91c --- /dev/null +++ b/l10n/sr.json @@ -0,0 +1,2129 @@ +{ "translations": { + "a conversation" : "разговор", + "(Duration %s)" : "(трајање %s)", + "You attended a call with {user1}" : "Били сте на разговору са корисником {user1}", + "_%n guest_::_%n guests_" : ["%n гост","%n госта","%n гостију"], + "You attended a call with {user1} and {user2}" : "Били сте на разговору са корисницима {user1} и {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Били сте на разговору са корисницима {user1}, {user2} и {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Били сте на разговору са корисницима {user1}, {user2}, {user3} и {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Били сте на разговору са корисницима {user1}, {user2}, {user3}, {user4} и {user5}", + "_%n other_::_%n others_" : ["%n остали","%n осталих","%n осталих"], + "{actor} invited you to {call}" : "{actor} Вас је позвао у разговор {call}", + "You were invited to a conversation or had a call" : "Били сте позвани у собу на разговор или сте имали позив", + "Other activities" : "Остале активности", + "Talk" : "Разговор", + "Guest" : "Гост", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Добродошли у Nextcloud Talk!\nУ овом разговору ћете бити обавештавани о новим функционалностима која постану доступна у апликацији Nextcloud Talk.", + "## New in Talk %s" : "## Ново у Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge и Сафари сада могу да се користе да учествујете у аудио и видео позивима", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Један-на-један разговори су сада стални и више не могу случајно да се претворе у групне разговоре. Такође, када један од учесника напусти разговор, разговор се више не брише аутоматски. Разговор се брише са сервера само ако га напусте оба учесника", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Сада можете да обавестите све учесника тако што објавите „@all“ у разговору", + "- With the \"arrow-up\" key you can repost your last message" : "- Са „стрелицом горе“ можете поново објавити последњу поруку", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk сада има команде, пошаљите „/help“ као поруку у ћаскању да видите да ли је администратор подесио нешто", + "- With projects you can create quick links between conversations, files and other items" : "- Уз помоћ пројеката можете да направите брзе везе између разговора, фајлова и других ставки", + "- You can now mention guests in the chat" : "- Сада можете поменути госте у ћаскању", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Разговори сада могу да имају предсобље. То ће омогућити модераторима да приступе чету и позиву како би припремили састанак, док остали учесници и гости морају да чекају", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Сада директно можете да одговорите на поруке пружајући осталим корисницима о више контекста о чему се ради у вашој поруци", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Сада ће претрага разговора и учесника такође да филтрира ваше постојеће разговоре, тако да ће бити лакше да се пронађу претходни разговори", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Када је инсталирана апликација кругови, сада можете да у разговор додате произвољне групе корисника", + "- Check out the new grid and call view" : "- Погледајте нове погледе мреже и позива", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Сада у разговор можете да отпремите или превучете и упустите фајлове директно са вашег уређаја", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Дељени фајлови се сада отварају директно у погледу чета апликацијама за преглед", + "- You can now search for chats and messages in the unified search in the top bar" : "- Сада можете да претражујете четове и поруке у обједињеној претрази у линији на врху", + "- Spice up your messages with emojis from the emoji picker" : "- Зачините своје поруке емођијима из бирача емођија", + "- You can now change your camera and microphone while being in a call" : "- Сада током разговора можете да проемените своју камеру и микрофон", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Дајте описом мало контекста својим разговорима и отворите их тако да пријављени корисници могу да их пронађу и да им се придруже", + "- See a read status and send failed messages again" : "- Погледајте статус читања и поново пошаљите поруке које нису успешно послате", + "- Raise your hand in a call with the R key" : "- Подигните руку у позиву тастером R", + "- Join the same conversation and call from multiple devices" : "- Придружите се истом разговору и позиву са више уређаја", + "- Send voice messages, share your location or contact details" : "- Шаљите гласовне поруке, делите своју локацију или контакт детаље", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Додајте групе у разговор, па ће нови чланови групе аутоматски да се додају као учесници", + "- A preview of your audio and video is shown before joining a call" : "- Преглед вашег звука и видео слике се приказује пре приступања позиву", + "- You can now blur your background in the newly designed call view" : "- Сада можете да замутите своју позадину у свеже дизајнираном погледу позива", + "- Moderators can now assign general and individual permissions to participants" : "- Сада модератори могу да доделе опште и појединачне дозволе учесницима", + "- You can now react to chat messages" : "- Сада можете да реагујете на чет поруке", + "- In the sidebar you can now find an overview of the latest shared items" : "- На бочној траци сада можете пронаћи преглед најновијих дељених ставки", + "- Use a poll to collect the opinions of others or settle on a date" : "- Користите гласање да прикупите мишљења других или да се усагласите у вези са датумом", + "- Configure an expiration time for chat messages" : "- Подесите време истека чет порука", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Започните позиве без обавештавања осталих у великим разговорима. Сада можете да шаљете појединачна обавештења након почетка разговора.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Шаљите чет поруке без обавештавања прималаца у скучају да порука није хитна.", + "- Emojis can now be autocompleted by typing a \":\"" : "- Сада је могуће да се емођији аутоматски довршавају куцањем „:”", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Повежите разне ствари користећи нови паметни бирач куцањем „/”", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модератори сада могу да креирају сепарее (потребан је позадински механизам високих перформанси)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Разговори сада могу да се снимају (потребан је позадински механизам високих перформанси)", + "- Conversations can now have an avatar or emoji as icon" : "- Разговори сада као икону могу да имају аватар или емођи", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Сада су у видео позивима уз замагљену позадину доступне су и виртуелне позадине", + "- Reactions are now available during calls" : "- Сада су током позива доступне реакције", + "- Typing indicators show which users are currently typing a message" : "- Индикатори куцања показују који корисници тренутно куцају поруку", + "- Groups can now be mentioned in chats" : "- Сада у четовима могу да се помену групе", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Снимци позива се аутоматски транскрибују ако је регистрована апликација пружаоца услуге транскрибовања", + "- Chat messages can be translated if a translation provider app is registered" : "- Чет поруке могу да се преведу ако је регистрована апликација пружаоца услуге превода", + "- **Markdown** can now be used in _chat_ messages" : "- Сада у _чет_ порукама може да се користи **Markdown**", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- За имплементирање ботова су доступне веб куке. За више информација, погледајте документацију https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Поставите подсетник на чет поруку који вас касније подсећа на њу", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Употреба **Белешка за себе** разговора за узимање белешки и дељење информација између ваших уређаја", + "- Captions allow to send a message with a file at the same time" : "- Наслови омогућавају слање поруке уз фајл у исто време", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Видео говорника се сада види док се дели екран и реакције у позиву су анимиране", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Пријављени аутори и модератори сада у року од 6 сати могу да уређују поруке", + "- Unsent message drafts are now saved in your browser" : "- Нацрти непослатих порука се сада чувају у вашем интернет прегледачу", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текст четовање са осталим Talk серверима сада може да се врши на федерисани начин", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модератори сада могу да забране налоге и госте и да их тако спрече да поново приступе разговору", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Сада се у разговорима приказују предстојећи позови из догађаја повезаних календара и замене ван-канцеларије", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Позиви сада могу да се обаве на федерисани начин са осталим Talk серверима (потребан је позадински механизам високих перформанси)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Уводи се Nextcloud Talk десктоп клијент за Windows, macOS и Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Резиме снимака разговора и непрочитаних порука у ћаскањима са Nextcloud Асистентом", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Побољшани састанци са препознавањем гостију који су позвани преко и-мејл адресе, увоз листи учесника, нацрти за гласања и преузимање листи учесника позива", + "- Archive conversations to stay focused" : "- Архивирајте разговоре и останите фокусирани", + "- Schedule a meeting into your calendar from within a conversation" : "- Закажите састанак у свој календар директно из разговора", + "- Search for messages of the current conversation directly in the right sidebar" : "- Претражујте поруке текућег разговора директно у десној бочној траци", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Једним погледом видите још разговора помоћу нове збијене листе (укључите у Talk подешавањима)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Разговори састанка сада синхронизују наслов и опис из календара и скривени су од филтера претраге све док нису близу почетка", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Означите разговоре као осетљиве у подешавањима обавештења, тако да се у листи разговора и обавештењима сакрије садржај поруке", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Ако желите да током „Не узнемиравај” статуса примате брза обавештења, означите разговоре као важне", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Додајте остале учеснике у разговор један-на-један и тако у ходу креирајте групни позив", + "- Use threads to keep your chat and discussions organized" : "- Користите низове да ваши четови и дискусије буду организовани", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Сада је током позива доступна транскрипција уживо (потребна је live-transcription ExApp и позадински механизам високих перформанси)", + "_All %n participant_::_All %n participants_" : ["%n учесник","%n учесника","Свих %n учесника"], + "Talk updates ✅" : "Ажурирања Разговор апликације ✅", + "Reaction deleted by author" : "Аутор је обрисао реакцију", + "{actor} created the conversation" : "{actor} је креирао разговор", + "You created the conversation" : "Направили сте разговор", + "System created the conversation" : "Систем је креирао разговор", + "An administrator created the conversation" : "Администратор је креирао разговор", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} је преименовао разговор са „%1$s“ на „%2$s“", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Преименовали сте разговор са „%1$s“ на „%2$s“", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Администратор је променио назив разговора са „%1$s” на „%2$s”", + "{actor} set the description" : "{actor} је поставио опис", + "You set the description" : "Поставили сте опис", + "An administrator set the description" : "Администратор је поставио опис", + "{actor} removed the description" : "{actor} је уклонио опис", + "You removed the description" : "Уклонили сте опис", + "An administrator removed the description" : "Администратор је уклонио опис", + "You started a silent call" : "Започели сте утишани позив", + "Outgoing silent call" : "Одлазни утишани позив", + "{actor} started a silent call" : "{actor} је започео утишани позив", + "Incoming silent call" : "Долазни утишани позив", + "You started a call" : "Ви сте започели позив", + "Outgoing call" : "Одлазни позив", + "{actor} started a call" : "{actor} је започео/ла позив", + "Incoming call" : "Долазни позив", + "{actor} joined the call" : "{actor} се придружио позиву", + "You joined the call" : "Придружили сте се позиву", + "{actor} left the call" : "{actor} је напустио позив", + "You left the call" : "Напустили сте позив", + "{actor} unlocked the conversation" : "{actor} је откључао разговор", + "You unlocked the conversation" : "Откључали сте разговор", + "An administrator unlocked the conversation" : "Администратор је откључао разговор", + "{actor} locked the conversation" : "{actor} је закључао разговор", + "You locked the conversation" : "Закључали сте разговор", + "An administrator locked the conversation" : "Администратор је закључао разговор", + "{actor} limited the conversation to the current participants" : "{actor} је ограничио разговор на текуће учеснике", + "You limited the conversation to the current participants" : "Ограничили сте разговор на текуће учеснике", + "An administrator limited the conversation to the current participants" : "Администратор је ограничио разговор на текуће учеснике", + "{actor} opened the conversation to registered users" : "{actor} је отворио разговор свим регистрованим корисницима", + "You opened the conversation to registered users" : "Отворили сте разговор свим регистрованим корисницима", + "An administrator opened the conversation to registered users" : "Администратор је отворио разговор свим регистрованим корисницима", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} је отворио разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "You opened the conversation to registered users and users created with the Guests app" : "Отворили сте разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Администратор је отворио разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "The conversation is now open to everyone" : "Овај разговор је сада отворен свима", + "{actor} opened the conversation to everyone" : "{actor} је отворио разговор свима", + "You opened the conversation to everyone" : "Ви сте отворили разговор свима", + "{actor} restricted the conversation to moderators" : "{actor} је ограничио разговор на модераторе", + "You restricted the conversation to moderators" : "Ви сте ограничили разговор на модераторе", + "{actor} started breakout rooms" : "{actor} је покренуо сепарее", + "You started breakout rooms" : "Покренули сте сепарее", + "{actor} stopped breakout rooms" : "{actor} је зауставио сепарее", + "You stopped breakout rooms" : "Зауставили сте сепарее", + "{actor} allowed guests" : "{actor} је дозволио госте", + "You allowed guests" : "Ви сте дозволили госте", + "An administrator allowed guests" : "Администратор је дозволио госте", + "{actor} disallowed guests" : "{actor} је забранио госте", + "You disallowed guests" : "Ви сте забранили госте", + "An administrator disallowed guests" : "Администратор је забранио госте", + "{actor} set a password" : "{actor} је поставио лозинку", + "You set a password" : "Ви сте поставили лозинку", + "An administrator set a password" : "Администратор је поставио лозинку", + "{actor} removed the password" : "{actor} је уклонио лозинку", + "You removed the password" : "Ви сте уклонили лозинку", + "An administrator removed the password" : "Администратор је уклонио лозинку", + "{actor} added {user}" : "{actor} је додао корисника {user}", + "You joined the conversation" : "Придружили сте се разговору", + "{actor} joined the conversation" : "{actor} се придружио разговору", + "You added {user}" : "Ви сте додали корисника {user}", + "{actor} added you" : "{actor} Вас је додао", + "An administrator added you" : "Администратор вас је додао", + "An administrator added {user}" : "Администратор је додао корисника {user}", + "You left the conversation" : "Напустили сте разговор", + "{actor} left the conversation" : "{actor} је напустио разговор", + "{actor} removed {user}" : "{actor} је уклонио корисника {user}", + "You removed {user}" : "Ви сте уклонили корисника {user}", + "{actor} removed you" : "{actor} Вас је уклонио", + "An administrator removed you" : "Администратор вас је уклонио", + "An administrator removed {user}" : "Администратор је уклонио корисника {user}", + "{actor} invited {federated_user}" : "{actor} је позвао корисника {federated_user}", + "You invited {federated_user}" : "Позвали сте корисника {federated_user}", + "You accepted the invitation" : "Прихватили сте позивницу", + "{actor} invited you" : "{actor} вас је позвао", + "An administrator invited you" : "Администратор вас је позвао", + "An administrator invited {federated_user}" : "Администратор је позвао корисника {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} је прихватио позив", + "{actor} removed {federated_user}" : "{actor} је уклонио корисника {federated_user}", + "You removed {federated_user}" : "Уклонили сте корисника {federated_user}", + "You declined the invitation" : "Одбили сте позивницу", + "An administrator removed {federated_user}" : "Администратор је уклонио корисника {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} је одбио позив", + "{actor} added group {group}" : "{actor} је додао групу {group}", + "You added group {group}" : "Додали сте групу {group}", + "An administrator added group {group}" : "Администратор је додао групу {group}", + "{actor} removed group {group}" : "{actor} је уклонио групу {group}", + "You removed group {group}" : "Уклонили сте групу {group}", + "An administrator removed group {group}" : "Администратор је уклонио групу {group}", + "{actor} added team {circle}" : "{actor} је додао тим {circle}", + "You added team {circle}" : "Додали сте тим {circle}", + "An administrator added team {circle}" : "Администратор је додао тим {circle}", + "{actor} removed team {circle}" : "{actor} је уклонио тим {circle}", + "You removed team {circle}" : "Уклонили сте тим {circle}", + "An administrator removed team {circle}" : "Администратор је уклонио тим {circle}", + "{actor} added {phone}" : "{actor} је додао {phone}", + "You added {phone}" : "Додали сте {phone}", + "An administrator added {phone}" : "Администратор је додао {phone}", + "{actor} removed {phone}" : "{actor} је уклонио {phone}", + "You removed {phone}" : "Уклонили сте {phone}", + "An administrator removed {phone}" : "Администратор је уклонио {phone}", + "{actor} promoted {user} to moderator" : "{actor} је унапредио корисника {user} у модератора", + "You promoted {user} to moderator" : "Унапредили сте корисника {user} у модератора", + "{actor} promoted you to moderator" : "{actor} Вас је унапредио у модератора", + "An administrator promoted you to moderator" : "Администратор вас је унапредио у модератора", + "An administrator promoted {user} to moderator" : "Администратор је унапредио корисника {user} у модератора", + "{actor} demoted {user} from moderator" : "{actor} је скинуо улогу модератора кориснику {user}", + "You demoted {user} from moderator" : "Скинули сте улогу модератора кориснику {user}", + "{actor} demoted you from moderator" : "{actor} Вам је скинуо улогу модератора", + "An administrator demoted you from moderator" : "Администратор вам је скинуо улогу модератора", + "An administrator demoted {user} from moderator" : "Администратор је скинуо улогу модератора кориснику {user}", + "{actor} shared a file which is no longer available" : "{actor} је поделио фајл који више није доступан", + "You shared a file which is no longer available" : "Поделили сте фајл који више није доступан", + "File shares are currently not supported in federated conversations" : "Дељења фајлова се тренутно не подржавају у федерисаним разговорима", + "The shared location is malformed" : "Дељена локација није исправно формирана", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} је подесио Matterbridge да синхронизује овај чет са осталим четовима", + "You set up Matterbridge to synchronize this conversation with other chats" : "Подесили сте Matterbridge да синхронизује овај чет са осталим четовима", + "{actor} created thread {title}" : "{actor} је креирао низ {title}", + "You created thread {title}" : "Креирали сте низ {title}", + "{actor} renamed thread {title}" : "{actor} је променио име низа {title}", + "You renamed thread {title}" : "Променили сте име низа {title}", + "{actor} updated the Matterbridge configuration" : "{actor} је ажурирао Matterbridge конфигурацију", + "You updated the Matterbridge configuration" : "Ажурирали сте Matterbridge конфигурацију", + "{actor} removed the Matterbridge configuration" : "{actor} је уклонио Matterbridge конфигурацију", + "You removed the Matterbridge configuration" : "Уклонили сте Matterbridge конфигурацију", + "{actor} started Matterbridge" : "{actor} је покренуо Matterbridge", + "You started Matterbridge" : "Покренули сте Matterbridge", + "{actor} stopped Matterbridge" : "{actor} је зауставио Matterbridge", + "You stopped Matterbridge" : "Зауставили сте Matterbridge", + "{actor} deleted a message" : "{actor} је обрисао поруку", + "You deleted a message" : "Обрисали сте поруку", + "{actor} edited a message" : "{actor} је уредио поруку", + "You edited a message" : "Уредили сте поруку", + "{actor} pinned a message" : "{actor} је закачио поруку", + "You pinned a message" : "Закачили сте поруку", + "{actor} unpinned a message" : "{actor} је откачио поруку", + "Message was automatically unpinned" : "Порука је аутоматски откачена", + "You unpinned a message" : "Откачили сте поруку", + "{actor} deleted a reaction" : "{actor} је обрисао реакцију", + "You deleted a reaction" : "Обрисали сте реакцију", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Подесили сте да поруке истичу за %n недељу","Подесили сте да поруке истичу за %n недеље","Подесили сте да поруке истичу за %n недеља"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Подесили сте да поруке истичу за %n дан","Подесили сте да поруке истичу за %n дана","Подесили сте да поруке истичу за %n дана"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Подесили сте да поруке истичу за %n сат","Подесили сте да поруке истичу за %n сата","Подесили сте да поруке истичу за %n сати"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Подесили сте да поруке истичу за %n минут","Подесили сте да поруке истичу за %n минута","Подесили сте да поруке истичу за %n минута"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} је подесио да поруке истичу за %n недељу","{actor} је подесио да поруке истичу за %n недеље","{actor} је подесио да поруке истичу за %n недеља"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} је подесио да поруке истичу за %n дан","{actor} је подесио да поруке истичу за %n дана","{actor} је подесио да поруке истичу за %n дана"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} је подесио да поруке истичу за %n сат","{actor} је подесио да поруке истичу за %n сата","{actor} је подесио да поруке истичу за %n сати"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} је подесио да поруке истичу за %n минут","{actor} је подесио да поруке истичу за %n минута","{actor} је подесио да поруке истичу за %n минута"], + "{actor} disabled message expiration" : "{actor} је искључио рок важења порука", + "You disabled message expiration" : "Искључили сте рок важења порука", + "{actor} cleared the history of the conversation" : "{actor} је обрисао историју разговора", + "You cleared the history of the conversation" : "Обрисали сте историју разговора", + "{actor} set the conversation picture" : "{actor} је поставио слику разговора", + "You set the conversation picture" : "Поставили сте слику разговора", + "{actor} removed the conversation picture" : "{actor} је уклонио слику разговора", + "You removed the conversation picture" : "Уклонили сте слику разговора", + "{actor} ended the poll {poll}" : "{actor} је затворио гласање {poll}", + "You ended the poll {poll}" : "Затворили сте гласање {poll}", + "{actor} started the video recording" : "{actor} је започео видео снимање", + "You started the video recording" : "Започели сте видео снимање", + "{actor} stopped the video recording" : "{actor} је зауставио видео снимање", + "You stopped the video recording" : "Зауставили сте видео снимање", + "{actor} started the audio recording" : "{actor} је започео снимање звука", + "You started the audio recording" : "Започели сте снимање звука", + "{actor} stopped the audio recording" : "{actor} је зауставио снимање звука", + "You stopped the audio recording" : "Зауставили сте снимање звука", + "The recording failed" : "Снимање није успело", + "Someone voted on the poll {poll}" : "Неко је гласао у гласању {poll}", + "Message deleted by author" : "Аутор је обрисао поруку", + "Message deleted by {actor}" : "{actor} је обрисао поруку", + "Message deleted by you" : "Обрисали сте поруку", + "Deleted user" : "Обрисани корисник", + "Unknown number" : "Непознати број", + "Administration" : "Администрација", + "System" : "Систем", + "%s (guest)" : "%s (гост)", + "Missed call" : "Пропуштени позив", + "Unanswered call" : "Пропуштени позив", + "Call ended (Duration {duration})" : "Позив је завршен (Трајање {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Позив се завршио јер је достигнуто максимално трајање позива (Трајање {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} је завршио позив (Трајање {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Завршен је позив са %n гостом јер је достигнуто максимално трајање позива (Трајање {duration})","Завршен је позив са %n госта јер је достигнуто максимално трајање позива (Трајање {duration})","Завршен је позив са %n гостију јер је достигнуто максимално трајање позива (Трајање {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Завршен је позив са %n гостом (трајање {duration})","Завршен је позив са %n госта (трајање {duration})","Завршен је позив са %n гостију (трајање {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} је завршио позив са %n гостом (Трајање {duration})","{actor} је завршио позив са %n госта (Трајање {duration})","{actor} је завршио позив са %n гостију (Трајање {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршен је позив са корисником {user1} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1} ended (Duration {duration})" : "Завршене је позив са корисником {user1} (Трајање {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} је завршио позив са корисником {user1} (Трајање {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1} и {user2} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Завршене је позив са корисницима {user1} и {user2} (трајање {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1} и {user2} (Трајање {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2} и {user3} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2} и {user3} (трајање {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2} и {user3} (Трајање {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2}, {user3} и {user4} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2}, {user3} и {user4} (трајање {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2}, {user3} и {user4} (Трајање {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Завршене је позив са корисницима {user1}, {user2}, {user3}, {user4} и {user5} јер је достигнуто максимално трајање позива (Трајање {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Завршен је позив са корисницима {user1}, {user2} {user3}, {user4} и {user5} (трајање {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} је завршио позив са корисницима {user1}, {user2}, {user3}, {user4} и {user5} (Трајање {duration})", + "Message of {user} in {conversation}" : "Порука од {user} у {conversation}", + "Message of {user}" : "Порука од {user}", + "Message of a deleted user in {conversation}" : "Порука од обрисаног корисника у {conversation}", + "Talk conversations" : "Talk разговори", + "Talk to %s" : "Причај са %s", + "An error occurred. Please contact your administrator." : "Дошло је до грешке. Молимо вас да се обратите свом администратору.", + "Storage quota exceeded" : "Прекорачена је квота за складиште", + "File not found" : "Фајл није нађен", + "File is not shared, or shared but not with the user" : "Фајл није дељен, или је дељен али не са корисником", + "No account available to delete." : "Нема налога који треба да се обрише.", + "Poll" : "Гласање", + "Password needs to be set" : "Потребно је да се постави лозинка", + "Uploading the file failed" : "Није успело отпремање фајла", + "No image file provided" : "Није понуђен фајл слике", + "File is too big" : "Фајл је превелики", + "Invalid file provided" : "Дати фајл је неисправан", + "Invalid image" : "Неисправна слика", + "Unknown filetype" : "Непознат тип фајла", + "Talk mentions" : "Talk спомињања", + "More conversations" : "Још разговора", + "Say hi to your friends and colleagues!" : "Поздравите Ваше пријатеље и колеге!", + "No unread mentions" : "Нема непрочитаних помињања", + "Call in progress" : "Позив је у току", + "You were mentioned" : "Поменути сте", + "Write to conversation" : "Пиши у разговор", + "Writes event information into a conversation of your choice" : "Пише информације о догађају у разговор који изаберете", + "Missing email field in header line" : "У линији заглавља недостаје поље и-мејла", + "Following lines are invalid: %s" : "Нису исправне следеће линије: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s вас је позвао у разговор „%2$s”.", + "You were invited to conversation \"%s\"." : "Позвани сте у разговор „%s”.", + "Conversation invitation" : "Позив за разговор", + "Scheduled time" : "Заказано време", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Такође можете да позовете телефоном користећи следеће детаље", + "Dial-in information" : "Информације за позив", + "Meeting ID" : "ID састанка", + "Your PIN" : "Ваш PIN", + "Click the button below to join the lobby now." : "Кликните на дугме испод да уђете у предсобље.", + "Click the link below to join the lobby now." : "Кликните на линк испод да уђете у предсобље.", + "Join lobby for \"%s\"" : "Уђите у предсобље за „%s”.", + "Click the button below to join the conversation now." : "Кликните на дугме испод да уђете у разговор.", + "Click the link below to join the conversation now." : "Кликните на линк испод да уђете у разговор.", + "Join \"%s\"" : "Придружи се разговору „%s”", + "Meeting" : "Састанак", + "Password request: %s" : "Захтев за лозинком: %s", + "Private conversation" : "Приватни разговор", + "Deleted user (%s)" : "Обрисани корисник (%s)", + "Failed to upload call recording" : "Није успело отпремање снимка позива", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Сервер за снимање није успео да опреми снимак позива {call}. Молимо вас да се обратите администрацији.", + "Share to chat" : "Дели у чет", + "Dismiss notification" : "Уклони обавештење", + "Call recording now available" : "Сада је доступно снимање позива", + "The recording for the call in {call} was uploaded to {file}." : "Снимак позива {call} је отпремљен у {file}.", + "Transcript now available" : "Сада је доступан транскрипт", + "The transcript for the call in {call} was uploaded to {file}." : "Транскрипт позива {call} је отпремљен у {file}.", + "Failed to transcript call recording" : "Није успело креирање транскрипта снимка позива", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер није успео да креира транскрипт снимка позива {file} за позив {call}. Молимо вас да се обратите администрацији.", + "Call summary now available" : "Сада је доступан резиме позива", + "The summary for the call in {call} was uploaded to {file}." : "Резиме за позив у {call} је отпремљен у {file}.", + "Failed to summarize call recording" : "Није успело резимирање снимка разговора", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер није успео да резимира снимак позива {file} за позив {call}. Молимо вас да се обратите администрацији.", + "{user1} invited you to join {roomName} on {remoteServer}" : "Позвао вас је {user1} да се придружите {roomName} на {remoteServer}", + "Accept" : "Прихвати", + "Decline" : "Одбиј", + "{user1} invited you to a federated conversation" : "{user1} вас је позвао у здружени разговор", + "Someone reacted" : "Неко је реаговао", + "New message" : "Нова порука", + "Reminder" : "Подсетник", + "Someone mentioned you" : "Неко вас је поменуо", + "Notification" : "Обавештење", + "Someone reacted in a private conversation" : "Неко је реаговао у приватном разговору", + "You received a message in a private conversation" : "Примили сте поруку у приватном разговору", + "Reminder in a private conversation" : "Подсетник у приватном разговору", + "Someone mentioned you in a private conversation" : "Неко вас је поменуо у приватном разговору", + "Notification in a private conversation" : "Обавештење у приватном разговору", + "Reminder: You in {call}" : "Подсетник: Ви у {call}", + "Reminder: {user} in {call}" : "Подсетник: {user} у {call}", + "Reminder: Deleted user in {call}" : "Подсетник: Обрисани корисник у {call}", + "Reminder: {guest} (guest) in {call}" : "Подсетник: {guest} (гост) у {call}", + "Reminder: Guest in {call}" : "Подсетник: Гост у {call}", + "{user} reacted with {reaction}" : "{user} је реаговао са {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} је у {call} реаговао са {reaction}", + "Deleted user reacted with {reaction} in {call}" : "Обрисано је корисник је у {call} реаговао са {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (гост) је {call} реаговао са {reaction}", + "Guest reacted with {reaction} in {call}" : "Гост је {call} реаговао са {reaction}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Обрисани корисник у {call}", + "{guest} (guest) in {call}" : "{guest} (гост) у {call}", + "Guest in {call}" : "Гост у {call}", + "{user} sent you a private message" : "{user} Вам је послао приватну поруку", + "{user} sent a message in conversation {call}" : "{user} Вам је послао поруку у разговору: {call}", + "A deleted user sent a message in conversation {call}" : "Обрисани корисник је послао поруку у разговору {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (гост) је послао поруку у разговору {call}", + "A guest sent a message in conversation {call}" : "Гост је послао поруку у разговору {call}", + "{user} replied to your private message" : "{user} је одговорио на Ваше приватне поруке", + "{user} replied to your message in conversation {call}" : "{user} је одговорио на Ваше поруке у разговору {call}", + "A deleted user replied to your message in conversation {call}" : "Обрисани корисник је одговорио на Вашу поруку у разговору {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (гост) је одговорио на Вашу поруку у разговору {call}", + "A guest replied to your message in conversation {call}" : "Гост је одговорио на Вашу поруку у разговору {call}", + "Reminder: You in private conversation {call}" : "Подсетник: Ви у приватном разговору {call}", + "Reminder: A deleted user in private conversation {call}" : "Подсетник: Обрисани корисник у приватном разговору {call}", + "Reminder: {user} in private conversation" : "Подсетник: {user} у приватном разговору", + "Reminder: You in conversation {call}" : "Подсетник: Ви у разговору {call}", + "Reminder: {user} in conversation {call}" : "Подсетник: {user} у разговору {call}", + "Reminder: A deleted user in conversation {call}" : "Подсетник: Обрисани корисник у разговору {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Подсетник: {guest} (гост) у разговору {call}", + "Reminder: A guest in conversation {call}" : "Подсетник: Гост у разговору {call}", + "{user} reacted with {reaction} to your private message" : "{user} је реаговао са {reaction} на вашу приватну поруку", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} је реаговао са {reaction} на вашу поруку у разговору {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Обрисани корисник је реаговао са {reaction} на вашу поруку у разговору {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (гост) је реаговао са {reaction} на вашу поруку у разговору {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гост је реаговао са {reaction} на вашу поруку у разговору {call}", + "{user} mentioned you in a private conversation" : "{user} Вас је споменуо/ла у приватном разговору", + "{user} mentioned group {group} in conversation {call}" : "{user} је поменуо групу {group} у разговору {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} је поменуо тим {team} у разговору {call}", + "{user} mentioned everyone in conversation {call}" : "{user} је поменуо све у разговору {call}", + "{user} mentioned you in conversation {call}" : "{user} Вас је споменуо/ла у разговору: {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Обрисани корисник је поменуо групу {group} у разговору {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Обрисани корисник је поменуо тим {team} у разговору {call}", + "A deleted user mentioned everyone in conversation {call}" : "Обрисани корисник је поменуо све у разговору {call}", + "A deleted user mentioned you in conversation {call}" : "Обрисани корисник Вас је споменуо/ла у разговору: {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гост) је поменуо групу {group} у разговору {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гост) је поменуо тим {team} у разговору {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гост) је поменуо све у разговору {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гост) Вас је поменуо у разговору {call}", + "A guest mentioned group {group} in conversation {call}" : "Гост је поменуо групу {group} у разговору {call}", + "A guest mentioned team {team} in conversation {call}" : "Гост је поменуо тим {team} у разговору {call}", + "A guest mentioned everyone in conversation {call}" : "Гост је поменуо све у разговору {call}", + "A guest mentioned you in conversation {call}" : "Гост Вас је споменуо у разговору: {call}", + "View message" : "Прикажи поруку", + "Dismiss reminder" : "Одбаци подсетник", + "View chat" : "Види ћаскање", + "{user} invited you to a group conversation: {call}" : "{user} Вас је позвао/ла на групни разговор: {call}", + "Join call" : "Придружи се разговору", + "Answer call" : "Одговори на позив", + "{user} would like to talk with you" : "{user} жели да прича са вама", + "Call back" : "Узврати позив", + "You missed a call from {user}" : "Пропустили сте позив од корисника {user}", + "Accept call" : "Прихвати позив", + "Incoming phone call from {call}" : "Долазни телефонски позив од {call}", + "You missed a phone call from {call}" : "Пропустили сте телефонски позив од {call}", + "A group call has started in {call}" : "Групни разговор је започет у {call}", + "You missed a group call in {call}" : "Пропустили сте групни позив у разговору {call}", + "{email} is requesting the password to access {file}" : "{email} је затражио лозинку да приступи фајлу {file}", + "{email} tried to request the password to access {file}" : "{email} је покушао да затражи лозинку за приступ фајлу {file}", + "Someone is requesting the password to access {file}" : "Неко је затражио лозинку да приступи фајлу {file}", + "Someone tried to request the password to access {file}" : "Неко је покушао да затражи лозинку за приступ фајлу {file}", + "Open settings" : "Отвори поставке", + "Hosted signaling server added" : "Додат је хостовани сервер за сигнализацију", + "The hosted signaling server is now configured and will be used." : "Хостовани сервер за синализирање је сада подешен и користиће се.", + "Hosted signaling server removed" : "Уклоњен је хостовани сервер за сигнализацију", + "The hosted signaling server was removed and will not be used anymore." : "Хостовани сервер за синализирање је уклоњен и више се неће користити.", + "Hosted signaling server changed" : "Промењен је хостовани сервер за сигнализацију", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Налог хостованог сервера за сигнализирање је променио статус са „{oldstatus}” на „{newstatus}”.", + "pending" : "на чекању", + "active" : "активна", + "expired" : "истекла", + "blocked" : "блокирана", + "error" : "грешка", + "The certificate of {host} expires in {days} days" : "Важење сертификата за {host} истиче за {days} дана", + "The certificate of {host} expired" : "Важење сертификата за {host} истекло", + "Contact via Talk" : "Контактирај преко Talk", + "Open Talk" : "Отвори Talk", + "Default" : "Подразумевано", + "Presentation" : "Презентација", + "Conversations" : "Разговори", + "Messages in current conversation" : "Поруке у текућем разговору", + "{user}" : "{user}", + "Messages" : "Поруке", + "{user} in {conversation}" : "{user} у {conversation}", + "Messages in other conversations" : "Поруке у осталим разговорима", + "One-to-one rooms always need to show the other users avatar" : "Један-на-један собе увек морају да прикажу аватаре осталих корисника", + "Invalid emoji character" : "Неисправан емођи карактер", + "Invalid background color" : "Неисправна боја позадине", + "Avatar image is not square" : "Слика аватара није квадратна", + "Room {number}" : "Соба {number}", + "Other" : "Остало", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Није успео захтев за пробу јер пробни сервер није доступан. Молимо вас да покушате касније.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Постоји проблем са потврђивањем ове инстанце. Можда није доступна споља, па не може да се провери њен URL.", + "Something unexpected happened." : "Десило се нешто неочекивано.", + "The URL is invalid." : "URL није исправан.", + "An HTTPS URL is required." : "Захтева се HTTPS URL.", + "The email address is invalid." : "И-мејл адреса није исправна.", + "The language is invalid." : "Језик је неисправан.", + "The country is invalid." : "Земља је неисправна.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Постоји проблем за захтевом за пробу. Молимо вас да погледате своје дневнике за више информација.", + "Too many requests are send from your servers address. Please try again later." : "Са адресе вашег сервера се шаље превише захтева. Молимо вас да покушате поново касније.", + "There is already a trial registered for this Nextcloud instance." : "Већ постоји проба регистрована за ову Nextcloud инстанцу.", + "Something unexpected happened. Please try again later." : "Десило се нешто неочекивано. Молимо вас да покушате поново касније.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Није успео захтев за пробу јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "Trial requested but failed to get account information. Please check back later." : "Проба је захтевана али није успело добављање информације о налогу. Молимо вас да поново проверите касније.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Постоји проблем са потрврђивањем овог разлога. Можда није доступан споља, па не може да се провери њен URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Није успело добављање информација о налогу јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Постоји проблем за добављањем информација о налогу. Молимо вас да погледате своје дневнике за више информација.", + "There is no such account registered." : "Такав налог није регистрован.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Није успело добављање информација о налогу јер пробни сервер није доступан. Молимо вас да покушате касније.", + "Deleting the hosted signaling server account failed. Please check back later." : "Није успело брисање налога хостованог сервера за сигнализирање. Молимо вас да поново проверите касније.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Није успело брисање налога јер се пробни сервер понаша погрешно. Молимо вас да покушате касније.", + "There is a problem with deleting the account. Please check your logs for further information." : "Постоји проблем за брисањем налога. Молимо вас да погледате своје дневнике за више информација.", + "Too many requests are sent from your servers address. Please try again later." : "Са адресе вашег сервера се шаље превише захтева. Молимо вас да покушате поново касније.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Није успело брисање налога јер пробни сервер није доступан. Молимо вас да покушате касније.", + "Note to self" : "Белешка самом себи", + "A place for your private notes, thoughts and ideas" : "Место за ваше приватне белешке, мисли и идеје", + "Transcript is AI generated and may contain mistakes" : "Транскрипт је генерисала AI и може да садржи грешке", + "Summary is AI generated and may contain mistakes" : "Резиме је генерисала AI и може да садржи грешке", + "Let's get started!" : "Хајде да почнемо!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** је сигурна платфора за комуникацију која је хостована на вашој инфраструктури и која се неприметно интегрише у Nextcloud екосистем.\n\n#### Кључне могућности апликације Nextcloud Talk:\n\n* Чет и размена порука у приватним и групним ћаскањима\n* Гласовни и видео позиви\n* Дељење фајлова и интеграција са осталим Nextcloud апликацијама\n* Прилагодљива подешавања разговора, модерисање и контрола приватности\n* Веб, десктоп и мобилна верзија (iOS и Android)\n* Приватна и безбедна комуникација\n\n Сазнајте више у [корисничкој документацији](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Добродошли у Nextcloud Talk\n\nNextcloud Talk је приватна и моћна апликација за размену порука која се интегрише са Nextcloud. Чет у приватним и групним разговорима, сарадња преко гласовних и видео позива, организација вебинара и догађаја, прилагођавање ваших разговора и још доста тога.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматирајте текст и креирајте обогаћене поруке\n\nУ Nextcloud Talk можете да користите Markdown синтаксу за означавање порука које шаљете. На пример, примените **подебљано** или *курзив* форматирање, или `истакните текст као изворни кôд`. Можете чак да креирате и табеле или да додате наслове у свој текст.\n\nТреба да исправите грешку у куцању или да измените форматирање? Уредите своју поруку кликом на „Уреди поруку” у менију поруке.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Додајте прилоге и линкове\n\nКористећи дугме „+” можете да додате фајлове из свог Nextcloud Hub. Делите ставке из Фајлова и разних Nextcloud апликација. Неке апликације чак подржавају и интерактивне виџете, на пример, апликација Текст.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Нека разговор тече: помените кориснике, реагујте на поруке и још тога\n\nУ разговору можете да поменете све користећи %s или одређене учеснике тако што откуцате „@” па из листе изаберете њихово име.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Можете да одговорите на поруке, да их проследите у друга ћаскања и другим особама, или да копирате садржај поруке.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Урадите више употребом Паметног бирача\n\nКада желите да отворите Паметни бирач, просто откуцајте „/” или идите на „+” мени, и тако прикачите разни садржај у своје поруке. Паметни бирач можете подесити тако да буде у могућности да додаје ставке из Nextcloud апликација, GIF-ове, локације на мапи, AI генерисани садржај и још много тога.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Управљајте подешавањима разговора\n\nУ менију разговора можете да приступите разним подешавањима којима управљате својим разговорима, као што су:\n* Уређивање информација о разговору\n* Управљање обавештењима\n* Примена бројних правила модерације\n* Подешавање права приступа и безбедности\n* Укључивање ботова\n* и још више!", + "Andorra" : "Андора", + "United Arab Emirates" : "Уједињени Арапски Емирати", + "Afghanistan" : "Авганистан", + "Antigua and Barbuda" : "Антигва и Барбуда", + "Anguilla" : "Ангвила", + "Albania" : "Албанија", + "Armenia" : "Јерменија", + "Angola" : "Ангола", + "Antarctica" : "Антарктик", + "Argentina" : "Аргентина", + "American Samoa" : "Америчка Самоа", + "Austria" : "Аустрија", + "Australia" : "Аустралија", + "Aruba" : "Аруба", + "Åland Islands" : "Оландска острва", + "Azerbaijan" : "Азербејџан", + "Bosnia and Herzegovina" : "Босна и Херцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Белгија", + "Burkina Faso" : "Буркина Фасо", + "Bulgaria" : "Бугарска", + "Bahrain" : "Бахреин", + "Burundi" : "Бурунди", + "Benin" : "Бенин", + "Saint Barthélemy" : "Сент Бартелеми", + "Bermuda" : "Бермуда", + "Brunei Darussalam" : "Брунеј", + "Bolivia, Plurinational State of" : "Боливија, Вишенационална држава", + "Bonaire, Sint Eustatius and Saba" : "Карипска Холандија", + "Brazil" : "Бразил", + "Bahamas" : "Бахами", + "Bhutan" : "Бутан", + "Bouvet Island" : "Буве", + "Botswana" : "Боцвана", + "Belarus" : "Белорусија", + "Belize" : "Белизе", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосова (Килинг) Острва", + "Congo, the Democratic Republic of the" : "Конго, Демократска Република", + "Central African Republic" : "Централноафричка Република", + "Congo" : "Конго", + "Switzerland" : "Швајцарска", + "Côte d'Ivoire" : "Обала Слоноваче", + "Cook Islands" : "Кукова Острва", + "Chile" : "Чиле", + "Cameroon" : "Камерун", + "China" : "Кина", + "Colombia" : "Колумбија", + "Costa Rica" : "Костарика", + "Cuba" : "Куба", + "Cabo Verde" : "Зеленортска острва", + "Curaçao" : "Курасао", + "Christmas Island" : "Ускршња острва", + "Cyprus" : "Кипар", + "Czechia" : "Чешка", + "Germany" : "Немачка", + "Djibouti" : "Џибути", + "Denmark" : "Данска", + "Dominica" : "Доминика", + "Dominican Republic" : "Доминиканска Република", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонија", + "Egypt" : "Египат", + "Western Sahara" : "Западна Сахара", + "Eritrea" : "Еритреја", + "Spain" : "Шпанија", + "Ethiopia" : "Етиопија", + "Finland" : "Финска", + "Fiji" : "Фиџи", + "Falkland Islands (Malvinas)" : "Фолкландска (Малвинска) острва", + "Micronesia, Federated States of" : "Микронезије, Савезне државе", + "Faroe Islands" : "Фарска Острва", + "France" : "Француска", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Уједињено Краљевство", + "Grenada" : "Гренада", + "Georgia" : "Грузија", + "French Guiana" : "Француска Гвајана", + "Guernsey" : "Гернзи", + "Ghana" : "Гана", + "Gibraltar" : "Гибралтар", + "Greenland" : "Гренланд", + "Gambia" : "Гамбија", + "Guinea" : "Гвинеја", + "Guadeloupe" : "Гвадалупе", + "Equatorial Guinea" : "Екваторијална Гвинеја", + "Greece" : "Грчка", + "South Georgia and the South Sandwich Islands" : "Јужна Џорџија и Јужна Сендвичка острва", + "Guatemala" : "Гватемала", + "Guam" : "Гвам", + "Guinea-Bissau" : "Гвинеја Бисао", + "Guyana" : "Гвајана", + "Hong Kong" : "Хонг Конг", + "Heard Island and McDonald Islands" : "Острво Херд и острва Макдоналд", + "Honduras" : "Хондурас", + "Croatia" : "Хрватска", + "Haiti" : "Хаити", + "Hungary" : "Мађарска", + "Indonesia" : "Индонезија", + "Ireland" : "Ирска", + "Israel" : "Израел", + "Isle of Man" : "Острво Мен", + "India" : "Индија", + "British Indian Ocean Territory" : "Британска територија Индијског океана", + "Iraq" : "Ирак", + "Iran, Islamic Republic of" : "Иран, Исламска република", + "Iceland" : "Исланд", + "Italy" : "Италија", + "Jersey" : "Џерзи", + "Jamaica" : "Јамајка", + "Jordan" : "Јордан", + "Japan" : "Јапан", + "Kenya" : "Кенија", + "Kyrgyzstan" : "Киргистан", + "Cambodia" : "Камбоџа", + "Kiribati" : "Кирибати", + "Comoros" : "Комори", + "Saint Kitts and Nevis" : "Сент Китс и Невис", + "Korea, Democratic People's Republic of" : "Кореја, Демократска народна република", + "Korea, Republic of" : "Кореја, Република", + "Kuwait" : "Кувајт", + "Cayman Islands" : "Кајманска острва", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоска Народна Демократска Република", + "Lebanon" : "Либан", + "Saint Lucia" : "Света Луција", + "Liechtenstein" : "Лихтенштајн", + "Sri Lanka" : "Шри Ланка", + "Liberia" : "Либерија", + "Lesotho" : "Лесото", + "Lithuania" : "Литванија", + "Luxembourg" : "Луксембург", + "Latvia" : "Летонија", + "Libya" : "Либија", + "Morocco" : "Мароко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдавија, Република", + "Montenegro" : "Црна Гора", + "Saint Martin (French part)" : "Свети Мартин (Француска)", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршалска Острва", + "North Macedonia" : "Северна Македонија", + "Mali" : "Мали", + "Myanmar" : "Мјанмар", + "Mongolia" : "Монголија", + "Macao" : "Макао", + "Northern Mariana Islands" : "Северна Маријанска Острва", + "Martinique" : "Мартиник", + "Mauritania" : "Мауританија", + "Montserrat" : "Монтсерат", + "Malta" : "Малта", + "Mauritius" : "Маурицијус", + "Maldives" : "Малдиви", + "Malawi" : "Малави", + "Mexico" : "Мексико", + "Malaysia" : "Малезија", + "Mozambique" : "Мозамбик", + "Namibia" : "Намибија", + "New Caledonia" : "Нова Каледонија", + "Niger" : "Нигер", + "Norfolk Island" : "Острво Норфок", + "Nigeria" : "Нигерија", + "Nicaragua" : "Никарагва", + "Netherlands" : "Холандија", + "Norway" : "Норвешка", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Нијуе", + "New Zealand" : "Нови Зеланд", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Француска Полинезија", + "Papua New Guinea" : "Папуа Нова Гвинеја", + "Philippines" : "Филипини", + "Pakistan" : "Пакистан", + "Poland" : "Пољска", + "Saint Pierre and Miquelon" : "Сен Пјер и Микелон", + "Pitcairn" : "Питкерн", + "Puerto Rico" : "Порторико", + "Palestine, State of" : "Држава Палестина", + "Portugal" : "Португалија", + "Palau" : "Палау", + "Paraguay" : "Парагвај", + "Qatar" : "Катар", + "Réunion" : "Реинион", + "Romania" : "Румунија", + "Serbia" : "Србија", + "Russian Federation" : "Руска Федерација", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудијска Арабија", + "Solomon Islands" : "Соломонска Острва", + "Seychelles" : "Сејшели", + "Sudan" : "Судан", + "Sweden" : "Шведска", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "Света Јелена, Асенсион и Тристан да Куња", + "Slovenia" : "Словенија", + "Svalbard and Jan Mayen" : "Свалбард и Јан Мајен острва", + "Slovakia" : "Словачка", + "Sierra Leone" : "Сијера Леоне", + "San Marino" : "Сан Марино", + "Senegal" : "Сенегал", + "Somalia" : "Сомалија", + "Suriname" : "Суринам", + "South Sudan" : "Јужни Судан", + "Sao Tome and Principe" : "Сао Томе и Принципе", + "El Salvador" : "Ел Салвадор", + "Sint Maarten (Dutch part)" : "Свети Мартин (Холандија)", + "Syrian Arab Republic" : "Сирија", + "Eswatini" : "Есватини", + "Turks and Caicos Islands" : "Теркс и Кејкос", + "Chad" : "Чад", + "French Southern Territories" : "Француске јужне и антарктичке земље", + "Togo" : "Того", + "Thailand" : "Тајланд", + "Tajikistan" : "Таџикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Источни Тимор", + "Turkmenistan" : "Туркменистан", + "Tunisia" : "Тунис", + "Tonga" : "Тонга", + "Turkey" : "Турска", + "Trinidad and Tobago" : "Тринидад и Тобаго", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тајван, провинција Кине", + "Tanzania, United Republic of" : "Танзанија", + "Ukraine" : "Украјина", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Мала спољна острва Сједињених Држава", + "United States of America" : "Сједињене Америчке Државе", + "Uruguay" : "Уругвај", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Света столица", + "Saint Vincent and the Grenadines" : "Сент Винсент и Гренадини", + "Venezuela, Bolivarian Republic of" : "Венецуела, Боливарска република", + "Virgin Islands, British" : "Девичанска Острва, Британска", + "Virgin Islands, U.S." : "Девичанска Острва, Америчка", + "Viet Nam" : "Вијетнам", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Валис и Футуна", + "Samoa" : "Самоа", + "Yemen" : "Јемен", + "Mayotte" : "Мајот", + "South Africa" : "Јужноафричка република", + "Zambia" : "Замбија", + "Zimbabwe" : "Зимбабве", + "Background blur" : "Замућење позадине", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Није могла да се провери подршка за учитавање WASM фајлова. Молимо вас да ручно проверите да ли ваш веб сервер сервира `.wasm` фајлове.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб сервер није исправно подешен да испоручи .wasm фајлове. Ово је обично проблем са Nginx конфигурацијом. За замућење позадине је неопходно да се направе измене у конфигурацији како би могли да се испоруче и .wasm фајлови. Упоредите своју Nginx конфигурацију са препорученом конфигурацијом у нашој документацији.", + "Talk configuration values" : "Вредности Talk конфигурације", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Форсирање трајања разговора се подржава само на системима са cron. Молимо вас да укључите системски cron или да уклоните `max_call_duration` конфигурацију.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Мале `max_call_duration` вредности (тренутно је постављено на %d) не могу да се форсирају услед техничких ограничења. Позадински посао се извршава само сваких пет минута, тако да ово радите на сопствени ризик.", + "Federation" : "Здруживање", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Када је укључена Talk федерација, снажно се препоручује конфигурисање „memcache.locking”.", + "High-performance backend" : "Позадински механизам високих перформанси", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Није подешен ниједан позадински механизам високих перформанси - Извршавање Nextcloud Talk апликације без позадинског механизма високих перформанси има смисла само за врло мале позиве (2-3 учесника максимално). Молимо вас да подесите позадински механизам високих перформанси јер се тако обезбеђује да позиви са више учесника раде без проблема.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Извршавање „conversation_cluster” режима позадинског механизма високих перформанси је застарело и неће се подржавати у наредној верзији. Позадински механизам високих перформанси у данашње време подржава право груписање, тако да би то требало да се користи.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Дефинисање више позадинских механизама високих перформанси је застарело и неће се подржавати у наредној верзији. Уместо тога, требало би да се подеси балансер оптерећења заједно са груписаним серверима за сигнализацију и да се конфигурише у подешавањима Talk апликације.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Сачувани јавни кључ за алгоритам који се користи %1$s не одговара сачуваном приватном кључу. Покрените %2$s да поправите проблем.", + "High-performance backend not configured correctly. Run %s for details." : "Позадински механизам високих перформанси није исправно подешен. Покрените %s за детаље.", + "High-performance backend not configured correctly" : "Позадински механизам високих перформанси није исправно подешен", + "Error: Cannot connect to server" : "Грешка: не може да се успостави веза са сервером", + "Error: Server did not respond with proper JSON" : "Error: сервер није одговорио са исправним JSON", + "Error: Certificate expired" : "Грешка: важење сертификата је истекло", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Грешка: системскко време Nextcloud сервера и сервера позадинског механизма високе перформансе. Молимо вас да обезбедите везу оба сервера са сервером тачног времена, или ручно ускладите време на њима.", + "Could not get version" : "Не може да се добави верзија", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Грешка: Верзија која се извршава: {version}; потребно је да се сервер ажурира да би био компатибилан са овом верзијом апликације Talk", + "Error: Server responded with: {error}" : "Error: сервер је одговорио са: {error}", + "Error: Unknown error occurred" : "Error: дошло је до непознате грешке", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Упозорење: Верзија која се извршава: {version}; Сервер не подржава све могућности ове Talk верзије, недостају функције: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Када се Nextcloud Talk користи заједно са позадинским механизмом високих перформанси, снажно се препоручује да се подеси кеширање меморије.", + "Client Push" : "Client Push", + "Recording backend" : "Позадински механизам са снимање", + "Using the recording backend requires a High-performance backend." : "Када се користи позадински механизам за снимање, потребно је да се користи и позадински механизам високих перформанси.", + "No recording backend configured" : "Није подешен ниједан позадински механизам за снимање", + "SIP configuration" : "SIP конфигурација", + "Using the SIP functionality requires a High-performance backend." : "Употреба SIP функционалности захтева коришћење позадинског механизма високих перформанси.", + "No SIP backend configured" : "Није подешен ниједан SIP позадински механизам", + "Invalid date, date format must be YYYY-MM-DD" : "Неисправан датим, формат датума мора бити ГГГГ-ММ-ДД", + "Conversation not found" : "Разговор није нађен", + "Path is already shared with this conversation" : "Путања се већ дели у овом разговору", + "Chat, video & audio-conferencing using WebRTC" : "Ћаскање, аудио & видео конференцијски позиви преко WebRTC-а", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чет, видео & аудио конференције помоћу WebRTC\n\n* 💬 **Чет** Nextcloud Talk се испоручује са једноставним текст четом који вам омогућава да делите или отпремате фајлове из ваше апликације Nextcloud Фајлови или са локалног уређаја, као и да помињете остале учеснике.\n* 👥 **Приватни, групни, јавни и лозинком заштићени позиви!** Позовите некога, целу групу, или пошаљите јавни линк да бисте позвали у позив.\n* 🌐 **Федерисани четови** Четујте са осталим Nextcloud корисницима на њиховим серверима\n* 💻 **Дељење екрана!** Делите свој екран са учесницима позива.\n* 🚀 **Интеграција са осталим Nextcloud апликацијама** као што су Фајлови, Календар, Статус корисника, Контролна табла, Ток, Мапе, Паметни бирач, Контакти, Шпил и многе друге.\n* 🌉 **Синхронизација са осталим чет решењима** Пошто је [Matterbridge](https://github.com/42wim/matterbridge/) интегрисан у Talk, једноставно можете да синхронизујте велики број осталих чет решења у Nextcloud Talk и обрнуто.", + "Leave call" : "Напусти разговор", + "Navigating away from the page will leave the call in {conversation}" : "Одлазак са странице ће оставити позив у {conversation}", + "Stay in call" : "Остани у позиву", + "Error occurred when getting the conversation information" : "Дошло је до грешке током преузимања информација о разговору", + "Discuss this file" : "Причај о овом фајлу", + "Share this file with others to discuss it" : "Дели овај фајл са другима да причаш о њему", + "Share this file" : "Подели овај фајл", + "Join conversation" : "Укључи се у разговор", + "This conversation is password-protected." : "Овај разговор је заштићен лозинком.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Приметили смо више неисправних покушаја пријава са ваше IP адресе. Зато ће ваша следећа пријава бити могућа тек за 30 секунди.", + "The password is wrong. Try again." : "Лозинка је погрешна. Покушајте поново.", + "Password" : "Лозинка", + "Submit" : "Пошаљи", + "Error requesting the password." : "Грешка приликом захтевања лозинке.", + "Request password" : "Захтевај лозинку", + "This conversation has ended" : "Разговор је завршен", + "Error occurred when joining the conversation" : "Дошло је до грешке током приступања разговору", + "Close Talk sidebar" : "Затвори Talk бочну траку", + "Open Talk sidebar" : "Отвори Talk бочну траку", + "Everyone" : "Сви", + "Users and moderators" : "Корисници и модератори", + "Moderators only" : "Само модератори", + "Disable calls" : "Искључи позиве", + "Save changes" : "Сними измене", + "Saving …" : "Чувам…", + "Saved!" : "Сачувано!", + "Limit to groups" : "Ограничи на групе", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Када се означи бар једна група, само људи из излистаних група ће бити део разговора.", + "Guests can still join public conversations." : "Гости и даље могу да се придруже јавним разговорима.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Корисници који више не могу да користе Talk ће и даље бити наведени као учесници у њиховим претходним разговорима и чуваће се и њихове поруке.", + "Limit using Talk" : "Ограничи коришћење talk", + "Limit creating a public and group conversation" : "Ограничи креирање јавних и групних разговора", + "Limit creating conversations" : "Ограничи креирање разговора", + "Limit starting a call" : "Ограничи започињање позива", + "Limit starting calls" : "Limit starting позива", + "When a call has started, everyone with access to the conversation can join the call." : "Када је позив започет, свако са приступом разговору може да се придружи и позиву.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На овом серверу су инсталирани следећи ботови. У документацији можете пронаћи детаље како да {linkstart1}изградите сопствени бот{linkend} или {linkstart2}листу ботова{linkend} које можете да укључите на серверу.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На овом серверу није инсталиран ниједан бот. У документацији можете пронаћи детаље како да {linkstart1}изградите сопствени бот{linkend} или {linkstart2}листу ботова{linkend} које можете да укључите на серверу.", + "Description is not provided" : "Није достављена документација", + "Locked for moderators" : "Закључано за модераторе", + "Enabled" : "укључено", + "Disabled" : "Искључено", + "Bots settings" : "Оба подешавања", + "State" : "Стање", + "Name" : "Име", + "Last error" : "Последња грешка", + "Total errors count" : "Укупан број грешака", + "Find more bots" : "Пронађи још ботова", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Сервери којима се верује мегу да се подесе на {linkstart}страници Подешавања дељења{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Здружени четови и позиви већ функционишу. Обрада прилога ће доћи у будућој верзији.", + "Enable Federation in Talk app" : "Укључи Заједницу у Talk апликацији", + "Permissions" : "Дозволе", + "Allow users to be invited to federated conversations" : "Дозволи да се коринисници позивају у федерисане разговоре", + "Allow users to invite federated users into conversation" : "Дозволи да корисници позивају федерисане кориснике у разговор", + "Only allow to federate with trusted servers" : "Дозволи федерисање само са серверима којима се верује", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Када се означи бар једна група, само ће људи из наведених група моћи да позивају федерисане кориснике у разговор.", + "Groups allowed to invite federated users" : "Групе којима је дозвољено да позивају федерисане кориснике", + "Select groups …" : "Изаберите групе…", + "All messages" : "Све поруке", + "@-mentions only" : "Само @-помињања", + "Off" : "Искључена", + "General settings" : "Опште поставке", + "Default notification settings" : "Подразумевана подешавања обавештења", + "Default group notification" : "Подразумевана групна обавештења", + "Default group notification for new groups" : "Подразумевана групна обавештења за нове групе", + "Integration into other apps" : "Интеграција у друге апликације", + "Allow conversations on files" : "Дозволи разговоре у фајловима", + "Allow conversations on public shares for files" : "Дозволи разговоре на јавним дељењима фајлова", + "End-to-end encrypted calls" : "Позиви шифровани с-краја-на-крај", + "Enable encryption" : "Укључи шифровање", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Позиви шифровани с-краја-на-крај са подешеним SIP мостом захтевају употребу новије верзије позадинског механизма високих перформанси и SIP мост.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Мобилни клијенти тренутно не подржавају позиве шифроване с-краја-на-крај.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Кликом на горње дугме се информације из формулара шаљу серверима фирме Struktur AG. Више информација можете да видите на {linkstart}spreed.eu{linkend}.", + "Pending" : "На чекању", + "Error" : "Грешка", + "Blocked" : "Блокиран", + "Active" : "Активан", + "Expired" : "Истекао", + "Never" : "Никад", + "The trial could not be requested. Please try again later." : "Проба не може да се захтева. Молимо вас да покушате касније.", + "The account could not be deleted. Please try again later." : "Налог не може да се обрише. Молимо вас да покушате касније.", + "Hosted High-performance backend" : "Хостовани позадински механизам високих перформанси", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Наш партнер Struktur AG обезбеђује сервис којим може да се захтева хостовани сервер за сигнализацију. За ово је потребно само да испуните доњи формулар и ваш Nextcloud ће послати захтев. Једном кад се сервер постави за вас, подаци за пријаву ће се аутоматски попунити. Ово ће да препише постојећа подешавања сервера за сигнализацију.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ако ваш позадински механизам има STUN и/или TURN функионалност, подешавања ће се ажурирати у складу са тим.", + "URL of this Nextcloud instance" : "URL ове Nextcloud инстанце", + "Full name of the user requesting the trial" : "Пуно име коринсика који захтева пробу", + "Email of the user" : "И-мејл корисника", + "Language" : "Језик", + "Country" : "Држава", + "Request signaling server trial" : "Захтев за пробу сервера за сигнализацију", + "You can see the current status of your hosted signaling server in the following table." : "У следећој табели можете да видите статус свог хостованог сервера за сигнализацију.", + "Status" : "Статус", + "Created at" : "Направљено", + "Expires at" : "Истиче дана", + "Limits" : "Ограничења", + "STUN included" : "STUN је укључен", + "Yes" : "Да", + "No" : "Не", + "TURN included" : "TURN је укључен", + "Delete the signaling server account" : "Обриши налог сервера за сигнализацију", + "_%n user_::_%n users_" : ["%n корисник","%n корисника","%n корисника"], + "Installed version: {version}" : "Инсталирана верзија: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Можете да инсталирате Matterbridge да бисте повезали Nextcloud Talk са неким другим сервисима, посетите њихову {linkstart1}GitHub страницу{linkend} за више детаља. Преузимање и инсталирање апликације може да потраје. У случају да истекне време, молимо вас да је ручно инсталирате из {linkstart2}Nextcloud продавнице апликација{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge бинарни фајл нема исправне дозволе. Молимо вас да обезбедите да је власник Matterbridge бинарног фајла одговарајући корисник и да може да се изврши. Можете га пронаћи у „/…/nextcloud/apps/talk_matterbridge/bin/”.", + "Matterbridge binary was not found or couldn't be executed." : "Није пронађен Matterbridge бинарни фајл, или не може да се изврши.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "У конфигурацији можете и ручно да поставите путању до Matterbridge бинарног фајла. Погледајте {linkstart}документацију Matterbridge интеграције{linkend} за више информација.", + "Downloading …" : "Преузима се...", + "Install Talk Matterbridge" : "Инсталирај Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Дошло је до грешке приликом инсталирања Matterbridge апликације", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Дошло је до грешке током инсталације Talk Matterbridge. Молимо вас да је инсталирате ручно", + "Failed to execute Matterbridge binary." : "Matterbridge бинарни фајл није могао да се изврши.", + "Matterbridge integration" : "Matterbridge интеграција", + "Enable Matterbridge integration" : "Укључи Matterbridge интеграцију", + "Status: Checking connection" : "Статус: проверава се веза", + "OK: Running version: {version}" : "OK: Верзија која се извршава: {version}", + "Error: Server seems to be a Signaling server" : "Грешка: изгледа да је сервер Сервер за сигнализирање", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Грешка: системскко време Nextcloud сервера и сервера позадинског механизма снимања нису синхронизована. Молимо вас да обезбедите везу оба сервера са сервером тачног времена, или ручно ускладите време на њима.", + "Recording backend URL" : "URL позадинског механизма за снимање", + "Validate SSL certificate" : "Потвди SSL сертификат", + "Delete this server" : "Обриши овај сервер", + "Test this server" : "Тестирај овај сервер", + "Disabled for all calls" : "Искључено за све позиве", + "Enabled for all calls" : "Укључено за све позиве", + "Configurable on conversation level by moderators" : "Модератори могу да подесе на нивоу разговора", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP подешавања „upload_max_filesize” или „post_max_size” ће само да дозволе отпремање фајлова величине до {maxUpload}.", + "Recording backend settings saved" : "Сачувана су подешавања позадинског механизма са снимање", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модератори ће моћи да укључе сагласност на нивоз разговора. Пре него што било који учесник приступи сваком позиву овог разговора, биће потребно да пристане да буде сниман.", + "The consent to be recorded will be required for each participant before joining every call." : "Сагласност да буде сниман ће се тражити од сваког корисника пре него што приступи сваком позиву.", + "The consent to be recorded is not required." : "Није потребна сагласност да се буде снимљен.", + "Recording backend configuration is only possible with a High-performance backend." : "Конфигурација позадинског механизма за снимање је могућа само са позадинским механизмом високих перформанси.", + "Add a new recording backend server" : "Додај нови сервер позадинског механизма за снимање", + "Shared secret" : "Дељена тајна", + "Recording consent" : "Сагласност за снимање", + "Recording transcription" : "Транскрипт снимка", + "Automatically transcribe call recordings with a transcription provider" : "Снимци разговора се аутоматски транскрибују помоћу пружаоца услуге транскрипције", + "Automatically summarize call recordings with transcription and summary providers" : "Снимци разговора се аутоматски резимирају помоћу пружаоца услуге транскрипције и резимирања", + "SIP configuration saved!" : "Сачувана је SIP конфигурација!", + "SIP configuration is only possible with a High-performance backend." : "SIP конфигурација је могућа само са позадинским механизмом високих перформанси.", + "Enable SIP Dial-out option" : "Укључи SIP одлазни позив опцију", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Потребно је да се ажурира сигнализирајући сервер да би се могла користити SIP одлсзни позив функција.", + "Do not show SIP Dial-out caller number" : "Не приказуј SIP одлазни број позиваоца", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонимни број би примаоцу позива требало да се појави као „unknown” или „withheld number”", + "Dial-out number" : "Одлазни број", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164 форматирани број који се користи као број позиваоца у крајњој нужди за одлазне позиве", + "Dial-out prefix" : "Одлазни префикс", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префикс подешеног броја корисника за одлазне позиве (подразумевано је `+`)", + "Restrict SIP configuration" : "Ограничи SIP конфигурисање", + "Enable SIP configuration" : "Омогући SIP конфигурисање", + "Only users of the following groups can enable SIP in conversations they moderate" : "Само корисници следећих група могу да укључе SIP у разговорима које модеришу", + "Phone number (Country)" : "Број телефона (Земља)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ове информације се шаљу у е-порукама са позивницама и приказују се на бочној траци свим учесницима.", + "Nextcloud base URL" : "Nextcloud базна URL адреса", + "Talk Backend URL" : "URL адреса Talk позадинског механизма", + "WebSocket URL" : "URL адреса WebSocket сервера", + "Available features" : "Доступне фукнционалности", + "Error: Websocket connection failed" : "Грешка: Websocket веза није успела", + "Error code" : "Кôд грешке", + "Error message" : "Порука о грешки", + "Error: Websocket connection failed. Check browser console" : "Грешка: Websocket веза није успела. Погледајте конзолу интернет прегледача", + "High-performance backend URL" : "URL позадинског механизма високих перформанси", + "Missing High-performance backend warning hidden" : "Сакривено је упозорење о недостајућем позадинском механизму високих перформанси", + "High-performance backend settings saved" : "Сачувана су подешавања позадинског механизма високих перформанси", + "Nextcloud Talk setup not complete" : "Nextcloud Talk подешавање није довршено", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Молимо вас да имате на уму да ће се у позивима са више од 2 учесника без позадинског механизма високих перформанси искусити проблеми са везом и велико оптерећење уређаја учесника у разговору.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Инсталирајте позадински механизам високих перформанси да би позиви са више учесника функционисали беспрекорно.", + "Nextcloud portal" : "Nextcloud портал", + "Quick installation guide" : "Брзи водич за инсталацију", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "За позиве са више учесника је неопходан позадински механизам високих перформанси. Без њега, сви учесници појединачно морају да отпремају свој видео сваком осталом учеснику, што ће највероватније да проузрокује проблеме са повезивањем и велико оптерећење уређаја који учествују у позиву.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Када се користи Nextcloud Talk са позадинским механизмом високих перформанси, снажно се препоручује да се подеси дистрибуирани кеш.", + "Add High-performance backend server" : "Додај сервер позадинског механизма високих перформанси", + "Warn about connectivity issues in calls with more than 2 participants" : "Упозоравај на проблеме са конекцијом у разговорима са више од 2 учесника", + "STUN server URL" : "Адреса „STUN“ сервера", + "The server address is invalid" : "Адреса сервера није исправна", + "STUN settings saved" : "Сачувана су STUN подешавања", + "STUN servers" : "„STUN“ сервери", + "A STUN server is used to determine the public IP address of participants behind a router." : "„STUN“ сервер се користи да одреди јавну ИП адресу учесника који су иза рутера.", + "Add a new STUN server" : "Додај нови STUN сервер", + "{schema} scheme must be used with a domain" : "{schema} шема мора да се користи са доменом", + "{option1} and {option2}" : "{option1} и {option2}", + "{option} only" : "само {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: TURN сервер је вратио успешне ICE кандидате", + "Error: No working ICE candidates returned by the TURN server" : "OK: TURN сервер није вратио ICE кандидате који раде", + "Testing whether the TURN server returns ICE candidates" : "Тестирање да ли TURN сервер враћа ICE кандидате", + "TURN server schemes" : "Шеме TURN сервера", + "TURN server URL" : "Адреса TURN сервера", + "TURN server secret" : "Тајна TURN сервера", + "TURN server protocols" : "TURN серверски протокол", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN сервер се користи да прослеђује саобраћај од учесника који се налазе иза заштитног зида. Ако поједини учесници не могу да се повеђу са осталима, највероватније је потребан TURN сервер. За упутства о подешавању, погледајте {linkstart}ову документацију{linkend}.", + "TURN settings saved" : "Сачувана су TURN подешавања", + "TURN servers" : "TURN сервери", + "Add a new TURN server" : "Додај нови TURN сервер", + "Failed" : "Није успело", + "OK" : "У реду", + "Checking …" : "Проверавам…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Неуспешно: WebAssembly је искључен или га овај прегледач не подржава. Да би се извршила провера, молимо вас да укључите WebAssembly или да користите прегледач који га подржава.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Неуспешно: веб сервер није исправно вратио „.wasm” и „.tflite” фајлове. Молимо вас да погледате одељак „System requirements” у Talk документацији.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: веб сервер је исправно вратио „.wasm” и „.tflite” фајлове.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Изгледа да PHP и Apache конфигурација није компатибилна. Имајте на уму да PHP може да се користи само са MPM_PREFORK модулом и да PHP-FPM може да се користи само са MPM_EVENT модулом.", + "Web server setup checks" : "Провере подешавања веб сервера", + "Files required for virtual background can be loaded" : "Могу да се учитају фајлови неопходни за виртуелну позадину", + "Federated user" : "Федерисани корисник", + "Assign participants to rooms" : "Додели учеснике собама", + "Configure breakout rooms" : "Конфигуриши сепарее", + "Number of breakout rooms" : "Број сепареа", + "You can create from 1 to 20 breakout rooms." : "Можете да креирате од 1 до 20 сепареа", + "Assignment method" : "Метод доделе", + "Automatically assign participants" : "Аутоматски додели учеснике", + "Manually assign participants" : "Ручно додели учеснике", + "Allow participants to choose" : "Дозволи да учесници изаберу", + "Create rooms" : "Креирај собе", + "Confirm" : "Потврди", + "Create breakout rooms" : "Креирај сепарее", + "Reset" : "Ресетуј", + "Delete breakout rooms" : "Обриши сепарее", + "Room {roomNumber}" : "Соба {roomNumber}", + "Current breakout rooms and settings will be lost" : "Текући сепаре и подешавања ће се изгубити", + "Cancel" : "Откажи", + "Unassigned participants" : "Недодељени учесници", + "Back" : "Назад", + "Assign" : "Додели", + "Add participant \"{user}\"" : "Додај учесника „{user}”", + "Now" : "Сада", + "Invalid calendar selected" : "Изабран је неисправан календар", + "Invalid start time selected" : "Изабрано је неисправно време почетка", + "Invalid end time selected" : "Изабрано је неисправно време краја", + "Unknown error occurred" : "Дошло је до непознате грешке", + "Sending no invitations" : "Не шаље се ниједна позивница", + "{participant0} will receive an invitation" : "{participant0} ће примити позивницу", + "{participant0} and {participant1} will receive invitations" : "{participant0} и {participant1} ће примити позивницу", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} и још %n ће примити позивнице","{participant0}, {participant1} и још %n осталих ће примити позивнице","{participant0}, {participant1} и још %n осталих ће примити позивнице"], + "Invite {user}" : "Позови {user}", + "Invite all users and emails in this conversation" : "Позови све кориснике и и-мејл адресе у овај разговор", + "Meeting created" : "Креиран је састанак", + "Upcoming meetings" : "Предстојећи састанци", + "Loading …" : "Учитавање…", + "No upcoming meetings" : "Нема предстојећих састанака", + "Schedule a meeting" : "Закажи састанак", + "Meeting title" : "Наслов састанка", + "From" : "Од", + "To" : "За", + "Calendar" : "Календар", + "Attendees" : "Присутни", + "No other participants to send invitations to." : "Нема осталих учесника којима би могла да се пошаље позивница.", + "Add attendees" : " Додај учеснике", + "Save" : "Сачувај", + "Search participants" : "Претражи учеснике", + "No results" : "Нема резултата", + "Done" : "Завршено", + "Disable live transcription" : "Искључи транскрипцију уживо", + "Raise hand" : "Подигни руку", + "Raise hand (R)" : "Подигни руку (R)", + "Lower hand" : "Спуштена рука", + "Lower hand (R)" : "Спусти руку (R)", + "Exit full screen (F)" : "Напусти пун екран (F)", + "Full screen (F)" : "Пун екран (F)", + "Speaker view" : "Поглед говорника", + "Grid view" : "Приказ мреже", + "Error when trying to load the available live transcription languages" : "Грешка приликом покушаја учитавања доступних језика за транскрипцију уживо", + "Failed to enable live transcription" : "Није успело укључивање транскрипције уживо", + "Recording consent is required" : "Потребна је сагласност за снимање", + "This conversation is read-only" : "Овај разговор је само-за-читање", + "Conversation not found or not joined" : "Није пронађен разговор или му нисте приступили", + "Lobby is still active and you're not a moderator" : "Предсобље је још увек активно и ви нисте модератор", + "Connection failed" : "Није успело повезивање", + "Reload" : "Поново учитај", + "{nickName} raised their hand." : "{nickName} је подигао руку.", + "A participant raised their hand." : "Учесник је подигао руку.", + "Collapse stripe" : "Сажми црту", + "Expand stripe" : "Развиј црту", + "Previous page of videos" : "Претходна страница видеа", + "Next page of videos" : "Наредна страница видеа", + "Connecting …" : "Повезивање ..", + "Calling …" : "Позивање", + "Waiting for {user} to join the call" : "Чека се да {user} приступи позиву", + "Waiting for others to join the call …" : "Чекам да се остали прикључе разговору…", + "You can invite others in the participant tab of the sidebar" : "Можете позвати остале у језичку са учесницима у траци са стране", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Можете позвати остале у језичку са учесницима у траци са стране или поделити ову везу као позивницу!", + "Share this link to invite others!" : "Поделите ову везу да позовете остале!", + "Copy link" : "Копирај везу", + "You are not allowed to enable audio" : "Није вам дозвољено да укључите звук", + "No audio. Click to select device" : "Нема звука. Кликните да изаберете уређај", + "Mute audio" : "Искључи звук", + "Mute audio (M)" : "Утули звук (М)", + "Unmute audio" : "Пусти звук", + "Unmute audio (M)" : "Пусти звук (М)", + "None" : "Нико", + "Select a microphone" : "Изаберите микрофон", + "Select a speaker" : "Изаберите звучник", + "Check devices" : "Провери уређаје", + "Access to camera was denied" : "Приступ камери је одбијен", + "Error while accessing camera: It is likely in use by another program" : "Грешка приликом приступања камери: највероватније је користи неки други програм", + "Error while accessing camera" : "Грешка приликом приступања камери", + "You have been muted by a moderator" : "Модератор вас је утишао", + "Hide presenter video" : "Сакриј видео презентера", + "You are not allowed to enable video" : "Није вам дозвољено да укључите видео", + "No video. Click to select device" : "Нема видеа. Кликните да изаберете уређај", + "Disable video" : "Искључи видео", + "Disable video (V)" : "Искључи видео (V)", + "Enable video" : "Укључи видео", + "Enable video (V)" : "Укључи видео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео - Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео (V) - Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Укључи видео. Ваша веза ће накратко бити прекинута док се видео укључује по први пут", + "Select a video device" : "Изаберите видео уређај", + "Show presenter" : "Прикажи особу која излаже", + "You" : "Ви", + "Mute" : "Утули", + "Muted" : "Утуљено", + "Show screen" : "Прикажи екран", + "Stop following" : "Прекини праћење", + "Connection could not be established …" : "Није могла да се успостави веза...", + "Connection was lost and could not be re-established …" : "Веза је изгубљена и није могла поново да се успостави...", + "Connection could not be established. Trying again …" : "Није могла да се успостави веза. Покушава се поново...", + "Connection lost. Trying to reconnect …" : "Веза је изгубљена. Покушава се поновно повезивање...", + "Connection problems …" : "Проблеми са везом", + "Collapse" : "Скупи", + "Expand" : "Proširi", + "You need to be logged in to upload files" : "Да бисте отпремали фајлове, морате бити пријављени", + "Drop your files to upload" : "Отпустите фајлове за отпремање", + "Conversation messages" : "Поруке у разговору", + "Scroll to bottom" : "Скролуј на дно", + "Post message" : "Објави поруку", + "Federated conversation" : "Федерисани разговор", + "Public conversation" : "Јавни разговор", + "Favorite" : "Омиљени", + "Banned users" : "Забрањени корисници", + "Manage the list of banned users in this conversation." : "Управљање листом забрањених корисника у овом разговору.", + "Manage bans" : "Управљај забранама", + "No banned users" : "Нема забрањених корисника", + "Banned by:" : "Забранио:", + "Date:" : "Датум:", + "Note:" : "Белешка:", + "Hide details" : "Сакриј детаље", + "Show details" : "Прикажи детаље", + "Unban" : "Уклони забрану", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Наслов и опис можете да промените у {linkstart}Календару ↗{linkend}.", + "Error while updating conversation name" : "Грешка приликом ажурирања назива разговора", + "Error while updating conversation description" : "Грешка приликом ажурирања описа разговора", + "Enter a name for this conversation" : "Унесите назив овог разговора", + "Edit conversation name" : "Уреди назив разговора", + "Edit conversation description" : "Уреди опис разговора", + "Enter a description for this conversation" : "Унесите опис овог разговора", + "Picture" : "Слика", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У овом разговору могу да се укључе следећи ботови. Обратите се администрацији ако желите да добијете још ботова инсталираних на овом серверу.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На овом серверу није инсталиран ниједан бот. Обратите се администрацији ако желите да инсталирате ботове на овај сервер.", + "Disable" : "Искључи", + "Enable" : "Укључи", + "Breakout rooms" : "Сепареи", + "Manage breakout rooms" : "Управљај сепареима", + "Set up breakout rooms for this conversation" : "Подесите сепарее за овај разговор", + "Please select a valid PNG or JPG file" : "Молимо вас да изаберете исправан PNG или JPG фајл", + "Choose your conversation picture" : "Изаберите слику за свој разговор", + "Choose" : "Изаберите", + "Error setting conversation picture" : "Грешка приликом постављања слике разговора", + "Could not set the conversation picture: {error}" : "Није могла да се постави слика разговора: {error}", + "Error cropping conversation picture" : "Грешка приликом опсецања слике разговора", + "Error removing conversation picture" : "Грешка приликом уклањања слике разговора", + "Set emoji as conversation picture" : "Постави емођи као слику разговора", + "Set background color for conversation picture" : "Постави боју позадине слике разговора", + "Upload conversation picture" : "Отпреми слику разговора", + "Choose conversation picture from files" : "Изабери слику разговора међу фајловима", + "Remove conversation picture" : "Уклони слику разговора", + "The file must be a PNG or JPG" : "Фајл мора да буде PNG или JPG", + "Set picture" : "Постави слику", + "Default permissions modified for {conversationName}" : "Подразумеване дозволе измењене за {conversationName}", + "Could not modify default permissions for {conversationName}" : "Нису могле да се измене подразумеване дозволе за {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Уређивање подразумеваних дозвола за учеснике овог разговора. Ова подешавања не утичу на модераторе.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Сваки пут када се у овом одељку измене дозволе, губе се произвољне дозволе које су раније додељене појединим учесницима.", + "All permissions" : "Све дозволе", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учесници имају дозволу да започну позив, приступе позиву, укључе звук и видео и деле екран.", + "Restricted" : "Ограничена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учесници могу да приступе позивима, али не могу да укључе ни звук ни видео, нити могу да деле екран све док им модератор то не дозволи.", + "Advanced permissions" : "Напредне дозволе", + "Edit permissions" : "Уреди дозволе", + "Conversation settings" : "Подешавања разговора", + "Basic Info" : "Основне информације", + "Personal" : "Лично", + "Moderation" : "Модерација", + "Setup overview" : "Подеси преглед", + "Live transcription" : "Транскрипција уживо", + "Enable live transcription" : "Укључи транскрипцију уживо", + "Breakout Rooms" : "Сепареи", + "Matterbridge" : "Matterbridge", + "Bots" : "Ботови", + "Danger zone" : "Зона опасности", + "Archive conversation" : "Архивирај разговор", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архивирани разговори се подразумевано не виде на листи разговора. Међутим, ипак ће се појављивати када претражујете по имену разговора или приступите листи архивираних разговора.", + "Do you really want to leave \"{displayName}\"?" : "Да ли заиста желите да напустите „{displayName}”?", + "You can archive this conversation instead." : "Уместо тога, овај разговор можете да архивирате.", + "Leave conversation" : "Напусти разговор", + "You need to promote a new moderator before you can leave the conversation" : "Морате да промовишете новог модератора пре него што напустите разговор", + "Delete conversation" : "Обриши разовор", + "Do you really want to delete \"{displayName}\"?" : "Да ли заиста желите да обришете „{displayName}”?", + "Error while deleting conversation" : "Грешка приликом брисања разговора", + "Delete all chat messages" : "Обриши све чет поруке", + "Do you really want to delete all messages in \"{displayName}\"?" : "Да ли заиста желите да обришете све поруке у „{displayName}”?", + "Error while clearing chat history" : "Грешка приликом брисања чет историје", + "Be careful, these actions cannot be undone." : "Будите опрезни, ове акције не могу да се пониште", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Једном када се разговор напусти, за поновно приступање затвореном разговору је потребна позивница. Отвореном разговору може да се поново приступи у било које време.", + "Permanently delete this conversation." : "Трајно брисање оваг разговора.", + "Delete chat messages" : "Обриши чет поруке", + "Permanently delete all the messages in this conversation." : "Трајно брисање свих порука у овом разговору.", + "_%n hour_::_%n hours_" : ["%n сат","%n сата","%n сати"], + "_%n day_::_%n days_" : ["%n дан","%n дана","%n дана"], + "_%n week_::_%n weeks_" : ["%n седмица","%n седмице","%n седмица"], + "Custom expiration time" : "Произвољно време трајања", + "Message expiration disabled" : "Искључен је рок трајања поруке", + "Message expiration set: {duration}" : "Постављен је рок трајања поруке: {duration}", + "Error when trying to set message expiration" : "Грешка приликом покушаја да се постави рок трајања поруке", + "Message expiration" : "Рок трајања поруке", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Чет поруке могу да истекну након одређеног времена. Напомена: фајлови који су подељени у чету се неће обрисати за власника, али више неће бити дељени у разговору.", + "Set message expiration" : "Постави рок важења поруке", + "Current message expiration" : "Текући рок важења поруке", + "Password copied to clipboard" : "Лозинка је копирана у клипборд", + "Password could not be copied" : "Лозинка није могла да се копира", + "Guest access" : "Приступ госта", + "Breakout rooms are not allowed in public conversations." : "У јавним разговорима нису дозвољени сепареи.", + "Allow guests to join this conversation via link" : "Дозволи да гости приступе разговору путем линка", + "Password protection" : "Заштита лозинком", + "This conversation is password-protected. Guests need password to join" : "Овај разговор је заштићен лозинком. Гости морају да наведу лозинку ако желе да се придруже", + "Password protection is needed for public conversations" : "За јавне разговоре је обавезна заштита лозинком", + "Set a password" : "Постави лозинку", + "Change password" : "Измени лозинку", + "Enter new password" : "Унесите нову лозинку", + "Save password" : "Сачувај лозинку", + "Copy password" : "Копирај лозинку", + "Guests are allowed to join this conversation via link" : "Гости могу да приступе овом разговору путем линка", + "Guests are not allowed to join this conversation" : "Гости не могу да приступе овом разговору", + "Resend invitations" : "Поново пошаљи позивнице", + "This conversation is open to both registered users and users created with the Guests app" : "Овај разговор је отворен и за регистроване и за кориснике креиране апликацијом Гости", + "This conversation is open to registered users" : "Овај разговор је отворен за регистроване кориснике", + "This conversation is limited to the current participants" : "Овај разговор је ограничен на тренутне учеснике", + "You opened the conversation to both registered users and users created with the Guests app" : "Отворили сте разговор свим регистрованим корисницима и корисницима креиранима апликацијом Гости", + "Error occurred when opening or limiting the conversation" : "Дошло је до грешке током отварања или ограничавања разговора", + "Open conversation to registered users, showing it in search results" : "Отвори разговор за регистроване кориснике и приказуј га у резултатима претраге", + "Also open to users created with the Guests app" : "Такође је отворен корисницима креираним апликацијом Гости", + "Open conversation" : "Отвори разговор", + "Set language spoken in calls" : "Поставите језике који се говоре у позивима", + "Languages could not be loaded" : "Нису могли да се учитају језици", + "Loading languages …" : "Језици се учитавају", + "Invalid language" : "Неисправни језик", + "Default language (English)" : "Подразумевани језик (енглески)", + "Default live transcription language set" : "Постављен је подразумевани језик за транскрипцију уживо", + "Live transcription language set: {languageName}" : "Постављени језик за транскрипцију уживо: {languageName}", + "Error when trying to set live transcription language" : "Грешка приликом покушаја постављања језика за транскрипцију уживо", + "Start time: {date}" : "Време почетка: {date}", + "Start time has been updated" : "Ажурирано је време почетка", + "Error occurred while updating start time" : "Дошло је до грешке приликом ажурирања времена почетка", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Укључивање предсобља ће да из текућег позива уклони све учеснике који нису модератори.", + "Enable lobby, restricting the conversation to moderators" : "Укључи предсобље и ограничи разговор само на модераторе", + "Meeting start time" : "Време почетка састанка", + "Start time (optional)" : "Време почетка (опционо)", + "Import email participants" : "Увези и-мејл учеснике", + "You can import a list of email participants from a CSV file." : "Листу и-мејл учесника можете да увезете из CSV фајла.", + "Poll drafts" : "Нацрти гласања", + "Browse poll drafts" : "Прегледај нацрте гласања", + "Error occurred when locking the conversation" : "Дошло је до грешке приликом закључавања разговора", + "Error occurred when unlocking the conversation" : "Дошло је до грешке приликом откључавања разговора", + "Lock conversation" : "Закључај разговор", + "This will also terminate the ongoing call." : "Ово ће такође да прекине текући позив.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Закључај разговор и спречи све да објављују поруке или започињу позиве", + "Edit" : "Измени", + "More information" : "Још информација", + "Delete" : "Избриши", + "Add new bridged channel to current conversation" : "Додај нови премошћени канал у текући разговор", + "unknown state" : "непознато стање", + "running" : "извршава се", + "not running, check Matterbridge log" : "не извршава се, погледајте Matterbridge дневник", + "not running" : "не извршава се", + "Bridge saved" : "Мост је сачуван", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Са Matterbridge можете да премостите канале са разних система за тренутну размену порука.", + "More info on Matterbridge" : "Више информација о Matterbridge", + "Messaging systems" : "Системи за размену порука", + "Enable bridge" : "Укључи мост", + "Show Matterbridge log" : "Прикажи Matterbridge дневник", + "Log content" : "Садржај дневника", + "Only moderators are allowed to mention @all" : "Само модератори смеју да помену @all", + "All participants are allowed to mention @all" : "Сви учесници смеју да помену @all", + "Participants are now allowed to mention @all." : "Учесници не смеју да помену @all.", + "Mentioning @all has been limited to moderators." : "Помињање @all је ограничено на модераторе.", + "Allow participants to mention @all" : "Дозволи да учесници помену @all", + "Mention permissions" : "Дозволе за помињање", + "Notifications" : "Обавештења", + "Notify about calls in this conversation" : "Обавести о позивима у овом разговору", + "Important conversation" : "Битан разговор", + "\"Do not disturb\" user status is ignored for important conversations" : "Кориснички статус „Не узнемиравај” се игнорише за важне разговоре", + "Sensitive conversation" : "Осетљиви разговор", + "Message preview will be disabled in conversation list and notifications" : "Преглед поруке ће се сакрити у листи разговора и у обавештењима", + "Recording consent is required for calls in this conversation" : "Сагласност за снимање се захтева за позиве у овом разговору", + "Recording consent is not required for calls in this conversation" : "Сагласност за снимање није потребна за позиве у овом разговору", + "Recording consent requirement was updated" : "Ажурирано је подешавање захтева за сагласност снимања", + "Error occurred while updating recording consent" : "Дошло је до грешке приликом ажурирања сагласности за снмање", + "Recording Consent" : "Сагласност за снимање", + "Recording consent cannot be changed once a call or breakout session has started." : "Када се покрене позив или сесија сепареа, пристанак на снимање не може да се измени.", + "Require recording consent before joining call in this conversation" : "Захтевај сагласност за снимање пре приступања позиву у овом разговору", + "Recording consent is required for all calls" : "Сагласност за снимање се захтева за све позиве", + "SIP dial-in is now possible without PIN requirement" : "SIP приступ је сада могућ без уношења PIN", + "SIP dial-in is now enabled" : "Сада је укључен SIP приступ", + "SIP dial-in is now disabled" : "Сада је искључен SIP приступ", + "Error occurred when enabling SIP dial-in" : "Дошло је до грешке приликом укључивања SIP приступа", + "Error occurred when disabling SIP dial-in" : "Дошло је до грешке приликом искључивања SIP приступа", + "Phone and SIP dial-in" : "Телефонски и SIP приступ", + "Enable phone and SIP dial-in" : "Уљкучи телефонски и SIP приступ", + "Allow to dial-in without a PIN" : "Дозволи приступ без PIN", + "Ongoing" : "Траје", + "{dayPrefix} {dateTime}" : "{dayPrefix} од {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n особа је прихватила","%n особа су прихватиле","%n особа је прихватило"], + "_%n person declined_::_%n people declined_" : ["%n особа је одбила","%n особа су одбиле","%n особа је одбило"], + "_and %n other attachment_::_and %n other attachments_" : ["и још %n прилог","и још %n прилога","и још %n прилога"], + "With {displayName}" : "Са {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Прикажи прилог", + "Join" : "Придружи се", + "View conversation" : "Прикажи разговор", + "View event on Calendar" : "Прикажи догађај у Календару", + "Error while creating the conversation" : "Грешка приликом креирања разговора", + "Hello, {displayName}" : "Здраво, {displayName}", + "Start meeting now" : "Започни састанак одмах", + "Give your meeting a title" : "Дајте наслов свом састанку", + "Create and copy link" : "Креирај и копирај линк", + "Create a new conversation" : "Креирај нови разговор", + "Join open conversations" : "Придружи се отвореном разговору", + "Call a phone number" : "Позови телефонски број", + "Scroll backward" : "Скролуј уназад", + "Scroll forward" : "Скролуј унапред", + "Schedule meetings" : "Закажи састанке", + "You don't have any upcoming meetings" : "Немате ниједан предстојећи састанак", + "Open calendar" : "Отвори календар", + "Unread mentions" : "Непрочитана помињања", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Овде ће се појавити поруке у којима сте поменути. Људе можете да поменете тако што откуцате @ испред њиховог имена", + "Upcoming reminders" : "Предстојећи подсетници", + "Message reminders" : "Подсетници о порукама", + "Set a reminder on a message to be notified" : "Поставите подсетник на поруку да би сте били обавештени", + "Start a group conversation" : "Започни групни разговор", + "Create conversation" : "Креирај разговор", + "Enter your name" : "Унесите Ваше име", + "Submit name and join" : "Поднеси име и приступи", + "Do you already have an account?" : "Да ли већ имате налог?", + "Log in" : "Пријава", + "Error while verifying uploaded file" : "Грешка током провере отпремљеног фајла", + "Uploaded file is verified" : "Отпремљени фајл је проверен", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Формат садржаја су вредности раздвојене запетом (CSV):
- Линија заглавља је потребна и мора да се подудара са \"name\",\"email\" или само \"email\"
- Једна ставка по линији (нпр. \"Петар Петровић\",\"pera@primer.tld\")", + "Participants added successfully" : "Учесници су успешно додати", + "Error while adding participants" : "Грешка приликом додавања учесника", + "Import a file" : "Увези фајл", + "Browse" : "Прегледај", + "Verifying uploaded file …" : "Отпремљени фајл се потврђује", + "This might take a moment" : "Ово би могло мало да потраје", + "Send invitations" : "Пошаљи позивнице", + "_%n invalid email_::_%n invalid emails_" : ["%n неисправан и-мејл","%n неисправна и-мејла","%n неисправних и-мејлова"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n и-мејл је већ увезен или је дупликат","%n и-мејла су већ увезени или су дупликати","%n и-мејлова је већ увезено или су дупликати"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n позивница може да се пошаље","%n позивнице могу да се пошаљу","%n позивница може да се пошаље"], + "An error occurred while calling a phone number" : "Дошло је до грешке током позивања телефонског броја", + "Phone number could not be called: {error}" : "Телефонски број не може да се позове: {error}", + "Phone number could not be called" : "Телефонски број не може да се позове", + "Search participants or phone numbers" : "Претражи учеснике или телефонске бројеве", + "Creating the conversation …" : "Разговор се креира", + "Mark as read" : "Означи као прочитано", + "Mark as unread" : "Означи као непрочитано", + "Remove from favorites" : "Уклони из омиљених", + "Add to favorites" : "Додаје у омиљене", + "Unarchive conversation" : "Деархивирај разговор", + "Ignore \"Do not disturb\"" : "Игнориши „Не узнемиравај”", + "You need to promote a new moderator before you can leave the conversation." : "Морате унапредити новог модератора пре него што напустите разговор.", + "Conversation actions" : "Акције разговора", + "Notify about calls" : "Обавести о позивима", + "Hide message text" : "Сакриј текст поруке", + "Pending invitations" : "Позивнице на чекању", + "From {user} at {remoteServer}" : "Од {user} на {remoteServer}", + "Decline invitation" : "Одбиј позивницу", + "Accept invitation" : "Прихвати позивницу", + "No pending invitations" : "Нема позивница на чекању", + "Home" : "Почетна", + "Unread" : "Непрочитано", + "Mentions" : "Помињања", + "Meetings" : "Састанци", + "Alphabetically" : "Абецедно", + "No followed threads" : "Нема низова које пратите", + "No matches found" : "Нема подударања", + "No conversations found" : "Није пронађен ниједан разговор", + "You have no archived conversations." : "Немате ниједан архивирани разговор.", + "Subscribe to an existing thread or start your own." : "Претплатите се не постојећи низ или започните свој.", + "You have no unread mentions." : "Немате помињања која нисте прочитали.", + "You have no unread messages." : "Немате порука која нисте прочитали.", + "An error occurred while performing the search" : "Грешка приликом претраге", + "Conversation list" : "Листа разговора", + "Filter conversations by" : "Филтрирај разговоре по", + "Unread messages" : "Непрочитане поруке", + "Meeting conversations" : "Разговори у састанку", + "Clear filters" : "Уклони филтере", + "New personal note" : "Нова лична белешка", + "Back to conversations" : "Назад на разговоре", + "Archived conversations" : "Архивирани разговори", + "Threads" : "Нити", + "Clear filter" : "Очисти филтер", + "Show more threads" : "Прикажи још нити", + "App settings" : "Подешавања апликације", + "Users" : "Корисници", + "Groups" : "Групе", + "Teams" : "Тимови", + "Federated users" : "Федерисани корисници", + "New private conversation" : "Нови приватни разговор", + "Other sources" : "Остали извори", + "Open conversations" : "Отвори разговор", + "No search results" : "Нема резултата претраге", + "Users, groups and teams" : "Корисници, групе и тимови", + "Users and groups" : "Корисници и групе", + "Users and teams" : "Корисници и тимови", + "Groups and teams" : "Групе и тимови", + "New group conversation" : "Нови групни разговор", + "The meeting will start soon" : "Састанак ће ускоро да почне", + "This meeting is scheduled for {startTime}" : "Овај састанак је заказан за {startTime}", + "You are currently waiting in the lobby" : "Тренутно чекате у лобију", + "Select microphone" : "Изаберите микрофон", + "No microphone available" : "Нема доступног микрофона", + "Select speaker" : "Изаберите говорника", + "No speaker available" : "Није доступан ниједан говорник", + "Select camera" : "Изаберите камеру", + "No camera available" : "Нема доступне камере", + "Select a device" : "Изаберите уређај", + "Playing …" : "Пушта се", + "Test speakers" : "Тест звучника", + "Test" : "Тест", + "Devices" : "Уређаји", + "Backgrounds" : "Позадине", + "No audio" : "Нема звука", + "No camera" : "Без камере", + "Display video as you will see it (mirrored)" : "Видео се приказује онако како га ви видите (у огледалу)", + "Display video as others will see it" : "Видео се приказује онако како виде остали", + "Calls are not supported in your browser" : "Ваш прегледач не подржава позиве", + "Access to microphone is only possible with HTTPS" : "Приступ микрофону је могућ само кроз HTTPS протокол", + "Access to microphone was denied" : "Приступ микрофону је одбијен", + "Error while accessing microphone" : "Грешка приликом приступања микрофону", + "Access to camera is only possible with HTTPS" : "Приступ камери је могућ само кроз HTTPS протокол", + "The call is being recorded." : "Позив се снима.", + "The call might be recorded." : "Овај позив би могао да се снима.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Може се снимати ваш глас, видео са камере и садржај екрана који делите. Пре него што приступите позиву, морате дати своју сагласност.", + "Give consent to the recording of this call" : "Дајте сагласност за снимање овог позива", + "Show more info" : "Прикажи више информација", + "Audio is not available" : "Није доступан аудио", + "Video is not available" : "Није доступан видео", + "Start recording immediately with the call" : "Одмах започни снимање заједно са позивом", + "Notify all participants about this call" : "Обавести све учеснике о овом позиву", + "Apply settings" : "Примени подешавања", + "Select virtual office background" : "Изаберите позадину виртуелне канцеларије", + "Select virtual home background" : "Изаберите позадину виртуелног дома", + "Select virtual abstract background" : "Изаберите апстрактну виртуелну позадину", + "Select virtual beach background" : "Изаберите позадину виртуелне плаже", + "Select virtual park background" : "Изаберите позадину виртуелног парка", + "Select virtual theater background" : "Изаберите позадину виртуелног позоришта", + "Select virtual library background" : "Изаберите позадину виртуелне библиотеке", + "Select virtual space station background" : "Изаберите позадину виртуелне свемирске станице", + "Error while uploading the file" : "Грешка приликом отпремања фајла", + "Select a file" : "Изаберите фајл", + "Invalid path selected" : "Одабрана неисправна путања", + "Select virtual background from file {fileName}" : "Изаберите виртуелну позадину из фајла {fileName}", + "Blur" : "Замућење", + "Upload" : "Отпреми", + "Files" : "Фајлови", + "(editing)" : "(уређивање)", + "(edited)" : "(уређено)", + "The message has expired or has been deleted" : "Рок важења поруке је истекао или је обрисана", + "Cancel quote" : "Откажи цитат", + "24 hours" : "24 сата", + "7 days" : "7 дана", + "Clear reminder – {timeLocale}" : "Обриши подсетник – {timeLocale}", + "Edited by {actor}" : "Уредио је {actor}", + "Message text copied to clipboard" : "Текст поруке је копиран у клипборд", + "Message text could not be copied" : "Текст поруке није могао да се копира", + "Message forwarded to \"Note to self\"" : "Порука је прослеђена у „Белешка самом себи”", + "Error while forwarding message to \"Note to self\"" : "Грешка приликом прослеђивања поруке у „Белешка самом себи”", + "A reminder was successfully removed" : "Подсетник је успешно уклоњен", + "Error occurred when removing a reminder" : "Дошло је до грешке приликом уклањања подсетника", + "A reminder was successfully set at {datetime}" : "Подсетник је успешно постављен на {datetime}", + "Error occurred when creating a reminder" : "Дошло је до грешке током креирања подсетника", + "Add a reaction to this message" : "Додај реакцију на ову поруку", + "Reply" : "Одговори", + "More actions" : "Још акција", + "Set reminder" : "Постави подсетник", + "Reply privately" : "Одговори приватно", + "Edit message" : "Уреди поруку", + "Copy message" : "Копирај поруку", + "Copy message link" : "Копирај линк поруке", + "Go to file" : "Иди на фајл", + "Download file" : "Преузми фајл", + "Go to thread" : "Иди на нит", + "Edit thread details" : "Уреди детаље о низу", + "Forward message" : "Проследи поруку", + "Translate" : "Превођење", + "Set custom reminder" : "Постави произвољни подсетник", + "Close reactions menu" : "Затвори мени реакција", + "React with {emoji}" : "Реагуј са {emoji}", + "React with another emoji" : "Реагуј са другим емођијем", + "Choose a conversation to forward the selected message." : "Изаберите разговор на који треба да се проследи изабрана порука.", + "Error while forwarding message" : "Грешка приликом прослеђивања поруке", + "The message has been forwarded to {selectedConversationName}" : "Порука је прослеђена у {selectedConversationName}", + "Dismiss" : "Уклони", + "Go to conversation" : "Иди на разговор", + "Detect language" : "Откриј језик", + "The message could not be translated" : "Није могла да се преведе порука", + "Translation copied to clipboard" : "Превод је копиран у клипборд", + "Translation could not be copied" : "Превод није могао да се је копира", + "Translate message" : "Преведи поруку", + "Source language to translate from" : "Изворни језик са ког се преводи", + "Translate from" : "Преведи са", + "Target language to translate into" : "Циљни језик на који се преводи", + "Translate to" : "Преведи на", + "Translating" : "Преводи се", + "Copy translated text" : "Копирај преведени текст", + "Send now" : "Пошаљи одмах", + "Message read by everyone who shares their reading status" : "Поруку су прочитали сви који деле свој статус читања", + "Message sent" : "Порука послата", + "Sent without notification" : "Послато без обавештења", + "Deleting message" : "Брисање поруке", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Порука је успешно обрисана, али је бот или Matterbridge тако подешен да је порука већ прослеђена осталим сервисима", + "Message deleted successfully" : "Порука је успешно обрисана", + "Message could not be deleted because it is too old" : "Порука није могла да се обрише јер је сувише стара", + "Only normal chat messages can be deleted" : "Могу да се обришу само обичне чет поруке", + "An error occurred while deleting the message" : "Дошло је до грешке приликом брисања поруке", + "Your browser does not support playing audio files" : "Ваш прегледач не подржава пуштање звучних фајлова", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} у {board}", + "Deck Card" : "Шпил картица", + "Remove {fileName}" : "Уклони {fileName}", + "Open this location in OpenStreetMap" : "Отвори ову локацију у OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n одговор","%n одговора","%n одговора"], + "Sending message" : "Слање поруке", + "Failed to send the message. Click to try again" : "Није успело слање поруке. Кликните да се покуша поново", + "Not enough free space to upload file" : "Нема довољно слободног простора за отпремање фајла", + "You cannot send messages to this conversation at the moment" : "Тренутно не можете да шаљете поруке у овај разговор", + "Could not update the message" : "Није могла да се ажурира порука", + "You voted" : "Гласали сте", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Нацрт гласања • %n опција","Нацрт гласања • %n опција","Нацрт гласања • %n опција"], + "_%n vote_::_%n votes_" : ["%n глас","%n гласа","%n гласова"], + "Edit poll draft" : "Уреди нацрт гласања", + "Delete poll draft" : "Обриши нацрт гласања", + "Open poll" : "Отворено гласање", + "See results" : "Поглдајте резултате", + "Reactions" : "Реакције", + "No permission to post reactions in this conversation" : "Нема дозвола за објављивање реакција у овом разговору", + "and {participant}" : "и {participant}", + "_and %n other participant_::_and %n other participants_" : ["и још %n други учесник","и још %n друга учесника","и још %n других учесника"], + "Show all reactions" : "Прикажи сва реаговања", + "Add more reactions" : "Додај још реакција", + "Show or collapse system messages" : "Прикажи или сажми системске поруке", + "No messages" : "Нема порука", + "All messages have expired or have been deleted." : "Свим порукама је истекао рок важења или су обрисане.", + "Unpin" : "Откачи", + "Cancel search" : "Откажи претрагу", + "Add a phone number" : "Додаје телефонски број", + "Error: A password is required to create the conversation." : "Грешка: потребна је лозинка да би се креирао разговор.", + "All set, the conversation \"{conversationName}\" was created." : "Све је завршено, креиран је разговор „{conversationName}”.", + "Create a new group conversation" : "Креирај нови групни разговор", + "Add participants" : "Додај учеснике", + "Maximum length exceeded ({maxlength} characters)" : "Прекорачена је максимална дужина ({maxlength} карактера)", + "Conversation visibility" : "Видљивост разговора", + "Allow guests to join via link" : "Дозволи да гости приступе путем линка", + "Enter password" : "Унесите лозинку", + "This conversation has been locked" : "Разговор је закључан", + "No permission to post messages in this conversation" : "Нема дозвола за објављивање порука у овај разговор", + "Joining conversation …" : "Приступа се разговору...", + "Write a message without notification" : "Напиши поруку без обавештења", + "Create a thread silently" : "Креирај низ у тишини", + "Create a thread" : "Креирај нит", + "Send message silently" : "Пошаљи поруку у тишини", + "Send message" : "Пошаљи поруку", + "Send without notification" : "Пошаљи без обавештења", + "The participant will not be notified about new messages" : "Учесник неће бити обавештен о новим порукама", + "Participants will not be notified about new messages" : "Учесници неће бити обавештени о новим порукама", + "Thread title is required" : "Потребан је наслов низа", + "Message text is required" : "Потребан је текст поруке", + "The message could not be edited" : "Порука није могла да се уреди", + "File to share" : "Фајл за дељење", + "File upload is not available in this conversation" : "У овај разговор не може да се отпреми фајл", + "Add emoji" : "Додај емођи", + "Adding a mention will only notify users who did not read the message." : "Додавање помињања ће обавестити само кориснике који још увек нису прочитали поруку.", + "Thread title" : "Наслов низа", + "Send later" : "Пошаљи касније", + "Cancel editing" : "Откажи уређивање", + "{user} is out of office and might not respond." : "{user} је ван канцеларије у можда неће одговорити.", + "Absence period: {startDate} - {endDate}" : "Период одсутности: {startDate} – {endDate}", + "Replacement:" : "Замена:", + "Share from {nextcloud}" : "Дељење од {nextcloud}", + "Share from Files" : "Подели из Фајлова", + "Share files to the conversation" : "Дели фајлове у разговор", + "Upload from device" : "Отпреми са уређаја", + "Create new poll" : "Направи ново гласање", + "Smart picker" : "Паметни бирач", + "Record voice message" : "Сними гласовну поруку", + "End recording and send" : "Заврши снимање и пошаљи", + "Dismiss recording" : "Одбаци снимак", + "Access to the microphone was denied" : "Приступ микрофону је одбијен", + "Microphone either not available or disabled in settings" : "Микрофон или није доступан, или је искључен у подешавањима", + "Error while recording audio" : "Грешка приликом снимања звука", + "Generating summary of unread messages …" : "Генерише се резиме непрочитаних порука", + "Summary is AI generated and might contain mistakes" : "Резиме је генерисала AI и можда садржи грешке", + "Error occurred during a summary generation" : "Дошло је до грешке током генерисања резимеа", + "New file" : "Нови фајл", + "Blank" : "Празно", + "Error while creating file" : "Грешка приликом креирања фајла", + "Create and share a new file" : "Креирај и подели нови фајл", + "Name of the new file" : "Име новог фајла", + "Create file" : "Креирај фајл", + "Someone is typing …" : "Неко куца...", + "{user1} is typing …" : "{user1} куца…", + "{user1} and {user2} are typing …" : "{user1} и {user2} куцају…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} и {user3} куцају…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} и још %n корисник куцају…","{user1}, {user2}, {user3} и још %n корисника куцају…","{user1}, {user2}, {user3} и још %n корисника куцају…"], + "Add more files" : "Додај још фајлова", + "Send" : "Пошаљи", + "In this conversation {user} can:" : "Корисник {user} у овом разговору може да:", + "Edit default permissions for participants in {conversationName}" : "Уреди подразумеване дозволе за учеснике разговора {conversationName}", + "Start a call" : "Започни позив", + "Skip the lobby" : "Прескочи предсобље", + "Can post messages and reactions" : "Могу да се објаве поруке и реакције", + "Enable the microphone" : "Укључи микрофон", + "Enable the camera" : "Укључи камеру", + "Share the screen" : "Дели екран", + "Update permissions" : "Ажурирај дозволе", + "Updating permissions" : "Ажурирање дозвола", + "No poll drafts" : "Нема ниједног нацрта гласања", + "There is no poll drafts yet saved for this conversation" : "За овај разговор још увек није сачуван ниједан нацрт гласања", + "Create poll in {name}" : "Креирај гласање у {name}", + "Create poll" : "Направи гласање", + "Error while importing poll" : "Грешка током увоза гласања", + "Question" : "Питање", + "Ask a question" : "Постави питање", + "Import draft from file" : "Увези нацрт из фајла", + "Answers" : "Одговори", + "Answer {option}" : "Одговор {option}", + "Delete poll option" : "Обриши опцију гласања", + "Add answer" : "Додај одговор", + "Settings" : "Поставке", + "Anonymous poll" : "Анонимно гласање", + "Multiple answers" : "Вишеструки одговори", + "Save as draft" : "Сачувај као нацрт", + "Export draft to file" : "Извези нацрт из фајла", + "You voted for this option" : "Гласали сте за ову опцију", + "End poll" : "Заврши гласање", + "Change your vote" : "Измените свој глас", + "Results" : "Резултати", + "Voted participants" : "Учесници који су гласали", + "Send a message to \"{roomName}\"" : "Пошаљи поруку у „{roomName}”", + "Hide list of participants" : "Сакриј листу учесника", + "Show list of participants" : "Прикажи листу учесника", + "Assistance requested in {roomName}" : "Затражена је помоћ у соби {roomName}", + "The message was sent to \"{roomName}\"" : "Порука је послата у „{roomName}”", + "Dismiss request for assistance" : "Одбаци захтев за помоћ", + "Send message to room" : "Пошаљи поруку у собу", + "Back to main room" : "Назад на главну собу", + "Back to your room" : "Назад на вашу собу", + "Message all rooms" : "Пошаљи поруку у све собе", + "Start session" : "Започни сесију", + "Start a call before you start a breakout room session" : "Покрените позив пре него што започнете сесију сепареа", + "Stop session" : "Заустави сесију", + "The message was sent to all breakout rooms" : "Порука је послата у све сепарее", + "Send a message to all breakout rooms" : "Пошаљи поруку у све сепарее", + "Breakout rooms are not started" : "Сепареи нису покренути", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Позиви без позадинског механизма високих перформанси могу имати проблеме са везом и да проузрокују велико оптерећење уређаја. {linkstart}Сазнајте више{linkend}", + "Talk setup incomplete" : "Talk подешавање није довршено", + "Disable lobby" : "Искључи предсобље", + "Settings for participant \"{user}\"" : "Подешавања за учесника „{user}”", + "Participant \"{user}\"" : "Учесник „{user}”", + "moderator" : "модератор", + "bot" : "bot", + "guest" : "гост", + "Ringing …" : "Звони", + "Call rejected" : "Позив је одбијен", + "{time} talking …" : "{time} говори …", + "{time} talking time" : "{time} време разговора", + "Raised their hand" : "Подигао је руку", + "Joined with video" : "Приступио са видеом", + "Joined via phone" : "Приступио телефоном", + "Joined with audio" : "Приступио са звуком", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Дужина текста мора бити краћа или једнака од {maxLength} карактера. Дужина вашег текућег текста је {charactersCount} карактера.", + "Remove group and members" : "Уклони групу и чланове", + "Remove team and members" : "Уклони тим и чланове", + "Remove participant" : "Уклони учесника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Да ли заиста желите да уклоните групу „{displayName}” и све њене чланове из овог разговора?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Да ли заиста желите да уклоните тим „{displayName}” и све његове чланове из овог разговора?", + "Do you really want to remove {displayName} from this conversation?" : "Да ли заиста желите да уклоните {displayName} из овог разговора?", + "Notification was sent to {displayName}" : "Обавештење је послато на име {displayName}", + "Could not send notification to {displayName}" : "Није могло да се пошаље обавештење {displayName}", + "Permissions granted to {displayName}" : "Одобрена је дозвола за {displayName}", + "Could not modify permissions for {displayName}" : "Нису могле да се измене дозволе за {displayName}", + "Permissions removed for {displayName}" : "Укинуте су дозволе за {displayName}", + "Permissions set to default for {displayName}" : "Дозволе за {displayName} су постављене на подразумеване вредности", + "Phone number could not be hung up" : "Није успело прекидање везе са бројем телефона", + "Phone number could not be put on hold" : "Број телефона није могао да се постави на чекање", + "Phone number could not be muted" : "Није успело искључивање микрофона за број телефона", + "Phone number could not be unmuted" : "Није успело укључивање микрофона за број телефона", + "DTMF message could not be sent" : "Није могла да се пошаље DTMF порука", + "Phone number copied to clipboard" : "Број телефона је копиран у клипборд", + "Phone number could not be copied" : "Није успело копирање броја телефона", + "in the lobby" : "у предсобљу", + "Dial out phone" : "Окрени број", + "Hang up phone" : "Прекини везу", + "Move back to lobby" : "Премести назад у предсобље", + "Move to conversation" : "Премести у разговор", + "Dial-in PIN" : "PIN за приступ", + "Demote from moderator" : "Скини улогу модератора", + "Promote to moderator" : "Унапреди на модератора", + "Resend invitation" : "Поново пошаљи позивницу", + "Send call notification" : "Пошаљи обавештење о позиву", + "Dial out phone number" : "Окрени телефонски број", + "Resume call for phone number" : "Настави позив за телефонски број", + "Put phone number on hold" : "Стави телефонски број на чекање", + "Unmute phone number" : "Укључи звук за телефонски број", + "Mute phone number" : "Искључи микрофон за телефонски број", + "Copy phone number" : "Копирај телефонски број", + "Reset custom permissions" : "Ресетуј произвољне дозволе", + "Grant all permissions" : "Одобри све дозволе", + "Remove all permissions" : "Уклони све дозволе", + "Also ban from this conversation" : "Такође забрани за овај разговор", + "Internal note (reason to ban)" : "Интерна напомена (разлог забране)", + "Remove" : "Уклони", + "Permissions modified for {displayName}" : "Измењене су дозволе за {displayName}", + "Add users, groups or teams" : "Додај кориснике, групе или тимове", + "Add users or groups" : "Додај кориснике или групе", + "Add users or teams" : "Додај кориснике или тимове", + "Add users" : "Додај кориснике", + "Add groups or teams" : "Додај групе или тимове", + "Add groups" : "Додај групе", + "Add teams" : "Додај тимове", + "Add other sources" : "Додај остале изворе", + "Add emails" : "Додај и-мејлове", + "Integrations" : "Интеграције", + "Add federated users" : "Додај федерисане кориснике", + "Searching …" : "Тражим…", + "Search for more users" : "Претражи још корисника", + "You can search or add participants via name, email, or Federated Cloud ID" : "Учеснике можете да претражујете или додате помоћу имена, и-мејла или ID здруженог облака", + "Search or add participants" : "Претражи или додај учеснике", + "Invitation was sent to {actorId}" : "Позивница је послата на {actorId}", + "An error occurred while adding the participants" : "Дошло је до грешке приликом додавања учесника", + "A new group conversation with selected participant will be created" : "Креираће се нови групни разговор са изабраним учесником", + "Participants" : "Учесници", + "Participants ({count})" : "Учесника ({count})", + "Open chat" : "Отвори ћаскање", + "You have new unread messages in the chat." : "Имате нове непрочитане поруке у чету.", + "You have been mentioned in the chat." : "Поменути сте у чету.", + "Search messages" : "Претражи поруке", + "Chat" : "Ћаскање", + "Details" : "Детаљи", + "Shared items" : "Дељене ставке", + "Search in {name}" : "Тражи у {name}", + "Threads in {name}" : "Нити у {name}", + "{actor} in {conversation}" : "{actor} у {conversation}", + "Search messages …" : "Претражују се поруке", + "Search options" : "Опције претраге", + "From User" : "Од корисника", + "Since" : "Од", + "Until" : "До", + "No results found" : "Нема пронађених резултата", + "Load more results" : "Учитај још резултата", + "Recent threads" : "Скорашње нити", + "Projects" : "Пројекти", + "No shared items" : "Нема дељених ставки", + "Thread notifications" : "Обавештења низова", + "Thread actions" : "Акције над низовима", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Веза ка разговору", + "No open conversations found" : "Није пронађен ниједан отворени разговор", + "Either there are no open conversations or you joined all of them." : "Или нема ниједног отвореног разговора, или учествујете у свим отвореним разговорима.", + "Check spelling or use complete words." : "Проверите правопис или употребите комплетне речи.", + "Search conversations or users" : "Претрага разговора или учесника", + "Select conversation" : "Одаберите разговор", + "Number length is not valid" : "Дужина броја није исправна", + "Region code is not valid" : "Позивни број није исправан", + "Number length is too short" : "Дужина броја је сувише кратка", + "Number length is too long" : "Дужина броја је превише дугачка", + "Number is not valid" : "Број није исправан", + "Phone numbers" : "Бројеви телефона", + "Display name: {name}" : "Име за приказ: {name}", + "Edit display name" : "Уреди име за приказ", + "Display name (required)" : "Име за приказ (обавезно)", + "Save name" : "Сачувај име", + "Error while setting personal setting" : "Грешка приликом постављања личног подешавања", + "Error while saving sounds setting" : "Грешка приликом чувања поставки звукова", + "Play sounds when participants join or leave a call" : "Пусти звукове када учесници приступе позиву или када га напусте", + "Notification settings" : "Поставке обавештења", + "Default language" : "Подразумевани језик", + "Select location for attachments" : "Избор локације за прилоге", + "Error while setting attachment folder" : "Грешка приликом постављања фолдера за прилоге", + "Error while setting read status privacy" : "Грешка приликом постављања приватности статуса читања", + "Error while setting typing status privacy" : "Грешка приликом постављања приватности статуса куцања", + "Error while setting default media state" : "Грешка приликом постављања подразумеваног стања медија", + "Privacy" : "Приватност", + "Attachments folder" : "Фолдер са прилозима", + "Toggle full screen" : "Укљ./Искљ. пун екран", + "Search" : "Претрага", + "Focus the chat input" : "Фокусирање чет уноса", + "Unfocus the chat input to use shortcuts" : "Уклањање фокуса са чет уноса да би се користиле пречице", + "Edit your last message" : "Уредите своју последњу поруку", + "Shortcuts while in a call" : "Пречице током позива", + "Camera on and off" : "Укљ./Искљ. камере", + "Microphone on and off" : "Укљ./Искљ. миикрофона", + "Raise or lower hand" : "Подизање или спуштање руке", + "Push to talk or push to mute" : "Притисните да говорите или притисните да утулите", + "Zoom-in / zoom-out a screen share" : "Увећај / Умањи дељење екрана", + "Mouse wheel" : "Точкић миша", + "Start call silently" : "Започни позив у тишини", + "Start call" : "Почни позив", + "End call" : "Заврши позив", + "This call has just ended" : "Овај позив се управо завршио", + "You will be able to join the call only after a moderator starts it." : "Моћи ћете да приступите позиву само када га модератор покрене.", + "End call for everyone" : "Заврши позив за све", + "Starting the recording" : "Почиње снимање", + "Recording" : "Снимање", + "The call has been running for one hour." : "Позив траје један сат.", + "Cancel recording start" : "Откажи почетак снимања", + "Stop recording" : "Заустави снимање", + "Send a reaction" : "Пошаљи реакцију", + "React with {reaction}" : "Реагуј са {reaction}", + "All tasks done!" : "Завршени су сви задаци!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} од %n задатка","{done} од %n задатка","{done} од %n задатака"], + "Add participants to this call" : "Додај учеснике у овај разговор", + "_%n participant in call_::_%n participants in call_" : ["У позиву је %n учесник","У позиву је %n учесника","У позиву је %n учесника"], + "You are not allowed to enable screensharing" : "Није вам дозвољено да укључите дељење екрана", + "No screensharing" : "Нема дељења екрана", + "Screensharing options" : "Опције дељења екрана", + "Enable screensharing" : "Укључи дељење екрана", + "Bad sent video and screen quality." : "Лош квалитет видеа и екрана који се шаље.", + "Bad sent screen quality." : "Лош квалитет екрана.", + "Bad sent video quality." : "Лош квалитет видеа који се шаље.", + "Bad sent audio, video and screen quality." : "Лош квалитет звука, видеа и екрана који се шаље.", + "Bad sent audio and screen quality." : "Лош квалитет звука, и екрана који се шаље.", + "Bad sent audio and video quality." : "Лош квалитет звука и видеа који се шаље.", + "Bad sent audio quality." : "Лош квалитет звука који се шаље.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео док делите екран.", + "Disable background blur" : "Искључи замућење позадине", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да виде ваш екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас виде.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите ваш видео док делите екран.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде ваш екран. Да бисте поправили ситуацију, покушајте да искључите дељење вашег екрана.", + "Disable screenshare" : "Искључи дељење екрана", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите замућење позадине или ваш видео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју и виде. Да бисте поправили ситуацију, покушајте да искључите ваш видео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваша веза са интернетом или компјутер су заузети и остали учесници можда не могу да вас разумеју.", + "Screen sharing is not supported by your browser." : "Ваш веб прегледач не подржава дељење екрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Дељење екрана захтева да се страна учита HTTPS протоколом.", + "Screensharing requires the page to be loaded through HTTPS." : "Дељење екрана захтева да се страна учита преко HTTPS-а.", + "An error occurred while starting screensharing." : "Десила се грешка при покретању дељења екрана.", + "Select virtual background" : "Изаберите виртуелну позадину", + "Show your screen" : "Прикажите екран", + "Stop screensharing" : "Заустави дељење екрана", + "Mute others" : "Утули остале", + "Start recording" : "Почни снимање", + "Set up breakout rooms" : "Постави сепарее", + "Download attendance list" : "Преузми листу присутних", + "Open Calendar" : "Отвори Календар", + "Remove participant {name}" : "Уклони учесника {name}", + "Would you like to delete this conversation?" : "Да ли желите да обришете овај разговор?", + "Are you sure you want to delete this conversation?" : "Да заиста желите да обришете овај разговор?", + "Delete now" : "Обриши одмах", + "Keep" : "Задржи", + "Open dialpad" : "Отвори тастатуру", + "Select a region" : "Одаберите регију", + "Local time: {time}" : "Локално време: {time}", + "Search …" : "Претрага ...", + "Message without mention" : "Порука без помињања", + "Mention myself" : "Помени мене", + "Mention everyone" : "Помени све", + "Select a conversation" : "Изаберите разговор", + "Select a mode" : "Изаберите режим", + "You do not have permissions to access this conversation." : "Немате дозволу да приступите овом разговору.", + "Join a different conversation or start a new one." : "Приступите другом разговору, или започните нови.", + "The conversation does not exist" : "Разговор не постоји", + "Join a conversation or start a new one!" : "Приступите разговору или креирајте нови!", + "Duplicate session" : "Дупликат сесија", + "Creating and joining a conversation with \"{userid}\"" : "Креира се и приступа у разговор са „{userid}”", + "Join a conversation or start a new one" : "Придружи се разговору или започни нови", + "Error while joining the conversation" : "Грешка приликом приступања у разговор", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud корисник", + "User password" : "Корисничка лозинка", + "Talk conversation" : "Talk разговори", + "Skip TLS verification" : "Прескочи TLS потврђивање", + "Matrix server URL" : "URL матрикс сервера", + "User" : "Корисник", + "Matrix channel" : "Matrix канал", + "Mattermost server URL" : "URL Mattermost сервера", + "Mattermost user" : "Mattermost корисник", + "Team name" : "Назив тима", + "Channel name" : "Назив канала", + "Rocket.Chat server URL" : "URL Rocket.Chat сервера", + "User name or email address" : "Корисничко име или и-мејл адреса", + "Rocket.Chat channel" : "Rocket.Chat канал", + "Zulip server URL" : "URL Zulip сервера ", + "Bot user name" : "Bot корисничко име", + "Bot API key" : "Bot API кључ", + "Zulip channel" : "Zulip канал", + "API token" : "API токен", + "Slack channel" : "Slack канал", + "Server ID or name" : "ID сервера или име", + "Channel ID (prefixed with \"ID:\") or name" : "ID канала (са префиксом \"ID:\") или име", + "Channel" : "Канал", + "Login" : "Пријава", + "Chat ID" : "ID чета", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL IRC сервера (нпр. chat.freenode.net:6667)", + "Nickname" : "Надимак", + "Connection password" : "Лозинка везе", + "IRC channel" : "IRC канал", + "Channel password" : "Лозинка канала", + "NickServ nickname" : "NickServ надимак", + "NickServ password" : "NickServ лозинка", + "Use TLS" : "Користи TLS", + "Use SASL" : "Користи SASL", + "Tenant ID" : "ID станара", + "Client ID" : "ID клијента", + "Team ID" : "ID тима", + "Thread ID" : "ID нити", + "XMPP/Jabber server URL" : "URL XMPP/Jabber сервера", + "MUC server URL" : "URL MUC сервера", + "Jabber ID" : "Jabber ID", + "Media" : "Мултимедија", + "Polls" : "Гласања", + "Deck cards" : "Шпил картица", + "Voice messages" : "Гласовне поруке", + "Locations" : "Локације", + "Call recordings" : "Снимци позива", + "Audio" : "Звук", + "Show all media" : "Прикажи све медије", + "Show all files" : "Прикажи све фајлове", + "Show all polls" : "Прикажи сва гласања", + "Show all deck cards" : "Прикажи све шпилове картица", + "Show all voice messages" : "ПРикажи све гласовне поруке", + "Show all locations" : "Прикажи све локације", + "Show all call recordings" : "Прикажи све снимке позива", + "Show all audio" : "Прикажи сав звук", + "Show all other" : "Прикажи све остало", + "Follow conversation settings" : "Прати подешавања разговора", + "Group" : "Група", + "Team" : "Тим", + "You reconnected to the call" : "Поново сте се повезали на позив", + "{actor} reconnected to the call" : "{actor} се поново придружио позиву", + "You added {user0} and {user1}" : "Додали сте кориснике {user0} и {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Додали сте кориснике {user0}, {user1} и још %n учесника","Додали сте кориснике {user0}, {user1} и још %n учесника","Додали сте кориснике {user0}, {user1} и још %n учесника"], + "An administrator added you and {user0}" : "Администратор је додао вас и корисника {user0}", + "{actor} added you and {user0}" : "{actor} је додао вас и корисника {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Администратор је додао вас, корисника {user0} и још %n учесника","Администратор је додао вас, корисника {user0} и још %n учесника","Администратор је додао вас, корисника {user0} и још %n учесника"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} је додао вас, корисника {user0} и још %n учесника","{actor} је додао вас, корисника {user0} и још %n учесника","{actor} је додао вас, корисника {user0} и још %n учесника"], + "An administrator added {user0} and {user1}" : "Администратор је додао кориснике {user0} и {user1}", + "{actor} added {user0} and {user1}" : "{actor} је додао кориснике {user0} и {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Администратор је додао кориснике {user0}, {user1} и још %n учесника","Администратор је додао кориснике {user0}, {user1} и још %n учесника","Администратор је додао кориснике {user0}, {user1} и још %n учесника"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} је додао кориснике {user0}, {user1} и још %n учесника","{actor} је додао кориснике {user0}, {user1} и још %n учесника","{actor} је додао кориснике {user0}, {user1} и још %n учесника"], + "You removed {user0} and {user1}" : "Уклонили сте кориснике {user0} и {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Уклонили сте кориснике {user0}, {user1} и још %n учесника","Уклонили сте кориснике {user0}, {user1} и још %n учесника","Уклонили сте кориснике {user0}, {user1} и још %n учесника"], + "An administrator removed you and {user0}" : "Администратор је уклонио вас и корисника {user0}", + "{actor} removed you and {user0}" : "{actor} је уклонио вас и корисника {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Администратор је уклонио вас, корисника {user0} и још %n учесника","Администратор је уклонио вас, корисника {user0} и још %n учесника","Администратор је уклонио вас, корисника {user0} и још %n учесника"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} је уклонио вас, корисника {user0} и још %n учесника","{actor} је уклонио вас, корисника {user0} и још %n учесника","{actor} је уклонио вас, корисника {user0} и још %n учесника"], + "An administrator removed {user0} and {user1}" : "Администратор је уклонио кориснике {user0} и {user1}", + "{actor} removed {user0} and {user1}" : "{actor} је уклонио кориснике {user0} и {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Администратор је уклонио кориснике {user0}, {user1} и још %n учесника","Администратор је уклонио кориснике {user0}, {user1} и још %n учесника","Администратор је уклонио кориснике {user0}, {user1} и још %n учесника"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} је уклонио кориснике {user0}, {user1} и још %n учесника","{actor} је уклонио кориснике {user0}, {user1} и још %n учесника","{actor} је уклонио кориснике {user0}, {user1} и још %n учесника"], + "You and {user0} joined the call" : "Ви и {user0} сте се придружили позиву", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ви, {user0} и још %n учесник сте се придружили позиву","Ви, {user0} и још %n учесника сте се придружили позиву","Ви, {user0} и још %n учесника сте се придружили позиву"], + "{user0} and {user1} joined the call" : "{user0} и {user1} су се придружили позиву", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} и још %n учесник су се придружили позиву","{user0}, {user1} и још %n учесника су се придружили позиву","{user0}, {user1} и још %n учесника су се придружили позиву"], + "You and {user0} left the call" : "Ви и {user0} сте напустили позив", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ви, {user0} и још %n учесник сте напустили позив","Ви, {user0} и још %n учесника сте напустили позив","Ви, {user0} и још %n учесника сте напустили позив"], + "{user0} and {user1} left the call" : "{user0} и {user1} су напустили позив", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} и још %n учесник су напустили позив","{user0}, {user1} и још %n учесника су напустили позив","{user0}, {user1} и још %n учесника су напустили позив"], + "You promoted {user0} and {user1} to moderators" : "Унапредили сте кориснике {user0} и {user1} у модераторе", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе","Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе","Унапредили сте кориснике {user0}, {user1} и још %n учесника у модераторе"], + "An administrator promoted you and {user0} to moderators" : "Администратор је унапредио вас и корисника {user0} у модераторе", + "{actor} promoted you and {user0} to moderators" : "{actor} је унапредио вас и корисника {user0} у модераторе", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе","Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе","Администратор је унапредио вас, корисника {user0} и још %n учесника у модераторе"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе","{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе","{actor} је унапредио вас, корисника {user0} и још %n учесника у модераторе"], + "An administrator promoted {user0} and {user1} to moderators" : "Администратор је унапредио кориснике {user0} и {user1} у модераторе", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} је унапредио кориснике {user0} и {user1} у модераторе", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","Администратор је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе","{actor} је унапредио кориснике {user0}, {user1} и још %n учесника у модераторе"], + "You demoted {user0} and {user1} from moderators" : "Скинули сте улогу модератора за кориснике {user0} и {user1}", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Скинули сте улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "An administrator demoted you and {user0} from moderators" : "Администратор је скинуо улогу модератора за вас и за корисника {user0}", + "{actor} demoted you and {user0} from moderators" : "{actor} је скинуо улогу модератора за вас и за корисника {user0}", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","Администратор је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника","{actor} је скинуо улогу модератора за вас, корисника {user0} и за још %n учесника"], + "An administrator demoted {user0} and {user1} from moderators" : "Администратор је скинуо улогу модератора за кориснике {user0} и {user1}", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} је скинуо улогу модератора за кориснике {user0} и {user1}", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","Администратор је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника","{actor} је скинуо улогу модератора за кориснике {user0}, {user1} и за још %n учесника"], + "You:" : "Ви:", + "You: {lastMessage}" : "Ви: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(ви сте уредили)", + "(edited by a deleted user)" : "(уредио је обрисани корисник)", + "(edited by {moderator})" : "(уредио {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Покушавате да приступите разговору док имате активну сесију у другом прозору или на другом уређају. Nextcloud Talk тренутно то не подржава. Шта желите да урадите?", + "Leave this page" : "Напусти ову страницу", + "Join here" : "Приступи овде", + "Deck card has been posted to {conversation}" : "Шпил карата је објављен у {conversation}", + "An error occurred while posting deck card to conversation" : "Дошло је до грешке током објављивања шпила картица у разговор", + "Post to a conversation" : "Објави у разговор", + "Post to conversation" : "Објави у разговор", + "The recording failed. Please contact your administrator." : "Снимање није успело. Молимо вас да се обратите свом администратору.", + "Location has been posted to {conversation}" : "Локација је објављена у {conversation}", + "An error occurred while posting location to conversation" : "Дошло је до грешке током објављивања локације у разговор", + "Share to a conversation" : "Дели у разговор", + "Share to conversation" : "Дели у разговор", + "In conversation" : "У разговору", + "Search in conversation: {conversation}" : "Претражи у разговору: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Тренутно су ваши захтеви пригушени услед заштите од грубе силе.", + "Error while clearing conversation history" : "Грешка приликом брисања историје разговора", + "Error occurred while allowing guests" : "Дошло је до грешке током дозвољавања гостију", + "Error occurred while disallowing guests" : "Дошло је до грешке током забране гостију", + "Error occurred when restricting the conversation to moderator" : "Дошло је до грешке током ограничавања разговора на модератора", + "Error occurred when opening the conversation to everyone" : "Дошло је до грешке током отварања разговора за све", + "Conversation password has been saved" : "Сачувана је лозинка разговора", + "Conversation password has been removed" : "Уклоњена је лозинка разговора", + "Error occurred while saving conversation password" : "Дошло је до грешке током чувања лозинке разговора", + "Call recording is starting." : "Покреће се снимање позива.", + "Call recording stopped while starting." : "Снимање позива је заустављено током покретања.", + "Call recording stopped. You will be notified once the recording is available." : "Заустављено је снимање позива. Бићете обавештени када снимак буде доступан.", + "Conversation picture set" : "Постављена је слика разговора", + "Conversation picture deleted" : "Обрисана је слика разговора", + "Could not delete the conversation picture" : "Није могла да се обрише слика разговора", + "Could not remove the automatic expiration" : "Не може да се уклони аутоматско време истека", + "Could not post message: {errorMessage}" : "Порука није могла да се објави: {errorMessage}", + "Participant is banned successfully" : "Учесник је успешно забрањен", + "Error while banning the participant" : "Грешка приликом забране учесника", + "An error occurred while fetching the participants" : "Грешка приликом дохватања учесника", + "Could not send invitation to {actorId}" : "Није могла да се пошаље позивница на {actorId}", + "Invitations sent" : "Позивнице су послате", + "Error occurred when sending invitations" : "Дошло је до грешке приликом слања позивница", + "Failed to join the conversation." : "Није успело приступање позиву.", + "An error occurred while creating breakout rooms" : "Дошло је до грешке приликом креирања сепареа", + "An error occurred while re-ordering the attendees" : "Дошло је до грешке приликом мењања редоследа учесника", + "An error occurred while deleting breakout rooms" : "Дошло је до грешке приликом брисања сепареа", + "An error occurred while starting breakout rooms" : "Дошло је до грешке приликом покретања сепареа", + "An error occurred while stopping breakout rooms" : "Дошло је до грешке приликом заустављања сепареа", + "An error occurred while sending a message to the breakout rooms" : "Дошло је до грешке приликом слања поруке у сепарее", + "An error occurred while requesting assistance" : "Дошло је до грешке током захтева за помоћ", + "An error occurred while resetting the request for assistance" : "Дошло је до грешке током уклањања захтева за помоћ", + "An error occurred while joining breakout room" : "Дошло је до грешке приликом приступања сепареу", + "Failed to rename the thread" : "Није успела промена имена низа", + "Error fetching upcoming events" : "Грешка приликом преузимања предстојећих догађаја", + "Error fetching upcoming reminders" : "Грешка приликом преузимања предстојећих подсетника", + "An error occurred while accepting an invitation" : "Дошло је до грешке приликом прихватања позивнице", + "An error occurred while rejecting an invitation" : "Дошло је до грешке приликом одбијања позивнице", + "{guest} (guest)" : "{guest} (гост)", + "Poll draft has been saved" : "Сачуван је нацрт гласања", + "An error occurred while saving the draft" : "Дошло је до грешке током чувања нацрта", + "An error occurred while submitting your vote" : "Дошло је до грешке приликом давања вашег гласа", + "An error occurred while ending the poll" : "Дошло је до грешке током завршавања гласања", + "An error occurred while deleting the poll draft" : "Дошло је до грешке током брисања нацрта гласања", + "Poll \"{name}\" was created by {user}. Click to vote" : "Гласање „{name}” је креирао {user}. Кликните да гласате", + "Failed to add reaction" : "Није успело додавање реакције", + "Failed to remove reaction" : "Није успело уклањање реакције", + "Error while uploading file \"{fileName}\"" : "Грешка приликом отпремања фајла „{fileName}”", + "Not enough free space to upload file \"{fileName}\"" : "Нема довољно слободног простора да се отпреми „{fileName}”", + "You are not allowed to share files" : "Није вам дозвољено да делите фајлове", + "Error while sharing file" : "Грешка приликом дељења фајла", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk не подржава у потпуности прегледач који користите. Молимо вас да користите последњу верзију Mozilla Firefox, Microsoft Edge, Google Chrome, Opera или Apple Safari.", + "_In %n hour_::_In %n hours_" : ["За %n сат","За %n сата","За %n сати"], + "_%n minute _::_%n minutes_" : ["%n минут","%n минута","%n минута"], + "In {hours} and {minutes}" : "За {hours} и {minutes}", + "_In %n minute_::_In %n minutes_" : ["За %n минут","За %n минута","За %n минута"], + "Later today – {timeLocale}" : "Касније данас – {timeLocale}", + "Tomorrow – {timeLocale}" : "Сутра – {timeLocale}", + "This weekend – {timeLocale}" : "Овог викенда – {timeLocale}", + "Next week – {timeLocale}" : "Наредна недеља – {timeLocale}", + "Message link copied to clipboard" : "Линк на поруку је копиран у клипборд", + "Conversation link copied to clipboard" : "Линк на разговор је копиран у клипборд", + "The link could not be copied" : "Линк није могао да се копира", + "Error while parsing a PROPFIND error" : "Грешка приликом парсирања PROPFIND грешке", + "Sending signaling message has failed" : "Није успело слање поруке сигнализирања", + "Lost connection to signaling server. Trying to reconnect." : "Изгубљена је веза са сервером за сигнализирање. Покушава се поновно успостављање везе.", + "Lost connection to signaling server." : "Изгубљена је веза са сервером за сигнализирање.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Подешени сервер за сигнализирање мора да се ажурира како би био компатибилан са овом верзијом апликације Talk. Молимо вас да се обратите својој администрацији.", + "Please restart the app." : "Молимо вас да поново покренете апликацију.", + "Please reload the page." : "Поново учитајте страницу.", + "Please try to restart the app." : "Молимо вас, покушајте поново да покренете апликацију.", + "Please try to reload the page." : "Молимо вас, покушајте поново да учитате страницу.", + "Do not disturb" : "Не узнемиравај", + "Away" : "Одсутан", + "Microphone {number}" : "Микрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Звучник {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Изгледа да причате док сте утишани. Укључите звук да би Вас други чули", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не може да се успостави веза са барем једним од учесника. Можда је у вашем случају потребан TURN сервер. Молимо вас да замолите свог администратора да постави један пратећи упутства у {linkstart}овој документацији{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Ово траје дуже него што је очекивано. Да ли су дозволе за мултимедију већ дозвољене (или одбијене)? Ако јесу, рестартујте веб читач, пошто аудио/видео не ради", + "Access to microphone & camera is only possible with HTTPS" : "Приступ микрофону & камери је могућ само кроз HTTPS протокол", + "Please move your setup to HTTPS" : "Молимо померите Вашу инсталацију на HTTPS", + "Access to microphone & camera was denied" : "Приступ микрофону & камери одбијен", + "WebRTC is not supported in your browser" : "WebRTC није подржан у Вашем веб читачу", + "Please use a different browser like Firefox or Chrome" : "Користите други веб читач, као што су Фајерфокс или Хром", + "Error while accessing microphone & camera" : "Грешка при приступању микрофону & камери", + "%s Talk on your mobile devices" : "%s „Разговор“ на мобилним уређајима", + "Join conversations at any time, anywhere, on any device." : "Придружите се разговорима било кад, било где, са било ког уређаја.", + "Android app" : "Андроид апликација", + "iOS app" : "iOS апликација", + "__language_name__" : "Српски", + "Webhook Demo" : "Приказ веб куке", + "Call summary (%s)" : "Резиме позива (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Бот резимеа позива објављује поруку прегледа након позива у којој исписује све учеснике и истиче задатке", + "Tasks" : "Задаци", + "Notes" : "Белешке", + "Reports" : "Извештај", + "Decisions" : "Одлуке", + "Agenda" : "Дневни распоред", + "Call summary" : "Резиме позива", + "Call summary - {title}" : "Резиме позива - {title}", + "Talk conversation for event" : "Talk разговор за догађај", + "Client Push is installed, this improves the performance of desktop clients." : "Инсталиран је Client Push, ово унапређује перформансе десктоп клијената.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} није инсталирано, можете имати проблема са перформансама када користите десктоп клијенте.", + "Next meeting" : "Наредни састанак", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Закажите састанак директно из календара. Talk разговор мора да се постави као локација да би се овде приказао", + "Join conversations from remote Nextcloud servers" : "Приступи разговорима са удаљених Nextcloud сервера", + "Your default media state has been saved" : "Сачувана је ваша поставка подразумеваног стања медија", + "Set reminder for later today" : "Поставља подсетник касније дана", + "Set reminder for tomorrow" : "Поставља подсетник за сутра", + "Set reminder for this weekend" : "Поставља подсетник за овај викенд", + "Set reminder for next week" : "Поставља подсетник за наредну недељу", + "Generate summary" : "Генериши резиме", + "Open poll • You voted already" : "Отворено гласање • Већ сте гласали", + "Open poll • Click to vote" : "Отворено гласање • Кликните да гласате", + "Poll • Ended" : "Гласање • Завршено", + "Talk recording from {time} ({conversation})" : "Talk снимак од {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Резултати гласања • %n глас","Резултати гласања • %n гласа","Резултати гласања • %n гласова"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Отворено гласање • %n глас","Отворено гласање • %n гласа","Отворено гласање • %n гласова"], + "Submit vote" : "Постави глас", + "Your privacy setting has been saved" : "Ваша поставка приватности је сачувана", + "Your personal setting has been saved" : "Сачувана су ваша лична подешавања", + "Failed to save sounds setting" : "Није успело чување поставки звукова", + "Sounds setting saved" : "Сачуване су поставке звукова", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk је ажуриран, не можете да започнете или да се придружите позиву.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Приступили сте разговору у другом прозору или на другом уређају. Nextcloud Talk то тренутно не подржава, па је ова сесија затворена.", + "Nextcloud Talk was updated." : "Nextcloud talk је ажуриран.", + "Nextcloud is in maintenance mode." : "Nextcloud је у режиму одржавања.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation је ажуриран." +},"pluralForm" :"nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);" +} \ No newline at end of file diff --git a/l10n/sv.js b/l10n/sv.js new file mode 100644 index 0000000..8b45366 --- /dev/null +++ b/l10n/sv.js @@ -0,0 +1,2262 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "en konversation", + "(Duration %s)" : "(Varaktighet%s)", + "You attended a call with {user1}" : "Du deltog i ett samtal med {user1}", + "_%n guest_::_%n guests_" : ["%n gäst","%n gäster"], + "You attended a call with {user1} and {user2}" : "Du deltog i ett samtal med {user1} och {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du deltog i ett samtal med {user1}, {user2} och {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du deltog i ett samtal med {user1}, {user2}, {user3} och {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du deltog i ett samtal med {user1}, {user2}, {user3}, {user4} och {user5}", + "_%n other_::_%n others_" : ["%n annan","%n andra"], + "{actor} invited you to {call}" : "{actor} bjöd in dig till {call}", + "You were invited to a conversation or had a call" : "Du blev inbjuden till en konversation eller hade ett samtal", + "Other activities" : "Andra aktiviteter", + "Talk" : "Talk", + "Guest" : "Gäst", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Välkommen till Nextcloud Talk!\nI den här konversationen kommer du att informeras om nya funktioner som är tillgängliga i Nextcloud Talk.", + "## New in Talk %s" : "## Nytt i Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge och Safari kan nu användas för att delta i ljud- och videosamtal", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-till-en diskussioner är nu permanent och kan inte längre ändras till gruppkonversationer av misstag. Dessutom när en av deltagarna lämnar diskussionen tas diskussionen inte längra automatiskt bort. Enbart om bägge deltagare lämnar kommer diskussionen att tas bort från servern.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Du kan nu meddela alla deltagare genom att skicka \"@all\" till chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Med \"pil upp\" -knappen kan du skicka om ditt senaste meddelande", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk kan nu ha kommandon, skicka \"/help\" som ett chattmeddelande för att se om din administratör har konfigurerat några", + "- With projects you can create quick links between conversations, files and other items" : "- Med projekt kan du skapa snabba länkar mellan konversationer, filer och andra objekt", + "- You can now mention guests in the chat" : "- Du kan nu nämna gäster i chatten", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konversationer kan nu ha en lobby. Detta gör att moderatorer nu kan förbereda mötet, medan användare och gäster måste vänta.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nu svara direkt på meddelanden som ger de andra användarna mer sammanhang vad ditt meddelande handlar om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Sökning efter konversationer och deltagare kommer nu också att filtrera dina befintliga konversationer, vilket gör det mycket lättare att hitta tidigare konversationer", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nu lägga till anpassade användargrupper i konversationer när cirkelappen är installerad", + "- Check out the new grid and call view" : "- Kolla in det nya gränssnittet och samtals-vyn", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nu går det att ladda upp filer direkt med drag'n'drop från din enhet till chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delade filer visas nu direkt inuti chatten och öppnas med rätt applikation.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Nu kan du söka efter chattar och meddelanden gemensamt från sökrutan i menyn", + "- Spice up your messages with emojis from the emoji picker" : "- Snygga till dina meddelanden med emojier", + "- You can now change your camera and microphone while being in a call" : "- Nu går det att ändra kameran och mikrofonen medans du sitter i ett samtal", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Förtydliga syftet med din diskussion med en beskrivning vilket underlättar för inloggade användare att på egen hand hitta och ansluta till den", + "- See a read status and send failed messages again" : "- Visa lässtatus och sänd felmeddelanden på nytt", + "- Raise your hand in a call with the R key" : "- Räck upp handen i ett samtal med R-tangenten", + "- Join the same conversation and call from multiple devices" : "- Anslut till samma diskussion och ring från flera enheter", + "- Send voice messages, share your location or contact details" : "- Skicka röstmeddelanden, dela din plats eller kontaktinformation", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Lägg till grupper till en diskussion och nya gruppmedlemmar kommer automatiskt att läggas till som deltagare", + "- A preview of your audio and video is shown before joining a call" : "- En förhandsgranskning av ditt ljud och video visas innan anslutning till ett samtal", + "- You can now blur your background in the newly designed call view" : "- Nu kan du sudda ut bakgrunden i den nyligen skapade samtalsvyn", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nu tilldela allmänna och individuella behörigheter till deltagare", + "- You can now react to chat messages" : "- Du kan nu reagera på chattmeddelande", + "- In the sidebar you can now find an overview of the latest shared items" : "- I marginallisten kan du nu hitta en översikt över de senast delade objekten", + "- Use a poll to collect the opinions of others or settle on a date" : "- Använd en opinionsundersökning för att samla in åsikter från andra eller bestämma ett datum", + "- Configure an expiration time for chat messages" : "- Konfigurera en utgångstid för chattmeddelanden", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Starta samtal utan att notifiera andra deltagare i stora konversationer. Du kan skicka individuella samtalsnotifieringar så fort samtalet har avslutats.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Skicka chattmeddelanden utan att notifiera mottagaren förutsatt att det inte är brådskande", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojier kan nu autokompletteras om man skriver \".\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Länka olika objekt med nya smart-picker genom att skriva ett \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorer kan nu skapa grupprum (kräver High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Samtal kan nu spelas in (kräver High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Konversationer kan nu ha en avatar eller en emoji som ikon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Utöver suddig bakgrund finns nu även virtuella bakgrunder tillgängligt i videosamtal", + "- Reactions are now available during calls" : "- Reaktioner finns nu tillgängligt under samtal", + "- Typing indicators show which users are currently typing a message" : "- Skrivningsindikationer visar vilken användare som i realtid skriver ett meddelande", + "- Groups can now be mentioned in chats" : "- Grupper kan nu nämnas i chattar", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Samtalsinspelningar transkiberas automatiskt om en transkiberingsproviderapp är registrerad", + "- Chat messages can be translated if a translation provider app is registered" : "Chattmeddelanden kan översättas om en översättningsproviderapp är registrerad", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kan nu användas i _chat_ meddelanden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks finns nu tillgängligt för att implementera bots. Läs dokumentationen för mer information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ställ in en påminnelse på ett chattmeddelande för att senare bli notifierad", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Använd **Egna anteckningar** för att göra anteckningar och dela information mellan dina enheter", + "- Captions allow to send a message with a file at the same time" : "- Bildtexter tillåter att skicka ett meddelande med en fil samtidigt", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video av talare är nu synlig när skärmen delas och samtalsreaktioner är animerade", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Meddelanden kan nu redigeras av inloggade författare och moderatorer i 6 timmar", + "- Unsent message drafts are now saved in your browser" : "- Ej skickade meddelandeutkast sparas nu i din webbläsare", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchatt kan nu göras på ett federerat sätt med andra Talk-servrar", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nu blockera konton och gäster för att förhindra att de återansluter till en konversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Kommande samtal från länkade kalenderhändelser och frånvarande ersättningar visas nu i konversationer", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Samtal kan nu göras på ett federerat sätt med andra Talk-servrar (kräver High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducerar Nextcloud Talk skrivbordsklient för Windows, macOS och Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Sammanfatta samtalsinspelningar och olästa meddelanden i chattar med Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Förbättrade möten med att känna igen gäster som bjudits in via deras e-postadress, import av deltagarlistor, utkast till omröstningar och nedladdning av deltagarlistor för samtal", + "- Archive conversations to stay focused" : "- Arkivera konversationer för att hålla fokus", + "- Schedule a meeting into your calendar from within a conversation" : "- Schemalägg ett möte i din kalender direkt från en konversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Sök efter meddelanden från den aktuella konversationen direkt i den högra sidopanelen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Se fler konversationer direkt med den nya kompakta listan (aktivera i Talk-inställningarna)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Möteskonversationer synkar nu titel och beskrivning från kalendern och döljs med ett sökfilter tills de närmar sig starttidpunkten", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Markera konversationer som känsliga i aviseringsinställningarna för att dölja meddelandeinnehåll i konversationslistan och aviseringar", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- För att få pushaviseringar under “Stör ej”, markera konversationer som viktiga", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Lägg till fler deltagare i ett en-till-en-samtal för att skapa ett nytt gruppsamtal direkt", + "- Use threads to keep your chat and discussions organized" : "- Använd trådar för att hålla din chatt och dina diskussioner organiserade", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-transkriberingar är nu tillgängliga under samtalet (kräver live-transcription ExApp och High-performance backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatorer kan nu fästa meddelanden så att de hålls kvar överst", + "- Schedule a message to send it at a later time" : "- Schemalägg ett meddelande för att skicka det senare", + "_All %n participant_::_All %n participants_" : ["Alla %n deltagare","Alla %n deltagare"], + "Talk updates ✅" : "Talk-uppdateringar ✅", + "Reaction deleted by author" : "Svar har tagits bort av författaren", + "{actor} created the conversation" : "{actor} skapade konversationen", + "You created the conversation" : "Du skapade konversationen", + "System created the conversation" : "Systemet skapade konversationen", + "An administrator created the conversation" : "En administratör skapade konversationen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} bytte namn på konversationen från \"%1$s\" till \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du bytte namn på konversationen från \"%1$s\" till \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administratör döpte om konversationen från \"%1$s\" till \"%2$s\"", + "{actor} set the description" : "{actor} anger beskrivning", + "You set the description" : "Du anger beskrivningen", + "An administrator set the description" : "En administratör anger beskrivningen", + "{actor} removed the description" : "{actor} tog bort beskrivningen", + "You removed the description" : "Du tog bort beskrivningen", + "An administrator removed the description" : "En administratör tog bort beskrivningen", + "You started a silent call" : "Du startade ett tyst samtal", + "Outgoing silent call" : "Utgående tyst samtal", + "{actor} started a silent call" : "{actor} startade ett tyst samtal", + "Incoming silent call" : "Inkommande tyst samtal", + "You started a call" : "Du startade ett samtal", + "Outgoing call" : "Utgående samtal", + "{actor} started a call" : "{actor} startade ett samtal", + "Incoming call" : "Inkommande samtal", + "{actor} joined the call" : "{actor} gick med i samtalet", + "You joined the call" : "Du gick med i samtalet", + "{actor} left the call" : "{actor} lämnade samtalet", + "You left the call" : "Du lämnade samtalet", + "{actor} unlocked the conversation" : "{actor} låste upp konversationen", + "You unlocked the conversation" : "Du låste upp konversationen", + "An administrator unlocked the conversation" : "En administratör låste upp konversationen", + "{actor} locked the conversation" : "{actor} låste konversationen", + "You locked the conversation" : "Du låste konversationen", + "An administrator locked the conversation" : "En administratör låste konversationen", + "{actor} limited the conversation to the current participants" : "{actor} begränsade konversationen för nuvarande deltagare", + "You limited the conversation to the current participants" : "Du begränsade diskussionen till närvarande deltagare", + "An administrator limited the conversation to the current participants" : "En administratör begränsade diskussionen till närvarande deltagare", + "{actor} opened the conversation to registered users" : "{actor} öppnade konversationen för registrerade användare", + "You opened the conversation to registered users" : "Du öppnade konversationen för registrerade användare", + "An administrator opened the conversation to registered users" : "En administratör öppnade konversationen för registrerade användare", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "You opened the conversation to registered users and users created with the Guests app" : "Du öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "An administrator opened the conversation to registered users and users created with the Guests app" : "En administratör öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "The conversation is now open to everyone" : "Konversationen är nu öppen för alla", + "{actor} opened the conversation to everyone" : "{actor} öppnade konversationen för alla", + "You opened the conversation to everyone" : "Du öppnade konversationen för alla", + "{actor} restricted the conversation to moderators" : "{actor} begränsade konversationen till moderatorer", + "You restricted the conversation to moderators" : "Du begränsade konversationen till moderatorer", + "{actor} started breakout rooms" : "{actor} startade grupprum", + "You started breakout rooms" : "Du startade grupprum", + "{actor} stopped breakout rooms" : "{actor} stoppade grupprum", + "You stopped breakout rooms" : "Du stoppade grupprum", + "{actor} allowed guests" : "{actor} tillåter gäster", + "You allowed guests" : "Du tillåter gäster", + "An administrator allowed guests" : "En administratör har tillåtit gäster", + "{actor} disallowed guests" : "{actor} tillåter inte gäster", + "You disallowed guests" : "Du tillåter inte gäster", + "An administrator disallowed guests" : "En administratör tillåter inte gäster", + "{actor} set a password" : "{actor} satte ett lösenord", + "You set a password" : "Du satte ett lösenord", + "An administrator set a password" : "En administratör har aktiverat ett lösenord", + "{actor} removed the password" : "{actor} tog bort lösenordet", + "You removed the password" : "Du tog bort lösenordet", + "An administrator removed the password" : "En administratör har tagit bort lösenordet", + "{actor} added {user}" : "{actor} la till {user}", + "You joined the conversation" : "Du gick med i konversationen", + "{actor} joined the conversation" : "{actor} gick med i konversationen", + "You added {user}" : "Du lade till {user}", + "{actor} added you" : "{actor} lade till dig", + "An administrator added you" : "En administratör lade till dig", + "An administrator added {user}" : "En administratör lade till {user}", + "You left the conversation" : "Du lämnade konversationen", + "{actor} left the conversation" : "{actor} lämnade konversationen", + "{actor} removed {user}" : "{actor} tog bort {user}", + "You removed {user}" : "Du tog bort {user}", + "{actor} removed you" : "{actor} tog bort dig", + "An administrator removed you" : "En administratör tog bort dig", + "An administrator removed {user}" : "En administratör tog bort {user}", + "{actor} invited {federated_user}" : "{actor} bjöd in {federated_user}", + "You invited {federated_user}" : "Du bjöd in {federated_user}", + "You accepted the invitation" : "Du accepterade inbjudan", + "{actor} invited you" : "{actor} bjöd in dig", + "An administrator invited you" : "En administratör bjöd in dig", + "An administrator invited {federated_user}" : "En administratör bjöd in {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} godkände inbjudan", + "{actor} removed {federated_user}" : "{actor} avlägsnade {federated_user}", + "You removed {federated_user}" : "Du avlägsnade {federated_user}", + "You declined the invitation" : "Du avböjde inbjudan", + "An administrator removed {federated_user}" : "En administratör avlägsnade {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} avböjde inbjudan", + "{actor} added group {group}" : "{actor} lade till grupp {group}", + "You added group {group}" : "Du lade till grupp {group}", + "An administrator added group {group}" : "En administratör lade till grupp {group}", + "{actor} removed group {group}" : "{actor} tog bort gruppen {group}", + "You removed group {group}" : "Du tog bort gruppen {group}", + "An administrator removed group {group}" : "En administratör tog bort gruppen {group}", + "{actor} added team {circle}" : "{actor} lade till team {circle}", + "You added team {circle}" : "Du lade till team {circle}", + "An administrator added team {circle}" : "En administratör lade till team {circle}", + "{actor} removed team {circle}" : "{actor} tog bort team {circle}", + "You removed team {circle}" : "Du tog bort team {circle}", + "An administrator removed team {circle}" : "En administratör tog bort team {circle}", + "{actor} added {phone}" : "{actor} la till {phone}", + "You added {phone}" : "Du la till {phone}", + "An administrator added {phone}" : "En administratör lade till {phone}", + "{actor} removed {phone}" : "{actor} tog bort {phone}", + "You removed {phone}" : "Du tog bort {phone}", + "An administrator removed {phone}" : "En administratör tog bort {phone}", + "{actor} promoted {user} to moderator" : "{actor} gjorde {user} till moderator", + "You promoted {user} to moderator" : "Du gjorde {user} till moderator", + "{actor} promoted you to moderator" : "{actor} gjorde dig moderator", + "An administrator promoted you to moderator" : "En administratör gjorde dig till moderator", + "An administrator promoted {user} to moderator" : "En administratör gjorde {user} till moderator", + "{actor} demoted {user} from moderator" : "{actor} tog bort {user} som moderator", + "You demoted {user} from moderator" : "Du tog bort {user} som moderator", + "{actor} demoted you from moderator" : "{actor} tog bort dig som moderator", + "An administrator demoted you from moderator" : "En administratör tog bort dig som moderator", + "An administrator demoted {user} from moderator" : "En administratör tog bort {user} som moderator", + "{actor} shared a file which is no longer available" : "{actor} delade en fil som inte längre är tillgänglig", + "You shared a file which is no longer available" : "Du delade en fil som inte längre är tillgänglig", + "File shares are currently not supported in federated conversations" : "Fildelning stöds för närvarande inte i federerade konversationer", + "The shared location is malformed" : "Den delade lokationen är felaktig", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} installera Matterbridge för att synkronisera den här konversationen med andra chattar", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du installerar Matterbridge för att synkronisera den här konversationen med andra chattar", + "{actor} created thread {title}" : "{actor} skapade tråden {title}", + "You created thread {title}" : "Du skapade tråden {title}", + "{actor} renamed thread {title}" : "{actor} bytte namn på tråden {title}", + "You renamed thread {title}" : "Du bytte namn på tråden {title}", + "{actor} updated the Matterbridge configuration" : "{actor} uppdaterade Matterbridgekonfigurationen", + "You updated the Matterbridge configuration" : "Du uppdaterade Matterbridgekonfigurationen", + "{actor} removed the Matterbridge configuration" : "{actor} tog bort Matterbridgekonfigurationen", + "You removed the Matterbridge configuration" : "Du tog bort Matterbridgekonfigurationen", + "{actor} started Matterbridge" : "{actor} startade Matterbridge", + "You started Matterbridge" : "Du startade Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stoppade Matterbridge", + "You stopped Matterbridge" : "Du stoppade Matterbridge", + "{actor} deleted a message" : "{actor} raderade ett meddelande", + "You deleted a message" : "Du tog bort ett meddelande", + "{actor} edited a message" : "{actor} redigerade ett meddelande", + "You edited a message" : "Du redigerade ett meddelande", + "{actor} pinned a message" : "{actor} fäste ett meddelande", + "You pinned a message" : "Du fäste ett meddelande", + "{actor} unpinned a message" : "{actor} tog bort fäst meddelande", + "Message was automatically unpinned" : "Meddelandet togs automatiskt bort från fästa", + "You unpinned a message" : "Du tog bort fäst meddelande", + "{actor} deleted a reaction" : "{actor} tog bort en reaktion", + "You deleted a reaction" : "Du tog bort en reaktion", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du ställde in utgång av meddelande till %n vecka","Du ställde in utgång av meddelande till %n veckor"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du ställde in utgång av meddelande till %n dag","Du ställde in utgång av meddelande till %n dagar"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du ställde in utgång av meddelande till %n timme","Du ställde in utgång av meddelande till %n timmar"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du ställde in utgång av meddelande till %n minut","Du ställde in utgång av meddelande till %n minuter"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ställde in utgång av meddelande till %n vecka","{actor} ställde in utgång av meddelande till %n veckor"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ställde in utgång av meddelande till %n dag","{actor} ställde in utgång av meddelande till %n dagar"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ställde in utgång av meddelande till %n timme","{actor} ställde in utgång av meddelande till %n timmar"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ställde in utgång av meddelande till %n minut","{actor} ställde in utgång av meddelande till %n minuter"], + "{actor} disabled message expiration" : "{actor} inaktiverade utgång av meddelanden", + "You disabled message expiration" : "Du inaktiverade utgång av meddelanden", + "{actor} cleared the history of the conversation" : "{actor} rensade historiken av konversationen", + "You cleared the history of the conversation" : "Du rensade historiken av konversationen", + "{actor} set the conversation picture" : "{actor} ställde in konversationsbilden", + "You set the conversation picture" : "Du ställde in konversationsbilden", + "{actor} removed the conversation picture" : "{actor} tog bort konversationsbilden", + "You removed the conversation picture" : "Du tog bort konversationsbilden", + "{actor} ended the poll {poll}" : "{actor} tog bort undersökningen {poll}", + "You ended the poll {poll}" : "Du avslutade undersökningen {poll}", + "{actor} started the video recording" : "{actor} startade videoinspelningen", + "You started the video recording" : "Du startade videoinspelningen", + "{actor} stopped the video recording" : "{actor} stoppade videoinspelningen", + "You stopped the video recording" : "Du stoppade videoinspelningen", + "{actor} started the audio recording" : "{actor} startade ljudinspelningen", + "You started the audio recording" : "Du startade ljudinspelningen", + "{actor} stopped the audio recording" : "{actor} stoppade ljudinspelningen", + "You stopped the audio recording" : "Du stoppade ljudinspelningen", + "The recording failed" : "Inspelningen misslyckades", + "Someone voted on the poll {poll}" : "Någon röstade på undersökningen {poll}", + "Message deleted by author" : "Meddelandet togs bort av författaren", + "Message deleted by {actor}" : "Meddelandet togs bort av {actor}", + "Message deleted by you" : "Meddelandet togs bort av dig", + "Deleted user" : "Borttagen användare", + "Unknown number" : "Okänt nummer", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (gäst)", + "Missed call" : "Missat samtal", + "Unanswered call" : "Obesvarat samtal", + "Call ended (Duration {duration})" : "Samtal avslutat (Varaktighet {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Samtalet avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} avslutade samtalet (Varaktighet {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Samtal med %n gäst avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})","Samtal med %n gäster avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Samtal med %n gäst avslutat (Varaktighet {duration})","Samtal med %n gäster avslutat (Varaktighet {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} avslutade samtalet med %n gäst (Varaktighet {duration})","{actor} avslutade samtalet med %n gäster (Varaktighet {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1} ended (Duration {duration})" : "Samtal med {user1} avslutades (Varaktighet {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} avslutade samtalet med {user1} (Varaktighet {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1} och {user2} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Samtal med {user1} och {user2} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} avslutade samtalet med {user1} och {user2} (Varaktighet {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2} och {user3} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Samtal med {user1}, {user2} och {user3} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2} och {user3} (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2}, {user3} och {user4} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Samtal med {user1}, {user2}, {user3} och {user4} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2}, {user3} och {user4} (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2}, {user3}, {user4} och {user5} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Samtal med {user1}, {user2}, {user3}, {user4} och {user5} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2}, {user3}, {user4} och {user5} (Varaktighet {duration})", + "Message of {user} in {conversation}" : "Meddelande av {user} i {conversation}", + "Message of {user}" : "Meddelande av {user}", + "Message of a deleted user in {conversation}" : "Meddelande av en borttagen användare i {conversation}", + "Talk conversations" : "Talk-konversationer", + "Talk to %s" : "Chatta med %s", + "An error occurred. Please contact your administrator." : "Ett fel har uppstått. Vänligen kontakta din administratör.", + "App disabled" : "App inaktiverad", + "Conversation subfolders are disabled" : "Undermappar för konversationer är inaktiverade", + "Storage quota exceeded" : "Lagringskvot överskriden", + "Could not prepare conversation folder" : "Kunde inte förbereda konversationsmappen", + "File not found" : "Filen kunde inte hittas", + "Path must point to a file" : "Sökvägen måste peka på en fil", + "File is not inside the conversation draft folder for this room" : "Filen finns inte i konversationens utkastsmapp för detta rum", + "File is not shared, or shared but not with the user" : "Filen delas inte eller delas men inte med användaren", + "No account available to delete." : "Inget konto tillgängligt för att ta bort.", + "Poll" : "Omröstning", + "Password needs to be set" : "Lösenord måste ställas in", + "Uploading the file failed" : "Det gick inte att ladda upp filen", + "No image file provided" : "Ingen bildfil har tillhandahållts", + "File is too big" : "Filen är för stor", + "Invalid file provided" : "Ogiltig fil tillhandahölls", + "Invalid image" : "Ogiltig bild", + "Unknown filetype" : "Okänd filtyp", + "Talk mentions" : "Talk-omnämnanden", + "More conversations" : "Fler konversationer", + "Say hi to your friends and colleagues!" : "Säg hej till dina vänner och kollegor!", + "No unread mentions" : "Inga olästa omnämnanden", + "Call in progress" : "Samtal pågår", + "You were mentioned" : "Du blev omnämnd", + "Write to conversation" : "Skriv till konversation", + "Writes event information into a conversation of your choice" : "Skriver händelseinformation till en konversation du väljer", + "Missing email field in header line" : "E-postfält saknas i rubrikraden", + "Following lines are invalid: %s" : "Följande rader är ogiltiga: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s bjöd in dig till konversationen \"%2$s\".", + "You were invited to conversation \"%s\"." : "Du blev inbjuden till konversationen \"%s\".", + "Conversation invitation" : "Inbjudan till konversation", + "Scheduled time" : "Schemalagd tid", + "Description" : "Beskrivning", + "You can also dial-in via phone with the following details" : "Det går också att ringa-upp via telefon med följande information", + "Dial-in information" : "Uppringningsinformation", + "Meeting ID" : "Mötes-ID", + "Your PIN" : "Din pinkod", + "Click the button below to join the lobby now." : "Klicka på knappen nedan för att gå med i lobbyn nu.", + "Click the link below to join the lobby now." : "Klicka på länken nedan för att gå med i lobbyn nu.", + "Join lobby for \"%s\"" : "Gå med i lobbyn för \"%s\"", + "Click the button below to join the conversation now." : "Klicka på knappen nedan för att gå med i konversationen nu.", + "Click the link below to join the conversation now." : "Klicka på länken nedan för att gå med i konversationen nu.", + "Join \"%s\"" : "Gå med \"%s\"", + "Meeting" : "Möte", + "Password request: %s" : "Lösenordsförfrågan: %s", + "Private conversation" : "Privat konversation", + "Deleted user (%s)" : "Raderad användare (%s)", + "Failed to upload call recording" : "Misslyckades med att ladda upp samtalsinspelning", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Inspelningsservern misslyckades med att ladda upp samtalsinspelningen {call}. Vänligen kontakta administrationen.", + "Share to chat" : "Dela till chatt", + "Dismiss notification" : "Avfärda notifiering", + "Call recording now available" : "Samtalsinspelningen finns nu tillgänglig", + "The recording for the call in {call} was uploaded to {file}." : "Inspelningen för samtalet i {call} blev uppladdat till {file}.", + "Transcript now available" : "Transkript finns nu tillgänglig", + "The transcript for the call in {call} was uploaded to {file}." : "Transkriptet för samtalet i {call} blev uppladdat till {file}.", + "Failed to transcript call recording" : "Misslyckades att transkripta samtalsinspelningen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Servern misslyckades att transkripta inspelningen på {file} för samtalet i {call}. Vänligen kontakta administrationen.", + "Call summary now available" : "Samtalssammanfattning är nu tillgänglig", + "The summary for the call in {call} was uploaded to {file}." : "Sammanfattningen för samtalet i {call} laddades upp till {file}.", + "Failed to summarize call recording" : "Det gick inte att sammanfatta samtalsinspelningen", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Servern kunde inte sammanfatta inspelningen på {file} för samtalet i {call}. Vänligen kontakta din administratör.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} bjöd in dig att gå med i {roomName} på {remoteServer}", + "Accept" : "Acceptera", + "Decline" : "Avböj", + "{user1} invited you to a federated conversation" : "{user1} bjöd in dig till en federerad konversation", + "Someone reacted" : "Någon reagerade", + "New message" : "Nytt meddelande", + "Reminder" : "Påminnelse", + "Someone mentioned you" : "Någon nämnde dig", + "Notification" : "Notifiering", + "Someone reacted in a private conversation" : "Någon reagerade i en privat konversation", + "You received a message in a private conversation" : "Du fick ett meddelande i en privat konversation", + "Reminder in a private conversation" : "Påminnelse i en privat konversation", + "Someone mentioned you in a private conversation" : "Någon nämnde dig i en privat konversation", + "Notification in a private conversation" : "Avisering i en privat konversation", + "Reminder: You in {call}" : "Påminnelse: Du i {call}", + "Reminder: {user} in {call}" : "Påminnelse: {user} i {call}", + "Reminder: Deleted user in {call}" : "Påminnelse: Tog bort användare i {call}", + "Reminder: {guest} (guest) in {call}" : "Påminnelse: {guest} (guest) i {call}", + "Reminder: Guest in {call}" : "Påminnelse: Gäst i {call}", + "{user} reacted with {reaction}" : "{user} reagerade med {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagerade med {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "Borttagen användare reagerade med {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reagerade med {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "Gäst reagerade med {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Tog bort användare från {call}", + "{guest} (guest) in {call}" : "{guest} (guest) i {call}", + "Guest in {call}" : "Gäst i {call}", + "{user} sent you a private message" : "{user} skickade dig ett privat meddelande", + "{user} sent a message in conversation {call}" : "{user} skickade ett meddelande i konversation {call}", + "A deleted user sent a message in conversation {call}" : "En raderad användare skickade ett meddelande i konversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gäst) skickade ett meddelande i konversationen {call}", + "A guest sent a message in conversation {call}" : "En gäst skickade ett meddelande i konversation {call}", + "{user} replied to your private message" : "{user} svarade på ditt privata meddelande", + "{user} replied to your message in conversation {call}" : "{user} svarade på ditt meddelande i konversationen {call}", + "A deleted user replied to your message in conversation {call}" : "En raderad användare svarade på ditt meddelande i konversationen {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gäst) svarade på ditt meddelande i konversationen {call}", + "A guest replied to your message in conversation {call}" : "En gäst svarade på ditt meddelande i konversationen {call}", + "Reminder: You in private conversation {call}" : "Påminnelse: Du i privat konversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Påminnelse: En borttagend användare i en privat konversation {call}", + "Reminder: {user} in private conversation" : "Påminnelse: {user} i privat konversation", + "Reminder: You in conversation {call}" : "Påminnelse: Du i konversation {call}", + "Reminder: {user} in conversation {call}" : "Påminnelse: {user} i konversation {call}", + "Reminder: A deleted user in conversation {call}" : "Påminnelse: En borttagen användare i konversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Påminnelse: {guest} (guest) i konversation {call}", + "Reminder: A guest in conversation {call}" : "Påminnelse: En gäst i konversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagerade med {reaction} på ditt privata meddelande", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagerade med {reaction} på ditt meddelande i konversationen {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "En borttagen användare reagerade med {reaction} på ditt meddelande i konversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reagerade med {reaction} på ditt meddelande i konversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "En gäst reagerade med {reaction} på ditt meddelande i konversation {call}", + "{user} mentioned you in a private conversation" : "{user} nämnde dig i en privat konversation", + "{user} mentioned group {group} in conversation {call}" : "{user} nämnde gruppen {group} i konversationen {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} nämnde teamet {team} i konversationen {call}", + "{user} mentioned everyone in conversation {call}" : "{user} nämnde alla i konversation {call} ", + "{user} mentioned you in conversation {call}" : "{user} nämnde dig i konversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "En borttagen användare nämnde gruppen {group} i konversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "En raderad användare nämnde teamet {team} i konversationen {call}", + "A deleted user mentioned everyone in conversation {call}" : "En raderad användare nämnde alla i konversation {call}", + "A deleted user mentioned you in conversation {call}" : "En raderad användare nämnde dig i konversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) nämnde gruppen {group} i konversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gäst) nämnde teamet {team} i konversationen {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gäst) nämnde alla i konversationen {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gäst) nämnde dig i konversationen {call}", + "A guest mentioned group {group} in conversation {call}" : "En gäst nämnde gruppen {group} i konversation {call}", + "A guest mentioned team {team} in conversation {call}" : "En gäst nämnde teamet {team} i konversationen {call}", + "A guest mentioned everyone in conversation {call}" : "En gäst nämnde alla i konversation {call}", + "A guest mentioned you in conversation {call}" : "En gäst nämnde dig i konversation {call}", + "View message" : "Visa meddelande", + "Dismiss reminder" : "Avvisa påminnelse", + "View chat" : "Visa chatt", + "{user} invited you to a group conversation: {call}" : "{user} bjöd in dig till en gruppkonversation: {call}", + "Join call" : "Gå med i samtal", + "Answer call" : "Svara på samtal", + "{user} would like to talk with you" : "{user} vill prata med dig", + "Call back" : "Ring tillbaka", + "You missed a call from {user}" : "Du missade ett samtal från {user}", + "Accept call" : "Acceptera samtal", + "Incoming phone call from {call}" : "Inkommande telefonsamtal från {call}", + "You missed a phone call from {call}" : "Du missade ett telefonsamtal från {call}", + "A group call has started in {call}" : "Ett gruppsamtal har startats i {call}", + "You missed a group call in {call}" : "Du missade ett gruppsamtal i {call}", + "{email} is requesting the password to access {file}" : "{email} begär lösenordet för åtkomst till {file}", + "{email} tried to request the password to access {file}" : "{email} försökte begära lösenordet för åtkomst till {file}", + "Someone is requesting the password to access {file}" : "Någon begär lösenordet för att komma åt {file}", + "Someone tried to request the password to access {file}" : "Någon försökte begära lösenordet för att komma åt {file}", + "Open settings" : "Öppna inställningar", + "Hosted signaling server added" : "Hosted signalserver tillagd", + "The hosted signaling server is now configured and will be used." : "Hosted signaling server är nu konfigurerad och kommer att användas.", + "Hosted signaling server removed" : "Hosted signalserver borttagen", + "The hosted signaling server was removed and will not be used anymore." : "Hosted signaling server blev borttagen och kommer inte användas längre", + "Hosted signaling server changed" : "Hosted signalserver ändrad", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Kontot för Hosted signaling server ändrades med status från \"{oldstatus}\" till \"{newstatus}\".", + "pending" : "Väntande", + "active" : "aktiv", + "expired" : "gått ut", + "blocked" : "blockerad", + "error" : "fel", + "The certificate of {host} expires in {days} days" : "Certifikatet till {host} går ut om {days} dagar", + "The certificate of {host} expired" : "Certifikatet till {host} har gått ut", + "Contact via Talk" : "Kontakta via Talk", + "Open Talk" : "Öppna Talk", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Skicka meddelanden, skapa trådar och starta röst- och videosamtal.", + "Presentation" : "Presentation", + "Voice room" : "Ljudrum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Gå direkt med i samtalet, perfekt för avstämningar eller spontana möten.", + "Webinar" : "Webbinarium", + "Conversations" : "Konversationer", + "Messages in current conversation" : "Meddelanden i aktuell konversation", + "{user}" : "{user}", + "Messages" : "Meddelanden", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Meddelanden i andra konversationer", + "One-to-one rooms always need to show the other users avatar" : "Ett-till-ett-rum behöver alltid visa de andra användarnas avatar", + "Invalid emoji character" : "Ogiltigt emojitecken", + "Invalid background color" : "Ogiltig bakgrundsfärg", + "Avatar image is not square" : "Profilbilden är inte fyrkantig", + "Room {number}" : "Rum {number}", + "Other" : "Annat", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Misslyckades med att begära en utvärdering eftersom utvärderingsservern ej är nåbar. Vänligen försök igen senare.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Det är problem med autentisieringen av den här instansen. Det kan vara att den inte är nåbar utifrån för att kunna verifiera IRL:en.", + "Something unexpected happened." : "Något oväntat inträffade.", + "The URL is invalid." : "URL:en är ogiltig.", + "An HTTPS URL is required." : "En HTTPS URL krävs.", + "The email address is invalid." : "E-postadressen är ogiltig.", + "The language is invalid." : "Språket är ogiltigt.", + "The country is invalid." : "Landet är ogiltigt.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Det är problem med förfrågan om utvärderingen. Vänligen kontrollera dina loggar för mer information.", + "Too many requests are send from your servers address. Please try again later." : "För många förfrågningar är skickade från din serveradress. Vänligen försök igen senare.", + "There is already a trial registered for this Nextcloud instance." : "Det finns redan en utvärdering registerad för den här Nexcloudinstansen.", + "Something unexpected happened. Please try again later." : "Ett oväntat fel inträffade. Försök igen senare.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Misslyckades med att begära en utvärdering eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "Trial requested but failed to get account information. Please check back later." : "Utvärderingsförfrågan togs emot men misslyckades med att få kontoinformation. Vänligen försök igen senare.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Det är problem med autentisieringen av den här begäran. Det kan vara att den inte är nåbar utifrån för att kunna verifiera IRL:en.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Misslyckades med att motta kontoinformation eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Det är problem med att motta kontoinformation. Vänligen kontrollera dina loggar för mer information.", + "There is no such account registered." : "Det finns inget sådan konto registrerat.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Misslyckades med att motta kontoinformation eftersom utvärderingsservern ej är nåbar. Vänligen försök igen senare.", + "Deleting the hosted signaling server account failed. Please check back later." : "Misslyckades med att ta bort signaling server kontot. Vänligen försök igen senare.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Misslhyckades med att ta bort kontot eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "There is a problem with deleting the account. Please check your logs for further information." : "Det är problem med att ta bort kontot. Vänligen kontrollera dina inställningar för mer information.", + "Too many requests are sent from your servers address. Please try again later." : "För många förfrågningar är skickade från din serveradress. Vänligen försök igen senare.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Misslyckades med att ta bort kontot eftersom utvärderingsservern inte är nåbar. Vänligen försök igen senare.", + "Note to self" : "Egna anteckningar", + "A place for your private notes, thoughts and ideas" : "En plats för dina privata anteckningar, tankar och idéer", + "Transcript is AI generated and may contain mistakes" : "Transkriptionen är AI-genererad och kan innehålla misstag", + "Summary is AI generated and may contain mistakes" : "Sammanfattningen är AI-genererad och kan innehålla misstag", + "Let's get started!" : "Låt oss komma igång!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** är en säker, egenhostad kommunikationsplattform som integreras sömlöst med Nextclouds ekosystem.\n\n#### Huvudfunktioner i Nextcloud Talk:\n\n* Chatt och meddelanden i privata och gruppchattar\n* Röst och videosamtal\n* Fildelning och integration med andra Nextcloud-appar\n* Anpassningsbara konversationsinställningar, moderering och sekretesskontroller\n* Webb, dator och mobil (iOS och Android)\n* Privat och säker kommunikation\n\n Läs mer i [användardokumentationen](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Välkommen till Nextcloud Talk\n\nNextcloud Talk är en privat och kraftfull meddelandeapp som integreras med Nextcloud. Chatta i privata eller gruppkonversationer, samarbeta via röst- och videosamtal, organisera webbinarier och evenemang, anpassa dina konversationer och mycket mer.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatera texter för att skapa innehållsrika meddelanden\n\nI Nextcloud Talk kan du använda Markdown-syntax för att formatera dina meddelanden. Till exempel kan du använda **fetstil** eller *kursiv*, eller `markera text som kod`. Du kan till och med skapa tabeller och lägga till rubriker i din text.\n\nBehöver du rätta ett stavfel eller ändra formatering? Redigera ditt meddelande genom att klicka på “Redigera meddelande” i meddelandemenyn.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Lägg till bilagor och länkar\n\nBifoga filer från din Nextcloud Hub med hjälp av “+”-knappen. Dela objekt från Filer och olika Nextcloud-appar. Vissa appar stödjer till och med interaktiva widgets, till exempel Text-appen.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Låt konversationerna flöda: nämn användare, reagera på meddelanden och mycket mer\n\nDu kan nämna alla i konversationen genom att använda %s eller nämna enskilda deltagare genom att skriva “@” och välja deras namn från listan.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Du kan svara på meddelanden, vidarebefordra dem till andra chattar och personer eller kopiera meddelandeinnehållet.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Gör mer med Smart Picker\n\nSkriv “/” eller gå till “+”-menyn för att öppna Smart Picker, där du kan bifoga olika typer av innehåll till dina meddelanden. Du kan konfigurera Smart Picker för att kunna lägga till objekt från Nextcloud-appar, GIF:ar, platsinformation från kartor, AI-genererat innehåll och mycket mer.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Hantera konversationsinställningar\n\nI konversationsmenyn kan du komma åt olika inställningar för att hantera dina konversationer, såsom:\n* Redigera konversationsinformation\n* Hantera aviseringar\n* Tillämpa flera modereringsregler\n* Konfigurera åtkomst och säkerhet\n* Aktivera bottar\n* och mycket mer!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Förenade arabemiraten", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua och Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikanska Samoa", + "Austria" : "Österrike", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbajdzjan", + "Bosnia and Herzegovina" : "Bosnien och Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, den mångnationella staten", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Vitryssland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Kongo, den republikanska republiken", + "Central African Republic" : "Centralafrikanska republiken", + "Congo" : "Kongo, Republiken (Brazzaville)", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbenskusten", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Julön", + "Cyprus" : "Cypern", + "Czechia" : "Tjeckien", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanska republiken", + "Algeria" : "Algeriet", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypten", + "Western Sahara" : "Västsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Etiopien", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandsöarna (Malvinas)", + "Micronesia, Federated States of" : "Mironesien, den Mikronesiska federationen", + "Faroe Islands" : "Färöarna", + "France" : "Frankrike", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Förenade konungariket Storbritannien och Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Franska Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Grekland", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island och McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungern", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, den islamska republiken", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, den Demokratiska Folkrepubliken", + "Korea, Republic of" : "Sydkorea", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marocko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavien", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Nordmakedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoliet", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiverna", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nya Kaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederländerna", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nya Zeeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Franska Polynesien", + "Papua New Guinea" : "Papua Nya Guinea", + "Philippines" : "Filippinerna", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Salomonöarna", + "Seychelles" : "Seychellerna", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenien", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakien", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Swaziland", + "Turks and Caicos Islands" : "Turks- och Caicosöarna", + "Chad" : "Chad", + "French Southern Territories" : "Franska södra territorierna", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadzjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisien", + "Tonga" : "Tonga", + "Turkey" : "Turkiet", + "Trinidad and Tobago" : "Trinidad och Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, den Bolivarianska republiken", + "Virgin Islands, British" : "Jungfruöarna, Brittiska", + "Virgin Islands, U.S." : "Jungfruöarna, Amerikanska", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sydafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Suddig bakgrund", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Kunde inte kontrollera stöd för laddning av WASM. Kontrollera manuellt om din webbserver tillhandahåller .wasm-filer.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Din webbserver är inte korrekt konfigurerad för att leverera .wasm-filer. Detta är vanligtvis ett problem med Nginx-konfigurationen. För att suddig bakgrund ska fungera behöver konfigurationen justeras så att den även levererar .wasm-filer. Jämför din Nginx-konfiguration med den rekommenderade konfigurationen i vår dokumentation.", + "Talk configuration values" : "Talk konfigurationsvärden", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Att tvinga fram en samtalslängd stöds endast med systemets cron. Aktivera system cron eller ta bort konfigurationen `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Små \"max_call_duration\"-värden (för närvarande inställda på %d) kan inte tillämpas på grund av tekniska begränsningar. Bakgrundsjobbet utförs endast var 5:e minut, så använd på egen risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Det rekommenderas starkt att konfigurera \"memcache.locking\" när Talk Federation är aktiverat.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Ingen High-performance backend konfigurerad - Att köra Nextcloud Talk utan High-performance backend skalar endast för mycket små samtal (max. 2-3 deltagare). Konfigurera High-performance backend för att säkerställa att samtal med flera deltagare fungerar sömlöst.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Att köra med High-performance backend \"conversation_cluster\" läge är utfasat och kommer inte längre att stödjas i den kommande versionen. High-performance backend stöder real clustering nuförtiden som bör användas istället.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Att definiera flera High-performance backends är föråldrat och kommer inte längre att stödjas i den kommande versionen. Istället bör en lastbalanserare ställas in tillsammans med klustrade signalservrar och konfigureras i Talk-inställningarna.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Den sparade publika nyckeln för den använda algoritmen %1$s matchar inte den sparade privata nyckeln. Kör %2$s för att åtgärda problemet.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend är inte korrekt konfigurerad. Kör %s för detaljer.", + "High-performance backend not configured correctly" : "High-performance backend är inte korrekt konfigurerad", + "Error: Cannot connect to server" : "Error: Kan inte ansluta till server", + "Error: Server did not respond with proper JSON" : "Error: Servern svarade inte med korrekt JSON", + "Error: Certificate expired" : "Error: Certifikatet har gått ut", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fel: Systemtiderna för Nextcloud-servern och högpresterande backend-server är osynkroniserade. Se till att båda servrarna är anslutna till en tidsserver eller synkronisera deras tid manuellt.", + "Could not get version" : "Det gick inte att hämta versionen", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fel: Kör version: {version}; Servern måste uppdateras för att vara kompatibel med den här versionen av Talk", + "Error: Server responded with: {error}" : "Error: Servern svarade med: {error}", + "Error: Unknown error occurred" : "Error: Okänt fel inträffade", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Varning: Aktuell version: {version}; Servern stöder inte alla funktioner i denna Talk-version, funktioner saknas: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Det rekommenderas starkt att konfigurera en minnescache när du kör Nextcloud Talk med en High-performance backend.", + "Client Push" : "Klient-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push är installerat, vilket gör Talk-aviseringar mer tillförlitliga.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} är inte installerat. Detta kan leda till fördröjda Talk-aviseringar.", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "För att kunna använda recording backend krävs en High-performance backend.", + "No recording backend configured" : "Ingen recording backend konfigurerad", + "SIP configuration" : "SIP-konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Användning av SIP-funktionalitet kräver en High-performance backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Tilldelade Talk-telefonnummer får inte börja med + eller 0. Ta bort eller uppdatera följande nummer:\n{list}", + "No SIP backend configured" : "Ingen SIP-backend konfigurerad", + "Invalid date, date format must be YYYY-MM-DD" : "Felaktigt datum, datumformat måste vara ÅÅÅÅ-MM-DD", + "Conversation not found" : "Konversationen hittades inte", + "Path is already shared with this conversation" : "Sökvägen är redan delad med denna konversation", + "Chat, video & audio-conferencing using WebRTC" : "Chatt, video och ljud - konferenser med WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chatt, video och ljudkonferenser med WebRTC\n\n* 💬 **Chat** Nextcloud Talk kommer med en enkel textchatt, så att du kan dela eller ladda upp filer från din Nextcloud Files-app eller lokala enhet och nämna andra deltagare.\n* 👥 **Privata, grupp, publika och lösenordsskyddade samtal!** Bjud in någon, en hel grupp eller skicka en publik länk för att bjuda in till ett samtal.\n* 🌐 **Federerade chattar** Chatta med andra Nextcloud-användare på deras servrar\n* 💻 **Skärmdelning!** Dela din skärm med deltagarna i ditt samtal.\n* 🚀 **Integration med andra Nextcloud-appar** som Filer, Kalender, Användarstatus, Dashboard, Flow, Kartor, Smart picker, Kontakter, Deck och många fler.\n* 🌉 **Synkronisera med andra chattlösningar** Med [Matterbridge](https://github.com/42wim/matterbridge/) integrerad i Talk kan du enkelt synkronisera många andra chattlösningar till Nextcloud Talk och vice versa.", + "Leave call" : "Lämna samtalet", + "Navigating away from the page will leave the call in {conversation}" : "Navigera bort från sidan kommer att lämna samtalet {conversation}", + "Stay in call" : "Stanna i samtal", + "Error occurred when getting the conversation information" : "Ett fel uppstod vid hämtning av konversationsinformationen", + "Discuss this file" : "Diskutera den här filen", + "Share this file with others to discuss it" : "Dela den här filen med andra för att diskutera", + "Share this file" : "Dela den här filen", + "Join conversation" : "Gå med i konversation", + "This conversation is password-protected." : "Konversationen är lösenordsskyddad.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Vi har upptäckt flera felaktiga inloggningsförsök från din IP-adress. Ditt nästa inloggningsförsök kommer därför att fördröjas med upp till 30 sekunder.", + "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", + "Password" : "Lösenord", + "Submit" : "Skicka", + "Error requesting the password." : "Fel vid begäran av lösenord.", + "Request password" : "Begär lösenord", + "This conversation has ended" : "Denna konversation har avslutats", + "Error occurred when joining the conversation" : "Ett fel uppstod vid anslutning av konversationen", + "Close Talk sidebar" : "Stäng Talk sidofält", + "Open Talk sidebar" : "Öppna Talk sidofält", + "Everyone" : "Alla", + "Users and moderators" : "Användare och moderatorer", + "Moderators only" : "Endast moderatorer", + "Disable calls" : "Inaktivera samtal", + "Save changes" : "Spara ändringar", + "Saving …" : "Sparar ...", + "Saved!" : "Sparat!", + "Limit to groups" : "Begränsa till grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "När minst en grupp väljs kan bara personer i de angivna grupperna ingå i konversationer.", + "Guests can still join public conversations." : "Gäster kan fortfarande delta i publika konversationer.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Användare som inte kan använda Talk längre kommer fortfarande att listas som deltagare i sina tidigare samtal och även deras chattmeddelanden kommer att behållas.", + "Limit using Talk" : "Begränsa använda Talk", + "Limit creating a public and group conversation" : "Begränsa att skapa en allmän och gruppkonversation", + "Limit creating conversations" : "Begränsa att skapa konversationer", + "Limit starting a call" : "Begränsa att starta ett samtal", + "Limit starting calls" : "Begränsa att starta samtal", + "When a call has started, everyone with access to the conversation can join the call." : "När ett samtal har startat kan alla som har åtkomst till konversationen gå med i samtalet.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Följande bottar är installerade på denna server. I dokumentationen kan du hitta detaljer om hur du {linkstart1}bygger din egen bott{linkend} eller en {linkstart2}lista av bottar{linkend} för att aktivera på din server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Inga bottar är installerad på denna server. I dokumentationen kan du hitta detaljer om hur du {linkstart1}bygger din egen bott{linkend} eller en {linkstart2}lista av bottar{linkend} för att aktivera på din server.", + "Description is not provided" : "Beskrivning fattas", + "Locked for moderators" : "Låst för moderatorer", + "Enabled" : "Aktiverad", + "Disabled" : "Inaktiverad", + "Bots settings" : "Inställningar för bottar", + "State" : "Status", + "Name" : "Namn", + "Last error" : "Senaste fel", + "Total errors count" : "Totalt antal fel", + "Find more bots" : "Hitta fler bottar", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Betrodda servrar kan konfigureras på {linkstart}Sidan delningsinställningar{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federerade chattar och samtal fungerar redan. Hantering av bilagor kommer i en framtida version.", + "Enable Federation in Talk app" : "Aktivera federation i Talk-appen", + "Permissions" : "Behörigheter", + "Allow users to be invited to federated conversations" : "Tillåt användare att bjudas in till federerade konversationer", + "Allow users to invite federated users into conversation" : "Tillåt användare att bjuda in federerade användare till konversation", + "Only allow to federate with trusted servers" : "Tillåt endast federation med betrodda servrar", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "När minst en grupp är vald kan bara personer i de listade grupperna bjuda in federerade användare till konversationer.", + "Groups allowed to invite federated users" : "Grupper som får bjuda in federerade användare", + "Select groups …" : "Välj grupper ...", + "All messages" : "Alla meddelanden", + "@-mentions only" : "@-mentions only", + "Off" : "Av", + "General settings" : "Allmänna inställningar", + "Default notification settings" : "Standardinställningar meddelanden", + "Default group notification" : "Standard gruppmeddelande", + "Default group notification for new groups" : "Standard gruppmeddelande för nya grupper", + "Integration into other apps" : "Integration med andra appar", + "Allow conversations on files" : "Tillåt konversationer på filer", + "Allow conversations on public shares for files" : "Tillåt konversationer på offentliga delningar för filer", + "End-to-end encrypted calls" : "End-to-end-krypterade samtal", + "Enable encryption" : "Aktivera kryptering", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end-krypterade samtal med en konfigurerad SIP-brygga kräver en nyare version av high-performance backend och SIP-brygga.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobila klienter stöder för närvarande inte end-to-end-krypterade samtal.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Genom att klicka på knappen ovanför skickas informationen i formuläret till Struktur AG:s servrar. Du hittar mer information på {linkstart}spreed.eu{linkend}.", + "Pending" : "Avvaktar", + "Error" : "Fel", + "Blocked" : "Blockerar", + "Active" : "Aktiv", + "Expired" : "Utgånget", + "Never" : "Aldrig", + "The trial could not be requested. Please try again later." : "Provperiod kunde inte begäras. Vänligen försök igen senare.", + "The account could not be deleted. Please try again later." : "Kontot kunde inte raderas. Försök igen senare.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Vår partner Struktur AG tillhandahåller en tjänst där en hostad signalserver kan begäras. För detta behöver du bara fylla i formuläret nedan och din Nextcloud kommer sedan att skicka begäran. När servern är konfigurerad kommer användaruppgifterna att fyllas i automatiskt. Detta kommer att skriva över de befintliga signalserverinställningarna.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Om ditt konto för high-performance-backend inkluderar STUN- och/eller TURN-funktionalitet, kommer inställningarna att uppdateras därefter.", + "URL of this Nextcloud instance" : "URL till denna Nextcloud-instans", + "Full name of the user requesting the trial" : "Fullständigt namn på användaren som begär provperioden", + "Email of the user" : "Användarens e-post", + "Language" : "Språk", + "Country" : "Land", + "Request signaling server trial" : "Begär testversion av signalserver", + "You can see the current status of your hosted signaling server in the following table." : "Du kan se aktuell status för din hostade signalserver i följande tabell.", + "Status" : "Status", + "Created at" : "Skapad", + "Expires at" : "Går ut", + "Limits" : "Begränsningar", + "STUN included" : "STUN ingår", + "Yes" : "Ja", + "No" : "Nej", + "TURN included" : "TURN ingår", + "Delete the signaling server account" : "Ta bort signalserverkontot", + "_%n user_::_%n users_" : ["%n användare","%n användare"], + "Installed version: {version}" : "Installerad version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kan installera Matterbridge för att länka Nextcloud Talk till några andra tjänster, besök deras {linkstart1}GitHub-sida{linkend} för mer information. Att ladda ner och installera appen kan ta ett tag. Vid timeout, installera den manuellt från {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binär har felaktiga behörigheter. Se till att den binära Matterbridge-filen ägs av rätt användare och kan köras. Den finns i \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binär hittades inte eller kunde inte köras.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kan också ställa in sökvägen till Matterbridge-binären manuellt via konfigurationen. Se {linkstart}Matterbridge integrationsdokumentation{linkend} för mer information.", + "Downloading …" : "Hämtar …", + "Install Talk Matterbridge" : "Installera Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Ett fel uppstod när Matterbridge-appen skulle installeras", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ett fel uppstod när Talk Matterbridge skulle installeras. Installera den manuellt", + "Failed to execute Matterbridge binary." : "Det gick inte att köra Matterbridge binär.", + "Matterbridge integration" : "Matterbridge-integration", + "Enable Matterbridge integration" : "Aktivera Matterbridge-integration", + "Status: Checking connection" : "Status: Kontrollerar anslutning", + "OK: Running version: {version}" : "OK: Kör version: {version}", + "Error: Server seems to be a Signaling server" : "Fel: Servern verkar vara en signalserver", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fel: Systemtiderna för Nextcloud-servern och Recording-backend-servern är osynkroniserade. Se till att båda servrarna är anslutna till en tidsserver eller synkronisera deras tid manuellt.", + "Recording backend URL" : "Recording backend-URL", + "Validate SSL certificate" : "Validera SSL-certifikat", + "Delete this server" : "Ta bort denna server", + "Test this server" : "Testa denna server", + "Disabled for all calls" : "Inaktiverad för alla samtal", + "Enabled for all calls" : "Aktiverad för alla samtal", + "Configurable on conversation level by moderators" : "Anpassningsbar på konversationsnivå av moderatorer", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-inställningarna \"upload_max_filesize\" eller \"post_max_size\" tillåter endast att ladda upp filer upp till {maxUpload}.", + "Recording backend settings saved" : "Inställningar för recording backend har sparats", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorer kommer att tillåtas aktivera samtycke på konversationsnivå. Samtycket om inspelning kommer att krävas för varje deltagare innan de går med i varje samtal i denna konversation.", + "The consent to be recorded will be required for each participant before joining every call." : "Samtycket om inspelning kommer att krävas för varje deltagare innan de går med i varje samtal.", + "The consent to be recorded is not required." : "Samtycke för att spela in krävs inte.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend-konfiguration är endast möjlig med en High-performance backend.", + "Add a new recording backend server" : "Lägg till en ny recording backend-server", + "Shared secret" : "Delad hemlighet", + "Recording consent" : "Samtycke för inspelning", + "Recording transcription" : "Inspelning av transkription", + "Automatically transcribe call recordings with a transcription provider" : "Transkribera samtalsinspelningar automatiskt med en transkriptionsleverantör", + "Automatically summarize call recordings with transcription and summary providers" : "Sammanfatta automatiskt samtalsinspelningar med transkriptions- och sammanfattningsleverantörer", + "SIP configuration saved!" : "SIP-konfigurationen sparad!", + "SIP configuration is only possible with a High-performance backend." : "SIP-konfiguration är endast möjlig med en High-performance backend.", + "Enable SIP Dial-out option" : "Aktivera SIP-uppringningsalternativ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalservern behöver uppdateras för att stödja SIP-uppringningsfunktionen.", + "Do not show SIP Dial-out caller number" : "Visa inte SIP uppringarens nummer vid utgående samtal", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymt nummer ska visas som “okänd” eller “hemligt nummer” för den som tar emot samtalet", + "Dial-out number" : "Utgående nummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formaterat nummer som används som reservnummer vid utgående samtal", + "Dial-out prefix" : "Prefix för utgående samtal", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix till det konfigurerade användarnumret för utgående samtal (standard är `+`)", + "Restrict SIP configuration" : "Begränsa SIP-konfiguration", + "Enable SIP configuration" : "Aktivera SIP-konfiguration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Endast användare av följande grupper kan aktivera SIP i konversationer som de modererar", + "Phone number (Country)" : "Telefonnummer (land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Denna information skickas i e-postinbjudningar samt visas i sidofältet för alla deltagare.", + "Nextcloud base URL" : "Nextcloud bas-URL", + "Talk Backend URL" : "Talk Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Tillgängliga funktioner", + "Error: Websocket connection failed" : "Fel: Websocket-anslutning misslyckades", + "Error code" : "Felkod", + "Error message" : "Felmeddelande", + "Error: Websocket connection failed. Check browser console" : "Fel: Websocket-anslutning misslyckades. Kontrollera webbläsarkonsolen", + "High-performance backend URL" : "High-performance backend-URL", + "Missing High-performance backend warning hidden" : "Varning för saknad High-performance backend är dold", + "High-performance backend settings saved" : "Inställningar för high-performance backend har sparats", + "Nextcloud Talk setup not complete" : "Nextcloud Talk-installationen är inte klar", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Observera att i samtal med fler än 2 deltagare utan High-performance backend kommer deltagarna med största sannolikhet att uppleva anslutningsproblem och orsaka hög belastning på deltagande enheter.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installera High-performance backend för att säkerställa att samtal med flera deltagare fungerar sömlöst.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Snabb installationsguide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "High-performance backend krävs för samtal och konversationer med flera deltagare. Utan detta så måste alla deltagare ladda upp sin egen video individuellt för varje annan deltagare, vilket med största sannolikhet kommer att orsaka anslutningsproblem och en hög belastning på deltagande enheter.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Det rekommenderas starkt att sätta upp en distribuerad cache när du använder Nextcloud Talk med en High-performance backend.", + "Add High-performance backend server" : "Lägg till High-performance backend-server", + "Warn about connectivity issues in calls with more than 2 participants" : "Varna om anslutningsproblem i samtal med fler än 2 deltagare", + "STUN server URL" : "STUN server-URL", + "The server address is invalid" : "Serveradressen är ogiltig", + "STUN settings saved" : "STUN-inställningar sparade", + "STUN servers" : "STUN-servrar", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server används för att bestämma den offentliga IP-adressen av deltagare bakom en router.", + "Add a new STUN server" : "Lägg till en ny STUN-server", + "{schema} scheme must be used with a domain" : "{schema} schema måste användas med en domän", + "{option1} and {option2}" : "{option1} och {option2}", + "{option} only" : "endast {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-kandidater returneras av TURN-servern", + "Error: No working ICE candidates returned by the TURN server" : "Fel: Inga fungerande ICE-kandidater returneras av TURN-servern", + "Testing whether the TURN server returns ICE candidates" : "Testar om TURN-servern returnerar ICE-kandidater", + "TURN server schemes" : "TURN-server scheman", + "TURN server URL" : "TURN server-URL", + "TURN server secret" : "TURN-server hemlighet", + "TURN server protocols" : "TURN-server protokoll", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "En TURN-server används för att proxa trafiken från deltagare bakom en brandvägg. Om enskilda deltagare inte kan ansluta till andra är en TURN-server troligtvis nödvändig. Se {linkstart}denna dokumentation{linkend} för installationsinstruktioner.", + "TURN settings saved" : "TURN-inställningar sparade", + "TURN servers" : "TURN-servrar", + "Add a new TURN server" : "Lägg till en ny TURN-server", + "Failed" : "Misslyckades", + "OK" : "OK", + "Checking …" : "Kontrollerar...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Misslyckades: WebAssembly är inaktiverat eller stöds inte i den här webbläsaren. Aktivera WebAssembly eller använd en webbläsare med stöd för att utföra kontrollen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Misslyckades: \".wasm\"- och \".tflite\"-filer returnerades inte korrekt av webbservern. Kontrollera avsnittet \"Systemkrav\" i Talk-dokumentationen.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- och \".tflite\"-filer returnerades korrekt av webbservern.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det verkar som att PHP- och Apache-konfigurationen inte är kompatibel. Observera att PHP endast kan användas med modulen MPM_PREFORK och PHP-FPM kan endast användas med modulen MPM_EVENT.", + "Web server setup checks" : "Kontroller av webbserverinställningar", + "Files required for virtual background can be loaded" : "Filer som krävs för virtuell bakgrund kan laddas", + "Federated user" : "Federerad användare", + "Assign participants to rooms" : "Tilldela deltagare till rum", + "Configure breakout rooms" : "Konfigurera grupprum", + "Number of breakout rooms" : "Antal grupprum", + "You can create from 1 to 20 breakout rooms." : "Du kan skapa från 1 till 20 grupprum.", + "Assignment method" : "Tilldelningsmetod", + "Automatically assign participants" : "Tilldela deltagare automatiskt", + "Manually assign participants" : "Tilldela deltagare manuellt", + "Allow participants to choose" : "Låt deltagarna välja", + "Create rooms" : "Skapa rum", + "Confirm" : "Bekräfta", + "Create breakout rooms" : "Skapa grupprum", + "Reset" : "Återställ", + "Delete breakout rooms" : "Ta bort grupprum", + "Room {roomNumber}" : "Rum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuella grupprum och inställningar kommer att gå förlorade", + "Cancel" : "Avbryt", + "Unassigned participants" : "Ej tilldelade deltagare", + "Back" : "Tillbaka", + "Assign" : "Tilldela", + "Add participant \"{user}\"" : "Lägg till deltagare \"{user}\"", + "Now" : "Nu", + "Invalid calendar selected" : "Ogiltig kalender vald", + "Invalid start time selected" : "Ogiltig starttid vald", + "Invalid end time selected" : "Ogiltig sluttid vald", + "Unknown error occurred" : "Okänt fel inträffade", + "Sending no invitations" : "Skickar inga inbjudningar", + "{participant0} will receive an invitation" : "{participant0} kommer att få en inbjudan", + "{participant0} and {participant1} will receive invitations" : "{participant0} och {participant1} kommer att få inbjudningar", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} och %n annan kommer att få inbjudningar","{participant0}, {participant1} och %n andra kommer att få inbjudningar"], + "Invite {user}" : "Bjud in {user}", + "Invite all users and emails in this conversation" : "Bjud in alla användare och e-postadresser till den här konversationen", + "Meeting created" : "Möte skapat", + "Upcoming meetings" : "Kommande möten", + "Loading …" : "Laddar ...", + "No upcoming meetings" : "Inga kommande möten", + "Schedule a meeting" : "Schemalägg ett möte", + "Meeting title" : "Mötes titel", + "From" : "Från", + "To" : "Till", + "Calendar" : "Kalender", + "Attendees" : "Deltagare", + "No other participants to send invitations to." : "Inga andra deltagare att skicka inbjudningar till.", + "Add attendees" : "Lägg till deltagare", + "Save" : "Spara", + "Search participants" : "Sök deltagare", + "No results" : "Inga resultat", + "Done" : "Klar", + "Disable live transcription" : "Inaktivera live-transkribering", + "Enable live transcription (generated by AI)" : "Aktivera live-transkribering (genereras av AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Aktivera live-transkribering (appen Live Transcriptions är inte installerad)", + "Disable live translation" : "Inaktivera live-översättning", + "Enable live translation (generated by AI)" : "Aktivera live-översättning (genereras av AI)", + "Original language" : "Originalspråk", + "Live translations app is not installed" : "Appen Live translations är inte installerad", + "Original language: {languageName}" : "Originalspråk: {languageName}", + "Translated language" : "Översatt språk", + "Translated language: {languageName}" : "Översatt språk: {languageName}", + "Raise hand" : "Räck upp handen", + "Raise hand (R)" : "Räck upp handen (R)", + "Lower hand" : "Ta ner handen", + "Lower hand (R)" : "Ta ner handen (R)", + "Exit full screen (F)" : "Avsluta fullskärm (F)", + "Full screen (F)" : "Fullskärm (F)", + "Speaker view" : "Presentationsvy", + "Grid view" : "Rutnätsvy", + "Error when trying to load the available live transcription languages" : "Fel vid försök att läsa in tillgängliga språk för live-transkribering", + "Failed to enable live transcription" : "Kunde inte aktivera live-transkribering", + "Failed to enable live translations" : "Kunde inte aktivera live-översättning", + "Failed to disable live translations" : "Kunde inte inaktivera live-översättning", + "Recording consent is required" : "Samtycke för inspelning krävs", + "This conversation is read-only" : "Den här konversationen är skrivskyddad", + "Conversation not found or not joined" : "Konversationen hittades inte eller gick inte att gå med", + "Lobby is still active and you're not a moderator" : "Lobbyn är fortfarande aktiv och du är inte moderator", + "Connection failed" : "Anslutningen misslyckades", + "Reload" : "Ladda om", + "{nickName} raised their hand." : "{nickName} räckte upp handen.", + "A participant raised their hand." : "En deltagare räckte upp handen.", + "Collapse stripe" : "Minimera fält", + "Expand stripe" : "Expandera fält", + "Previous page of videos" : "Föregående sida med videor", + "Next page of videos" : "Nästa sida med videor", + "Connecting …" : "Ansluter…", + "Calling …" : "Ringer …", + "Waiting for {user} to join the call" : "Väntar på att {user} ska gå med i samtalet", + "Waiting for others to join the call …" : "Väntar på andra ansluter sig till samtalet ...", + "You can invite others in the participant tab of the sidebar" : "Du kan bjuda in andra på fliken deltagare i sidofältet", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan bjuda in andra på fliken deltagare i sidofältet eller dela den här länken!", + "Share this link to invite others!" : "Dela denna länk för att bjuda in andra!", + "Copy link" : "Kopiera länk", + "You are not allowed to enable audio" : "Du får inte aktivera ljud", + "No audio. Click to select device" : "Inget ljud. Klicka för att välja enhet", + "Mute audio" : "Stäng av ljudet", + "Mute audio (M)" : "Stäng av ljud (M)", + "Unmute audio" : "Aktivera ljud", + "Unmute audio (M)" : "Aktivera ljud (M)", + "None" : "Ingen", + "Select a microphone" : "Välj en mikrofon", + "Select a speaker" : "Välj en högtalare", + "Microphone settings" : "Mikrofoninställningar", + "Check devices" : "Kontrollera enheter", + "Access to camera was denied" : "Åtkomst till kamera nekades", + "Error while accessing camera: It is likely in use by another program" : "Fel vid åtkomst till kameran: Den används troligen av ett annat program", + "Error while accessing camera" : "Fel vid åtkomst till kameran", + "You have been muted by a moderator" : "Du har tystats av en moderator", + "Hide presenter video" : "Dölj presentatörsvideo", + "You are not allowed to enable video" : "Du får inte aktivera video", + "No video. Click to select device" : "Ingen video. Klicka för att välja enhet", + "Disable video" : "Stäng av video", + "Disable video (V)" : "Inaktivera video (V)", + "Enable video" : "Aktivera video", + "Enable video (V)" : "Aktivera video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video - Din anslutning får ett kort avbrott när du aktiverar video första gången", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video (V) - Din anslutning får ett kort avbrott när du aktiverar videon för första gången", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video. Din anslutning får ett kort avbrott när du aktiverar video första gången", + "Select a video device" : "Välj en videoenhet", + "Show presenter" : "Visa presentatör", + "You" : "Du", + "Mute" : "Tyst", + "Muted" : "Tyst", + "Show screen" : "Visa skärm", + "Stop following" : "Sluta följa", + "Connection could not be established …" : "Anslutningen kunde inte upprättas ...", + "Connection was lost and could not be re-established …" : "Anslutningen förlorades och kunde inte återupprättas ...", + "Connection could not be established. Trying again …" : "Det gick inte att upprätta anslutning. Försöker igen ...", + "Connection lost. Trying to reconnect …" : "Anslutning förlorad. Försöker återansluta ...", + "Connection problems …" : "Anslutningsproblem ...", + "Collapse" : "Dölj", + "Expand" : "Utöka", + "You need to be logged in to upload files" : "Du måste vara inloggad för att ladda upp filer", + "Drop your files to upload" : "Släpp dina filer för att ladda upp", + "Conversation messages" : "Konversationsmeddelanden", + "Scroll to bottom" : "Bläddra till botten", + "Post message" : "Skicka meddelande", + "Federated conversation" : "Federerad konversation", + "Public conversation" : "Publik konversation", + "Favorite" : "Favorit", + "Banned users" : "Blockerade användare", + "Manage the list of banned users in this conversation." : "Hantera listan över blockerade användare i den här konversationen.", + "Manage bans" : "Hantera blockeringar", + "No banned users" : "Inga blockerade användare", + "Banned by:" : "Blockerad av:", + "Date:" : "Datum:", + "Note:" : "Notering:", + "Hide details" : "Göm detaljer", + "Show details" : "Visa detaljer", + "Unban" : "Tillåt", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Du kan ändra titeln och beskrivningen i {linkstart}Kalender ↗{linkend}.", + "Error while updating conversation name" : "Fel uppstod när namnet på konversationen skulle uppdateras", + "Error while updating conversation description" : "Fel uppstod när beskrivningen av konversationen skulle uppdateras", + "Enter a name for this conversation" : "Ange ett namn för den här konversationen", + "Edit conversation name" : "Ändra namn på konversation", + "Edit conversation description" : "Ändra beskrivning på konversation", + "Enter a description for this conversation" : "Ange en beskrivning för den här konversationen", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Följande bottar kan aktiveras i den här konversationen. Kontakta din administratör för att få fler bottar installerade på den här servern.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Inga bottar är installerade på denna server. Kontakta din administratör för att få bottar installerade på den här servern.", + "Disable" : "Inaktivera", + "Enable" : "Aktivera", + "The bot is not available anymore" : "Boten är inte längre tillgänglig", + "Breakout rooms" : "Grupprum", + "Manage breakout rooms" : "Hantera grupprum", + "Set up breakout rooms for this conversation" : "Konfigurera grupprum för den här konversationen", + "Please select a valid PNG or JPG file" : "Välj en giltig PNG- eller JPG-fil", + "Choose your conversation picture" : "Välj din konversationsbild", + "Choose" : "Välj", + "Error setting conversation picture" : "Fel vid inställning av konversationsbild", + "Could not set the conversation picture: {error}" : "Kunde inte ställa in konversationsbilden: {error}", + "Error cropping conversation picture" : "Kunde inte beskära konversationsbilden", + "Error removing conversation picture" : "Kunde inte ta bort konversationsbilden", + "Set emoji as conversation picture" : "Ställ in emoji som konversationsbild", + "Set background color for conversation picture" : "Ställ in bakgrundsfärg för konversationsbild", + "Upload conversation picture" : "Ladda upp konversationsbild", + "Choose conversation picture from files" : "Välj konversationsbild från filer", + "Remove conversation picture" : "Ta bort konversationsbild", + "The file must be a PNG or JPG" : "Filen måste vara en PNG eller JPG", + "Set picture" : "Ställ in bild", + "Default permissions modified for {conversationName}" : "Standardbehörigheter har ändrats för {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kunde inte ändra standardbehörigheter för {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Redigera standardbehörigheterna för deltagare i den här konversationen. Dessa inställningar påverkar inte moderatorer.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Varje gång behörigheter ändras i det här avsnittet kommer anpassade behörigheter som tidigare tilldelats enskilda deltagare att gå förlorade.", + "All permissions" : "Alla behörigheter", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deltagare har behörighet att starta ett samtal, gå med i ett samtal, aktivera ljud och video samt dela skärm.", + "Participants can use all available features." : "Deltagare kan använda alla tillgängliga funktioner.", + "Restricted" : "Begränsad", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deltagare kan gå med i samtal, men kan inte aktivera ljud eller video eller dela skärm förrän en moderator manuellt ger dem behörighet.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Deltagare får en begränsad uppsättning funktioner tills en moderator manuellt beviljar ytterligare behörigheter.", + "Advanced permissions" : "Avancerade behörigheter", + "Edit permissions" : "Redigera behörigheter", + "Conversation settings" : "Konversationsinställningar", + "Basic Info" : "Grundläggande info", + "Personal" : "Personligt", + "Moderation" : "Moderering", + "Setup overview" : "Inställningsöversikt", + "Live transcription" : "Live-transkribering", + "Live transcriptions app is not installed" : "Appen Live transcriptions är inte installerad", + "Enable live transcription" : "Aktivera live-transkribering", + "Breakout Rooms" : "Grupprum", + "Matterbridge" : "Matterbridge", + "Bots" : "Bottar", + "Danger zone" : "Riskzon", + "Archive conversation" : "Arkivera konversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arkiverade konversationer är dolda från konversationslistan som standard. De kommer dock fortfarande att visas när du söker efter konversationsnamnet eller kommer åt en lista med arkiverade konversationer.", + "Do you really want to leave \"{displayName}\"?" : "Vill du verkligen lämna \"{displayName}\"?", + "You can archive this conversation instead." : "Du kan arkivera den här konversationen istället.", + "Leave conversation" : "Lämna konversationen", + "You need to promote a new moderator before you can leave the conversation" : "Du måste tilldela en ny moderator innan du kan lämna konversationen", + "Delete conversation" : "Ta bort konversationen", + "Do you really want to delete \"{displayName}\"?" : "Vill du verkligen radera \"{displayName}\"?", + "Error while deleting conversation" : "Kunde inte ta bort konversationen", + "Delete all chat messages" : "Radera alla chattmeddelanden", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vill du verkligen radera alla meddelanden i \"{displayName}\"?", + "Error while clearing chat history" : "Kunde inte rensa chatthistoriken", + "Be careful, these actions cannot be undone." : "Var försiktig, dessa åtgärder kan inte ångras.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "När en konversation har lämnats krävs en inbjudan för att återgå till en sluten konversation. En öppen konversation kan återanslutas när som helst.", + "Permanently delete this conversation." : "Radera den här konversationen permanent.", + "Delete chat messages" : "Radera chattmeddelanden", + "Permanently delete all the messages in this conversation." : "Radera alla meddelanden i den här konversationen permanent.", + "_%n hour_::_%n hours_" : ["%n timme","%n timmar"], + "_%n day_::_%n days_" : ["%n dag","%n dagar"], + "_%n week_::_%n weeks_" : ["%n vecka","%n veckor"], + "Custom expiration time" : "Anpassad utgångstid", + "Message expiration disabled" : "Utgångstid för meddelanden är inaktiverat", + "Message expiration set: {duration}" : "Meddelandets utgångstid: {duration}", + "Error when trying to set message expiration" : "Fel vid försök att ställa in meddelandets utgång", + "Message expiration" : "Meddelande löper ut", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chattmeddelanden kan löpa ut efter en viss tid. Notera: Filer som delas i chatten kommer inte att raderas för ägaren, men kommer inte längre att delas i konversationen.", + "Set message expiration" : "Ställ in meddelandes utgångstid", + "Current message expiration" : "Nuvarande utgångstid för meddelande", + "Password copied to clipboard" : "Lösenordet har kopierats till urklipp", + "Password could not be copied" : "Lösenordet kunde inte kopieras", + "Guest access" : "Gäståtkomst", + "Breakout rooms are not allowed in public conversations." : "Grupprum är inte tillåtna i publika konversationer.", + "Allow guests to join this conversation via link" : "Tillåt gäster att gå med i denna konversation via länk", + "Password protection" : "Lösenordsskydd", + "This conversation is password-protected. Guests need password to join" : "Den här konversationen är lösenordsskyddad. Gäster behöver lösenord för att gå med", + "Password protection is needed for public conversations" : "Lösenordsskydd krävs för offentliga konversationer", + "Set a password" : "Sätt ett lösenord", + "Change password" : "Byt lösenord", + "Enter new password" : "Ange nytt lösenord", + "Save password" : "Spara lösenord", + "Copy password" : "Kopiera lösenord", + "Guests are allowed to join this conversation via link" : "Gäster får gå med i denna konversation via länk", + "Guests are not allowed to join this conversation" : "Gäster får inte gå med i denna konversation", + "Resend invitations" : "Skicka inbjudningar igen", + "This conversation is open to both registered users and users created with the Guests app" : "Den här konversationen är öppen för både registrerade användare och användare som skapats med appen Gäster", + "This conversation is open to registered users" : "Denna konversation är öppen för registrerade användare", + "This conversation is limited to the current participants" : "Denna konversation är begränsad till de aktuella deltagarna", + "You opened the conversation to both registered users and users created with the Guests app" : "Du öppnade konversationen för både registrerade användare och användare som skapats med appen Gäster", + "Error occurred when opening or limiting the conversation" : "Ett fel uppstod när konversationen öppnades eller begränsades", + "Open conversation to registered users, showing it in search results" : "Öppna konversationen för registrerade användare och visa den i sökresultaten", + "Also open to users created with the Guests app" : "Även öppen för användare som skapats med appen Gäster", + "Open conversation" : "Öppen konversation", + "Set language spoken in calls" : "Ange vilket språk som talas i samtal", + "Languages could not be loaded" : "Språk kunde inte laddas", + "Loading languages …" : "Laddar språk …", + "Invalid language" : "Ogiltigt språk", + "Default language (English)" : "Standardspråk (engelska)", + "Default live transcription language set" : "Standardspråk för live-transkribering har angetts", + "Live transcription language set: {languageName}" : "Språk för live-transkribering inställt: {languageName}", + "Error when trying to set live transcription language" : "Fel vid försök att ställa in språk för live-transkribering", + "Start time: {date}" : "Starttid: {date}", + "Start time has been updated" : "Starttiden har uppdaterats", + "Error occurred while updating start time" : "Fel uppstod vid uppdatering av starttid", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Aktivering av lobbyn kommer att ta bort icke-moderatorer från det pågående samtalet.", + "Enable lobby, restricting the conversation to moderators" : "Aktivera lobbyn, begränsa konversationen till moderatorer", + "Meeting start time" : "Mötets starttid", + "Start time (optional)" : "Starttid (valfritt)", + "Import email participants" : "Importera e-postdeltagare", + "You can import a list of email participants from a CSV file." : "Du kan importera en lista över e-postdeltagare från en CSV-fil.", + "Poll drafts" : "Omröstningsutkast", + "Browse poll drafts" : "Bläddra bland omröstningsutkast", + "Error occurred when locking the conversation" : "Ett fel uppstod när konversationen skulle låsas", + "Error occurred when unlocking the conversation" : "Ett fel uppstod när konversationen skulle låsas upp", + "Lock conversation" : "Lås konversation", + "This will also terminate the ongoing call." : "Detta kommer också att avsluta det pågående samtalet.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lås konversationen för att förhindra att någon skickar meddelanden eller startar samtal", + "Edit" : "Ändra", + "More information" : "Mer information", + "Delete" : "Radera", + "Add new bridged channel to current conversation" : "Lägg till ny bryggad kanal till aktuell konversation", + "unknown state" : "okänt tillstånd", + "running" : "aktiv", + "not running, check Matterbridge log" : "inte aktiv, kontrollera Matterbridge-loggen", + "not running" : "inte aktiv", + "Bridge saved" : "Brygga sparad", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Du kan brygga kanaler från olika snabbmeddelandesystem med Matterbridge.", + "More info on Matterbridge" : "Mer information om Matterbridge", + "Messaging systems" : "Meddelandesystem", + "Enable bridge" : "Aktivera brygga", + "Show Matterbridge log" : "Visa Matterbridge-logg", + "Log content" : "Logginnehåll", + "Only moderators are allowed to mention @all" : "Endast moderatorer får nämna @all", + "All participants are allowed to mention @all" : "Alla deltagare får nämna @all", + "Participants are now allowed to mention @all." : "Deltagarna får nu nämna @all.", + "Mentioning @all has been limited to moderators." : "Att nämna @all har begränsats till moderatorer.", + "Allow participants to mention @all" : "Tillåt deltagarna att nämna @all", + "Mention permissions" : "Behörigheter för omnämnanden", + "Notifications" : "Aviseringar", + "Notify about calls in this conversation" : "Meddela om samtal i den här konversationen", + "Important conversation" : "Viktigt samtal", + "\"Do not disturb\" user status is ignored for important conversations" : "Användarstatus \"Stör ej\" ignoreras för viktiga konversationer", + "Sensitive conversation" : "Känslig konversation", + "Message preview will be disabled in conversation list and notifications" : "Förhandsvisning av meddelanden kommer att inaktiveras i konversationslistan och i aviseringar", + "Recording consent is required for calls in this conversation" : "Samtycke för inspelning krävs för samtal i denna konversation", + "Recording consent is not required for calls in this conversation" : "Samtycke för inspelning krävs inte för samtal i denna konversation", + "Recording consent requirement was updated" : "Kravet på samtycke vid inspelning har uppdaterats", + "Error occurred while updating recording consent" : "Fel uppstod vid uppdatering av samtycke för inspelning", + "Recording Consent" : "Samtycke för inspelning", + "Recording consent cannot be changed once a call or breakout session has started." : "Samtycke för inspelning kan inte ändras när ett samtal eller grupprum har startat.", + "Require recording consent before joining call in this conversation" : "Kräv inspelningssamtycke för att gå med i samtalet i den här konversationen", + "Recording consent is required for all calls" : "Samtycke för inspelning krävs för alla samtal", + "SIP dial-in is now possible without PIN requirement" : "SIP-inringning är nu möjlig utan PIN-krav", + "SIP dial-in is now enabled" : "SIP-inringning är nu aktiverad", + "SIP dial-in is now disabled" : "SIP-inringning är nu inaktiverad", + "Error occurred when enabling SIP dial-in" : "Ett fel uppstod när SIP-inringning skulle aktiveras", + "Error occurred when disabling SIP dial-in" : "Ett fel uppstod när SIP-inringning skulle inaktiveras", + "Phone and SIP dial-in" : "Telefon och SIP-inringning", + "Enable phone and SIP dial-in" : "Aktivera telefon och SIP-inringning", + "Allow to dial-in without a PIN" : "Tillåt att ringa in utan PIN", + "Ongoing" : "Pågår", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person har accepterat","%n personer har accepterat"], + "_%n person declined_::_%n people declined_" : ["%n person har avböjt","%n personer har avböjt"], + "_and %n other attachment_::_and %n other attachments_" : ["och %n annan bilaga","och %n andra bilagor"], + "With {displayName}" : "Med {displayName}", + "In {conversation}" : "I {conversation}", + "View attachment" : "Visa bilaga", + "Join" : "Gå med", + "View conversation" : "Visa konversation", + "View event on Calendar" : "Visa händelse i kalender", + "Error while creating the conversation" : "Fel uppstod när konversationen skulle skapas", + "Hello, {displayName}" : "Hej, {displayName}", + "Start meeting now" : "Starta möte nu", + "Give your meeting a title" : "Ge ditt möte en titel", + "Create and copy link" : "Skapa och kopiera länk", + "Create a new conversation" : "Skapa en ny konversation", + "Join open conversations" : "Gå med i öppna konversationer", + "Call a phone number" : "Ring ett telefonnummer", + "Scroll backward" : "Skrolla bakåt", + "Scroll forward" : "Skrolla framåt", + "Schedule meetings" : "Schemalägg möten", + "You don't have any upcoming meetings" : "Du har inga kommande möten", + "Calendar events with a conversation link as the location are shown here" : "Kalenderhändelser med en konversationslänk som plats visas här", + "Open calendar" : "Öppna kalender", + "Unread mentions" : "Olästa omnämnanden", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Meddelanden där du har blivit nämnd visas här. Du kan nämna personer genom att skriva @ följt av deras namn", + "Upcoming reminders" : "Kommande påminnelser", + "Message reminders" : "Meddelandepåminnelser", + "Set a reminder on a message to be notified" : "Ställ in en påminnelse på ett meddelande för att få en avisering", + "Start a group conversation" : "Skapa en gruppkonversation", + "Create conversation" : "Skapa konversation", + "Enter your name" : "Ange ditt namn", + "Submit name and join" : "Ange namn och gå med", + "Do you already have an account?" : "Har du redan ett konto?", + "Log in" : "Logga in", + "Error while verifying uploaded file" : "Fel vid verifiering av uppladdad fil", + "Uploaded file is verified" : "Uppladdad fil är verifierad", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Innehållsformatet är kommaseparerade värden (CSV):
- Rubrikrad krävs och måste matcha \"namn\",\"e-post\" eller bara \"e-post\"
- En post per rad (t.ex. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Deltagare har lagts till", + "Error while adding participants" : "Det gick inte att lägga till deltagare", + "Import a file" : "Importera en fil", + "Browse" : "Bläddra", + "Verifying uploaded file …" : "Verifierar uppladdad fil …", + "This might take a moment" : "Det här kan ta ett tag", + "Send invitations" : "Skicka inbjudningar", + "_%n invalid email_::_%n invalid emails_" : ["%n ogiltig e-postadress","%n ogiltiga e-postadresser"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-postadress är redan importerade eller en dubblett","%n e-postadresser är redan importerade eller dubbletter"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n inbjudning kan skickas","%n inbjudningar kan skickas"], + "An error occurred while calling a phone number" : "Ett fel uppstod när ett telefonnummer ringdes", + "Phone number could not be called: {error}" : "Kunde inte ringa upp telefonnummer: {error}", + "Phone number could not be called" : "Kunde inte ringa upp telefonnummer", + "Search participants or phone numbers" : "Sök deltagare eller telefonnummer", + "Creating the conversation …" : "Skapar konversationen ...", + "Mark as read" : "Markera som läst", + "Mark as unread" : "Markera som oläst", + "Remove from favorites" : "Ta bort från favoriter", + "Add to favorites" : "Lägg till som favorit", + "Unarchive conversation" : "Avarkivera konversation", + "Ignore \"Do not disturb\"" : "Ignorera \"Stör ej\"", + "You need to promote a new moderator before you can leave the conversation." : "Du måste tilldela en ny moderator innan du kan lämna konversationen.", + "Conversation actions" : "Konversationsåtgärder", + "Notify about calls" : "Meddela om samtal", + "Hide message text" : "Göm meddelandetext", + "Pending invitations" : "Väntande inbjudningar", + "Join conversations from other servers" : "Gå med i konversationer från andra servrar", + "From {user} at {remoteServer}" : "Från {user} på {remoteServer}", + "Decline invitation" : "Avböj inbjudan", + "Accept invitation" : "Acceptera inbjudan", + "No pending invitations" : "Inga väntande inbjudningar", + "Home" : "Hem", + "Unread" : "Oläst", + "Mentions" : "Omnämnanden", + "Meetings" : "Möten", + "Sort conversations" : "Sortera konversationer", + "By recent activity" : "Efter senaste aktivitet", + "Alphabetically" : "Alfabetisk", + "Do not group by type" : "Gruppera inte efter typ", + "Show private ones first" : "Visa privata först", + "Show group ones first" : "Visa grupper först", + "No followed threads" : "Inga följda trådar", + "No matches found" : "Inga träffar hittades", + "No conversations found" : "Inga konversationer hittades", + "You have no archived conversations." : "Du har inga arkiverade konversationer.", + "Subscribe to an existing thread or start your own." : "Prenumerera på en befintlig tråd eller starta en egen.", + "You have no unread mentions." : "Du har inga olästa omnämnanden.", + "You have no unread messages." : "Du har inga olästa meddelanden.", + "An error occurred while performing the search" : "Ett fel uppstod när sökningen utfördes", + "Conversation list" : "Konversationslista", + "Filter conversations by" : "Filtrera konversationer efter", + "Unread messages" : "Olästa meddelanden", + "Meeting conversations" : "Möteskonversationer", + "Clear filters" : "Rensa filter", + "New personal note" : "Ny personlig anteckning", + "SIP backend is not installed" : "SIP-backend är inte installerad", + "Back to conversations" : "Tillbaka till konversationer", + "Archived conversations" : "Arkiverade konversationer", + "Threads" : "Trådar", + "Clear filter" : "Rensa filter", + "Show more threads" : "Visa fler trådar", + "App settings" : "Appinställningar", + "Users" : "Användare", + "Groups" : "Grupper", + "Teams" : "Teams", + "Federated users" : "Federerade användare", + "New private conversation" : "Ny privat konversation", + "Other sources" : "Andra källor", + "Open conversations" : "Öppna konversationer", + "No search results" : "Inga sökresultat", + "Users, groups and teams" : "Användare, grupper och team", + "Users and groups" : "Användare och grupper", + "Users and teams" : "Användare och team", + "Groups and teams" : "Grupper och team", + "New group conversation" : "Ny gruppkonversation", + "The meeting will start soon" : "Mötet börjar snart", + "This meeting is scheduled for {startTime}" : "Det här mötet är planerat till {startTime}", + "You are currently waiting in the lobby" : "Du väntar för närvarande i lobbyn", + "Enable noise suppression" : "Aktivera brusreducering", + "Reduce background noises for better voice quality" : "Minska bakgrundsljud för bättre ljudkvalitet", + "Enable echo cancellation" : "Aktivera ekoborttagning", + "Minimize echo effect from own surrounding" : "Minimera eko från din omgivning", + "Enable auto gain control" : "Aktivera automatisk ljudnivåjustering", + "Dynamically adjust microphone volume for consistent level" : "Justera mikrofonvolymen dynamiskt för en jämn nivå", + "Select microphone" : "Välj mikrofon", + "No microphone available" : "Ingen mikrofon tillgänglig", + "Select speaker" : "Välj högtalare", + "No speaker available" : "Ingen högtalare tillgänglig", + "Select camera" : "Välj kamera", + "No camera available" : "Ingen kamera tillgänglig", + "Select a device" : "Välj en enhet", + "Playing …" : "Spelar …", + "Test speakers" : "Testa högtalare", + "Test" : "Test", + "Devices" : "Enheter", + "Backgrounds" : "Bakgrunder", + "No audio" : "Inget ljud", + "No camera" : "Ingen kamera", + "Display video as you will see it (mirrored)" : "Visa video som du kommer att se den (speglad)", + "Display video as others will see it" : "Visa video som andra kommer att se den", + "Calls are not supported in your browser" : "Samtal stöds inte i din webbläsare", + "Access to microphone is only possible with HTTPS" : "Åtkomst till mikrofon är endast möjligt via HTTPS", + "Access to microphone was denied" : "Åtkomst till mikrofon nekades", + "Error while accessing microphone" : "Fel vid åtkomst till mikrofon", + "Access to camera is only possible with HTTPS" : "Åtkomst till kamera är endast möjligt via HTTPS", + "The call is being recorded." : "Samtalet spelas in.", + "The call might be recorded." : "Samtalet kan spelas in.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Inspelningen kan innehålla din röst, video från kameran och skärmdelning. Ditt samtycke krävs innan du går med i samtalet.", + "Give consent to the recording of this call" : "Ge samtycke till inspelningen av detta samtal", + "Show more info" : "Visa mer information", + "Audio is not available" : "Ljud är inte tillgängligt", + "Video is not available" : "Video är inte tillgänglig", + "Start recording immediately with the call" : "Börja spela in omedelbart med samtalet", + "Recording backend is not installed" : "Recording-backend är inte installerad", + "Notify all participants about this call" : "Meddela alla deltagare om detta samtal", + "Apply settings" : "Tillämpa inställningar", + "Select virtual office background" : "Välj bakgrund för virtuell kontor", + "Select virtual home background" : "Välj bakgrund för virtuellt hem", + "Select virtual abstract background" : "Välj virtuell abstrakt bakgrund", + "Select virtual beach background" : "Välj virtuell strandbakgrund", + "Select virtual park background" : "Välj virtuell parkbakgrund", + "Select virtual theater background" : "Välj virtuell teaterbakgrund", + "Select virtual library background" : "Välj bakgrund för virtuellt bibliotek", + "Select virtual space station background" : "Välj bakgrund för virtuell rymdstation", + "Error while uploading the file" : "Fel vid uppladdning av fil", + "Select a file" : "Välj en fil", + "Invalid path selected" : "Ogiltig sökväg vald", + "Select virtual background from file {fileName}" : "Välj virtuell bakgrund från fil {fileName}", + "Blur" : "Suddig", + "Upload" : "Ladda upp", + "Files" : "Filer", + "(editing)" : "(redigerar)", + "(edited)" : "(redigerad)", + "The message has expired or has been deleted" : "Meddelandet har löpt ut eller raderats", + "Cancel quote" : "Avbryt citat", + "24 hours" : "24 timmar", + "7 days" : "7 dagar", + "30 days" : "30 dagar", + "Until unpin" : "Tills fästet tas bort", + "Clear reminder – {timeLocale}" : "Rensa påminnelse – {timeLocale}", + "Edited by {actor}" : "Redigerad av {actor}", + "Pinned by you" : "Fäst av dig", + "Pinned by {actor}" : "Fäst av {actor}", + "Until {absoluteDate}" : "Till {absoluteDate}", + "Message text copied to clipboard" : "Meddelandetext har kopierats till urklipp", + "Message text could not be copied" : "Kunde inte kopiera meddelandetexten", + "Message forwarded to \"Note to self\"" : "Meddelande vidarebefordrat till \"Egna anteckningar\"", + "Error while forwarding message to \"Note to self\"" : "Fel vid vidarebefordran av meddelande till \"Egna anteckningar\"", + "A reminder was successfully removed" : "En påminnelse har tagits bort", + "Error occurred when removing a reminder" : "Ett fel uppstod när en påminnelse skulle tas bort", + "A reminder was successfully set at {datetime}" : "En påminnelse har ställts in {datetime}", + "Error occurred when creating a reminder" : "Ett fel uppstod när en påminnelse skapades", + "Add a reaction to this message" : "Lägg till en reaktion till detta meddelande", + "Reply" : "Svara", + "More actions" : "Fler händelser", + "Set reminder" : "Ställ in påminnelse", + "Pin message" : "Fäst meddelande", + "Unpin message" : "Ta bort fäst meddelande", + "Reply privately" : "Svara privat", + "Edit message" : "Redigera meddelande", + "Copy message" : "Kopiera meddelande", + "Copy message link" : "Kopiera meddelandelänk", + "Go to file" : "Gå till fil", + "Download file" : "Ladda ner fil", + "Go to thread" : "Gå till tråd", + "Edit thread details" : "Redigera tråddetaljer", + "Forward message" : "Vidarebefordra meddelande", + "Translate" : "Översätt", + "Set custom reminder" : "Ställ in anpassad påminnelse", + "Keep pinned for" : "Behåll fäst i", + "Set custom period" : "Ange anpassad period", + "Close reactions menu" : "Stäng reaktionsmenyn", + "React with {emoji}" : "Reagera med {emoji}", + "React with another emoji" : "Reagera med en annan emoji", + "Choose a conversation to forward the selected message." : "Välj en konversation för att vidarebefordra det valda meddelandet.", + "Error while forwarding message" : "Fel vid vidarebefordran av meddelande", + "The message has been forwarded to {selectedConversationName}" : "Meddelandet har vidarebefordrats till {selectedConversationName}", + "Dismiss" : "Avfärda", + "Go to conversation" : "Gå till konversation", + "Detect language" : "Upptäck språk", + "The message could not be translated" : "Meddelandet kunde inte översättas", + "Translation copied to clipboard" : "Översättningen har kopierats till urklipp", + "Translation could not be copied" : "Översättningen kunde inte kopieras", + "Translate message" : "Översätt meddelande", + "Source language to translate from" : "Språk att översätta från", + "Translate from" : "Översätt från", + "Target language to translate into" : "Språk att översätta till", + "Translate to" : "Översätt till", + "Translating" : "Översätter", + "This translation is AI generated and may contain mistakes." : "Denna översättning är AI-genererad och kan innehålla fel.", + "Copy translated text" : "Kopiera översatt text", + "Error when scheduling the message" : "Kunde inte schemalägga meddelandet", + "Reschedule" : "Ändra schemaläggning", + "Send now" : "Skicka nu", + "Choose a time" : "Välj en tid", + "Send at custom time" : "Skicka vid anpassad tid", + "Will be sent without notification" : "Kommer att skickas utan avisering", + "Message read by everyone who shares their reading status" : "Meddelandet läst av alla som delar sin lässtatus", + "Message sent" : "Meddelande skickat", + "Sent without notification" : "Skickat utan avisering", + "Deleting message" : "Raderar meddelande", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Meddelandet har raderats, men en bott eller Matterbridge är konfigurerat och meddelandet kanske redan har distribuerats till andra tjänster", + "Message deleted successfully" : "Meddelandet har raderats", + "Message could not be deleted because it is too old" : "Meddelandet kunde inte raderas eftersom det är för gammalt", + "Only normal chat messages can be deleted" : "Endast normala chattmeddelanden kan raderas", + "An error occurred while deleting the message" : "Ett fel uppstod när meddelandet skulle raderas", + "Pinned" : "Fäst", + "Your browser does not support playing audio files" : "Din webbläsare stöder inte uppspelning av ljudfiler", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} i {board}", + "Deck Card" : "Deck-kort", + "Remove {fileName}" : "Ta bort {fileName}", + "Open this location in OpenStreetMap" : "Öppna denna plats i OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n svar","%n svar"], + "Sending message" : "Skickar meddelande", + "Failed to send the message. Click to try again" : "Kunde inte skicka meddelandet. Klicka för att försöka igen", + "Not enough free space to upload file" : "Inte tillräckligt med ledigt utrymme för att ladda upp filen", + "You cannot send messages to this conversation at the moment" : "Du kan inte skicka meddelanden till den här konversationen för tillfället", + "Could not update the message" : "Kunde inte uppdatera meddelandet", + "Reply to thread \"{threadTitle}\"" : "Svara i tråd \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Du röstade • %n röst","Du röstade • %n röster"], + "You voted" : "Du röstade", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Klicka för att rösta • %n röst","Klicka för att rösta • %n röster"], + "Click to vote" : "Klicka för att rösta", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Omröstningsutkast • %n alternativ","Omröstningsutkast • %n alternativ"], + "_%n vote_::_%n votes_" : ["%n röst","%n röster"], + "Edit poll draft" : "Redigera omröstningsutkast", + "Delete poll draft" : "Ta bort utkast till omröstning", + "Open poll" : "Öppna omröstning", + "Closed poll" : "Avslutad omröstning", + "See results" : "Se resultat", + "Reactions" : "Reaktioner", + "No permission to post reactions in this conversation" : "Ingen behörighet att posta reaktioner i denna konversation", + "and {participant}" : "och {participant}", + "_and %n other participant_::_and %n other participants_" : ["och %n annan deltagare","och %n andra deltagare"], + "Show all reactions" : "Visa alla reaktioner", + "Add more reactions" : "Lägg till fler reaktioner", + "Show or collapse system messages" : "Visa eller dölj systemmeddelanden", + "No messages" : "Inga meddelanden", + "All messages have expired or have been deleted." : "Alla meddelanden har löpt ut eller har raderats.", + "Generate summary with AI" : "Skapa en sammanfattning med AI", + "{author} (pinned by you)" : "{author} (fäst av dig)", + "{author} (pinned by {actor})" : "{author} (fäst av {actor})", + "Unpin" : "Lossa", + "Cancel search" : "Avbryt sökning", + "Add a phone number" : "Lägg till ett telefonnummer", + "Error: A password is required to create the conversation." : "Fel: Ett lösenord krävs för att skapa konversationen.", + "All set, the conversation \"{conversationName}\" was created." : "Allt klart, konversationen \"{conversationName}\" skapades.", + "Create a new group conversation" : "Skapa en ny gruppkonversation", + "Add participants" : "Lägg till deltagare", + "Maximum length exceeded ({maxlength} characters)" : "Maximal längd har överskridits ({maxlength} tecken)", + "Conversation type" : "Konversationstyp", + "Conversation visibility" : "Konversationens synlighet", + "Allow guests to join via link" : "Tillåt gäster att ansluta via länk", + "Enter password" : "Ange lösenord", + "This conversation has been locked" : "Den här konversationen har låsts", + "No permission to post messages in this conversation" : "Ingen behörighet att skicka meddelanden i den här konversationen", + "Joining conversation …" : "Går med i konversationen ...", + "Write a message without notification" : "Skriv ett meddelande utan avisering", + "Create a thread silently" : "Skapa en tråd utan avisering", + "Create a thread" : "Skapa en tråd", + "Send message silently" : "Skicka meddelande tyst", + "Send message" : "Skicka meddelande", + "Send without notification" : "Skicka utan avisering", + "The participant will not be notified about new messages" : "Deltagaren kommer inte att meddelas om nya meddelanden", + "Participants will not be notified about new messages" : "Deltagare kommer inte att meddelas om nya meddelanden", + "Message will be sent {datetimeString}" : "Meddelandet kommer att skickas {datetimeString}", + "Thread title is required" : "Trådtitel krävs", + "Message text is required" : "Meddelandetext krävs", + "The message could not be edited" : "Meddelandet kunde inte redigeras", + "File to share" : "Fil att dela", + "File upload is not available in this conversation" : "Filuppladdning är inte tillgängligt i den här konversationen", + "Message was successfully scheduled" : "Meddelandet har schemalagts", + "Add emoji" : "Lägg till emoji", + "Adding a mention will only notify users who did not read the message." : "Om du lägger till ett omnämnande kommer endast användare som inte har läst meddelandet att meddelas.", + "Thread title" : "Trådtitel", + "Send later" : "Skicka senare", + "Show scheduled messages" : "Visa schemalagda meddelanden", + "Cancel editing" : "Avbryt redigering", + "Schedule message" : "Schemalägg meddelande", + "{user} is out of office and might not respond." : "{user} är frånvarande och kanske inte svarar.", + "Absence period: {startDate} - {endDate}" : "Frånvaroperiod: {startDate} - {endDate}", + "Replacement:" : "Ersättning:", + "Share from {nextcloud}" : "Dela från {nextcloud}", + "Share from Files" : "Dela från Filer", + "Share files to the conversation" : "Dela filer till konversationen", + "Upload from device" : "Ladda upp från enheten", + "Create new poll" : "Skapa ny omröstning", + "Smart picker" : "Smart picker", + "Record voice message" : "Spela in röstmeddelande", + "End recording and send" : "Avsluta inspelningen och skicka", + "Dismiss recording" : "Stäng inspelningen", + "Access to the microphone was denied" : "Åtkomst till mikrofon nekades", + "Microphone either not available or disabled in settings" : "Mikrofonen är antingen inte tillgänglig eller inaktiverad i inställningarna", + "Error while recording audio" : "Fel vid inspelning av ljud", + "Voice message {time} ({conversation})" : "Röstmeddelande {time} ({conversation})", + "Generating summary of unread messages …" : "Skapar sammanfattning av olästa meddelanden ...", + "Summary is AI generated and might contain mistakes" : "Sammanfattningen är AI-genererad och kan innehålla misstag", + "Error occurred during a summary generation" : "Ett fel uppstod vid generering av sammanfattning", + "New file" : "Ny fil", + "Blank" : "Tom", + "Error while creating file" : "Fel när filen skapades", + "Create and share a new file" : "Skapa och dela en ny fil", + "Name of the new file" : "Namn på den nya filen", + "Create file" : "Skapa fil", + "Someone is typing …" : "Någon skriver …", + "{user1} is typing …" : "{user1} skriver …", + "{user1} and {user2} are typing …" : "{user1} och {user2} skriver …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} och {user3} skriver …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} och %n annan skriver …","{user1}, {user2}, {user3} och %n andra skriver …"], + "Add more files" : "Lägg till fler filer", + "Send" : "Skicka", + "In this conversation {user} can:" : "I denna konversation {user} kan:", + "Edit default permissions for participants in {conversationName}" : "Redigera standardbehörigheter för deltagare i {conversationName}", + "Start a call" : "Starta samtal", + "Skip the lobby" : "Hoppa över lobbyn", + "Can post messages" : "Kan skicka meddelanden", + "Can post messages and reactions" : "Kan posta meddelanden och reaktioner", + "Can add reactions" : "Kan lägga till reaktioner", + "Enable the microphone" : "Aktivera mikrofon", + "Enable the camera" : "Aktivera kameran", + "Share the screen" : "Dela skärmen", + "Update permissions" : "Uppdatera behörigheter", + "Updating permissions" : "Uppdaterar behörigheter", + "No poll drafts" : "Inga omröstningsutkast", + "There is no poll drafts yet saved for this conversation" : "Det finns inga omröstningsutkast ännu sparade för den här konversationen", + "Create poll in {name}" : "Skapa omröstning i {name}", + "Create poll" : "Skapa omröstning", + "Error while importing poll" : "Fel vid import av omröstning", + "Question" : "Fråga", + "Ask a question" : "Ställ en fråga", + "Import draft from file" : "Importera utkast från fil", + "Answers" : "Svar", + "Answer {option}" : "Svar {option}", + "Delete poll option" : "Ta bort röstningsalternativ", + "Add answer" : "Lägg till svar", + "Settings" : "Inställningar", + "Anonymous poll" : "Anonym omröstning", + "Multiple answers" : "Flera svar", + "Save as draft" : "Spara som utkast", + "Export draft to file" : "Exportera utkast till fil", + "_Final results • %n vote_::_Final results • %n votes_" : ["Slutresultat • %n röst","Slutresultat • %n röster"], + "Your vote is anonymous" : "Din röst är anonym", + "You voted for this option" : "Du röstade för det här alternativet", + "End poll" : "Avsluta omröstning", + "Change your vote" : "Ändra din röst", + "Withdraw vote" : "Återkalla röst", + "Results" : "Resultat", + "Download as spreadsheet" : "Ladda ned som kalkylblad", + "Download as CSV" : "Ladda ned som CSV", + "Voted participants" : "Röstande deltagare", + "Send a message to \"{roomName}\"" : "Skicka ett meddelande till \"{roomName}\"", + "Hide list of participants" : "Dölj deltagarlistan", + "Show list of participants" : "Visa deltagarlista", + "Assistance requested in {roomName}" : "Hjälp efterfrågas i {roomName}", + "The message was sent to \"{roomName}\"" : "Meddelandet skickades till \"{roomName}\"", + "Dismiss request for assistance" : "Avvisa begäran om hjälp", + "Send message to room" : "Skicka meddelande till rum", + "Back to main room" : "Tillbaka till huvudrum", + "Back to your room" : "Tillbaka till ditt rum", + "Message all rooms" : "Meddelande till alla rum", + "Start session" : "Starta sessionen", + "Start a call before you start a breakout room session" : "Starta ett samtal innan du startar grupprum", + "Stop session" : "Stoppa sessionen", + "The message was sent to all breakout rooms" : "Meddelandet skickades till alla grupprum", + "Send a message to all breakout rooms" : "Skicka ett meddelande till alla grupprum", + "Breakout rooms are not started" : "Grupprum är inte startade", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Samtal utan High-performance backend kan orsaka anslutningsproblem och hög belastning på enheter. {linkstart}Läs mer{linkend}", + "Talk setup incomplete" : "Talk-installationen är inte klar", + "Disable lobby" : "Inaktivera lobbyn", + "Settings for participant \"{user}\"" : "Inställningar för deltagare \"{user}\"", + "Participant \"{user}\"" : "Deltagare \"{user}\"", + "moderator" : "moderator", + "bot" : "bott", + "guest" : "gäst", + "Ringing …" : "Ringer …", + "Call rejected" : "Samtal avvisades", + "{time} talking …" : "{time} pratar …", + "{time} talking time" : "{time} samtalstid", + "Raised their hand" : "Räckte upp handen", + "Joined with video" : "Anslöt med video", + "Joined via phone" : "Anslöt via telefon", + "Joined with audio" : "Anslöt med ljud", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Texten måste vara mindre än eller lika med {maxLength} tecken lång. Din text är {charactersCount} tecken lång.", + "Remove group and members" : "Ta bort grupp och medlemmar", + "Remove team and members" : "Ta bort team och medlemmar", + "Remove participant" : "Ta bort deltagare", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vill du verkligen ta bort gruppen \"{displayName}\" och dess medlemmar från denna konversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vill du verkligen ta bort team \"{displayName}\" och dess medlemmar från denna konversation?", + "Do you really want to remove {displayName} from this conversation?" : "Vill du verkligen ta bort {displayName} från denna konversation?", + "Notification was sent to {displayName}" : "Notifiering skickades till {displayName}", + "Could not send notification to {displayName}" : "Kunde inte skicka notifiering till {displayName}", + "Permissions granted to {displayName}" : "Behörighet beviljad till {displayName}", + "Could not modify permissions for {displayName}" : "Kunde inte ändra behörigheter för {displayName}", + "Permissions removed for {displayName}" : "Behörigheter har tagits bort för {displayName}", + "Permissions set to default for {displayName}" : "Behörigheter inställda på standard för {displayName}", + "Phone number could not be hung up" : "Det gick inte att lägga på telefonnumret", + "Phone number could not be put on hold" : "Telefonnumret kunde inte parkeras", + "Phone number could not be muted" : "Telefonnumret kunde inte tystas", + "Phone number could not be unmuted" : "Kunde inte aktivera ljudet för telefonnummer", + "DTMF message could not be sent" : "DTMF-meddelande kunde inte skickas", + "Phone number copied to clipboard" : "Telefonnumret har kopierats till urklipp", + "Phone number could not be copied" : "Telefonnumret kunde inte kopieras", + "in the lobby" : "i lobbyn", + "Dial out phone" : "Telefon för att ringa ut", + "Hang up phone" : "Lägg på telefon", + "Move back to lobby" : "Gå tillbaka till lobbyn", + "Move to conversation" : "Flytta till konversation", + "Dial-in PIN" : "PIN-kod för uppringning", + "Demote from moderator" : "Degradera från moderator", + "Promote to moderator" : "Befordra till moderator", + "Resend invitation" : "Skicka inbjudning igen", + "Send call notification" : "Skicka samtalsavisering", + "Dial out phone number" : "Telefonnummer för att ringa ut", + "Resume call for phone number" : "Återuppta samtal för telefonnummer", + "Put phone number on hold" : "Parkera telefonnummer", + "Unmute phone number" : "Aktivera ljud för telefonnummer", + "Mute phone number" : "Tysta telefonnummer", + "Copy phone number" : "Kopiera telefonnummer", + "Reset custom permissions" : "Återställ anpassade behörigheter", + "Grant all permissions" : "Tilldela alla behörigheter", + "Remove all permissions" : "Ta bort alla behörigheter", + "Also ban from this conversation" : "Blockera även från denna konversation", + "Internal note (reason to ban)" : "Intern anteckning (anledning till blockering)", + "Remove" : "Ta bort", + "Permissions modified for {displayName}" : "Behörigheter har ändrats för {displayName}", + "Add users, groups or teams" : "Lägg till användare, grupper eller team", + "Add users or groups" : "Lägg till användare eller grupper", + "Add users or teams" : "Lägg till användare eller team", + "Add users" : "Lägg till användare", + "Add groups or teams" : "Lägg till grupper eller team", + "Add groups" : "Lägg till grupper", + "Add teams" : "Lägg till team", + "Add other sources" : "Lägg till andra källor", + "Add emails" : "Lägg till e-post", + "Integrations" : "Integrationer", + "Add federated users" : "Lägg till federerade användare", + "Searching …" : "Söker ...", + "Search for more users" : "Sök efter fler användare", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kan söka eller lägga till deltagare via namn, e-post eller federerat Moln-ID", + "Search or add participants" : "Sök eller lägg till deltagare", + "Invitation was sent to {actorId}" : "Inbjudan har skickats till {actorId}", + "An error occurred while adding the participants" : "Ett fel uppstod när deltagarna skulle läggas till", + "A new group conversation with selected participant will be created" : "En ny gruppkonversation med vald deltagare kommer att skapas", + "Participants" : "Deltagare", + "Pinned by a deleted user" : "Fäst av en borttagen användare", + "Participants ({count})" : "Deltagare ({count})", + "Open chat" : "Öppna chatt", + "You have new unread messages in the chat." : "Du har nya olästa meddelanden i chatten.", + "You have been mentioned in the chat." : "Du har blivit omnämnd i chatten.", + "Search messages" : "Sök meddelanden", + "Chat" : "Chatt", + "Details" : "Detaljer", + "Shared items" : "Delade objekt", + "Search in {name}" : "Sök i {name}", + "Threads in {name}" : "Trådar i {name}", + "{actor} in {conversation}" : "{actor} i {conversation}", + "Search messages …" : "Sök meddelanden …", + "Search options" : "Sökalternativ", + "From User" : "Från användare", + "Since" : "Sedan", + "Until" : "Till", + "No results found" : "Inga resultat funna", + "Load more results" : "Visa fler resultat", + "Recent threads" : "Senaste trådar", + "Projects" : "Projekt", + "No shared items" : "Inga delade objekt", + "Thread notifications" : "Trådaviseringar", + "Thread actions" : "Trådåtgärder", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Länka till en konversation", + "No open conversations found" : "Inga öppna konversationer hittades", + "Either there are no open conversations or you joined all of them." : "Antingen finns det inga öppna konversationer eller så gick du med i alla.", + "Check spelling or use complete words." : "Kontrollera stavningen eller använd fullständiga ord.", + "Search conversations or users" : "Sök konversationer eller användare", + "Select conversation" : "Välj konversation", + "Number length is not valid" : "Sifferlängden är inte giltig", + "Region code is not valid" : "Regionkoden är ogiltig", + "Number length is too short" : "Sifferlängden är för kort", + "Number length is too long" : "Sifferlängden är för lång", + "Number is not valid" : "Numret är inte giltigt", + "Phone numbers" : "Telefonnummer", + "Display name: {name}" : "Visningsnamn: {name}", + "Edit display name" : "Ändra visningsnamn", + "Display name (required)" : "Visningsnamn (obligatoriskt)", + "Save name" : "Spara namn", + "I picked message bubbles" : "Jag valde meddelandebubblor", + "I picked the list style" : "Jag valde listvy", + "Error while setting personal setting" : "Fel vid inställning av personlig inställning", + "Error while saving sounds setting" : "Fel när ljudinställningen skulle sparas", + "Compact conversations list" : "Kompakt konversationslista", + "Chat appearance" : "Chattutseende", + "Messages list" : "Meddelandelista", + "Message bubbles" : "Meddelandebubblor", + "Play sounds when participants join or leave a call" : "Spela upp ljud när deltagare går med eller lämnar ett samtal", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "För närvarande inte tillgängligt på iPhone och iPad på grund av tekniska begränsningar från tillverkaren", + "Notification settings" : "Aviseringsinställningar", + "Sounds for chat and call notifications" : "Ljud för chatt och samtalsaviseringar", + "Invalid language ({languageId})" : "Ogiltigt språk ({languageId})", + "Default language" : "Standardspråk", + "Default language ({languageName})" : "Standardspråk ({languageName})", + "Error when trying to load the available live translation languages" : "Fel vid försök att läsa in tillgängliga språk för live-översättning", + "Error when trying to set live translation language" : "Fel vid försök att ställa in språk för live-översättning", + "Set language used to show the transcriptions" : "Ange språk för visning av transkriberingar", + "Select location for attachments" : "Välj plats för bilagor", + "Error while setting attachment folder" : "Fel vid inställning av mapp för bilagor", + "Error while setting read status privacy" : "Fel vid inställning av sekretess för lässtatus", + "Error while setting typing status privacy" : "Fel vid inställning av sekretess för skrivstatus", + "Error while setting default media state" : "Fel vid inställning av standard för mediastatus", + "Turn camera and microphone off by default" : "Stäng av kamera och mikrofon som standard", + "Blur camera background by default" : "Gör kamerabakgrunden suddig som standard", + "Skip device preview before joining a call" : "Hoppa över enhetsförhandsvisning innan du går med i ett samtal", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Kameran stängs av vid anslutning. Visas alltid om samtycke till inspelning krävs.", + "Appearance & Sounds" : "Utseende och ljud", + "Privacy" : "Integritet", + "Send read receipts" : "Skicka läskvitton", + "When off, all read statuses will be hidden" : "När avstängd döljs alla lässtatusar", + "Share typing status" : "Dela skrivstatus", + "When off, all typing indicators will be hidden" : "När avstängd döljs alla skrivindikatorer", + "Attachments folder" : "Mapp för bilagor", + "Toggle full screen" : "Växla fullskärm", + "Return to Home screen" : "Återgå till hemskärmen", + "Search" : "Sök", + "Shortcuts while in a chat" : "Genvägar i en chatt", + "Focus the chat input" : "Fokusera på chattinmatningen", + "Unfocus the chat input to use shortcuts" : "Avfokusera chattinmatningen för att använda genvägar", + "Edit your last message" : "Redigera ditt senaste meddelande", + "Shortcuts while in a call" : "Genvägar under ett samtal", + "Camera on and off" : "Kamera på och av", + "Microphone on and off" : "Mikrofon på och av", + "Raise or lower hand" : "Räck upp eller ta ner handen", + "Push to talk or push to mute" : "Tryck för att prata eller tryck för att tysta", + "Zoom-in / zoom-out a screen share" : "Zooma in / zooma ut en skärmdelning", + "Mouse wheel" : "Mushjul", + "Start call silently" : "Starta samtal tyst", + "Start call" : "Starta samtal", + "End call" : "Avsluta samtal", + "The server was updated, you cannot start or join a call." : "Servern har uppdaterats, du kan inte starta eller gå med i ett samtal.", + "This call has just ended" : "Detta samtal har just avslutats", + "You will be able to join the call only after a moderator starts it." : "Du kommer att kunna gå med i samtalet först när en moderator startar det.", + "End call for everyone" : "Avsluta samtal för alla", + "Starting the recording" : "Starta inspelningen", + "Recording" : "Inspelning", + "The call has been running for one hour." : "Samtalet har pågått i en timme.", + "Cancel recording start" : "Avbryt start av inspelning", + "Stop recording" : "Stoppa inspelning", + "Send a reaction" : "Skicka en reaktion", + "React with {reaction}" : "Reagera med {reaction}", + "All tasks done!" : "Alla uppgifter är klara!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} av %n uppgift","{done} av %n uppgifter"], + "Add participants to this call" : "Lägg till deltagare i det här samtalet", + "_%n participant in call_::_%n participants in call_" : ["%n deltagare i samtalet","%n deltagare i samtalet"], + "Scheduled messages" : "Schemalagda meddelanden", + "You are not allowed to enable screensharing" : "Du får inte aktivera skärmdelning", + "No screensharing" : "Ingen skärmdelning", + "Screensharing options" : "Skärmdelningsalternativ", + "Enable screensharing" : "Tillåt skärmdelning", + "Bad sent video and screen quality." : "Dålig skickad video och skärmkvalitet.", + "Bad sent screen quality." : "Dålig skickad skärmkvalitet.", + "Bad sent video quality." : "Dålig skickad videokvalitet.", + "Bad sent audio, video and screen quality." : "Dålig skickad ljud-, video- och skärmkvalitet.", + "Bad sent audio and screen quality." : "Dålig skickat ljud och skärmkvalitet.", + "Bad sent audio and video quality." : "Dålig skickad ljud- och videokvalitet.", + "Bad sent audio quality." : "Dålig skickad ljudkvalitet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera medan du gör en skärmdelning.", + "Disable background blur" : "Inaktivera suddig bakgrund", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm. För att förbättra situationen försök att inaktivera din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se dig.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå dig och se din skärm. För att förbättra situationen försök att inaktivera din skärmdelning.", + "Disable screenshare" : "Inaktivera skärmdelning", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera din kamera.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå dig.", + "Screen sharing is not supported by your browser." : "Skärmdelning stöds inte av din webbläsare.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skärmdelning kräver att sidan läses in via HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skärmdelning kräver HTTPS", + "An error occurred while starting screensharing." : "Ett fel uppstod vid skärmdelning.", + "Select virtual background" : "Välj virtuell bakgrund", + "Show your screen" : "Visa din skärm", + "Stop screensharing" : "Stoppa skärmdelning", + "Mute others" : "Tysta andra", + "Start recording" : "Starta inspelning", + "Set up breakout rooms" : "Ställ in grupprum", + "Download attendance list" : "Ladda ner deltagarlista", + "Open Calendar" : "Öppna kalender", + "Remove participant {name}" : "Ta bort deltagare {name}", + "Would you like to delete this conversation?" : "Vill du ta bort den här konversationen?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Den här konversationen kommer automatiskt att tas bort för alla efter %n dag utan aktivitet.","Den här konversationen kommer automatiskt att tas bort för alla efter %n dagar utan aktivitet."], + "Are you sure you want to delete this conversation?" : "Är du säker på att du vill ta bort den här konversationen?", + "Delete now" : "Ta bort nu", + "Keep" : "Behåll", + "Open dialpad" : "Öppna knappsatsen", + "Select a region" : "Välj en region", + "Local time: {time}" : "Lokal tid: {time}", + "Scheduled {datetime}" : "Schemalagd {datetime}", + "Scheduled for {datetime}" : "Schemalagd till {datetime}", + "Search …" : "Sök ...", + "Message without mention" : "Meddelande utan omnämnande", + "Mention myself" : "Nämn mig själv", + "Mention everyone" : "Nämn alla", + "Select a conversation" : "Välj en konversation", + "Select a mode" : "Välj ett läge", + "You do not have permissions to access this conversation." : "Du har inte behörighet att komma åt den här konversationen.", + "Join a different conversation or start a new one." : "Gå med i en annan konversation eller starta en ny.", + "The conversation does not exist" : "Konversationen finns inte", + "Join a conversation or start a new one!" : "Anslut till en konversation eller starta en ny!", + "Duplicate session" : "Duplicerade sessioner", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Den här konversationen har öppnats i en annan flik. Den aktuella serverversionen stöder inte att öppna en konversation i flera flikar.", + "Creating and joining a conversation with \"{userid}\"" : "Skapar och går med i en konversation med \"{userid}\"", + "Join a conversation or start a new one" : "Anslut till en konversation eller starta en ny", + "Error while joining the conversation" : "Kunde inte gå med i konversationen", + "Another user" : "En annan användare", + "Hey! Are you using the list style or message bubbles?" : "Hej! Använder du listvy eller meddelandebubblor?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-användare", + "User password" : "Användarlösenord", + "Talk conversation" : "Talk-konversation", + "Skip TLS verification" : "Skippa TLS-verifiering", + "Matrix server URL" : "Matrix server-URL", + "User" : "Användare", + "Matrix channel" : "Matrix-kanal", + "Mattermost server URL" : "Mattermost server-URL", + "Mattermost user" : "Mattermost-användare", + "Team name" : "Namn på team", + "Channel name" : "Kanalnamn", + "Rocket.Chat server URL" : "Rocket.Chat server-URL", + "User name or email address" : "Användarnamn eller e-postadress", + "Rocket.Chat channel" : "Rocket.Chatt-kanal", + "Zulip server URL" : "Zulip server-URL", + "Bot user name" : "Bott användarnamn", + "Bot API key" : "Bott API-nyckel", + "Zulip channel" : "Zulip kanal", + "API token" : "API-token", + "Slack channel" : "Slack-kanal", + "Server ID or name" : "Server-ID eller namn", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (med prefixet \"ID:\") eller namn", + "Channel" : "Kanal", + "Login" : "Logga in", + "Chat ID" : "Chatt-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server-URL (t.ex. chat.freenode.net:6667)", + "Nickname" : "Smeknamn", + "Connection password" : "Anslutningslösenord", + "IRC channel" : "IRC-kanal", + "Channel password" : "Kanallösenord", + "NickServ nickname" : "NickServ smeknamn", + "NickServ password" : "NickServ lösenord", + "Use TLS" : "Använd TLS", + "Use SASL" : "Använd SASL", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Klient-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Tråd-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server-URL", + "MUC server URL" : "MUC server-URL", + "Jabber ID" : "Jabber-id", + "Pinned messages" : "Fästa meddelanden", + "Media" : "Media", + "Polls" : "Omröstningar", + "Deck cards" : "Deck-kort", + "Voice messages" : "Röstmeddelanden", + "Locations" : "Platser", + "Call recordings" : "Samtalsinspelningar", + "Audio" : "Ljud", + "Show all pinned messages" : "Visa alla fästa meddelanden", + "Show all media" : "Visa alla media", + "Show all files" : "Visa alla filer", + "Show all polls" : "Visa alla omröstningar", + "Show all deck cards" : "Visa alla Deck-kort", + "Show all voice messages" : "Visa alla röstmeddelanden", + "Show all locations" : "Visa alla platser", + "Show all call recordings" : "Visa alla samtalsinspelningar", + "Show all audio" : "Visa allt ljud", + "Show all other" : "Visa alla andra", + "Follow conversation settings" : "Följ konversationsinställningar", + "Group" : "Grupp", + "Team" : "Team", + "You reconnected to the call" : "Du återanslöt till samtalet", + "{actor} reconnected to the call" : "{actor} återanslöt till samtalet", + "You added {user0} and {user1}" : "Du lade till {user0} och {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du lade till {user0}, {user1} och %n mer deltagare","Du lade till {user0}, {user1} och %n fler deltagare"], + "An administrator added you and {user0}" : "En administratör lade till dig och {user0}", + "{actor} added you and {user0}" : "{actor} lade till dig och {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["En administratör lade till dig, {user0} och %n mer deltagare","En administratör lade till dig, {user0} och %n fler deltagare"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lade till dig, {user0} och %n mer deltagare","{actor} lade till dig, {user0} och %n fler deltagare"], + "An administrator added {user0} and {user1}" : "En administratör lade till {user0} och {user1}", + "{actor} added {user0} and {user1}" : "{actor} lade till {user0} och {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["En administratör lade till {user0}, {user1} och %n mer deltagare","En administratör lade till {user0}, {user1} och %n fler deltagare"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} lade till {user0}, {user1} och %n mer deltagare","{actor} lade till {user0}, {user1} och %n fler deltagare"], + "You removed {user0} and {user1}" : "Du tog bort {user0} och {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du tog bort {user0}, {user1} och %n mer deltagare","Du tog bort {user0}, {user1} och %n fler deltagare"], + "An administrator removed you and {user0}" : "En administratör tog bort dig och {user0}", + "{actor} removed you and {user0}" : "{actor} tog bort dig och {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administratör tog bort dig, {user0} och %n mer deltagare","En administratör tog bort dig, {user0} och %n fler deltagare"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} tog bort dig, {user0} och %n mer deltagare","{actor} tog bort dig, {user0} och %n fler deltagare"], + "An administrator removed {user0} and {user1}" : "En administratör tog bort {user0} och {user1}", + "{actor} removed {user0} and {user1}" : "{actor} tog bort {user0} och {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administratör tog bort {user0}, {user1} och %n mer deltagare","En administratör tog bort {user0}, {user1} och %n fler deltagare"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} tog bort {user0}, {user1} och %n mer deltagare","{actor} tog bort {user0}, {user1} och %n fler deltagare"], + "You and {user0} joined the call" : "Du och {user0} gick med i samtalet", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} och %n mer deltagare gick med i samtalet","Du, {user0} och %n fler deltagare gick med i samtalet"], + "{user0} and {user1} joined the call" : "{user0} och {user1} gick med i samtalet", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} och %n mer deltagare gick med i samtalet","{user0}, {user1} och %n fler deltagare gick med i samtalet"], + "You and {user0} left the call" : "Du och {user0} lämnade samtalet", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} och %n mer deltagare lämnade samtalet","Du, {user0} och %n fler deltagare lämnade samtalet"], + "{user0} and {user1} left the call" : "{user0} och {user1} lämnade samtalet", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} och %n mer deltagare lämnade samtalet","{user0}, {user1} och %n fler deltagare lämnade samtalet"], + "You promoted {user0} and {user1} to moderators" : "Du befordrade {user0} och {user1} till moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du befordrade {user0}, {user1} och %n mer deltagare till moderatorer","Du befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administratör befordrade dig och {user0} till moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} befordrade dig och {user0} till moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administratör befordrade dig, {user0} och %n mer deltagare till moderatorer","En administratör befordrade dig, {user0} och %n fler deltagare till moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} befordrade dig, {user0} och %n mer deltagare till moderatorer","{actor} befordrade dig, {user0} och %n fler deltagare till moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administratör befordrade {user0} och {user1} till moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} befordrade {user0} och {user1} till moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administratör befordrade {user0}, {user1} och %n mer deltagare till moderatorer","En administratör befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} befordrade {user0}, {user1} och %n mer deltagare till moderatorer","{actor} befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "You demoted {user0} and {user1} from moderators" : "Du degraderade {user0} och {user1} från moderatorer", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du degraderade {user0}, {user1} och %n mer deltagare från moderatorer","Du degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "An administrator demoted you and {user0} from moderators" : "En administratör degraderade dig och {user0} från moderatorer", + "{actor} demoted you and {user0} from moderators" : "{actor} degraderade dig och {user0} från moderatorer", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["En administratör degraderade dig, {user0} och %n mer deltagare från moderatorer","En administratör degraderade dig, {user0} och %n fler deltagare från moderatorer"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} degraderade dig, {user0} och %n mer deltagare från moderatorer","{actor} degraderade dig, {user0} och %n fler deltagare från moderatorer"], + "An administrator demoted {user0} and {user1} from moderators" : "En administratör degraderade {user0} och {user1} från moderatorer", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degraderade {user0} och {user1} från moderatorer", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["En administratör degraderade {user0}, {user1} och %n mer deltagare från moderatorer","En administratör degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} degraderade {user0}, {user1} och %n till deltagare från moderatorer","{actor} degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "You:" : "Du:", + "You: {lastMessage}" : "Du: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Servern har uppdaterats.", + "(edited by you)" : "(redigerad av dig)", + "(edited by a deleted user)" : "(redigerad av en borttagen användare)", + "(edited by {moderator})" : "(redigerad av {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du försöker gå med i en konversation medan du har en aktiv session i ett annat fönster eller en annan enhet. Detta stöds för närvarande inte av Nextcloud Talk. Vad vill du göra?", + "Leave this page" : "Lämna denna sida", + "Join here" : "Gå med här", + "Deck card has been posted to {conversation}" : "Deck-kort har skickats till {conversation}", + "An error occurred while posting deck card to conversation" : "Ett fel uppstod när Deck-kortet skulle publiceras i konversationen", + "Post to a conversation" : "Publicera i en konversation", + "Post to conversation" : "Skicka till konversation", + "The recording failed. Please contact your administrator." : "Samtalsinspelning misslyckades. Kontakta din administratör.", + "Location has been posted to {conversation}" : "Plats har skickats till {conversation}", + "An error occurred while posting location to conversation" : "Ett fel uppstod när platsen skulle publiceras i konversationen", + "Share to a conversation" : "Dela till en konversation", + "Share to conversation" : "Dela till konversation", + "In conversation" : "I konversation", + "Search in conversation: {conversation}" : "Sök i konversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Dina förfrågningar fördröjs för tillfället på grund av brute force-skydd", + "Error while clearing conversation history" : "Kunde inte rensa konversationshistorik", + "Error occurred while allowing guests" : "Ett fel uppstod när gäster skulle tillåtas", + "Error occurred while disallowing guests" : "Ett fel uppstod vid avvisning av gäster", + "Error occurred when restricting the conversation to moderator" : "Ett fel uppstod när konversationen begränsades till moderator", + "Error occurred when opening the conversation to everyone" : "Ett fel uppstod när konversationen öppnades för alla", + "Conversation password has been saved" : "Lösenordet för konversationen har sparats", + "Conversation password has been removed" : "Lösenordet för konversationen har tagits bort", + "Error occurred while saving conversation password" : "Ett fel uppstod när lösenordet för konversationen skulle sparas", + "Call recording is starting." : "Samtalsinspelning startar.", + "Call recording stopped while starting." : "Samtalsinspelning stoppades vid start.", + "Call recording stopped. You will be notified once the recording is available." : "Samtalsinspelning stoppad. Du kommer att meddelas när inspelningen är tillgänglig.", + "Conversation picture set" : "Konversationsbild inställd", + "Conversation picture deleted" : "Konversationsbild raderad", + "Could not delete the conversation picture" : "Kunde inte ta bort konversationsbilden", + "Could not remove the automatic expiration" : "Kunde inte ta bort den automatiska utgången", + "Could not post message: {errorMessage}" : "Kunde inte skicka meddelandet: {errorMessage}", + "Participant is banned successfully" : "Deltagaren har blockerats", + "Error while banning the participant" : "Fel vid blockering av deltagaren", + "An error occurred while fetching the participants" : "Ett fel uppstod när deltagarna hämtades", + "Could not send invitation to {actorId}" : "Kunde inte skicka inbjudan till {actorId}", + "Invitations sent" : "Inbjudningar skickade", + "Error occurred when sending invitations" : "Ett fel uppstod när inbjudningar skickades", + "Failed to join the conversation." : "Det gick inte att gå med i konversationen.", + "An error occurred while creating breakout rooms" : "Ett fel uppstod när grupprum skapades", + "An error occurred while re-ordering the attendees" : "Ett fel uppstod när deltagarna skulle ordnas om", + "An error occurred while deleting breakout rooms" : "Ett fel uppstod när grupprum skulle raderas", + "An error occurred while starting breakout rooms" : "Ett fel uppstod när grupprum skulle startas", + "An error occurred while stopping breakout rooms" : "Ett fel uppstod när grupprum skulle stoppas", + "An error occurred while sending a message to the breakout rooms" : "Ett fel uppstod när ett meddelande skickades till grupprummen", + "An error occurred while requesting assistance" : "Ett fel uppstod vid begäran om hjälp", + "An error occurred while resetting the request for assistance" : "Ett fel uppstod när begäran om hjälp återställdes", + "An error occurred while joining breakout room" : "Ett fel uppstod när du gick med i grupprummet", + "Failed to rename the thread" : "Kunde inte byta namn på tråd", + "Error fetching upcoming events" : "Kunde inte hämta kommande händelser", + "Error fetching upcoming reminders" : "Kunde inte hämta kommande påminnelser", + "An error occurred while accepting an invitation" : "Ett fel uppstod när en inbjudan skulle accepteras", + "An error occurred while rejecting an invitation" : "Ett fel uppstod när en inbjudan skulle avvisas", + "{guest} (guest)" : "{guest} (gäst)", + "Poll draft has been saved" : "Omröstningsutkast sparat", + "An error occurred while saving the draft" : "Ett fel uppstod när utkastet skulle sparas", + "An error occurred while submitting your vote" : "Ett fel uppstod när din röst skulle skickas", + "An error occurred while ending the poll" : "Ett fel uppstod när omröstningen stoppades", + "An error occurred while deleting the poll draft" : "Ett fel uppstod när utkastet till omröstningen skulle raderas", + "Poll \"{name}\" was created by {user}. Click to vote" : "Omröstningen \"{name}\" skapades av {user}. Klicka för att rösta", + "Failed to add reaction" : "Kunde inte lägga till reaktion", + "Failed to remove reaction" : "Kunde inte ta bort reaktionen", + "The server is in maintenance mode." : "Servern är i underhållsläge.", + "Federated server was updated." : "Den federerade servern har uppdaterats.", + "Error while uploading file \"{fileName}\"" : "Fel vid uppladdning av fil \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Inte tillräckligt med ledigt utrymme för att ladda upp filen \"{fileName}\"", + "You are not allowed to share files" : "Du tillåẗs inte dela filer", + "Error while sharing file" : "Fel vid delning av fil", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Webbläsaren du använder stöds inte fullt ut av Nextcloud Talk. Använd den senaste versionen av Mozilla Firefox, Microsoft Edge, Google Chrome eller Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Om %n timme","Om %n timmar"], + "_%n minute _::_%n minutes_" : ["%n minut","%n minuter"], + "In {hours} and {minutes}" : "Om {hours} och {minutes}", + "_In %n minute_::_In %n minutes_" : ["Om %n minut","Om %n minuter"], + "Later today – {timeLocale}" : "Senare idag – {timeLocale}", + "Set time for later today" : "Välj tid senare idag", + "Tomorrow – {timeLocale}" : "Imorgon – {timeLocale}", + "Set time for tomorrow" : "Välj tid i morgon", + "This weekend – {timeLocale}" : "Den här helgen – {timeLocale}", + "Set time for this weekend" : "Välj tid i helgen", + "Next week – {timeLocale}" : "Nästa vecka – {timeLocale}", + "Set time for next week" : "Välj tid nästa vecka", + "Message link copied to clipboard" : "Meddelandelänk kopierad till urklipp", + "Conversation link copied to clipboard" : "Konversationslänk kopierad till urklipp", + "The link could not be copied" : "Länken kunde inte kopieras", + "Error while parsing a PROPFIND error" : "Fel vid analys av ett PROPFIND-fel", + "Sending signaling message has failed" : "Misslyckades skicka signalmeddelande", + "Lost connection to signaling server. Trying to reconnect." : "Förlorade anslutningen till signalservern. Försöker ansluta igen.", + "Lost connection to signaling server." : "Anslutningen till signalservern förlorades.", + "Connecting is taking longer than expected …" : "Anslutningen tar längre tid än förväntat …", + "Failed to connect. Retrying …" : "Kunde inte ansluta. Försöker igen …", + "Failed to connect. The signaling server may be set up incorrectly" : "Kunde inte ansluta. Signalservern kan vara felkonfigurerad", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Den konfigurerade signalservern måste uppdateras för att vara kompatibel med den här versionen av Talk. Kontakta din administratör.", + "Please restart the app." : "Starta om appen.", + "Please reload the page." : "Uppdatera sidan.", + "Please try to restart the app." : "Försök att starta om appen.", + "Please try to reload the page." : "Försök att ladda om sidan.", + "Do not disturb" : "Stör ej", + "Away" : "Borta", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Högtalare {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Du verkar prata med avstängd mikrofon, sätt på mikrofonen för att andra ska höra dig", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Det gick inte att upprätta en anslutning med minst en deltagare. En TURN-server kan behövas för ditt scenario. Be din administratör att ställa in en med hjälp av {linkstart}den här dokumentationen{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Det tar längre tid än väntat. Har mediarättigheter redan beviljats (eller avvisats)? Om ja, starta om din webbläsare, eftersom ljud och video misslyckas", + "Access to microphone & camera is only possible with HTTPS" : "Åtkomst till mikrofon och kamera är endast möjligt via HTTPS", + "Please move your setup to HTTPS" : "Vänligen flytta din inställning till HTTPS", + "Access to microphone & camera was denied" : "Åtkomst till mikrofon och kamera nekades", + "WebRTC is not supported in your browser" : "WebRTC är inte kompatibelt med din webbläsare", + "Please use a different browser like Firefox or Chrome" : "Vänligen använd en annan webbläsare som t.ex Firefox eller Chrome", + "Error while accessing microphone & camera" : "Fel vid åtkomst till mikrofon och kamera", + "%s Talk on your mobile devices" : "%s Talk på dina mobila enheter", + "Join conversations at any time, anywhere, on any device." : "Gå med i konversationer när som helst, var som helst, på alla enheter.", + "Android app" : "Android-app", + "iOS app" : " iOS-app", + "__language_name__" : "Svenska", + "Webhook Demo" : "Webhook-demo", + "Call summary (%s)" : "Samtalssammanfattning (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Samtalssammanfattningsboten publicerar ett översiktsmeddelande efter samtalet med en lista över alla deltagare och uppgifter", + "Tasks" : "Uppgifter", + "Notes" : "Anteckning", + "Reports" : "Rapporter", + "Decisions" : "Beslut", + "Agenda" : "Agenda", + "Call summary" : "Samtalssammanfattning", + "Call summary - {title}" : "Samtalssammanfattning - {title}", + "Talk conversation for event" : "Talk-konversation för händelse", + "Client Push is installed, this improves the performance of desktop clients." : "Klient-Push är installerat, detta förbättrar prestandan för skrivbordsklienter.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} är inte installerat, detta kan leda till prestandaproblem vid användning av skrivbordsklienter.", + "Next meeting" : "Nästa möte", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schemalägg ett möte från din kalender. En Talk-konversation måste anges som plats för att visas här", + "Join conversations from remote Nextcloud servers" : "Gå med i konversationer från fjärranslutna Nextcloud-servrar", + "Your default media state has been saved" : "Din standard för mediastatus har sparats", + "Set reminder for later today" : "Ställ in påminnelse för senare idag", + "Set reminder for tomorrow" : "Ställ in påminnelse för imorgon", + "Set reminder for this weekend" : "Ställ in påminnelse för denna helg", + "Set reminder for next week" : "Ställ in påminnelse för nästa vecka", + "Generate summary" : "Skapa en sammanfattning", + "Open poll • You voted already" : "Öppna omröstning • Du har redan röstat", + "Open poll • Click to vote" : "Öppna omröstning • Klicka för att rösta", + "Poll • Ended" : "Omröstning • Avslutad", + "Talk recording from {time} ({conversation})" : "Talk-inspelning från {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Omröstningsresultat • %n röst","Omröstningsresultat • %n röster"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Öppna omröstning • %n röst","Öppna omröstning • %n röster"], + "Submit vote" : "Skicka in röst", + "Your privacy setting has been saved" : "Din integritetsinställning har sparats", + "Your personal setting has been saved" : "Din personliga inställning har sparats", + "Failed to save sounds setting" : "Det gick inte att spara ljudinställningen", + "Sounds setting saved" : "Ljudinställningen sparad", + "Always shown if recording consent is required" : "Visas alltid om samtycke till inspelning krävs", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk har uppdaterats, du kan inte starta eller gå med i ett samtal.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du gick med i konversationen i ett annat fönster eller en annan enhet. Detta stöds för närvarande inte av Nextcloud Talk så denna session stängdes.", + "Nextcloud Talk was updated." : "Nextcloud Talk har uppdaterats.", + "Nextcloud is in maintenance mode." : "Nextcloud är i underhållsläge.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation har uppdaterats.", + "Enable live translation" : "Aktivera live-översättning", + "I picked list style" : "Jag valde listvy", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Använder du Talk i listvy eller meddelandebubblor?" +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sv.json b/l10n/sv.json new file mode 100644 index 0000000..a941f37 --- /dev/null +++ b/l10n/sv.json @@ -0,0 +1,2260 @@ +{ "translations": { + "a conversation" : "en konversation", + "(Duration %s)" : "(Varaktighet%s)", + "You attended a call with {user1}" : "Du deltog i ett samtal med {user1}", + "_%n guest_::_%n guests_" : ["%n gäst","%n gäster"], + "You attended a call with {user1} and {user2}" : "Du deltog i ett samtal med {user1} och {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Du deltog i ett samtal med {user1}, {user2} och {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Du deltog i ett samtal med {user1}, {user2}, {user3} och {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Du deltog i ett samtal med {user1}, {user2}, {user3}, {user4} och {user5}", + "_%n other_::_%n others_" : ["%n annan","%n andra"], + "{actor} invited you to {call}" : "{actor} bjöd in dig till {call}", + "You were invited to a conversation or had a call" : "Du blev inbjuden till en konversation eller hade ett samtal", + "Other activities" : "Andra aktiviteter", + "Talk" : "Talk", + "Guest" : "Gäst", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Välkommen till Nextcloud Talk!\nI den här konversationen kommer du att informeras om nya funktioner som är tillgängliga i Nextcloud Talk.", + "## New in Talk %s" : "## Nytt i Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge och Safari kan nu användas för att delta i ljud- och videosamtal", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- En-till-en diskussioner är nu permanent och kan inte längre ändras till gruppkonversationer av misstag. Dessutom när en av deltagarna lämnar diskussionen tas diskussionen inte längra automatiskt bort. Enbart om bägge deltagare lämnar kommer diskussionen att tas bort från servern.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Du kan nu meddela alla deltagare genom att skicka \"@all\" till chatten", + "- With the \"arrow-up\" key you can repost your last message" : "- Med \"pil upp\" -knappen kan du skicka om ditt senaste meddelande", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk kan nu ha kommandon, skicka \"/help\" som ett chattmeddelande för att se om din administratör har konfigurerat några", + "- With projects you can create quick links between conversations, files and other items" : "- Med projekt kan du skapa snabba länkar mellan konversationer, filer och andra objekt", + "- You can now mention guests in the chat" : "- Du kan nu nämna gäster i chatten", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Konversationer kan nu ha en lobby. Detta gör att moderatorer nu kan förbereda mötet, medan användare och gäster måste vänta.", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Du kan nu svara direkt på meddelanden som ger de andra användarna mer sammanhang vad ditt meddelande handlar om", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Sökning efter konversationer och deltagare kommer nu också att filtrera dina befintliga konversationer, vilket gör det mycket lättare att hitta tidigare konversationer", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Du kan nu lägga till anpassade användargrupper i konversationer när cirkelappen är installerad", + "- Check out the new grid and call view" : "- Kolla in det nya gränssnittet och samtals-vyn", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Nu går det att ladda upp filer direkt med drag'n'drop från din enhet till chatten", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Delade filer visas nu direkt inuti chatten och öppnas med rätt applikation.", + "- You can now search for chats and messages in the unified search in the top bar" : "- Nu kan du söka efter chattar och meddelanden gemensamt från sökrutan i menyn", + "- Spice up your messages with emojis from the emoji picker" : "- Snygga till dina meddelanden med emojier", + "- You can now change your camera and microphone while being in a call" : "- Nu går det att ändra kameran och mikrofonen medans du sitter i ett samtal", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Förtydliga syftet med din diskussion med en beskrivning vilket underlättar för inloggade användare att på egen hand hitta och ansluta till den", + "- See a read status and send failed messages again" : "- Visa lässtatus och sänd felmeddelanden på nytt", + "- Raise your hand in a call with the R key" : "- Räck upp handen i ett samtal med R-tangenten", + "- Join the same conversation and call from multiple devices" : "- Anslut till samma diskussion och ring från flera enheter", + "- Send voice messages, share your location or contact details" : "- Skicka röstmeddelanden, dela din plats eller kontaktinformation", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Lägg till grupper till en diskussion och nya gruppmedlemmar kommer automatiskt att läggas till som deltagare", + "- A preview of your audio and video is shown before joining a call" : "- En förhandsgranskning av ditt ljud och video visas innan anslutning till ett samtal", + "- You can now blur your background in the newly designed call view" : "- Nu kan du sudda ut bakgrunden i den nyligen skapade samtalsvyn", + "- Moderators can now assign general and individual permissions to participants" : "- Moderatorer kan nu tilldela allmänna och individuella behörigheter till deltagare", + "- You can now react to chat messages" : "- Du kan nu reagera på chattmeddelande", + "- In the sidebar you can now find an overview of the latest shared items" : "- I marginallisten kan du nu hitta en översikt över de senast delade objekten", + "- Use a poll to collect the opinions of others or settle on a date" : "- Använd en opinionsundersökning för att samla in åsikter från andra eller bestämma ett datum", + "- Configure an expiration time for chat messages" : "- Konfigurera en utgångstid för chattmeddelanden", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Starta samtal utan att notifiera andra deltagare i stora konversationer. Du kan skicka individuella samtalsnotifieringar så fort samtalet har avslutats.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Skicka chattmeddelanden utan att notifiera mottagaren förutsatt att det inte är brådskande", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojier kan nu autokompletteras om man skriver \".\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Länka olika objekt med nya smart-picker genom att skriva ett \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Moderatorer kan nu skapa grupprum (kräver High-performance backend)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Samtal kan nu spelas in (kräver High-performance backend)", + "- Conversations can now have an avatar or emoji as icon" : "- Konversationer kan nu ha en avatar eller en emoji som ikon", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Utöver suddig bakgrund finns nu även virtuella bakgrunder tillgängligt i videosamtal", + "- Reactions are now available during calls" : "- Reaktioner finns nu tillgängligt under samtal", + "- Typing indicators show which users are currently typing a message" : "- Skrivningsindikationer visar vilken användare som i realtid skriver ett meddelande", + "- Groups can now be mentioned in chats" : "- Grupper kan nu nämnas i chattar", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Samtalsinspelningar transkiberas automatiskt om en transkiberingsproviderapp är registrerad", + "- Chat messages can be translated if a translation provider app is registered" : "Chattmeddelanden kan översättas om en översättningsproviderapp är registrerad", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** kan nu användas i _chat_ meddelanden", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks finns nu tillgängligt för att implementera bots. Läs dokumentationen för mer information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Ställ in en påminnelse på ett chattmeddelande för att senare bli notifierad", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Använd **Egna anteckningar** för att göra anteckningar och dela information mellan dina enheter", + "- Captions allow to send a message with a file at the same time" : "- Bildtexter tillåter att skicka ett meddelande med en fil samtidigt", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video av talare är nu synlig när skärmen delas och samtalsreaktioner är animerade", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Meddelanden kan nu redigeras av inloggade författare och moderatorer i 6 timmar", + "- Unsent message drafts are now saved in your browser" : "- Ej skickade meddelandeutkast sparas nu i din webbläsare", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Textchatt kan nu göras på ett federerat sätt med andra Talk-servrar", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Moderatorer kan nu blockera konton och gäster för att förhindra att de återansluter till en konversation", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Kommande samtal från länkade kalenderhändelser och frånvarande ersättningar visas nu i konversationer", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Samtal kan nu göras på ett federerat sätt med andra Talk-servrar (kräver High-performance backend)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Introducerar Nextcloud Talk skrivbordsklient för Windows, macOS och Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Sammanfatta samtalsinspelningar och olästa meddelanden i chattar med Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Förbättrade möten med att känna igen gäster som bjudits in via deras e-postadress, import av deltagarlistor, utkast till omröstningar och nedladdning av deltagarlistor för samtal", + "- Archive conversations to stay focused" : "- Arkivera konversationer för att hålla fokus", + "- Schedule a meeting into your calendar from within a conversation" : "- Schemalägg ett möte i din kalender direkt från en konversation", + "- Search for messages of the current conversation directly in the right sidebar" : "- Sök efter meddelanden från den aktuella konversationen direkt i den högra sidopanelen", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Se fler konversationer direkt med den nya kompakta listan (aktivera i Talk-inställningarna)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Möteskonversationer synkar nu titel och beskrivning från kalendern och döljs med ett sökfilter tills de närmar sig starttidpunkten", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Markera konversationer som känsliga i aviseringsinställningarna för att dölja meddelandeinnehåll i konversationslistan och aviseringar", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- För att få pushaviseringar under “Stör ej”, markera konversationer som viktiga", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Lägg till fler deltagare i ett en-till-en-samtal för att skapa ett nytt gruppsamtal direkt", + "- Use threads to keep your chat and discussions organized" : "- Använd trådar för att hålla din chatt och dina diskussioner organiserade", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Live-transkriberingar är nu tillgängliga under samtalet (kräver live-transcription ExApp och High-performance backend)", + "- Moderators can now pin messages so they are kept at the top" : "- Moderatorer kan nu fästa meddelanden så att de hålls kvar överst", + "- Schedule a message to send it at a later time" : "- Schemalägg ett meddelande för att skicka det senare", + "_All %n participant_::_All %n participants_" : ["Alla %n deltagare","Alla %n deltagare"], + "Talk updates ✅" : "Talk-uppdateringar ✅", + "Reaction deleted by author" : "Svar har tagits bort av författaren", + "{actor} created the conversation" : "{actor} skapade konversationen", + "You created the conversation" : "Du skapade konversationen", + "System created the conversation" : "Systemet skapade konversationen", + "An administrator created the conversation" : "En administratör skapade konversationen", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} bytte namn på konversationen från \"%1$s\" till \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Du bytte namn på konversationen från \"%1$s\" till \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "En administratör döpte om konversationen från \"%1$s\" till \"%2$s\"", + "{actor} set the description" : "{actor} anger beskrivning", + "You set the description" : "Du anger beskrivningen", + "An administrator set the description" : "En administratör anger beskrivningen", + "{actor} removed the description" : "{actor} tog bort beskrivningen", + "You removed the description" : "Du tog bort beskrivningen", + "An administrator removed the description" : "En administratör tog bort beskrivningen", + "You started a silent call" : "Du startade ett tyst samtal", + "Outgoing silent call" : "Utgående tyst samtal", + "{actor} started a silent call" : "{actor} startade ett tyst samtal", + "Incoming silent call" : "Inkommande tyst samtal", + "You started a call" : "Du startade ett samtal", + "Outgoing call" : "Utgående samtal", + "{actor} started a call" : "{actor} startade ett samtal", + "Incoming call" : "Inkommande samtal", + "{actor} joined the call" : "{actor} gick med i samtalet", + "You joined the call" : "Du gick med i samtalet", + "{actor} left the call" : "{actor} lämnade samtalet", + "You left the call" : "Du lämnade samtalet", + "{actor} unlocked the conversation" : "{actor} låste upp konversationen", + "You unlocked the conversation" : "Du låste upp konversationen", + "An administrator unlocked the conversation" : "En administratör låste upp konversationen", + "{actor} locked the conversation" : "{actor} låste konversationen", + "You locked the conversation" : "Du låste konversationen", + "An administrator locked the conversation" : "En administratör låste konversationen", + "{actor} limited the conversation to the current participants" : "{actor} begränsade konversationen för nuvarande deltagare", + "You limited the conversation to the current participants" : "Du begränsade diskussionen till närvarande deltagare", + "An administrator limited the conversation to the current participants" : "En administratör begränsade diskussionen till närvarande deltagare", + "{actor} opened the conversation to registered users" : "{actor} öppnade konversationen för registrerade användare", + "You opened the conversation to registered users" : "Du öppnade konversationen för registrerade användare", + "An administrator opened the conversation to registered users" : "En administratör öppnade konversationen för registrerade användare", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "You opened the conversation to registered users and users created with the Guests app" : "Du öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "An administrator opened the conversation to registered users and users created with the Guests app" : "En administratör öppnade konversationen för registrerade användare och användare som skapats med appen Gäster", + "The conversation is now open to everyone" : "Konversationen är nu öppen för alla", + "{actor} opened the conversation to everyone" : "{actor} öppnade konversationen för alla", + "You opened the conversation to everyone" : "Du öppnade konversationen för alla", + "{actor} restricted the conversation to moderators" : "{actor} begränsade konversationen till moderatorer", + "You restricted the conversation to moderators" : "Du begränsade konversationen till moderatorer", + "{actor} started breakout rooms" : "{actor} startade grupprum", + "You started breakout rooms" : "Du startade grupprum", + "{actor} stopped breakout rooms" : "{actor} stoppade grupprum", + "You stopped breakout rooms" : "Du stoppade grupprum", + "{actor} allowed guests" : "{actor} tillåter gäster", + "You allowed guests" : "Du tillåter gäster", + "An administrator allowed guests" : "En administratör har tillåtit gäster", + "{actor} disallowed guests" : "{actor} tillåter inte gäster", + "You disallowed guests" : "Du tillåter inte gäster", + "An administrator disallowed guests" : "En administratör tillåter inte gäster", + "{actor} set a password" : "{actor} satte ett lösenord", + "You set a password" : "Du satte ett lösenord", + "An administrator set a password" : "En administratör har aktiverat ett lösenord", + "{actor} removed the password" : "{actor} tog bort lösenordet", + "You removed the password" : "Du tog bort lösenordet", + "An administrator removed the password" : "En administratör har tagit bort lösenordet", + "{actor} added {user}" : "{actor} la till {user}", + "You joined the conversation" : "Du gick med i konversationen", + "{actor} joined the conversation" : "{actor} gick med i konversationen", + "You added {user}" : "Du lade till {user}", + "{actor} added you" : "{actor} lade till dig", + "An administrator added you" : "En administratör lade till dig", + "An administrator added {user}" : "En administratör lade till {user}", + "You left the conversation" : "Du lämnade konversationen", + "{actor} left the conversation" : "{actor} lämnade konversationen", + "{actor} removed {user}" : "{actor} tog bort {user}", + "You removed {user}" : "Du tog bort {user}", + "{actor} removed you" : "{actor} tog bort dig", + "An administrator removed you" : "En administratör tog bort dig", + "An administrator removed {user}" : "En administratör tog bort {user}", + "{actor} invited {federated_user}" : "{actor} bjöd in {federated_user}", + "You invited {federated_user}" : "Du bjöd in {federated_user}", + "You accepted the invitation" : "Du accepterade inbjudan", + "{actor} invited you" : "{actor} bjöd in dig", + "An administrator invited you" : "En administratör bjöd in dig", + "An administrator invited {federated_user}" : "En administratör bjöd in {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} godkände inbjudan", + "{actor} removed {federated_user}" : "{actor} avlägsnade {federated_user}", + "You removed {federated_user}" : "Du avlägsnade {federated_user}", + "You declined the invitation" : "Du avböjde inbjudan", + "An administrator removed {federated_user}" : "En administratör avlägsnade {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} avböjde inbjudan", + "{actor} added group {group}" : "{actor} lade till grupp {group}", + "You added group {group}" : "Du lade till grupp {group}", + "An administrator added group {group}" : "En administratör lade till grupp {group}", + "{actor} removed group {group}" : "{actor} tog bort gruppen {group}", + "You removed group {group}" : "Du tog bort gruppen {group}", + "An administrator removed group {group}" : "En administratör tog bort gruppen {group}", + "{actor} added team {circle}" : "{actor} lade till team {circle}", + "You added team {circle}" : "Du lade till team {circle}", + "An administrator added team {circle}" : "En administratör lade till team {circle}", + "{actor} removed team {circle}" : "{actor} tog bort team {circle}", + "You removed team {circle}" : "Du tog bort team {circle}", + "An administrator removed team {circle}" : "En administratör tog bort team {circle}", + "{actor} added {phone}" : "{actor} la till {phone}", + "You added {phone}" : "Du la till {phone}", + "An administrator added {phone}" : "En administratör lade till {phone}", + "{actor} removed {phone}" : "{actor} tog bort {phone}", + "You removed {phone}" : "Du tog bort {phone}", + "An administrator removed {phone}" : "En administratör tog bort {phone}", + "{actor} promoted {user} to moderator" : "{actor} gjorde {user} till moderator", + "You promoted {user} to moderator" : "Du gjorde {user} till moderator", + "{actor} promoted you to moderator" : "{actor} gjorde dig moderator", + "An administrator promoted you to moderator" : "En administratör gjorde dig till moderator", + "An administrator promoted {user} to moderator" : "En administratör gjorde {user} till moderator", + "{actor} demoted {user} from moderator" : "{actor} tog bort {user} som moderator", + "You demoted {user} from moderator" : "Du tog bort {user} som moderator", + "{actor} demoted you from moderator" : "{actor} tog bort dig som moderator", + "An administrator demoted you from moderator" : "En administratör tog bort dig som moderator", + "An administrator demoted {user} from moderator" : "En administratör tog bort {user} som moderator", + "{actor} shared a file which is no longer available" : "{actor} delade en fil som inte längre är tillgänglig", + "You shared a file which is no longer available" : "Du delade en fil som inte längre är tillgänglig", + "File shares are currently not supported in federated conversations" : "Fildelning stöds för närvarande inte i federerade konversationer", + "The shared location is malformed" : "Den delade lokationen är felaktig", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} installera Matterbridge för att synkronisera den här konversationen med andra chattar", + "You set up Matterbridge to synchronize this conversation with other chats" : "Du installerar Matterbridge för att synkronisera den här konversationen med andra chattar", + "{actor} created thread {title}" : "{actor} skapade tråden {title}", + "You created thread {title}" : "Du skapade tråden {title}", + "{actor} renamed thread {title}" : "{actor} bytte namn på tråden {title}", + "You renamed thread {title}" : "Du bytte namn på tråden {title}", + "{actor} updated the Matterbridge configuration" : "{actor} uppdaterade Matterbridgekonfigurationen", + "You updated the Matterbridge configuration" : "Du uppdaterade Matterbridgekonfigurationen", + "{actor} removed the Matterbridge configuration" : "{actor} tog bort Matterbridgekonfigurationen", + "You removed the Matterbridge configuration" : "Du tog bort Matterbridgekonfigurationen", + "{actor} started Matterbridge" : "{actor} startade Matterbridge", + "You started Matterbridge" : "Du startade Matterbridge", + "{actor} stopped Matterbridge" : "{actor} stoppade Matterbridge", + "You stopped Matterbridge" : "Du stoppade Matterbridge", + "{actor} deleted a message" : "{actor} raderade ett meddelande", + "You deleted a message" : "Du tog bort ett meddelande", + "{actor} edited a message" : "{actor} redigerade ett meddelande", + "You edited a message" : "Du redigerade ett meddelande", + "{actor} pinned a message" : "{actor} fäste ett meddelande", + "You pinned a message" : "Du fäste ett meddelande", + "{actor} unpinned a message" : "{actor} tog bort fäst meddelande", + "Message was automatically unpinned" : "Meddelandet togs automatiskt bort från fästa", + "You unpinned a message" : "Du tog bort fäst meddelande", + "{actor} deleted a reaction" : "{actor} tog bort en reaktion", + "You deleted a reaction" : "Du tog bort en reaktion", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Du ställde in utgång av meddelande till %n vecka","Du ställde in utgång av meddelande till %n veckor"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Du ställde in utgång av meddelande till %n dag","Du ställde in utgång av meddelande till %n dagar"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Du ställde in utgång av meddelande till %n timme","Du ställde in utgång av meddelande till %n timmar"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Du ställde in utgång av meddelande till %n minut","Du ställde in utgång av meddelande till %n minuter"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ställde in utgång av meddelande till %n vecka","{actor} ställde in utgång av meddelande till %n veckor"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ställde in utgång av meddelande till %n dag","{actor} ställde in utgång av meddelande till %n dagar"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ställde in utgång av meddelande till %n timme","{actor} ställde in utgång av meddelande till %n timmar"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ställde in utgång av meddelande till %n minut","{actor} ställde in utgång av meddelande till %n minuter"], + "{actor} disabled message expiration" : "{actor} inaktiverade utgång av meddelanden", + "You disabled message expiration" : "Du inaktiverade utgång av meddelanden", + "{actor} cleared the history of the conversation" : "{actor} rensade historiken av konversationen", + "You cleared the history of the conversation" : "Du rensade historiken av konversationen", + "{actor} set the conversation picture" : "{actor} ställde in konversationsbilden", + "You set the conversation picture" : "Du ställde in konversationsbilden", + "{actor} removed the conversation picture" : "{actor} tog bort konversationsbilden", + "You removed the conversation picture" : "Du tog bort konversationsbilden", + "{actor} ended the poll {poll}" : "{actor} tog bort undersökningen {poll}", + "You ended the poll {poll}" : "Du avslutade undersökningen {poll}", + "{actor} started the video recording" : "{actor} startade videoinspelningen", + "You started the video recording" : "Du startade videoinspelningen", + "{actor} stopped the video recording" : "{actor} stoppade videoinspelningen", + "You stopped the video recording" : "Du stoppade videoinspelningen", + "{actor} started the audio recording" : "{actor} startade ljudinspelningen", + "You started the audio recording" : "Du startade ljudinspelningen", + "{actor} stopped the audio recording" : "{actor} stoppade ljudinspelningen", + "You stopped the audio recording" : "Du stoppade ljudinspelningen", + "The recording failed" : "Inspelningen misslyckades", + "Someone voted on the poll {poll}" : "Någon röstade på undersökningen {poll}", + "Message deleted by author" : "Meddelandet togs bort av författaren", + "Message deleted by {actor}" : "Meddelandet togs bort av {actor}", + "Message deleted by you" : "Meddelandet togs bort av dig", + "Deleted user" : "Borttagen användare", + "Unknown number" : "Okänt nummer", + "Administration" : "Administration", + "System" : "System", + "%s (guest)" : "%s (gäst)", + "Missed call" : "Missat samtal", + "Unanswered call" : "Obesvarat samtal", + "Call ended (Duration {duration})" : "Samtal avslutat (Varaktighet {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Samtalet avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} avslutade samtalet (Varaktighet {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Samtal med %n gäst avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})","Samtal med %n gäster avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Samtal med %n gäst avslutat (Varaktighet {duration})","Samtal med %n gäster avslutat (Varaktighet {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} avslutade samtalet med %n gäst (Varaktighet {duration})","{actor} avslutade samtalet med %n gäster (Varaktighet {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1} ended (Duration {duration})" : "Samtal med {user1} avslutades (Varaktighet {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} avslutade samtalet med {user1} (Varaktighet {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1} och {user2} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Samtal med {user1} och {user2} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} avslutade samtalet med {user1} och {user2} (Varaktighet {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2} och {user3} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Samtal med {user1}, {user2} och {user3} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2} och {user3} (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2}, {user3} och {user4} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Samtal med {user1}, {user2}, {user3} och {user4} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2}, {user3} och {user4} (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Samtal med {user1}, {user2}, {user3}, {user4} och {user5} avslutades eftersom det nådde den maximala samtalslängden (Varaktighet {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Samtal med {user1}, {user2}, {user3}, {user4} och {user5} avslutat (Varaktighet {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} avslutade samtalet med {user1}, {user2}, {user3}, {user4} och {user5} (Varaktighet {duration})", + "Message of {user} in {conversation}" : "Meddelande av {user} i {conversation}", + "Message of {user}" : "Meddelande av {user}", + "Message of a deleted user in {conversation}" : "Meddelande av en borttagen användare i {conversation}", + "Talk conversations" : "Talk-konversationer", + "Talk to %s" : "Chatta med %s", + "An error occurred. Please contact your administrator." : "Ett fel har uppstått. Vänligen kontakta din administratör.", + "App disabled" : "App inaktiverad", + "Conversation subfolders are disabled" : "Undermappar för konversationer är inaktiverade", + "Storage quota exceeded" : "Lagringskvot överskriden", + "Could not prepare conversation folder" : "Kunde inte förbereda konversationsmappen", + "File not found" : "Filen kunde inte hittas", + "Path must point to a file" : "Sökvägen måste peka på en fil", + "File is not inside the conversation draft folder for this room" : "Filen finns inte i konversationens utkastsmapp för detta rum", + "File is not shared, or shared but not with the user" : "Filen delas inte eller delas men inte med användaren", + "No account available to delete." : "Inget konto tillgängligt för att ta bort.", + "Poll" : "Omröstning", + "Password needs to be set" : "Lösenord måste ställas in", + "Uploading the file failed" : "Det gick inte att ladda upp filen", + "No image file provided" : "Ingen bildfil har tillhandahållts", + "File is too big" : "Filen är för stor", + "Invalid file provided" : "Ogiltig fil tillhandahölls", + "Invalid image" : "Ogiltig bild", + "Unknown filetype" : "Okänd filtyp", + "Talk mentions" : "Talk-omnämnanden", + "More conversations" : "Fler konversationer", + "Say hi to your friends and colleagues!" : "Säg hej till dina vänner och kollegor!", + "No unread mentions" : "Inga olästa omnämnanden", + "Call in progress" : "Samtal pågår", + "You were mentioned" : "Du blev omnämnd", + "Write to conversation" : "Skriv till konversation", + "Writes event information into a conversation of your choice" : "Skriver händelseinformation till en konversation du väljer", + "Missing email field in header line" : "E-postfält saknas i rubrikraden", + "Following lines are invalid: %s" : "Följande rader är ogiltiga: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s bjöd in dig till konversationen \"%2$s\".", + "You were invited to conversation \"%s\"." : "Du blev inbjuden till konversationen \"%s\".", + "Conversation invitation" : "Inbjudan till konversation", + "Scheduled time" : "Schemalagd tid", + "Description" : "Beskrivning", + "You can also dial-in via phone with the following details" : "Det går också att ringa-upp via telefon med följande information", + "Dial-in information" : "Uppringningsinformation", + "Meeting ID" : "Mötes-ID", + "Your PIN" : "Din pinkod", + "Click the button below to join the lobby now." : "Klicka på knappen nedan för att gå med i lobbyn nu.", + "Click the link below to join the lobby now." : "Klicka på länken nedan för att gå med i lobbyn nu.", + "Join lobby for \"%s\"" : "Gå med i lobbyn för \"%s\"", + "Click the button below to join the conversation now." : "Klicka på knappen nedan för att gå med i konversationen nu.", + "Click the link below to join the conversation now." : "Klicka på länken nedan för att gå med i konversationen nu.", + "Join \"%s\"" : "Gå med \"%s\"", + "Meeting" : "Möte", + "Password request: %s" : "Lösenordsförfrågan: %s", + "Private conversation" : "Privat konversation", + "Deleted user (%s)" : "Raderad användare (%s)", + "Failed to upload call recording" : "Misslyckades med att ladda upp samtalsinspelning", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Inspelningsservern misslyckades med att ladda upp samtalsinspelningen {call}. Vänligen kontakta administrationen.", + "Share to chat" : "Dela till chatt", + "Dismiss notification" : "Avfärda notifiering", + "Call recording now available" : "Samtalsinspelningen finns nu tillgänglig", + "The recording for the call in {call} was uploaded to {file}." : "Inspelningen för samtalet i {call} blev uppladdat till {file}.", + "Transcript now available" : "Transkript finns nu tillgänglig", + "The transcript for the call in {call} was uploaded to {file}." : "Transkriptet för samtalet i {call} blev uppladdat till {file}.", + "Failed to transcript call recording" : "Misslyckades att transkripta samtalsinspelningen", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Servern misslyckades att transkripta inspelningen på {file} för samtalet i {call}. Vänligen kontakta administrationen.", + "Call summary now available" : "Samtalssammanfattning är nu tillgänglig", + "The summary for the call in {call} was uploaded to {file}." : "Sammanfattningen för samtalet i {call} laddades upp till {file}.", + "Failed to summarize call recording" : "Det gick inte att sammanfatta samtalsinspelningen", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Servern kunde inte sammanfatta inspelningen på {file} för samtalet i {call}. Vänligen kontakta din administratör.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} bjöd in dig att gå med i {roomName} på {remoteServer}", + "Accept" : "Acceptera", + "Decline" : "Avböj", + "{user1} invited you to a federated conversation" : "{user1} bjöd in dig till en federerad konversation", + "Someone reacted" : "Någon reagerade", + "New message" : "Nytt meddelande", + "Reminder" : "Påminnelse", + "Someone mentioned you" : "Någon nämnde dig", + "Notification" : "Notifiering", + "Someone reacted in a private conversation" : "Någon reagerade i en privat konversation", + "You received a message in a private conversation" : "Du fick ett meddelande i en privat konversation", + "Reminder in a private conversation" : "Påminnelse i en privat konversation", + "Someone mentioned you in a private conversation" : "Någon nämnde dig i en privat konversation", + "Notification in a private conversation" : "Avisering i en privat konversation", + "Reminder: You in {call}" : "Påminnelse: Du i {call}", + "Reminder: {user} in {call}" : "Påminnelse: {user} i {call}", + "Reminder: Deleted user in {call}" : "Påminnelse: Tog bort användare i {call}", + "Reminder: {guest} (guest) in {call}" : "Påminnelse: {guest} (guest) i {call}", + "Reminder: Guest in {call}" : "Påminnelse: Gäst i {call}", + "{user} reacted with {reaction}" : "{user} reagerade med {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} reagerade med {reaction} i {call}", + "Deleted user reacted with {reaction} in {call}" : "Borttagen användare reagerade med {reaction} i {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) reagerade med {reaction} i {call}", + "Guest reacted with {reaction} in {call}" : "Gäst reagerade med {reaction} i {call}", + "{user} in {call}" : "{user} i {call}", + "Deleted user in {call}" : "Tog bort användare från {call}", + "{guest} (guest) in {call}" : "{guest} (guest) i {call}", + "Guest in {call}" : "Gäst i {call}", + "{user} sent you a private message" : "{user} skickade dig ett privat meddelande", + "{user} sent a message in conversation {call}" : "{user} skickade ett meddelande i konversation {call}", + "A deleted user sent a message in conversation {call}" : "En raderad användare skickade ett meddelande i konversation {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (gäst) skickade ett meddelande i konversationen {call}", + "A guest sent a message in conversation {call}" : "En gäst skickade ett meddelande i konversation {call}", + "{user} replied to your private message" : "{user} svarade på ditt privata meddelande", + "{user} replied to your message in conversation {call}" : "{user} svarade på ditt meddelande i konversationen {call}", + "A deleted user replied to your message in conversation {call}" : "En raderad användare svarade på ditt meddelande i konversationen {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (gäst) svarade på ditt meddelande i konversationen {call}", + "A guest replied to your message in conversation {call}" : "En gäst svarade på ditt meddelande i konversationen {call}", + "Reminder: You in private conversation {call}" : "Påminnelse: Du i privat konversation {call}", + "Reminder: A deleted user in private conversation {call}" : "Påminnelse: En borttagend användare i en privat konversation {call}", + "Reminder: {user} in private conversation" : "Påminnelse: {user} i privat konversation", + "Reminder: You in conversation {call}" : "Påminnelse: Du i konversation {call}", + "Reminder: {user} in conversation {call}" : "Påminnelse: {user} i konversation {call}", + "Reminder: A deleted user in conversation {call}" : "Påminnelse: En borttagen användare i konversation {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Påminnelse: {guest} (guest) i konversation {call}", + "Reminder: A guest in conversation {call}" : "Påminnelse: En gäst i konversation {call}", + "{user} reacted with {reaction} to your private message" : "{user} reagerade med {reaction} på ditt privata meddelande", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} reagerade med {reaction} på ditt meddelande i konversationen {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "En borttagen användare reagerade med {reaction} på ditt meddelande i konversation {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) reagerade med {reaction} på ditt meddelande i konversation {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "En gäst reagerade med {reaction} på ditt meddelande i konversation {call}", + "{user} mentioned you in a private conversation" : "{user} nämnde dig i en privat konversation", + "{user} mentioned group {group} in conversation {call}" : "{user} nämnde gruppen {group} i konversationen {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} nämnde teamet {team} i konversationen {call}", + "{user} mentioned everyone in conversation {call}" : "{user} nämnde alla i konversation {call} ", + "{user} mentioned you in conversation {call}" : "{user} nämnde dig i konversation {call}", + "A deleted user mentioned group {group} in conversation {call}" : "En borttagen användare nämnde gruppen {group} i konversation {call}", + "A deleted user mentioned team {team} in conversation {call}" : "En raderad användare nämnde teamet {team} i konversationen {call}", + "A deleted user mentioned everyone in conversation {call}" : "En raderad användare nämnde alla i konversation {call}", + "A deleted user mentioned you in conversation {call}" : "En raderad användare nämnde dig i konversation {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (guest) nämnde gruppen {group} i konversation {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (gäst) nämnde teamet {team} i konversationen {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (gäst) nämnde alla i konversationen {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (gäst) nämnde dig i konversationen {call}", + "A guest mentioned group {group} in conversation {call}" : "En gäst nämnde gruppen {group} i konversation {call}", + "A guest mentioned team {team} in conversation {call}" : "En gäst nämnde teamet {team} i konversationen {call}", + "A guest mentioned everyone in conversation {call}" : "En gäst nämnde alla i konversation {call}", + "A guest mentioned you in conversation {call}" : "En gäst nämnde dig i konversation {call}", + "View message" : "Visa meddelande", + "Dismiss reminder" : "Avvisa påminnelse", + "View chat" : "Visa chatt", + "{user} invited you to a group conversation: {call}" : "{user} bjöd in dig till en gruppkonversation: {call}", + "Join call" : "Gå med i samtal", + "Answer call" : "Svara på samtal", + "{user} would like to talk with you" : "{user} vill prata med dig", + "Call back" : "Ring tillbaka", + "You missed a call from {user}" : "Du missade ett samtal från {user}", + "Accept call" : "Acceptera samtal", + "Incoming phone call from {call}" : "Inkommande telefonsamtal från {call}", + "You missed a phone call from {call}" : "Du missade ett telefonsamtal från {call}", + "A group call has started in {call}" : "Ett gruppsamtal har startats i {call}", + "You missed a group call in {call}" : "Du missade ett gruppsamtal i {call}", + "{email} is requesting the password to access {file}" : "{email} begär lösenordet för åtkomst till {file}", + "{email} tried to request the password to access {file}" : "{email} försökte begära lösenordet för åtkomst till {file}", + "Someone is requesting the password to access {file}" : "Någon begär lösenordet för att komma åt {file}", + "Someone tried to request the password to access {file}" : "Någon försökte begära lösenordet för att komma åt {file}", + "Open settings" : "Öppna inställningar", + "Hosted signaling server added" : "Hosted signalserver tillagd", + "The hosted signaling server is now configured and will be used." : "Hosted signaling server är nu konfigurerad och kommer att användas.", + "Hosted signaling server removed" : "Hosted signalserver borttagen", + "The hosted signaling server was removed and will not be used anymore." : "Hosted signaling server blev borttagen och kommer inte användas längre", + "Hosted signaling server changed" : "Hosted signalserver ändrad", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Kontot för Hosted signaling server ändrades med status från \"{oldstatus}\" till \"{newstatus}\".", + "pending" : "Väntande", + "active" : "aktiv", + "expired" : "gått ut", + "blocked" : "blockerad", + "error" : "fel", + "The certificate of {host} expires in {days} days" : "Certifikatet till {host} går ut om {days} dagar", + "The certificate of {host} expired" : "Certifikatet till {host} har gått ut", + "Contact via Talk" : "Kontakta via Talk", + "Open Talk" : "Öppna Talk", + "Default" : "Standard", + "Send messages, create threads, and start voice and video calls." : "Skicka meddelanden, skapa trådar och starta röst- och videosamtal.", + "Presentation" : "Presentation", + "Voice room" : "Ljudrum", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "Gå direkt med i samtalet, perfekt för avstämningar eller spontana möten.", + "Webinar" : "Webbinarium", + "Conversations" : "Konversationer", + "Messages in current conversation" : "Meddelanden i aktuell konversation", + "{user}" : "{user}", + "Messages" : "Meddelanden", + "{user} in {conversation}" : "{user} i {conversation}", + "Messages in other conversations" : "Meddelanden i andra konversationer", + "One-to-one rooms always need to show the other users avatar" : "Ett-till-ett-rum behöver alltid visa de andra användarnas avatar", + "Invalid emoji character" : "Ogiltigt emojitecken", + "Invalid background color" : "Ogiltig bakgrundsfärg", + "Avatar image is not square" : "Profilbilden är inte fyrkantig", + "Room {number}" : "Rum {number}", + "Other" : "Annat", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Misslyckades med att begära en utvärdering eftersom utvärderingsservern ej är nåbar. Vänligen försök igen senare.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Det är problem med autentisieringen av den här instansen. Det kan vara att den inte är nåbar utifrån för att kunna verifiera IRL:en.", + "Something unexpected happened." : "Något oväntat inträffade.", + "The URL is invalid." : "URL:en är ogiltig.", + "An HTTPS URL is required." : "En HTTPS URL krävs.", + "The email address is invalid." : "E-postadressen är ogiltig.", + "The language is invalid." : "Språket är ogiltigt.", + "The country is invalid." : "Landet är ogiltigt.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Det är problem med förfrågan om utvärderingen. Vänligen kontrollera dina loggar för mer information.", + "Too many requests are send from your servers address. Please try again later." : "För många förfrågningar är skickade från din serveradress. Vänligen försök igen senare.", + "There is already a trial registered for this Nextcloud instance." : "Det finns redan en utvärdering registerad för den här Nexcloudinstansen.", + "Something unexpected happened. Please try again later." : "Ett oväntat fel inträffade. Försök igen senare.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Misslyckades med att begära en utvärdering eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "Trial requested but failed to get account information. Please check back later." : "Utvärderingsförfrågan togs emot men misslyckades med att få kontoinformation. Vänligen försök igen senare.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Det är problem med autentisieringen av den här begäran. Det kan vara att den inte är nåbar utifrån för att kunna verifiera IRL:en.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Misslyckades med att motta kontoinformation eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Det är problem med att motta kontoinformation. Vänligen kontrollera dina loggar för mer information.", + "There is no such account registered." : "Det finns inget sådan konto registrerat.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Misslyckades med att motta kontoinformation eftersom utvärderingsservern ej är nåbar. Vänligen försök igen senare.", + "Deleting the hosted signaling server account failed. Please check back later." : "Misslyckades med att ta bort signaling server kontot. Vänligen försök igen senare.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Misslhyckades med att ta bort kontot eftersom utvärderingsservern betedde sig felaktigt. Vänligen försök igen senare.", + "There is a problem with deleting the account. Please check your logs for further information." : "Det är problem med att ta bort kontot. Vänligen kontrollera dina inställningar för mer information.", + "Too many requests are sent from your servers address. Please try again later." : "För många förfrågningar är skickade från din serveradress. Vänligen försök igen senare.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Misslyckades med att ta bort kontot eftersom utvärderingsservern inte är nåbar. Vänligen försök igen senare.", + "Note to self" : "Egna anteckningar", + "A place for your private notes, thoughts and ideas" : "En plats för dina privata anteckningar, tankar och idéer", + "Transcript is AI generated and may contain mistakes" : "Transkriptionen är AI-genererad och kan innehålla misstag", + "Summary is AI generated and may contain mistakes" : "Sammanfattningen är AI-genererad och kan innehålla misstag", + "Let's get started!" : "Låt oss komma igång!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** är en säker, egenhostad kommunikationsplattform som integreras sömlöst med Nextclouds ekosystem.\n\n#### Huvudfunktioner i Nextcloud Talk:\n\n* Chatt och meddelanden i privata och gruppchattar\n* Röst och videosamtal\n* Fildelning och integration med andra Nextcloud-appar\n* Anpassningsbara konversationsinställningar, moderering och sekretesskontroller\n* Webb, dator och mobil (iOS och Android)\n* Privat och säker kommunikation\n\n Läs mer i [användardokumentationen](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Välkommen till Nextcloud Talk\n\nNextcloud Talk är en privat och kraftfull meddelandeapp som integreras med Nextcloud. Chatta i privata eller gruppkonversationer, samarbeta via röst- och videosamtal, organisera webbinarier och evenemang, anpassa dina konversationer och mycket mer.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Formatera texter för att skapa innehållsrika meddelanden\n\nI Nextcloud Talk kan du använda Markdown-syntax för att formatera dina meddelanden. Till exempel kan du använda **fetstil** eller *kursiv*, eller `markera text som kod`. Du kan till och med skapa tabeller och lägga till rubriker i din text.\n\nBehöver du rätta ett stavfel eller ändra formatering? Redigera ditt meddelande genom att klicka på “Redigera meddelande” i meddelandemenyn.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Lägg till bilagor och länkar\n\nBifoga filer från din Nextcloud Hub med hjälp av “+”-knappen. Dela objekt från Filer och olika Nextcloud-appar. Vissa appar stödjer till och med interaktiva widgets, till exempel Text-appen.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Låt konversationerna flöda: nämn användare, reagera på meddelanden och mycket mer\n\nDu kan nämna alla i konversationen genom att använda %s eller nämna enskilda deltagare genom att skriva “@” och välja deras namn från listan.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Du kan svara på meddelanden, vidarebefordra dem till andra chattar och personer eller kopiera meddelandeinnehållet.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Gör mer med Smart Picker\n\nSkriv “/” eller gå till “+”-menyn för att öppna Smart Picker, där du kan bifoga olika typer av innehåll till dina meddelanden. Du kan konfigurera Smart Picker för att kunna lägga till objekt från Nextcloud-appar, GIF:ar, platsinformation från kartor, AI-genererat innehåll och mycket mer.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Hantera konversationsinställningar\n\nI konversationsmenyn kan du komma åt olika inställningar för att hantera dina konversationer, såsom:\n* Redigera konversationsinformation\n* Hantera aviseringar\n* Tillämpa flera modereringsregler\n* Konfigurera åtkomst och säkerhet\n* Aktivera bottar\n* och mycket mer!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Förenade arabemiraten", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua och Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albanien", + "Armenia" : "Armenien", + "Angola" : "Angola", + "Antarctica" : "Antarktis", + "Argentina" : "Argentina", + "American Samoa" : "Amerikanska Samoa", + "Austria" : "Österrike", + "Australia" : "Australien", + "Aruba" : "Aruba", + "Åland Islands" : "Åland", + "Azerbaijan" : "Azerbajdzjan", + "Bosnia and Herzegovina" : "Bosnien och Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgien", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgarien", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, den mångnationella staten", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brasilien", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Vitryssland", + "Belize" : "Belize", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Kongo, den republikanska republiken", + "Central African Republic" : "Centralafrikanska republiken", + "Congo" : "Kongo, Republiken (Brazzaville)", + "Switzerland" : "Schweiz", + "Côte d'Ivoire" : "Elfenbenskusten", + "Cook Islands" : "Cook Islands", + "Chile" : "Chile", + "Cameroon" : "Kamerun", + "China" : "Kina", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Kuba", + "Cabo Verde" : "Kap Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Julön", + "Cyprus" : "Cypern", + "Czechia" : "Tjeckien", + "Germany" : "Tyskland", + "Djibouti" : "Djibouti", + "Denmark" : "Danmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominikanska republiken", + "Algeria" : "Algeriet", + "Ecuador" : "Ecuador", + "Estonia" : "Estland", + "Egypt" : "Egypten", + "Western Sahara" : "Västsahara", + "Eritrea" : "Eritrea", + "Spain" : "Spanien", + "Ethiopia" : "Etiopien", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falklandsöarna (Malvinas)", + "Micronesia, Federated States of" : "Mironesien, den Mikronesiska federationen", + "Faroe Islands" : "Färöarna", + "France" : "Frankrike", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Förenade konungariket Storbritannien och Nordirland", + "Grenada" : "Grenada", + "Georgia" : "Georgien", + "French Guiana" : "Franska Guyana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Grekland", + "South Georgia and the South Sandwich Islands" : "South Georgia and the South Sandwich Islands", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Island och McDonald Islands", + "Honduras" : "Honduras", + "Croatia" : "Kroatien", + "Haiti" : "Haiti", + "Hungary" : "Ungern", + "Indonesia" : "Indonesien", + "Ireland" : "Irland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "Indien", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "Iran, den islamska republiken", + "Iceland" : "Island", + "Italy" : "Italien", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordanien", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kirgizistan", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, den Demokratiska Folkrepubliken", + "Korea, Republic of" : "Sydkorea", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Cayman Islands", + "Kazakhstan" : "Kazakstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Libanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litauen", + "Luxembourg" : "Luxemburg", + "Latvia" : "Lettland", + "Libya" : "Libyen", + "Morocco" : "Marocko", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldavien", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall Islands", + "North Macedonia" : "Nordmakedonien", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongoliet", + "Macao" : "Macao", + "Northern Mariana Islands" : "Northern Mariana Islands", + "Martinique" : "Martinique", + "Mauritania" : "Mauretanien", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldiverna", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "Nya Kaledonien", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk Island", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Nederländerna", + "Norway" : "Norge", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Nya Zeeland", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Franska Polynesien", + "Papua New Guinea" : "Papua Nya Guinea", + "Philippines" : "Filippinerna", + "Pakistan" : "Pakistan", + "Poland" : "Polen", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Portugal", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Rumänien", + "Serbia" : "Serbien", + "Russian Federation" : "Russian Federation", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Salomonöarna", + "Seychelles" : "Seychellerna", + "Sudan" : "Sudan", + "Sweden" : "Sverige", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenien", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakien", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Surinam", + "South Sudan" : "South Sudan", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Swaziland", + "Turks and Caicos Islands" : "Turks- och Caicosöarna", + "Chad" : "Chad", + "French Southern Territories" : "Franska södra territorierna", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tadzjikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisien", + "Tonga" : "Tonga", + "Turkey" : "Turkiet", + "Trinidad and Tobago" : "Trinidad och Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, den Bolivarianska republiken", + "Virgin Islands, British" : "Jungfruöarna, Brittiska", + "Virgin Islands, U.S." : "Jungfruöarna, Amerikanska", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Sydafrika", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Suddig bakgrund", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Kunde inte kontrollera stöd för laddning av WASM. Kontrollera manuellt om din webbserver tillhandahåller .wasm-filer.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Din webbserver är inte korrekt konfigurerad för att leverera .wasm-filer. Detta är vanligtvis ett problem med Nginx-konfigurationen. För att suddig bakgrund ska fungera behöver konfigurationen justeras så att den även levererar .wasm-filer. Jämför din Nginx-konfiguration med den rekommenderade konfigurationen i vår dokumentation.", + "Talk configuration values" : "Talk konfigurationsvärden", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Att tvinga fram en samtalslängd stöds endast med systemets cron. Aktivera system cron eller ta bort konfigurationen `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Små \"max_call_duration\"-värden (för närvarande inställda på %d) kan inte tillämpas på grund av tekniska begränsningar. Bakgrundsjobbet utförs endast var 5:e minut, så använd på egen risk.", + "Federation" : "Federation", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Det rekommenderas starkt att konfigurera \"memcache.locking\" när Talk Federation är aktiverat.", + "High-performance backend" : "High-performance backend", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Ingen High-performance backend konfigurerad - Att köra Nextcloud Talk utan High-performance backend skalar endast för mycket små samtal (max. 2-3 deltagare). Konfigurera High-performance backend för att säkerställa att samtal med flera deltagare fungerar sömlöst.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Att köra med High-performance backend \"conversation_cluster\" läge är utfasat och kommer inte längre att stödjas i den kommande versionen. High-performance backend stöder real clustering nuförtiden som bör användas istället.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Att definiera flera High-performance backends är föråldrat och kommer inte längre att stödjas i den kommande versionen. Istället bör en lastbalanserare ställas in tillsammans med klustrade signalservrar och konfigureras i Talk-inställningarna.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Den sparade publika nyckeln för den använda algoritmen %1$s matchar inte den sparade privata nyckeln. Kör %2$s för att åtgärda problemet.", + "High-performance backend not configured correctly. Run %s for details." : "High-performance backend är inte korrekt konfigurerad. Kör %s för detaljer.", + "High-performance backend not configured correctly" : "High-performance backend är inte korrekt konfigurerad", + "Error: Cannot connect to server" : "Error: Kan inte ansluta till server", + "Error: Server did not respond with proper JSON" : "Error: Servern svarade inte med korrekt JSON", + "Error: Certificate expired" : "Error: Certifikatet har gått ut", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fel: Systemtiderna för Nextcloud-servern och högpresterande backend-server är osynkroniserade. Se till att båda servrarna är anslutna till en tidsserver eller synkronisera deras tid manuellt.", + "Could not get version" : "Det gick inte att hämta versionen", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Fel: Kör version: {version}; Servern måste uppdateras för att vara kompatibel med den här versionen av Talk", + "Error: Server responded with: {error}" : "Error: Servern svarade med: {error}", + "Error: Unknown error occurred" : "Error: Okänt fel inträffade", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Varning: Aktuell version: {version}; Servern stöder inte alla funktioner i denna Talk-version, funktioner saknas: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Det rekommenderas starkt att konfigurera en minnescache när du kör Nextcloud Talk med en High-performance backend.", + "Client Push" : "Klient-Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push är installerat, vilket gör Talk-aviseringar mer tillförlitliga.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} är inte installerat. Detta kan leda till fördröjda Talk-aviseringar.", + "Recording backend" : "Recording backend", + "Using the recording backend requires a High-performance backend." : "För att kunna använda recording backend krävs en High-performance backend.", + "No recording backend configured" : "Ingen recording backend konfigurerad", + "SIP configuration" : "SIP-konfiguration", + "Using the SIP functionality requires a High-performance backend." : "Användning av SIP-funktionalitet kräver en High-performance backend.", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "Tilldelade Talk-telefonnummer får inte börja med + eller 0. Ta bort eller uppdatera följande nummer:\n{list}", + "No SIP backend configured" : "Ingen SIP-backend konfigurerad", + "Invalid date, date format must be YYYY-MM-DD" : "Felaktigt datum, datumformat måste vara ÅÅÅÅ-MM-DD", + "Conversation not found" : "Konversationen hittades inte", + "Path is already shared with this conversation" : "Sökvägen är redan delad med denna konversation", + "Chat, video & audio-conferencing using WebRTC" : "Chatt, video och ljud - konferenser med WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Chatt, video och ljudkonferenser med WebRTC\n\n* 💬 **Chat** Nextcloud Talk kommer med en enkel textchatt, så att du kan dela eller ladda upp filer från din Nextcloud Files-app eller lokala enhet och nämna andra deltagare.\n* 👥 **Privata, grupp, publika och lösenordsskyddade samtal!** Bjud in någon, en hel grupp eller skicka en publik länk för att bjuda in till ett samtal.\n* 🌐 **Federerade chattar** Chatta med andra Nextcloud-användare på deras servrar\n* 💻 **Skärmdelning!** Dela din skärm med deltagarna i ditt samtal.\n* 🚀 **Integration med andra Nextcloud-appar** som Filer, Kalender, Användarstatus, Dashboard, Flow, Kartor, Smart picker, Kontakter, Deck och många fler.\n* 🌉 **Synkronisera med andra chattlösningar** Med [Matterbridge](https://github.com/42wim/matterbridge/) integrerad i Talk kan du enkelt synkronisera många andra chattlösningar till Nextcloud Talk och vice versa.", + "Leave call" : "Lämna samtalet", + "Navigating away from the page will leave the call in {conversation}" : "Navigera bort från sidan kommer att lämna samtalet {conversation}", + "Stay in call" : "Stanna i samtal", + "Error occurred when getting the conversation information" : "Ett fel uppstod vid hämtning av konversationsinformationen", + "Discuss this file" : "Diskutera den här filen", + "Share this file with others to discuss it" : "Dela den här filen med andra för att diskutera", + "Share this file" : "Dela den här filen", + "Join conversation" : "Gå med i konversation", + "This conversation is password-protected." : "Konversationen är lösenordsskyddad.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Vi har upptäckt flera felaktiga inloggningsförsök från din IP-adress. Ditt nästa inloggningsförsök kommer därför att fördröjas med upp till 30 sekunder.", + "The password is wrong. Try again." : "Lösenordet är fel. Försök igen.", + "Password" : "Lösenord", + "Submit" : "Skicka", + "Error requesting the password." : "Fel vid begäran av lösenord.", + "Request password" : "Begär lösenord", + "This conversation has ended" : "Denna konversation har avslutats", + "Error occurred when joining the conversation" : "Ett fel uppstod vid anslutning av konversationen", + "Close Talk sidebar" : "Stäng Talk sidofält", + "Open Talk sidebar" : "Öppna Talk sidofält", + "Everyone" : "Alla", + "Users and moderators" : "Användare och moderatorer", + "Moderators only" : "Endast moderatorer", + "Disable calls" : "Inaktivera samtal", + "Save changes" : "Spara ändringar", + "Saving …" : "Sparar ...", + "Saved!" : "Sparat!", + "Limit to groups" : "Begränsa till grupper", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "När minst en grupp väljs kan bara personer i de angivna grupperna ingå i konversationer.", + "Guests can still join public conversations." : "Gäster kan fortfarande delta i publika konversationer.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Användare som inte kan använda Talk längre kommer fortfarande att listas som deltagare i sina tidigare samtal och även deras chattmeddelanden kommer att behållas.", + "Limit using Talk" : "Begränsa använda Talk", + "Limit creating a public and group conversation" : "Begränsa att skapa en allmän och gruppkonversation", + "Limit creating conversations" : "Begränsa att skapa konversationer", + "Limit starting a call" : "Begränsa att starta ett samtal", + "Limit starting calls" : "Begränsa att starta samtal", + "When a call has started, everyone with access to the conversation can join the call." : "När ett samtal har startat kan alla som har åtkomst till konversationen gå med i samtalet.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Följande bottar är installerade på denna server. I dokumentationen kan du hitta detaljer om hur du {linkstart1}bygger din egen bott{linkend} eller en {linkstart2}lista av bottar{linkend} för att aktivera på din server.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Inga bottar är installerad på denna server. I dokumentationen kan du hitta detaljer om hur du {linkstart1}bygger din egen bott{linkend} eller en {linkstart2}lista av bottar{linkend} för att aktivera på din server.", + "Description is not provided" : "Beskrivning fattas", + "Locked for moderators" : "Låst för moderatorer", + "Enabled" : "Aktiverad", + "Disabled" : "Inaktiverad", + "Bots settings" : "Inställningar för bottar", + "State" : "Status", + "Name" : "Namn", + "Last error" : "Senaste fel", + "Total errors count" : "Totalt antal fel", + "Find more bots" : "Hitta fler bottar", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Betrodda servrar kan konfigureras på {linkstart}Sidan delningsinställningar{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Federerade chattar och samtal fungerar redan. Hantering av bilagor kommer i en framtida version.", + "Enable Federation in Talk app" : "Aktivera federation i Talk-appen", + "Permissions" : "Behörigheter", + "Allow users to be invited to federated conversations" : "Tillåt användare att bjudas in till federerade konversationer", + "Allow users to invite federated users into conversation" : "Tillåt användare att bjuda in federerade användare till konversation", + "Only allow to federate with trusted servers" : "Tillåt endast federation med betrodda servrar", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "När minst en grupp är vald kan bara personer i de listade grupperna bjuda in federerade användare till konversationer.", + "Groups allowed to invite federated users" : "Grupper som får bjuda in federerade användare", + "Select groups …" : "Välj grupper ...", + "All messages" : "Alla meddelanden", + "@-mentions only" : "@-mentions only", + "Off" : "Av", + "General settings" : "Allmänna inställningar", + "Default notification settings" : "Standardinställningar meddelanden", + "Default group notification" : "Standard gruppmeddelande", + "Default group notification for new groups" : "Standard gruppmeddelande för nya grupper", + "Integration into other apps" : "Integration med andra appar", + "Allow conversations on files" : "Tillåt konversationer på filer", + "Allow conversations on public shares for files" : "Tillåt konversationer på offentliga delningar för filer", + "End-to-end encrypted calls" : "End-to-end-krypterade samtal", + "Enable encryption" : "Aktivera kryptering", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "End-to-end-krypterade samtal med en konfigurerad SIP-brygga kräver en nyare version av high-performance backend och SIP-brygga.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Mobila klienter stöder för närvarande inte end-to-end-krypterade samtal.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Genom att klicka på knappen ovanför skickas informationen i formuläret till Struktur AG:s servrar. Du hittar mer information på {linkstart}spreed.eu{linkend}.", + "Pending" : "Avvaktar", + "Error" : "Fel", + "Blocked" : "Blockerar", + "Active" : "Aktiv", + "Expired" : "Utgånget", + "Never" : "Aldrig", + "The trial could not be requested. Please try again later." : "Provperiod kunde inte begäras. Vänligen försök igen senare.", + "The account could not be deleted. Please try again later." : "Kontot kunde inte raderas. Försök igen senare.", + "Hosted High-performance backend" : "Hosted High-performance backend", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Vår partner Struktur AG tillhandahåller en tjänst där en hostad signalserver kan begäras. För detta behöver du bara fylla i formuläret nedan och din Nextcloud kommer sedan att skicka begäran. När servern är konfigurerad kommer användaruppgifterna att fyllas i automatiskt. Detta kommer att skriva över de befintliga signalserverinställningarna.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Om ditt konto för high-performance-backend inkluderar STUN- och/eller TURN-funktionalitet, kommer inställningarna att uppdateras därefter.", + "URL of this Nextcloud instance" : "URL till denna Nextcloud-instans", + "Full name of the user requesting the trial" : "Fullständigt namn på användaren som begär provperioden", + "Email of the user" : "Användarens e-post", + "Language" : "Språk", + "Country" : "Land", + "Request signaling server trial" : "Begär testversion av signalserver", + "You can see the current status of your hosted signaling server in the following table." : "Du kan se aktuell status för din hostade signalserver i följande tabell.", + "Status" : "Status", + "Created at" : "Skapad", + "Expires at" : "Går ut", + "Limits" : "Begränsningar", + "STUN included" : "STUN ingår", + "Yes" : "Ja", + "No" : "Nej", + "TURN included" : "TURN ingår", + "Delete the signaling server account" : "Ta bort signalserverkontot", + "_%n user_::_%n users_" : ["%n användare","%n användare"], + "Installed version: {version}" : "Installerad version: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Du kan installera Matterbridge för att länka Nextcloud Talk till några andra tjänster, besök deras {linkstart1}GitHub-sida{linkend} för mer information. Att ladda ner och installera appen kan ta ett tag. Vid timeout, installera den manuellt från {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binär har felaktiga behörigheter. Se till att den binära Matterbridge-filen ägs av rätt användare och kan köras. Den finns i \"/.../nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binär hittades inte eller kunde inte köras.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Du kan också ställa in sökvägen till Matterbridge-binären manuellt via konfigurationen. Se {linkstart}Matterbridge integrationsdokumentation{linkend} för mer information.", + "Downloading …" : "Hämtar …", + "Install Talk Matterbridge" : "Installera Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Ett fel uppstod när Matterbridge-appen skulle installeras", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Ett fel uppstod när Talk Matterbridge skulle installeras. Installera den manuellt", + "Failed to execute Matterbridge binary." : "Det gick inte att köra Matterbridge binär.", + "Matterbridge integration" : "Matterbridge-integration", + "Enable Matterbridge integration" : "Aktivera Matterbridge-integration", + "Status: Checking connection" : "Status: Kontrollerar anslutning", + "OK: Running version: {version}" : "OK: Kör version: {version}", + "Error: Server seems to be a Signaling server" : "Fel: Servern verkar vara en signalserver", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Fel: Systemtiderna för Nextcloud-servern och Recording-backend-servern är osynkroniserade. Se till att båda servrarna är anslutna till en tidsserver eller synkronisera deras tid manuellt.", + "Recording backend URL" : "Recording backend-URL", + "Validate SSL certificate" : "Validera SSL-certifikat", + "Delete this server" : "Ta bort denna server", + "Test this server" : "Testa denna server", + "Disabled for all calls" : "Inaktiverad för alla samtal", + "Enabled for all calls" : "Aktiverad för alla samtal", + "Configurable on conversation level by moderators" : "Anpassningsbar på konversationsnivå av moderatorer", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP-inställningarna \"upload_max_filesize\" eller \"post_max_size\" tillåter endast att ladda upp filer upp till {maxUpload}.", + "Recording backend settings saved" : "Inställningar för recording backend har sparats", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Moderatorer kommer att tillåtas aktivera samtycke på konversationsnivå. Samtycket om inspelning kommer att krävas för varje deltagare innan de går med i varje samtal i denna konversation.", + "The consent to be recorded will be required for each participant before joining every call." : "Samtycket om inspelning kommer att krävas för varje deltagare innan de går med i varje samtal.", + "The consent to be recorded is not required." : "Samtycke för att spela in krävs inte.", + "Recording backend configuration is only possible with a High-performance backend." : "Recording backend-konfiguration är endast möjlig med en High-performance backend.", + "Add a new recording backend server" : "Lägg till en ny recording backend-server", + "Shared secret" : "Delad hemlighet", + "Recording consent" : "Samtycke för inspelning", + "Recording transcription" : "Inspelning av transkription", + "Automatically transcribe call recordings with a transcription provider" : "Transkribera samtalsinspelningar automatiskt med en transkriptionsleverantör", + "Automatically summarize call recordings with transcription and summary providers" : "Sammanfatta automatiskt samtalsinspelningar med transkriptions- och sammanfattningsleverantörer", + "SIP configuration saved!" : "SIP-konfigurationen sparad!", + "SIP configuration is only possible with a High-performance backend." : "SIP-konfiguration är endast möjlig med en High-performance backend.", + "Enable SIP Dial-out option" : "Aktivera SIP-uppringningsalternativ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalservern behöver uppdateras för att stödja SIP-uppringningsfunktionen.", + "Do not show SIP Dial-out caller number" : "Visa inte SIP uppringarens nummer vid utgående samtal", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Anonymt nummer ska visas som “okänd” eller “hemligt nummer” för den som tar emot samtalet", + "Dial-out number" : "Utgående nummer", + "E164 formatted number used as a fallback caller number for outgoing calls" : "E164-formaterat nummer som används som reservnummer vid utgående samtal", + "Dial-out prefix" : "Prefix för utgående samtal", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Prefix till det konfigurerade användarnumret för utgående samtal (standard är `+`)", + "Restrict SIP configuration" : "Begränsa SIP-konfiguration", + "Enable SIP configuration" : "Aktivera SIP-konfiguration", + "Only users of the following groups can enable SIP in conversations they moderate" : "Endast användare av följande grupper kan aktivera SIP i konversationer som de modererar", + "Phone number (Country)" : "Telefonnummer (land)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Denna information skickas i e-postinbjudningar samt visas i sidofältet för alla deltagare.", + "Nextcloud base URL" : "Nextcloud bas-URL", + "Talk Backend URL" : "Talk Backend-URL", + "WebSocket URL" : "WebSocket-URL", + "Available features" : "Tillgängliga funktioner", + "Error: Websocket connection failed" : "Fel: Websocket-anslutning misslyckades", + "Error code" : "Felkod", + "Error message" : "Felmeddelande", + "Error: Websocket connection failed. Check browser console" : "Fel: Websocket-anslutning misslyckades. Kontrollera webbläsarkonsolen", + "High-performance backend URL" : "High-performance backend-URL", + "Missing High-performance backend warning hidden" : "Varning för saknad High-performance backend är dold", + "High-performance backend settings saved" : "Inställningar för high-performance backend har sparats", + "Nextcloud Talk setup not complete" : "Nextcloud Talk-installationen är inte klar", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Observera att i samtal med fler än 2 deltagare utan High-performance backend kommer deltagarna med största sannolikhet att uppleva anslutningsproblem och orsaka hög belastning på deltagande enheter.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Installera High-performance backend för att säkerställa att samtal med flera deltagare fungerar sömlöst.", + "Nextcloud portal" : "Nextcloud portal", + "Quick installation guide" : "Snabb installationsguide", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "High-performance backend krävs för samtal och konversationer med flera deltagare. Utan detta så måste alla deltagare ladda upp sin egen video individuellt för varje annan deltagare, vilket med största sannolikhet kommer att orsaka anslutningsproblem och en hög belastning på deltagande enheter.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Det rekommenderas starkt att sätta upp en distribuerad cache när du använder Nextcloud Talk med en High-performance backend.", + "Add High-performance backend server" : "Lägg till High-performance backend-server", + "Warn about connectivity issues in calls with more than 2 participants" : "Varna om anslutningsproblem i samtal med fler än 2 deltagare", + "STUN server URL" : "STUN server-URL", + "The server address is invalid" : "Serveradressen är ogiltig", + "STUN settings saved" : "STUN-inställningar sparade", + "STUN servers" : "STUN-servrar", + "A STUN server is used to determine the public IP address of participants behind a router." : "En STUN-server används för att bestämma den offentliga IP-adressen av deltagare bakom en router.", + "Add a new STUN server" : "Lägg till en ny STUN-server", + "{schema} scheme must be used with a domain" : "{schema} schema måste användas med en domän", + "{option1} and {option2}" : "{option1} och {option2}", + "{option} only" : "endast {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: ICE-kandidater returneras av TURN-servern", + "Error: No working ICE candidates returned by the TURN server" : "Fel: Inga fungerande ICE-kandidater returneras av TURN-servern", + "Testing whether the TURN server returns ICE candidates" : "Testar om TURN-servern returnerar ICE-kandidater", + "TURN server schemes" : "TURN-server scheman", + "TURN server URL" : "TURN server-URL", + "TURN server secret" : "TURN-server hemlighet", + "TURN server protocols" : "TURN-server protokoll", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "En TURN-server används för att proxa trafiken från deltagare bakom en brandvägg. Om enskilda deltagare inte kan ansluta till andra är en TURN-server troligtvis nödvändig. Se {linkstart}denna dokumentation{linkend} för installationsinstruktioner.", + "TURN settings saved" : "TURN-inställningar sparade", + "TURN servers" : "TURN-servrar", + "Add a new TURN server" : "Lägg till en ny TURN-server", + "Failed" : "Misslyckades", + "OK" : "OK", + "Checking …" : "Kontrollerar...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Misslyckades: WebAssembly är inaktiverat eller stöds inte i den här webbläsaren. Aktivera WebAssembly eller använd en webbläsare med stöd för att utföra kontrollen.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Misslyckades: \".wasm\"- och \".tflite\"-filer returnerades inte korrekt av webbservern. Kontrollera avsnittet \"Systemkrav\" i Talk-dokumentationen.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: \".wasm\"- och \".tflite\"-filer returnerades korrekt av webbservern.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Det verkar som att PHP- och Apache-konfigurationen inte är kompatibel. Observera att PHP endast kan användas med modulen MPM_PREFORK och PHP-FPM kan endast användas med modulen MPM_EVENT.", + "Web server setup checks" : "Kontroller av webbserverinställningar", + "Files required for virtual background can be loaded" : "Filer som krävs för virtuell bakgrund kan laddas", + "Federated user" : "Federerad användare", + "Assign participants to rooms" : "Tilldela deltagare till rum", + "Configure breakout rooms" : "Konfigurera grupprum", + "Number of breakout rooms" : "Antal grupprum", + "You can create from 1 to 20 breakout rooms." : "Du kan skapa från 1 till 20 grupprum.", + "Assignment method" : "Tilldelningsmetod", + "Automatically assign participants" : "Tilldela deltagare automatiskt", + "Manually assign participants" : "Tilldela deltagare manuellt", + "Allow participants to choose" : "Låt deltagarna välja", + "Create rooms" : "Skapa rum", + "Confirm" : "Bekräfta", + "Create breakout rooms" : "Skapa grupprum", + "Reset" : "Återställ", + "Delete breakout rooms" : "Ta bort grupprum", + "Room {roomNumber}" : "Rum {roomNumber}", + "Current breakout rooms and settings will be lost" : "Aktuella grupprum och inställningar kommer att gå förlorade", + "Cancel" : "Avbryt", + "Unassigned participants" : "Ej tilldelade deltagare", + "Back" : "Tillbaka", + "Assign" : "Tilldela", + "Add participant \"{user}\"" : "Lägg till deltagare \"{user}\"", + "Now" : "Nu", + "Invalid calendar selected" : "Ogiltig kalender vald", + "Invalid start time selected" : "Ogiltig starttid vald", + "Invalid end time selected" : "Ogiltig sluttid vald", + "Unknown error occurred" : "Okänt fel inträffade", + "Sending no invitations" : "Skickar inga inbjudningar", + "{participant0} will receive an invitation" : "{participant0} kommer att få en inbjudan", + "{participant0} and {participant1} will receive invitations" : "{participant0} och {participant1} kommer att få inbjudningar", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} och %n annan kommer att få inbjudningar","{participant0}, {participant1} och %n andra kommer att få inbjudningar"], + "Invite {user}" : "Bjud in {user}", + "Invite all users and emails in this conversation" : "Bjud in alla användare och e-postadresser till den här konversationen", + "Meeting created" : "Möte skapat", + "Upcoming meetings" : "Kommande möten", + "Loading …" : "Laddar ...", + "No upcoming meetings" : "Inga kommande möten", + "Schedule a meeting" : "Schemalägg ett möte", + "Meeting title" : "Mötes titel", + "From" : "Från", + "To" : "Till", + "Calendar" : "Kalender", + "Attendees" : "Deltagare", + "No other participants to send invitations to." : "Inga andra deltagare att skicka inbjudningar till.", + "Add attendees" : "Lägg till deltagare", + "Save" : "Spara", + "Search participants" : "Sök deltagare", + "No results" : "Inga resultat", + "Done" : "Klar", + "Disable live transcription" : "Inaktivera live-transkribering", + "Enable live transcription (generated by AI)" : "Aktivera live-transkribering (genereras av AI)", + "Enable live transcription (Live transcriptions app is not installed)" : "Aktivera live-transkribering (appen Live Transcriptions är inte installerad)", + "Disable live translation" : "Inaktivera live-översättning", + "Enable live translation (generated by AI)" : "Aktivera live-översättning (genereras av AI)", + "Original language" : "Originalspråk", + "Live translations app is not installed" : "Appen Live translations är inte installerad", + "Original language: {languageName}" : "Originalspråk: {languageName}", + "Translated language" : "Översatt språk", + "Translated language: {languageName}" : "Översatt språk: {languageName}", + "Raise hand" : "Räck upp handen", + "Raise hand (R)" : "Räck upp handen (R)", + "Lower hand" : "Ta ner handen", + "Lower hand (R)" : "Ta ner handen (R)", + "Exit full screen (F)" : "Avsluta fullskärm (F)", + "Full screen (F)" : "Fullskärm (F)", + "Speaker view" : "Presentationsvy", + "Grid view" : "Rutnätsvy", + "Error when trying to load the available live transcription languages" : "Fel vid försök att läsa in tillgängliga språk för live-transkribering", + "Failed to enable live transcription" : "Kunde inte aktivera live-transkribering", + "Failed to enable live translations" : "Kunde inte aktivera live-översättning", + "Failed to disable live translations" : "Kunde inte inaktivera live-översättning", + "Recording consent is required" : "Samtycke för inspelning krävs", + "This conversation is read-only" : "Den här konversationen är skrivskyddad", + "Conversation not found or not joined" : "Konversationen hittades inte eller gick inte att gå med", + "Lobby is still active and you're not a moderator" : "Lobbyn är fortfarande aktiv och du är inte moderator", + "Connection failed" : "Anslutningen misslyckades", + "Reload" : "Ladda om", + "{nickName} raised their hand." : "{nickName} räckte upp handen.", + "A participant raised their hand." : "En deltagare räckte upp handen.", + "Collapse stripe" : "Minimera fält", + "Expand stripe" : "Expandera fält", + "Previous page of videos" : "Föregående sida med videor", + "Next page of videos" : "Nästa sida med videor", + "Connecting …" : "Ansluter…", + "Calling …" : "Ringer …", + "Waiting for {user} to join the call" : "Väntar på att {user} ska gå med i samtalet", + "Waiting for others to join the call …" : "Väntar på andra ansluter sig till samtalet ...", + "You can invite others in the participant tab of the sidebar" : "Du kan bjuda in andra på fliken deltagare i sidofältet", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Du kan bjuda in andra på fliken deltagare i sidofältet eller dela den här länken!", + "Share this link to invite others!" : "Dela denna länk för att bjuda in andra!", + "Copy link" : "Kopiera länk", + "You are not allowed to enable audio" : "Du får inte aktivera ljud", + "No audio. Click to select device" : "Inget ljud. Klicka för att välja enhet", + "Mute audio" : "Stäng av ljudet", + "Mute audio (M)" : "Stäng av ljud (M)", + "Unmute audio" : "Aktivera ljud", + "Unmute audio (M)" : "Aktivera ljud (M)", + "None" : "Ingen", + "Select a microphone" : "Välj en mikrofon", + "Select a speaker" : "Välj en högtalare", + "Microphone settings" : "Mikrofoninställningar", + "Check devices" : "Kontrollera enheter", + "Access to camera was denied" : "Åtkomst till kamera nekades", + "Error while accessing camera: It is likely in use by another program" : "Fel vid åtkomst till kameran: Den används troligen av ett annat program", + "Error while accessing camera" : "Fel vid åtkomst till kameran", + "You have been muted by a moderator" : "Du har tystats av en moderator", + "Hide presenter video" : "Dölj presentatörsvideo", + "You are not allowed to enable video" : "Du får inte aktivera video", + "No video. Click to select device" : "Ingen video. Klicka för att välja enhet", + "Disable video" : "Stäng av video", + "Disable video (V)" : "Inaktivera video (V)", + "Enable video" : "Aktivera video", + "Enable video (V)" : "Aktivera video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video - Din anslutning får ett kort avbrott när du aktiverar video första gången", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video (V) - Din anslutning får ett kort avbrott när du aktiverar videon för första gången", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Aktivera video. Din anslutning får ett kort avbrott när du aktiverar video första gången", + "Select a video device" : "Välj en videoenhet", + "Show presenter" : "Visa presentatör", + "You" : "Du", + "Mute" : "Tyst", + "Muted" : "Tyst", + "Show screen" : "Visa skärm", + "Stop following" : "Sluta följa", + "Connection could not be established …" : "Anslutningen kunde inte upprättas ...", + "Connection was lost and could not be re-established …" : "Anslutningen förlorades och kunde inte återupprättas ...", + "Connection could not be established. Trying again …" : "Det gick inte att upprätta anslutning. Försöker igen ...", + "Connection lost. Trying to reconnect …" : "Anslutning förlorad. Försöker återansluta ...", + "Connection problems …" : "Anslutningsproblem ...", + "Collapse" : "Dölj", + "Expand" : "Utöka", + "You need to be logged in to upload files" : "Du måste vara inloggad för att ladda upp filer", + "Drop your files to upload" : "Släpp dina filer för att ladda upp", + "Conversation messages" : "Konversationsmeddelanden", + "Scroll to bottom" : "Bläddra till botten", + "Post message" : "Skicka meddelande", + "Federated conversation" : "Federerad konversation", + "Public conversation" : "Publik konversation", + "Favorite" : "Favorit", + "Banned users" : "Blockerade användare", + "Manage the list of banned users in this conversation." : "Hantera listan över blockerade användare i den här konversationen.", + "Manage bans" : "Hantera blockeringar", + "No banned users" : "Inga blockerade användare", + "Banned by:" : "Blockerad av:", + "Date:" : "Datum:", + "Note:" : "Notering:", + "Hide details" : "Göm detaljer", + "Show details" : "Visa detaljer", + "Unban" : "Tillåt", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Du kan ändra titeln och beskrivningen i {linkstart}Kalender ↗{linkend}.", + "Error while updating conversation name" : "Fel uppstod när namnet på konversationen skulle uppdateras", + "Error while updating conversation description" : "Fel uppstod när beskrivningen av konversationen skulle uppdateras", + "Enter a name for this conversation" : "Ange ett namn för den här konversationen", + "Edit conversation name" : "Ändra namn på konversation", + "Edit conversation description" : "Ändra beskrivning på konversation", + "Enter a description for this conversation" : "Ange en beskrivning för den här konversationen", + "Picture" : "Bild", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Följande bottar kan aktiveras i den här konversationen. Kontakta din administratör för att få fler bottar installerade på den här servern.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Inga bottar är installerade på denna server. Kontakta din administratör för att få bottar installerade på den här servern.", + "Disable" : "Inaktivera", + "Enable" : "Aktivera", + "The bot is not available anymore" : "Boten är inte längre tillgänglig", + "Breakout rooms" : "Grupprum", + "Manage breakout rooms" : "Hantera grupprum", + "Set up breakout rooms for this conversation" : "Konfigurera grupprum för den här konversationen", + "Please select a valid PNG or JPG file" : "Välj en giltig PNG- eller JPG-fil", + "Choose your conversation picture" : "Välj din konversationsbild", + "Choose" : "Välj", + "Error setting conversation picture" : "Fel vid inställning av konversationsbild", + "Could not set the conversation picture: {error}" : "Kunde inte ställa in konversationsbilden: {error}", + "Error cropping conversation picture" : "Kunde inte beskära konversationsbilden", + "Error removing conversation picture" : "Kunde inte ta bort konversationsbilden", + "Set emoji as conversation picture" : "Ställ in emoji som konversationsbild", + "Set background color for conversation picture" : "Ställ in bakgrundsfärg för konversationsbild", + "Upload conversation picture" : "Ladda upp konversationsbild", + "Choose conversation picture from files" : "Välj konversationsbild från filer", + "Remove conversation picture" : "Ta bort konversationsbild", + "The file must be a PNG or JPG" : "Filen måste vara en PNG eller JPG", + "Set picture" : "Ställ in bild", + "Default permissions modified for {conversationName}" : "Standardbehörigheter har ändrats för {conversationName}", + "Could not modify default permissions for {conversationName}" : "Kunde inte ändra standardbehörigheter för {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Redigera standardbehörigheterna för deltagare i den här konversationen. Dessa inställningar påverkar inte moderatorer.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Varje gång behörigheter ändras i det här avsnittet kommer anpassade behörigheter som tidigare tilldelats enskilda deltagare att gå förlorade.", + "All permissions" : "Alla behörigheter", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Deltagare har behörighet att starta ett samtal, gå med i ett samtal, aktivera ljud och video samt dela skärm.", + "Participants can use all available features." : "Deltagare kan använda alla tillgängliga funktioner.", + "Restricted" : "Begränsad", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Deltagare kan gå med i samtal, men kan inte aktivera ljud eller video eller dela skärm förrän en moderator manuellt ger dem behörighet.", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "Deltagare får en begränsad uppsättning funktioner tills en moderator manuellt beviljar ytterligare behörigheter.", + "Advanced permissions" : "Avancerade behörigheter", + "Edit permissions" : "Redigera behörigheter", + "Conversation settings" : "Konversationsinställningar", + "Basic Info" : "Grundläggande info", + "Personal" : "Personligt", + "Moderation" : "Moderering", + "Setup overview" : "Inställningsöversikt", + "Live transcription" : "Live-transkribering", + "Live transcriptions app is not installed" : "Appen Live transcriptions är inte installerad", + "Enable live transcription" : "Aktivera live-transkribering", + "Breakout Rooms" : "Grupprum", + "Matterbridge" : "Matterbridge", + "Bots" : "Bottar", + "Danger zone" : "Riskzon", + "Archive conversation" : "Arkivera konversation", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arkiverade konversationer är dolda från konversationslistan som standard. De kommer dock fortfarande att visas när du söker efter konversationsnamnet eller kommer åt en lista med arkiverade konversationer.", + "Do you really want to leave \"{displayName}\"?" : "Vill du verkligen lämna \"{displayName}\"?", + "You can archive this conversation instead." : "Du kan arkivera den här konversationen istället.", + "Leave conversation" : "Lämna konversationen", + "You need to promote a new moderator before you can leave the conversation" : "Du måste tilldela en ny moderator innan du kan lämna konversationen", + "Delete conversation" : "Ta bort konversationen", + "Do you really want to delete \"{displayName}\"?" : "Vill du verkligen radera \"{displayName}\"?", + "Error while deleting conversation" : "Kunde inte ta bort konversationen", + "Delete all chat messages" : "Radera alla chattmeddelanden", + "Do you really want to delete all messages in \"{displayName}\"?" : "Vill du verkligen radera alla meddelanden i \"{displayName}\"?", + "Error while clearing chat history" : "Kunde inte rensa chatthistoriken", + "Be careful, these actions cannot be undone." : "Var försiktig, dessa åtgärder kan inte ångras.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "När en konversation har lämnats krävs en inbjudan för att återgå till en sluten konversation. En öppen konversation kan återanslutas när som helst.", + "Permanently delete this conversation." : "Radera den här konversationen permanent.", + "Delete chat messages" : "Radera chattmeddelanden", + "Permanently delete all the messages in this conversation." : "Radera alla meddelanden i den här konversationen permanent.", + "_%n hour_::_%n hours_" : ["%n timme","%n timmar"], + "_%n day_::_%n days_" : ["%n dag","%n dagar"], + "_%n week_::_%n weeks_" : ["%n vecka","%n veckor"], + "Custom expiration time" : "Anpassad utgångstid", + "Message expiration disabled" : "Utgångstid för meddelanden är inaktiverat", + "Message expiration set: {duration}" : "Meddelandets utgångstid: {duration}", + "Error when trying to set message expiration" : "Fel vid försök att ställa in meddelandets utgång", + "Message expiration" : "Meddelande löper ut", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Chattmeddelanden kan löpa ut efter en viss tid. Notera: Filer som delas i chatten kommer inte att raderas för ägaren, men kommer inte längre att delas i konversationen.", + "Set message expiration" : "Ställ in meddelandes utgångstid", + "Current message expiration" : "Nuvarande utgångstid för meddelande", + "Password copied to clipboard" : "Lösenordet har kopierats till urklipp", + "Password could not be copied" : "Lösenordet kunde inte kopieras", + "Guest access" : "Gäståtkomst", + "Breakout rooms are not allowed in public conversations." : "Grupprum är inte tillåtna i publika konversationer.", + "Allow guests to join this conversation via link" : "Tillåt gäster att gå med i denna konversation via länk", + "Password protection" : "Lösenordsskydd", + "This conversation is password-protected. Guests need password to join" : "Den här konversationen är lösenordsskyddad. Gäster behöver lösenord för att gå med", + "Password protection is needed for public conversations" : "Lösenordsskydd krävs för offentliga konversationer", + "Set a password" : "Sätt ett lösenord", + "Change password" : "Byt lösenord", + "Enter new password" : "Ange nytt lösenord", + "Save password" : "Spara lösenord", + "Copy password" : "Kopiera lösenord", + "Guests are allowed to join this conversation via link" : "Gäster får gå med i denna konversation via länk", + "Guests are not allowed to join this conversation" : "Gäster får inte gå med i denna konversation", + "Resend invitations" : "Skicka inbjudningar igen", + "This conversation is open to both registered users and users created with the Guests app" : "Den här konversationen är öppen för både registrerade användare och användare som skapats med appen Gäster", + "This conversation is open to registered users" : "Denna konversation är öppen för registrerade användare", + "This conversation is limited to the current participants" : "Denna konversation är begränsad till de aktuella deltagarna", + "You opened the conversation to both registered users and users created with the Guests app" : "Du öppnade konversationen för både registrerade användare och användare som skapats med appen Gäster", + "Error occurred when opening or limiting the conversation" : "Ett fel uppstod när konversationen öppnades eller begränsades", + "Open conversation to registered users, showing it in search results" : "Öppna konversationen för registrerade användare och visa den i sökresultaten", + "Also open to users created with the Guests app" : "Även öppen för användare som skapats med appen Gäster", + "Open conversation" : "Öppen konversation", + "Set language spoken in calls" : "Ange vilket språk som talas i samtal", + "Languages could not be loaded" : "Språk kunde inte laddas", + "Loading languages …" : "Laddar språk …", + "Invalid language" : "Ogiltigt språk", + "Default language (English)" : "Standardspråk (engelska)", + "Default live transcription language set" : "Standardspråk för live-transkribering har angetts", + "Live transcription language set: {languageName}" : "Språk för live-transkribering inställt: {languageName}", + "Error when trying to set live transcription language" : "Fel vid försök att ställa in språk för live-transkribering", + "Start time: {date}" : "Starttid: {date}", + "Start time has been updated" : "Starttiden har uppdaterats", + "Error occurred while updating start time" : "Fel uppstod vid uppdatering av starttid", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Aktivering av lobbyn kommer att ta bort icke-moderatorer från det pågående samtalet.", + "Enable lobby, restricting the conversation to moderators" : "Aktivera lobbyn, begränsa konversationen till moderatorer", + "Meeting start time" : "Mötets starttid", + "Start time (optional)" : "Starttid (valfritt)", + "Import email participants" : "Importera e-postdeltagare", + "You can import a list of email participants from a CSV file." : "Du kan importera en lista över e-postdeltagare från en CSV-fil.", + "Poll drafts" : "Omröstningsutkast", + "Browse poll drafts" : "Bläddra bland omröstningsutkast", + "Error occurred when locking the conversation" : "Ett fel uppstod när konversationen skulle låsas", + "Error occurred when unlocking the conversation" : "Ett fel uppstod när konversationen skulle låsas upp", + "Lock conversation" : "Lås konversation", + "This will also terminate the ongoing call." : "Detta kommer också att avsluta det pågående samtalet.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Lås konversationen för att förhindra att någon skickar meddelanden eller startar samtal", + "Edit" : "Ändra", + "More information" : "Mer information", + "Delete" : "Radera", + "Add new bridged channel to current conversation" : "Lägg till ny bryggad kanal till aktuell konversation", + "unknown state" : "okänt tillstånd", + "running" : "aktiv", + "not running, check Matterbridge log" : "inte aktiv, kontrollera Matterbridge-loggen", + "not running" : "inte aktiv", + "Bridge saved" : "Brygga sparad", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Du kan brygga kanaler från olika snabbmeddelandesystem med Matterbridge.", + "More info on Matterbridge" : "Mer information om Matterbridge", + "Messaging systems" : "Meddelandesystem", + "Enable bridge" : "Aktivera brygga", + "Show Matterbridge log" : "Visa Matterbridge-logg", + "Log content" : "Logginnehåll", + "Only moderators are allowed to mention @all" : "Endast moderatorer får nämna @all", + "All participants are allowed to mention @all" : "Alla deltagare får nämna @all", + "Participants are now allowed to mention @all." : "Deltagarna får nu nämna @all.", + "Mentioning @all has been limited to moderators." : "Att nämna @all har begränsats till moderatorer.", + "Allow participants to mention @all" : "Tillåt deltagarna att nämna @all", + "Mention permissions" : "Behörigheter för omnämnanden", + "Notifications" : "Aviseringar", + "Notify about calls in this conversation" : "Meddela om samtal i den här konversationen", + "Important conversation" : "Viktigt samtal", + "\"Do not disturb\" user status is ignored for important conversations" : "Användarstatus \"Stör ej\" ignoreras för viktiga konversationer", + "Sensitive conversation" : "Känslig konversation", + "Message preview will be disabled in conversation list and notifications" : "Förhandsvisning av meddelanden kommer att inaktiveras i konversationslistan och i aviseringar", + "Recording consent is required for calls in this conversation" : "Samtycke för inspelning krävs för samtal i denna konversation", + "Recording consent is not required for calls in this conversation" : "Samtycke för inspelning krävs inte för samtal i denna konversation", + "Recording consent requirement was updated" : "Kravet på samtycke vid inspelning har uppdaterats", + "Error occurred while updating recording consent" : "Fel uppstod vid uppdatering av samtycke för inspelning", + "Recording Consent" : "Samtycke för inspelning", + "Recording consent cannot be changed once a call or breakout session has started." : "Samtycke för inspelning kan inte ändras när ett samtal eller grupprum har startat.", + "Require recording consent before joining call in this conversation" : "Kräv inspelningssamtycke för att gå med i samtalet i den här konversationen", + "Recording consent is required for all calls" : "Samtycke för inspelning krävs för alla samtal", + "SIP dial-in is now possible without PIN requirement" : "SIP-inringning är nu möjlig utan PIN-krav", + "SIP dial-in is now enabled" : "SIP-inringning är nu aktiverad", + "SIP dial-in is now disabled" : "SIP-inringning är nu inaktiverad", + "Error occurred when enabling SIP dial-in" : "Ett fel uppstod när SIP-inringning skulle aktiveras", + "Error occurred when disabling SIP dial-in" : "Ett fel uppstod när SIP-inringning skulle inaktiveras", + "Phone and SIP dial-in" : "Telefon och SIP-inringning", + "Enable phone and SIP dial-in" : "Aktivera telefon och SIP-inringning", + "Allow to dial-in without a PIN" : "Tillåt att ringa in utan PIN", + "Ongoing" : "Pågår", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person har accepterat","%n personer har accepterat"], + "_%n person declined_::_%n people declined_" : ["%n person har avböjt","%n personer har avböjt"], + "_and %n other attachment_::_and %n other attachments_" : ["och %n annan bilaga","och %n andra bilagor"], + "With {displayName}" : "Med {displayName}", + "In {conversation}" : "I {conversation}", + "View attachment" : "Visa bilaga", + "Join" : "Gå med", + "View conversation" : "Visa konversation", + "View event on Calendar" : "Visa händelse i kalender", + "Error while creating the conversation" : "Fel uppstod när konversationen skulle skapas", + "Hello, {displayName}" : "Hej, {displayName}", + "Start meeting now" : "Starta möte nu", + "Give your meeting a title" : "Ge ditt möte en titel", + "Create and copy link" : "Skapa och kopiera länk", + "Create a new conversation" : "Skapa en ny konversation", + "Join open conversations" : "Gå med i öppna konversationer", + "Call a phone number" : "Ring ett telefonnummer", + "Scroll backward" : "Skrolla bakåt", + "Scroll forward" : "Skrolla framåt", + "Schedule meetings" : "Schemalägg möten", + "You don't have any upcoming meetings" : "Du har inga kommande möten", + "Calendar events with a conversation link as the location are shown here" : "Kalenderhändelser med en konversationslänk som plats visas här", + "Open calendar" : "Öppna kalender", + "Unread mentions" : "Olästa omnämnanden", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Meddelanden där du har blivit nämnd visas här. Du kan nämna personer genom att skriva @ följt av deras namn", + "Upcoming reminders" : "Kommande påminnelser", + "Message reminders" : "Meddelandepåminnelser", + "Set a reminder on a message to be notified" : "Ställ in en påminnelse på ett meddelande för att få en avisering", + "Start a group conversation" : "Skapa en gruppkonversation", + "Create conversation" : "Skapa konversation", + "Enter your name" : "Ange ditt namn", + "Submit name and join" : "Ange namn och gå med", + "Do you already have an account?" : "Har du redan ett konto?", + "Log in" : "Logga in", + "Error while verifying uploaded file" : "Fel vid verifiering av uppladdad fil", + "Uploaded file is verified" : "Uppladdad fil är verifierad", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Innehållsformatet är kommaseparerade värden (CSV):
- Rubrikrad krävs och måste matcha \"namn\",\"e-post\" eller bara \"e-post\"
- En post per rad (t.ex. \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "Deltagare har lagts till", + "Error while adding participants" : "Det gick inte att lägga till deltagare", + "Import a file" : "Importera en fil", + "Browse" : "Bläddra", + "Verifying uploaded file …" : "Verifierar uppladdad fil …", + "This might take a moment" : "Det här kan ta ett tag", + "Send invitations" : "Skicka inbjudningar", + "_%n invalid email_::_%n invalid emails_" : ["%n ogiltig e-postadress","%n ogiltiga e-postadresser"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-postadress är redan importerade eller en dubblett","%n e-postadresser är redan importerade eller dubbletter"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n inbjudning kan skickas","%n inbjudningar kan skickas"], + "An error occurred while calling a phone number" : "Ett fel uppstod när ett telefonnummer ringdes", + "Phone number could not be called: {error}" : "Kunde inte ringa upp telefonnummer: {error}", + "Phone number could not be called" : "Kunde inte ringa upp telefonnummer", + "Search participants or phone numbers" : "Sök deltagare eller telefonnummer", + "Creating the conversation …" : "Skapar konversationen ...", + "Mark as read" : "Markera som läst", + "Mark as unread" : "Markera som oläst", + "Remove from favorites" : "Ta bort från favoriter", + "Add to favorites" : "Lägg till som favorit", + "Unarchive conversation" : "Avarkivera konversation", + "Ignore \"Do not disturb\"" : "Ignorera \"Stör ej\"", + "You need to promote a new moderator before you can leave the conversation." : "Du måste tilldela en ny moderator innan du kan lämna konversationen.", + "Conversation actions" : "Konversationsåtgärder", + "Notify about calls" : "Meddela om samtal", + "Hide message text" : "Göm meddelandetext", + "Pending invitations" : "Väntande inbjudningar", + "Join conversations from other servers" : "Gå med i konversationer från andra servrar", + "From {user} at {remoteServer}" : "Från {user} på {remoteServer}", + "Decline invitation" : "Avböj inbjudan", + "Accept invitation" : "Acceptera inbjudan", + "No pending invitations" : "Inga väntande inbjudningar", + "Home" : "Hem", + "Unread" : "Oläst", + "Mentions" : "Omnämnanden", + "Meetings" : "Möten", + "Sort conversations" : "Sortera konversationer", + "By recent activity" : "Efter senaste aktivitet", + "Alphabetically" : "Alfabetisk", + "Do not group by type" : "Gruppera inte efter typ", + "Show private ones first" : "Visa privata först", + "Show group ones first" : "Visa grupper först", + "No followed threads" : "Inga följda trådar", + "No matches found" : "Inga träffar hittades", + "No conversations found" : "Inga konversationer hittades", + "You have no archived conversations." : "Du har inga arkiverade konversationer.", + "Subscribe to an existing thread or start your own." : "Prenumerera på en befintlig tråd eller starta en egen.", + "You have no unread mentions." : "Du har inga olästa omnämnanden.", + "You have no unread messages." : "Du har inga olästa meddelanden.", + "An error occurred while performing the search" : "Ett fel uppstod när sökningen utfördes", + "Conversation list" : "Konversationslista", + "Filter conversations by" : "Filtrera konversationer efter", + "Unread messages" : "Olästa meddelanden", + "Meeting conversations" : "Möteskonversationer", + "Clear filters" : "Rensa filter", + "New personal note" : "Ny personlig anteckning", + "SIP backend is not installed" : "SIP-backend är inte installerad", + "Back to conversations" : "Tillbaka till konversationer", + "Archived conversations" : "Arkiverade konversationer", + "Threads" : "Trådar", + "Clear filter" : "Rensa filter", + "Show more threads" : "Visa fler trådar", + "App settings" : "Appinställningar", + "Users" : "Användare", + "Groups" : "Grupper", + "Teams" : "Teams", + "Federated users" : "Federerade användare", + "New private conversation" : "Ny privat konversation", + "Other sources" : "Andra källor", + "Open conversations" : "Öppna konversationer", + "No search results" : "Inga sökresultat", + "Users, groups and teams" : "Användare, grupper och team", + "Users and groups" : "Användare och grupper", + "Users and teams" : "Användare och team", + "Groups and teams" : "Grupper och team", + "New group conversation" : "Ny gruppkonversation", + "The meeting will start soon" : "Mötet börjar snart", + "This meeting is scheduled for {startTime}" : "Det här mötet är planerat till {startTime}", + "You are currently waiting in the lobby" : "Du väntar för närvarande i lobbyn", + "Enable noise suppression" : "Aktivera brusreducering", + "Reduce background noises for better voice quality" : "Minska bakgrundsljud för bättre ljudkvalitet", + "Enable echo cancellation" : "Aktivera ekoborttagning", + "Minimize echo effect from own surrounding" : "Minimera eko från din omgivning", + "Enable auto gain control" : "Aktivera automatisk ljudnivåjustering", + "Dynamically adjust microphone volume for consistent level" : "Justera mikrofonvolymen dynamiskt för en jämn nivå", + "Select microphone" : "Välj mikrofon", + "No microphone available" : "Ingen mikrofon tillgänglig", + "Select speaker" : "Välj högtalare", + "No speaker available" : "Ingen högtalare tillgänglig", + "Select camera" : "Välj kamera", + "No camera available" : "Ingen kamera tillgänglig", + "Select a device" : "Välj en enhet", + "Playing …" : "Spelar …", + "Test speakers" : "Testa högtalare", + "Test" : "Test", + "Devices" : "Enheter", + "Backgrounds" : "Bakgrunder", + "No audio" : "Inget ljud", + "No camera" : "Ingen kamera", + "Display video as you will see it (mirrored)" : "Visa video som du kommer att se den (speglad)", + "Display video as others will see it" : "Visa video som andra kommer att se den", + "Calls are not supported in your browser" : "Samtal stöds inte i din webbläsare", + "Access to microphone is only possible with HTTPS" : "Åtkomst till mikrofon är endast möjligt via HTTPS", + "Access to microphone was denied" : "Åtkomst till mikrofon nekades", + "Error while accessing microphone" : "Fel vid åtkomst till mikrofon", + "Access to camera is only possible with HTTPS" : "Åtkomst till kamera är endast möjligt via HTTPS", + "The call is being recorded." : "Samtalet spelas in.", + "The call might be recorded." : "Samtalet kan spelas in.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Inspelningen kan innehålla din röst, video från kameran och skärmdelning. Ditt samtycke krävs innan du går med i samtalet.", + "Give consent to the recording of this call" : "Ge samtycke till inspelningen av detta samtal", + "Show more info" : "Visa mer information", + "Audio is not available" : "Ljud är inte tillgängligt", + "Video is not available" : "Video är inte tillgänglig", + "Start recording immediately with the call" : "Börja spela in omedelbart med samtalet", + "Recording backend is not installed" : "Recording-backend är inte installerad", + "Notify all participants about this call" : "Meddela alla deltagare om detta samtal", + "Apply settings" : "Tillämpa inställningar", + "Select virtual office background" : "Välj bakgrund för virtuell kontor", + "Select virtual home background" : "Välj bakgrund för virtuellt hem", + "Select virtual abstract background" : "Välj virtuell abstrakt bakgrund", + "Select virtual beach background" : "Välj virtuell strandbakgrund", + "Select virtual park background" : "Välj virtuell parkbakgrund", + "Select virtual theater background" : "Välj virtuell teaterbakgrund", + "Select virtual library background" : "Välj bakgrund för virtuellt bibliotek", + "Select virtual space station background" : "Välj bakgrund för virtuell rymdstation", + "Error while uploading the file" : "Fel vid uppladdning av fil", + "Select a file" : "Välj en fil", + "Invalid path selected" : "Ogiltig sökväg vald", + "Select virtual background from file {fileName}" : "Välj virtuell bakgrund från fil {fileName}", + "Blur" : "Suddig", + "Upload" : "Ladda upp", + "Files" : "Filer", + "(editing)" : "(redigerar)", + "(edited)" : "(redigerad)", + "The message has expired or has been deleted" : "Meddelandet har löpt ut eller raderats", + "Cancel quote" : "Avbryt citat", + "24 hours" : "24 timmar", + "7 days" : "7 dagar", + "30 days" : "30 dagar", + "Until unpin" : "Tills fästet tas bort", + "Clear reminder – {timeLocale}" : "Rensa påminnelse – {timeLocale}", + "Edited by {actor}" : "Redigerad av {actor}", + "Pinned by you" : "Fäst av dig", + "Pinned by {actor}" : "Fäst av {actor}", + "Until {absoluteDate}" : "Till {absoluteDate}", + "Message text copied to clipboard" : "Meddelandetext har kopierats till urklipp", + "Message text could not be copied" : "Kunde inte kopiera meddelandetexten", + "Message forwarded to \"Note to self\"" : "Meddelande vidarebefordrat till \"Egna anteckningar\"", + "Error while forwarding message to \"Note to self\"" : "Fel vid vidarebefordran av meddelande till \"Egna anteckningar\"", + "A reminder was successfully removed" : "En påminnelse har tagits bort", + "Error occurred when removing a reminder" : "Ett fel uppstod när en påminnelse skulle tas bort", + "A reminder was successfully set at {datetime}" : "En påminnelse har ställts in {datetime}", + "Error occurred when creating a reminder" : "Ett fel uppstod när en påminnelse skapades", + "Add a reaction to this message" : "Lägg till en reaktion till detta meddelande", + "Reply" : "Svara", + "More actions" : "Fler händelser", + "Set reminder" : "Ställ in påminnelse", + "Pin message" : "Fäst meddelande", + "Unpin message" : "Ta bort fäst meddelande", + "Reply privately" : "Svara privat", + "Edit message" : "Redigera meddelande", + "Copy message" : "Kopiera meddelande", + "Copy message link" : "Kopiera meddelandelänk", + "Go to file" : "Gå till fil", + "Download file" : "Ladda ner fil", + "Go to thread" : "Gå till tråd", + "Edit thread details" : "Redigera tråddetaljer", + "Forward message" : "Vidarebefordra meddelande", + "Translate" : "Översätt", + "Set custom reminder" : "Ställ in anpassad påminnelse", + "Keep pinned for" : "Behåll fäst i", + "Set custom period" : "Ange anpassad period", + "Close reactions menu" : "Stäng reaktionsmenyn", + "React with {emoji}" : "Reagera med {emoji}", + "React with another emoji" : "Reagera med en annan emoji", + "Choose a conversation to forward the selected message." : "Välj en konversation för att vidarebefordra det valda meddelandet.", + "Error while forwarding message" : "Fel vid vidarebefordran av meddelande", + "The message has been forwarded to {selectedConversationName}" : "Meddelandet har vidarebefordrats till {selectedConversationName}", + "Dismiss" : "Avfärda", + "Go to conversation" : "Gå till konversation", + "Detect language" : "Upptäck språk", + "The message could not be translated" : "Meddelandet kunde inte översättas", + "Translation copied to clipboard" : "Översättningen har kopierats till urklipp", + "Translation could not be copied" : "Översättningen kunde inte kopieras", + "Translate message" : "Översätt meddelande", + "Source language to translate from" : "Språk att översätta från", + "Translate from" : "Översätt från", + "Target language to translate into" : "Språk att översätta till", + "Translate to" : "Översätt till", + "Translating" : "Översätter", + "This translation is AI generated and may contain mistakes." : "Denna översättning är AI-genererad och kan innehålla fel.", + "Copy translated text" : "Kopiera översatt text", + "Error when scheduling the message" : "Kunde inte schemalägga meddelandet", + "Reschedule" : "Ändra schemaläggning", + "Send now" : "Skicka nu", + "Choose a time" : "Välj en tid", + "Send at custom time" : "Skicka vid anpassad tid", + "Will be sent without notification" : "Kommer att skickas utan avisering", + "Message read by everyone who shares their reading status" : "Meddelandet läst av alla som delar sin lässtatus", + "Message sent" : "Meddelande skickat", + "Sent without notification" : "Skickat utan avisering", + "Deleting message" : "Raderar meddelande", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Meddelandet har raderats, men en bott eller Matterbridge är konfigurerat och meddelandet kanske redan har distribuerats till andra tjänster", + "Message deleted successfully" : "Meddelandet har raderats", + "Message could not be deleted because it is too old" : "Meddelandet kunde inte raderas eftersom det är för gammalt", + "Only normal chat messages can be deleted" : "Endast normala chattmeddelanden kan raderas", + "An error occurred while deleting the message" : "Ett fel uppstod när meddelandet skulle raderas", + "Pinned" : "Fäst", + "Your browser does not support playing audio files" : "Din webbläsare stöder inte uppspelning av ljudfiler", + "Contact" : "Kontakt", + "{stack} in {board}" : "{stack} i {board}", + "Deck Card" : "Deck-kort", + "Remove {fileName}" : "Ta bort {fileName}", + "Open this location in OpenStreetMap" : "Öppna denna plats i OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n svar","%n svar"], + "Sending message" : "Skickar meddelande", + "Failed to send the message. Click to try again" : "Kunde inte skicka meddelandet. Klicka för att försöka igen", + "Not enough free space to upload file" : "Inte tillräckligt med ledigt utrymme för att ladda upp filen", + "You cannot send messages to this conversation at the moment" : "Du kan inte skicka meddelanden till den här konversationen för tillfället", + "Could not update the message" : "Kunde inte uppdatera meddelandet", + "Reply to thread \"{threadTitle}\"" : "Svara i tråd \"{threadTitle}\"", + "_You voted • %n vote_::_You voted • %n votes_" : ["Du röstade • %n röst","Du röstade • %n röster"], + "You voted" : "Du röstade", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Klicka för att rösta • %n röst","Klicka för att rösta • %n röster"], + "Click to vote" : "Klicka för att rösta", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Omröstningsutkast • %n alternativ","Omröstningsutkast • %n alternativ"], + "_%n vote_::_%n votes_" : ["%n röst","%n röster"], + "Edit poll draft" : "Redigera omröstningsutkast", + "Delete poll draft" : "Ta bort utkast till omröstning", + "Open poll" : "Öppna omröstning", + "Closed poll" : "Avslutad omröstning", + "See results" : "Se resultat", + "Reactions" : "Reaktioner", + "No permission to post reactions in this conversation" : "Ingen behörighet att posta reaktioner i denna konversation", + "and {participant}" : "och {participant}", + "_and %n other participant_::_and %n other participants_" : ["och %n annan deltagare","och %n andra deltagare"], + "Show all reactions" : "Visa alla reaktioner", + "Add more reactions" : "Lägg till fler reaktioner", + "Show or collapse system messages" : "Visa eller dölj systemmeddelanden", + "No messages" : "Inga meddelanden", + "All messages have expired or have been deleted." : "Alla meddelanden har löpt ut eller har raderats.", + "Generate summary with AI" : "Skapa en sammanfattning med AI", + "{author} (pinned by you)" : "{author} (fäst av dig)", + "{author} (pinned by {actor})" : "{author} (fäst av {actor})", + "Unpin" : "Lossa", + "Cancel search" : "Avbryt sökning", + "Add a phone number" : "Lägg till ett telefonnummer", + "Error: A password is required to create the conversation." : "Fel: Ett lösenord krävs för att skapa konversationen.", + "All set, the conversation \"{conversationName}\" was created." : "Allt klart, konversationen \"{conversationName}\" skapades.", + "Create a new group conversation" : "Skapa en ny gruppkonversation", + "Add participants" : "Lägg till deltagare", + "Maximum length exceeded ({maxlength} characters)" : "Maximal längd har överskridits ({maxlength} tecken)", + "Conversation type" : "Konversationstyp", + "Conversation visibility" : "Konversationens synlighet", + "Allow guests to join via link" : "Tillåt gäster att ansluta via länk", + "Enter password" : "Ange lösenord", + "This conversation has been locked" : "Den här konversationen har låsts", + "No permission to post messages in this conversation" : "Ingen behörighet att skicka meddelanden i den här konversationen", + "Joining conversation …" : "Går med i konversationen ...", + "Write a message without notification" : "Skriv ett meddelande utan avisering", + "Create a thread silently" : "Skapa en tråd utan avisering", + "Create a thread" : "Skapa en tråd", + "Send message silently" : "Skicka meddelande tyst", + "Send message" : "Skicka meddelande", + "Send without notification" : "Skicka utan avisering", + "The participant will not be notified about new messages" : "Deltagaren kommer inte att meddelas om nya meddelanden", + "Participants will not be notified about new messages" : "Deltagare kommer inte att meddelas om nya meddelanden", + "Message will be sent {datetimeString}" : "Meddelandet kommer att skickas {datetimeString}", + "Thread title is required" : "Trådtitel krävs", + "Message text is required" : "Meddelandetext krävs", + "The message could not be edited" : "Meddelandet kunde inte redigeras", + "File to share" : "Fil att dela", + "File upload is not available in this conversation" : "Filuppladdning är inte tillgängligt i den här konversationen", + "Message was successfully scheduled" : "Meddelandet har schemalagts", + "Add emoji" : "Lägg till emoji", + "Adding a mention will only notify users who did not read the message." : "Om du lägger till ett omnämnande kommer endast användare som inte har läst meddelandet att meddelas.", + "Thread title" : "Trådtitel", + "Send later" : "Skicka senare", + "Show scheduled messages" : "Visa schemalagda meddelanden", + "Cancel editing" : "Avbryt redigering", + "Schedule message" : "Schemalägg meddelande", + "{user} is out of office and might not respond." : "{user} är frånvarande och kanske inte svarar.", + "Absence period: {startDate} - {endDate}" : "Frånvaroperiod: {startDate} - {endDate}", + "Replacement:" : "Ersättning:", + "Share from {nextcloud}" : "Dela från {nextcloud}", + "Share from Files" : "Dela från Filer", + "Share files to the conversation" : "Dela filer till konversationen", + "Upload from device" : "Ladda upp från enheten", + "Create new poll" : "Skapa ny omröstning", + "Smart picker" : "Smart picker", + "Record voice message" : "Spela in röstmeddelande", + "End recording and send" : "Avsluta inspelningen och skicka", + "Dismiss recording" : "Stäng inspelningen", + "Access to the microphone was denied" : "Åtkomst till mikrofon nekades", + "Microphone either not available or disabled in settings" : "Mikrofonen är antingen inte tillgänglig eller inaktiverad i inställningarna", + "Error while recording audio" : "Fel vid inspelning av ljud", + "Voice message {time} ({conversation})" : "Röstmeddelande {time} ({conversation})", + "Generating summary of unread messages …" : "Skapar sammanfattning av olästa meddelanden ...", + "Summary is AI generated and might contain mistakes" : "Sammanfattningen är AI-genererad och kan innehålla misstag", + "Error occurred during a summary generation" : "Ett fel uppstod vid generering av sammanfattning", + "New file" : "Ny fil", + "Blank" : "Tom", + "Error while creating file" : "Fel när filen skapades", + "Create and share a new file" : "Skapa och dela en ny fil", + "Name of the new file" : "Namn på den nya filen", + "Create file" : "Skapa fil", + "Someone is typing …" : "Någon skriver …", + "{user1} is typing …" : "{user1} skriver …", + "{user1} and {user2} are typing …" : "{user1} och {user2} skriver …", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} och {user3} skriver …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} och %n annan skriver …","{user1}, {user2}, {user3} och %n andra skriver …"], + "Add more files" : "Lägg till fler filer", + "Send" : "Skicka", + "In this conversation {user} can:" : "I denna konversation {user} kan:", + "Edit default permissions for participants in {conversationName}" : "Redigera standardbehörigheter för deltagare i {conversationName}", + "Start a call" : "Starta samtal", + "Skip the lobby" : "Hoppa över lobbyn", + "Can post messages" : "Kan skicka meddelanden", + "Can post messages and reactions" : "Kan posta meddelanden och reaktioner", + "Can add reactions" : "Kan lägga till reaktioner", + "Enable the microphone" : "Aktivera mikrofon", + "Enable the camera" : "Aktivera kameran", + "Share the screen" : "Dela skärmen", + "Update permissions" : "Uppdatera behörigheter", + "Updating permissions" : "Uppdaterar behörigheter", + "No poll drafts" : "Inga omröstningsutkast", + "There is no poll drafts yet saved for this conversation" : "Det finns inga omröstningsutkast ännu sparade för den här konversationen", + "Create poll in {name}" : "Skapa omröstning i {name}", + "Create poll" : "Skapa omröstning", + "Error while importing poll" : "Fel vid import av omröstning", + "Question" : "Fråga", + "Ask a question" : "Ställ en fråga", + "Import draft from file" : "Importera utkast från fil", + "Answers" : "Svar", + "Answer {option}" : "Svar {option}", + "Delete poll option" : "Ta bort röstningsalternativ", + "Add answer" : "Lägg till svar", + "Settings" : "Inställningar", + "Anonymous poll" : "Anonym omröstning", + "Multiple answers" : "Flera svar", + "Save as draft" : "Spara som utkast", + "Export draft to file" : "Exportera utkast till fil", + "_Final results • %n vote_::_Final results • %n votes_" : ["Slutresultat • %n röst","Slutresultat • %n röster"], + "Your vote is anonymous" : "Din röst är anonym", + "You voted for this option" : "Du röstade för det här alternativet", + "End poll" : "Avsluta omröstning", + "Change your vote" : "Ändra din röst", + "Withdraw vote" : "Återkalla röst", + "Results" : "Resultat", + "Download as spreadsheet" : "Ladda ned som kalkylblad", + "Download as CSV" : "Ladda ned som CSV", + "Voted participants" : "Röstande deltagare", + "Send a message to \"{roomName}\"" : "Skicka ett meddelande till \"{roomName}\"", + "Hide list of participants" : "Dölj deltagarlistan", + "Show list of participants" : "Visa deltagarlista", + "Assistance requested in {roomName}" : "Hjälp efterfrågas i {roomName}", + "The message was sent to \"{roomName}\"" : "Meddelandet skickades till \"{roomName}\"", + "Dismiss request for assistance" : "Avvisa begäran om hjälp", + "Send message to room" : "Skicka meddelande till rum", + "Back to main room" : "Tillbaka till huvudrum", + "Back to your room" : "Tillbaka till ditt rum", + "Message all rooms" : "Meddelande till alla rum", + "Start session" : "Starta sessionen", + "Start a call before you start a breakout room session" : "Starta ett samtal innan du startar grupprum", + "Stop session" : "Stoppa sessionen", + "The message was sent to all breakout rooms" : "Meddelandet skickades till alla grupprum", + "Send a message to all breakout rooms" : "Skicka ett meddelande till alla grupprum", + "Breakout rooms are not started" : "Grupprum är inte startade", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Samtal utan High-performance backend kan orsaka anslutningsproblem och hög belastning på enheter. {linkstart}Läs mer{linkend}", + "Talk setup incomplete" : "Talk-installationen är inte klar", + "Disable lobby" : "Inaktivera lobbyn", + "Settings for participant \"{user}\"" : "Inställningar för deltagare \"{user}\"", + "Participant \"{user}\"" : "Deltagare \"{user}\"", + "moderator" : "moderator", + "bot" : "bott", + "guest" : "gäst", + "Ringing …" : "Ringer …", + "Call rejected" : "Samtal avvisades", + "{time} talking …" : "{time} pratar …", + "{time} talking time" : "{time} samtalstid", + "Raised their hand" : "Räckte upp handen", + "Joined with video" : "Anslöt med video", + "Joined via phone" : "Anslöt via telefon", + "Joined with audio" : "Anslöt med ljud", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Texten måste vara mindre än eller lika med {maxLength} tecken lång. Din text är {charactersCount} tecken lång.", + "Remove group and members" : "Ta bort grupp och medlemmar", + "Remove team and members" : "Ta bort team och medlemmar", + "Remove participant" : "Ta bort deltagare", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Vill du verkligen ta bort gruppen \"{displayName}\" och dess medlemmar från denna konversation?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Vill du verkligen ta bort team \"{displayName}\" och dess medlemmar från denna konversation?", + "Do you really want to remove {displayName} from this conversation?" : "Vill du verkligen ta bort {displayName} från denna konversation?", + "Notification was sent to {displayName}" : "Notifiering skickades till {displayName}", + "Could not send notification to {displayName}" : "Kunde inte skicka notifiering till {displayName}", + "Permissions granted to {displayName}" : "Behörighet beviljad till {displayName}", + "Could not modify permissions for {displayName}" : "Kunde inte ändra behörigheter för {displayName}", + "Permissions removed for {displayName}" : "Behörigheter har tagits bort för {displayName}", + "Permissions set to default for {displayName}" : "Behörigheter inställda på standard för {displayName}", + "Phone number could not be hung up" : "Det gick inte att lägga på telefonnumret", + "Phone number could not be put on hold" : "Telefonnumret kunde inte parkeras", + "Phone number could not be muted" : "Telefonnumret kunde inte tystas", + "Phone number could not be unmuted" : "Kunde inte aktivera ljudet för telefonnummer", + "DTMF message could not be sent" : "DTMF-meddelande kunde inte skickas", + "Phone number copied to clipboard" : "Telefonnumret har kopierats till urklipp", + "Phone number could not be copied" : "Telefonnumret kunde inte kopieras", + "in the lobby" : "i lobbyn", + "Dial out phone" : "Telefon för att ringa ut", + "Hang up phone" : "Lägg på telefon", + "Move back to lobby" : "Gå tillbaka till lobbyn", + "Move to conversation" : "Flytta till konversation", + "Dial-in PIN" : "PIN-kod för uppringning", + "Demote from moderator" : "Degradera från moderator", + "Promote to moderator" : "Befordra till moderator", + "Resend invitation" : "Skicka inbjudning igen", + "Send call notification" : "Skicka samtalsavisering", + "Dial out phone number" : "Telefonnummer för att ringa ut", + "Resume call for phone number" : "Återuppta samtal för telefonnummer", + "Put phone number on hold" : "Parkera telefonnummer", + "Unmute phone number" : "Aktivera ljud för telefonnummer", + "Mute phone number" : "Tysta telefonnummer", + "Copy phone number" : "Kopiera telefonnummer", + "Reset custom permissions" : "Återställ anpassade behörigheter", + "Grant all permissions" : "Tilldela alla behörigheter", + "Remove all permissions" : "Ta bort alla behörigheter", + "Also ban from this conversation" : "Blockera även från denna konversation", + "Internal note (reason to ban)" : "Intern anteckning (anledning till blockering)", + "Remove" : "Ta bort", + "Permissions modified for {displayName}" : "Behörigheter har ändrats för {displayName}", + "Add users, groups or teams" : "Lägg till användare, grupper eller team", + "Add users or groups" : "Lägg till användare eller grupper", + "Add users or teams" : "Lägg till användare eller team", + "Add users" : "Lägg till användare", + "Add groups or teams" : "Lägg till grupper eller team", + "Add groups" : "Lägg till grupper", + "Add teams" : "Lägg till team", + "Add other sources" : "Lägg till andra källor", + "Add emails" : "Lägg till e-post", + "Integrations" : "Integrationer", + "Add federated users" : "Lägg till federerade användare", + "Searching …" : "Söker ...", + "Search for more users" : "Sök efter fler användare", + "You can search or add participants via name, email, or Federated Cloud ID" : "Du kan söka eller lägga till deltagare via namn, e-post eller federerat Moln-ID", + "Search or add participants" : "Sök eller lägg till deltagare", + "Invitation was sent to {actorId}" : "Inbjudan har skickats till {actorId}", + "An error occurred while adding the participants" : "Ett fel uppstod när deltagarna skulle läggas till", + "A new group conversation with selected participant will be created" : "En ny gruppkonversation med vald deltagare kommer att skapas", + "Participants" : "Deltagare", + "Pinned by a deleted user" : "Fäst av en borttagen användare", + "Participants ({count})" : "Deltagare ({count})", + "Open chat" : "Öppna chatt", + "You have new unread messages in the chat." : "Du har nya olästa meddelanden i chatten.", + "You have been mentioned in the chat." : "Du har blivit omnämnd i chatten.", + "Search messages" : "Sök meddelanden", + "Chat" : "Chatt", + "Details" : "Detaljer", + "Shared items" : "Delade objekt", + "Search in {name}" : "Sök i {name}", + "Threads in {name}" : "Trådar i {name}", + "{actor} in {conversation}" : "{actor} i {conversation}", + "Search messages …" : "Sök meddelanden …", + "Search options" : "Sökalternativ", + "From User" : "Från användare", + "Since" : "Sedan", + "Until" : "Till", + "No results found" : "Inga resultat funna", + "Load more results" : "Visa fler resultat", + "Recent threads" : "Senaste trådar", + "Projects" : "Projekt", + "No shared items" : "Inga delade objekt", + "Thread notifications" : "Trådaviseringar", + "Thread actions" : "Trådåtgärder", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Länka till en konversation", + "No open conversations found" : "Inga öppna konversationer hittades", + "Either there are no open conversations or you joined all of them." : "Antingen finns det inga öppna konversationer eller så gick du med i alla.", + "Check spelling or use complete words." : "Kontrollera stavningen eller använd fullständiga ord.", + "Search conversations or users" : "Sök konversationer eller användare", + "Select conversation" : "Välj konversation", + "Number length is not valid" : "Sifferlängden är inte giltig", + "Region code is not valid" : "Regionkoden är ogiltig", + "Number length is too short" : "Sifferlängden är för kort", + "Number length is too long" : "Sifferlängden är för lång", + "Number is not valid" : "Numret är inte giltigt", + "Phone numbers" : "Telefonnummer", + "Display name: {name}" : "Visningsnamn: {name}", + "Edit display name" : "Ändra visningsnamn", + "Display name (required)" : "Visningsnamn (obligatoriskt)", + "Save name" : "Spara namn", + "I picked message bubbles" : "Jag valde meddelandebubblor", + "I picked the list style" : "Jag valde listvy", + "Error while setting personal setting" : "Fel vid inställning av personlig inställning", + "Error while saving sounds setting" : "Fel när ljudinställningen skulle sparas", + "Compact conversations list" : "Kompakt konversationslista", + "Chat appearance" : "Chattutseende", + "Messages list" : "Meddelandelista", + "Message bubbles" : "Meddelandebubblor", + "Play sounds when participants join or leave a call" : "Spela upp ljud när deltagare går med eller lämnar ett samtal", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "För närvarande inte tillgängligt på iPhone och iPad på grund av tekniska begränsningar från tillverkaren", + "Notification settings" : "Aviseringsinställningar", + "Sounds for chat and call notifications" : "Ljud för chatt och samtalsaviseringar", + "Invalid language ({languageId})" : "Ogiltigt språk ({languageId})", + "Default language" : "Standardspråk", + "Default language ({languageName})" : "Standardspråk ({languageName})", + "Error when trying to load the available live translation languages" : "Fel vid försök att läsa in tillgängliga språk för live-översättning", + "Error when trying to set live translation language" : "Fel vid försök att ställa in språk för live-översättning", + "Set language used to show the transcriptions" : "Ange språk för visning av transkriberingar", + "Select location for attachments" : "Välj plats för bilagor", + "Error while setting attachment folder" : "Fel vid inställning av mapp för bilagor", + "Error while setting read status privacy" : "Fel vid inställning av sekretess för lässtatus", + "Error while setting typing status privacy" : "Fel vid inställning av sekretess för skrivstatus", + "Error while setting default media state" : "Fel vid inställning av standard för mediastatus", + "Turn camera and microphone off by default" : "Stäng av kamera och mikrofon som standard", + "Blur camera background by default" : "Gör kamerabakgrunden suddig som standard", + "Skip device preview before joining a call" : "Hoppa över enhetsförhandsvisning innan du går med i ett samtal", + "Camera will be turned off when joining. Always shown if recording consent is required." : "Kameran stängs av vid anslutning. Visas alltid om samtycke till inspelning krävs.", + "Appearance & Sounds" : "Utseende och ljud", + "Privacy" : "Integritet", + "Send read receipts" : "Skicka läskvitton", + "When off, all read statuses will be hidden" : "När avstängd döljs alla lässtatusar", + "Share typing status" : "Dela skrivstatus", + "When off, all typing indicators will be hidden" : "När avstängd döljs alla skrivindikatorer", + "Attachments folder" : "Mapp för bilagor", + "Toggle full screen" : "Växla fullskärm", + "Return to Home screen" : "Återgå till hemskärmen", + "Search" : "Sök", + "Shortcuts while in a chat" : "Genvägar i en chatt", + "Focus the chat input" : "Fokusera på chattinmatningen", + "Unfocus the chat input to use shortcuts" : "Avfokusera chattinmatningen för att använda genvägar", + "Edit your last message" : "Redigera ditt senaste meddelande", + "Shortcuts while in a call" : "Genvägar under ett samtal", + "Camera on and off" : "Kamera på och av", + "Microphone on and off" : "Mikrofon på och av", + "Raise or lower hand" : "Räck upp eller ta ner handen", + "Push to talk or push to mute" : "Tryck för att prata eller tryck för att tysta", + "Zoom-in / zoom-out a screen share" : "Zooma in / zooma ut en skärmdelning", + "Mouse wheel" : "Mushjul", + "Start call silently" : "Starta samtal tyst", + "Start call" : "Starta samtal", + "End call" : "Avsluta samtal", + "The server was updated, you cannot start or join a call." : "Servern har uppdaterats, du kan inte starta eller gå med i ett samtal.", + "This call has just ended" : "Detta samtal har just avslutats", + "You will be able to join the call only after a moderator starts it." : "Du kommer att kunna gå med i samtalet först när en moderator startar det.", + "End call for everyone" : "Avsluta samtal för alla", + "Starting the recording" : "Starta inspelningen", + "Recording" : "Inspelning", + "The call has been running for one hour." : "Samtalet har pågått i en timme.", + "Cancel recording start" : "Avbryt start av inspelning", + "Stop recording" : "Stoppa inspelning", + "Send a reaction" : "Skicka en reaktion", + "React with {reaction}" : "Reagera med {reaction}", + "All tasks done!" : "Alla uppgifter är klara!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} av %n uppgift","{done} av %n uppgifter"], + "Add participants to this call" : "Lägg till deltagare i det här samtalet", + "_%n participant in call_::_%n participants in call_" : ["%n deltagare i samtalet","%n deltagare i samtalet"], + "Scheduled messages" : "Schemalagda meddelanden", + "You are not allowed to enable screensharing" : "Du får inte aktivera skärmdelning", + "No screensharing" : "Ingen skärmdelning", + "Screensharing options" : "Skärmdelningsalternativ", + "Enable screensharing" : "Tillåt skärmdelning", + "Bad sent video and screen quality." : "Dålig skickad video och skärmkvalitet.", + "Bad sent screen quality." : "Dålig skickad skärmkvalitet.", + "Bad sent video quality." : "Dålig skickad videokvalitet.", + "Bad sent audio, video and screen quality." : "Dålig skickad ljud-, video- och skärmkvalitet.", + "Bad sent audio and screen quality." : "Dålig skickat ljud och skärmkvalitet.", + "Bad sent audio and video quality." : "Dålig skickad ljud- och videokvalitet.", + "Bad sent audio quality." : "Dålig skickad ljudkvalitet.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera medan du gör en skärmdelning.", + "Disable background blur" : "Inaktivera suddig bakgrund", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm. För att förbättra situationen försök att inaktivera din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se din skärm.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan se dig.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera din kamera medan du gör en skärmdelning.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå dig och se din skärm. För att förbättra situationen försök att inaktivera din skärmdelning.", + "Disable screenshare" : "Inaktivera skärmdelning", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera suddig bakgrund eller din kamera.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå eller se dig. För att förbättra situationen försök att inaktivera din kamera.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Din internetanslutning eller dator är upptagen och andra deltagare kanske inte kan förstå dig.", + "Screen sharing is not supported by your browser." : "Skärmdelning stöds inte av din webbläsare.", + "Screen sharing requires the page to be loaded through HTTPS." : "Skärmdelning kräver att sidan läses in via HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Skärmdelning kräver HTTPS", + "An error occurred while starting screensharing." : "Ett fel uppstod vid skärmdelning.", + "Select virtual background" : "Välj virtuell bakgrund", + "Show your screen" : "Visa din skärm", + "Stop screensharing" : "Stoppa skärmdelning", + "Mute others" : "Tysta andra", + "Start recording" : "Starta inspelning", + "Set up breakout rooms" : "Ställ in grupprum", + "Download attendance list" : "Ladda ner deltagarlista", + "Open Calendar" : "Öppna kalender", + "Remove participant {name}" : "Ta bort deltagare {name}", + "Would you like to delete this conversation?" : "Vill du ta bort den här konversationen?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Den här konversationen kommer automatiskt att tas bort för alla efter %n dag utan aktivitet.","Den här konversationen kommer automatiskt att tas bort för alla efter %n dagar utan aktivitet."], + "Are you sure you want to delete this conversation?" : "Är du säker på att du vill ta bort den här konversationen?", + "Delete now" : "Ta bort nu", + "Keep" : "Behåll", + "Open dialpad" : "Öppna knappsatsen", + "Select a region" : "Välj en region", + "Local time: {time}" : "Lokal tid: {time}", + "Scheduled {datetime}" : "Schemalagd {datetime}", + "Scheduled for {datetime}" : "Schemalagd till {datetime}", + "Search …" : "Sök ...", + "Message without mention" : "Meddelande utan omnämnande", + "Mention myself" : "Nämn mig själv", + "Mention everyone" : "Nämn alla", + "Select a conversation" : "Välj en konversation", + "Select a mode" : "Välj ett läge", + "You do not have permissions to access this conversation." : "Du har inte behörighet att komma åt den här konversationen.", + "Join a different conversation or start a new one." : "Gå med i en annan konversation eller starta en ny.", + "The conversation does not exist" : "Konversationen finns inte", + "Join a conversation or start a new one!" : "Anslut till en konversation eller starta en ny!", + "Duplicate session" : "Duplicerade sessioner", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Den här konversationen har öppnats i en annan flik. Den aktuella serverversionen stöder inte att öppna en konversation i flera flikar.", + "Creating and joining a conversation with \"{userid}\"" : "Skapar och går med i en konversation med \"{userid}\"", + "Join a conversation or start a new one" : "Anslut till en konversation eller starta en ny", + "Error while joining the conversation" : "Kunde inte gå med i konversationen", + "Another user" : "En annan användare", + "Hey! Are you using the list style or message bubbles?" : "Hej! Använder du listvy eller meddelandebubblor?", + "Nextcloud URL" : "Nextcloud-URL", + "Nextcloud user" : "Nextcloud-användare", + "User password" : "Användarlösenord", + "Talk conversation" : "Talk-konversation", + "Skip TLS verification" : "Skippa TLS-verifiering", + "Matrix server URL" : "Matrix server-URL", + "User" : "Användare", + "Matrix channel" : "Matrix-kanal", + "Mattermost server URL" : "Mattermost server-URL", + "Mattermost user" : "Mattermost-användare", + "Team name" : "Namn på team", + "Channel name" : "Kanalnamn", + "Rocket.Chat server URL" : "Rocket.Chat server-URL", + "User name or email address" : "Användarnamn eller e-postadress", + "Rocket.Chat channel" : "Rocket.Chatt-kanal", + "Zulip server URL" : "Zulip server-URL", + "Bot user name" : "Bott användarnamn", + "Bot API key" : "Bott API-nyckel", + "Zulip channel" : "Zulip kanal", + "API token" : "API-token", + "Slack channel" : "Slack-kanal", + "Server ID or name" : "Server-ID eller namn", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal-ID (med prefixet \"ID:\") eller namn", + "Channel" : "Kanal", + "Login" : "Logga in", + "Chat ID" : "Chatt-ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC server-URL (t.ex. chat.freenode.net:6667)", + "Nickname" : "Smeknamn", + "Connection password" : "Anslutningslösenord", + "IRC channel" : "IRC-kanal", + "Channel password" : "Kanallösenord", + "NickServ nickname" : "NickServ smeknamn", + "NickServ password" : "NickServ lösenord", + "Use TLS" : "Använd TLS", + "Use SASL" : "Använd SASL", + "Tenant ID" : "Tenant-ID", + "Client ID" : "Klient-ID", + "Team ID" : "Team-ID", + "Thread ID" : "Tråd-ID", + "XMPP/Jabber server URL" : "XMPP/Jabber server-URL", + "MUC server URL" : "MUC server-URL", + "Jabber ID" : "Jabber-id", + "Pinned messages" : "Fästa meddelanden", + "Media" : "Media", + "Polls" : "Omröstningar", + "Deck cards" : "Deck-kort", + "Voice messages" : "Röstmeddelanden", + "Locations" : "Platser", + "Call recordings" : "Samtalsinspelningar", + "Audio" : "Ljud", + "Show all pinned messages" : "Visa alla fästa meddelanden", + "Show all media" : "Visa alla media", + "Show all files" : "Visa alla filer", + "Show all polls" : "Visa alla omröstningar", + "Show all deck cards" : "Visa alla Deck-kort", + "Show all voice messages" : "Visa alla röstmeddelanden", + "Show all locations" : "Visa alla platser", + "Show all call recordings" : "Visa alla samtalsinspelningar", + "Show all audio" : "Visa allt ljud", + "Show all other" : "Visa alla andra", + "Follow conversation settings" : "Följ konversationsinställningar", + "Group" : "Grupp", + "Team" : "Team", + "You reconnected to the call" : "Du återanslöt till samtalet", + "{actor} reconnected to the call" : "{actor} återanslöt till samtalet", + "You added {user0} and {user1}" : "Du lade till {user0} och {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Du lade till {user0}, {user1} och %n mer deltagare","Du lade till {user0}, {user1} och %n fler deltagare"], + "An administrator added you and {user0}" : "En administratör lade till dig och {user0}", + "{actor} added you and {user0}" : "{actor} lade till dig och {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["En administratör lade till dig, {user0} och %n mer deltagare","En administratör lade till dig, {user0} och %n fler deltagare"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} lade till dig, {user0} och %n mer deltagare","{actor} lade till dig, {user0} och %n fler deltagare"], + "An administrator added {user0} and {user1}" : "En administratör lade till {user0} och {user1}", + "{actor} added {user0} and {user1}" : "{actor} lade till {user0} och {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["En administratör lade till {user0}, {user1} och %n mer deltagare","En administratör lade till {user0}, {user1} och %n fler deltagare"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} lade till {user0}, {user1} och %n mer deltagare","{actor} lade till {user0}, {user1} och %n fler deltagare"], + "You removed {user0} and {user1}" : "Du tog bort {user0} och {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Du tog bort {user0}, {user1} och %n mer deltagare","Du tog bort {user0}, {user1} och %n fler deltagare"], + "An administrator removed you and {user0}" : "En administratör tog bort dig och {user0}", + "{actor} removed you and {user0}" : "{actor} tog bort dig och {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["En administratör tog bort dig, {user0} och %n mer deltagare","En administratör tog bort dig, {user0} och %n fler deltagare"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} tog bort dig, {user0} och %n mer deltagare","{actor} tog bort dig, {user0} och %n fler deltagare"], + "An administrator removed {user0} and {user1}" : "En administratör tog bort {user0} och {user1}", + "{actor} removed {user0} and {user1}" : "{actor} tog bort {user0} och {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["En administratör tog bort {user0}, {user1} och %n mer deltagare","En administratör tog bort {user0}, {user1} och %n fler deltagare"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} tog bort {user0}, {user1} och %n mer deltagare","{actor} tog bort {user0}, {user1} och %n fler deltagare"], + "You and {user0} joined the call" : "Du och {user0} gick med i samtalet", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Du, {user0} och %n mer deltagare gick med i samtalet","Du, {user0} och %n fler deltagare gick med i samtalet"], + "{user0} and {user1} joined the call" : "{user0} och {user1} gick med i samtalet", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} och %n mer deltagare gick med i samtalet","{user0}, {user1} och %n fler deltagare gick med i samtalet"], + "You and {user0} left the call" : "Du och {user0} lämnade samtalet", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Du, {user0} och %n mer deltagare lämnade samtalet","Du, {user0} och %n fler deltagare lämnade samtalet"], + "{user0} and {user1} left the call" : "{user0} och {user1} lämnade samtalet", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} och %n mer deltagare lämnade samtalet","{user0}, {user1} och %n fler deltagare lämnade samtalet"], + "You promoted {user0} and {user1} to moderators" : "Du befordrade {user0} och {user1} till moderatorer", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Du befordrade {user0}, {user1} och %n mer deltagare till moderatorer","Du befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "An administrator promoted you and {user0} to moderators" : "En administratör befordrade dig och {user0} till moderatorer", + "{actor} promoted you and {user0} to moderators" : "{actor} befordrade dig och {user0} till moderatorer", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["En administratör befordrade dig, {user0} och %n mer deltagare till moderatorer","En administratör befordrade dig, {user0} och %n fler deltagare till moderatorer"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} befordrade dig, {user0} och %n mer deltagare till moderatorer","{actor} befordrade dig, {user0} och %n fler deltagare till moderatorer"], + "An administrator promoted {user0} and {user1} to moderators" : "En administratör befordrade {user0} och {user1} till moderatorer", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} befordrade {user0} och {user1} till moderatorer", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["En administratör befordrade {user0}, {user1} och %n mer deltagare till moderatorer","En administratör befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} befordrade {user0}, {user1} och %n mer deltagare till moderatorer","{actor} befordrade {user0}, {user1} och %n fler deltagare till moderatorer"], + "You demoted {user0} and {user1} from moderators" : "Du degraderade {user0} och {user1} från moderatorer", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Du degraderade {user0}, {user1} och %n mer deltagare från moderatorer","Du degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "An administrator demoted you and {user0} from moderators" : "En administratör degraderade dig och {user0} från moderatorer", + "{actor} demoted you and {user0} from moderators" : "{actor} degraderade dig och {user0} från moderatorer", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["En administratör degraderade dig, {user0} och %n mer deltagare från moderatorer","En administratör degraderade dig, {user0} och %n fler deltagare från moderatorer"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} degraderade dig, {user0} och %n mer deltagare från moderatorer","{actor} degraderade dig, {user0} och %n fler deltagare från moderatorer"], + "An administrator demoted {user0} and {user1} from moderators" : "En administratör degraderade {user0} och {user1} från moderatorer", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} degraderade {user0} och {user1} från moderatorer", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["En administratör degraderade {user0}, {user1} och %n mer deltagare från moderatorer","En administratör degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} degraderade {user0}, {user1} och %n till deltagare från moderatorer","{actor} degraderade {user0}, {user1} och %n fler deltagare från moderatorer"], + "You:" : "Du:", + "You: {lastMessage}" : "Du: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Servern har uppdaterats.", + "(edited by you)" : "(redigerad av dig)", + "(edited by a deleted user)" : "(redigerad av en borttagen användare)", + "(edited by {moderator})" : "(redigerad av {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Du försöker gå med i en konversation medan du har en aktiv session i ett annat fönster eller en annan enhet. Detta stöds för närvarande inte av Nextcloud Talk. Vad vill du göra?", + "Leave this page" : "Lämna denna sida", + "Join here" : "Gå med här", + "Deck card has been posted to {conversation}" : "Deck-kort har skickats till {conversation}", + "An error occurred while posting deck card to conversation" : "Ett fel uppstod när Deck-kortet skulle publiceras i konversationen", + "Post to a conversation" : "Publicera i en konversation", + "Post to conversation" : "Skicka till konversation", + "The recording failed. Please contact your administrator." : "Samtalsinspelning misslyckades. Kontakta din administratör.", + "Location has been posted to {conversation}" : "Plats har skickats till {conversation}", + "An error occurred while posting location to conversation" : "Ett fel uppstod när platsen skulle publiceras i konversationen", + "Share to a conversation" : "Dela till en konversation", + "Share to conversation" : "Dela till konversation", + "In conversation" : "I konversation", + "Search in conversation: {conversation}" : "Sök i konversation: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Dina förfrågningar fördröjs för tillfället på grund av brute force-skydd", + "Error while clearing conversation history" : "Kunde inte rensa konversationshistorik", + "Error occurred while allowing guests" : "Ett fel uppstod när gäster skulle tillåtas", + "Error occurred while disallowing guests" : "Ett fel uppstod vid avvisning av gäster", + "Error occurred when restricting the conversation to moderator" : "Ett fel uppstod när konversationen begränsades till moderator", + "Error occurred when opening the conversation to everyone" : "Ett fel uppstod när konversationen öppnades för alla", + "Conversation password has been saved" : "Lösenordet för konversationen har sparats", + "Conversation password has been removed" : "Lösenordet för konversationen har tagits bort", + "Error occurred while saving conversation password" : "Ett fel uppstod när lösenordet för konversationen skulle sparas", + "Call recording is starting." : "Samtalsinspelning startar.", + "Call recording stopped while starting." : "Samtalsinspelning stoppades vid start.", + "Call recording stopped. You will be notified once the recording is available." : "Samtalsinspelning stoppad. Du kommer att meddelas när inspelningen är tillgänglig.", + "Conversation picture set" : "Konversationsbild inställd", + "Conversation picture deleted" : "Konversationsbild raderad", + "Could not delete the conversation picture" : "Kunde inte ta bort konversationsbilden", + "Could not remove the automatic expiration" : "Kunde inte ta bort den automatiska utgången", + "Could not post message: {errorMessage}" : "Kunde inte skicka meddelandet: {errorMessage}", + "Participant is banned successfully" : "Deltagaren har blockerats", + "Error while banning the participant" : "Fel vid blockering av deltagaren", + "An error occurred while fetching the participants" : "Ett fel uppstod när deltagarna hämtades", + "Could not send invitation to {actorId}" : "Kunde inte skicka inbjudan till {actorId}", + "Invitations sent" : "Inbjudningar skickade", + "Error occurred when sending invitations" : "Ett fel uppstod när inbjudningar skickades", + "Failed to join the conversation." : "Det gick inte att gå med i konversationen.", + "An error occurred while creating breakout rooms" : "Ett fel uppstod när grupprum skapades", + "An error occurred while re-ordering the attendees" : "Ett fel uppstod när deltagarna skulle ordnas om", + "An error occurred while deleting breakout rooms" : "Ett fel uppstod när grupprum skulle raderas", + "An error occurred while starting breakout rooms" : "Ett fel uppstod när grupprum skulle startas", + "An error occurred while stopping breakout rooms" : "Ett fel uppstod när grupprum skulle stoppas", + "An error occurred while sending a message to the breakout rooms" : "Ett fel uppstod när ett meddelande skickades till grupprummen", + "An error occurred while requesting assistance" : "Ett fel uppstod vid begäran om hjälp", + "An error occurred while resetting the request for assistance" : "Ett fel uppstod när begäran om hjälp återställdes", + "An error occurred while joining breakout room" : "Ett fel uppstod när du gick med i grupprummet", + "Failed to rename the thread" : "Kunde inte byta namn på tråd", + "Error fetching upcoming events" : "Kunde inte hämta kommande händelser", + "Error fetching upcoming reminders" : "Kunde inte hämta kommande påminnelser", + "An error occurred while accepting an invitation" : "Ett fel uppstod när en inbjudan skulle accepteras", + "An error occurred while rejecting an invitation" : "Ett fel uppstod när en inbjudan skulle avvisas", + "{guest} (guest)" : "{guest} (gäst)", + "Poll draft has been saved" : "Omröstningsutkast sparat", + "An error occurred while saving the draft" : "Ett fel uppstod när utkastet skulle sparas", + "An error occurred while submitting your vote" : "Ett fel uppstod när din röst skulle skickas", + "An error occurred while ending the poll" : "Ett fel uppstod när omröstningen stoppades", + "An error occurred while deleting the poll draft" : "Ett fel uppstod när utkastet till omröstningen skulle raderas", + "Poll \"{name}\" was created by {user}. Click to vote" : "Omröstningen \"{name}\" skapades av {user}. Klicka för att rösta", + "Failed to add reaction" : "Kunde inte lägga till reaktion", + "Failed to remove reaction" : "Kunde inte ta bort reaktionen", + "The server is in maintenance mode." : "Servern är i underhållsläge.", + "Federated server was updated." : "Den federerade servern har uppdaterats.", + "Error while uploading file \"{fileName}\"" : "Fel vid uppladdning av fil \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Inte tillräckligt med ledigt utrymme för att ladda upp filen \"{fileName}\"", + "You are not allowed to share files" : "Du tillåẗs inte dela filer", + "Error while sharing file" : "Fel vid delning av fil", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Webbläsaren du använder stöds inte fullt ut av Nextcloud Talk. Använd den senaste versionen av Mozilla Firefox, Microsoft Edge, Google Chrome eller Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Om %n timme","Om %n timmar"], + "_%n minute _::_%n minutes_" : ["%n minut","%n minuter"], + "In {hours} and {minutes}" : "Om {hours} och {minutes}", + "_In %n minute_::_In %n minutes_" : ["Om %n minut","Om %n minuter"], + "Later today – {timeLocale}" : "Senare idag – {timeLocale}", + "Set time for later today" : "Välj tid senare idag", + "Tomorrow – {timeLocale}" : "Imorgon – {timeLocale}", + "Set time for tomorrow" : "Välj tid i morgon", + "This weekend – {timeLocale}" : "Den här helgen – {timeLocale}", + "Set time for this weekend" : "Välj tid i helgen", + "Next week – {timeLocale}" : "Nästa vecka – {timeLocale}", + "Set time for next week" : "Välj tid nästa vecka", + "Message link copied to clipboard" : "Meddelandelänk kopierad till urklipp", + "Conversation link copied to clipboard" : "Konversationslänk kopierad till urklipp", + "The link could not be copied" : "Länken kunde inte kopieras", + "Error while parsing a PROPFIND error" : "Fel vid analys av ett PROPFIND-fel", + "Sending signaling message has failed" : "Misslyckades skicka signalmeddelande", + "Lost connection to signaling server. Trying to reconnect." : "Förlorade anslutningen till signalservern. Försöker ansluta igen.", + "Lost connection to signaling server." : "Anslutningen till signalservern förlorades.", + "Connecting is taking longer than expected …" : "Anslutningen tar längre tid än förväntat …", + "Failed to connect. Retrying …" : "Kunde inte ansluta. Försöker igen …", + "Failed to connect. The signaling server may be set up incorrectly" : "Kunde inte ansluta. Signalservern kan vara felkonfigurerad", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Den konfigurerade signalservern måste uppdateras för att vara kompatibel med den här versionen av Talk. Kontakta din administratör.", + "Please restart the app." : "Starta om appen.", + "Please reload the page." : "Uppdatera sidan.", + "Please try to restart the app." : "Försök att starta om appen.", + "Please try to reload the page." : "Försök att ladda om sidan.", + "Do not disturb" : "Stör ej", + "Away" : "Borta", + "Microphone {number}" : "Mikrofon {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Högtalare {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Du verkar prata med avstängd mikrofon, sätt på mikrofonen för att andra ska höra dig", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Det gick inte att upprätta en anslutning med minst en deltagare. En TURN-server kan behövas för ditt scenario. Be din administratör att ställa in en med hjälp av {linkstart}den här dokumentationen{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Det tar längre tid än väntat. Har mediarättigheter redan beviljats (eller avvisats)? Om ja, starta om din webbläsare, eftersom ljud och video misslyckas", + "Access to microphone & camera is only possible with HTTPS" : "Åtkomst till mikrofon och kamera är endast möjligt via HTTPS", + "Please move your setup to HTTPS" : "Vänligen flytta din inställning till HTTPS", + "Access to microphone & camera was denied" : "Åtkomst till mikrofon och kamera nekades", + "WebRTC is not supported in your browser" : "WebRTC är inte kompatibelt med din webbläsare", + "Please use a different browser like Firefox or Chrome" : "Vänligen använd en annan webbläsare som t.ex Firefox eller Chrome", + "Error while accessing microphone & camera" : "Fel vid åtkomst till mikrofon och kamera", + "%s Talk on your mobile devices" : "%s Talk på dina mobila enheter", + "Join conversations at any time, anywhere, on any device." : "Gå med i konversationer när som helst, var som helst, på alla enheter.", + "Android app" : "Android-app", + "iOS app" : " iOS-app", + "__language_name__" : "Svenska", + "Webhook Demo" : "Webhook-demo", + "Call summary (%s)" : "Samtalssammanfattning (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Samtalssammanfattningsboten publicerar ett översiktsmeddelande efter samtalet med en lista över alla deltagare och uppgifter", + "Tasks" : "Uppgifter", + "Notes" : "Anteckning", + "Reports" : "Rapporter", + "Decisions" : "Beslut", + "Agenda" : "Agenda", + "Call summary" : "Samtalssammanfattning", + "Call summary - {title}" : "Samtalssammanfattning - {title}", + "Talk conversation for event" : "Talk-konversation för händelse", + "Client Push is installed, this improves the performance of desktop clients." : "Klient-Push är installerat, detta förbättrar prestandan för skrivbordsklienter.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} är inte installerat, detta kan leda till prestandaproblem vid användning av skrivbordsklienter.", + "Next meeting" : "Nästa möte", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Schemalägg ett möte från din kalender. En Talk-konversation måste anges som plats för att visas här", + "Join conversations from remote Nextcloud servers" : "Gå med i konversationer från fjärranslutna Nextcloud-servrar", + "Your default media state has been saved" : "Din standard för mediastatus har sparats", + "Set reminder for later today" : "Ställ in påminnelse för senare idag", + "Set reminder for tomorrow" : "Ställ in påminnelse för imorgon", + "Set reminder for this weekend" : "Ställ in påminnelse för denna helg", + "Set reminder for next week" : "Ställ in påminnelse för nästa vecka", + "Generate summary" : "Skapa en sammanfattning", + "Open poll • You voted already" : "Öppna omröstning • Du har redan röstat", + "Open poll • Click to vote" : "Öppna omröstning • Klicka för att rösta", + "Poll • Ended" : "Omröstning • Avslutad", + "Talk recording from {time} ({conversation})" : "Talk-inspelning från {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Omröstningsresultat • %n röst","Omröstningsresultat • %n röster"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Öppna omröstning • %n röst","Öppna omröstning • %n röster"], + "Submit vote" : "Skicka in röst", + "Your privacy setting has been saved" : "Din integritetsinställning har sparats", + "Your personal setting has been saved" : "Din personliga inställning har sparats", + "Failed to save sounds setting" : "Det gick inte att spara ljudinställningen", + "Sounds setting saved" : "Ljudinställningen sparad", + "Always shown if recording consent is required" : "Visas alltid om samtycke till inspelning krävs", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk har uppdaterats, du kan inte starta eller gå med i ett samtal.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Du gick med i konversationen i ett annat fönster eller en annan enhet. Detta stöds för närvarande inte av Nextcloud Talk så denna session stängdes.", + "Nextcloud Talk was updated." : "Nextcloud Talk har uppdaterats.", + "Nextcloud is in maintenance mode." : "Nextcloud är i underhållsläge.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation har uppdaterats.", + "Enable live translation" : "Aktivera live-översättning", + "I picked list style" : "Jag valde listvy", + "Hey! Are you using Talk in list style or with message bubbles?" : "Hej! Använder du Talk i listvy eller meddelandebubblor?" +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/sw.js b/l10n/sw.js new file mode 100644 index 0000000..5954007 --- /dev/null +++ b/l10n/sw.js @@ -0,0 +1,2133 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "mazungumzo", + "(Duration %s)" : "(Muda %s)", + "You attended a call with {user1}" : "Ulihudhuria simu na {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%nwageni "], + "You attended a call with {user1} and {user2}" : "Ulihudhuria simu na {user1} na {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ulihudhuria simu na {user1}, {user2} na {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ulihudhuria simu na {user1}, {user2}, {user3} na {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ulihudhuria simu na {user1}, {user2}, {user3}, {user4} na {user5}", + "_%n other_::_%n others_" : ["%n other","%n wengine"], + "{actor} invited you to {call}" : "{actor} alikualika kwenye {call}", + "You were invited to a conversation or had a call" : "Ulialikwa kwenye conversation au ulipigiwa simu", + "Other activities" : "Shughuli nyingine", + "Talk" : "Talk", + "Guest" : "Mgeni", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Karibu kwenye Nextcloud Talk!\nKatika mazungumzo haya utaarifiwa kuhusu vipengele vipya vinavyopatikana katika Nextcloud Talk.", + "## New in Talk %s" : "## Mpya katika Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge na Safari sasa zinaweza kutumika kushiriki katika simu za sauti na video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Mazungumzo ya mmoja-mmoja sasa yanaendelea na hayawezi kugeuzwa kuwa mazungumzo ya kikundi kwa bahati mbaya tena. Pia wakati mmoja wa washiriki anaondoka kwenye mazungumzo, mazungumzo hayafutwa kiotomatiki tena. Ikiwa tu washiriki wote wawili wataondoka, mazungumzo yanafutwa kutoka kwa seva", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sasa unaweza kuwaarifu washiriki wote kwa kuchapisha \"@wote\" kwenye gumzo", + "- With the \"arrow-up\" key you can repost your last message" : "- Kwa kitufe cha \"mshale-juu\" unaweza kutuma tena ujumbe wako wa mwisho", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sasa inaweza kuwa na amri, kutuma \"/msaada\" kama ujumbe wa gumzo ili kuona kama msimamizi wako alisanidi baadhi", + "- With projects you can create quick links between conversations, files and other items" : "- Kwa miradi unaweza kuunda viungo vya haraka kati ya mazungumzo, faili na vitu vingine", + "- You can now mention guests in the chat" : "- Sasa unaweza kutaja wageni kwenye gumzo", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Mazungumzo sasa yanaweza kuwa na kushawishi. Hii itawaruhusu wasimamizi kujiunga na gumzo na kupiga simu tayari ili kuandaa mkutano, huku watumiaji na wageni wakisubiri", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sasa unaweza kujibu ujumbe moja kwa moja kuwapa watumiaji wengine muktadha zaidi ujumbe wako unahusu nini", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Kutafuta mazungumzo na washiriki sasa pia kutachuja mazungumzo yako yaliyopo, na kurahisisha kupata mazungumzo ya awali.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Sasa unaweza kuongeza vikundi maalum vya watumiaji kwenye mazungumzo wakati programu ya miduara imesakinishwa", + "- Check out the new grid and call view" : "- Angalia gridi mpya na mtazamo wa simu", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sasa unaweza kupakia na kuburuta faili moja kwa moja kutoka kwa kifaa chako hadi kwenye gumzo", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Faili zinazoshirikiwa sasa zinafunguliwa moja kwa moja ndani ya mwonekano wa gumzo na programu za watazamaji", + "- You can now search for chats and messages in the unified search in the top bar" : "- Sasa unaweza kutafuta gumzo na ujumbe katika utafutaji uliounganishwa kwenye upau wa juu", + "- Spice up your messages with emojis from the emoji picker" : "- Ongeza ujumbe wako kwa emojis kutoka kwa kichagua emoji", + "- You can now change your camera and microphone while being in a call" : "- Sasa unaweza kubadilisha kamera na maikrofoni yako ukiwa kwenye simu", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Yape mazungumzo yako muktadha fulani kwa maelezo na uufungue ili watumiaji walioingia waweze kuupata na wajiunge wenyewe", + "- See a read status and send failed messages again" : "- Angalia hali ya kusoma na kutuma ujumbe kushindwa tena", + "- Raise your hand in a call with the R key" : "- Inua mkono wako kwenye simu kwa kutumia kitufe cha R", + "- Join the same conversation and call from multiple devices" : "- Jiunge na mazungumzo sawa na upige simu kutoka kwa vifaa vingi", + "- Send voice messages, share your location or contact details" : "- Tuma ujumbe wa sauti, shiriki eneo lako au maelezo ya mawasiliano", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Ongeza vikundi kwenye mazungumzo na washiriki wapya wa kikundi wataongezwa kiotomatiki kama washiriki", + "- A preview of your audio and video is shown before joining a call" : "- Onyesho la kukagua sauti na video yako huonyeshwa kabla ya kujiunga kwenye simu", + "- You can now blur your background in the newly designed call view" : "- Sasa unaweza kutia ukungu mandharinyuma katika mwonekano mpya wa simu ulioundwa", + "- Moderators can now assign general and individual permissions to participants" : "- Wasimamizi sasa wanaweza kutoa ruhusa za jumla na za kibinafsi kwa washiriki", + "- You can now react to chat messages" : "- Sasa unaweza kujibu ujumbe wa gumzo", + "- In the sidebar you can now find an overview of the latest shared items" : "- Katika utepe sasa unaweza kupata muhtasari wa vipengee vya hivi punde vilivyoshirikiwa", + "- Use a poll to collect the opinions of others or settle on a date" : "- Tumia kura ya maoni kukusanya maoni ya wengine au kusuluhisha tarehe", + "- Configure an expiration time for chat messages" : "- Sanidi muda wa mwisho wa ujumbe wa gumzo", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anzisha simu bila kuwaarifu wengine katika mazungumzo makubwa. Unaweza kutuma arifa za simu mahususi punde tu simu imeanza.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Tuma ujumbe wa gumzo bila kuwaarifu wapokeaji ikiwa sio haraka", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoji sasa zinaweza kukamilishwa kiotomatiki kwa kuandika \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Unganisha vipengee mbalimbali kwa kutumia kichaguzi mahiri kwa kuandika \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Wasimamizi sasa wanaweza kuunda vyumba vifupi (inahitaji hali ya nyuma ya utendaji wa Juu)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Simu sasa zinaweza kurekodiwa (inahitaji hali ya nyuma ya utendaji wa hali ya juu)", + "- Conversations can now have an avatar or emoji as icon" : "- Mazungumzo sasa yanaweza kuwa na avatar au emoji kama ikoni", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Mandhari pepe sasa yanapatikana pamoja na mandharinyuma yenye ukungu katika simu za video", + "- Reactions are now available during calls" : "- Majibu sasa yanapatikana wakati wa simu", + "- Typing indicators show which users are currently typing a message" : "- Viashirio vya kuandika vinaonyesha ni watumiaji gani wanaandika ujumbe kwa sasa", + "- Groups can now be mentioned in chats" : "- Vikundi sasa vinaweza kutajwa kwenye gumzo", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Rekodi za simu hunakiliwa kiotomatiki ikiwa programu ya mtoaji wa unukuzi imesajiliwa", + "- Chat messages can be translated if a translation provider app is registered" : "- Ujumbe wa gumzo unaweza kutafsiriwa ikiwa programu ya mtoaji tafsiri imesajiliwa", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** sasa inaweza kutumika katika _chat_ jumbe", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks sasa zinapatikana kutekeleza roboti. Tazama hati kwa habari zaidi https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Weka kikumbusho kwenye ujumbe wa gumzo ili kuarifiwa baadaye tena", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Tumia mazungumzo ya **Dokezo la kibinafsi** kuandika madokezo na kushiriki habari kati ya vifaa vyako", + "- Captions allow to send a message with a file at the same time" : "- Manukuu yanaruhusu kutuma ujumbe na faili kwa wakati mmoja", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video ya spika sasa inaonekana wakati unashiriki skrini na majibu ya simu yanahuishwa", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Ujumbe sasa unaweza kuhaririwa na waandishi na wasimamizi walioingia kwa saa 6", + "- Unsent message drafts are now saved in your browser" : "- Rasimu za ujumbe ambao haujatumwa sasa zimehifadhiwa kwenye kivinjari chako", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Gumzo la maandishi sasa linaweza kufanywa kwa njia iliyoshirikishwa na seva zingine za Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Wasimamizi sasa wanaweza kupiga marufuku akaunti na wageni ili kuwazuia kujiunga tena na mazungumzo", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Simu zinazokuja kutoka kwa matukio ya kalenda zilizounganishwa na uingizwaji wa nje ya ofisi sasa zinaonyeshwa kwenye mazungumzo", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Simu sasa zinaweza kufanywa kwa njia iliyoshirikishwa na seva zingine za Talk (inahitaji hali ya nyuma ya utendaji wa Juu)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Tunakuletea mteja wa eneo-kazi la Nextcloud Talk kwa Windows, macOS na Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Fanya muhtasari wa rekodi za simu na ujumbe ambao haujasomwa kwenye gumzo na Msaidizi wa Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Mikutano iliyoboreshwa ya kuwatambua wageni walioalikwa kupitia anwani zao za barua pepe, uingizaji wa orodha za washiriki, rasimu za kura na kupakua orodha za washiriki wa simu", + "- Archive conversations to stay focused" : "- Hifadhi mazungumzo ili kukaa umakini", + "- Schedule a meeting into your calendar from within a conversation" : "- Panga mkutano katika kalenda yako kutoka ndani ya mazungumzo", + "- Search for messages of the current conversation directly in the right sidebar" : "- Tafuta ujumbe wa mazungumzo ya sasa moja kwa moja kwenye upau wa kando wa kulia", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Tazama mazungumzo zaidi kwa mtazamo wa kwanza na orodha mpya iliyounganishwa (washa katika mipangilio ya Majadiliano)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Mazungumzo ya mkutano sasa yanasawazisha kichwa na maelezo kutoka kwa kalenda na yanafichwa na kichujio cha utafutaji hadi yatakapokaribia kuanza.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Weka alama kwenye mazungumzo kuwa nyeti katika mipangilio ya arifa, ili kuficha maudhui ya ujumbe kutoka kwa orodha ya mazungumzo na arifa", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Ili kupokea arifa zinazotumwa na programu hata wakati huitumii wakati wa \"Do not disturb\", weka alama kwenye mazungumzo kuwa muhimu", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Ongeza washiriki wengine kwenye simu ya mmoja-kwa-mmoja ili kuunda simu mpya ya kikundi kwa kuruka", + "- Use threads to keep your chat and discussions organized" : "- Tumia nyuzi kuweka gumzo na mijadala yako kupangwa", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Unukuzi wa moja kwa moja sasa unapatikana wakati wa simu (inahitaji unukuzi wa moja kwa moja wa ExApp na utendakazi wa hali ya juu nyuma)", + "_All %n participant_::_All %n participants_" : ["All %n participant","Washiriki %n wote"], + "Talk updates ✅" : "Masasisho ya Talk ✅", + "Reaction deleted by author" : "Maoni yamefutwa na mwandishi", + "{actor} created the conversation" : "{actor} alianzisha mazungumzo", + "You created the conversation" : "Ulianzisha mazungumzo", + "System created the conversation" : "Mfumo uliunda mazungumzo", + "An administrator created the conversation" : "Msimamizi alianzisha mazungumzo", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} alibadilisha jina la mazungumzo kutoka \"%1$s\" mpaka \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ulibadilisha jina la mazungumzo kutoka \"%1$s\" mpaka \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} ameweka maelezo", + "You set the description" : "Umeweka maelezo", + "An administrator set the description" : "Msimamizi aliweka maelezo", + "{actor} removed the description" : "{actor} ameondoa maelezo", + "You removed the description" : "Umeondoa maelezo", + "An administrator removed the description" : "Msimamizi aliondoa maelezo", + "You started a silent call" : "Ulianzisha simu ya kimya", + "Outgoing silent call" : "Simu ya kimya inayotoka", + "{actor} started a silent call" : "{actor} alianza kuita kimya kimya ", + "Incoming silent call" : "Simu ya kimya inayoingia", + "You started a call" : "Umepiga simu", + "Outgoing call" : "Simu inayotoka", + "{actor} started a call" : "{actor} alianza simu", + "Incoming call" : "Simu inaingia", + "{actor} joined the call" : "{actor} amejiunga kwenye simu", + "You joined the call" : "Umejiunga kwenye simu", + "{actor} left the call" : "{actor} ameacha simu", + "You left the call" : "Umeacha simu", + "{actor} unlocked the conversation" : "{actor} amefungua mazungumzo", + "You unlocked the conversation" : "Umefungua mazungumzo", + "An administrator unlocked the conversation" : "Msimamizi alifungua mazungumzo", + "{actor} locked the conversation" : "{actor} amefunga mazungumzo", + "You locked the conversation" : "Umefunga mazungumzo", + "An administrator locked the conversation" : "Msimamizi alifunga mazungumzo", + "{actor} limited the conversation to the current participants" : "{actor} amepunguza mazungumzo kwa washiriki wa sasa", + "You limited the conversation to the current participants" : "Umeweka mazungumzo kwa washiriki wa sasa", + "An administrator limited the conversation to the current participants" : "Msimamizi alizuia mazungumzo kwa washiriki wa sasa", + "{actor} opened the conversation to registered users" : "{actor} alifungua mazungumzo kwa watumiaji waliojiandikisha", + "You opened the conversation to registered users" : "Ulifungua mazungumzo kwa watumiaji waliojiandikisha", + "An administrator opened the conversation to registered users" : "Msimamizi alifungua mazungumzo kwa watumiaji waliojiandikisha", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} alifungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "You opened the conversation to registered users and users created with the Guests app" : "Umefungua mazungumzo kwa watumiaji na watumiaji waliojiandikisha ulioundwa na programu ya Wageni", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Msimamizi alifungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "The conversation is now open to everyone" : "Mazungumzo sasa yako wazi kwa kila mtu", + "{actor} opened the conversation to everyone" : "{actor} alifungua mazungumzo kwa kila mtu", + "You opened the conversation to everyone" : "Ulifungua mazungumzo kwa kila mtu", + "{actor} restricted the conversation to moderators" : "{actor} alizuia mazungumzo kwa wasimamizi", + "You restricted the conversation to moderators" : "Ulizuia mazungumzo kwa wasimamizi", + "{actor} started breakout rooms" : "{actor} ameanzisha vyumba vya kujitenga", + "You started breakout rooms" : "Umeanzisha vyumba vya kujitenga", + "{actor} stopped breakout rooms" : "{actor}alisimamisha vyumba vya vikundi ", + "You stopped breakout rooms" : "Ulisimamisha vyumba vya vikundi", + "{actor} allowed guests" : "{actor} aliruhusu wageni ", + "You allowed guests" : "Uliruhusu wageni", + "An administrator allowed guests" : "Msimamizi aliruhusu wageni", + "{actor} disallowed guests" : "{actor}amekataza wageni ", + "You disallowed guests" : "Umekataza wageni", + "An administrator disallowed guests" : "Msimamizi amekataza wageni", + "{actor} set a password" : "{actor}ameweka nenosiri ", + "You set a password" : "Umeweka nenosiri", + "An administrator set a password" : "Msimamizi ameweka nenosiri", + "{actor} removed the password" : "{actor}ameondoa nenosiri ", + "You removed the password" : "Umeondoa nenosiri", + "An administrator removed the password" : "Msimamizi aliondoa nenosiri", + "{actor} added {user}" : "{actor} alimwongeza {user}", + "You joined the conversation" : "Ulijiunga na mazungumzo", + "{actor} joined the conversation" : "{actor} alijiunga na mazungumzo", + "You added {user}" : "Ulimwongeza {user}", + "{actor} added you" : "{actor} alikuongeza ", + "An administrator added you" : "Msimamizi alikuongeza", + "An administrator added {user}" : "Msimamizi alimwongeza {user}", + "You left the conversation" : "Uliacha mazungumzo", + "{actor} left the conversation" : "{actor} aliacha mazungumzo", + "{actor} removed {user}" : "{actor} alimwondoa {user}", + "You removed {user}" : "Ulimwondoa{user}", + "{actor} removed you" : "{actor} alikuondoa ", + "An administrator removed you" : "Msimamizi alikuondoa", + "An administrator removed {user}" : " Msimamizi amemwondoa {user}", + "{actor} invited {federated_user}" : "{actor} alimwalika {federated_user}", + "You invited {federated_user}" : "Ulimwalika {federated_user}", + "You accepted the invitation" : "Ulikubali mwaliko", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "Msimamizi amemwalika {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user}alikubali mwaliko ", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "Ulimwondoa {federated_user}", + "You declined the invitation" : "Ulikataa mwaliko", + "An administrator removed {federated_user}" : "Msimamizi amemwondoa {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} alikataa mwaliko ", + "{actor} added group {group}" : "{actor} aliongeza kikundi {group}", + "You added group {group}" : "Uliongeza kikundi {group}", + "An administrator added group {group}" : "Msimamizi aliongeza kikundi {group}", + "{actor} removed group {group}" : "{actor} aliondoa kundi {group}", + "You removed group {group}" : "Uliondoa kundi {group}", + "An administrator removed group {group}" : "Msimamizi aliondoa kikundi {group}", + "{actor} added team {circle}" : "{actor} aliongeza timu {circle}", + "You added team {circle}" : "Ulkongeza timu {circle}", + "An administrator added team {circle}" : "Msimamizi aliongeza timu {circle}", + "{actor} removed team {circle}" : "{actor} aliondoa timu {circle}", + "You removed team {circle}" : "Umeondoa timu {circle}", + "An administrator removed team {circle}" : "Msimamizi aliondoa timu {circle}", + "{actor} added {phone}" : "{actor} alimwongeza {phone}", + "You added {phone}" : "Ulimwongeza {phone}", + "An administrator added {phone}" : "Msimamizi alimwongeza {phone}", + "{actor} removed {phone}" : "{actor} amemwondoa {phone}", + "You removed {phone}" : "Umemwondoa {phone}", + "An administrator removed {phone}" : "Msimamizi amemwondoa {phone}", + "{actor} promoted {user} to moderator" : "{actor} alipandishwa cheo {user} kuwa msimamizi", + "You promoted {user} to moderator" : "Ulimpandisha hadhi {user} kuwa msimamizi", + "{actor} promoted you to moderator" : "{actor} alikupandisha cheo na kuwa msimamizi", + "An administrator promoted you to moderator" : "Msimamizi alikupandisha cheo na kuwa msimamizi", + "An administrator promoted {user} to moderator" : "Msimamizi alimpandisha cheo{user} kuwa msimamizi", + "{actor} demoted {user} from moderator" : "{actor} amemshusha cheo{user} kutoka kwa msimamizi", + "You demoted {user} from moderator" : "Umemshusha {user} kutoka kwa msimamizi", + "{actor} demoted you from moderator" : "{actor} amekushusha cheo kutoka kwa msimamizi", + "An administrator demoted you from moderator" : "Msimamizi amekushusha kutoka kwa msimamizi", + "An administrator demoted {user} from moderator" : "Msimamizi alimshusha {user} kutoka kwa msimamizi", + "{actor} shared a file which is no longer available" : "{actor} alishiriki faili ambayo haipatikani tena ", + "You shared a file which is no longer available" : "Umeshiriki faili ambayo haipatikani tena", + "File shares are currently not supported in federated conversations" : "Ushiriki wa faili kwa sasa hautumiki katika mazungumzo yaliyoshirikishwa", + "The shared location is malformed" : "Eneo lililoshirikiwa lina hitilafu", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} amesanidi Matterbridge ili kusawazisha mazungumzo haya na gumzo zingine", + "You set up Matterbridge to synchronize this conversation with other chats" : "Umeweka mipangilio ya Matterbridge ili kusawazisha mazungumzo haya na gumzo zingine", + "{actor} created thread {title}" : "{actor}aliunda mazungumzo {title}", + "You created thread {title}" : "Uliunda mazungumzo {title}", + "{actor} renamed thread {title}" : "{actor} amebadilisha jina la mazungumzo {title}", + "You renamed thread {title}" : "Umebadilisha jina la mazungumzo {title}", + "{actor} updated the Matterbridge configuration" : "{actor} alisasisha usanidi wa Matterbridge", + "You updated the Matterbridge configuration" : "Ulisasisha usanidi wa Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ameondoa usanidi wa Matterbridge", + "You removed the Matterbridge configuration" : "Umeondoa usanidi wa Matterbridge", + "{actor} started Matterbridge" : "{actor} ameanzisha Matterbridge", + "You started Matterbridge" : "Umeanzisha Matterbridge", + "{actor} stopped Matterbridge" : "{actor} alisimamisha Matterbridge", + "You stopped Matterbridge" : "Ulisimamisha Matterbridge", + "{actor} deleted a message" : "{actor} amefuta ujumbe", + "You deleted a message" : "Umefuta ujumbe", + "{actor} edited a message" : "{actor} amehariri ujumbe", + "You edited a message" : "Umehariri ujumbe", + "{actor} deleted a reaction" : "{actor} amefuta maoni", + "You deleted a reaction" : "Umefuta maoni", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","Umeweka muda wa mwisho wa ujumbe kuwa wiki %n"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","Umeweka muda wa mwisho wa ujumbe kuwa siku %n"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","Umeweka muda wa mwisho wa ujumbe kuwa saa %n"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","Umeweka muda wa mwisho wa ujumbe kuwa dakika %n"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} amweka muda wa mwisho wa ujumbe kuwa wiki %n"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} ameweka muda wa mwisho wa ujumbe kuwa siku %n"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} weka muda wa mwisho wa ujumbe kuwa saa %n"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} ameweka muda wa mwisho wa ujumbe kuwa dakika %n"], + "{actor} disabled message expiration" : "{actor} amezima muda wa kuisha kwa ujumbe", + "You disabled message expiration" : "Umezima muda wa kuisha kwa ujumbe", + "{actor} cleared the history of the conversation" : "{actor} amefuta historia ya mazungumzo", + "You cleared the history of the conversation" : "Umefuta historia ya mazungumzo", + "{actor} set the conversation picture" : "{actor} anaweka picha ya mazungumzo", + "You set the conversation picture" : "Unaweka picha ya mazungumzo", + "{actor} removed the conversation picture" : "{actor} ameondoa picha ya mazungumzo ", + "You removed the conversation picture" : "Umeondoa picha ya mazungumzo", + "{actor} ended the poll {poll}" : "{actor} alimaliza kupiga kura {poll}", + "You ended the poll {poll}" : "Umemaliza kupiga kura {poll}", + "{actor} started the video recording" : "{actor} ameanza kurekodi video", + "You started the video recording" : "Umeanza kurekodi video", + "{actor} stopped the video recording" : "{actor} amesimamisha kurekodi video", + "You stopped the video recording" : "Umesimamisha kurekodi video", + "{actor} started the audio recording" : "{actor} ameanza kurekodi sauti", + "You started the audio recording" : "Umeanza kurekodi sauti", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "Umesimamisha kurekodi sauti", + "The recording failed" : "Imeshindwa kurekodi", + "Someone voted on the poll {poll}" : "Mtu alipiga kura kwenye kura {poll}", + "Message deleted by author" : "Ujumbe umefutwa na mwandishi", + "Message deleted by {actor}" : "Ujumbe ulifutwa na {actor}", + "Message deleted by you" : "Ujumbe umefutwa na wewe", + "Deleted user" : "Mtumiaji aliyefutwa", + "Unknown number" : "Nambari isiyojulikana", + "Administration" : "Utawala", + "System" : "Mfumo", + "%s (guest)" : "%s (mgeni)", + "Missed call" : "Simu ambayo haikujibiwa", + "Unanswered call" : "Simu ambayo haikupokelewa", + "Call ended (Duration {duration})" : "Simu imekatika (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Simu ilikatwa, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} alikata simu (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})","Simu na %nwageni ilikatishwa, kwa kuwa ilifikia upeo wa muda wa simu (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guest ended (Duration {duration})","Simu na %n wageni ilimalizika (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} alimaliza simu na %n wageni (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Simu na {user1} ilimalizika (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} alimaliza simu na {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1} na {user2} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Simu na {user1} na {user2} iliisha (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} amemaliza simu na {user1} na {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}na {user3} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Simu na{user1}, {user2}na {user3}ilimalizika (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2} na {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}, {user3} and {user4} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Simu na {user1}, {user2}, {user3} and {user4} iliisha (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2}, {user3} na {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}, {user3}, {user4} and {user5}ilikamilika, kwani ilifikia upeo wa muda wa simu (Muda {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Simu na {user1}, {user2}, {user3}, {user4} and {user5} imeisha (Muda {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2}, {user3}, {user4} na{user5} (Muda {duration})", + "Message of {user} in {conversation}" : "Ujumbe wa {user} katika {conversation}", + "Message of {user}" : "Ujumbe wa {user}", + "Message of a deleted user in {conversation}" : "Ujumbe wa mtumiaji aliyefutwa katika {conversation}", + "Talk conversations" : "Mazungumzo ya Talk", + "Talk to %s" : "Talk kwa %s", + "An error occurred. Please contact your administrator." : "Hitilafu imetokea. Tafadhali wasiliana na msimamizi wako.", + "Storage quota exceeded" : "Kiasi cha hifadhi kimepitwa", + "File not found" : "Faili halipatikani", + "File is not shared, or shared but not with the user" : "Faili haijashirikiwa, au kushirikiwa lakini sio na mtumiaji", + "No account available to delete." : "Hakuna akaunti inayopatikana ya kufuta.", + "Poll" : "Kura ya maoni", + "Password needs to be set" : "Nenosiri linahitaji kuwekwa", + "Uploading the file failed" : "Imeshindwa kupakia faili", + "No image file provided" : "Hakuna faili ya picha iliyotolewa", + "File is too big" : "Faili ni kubwa mno", + "Invalid file provided" : "Faili iliyotolewa si halali", + "Invalid image" : "Taswira si halisi", + "Unknown filetype" : "Aina ya faili haijulikani", + "Talk mentions" : "Mitajo ya Talk", + "More conversations" : "Mazungumzo zaidi", + "Say hi to your friends and colleagues!" : "Sema hi kwa marafiki zako na wenzako!", + "No unread mentions" : "Hakuna mtajo ambao haujasomwa", + "Call in progress" : "Simu inaendelea", + "You were mentioned" : "Ulitajwa", + "Write to conversation" : "Andika kwa mazungumzo", + "Writes event information into a conversation of your choice" : "Inandika habari ya tukio kwenye mazungumzo unayopenda", + "Missing email field in header line" : "Sehemu ya barua pepe inayokosekana katika kichwa cha habari", + "Following lines are invalid: %s" : "Mistari ifuatayo ni batili: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s amekualika kwenye mazungumzo \"%2$s\".", + "You were invited to conversation \"%s\"." : "Ulialikwa kwenye mazungumzo \"%s\".", + "Conversation invitation" : "Mwaliko wa mazungumzo", + "Scheduled time" : "Muda uliopangwa", + "Description" : "Maelezo", + "You can also dial-in via phone with the following details" : "Unaweza pia kupiga simu kupitia simu na maelezo yafuatayo", + "Dial-in information" : "Maelezo ya kupiga simu", + "Meeting ID" : "Kitambulisho cha Mkutano", + "Your PIN" : "PIN yako", + "Click the button below to join the lobby now." : "Bofya kitufe kilicho hapa chini ili kujiunga na kushawishi sasa.", + "Click the link below to join the lobby now." : "Bofya kiungo hapa chini ili kujiunga na kushawishi sasa.", + "Join lobby for \"%s\"" : "Jiunge na kushawishi kwa \"%s\"", + "Click the button below to join the conversation now." : "Bofya kitufe kilicho hapa chini ili kujiunga na mazungumzo sasa.", + "Click the link below to join the conversation now." : "Bofya kiungo kilicho hapa chini ili kujiunga na mazungumzo sasa.", + "Join \"%s\"" : "Jiunge \"%s\"", + "Meeting" : "Mkutano", + "Password request: %s" : "Ombi la nenosiri: %s", + "Private conversation" : "Mazungumzo ya faragha", + "Deleted user (%s)" : "Mtumiaji aliyefutwa (%s)", + "Failed to upload call recording" : "Imeshindwa kupakia rekodi ya simu", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Seva ya kurekodi imeshindwa kupakia rekodi ya simu {call}. Tafadhali wasiliana na utawala.", + "Share to chat" : "Shiriki kwenye gumzo", + "Dismiss notification" : "Ondoa arifa", + "Call recording now available" : "Rekodi ya simu sasa inapatikana", + "The recording for the call in {call} was uploaded to {file}." : "Rekodi ya simu katika {call} ilipakiwa {file}.", + "Transcript now available" : "Nakala sasa inapatikana", + "The transcript for the call in {call} was uploaded to {file}." : "Nakala ya simu katika {call} ilipakiwa kwa {file}.", + "Failed to transcript call recording" : "Imeshindwa kunakili rekodi ya simu", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Seva imeshindwa kunakili rekodi kwenye {file} kwa simu iliyo katika {call}. Tafadhali wasiliana na utawala.", + "Call summary now available" : "Muhtasari wa simu sasa unapatikana", + "The summary for the call in {call} was uploaded to {file}." : "Muhtasari wa simu katika {call} ulipakiwa kwenye {file}.", + "Failed to summarize call recording" : "Imeshindwa kufanya muhtasari wa kurekodi simu", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Seva imeshindwa kufanya muhtasari wa rekodi kwenye {file} kwa simu katika {call}. Tafadhali wasiliana na utawala.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} amekualika kujiunga {roomName} kwenye {remoteServer}", + "Accept" : "Kubali", + "Decline" : "Kataa", + "{user1} invited you to a federated conversation" : "{user1} alikualika kwenye mazungumzo ya shirikisho", + "Someone reacted" : "Mtu fulani alijibu", + "New message" : "Ujumbe mpya", + "Reminder" : "Kikumbushio", + "Someone mentioned you" : "Mtu alikutaja", + "Notification" : "Taarifa", + "Someone reacted in a private conversation" : "Mtu alijibu katika mazungumzo ya faragha", + "You received a message in a private conversation" : "Umepokea ujumbe katika mazungumzo ya faragha", + "Reminder in a private conversation" : "Kikumbusho katika mazungumzo ya faragha", + "Someone mentioned you in a private conversation" : "Mtu fulani alikutaja katika mazungumzo ya faragha", + "Notification in a private conversation" : "Arifa katika mazungumzo ya faragha", + "Reminder: You in {call}" : "Kikumbusho: Wewe katika {call}", + "Reminder: {user} in {call}" : "Kikumbusho: {user} katika {call}", + "Reminder: Deleted user in {call}" : "Kikumbusho: Mtumiaji aliyefutwa kwenye {call}", + "Reminder: {guest} (guest) in {call}" : "Kikumbusho: {guest} (mgeni) kwenye {call}", + "Reminder: Guest in {call}" : "Kikumbusho: Mgeni kwenye {call}", + "{user} reacted with {reaction}" : "{user}alijibizana na {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} alijibizana na {reaction} katika {call}", + "Deleted user reacted with {reaction} in {call}" : "Mtumiaji aliyefutwa alijibizana na {reaction} katika {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (mgeni) alijibishana na {reaction} katika {call}", + "Guest reacted with {reaction} in {call}" : "Mgeni alijibishana na {reaction} katika {call}", + "{user} in {call}" : "{user} katika {call}", + "Deleted user in {call}" : "Mtumiaji aliyefutwa kwenye {call}", + "{guest} (guest) in {call}" : "{guest} (mgeni) katika {call}", + "Guest in {call}" : "Mgeni katika {call}", + "{user} sent you a private message" : "{user} alikutumia ujumbe wa faragha", + "{user} sent a message in conversation {call}" : "{user} alituma ujumbe katika mazungumzo {call}", + "A deleted user sent a message in conversation {call}" : " Mtumiaji aliyefutwa alituma ujumbe kwenye mazungumzo {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (mgeni) alituma ujumbe katika mazungumzo {call}", + "A guest sent a message in conversation {call}" : "Mgeni alituma ujumbe katika mazungumzo {call}", + "{user} replied to your private message" : "{user} alijibu ujumbe wako binafsi", + "{user} replied to your message in conversation {call}" : "{user} alijibu ujumbe wako katika mazungumzo {call}", + "A deleted user replied to your message in conversation {call}" : "Mtumiaji aliyefutwa alijibu ujumbe wako kwenye mazungumzo {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(mgeni) alijibu ujumbe wako katika mazungumzo {call}", + "A guest replied to your message in conversation {call}" : "Mgeni alijibu ujumbe wako katika mazungumzo {call}", + "Reminder: You in private conversation {call}" : "Kikumbusho: Wewe katika mazungumzo ya faragha {call}", + "Reminder: A deleted user in private conversation {call}" : "Kikumbusho: Mtumiaji aliyefutwa katika mazungumzo ya faragha {call}", + "Reminder: {user} in private conversation" : "Kikumbusho: {user} katika mazungumzo ya faragha", + "Reminder: You in conversation {call}" : "Kikumbusho: Wewe kwenye mazungumzo {call}", + "Reminder: {user} in conversation {call}" : "Kikumbusho: {user} katika mazungumzo {call}", + "Reminder: A deleted user in conversation {call}" : "Kikumbusho: Mtumiaji aliyefutwa kwenye mazungumzo {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Kikumbusho: {guest}(mgeni) katika mazungumzo {call}", + "Reminder: A guest in conversation {call}" : "Kikumbusho: Mgeni katika mazungumzo {call}", + "{user} reacted with {reaction} to your private message" : "{user}alijibizana na {reaction}kwa ujumbe wako wa faragha ", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ilijibizana na {reaction} kwa ujumbe wako katika mazungumzo {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Mtumiaji aliyefutwa alijibu kwa kutumia {reaction} ujumbe wako kwenye mazungumzo {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (mgeni) alijibu kwa {reaction} ujumbe wako kwenye mazungumzo {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Mgeni alijibu kwa {reaction} ujumbe wako kwenye mazungumzo {call}", + "{user} mentioned you in a private conversation" : "{user} alikutaja kwenye mazungumzo ya faragha", + "{user} mentioned group {group} in conversation {call}" : "{user} alitaja kikundi {group} kwenye mazungumzo {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} alitaja timu {team} kwenye mazungumzo {call}", + "{user} mentioned everyone in conversation {call}" : "{user} alitaja kila mtu kwenye mazungumzo {call}", + "{user} mentioned you in conversation {call}" : "{user} alikutaja kwenye mazungumzo {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Mtumiaji aliyefutwa alitaja kikundi cha {group} kwenye mazungumzo {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Mtumiaji aliyefutwa alitaja timu {team} kwenye mazungumzo {call}", + "A deleted user mentioned everyone in conversation {call}" : "Mtumiaji aliyefutwa alitaja kila mtu kwenye mazungumzo {call}", + "A deleted user mentioned you in conversation {call}" : "Mtumiaji aliyefutwa alikutaja kwenye mazungumzo {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (mgeni) alitaja kikundi {group} kwenye mazungumzo {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (mgeni) alitaja timu {team} kwenye mazungumzo {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(mgeni) alitaja kila mtu katika mazungumzo {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(mgeni) alikutaja kwenye mazungumzo {call}", + "A guest mentioned group {group} in conversation {call}" : "Mgeni alitaja kikundi {group} kwenye mazungumzo {call}", + "A guest mentioned team {team} in conversation {call}" : "Mgeni alitaja timu {team} kwenye mazungumzo {call}", + "A guest mentioned everyone in conversation {call}" : "Mgeni alitaja kila mtu kwenye mazungumzo {call}", + "A guest mentioned you in conversation {call}" : "Mgeni alikutaja kwenye mazungumzo {call}", + "View message" : "Tazama ujumbe", + "Dismiss reminder" : "Ondoa kikumbusho", + "View chat" : "Tazama gumzo", + "{user} invited you to a group conversation: {call}" : "{user}alikualika kwenye mazungumzo ya kikundi: {call}", + "Join call" : "Jiunge katika muito", + "Answer call" : "Jibu simu", + "{user} would like to talk with you" : "{user} ningependa kuzungumza na wewe", + "Call back" : "Piga simu tena", + "You missed a call from {user}" : "Ulikosa simu kutoka {user}", + "Accept call" : "Pokea simu", + "Incoming phone call from {call}" : "Simu inayoingia kutoka {call}", + "You missed a phone call from {call}" : "Ulikosa simu kutoka {call}", + "A group call has started in {call}" : "Simu ya kikundi imeanza {call}", + "You missed a group call in {call}" : "Ulikosa simu ya kikundi katika {call}", + "{email} is requesting the password to access {file}" : "{email} inaomba nenosiri ili kufikia {file}", + "{email} tried to request the password to access {file}" : "{email} alijaribu kuomba nenosiri ili kufikia {file}", + "Someone is requesting the password to access {file}" : "Mtu anaomba nenosiri ili kufikia {file}", + "Someone tried to request the password to access {file}" : " Mtu alijaribu kuomba nenosiri ili kufikia {file}", + "Open settings" : "Mipangilio ya wazi", + "Hosted signaling server added" : "iliyopangishwa imeongezwa", + "The hosted signaling server is now configured and will be used." : "Seva ya kuashiria iliyopangishwa sasa imesanidiwa na itatumika.", + "Hosted signaling server removed" : "Seva ya kuashiria iliyopangishwa imeondolewa", + "The hosted signaling server was removed and will not be used anymore." : "Seva ya kuashiria iliyopangishwa iliondolewa na haitatumika tena.", + "Hosted signaling server changed" : "Seva ya kuashiria iliyopangishwa imebadilishwa", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Akaunti ya seva inayopangishwa imebadilisha hali kutoka \"{oldstatus}\" mpaka \"{newstatus}\".", + "pending" : "inayosubiri", + "active" : "hai", + "expired" : "iliyoisha muda", + "blocked" : "iliyozuiliwa", + "error" : "hitilafu", + "The certificate of {host} expires in {days} days" : "Muda wa cheti cha {host} utakwisha baada ya siku {days}", + "The certificate of {host} expired" : "Cheti cha {host} muda wake umekwisha", + "Contact via Talk" : "Wasiliana kupitia Talk", + "Open Talk" : "Fungua Talk", + "Default" : "Chaguo msingi", + "Presentation" : "Wasilisho", + "Webinar" : "Webinar", + "Conversations" : "Mazungumzo", + "Messages in current conversation" : "Ujumbe katika mazungumzo ya sasa", + "{user}" : "{user}", + "Messages" : "Jumbe", + "{user} in {conversation}" : "{user} katika {conversation}", + "Messages in other conversations" : "Ujumbe katika mazungumzo mengine", + "One-to-one rooms always need to show the other users avatar" : "Vyumba vya moja hadi moja vinahitaji kuonyesha avatar ya watumiaji wengine kila wakati", + "Invalid emoji character" : "Herufi batili ya emoji", + "Invalid background color" : "Rangi ya mandharinyuma si sahihi", + "Avatar image is not square" : "Picha ya avatar si ya mraba", + "Room {number}" : "Chumba {number}", + "Other" : "Mengine", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Imeshindwa kuomba majaribio kwa sababu seva ya majaribio haipatikani. Tafadhali jaribu tena baadaye.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kuna tatizo na uthibitishaji wa mfano huu. Labda haipatikani kutoka nje ili kuthibitisha URL yake.", + "Something unexpected happened." : "Kitu kisichotarajiwa kilitokea.", + "The URL is invalid." : "URL ni batili.", + "An HTTPS URL is required." : "URL ya HTTPS inahitajika.", + "The email address is invalid." : "Anwani ya barua pepe si sahihi.", + "The language is invalid." : "Lugha ni batili.", + "The country is invalid." : "Nchi ni batili.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Kuna tatizo na ombi la kesi. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "Too many requests are send from your servers address. Please try again later." : "Maombi mengi sana yanatumwa kutoka kwa anwani ya seva zako. Tafadhali jaribu tena baadaye.", + "There is already a trial registered for this Nextcloud instance." : "Tayari kuna jaribio lililosajiliwa kwa mfano huu wa Nextcloud.", + "Something unexpected happened. Please try again later." : "Kitu kisichotarajiwa kilitokea. Tafadhali jaribu tena baadaye.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Imeshindwa kuomba majaribio kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali jaribu tena baadaye.", + "Trial requested but failed to get account information. Please check back later." : "Jaribio liliombwa lakini halikuweza kupata maelezo ya akaunti. Tafadhali angalia tena baadaye.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Kuna tatizo katika uthibitishaji wa ombi hili. Labda haipatikani kutoka nje ili kuthibitisha URL yake.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Imeshindwa kuleta maelezo ya akaunti kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali angalia tena baadaye.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kuna tatizo la kuleta maelezo ya akaunti. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "There is no such account registered." : "Hakuna akaunti kama hiyo iliyosajiliwa.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Imeshindwa kuleta maelezo ya akaunti kwa sababu seva ya majaribio haipatikani. Tafadhali angalia tena baadaye.", + "Deleting the hosted signaling server account failed. Please check back later." : "Imeshindwa kufuta akaunti ya seva iliyopangishwa. Tafadhali angalia tena baadaye.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Imeshindwa kufuta akaunti kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali angalia tena baadaye.", + "There is a problem with deleting the account. Please check your logs for further information." : "Kuna tatizo la kufuta akaunti. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "Too many requests are sent from your servers address. Please try again later." : "Maombi mengi sana yanatumwa kutoka kwa anwani ya seva zako. Tafadhali jaribu tena baadaye.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Imeshindwa kufuta akaunti kwa sababu seva ya majaribio haipatikani. Tafadhali angalia tena baadaye.", + "Note to self" : "Jikumbushe", + "A place for your private notes, thoughts and ideas" : "Mahali pa maelezo yako ya kibinafsi, mawazo na mawazo", + "Transcript is AI generated and may contain mistakes" : "Nakala imetengenezwa na AI na inaweza kuwa na makosa", + "Summary is AI generated and may contain mistakes" : "Muhtasari umetolewa na AI na unaweza kuwa na makosa", + "Let's get started!" : "Hebu tuanze!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ni jukwaa salama la mawasiliano linalojiendesha lenyewe linalounganishwa kwa urahisi na mfumo ikolojia wa Nextcloud.\n\n#### Sifa Muhimu za Nextcloud Talk:\n\n* Ongea na kutuma ujumbe katika mazungumzo ya kibinafsi na ya kikundi\n* Simu za sauti na video\n* Kushiriki faili na kuunganishwa na programu zingine za Nextcloud\n* Mipangilio ya mazungumzo inayoweza kubinafsishwa, udhibiti na udhibiti wa faragha\n* Wavuti, kompyuta ya mezani na rununu (iOS na Android)\n* Mawasiliano ya kibinafsi na salama\n\nPata maelezo zaidi katika [hati za mtumiaji](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Karibu kwenye Nextcloud Talk\n\nNextcloud Talk ni programu ya kibinafsi na yenye nguvu ya kutuma ujumbe inayounganishwa na Nextcloud. Piga gumzo katika mazungumzo ya faragha au ya kikundi, shirikiana kupitia simu za sauti na video, panga simu za wavuti na matukio, badilisha mazungumzo yako yakufae na mengine mengi.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Badilisha muundo wa maandishi ili kuunda ujumbe mzuri\n\nKatika Nextcloud Talk, unaweza kutumia sintaksia ya Markdown kuunda ujumbe wako. Kwa mfano, tumia umbizo la **bold** au *italiki*, au `angazia maandishi kama msimbo`. Unaweza kuunda majedwali na kuongeza vichwa kwenye maandishi yako.\n\nJe, unahitaji kurekebisha kosa la kuandika au kubadilisha umbizo? Hariri ujumbe wako kwa kubofya \"Hariri ujumbe\" kwenye menyu ya ujumbe.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Ongeza viambatisho na viungo\n\nAmbatisha faili kutoka kwa Nextcloud Hub yako kwa kutumia kitufe cha \"+\". Shiriki vipengee kutoka kwa Faili na programu mbalimbali za Nextcloud. Baadhi ya programu hata hutumia wijeti zinazoingiliana, kwa mfano, programu ya Maandishi.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Acha mazungumzo yatiririke: taja watumiaji, itikia ujumbe na zaidi\n\nUnaweza kutaja kila mtu kwenye mazungumzo kwa kutumia %s au kutaja washiriki mahususi kwa kuandika \"@\" na kuchagua majina yao kutoka kwenye orodha.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Unaweza kujibu ujumbe, kuzisambaza kwa gumzo na watu wengine, au kunakili maudhui ya ujumbe.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : " \n## ✨ Fanya zaidi ukitumia Smart Picker\n\nAndika kwa urahisi \"/\" au nenda kwenye menyu ya \"+\" ili kufungua Kiteua Mahiri ambapo unaweza kuambatisha maudhui mbalimbali kwenye ujumbe wako. Unaweza kusanidi Smart Picker ili uweze kuongeza vipengee kutoka kwa programu za Nextcloud, GIF, maeneo ya ramani, maudhui yanayotokana na AI na mengi zaidi.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Dhibiti mipangilio ya mazungumzo\n\nKatika menyu ya mazungumzo, unaweza kufikia mipangilio mbalimbali ili kudhibiti mazungumzo yako, kama vile:\n* Hariri maelezo ya mazungumzo\n* Dhibiti arifa\n* Tumia sheria nyingi za wastani\n* Sanidi ufikiaji na usalama\n* Wezesha roboti\n*na zaidi!", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Visiwa vya Aland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Ubeligiji", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Uswiss", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Visiwa vya Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Visiwa vya Krismas", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Ujerumani", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Jamhuri ya Dominica", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Misri", + "Western Sahara" : "Sahara Magharibi", + "Eritrea" : "Eritrea", + "Spain" : "Hispania", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Visiwa vya Faroe", + "France" : "Ufaransa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Ugiriki", + "South Georgia and the South Sandwich Islands" : "Georgia Kusini na Visiwa vya Sandwich kusini", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Visiwa vya Heard na McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Visiwa vya Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Visiwa vya Marshall", + "North Macedonia" : "North Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Visiwa vya Mariana kaskazini", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Kisiwa cha Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Uholanzi", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Ureno", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Shirikisho la Urusi", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Visiwa vya Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan kusini", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Visiwa vya Turks na Caicos", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Uturuki", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrika ya kusini", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Ukungu wa mandharinyuma", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Haikuweza kuangalia usaidizi wa kupakia WASM. Tafadhali angalia mwenyewe ikiwa seva yako ya wavuti inatumikia faili za `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Seva yako ya wavuti haijasanidiwa ipasavyo ili kutoa faili za `.wasm`. Hili kawaida ni suala na usanidi wa Nginx. Kwa ukungu wa mandharinyuma inahitaji marekebisho ili pia kuwasilisha faili za `.wasm`. Linganisha usanidi wako wa Nginx na usanidi uliopendekezwa katika hati zetu.", + "Talk configuration values" : "Maadili ya usanidi wa Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Kulazimisha muda wa simu kunatumika tu na mfumo wa cron. Tafadhali wezesha cron ya mfumo au uondoe usanidi wa `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Thamani ndogo za `max_call_duration` (zilizowekwa kwa sasa kuwa %d) hazitekelezeki kwa sababu ya vikwazo vya kiufundi. Kazi ya chinichini inatekelezwa tu kila dakika 5, kwa hivyo tumia kwa hatari yako mwenyewe.", + "Federation" : "Shirikisho", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Inapendekezwa sana kusanidi \"memcache.locking\" wakati Talk Federation imewashwa.", + "High-performance backend" : "Nyuma ya utendaji wa juu", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Hakuna mandharinyuma ya Utendaji wa Juu ambayo imesanidiwa - Kuendesha Nextcloud Talk bila utendakazi wa hali ya juu mizani tu kwa simu ndogo sana (usizidi washiriki 2-3). Tafadhali weka mipangilio ya nyuma ya Utendaji wa Juu ili kuhakikisha simu zilizo na washiriki wengi hufanya kazi bila matatizo.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Kuendesha hali ya \"conversation_cluster\" ya hali ya juu ya utendaji wa juu kumeacha kutumika na haitatumika tena katika toleo lijalo. Utendaji wa hali ya juu unaauni nguzo halisi siku hizi ambazo zinapaswa kutumika badala yake.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Kufafanua vipengele vingi vya nyuma vya utendaji wa juu kumeacha kutumika na hakutatumika tena katika toleo lijalo. Badala yake kizani cha kupakia kinapaswa kusanidiwa pamoja na seva zilizounganishwa za kuashiria na kusanidiwa katika mipangilio ya Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Ufunguo wa umma uliohifadhiwa wa algoriti iliyotumika %1$s hailingani na ufunguo wa faragha uliohifadhiwa. Endesha %2$s ili kurekebisha tatizo.", + "High-performance backend not configured correctly. Run %s for details." : "Utendaji wa hali ya juu haujasanidiwa ipasavyo. Endesha %s kwa maelezo.", + "High-performance backend not configured correctly" : "Utendaji wa hali ya juu haujasanidiwa ipasavyo", + "Error: Cannot connect to server" : "Hitilafu: Haiwezi kuunganisha kwenye seva", + "Error: Server did not respond with proper JSON" : "Hitilafu: Seva haikujibu kwa kutumia JSON sahihi", + "Error: Certificate expired" : "Hitilafu: Cheti kimekwisha muda wake", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hitilafu: Saa za mfumo za seva ya Nextcloud na seva ya nyuma ya utendakazi wa hali ya juu hazijasawazishwa. Tafadhali hakikisha kuwa seva zote mbili zimeunganishwa kwa seva ya saa au kusawazisha wakati wao wenyewe.", + "Could not get version" : "Haikuweza kupata toleo", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hitilafu: Toleo linaloendesha: {version}; Seva inahitaji kusasishwa ili iendane na toleo hili la Talk", + "Error: Server responded with: {error}" : "Hitilafu: Seva ilijibu kwa: {error}", + "Error: Unknown error occurred" : "Hitilafu: Hitilafu isiyojulikana imetokea", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Onyo: Toleo linaloendeshwa: {version}; Seva haiauni vipengele vyote vya toleo hili la Talk, vinakosa vipengele: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Inapendekezwa sana kusanidi akiba ya kumbukumbu wakati wa kuendesha Nextcloud Talk yenye utendakazi wa hali ya juu.", + "Client Push" : "Msukumo wa Mteja", + "Recording backend" : "Kurekodi nyuma", + "Using the recording backend requires a High-performance backend." : "Kutumia mazingira ya nyuma ya kurekodi kunahitaji utendakazi wa hali ya juu.", + "No recording backend configured" : "Hakuna mandharinyuma ya kurekodi iliyosanidiwa", + "SIP configuration" : "Usanidi wa SIP", + "Using the SIP functionality requires a High-performance backend." : "Kutumia utendakazi wa SIP kunahitaji utendakazi wa hali ya juu.", + "No SIP backend configured" : "Hakuna mazingira ya nyuma ya SIP yaliyosanidiwa", + "Invalid date, date format must be YYYY-MM-DD" : "Tarehe batili, umbizo la tarehe lazima liwe YYYY-MM-DD", + "Conversation not found" : "Mazungumzo hayapo", + "Path is already shared with this conversation" : "Njia tayari imeshirikiwa na mazungumzo haya", + "Chat, video & audio-conferencing using WebRTC" : "Piga gumzo, video na mikutano ya sauti kwa kutumia WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Piga gumzo, video na mikutano ya sauti kwa kutumia WebRTC\n\n* 💬 **Chat** Nextcloud Talk inakuja na soga rahisi ya maandishi, inayokuruhusu kushiriki au kupakia faili kutoka kwenye programu yako ya Nextcloud Files au kifaa cha karibu nawe na kutaja washiriki wengine.\n* 👥 **Simu za faragha, za kikundi, za umma na zilizolindwa na nenosiri!** Alika mtu, kikundi kizima au tuma kiungo cha umma ili kualika kwenye simu.\n* 🌐 **Mazungumzo ya Shirikisho** Piga gumzo na watumiaji wengine wa Nextcloud kwenye seva zao\n* 💻 **Kushiriki skrini!** Shiriki skrini yako na washiriki wa simu yako.\n* 🚀 **Muunganisho na programu zingine za Nextcloud** kama vile Faili, Kalenda, Hali ya Mtumiaji, Dashibodi, Mtiririko, Ramani, Kiteua Mahiri, Anwani, Staha na mengine mengi.\n* 🌉 **Sawazisha na masuluhisho mengine ya gumzo** Huku [Matterbridge](https://github.com/42wim/matterbridge/) ikiunganishwa katika Talk, unaweza kusawazisha kwa urahisi masuluhisho mengine mengi ya gumzo kwenye Nextcloud Talk na kinyume chake.", + "Leave call" : "Acha simu", + "Navigating away from the page will leave the call in {conversation}" : "Kusogeza mbali na ukurasa kutaacha simu ndani {conversation}", + "Stay in call" : "Kaa kwenye simu", + "Error occurred when getting the conversation information" : "Hitilafu ilitokea wakati wa kupata maelezo ya mazungumzo", + "Discuss this file" : "Jadili faili hii", + "Share this file with others to discuss it" : "Shiriki faili hii na wengine ili kuijadili", + "Share this file" : "Shiriki faili hii", + "Join conversation" : "Jiunge na mazungumzo", + "This conversation is password-protected." : "Mazungumzo haya yanalindwa kwa nenosiri.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Tumegundua majaribio mengi ya nenosiri batili kutoka kwa IP yako. Kwa hivyo jaribio lako linalofuata hupunguzwa hadi sekunde 30.", + "The password is wrong. Try again." : "Nenosiri si sahihi. Jaribu tena.", + "Password" : "Nenosiri", + "Submit" : "Wasilisha", + "Error requesting the password." : "Hitilafu katika kuomba nenosiri.", + "Request password" : "Omba nenosiri", + "This conversation has ended" : "Mazungumzo haya yameisha", + "Error occurred when joining the conversation" : "Hitilafu ilitokea wakati wa kujiunga na mazungumzo", + "Close Talk sidebar" : "Funga utepe wa Talk", + "Open Talk sidebar" : "Fungua utepe wa Talk", + "Everyone" : "Kila mmoja", + "Users and moderators" : "Watumiaji na wasimamizi", + "Moderators only" : "Wasimamizi pekee", + "Disable calls" : "Zima simu", + "Save changes" : "Hifadhi mabadiliko", + "Saving …" : "Inahifadhi...", + "Saved!" : "Imehifadhiwa", + "Limit to groups" : "Kikomo kwa vikundi", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wakati angalau kikundi kimoja kimechaguliwa, ni watu wa vikundi vilivyoorodheshwa pekee wanaoweza kuwa sehemu ya mazungumzo.", + "Guests can still join public conversations." : "Wageni bado wanaweza kujiunga na mazungumzo ya umma.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Watumiaji ambao hawawezi kutumia Talk tena bado wataorodheshwa kama washiriki katika mazungumzo yao ya awali na pia ujumbe wao wa gumzo utahifadhiwa.", + "Limit using Talk" : "Punguza kutumia Talk", + "Limit creating a public and group conversation" : "Punguza kuunda mazungumzo ya umma na ya kikundi", + "Limit creating conversations" : "Punguza kuunda mazungumzo", + "Limit starting a call" : "Punguza kuanzisha simu", + "Limit starting calls" : "Punguza simu za kuanza", + "When a call has started, everyone with access to the conversation can join the call." : "Simu inapoanza, kila mtu aliye na idhini ya kufikia mazungumzo anaweza kujiunga kwenye simu.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Vijibu vifuatavyo vimesakinishwa kwenye seva hii. Katika hati unaweza kupata maelezo jinsi ya {linkstart1}kuunda bot yako{linkend} au {linkstart2}orodha ya vijibu{linkend} ili kuwasha kwenye seva yako.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Hakuna vijibu vilivyosakinishwa kwenye seva hii. Katika hati unaweza kupata maelezo jinsi ya {linkstart1}kuunda bot yako{linkend} au {linkstart2}orodha ya vijibu{linkend} ili kuwasha kwenye seva yako.", + "Description is not provided" : "Maelezo hayajatolewa", + "Locked for moderators" : "Imefungwa kwa wasimamizi", + "Enabled" : "Washwa", + "Disabled" : "Zima", + "Bots settings" : "Mipangilio ya bots", + "State" : "State", + "Name" : "Jina", + "Last error" : "Hitilafu ya mwisho", + "Total errors count" : "Jumla ya makosa", + "Find more bots" : "Tafuta bots zaidi", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Seva zinazoaminika zinaweza kusanidiwa katika {linkstart}Ukurasa wa mipangilio ya kushiriki{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Soga na simu zilizoshirikishwa tayari zinafanya kazi. Ushughulikiaji wa kiambatisho unakuja katika toleo la baadaye.", + "Enable Federation in Talk app" : "Washa Shirikisho katika programu ya Talk", + "Permissions" : "Ruhusa", + "Allow users to be invited to federated conversations" : "Ruhusu watumiaji kualikwa kwenye mazungumzo ya shirikisho", + "Allow users to invite federated users into conversation" : "Ruhusu watumiaji kuwaalika watumiaji wa shirikisho katika mazungumzo", + "Only allow to federate with trusted servers" : "Ruhusu tu kushirikiana na seva zinazoaminika", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wakati angalau kundi moja limechaguliwa, ni watu wa makundi yaliyoorodheshwa pekee wanaoweza kualika watumiaji wa shirikisho kwenye mazungumzo.", + "Groups allowed to invite federated users" : "Vikundi vinavyoruhusiwa kualika watumiaji wa shirikisho", + "Select groups …" : "Chagua vikundi …", + "All messages" : "Jumbe zote", + "@-mentions only" : "@-mitajo pekee", + "Off" : "Imezimwa", + "General settings" : "Mipangilio ya jumla", + "Default notification settings" : "Mipangilio ya arifa chaguomsingi", + "Default group notification" : "Arifa ya kikundi chaguomsingi", + "Default group notification for new groups" : "Arifa chaguomsingi ya kikundi kwa vikundi vipya", + "Integration into other apps" : "Ujumuishaji katika programu zingine", + "Allow conversations on files" : "Ruhusu mazungumzo kwenye faili", + "Allow conversations on public shares for files" : "Ruhusu mazungumzo kwenye faili zilizoshirikiwa na umma", + "End-to-end encrypted calls" : "Simu zilizosimbwa kutoka mwisho hadi mwisho", + "Enable encryption" : "Wezesha usimbaji", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Simu zilizosimbwa kuanzia mwisho hadi mwisho zenye daraja la SIP lililosanidiwa zinahitaji toleo jipya zaidi la utendakazi wa hali ya juu na daraja la SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Wateja wa simu hawatumii simu zilizosimbwa kutoka mwisho hadi mwisho kwa sasa.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kwa kubofya kitufe kilicho hapo juu, habari iliyo kwenye fomu inatumwa kwa seva za Struktur AG. Unaweza kupata maelezo zaidi kwenye {linkstart}spreed.eu{linkend}.", + "Pending" : "Inasubiri", + "Error" : "Hitilafu", + "Blocked" : "Imezuiliwa", + "Active" : "Inayotumika", + "Expired" : "Imeisha muda", + "Never" : "Kamwe", + "The trial could not be requested. Please try again later." : "Jaribio halikuweza kuombwa. Tafadhali jaribu tena baadaye.", + "The account could not be deleted. Please try again later." : "Akaunti haikuweza kufutwa. Tafadhali jaribu tena baadaye.", + "Hosted High-performance backend" : "Seva ya nyuma yenye utendaji wa juu iliyohifadhiwa", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Mshirika wetu Struktur AG hutoa huduma ambapo seva mwenyeji inaweza kuombwa. Kwa hili unahitaji tu kujaza fomu iliyo hapa chini na Nextcloud yako itaomba. Mara baada ya seva kusanidiwa kwa ajili yako vitambulisho vitajazwa kiotomatiki. Hii itafuta mipangilio iliyopo ya seva ya kuashiria.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ikiwa akaunti yako ya nyuma yenye utendaji wa juu inajumuisha utendaji wa STUN na/au TURN, mipangilio itasasishwa ipasavyo.", + "URL of this Nextcloud instance" : "URL ya mfano huu wa Nextcloud", + "Full name of the user requesting the trial" : "Jina kamili la mtumiaji anayeomba jaribio", + "Email of the user" : "Barua pepe ya mtumiaji", + "Language" : "Lugha", + "Country" : "Nchi", + "Request signaling server trial" : "Omba majaribio ya seva ya kuashiria", + "You can see the current status of your hosted signaling server in the following table." : "Unaweza kuona hali ya sasa ya seva yako iliyopangishwa ya kuashiria katika jedwali lifuatalo.", + "Status" : "Wadhifa", + "Created at" : "Imetengenezwa katika", + "Expires at" : "Inaisha saa", + "Limits" : "Mipaka", + "STUN included" : "STUN imejumuishwa", + "Yes" : "Ndiyo", + "No" : "Hapana", + "TURN included" : "TURN imejumuishwa", + "Delete the signaling server account" : "Futa akaunti ya seva ya kuashiria", + "_%n user_::_%n users_" : ["%n user","%n watumiaji"], + "Installed version: {version}" : "Toleo lililosakinishwa: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Unaweza kusakinisha Matterbridge ili kuunganisha Nextcloud Talk kwa huduma zingine, tembelea {linkstart1}ukurasa wao wa GitHub{linkend} kwa maelezo zaidi. Kupakua na kusakinisha programu kunaweza kuchukua muda. Ikiisha, tafadhali isakinishe wewe mwenyewe kutoka kwa {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary ina ruhusa zisizo sahihi. Tafadhali hakikisha kuwa faili ya jozi ya Matterbridge inamilikiwa na mtumiaji sahihi na inaweza kutekelezwa. Inaweza kupatikana katika \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary haikupatikana au haikuweza kutekelezwa.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Unaweza pia kuweka njia ya Matterbridge binary kwa mikono kupitia usanidi. Angalia {linkstart}hati za muunganisho wa Matterbridge{linkend} kwa maelezo zaidi.", + "Downloading …" : "Inapakua...", + "Install Talk Matterbridge" : "Sakinisha Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Hitilafu ilitokea wakati wa kusakinisha programu ya Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Hitilafu ilitokea wakati wa kusakinisha Talk Matterbridge. Tafadhali isakinishe wewe mwenyewe", + "Failed to execute Matterbridge binary." : "Imeshindwa kutekeleza Matterbridge binary.", + "Matterbridge integration" : "Ujumuishaji wa Matterbridge", + "Enable Matterbridge integration" : "Washa muunganisho wa Matterbridge", + "Status: Checking connection" : "Hali: Inaangalia muunganisho", + "OK: Running version: {version}" : "Sawa: Toleo linaloendesha: {version}", + "Error: Server seems to be a Signaling server" : "Hitilafu: Seva inaonekana kama seva ya Kuashiria", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hitilafu: Saa za mfumo za seva ya Nextcloud na seva ya nyuma ya Kurekodi hazijasawazishwa. Tafadhali hakikisha kuwa seva zote mbili zimeunganishwa kwa seva ya saa au kusawazisha wakati wao wenyewe.", + "Recording backend URL" : "Inarekodi URL ya nyuma", + "Validate SSL certificate" : "Thibitisha cheti cha SSL", + "Delete this server" : "Futa seva hii", + "Test this server" : "Jaribu seva hii", + "Disabled for all calls" : "Imezimwa kwa simu zote", + "Enabled for all calls" : "Imewashwa kwa simu zote", + "Configurable on conversation level by moderators" : "Inaweza kusanidiwa kwa kiwango cha mazungumzo na wasimamizi", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Mipangilio ya PHP \"upload_max_filesize\" au \"post_max_size\" pekee itaruhusu kupakia faili hadi {maxUpload}.", + "Recording backend settings saved" : "Mipangilio ya mandharinyuma ya kurekodi imehifadhiwa", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Wasimamizi wataruhusiwa kuwezesha idhini kwenye kiwango cha mazungumzo. Idhini ya kurekodiwa itahitajika kwa kila mshiriki kabla ya kujiunga na kila simu kwenye mazungumzo haya.", + "The consent to be recorded will be required for each participant before joining every call." : "Idhini ya kurekodi itahitajika kwa kila mshiriki kabla ya kujiunga na kila simu.", + "The consent to be recorded is not required." : "Idhini ya kurekodi haihitajiki.", + "Recording backend configuration is only possible with a High-performance backend." : "Kurekodi usanidi wa mandharinyuma kunawezekana tu kwa utendakazi wa hali ya juu.", + "Add a new recording backend server" : "Ongeza seva mpya ya nyuma ya kurekodi", + "Shared secret" : "Siri iliyoshirikiwa", + "Recording consent" : "Idhini ya kurekodi", + "Recording transcription" : "Inarekodi unukuzi", + "Automatically transcribe call recordings with a transcription provider" : "Nakili rekodi za simu kiotomatiki na mtoaji huduma ya manukuu", + "Automatically summarize call recordings with transcription and summary providers" : "Fanya muhtasari wa rekodi za simu kiotomatiki na watoa huduma wa manukuu na muhtasari", + "SIP configuration saved!" : "Usanidi wa SIP umehifadhiwa!", + "SIP configuration is only possible with a High-performance backend." : "Usanidi wa SIP unawezekana tu kwa hali ya nyuma ya utendaji wa Juu.", + "Enable SIP Dial-out option" : "Wezesha chaguo la SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Seva ya kuashiria inahitaji kusasishwa ili kutumia kipengele cha SIP Dial-out kinachotumika.", + "Do not show SIP Dial-out caller number" : "Usionyeshe nambari ya mpigaji simu ya SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Nambari isiyojulikana inapaswa kuonekana kama \"isiyojulikana\" au \"nambari iliyozuiwa\" ili kumpigia simu mpokeaji", + "Dial-out number" : "Nambari ya kupiga", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Nambari iliyoumbizwa ya E164 inayotumika kama nambari ya mpigaji simu mbadala kwa simu zinazotoka", + "Dial-out prefix" : "Kiambishi awali cha kupiga", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Kiambishi awali kwa nambari ya mtumiaji iliyosanidiwa kwa simu zinazotoka (chaguo-msingi ni `+`)", + "Restrict SIP configuration" : "Zuia usanidi wa SIP", + "Enable SIP configuration" : "Wezesha usanidi wa SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Watumiaji wa vikundi vifuatavyo pekee ndio wanaoweza kuwezesha SIP katika mazungumzo wanayosimamia", + "Phone number (Country)" : "Nambari ya simu (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Taarifa hii hutumwa kwa barua pepe za mwaliko na pia kuonyeshwa kwenye utepe kwa washiriki wote.", + "Nextcloud base URL" : " URL ya Nextcloud base", + "Talk Backend URL" : "URL ya Talk Backend ", + "WebSocket URL" : "URL ya WebSocket", + "Available features" : "Vipengele vinavyopatikana", + "Error: Websocket connection failed" : "Hitilafu: Muunganisho wa Websocket haukufaulu", + "Error code" : "Msimbo wa hitilafu", + "Error message" : "Ujumbe wa hitilafu", + "Error: Websocket connection failed. Check browser console" : "Hitilafu: Muunganisho wa Websocket haukufaulu. Angalia koni ya kivinjari", + "High-performance backend URL" : "URL ya nyuma ya utendaji wa juu", + "Missing High-performance backend warning hidden" : "Onyo la utendakazi wa hali ya juu halipo limefichwa", + "High-performance backend settings saved" : "Mipangilio ya utendakazi wa hali ya juu imehifadhiwa", + "Nextcloud Talk setup not complete" : "Usanidi wa Nextcloud Talk haujakamilika", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tafadhali kumbuka kuwa katika simu zilizo na zaidi ya washiriki 2 bila utendakazi wa hali ya juu, kuna uwezekano mkubwa wa washiriki kukumbana na matatizo ya muunganisho na kusababisha mzigo mkubwa kwenye vifaa vinavyoshiriki.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Sakinisha mandhari ya nyuma ya Utendaji wa Juu ili kuhakikisha simu zilizo na washiriki wengi hufanya kazi kwa urahisi.", + "Nextcloud portal" : "Lango la Nextcloud", + "Quick installation guide" : "Mwongozo wa usakinishaji wa haraka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Utendaji wa hali ya juu unahitajika kwa simu na mazungumzo na washiriki wengi. Bila ya nyuma, washiriki wote wanapaswa kupakia video zao kibinafsi kwa kila mshiriki, ambayo itawezekana kusababisha matatizo ya muunganisho na mzigo mkubwa kwenye vifaa vinavyoshiriki.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Inapendekezwa sana kusanidi akiba iliyosambazwa unapotumia Nextcloud Talk yenye utendakazi wa hali ya juu.", + "Add High-performance backend server" : "Ongeza seva ya nyuma ya utendaji wa juu", + "Warn about connectivity issues in calls with more than 2 participants" : "Onya kuhusu matatizo ya muunganisho katika simu zilizo na zaidi ya washiriki 2", + "STUN server URL" : "URL ya seva ya STUN", + "The server address is invalid" : "Anwani ya seva si sahihi", + "STUN settings saved" : "Mipangilio ya STUN imehifadhiwa", + "STUN servers" : "Seva za STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Seva ya STUN hutumiwa kubainisha anwani ya IP ya umma ya washiriki nyuma ya kipanga njia.", + "Add a new STUN server" : "Ongeza seva mpya ya STUN", + "{schema} scheme must be used with a domain" : "{schema} mpango lazima utumike na kikoa", + "{option1} and {option2}" : "{option1} na {option2}", + "{option} only" : "{option}tu ", + "OK: Successful ICE candidates returned by the TURN server" : "SAWA: Wagombeaji wa ICE waliofaulu walirudishwa na seva ya TURN", + "Error: No working ICE candidates returned by the TURN server" : "Hitilafu: Hakuna wagombeaji wa ICE wanaofanya kazi waliorejeshwa na seva ya TURN", + "Testing whether the TURN server returns ICE candidates" : "Inajaribu kama seva ya TURN inarejesha watahiniwa wa ICE", + "TURN server schemes" : "Mifumo ya seva ya TURN", + "TURN server URL" : "URL ya seva ya TURN", + "TURN server secret" : "Siri ya seva ya TURN", + "TURN server protocols" : "Itifaki za seva ya TURN ", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Seva ya TURN inatumika kuwakilisha trafiki kutoka kwa washiriki nyuma ya ngome. Iwapo washiriki binafsi hawawezi kuunganisha kwa wengine, kuna uwezekano mkubwa wa kuhitajika seva ya TURN. Angalia {linkstart}hati hizi{linkend} kwa maagizo ya usanidi.", + "TURN settings saved" : "Mipangilio ya TURN imehifadhiwa", + "TURN servers" : "Seva za TURN ", + "Add a new TURN server" : "Ongeza seva mpya ya TURN", + "Failed" : "Imeshindwa", + "OK" : "SAWA", + "Checking …" : "Inakagua...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Imeshindwa: WebAssembly imezimwa au haitumiki katika kivinjari hiki. Tafadhali washa WebAssembly au tumia kivinjari chenye usaidizi ili kufanya ukaguzi.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Imeshindwa: faili za \".wasm\" na \".tflite\" hazikurejeshwa ipasavyo na seva ya wavuti. Tafadhali angalia sehemu ya \"Mahitaji ya Mfumo\" katika hati za Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "SAWA: faili za \".wasm\" na \".tflite\" zilirejeshwa ipasavyo na seva ya wavuti.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Inaonekana kwamba usanidi wa PHP na Apache hauendani. Tafadhali kumbuka kuwa PHP inaweza kutumika tu na moduli ya MPM_PREFORK na PHP-FPM inaweza kutumika tu na sehemu ya MPM_EVENT.", + "Web server setup checks" : "Ukaguzi wa usanidi wa seva ya wavuti", + "Files required for virtual background can be loaded" : "Faili zinazohitajika kwa mandharinyuma pepe zinaweza kupakiwa", + "Federated user" : "Mtumiaji aliyeshirikishwa", + "Assign participants to rooms" : "Wape washiriki vyumba", + "Configure breakout rooms" : "Sanidi vyumba vya vipindi vifupi", + "Number of breakout rooms" : "Idadi ya vyumba vifupi", + "You can create from 1 to 20 breakout rooms." : "Unaweza kuunda kutoka kwa vyumba 1 hadi 20 vya vipindi vifupi.", + "Assignment method" : "Mbinu ya kukabidhi", + "Automatically assign participants" : "Wape washiriki kiotomatiki", + "Manually assign participants" : "Wagawie washiriki wewe mwenyewe", + "Allow participants to choose" : "Ruhusu washiriki kuchagua", + "Create rooms" : "Unda vyumba", + "Confirm" : "Thibitisha", + "Create breakout rooms" : "Unda vyumba vya vikundi vidogo", + "Reset" : "Pangilia upya", + "Delete breakout rooms" : "Futa vyumba vya vikundi", + "Room {roomNumber}" : "Chumba {roomNumber}", + "Current breakout rooms and settings will be lost" : "Vyumba na mipangilio ya sasa ya vipindi vifupi itapotea", + "Cancel" : "Ghairi", + "Unassigned participants" : "Washiriki ambao hawajakabidhiwa", + "Back" : "Rudi", + "Assign" : "Kabidhi", + "Add participant \"{user}\"" : "Ongeza mshiriki \"{user}\"", + "Now" : "Sasa", + "Invalid calendar selected" : "Kalenda batili imechaguliwa", + "Invalid start time selected" : "Muda batili wa kuanza umechaguliwa", + "Invalid end time selected" : "Umechagua muda wa mwisho usio sahihi", + "Unknown error occurred" : "Hitilafu isiyojulikana imetokea", + "Sending no invitations" : "Hakuna mwaliko unaotumwa", + "{participant0} will receive an invitation" : "{participant0} atapokea mwaliko", + "{participant0} and {participant1} will receive invitations" : "{participant0} na {participant1} watapokea mialiko", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n other will receive invitations","{participant0}, {participant1} na %n wengine watapokea mialiko"], + "Invite {user}" : "Alika {user}", + "Invite all users and emails in this conversation" : "Alika watumiaji na barua pepe zote katika mazungumzo haya", + "Meeting created" : "Mkutano umeundwa", + "Upcoming meetings" : "Mikutano ijayo", + "Loading …" : "Inapakia", + "No upcoming meetings" : "Hakuna mikutano ijayo", + "Schedule a meeting" : "Panga mkutano", + "Meeting title" : "Kichwa cha mkutano", + "From" : "Tangu/ kutoka", + "To" : "Mpaka/ hadi", + "Calendar" : "Kalenda", + "Attendees" : "Wahudhuriaji", + "No other participants to send invitations to." : "Hakuna washiriki wengine wa kutuma mialiko kwao.", + "Add attendees" : "Ongeza wahudhuriaji", + "Save" : "Hifadhi", + "Search participants" : "Tafuta washiriki", + "No results" : "Hakuna matokeo", + "Done" : "Imefanyika", + "Disable live transcription" : "Zima unukuzi wa moja kwa moja", + "Raise hand" : "Inua mkono", + "Raise hand (R)" : "Inua mkono (R)", + "Lower hand" : "Shusha mkono", + "Lower hand (R)" : "Shusha mkono (R)", + "Exit full screen (F)" : "Ondoka kwenye skrini nzima (F)", + "Full screen (F)" : "Skrini nzima (F)", + "Speaker view" : "Mtazamo wa mzungumzaji", + "Grid view" : "Mwonekano wa gridi", + "Error when trying to load the available live transcription languages" : "Hitilafu wakati wa kujaribu kupakia lugha zinazopatikana za manukuu ya moja kwa moja", + "Failed to enable live transcription" : "Imeshindwa kuwasha unukuzi wa moja kwa moja", + "Recording consent is required" : "Idhini ya kurekodi inahitajika", + "This conversation is read-only" : "Mazungumzo haya ni ya kusoma tu", + "Conversation not found or not joined" : "Mazungumzo hayajapatikana au hayajaunganishwa", + "Lobby is still active and you're not a moderator" : "Lobby bado inatumika na wewe si msimamizi", + "Connection failed" : "Muunganisho haukufaulu", + "Reload" : "Pakia upya", + "{nickName} raised their hand." : "{nickName} waliinua mikono yao.", + "A participant raised their hand." : "Mshiriki aliinua mkono wao.", + "Collapse stripe" : "Kunja mstari", + "Expand stripe" : "Panua mstari", + "Previous page of videos" : "Ukurasa uliotangulia wa video", + "Next page of videos" : "Ukurasa unaofuata wa video", + "Connecting …" : "Inaunganisha...", + "Calling …" : "Inaghairi...", + "Waiting for {user} to join the call" : "Inasubiri {user} ajiunge na simu", + "Waiting for others to join the call …" : "Inasubiri wengine wajiunge na simu…", + "You can invite others in the participant tab of the sidebar" : "Unaweza kuwaalika wengine katika kichupo cha mshiriki cha utepe", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Unaweza kuwaalika wengine katika kichupo cha mshiriki cha utepe au kushiriki kiungo hiki ili kuwaalika wengine!", + "Share this link to invite others!" : "Shiriki kiungo hiki ili kuwaalika wengine!", + "Copy link" : "Nakili kiungio", + "You are not allowed to enable audio" : "Huruhusiwi kuwasha sauti", + "No audio. Click to select device" : "Hakuna sauti. Bofya ili kuchagua kifaa", + "Mute audio" : "Zima sauti", + "Mute audio (M)" : "Zima sauti (M)", + "Unmute audio" : "Rejesha sauti", + "Unmute audio (M)" : "Rejesha sauti (M)", + "None" : "Hakuna", + "Select a microphone" : "Chagua maikrofoni", + "Select a speaker" : "Chagua mzungumzaji", + "Check devices" : "Angalia vifaa", + "Access to camera was denied" : "Ufikiaji wa kamera ulikataliwa", + "Error while accessing camera: It is likely in use by another program" : "Hitilafu wakati wa kufikia kamera: Inawezekana inatumiwa na programu nyingine", + "Error while accessing camera" : "Hitilafu wakati wa kufikia kamera", + "You have been muted by a moderator" : "Umenyamazishwa na msimamizi", + "Hide presenter video" : "Ficha video ya mtangazaji", + "You are not allowed to enable video" : "Huruhusiwi kuwezesha video", + "No video. Click to select device" : "Hakuna video. Bofya ili kuchagua kifaa", + "Disable video" : "Zima video", + "Disable video (V)" : "Zima video (V)", + "Enable video" : "Washa video", + "Enable video (V)" : " Washa video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video - Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video (V) - Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video. Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Select a video device" : "Chagua kifaa cha video", + "Show presenter" : "Onyesha mtangazaji", + "You" : "Wewe", + "Mute" : "Zima", + "Muted" : "Washa", + "Show screen" : "Onyesha skrini", + "Stop following" : "Acha kufuata", + "Connection could not be established …" : "Muunganisho haukuweza kuanzishwa...", + "Connection was lost and could not be re-established …" : "Muunganisho ulipotea na haukuweza kuanzishwa tena ...", + "Connection could not be established. Trying again …" : "Muunganisho haukuweza kuanzishwa. Inajaribu tena...", + "Connection lost. Trying to reconnect …" : "Muunganisho umepotea. Inajaribu kuunganisha tena...", + "Connection problems …" : "Matatizo ya muunganisho…", + "Collapse" : "Vunja", + "Expand" : "Panua", + "You need to be logged in to upload files" : "Unahitaji kuingia ili kupakia faili", + "Drop your files to upload" : "Dondosha mafaili yako kupakia", + "Conversation messages" : "Jumbe za mazungumzo", + "Scroll to bottom" : "Tembeza hadi chini", + "Post message" : "Chapisha ujumbe", + "Federated conversation" : "Mazungumzo ya shirikisho", + "Public conversation" : "Mazungumzo ya umma", + "Favorite" : "Kipendwa", + "Banned users" : "Watumiaji waliopigwa marufuku", + "Manage the list of banned users in this conversation." : "Dhibiti orodha ya watumiaji waliopigwa marufuku katika mazungumzo haya.", + "Manage bans" : "Dhibiti marufuku", + "No banned users" : "Hakuna watumiaji waliopigwa marufuku", + "Banned by:" : "Imepigwa marufuku na:", + "Date:" : "Tarehe:", + "Note:" : "Kumbuka:", + "Hide details" : "Ficha maelezo", + "Show details" : "Onesha maelezo", + "Unban" : "Batilisha marufuku", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Unaweza kubadilisha kichwa na maelezo katika {linkstart}Kalenda ↗{linkend}.", + "Error while updating conversation name" : "Hitilafu imetokea wakati wa kusasisha jina la mazungumzo", + "Error while updating conversation description" : "Hitilafu imetokea wakati wa kusasisha maelezo ya mazungumzo", + "Enter a name for this conversation" : "Weka jina la mazungumzo haya", + "Edit conversation name" : "Hariri jina la mazungumzo", + "Edit conversation description" : "Hariri maelezo ya mazungumzo", + "Enter a description for this conversation" : "Weka maelezo ya mazungumzo haya", + "Picture" : "Picha", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Vijibu vifuatavyo vinaweza kuwashwa kwenye mazungumzo haya. Wasiliana na utawala wako ili usakinishe roboti nyingi zaidi kwenye seva hii.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Hakuna vijibu vilivyosakinishwa kwenye seva hii. Wasiliana na utawala wako ili usakinishe roboti kwenye seva hii.", + "Disable" : "Zima", + "Enable" : "Wezesha", + "Breakout rooms" : "Vyumba vya vikundi", + "Manage breakout rooms" : "Dhibiti vyumba vifupi", + "Set up breakout rooms for this conversation" : "Sanidi vyumba vya vikundi kwa mazungumzo haya", + "Please select a valid PNG or JPG file" : "Tafadhali chagua faili sahihi ya PNG au JPG", + "Choose your conversation picture" : "Chagua picha yako ya mazungumzo", + "Choose" : "Chagua", + "Error setting conversation picture" : "Hitilafu katika kuweka picha ya mazungumzo", + "Could not set the conversation picture: {error}" : "Haikuweza kuweka picha ya mazungumzo: {error}", + "Error cropping conversation picture" : "Hitilafu katika kupunguza picha ya mazungumzo", + "Error removing conversation picture" : "Hitilafu katika kuondoa picha ya mazungumzo", + "Set emoji as conversation picture" : "Weka emoji kama picha ya mazungumzo", + "Set background color for conversation picture" : "Weka rangi ya usuli kwa picha ya mazungumzo", + "Upload conversation picture" : "Pakia picha ya mazungumzo", + "Choose conversation picture from files" : "Chagua picha ya mazungumzo kutoka kwa faili", + "Remove conversation picture" : "Ondoa picha ya mazungumzo", + "The file must be a PNG or JPG" : "Faili lazima iwe PNG au JPG", + "Set picture" : "Weka picha", + "Default permissions modified for {conversationName}" : "Ruhusa chaguomsingi zimerekebishwa kwa {conversationName}", + "Could not modify default permissions for {conversationName}" : "Haikuweza kurekebisha ruhusa chaguomsingi za {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Hariri ruhusa za msingi kwa washiriki katika mazungumzo haya. Mipangilio hii haiathiri wasimamizi.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Kila mara ruhusa zinaporekebishwa katika sehemu hii, ruhusa maalum zilizotolewa hapo awali kwa washiriki binafsi zitapotea.", + "All permissions" : "Ruhusa zote", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Washiriki wana ruhusa ya kuanzisha simu, kujiunga na simu, kuwasha sauti na video na kushiriki skrini.", + "Restricted" : "Imezuiliwa", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Washiriki wanaweza kujiunga na simu, lakini hawawezi kuwasha sauti wala video wala kushiriki skrini hadi msimamizi awape ruhusa mwenyewe.", + "Advanced permissions" : "Ruhusa za hali ya juu", + "Edit permissions" : "Hariri ruhusa", + "Conversation settings" : "Mipangilio ya mazungumzo", + "Basic Info" : "Maelezo ya Msingi", + "Personal" : "Binafsi", + "Moderation" : "Usimamizi", + "Setup overview" : "Weka muhtasari", + "Live transcription" : "Unukuzi wa moja kwa moja", + "Enable live transcription" : "Washa unukuzi wa moja kwa moja", + "Breakout Rooms" : "Vyumba vya Kuzuka", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Eneo la hatari", + "Archive conversation" : "Hifadhi mazungumzo", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Mazungumzo yaliyohifadhiwa kwenye kumbukumbu hufichwa kutoka kwa orodha ya mazungumzo kwa chaguo-msingi. Hata hivyo, bado yataonekana unapotafuta jina la mazungumzo au kufikia orodha ya mazungumzo yaliyohifadhiwa kwenye kumbukumbu.", + "Do you really want to leave \"{displayName}\"?" : "Je, kweli unataka kuondoka \"{displayName}\"?", + "You can archive this conversation instead." : "Unaweza kuweka mazungumzo haya kwenye kumbukumbu badala yake.", + "Leave conversation" : "Acha mazungumzo", + "You need to promote a new moderator before you can leave the conversation" : "Unahitaji kutangaza msimamizi mpya kabla ya kuondoka kwenye mazungumzo", + "Delete conversation" : "Futa mazungumzo", + "Do you really want to delete \"{displayName}\"?" : "Je, kweli unataka kufuta \"{displayName}\"?", + "Error while deleting conversation" : "Hitilafu wakati wa kufuta mazungumzo", + "Delete all chat messages" : "Futa ujumbe wote wa gumzo", + "Do you really want to delete all messages in \"{displayName}\"?" : "Je, kweli unataka kufuta barua pepe zote katika \"{displayName}\"?", + "Error while clearing chat history" : "Hitilafu wakati wa kufuta historia ya gumzo", + "Be careful, these actions cannot be undone." : "Kuwa mwangalifu, vitendo hivi haviwezi kutenduliwa.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Mara tu mazungumzo yamesalia, ili kujiunga tena na mazungumzo yaliyofungwa, mwaliko unahitajika. Mazungumzo ya wazi yanaweza kuunganishwa tena wakati wowote.", + "Permanently delete this conversation." : "Futa mazungumzo haya kabisa.", + "Delete chat messages" : "Futa ujumbe wa gumzo", + "Permanently delete all the messages in this conversation." : "Futa kabisa ujumbe wote katika mazungumzo haya.", + "_%n hour_::_%n hours_" : ["%n hour","%nmasaa "], + "_%n day_::_%n days_" : ["%n day","%n siku "], + "_%n week_::_%n weeks_" : ["%n week","%n wiki "], + "Custom expiration time" : "Muda maalum wa kuisha", + "Message expiration disabled" : "Muda wa kuisha kwa ujumbe umezimwa", + "Message expiration set: {duration}" : "Muda wa kuisha kwa ujumbe umewekwa: {duration}", + "Error when trying to set message expiration" : "Hitilafu wakati wa kujaribu kuweka muda wa mwisho wa ujumbe", + "Message expiration" : "Muda wa ujumbe kuisha", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Muda wa ujumbe wa gumzo unaweza kuisha baada ya muda fulani. Kumbuka: Faili zinazoshirikiwa kwenye gumzo hazitafutwa kwa mmiliki, lakini hazitashirikiwa tena kwenye mazungumzo.", + "Set message expiration" : "Weka muda wa kuisha kwa ujumbe", + "Current message expiration" : "Muda wa kuisha kwa ujumbe wa sasa", + "Password copied to clipboard" : "Nenosiri limenakiliwa kwenye ubao wa kunakili", + "Password could not be copied" : "Nenosiri halikuweza kunakiliwa", + "Guest access" : "Ufikiaji wa mgeni", + "Breakout rooms are not allowed in public conversations." : "Vyumba vifupi haviruhusiwi katika mazungumzo ya umma.", + "Allow guests to join this conversation via link" : "Ruhusu wageni wajiunge na mazungumzo haya kupitia kiungo", + "Password protection" : "Ulinzi wa nenosiri", + "This conversation is password-protected. Guests need password to join" : "Mazungumzo haya yanalindwa kwa nenosiri. Wageni wanahitaji nenosiri ili kujiunga", + "Password protection is needed for public conversations" : "Ulinzi wa nenosiri unahitajika kwa mazungumzo ya umma", + "Set a password" : "Weka nenosiri", + "Change password" : "Change password", + "Enter new password" : "Ingiza nenosiri jipya", + "Save password" : "Hifadhi nenosiri", + "Copy password" : "Nakili nenosiri", + "Guests are allowed to join this conversation via link" : "Wageni wanaruhusiwa kujiunga na mazungumzo haya kupitia kiungo", + "Guests are not allowed to join this conversation" : "Wageni hawaruhusiwi kujiunga na mazungumzo haya", + "Resend invitations" : "Tuma mialiko upya", + "This conversation is open to both registered users and users created with the Guests app" : "Mazungumzo haya yako wazi kwa watumiaji na watumiaji waliojiandikisha yaliyoundwa na programu ya Wageni", + "This conversation is open to registered users" : "Mazungumzo haya yamefunguliwa kwa watumiaji waliojiandikisha", + "This conversation is limited to the current participants" : "Mazungumzo haya ni ya washiriki wa sasa pekee", + "You opened the conversation to both registered users and users created with the Guests app" : "Umefungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "Error occurred when opening or limiting the conversation" : "Hitilafu ilitokea wakati wa kufungua au kupunguza mazungumzo", + "Open conversation to registered users, showing it in search results" : "Fungua mazungumzo kwa watumiaji waliojiandikisha, ukiyaonyesha katika matokeo ya utafutaji", + "Also open to users created with the Guests app" : "Wazi pia kwa watumiaji walioundwa na programu ya Wageni", + "Open conversation" : "Mazungumzo ya wazi", + "Set language spoken in calls" : "Weka lugha inayozungumzwa katika simu", + "Languages could not be loaded" : "Lugha hazikuweza kupakiwa", + "Loading languages …" : "Inapakia lugha  …", + "Invalid language" : "Lugha batili", + "Default language (English)" : "Lugha chaguo-msingi (Kiingereza)", + "Default live transcription language set" : "Seti chaguomsingi ya lugha ya manukuu ya moja kwa moja", + "Live transcription language set: {languageName}" : "Seti ya lugha ya manukuu ya moja kwa moja: {languageName}", + "Error when trying to set live transcription language" : "Hitilafu wakati wa kujaribu kuweka lugha ya manukuu ya moja kwa moja", + "Start time: {date}" : "Muda wa kuanza: {date}", + "Start time has been updated" : "Muda wa kuanza umesasishwa", + "Error occurred while updating start time" : "Hitilafu ilitokea wakati wa kusasisha muda wa kuanza", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Kuwasha ushawishi kutaondoa wasio wasimamizi kwenye simu inayoendelea.", + "Enable lobby, restricting the conversation to moderators" : "Washa kushawishi, ukizuia mazungumzo kwa wasimamizi", + "Meeting start time" : "Muda wa kuanza kwa mkutano", + "Start time (optional)" : "Muda wa kuanza (optional)", + "Import email participants" : "Ingiza washiriki wa barua pepe", + "You can import a list of email participants from a CSV file." : "Unaweza kuleta orodha ya washiriki wa barua pepe kutoka katika faili ya CSV.", + "Poll drafts" : "Rasimu za kura", + "Browse poll drafts" : "Vinjari rasimu za kura", + "Error occurred when locking the conversation" : "Hitilafu ilitokea wakati wa kufunga mazungumzo", + "Error occurred when unlocking the conversation" : "Hitilafu ilitokea wakati wa kufungua mazungumzo", + "Lock conversation" : "Funga mazungumzo", + "This will also terminate the ongoing call." : "Hii pia itasitisha simu inayoendelea.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Funga mazungumzo ili kuzuia mtu yeyote kutuma ujumbe au kuanzisha simu", + "Edit" : "Hariri", + "More information" : "Taarifa zaidi", + "Delete" : "Futa", + "Add new bridged channel to current conversation" : "Ongeza kituo kipya kilichounganishwa kwenye mazungumzo ya sasa", + "unknown state" : "hali isiyojulikana", + "running" : "inafanya kazi", + "not running, check Matterbridge log" : "Haifanyi kazi, angalia logi ya Matterbridge", + "not running" : "Haifanyi kazi", + "Bridge saved" : "Daraja lililohifadhiwa", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Unaweza kuunganisha vituo kutoka kwa mifumo mbalimbali ya ujumbe wa papo hapo ukitumia Matterbridge.", + "More info on Matterbridge" : "Pata maelezo zaidi kuhusu Matterbridge", + "Messaging systems" : "Mifumo ya ujumbe", + "Enable bridge" : "Washa daraja", + "Show Matterbridge log" : "Onyesha kumbukumbu ya Matterbridge", + "Log content" : "Maudhui ya kumbukumbu", + "Only moderators are allowed to mention @all" : "Wasimamizi pekee wanaruhusiwa kutaja @ wote", + "All participants are allowed to mention @all" : "Washiriki wote wanaruhusiwa kutaja @wote", + "Participants are now allowed to mention @all." : "Washiriki sasa wanaruhusiwa kutaja @wote.", + "Mentioning @all has been limited to moderators." : "Kutaja @all kumepunguzwa kwa wasimamizi.", + "Allow participants to mention @all" : "Ruhusu washiriki kutaja @wote", + "Mention permissions" : "Taja ruhusa", + "Notifications" : "Arifa", + "Notify about calls in this conversation" : "Arifu kuhusu simu katika mazungumzo haya", + "Important conversation" : "Mazungumzo muhimu", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Usisumbue\" hali ya mtumiaji inapuuzwa kwa mazungumzo muhimu", + "Sensitive conversation" : "Mazungumzo nyeti", + "Message preview will be disabled in conversation list and notifications" : "Onyesho la kuchungulia la ujumbe litazimwa katika orodha ya mazungumzo na arifa", + "Recording consent is required for calls in this conversation" : "Idhini ya kurekodi inahitajika kwa simu katika mazungumzo haya", + "Recording consent is not required for calls in this conversation" : "Idhini ya kurekodi haihitajiki kwa simu katika mazungumzo haya", + "Recording consent requirement was updated" : "Masharti ya idhini ya kurekodi yalisasishwa", + "Error occurred while updating recording consent" : "Hitilafu ilitokea wakati wa kusasisha idhini ya kurekodi", + "Recording Consent" : "Idhini ya Kurekodi", + "Recording consent cannot be changed once a call or breakout session has started." : "Idhini ya kurekodi haiwezi kubadilishwa mara tu simu au kipindi cha muhula kitakapoanza.", + "Require recording consent before joining call in this conversation" : "Inahitaji idhini ya kurekodi kabla ya kujiunga na simu kwenye mazungumzo haya", + "Recording consent is required for all calls" : "Idhini ya kurekodi inahitajika kwa simu zote", + "SIP dial-in is now possible without PIN requirement" : "Upigaji simu wa SIP sasa unawezekana bila hitaji la PIN", + "SIP dial-in is now enabled" : "Upigaji simu wa SIP sasa umewezeshwa", + "SIP dial-in is now disabled" : "Upigaji simu wa SIP sasa umezimwa", + "Error occurred when enabling SIP dial-in" : "Hitilafu ilitokea wakati wa kuwezesha upigaji simu wa SIP", + "Error occurred when disabling SIP dial-in" : "Hitilafu ilitokea wakati wa kuzima upigaji simu wa SIP", + "Phone and SIP dial-in" : "Upigaji simu na SIP", + "Enable phone and SIP dial-in" : "Washa upigaji simu na SIP", + "Allow to dial-in without a PIN" : "Ruhusu kupiga simu bila PIN", + "Ongoing" : "Inaendelea", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person accepted","%n watu walikubali"], + "_%n person declined_::_%n people declined_" : ["%n person declined","%n watu walikataa"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachment","na viambatisho %n vingine"], + "With {displayName}" : "Na {displayName}", + "In {conversation}" : "Katika {conversation}", + "View attachment" : "Tazama kiambatisho", + "Join" : "Jiunge", + "View conversation" : "Tazama mazungumzo", + "View event on Calendar" : "Tazama tukio kwenye Kalenda", + "Error while creating the conversation" : "Hitilafu wakati wa kuunda mazungumzo", + "Hello, {displayName}" : "Hallo, {displayName}", + "Start meeting now" : "Anza mkutano sasa", + "Give your meeting a title" : "Upe kichwa mkutano wako", + "Create and copy link" : "Unda na unakili kiungo", + "Create a new conversation" : "Tengeneza mazungumzo mapya", + "Join open conversations" : "Jiunge mazungumzo ya wazi", + "Call a phone number" : "Piga nambari ya simu", + "Scroll backward" : "Rudisha nyuma", + "Scroll forward" : "Sogeza mbele", + "Schedule meetings" : "Panga mikutano", + "You don't have any upcoming meetings" : "Huna mikutano yoyote inayokuja", + "Open calendar" : "Fungua kalenda", + "Unread mentions" : "Mitajo ambayo haijasomwa", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Barua pepe ulizotajwa zitaonekana hapa. Unaweza kutaja watu kwa kuandika @ ikifuatiwa na majina yao", + "Upcoming reminders" : "Vikumbusho vijavyo", + "Message reminders" : "Vikumbusho vya ujumbe", + "Set a reminder on a message to be notified" : "Weka kikumbusho kwenye ujumbe utakaoarifiwa", + "Start a group conversation" : "Anzisha mazungumzo ya kikundi", + "Create conversation" : "Tengeneza mazungumzo", + "Enter your name" : "Ingiza jina lako", + "Submit name and join" : "Toa jina na ujiunge", + "Do you already have an account?" : "Je, tayari una akaunti?", + "Log in" : "Ingia", + "Error while verifying uploaded file" : "Hitilafu wakati wa kuthibitisha faili iliyopakiwa", + "Uploaded file is verified" : "Faili iliyopakiwa imethibitishwa", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Umbizo la maudhui ni thamani zilizotenganishwa kwa koma (CSV):
- Mstari wa kichwa unahitajika na lazima ulingane na \"jina\",\"barua pepe\" au \"barua pepe\"
tu - Ingizo moja kwa kila mstari (k.m. \"John Doe\",john@example.tld\")", + "Participants added successfully" : "Washiriki waliongezwa kwa mafanikio", + "Error while adding participants" : "Hitilafu wakati wa kuongeza washiriki", + "Import a file" : "Ingiza faili", + "Browse" : "Vinjari", + "Verifying uploaded file …" : "Inathibitisha faili iliyopakiwa...", + "This might take a moment" : "Hii inaweza kuchukua muda", + "Send invitations" : "Tuma mialiko", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid email","%n barua pepe zisizo sahihi"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate","%n barua pepe tayari zimeagizwa kutoka nje au nakala"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation can be sent","mialiko %n inaweza kutumwa"], + "An error occurred while calling a phone number" : "Hitilafu ilitokea wakati wa kupiga nambari ya simu", + "Phone number could not be called: {error}" : "Nambari ya simu haikuweza kuitwa: {error}", + "Phone number could not be called" : "Nambari ya simu haikuweza kuitwa", + "Search participants or phone numbers" : "Tafuta washiriki au nambari za simu", + "Creating the conversation …" : "Inaunda mazungumzo...", + "Mark as read" : "Weka alama kama iliyosomwa", + "Mark as unread" : "Weka alama kama haijasomwa", + "Remove from favorites" : "Ondoa kutoka katika vipendwa", + "Add to favorites" : "Ongeza kwenye vipendwa", + "Unarchive conversation" : "Ondoa mazungumzo kwenye kumbukumbu", + "Ignore \"Do not disturb\"" : "Puuza \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "Unahitaji kutangaza msimamizi mpya kabla ya kuondoka kwenye mazungumzo.", + "Conversation actions" : "Vitendo vya mazungumzo", + "Notify about calls" : "Arifu kuhusu simu", + "Hide message text" : "Ficha maandishi ya ujumbe", + "Pending invitations" : "Mialiko inayosubiri", + "From {user} at {remoteServer}" : "Kutoka {user} kwenye {remoteServer}", + "Decline invitation" : "Kataa mwaliko", + "Accept invitation" : "Kubali mwaliko", + "No pending invitations" : "Hakuna mialiko inayosubiri", + "Home" : "Nyumbani", + "Unread" : "Haijasomwa", + "Mentions" : "Mitajo", + "Meetings" : "Mikutano", + "Alphabetically" : "Kialfabeti", + "No followed threads" : "Hakuna nyuzi zinazofuatwa", + "No matches found" : "Hakuna ulingano uliopatikana", + "No conversations found" : "Hakuna mazungumzo yaliyopatikana", + "You have no archived conversations." : "Huna mazungumzo yaliyohifadhiwa kwenye kumbukumbu.", + "Subscribe to an existing thread or start your own." : "Jiandikishe kwa mazungumzo yaliyopo au uanzishe yako.", + "You have no unread mentions." : "Huna mtaji ambao haujasomwa.", + "You have no unread messages." : "Huna ujumbe ambao haujasomwa.", + "An error occurred while performing the search" : "Hitilafu ilitokea wakati wa kutafuta", + "Conversation list" : "Orodha ya mazungumzo", + "Filter conversations by" : "Chuja mazungumzo kwa", + "Unread messages" : "Jumbe ambazo hazijasomwa", + "Meeting conversations" : "Mazungumzo ya mkutano", + "Clear filters" : "Futa vichujio", + "New personal note" : "Ujumbe mpya wa kibinafsi", + "Back to conversations" : "Rudi kwenye mazungumzo", + "Archived conversations" : "Mazungumzo yaliyowekwa kwenye kumbukumbu", + "Threads" : "Mijadala", + "Clear filter" : "Futa kichujio", + "Show more threads" : "Onyesha mijadala zaidi", + "App settings" : "Mipangilio ya programu", + "Users" : "Watumiaji", + "Groups" : "Makundi", + "Teams" : "Timu", + "Federated users" : "Watumiaji walioshirikishwa", + "New private conversation" : "Mazungumzo mapya ya faragha", + "Other sources" : "Vyanzo vingine", + "Open conversations" : "Mazungumzo ya wazi", + "No search results" : "Hakuna matokeo ya utafutaji", + "Users, groups and teams" : "Watumiaji, vikundi na timu", + "Users and groups" : "Watumiaji na vikundi", + "Users and teams" : "Watumiaji na timu", + "Groups and teams" : "Vikundi na timu", + "New group conversation" : "Mazungumzo mapya ya kikundi", + "The meeting will start soon" : "Mkutano utaanza hivi karibuni", + "This meeting is scheduled for {startTime}" : "Mkutano huu umepangwa kwa {startTime}", + "You are currently waiting in the lobby" : "Kwa sasa unasubiri kwenye chumba cha kushawishia", + "Select microphone" : "Chagua maikrofoni", + "No microphone available" : "Hakuna maikrofoni inayopatikana", + "Select speaker" : "Chagua spika", + "No speaker available" : "Hakuna spika zinazopatikana", + "Select camera" : "Chagua kamera", + "No camera available" : "Hakuna kamera inayopatikana", + "Select a device" : "Chagua kifaa", + "Playing …" : "Inacheza...", + "Test speakers" : "Jaribu spika", + "Test" : "Jaribu", + "Devices" : "Vifaa", + "Backgrounds" : "Mandhari nyuma", + "No audio" : "Hakuna sauti", + "No camera" : "Hakuna kamera", + "Display video as you will see it (mirrored)" : "Onyesha video jinsi utakavyoiona (iliyoakisiwa)", + "Display video as others will see it" : "Onyesha video jinsi wengine watakavyoiona", + "Calls are not supported in your browser" : "Simu hazitumiki katika kivinjari chako", + "Access to microphone is only possible with HTTPS" : "Ufikiaji wa maikrofoni unawezekana tu kwa HTTPS", + "Access to microphone was denied" : "Ufikiaji wa maikrofoni ulikataliwa", + "Error while accessing microphone" : "Hitilafu wakati wa kufikia maikrofoni", + "Access to camera is only possible with HTTPS" : "Ufikiaji wa kamera unawezekana tu kwa HTTPS", + "The call is being recorded." : "Simu inarekodiwa.", + "The call might be recorded." : "Simu inaweza kuwa imerekodiwa", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Rekodi inaweza kujumuisha sauti yako, video kutoka kwa kamera na kushiriki skrini. Idhini yako inahitajika kabla ya kujiunga kwenye simu.", + "Give consent to the recording of this call" : "Toa idhini ya kurekodiwa kwa simu hii", + "Show more info" : "Onesha maelezo zaidi", + "Audio is not available" : "Sauti haipatikani", + "Video is not available" : "Video haipatikani", + "Start recording immediately with the call" : "Anza kurekodi mara moja na simu", + "Notify all participants about this call" : "Wajulishe washiriki wote kuhusu simu hii", + "Apply settings" : "Tumia mipangilio", + "Select virtual office background" : "Chagua mwonekano wa mandharinyuma ya ofisi", + "Select virtual home background" : "Chagua mwonekano wa mandharinyuma ya nyumbani", + "Select virtual abstract background" : "Chagua mwonekano wa mandharinyuma dhahania", + "Select virtual beach background" : "Chagua mwonekano wa mandharinyuma ya ufukwe", + "Select virtual park background" : "Chagua mwonekano wa mandharinyuma ya bustani", + "Select virtual theater background" : "Chagua mwonekano wa mandharinyuma ya ukumbi wa michezo", + "Select virtual library background" : "Chagua mwonekano wa mandharinyuma ya maktaba ", + "Select virtual space station background" : "Chagua mandharinyuma ya kituo cha anga za juu", + "Error while uploading the file" : "Hitilafu wakati wa kupakia faili", + "Select a file" : "Chagua faili", + "Invalid path selected" : "Njia iliyochaguliwa si halali", + "Select virtual background from file {fileName}" : "Chagua mwonekano wa mandharinyuma kutoka kwa faili {fileName}", + "Blur" : "Blur", + "Upload" : "Pakia", + "Files" : "Faili", + "(editing)" : "(inahariri)", + "(edited)" : "(imehaririwa)", + "The message has expired or has been deleted" : "Ujumbe umekwisha muda wake au umefutwa", + "Cancel quote" : "Ghairi nukuu", + "24 hours" : "Masaa 24", + "7 days" : "Siku 7", + "Until unpin" : "Until unpin", + "Clear reminder – {timeLocale}" : "Futa kikumbusho – {timeLocale}", + "Edited by {actor}" : "Imehaririwa na {actor}", + "Message text copied to clipboard" : "Maandishi ya ujumbe yamenakiliwa kwenye ubao wa kunakili", + "Message text could not be copied" : "Maandishi ya ujumbe hayakuweza kunakiliwa", + "Message forwarded to \"Note to self\"" : "Ujumbe umetumwa kwa \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Hitilafu wakati wa kusambaza ujumbe kwa \"Note to self\"", + "A reminder was successfully removed" : "Kikumbusho kiliondolewa kwa mafanikio", + "Error occurred when removing a reminder" : "Hitilafu ilitokea wakati wa kuondoa kikumbusho", + "A reminder was successfully set at {datetime}" : " Kikumbusho kiliwekwa kwa mafanikio {datetime}", + "Error occurred when creating a reminder" : "Hitilafu ilitokea wakati wa kuunda kikumbusho", + "Add a reaction to this message" : "Ongeza maoni kwa ujumbe huu", + "Reply" : "Jibu", + "More actions" : "Vitendo zaidi", + "Set reminder" : "Weka ukumbusho", + "Pin message" : "Pin message", + "Unpin message" : "Unpin message", + "Reply privately" : "Jibu kwa faragha", + "Edit message" : "Hariri ujumbe", + "Copy message" : "Nakili ujumbe", + "Copy message link" : "Nakili kiungo cha ujumbe", + "Go to file" : "Nenda kwenye faili", + "Download file" : "Pakua faili", + "Go to thread" : "Nenda kwenye mjadala", + "Edit thread details" : "Hariri maelezo ya mjadala", + "Forward message" : "Sambaza ujumbe", + "Translate" : "Tafsiri", + "Set custom reminder" : "Weka kikumbusho maalum", + "Close reactions menu" : "Funga menyu ya maoni", + "React with {emoji}" : "Jibu kwa {emoji}", + "React with another emoji" : "Jibu kwa emoji nyingine", + "Choose a conversation to forward the selected message." : "Chagua mazungumzo ili kusambaza ujumbe uliochaguliwa.", + "Error while forwarding message" : "Hitilafu wakati wa kusambaza ujumbe", + "The message has been forwarded to {selectedConversationName}" : "Ujumbe umetumwa kwa {selectedConversationName}", + "Dismiss" : "Ondoa", + "Go to conversation" : "Nenda kwenye mazungumzo", + "Detect language" : "Lugha iliyotambuliwa", + "The message could not be translated" : "Ujumbe haukuweza kutafsiriwa", + "Translation copied to clipboard" : "Tafsiri imenakiliwa kwenye ubao wa kunakili", + "Translation could not be copied" : "Tafsiri haikuweza kunakiliwa", + "Translate message" : "Tafsiri ujumbe", + "Source language to translate from" : "Lugha ya chanzo ya kutafsiri kutoka", + "Translate from" : "Tafsiri kutoka", + "Target language to translate into" : "Lugha lengwa ya kutafsiriwa", + "Translate to" : "Tafsiri kwa ", + "Translating" : "Inatafsiri", + "Copy translated text" : "Nakili maandishi yaliyotafsiriwa", + "Reschedule" : "Reschedule", + "Send now" : "Tuma sasa", + "Message read by everyone who shares their reading status" : "Ujumbe unaosomwa na kila mtu anayeshiriki hali yake ya usomaji", + "Message sent" : "Ujumbe umetumwa", + "Sent without notification" : "Imetumwa bila arifa", + "Deleting message" : "Inafuta ujumbe", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Ujumbe umefutwa, lakini roboti au Matterbridge imesanidiwa na ujumbe unaweza kuwa tayari kusambazwa kwa huduma zingine.", + "Message deleted successfully" : "Ujumbe umefutwa kwa mafanikio", + "Message could not be deleted because it is too old" : "Ujumbe haukuweza kufutwa kwa sababu ni wa zamani sana", + "Only normal chat messages can be deleted" : "Ni ujumbe wa kawaida tu wa gumzo unaweza kufutwa", + "An error occurred while deleting the message" : "Hitilafu ilitokea wakati wa kufuta ujumbe", + "Pinned" : "Pinned", + "Your browser does not support playing audio files" : "Kivinjari chako hakiungi faili za sauti", + "Contact" : "Mawasiliano", + "{stack} in {board}" : "{stack} katika {board}", + "Deck Card" : "Kadi ya Deck ", + "Remove {fileName}" : "Ondoa {fileName}", + "Open this location in OpenStreetMap" : "Fungua eneo hili katika OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n reply","%n majibu"], + "Sending message" : "Kutuma ujumbe", + "Failed to send the message. Click to try again" : "Imeshindwa kutuma ujumbe. Bofya ili kujaribu tena", + "Not enough free space to upload file" : "Hakuna nafasi ya kutosha ya kupakia faili", + "You cannot send messages to this conversation at the moment" : "Huwezi kutuma ujumbe kwa mazungumzo haya kwa sasa", + "Could not update the message" : "Haikuweza kusasisha ujumbe", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n option","Rasimu ya kura • chaguo %n"], + "_%n vote_::_%n votes_" : ["%n vote","%n kura"], + "Edit poll draft" : "Hariri rasimu ya kura ya maoni", + "Delete poll draft" : "Futa rasimu ya kura ya maoni", + "Open poll" : "Kura ya wazi", + "See results" : "Ona matokeo", + "Reactions" : "Miitikio", + "No permission to post reactions in this conversation" : "Hakuna ruhusa ya kuchapisha maoni katika mazungumzo haya", + "and {participant}" : "na {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participant","na %n washiriki wengine"], + "Show all reactions" : "Onesha miitikio yote", + "Add more reactions" : "Ongeza miitikio zaidi", + "Show or collapse system messages" : "Onyesha au ukunje ujumbe wa mfumo", + "No messages" : "Hakuna jumbe", + "All messages have expired or have been deleted." : "Barua pepe zote zimeisha muda wake au zimefutwa.", + "{author} (pinned by you)" : "{author} (pinned by you)", + "Unpin" : "Bandua", + "Cancel search" : "Ghairi utafutaji", + "Add a phone number" : "Ongeza namba ya simu", + "Error: A password is required to create the conversation." : "Hitilafu: Nenosiri linahitajika ili kuunda mazungumzo.", + "All set, the conversation \"{conversationName}\" was created." : "Baada ya yote, mazungumzo \"{conversationName}\" yaliundwa.", + "Create a new group conversation" : "Unda mazungumzo mapya ya kikundi", + "Add participants" : "Ongeza washiriki", + "Maximum length exceeded ({maxlength} characters)" : "Urefu wa juu zaidi umepitwa (herufi {maxlength})", + "Conversation visibility" : "Mwonekano wa mazungumzo", + "Allow guests to join via link" : "Ruhusu wageni kujiunga kupitia kiungo", + "Enter password" : "Ingiza nenosiri", + "This conversation has been locked" : "Mazungumzo haya yamefungwa", + "No permission to post messages in this conversation" : "Hakuna ruhusa ya kutuma ujumbe katika mazungumzo haya", + "Joining conversation …" : "Inajiunga na mazungumzo...", + "Write a message without notification" : "Andika ujumbe bila arifa", + "Create a thread silently" : "Unda mjadal;a kimya kimya", + "Create a thread" : "Unda mjadala", + "Send message silently" : "Tuma ujumbe kimya kimya", + "Send message" : "Tuma ujumbe", + "Send without notification" : "Tuma bila arifa", + "The participant will not be notified about new messages" : "Mshiriki hatataarifiwa kuhusu ujumbe mpya", + "Participants will not be notified about new messages" : "Washiriki hawatajulishwa kuhusu ujumbe mpya", + "Thread title is required" : "Kichwa cha mjadala kinahitajika", + "Message text is required" : "Ujumbe wa maandishi unahitajika", + "The message could not be edited" : "Ujumbe hauwezi kuhaririwa", + "File to share" : "Faili la kushirikisha", + "File upload is not available in this conversation" : "Upakiaji wa faili haupatikani katika mazungumzo haya", + "Add emoji" : "Ongeza emoji", + "Adding a mention will only notify users who did not read the message." : "Kuongeza mtajo kutaarifu watumiaji ambao hawakusoma ujumbe pekee.", + "Thread title" : "Kichwa cha mjadala", + "Send later" : "Tuma baadaye", + "Cancel editing" : "Ghairi uhariri", + "Schedule message" : "Schedule message", + "{user} is out of office and might not respond." : "{user} yuko nje ya ofisi na anaweza asijibu.", + "Absence period: {startDate} - {endDate}" : "Kipindi cha kutokuwepo: {startDate} - {endDate}", + "Replacement:" : "Uingizwaji:", + "Share from {nextcloud}" : "Shirikisha kutoka {nextcloud}", + "Share from Files" : "Shirikisha kutoka katika mafaili", + "Share files to the conversation" : "Shiriki faili kwenye mazungumzo", + "Upload from device" : "Pakia kutoka katika kifaa", + "Create new poll" : "Unda kura mpya", + "Smart picker" : "Kiteua mahiri", + "Record voice message" : "Rekodi ujumbe wa sauti", + "End recording and send" : "Maliza kurekodi na utume", + "Dismiss recording" : "Ondoa kurekodi", + "Access to the microphone was denied" : "Ufikiaji wa maikrofoni ulikataliwa", + "Microphone either not available or disabled in settings" : "Maikrofoni haipatikani au imezimwa katika mipangilio", + "Error while recording audio" : "Hitilafu wakati wa kurekodi sauti", + "Generating summary of unread messages …" : "Inazalisha muhtasari wa ujumbe ambao haujasomwa ...", + "Summary is AI generated and might contain mistakes" : "Muhtasari umetolewa na AI na unaweza kuwa na makosa", + "Error occurred during a summary generation" : "Hitilafu ilitokea wakati wa uzalishaji wa muhtasari", + "New file" : "Faili mpya", + "Blank" : "Mabano", + "Error while creating file" : "Hitilafu wakati wa kuunda faili", + "Create and share a new file" : "Unda na ushiriki faili mpya", + "Name of the new file" : "Jina la faili mpya", + "Create file" : "Unda faili", + "Someone is typing …" : "Mtu fulani anachapa", + "{user1} is typing …" : "{user1} anachapa", + "{user1} and {user2} are typing …" : "{user1} na {user2} wanachapa", + "{user1}, {user2} and {user3} are typing …" : "{user1},{user2} na {user3} wanachapa...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} na %n wengine wanachapa …"], + "Add more files" : "Oneza faili zaidi", + "Send" : "Tuma", + "In this conversation {user} can:" : "Katika mazungumzo haya {user} anaweza:", + "Edit default permissions for participants in {conversationName}" : "Badilisha ruhusa chaguomsingi kwa washiriki {conversationName}", + "Start a call" : "Anzisha simu", + "Skip the lobby" : "Ruka kushawishi", + "Can post messages and reactions" : "Inaweza kuchapisha ujumbe na maoni", + "Enable the microphone" : "Washa maikrofoni", + "Enable the camera" : "Washa kamera", + "Share the screen" : "Shiriki skrini", + "Update permissions" : "Sasisha ruhusa", + "Updating permissions" : "Inasasisha ruhusa", + "No poll drafts" : "Hakuna rasimu za kura", + "There is no poll drafts yet saved for this conversation" : "Bado hakuna rasimu za kura zilizohifadhiwa kwa mazungumzo haya", + "Create poll in {name}" : "Unda kura ya maoni katika {name}", + "Create poll" : "Tengeneza kura ya maoni", + "Error while importing poll" : "Hitilafu wakati wa kuleta kura ya maoni", + "Question" : "Swali", + "Ask a question" : "Uliza swali", + "Import draft from file" : "Ingiza rasimu kutoka kwenye faili", + "Answers" : "Majibu", + "Answer {option}" : "Jibu {option}", + "Delete poll option" : "Futa chaguo la kura", + "Add answer" : "Ongeza jibu", + "Settings" : "Mipangilio", + "Anonymous poll" : "Kura ya maoni isiyojulikana", + "Multiple answers" : "Majibu mengi", + "Save as draft" : "Hifadhi kama rasimu", + "Export draft to file" : "Hamisha rasimu hadi faili", + "You voted for this option" : "Ulipigia kura chaguo hili", + "End poll" : "Maliza kura", + "Change your vote" : "Badilisha kura yako", + "Results" : "Matokeo", + "Voted participants" : "Washiriki waliopiga kura", + "Send a message to \"{roomName}\"" : "Tuma ujumbe kwa \"{roomName}\"", + "Hide list of participants" : "Ficha orodha ya washiriki", + "Show list of participants" : "Onesha orodha ya washiriki", + "Assistance requested in {roomName}" : "Usaidizi ulioombwa {roomName}", + "The message was sent to \"{roomName}\"" : "Ujumbe ulitumwa kwa \"{roomName}\"", + "Dismiss request for assistance" : "Ondoa ombi la usaidizi", + "Send message to room" : "Tuma ujumbe kwenye chumba", + "Back to main room" : "Rudi kwenye chumba kuu", + "Back to your room" : "Rudi kwenye chumba chako", + "Message all rooms" : "Tuma ujumbe kwenye vyumba vyote", + "Start session" : "Anza kipindi", + "Start a call before you start a breakout room session" : "Anza simu kabla ya kuanza kikao cha chumba cha kujitenga", + "Stop session" : "Simamisha kipindi", + "The message was sent to all breakout rooms" : "Ujumbe ulitumwa kwa vyumba vyote vya vikundi vidogo", + "Send a message to all breakout rooms" : "Tuma ujumbe kwa vyumba vyote vya vikundi vidogo", + "Breakout rooms are not started" : "Vyumba vya kujitenga havijaanza", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Simu zisizo na utendakazi wa hali ya juu zinaweza kusababisha matatizo ya muunganisho na upakiaji wa juu kwenye vifaa. {linkstart}Pata maelezo zaidi{linkend}", + "Talk setup incomplete" : "Usanidi wa Talk haujakamilika", + "Disable lobby" : "Zima kushawishi", + "Settings for participant \"{user}\"" : "Mipangilio ya mshiriki \"{user}\"", + "Participant \"{user}\"" : "Mshiriki \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "mgeni", + "Ringing …" : "Inaita …", + "Call rejected" : "Sime imekataliwa", + "{time} talking …" : "{time} anazungumza …", + "{time} talking time" : "{time}muda wa kuzungumza ", + "Raised their hand" : "Walinyanyua mkono wao", + "Joined with video" : "Imeunganishwa na video", + "Joined via phone" : "Imejiunga kupitia simu", + "Joined with audio" : "Imeunganishwa na sauti", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Maandishi lazima yawe chini ya au sawa na urefu wa vibambo {maxLength}. Maandishi yako ya sasa yana urefu wa vibambo {charactersCount}.", + "Remove group and members" : "Ndoa kundi na wanachama", + "Remove team and members" : "Ondoa timu na wanachama", + "Remove participant" : "Ondoa washiriki", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Je, kweli unataka kuondoa kikundi \"{displayName}\" na wanachama wake kwenye mazungumzo haya?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Je, ungependa kuondoa timu \"{displayName}\" na wanachama wake kwenye mazungumzo haya?", + "Do you really want to remove {displayName} from this conversation?" : "Je, kweli unataka kuondoa {displayName} kwenye mazungumzo haya?", + "Notification was sent to {displayName}" : "Arifa ilitumwa kwa {displayName}", + "Could not send notification to {displayName}" : "Haikuweza kutuma arifa kwa {displayName}", + "Permissions granted to {displayName}" : "Ruhusa iliyotolewa kwa {displayName}", + "Could not modify permissions for {displayName}" : "Haikuweza kubadilisha ruhusa za {displayName}", + "Permissions removed for {displayName}" : "Ruhusa zimeondolewa kwa {displayName}", + "Permissions set to default for {displayName}" : "Ruhusa zimewekwa kwa chaguo-msingi kwa {displayName}", + "Phone number could not be hung up" : "Nambari ya simu haikuweza kukatwa", + "Phone number could not be put on hold" : "Nambari ya simu haikuweza kuwekwa kwenye kusubiri", + "Phone number could not be muted" : "Nambari ya simu haikuweza kunyamazishwa", + "Phone number could not be unmuted" : "Nambari ya simu haikuweza kurejeshwa", + "DTMF message could not be sent" : "Ujumbe wa DTMF haukuweza kutumwa", + "Phone number copied to clipboard" : "Nambari ya simu imenakiliwa kwenye ubao wa kunakili", + "Phone number could not be copied" : "Nambari ya simu haikuweza kunakiliwa", + "in the lobby" : "katika ukumbi", + "Dial out phone" : "Piga simu nje", + "Hang up phone" : "Kata simu", + "Move back to lobby" : "Rudi kwenye kushawishi", + "Move to conversation" : "Nenda kwenye mazungumzo", + "Dial-in PIN" : "Piga simu kwa PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Tuma tena mwaliko", + "Send call notification" : "Tuma arifa ya simu", + "Dial out phone number" : "Piga namba ya simu ya nje", + "Resume call for phone number" : "Endelea kupiga simu kwa nambari ya simu", + "Put phone number on hold" : "Weka nambari ya simu kwenye hali ya kusubiri", + "Unmute phone number" : "Rejesha sauti ya nambari ya simu", + "Mute phone number" : "Nyamazisha nambari ya simu", + "Copy phone number" : "Nakili nambari ya simu", + "Reset custom permissions" : "Weka upya ruhusa maalum", + "Grant all permissions" : "Toa ruhusa zote", + "Remove all permissions" : "Ondoa ruhusa zote", + "Also ban from this conversation" : "Pia piga marufuku kutoka kwa mazungumzo haya", + "Internal note (reason to ban)" : "Ujumbe wa ndani (reason to ban)", + "Remove" : "Ondoa", + "Permissions modified for {displayName}" : "Ruhusa zimerekebishwa kwa {displayName}", + "Add users, groups or teams" : "Ongeza watumiaji, vikundi au timu", + "Add users or groups" : "Ongeza watumiaji au vikundi", + "Add users or teams" : "Ongeza watumiaji au timu", + "Add users" : "Ongeza watumiaji", + "Add groups or teams" : "Ongeza vikundi au timu", + "Add groups" : "Ongeza vikundi", + "Add teams" : "Ongeza timu", + "Add other sources" : "Ongeza vyanzo vingine", + "Add emails" : "Ongeza barua pepe", + "Integrations" : "Ujumuishaji", + "Add federated users" : "Ongeza watumiaji walioshirikishwa", + "Searching …" : "Inatafuta", + "Search for more users" : "Tafuta watumiaji zaidi", + "You can search or add participants via name, email, or Federated Cloud ID" : "Unaweza kutafuta au kuongeza washiriki kupitia jina, barua pepe, au Kitambulisho cha Cloud Shirikishi", + "Search or add participants" : "Tafuta au ongeza washiriki", + "Invitation was sent to {actorId}" : "Mwaliko ulitumwa kwa {actorId}", + "An error occurred while adding the participants" : "Hitilafu ilitokea wakati wa kuongeza washiriki", + "A new group conversation with selected participant will be created" : "Mazungumzo mapya ya kikundi na mshiriki aliyechaguliwa yataundwa", + "Participants" : "Washiriki", + "Participants ({count})" : "Washiriki ({count})", + "Open chat" : "Gumzo ya wazi", + "You have new unread messages in the chat." : "Una jumbe mpya ambazo hazijasomwa kwenye gumzo.", + "You have been mentioned in the chat." : "Umetajwa kwenye gumzo.", + "Search messages" : "Tafuta jumbe", + "Chat" : "Gumzo", + "Details" : "Maelezo ya kina", + "Shared items" : "Vipengele vilivyoshirikiwa", + "Search in {name}" : "Tafuta katika {name}", + "Threads in {name}" : "Mijadala katika {name}", + "{actor} in {conversation}" : "{actor} katika {conversation}", + "Search messages …" : "Tafuta jumbe …", + "Search options" : "Tafuta machaguo", + "From User" : "Kutoka kwa mtumiaji", + "Since" : "Tangu", + "Until" : "Mpaka", + "No results found" : "Hakuna matokeo yaliyopatikana", + "Load more results" : "Pakia matokeo zaidi", + "Recent threads" : "Recent threads", + "Projects" : "Miradi", + "No shared items" : "Hakuna vipengele vilivyoshirikiwa", + "Thread notifications" : "Arifa za mjadala", + "Thread actions" : "Matendo ya mjadala", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Unga kwenye mazungumzo", + "No open conversations found" : "Hakuna mazungumzo ya wazi yaliyopatikana", + "Either there are no open conversations or you joined all of them." : "Labda hakuna mazungumzo ya wazi au umejiunga nayo yote.", + "Check spelling or use complete words." : "Angalia tahajia au tumia maneno kamili.", + "Search conversations or users" : "Tafuta mazungumzo au watumiaji", + "Select conversation" : "Chagua mazungumzo", + "Number length is not valid" : "Urefu wa nambari sio halali", + "Region code is not valid" : "Msimbo wa eneo si sahihi", + "Number length is too short" : "Urefu wa nambari ni mfupi sana", + "Number length is too long" : "Urefu wa nambari ni mrefu sana", + "Number is not valid" : "Nambari si halali", + "Phone numbers" : "Nambari za simu", + "Display name: {name}" : "Jina la kuonyesha: {name}", + "Edit display name" : "Badilisha jina la onyesho", + "Display name (required)" : "Jina la kuonyesha (required)", + "Save name" : "Hifadhi jina", + "Error while setting personal setting" : "Hitilafu wakati wa kuweka mipangilio ya kibinafsi", + "Error while saving sounds setting" : "Hitilafu wakati wa kuhifadhi mpangilio wa sauti", + "Play sounds when participants join or leave a call" : "Cheza sauti washiriki wanapojiunga au kuacha simu", + "Notification settings" : "Mipangilio ya arifu", + "Default language" : "Lugha chaguomsingi", + "Select location for attachments" : "Chagua eneo la viambatisho", + "Error while setting attachment folder" : "Hitilafu wakati wa kuweka folda ya kiambatisho", + "Error while setting read status privacy" : "Hitilafu wakati wa kuweka faragha ya hali ya kusoma", + "Error while setting typing status privacy" : "Hitilafu wakati wa kuweka faragha ya hali ya kuandika", + "Error while setting default media state" : "Hitilafu wakati wa kuweka hali chaguo-msingi ya midia", + "Privacy" : "Faragha", + "Attachments folder" : "Folda ya viambatisho", + "Toggle full screen" : "Geuza skrini nzima", + "Search" : "Tafuta", + "Focus the chat input" : "Lenga ingizo la gumzo", + "Unfocus the chat input to use shortcuts" : "Acha kulenga ingizo la gumzo ili kutumia njia za mkato", + "Edit your last message" : "Hariri ujumbe wako wa mwisho", + "Shortcuts while in a call" : "Njia za mkato ukiwa kwenye simu", + "Camera on and off" : "Kamera imewashwa na kuzima", + "Microphone on and off" : "Maikrofoni imewashwa na kuzima", + "Raise or lower hand" : "Inua au shusha mkono", + "Push to talk or push to mute" : "Sukuma kuzungumza au sukuma ili kunyamazisha", + "Zoom-in / zoom-out a screen share" : "Kuza / kupunguza kushiriki skrini", + "Mouse wheel" : "Gurudumu la mouse", + "Start call silently" : "Anza kupiga simu kimya kimya", + "Start call" : "Anza kupiga simu", + "End call" : "Kata simu", + "This call has just ended" : "Simu hii imekatika hivi punde", + "You will be able to join the call only after a moderator starts it." : "Utaweza kujiunga kwenye Hangout hiyo tu baada ya msimamizi kuianzisha.", + "End call for everyone" : "Maliza simu kwa kila mtu", + "Starting the recording" : "Kuanza kurekodi", + "Recording" : "Inarekodi", + "The call has been running for one hour." : "Simu imekuwa ikiendeshwa kwa saa moja.", + "Cancel recording start" : "Ghairi kuanza kurekodi", + "Stop recording" : "Simamisha kurekodi", + "Send a reaction" : "Tuma muitikio", + "React with {reaction}" : "Itikia kwa {reaction}", + "All tasks done!" : "Shughuli zote zimefanyika!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n task","{done} ya %n shughuli"], + "Add participants to this call" : "Ongeza washiriki kwenye simu hii", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n washiriki katika simu"], + "Scheduled messages" : "Scheduled messages", + "You are not allowed to enable screensharing" : "Huruhusiwi kuwezesha kushiriki skrini", + "No screensharing" : "Hakuna kushiriki skrini", + "Screensharing options" : "Chaguo za kushiriki skrini", + "Enable screensharing" : "Washa ushiriki wa skrini", + "Bad sent video and screen quality." : "Ubora mbaya wa video na skrini uliotumwa", + "Bad sent screen quality." : "Ubora mbaya wa skrini iliyotumwa.", + "Bad sent video quality." : "Ubora mbaya wa video iliyotumwa.", + "Bad sent audio, video and screen quality." : "Ubora mbaya wa sauti, video na skrini uliotumwa.", + "Bad sent audio and screen quality." : "Ubora mbaya wa sauti na skrini uliotumwa", + "Bad sent audio and video quality." : "Ubora mbaya wa sauti na video uliotumwa.", + "Bad sent audio quality." : "Ubora mbaya wa sauti uliotumwa.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako. Ili kuboresha hali hiyo, jaribu kuzima ukungu wa mandharinyuma au video yako wakati unashiriki skrini.", + "Disable background blur" : "Lemaza ukungu wa mandharinyuma", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako. Ili kuboresha hali hiyo jaribu kuzima video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuona.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo, jaribu kuzima ukungu wa mandharinyuma au video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo jaribu kuzima video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kuona skrini yako. Ili kuboresha hali jaribu kuzima ushiriki wako wa skrini.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo jaribu kuzima ukungu wa mandharinyuma au video yako.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali jaribu kuzima video yako.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa.", + "Screen sharing is not supported by your browser." : "Kushiriki skrini hakutumiki na kivinjari chako.", + "Screen sharing requires the page to be loaded through HTTPS." : "Kushiriki skrini kunahitaji ukurasa kupakiwa kupitia HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Kushiriki skrini kunahitaji ukurasa kupakiwa kupitia HTTPS.", + "An error occurred while starting screensharing." : "Hitilafu ilitokea wakati wa kuanza kushiriki skrini.", + "Select virtual background" : "Chagua mandharinyuma pepe", + "Show your screen" : "Onesha skrini yako", + "Stop screensharing" : "Acha kushiriki skrini", + "Mute others" : "Nyamazisha wengine", + "Start recording" : "Anza kurekodi", + "Set up breakout rooms" : "Sanidi vyumba vya vipindi vifupi", + "Download attendance list" : "Pakua orodha ya mahudhurio", + "Open Calendar" : "Fungua Kalenda", + "Remove participant {name}" : "Ondoa mshiriki {name}", + "Would you like to delete this conversation?" : "Je, ungependa kufuta mazungumzo haya?", + "Are you sure you want to delete this conversation?" : "Je, una uhakika unataka kufuta mazungumzo haya?", + "Delete now" : "Futa sasa", + "Keep" : "Weka", + "Open dialpad" : "Fungua padi ya kupiga simu", + "Select a region" : "Chagua eneo", + "Local time: {time}" : "Muda wa kawaida: {time}", + "Search …" : "Tafuta...", + "Message without mention" : "Ujumbe bila kutajwa", + "Mention myself" : "Nijitaje mwenyewe", + "Mention everyone" : "Taja kila mtu", + "Select a conversation" : "Chagua mazungumzo", + "Select a mode" : "Chagua modi", + "You do not have permissions to access this conversation." : "Huna ruhusa ya kufikia mazungumzo haya.", + "Join a different conversation or start a new one." : "Jiunge na mazungumzo tofauti au anza mazungumzo mapya.", + "The conversation does not exist" : "Mazungumzo hayapo", + "Join a conversation or start a new one!" : "Jiunge na mazungumzo au anza mazungumzo mapya!", + "Duplicate session" : "Rudufu kipindi", + "Creating and joining a conversation with \"{userid}\"" : "Kuunda na kujiunga na mazungumzo na \"{userid}\"", + "Join a conversation or start a new one" : "Jiunge na mazungumzo au anzisha mapya", + "Error while joining the conversation" : "Hitilafu wakati wa kujiunga na mazungumzo", + "Nextcloud URL" : "URL ya Nextcloud ", + "Nextcloud user" : "Mtumiaji wa Nextcloud ", + "User password" : "Nenosiri la mtumiaji", + "Talk conversation" : "Mazungumzo ya Talk", + "Skip TLS verification" : "Ruka uthibitishaji wa TLS", + "Matrix server URL" : "URL ya seva ya matrix", + "User" : "Mtumiaji", + "Matrix channel" : "Njia ya Matrix ", + "Mattermost server URL" : "URL ya seva ya Mattermost", + "Mattermost user" : "Mtumiaji wa Mattermost ", + "Team name" : "Jina la timu", + "Channel name" : "Jina la njia", + "Rocket.Chat server URL" : "URL ya seva ya Rocket.Chat", + "User name or email address" : "Jina la mtumiaji au anwani ya barua pepe", + "Rocket.Chat channel" : "Njia ya Rocket.Chat ", + "Zulip server URL" : "URL ya seva ya Zulip", + "Bot user name" : "Jina la mtumiaji wa Bot", + "Bot API key" : "Ufunguo wa Bot API ", + "Zulip channel" : "Njia ya Zulip ", + "API token" : "Tokeni ya API ", + "Slack channel" : "Njia ya Slack ", + "Server ID or name" : "Kitambulisho cha seva au jina", + "Channel ID (prefixed with \"ID:\") or name" : "Kitambulisho cha njia (kilichoambishwa na \"ID:\") au jina", + "Channel" : "Njia ", + "Login" : "Ingia", + "Chat ID" : "Kitambulisho cha gumzo", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL ya seva ya IRC (e.g. chat.freenode.net:6667)", + "Nickname" : "Jina la utani", + "Connection password" : "Nenosiri la muunganisho", + "IRC channel" : "Njia ya IRC ", + "Channel password" : "Nenosiri la njia", + "NickServ nickname" : "Jina la utani la NickServ", + "NickServ password" : "Nenosiri la NickServ", + "Use TLS" : "Tumia TLS", + "Use SASL" : "Tumia SASL", + "Tenant ID" : "Kitambulisho cha Tenant ", + "Client ID" : "Kitambulisho cha mteja", + "Team ID" : "Kitambulisho cha timu", + "Thread ID" : "Kitambulisho cha mjadala", + "XMPP/Jabber server URL" : "URL ya seva ya XMPP/Jabber", + "MUC server URL" : "URL ya seva ya MUC", + "Jabber ID" : "Kitambulisho cha Jabber ", + "Media" : "Midia", + "Polls" : "Kura", + "Deck cards" : "Kadi za Deck", + "Voice messages" : "Jumbe za sauti", + "Locations" : "Maeneo", + "Call recordings" : "Rekodi za simu", + "Audio" : "Sauti", + "Show all media" : "Onesha media zote", + "Show all files" : "Onesha faili zote", + "Show all polls" : "Onesha kura zote", + "Show all deck cards" : "Onesha kadi zote za deck", + "Show all voice messages" : "Onesha jumbe zote za sauti", + "Show all locations" : "Onesha maeneo yote", + "Show all call recordings" : "Onesha rekodi zote", + "Show all audio" : "Onesha sauti zote", + "Show all other" : "Onesha wengine wote", + "Follow conversation settings" : "Fuata mipangilio ya mazungumzo", + "Group" : "Kundi", + "Team" : "Timu", + "You reconnected to the call" : "Umeunganisha tena kwenye simu", + "{actor} reconnected to the call" : "{actor} ameunganishwa tena kwenye simu", + "You added {user0} and {user1}" : "Umeongeza {user0} na {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","Umeongeza {user0}, {user1} na washiriki %n zaidi"], + "An administrator added you and {user0}" : "Msimamizi alikuongeza wewe na {user0}", + "{actor} added you and {user0}" : "{actor} alikuongeza wewe na {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","Msimamizi alikuongeza wewe, {user0} na washiriki %n zaidi"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} alikuongeza wewe, {user0} na washiriki %n zaidi"], + "An administrator added {user0} and {user1}" : "Msimamizi ameongeza {user0} na {user1}", + "{actor} added {user0} and {user1}" : "{actor} aliongeza {user0} na {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","Msimamizi aliongeza {user0}, {user1} na washiriki %n zaidi"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} aliongeza {user0}, {user1} na washiriki %n zaidi"], + "You removed {user0} and {user1}" : "Umewaondoa {user0} na {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participant","Umewaondoa {user0}, {user1} na washiriki %n zaidi"], + "An administrator removed you and {user0}" : "Msimamizi alikuondoa wewe na {user0}", + "{actor} removed you and {user0}" : "{actor} alikuondoa wewe na {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participant","Msimamizi alikuondoa wewe, {user0} na washiriki %n zaidi"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participant","{actor} alikuondoa wewe, {user0} na washiriki %n zaidi"], + "An administrator removed {user0} and {user1}" : "Msimamizi ameondoa {user0} na {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ameondoa {user0} na {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participant","Msimamizi amewaondoa {user0}, {user1} na washiriki %n zaidi"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participant","{actor} amewaondoa {user0}, {user1} na washiriki %n zaidi"], + "You and {user0} joined the call" : "Wewe na {user0} mmejiunga kwenye simu", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","Wewe, {user0} na washiriki %n zaidi walijiunga kwenye simu"], + "{user0} and {user1} joined the call" : "{user0} na {user1} walijiunga kwenye simu", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} na washiriki %n zaidi walijiunga kwenye simu"], + "You and {user0} left the call" : "Wewe na {user0} mmeacha simu", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","Wewe, {user0} na washiriki %n zaidi mmeacha simu"], + "{user0} and {user1} left the call" : "{user0} na {user1} waliacha simu", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} na washiriki %n zaidi waliondoka kwenye simu"], + "You promoted {user0} and {user1} to moderators" : "Ulipandisha {user0} na {user1} kuwa wasimamizi", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","Ulipandisha {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "An administrator promoted you and {user0} to moderators" : "Msimamizi alikupandisha cheo wewe na {user0} kuwa wasimamizi", + "{actor} promoted you and {user0} to moderators" : "{actor} alikupandisha cheo wewe na {user0} kuwa wasimamizi", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","Msimamizi alikupandisha daraja wewe, {user0} na washiriki %n zaidi kuwa wasimamizi"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} alikupandisha cheo, {user0} na washiriki %n zaidi kuwa wasimamizi"], + "An administrator promoted {user0} and {user1} to moderators" : "Msimamizi aliwapandisha hadhi {user0} na {user1} kuwa wasimamizi", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} aliwapandisha hadhi {user0} na {user1} kuwa wasimamizi", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","Msimamizi alikweza {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} aliwapandisha hadhi {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "You demoted {user0} and {user1} from moderators" : "Umeshusha {user0} na {user1} kutoka kwa wasimamizi", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","Umeshusha hadhi kwa {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "An administrator demoted you and {user0} from moderators" : "Msimamizi amekushusha wewe na {user0} kutoka kwa wasimamizi", + "{actor} demoted you and {user0} from moderators" : "{actor} amekushusha wewe na {user0} kutoka kwa wasimamizi", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","Msimamizi amekushusha cheo wewe, {user0} na washiriki %n zaidi kutoka kwa wasimamizi"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} amekushusha cheo wewe, {user0} na washiriki %n zaidi kutoka kwa wasimamizi"], + "An administrator demoted {user0} and {user1} from moderators" : "Msimamizi ameshusha hadhi {user0} na {user1} kutoka kwa wasimamizi", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ameshusha daraja {user0} na {user1} kutoka kwa wasimamizi", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","Msimamizi amewashusha daraja {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} amewashusha daraja {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "You:" : "Wewe:", + "You: {lastMessage}" : "Wewe: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(imehaririwa na wewe)", + "(edited by a deleted user)" : "(imehaririwa na mtumiaji aliyefutwa)", + "(edited by {moderator})" : "(imeharirirwa na {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Unajaribu kujiunga na mazungumzo huku kipindi kinachoendelea kwenye dirisha au kifaa kingine. Hii kwa sasa haitumiki na Nextcloud Talk. Unataka kufanya nini?", + "Leave this page" : "Ondoka katika ukurasa huu", + "Join here" : "Jiunge hapa", + "Deck card has been posted to {conversation}" : "Kadi ya Deck imechapishwa {conversation}", + "An error occurred while posting deck card to conversation" : "Hitilafu ilitokea wakati wa kuchapisha kadi ya sitaha kwenye mazungumzo", + "Post to a conversation" : "Chapisha kwenye mazungumzo", + "Post to conversation" : "Chapisha kwenye mazungumzo", + "The recording failed. Please contact your administrator." : "Imeshindwa kurekodi. Tafadhali wasiliana na msimamizi wako.", + "Location has been posted to {conversation}" : "Mahali pamechapishwa {conversation}", + "An error occurred while posting location to conversation" : "Hitilafu ilitokea wakati wa kuchapisha eneo kwenye mazungumzo", + "Share to a conversation" : "Shiriki kwenye mazungumzo", + "Share to conversation" : "Shiriki kwenye mazungumzo", + "In conversation" : "Katika mazungumzo", + "Search in conversation: {conversation}" : "Tafuta katika mazungumzo {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Maombi yako yamezuiliwa kwa sasa kutokana na ulinzi wa nguvu za kikatili", + "Error while clearing conversation history" : "Hitilafu wakati wa kufuta historia ya mazungumzo", + "Error occurred while allowing guests" : "Hitilafu ilitokea wakati wa kuwaruhusu wageni", + "Error occurred while disallowing guests" : "Hitilafu ilitokea wakati wa kutowaruhusu wageni", + "Error occurred when restricting the conversation to moderator" : "Hitilafu ilitokea wakati wa kuzuia mazungumzo kuwa msimamizi", + "Error occurred when opening the conversation to everyone" : "Hitilafu ilitokea wakati wa kufungua mazungumzo kwa kila mtu", + "Conversation password has been saved" : "Nenosiri la mazungumzo limehifadhiwa", + "Conversation password has been removed" : "Nenosiri la mazungumzo limeondolewa", + "Error occurred while saving conversation password" : "Hitilafu ilitokea wakati wa kuhifadhi nenosiri la mazungumzo", + "Call recording is starting." : "Kurekodi simu kunaanza.", + "Call recording stopped while starting." : "Kurekodi simu kumesimamishwa wakati wa kuanza.", + "Call recording stopped. You will be notified once the recording is available." : "Kurekodi simu kumesimamishwa. Utaarifiwa mara rekodi itakapopatikana.", + "Conversation picture set" : "Picha ya mazungumzo imewekwa", + "Conversation picture deleted" : "Picha ya mazungumzo imefutwa", + "Could not delete the conversation picture" : "Haikuweza kufuta picha ya mazungumzo", + "Could not remove the automatic expiration" : "Haikuweza kuondoa muda wa kuisha kiotomatiki", + "Could not post message: {errorMessage}" : "Haikuweza kuchapisha ujumbe: {errorMessage}", + "Participant is banned successfully" : "Mshiriki amepigwa marufuku kwa mafanikio", + "Error while banning the participant" : "Hitilafu wakati wa kupiga marufuku mshiriki", + "An error occurred while fetching the participants" : "Hitilafu ilitokea wakati wa kuleta washiriki", + "Could not send invitation to {actorId}" : "Haikuweza kutuma mwaliko kwa {actorId}", + "Invitations sent" : "Mialiko imetumwa", + "Error occurred when sending invitations" : "Hitilafu ilitokea wakati wa kutuma mialiko", + "Failed to join the conversation." : "Imeshindwa kujiunga kwenye mazungumzo.", + "An error occurred while creating breakout rooms" : "Hitilafu imetokea wakati wa kuunda vyumba vya vipindi vifupi", + "An error occurred while re-ordering the attendees" : "Hitilafu ilitokea wakati wa kuagiza upya waliohudhuria", + "An error occurred while deleting breakout rooms" : "Hitilafu ilitokea wakati wa kufuta vyumba vya vipindi vifupi", + "An error occurred while starting breakout rooms" : "Hitilafu ilitokea wakati wa kuanzisha vyumba vya vipindi vifupi", + "An error occurred while stopping breakout rooms" : "Hitilafu ilitokea wakati wa kusimamisha vyumba vya vipindi vifupi", + "An error occurred while sending a message to the breakout rooms" : "Hitilafu ilitokea wakati wa kutuma ujumbe kwenye vyumba vya vipindi vifupi", + "An error occurred while requesting assistance" : "Hitilafu ilitokea wakati wa kuomba usaidizi", + "An error occurred while resetting the request for assistance" : "Hitilafu ilitokea wakati wa kuweka upya ombi la usaidizi", + "An error occurred while joining breakout room" : "Hitilafu ilitokea wakati wa kujiunga na chumba cha vipindi vifupi", + "Failed to rename the thread" : "Imeshindwa kubadilisha jina la mjadala", + "Error fetching upcoming events" : "Hitilafu katika kuleta matukio yajayo", + "Error fetching upcoming reminders" : "Hitilafu katika kuleta vikumbusho vijavyo", + "An error occurred while accepting an invitation" : "Hitilafu ilitokea wakati wa kukubali mwaliko", + "An error occurred while rejecting an invitation" : "Hitilafu ilitokea wakati wa kukataa mwaliko", + "{guest} (guest)" : "{guest} (mgeni)", + "Poll draft has been saved" : "Rasimu ya kura imehifadhiwa", + "An error occurred while saving the draft" : "Hitilafu imetokea wakati wa kuhifadhi rasimu", + "An error occurred while submitting your vote" : "Hitilafu ilitokea wakati wa kuwasilisha kura yako", + "An error occurred while ending the poll" : "Hitilafu ilitokea wakati wa kumalizia kura", + "An error occurred while deleting the poll draft" : "Hitilafu ilitokea wakati wa kufuta rasimu ya kura", + "Poll \"{name}\" was created by {user}. Click to vote" : "Kura ya \"{name}\" iliundwa na {user}. Bofya ili kupiga kura", + "Failed to add reaction" : "Imeshindwa kuongeza mwitikio", + "Failed to remove reaction" : "Imeshindwa kuondoa mwitikio", + "Error while uploading file \"{fileName}\"" : "Hitilafu wakati wa kupakia faili \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Hakuna nafasi ya kutosha ya kupakia faili \"{fileName}\"", + "You are not allowed to share files" : "Hauruhusiwi kushiriki faili", + "Error while sharing file" : "Hitilafu wakati wa kushirikisha faili", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Kivinjari unachotumia hakitumiki kikamilifu na Nextcloud Talk. Tafadhali tumia toleo jipya zaidi la Mozilla Firefox, Microsoft Edge, Google Chrome, Opera au Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hour","Katika %n masaa"], + "_%n minute _::_%n minutes_" : ["%n minute ","%ndakika "], + "In {hours} and {minutes}" : "Katika {hours} na {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minute","Katika %n dakika"], + "Later today – {timeLocale}" : "Baadaye leo-{timeLocale}", + "Tomorrow – {timeLocale}" : "Kesho-{timeLocale}", + "This weekend – {timeLocale}" : "Wikendi-{timeLocale}", + "Next week – {timeLocale}" : "Wiki ijayo-{timeLocale}", + "Conversation link copied to clipboard" : "Kiungo cha mazungumzo kimenakiliwa kwenye ubao wa kunakili", + "The link could not be copied" : "Kiungo hakikuweza kunakiliwa", + "Error while parsing a PROPFIND error" : "Hitilafu wakati wa kuchanganua hitilafu ya PROPFIND", + "Sending signaling message has failed" : "Imeshindwa kutuma ujumbe wa kuashiria", + "Lost connection to signaling server. Trying to reconnect." : "Muunganisho umepoteza kwa seva ya kuashiria. Inajaribu kuunganisha tena.", + "Lost connection to signaling server." : "Muunganisho umepoteza kwa seva ya kuashiria.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Seva ya kuashiria iliyosanidiwa inahitaji kusasishwa ili iendane na toleo hili la Talk. Tafadhali wasiliana na utawala wako.", + "Please restart the app." : "Tafadhali anzisha upya programu.", + "Please reload the page." : "Tafadhali pakia ukurasa upya ", + "Please try to restart the app." : "Tafadhali jaribu kuanzisha upya programu.", + "Please try to reload the page." : "Tafadhali jaribu kupakia upya ukurasa.", + "Do not disturb" : "Acha kusumbua", + "Away" : "Mbali", + "Microphone {number}" : "Maikrofoni {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Spika {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Unaonekana unaongea huku umenyamazishwa, tafadhali acha kunyamazisha ili wengine wakusikie", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Haikuweza kuanzisha muunganisho na angalau mshiriki mmoja. Seva ya TURN inaweza kuhitajika kwa hali yako. Tafadhali mwombe msimamizi wako aweke mipangilio kufuatia {linkstart}hati hizi{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Hii inachukua muda mrefu kuliko ilivyotarajiwa. Je, ruhusa za midia tayari zimetolewa (au zimekataliwa)? Ikiwa ndio, tafadhali anzisha kivinjari chako upya, kwani sauti na video hazifanyi kazi", + "Access to microphone & camera is only possible with HTTPS" : "Ufikiaji wa maikrofoni na kamera unawezekana tu kwa HTTPS", + "Please move your setup to HTTPS" : "Tafadhali hamishia usanidi wako hadi HTTPS", + "Access to microphone & camera was denied" : "Ufikiaji wa maikrofoni na kamera umekataliwa", + "WebRTC is not supported in your browser" : "WebRTC haitumiki katika kivinjari chako", + "Please use a different browser like Firefox or Chrome" : "Tafadhali tumia kivinjari tofauti kama Firefox au Chrome", + "Error while accessing microphone & camera" : "Hitilafu wakati wa kufikia maikrofoni na kamera", + "%s Talk on your mobile devices" : "%s Zungumza kwenye vifaa vyako vya mkononi", + "Join conversations at any time, anywhere, on any device." : "Jiunge na mazungumzo wakati wowote, mahali popote, kwenye kifaa chochote.", + "Android app" : "Programu ya Android", + "iOS app" : "Programu ya iOS", + "__language_name__" : "_lugha_jina_", + "Webhook Demo" : "Demo ya Webhook ", + "Call summary (%s)" : "Muhtasari wa simu (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Boti ya muhtasari wa simu huchapisha ujumbe wa muhtasari baada ya simu kuorodhesha washiriki wote na kuelezea majukumu", + "Tasks" : "Kazi", + "Notes" : "Madokezo", + "Reports" : "Taarifa", + "Decisions" : "Maamuzi", + "Agenda" : "Ajenda", + "Call summary" : "Muhtasari wa simu", + "Call summary - {title}" : "Muhtasari wa simu-{title}", + "Talk conversation for event" : "Mazungumzo ya Talk kwa tukio", + "Client Push is installed, this improves the performance of desktop clients." : "Msukumo wa Mteja umewekwa, hii inaboresha utendaji wa wateja wa eneo-kazi.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} haijasakinishwa, hii inaweza kusababisha matatizo ya utendakazi unapotumia wateja wa eneo-kazi.", + "Next meeting" : "Mkutano ujao", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Ratibu mkutano kutoka kwa kalenda yako. Mazungumzo ya Talk yanahitaji kuwekwa kama eneo ili kuonekana hapa", + "Join conversations from remote Nextcloud servers" : "Jiunge na mazungumzo kutoka kwa seva za mbali za Nextcloud", + "Your default media state has been saved" : "Hali yako chaguomsingi ya midia imehifadhiwa", + "Set reminder for later today" : "Weka kikumbusho cha baadaye leo", + "Set reminder for tomorrow" : "Weka kikumbusho cha kesho", + "Set reminder for this weekend" : "Weka kikumbusho cha wikendi hii", + "Set reminder for next week" : "Weka kikumbusho cha wiki ijayo", + "Generate summary" : "Tengeneza muhtasari", + "Open poll • You voted already" : "Kura ya wazi • Umeshapiga kura", + "Open poll • Click to vote" : "Fungua kura • Bofya kupiga kura", + "Poll • Ended" : "Kura ya maoni • Imeisha", + "Talk recording from {time} ({conversation})" : "Talk inarekodi kutoka {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Matokeo ya kura • kura %n"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Kura iliyofunguliwa • kura %n"], + "Submit vote" : "Wasilisha kura", + "Your privacy setting has been saved" : "Mipangilio yako ya faragha imehifadhiwa", + "Your personal setting has been saved" : "Mipangilio yako ya kibinafsi imehifadhiwa", + "Failed to save sounds setting" : "Imeshindwa kuhifadhi mpangilio wa sauti", + "Sounds setting saved" : "Mipangilio ya sauti imehifadhiwa", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk ilisasishwa, huwezi kuanzisha au kujiunga na simu.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ulijiunga kwenye mazungumzo kwenye dirisha au kifaa kingine. Hii kwa sasa haitumiki na Nextcloud Talk kwa hivyo kipindi hiki kilifungwa.", + "Nextcloud Talk was updated." : "Nextcloud Talk imesasishwa.", + "Nextcloud is in maintenance mode." : "Nextcloud iko katika hali ya matengenezo.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation imesasishwa." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/sw.json b/l10n/sw.json new file mode 100644 index 0000000..daf24ad --- /dev/null +++ b/l10n/sw.json @@ -0,0 +1,2131 @@ +{ "translations": { + "a conversation" : "mazungumzo", + "(Duration %s)" : "(Muda %s)", + "You attended a call with {user1}" : "Ulihudhuria simu na {user1}", + "_%n guest_::_%n guests_" : ["%n guest","%nwageni "], + "You attended a call with {user1} and {user2}" : "Ulihudhuria simu na {user1} na {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ulihudhuria simu na {user1}, {user2} na {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ulihudhuria simu na {user1}, {user2}, {user3} na {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ulihudhuria simu na {user1}, {user2}, {user3}, {user4} na {user5}", + "_%n other_::_%n others_" : ["%n other","%n wengine"], + "{actor} invited you to {call}" : "{actor} alikualika kwenye {call}", + "You were invited to a conversation or had a call" : "Ulialikwa kwenye conversation au ulipigiwa simu", + "Other activities" : "Shughuli nyingine", + "Talk" : "Talk", + "Guest" : "Mgeni", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Karibu kwenye Nextcloud Talk!\nKatika mazungumzo haya utaarifiwa kuhusu vipengele vipya vinavyopatikana katika Nextcloud Talk.", + "## New in Talk %s" : "## Mpya katika Talk %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge na Safari sasa zinaweza kutumika kushiriki katika simu za sauti na video", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Mazungumzo ya mmoja-mmoja sasa yanaendelea na hayawezi kugeuzwa kuwa mazungumzo ya kikundi kwa bahati mbaya tena. Pia wakati mmoja wa washiriki anaondoka kwenye mazungumzo, mazungumzo hayafutwa kiotomatiki tena. Ikiwa tu washiriki wote wawili wataondoka, mazungumzo yanafutwa kutoka kwa seva", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Sasa unaweza kuwaarifu washiriki wote kwa kuchapisha \"@wote\" kwenye gumzo", + "- With the \"arrow-up\" key you can repost your last message" : "- Kwa kitufe cha \"mshale-juu\" unaweza kutuma tena ujumbe wako wa mwisho", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk sasa inaweza kuwa na amri, kutuma \"/msaada\" kama ujumbe wa gumzo ili kuona kama msimamizi wako alisanidi baadhi", + "- With projects you can create quick links between conversations, files and other items" : "- Kwa miradi unaweza kuunda viungo vya haraka kati ya mazungumzo, faili na vitu vingine", + "- You can now mention guests in the chat" : "- Sasa unaweza kutaja wageni kwenye gumzo", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Mazungumzo sasa yanaweza kuwa na kushawishi. Hii itawaruhusu wasimamizi kujiunga na gumzo na kupiga simu tayari ili kuandaa mkutano, huku watumiaji na wageni wakisubiri", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Sasa unaweza kujibu ujumbe moja kwa moja kuwapa watumiaji wengine muktadha zaidi ujumbe wako unahusu nini", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Kutafuta mazungumzo na washiriki sasa pia kutachuja mazungumzo yako yaliyopo, na kurahisisha kupata mazungumzo ya awali.", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Sasa unaweza kuongeza vikundi maalum vya watumiaji kwenye mazungumzo wakati programu ya miduara imesakinishwa", + "- Check out the new grid and call view" : "- Angalia gridi mpya na mtazamo wa simu", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Sasa unaweza kupakia na kuburuta faili moja kwa moja kutoka kwa kifaa chako hadi kwenye gumzo", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Faili zinazoshirikiwa sasa zinafunguliwa moja kwa moja ndani ya mwonekano wa gumzo na programu za watazamaji", + "- You can now search for chats and messages in the unified search in the top bar" : "- Sasa unaweza kutafuta gumzo na ujumbe katika utafutaji uliounganishwa kwenye upau wa juu", + "- Spice up your messages with emojis from the emoji picker" : "- Ongeza ujumbe wako kwa emojis kutoka kwa kichagua emoji", + "- You can now change your camera and microphone while being in a call" : "- Sasa unaweza kubadilisha kamera na maikrofoni yako ukiwa kwenye simu", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Yape mazungumzo yako muktadha fulani kwa maelezo na uufungue ili watumiaji walioingia waweze kuupata na wajiunge wenyewe", + "- See a read status and send failed messages again" : "- Angalia hali ya kusoma na kutuma ujumbe kushindwa tena", + "- Raise your hand in a call with the R key" : "- Inua mkono wako kwenye simu kwa kutumia kitufe cha R", + "- Join the same conversation and call from multiple devices" : "- Jiunge na mazungumzo sawa na upige simu kutoka kwa vifaa vingi", + "- Send voice messages, share your location or contact details" : "- Tuma ujumbe wa sauti, shiriki eneo lako au maelezo ya mawasiliano", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Ongeza vikundi kwenye mazungumzo na washiriki wapya wa kikundi wataongezwa kiotomatiki kama washiriki", + "- A preview of your audio and video is shown before joining a call" : "- Onyesho la kukagua sauti na video yako huonyeshwa kabla ya kujiunga kwenye simu", + "- You can now blur your background in the newly designed call view" : "- Sasa unaweza kutia ukungu mandharinyuma katika mwonekano mpya wa simu ulioundwa", + "- Moderators can now assign general and individual permissions to participants" : "- Wasimamizi sasa wanaweza kutoa ruhusa za jumla na za kibinafsi kwa washiriki", + "- You can now react to chat messages" : "- Sasa unaweza kujibu ujumbe wa gumzo", + "- In the sidebar you can now find an overview of the latest shared items" : "- Katika utepe sasa unaweza kupata muhtasari wa vipengee vya hivi punde vilivyoshirikiwa", + "- Use a poll to collect the opinions of others or settle on a date" : "- Tumia kura ya maoni kukusanya maoni ya wengine au kusuluhisha tarehe", + "- Configure an expiration time for chat messages" : "- Sanidi muda wa mwisho wa ujumbe wa gumzo", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Anzisha simu bila kuwaarifu wengine katika mazungumzo makubwa. Unaweza kutuma arifa za simu mahususi punde tu simu imeanza.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Tuma ujumbe wa gumzo bila kuwaarifu wapokeaji ikiwa sio haraka", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emoji sasa zinaweza kukamilishwa kiotomatiki kwa kuandika \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Unganisha vipengee mbalimbali kwa kutumia kichaguzi mahiri kwa kuandika \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Wasimamizi sasa wanaweza kuunda vyumba vifupi (inahitaji hali ya nyuma ya utendaji wa Juu)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Simu sasa zinaweza kurekodiwa (inahitaji hali ya nyuma ya utendaji wa hali ya juu)", + "- Conversations can now have an avatar or emoji as icon" : "- Mazungumzo sasa yanaweza kuwa na avatar au emoji kama ikoni", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Mandhari pepe sasa yanapatikana pamoja na mandharinyuma yenye ukungu katika simu za video", + "- Reactions are now available during calls" : "- Majibu sasa yanapatikana wakati wa simu", + "- Typing indicators show which users are currently typing a message" : "- Viashirio vya kuandika vinaonyesha ni watumiaji gani wanaandika ujumbe kwa sasa", + "- Groups can now be mentioned in chats" : "- Vikundi sasa vinaweza kutajwa kwenye gumzo", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Rekodi za simu hunakiliwa kiotomatiki ikiwa programu ya mtoaji wa unukuzi imesajiliwa", + "- Chat messages can be translated if a translation provider app is registered" : "- Ujumbe wa gumzo unaweza kutafsiriwa ikiwa programu ya mtoaji tafsiri imesajiliwa", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** sasa inaweza kutumika katika _chat_ jumbe", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks sasa zinapatikana kutekeleza roboti. Tazama hati kwa habari zaidi https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Weka kikumbusho kwenye ujumbe wa gumzo ili kuarifiwa baadaye tena", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Tumia mazungumzo ya **Dokezo la kibinafsi** kuandika madokezo na kushiriki habari kati ya vifaa vyako", + "- Captions allow to send a message with a file at the same time" : "- Manukuu yanaruhusu kutuma ujumbe na faili kwa wakati mmoja", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Video ya spika sasa inaonekana wakati unashiriki skrini na majibu ya simu yanahuishwa", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Ujumbe sasa unaweza kuhaririwa na waandishi na wasimamizi walioingia kwa saa 6", + "- Unsent message drafts are now saved in your browser" : "- Rasimu za ujumbe ambao haujatumwa sasa zimehifadhiwa kwenye kivinjari chako", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Gumzo la maandishi sasa linaweza kufanywa kwa njia iliyoshirikishwa na seva zingine za Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Wasimamizi sasa wanaweza kupiga marufuku akaunti na wageni ili kuwazuia kujiunga tena na mazungumzo", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Simu zinazokuja kutoka kwa matukio ya kalenda zilizounganishwa na uingizwaji wa nje ya ofisi sasa zinaonyeshwa kwenye mazungumzo", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Simu sasa zinaweza kufanywa kwa njia iliyoshirikishwa na seva zingine za Talk (inahitaji hali ya nyuma ya utendaji wa Juu)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Tunakuletea mteja wa eneo-kazi la Nextcloud Talk kwa Windows, macOS na Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Fanya muhtasari wa rekodi za simu na ujumbe ambao haujasomwa kwenye gumzo na Msaidizi wa Nextcloud", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Mikutano iliyoboreshwa ya kuwatambua wageni walioalikwa kupitia anwani zao za barua pepe, uingizaji wa orodha za washiriki, rasimu za kura na kupakua orodha za washiriki wa simu", + "- Archive conversations to stay focused" : "- Hifadhi mazungumzo ili kukaa umakini", + "- Schedule a meeting into your calendar from within a conversation" : "- Panga mkutano katika kalenda yako kutoka ndani ya mazungumzo", + "- Search for messages of the current conversation directly in the right sidebar" : "- Tafuta ujumbe wa mazungumzo ya sasa moja kwa moja kwenye upau wa kando wa kulia", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Tazama mazungumzo zaidi kwa mtazamo wa kwanza na orodha mpya iliyounganishwa (washa katika mipangilio ya Majadiliano)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Mazungumzo ya mkutano sasa yanasawazisha kichwa na maelezo kutoka kwa kalenda na yanafichwa na kichujio cha utafutaji hadi yatakapokaribia kuanza.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Weka alama kwenye mazungumzo kuwa nyeti katika mipangilio ya arifa, ili kuficha maudhui ya ujumbe kutoka kwa orodha ya mazungumzo na arifa", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Ili kupokea arifa zinazotumwa na programu hata wakati huitumii wakati wa \"Do not disturb\", weka alama kwenye mazungumzo kuwa muhimu", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Ongeza washiriki wengine kwenye simu ya mmoja-kwa-mmoja ili kuunda simu mpya ya kikundi kwa kuruka", + "- Use threads to keep your chat and discussions organized" : "- Tumia nyuzi kuweka gumzo na mijadala yako kupangwa", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Unukuzi wa moja kwa moja sasa unapatikana wakati wa simu (inahitaji unukuzi wa moja kwa moja wa ExApp na utendakazi wa hali ya juu nyuma)", + "_All %n participant_::_All %n participants_" : ["All %n participant","Washiriki %n wote"], + "Talk updates ✅" : "Masasisho ya Talk ✅", + "Reaction deleted by author" : "Maoni yamefutwa na mwandishi", + "{actor} created the conversation" : "{actor} alianzisha mazungumzo", + "You created the conversation" : "Ulianzisha mazungumzo", + "System created the conversation" : "Mfumo uliunda mazungumzo", + "An administrator created the conversation" : "Msimamizi alianzisha mazungumzo", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} alibadilisha jina la mazungumzo kutoka \"%1$s\" mpaka \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ulibadilisha jina la mazungumzo kutoka \"%1$s\" mpaka \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"", + "{actor} set the description" : "{actor} ameweka maelezo", + "You set the description" : "Umeweka maelezo", + "An administrator set the description" : "Msimamizi aliweka maelezo", + "{actor} removed the description" : "{actor} ameondoa maelezo", + "You removed the description" : "Umeondoa maelezo", + "An administrator removed the description" : "Msimamizi aliondoa maelezo", + "You started a silent call" : "Ulianzisha simu ya kimya", + "Outgoing silent call" : "Simu ya kimya inayotoka", + "{actor} started a silent call" : "{actor} alianza kuita kimya kimya ", + "Incoming silent call" : "Simu ya kimya inayoingia", + "You started a call" : "Umepiga simu", + "Outgoing call" : "Simu inayotoka", + "{actor} started a call" : "{actor} alianza simu", + "Incoming call" : "Simu inaingia", + "{actor} joined the call" : "{actor} amejiunga kwenye simu", + "You joined the call" : "Umejiunga kwenye simu", + "{actor} left the call" : "{actor} ameacha simu", + "You left the call" : "Umeacha simu", + "{actor} unlocked the conversation" : "{actor} amefungua mazungumzo", + "You unlocked the conversation" : "Umefungua mazungumzo", + "An administrator unlocked the conversation" : "Msimamizi alifungua mazungumzo", + "{actor} locked the conversation" : "{actor} amefunga mazungumzo", + "You locked the conversation" : "Umefunga mazungumzo", + "An administrator locked the conversation" : "Msimamizi alifunga mazungumzo", + "{actor} limited the conversation to the current participants" : "{actor} amepunguza mazungumzo kwa washiriki wa sasa", + "You limited the conversation to the current participants" : "Umeweka mazungumzo kwa washiriki wa sasa", + "An administrator limited the conversation to the current participants" : "Msimamizi alizuia mazungumzo kwa washiriki wa sasa", + "{actor} opened the conversation to registered users" : "{actor} alifungua mazungumzo kwa watumiaji waliojiandikisha", + "You opened the conversation to registered users" : "Ulifungua mazungumzo kwa watumiaji waliojiandikisha", + "An administrator opened the conversation to registered users" : "Msimamizi alifungua mazungumzo kwa watumiaji waliojiandikisha", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} alifungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "You opened the conversation to registered users and users created with the Guests app" : "Umefungua mazungumzo kwa watumiaji na watumiaji waliojiandikisha ulioundwa na programu ya Wageni", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Msimamizi alifungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "The conversation is now open to everyone" : "Mazungumzo sasa yako wazi kwa kila mtu", + "{actor} opened the conversation to everyone" : "{actor} alifungua mazungumzo kwa kila mtu", + "You opened the conversation to everyone" : "Ulifungua mazungumzo kwa kila mtu", + "{actor} restricted the conversation to moderators" : "{actor} alizuia mazungumzo kwa wasimamizi", + "You restricted the conversation to moderators" : "Ulizuia mazungumzo kwa wasimamizi", + "{actor} started breakout rooms" : "{actor} ameanzisha vyumba vya kujitenga", + "You started breakout rooms" : "Umeanzisha vyumba vya kujitenga", + "{actor} stopped breakout rooms" : "{actor}alisimamisha vyumba vya vikundi ", + "You stopped breakout rooms" : "Ulisimamisha vyumba vya vikundi", + "{actor} allowed guests" : "{actor} aliruhusu wageni ", + "You allowed guests" : "Uliruhusu wageni", + "An administrator allowed guests" : "Msimamizi aliruhusu wageni", + "{actor} disallowed guests" : "{actor}amekataza wageni ", + "You disallowed guests" : "Umekataza wageni", + "An administrator disallowed guests" : "Msimamizi amekataza wageni", + "{actor} set a password" : "{actor}ameweka nenosiri ", + "You set a password" : "Umeweka nenosiri", + "An administrator set a password" : "Msimamizi ameweka nenosiri", + "{actor} removed the password" : "{actor}ameondoa nenosiri ", + "You removed the password" : "Umeondoa nenosiri", + "An administrator removed the password" : "Msimamizi aliondoa nenosiri", + "{actor} added {user}" : "{actor} alimwongeza {user}", + "You joined the conversation" : "Ulijiunga na mazungumzo", + "{actor} joined the conversation" : "{actor} alijiunga na mazungumzo", + "You added {user}" : "Ulimwongeza {user}", + "{actor} added you" : "{actor} alikuongeza ", + "An administrator added you" : "Msimamizi alikuongeza", + "An administrator added {user}" : "Msimamizi alimwongeza {user}", + "You left the conversation" : "Uliacha mazungumzo", + "{actor} left the conversation" : "{actor} aliacha mazungumzo", + "{actor} removed {user}" : "{actor} alimwondoa {user}", + "You removed {user}" : "Ulimwondoa{user}", + "{actor} removed you" : "{actor} alikuondoa ", + "An administrator removed you" : "Msimamizi alikuondoa", + "An administrator removed {user}" : " Msimamizi amemwondoa {user}", + "{actor} invited {federated_user}" : "{actor} alimwalika {federated_user}", + "You invited {federated_user}" : "Ulimwalika {federated_user}", + "You accepted the invitation" : "Ulikubali mwaliko", + "{actor} invited you" : "{actor} invited you", + "An administrator invited you" : "An administrator invited you", + "An administrator invited {federated_user}" : "Msimamizi amemwalika {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user}alikubali mwaliko ", + "{actor} removed {federated_user}" : "{actor} removed {federated_user}", + "You removed {federated_user}" : "Ulimwondoa {federated_user}", + "You declined the invitation" : "Ulikataa mwaliko", + "An administrator removed {federated_user}" : "Msimamizi amemwondoa {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} alikataa mwaliko ", + "{actor} added group {group}" : "{actor} aliongeza kikundi {group}", + "You added group {group}" : "Uliongeza kikundi {group}", + "An administrator added group {group}" : "Msimamizi aliongeza kikundi {group}", + "{actor} removed group {group}" : "{actor} aliondoa kundi {group}", + "You removed group {group}" : "Uliondoa kundi {group}", + "An administrator removed group {group}" : "Msimamizi aliondoa kikundi {group}", + "{actor} added team {circle}" : "{actor} aliongeza timu {circle}", + "You added team {circle}" : "Ulkongeza timu {circle}", + "An administrator added team {circle}" : "Msimamizi aliongeza timu {circle}", + "{actor} removed team {circle}" : "{actor} aliondoa timu {circle}", + "You removed team {circle}" : "Umeondoa timu {circle}", + "An administrator removed team {circle}" : "Msimamizi aliondoa timu {circle}", + "{actor} added {phone}" : "{actor} alimwongeza {phone}", + "You added {phone}" : "Ulimwongeza {phone}", + "An administrator added {phone}" : "Msimamizi alimwongeza {phone}", + "{actor} removed {phone}" : "{actor} amemwondoa {phone}", + "You removed {phone}" : "Umemwondoa {phone}", + "An administrator removed {phone}" : "Msimamizi amemwondoa {phone}", + "{actor} promoted {user} to moderator" : "{actor} alipandishwa cheo {user} kuwa msimamizi", + "You promoted {user} to moderator" : "Ulimpandisha hadhi {user} kuwa msimamizi", + "{actor} promoted you to moderator" : "{actor} alikupandisha cheo na kuwa msimamizi", + "An administrator promoted you to moderator" : "Msimamizi alikupandisha cheo na kuwa msimamizi", + "An administrator promoted {user} to moderator" : "Msimamizi alimpandisha cheo{user} kuwa msimamizi", + "{actor} demoted {user} from moderator" : "{actor} amemshusha cheo{user} kutoka kwa msimamizi", + "You demoted {user} from moderator" : "Umemshusha {user} kutoka kwa msimamizi", + "{actor} demoted you from moderator" : "{actor} amekushusha cheo kutoka kwa msimamizi", + "An administrator demoted you from moderator" : "Msimamizi amekushusha kutoka kwa msimamizi", + "An administrator demoted {user} from moderator" : "Msimamizi alimshusha {user} kutoka kwa msimamizi", + "{actor} shared a file which is no longer available" : "{actor} alishiriki faili ambayo haipatikani tena ", + "You shared a file which is no longer available" : "Umeshiriki faili ambayo haipatikani tena", + "File shares are currently not supported in federated conversations" : "Ushiriki wa faili kwa sasa hautumiki katika mazungumzo yaliyoshirikishwa", + "The shared location is malformed" : "Eneo lililoshirikiwa lina hitilafu", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} amesanidi Matterbridge ili kusawazisha mazungumzo haya na gumzo zingine", + "You set up Matterbridge to synchronize this conversation with other chats" : "Umeweka mipangilio ya Matterbridge ili kusawazisha mazungumzo haya na gumzo zingine", + "{actor} created thread {title}" : "{actor}aliunda mazungumzo {title}", + "You created thread {title}" : "Uliunda mazungumzo {title}", + "{actor} renamed thread {title}" : "{actor} amebadilisha jina la mazungumzo {title}", + "You renamed thread {title}" : "Umebadilisha jina la mazungumzo {title}", + "{actor} updated the Matterbridge configuration" : "{actor} alisasisha usanidi wa Matterbridge", + "You updated the Matterbridge configuration" : "Ulisasisha usanidi wa Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} ameondoa usanidi wa Matterbridge", + "You removed the Matterbridge configuration" : "Umeondoa usanidi wa Matterbridge", + "{actor} started Matterbridge" : "{actor} ameanzisha Matterbridge", + "You started Matterbridge" : "Umeanzisha Matterbridge", + "{actor} stopped Matterbridge" : "{actor} alisimamisha Matterbridge", + "You stopped Matterbridge" : "Ulisimamisha Matterbridge", + "{actor} deleted a message" : "{actor} amefuta ujumbe", + "You deleted a message" : "Umefuta ujumbe", + "{actor} edited a message" : "{actor} amehariri ujumbe", + "You edited a message" : "Umehariri ujumbe", + "{actor} deleted a reaction" : "{actor} amefuta maoni", + "You deleted a reaction" : "Umefuta maoni", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["You set the message expiration to %n week","Umeweka muda wa mwisho wa ujumbe kuwa wiki %n"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["You set the message expiration to %n day","Umeweka muda wa mwisho wa ujumbe kuwa siku %n"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["You set the message expiration to %n hour","Umeweka muda wa mwisho wa ujumbe kuwa saa %n"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["You set the message expiration to %n minute","Umeweka muda wa mwisho wa ujumbe kuwa dakika %n"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} set the message expiration to %n week","{actor} amweka muda wa mwisho wa ujumbe kuwa wiki %n"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} set the message expiration to %n day","{actor} ameweka muda wa mwisho wa ujumbe kuwa siku %n"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} set the message expiration to %n hour","{actor} weka muda wa mwisho wa ujumbe kuwa saa %n"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} set the message expiration to %n minute","{actor} ameweka muda wa mwisho wa ujumbe kuwa dakika %n"], + "{actor} disabled message expiration" : "{actor} amezima muda wa kuisha kwa ujumbe", + "You disabled message expiration" : "Umezima muda wa kuisha kwa ujumbe", + "{actor} cleared the history of the conversation" : "{actor} amefuta historia ya mazungumzo", + "You cleared the history of the conversation" : "Umefuta historia ya mazungumzo", + "{actor} set the conversation picture" : "{actor} anaweka picha ya mazungumzo", + "You set the conversation picture" : "Unaweka picha ya mazungumzo", + "{actor} removed the conversation picture" : "{actor} ameondoa picha ya mazungumzo ", + "You removed the conversation picture" : "Umeondoa picha ya mazungumzo", + "{actor} ended the poll {poll}" : "{actor} alimaliza kupiga kura {poll}", + "You ended the poll {poll}" : "Umemaliza kupiga kura {poll}", + "{actor} started the video recording" : "{actor} ameanza kurekodi video", + "You started the video recording" : "Umeanza kurekodi video", + "{actor} stopped the video recording" : "{actor} amesimamisha kurekodi video", + "You stopped the video recording" : "Umesimamisha kurekodi video", + "{actor} started the audio recording" : "{actor} ameanza kurekodi sauti", + "You started the audio recording" : "Umeanza kurekodi sauti", + "{actor} stopped the audio recording" : "{actor} stopped the audio recording", + "You stopped the audio recording" : "Umesimamisha kurekodi sauti", + "The recording failed" : "Imeshindwa kurekodi", + "Someone voted on the poll {poll}" : "Mtu alipiga kura kwenye kura {poll}", + "Message deleted by author" : "Ujumbe umefutwa na mwandishi", + "Message deleted by {actor}" : "Ujumbe ulifutwa na {actor}", + "Message deleted by you" : "Ujumbe umefutwa na wewe", + "Deleted user" : "Mtumiaji aliyefutwa", + "Unknown number" : "Nambari isiyojulikana", + "Administration" : "Utawala", + "System" : "Mfumo", + "%s (guest)" : "%s (mgeni)", + "Missed call" : "Simu ambayo haikujibiwa", + "Unanswered call" : "Simu ambayo haikupokelewa", + "Call ended (Duration {duration})" : "Simu imekatika (Duration {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Simu ilikatwa, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} alikata simu (Duration {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})","Simu na %nwageni ilikatishwa, kwa kuwa ilifikia upeo wa muda wa simu (Duration {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Call with %n guest ended (Duration {duration})","Simu na %n wageni ilimalizika (Duration {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} ended the call with %n guest (Duration {duration})","{actor} alimaliza simu na %n wageni (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1} ended (Duration {duration})" : "Simu na {user1} ilimalizika (Duration {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} alimaliza simu na {user1} (Duration {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1} na {user2} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Simu na {user1} na {user2} iliisha (Duration {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} amemaliza simu na {user1} na {user2} (Duration {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}na {user3} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Simu na{user1}, {user2}na {user3}ilimalizika (Duration {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2} na {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}, {user3} and {user4} ilikamilika, kwani ilifikia upeo wa muda wa simu (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Simu na {user1}, {user2}, {user3} and {user4} iliisha (Duration {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2}, {user3} na {user4} (Duration {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Simu na {user1}, {user2}, {user3}, {user4} and {user5}ilikamilika, kwani ilifikia upeo wa muda wa simu (Muda {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Simu na {user1}, {user2}, {user3}, {user4} and {user5} imeisha (Muda {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} alimaliza simu na {user1}, {user2}, {user3}, {user4} na{user5} (Muda {duration})", + "Message of {user} in {conversation}" : "Ujumbe wa {user} katika {conversation}", + "Message of {user}" : "Ujumbe wa {user}", + "Message of a deleted user in {conversation}" : "Ujumbe wa mtumiaji aliyefutwa katika {conversation}", + "Talk conversations" : "Mazungumzo ya Talk", + "Talk to %s" : "Talk kwa %s", + "An error occurred. Please contact your administrator." : "Hitilafu imetokea. Tafadhali wasiliana na msimamizi wako.", + "Storage quota exceeded" : "Kiasi cha hifadhi kimepitwa", + "File not found" : "Faili halipatikani", + "File is not shared, or shared but not with the user" : "Faili haijashirikiwa, au kushirikiwa lakini sio na mtumiaji", + "No account available to delete." : "Hakuna akaunti inayopatikana ya kufuta.", + "Poll" : "Kura ya maoni", + "Password needs to be set" : "Nenosiri linahitaji kuwekwa", + "Uploading the file failed" : "Imeshindwa kupakia faili", + "No image file provided" : "Hakuna faili ya picha iliyotolewa", + "File is too big" : "Faili ni kubwa mno", + "Invalid file provided" : "Faili iliyotolewa si halali", + "Invalid image" : "Taswira si halisi", + "Unknown filetype" : "Aina ya faili haijulikani", + "Talk mentions" : "Mitajo ya Talk", + "More conversations" : "Mazungumzo zaidi", + "Say hi to your friends and colleagues!" : "Sema hi kwa marafiki zako na wenzako!", + "No unread mentions" : "Hakuna mtajo ambao haujasomwa", + "Call in progress" : "Simu inaendelea", + "You were mentioned" : "Ulitajwa", + "Write to conversation" : "Andika kwa mazungumzo", + "Writes event information into a conversation of your choice" : "Inandika habari ya tukio kwenye mazungumzo unayopenda", + "Missing email field in header line" : "Sehemu ya barua pepe inayokosekana katika kichwa cha habari", + "Following lines are invalid: %s" : "Mistari ifuatayo ni batili: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s amekualika kwenye mazungumzo \"%2$s\".", + "You were invited to conversation \"%s\"." : "Ulialikwa kwenye mazungumzo \"%s\".", + "Conversation invitation" : "Mwaliko wa mazungumzo", + "Scheduled time" : "Muda uliopangwa", + "Description" : "Maelezo", + "You can also dial-in via phone with the following details" : "Unaweza pia kupiga simu kupitia simu na maelezo yafuatayo", + "Dial-in information" : "Maelezo ya kupiga simu", + "Meeting ID" : "Kitambulisho cha Mkutano", + "Your PIN" : "PIN yako", + "Click the button below to join the lobby now." : "Bofya kitufe kilicho hapa chini ili kujiunga na kushawishi sasa.", + "Click the link below to join the lobby now." : "Bofya kiungo hapa chini ili kujiunga na kushawishi sasa.", + "Join lobby for \"%s\"" : "Jiunge na kushawishi kwa \"%s\"", + "Click the button below to join the conversation now." : "Bofya kitufe kilicho hapa chini ili kujiunga na mazungumzo sasa.", + "Click the link below to join the conversation now." : "Bofya kiungo kilicho hapa chini ili kujiunga na mazungumzo sasa.", + "Join \"%s\"" : "Jiunge \"%s\"", + "Meeting" : "Mkutano", + "Password request: %s" : "Ombi la nenosiri: %s", + "Private conversation" : "Mazungumzo ya faragha", + "Deleted user (%s)" : "Mtumiaji aliyefutwa (%s)", + "Failed to upload call recording" : "Imeshindwa kupakia rekodi ya simu", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Seva ya kurekodi imeshindwa kupakia rekodi ya simu {call}. Tafadhali wasiliana na utawala.", + "Share to chat" : "Shiriki kwenye gumzo", + "Dismiss notification" : "Ondoa arifa", + "Call recording now available" : "Rekodi ya simu sasa inapatikana", + "The recording for the call in {call} was uploaded to {file}." : "Rekodi ya simu katika {call} ilipakiwa {file}.", + "Transcript now available" : "Nakala sasa inapatikana", + "The transcript for the call in {call} was uploaded to {file}." : "Nakala ya simu katika {call} ilipakiwa kwa {file}.", + "Failed to transcript call recording" : "Imeshindwa kunakili rekodi ya simu", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Seva imeshindwa kunakili rekodi kwenye {file} kwa simu iliyo katika {call}. Tafadhali wasiliana na utawala.", + "Call summary now available" : "Muhtasari wa simu sasa unapatikana", + "The summary for the call in {call} was uploaded to {file}." : "Muhtasari wa simu katika {call} ulipakiwa kwenye {file}.", + "Failed to summarize call recording" : "Imeshindwa kufanya muhtasari wa kurekodi simu", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Seva imeshindwa kufanya muhtasari wa rekodi kwenye {file} kwa simu katika {call}. Tafadhali wasiliana na utawala.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} amekualika kujiunga {roomName} kwenye {remoteServer}", + "Accept" : "Kubali", + "Decline" : "Kataa", + "{user1} invited you to a federated conversation" : "{user1} alikualika kwenye mazungumzo ya shirikisho", + "Someone reacted" : "Mtu fulani alijibu", + "New message" : "Ujumbe mpya", + "Reminder" : "Kikumbushio", + "Someone mentioned you" : "Mtu alikutaja", + "Notification" : "Taarifa", + "Someone reacted in a private conversation" : "Mtu alijibu katika mazungumzo ya faragha", + "You received a message in a private conversation" : "Umepokea ujumbe katika mazungumzo ya faragha", + "Reminder in a private conversation" : "Kikumbusho katika mazungumzo ya faragha", + "Someone mentioned you in a private conversation" : "Mtu fulani alikutaja katika mazungumzo ya faragha", + "Notification in a private conversation" : "Arifa katika mazungumzo ya faragha", + "Reminder: You in {call}" : "Kikumbusho: Wewe katika {call}", + "Reminder: {user} in {call}" : "Kikumbusho: {user} katika {call}", + "Reminder: Deleted user in {call}" : "Kikumbusho: Mtumiaji aliyefutwa kwenye {call}", + "Reminder: {guest} (guest) in {call}" : "Kikumbusho: {guest} (mgeni) kwenye {call}", + "Reminder: Guest in {call}" : "Kikumbusho: Mgeni kwenye {call}", + "{user} reacted with {reaction}" : "{user}alijibizana na {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} alijibizana na {reaction} katika {call}", + "Deleted user reacted with {reaction} in {call}" : "Mtumiaji aliyefutwa alijibizana na {reaction} katika {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (mgeni) alijibishana na {reaction} katika {call}", + "Guest reacted with {reaction} in {call}" : "Mgeni alijibishana na {reaction} katika {call}", + "{user} in {call}" : "{user} katika {call}", + "Deleted user in {call}" : "Mtumiaji aliyefutwa kwenye {call}", + "{guest} (guest) in {call}" : "{guest} (mgeni) katika {call}", + "Guest in {call}" : "Mgeni katika {call}", + "{user} sent you a private message" : "{user} alikutumia ujumbe wa faragha", + "{user} sent a message in conversation {call}" : "{user} alituma ujumbe katika mazungumzo {call}", + "A deleted user sent a message in conversation {call}" : " Mtumiaji aliyefutwa alituma ujumbe kwenye mazungumzo {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (mgeni) alituma ujumbe katika mazungumzo {call}", + "A guest sent a message in conversation {call}" : "Mgeni alituma ujumbe katika mazungumzo {call}", + "{user} replied to your private message" : "{user} alijibu ujumbe wako binafsi", + "{user} replied to your message in conversation {call}" : "{user} alijibu ujumbe wako katika mazungumzo {call}", + "A deleted user replied to your message in conversation {call}" : "Mtumiaji aliyefutwa alijibu ujumbe wako kwenye mazungumzo {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(mgeni) alijibu ujumbe wako katika mazungumzo {call}", + "A guest replied to your message in conversation {call}" : "Mgeni alijibu ujumbe wako katika mazungumzo {call}", + "Reminder: You in private conversation {call}" : "Kikumbusho: Wewe katika mazungumzo ya faragha {call}", + "Reminder: A deleted user in private conversation {call}" : "Kikumbusho: Mtumiaji aliyefutwa katika mazungumzo ya faragha {call}", + "Reminder: {user} in private conversation" : "Kikumbusho: {user} katika mazungumzo ya faragha", + "Reminder: You in conversation {call}" : "Kikumbusho: Wewe kwenye mazungumzo {call}", + "Reminder: {user} in conversation {call}" : "Kikumbusho: {user} katika mazungumzo {call}", + "Reminder: A deleted user in conversation {call}" : "Kikumbusho: Mtumiaji aliyefutwa kwenye mazungumzo {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Kikumbusho: {guest}(mgeni) katika mazungumzo {call}", + "Reminder: A guest in conversation {call}" : "Kikumbusho: Mgeni katika mazungumzo {call}", + "{user} reacted with {reaction} to your private message" : "{user}alijibizana na {reaction}kwa ujumbe wako wa faragha ", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} ilijibizana na {reaction} kwa ujumbe wako katika mazungumzo {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Mtumiaji aliyefutwa alijibu kwa kutumia {reaction} ujumbe wako kwenye mazungumzo {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (mgeni) alijibu kwa {reaction} ujumbe wako kwenye mazungumzo {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Mgeni alijibu kwa {reaction} ujumbe wako kwenye mazungumzo {call}", + "{user} mentioned you in a private conversation" : "{user} alikutaja kwenye mazungumzo ya faragha", + "{user} mentioned group {group} in conversation {call}" : "{user} alitaja kikundi {group} kwenye mazungumzo {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} alitaja timu {team} kwenye mazungumzo {call}", + "{user} mentioned everyone in conversation {call}" : "{user} alitaja kila mtu kwenye mazungumzo {call}", + "{user} mentioned you in conversation {call}" : "{user} alikutaja kwenye mazungumzo {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Mtumiaji aliyefutwa alitaja kikundi cha {group} kwenye mazungumzo {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Mtumiaji aliyefutwa alitaja timu {team} kwenye mazungumzo {call}", + "A deleted user mentioned everyone in conversation {call}" : "Mtumiaji aliyefutwa alitaja kila mtu kwenye mazungumzo {call}", + "A deleted user mentioned you in conversation {call}" : "Mtumiaji aliyefutwa alikutaja kwenye mazungumzo {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (mgeni) alitaja kikundi {group} kwenye mazungumzo {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (mgeni) alitaja timu {team} kwenye mazungumzo {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(mgeni) alitaja kila mtu katika mazungumzo {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(mgeni) alikutaja kwenye mazungumzo {call}", + "A guest mentioned group {group} in conversation {call}" : "Mgeni alitaja kikundi {group} kwenye mazungumzo {call}", + "A guest mentioned team {team} in conversation {call}" : "Mgeni alitaja timu {team} kwenye mazungumzo {call}", + "A guest mentioned everyone in conversation {call}" : "Mgeni alitaja kila mtu kwenye mazungumzo {call}", + "A guest mentioned you in conversation {call}" : "Mgeni alikutaja kwenye mazungumzo {call}", + "View message" : "Tazama ujumbe", + "Dismiss reminder" : "Ondoa kikumbusho", + "View chat" : "Tazama gumzo", + "{user} invited you to a group conversation: {call}" : "{user}alikualika kwenye mazungumzo ya kikundi: {call}", + "Join call" : "Jiunge katika muito", + "Answer call" : "Jibu simu", + "{user} would like to talk with you" : "{user} ningependa kuzungumza na wewe", + "Call back" : "Piga simu tena", + "You missed a call from {user}" : "Ulikosa simu kutoka {user}", + "Accept call" : "Pokea simu", + "Incoming phone call from {call}" : "Simu inayoingia kutoka {call}", + "You missed a phone call from {call}" : "Ulikosa simu kutoka {call}", + "A group call has started in {call}" : "Simu ya kikundi imeanza {call}", + "You missed a group call in {call}" : "Ulikosa simu ya kikundi katika {call}", + "{email} is requesting the password to access {file}" : "{email} inaomba nenosiri ili kufikia {file}", + "{email} tried to request the password to access {file}" : "{email} alijaribu kuomba nenosiri ili kufikia {file}", + "Someone is requesting the password to access {file}" : "Mtu anaomba nenosiri ili kufikia {file}", + "Someone tried to request the password to access {file}" : " Mtu alijaribu kuomba nenosiri ili kufikia {file}", + "Open settings" : "Mipangilio ya wazi", + "Hosted signaling server added" : "iliyopangishwa imeongezwa", + "The hosted signaling server is now configured and will be used." : "Seva ya kuashiria iliyopangishwa sasa imesanidiwa na itatumika.", + "Hosted signaling server removed" : "Seva ya kuashiria iliyopangishwa imeondolewa", + "The hosted signaling server was removed and will not be used anymore." : "Seva ya kuashiria iliyopangishwa iliondolewa na haitatumika tena.", + "Hosted signaling server changed" : "Seva ya kuashiria iliyopangishwa imebadilishwa", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Akaunti ya seva inayopangishwa imebadilisha hali kutoka \"{oldstatus}\" mpaka \"{newstatus}\".", + "pending" : "inayosubiri", + "active" : "hai", + "expired" : "iliyoisha muda", + "blocked" : "iliyozuiliwa", + "error" : "hitilafu", + "The certificate of {host} expires in {days} days" : "Muda wa cheti cha {host} utakwisha baada ya siku {days}", + "The certificate of {host} expired" : "Cheti cha {host} muda wake umekwisha", + "Contact via Talk" : "Wasiliana kupitia Talk", + "Open Talk" : "Fungua Talk", + "Default" : "Chaguo msingi", + "Presentation" : "Wasilisho", + "Webinar" : "Webinar", + "Conversations" : "Mazungumzo", + "Messages in current conversation" : "Ujumbe katika mazungumzo ya sasa", + "{user}" : "{user}", + "Messages" : "Jumbe", + "{user} in {conversation}" : "{user} katika {conversation}", + "Messages in other conversations" : "Ujumbe katika mazungumzo mengine", + "One-to-one rooms always need to show the other users avatar" : "Vyumba vya moja hadi moja vinahitaji kuonyesha avatar ya watumiaji wengine kila wakati", + "Invalid emoji character" : "Herufi batili ya emoji", + "Invalid background color" : "Rangi ya mandharinyuma si sahihi", + "Avatar image is not square" : "Picha ya avatar si ya mraba", + "Room {number}" : "Chumba {number}", + "Other" : "Mengine", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Imeshindwa kuomba majaribio kwa sababu seva ya majaribio haipatikani. Tafadhali jaribu tena baadaye.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kuna tatizo na uthibitishaji wa mfano huu. Labda haipatikani kutoka nje ili kuthibitisha URL yake.", + "Something unexpected happened." : "Kitu kisichotarajiwa kilitokea.", + "The URL is invalid." : "URL ni batili.", + "An HTTPS URL is required." : "URL ya HTTPS inahitajika.", + "The email address is invalid." : "Anwani ya barua pepe si sahihi.", + "The language is invalid." : "Lugha ni batili.", + "The country is invalid." : "Nchi ni batili.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Kuna tatizo na ombi la kesi. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "Too many requests are send from your servers address. Please try again later." : "Maombi mengi sana yanatumwa kutoka kwa anwani ya seva zako. Tafadhali jaribu tena baadaye.", + "There is already a trial registered for this Nextcloud instance." : "Tayari kuna jaribio lililosajiliwa kwa mfano huu wa Nextcloud.", + "Something unexpected happened. Please try again later." : "Kitu kisichotarajiwa kilitokea. Tafadhali jaribu tena baadaye.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Imeshindwa kuomba majaribio kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali jaribu tena baadaye.", + "Trial requested but failed to get account information. Please check back later." : "Jaribio liliombwa lakini halikuweza kupata maelezo ya akaunti. Tafadhali angalia tena baadaye.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Kuna tatizo katika uthibitishaji wa ombi hili. Labda haipatikani kutoka nje ili kuthibitisha URL yake.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Imeshindwa kuleta maelezo ya akaunti kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali angalia tena baadaye.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Kuna tatizo la kuleta maelezo ya akaunti. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "There is no such account registered." : "Hakuna akaunti kama hiyo iliyosajiliwa.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Imeshindwa kuleta maelezo ya akaunti kwa sababu seva ya majaribio haipatikani. Tafadhali angalia tena baadaye.", + "Deleting the hosted signaling server account failed. Please check back later." : "Imeshindwa kufuta akaunti ya seva iliyopangishwa. Tafadhali angalia tena baadaye.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Imeshindwa kufuta akaunti kwa sababu seva ya majaribio ilifanya kazi vibaya. Tafadhali angalia tena baadaye.", + "There is a problem with deleting the account. Please check your logs for further information." : "Kuna tatizo la kufuta akaunti. Tafadhali angalia kumbukumbu zako kwa habari zaidi.", + "Too many requests are sent from your servers address. Please try again later." : "Maombi mengi sana yanatumwa kutoka kwa anwani ya seva zako. Tafadhali jaribu tena baadaye.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Imeshindwa kufuta akaunti kwa sababu seva ya majaribio haipatikani. Tafadhali angalia tena baadaye.", + "Note to self" : "Jikumbushe", + "A place for your private notes, thoughts and ideas" : "Mahali pa maelezo yako ya kibinafsi, mawazo na mawazo", + "Transcript is AI generated and may contain mistakes" : "Nakala imetengenezwa na AI na inaweza kuwa na makosa", + "Summary is AI generated and may contain mistakes" : "Muhtasari umetolewa na AI na unaweza kuwa na makosa", + "Let's get started!" : "Hebu tuanze!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** ni jukwaa salama la mawasiliano linalojiendesha lenyewe linalounganishwa kwa urahisi na mfumo ikolojia wa Nextcloud.\n\n#### Sifa Muhimu za Nextcloud Talk:\n\n* Ongea na kutuma ujumbe katika mazungumzo ya kibinafsi na ya kikundi\n* Simu za sauti na video\n* Kushiriki faili na kuunganishwa na programu zingine za Nextcloud\n* Mipangilio ya mazungumzo inayoweza kubinafsishwa, udhibiti na udhibiti wa faragha\n* Wavuti, kompyuta ya mezani na rununu (iOS na Android)\n* Mawasiliano ya kibinafsi na salama\n\nPata maelezo zaidi katika [hati za mtumiaji](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Karibu kwenye Nextcloud Talk\n\nNextcloud Talk ni programu ya kibinafsi na yenye nguvu ya kutuma ujumbe inayounganishwa na Nextcloud. Piga gumzo katika mazungumzo ya faragha au ya kikundi, shirikiana kupitia simu za sauti na video, panga simu za wavuti na matukio, badilisha mazungumzo yako yakufae na mengine mengi.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Badilisha muundo wa maandishi ili kuunda ujumbe mzuri\n\nKatika Nextcloud Talk, unaweza kutumia sintaksia ya Markdown kuunda ujumbe wako. Kwa mfano, tumia umbizo la **bold** au *italiki*, au `angazia maandishi kama msimbo`. Unaweza kuunda majedwali na kuongeza vichwa kwenye maandishi yako.\n\nJe, unahitaji kurekebisha kosa la kuandika au kubadilisha umbizo? Hariri ujumbe wako kwa kubofya \"Hariri ujumbe\" kwenye menyu ya ujumbe.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Ongeza viambatisho na viungo\n\nAmbatisha faili kutoka kwa Nextcloud Hub yako kwa kutumia kitufe cha \"+\". Shiriki vipengee kutoka kwa Faili na programu mbalimbali za Nextcloud. Baadhi ya programu hata hutumia wijeti zinazoingiliana, kwa mfano, programu ya Maandishi.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Acha mazungumzo yatiririke: taja watumiaji, itikia ujumbe na zaidi\n\nUnaweza kutaja kila mtu kwenye mazungumzo kwa kutumia %s au kutaja washiriki mahususi kwa kuandika \"@\" na kuchagua majina yao kutoka kwenye orodha.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Unaweza kujibu ujumbe, kuzisambaza kwa gumzo na watu wengine, au kunakili maudhui ya ujumbe.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : " \n## ✨ Fanya zaidi ukitumia Smart Picker\n\nAndika kwa urahisi \"/\" au nenda kwenye menyu ya \"+\" ili kufungua Kiteua Mahiri ambapo unaweza kuambatisha maudhui mbalimbali kwenye ujumbe wako. Unaweza kusanidi Smart Picker ili uweze kuongeza vipengee kutoka kwa programu za Nextcloud, GIF, maeneo ya ramani, maudhui yanayotokana na AI na mengi zaidi.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Dhibiti mipangilio ya mazungumzo\n\nKatika menyu ya mazungumzo, unaweza kufikia mipangilio mbalimbali ili kudhibiti mazungumzo yako, kama vile:\n* Hariri maelezo ya mazungumzo\n* Dhibiti arifa\n* Tumia sheria nyingi za wastani\n* Sanidi ufikiaji na usalama\n* Wezesha roboti\n*na zaidi!", + "Andorra" : "Andorra", + "United Arab Emirates" : "United Arab Emirates", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua and Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Antarctica", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Austria", + "Australia" : "Australia", + "Aruba" : "Aruba", + "Åland Islands" : "Visiwa vya Aland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Ubeligiji", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Darussalam", + "Bolivia, Plurinational State of" : "Bolivia, Plurinational State of", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Cocos (Keeling) Islands", + "Congo, the Democratic Republic of the" : "Congo, the Democratic Republic of the", + "Central African Republic" : "Central African Republic", + "Congo" : "Congo", + "Switzerland" : "Uswiss", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "Visiwa vya Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "China", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Visiwa vya Krismas", + "Cyprus" : "Cyprus", + "Czechia" : "Czechia", + "Germany" : "Ujerumani", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Jamhuri ya Dominica", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Misri", + "Western Sahara" : "Sahara Magharibi", + "Eritrea" : "Eritrea", + "Spain" : "Hispania", + "Ethiopia" : "Ethiopia", + "Finland" : "Finland", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Islands (Malvinas)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "Visiwa vya Faroe", + "France" : "Ufaransa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "United Kingdom of Great Britain and Northern Ireland", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "French Guiana", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Equatorial Guinea", + "Greece" : "Ugiriki", + "South Georgia and the South Sandwich Islands" : "Georgia Kusini na Visiwa vya Sandwich kusini", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Visiwa vya Heard na McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Isle of Man", + "India" : "India", + "British Indian Ocean Territory" : "British Indian Ocean Territory", + "Iraq" : "Iraq", + "Iran, Islamic Republic of" : "Iran, Islamic Republic of", + "Iceland" : "Iceland", + "Italy" : "Italia", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Japan", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Cambodia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "Korea, Democratic People's Republic of", + "Korea, Republic of" : "Korea, Republic of", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Visiwa vya Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lao People's Democratic Republic", + "Lebanon" : "Lebanon", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Morocco", + "Monaco" : "Monaco", + "Moldova, Republic of" : "Moldova, Republic of", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (French part)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Visiwa vya Marshall", + "North Macedonia" : "North Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mongolia", + "Macao" : "Macao", + "Northern Mariana Islands" : "Visiwa vya Mariana kaskazini", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Kisiwa cha Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Uholanzi", + "Norway" : "Norway", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Poland", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine, State of", + "Portugal" : "Ureno", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Shirikisho la Urusi", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Saudi Arabia", + "Solomon Islands" : "Visiwa vya Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Sweden", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard and Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Sudan kusini", + "Sao Tome and Principe" : "Sao Tome and Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Dutch part)", + "Syrian Arab Republic" : "Syrian Arab Republic", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Visiwa vya Turks na Caicos", + "Chad" : "Chad", + "French Southern Territories" : "French Southern Territories", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Uturuki", + "Trinidad and Tobago" : "Trinidad and Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Province of China", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraine", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "United States Minor Outlying Islands", + "United States of America" : "United States of America", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "Saint Vincent and the Grenadines", + "Venezuela, Bolivarian Republic of" : "Venezuela, Bolivarian Republic of", + "Virgin Islands, British" : "Virgin Islands, British", + "Virgin Islands, U.S." : "Virgin Islands, U.S.", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis and Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Afrika ya kusini", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Ukungu wa mandharinyuma", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Haikuweza kuangalia usaidizi wa kupakia WASM. Tafadhali angalia mwenyewe ikiwa seva yako ya wavuti inatumikia faili za `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Seva yako ya wavuti haijasanidiwa ipasavyo ili kutoa faili za `.wasm`. Hili kawaida ni suala na usanidi wa Nginx. Kwa ukungu wa mandharinyuma inahitaji marekebisho ili pia kuwasilisha faili za `.wasm`. Linganisha usanidi wako wa Nginx na usanidi uliopendekezwa katika hati zetu.", + "Talk configuration values" : "Maadili ya usanidi wa Talk", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Kulazimisha muda wa simu kunatumika tu na mfumo wa cron. Tafadhali wezesha cron ya mfumo au uondoe usanidi wa `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Thamani ndogo za `max_call_duration` (zilizowekwa kwa sasa kuwa %d) hazitekelezeki kwa sababu ya vikwazo vya kiufundi. Kazi ya chinichini inatekelezwa tu kila dakika 5, kwa hivyo tumia kwa hatari yako mwenyewe.", + "Federation" : "Shirikisho", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Inapendekezwa sana kusanidi \"memcache.locking\" wakati Talk Federation imewashwa.", + "High-performance backend" : "Nyuma ya utendaji wa juu", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Hakuna mandharinyuma ya Utendaji wa Juu ambayo imesanidiwa - Kuendesha Nextcloud Talk bila utendakazi wa hali ya juu mizani tu kwa simu ndogo sana (usizidi washiriki 2-3). Tafadhali weka mipangilio ya nyuma ya Utendaji wa Juu ili kuhakikisha simu zilizo na washiriki wengi hufanya kazi bila matatizo.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Kuendesha hali ya \"conversation_cluster\" ya hali ya juu ya utendaji wa juu kumeacha kutumika na haitatumika tena katika toleo lijalo. Utendaji wa hali ya juu unaauni nguzo halisi siku hizi ambazo zinapaswa kutumika badala yake.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Kufafanua vipengele vingi vya nyuma vya utendaji wa juu kumeacha kutumika na hakutatumika tena katika toleo lijalo. Badala yake kizani cha kupakia kinapaswa kusanidiwa pamoja na seva zilizounganishwa za kuashiria na kusanidiwa katika mipangilio ya Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Ufunguo wa umma uliohifadhiwa wa algoriti iliyotumika %1$s hailingani na ufunguo wa faragha uliohifadhiwa. Endesha %2$s ili kurekebisha tatizo.", + "High-performance backend not configured correctly. Run %s for details." : "Utendaji wa hali ya juu haujasanidiwa ipasavyo. Endesha %s kwa maelezo.", + "High-performance backend not configured correctly" : "Utendaji wa hali ya juu haujasanidiwa ipasavyo", + "Error: Cannot connect to server" : "Hitilafu: Haiwezi kuunganisha kwenye seva", + "Error: Server did not respond with proper JSON" : "Hitilafu: Seva haikujibu kwa kutumia JSON sahihi", + "Error: Certificate expired" : "Hitilafu: Cheti kimekwisha muda wake", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hitilafu: Saa za mfumo za seva ya Nextcloud na seva ya nyuma ya utendakazi wa hali ya juu hazijasawazishwa. Tafadhali hakikisha kuwa seva zote mbili zimeunganishwa kwa seva ya saa au kusawazisha wakati wao wenyewe.", + "Could not get version" : "Haikuweza kupata toleo", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hitilafu: Toleo linaloendesha: {version}; Seva inahitaji kusasishwa ili iendane na toleo hili la Talk", + "Error: Server responded with: {error}" : "Hitilafu: Seva ilijibu kwa: {error}", + "Error: Unknown error occurred" : "Hitilafu: Hitilafu isiyojulikana imetokea", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Onyo: Toleo linaloendeshwa: {version}; Seva haiauni vipengele vyote vya toleo hili la Talk, vinakosa vipengele: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Inapendekezwa sana kusanidi akiba ya kumbukumbu wakati wa kuendesha Nextcloud Talk yenye utendakazi wa hali ya juu.", + "Client Push" : "Msukumo wa Mteja", + "Recording backend" : "Kurekodi nyuma", + "Using the recording backend requires a High-performance backend." : "Kutumia mazingira ya nyuma ya kurekodi kunahitaji utendakazi wa hali ya juu.", + "No recording backend configured" : "Hakuna mandharinyuma ya kurekodi iliyosanidiwa", + "SIP configuration" : "Usanidi wa SIP", + "Using the SIP functionality requires a High-performance backend." : "Kutumia utendakazi wa SIP kunahitaji utendakazi wa hali ya juu.", + "No SIP backend configured" : "Hakuna mazingira ya nyuma ya SIP yaliyosanidiwa", + "Invalid date, date format must be YYYY-MM-DD" : "Tarehe batili, umbizo la tarehe lazima liwe YYYY-MM-DD", + "Conversation not found" : "Mazungumzo hayapo", + "Path is already shared with this conversation" : "Njia tayari imeshirikiwa na mazungumzo haya", + "Chat, video & audio-conferencing using WebRTC" : "Piga gumzo, video na mikutano ya sauti kwa kutumia WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Piga gumzo, video na mikutano ya sauti kwa kutumia WebRTC\n\n* 💬 **Chat** Nextcloud Talk inakuja na soga rahisi ya maandishi, inayokuruhusu kushiriki au kupakia faili kutoka kwenye programu yako ya Nextcloud Files au kifaa cha karibu nawe na kutaja washiriki wengine.\n* 👥 **Simu za faragha, za kikundi, za umma na zilizolindwa na nenosiri!** Alika mtu, kikundi kizima au tuma kiungo cha umma ili kualika kwenye simu.\n* 🌐 **Mazungumzo ya Shirikisho** Piga gumzo na watumiaji wengine wa Nextcloud kwenye seva zao\n* 💻 **Kushiriki skrini!** Shiriki skrini yako na washiriki wa simu yako.\n* 🚀 **Muunganisho na programu zingine za Nextcloud** kama vile Faili, Kalenda, Hali ya Mtumiaji, Dashibodi, Mtiririko, Ramani, Kiteua Mahiri, Anwani, Staha na mengine mengi.\n* 🌉 **Sawazisha na masuluhisho mengine ya gumzo** Huku [Matterbridge](https://github.com/42wim/matterbridge/) ikiunganishwa katika Talk, unaweza kusawazisha kwa urahisi masuluhisho mengine mengi ya gumzo kwenye Nextcloud Talk na kinyume chake.", + "Leave call" : "Acha simu", + "Navigating away from the page will leave the call in {conversation}" : "Kusogeza mbali na ukurasa kutaacha simu ndani {conversation}", + "Stay in call" : "Kaa kwenye simu", + "Error occurred when getting the conversation information" : "Hitilafu ilitokea wakati wa kupata maelezo ya mazungumzo", + "Discuss this file" : "Jadili faili hii", + "Share this file with others to discuss it" : "Shiriki faili hii na wengine ili kuijadili", + "Share this file" : "Shiriki faili hii", + "Join conversation" : "Jiunge na mazungumzo", + "This conversation is password-protected." : "Mazungumzo haya yanalindwa kwa nenosiri.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Tumegundua majaribio mengi ya nenosiri batili kutoka kwa IP yako. Kwa hivyo jaribio lako linalofuata hupunguzwa hadi sekunde 30.", + "The password is wrong. Try again." : "Nenosiri si sahihi. Jaribu tena.", + "Password" : "Nenosiri", + "Submit" : "Wasilisha", + "Error requesting the password." : "Hitilafu katika kuomba nenosiri.", + "Request password" : "Omba nenosiri", + "This conversation has ended" : "Mazungumzo haya yameisha", + "Error occurred when joining the conversation" : "Hitilafu ilitokea wakati wa kujiunga na mazungumzo", + "Close Talk sidebar" : "Funga utepe wa Talk", + "Open Talk sidebar" : "Fungua utepe wa Talk", + "Everyone" : "Kila mmoja", + "Users and moderators" : "Watumiaji na wasimamizi", + "Moderators only" : "Wasimamizi pekee", + "Disable calls" : "Zima simu", + "Save changes" : "Hifadhi mabadiliko", + "Saving …" : "Inahifadhi...", + "Saved!" : "Imehifadhiwa", + "Limit to groups" : "Kikomo kwa vikundi", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Wakati angalau kikundi kimoja kimechaguliwa, ni watu wa vikundi vilivyoorodheshwa pekee wanaoweza kuwa sehemu ya mazungumzo.", + "Guests can still join public conversations." : "Wageni bado wanaweza kujiunga na mazungumzo ya umma.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Watumiaji ambao hawawezi kutumia Talk tena bado wataorodheshwa kama washiriki katika mazungumzo yao ya awali na pia ujumbe wao wa gumzo utahifadhiwa.", + "Limit using Talk" : "Punguza kutumia Talk", + "Limit creating a public and group conversation" : "Punguza kuunda mazungumzo ya umma na ya kikundi", + "Limit creating conversations" : "Punguza kuunda mazungumzo", + "Limit starting a call" : "Punguza kuanzisha simu", + "Limit starting calls" : "Punguza simu za kuanza", + "When a call has started, everyone with access to the conversation can join the call." : "Simu inapoanza, kila mtu aliye na idhini ya kufikia mazungumzo anaweza kujiunga kwenye simu.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Vijibu vifuatavyo vimesakinishwa kwenye seva hii. Katika hati unaweza kupata maelezo jinsi ya {linkstart1}kuunda bot yako{linkend} au {linkstart2}orodha ya vijibu{linkend} ili kuwasha kwenye seva yako.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Hakuna vijibu vilivyosakinishwa kwenye seva hii. Katika hati unaweza kupata maelezo jinsi ya {linkstart1}kuunda bot yako{linkend} au {linkstart2}orodha ya vijibu{linkend} ili kuwasha kwenye seva yako.", + "Description is not provided" : "Maelezo hayajatolewa", + "Locked for moderators" : "Imefungwa kwa wasimamizi", + "Enabled" : "Washwa", + "Disabled" : "Zima", + "Bots settings" : "Mipangilio ya bots", + "State" : "State", + "Name" : "Jina", + "Last error" : "Hitilafu ya mwisho", + "Total errors count" : "Jumla ya makosa", + "Find more bots" : "Tafuta bots zaidi", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Seva zinazoaminika zinaweza kusanidiwa katika {linkstart}Ukurasa wa mipangilio ya kushiriki{linkend}.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Soga na simu zilizoshirikishwa tayari zinafanya kazi. Ushughulikiaji wa kiambatisho unakuja katika toleo la baadaye.", + "Enable Federation in Talk app" : "Washa Shirikisho katika programu ya Talk", + "Permissions" : "Ruhusa", + "Allow users to be invited to federated conversations" : "Ruhusu watumiaji kualikwa kwenye mazungumzo ya shirikisho", + "Allow users to invite federated users into conversation" : "Ruhusu watumiaji kuwaalika watumiaji wa shirikisho katika mazungumzo", + "Only allow to federate with trusted servers" : "Ruhusu tu kushirikiana na seva zinazoaminika", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Wakati angalau kundi moja limechaguliwa, ni watu wa makundi yaliyoorodheshwa pekee wanaoweza kualika watumiaji wa shirikisho kwenye mazungumzo.", + "Groups allowed to invite federated users" : "Vikundi vinavyoruhusiwa kualika watumiaji wa shirikisho", + "Select groups …" : "Chagua vikundi …", + "All messages" : "Jumbe zote", + "@-mentions only" : "@-mitajo pekee", + "Off" : "Imezimwa", + "General settings" : "Mipangilio ya jumla", + "Default notification settings" : "Mipangilio ya arifa chaguomsingi", + "Default group notification" : "Arifa ya kikundi chaguomsingi", + "Default group notification for new groups" : "Arifa chaguomsingi ya kikundi kwa vikundi vipya", + "Integration into other apps" : "Ujumuishaji katika programu zingine", + "Allow conversations on files" : "Ruhusu mazungumzo kwenye faili", + "Allow conversations on public shares for files" : "Ruhusu mazungumzo kwenye faili zilizoshirikiwa na umma", + "End-to-end encrypted calls" : "Simu zilizosimbwa kutoka mwisho hadi mwisho", + "Enable encryption" : "Wezesha usimbaji", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Simu zilizosimbwa kuanzia mwisho hadi mwisho zenye daraja la SIP lililosanidiwa zinahitaji toleo jipya zaidi la utendakazi wa hali ya juu na daraja la SIP.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Wateja wa simu hawatumii simu zilizosimbwa kutoka mwisho hadi mwisho kwa sasa.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Kwa kubofya kitufe kilicho hapo juu, habari iliyo kwenye fomu inatumwa kwa seva za Struktur AG. Unaweza kupata maelezo zaidi kwenye {linkstart}spreed.eu{linkend}.", + "Pending" : "Inasubiri", + "Error" : "Hitilafu", + "Blocked" : "Imezuiliwa", + "Active" : "Inayotumika", + "Expired" : "Imeisha muda", + "Never" : "Kamwe", + "The trial could not be requested. Please try again later." : "Jaribio halikuweza kuombwa. Tafadhali jaribu tena baadaye.", + "The account could not be deleted. Please try again later." : "Akaunti haikuweza kufutwa. Tafadhali jaribu tena baadaye.", + "Hosted High-performance backend" : "Seva ya nyuma yenye utendaji wa juu iliyohifadhiwa", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Mshirika wetu Struktur AG hutoa huduma ambapo seva mwenyeji inaweza kuombwa. Kwa hili unahitaji tu kujaza fomu iliyo hapa chini na Nextcloud yako itaomba. Mara baada ya seva kusanidiwa kwa ajili yako vitambulisho vitajazwa kiotomatiki. Hii itafuta mipangilio iliyopo ya seva ya kuashiria.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Ikiwa akaunti yako ya nyuma yenye utendaji wa juu inajumuisha utendaji wa STUN na/au TURN, mipangilio itasasishwa ipasavyo.", + "URL of this Nextcloud instance" : "URL ya mfano huu wa Nextcloud", + "Full name of the user requesting the trial" : "Jina kamili la mtumiaji anayeomba jaribio", + "Email of the user" : "Barua pepe ya mtumiaji", + "Language" : "Lugha", + "Country" : "Nchi", + "Request signaling server trial" : "Omba majaribio ya seva ya kuashiria", + "You can see the current status of your hosted signaling server in the following table." : "Unaweza kuona hali ya sasa ya seva yako iliyopangishwa ya kuashiria katika jedwali lifuatalo.", + "Status" : "Wadhifa", + "Created at" : "Imetengenezwa katika", + "Expires at" : "Inaisha saa", + "Limits" : "Mipaka", + "STUN included" : "STUN imejumuishwa", + "Yes" : "Ndiyo", + "No" : "Hapana", + "TURN included" : "TURN imejumuishwa", + "Delete the signaling server account" : "Futa akaunti ya seva ya kuashiria", + "_%n user_::_%n users_" : ["%n user","%n watumiaji"], + "Installed version: {version}" : "Toleo lililosakinishwa: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Unaweza kusakinisha Matterbridge ili kuunganisha Nextcloud Talk kwa huduma zingine, tembelea {linkstart1}ukurasa wao wa GitHub{linkend} kwa maelezo zaidi. Kupakua na kusakinisha programu kunaweza kuchukua muda. Ikiisha, tafadhali isakinishe wewe mwenyewe kutoka kwa {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary ina ruhusa zisizo sahihi. Tafadhali hakikisha kuwa faili ya jozi ya Matterbridge inamilikiwa na mtumiaji sahihi na inaweza kutekelezwa. Inaweza kupatikana katika \"/…/nextcloud/apps/talk_matterbridge/bin/\".", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge binary haikupatikana au haikuweza kutekelezwa.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Unaweza pia kuweka njia ya Matterbridge binary kwa mikono kupitia usanidi. Angalia {linkstart}hati za muunganisho wa Matterbridge{linkend} kwa maelezo zaidi.", + "Downloading …" : "Inapakua...", + "Install Talk Matterbridge" : "Sakinisha Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Hitilafu ilitokea wakati wa kusakinisha programu ya Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Hitilafu ilitokea wakati wa kusakinisha Talk Matterbridge. Tafadhali isakinishe wewe mwenyewe", + "Failed to execute Matterbridge binary." : "Imeshindwa kutekeleza Matterbridge binary.", + "Matterbridge integration" : "Ujumuishaji wa Matterbridge", + "Enable Matterbridge integration" : "Washa muunganisho wa Matterbridge", + "Status: Checking connection" : "Hali: Inaangalia muunganisho", + "OK: Running version: {version}" : "Sawa: Toleo linaloendesha: {version}", + "Error: Server seems to be a Signaling server" : "Hitilafu: Seva inaonekana kama seva ya Kuashiria", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hitilafu: Saa za mfumo za seva ya Nextcloud na seva ya nyuma ya Kurekodi hazijasawazishwa. Tafadhali hakikisha kuwa seva zote mbili zimeunganishwa kwa seva ya saa au kusawazisha wakati wao wenyewe.", + "Recording backend URL" : "Inarekodi URL ya nyuma", + "Validate SSL certificate" : "Thibitisha cheti cha SSL", + "Delete this server" : "Futa seva hii", + "Test this server" : "Jaribu seva hii", + "Disabled for all calls" : "Imezimwa kwa simu zote", + "Enabled for all calls" : "Imewashwa kwa simu zote", + "Configurable on conversation level by moderators" : "Inaweza kusanidiwa kwa kiwango cha mazungumzo na wasimamizi", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Mipangilio ya PHP \"upload_max_filesize\" au \"post_max_size\" pekee itaruhusu kupakia faili hadi {maxUpload}.", + "Recording backend settings saved" : "Mipangilio ya mandharinyuma ya kurekodi imehifadhiwa", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Wasimamizi wataruhusiwa kuwezesha idhini kwenye kiwango cha mazungumzo. Idhini ya kurekodiwa itahitajika kwa kila mshiriki kabla ya kujiunga na kila simu kwenye mazungumzo haya.", + "The consent to be recorded will be required for each participant before joining every call." : "Idhini ya kurekodi itahitajika kwa kila mshiriki kabla ya kujiunga na kila simu.", + "The consent to be recorded is not required." : "Idhini ya kurekodi haihitajiki.", + "Recording backend configuration is only possible with a High-performance backend." : "Kurekodi usanidi wa mandharinyuma kunawezekana tu kwa utendakazi wa hali ya juu.", + "Add a new recording backend server" : "Ongeza seva mpya ya nyuma ya kurekodi", + "Shared secret" : "Siri iliyoshirikiwa", + "Recording consent" : "Idhini ya kurekodi", + "Recording transcription" : "Inarekodi unukuzi", + "Automatically transcribe call recordings with a transcription provider" : "Nakili rekodi za simu kiotomatiki na mtoaji huduma ya manukuu", + "Automatically summarize call recordings with transcription and summary providers" : "Fanya muhtasari wa rekodi za simu kiotomatiki na watoa huduma wa manukuu na muhtasari", + "SIP configuration saved!" : "Usanidi wa SIP umehifadhiwa!", + "SIP configuration is only possible with a High-performance backend." : "Usanidi wa SIP unawezekana tu kwa hali ya nyuma ya utendaji wa Juu.", + "Enable SIP Dial-out option" : "Wezesha chaguo la SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Seva ya kuashiria inahitaji kusasishwa ili kutumia kipengele cha SIP Dial-out kinachotumika.", + "Do not show SIP Dial-out caller number" : "Usionyeshe nambari ya mpigaji simu ya SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Nambari isiyojulikana inapaswa kuonekana kama \"isiyojulikana\" au \"nambari iliyozuiwa\" ili kumpigia simu mpokeaji", + "Dial-out number" : "Nambari ya kupiga", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Nambari iliyoumbizwa ya E164 inayotumika kama nambari ya mpigaji simu mbadala kwa simu zinazotoka", + "Dial-out prefix" : "Kiambishi awali cha kupiga", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Kiambishi awali kwa nambari ya mtumiaji iliyosanidiwa kwa simu zinazotoka (chaguo-msingi ni `+`)", + "Restrict SIP configuration" : "Zuia usanidi wa SIP", + "Enable SIP configuration" : "Wezesha usanidi wa SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Watumiaji wa vikundi vifuatavyo pekee ndio wanaoweza kuwezesha SIP katika mazungumzo wanayosimamia", + "Phone number (Country)" : "Nambari ya simu (Country)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Taarifa hii hutumwa kwa barua pepe za mwaliko na pia kuonyeshwa kwenye utepe kwa washiriki wote.", + "Nextcloud base URL" : " URL ya Nextcloud base", + "Talk Backend URL" : "URL ya Talk Backend ", + "WebSocket URL" : "URL ya WebSocket", + "Available features" : "Vipengele vinavyopatikana", + "Error: Websocket connection failed" : "Hitilafu: Muunganisho wa Websocket haukufaulu", + "Error code" : "Msimbo wa hitilafu", + "Error message" : "Ujumbe wa hitilafu", + "Error: Websocket connection failed. Check browser console" : "Hitilafu: Muunganisho wa Websocket haukufaulu. Angalia koni ya kivinjari", + "High-performance backend URL" : "URL ya nyuma ya utendaji wa juu", + "Missing High-performance backend warning hidden" : "Onyo la utendakazi wa hali ya juu halipo limefichwa", + "High-performance backend settings saved" : "Mipangilio ya utendakazi wa hali ya juu imehifadhiwa", + "Nextcloud Talk setup not complete" : "Usanidi wa Nextcloud Talk haujakamilika", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Tafadhali kumbuka kuwa katika simu zilizo na zaidi ya washiriki 2 bila utendakazi wa hali ya juu, kuna uwezekano mkubwa wa washiriki kukumbana na matatizo ya muunganisho na kusababisha mzigo mkubwa kwenye vifaa vinavyoshiriki.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Sakinisha mandhari ya nyuma ya Utendaji wa Juu ili kuhakikisha simu zilizo na washiriki wengi hufanya kazi kwa urahisi.", + "Nextcloud portal" : "Lango la Nextcloud", + "Quick installation guide" : "Mwongozo wa usakinishaji wa haraka", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Utendaji wa hali ya juu unahitajika kwa simu na mazungumzo na washiriki wengi. Bila ya nyuma, washiriki wote wanapaswa kupakia video zao kibinafsi kwa kila mshiriki, ambayo itawezekana kusababisha matatizo ya muunganisho na mzigo mkubwa kwenye vifaa vinavyoshiriki.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Inapendekezwa sana kusanidi akiba iliyosambazwa unapotumia Nextcloud Talk yenye utendakazi wa hali ya juu.", + "Add High-performance backend server" : "Ongeza seva ya nyuma ya utendaji wa juu", + "Warn about connectivity issues in calls with more than 2 participants" : "Onya kuhusu matatizo ya muunganisho katika simu zilizo na zaidi ya washiriki 2", + "STUN server URL" : "URL ya seva ya STUN", + "The server address is invalid" : "Anwani ya seva si sahihi", + "STUN settings saved" : "Mipangilio ya STUN imehifadhiwa", + "STUN servers" : "Seva za STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Seva ya STUN hutumiwa kubainisha anwani ya IP ya umma ya washiriki nyuma ya kipanga njia.", + "Add a new STUN server" : "Ongeza seva mpya ya STUN", + "{schema} scheme must be used with a domain" : "{schema} mpango lazima utumike na kikoa", + "{option1} and {option2}" : "{option1} na {option2}", + "{option} only" : "{option}tu ", + "OK: Successful ICE candidates returned by the TURN server" : "SAWA: Wagombeaji wa ICE waliofaulu walirudishwa na seva ya TURN", + "Error: No working ICE candidates returned by the TURN server" : "Hitilafu: Hakuna wagombeaji wa ICE wanaofanya kazi waliorejeshwa na seva ya TURN", + "Testing whether the TURN server returns ICE candidates" : "Inajaribu kama seva ya TURN inarejesha watahiniwa wa ICE", + "TURN server schemes" : "Mifumo ya seva ya TURN", + "TURN server URL" : "URL ya seva ya TURN", + "TURN server secret" : "Siri ya seva ya TURN", + "TURN server protocols" : "Itifaki za seva ya TURN ", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Seva ya TURN inatumika kuwakilisha trafiki kutoka kwa washiriki nyuma ya ngome. Iwapo washiriki binafsi hawawezi kuunganisha kwa wengine, kuna uwezekano mkubwa wa kuhitajika seva ya TURN. Angalia {linkstart}hati hizi{linkend} kwa maagizo ya usanidi.", + "TURN settings saved" : "Mipangilio ya TURN imehifadhiwa", + "TURN servers" : "Seva za TURN ", + "Add a new TURN server" : "Ongeza seva mpya ya TURN", + "Failed" : "Imeshindwa", + "OK" : "SAWA", + "Checking …" : "Inakagua...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Imeshindwa: WebAssembly imezimwa au haitumiki katika kivinjari hiki. Tafadhali washa WebAssembly au tumia kivinjari chenye usaidizi ili kufanya ukaguzi.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Imeshindwa: faili za \".wasm\" na \".tflite\" hazikurejeshwa ipasavyo na seva ya wavuti. Tafadhali angalia sehemu ya \"Mahitaji ya Mfumo\" katika hati za Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "SAWA: faili za \".wasm\" na \".tflite\" zilirejeshwa ipasavyo na seva ya wavuti.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Inaonekana kwamba usanidi wa PHP na Apache hauendani. Tafadhali kumbuka kuwa PHP inaweza kutumika tu na moduli ya MPM_PREFORK na PHP-FPM inaweza kutumika tu na sehemu ya MPM_EVENT.", + "Web server setup checks" : "Ukaguzi wa usanidi wa seva ya wavuti", + "Files required for virtual background can be loaded" : "Faili zinazohitajika kwa mandharinyuma pepe zinaweza kupakiwa", + "Federated user" : "Mtumiaji aliyeshirikishwa", + "Assign participants to rooms" : "Wape washiriki vyumba", + "Configure breakout rooms" : "Sanidi vyumba vya vipindi vifupi", + "Number of breakout rooms" : "Idadi ya vyumba vifupi", + "You can create from 1 to 20 breakout rooms." : "Unaweza kuunda kutoka kwa vyumba 1 hadi 20 vya vipindi vifupi.", + "Assignment method" : "Mbinu ya kukabidhi", + "Automatically assign participants" : "Wape washiriki kiotomatiki", + "Manually assign participants" : "Wagawie washiriki wewe mwenyewe", + "Allow participants to choose" : "Ruhusu washiriki kuchagua", + "Create rooms" : "Unda vyumba", + "Confirm" : "Thibitisha", + "Create breakout rooms" : "Unda vyumba vya vikundi vidogo", + "Reset" : "Pangilia upya", + "Delete breakout rooms" : "Futa vyumba vya vikundi", + "Room {roomNumber}" : "Chumba {roomNumber}", + "Current breakout rooms and settings will be lost" : "Vyumba na mipangilio ya sasa ya vipindi vifupi itapotea", + "Cancel" : "Ghairi", + "Unassigned participants" : "Washiriki ambao hawajakabidhiwa", + "Back" : "Rudi", + "Assign" : "Kabidhi", + "Add participant \"{user}\"" : "Ongeza mshiriki \"{user}\"", + "Now" : "Sasa", + "Invalid calendar selected" : "Kalenda batili imechaguliwa", + "Invalid start time selected" : "Muda batili wa kuanza umechaguliwa", + "Invalid end time selected" : "Umechagua muda wa mwisho usio sahihi", + "Unknown error occurred" : "Hitilafu isiyojulikana imetokea", + "Sending no invitations" : "Hakuna mwaliko unaotumwa", + "{participant0} will receive an invitation" : "{participant0} atapokea mwaliko", + "{participant0} and {participant1} will receive invitations" : "{participant0} na {participant1} watapokea mialiko", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} and %n other will receive invitations","{participant0}, {participant1} na %n wengine watapokea mialiko"], + "Invite {user}" : "Alika {user}", + "Invite all users and emails in this conversation" : "Alika watumiaji na barua pepe zote katika mazungumzo haya", + "Meeting created" : "Mkutano umeundwa", + "Upcoming meetings" : "Mikutano ijayo", + "Loading …" : "Inapakia", + "No upcoming meetings" : "Hakuna mikutano ijayo", + "Schedule a meeting" : "Panga mkutano", + "Meeting title" : "Kichwa cha mkutano", + "From" : "Tangu/ kutoka", + "To" : "Mpaka/ hadi", + "Calendar" : "Kalenda", + "Attendees" : "Wahudhuriaji", + "No other participants to send invitations to." : "Hakuna washiriki wengine wa kutuma mialiko kwao.", + "Add attendees" : "Ongeza wahudhuriaji", + "Save" : "Hifadhi", + "Search participants" : "Tafuta washiriki", + "No results" : "Hakuna matokeo", + "Done" : "Imefanyika", + "Disable live transcription" : "Zima unukuzi wa moja kwa moja", + "Raise hand" : "Inua mkono", + "Raise hand (R)" : "Inua mkono (R)", + "Lower hand" : "Shusha mkono", + "Lower hand (R)" : "Shusha mkono (R)", + "Exit full screen (F)" : "Ondoka kwenye skrini nzima (F)", + "Full screen (F)" : "Skrini nzima (F)", + "Speaker view" : "Mtazamo wa mzungumzaji", + "Grid view" : "Mwonekano wa gridi", + "Error when trying to load the available live transcription languages" : "Hitilafu wakati wa kujaribu kupakia lugha zinazopatikana za manukuu ya moja kwa moja", + "Failed to enable live transcription" : "Imeshindwa kuwasha unukuzi wa moja kwa moja", + "Recording consent is required" : "Idhini ya kurekodi inahitajika", + "This conversation is read-only" : "Mazungumzo haya ni ya kusoma tu", + "Conversation not found or not joined" : "Mazungumzo hayajapatikana au hayajaunganishwa", + "Lobby is still active and you're not a moderator" : "Lobby bado inatumika na wewe si msimamizi", + "Connection failed" : "Muunganisho haukufaulu", + "Reload" : "Pakia upya", + "{nickName} raised their hand." : "{nickName} waliinua mikono yao.", + "A participant raised their hand." : "Mshiriki aliinua mkono wao.", + "Collapse stripe" : "Kunja mstari", + "Expand stripe" : "Panua mstari", + "Previous page of videos" : "Ukurasa uliotangulia wa video", + "Next page of videos" : "Ukurasa unaofuata wa video", + "Connecting …" : "Inaunganisha...", + "Calling …" : "Inaghairi...", + "Waiting for {user} to join the call" : "Inasubiri {user} ajiunge na simu", + "Waiting for others to join the call …" : "Inasubiri wengine wajiunge na simu…", + "You can invite others in the participant tab of the sidebar" : "Unaweza kuwaalika wengine katika kichupo cha mshiriki cha utepe", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Unaweza kuwaalika wengine katika kichupo cha mshiriki cha utepe au kushiriki kiungo hiki ili kuwaalika wengine!", + "Share this link to invite others!" : "Shiriki kiungo hiki ili kuwaalika wengine!", + "Copy link" : "Nakili kiungio", + "You are not allowed to enable audio" : "Huruhusiwi kuwasha sauti", + "No audio. Click to select device" : "Hakuna sauti. Bofya ili kuchagua kifaa", + "Mute audio" : "Zima sauti", + "Mute audio (M)" : "Zima sauti (M)", + "Unmute audio" : "Rejesha sauti", + "Unmute audio (M)" : "Rejesha sauti (M)", + "None" : "Hakuna", + "Select a microphone" : "Chagua maikrofoni", + "Select a speaker" : "Chagua mzungumzaji", + "Check devices" : "Angalia vifaa", + "Access to camera was denied" : "Ufikiaji wa kamera ulikataliwa", + "Error while accessing camera: It is likely in use by another program" : "Hitilafu wakati wa kufikia kamera: Inawezekana inatumiwa na programu nyingine", + "Error while accessing camera" : "Hitilafu wakati wa kufikia kamera", + "You have been muted by a moderator" : "Umenyamazishwa na msimamizi", + "Hide presenter video" : "Ficha video ya mtangazaji", + "You are not allowed to enable video" : "Huruhusiwi kuwezesha video", + "No video. Click to select device" : "Hakuna video. Bofya ili kuchagua kifaa", + "Disable video" : "Zima video", + "Disable video (V)" : "Zima video (V)", + "Enable video" : "Washa video", + "Enable video (V)" : " Washa video (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video - Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video (V) - Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Washa video. Muunganisho wako utakatizwa kwa muda mfupi unapowasha video kwa mara ya kwanza", + "Select a video device" : "Chagua kifaa cha video", + "Show presenter" : "Onyesha mtangazaji", + "You" : "Wewe", + "Mute" : "Zima", + "Muted" : "Washa", + "Show screen" : "Onyesha skrini", + "Stop following" : "Acha kufuata", + "Connection could not be established …" : "Muunganisho haukuweza kuanzishwa...", + "Connection was lost and could not be re-established …" : "Muunganisho ulipotea na haukuweza kuanzishwa tena ...", + "Connection could not be established. Trying again …" : "Muunganisho haukuweza kuanzishwa. Inajaribu tena...", + "Connection lost. Trying to reconnect …" : "Muunganisho umepotea. Inajaribu kuunganisha tena...", + "Connection problems …" : "Matatizo ya muunganisho…", + "Collapse" : "Vunja", + "Expand" : "Panua", + "You need to be logged in to upload files" : "Unahitaji kuingia ili kupakia faili", + "Drop your files to upload" : "Dondosha mafaili yako kupakia", + "Conversation messages" : "Jumbe za mazungumzo", + "Scroll to bottom" : "Tembeza hadi chini", + "Post message" : "Chapisha ujumbe", + "Federated conversation" : "Mazungumzo ya shirikisho", + "Public conversation" : "Mazungumzo ya umma", + "Favorite" : "Kipendwa", + "Banned users" : "Watumiaji waliopigwa marufuku", + "Manage the list of banned users in this conversation." : "Dhibiti orodha ya watumiaji waliopigwa marufuku katika mazungumzo haya.", + "Manage bans" : "Dhibiti marufuku", + "No banned users" : "Hakuna watumiaji waliopigwa marufuku", + "Banned by:" : "Imepigwa marufuku na:", + "Date:" : "Tarehe:", + "Note:" : "Kumbuka:", + "Hide details" : "Ficha maelezo", + "Show details" : "Onesha maelezo", + "Unban" : "Batilisha marufuku", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Unaweza kubadilisha kichwa na maelezo katika {linkstart}Kalenda ↗{linkend}.", + "Error while updating conversation name" : "Hitilafu imetokea wakati wa kusasisha jina la mazungumzo", + "Error while updating conversation description" : "Hitilafu imetokea wakati wa kusasisha maelezo ya mazungumzo", + "Enter a name for this conversation" : "Weka jina la mazungumzo haya", + "Edit conversation name" : "Hariri jina la mazungumzo", + "Edit conversation description" : "Hariri maelezo ya mazungumzo", + "Enter a description for this conversation" : "Weka maelezo ya mazungumzo haya", + "Picture" : "Picha", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Vijibu vifuatavyo vinaweza kuwashwa kwenye mazungumzo haya. Wasiliana na utawala wako ili usakinishe roboti nyingi zaidi kwenye seva hii.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Hakuna vijibu vilivyosakinishwa kwenye seva hii. Wasiliana na utawala wako ili usakinishe roboti kwenye seva hii.", + "Disable" : "Zima", + "Enable" : "Wezesha", + "Breakout rooms" : "Vyumba vya vikundi", + "Manage breakout rooms" : "Dhibiti vyumba vifupi", + "Set up breakout rooms for this conversation" : "Sanidi vyumba vya vikundi kwa mazungumzo haya", + "Please select a valid PNG or JPG file" : "Tafadhali chagua faili sahihi ya PNG au JPG", + "Choose your conversation picture" : "Chagua picha yako ya mazungumzo", + "Choose" : "Chagua", + "Error setting conversation picture" : "Hitilafu katika kuweka picha ya mazungumzo", + "Could not set the conversation picture: {error}" : "Haikuweza kuweka picha ya mazungumzo: {error}", + "Error cropping conversation picture" : "Hitilafu katika kupunguza picha ya mazungumzo", + "Error removing conversation picture" : "Hitilafu katika kuondoa picha ya mazungumzo", + "Set emoji as conversation picture" : "Weka emoji kama picha ya mazungumzo", + "Set background color for conversation picture" : "Weka rangi ya usuli kwa picha ya mazungumzo", + "Upload conversation picture" : "Pakia picha ya mazungumzo", + "Choose conversation picture from files" : "Chagua picha ya mazungumzo kutoka kwa faili", + "Remove conversation picture" : "Ondoa picha ya mazungumzo", + "The file must be a PNG or JPG" : "Faili lazima iwe PNG au JPG", + "Set picture" : "Weka picha", + "Default permissions modified for {conversationName}" : "Ruhusa chaguomsingi zimerekebishwa kwa {conversationName}", + "Could not modify default permissions for {conversationName}" : "Haikuweza kurekebisha ruhusa chaguomsingi za {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Hariri ruhusa za msingi kwa washiriki katika mazungumzo haya. Mipangilio hii haiathiri wasimamizi.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Kila mara ruhusa zinaporekebishwa katika sehemu hii, ruhusa maalum zilizotolewa hapo awali kwa washiriki binafsi zitapotea.", + "All permissions" : "Ruhusa zote", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Washiriki wana ruhusa ya kuanzisha simu, kujiunga na simu, kuwasha sauti na video na kushiriki skrini.", + "Restricted" : "Imezuiliwa", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Washiriki wanaweza kujiunga na simu, lakini hawawezi kuwasha sauti wala video wala kushiriki skrini hadi msimamizi awape ruhusa mwenyewe.", + "Advanced permissions" : "Ruhusa za hali ya juu", + "Edit permissions" : "Hariri ruhusa", + "Conversation settings" : "Mipangilio ya mazungumzo", + "Basic Info" : "Maelezo ya Msingi", + "Personal" : "Binafsi", + "Moderation" : "Usimamizi", + "Setup overview" : "Weka muhtasari", + "Live transcription" : "Unukuzi wa moja kwa moja", + "Enable live transcription" : "Washa unukuzi wa moja kwa moja", + "Breakout Rooms" : "Vyumba vya Kuzuka", + "Matterbridge" : "Matterbridge", + "Bots" : "Bots", + "Danger zone" : "Eneo la hatari", + "Archive conversation" : "Hifadhi mazungumzo", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Mazungumzo yaliyohifadhiwa kwenye kumbukumbu hufichwa kutoka kwa orodha ya mazungumzo kwa chaguo-msingi. Hata hivyo, bado yataonekana unapotafuta jina la mazungumzo au kufikia orodha ya mazungumzo yaliyohifadhiwa kwenye kumbukumbu.", + "Do you really want to leave \"{displayName}\"?" : "Je, kweli unataka kuondoka \"{displayName}\"?", + "You can archive this conversation instead." : "Unaweza kuweka mazungumzo haya kwenye kumbukumbu badala yake.", + "Leave conversation" : "Acha mazungumzo", + "You need to promote a new moderator before you can leave the conversation" : "Unahitaji kutangaza msimamizi mpya kabla ya kuondoka kwenye mazungumzo", + "Delete conversation" : "Futa mazungumzo", + "Do you really want to delete \"{displayName}\"?" : "Je, kweli unataka kufuta \"{displayName}\"?", + "Error while deleting conversation" : "Hitilafu wakati wa kufuta mazungumzo", + "Delete all chat messages" : "Futa ujumbe wote wa gumzo", + "Do you really want to delete all messages in \"{displayName}\"?" : "Je, kweli unataka kufuta barua pepe zote katika \"{displayName}\"?", + "Error while clearing chat history" : "Hitilafu wakati wa kufuta historia ya gumzo", + "Be careful, these actions cannot be undone." : "Kuwa mwangalifu, vitendo hivi haviwezi kutenduliwa.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Mara tu mazungumzo yamesalia, ili kujiunga tena na mazungumzo yaliyofungwa, mwaliko unahitajika. Mazungumzo ya wazi yanaweza kuunganishwa tena wakati wowote.", + "Permanently delete this conversation." : "Futa mazungumzo haya kabisa.", + "Delete chat messages" : "Futa ujumbe wa gumzo", + "Permanently delete all the messages in this conversation." : "Futa kabisa ujumbe wote katika mazungumzo haya.", + "_%n hour_::_%n hours_" : ["%n hour","%nmasaa "], + "_%n day_::_%n days_" : ["%n day","%n siku "], + "_%n week_::_%n weeks_" : ["%n week","%n wiki "], + "Custom expiration time" : "Muda maalum wa kuisha", + "Message expiration disabled" : "Muda wa kuisha kwa ujumbe umezimwa", + "Message expiration set: {duration}" : "Muda wa kuisha kwa ujumbe umewekwa: {duration}", + "Error when trying to set message expiration" : "Hitilafu wakati wa kujaribu kuweka muda wa mwisho wa ujumbe", + "Message expiration" : "Muda wa ujumbe kuisha", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Muda wa ujumbe wa gumzo unaweza kuisha baada ya muda fulani. Kumbuka: Faili zinazoshirikiwa kwenye gumzo hazitafutwa kwa mmiliki, lakini hazitashirikiwa tena kwenye mazungumzo.", + "Set message expiration" : "Weka muda wa kuisha kwa ujumbe", + "Current message expiration" : "Muda wa kuisha kwa ujumbe wa sasa", + "Password copied to clipboard" : "Nenosiri limenakiliwa kwenye ubao wa kunakili", + "Password could not be copied" : "Nenosiri halikuweza kunakiliwa", + "Guest access" : "Ufikiaji wa mgeni", + "Breakout rooms are not allowed in public conversations." : "Vyumba vifupi haviruhusiwi katika mazungumzo ya umma.", + "Allow guests to join this conversation via link" : "Ruhusu wageni wajiunge na mazungumzo haya kupitia kiungo", + "Password protection" : "Ulinzi wa nenosiri", + "This conversation is password-protected. Guests need password to join" : "Mazungumzo haya yanalindwa kwa nenosiri. Wageni wanahitaji nenosiri ili kujiunga", + "Password protection is needed for public conversations" : "Ulinzi wa nenosiri unahitajika kwa mazungumzo ya umma", + "Set a password" : "Weka nenosiri", + "Change password" : "Change password", + "Enter new password" : "Ingiza nenosiri jipya", + "Save password" : "Hifadhi nenosiri", + "Copy password" : "Nakili nenosiri", + "Guests are allowed to join this conversation via link" : "Wageni wanaruhusiwa kujiunga na mazungumzo haya kupitia kiungo", + "Guests are not allowed to join this conversation" : "Wageni hawaruhusiwi kujiunga na mazungumzo haya", + "Resend invitations" : "Tuma mialiko upya", + "This conversation is open to both registered users and users created with the Guests app" : "Mazungumzo haya yako wazi kwa watumiaji na watumiaji waliojiandikisha yaliyoundwa na programu ya Wageni", + "This conversation is open to registered users" : "Mazungumzo haya yamefunguliwa kwa watumiaji waliojiandikisha", + "This conversation is limited to the current participants" : "Mazungumzo haya ni ya washiriki wa sasa pekee", + "You opened the conversation to both registered users and users created with the Guests app" : "Umefungua mazungumzo kwa watumiaji waliojiandikisha na watumiaji walioundwa na programu ya Wageni", + "Error occurred when opening or limiting the conversation" : "Hitilafu ilitokea wakati wa kufungua au kupunguza mazungumzo", + "Open conversation to registered users, showing it in search results" : "Fungua mazungumzo kwa watumiaji waliojiandikisha, ukiyaonyesha katika matokeo ya utafutaji", + "Also open to users created with the Guests app" : "Wazi pia kwa watumiaji walioundwa na programu ya Wageni", + "Open conversation" : "Mazungumzo ya wazi", + "Set language spoken in calls" : "Weka lugha inayozungumzwa katika simu", + "Languages could not be loaded" : "Lugha hazikuweza kupakiwa", + "Loading languages …" : "Inapakia lugha  …", + "Invalid language" : "Lugha batili", + "Default language (English)" : "Lugha chaguo-msingi (Kiingereza)", + "Default live transcription language set" : "Seti chaguomsingi ya lugha ya manukuu ya moja kwa moja", + "Live transcription language set: {languageName}" : "Seti ya lugha ya manukuu ya moja kwa moja: {languageName}", + "Error when trying to set live transcription language" : "Hitilafu wakati wa kujaribu kuweka lugha ya manukuu ya moja kwa moja", + "Start time: {date}" : "Muda wa kuanza: {date}", + "Start time has been updated" : "Muda wa kuanza umesasishwa", + "Error occurred while updating start time" : "Hitilafu ilitokea wakati wa kusasisha muda wa kuanza", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Kuwasha ushawishi kutaondoa wasio wasimamizi kwenye simu inayoendelea.", + "Enable lobby, restricting the conversation to moderators" : "Washa kushawishi, ukizuia mazungumzo kwa wasimamizi", + "Meeting start time" : "Muda wa kuanza kwa mkutano", + "Start time (optional)" : "Muda wa kuanza (optional)", + "Import email participants" : "Ingiza washiriki wa barua pepe", + "You can import a list of email participants from a CSV file." : "Unaweza kuleta orodha ya washiriki wa barua pepe kutoka katika faili ya CSV.", + "Poll drafts" : "Rasimu za kura", + "Browse poll drafts" : "Vinjari rasimu za kura", + "Error occurred when locking the conversation" : "Hitilafu ilitokea wakati wa kufunga mazungumzo", + "Error occurred when unlocking the conversation" : "Hitilafu ilitokea wakati wa kufungua mazungumzo", + "Lock conversation" : "Funga mazungumzo", + "This will also terminate the ongoing call." : "Hii pia itasitisha simu inayoendelea.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Funga mazungumzo ili kuzuia mtu yeyote kutuma ujumbe au kuanzisha simu", + "Edit" : "Hariri", + "More information" : "Taarifa zaidi", + "Delete" : "Futa", + "Add new bridged channel to current conversation" : "Ongeza kituo kipya kilichounganishwa kwenye mazungumzo ya sasa", + "unknown state" : "hali isiyojulikana", + "running" : "inafanya kazi", + "not running, check Matterbridge log" : "Haifanyi kazi, angalia logi ya Matterbridge", + "not running" : "Haifanyi kazi", + "Bridge saved" : "Daraja lililohifadhiwa", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Unaweza kuunganisha vituo kutoka kwa mifumo mbalimbali ya ujumbe wa papo hapo ukitumia Matterbridge.", + "More info on Matterbridge" : "Pata maelezo zaidi kuhusu Matterbridge", + "Messaging systems" : "Mifumo ya ujumbe", + "Enable bridge" : "Washa daraja", + "Show Matterbridge log" : "Onyesha kumbukumbu ya Matterbridge", + "Log content" : "Maudhui ya kumbukumbu", + "Only moderators are allowed to mention @all" : "Wasimamizi pekee wanaruhusiwa kutaja @ wote", + "All participants are allowed to mention @all" : "Washiriki wote wanaruhusiwa kutaja @wote", + "Participants are now allowed to mention @all." : "Washiriki sasa wanaruhusiwa kutaja @wote.", + "Mentioning @all has been limited to moderators." : "Kutaja @all kumepunguzwa kwa wasimamizi.", + "Allow participants to mention @all" : "Ruhusu washiriki kutaja @wote", + "Mention permissions" : "Taja ruhusa", + "Notifications" : "Arifa", + "Notify about calls in this conversation" : "Arifu kuhusu simu katika mazungumzo haya", + "Important conversation" : "Mazungumzo muhimu", + "\"Do not disturb\" user status is ignored for important conversations" : "\"Usisumbue\" hali ya mtumiaji inapuuzwa kwa mazungumzo muhimu", + "Sensitive conversation" : "Mazungumzo nyeti", + "Message preview will be disabled in conversation list and notifications" : "Onyesho la kuchungulia la ujumbe litazimwa katika orodha ya mazungumzo na arifa", + "Recording consent is required for calls in this conversation" : "Idhini ya kurekodi inahitajika kwa simu katika mazungumzo haya", + "Recording consent is not required for calls in this conversation" : "Idhini ya kurekodi haihitajiki kwa simu katika mazungumzo haya", + "Recording consent requirement was updated" : "Masharti ya idhini ya kurekodi yalisasishwa", + "Error occurred while updating recording consent" : "Hitilafu ilitokea wakati wa kusasisha idhini ya kurekodi", + "Recording Consent" : "Idhini ya Kurekodi", + "Recording consent cannot be changed once a call or breakout session has started." : "Idhini ya kurekodi haiwezi kubadilishwa mara tu simu au kipindi cha muhula kitakapoanza.", + "Require recording consent before joining call in this conversation" : "Inahitaji idhini ya kurekodi kabla ya kujiunga na simu kwenye mazungumzo haya", + "Recording consent is required for all calls" : "Idhini ya kurekodi inahitajika kwa simu zote", + "SIP dial-in is now possible without PIN requirement" : "Upigaji simu wa SIP sasa unawezekana bila hitaji la PIN", + "SIP dial-in is now enabled" : "Upigaji simu wa SIP sasa umewezeshwa", + "SIP dial-in is now disabled" : "Upigaji simu wa SIP sasa umezimwa", + "Error occurred when enabling SIP dial-in" : "Hitilafu ilitokea wakati wa kuwezesha upigaji simu wa SIP", + "Error occurred when disabling SIP dial-in" : "Hitilafu ilitokea wakati wa kuzima upigaji simu wa SIP", + "Phone and SIP dial-in" : "Upigaji simu na SIP", + "Enable phone and SIP dial-in" : "Washa upigaji simu na SIP", + "Allow to dial-in without a PIN" : "Ruhusu kupiga simu bila PIN", + "Ongoing" : "Inaendelea", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n person accepted","%n watu walikubali"], + "_%n person declined_::_%n people declined_" : ["%n person declined","%n watu walikataa"], + "_and %n other attachment_::_and %n other attachments_" : ["and %n other attachment","na viambatisho %n vingine"], + "With {displayName}" : "Na {displayName}", + "In {conversation}" : "Katika {conversation}", + "View attachment" : "Tazama kiambatisho", + "Join" : "Jiunge", + "View conversation" : "Tazama mazungumzo", + "View event on Calendar" : "Tazama tukio kwenye Kalenda", + "Error while creating the conversation" : "Hitilafu wakati wa kuunda mazungumzo", + "Hello, {displayName}" : "Hallo, {displayName}", + "Start meeting now" : "Anza mkutano sasa", + "Give your meeting a title" : "Upe kichwa mkutano wako", + "Create and copy link" : "Unda na unakili kiungo", + "Create a new conversation" : "Tengeneza mazungumzo mapya", + "Join open conversations" : "Jiunge mazungumzo ya wazi", + "Call a phone number" : "Piga nambari ya simu", + "Scroll backward" : "Rudisha nyuma", + "Scroll forward" : "Sogeza mbele", + "Schedule meetings" : "Panga mikutano", + "You don't have any upcoming meetings" : "Huna mikutano yoyote inayokuja", + "Open calendar" : "Fungua kalenda", + "Unread mentions" : "Mitajo ambayo haijasomwa", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Barua pepe ulizotajwa zitaonekana hapa. Unaweza kutaja watu kwa kuandika @ ikifuatiwa na majina yao", + "Upcoming reminders" : "Vikumbusho vijavyo", + "Message reminders" : "Vikumbusho vya ujumbe", + "Set a reminder on a message to be notified" : "Weka kikumbusho kwenye ujumbe utakaoarifiwa", + "Start a group conversation" : "Anzisha mazungumzo ya kikundi", + "Create conversation" : "Tengeneza mazungumzo", + "Enter your name" : "Ingiza jina lako", + "Submit name and join" : "Toa jina na ujiunge", + "Do you already have an account?" : "Je, tayari una akaunti?", + "Log in" : "Ingia", + "Error while verifying uploaded file" : "Hitilafu wakati wa kuthibitisha faili iliyopakiwa", + "Uploaded file is verified" : "Faili iliyopakiwa imethibitishwa", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Umbizo la maudhui ni thamani zilizotenganishwa kwa koma (CSV):
- Mstari wa kichwa unahitajika na lazima ulingane na \"jina\",\"barua pepe\" au \"barua pepe\"
tu - Ingizo moja kwa kila mstari (k.m. \"John Doe\",john@example.tld\")", + "Participants added successfully" : "Washiriki waliongezwa kwa mafanikio", + "Error while adding participants" : "Hitilafu wakati wa kuongeza washiriki", + "Import a file" : "Ingiza faili", + "Browse" : "Vinjari", + "Verifying uploaded file …" : "Inathibitisha faili iliyopakiwa...", + "This might take a moment" : "Hii inaweza kuchukua muda", + "Send invitations" : "Tuma mialiko", + "_%n invalid email_::_%n invalid emails_" : ["%n invalid email","%n barua pepe zisizo sahihi"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n email is already imported or a duplicate","%n barua pepe tayari zimeagizwa kutoka nje au nakala"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n invitation can be sent","mialiko %n inaweza kutumwa"], + "An error occurred while calling a phone number" : "Hitilafu ilitokea wakati wa kupiga nambari ya simu", + "Phone number could not be called: {error}" : "Nambari ya simu haikuweza kuitwa: {error}", + "Phone number could not be called" : "Nambari ya simu haikuweza kuitwa", + "Search participants or phone numbers" : "Tafuta washiriki au nambari za simu", + "Creating the conversation …" : "Inaunda mazungumzo...", + "Mark as read" : "Weka alama kama iliyosomwa", + "Mark as unread" : "Weka alama kama haijasomwa", + "Remove from favorites" : "Ondoa kutoka katika vipendwa", + "Add to favorites" : "Ongeza kwenye vipendwa", + "Unarchive conversation" : "Ondoa mazungumzo kwenye kumbukumbu", + "Ignore \"Do not disturb\"" : "Puuza \"Do not disturb\"", + "You need to promote a new moderator before you can leave the conversation." : "Unahitaji kutangaza msimamizi mpya kabla ya kuondoka kwenye mazungumzo.", + "Conversation actions" : "Vitendo vya mazungumzo", + "Notify about calls" : "Arifu kuhusu simu", + "Hide message text" : "Ficha maandishi ya ujumbe", + "Pending invitations" : "Mialiko inayosubiri", + "From {user} at {remoteServer}" : "Kutoka {user} kwenye {remoteServer}", + "Decline invitation" : "Kataa mwaliko", + "Accept invitation" : "Kubali mwaliko", + "No pending invitations" : "Hakuna mialiko inayosubiri", + "Home" : "Nyumbani", + "Unread" : "Haijasomwa", + "Mentions" : "Mitajo", + "Meetings" : "Mikutano", + "Alphabetically" : "Kialfabeti", + "No followed threads" : "Hakuna nyuzi zinazofuatwa", + "No matches found" : "Hakuna ulingano uliopatikana", + "No conversations found" : "Hakuna mazungumzo yaliyopatikana", + "You have no archived conversations." : "Huna mazungumzo yaliyohifadhiwa kwenye kumbukumbu.", + "Subscribe to an existing thread or start your own." : "Jiandikishe kwa mazungumzo yaliyopo au uanzishe yako.", + "You have no unread mentions." : "Huna mtaji ambao haujasomwa.", + "You have no unread messages." : "Huna ujumbe ambao haujasomwa.", + "An error occurred while performing the search" : "Hitilafu ilitokea wakati wa kutafuta", + "Conversation list" : "Orodha ya mazungumzo", + "Filter conversations by" : "Chuja mazungumzo kwa", + "Unread messages" : "Jumbe ambazo hazijasomwa", + "Meeting conversations" : "Mazungumzo ya mkutano", + "Clear filters" : "Futa vichujio", + "New personal note" : "Ujumbe mpya wa kibinafsi", + "Back to conversations" : "Rudi kwenye mazungumzo", + "Archived conversations" : "Mazungumzo yaliyowekwa kwenye kumbukumbu", + "Threads" : "Mijadala", + "Clear filter" : "Futa kichujio", + "Show more threads" : "Onyesha mijadala zaidi", + "App settings" : "Mipangilio ya programu", + "Users" : "Watumiaji", + "Groups" : "Makundi", + "Teams" : "Timu", + "Federated users" : "Watumiaji walioshirikishwa", + "New private conversation" : "Mazungumzo mapya ya faragha", + "Other sources" : "Vyanzo vingine", + "Open conversations" : "Mazungumzo ya wazi", + "No search results" : "Hakuna matokeo ya utafutaji", + "Users, groups and teams" : "Watumiaji, vikundi na timu", + "Users and groups" : "Watumiaji na vikundi", + "Users and teams" : "Watumiaji na timu", + "Groups and teams" : "Vikundi na timu", + "New group conversation" : "Mazungumzo mapya ya kikundi", + "The meeting will start soon" : "Mkutano utaanza hivi karibuni", + "This meeting is scheduled for {startTime}" : "Mkutano huu umepangwa kwa {startTime}", + "You are currently waiting in the lobby" : "Kwa sasa unasubiri kwenye chumba cha kushawishia", + "Select microphone" : "Chagua maikrofoni", + "No microphone available" : "Hakuna maikrofoni inayopatikana", + "Select speaker" : "Chagua spika", + "No speaker available" : "Hakuna spika zinazopatikana", + "Select camera" : "Chagua kamera", + "No camera available" : "Hakuna kamera inayopatikana", + "Select a device" : "Chagua kifaa", + "Playing …" : "Inacheza...", + "Test speakers" : "Jaribu spika", + "Test" : "Jaribu", + "Devices" : "Vifaa", + "Backgrounds" : "Mandhari nyuma", + "No audio" : "Hakuna sauti", + "No camera" : "Hakuna kamera", + "Display video as you will see it (mirrored)" : "Onyesha video jinsi utakavyoiona (iliyoakisiwa)", + "Display video as others will see it" : "Onyesha video jinsi wengine watakavyoiona", + "Calls are not supported in your browser" : "Simu hazitumiki katika kivinjari chako", + "Access to microphone is only possible with HTTPS" : "Ufikiaji wa maikrofoni unawezekana tu kwa HTTPS", + "Access to microphone was denied" : "Ufikiaji wa maikrofoni ulikataliwa", + "Error while accessing microphone" : "Hitilafu wakati wa kufikia maikrofoni", + "Access to camera is only possible with HTTPS" : "Ufikiaji wa kamera unawezekana tu kwa HTTPS", + "The call is being recorded." : "Simu inarekodiwa.", + "The call might be recorded." : "Simu inaweza kuwa imerekodiwa", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Rekodi inaweza kujumuisha sauti yako, video kutoka kwa kamera na kushiriki skrini. Idhini yako inahitajika kabla ya kujiunga kwenye simu.", + "Give consent to the recording of this call" : "Toa idhini ya kurekodiwa kwa simu hii", + "Show more info" : "Onesha maelezo zaidi", + "Audio is not available" : "Sauti haipatikani", + "Video is not available" : "Video haipatikani", + "Start recording immediately with the call" : "Anza kurekodi mara moja na simu", + "Notify all participants about this call" : "Wajulishe washiriki wote kuhusu simu hii", + "Apply settings" : "Tumia mipangilio", + "Select virtual office background" : "Chagua mwonekano wa mandharinyuma ya ofisi", + "Select virtual home background" : "Chagua mwonekano wa mandharinyuma ya nyumbani", + "Select virtual abstract background" : "Chagua mwonekano wa mandharinyuma dhahania", + "Select virtual beach background" : "Chagua mwonekano wa mandharinyuma ya ufukwe", + "Select virtual park background" : "Chagua mwonekano wa mandharinyuma ya bustani", + "Select virtual theater background" : "Chagua mwonekano wa mandharinyuma ya ukumbi wa michezo", + "Select virtual library background" : "Chagua mwonekano wa mandharinyuma ya maktaba ", + "Select virtual space station background" : "Chagua mandharinyuma ya kituo cha anga za juu", + "Error while uploading the file" : "Hitilafu wakati wa kupakia faili", + "Select a file" : "Chagua faili", + "Invalid path selected" : "Njia iliyochaguliwa si halali", + "Select virtual background from file {fileName}" : "Chagua mwonekano wa mandharinyuma kutoka kwa faili {fileName}", + "Blur" : "Blur", + "Upload" : "Pakia", + "Files" : "Faili", + "(editing)" : "(inahariri)", + "(edited)" : "(imehaririwa)", + "The message has expired or has been deleted" : "Ujumbe umekwisha muda wake au umefutwa", + "Cancel quote" : "Ghairi nukuu", + "24 hours" : "Masaa 24", + "7 days" : "Siku 7", + "Until unpin" : "Until unpin", + "Clear reminder – {timeLocale}" : "Futa kikumbusho – {timeLocale}", + "Edited by {actor}" : "Imehaririwa na {actor}", + "Message text copied to clipboard" : "Maandishi ya ujumbe yamenakiliwa kwenye ubao wa kunakili", + "Message text could not be copied" : "Maandishi ya ujumbe hayakuweza kunakiliwa", + "Message forwarded to \"Note to self\"" : "Ujumbe umetumwa kwa \"Note to self\"", + "Error while forwarding message to \"Note to self\"" : "Hitilafu wakati wa kusambaza ujumbe kwa \"Note to self\"", + "A reminder was successfully removed" : "Kikumbusho kiliondolewa kwa mafanikio", + "Error occurred when removing a reminder" : "Hitilafu ilitokea wakati wa kuondoa kikumbusho", + "A reminder was successfully set at {datetime}" : " Kikumbusho kiliwekwa kwa mafanikio {datetime}", + "Error occurred when creating a reminder" : "Hitilafu ilitokea wakati wa kuunda kikumbusho", + "Add a reaction to this message" : "Ongeza maoni kwa ujumbe huu", + "Reply" : "Jibu", + "More actions" : "Vitendo zaidi", + "Set reminder" : "Weka ukumbusho", + "Pin message" : "Pin message", + "Unpin message" : "Unpin message", + "Reply privately" : "Jibu kwa faragha", + "Edit message" : "Hariri ujumbe", + "Copy message" : "Nakili ujumbe", + "Copy message link" : "Nakili kiungo cha ujumbe", + "Go to file" : "Nenda kwenye faili", + "Download file" : "Pakua faili", + "Go to thread" : "Nenda kwenye mjadala", + "Edit thread details" : "Hariri maelezo ya mjadala", + "Forward message" : "Sambaza ujumbe", + "Translate" : "Tafsiri", + "Set custom reminder" : "Weka kikumbusho maalum", + "Close reactions menu" : "Funga menyu ya maoni", + "React with {emoji}" : "Jibu kwa {emoji}", + "React with another emoji" : "Jibu kwa emoji nyingine", + "Choose a conversation to forward the selected message." : "Chagua mazungumzo ili kusambaza ujumbe uliochaguliwa.", + "Error while forwarding message" : "Hitilafu wakati wa kusambaza ujumbe", + "The message has been forwarded to {selectedConversationName}" : "Ujumbe umetumwa kwa {selectedConversationName}", + "Dismiss" : "Ondoa", + "Go to conversation" : "Nenda kwenye mazungumzo", + "Detect language" : "Lugha iliyotambuliwa", + "The message could not be translated" : "Ujumbe haukuweza kutafsiriwa", + "Translation copied to clipboard" : "Tafsiri imenakiliwa kwenye ubao wa kunakili", + "Translation could not be copied" : "Tafsiri haikuweza kunakiliwa", + "Translate message" : "Tafsiri ujumbe", + "Source language to translate from" : "Lugha ya chanzo ya kutafsiri kutoka", + "Translate from" : "Tafsiri kutoka", + "Target language to translate into" : "Lugha lengwa ya kutafsiriwa", + "Translate to" : "Tafsiri kwa ", + "Translating" : "Inatafsiri", + "Copy translated text" : "Nakili maandishi yaliyotafsiriwa", + "Reschedule" : "Reschedule", + "Send now" : "Tuma sasa", + "Message read by everyone who shares their reading status" : "Ujumbe unaosomwa na kila mtu anayeshiriki hali yake ya usomaji", + "Message sent" : "Ujumbe umetumwa", + "Sent without notification" : "Imetumwa bila arifa", + "Deleting message" : "Inafuta ujumbe", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Ujumbe umefutwa, lakini roboti au Matterbridge imesanidiwa na ujumbe unaweza kuwa tayari kusambazwa kwa huduma zingine.", + "Message deleted successfully" : "Ujumbe umefutwa kwa mafanikio", + "Message could not be deleted because it is too old" : "Ujumbe haukuweza kufutwa kwa sababu ni wa zamani sana", + "Only normal chat messages can be deleted" : "Ni ujumbe wa kawaida tu wa gumzo unaweza kufutwa", + "An error occurred while deleting the message" : "Hitilafu ilitokea wakati wa kufuta ujumbe", + "Pinned" : "Pinned", + "Your browser does not support playing audio files" : "Kivinjari chako hakiungi faili za sauti", + "Contact" : "Mawasiliano", + "{stack} in {board}" : "{stack} katika {board}", + "Deck Card" : "Kadi ya Deck ", + "Remove {fileName}" : "Ondoa {fileName}", + "Open this location in OpenStreetMap" : "Fungua eneo hili katika OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n reply","%n majibu"], + "Sending message" : "Kutuma ujumbe", + "Failed to send the message. Click to try again" : "Imeshindwa kutuma ujumbe. Bofya ili kujaribu tena", + "Not enough free space to upload file" : "Hakuna nafasi ya kutosha ya kupakia faili", + "You cannot send messages to this conversation at the moment" : "Huwezi kutuma ujumbe kwa mazungumzo haya kwa sasa", + "Could not update the message" : "Haikuweza kusasisha ujumbe", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Poll draft • %n option","Rasimu ya kura • chaguo %n"], + "_%n vote_::_%n votes_" : ["%n vote","%n kura"], + "Edit poll draft" : "Hariri rasimu ya kura ya maoni", + "Delete poll draft" : "Futa rasimu ya kura ya maoni", + "Open poll" : "Kura ya wazi", + "See results" : "Ona matokeo", + "Reactions" : "Miitikio", + "No permission to post reactions in this conversation" : "Hakuna ruhusa ya kuchapisha maoni katika mazungumzo haya", + "and {participant}" : "na {participant}", + "_and %n other participant_::_and %n other participants_" : ["and %n other participant","na %n washiriki wengine"], + "Show all reactions" : "Onesha miitikio yote", + "Add more reactions" : "Ongeza miitikio zaidi", + "Show or collapse system messages" : "Onyesha au ukunje ujumbe wa mfumo", + "No messages" : "Hakuna jumbe", + "All messages have expired or have been deleted." : "Barua pepe zote zimeisha muda wake au zimefutwa.", + "{author} (pinned by you)" : "{author} (pinned by you)", + "Unpin" : "Bandua", + "Cancel search" : "Ghairi utafutaji", + "Add a phone number" : "Ongeza namba ya simu", + "Error: A password is required to create the conversation." : "Hitilafu: Nenosiri linahitajika ili kuunda mazungumzo.", + "All set, the conversation \"{conversationName}\" was created." : "Baada ya yote, mazungumzo \"{conversationName}\" yaliundwa.", + "Create a new group conversation" : "Unda mazungumzo mapya ya kikundi", + "Add participants" : "Ongeza washiriki", + "Maximum length exceeded ({maxlength} characters)" : "Urefu wa juu zaidi umepitwa (herufi {maxlength})", + "Conversation visibility" : "Mwonekano wa mazungumzo", + "Allow guests to join via link" : "Ruhusu wageni kujiunga kupitia kiungo", + "Enter password" : "Ingiza nenosiri", + "This conversation has been locked" : "Mazungumzo haya yamefungwa", + "No permission to post messages in this conversation" : "Hakuna ruhusa ya kutuma ujumbe katika mazungumzo haya", + "Joining conversation …" : "Inajiunga na mazungumzo...", + "Write a message without notification" : "Andika ujumbe bila arifa", + "Create a thread silently" : "Unda mjadal;a kimya kimya", + "Create a thread" : "Unda mjadala", + "Send message silently" : "Tuma ujumbe kimya kimya", + "Send message" : "Tuma ujumbe", + "Send without notification" : "Tuma bila arifa", + "The participant will not be notified about new messages" : "Mshiriki hatataarifiwa kuhusu ujumbe mpya", + "Participants will not be notified about new messages" : "Washiriki hawatajulishwa kuhusu ujumbe mpya", + "Thread title is required" : "Kichwa cha mjadala kinahitajika", + "Message text is required" : "Ujumbe wa maandishi unahitajika", + "The message could not be edited" : "Ujumbe hauwezi kuhaririwa", + "File to share" : "Faili la kushirikisha", + "File upload is not available in this conversation" : "Upakiaji wa faili haupatikani katika mazungumzo haya", + "Add emoji" : "Ongeza emoji", + "Adding a mention will only notify users who did not read the message." : "Kuongeza mtajo kutaarifu watumiaji ambao hawakusoma ujumbe pekee.", + "Thread title" : "Kichwa cha mjadala", + "Send later" : "Tuma baadaye", + "Cancel editing" : "Ghairi uhariri", + "Schedule message" : "Schedule message", + "{user} is out of office and might not respond." : "{user} yuko nje ya ofisi na anaweza asijibu.", + "Absence period: {startDate} - {endDate}" : "Kipindi cha kutokuwepo: {startDate} - {endDate}", + "Replacement:" : "Uingizwaji:", + "Share from {nextcloud}" : "Shirikisha kutoka {nextcloud}", + "Share from Files" : "Shirikisha kutoka katika mafaili", + "Share files to the conversation" : "Shiriki faili kwenye mazungumzo", + "Upload from device" : "Pakia kutoka katika kifaa", + "Create new poll" : "Unda kura mpya", + "Smart picker" : "Kiteua mahiri", + "Record voice message" : "Rekodi ujumbe wa sauti", + "End recording and send" : "Maliza kurekodi na utume", + "Dismiss recording" : "Ondoa kurekodi", + "Access to the microphone was denied" : "Ufikiaji wa maikrofoni ulikataliwa", + "Microphone either not available or disabled in settings" : "Maikrofoni haipatikani au imezimwa katika mipangilio", + "Error while recording audio" : "Hitilafu wakati wa kurekodi sauti", + "Generating summary of unread messages …" : "Inazalisha muhtasari wa ujumbe ambao haujasomwa ...", + "Summary is AI generated and might contain mistakes" : "Muhtasari umetolewa na AI na unaweza kuwa na makosa", + "Error occurred during a summary generation" : "Hitilafu ilitokea wakati wa uzalishaji wa muhtasari", + "New file" : "Faili mpya", + "Blank" : "Mabano", + "Error while creating file" : "Hitilafu wakati wa kuunda faili", + "Create and share a new file" : "Unda na ushiriki faili mpya", + "Name of the new file" : "Jina la faili mpya", + "Create file" : "Unda faili", + "Someone is typing …" : "Mtu fulani anachapa", + "{user1} is typing …" : "{user1} anachapa", + "{user1} and {user2} are typing …" : "{user1} na {user2} wanachapa", + "{user1}, {user2} and {user3} are typing …" : "{user1},{user2} na {user3} wanachapa...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} and %n other are typing …","{user1}, {user2}, {user3} na %n wengine wanachapa …"], + "Add more files" : "Oneza faili zaidi", + "Send" : "Tuma", + "In this conversation {user} can:" : "Katika mazungumzo haya {user} anaweza:", + "Edit default permissions for participants in {conversationName}" : "Badilisha ruhusa chaguomsingi kwa washiriki {conversationName}", + "Start a call" : "Anzisha simu", + "Skip the lobby" : "Ruka kushawishi", + "Can post messages and reactions" : "Inaweza kuchapisha ujumbe na maoni", + "Enable the microphone" : "Washa maikrofoni", + "Enable the camera" : "Washa kamera", + "Share the screen" : "Shiriki skrini", + "Update permissions" : "Sasisha ruhusa", + "Updating permissions" : "Inasasisha ruhusa", + "No poll drafts" : "Hakuna rasimu za kura", + "There is no poll drafts yet saved for this conversation" : "Bado hakuna rasimu za kura zilizohifadhiwa kwa mazungumzo haya", + "Create poll in {name}" : "Unda kura ya maoni katika {name}", + "Create poll" : "Tengeneza kura ya maoni", + "Error while importing poll" : "Hitilafu wakati wa kuleta kura ya maoni", + "Question" : "Swali", + "Ask a question" : "Uliza swali", + "Import draft from file" : "Ingiza rasimu kutoka kwenye faili", + "Answers" : "Majibu", + "Answer {option}" : "Jibu {option}", + "Delete poll option" : "Futa chaguo la kura", + "Add answer" : "Ongeza jibu", + "Settings" : "Mipangilio", + "Anonymous poll" : "Kura ya maoni isiyojulikana", + "Multiple answers" : "Majibu mengi", + "Save as draft" : "Hifadhi kama rasimu", + "Export draft to file" : "Hamisha rasimu hadi faili", + "You voted for this option" : "Ulipigia kura chaguo hili", + "End poll" : "Maliza kura", + "Change your vote" : "Badilisha kura yako", + "Results" : "Matokeo", + "Voted participants" : "Washiriki waliopiga kura", + "Send a message to \"{roomName}\"" : "Tuma ujumbe kwa \"{roomName}\"", + "Hide list of participants" : "Ficha orodha ya washiriki", + "Show list of participants" : "Onesha orodha ya washiriki", + "Assistance requested in {roomName}" : "Usaidizi ulioombwa {roomName}", + "The message was sent to \"{roomName}\"" : "Ujumbe ulitumwa kwa \"{roomName}\"", + "Dismiss request for assistance" : "Ondoa ombi la usaidizi", + "Send message to room" : "Tuma ujumbe kwenye chumba", + "Back to main room" : "Rudi kwenye chumba kuu", + "Back to your room" : "Rudi kwenye chumba chako", + "Message all rooms" : "Tuma ujumbe kwenye vyumba vyote", + "Start session" : "Anza kipindi", + "Start a call before you start a breakout room session" : "Anza simu kabla ya kuanza kikao cha chumba cha kujitenga", + "Stop session" : "Simamisha kipindi", + "The message was sent to all breakout rooms" : "Ujumbe ulitumwa kwa vyumba vyote vya vikundi vidogo", + "Send a message to all breakout rooms" : "Tuma ujumbe kwa vyumba vyote vya vikundi vidogo", + "Breakout rooms are not started" : "Vyumba vya kujitenga havijaanza", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Simu zisizo na utendakazi wa hali ya juu zinaweza kusababisha matatizo ya muunganisho na upakiaji wa juu kwenye vifaa. {linkstart}Pata maelezo zaidi{linkend}", + "Talk setup incomplete" : "Usanidi wa Talk haujakamilika", + "Disable lobby" : "Zima kushawishi", + "Settings for participant \"{user}\"" : "Mipangilio ya mshiriki \"{user}\"", + "Participant \"{user}\"" : "Mshiriki \"{user}\"", + "moderator" : "moderator", + "bot" : "bot", + "guest" : "mgeni", + "Ringing …" : "Inaita …", + "Call rejected" : "Sime imekataliwa", + "{time} talking …" : "{time} anazungumza …", + "{time} talking time" : "{time}muda wa kuzungumza ", + "Raised their hand" : "Walinyanyua mkono wao", + "Joined with video" : "Imeunganishwa na video", + "Joined via phone" : "Imejiunga kupitia simu", + "Joined with audio" : "Imeunganishwa na sauti", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Maandishi lazima yawe chini ya au sawa na urefu wa vibambo {maxLength}. Maandishi yako ya sasa yana urefu wa vibambo {charactersCount}.", + "Remove group and members" : "Ndoa kundi na wanachama", + "Remove team and members" : "Ondoa timu na wanachama", + "Remove participant" : "Ondoa washiriki", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Je, kweli unataka kuondoa kikundi \"{displayName}\" na wanachama wake kwenye mazungumzo haya?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Je, ungependa kuondoa timu \"{displayName}\" na wanachama wake kwenye mazungumzo haya?", + "Do you really want to remove {displayName} from this conversation?" : "Je, kweli unataka kuondoa {displayName} kwenye mazungumzo haya?", + "Notification was sent to {displayName}" : "Arifa ilitumwa kwa {displayName}", + "Could not send notification to {displayName}" : "Haikuweza kutuma arifa kwa {displayName}", + "Permissions granted to {displayName}" : "Ruhusa iliyotolewa kwa {displayName}", + "Could not modify permissions for {displayName}" : "Haikuweza kubadilisha ruhusa za {displayName}", + "Permissions removed for {displayName}" : "Ruhusa zimeondolewa kwa {displayName}", + "Permissions set to default for {displayName}" : "Ruhusa zimewekwa kwa chaguo-msingi kwa {displayName}", + "Phone number could not be hung up" : "Nambari ya simu haikuweza kukatwa", + "Phone number could not be put on hold" : "Nambari ya simu haikuweza kuwekwa kwenye kusubiri", + "Phone number could not be muted" : "Nambari ya simu haikuweza kunyamazishwa", + "Phone number could not be unmuted" : "Nambari ya simu haikuweza kurejeshwa", + "DTMF message could not be sent" : "Ujumbe wa DTMF haukuweza kutumwa", + "Phone number copied to clipboard" : "Nambari ya simu imenakiliwa kwenye ubao wa kunakili", + "Phone number could not be copied" : "Nambari ya simu haikuweza kunakiliwa", + "in the lobby" : "katika ukumbi", + "Dial out phone" : "Piga simu nje", + "Hang up phone" : "Kata simu", + "Move back to lobby" : "Rudi kwenye kushawishi", + "Move to conversation" : "Nenda kwenye mazungumzo", + "Dial-in PIN" : "Piga simu kwa PIN", + "Demote from moderator" : "Demote from moderator", + "Promote to moderator" : "Promote to moderator", + "Resend invitation" : "Tuma tena mwaliko", + "Send call notification" : "Tuma arifa ya simu", + "Dial out phone number" : "Piga namba ya simu ya nje", + "Resume call for phone number" : "Endelea kupiga simu kwa nambari ya simu", + "Put phone number on hold" : "Weka nambari ya simu kwenye hali ya kusubiri", + "Unmute phone number" : "Rejesha sauti ya nambari ya simu", + "Mute phone number" : "Nyamazisha nambari ya simu", + "Copy phone number" : "Nakili nambari ya simu", + "Reset custom permissions" : "Weka upya ruhusa maalum", + "Grant all permissions" : "Toa ruhusa zote", + "Remove all permissions" : "Ondoa ruhusa zote", + "Also ban from this conversation" : "Pia piga marufuku kutoka kwa mazungumzo haya", + "Internal note (reason to ban)" : "Ujumbe wa ndani (reason to ban)", + "Remove" : "Ondoa", + "Permissions modified for {displayName}" : "Ruhusa zimerekebishwa kwa {displayName}", + "Add users, groups or teams" : "Ongeza watumiaji, vikundi au timu", + "Add users or groups" : "Ongeza watumiaji au vikundi", + "Add users or teams" : "Ongeza watumiaji au timu", + "Add users" : "Ongeza watumiaji", + "Add groups or teams" : "Ongeza vikundi au timu", + "Add groups" : "Ongeza vikundi", + "Add teams" : "Ongeza timu", + "Add other sources" : "Ongeza vyanzo vingine", + "Add emails" : "Ongeza barua pepe", + "Integrations" : "Ujumuishaji", + "Add federated users" : "Ongeza watumiaji walioshirikishwa", + "Searching …" : "Inatafuta", + "Search for more users" : "Tafuta watumiaji zaidi", + "You can search or add participants via name, email, or Federated Cloud ID" : "Unaweza kutafuta au kuongeza washiriki kupitia jina, barua pepe, au Kitambulisho cha Cloud Shirikishi", + "Search or add participants" : "Tafuta au ongeza washiriki", + "Invitation was sent to {actorId}" : "Mwaliko ulitumwa kwa {actorId}", + "An error occurred while adding the participants" : "Hitilafu ilitokea wakati wa kuongeza washiriki", + "A new group conversation with selected participant will be created" : "Mazungumzo mapya ya kikundi na mshiriki aliyechaguliwa yataundwa", + "Participants" : "Washiriki", + "Participants ({count})" : "Washiriki ({count})", + "Open chat" : "Gumzo ya wazi", + "You have new unread messages in the chat." : "Una jumbe mpya ambazo hazijasomwa kwenye gumzo.", + "You have been mentioned in the chat." : "Umetajwa kwenye gumzo.", + "Search messages" : "Tafuta jumbe", + "Chat" : "Gumzo", + "Details" : "Maelezo ya kina", + "Shared items" : "Vipengele vilivyoshirikiwa", + "Search in {name}" : "Tafuta katika {name}", + "Threads in {name}" : "Mijadala katika {name}", + "{actor} in {conversation}" : "{actor} katika {conversation}", + "Search messages …" : "Tafuta jumbe …", + "Search options" : "Tafuta machaguo", + "From User" : "Kutoka kwa mtumiaji", + "Since" : "Tangu", + "Until" : "Mpaka", + "No results found" : "Hakuna matokeo yaliyopatikana", + "Load more results" : "Pakia matokeo zaidi", + "Recent threads" : "Recent threads", + "Projects" : "Miradi", + "No shared items" : "Hakuna vipengele vilivyoshirikiwa", + "Thread notifications" : "Arifa za mjadala", + "Thread actions" : "Matendo ya mjadala", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Unga kwenye mazungumzo", + "No open conversations found" : "Hakuna mazungumzo ya wazi yaliyopatikana", + "Either there are no open conversations or you joined all of them." : "Labda hakuna mazungumzo ya wazi au umejiunga nayo yote.", + "Check spelling or use complete words." : "Angalia tahajia au tumia maneno kamili.", + "Search conversations or users" : "Tafuta mazungumzo au watumiaji", + "Select conversation" : "Chagua mazungumzo", + "Number length is not valid" : "Urefu wa nambari sio halali", + "Region code is not valid" : "Msimbo wa eneo si sahihi", + "Number length is too short" : "Urefu wa nambari ni mfupi sana", + "Number length is too long" : "Urefu wa nambari ni mrefu sana", + "Number is not valid" : "Nambari si halali", + "Phone numbers" : "Nambari za simu", + "Display name: {name}" : "Jina la kuonyesha: {name}", + "Edit display name" : "Badilisha jina la onyesho", + "Display name (required)" : "Jina la kuonyesha (required)", + "Save name" : "Hifadhi jina", + "Error while setting personal setting" : "Hitilafu wakati wa kuweka mipangilio ya kibinafsi", + "Error while saving sounds setting" : "Hitilafu wakati wa kuhifadhi mpangilio wa sauti", + "Play sounds when participants join or leave a call" : "Cheza sauti washiriki wanapojiunga au kuacha simu", + "Notification settings" : "Mipangilio ya arifu", + "Default language" : "Lugha chaguomsingi", + "Select location for attachments" : "Chagua eneo la viambatisho", + "Error while setting attachment folder" : "Hitilafu wakati wa kuweka folda ya kiambatisho", + "Error while setting read status privacy" : "Hitilafu wakati wa kuweka faragha ya hali ya kusoma", + "Error while setting typing status privacy" : "Hitilafu wakati wa kuweka faragha ya hali ya kuandika", + "Error while setting default media state" : "Hitilafu wakati wa kuweka hali chaguo-msingi ya midia", + "Privacy" : "Faragha", + "Attachments folder" : "Folda ya viambatisho", + "Toggle full screen" : "Geuza skrini nzima", + "Search" : "Tafuta", + "Focus the chat input" : "Lenga ingizo la gumzo", + "Unfocus the chat input to use shortcuts" : "Acha kulenga ingizo la gumzo ili kutumia njia za mkato", + "Edit your last message" : "Hariri ujumbe wako wa mwisho", + "Shortcuts while in a call" : "Njia za mkato ukiwa kwenye simu", + "Camera on and off" : "Kamera imewashwa na kuzima", + "Microphone on and off" : "Maikrofoni imewashwa na kuzima", + "Raise or lower hand" : "Inua au shusha mkono", + "Push to talk or push to mute" : "Sukuma kuzungumza au sukuma ili kunyamazisha", + "Zoom-in / zoom-out a screen share" : "Kuza / kupunguza kushiriki skrini", + "Mouse wheel" : "Gurudumu la mouse", + "Start call silently" : "Anza kupiga simu kimya kimya", + "Start call" : "Anza kupiga simu", + "End call" : "Kata simu", + "This call has just ended" : "Simu hii imekatika hivi punde", + "You will be able to join the call only after a moderator starts it." : "Utaweza kujiunga kwenye Hangout hiyo tu baada ya msimamizi kuianzisha.", + "End call for everyone" : "Maliza simu kwa kila mtu", + "Starting the recording" : "Kuanza kurekodi", + "Recording" : "Inarekodi", + "The call has been running for one hour." : "Simu imekuwa ikiendeshwa kwa saa moja.", + "Cancel recording start" : "Ghairi kuanza kurekodi", + "Stop recording" : "Simamisha kurekodi", + "Send a reaction" : "Tuma muitikio", + "React with {reaction}" : "Itikia kwa {reaction}", + "All tasks done!" : "Shughuli zote zimefanyika!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} of %n task","{done} ya %n shughuli"], + "Add participants to this call" : "Ongeza washiriki kwenye simu hii", + "_%n participant in call_::_%n participants in call_" : ["%n participant in call","%n washiriki katika simu"], + "Scheduled messages" : "Scheduled messages", + "You are not allowed to enable screensharing" : "Huruhusiwi kuwezesha kushiriki skrini", + "No screensharing" : "Hakuna kushiriki skrini", + "Screensharing options" : "Chaguo za kushiriki skrini", + "Enable screensharing" : "Washa ushiriki wa skrini", + "Bad sent video and screen quality." : "Ubora mbaya wa video na skrini uliotumwa", + "Bad sent screen quality." : "Ubora mbaya wa skrini iliyotumwa.", + "Bad sent video quality." : "Ubora mbaya wa video iliyotumwa.", + "Bad sent audio, video and screen quality." : "Ubora mbaya wa sauti, video na skrini uliotumwa.", + "Bad sent audio and screen quality." : "Ubora mbaya wa sauti na skrini uliotumwa", + "Bad sent audio and video quality." : "Ubora mbaya wa sauti na video uliotumwa.", + "Bad sent audio quality." : "Ubora mbaya wa sauti uliotumwa.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako. Ili kuboresha hali hiyo, jaribu kuzima ukungu wa mandharinyuma au video yako wakati unashiriki skrini.", + "Disable background blur" : "Lemaza ukungu wa mandharinyuma", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako. Ili kuboresha hali hiyo jaribu kuzima video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kuona skrini yako.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuona.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo, jaribu kuzima ukungu wa mandharinyuma au video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo jaribu kuzima video yako wakati unashiriki skrini.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kuona skrini yako. Ili kuboresha hali jaribu kuzima ushiriki wako wa skrini.", + "Disable screenshare" : "Disable screenshare", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali hiyo jaribu kuzima ukungu wa mandharinyuma au video yako.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa na kukuona. Ili kuboresha hali jaribu kuzima video yako.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Muunganisho wako wa intaneti au kompyuta yako ina shughuli nyingi na washiriki wengine huenda wasiweze kukuelewa.", + "Screen sharing is not supported by your browser." : "Kushiriki skrini hakutumiki na kivinjari chako.", + "Screen sharing requires the page to be loaded through HTTPS." : "Kushiriki skrini kunahitaji ukurasa kupakiwa kupitia HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Kushiriki skrini kunahitaji ukurasa kupakiwa kupitia HTTPS.", + "An error occurred while starting screensharing." : "Hitilafu ilitokea wakati wa kuanza kushiriki skrini.", + "Select virtual background" : "Chagua mandharinyuma pepe", + "Show your screen" : "Onesha skrini yako", + "Stop screensharing" : "Acha kushiriki skrini", + "Mute others" : "Nyamazisha wengine", + "Start recording" : "Anza kurekodi", + "Set up breakout rooms" : "Sanidi vyumba vya vipindi vifupi", + "Download attendance list" : "Pakua orodha ya mahudhurio", + "Open Calendar" : "Fungua Kalenda", + "Remove participant {name}" : "Ondoa mshiriki {name}", + "Would you like to delete this conversation?" : "Je, ungependa kufuta mazungumzo haya?", + "Are you sure you want to delete this conversation?" : "Je, una uhakika unataka kufuta mazungumzo haya?", + "Delete now" : "Futa sasa", + "Keep" : "Weka", + "Open dialpad" : "Fungua padi ya kupiga simu", + "Select a region" : "Chagua eneo", + "Local time: {time}" : "Muda wa kawaida: {time}", + "Search …" : "Tafuta...", + "Message without mention" : "Ujumbe bila kutajwa", + "Mention myself" : "Nijitaje mwenyewe", + "Mention everyone" : "Taja kila mtu", + "Select a conversation" : "Chagua mazungumzo", + "Select a mode" : "Chagua modi", + "You do not have permissions to access this conversation." : "Huna ruhusa ya kufikia mazungumzo haya.", + "Join a different conversation or start a new one." : "Jiunge na mazungumzo tofauti au anza mazungumzo mapya.", + "The conversation does not exist" : "Mazungumzo hayapo", + "Join a conversation or start a new one!" : "Jiunge na mazungumzo au anza mazungumzo mapya!", + "Duplicate session" : "Rudufu kipindi", + "Creating and joining a conversation with \"{userid}\"" : "Kuunda na kujiunga na mazungumzo na \"{userid}\"", + "Join a conversation or start a new one" : "Jiunge na mazungumzo au anzisha mapya", + "Error while joining the conversation" : "Hitilafu wakati wa kujiunga na mazungumzo", + "Nextcloud URL" : "URL ya Nextcloud ", + "Nextcloud user" : "Mtumiaji wa Nextcloud ", + "User password" : "Nenosiri la mtumiaji", + "Talk conversation" : "Mazungumzo ya Talk", + "Skip TLS verification" : "Ruka uthibitishaji wa TLS", + "Matrix server URL" : "URL ya seva ya matrix", + "User" : "Mtumiaji", + "Matrix channel" : "Njia ya Matrix ", + "Mattermost server URL" : "URL ya seva ya Mattermost", + "Mattermost user" : "Mtumiaji wa Mattermost ", + "Team name" : "Jina la timu", + "Channel name" : "Jina la njia", + "Rocket.Chat server URL" : "URL ya seva ya Rocket.Chat", + "User name or email address" : "Jina la mtumiaji au anwani ya barua pepe", + "Rocket.Chat channel" : "Njia ya Rocket.Chat ", + "Zulip server URL" : "URL ya seva ya Zulip", + "Bot user name" : "Jina la mtumiaji wa Bot", + "Bot API key" : "Ufunguo wa Bot API ", + "Zulip channel" : "Njia ya Zulip ", + "API token" : "Tokeni ya API ", + "Slack channel" : "Njia ya Slack ", + "Server ID or name" : "Kitambulisho cha seva au jina", + "Channel ID (prefixed with \"ID:\") or name" : "Kitambulisho cha njia (kilichoambishwa na \"ID:\") au jina", + "Channel" : "Njia ", + "Login" : "Ingia", + "Chat ID" : "Kitambulisho cha gumzo", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL ya seva ya IRC (e.g. chat.freenode.net:6667)", + "Nickname" : "Jina la utani", + "Connection password" : "Nenosiri la muunganisho", + "IRC channel" : "Njia ya IRC ", + "Channel password" : "Nenosiri la njia", + "NickServ nickname" : "Jina la utani la NickServ", + "NickServ password" : "Nenosiri la NickServ", + "Use TLS" : "Tumia TLS", + "Use SASL" : "Tumia SASL", + "Tenant ID" : "Kitambulisho cha Tenant ", + "Client ID" : "Kitambulisho cha mteja", + "Team ID" : "Kitambulisho cha timu", + "Thread ID" : "Kitambulisho cha mjadala", + "XMPP/Jabber server URL" : "URL ya seva ya XMPP/Jabber", + "MUC server URL" : "URL ya seva ya MUC", + "Jabber ID" : "Kitambulisho cha Jabber ", + "Media" : "Midia", + "Polls" : "Kura", + "Deck cards" : "Kadi za Deck", + "Voice messages" : "Jumbe za sauti", + "Locations" : "Maeneo", + "Call recordings" : "Rekodi za simu", + "Audio" : "Sauti", + "Show all media" : "Onesha media zote", + "Show all files" : "Onesha faili zote", + "Show all polls" : "Onesha kura zote", + "Show all deck cards" : "Onesha kadi zote za deck", + "Show all voice messages" : "Onesha jumbe zote za sauti", + "Show all locations" : "Onesha maeneo yote", + "Show all call recordings" : "Onesha rekodi zote", + "Show all audio" : "Onesha sauti zote", + "Show all other" : "Onesha wengine wote", + "Follow conversation settings" : "Fuata mipangilio ya mazungumzo", + "Group" : "Kundi", + "Team" : "Timu", + "You reconnected to the call" : "Umeunganisha tena kwenye simu", + "{actor} reconnected to the call" : "{actor} ameunganishwa tena kwenye simu", + "You added {user0} and {user1}" : "Umeongeza {user0} na {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["You added {user0}, {user1} and %n more participant","Umeongeza {user0}, {user1} na washiriki %n zaidi"], + "An administrator added you and {user0}" : "Msimamizi alikuongeza wewe na {user0}", + "{actor} added you and {user0}" : "{actor} alikuongeza wewe na {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["An administrator added you, {user0} and %n more participant","Msimamizi alikuongeza wewe, {user0} na washiriki %n zaidi"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} added you, {user0} and %n more participant","{actor} alikuongeza wewe, {user0} na washiriki %n zaidi"], + "An administrator added {user0} and {user1}" : "Msimamizi ameongeza {user0} na {user1}", + "{actor} added {user0} and {user1}" : "{actor} aliongeza {user0} na {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["An administrator added {user0}, {user1} and %n more participant","Msimamizi aliongeza {user0}, {user1} na washiriki %n zaidi"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} added {user0}, {user1} and %n more participant","{actor} aliongeza {user0}, {user1} na washiriki %n zaidi"], + "You removed {user0} and {user1}" : "Umewaondoa {user0} na {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["You removed {user0}, {user1} and %n more participant","Umewaondoa {user0}, {user1} na washiriki %n zaidi"], + "An administrator removed you and {user0}" : "Msimamizi alikuondoa wewe na {user0}", + "{actor} removed you and {user0}" : "{actor} alikuondoa wewe na {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["An administrator removed you, {user0} and %n more participant","Msimamizi alikuondoa wewe, {user0} na washiriki %n zaidi"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} removed you, {user0} and %n more participant","{actor} alikuondoa wewe, {user0} na washiriki %n zaidi"], + "An administrator removed {user0} and {user1}" : "Msimamizi ameondoa {user0} na {user1}", + "{actor} removed {user0} and {user1}" : "{actor} ameondoa {user0} na {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["An administrator removed {user0}, {user1} and %n more participant","Msimamizi amewaondoa {user0}, {user1} na washiriki %n zaidi"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} removed {user0}, {user1} and %n more participant","{actor} amewaondoa {user0}, {user1} na washiriki %n zaidi"], + "You and {user0} joined the call" : "Wewe na {user0} mmejiunga kwenye simu", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["You, {user0} and %n more participant joined the call","Wewe, {user0} na washiriki %n zaidi walijiunga kwenye simu"], + "{user0} and {user1} joined the call" : "{user0} na {user1} walijiunga kwenye simu", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} and %n more participant joined the call","{user0}, {user1} na washiriki %n zaidi walijiunga kwenye simu"], + "You and {user0} left the call" : "Wewe na {user0} mmeacha simu", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["You, {user0} and %n more participant left the call","Wewe, {user0} na washiriki %n zaidi mmeacha simu"], + "{user0} and {user1} left the call" : "{user0} na {user1} waliacha simu", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} and %n more participant left the call","{user0}, {user1} na washiriki %n zaidi waliondoka kwenye simu"], + "You promoted {user0} and {user1} to moderators" : "Ulipandisha {user0} na {user1} kuwa wasimamizi", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["You promoted {user0}, {user1} and %n more participant to moderators","Ulipandisha {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "An administrator promoted you and {user0} to moderators" : "Msimamizi alikupandisha cheo wewe na {user0} kuwa wasimamizi", + "{actor} promoted you and {user0} to moderators" : "{actor} alikupandisha cheo wewe na {user0} kuwa wasimamizi", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["An administrator promoted you, {user0} and %n more participant to moderators","Msimamizi alikupandisha daraja wewe, {user0} na washiriki %n zaidi kuwa wasimamizi"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} promoted you, {user0} and %n more participant to moderators","{actor} alikupandisha cheo, {user0} na washiriki %n zaidi kuwa wasimamizi"], + "An administrator promoted {user0} and {user1} to moderators" : "Msimamizi aliwapandisha hadhi {user0} na {user1} kuwa wasimamizi", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} aliwapandisha hadhi {user0} na {user1} kuwa wasimamizi", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["An administrator promoted {user0}, {user1} and %n more participant to moderators","Msimamizi alikweza {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} promoted {user0}, {user1} and %n more participant to moderators","{actor} aliwapandisha hadhi {user0}, {user1} na washiriki %n zaidi kuwa wasimamizi"], + "You demoted {user0} and {user1} from moderators" : "Umeshusha {user0} na {user1} kutoka kwa wasimamizi", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["You demoted {user0}, {user1} and %n more participant from moderators","Umeshusha hadhi kwa {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "An administrator demoted you and {user0} from moderators" : "Msimamizi amekushusha wewe na {user0} kutoka kwa wasimamizi", + "{actor} demoted you and {user0} from moderators" : "{actor} amekushusha wewe na {user0} kutoka kwa wasimamizi", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["An administrator demoted you, {user0} and %n more participant from moderators","Msimamizi amekushusha cheo wewe, {user0} na washiriki %n zaidi kutoka kwa wasimamizi"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} demoted you, {user0} and %n more participant from moderators","{actor} amekushusha cheo wewe, {user0} na washiriki %n zaidi kutoka kwa wasimamizi"], + "An administrator demoted {user0} and {user1} from moderators" : "Msimamizi ameshusha hadhi {user0} na {user1} kutoka kwa wasimamizi", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} ameshusha daraja {user0} na {user1} kutoka kwa wasimamizi", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["An administrator demoted {user0}, {user1} and %n more participant from moderators","Msimamizi amewashusha daraja {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} demoted {user0}, {user1} and %n more participant from moderators","{actor} amewashusha daraja {user0}, {user1} na washiriki %n zaidi kutoka kwa wasimamizi"], + "You:" : "Wewe:", + "You: {lastMessage}" : "Wewe: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(imehaririwa na wewe)", + "(edited by a deleted user)" : "(imehaririwa na mtumiaji aliyefutwa)", + "(edited by {moderator})" : "(imeharirirwa na {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Unajaribu kujiunga na mazungumzo huku kipindi kinachoendelea kwenye dirisha au kifaa kingine. Hii kwa sasa haitumiki na Nextcloud Talk. Unataka kufanya nini?", + "Leave this page" : "Ondoka katika ukurasa huu", + "Join here" : "Jiunge hapa", + "Deck card has been posted to {conversation}" : "Kadi ya Deck imechapishwa {conversation}", + "An error occurred while posting deck card to conversation" : "Hitilafu ilitokea wakati wa kuchapisha kadi ya sitaha kwenye mazungumzo", + "Post to a conversation" : "Chapisha kwenye mazungumzo", + "Post to conversation" : "Chapisha kwenye mazungumzo", + "The recording failed. Please contact your administrator." : "Imeshindwa kurekodi. Tafadhali wasiliana na msimamizi wako.", + "Location has been posted to {conversation}" : "Mahali pamechapishwa {conversation}", + "An error occurred while posting location to conversation" : "Hitilafu ilitokea wakati wa kuchapisha eneo kwenye mazungumzo", + "Share to a conversation" : "Shiriki kwenye mazungumzo", + "Share to conversation" : "Shiriki kwenye mazungumzo", + "In conversation" : "Katika mazungumzo", + "Search in conversation: {conversation}" : "Tafuta katika mazungumzo {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Maombi yako yamezuiliwa kwa sasa kutokana na ulinzi wa nguvu za kikatili", + "Error while clearing conversation history" : "Hitilafu wakati wa kufuta historia ya mazungumzo", + "Error occurred while allowing guests" : "Hitilafu ilitokea wakati wa kuwaruhusu wageni", + "Error occurred while disallowing guests" : "Hitilafu ilitokea wakati wa kutowaruhusu wageni", + "Error occurred when restricting the conversation to moderator" : "Hitilafu ilitokea wakati wa kuzuia mazungumzo kuwa msimamizi", + "Error occurred when opening the conversation to everyone" : "Hitilafu ilitokea wakati wa kufungua mazungumzo kwa kila mtu", + "Conversation password has been saved" : "Nenosiri la mazungumzo limehifadhiwa", + "Conversation password has been removed" : "Nenosiri la mazungumzo limeondolewa", + "Error occurred while saving conversation password" : "Hitilafu ilitokea wakati wa kuhifadhi nenosiri la mazungumzo", + "Call recording is starting." : "Kurekodi simu kunaanza.", + "Call recording stopped while starting." : "Kurekodi simu kumesimamishwa wakati wa kuanza.", + "Call recording stopped. You will be notified once the recording is available." : "Kurekodi simu kumesimamishwa. Utaarifiwa mara rekodi itakapopatikana.", + "Conversation picture set" : "Picha ya mazungumzo imewekwa", + "Conversation picture deleted" : "Picha ya mazungumzo imefutwa", + "Could not delete the conversation picture" : "Haikuweza kufuta picha ya mazungumzo", + "Could not remove the automatic expiration" : "Haikuweza kuondoa muda wa kuisha kiotomatiki", + "Could not post message: {errorMessage}" : "Haikuweza kuchapisha ujumbe: {errorMessage}", + "Participant is banned successfully" : "Mshiriki amepigwa marufuku kwa mafanikio", + "Error while banning the participant" : "Hitilafu wakati wa kupiga marufuku mshiriki", + "An error occurred while fetching the participants" : "Hitilafu ilitokea wakati wa kuleta washiriki", + "Could not send invitation to {actorId}" : "Haikuweza kutuma mwaliko kwa {actorId}", + "Invitations sent" : "Mialiko imetumwa", + "Error occurred when sending invitations" : "Hitilafu ilitokea wakati wa kutuma mialiko", + "Failed to join the conversation." : "Imeshindwa kujiunga kwenye mazungumzo.", + "An error occurred while creating breakout rooms" : "Hitilafu imetokea wakati wa kuunda vyumba vya vipindi vifupi", + "An error occurred while re-ordering the attendees" : "Hitilafu ilitokea wakati wa kuagiza upya waliohudhuria", + "An error occurred while deleting breakout rooms" : "Hitilafu ilitokea wakati wa kufuta vyumba vya vipindi vifupi", + "An error occurred while starting breakout rooms" : "Hitilafu ilitokea wakati wa kuanzisha vyumba vya vipindi vifupi", + "An error occurred while stopping breakout rooms" : "Hitilafu ilitokea wakati wa kusimamisha vyumba vya vipindi vifupi", + "An error occurred while sending a message to the breakout rooms" : "Hitilafu ilitokea wakati wa kutuma ujumbe kwenye vyumba vya vipindi vifupi", + "An error occurred while requesting assistance" : "Hitilafu ilitokea wakati wa kuomba usaidizi", + "An error occurred while resetting the request for assistance" : "Hitilafu ilitokea wakati wa kuweka upya ombi la usaidizi", + "An error occurred while joining breakout room" : "Hitilafu ilitokea wakati wa kujiunga na chumba cha vipindi vifupi", + "Failed to rename the thread" : "Imeshindwa kubadilisha jina la mjadala", + "Error fetching upcoming events" : "Hitilafu katika kuleta matukio yajayo", + "Error fetching upcoming reminders" : "Hitilafu katika kuleta vikumbusho vijavyo", + "An error occurred while accepting an invitation" : "Hitilafu ilitokea wakati wa kukubali mwaliko", + "An error occurred while rejecting an invitation" : "Hitilafu ilitokea wakati wa kukataa mwaliko", + "{guest} (guest)" : "{guest} (mgeni)", + "Poll draft has been saved" : "Rasimu ya kura imehifadhiwa", + "An error occurred while saving the draft" : "Hitilafu imetokea wakati wa kuhifadhi rasimu", + "An error occurred while submitting your vote" : "Hitilafu ilitokea wakati wa kuwasilisha kura yako", + "An error occurred while ending the poll" : "Hitilafu ilitokea wakati wa kumalizia kura", + "An error occurred while deleting the poll draft" : "Hitilafu ilitokea wakati wa kufuta rasimu ya kura", + "Poll \"{name}\" was created by {user}. Click to vote" : "Kura ya \"{name}\" iliundwa na {user}. Bofya ili kupiga kura", + "Failed to add reaction" : "Imeshindwa kuongeza mwitikio", + "Failed to remove reaction" : "Imeshindwa kuondoa mwitikio", + "Error while uploading file \"{fileName}\"" : "Hitilafu wakati wa kupakia faili \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Hakuna nafasi ya kutosha ya kupakia faili \"{fileName}\"", + "You are not allowed to share files" : "Hauruhusiwi kushiriki faili", + "Error while sharing file" : "Hitilafu wakati wa kushirikisha faili", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Kivinjari unachotumia hakitumiki kikamilifu na Nextcloud Talk. Tafadhali tumia toleo jipya zaidi la Mozilla Firefox, Microsoft Edge, Google Chrome, Opera au Apple Safari.", + "_In %n hour_::_In %n hours_" : ["In %n hour","Katika %n masaa"], + "_%n minute _::_%n minutes_" : ["%n minute ","%ndakika "], + "In {hours} and {minutes}" : "Katika {hours} na {minutes}", + "_In %n minute_::_In %n minutes_" : ["In %n minute","Katika %n dakika"], + "Later today – {timeLocale}" : "Baadaye leo-{timeLocale}", + "Tomorrow – {timeLocale}" : "Kesho-{timeLocale}", + "This weekend – {timeLocale}" : "Wikendi-{timeLocale}", + "Next week – {timeLocale}" : "Wiki ijayo-{timeLocale}", + "Conversation link copied to clipboard" : "Kiungo cha mazungumzo kimenakiliwa kwenye ubao wa kunakili", + "The link could not be copied" : "Kiungo hakikuweza kunakiliwa", + "Error while parsing a PROPFIND error" : "Hitilafu wakati wa kuchanganua hitilafu ya PROPFIND", + "Sending signaling message has failed" : "Imeshindwa kutuma ujumbe wa kuashiria", + "Lost connection to signaling server. Trying to reconnect." : "Muunganisho umepoteza kwa seva ya kuashiria. Inajaribu kuunganisha tena.", + "Lost connection to signaling server." : "Muunganisho umepoteza kwa seva ya kuashiria.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Seva ya kuashiria iliyosanidiwa inahitaji kusasishwa ili iendane na toleo hili la Talk. Tafadhali wasiliana na utawala wako.", + "Please restart the app." : "Tafadhali anzisha upya programu.", + "Please reload the page." : "Tafadhali pakia ukurasa upya ", + "Please try to restart the app." : "Tafadhali jaribu kuanzisha upya programu.", + "Please try to reload the page." : "Tafadhali jaribu kupakia upya ukurasa.", + "Do not disturb" : "Acha kusumbua", + "Away" : "Mbali", + "Microphone {number}" : "Maikrofoni {number}", + "Camera {number}" : "Kamera {number}", + "Speaker {number}" : "Spika {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Unaonekana unaongea huku umenyamazishwa, tafadhali acha kunyamazisha ili wengine wakusikie", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Haikuweza kuanzisha muunganisho na angalau mshiriki mmoja. Seva ya TURN inaweza kuhitajika kwa hali yako. Tafadhali mwombe msimamizi wako aweke mipangilio kufuatia {linkstart}hati hizi{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Hii inachukua muda mrefu kuliko ilivyotarajiwa. Je, ruhusa za midia tayari zimetolewa (au zimekataliwa)? Ikiwa ndio, tafadhali anzisha kivinjari chako upya, kwani sauti na video hazifanyi kazi", + "Access to microphone & camera is only possible with HTTPS" : "Ufikiaji wa maikrofoni na kamera unawezekana tu kwa HTTPS", + "Please move your setup to HTTPS" : "Tafadhali hamishia usanidi wako hadi HTTPS", + "Access to microphone & camera was denied" : "Ufikiaji wa maikrofoni na kamera umekataliwa", + "WebRTC is not supported in your browser" : "WebRTC haitumiki katika kivinjari chako", + "Please use a different browser like Firefox or Chrome" : "Tafadhali tumia kivinjari tofauti kama Firefox au Chrome", + "Error while accessing microphone & camera" : "Hitilafu wakati wa kufikia maikrofoni na kamera", + "%s Talk on your mobile devices" : "%s Zungumza kwenye vifaa vyako vya mkononi", + "Join conversations at any time, anywhere, on any device." : "Jiunge na mazungumzo wakati wowote, mahali popote, kwenye kifaa chochote.", + "Android app" : "Programu ya Android", + "iOS app" : "Programu ya iOS", + "__language_name__" : "_lugha_jina_", + "Webhook Demo" : "Demo ya Webhook ", + "Call summary (%s)" : "Muhtasari wa simu (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Boti ya muhtasari wa simu huchapisha ujumbe wa muhtasari baada ya simu kuorodhesha washiriki wote na kuelezea majukumu", + "Tasks" : "Kazi", + "Notes" : "Madokezo", + "Reports" : "Taarifa", + "Decisions" : "Maamuzi", + "Agenda" : "Ajenda", + "Call summary" : "Muhtasari wa simu", + "Call summary - {title}" : "Muhtasari wa simu-{title}", + "Talk conversation for event" : "Mazungumzo ya Talk kwa tukio", + "Client Push is installed, this improves the performance of desktop clients." : "Msukumo wa Mteja umewekwa, hii inaboresha utendaji wa wateja wa eneo-kazi.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} haijasakinishwa, hii inaweza kusababisha matatizo ya utendakazi unapotumia wateja wa eneo-kazi.", + "Next meeting" : "Mkutano ujao", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Ratibu mkutano kutoka kwa kalenda yako. Mazungumzo ya Talk yanahitaji kuwekwa kama eneo ili kuonekana hapa", + "Join conversations from remote Nextcloud servers" : "Jiunge na mazungumzo kutoka kwa seva za mbali za Nextcloud", + "Your default media state has been saved" : "Hali yako chaguomsingi ya midia imehifadhiwa", + "Set reminder for later today" : "Weka kikumbusho cha baadaye leo", + "Set reminder for tomorrow" : "Weka kikumbusho cha kesho", + "Set reminder for this weekend" : "Weka kikumbusho cha wikendi hii", + "Set reminder for next week" : "Weka kikumbusho cha wiki ijayo", + "Generate summary" : "Tengeneza muhtasari", + "Open poll • You voted already" : "Kura ya wazi • Umeshapiga kura", + "Open poll • Click to vote" : "Fungua kura • Bofya kupiga kura", + "Poll • Ended" : "Kura ya maoni • Imeisha", + "Talk recording from {time} ({conversation})" : "Talk inarekodi kutoka {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Poll results • %n vote","Matokeo ya kura • kura %n"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Open poll • %n vote","Kura iliyofunguliwa • kura %n"], + "Submit vote" : "Wasilisha kura", + "Your privacy setting has been saved" : "Mipangilio yako ya faragha imehifadhiwa", + "Your personal setting has been saved" : "Mipangilio yako ya kibinafsi imehifadhiwa", + "Failed to save sounds setting" : "Imeshindwa kuhifadhi mpangilio wa sauti", + "Sounds setting saved" : "Mipangilio ya sauti imehifadhiwa", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk ilisasishwa, huwezi kuanzisha au kujiunga na simu.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ulijiunga kwenye mazungumzo kwenye dirisha au kifaa kingine. Hii kwa sasa haitumiki na Nextcloud Talk kwa hivyo kipindi hiki kilifungwa.", + "Nextcloud Talk was updated." : "Nextcloud Talk imesasishwa.", + "Nextcloud is in maintenance mode." : "Nextcloud iko katika hali ya matengenezo.", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation imesasishwa." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/th.js b/l10n/th.js new file mode 100644 index 0000000..d46999a --- /dev/null +++ b/l10n/th.js @@ -0,0 +1,136 @@ +OC.L10N.register( + "spreed", + { + "Other activities" : "กิจกรรมอื่น ๆ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ได้ตั้งค่า Matterbridge เพื่อซิงโครไนซ์การสนทนานี้กับแชทอื่น ๆ", + "You set up Matterbridge to synchronize this conversation with other chats" : "คุณได้ตั้งค่า Matterbridge เพื่อซิงโครไนซ์การสนทนานี้กับแชทอื่น ๆ", + "Message deleted by author" : "ข้อความถูกลบโดยผู้เขียน", + "System" : "ระบบ", + "File not found" : "ไม่พบไฟล์", + "File is too big" : "ไฟล์ใหญ่เกินไป", + "Invalid file provided" : "ไฟล์ที่ระบุไม่ถูกต้อง", + "Invalid image" : "รูปภาพไม่ถูกต้อง", + "Unknown filetype" : "ชนิดไฟล์ที่ไม่รู้จัก", + "Description" : "รายละเอียด", + "Dismiss notification" : "ปิดการแจ้งเตือน", + "Accept" : "ยอมรับ", + "Decline" : "ปฏิเสธ", + "Notification" : "การแจ้งเตือน", + "Open settings" : "เปิดการตั้งค่า", + "error" : "ข้อผิดพลาด", + "Default" : "ค่าเริ่มต้น", + "Presentation" : "งานนำเสนอ", + "Other" : "อื่น ๆ", + "Federation" : "ที่ติดต่อกับภายนอก", + "Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น ปปปป-ดด-วว", + "Conversation not found" : "ไม่พบการสนทนา", + "The password is wrong. Try again." : "รหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง", + "Password" : "รหัสผ่าน", + "Submit" : "ส่ง", + "Everyone" : "ทุกคน", + "Save changes" : "บันทึกการเปลี่ยนแปลง", + "Saving …" : "กำลังบันทึก …", + "Enabled" : "เปิดใช้งาน", + "Disabled" : "ปิดใช้งาน", + "Name" : "ชื่อ", + "All messages" : "ข้อความทั้งหมด", + "@-mentions only" : "เฉพาะการกล่าวถึงแบบ @", + "Enable encryption" : "เปิดใช้งานการเข้ารหัส", + "Pending" : "รอดำเนินการ", + "Error" : "ข้อผิดพลาด", + "Never" : "ไม่เคย", + "Language" : "ภาษา", + "Country" : "ประเทศ", + "Status" : "สถานะ", + "Created at" : "สร้างเมื่อ", + "Yes" : "ใช่", + "No" : "ไม่ตกลง", + "OK" : "ตกลง", + "Confirm" : "ยืนยัน", + "Reset" : "รีเซ็ต", + "Cancel" : "ยกเลิก", + "Back" : "ย้อนกลับ", + "Calendar" : "ปฏิทิน", + "Attendees" : "ผู้เข้าร่วมกิจกรรม", + "Save" : "บันทึก", + "No results" : "ไม่มีผลลัพธ์", + "Grid view" : "มุมมองแบบตาราง", + "Reload" : "โหลดใหม่", + "Copy link" : "คัดลอกลิงก์", + "Mute audio" : "ปิดเสียง", + "Unmute audio" : "เลิกปิดเสียง", + "None" : "ไม่มี", + "Check devices" : "ตรวจสอบอุปกรณ์", + "Collapse" : "ย่อ", + "Favorite" : "รายการโปรด", + "Hide details" : "ซ่อนข้อมูล", + "Show details" : "แสดงข้อมูล", + "Enter a name for this conversation" : "กรอกชื่อของการสนทนานี้", + "Disable" : "ปิดใช้งาน", + "Choose" : "เลือก", + "Restricted" : "ถูกจำกัด", + "Personal" : "ส่วนตัว", + "Password protection" : "ป้องกันด้วยรหัสผ่าน", + "Edit" : "แก้ไข", + "Delete" : "ลบ", + "Notifications" : "การแจ้งเตือน", + "Start meeting now" : "เริ่มการประชุมตอนนี้", + "Give your meeting a title" : "ตั้งชื่อการประชุมของคุณ", + "Create and copy link" : "สร้างและคัดลอกลิงค์", + "Create a new conversation" : "สร้างการสนทนาใหม่", + "Open calendar" : "เปิดปฏิทิน", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "ข้อความที่คุณถูกกล่าวถึงจะแสดงที่นี่ คุณสามารถกล่าวถึงผู้อื่นได้โดยการพิมพ์ @ ตามด้วยชื่อของพวกเขา", + "Log in" : "เข้าสู่ระบบ", + "Remove from favorites" : "เอาออกจากรายการโปรด", + "Add to favorites" : "เพิ่มในรายการโปรด", + "Home" : "หน้าหลัก", + "Alphabetically" : "ตัวอักษร", + "Users" : "ผู้ใช้", + "Groups" : "กลุ่ม", + "Devices" : "อุปกรณ์", + "Backgrounds" : "พื้นหลัง", + "Invalid path selected" : "เลือกเส้นทางไม่ถูกต้อง", + "Blur" : "เบลอ", + "Upload" : "อัปโหลด", + "Files" : "ไฟล์", + "Reply" : "ตอบกลับ", + "Translate" : "แปลภาษา", + "Dismiss" : "ปิดทิ้ง", + "Add participants" : "เพิ่มผู้เข้าร่วม", + "New file" : "ไฟล์ใหม่", + "Blank" : "ว่าง", + "Send" : "ส่ง", + "Settings" : "การตั้งค่า", + "Results" : "ผลลัพธ์", + "bot" : "บอต", + "guest" : "ผู้เยี่ยมชม", + "Remove" : "ลบออก", + "Add users or groups" : "เพิ่มผู้ใช้หรือกลุ่ม", + "Searching …" : "กำลังค้นหา …", + "Participants ({count})" : "ผู้เข้าร่วม ({count})", + "Chat" : "แชท", + "Details" : "รายละเอียด", + "Shared items" : "สิ่งที่แชร์", + "Load more results" : "โหลดผลลัพธ์เพิ่มเติม", + "Default language" : "ภาษาค่าเริ่มต้น", + "Privacy" : "ความเป็นส่วนตัว", + "Search" : "ค้นหา", + "Keep" : "เก็บ", + "User" : "ผู้ใช้", + "Login" : "เข้าสู่ระบบ", + "Nickname" : "ชื่อเล่น", + "Client ID" : "รหัสไคลเอ็นต์", + "Media" : "สื่อ", + "Locations" : "สถานที่", + "Audio" : "เสียง", + "Group" : "กลุ่ม", + "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", + "Do not disturb" : "ห้ามรบกวน", + "Away" : "ไม่อยู่", + "Android app" : "แอป Android", + "iOS app" : "แอป iOS", + "__language_name__" : "ไทย", + "Tasks" : "งาน", + "Notes" : "โน้ต" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/th.json b/l10n/th.json new file mode 100644 index 0000000..819df0b --- /dev/null +++ b/l10n/th.json @@ -0,0 +1,134 @@ +{ "translations": { + "Other activities" : "กิจกรรมอื่น ๆ", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} ได้ตั้งค่า Matterbridge เพื่อซิงโครไนซ์การสนทนานี้กับแชทอื่น ๆ", + "You set up Matterbridge to synchronize this conversation with other chats" : "คุณได้ตั้งค่า Matterbridge เพื่อซิงโครไนซ์การสนทนานี้กับแชทอื่น ๆ", + "Message deleted by author" : "ข้อความถูกลบโดยผู้เขียน", + "System" : "ระบบ", + "File not found" : "ไม่พบไฟล์", + "File is too big" : "ไฟล์ใหญ่เกินไป", + "Invalid file provided" : "ไฟล์ที่ระบุไม่ถูกต้อง", + "Invalid image" : "รูปภาพไม่ถูกต้อง", + "Unknown filetype" : "ชนิดไฟล์ที่ไม่รู้จัก", + "Description" : "รายละเอียด", + "Dismiss notification" : "ปิดการแจ้งเตือน", + "Accept" : "ยอมรับ", + "Decline" : "ปฏิเสธ", + "Notification" : "การแจ้งเตือน", + "Open settings" : "เปิดการตั้งค่า", + "error" : "ข้อผิดพลาด", + "Default" : "ค่าเริ่มต้น", + "Presentation" : "งานนำเสนอ", + "Other" : "อื่น ๆ", + "Federation" : "ที่ติดต่อกับภายนอก", + "Invalid date, date format must be YYYY-MM-DD" : "วันที่ไม่ถูกต้อง รูปแบบวันที่จะต้องเป็น ปปปป-ดด-วว", + "Conversation not found" : "ไม่พบการสนทนา", + "The password is wrong. Try again." : "รหัสผ่านไม่ถูกต้อง กรุณาลองอีกครั้ง", + "Password" : "รหัสผ่าน", + "Submit" : "ส่ง", + "Everyone" : "ทุกคน", + "Save changes" : "บันทึกการเปลี่ยนแปลง", + "Saving …" : "กำลังบันทึก …", + "Enabled" : "เปิดใช้งาน", + "Disabled" : "ปิดใช้งาน", + "Name" : "ชื่อ", + "All messages" : "ข้อความทั้งหมด", + "@-mentions only" : "เฉพาะการกล่าวถึงแบบ @", + "Enable encryption" : "เปิดใช้งานการเข้ารหัส", + "Pending" : "รอดำเนินการ", + "Error" : "ข้อผิดพลาด", + "Never" : "ไม่เคย", + "Language" : "ภาษา", + "Country" : "ประเทศ", + "Status" : "สถานะ", + "Created at" : "สร้างเมื่อ", + "Yes" : "ใช่", + "No" : "ไม่ตกลง", + "OK" : "ตกลง", + "Confirm" : "ยืนยัน", + "Reset" : "รีเซ็ต", + "Cancel" : "ยกเลิก", + "Back" : "ย้อนกลับ", + "Calendar" : "ปฏิทิน", + "Attendees" : "ผู้เข้าร่วมกิจกรรม", + "Save" : "บันทึก", + "No results" : "ไม่มีผลลัพธ์", + "Grid view" : "มุมมองแบบตาราง", + "Reload" : "โหลดใหม่", + "Copy link" : "คัดลอกลิงก์", + "Mute audio" : "ปิดเสียง", + "Unmute audio" : "เลิกปิดเสียง", + "None" : "ไม่มี", + "Check devices" : "ตรวจสอบอุปกรณ์", + "Collapse" : "ย่อ", + "Favorite" : "รายการโปรด", + "Hide details" : "ซ่อนข้อมูล", + "Show details" : "แสดงข้อมูล", + "Enter a name for this conversation" : "กรอกชื่อของการสนทนานี้", + "Disable" : "ปิดใช้งาน", + "Choose" : "เลือก", + "Restricted" : "ถูกจำกัด", + "Personal" : "ส่วนตัว", + "Password protection" : "ป้องกันด้วยรหัสผ่าน", + "Edit" : "แก้ไข", + "Delete" : "ลบ", + "Notifications" : "การแจ้งเตือน", + "Start meeting now" : "เริ่มการประชุมตอนนี้", + "Give your meeting a title" : "ตั้งชื่อการประชุมของคุณ", + "Create and copy link" : "สร้างและคัดลอกลิงค์", + "Create a new conversation" : "สร้างการสนทนาใหม่", + "Open calendar" : "เปิดปฏิทิน", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "ข้อความที่คุณถูกกล่าวถึงจะแสดงที่นี่ คุณสามารถกล่าวถึงผู้อื่นได้โดยการพิมพ์ @ ตามด้วยชื่อของพวกเขา", + "Log in" : "เข้าสู่ระบบ", + "Remove from favorites" : "เอาออกจากรายการโปรด", + "Add to favorites" : "เพิ่มในรายการโปรด", + "Home" : "หน้าหลัก", + "Alphabetically" : "ตัวอักษร", + "Users" : "ผู้ใช้", + "Groups" : "กลุ่ม", + "Devices" : "อุปกรณ์", + "Backgrounds" : "พื้นหลัง", + "Invalid path selected" : "เลือกเส้นทางไม่ถูกต้อง", + "Blur" : "เบลอ", + "Upload" : "อัปโหลด", + "Files" : "ไฟล์", + "Reply" : "ตอบกลับ", + "Translate" : "แปลภาษา", + "Dismiss" : "ปิดทิ้ง", + "Add participants" : "เพิ่มผู้เข้าร่วม", + "New file" : "ไฟล์ใหม่", + "Blank" : "ว่าง", + "Send" : "ส่ง", + "Settings" : "การตั้งค่า", + "Results" : "ผลลัพธ์", + "bot" : "บอต", + "guest" : "ผู้เยี่ยมชม", + "Remove" : "ลบออก", + "Add users or groups" : "เพิ่มผู้ใช้หรือกลุ่ม", + "Searching …" : "กำลังค้นหา …", + "Participants ({count})" : "ผู้เข้าร่วม ({count})", + "Chat" : "แชท", + "Details" : "รายละเอียด", + "Shared items" : "สิ่งที่แชร์", + "Load more results" : "โหลดผลลัพธ์เพิ่มเติม", + "Default language" : "ภาษาค่าเริ่มต้น", + "Privacy" : "ความเป็นส่วนตัว", + "Search" : "ค้นหา", + "Keep" : "เก็บ", + "User" : "ผู้ใช้", + "Login" : "เข้าสู่ระบบ", + "Nickname" : "ชื่อเล่น", + "Client ID" : "รหัสไคลเอ็นต์", + "Media" : "สื่อ", + "Locations" : "สถานที่", + "Audio" : "เสียง", + "Group" : "กลุ่ม", + "Please reload the page." : "โปรดโหลดหน้าเว็บใหม่", + "Do not disturb" : "ห้ามรบกวน", + "Away" : "ไม่อยู่", + "Android app" : "แอป Android", + "iOS app" : "แอป iOS", + "__language_name__" : "ไทย", + "Tasks" : "งาน", + "Notes" : "โน้ต" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/tr.js b/l10n/tr.js new file mode 100644 index 0000000..0e6503c --- /dev/null +++ b/l10n/tr.js @@ -0,0 +1,2234 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "bir görüşme", + "(Duration %s)" : "(Süre %s)", + "You attended a call with {user1}" : "{user1} ile bir çağrıya katıldınız", + "_%n guest_::_%n guests_" : ["%n konuk","%n konuk"], + "You attended a call with {user1} and {user2}" : "{user1} ve {user2} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}, {user2} ve {user3} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1}, {user2}, {user3} ve {user4} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile bir çağrıya katıldınız", + "_%n other_::_%n others_" : ["%n diğer","%n diğer"], + "{actor} invited you to {call}" : "{actor} sizi {call} için çağırdı", + "You were invited to a conversation or had a call" : "Bir görüşmeye davet edildiğinizde ya da bir davet aldığınızda", + "Other activities" : "Diğer işlemler", + "Talk" : "Konuş", + "Guest" : "Konuk", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud Konuş uygulamasına hoş geldiniz!\nBu görüşmede yeni Nextcloud Konuş özellikleri hakkında bilgilendirileceksiniz.", + "## New in Talk %s" : "## Konuş %s uygulamasındaki yenilikler", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Sesli ve görüntülü çağrılara katılmak için Microsoft Edge ve Safari kullanılabilir", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Bire bir görüşmeler artık kalıcı oldu ve bunların kazayla grup görüşmelerine dönüştürülmesi engellendi. Ayrıca artık katılımcılardan biri görüşmeden ayrıldığında, görüşme otomatik olarak silinmiyor. Görüşme ancak her iki katılımcı da ayrılırsa sunucudan siliniyor.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Artık sohbet sırasında \"@all\" yazarak tüm katılımcıları bilgilendirebilirsiniz", + "- With the \"arrow-up\" key you can repost your last message" : "- \"Yukarı ok\" tuşuyla son iletinizi çağırabilirsiniz", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Konuş üzerinde artık komutlar kullanılabilir, Yöneticinizin yapılandırdığı komutlar varsa \"/help\" yazıp göndererek sohbet iletisi olarak görebilirsiniz ", + "- With projects you can create quick links between conversations, files and other items" : "- Projeleri kullanarak görüşmeler, dosyalar ve diğer ögeler arasında hızlı bağlantılar oluşturabilirsiniz", + "- You can now mention guests in the chat" : "- Artık sohbetteki konukları anabilirsiniz", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Artık görüşmelerin bir girişi olabiliyor. Böylece kullanıcılar ve konuklar beklerken sorumlular önceden görüşmeye ya da çağrıya katılıp gerekli hazırlıkları yapabiliyor", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Artık diğer kullanıcılara iletinizin ne hakkında olduğu ile ilgili daha fazla bilgi vererek iletileri doğrudan yanıtlayabilirsiniz.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Artık görüşme ve katılımcı aramalarında var olan görüşmeleriniz de süzülür. Böylece yakın zamandaki görüşmeler daha kolay bulunabilir", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Takımlar uygulaması kurulduğunda görüşmelere özel kullanıcı grupları eklenebilir", + "- Check out the new grid and call view" : "- Yeni tablo ve çağrı görünümleri", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Artık dosyaları doğrudan aygıtınızdan sürükleyip bırakarak ya da yükleyerek sohbete aktarabilirsiniz", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Paylaşılan dosyalar artık doğrudan sohbet görünümünde görüntüleyici uygulamalar ile açılabilir", + "- You can now search for chats and messages in the unified search in the top bar" : "- Artık sohbet ve iletileri üst çubuktaki birleşik aramayı kullanarak arayabilirsiniz", + "- Spice up your messages with emojis from the emoji picker" : "- İletilerinizi emoji seçiciden ekleyeceğiniz emojiler ile zenginleştirin", + "- You can now change your camera and microphone while being in a call" : "- Artık bir çağrı sürerken kamera ve mikrofonunuzu değiştirebilirsiniz", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Görüşmelerinize bir açıklama ekleyerek kapsamını belirleyip açabilirsiniz. Böylece oturum açmış kullanıcılar görüşmeyi bularak kendi kendilerine katılabilir", + "- See a read status and send failed messages again" : "- Okunma durumunu görerek gönderilmeyen iletileri yeniden gönderebilirsiniz", + "- Raise your hand in a call with the R key" : "- Çağrılarda R tuşuna basarak el kaldırabilirsiniz", + "- Join the same conversation and call from multiple devices" : "- Aynı görüşmeye katılın ve çeşitli aygıtlardan çağrı yapın", + "- Send voice messages, share your location or contact details" : "- Sesli iletiler gönderin, konumunuzu veya iletişim bilgilerinizi paylaşın", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Bir görüşmeye gruplar ekleyin ve yeni grup üyelerinin otomatik olarak katılmasını sağlayın", + "- A preview of your audio and video is shown before joining a call" : "- Bir çağrıya katılmadan önce sesinizin ve görüntünüzün ön izlemesi sunulur", + "- You can now blur your background in the newly designed call view" : "- Artık yeni tasarlanmış çağrı görünümünde arka planınızı bulanıklaştırabilirsiniz", + "- Moderators can now assign general and individual permissions to participants" : "- Artık sorumlular katılımcılara genel ve kişisel izinler atayabilir", + "- You can now react to chat messages" : "- Artık sohbet iletilerine tepki verebilirsiniz", + "- In the sidebar you can now find an overview of the latest shared items" : "- Artık kenar çubuğunda son paylaşılan ögelerin özetini görebilirsiniz", + "- Use a poll to collect the opinions of others or settle on a date" : "- Başkalarının görüşlerini almak ya da bir tarih belirlemek için bir anket kullanın", + "- Configure an expiration time for chat messages" : "- Sohbet iletileri için bir geçerlilik süresi yapılandırın", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Büyük görüşmelerde bildirim göndermeden çağrı başlatın. Çağrı başladıktan sonra bireysel çağrı bildirimleri gönderebilirsiniz.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Acil değilse sohbet iletilerine alıcılara bildirim olmadan gönderin", + "- Emojis can now be autocompleted by typing a \":\"" : "- \".\" yazarak emojiler otomatik olarak tamamlanabilir", + "- Link various items using the new smart-picker by typing a \"/\"" : "- \"/\" yazarak yeni akıllı seçici ile çeşitli ögeler bağlanabilir", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Sorumlular çalışma odaları oluşturabilir (yüksek başarımlı arka yüz gereklidir)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Çağrılar kaydedilebilir (yüksek başarımlı arka yüz gereklidir)", + "- Conversations can now have an avatar or emoji as icon" : "- Görüşmelerde artık simge olarak bir avatar ya da emoji kullanılabilir", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Görüntülü aramalarda bulanık arka planın yanında artık sanal arka planlar da kullanılabilir", + "- Reactions are now available during calls" : "- Artık aramalarda tepkiler kullanılabilir", + "- Typing indicators show which users are currently typing a message" : "- Yazma göstergeleri, o anda hangi kullanıcıların ileti yazdığını gösterir", + "- Groups can now be mentioned in chats" : "- Artık sohbetlerde gruplar anılabilir", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Bir yazı dönüştürme hizmeti ayarlandıysa arama kayıtları otomatik olarak yazıya dönüştürülür", + "- Chat messages can be translated if a translation provider app is registered" : "- Bir çeviri hizmeti ayarlandıysa sohbet iletileri başka dile çevrilebilir", + "- **Markdown** can now be used in _chat_ messages" : "- _chat_ iletilerinde artık **markdown** kullanılabilir", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- İnternet kancaları artık botları uygulamak için kullanılabilir. Ayrıntılı bilgi almak için https://nextcloud-talk.readthedocs.io/en/latest/bot-list/ adresine bakabilirsiniz", + "- Set a reminder on a chat message to be notified later again" : "- Daha sonra yeniden bilgilendirilmek için bir sohbet iletisine bir anımsatıcı ayarlayın", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Aygıtlarınız arasında not almak ve bilgi paylaşmak için **Kendime not** yazışmasını kullanın", + "- Captions allow to send a message with a file at the same time" : "- Alt yazılar aynı anda bir dosyayla birlikte bir ileti göndermeyi sağlar", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Artık ekran paylaşılırken konuşmacının görüntüsü görülebiliyor ve çağrı tepkileri canlandırılıyor", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- İletilerin oturum açmış yazarlar ve sorumlular tarafından ilk 6 saat içinde düzenlenebilmesi sağlandı", + "- Unsent message drafts are now saved in your browser" : "- Gönderilmemiş ileti taslaklarının tarayıcınıza kaydedilmesi sağlandı", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Yazılı sohbetlerin diğer Konuş sunucularıyla birleşik olarak yapılabilmesi sağlandı", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Sorumlular artık hesapları ve misafirleri yasaklayarak bir görüşmeye yeniden katılmalarını önleyebilir", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Görüşmelerde bağlantılı takvim etkinliklerinden gelen çağrıların ve ofis dışındayken yedek kişilerin görüntülenmesi sağlandı", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Çağrıların diğer Konuş sunucularıyla birleşik olarak yapılabilmesi sağlandı (yüksek başarımlı arka yüz gereklidir)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows, macOS ve Linux için Nextcloud Konuş bilgisayar istemcisini sunarız: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud Yardımcı ile sohbetlerdeki çağrı kayıtlarını ve okunmamış iletileri özetleyin", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Toplantılar, e-posta adresleri ile davet edilen misafirleri tanıma, katılımcı listelerini içe aktarma, anketler için taslaklar ve çağrı katılımcı listelerinin indirilmesiyle iyileştirildi", + "- Archive conversations to stay focused" : "- Odaklanmak için görüşmeleri arşivleyin", + "- Schedule a meeting into your calendar from within a conversation" : "- Bir görüşmenin içinden takviminizde bir toplantı zamanlayın", + "- Search for messages of the current conversation directly in the right sidebar" : "- Geçerli görüşmenin iletilerini doğrudan sağ kenar çubuğunda arayın", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Yeni küçük listeyle daha fazla görüşmeyi bir kerede görün (Konuş ayarlarından açın)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Toplantı görüşmelerinin artık takvimdeki başlıkları ve açıklamaları eşitleniyor ve başlangıç zamanları yaklaşana kadar bunlar bir arama süzgeciyle gizleniyor", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- İleti içeriğini görüşme listesinden ve bildirimlerden gizlemek için bildirim ayarlarında konuşmaları ciddi olarak işaretleyebilirsiniz", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- \"Rahatsız etmeyin\" durumunda anlık bildirimleri almak için görüşmeleri önemli olarak işaretleyebilirsiniz", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Anında yeni bir grup görüşmesi oluşturmak için bire bir görüşmeye başka katılımcılar ekleyin", + "- Use threads to keep your chat and discussions organized" : "- Sohbetlerinizi ve tartışmalarınızı düzenli tutmak için yazışmaları kullanın", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Arama sırasında artık canlı yazıya dönüştürme kullanılabilir (canlı yazıya dönüştürme ExApp ve Yüksek başarımlı arka uç gereklidir)", + "- Moderators can now pin messages so they are kept at the top" : "- Sorumlular artık iletileri sabitleyerek en üstte kalmalarını sağlayabilir", + "- Schedule a message to send it at a later time" : "- Bir iletiyi daha sonra gönderilmek üzere planlayın", + "_All %n participant_::_All %n participants_" : ["Tüm %n katılımcı","Tüm %n katılımcı"], + "Talk updates ✅" : "Konuş güncellemeleri ✅", + "Reaction deleted by author" : "Tepki yazarı tarafından silindi", + "{actor} created the conversation" : "{actor} görüşme ekledi", + "You created the conversation" : "Görüşme eklediniz", + "System created the conversation" : "Sistem görüşme ekledi", + "An administrator created the conversation" : "Bir yönetici görüşme ekledi", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}, görüşmenin \"%1$s\" olan adını \"%2$s\" olarak değiştirdi", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "\"%1$s\" görüşmesinin adını \"%2$s\" olarak değiştirdiniz", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Bir yönetici, görüşmenin \"%1$s\" olan adını \"%2$s\" olarak değiştirdi", + "{actor} set the description" : "{actor} açıklamayı ayarladı", + "You set the description" : "Açıklamayı ayarladınız", + "An administrator set the description" : "Bir yönetici açıklamayı ayarladı", + "{actor} removed the description" : "{actor} açıklamayı kaldırdı", + "You removed the description" : "Açıklamayı kaldırdınız", + "An administrator removed the description" : "Bir yönetici açıklamayı kaldırdı", + "You started a silent call" : "Bir sessiz çağrı başlattınız", + "Outgoing silent call" : "Giden sessiz çağrı", + "{actor} started a silent call" : "{actor} bir sessiz çağrı başlattı", + "Incoming silent call" : "Gelen sessiz çağrı", + "You started a call" : "Bir çağrı başlattınız", + "Outgoing call" : "Giden çağrı", + "{actor} started a call" : "{actor} bir çağrı başlattı", + "Incoming call" : "Gelen çağrı", + "{actor} joined the call" : "{actor} çağrıya katıldı", + "You joined the call" : "Bir çağrıya katıldınız", + "{actor} left the call" : "{actor} çağrıdan ayrıldı", + "You left the call" : "Bir çağrıdan ayrıldınız", + "{actor} unlocked the conversation" : "{actor} görüşmenin kilidini açtı", + "You unlocked the conversation" : "Görüşmenin kilidini açtınız", + "An administrator unlocked the conversation" : "Bir yönetici görüşmenin kilidini açtı", + "{actor} locked the conversation" : "{actor} görüşmeyi kilitledi", + "You locked the conversation" : "Görüşmeyi kilitlediniz", + "An administrator locked the conversation" : "Bir yönetici görüşmeyi kilitledi", + "{actor} limited the conversation to the current participants" : "{actor} görüşmeyi geçerli katılımcılar ile kısıtladı", + "You limited the conversation to the current participants" : "Görüşmeyi geçerli katılımcılar ile kısıtladınız", + "An administrator limited the conversation to the current participants" : "Bir yönetici görüşmeyi geçerli katılımcılar ile kısıtladı", + "{actor} opened the conversation to registered users" : "{actor} görüşmeyi hesabı olan kullanıcılara açtı", + "You opened the conversation to registered users" : "Görüşmeyi hesabı olan kullanıcılara açtınız", + "An administrator opened the conversation to registered users" : "Bir yönetici görüşmeyi hesabı olan kullanıcılara açtı", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtı", + "You opened the conversation to registered users and users created with the Guests app" : "Görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtınız", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Bir yönetici görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtı", + "The conversation is now open to everyone" : "Görüşme şu anda herkese açık", + "{actor} opened the conversation to everyone" : "{actor} görüşmeyi herkese açtı", + "You opened the conversation to everyone" : "Görüşmeyi herkese açtınız", + "{actor} restricted the conversation to moderators" : "{actor} görüşmeyi sorumlular ile kısıtladı", + "You restricted the conversation to moderators" : "Görüşmeyi sorumlular ile kısıtladınız", + "{actor} started breakout rooms" : "{actor} çalışma odalarını açtı", + "You started breakout rooms" : "Çalışma odalarını açtınız", + "{actor} stopped breakout rooms" : "{actor} çalışma odalarını kapattı", + "You stopped breakout rooms" : "Çalışma odalarını kapattınız", + "{actor} allowed guests" : "{actor} konukların katılmasına izin verdi", + "You allowed guests" : "Konukların katılmasına izin verdiniz", + "An administrator allowed guests" : "Bir yönetici konukların katılmasına izin verdi", + "{actor} disallowed guests" : "{actor} konukların katılmasını engelledi", + "You disallowed guests" : "Konukların katılmasını engellediniz", + "An administrator disallowed guests" : "Bir yönetici konukların katılmasını engelledi", + "{actor} set a password" : "{actor} bir parola atadı", + "You set a password" : "Bir parola atadınız", + "An administrator set a password" : "Bir yönetici bir parola atadı", + "{actor} removed the password" : "{actor} parolayı kaldırdı", + "You removed the password" : "Parolayı kaldırdınız", + "An administrator removed the password" : "Bir yönetici parolayı kaldırdı", + "{actor} added {user}" : "{actor}, {user} kullanıcısını ekledi", + "You joined the conversation" : "Görüşmeye katıldınız", + "{actor} joined the conversation" : "{actor} görüşmeye katıldı", + "You added {user}" : "{user} kullanıcısını eklediniz", + "{actor} added you" : "{actor} sizi ekledi", + "An administrator added you" : "Bir yönetici sizi ekledi", + "An administrator added {user}" : "Bir yönetici, {user} kullanıcısını ekledi", + "You left the conversation" : "Görüşmeden ayrıldınız", + "{actor} left the conversation" : "{actor} görüşmeden ayrıldı", + "{actor} removed {user}" : "{actor}, {user} kullanıcısını çıkardı", + "You removed {user}" : "{user} kullanıcısını çıkardınız", + "{actor} removed you" : "{actor} sizi çıkardı", + "An administrator removed you" : "Bir yönetici sizi çıkardı", + "An administrator removed {user}" : "Bir yönetici, {user} kullanıcısını çıkardı", + "{actor} invited {federated_user}" : "{actor}, {federated_user} kullanıcısını davet etti", + "You invited {federated_user}" : "{federated_user} kullanıcısını davet ettiniz", + "You accepted the invitation" : "Daveti kabul ettiniz", + "{actor} invited you" : "{actor} sizi davet etti", + "An administrator invited you" : "Bir yönetici sizi davet etti", + "An administrator invited {federated_user}" : "Bir yönetici, {federated_user} kullanıcısını davet etti", + "{federated_user} accepted the invitation" : "{federated_user} daveti kabul etti", + "{actor} removed {federated_user}" : "{actor}, {federated_user} kullanıcısını çıkardı", + "You removed {federated_user}" : "{federated_user} kullanıcısını çıkardınız", + "You declined the invitation" : "Daveti reddettiniz", + "An administrator removed {federated_user}" : "Bir yönetici, {federated_user} kullanıcısını çıkardı", + "{federated_user} declined the invitation" : "{federated_user} daveti reddetti", + "{actor} added group {group}" : "{actor}, group} grubunu ekledi", + "You added group {group}" : "{group} grubunu eklediniz", + "An administrator added group {group}" : "Bir yönetici {group} grubunu ekledi", + "{actor} removed group {group}" : "{actor}, {group} grubunu sildi", + "You removed group {group}" : "{group} grubunu sildiniz", + "An administrator removed group {group}" : "Bir yönetici {group} grubunu sildi", + "{actor} added team {circle}" : "{actor}, {circle} takımını ekledi", + "You added team {circle}" : "{circle} takımını eklediniz", + "An administrator added team {circle}" : "Bir yönetici {circle} takımını ekledi", + "{actor} removed team {circle}" : "{actor}, {circle} takımını ekledi", + "You removed team {circle}" : "{circle} takımını eklediniz", + "An administrator removed team {circle}" : "Bir yönetici {circle} takımını sildi", + "{actor} added {phone}" : "{actor}, {phone} numarasını ekledi", + "You added {phone}" : "{phone} numarasını eklediniz", + "An administrator added {phone}" : "Bir yönetici {phone} numarasını ekledi", + "{actor} removed {phone}" : "{actor}, {phone} numarasını kaldırdı", + "You removed {phone}" : "{phone} numarasını kaldırdınız", + "An administrator removed {phone}" : "Bir yönetici {phone} numarasını kaldırdı", + "{actor} promoted {user} to moderator" : "{actor}, {user} kullanıcısını sorumluluğa yükseltti", + "You promoted {user} to moderator" : "{user} kullanıcısını sorumluluğa yükselttiniz", + "{actor} promoted you to moderator" : "{actor} sizi sorumluluğa yükseltti", + "An administrator promoted you to moderator" : "Bir yönetici sizi sorumluluğa yükseltti", + "An administrator promoted {user} to moderator" : "Bir yönetici, {user} kullanıcısını sorumluluğa yükseltti", + "{actor} demoted {user} from moderator" : "{actor}, {user} kullanıcısını sorumluluktan çıkardı", + "You demoted {user} from moderator" : "{user} kullanıcısını sorumluluktan çıkardınız", + "{actor} demoted you from moderator" : "{actor}, sizi sorumluluktan çıkardı", + "An administrator demoted you from moderator" : "Bir yönetici, sizi sorumluluktan çıkardı", + "An administrator demoted {user} from moderator" : "Bir yönetici, {user} kullanıcısını sorumluluktan çıkardı", + "{actor} shared a file which is no longer available" : "{actor} artık kullanılamayan bir dosya paylaştı", + "You shared a file which is no longer available" : "Artık kullanılamayan bir dosya paylaştınız", + "File shares are currently not supported in federated conversations" : "Şu anda birleşik görüşmelerde dosya paylaşımı desteklenmiyor", + "The shared location is malformed" : "Paylaşılmış konum biçimi hatalı", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} bu görüşmeyi diğer sohbetler ile eşitlemek için Matterbridge kurulumu yaptı", + "You set up Matterbridge to synchronize this conversation with other chats" : "Bu görüşmeyi diğer sohbetler ile eşitlemek için Matterbridge kurulumu yaptınız", + "{actor} created thread {title}" : "{actor}, {title} yazışmasını oluşturdu", + "You created thread {title}" : "{title} yazışmasını oluşturdunuz", + "{actor} renamed thread {title}" : "{actor}, {title} yazışmasını yeniden adlandırdı", + "You renamed thread {title}" : "{title} yazışmasını yeniden adlandırdınız", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge yapılandırmasını güncelledi", + "You updated the Matterbridge configuration" : "Matterbridge yapılandırmasını güncellediniz", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge yapılandırmasını sildi", + "You removed the Matterbridge configuration" : "Matterbridge yapılandırmasını sildiniz", + "{actor} started Matterbridge" : "{actor} Matterbridge uygulamasını başlattı", + "You started Matterbridge" : "Matterbride uygulamasını başlattınız", + "{actor} stopped Matterbridge" : "{actor} Matterbridge uygulamasını durdurdu", + "You stopped Matterbridge" : "Matterbride uygulamasını durdurdunuz", + "{actor} deleted a message" : "{actor} bir iletiyi sildi", + "You deleted a message" : "Bir iletiyi sildiniz", + "{actor} edited a message" : "{actor} bir iletiyi düzenledi", + "You edited a message" : "Bir iletiyi düzenlediniz", + "{actor} pinned a message" : "{actor} bir iletiyi sabitledi", + "You pinned a message" : "Bir iletiyi sabitlediniz", + "{actor} unpinned a message" : "{actor} bir iletinin sabitlemesini kaldırdı", + "Message was automatically unpinned" : "İletinin sabitlemesi otomatik olarak kaldırıldı", + "You unpinned a message" : "Bir iletinin sabitlemesini kaldırdınız", + "{actor} deleted a reaction" : "{actor} bir tepkiyi sildi", + "You deleted a reaction" : "Bir tepkiyi sildiniz", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["İletinin geçerlilik süresini %n hafta olarak ayarladınız","İletinin geçerlilik süresini %n hafta olarak ayarladınız"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["İletinin geçerlilik süresini %n gün olarak ayarladınız","İletinin geçerlilik süresini %n gün olarak ayarladınız"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["İletinin geçerlilik süresini %n saat olarak ayarladınız","İletinin geçerlilik süresini %n saat olarak ayarladınız"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["İletinin geçerlilik süresini %n dakika olarak ayarladınız","İletinin geçerlilik süresini %n dakika olarak ayarladınız"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} iletinin geçerlilik süresini %n hafta olarak ayarladı","{actor} iletinin geçerlilik süresini %n hafta olarak ayarladı"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} iletinin geçerlilik süresini %n gün olarak ayarladı","{actor} iletinin geçerlilik süresini %n gün olarak ayarladı"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} iletinin geçerlilik süresini %n saat olarak ayarladı","{actor} iletinin geçerlilik süresini %n saat olarak ayarladı"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} iletinin geçerlilik süresini %n dakika olarak ayarladı","{actor} iletinin geçerlilik süresini %n dakika olarak ayarladı"], + "{actor} disabled message expiration" : "{actor} ileti geçerlilik süresini kapattı", + "You disabled message expiration" : "İleti geçerlilik süresini kapattınız", + "{actor} cleared the history of the conversation" : "{actor} görüşme geçmişini sildi", + "You cleared the history of the conversation" : "Görüşme geçmişini sildiniz", + "{actor} set the conversation picture" : "{actor} görüşme görselini ayarladı", + "You set the conversation picture" : "Görüşme görselini ayarladınız", + "{actor} removed the conversation picture" : "{actor} görüşme görselini kaldırdı", + "You removed the conversation picture" : "Görüşme görselini kaldırdınız", + "{actor} ended the poll {poll}" : "{actor}, {poll} anketini sona erdirdi.", + "You ended the poll {poll}" : "{poll} anketini sona erdirdiniz", + "{actor} started the video recording" : "{actor} görüntü kaydını başlattı", + "You started the video recording" : "Görüntü kaydını başlattınız", + "{actor} stopped the video recording" : "{actor} görüntü kaydını bitirdi", + "You stopped the video recording" : "Görüntü kaydını bitirdiniz", + "{actor} started the audio recording" : "{actor} ses kaydını başlattı", + "You started the audio recording" : "Ses kaydını başlattınız", + "{actor} stopped the audio recording" : "{actor} ses kaydını bitirdi", + "You stopped the audio recording" : "Ses kaydını bitirdiniz", + "The recording failed" : "Kayıt yapılamadı", + "Someone voted on the poll {poll}" : "Birisi {poll} anketinde oy verdi", + "Message deleted by author" : "İleti yazarı tarafından silindi", + "Message deleted by {actor}" : "İleti {actor} tarafından silindi", + "Message deleted by you" : "İleti sizin tarafınızdan silindi", + "Deleted user" : "Kullanıcıyı sildi ", + "Unknown number" : "Numara bilinmiyor", + "Administration" : "Yönetim", + "System" : "Sistem", + "%s (guest)" : "%s (konuk)", + "Missed call" : "Yanıtsız çağrı", + "Unanswered call" : "Yanıtlanmamış çağrı", + "Call ended (Duration {duration})" : "Çağrı sonlandırıldı (Süre {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Çağrı, en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} çağrıyı sonlandırdı (Süre {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n konuk bulunan çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})","%n konuk bulunan çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n konuk ile çağrı sonlandırıldı (Süre {duration})","%n konuk ile çağrı sonlandırıldı (Süre {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor}, %n konukla çağrıyı sonlandırdı (Süre {duration})","{actor}, %n konukla çağrıyı sonlandırdı (Süre {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor}, {user1} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ve {user2} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} ve {user2} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor}, {user1} ve {user2} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2} ve {user3} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1}, {user2} ve {user3} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor}, {user1}, {user2} ve {user3} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3} ve {user4} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1}, {user2}, {user3} ve {user4} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor}, {user1}, {user2}, {user3} ve {user4} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor}, {user1}, {user2}, {user3}, {user4} ve {user5} ile çağrıyı sonlandırdı (Süre {duration})", + "Message of {user} in {conversation}" : "{conversationName} görüşmesinde {user} iletisi", + "Message of {user}" : "{user} iletisi", + "Message of a deleted user in {conversation}" : "{conversationName} görüşmesinde silinmiş bir kullanıcının iletisi", + "Talk conversations" : "Konuş görüşmeleri", + "Talk to %s" : "%s ile Konuş", + "An error occurred. Please contact your administrator." : "Bir sorun çıktı. Lütfen BT yöneticiniz ile görüşün.", + "Storage quota exceeded" : "Depolama sınırına ulaşıldı", + "File not found" : "Dosya bulunamadı", + "File is not shared, or shared but not with the user" : "Dosya paylaşılmamış ya da paylaşılmış ancak kullanıcı ile değil.", + "No account available to delete." : "Silinebilecek bir hesap yok.", + "Poll" : "Anket", + "Password needs to be set" : "Parola ayarlanmalıdır", + "Uploading the file failed" : "Dosya yüklenemedi", + "No image file provided" : "Bir görsel dosyası belirtilmemiş", + "File is too big" : "Dosya çok büyük", + "Invalid file provided" : "Belirtilen dosya geçersiz", + "Invalid image" : "Görsel geçersiz", + "Unknown filetype" : "Dosya türü bilinmiyor", + "Talk mentions" : "Konuş anmaları", + "More conversations" : "Diğer görüşmeler", + "Say hi to your friends and colleagues!" : "Tanıdık ve çalışma arkadaşlarınıza selam verin!", + "No unread mentions" : "Okunmamış bir anma yok", + "Call in progress" : "Çağrı sürüyor", + "You were mentioned" : "Anıldınız", + "Write to conversation" : "Görüşmeye yaz", + "Writes event information into a conversation of your choice" : "Etkinlik bilgilerini isteğinize göre bir görüşmeye yazar", + "Missing email field in header line" : "Başlık satırında e-posta alanı eksik", + "Following lines are invalid: %s" : "Şu satırlar geçersiz: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s sizi \"%2$s\" görüşmesine davet etti.", + "You were invited to conversation \"%s\"." : "\"%s\" görüşmesine davet edildiniz.", + "Conversation invitation" : "Görüşme daveti", + "Scheduled time" : "Planmış zaman", + "Description" : "Açıklama", + "You can also dial-in via phone with the following details" : "Ayrıca şu bilgileri kullanarak telefon ile arayabilirsiniz", + "Dial-in information" : "Çevirme bilgileri", + "Meeting ID" : "Toplantı kimliği", + "Your PIN" : "PIN numaranız", + "Click the button below to join the lobby now." : "Girişte beklemek için aşağıdaki düğmeye tıklayın.", + "Click the link below to join the lobby now." : "Girişte beklemek için aşağıdaki bağlantıya tıklayın.", + "Join lobby for \"%s\"" : "\"%s\" girişinde bekleyin", + "Click the button below to join the conversation now." : "Görüşmeye katılmak için aşağıdaki düğmeye tıklayın.", + "Click the link below to join the conversation now." : "Görüşmeye katılmak için aşağıdaki bağlantıya tıklayın.", + "Join \"%s\"" : "\"%s\" görüşmesine katıl", + "Meeting" : "Toplantı", + "Password request: %s" : "Parola isteği: %s", + "Private conversation" : "Özel görüşme", + "Deleted user (%s)" : "Silinmiş kullanıcı (%s)", + "Failed to upload call recording" : "Çağrı kaydı yüklenemedi", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Kayıt sunucusu {call} çağrısının kaydını yüklemedi. Lütfen yönetim ile görüşün.", + "Share to chat" : "Sohbet ile paylaş", + "Dismiss notification" : "Bildirimi yok say", + "Call recording now available" : "Çağrı kaydedilebilir", + "The recording for the call in {call} was uploaded to {file}." : "{call} çağrısının kaydı {file} dosyasına yüklendi.", + "Transcript now available" : "Çağrıyı yazıya dönüştürme kullanılabilir", + "The transcript for the call in {call} was uploaded to {file}." : "{call} çağrısı yazıya dönüştürüldü ve {file} dosyasına yüklendi.", + "Failed to transcript call recording" : "Çağrı kaydı yazıya dönüştürülemedi", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Sunucu {call} çağrısının kaydını {file} yazıya dönüştüremedi. Lütfen yönetim ile görüşün.", + "Call summary now available" : "Çağrı özeti kullanılabilir", + "The summary for the call in {call} was uploaded to {file}." : "{call} çağrısının özeti {file} dosyasına yüklendi.", + "Failed to summarize call recording" : "Çağrı kaydı özetlenemedi", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Sunucu {call} çağrısının kaydından {file} özet dosyasını oluşturamadı. Lütfen yönetim ile görüşün.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} sizi {remoteServer} üzerindeki {roomName} grubuna katılmaya davet etti", + "Accept" : "Kabul et", + "Decline" : "Reddet", + "{user1} invited you to a federated conversation" : "{user} sizi bir birleşik görüşmeye davet etti", + "Someone reacted" : "Biri tepki verdi ", + "New message" : "Yeni ileti", + "Reminder" : "Anımsatıcı", + "Someone mentioned you" : "Biri sizi andı", + "Notification" : "Bildirim", + "Someone reacted in a private conversation" : "Biri özel bir görüşmede tepki verdi", + "You received a message in a private conversation" : "Bir özel görüşmede bir ileti aldınız", + "Reminder in a private conversation" : "Özel bir görüşmede anımsatıcı", + "Someone mentioned you in a private conversation" : "Biri özel bir görüşmede sizi andı", + "Notification in a private conversation" : "Özel bir görüşmede bildirim", + "Reminder: You in {call}" : "Anımsatma: {call} görüşmesindesiniz", + "Reminder: {user} in {call}" : "Anımsatma: {user}, {call} görüşmesinde", + "Reminder: Deleted user in {call}" : "Anımsatma: Silinmiş kullanıcı {call} görüşmesinde", + "Reminder: {guest} (guest) in {call}" : "Anımsatma: {guest} (konuk) {call} görüşmesinde", + "Reminder: Guest in {call}" : "Anımsatma: Konuk {call} görüşmesinde", + "{user} reacted with {reaction}" : "{user}, {reaction} tepkisini verdi", + "{user} reacted with {reaction} in {call}" : "{user}, {call} çağrısında {reaction} tepkisini verdi", + "Deleted user reacted with {reaction} in {call}" : "Silinmiş kullanıcı {call} çağrısında {reaction} tepkisini verdi", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (konuk), {call} çağrısında {reaction} tepkisini verdi", + "Guest reacted with {reaction} in {call}" : "Konuk, {call} çağrısında {reaction} tepkisini verdi", + "{user} in {call}" : "{call} içinde {user}", + "Deleted user in {call}" : "{call} içinden kullanıcı silindi", + "{guest} (guest) in {call}" : "{call} içinde {guest} (konuk)", + "Guest in {call}" : "{call} içinde konuk", + "{user} sent you a private message" : "{user} size kişisel bir ileti gönderdi", + "{user} sent a message in conversation {call}" : "{user}, {call} görüşmesine bir ileti gönderdi", + "A deleted user sent a message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesine bir ileti gönderdi", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (konuk) {call} görüşmesine bir ileti gönderdi", + "A guest sent a message in conversation {call}" : "Bir konuk {call} görüşmesine bir ileti gönderdi", + "{user} replied to your private message" : "{user} kişisel iletinizi yanıtladı", + "{user} replied to your message in conversation {call}" : "{user} iletinizi {call} görüşmesinde yanıtladı", + "A deleted user replied to your message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesinde iletinizi yanıtladı", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (konuk) {call} görüşmesindeki bir iletiyi yanıtladı", + "A guest replied to your message in conversation {call}" : "Bir konuk {call} görüşmesinde iletinizi yanıtladı", + "Reminder: You in private conversation {call}" : "Anımsatma: {call} özel görüşmesindesiniz", + "Reminder: A deleted user in private conversation {call}" : "Anımsatma: Silinmiş bir kullanıcı {call} özel görüşmesinde", + "Reminder: {user} in private conversation" : "Anımsatma: {user} özel görüşmede", + "Reminder: You in conversation {call}" : "Anımsatma: {call} görüşmesindesiniz", + "Reminder: {user} in conversation {call}" : "Anımsatma: {user}, {call} görüşmesinde", + "Reminder: A deleted user in conversation {call}" : "Anımsatma: Silinmiş bir kullanıcı {call} görüşmesinde", + "Reminder: {guest} (guest) in conversation {call}" : "Anımsatma: {guest} (konuk) {call} görüşmesinde", + "Reminder: A guest in conversation {call}" : "Anımsatma: Bir konuk {call} görüşmesinde", + "{user} reacted with {reaction} to your private message" : "{user}, kişisel iletinizi {reaction} ile yanıtladı", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}, {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesindeki iletinizi {reaction} ile yanıtladı ", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (konuk), {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "A guest reacted with {reaction} to your message in conversation {call}" : "Bir konuk, {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "{user} mentioned you in a private conversation" : "{user} özel bir görüşmede sizi andı", + "{user} mentioned group {group} in conversation {call}" : "{user}, {call} görüşmesinde {group} grubunu andı", + "{user} mentioned team {team} in conversation {call}" : "{user}, {call} görüşmesinde {team} takımını andı", + "{user} mentioned everyone in conversation {call}" : "{user}, {call} görüşmesindeki herkesi andı", + "{user} mentioned you in conversation {call}" : "{user}, {call} görüşmesinde sizi andı", + "A deleted user mentioned group {group} in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde {group} grubunu andı", + "A deleted user mentioned team {team} in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde {team} takımını andı", + "A deleted user mentioned everyone in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde herkesi andı", + "A deleted user mentioned you in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesinde sizi andı", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (konuk), {call} görüşmesinde {group} grubunu andı", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (konuk), {call} görüşmesinde {team} takımını andı", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (konuk), {call} görüşmesindeki herkesi andı", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (konuk) {call} görüşmesinde sizi andı", + "A guest mentioned group {group} in conversation {call}" : "Bir konuk, {call} görüşmesinde {group} grubunu andı", + "A guest mentioned team {team} in conversation {call}" : "Bir konuk, {call} görüşmesinde {team} takımını andı", + "A guest mentioned everyone in conversation {call}" : "Bir konuk, {call} görüşmesindeki herkesi andı", + "A guest mentioned you in conversation {call}" : "Bir konuk {call} görüşmesinde sizi andı", + "View message" : "İletiyi görüntüle", + "Dismiss reminder" : "Anımsatmayı yok say", + "View chat" : "Sohbeti görüntüle", + "{user} invited you to a group conversation: {call}" : "{user} sizi bir grup görüşmesine davet etti: {call}", + "Join call" : "Çağrıya katıl", + "Answer call" : "Çağrıyı yanıtla", + "{user} would like to talk with you" : "{user} sizinle görüşmek istiyor", + "Call back" : "Geri ara", + "You missed a call from {user}" : "{user} kullanıcısı sizi aramış", + "Accept call" : "Çağrıyı kabul et", + "Incoming phone call from {call}" : "{call} tarafından gelen telefon çağrısı", + "You missed a phone call from {call}" : "{call} tarafından gelen bir telefon çağrısını yanıtlamadınız", + "A group call has started in {call}" : "{call} içinde bir grup çağrısı başlatıldı", + "You missed a group call in {call}" : "{call} grubu sizi aramış", + "{email} is requesting the password to access {file}" : "{email}, {file} dosyasına erişme parolasını istiyor", + "{email} tried to request the password to access {file}" : "{email}, {file} dosyasına erişme parolasını istemeyi denedi", + "Someone is requesting the password to access {file}" : "Birisi {file} dosyasına erişme parolasını istiyor", + "Someone tried to request the password to access {file}" : "Birisi {file} dosyasına erişme parolasını istemeyi denedi", + "Open settings" : "Ayarları aç", + "Hosted signaling server added" : "Barındırılan signaling sunucusu eklendi", + "The hosted signaling server is now configured and will be used." : "Barındırılan signaling sunucusu yapılandırıldı ve kullanılmaya hazır.", + "Hosted signaling server removed" : "Barındırılan signaling sunucusu silindi", + "The hosted signaling server was removed and will not be used anymore." : "Barındırılan signaling sunucusu silindi ve kullanımdan kaldırıldı.", + "Hosted signaling server changed" : "Barındırılan signaling sunucusu değiştirildi", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Barındırılan signaling sunucu hesabının \"{oldstatus}\" olan durumu \"{newstatus}\" olarak değiştirildi.", + "pending" : "bekliyor", + "active" : "etkin", + "expired" : "geçerlilik süresi dolmuş", + "blocked" : "engellenmiş", + "error" : "sorun", + "The certificate of {host} expires in {days} days" : "{host} sertifikasının geçerlilik süresi {days} gün içinde dolacak", + "The certificate of {host} expired" : "{host} sertifikasının geçerlilik süresi doldu", + "Contact via Talk" : "Konuş ile görüşün", + "Open Talk" : "Konuş uygulamasını aç", + "Default" : "Varsayılan", + "Presentation" : "Sunum", + "Voice room" : "Konuşma odası", + "Webinar" : "İnternet sunumu", + "Conversations" : "Görüşmeler", + "Messages in current conversation" : "Geçerli görüşmedeki iletiler", + "{user}" : "{user}", + "Messages" : "İletiler", + "{user} in {conversation}" : "{user}, {conversation} görüşmesinde", + "Messages in other conversations" : "Diğer görüşmelerdeki iletiler", + "One-to-one rooms always need to show the other users avatar" : "Bire bir odalarda diğer kullanıcının avatarı her zaman görüntülenmelidir", + "Invalid emoji character" : "Emoji karakteri geçersiz", + "Invalid background color" : "Arka plan rengi geçersiz", + "Avatar image is not square" : "Avatar görseli kare değil", + "Room {number}" : "{number}. oda", + "Other" : "Diğer", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Deneme sunucusuna erişilemediğinden deneme isteği yapılamadı. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kopyanın kimliği doğrulanırken bir sorun çıktı. Belirtilen adres kullanılarak dışarıdan erişilemiyor olabilir. ", + "Something unexpected happened." : "Beklenmedik bir sorun çıktı.", + "The URL is invalid." : "Adres geçersiz.", + "An HTTPS URL is required." : "Bir HTTPS adresi yazılması zorunludur.", + "The email address is invalid." : "E-posta adresi geçersiz.", + "The language is invalid." : "Dil geçersiz.", + "The country is invalid." : "Ülke geçersiz.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Deneme isteği yapılırken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "Too many requests are send from your servers address. Please try again later." : "Sunucunuzun adresinden çok fazla sayıda istekte bulunulmuş. Lütfen bir süre sonra yeniden deneyin.", + "There is already a trial registered for this Nextcloud instance." : "Bu Nextcloud kopyası için zaten bir deneme kaydı var.", + "Something unexpected happened. Please try again later." : "Beklenmedik bir sorun çıktı. Lütfen bir süre sonra yeniden deneyin.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Deneme sunucusu doğru davranmadığından deneme isteğinde bulunulamadı. Lütfen bir süre sonra yeniden deneyin.", + "Trial requested but failed to get account information. Please check back later." : "Deneme isteğinde bulunuldu ancak hesap bilgileri alınamadı. Lütfen burayı bir süre sonra yeniden denetleyin.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Bu isteğin kimliği doğrulanırken bir sorun çıktı. Belirtilen adres kullanılarak dışarıdan erişilemiyor olabilir. ", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Deneme sunucusu doğru davranmadığından hesap bilgileri alınamadı. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hesap bilgileri alınırken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "There is no such account registered." : "Böyle bir hesap bulunamadı.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Deneme sunucusuna erişilemediğinden hesap bilgileri alınamadı. Lütfen bir süre sonra yeniden deneyin.", + "Deleting the hosted signaling server account failed. Please check back later." : "Barındırılan signaling sunucusu hesabı silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Deneme sunucusu doğru davranmadığından hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hesap silinirken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "Too many requests are sent from your servers address. Please try again later." : "Sunucunuzun adresinden çok fazla sayıda istekte bulunuldu. Lütfen bir süre sonra yeniden deneyin.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Deneme sunucusuna erişilemediğinden hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Note to self" : "Kendime not", + "A place for your private notes, thoughts and ideas" : "Kişisel notlarınızı, düşüncelerinizi ve fikirlerinizi buraya yazabilirsiniz", + "Transcript is AI generated and may contain mistakes" : "Yazıya dönüştürme işlemi yapay zeka ile yapılmıştır ve hatalar olabilir", + "Summary is AI generated and may contain mistakes" : "Özet yapay zeka ile oluşturulmuştur ve hatalar olabilir", + "Let's get started!" : "Başlayalım!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Konuş**, Nextcloud ekosistemiyle sorunsuz bir şekilde bütünleşen güvenli, özel barındırılan bir iletişim platformudur.\n\n#### Nextcloud Konuş Temel Özellikleri:\n\n* Özel ve grup sohbetlerinde sohbet etme ve ileti gönderme\n* Sesli ve görüntülü aramalar\n* Diğer Nextcloud uygulamalarıyla dosya paylaşımı ve bütünleştirme\n* Özelleştirilebilir görüşme ayarları, yönetim ve gizlilik denetimleri\n* İnternet, bilgisayar ve mobil (iOS ve Android)\n* Gizli ve güvenli iletişim\n\nAyrıntılı bilgi almak için [kullanıcı belgelerine](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html) bakın.", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Konuş Uygulamasına Hoş Geldiniz\n\nNextcloud Konuş, Nextcloud ile bütünleşik gizli ve güçlü bir iletişim uygulamasıdır. Kişisel veya grup görüşmelerinde sohbet edin, sesli ve görüntülü görüşmelerde işbirliği yapın, internet toplantıları ve etkinlikler düzenleyin, görüşmelerinizi gizli tutun ve diğer şeyleri yapın.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Zengin iletiler oluşturmak için yazıları biçimlendirin\n\nNextcloud Konuş uygulamasında iletilerinizi biçimlendirmek için Markdown sözdizimini kullanabilirsiniz. Örneğin, **koyu** veya *yatık* biçimlendirme uygulayın veya `yazıları kod olarak vurgulayın`. Hatta yazınızda tablolar oluşturabilir ve başlıklar ekleyebilirsiniz.\n\nBir yazım yanlışını düzeltmeniz veya biçimlendirmeyi değiştirmeniz mi gerekiyor? İleti menüsünde \"İletiyi düzenle\" üzerine tıklayarak iletinizi düzenleyin.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dosyalar ve bağlantılar ekleyin\n\n\"+\" düğmesini kullanarak Nextcloud Merkez üzerinden dosyalar ekleyin. Dosyalar ve çeşitli Nextcloud uygulamalarından ögeler paylaşın. Bazı uygulamalar, örneğin Yazı uygulaması, etkileşimli pano bileşenlerini bile destekler.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Görüşmelerin akmasına izin verin: Kullanıcıları anın, iletilere tepki verin ve diğer şeyleri yapın\n\nGörüşmedeki herkesi %s kullanarak anabilir veya \"@\" yazıp listeden adlarını seçerek belirli katılımcıları anabilirsiniz.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "İletileri yanıtlayabilir, onları diğer sohbetlere ve kişilere iletebilir veya ileti içeriğini kopyalayabilirsiniz.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Akıllı Seçici ile daha fazlasını yapın\n\nİletilerinize çeşitli içerikler ekleyebileceğiniz akıllı seçiciyi açmak için yalnızca \"/\" yazın veya \"+\" menüsüne gidin. Akıllı seçiciyi Nextcloud uygulamalarından, GIF görsellerinden, harita konumlarından, yapay zeka tarafından oluşturulan içeriklerden ve çok daha fazlasından ögeler ekleyebilecek şekilde yapılandırabilirsiniz.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Görüşme ayarlarını yönetin\n\nGörüşme menüsünde, görüşmelerinizi yönetebileceğiniz çeşitli ayarlara erişebilirsiniz. Örneğin:\n* Görüşme bilgilerini düzenleyebilirsiniz\n* Bildirimleri yönetebilirsiniz\n* Çok sayıda yönetim kuralı uygulayabilirsiniz\n* Erişim izinlerini ve güvenliği yapılandırabilirsiniz\n* Botları etkinleştirebilirsiniz\n* ve diğer şeyleri yapabilirsiniz!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Birleşik Arap Emirlikleri", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ve Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Arnavutluk", + "Armenia" : "Ermenistan", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Arjantin", + "American Samoa" : "Amerikan Samoası", + "Austria" : "Avusturya", + "Australia" : "Avustralya", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Adaları", + "Azerbaijan" : "Azerbaycan", + "Bosnia and Herzegovina" : "Bosna ve Hersek", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeş", + "Belgium" : "Belçika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaristan", + "Bahrain" : "Bahreyn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Barış Ülkesi", + "Bolivia, Plurinational State of" : "Bolivya Çok Uluslu Devleti", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ve Saba", + "Brazil" : "Brezilya", + "Bahamas" : "Bahamalar", + "Bhutan" : "Butan", + "Bouvet Island" : "Bouvet Adası", + "Botswana" : "Botswana", + "Belarus" : "Beyaz Rusya", + "Belize" : "Beliz", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keyling) Adaları", + "Congo, the Democratic Republic of the" : "Kongo Demokratik Cumhuriyeti", + "Central African Republic" : "Orta Afrika Cumhuriyeti", + "Congo" : "Kongo", + "Switzerland" : "İsviçre", + "Côte d'Ivoire" : "Fildişi Sahili", + "Cook Islands" : "Cook Adaları", + "Chile" : "Şili", + "Cameroon" : "Kamerun", + "China" : "Çin", + "Colombia" : "Kolombiya", + "Costa Rica" : "Kosta Rika", + "Cuba" : "Küba", + "Cabo Verde" : "Yeşil Burun Adaları", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Adası", + "Cyprus" : "Kıbrıs", + "Czechia" : "Çekya", + "Germany" : "Almanya", + "Djibouti" : "Cibuti", + "Denmark" : "Danimarka", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominik Cumhuriyeti", + "Algeria" : "Cezayir", + "Ecuador" : "Ekvator", + "Estonia" : "Estonya", + "Egypt" : "Mısır", + "Western Sahara" : "Batı Sahra", + "Eritrea" : "Eritre", + "Spain" : "İspanya", + "Ethiopia" : "Etiyopya", + "Finland" : "Finlandiya", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Adaları (Malvinas)", + "Micronesia, Federated States of" : "Mikronezya Birleşik Devletleri", + "Faroe Islands" : "Faroe Adaları", + "France" : "Fransa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Büyük Britanya Birleşik Krallık ve Kuzey İrlanda", + "Grenada" : "Grenada", + "Georgia" : "Gürcistan", + "French Guiana" : "Fransız Guyanası", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Gine", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvator Ginesi", + "Greece" : "Yunanistan", + "South Georgia and the South Sandwich Islands" : "Güney Georgia ve Güney Sandwich Adaları", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gine-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Adası ve McDonald Adaları", + "Honduras" : "Honduras", + "Croatia" : "Hırvatistan", + "Haiti" : "Haiti", + "Hungary" : "Macaristan", + "Indonesia" : "Endonezya", + "Ireland" : "İrlanda", + "Israel" : "İsrail", + "Isle of Man" : "Man Adası", + "India" : "Hindistan", + "British Indian Ocean Territory" : "Britanya Hint Okyanusu Toprakları", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "İran İslam Cumhuriyeti", + "Iceland" : "İzlanda", + "Italy" : "İtalya", + "Jersey" : "Jersey Adası", + "Jamaica" : "Jamaika", + "Jordan" : "Ürdün", + "Japan" : "Japonya", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kırgızistan", + "Cambodia" : "Kamboçya", + "Kiribati" : "Kiribati", + "Comoros" : "Komorlar", + "Saint Kitts and Nevis" : "Saint Kitts ve Nevis", + "Korea, Democratic People's Republic of" : "Kuzey Kore", + "Korea, Republic of" : "Güney Kore", + "Kuwait" : "Kuveyt", + "Cayman Islands" : "Cayman Adaları", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Laos Demokratik Halk Cumhuriyeti", + "Lebanon" : "Lübnan", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Lihtenştayn", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberya", + "Lesotho" : "Lesotho", + "Lithuania" : "Litvanya", + "Luxembourg" : "Lüksemburg", + "Latvia" : "Letonya", + "Libya" : "Libya", + "Morocco" : "Fas", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova Cumhuriyeti", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (Fransız Bölümü)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall Adaları", + "North Macedonia" : "Kuzey Makedonya", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Moğolistan", + "Macao" : "Makau", + "Northern Mariana Islands" : "Kuzey Mariana Adaları", + "Martinique" : "Martinik", + "Mauritania" : "Moritanya", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldivler", + "Malawi" : "Malawi", + "Mexico" : "Meksika", + "Malaysia" : "Malezya", + "Mozambique" : "Mozambik", + "Namibia" : "Namibya", + "New Caledonia" : "Yeni Kaledonya", + "Niger" : "Nijer", + "Norfolk Island" : "Norfolk Adası", + "Nigeria" : "Nijerya", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Hollanda", + "Norway" : "Norveç", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Yeni Zelanda", + "Oman" : "Umman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransız Polinezyası", + "Papua New Guinea" : "Papua Yeni Gine", + "Philippines" : "Filipinler", + "Pakistan" : "Pakistan", + "Poland" : "Polonya", + "Saint Pierre and Miquelon" : "Saint Pierre ve Miquelon", + "Pitcairn" : "Pitcairn Adaları", + "Puerto Rico" : "Porto Riko", + "Palestine, State of" : "Filistin Devleti", + "Portugal" : "Portekiz", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Romanya", + "Serbia" : "Sırbistan", + "Russian Federation" : "Rusya Federasyonu", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Suudi Arabistan", + "Solomon Islands" : "Solomon Adaları", + "Seychelles" : "Seyşeller", + "Sudan" : "Sudan", + "Sweden" : "İsveç", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ve Tristan da Cunha", + "Slovenia" : "Slovenya", + "Svalbard and Jan Mayen" : "Svalbard ve Jan Mayen", + "Slovakia" : "Slovakya", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somali", + "Suriname" : "Surinam", + "South Sudan" : "Güney Sudan", + "Sao Tome and Principe" : "Sao Tome ve Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Hollanda Bölümü)", + "Syrian Arab Republic" : "Suriye Arap Cumhuriyeti", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks ve Caicos Adaları", + "Chad" : "Çad", + "French Southern Territories" : "Fransız Güney Toprakları", + "Togo" : "Togo", + "Thailand" : "Tayland", + "Tajikistan" : "Tacikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Türkmenistan", + "Tunisia" : "Tunus", + "Tonga" : "Tonga", + "Turkey" : "Türkiye", + "Trinidad and Tobago" : "Trinidad ve Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tayvan, Çin Eyaleti", + "Tanzania, United Republic of" : "Tanzanya Birleşik Cumhuriyeti", + "Ukraine" : "Ukrayna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Birleşik Devletler Küçük Dış Adaları", + "United States of America" : "Amerika Birleşik Devletleri", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Özbekistan", + "Holy See" : "Vatikan", + "Saint Vincent and the Grenadines" : "Saint Vincent ve Grenadinler", + "Venezuela, Bolivarian Republic of" : "Venezuela Bolivarcı Cumhuriyeti", + "Virgin Islands, British" : "Virgin Adaları, Britanya", + "Virgin Islands, U.S." : "Virgin Adaları, Birleşik Devletler", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ve Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Güney Afrika", + "Zambia" : "Zambiya", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Arka plan bulanıklaştırması", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM yükleme desteği denetlenemedi. Lütfen site sunucunuzun `.wasm` dosyalarını sunup sunmadığını el ile denetleyin.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Site sunucunuz `.wasm` dosyalarını aktaracak şekilde yapılandırılmamış. Bu sık karşılaşılan bir Nginx yapılandırma sorunudur. Arka plan bulanıklaştırması için `.wasm` dosyalarını da aktaracak ek bir ayar yapılması gereklidir. Kullandığınız Nginx yapılandırmasını belgeler bölümünde bulunan önerilen yapılandırma dosyası ile karşılaştırın.", + "Talk configuration values" : "Konuş yapılandırma değerleri", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Yalnızca sistem zamanlanmış görevi ile bir çağrı süresi dayatılabilir. Lütfen sistem zamanlanmış görevini açın ya da `max_call_duration` yapılandırmasını kaldırın.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Küçük `max_call_duration` değerleri (şu anda %d olarak ayarlanmış) teknik sınırlamalar nedeniyle zorunlu kılınamaz. Arka plan görevi yalnızca her 5 dakikada bir yürütülür. Buradaki riski kabul ederek kullanın.", + "Federation" : "Birleşim", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Konuş birleştirme özelliği açıldığında \"memcache.locking\" yapılandırmasının ayarlanması önemle önerilir.", + "High-performance backend" : "Yüksek başarımlı arka yüz", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Yüksek başarımlı arka yüz yapılandırılmamış - Yüksek başarımlı arka yüz olmadan Nextcloud Konuş yalnızca çok küçük çağrılar için çalışabilir (en fazla 2-3 katılımcı). Birden fazla katılımcının olduğu çağrıların sorunsuz çalışmasını sağlamak için lütfen yüksek başarımlı arka yüzü ayarlayın.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Yüksek başarımlı arka yüz, \"conversation_cluster\" kipini çalıştırma özelliği kapatıldı ve yaklaşan sürümde artık desteklenmeyecek. Yüksek başarımlı arka yüz artık gerçek kümelemeyi destekliyor ve bunun yerine kullanılmalı.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Birden fazla yüksek başarımlı arka yüz tanımlama özelliği kapatıldı ve yaklaşan sürümde artık desteklenmeyecek. Bunun yerine, kümelenmiş sinyal sunucularıyla birlikte bir yük dengeleyici kurulmalı ve Konuş uygulaması ayarlarından yapılandırılmalıdır.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Kullanılan %1$s algoritması için kaydedilmiş herkese açık anahtar, kaydedilmiş kişisel anahtarla eşleşmiyor. Sorunu çözmek için %2$s işlemini yürütün.", + "High-performance backend not configured correctly. Run %s for details." : "Yüksek başarımlı arka yüz doğru yapılandırılmamış. Ayrıntılı bilgi almak için %s komutunu yürütün.", + "High-performance backend not configured correctly" : "Yüksek başarımlı arka yüz doğru yapılandırılmamış", + "Error: Cannot connect to server" : "Hata: Sunucu ile bağlantı kurulamadı", + "Error: Server did not respond with proper JSON" : "Hata: Sunucunun JSON yanıtı geçersiz", + "Error: Certificate expired" : "Hata: Sertifikanın geçerlilik süresi dolmuş", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hata: Nextcloud sunucusunun ve yüksek başarımlı arka yüz sunucusunun sistem saatleri aynı değil. Lütfen her iki sunucunun da bir zaman sunucusuna bağlı olduğundan emin olun ya da saatlerini el ile eşitleyin.", + "Could not get version" : "Sürüm alınamadı", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hata: Çalışan sürüm: {version}. Bu Konuş sürümüyle uyumlu olması için sunucunun güncellenmesi gerekiyor", + "Error: Server responded with: {error}" : "Hata: Sunucu yanıtı: {error}", + "Error: Unknown error occurred" : "Hata: Bilinmeyen bir sorun çıktı", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Uyarı: Çalışan sürüm: {version}; Sunucu bu Konuş sürümünün tüm özelliklerini desteklemiyor. Eksik özellikler: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Konuş yüksek başarımlı bir arka yüzde çalıştırılırken, bir bellek ön belleği yapılandırmanız önemle önerilir.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push kurulmuş. Talk bildirimlerinin dakikliği iyileştiriliyor.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} kurulmamış. Talk bildirimlerinde gecikmeler olabilir.", + "Recording backend" : "Kayıt arka yüzü", + "Using the recording backend requires a High-performance backend." : "Kayıt arka yüzünün kullanılabilmesi için bir yüksek başarımlı arka yüz gereklidir.", + "No recording backend configured" : "Herhangi bir kayıt arka yüzü yapılandırılmamış", + "SIP configuration" : "SIP yapılandırması", + "Using the SIP functionality requires a High-performance backend." : "SIP özelliğinin kullanılabilmesi için bir yüksek başarımlı arka yüz gereklidir.", + "No SIP backend configured" : "Herhangi bir SIP arka yüzü yapılandırılmamış.", + "Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır", + "Conversation not found" : "Görüşme bulunamadı", + "Path is already shared with this conversation" : "Yol bu görüşme ile zaten paylaşılmış", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC kullanarak yazılı, sesli ve görüntülü görüşmeler yapabilirsiniz", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC ile sohbet, görüntülü ve sesli görüşme\n\n* 💬 **Sohbet** Nextcloud Konuş üzerinde, Nextcloud Dosyalar uygulamanızdan veya yerel aygıtınızdan dosya paylaşmanızı veya yüklemenizi ve diğer katılımcıları anmanızı sağlayan basit bir yazı sohbeti uygulaması bulunur.\n* 👥 **Özel, gruba, herkese açık ve şifre korumalı çağrılar!** Bir kişiyi ya da tüm grubu davet edin veya bir bağlantı ile herkesin çağrıya katılmasını sağlayın.\n* 🌐 **Birleşik sohbetler** Diğer Nextcloud sunucularındaki kullanıcılarla sohbet edin\n* 💻 **Ekran paylaşımı!** Ekranınızı görüşmenizin katılımcılarıyla paylaşın.\n* 🚀 **Dosyalar, Takvim, Kullanıcı durumu, Pano, Akış, Haritalar, Akıllı seçici, Kişiler, Deck ve diğer Nextcloud uygulamalarıyla bütünleşik**.\n* 🌉 **Diğer sohbet çözümleriyle eşitleme** [Matterbridge](https://github.com/42wim/matterbridge/) Konuş uygulaması ile bütünleştirildiğinde, diğer birçok sohbet çözümünü Nextcloud Konuş ile kolayca eşitleyebilirsiniz.", + "Leave call" : "Çağrıdan ayrıl", + "Navigating away from the page will leave the call in {conversation}" : "Sayfadan ayrılırsanız {conversation} çağrısından çıkacaksınız", + "Stay in call" : "Çağrıda kal", + "Error occurred when getting the conversation information" : "Görüşme bilgileri alınırken sorun çıktı", + "Discuss this file" : "Bu dosya hakkında görüş", + "Share this file with others to discuss it" : "Bu dosyayı, hakkında görüşmek için başkaları ile paylaş", + "Share this file" : "Bu dosyayı paylaş", + "Join conversation" : "Görüşmeye katıl", + "This conversation is password-protected." : "Bu görüşme parola ile korunmuş.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "IP adresinizden yapılan birden çok geçersiz parola yazma girişimi algılandı. Bu nedenle sonraki denemeniz 30 saniye süreyle engellendi.", + "The password is wrong. Try again." : "Parola yanlış. Yeniden deneyin.", + "Password" : "Parola", + "Submit" : "Gönder", + "Error requesting the password." : "Parola istenirken sorun çıktı.", + "Request password" : "Parola istensin", + "This conversation has ended" : "Bu görüşme sona ermiş", + "Error occurred when joining the conversation" : "Görüşmeye katılmakta sorun çıktı", + "Close Talk sidebar" : "Konuş kenar çubuğunu kapat", + "Open Talk sidebar" : "Konuş kenar çubuğunu aç", + "Everyone" : "Herkes", + "Users and moderators" : "Kullanıcılar ve sorumlular", + "Moderators only" : "Yalnızca sorumlular", + "Disable calls" : "Çağrıları kapat", + "Save changes" : "Değişiklikleri Kaydet", + "Saving …" : "Kaydediliyor …", + "Saved!" : "Kaydedildi!", + "Limit to groups" : "Şu gruplarla sınırla", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "En az bir grup seçildiğinde, yalnızca belirtilen gruplardaki kişiler görüşmelere katılabilir.", + "Guests can still join public conversations." : "Konuklar hala herkese açık görüşmelere katılabilir.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Artık Konuş uygulamasını kullanamayan kullanıcılar, daha önce katıldıkları görüşmelerde katılımcı olarak görüntülenmeyi sürdürecek ve sohbet iletileri de korunacak.", + "Limit using Talk" : "Konuş uygulamasının kullanımı sınırlansın", + "Limit creating a public and group conversation" : "Herkese açık ve grup görüşmesi oluşturma sınırlansın", + "Limit creating conversations" : "Görüşme oluşturma sınırlansın", + "Limit starting a call" : "Bir çağrı başlatma sınırlansın", + "Limit starting calls" : "Çağrı başlatma sınırlansın", + "When a call has started, everyone with access to the conversation can join the call." : "Bir çağrı yapıldığında, görüşmeye erişimi olan herkes çağrıya katılabilir.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Bu sunucuda şu botlar kurulu. Belgelerde, sunucunuzda kullanmak için {linkstart1}kendi botunuzu nasıl oluşturacağınız{linkend} ya da{linkstart2}bot listesi{linkend} hakkında ayrıntılı bilgi bulabilirsiniz.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Bu sunucuda herhangi bir bot kurulu değil. Belgelerde, sunucunuzda kullanmak için {linkstart1}kendi botunuzu nasıl oluşturacağınız{linkend} ya da{linkstart2}bot listesi{linkend} hakkında ayrıntılı bilgi bulabilirsiniz.", + "Description is not provided" : "Açıklama yazılmamış", + "Locked for moderators" : "Sorumlular için kilitli", + "Enabled" : "Kullanılıyor", + "Disabled" : "Kullanılmıyor", + "Bots settings" : "Bot ayarları", + "State" : "Durum", + "Name" : "Ad", + "Last error" : "Son hata", + "Total errors count" : "Toplam hata sayısı", + "Find more bots" : "Başka botlar bul", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Güvenilen sunucular {linkstart}Paylaşım ayarları{linkend} bölümünden yapılandırılabilir.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Birleşik sohbetler ve aramalar zaten çalışıyor. Ek dosyaların işlenmesi gelecek sürümlerde eklenecek.", + "Enable Federation in Talk app" : "Konuş uygulamasında birlik kullanılsın", + "Permissions" : "İzinler", + "Allow users to be invited to federated conversations" : "Kullanıcılar birleşik görüşmelere davet edilebilsin", + "Allow users to invite federated users into conversation" : "Kulanıcılar görüşmelere birleşik kullanıcıları davet edebilsin", + "Only allow to federate with trusted servers" : "Yalnızca güvenilen sunucular ile birleşik çalışılabilsin", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "En az bir grup seçildiğinde, yalnızca belirtilen gruplardaki kişiler görüşmelere birleşik kullanıcıları davet edebilir.", + "Groups allowed to invite federated users" : "Birleşik kullanıcıları davet edebilecek gruplar", + "Select groups …" : "Grupları seçin…", + "All messages" : "Tüm iletiler", + "@-mentions only" : "Yalnızca @-anmaları", + "Off" : "Kapalı", + "General settings" : "Genel ayarlar", + "Default notification settings" : "Varsayılan bildirim ayarları", + "Default group notification" : "Varsayılan grup bildirimi", + "Default group notification for new groups" : "Yeni gruplar için varsayılan grup bildirimi", + "Integration into other apps" : "Diğer uygulamalar ile bütünleştirme", + "Allow conversations on files" : "Dosyalar üzerine görüşme yapılabilsin", + "Allow conversations on public shares for files" : "Herkese açık paylaşımlardaki dosyalar üzerine görüşme yapılabilsin", + "End-to-end encrypted calls" : "Uçtan uca şifrelenmiş çağrılar", + "Enable encryption" : "Şifreleme kullanılsın", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Yapılandırılmış bir SIP köprüsü ile uçtan uca şifrelenmiş çağrılar için, yüksek başarımlı arka yüz ve SIP köprüsünün daha yeni bir sürümü gerekir.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Şu anda mobil istemcilerde uçtan uca şifrelenmiş çağrılar desteklenmiyor.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Yukarıdaki düğmeye tıklayarak formdaki bilgileri Struktur AG tarafına göndermiş olacaksınız. Diğer bilgileri {linkstart}spreed.eu{linkend} üzerinde bulabilirsiniz.", + "Pending" : "Bekleyen", + "Error" : "Hata", + "Blocked" : "Engellenmiş", + "Active" : "Etkin", + "Expired" : "Geçerlilik süresi dolmuş", + "Never" : "Yok", + "The trial could not be requested. Please try again later." : "Deneme isteği yapılamadı. Lütfen bir süre sonra yeniden deneyin.", + "The account could not be deleted. Please try again later." : "Hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Hosted High-performance backend" : "Barındırılan yüksek başarımlı arka yüz", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "İş ortağımız Struktur AG, barındırılan bir signaling sunucusu isteğinde bulunabileceğiniz bir hizmet sunuyor. Bunun için aşağıdaki formu doldurmanız yeterlidir. Nextcloud kopyanız istekte bulunur. Sunucu kurulduktan sonra kimlik doğrulama bilgileri otomatik olarak doldurulur. Bu işlem var olan signaling sunucusu ayarlarının üzerine yazar.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Yüksek başarımlı arka uç hesabınızda STUN ve/veya TURN özelliği bulunuyorsa, ayarlar buna göre güncellenir.", + "URL of this Nextcloud instance" : "Bu Nextcloud kopyasının adresi", + "Full name of the user requesting the trial" : "Deneme isteğinde bulunan kullanıcının tam adı", + "Email of the user" : "Kullanıcının e-posta adresi", + "Language" : "Dil", + "Country" : "Ülke", + "Request signaling server trial" : "Signaling sunucusu deneme isteği", + "You can see the current status of your hosted signaling server in the following table." : "Barındırılan signaling sunucunuzun güncel durumunu aşağıdaki tabloda görebilirsiniz.", + "Status" : "Durum", + "Created at" : "Oluşturulma", + "Expires at" : "Geçerlilik süresi sonu", + "Limits" : "Sınırlar", + "STUN included" : "STUN var", + "Yes" : "Evet", + "No" : "Hayır", + "TURN included" : "TURN var", + "Delete the signaling server account" : "Signaling sunucu hesabını sil", + "_%n user_::_%n users_" : ["%n kullanıcı","%n kullanıcı"], + "Installed version: {version}" : "Kurulu sürüm: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Konuş ile diğer hizmetleri bağlamak için Matterbridge kurabilirsiniz. Ayrıntılı bilgi almak için Matterbridge {linkstart1}GitHub sayfasına{linkend} bakabilirsiniz. Uygulamanın indirilip kurulması biraz zaman alabilir. İşlem zaman aşımına uğrarsa {linkstart2}Nextcloud uygulama mağazasından{linkend} el ile kurun.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge yürütülebilir dosyasının izinleri doğru değil. Lütfen Matterbridge yürütülebilir dosyasının sahibinin doğru kullanıcı olduğundan ve yürütülebilir olduğundan emin olun. Bu dosya \"/…/nextcloud/apps/talk_matterbridge/bin/\" klasöründe bulunur.", + "Matterbridge binary was not found or couldn't be executed." : "Matterridge yürütülebilir dosyası bulunamadı ya da yürütülemiyor.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Matterbridge uygulamasının yolunu yapılandırma bölümünden el ile de ayarlayabilirsiniz. Ayrıntılı bilgi almak için {linkstart}Matterbridge bütünleştirme belgelerine{linkend} bakabilirsiniz.", + "Downloading …" : "İndiriliyor…", + "Install Talk Matterbridge" : "Konuş Matterbridge kur", + "An error occurred while installing the Matterbridge app" : "Matterbridge uygulaması kurulurken bir sorun çıktı", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Konuş Matterbridge kurulurken bir sorun çıktı. Lütfen el ile kurun", + "Failed to execute Matterbridge binary." : "Matterbridge uygulaması çalıştırılamadı.", + "Matterbridge integration" : "Matterbridge bütünleştirmesi", + "Enable Matterbridge integration" : "Matterbridge bütünleştirmesi kullanılsın", + "Status: Checking connection" : "Durum: Bağlantı denetleniyor", + "OK: Running version: {version}" : "Tamam: Çalışan sürüm: {version}", + "Error: Server seems to be a Signaling server" : "Hata: Sunucu bir signaling sunucusu gibi görünüyor", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hata: Nextcloud sunucusunun ve kayıt arka yüzü sunucusunun sistem saatleri aynı değil. Lütfen her iki sunucunun da bir zaman sunucusuna bağlı olduğundan emin olun ya da saatlerini el ile eşitleyin.", + "Recording backend URL" : "Kayıt arka yüzü adresi", + "Validate SSL certificate" : "SSL sertifikasını doğrula", + "Delete this server" : "Bu sunucuyu sil", + "Test this server" : "Bu sunucuyu sına", + "Disabled for all calls" : "Tüm çağrılar için kapalı", + "Enabled for all calls" : "Tüm çağrılar için açık", + "Configurable on conversation level by moderators" : "Sorumlular tarafından görüşme düzeyinde yapılandırılabilir", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "\"upload_max_filesize\" or \"post_max_size\" PHP ayarı en fazla {maxUpload} boyutundaki dosyaların yüklenmesine izin veriyor.", + "Recording backend settings saved" : "Kayıt arka yüzü ayarları kaydedildi", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Sorumlular görüşme düzeyinde kayıt alma rızasını açabilir. Bu görüşmedeki çağrılara katılmadan önce her kullanıcıdan kayıt alma rızası istenir.", + "The consent to be recorded will be required for each participant before joining every call." : "Her katılımcıdan çağrılara katılmadan önce kayıt alma rızası istenir. ", + "The consent to be recorded is not required." : "Kayıt alma rızası istenmez.", + "Recording backend configuration is only possible with a High-performance backend." : "Kayıt arka yüzü yapılandırması yalnızca yüksek başarımlı arka yüz ile kullanılabilir.", + "Add a new recording backend server" : "Yeni bir kayıt arka yüzü sunucusu ekle", + "Shared secret" : "Paylaşılan parola", + "Recording consent" : "Kayıt alma rızası", + "Recording transcription" : "Kaydı yazıya dönüştürme", + "Automatically transcribe call recordings with a transcription provider" : "Bir yazıya dönüştürme hizmeti ile çağrı kayıtlarını otomatik olarak yazıya dönüştürün", + "Automatically summarize call recordings with transcription and summary providers" : "Yazıya dönüştürme ve özetleme hizmetleri ile çağrı kayıtlarını otomatik olarak özetleyin", + "SIP configuration saved!" : "SIP yapılandırması kaydedildi!", + "SIP configuration is only possible with a High-performance backend." : "SIP yapılandırması yalnızca yüksek başarımlı arka yüz ile kullanılabilir.", + "Enable SIP Dial-out option" : "SIP çevirme seçeneği kullanılsın", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalling sunucusunun desteklenen SIP çevirme özelliğine güncellenmesi gerekiyor.", + "Do not show SIP Dial-out caller number" : "SIP giden arama numarası görüntülenmesin", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Alıcıyı aramak için anonim numara \"bilinmiyor\" veya \"gizli numara\" olarak görünmeli", + "Dial-out number" : "Giden arama numarası", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Giden aramalar için varsayılan arayan numara olarak kullanılacak E164 biçiminde numara", + "Dial-out prefix" : "Giden arama ön eki", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Giden aramalar için yapılandırılmış kullanıcı numarası ön eki (varsayılan `+`)", + "Restrict SIP configuration" : "SIP yapılandırması kısıtlansın", + "Enable SIP configuration" : "SIP yapılandırması kullanılsın", + "Only users of the following groups can enable SIP in conversations they moderate" : "Yalnızca aşağıdaki grupların kullanıcıları sorumlu oldukları görüşmelerde SIP özelliğini açabilir", + "Phone number (Country)" : "Telefon numarası (Ülke)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Bu bilgiler davet e-postalarında gönderilir ve ayrıca kenar çubuğunda tüm katılımcılara görüntülenir.", + "Nextcloud base URL" : "Temel Nextcloud adresi", + "Talk Backend URL" : "Konuş arka yüzü adresi", + "WebSocket URL" : "WebSocket adresi", + "Available features" : "Kullanılabilecek özellikler", + "Error: Websocket connection failed" : "Hata: Websocket bağlantısı kurulamadı", + "Error code" : "Hata kodu", + "Error message" : "Hata iletisi", + "Error: Websocket connection failed. Check browser console" : "Hata: Websocket bağlantısı kurulamadı. Tarayıcı konsoluna bakın", + "High-performance backend URL" : "Yüksek başarımlı arka yüz adresi", + "Missing High-performance backend warning hidden" : "Yüksek başarımlı arka yüz eksik uyarısı gizlendi", + "High-performance backend settings saved" : "Yüksek başarımlı arka yüz ayarları kaydedildi", + "Nextcloud Talk setup not complete" : "Nextcloud Konuş kurulumu tamamlanmamış", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Yüksek başarımlı arka yüz olmadan iki kişiden fazla katılımcının olduğu görüşmelerde, katılımcıların büyük olasılıkla bağlantı sorunları yaşayacağını ve katılımcı aygıtlarında yüksek yük oluşacağını unutmayın.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Birden fazla katılımcının olduğu görüşmelerin sorunsuz bir şekilde yapılabilmesi için yüksek başarımlı arka yüz kurun.", + "Nextcloud portal" : "Nextcloud sitesi", + "Quick installation guide" : "Hızlı kurulum rehberi", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Birden fazla katılımcının olduğu aramalar ve görüşmeler için yüksek başarımlı arka yüz olmadan, tüm katılımcılar her katılımcı için kendi videolarını ayrı ayrı yüklemek zorunda kalır. Bu da büyük olasılıkla bağlantı sorunlarına ve katılımcı aygıtlarında yüksek yüke neden olur.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Konuş uygulamasını yüksek başarımlı bir arka yüz ile kullanırken dağıtılmış bir ön bellek kurmanız önemle önerilir.", + "Add High-performance backend server" : "Yüksek başarımlı arka yüz sunucusu ekle", + "Warn about connectivity issues in calls with more than 2 participants" : "2 kişiden fazla katılımcısı olan çağrılarda bağlantı sorunları uyarısı görüntülensin", + "STUN server URL" : "STUN sunucusunun adresi", + "The server address is invalid" : "Sunucu adresi geçersiz", + "STUN settings saved" : "STUN ayarları kaydedildi", + "STUN servers" : "STUN sunucuları", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN sunucusu bir yönelticinin arkasındaki katılımcının herkese açık adresinin belirlenmesinde kullanılır.", + "Add a new STUN server" : "Yeni STUN sunucusu ekle", + "{schema} scheme must be used with a domain" : "{schema} şeması bir etki alanı ile birlikte kullanılmalıdır", + "{option1} and {option2}" : "{option1} ve {option2}", + "{option} only" : "yalnızca {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Tamam: TURN sunucusu tarafından çalışan ICE adayları bildirildi", + "Error: No working ICE candidates returned by the TURN server" : "Sorun: TURN sunucusu tarafından çalışan bir ICE adayı bildirilmedi", + "Testing whether the TURN server returns ICE candidates" : "TURN sunucusunun ICE adaylarını bildirip bildirmediği sınanıyor", + "TURN server schemes" : "TURN sunucu şemaları", + "TURN server URL" : "TURN sunucusunun adresi", + "TURN server secret" : "TURN sunucu parolası", + "TURN server protocols" : "TURN sunucu iletişim kuralları", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN sunucusu bir güvenlik duvarı arkasındaki katılımcıların bağlanabilmesi için kullanılan bir vekil sunucudur. Bazı kullanıcılar diğerlerine bağlanamıyorsa genellikle bir TURN sunucusunun kullanılması gerekir. Kurulum bilgileri için {linkstart}bu belgeye{linkend} bakabilirsiniz.", + "TURN settings saved" : "TURN ayarları kaydedildi", + "TURN servers" : "TURN sunucuları", + "Add a new TURN server" : "Yeni TURN sunucusu ekle", + "Failed" : "Tamamlanamadı", + "OK" : "Tamamlandı", + "Checking …" : "Denetleniyor…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Tamamlanamadı: WebAssembly kullanımdan kaldırılmış ya da bu tarayıcıda desteklenmiyor. Denetlemek için WebAssembly eklentisini kullanıma alın ya da destekleyen bir tarayıcı kullanın.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Tamamlanamadı: Site sunucusu \".wasm\" ve \".tflite\" dosyalarını düzgün şekilde geri döndürmedi. Lütfen Konuş belgelerinde \"sistem gereksinimleri\" bölümüne bakın.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Tamamlandı: Site sunucusu \".wasm\" ve \".tflite\" dosyalarını düzgün şekilde geri döndürdü.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Görünüşe göre PHP ile Apache yapılandırması uyumlu değil. Lütfen PHP kurulumunun yalnızca MPM_PREFORK modülü ile PHP-FPM kurulumunun yalnızca MPM_EVENT modülü ile kullanılabileceğini unutmayın.", + "Web server setup checks" : "Site sunucusu kurulumu denetimleri", + "Files required for virtual background can be loaded" : "Arka plan için kullanılacak dosyalar yüklenebilir", + "Federated user" : "Birleşik kullanıcı", + "Assign participants to rooms" : "Katılımcıları odalara dağıt", + "Configure breakout rooms" : "Çalışma odaları yapılandırması", + "Number of breakout rooms" : "Çalışma odası sayısı", + "You can create from 1 to 20 breakout rooms." : "1 ile 20 arasında çalışma odası oluşturabilirsiniz.", + "Assignment method" : "Atama yöntemi", + "Automatically assign participants" : "Katılımcılar otomatik olarak dağıtılsın", + "Manually assign participants" : "Katılımcılar el ile dağıtılsın", + "Allow participants to choose" : "Katılımcılar oda seçebilsin", + "Create rooms" : "Odaları oluştur", + "Confirm" : "Onayla", + "Create breakout rooms" : "Çalışma odaları oluştur", + "Reset" : "Sıfırla", + "Delete breakout rooms" : "Çalışma odalarını sil", + "Room {roomNumber}" : "{roomNumber}. oda", + "Current breakout rooms and settings will be lost" : "Geçerli çalışma odaları ve ayarları kaybolacak", + "Cancel" : "İptal", + "Unassigned participants" : "Dağıtılmamış katılımcılar", + "Back" : "Geri", + "Assign" : "Ata", + "Add participant \"{user}\"" : "\"{user}\" katılımcısını ekle", + "Now" : "Şimdi", + "Invalid calendar selected" : "Seçilen takvim geçersiz", + "Invalid start time selected" : "Seçilen başlangıç zamanı geçersiz", + "Invalid end time selected" : "Seçilen bitiş zamanı geçersiz", + "Unknown error occurred" : "Bilinmeyen bir sorun çıktı", + "Sending no invitations" : "Herhangi bir davet gönderilemedi", + "{participant0} will receive an invitation" : "{participant0} için davet gönderilecek", + "{participant0} and {participant1} will receive invitations" : "{participant0} ve {participant1} için davet gönderilecek", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ve %n diğer kişi için davet gönderilecek","{participant0}, {participant1} ve %n diğer kişi için davet gönderilecek"], + "Invite {user}" : "{user} kullanıcısını davet et", + "Invite all users and emails in this conversation" : "Bu görüşmedeki tüm kullanıcıları ve e-postaları davet et", + "Meeting created" : "Toplantı oluşturuldu", + "Upcoming meetings" : "Yaklaşan toplantılar", + "Loading …" : "Yükleniyor…", + "No upcoming meetings" : "Yaklaşan bir toplantı yok", + "Schedule a meeting" : "Bir toplantı zamanla", + "Meeting title" : "Toplantı başlığı", + "From" : "Başlangıç", + "To" : "Bitiş", + "Calendar" : "Takvim", + "Attendees" : "Katılanlar", + "No other participants to send invitations to." : "Davet gönderilecek başka bir katılımcı yok.", + "Add attendees" : "Katılımcılar ekle", + "Save" : "Kaydet", + "Search participants" : "Katılımcı arama", + "No results" : "Herhangi bir sonuç bulunamadı", + "Done" : "Tamam", + "Disable live transcription" : "Canlı yazıya dönüştürmeyi kapat", + "Enable live transcription (generated by AI)" : "Canlı yazıya dönüştürmeyi aç (yapar zeka ile)", + "Disable live translation" : "Canlı çeviriyi kapat", + "Enable live translation (generated by AI)" : "Canlı çeviriyi aç (yapay zeka ile)", + "Original language: {languageName}" : "Özgün dil: {languageName}", + "Translated language" : "Çevrilmiş dil", + "Translated language: {languageName}" : "Çevrilmiş dil: {languageName}", + "Raise hand" : "El kaldır", + "Raise hand (R)" : "El kaldır (R)", + "Lower hand" : "Eli indir", + "Lower hand (R)" : "Eli indir (R)", + "Exit full screen (F)" : "Tam ekrandan çık (F)", + "Full screen (F)" : "Tam ekran (F)", + "Speaker view" : "Konuşmacı görünümü", + "Grid view" : "Tablo görünümü", + "Error when trying to load the available live transcription languages" : "Canlı yazıya dönüştürme için kullanılabilecek diller yüklenirken sorun çıktı", + "Failed to enable live transcription" : "Canlı yazıya dönüştürme açılamadı", + "Failed to enable live translations" : "Canlı çeviriler açılamadı", + "Failed to disable live translations" : "Canlı çeviriler kapatılamadı", + "Recording consent is required" : "Kayıt alma rızası isteniyor", + "This conversation is read-only" : "Bu görüşme salt okunur", + "Conversation not found or not joined" : "Görüşme bulunamadı ya da görüşmeye katılınmamış", + "Lobby is still active and you're not a moderator" : "Giriş hala kullanılıyor ve siz bir sorumlu değilsiniz", + "Connection failed" : "Bağlantı kurulamadı", + "Reload" : "Yeniden yükle", + "{nickName} raised their hand." : "{nickName} elini kaldırdı.", + "A participant raised their hand." : "Bir katılımcı elini kaldırdı.", + "Collapse stripe" : "Şeridi daralt", + "Expand stripe" : "Şeridi genişlet", + "Previous page of videos" : "Önceki görüntü sayfası", + "Next page of videos" : "Sonraki görüntü sayfası", + "Connecting …" : "Bağlantı kuruluyor …", + "Calling …" : "Aranıyor…", + "Waiting for {user} to join the call" : "{user} kullanıcısının çağrıya katılması bekleniyor", + "Waiting for others to join the call …" : "Diğerlerinin çağrıya katılması bekleniyor …", + "You can invite others in the participant tab of the sidebar" : "Diğer kişileri kenar çubuğundaki katılımcı sekmesinden davet edebilirsiniz", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Diğer kişileri kenar çubuğundaki katılımcı sekmesinden ya da bu bağlantıyı paylaşarak davet edebilirsiniz!", + "Share this link to invite others!" : "Diğer kişileri davet etmek için bu bağlantıyı paylaşın!", + "Copy link" : "Bağlantıyı kopyala", + "You are not allowed to enable audio" : "Sesi açma izniniz yok", + "No audio. Click to select device" : "Ses yok. Aygıtı seçmek için tıklayın", + "Mute audio" : "Sesi kıs", + "Mute audio (M)" : "Sesi kıs (M)", + "Unmute audio" : "Sesi aç", + "Unmute audio (M)" : "Sesi aç (M)", + "None" : "Yok", + "Select a microphone" : "Bir mikrofon seçin", + "Select a speaker" : "Bir hoparlör seçin", + "Microphone settings" : "Mikrofon ayarları", + "Check devices" : "Aygıtları denetle", + "Access to camera was denied" : "Kameraya erişim reddedildi", + "Error while accessing camera: It is likely in use by another program" : "Kameraya erişilirken sorun çıktı: Başka bir uygulama tarafından kullanılıyor olabilir", + "Error while accessing camera" : "Kameraya erişilirken sorun çıktı", + "You have been muted by a moderator" : "Sesiniz sorumlu tarafından kısıldı", + "Hide presenter video" : "Sunucunun görüntüsünü gizle", + "You are not allowed to enable video" : "Görüntüyü açma izniniz yok", + "No video. Click to select device" : "Görüntü yok. Aygıtı seçmek için tıklayın", + "Disable video" : "Görüntüyü kapat", + "Disable video (V)" : "Görüntüyü kapat (V)", + "Enable video" : "Görüntü kullanılsın", + "Enable video (V)" : "Görüntüyü aç (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç. Görüntü ilk kez açılırken bağlantınız bir an kesilecek", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç (V) - Görüntü ilk kez açıldığında bağlantınız kısa süreli olarak kesilecek", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç. Görüntü ilk kez açılırken bağlantınız bir an kesilecek", + "Select a video device" : "Bir görüntü aygıtı seçin", + "Show presenter" : "Sunucu görüntülensin", + "You" : "Siz", + "Mute" : "Sesi kıs", + "Muted" : "Sesi kapalı", + "Show screen" : "Ekranı görüntüle", + "Stop following" : "Takibi bırak", + "Connection could not be established …" : "Bağlantı kurulamadı…", + "Connection was lost and could not be re-established …" : "Bağlantı kesildi ve yeniden kurulamadı…", + "Connection could not be established. Trying again …" : "Bağlantı kurulamadı. Yeniden deneniyor…", + "Connection lost. Trying to reconnect …" : "Bağlantı kesildi. Yeniden deneniyor…", + "Connection problems …" : "Bağlantı sorunları…", + "Collapse" : "Daralt", + "Expand" : "Genişlet", + "You need to be logged in to upload files" : "Dosya yükleyebilmek için oturum açmalısınız", + "Drop your files to upload" : "Yüklenecek dosyaları sürükleyip bırakın", + "Conversation messages" : "Görüşme iletileri", + "Scroll to bottom" : "Aşağıya kaydır", + "Post message" : "İleti gönder", + "Federated conversation" : "Birleşik görüşme", + "Public conversation" : "Herkese açık görüşme", + "Favorite" : "Sık kullanılanlara ekle", + "Banned users" : "Yasaklanmış kullanıcılar", + "Manage the list of banned users in this conversation." : "Bu görüşmede yasaklanmış kullanıcıların listesini yönetir.", + "Manage bans" : "Yasaklama yönetimi", + "No banned users" : "Yasaklanmış bir kullanıcı yok", + "Banned by:" : "Yasaklayan:", + "Date:" : "Tarih:", + "Note:" : "Not:", + "Hide details" : "Ayrıntıları gizle", + "Show details" : "Ayrıntıları görüntüle", + "Unban" : "Yasaklamayı kaldır", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "{linkstart}Takvim ↗{linkend} içindeki başlık ve açıklamayı değiştirebilirsiniz.", + "Error while updating conversation name" : "Görüşme adı güncellenirken sorun çıktı", + "Error while updating conversation description" : "Görüşme açıklaması güncellenirken sorun çıktı", + "Enter a name for this conversation" : "Bu görüşme için bir ad yazın", + "Edit conversation name" : "Görüşme adını düzenle", + "Edit conversation description" : "Görüşme açıklamasını düzenle", + "Enter a description for this conversation" : "Bu görüşme için bir açıklama yazın", + "Picture" : "Fotoğraf", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Bu görüşmede şu botlar kullanılabilir. Bu sunucuya daha fazla bot kurması için yöneticiniz ile görüşün.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Bu sunucuya herhangi bir bot kurulmamış. Bu sunucuya botları kurması için yöneticiniz ile görüşün.", + "Disable" : "Kullanımdan kaldır", + "Enable" : "Aç", + "Breakout rooms" : "Çalışma odaları", + "Manage breakout rooms" : "Çalışma odaları yönetimi", + "Set up breakout rooms for this conversation" : "Bu görüşme için çalışma odalarını hazırla", + "Please select a valid PNG or JPG file" : "Lütfen geçerli bir PNG ya da JPG dosyası seçin", + "Choose your conversation picture" : "Görüşme görselinizi seçin", + "Choose" : "Seçin", + "Error setting conversation picture" : "Görüşme görseli ayarlanırken sorun çıktı", + "Could not set the conversation picture: {error}" : "Görüşme görseli ayarlanamadı: {error}", + "Error cropping conversation picture" : "Görüşme görseli kırpılırken sorun çıktı", + "Error removing conversation picture" : "Görüşme görseli kaldırılırken sorun çıktı", + "Set emoji as conversation picture" : "Emojiyi görüşme görseli olarak ayarla", + "Set background color for conversation picture" : "Arka plan rengini görüşme görseli olarak ayarla", + "Upload conversation picture" : "Görüşme görseli yükle", + "Choose conversation picture from files" : "Görüşme görselini dosyalardan seçin", + "Remove conversation picture" : "Görüşme görselini kaldır", + "The file must be a PNG or JPG" : "Dosya PNG ya da JPG biçiminde olmalıdır", + "Set picture" : "Görseli ayarla", + "Default permissions modified for {conversationName}" : "{conversationName} için varsayılan izinler değiştirildi", + "Could not modify default permissions for {conversationName}" : "{conversationName} için varsayılan izinler değiştirilemedi", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bu görüşmedeki katılımcıların varsayılan izinlerini düzenleyin. Sorumlular bu ayarlardan etkilenmez.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Bu bölümdeki izinler her değiştirildiğinde, daha önce katılımcılara tek tek atanmış özel izinler kaybolur.", + "All permissions" : "Tüm izinler", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Katılımcıların bir çağrı başlatma, bir çağrıya katılma, ses, görüntü ve ekran paylaşımını açma izinleri vardır.", + "Restricted" : "Kısıtlanmış", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Katılımcılar yalnızca çağrılara katılabilir, ancak bir sorumlu izinlerini el ile verene kadar ses, görüntü veya ekran paylaşımını açamaz.", + "Advanced permissions" : "Gelişmiş izinler", + "Edit permissions" : "İzinleri düzenle", + "Conversation settings" : "Görüşme ayarları", + "Basic Info" : "Temel bilgiler", + "Personal" : "Kişisel", + "Moderation" : "Yönetim", + "Setup overview" : "Kurulum özeti", + "Live transcription" : "Canlı yazıya dönüştürme", + "Enable live transcription" : "Canlı yazıya dönüştürmeyi aç", + "Breakout Rooms" : "Çalışma odaları", + "Matterbridge" : "Matterbridge", + "Bots" : "Botlar", + "Danger zone" : "Tehlikeli bölge", + "Archive conversation" : "Görüşmeyi arşivle", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arşivlenmiş görüşmeler varsayılan olarak görüşme listesinde gizlenir. Ancak, görüşme adını aradığınızda veya arşivlenmiş görüşmeler listesine eriştiğinizde görüntülenirler.", + "Do you really want to leave \"{displayName}\"?" : "\"{displayName}\" görüşmesinden ayrılmak istediğinize emin misiniz?", + "You can archive this conversation instead." : "Bunun yerine bu görüşmeyi arşivleyebilirsiniz.", + "Leave conversation" : "Görüşmeden ayrıl", + "You need to promote a new moderator before you can leave the conversation" : "Görüşmeden ayrılmadan önce başka bir kullanıcıyı sorumluluğa yükseltmelisiniz", + "Delete conversation" : "Görüşmeyi sil", + "Do you really want to delete \"{displayName}\"?" : "\"{displayName}\" ögesini silmek istediğinize emin misiniz?", + "Error while deleting conversation" : "Görüşme silinirken sorun çıktı", + "Delete all chat messages" : "Tüm sohbet iletilerini sil", + "Do you really want to delete all messages in \"{displayName}\"?" : "\"{displayName}\" içindeki tüm iletileri silmek istediğinize emin misiniz?", + "Error while clearing chat history" : "Sohbet geçmişi silinirken sorun çıktı", + "Be careful, these actions cannot be undone." : "Dikkatli olun, bu işlemler geri alınamaz.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Bir görüşmeden ayrıldıktan sonra, kapalı bir sohbete yeniden katılmak için davet edilmek gerekir. Açık bir sohbete herhangi bir zamanda yeniden katılabilirsiniz.", + "Permanently delete this conversation." : "Bu görüşmeyi kalıcı olarak sil.", + "Delete chat messages" : "Sohbet iletilerini sil", + "Permanently delete all the messages in this conversation." : "Bu görüşmedeki tüm iletileri sil.", + "_%n hour_::_%n hours_" : ["%n saat","%n saat"], + "_%n day_::_%n days_" : ["%n gün","%n gün"], + "_%n week_::_%n weeks_" : ["%n hafta","%n hafta"], + "Custom expiration time" : "Özel geçerlilik süresi", + "Message expiration disabled" : "İleti geçerlilik süresi kapalı", + "Message expiration set: {duration}" : "Ayarlanmış ileti geçerlilik süresi: {duration}", + "Error when trying to set message expiration" : "İleti geçerlilik süresi ayarlanırken sorun çıktı", + "Message expiration" : "Süreli ileti", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Sohbet iletileri süresi belirli bir süre sonra dolacak şekilde ayarlanabilir. Not: Süresi dolan iletlerdeki dosyalar sahibi için silinmez, ancak artık görüşmede paylaşılmaz.", + "Set message expiration" : "İletinin geçerlilik süresini ayarlayın", + "Current message expiration" : "Geçerli iletinin geçerlilik süresi", + "Password copied to clipboard" : "Parola panoya kopyalandı", + "Password could not be copied" : "Parola panoya kopyalanamadı", + "Guest access" : "Konuk erişimi", + "Breakout rooms are not allowed in public conversations." : "Herkese açık görüşmelerde çalışma odaları kullanılamaz", + "Allow guests to join this conversation via link" : "Konuklar bu görüşmeye bağlantı ile katılabilsin", + "Password protection" : "Parola koruması", + "This conversation is password-protected. Guests need password to join" : "Bu görüşme parola ile korunmuş. Konukların katılabilmesi için parolayı bilmeleri gerekir", + "Password protection is needed for public conversations" : "Herkese açık görüşmeler için parola ile korunması gereklidir", + "Set a password" : "Bir parola ayarlayın", + "Change password" : "Parolayı değiştir", + "Enter new password" : "Yeni parolayı yazın", + "Save password" : "Parolayı kaydet", + "Copy password" : "Parolayı kopyala", + "Guests are allowed to join this conversation via link" : "Konuklar bu görüşmeye bağlantı ile katılabilir", + "Guests are not allowed to join this conversation" : "Konuklar bu görüşmeye katılamaz", + "Resend invitations" : "Davetleri yeniden gönder", + "This conversation is open to both registered users and users created with the Guests app" : "Bu görüşmeye katılım, hem hesabı olan kullanıcılara hem de Konuklar uygulaması ile oluşturulan kullanıcılara açık", + "This conversation is open to registered users" : "Bu görüşmeye katılım, hesabı olan kullanıcılara açık", + "This conversation is limited to the current participants" : "Bu görüşmeye katılım, geçerli katılımcılar ile sınırlı", + "You opened the conversation to both registered users and users created with the Guests app" : "Görüşmeye katılımı, hem hesabı olan kullanıcılara ve hem de Konuklar uygulaması ile oluşturulan kullanıcılara açtınız", + "Error occurred when opening or limiting the conversation" : "Görüşme açılır ya da kısıtlanırken sorun çıktı", + "Open conversation to registered users, showing it in search results" : "Görüşme hesabı olan kullanıcılara açılarak arama sonuçlarında görüntülensin", + "Also open to users created with the Guests app" : "Konuklar uygulaması ile oluşturulmuş kullanıcılara da açık", + "Open conversation" : "Açık görüşme", + "Set language spoken in calls" : "Çağrılarda konuşulan dili ayarlayın", + "Languages could not be loaded" : "Diller yüklenemedi", + "Loading languages …" : "Diller yükleniyor…", + "Invalid language" : "Dil geçersiz", + "Default language (English)" : "Varsayılan dil (İngilizce)", + "Default live transcription language set" : "Varsayılan canlı yazıya dönüştürme dili ayarlandı", + "Live transcription language set: {languageName}" : "Ayarlanmış canlı yazıya dönüştürme dili: {languageName}", + "Error when trying to set live transcription language" : "Canlı yazıya dönüştürme dili ayarlanırken sorun çıktı", + "Start time: {date}" : "Başlangıç zamanı: {date}", + "Start time has been updated" : "Başlangıç saati güncellendi", + "Error occurred while updating start time" : "Başlangıç saati güncellenirken sorun çıktı", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Giriş kullanıma alındığında, sorumlu olmayanlar sürmekte olan çağrıdan çıkarılır.", + "Enable lobby, restricting the conversation to moderators" : "Girişi kullanıma al, görüşmeyi sorumlular ile kısıtla", + "Meeting start time" : "Toplantının başlangıç saati", + "Start time (optional)" : "Başlangıç zamanı (isteğe bağlı)", + "Import email participants" : "E-posta katılımcılarını içe aktar", + "You can import a list of email participants from a CSV file." : "E-posta katılımcılarını bir CSV dosyası ile içe aktarabilirsiniz.", + "Poll drafts" : "Anket taslakları", + "Browse poll drafts" : "Anket taslaklarına göz at", + "Error occurred when locking the conversation" : "Görüşme kilitlenirken sorun çıktı", + "Error occurred when unlocking the conversation" : "Görüşmenin kilidi açılırken sorun çıktı", + "Lock conversation" : "Görüşmeyi kilitle", + "This will also terminate the ongoing call." : "Bu işlem ayrıca sürmekte olan çağrıyı sonlandırır.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Görüşmeyi kilitleyerek, ileti gönderilmesini ya da çağrı başlatılmasını engelle", + "Edit" : "Düzenle", + "More information" : "Diğer bilgiler", + "Delete" : "Sil", + "Add new bridged channel to current conversation" : "Geçerli görüşmeye yeni bir köprülenmiş kanal ekle", + "unknown state" : "durum bilinmiyor", + "running" : "çalışıyor", + "not running, check Matterbridge log" : "çalışmıyor. Matterbridge günlüğünü denetleyin", + "not running" : "çalışmıyor", + "Bridge saved" : "Köprü kaydedildi", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge kullanarak çeşitli anlık ileti sistemlerindeki kanallar ile köprü kurabilirsiniz.", + "More info on Matterbridge" : "Matterbridge hakkında ayrıntılı bilgiler", + "Messaging systems" : "İleti sistemleri", + "Enable bridge" : "Köprü kullanılsın", + "Show Matterbridge log" : "Matterbridge günlüğünü görüntüle", + "Log content" : "Günlük içeriği", + "Only moderators are allowed to mention @all" : "Yalnızca sorumlular @all anmasını kullanabilir", + "All participants are allowed to mention @all" : "Tüm katılımcılar @all anmasını kullanabilir", + "Participants are now allowed to mention @all." : "Katılımcılar artık @all anmasını kullanabilir.", + "Mentioning @all has been limited to moderators." : "@all anmasını artık yalnızca sorumlular kullanabilir.", + "Allow participants to mention @all" : "Katılımcılar @all anmasını kullanabilsin", + "Mention permissions" : "Anma izinleri", + "Notifications" : "Bildirimler", + "Notify about calls in this conversation" : "Bu görüşmedeki çağrılar bildirilsin", + "Important conversation" : "Önemli görüşme", + "\"Do not disturb\" user status is ignored for important conversations" : "Önemli görüşmeler için \"Rahatsız etmeyin\" kullanıcı durumu yok sayılır", + "Sensitive conversation" : "Ciddi görüşme", + "Message preview will be disabled in conversation list and notifications" : "Görüşme listesi ve bildirimlerde ileti ön izlemesi kapatılacak", + "Recording consent is required for calls in this conversation" : "Bu görüşmedeki çağrılar için kayıt alma rızası istenir", + "Recording consent is not required for calls in this conversation" : "Bu görüşmedeki çağrılar için kayıt alma rızası istenmez", + "Recording consent requirement was updated" : "Kayıt alma rızası güncellendi", + "Error occurred while updating recording consent" : "Kayıt alma rızası güncellenirken sorun çıktı", + "Recording Consent" : "Kayıt alma rızası", + "Recording consent cannot be changed once a call or breakout session has started." : "Bir çağrı ya da çalışma odası oturumu başladıktan sonra kayıt alma rızası değiştirilemez.", + "Require recording consent before joining call in this conversation" : "Bu görüşmedeki çağrılara katılmadan önce kayıt alma rızası istensin", + "Recording consent is required for all calls" : "Tüm çağrılar için kayıt alma rızası istensin", + "SIP dial-in is now possible without PIN requirement" : "Artık PIN kodu gerekmeden SIP araması yapılabilir", + "SIP dial-in is now enabled" : "SIP çevirmeli arama kullanıma alındı", + "SIP dial-in is now disabled" : "SIP çevirmeli arama kullanımdan kaldırıldı", + "Error occurred when enabling SIP dial-in" : "SIP çevirmeli arama kullanıma alınırken sorun çıktı", + "Error occurred when disabling SIP dial-in" : "SIP çevirmeli arama kullanımdan kaldırılırken sorun çıktı", + "Phone and SIP dial-in" : "Telefon ve SIP çevirme", + "Enable phone and SIP dial-in" : "Telefon ve SIP çevirme özelliğini kullanıma al", + "Allow to dial-in without a PIN" : "Pin kodu olmadan numara aranabilsin", + "Ongoing" : "Sürüyor", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n kişi kabul etti","%n kişi kabul etti"], + "_%n person declined_::_%n people declined_" : ["%n kişi reddetti","%n kişi reddetti"], + "_and %n other attachment_::_and %n other attachments_" : ["ve %n diğer ek dosya","ve %n diğer ek dosya"], + "With {displayName}" : "{displayName} ile", + "In {conversation}" : "{conversation} içinde", + "View attachment" : "Ek dosyayı görüntüle", + "Join" : "Katıl", + "View conversation" : "Görüşmeyi görüntüle", + "View event on Calendar" : "Etkinliği takvimde görüntüle", + "Error while creating the conversation" : "Görüşme oluşturulurken sorun çıktı", + "Hello, {displayName}" : "Merhaba, {displayName}", + "Start meeting now" : "Toplantıyı başlat", + "Give your meeting a title" : "Toplantınıza bir ad verin", + "Create and copy link" : "Bağlantıyı oluşturup kopyalayın", + "Create a new conversation" : "Yeni bir görüşme oluştur", + "Join open conversations" : "Açık görüşmelere katıl", + "Call a phone number" : "Bir telefon numarasını ara", + "Scroll backward" : "Geriye kaydır", + "Scroll forward" : "İleriye kaydır", + "Schedule meetings" : "Toplantı zamanla", + "You don't have any upcoming meetings" : "Yaklaşan bir toplantınız yok", + "Open calendar" : "Takvimi aç", + "Unread mentions" : "Okunmamış anmalar", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Anıldığınız iletiler burada görüntülenir. @ ve ardından adlarını yazarak insanları anabilirsiniz", + "Upcoming reminders" : "Yaklaşan anımsatıcılar", + "Message reminders" : "İleti anımsatıcıları", + "Set a reminder on a message to be notified" : "Daha sonra yeniden bilgilendirilmek için bir iletiye bir anımsatıcı ayarlayın", + "Start a group conversation" : "Bir grup görüşmesi başlat", + "Create conversation" : "Görüşme oluştur", + "Enter your name" : "Adınızı yazın", + "Submit name and join" : "Adı gönder ve katıl", + "Do you already have an account?" : "Zaten bir hesabınız var mı?", + "Log in" : "Oturum aç", + "Error while verifying uploaded file" : "Yüklenmiş dosya doğrulanırken sorun çıktı", + "Uploaded file is verified" : "Yüklenmiş dosya doğrulandı", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "İçerik biçimi virgül ile ayrılmış değerlerdir (CSV):
- Başlık satırı zorunlludur ve \"name\",\"email\" veya yalnızca \"email\" ile eşleşmelidir
- Her satıra yalnızca bir kayıt yazılmalıdır (örneğin \"Ali Kaya\",\"alikaya@ornek.tld\")", + "Participants added successfully" : "Katılımcılar eklendi", + "Error while adding participants" : "Katılımcılar eklenirken sorun çıktı", + "Import a file" : "Dosyadan içe aktar", + "Browse" : "Göz at", + "Verifying uploaded file …" : "Yüklenen dosya doğrulanıyor…", + "This might take a moment" : "Bu işlemin tamamlanması biraz zaman alabilir", + "Send invitations" : "Davetleri gönder", + "_%n invalid email_::_%n invalid emails_" : ["%n e-posta adresi geçersiz","%n e-posta adresi geçersiz"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-posta adresi zaten içe aktarılmış ya da çift","%n e-posta adresi zaten içe aktarılmış ya da çift"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n davet gönderilemedi","%n davet gönderilemedi"], + "An error occurred while calling a phone number" : "Bir telefon numarası aranırken bir sorun çıktı", + "Phone number could not be called: {error}" : "Telefon numarası aranamadı: {error}", + "Phone number could not be called" : "Telefon numarası aranamadı", + "Search participants or phone numbers" : "Katılımcı ya da telefon numarası ara", + "Creating the conversation …" : "Görüşme oluşturuluyor…", + "Mark as read" : "Okunmuş olarak işaretle", + "Mark as unread" : "Okunmamış olarak işaretle", + "Remove from favorites" : "Sık kullanılanlardan kaldır", + "Add to favorites" : "Sık kullanılanlara ekle", + "Unarchive conversation" : "Görüşmeyi arşivden çıkar", + "Ignore \"Do not disturb\"" : "\"Rahatsız etmeyin\" yok sayılsın", + "You need to promote a new moderator before you can leave the conversation." : "Görüşmeden ayrılmadan önce başka bir kullanıcıyı sorumluluğa yükseltmelisiniz.", + "Conversation actions" : "Görüşme işlemleri", + "Notify about calls" : "Çağrılar bildirilsin", + "Hide message text" : "İleti yazısı gizlensin", + "Pending invitations" : "Bekleyen davetler", + "Join conversations from other servers" : "Başka sunuculardaki görüşmelere katıl", + "From {user} at {remoteServer}" : "{remoteServer} sunucusundaki {user} kullanıcısından", + "Decline invitation" : "Daveti reddet", + "Accept invitation" : "Daveti kabul et", + "No pending invitations" : "Bekleyen bir davet yok", + "Home" : "Giriş", + "Unread" : "Okunmamış", + "Mentions" : "Anmalar", + "Meetings" : "Toplantılar", + "Alphabetically" : "Alfabetik", + "No followed threads" : "Takip edilen bir yazışma yok", + "No matches found" : "Eşleşen bir sonuç bulunamadı", + "No conversations found" : "Herhangi bir görüşme bulunamadı", + "You have no archived conversations." : "Arşivlenmiş bir görüşmeniz yok.", + "Subscribe to an existing thread or start your own." : "Var olan bir yazışmaya abone olun ya da kendi yazışmanızı başlatın.", + "You have no unread mentions." : "Okunmamış bir anmanız yok.", + "You have no unread messages." : "Okunmamış bir iletiniz yok.", + "An error occurred while performing the search" : "Arama sırasında bir sorun çıktı", + "Conversation list" : "Görüşme listesi", + "Filter conversations by" : "Görüşmeleri şuna göre süz", + "Unread messages" : "Okunmamış iletiler", + "Meeting conversations" : "Toplantı görüşmeleri", + "Clear filters" : "Süzgeçleri temizle", + "New personal note" : "Yeni kişisel not", + "Back to conversations" : "Görüşmelere dön", + "Archived conversations" : "Arşivlenmiş görüşmeler", + "Threads" : "Yazışmalar", + "Clear filter" : "Süzgeci temizle", + "Show more threads" : "Diğer yazışmaları görüntüle", + "App settings" : "Uygulama ayarları", + "Users" : "Kullanıcılar", + "Groups" : "Gruplar", + "Teams" : "Takımlar", + "Federated users" : "Birleşik kullanıcılar", + "New private conversation" : "Yeni özel görüşme", + "Other sources" : "Diğer kaynaklar", + "Open conversations" : "Açık görüşmeler", + "No search results" : "Aramadan bir sonuç alınamadı", + "Users, groups and teams" : "Kullanıcılar, gruplar ve takımlar", + "Users and groups" : "Kullanıcılar ve gruplar", + "Users and teams" : "Kullanıcılar ve takımlar", + "Groups and teams" : "Gruplar ve takımlar", + "New group conversation" : "Yeni grup görüşmesi", + "The meeting will start soon" : "Toplantı yakında başlayacak", + "This meeting is scheduled for {startTime}" : "Bu toplantının başlangıcı {startTime} olarak ayarlanmış", + "You are currently waiting in the lobby" : "Şu anda girişte bekliyorsunuz", + "Enable noise suppression" : "Gürültü engellemeyi aç", + "Reduce background noises for better voice quality" : "Daha iyi ses kalitesi için arka plan gürültüsünü azaltır", + "Enable echo cancellation" : "Yansıma engellemeyi aç", + "Minimize echo effect from own surrounding" : "Çevrenizden kaynaklanan yankı etkisini en aza indirir", + "Enable auto gain control" : "Otomatik güçlendirmeyi aç", + "Dynamically adjust microphone volume for consistent level" : "Tutarlı bir ses düzeyi için mikrofon güçlendirmesini dinamik olarak ayarlar", + "Select microphone" : "Mikrofonu seçin", + "No microphone available" : "Kullanılabilecek bir mikrofon yok", + "Select speaker" : "Konuşmacıyı seçin", + "No speaker available" : "Herhangi bir konuşmacı yok", + "Select camera" : "Kamerayı seçin", + "No camera available" : "Kullanılabilecek bir kamera bulunamadı", + "Select a device" : "Bir aygıt seçin", + "Playing …" : "Çalınıyor…", + "Test speakers" : "Hoparlörleri sına", + "Test" : "Sına", + "Devices" : "Aygıtlar", + "Backgrounds" : "Arka planlar", + "No audio" : "Ses yok", + "No camera" : "Kamera yok", + "Display video as you will see it (mirrored)" : "Görüntü sizin göreceğiniz gibi görüntülensin (ayna yansıması)", + "Display video as others will see it" : "Görüntü diğerlerinin göreceği gibi görüntülensin", + "Calls are not supported in your browser" : "Tarayıcınız çağrıları desteklemiyor", + "Access to microphone is only possible with HTTPS" : "Mikrofona yalnızca HTTPS üzerinden erişilebilir", + "Access to microphone was denied" : "Mikrofona erişim reddedildi", + "Error while accessing microphone" : "Mikrofon erişilirken sorun çıktı", + "Access to camera is only possible with HTTPS" : "Kameraya yalnızca HTTPS üzerinden erişilebilir", + "The call is being recorded." : "Çağrı kaydediliyor.", + "The call might be recorded." : "Çağrının kaydı alınabilir.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Kayıtta sesiniz, kamera görüntünüz ve ekran paylaşımlarınız bulunabilir. Çağrıya katılmadan önce kayıt alma rızası vermeniz gerekir.", + "Give consent to the recording of this call" : "Bu çağrı için kayıt alma rızası verin", + "Show more info" : "Diğer bilgileri görüntüle", + "Audio is not available" : "Ses kullanılamıyor", + "Video is not available" : "Görüntü kullanılamıyor", + "Start recording immediately with the call" : "Kayıt çağrı başlangıcında başlatılsın", + "Notify all participants about this call" : "Bu çağrı tüm katılımcılara bildirilsin", + "Apply settings" : "Ayarları uygula", + "Select virtual office background" : "Sanal ofis arka planını seçin", + "Select virtual home background" : "Sanal ev arka planını seçin", + "Select virtual abstract background" : "Sanal soyut arka planını seçin", + "Select virtual beach background" : "Sanal kumsal arka planını seçin", + "Select virtual park background" : "Sanal park arka planını seçin", + "Select virtual theater background" : "Sanal sahne arka planını seçin", + "Select virtual library background" : "Sanal kütüphane arka planını seçin", + "Select virtual space station background" : "Sanal uzay istasyonu arka planını seçin", + "Error while uploading the file" : "Dosya yüklenirken sorun çıktı", + "Select a file" : "Bir dosya seçin", + "Invalid path selected" : "Seçilen yol geçersiz", + "Select virtual background from file {fileName}" : "{fileName} sanal arka planını seçin", + "Blur" : "Bulanıklaştır", + "Upload" : "Yükle", + "Files" : "Dosyalar", + "(editing)" : "(düzenleniyor)", + "(edited)" : "(düzenlendi)", + "The message has expired or has been deleted" : "İletinin süresi geçmiş ya da silinmiş.", + "Cancel quote" : "Alıntıyı iptal et", + "24 hours" : "24 saat", + "7 days" : "7 gün", + "30 days" : "30 gün", + "Until unpin" : "Sabitleme kaldırılana kadar", + "Clear reminder – {timeLocale}" : "Anımsatıcıyı temizle – {timeLocale}", + "Edited by {actor}" : "{actor} tarafından düzenlendi", + "Pinned by you" : "Sabitledikleriniz", + "Pinned by {actor}" : "{actor} tarafından sabitlenmişler", + "Until {absoluteDate}" : "{absoluteDate} tarihine kadar", + "Message text copied to clipboard" : "İleti yazısı panoya kopyalandı", + "Message text could not be copied" : "İleti yazısı kopyalanamadı", + "Message forwarded to \"Note to self\"" : "İleti \"Kendime not\" olarak iletildi", + "Error while forwarding message to \"Note to self\"" : "İleti \"Kendime not\" olarak iletilirken sorun çıktı", + "A reminder was successfully removed" : "Bir anımsatıcı silindi", + "Error occurred when removing a reminder" : "Bir anımsatıcı silinirken sorun çıktı", + "A reminder was successfully set at {datetime}" : "{datetime} için bir anımsatıcı ayarlandı", + "Error occurred when creating a reminder" : "Anımsatıcı oluşturulurken sorun çıktı", + "Add a reaction to this message" : "Bu iletiye bir tepki ekle", + "Reply" : "Yanıtla", + "More actions" : "Diğer işlemler", + "Set reminder" : "Anımsatıcı ayarla", + "Pin message" : "İletiyi sabitle", + "Unpin message" : "İletinin sabitlemesini kaldır", + "Reply privately" : "Kişisel yanıt gönder", + "Edit message" : "İletiyi düzenle", + "Copy message" : "İletiyi kopyala", + "Copy message link" : "İleti bağlantısını kopyala", + "Go to file" : "Dosyaya git", + "Download file" : "Dosyayı indir", + "Go to thread" : "Yazışmaya git", + "Edit thread details" : "Yazışma ayrıntılarını düzenle", + "Forward message" : "İletiyi ilet", + "Translate" : "Çevir", + "Set custom reminder" : "Özel anımsatıcı ayarla", + "Keep pinned for" : "Şu kadar sabitlensin", + "Set custom period" : "Özel aralık ayarla", + "Close reactions menu" : "Tepkiler menüsünü kapat", + "React with {emoji}" : "{emoji} ile tepki ver", + "React with another emoji" : "Başka bir emoji ile tepki ver", + "Choose a conversation to forward the selected message." : "Seçilmiş iletinin iletileceği bir görüşme seçin.", + "Error while forwarding message" : "İleti iletilirken bir sorun çıktı", + "The message has been forwarded to {selectedConversationName}" : "İleti {selectedConversationName} üzerine iletildi", + "Dismiss" : "Yok say", + "Go to conversation" : "Görüşmeye git", + "Detect language" : "Dili algıla", + "The message could not be translated" : "İleti çevrilemedi", + "Translation copied to clipboard" : "Çeviri panoya kopyalandı", + "Translation could not be copied" : "Çeviri kopyalanamadı", + "Translate message" : "İletiyi çevir", + "Source language to translate from" : "Çevirinin yapılacağı kaynak dil", + "Translate from" : "Kaynak dil", + "Target language to translate into" : "Çevirinin yapılacağı hedef dil", + "Translate to" : "Hedef dil", + "Translating" : "Çevriliyor", + "Copy translated text" : "Çevrilmiş yazıyı kopyala", + "Error when scheduling the message" : "İleti zamanlanırken sorun çıktı", + "Reschedule" : "Yeniden zamanla", + "Send now" : "Şimdi gönder", + "Choose a time" : "Bir zaman seçin", + "Send at custom time" : "Özel bir zamanda gönderilsin", + "Will be sent without notification" : "Bildirim olmadan gönderilecek", + "Message read by everyone who shares their reading status" : "İleti okundu durumunu paylaşan herkes tarafından okundu", + "Message sent" : "İleti gönderildi", + "Sent without notification" : "Bildirim olmadan gönderildi", + "Deleting message" : "İleti siliniyor", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "İleti silindi ancak bir bot ya da Matterbridge yapılandırılmış ve ileti başka hizmetlere aktarılmış olabilir", + "Message deleted successfully" : "İleti silindi", + "Message could not be deleted because it is too old" : "İleti çok eski olduğundan silinemedi", + "Only normal chat messages can be deleted" : "Yalnızca normal sohbet iletileri silinebilir", + "An error occurred while deleting the message" : "İleti silinirken bir sorun çıktı", + "Pinned" : "Sabitlenmiş", + "Your browser does not support playing audio files" : "Tarayıcınız ses dosyalarının oynatılmasını desteklemiyor", + "Contact" : "Kişi", + "{stack} in {board}" : "{stack} {board} panosunda", + "Deck Card" : "Tahta kartı", + "Remove {fileName}" : "{fileName} dosyasını sil", + "Open this location in OpenStreetMap" : "Bu konumu OpenStreetMap üzerinde aç", + "_%n reply_::_%n replies_" : ["%n yanıt","%n yanıt"], + "Sending message" : "İleti gönderiliyor", + "Failed to send the message. Click to try again" : "İleti gönderilemedi. Yeniden denemek için tıklayın", + "Not enough free space to upload file" : "Dosyayı yüklemek için yeterli boş alan yok", + "You cannot send messages to this conversation at the moment" : "Şu anda bu görüşmeye ileti gönderemezsiniz", + "Could not update the message" : "İleti güncellenemedi", + "Reply to thread \"{threadTitle}\"" : "\"{threadTitle}\" konusunu yanıtla", + "_You voted • %n vote_::_You voted • %n votes_" : ["Oy verdiniz • %n oy","Oy verdiniz • %n oy"], + "You voted" : "Oy verdiniz", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Oy vermek için tıklayın • %n oy","Oy vermek için tıklayın • %n oy"], + "Click to vote" : "Oy vermek için tıklayın", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Anket taslağı • %n seçenek","Anket taslağı • %n seçenek"], + "_%n vote_::_%n votes_" : ["%n oy","%n oy"], + "Edit poll draft" : "Anket taslağını düzenle", + "Delete poll draft" : "Anket taslağını sil", + "Open poll" : "Açık anket", + "Closed poll" : "Bitirilmiş anket", + "See results" : "Sonuçları görüntüle", + "Reactions" : "Tepkiler", + "No permission to post reactions in this conversation" : "Bu görüşmeye tepki gönderme izniniz yok", + "and {participant}" : "ve {participant}", + "_and %n other participant_::_and %n other participants_" : ["ve %n diğer katılımcı","ve %n diğer katılımcı"], + "Show all reactions" : "Tüm tepkileri görüntüle", + "Add more reactions" : "Başka tepkiler ekle", + "Show or collapse system messages" : "Sistem iletilerini görüntüle ya da gizle", + "No messages" : "Herhangi bir ileti yok", + "All messages have expired or have been deleted." : "Tüm iletilerin süresi geçmiş ya da silinmiş.", + "Generate summary with AI" : "Yapay zeka ile özet oluştur", + "{author} (pinned by you)" : "{author} (siz sabitlemişsiniz)", + "{author} (pinned by {actor})" : "{author} ({actor} sabitlemiş)", + "Unpin" : "Sabitlemeyi kaldır", + "Cancel search" : "Aramayı iptal et", + "Add a phone number" : "Telefon numarası ekle", + "Error: A password is required to create the conversation." : "Hata: Görüşmeyi oluşturmak için bir parola gereklidir.", + "All set, the conversation \"{conversationName}\" was created." : "Her şey tamam \"{conversationName}\" görüşmesi oluşturuldu.", + "Create a new group conversation" : "Yeni bir grup görüşmesi oluştur", + "Add participants" : "Katılımcı ekle", + "Maximum length exceeded ({maxlength} characters)" : "Olabilecek en fazla uzunluk aşıldı ({maxlength} karakter)", + "Conversation visibility" : "Görüşme görünürlüğü", + "Allow guests to join via link" : "Konuklar bağlantı ile katılabilsin", + "Enter password" : "Parolayı yazın", + "This conversation has been locked" : "Bu görüşme kilitlenmiş", + "No permission to post messages in this conversation" : "Bu görüşmeye ileti gönderme izniniz yok", + "Joining conversation …" : "Görüşmeye giriliyor…", + "Write a message without notification" : "Bildirim olmadan bir ileti yazın", + "Create a thread silently" : "Sessizce bir yazışma oluştur", + "Create a thread" : "Bir yazışma oluştur", + "Send message silently" : "Sessizce ileti gönder", + "Send message" : "İleti gönder", + "Send without notification" : "Bildirim olmadan gönder", + "The participant will not be notified about new messages" : "Yeni iletler katılımcıya bildirilmeyecek", + "Participants will not be notified about new messages" : "Yeni iletler katılımcılara bildirilmeyecek", + "Message will be sent {datetimeString}" : "İleti {datetimeString} zamanında gönderilecek", + "Thread title is required" : "Yazışma başlığı yazılmalıdır", + "Message text is required" : "İleti içeriği yazılmalıdır", + "The message could not be edited" : "İleti düzenlenemedi", + "File to share" : "Paylaşılacak dosya", + "File upload is not available in this conversation" : "Bu görüşmeye dosya yüklenemez", + "Message was successfully scheduled" : "İleti zamanlandı", + "Add emoji" : "Emoji ekle", + "Adding a mention will only notify users who did not read the message." : "Anma eklendiğinde yalnızca iletiyi henüz okumamış olan kullanıcılar bilgilendirilir", + "Thread title" : "Yazışma başlığı", + "Send later" : "Daha sonra gönder", + "Show scheduled messages" : "Zamanlanmış iletileri görüntüle", + "Cancel editing" : "Düzenlemeyi iptal et", + "Schedule message" : "İletiyi zamanla", + "{user} is out of office and might not respond." : "{user} iş yeri dışında ve yanıt veremeyebilir.", + "Absence period: {startDate} - {endDate}" : "Bulunmama aralığı: {startDate} - {endDate}", + "Replacement:" : "Yedek:", + "Share from {nextcloud}" : "{nextcloud} üzerinden paylaş", + "Share from Files" : "Dosyalar uygulamasından paylaş", + "Share files to the conversation" : "Görüşmede dosya paylaş", + "Upload from device" : "Aygıttan yükle", + "Create new poll" : "Anket ekle", + "Smart picker" : "Akıllı seçici", + "Record voice message" : "Ses iletisi kaydet", + "End recording and send" : "Kaydı bitirip gönder", + "Dismiss recording" : "Kaydı sil", + "Access to the microphone was denied" : "Mikrofona erişim reddedildi", + "Microphone either not available or disabled in settings" : "Mikrofon kullanılamıyor ya da ayarlardan kapatılmış", + "Error while recording audio" : "Ses kaydedilirken sorun çıktı", + "Voice message {time} ({conversation})" : "Sesli ileti {time} ({conversation})", + "Generating summary of unread messages …" : "Okunmamış iletilerin özeti oluşturuluyor…", + "Summary is AI generated and might contain mistakes" : "Özet yapay zeka ile oluşturulmuştur ve hatalar olabilir", + "Error occurred during a summary generation" : "Özet oluşturulurken bir sorun çıktı", + "New file" : "Yeni dosya", + "Blank" : "Boş", + "Error while creating file" : "Dosya oluşturulurken sorun çıktı", + "Create and share a new file" : "Yeni bir dosya oluşturup paylaş", + "Name of the new file" : "Yeni dosyanın adı", + "Create file" : "Dosya oluştur", + "Someone is typing …" : "Biri yazıyor…", + "{user1} is typing …" : "{user1} yazıyor…", + "{user1} and {user2} are typing …" : "{user1} ve {user2} yazıyor…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ve {user3} yazıyor…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ve %n diğer kişi yazıyor…","{user1}, {user2}, {user3} ve %n diğer kişi yazıyor…"], + "Add more files" : "Başka dosya ekle", + "Send" : "Gönder", + "In this conversation {user} can:" : "Bu görüşmede {user} şunları yapabilir:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} içindeki katılımcıların varsayılan izinlerini düzenle", + "Start a call" : "Bir çağrı başlat", + "Skip the lobby" : "Girişi atla", + "Can post messages" : "İleti gönderebilir", + "Can post messages and reactions" : "İleti ve tepki gönderebilir", + "Can add reactions" : "Tepki verebilir", + "Enable the microphone" : "Mikrofonu aç", + "Enable the camera" : "Kamerayı aç", + "Share the screen" : "Ekranı paylaş", + "Update permissions" : "İzinleri güncelle", + "Updating permissions" : "İzinler güncelleniyor", + "No poll drafts" : "Herhangi bir anket taslağı yok", + "There is no poll drafts yet saved for this conversation" : "Bu görüşmede kaydedilmiş bir anket taslağı yok", + "Create poll in {name}" : "{name} içinde anket oluştur", + "Create poll" : "Anket ekle", + "Error while importing poll" : "Anket içe aktarılırken sorun çıktı", + "Question" : "Soru", + "Ask a question" : "Bir soru sorun", + "Import draft from file" : "Taslağı dosyadan içe aktar", + "Answers" : "Yanıtlar", + "Answer {option}" : "{option} yanıtı", + "Delete poll option" : "Anket seçeneğini sil", + "Add answer" : "Yanıt ekle", + "Settings" : "Ayarlar", + "Anonymous poll" : "Anonim anket", + "Multiple answers" : "Birden çok yanıt", + "Save as draft" : "Taslak olarak kaydet", + "Export draft to file" : "Taslağı dosyaya dışa aktar", + "_Final results • %n vote_::_Final results • %n votes_" : ["Sonuçlar • %n oy","Sonuçlar • %n oy"], + "Your vote is anonymous" : "Oyunuz anonim", + "You voted for this option" : "Bu seçenek için oy verdiniz", + "End poll" : "Anketi sonlandır", + "Change your vote" : "Oyunuzu değiştirin", + "Withdraw vote" : "Oyu geri çek", + "Results" : "Sonuçlar", + "Voted participants" : "Oy veren katılımcılar", + "Send a message to \"{roomName}\"" : "\"{roomName}\" odasına bir ileti gönder", + "Hide list of participants" : "Katılımcı listesini gizle", + "Show list of participants" : "Katılımcı listesini görüntüle", + "Assistance requested in {roomName}" : "{roomName} odasından yardım istendi", + "The message was sent to \"{roomName}\"" : "İleti tüm \"{roomName}\" odasına gönderildi", + "Dismiss request for assistance" : "Yardım isteğini yok say", + "Send message to room" : "Odaya ileti gönder", + "Back to main room" : "Ana odaya dön", + "Back to your room" : "Odanıza dönün", + "Message all rooms" : "Tüm odalara ileti gönder", + "Start session" : "Oturumu başlat", + "Start a call before you start a breakout room session" : "Bir çalışma odası oturumunu başlatmadan önce bir çağrı başlat", + "Stop session" : "Oturumu bitir", + "The message was sent to all breakout rooms" : "İleti tüm çalışma odalarına gönderildi", + "Send a message to all breakout rooms" : "Tüm çalışma odalarına ileti gönder", + "Breakout rooms are not started" : "Çalışma odaları açılmamış", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Yüksek başarımlı arka yüz olmadan yapılan aramalar bağlantı sorunlarına ve aygıtlarda yüksek yük oluşmasına neden olabilir. {linkstart}Ayrıntılı bilgi alın{linkend}", + "Talk setup incomplete" : "Konuş kurulumu tamamlanmamış", + "Disable lobby" : "Giriş kullanılmasın", + "Settings for participant \"{user}\"" : "\"{user}\" kullanıcısının ayarları", + "Participant \"{user}\"" : "\"{user}\" katılımcısı", + "moderator" : "sorumlu", + "bot" : "bot", + "guest" : "konuk", + "Ringing …" : "Çalıyor…", + "Call rejected" : "Çağrı reddedildi", + "{time} talking …" : "{time} konuşuyor…", + "{time} talking time" : "{time} konuşma süresi", + "Raised their hand" : "Ellerini kaldırdılar", + "Joined with video" : "Görüntü ile katıldı", + "Joined via phone" : "Telefon ile katıldı", + "Joined with audio" : "Ses ile katıldı", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Yazı {maxLength} ya da daha az karakter uzunluğunda olmalıdır. Şu andaki yazı uzunluğu {charactersCount} karakter.", + "Remove group and members" : "Grubu ve üyeleri sil", + "Remove team and members" : "Takımı ve üyelerini kaldır", + "Remove participant" : "Katılımcıyı çıkar", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "\"{displayName}\" grubunu ve üyelerini bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "\"{displayName}\" takımını ve üyelerini bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Do you really want to remove {displayName} from this conversation?" : "{displayName} katılımcısını bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Notification was sent to {displayName}" : "Bildirim {displayName} alıcısına gönderildi", + "Could not send notification to {displayName}" : "Bildirim {displayName} alıcısına gönderilemedi ", + "Permissions granted to {displayName}" : "{displayName} için verilmiş izinler", + "Could not modify permissions for {displayName}" : "{displayName} için izinler değiştirilemedi", + "Permissions removed for {displayName}" : "{displayName} için izinler kaldırıldı", + "Permissions set to default for {displayName}" : "{displayName} için izinler varsayılanlara sıfırlandı", + "Phone number could not be hung up" : "Telefon numarası kapatılamadı", + "Phone number could not be put on hold" : "Telefon numarası beklemeye alınamadı", + "Phone number could not be muted" : "Telefon numarasının sesi kısılamadı", + "Phone number could not be unmuted" : "Telefon numarasının sesi açılamadı", + "DTMF message could not be sent" : "Arama tonu iletisi gönderilemedi", + "Phone number copied to clipboard" : "Telefon numarası panoya kopyalandı", + "Phone number could not be copied" : "Telefon numarası kopyalanamadı", + "in the lobby" : "girişte", + "Dial out phone" : "Telefonu ara", + "Hang up phone" : "Telefonu kapat", + "Move back to lobby" : "Girişe al", + "Move to conversation" : "Görüşmeye al", + "Dial-in PIN" : "Arama PIN kodu", + "Demote from moderator" : "Sorumluluktan çıkar", + "Promote to moderator" : "Sorumluluğa yükselt", + "Resend invitation" : "Daveti yeniden gönder", + "Send call notification" : "Çağrı bildirimi gönder", + "Dial out phone number" : "Telefon numarasını ara", + "Resume call for phone number" : "Telefon numarası çağrısına geri dön", + "Put phone number on hold" : "Telefon numarası çağrısını beklemeye al", + "Unmute phone number" : "Telefon numarasının sesini aç", + "Mute phone number" : "Telefon numarasının sesini kapat", + "Copy phone number" : "Telefon numarasını kopyala", + "Reset custom permissions" : "Özel izinleri sıfırla", + "Grant all permissions" : "Tüm izinleri ver", + "Remove all permissions" : "Tüm izinleri kaldır", + "Also ban from this conversation" : "Bu görüşmede de yasaklansın", + "Internal note (reason to ban)" : "İç not (yasaklama nedeni)", + "Remove" : "Kaldır", + "Permissions modified for {displayName}" : "{displayName} için izinler değiştirildi", + "Add users, groups or teams" : "Kullanıcı, grup ya da takım ekle", + "Add users or groups" : "Kullanıcı ya da grup ekle", + "Add users or teams" : "Kullanıcı ya da takım ekle", + "Add users" : "Kullanıcı ekle", + "Add groups or teams" : "Grup ya da takım ekle", + "Add groups" : "Grup ekle", + "Add teams" : "Takım ekle", + "Add other sources" : "Başka kaynaklar ekle", + "Add emails" : "E-posta adreslerini ekle", + "Integrations" : "Bütünleştirmeler", + "Add federated users" : "Birleştirilmiş kullanıcılar ekle", + "Searching …" : "Aranıyor …", + "Search for more users" : "Diğer kullanıcıları ara", + "You can search or add participants via name, email, or Federated Cloud ID" : "Katılımcıları, ad, e-posta adresi ya da birleşik bulut kodu ile arayabilirsiniz", + "Search or add participants" : "Katılımcı arayın ya da ekleyin", + "Invitation was sent to {actorId}" : "{actorId} için davet gönderildi", + "An error occurred while adding the participants" : "Katılımcılar eklenirken bir sorun çıktı", + "A new group conversation with selected participant will be created" : "Seçilmiş katılımcıyla yeni bir grup görüşmesi oluşturulacak", + "Participants" : "Katılımcılar", + "Pinned by a deleted user" : "Silinmiş bir kullanıcı sabitlemiş", + "Participants ({count})" : "Katılımcılar ({count})", + "Open chat" : "Sohbeti aç", + "You have new unread messages in the chat." : "Sohbette okumadığınız yeni iletiler var.", + "You have been mentioned in the chat." : "Sohbette anıldınız.", + "Search messages" : "İleti arama", + "Chat" : "Sohbet", + "Details" : "Ayrıntılar", + "Shared items" : "Paylaşılmış ögeler", + "Search in {name}" : "{name} içinde ara", + "Threads in {name}" : "{name} içindeki yazışmalar", + "{actor} in {conversation}" : "{actor}, {conversation} içinde", + "Search messages …" : "İleti ara…", + "Search options" : "Arama seçenekleri", + "From User" : "Şu kullanıcıdan", + "Since" : "Şu zamandan başlayarak", + "Until" : "Bitiş", + "No results found" : "Herhangi bir sonuç bulunamadı", + "Load more results" : "Diğer sonuçları yükle", + "Recent threads" : "Son yazışmalar", + "Projects" : "Projeler", + "No shared items" : "Paylaşılmış bir öge yok", + "Thread notifications" : "Yazışma bildirimleri", + "Thread actions" : "Yazışma işlemleri", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Bir görüşme bağlantısı", + "No open conversations found" : "Açık herhangi bir görüşme yok", + "Either there are no open conversations or you joined all of them." : "Açık bir görüşme yok ya da tümüne katılmışsınız.", + "Check spelling or use complete words." : "Yazım denetlensin ya da tam sözcükler kullanılsın.", + "Search conversations or users" : "Görüşme ya da kullanıcı arama", + "Select conversation" : "Görüşme seçin", + "Number length is not valid" : "Numara uzunluğu geçersiz", + "Region code is not valid" : "Bölge kodu geçersiz", + "Number length is too short" : "Numara çok kısa", + "Number length is too long" : "Numara çok uzun", + "Number is not valid" : "Numara geçersiz", + "Phone numbers" : "Telefon numaraları", + "Display name: {name}" : "Görüntülenecek ad: {name}", + "Edit display name" : "Görüntülenecek adı düzenle", + "Display name (required)" : "Görüntülenecek ad (zorunlu)", + "Save name" : "Adı kaydet", + "I picked message bubbles" : "İleti balonlarını seçtim", + "I picked the list style" : "Liste biçemini seçtim", + "Error while setting personal setting" : "Kişisel ayarlarınız kaydedilirken sorun çıktı", + "Error while saving sounds setting" : "Ses ayarları kaydedilirken sorun çıktı", + "Compact conversations list" : "Küçük görüşmeler listesi", + "Chat appearance" : "Sohbet görünümü", + "Messages list" : "İleti listesi", + "Message bubbles" : "İleti balonları", + "Play sounds when participants join or leave a call" : "Katılımcılar çağrıya katıldığında ya da ayrıldığında ses çalınsın", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Üreticinin teknik sınırlamaları nedeniyle şu anda iPad ve iPhone aygıtlarında kullanılamıyor.", + "Notification settings" : "Bildirim ayarları", + "Sounds for chat and call notifications" : "Sohbet ve çağrı bildirimlerinin sesleri", + "Invalid language ({languageId})" : "Dil geçersiz ({languageId})", + "Default language" : "Varsayılan dil", + "Default language ({languageName})" : "Varsayılan dil ({languageName})", + "Error when trying to load the available live translation languages" : "Canlı çeviri için kullanılabilecek diller yüklenirken sorun çıktı", + "Error when trying to set live translation language" : "Canlı çeviri dili ayarlanırken sorun çıktı", + "Set language used to show the transcriptions" : "Çevirilerin görüntüleneceği dili seçin", + "Select location for attachments" : "Ek dosyaların konumunu seçin", + "Error while setting attachment folder" : "Ek dosyalar klasörü ayarlanırken sorun çıktı", + "Error while setting read status privacy" : "Okundu durumu gizliliği ayarı kaydedilemedi", + "Error while setting typing status privacy" : "Yazıyor durumu gizliliği ayarı kaydedilemedi", + "Error while setting default media state" : "Varsayılan ortam durumu ayarlanırken sorun çıktı", + "Turn camera and microphone off by default" : "Varsayılan olarak kamera ve mikrofon kapatılsın", + "Blur camera background by default" : "Varsayılan olarak arka plan bulanıklaştırılsın", + "Skip device preview before joining a call" : "Bir çağrıya katılmadan önce aygıt ön izleme ekranı görüntülenmesin", + "Appearance & Sounds" : "Görünüm ve sesler", + "Privacy" : "Gizlilik", + "Send read receipts" : "Okundu bilgisi gönderilsin", + "When off, all read statuses will be hidden" : "Kapatıldığında, tüm okunma durumları gizlenir", + "Share typing status" : "Yazma durumu paylaşılsın", + "When off, all typing indicators will be hidden" : "Kapatıldığında, tüm yazma göstergeleri gizlenir", + "Attachments folder" : "Ek dosya klasörü", + "Toggle full screen" : "Tam ekrana geç", + "Return to Home screen" : "Girişe dön", + "Search" : "Arama", + "Shortcuts while in a chat" : "Sohbet sırasında kullanılabilecek kısayol tuşları", + "Focus the chat input" : "Sohbet girişine odaklan", + "Unfocus the chat input to use shortcuts" : "Kısayol tuşlarını kullanmak için odağı sohbet girişinden al", + "Edit your last message" : "Son iletinizi düzenleyin", + "Shortcuts while in a call" : "Çağrı sırasında kullanılabilecek kısayol tuşları", + "Camera on and off" : "Kamerayı açma ve kapatma", + "Microphone on and off" : "Mikrofonu açma ve kapatma", + "Raise or lower hand" : "El kadır ya da indir", + "Push to talk or push to mute" : "Bas konuş ya da bas kıs", + "Zoom-in / zoom-out a screen share" : "Bir ekran paylaşımında yakınlaştırma / uzaklaştırma", + "Mouse wheel" : "Fare tekerleği", + "Start call silently" : "Çağrıyı sessizce başlat", + "Start call" : "Çağrıyı başlat", + "End call" : "Çağrıyı sonlandır", + "The server was updated, you cannot start or join a call." : "Sunucu güncellenmiş. Bir çağrı başlatamaz ya da katılamazsınız.", + "This call has just ended" : "Bu çağrı sona erdi", + "You will be able to join the call only after a moderator starts it." : "Çağrıya ancak bir sorumlu çağrıyı başlattıktan sonra katılabilirsiniz.", + "End call for everyone" : "Çağrıyı herkes için sonlandır", + "Starting the recording" : "Kayıt başlatılıyor", + "Recording" : "Kaydediliyor", + "The call has been running for one hour." : "Çağrı bir saattir sürüyor.", + "Cancel recording start" : "Kaydı başlatmaktan vazgeç", + "Stop recording" : "Kaydı durdur", + "Send a reaction" : "Tepki ver", + "React with {reaction}" : "{reaction} ile tepki ver", + "All tasks done!" : "Tüm görevler tamamlandı!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n görev","{done} / %n görev"], + "Add participants to this call" : "Bu çağrıya katılımcılar ekle", + "_%n participant in call_::_%n participants in call_" : ["Çağrıda %n katılımcı var","Çağrıda %n katılımcı var"], + "Scheduled messages" : "Zamanlanmış iletiler", + "You are not allowed to enable screensharing" : "Ekranı paylaşma izniniz yok", + "No screensharing" : "Ekran paylaşımı yok", + "Screensharing options" : "Ekran paylaşımı ayarları", + "Enable screensharing" : "Ekranı paylaş", + "Bad sent video and screen quality." : "Gönderilen görüntü ve ekran kalitesi kötü.", + "Bad sent screen quality." : "Gönderilen ekran kalitesi kötü.", + "Bad sent video quality." : "Gönderilen görüntü kalitesi kötü.", + "Bad sent audio, video and screen quality." : "Gönderilen ses, görüntü ve ekran kalitesi kötü.", + "Bad sent audio and screen quality." : "Gönderilen ses ve ekran kalitesi kötü.", + "Bad sent audio and video quality." : "Gönderilen ses ve görüntü kalitesi kötü.", + "Bad sent audio quality." : "Gönderilen ses kalitesi kötü.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşırken arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Disable background blur" : "Arka plan bulanıklaştırmayı kapat", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşırken kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekran paylaşımınızı göremeyebilir.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi göremeyebilir.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlayamayabilir ve sizi göremeyebilir. Durumu iyileştirmek için ekran paylaşırken arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve göremeyebilir. Durumu iyileştirmek için ekran paylaşırken kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşımınızı kapatmayı deneyin.", + "Disable screenshare" : "Ekran paylaşımını kapat", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlayamayabilir ve sizi göremeyebilir. Durumu iyileştirmek için arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve göremeyebilir. Durumu iyileştirmek için kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir.", + "Screen sharing is not supported by your browser." : "Tarayıcınız ekran paylaşımını desteklemiyor.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekran paylaşımı yapabilmek için sayfa HTTPS kullanılarak yüklenmelidir.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekran paylaşımı için sayfa HTTPS kullanılarak yüklenmiş olmalıdır.", + "An error occurred while starting screensharing." : "Ekran paylaşımı başlatılırken bir sorun çıktı.", + "Select virtual background" : "Sanal arka planı seçin", + "Show your screen" : "Ekranımı görüntüle", + "Stop screensharing" : "Ekran paylaşımını durdur", + "Mute others" : "Diğerlerinin sesini kıs", + "Start recording" : "Kaydı başlat", + "Set up breakout rooms" : "Çalışma odalarını hazırla", + "Download attendance list" : "Katılımcı listesini indir", + "Open Calendar" : "Takvimi aç", + "Remove participant {name}" : "{name} katılımcısını çıkar", + "Would you like to delete this conversation?" : "Bu görüşmeyi silmek ister misiniz?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Bu görüşme, %n gün boyunca etkileşim olmazsa herkesten otomatik olarak silinecek.","Bu görüşme, %n gün boyunca etkileşim olmazsa herkesten otomatik olarak silinecek."], + "Are you sure you want to delete this conversation?" : "Bu görüşmeyi silmek istediğinize emin misiniz?", + "Delete now" : "Şimdi sil", + "Keep" : "Tut", + "Open dialpad" : "Numara klavyesini aç", + "Select a region" : "Bir bölge seçin", + "Local time: {time}" : "Yerel zaman: {time}", + "Scheduled {datetime}" : "{datetime} zamanına ayarlanmış", + "Scheduled for {datetime}" : "{datetime} için zamanlanmış", + "Search …" : "Arama…", + "Message without mention" : "Anma olmadan ileti", + "Mention myself" : "Beni an", + "Mention everyone" : "Herkesi an", + "Select a conversation" : "Bir görüşme seçin", + "Select a mode" : "Bir kip seçin", + "You do not have permissions to access this conversation." : "Bu görüşmeye erişme izniniz yok.", + "Join a different conversation or start a new one." : "Başka bir görüşmeye katılın ya da yeni bir görüşme başlatın.", + "The conversation does not exist" : "Görüşme bulunamadı", + "Join a conversation or start a new one!" : "Var olan bir görüşmeye katılın ya da yeni bir görüşme başlatın!", + "Duplicate session" : "Çift oturum", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Bu görüşme başka bir sekmede de açılmış. Geçerli sunucu sürümü, bir konuşmanın birden fazla sekmede açılmasını desteklemiyor.", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\" ile görüşme başlatılıyor", + "Join a conversation or start a new one" : "Bir görüşmeye katılın ya da yeni bir görüşme başlatın", + "Error while joining the conversation" : "Görüşmeye katılırken sorun çıktı", + "Another user" : "Başka bir kullanıcı", + "Hey! Are you using the list style or message bubbles?" : "Liste biçimini mi ileti balonları biçemini mi kullanıyorsunuz?", + "Nextcloud URL" : "Nextcloud adresi", + "Nextcloud user" : "Nextcloud kullanıcısı", + "User password" : "Kullanıcı parolası", + "Talk conversation" : "Konuş görüşmesi", + "Skip TLS verification" : "TLS doğrulaması atlansın", + "Matrix server URL" : "Matrix sunucusu adresi", + "User" : "Kullanıcı", + "Matrix channel" : "Matrix kanalı", + "Mattermost server URL" : "Mattermost sunucu adresi", + "Mattermost user" : "Mattermost kullanıcısı", + "Team name" : "Takım adı", + "Channel name" : "Kanal adı", + "Rocket.Chat server URL" : "Rocket.Chat sunucusunun adresi", + "User name or email address" : "Kullanıcı adı ya da e-posta adresi", + "Rocket.Chat channel" : "Rocket.Chat kanalı", + "Zulip server URL" : "Zulip sunucusunun adresi", + "Bot user name" : "Bot kullanıcı adı", + "Bot API key" : "Bot API anahtarı", + "Zulip channel" : "Zulip kanalı", + "API token" : "API kodu", + "Slack channel" : "Slack kanalı", + "Server ID or name" : "Sunucu kimliği ya da adı", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal kimliği (\"ID:\" ön ekiyle) ya da ad", + "Channel" : "Kanal", + "Login" : "Oturum aç", + "Chat ID" : "Sohbet kimliği", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC sunucusunun adresi (örnek: chat.freenode.net:6667)", + "Nickname" : "Takma ad", + "Connection password" : "Bağlantı parolası", + "IRC channel" : "IRC kanalı", + "Channel password" : "Kanal parolası", + "NickServ nickname" : "NickServ takma adı", + "NickServ password" : "NickServ parolası", + "Use TLS" : "TLS kullanılsın", + "Use SASL" : "SASL kullanılsın", + "Tenant ID" : "Kiracı kimliği", + "Client ID" : "İstemci kimliği", + "Team ID" : "Takım kimliği", + "Thread ID" : "Konu kimliği", + "XMPP/Jabber server URL" : "XMPP/Jabber sunucusunun adresi", + "MUC server URL" : "MUC sunucusunun adresi", + "Jabber ID" : "Jabber kimliği", + "Pinned messages" : "Sabitlenmiş iletiler", + "Media" : "Ortam", + "Polls" : "Anketler", + "Deck cards" : "Tahta kartları", + "Voice messages" : "Sesli iletiler", + "Locations" : "Konumlar", + "Call recordings" : "Çağrı kayıtları", + "Audio" : "Ses", + "Show all pinned messages" : "Tüm sabitlenmiş iletileri görüntüle", + "Show all media" : "Tüm ortamları görüntüle", + "Show all files" : "Tüm dosyaları görüntüle", + "Show all polls" : "Tüm anketleri görüntüle", + "Show all deck cards" : "Tüm tahta kartlarını görüntüle", + "Show all voice messages" : "Tüm sesli iletileri görüntüle", + "Show all locations" : "Tüm konumları görüntüle", + "Show all call recordings" : "Tüm çağrı kayıtlarını görüntüle", + "Show all audio" : "Tüm sesleri görüntüle", + "Show all other" : "Tüm diğerlerini görüntüle", + "Follow conversation settings" : "Görüşme ayarları kullanılsın", + "Group" : "Grup", + "Team" : "Takım", + "You reconnected to the call" : "Çağrı ile yeniden bağlantı kurdunuz", + "{actor} reconnected to the call" : "{actor} çağrı ile yeniden bağlantı kurdu", + "You added {user0} and {user1}" : "{user0} ve {user1} kullanıcılarını eklediniz", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["{user0}, {user1} ve %n diğer katılımcıyı eklediniz","{user0}, {user1} ve %n diğer katılımcıyı eklediniz"], + "An administrator added you and {user0}" : "Bir yönetici sizi ve {user0} kullanıcısını ekledi", + "{actor} added you and {user0}" : "{actor} sizi ve {user0} kullanıcısını ekledi", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi"], + "An administrator added {user0} and {user1}" : "Bir yönetici {user0} ve {user1} kullanıcısını ekledi", + "{actor} added {user0} and {user1}" : "{actor}, {user0} ve {user1} kullanıcılarını ekledi", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi"], + "You removed {user0} and {user1}" : "{user0} ve {user1} kullanıcılarını çıkardınız", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["{user0}, {user1} ve %n diğer katılımcıyı çıkardınız","{user0}, {user1} ve %n diğer katılımcıyı çıkardınız"], + "An administrator removed you and {user0}" : "Bir yönetici sizi ve {user0} kullanıcısını çıkardı", + "{actor} removed you and {user0}" : "{actor} sizi ve {user0} kullanıcısını çıkardı", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı"], + "An administrator removed {user0} and {user1}" : "Bir yönetici {user0} ve {user1} kullanıcılarını çıkardı", + "{actor} removed {user0} and {user1}" : "{actor}, {user0} ve {user1} kullanıcılarını çıkardı", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı"], + "You and {user0} joined the call" : "Siz ve {user0} kullanıcısı çağrıya katıldı", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Siz, {user0} ve %n diğer katılımcı çağrıya katıldı","Siz, {user0} ve %n diğer katılımcı çağrıya katıldı"], + "{user0} and {user1} joined the call" : "{user0} ve {user1} çağrıya katıldı", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ve %n diğer katılımcı çağrıya katıldı","{user0}, {user1} ve %n diğer katılımcı çağrıya katıldı"], + "You and {user0} left the call" : "Siz ve {user0} çağrıdan ayrıldınız", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Siz, {user0} ve %n diğer katılımcı çağrıdan ayrıldı","Siz, {user0} ve %n diğer katılımcı çağrıdan ayrıldı"], + "{user0} and {user1} left the call" : "{user0} ve {user1} çağrıdan ayrıldı", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ve %n diğer katılımcı çağrıdan ayrıldı","{user0}, {user1} ve %n diğer katılımcı çağrıdan ayrıldı"], + "You promoted {user0} and {user1} to moderators" : "{user0} ve {user1} kullanıcılarını sorumluluğa yükselttiniz", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükselttiniz","{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükselttiniz"], + "An administrator promoted you and {user0} to moderators" : "Bir yönetici sizi ve {user0} kullanıcısını sorumluluğa yükseltti", + "{actor} promoted you and {user0} to moderators" : "{actor}, sizi ve {user0} kullanıcısını sorumluluğa yükseltti", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti"], + "An administrator promoted {user0} and {user1} to moderators" : "Bir yönetici {user0} ve {user1} kullanıcısını sorumluluğa yükseltti", + "{actor} promoted {user0} and {user1} to moderators" : "{actor}, {user0} ve {user1} kullanıcılarını sorumluluğa yükseltti", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti"], + "You demoted {user0} and {user1} from moderators" : "{user0} ve {user1} kullanıcılarını sorumluluktan çıkardınız", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardınız","{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardınız"], + "An administrator demoted you and {user0} from moderators" : "Bir yönetici sizi ve {user0} kullanıcısını sorumluluktan çıkardı", + "{actor} demoted you and {user0} from moderators" : "{actor}, sizi ve {user0} kullanıcısını sorumluluktan çıkardı", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı"], + "An administrator demoted {user0} and {user1} from moderators" : "Bir yönetici {user0} ve {user1} kullanıcısını sorumluluktan çıkardı", + "{actor} demoted {user0} and {user1} from moderators" : "{actor}, {user0} ve {user1} kullanıcılarını sorumluluktan çıkardı", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı"], + "You:" : "Siz:", + "You: {lastMessage}" : "Siz: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Sunucu güncellenmiş.", + "(edited by you)" : "(sizin tarafından düzenlendi)", + "(edited by a deleted user)" : "(silinmiş bir kullanıcı tarafından düzenlendi)", + "(edited by {moderator})" : "({moderator} tarafından düzenlendi)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Başka bir pencereden ya da aygıttan da katıldığınız görüşmeye yeniden katılmaya çalışıyorsunuz. Nextcloud Konuş henüz bu özelliği desteklemiyor. Ne yapmak istersiniz?", + "Leave this page" : "Sayfadan ayrılmak", + "Join here" : "Buradan katılmak", + "Deck card has been posted to {conversation}" : "{conversation} görüşmesine Tahta kartı yapıştırıldı", + "An error occurred while posting deck card to conversation" : "Tahta kartı seçilmiş görüşmeye gönderilirken bir sorun çıktı", + "Post to a conversation" : "Bir görüşmeye gönder", + "Post to conversation" : "Görüşmeye gönder", + "The recording failed. Please contact your administrator." : "Kayıt yapılamadı. lütfen yöneticiniz ile görüşün.", + "Location has been posted to {conversation}" : "{conversation} görüşmesine Konum yapıştırıldı", + "An error occurred while posting location to conversation" : "Konum seçilmiş görüşmeye gönderilirken bir sorun çıktı.", + "Share to a conversation" : "Bir görüşmeye gönder", + "Share to conversation" : "Görüşmeye gönder", + "In conversation" : "Görüşmede", + "Search in conversation: {conversation}" : "{conversation} görüşmesinde ara", + "Your requests are throttled at the moment due to brute force protection" : "İsteğiniz kaba kuvvet saldırısı koruması tarafından bir süreliğine yavaşlatıldı", + "Error while clearing conversation history" : "Görüşme geçmişi temizlenirken sorun çıktı", + "Error occurred while allowing guests" : "Konuklar kabul edilirken sorun çıktı", + "Error occurred while disallowing guests" : "Konuklar reddedilirken sorun çıktı", + "Error occurred when restricting the conversation to moderator" : "Görüşmede yalnızca sorumluya izin verilirken sorun çıktı", + "Error occurred when opening the conversation to everyone" : "Görüşmede herkese izin verilirken sorun çıktı", + "Conversation password has been saved" : "Görüşme parolası kaydedildi", + "Conversation password has been removed" : "Görüşme parolası kaldırıldı", + "Error occurred while saving conversation password" : "Görüşme parolası kaydedilirken sorun çıktı", + "Call recording is starting." : "Çağrı kaydı başlatılıyor.", + "Call recording stopped while starting." : "Çağrı kaydı başlatılırken durduruldu.", + "Call recording stopped. You will be notified once the recording is available." : "Çağrı kaydı durduruldu. Kayıt kullanılabilir olduğunda bilgilendirileceksiniz.", + "Conversation picture set" : "Görüşme fotoğrafı ayarlandı", + "Conversation picture deleted" : "Görüşme fotoğrafı silindi", + "Could not delete the conversation picture" : "Görüşme fotoğrafı silinemedi", + "Could not remove the automatic expiration" : "Otomatik silme süresi kaldırılamadı", + "Could not post message: {errorMessage}" : "İleti gönderilemedi: {errorMessage}", + "Participant is banned successfully" : "Katılımcı yasaklandı", + "Error while banning the participant" : "Katılımcı yasaklanırken sorun çıktı", + "An error occurred while fetching the participants" : "Katılımcılar alınırken bir sorun çıktı", + "Could not send invitation to {actorId}" : "{actorId} için davet gönderilirken sorun çıktı", + "Invitations sent" : "Davetler gönderildi", + "Error occurred when sending invitations" : "Davetler gönderilirken sorun çıktı", + "Failed to join the conversation." : "Görüşmeye girilemedi.", + "An error occurred while creating breakout rooms" : "Çalışma odaları oluşturulurken bir sorun çıktı", + "An error occurred while re-ordering the attendees" : "Katılımcılar yeniden sıralanırken bir sorun çıktı", + "An error occurred while deleting breakout rooms" : "Çalışma odaları silinirken bir sorun çıktı", + "An error occurred while starting breakout rooms" : "Çalışma odaları açılırken bir sorun çıktı", + "An error occurred while stopping breakout rooms" : "Çalışma odaları kapatılırken bir sorun çıktı", + "An error occurred while sending a message to the breakout rooms" : "Çalışma odalarına ileti gönderilirken bir sorun çıktı", + "An error occurred while requesting assistance" : "Yardım istenirken bir sorun çıktı", + "An error occurred while resetting the request for assistance" : "Yardım isteği sıfırlanırken bir sorun çıktı", + "An error occurred while joining breakout room" : "Çalışma odasına geçilirken bir sorun çıktı", + "Failed to rename the thread" : "Yazışma yeniden adlandırılamadı", + "Error fetching upcoming events" : "Yaklaşan etkinlikler alınırken sorun çıktı", + "Error fetching upcoming reminders" : "Yaklaşan anımsatıcılar alınırken sorun çıktı", + "An error occurred while accepting an invitation" : "Bir davet kabul edilirken bir sorun çıktı", + "An error occurred while rejecting an invitation" : "Bir davet reddedilirken bir sorun çıktı", + "{guest} (guest)" : "{guest} (konuk)", + "Poll draft has been saved" : "Anket taslağı kaydedildi", + "An error occurred while saving the draft" : "Anket taslağı kaydedilirken bir sorun çıktı", + "An error occurred while submitting your vote" : "Oyunuz gönderilirken bir sorun çıktı", + "An error occurred while ending the poll" : "Anket sona erdirilirken bir sorun çıktı", + "An error occurred while deleting the poll draft" : "Anket taslağı silinirken bir sorun çıktı", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user}, \"{name}\" anketini oluşturdu. Oy vermek için tıklayın", + "Failed to add reaction" : "Tepki eklenemedi", + "Failed to remove reaction" : "Tepki silinemedi", + "The server is in maintenance mode." : "Sunucu bakım kipinde.", + "Federated server was updated." : "Birleşik sunucu güncellenmiş.", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" dosyası yüklenirken sorun çıktı", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" dosyasını yüklemek için yeterli boş alan yok", + "You are not allowed to share files" : "Dosya paylaşma izniniz yok", + "Error while sharing file" : "Dosya paylaşılırken sorun çıktı", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Kullandığınız tarayıcı Nextcloud Konuş uygulaması tarafından tam olarak desteklenmiyor. Lütfen güncel Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ya da Apple Safari sürümünü kullanın.", + "_In %n hour_::_In %n hours_" : ["%n saat sonra","%n saat sonra"], + "_%n minute _::_%n minutes_" : ["%n dakika ","%n dakika"], + "In {hours} and {minutes}" : "{hours} : {minutes} sonra", + "_In %n minute_::_In %n minutes_" : ["%n dakika sonra","%n dakika sonra"], + "Later today – {timeLocale}" : "Bugün daha sonra – {timeLocale}", + "Set time for later today" : "Bugün daha sonrası için ayarla", + "Tomorrow – {timeLocale}" : "Yarın – {timeLocale}", + "Set time for tomorrow" : "Yarın için ayarla", + "This weekend – {timeLocale}" : "Bu hafta sonu – {timeLocale}", + "Set time for this weekend" : "Bu hafta sonu için ayarla", + "Next week – {timeLocale}" : "Sonraki hafta – {timeLocale}", + "Set time for next week" : "Gelecek hafta için ayarla", + "Message link copied to clipboard" : "İleti bağlantısı panoya kopyalandı", + "Conversation link copied to clipboard" : "Görüşme bağlantısı panoya kopyalandı", + "The link could not be copied" : "Bağlantı kopyalanamadı", + "Error while parsing a PROPFIND error" : "PROPFIND hatası işlenirken sorun çıktı", + "Sending signaling message has failed" : "Signaling iletisi gönderilemedi", + "Lost connection to signaling server. Trying to reconnect." : "Signalling sunucusu ile bağlantı kesildi. Bağlantı yeniden kurulmaya çalışılıyor.", + "Lost connection to signaling server." : "Signalling sunucusu ile bağlantı kesildi.", + "Connecting is taking longer than expected …" : "Bağlantı kurulması beklenenden uzun sürüyor…", + "Failed to connect. Retrying …" : "Bağlantı kurulamadı. Yeniden deneniyor…", + "Failed to connect. The signaling server may be set up incorrectly" : "Bağlantı kurulamadı. Signalling sunucusu yanlış yapılandırılmış olabilir", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Bu Konuş sürümü ile uyumlu olması için yapılandırılmış signalling sunucusunun güncellenmesi gerekiyor. Lütfen yöneticiniz ile görüşün.", + "Please restart the app." : "Lütfen uygulamayı yeniden başlatın.", + "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", + "Please try to restart the app." : "Lütfen uygulamayı yeniden başlatmayı deneyin.", + "Please try to reload the page." : "Lütfen sayfayı yeniden yüklemeyi deneyin.", + "Do not disturb" : "Rahatsız etmeyin", + "Away" : "Uzakta", + "Microphone {number}" : "{number}. mikrofon", + "Camera {number}" : "{number}. kamera", + "Speaker {number}" : "{number}. hoparlör", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Mikrofonunuz kapalıyken konuşuyorsunuz gibi görünüyor. Lütfen diğer katılımcıların sizi duyabilmesi için mikrofonunuzu açın", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "En az bir katılımcı ile bağlantı kurulamadı. Kullanım şekliniz için bir TURN sunucusuna gerek olabilir. Lütfen BT yöneticinizden {linkstart}bu belgeye bakarak{linkend} bir TURN sunucusu kurmasını isteyin.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "İşlemin tamamlanması beklendiğinden uzun sürüyor. Ortam izinleri zaten verilmiş (ya da reddedilmiş) olabilir mi? Yanıt evet ise ses ve görüntülerde sorun çıkacağından lütfen tarayıcınızı yeniden başlatın.", + "Access to microphone & camera is only possible with HTTPS" : "Kamera ve mikrofona yalnızca HTTPS üzerinden erişilebilir", + "Please move your setup to HTTPS" : "Lütfen kurulumunuzu HTTPS üzerine geçirin", + "Access to microphone & camera was denied" : "Mikrofon ve kameraya erişim reddedildi", + "WebRTC is not supported in your browser" : "WebRTC tarayıcınız tarafından desteklenmiyor", + "Please use a different browser like Firefox or Chrome" : "Lütfen Firefox ya da Chrome gibi farklı bir tarayıcı kullanın", + "Error while accessing microphone & camera" : "Mikrofon ve kameraya erişilirken sorun çıktı", + "%s Talk on your mobile devices" : "Mobil aygıtlarınızda %s Konuş uygulaması", + "Join conversations at any time, anywhere, on any device." : "Görüşmelere istediğiniz yerden, istediğiniz zamanda, istediğiniz aygıt ile katılabilirsiniz.", + "Android app" : "Android uygulaması", + "iOS app" : "iOS uygulaması", + "__language_name__" : "Türkçe", + "Webhook Demo" : "İnternet kancası örneği", + "Call summary (%s)" : "Çağrı özeti (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Çağrı özeti botu, çağrıdan sonra tüm katılımcıları listeleyen ve görevleri özetleyen bir özet iletisi gönderir.", + "Tasks" : "Görevler", + "Notes" : "Notlar", + "Reports" : "Raporlar", + "Decisions" : "Kararlar", + "Agenda" : "Gündem", + "Call summary" : "Çağrı özeti", + "Call summary - {title}" : "Çağrı özeti - {title}", + "Talk conversation for event" : "Etkinlik için Konuş görüşmesi", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push kuruldu. Bilgisayar istemci yazılımlarının başarımını artırır.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} kurulmamış. Bilgisayar istemci yazılımları kullanılırken başarım sorunları yaşanabilir.", + "Next meeting" : "Sonraki toplantı", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Takviminizde bir toplantı zamanlayın. Burada görüntülenmesi için bir Konuş görüşmesinin konum olarak ayarlanması gerekir", + "Join conversations from remote Nextcloud servers" : "Uzak Nextcloud sunucularındaki görüşmelere katıl", + "Your default media state has been saved" : "Varsayılan ortam durumunuz kaydedildi", + "Set reminder for later today" : "Bugün daha sonrası için anımsatıcı ayarla", + "Set reminder for tomorrow" : "Yarın için anımsatıcı ayarla", + "Set reminder for this weekend" : "bu hafta sonu için anımsatıcı ayarla", + "Set reminder for next week" : "Gelecek hafta için anımsatıcı ayarla", + "Generate summary" : "Özet oluşturulsun", + "Open poll • You voted already" : "Açık anket • Zaten oy vermişsiniz", + "Open poll • Click to vote" : "Açık anket • Oy vermek için tıklayın", + "Poll • Ended" : "Anket • Sona ermiş", + "Talk recording from {time} ({conversation})" : "Konuş kaydediyor {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Anket sonuçları • %n oy","Anket sonuçları • %n oy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Açık anket • %n oy","Açık anket • %n oy"], + "Submit vote" : "Oyu gönder", + "Your privacy setting has been saved" : "Gizlilik ayarınız kaydedildi", + "Your personal setting has been saved" : "Kişisel ayarlarınız kaydedildi", + "Failed to save sounds setting" : "Ses ayarları kaydedilemedi", + "Sounds setting saved" : "Ses ayarları kaydedildi", + "Always shown if recording consent is required" : "Kayıt alma rızası isteniyorsa her zaman görüntülenir", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Konuş güncellenmiş. Bir çağrı başlatamaz ya da katılamazsınız.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Görüşmeye başka bir pencereden ya da aygıttan da katılmışsınız. Nextcloud Konuş henüz bu özelliği desteklemediği için bu oturum kapatılacak.", + "Nextcloud Talk was updated." : "Nextcloud Konuş güncellenmiş.", + "Nextcloud is in maintenance mode." : "Nextcloud bakım kipinde.", + "Nextcloud Talk Federation was updated." : "Nextcloud Konuş birliği güncellenmiş.", + "Enable live translation" : "Canlı çeviriyi aç", + "I picked list style" : "Liste biçemini seçtim", + "Hey! Are you using Talk in list style or with message bubbles?" : "Talk görünümü liste olarak mı ileti balonları olarak mı kullanıyorsunuz?" +}, +"nplurals=2; plural=(n > 1);"); diff --git a/l10n/tr.json b/l10n/tr.json new file mode 100644 index 0000000..a1cea85 --- /dev/null +++ b/l10n/tr.json @@ -0,0 +1,2232 @@ +{ "translations": { + "a conversation" : "bir görüşme", + "(Duration %s)" : "(Süre %s)", + "You attended a call with {user1}" : "{user1} ile bir çağrıya katıldınız", + "_%n guest_::_%n guests_" : ["%n konuk","%n konuk"], + "You attended a call with {user1} and {user2}" : "{user1} ve {user2} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2} and {user3}" : "{user1}, {user2} ve {user3} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "{user1}, {user2}, {user3} ve {user4} ile bir çağrıya katıldınız", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile bir çağrıya katıldınız", + "_%n other_::_%n others_" : ["%n diğer","%n diğer"], + "{actor} invited you to {call}" : "{actor} sizi {call} için çağırdı", + "You were invited to a conversation or had a call" : "Bir görüşmeye davet edildiğinizde ya da bir davet aldığınızda", + "Other activities" : "Diğer işlemler", + "Talk" : "Konuş", + "Guest" : "Konuk", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud Konuş uygulamasına hoş geldiniz!\nBu görüşmede yeni Nextcloud Konuş özellikleri hakkında bilgilendirileceksiniz.", + "## New in Talk %s" : "## Konuş %s uygulamasındaki yenilikler", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Sesli ve görüntülü çağrılara katılmak için Microsoft Edge ve Safari kullanılabilir", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- Bire bir görüşmeler artık kalıcı oldu ve bunların kazayla grup görüşmelerine dönüştürülmesi engellendi. Ayrıca artık katılımcılardan biri görüşmeden ayrıldığında, görüşme otomatik olarak silinmiyor. Görüşme ancak her iki katılımcı da ayrılırsa sunucudan siliniyor.", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Artık sohbet sırasında \"@all\" yazarak tüm katılımcıları bilgilendirebilirsiniz", + "- With the \"arrow-up\" key you can repost your last message" : "- \"Yukarı ok\" tuşuyla son iletinizi çağırabilirsiniz", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Konuş üzerinde artık komutlar kullanılabilir, Yöneticinizin yapılandırdığı komutlar varsa \"/help\" yazıp göndererek sohbet iletisi olarak görebilirsiniz ", + "- With projects you can create quick links between conversations, files and other items" : "- Projeleri kullanarak görüşmeler, dosyalar ve diğer ögeler arasında hızlı bağlantılar oluşturabilirsiniz", + "- You can now mention guests in the chat" : "- Artık sohbetteki konukları anabilirsiniz", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- Artık görüşmelerin bir girişi olabiliyor. Böylece kullanıcılar ve konuklar beklerken sorumlular önceden görüşmeye ya da çağrıya katılıp gerekli hazırlıkları yapabiliyor", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Artık diğer kullanıcılara iletinizin ne hakkında olduğu ile ilgili daha fazla bilgi vererek iletileri doğrudan yanıtlayabilirsiniz.", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Artık görüşme ve katılımcı aramalarında var olan görüşmeleriniz de süzülür. Böylece yakın zamandaki görüşmeler daha kolay bulunabilir", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Takımlar uygulaması kurulduğunda görüşmelere özel kullanıcı grupları eklenebilir", + "- Check out the new grid and call view" : "- Yeni tablo ve çağrı görünümleri", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Artık dosyaları doğrudan aygıtınızdan sürükleyip bırakarak ya da yükleyerek sohbete aktarabilirsiniz", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Paylaşılan dosyalar artık doğrudan sohbet görünümünde görüntüleyici uygulamalar ile açılabilir", + "- You can now search for chats and messages in the unified search in the top bar" : "- Artık sohbet ve iletileri üst çubuktaki birleşik aramayı kullanarak arayabilirsiniz", + "- Spice up your messages with emojis from the emoji picker" : "- İletilerinizi emoji seçiciden ekleyeceğiniz emojiler ile zenginleştirin", + "- You can now change your camera and microphone while being in a call" : "- Artık bir çağrı sürerken kamera ve mikrofonunuzu değiştirebilirsiniz", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Görüşmelerinize bir açıklama ekleyerek kapsamını belirleyip açabilirsiniz. Böylece oturum açmış kullanıcılar görüşmeyi bularak kendi kendilerine katılabilir", + "- See a read status and send failed messages again" : "- Okunma durumunu görerek gönderilmeyen iletileri yeniden gönderebilirsiniz", + "- Raise your hand in a call with the R key" : "- Çağrılarda R tuşuna basarak el kaldırabilirsiniz", + "- Join the same conversation and call from multiple devices" : "- Aynı görüşmeye katılın ve çeşitli aygıtlardan çağrı yapın", + "- Send voice messages, share your location or contact details" : "- Sesli iletiler gönderin, konumunuzu veya iletişim bilgilerinizi paylaşın", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Bir görüşmeye gruplar ekleyin ve yeni grup üyelerinin otomatik olarak katılmasını sağlayın", + "- A preview of your audio and video is shown before joining a call" : "- Bir çağrıya katılmadan önce sesinizin ve görüntünüzün ön izlemesi sunulur", + "- You can now blur your background in the newly designed call view" : "- Artık yeni tasarlanmış çağrı görünümünde arka planınızı bulanıklaştırabilirsiniz", + "- Moderators can now assign general and individual permissions to participants" : "- Artık sorumlular katılımcılara genel ve kişisel izinler atayabilir", + "- You can now react to chat messages" : "- Artık sohbet iletilerine tepki verebilirsiniz", + "- In the sidebar you can now find an overview of the latest shared items" : "- Artık kenar çubuğunda son paylaşılan ögelerin özetini görebilirsiniz", + "- Use a poll to collect the opinions of others or settle on a date" : "- Başkalarının görüşlerini almak ya da bir tarih belirlemek için bir anket kullanın", + "- Configure an expiration time for chat messages" : "- Sohbet iletileri için bir geçerlilik süresi yapılandırın", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Büyük görüşmelerde bildirim göndermeden çağrı başlatın. Çağrı başladıktan sonra bireysel çağrı bildirimleri gönderebilirsiniz.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Acil değilse sohbet iletilerine alıcılara bildirim olmadan gönderin", + "- Emojis can now be autocompleted by typing a \":\"" : "- \".\" yazarak emojiler otomatik olarak tamamlanabilir", + "- Link various items using the new smart-picker by typing a \"/\"" : "- \"/\" yazarak yeni akıllı seçici ile çeşitli ögeler bağlanabilir", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Sorumlular çalışma odaları oluşturabilir (yüksek başarımlı arka yüz gereklidir)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Çağrılar kaydedilebilir (yüksek başarımlı arka yüz gereklidir)", + "- Conversations can now have an avatar or emoji as icon" : "- Görüşmelerde artık simge olarak bir avatar ya da emoji kullanılabilir", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- Görüntülü aramalarda bulanık arka planın yanında artık sanal arka planlar da kullanılabilir", + "- Reactions are now available during calls" : "- Artık aramalarda tepkiler kullanılabilir", + "- Typing indicators show which users are currently typing a message" : "- Yazma göstergeleri, o anda hangi kullanıcıların ileti yazdığını gösterir", + "- Groups can now be mentioned in chats" : "- Artık sohbetlerde gruplar anılabilir", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Bir yazı dönüştürme hizmeti ayarlandıysa arama kayıtları otomatik olarak yazıya dönüştürülür", + "- Chat messages can be translated if a translation provider app is registered" : "- Bir çeviri hizmeti ayarlandıysa sohbet iletileri başka dile çevrilebilir", + "- **Markdown** can now be used in _chat_ messages" : "- _chat_ iletilerinde artık **markdown** kullanılabilir", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- İnternet kancaları artık botları uygulamak için kullanılabilir. Ayrıntılı bilgi almak için https://nextcloud-talk.readthedocs.io/en/latest/bot-list/ adresine bakabilirsiniz", + "- Set a reminder on a chat message to be notified later again" : "- Daha sonra yeniden bilgilendirilmek için bir sohbet iletisine bir anımsatıcı ayarlayın", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Aygıtlarınız arasında not almak ve bilgi paylaşmak için **Kendime not** yazışmasını kullanın", + "- Captions allow to send a message with a file at the same time" : "- Alt yazılar aynı anda bir dosyayla birlikte bir ileti göndermeyi sağlar", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Artık ekran paylaşılırken konuşmacının görüntüsü görülebiliyor ve çağrı tepkileri canlandırılıyor", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- İletilerin oturum açmış yazarlar ve sorumlular tarafından ilk 6 saat içinde düzenlenebilmesi sağlandı", + "- Unsent message drafts are now saved in your browser" : "- Gönderilmemiş ileti taslaklarının tarayıcınıza kaydedilmesi sağlandı", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Yazılı sohbetlerin diğer Konuş sunucularıyla birleşik olarak yapılabilmesi sağlandı", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Sorumlular artık hesapları ve misafirleri yasaklayarak bir görüşmeye yeniden katılmalarını önleyebilir", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Görüşmelerde bağlantılı takvim etkinliklerinden gelen çağrıların ve ofis dışındayken yedek kişilerin görüntülenmesi sağlandı", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Çağrıların diğer Konuş sunucularıyla birleşik olarak yapılabilmesi sağlandı (yüksek başarımlı arka yüz gereklidir)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows, macOS ve Linux için Nextcloud Konuş bilgisayar istemcisini sunarız: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud Yardımcı ile sohbetlerdeki çağrı kayıtlarını ve okunmamış iletileri özetleyin", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Toplantılar, e-posta adresleri ile davet edilen misafirleri tanıma, katılımcı listelerini içe aktarma, anketler için taslaklar ve çağrı katılımcı listelerinin indirilmesiyle iyileştirildi", + "- Archive conversations to stay focused" : "- Odaklanmak için görüşmeleri arşivleyin", + "- Schedule a meeting into your calendar from within a conversation" : "- Bir görüşmenin içinden takviminizde bir toplantı zamanlayın", + "- Search for messages of the current conversation directly in the right sidebar" : "- Geçerli görüşmenin iletilerini doğrudan sağ kenar çubuğunda arayın", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Yeni küçük listeyle daha fazla görüşmeyi bir kerede görün (Konuş ayarlarından açın)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Toplantı görüşmelerinin artık takvimdeki başlıkları ve açıklamaları eşitleniyor ve başlangıç zamanları yaklaşana kadar bunlar bir arama süzgeciyle gizleniyor", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- İleti içeriğini görüşme listesinden ve bildirimlerden gizlemek için bildirim ayarlarında konuşmaları ciddi olarak işaretleyebilirsiniz", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- \"Rahatsız etmeyin\" durumunda anlık bildirimleri almak için görüşmeleri önemli olarak işaretleyebilirsiniz", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Anında yeni bir grup görüşmesi oluşturmak için bire bir görüşmeye başka katılımcılar ekleyin", + "- Use threads to keep your chat and discussions organized" : "- Sohbetlerinizi ve tartışmalarınızı düzenli tutmak için yazışmaları kullanın", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Arama sırasında artık canlı yazıya dönüştürme kullanılabilir (canlı yazıya dönüştürme ExApp ve Yüksek başarımlı arka uç gereklidir)", + "- Moderators can now pin messages so they are kept at the top" : "- Sorumlular artık iletileri sabitleyerek en üstte kalmalarını sağlayabilir", + "- Schedule a message to send it at a later time" : "- Bir iletiyi daha sonra gönderilmek üzere planlayın", + "_All %n participant_::_All %n participants_" : ["Tüm %n katılımcı","Tüm %n katılımcı"], + "Talk updates ✅" : "Konuş güncellemeleri ✅", + "Reaction deleted by author" : "Tepki yazarı tarafından silindi", + "{actor} created the conversation" : "{actor} görüşme ekledi", + "You created the conversation" : "Görüşme eklediniz", + "System created the conversation" : "Sistem görüşme ekledi", + "An administrator created the conversation" : "Bir yönetici görüşme ekledi", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}, görüşmenin \"%1$s\" olan adını \"%2$s\" olarak değiştirdi", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "\"%1$s\" görüşmesinin adını \"%2$s\" olarak değiştirdiniz", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Bir yönetici, görüşmenin \"%1$s\" olan adını \"%2$s\" olarak değiştirdi", + "{actor} set the description" : "{actor} açıklamayı ayarladı", + "You set the description" : "Açıklamayı ayarladınız", + "An administrator set the description" : "Bir yönetici açıklamayı ayarladı", + "{actor} removed the description" : "{actor} açıklamayı kaldırdı", + "You removed the description" : "Açıklamayı kaldırdınız", + "An administrator removed the description" : "Bir yönetici açıklamayı kaldırdı", + "You started a silent call" : "Bir sessiz çağrı başlattınız", + "Outgoing silent call" : "Giden sessiz çağrı", + "{actor} started a silent call" : "{actor} bir sessiz çağrı başlattı", + "Incoming silent call" : "Gelen sessiz çağrı", + "You started a call" : "Bir çağrı başlattınız", + "Outgoing call" : "Giden çağrı", + "{actor} started a call" : "{actor} bir çağrı başlattı", + "Incoming call" : "Gelen çağrı", + "{actor} joined the call" : "{actor} çağrıya katıldı", + "You joined the call" : "Bir çağrıya katıldınız", + "{actor} left the call" : "{actor} çağrıdan ayrıldı", + "You left the call" : "Bir çağrıdan ayrıldınız", + "{actor} unlocked the conversation" : "{actor} görüşmenin kilidini açtı", + "You unlocked the conversation" : "Görüşmenin kilidini açtınız", + "An administrator unlocked the conversation" : "Bir yönetici görüşmenin kilidini açtı", + "{actor} locked the conversation" : "{actor} görüşmeyi kilitledi", + "You locked the conversation" : "Görüşmeyi kilitlediniz", + "An administrator locked the conversation" : "Bir yönetici görüşmeyi kilitledi", + "{actor} limited the conversation to the current participants" : "{actor} görüşmeyi geçerli katılımcılar ile kısıtladı", + "You limited the conversation to the current participants" : "Görüşmeyi geçerli katılımcılar ile kısıtladınız", + "An administrator limited the conversation to the current participants" : "Bir yönetici görüşmeyi geçerli katılımcılar ile kısıtladı", + "{actor} opened the conversation to registered users" : "{actor} görüşmeyi hesabı olan kullanıcılara açtı", + "You opened the conversation to registered users" : "Görüşmeyi hesabı olan kullanıcılara açtınız", + "An administrator opened the conversation to registered users" : "Bir yönetici görüşmeyi hesabı olan kullanıcılara açtı", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtı", + "You opened the conversation to registered users and users created with the Guests app" : "Görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtınız", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Bir yönetici görüşmeyi hesabı olan kullanıcılara ve Konuklar uygulaması ile oluşturulan kullanıcılara açtı", + "The conversation is now open to everyone" : "Görüşme şu anda herkese açık", + "{actor} opened the conversation to everyone" : "{actor} görüşmeyi herkese açtı", + "You opened the conversation to everyone" : "Görüşmeyi herkese açtınız", + "{actor} restricted the conversation to moderators" : "{actor} görüşmeyi sorumlular ile kısıtladı", + "You restricted the conversation to moderators" : "Görüşmeyi sorumlular ile kısıtladınız", + "{actor} started breakout rooms" : "{actor} çalışma odalarını açtı", + "You started breakout rooms" : "Çalışma odalarını açtınız", + "{actor} stopped breakout rooms" : "{actor} çalışma odalarını kapattı", + "You stopped breakout rooms" : "Çalışma odalarını kapattınız", + "{actor} allowed guests" : "{actor} konukların katılmasına izin verdi", + "You allowed guests" : "Konukların katılmasına izin verdiniz", + "An administrator allowed guests" : "Bir yönetici konukların katılmasına izin verdi", + "{actor} disallowed guests" : "{actor} konukların katılmasını engelledi", + "You disallowed guests" : "Konukların katılmasını engellediniz", + "An administrator disallowed guests" : "Bir yönetici konukların katılmasını engelledi", + "{actor} set a password" : "{actor} bir parola atadı", + "You set a password" : "Bir parola atadınız", + "An administrator set a password" : "Bir yönetici bir parola atadı", + "{actor} removed the password" : "{actor} parolayı kaldırdı", + "You removed the password" : "Parolayı kaldırdınız", + "An administrator removed the password" : "Bir yönetici parolayı kaldırdı", + "{actor} added {user}" : "{actor}, {user} kullanıcısını ekledi", + "You joined the conversation" : "Görüşmeye katıldınız", + "{actor} joined the conversation" : "{actor} görüşmeye katıldı", + "You added {user}" : "{user} kullanıcısını eklediniz", + "{actor} added you" : "{actor} sizi ekledi", + "An administrator added you" : "Bir yönetici sizi ekledi", + "An administrator added {user}" : "Bir yönetici, {user} kullanıcısını ekledi", + "You left the conversation" : "Görüşmeden ayrıldınız", + "{actor} left the conversation" : "{actor} görüşmeden ayrıldı", + "{actor} removed {user}" : "{actor}, {user} kullanıcısını çıkardı", + "You removed {user}" : "{user} kullanıcısını çıkardınız", + "{actor} removed you" : "{actor} sizi çıkardı", + "An administrator removed you" : "Bir yönetici sizi çıkardı", + "An administrator removed {user}" : "Bir yönetici, {user} kullanıcısını çıkardı", + "{actor} invited {federated_user}" : "{actor}, {federated_user} kullanıcısını davet etti", + "You invited {federated_user}" : "{federated_user} kullanıcısını davet ettiniz", + "You accepted the invitation" : "Daveti kabul ettiniz", + "{actor} invited you" : "{actor} sizi davet etti", + "An administrator invited you" : "Bir yönetici sizi davet etti", + "An administrator invited {federated_user}" : "Bir yönetici, {federated_user} kullanıcısını davet etti", + "{federated_user} accepted the invitation" : "{federated_user} daveti kabul etti", + "{actor} removed {federated_user}" : "{actor}, {federated_user} kullanıcısını çıkardı", + "You removed {federated_user}" : "{federated_user} kullanıcısını çıkardınız", + "You declined the invitation" : "Daveti reddettiniz", + "An administrator removed {federated_user}" : "Bir yönetici, {federated_user} kullanıcısını çıkardı", + "{federated_user} declined the invitation" : "{federated_user} daveti reddetti", + "{actor} added group {group}" : "{actor}, group} grubunu ekledi", + "You added group {group}" : "{group} grubunu eklediniz", + "An administrator added group {group}" : "Bir yönetici {group} grubunu ekledi", + "{actor} removed group {group}" : "{actor}, {group} grubunu sildi", + "You removed group {group}" : "{group} grubunu sildiniz", + "An administrator removed group {group}" : "Bir yönetici {group} grubunu sildi", + "{actor} added team {circle}" : "{actor}, {circle} takımını ekledi", + "You added team {circle}" : "{circle} takımını eklediniz", + "An administrator added team {circle}" : "Bir yönetici {circle} takımını ekledi", + "{actor} removed team {circle}" : "{actor}, {circle} takımını ekledi", + "You removed team {circle}" : "{circle} takımını eklediniz", + "An administrator removed team {circle}" : "Bir yönetici {circle} takımını sildi", + "{actor} added {phone}" : "{actor}, {phone} numarasını ekledi", + "You added {phone}" : "{phone} numarasını eklediniz", + "An administrator added {phone}" : "Bir yönetici {phone} numarasını ekledi", + "{actor} removed {phone}" : "{actor}, {phone} numarasını kaldırdı", + "You removed {phone}" : "{phone} numarasını kaldırdınız", + "An administrator removed {phone}" : "Bir yönetici {phone} numarasını kaldırdı", + "{actor} promoted {user} to moderator" : "{actor}, {user} kullanıcısını sorumluluğa yükseltti", + "You promoted {user} to moderator" : "{user} kullanıcısını sorumluluğa yükselttiniz", + "{actor} promoted you to moderator" : "{actor} sizi sorumluluğa yükseltti", + "An administrator promoted you to moderator" : "Bir yönetici sizi sorumluluğa yükseltti", + "An administrator promoted {user} to moderator" : "Bir yönetici, {user} kullanıcısını sorumluluğa yükseltti", + "{actor} demoted {user} from moderator" : "{actor}, {user} kullanıcısını sorumluluktan çıkardı", + "You demoted {user} from moderator" : "{user} kullanıcısını sorumluluktan çıkardınız", + "{actor} demoted you from moderator" : "{actor}, sizi sorumluluktan çıkardı", + "An administrator demoted you from moderator" : "Bir yönetici, sizi sorumluluktan çıkardı", + "An administrator demoted {user} from moderator" : "Bir yönetici, {user} kullanıcısını sorumluluktan çıkardı", + "{actor} shared a file which is no longer available" : "{actor} artık kullanılamayan bir dosya paylaştı", + "You shared a file which is no longer available" : "Artık kullanılamayan bir dosya paylaştınız", + "File shares are currently not supported in federated conversations" : "Şu anda birleşik görüşmelerde dosya paylaşımı desteklenmiyor", + "The shared location is malformed" : "Paylaşılmış konum biçimi hatalı", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} bu görüşmeyi diğer sohbetler ile eşitlemek için Matterbridge kurulumu yaptı", + "You set up Matterbridge to synchronize this conversation with other chats" : "Bu görüşmeyi diğer sohbetler ile eşitlemek için Matterbridge kurulumu yaptınız", + "{actor} created thread {title}" : "{actor}, {title} yazışmasını oluşturdu", + "You created thread {title}" : "{title} yazışmasını oluşturdunuz", + "{actor} renamed thread {title}" : "{actor}, {title} yazışmasını yeniden adlandırdı", + "You renamed thread {title}" : "{title} yazışmasını yeniden adlandırdınız", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge yapılandırmasını güncelledi", + "You updated the Matterbridge configuration" : "Matterbridge yapılandırmasını güncellediniz", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge yapılandırmasını sildi", + "You removed the Matterbridge configuration" : "Matterbridge yapılandırmasını sildiniz", + "{actor} started Matterbridge" : "{actor} Matterbridge uygulamasını başlattı", + "You started Matterbridge" : "Matterbride uygulamasını başlattınız", + "{actor} stopped Matterbridge" : "{actor} Matterbridge uygulamasını durdurdu", + "You stopped Matterbridge" : "Matterbride uygulamasını durdurdunuz", + "{actor} deleted a message" : "{actor} bir iletiyi sildi", + "You deleted a message" : "Bir iletiyi sildiniz", + "{actor} edited a message" : "{actor} bir iletiyi düzenledi", + "You edited a message" : "Bir iletiyi düzenlediniz", + "{actor} pinned a message" : "{actor} bir iletiyi sabitledi", + "You pinned a message" : "Bir iletiyi sabitlediniz", + "{actor} unpinned a message" : "{actor} bir iletinin sabitlemesini kaldırdı", + "Message was automatically unpinned" : "İletinin sabitlemesi otomatik olarak kaldırıldı", + "You unpinned a message" : "Bir iletinin sabitlemesini kaldırdınız", + "{actor} deleted a reaction" : "{actor} bir tepkiyi sildi", + "You deleted a reaction" : "Bir tepkiyi sildiniz", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["İletinin geçerlilik süresini %n hafta olarak ayarladınız","İletinin geçerlilik süresini %n hafta olarak ayarladınız"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["İletinin geçerlilik süresini %n gün olarak ayarladınız","İletinin geçerlilik süresini %n gün olarak ayarladınız"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["İletinin geçerlilik süresini %n saat olarak ayarladınız","İletinin geçerlilik süresini %n saat olarak ayarladınız"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["İletinin geçerlilik süresini %n dakika olarak ayarladınız","İletinin geçerlilik süresini %n dakika olarak ayarladınız"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} iletinin geçerlilik süresini %n hafta olarak ayarladı","{actor} iletinin geçerlilik süresini %n hafta olarak ayarladı"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} iletinin geçerlilik süresini %n gün olarak ayarladı","{actor} iletinin geçerlilik süresini %n gün olarak ayarladı"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} iletinin geçerlilik süresini %n saat olarak ayarladı","{actor} iletinin geçerlilik süresini %n saat olarak ayarladı"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} iletinin geçerlilik süresini %n dakika olarak ayarladı","{actor} iletinin geçerlilik süresini %n dakika olarak ayarladı"], + "{actor} disabled message expiration" : "{actor} ileti geçerlilik süresini kapattı", + "You disabled message expiration" : "İleti geçerlilik süresini kapattınız", + "{actor} cleared the history of the conversation" : "{actor} görüşme geçmişini sildi", + "You cleared the history of the conversation" : "Görüşme geçmişini sildiniz", + "{actor} set the conversation picture" : "{actor} görüşme görselini ayarladı", + "You set the conversation picture" : "Görüşme görselini ayarladınız", + "{actor} removed the conversation picture" : "{actor} görüşme görselini kaldırdı", + "You removed the conversation picture" : "Görüşme görselini kaldırdınız", + "{actor} ended the poll {poll}" : "{actor}, {poll} anketini sona erdirdi.", + "You ended the poll {poll}" : "{poll} anketini sona erdirdiniz", + "{actor} started the video recording" : "{actor} görüntü kaydını başlattı", + "You started the video recording" : "Görüntü kaydını başlattınız", + "{actor} stopped the video recording" : "{actor} görüntü kaydını bitirdi", + "You stopped the video recording" : "Görüntü kaydını bitirdiniz", + "{actor} started the audio recording" : "{actor} ses kaydını başlattı", + "You started the audio recording" : "Ses kaydını başlattınız", + "{actor} stopped the audio recording" : "{actor} ses kaydını bitirdi", + "You stopped the audio recording" : "Ses kaydını bitirdiniz", + "The recording failed" : "Kayıt yapılamadı", + "Someone voted on the poll {poll}" : "Birisi {poll} anketinde oy verdi", + "Message deleted by author" : "İleti yazarı tarafından silindi", + "Message deleted by {actor}" : "İleti {actor} tarafından silindi", + "Message deleted by you" : "İleti sizin tarafınızdan silindi", + "Deleted user" : "Kullanıcıyı sildi ", + "Unknown number" : "Numara bilinmiyor", + "Administration" : "Yönetim", + "System" : "Sistem", + "%s (guest)" : "%s (konuk)", + "Missed call" : "Yanıtsız çağrı", + "Unanswered call" : "Yanıtlanmamış çağrı", + "Call ended (Duration {duration})" : "Çağrı sonlandırıldı (Süre {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Çağrı, en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} çağrıyı sonlandırdı (Süre {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n konuk bulunan çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})","%n konuk bulunan çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n konuk ile çağrı sonlandırıldı (Süre {duration})","%n konuk ile çağrı sonlandırıldı (Süre {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor}, %n konukla çağrıyı sonlandırdı (Süre {duration})","{actor}, %n konukla çağrıyı sonlandırdı (Süre {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor}, {user1} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ve {user2} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} ve {user2} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor}, {user1} ve {user2} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2} ve {user3} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1}, {user2} ve {user3} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor}, {user1}, {user2} ve {user3} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3} ve {user4} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1}, {user2}, {user3} ve {user4} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor}, {user1}, {user2}, {user3} ve {user4} ile çağrıyı sonlandırdı (Süre {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile çağrı en uzun çağrı süresi sınırına ulaşıldığından sonlandırıldı (Süre {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ve {user5} ile çağrı sonlandırıldı (Süre {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor}, {user1}, {user2}, {user3}, {user4} ve {user5} ile çağrıyı sonlandırdı (Süre {duration})", + "Message of {user} in {conversation}" : "{conversationName} görüşmesinde {user} iletisi", + "Message of {user}" : "{user} iletisi", + "Message of a deleted user in {conversation}" : "{conversationName} görüşmesinde silinmiş bir kullanıcının iletisi", + "Talk conversations" : "Konuş görüşmeleri", + "Talk to %s" : "%s ile Konuş", + "An error occurred. Please contact your administrator." : "Bir sorun çıktı. Lütfen BT yöneticiniz ile görüşün.", + "Storage quota exceeded" : "Depolama sınırına ulaşıldı", + "File not found" : "Dosya bulunamadı", + "File is not shared, or shared but not with the user" : "Dosya paylaşılmamış ya da paylaşılmış ancak kullanıcı ile değil.", + "No account available to delete." : "Silinebilecek bir hesap yok.", + "Poll" : "Anket", + "Password needs to be set" : "Parola ayarlanmalıdır", + "Uploading the file failed" : "Dosya yüklenemedi", + "No image file provided" : "Bir görsel dosyası belirtilmemiş", + "File is too big" : "Dosya çok büyük", + "Invalid file provided" : "Belirtilen dosya geçersiz", + "Invalid image" : "Görsel geçersiz", + "Unknown filetype" : "Dosya türü bilinmiyor", + "Talk mentions" : "Konuş anmaları", + "More conversations" : "Diğer görüşmeler", + "Say hi to your friends and colleagues!" : "Tanıdık ve çalışma arkadaşlarınıza selam verin!", + "No unread mentions" : "Okunmamış bir anma yok", + "Call in progress" : "Çağrı sürüyor", + "You were mentioned" : "Anıldınız", + "Write to conversation" : "Görüşmeye yaz", + "Writes event information into a conversation of your choice" : "Etkinlik bilgilerini isteğinize göre bir görüşmeye yazar", + "Missing email field in header line" : "Başlık satırında e-posta alanı eksik", + "Following lines are invalid: %s" : "Şu satırlar geçersiz: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s sizi \"%2$s\" görüşmesine davet etti.", + "You were invited to conversation \"%s\"." : "\"%s\" görüşmesine davet edildiniz.", + "Conversation invitation" : "Görüşme daveti", + "Scheduled time" : "Planmış zaman", + "Description" : "Açıklama", + "You can also dial-in via phone with the following details" : "Ayrıca şu bilgileri kullanarak telefon ile arayabilirsiniz", + "Dial-in information" : "Çevirme bilgileri", + "Meeting ID" : "Toplantı kimliği", + "Your PIN" : "PIN numaranız", + "Click the button below to join the lobby now." : "Girişte beklemek için aşağıdaki düğmeye tıklayın.", + "Click the link below to join the lobby now." : "Girişte beklemek için aşağıdaki bağlantıya tıklayın.", + "Join lobby for \"%s\"" : "\"%s\" girişinde bekleyin", + "Click the button below to join the conversation now." : "Görüşmeye katılmak için aşağıdaki düğmeye tıklayın.", + "Click the link below to join the conversation now." : "Görüşmeye katılmak için aşağıdaki bağlantıya tıklayın.", + "Join \"%s\"" : "\"%s\" görüşmesine katıl", + "Meeting" : "Toplantı", + "Password request: %s" : "Parola isteği: %s", + "Private conversation" : "Özel görüşme", + "Deleted user (%s)" : "Silinmiş kullanıcı (%s)", + "Failed to upload call recording" : "Çağrı kaydı yüklenemedi", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Kayıt sunucusu {call} çağrısının kaydını yüklemedi. Lütfen yönetim ile görüşün.", + "Share to chat" : "Sohbet ile paylaş", + "Dismiss notification" : "Bildirimi yok say", + "Call recording now available" : "Çağrı kaydedilebilir", + "The recording for the call in {call} was uploaded to {file}." : "{call} çağrısının kaydı {file} dosyasına yüklendi.", + "Transcript now available" : "Çağrıyı yazıya dönüştürme kullanılabilir", + "The transcript for the call in {call} was uploaded to {file}." : "{call} çağrısı yazıya dönüştürüldü ve {file} dosyasına yüklendi.", + "Failed to transcript call recording" : "Çağrı kaydı yazıya dönüştürülemedi", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Sunucu {call} çağrısının kaydını {file} yazıya dönüştüremedi. Lütfen yönetim ile görüşün.", + "Call summary now available" : "Çağrı özeti kullanılabilir", + "The summary for the call in {call} was uploaded to {file}." : "{call} çağrısının özeti {file} dosyasına yüklendi.", + "Failed to summarize call recording" : "Çağrı kaydı özetlenemedi", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Sunucu {call} çağrısının kaydından {file} özet dosyasını oluşturamadı. Lütfen yönetim ile görüşün.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} sizi {remoteServer} üzerindeki {roomName} grubuna katılmaya davet etti", + "Accept" : "Kabul et", + "Decline" : "Reddet", + "{user1} invited you to a federated conversation" : "{user} sizi bir birleşik görüşmeye davet etti", + "Someone reacted" : "Biri tepki verdi ", + "New message" : "Yeni ileti", + "Reminder" : "Anımsatıcı", + "Someone mentioned you" : "Biri sizi andı", + "Notification" : "Bildirim", + "Someone reacted in a private conversation" : "Biri özel bir görüşmede tepki verdi", + "You received a message in a private conversation" : "Bir özel görüşmede bir ileti aldınız", + "Reminder in a private conversation" : "Özel bir görüşmede anımsatıcı", + "Someone mentioned you in a private conversation" : "Biri özel bir görüşmede sizi andı", + "Notification in a private conversation" : "Özel bir görüşmede bildirim", + "Reminder: You in {call}" : "Anımsatma: {call} görüşmesindesiniz", + "Reminder: {user} in {call}" : "Anımsatma: {user}, {call} görüşmesinde", + "Reminder: Deleted user in {call}" : "Anımsatma: Silinmiş kullanıcı {call} görüşmesinde", + "Reminder: {guest} (guest) in {call}" : "Anımsatma: {guest} (konuk) {call} görüşmesinde", + "Reminder: Guest in {call}" : "Anımsatma: Konuk {call} görüşmesinde", + "{user} reacted with {reaction}" : "{user}, {reaction} tepkisini verdi", + "{user} reacted with {reaction} in {call}" : "{user}, {call} çağrısında {reaction} tepkisini verdi", + "Deleted user reacted with {reaction} in {call}" : "Silinmiş kullanıcı {call} çağrısında {reaction} tepkisini verdi", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (konuk), {call} çağrısında {reaction} tepkisini verdi", + "Guest reacted with {reaction} in {call}" : "Konuk, {call} çağrısında {reaction} tepkisini verdi", + "{user} in {call}" : "{call} içinde {user}", + "Deleted user in {call}" : "{call} içinden kullanıcı silindi", + "{guest} (guest) in {call}" : "{call} içinde {guest} (konuk)", + "Guest in {call}" : "{call} içinde konuk", + "{user} sent you a private message" : "{user} size kişisel bir ileti gönderdi", + "{user} sent a message in conversation {call}" : "{user}, {call} görüşmesine bir ileti gönderdi", + "A deleted user sent a message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesine bir ileti gönderdi", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (konuk) {call} görüşmesine bir ileti gönderdi", + "A guest sent a message in conversation {call}" : "Bir konuk {call} görüşmesine bir ileti gönderdi", + "{user} replied to your private message" : "{user} kişisel iletinizi yanıtladı", + "{user} replied to your message in conversation {call}" : "{user} iletinizi {call} görüşmesinde yanıtladı", + "A deleted user replied to your message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesinde iletinizi yanıtladı", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (konuk) {call} görüşmesindeki bir iletiyi yanıtladı", + "A guest replied to your message in conversation {call}" : "Bir konuk {call} görüşmesinde iletinizi yanıtladı", + "Reminder: You in private conversation {call}" : "Anımsatma: {call} özel görüşmesindesiniz", + "Reminder: A deleted user in private conversation {call}" : "Anımsatma: Silinmiş bir kullanıcı {call} özel görüşmesinde", + "Reminder: {user} in private conversation" : "Anımsatma: {user} özel görüşmede", + "Reminder: You in conversation {call}" : "Anımsatma: {call} görüşmesindesiniz", + "Reminder: {user} in conversation {call}" : "Anımsatma: {user}, {call} görüşmesinde", + "Reminder: A deleted user in conversation {call}" : "Anımsatma: Silinmiş bir kullanıcı {call} görüşmesinde", + "Reminder: {guest} (guest) in conversation {call}" : "Anımsatma: {guest} (konuk) {call} görüşmesinde", + "Reminder: A guest in conversation {call}" : "Anımsatma: Bir konuk {call} görüşmesinde", + "{user} reacted with {reaction} to your private message" : "{user}, kişisel iletinizi {reaction} ile yanıtladı", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}, {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesindeki iletinizi {reaction} ile yanıtladı ", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (konuk), {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "A guest reacted with {reaction} to your message in conversation {call}" : "Bir konuk, {call} görüşmesindeki iletinizi {reaction} ile yanıtladı", + "{user} mentioned you in a private conversation" : "{user} özel bir görüşmede sizi andı", + "{user} mentioned group {group} in conversation {call}" : "{user}, {call} görüşmesinde {group} grubunu andı", + "{user} mentioned team {team} in conversation {call}" : "{user}, {call} görüşmesinde {team} takımını andı", + "{user} mentioned everyone in conversation {call}" : "{user}, {call} görüşmesindeki herkesi andı", + "{user} mentioned you in conversation {call}" : "{user}, {call} görüşmesinde sizi andı", + "A deleted user mentioned group {group} in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde {group} grubunu andı", + "A deleted user mentioned team {team} in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde {team} takımını andı", + "A deleted user mentioned everyone in conversation {call}" : "Silinmiş bir kullanıcı, {call} görüşmesinde herkesi andı", + "A deleted user mentioned you in conversation {call}" : "Silinmiş bir kullanıcı {call} görüşmesinde sizi andı", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (konuk), {call} görüşmesinde {group} grubunu andı", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (konuk), {call} görüşmesinde {team} takımını andı", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (konuk), {call} görüşmesindeki herkesi andı", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (konuk) {call} görüşmesinde sizi andı", + "A guest mentioned group {group} in conversation {call}" : "Bir konuk, {call} görüşmesinde {group} grubunu andı", + "A guest mentioned team {team} in conversation {call}" : "Bir konuk, {call} görüşmesinde {team} takımını andı", + "A guest mentioned everyone in conversation {call}" : "Bir konuk, {call} görüşmesindeki herkesi andı", + "A guest mentioned you in conversation {call}" : "Bir konuk {call} görüşmesinde sizi andı", + "View message" : "İletiyi görüntüle", + "Dismiss reminder" : "Anımsatmayı yok say", + "View chat" : "Sohbeti görüntüle", + "{user} invited you to a group conversation: {call}" : "{user} sizi bir grup görüşmesine davet etti: {call}", + "Join call" : "Çağrıya katıl", + "Answer call" : "Çağrıyı yanıtla", + "{user} would like to talk with you" : "{user} sizinle görüşmek istiyor", + "Call back" : "Geri ara", + "You missed a call from {user}" : "{user} kullanıcısı sizi aramış", + "Accept call" : "Çağrıyı kabul et", + "Incoming phone call from {call}" : "{call} tarafından gelen telefon çağrısı", + "You missed a phone call from {call}" : "{call} tarafından gelen bir telefon çağrısını yanıtlamadınız", + "A group call has started in {call}" : "{call} içinde bir grup çağrısı başlatıldı", + "You missed a group call in {call}" : "{call} grubu sizi aramış", + "{email} is requesting the password to access {file}" : "{email}, {file} dosyasına erişme parolasını istiyor", + "{email} tried to request the password to access {file}" : "{email}, {file} dosyasına erişme parolasını istemeyi denedi", + "Someone is requesting the password to access {file}" : "Birisi {file} dosyasına erişme parolasını istiyor", + "Someone tried to request the password to access {file}" : "Birisi {file} dosyasına erişme parolasını istemeyi denedi", + "Open settings" : "Ayarları aç", + "Hosted signaling server added" : "Barındırılan signaling sunucusu eklendi", + "The hosted signaling server is now configured and will be used." : "Barındırılan signaling sunucusu yapılandırıldı ve kullanılmaya hazır.", + "Hosted signaling server removed" : "Barındırılan signaling sunucusu silindi", + "The hosted signaling server was removed and will not be used anymore." : "Barındırılan signaling sunucusu silindi ve kullanımdan kaldırıldı.", + "Hosted signaling server changed" : "Barındırılan signaling sunucusu değiştirildi", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Barındırılan signaling sunucu hesabının \"{oldstatus}\" olan durumu \"{newstatus}\" olarak değiştirildi.", + "pending" : "bekliyor", + "active" : "etkin", + "expired" : "geçerlilik süresi dolmuş", + "blocked" : "engellenmiş", + "error" : "sorun", + "The certificate of {host} expires in {days} days" : "{host} sertifikasının geçerlilik süresi {days} gün içinde dolacak", + "The certificate of {host} expired" : "{host} sertifikasının geçerlilik süresi doldu", + "Contact via Talk" : "Konuş ile görüşün", + "Open Talk" : "Konuş uygulamasını aç", + "Default" : "Varsayılan", + "Presentation" : "Sunum", + "Voice room" : "Konuşma odası", + "Webinar" : "İnternet sunumu", + "Conversations" : "Görüşmeler", + "Messages in current conversation" : "Geçerli görüşmedeki iletiler", + "{user}" : "{user}", + "Messages" : "İletiler", + "{user} in {conversation}" : "{user}, {conversation} görüşmesinde", + "Messages in other conversations" : "Diğer görüşmelerdeki iletiler", + "One-to-one rooms always need to show the other users avatar" : "Bire bir odalarda diğer kullanıcının avatarı her zaman görüntülenmelidir", + "Invalid emoji character" : "Emoji karakteri geçersiz", + "Invalid background color" : "Arka plan rengi geçersiz", + "Avatar image is not square" : "Avatar görseli kare değil", + "Room {number}" : "{number}. oda", + "Other" : "Diğer", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Deneme sunucusuna erişilemediğinden deneme isteği yapılamadı. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Kopyanın kimliği doğrulanırken bir sorun çıktı. Belirtilen adres kullanılarak dışarıdan erişilemiyor olabilir. ", + "Something unexpected happened." : "Beklenmedik bir sorun çıktı.", + "The URL is invalid." : "Adres geçersiz.", + "An HTTPS URL is required." : "Bir HTTPS adresi yazılması zorunludur.", + "The email address is invalid." : "E-posta adresi geçersiz.", + "The language is invalid." : "Dil geçersiz.", + "The country is invalid." : "Ülke geçersiz.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Deneme isteği yapılırken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "Too many requests are send from your servers address. Please try again later." : "Sunucunuzun adresinden çok fazla sayıda istekte bulunulmuş. Lütfen bir süre sonra yeniden deneyin.", + "There is already a trial registered for this Nextcloud instance." : "Bu Nextcloud kopyası için zaten bir deneme kaydı var.", + "Something unexpected happened. Please try again later." : "Beklenmedik bir sorun çıktı. Lütfen bir süre sonra yeniden deneyin.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Deneme sunucusu doğru davranmadığından deneme isteğinde bulunulamadı. Lütfen bir süre sonra yeniden deneyin.", + "Trial requested but failed to get account information. Please check back later." : "Deneme isteğinde bulunuldu ancak hesap bilgileri alınamadı. Lütfen burayı bir süre sonra yeniden denetleyin.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Bu isteğin kimliği doğrulanırken bir sorun çıktı. Belirtilen adres kullanılarak dışarıdan erişilemiyor olabilir. ", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Deneme sunucusu doğru davranmadığından hesap bilgileri alınamadı. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Hesap bilgileri alınırken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "There is no such account registered." : "Böyle bir hesap bulunamadı.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Deneme sunucusuna erişilemediğinden hesap bilgileri alınamadı. Lütfen bir süre sonra yeniden deneyin.", + "Deleting the hosted signaling server account failed. Please check back later." : "Barındırılan signaling sunucusu hesabı silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Deneme sunucusu doğru davranmadığından hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "There is a problem with deleting the account. Please check your logs for further information." : "Hesap silinirken bir sorun çıktı. Lütfen ayrıntılı bilgi almak için günlük kayıtlarına bakın.", + "Too many requests are sent from your servers address. Please try again later." : "Sunucunuzun adresinden çok fazla sayıda istekte bulunuldu. Lütfen bir süre sonra yeniden deneyin.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Deneme sunucusuna erişilemediğinden hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Note to self" : "Kendime not", + "A place for your private notes, thoughts and ideas" : "Kişisel notlarınızı, düşüncelerinizi ve fikirlerinizi buraya yazabilirsiniz", + "Transcript is AI generated and may contain mistakes" : "Yazıya dönüştürme işlemi yapay zeka ile yapılmıştır ve hatalar olabilir", + "Summary is AI generated and may contain mistakes" : "Özet yapay zeka ile oluşturulmuştur ve hatalar olabilir", + "Let's get started!" : "Başlayalım!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Konuş**, Nextcloud ekosistemiyle sorunsuz bir şekilde bütünleşen güvenli, özel barındırılan bir iletişim platformudur.\n\n#### Nextcloud Konuş Temel Özellikleri:\n\n* Özel ve grup sohbetlerinde sohbet etme ve ileti gönderme\n* Sesli ve görüntülü aramalar\n* Diğer Nextcloud uygulamalarıyla dosya paylaşımı ve bütünleştirme\n* Özelleştirilebilir görüşme ayarları, yönetim ve gizlilik denetimleri\n* İnternet, bilgisayar ve mobil (iOS ve Android)\n* Gizli ve güvenli iletişim\n\nAyrıntılı bilgi almak için [kullanıcı belgelerine](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html) bakın.", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Konuş Uygulamasına Hoş Geldiniz\n\nNextcloud Konuş, Nextcloud ile bütünleşik gizli ve güçlü bir iletişim uygulamasıdır. Kişisel veya grup görüşmelerinde sohbet edin, sesli ve görüntülü görüşmelerde işbirliği yapın, internet toplantıları ve etkinlikler düzenleyin, görüşmelerinizi gizli tutun ve diğer şeyleri yapın.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Zengin iletiler oluşturmak için yazıları biçimlendirin\n\nNextcloud Konuş uygulamasında iletilerinizi biçimlendirmek için Markdown sözdizimini kullanabilirsiniz. Örneğin, **koyu** veya *yatık* biçimlendirme uygulayın veya `yazıları kod olarak vurgulayın`. Hatta yazınızda tablolar oluşturabilir ve başlıklar ekleyebilirsiniz.\n\nBir yazım yanlışını düzeltmeniz veya biçimlendirmeyi değiştirmeniz mi gerekiyor? İleti menüsünde \"İletiyi düzenle\" üzerine tıklayarak iletinizi düzenleyin.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Dosyalar ve bağlantılar ekleyin\n\n\"+\" düğmesini kullanarak Nextcloud Merkez üzerinden dosyalar ekleyin. Dosyalar ve çeşitli Nextcloud uygulamalarından ögeler paylaşın. Bazı uygulamalar, örneğin Yazı uygulaması, etkileşimli pano bileşenlerini bile destekler.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Görüşmelerin akmasına izin verin: Kullanıcıları anın, iletilere tepki verin ve diğer şeyleri yapın\n\nGörüşmedeki herkesi %s kullanarak anabilir veya \"@\" yazıp listeden adlarını seçerek belirli katılımcıları anabilirsiniz.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "İletileri yanıtlayabilir, onları diğer sohbetlere ve kişilere iletebilir veya ileti içeriğini kopyalayabilirsiniz.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Akıllı Seçici ile daha fazlasını yapın\n\nİletilerinize çeşitli içerikler ekleyebileceğiniz akıllı seçiciyi açmak için yalnızca \"/\" yazın veya \"+\" menüsüne gidin. Akıllı seçiciyi Nextcloud uygulamalarından, GIF görsellerinden, harita konumlarından, yapay zeka tarafından oluşturulan içeriklerden ve çok daha fazlasından ögeler ekleyebilecek şekilde yapılandırabilirsiniz.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Görüşme ayarlarını yönetin\n\nGörüşme menüsünde, görüşmelerinizi yönetebileceğiniz çeşitli ayarlara erişebilirsiniz. Örneğin:\n* Görüşme bilgilerini düzenleyebilirsiniz\n* Bildirimleri yönetebilirsiniz\n* Çok sayıda yönetim kuralı uygulayabilirsiniz\n* Erişim izinlerini ve güvenliği yapılandırabilirsiniz\n* Botları etkinleştirebilirsiniz\n* ve diğer şeyleri yapabilirsiniz!", + "Andorra" : "Andorra", + "United Arab Emirates" : "Birleşik Arap Emirlikleri", + "Afghanistan" : "Afganistan", + "Antigua and Barbuda" : "Antigua ve Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Arnavutluk", + "Armenia" : "Ermenistan", + "Angola" : "Angola", + "Antarctica" : "Antarktika", + "Argentina" : "Arjantin", + "American Samoa" : "Amerikan Samoası", + "Austria" : "Avusturya", + "Australia" : "Avustralya", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Adaları", + "Azerbaijan" : "Azerbaycan", + "Bosnia and Herzegovina" : "Bosna ve Hersek", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladeş", + "Belgium" : "Belçika", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaristan", + "Bahrain" : "Bahreyn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei Barış Ülkesi", + "Bolivia, Plurinational State of" : "Bolivya Çok Uluslu Devleti", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius ve Saba", + "Brazil" : "Brezilya", + "Bahamas" : "Bahamalar", + "Bhutan" : "Butan", + "Bouvet Island" : "Bouvet Adası", + "Botswana" : "Botswana", + "Belarus" : "Beyaz Rusya", + "Belize" : "Beliz", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Cocos (Keyling) Adaları", + "Congo, the Democratic Republic of the" : "Kongo Demokratik Cumhuriyeti", + "Central African Republic" : "Orta Afrika Cumhuriyeti", + "Congo" : "Kongo", + "Switzerland" : "İsviçre", + "Côte d'Ivoire" : "Fildişi Sahili", + "Cook Islands" : "Cook Adaları", + "Chile" : "Şili", + "Cameroon" : "Kamerun", + "China" : "Çin", + "Colombia" : "Kolombiya", + "Costa Rica" : "Kosta Rika", + "Cuba" : "Küba", + "Cabo Verde" : "Yeşil Burun Adaları", + "Curaçao" : "Curaçao", + "Christmas Island" : "Christmas Adası", + "Cyprus" : "Kıbrıs", + "Czechia" : "Çekya", + "Germany" : "Almanya", + "Djibouti" : "Cibuti", + "Denmark" : "Danimarka", + "Dominica" : "Dominika", + "Dominican Republic" : "Dominik Cumhuriyeti", + "Algeria" : "Cezayir", + "Ecuador" : "Ekvator", + "Estonia" : "Estonya", + "Egypt" : "Mısır", + "Western Sahara" : "Batı Sahra", + "Eritrea" : "Eritre", + "Spain" : "İspanya", + "Ethiopia" : "Etiyopya", + "Finland" : "Finlandiya", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Falkland Adaları (Malvinas)", + "Micronesia, Federated States of" : "Mikronezya Birleşik Devletleri", + "Faroe Islands" : "Faroe Adaları", + "France" : "Fransa", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Büyük Britanya Birleşik Krallık ve Kuzey İrlanda", + "Grenada" : "Grenada", + "Georgia" : "Gürcistan", + "French Guiana" : "Fransız Guyanası", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grönland", + "Gambia" : "Gambia", + "Guinea" : "Gine", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Ekvator Ginesi", + "Greece" : "Yunanistan", + "South Georgia and the South Sandwich Islands" : "Güney Georgia ve Güney Sandwich Adaları", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Gine-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hong Kong", + "Heard Island and McDonald Islands" : "Heard Adası ve McDonald Adaları", + "Honduras" : "Honduras", + "Croatia" : "Hırvatistan", + "Haiti" : "Haiti", + "Hungary" : "Macaristan", + "Indonesia" : "Endonezya", + "Ireland" : "İrlanda", + "Israel" : "İsrail", + "Isle of Man" : "Man Adası", + "India" : "Hindistan", + "British Indian Ocean Territory" : "Britanya Hint Okyanusu Toprakları", + "Iraq" : "Irak", + "Iran, Islamic Republic of" : "İran İslam Cumhuriyeti", + "Iceland" : "İzlanda", + "Italy" : "İtalya", + "Jersey" : "Jersey Adası", + "Jamaica" : "Jamaika", + "Jordan" : "Ürdün", + "Japan" : "Japonya", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kırgızistan", + "Cambodia" : "Kamboçya", + "Kiribati" : "Kiribati", + "Comoros" : "Komorlar", + "Saint Kitts and Nevis" : "Saint Kitts ve Nevis", + "Korea, Democratic People's Republic of" : "Kuzey Kore", + "Korea, Republic of" : "Güney Kore", + "Kuwait" : "Kuveyt", + "Cayman Islands" : "Cayman Adaları", + "Kazakhstan" : "Kazakistan", + "Lao People's Democratic Republic" : "Laos Demokratik Halk Cumhuriyeti", + "Lebanon" : "Lübnan", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Lihtenştayn", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberya", + "Lesotho" : "Lesotho", + "Lithuania" : "Litvanya", + "Luxembourg" : "Lüksemburg", + "Latvia" : "Letonya", + "Libya" : "Libya", + "Morocco" : "Fas", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova Cumhuriyeti", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (Fransız Bölümü)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall Adaları", + "North Macedonia" : "Kuzey Makedonya", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Moğolistan", + "Macao" : "Makau", + "Northern Mariana Islands" : "Kuzey Mariana Adaları", + "Martinique" : "Martinik", + "Mauritania" : "Moritanya", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldivler", + "Malawi" : "Malawi", + "Mexico" : "Meksika", + "Malaysia" : "Malezya", + "Mozambique" : "Mozambik", + "Namibia" : "Namibya", + "New Caledonia" : "Yeni Kaledonya", + "Niger" : "Nijer", + "Norfolk Island" : "Norfolk Adası", + "Nigeria" : "Nijerya", + "Nicaragua" : "Nikaragua", + "Netherlands" : "Hollanda", + "Norway" : "Norveç", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "Yeni Zelanda", + "Oman" : "Umman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransız Polinezyası", + "Papua New Guinea" : "Papua Yeni Gine", + "Philippines" : "Filipinler", + "Pakistan" : "Pakistan", + "Poland" : "Polonya", + "Saint Pierre and Miquelon" : "Saint Pierre ve Miquelon", + "Pitcairn" : "Pitcairn Adaları", + "Puerto Rico" : "Porto Riko", + "Palestine, State of" : "Filistin Devleti", + "Portugal" : "Portekiz", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Katar", + "Réunion" : "Réunion", + "Romania" : "Romanya", + "Serbia" : "Sırbistan", + "Russian Federation" : "Rusya Federasyonu", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Suudi Arabistan", + "Solomon Islands" : "Solomon Adaları", + "Seychelles" : "Seyşeller", + "Sudan" : "Sudan", + "Sweden" : "İsveç", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension ve Tristan da Cunha", + "Slovenia" : "Slovenya", + "Svalbard and Jan Mayen" : "Svalbard ve Jan Mayen", + "Slovakia" : "Slovakya", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somali", + "Suriname" : "Surinam", + "South Sudan" : "Güney Sudan", + "Sao Tome and Principe" : "Sao Tome ve Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (Hollanda Bölümü)", + "Syrian Arab Republic" : "Suriye Arap Cumhuriyeti", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "Turks ve Caicos Adaları", + "Chad" : "Çad", + "French Southern Territories" : "Fransız Güney Toprakları", + "Togo" : "Togo", + "Thailand" : "Tayland", + "Tajikistan" : "Tacikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Türkmenistan", + "Tunisia" : "Tunus", + "Tonga" : "Tonga", + "Turkey" : "Türkiye", + "Trinidad and Tobago" : "Trinidad ve Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Tayvan, Çin Eyaleti", + "Tanzania, United Republic of" : "Tanzanya Birleşik Cumhuriyeti", + "Ukraine" : "Ukrayna", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Birleşik Devletler Küçük Dış Adaları", + "United States of America" : "Amerika Birleşik Devletleri", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Özbekistan", + "Holy See" : "Vatikan", + "Saint Vincent and the Grenadines" : "Saint Vincent ve Grenadinler", + "Venezuela, Bolivarian Republic of" : "Venezuela Bolivarcı Cumhuriyeti", + "Virgin Islands, British" : "Virgin Adaları, Britanya", + "Virgin Islands, U.S." : "Virgin Adaları, Birleşik Devletler", + "Viet Nam" : "Viet Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis ve Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Güney Afrika", + "Zambia" : "Zambiya", + "Zimbabwe" : "Zimbabwe", + "Background blur" : "Arka plan bulanıklaştırması", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM yükleme desteği denetlenemedi. Lütfen site sunucunuzun `.wasm` dosyalarını sunup sunmadığını el ile denetleyin.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Site sunucunuz `.wasm` dosyalarını aktaracak şekilde yapılandırılmamış. Bu sık karşılaşılan bir Nginx yapılandırma sorunudur. Arka plan bulanıklaştırması için `.wasm` dosyalarını da aktaracak ek bir ayar yapılması gereklidir. Kullandığınız Nginx yapılandırmasını belgeler bölümünde bulunan önerilen yapılandırma dosyası ile karşılaştırın.", + "Talk configuration values" : "Konuş yapılandırma değerleri", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Yalnızca sistem zamanlanmış görevi ile bir çağrı süresi dayatılabilir. Lütfen sistem zamanlanmış görevini açın ya da `max_call_duration` yapılandırmasını kaldırın.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Küçük `max_call_duration` değerleri (şu anda %d olarak ayarlanmış) teknik sınırlamalar nedeniyle zorunlu kılınamaz. Arka plan görevi yalnızca her 5 dakikada bir yürütülür. Buradaki riski kabul ederek kullanın.", + "Federation" : "Birleşim", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Konuş birleştirme özelliği açıldığında \"memcache.locking\" yapılandırmasının ayarlanması önemle önerilir.", + "High-performance backend" : "Yüksek başarımlı arka yüz", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Yüksek başarımlı arka yüz yapılandırılmamış - Yüksek başarımlı arka yüz olmadan Nextcloud Konuş yalnızca çok küçük çağrılar için çalışabilir (en fazla 2-3 katılımcı). Birden fazla katılımcının olduğu çağrıların sorunsuz çalışmasını sağlamak için lütfen yüksek başarımlı arka yüzü ayarlayın.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Yüksek başarımlı arka yüz, \"conversation_cluster\" kipini çalıştırma özelliği kapatıldı ve yaklaşan sürümde artık desteklenmeyecek. Yüksek başarımlı arka yüz artık gerçek kümelemeyi destekliyor ve bunun yerine kullanılmalı.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Birden fazla yüksek başarımlı arka yüz tanımlama özelliği kapatıldı ve yaklaşan sürümde artık desteklenmeyecek. Bunun yerine, kümelenmiş sinyal sunucularıyla birlikte bir yük dengeleyici kurulmalı ve Konuş uygulaması ayarlarından yapılandırılmalıdır.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Kullanılan %1$s algoritması için kaydedilmiş herkese açık anahtar, kaydedilmiş kişisel anahtarla eşleşmiyor. Sorunu çözmek için %2$s işlemini yürütün.", + "High-performance backend not configured correctly. Run %s for details." : "Yüksek başarımlı arka yüz doğru yapılandırılmamış. Ayrıntılı bilgi almak için %s komutunu yürütün.", + "High-performance backend not configured correctly" : "Yüksek başarımlı arka yüz doğru yapılandırılmamış", + "Error: Cannot connect to server" : "Hata: Sunucu ile bağlantı kurulamadı", + "Error: Server did not respond with proper JSON" : "Hata: Sunucunun JSON yanıtı geçersiz", + "Error: Certificate expired" : "Hata: Sertifikanın geçerlilik süresi dolmuş", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hata: Nextcloud sunucusunun ve yüksek başarımlı arka yüz sunucusunun sistem saatleri aynı değil. Lütfen her iki sunucunun da bir zaman sunucusuna bağlı olduğundan emin olun ya da saatlerini el ile eşitleyin.", + "Could not get version" : "Sürüm alınamadı", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Hata: Çalışan sürüm: {version}. Bu Konuş sürümüyle uyumlu olması için sunucunun güncellenmesi gerekiyor", + "Error: Server responded with: {error}" : "Hata: Sunucu yanıtı: {error}", + "Error: Unknown error occurred" : "Hata: Bilinmeyen bir sorun çıktı", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Uyarı: Çalışan sürüm: {version}; Sunucu bu Konuş sürümünün tüm özelliklerini desteklemiyor. Eksik özellikler: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Konuş yüksek başarımlı bir arka yüzde çalıştırılırken, bir bellek ön belleği yapılandırmanız önemle önerilir.", + "Client Push" : "Client Push", + "Client Push is installed, this improves the punctuality of Talk notifications." : "Client Push kurulmuş. Talk bildirimlerinin dakikliği iyileştiriliyor.", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} kurulmamış. Talk bildirimlerinde gecikmeler olabilir.", + "Recording backend" : "Kayıt arka yüzü", + "Using the recording backend requires a High-performance backend." : "Kayıt arka yüzünün kullanılabilmesi için bir yüksek başarımlı arka yüz gereklidir.", + "No recording backend configured" : "Herhangi bir kayıt arka yüzü yapılandırılmamış", + "SIP configuration" : "SIP yapılandırması", + "Using the SIP functionality requires a High-performance backend." : "SIP özelliğinin kullanılabilmesi için bir yüksek başarımlı arka yüz gereklidir.", + "No SIP backend configured" : "Herhangi bir SIP arka yüzü yapılandırılmamış.", + "Invalid date, date format must be YYYY-MM-DD" : "Tarih geçersiz. Tarih biçimi YYYY-AA-GG olmalıdır", + "Conversation not found" : "Görüşme bulunamadı", + "Path is already shared with this conversation" : "Yol bu görüşme ile zaten paylaşılmış", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC kullanarak yazılı, sesli ve görüntülü görüşmeler yapabilirsiniz", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC ile sohbet, görüntülü ve sesli görüşme\n\n* 💬 **Sohbet** Nextcloud Konuş üzerinde, Nextcloud Dosyalar uygulamanızdan veya yerel aygıtınızdan dosya paylaşmanızı veya yüklemenizi ve diğer katılımcıları anmanızı sağlayan basit bir yazı sohbeti uygulaması bulunur.\n* 👥 **Özel, gruba, herkese açık ve şifre korumalı çağrılar!** Bir kişiyi ya da tüm grubu davet edin veya bir bağlantı ile herkesin çağrıya katılmasını sağlayın.\n* 🌐 **Birleşik sohbetler** Diğer Nextcloud sunucularındaki kullanıcılarla sohbet edin\n* 💻 **Ekran paylaşımı!** Ekranınızı görüşmenizin katılımcılarıyla paylaşın.\n* 🚀 **Dosyalar, Takvim, Kullanıcı durumu, Pano, Akış, Haritalar, Akıllı seçici, Kişiler, Deck ve diğer Nextcloud uygulamalarıyla bütünleşik**.\n* 🌉 **Diğer sohbet çözümleriyle eşitleme** [Matterbridge](https://github.com/42wim/matterbridge/) Konuş uygulaması ile bütünleştirildiğinde, diğer birçok sohbet çözümünü Nextcloud Konuş ile kolayca eşitleyebilirsiniz.", + "Leave call" : "Çağrıdan ayrıl", + "Navigating away from the page will leave the call in {conversation}" : "Sayfadan ayrılırsanız {conversation} çağrısından çıkacaksınız", + "Stay in call" : "Çağrıda kal", + "Error occurred when getting the conversation information" : "Görüşme bilgileri alınırken sorun çıktı", + "Discuss this file" : "Bu dosya hakkında görüş", + "Share this file with others to discuss it" : "Bu dosyayı, hakkında görüşmek için başkaları ile paylaş", + "Share this file" : "Bu dosyayı paylaş", + "Join conversation" : "Görüşmeye katıl", + "This conversation is password-protected." : "Bu görüşme parola ile korunmuş.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "IP adresinizden yapılan birden çok geçersiz parola yazma girişimi algılandı. Bu nedenle sonraki denemeniz 30 saniye süreyle engellendi.", + "The password is wrong. Try again." : "Parola yanlış. Yeniden deneyin.", + "Password" : "Parola", + "Submit" : "Gönder", + "Error requesting the password." : "Parola istenirken sorun çıktı.", + "Request password" : "Parola istensin", + "This conversation has ended" : "Bu görüşme sona ermiş", + "Error occurred when joining the conversation" : "Görüşmeye katılmakta sorun çıktı", + "Close Talk sidebar" : "Konuş kenar çubuğunu kapat", + "Open Talk sidebar" : "Konuş kenar çubuğunu aç", + "Everyone" : "Herkes", + "Users and moderators" : "Kullanıcılar ve sorumlular", + "Moderators only" : "Yalnızca sorumlular", + "Disable calls" : "Çağrıları kapat", + "Save changes" : "Değişiklikleri Kaydet", + "Saving …" : "Kaydediliyor …", + "Saved!" : "Kaydedildi!", + "Limit to groups" : "Şu gruplarla sınırla", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "En az bir grup seçildiğinde, yalnızca belirtilen gruplardaki kişiler görüşmelere katılabilir.", + "Guests can still join public conversations." : "Konuklar hala herkese açık görüşmelere katılabilir.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Artık Konuş uygulamasını kullanamayan kullanıcılar, daha önce katıldıkları görüşmelerde katılımcı olarak görüntülenmeyi sürdürecek ve sohbet iletileri de korunacak.", + "Limit using Talk" : "Konuş uygulamasının kullanımı sınırlansın", + "Limit creating a public and group conversation" : "Herkese açık ve grup görüşmesi oluşturma sınırlansın", + "Limit creating conversations" : "Görüşme oluşturma sınırlansın", + "Limit starting a call" : "Bir çağrı başlatma sınırlansın", + "Limit starting calls" : "Çağrı başlatma sınırlansın", + "When a call has started, everyone with access to the conversation can join the call." : "Bir çağrı yapıldığında, görüşmeye erişimi olan herkes çağrıya katılabilir.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Bu sunucuda şu botlar kurulu. Belgelerde, sunucunuzda kullanmak için {linkstart1}kendi botunuzu nasıl oluşturacağınız{linkend} ya da{linkstart2}bot listesi{linkend} hakkında ayrıntılı bilgi bulabilirsiniz.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "Bu sunucuda herhangi bir bot kurulu değil. Belgelerde, sunucunuzda kullanmak için {linkstart1}kendi botunuzu nasıl oluşturacağınız{linkend} ya da{linkstart2}bot listesi{linkend} hakkında ayrıntılı bilgi bulabilirsiniz.", + "Description is not provided" : "Açıklama yazılmamış", + "Locked for moderators" : "Sorumlular için kilitli", + "Enabled" : "Kullanılıyor", + "Disabled" : "Kullanılmıyor", + "Bots settings" : "Bot ayarları", + "State" : "Durum", + "Name" : "Ad", + "Last error" : "Son hata", + "Total errors count" : "Toplam hata sayısı", + "Find more bots" : "Başka botlar bul", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Güvenilen sunucular {linkstart}Paylaşım ayarları{linkend} bölümünden yapılandırılabilir.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Birleşik sohbetler ve aramalar zaten çalışıyor. Ek dosyaların işlenmesi gelecek sürümlerde eklenecek.", + "Enable Federation in Talk app" : "Konuş uygulamasında birlik kullanılsın", + "Permissions" : "İzinler", + "Allow users to be invited to federated conversations" : "Kullanıcılar birleşik görüşmelere davet edilebilsin", + "Allow users to invite federated users into conversation" : "Kulanıcılar görüşmelere birleşik kullanıcıları davet edebilsin", + "Only allow to federate with trusted servers" : "Yalnızca güvenilen sunucular ile birleşik çalışılabilsin", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "En az bir grup seçildiğinde, yalnızca belirtilen gruplardaki kişiler görüşmelere birleşik kullanıcıları davet edebilir.", + "Groups allowed to invite federated users" : "Birleşik kullanıcıları davet edebilecek gruplar", + "Select groups …" : "Grupları seçin…", + "All messages" : "Tüm iletiler", + "@-mentions only" : "Yalnızca @-anmaları", + "Off" : "Kapalı", + "General settings" : "Genel ayarlar", + "Default notification settings" : "Varsayılan bildirim ayarları", + "Default group notification" : "Varsayılan grup bildirimi", + "Default group notification for new groups" : "Yeni gruplar için varsayılan grup bildirimi", + "Integration into other apps" : "Diğer uygulamalar ile bütünleştirme", + "Allow conversations on files" : "Dosyalar üzerine görüşme yapılabilsin", + "Allow conversations on public shares for files" : "Herkese açık paylaşımlardaki dosyalar üzerine görüşme yapılabilsin", + "End-to-end encrypted calls" : "Uçtan uca şifrelenmiş çağrılar", + "Enable encryption" : "Şifreleme kullanılsın", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Yapılandırılmış bir SIP köprüsü ile uçtan uca şifrelenmiş çağrılar için, yüksek başarımlı arka yüz ve SIP köprüsünün daha yeni bir sürümü gerekir.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Şu anda mobil istemcilerde uçtan uca şifrelenmiş çağrılar desteklenmiyor.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Yukarıdaki düğmeye tıklayarak formdaki bilgileri Struktur AG tarafına göndermiş olacaksınız. Diğer bilgileri {linkstart}spreed.eu{linkend} üzerinde bulabilirsiniz.", + "Pending" : "Bekleyen", + "Error" : "Hata", + "Blocked" : "Engellenmiş", + "Active" : "Etkin", + "Expired" : "Geçerlilik süresi dolmuş", + "Never" : "Yok", + "The trial could not be requested. Please try again later." : "Deneme isteği yapılamadı. Lütfen bir süre sonra yeniden deneyin.", + "The account could not be deleted. Please try again later." : "Hesap silinemedi. Lütfen bir süre sonra yeniden deneyin.", + "Hosted High-performance backend" : "Barındırılan yüksek başarımlı arka yüz", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "İş ortağımız Struktur AG, barındırılan bir signaling sunucusu isteğinde bulunabileceğiniz bir hizmet sunuyor. Bunun için aşağıdaki formu doldurmanız yeterlidir. Nextcloud kopyanız istekte bulunur. Sunucu kurulduktan sonra kimlik doğrulama bilgileri otomatik olarak doldurulur. Bu işlem var olan signaling sunucusu ayarlarının üzerine yazar.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Yüksek başarımlı arka uç hesabınızda STUN ve/veya TURN özelliği bulunuyorsa, ayarlar buna göre güncellenir.", + "URL of this Nextcloud instance" : "Bu Nextcloud kopyasının adresi", + "Full name of the user requesting the trial" : "Deneme isteğinde bulunan kullanıcının tam adı", + "Email of the user" : "Kullanıcının e-posta adresi", + "Language" : "Dil", + "Country" : "Ülke", + "Request signaling server trial" : "Signaling sunucusu deneme isteği", + "You can see the current status of your hosted signaling server in the following table." : "Barındırılan signaling sunucunuzun güncel durumunu aşağıdaki tabloda görebilirsiniz.", + "Status" : "Durum", + "Created at" : "Oluşturulma", + "Expires at" : "Geçerlilik süresi sonu", + "Limits" : "Sınırlar", + "STUN included" : "STUN var", + "Yes" : "Evet", + "No" : "Hayır", + "TURN included" : "TURN var", + "Delete the signaling server account" : "Signaling sunucu hesabını sil", + "_%n user_::_%n users_" : ["%n kullanıcı","%n kullanıcı"], + "Installed version: {version}" : "Kurulu sürüm: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Konuş ile diğer hizmetleri bağlamak için Matterbridge kurabilirsiniz. Ayrıntılı bilgi almak için Matterbridge {linkstart1}GitHub sayfasına{linkend} bakabilirsiniz. Uygulamanın indirilip kurulması biraz zaman alabilir. İşlem zaman aşımına uğrarsa {linkstart2}Nextcloud uygulama mağazasından{linkend} el ile kurun.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge yürütülebilir dosyasının izinleri doğru değil. Lütfen Matterbridge yürütülebilir dosyasının sahibinin doğru kullanıcı olduğundan ve yürütülebilir olduğundan emin olun. Bu dosya \"/…/nextcloud/apps/talk_matterbridge/bin/\" klasöründe bulunur.", + "Matterbridge binary was not found or couldn't be executed." : "Matterridge yürütülebilir dosyası bulunamadı ya da yürütülemiyor.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Matterbridge uygulamasının yolunu yapılandırma bölümünden el ile de ayarlayabilirsiniz. Ayrıntılı bilgi almak için {linkstart}Matterbridge bütünleştirme belgelerine{linkend} bakabilirsiniz.", + "Downloading …" : "İndiriliyor…", + "Install Talk Matterbridge" : "Konuş Matterbridge kur", + "An error occurred while installing the Matterbridge app" : "Matterbridge uygulaması kurulurken bir sorun çıktı", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Konuş Matterbridge kurulurken bir sorun çıktı. Lütfen el ile kurun", + "Failed to execute Matterbridge binary." : "Matterbridge uygulaması çalıştırılamadı.", + "Matterbridge integration" : "Matterbridge bütünleştirmesi", + "Enable Matterbridge integration" : "Matterbridge bütünleştirmesi kullanılsın", + "Status: Checking connection" : "Durum: Bağlantı denetleniyor", + "OK: Running version: {version}" : "Tamam: Çalışan sürüm: {version}", + "Error: Server seems to be a Signaling server" : "Hata: Sunucu bir signaling sunucusu gibi görünüyor", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Hata: Nextcloud sunucusunun ve kayıt arka yüzü sunucusunun sistem saatleri aynı değil. Lütfen her iki sunucunun da bir zaman sunucusuna bağlı olduğundan emin olun ya da saatlerini el ile eşitleyin.", + "Recording backend URL" : "Kayıt arka yüzü adresi", + "Validate SSL certificate" : "SSL sertifikasını doğrula", + "Delete this server" : "Bu sunucuyu sil", + "Test this server" : "Bu sunucuyu sına", + "Disabled for all calls" : "Tüm çağrılar için kapalı", + "Enabled for all calls" : "Tüm çağrılar için açık", + "Configurable on conversation level by moderators" : "Sorumlular tarafından görüşme düzeyinde yapılandırılabilir", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "\"upload_max_filesize\" or \"post_max_size\" PHP ayarı en fazla {maxUpload} boyutundaki dosyaların yüklenmesine izin veriyor.", + "Recording backend settings saved" : "Kayıt arka yüzü ayarları kaydedildi", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Sorumlular görüşme düzeyinde kayıt alma rızasını açabilir. Bu görüşmedeki çağrılara katılmadan önce her kullanıcıdan kayıt alma rızası istenir.", + "The consent to be recorded will be required for each participant before joining every call." : "Her katılımcıdan çağrılara katılmadan önce kayıt alma rızası istenir. ", + "The consent to be recorded is not required." : "Kayıt alma rızası istenmez.", + "Recording backend configuration is only possible with a High-performance backend." : "Kayıt arka yüzü yapılandırması yalnızca yüksek başarımlı arka yüz ile kullanılabilir.", + "Add a new recording backend server" : "Yeni bir kayıt arka yüzü sunucusu ekle", + "Shared secret" : "Paylaşılan parola", + "Recording consent" : "Kayıt alma rızası", + "Recording transcription" : "Kaydı yazıya dönüştürme", + "Automatically transcribe call recordings with a transcription provider" : "Bir yazıya dönüştürme hizmeti ile çağrı kayıtlarını otomatik olarak yazıya dönüştürün", + "Automatically summarize call recordings with transcription and summary providers" : "Yazıya dönüştürme ve özetleme hizmetleri ile çağrı kayıtlarını otomatik olarak özetleyin", + "SIP configuration saved!" : "SIP yapılandırması kaydedildi!", + "SIP configuration is only possible with a High-performance backend." : "SIP yapılandırması yalnızca yüksek başarımlı arka yüz ile kullanılabilir.", + "Enable SIP Dial-out option" : "SIP çevirme seçeneği kullanılsın", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signalling sunucusunun desteklenen SIP çevirme özelliğine güncellenmesi gerekiyor.", + "Do not show SIP Dial-out caller number" : "SIP giden arama numarası görüntülenmesin", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Alıcıyı aramak için anonim numara \"bilinmiyor\" veya \"gizli numara\" olarak görünmeli", + "Dial-out number" : "Giden arama numarası", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Giden aramalar için varsayılan arayan numara olarak kullanılacak E164 biçiminde numara", + "Dial-out prefix" : "Giden arama ön eki", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Giden aramalar için yapılandırılmış kullanıcı numarası ön eki (varsayılan `+`)", + "Restrict SIP configuration" : "SIP yapılandırması kısıtlansın", + "Enable SIP configuration" : "SIP yapılandırması kullanılsın", + "Only users of the following groups can enable SIP in conversations they moderate" : "Yalnızca aşağıdaki grupların kullanıcıları sorumlu oldukları görüşmelerde SIP özelliğini açabilir", + "Phone number (Country)" : "Telefon numarası (Ülke)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Bu bilgiler davet e-postalarında gönderilir ve ayrıca kenar çubuğunda tüm katılımcılara görüntülenir.", + "Nextcloud base URL" : "Temel Nextcloud adresi", + "Talk Backend URL" : "Konuş arka yüzü adresi", + "WebSocket URL" : "WebSocket adresi", + "Available features" : "Kullanılabilecek özellikler", + "Error: Websocket connection failed" : "Hata: Websocket bağlantısı kurulamadı", + "Error code" : "Hata kodu", + "Error message" : "Hata iletisi", + "Error: Websocket connection failed. Check browser console" : "Hata: Websocket bağlantısı kurulamadı. Tarayıcı konsoluna bakın", + "High-performance backend URL" : "Yüksek başarımlı arka yüz adresi", + "Missing High-performance backend warning hidden" : "Yüksek başarımlı arka yüz eksik uyarısı gizlendi", + "High-performance backend settings saved" : "Yüksek başarımlı arka yüz ayarları kaydedildi", + "Nextcloud Talk setup not complete" : "Nextcloud Konuş kurulumu tamamlanmamış", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Yüksek başarımlı arka yüz olmadan iki kişiden fazla katılımcının olduğu görüşmelerde, katılımcıların büyük olasılıkla bağlantı sorunları yaşayacağını ve katılımcı aygıtlarında yüksek yük oluşacağını unutmayın.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Birden fazla katılımcının olduğu görüşmelerin sorunsuz bir şekilde yapılabilmesi için yüksek başarımlı arka yüz kurun.", + "Nextcloud portal" : "Nextcloud sitesi", + "Quick installation guide" : "Hızlı kurulum rehberi", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Birden fazla katılımcının olduğu aramalar ve görüşmeler için yüksek başarımlı arka yüz olmadan, tüm katılımcılar her katılımcı için kendi videolarını ayrı ayrı yüklemek zorunda kalır. Bu da büyük olasılıkla bağlantı sorunlarına ve katılımcı aygıtlarında yüksek yüke neden olur.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Nextcloud Konuş uygulamasını yüksek başarımlı bir arka yüz ile kullanırken dağıtılmış bir ön bellek kurmanız önemle önerilir.", + "Add High-performance backend server" : "Yüksek başarımlı arka yüz sunucusu ekle", + "Warn about connectivity issues in calls with more than 2 participants" : "2 kişiden fazla katılımcısı olan çağrılarda bağlantı sorunları uyarısı görüntülensin", + "STUN server URL" : "STUN sunucusunun adresi", + "The server address is invalid" : "Sunucu adresi geçersiz", + "STUN settings saved" : "STUN ayarları kaydedildi", + "STUN servers" : "STUN sunucuları", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN sunucusu bir yönelticinin arkasındaki katılımcının herkese açık adresinin belirlenmesinde kullanılır.", + "Add a new STUN server" : "Yeni STUN sunucusu ekle", + "{schema} scheme must be used with a domain" : "{schema} şeması bir etki alanı ile birlikte kullanılmalıdır", + "{option1} and {option2}" : "{option1} ve {option2}", + "{option} only" : "yalnızca {option}", + "OK: Successful ICE candidates returned by the TURN server" : "Tamam: TURN sunucusu tarafından çalışan ICE adayları bildirildi", + "Error: No working ICE candidates returned by the TURN server" : "Sorun: TURN sunucusu tarafından çalışan bir ICE adayı bildirilmedi", + "Testing whether the TURN server returns ICE candidates" : "TURN sunucusunun ICE adaylarını bildirip bildirmediği sınanıyor", + "TURN server schemes" : "TURN sunucu şemaları", + "TURN server URL" : "TURN sunucusunun adresi", + "TURN server secret" : "TURN sunucu parolası", + "TURN server protocols" : "TURN sunucu iletişim kuralları", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN sunucusu bir güvenlik duvarı arkasındaki katılımcıların bağlanabilmesi için kullanılan bir vekil sunucudur. Bazı kullanıcılar diğerlerine bağlanamıyorsa genellikle bir TURN sunucusunun kullanılması gerekir. Kurulum bilgileri için {linkstart}bu belgeye{linkend} bakabilirsiniz.", + "TURN settings saved" : "TURN ayarları kaydedildi", + "TURN servers" : "TURN sunucuları", + "Add a new TURN server" : "Yeni TURN sunucusu ekle", + "Failed" : "Tamamlanamadı", + "OK" : "Tamamlandı", + "Checking …" : "Denetleniyor…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Tamamlanamadı: WebAssembly kullanımdan kaldırılmış ya da bu tarayıcıda desteklenmiyor. Denetlemek için WebAssembly eklentisini kullanıma alın ya da destekleyen bir tarayıcı kullanın.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Tamamlanamadı: Site sunucusu \".wasm\" ve \".tflite\" dosyalarını düzgün şekilde geri döndürmedi. Lütfen Konuş belgelerinde \"sistem gereksinimleri\" bölümüne bakın.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "Tamamlandı: Site sunucusu \".wasm\" ve \".tflite\" dosyalarını düzgün şekilde geri döndürdü.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Görünüşe göre PHP ile Apache yapılandırması uyumlu değil. Lütfen PHP kurulumunun yalnızca MPM_PREFORK modülü ile PHP-FPM kurulumunun yalnızca MPM_EVENT modülü ile kullanılabileceğini unutmayın.", + "Web server setup checks" : "Site sunucusu kurulumu denetimleri", + "Files required for virtual background can be loaded" : "Arka plan için kullanılacak dosyalar yüklenebilir", + "Federated user" : "Birleşik kullanıcı", + "Assign participants to rooms" : "Katılımcıları odalara dağıt", + "Configure breakout rooms" : "Çalışma odaları yapılandırması", + "Number of breakout rooms" : "Çalışma odası sayısı", + "You can create from 1 to 20 breakout rooms." : "1 ile 20 arasında çalışma odası oluşturabilirsiniz.", + "Assignment method" : "Atama yöntemi", + "Automatically assign participants" : "Katılımcılar otomatik olarak dağıtılsın", + "Manually assign participants" : "Katılımcılar el ile dağıtılsın", + "Allow participants to choose" : "Katılımcılar oda seçebilsin", + "Create rooms" : "Odaları oluştur", + "Confirm" : "Onayla", + "Create breakout rooms" : "Çalışma odaları oluştur", + "Reset" : "Sıfırla", + "Delete breakout rooms" : "Çalışma odalarını sil", + "Room {roomNumber}" : "{roomNumber}. oda", + "Current breakout rooms and settings will be lost" : "Geçerli çalışma odaları ve ayarları kaybolacak", + "Cancel" : "İptal", + "Unassigned participants" : "Dağıtılmamış katılımcılar", + "Back" : "Geri", + "Assign" : "Ata", + "Add participant \"{user}\"" : "\"{user}\" katılımcısını ekle", + "Now" : "Şimdi", + "Invalid calendar selected" : "Seçilen takvim geçersiz", + "Invalid start time selected" : "Seçilen başlangıç zamanı geçersiz", + "Invalid end time selected" : "Seçilen bitiş zamanı geçersiz", + "Unknown error occurred" : "Bilinmeyen bir sorun çıktı", + "Sending no invitations" : "Herhangi bir davet gönderilemedi", + "{participant0} will receive an invitation" : "{participant0} için davet gönderilecek", + "{participant0} and {participant1} will receive invitations" : "{participant0} ve {participant1} için davet gönderilecek", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} ve %n diğer kişi için davet gönderilecek","{participant0}, {participant1} ve %n diğer kişi için davet gönderilecek"], + "Invite {user}" : "{user} kullanıcısını davet et", + "Invite all users and emails in this conversation" : "Bu görüşmedeki tüm kullanıcıları ve e-postaları davet et", + "Meeting created" : "Toplantı oluşturuldu", + "Upcoming meetings" : "Yaklaşan toplantılar", + "Loading …" : "Yükleniyor…", + "No upcoming meetings" : "Yaklaşan bir toplantı yok", + "Schedule a meeting" : "Bir toplantı zamanla", + "Meeting title" : "Toplantı başlığı", + "From" : "Başlangıç", + "To" : "Bitiş", + "Calendar" : "Takvim", + "Attendees" : "Katılanlar", + "No other participants to send invitations to." : "Davet gönderilecek başka bir katılımcı yok.", + "Add attendees" : "Katılımcılar ekle", + "Save" : "Kaydet", + "Search participants" : "Katılımcı arama", + "No results" : "Herhangi bir sonuç bulunamadı", + "Done" : "Tamam", + "Disable live transcription" : "Canlı yazıya dönüştürmeyi kapat", + "Enable live transcription (generated by AI)" : "Canlı yazıya dönüştürmeyi aç (yapar zeka ile)", + "Disable live translation" : "Canlı çeviriyi kapat", + "Enable live translation (generated by AI)" : "Canlı çeviriyi aç (yapay zeka ile)", + "Original language: {languageName}" : "Özgün dil: {languageName}", + "Translated language" : "Çevrilmiş dil", + "Translated language: {languageName}" : "Çevrilmiş dil: {languageName}", + "Raise hand" : "El kaldır", + "Raise hand (R)" : "El kaldır (R)", + "Lower hand" : "Eli indir", + "Lower hand (R)" : "Eli indir (R)", + "Exit full screen (F)" : "Tam ekrandan çık (F)", + "Full screen (F)" : "Tam ekran (F)", + "Speaker view" : "Konuşmacı görünümü", + "Grid view" : "Tablo görünümü", + "Error when trying to load the available live transcription languages" : "Canlı yazıya dönüştürme için kullanılabilecek diller yüklenirken sorun çıktı", + "Failed to enable live transcription" : "Canlı yazıya dönüştürme açılamadı", + "Failed to enable live translations" : "Canlı çeviriler açılamadı", + "Failed to disable live translations" : "Canlı çeviriler kapatılamadı", + "Recording consent is required" : "Kayıt alma rızası isteniyor", + "This conversation is read-only" : "Bu görüşme salt okunur", + "Conversation not found or not joined" : "Görüşme bulunamadı ya da görüşmeye katılınmamış", + "Lobby is still active and you're not a moderator" : "Giriş hala kullanılıyor ve siz bir sorumlu değilsiniz", + "Connection failed" : "Bağlantı kurulamadı", + "Reload" : "Yeniden yükle", + "{nickName} raised their hand." : "{nickName} elini kaldırdı.", + "A participant raised their hand." : "Bir katılımcı elini kaldırdı.", + "Collapse stripe" : "Şeridi daralt", + "Expand stripe" : "Şeridi genişlet", + "Previous page of videos" : "Önceki görüntü sayfası", + "Next page of videos" : "Sonraki görüntü sayfası", + "Connecting …" : "Bağlantı kuruluyor …", + "Calling …" : "Aranıyor…", + "Waiting for {user} to join the call" : "{user} kullanıcısının çağrıya katılması bekleniyor", + "Waiting for others to join the call …" : "Diğerlerinin çağrıya katılması bekleniyor …", + "You can invite others in the participant tab of the sidebar" : "Diğer kişileri kenar çubuğundaki katılımcı sekmesinden davet edebilirsiniz", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Diğer kişileri kenar çubuğundaki katılımcı sekmesinden ya da bu bağlantıyı paylaşarak davet edebilirsiniz!", + "Share this link to invite others!" : "Diğer kişileri davet etmek için bu bağlantıyı paylaşın!", + "Copy link" : "Bağlantıyı kopyala", + "You are not allowed to enable audio" : "Sesi açma izniniz yok", + "No audio. Click to select device" : "Ses yok. Aygıtı seçmek için tıklayın", + "Mute audio" : "Sesi kıs", + "Mute audio (M)" : "Sesi kıs (M)", + "Unmute audio" : "Sesi aç", + "Unmute audio (M)" : "Sesi aç (M)", + "None" : "Yok", + "Select a microphone" : "Bir mikrofon seçin", + "Select a speaker" : "Bir hoparlör seçin", + "Microphone settings" : "Mikrofon ayarları", + "Check devices" : "Aygıtları denetle", + "Access to camera was denied" : "Kameraya erişim reddedildi", + "Error while accessing camera: It is likely in use by another program" : "Kameraya erişilirken sorun çıktı: Başka bir uygulama tarafından kullanılıyor olabilir", + "Error while accessing camera" : "Kameraya erişilirken sorun çıktı", + "You have been muted by a moderator" : "Sesiniz sorumlu tarafından kısıldı", + "Hide presenter video" : "Sunucunun görüntüsünü gizle", + "You are not allowed to enable video" : "Görüntüyü açma izniniz yok", + "No video. Click to select device" : "Görüntü yok. Aygıtı seçmek için tıklayın", + "Disable video" : "Görüntüyü kapat", + "Disable video (V)" : "Görüntüyü kapat (V)", + "Enable video" : "Görüntü kullanılsın", + "Enable video (V)" : "Görüntüyü aç (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç. Görüntü ilk kez açılırken bağlantınız bir an kesilecek", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç (V) - Görüntü ilk kez açıldığında bağlantınız kısa süreli olarak kesilecek", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Görüntüyü aç. Görüntü ilk kez açılırken bağlantınız bir an kesilecek", + "Select a video device" : "Bir görüntü aygıtı seçin", + "Show presenter" : "Sunucu görüntülensin", + "You" : "Siz", + "Mute" : "Sesi kıs", + "Muted" : "Sesi kapalı", + "Show screen" : "Ekranı görüntüle", + "Stop following" : "Takibi bırak", + "Connection could not be established …" : "Bağlantı kurulamadı…", + "Connection was lost and could not be re-established …" : "Bağlantı kesildi ve yeniden kurulamadı…", + "Connection could not be established. Trying again …" : "Bağlantı kurulamadı. Yeniden deneniyor…", + "Connection lost. Trying to reconnect …" : "Bağlantı kesildi. Yeniden deneniyor…", + "Connection problems …" : "Bağlantı sorunları…", + "Collapse" : "Daralt", + "Expand" : "Genişlet", + "You need to be logged in to upload files" : "Dosya yükleyebilmek için oturum açmalısınız", + "Drop your files to upload" : "Yüklenecek dosyaları sürükleyip bırakın", + "Conversation messages" : "Görüşme iletileri", + "Scroll to bottom" : "Aşağıya kaydır", + "Post message" : "İleti gönder", + "Federated conversation" : "Birleşik görüşme", + "Public conversation" : "Herkese açık görüşme", + "Favorite" : "Sık kullanılanlara ekle", + "Banned users" : "Yasaklanmış kullanıcılar", + "Manage the list of banned users in this conversation." : "Bu görüşmede yasaklanmış kullanıcıların listesini yönetir.", + "Manage bans" : "Yasaklama yönetimi", + "No banned users" : "Yasaklanmış bir kullanıcı yok", + "Banned by:" : "Yasaklayan:", + "Date:" : "Tarih:", + "Note:" : "Not:", + "Hide details" : "Ayrıntıları gizle", + "Show details" : "Ayrıntıları görüntüle", + "Unban" : "Yasaklamayı kaldır", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "{linkstart}Takvim ↗{linkend} içindeki başlık ve açıklamayı değiştirebilirsiniz.", + "Error while updating conversation name" : "Görüşme adı güncellenirken sorun çıktı", + "Error while updating conversation description" : "Görüşme açıklaması güncellenirken sorun çıktı", + "Enter a name for this conversation" : "Bu görüşme için bir ad yazın", + "Edit conversation name" : "Görüşme adını düzenle", + "Edit conversation description" : "Görüşme açıklamasını düzenle", + "Enter a description for this conversation" : "Bu görüşme için bir açıklama yazın", + "Picture" : "Fotoğraf", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "Bu görüşmede şu botlar kullanılabilir. Bu sunucuya daha fazla bot kurması için yöneticiniz ile görüşün.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "Bu sunucuya herhangi bir bot kurulmamış. Bu sunucuya botları kurması için yöneticiniz ile görüşün.", + "Disable" : "Kullanımdan kaldır", + "Enable" : "Aç", + "Breakout rooms" : "Çalışma odaları", + "Manage breakout rooms" : "Çalışma odaları yönetimi", + "Set up breakout rooms for this conversation" : "Bu görüşme için çalışma odalarını hazırla", + "Please select a valid PNG or JPG file" : "Lütfen geçerli bir PNG ya da JPG dosyası seçin", + "Choose your conversation picture" : "Görüşme görselinizi seçin", + "Choose" : "Seçin", + "Error setting conversation picture" : "Görüşme görseli ayarlanırken sorun çıktı", + "Could not set the conversation picture: {error}" : "Görüşme görseli ayarlanamadı: {error}", + "Error cropping conversation picture" : "Görüşme görseli kırpılırken sorun çıktı", + "Error removing conversation picture" : "Görüşme görseli kaldırılırken sorun çıktı", + "Set emoji as conversation picture" : "Emojiyi görüşme görseli olarak ayarla", + "Set background color for conversation picture" : "Arka plan rengini görüşme görseli olarak ayarla", + "Upload conversation picture" : "Görüşme görseli yükle", + "Choose conversation picture from files" : "Görüşme görselini dosyalardan seçin", + "Remove conversation picture" : "Görüşme görselini kaldır", + "The file must be a PNG or JPG" : "Dosya PNG ya da JPG biçiminde olmalıdır", + "Set picture" : "Görseli ayarla", + "Default permissions modified for {conversationName}" : "{conversationName} için varsayılan izinler değiştirildi", + "Could not modify default permissions for {conversationName}" : "{conversationName} için varsayılan izinler değiştirilemedi", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Bu görüşmedeki katılımcıların varsayılan izinlerini düzenleyin. Sorumlular bu ayarlardan etkilenmez.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "Bu bölümdeki izinler her değiştirildiğinde, daha önce katılımcılara tek tek atanmış özel izinler kaybolur.", + "All permissions" : "Tüm izinler", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Katılımcıların bir çağrı başlatma, bir çağrıya katılma, ses, görüntü ve ekran paylaşımını açma izinleri vardır.", + "Restricted" : "Kısıtlanmış", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Katılımcılar yalnızca çağrılara katılabilir, ancak bir sorumlu izinlerini el ile verene kadar ses, görüntü veya ekran paylaşımını açamaz.", + "Advanced permissions" : "Gelişmiş izinler", + "Edit permissions" : "İzinleri düzenle", + "Conversation settings" : "Görüşme ayarları", + "Basic Info" : "Temel bilgiler", + "Personal" : "Kişisel", + "Moderation" : "Yönetim", + "Setup overview" : "Kurulum özeti", + "Live transcription" : "Canlı yazıya dönüştürme", + "Enable live transcription" : "Canlı yazıya dönüştürmeyi aç", + "Breakout Rooms" : "Çalışma odaları", + "Matterbridge" : "Matterbridge", + "Bots" : "Botlar", + "Danger zone" : "Tehlikeli bölge", + "Archive conversation" : "Görüşmeyi arşivle", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Arşivlenmiş görüşmeler varsayılan olarak görüşme listesinde gizlenir. Ancak, görüşme adını aradığınızda veya arşivlenmiş görüşmeler listesine eriştiğinizde görüntülenirler.", + "Do you really want to leave \"{displayName}\"?" : "\"{displayName}\" görüşmesinden ayrılmak istediğinize emin misiniz?", + "You can archive this conversation instead." : "Bunun yerine bu görüşmeyi arşivleyebilirsiniz.", + "Leave conversation" : "Görüşmeden ayrıl", + "You need to promote a new moderator before you can leave the conversation" : "Görüşmeden ayrılmadan önce başka bir kullanıcıyı sorumluluğa yükseltmelisiniz", + "Delete conversation" : "Görüşmeyi sil", + "Do you really want to delete \"{displayName}\"?" : "\"{displayName}\" ögesini silmek istediğinize emin misiniz?", + "Error while deleting conversation" : "Görüşme silinirken sorun çıktı", + "Delete all chat messages" : "Tüm sohbet iletilerini sil", + "Do you really want to delete all messages in \"{displayName}\"?" : "\"{displayName}\" içindeki tüm iletileri silmek istediğinize emin misiniz?", + "Error while clearing chat history" : "Sohbet geçmişi silinirken sorun çıktı", + "Be careful, these actions cannot be undone." : "Dikkatli olun, bu işlemler geri alınamaz.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Bir görüşmeden ayrıldıktan sonra, kapalı bir sohbete yeniden katılmak için davet edilmek gerekir. Açık bir sohbete herhangi bir zamanda yeniden katılabilirsiniz.", + "Permanently delete this conversation." : "Bu görüşmeyi kalıcı olarak sil.", + "Delete chat messages" : "Sohbet iletilerini sil", + "Permanently delete all the messages in this conversation." : "Bu görüşmedeki tüm iletileri sil.", + "_%n hour_::_%n hours_" : ["%n saat","%n saat"], + "_%n day_::_%n days_" : ["%n gün","%n gün"], + "_%n week_::_%n weeks_" : ["%n hafta","%n hafta"], + "Custom expiration time" : "Özel geçerlilik süresi", + "Message expiration disabled" : "İleti geçerlilik süresi kapalı", + "Message expiration set: {duration}" : "Ayarlanmış ileti geçerlilik süresi: {duration}", + "Error when trying to set message expiration" : "İleti geçerlilik süresi ayarlanırken sorun çıktı", + "Message expiration" : "Süreli ileti", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Sohbet iletileri süresi belirli bir süre sonra dolacak şekilde ayarlanabilir. Not: Süresi dolan iletlerdeki dosyalar sahibi için silinmez, ancak artık görüşmede paylaşılmaz.", + "Set message expiration" : "İletinin geçerlilik süresini ayarlayın", + "Current message expiration" : "Geçerli iletinin geçerlilik süresi", + "Password copied to clipboard" : "Parola panoya kopyalandı", + "Password could not be copied" : "Parola panoya kopyalanamadı", + "Guest access" : "Konuk erişimi", + "Breakout rooms are not allowed in public conversations." : "Herkese açık görüşmelerde çalışma odaları kullanılamaz", + "Allow guests to join this conversation via link" : "Konuklar bu görüşmeye bağlantı ile katılabilsin", + "Password protection" : "Parola koruması", + "This conversation is password-protected. Guests need password to join" : "Bu görüşme parola ile korunmuş. Konukların katılabilmesi için parolayı bilmeleri gerekir", + "Password protection is needed for public conversations" : "Herkese açık görüşmeler için parola ile korunması gereklidir", + "Set a password" : "Bir parola ayarlayın", + "Change password" : "Parolayı değiştir", + "Enter new password" : "Yeni parolayı yazın", + "Save password" : "Parolayı kaydet", + "Copy password" : "Parolayı kopyala", + "Guests are allowed to join this conversation via link" : "Konuklar bu görüşmeye bağlantı ile katılabilir", + "Guests are not allowed to join this conversation" : "Konuklar bu görüşmeye katılamaz", + "Resend invitations" : "Davetleri yeniden gönder", + "This conversation is open to both registered users and users created with the Guests app" : "Bu görüşmeye katılım, hem hesabı olan kullanıcılara hem de Konuklar uygulaması ile oluşturulan kullanıcılara açık", + "This conversation is open to registered users" : "Bu görüşmeye katılım, hesabı olan kullanıcılara açık", + "This conversation is limited to the current participants" : "Bu görüşmeye katılım, geçerli katılımcılar ile sınırlı", + "You opened the conversation to both registered users and users created with the Guests app" : "Görüşmeye katılımı, hem hesabı olan kullanıcılara ve hem de Konuklar uygulaması ile oluşturulan kullanıcılara açtınız", + "Error occurred when opening or limiting the conversation" : "Görüşme açılır ya da kısıtlanırken sorun çıktı", + "Open conversation to registered users, showing it in search results" : "Görüşme hesabı olan kullanıcılara açılarak arama sonuçlarında görüntülensin", + "Also open to users created with the Guests app" : "Konuklar uygulaması ile oluşturulmuş kullanıcılara da açık", + "Open conversation" : "Açık görüşme", + "Set language spoken in calls" : "Çağrılarda konuşulan dili ayarlayın", + "Languages could not be loaded" : "Diller yüklenemedi", + "Loading languages …" : "Diller yükleniyor…", + "Invalid language" : "Dil geçersiz", + "Default language (English)" : "Varsayılan dil (İngilizce)", + "Default live transcription language set" : "Varsayılan canlı yazıya dönüştürme dili ayarlandı", + "Live transcription language set: {languageName}" : "Ayarlanmış canlı yazıya dönüştürme dili: {languageName}", + "Error when trying to set live transcription language" : "Canlı yazıya dönüştürme dili ayarlanırken sorun çıktı", + "Start time: {date}" : "Başlangıç zamanı: {date}", + "Start time has been updated" : "Başlangıç saati güncellendi", + "Error occurred while updating start time" : "Başlangıç saati güncellenirken sorun çıktı", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Giriş kullanıma alındığında, sorumlu olmayanlar sürmekte olan çağrıdan çıkarılır.", + "Enable lobby, restricting the conversation to moderators" : "Girişi kullanıma al, görüşmeyi sorumlular ile kısıtla", + "Meeting start time" : "Toplantının başlangıç saati", + "Start time (optional)" : "Başlangıç zamanı (isteğe bağlı)", + "Import email participants" : "E-posta katılımcılarını içe aktar", + "You can import a list of email participants from a CSV file." : "E-posta katılımcılarını bir CSV dosyası ile içe aktarabilirsiniz.", + "Poll drafts" : "Anket taslakları", + "Browse poll drafts" : "Anket taslaklarına göz at", + "Error occurred when locking the conversation" : "Görüşme kilitlenirken sorun çıktı", + "Error occurred when unlocking the conversation" : "Görüşmenin kilidi açılırken sorun çıktı", + "Lock conversation" : "Görüşmeyi kilitle", + "This will also terminate the ongoing call." : "Bu işlem ayrıca sürmekte olan çağrıyı sonlandırır.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Görüşmeyi kilitleyerek, ileti gönderilmesini ya da çağrı başlatılmasını engelle", + "Edit" : "Düzenle", + "More information" : "Diğer bilgiler", + "Delete" : "Sil", + "Add new bridged channel to current conversation" : "Geçerli görüşmeye yeni bir köprülenmiş kanal ekle", + "unknown state" : "durum bilinmiyor", + "running" : "çalışıyor", + "not running, check Matterbridge log" : "çalışmıyor. Matterbridge günlüğünü denetleyin", + "not running" : "çalışmıyor", + "Bridge saved" : "Köprü kaydedildi", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Matterbridge kullanarak çeşitli anlık ileti sistemlerindeki kanallar ile köprü kurabilirsiniz.", + "More info on Matterbridge" : "Matterbridge hakkında ayrıntılı bilgiler", + "Messaging systems" : "İleti sistemleri", + "Enable bridge" : "Köprü kullanılsın", + "Show Matterbridge log" : "Matterbridge günlüğünü görüntüle", + "Log content" : "Günlük içeriği", + "Only moderators are allowed to mention @all" : "Yalnızca sorumlular @all anmasını kullanabilir", + "All participants are allowed to mention @all" : "Tüm katılımcılar @all anmasını kullanabilir", + "Participants are now allowed to mention @all." : "Katılımcılar artık @all anmasını kullanabilir.", + "Mentioning @all has been limited to moderators." : "@all anmasını artık yalnızca sorumlular kullanabilir.", + "Allow participants to mention @all" : "Katılımcılar @all anmasını kullanabilsin", + "Mention permissions" : "Anma izinleri", + "Notifications" : "Bildirimler", + "Notify about calls in this conversation" : "Bu görüşmedeki çağrılar bildirilsin", + "Important conversation" : "Önemli görüşme", + "\"Do not disturb\" user status is ignored for important conversations" : "Önemli görüşmeler için \"Rahatsız etmeyin\" kullanıcı durumu yok sayılır", + "Sensitive conversation" : "Ciddi görüşme", + "Message preview will be disabled in conversation list and notifications" : "Görüşme listesi ve bildirimlerde ileti ön izlemesi kapatılacak", + "Recording consent is required for calls in this conversation" : "Bu görüşmedeki çağrılar için kayıt alma rızası istenir", + "Recording consent is not required for calls in this conversation" : "Bu görüşmedeki çağrılar için kayıt alma rızası istenmez", + "Recording consent requirement was updated" : "Kayıt alma rızası güncellendi", + "Error occurred while updating recording consent" : "Kayıt alma rızası güncellenirken sorun çıktı", + "Recording Consent" : "Kayıt alma rızası", + "Recording consent cannot be changed once a call or breakout session has started." : "Bir çağrı ya da çalışma odası oturumu başladıktan sonra kayıt alma rızası değiştirilemez.", + "Require recording consent before joining call in this conversation" : "Bu görüşmedeki çağrılara katılmadan önce kayıt alma rızası istensin", + "Recording consent is required for all calls" : "Tüm çağrılar için kayıt alma rızası istensin", + "SIP dial-in is now possible without PIN requirement" : "Artık PIN kodu gerekmeden SIP araması yapılabilir", + "SIP dial-in is now enabled" : "SIP çevirmeli arama kullanıma alındı", + "SIP dial-in is now disabled" : "SIP çevirmeli arama kullanımdan kaldırıldı", + "Error occurred when enabling SIP dial-in" : "SIP çevirmeli arama kullanıma alınırken sorun çıktı", + "Error occurred when disabling SIP dial-in" : "SIP çevirmeli arama kullanımdan kaldırılırken sorun çıktı", + "Phone and SIP dial-in" : "Telefon ve SIP çevirme", + "Enable phone and SIP dial-in" : "Telefon ve SIP çevirme özelliğini kullanıma al", + "Allow to dial-in without a PIN" : "Pin kodu olmadan numara aranabilsin", + "Ongoing" : "Sürüyor", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n kişi kabul etti","%n kişi kabul etti"], + "_%n person declined_::_%n people declined_" : ["%n kişi reddetti","%n kişi reddetti"], + "_and %n other attachment_::_and %n other attachments_" : ["ve %n diğer ek dosya","ve %n diğer ek dosya"], + "With {displayName}" : "{displayName} ile", + "In {conversation}" : "{conversation} içinde", + "View attachment" : "Ek dosyayı görüntüle", + "Join" : "Katıl", + "View conversation" : "Görüşmeyi görüntüle", + "View event on Calendar" : "Etkinliği takvimde görüntüle", + "Error while creating the conversation" : "Görüşme oluşturulurken sorun çıktı", + "Hello, {displayName}" : "Merhaba, {displayName}", + "Start meeting now" : "Toplantıyı başlat", + "Give your meeting a title" : "Toplantınıza bir ad verin", + "Create and copy link" : "Bağlantıyı oluşturup kopyalayın", + "Create a new conversation" : "Yeni bir görüşme oluştur", + "Join open conversations" : "Açık görüşmelere katıl", + "Call a phone number" : "Bir telefon numarasını ara", + "Scroll backward" : "Geriye kaydır", + "Scroll forward" : "İleriye kaydır", + "Schedule meetings" : "Toplantı zamanla", + "You don't have any upcoming meetings" : "Yaklaşan bir toplantınız yok", + "Open calendar" : "Takvimi aç", + "Unread mentions" : "Okunmamış anmalar", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Anıldığınız iletiler burada görüntülenir. @ ve ardından adlarını yazarak insanları anabilirsiniz", + "Upcoming reminders" : "Yaklaşan anımsatıcılar", + "Message reminders" : "İleti anımsatıcıları", + "Set a reminder on a message to be notified" : "Daha sonra yeniden bilgilendirilmek için bir iletiye bir anımsatıcı ayarlayın", + "Start a group conversation" : "Bir grup görüşmesi başlat", + "Create conversation" : "Görüşme oluştur", + "Enter your name" : "Adınızı yazın", + "Submit name and join" : "Adı gönder ve katıl", + "Do you already have an account?" : "Zaten bir hesabınız var mı?", + "Log in" : "Oturum aç", + "Error while verifying uploaded file" : "Yüklenmiş dosya doğrulanırken sorun çıktı", + "Uploaded file is verified" : "Yüklenmiş dosya doğrulandı", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "İçerik biçimi virgül ile ayrılmış değerlerdir (CSV):
- Başlık satırı zorunlludur ve \"name\",\"email\" veya yalnızca \"email\" ile eşleşmelidir
- Her satıra yalnızca bir kayıt yazılmalıdır (örneğin \"Ali Kaya\",\"alikaya@ornek.tld\")", + "Participants added successfully" : "Katılımcılar eklendi", + "Error while adding participants" : "Katılımcılar eklenirken sorun çıktı", + "Import a file" : "Dosyadan içe aktar", + "Browse" : "Göz at", + "Verifying uploaded file …" : "Yüklenen dosya doğrulanıyor…", + "This might take a moment" : "Bu işlemin tamamlanması biraz zaman alabilir", + "Send invitations" : "Davetleri gönder", + "_%n invalid email_::_%n invalid emails_" : ["%n e-posta adresi geçersiz","%n e-posta adresi geçersiz"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n e-posta adresi zaten içe aktarılmış ya da çift","%n e-posta adresi zaten içe aktarılmış ya da çift"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n davet gönderilemedi","%n davet gönderilemedi"], + "An error occurred while calling a phone number" : "Bir telefon numarası aranırken bir sorun çıktı", + "Phone number could not be called: {error}" : "Telefon numarası aranamadı: {error}", + "Phone number could not be called" : "Telefon numarası aranamadı", + "Search participants or phone numbers" : "Katılımcı ya da telefon numarası ara", + "Creating the conversation …" : "Görüşme oluşturuluyor…", + "Mark as read" : "Okunmuş olarak işaretle", + "Mark as unread" : "Okunmamış olarak işaretle", + "Remove from favorites" : "Sık kullanılanlardan kaldır", + "Add to favorites" : "Sık kullanılanlara ekle", + "Unarchive conversation" : "Görüşmeyi arşivden çıkar", + "Ignore \"Do not disturb\"" : "\"Rahatsız etmeyin\" yok sayılsın", + "You need to promote a new moderator before you can leave the conversation." : "Görüşmeden ayrılmadan önce başka bir kullanıcıyı sorumluluğa yükseltmelisiniz.", + "Conversation actions" : "Görüşme işlemleri", + "Notify about calls" : "Çağrılar bildirilsin", + "Hide message text" : "İleti yazısı gizlensin", + "Pending invitations" : "Bekleyen davetler", + "Join conversations from other servers" : "Başka sunuculardaki görüşmelere katıl", + "From {user} at {remoteServer}" : "{remoteServer} sunucusundaki {user} kullanıcısından", + "Decline invitation" : "Daveti reddet", + "Accept invitation" : "Daveti kabul et", + "No pending invitations" : "Bekleyen bir davet yok", + "Home" : "Giriş", + "Unread" : "Okunmamış", + "Mentions" : "Anmalar", + "Meetings" : "Toplantılar", + "Alphabetically" : "Alfabetik", + "No followed threads" : "Takip edilen bir yazışma yok", + "No matches found" : "Eşleşen bir sonuç bulunamadı", + "No conversations found" : "Herhangi bir görüşme bulunamadı", + "You have no archived conversations." : "Arşivlenmiş bir görüşmeniz yok.", + "Subscribe to an existing thread or start your own." : "Var olan bir yazışmaya abone olun ya da kendi yazışmanızı başlatın.", + "You have no unread mentions." : "Okunmamış bir anmanız yok.", + "You have no unread messages." : "Okunmamış bir iletiniz yok.", + "An error occurred while performing the search" : "Arama sırasında bir sorun çıktı", + "Conversation list" : "Görüşme listesi", + "Filter conversations by" : "Görüşmeleri şuna göre süz", + "Unread messages" : "Okunmamış iletiler", + "Meeting conversations" : "Toplantı görüşmeleri", + "Clear filters" : "Süzgeçleri temizle", + "New personal note" : "Yeni kişisel not", + "Back to conversations" : "Görüşmelere dön", + "Archived conversations" : "Arşivlenmiş görüşmeler", + "Threads" : "Yazışmalar", + "Clear filter" : "Süzgeci temizle", + "Show more threads" : "Diğer yazışmaları görüntüle", + "App settings" : "Uygulama ayarları", + "Users" : "Kullanıcılar", + "Groups" : "Gruplar", + "Teams" : "Takımlar", + "Federated users" : "Birleşik kullanıcılar", + "New private conversation" : "Yeni özel görüşme", + "Other sources" : "Diğer kaynaklar", + "Open conversations" : "Açık görüşmeler", + "No search results" : "Aramadan bir sonuç alınamadı", + "Users, groups and teams" : "Kullanıcılar, gruplar ve takımlar", + "Users and groups" : "Kullanıcılar ve gruplar", + "Users and teams" : "Kullanıcılar ve takımlar", + "Groups and teams" : "Gruplar ve takımlar", + "New group conversation" : "Yeni grup görüşmesi", + "The meeting will start soon" : "Toplantı yakında başlayacak", + "This meeting is scheduled for {startTime}" : "Bu toplantının başlangıcı {startTime} olarak ayarlanmış", + "You are currently waiting in the lobby" : "Şu anda girişte bekliyorsunuz", + "Enable noise suppression" : "Gürültü engellemeyi aç", + "Reduce background noises for better voice quality" : "Daha iyi ses kalitesi için arka plan gürültüsünü azaltır", + "Enable echo cancellation" : "Yansıma engellemeyi aç", + "Minimize echo effect from own surrounding" : "Çevrenizden kaynaklanan yankı etkisini en aza indirir", + "Enable auto gain control" : "Otomatik güçlendirmeyi aç", + "Dynamically adjust microphone volume for consistent level" : "Tutarlı bir ses düzeyi için mikrofon güçlendirmesini dinamik olarak ayarlar", + "Select microphone" : "Mikrofonu seçin", + "No microphone available" : "Kullanılabilecek bir mikrofon yok", + "Select speaker" : "Konuşmacıyı seçin", + "No speaker available" : "Herhangi bir konuşmacı yok", + "Select camera" : "Kamerayı seçin", + "No camera available" : "Kullanılabilecek bir kamera bulunamadı", + "Select a device" : "Bir aygıt seçin", + "Playing …" : "Çalınıyor…", + "Test speakers" : "Hoparlörleri sına", + "Test" : "Sına", + "Devices" : "Aygıtlar", + "Backgrounds" : "Arka planlar", + "No audio" : "Ses yok", + "No camera" : "Kamera yok", + "Display video as you will see it (mirrored)" : "Görüntü sizin göreceğiniz gibi görüntülensin (ayna yansıması)", + "Display video as others will see it" : "Görüntü diğerlerinin göreceği gibi görüntülensin", + "Calls are not supported in your browser" : "Tarayıcınız çağrıları desteklemiyor", + "Access to microphone is only possible with HTTPS" : "Mikrofona yalnızca HTTPS üzerinden erişilebilir", + "Access to microphone was denied" : "Mikrofona erişim reddedildi", + "Error while accessing microphone" : "Mikrofon erişilirken sorun çıktı", + "Access to camera is only possible with HTTPS" : "Kameraya yalnızca HTTPS üzerinden erişilebilir", + "The call is being recorded." : "Çağrı kaydediliyor.", + "The call might be recorded." : "Çağrının kaydı alınabilir.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Kayıtta sesiniz, kamera görüntünüz ve ekran paylaşımlarınız bulunabilir. Çağrıya katılmadan önce kayıt alma rızası vermeniz gerekir.", + "Give consent to the recording of this call" : "Bu çağrı için kayıt alma rızası verin", + "Show more info" : "Diğer bilgileri görüntüle", + "Audio is not available" : "Ses kullanılamıyor", + "Video is not available" : "Görüntü kullanılamıyor", + "Start recording immediately with the call" : "Kayıt çağrı başlangıcında başlatılsın", + "Notify all participants about this call" : "Bu çağrı tüm katılımcılara bildirilsin", + "Apply settings" : "Ayarları uygula", + "Select virtual office background" : "Sanal ofis arka planını seçin", + "Select virtual home background" : "Sanal ev arka planını seçin", + "Select virtual abstract background" : "Sanal soyut arka planını seçin", + "Select virtual beach background" : "Sanal kumsal arka planını seçin", + "Select virtual park background" : "Sanal park arka planını seçin", + "Select virtual theater background" : "Sanal sahne arka planını seçin", + "Select virtual library background" : "Sanal kütüphane arka planını seçin", + "Select virtual space station background" : "Sanal uzay istasyonu arka planını seçin", + "Error while uploading the file" : "Dosya yüklenirken sorun çıktı", + "Select a file" : "Bir dosya seçin", + "Invalid path selected" : "Seçilen yol geçersiz", + "Select virtual background from file {fileName}" : "{fileName} sanal arka planını seçin", + "Blur" : "Bulanıklaştır", + "Upload" : "Yükle", + "Files" : "Dosyalar", + "(editing)" : "(düzenleniyor)", + "(edited)" : "(düzenlendi)", + "The message has expired or has been deleted" : "İletinin süresi geçmiş ya da silinmiş.", + "Cancel quote" : "Alıntıyı iptal et", + "24 hours" : "24 saat", + "7 days" : "7 gün", + "30 days" : "30 gün", + "Until unpin" : "Sabitleme kaldırılana kadar", + "Clear reminder – {timeLocale}" : "Anımsatıcıyı temizle – {timeLocale}", + "Edited by {actor}" : "{actor} tarafından düzenlendi", + "Pinned by you" : "Sabitledikleriniz", + "Pinned by {actor}" : "{actor} tarafından sabitlenmişler", + "Until {absoluteDate}" : "{absoluteDate} tarihine kadar", + "Message text copied to clipboard" : "İleti yazısı panoya kopyalandı", + "Message text could not be copied" : "İleti yazısı kopyalanamadı", + "Message forwarded to \"Note to self\"" : "İleti \"Kendime not\" olarak iletildi", + "Error while forwarding message to \"Note to self\"" : "İleti \"Kendime not\" olarak iletilirken sorun çıktı", + "A reminder was successfully removed" : "Bir anımsatıcı silindi", + "Error occurred when removing a reminder" : "Bir anımsatıcı silinirken sorun çıktı", + "A reminder was successfully set at {datetime}" : "{datetime} için bir anımsatıcı ayarlandı", + "Error occurred when creating a reminder" : "Anımsatıcı oluşturulurken sorun çıktı", + "Add a reaction to this message" : "Bu iletiye bir tepki ekle", + "Reply" : "Yanıtla", + "More actions" : "Diğer işlemler", + "Set reminder" : "Anımsatıcı ayarla", + "Pin message" : "İletiyi sabitle", + "Unpin message" : "İletinin sabitlemesini kaldır", + "Reply privately" : "Kişisel yanıt gönder", + "Edit message" : "İletiyi düzenle", + "Copy message" : "İletiyi kopyala", + "Copy message link" : "İleti bağlantısını kopyala", + "Go to file" : "Dosyaya git", + "Download file" : "Dosyayı indir", + "Go to thread" : "Yazışmaya git", + "Edit thread details" : "Yazışma ayrıntılarını düzenle", + "Forward message" : "İletiyi ilet", + "Translate" : "Çevir", + "Set custom reminder" : "Özel anımsatıcı ayarla", + "Keep pinned for" : "Şu kadar sabitlensin", + "Set custom period" : "Özel aralık ayarla", + "Close reactions menu" : "Tepkiler menüsünü kapat", + "React with {emoji}" : "{emoji} ile tepki ver", + "React with another emoji" : "Başka bir emoji ile tepki ver", + "Choose a conversation to forward the selected message." : "Seçilmiş iletinin iletileceği bir görüşme seçin.", + "Error while forwarding message" : "İleti iletilirken bir sorun çıktı", + "The message has been forwarded to {selectedConversationName}" : "İleti {selectedConversationName} üzerine iletildi", + "Dismiss" : "Yok say", + "Go to conversation" : "Görüşmeye git", + "Detect language" : "Dili algıla", + "The message could not be translated" : "İleti çevrilemedi", + "Translation copied to clipboard" : "Çeviri panoya kopyalandı", + "Translation could not be copied" : "Çeviri kopyalanamadı", + "Translate message" : "İletiyi çevir", + "Source language to translate from" : "Çevirinin yapılacağı kaynak dil", + "Translate from" : "Kaynak dil", + "Target language to translate into" : "Çevirinin yapılacağı hedef dil", + "Translate to" : "Hedef dil", + "Translating" : "Çevriliyor", + "Copy translated text" : "Çevrilmiş yazıyı kopyala", + "Error when scheduling the message" : "İleti zamanlanırken sorun çıktı", + "Reschedule" : "Yeniden zamanla", + "Send now" : "Şimdi gönder", + "Choose a time" : "Bir zaman seçin", + "Send at custom time" : "Özel bir zamanda gönderilsin", + "Will be sent without notification" : "Bildirim olmadan gönderilecek", + "Message read by everyone who shares their reading status" : "İleti okundu durumunu paylaşan herkes tarafından okundu", + "Message sent" : "İleti gönderildi", + "Sent without notification" : "Bildirim olmadan gönderildi", + "Deleting message" : "İleti siliniyor", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "İleti silindi ancak bir bot ya da Matterbridge yapılandırılmış ve ileti başka hizmetlere aktarılmış olabilir", + "Message deleted successfully" : "İleti silindi", + "Message could not be deleted because it is too old" : "İleti çok eski olduğundan silinemedi", + "Only normal chat messages can be deleted" : "Yalnızca normal sohbet iletileri silinebilir", + "An error occurred while deleting the message" : "İleti silinirken bir sorun çıktı", + "Pinned" : "Sabitlenmiş", + "Your browser does not support playing audio files" : "Tarayıcınız ses dosyalarının oynatılmasını desteklemiyor", + "Contact" : "Kişi", + "{stack} in {board}" : "{stack} {board} panosunda", + "Deck Card" : "Tahta kartı", + "Remove {fileName}" : "{fileName} dosyasını sil", + "Open this location in OpenStreetMap" : "Bu konumu OpenStreetMap üzerinde aç", + "_%n reply_::_%n replies_" : ["%n yanıt","%n yanıt"], + "Sending message" : "İleti gönderiliyor", + "Failed to send the message. Click to try again" : "İleti gönderilemedi. Yeniden denemek için tıklayın", + "Not enough free space to upload file" : "Dosyayı yüklemek için yeterli boş alan yok", + "You cannot send messages to this conversation at the moment" : "Şu anda bu görüşmeye ileti gönderemezsiniz", + "Could not update the message" : "İleti güncellenemedi", + "Reply to thread \"{threadTitle}\"" : "\"{threadTitle}\" konusunu yanıtla", + "_You voted • %n vote_::_You voted • %n votes_" : ["Oy verdiniz • %n oy","Oy verdiniz • %n oy"], + "You voted" : "Oy verdiniz", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["Oy vermek için tıklayın • %n oy","Oy vermek için tıklayın • %n oy"], + "Click to vote" : "Oy vermek için tıklayın", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Anket taslağı • %n seçenek","Anket taslağı • %n seçenek"], + "_%n vote_::_%n votes_" : ["%n oy","%n oy"], + "Edit poll draft" : "Anket taslağını düzenle", + "Delete poll draft" : "Anket taslağını sil", + "Open poll" : "Açık anket", + "Closed poll" : "Bitirilmiş anket", + "See results" : "Sonuçları görüntüle", + "Reactions" : "Tepkiler", + "No permission to post reactions in this conversation" : "Bu görüşmeye tepki gönderme izniniz yok", + "and {participant}" : "ve {participant}", + "_and %n other participant_::_and %n other participants_" : ["ve %n diğer katılımcı","ve %n diğer katılımcı"], + "Show all reactions" : "Tüm tepkileri görüntüle", + "Add more reactions" : "Başka tepkiler ekle", + "Show or collapse system messages" : "Sistem iletilerini görüntüle ya da gizle", + "No messages" : "Herhangi bir ileti yok", + "All messages have expired or have been deleted." : "Tüm iletilerin süresi geçmiş ya da silinmiş.", + "Generate summary with AI" : "Yapay zeka ile özet oluştur", + "{author} (pinned by you)" : "{author} (siz sabitlemişsiniz)", + "{author} (pinned by {actor})" : "{author} ({actor} sabitlemiş)", + "Unpin" : "Sabitlemeyi kaldır", + "Cancel search" : "Aramayı iptal et", + "Add a phone number" : "Telefon numarası ekle", + "Error: A password is required to create the conversation." : "Hata: Görüşmeyi oluşturmak için bir parola gereklidir.", + "All set, the conversation \"{conversationName}\" was created." : "Her şey tamam \"{conversationName}\" görüşmesi oluşturuldu.", + "Create a new group conversation" : "Yeni bir grup görüşmesi oluştur", + "Add participants" : "Katılımcı ekle", + "Maximum length exceeded ({maxlength} characters)" : "Olabilecek en fazla uzunluk aşıldı ({maxlength} karakter)", + "Conversation visibility" : "Görüşme görünürlüğü", + "Allow guests to join via link" : "Konuklar bağlantı ile katılabilsin", + "Enter password" : "Parolayı yazın", + "This conversation has been locked" : "Bu görüşme kilitlenmiş", + "No permission to post messages in this conversation" : "Bu görüşmeye ileti gönderme izniniz yok", + "Joining conversation …" : "Görüşmeye giriliyor…", + "Write a message without notification" : "Bildirim olmadan bir ileti yazın", + "Create a thread silently" : "Sessizce bir yazışma oluştur", + "Create a thread" : "Bir yazışma oluştur", + "Send message silently" : "Sessizce ileti gönder", + "Send message" : "İleti gönder", + "Send without notification" : "Bildirim olmadan gönder", + "The participant will not be notified about new messages" : "Yeni iletler katılımcıya bildirilmeyecek", + "Participants will not be notified about new messages" : "Yeni iletler katılımcılara bildirilmeyecek", + "Message will be sent {datetimeString}" : "İleti {datetimeString} zamanında gönderilecek", + "Thread title is required" : "Yazışma başlığı yazılmalıdır", + "Message text is required" : "İleti içeriği yazılmalıdır", + "The message could not be edited" : "İleti düzenlenemedi", + "File to share" : "Paylaşılacak dosya", + "File upload is not available in this conversation" : "Bu görüşmeye dosya yüklenemez", + "Message was successfully scheduled" : "İleti zamanlandı", + "Add emoji" : "Emoji ekle", + "Adding a mention will only notify users who did not read the message." : "Anma eklendiğinde yalnızca iletiyi henüz okumamış olan kullanıcılar bilgilendirilir", + "Thread title" : "Yazışma başlığı", + "Send later" : "Daha sonra gönder", + "Show scheduled messages" : "Zamanlanmış iletileri görüntüle", + "Cancel editing" : "Düzenlemeyi iptal et", + "Schedule message" : "İletiyi zamanla", + "{user} is out of office and might not respond." : "{user} iş yeri dışında ve yanıt veremeyebilir.", + "Absence period: {startDate} - {endDate}" : "Bulunmama aralığı: {startDate} - {endDate}", + "Replacement:" : "Yedek:", + "Share from {nextcloud}" : "{nextcloud} üzerinden paylaş", + "Share from Files" : "Dosyalar uygulamasından paylaş", + "Share files to the conversation" : "Görüşmede dosya paylaş", + "Upload from device" : "Aygıttan yükle", + "Create new poll" : "Anket ekle", + "Smart picker" : "Akıllı seçici", + "Record voice message" : "Ses iletisi kaydet", + "End recording and send" : "Kaydı bitirip gönder", + "Dismiss recording" : "Kaydı sil", + "Access to the microphone was denied" : "Mikrofona erişim reddedildi", + "Microphone either not available or disabled in settings" : "Mikrofon kullanılamıyor ya da ayarlardan kapatılmış", + "Error while recording audio" : "Ses kaydedilirken sorun çıktı", + "Voice message {time} ({conversation})" : "Sesli ileti {time} ({conversation})", + "Generating summary of unread messages …" : "Okunmamış iletilerin özeti oluşturuluyor…", + "Summary is AI generated and might contain mistakes" : "Özet yapay zeka ile oluşturulmuştur ve hatalar olabilir", + "Error occurred during a summary generation" : "Özet oluşturulurken bir sorun çıktı", + "New file" : "Yeni dosya", + "Blank" : "Boş", + "Error while creating file" : "Dosya oluşturulurken sorun çıktı", + "Create and share a new file" : "Yeni bir dosya oluşturup paylaş", + "Name of the new file" : "Yeni dosyanın adı", + "Create file" : "Dosya oluştur", + "Someone is typing …" : "Biri yazıyor…", + "{user1} is typing …" : "{user1} yazıyor…", + "{user1} and {user2} are typing …" : "{user1} ve {user2} yazıyor…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ve {user3} yazıyor…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} ve %n diğer kişi yazıyor…","{user1}, {user2}, {user3} ve %n diğer kişi yazıyor…"], + "Add more files" : "Başka dosya ekle", + "Send" : "Gönder", + "In this conversation {user} can:" : "Bu görüşmede {user} şunları yapabilir:", + "Edit default permissions for participants in {conversationName}" : "{conversationName} içindeki katılımcıların varsayılan izinlerini düzenle", + "Start a call" : "Bir çağrı başlat", + "Skip the lobby" : "Girişi atla", + "Can post messages" : "İleti gönderebilir", + "Can post messages and reactions" : "İleti ve tepki gönderebilir", + "Can add reactions" : "Tepki verebilir", + "Enable the microphone" : "Mikrofonu aç", + "Enable the camera" : "Kamerayı aç", + "Share the screen" : "Ekranı paylaş", + "Update permissions" : "İzinleri güncelle", + "Updating permissions" : "İzinler güncelleniyor", + "No poll drafts" : "Herhangi bir anket taslağı yok", + "There is no poll drafts yet saved for this conversation" : "Bu görüşmede kaydedilmiş bir anket taslağı yok", + "Create poll in {name}" : "{name} içinde anket oluştur", + "Create poll" : "Anket ekle", + "Error while importing poll" : "Anket içe aktarılırken sorun çıktı", + "Question" : "Soru", + "Ask a question" : "Bir soru sorun", + "Import draft from file" : "Taslağı dosyadan içe aktar", + "Answers" : "Yanıtlar", + "Answer {option}" : "{option} yanıtı", + "Delete poll option" : "Anket seçeneğini sil", + "Add answer" : "Yanıt ekle", + "Settings" : "Ayarlar", + "Anonymous poll" : "Anonim anket", + "Multiple answers" : "Birden çok yanıt", + "Save as draft" : "Taslak olarak kaydet", + "Export draft to file" : "Taslağı dosyaya dışa aktar", + "_Final results • %n vote_::_Final results • %n votes_" : ["Sonuçlar • %n oy","Sonuçlar • %n oy"], + "Your vote is anonymous" : "Oyunuz anonim", + "You voted for this option" : "Bu seçenek için oy verdiniz", + "End poll" : "Anketi sonlandır", + "Change your vote" : "Oyunuzu değiştirin", + "Withdraw vote" : "Oyu geri çek", + "Results" : "Sonuçlar", + "Voted participants" : "Oy veren katılımcılar", + "Send a message to \"{roomName}\"" : "\"{roomName}\" odasına bir ileti gönder", + "Hide list of participants" : "Katılımcı listesini gizle", + "Show list of participants" : "Katılımcı listesini görüntüle", + "Assistance requested in {roomName}" : "{roomName} odasından yardım istendi", + "The message was sent to \"{roomName}\"" : "İleti tüm \"{roomName}\" odasına gönderildi", + "Dismiss request for assistance" : "Yardım isteğini yok say", + "Send message to room" : "Odaya ileti gönder", + "Back to main room" : "Ana odaya dön", + "Back to your room" : "Odanıza dönün", + "Message all rooms" : "Tüm odalara ileti gönder", + "Start session" : "Oturumu başlat", + "Start a call before you start a breakout room session" : "Bir çalışma odası oturumunu başlatmadan önce bir çağrı başlat", + "Stop session" : "Oturumu bitir", + "The message was sent to all breakout rooms" : "İleti tüm çalışma odalarına gönderildi", + "Send a message to all breakout rooms" : "Tüm çalışma odalarına ileti gönder", + "Breakout rooms are not started" : "Çalışma odaları açılmamış", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Yüksek başarımlı arka yüz olmadan yapılan aramalar bağlantı sorunlarına ve aygıtlarda yüksek yük oluşmasına neden olabilir. {linkstart}Ayrıntılı bilgi alın{linkend}", + "Talk setup incomplete" : "Konuş kurulumu tamamlanmamış", + "Disable lobby" : "Giriş kullanılmasın", + "Settings for participant \"{user}\"" : "\"{user}\" kullanıcısının ayarları", + "Participant \"{user}\"" : "\"{user}\" katılımcısı", + "moderator" : "sorumlu", + "bot" : "bot", + "guest" : "konuk", + "Ringing …" : "Çalıyor…", + "Call rejected" : "Çağrı reddedildi", + "{time} talking …" : "{time} konuşuyor…", + "{time} talking time" : "{time} konuşma süresi", + "Raised their hand" : "Ellerini kaldırdılar", + "Joined with video" : "Görüntü ile katıldı", + "Joined via phone" : "Telefon ile katıldı", + "Joined with audio" : "Ses ile katıldı", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Yazı {maxLength} ya da daha az karakter uzunluğunda olmalıdır. Şu andaki yazı uzunluğu {charactersCount} karakter.", + "Remove group and members" : "Grubu ve üyeleri sil", + "Remove team and members" : "Takımı ve üyelerini kaldır", + "Remove participant" : "Katılımcıyı çıkar", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "\"{displayName}\" grubunu ve üyelerini bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "\"{displayName}\" takımını ve üyelerini bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Do you really want to remove {displayName} from this conversation?" : "{displayName} katılımcısını bu görüşmeden çıkarmak istediğinize emin misiniz?", + "Notification was sent to {displayName}" : "Bildirim {displayName} alıcısına gönderildi", + "Could not send notification to {displayName}" : "Bildirim {displayName} alıcısına gönderilemedi ", + "Permissions granted to {displayName}" : "{displayName} için verilmiş izinler", + "Could not modify permissions for {displayName}" : "{displayName} için izinler değiştirilemedi", + "Permissions removed for {displayName}" : "{displayName} için izinler kaldırıldı", + "Permissions set to default for {displayName}" : "{displayName} için izinler varsayılanlara sıfırlandı", + "Phone number could not be hung up" : "Telefon numarası kapatılamadı", + "Phone number could not be put on hold" : "Telefon numarası beklemeye alınamadı", + "Phone number could not be muted" : "Telefon numarasının sesi kısılamadı", + "Phone number could not be unmuted" : "Telefon numarasının sesi açılamadı", + "DTMF message could not be sent" : "Arama tonu iletisi gönderilemedi", + "Phone number copied to clipboard" : "Telefon numarası panoya kopyalandı", + "Phone number could not be copied" : "Telefon numarası kopyalanamadı", + "in the lobby" : "girişte", + "Dial out phone" : "Telefonu ara", + "Hang up phone" : "Telefonu kapat", + "Move back to lobby" : "Girişe al", + "Move to conversation" : "Görüşmeye al", + "Dial-in PIN" : "Arama PIN kodu", + "Demote from moderator" : "Sorumluluktan çıkar", + "Promote to moderator" : "Sorumluluğa yükselt", + "Resend invitation" : "Daveti yeniden gönder", + "Send call notification" : "Çağrı bildirimi gönder", + "Dial out phone number" : "Telefon numarasını ara", + "Resume call for phone number" : "Telefon numarası çağrısına geri dön", + "Put phone number on hold" : "Telefon numarası çağrısını beklemeye al", + "Unmute phone number" : "Telefon numarasının sesini aç", + "Mute phone number" : "Telefon numarasının sesini kapat", + "Copy phone number" : "Telefon numarasını kopyala", + "Reset custom permissions" : "Özel izinleri sıfırla", + "Grant all permissions" : "Tüm izinleri ver", + "Remove all permissions" : "Tüm izinleri kaldır", + "Also ban from this conversation" : "Bu görüşmede de yasaklansın", + "Internal note (reason to ban)" : "İç not (yasaklama nedeni)", + "Remove" : "Kaldır", + "Permissions modified for {displayName}" : "{displayName} için izinler değiştirildi", + "Add users, groups or teams" : "Kullanıcı, grup ya da takım ekle", + "Add users or groups" : "Kullanıcı ya da grup ekle", + "Add users or teams" : "Kullanıcı ya da takım ekle", + "Add users" : "Kullanıcı ekle", + "Add groups or teams" : "Grup ya da takım ekle", + "Add groups" : "Grup ekle", + "Add teams" : "Takım ekle", + "Add other sources" : "Başka kaynaklar ekle", + "Add emails" : "E-posta adreslerini ekle", + "Integrations" : "Bütünleştirmeler", + "Add federated users" : "Birleştirilmiş kullanıcılar ekle", + "Searching …" : "Aranıyor …", + "Search for more users" : "Diğer kullanıcıları ara", + "You can search or add participants via name, email, or Federated Cloud ID" : "Katılımcıları, ad, e-posta adresi ya da birleşik bulut kodu ile arayabilirsiniz", + "Search or add participants" : "Katılımcı arayın ya da ekleyin", + "Invitation was sent to {actorId}" : "{actorId} için davet gönderildi", + "An error occurred while adding the participants" : "Katılımcılar eklenirken bir sorun çıktı", + "A new group conversation with selected participant will be created" : "Seçilmiş katılımcıyla yeni bir grup görüşmesi oluşturulacak", + "Participants" : "Katılımcılar", + "Pinned by a deleted user" : "Silinmiş bir kullanıcı sabitlemiş", + "Participants ({count})" : "Katılımcılar ({count})", + "Open chat" : "Sohbeti aç", + "You have new unread messages in the chat." : "Sohbette okumadığınız yeni iletiler var.", + "You have been mentioned in the chat." : "Sohbette anıldınız.", + "Search messages" : "İleti arama", + "Chat" : "Sohbet", + "Details" : "Ayrıntılar", + "Shared items" : "Paylaşılmış ögeler", + "Search in {name}" : "{name} içinde ara", + "Threads in {name}" : "{name} içindeki yazışmalar", + "{actor} in {conversation}" : "{actor}, {conversation} içinde", + "Search messages …" : "İleti ara…", + "Search options" : "Arama seçenekleri", + "From User" : "Şu kullanıcıdan", + "Since" : "Şu zamandan başlayarak", + "Until" : "Bitiş", + "No results found" : "Herhangi bir sonuç bulunamadı", + "Load more results" : "Diğer sonuçları yükle", + "Recent threads" : "Son yazışmalar", + "Projects" : "Projeler", + "No shared items" : "Paylaşılmış bir öge yok", + "Thread notifications" : "Yazışma bildirimleri", + "Thread actions" : "Yazışma işlemleri", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Bir görüşme bağlantısı", + "No open conversations found" : "Açık herhangi bir görüşme yok", + "Either there are no open conversations or you joined all of them." : "Açık bir görüşme yok ya da tümüne katılmışsınız.", + "Check spelling or use complete words." : "Yazım denetlensin ya da tam sözcükler kullanılsın.", + "Search conversations or users" : "Görüşme ya da kullanıcı arama", + "Select conversation" : "Görüşme seçin", + "Number length is not valid" : "Numara uzunluğu geçersiz", + "Region code is not valid" : "Bölge kodu geçersiz", + "Number length is too short" : "Numara çok kısa", + "Number length is too long" : "Numara çok uzun", + "Number is not valid" : "Numara geçersiz", + "Phone numbers" : "Telefon numaraları", + "Display name: {name}" : "Görüntülenecek ad: {name}", + "Edit display name" : "Görüntülenecek adı düzenle", + "Display name (required)" : "Görüntülenecek ad (zorunlu)", + "Save name" : "Adı kaydet", + "I picked message bubbles" : "İleti balonlarını seçtim", + "I picked the list style" : "Liste biçemini seçtim", + "Error while setting personal setting" : "Kişisel ayarlarınız kaydedilirken sorun çıktı", + "Error while saving sounds setting" : "Ses ayarları kaydedilirken sorun çıktı", + "Compact conversations list" : "Küçük görüşmeler listesi", + "Chat appearance" : "Sohbet görünümü", + "Messages list" : "İleti listesi", + "Message bubbles" : "İleti balonları", + "Play sounds when participants join or leave a call" : "Katılımcılar çağrıya katıldığında ya da ayrıldığında ses çalınsın", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "Üreticinin teknik sınırlamaları nedeniyle şu anda iPad ve iPhone aygıtlarında kullanılamıyor.", + "Notification settings" : "Bildirim ayarları", + "Sounds for chat and call notifications" : "Sohbet ve çağrı bildirimlerinin sesleri", + "Invalid language ({languageId})" : "Dil geçersiz ({languageId})", + "Default language" : "Varsayılan dil", + "Default language ({languageName})" : "Varsayılan dil ({languageName})", + "Error when trying to load the available live translation languages" : "Canlı çeviri için kullanılabilecek diller yüklenirken sorun çıktı", + "Error when trying to set live translation language" : "Canlı çeviri dili ayarlanırken sorun çıktı", + "Set language used to show the transcriptions" : "Çevirilerin görüntüleneceği dili seçin", + "Select location for attachments" : "Ek dosyaların konumunu seçin", + "Error while setting attachment folder" : "Ek dosyalar klasörü ayarlanırken sorun çıktı", + "Error while setting read status privacy" : "Okundu durumu gizliliği ayarı kaydedilemedi", + "Error while setting typing status privacy" : "Yazıyor durumu gizliliği ayarı kaydedilemedi", + "Error while setting default media state" : "Varsayılan ortam durumu ayarlanırken sorun çıktı", + "Turn camera and microphone off by default" : "Varsayılan olarak kamera ve mikrofon kapatılsın", + "Blur camera background by default" : "Varsayılan olarak arka plan bulanıklaştırılsın", + "Skip device preview before joining a call" : "Bir çağrıya katılmadan önce aygıt ön izleme ekranı görüntülenmesin", + "Appearance & Sounds" : "Görünüm ve sesler", + "Privacy" : "Gizlilik", + "Send read receipts" : "Okundu bilgisi gönderilsin", + "When off, all read statuses will be hidden" : "Kapatıldığında, tüm okunma durumları gizlenir", + "Share typing status" : "Yazma durumu paylaşılsın", + "When off, all typing indicators will be hidden" : "Kapatıldığında, tüm yazma göstergeleri gizlenir", + "Attachments folder" : "Ek dosya klasörü", + "Toggle full screen" : "Tam ekrana geç", + "Return to Home screen" : "Girişe dön", + "Search" : "Arama", + "Shortcuts while in a chat" : "Sohbet sırasında kullanılabilecek kısayol tuşları", + "Focus the chat input" : "Sohbet girişine odaklan", + "Unfocus the chat input to use shortcuts" : "Kısayol tuşlarını kullanmak için odağı sohbet girişinden al", + "Edit your last message" : "Son iletinizi düzenleyin", + "Shortcuts while in a call" : "Çağrı sırasında kullanılabilecek kısayol tuşları", + "Camera on and off" : "Kamerayı açma ve kapatma", + "Microphone on and off" : "Mikrofonu açma ve kapatma", + "Raise or lower hand" : "El kadır ya da indir", + "Push to talk or push to mute" : "Bas konuş ya da bas kıs", + "Zoom-in / zoom-out a screen share" : "Bir ekran paylaşımında yakınlaştırma / uzaklaştırma", + "Mouse wheel" : "Fare tekerleği", + "Start call silently" : "Çağrıyı sessizce başlat", + "Start call" : "Çağrıyı başlat", + "End call" : "Çağrıyı sonlandır", + "The server was updated, you cannot start or join a call." : "Sunucu güncellenmiş. Bir çağrı başlatamaz ya da katılamazsınız.", + "This call has just ended" : "Bu çağrı sona erdi", + "You will be able to join the call only after a moderator starts it." : "Çağrıya ancak bir sorumlu çağrıyı başlattıktan sonra katılabilirsiniz.", + "End call for everyone" : "Çağrıyı herkes için sonlandır", + "Starting the recording" : "Kayıt başlatılıyor", + "Recording" : "Kaydediliyor", + "The call has been running for one hour." : "Çağrı bir saattir sürüyor.", + "Cancel recording start" : "Kaydı başlatmaktan vazgeç", + "Stop recording" : "Kaydı durdur", + "Send a reaction" : "Tepki ver", + "React with {reaction}" : "{reaction} ile tepki ver", + "All tasks done!" : "Tüm görevler tamamlandı!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n görev","{done} / %n görev"], + "Add participants to this call" : "Bu çağrıya katılımcılar ekle", + "_%n participant in call_::_%n participants in call_" : ["Çağrıda %n katılımcı var","Çağrıda %n katılımcı var"], + "Scheduled messages" : "Zamanlanmış iletiler", + "You are not allowed to enable screensharing" : "Ekranı paylaşma izniniz yok", + "No screensharing" : "Ekran paylaşımı yok", + "Screensharing options" : "Ekran paylaşımı ayarları", + "Enable screensharing" : "Ekranı paylaş", + "Bad sent video and screen quality." : "Gönderilen görüntü ve ekran kalitesi kötü.", + "Bad sent screen quality." : "Gönderilen ekran kalitesi kötü.", + "Bad sent video quality." : "Gönderilen görüntü kalitesi kötü.", + "Bad sent audio, video and screen quality." : "Gönderilen ses, görüntü ve ekran kalitesi kötü.", + "Bad sent audio and screen quality." : "Gönderilen ses ve ekran kalitesi kötü.", + "Bad sent audio and video quality." : "Gönderilen ses ve görüntü kalitesi kötü.", + "Bad sent audio quality." : "Gönderilen ses kalitesi kötü.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşırken arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Disable background blur" : "Arka plan bulanıklaştırmayı kapat", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşırken kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar ekran paylaşımınızı göremeyebilir.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi göremeyebilir.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlayamayabilir ve sizi göremeyebilir. Durumu iyileştirmek için ekran paylaşırken arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve göremeyebilir. Durumu iyileştirmek için ekran paylaşırken kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve ekranınızı göremeyebilir. Durumu iyileştirmek için ekran paylaşımınızı kapatmayı deneyin.", + "Disable screenshare" : "Ekran paylaşımını kapat", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlayamayabilir ve sizi göremeyebilir. Durumu iyileştirmek için arka plan bulanıklaştırmanızı kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir ve göremeyebilir. Durumu iyileştirmek için kendi görüntünüzü kapatmayı deneyin.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "İnternet bağlantınız ya da bilgisayarınız yoğun kullanıldığından diğer katılımcılar sizi anlamayabilir.", + "Screen sharing is not supported by your browser." : "Tarayıcınız ekran paylaşımını desteklemiyor.", + "Screen sharing requires the page to be loaded through HTTPS." : "Ekran paylaşımı yapabilmek için sayfa HTTPS kullanılarak yüklenmelidir.", + "Screensharing requires the page to be loaded through HTTPS." : "Ekran paylaşımı için sayfa HTTPS kullanılarak yüklenmiş olmalıdır.", + "An error occurred while starting screensharing." : "Ekran paylaşımı başlatılırken bir sorun çıktı.", + "Select virtual background" : "Sanal arka planı seçin", + "Show your screen" : "Ekranımı görüntüle", + "Stop screensharing" : "Ekran paylaşımını durdur", + "Mute others" : "Diğerlerinin sesini kıs", + "Start recording" : "Kaydı başlat", + "Set up breakout rooms" : "Çalışma odalarını hazırla", + "Download attendance list" : "Katılımcı listesini indir", + "Open Calendar" : "Takvimi aç", + "Remove participant {name}" : "{name} katılımcısını çıkar", + "Would you like to delete this conversation?" : "Bu görüşmeyi silmek ister misiniz?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["Bu görüşme, %n gün boyunca etkileşim olmazsa herkesten otomatik olarak silinecek.","Bu görüşme, %n gün boyunca etkileşim olmazsa herkesten otomatik olarak silinecek."], + "Are you sure you want to delete this conversation?" : "Bu görüşmeyi silmek istediğinize emin misiniz?", + "Delete now" : "Şimdi sil", + "Keep" : "Tut", + "Open dialpad" : "Numara klavyesini aç", + "Select a region" : "Bir bölge seçin", + "Local time: {time}" : "Yerel zaman: {time}", + "Scheduled {datetime}" : "{datetime} zamanına ayarlanmış", + "Scheduled for {datetime}" : "{datetime} için zamanlanmış", + "Search …" : "Arama…", + "Message without mention" : "Anma olmadan ileti", + "Mention myself" : "Beni an", + "Mention everyone" : "Herkesi an", + "Select a conversation" : "Bir görüşme seçin", + "Select a mode" : "Bir kip seçin", + "You do not have permissions to access this conversation." : "Bu görüşmeye erişme izniniz yok.", + "Join a different conversation or start a new one." : "Başka bir görüşmeye katılın ya da yeni bir görüşme başlatın.", + "The conversation does not exist" : "Görüşme bulunamadı", + "Join a conversation or start a new one!" : "Var olan bir görüşmeye katılın ya da yeni bir görüşme başlatın!", + "Duplicate session" : "Çift oturum", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "Bu görüşme başka bir sekmede de açılmış. Geçerli sunucu sürümü, bir konuşmanın birden fazla sekmede açılmasını desteklemiyor.", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\" ile görüşme başlatılıyor", + "Join a conversation or start a new one" : "Bir görüşmeye katılın ya da yeni bir görüşme başlatın", + "Error while joining the conversation" : "Görüşmeye katılırken sorun çıktı", + "Another user" : "Başka bir kullanıcı", + "Hey! Are you using the list style or message bubbles?" : "Liste biçimini mi ileti balonları biçemini mi kullanıyorsunuz?", + "Nextcloud URL" : "Nextcloud adresi", + "Nextcloud user" : "Nextcloud kullanıcısı", + "User password" : "Kullanıcı parolası", + "Talk conversation" : "Konuş görüşmesi", + "Skip TLS verification" : "TLS doğrulaması atlansın", + "Matrix server URL" : "Matrix sunucusu adresi", + "User" : "Kullanıcı", + "Matrix channel" : "Matrix kanalı", + "Mattermost server URL" : "Mattermost sunucu adresi", + "Mattermost user" : "Mattermost kullanıcısı", + "Team name" : "Takım adı", + "Channel name" : "Kanal adı", + "Rocket.Chat server URL" : "Rocket.Chat sunucusunun adresi", + "User name or email address" : "Kullanıcı adı ya da e-posta adresi", + "Rocket.Chat channel" : "Rocket.Chat kanalı", + "Zulip server URL" : "Zulip sunucusunun adresi", + "Bot user name" : "Bot kullanıcı adı", + "Bot API key" : "Bot API anahtarı", + "Zulip channel" : "Zulip kanalı", + "API token" : "API kodu", + "Slack channel" : "Slack kanalı", + "Server ID or name" : "Sunucu kimliği ya da adı", + "Channel ID (prefixed with \"ID:\") or name" : "Kanal kimliği (\"ID:\" ön ekiyle) ya da ad", + "Channel" : "Kanal", + "Login" : "Oturum aç", + "Chat ID" : "Sohbet kimliği", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC sunucusunun adresi (örnek: chat.freenode.net:6667)", + "Nickname" : "Takma ad", + "Connection password" : "Bağlantı parolası", + "IRC channel" : "IRC kanalı", + "Channel password" : "Kanal parolası", + "NickServ nickname" : "NickServ takma adı", + "NickServ password" : "NickServ parolası", + "Use TLS" : "TLS kullanılsın", + "Use SASL" : "SASL kullanılsın", + "Tenant ID" : "Kiracı kimliği", + "Client ID" : "İstemci kimliği", + "Team ID" : "Takım kimliği", + "Thread ID" : "Konu kimliği", + "XMPP/Jabber server URL" : "XMPP/Jabber sunucusunun adresi", + "MUC server URL" : "MUC sunucusunun adresi", + "Jabber ID" : "Jabber kimliği", + "Pinned messages" : "Sabitlenmiş iletiler", + "Media" : "Ortam", + "Polls" : "Anketler", + "Deck cards" : "Tahta kartları", + "Voice messages" : "Sesli iletiler", + "Locations" : "Konumlar", + "Call recordings" : "Çağrı kayıtları", + "Audio" : "Ses", + "Show all pinned messages" : "Tüm sabitlenmiş iletileri görüntüle", + "Show all media" : "Tüm ortamları görüntüle", + "Show all files" : "Tüm dosyaları görüntüle", + "Show all polls" : "Tüm anketleri görüntüle", + "Show all deck cards" : "Tüm tahta kartlarını görüntüle", + "Show all voice messages" : "Tüm sesli iletileri görüntüle", + "Show all locations" : "Tüm konumları görüntüle", + "Show all call recordings" : "Tüm çağrı kayıtlarını görüntüle", + "Show all audio" : "Tüm sesleri görüntüle", + "Show all other" : "Tüm diğerlerini görüntüle", + "Follow conversation settings" : "Görüşme ayarları kullanılsın", + "Group" : "Grup", + "Team" : "Takım", + "You reconnected to the call" : "Çağrı ile yeniden bağlantı kurdunuz", + "{actor} reconnected to the call" : "{actor} çağrı ile yeniden bağlantı kurdu", + "You added {user0} and {user1}" : "{user0} ve {user1} kullanıcılarını eklediniz", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["{user0}, {user1} ve %n diğer katılımcıyı eklediniz","{user0}, {user1} ve %n diğer katılımcıyı eklediniz"], + "An administrator added you and {user0}" : "Bir yönetici sizi ve {user0} kullanıcısını ekledi", + "{actor} added you and {user0}" : "{actor} sizi ve {user0} kullanıcısını ekledi", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı ekledi"], + "An administrator added {user0} and {user1}" : "Bir yönetici {user0} ve {user1} kullanıcısını ekledi", + "{actor} added {user0} and {user1}" : "{actor}, {user0} ve {user1} kullanıcılarını ekledi", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı ekledi"], + "You removed {user0} and {user1}" : "{user0} ve {user1} kullanıcılarını çıkardınız", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["{user0}, {user1} ve %n diğer katılımcıyı çıkardınız","{user0}, {user1} ve %n diğer katılımcıyı çıkardınız"], + "An administrator removed you and {user0}" : "Bir yönetici sizi ve {user0} kullanıcısını çıkardı", + "{actor} removed you and {user0}" : "{actor} sizi ve {user0} kullanıcısını çıkardı", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı çıkardı"], + "An administrator removed {user0} and {user1}" : "Bir yönetici {user0} ve {user1} kullanıcılarını çıkardı", + "{actor} removed {user0} and {user1}" : "{actor}, {user0} ve {user1} kullanıcılarını çıkardı", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı çıkardı"], + "You and {user0} joined the call" : "Siz ve {user0} kullanıcısı çağrıya katıldı", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Siz, {user0} ve %n diğer katılımcı çağrıya katıldı","Siz, {user0} ve %n diğer katılımcı çağrıya katıldı"], + "{user0} and {user1} joined the call" : "{user0} ve {user1} çağrıya katıldı", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} ve %n diğer katılımcı çağrıya katıldı","{user0}, {user1} ve %n diğer katılımcı çağrıya katıldı"], + "You and {user0} left the call" : "Siz ve {user0} çağrıdan ayrıldınız", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Siz, {user0} ve %n diğer katılımcı çağrıdan ayrıldı","Siz, {user0} ve %n diğer katılımcı çağrıdan ayrıldı"], + "{user0} and {user1} left the call" : "{user0} ve {user1} çağrıdan ayrıldı", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} ve %n diğer katılımcı çağrıdan ayrıldı","{user0}, {user1} ve %n diğer katılımcı çağrıdan ayrıldı"], + "You promoted {user0} and {user1} to moderators" : "{user0} ve {user1} kullanıcılarını sorumluluğa yükselttiniz", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükselttiniz","{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükselttiniz"], + "An administrator promoted you and {user0} to moderators" : "Bir yönetici sizi ve {user0} kullanıcısını sorumluluğa yükseltti", + "{actor} promoted you and {user0} to moderators" : "{actor}, sizi ve {user0} kullanıcısını sorumluluğa yükseltti", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluğa yükseltti"], + "An administrator promoted {user0} and {user1} to moderators" : "Bir yönetici {user0} ve {user1} kullanıcısını sorumluluğa yükseltti", + "{actor} promoted {user0} and {user1} to moderators" : "{actor}, {user0} ve {user1} kullanıcılarını sorumluluğa yükseltti", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluğa yükseltti"], + "You demoted {user0} and {user1} from moderators" : "{user0} ve {user1} kullanıcılarını sorumluluktan çıkardınız", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardınız","{user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardınız"], + "An administrator demoted you and {user0} from moderators" : "Bir yönetici sizi ve {user0} kullanıcısını sorumluluktan çıkardı", + "{actor} demoted you and {user0} from moderators" : "{actor}, sizi ve {user0} kullanıcısını sorumluluktan çıkardı", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı","Bir yönetici sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı","{actor} sizi, {user0} kullanıcısını ve %n diğer katılımcıyı sorumluluktan çıkardı"], + "An administrator demoted {user0} and {user1} from moderators" : "Bir yönetici {user0} ve {user1} kullanıcısını sorumluluktan çıkardı", + "{actor} demoted {user0} and {user1} from moderators" : "{actor}, {user0} ve {user1} kullanıcılarını sorumluluktan çıkardı", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı","Bir yönetici, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı","{actor}, {user0} ve {user1} kullanıcıları ile %n diğer katılımcıyı sorumluluktan çıkardı"], + "You:" : "Siz:", + "You: {lastMessage}" : "Siz: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "The server was updated." : "Sunucu güncellenmiş.", + "(edited by you)" : "(sizin tarafından düzenlendi)", + "(edited by a deleted user)" : "(silinmiş bir kullanıcı tarafından düzenlendi)", + "(edited by {moderator})" : "({moderator} tarafından düzenlendi)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Başka bir pencereden ya da aygıttan da katıldığınız görüşmeye yeniden katılmaya çalışıyorsunuz. Nextcloud Konuş henüz bu özelliği desteklemiyor. Ne yapmak istersiniz?", + "Leave this page" : "Sayfadan ayrılmak", + "Join here" : "Buradan katılmak", + "Deck card has been posted to {conversation}" : "{conversation} görüşmesine Tahta kartı yapıştırıldı", + "An error occurred while posting deck card to conversation" : "Tahta kartı seçilmiş görüşmeye gönderilirken bir sorun çıktı", + "Post to a conversation" : "Bir görüşmeye gönder", + "Post to conversation" : "Görüşmeye gönder", + "The recording failed. Please contact your administrator." : "Kayıt yapılamadı. lütfen yöneticiniz ile görüşün.", + "Location has been posted to {conversation}" : "{conversation} görüşmesine Konum yapıştırıldı", + "An error occurred while posting location to conversation" : "Konum seçilmiş görüşmeye gönderilirken bir sorun çıktı.", + "Share to a conversation" : "Bir görüşmeye gönder", + "Share to conversation" : "Görüşmeye gönder", + "In conversation" : "Görüşmede", + "Search in conversation: {conversation}" : "{conversation} görüşmesinde ara", + "Your requests are throttled at the moment due to brute force protection" : "İsteğiniz kaba kuvvet saldırısı koruması tarafından bir süreliğine yavaşlatıldı", + "Error while clearing conversation history" : "Görüşme geçmişi temizlenirken sorun çıktı", + "Error occurred while allowing guests" : "Konuklar kabul edilirken sorun çıktı", + "Error occurred while disallowing guests" : "Konuklar reddedilirken sorun çıktı", + "Error occurred when restricting the conversation to moderator" : "Görüşmede yalnızca sorumluya izin verilirken sorun çıktı", + "Error occurred when opening the conversation to everyone" : "Görüşmede herkese izin verilirken sorun çıktı", + "Conversation password has been saved" : "Görüşme parolası kaydedildi", + "Conversation password has been removed" : "Görüşme parolası kaldırıldı", + "Error occurred while saving conversation password" : "Görüşme parolası kaydedilirken sorun çıktı", + "Call recording is starting." : "Çağrı kaydı başlatılıyor.", + "Call recording stopped while starting." : "Çağrı kaydı başlatılırken durduruldu.", + "Call recording stopped. You will be notified once the recording is available." : "Çağrı kaydı durduruldu. Kayıt kullanılabilir olduğunda bilgilendirileceksiniz.", + "Conversation picture set" : "Görüşme fotoğrafı ayarlandı", + "Conversation picture deleted" : "Görüşme fotoğrafı silindi", + "Could not delete the conversation picture" : "Görüşme fotoğrafı silinemedi", + "Could not remove the automatic expiration" : "Otomatik silme süresi kaldırılamadı", + "Could not post message: {errorMessage}" : "İleti gönderilemedi: {errorMessage}", + "Participant is banned successfully" : "Katılımcı yasaklandı", + "Error while banning the participant" : "Katılımcı yasaklanırken sorun çıktı", + "An error occurred while fetching the participants" : "Katılımcılar alınırken bir sorun çıktı", + "Could not send invitation to {actorId}" : "{actorId} için davet gönderilirken sorun çıktı", + "Invitations sent" : "Davetler gönderildi", + "Error occurred when sending invitations" : "Davetler gönderilirken sorun çıktı", + "Failed to join the conversation." : "Görüşmeye girilemedi.", + "An error occurred while creating breakout rooms" : "Çalışma odaları oluşturulurken bir sorun çıktı", + "An error occurred while re-ordering the attendees" : "Katılımcılar yeniden sıralanırken bir sorun çıktı", + "An error occurred while deleting breakout rooms" : "Çalışma odaları silinirken bir sorun çıktı", + "An error occurred while starting breakout rooms" : "Çalışma odaları açılırken bir sorun çıktı", + "An error occurred while stopping breakout rooms" : "Çalışma odaları kapatılırken bir sorun çıktı", + "An error occurred while sending a message to the breakout rooms" : "Çalışma odalarına ileti gönderilirken bir sorun çıktı", + "An error occurred while requesting assistance" : "Yardım istenirken bir sorun çıktı", + "An error occurred while resetting the request for assistance" : "Yardım isteği sıfırlanırken bir sorun çıktı", + "An error occurred while joining breakout room" : "Çalışma odasına geçilirken bir sorun çıktı", + "Failed to rename the thread" : "Yazışma yeniden adlandırılamadı", + "Error fetching upcoming events" : "Yaklaşan etkinlikler alınırken sorun çıktı", + "Error fetching upcoming reminders" : "Yaklaşan anımsatıcılar alınırken sorun çıktı", + "An error occurred while accepting an invitation" : "Bir davet kabul edilirken bir sorun çıktı", + "An error occurred while rejecting an invitation" : "Bir davet reddedilirken bir sorun çıktı", + "{guest} (guest)" : "{guest} (konuk)", + "Poll draft has been saved" : "Anket taslağı kaydedildi", + "An error occurred while saving the draft" : "Anket taslağı kaydedilirken bir sorun çıktı", + "An error occurred while submitting your vote" : "Oyunuz gönderilirken bir sorun çıktı", + "An error occurred while ending the poll" : "Anket sona erdirilirken bir sorun çıktı", + "An error occurred while deleting the poll draft" : "Anket taslağı silinirken bir sorun çıktı", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user}, \"{name}\" anketini oluşturdu. Oy vermek için tıklayın", + "Failed to add reaction" : "Tepki eklenemedi", + "Failed to remove reaction" : "Tepki silinemedi", + "The server is in maintenance mode." : "Sunucu bakım kipinde.", + "Federated server was updated." : "Birleşik sunucu güncellenmiş.", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" dosyası yüklenirken sorun çıktı", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" dosyasını yüklemek için yeterli boş alan yok", + "You are not allowed to share files" : "Dosya paylaşma izniniz yok", + "Error while sharing file" : "Dosya paylaşılırken sorun çıktı", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Kullandığınız tarayıcı Nextcloud Konuş uygulaması tarafından tam olarak desteklenmiyor. Lütfen güncel Mozilla Firefox, Microsoft Edge, Google Chrome, Opera ya da Apple Safari sürümünü kullanın.", + "_In %n hour_::_In %n hours_" : ["%n saat sonra","%n saat sonra"], + "_%n minute _::_%n minutes_" : ["%n dakika ","%n dakika"], + "In {hours} and {minutes}" : "{hours} : {minutes} sonra", + "_In %n minute_::_In %n minutes_" : ["%n dakika sonra","%n dakika sonra"], + "Later today – {timeLocale}" : "Bugün daha sonra – {timeLocale}", + "Set time for later today" : "Bugün daha sonrası için ayarla", + "Tomorrow – {timeLocale}" : "Yarın – {timeLocale}", + "Set time for tomorrow" : "Yarın için ayarla", + "This weekend – {timeLocale}" : "Bu hafta sonu – {timeLocale}", + "Set time for this weekend" : "Bu hafta sonu için ayarla", + "Next week – {timeLocale}" : "Sonraki hafta – {timeLocale}", + "Set time for next week" : "Gelecek hafta için ayarla", + "Message link copied to clipboard" : "İleti bağlantısı panoya kopyalandı", + "Conversation link copied to clipboard" : "Görüşme bağlantısı panoya kopyalandı", + "The link could not be copied" : "Bağlantı kopyalanamadı", + "Error while parsing a PROPFIND error" : "PROPFIND hatası işlenirken sorun çıktı", + "Sending signaling message has failed" : "Signaling iletisi gönderilemedi", + "Lost connection to signaling server. Trying to reconnect." : "Signalling sunucusu ile bağlantı kesildi. Bağlantı yeniden kurulmaya çalışılıyor.", + "Lost connection to signaling server." : "Signalling sunucusu ile bağlantı kesildi.", + "Connecting is taking longer than expected …" : "Bağlantı kurulması beklenenden uzun sürüyor…", + "Failed to connect. Retrying …" : "Bağlantı kurulamadı. Yeniden deneniyor…", + "Failed to connect. The signaling server may be set up incorrectly" : "Bağlantı kurulamadı. Signalling sunucusu yanlış yapılandırılmış olabilir", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Bu Konuş sürümü ile uyumlu olması için yapılandırılmış signalling sunucusunun güncellenmesi gerekiyor. Lütfen yöneticiniz ile görüşün.", + "Please restart the app." : "Lütfen uygulamayı yeniden başlatın.", + "Please reload the page." : "Lütfen sayfayı yeniden yükleyin.", + "Please try to restart the app." : "Lütfen uygulamayı yeniden başlatmayı deneyin.", + "Please try to reload the page." : "Lütfen sayfayı yeniden yüklemeyi deneyin.", + "Do not disturb" : "Rahatsız etmeyin", + "Away" : "Uzakta", + "Microphone {number}" : "{number}. mikrofon", + "Camera {number}" : "{number}. kamera", + "Speaker {number}" : "{number}. hoparlör", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Mikrofonunuz kapalıyken konuşuyorsunuz gibi görünüyor. Lütfen diğer katılımcıların sizi duyabilmesi için mikrofonunuzu açın", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "En az bir katılımcı ile bağlantı kurulamadı. Kullanım şekliniz için bir TURN sunucusuna gerek olabilir. Lütfen BT yöneticinizden {linkstart}bu belgeye bakarak{linkend} bir TURN sunucusu kurmasını isteyin.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "İşlemin tamamlanması beklendiğinden uzun sürüyor. Ortam izinleri zaten verilmiş (ya da reddedilmiş) olabilir mi? Yanıt evet ise ses ve görüntülerde sorun çıkacağından lütfen tarayıcınızı yeniden başlatın.", + "Access to microphone & camera is only possible with HTTPS" : "Kamera ve mikrofona yalnızca HTTPS üzerinden erişilebilir", + "Please move your setup to HTTPS" : "Lütfen kurulumunuzu HTTPS üzerine geçirin", + "Access to microphone & camera was denied" : "Mikrofon ve kameraya erişim reddedildi", + "WebRTC is not supported in your browser" : "WebRTC tarayıcınız tarafından desteklenmiyor", + "Please use a different browser like Firefox or Chrome" : "Lütfen Firefox ya da Chrome gibi farklı bir tarayıcı kullanın", + "Error while accessing microphone & camera" : "Mikrofon ve kameraya erişilirken sorun çıktı", + "%s Talk on your mobile devices" : "Mobil aygıtlarınızda %s Konuş uygulaması", + "Join conversations at any time, anywhere, on any device." : "Görüşmelere istediğiniz yerden, istediğiniz zamanda, istediğiniz aygıt ile katılabilirsiniz.", + "Android app" : "Android uygulaması", + "iOS app" : "iOS uygulaması", + "__language_name__" : "Türkçe", + "Webhook Demo" : "İnternet kancası örneği", + "Call summary (%s)" : "Çağrı özeti (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Çağrı özeti botu, çağrıdan sonra tüm katılımcıları listeleyen ve görevleri özetleyen bir özet iletisi gönderir.", + "Tasks" : "Görevler", + "Notes" : "Notlar", + "Reports" : "Raporlar", + "Decisions" : "Kararlar", + "Agenda" : "Gündem", + "Call summary" : "Çağrı özeti", + "Call summary - {title}" : "Çağrı özeti - {title}", + "Talk conversation for event" : "Etkinlik için Konuş görüşmesi", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push kuruldu. Bilgisayar istemci yazılımlarının başarımını artırır.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} kurulmamış. Bilgisayar istemci yazılımları kullanılırken başarım sorunları yaşanabilir.", + "Next meeting" : "Sonraki toplantı", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Takviminizde bir toplantı zamanlayın. Burada görüntülenmesi için bir Konuş görüşmesinin konum olarak ayarlanması gerekir", + "Join conversations from remote Nextcloud servers" : "Uzak Nextcloud sunucularındaki görüşmelere katıl", + "Your default media state has been saved" : "Varsayılan ortam durumunuz kaydedildi", + "Set reminder for later today" : "Bugün daha sonrası için anımsatıcı ayarla", + "Set reminder for tomorrow" : "Yarın için anımsatıcı ayarla", + "Set reminder for this weekend" : "bu hafta sonu için anımsatıcı ayarla", + "Set reminder for next week" : "Gelecek hafta için anımsatıcı ayarla", + "Generate summary" : "Özet oluşturulsun", + "Open poll • You voted already" : "Açık anket • Zaten oy vermişsiniz", + "Open poll • Click to vote" : "Açık anket • Oy vermek için tıklayın", + "Poll • Ended" : "Anket • Sona ermiş", + "Talk recording from {time} ({conversation})" : "Konuş kaydediyor {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Anket sonuçları • %n oy","Anket sonuçları • %n oy"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Açık anket • %n oy","Açık anket • %n oy"], + "Submit vote" : "Oyu gönder", + "Your privacy setting has been saved" : "Gizlilik ayarınız kaydedildi", + "Your personal setting has been saved" : "Kişisel ayarlarınız kaydedildi", + "Failed to save sounds setting" : "Ses ayarları kaydedilemedi", + "Sounds setting saved" : "Ses ayarları kaydedildi", + "Always shown if recording consent is required" : "Kayıt alma rızası isteniyorsa her zaman görüntülenir", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Konuş güncellenmiş. Bir çağrı başlatamaz ya da katılamazsınız.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Görüşmeye başka bir pencereden ya da aygıttan da katılmışsınız. Nextcloud Konuş henüz bu özelliği desteklemediği için bu oturum kapatılacak.", + "Nextcloud Talk was updated." : "Nextcloud Konuş güncellenmiş.", + "Nextcloud is in maintenance mode." : "Nextcloud bakım kipinde.", + "Nextcloud Talk Federation was updated." : "Nextcloud Konuş birliği güncellenmiş.", + "Enable live translation" : "Canlı çeviriyi aç", + "I picked list style" : "Liste biçemini seçtim", + "Hey! Are you using Talk in list style or with message bubbles?" : "Talk görünümü liste olarak mı ileti balonları olarak mı kullanıyorsunuz?" +},"pluralForm" :"nplurals=2; plural=(n > 1);" +} \ No newline at end of file diff --git a/l10n/ug.js b/l10n/ug.js new file mode 100644 index 0000000..bfdeb6b --- /dev/null +++ b/l10n/ug.js @@ -0,0 +1,2163 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "سۆھبەت", + "(Duration %s)" : "(ئۇزۇنلۇقى %s)", + "You attended a call with {user1}" : "سىز {user1} بىلەن تېلېفونغا قاتناشتىڭىز", + "_%n guest_::_%n guests_" : ["%n مىھمان","%n مىھمانلار"], + "You attended a call with {user1} and {user2}" : "سىز {user1} ۋە {user2} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2} and {user3}" : "سىز {user1}, {user2} ۋە {user3} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "سىز {user1}, {user2}, {user3} ۋە {user4} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "سىز {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفونغا قاتناشتىڭىز.", + "_%n other_::_%n others_" : ["%n باشقا","%n باشقىلار"], + "{actor} invited you to {call}" : "{actor} سىزنى {call} تەكلىپ قىلدى", + "You were invited to a conversation or had a call" : "سىز سۆھبەت گە تەكلىپ قىلىنغان ياكى تېلېفون بولغان", + "Other activities" : "باشقا پائالىيەتلەر", + "Talk" : "پاراڭ", + "Guest" : "مېھمان", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud سۆھبىتىگە خۇش كەپسىز!\nبۇ سۆھبەتتە سىزگە Nextcloud Talk دىكى يېڭى ئىقتىدارلار ھەققىدە ئۇچۇر بېرىلىدۇ.", + "## New in Talk %s" : "## پاراڭ %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge ۋە Safari ھازىر ئاۋازلىق ۋە سىنلىق سۆزلىشىشكە قاتناشقىلى بولىدۇ", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- بىرمۇبىر سۆھبەت ھازىر داۋاملىشىۋاتىدۇ ، ئەمدى تاسادىپىي ھالدا گۇرۇپپا پاراڭلىرىغا ئايلاندۇرغىلى بولمايدۇ. يەنە قاتناشقۇچىلاردىن بىرى سۆھبەتتىن ئايرىلغاندا ، سۆھبەت ئەمدى ئاپتوماتىك ئۆچۈرۈلمەيدۇ. ھەر ئىككى قاتناشقۇچى ئايرىلسىلا ، سۆھبەت مۇلازىمېتىردىن ئۆچۈرۈلىدۇ", + "- You can now notify all participants by posting \"@all\" into the chat" : "- ھازىر پاراڭغا «@all» نى يوللاش ئارقىلىق بارلىق قاتناشقۇچىلارغا خەۋەر قىلالايسىز", + "- With the \"arrow-up\" key you can repost your last message" : "- «يا ئوق» كۇنۇپكىسى ئارقىلىق ئاخىرقى ئۇچۇرىڭىزنى قايتا يوللىيالايسىز", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- سۆھبەتتە ھازىر بۇيرۇقلار بولىدۇ ، «/ ياردەم» نى پاراڭلىشىش ئۇچۇرى قىلىپ ئەۋەتىپ ، باشقۇرغۇچىڭىزنىڭ بەزىلىرىنى تەڭشىگەن-تەڭشىمىگەنلىكىنى كۆرۈڭ", + "- With projects you can create quick links between conversations, files and other items" : "- تۈرلەر ئارقىلىق سۆھبەت ، ھۆججەت ۋە باشقا تۈرلەر ئارىسىدا تېز ئۇلىنىش ھاسىل قىلالايسىز", + "- You can now mention guests in the chat" : "- ھازىر پاراڭدىكى مېھمانلارنى تىلغا ئالالايسىز", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- سۆھبەتتە ھازىر بىر لوبىخانا بولالايدۇ. بۇ رىياسەتچىلەرنىڭ سۆھبەتكە قاتنىشىشىغا ۋە تېلېفون قىلىپ يىغىننى تەييارلىشىغا يول قويىدۇ ، ئابونتلار ۋە مېھمانلار ساقلاشقا مەجبۇر بولىدۇ", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- سىز ھازىر باشقا ئىشلەتكۈچىلەرگە ئۇچۇرلىرىڭىزنىڭ مەزمۇنىنى تېخىمۇ كۆپ مەزمۇن بىلەن تەمىنلەيدىغان ئۇچۇرلارغا بىۋاسىتە جاۋاب قايتۇرالايسىز", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- سۆھبەت ۋە قاتناشقۇچىلارنى ئىزدەش ھازىر بار بولغان سۆھبەتلىرىڭىزنى سۈزۈپ ، ئىلگىرىكى سۆھبەتلەرنى تېپىشقا تېخىمۇ قولايلىق يارىتىدۇ", + "- You can now add custom user groups to conversations when the circles app is installed" : "- چەمبىرەك دېتالى قاچىلىغاندا ھازىر سۆھبەتكە ئىختىيارى ئىشلەتكۈچى گۇرۇپپىسىنى قوشالايسىز", + "- Check out the new grid and call view" : "- يېڭى تور ۋە چاقىرىش كۆرۈنۈشىنى تەكشۈرۈپ بېقىڭ", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- ھازىر ھۆججەتلىرىڭىزنى ئۈسكۈنىڭىزدىن بىۋاسىتە پاراڭغا يۈكلىيەلەيسىز ۋە سۆرەلەيسىز", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- ئورتاق ھۆججەتلەر ھازىر كۆرۈرمەن ئەپلىرى بىلەن پاراڭلىشىش كۆرۈنۈشىنىڭ ئىچىدە بىۋاسىتە ئېچىلدى", + "- You can now search for chats and messages in the unified search in the top bar" : "- سىز ھازىر ئۈستۈنكى بالداقتىكى بىرلىككە كەلگەن ئىزدەشتە پاراڭ ۋە ئۇچۇرلارنى ئىزدەيسىز", + "- Spice up your messages with emojis from the emoji picker" : "- emoji تاللىغۇچتىن emojis بىلەن ئۇچۇرلىرىڭىزنى تېتىتقۇ", + "- You can now change your camera and microphone while being in a call" : "- ھازىر تېلېفون قىلىۋاتقاندا كامېرا ۋە مىكروفونىڭىزنى ئۆزگەرتەلەيسىز", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- پاراڭلىرىڭىزغا بەزى مەزمۇنلارنى تەسۋىرلەپ بېرىڭ ھەمدە ئۇنى ئېچىڭ ، شۇنداق بولغاندا تىزىملاتقان ئابونتلار ئۇنى تاپالايدۇ ۋە ئۆزى قوشۇلالايدۇ", + "- See a read status and send failed messages again" : "- ئوقۇش ھالىتىنى كۆرۈڭ ۋە مەغلۇپ بولغان ئۇچۇرلارنى قايتا ئەۋەتىڭ", + "- Raise your hand in a call with the R key" : "- R كۇنۇپكىسى بىلەن تېلېفوندا قولىڭىزنى كۆتۈرۈڭ", + "- Join the same conversation and call from multiple devices" : "- ئوخشاش سۆھبەتكە قاتنىشىڭ ۋە كۆپ ئۈسكۈنىدىن تېلېفون قىلىڭ", + "- Send voice messages, share your location or contact details" : "- ئاۋازلىق ئۇچۇر ئەۋەتىڭ ، ئورنىڭىز ياكى ئالاقىلىشىش ئۇچۇرلىرىڭىزنى ئورتاقلىشىڭ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- سۆھبەتكە گۇرۇپپا قوشۇڭ ، يېڭى گۇرۇپپا ئەزالىرى ئاپتوماتىك ھالدا قاتناشقۇچىلار سۈپىتىدە قوشۇلىدۇ", + "- A preview of your audio and video is shown before joining a call" : "- تېلېفونغا كىرىشتىن بۇرۇن ئاۋازلىق ۋە سىننىڭ ئالدىن كۆرۈشى كۆرسىتىلىدۇ", + "- You can now blur your background in the newly designed call view" : "- يېڭى لايىھەلەنگەن تېلېفون كۆرۈنۈشىدە ئارقا كۆرۈنۈشىڭىزنى خىرەلەشتۈرەلەيسىز", + "- Moderators can now assign general and individual permissions to participants" : "- رىياسەتچىلەر ھازىر قاتناشقۇچىلارغا ئومۇمىي ۋە ئايرىم ئىجازەتلەرنى بېرەلەيدۇ", + "- You can now react to chat messages" : "- ھازىر پاراڭلىشىش ئۇچۇرلىرىغا ئىنكاس قايتۇرالايسىز", + "- In the sidebar you can now find an overview of the latest shared items" : "- يانبالداقتا سىز ئەڭ يېڭى ئورتاق بەھرىلىنىدىغان تۈرلەرنىڭ ئومۇمىي كۆرۈنۈشىنى تاپالايسىز", + "- Use a poll to collect the opinions of others or settle on a date" : "- راي سىناش ئارقىلىق باشقىلارنىڭ پىكىرىنى توپلاڭ ياكى بىر كۈندە ھەل قىلىڭ", + "- Configure an expiration time for chat messages" : "- پاراڭلىشىش ئۇچۇرلىرىنىڭ ۋاقتى توشىدۇ", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- چوڭ پاراڭلاردا باشقىلارغا خەۋەر قىلماي تېلېفون قىلىشنى باشلاڭ. تېلېفون باشلانغاندىن كېيىن ئايرىم تېلېفون ئۇقتۇرۇشى ئەۋەتەلەيسىز.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- جىددىي ئەھۋال بولمىسا تاپشۇرۇۋالغۇچىلارغا خەۋەر قىلماي پاراڭلىشىش ئۇچۇرلىرىنى ئەۋەتىڭ", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis ھازىر \":\" نى يېزىش ئارقىلىق ئاپتوماتىك تاماملىنىدۇ.", + "- Link various items using the new smart-picker by typing a \"/\"" : "- يېڭى ئەقلىي ئىقتىدارلىق تاللىغۇچ ئارقىلىق «/» نى يېزىش ئارقىلىق ھەر خىل تۈرلەرنى ئۇلاڭ", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- رىياسەتچىلەر ھازىر بۆسۈش ئۆيى قۇرالايدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Calls can now be recorded (requires the High-performance backend)" : "- تېلېفوننى ھازىر خاتىرىلىگىلى بولىدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Conversations can now have an avatar or emoji as icon" : "- سۆھبەت ھازىر سىنبەلگە سۈپىتىدە باش سۈرىتى ياكى emoji بولالايدۇ", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- مەۋھۇم تەگلىك ھازىر سىنلىق سۆزلىشىشتىكى قالايمىقان ئارقا كۆرۈنۈشتىن باشقا", + "- Reactions are now available during calls" : "- ھازىر تېلېفون قىلىش جەريانىدا ئىنكاسلار بار", + "- Typing indicators show which users are currently typing a message" : "- كىرگۈزۈش كۆرسەتكۈچلىرى قايسى ئابونتلارنىڭ ھازىر ئۇچۇر يېزىۋاتقانلىقىنى كۆرسىتىپ بېرىدۇ", + "- Groups can now be mentioned in chats" : "- گۇرۇپپىلارنى ھازىر پاراڭلاردا تىلغا ئالغىلى بولىدۇ", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- ئەگەر ترانسكرىپسىيە تەمىنلىگۈچى دېتالى تىزىملاتسا ، تېلېفون خاتىرىلىرى ئاپتوماتىك كۆچۈرۈلىدۇ", + "- Chat messages can be translated if a translation provider app is registered" : "- تەرجىمە تەمىنلىگۈچى ئەپ تىزىملاتقان بولسا پاراڭلىشىش ئۇچۇرلىرىنى تەرجىمە قىلىشقا بولىدۇ", + "- **Markdown** can now be used in _chat_ messages" : "- ** Markdown ** نى _chat_ ئۇچۇرلىرىدا ئىشلىتىشكە بولىدۇ", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks ھازىر bots نى يولغا قويالايدۇ. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشمەكچى بولسىڭىز https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- پاراڭلىشىش ئۇچۇرىغا ئەسكەرتىش ئورنىتىپ ، كېيىن ئۇقتۇرۇش قىلىنىدۇ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- ** ئەسكەرتىش ئارقىلىق ئۆزىڭىزگە ** پاراڭ ئىشلىتىپ خاتىرە قالدۇرۇڭ ۋە ئۈسكۈنىڭىز ئارىسىدا ئۇچۇر ئورتاقلىشىڭ", + "- Captions allow to send a message with a file at the same time" : "- خەتلەر بىرلا ۋاقىتتا ھۆججەت بىلەن ئۇچۇر ئەۋەتىشكە يول قويىدۇ", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- ئېكراننى ھەمبەھىرلەۋاتقاندا ياڭراتقۇنىڭ سىن كۆرۈنۈشى كۆرۈندى ، چاقىرىش ئىنكاسى جانلاندى", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- ئۇچۇرلارنى تىزىمغا كىرگەن ئاپتورلار ۋە رىياسەتچىلەر 6 سائەت تەھرىرلىيەلەيدۇ", + "- Unsent message drafts are now saved in your browser" : "- ئەۋەتىلمىگەن ئۇچۇر لايىھەلىرى تور كۆرگۈچىڭىزدە ساقلاندى", + "- Text chatting can now be done in a federated way with other Talk servers" : "- تېكىست پاراڭلىشىش ھازىر باشقا سۆھبەت مۇلازىمېتىرلىرى بىلەن فېدېراتسىيە ئۇسۇلدا ئېلىپ بېرىلسا بولىدۇ", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- رىياسەتچىلەر ھازىر ھېسابات ۋە مېھمانلارنى چەكلەپ ، ئۇلارنىڭ سۆھبەتكە قايتا كىرىشىنىڭ ئالدىنى ئالىدۇ", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- ئۇلانغان كالېندار ھادىسىلىرى ۋە ئىشخانا سىرتىدىكى ئالماشتۇرۇشتىن كەلگەن تېلېفونلار ھازىر سۆھبەتتە كۆرسىتىلدى", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- چاقىرىشنى باشقا پاراڭ مۇلازىمېتىرلىرى بىلەن فېدېراتىپ ئۇسۇلدا قىلغىلى بولىدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows، macOS ۋە Linux ئۈچۈن لايىھەلەنگەن Nextcloud Talk ئۈستەل يۈزى كىلىيېنتىنى تونۇشتۇرۇش: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud ياردەمچىسى ئارقىلىق سۆھبەتلەردىكى تېلېفون خاتىرىلىرى ۋە ئوقۇلمىغان ئۇچۇرلارنى خۇلاسىلەڭ", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- تەكلىپ قىلىنغان مېھمانلارنى ئۇلارنىڭ ئېلخەت ئادرېسى ئارقىلىق تونۇش، قاتناشقۇچىلار تىزىملىكىنى ئىمپورت قىلىش، بېلەت تاشلاش لايىھەلىرىنى كىرگۈزۈش ۋە قاتناشقۇچىلار تىزىملىكىنى چۈشۈرۈش قاتارلىق ئۇسۇللار بىلەن يىغىنلارنى ياخشىلاش.", + "- Archive conversations to stay focused" : "- دىققەتنى چاچماسلىق ئۈچۈن سۆھبەتنى ئارخىپلا", + "- Schedule a meeting into your calendar from within a conversation" : "- سۆھبەت ئىچىدىن كالېندارىڭىزغا يىغىن پىلانلاڭ", + "- Search for messages of the current conversation directly in the right sidebar" : "- نۆۋەتتىكى سۆھبەتنىڭ ئۇچۇرلىرىنى بىۋاسىتە ئوڭ تەرەپتىكى يان بالداقتىن ئىزدەڭ", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- يېڭى قىسقا تىزىملىك ​​ئارقىلىق تېخىمۇ كۆپ سۆھبەتلەرنى دەسلەپكى قاراشتىلا كۆرۈڭ (سۆھبەت تەڭشەكلىرىدە قوزغىتىڭ)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- يىغىن سۆھبەتلىرى ھازىر كالېنداردىكى ماۋزۇ ۋە چۈشەندۈرۈشنى ماسلاشتۇرىدۇ ھەمدە باشلىنىشقا يېقىنلاشقۇچە ئىزدەش فىلتىرى بىلەن يوشۇرۇلىدۇ.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- ئۇچۇر مەزمۇنىنى سۆھبەت تىزىملىكى ۋە ئۇقتۇرۇشلاردىن يوشۇرۇش ئۈچۈن، ئۇقتۇرۇش تەڭشەكلىرىدە سۆھبەتلەرنى سەزگۈر دەپ بەلگىلەڭ.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- «بىئارام قىلماڭ» دېگەن ۋاقىتتا ئۇچۇر قوبۇل قىلىش ئۈچۈن، سۆھبەتلەرنى مۇھىم دەپ بەلگىلەڭ", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- يېڭى گۇرۇپپا يىغىنىنى دەرھال قۇرۇش ئۈچۈن، باشقا قاتناشقۇچىلارنى يەككە-يەككە چاقىرىشقا قوشۇڭ", + "- Use threads to keep your chat and discussions organized" : "- پاراڭلىشىش ۋە مۇزاكىرىلىرىڭىزنى تەرتىپلىك ساقلاش ئۈچۈن تېمىلارنى ئىشلىتىڭ", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- تېلېفون جەريانىدا نەق مەيداندىن تەرجىمە قىلىشقا بولىدۇ (نەق مەيداندىن تەرجىمە قىلىش ExApp ۋە يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى تەلەپ قىلىدۇ)", + "_All %n participant_::_All %n participants_" : ["بارلىق %n قاتناشقۇچى","بارلىق %n قاتناشقۇچىلار"], + "Talk updates ✅" : "پاراڭ يېڭىلاش ✅", + "Reaction deleted by author" : "ئاپتور تەرىپىدىن ئۆچۈرۈلگەن ئىنكاس", + "{actor} created the conversation" : "{actor} سۆھبەتنى قۇردى", + "You created the conversation" : "سۆھبەتنى قۇردىڭىز", + "System created the conversation" : "سىستېما سۆھبەتنى قۇردى", + "An administrator created the conversation" : "باشقۇرغۇچى سۆھبەتنى قۇردى", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} سۆھبەتكە «%1$s» دىن «%2$s» غا ئۆزگەرتتى.", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "سۆھبەتنىڭ نامىنى «%1$s» دىن «%2$s» غا ئۆزگەرتتىڭىز.", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "بىر باشقۇرغۇچى سۆھبەتنىڭ نامىنى «%1$s» دىن «%2$s» غا ئۆزگەرتتى.", + "{actor} set the description" : "{actor} چۈشەندۈرۈشنى بەلگىلەڭ", + "You set the description" : "چۈشەندۈرۈشنى تەڭشىدىڭىز", + "An administrator set the description" : "باشقۇرغۇچى چۈشەندۈرۈشنى بەلگىلىدى", + "{actor} removed the description" : "{actor} چۈشەندۈرۈشنى ئۆچۈردى", + "You removed the description" : "چۈشەندۈرۈشنى ئۆچۈردىڭىز", + "An administrator removed the description" : "باشقۇرغۇچى بۇ چۈشەندۈرۈشنى ئۆچۈرۈۋەتتى", + "You started a silent call" : "ئۈن-تىنسىز تېلېفون باشلىدىڭىز", + "Outgoing silent call" : "چىققان ئۈنسىز تېلىفۇن", + "{actor} started a silent call" : "{actor} جىمجىت تېلېفون باشلىدى", + "Incoming silent call" : "كەلگەن ئۈنسىز تېلىفۇن", + "You started a call" : "سىز تېلېفوننى باشلىدىڭىز", + "Outgoing call" : "چاقىرغان تېلىفۇن", + "{actor} started a call" : "{actor} چاقىرىشنى باشلىدى", + "Incoming call" : "كەلگەن تېلىفۇن", + "{actor} joined the call" : "{actor} چاقىرىققا قاتناشتى", + "You joined the call" : "سىز تېلېفونغا قاتناشتىڭىز", + "{actor} left the call" : "{actor} تېلېفوندىن ئايرىلدى", + "You left the call" : "سىز تېلېفوندىن ئايرىلدىڭىز", + "{actor} unlocked the conversation" : "{actor} سۆھبەتنى ئاچتى", + "You unlocked the conversation" : "سۆھبەتنى ئاچتىڭىز", + "An administrator unlocked the conversation" : "باشقۇرغۇچى سۆھبەتنى ئاچتى", + "{actor} locked the conversation" : "{actor} سۆھبەتنى قۇلۇپلىدى", + "You locked the conversation" : "سۆھبەتنى قۇلۇپلىدىڭىز", + "An administrator locked the conversation" : "باشقۇرغۇچى سۆھبەتنى قۇلۇپلىدى", + "{actor} limited the conversation to the current participants" : "{actor} سۆھبەتنى ھازىرقى قاتناشقۇچىلار بىلەنلا چەكلىدى", + "You limited the conversation to the current participants" : "سىز سۆھبەتنى نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىدىڭىز", + "An administrator limited the conversation to the current participants" : "بىر باشقۇرغۇچى سۆھبەتنى نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىدى", + "{actor} opened the conversation to registered users" : "{actor} تىزىملاتقان ئابونتلارغا سۆھبەتنى ئاچتى", + "You opened the conversation to registered users" : "سۆھبەتنى تىزىملاتقان ئىشلەتكۈچىلەرگە ئاچتىڭىز", + "An administrator opened the conversation to registered users" : "باشقۇرغۇچى تىزىملاتقان ئابونتلارغا سۆھبەتنى ئاچتى", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتى", + "You opened the conversation to registered users and users created with the Guests app" : "سىز مېھمانلار ئەپى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتىڭىز", + "An administrator opened the conversation to registered users and users created with the Guests app" : "بىر باشقۇرغۇچى مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتى", + "The conversation is now open to everyone" : "سۆھبەت ھازىر كۆپچىلىككە ئېچىۋېتىلدى", + "{actor} opened the conversation to everyone" : "{actor} كۆپچىلىككە سۆھبەتنى ئاچتى", + "You opened the conversation to everyone" : "سۆھبەتنى كۆپچىلىككە ئاچتىڭىز", + "{actor} restricted the conversation to moderators" : "{actor} رىياسەتچىلەر بىلەن سۆھبەتنى چەكلىدى", + "You restricted the conversation to moderators" : "رىياسەتچىلەر بىلەن سۆھبەتنى چەكلىدىڭىز", + "{actor} started breakout rooms" : "{actor} بۆسۈش ئۆيلىرىنى باشلىدى", + "You started breakout rooms" : "بۆسۈش ئۆيلىرىنى باشلىدىڭىز", + "{actor} stopped breakout rooms" : "{actor} بۆسۈش ئۆيلىرىنى توختاتتى", + "You stopped breakout rooms" : "بۆسۈش ئۆيلىرىنى توختاتتىڭىز", + "{actor} allowed guests" : "{actor} مېھمانلارغا رۇخسەت قىلدى", + "You allowed guests" : "مېھمانلارغا رۇخسەت قىلدىڭىز", + "An administrator allowed guests" : "باشقۇرغۇچى مېھمانلارغا رۇخسەت قىلدى", + "{actor} disallowed guests" : "{actor} مېھمانلارنى رەت قىلدى", + "You disallowed guests" : "مېھمانلارنى رەت قىلدىڭىز", + "An administrator disallowed guests" : "باشقۇرغۇچى مېھمانلارنى رەت قىلدى", + "{actor} set a password" : "{actor} پارول بەلگىلەڭ", + "You set a password" : "پارول بەلگىلىدىڭىز", + "An administrator set a password" : "باشقۇرغۇچى پارول بەلگىلىدى", + "{actor} removed the password" : "{actor} پارولنى ئېلىۋەتتى", + "You removed the password" : "پارولنى ئۆچۈردىڭىز", + "An administrator removed the password" : "باشقۇرغۇچى پارولنى ئۆچۈرۈۋەتتى", + "{actor} added {user}" : "{actor} قوشۇلدى {user}", + "You joined the conversation" : "سۆھبەتكە قاتناشتىڭىز", + "{actor} joined the conversation" : "{actor} سۆھبەتكە قاتناشتى", + "You added {user}" : "سىز {user} نى قوشتىڭىز", + "{actor} added you" : "{actor} سىزنى قوشتى", + "An administrator added you" : "باشقۇرغۇچى سىزنى قوشتى", + "An administrator added {user}" : "باشقۇرغۇچى {user} نى قوشتى", + "You left the conversation" : "سۆھبەتتىن ئايرىلدىڭىز", + "{actor} left the conversation" : "{actor} سۆھبەتتىن ئايرىلدى", + "{actor} removed {user}" : "{actor} چىقىرىۋېتىلدى {user}", + "You removed {user}" : "سىز {user} نى ئۆچۈردىڭىز", + "{actor} removed you" : "{actor} سىزنى ئېلىۋەتتى", + "An administrator removed you" : "باشقۇرغۇچى سىزنى ئۆچۈرۈۋەتتى", + "An administrator removed {user}" : "باشقۇرغۇچى {user} نى ئۆچۈردى", + "{actor} invited {federated_user}" : "{actor} تەكلىپ قىلىنغان {federated_user}", + "You invited {federated_user}" : "سىز {federated_user} نى تەكلىپ قىلدىڭىز", + "You accepted the invitation" : "تەكلىپنى قوبۇل قىلدىڭىز", + "{actor} invited you" : "{actor} سىزنى تەكلىپ قىلدى", + "An administrator invited you" : "باشقۇرغۇچى سىزنى تەكلىپ قىلدى", + "An administrator invited {federated_user}" : "باشقۇرغۇچى {federated_user} نى تەكلىپ قىلدى", + "{federated_user} accepted the invitation" : "{federated_user} تەكلىپنى قوبۇل قىلدى", + "{actor} removed {federated_user}" : "{actor} چىقىرىۋېتىلدى {federated_user}", + "You removed {federated_user}" : "ئۆچۈرۈۋەتتىڭىز {federated_user}", + "You declined the invitation" : "تەكلىپنى رەت قىلدىڭىز", + "An administrator removed {federated_user}" : "باشقۇرغۇچى {federated_user} نى چىقىرۋەتتى", + "{federated_user} declined the invitation" : "{federated_user} تەكلىپنى رەت قىلدى", + "{actor} added group {group}" : "{actor} قوشۇلغان گۇرۇپپا {group}", + "You added group {group}" : "گۇرۇپپا {group} قوشتىڭىز", + "An administrator added group {group}" : "باشقۇرغۇچى گۇرۇپپا {group} قوشتى", + "{actor} removed group {group}" : "{actor} چىقىرىۋېتىلگەن گۇرۇپپا {group}", + "You removed group {group}" : "گۇرۇپپا {group} ئۆچۈردىڭىز", + "An administrator removed group {group}" : "باشقۇرغۇچى گۇرۇپپا {group} ئۆچۈردى", + "{actor} added team {circle}" : "{actor} قوشۇلغان گۇرۇپپا {circle}", + "You added team {circle}" : "گۇرۇپپا {circle} قوشتىڭىز", + "An administrator added team {circle}" : "باشقۇرغۇچى گۇرۇپپا {circle} قوشتى", + "{actor} removed team {circle}" : "{actor} چىقىرىۋېتىلگەن گۇرۇپپا {circle}", + "You removed team {circle}" : "گۇرۇپپا {circle} ئۆچۈردىڭىز", + "An administrator removed team {circle}" : "باشقۇرغۇچى گۇرۇپپا {circle} ئۆچۈردى", + "{actor} added {phone}" : "{actor} قوشۇلدى {phone}", + "You added {phone}" : "{phone} قوشتىڭىز", + "An administrator added {phone}" : "باشقۇرغۇچى {phone} قوشتى", + "{actor} removed {phone}" : "{actor} چىقىرىۋېتىلدى {phone}", + "You removed {phone}" : "{phone} ئېلىۋەتتىڭىز", + "An administrator removed {phone}" : "باشقۇرغۇچى {phone} ئېلىۋەتتى", + "{actor} promoted {user} to moderator" : "{actor} ئۆستۈرۈلگەن {user} رىياسەتچىگە ئۆستۈرۈلدى", + "You promoted {user} to moderator" : "سىز {user} نى رىياسەتچىگە ئۆستۈردىڭىز", + "{actor} promoted you to moderator" : "{actor} سىزنى رىياسەتچىگە ئۆستۈردى", + "An administrator promoted you to moderator" : "باشقۇرغۇچى سىزنى رىياسەتچىگە ئۆستۈردى", + "An administrator promoted {user} to moderator" : "باشقۇرغۇچى {user} نى رىياسەتچىگە ئۆستۈردى", + "{actor} demoted {user} from moderator" : "رىياسەتچىدىن {actor} تۆۋەنلىتىلگەن {user}", + "You demoted {user} from moderator" : "سىز {user} نى رىياسەتچىدىن چۈشۈردىڭىز", + "{actor} demoted you from moderator" : "{actor} سىزنى رىياسەتچىدىن چۈشۈردى", + "An administrator demoted you from moderator" : "باشقۇرغۇچى سىزنى رىياسەتچىدىن چۈشۈردى", + "An administrator demoted {user} from moderator" : "باشقۇرغۇچى {user} نى رىياسەتچىدىن چۈشۈردى", + "{actor} shared a file which is no longer available" : "{actor} ئەمدى ئىشلەتكىلى بولمايدىغان ھۆججەتنى ھەمبەھىرلىدى", + "You shared a file which is no longer available" : "ئەمدى ئىشلەتكىلى بولمايدىغان ھۆججەتنى ئورتاقلاشتىڭىز", + "File shares are currently not supported in federated conversations" : "فېدېراتسىيە پاراڭلىرىدا ھۆججەت ھەمبەھىرلىرىنى قوللىمايدۇ", + "The shared location is malformed" : "ئورتاق بەھرىلىنىدىغان ئورۇن خاتا", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} Mat بۇ سۆھبەتنى باشقا پاراڭلار بىلەن ماس قەدەمدە ماسلاشتۇرۇش ئۈچۈن Matterbridge نى قۇردى", + "You set up Matterbridge to synchronize this conversation with other chats" : "سىز بۇ سۆھبەتنى باشقا پاراڭلار بىلەن ماس قەدەمدە ماسلاشتۇرۇش ئۈچۈن Matterbridge نى قۇردىڭىز", + "{actor} created thread {title}" : "{actor} يىپ {title} نى قۇردى", + "You created thread {title}" : "سىز يىپ {title} نى قۇردىڭىز", + "{actor} renamed thread {title}" : "{actor} يىپ {title} نىڭ ئىسمىنى ئۆزگەرتتى", + "You renamed thread {title}" : "سىز يىپ {title} نىڭ ئىسمىنى ئۆزگەرتتىڭىز", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge سەپلىمىسىنى يېڭىلىدى", + "You updated the Matterbridge configuration" : "Matterbridge سەپلىمىسىنى يېڭىلىدىڭىز", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge سەپلىمىسىنى ئېلىۋەتتى", + "You removed the Matterbridge configuration" : "Matterbridge سەپلىمىسىنى ئۆچۈردىڭىز", + "{actor} started Matterbridge" : "{actor} Matterbridge نى باشلىدى", + "You started Matterbridge" : "سىز Matterbridge نى باشلىدىڭىز", + "{actor} stopped Matterbridge" : "{actor} Matterbridge نى توختاتتى", + "You stopped Matterbridge" : "سىز Matterbridge نى توختاتتىڭىز", + "{actor} deleted a message" : "{actor} ئۇچۇرنى ئۆچۈردى", + "You deleted a message" : "سىز بىر ئۇچۇرنى ئۆچۈردىڭىز", + "{actor} edited a message" : "{actor} ئۇچۇرنى تەھرىرلىدى", + "You edited a message" : "سىز بىر ئۇچۇرنى تەھرىرلىدىڭىز", + "{actor} pinned a message" : "{actor} بىر ئۇچۇرنى مىخلىدى", + "You pinned a message" : "سىز بىر ئۇچۇرنى مىخلىدىڭىز", + "{actor} unpinned a message" : "{actor} بىر ئۇچۇرنى مىخلىمىدىڭىز", + "Message was automatically unpinned" : "ئۇچۇر ئاپتۇماتىك مىخلانمىدى", + "You unpinned a message" : "سىز بىر ئۇچۇرنى مىخلىمىدىڭىز", + "{actor} deleted a reaction" : "{actor} بىر ئىنكاسنى ئۆچۈردى", + "You deleted a reaction" : "سىز بىر ئىنكاسنى ئۆچۈردىڭىز", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["سىز ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدىڭىز"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["سىز ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدىڭىز"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["سىز ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدىڭىز"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["سىز ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدىڭىز"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدى"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدى"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدى"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدى"], + "{actor} disabled message expiration" : "{actor} چەكلەنگەن ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "You disabled message expiration" : "ئۇچۇرنىڭ مۇددىتى توشتى", + "{actor} cleared the history of the conversation" : "{actor} سۆھبەتنىڭ تارىخىنى تازىلىدى", + "You cleared the history of the conversation" : "سۆھبەتنىڭ تارىخىنى تازىلىدىڭىز", + "{actor} set the conversation picture" : "{actor} سۆھبەت رەسىمىنى تەڭشىدى", + "You set the conversation picture" : "سۆھبەت رەسىمىنى تەڭشىدىڭىز", + "{actor} removed the conversation picture" : "{actor} سۆھبەت رەسىمىنى ئېلىۋەتتى", + "You removed the conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈردىڭىز", + "{actor} ended the poll {poll}" : "{actor} راي سىناش {poll} نى ئاخىرلاشتۇردى", + "You ended the poll {poll}" : "راي سىناش {poll} نى ئاخىرلاشتۇردىڭىز", + "{actor} started the video recording" : "{actor} سىن خاتىرىسىنى باشلىدى", + "You started the video recording" : "سىن خاتىرىسىنى باشلىدىڭىز", + "{actor} stopped the video recording" : "{actor} سىن خاتىرىسىنى توختاتتى", + "You stopped the video recording" : "سىن خاتىرىسىنى توختاتتىڭىز", + "{actor} started the audio recording" : "{actor} ئاۋاز خاتىرىسىنى باشلىدى", + "You started the audio recording" : "ئاۋاز خاتىرىسىنى باشلىدىڭىز", + "{actor} stopped the audio recording" : "{actor} ئاۋاز خاتىرىسىنى توختاتتى", + "You stopped the audio recording" : "ئاۋاز خاتىرىسىنى توختاتتىڭىز", + "The recording failed" : "خاتىرىلەش مەغلۇپ بولدى", + "Someone voted on the poll {poll}" : "بەزىلەر بېلەت تاشلاش {poll} تاشلاشقا بېلەت تاشلىدى", + "Message deleted by author" : "ئاپتور تەرىپىدىن ئۆچۈرۈلگەن ئۇچۇر", + "Message deleted by {actor}" : "ئۇچۇر {actor} by تەرىپىدىن ئۆچۈرۈلدى", + "Message deleted by you" : "سىز تەرىپىدىن ئۆچۈرۈلگەن ئۇچۇر", + "Deleted user" : "ئىشلەتكۈچى ئۆچۈرۈلدى", + "Unknown number" : "نامەلۇم نومۇر", + "Administration" : "باشقۇرۇش", + "System" : "سىستېما", + "%s (guest)" : "%s (مېھمان)", + "Missed call" : "جاۋاپسىز تېلىفۇن", + "Unanswered call" : "جاۋاپسىز تېلىفۇن", + "Call ended (Duration {duration})" : "چاقىرىش ئاخىرلاشتى (ئۇزۇنلۇقى {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "چاقىرىش ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (ۋاقتى {duration} ۋاقتى)", + "{actor} ended the call (Duration {duration})" : "{actor} چاقىرىقنى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى، چۈنكى سۆھبەت ۋاقتى ئەڭ ئۇزۇن ۋاقىتقا يەتتى (ئۇزۇنلۇقى {duration})","%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى، چۈنكى سۆھبەت ۋاقتى ئەڭ ئۇزۇن ۋاقىتقا يەتتى (ئۇزۇنلۇقى {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى (ئۇزۇنلۇق {duration})","%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى (ئۇزۇنلۇق {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} مىھمان %n بىلەن بولغان تېلىفۇننى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration}) ","{actor} مىھمان %n بىلەن بولغان تېلىفۇننى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration}) "], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} بىلەن بولغان تېلېفون ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (ۋاقتى {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1} with بىلەن چاقىرىش ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} چاقىرىشنى {user1} بىلەن ئاخىرلاشتۇردى (ۋاقتى {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ۋە {user2} بىلەن چاقىرىش ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (داۋاملىشىش ۋاقتى {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} ۋە {user2} بىلەن چاقىرىش ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} چاقىرىشنى {user1} ۋە {user2} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}، {user2} ۋە {user3} بىلەن چاقىرىش ئاخىرلاشتى، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (داۋاملىشىش ۋاقتى {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1} ، {user2} ۋە {user3} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2} ۋە {user3} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "ئەڭ يۇقىرى چاقىرىش ۋاقتى (ۋاقتى {duration} ۋاقتى) غا يەتكەنلىكى ئۈچۈن {user1} ، {user2} ، {user3} ۋە {user4} بىلەن تېلېفون ئاخىرلاشتى.", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1} ، {user2} ، {user3} ۋە {user4} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2}, {user3} ۋە {user4} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى.", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "ئەڭ يۇقىرى چاقىرىش ۋاقتى (ۋاقتى {duration} ۋاقتى) غا يەتكەنلىكى ئۈچۈن {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفون ئاخىرلاشتى.", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن ئاخىرلاشتۇردى (ۋاقتى {duration})", + "Message of {user} in {conversation}" : "{user} نىڭ {conversation} دىكى ئۇچۇرى", + "Message of {user}" : "{user} نىڭ ئۇچۇرى", + "Message of a deleted user in {conversation}" : "{conversation} ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ ئۇچۇرى", + "Talk conversations" : "پاراڭلىشىش", + "Talk to %s" : "%s بىلەن پاراڭلىشىڭ", + "An error occurred. Please contact your administrator." : "خاتالىق كۆرۈلدى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Storage quota exceeded" : "ساقلاش نورمىسى ئېشىپ كەتتى", + "File not found" : "ھۆججەت تېپىلمىدى", + "File is not shared, or shared but not with the user" : "ھۆججەت ئورتاقلاشمايدۇ ، ھەمبەھىرلەنمەيدۇ ، ئەمما ئىشلەتكۈچى بىلەن ئورتاقلاشمايدۇ", + "No account available to delete." : "ئۆچۈرگىلى بولىدىغان ھېسابات يوق.", + "Poll" : "راي سىناش", + "Password needs to be set" : "پارول ئورنىتىلىشى كېرەك", + "Uploading the file failed" : "ھۆججەتنى چىقىرىش مەغلۇپ بولدى", + "No image file provided" : "رەسىم ھۆججىتى تەمىنلەنمىدى", + "File is too big" : "ھۆججەت بەك چوڭ", + "Invalid file provided" : "ئىناۋەتسىز ھۆججەت تەمىنلەندى", + "Invalid image" : "ئىناۋەتسىز رەسىم", + "Unknown filetype" : "نامەلۇم ھۆججەت شەكلى", + "Talk mentions" : "سۆھبەت تىلغا ئېلىنىدۇ", + "More conversations" : "تېخىمۇ كۆپ سۆھبەت", + "Say hi to your friends and colleagues!" : "دوستلىرىڭىز ۋە خىزمەتداشلىرىڭىزغا سالام!", + "No unread mentions" : "ئوقۇلمىغان تىلغا ئېلىنمايدۇ", + "Call in progress" : "چاقىرىش داۋاملىشىۋاتىدۇ", + "You were mentioned" : "سىز تىلغا ئېلىندى", + "Write to conversation" : "سۆھبەتكە يېزىڭ", + "Writes event information into a conversation of your choice" : "پائالىيەت ئۇچۇرىنى ئۆزىڭىز تاللىغان سۆھبەتكە يېزىدۇ", + "Missing email field in header line" : "ماۋزو قۇرىدا ئېلخەت ئورنى كەم", + "Following lines are invalid: %s" : "تۆۋەندىكى قۇرلار ئىناۋەتسىز: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s سىزنى سۆھبەت \"%2$s\" كە تەكلىپ قىلدى.", + "You were invited to conversation \"%s\"." : "سىز سۆھبەت \"%s\" كە تەكلىپ قىلىندىڭىز.", + "Conversation invitation" : "سۆھبەت تەكلىپنامىسى", + "Scheduled time" : "ۋاقىت ئورۇنلاشتۇرۇش", + "Description" : "چۈشەندۈرۈش", + "You can also dial-in via phone with the following details" : "تۆۋەندىكى تەپسىلاتلار بىلەن تېلېفون ئارقىلىق تېلېفون قىلالايسىز", + "Dial-in information" : "تېلېفون نومۇرى", + "Meeting ID" : "يىغىن كىملىكى", + "Your PIN" : "PIN", + "Click the button below to join the lobby now." : "ھازىر زالغا قوشۇلۇش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى چېكىڭ.", + "Click the link below to join the lobby now." : "ھازىر زالغا قوشۇلۇش ئۈچۈن تۆۋەندىكى ئۇلىنىشنى چېكىڭ.", + "Join lobby for \"%s\"" : "\"%s\" نىڭ زالىغا كىرىڭ", + "Click the button below to join the conversation now." : "ھازىر يىغىنغا قوشۇلۇش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى چېكىڭ.", + "Click the link below to join the conversation now." : "ھازىر يىغىنغا قوشۇلۇش ئۈچۈن تۆۋەندىكى ئۇلىنىشنى چېكىڭ.", + "Join \"%s\"" : "\"%s\" غا كىر", + "Meeting" : "يىغىن", + "Password request: %s" : "پارول تەلىپى:%s", + "Private conversation" : "شەخسىي سۆھبەت", + "Deleted user (%s)" : "ئۆچۈرۈلگەن ئىشلەتكۈچى (%s)", + "Failed to upload call recording" : "چاقىرىش خاتىرىسىنى يۈكلىيەلمىدى", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "خاتىرىلەش مۇلازىمىتىرى چاقىرىش {call} خاتىرىسىنى يۈكلىيەلمىدى. مەمۇرىي ئورگان بىلەن ئالاقىلىشىڭ.", + "Share to chat" : "پاراڭلىشىڭ", + "Dismiss notification" : "ئۇقتۇرۇشنى ئەمەلدىن قالدۇرۇش", + "Call recording now available" : "ھازىر تېلېفون خاتىرىسىنى ئىشلەتكىلى بولىدۇ", + "The recording for the call in {call} was uploaded to {file}." : "{call} in دىكى چاقىرىشنىڭ خاتىرىسى {file} گە يۈكلەندى.", + "Transcript now available" : "ھازىر تېكىست نۇسخىسى بار", + "The transcript for the call in {call} was uploaded to {file}." : "{call} in دىكى چاقىرىشنىڭ خاتىرىسى {file} گە يۈكلەندى.", + "Failed to transcript call recording" : "تېلېفون خاتىرىسىنى خاتىرىلەش مەغلۇب بولدى", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "مۇلازىمېتىر {file} in دىكى چاقىرىش ئۈچۈن {call} دىكى خاتىرىسىنى خاتىرىلىيەلمىدى. مەمۇرىي ئورگان بىلەن ئالاقىلىشىڭ.", + "Call summary now available" : "چاقىرىش خۇلاسىسى ھازىر تەييار", + "The summary for the call in {call} was uploaded to {file}." : "{call} دىكى چاقىرىشنىڭ قىسقىچە مەزمۇنى {file} غا يۈكلەندى.", + "Failed to summarize call recording" : "تېلېفون خاتىرىسىنى خۇلاسىلەش مەغلۇپ بولدى", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "سېرۋېر {call} دىكى چاقىرىش ئۈچۈن {file} دىكى خاتىرىنى خۇلاسىلىيەلمىدى. باشقۇرۇش بىلەن ئالاقىلىشىڭ.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} سىزنى {remoteServer} دىكى {roomName} غا قاتنىشىشقا تەكلىپ قىلدى", + "Accept" : "قوبۇل قىلىڭ", + "Decline" : "رەت قىلىڭ", + "{user1} invited you to a federated conversation" : "{user1} سىزنى فېدېراتسىيە سۆھبەتكە تەكلىپ قىلدى", + "Someone reacted" : "بىرەيلەن ئىنكاس بىلدۈردى", + "New message" : "يېڭى ئۇچۇر", + "Reminder" : "ئەسكەرتىش", + "Someone mentioned you" : "بىرەيلەن سىزنى تىلغا ئالدى", + "Notification" : "ئۇقتۇرۇش", + "Someone reacted in a private conversation" : "بىرەيلەن شەخسىي سۆھبەتتە ئىنكاس بىلدۈردى", + "You received a message in a private conversation" : "سىز بىر شەخسىي سۆھبەتتە ئۇچۇر تاپشۇرۋالدىڭىز", + "Reminder in a private conversation" : "بىر شەخسىي سۆھبەتتىكى ئەسكەرتمە", + "Someone mentioned you in a private conversation" : "بىرەيلەن سىزنى شەخسىي سۆھبەتتە تىلغا ئالدى", + "Notification in a private conversation" : "بىر شەخسىي سۆھبەت ئۇختۇرۇشى", + "Reminder: You in {call}" : "ئەسكەرتىش: سىز {call}", + "Reminder: {user} in {call}" : "ئەسكەرتىش: {user} {call}", + "Reminder: Deleted user in {call}" : "ئەسكەرتىش: {call} in دىكى ئىشلەتكۈچى ئۆچۈرۈلدى", + "Reminder: {guest} (guest) in {call}" : "ئەسكەرتىش: {guest} دىكى {call} (مېھمان)", + "Reminder: Guest in {call}" : "ئەسكەرتىش: {call} in دىكى مېھمان", + "{user} reacted with {reaction}" : "{user} {reaction} بىلەن ئىنكاس قايتۇردى", + "{user} reacted with {reaction} in {call}" : "{user} چاقىرىش {call}تا {reaction} بىلەن ئىنكاس قايتۇردى", + "Deleted user reacted with {reaction} in {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى {reaction} دىكى {call} بىلەن ئىنكاس قايتۇردى", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (مېھمان) {reaction} {call} بىلەن ئىنكاس قايتۇردى", + "Guest reacted with {reaction} in {call}" : "مېھمان {reaction} دىكى {call} بىلەن ئىنكاس قايتۇردى", + "{user} in {call}" : "{user} {call}", + "Deleted user in {call}" : "{call} in دىكى ئىشلەتكۈچى ئۆچۈرۈلدى", + "{guest} (guest) in {call}" : "{call} دىكى {guest} (مېھمان)", + "Guest in {call}" : "{call} دىكى مېھمان", + "{user} sent you a private message" : "{user} سىزگە شەخسىي ئۇچۇر ئەۋەتتى", + "{user} sent a message in conversation {call}" : "{user} سۆھبەتتە ئۇچۇر ئەۋەتتى {call}", + "A deleted user sent a message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} غا ئۇچۇر ئەۋەتتى", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە ئۇچۇر ئەۋەتتى {call}", + "A guest sent a message in conversation {call}" : "بىر مېھمان سۆھبەتتە {call} ئۇچۇر ئەۋەتتى", + "{user} replied to your private message" : "{user} شەخسىي ئۇچۇرىڭىزغا جاۋاب بەردى", + "{user} replied to your message in conversation {call}" : "{user} سۆھبەتتىكى ئۇچۇرىڭىزغا {call} جاۋاب بەردى", + "A deleted user replied to your message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} ئۇچۇرىڭىزغا جاۋاب بەردى", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (مېھمان) سۆھبەتتىكى ئۇچۇرىڭىزغا {call} دەپ جاۋاب بەردى", + "A guest replied to your message in conversation {call}" : "بىر مېھمان پاراڭلىشىش ئۇچۇرىڭىزغا {call} دەپ جاۋاب بەردى", + "Reminder: You in private conversation {call}" : "ئەسكەرتىش: سىز شەخسىي سۆھبەتتە {call}", + "Reminder: A deleted user in private conversation {call}" : "ئەسكەرتىش: شەخسىي سۆھبەتتە ئۆچۈرۈلگەن ئىشلەتكۈچى {call}", + "Reminder: {user} in private conversation" : "ئەسكەرتىش: شەخسىي سۆھبەتتە {user}", + "Reminder: You in conversation {call}" : "ئەسكەرتىش: سىز سۆھبەتتە {call}", + "Reminder: {user} in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە {user} تېلېفون {call}", + "Reminder: A deleted user in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە ئۆچۈرۈلگەن ئىشلەتكۈچى {call}", + "Reminder: {guest} (guest) in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە {guest} (مېھمان) {call}", + "Reminder: A guest in conversation {call}" : "ئەسكەرتىش: سۆھبەتتىكى مېھمان {call}", + "{user} reacted with {reaction} to your private message" : "{user} شەخسىي ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} پاراڭدىكى ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {reaction} ئۇچۇرىڭىزغا {call} بىلەن ئىنكاس قايتۇردى", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (مېھمان) پاراڭدىكى ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "بىر مېھمان پاراڭلىشىش {reaction} ئۇچۇرىڭىزغا {call} بىلەن ئىنكاس قايتۇردى", + "{user} mentioned you in a private conversation" : "{user} شەخسىي سۆھبەتتە سىزنى تىلغا ئالدى", + "{user} mentioned group {group} in conversation {call}" : "{user} تىلغا ئېلىنغان گۇرۇپپا {group} پاراڭلىشىش {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} بىر سۆھبەت {call} دە ئەتىرەت {team} نى تىلغا ئالدى", + "{user} mentioned everyone in conversation {call}" : "{user} سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "{user} mentioned you in conversation {call}" : "{user} سۆھبەتتە سىزنى تىلغا ئالدى {call}", + "A deleted user mentioned group {group} in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى {call} سۆھبەتتە {group} گۇرۇپپىسىنى تىلغا ئالدى", + "A deleted user mentioned team {team} in conversation {call}" : "بىر ئۆچۈرۋېتىلگەن ئىشلەتكۈچى ئەتىرەت {team} نى سۆھبەت {call} دە تىلغا ئالدى", + "A deleted user mentioned everyone in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} ھەممەيلەننى تىلغا ئالدى", + "A deleted user mentioned you in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى سۆھبەتتە {call} دە تىلغا ئالدى", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە گۇرۇپپا {group} تىلغا ئېلىنغان {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (مىھمان) سۆھبەت {call} دە ئەتىرەت {team} نى تىلغا ئالدى", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (مېھمان) سىزنى سۆھبەتتە تىلغا ئالدى {call}", + "A guest mentioned group {group} in conversation {call}" : "بىر مېھمان سۆھبەتتە {group} گۇرۇپپا {call} تىلغا ئالدى", + "A guest mentioned team {team} in conversation {call}" : "بىر مىھمان {call} سۆھبەتتە ئەتىرەت {team} نى تىلغا ئالدى", + "A guest mentioned everyone in conversation {call}" : "بىر مېھمان سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "A guest mentioned you in conversation {call}" : "بىر مېھمان سىزنى سۆھبەتتە تىلغا ئالدى {call}", + "View message" : "ئۇچۇرنى كۆرۈش", + "Dismiss reminder" : "ئەسكەرتىشنى ئەمەلدىن قالدۇرۇڭ", + "View chat" : "پاراڭنى كۆرۈش", + "{user} invited you to a group conversation: {call}" : "{user} سىزنى گۇرۇپپا سۆھبىتىگە تەكلىپ قىلدى: {call}", + "Join call" : "چاقىرىشقا قوشۇلۇڭ", + "Answer call" : "جاۋاب تېلېفونى", + "{user} would like to talk with you" : "{user} سىز بىلەن پاراڭلىشىشنى خالايدۇ", + "Call back" : "تېلېفون قىلىڭ", + "You missed a call from {user}" : "{user} نىڭ تېلېفونىنى قولدىن بېرىپ قويدىڭىز", + "Accept call" : "چاقىرىشنى قۇبۇللا", + "Incoming phone call from {call}" : "{call} دىن كەلگەن تېلىفۇن", + "You missed a phone call from {call}" : "{call} دىن كەلگەن تېلىفۇن چاقىرىشىنى ئۆتكۈزۋەتتىڭىز", + "A group call has started in {call}" : "گۇرۇپپا چاقىرىش {call} دا باشلاندى", + "You missed a group call in {call}" : "{call} in دىكى گۇرۇپپا چاقىرىشنى قولدىن بېرىپ قويدىڭىز", + "{email} is requesting the password to access {file}" : "{email} پارول {file} كىرىشنى تەلەپ قىلىدۇ", + "{email} tried to request the password to access {file}" : "{email} پارولنى {file} كىرىشنى تەلەپ قىلدى", + "Someone is requesting the password to access {file}" : "بەزىلەر پارولنى {file} كىرىشنى تەلەپ قىلىدۇ", + "Someone tried to request the password to access {file}" : "بەزىلەر پارولنى {file} كىرىشنى تەلەپ قىلماقچى بولدى", + "Open settings" : "تەڭشەكلەرنى ئېچىڭ", + "Hosted signaling server added" : "ساھىبجامال سىگنال مۇلازىمىتىرى قوشۇلدى", + "The hosted signaling server is now configured and will be used." : "ساھىبخانلىق سىگنال مۇلازىمىتىرى ھازىر تەڭشەلدى ۋە ئىشلىتىلىدۇ.", + "Hosted signaling server removed" : "ساھىبجامال سىگنال مۇلازىمىتىرى ئۆچۈرۈلدى", + "The hosted signaling server was removed and will not be used anymore." : "ساھىبخانلىق سىگنال مۇلازىمېتىرى چىقىرىۋېتىلدى ، ئەمدى ئىشلىتىلمەيدۇ.", + "Hosted signaling server changed" : "ساھىبجامال سىگنال مۇلازىمىتىرى ئۆزگەردى", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "ساھىبخانلىق سىگنال مۇلازىمىتىرى ھالىتىنى «{oldstatus}» دىن «{newstatus}» غا ئۆزگەرتتى.", + "pending" : "ساقلىنىۋاتىدۇ", + "active" : "ئاكتىپ", + "expired" : "ۋاقتى توشتى", + "blocked" : "توسۇلۇپ قالدى", + "error" : "خاتالىق", + "The certificate of {host} expires in {days} days" : "{host} گۇۋاھنامىسى {days} كۈندە توشىدۇ", + "The certificate of {host} expired" : "{host} گۇۋاھنامىسى توشتى", + "Contact via Talk" : "سۆھبەت ئارقىلىق ئالاقىلىشىڭ", + "Open Talk" : "ئوچۇق سۆھبەت", + "Default" : "كۆڭۈلدىكى", + "Presentation" : "لېكسىيە", + "Webinar" : "تور سۆھبىتى", + "Conversations" : "سۆھبەت", + "Messages in current conversation" : "نۆۋەتتىكى سۆھبەتتىكى ئۇچۇرلار", + "{user}" : "{user}", + "Messages" : "ئۇچۇرلار", + "{user} in {conversation}" : "{conversation} دىكى {user}", + "Messages in other conversations" : "باشقا سۆھبەتتىكى ئۇچۇرلار", + "One-to-one rooms always need to show the other users avatar" : "بىر ئۆيدىن باشقا ئۆيلەر ھەمىشە باشقا ئىشلەتكۈچىلەرنىڭ باش سۈرىتىنى كۆرسىتىشى كېرەك", + "Invalid emoji character" : "Emoji خاراكتېرى ئىناۋەتسىز", + "Invalid background color" : "تەگلىك رەڭگى ئىناۋەتسىز", + "Avatar image is not square" : "باش سۈرىتى چاسا ئەمەس", + "Room {number}" : "ياتاق {number}", + "Other" : "باشقا", + "Failed to request trial because the trial server is unreachable. Please try again later." : "سىناق مۇلازىمېتىرغا يەتكىلى بولمىغاچقا سىناق قىلىشنى تەلەپ قىلمىدى. كېيىن قايتا سىناڭ.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "بۇ مىسالنىڭ دەلىللىنىشىدە مەسىلە بار. بەلكىم ئۇنىڭ URL نى دەلىللەش ئۈچۈن سىرتتىن يەتكىلى بولمايدۇ.", + "Something unexpected happened." : "ئويلىمىغان يەردىن بىر ئىش يۈز بەردى.", + "The URL is invalid." : "URL ئىناۋەتسىز.", + "An HTTPS URL is required." : "HTTPS URL تەلەپ قىلىنىدۇ.", + "The email address is invalid." : "ئېلېكترونلۇق خەت ئادرېسى ئىناۋەتسىز.", + "The language is invalid." : "تىل ئىناۋەتسىز.", + "The country is invalid." : "دۆلەت ئىناۋەتسىز.", + "There is a problem with the request of the trial. Please check your logs for further information." : "سوتنىڭ تەلىپىدە مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "Too many requests are send from your servers address. Please try again later." : "بەك كۆپ تەلەپلەر مۇلازىمېتىر ئادرېسىڭىزدىن ئەۋەتىلىدۇ. كېيىن قايتا سىناڭ.", + "There is already a trial registered for this Nextcloud instance." : "بۇ Nextcloud مىسالى ئۈچۈن ئاللىبۇرۇن سىناق قىلىنغان.", + "Something unexpected happened. Please try again later." : "ئويلىمىغان يەردىن بىر ئىش يۈز بەردى. كېيىن قايتا سىناڭ.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن سىناق قىلىشنى تەلەپ قىلالمىدى. كېيىن قايتا سىناڭ.", + "Trial requested but failed to get account information. Please check back later." : "سىناق تەلەپ قىلىندى ، ئەمما ھېسابات ئۇچۇرىغا ئېرىشەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "بۇ تەلەپنىڭ دەلىللىنىشىدە مەسىلە بار. بەلكىم ئۇنىڭ URL نى دەلىللەش ئۈچۈن سىرتتىن يەتكىلى بولمايدۇ.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن ھېسابات ئۇچۇرلىرىنى ئالالمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with fetching the account information. Please check your logs for further information." : "ھېسابات ئۇچۇرلىرىنى ئېلىشتا مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "There is no such account registered." : "بۇ يەردە ھېسابات يوق.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "سىناق مۇلازىمېتىرىغا يەتكىلى بولمىغاچقا ھېسابات ئۇچۇرلىرىنى ئالالمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Deleting the hosted signaling server account failed. Please check back later." : "ساھىبجامال سىگنال مۇلازىمېتىر ھېساباتىنى ئۆچۈرۈش مەغلۇب بولدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن ھېساباتنى ئۆچۈرەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with deleting the account. Please check your logs for further information." : "ھېساباتنى ئۆچۈرۈشتە مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "Too many requests are sent from your servers address. Please try again later." : "مۇلازىمېتىر ئادرېسىڭىزدىن بەك كۆپ تەلەپ ئەۋەتىلدى. كېيىن قايتا سىناڭ.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "سىناق مۇلازىمېتىرغا يەتكىلى بولمىغاچقا ، ھېساباتنى ئۆچۈرەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Note to self" : "ئۆزىڭىزگە دىققەت قىلىڭ", + "A place for your private notes, thoughts and ideas" : "شەخسىي خاتىرىلىرىڭىز ، ئوي-پىكىرلىرىڭىز", + "Transcript is AI generated and may contain mistakes" : "تېكىستنى AI يازغان ھەمدە خاتالىقلار مەۋجۇت بولىشى مۇمكىن", + "Summary is AI generated and may contain mistakes" : "خۇلاسىنى AI يازغان ھەمدە خاتالىقلار بولىشى مۇمكىن", + "Let's get started!" : "باشلايلى!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** بىخەتەر، ئۆز-ئۆزىنى باشقۇرىدىغان ئالاقە سۇپىسى بولۇپ، Nextcloud ئېكولوگىيە سىستېمىسى بىلەن مۇكەممەل بىر گەۋدىلىشىدۇ.\n\n#### Nextcloud Talk نىڭ ئاساسلىق ئالاھىدىلىكلىرى:\n\n* شەخسىي ۋە گۇرۇپپا سۆھبەتلىرىدە پاراڭلىشىش ۋە ئۇچۇر يوللاش\n* ئاۋازلىق ۋە سىنلىق تېلېفون قىلىش\n* ھۆججەت ئورتاقلىشىش ۋە باشقا Nextcloud قوللىنىشچان پروگراممىلىرى بىلەن بىر گەۋدىلەشتۈرۈش\n* خاسلاشتۇرغىلى بولىدىغان سۆھبەت تەڭشەكلىرى، باشقۇرۇش ۋە مەخپىيەتلىك كونتروللىرى\n* تور، ئۈستەل يۈزى ۋە يانفون (iOS ۋە Android)\n* شەخسىي ۋە بىخەتەر ئالاقە\n\n[ئىشلەتكۈچى ھۆججىتى] دىن تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ (https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Talk غا خۇش كەپسىز\n\nNextcloud Talk Nextcloud بىلەن بىر گەۋدىلەشكەن شەخسىي ۋە كۈچلۈك ئۇچۇر يوللاش ئەپ دېتالى. شەخسىي ياكى گۇرۇپپا سۆھبەتلىرىدە پاراڭلىشىڭ، ئاۋازلىق ۋە سىنلىق تېلېفونلار ئارقىلىق ھەمكارلىشىڭ، تور سېمىنارلىرى ۋە پائالىيەتلەرنى تەشكىللەڭ، سۆھبەتلىرىڭىزنى خاسلاشتۇرۇڭ ۋە باشقا نۇرغۇن ئىشلارنى قىلىڭ.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 مول مەزمۇنلۇق ئۇچۇرلار يارىتىش ئۈچۈن تېكىستلەرنى فورماتلاڭ\n\nNextcloud Talk تا، سىز Markdown سىنتاكسىسىنى ئىشلىتىپ ئۇچۇرلىرىڭىزنى فورماتلىيالايسىز. مەسىلەن، **قالىن** ياكى *قىيسىق* فورماتىنى قوللىنىڭ، ياكى 'كود سۈپىتىدە تېكىستلەرنى بەلگىلەڭ'. سىز ھەتتا جەدۋەللەرنى قۇرۇپ، تېكىستىڭىزگە ماۋزۇ قوشالايسىز.\n\nخاتالىقنى تۈزىتىش ياكى فورماتنى ئۆزگەرتىش كېرەكمۇ؟ ئۇچۇر تىزىملىكىدىكى «خەۋەرنى تەھرىرلەش» نى چېكىپ ئۇچۇرىڭىزنى تەھرىرلەڭ.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 قوشۇمچە ھۆججەتلەر ۋە ئۇلىنىشلارنى قوشۇڭ\n\n«+» كۇنۇپكىسى ئارقىلىق Nextcloud مەركىزىڭىزدىكى ھۆججەتلەرنى قوشۇڭ. ھۆججەتلەر ۋە ھەر خىل Nextcloud قوللىنىشچان پروگراممىلىرىدىكى نەرسىلەرنى ئورتاقلىشىڭ. بەزى قوللىنىشچان پروگراممىلار ھەتتا ئۆز-ئارا تەسىر كۆرسىتىدىغان كىچىك پروگراممىلارنى قوللايدۇ، مەسىلەن، تېكىست قوللىنىشچان پروگراممىسى.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 سۆھبەتلەرنىڭ داۋاملىشىشىغا يول قويۇڭ: ئىشلەتكۈچىلەرنى تىلغا ئېلىڭ، ئۇچۇرلارغا ئىنكاس قايتۇرۇڭ ۋە باشقىلار\n\nسىز %s ئارقىلىق سۆھبەتتىكى ھەممەيلەننى تىلغا ئالالايسىز ياكى «@» دەپ يېزىپ تىزىملىكتىن ئۇلارنىڭ ئىسمىنى تاللاپ مەلۇم قاتناشقۇچىلارنى تىلغا ئالالايسىز.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "سىز ئۇچۇرلارنىڭ جاۋابىنى قايتۇرالايسىز، ئۇلارنى باشقا پاراڭلىشىش ۋە كىشىلەرگە يوللىيالايسىز ياكى ئۇچۇر مەزمۇنىنى كۆچۈرۈشىڭىز مۇمكىن.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ ئەقلىي تاللىغۇچ بىلەن تېخىمۇ كۆپ ئىشلارنى قىلىڭ\n\nپەقەت \"/\" بەلگىسىنى كىرگۈزۈڭ ياكى \"+\" تىزىملىكىگە كىرىپ، ئەقلىي تاللىغۇچنى ئېچىڭ، بۇ يەردە ئۇچۇرلىرىڭىزغا ھەر خىل مەزمۇنلارنى قوشالايسىز. سىز ئەقلىي تاللىغۇچنى Nextcloud ئەپلىرى، GIFلار، خەرىتە ئورۇنلىرى، سۈنئىي ئەقىل ئارقىلىق ھاسىل قىلىنغان مەزمۇنلار ۋە باشقا نۇرغۇن نەرسىلەردىن تۈرلەرنى قوشالايدىغان قىلىپ تەڭشىيەلەيسىز.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ سۆھبەت تەڭشەكلىرىنى باشقۇرۇش\n\nسۆھبەت تىزىملىكىدە، سىز سۆھبەتلىرىڭىزنى باشقۇرۇش ئۈچۈن ھەر خىل تەڭشەكلەرگە كىرەلەيسىز، مەسىلەن:\n* سۆھبەت ئۇچۇرلىرىنى تەھرىرلەش\n* ئۇقتۇرۇشلارنى باشقۇرۇش\n* نۇرغۇن باشقۇرۇش قائىدىلىرىنى قوللىنىش\n* كىرىش ۋە بىخەتەرلىكنى تەڭشەش\n* روبوتلارنى قوزغىتىش\n* ۋە باشقىلار!", + "Andorra" : "ئاندوررا", + "United Arab Emirates" : "ئەرەب بىرلەشمە خەلىپىلىكى", + "Afghanistan" : "ئافغانىستان", + "Antigua and Barbuda" : "ئانتىگۇئا ۋە باربۇدا", + "Anguilla" : "Anguilla", + "Albania" : "ئالبانىيە", + "Armenia" : "ئەرمىنىيە", + "Angola" : "ئانگولا", + "Antarctica" : "ئانتاركتىكا", + "Argentina" : "ئارگېنتىنا", + "American Samoa" : "American Samoa", + "Austria" : "ئاۋسترىيە", + "Australia" : "ئاۋسترالىيە", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "ئەزەربەيجان", + "Bosnia and Herzegovina" : "بوسنىيە-گېرتسېگوۋىنا", + "Barbados" : "باربادوس", + "Bangladesh" : "بېنگال", + "Belgium" : "بېلگىيە", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "بۇلغارىيە", + "Bahrain" : "بەھرەيىن", + "Burundi" : "بۇرۇندى", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "بېرمۇدا", + "Brunei Darussalam" : "برۇنېي دارۇسسالام", + "Bolivia, Plurinational State of" : "بولىۋىيە ، كۆپ دۆلەت", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "بىرازىلىيە", + "Bahamas" : "باھاما", + "Bhutan" : "بۇتان", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "بوتسۋانا", + "Belarus" : "بېلورۇسىيە", + "Belize" : "Belize", + "Canada" : "كانادا", + "Cocos (Keeling) Islands" : "كوكوس (كېلىڭ) ئارىلى", + "Congo, the Democratic Republic of the" : "كونگو ، دېموكراتىك جۇمھۇرىيىتى", + "Central African Republic" : "ئوتتۇرا ئافرىقا جۇمھۇرىيىتى", + "Congo" : "كونگو", + "Switzerland" : "شىۋىتسارىيە", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "كۇك تاقىم ئاراللىرى", + "Chile" : "چىلى", + "Cameroon" : "كامېرون", + "China" : "جۇڭگو", + "Colombia" : "كولۇمبىيە", + "Costa Rica" : "كوستارىكا", + "Cuba" : "كۇبا", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "روژدېستۋو ئارىلى", + "Cyprus" : "سىپرۇس", + "Czechia" : "چېخ", + "Germany" : "گىرمانىيە", + "Djibouti" : "جىبۇتى", + "Denmark" : "دانىيە", + "Dominica" : "Dominica", + "Dominican Republic" : "دومىنىكا جۇمھۇرىيىتى", + "Algeria" : "ئالجىرىيە", + "Ecuador" : "ئېكۋادور", + "Estonia" : "ئېستونىيە", + "Egypt" : "مىسىر", + "Western Sahara" : "غەربىي سەھرايى كەبىر", + "Eritrea" : "Eritrea", + "Spain" : "ئىسپانىيە", + "Ethiopia" : "ئېفىيوپىيە", + "Finland" : "فىنلاندىيە", + "Fiji" : "فىجى", + "Falkland Islands (Malvinas)" : "فالكلاند ئارىلى (مالۋىناس)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "فارو ئارىلى", + "France" : "فرانسىيە", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "بۈيۈك بىرىتانىيە ۋە شىمالىي ئىرېلاندىيە", + "Grenada" : "Grenada", + "Georgia" : "گرۇزىيە", + "French Guiana" : "فرانسىيە گۋىزنىيسى", + "Guernsey" : "Guernsey", + "Ghana" : "گانا", + "Gibraltar" : "جىبرالتار", + "Greenland" : "Greenland", + "Gambia" : "گامبىيە", + "Guinea" : "گۋىنىيە", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "ئېكۋاتور گۋىنىيىسى", + "Greece" : "گرېتسىيە", + "South Georgia and the South Sandwich Islands" : "جەنۇبىي گرۇزىيە ۋە جەنۇبىي ساندۋىچ ئارىلى", + "Guatemala" : "گۋاتېمالا", + "Guam" : "گۇۋام", + "Guinea-Bissau" : "گۋىنىيە-بىسساۋ", + "Guyana" : "Guyana", + "Hong Kong" : "شياڭگاڭ", + "Heard Island and McDonald Islands" : "خارد ئارىلى ۋە ماكدونالد ئارىلى", + "Honduras" : "خوندۇراس", + "Croatia" : "كىرودىيە", + "Haiti" : "ھايتى", + "Hungary" : "ۋېنگىرىيە", + "Indonesia" : "ھىندونېزىيە", + "Ireland" : "ئىرېلاندىيە", + "Israel" : "ئىسرائىلىيە", + "Isle of Man" : "Isle of Man", + "India" : "ھىندىستان", + "British Indian Ocean Territory" : "ئەنگىلىيە ھىندى ئوكيان رايونى", + "Iraq" : "ئىراق", + "Iran, Islamic Republic of" : "ئىران ، ئىسلام جۇمھۇرىيىتى", + "Iceland" : "ئىسلاندىيە", + "Italy" : "ئىتالىيە", + "Jersey" : "Jersey", + "Jamaica" : "يامايكا", + "Jordan" : "ئىئوردانىيە", + "Japan" : "ياپۇنىيە", + "Kenya" : "كېنىيە", + "Kyrgyzstan" : "قىرغىزىستان", + "Cambodia" : "كامبودژا", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "كورېيە ، دېموكراتىك خەلق جۇمھۇرىيىتى", + "Korea, Republic of" : "كورېيە جۇمھۇرىيىتى", + "Kuwait" : "كۇۋەيت", + "Cayman Islands" : "كايمان ئارىلى", + "Kazakhstan" : "قازاقىستان", + "Lao People's Democratic Republic" : "لائوس خەلق دېموكراتىك جۇمھۇرىيىتى", + "Lebanon" : "لىۋان", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "سىرىلانكا", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "لىتۋا", + "Luxembourg" : "لىيۇكسېمبۇرگ", + "Latvia" : "لاتىۋىيە", + "Libya" : "لىۋىيە", + "Morocco" : "ماراكەش", + "Monaco" : "موناكو", + "Moldova, Republic of" : "مولدوۋا ، جۇمھۇرىيەت", + "Montenegro" : "قاراتاغ", + "Saint Martin (French part)" : "سانت مارتىن (فىرانسۇزچە قىسمى)", + "Madagascar" : "ماداغاسقار", + "Marshall Islands" : "مارشال تاقىم ئاراللىرى", + "North Macedonia" : "شىمالىي ماكېدونىيە", + "Mali" : "مالى", + "Myanmar" : "بېرما", + "Mongolia" : "موڭغۇلىيە", + "Macao" : "ئاۋمېن", + "Northern Mariana Islands" : "شىمالىي مارىئانا ئارىلى", + "Martinique" : "Martinique", + "Mauritania" : "ماۋرىتانىيە", + "Montserrat" : "Montserrat", + "Malta" : "مالتا", + "Mauritius" : "ماۋرىتىئۇس", + "Maldives" : "مالدىۋى", + "Malawi" : "مالاۋى", + "Mexico" : "مىكسىكا", + "Malaysia" : "مالايسىيا", + "Mozambique" : "موزامبىك", + "Namibia" : "نامبىيە", + "New Caledonia" : "يېڭى كالېدونىيە", + "Niger" : "Niger", + "Norfolk Island" : "نورفولك ئارىلى", + "Nigeria" : "نىگېرىيە", + "Nicaragua" : "نىكاراگۇئا", + "Netherlands" : "گوللاندىيە", + "Norway" : "نورۋېگىيە", + "Nepal" : "نېپال", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "يېڭى زېلاندىيە", + "Oman" : "ئومان", + "Panama" : "پاناما", + "Peru" : "پېرۇ", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "پاپۇئا يېڭى گۋىنىيىسى", + "Philippines" : "فىلىپپىن", + "Pakistan" : "پاكىستان", + "Poland" : "پولشا", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "پورتو رىكو", + "Palestine, State of" : "پەلەستىن ، شىتات", + "Portugal" : "پورتۇگالىيە", + "Palau" : "Palau", + "Paraguay" : "پاراگۋاي", + "Qatar" : "قاتار", + "Réunion" : "Réunion", + "Romania" : "رۇمىنىيە", + "Serbia" : "سېربىيە", + "Russian Federation" : "رۇسىيە فېدېراتسىيەسى", + "Rwanda" : "رىۋاندا", + "Saudi Arabia" : "سەئۇدى ئەرەبىستان", + "Solomon Islands" : "سۇلايمان تاقىم ئاراللىرى", + "Seychelles" : "Seychelles", + "Sudan" : "سۇدان", + "Sweden" : "شىۋىتسىيە", + "Singapore" : "سىنگاپور", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "سىلوۋېنىيە", + "Svalbard and Jan Mayen" : "سۋالبارد ۋە يان مايېن", + "Slovakia" : "سلوۋاكىيە", + "Sierra Leone" : "سېررالېئون", + "San Marino" : "سان مارىنو", + "Senegal" : "سېنېگال", + "Somalia" : "سومالى", + "Suriname" : "Suriname", + "South Sudan" : "جەنۇبىي سۇدان", + "Sao Tome and Principe" : "سان توم ۋە پرىنسىپ", + "El Salvador" : "سالۋادور", + "Sint Maarten (Dutch part)" : "سىنت مارتىن (گوللاندىيە قىسمى)", + "Syrian Arab Republic" : "سۈرىيە ئەرەب جۇمھۇرىيىتى", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "تۈركلەر ۋە كايكوس ئارىلى", + "Chad" : "چاد", + "French Southern Territories" : "فرانسىيەنىڭ جەنۇبىدىكى رايونلار", + "Togo" : "توگو", + "Thailand" : "تايلاند", + "Tajikistan" : "تاجىكىستان", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "تۈركمەنىستان", + "Tunisia" : "تۇنىس", + "Tonga" : "تونگا", + "Turkey" : "تۈركىيە", + "Trinidad and Tobago" : "تىرىنىداد ۋە توباگو", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "تەيۋەن ، جۇڭگو ئۆلكىسى", + "Tanzania, United Republic of" : "تانزانىيە ، بىرلەشمە جۇمھۇرىيىتى", + "Ukraine" : "ئۇكرائىنا", + "Uganda" : "ئۇگاندا", + "United States Minor Outlying Islands" : "ئامېرىكا كىچىك تاشقى ئاراللار", + "United States of America" : "ئامېرىكا قوشما شتاتلىرى", + "Uruguay" : "ئۇرۇگۋاي", + "Uzbekistan" : "ئۆزبېكىستان", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "ئەۋلىيا ۋىنسېنت ۋە گرېنادىنلار", + "Venezuela, Bolivarian Republic of" : "ۋېنېزۇئېلا ، بولىۋىيە جۇمھۇرىيىتى", + "Virgin Islands, British" : "ۋىرگىن تاقىم ئارىلى ، ئەنگىلىيە", + "Virgin Islands, U.S." : "ۋىرگىنىيە تاقىم ئارىلى ، ئامېرىكا", + "Viet Nam" : "Vietnam Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "ۋاللىس ۋە فۇتۇنا", + "Samoa" : "ساموئا", + "Yemen" : "يەمەن", + "Mayotte" : "مايوت", + "South Africa" : "جەنۇبى ئافرىقا", + "Zambia" : "زامبىيە", + "Zimbabwe" : "زىمبابۋې", + "Background blur" : "تەگلىك تۇتۇق", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM يۈكلەشنى قوللىمىدى. تور مۇلازىمېتىرىڭىز `.wasm` ھۆججىتىگە مۇلازىمەت قىلسا قولدا تەكشۈرۈپ بېقىڭ.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "تور مۇلازىمېتىرىڭىز `.wasm` ھۆججىتىنى يەتكۈزۈش ئۈچۈن مۇۋاپىق تەڭشەلمىدى. بۇ ئادەتتە Nginx سەپلىمىسىدىكى مەسىلە. تەگلىك تۇتۇقلىقى ئۈچۈن «.wasm» ھۆججىتىنى يەتكۈزۈش ئۈچۈنمۇ تەڭشەش كېرەك. Nginx سەپلىمىسىنى ھۆججەتلىرىمىزدىكى تەۋسىيە قىلىنغان سەپلىمىگە سېلىشتۇرۇڭ.", + "Talk configuration values" : "پاراڭ سەپلىمە قىممىتى", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "چاقىرىش ۋاقتىنى زورلاش پەقەت سىستېما cron بىلەنلا قوللىنىدۇ. سىستېما كروننى قوزغىتىڭ ياكى «max_call_duration» سەپلىمىسىنى ئۆچۈرۈڭ.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "كىچىك `max_call_duration` قىممىتى (نۆۋەتتە %d قىلىپ تەڭشەلدى) تېخنىكىلىق چەكلىمىلەر سەۋەبىدىن ئىجرا قىلىنمايدۇ. تەگلىك خىزمىتى ھەر 5 مىنۇتتا بىر قېتىم ئىجرا قىلىنىدۇ ، شۇڭا ئۆزىڭىزنىڭ خەتىرىگە ئاساسەن ئىشلىتىڭ.", + "Federation" : "فېدېراتسىيە", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "سۆھبەت فېدېراتسىيەسى قوزغىتىلغاندا «memcache.locking» نى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "High-performance backend" : "يۇقىرى ئىقتىدارلىق ئارقا سەپ", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى تەڭشىلىنمىدى - Nextcloud سۆھبەتنى يۇقىرى ئىقتىدارلىق ئارقا ئۇچىسىز ئىجرا قىلىۋاتىدۇ، پەقەت ناھايىتى كىچىك تېلېفونلار ئۈچۈنلا ماسلاشتۇرۇلىدۇ (ئەڭ كۆپ بولغاندا 2-3 قاتناشقۇچى). كۆپ قاتناشقۇچىلىق تېلېفونلارنىڭ راۋان ئىشلىشىگە كاپالەتلىك قىلىش ئۈچۈن يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى تەڭشەڭ.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "يۇقىرى ئىقتىدارلىق ئارقا سۇپىدىكى «سۆھبەت_كلاستېر» ھالىتىنى ئىجرا قىلىش ۋاقتى ئۆتكەن ، كېيىنكى نەشرىدە ئەمدى قوللىمايدۇ. يۇقىرى ئىقتىدارلىق ئارقا سۇپى بۈگۈنكى كۈندە ھەقىقىي توپلاشنى قوللايدۇ ، ئۇنىڭ ئورنىغا ئىشلىتىشكە بولىدۇ.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "كۆپ ئىقتىدارلىق يۇقىرى ئىقتىدارلىق ئارقا بەلگىنى ئېنىقلاش ۋاقتى ئۆتكەن ، كېيىنكى نەشرىدە ئەمدى قوللىمايدۇ. ئۇنىڭ ئورنىغا يۈك تەڭپۇڭلاشتۇرغۇچ توپلانغان سىگنال مۇلازىمېتىرلىرى بىلەن بىللە ئورنىتىلىپ ، پاراڭلىشىش تەڭشىكىدە تەڭشىلىشى كېرەك.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "ئىشلىتىلگەن ئالگورىزىم %1$s نىڭ ساقلانغان ئاممىۋى ئاچقۇچى ساقلانغان شەخسىي ئاچقۇچى بىلەن ماس كەلمەيدۇ. مەسىلىنى ھەل قىلىش ئۈچۈن%2$sنى ئىجرا قىلىڭ.", + "High-performance backend not configured correctly. Run %s for details." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى توغرا تەڭشەلمىگەن. تەپسىلاتىنى كۆرۈش ئۈچۈن %s نى ئىجرا قىلىڭ.", + "High-performance backend not configured correctly" : "يۇقىرى ئىقتىدارلىق ئارقا سۇپا توغرا تەڭشەلمىگەن", + "Error: Cannot connect to server" : "خاتالىق: مۇلازىمېتىرغا ئۇلىنالمايدۇ", + "Error: Server did not respond with proper JSON" : "خاتالىق: مۇلازىمېتىر مۇۋاپىق JSON بىلەن جاۋاب قايتۇرمىدى", + "Error: Certificate expired" : "خاتالىق: گۇۋاھنامىنىڭ ۋاقتى توشتى", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خاتالىق: Nextcloud سېرۋېرى ۋە يۇقىرى ئىقتىدارلىق ئارقا سېرۋېرنىڭ سىستېما ۋاقتى ماسلاشمىدى. ھەر ئىككى سېرۋېرنىڭ ۋاقىت سېرۋېرىغا ئۇلانغانلىقىغا ياكى ۋاقتىنى قولدا ماسلاشتۇرغانلىقىغا كاپالەتلىك قىلىڭ.", + "Could not get version" : "نەشرىگە ئېرىشەلمىدى", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "خاتالىق: ئىجرا قىلىنىۋاتقان نەشرى: {version}; مۇلازىمېتىرنىڭ بۇ نەشرىگە ماسلىشىش ئۈچۈن يېڭىلىنىشى كېرەك", + "Error: Server responded with: {error}" : "خاتالىق: مۇلازىمېتىر جاۋاب قايتۇردى: {error}", + "Error: Unknown error occurred" : "خاتالىق: نامەلۇم خاتالىق كۆرۈلدى", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "ئاگاھلاندۇرۇش: ئىجرا قىلىنىش نۇسخىسى: {version}; مۇلازىمېتىر بۇ سۆھبەت نۇسخىسىنىڭ بارلىق ئىقتىدارلىرىنى قوللىمايدۇ ، يوقاپ كەتكەن ئىقتىدارلار: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Talk نى يۇقىرى ئىقتىدارلىق ئارقا سۇپىدا ئىجرا قىلغاندا ئىچكى ساقلىغۇچنى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "Client Push" : "خېرىدار ئىتتىرىشى", + "Recording backend" : "ئارقا خاتىرىلەش", + "Using the recording backend requires a High-performance backend." : "خاتىرىلەش ئارقا سۇپىسىنى ئىشلىتىش يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ.", + "No recording backend configured" : "ئۈنگە ئېلىش ئارقا سۇپىسى سەپلەنمىگەن", + "SIP configuration" : "SIP سەپلىمىسى", + "Using the SIP functionality requires a High-performance backend." : "SIP ئىقتىدارىنى ئىشلىتىش يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ.", + "No SIP backend configured" : "SIP ئارقا سۇپىسى سەپلەنمىدى", + "Invalid date, date format must be YYYY-MM-DD" : "ئىناۋەتسىز چېسلا ، چېسلا فورماتى چوقۇم YYYY-MM-DD بولۇشى كېرەك", + "Conversation not found" : "سۆھبەت تېپىلمىدى", + "Path is already shared with this conversation" : "يول بۇ سۆھبەت بىلەن ئورتاقلاشتى", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC ئارقىلىق پاراڭلىشىش ، سىن ۋە ئاۋازلىق يىغىن", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC ئارقىلىق پاراڭلىشىش ، سىن ۋە ئاۋازلىق يىغىن\n\n.\n* 👥 ** شەخسىي ، گۇرۇپپا ، ئاممىۋى ۋە مەخپىي نومۇر قوغدىلىدىغان تېلېفونلار! ** باشقىلارنى ، پۈتۈن گۇرۇپپىنى تەكلىپ قىلىڭ ياكى ئاممىۋى ئۇلىنىش ئەۋەتىپ تېلېفون قىلىڭ.\n* 🌐 ** فېدېراتسىيە پاراڭلىرى ** مۇلازىمېتىردىكى Nextcloud ئىشلەتكۈچىلىرى بىلەن پاراڭلىشىڭ\n* 💻 ** ئېكران ھەمبەھىرلەش! ** تېلېفونىڭىزنى قاتناشقۇچىلار بىلەن ئورتاقلىشىڭ.\n* 🚀 ** باشقا Nextcloud ئەپلىرى بىلەن بىرلەشتۈرۈش ** ھۆججەتلەر ، كالېندار ، ئىشلەتكۈچى ھالىتى ، باش تاختا ، ئاقما ، خەرىتە ، ئەقلىي ئىقتىدارلىق تاللىغۇچ ، ئالاقىلىشىش ، پالۋان ۋە باشقىلار.\n* 🌉 ** باشقا پاراڭلىشىش ھەل قىلىش ئۇسۇللىرى بىلەن ماسقەدەملەڭ ** [Matterbridge] (https://github.com/42wim/matterbridge/) بىلەن سۆھبەتكە بىرلەشتۈرۈلگەندىن كېيىن ، Nextcloud Talk ۋە باشقا نۇرغۇن پاراڭلىشىش ھەل قىلىش ئۇسۇللىرىنى ئاسانلا ماسقەدەملىيەلەيسىز. ئەكسىچە.", + "Leave call" : "تېلېفون قىلىڭ", + "Navigating away from the page will leave the call in {conversation}" : "بەتتىن يىراقلاشسىڭىز تېلېفوننى {conversation} قالدۇرىدۇ", + "Stay in call" : "تېلېفوندا تۇرۇڭ", + "Error occurred when getting the conversation information" : "سۆھبەت ئۇچۇرىنى ئېلىشتا خاتالىق كۆرۈلدى", + "Discuss this file" : "بۇ ھۆججەتنى مۇلاھىزە قىلىڭ", + "Share this file with others to discuss it" : "بۇ ھۆججەتنى باشقىلار بىلەن ئورتاقلىشىڭ", + "Share this file" : "بۇ ھۆججەتنى ھەمبەھىرلەڭ", + "Join conversation" : "سۆھبەتكە قاتنىشىڭ", + "This conversation is password-protected." : "بۇ سۆھبەت مەخپىي نومۇر بىلەن قوغدىلىدۇ.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "بىز IP دىن نۇرغۇن ئىناۋەتسىز پارول سىنىقىنى بايقىدۇق. شۇڭلاشقا كېيىنكى قېتىملىق سىنىقىڭىز 30 سېكۇنتقا يېتىدۇ.", + "The password is wrong. Try again." : "پارول خاتا. قايتا سىناڭ.", + "Password" : "ئىم", + "Submit" : "يوللاڭ", + "Error requesting the password." : "پارول تەلەپ قىلىشتىكى خاتالىق.", + "Request password" : "پارول تەلەپ قىلىڭ", + "This conversation has ended" : "بۇ سۆھبەت ئاخىرلاشتى", + "Error occurred when joining the conversation" : "سۆھبەتكە قاتناشقاندا خاتالىق كۆرۈلدى", + "Close Talk sidebar" : "سۆزلىشىش يانبالدىقىنى تاقاڭ", + "Open Talk sidebar" : "سۆزلىشىش يانبالدىقىنى ئېچىڭ", + "Everyone" : "ھەممەيلەن", + "Users and moderators" : "ئىشلەتكۈچى ۋە رىياسەتچى", + "Moderators only" : "پەقەت رىياسەتچىلەر", + "Disable calls" : "چاقىرىشنى چەكلەڭ", + "Save changes" : "ئۆزگەرتىشلەرنى ساقلاڭ", + "Saving …" : "ساقلاۋاتىدۇ…", + "Saved!" : "قۇتۇلدى!", + "Limit to groups" : "گۇرۇپپىلارغا چەك قويۇڭ", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "كەم دېگەندە بىر گۇرۇپپا تاللانغاندا ، پەقەت تىزىملىكتىكى كىشىلەرلا سۆھبەتنىڭ بىر قىسمى بولالايدۇ.", + "Guests can still join public conversations." : "مېھمانلار يەنىلا ئاممىۋى سۆھبەتكە قاتناشسا بولىدۇ.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "پاراڭنى ئەمدى ئىشلىتەلمەيدىغان ئابونتلار يەنىلا ئىلگىرىكى سۆھبەتلىرىگە قاتناشقۇچىلار قاتارىغا تىزىلىدۇ ، شۇنداقلا ئۇلارنىڭ پاراڭ ئۇچۇرلىرىمۇ ساقلىنىدۇ.", + "Limit using Talk" : "سۆزلىشىشنى چەكلەڭ", + "Limit creating a public and group conversation" : "ئاممىۋى ۋە گۇرۇپپا پاراڭلىشىشنى چەكلەڭ", + "Limit creating conversations" : "سۆھبەتلىشىشنى چەكلەڭ", + "Limit starting a call" : "چاقىرىشنى چەكلەڭ", + "Limit starting calls" : "چاقىرىشنى چەكلەڭ", + "When a call has started, everyone with access to the conversation can join the call." : "تېلېفون باشلانغاندىن كېيىن ، سۆھبەتنى زىيارەت قىلالايدىغانلارنىڭ ھەممىسى تېلېفونغا قاتناشسا بولىدۇ.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "بۇ مۇلازىمېتىرغا تۆۋەندىكى بوتلار ئورنىتىلدى. بۇ ھۆججەتتىن قانداق قىلىپ {linkstart1} ئۆزىڭىزنىڭ بوت {linkend} ياكى {linkstart2} بوتۇلكا تىزىملىكى {linkend} نى قانداق قىلىپ مۇلازىمېتىرىڭىزدا قوزغىتىدىغانلىقىنى تەپسىلىي تاپالايسىز.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "بۇ مۇلازىمېتىرغا ھېچقانداق بوتكا ئورنىتىلمىغان. بۇ ھۆججەتتىن قانداق قىلىپ {linkstart1} ئۆزىڭىزنىڭ بوت {linkend} ياكى {linkstart2} بوتۇلكا تىزىملىكى {linkend} نى قانداق قىلىپ مۇلازىمېتىرىڭىزدا قوزغىتىدىغانلىقىنى تەپسىلىي تاپالايسىز.", + "Description is not provided" : "چۈشەندۈرۈش تەمىنلەنمىدى", + "Locked for moderators" : "رىياسەتچىلەر ئۈچۈن قۇلۇپلاندى", + "Enabled" : "قوزغىتىلدى", + "Disabled" : "چەكلەنگەن", + "Bots settings" : "Bots تەڭشىكى", + "State" : "دۆلەت", + "Name" : "ئاتى", + "Last error" : "ئاخىرقى خاتالىق", + "Total errors count" : "ئومۇمىي خاتالىق سانى", + "Find more bots" : "تېخىمۇ كۆپ بوتكا تېپىڭ", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "ئىشەنچلىك مۇلازىمېتىرلارنى {linkstart} تەڭشەك تەڭشەك بېتى {linkend} at دا تەڭشىگىلى بولىدۇ.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "بىرلەشمە چات ۋە تېلېفونلار ئاللىبۇرۇن ئىشلەيدۇ. قوشۇمچە ئۇچۇرلارنى بىر تەرەپ قىلىش كېيىنكى نەشرىدە يولغا قويۇلىدۇ.", + "Enable Federation in Talk app" : "سۆزلىشىش دېتالىدا فېدېراتسىيەنى قوزغىتىڭ", + "Permissions" : "ئىجازەت", + "Allow users to be invited to federated conversations" : "ئىشلەتكۈچىلەرنىڭ فېدېراتسىيە سۆھبەتكە تەكلىپ قىلىنىشىغا يول قويۇڭ", + "Allow users to invite federated users into conversation" : "ئىشلەتكۈچىلەرنىڭ فېدېراتسىيە ئابونتلىرىنى سۆھبەتكە تەكلىپ قىلىشىغا يول قويۇڭ", + "Only allow to federate with trusted servers" : "پەقەت ئىشەنچلىك مۇلازىمېتىرلار بىلەن فېدېراتسىيە قىلىشقا يول قويۇڭ", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "كەم دېگەندە بىر گۇرۇپپا تاللانغاندا ، تىزىملىكتىكى كىشىلەرلا فېدېراتسىيە ئابونتلىرىنى سۆھبەتكە تەكلىپ قىلالايدۇ.", + "Groups allowed to invite federated users" : "گۇرۇپپىلار فېدېراتسىيە ئىشلەتكۈچىلەرنى تەكلىپ قىلىشقا رۇخسەت قىلدى", + "Select groups …" : "گۇرۇپپىلارنى تاللاڭ…", + "All messages" : "بارلىق ئۇچۇرلار", + "@-mentions only" : "@ -تىلغا ئېلىشلا", + "Off" : "ئىتىك", + "General settings" : "ئادەتتىكى تەڭشەكلەر", + "Default notification settings" : "كۆڭۈلدىكى ئۇقتۇرۇش تەڭشىكى", + "Default group notification" : "كۆڭۈلدىكى گۇرۇپپا ئۇقتۇرۇشى", + "Default group notification for new groups" : "يېڭى گۇرۇپپىلارغا سۈكۈتتىكى گۇرۇپپا ئۇقتۇرۇشى", + "Integration into other apps" : "باشقا ئەپلەرگە بىرلەشتۈرۈش", + "Allow conversations on files" : "ھۆججەتلەردە پاراڭلىشىشقا يول قويۇڭ", + "Allow conversations on public shares for files" : "ھۆججەتلەرنىڭ ئاممىۋى ئورتاقلىشىشىغا يول قويۇڭ", + "End-to-end encrypted calls" : "باشتىن-ئاخىر شىفىرلانغان چاقىرىق", + "Enable encryption" : "شىفىرلاشنى قوزغىتىڭ", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "سەپلىمە قىلىنغان SIP كۆۋرۈكى ئارقىلىق باشتىن-ئاخىر شىفىرلانغان چاقىرىشلار يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ۋە SIP كۆۋرۈكىنىڭ يېڭى نۇسخىسىنى تەلەپ قىلىدۇ.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "ھازىر يانفون خېرىدارلىرى باشتىن-ئاخىر شىفىرلانغان چاقىرىشلارنى قوللىمايدۇ.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "جەدۋەلدىكى ئۇچۇرنىڭ ئۈستىدىكى كۇنۇپكىنى بېسىش ئارقىلىق Struktur AG نىڭ مۇلازىمېتىرلىرىغا ئەۋەتىلىدۇ. تېخىمۇ كۆپ ئۇچۇرلارنى {linkstart} spreed.eu {linkend} at دىن تاپالايسىز.", + "Pending" : "كۈتۈۋاتىدۇ", + "Error" : "خاتالىق", + "Blocked" : "چەكلەنگەن", + "Active" : "ئاكتىپ", + "Expired" : "ۋاقتى توشتى", + "Never" : "ھەرگىز", + "The trial could not be requested. Please try again later." : "سوراق قىلىنمىدى. كېيىن قايتا سىناڭ.", + "The account could not be deleted. Please try again later." : "ھېساباتنى ئۆچۈرگىلى بولمىدى. كېيىن قايتا سىناڭ.", + "Hosted High-performance backend" : "ساھىپخانلىق قىلغان يۇقىرى ئىقتىدارلىق ئارقا سۇپا", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "بىزنىڭ ھەمراھىمىز Struktur AG ساھىبخانلىق سىگنال مۇلازىمىتى تەلەپ قىلىدىغان مۇلازىمەت بىلەن تەمىنلەيدۇ. بۇنىڭ ئۈچۈن پەقەت تۆۋەندىكى جەدۋەلنى تولدۇرۇشىڭىز كېرەك ، Nextcloud تەلەپ قىلىدۇ. مۇلازىمېتىر سىزگە تەڭشەلگەندىن كېيىن كىنىشكا ئاپتوماتىك تولدۇرۇلىدۇ. بۇ مەۋجۇت سىگنال مۇلازىمېتىر تەڭشىكىنى قاپلىۋېتىدۇ.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "ئەگەر يۇقىرى ئىقتىدارلىق ئارقا سەھنە ھېساباتىڭىزدا STUN ۋە/ياكى TURN ئىقتىدارى بولسا، تەڭشەكلەر شۇنىڭغا ئاساسەن يېڭىلىنىدۇ.", + "URL of this Nextcloud instance" : "بۇ Nextcloud مىسالىنىڭ URL", + "Full name of the user requesting the trial" : "سىناق قىلىشنى تەلەپ قىلغان ئىشلەتكۈچىنىڭ تولۇق ئىسمى", + "Email of the user" : "ئىشلەتكۈچىنىڭ ئېلېكترونلۇق خەت", + "Language" : "تىل", + "Country" : "دۆلەت", + "Request signaling server trial" : "سىگنال مۇلازىمېتىر سىنىقىنى تەلەپ قىلىڭ", + "You can see the current status of your hosted signaling server in the following table." : "تۆۋەندىكى جەدۋەلدە ساھىبخانلىق سىگنال مۇلازىمېتىرىڭىزنىڭ ھازىرقى ھالىتىنى كۆرەلەيسىز.", + "Status" : "ھالەت", + "Created at" : "قۇرۇلدى", + "Expires at" : "ۋاقتى توشىدۇ", + "Limits" : "چەكلىمىسى", + "STUN included" : "STUN كىرگۈزۈلگەن", + "Yes" : "ھەئە", + "No" : "ياق", + "TURN included" : "TURN كىرگۈزۈلگەن", + "Delete the signaling server account" : "سىگنال مۇلازىمېتىر ھېساباتىنى ئۆچۈرۈڭ", + "_%n user_::_%n users_" : ["%n ئىشلەتكۈچى","%n ئىشلەتكۈچى"], + "Installed version: {version}" : "قاچىلانغان نەشرى: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Talk نى باشقا مۇلازىمەتلەر بىلەن ئۇلاش ئۈچۈن Matterbridge نى قاچىلىسىڭىز بولىدۇ ، تېخىمۇ كۆپ تەپسىلاتلار ئۈچۈن ئۇلارنىڭ {linkstart1} GitHub بېتى {linkend} نى زىيارەت قىلىڭ. بۇ دېتالنى چۈشۈرۈش ۋە قاچىلاشقا بىر ئاز ۋاقىت كېتىدۇ. ۋاقتى ئۆتۈپ كەتسە ، {linkstart2} Nextcloud App {linkend} دىن قولدا قاچىلاڭ.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge ئىككىلىك ھۆججىتىنىڭ ھوقۇقى خاتا. Matterbridge ئىككىلىك ھۆججىتىنىڭ توغرا ئىشلەتكۈچىگە تەۋە ئىكەنلىكىگە ۋە ئىجرا قىلغىلى بولىدىغانلىقىغا كاپالەتلىك قىلىڭ. ئۇنى «/…/nextcloud/apps/talk_matterbridge/bin/» دىن تاپقىلى بولىدۇ.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge ئىككىلىك تېپىلمىدى ياكى ئىجرا قىلىنمىدى.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "سىز يەنە تەڭشەش ئارقىلىق Matterbridge ئىككىلىك سىستېمىغا قولدا يول قويالايسىز. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن {linkstart} Matterbridge بىرلەشتۈرۈش ھۆججىتى {linkend} Check نى تەكشۈرۈڭ.", + "Downloading …" : "چۈشۈرۈش…", + "Install Talk Matterbridge" : "Talk Matterbridge نى قاچىلاڭ", + "An error occurred while installing the Matterbridge app" : "Matterbridge دېتالىنى قاچىلىغاندا خاتالىق كۆرۈلدى", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridge نى قاچىلىغاندا خاتالىق كۆرۈلدى. ئۇنى قولدا قاچىلاڭ", + "Failed to execute Matterbridge binary." : "Matterbridge ئىككىلىك سىستېمىنى ئىجرا قىلالمىدى.", + "Matterbridge integration" : "Matterbridge بىرلەشتۈرۈش", + "Enable Matterbridge integration" : "Matterbridge نى بىرلەشتۈرۈشنى قوزغىتىڭ", + "Status: Checking connection" : "ھالىتى: ئۇلىنىشنى تەكشۈرۈش", + "OK: Running version: {version}" : "ماقۇل: ئىجرا نەشرى: {version}", + "Error: Server seems to be a Signaling server" : "خاتالىق: مۇلازىمېتىر سىگنال مۇلازىمىتىرىدەك قىلىدۇ", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خاتالىق: Nextcloud سېرۋېرى ۋە خاتىرىلەش ئارقا ئۇچى سېرۋېرىنىڭ سىستېما ۋاقتى ماسلاشمىدى. ھەر ئىككى سېرۋېرنىڭ ۋاقىت سېرۋېرىغا ئۇلانغانلىقىغا ياكى ۋاقتىنى قولدا ماسلاشتۇرغانلىقىغا كاپالەتلىك قىلىڭ.", + "Recording backend URL" : "ئارقا ئادرېسنى خاتىرىلەش", + "Validate SSL certificate" : "SSL گۇۋاھنامىسىنى ئىناۋەتلىك قىلىڭ", + "Delete this server" : "بۇ مۇلازىمېتىرنى ئۆچۈرۈڭ", + "Test this server" : "بۇ مۇلازىمېتىرنى سىناپ بېقىڭ", + "Disabled for all calls" : "بارلىق تېلېفونلار چەكلەنگەن", + "Enabled for all calls" : "بارلىق تېلېفونلار قوزغىتىلدى", + "Configurable on conversation level by moderators" : "رىياسەتچىلەرنىڭ سۆھبەت سەۋىيىسىگە تەڭشىگىلى بولىدۇ", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP تەڭشەكلىرى \"upload_max_filesize\" ياكى \"post_max_size\" پەقەت {maxUpload} غا قەدەر ھۆججەت يوللاشقا يول قويىدۇ.", + "Recording backend settings saved" : "ئارقا بەت تەڭشىكى خاتىرىلەندى", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "رىياسەتچىلەرنىڭ سۆھبەت سەۋىيىسىدە قوشۇلۇشىغا رۇخسەت قىلىنىدۇ. بۇ سۆھبەتتىكى ھەر بىر چاقىرىققا قاتنىشىشتىن بۇرۇن ھەر بىر قاتناشقۇچىغا خاتىرىلەشكە قوشۇلۇش تەلەپ قىلىنىدۇ.", + "The consent to be recorded will be required for each participant before joining every call." : "خاتىرىلەشكە قوشۇلۇش ھەر بىر قاتناشقۇچىغا ھەر بىر تېلېفونغا قاتنىشىشتىن بۇرۇن تەلەپ قىلىنىدۇ.", + "The consent to be recorded is not required." : "خاتىرىلەشكە قوشۇلۇش تەلەپ قىلىنمايدۇ.", + "Recording backend configuration is only possible with a High-performance backend." : "ئارقا ئۇچىنى خاتىرىلەش پەقەت يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ئارقىلىقلا مۇمكىن.", + "Add a new recording backend server" : "يېڭى خاتىرىلەش ئارقا مۇلازىمېتىرى قوشۇڭ", + "Shared secret" : "ئورتاق مەخپىيەتلىك", + "Recording consent" : "خاتىرىلەش", + "Recording transcription" : "ترانسكرىپسىيەنى خاتىرىلەش", + "Automatically transcribe call recordings with a transcription provider" : "تېلېفون خاتىرىلىرىنى ترانسكرىپسىيە تەمىنلىگۈچىسى ئارقىلىق ئاپتوماتىك ترانسكرىپسىيە قىلىڭ", + "Automatically summarize call recordings with transcription and summary providers" : "تېلېفون خاتىرىلىرىنى ترانسكرىپسىيە ۋە خۇلاسە تەمىنلىگۈچىلەر ئارقىلىق ئاپتوماتىك خۇلاسىلاڭ", + "SIP configuration saved!" : "SIP سەپلىمىسى ساقلاندى!", + "SIP configuration is only possible with a High-performance backend." : "SIP سەپلىمىسى پەقەت يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ئارقىلىقلا مۇمكىن.", + "Enable SIP Dial-out option" : "SIP چاقىرىش تاللانمىسىنى قوزغىتىڭ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "قوللايدىغان SIP Dial-out ئىقتىدارىنى قوللاش ئۈچۈن سىگنال مۇلازىمېتىرىنى يېڭىلاش كېرەك.", + "Do not show SIP Dial-out caller number" : "SIP تېلېفون نومۇرىنى كۆرسەتمەڭ", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "تېلېفون قوبۇل قىلغۇچىغا تېلېفون قىلغاندا نامسىز نومۇر «نامەلۇم» ياكى «ياپون قىلىنغان نومۇر» دەپ كۆرسىتىلىشى كېرەك", + "Dial-out number" : "نۇمۇر بۇراش نۇمۇرى", + "E164 formatted number used as a fallback caller number for outgoing calls" : "چىقىش تېلېفونلىرى ئۈچۈن زاپاس تېلېفون نومۇرى سۈپىتىدە ئىشلىتىلىدىغان E164 فورماتىدىكى نومۇر", + "Dial-out prefix" : "نۇمۇر بۇراش قۇشۇمچىسى", + "Prefix to configured user number for outgoing calls (default is `+`)" : "چىقىش تېلېفونلىرى ئۈچۈن تەڭشەلگەن ئىشلەتكۈچى نومۇرىنىڭ ئالدىن قوشۇمچىسى (سۈكۈتتىكى ھالىتى `+`)", + "Restrict SIP configuration" : "SIP سەپلىمىسىنى چەكلەڭ", + "Enable SIP configuration" : "SIP سەپلىمىسىنى قوزغىتىڭ", + "Only users of the following groups can enable SIP in conversations they moderate" : "پەقەت تۆۋەندىكى گۇرۇپپىلارنى ئىشلەتكۈچىلەرلا ئوتتۇراھال بولغان سۆھبەتتە SIP نى قوزغىتالايدۇ", + "Phone number (Country)" : "تېلېفون نومۇرى (دۆلەت)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "بۇ ئۇچۇرلار تەكلىپلىك ئېلېكترونلۇق خەتتە ئەۋەتىلگەن شۇنداقلا يانبالداقتا بارلىق قاتناشقۇچىلارغا كۆرسىتىلىدۇ.", + "Nextcloud base URL" : "Nextcloud ئاساسىي URL", + "Talk Backend URL" : "پاراڭ ئارقا سۇپا URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "مەۋجۇت ئىقتىدارلار", + "Error: Websocket connection failed" : "خاتالىق: Websocket قا ئۇلىنىش مەغلۇپ بولدى", + "Error code" : "خاتالىق كودى", + "Error message" : "خاتالىق ئۇچۇرى", + "Error: Websocket connection failed. Check browser console" : "خاتالىق: تور بېكەتكە ئۇلىنىش مەغلۇپ بولدى. تور كۆرگۈچ كونترول تاختىسىنى تەكشۈرۈڭ.", + "High-performance backend URL" : "يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈش URL", + "Missing High-performance backend warning hidden" : "يۇقىرى ئىقتىدارلىق ئارقا سۇپا ئاگاھلاندۇرۇشى يوقاپ كەتتى", + "High-performance backend settings saved" : "يۇقىرى ئىقتىدارلىق ئارقا سەپلىمىسى ساقلاندى", + "Nextcloud Talk setup not complete" : "Nextcloud پاراڭنى قاچىلاش تاماملانمىدى", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بولمىغان 2 دىن ئارتۇق قاتناشقۇچىسى بار تېلېفونلاردا، قاتناشقۇچىلارنىڭ ئۇلىنىش مەسىلىسىگە دۇچ كېلىشى ۋە قاتناشقۇچى ئۈسكۈنىلەرگە ئېغىر يۈك ئېلىپ كېلىشى مۇمكىنلىكىنى ئۇنۇتماڭ.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "كۆپ قاتناشقۇچىلىق تېلېفونلارنىڭ راۋان ئىشلىشىگە كاپالەتلىك قىلىش ئۈچۈن يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى ئورنىتىڭ.", + "Nextcloud portal" : "Nextcloud پورتالى", + "Quick installation guide" : "تېز قاچىلاش قوللانمىسى", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى كۆپ قاتناشقۇچىلار بىلەن تېلېفون قىلىش ۋە سۆھبەتلىشىش ئۈچۈن تەلەپ قىلىنىدۇ. ئارقا ئۇچى بولمىسا، بارلىق قاتناشقۇچىلار بىر-بىرى ئۈچۈن ئايرىم-ئايرىم ھالدا ئۆزلىرىنىڭ سىنلىرىنى يوللىشى كېرەك، بۇ بولسا ئۇلىنىش مەسىلىسى ۋە قاتناشقۇچى ئۈسكۈنىلەرنىڭ يۈكىنىڭ ئېغىرلىشىشىنى كەلتۈرۈپ چىقىرىدۇ.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بىلەن Nextcloud Talk ئىشلەتكەندە، تارقىتىلغان كېش ساقلاش بوشلۇقىنى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "Add High-performance backend server" : "يېڭى يۇقىرى ئىقتىدارلىق ئارقا سۇپا مۇلازىمېتىرنى قوشۇڭ", + "Warn about connectivity issues in calls with more than 2 participants" : "2 دىن ئارتۇق قاتناشقۇچىسى بار تېلېفونلاردا ئۇلىنىش مەسىلىسى توغرىسىدا ئاگاھلاندۇرۇش", + "STUN server URL" : "STUN مۇلازىمېتىر ئادرېسى", + "The server address is invalid" : "مۇلازىمېتىر ئادرېسى ئىناۋەتسىز", + "STUN settings saved" : "STUN تەڭشىكى ساقلاندى", + "STUN servers" : "STUN مۇلازىمېتىرلىرى", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN مۇلازىمېتىرى روتېرنىڭ ئارقىسىدىكى قاتناشقۇچىلارنىڭ ئاممىۋى IP ئادرېسىنى ئېنىقلاشقا ئىشلىتىلىدۇ.", + "Add a new STUN server" : "يېڭى STUN مۇلازىمېتىرنى قوشۇڭ", + "{schema} scheme must be used with a domain" : "{schema} پىلانى چوقۇم تور دائىرىسى بىلەن ئىشلىتىلىشى كېرەك", + "{option1} and {option2}" : "{option1} ۋە {option2}", + "{option} only" : "{option} پەقەت", + "OK: Successful ICE candidates returned by the TURN server" : "بولىدۇ: مۇۋەپپەقىيەتلىك ICE كاندىداتلىرى TURN مۇلازىمېتىرى تەرىپىدىن قايتۇرۇلغان", + "Error: No working ICE candidates returned by the TURN server" : "خاتالىق: TURN مۇلازىمېتىرى تەرىپىدىن قايتۇرۇلغان ICE كاندىداتلىرى يوق", + "Testing whether the TURN server returns ICE candidates" : "TURN مۇلازىمېتىرىنىڭ ICE كاندىداتلىرىنى قايتۇرغان-قايتۇرمىغانلىقىنى سىناش", + "TURN server schemes" : "TURN مۇلازىمېتىر لايىھەلىرى", + "TURN server URL" : "مۇلازىمېتىر ئادرېسى", + "TURN server secret" : "مۇلازىمېتىرنىڭ مەخپىيىتى", + "TURN server protocols" : "TURN مۇلازىمېتىر كېلىشىمنامىسى", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN مۇلازىمېتىرى مۇداپىئە تامنىڭ كەينىدىكى قاتناشقۇچىلارنىڭ ئېقىمىنى ۋاكالەتچى قىلىشقا ئىشلىتىلىدۇ. ئەگەر ئايرىم قاتناشقۇچىلار باشقىلارغا ئۇلىنالمىسا TURN مۇلازىمېتىرى تەلەپ قىلىنىدۇ. تەڭشەش كۆرسەتمىسى ئۈچۈن {linkstart} بۇ ھۆججەت {linkend} See دىن كۆرۈڭ.", + "TURN settings saved" : "TURN تەڭشىكى ساقلاندى", + "TURN servers" : "TURN مۇلازىمېتىرلىرى", + "Add a new TURN server" : "يېڭى TURN مۇلازىمېتىرنى قوشۇڭ", + "Failed" : "مەغلۇب بولدى", + "OK" : "جەزملە", + "Checking …" : "تەكشۈرۈش…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "مەغلۇپ بولدى: بۇ توركۆرگۈدە WebAssemble چەكلەنگەن ياكى قوللىمايدۇ. WebAssemble نى قوزغىتىڭ ياكى ئۇنى قوللاش ئۈچۈن توركۆرگۈ ئىشلىتىڭ.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "مەغلۇپ بولدى: \".wasm\" ۋە \".tflite\" ھۆججەتلىرى تور مۇلازىمېتىرى تەرىپىدىن توغرا قايتۇرۇلمىدى. سۆھبەت ھۆججىتىدىكى «سىستېما تەلىپى» بۆلىكىنى تەكشۈرۈپ بېقىڭ.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "بولىدۇ: \".wasm\" ۋە \".tflite\" ھۆججەتلىرى تور مۇلازىمېتىرى تەرىپىدىن مۇۋاپىق قايتۇرۇلدى.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "قارىغاندا PHP ۋە Apache سەپلىمىسى ماسلاشمىغاندەك قىلىدۇ. شۇنىڭغا دىققەت قىلىڭكى ، PHP نى پەقەت MPM_PREFORK مودۇلى بىلەنلا ئىشلەتكىلى بولىدۇ ، PHP-FPM پەقەت MPM_EVENT مودۇلىدىلا ئىشلىتىلىدۇ.", + "Web server setup checks" : "تور مۇلازىمېتىرنى تەڭشەش", + "Files required for virtual background can be loaded" : "مەۋھۇم تەگلىك ئۈچۈن لازىملىق ھۆججەتلەرنى يۈكلەشكە بولىدۇ", + "Federated user" : "فېدېراتسىيە ئىشلەتكۈچى", + "Assign participants to rooms" : "قاتناشقۇچىلارنى ياتاققا تەقسىم قىلىڭ", + "Configure breakout rooms" : "بۆسۈش ئۆيلىرىنى سەپلەڭ", + "Number of breakout rooms" : "بۆسۈش ئۆي سانى", + "You can create from 1 to 20 breakout rooms." : "1 دىن 20 گىچە بۆسۈش ئۆيى قۇرالايسىز.", + "Assignment method" : "تاپشۇرۇش ئۇسۇلى", + "Automatically assign participants" : "قاتناشقۇچىلارنى ئاپتوماتىك تەقسىملەيدۇ", + "Manually assign participants" : "قاتناشقۇچىلارنى قولدا تەقسىم قىلىڭ", + "Allow participants to choose" : "قاتناشقۇچىلارنىڭ تاللىشىغا يول قويۇڭ", + "Create rooms" : "ياتاق قۇرۇش", + "Confirm" : "جەزملەشتۈرۈڭ", + "Create breakout rooms" : "بۆسۈش ئۆيى قۇرۇش", + "Reset" : "ئەسلىگە قايتۇرۇش", + "Delete breakout rooms" : "بۆسۈش ئۆيلىرىنى ئۆچۈرۈڭ", + "Room {roomNumber}" : "ياتاق {roomNumber}", + "Current breakout rooms and settings will be lost" : "نۆۋەتتىكى بۆسۈش ئۆيى ۋە تەڭشەكلىرى يوقاپ كېتىدۇ", + "Cancel" : "ۋاز كەچ", + "Unassigned participants" : "ئىمزا قويمىغان قاتناشقۇچىلار", + "Back" : "قايتىش", + "Assign" : "تاپشۇرۇق", + "Add participant \"{user}\"" : "قاتناشقۇچى \"{user}\" نى قوشۇڭ", + "Now" : "ھازىر", + "Invalid calendar selected" : "ئىناۋەتسىز يىلنامە تاللاندى", + "Invalid start time selected" : "ئىناۋەتسىز باشلاش ۋاقتى تاللاندى", + "Invalid end time selected" : "ئىناۋەتسىز ئاخىرلىشىش ۋاقتى تاللاندى", + "Unknown error occurred" : "نامەلۇم خاتالىق كۆرۈلدى", + "Sending no invitations" : "تەكلىپنامە ئەۋەتمەيۋاتىدۇ", + "{participant0} will receive an invitation" : "{participant0} تەكلىپ تاپشۇرۋالىدۇ", + "{participant0} and {participant1} will receive invitations" : "{participant0} بىلەن {participant1} تەكلىپ تاپشۇرۋالىدۇ", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}، {participant1}، %n باشقىلار تەكلىپ تاپشۇرۋالىدۇ","{participant0}، {participant1}، %n باشقىلار تەكلىپ تاپشۇرۋالىدۇ"], + "Invite {user}" : "{user} نى تەكلىپ قىل", + "Invite all users and emails in this conversation" : "بۇ سۆھبەتتىكى بارلىق ئىشلەتكۈچىلەرنى ۋە ئېلخەتلەرنى تەكلىپ قىلىڭ", + "Meeting created" : "يىغىن قۇرۇلدى", + "Upcoming meetings" : "كىيىنكى يىغىنلار", + "Loading …" : "يۈكلەۋاتىدۇ…", + "No upcoming meetings" : "كىلىدىغان يىغىنلار يوق", + "Schedule a meeting" : "بىر يىغىن ئورۇنلاشتۇر", + "Meeting title" : "يىغىن ماۋزۇسى", + "From" : "دىن", + "To" : "غا", + "Calendar" : "كالېندار", + "Attendees" : "قاتناشقۇچىلار", + "No other participants to send invitations to." : "تەكلىپنى ئەۋەتىدىغان باشقا قاتناشقۇچى يوق.", + "Add attendees" : "قاتناشقۇچىلارنى قوش", + "Save" : "ساقلا", + "Search participants" : "قاتناشقۇچىلارنى ئىزدە", + "No results" : "ھېچقانداق نەتىجە يوق", + "Done" : "تامام", + "Disable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى ئەت", + "Raise hand" : "قولىنى كۆتۈرۈڭ", + "Raise hand (R)" : "قولىنى كۆتۈرۈڭ (R)", + "Lower hand" : "تۆۋەن قول", + "Lower hand (R)" : "تۆۋەن قول (R)", + "Exit full screen (F)" : "تولۇق ئېكراندىن چىقىڭ (F)", + "Full screen (F)" : "تولۇق ئېكران (F)", + "Speaker view" : "ياڭراتقۇ كۆرۈنۈشى", + "Grid view" : "كاتەكچە كۆرۈنۈش", + "Error when trying to load the available live transcription languages" : "مەۋجۇت بولغان نەق مەيدان كۆچۈرۈش تىللىرىنى يۈكلەشتە خاتالىق كۆرۈلدى", + "Failed to enable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى قوزغىتىش مەغلۇپ بولدى", + "Recording consent is required" : "خاتىرىلەش ئىجازىتى تەلەپ قىلىنىدۇ", + "This conversation is read-only" : "بۇ سۆھبەت پەقەت ئوقۇلىدۇ", + "Conversation not found or not joined" : "سۆھبەت تېپىلمىدى ياكى قوشۇلمىدى", + "Lobby is still active and you're not a moderator" : "لوبى يەنىلا ئاكتىپ ، سىز رىياسەتچى ئەمەس", + "Connection failed" : "ئۇلىنىش مەغلۇپ بولدى", + "Reload" : "قايتا يۈكلەڭ", + "{nickName} raised their hand." : "{nickName} ئۇلارنىڭ قولىنى كۆتۈردى.", + "A participant raised their hand." : "بىر قاتناشقۇچى قولىنى كۆتۈردى.", + "Collapse stripe" : "يىمىرىلىش يولى", + "Expand stripe" : "بەلۋاغنى كېڭەيتىش", + "Previous page of videos" : "سىنلارنىڭ ئالدىنقى بېتى", + "Next page of videos" : "سىنلارنىڭ كېيىنكى بېتى", + "Connecting …" : "ئۇلىنىش…", + "Calling …" : "چاقىرىش…", + "Waiting for {user} to join the call" : "{user} نىڭ چاقىرىققا قاتنىشىشىنى ساقلاش", + "Waiting for others to join the call …" : "باشقىلارنىڭ تېلېفونغا قاتنىشىشىنى ساقلاش…", + "You can invite others in the participant tab of the sidebar" : "يان كۆزنەكنىڭ قاتناشقۇچىلار بەتكۈچىدە باشقىلارنى تەكلىپ قىلسىڭىز بولىدۇ", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "سىز يان كۆزنەكنىڭ قاتناشقۇچىلار بەتكۈچىدە باشقىلارنى تەكلىپ قىلالايسىز ياكى بۇ ئۇلىنىشنى ھەمبەھىرلەپ باشقىلارنى تەكلىپ قىلالايسىز!", + "Share this link to invite others!" : "باشقىلارنى تەكلىپ قىلىش ئۈچۈن بۇ ئۇلىنىشنى ھەمبەھىرلەڭ!", + "Copy link" : "ئۇلانمىنى كۆچۈرۈڭ", + "You are not allowed to enable audio" : "ئاۋازنى قوزغىتىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "No audio. Click to select device" : "ئاۋاز يوق. ئۈسكۈنىنى تاللاش ئۈچۈن چېكىڭ", + "Mute audio" : "ئاۋازسىز", + "Mute audio (M)" : "ئاۋازسىز ئاۋاز (M)", + "Unmute audio" : "ئاۋازسىز ئاۋاز", + "Unmute audio (M)" : "ئاۋازسىز ئاۋاز (M)", + "None" : "يوق", + "Select a microphone" : "مىكروفوننى تاللاڭ", + "Select a speaker" : "بىر سۆزلىگۈچى تاللا", + "Check devices" : "ئۈسكۈنىلەرنى تەكشۈر", + "Access to camera was denied" : "كامېراغا كىرىش رەت قىلىندى", + "Error while accessing camera: It is likely in use by another program" : "كامېرانى زىيارەت قىلغاندا خاتالىق: ئۇنى باشقا پروگرامما ئىشلىتىشى مۇمكىن", + "Error while accessing camera" : "كامېرانى زىيارەت قىلغاندا خاتالىق", + "You have been muted by a moderator" : "سىز بىر رىياسەتچى تەرىپىدىن ئاۋازسىز قىلىندى", + "Hide presenter video" : "رىياسەتچى سىننى يوشۇرۇش", + "You are not allowed to enable video" : "سىننى قوزغىتىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "No video. Click to select device" : "سىن يوق. ئۈسكۈنىنى تاللاش ئۈچۈن چېكىڭ", + "Disable video" : "سىننى چەكلەڭ", + "Disable video (V)" : "سىننى چەكلەش (V)", + "Enable video" : "سىننى قوزغىتىڭ", + "Enable video (V)" : "سىننى قوزغىتىش (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىش - سىننى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىش (V) - سىننى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىڭ. بۇ فىلىمنى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Select a video device" : "بىر سىن ئۈسكۈنىسى تاللا", + "Show presenter" : "رىياسەتچى كۆرسەت", + "You" : "سەن", + "Mute" : "جىمجىتلا", + "Muted" : "ئاۋازسىز", + "Show screen" : "ئېكراننى كۆرسىتىش", + "Stop following" : "ئەگىشىشنى توختىتىڭ", + "Connection could not be established …" : "ئۇلىنىش قۇرۇلمىدى…", + "Connection was lost and could not be re-established …" : "ئۇلىنىش يوقاپ كەتتى ، قايتا قۇرغىلى بولمىدى…", + "Connection could not be established. Trying again …" : "ئۇلىنىش قۇرۇلمىدى. قايتا سىناڭ…", + "Connection lost. Trying to reconnect …" : "ئۇلىنىش يوقاپ كەتتى. قايتا ئۇلىماقچى بولۇۋاتىدۇ…", + "Connection problems …" : "ئۇلىنىش مەسىلىسى…", + "Collapse" : "يىمىرىلىش", + "Expand" : "كېڭەيتىش", + "You need to be logged in to upload files" : "ھۆججەتلەرنى يوللاش ئۈچۈن تىزىملىتىشىڭىز كېرەك", + "Drop your files to upload" : "يۈكلەش ئۈچۈن ھۆججەتلىرىڭىزنى تاشلاڭ", + "Conversation messages" : "سۆھبەت ئۇچۇرلىرى", + "Scroll to bottom" : "ئاستىغا يۆتكەڭ", + "Post message" : "ئۇچۇر يوللاش", + "Federated conversation" : "فېدېراتسىيە سۆھبەت", + "Public conversation" : "ئاممىۋى سۆھبەت", + "Favorite" : "يىغقۇچ", + "Banned users" : "چەكلەنگەن ئىشلەتكۈچى", + "Manage the list of banned users in this conversation." : "بۇ سۆھبەتتە چەكلەنگەن ئابونتلارنىڭ تىزىملىكىنى باشقۇرۇڭ.", + "Manage bans" : "چەكلەشنى باشقۇرۇش", + "No banned users" : "چەكلەنگەن ئىشلەتكۈچى يوق", + "Banned by:" : "چەكلىگەن:", + "Date:" : "چېسلا:", + "Note:" : "ئەسكەرتىش:", + "Hide details" : "تەپسىلاتلارنى يوشۇرۇش", + "Show details" : "تەپسىلاتلارنى كۆرسەت", + "Unban" : "چەكلىمە", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "ماۋزۇ ۋە چۈشەندۈرۈشنى {linkstart}Calendar ↗{linkend} دىن ئۆزگەرتەلەيسىز.", + "Error while updating conversation name" : "سۆھبەت نامىنى يېڭىلىغاندا خاتالىق", + "Error while updating conversation description" : "سۆھبەت تەسۋىرىنى يېڭىلىغاندا خاتالىق", + "Enter a name for this conversation" : "بۇ سۆھبەتكە ئىسىم كىرگۈزۈڭ", + "Edit conversation name" : "سۆھبەت نامىنى تەھرىرلەڭ", + "Edit conversation description" : "سۆھبەت چۈشەندۈرۈشىنى تەھرىرلەڭ", + "Enter a description for this conversation" : "بۇ سۆھبەتنىڭ چۈشەندۈرۈشىنى كىرگۈزۈڭ", + "Picture" : "رەسىم", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "بۇ سۆھبەتتە تۆۋەندىكى بوتۇلكىلارنى قوزغىتىشقا بولىدۇ. بۇ مۇلازىمېتىرغا تېخىمۇ كۆپ بوتكا ئورنىتىش ئۈچۈن باشقۇرۇشقا ئالاقىلىشىڭ.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "بۇ مۇلازىمېتىرغا ھېچقانداق بوتكا ئورنىتىلمىغان. بۇ مۇلازىمېتىرغا بوتكا ئورنىتىش ئۈچۈن باشقۇرۇشقا ئالاقىلىشىڭ.", + "Disable" : "چەكلە", + "Enable" : "قوزغىتىش", + "Breakout rooms" : "ياتاق ئۆي", + "Manage breakout rooms" : "بۆسۈش ئۆيلىرىنى باشقۇرۇش", + "Set up breakout rooms for this conversation" : "بۇ سۆھبەت ئۈچۈن بۆسۈش ئۆيى تەسىس قىلىڭ", + "Please select a valid PNG or JPG file" : "ئىناۋەتلىك PNG ياكى JPG ھۆججىتىنى تاللاڭ", + "Choose your conversation picture" : "سۆھبەت رەسىمىڭىزنى تاللاڭ", + "Choose" : "تاللاڭ", + "Error setting conversation picture" : "سۆھبەت رەسىمىنى تەڭشەشتە خاتالىق", + "Could not set the conversation picture: {error}" : "سۆھبەت رەسىمىنى تەڭشىيەلمىدى: {error}", + "Error cropping conversation picture" : "سۆھبەت رەسىمىنى كېسىشتە خاتالىق", + "Error removing conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرۈشتە خاتالىق", + "Set emoji as conversation picture" : "Emoji نى سۆھبەت رەسىمى قىلىپ تەڭشەڭ", + "Set background color for conversation picture" : "سۆھبەت رەسىمىنىڭ تەگلىك رەڭگىنى بەلگىلەڭ", + "Upload conversation picture" : "سۆھبەت رەسىمىنى يۈكلەڭ", + "Choose conversation picture from files" : "ھۆججەتلەردىن سۆھبەت رەسىمىنى تاللاڭ", + "Remove conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرۈڭ", + "The file must be a PNG or JPG" : "ھۆججەت چوقۇم PNG ياكى JPG بولۇشى كېرەك", + "Set picture" : "رەسىم بەلگىلەڭ", + "Default permissions modified for {conversationName}" : "كۆڭۈلدىكى سۆھبەت {conversationName} غا ئۆزگەرتىلدى", + "Could not modify default permissions for {conversationName}" : "{conversationName} نىڭ كۆڭۈلدىكى ئىجازەتلىرىنى ئۆزگەرتەلمىدى", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "بۇ سۆھبەتكە قاتناشقۇچىلارنىڭ كۆڭۈلدىكى ئىجازەتلىرىنى تەھرىرلەڭ. بۇ تەڭشەكلەر رىياسەتچىلەرگە تەسىر كۆرسەتمەيدۇ.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "بۇ بۆلەكتە ھەر قېتىم ئىجازەت ئۆزگەرتىلگەندە ، ئىلگىرى ئايرىم قاتناشقۇچىلارغا تەقسىم قىلىنغان ئىختىيارى ئىجازەتلەر يوقىلىدۇ.", + "All permissions" : "بارلىق ئىجازەتلەر", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "قاتناشقۇچىلارنىڭ چاقىرىشنى باشلاش ، چاقىرىشقا قاتنىشىش ، ئاۋاز ۋە سىننى قوزغىتىش ۋە ئېكراننى ھەمبەھىرلەش ھوقۇقى بار.", + "Restricted" : "چەكلەنگەن", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "قاتناشقۇچىلار تېلېفونغا قاتناشسا بولىدۇ ، ئەمما رىياسەتچى ئۇلارغا ئىجازەت بەرمىگۈچە ئاۋاز ، سىن ياكى ئېكراننى ھەمبەھىرلىيەلمەيدۇ.", + "Advanced permissions" : "ئالىي ئىجازەت", + "Edit permissions" : "ئىجازەتلەرنى تەھرىرلەڭ", + "Conversation settings" : "سۆھبەت تەڭشەكلىرى", + "Basic Info" : "ئاساسىي ئۇچۇر", + "Personal" : "شەخسىي", + "Moderation" : "ئوتتۇراھال", + "Setup overview" : "تەڭشەش ئومۇمىي ئەھۋالى", + "Live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەش", + "Enable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى قوزغات", + "Breakout Rooms" : "ئارام ئېلىش ئۆيلىرى", + "Matterbridge" : "Matterbridge", + "Bots" : "بوتلار", + "Danger zone" : "خەتەر رايونى", + "Archive conversation" : "ئارخىپ سۆھبىتى", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "ئارخىپلانغان سۆھبەتلەر ئۆزلۈكىدىن سۆھبەت تىزىملىكىدىن يوشۇرۇلىدۇ. قانداقلا بولمىسۇن، سىز سۆھبەت نامىنى ئىزدىگەندە ياكى ئارخىپلانغان سۆھبەتلەر تىزىملىكىگە كىرگىنىڭىزدە، ئۇلار يەنىلا كۆرۈنىدۇ.", + "Do you really want to leave \"{displayName}\"?" : "راستىنلا \"{displayName}\" دىن ئايرىلغۇڭىز بارمۇ؟", + "You can archive this conversation instead." : "ئۇنىڭ ئورنىغا بۇ سۆھبەتنى ئارخىپلاشتۇرالايسىز.", + "Leave conversation" : "سۆھبەتتىن ۋاز كېچىڭ", + "You need to promote a new moderator before you can leave the conversation" : "سۆھبەتتىن ئايرىلىشتىن بۇرۇن يېڭى رىياسەتچىنى تەشۋىق قىلىشىڭىز كېرەك", + "Delete conversation" : "سۆھبەتنى ئۆچۈرۈڭ", + "Do you really want to delete \"{displayName}\"?" : "راستىنلا \"{displayName}\" نى ئۆچۈرمەكچىمۇ؟", + "Error while deleting conversation" : "سۆھبەتنى ئۆچۈرگەندە خاتالىق", + "Delete all chat messages" : "بارلىق پاراڭ ئۇچۇرلىرىنى ئۆچۈرۈڭ", + "Do you really want to delete all messages in \"{displayName}\"?" : "«{displayName}» دىكى بارلىق ئۇچۇرلارنى ئۆچۈرمەكچىمۇ؟", + "Error while clearing chat history" : "پاراڭلىشىش تارىخىنى تازىلاشتا خاتالىق", + "Be careful, these actions cannot be undone." : "ئېھتىيات قىلىڭ ، بۇ ھەرىكەتلەرنى ئەمەلدىن قالدۇرغىلى بولمايدۇ.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "سۆھبەت ئاخىرلاشقاندىن كېيىن ، يېپىق سۆھبەتكە قايتا قاتنىشىش ئۈچۈن تەكلىپ قىلىش كېرەك. ئوچۇق سۆھبەتنى ھەر ۋاقىت قايتا جەم قىلغىلى بولىدۇ.", + "Permanently delete this conversation." : "بۇ سۆھبەتنى مەڭگۈلۈك ئۆچۈرۈڭ.", + "Delete chat messages" : "پاراڭ ئۇچۇرلىرىنى ئۆچۈرۈڭ", + "Permanently delete all the messages in this conversation." : "بۇ سۆھبەتتىكى بارلىق ئۇچۇرلارنى مەڭگۈلۈك ئۆچۈرۈڭ.", + "_%n hour_::_%n hours_" : ["%n سائەت","%n سائەت"], + "_%n day_::_%n days_" : ["%n كۈن","%n كۈن"], + "_%n week_::_%n weeks_" : ["%n ھەپتە","%n ھەپتە"], + "Custom expiration time" : "ئىختىيارى ئىشلىتىش ۋاقتى", + "Message expiration disabled" : "ئۇچۇرنىڭ مۇددىتى چەكلەنگەن", + "Message expiration set: {duration}" : "ئۇچۇرنىڭ ۋاقتى: {duration}", + "Error when trying to set message expiration" : "ئۇچۇرنىڭ مۇددىتى توشماقچى بولغاندا خاتالىق", + "Message expiration" : "ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "پاراڭلىشىش ئۇچۇرلىرى مەلۇم ۋاقىتتىن كېيىن توشىدۇ. ئەسكەرتىش: پاراڭدا ھەمبەھىرلەنگەن ھۆججەتلەر ئىگىسى ئۈچۈن ئۆچۈرۈلمەيدۇ ، ئەمما سۆھبەتتە ئەمدى ھەمبەھىرلەنمەيدۇ.", + "Set message expiration" : "ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Current message expiration" : "نۆۋەتتىكى ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Password copied to clipboard" : "پارول كۆچۈرۈش تاختىسىغا كۆچۈرۈلدى", + "Password could not be copied" : "پارولنى كۆچۈرگىلى بولمىدى", + "Guest access" : "مېھمان زىيارەت قىلىش", + "Breakout rooms are not allowed in public conversations." : "ئاممىۋى پاراڭلاردا دەم ئېلىش ئۆيى رۇخسەت قىلىنمايدۇ.", + "Allow guests to join this conversation via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق بۇ سۆھبەتكە قاتنىشىشىغا يول قويۇڭ", + "Password protection" : "پارول قوغداش", + "This conversation is password-protected. Guests need password to join" : "بۇ سۆھبەت مەخپىي نومۇر بىلەن قوغدىلىدۇ. مىھمانلار مەخپىي نۇمۇر ئارقىلىق كىرىدۇ", + "Password protection is needed for public conversations" : "ئاممىۋى سۆھبەتلەرنى پارول بىلەن قوغداش كېرەك", + "Set a password" : "پارول بەلگىلەڭ", + "Change password" : "پارولنى ئۆزگەرتىڭ", + "Enter new password" : "يېڭى پارول كىرگۈزۈڭ", + "Save password" : "پارولنى ساقلاڭ", + "Copy password" : "پارول كۆچۈر", + "Guests are allowed to join this conversation via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق بۇ سۆھبەتكە قاتنىشىشىغا رۇخسەت قىلىنىدۇ", + "Guests are not allowed to join this conversation" : "مېھمانلارنىڭ بۇ سۆھبەتكە قاتنىشىشىغا رۇخسەت قىلىنمايدۇ", + "Resend invitations" : "تەكلىپنامىنى قايتۇرۇڭ", + "This conversation is open to both registered users and users created with the Guests app" : "بۇ سۆھبەت مېھمانلار دېتالى بىلەن قۇرۇلغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەر ئۈچۈن ئوچۇق", + "This conversation is open to registered users" : "بۇ سۆھبەت تىزىملاتقان ئابونتلارغا ئوچۇق", + "This conversation is limited to the current participants" : "بۇ سۆھبەت نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىنىدۇ", + "You opened the conversation to both registered users and users created with the Guests app" : "سىز مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتىڭىز", + "Error occurred when opening or limiting the conversation" : "سۆھبەتنى ئاچقاندا ياكى چەكلىگەندە خاتالىق كۆرۈلدى", + "Open conversation to registered users, showing it in search results" : "تىزىملاتقان ئىشلەتكۈچىلەرگە سۆھبەتنى ئېچىڭ ، ئىزدەش نەتىجىسىدە كۆرسىتىڭ", + "Also open to users created with the Guests app" : "مېھمانلار دېتالى بىلەن قۇرۇلغان ئىشلەتكۈچىلەرگىمۇ ئېچىڭ", + "Open conversation" : "ئوچۇق سۆھبەت", + "Set language spoken in calls" : "بۇ چاقىرىقتا سۆزلەنگەن تىلنى بىكىت", + "Languages could not be loaded" : "تىلنى يۈكلىگىلى بولمىدى", + "Loading languages …" : "تىللارنى يۈكلەۋاتىدۇ ...", + "Invalid language" : "ئىناۋەتسىز تىل", + "Default language (English)" : "كۆڭۈلدىكى تىل (ئىنگىلىزچە)", + "Default live transcription language set" : "كۆڭۈلدىكى نەق-مەيدان ترانسكرىپسىيەلەشنى تىللىرى", + "Live transcription language set: {languageName}" : " نەق-مەيدان ترانسكرىپسىيەلەش تىللىرى: {languageName}", + "Error when trying to set live transcription language" : " نەق-مەيدان ترانسكرىپسىيەلەش تىلىنى بېكىتىۋاتقاندا خاتالىق كۆرۈلدى", + "Start time: {date}" : "باشلىنىش ۋاقتى: {date}", + "Start time has been updated" : "باشلىنىش ۋاقتى يېڭىلاندى", + "Error occurred while updating start time" : "باشلىنىش ۋاقتىنى يېڭىلىغاندا خاتالىق كۆرۈلدى", + "Enabling the lobby will remove non-moderators from the ongoing call." : "لوبىسىنى قوزغىتىپ ، رىياسەتچى بولمىغان تېلېفوننى ئۆچۈرۈۋېتىدۇ.", + "Enable lobby, restricting the conversation to moderators" : "لوبىنى قوزغىتىڭ ، رىياسەتچىلەر بىلەن سۆھبەتنى چەكلەڭ", + "Meeting start time" : "يىغىن باشلىنىش ۋاقتى", + "Start time (optional)" : "باشلاش ۋاقتى (ئىختىيارى)", + "Import email participants" : "ئېلىخەت قاتناشقۇچىلىرىنى كىرگۈز", + "You can import a list of email participants from a CSV file." : "CSV ھۆججىتىدىن ئېلخەت قاتناشقۇچىلىرىنىڭ تىزىملىكىنى ئىمپورت قىلالايسىز.", + "Poll drafts" : "راي سىناش لايىھىسى", + "Browse poll drafts" : "راي سىناش لايىھىسىنى كۆرۈڭ", + "Error occurred when locking the conversation" : "سۆھبەتنى قۇلۇپلىغاندا خاتالىق كۆرۈلدى", + "Error occurred when unlocking the conversation" : "سۆھبەتنى ئاچقاندا خاتالىق كۆرۈلدى", + "Lock conversation" : "سۆھبەتنى قۇلۇپلاڭ", + "This will also terminate the ongoing call." : "بۇمۇ داۋاملىشىۋاتقان تېلېفوننى ئاخىرلاشتۇرىدۇ.", + "Lock the conversation to prevent anyone to post messages or start calls" : "سۆھبەتنى قۇلۇپلاپ ، ھەر قانداق كىشىنىڭ ئۇچۇر يوللىشى ياكى تېلېفون باشلىشىنىڭ ئالدىنى ئالىدۇ", + "Edit" : "تەھرىر", + "More information" : "تېخىمۇ كۆپ ئۇچۇرلار", + "Delete" : "ئۆچۈر", + "Add new bridged channel to current conversation" : "نۆۋەتتىكى سۆھبەتكە يېڭى كۆۋرۈك قانىلى قوشۇڭ", + "unknown state" : "نامەلۇم دۆلەت", + "running" : "ئىجرا بولۇۋاتىدۇ", + "not running, check Matterbridge log" : "ئىجرا بولمايدۇ ، Matterbridge خاتىرىسىنى تەكشۈرۈڭ", + "not running" : "ئىجرا ئەمەس", + "Bridge saved" : "كۆۋرۈك ساقلاندى", + "You can bridge channels from various instant messaging systems with Matterbridge." : "سىز Matterbridge ئارقىلىق ھەرخىل تېز ئۇچۇر سىستېمىسىدىكى قاناللارنى كۆۋرۈك قىلالايسىز.", + "More info on Matterbridge" : "Matterbridge ھەققىدە تېخىمۇ كۆپ ئۇچۇرلار", + "Messaging systems" : "ئۇچۇر سىستېمىسى", + "Enable bridge" : "كۆۋرۈكنى قوزغىتىش", + "Show Matterbridge log" : "Matterbridge خاتىرىسىنى كۆرسەت", + "Log content" : "خاتىرە مەزمۇنى", + "Only moderators are allowed to mention @all" : "پەقەت رىياسەتچىلەرلا @all نى تىلغا ئالىدۇ", + "All participants are allowed to mention @all" : "بارلىق قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا رۇخسەت قىلىنىدۇ", + "Participants are now allowed to mention @all." : "ھازىر قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا رۇخسەت قىلىندى.", + "Mentioning @all has been limited to moderators." : "@All نى تىلغا ئېلىش پەقەت رىياسەتچىلەر بىلەنلا چەكلىنىپ قالدى.", + "Allow participants to mention @all" : "قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا يول قويۇڭ", + "Mention permissions" : "ئىجازەتنامە", + "Notifications" : "ئۇقتۇرۇش", + "Notify about calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفونلار ھەققىدە خەۋەر قىلىڭ", + "Important conversation" : "مۇھىم سۆھبەت", + "\"Do not disturb\" user status is ignored for important conversations" : "\"دەخلى قىلما\" ئىشلەتكۈچى ھالىتى مۇھىم سۆھبەتلەرگە ئىشلىمەيدۇ", + "Sensitive conversation" : "نازۇك سۆھبەت", + "Message preview will be disabled in conversation list and notifications" : "سۆھبەت تىزىملىكى ۋە ئۇقتۇرۇشلاردا خەۋەرنى ئالدىن كۆرۈش چەكلىنىدۇ", + "Recording consent is required for calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفون ئۈچۈن خاتىرىلەش رۇخسىتى تەلەپ قىلىنىدۇ", + "Recording consent is not required for calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفون ئۈچۈن خاتىرىلەش رۇخسىتى تەلەپ قىلىنمايدۇ", + "Recording consent requirement was updated" : "خاتىرىلەش ئىجازەت تەلىپى يېڭىلاندى", + "Error occurred while updating recording consent" : "خاتىرىلەش ئىجازىتىنى يېڭىلىغاندا خاتالىق كۆرۈلدى", + "Recording Consent" : "خاتىرىلەش", + "Recording consent cannot be changed once a call or breakout session has started." : "چاقىرىش ياكى بۆسۈش يىغىنى باشلانغاندىن كېيىن خاتىرىلەش ئىجازەتنامىسىنى ئۆزگەرتىشكە بولمايدۇ.", + "Require recording consent before joining call in this conversation" : "بۇ سۆھبەتكە چاقىرىشقا قاتنىشىشتىن بۇرۇن خاتىرىلەش ئىجازىتىنى تەلەپ قىلىڭ", + "Recording consent is required for all calls" : "بارلىق تېلېفونلاردا خاتىرىلەش رۇخسىتى تەلەپ قىلىنىدۇ", + "SIP dial-in is now possible without PIN requirement" : "PIN تەلىپى بولمىسا SIP چاقىرىش ھازىر مۇمكىن", + "SIP dial-in is now enabled" : "ھازىر SIP چاقىرىش ئىقتىدارى قوزغىتىلدى", + "SIP dial-in is now disabled" : "SIP چاقىرىش ھازىر چەكلەنگەن", + "Error occurred when enabling SIP dial-in" : "SIP چاقىرىشنى قوزغىغاندا خاتالىق كۆرۈلدى", + "Error occurred when disabling SIP dial-in" : "SIP چاقىرىشنى چەكلىگەندە خاتالىق كۆرۈلدى", + "Phone and SIP dial-in" : "تېلېفون ۋە SIP چاقىرىش", + "Enable phone and SIP dial-in" : "تېلېفون ۋە SIP چاقىرىشنى قوزغىتىڭ", + "Allow to dial-in without a PIN" : "PIN بولمىسا تېلېفون ئۇرسىڭىز بولىدۇ", + "Ongoing" : "يۈز بېرىۋاتقان", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n كىشلەر قۇبۇل قىلدى","%n كىشلەر قۇبۇل قىلدى"], + "_%n person declined_::_%n people declined_" : ["%n كىشلەر رەت قىلدى","%n كىشلەر رەت قىلدى"], + "_and %n other attachment_::_and %n other attachments_" : ["ھەمدە باشقا %n قۇشۇمچە ھۆججەتلەر","ھەمدە باشقا %n قۇشۇمچە ھۆججەتلەر"], + "With {displayName}" : "{displayName} بىلەن", + "In {conversation}" : "{conversation} دا", + "View attachment" : "قۇشۇمچە ھۆججەتلەرنى كۆر", + "Join" : "قوشۇلۇڭ", + "View conversation" : "سۆھبەتنى كۆر", + "View event on Calendar" : "پائالىيەتنى يىلنامىدە كۆر", + "Error while creating the conversation" : "سۆھبەتنى قۇرغاندا خاتالىق", + "Hello, {displayName}" : "ياخشىمۇسىز، {displayName}", + "Start meeting now" : "يىغىننى ھازىر باشلا", + "Give your meeting a title" : "يىغىنىڭىزغا بىر ماۋزو قۇيۇڭ", + "Create and copy link" : "ئۇلىنىش قۇرۇڭ ھەمدە كۆچۈرۈڭ", + "Create a new conversation" : "يېڭى سۆھبەت قۇر", + "Join open conversations" : "ئوچۇق سۆھبەتكە قاتنىشىڭ", + "Call a phone number" : "تېلېفون نومۇرىغا تېلېفون قىلىڭ", + "Scroll backward" : "كەينىگە قايت", + "Scroll forward" : "ئالدىغا سىيرىل", + "Schedule meetings" : "يىغىن ئورۇنلاشتۇر", + "You don't have any upcoming meetings" : "سىزنىڭ كىلىدىغان ھېچقانداق يىغىنىڭىز يوق", + "Open calendar" : "كالېندارنى ئېچىڭ", + "Unread mentions" : "ئوقۇلمىغان تىلغا ئېلىنغان", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "سىز تىلغا ئېلىنغان ئۇچۇرلار بۇ يەردە كۆرسىتىلىدۇ. سىز كىشىلەرنى تىلغا ئېلىش ئۈچۈن @ بەلگىسىنى كىرگۈزۈپ، ئاندىن ئۇلارنىڭ ئىسمىنى يازسىڭىز بولىدۇ.", + "Upcoming reminders" : "كىلىدىغان ئەسكەرتمىلەر", + "Message reminders" : "ئۇچۇر ئەسكەرتمىلەر", + "Set a reminder on a message to be notified" : "ئۇچۇرغا ئۇقتۇرۇش قىلىنىدىغان ئەسكەرتىش قويۇڭ", + "Start a group conversation" : "گۇرۇپپا سۆھبىتىنى باشلاڭ", + "Create conversation" : "سۆھبەت قۇرۇش", + "Enter your name" : "ئىسمىڭىزنى كىرگۈزۈڭ", + "Submit name and join" : "ئىسىم يوللاڭ ۋە قوشۇلۇڭ", + "Do you already have an account?" : "ھېساباتىڭىز بارمۇ؟", + "Log in" : "كىرىڭ", + "Error while verifying uploaded file" : "يۈكلەنگەن ھۆججەتنى تەكشۈرۈشتە خاتالىق يۈز بەردى", + "Uploaded file is verified" : "چىقىرىلغان ھۆججەت تەكشۈرۈلدى", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "مەزمۇن فورماتى پەش بىلەن ئايرىلغان قىممەتلەر (CSV): 1- باشلىق قۇر تەلەپ قىلىنىدۇ ۋە 2\"name\",\"email\"2 ياكى پەقەت 3\"email\"34- ھەر قۇردا بىردىن كىرگۈزۈش (مەسىلەن 5\"John Doe\",\"john@example.tld\"5)", + "Participants added successfully" : "قاتناشقۇچى مۇۋەپپەقىيەتلىك قوشۇلدى", + "Error while adding participants" : "قاتناشقۇچىنى قوشقاندا خاتالىق", + "Import a file" : "بىر ھۆججەت كىرگۈز", + "Browse" : "زىيارەت قىل", + "Verifying uploaded file …" : "يۈكلەنگەن ھۆججەتنى تەكشۈرۋاتىدۇ..", + "This might take a moment" : "بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن", + "Send invitations" : "تەكلىپنامە يوللا", + "_%n invalid email_::_%n invalid emails_" : ["ئىناۋەتسىز ئېلېكترونلۇق خەت","ئىناۋەتسىز ئېلېكترونلۇق خەت"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n ئېلىخەت ئاللىبۇرۇن كىرگۈزۈلگەن ياكى كۆپەيتىلىدۇ","%n ئېلىخەت ئاللىبۇرۇن كىرگۈزۈلگەن ياكى كۆپەيتىلىدۇ"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n تەكلىپ ئەۋەتىلدۇ","%n تەكلىپ ئەۋەتىلدۇ"], + "An error occurred while calling a phone number" : "تېلېفون نومۇرىغا تېلېفون قىلغاندا خاتالىق كۆرۈلدى", + "Phone number could not be called: {error}" : "تېلېفون نومۇرىنى چاقىرىشقا بولمايدۇ: {error}", + "Phone number could not be called" : "تېلېفون نومۇرىغا تېلېفون قىلغىلى بولمايدۇ", + "Search participants or phone numbers" : "قاتناشقۇچىلار ياكى تېلېفون نومۇرىنى ئىزدەڭ", + "Creating the conversation …" : "سۆھبەت قۇرۇش…", + "Mark as read" : "ئوقۇغاندەك بەلگە قويۇڭ", + "Mark as unread" : "ئوقۇلمىغان دەپ بەلگە قويۇڭ", + "Remove from favorites" : "ياقتۇردىغاندىن چىقىرۋەت", + "Add to favorites" : "ياقتۇردىغانغا قوش", + "Unarchive conversation" : "قالايمىقان سۆھبەت", + "Ignore \"Do not disturb\"" : "\"دەخلى قىلما\" غا كارىڭ بولمىسۇن", + "You need to promote a new moderator before you can leave the conversation." : "سۆھبەتتىن ئايرىلىشتىن بۇرۇن يېڭى رىياسەتچىنى تەشۋىق قىلىشىڭىز كېرەك.", + "Conversation actions" : "سۆھبەت ھەرىكىتى", + "Notify about calls" : "بارلىق چاقىرىقلارغا ئۇقتۇر", + "Hide message text" : "ئۇچۇر تىكىستىنى يۇشۇر", + "Pending invitations" : "تەكلىپنامە ساقلىنىۋاتىدۇ", + "From {user} at {remoteServer}" : "{user} مۇلازىمېتىردىكى {remoteServer} دىن", + "Decline invitation" : "تەكلىپنى رەت قىلىش", + "Accept invitation" : "تەكلىپنى قوبۇل قىلىڭ", + "No pending invitations" : "كۈتۈلمىگەن تەكلىپلەر يوق", + "Home" : "ئۆي", + "Unread" : "ئوقۇمىغان", + "Mentions" : "تىلغا ئېلىشلار", + "Meetings" : "يىغىنلار", + "Alphabetically" : "ئېلىپبە شەكلىدە", + "No followed threads" : "ئەگەشكەن يىپلار يوق", + "No matches found" : "ماس كەلمىدى", + "No conversations found" : "پاراڭ تېپىلمىدى", + "You have no archived conversations." : "ئارخىپ پاراڭلىرىڭىز يوق.", + "Subscribe to an existing thread or start your own." : "مەۋجۇت بىر يىپقا مۇشتەرى بول ياكى ئۆزەڭنىڭكىنى باشلا", + "You have no unread mentions." : "سىزدە ئوقۇلمىغان تىلغا ئېلىنمىدى.", + "You have no unread messages." : "ئوقۇمىغان ئۇچۇرلىرىڭىز يوق.", + "An error occurred while performing the search" : "ئىزدەش جەريانىدا خاتالىق كۆرۈلدى", + "Conversation list" : "سۆھبەت تىزىملىكى", + "Filter conversations by" : "سۆھبەتنى بىلەن سۈز", + "Unread messages" : "ئوقۇلمىغان ئۇچۇرلار", + "Meeting conversations" : "يىغىن سۆھبەتلىرى", + "Clear filters" : "سۈزگۈچنى تازىلاش", + "New personal note" : "يېڭى شەخسىي خاتىرە", + "Back to conversations" : "سۆھبەتكە قايتىش", + "Archived conversations" : "ئارخىپلاشتۇرۇلغان سۆھبەت", + "Threads" : "يىپلار", + "Clear filter" : "سۈزگۈچنى تازىلاش", + "Show more threads" : "جىقراق يىپنى كۆرسەت", + "App settings" : "ئەپ تەڭشىكى", + "Users" : "ئىشلەتكۈچىلەر", + "Groups" : "گۇرۇپپا", + "Teams" : "كوماندىلار", + "Federated users" : "فېدېراتسىيە ئىشلەتكۈچىلەر", + "New private conversation" : "يېڭى شەخسىي سۆھبەت", + "Other sources" : "باشقا مەنبەلەر", + "Open conversations" : "ئوچۇق سۆھبەت", + "No search results" : "ئىزدەش نەتىجىسى يوق", + "Users, groups and teams" : "ئىشلەتكۈچى ، گۇرۇپپا ۋە گۇرۇپپىلار", + "Users and groups" : "ئىشلەتكۈچى ۋە گۇرۇپپىلار", + "Users and teams" : "ئىشلەتكۈچى ۋە گۇرۇپپىلار", + "Groups and teams" : "گۇرۇپپا ۋە گۇرۇپپىلار", + "New group conversation" : "يېڭى گۇرۇپپا سۆھبىتى", + "The meeting will start soon" : "يىغىن پات يېقىندا باشلىنىدۇ", + "This meeting is scheduled for {startTime}" : "بۇ يىغىن {startTime} ئۈچۈن ئورۇنلاشتۇرۇلغان", + "You are currently waiting in the lobby" : "سىز ھازىر كۈتۈپخانىدا ساقلاۋاتىسىز", + "Select microphone" : "مىكروفوننى تاللاڭ", + "No microphone available" : "مىكروفون يوق", + "Select speaker" : "سۆزلىگۈچى تاللا", + "No speaker available" : "سۆزلىگۈچى يوق", + "Select camera" : "كامېرانى تاللاڭ", + "No camera available" : "كامېرا يوق", + "Select a device" : "ئۈسكۈنىنى تاللاڭ", + "Playing …" : "ئويناش…", + "Test speakers" : "سىناق ياڭراتقۇ", + "Test" : "سىناق", + "Devices" : "ئۈسكۈنىلەر", + "Backgrounds" : "تەگلىك", + "No audio" : "ئاۋاز يوق", + "No camera" : "كامېرا يوق", + "Display video as you will see it (mirrored)" : "سىننى كۆرگەندەك كۆرسىتىڭ (ئەينەك)", + "Display video as others will see it" : "سىننى باشقىلار كۆرگەندەك كۆرسىتىڭ", + "Calls are not supported in your browser" : "تور كۆرگۈڭىزدە چاقىرىشنى قوللىمايدۇ", + "Access to microphone is only possible with HTTPS" : "مىكروفونغا ئېرىشىش پەقەت HTTPS ئارقىلىقلا بولىدۇ", + "Access to microphone was denied" : "مىكروفونغا ئېرىشىش رەت قىلىندى", + "Error while accessing microphone" : "مىكروفوننى زىيارەت قىلغاندا خاتالىق", + "Access to camera is only possible with HTTPS" : "كامېراغا كىرىش پەقەت HTTPS ئارقىلىقلا مۇمكىن", + "The call is being recorded." : "تېلېفون خاتىرىلىنىۋاتىدۇ.", + "The call might be recorded." : "تېلېفون خاتىرىلەنگەن بولۇشى مۇمكىن.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "بۇ خاتىرىدە ئاۋازىڭىز ، كامېرادىكى سىن ۋە ئېكران ھەمبەھىرلىنىشىڭىز بولۇشى مۇمكىن. تېلېفونغا قاتنىشىشتىن بۇرۇن سىزنىڭ رۇخسىتىڭىز تەلەپ قىلىنىدۇ.", + "Give consent to the recording of this call" : "بۇ تېلېفوننىڭ خاتىرىسىگە قوشۇلۇڭ", + "Show more info" : "تېخىمۇ كۆپ ئۇچۇرنى كۆرسەت", + "Audio is not available" : "ئاۋاز يوق", + "Video is not available" : "سىن يوق", + "Start recording immediately with the call" : "چاقىرىش بىلەن دەرھال خاتىرىلەشنى باشلاڭ", + "Notify all participants about this call" : "بارلىق قاتناشقۇچىلارغا بۇ چاقىرىقنى ئۇقتۇر", + "Apply settings" : "تەڭشەكلەرنى ئىشلىتىڭ", + "Select virtual office background" : "مەۋھۇم ئىشخانا تەگلىكىنى تاللاڭ", + "Select virtual home background" : "مەۋھۇم ئائىلە تەگلىكىنى تاللاڭ", + "Select virtual abstract background" : "مەۋھۇم ئابستراكت تەگلىكنى تاللاڭ", + "Select virtual beach background" : "مەۋھۇم ساھىل تەگلىكىنى تاللاڭ", + "Select virtual park background" : "مەۋھۇم باغچا تەگلىكىنى تاللاڭ", + "Select virtual theater background" : "مەۋھۇم تىياتىر تەگلىكىنى تاللاڭ", + "Select virtual library background" : "مەۋھۇم كۇتۇپخانا تەگلىكىنى تاللاڭ", + "Select virtual space station background" : "مەۋھۇم بوشلۇق پونكىتى تەگلىكىنى تاللاڭ", + "Error while uploading the file" : "ھۆججەتنى يۈكلەۋاتقاندا خاتالىق", + "Select a file" : "ھۆججەت تاللاڭ", + "Invalid path selected" : "ئىناۋەتسىز يول تاللانغان", + "Select virtual background from file {fileName}" : "ھۆججەتتىن مەۋھۇم تەگلىكنى تاللاڭ {fileName}", + "Blur" : "تۇتۇق", + "Upload" : "يۈكلە", + "Files" : "ھۆججەتلەر", + "(editing)" : "(تەھرىرلەش)", + "(edited)" : "(تەھرىرلەندى)", + "The message has expired or has been deleted" : "ئۇچۇرنىڭ ۋاقتى توشتى ياكى ئۆچۈرۈلدى", + "Cancel quote" : "نەقىلنى بىكار قىلىڭ", + "24 hours" : "24 hours", + "7 days" : "7 كۈن", + "30 days" : "30 كۈن", + "Until unpin" : "مىخلاشتىن چىقارغىچە", + "Clear reminder – {timeLocale}" : "ئەسكەرتىشنى تازىلاش - {timeLocale}", + "Edited by {actor}" : "تەھرىرلىگەن {actor}", + "Pinned by you" : "سىز مىخلىدىڭىز", + "Pinned by {actor}" : "{actor} تەرىپىدىن مىخلاندى", + "Until {absoluteDate}" : "{absoluteDate} غىچە", + "Message text copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن ئۇچۇر تېكىستى", + "Message text could not be copied" : "ئۇچۇر تېكىستىنى كۆچۈرگىلى بولمايدۇ", + "Message forwarded to \"Note to self\"" : "ئۇچۇر «ئۆزىگە ئەسكەرتىش» كە يوللاندى", + "Error while forwarding message to \"Note to self\"" : "«ئۆزىڭىزگە ئەسكەرتىش» گە ئۇچۇر يوللاشتا خاتالىق", + "A reminder was successfully removed" : "ئەسكەرتىش مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى", + "Error occurred when removing a reminder" : "ئەسكەرتىشنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "A reminder was successfully set at {datetime}" : "ئەسكەرتىش {datetime} دا مۇۋەپپەقىيەتلىك تەڭشەلدى", + "Error occurred when creating a reminder" : "ئەسكەرتىش قۇرغاندا خاتالىق كۆرۈلدى", + "Add a reaction to this message" : "بۇ ئۇچۇرغا ئىنكاس قوشۇڭ", + "Reply" : "جاۋاب قايتۇر", + "More actions" : "تېخىمۇ كۆپ ھەرىكەت", + "Set reminder" : "ئەسكەرتىش بەلگىلەڭ", + "Pin message" : "مىخلاش ئۇچۇرى", + "Unpin message" : "مىختىن چىقىرىش ئۇچۇرى", + "Reply privately" : "شەخسىي جاۋاب قايتۇرۇڭ", + "Edit message" : "ئۇچۇرنى تەھرىرلەش", + "Copy message" : "ئۇچۇرنى كۆچۈرۈڭ", + "Copy message link" : "ئۇچۇر ئۇلانمىسىنى كۆچۈرۈڭ", + "Go to file" : "ھۆججەتكە بېرىڭ", + "Download file" : "ھۆججەت چۈشۈرۈش", + "Go to thread" : "يىپقا بار", + "Edit thread details" : "يىپ تەپسىلاتىنى تەھرىرلە", + "Forward message" : "ئۇچۇر يوللاش", + "Translate" : "تەرجىمە", + "Set custom reminder" : "ئىختىيارى ئەسكەرتىش بەلگىلەڭ", + "Keep pinned for" : "مىخلاشنى ساقلا", + "Set custom period" : "خاس مەزگىل بېكىت", + "Close reactions menu" : "ئىنكاس تىزىملىكىنى تاقاش", + "React with {emoji}" : "{emoji} بىلەن ئىنكاس قايتۇرۇڭ", + "React with another emoji" : "باشقا بىر emoji بىلەن ئىنكاس قايتۇرۇڭ", + "Choose a conversation to forward the selected message." : "تاللانغان ئۇچۇرنى يوللاش ئۈچۈن سۆھبەتنى تاللاڭ.", + "Error while forwarding message" : "ئۇچۇر يوللاشتا خاتالىق", + "The message has been forwarded to {selectedConversationName}" : "بۇ ئۇچۇر {selectedConversationName} غا يوللاندى", + "Dismiss" : "خىزمەتتىن ھەيدەش", + "Go to conversation" : "سۆھبەتكە بېرىڭ", + "Detect language" : "تىلنى ئېنىقلاش", + "The message could not be translated" : "بۇ ئۇچۇرنى تەرجىمە قىلىشقا بولمىدى", + "Translation copied to clipboard" : "تەرجىمە تاختىسىغا كۆچۈرۈلگەن", + "Translation could not be copied" : "تەرجىمىنى كۆچۈرگىلى بولمىدى", + "Translate message" : "ئۇچۇرنى تەرجىمە قىلىڭ", + "Source language to translate from" : "تەرجىمە قىلىدىغان مەنبە تىلى", + "Translate from" : "دىن تەرجىمە قىلىڭ", + "Target language to translate into" : "تەرجىمە قىلىدىغان نىشان تىل", + "Translate to" : "تەرجىمە قىلىڭ", + "Translating" : "تەرجىمە قىلىش", + "Copy translated text" : "تەرجىمە قىلىنغان تېكىستنى كۆچۈرۈڭ", + "Send now" : "ھازىر ئەۋەتىڭ", + "Message read by everyone who shares their reading status" : "ئوقۇش ھالىتىنى ھەمبەھىرلىگەن ھەممە ئادەم ئوقۇغان ئۇچۇر", + "Message sent" : "ئۇچۇر ئەۋەتىلدى", + "Sent without notification" : "ئۇقتۇرۇشسىز ئەۋەتىلدى", + "Deleting message" : "ئۇچۇرنى ئۆچۈرۈش", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "ئۇچۇر مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى ، ئەمما بىر bot ياكى Matterbridge سەپلەندى ، بۇ ئۇچۇر باشقا مۇلازىمەتلەرگە تارقىتىلغان بولۇشى مۇمكىن", + "Message deleted successfully" : "ئۇچۇر مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى", + "Message could not be deleted because it is too old" : "ئۇچۇر بەك كونا بولغاچقا ئۆچۈرۈلمىدى", + "Only normal chat messages can be deleted" : "پەقەت نورمال پاراڭلىشىش ئۇچۇرلىرىنىلا ئۆچۈرگىلى بولىدۇ", + "An error occurred while deleting the message" : "ئۇچۇرنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "Pinned" : "مىخلاندى", + "Your browser does not support playing audio files" : "توركۆرگۈڭىز ئاۋاز ھۆججىتىنى قويۇشنى قوللىمايدۇ", + "Contact" : "ئالاقىلىشىڭ", + "{stack} in {board}" : "{board} دا {stack}", + "Deck Card" : "پالۋان كارتىسى", + "Remove {fileName}" : "ئۆچۈرۈڭ {fileName}", + "Open this location in OpenStreetMap" : "بۇ ئورۇننى OpenStreetMap دا ئېچىڭ", + "_%n reply_::_%n replies_" : ["%n جاۋاپ","%n جاۋاپلار"], + "Sending message" : "ئۇچۇر ئەۋەتىش", + "Failed to send the message. Click to try again" : "ئۇچۇر ئەۋەتەلمىدى. قايتا سىناڭ", + "Not enough free space to upload file" : "ھۆججەت يوللاشقا يېتەرلىك بوشلۇق يوق", + "You cannot send messages to this conversation at the moment" : "ھازىرچە بۇ سۆھبەتكە ئۇچۇر ئەۋەتەلمەيسىز", + "Could not update the message" : "ئۇچۇرنى يېڭىلىيالمىدى", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["راي-سىناش ئورگىنالى • %n تاللانما","راي-سىناش ئورگىنالى • %n تاللانمىلار"], + "_%n vote_::_%n votes_" : ["%n vote","%n بېلەت"], + "Edit poll draft" : "راي سىناش لايىھىسىنى تەھرىرلە", + "Delete poll draft" : "راي سىناش لايىھىسىنى ئۆچۈرۈڭ", + "Open poll" : "راي سىناش", + "See results" : "نەتىجىنى كۆرۈڭ", + "Reactions" : "ئىنكاس", + "No permission to post reactions in this conversation" : "بۇ سۆھبەتتە ئىنكاس يوللاشقا ئىجازەت يوق", + "and {participant}" : "ۋە {participant}", + "_and %n other participant_::_and %n other participants_" : ["ھەمدە باشقا %n قاتناشقۇچى","ھەمدە باشقا %n قاتناشقۇچىلار"], + "Show all reactions" : "بارلىق ئىنكاسلارنى كۆرسەت", + "Add more reactions" : "تېخىمۇ كۆپ ئىنكاسلارنى قوشۇڭ", + "Show or collapse system messages" : "سىستېما ئۇچۇرلىرىنى كۆرسىتىش ياكى يىمىرىلىش", + "No messages" : "ھېچقانداق ئۇچۇر يوق", + "All messages have expired or have been deleted." : "بارلىق ئۇچۇرلارنىڭ ۋاقتى توشتى ياكى ئۆچۈرۈلدى.", + "{author} (pinned by you)" : "{author} (سىز مىخلىدىڭىز)", + "{author} (pinned by {actor})" : "{author} ({actor} مىخلىدى)", + "Unpin" : "مىخلىما", + "Cancel search" : "ئىزدەشنى ئەمەلدىن قالدۇرۇڭ", + "Add a phone number" : "تېلېفون نومۇرىنى قوشۇڭ", + "Error: A password is required to create the conversation." : "خاتالىق: بۇ سۆھبەتنى قۇرۇش ئۈچۈن پارول تەلەپ قىلىندى.", + "All set, the conversation \"{conversationName}\" was created." : "ھەممىسى تەڭشەلدى ، سۆھبەت \"{conversationName}\" قۇرۇلدى.", + "Create a new group conversation" : "يېڭى گۇرۇپپا سۆھبىتى قۇر", + "Add participants" : "قاتناشقۇچىلارنى قوشۇڭ", + "Maximum length exceeded ({maxlength} characters)" : "ئەڭ چوڭ ئۇزۇنلۇقىتىن ({maxlength}) ئېشىپ كەتتى", + "Conversation visibility" : "سۆھبەتنىڭ كۆرۈنۈشچانلىقى", + "Allow guests to join via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق قاتنىشىشىغا يول قويۇڭ", + "Enter password" : "پارول كىرگۈزۈڭ", + "This conversation has been locked" : "بۇ سۆھبەت قۇلۇپلاندى", + "No permission to post messages in this conversation" : "بۇ سۆھبەتتە ئۇچۇر يوللاشقا ئىجازەت يوق", + "Joining conversation …" : "سۆھبەتكە قاتنىشىش…", + "Write a message without notification" : "ئۇقتۇرۇشسىز بىر ئۇچۇر ياز", + "Create a thread silently" : "بىر يىپنى جىمجىت قۇر", + "Create a thread" : "بىر يىپ قۇر", + "Send message silently" : "ئۈن-تىنسىز ئۇچۇر ئەۋەتىڭ", + "Send message" : "ئۇچۇر ئەۋەتىڭ", + "Send without notification" : "ئۇقتۇرۇشسىز ئەۋەتىڭ", + "The participant will not be notified about new messages" : "قاتناشقۇچىلارغا يېڭى ئۇچۇرلار توغرىسىدا ئۇقتۇرۇش قىلىنمايدۇ", + "Participants will not be notified about new messages" : "قاتناشقۇچىلارغا يېڭى ئۇچۇرلار توغرىسىدا ئۇقتۇرۇش قىلىنمايدۇ", + "Thread title is required" : "يىپ ماۋزوسى تەلەپ قىلىنىدۇ", + "Message text is required" : "ئۇچۇر مەزمۇنى تەلەپ قىلىنىدۇ", + "The message could not be edited" : "بۇ ئۇچۇرنى تەھرىرلىگىلى بولمىدى", + "File to share" : "ھەمبەھىرلىنىدىغان ھۆججەت", + "File upload is not available in this conversation" : "بۇ سۆھبەتتە ھۆججەت يوللاش مۇمكىن ئەمەس", + "Add emoji" : "Emoji نى قوشۇڭ", + "Adding a mention will only notify users who did not read the message." : "ئەسكەرتىش قوشقاندا ئۇچۇرنى ئوقۇمىغان ئابونتلارغا ئۇقتۇرۇش قىلىدۇ.", + "Thread title" : "يىپ ماۋزوسى", + "Send later" : "كېيىن ئەۋەتىڭ", + "Cancel editing" : "تەھرىرلەشنى ئەمەلدىن قالدۇرۇڭ", + "{user} is out of office and might not respond." : "{user} ئىشخانىدىن چىقتى ، جاۋاب قايتۇرماسلىقى مۇمكىن.", + "Absence period: {startDate} - {endDate}" : "يوقلۇق مەزگىلى: {startDate} - {endDate}", + "Replacement:" : "ئالماشتۇرۇش: ", + "Share from {nextcloud}" : "{nextcloud} دىن ئورتاقلىشىش", + "Share from Files" : "ھۆججەتلەردىن ئورتاقلىشىش", + "Share files to the conversation" : "سۆھبەتكە ھۆججەتلەرنى ھەمبەھىرلەڭ", + "Upload from device" : "ئۈسكۈنىدىن يۈكلەش", + "Create new poll" : "يېڭى راي سىناش", + "Smart picker" : "ئەقىللىق تاللىغۇچ", + "Record voice message" : "ئاۋازلىق ئۇچۇرنى خاتىرىلەڭ", + "End recording and send" : "خاتىرىلەشنى ئاخىرلاشتۇرۇڭ", + "Dismiss recording" : "خاتىرىسىنى ئەمەلدىن قالدۇرۇش", + "Access to the microphone was denied" : "مىكروفونغا كىرىش رەت قىلىندى", + "Microphone either not available or disabled in settings" : "مىكروفون تەڭشەكلەردە ئىشلەتكىلى بولمايدۇ ياكى چەكلىنىدۇ", + "Error while recording audio" : "ئاۋاز خاتىرىلەۋاتقاندا خاتالىق", + "Generating summary of unread messages …" : "ئوقۇلمىغان ئۇچۇرلارغا خۇلاسە يېزىۋاتىدۇ...", + "Summary is AI generated and might contain mistakes" : "خۇلاسىنى AI يازغان ھەمدە خاتالىقلار بولىشى مۇمكىن", + "Error occurred during a summary generation" : "خۇلاسە يېزىۋاتقاندا جەريانىدا خاتالىق كۆرۈلدى", + "New file" : "يېڭى ھۆججەت", + "Blank" : "ئوچۇق", + "Error while creating file" : "ھۆججەت قۇرغاندا خاتالىق", + "Create and share a new file" : "يېڭى ھۆججەت قۇرۇش ۋە ئورتاقلىشىش", + "Name of the new file" : "يېڭى ھۆججەتنىڭ ئىسمى", + "Create file" : "ھۆججەت قۇرۇش", + "Someone is typing …" : "بىرەيلەن خەت يېزىۋاتىدۇ…", + "{user1} is typing …" : "{user1} يېزىۋاتىدۇ…", + "{user1} and {user2} are typing …" : "{user1} ۋە {user2} يېزىۋاتىدۇ…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ۋە {user3} يېزىۋاتىدۇ…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}، {user2}، {user3} ھەمدە %n يېزىۋاتىدۇ","{user1}، {user2}، {user3} ھەمدە %n باشقىلار يېزىۋاتىدۇ"], + "Add more files" : "تېخىمۇ كۆپ ھۆججەت قوشۇڭ", + "Send" : "يوللا", + "In this conversation {user} can:" : "بۇ سۆھبەتتە {user} بولىدۇ:", + "Edit default permissions for participants in {conversationName}" : " {conversationName} غا قاتناشقۇچىلارنىڭ سۈكۈتتىكى ئىجازەتلىرىنى تەھرىرلەڭ", + "Start a call" : "تېلېفوننى باشلاڭ", + "Skip the lobby" : "لوبىدىن ئاتلاڭ", + "Can post messages and reactions" : "ئۇچۇر ۋە ئىنكاسلارنى يوللىيالايدۇ", + "Enable the microphone" : "مىكروفوننى قوزغىتىڭ", + "Enable the camera" : "كامېرانى قوزغىتىڭ", + "Share the screen" : "ئېكراننى ھەمبەھىرلەڭ", + "Update permissions" : "ئىجازەتلەرنى يېڭىلاش", + "Updating permissions" : "ئىجازەتلەرنى يېڭىلاش", + "No poll drafts" : "راي سىناش لايىھىسى يوق", + "There is no poll drafts yet saved for this conversation" : "بۇ سۆھبەت ئۈچۈن ھازىرغىچە ھېچقانداق بېلەت تاشلاش لايىھىسى ساقلانمىدى", + "Create poll in {name}" : "{name} نامىدا راي-سىناش قۇر", + "Create poll" : "راي سىناش", + "Error while importing poll" : "راي سىناشتا خاتالىق", + "Question" : "سوئال", + "Ask a question" : "سوئال سوراڭ", + "Import draft from file" : "ھۆججەتنى ھۆججەتتىن ئەكىرىڭ", + "Answers" : "جاۋاب", + "Answer {option}" : "جاۋاب {option}", + "Delete poll option" : "راي سىناش تاللانمىسىنى ئۆچۈرۈڭ", + "Add answer" : "جاۋاب قوشۇڭ", + "Settings" : "تەڭشەكلەر", + "Anonymous poll" : "نامسىز راي سىناش", + "Multiple answers" : "كۆپ جاۋاب", + "Save as draft" : "لايىھە سۈپىتىدە ساقلىۋېلىڭ", + "Export draft to file" : "ھۆججەتنى ھۆججەتكە چىقىرىش", + "You voted for this option" : "سىز بۇ تاللاشقا بېلەت تاشلىدىڭىز", + "End poll" : "راي سىناشنى ئاخىرلاشتۇرۇڭ", + "Change your vote" : "ئاۋازىڭىزنى ئۆزگەرتىڭ", + "Results" : "نەتىجە", + "Voted participants" : "بېلەت تاشلىغۇچىلار", + "Send a message to \"{roomName}\"" : "\"{roomName}\" غا ئۇچۇر ئەۋەتىڭ", + "Hide list of participants" : "قاتناشقۇچىلارنىڭ تىزىملىكىنى يوشۇرۇش", + "Show list of participants" : "قاتناشقۇچىلارنىڭ تىزىملىكىنى كۆرسىتىش", + "Assistance requested in {roomName}" : "{roomName} دا تەلەپ قىلىنغان ياردەم", + "The message was sent to \"{roomName}\"" : "بۇ ئۇچۇر \"{roomName}\" غا ئەۋەتىلگەن", + "Dismiss request for assistance" : "ياردەم ئىلتىماسىنى رەت قىلىش", + "Send message to room" : "ياتاققا ئۇچۇر ئەۋەتىڭ", + "Back to main room" : "ئاساسلىق ئۆيگە قايتىش", + "Back to your room" : "ئۆيىڭىزگە قايتىڭ", + "Message all rooms" : "بارلىق ئۆيلەرگە ئۇچۇر قىلىڭ", + "Start session" : "ئولتۇرۇشنى باشلاش", + "Start a call before you start a breakout room session" : "بۆسۈش ئۆيى ئولتۇرۇشنى باشلاشتىن بۇرۇن تېلېفوننى باشلاڭ", + "Stop session" : "يىغىننى توختىتىڭ", + "The message was sent to all breakout rooms" : "بۇ ئۇچۇر بارلىق بۆسۈش ئۆيلىرىگە ئەۋەتىلدى", + "Send a message to all breakout rooms" : "بارلىق بۆسۈش ئۆيلىرىگە ئۇچۇر ئەۋەتىڭ", + "Breakout rooms are not started" : "بۆسۈش ئۆيى باشلانمىدى", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بولمىغان تېلېفونلار ئۇلىنىش مەسىلىسىنى كەلتۈرۈپ چىقىرىشى ۋە ئۈسكۈنىلەرنىڭ يۈكلىنىشىنى كەلتۈرۈپ چىقىرىشى مۇمكىن. {linkstart}تېخىمۇ كۆپ ئۆگىنىڭ{linkend}", + "Talk setup incomplete" : "پاراڭنى تەڭشەش تۇلۇق ئەمەس", + "Disable lobby" : "لوبىنى چەكلەش", + "Settings for participant \"{user}\"" : "قاتناشقۇچىنىڭ تەڭشىكى \"{user}\"", + "Participant \"{user}\"" : "قاتناشقۇچى \"{user}\"", + "moderator" : "رىياسەتچى", + "bot" : "بوت", + "guest" : "مېھمان", + "Ringing …" : "ئۈزۈك…", + "Call rejected" : "تېلېفون رەت قىلىندى", + "{time} talking …" : "{time} پاراڭ…", + "{time} talking time" : "{time} پاراڭلىشىش ۋاقتى", + "Raised their hand" : "ئۇلارنىڭ قولىنى كۆتۈردى", + "Joined with video" : "سىنغا قوشۇلدى", + "Joined via phone" : "تېلېفون ئارقىلىق قوشۇلدى", + "Joined with audio" : "ئاۋاز بىلەن قوشۇلدى", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "بۇ تېكىست چوقۇم {maxLength} ھەرپتىن ئۇزۇن ياكى تەڭ بولۇشى كېرەك. سىزنىڭ ھازىرقى تېكىستىڭىز {charactersCount} ھەرپ ئۇزۇن.", + "Remove group and members" : "گۇرۇپپا ۋە ئەزالارنى چىقىرىۋېتىڭ", + "Remove team and members" : "گۇرۇپپا ۋە ئەزالارنى چىقىرىۋېتىڭ", + "Remove participant" : "قاتناشقۇچىنى ئېلىۋېتىڭ", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "بۇ سۆھبەتتىن «{displayName}» ۋە ئۇنىڭ ئەزالىرىنى ئۆچۈرمەكچىمۇ؟", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "بۇ سۆھبەتتىن «{displayName}» ۋە ئۇنىڭ ئەزالىرىنى ئۆچۈرمەكچىمۇ؟", + "Do you really want to remove {displayName} from this conversation?" : "بۇ سۆھبەتتىن {displayName} نى ئۆچۈرمەكچىمۇ؟", + "Notification was sent to {displayName}" : "ئۇقتۇرۇش {displayName} غا ئەۋەتىلدى", + "Could not send notification to {displayName}" : "{displayName} to غا ئۇقتۇرۇش ئەۋەتەلمىدى", + "Permissions granted to {displayName}" : "{displayName} غا بېرىلگەن ئىجازەت", + "Could not modify permissions for {displayName}" : "{displayName} ئىجازەتنامىسىنى ئۆزگەرتەلمىدى", + "Permissions removed for {displayName}" : "{displayName} ئۈچۈن رۇخسەت چىقىرىۋېتىلدى", + "Permissions set to default for {displayName}" : "ئىجازەتنامە {displayName} غا تەڭشەلدى", + "Phone number could not be hung up" : "تېلېفون نومۇرىنى ئېسىپ قويغىلى بولمايدۇ", + "Phone number could not be put on hold" : "تېلېفون نومۇرىنى توختىتىشقا بولمايدۇ", + "Phone number could not be muted" : "تېلېفون نومۇرىنى ئۆزگەرتكىلى بولمايدۇ", + "Phone number could not be unmuted" : "تېلېفون نومۇرىنى ئۆزگەرتكىلى بولمايدۇ", + "DTMF message could not be sent" : "DTMF ئۇچۇرى ئەۋەتىلمىدى", + "Phone number copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن تېلېفون نومۇرى", + "Phone number could not be copied" : "تېلېفون نومۇرىنى كۆچۈرگىلى بولمايدۇ", + "in the lobby" : "زالدا", + "Dial out phone" : "تېلېفوننى تېلېفون قىلىڭ", + "Hang up phone" : "تېلېفوننى ئېسىپ قويۇڭ", + "Move back to lobby" : "لوبىغا قايتىڭ", + "Move to conversation" : "سۆھبەتكە يۆتكەڭ", + "Dial-in PIN" : "نۇمۇر بۇراش PIN", + "Demote from moderator" : "رىياسەتچىدىن تۆۋەنلەش", + "Promote to moderator" : "رىياسەتچىگە تەشۋىق قىلىڭ", + "Resend invitation" : "تەكلىپنامىنى قايتۇرۇڭ", + "Send call notification" : "چاقىرىش ئۇقتۇرۇشى ئەۋەتىڭ", + "Dial out phone number" : "تېلېفون نومۇرىنى تېلىفۇن قىلىڭ", + "Resume call for phone number" : "تېلېفون نومۇرىغا تېلېفون قىلىشنى ئەسلىگە كەلتۈرۈش", + "Put phone number on hold" : "تېلېفون نومۇرىنى توختىتىڭ", + "Unmute phone number" : "تېلېفون نومۇرىنى بىكار قىلىڭ", + "Mute phone number" : "تېلېفون نومۇرى", + "Copy phone number" : "تېلېفون نومۇرىنى كۆچۈرۈڭ", + "Reset custom permissions" : "ئىختىيارى ئىجازەتنى ئەسلىگە كەلتۈرۈڭ", + "Grant all permissions" : "بارلىق ئىجازەتلەرنى بېرىڭ", + "Remove all permissions" : "بارلىق ئىجازەتلەرنى ئۆچۈرۈڭ", + "Also ban from this conversation" : "بۇ سۆھبەتتىن چەكلەڭ", + "Internal note (reason to ban)" : "ئىچكى خاتىرە (چەكلەش سەۋەبى)", + "Remove" : "ئۆچۈرۈڭ", + "Permissions modified for {displayName}" : "ئىجازەتنامە {displayName} غا ئۆزگەرتىلدى", + "Add users, groups or teams" : "ئىشلەتكۈچى ، گۇرۇپپا ياكى گۇرۇپپا قوشۇڭ", + "Add users or groups" : "ئىشلەتكۈچى ياكى گۇرۇپپا قوش", + "Add users or teams" : "ئىشلەتكۈچى ياكى گۇرۇپپا قوشۇڭ", + "Add users" : "ئىشلەتكۈچى قوشۇڭ", + "Add groups or teams" : "گۇرۇپپا ياكى گۇرۇپپا قوشۇڭ", + "Add groups" : "گۇرۇپپا قوشۇڭ", + "Add teams" : "گۇرۇپپا قوشۇڭ", + "Add other sources" : "باشقا مەنبەلەرنى قوشۇڭ", + "Add emails" : "ئېلېكترونلۇق خەت قوشۇڭ", + "Integrations" : "بىرىكتۈرۈش", + "Add federated users" : "فېدېراتسىيە ئىشلەتكۈچىلەرنى قوشۇڭ", + "Searching …" : "ئىزدەش…", + "Search for more users" : "تېخىمۇ كۆپ ئىشلەتكۈچىنى ئىزدەڭ", + "You can search or add participants via name, email, or Federated Cloud ID" : "ئىسىم ، ئېلېكترونلۇق خەت ياكى فېدېراتسىيە بۇلۇت كىملىكى ئارقىلىق قاتناشقۇچىلارنى ئىزدىسىڭىز ياكى قوشالايسىز", + "Search or add participants" : "قاتناشقۇچىلارنى ئىزدەڭ ياكى قوشۇڭ", + "Invitation was sent to {actorId}" : "تەكلىپنامە {actorId} غا ئەۋەتىلدى", + "An error occurred while adding the participants" : "قاتناشقۇچىلارنى قوشقاندا خاتالىق كۆرۈلدى", + "A new group conversation with selected participant will be created" : "تاللانغان قاتناشقۇچىلار بىلەن بىر گۇرۇپپا سۆھبىتى قۇرۇلىدۇ", + "Participants" : "قاتناشقۇچىلار", + "Pinned by a deleted user" : "بىر ئۆچۈرۋېتىلگەن ئىشلەتكۈچى مىخلىغان", + "Participants ({count})" : "قاتناشقۇچىلار ({count})", + "Open chat" : "پاراڭنى ئېچىڭ", + "You have new unread messages in the chat." : "پاراڭدا يېڭى ئوقۇلمىغان ئۇچۇرلار بار.", + "You have been mentioned in the chat." : "سىز پاراڭدا تىلغا ئېلىنغان.", + "Search messages" : "ئۇچۇرلارنى ئىزدە", + "Chat" : "پاراڭ", + "Details" : "تەپسىلاتى", + "Shared items" : "ئورتاق بەھرىلىنىدىغان بۇيۇملار", + "Search in {name}" : "{name}دا ئىزدە", + "Threads in {name}" : "{name} نامىدىكى يىپ", + "{actor} in {conversation}" : "{conversation} دىكى {actor}", + "Search messages …" : "ئۇچۇرلارنى ئىزدە...", + "Search options" : "ئىزدەش تاللانمىلىرى", + "From User" : "ئىشلەتكۈچىدىن", + "Since" : "بۇيان", + "Until" : "تاكى ھازىرغىچە", + "No results found" : "ھېچقانداق نەتىجە تېپىلمىدى", + "Load more results" : "تېخىمۇ كۆپ نەتىجىلەرنى يۈكلەڭ", + "Recent threads" : "يېقىنقى يىپلار", + "Projects" : "تۈر", + "No shared items" : "ئورتاق بەھرىلىنىدىغان تۈر يوق", + "Thread notifications" : "يىپ ئۇقتۇرۇشى", + "Thread actions" : "يىپ ھەركىتى", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "سۆھبەتكە ئۇلىنىش", + "No open conversations found" : "ئوچۇق سۆھبەت تېپىلمىدى", + "Either there are no open conversations or you joined all of them." : "ياكى ئوچۇق سۆھبەت يوق ياكى ئۇلارنىڭ ھەممىسىگە قوشۇلدىڭىز.", + "Check spelling or use complete words." : "ئىملانى تەكشۈرۈڭ ياكى تولۇق سۆز ئىشلىتىڭ.", + "Search conversations or users" : "پاراڭ ياكى ئىشلەتكۈچىنى ئىزدەڭ", + "Select conversation" : "سۆھبەتنى تاللاڭ", + "Number length is not valid" : "ساننىڭ ئۇزۇنلۇقى ئىناۋەتلىك ئەمەس", + "Region code is not valid" : "رايون كودى ئىناۋەتلىك ئەمەس", + "Number length is too short" : "ساننىڭ ئۇزۇنلۇقى بەك قىسقا", + "Number length is too long" : "ساننىڭ ئۇزۇنلۇقى بەك ئۇزۇن", + "Number is not valid" : "سان ئىناۋەتلىك ئەمەس", + "Phone numbers" : "تېلېفون نومۇرى", + "Display name: {name}" : "كۆرسىتىش ئىسمى: {name}", + "Edit display name" : "كۆرسىتىش نامىنى تەھرىرلەش", + "Display name (required)" : "كۆرسىتىش ئىسمى (مەجبۇرىي)", + "Save name" : "ئىسىمنى ساقلاڭ", + "Error while setting personal setting" : "شەخسىي تەڭشەكنى تەڭشەۋاتقاندا خاتالىق", + "Error while saving sounds setting" : "ئاۋاز تەڭشىكىنى ساقلاشتا خاتالىق", + "Compact conversations list" : "ئىخچام سۆھبەت تىزىملىكى", + "Play sounds when participants join or leave a call" : "قاتناشقۇچىلار قاتناشقاندا ياكى تېلېفوندىن ئايرىلغاندا ئاۋاز قويۇڭ", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "ئىشلەپچىقارغۇچىنىڭ تېخنىكىلىق چەكلىمىسى سەۋەبىدىن ھازىر iPhone ۋە iPad دا يوق", + "Notification settings" : "ئۇقتۇرۇش تەڭشىكى", + "Sounds for chat and call notifications" : "پاراڭ ھەمدە تېلىفۇن ئۇقتۇرۇشلىرىنىڭ ئاۋازى", + "Default language" : "كۆڭۈلدىكى تىل", + "Select location for attachments" : "قوشۇمچە ھۆججەتلەرنىڭ ئورنىنى تاللاڭ", + "Error while setting attachment folder" : "قوشۇمچە ھۆججەت قىسقۇچنى تەڭشەشتە خاتالىق", + "Error while setting read status privacy" : "ئوقۇش ھالىتىنىڭ مەخپىيەتلىكىنى تەڭشەشتە خاتالىق", + "Error while setting typing status privacy" : "خەت ھالىتى مەخپىيەتلىكىنى تەڭشەشتە خاتالىق", + "Error while setting default media state" : "سۈكۈتتىكى مېدىيا ھالىتىنى تەڭشىگەندە خاتالىق", + "Turn camera and microphone off by default" : "كامىرا بىلەن مىكروفۇننى سۈكۈتتە ئۆچۈر", + "Blur camera background by default" : "كامىرا ئارقا كۆرۈنۈشىنى سۈكۈتتە تۇتۇق قىل", + "Skip device preview before joining a call" : "چاقىرىققا كىرىشتىن بۇرۇن ئۈسكۈنە ئالدىن-كۆرسىتىشنى ئاتلا", + "Appearance & Sounds" : "كۆرۈنۈش & ئاۋاز", + "Privacy" : "مەخپىيەتلىك", + "Send read receipts" : "ئۇقۇغان تىلخەتنى يوللا", + "When off, all read statuses will be hidden" : "ئېتىلسە، بارلىق ئوقۇغانلىق ھالەتلىرى يۇشۇرۇلدۇ", + "Share typing status" : "يېزىۋاتقانلىق ھالىتىنى ئورتاقلاش", + "When off, all typing indicators will be hidden" : "ئېتىلسە، بارلىق يېزىۋاتقانلىق ئۇچۇرلىرى يۇشۇرۇلدۇ", + "Attachments folder" : "قوشۇمچە ھۆججەت قىسقۇچ", + "Toggle full screen" : "تولۇق ئېكراننى ئېچىڭ", + "Return to Home screen" : "باشبەتكە قايت", + "Search" : "ئىزدە", + "Shortcuts while in a chat" : "پاراڭلىشۋاتقاندىكى قىسقا يوللار", + "Focus the chat input" : "پاراڭلىشىشنى كىرگۈزۈڭ", + "Unfocus the chat input to use shortcuts" : "تېزلەتمە ئىشلىتىش ئۈچۈن پاراڭ كىرگۈزۈشنى بىكار قىلىڭ", + "Edit your last message" : "ئاخىرقى ئۇچۇرىڭىزنى تەھرىرلەڭ", + "Shortcuts while in a call" : "تېلېفون قىلغاندا تېزلەتمە", + "Camera on and off" : "كامېرا ئوچۇق ۋە تاقالغان", + "Microphone on and off" : "مىكروفون ئېچىش ۋە تاقاش", + "Raise or lower hand" : "قولىنى كۆتۈرۈڭ ياكى تۆۋەن قىلىڭ", + "Push to talk or push to mute" : "سۆزلەشكە ئىتتىرىش ياكى ئۈنسىز ھالەتكە كەلتۈرۈش", + "Zoom-in / zoom-out a screen share" : "ئېكراننى ئورتاقلىشىشنى كىچىكلەت / چوڭلات", + "Mouse wheel" : "مائۇس چاقى", + "Start call silently" : "ئۈن-تىنسىز تېلېفون قىلىشنى باشلاڭ", + "Start call" : "چاقىرىشنى باشلاڭ", + "End call" : "ئاخىرلىشىش تېلېفونى", + "This call has just ended" : "بۇ تېلېفون ئاخىرلاشتى", + "You will be able to join the call only after a moderator starts it." : "رىياسەتچى قوزغىغاندىن كېيىن ئاندىن تېلېفونغا قوشۇلالايسىز.", + "End call for everyone" : "ھەممەيلەنگە تېلېفون قىلىش", + "Starting the recording" : "خاتىرىلەشنى باشلاش", + "Recording" : "خاتىرىلەش", + "The call has been running for one hour." : "تېلېفون بىر سائەت داۋاملاشتى.", + "Cancel recording start" : "خاتىرىلەشنى باشلاشنى ئەمەلدىن قالدۇرۇڭ", + "Stop recording" : "خاتىرىلەشنى توختىتىڭ", + "Send a reaction" : "ئىنكاس قايتۇرۇڭ", + "React with {reaction}" : "{reaction}", + "All tasks done!" : "بارلىق ۋەزىپىلەر تاماملاندى!", + "_{done} of %n task_::_{done} of %n tasks_" : ["%n دىن {done} ۋەزىپە","%n دىن {done} ۋەزىپىلەر"], + "Add participants to this call" : "قاتناشقۇچىلارنى بۇ چاقىرىققا قوش", + "_%n participant in call_::_%n participants in call_" : ["چاقىرىقتا %n قاتناشقۇچى","چاقىرىقتا %n قاتناشقۇچى"], + "You are not allowed to enable screensharing" : "ئېكران ئېكرانىنى قوزغىتىشقا رۇخسەت قىلىنمايدۇ", + "No screensharing" : "ئېكران ئېكرانى يوق", + "Screensharing options" : "ئېكران ئورتاقلىشىش تاللانمىلىرى", + "Enable screensharing" : "ئېكراننى قوزغىتىشنى قوزغىتىڭ", + "Bad sent video and screen quality." : "ئەۋەتىلگەن سىن ۋە ئېكران سۈپىتى ناچار.", + "Bad sent screen quality." : "ئەۋەتىلگەن ئېكران سۈپىتى ناچار.", + "Bad sent video quality." : "ئەۋەتكەن سىن سۈپىتى ناچار.", + "Bad sent audio, video and screen quality." : "ئەۋەتىلگەن ئاۋاز ، سىن ۋە ئېكران سۈپىتى ناچار.", + "Bad sent audio and screen quality." : "ئەۋەتىلگەن ئاۋاز ۋە ئېكران سۈپىتى ناچار.", + "Bad sent audio and video quality." : "ئەۋەتكەن ئاۋاز ۋە سىن سۈپىتى ناچار.", + "Bad sent audio quality." : "ئەۋەتىلگەن ئاۋاز سۈپىتى ناچار.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ھەمبەھىرلىگەندە ئارقا كۆرۈنۈشنى ياكى سىننى چەكلەڭ.", + "Disable background blur" : "تەگلىك تۇتۇقلىقىنى چەكلەڭ", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلىۋاتقاندا سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى كۆرەلمەسلىكى مۇمكىن.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلغاندا ئارقا كۆرۈنۈشنى ياكى سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلىۋاتقاندا سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىپ ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانىنى چەكلەڭ.", + "Disable screenshare" : "ئېكران ئېكرانىنى چەكلەڭ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن تەگلىك ياكى سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن سىننى چەكلەڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ئامالسىز قېلىشى مۇمكىن.", + "Screen sharing is not supported by your browser." : "ئېكران ئورتاقلىشىشنى توركۆرگۈڭىز قوللىمايدۇ.", + "Screen sharing requires the page to be loaded through HTTPS." : "ئېكراندىن ئورتاقلىشىش بۇ بەتنى HTTPS ئارقىلىق يۈكلەشنى تەلەپ قىلىدۇ.", + "Screensharing requires the page to be loaded through HTTPS." : "ئېكراندىن ئورتاقلىشىش بۇ بەتنى HTTPS ئارقىلىق يۈكلەشنى تەلەپ قىلىدۇ.", + "An error occurred while starting screensharing." : "ئېكراننى باشلىغاندا خاتالىق كۆرۈلدى.", + "Select virtual background" : "مەۋھۇم ئارقا-كۆرۈنۈش تاللا", + "Show your screen" : "ئېكرانىڭىزنى كۆرسىتىڭ", + "Stop screensharing" : "ئېكراننى توختىتىڭ", + "Mute others" : "باشقىلارنى تىللاڭ", + "Start recording" : "خاتىرىلەشنى باشلاڭ", + "Set up breakout rooms" : "بۆسۈش ئۆيى تەسىس قىلىڭ", + "Download attendance list" : "قاتنىشىش تىزىملىكىنى چۈشۈرۈڭ", + "Open Calendar" : "كالېندارنى ئېچىڭ", + "Remove participant {name}" : "قاتناشقۇچىنى ئۆچۈرۈڭ {name}", + "Would you like to delete this conversation?" : "سىز بۇ سۆھبەتنى ئۆچۈرمەكچىمۇ؟", + "Are you sure you want to delete this conversation?" : "بۇ سۆھبەتنى سىز راستىنلا ئۆچۈرمەكچىمۇ؟", + "Delete now" : "ھازىرلا ئۆچۈر", + "Keep" : "ساقلاڭ", + "Open dialpad" : "سۆزلىشىش تاختىسىنى ئېچىڭ", + "Select a region" : "رايون تاللاڭ", + "Local time: {time}" : "يەرلىك ۋاقىت:{time}", + "Search …" : "ئىزدەش…", + "Message without mention" : "تىلغا ئېلىنمىغان ئۇچۇر", + "Mention myself" : "ئۆزۈمنى تىلغا ئېلىڭ", + "Mention everyone" : "ھەممەيلەننى تىلغا ئېلىڭ", + "Select a conversation" : "سۆھبەتنى تاللاڭ", + "Select a mode" : "بىر ھالەتنى تاللاڭ", + "You do not have permissions to access this conversation." : "بۇ سۆھبەتنى زىيارەت قىلىش ھوقۇقىڭىز يوق.", + "Join a different conversation or start a new one." : "باشقا سۆھبەتكە قاتنىشىڭ ياكى يېڭى سۆھبەتنى باشلاڭ.", + "The conversation does not exist" : "سۆھبەت مەۋجۇت ئەمەس", + "Join a conversation or start a new one!" : "سۆھبەتكە قاتنىشىڭ ياكى يېڭى باشلاڭ!", + "Duplicate session" : "تەكرار يىغىن", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\" بىلەن سۆھبەت قۇرۇش ۋە ئۇنىڭغا قاتنىشىش", + "Join a conversation or start a new one" : "سۆھبەتكە قاتنىشىڭ ياكى يېڭى باشلاڭ", + "Error while joining the conversation" : "سۆھبەتكە قاتناشقاندا خاتالىق", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud ئىشلەتكۈچى", + "User password" : "ئىشلەتكۈچى پارولى", + "Talk conversation" : "پاراڭلىشىش", + "Skip TLS verification" : "TLS دەلىللەشتىن ئاتلاڭ", + "Matrix server URL" : "Matrix مۇلازىمېتىر URL", + "User" : "ئىشلەتكۈچى", + "Matrix channel" : "ماترىتسا قانىلى", + "Mattermost server URL" : "ئەڭ مۇھىم مۇلازىمېتىر URL", + "Mattermost user" : "ئەڭ مۇھىم ئىشلەتكۈچى", + "Team name" : "گۇرۇپپا ئىسمى", + "Channel name" : "قانال ئىسمى", + "Rocket.Chat server URL" : "راكېتا. مۇلازىمېتىر URL", + "User name or email address" : "ئىشلەتكۈچى ئىسمى ياكى ئېلېكترونلۇق خەت ئادرېسى", + "Rocket.Chat channel" : "Rocket.Chat قانىلى", + "Zulip server URL" : "Zulip مۇلازىمېتىر URL", + "Bot user name" : "Bot ئىشلەتكۈچى ئىسمى", + "Bot API key" : "Bot API ئاچقۇچى", + "Zulip channel" : "Zulip قانىلى", + "API token" : "API بەلگىسى", + "Slack channel" : "Slack قانىلى", + "Server ID or name" : "مۇلازىمېتىر كىملىكى ياكى ئىسمى", + "Channel ID (prefixed with \"ID:\") or name" : "قانال ID (\"ID\" بىلەن باشلىندۇ) ياكى ئىسىم", + "Channel" : "قانال", + "Login" : "كىرىش", + "Chat ID" : "پاراڭ كىملىكى", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC مۇلازىمېتىر ئادرېسى (مەسىلەن chat.freenode.net:6667)", + "Nickname" : "تەخەللۇس", + "Connection password" : "ئۇلىنىش پارولى", + "IRC channel" : "IRC قانىلى", + "Channel password" : "قانال پارولى", + "NickServ nickname" : "NickServ لەقىمى", + "NickServ password" : "NickServ پارولى", + "Use TLS" : "TLS نى ئىشلىتىڭ", + "Use SASL" : "SASL نى ئىشلىتىڭ", + "Tenant ID" : "ئىجارە ئالغۇچى كىملىكى", + "Client ID" : "خېرىدار ID", + "Team ID" : "گۇرۇپپا كىملىكى", + "Thread ID" : "تېما كىملىكى", + "XMPP/Jabber server URL" : "XMPP / Jabber مۇلازىمېتىر URL", + "MUC server URL" : "MUC مۇلازىمېتىر ئادرېسى", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "مىخلانغان ئۇچۇرلار", + "Media" : "كۆپ-ۋاستە", + "Polls" : "راي سىناش", + "Deck cards" : "پالۋان كارتىلىرى", + "Voice messages" : "ئاۋازلىق ئۇچۇرلار", + "Locations" : "ئورۇنلار", + "Call recordings" : "چاقىرىش خاتىرىسى", + "Audio" : "ئاۋاز", + "Show all pinned messages" : "بارلىق مىخلانغان ئۇچۇرلارنى كۆرسەت", + "Show all media" : "بارلىق تاراتقۇلارنى كۆرسەت", + "Show all files" : "بارلىق ھۆججەتلەرنى كۆرسەت", + "Show all polls" : "بارلىق راي سىناشلارنى كۆرسەت", + "Show all deck cards" : "بارلىق كارتا كارتىلىرىنى كۆرسەت", + "Show all voice messages" : "بارلىق ئاۋازلىق ئۇچۇرلارنى كۆرسەت", + "Show all locations" : "بارلىق ئورۇنلارنى كۆرسەت", + "Show all call recordings" : "بارلىق چاقىرىش خاتىرىسىنى كۆرسەت", + "Show all audio" : "بارلىق ئاۋازنى كۆرسەت", + "Show all other" : "باشقىلىرىنى كۆرسەت", + "Follow conversation settings" : "سۆھبەت تەڭشەكلىرىگە ئەگەش", + "Group" : "گۇرۇپپا", + "Team" : "ئەتىرەت", + "You reconnected to the call" : "سىز تېلېفونغا قايتا ئۇلاندىڭىز", + "{actor} reconnected to the call" : "{actor} تېلېفونغا قايتا ئۇلاندى", + "You added {user0} and {user1}" : "سىز {user0} ۋە {user1} added نى قوشتىڭىز", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى قوشتىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى قوشتىڭىز"], + "An administrator added you and {user0}" : "باشقۇرغۇچى سىزنى ۋە {user0} نى قوشتى", + "{actor} added you and {user0}" : "{actor} سىزنى ۋە {user0} نى قوشتى", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "An administrator added {user0} and {user1}" : "باشقۇرغۇچى {user0} ۋە {user1} added نى قوشتى", + "{actor} added {user0} and {user1}" : "{actor} قوشۇلدى {user0} ۋە {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "You removed {user0} and {user1}" : "{user0} ۋە {user1} نى ئۆچۈردىڭىز", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى چىقاردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى چىقاردىڭىز"], + "An administrator removed you and {user0}" : "باشقۇرغۇچى سىزنى ۋە {user0} نى ئېلىۋەتتى", + "{actor} removed you and {user0}" : "{actor} سىزنى ۋە {user0} نى ئېلىۋەتتى", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "An administrator removed {user0} and {user1}" : "باشقۇرغۇچى {user0} ۋە {user1} نى ئۆچۈرۈۋەتتى", + "{actor} removed {user0} and {user1}" : "{actor} چىقىرىۋېتىلدى {user0} ۋە {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "You and {user0} joined the call" : "سىز ۋە {user0} چاقىرىققا قوشۇلدىڭىز", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىققا قاتناشتى","سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىققا قاتناشتى"], + "{user0} and {user1} joined the call" : "{user0} ۋە {user1} چاقىرىققا قوشۇلدى", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىققا قاتناشتى","{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىققا قاتناشتى"], + "You and {user0} left the call" : "سىز ۋە {user0} تېلېفوندىن ئايرىلدى", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىقتىن ئايرىلدى","سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىقتىن ئايرىلدى"], + "{user0} and {user1} left the call" : "{user0} ۋە {user1} تېلېفوندىن ئايرىلدى", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىقتىن ئايرىلدى","{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىقتىن ئايرىلدى"], + "You promoted {user0} and {user1} to moderators" : "سىز {user0} ۋە {user1} نى رىياسەتچىگە ئۆستۈردىڭىز", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردىڭىز"], + "An administrator promoted you and {user0} to moderators" : "باشقۇرغۇچى سىزنى ۋە {user0} نى رىياسەتچىگە ئۆستۈردى", + "{actor} promoted you and {user0} to moderators" : "{actor} you سىزنى ۋە {user0} mod رىياسەتچىلەرگە ئۆستۈردى", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردى"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى","{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى"], + "An administrator promoted {user0} and {user1} to moderators" : "باشقۇرغۇچى باشقۇرغۇچىغا {user0} ۋە {user1} نى ئۆستۈردى", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} باشقۇرغۇچىغا {user0} ۋە {user1} نى ئۆستۈردى", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىككە ئۆستۈردى","بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىككە ئۆستۈردى"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى","{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى"], + "You demoted {user0} and {user1} from moderators" : "رىياسەتچىلەردىن {user0} ۋە {user1} نى چۈشۈردىڭىز", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردىڭىز"], + "An administrator demoted you and {user0} from moderators" : "باشقۇرغۇچى سىزنى ۋە {user0} نى رىياسەتچىلىكتىن چۈشۈردى", + "{actor} demoted you and {user0} from moderators" : "{actor} سىزنى ۋە {user0} رىياسەتچىلىكتىن چۈشۈردى", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى","{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى"], + "An administrator demoted {user0} and {user1} from moderators" : "باشقۇرغۇچى باشقۇرغۇچىدىن {user0} ۋە {user1} نى چۈشۈردى", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} رىياسەتچىلەردىن {user0} ۋە {user1} نى چۈشۈردى", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى","بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى","{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى"], + "You:" : "سىز:", + "You: {lastMessage}" : "سىز: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(تەھرىرلىگەن)", + "(edited by a deleted user)" : "(ئۆچۈرۈلگەن ئىشلەتكۈچى تەھرىرلىگەن)", + "(edited by {moderator})" : "({moderator} تەرىپىدىن تەھرىرلىگەن)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "سىز باشقا كۆزنەك ياكى ئۈسكۈنىدە ئاكتىپ يىغىن ئاچقاندا سۆھبەتكە قاتناشماقچى بولۇۋاتىسىز. بۇنى Nextcloud Talk قوللىمايدۇ. نېمە قىلماقچى؟", + "Leave this page" : "بۇ بەتنى قالدۇرۇڭ", + "Join here" : "بۇ يەرگە قوشۇلۇڭ", + "Deck card has been posted to {conversation}" : "پالۋان كارتىسى {conversation} يوللاندى", + "An error occurred while posting deck card to conversation" : "تاختاي كارتىسىنى چاپلاۋاتقاندا بىر خاتالىق كۆرۈلدى", + "Post to a conversation" : "بىر سۆھبەتكە يوللا", + "Post to conversation" : "سۆھبەتكە يوللاڭ", + "The recording failed. Please contact your administrator." : "خاتىرىلەش مەغلۇپ بولدى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Location has been posted to {conversation}" : "ئورنى {conversation} يوللاندى", + "An error occurred while posting location to conversation" : "ئورۇننى بىر سۆھبەتكە يوللاۋاتقاندا بىر خاتالىق كۆرۈلدى", + "Share to a conversation" : "بىر سۆھبەتكە ئورتاقلىشىڭ", + "Share to conversation" : "سۆھبەتكە ئورتاقلىشىڭ", + "In conversation" : "سۆھبەتتە", + "Search in conversation: {conversation}" : "سۆھبەتتە ئىزدەش: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "تەلىپىڭىز ھازىرچە رەھىمسىز كۈچ قوغداش سەۋەبىدىن ئىتتىرىلدى", + "Error while clearing conversation history" : "سۆھبەت تارىخىنى تازىلاش جەريانىدا خاتالىق", + "Error occurred while allowing guests" : "مېھمانلارغا يول قويغاندا خاتالىق كۆرۈلدى", + "Error occurred while disallowing guests" : "مېھمانلارنى رەت قىلغاندا خاتالىق كۆرۈلدى", + "Error occurred when restricting the conversation to moderator" : "رىياسەتچى بىلەن سۆھبەتنى چەكلىگەندە خاتالىق كۆرۈلدى", + "Error occurred when opening the conversation to everyone" : "سۆھبەتنى كۆپچىلىككە ئاچقاندا خاتالىق كۆرۈلدى", + "Conversation password has been saved" : "سۆھبەت پارولى ساقلاندى", + "Conversation password has been removed" : "سۆھبەت پارولى ئۆچۈرۈلدى", + "Error occurred while saving conversation password" : "پاراڭ پارولىنى ساقلىغاندا خاتالىق كۆرۈلدى", + "Call recording is starting." : "تېلېفون خاتىرىلەش باشلىنىۋاتىدۇ.", + "Call recording stopped while starting." : "قوزغالغاندا تېلېفون خاتىرىلەش توختىتىلدى.", + "Call recording stopped. You will be notified once the recording is available." : "تېلېفون خاتىرىلەش توختىتىلدى. خاتىرىلەنگەندىن كېيىن سىزگە ئۇقتۇرۇلىدۇ.", + "Conversation picture set" : "سۆھبەت رەسىملىرى", + "Conversation picture deleted" : "سۆھبەت رەسىمى ئۆچۈرۈلدى", + "Could not delete the conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرەلمىدى", + "Could not remove the automatic expiration" : "ئاپتۇماتىك مۇددەتنى ئۆچۈرەلمىدى", + "Could not post message: {errorMessage}" : "ئۇچۇر يوللىيالمىدى: {errorMessage}", + "Participant is banned successfully" : "قاتناشقۇچى مۇۋەپپەقىيەتلىك چەكلەنگەن", + "Error while banning the participant" : "قاتناشقۇچىنى چەكلىگەندە خاتالىق", + "An error occurred while fetching the participants" : "قاتناشقۇچىلارنى ئەكەلگەندە خاتالىق كۆرۈلدى", + "Could not send invitation to {actorId}" : "{actorId} to غا تەكلىپ ئەۋەتەلمىدى", + "Invitations sent" : "تەكلىپنامە ئەۋەتىلدى", + "Error occurred when sending invitations" : "تەكلىپنامە ئەۋەتكەندە خاتالىق كۆرۈلدى", + "Failed to join the conversation." : "سۆھبەتكە قاتنىشالمىدى", + "An error occurred while creating breakout rooms" : "بۆسۈش ئۆيى قۇرغاندا خاتالىق كۆرۈلدى", + "An error occurred while re-ordering the attendees" : "يىغىنغا قاتناشقانلارنى قايتا زاكاز قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while deleting breakout rooms" : "بۆسۈش ئۆيلىرىنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "An error occurred while starting breakout rooms" : "بۆسۈش ئۆيلىرىنى باشلىغاندا خاتالىق كۆرۈلدى", + "An error occurred while stopping breakout rooms" : "بۆسۈش ئۆيلىرىنى توختاتقاندا خاتالىق كۆرۈلدى", + "An error occurred while sending a message to the breakout rooms" : "بۆسۈش ئۆيىگە ئۇچۇر ئەۋەتكەندە خاتالىق كۆرۈلدى", + "An error occurred while requesting assistance" : "ياردەم تەلەپ قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while resetting the request for assistance" : "ياردەم ئىلتىماسىنى ئەسلىگە كەلتۈرۈشتە خاتالىق كۆرۈلدى", + "An error occurred while joining breakout room" : "بۆسۈش ئۆيىگە قوشۇلغاندا خاتالىق كۆرۈلدى", + "Failed to rename the thread" : "بۇ يىپنىڭ نامىنى ئۆزگەرتەلمىدى", + "Error fetching upcoming events" : "كىلىدىغان پائالىيەتلەرنى چۈشۈرۈش خاتالىقى", + "Error fetching upcoming reminders" : "كىلىدىغان ئەسكەرتمىلەرنى چۈشۈرۈش خاتالىقى", + "An error occurred while accepting an invitation" : "تەكلىپنى قوبۇل قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while rejecting an invitation" : "تەكلىپنى رەت قىلغاندا خاتالىق كۆرۈلدى", + "{guest} (guest)" : "{guest} (مېھمان)", + "Poll draft has been saved" : "راي سىناش لايىھىسى ساقلاندى", + "An error occurred while saving the draft" : "لايىھەنى ساقلاۋاتقاندا خاتالىق كۆرۈلدى", + "An error occurred while submitting your vote" : "ئاۋازىڭىزنى تاپشۇرغاندا خاتالىق كۆرۈلدى", + "An error occurred while ending the poll" : "بېلەت تاشلاش ئاخىرلاشقاندا خاتالىق كۆرۈلدى", + "An error occurred while deleting the poll draft" : "بېلەت تاشلاش لايىھىسىنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "Poll \"{name}\" was created by {user}. Click to vote" : "راي سىناش \"{name}\" {user} تەرىپىدىن قۇرۇلدى. بېلەت تاشلاش ئۈچۈن چېكىڭ", + "Failed to add reaction" : "ئىنكاس قوشالمىدى", + "Failed to remove reaction" : "ئىنكاسنى ئۆچۈرەلمىدى", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" ھۆججىتىنى يۈكلەۋاتقاندا خاتالىق", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" ھۆججىتىنى يۈكلەشكە يېتەرلىك بوشلۇق يوق", + "You are not allowed to share files" : "ھۆججەتلەرنى ئورتاقلىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "Error while sharing file" : "ھۆججەتنى ھەمبەھىرلەشتە خاتالىق", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "سىز ئىشلىتىۋاتقان توركۆرگۈچ Nextcloud Talk تەرىپىدىن تولۇق قوللىمايدۇ. Mozilla Firefox ، Microsoft Edge ، Google Chrome ، Opera ياكى Apple Safari نىڭ ئەڭ يېڭى نەشرىنى ئىشلىتىڭ.", + "_In %n hour_::_In %n hours_" : ["%n سائەتتە","%n سائەتتە"], + "_%n minute _::_%n minutes_" : ["%n مىنۇتتا","%n مىنۇتتا"], + "In {hours} and {minutes}" : "{hours} ۋە {minutes}", + "_In %n minute_::_In %n minutes_" : ["%n مىنۇتتا","%n مىنۇتتا"], + "Later today – {timeLocale}" : "كېيىن بۈگۈن - {timeLocale}", + "Set time for later today" : "ۋاقىتنى بۈگۈنكى كىيىنرەك ۋاقىتقا بېكىت", + "Tomorrow – {timeLocale}" : "ئەتە - {timeLocale}", + "Set time for tomorrow" : "ۋاقىتنى ئەتىگە بېكىت", + "This weekend – {timeLocale}" : "بۇ ھەپتە ئاخىرى - {timeLocale}", + "Set time for this weekend" : "ۋاقىتنى بۇ ھەپتىگە بېكىت", + "Next week – {timeLocale}" : "كېلەر ھەپتە - {timeLocale}", + "Set time for next week" : "ۋاقىتنى كىيىنكى ھەپتىگە بېكىت", + "Conversation link copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن سۆھبەت ئۇلىنىشى", + "The link could not be copied" : "ئۇلانمىنى كۆچۈرگىلى بولمايدۇ", + "Error while parsing a PROPFIND error" : "PROPFIND خاتالىقىنى تەھلىل قىلغاندا خاتالىق", + "Sending signaling message has failed" : "سىگنال ئۇچۇرى ئەۋەتىش مەغلۇپ بولدى", + "Lost connection to signaling server. Trying to reconnect." : "سىگنال مۇلازىمىتىرىغا ئۇلىنىش يوقاپ كەتتى. قايتا ئۇلىماقچى بولۇۋاتىدۇ.", + "Lost connection to signaling server." : "سىگنال مۇلازىمىتىرىغا ئۇلىنىش يوقاپ كەتتى.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "سەپلىمە سىگنال مۇلازىمېتىرى بۇ نەشرىدىكى Talk بىلەن ماسلىشىش ئۈچۈن يېڭىلىنىشى كېرەك. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Please restart the app." : "بۇ ئەپنى قايتا قوزغىتىڭ.", + "Please reload the page." : "بۇ بەتنى قايتا يۈكلەڭ.", + "Please try to restart the app." : "بۇ ئەپنى قايتا قوزغىتىپ سىناپ بېقىڭ.", + "Please try to reload the page." : "بۇ بەتنى قايتا يۈكلەپ سىناپ بېقىڭ", + "Do not disturb" : "ئاۋارە قىلماڭ", + "Away" : "يىراق", + "Microphone {number}" : "مىكروفون {number}", + "Camera {number}" : "كامېرا {number}", + "Speaker {number}" : "سۆزلىگۈچى {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "ئۈنسىز ھالەتتە پاراڭلاشقاندەك قىلىسىز ، باشقىلارنىڭ گېپىنى ئاڭلىشى ئۈچۈن ئۆزىڭىزنى تىللاڭ", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "كەم دېگەندە بىر قاتناشقۇچى بىلەن ئۇلىنىش قۇرالمىدى. سىنارىيەڭىز ئۈچۈن TURN مۇلازىمېتىرى لازىم بولۇشى مۇمكىن. باشقۇرغۇچىڭىزدىن تۆۋەندىكى {linkstart} بۇ ھۆججەت {linkend} نى تەڭشەشنى تەلەپ قىلىڭ.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "بۇ مۆلچەردىكىدىن ئۇزۇنراق ۋاقىت كېتىۋاتىدۇ. ئاخبارات ئىجازىتى ئاللىقاچان بېرىلگەنمۇ (ياكى رەت قىلىنغان)؟ ئەگەر شۇنداق بولسا ئاۋاز ۋە سىن مەغلۇپ بولغانلىقتىن تور كۆرگۈچىڭىزنى قايتا قوزغىتىڭ", + "Access to microphone & camera is only possible with HTTPS" : "مىكروفون ۋە كامېراغا ئېرىشىش پەقەت HTTPS ئارقىلىقلا مۇمكىن", + "Please move your setup to HTTPS" : "تەڭشەكلىرىڭىزنى HTTPS غا يۆتكەڭ", + "Access to microphone & camera was denied" : "مىكروفون ۋە كامېراغا ئېرىشىش رەت قىلىندى", + "WebRTC is not supported in your browser" : "تور كۆرگۈچىڭىزدە WebRTC قوللىمايدۇ", + "Please use a different browser like Firefox or Chrome" : "Firefox ياكى Chrome غا ئوخشاش باشقا توركۆرگۈچ ئىشلىتىڭ", + "Error while accessing microphone & camera" : "مىكروفون ۋە كامېرانى زىيارەت قىلغاندا خاتالىق", + "%s Talk on your mobile devices" : "%s كۆچمە ئۈسكۈنىڭىزدە سۆزلەڭ", + "Join conversations at any time, anywhere, on any device." : "ھەر قانداق ۋاقىتتا ، ھەر قانداق جايدا ، ھەرقانداق ئۈسكۈنىدە سۆھبەتكە قاتنىشىڭ.", + "Android app" : "ئاندىرويىد دېتالى", + "iOS app" : "iOS ئەپ", + "__language_name__" : "ئۇيغۇرچە", + "Webhook Demo" : "Webhook كۆرگەزمىسى", + "Call summary (%s)" : "چاقىرىش خۇلاسىسى (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "چاقىرىش خۇلاسىسى بوت تېلېفوندىن كېيىن بارلىق قاتناشقۇچىلار ۋە تىزىملىكتىكى ۋەزىپىلەرنى كۆرسىتىپ بەرگەندىن كېيىن ئومۇمىي ئۇچۇر يوللايدۇ", + "Tasks" : "ۋەزىپە", + "Notes" : "ئىزاھات", + "Reports" : "دوكلات", + "Decisions" : "قارار", + "Agenda" : "كۈن تەرتىپى", + "Call summary" : "چاقىرىش خۇلاسىسى", + "Call summary - {title}" : "چاقىرىش خۇلاسىسى - {title}", + "Talk conversation for event" : "پائالىيەتنىڭ پاراڭ سۆھپىتى", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push ئورنىتىلغان بولۇپ، بۇ ئۈستەل يۈزى خېرىدارلىرىنىڭ ئىقتىدارىنى ياخشىلايدۇ.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} ئورنىتىلمىغان، بۇ ئۈستەل يۈزى خېرىدارلىرىنى ئىشلەتكەندە ئىقتىدار مەسىلىسىنى كەلتۈرۈپ چىقىرىشى مۇمكىن.", + "Next meeting" : "كىيىنكى يىغىن", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "كالېندارىڭىزدىن يىغىن پىلانلاڭ. بۇ يەردە كۆرسىتىلىشى ئۈچۈن سۆھبەت سۆھبىتىنى ئورۇن قىلىپ بەلگىلەش كېرەك.", + "Join conversations from remote Nextcloud servers" : "يىراقتىكى Nextcloud مۇلازىمېتىرلىرىدىكى سۆھبەتكە قاتنىشىڭ", + "Your default media state has been saved" : "سۈكۈتتىكى مېدىيا ھالىتىڭىز ساقلاندى", + "Set reminder for later today" : "بۈگۈنگە ئەسكەرتىش بەلگىلەڭ", + "Set reminder for tomorrow" : "ئەتە ئۈچۈن ئەسكەرتىش بەلگىلەڭ", + "Set reminder for this weekend" : "بۇ ھەپتە ئاخىرىدا ئەسكەرتىش بەلگىلەڭ", + "Set reminder for next week" : "كېلەر ھەپتە ئەسكەرتىش بەلگىلەڭ", + "Generate summary" : "خۇلاسە ياز", + "Open poll • You voted already" : "ئوچۇق راي سىناش • سىز ئاللىبۇرۇن بېلەت تاشلىدىڭىز", + "Open poll • Click to vote" : "ئوچۇق راي سىناش • بېلەت تاشلاش ئۈچۈن چېكىڭ", + "Poll • Ended" : "راي سىناش • ئاخىرلاشتى", + "Talk recording from {time} ({conversation})" : "{time} ({conversation}) دىن سۆز خاتىرىلەش", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["راي-سىناش نەتىنجىسى • %n بېلەت","راي-سىناش نەتىنجىسى • %n بېلەت"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["راي-سىناشنى ئېچىش • %n بېلەت","راي-سىناشنى ئېچىش • %n بېلەت"], + "Submit vote" : "بېلەت تاشلاڭ", + "Your privacy setting has been saved" : "مەخپىيەتلىكىڭىز ساقلاندى", + "Your personal setting has been saved" : "شەخسىي تەڭشىكىڭىز ساقلاندى", + "Failed to save sounds setting" : "ئاۋاز تەڭشىكىنى ساقلىيالمىدى", + "Sounds setting saved" : "ئاۋاز تەڭشىكى ساقلاندى", + "Always shown if recording consent is required" : "ئەگەر خاتىرلەش ماقۇللۇقى تەلەپ قىلىنسا ھەر-دائىم كۆرسىتىلىدۇ", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk يېڭىلاندى ، سىز پاراڭنى باشلىيالمايسىز ياكى قاتنىشالمايسىز.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "سىز باشقا كۆزنەك ياكى ئۈسكۈنىدە سۆھبەتكە قاتناشتىڭىز. بۇنى Nextcloud Talk قوللىمايدۇ ، شۇڭا بۇ يىغىن يېپىلدى.", + "Nextcloud Talk was updated." : "Nextcloud پاراڭ يېڭىلاندى.", + "Nextcloud is in maintenance mode." : "Nextcloud ئاسراش ھالىتىدە", + "Nextcloud Talk Federation was updated." : "Nextcloud پاراڭلىشىش بىرلەشمىسى يېڭىلاندى." +}, +"nplurals=2; plural=(n != 1);"); diff --git a/l10n/ug.json b/l10n/ug.json new file mode 100644 index 0000000..5345555 --- /dev/null +++ b/l10n/ug.json @@ -0,0 +1,2161 @@ +{ "translations": { + "a conversation" : "سۆھبەت", + "(Duration %s)" : "(ئۇزۇنلۇقى %s)", + "You attended a call with {user1}" : "سىز {user1} بىلەن تېلېفونغا قاتناشتىڭىز", + "_%n guest_::_%n guests_" : ["%n مىھمان","%n مىھمانلار"], + "You attended a call with {user1} and {user2}" : "سىز {user1} ۋە {user2} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2} and {user3}" : "سىز {user1}, {user2} ۋە {user3} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "سىز {user1}, {user2}, {user3} ۋە {user4} بىلەن تېلېفونغا قاتناشتىڭىز", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "سىز {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفونغا قاتناشتىڭىز.", + "_%n other_::_%n others_" : ["%n باشقا","%n باشقىلار"], + "{actor} invited you to {call}" : "{actor} سىزنى {call} تەكلىپ قىلدى", + "You were invited to a conversation or had a call" : "سىز سۆھبەت گە تەكلىپ قىلىنغان ياكى تېلېفون بولغان", + "Other activities" : "باشقا پائالىيەتلەر", + "Talk" : "پاراڭ", + "Guest" : "مېھمان", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Nextcloud سۆھبىتىگە خۇش كەپسىز!\nبۇ سۆھبەتتە سىزگە Nextcloud Talk دىكى يېڭى ئىقتىدارلار ھەققىدە ئۇچۇر بېرىلىدۇ.", + "## New in Talk %s" : "## پاراڭ %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge ۋە Safari ھازىر ئاۋازلىق ۋە سىنلىق سۆزلىشىشكە قاتناشقىلى بولىدۇ", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- بىرمۇبىر سۆھبەت ھازىر داۋاملىشىۋاتىدۇ ، ئەمدى تاسادىپىي ھالدا گۇرۇپپا پاراڭلىرىغا ئايلاندۇرغىلى بولمايدۇ. يەنە قاتناشقۇچىلاردىن بىرى سۆھبەتتىن ئايرىلغاندا ، سۆھبەت ئەمدى ئاپتوماتىك ئۆچۈرۈلمەيدۇ. ھەر ئىككى قاتناشقۇچى ئايرىلسىلا ، سۆھبەت مۇلازىمېتىردىن ئۆچۈرۈلىدۇ", + "- You can now notify all participants by posting \"@all\" into the chat" : "- ھازىر پاراڭغا «@all» نى يوللاش ئارقىلىق بارلىق قاتناشقۇچىلارغا خەۋەر قىلالايسىز", + "- With the \"arrow-up\" key you can repost your last message" : "- «يا ئوق» كۇنۇپكىسى ئارقىلىق ئاخىرقى ئۇچۇرىڭىزنى قايتا يوللىيالايسىز", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- سۆھبەتتە ھازىر بۇيرۇقلار بولىدۇ ، «/ ياردەم» نى پاراڭلىشىش ئۇچۇرى قىلىپ ئەۋەتىپ ، باشقۇرغۇچىڭىزنىڭ بەزىلىرىنى تەڭشىگەن-تەڭشىمىگەنلىكىنى كۆرۈڭ", + "- With projects you can create quick links between conversations, files and other items" : "- تۈرلەر ئارقىلىق سۆھبەت ، ھۆججەت ۋە باشقا تۈرلەر ئارىسىدا تېز ئۇلىنىش ھاسىل قىلالايسىز", + "- You can now mention guests in the chat" : "- ھازىر پاراڭدىكى مېھمانلارنى تىلغا ئالالايسىز", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- سۆھبەتتە ھازىر بىر لوبىخانا بولالايدۇ. بۇ رىياسەتچىلەرنىڭ سۆھبەتكە قاتنىشىشىغا ۋە تېلېفون قىلىپ يىغىننى تەييارلىشىغا يول قويىدۇ ، ئابونتلار ۋە مېھمانلار ساقلاشقا مەجبۇر بولىدۇ", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- سىز ھازىر باشقا ئىشلەتكۈچىلەرگە ئۇچۇرلىرىڭىزنىڭ مەزمۇنىنى تېخىمۇ كۆپ مەزمۇن بىلەن تەمىنلەيدىغان ئۇچۇرلارغا بىۋاسىتە جاۋاب قايتۇرالايسىز", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- سۆھبەت ۋە قاتناشقۇچىلارنى ئىزدەش ھازىر بار بولغان سۆھبەتلىرىڭىزنى سۈزۈپ ، ئىلگىرىكى سۆھبەتلەرنى تېپىشقا تېخىمۇ قولايلىق يارىتىدۇ", + "- You can now add custom user groups to conversations when the circles app is installed" : "- چەمبىرەك دېتالى قاچىلىغاندا ھازىر سۆھبەتكە ئىختىيارى ئىشلەتكۈچى گۇرۇپپىسىنى قوشالايسىز", + "- Check out the new grid and call view" : "- يېڭى تور ۋە چاقىرىش كۆرۈنۈشىنى تەكشۈرۈپ بېقىڭ", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- ھازىر ھۆججەتلىرىڭىزنى ئۈسكۈنىڭىزدىن بىۋاسىتە پاراڭغا يۈكلىيەلەيسىز ۋە سۆرەلەيسىز", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- ئورتاق ھۆججەتلەر ھازىر كۆرۈرمەن ئەپلىرى بىلەن پاراڭلىشىش كۆرۈنۈشىنىڭ ئىچىدە بىۋاسىتە ئېچىلدى", + "- You can now search for chats and messages in the unified search in the top bar" : "- سىز ھازىر ئۈستۈنكى بالداقتىكى بىرلىككە كەلگەن ئىزدەشتە پاراڭ ۋە ئۇچۇرلارنى ئىزدەيسىز", + "- Spice up your messages with emojis from the emoji picker" : "- emoji تاللىغۇچتىن emojis بىلەن ئۇچۇرلىرىڭىزنى تېتىتقۇ", + "- You can now change your camera and microphone while being in a call" : "- ھازىر تېلېفون قىلىۋاتقاندا كامېرا ۋە مىكروفونىڭىزنى ئۆزگەرتەلەيسىز", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- پاراڭلىرىڭىزغا بەزى مەزمۇنلارنى تەسۋىرلەپ بېرىڭ ھەمدە ئۇنى ئېچىڭ ، شۇنداق بولغاندا تىزىملاتقان ئابونتلار ئۇنى تاپالايدۇ ۋە ئۆزى قوشۇلالايدۇ", + "- See a read status and send failed messages again" : "- ئوقۇش ھالىتىنى كۆرۈڭ ۋە مەغلۇپ بولغان ئۇچۇرلارنى قايتا ئەۋەتىڭ", + "- Raise your hand in a call with the R key" : "- R كۇنۇپكىسى بىلەن تېلېفوندا قولىڭىزنى كۆتۈرۈڭ", + "- Join the same conversation and call from multiple devices" : "- ئوخشاش سۆھبەتكە قاتنىشىڭ ۋە كۆپ ئۈسكۈنىدىن تېلېفون قىلىڭ", + "- Send voice messages, share your location or contact details" : "- ئاۋازلىق ئۇچۇر ئەۋەتىڭ ، ئورنىڭىز ياكى ئالاقىلىشىش ئۇچۇرلىرىڭىزنى ئورتاقلىشىڭ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- سۆھبەتكە گۇرۇپپا قوشۇڭ ، يېڭى گۇرۇپپا ئەزالىرى ئاپتوماتىك ھالدا قاتناشقۇچىلار سۈپىتىدە قوشۇلىدۇ", + "- A preview of your audio and video is shown before joining a call" : "- تېلېفونغا كىرىشتىن بۇرۇن ئاۋازلىق ۋە سىننىڭ ئالدىن كۆرۈشى كۆرسىتىلىدۇ", + "- You can now blur your background in the newly designed call view" : "- يېڭى لايىھەلەنگەن تېلېفون كۆرۈنۈشىدە ئارقا كۆرۈنۈشىڭىزنى خىرەلەشتۈرەلەيسىز", + "- Moderators can now assign general and individual permissions to participants" : "- رىياسەتچىلەر ھازىر قاتناشقۇچىلارغا ئومۇمىي ۋە ئايرىم ئىجازەتلەرنى بېرەلەيدۇ", + "- You can now react to chat messages" : "- ھازىر پاراڭلىشىش ئۇچۇرلىرىغا ئىنكاس قايتۇرالايسىز", + "- In the sidebar you can now find an overview of the latest shared items" : "- يانبالداقتا سىز ئەڭ يېڭى ئورتاق بەھرىلىنىدىغان تۈرلەرنىڭ ئومۇمىي كۆرۈنۈشىنى تاپالايسىز", + "- Use a poll to collect the opinions of others or settle on a date" : "- راي سىناش ئارقىلىق باشقىلارنىڭ پىكىرىنى توپلاڭ ياكى بىر كۈندە ھەل قىلىڭ", + "- Configure an expiration time for chat messages" : "- پاراڭلىشىش ئۇچۇرلىرىنىڭ ۋاقتى توشىدۇ", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- چوڭ پاراڭلاردا باشقىلارغا خەۋەر قىلماي تېلېفون قىلىشنى باشلاڭ. تېلېفون باشلانغاندىن كېيىن ئايرىم تېلېفون ئۇقتۇرۇشى ئەۋەتەلەيسىز.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- جىددىي ئەھۋال بولمىسا تاپشۇرۇۋالغۇچىلارغا خەۋەر قىلماي پاراڭلىشىش ئۇچۇرلىرىنى ئەۋەتىڭ", + "- Emojis can now be autocompleted by typing a \":\"" : "- Emojis ھازىر \":\" نى يېزىش ئارقىلىق ئاپتوماتىك تاماملىنىدۇ.", + "- Link various items using the new smart-picker by typing a \"/\"" : "- يېڭى ئەقلىي ئىقتىدارلىق تاللىغۇچ ئارقىلىق «/» نى يېزىش ئارقىلىق ھەر خىل تۈرلەرنى ئۇلاڭ", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- رىياسەتچىلەر ھازىر بۆسۈش ئۆيى قۇرالايدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Calls can now be recorded (requires the High-performance backend)" : "- تېلېفوننى ھازىر خاتىرىلىگىلى بولىدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Conversations can now have an avatar or emoji as icon" : "- سۆھبەت ھازىر سىنبەلگە سۈپىتىدە باش سۈرىتى ياكى emoji بولالايدۇ", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- مەۋھۇم تەگلىك ھازىر سىنلىق سۆزلىشىشتىكى قالايمىقان ئارقا كۆرۈنۈشتىن باشقا", + "- Reactions are now available during calls" : "- ھازىر تېلېفون قىلىش جەريانىدا ئىنكاسلار بار", + "- Typing indicators show which users are currently typing a message" : "- كىرگۈزۈش كۆرسەتكۈچلىرى قايسى ئابونتلارنىڭ ھازىر ئۇچۇر يېزىۋاتقانلىقىنى كۆرسىتىپ بېرىدۇ", + "- Groups can now be mentioned in chats" : "- گۇرۇپپىلارنى ھازىر پاراڭلاردا تىلغا ئالغىلى بولىدۇ", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- ئەگەر ترانسكرىپسىيە تەمىنلىگۈچى دېتالى تىزىملاتسا ، تېلېفون خاتىرىلىرى ئاپتوماتىك كۆچۈرۈلىدۇ", + "- Chat messages can be translated if a translation provider app is registered" : "- تەرجىمە تەمىنلىگۈچى ئەپ تىزىملاتقان بولسا پاراڭلىشىش ئۇچۇرلىرىنى تەرجىمە قىلىشقا بولىدۇ", + "- **Markdown** can now be used in _chat_ messages" : "- ** Markdown ** نى _chat_ ئۇچۇرلىرىدا ئىشلىتىشكە بولىدۇ", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhooks ھازىر bots نى يولغا قويالايدۇ. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشمەكچى بولسىڭىز https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- پاراڭلىشىش ئۇچۇرىغا ئەسكەرتىش ئورنىتىپ ، كېيىن ئۇقتۇرۇش قىلىنىدۇ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- ** ئەسكەرتىش ئارقىلىق ئۆزىڭىزگە ** پاراڭ ئىشلىتىپ خاتىرە قالدۇرۇڭ ۋە ئۈسكۈنىڭىز ئارىسىدا ئۇچۇر ئورتاقلىشىڭ", + "- Captions allow to send a message with a file at the same time" : "- خەتلەر بىرلا ۋاقىتتا ھۆججەت بىلەن ئۇچۇر ئەۋەتىشكە يول قويىدۇ", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- ئېكراننى ھەمبەھىرلەۋاتقاندا ياڭراتقۇنىڭ سىن كۆرۈنۈشى كۆرۈندى ، چاقىرىش ئىنكاسى جانلاندى", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- ئۇچۇرلارنى تىزىمغا كىرگەن ئاپتورلار ۋە رىياسەتچىلەر 6 سائەت تەھرىرلىيەلەيدۇ", + "- Unsent message drafts are now saved in your browser" : "- ئەۋەتىلمىگەن ئۇچۇر لايىھەلىرى تور كۆرگۈچىڭىزدە ساقلاندى", + "- Text chatting can now be done in a federated way with other Talk servers" : "- تېكىست پاراڭلىشىش ھازىر باشقا سۆھبەت مۇلازىمېتىرلىرى بىلەن فېدېراتسىيە ئۇسۇلدا ئېلىپ بېرىلسا بولىدۇ", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- رىياسەتچىلەر ھازىر ھېسابات ۋە مېھمانلارنى چەكلەپ ، ئۇلارنىڭ سۆھبەتكە قايتا كىرىشىنىڭ ئالدىنى ئالىدۇ", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- ئۇلانغان كالېندار ھادىسىلىرى ۋە ئىشخانا سىرتىدىكى ئالماشتۇرۇشتىن كەلگەن تېلېفونلار ھازىر سۆھبەتتە كۆرسىتىلدى", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- چاقىرىشنى باشقا پاراڭ مۇلازىمېتىرلىرى بىلەن فېدېراتىپ ئۇسۇلدا قىلغىلى بولىدۇ (يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Windows، macOS ۋە Linux ئۈچۈن لايىھەلەنگەن Nextcloud Talk ئۈستەل يۈزى كىلىيېنتىنى تونۇشتۇرۇش: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Nextcloud ياردەمچىسى ئارقىلىق سۆھبەتلەردىكى تېلېفون خاتىرىلىرى ۋە ئوقۇلمىغان ئۇچۇرلارنى خۇلاسىلەڭ", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- تەكلىپ قىلىنغان مېھمانلارنى ئۇلارنىڭ ئېلخەت ئادرېسى ئارقىلىق تونۇش، قاتناشقۇچىلار تىزىملىكىنى ئىمپورت قىلىش، بېلەت تاشلاش لايىھەلىرىنى كىرگۈزۈش ۋە قاتناشقۇچىلار تىزىملىكىنى چۈشۈرۈش قاتارلىق ئۇسۇللار بىلەن يىغىنلارنى ياخشىلاش.", + "- Archive conversations to stay focused" : "- دىققەتنى چاچماسلىق ئۈچۈن سۆھبەتنى ئارخىپلا", + "- Schedule a meeting into your calendar from within a conversation" : "- سۆھبەت ئىچىدىن كالېندارىڭىزغا يىغىن پىلانلاڭ", + "- Search for messages of the current conversation directly in the right sidebar" : "- نۆۋەتتىكى سۆھبەتنىڭ ئۇچۇرلىرىنى بىۋاسىتە ئوڭ تەرەپتىكى يان بالداقتىن ئىزدەڭ", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- يېڭى قىسقا تىزىملىك ​​ئارقىلىق تېخىمۇ كۆپ سۆھبەتلەرنى دەسلەپكى قاراشتىلا كۆرۈڭ (سۆھبەت تەڭشەكلىرىدە قوزغىتىڭ)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- يىغىن سۆھبەتلىرى ھازىر كالېنداردىكى ماۋزۇ ۋە چۈشەندۈرۈشنى ماسلاشتۇرىدۇ ھەمدە باشلىنىشقا يېقىنلاشقۇچە ئىزدەش فىلتىرى بىلەن يوشۇرۇلىدۇ.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- ئۇچۇر مەزمۇنىنى سۆھبەت تىزىملىكى ۋە ئۇقتۇرۇشلاردىن يوشۇرۇش ئۈچۈن، ئۇقتۇرۇش تەڭشەكلىرىدە سۆھبەتلەرنى سەزگۈر دەپ بەلگىلەڭ.", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- «بىئارام قىلماڭ» دېگەن ۋاقىتتا ئۇچۇر قوبۇل قىلىش ئۈچۈن، سۆھبەتلەرنى مۇھىم دەپ بەلگىلەڭ", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- يېڭى گۇرۇپپا يىغىنىنى دەرھال قۇرۇش ئۈچۈن، باشقا قاتناشقۇچىلارنى يەككە-يەككە چاقىرىشقا قوشۇڭ", + "- Use threads to keep your chat and discussions organized" : "- پاراڭلىشىش ۋە مۇزاكىرىلىرىڭىزنى تەرتىپلىك ساقلاش ئۈچۈن تېمىلارنى ئىشلىتىڭ", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- تېلېفون جەريانىدا نەق مەيداندىن تەرجىمە قىلىشقا بولىدۇ (نەق مەيداندىن تەرجىمە قىلىش ExApp ۋە يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى تەلەپ قىلىدۇ)", + "_All %n participant_::_All %n participants_" : ["بارلىق %n قاتناشقۇچى","بارلىق %n قاتناشقۇچىلار"], + "Talk updates ✅" : "پاراڭ يېڭىلاش ✅", + "Reaction deleted by author" : "ئاپتور تەرىپىدىن ئۆچۈرۈلگەن ئىنكاس", + "{actor} created the conversation" : "{actor} سۆھبەتنى قۇردى", + "You created the conversation" : "سۆھبەتنى قۇردىڭىز", + "System created the conversation" : "سىستېما سۆھبەتنى قۇردى", + "An administrator created the conversation" : "باشقۇرغۇچى سۆھبەتنى قۇردى", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} سۆھبەتكە «%1$s» دىن «%2$s» غا ئۆزگەرتتى.", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "سۆھبەتنىڭ نامىنى «%1$s» دىن «%2$s» غا ئۆزگەرتتىڭىز.", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "بىر باشقۇرغۇچى سۆھبەتنىڭ نامىنى «%1$s» دىن «%2$s» غا ئۆزگەرتتى.", + "{actor} set the description" : "{actor} چۈشەندۈرۈشنى بەلگىلەڭ", + "You set the description" : "چۈشەندۈرۈشنى تەڭشىدىڭىز", + "An administrator set the description" : "باشقۇرغۇچى چۈشەندۈرۈشنى بەلگىلىدى", + "{actor} removed the description" : "{actor} چۈشەندۈرۈشنى ئۆچۈردى", + "You removed the description" : "چۈشەندۈرۈشنى ئۆچۈردىڭىز", + "An administrator removed the description" : "باشقۇرغۇچى بۇ چۈشەندۈرۈشنى ئۆچۈرۈۋەتتى", + "You started a silent call" : "ئۈن-تىنسىز تېلېفون باشلىدىڭىز", + "Outgoing silent call" : "چىققان ئۈنسىز تېلىفۇن", + "{actor} started a silent call" : "{actor} جىمجىت تېلېفون باشلىدى", + "Incoming silent call" : "كەلگەن ئۈنسىز تېلىفۇن", + "You started a call" : "سىز تېلېفوننى باشلىدىڭىز", + "Outgoing call" : "چاقىرغان تېلىفۇن", + "{actor} started a call" : "{actor} چاقىرىشنى باشلىدى", + "Incoming call" : "كەلگەن تېلىفۇن", + "{actor} joined the call" : "{actor} چاقىرىققا قاتناشتى", + "You joined the call" : "سىز تېلېفونغا قاتناشتىڭىز", + "{actor} left the call" : "{actor} تېلېفوندىن ئايرىلدى", + "You left the call" : "سىز تېلېفوندىن ئايرىلدىڭىز", + "{actor} unlocked the conversation" : "{actor} سۆھبەتنى ئاچتى", + "You unlocked the conversation" : "سۆھبەتنى ئاچتىڭىز", + "An administrator unlocked the conversation" : "باشقۇرغۇچى سۆھبەتنى ئاچتى", + "{actor} locked the conversation" : "{actor} سۆھبەتنى قۇلۇپلىدى", + "You locked the conversation" : "سۆھبەتنى قۇلۇپلىدىڭىز", + "An administrator locked the conversation" : "باشقۇرغۇچى سۆھبەتنى قۇلۇپلىدى", + "{actor} limited the conversation to the current participants" : "{actor} سۆھبەتنى ھازىرقى قاتناشقۇچىلار بىلەنلا چەكلىدى", + "You limited the conversation to the current participants" : "سىز سۆھبەتنى نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىدىڭىز", + "An administrator limited the conversation to the current participants" : "بىر باشقۇرغۇچى سۆھبەتنى نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىدى", + "{actor} opened the conversation to registered users" : "{actor} تىزىملاتقان ئابونتلارغا سۆھبەتنى ئاچتى", + "You opened the conversation to registered users" : "سۆھبەتنى تىزىملاتقان ئىشلەتكۈچىلەرگە ئاچتىڭىز", + "An administrator opened the conversation to registered users" : "باشقۇرغۇچى تىزىملاتقان ئابونتلارغا سۆھبەتنى ئاچتى", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتى", + "You opened the conversation to registered users and users created with the Guests app" : "سىز مېھمانلار ئەپى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتىڭىز", + "An administrator opened the conversation to registered users and users created with the Guests app" : "بىر باشقۇرغۇچى مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتى", + "The conversation is now open to everyone" : "سۆھبەت ھازىر كۆپچىلىككە ئېچىۋېتىلدى", + "{actor} opened the conversation to everyone" : "{actor} كۆپچىلىككە سۆھبەتنى ئاچتى", + "You opened the conversation to everyone" : "سۆھبەتنى كۆپچىلىككە ئاچتىڭىز", + "{actor} restricted the conversation to moderators" : "{actor} رىياسەتچىلەر بىلەن سۆھبەتنى چەكلىدى", + "You restricted the conversation to moderators" : "رىياسەتچىلەر بىلەن سۆھبەتنى چەكلىدىڭىز", + "{actor} started breakout rooms" : "{actor} بۆسۈش ئۆيلىرىنى باشلىدى", + "You started breakout rooms" : "بۆسۈش ئۆيلىرىنى باشلىدىڭىز", + "{actor} stopped breakout rooms" : "{actor} بۆسۈش ئۆيلىرىنى توختاتتى", + "You stopped breakout rooms" : "بۆسۈش ئۆيلىرىنى توختاتتىڭىز", + "{actor} allowed guests" : "{actor} مېھمانلارغا رۇخسەت قىلدى", + "You allowed guests" : "مېھمانلارغا رۇخسەت قىلدىڭىز", + "An administrator allowed guests" : "باشقۇرغۇچى مېھمانلارغا رۇخسەت قىلدى", + "{actor} disallowed guests" : "{actor} مېھمانلارنى رەت قىلدى", + "You disallowed guests" : "مېھمانلارنى رەت قىلدىڭىز", + "An administrator disallowed guests" : "باشقۇرغۇچى مېھمانلارنى رەت قىلدى", + "{actor} set a password" : "{actor} پارول بەلگىلەڭ", + "You set a password" : "پارول بەلگىلىدىڭىز", + "An administrator set a password" : "باشقۇرغۇچى پارول بەلگىلىدى", + "{actor} removed the password" : "{actor} پارولنى ئېلىۋەتتى", + "You removed the password" : "پارولنى ئۆچۈردىڭىز", + "An administrator removed the password" : "باشقۇرغۇچى پارولنى ئۆچۈرۈۋەتتى", + "{actor} added {user}" : "{actor} قوشۇلدى {user}", + "You joined the conversation" : "سۆھبەتكە قاتناشتىڭىز", + "{actor} joined the conversation" : "{actor} سۆھبەتكە قاتناشتى", + "You added {user}" : "سىز {user} نى قوشتىڭىز", + "{actor} added you" : "{actor} سىزنى قوشتى", + "An administrator added you" : "باشقۇرغۇچى سىزنى قوشتى", + "An administrator added {user}" : "باشقۇرغۇچى {user} نى قوشتى", + "You left the conversation" : "سۆھبەتتىن ئايرىلدىڭىز", + "{actor} left the conversation" : "{actor} سۆھبەتتىن ئايرىلدى", + "{actor} removed {user}" : "{actor} چىقىرىۋېتىلدى {user}", + "You removed {user}" : "سىز {user} نى ئۆچۈردىڭىز", + "{actor} removed you" : "{actor} سىزنى ئېلىۋەتتى", + "An administrator removed you" : "باشقۇرغۇچى سىزنى ئۆچۈرۈۋەتتى", + "An administrator removed {user}" : "باشقۇرغۇچى {user} نى ئۆچۈردى", + "{actor} invited {federated_user}" : "{actor} تەكلىپ قىلىنغان {federated_user}", + "You invited {federated_user}" : "سىز {federated_user} نى تەكلىپ قىلدىڭىز", + "You accepted the invitation" : "تەكلىپنى قوبۇل قىلدىڭىز", + "{actor} invited you" : "{actor} سىزنى تەكلىپ قىلدى", + "An administrator invited you" : "باشقۇرغۇچى سىزنى تەكلىپ قىلدى", + "An administrator invited {federated_user}" : "باشقۇرغۇچى {federated_user} نى تەكلىپ قىلدى", + "{federated_user} accepted the invitation" : "{federated_user} تەكلىپنى قوبۇل قىلدى", + "{actor} removed {federated_user}" : "{actor} چىقىرىۋېتىلدى {federated_user}", + "You removed {federated_user}" : "ئۆچۈرۈۋەتتىڭىز {federated_user}", + "You declined the invitation" : "تەكلىپنى رەت قىلدىڭىز", + "An administrator removed {federated_user}" : "باشقۇرغۇچى {federated_user} نى چىقىرۋەتتى", + "{federated_user} declined the invitation" : "{federated_user} تەكلىپنى رەت قىلدى", + "{actor} added group {group}" : "{actor} قوشۇلغان گۇرۇپپا {group}", + "You added group {group}" : "گۇرۇپپا {group} قوشتىڭىز", + "An administrator added group {group}" : "باشقۇرغۇچى گۇرۇپپا {group} قوشتى", + "{actor} removed group {group}" : "{actor} چىقىرىۋېتىلگەن گۇرۇپپا {group}", + "You removed group {group}" : "گۇرۇپپا {group} ئۆچۈردىڭىز", + "An administrator removed group {group}" : "باشقۇرغۇچى گۇرۇپپا {group} ئۆچۈردى", + "{actor} added team {circle}" : "{actor} قوشۇلغان گۇرۇپپا {circle}", + "You added team {circle}" : "گۇرۇپپا {circle} قوشتىڭىز", + "An administrator added team {circle}" : "باشقۇرغۇچى گۇرۇپپا {circle} قوشتى", + "{actor} removed team {circle}" : "{actor} چىقىرىۋېتىلگەن گۇرۇپپا {circle}", + "You removed team {circle}" : "گۇرۇپپا {circle} ئۆچۈردىڭىز", + "An administrator removed team {circle}" : "باشقۇرغۇچى گۇرۇپپا {circle} ئۆچۈردى", + "{actor} added {phone}" : "{actor} قوشۇلدى {phone}", + "You added {phone}" : "{phone} قوشتىڭىز", + "An administrator added {phone}" : "باشقۇرغۇچى {phone} قوشتى", + "{actor} removed {phone}" : "{actor} چىقىرىۋېتىلدى {phone}", + "You removed {phone}" : "{phone} ئېلىۋەتتىڭىز", + "An administrator removed {phone}" : "باشقۇرغۇچى {phone} ئېلىۋەتتى", + "{actor} promoted {user} to moderator" : "{actor} ئۆستۈرۈلگەن {user} رىياسەتچىگە ئۆستۈرۈلدى", + "You promoted {user} to moderator" : "سىز {user} نى رىياسەتچىگە ئۆستۈردىڭىز", + "{actor} promoted you to moderator" : "{actor} سىزنى رىياسەتچىگە ئۆستۈردى", + "An administrator promoted you to moderator" : "باشقۇرغۇچى سىزنى رىياسەتچىگە ئۆستۈردى", + "An administrator promoted {user} to moderator" : "باشقۇرغۇچى {user} نى رىياسەتچىگە ئۆستۈردى", + "{actor} demoted {user} from moderator" : "رىياسەتچىدىن {actor} تۆۋەنلىتىلگەن {user}", + "You demoted {user} from moderator" : "سىز {user} نى رىياسەتچىدىن چۈشۈردىڭىز", + "{actor} demoted you from moderator" : "{actor} سىزنى رىياسەتچىدىن چۈشۈردى", + "An administrator demoted you from moderator" : "باشقۇرغۇچى سىزنى رىياسەتچىدىن چۈشۈردى", + "An administrator demoted {user} from moderator" : "باشقۇرغۇچى {user} نى رىياسەتچىدىن چۈشۈردى", + "{actor} shared a file which is no longer available" : "{actor} ئەمدى ئىشلەتكىلى بولمايدىغان ھۆججەتنى ھەمبەھىرلىدى", + "You shared a file which is no longer available" : "ئەمدى ئىشلەتكىلى بولمايدىغان ھۆججەتنى ئورتاقلاشتىڭىز", + "File shares are currently not supported in federated conversations" : "فېدېراتسىيە پاراڭلىرىدا ھۆججەت ھەمبەھىرلىرىنى قوللىمايدۇ", + "The shared location is malformed" : "ئورتاق بەھرىلىنىدىغان ئورۇن خاتا", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} Mat بۇ سۆھبەتنى باشقا پاراڭلار بىلەن ماس قەدەمدە ماسلاشتۇرۇش ئۈچۈن Matterbridge نى قۇردى", + "You set up Matterbridge to synchronize this conversation with other chats" : "سىز بۇ سۆھبەتنى باشقا پاراڭلار بىلەن ماس قەدەمدە ماسلاشتۇرۇش ئۈچۈن Matterbridge نى قۇردىڭىز", + "{actor} created thread {title}" : "{actor} يىپ {title} نى قۇردى", + "You created thread {title}" : "سىز يىپ {title} نى قۇردىڭىز", + "{actor} renamed thread {title}" : "{actor} يىپ {title} نىڭ ئىسمىنى ئۆزگەرتتى", + "You renamed thread {title}" : "سىز يىپ {title} نىڭ ئىسمىنى ئۆزگەرتتىڭىز", + "{actor} updated the Matterbridge configuration" : "{actor} Matterbridge سەپلىمىسىنى يېڭىلىدى", + "You updated the Matterbridge configuration" : "Matterbridge سەپلىمىسىنى يېڭىلىدىڭىز", + "{actor} removed the Matterbridge configuration" : "{actor} Matterbridge سەپلىمىسىنى ئېلىۋەتتى", + "You removed the Matterbridge configuration" : "Matterbridge سەپلىمىسىنى ئۆچۈردىڭىز", + "{actor} started Matterbridge" : "{actor} Matterbridge نى باشلىدى", + "You started Matterbridge" : "سىز Matterbridge نى باشلىدىڭىز", + "{actor} stopped Matterbridge" : "{actor} Matterbridge نى توختاتتى", + "You stopped Matterbridge" : "سىز Matterbridge نى توختاتتىڭىز", + "{actor} deleted a message" : "{actor} ئۇچۇرنى ئۆچۈردى", + "You deleted a message" : "سىز بىر ئۇچۇرنى ئۆچۈردىڭىز", + "{actor} edited a message" : "{actor} ئۇچۇرنى تەھرىرلىدى", + "You edited a message" : "سىز بىر ئۇچۇرنى تەھرىرلىدىڭىز", + "{actor} pinned a message" : "{actor} بىر ئۇچۇرنى مىخلىدى", + "You pinned a message" : "سىز بىر ئۇچۇرنى مىخلىدىڭىز", + "{actor} unpinned a message" : "{actor} بىر ئۇچۇرنى مىخلىمىدىڭىز", + "Message was automatically unpinned" : "ئۇچۇر ئاپتۇماتىك مىخلانمىدى", + "You unpinned a message" : "سىز بىر ئۇچۇرنى مىخلىمىدىڭىز", + "{actor} deleted a reaction" : "{actor} بىر ئىنكاسنى ئۆچۈردى", + "You deleted a reaction" : "سىز بىر ئىنكاسنى ئۆچۈردىڭىز", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["سىز ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدىڭىز"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["سىز ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدىڭىز"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["سىز ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدىڭىز"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["سىز ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدىڭىز","سىز ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدىڭىز"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n ھەپتىگە تەڭشىدى"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n كۈنگە تەڭشىدى"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n سائەتكە تەڭشىدى"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدى","{actor} ئۇچۇر مۇددىتىنى %n مىنۇتقا تەڭشىدى"], + "{actor} disabled message expiration" : "{actor} چەكلەنگەن ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "You disabled message expiration" : "ئۇچۇرنىڭ مۇددىتى توشتى", + "{actor} cleared the history of the conversation" : "{actor} سۆھبەتنىڭ تارىخىنى تازىلىدى", + "You cleared the history of the conversation" : "سۆھبەتنىڭ تارىخىنى تازىلىدىڭىز", + "{actor} set the conversation picture" : "{actor} سۆھبەت رەسىمىنى تەڭشىدى", + "You set the conversation picture" : "سۆھبەت رەسىمىنى تەڭشىدىڭىز", + "{actor} removed the conversation picture" : "{actor} سۆھبەت رەسىمىنى ئېلىۋەتتى", + "You removed the conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈردىڭىز", + "{actor} ended the poll {poll}" : "{actor} راي سىناش {poll} نى ئاخىرلاشتۇردى", + "You ended the poll {poll}" : "راي سىناش {poll} نى ئاخىرلاشتۇردىڭىز", + "{actor} started the video recording" : "{actor} سىن خاتىرىسىنى باشلىدى", + "You started the video recording" : "سىن خاتىرىسىنى باشلىدىڭىز", + "{actor} stopped the video recording" : "{actor} سىن خاتىرىسىنى توختاتتى", + "You stopped the video recording" : "سىن خاتىرىسىنى توختاتتىڭىز", + "{actor} started the audio recording" : "{actor} ئاۋاز خاتىرىسىنى باشلىدى", + "You started the audio recording" : "ئاۋاز خاتىرىسىنى باشلىدىڭىز", + "{actor} stopped the audio recording" : "{actor} ئاۋاز خاتىرىسىنى توختاتتى", + "You stopped the audio recording" : "ئاۋاز خاتىرىسىنى توختاتتىڭىز", + "The recording failed" : "خاتىرىلەش مەغلۇپ بولدى", + "Someone voted on the poll {poll}" : "بەزىلەر بېلەت تاشلاش {poll} تاشلاشقا بېلەت تاشلىدى", + "Message deleted by author" : "ئاپتور تەرىپىدىن ئۆچۈرۈلگەن ئۇچۇر", + "Message deleted by {actor}" : "ئۇچۇر {actor} by تەرىپىدىن ئۆچۈرۈلدى", + "Message deleted by you" : "سىز تەرىپىدىن ئۆچۈرۈلگەن ئۇچۇر", + "Deleted user" : "ئىشلەتكۈچى ئۆچۈرۈلدى", + "Unknown number" : "نامەلۇم نومۇر", + "Administration" : "باشقۇرۇش", + "System" : "سىستېما", + "%s (guest)" : "%s (مېھمان)", + "Missed call" : "جاۋاپسىز تېلىفۇن", + "Unanswered call" : "جاۋاپسىز تېلىفۇن", + "Call ended (Duration {duration})" : "چاقىرىش ئاخىرلاشتى (ئۇزۇنلۇقى {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "چاقىرىش ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (ۋاقتى {duration} ۋاقتى)", + "{actor} ended the call (Duration {duration})" : "{actor} چاقىرىقنى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى، چۈنكى سۆھبەت ۋاقتى ئەڭ ئۇزۇن ۋاقىتقا يەتتى (ئۇزۇنلۇقى {duration})","%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى، چۈنكى سۆھبەت ۋاقتى ئەڭ ئۇزۇن ۋاقىتقا يەتتى (ئۇزۇنلۇقى {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى (ئۇزۇنلۇق {duration})","%n مېھمان بىلەن بولغان سۆھبەت ئاخىرلاشتى (ئۇزۇنلۇق {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} مىھمان %n بىلەن بولغان تېلىفۇننى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration}) ","{actor} مىھمان %n بىلەن بولغان تېلىفۇننى ئاخىرلاشتۇردى (ئۇزۇنلۇقى {duration}) "], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} بىلەن بولغان تېلېفون ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (ۋاقتى {duration})", + "Call with {user1} ended (Duration {duration})" : "{user1} with بىلەن چاقىرىش ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} چاقىرىشنى {user1} بىلەن ئاخىرلاشتۇردى (ۋاقتى {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1} ۋە {user2} بىلەن چاقىرىش ئاخىرلاشتى ، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (داۋاملىشىش ۋاقتى {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "{user1} ۋە {user2} بىلەن چاقىرىش ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} چاقىرىشنى {user1} ۋە {user2} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "{user1}، {user2} ۋە {user3} بىلەن چاقىرىش ئاخىرلاشتى، چۈنكى ئۇ ئەڭ يۇقىرى چاقىرىش ۋاقتىغا يەتتى (داۋاملىشىش ۋاقتى {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "{user1} ، {user2} ۋە {user3} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2} ۋە {user3} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "ئەڭ يۇقىرى چاقىرىش ۋاقتى (ۋاقتى {duration} ۋاقتى) غا يەتكەنلىكى ئۈچۈن {user1} ، {user2} ، {user3} ۋە {user4} بىلەن تېلېفون ئاخىرلاشتى.", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "{user1} ، {user2} ، {user3} ۋە {user4} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2}, {user3} ۋە {user4} (ۋاقتى {duration}) بىلەن ئاخىرلاشتۇردى.", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "ئەڭ يۇقىرى چاقىرىش ۋاقتى (ۋاقتى {duration} ۋاقتى) غا يەتكەنلىكى ئۈچۈن {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفون ئاخىرلاشتى.", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "{user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن تېلېفون ئاخىرلاشتى (ۋاقتى {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} چاقىرىشنى {user1}, {user2}, {user3}, {user4} ۋە {user5} بىلەن ئاخىرلاشتۇردى (ۋاقتى {duration})", + "Message of {user} in {conversation}" : "{user} نىڭ {conversation} دىكى ئۇچۇرى", + "Message of {user}" : "{user} نىڭ ئۇچۇرى", + "Message of a deleted user in {conversation}" : "{conversation} ئۆچۈرۈلگەن ئىشلەتكۈچىنىڭ ئۇچۇرى", + "Talk conversations" : "پاراڭلىشىش", + "Talk to %s" : "%s بىلەن پاراڭلىشىڭ", + "An error occurred. Please contact your administrator." : "خاتالىق كۆرۈلدى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Storage quota exceeded" : "ساقلاش نورمىسى ئېشىپ كەتتى", + "File not found" : "ھۆججەت تېپىلمىدى", + "File is not shared, or shared but not with the user" : "ھۆججەت ئورتاقلاشمايدۇ ، ھەمبەھىرلەنمەيدۇ ، ئەمما ئىشلەتكۈچى بىلەن ئورتاقلاشمايدۇ", + "No account available to delete." : "ئۆچۈرگىلى بولىدىغان ھېسابات يوق.", + "Poll" : "راي سىناش", + "Password needs to be set" : "پارول ئورنىتىلىشى كېرەك", + "Uploading the file failed" : "ھۆججەتنى چىقىرىش مەغلۇپ بولدى", + "No image file provided" : "رەسىم ھۆججىتى تەمىنلەنمىدى", + "File is too big" : "ھۆججەت بەك چوڭ", + "Invalid file provided" : "ئىناۋەتسىز ھۆججەت تەمىنلەندى", + "Invalid image" : "ئىناۋەتسىز رەسىم", + "Unknown filetype" : "نامەلۇم ھۆججەت شەكلى", + "Talk mentions" : "سۆھبەت تىلغا ئېلىنىدۇ", + "More conversations" : "تېخىمۇ كۆپ سۆھبەت", + "Say hi to your friends and colleagues!" : "دوستلىرىڭىز ۋە خىزمەتداشلىرىڭىزغا سالام!", + "No unread mentions" : "ئوقۇلمىغان تىلغا ئېلىنمايدۇ", + "Call in progress" : "چاقىرىش داۋاملىشىۋاتىدۇ", + "You were mentioned" : "سىز تىلغا ئېلىندى", + "Write to conversation" : "سۆھبەتكە يېزىڭ", + "Writes event information into a conversation of your choice" : "پائالىيەت ئۇچۇرىنى ئۆزىڭىز تاللىغان سۆھبەتكە يېزىدۇ", + "Missing email field in header line" : "ماۋزو قۇرىدا ئېلخەت ئورنى كەم", + "Following lines are invalid: %s" : "تۆۋەندىكى قۇرلار ئىناۋەتسىز: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s سىزنى سۆھبەت \"%2$s\" كە تەكلىپ قىلدى.", + "You were invited to conversation \"%s\"." : "سىز سۆھبەت \"%s\" كە تەكلىپ قىلىندىڭىز.", + "Conversation invitation" : "سۆھبەت تەكلىپنامىسى", + "Scheduled time" : "ۋاقىت ئورۇنلاشتۇرۇش", + "Description" : "چۈشەندۈرۈش", + "You can also dial-in via phone with the following details" : "تۆۋەندىكى تەپسىلاتلار بىلەن تېلېفون ئارقىلىق تېلېفون قىلالايسىز", + "Dial-in information" : "تېلېفون نومۇرى", + "Meeting ID" : "يىغىن كىملىكى", + "Your PIN" : "PIN", + "Click the button below to join the lobby now." : "ھازىر زالغا قوشۇلۇش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى چېكىڭ.", + "Click the link below to join the lobby now." : "ھازىر زالغا قوشۇلۇش ئۈچۈن تۆۋەندىكى ئۇلىنىشنى چېكىڭ.", + "Join lobby for \"%s\"" : "\"%s\" نىڭ زالىغا كىرىڭ", + "Click the button below to join the conversation now." : "ھازىر يىغىنغا قوشۇلۇش ئۈچۈن تۆۋەندىكى كۇنۇپكىنى چېكىڭ.", + "Click the link below to join the conversation now." : "ھازىر يىغىنغا قوشۇلۇش ئۈچۈن تۆۋەندىكى ئۇلىنىشنى چېكىڭ.", + "Join \"%s\"" : "\"%s\" غا كىر", + "Meeting" : "يىغىن", + "Password request: %s" : "پارول تەلىپى:%s", + "Private conversation" : "شەخسىي سۆھبەت", + "Deleted user (%s)" : "ئۆچۈرۈلگەن ئىشلەتكۈچى (%s)", + "Failed to upload call recording" : "چاقىرىش خاتىرىسىنى يۈكلىيەلمىدى", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "خاتىرىلەش مۇلازىمىتىرى چاقىرىش {call} خاتىرىسىنى يۈكلىيەلمىدى. مەمۇرىي ئورگان بىلەن ئالاقىلىشىڭ.", + "Share to chat" : "پاراڭلىشىڭ", + "Dismiss notification" : "ئۇقتۇرۇشنى ئەمەلدىن قالدۇرۇش", + "Call recording now available" : "ھازىر تېلېفون خاتىرىسىنى ئىشلەتكىلى بولىدۇ", + "The recording for the call in {call} was uploaded to {file}." : "{call} in دىكى چاقىرىشنىڭ خاتىرىسى {file} گە يۈكلەندى.", + "Transcript now available" : "ھازىر تېكىست نۇسخىسى بار", + "The transcript for the call in {call} was uploaded to {file}." : "{call} in دىكى چاقىرىشنىڭ خاتىرىسى {file} گە يۈكلەندى.", + "Failed to transcript call recording" : "تېلېفون خاتىرىسىنى خاتىرىلەش مەغلۇب بولدى", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "مۇلازىمېتىر {file} in دىكى چاقىرىش ئۈچۈن {call} دىكى خاتىرىسىنى خاتىرىلىيەلمىدى. مەمۇرىي ئورگان بىلەن ئالاقىلىشىڭ.", + "Call summary now available" : "چاقىرىش خۇلاسىسى ھازىر تەييار", + "The summary for the call in {call} was uploaded to {file}." : "{call} دىكى چاقىرىشنىڭ قىسقىچە مەزمۇنى {file} غا يۈكلەندى.", + "Failed to summarize call recording" : "تېلېفون خاتىرىسىنى خۇلاسىلەش مەغلۇپ بولدى", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "سېرۋېر {call} دىكى چاقىرىش ئۈچۈن {file} دىكى خاتىرىنى خۇلاسىلىيەلمىدى. باشقۇرۇش بىلەن ئالاقىلىشىڭ.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} سىزنى {remoteServer} دىكى {roomName} غا قاتنىشىشقا تەكلىپ قىلدى", + "Accept" : "قوبۇل قىلىڭ", + "Decline" : "رەت قىلىڭ", + "{user1} invited you to a federated conversation" : "{user1} سىزنى فېدېراتسىيە سۆھبەتكە تەكلىپ قىلدى", + "Someone reacted" : "بىرەيلەن ئىنكاس بىلدۈردى", + "New message" : "يېڭى ئۇچۇر", + "Reminder" : "ئەسكەرتىش", + "Someone mentioned you" : "بىرەيلەن سىزنى تىلغا ئالدى", + "Notification" : "ئۇقتۇرۇش", + "Someone reacted in a private conversation" : "بىرەيلەن شەخسىي سۆھبەتتە ئىنكاس بىلدۈردى", + "You received a message in a private conversation" : "سىز بىر شەخسىي سۆھبەتتە ئۇچۇر تاپشۇرۋالدىڭىز", + "Reminder in a private conversation" : "بىر شەخسىي سۆھبەتتىكى ئەسكەرتمە", + "Someone mentioned you in a private conversation" : "بىرەيلەن سىزنى شەخسىي سۆھبەتتە تىلغا ئالدى", + "Notification in a private conversation" : "بىر شەخسىي سۆھبەت ئۇختۇرۇشى", + "Reminder: You in {call}" : "ئەسكەرتىش: سىز {call}", + "Reminder: {user} in {call}" : "ئەسكەرتىش: {user} {call}", + "Reminder: Deleted user in {call}" : "ئەسكەرتىش: {call} in دىكى ئىشلەتكۈچى ئۆچۈرۈلدى", + "Reminder: {guest} (guest) in {call}" : "ئەسكەرتىش: {guest} دىكى {call} (مېھمان)", + "Reminder: Guest in {call}" : "ئەسكەرتىش: {call} in دىكى مېھمان", + "{user} reacted with {reaction}" : "{user} {reaction} بىلەن ئىنكاس قايتۇردى", + "{user} reacted with {reaction} in {call}" : "{user} چاقىرىش {call}تا {reaction} بىلەن ئىنكاس قايتۇردى", + "Deleted user reacted with {reaction} in {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى {reaction} دىكى {call} بىلەن ئىنكاس قايتۇردى", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (مېھمان) {reaction} {call} بىلەن ئىنكاس قايتۇردى", + "Guest reacted with {reaction} in {call}" : "مېھمان {reaction} دىكى {call} بىلەن ئىنكاس قايتۇردى", + "{user} in {call}" : "{user} {call}", + "Deleted user in {call}" : "{call} in دىكى ئىشلەتكۈچى ئۆچۈرۈلدى", + "{guest} (guest) in {call}" : "{call} دىكى {guest} (مېھمان)", + "Guest in {call}" : "{call} دىكى مېھمان", + "{user} sent you a private message" : "{user} سىزگە شەخسىي ئۇچۇر ئەۋەتتى", + "{user} sent a message in conversation {call}" : "{user} سۆھبەتتە ئۇچۇر ئەۋەتتى {call}", + "A deleted user sent a message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} غا ئۇچۇر ئەۋەتتى", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە ئۇچۇر ئەۋەتتى {call}", + "A guest sent a message in conversation {call}" : "بىر مېھمان سۆھبەتتە {call} ئۇچۇر ئەۋەتتى", + "{user} replied to your private message" : "{user} شەخسىي ئۇچۇرىڭىزغا جاۋاب بەردى", + "{user} replied to your message in conversation {call}" : "{user} سۆھبەتتىكى ئۇچۇرىڭىزغا {call} جاۋاب بەردى", + "A deleted user replied to your message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} ئۇچۇرىڭىزغا جاۋاب بەردى", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (مېھمان) سۆھبەتتىكى ئۇچۇرىڭىزغا {call} دەپ جاۋاب بەردى", + "A guest replied to your message in conversation {call}" : "بىر مېھمان پاراڭلىشىش ئۇچۇرىڭىزغا {call} دەپ جاۋاب بەردى", + "Reminder: You in private conversation {call}" : "ئەسكەرتىش: سىز شەخسىي سۆھبەتتە {call}", + "Reminder: A deleted user in private conversation {call}" : "ئەسكەرتىش: شەخسىي سۆھبەتتە ئۆچۈرۈلگەن ئىشلەتكۈچى {call}", + "Reminder: {user} in private conversation" : "ئەسكەرتىش: شەخسىي سۆھبەتتە {user}", + "Reminder: You in conversation {call}" : "ئەسكەرتىش: سىز سۆھبەتتە {call}", + "Reminder: {user} in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە {user} تېلېفون {call}", + "Reminder: A deleted user in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە ئۆچۈرۈلگەن ئىشلەتكۈچى {call}", + "Reminder: {guest} (guest) in conversation {call}" : "ئەسكەرتىش: سۆھبەتتە {guest} (مېھمان) {call}", + "Reminder: A guest in conversation {call}" : "ئەسكەرتىش: سۆھبەتتىكى مېھمان {call}", + "{user} reacted with {reaction} to your private message" : "{user} شەخسىي ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} پاراڭدىكى ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {reaction} ئۇچۇرىڭىزغا {call} بىلەن ئىنكاس قايتۇردى", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (مېھمان) پاراڭدىكى ئۇچۇرىڭىزغا {reaction} بىلەن ئىنكاس قايتۇردى {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "بىر مېھمان پاراڭلىشىش {reaction} ئۇچۇرىڭىزغا {call} بىلەن ئىنكاس قايتۇردى", + "{user} mentioned you in a private conversation" : "{user} شەخسىي سۆھبەتتە سىزنى تىلغا ئالدى", + "{user} mentioned group {group} in conversation {call}" : "{user} تىلغا ئېلىنغان گۇرۇپپا {group} پاراڭلىشىش {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} بىر سۆھبەت {call} دە ئەتىرەت {team} نى تىلغا ئالدى", + "{user} mentioned everyone in conversation {call}" : "{user} سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "{user} mentioned you in conversation {call}" : "{user} سۆھبەتتە سىزنى تىلغا ئالدى {call}", + "A deleted user mentioned group {group} in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى {call} سۆھبەتتە {group} گۇرۇپپىسىنى تىلغا ئالدى", + "A deleted user mentioned team {team} in conversation {call}" : "بىر ئۆچۈرۋېتىلگەن ئىشلەتكۈچى ئەتىرەت {team} نى سۆھبەت {call} دە تىلغا ئالدى", + "A deleted user mentioned everyone in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى پاراڭلىشىش {call} ھەممەيلەننى تىلغا ئالدى", + "A deleted user mentioned you in conversation {call}" : "ئۆچۈرۈلگەن ئىشلەتكۈچى سۆھبەتتە {call} دە تىلغا ئالدى", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە گۇرۇپپا {group} تىلغا ئېلىنغان {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (مىھمان) سۆھبەت {call} دە ئەتىرەت {team} نى تىلغا ئالدى", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (مېھمان) سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (مېھمان) سىزنى سۆھبەتتە تىلغا ئالدى {call}", + "A guest mentioned group {group} in conversation {call}" : "بىر مېھمان سۆھبەتتە {group} گۇرۇپپا {call} تىلغا ئالدى", + "A guest mentioned team {team} in conversation {call}" : "بىر مىھمان {call} سۆھبەتتە ئەتىرەت {team} نى تىلغا ئالدى", + "A guest mentioned everyone in conversation {call}" : "بىر مېھمان سۆھبەتتە ھەممەيلەننى تىلغا ئالدى {call}", + "A guest mentioned you in conversation {call}" : "بىر مېھمان سىزنى سۆھبەتتە تىلغا ئالدى {call}", + "View message" : "ئۇچۇرنى كۆرۈش", + "Dismiss reminder" : "ئەسكەرتىشنى ئەمەلدىن قالدۇرۇڭ", + "View chat" : "پاراڭنى كۆرۈش", + "{user} invited you to a group conversation: {call}" : "{user} سىزنى گۇرۇپپا سۆھبىتىگە تەكلىپ قىلدى: {call}", + "Join call" : "چاقىرىشقا قوشۇلۇڭ", + "Answer call" : "جاۋاب تېلېفونى", + "{user} would like to talk with you" : "{user} سىز بىلەن پاراڭلىشىشنى خالايدۇ", + "Call back" : "تېلېفون قىلىڭ", + "You missed a call from {user}" : "{user} نىڭ تېلېفونىنى قولدىن بېرىپ قويدىڭىز", + "Accept call" : "چاقىرىشنى قۇبۇللا", + "Incoming phone call from {call}" : "{call} دىن كەلگەن تېلىفۇن", + "You missed a phone call from {call}" : "{call} دىن كەلگەن تېلىفۇن چاقىرىشىنى ئۆتكۈزۋەتتىڭىز", + "A group call has started in {call}" : "گۇرۇپپا چاقىرىش {call} دا باشلاندى", + "You missed a group call in {call}" : "{call} in دىكى گۇرۇپپا چاقىرىشنى قولدىن بېرىپ قويدىڭىز", + "{email} is requesting the password to access {file}" : "{email} پارول {file} كىرىشنى تەلەپ قىلىدۇ", + "{email} tried to request the password to access {file}" : "{email} پارولنى {file} كىرىشنى تەلەپ قىلدى", + "Someone is requesting the password to access {file}" : "بەزىلەر پارولنى {file} كىرىشنى تەلەپ قىلىدۇ", + "Someone tried to request the password to access {file}" : "بەزىلەر پارولنى {file} كىرىشنى تەلەپ قىلماقچى بولدى", + "Open settings" : "تەڭشەكلەرنى ئېچىڭ", + "Hosted signaling server added" : "ساھىبجامال سىگنال مۇلازىمىتىرى قوشۇلدى", + "The hosted signaling server is now configured and will be used." : "ساھىبخانلىق سىگنال مۇلازىمىتىرى ھازىر تەڭشەلدى ۋە ئىشلىتىلىدۇ.", + "Hosted signaling server removed" : "ساھىبجامال سىگنال مۇلازىمىتىرى ئۆچۈرۈلدى", + "The hosted signaling server was removed and will not be used anymore." : "ساھىبخانلىق سىگنال مۇلازىمېتىرى چىقىرىۋېتىلدى ، ئەمدى ئىشلىتىلمەيدۇ.", + "Hosted signaling server changed" : "ساھىبجامال سىگنال مۇلازىمىتىرى ئۆزگەردى", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "ساھىبخانلىق سىگنال مۇلازىمىتىرى ھالىتىنى «{oldstatus}» دىن «{newstatus}» غا ئۆزگەرتتى.", + "pending" : "ساقلىنىۋاتىدۇ", + "active" : "ئاكتىپ", + "expired" : "ۋاقتى توشتى", + "blocked" : "توسۇلۇپ قالدى", + "error" : "خاتالىق", + "The certificate of {host} expires in {days} days" : "{host} گۇۋاھنامىسى {days} كۈندە توشىدۇ", + "The certificate of {host} expired" : "{host} گۇۋاھنامىسى توشتى", + "Contact via Talk" : "سۆھبەت ئارقىلىق ئالاقىلىشىڭ", + "Open Talk" : "ئوچۇق سۆھبەت", + "Default" : "كۆڭۈلدىكى", + "Presentation" : "لېكسىيە", + "Webinar" : "تور سۆھبىتى", + "Conversations" : "سۆھبەت", + "Messages in current conversation" : "نۆۋەتتىكى سۆھبەتتىكى ئۇچۇرلار", + "{user}" : "{user}", + "Messages" : "ئۇچۇرلار", + "{user} in {conversation}" : "{conversation} دىكى {user}", + "Messages in other conversations" : "باشقا سۆھبەتتىكى ئۇچۇرلار", + "One-to-one rooms always need to show the other users avatar" : "بىر ئۆيدىن باشقا ئۆيلەر ھەمىشە باشقا ئىشلەتكۈچىلەرنىڭ باش سۈرىتىنى كۆرسىتىشى كېرەك", + "Invalid emoji character" : "Emoji خاراكتېرى ئىناۋەتسىز", + "Invalid background color" : "تەگلىك رەڭگى ئىناۋەتسىز", + "Avatar image is not square" : "باش سۈرىتى چاسا ئەمەس", + "Room {number}" : "ياتاق {number}", + "Other" : "باشقا", + "Failed to request trial because the trial server is unreachable. Please try again later." : "سىناق مۇلازىمېتىرغا يەتكىلى بولمىغاچقا سىناق قىلىشنى تەلەپ قىلمىدى. كېيىن قايتا سىناڭ.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "بۇ مىسالنىڭ دەلىللىنىشىدە مەسىلە بار. بەلكىم ئۇنىڭ URL نى دەلىللەش ئۈچۈن سىرتتىن يەتكىلى بولمايدۇ.", + "Something unexpected happened." : "ئويلىمىغان يەردىن بىر ئىش يۈز بەردى.", + "The URL is invalid." : "URL ئىناۋەتسىز.", + "An HTTPS URL is required." : "HTTPS URL تەلەپ قىلىنىدۇ.", + "The email address is invalid." : "ئېلېكترونلۇق خەت ئادرېسى ئىناۋەتسىز.", + "The language is invalid." : "تىل ئىناۋەتسىز.", + "The country is invalid." : "دۆلەت ئىناۋەتسىز.", + "There is a problem with the request of the trial. Please check your logs for further information." : "سوتنىڭ تەلىپىدە مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "Too many requests are send from your servers address. Please try again later." : "بەك كۆپ تەلەپلەر مۇلازىمېتىر ئادرېسىڭىزدىن ئەۋەتىلىدۇ. كېيىن قايتا سىناڭ.", + "There is already a trial registered for this Nextcloud instance." : "بۇ Nextcloud مىسالى ئۈچۈن ئاللىبۇرۇن سىناق قىلىنغان.", + "Something unexpected happened. Please try again later." : "ئويلىمىغان يەردىن بىر ئىش يۈز بەردى. كېيىن قايتا سىناڭ.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن سىناق قىلىشنى تەلەپ قىلالمىدى. كېيىن قايتا سىناڭ.", + "Trial requested but failed to get account information. Please check back later." : "سىناق تەلەپ قىلىندى ، ئەمما ھېسابات ئۇچۇرىغا ئېرىشەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "بۇ تەلەپنىڭ دەلىللىنىشىدە مەسىلە بار. بەلكىم ئۇنىڭ URL نى دەلىللەش ئۈچۈن سىرتتىن يەتكىلى بولمايدۇ.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن ھېسابات ئۇچۇرلىرىنى ئالالمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with fetching the account information. Please check your logs for further information." : "ھېسابات ئۇچۇرلىرىنى ئېلىشتا مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "There is no such account registered." : "بۇ يەردە ھېسابات يوق.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "سىناق مۇلازىمېتىرىغا يەتكىلى بولمىغاچقا ھېسابات ئۇچۇرلىرىنى ئالالمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Deleting the hosted signaling server account failed. Please check back later." : "ساھىبجامال سىگنال مۇلازىمېتىر ھېساباتىنى ئۆچۈرۈش مەغلۇب بولدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "سىناق مۇلازىمېتىرى خاتا ھەرىكەت قىلغانلىقى ئۈچۈن ھېساباتنى ئۆچۈرەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "There is a problem with deleting the account. Please check your logs for further information." : "ھېساباتنى ئۆچۈرۈشتە مەسىلە بار. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن خاتىرىڭىزنى تەكشۈرۈڭ.", + "Too many requests are sent from your servers address. Please try again later." : "مۇلازىمېتىر ئادرېسىڭىزدىن بەك كۆپ تەلەپ ئەۋەتىلدى. كېيىن قايتا سىناڭ.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "سىناق مۇلازىمېتىرغا يەتكىلى بولمىغاچقا ، ھېساباتنى ئۆچۈرەلمىدى. كېيىن قايتا تەكشۈرۈپ بېقىڭ.", + "Note to self" : "ئۆزىڭىزگە دىققەت قىلىڭ", + "A place for your private notes, thoughts and ideas" : "شەخسىي خاتىرىلىرىڭىز ، ئوي-پىكىرلىرىڭىز", + "Transcript is AI generated and may contain mistakes" : "تېكىستنى AI يازغان ھەمدە خاتالىقلار مەۋجۇت بولىشى مۇمكىن", + "Summary is AI generated and may contain mistakes" : "خۇلاسىنى AI يازغان ھەمدە خاتالىقلار بولىشى مۇمكىن", + "Let's get started!" : "باشلايلى!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** بىخەتەر، ئۆز-ئۆزىنى باشقۇرىدىغان ئالاقە سۇپىسى بولۇپ، Nextcloud ئېكولوگىيە سىستېمىسى بىلەن مۇكەممەل بىر گەۋدىلىشىدۇ.\n\n#### Nextcloud Talk نىڭ ئاساسلىق ئالاھىدىلىكلىرى:\n\n* شەخسىي ۋە گۇرۇپپا سۆھبەتلىرىدە پاراڭلىشىش ۋە ئۇچۇر يوللاش\n* ئاۋازلىق ۋە سىنلىق تېلېفون قىلىش\n* ھۆججەت ئورتاقلىشىش ۋە باشقا Nextcloud قوللىنىشچان پروگراممىلىرى بىلەن بىر گەۋدىلەشتۈرۈش\n* خاسلاشتۇرغىلى بولىدىغان سۆھبەت تەڭشەكلىرى، باشقۇرۇش ۋە مەخپىيەتلىك كونتروللىرى\n* تور، ئۈستەل يۈزى ۋە يانفون (iOS ۋە Android)\n* شەخسىي ۋە بىخەتەر ئالاقە\n\n[ئىشلەتكۈچى ھۆججىتى] دىن تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىڭ (https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Nextcloud Talk غا خۇش كەپسىز\n\nNextcloud Talk Nextcloud بىلەن بىر گەۋدىلەشكەن شەخسىي ۋە كۈچلۈك ئۇچۇر يوللاش ئەپ دېتالى. شەخسىي ياكى گۇرۇپپا سۆھبەتلىرىدە پاراڭلىشىڭ، ئاۋازلىق ۋە سىنلىق تېلېفونلار ئارقىلىق ھەمكارلىشىڭ، تور سېمىنارلىرى ۋە پائالىيەتلەرنى تەشكىللەڭ، سۆھبەتلىرىڭىزنى خاسلاشتۇرۇڭ ۋە باشقا نۇرغۇن ئىشلارنى قىلىڭ.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 مول مەزمۇنلۇق ئۇچۇرلار يارىتىش ئۈچۈن تېكىستلەرنى فورماتلاڭ\n\nNextcloud Talk تا، سىز Markdown سىنتاكسىسىنى ئىشلىتىپ ئۇچۇرلىرىڭىزنى فورماتلىيالايسىز. مەسىلەن، **قالىن** ياكى *قىيسىق* فورماتىنى قوللىنىڭ، ياكى 'كود سۈپىتىدە تېكىستلەرنى بەلگىلەڭ'. سىز ھەتتا جەدۋەللەرنى قۇرۇپ، تېكىستىڭىزگە ماۋزۇ قوشالايسىز.\n\nخاتالىقنى تۈزىتىش ياكى فورماتنى ئۆزگەرتىش كېرەكمۇ؟ ئۇچۇر تىزىملىكىدىكى «خەۋەرنى تەھرىرلەش» نى چېكىپ ئۇچۇرىڭىزنى تەھرىرلەڭ.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 قوشۇمچە ھۆججەتلەر ۋە ئۇلىنىشلارنى قوشۇڭ\n\n«+» كۇنۇپكىسى ئارقىلىق Nextcloud مەركىزىڭىزدىكى ھۆججەتلەرنى قوشۇڭ. ھۆججەتلەر ۋە ھەر خىل Nextcloud قوللىنىشچان پروگراممىلىرىدىكى نەرسىلەرنى ئورتاقلىشىڭ. بەزى قوللىنىشچان پروگراممىلار ھەتتا ئۆز-ئارا تەسىر كۆرسىتىدىغان كىچىك پروگراممىلارنى قوللايدۇ، مەسىلەن، تېكىست قوللىنىشچان پروگراممىسى.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 سۆھبەتلەرنىڭ داۋاملىشىشىغا يول قويۇڭ: ئىشلەتكۈچىلەرنى تىلغا ئېلىڭ، ئۇچۇرلارغا ئىنكاس قايتۇرۇڭ ۋە باشقىلار\n\nسىز %s ئارقىلىق سۆھبەتتىكى ھەممەيلەننى تىلغا ئالالايسىز ياكى «@» دەپ يېزىپ تىزىملىكتىن ئۇلارنىڭ ئىسمىنى تاللاپ مەلۇم قاتناشقۇچىلارنى تىلغا ئالالايسىز.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "سىز ئۇچۇرلارنىڭ جاۋابىنى قايتۇرالايسىز، ئۇلارنى باشقا پاراڭلىشىش ۋە كىشىلەرگە يوللىيالايسىز ياكى ئۇچۇر مەزمۇنىنى كۆچۈرۈشىڭىز مۇمكىن.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ ئەقلىي تاللىغۇچ بىلەن تېخىمۇ كۆپ ئىشلارنى قىلىڭ\n\nپەقەت \"/\" بەلگىسىنى كىرگۈزۈڭ ياكى \"+\" تىزىملىكىگە كىرىپ، ئەقلىي تاللىغۇچنى ئېچىڭ، بۇ يەردە ئۇچۇرلىرىڭىزغا ھەر خىل مەزمۇنلارنى قوشالايسىز. سىز ئەقلىي تاللىغۇچنى Nextcloud ئەپلىرى، GIFلار، خەرىتە ئورۇنلىرى، سۈنئىي ئەقىل ئارقىلىق ھاسىل قىلىنغان مەزمۇنلار ۋە باشقا نۇرغۇن نەرسىلەردىن تۈرلەرنى قوشالايدىغان قىلىپ تەڭشىيەلەيسىز.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ سۆھبەت تەڭشەكلىرىنى باشقۇرۇش\n\nسۆھبەت تىزىملىكىدە، سىز سۆھبەتلىرىڭىزنى باشقۇرۇش ئۈچۈن ھەر خىل تەڭشەكلەرگە كىرەلەيسىز، مەسىلەن:\n* سۆھبەت ئۇچۇرلىرىنى تەھرىرلەش\n* ئۇقتۇرۇشلارنى باشقۇرۇش\n* نۇرغۇن باشقۇرۇش قائىدىلىرىنى قوللىنىش\n* كىرىش ۋە بىخەتەرلىكنى تەڭشەش\n* روبوتلارنى قوزغىتىش\n* ۋە باشقىلار!", + "Andorra" : "ئاندوررا", + "United Arab Emirates" : "ئەرەب بىرلەشمە خەلىپىلىكى", + "Afghanistan" : "ئافغانىستان", + "Antigua and Barbuda" : "ئانتىگۇئا ۋە باربۇدا", + "Anguilla" : "Anguilla", + "Albania" : "ئالبانىيە", + "Armenia" : "ئەرمىنىيە", + "Angola" : "ئانگولا", + "Antarctica" : "ئانتاركتىكا", + "Argentina" : "ئارگېنتىنا", + "American Samoa" : "American Samoa", + "Austria" : "ئاۋسترىيە", + "Australia" : "ئاۋسترالىيە", + "Aruba" : "Aruba", + "Åland Islands" : "Åland Islands", + "Azerbaijan" : "ئەزەربەيجان", + "Bosnia and Herzegovina" : "بوسنىيە-گېرتسېگوۋىنا", + "Barbados" : "باربادوس", + "Bangladesh" : "بېنگال", + "Belgium" : "بېلگىيە", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "بۇلغارىيە", + "Bahrain" : "بەھرەيىن", + "Burundi" : "بۇرۇندى", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "بېرمۇدا", + "Brunei Darussalam" : "برۇنېي دارۇسسالام", + "Bolivia, Plurinational State of" : "بولىۋىيە ، كۆپ دۆلەت", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius and Saba", + "Brazil" : "بىرازىلىيە", + "Bahamas" : "باھاما", + "Bhutan" : "بۇتان", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "بوتسۋانا", + "Belarus" : "بېلورۇسىيە", + "Belize" : "Belize", + "Canada" : "كانادا", + "Cocos (Keeling) Islands" : "كوكوس (كېلىڭ) ئارىلى", + "Congo, the Democratic Republic of the" : "كونگو ، دېموكراتىك جۇمھۇرىيىتى", + "Central African Republic" : "ئوتتۇرا ئافرىقا جۇمھۇرىيىتى", + "Congo" : "كونگو", + "Switzerland" : "شىۋىتسارىيە", + "Côte d'Ivoire" : "Côte d'Ivoire", + "Cook Islands" : "كۇك تاقىم ئاراللىرى", + "Chile" : "چىلى", + "Cameroon" : "كامېرون", + "China" : "جۇڭگو", + "Colombia" : "كولۇمبىيە", + "Costa Rica" : "كوستارىكا", + "Cuba" : "كۇبا", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "روژدېستۋو ئارىلى", + "Cyprus" : "سىپرۇس", + "Czechia" : "چېخ", + "Germany" : "گىرمانىيە", + "Djibouti" : "جىبۇتى", + "Denmark" : "دانىيە", + "Dominica" : "Dominica", + "Dominican Republic" : "دومىنىكا جۇمھۇرىيىتى", + "Algeria" : "ئالجىرىيە", + "Ecuador" : "ئېكۋادور", + "Estonia" : "ئېستونىيە", + "Egypt" : "مىسىر", + "Western Sahara" : "غەربىي سەھرايى كەبىر", + "Eritrea" : "Eritrea", + "Spain" : "ئىسپانىيە", + "Ethiopia" : "ئېفىيوپىيە", + "Finland" : "فىنلاندىيە", + "Fiji" : "فىجى", + "Falkland Islands (Malvinas)" : "فالكلاند ئارىلى (مالۋىناس)", + "Micronesia, Federated States of" : "Micronesia, Federated States of", + "Faroe Islands" : "فارو ئارىلى", + "France" : "فرانسىيە", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "بۈيۈك بىرىتانىيە ۋە شىمالىي ئىرېلاندىيە", + "Grenada" : "Grenada", + "Georgia" : "گرۇزىيە", + "French Guiana" : "فرانسىيە گۋىزنىيسى", + "Guernsey" : "Guernsey", + "Ghana" : "گانا", + "Gibraltar" : "جىبرالتار", + "Greenland" : "Greenland", + "Gambia" : "گامبىيە", + "Guinea" : "گۋىنىيە", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "ئېكۋاتور گۋىنىيىسى", + "Greece" : "گرېتسىيە", + "South Georgia and the South Sandwich Islands" : "جەنۇبىي گرۇزىيە ۋە جەنۇبىي ساندۋىچ ئارىلى", + "Guatemala" : "گۋاتېمالا", + "Guam" : "گۇۋام", + "Guinea-Bissau" : "گۋىنىيە-بىسساۋ", + "Guyana" : "Guyana", + "Hong Kong" : "شياڭگاڭ", + "Heard Island and McDonald Islands" : "خارد ئارىلى ۋە ماكدونالد ئارىلى", + "Honduras" : "خوندۇراس", + "Croatia" : "كىرودىيە", + "Haiti" : "ھايتى", + "Hungary" : "ۋېنگىرىيە", + "Indonesia" : "ھىندونېزىيە", + "Ireland" : "ئىرېلاندىيە", + "Israel" : "ئىسرائىلىيە", + "Isle of Man" : "Isle of Man", + "India" : "ھىندىستان", + "British Indian Ocean Territory" : "ئەنگىلىيە ھىندى ئوكيان رايونى", + "Iraq" : "ئىراق", + "Iran, Islamic Republic of" : "ئىران ، ئىسلام جۇمھۇرىيىتى", + "Iceland" : "ئىسلاندىيە", + "Italy" : "ئىتالىيە", + "Jersey" : "Jersey", + "Jamaica" : "يامايكا", + "Jordan" : "ئىئوردانىيە", + "Japan" : "ياپۇنىيە", + "Kenya" : "كېنىيە", + "Kyrgyzstan" : "قىرغىزىستان", + "Cambodia" : "كامبودژا", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts and Nevis", + "Korea, Democratic People's Republic of" : "كورېيە ، دېموكراتىك خەلق جۇمھۇرىيىتى", + "Korea, Republic of" : "كورېيە جۇمھۇرىيىتى", + "Kuwait" : "كۇۋەيت", + "Cayman Islands" : "كايمان ئارىلى", + "Kazakhstan" : "قازاقىستان", + "Lao People's Democratic Republic" : "لائوس خەلق دېموكراتىك جۇمھۇرىيىتى", + "Lebanon" : "لىۋان", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "سىرىلانكا", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "لىتۋا", + "Luxembourg" : "لىيۇكسېمبۇرگ", + "Latvia" : "لاتىۋىيە", + "Libya" : "لىۋىيە", + "Morocco" : "ماراكەش", + "Monaco" : "موناكو", + "Moldova, Republic of" : "مولدوۋا ، جۇمھۇرىيەت", + "Montenegro" : "قاراتاغ", + "Saint Martin (French part)" : "سانت مارتىن (فىرانسۇزچە قىسمى)", + "Madagascar" : "ماداغاسقار", + "Marshall Islands" : "مارشال تاقىم ئاراللىرى", + "North Macedonia" : "شىمالىي ماكېدونىيە", + "Mali" : "مالى", + "Myanmar" : "بېرما", + "Mongolia" : "موڭغۇلىيە", + "Macao" : "ئاۋمېن", + "Northern Mariana Islands" : "شىمالىي مارىئانا ئارىلى", + "Martinique" : "Martinique", + "Mauritania" : "ماۋرىتانىيە", + "Montserrat" : "Montserrat", + "Malta" : "مالتا", + "Mauritius" : "ماۋرىتىئۇس", + "Maldives" : "مالدىۋى", + "Malawi" : "مالاۋى", + "Mexico" : "مىكسىكا", + "Malaysia" : "مالايسىيا", + "Mozambique" : "موزامبىك", + "Namibia" : "نامبىيە", + "New Caledonia" : "يېڭى كالېدونىيە", + "Niger" : "Niger", + "Norfolk Island" : "نورفولك ئارىلى", + "Nigeria" : "نىگېرىيە", + "Nicaragua" : "نىكاراگۇئا", + "Netherlands" : "گوللاندىيە", + "Norway" : "نورۋېگىيە", + "Nepal" : "نېپال", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "يېڭى زېلاندىيە", + "Oman" : "ئومان", + "Panama" : "پاناما", + "Peru" : "پېرۇ", + "French Polynesia" : "French Polynesia", + "Papua New Guinea" : "پاپۇئا يېڭى گۋىنىيىسى", + "Philippines" : "فىلىپپىن", + "Pakistan" : "پاكىستان", + "Poland" : "پولشا", + "Saint Pierre and Miquelon" : "Saint Pierre and Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "پورتو رىكو", + "Palestine, State of" : "پەلەستىن ، شىتات", + "Portugal" : "پورتۇگالىيە", + "Palau" : "Palau", + "Paraguay" : "پاراگۋاي", + "Qatar" : "قاتار", + "Réunion" : "Réunion", + "Romania" : "رۇمىنىيە", + "Serbia" : "سېربىيە", + "Russian Federation" : "رۇسىيە فېدېراتسىيەسى", + "Rwanda" : "رىۋاندا", + "Saudi Arabia" : "سەئۇدى ئەرەبىستان", + "Solomon Islands" : "سۇلايمان تاقىم ئاراللىرى", + "Seychelles" : "Seychelles", + "Sudan" : "سۇدان", + "Sweden" : "شىۋىتسىيە", + "Singapore" : "سىنگاپور", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension and Tristan da Cunha", + "Slovenia" : "سىلوۋېنىيە", + "Svalbard and Jan Mayen" : "سۋالبارد ۋە يان مايېن", + "Slovakia" : "سلوۋاكىيە", + "Sierra Leone" : "سېررالېئون", + "San Marino" : "سان مارىنو", + "Senegal" : "سېنېگال", + "Somalia" : "سومالى", + "Suriname" : "Suriname", + "South Sudan" : "جەنۇبىي سۇدان", + "Sao Tome and Principe" : "سان توم ۋە پرىنسىپ", + "El Salvador" : "سالۋادور", + "Sint Maarten (Dutch part)" : "سىنت مارتىن (گوللاندىيە قىسمى)", + "Syrian Arab Republic" : "سۈرىيە ئەرەب جۇمھۇرىيىتى", + "Eswatini" : "Eswatini", + "Turks and Caicos Islands" : "تۈركلەر ۋە كايكوس ئارىلى", + "Chad" : "چاد", + "French Southern Territories" : "فرانسىيەنىڭ جەنۇبىدىكى رايونلار", + "Togo" : "توگو", + "Thailand" : "تايلاند", + "Tajikistan" : "تاجىكىستان", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "تۈركمەنىستان", + "Tunisia" : "تۇنىس", + "Tonga" : "تونگا", + "Turkey" : "تۈركىيە", + "Trinidad and Tobago" : "تىرىنىداد ۋە توباگو", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "تەيۋەن ، جۇڭگو ئۆلكىسى", + "Tanzania, United Republic of" : "تانزانىيە ، بىرلەشمە جۇمھۇرىيىتى", + "Ukraine" : "ئۇكرائىنا", + "Uganda" : "ئۇگاندا", + "United States Minor Outlying Islands" : "ئامېرىكا كىچىك تاشقى ئاراللار", + "United States of America" : "ئامېرىكا قوشما شتاتلىرى", + "Uruguay" : "ئۇرۇگۋاي", + "Uzbekistan" : "ئۆزبېكىستان", + "Holy See" : "Holy See", + "Saint Vincent and the Grenadines" : "ئەۋلىيا ۋىنسېنت ۋە گرېنادىنلار", + "Venezuela, Bolivarian Republic of" : "ۋېنېزۇئېلا ، بولىۋىيە جۇمھۇرىيىتى", + "Virgin Islands, British" : "ۋىرگىن تاقىم ئارىلى ، ئەنگىلىيە", + "Virgin Islands, U.S." : "ۋىرگىنىيە تاقىم ئارىلى ، ئامېرىكا", + "Viet Nam" : "Vietnam Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "ۋاللىس ۋە فۇتۇنا", + "Samoa" : "ساموئا", + "Yemen" : "يەمەن", + "Mayotte" : "مايوت", + "South Africa" : "جەنۇبى ئافرىقا", + "Zambia" : "زامبىيە", + "Zimbabwe" : "زىمبابۋې", + "Background blur" : "تەگلىك تۇتۇق", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "WASM يۈكلەشنى قوللىمىدى. تور مۇلازىمېتىرىڭىز `.wasm` ھۆججىتىگە مۇلازىمەت قىلسا قولدا تەكشۈرۈپ بېقىڭ.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "تور مۇلازىمېتىرىڭىز `.wasm` ھۆججىتىنى يەتكۈزۈش ئۈچۈن مۇۋاپىق تەڭشەلمىدى. بۇ ئادەتتە Nginx سەپلىمىسىدىكى مەسىلە. تەگلىك تۇتۇقلىقى ئۈچۈن «.wasm» ھۆججىتىنى يەتكۈزۈش ئۈچۈنمۇ تەڭشەش كېرەك. Nginx سەپلىمىسىنى ھۆججەتلىرىمىزدىكى تەۋسىيە قىلىنغان سەپلىمىگە سېلىشتۇرۇڭ.", + "Talk configuration values" : "پاراڭ سەپلىمە قىممىتى", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "چاقىرىش ۋاقتىنى زورلاش پەقەت سىستېما cron بىلەنلا قوللىنىدۇ. سىستېما كروننى قوزغىتىڭ ياكى «max_call_duration» سەپلىمىسىنى ئۆچۈرۈڭ.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "كىچىك `max_call_duration` قىممىتى (نۆۋەتتە %d قىلىپ تەڭشەلدى) تېخنىكىلىق چەكلىمىلەر سەۋەبىدىن ئىجرا قىلىنمايدۇ. تەگلىك خىزمىتى ھەر 5 مىنۇتتا بىر قېتىم ئىجرا قىلىنىدۇ ، شۇڭا ئۆزىڭىزنىڭ خەتىرىگە ئاساسەن ئىشلىتىڭ.", + "Federation" : "فېدېراتسىيە", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "سۆھبەت فېدېراتسىيەسى قوزغىتىلغاندا «memcache.locking» نى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "High-performance backend" : "يۇقىرى ئىقتىدارلىق ئارقا سەپ", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى تەڭشىلىنمىدى - Nextcloud سۆھبەتنى يۇقىرى ئىقتىدارلىق ئارقا ئۇچىسىز ئىجرا قىلىۋاتىدۇ، پەقەت ناھايىتى كىچىك تېلېفونلار ئۈچۈنلا ماسلاشتۇرۇلىدۇ (ئەڭ كۆپ بولغاندا 2-3 قاتناشقۇچى). كۆپ قاتناشقۇچىلىق تېلېفونلارنىڭ راۋان ئىشلىشىگە كاپالەتلىك قىلىش ئۈچۈن يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى تەڭشەڭ.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "يۇقىرى ئىقتىدارلىق ئارقا سۇپىدىكى «سۆھبەت_كلاستېر» ھالىتىنى ئىجرا قىلىش ۋاقتى ئۆتكەن ، كېيىنكى نەشرىدە ئەمدى قوللىمايدۇ. يۇقىرى ئىقتىدارلىق ئارقا سۇپى بۈگۈنكى كۈندە ھەقىقىي توپلاشنى قوللايدۇ ، ئۇنىڭ ئورنىغا ئىشلىتىشكە بولىدۇ.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "كۆپ ئىقتىدارلىق يۇقىرى ئىقتىدارلىق ئارقا بەلگىنى ئېنىقلاش ۋاقتى ئۆتكەن ، كېيىنكى نەشرىدە ئەمدى قوللىمايدۇ. ئۇنىڭ ئورنىغا يۈك تەڭپۇڭلاشتۇرغۇچ توپلانغان سىگنال مۇلازىمېتىرلىرى بىلەن بىللە ئورنىتىلىپ ، پاراڭلىشىش تەڭشىكىدە تەڭشىلىشى كېرەك.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "ئىشلىتىلگەن ئالگورىزىم %1$s نىڭ ساقلانغان ئاممىۋى ئاچقۇچى ساقلانغان شەخسىي ئاچقۇچى بىلەن ماس كەلمەيدۇ. مەسىلىنى ھەل قىلىش ئۈچۈن%2$sنى ئىجرا قىلىڭ.", + "High-performance backend not configured correctly. Run %s for details." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى توغرا تەڭشەلمىگەن. تەپسىلاتىنى كۆرۈش ئۈچۈن %s نى ئىجرا قىلىڭ.", + "High-performance backend not configured correctly" : "يۇقىرى ئىقتىدارلىق ئارقا سۇپا توغرا تەڭشەلمىگەن", + "Error: Cannot connect to server" : "خاتالىق: مۇلازىمېتىرغا ئۇلىنالمايدۇ", + "Error: Server did not respond with proper JSON" : "خاتالىق: مۇلازىمېتىر مۇۋاپىق JSON بىلەن جاۋاب قايتۇرمىدى", + "Error: Certificate expired" : "خاتالىق: گۇۋاھنامىنىڭ ۋاقتى توشتى", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خاتالىق: Nextcloud سېرۋېرى ۋە يۇقىرى ئىقتىدارلىق ئارقا سېرۋېرنىڭ سىستېما ۋاقتى ماسلاشمىدى. ھەر ئىككى سېرۋېرنىڭ ۋاقىت سېرۋېرىغا ئۇلانغانلىقىغا ياكى ۋاقتىنى قولدا ماسلاشتۇرغانلىقىغا كاپالەتلىك قىلىڭ.", + "Could not get version" : "نەشرىگە ئېرىشەلمىدى", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "خاتالىق: ئىجرا قىلىنىۋاتقان نەشرى: {version}; مۇلازىمېتىرنىڭ بۇ نەشرىگە ماسلىشىش ئۈچۈن يېڭىلىنىشى كېرەك", + "Error: Server responded with: {error}" : "خاتالىق: مۇلازىمېتىر جاۋاب قايتۇردى: {error}", + "Error: Unknown error occurred" : "خاتالىق: نامەلۇم خاتالىق كۆرۈلدى", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "ئاگاھلاندۇرۇش: ئىجرا قىلىنىش نۇسخىسى: {version}; مۇلازىمېتىر بۇ سۆھبەت نۇسخىسىنىڭ بارلىق ئىقتىدارلىرىنى قوللىمايدۇ ، يوقاپ كەتكەن ئىقتىدارلار: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Nextcloud Talk نى يۇقىرى ئىقتىدارلىق ئارقا سۇپىدا ئىجرا قىلغاندا ئىچكى ساقلىغۇچنى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "Client Push" : "خېرىدار ئىتتىرىشى", + "Recording backend" : "ئارقا خاتىرىلەش", + "Using the recording backend requires a High-performance backend." : "خاتىرىلەش ئارقا سۇپىسىنى ئىشلىتىش يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ.", + "No recording backend configured" : "ئۈنگە ئېلىش ئارقا سۇپىسى سەپلەنمىگەن", + "SIP configuration" : "SIP سەپلىمىسى", + "Using the SIP functionality requires a High-performance backend." : "SIP ئىقتىدارىنى ئىشلىتىش يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈشنى تەلەپ قىلىدۇ.", + "No SIP backend configured" : "SIP ئارقا سۇپىسى سەپلەنمىدى", + "Invalid date, date format must be YYYY-MM-DD" : "ئىناۋەتسىز چېسلا ، چېسلا فورماتى چوقۇم YYYY-MM-DD بولۇشى كېرەك", + "Conversation not found" : "سۆھبەت تېپىلمىدى", + "Path is already shared with this conversation" : "يول بۇ سۆھبەت بىلەن ئورتاقلاشتى", + "Chat, video & audio-conferencing using WebRTC" : "WebRTC ئارقىلىق پاراڭلىشىش ، سىن ۋە ئاۋازلىق يىغىن", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "WebRTC ئارقىلىق پاراڭلىشىش ، سىن ۋە ئاۋازلىق يىغىن\n\n.\n* 👥 ** شەخسىي ، گۇرۇپپا ، ئاممىۋى ۋە مەخپىي نومۇر قوغدىلىدىغان تېلېفونلار! ** باشقىلارنى ، پۈتۈن گۇرۇپپىنى تەكلىپ قىلىڭ ياكى ئاممىۋى ئۇلىنىش ئەۋەتىپ تېلېفون قىلىڭ.\n* 🌐 ** فېدېراتسىيە پاراڭلىرى ** مۇلازىمېتىردىكى Nextcloud ئىشلەتكۈچىلىرى بىلەن پاراڭلىشىڭ\n* 💻 ** ئېكران ھەمبەھىرلەش! ** تېلېفونىڭىزنى قاتناشقۇچىلار بىلەن ئورتاقلىشىڭ.\n* 🚀 ** باشقا Nextcloud ئەپلىرى بىلەن بىرلەشتۈرۈش ** ھۆججەتلەر ، كالېندار ، ئىشلەتكۈچى ھالىتى ، باش تاختا ، ئاقما ، خەرىتە ، ئەقلىي ئىقتىدارلىق تاللىغۇچ ، ئالاقىلىشىش ، پالۋان ۋە باشقىلار.\n* 🌉 ** باشقا پاراڭلىشىش ھەل قىلىش ئۇسۇللىرى بىلەن ماسقەدەملەڭ ** [Matterbridge] (https://github.com/42wim/matterbridge/) بىلەن سۆھبەتكە بىرلەشتۈرۈلگەندىن كېيىن ، Nextcloud Talk ۋە باشقا نۇرغۇن پاراڭلىشىش ھەل قىلىش ئۇسۇللىرىنى ئاسانلا ماسقەدەملىيەلەيسىز. ئەكسىچە.", + "Leave call" : "تېلېفون قىلىڭ", + "Navigating away from the page will leave the call in {conversation}" : "بەتتىن يىراقلاشسىڭىز تېلېفوننى {conversation} قالدۇرىدۇ", + "Stay in call" : "تېلېفوندا تۇرۇڭ", + "Error occurred when getting the conversation information" : "سۆھبەت ئۇچۇرىنى ئېلىشتا خاتالىق كۆرۈلدى", + "Discuss this file" : "بۇ ھۆججەتنى مۇلاھىزە قىلىڭ", + "Share this file with others to discuss it" : "بۇ ھۆججەتنى باشقىلار بىلەن ئورتاقلىشىڭ", + "Share this file" : "بۇ ھۆججەتنى ھەمبەھىرلەڭ", + "Join conversation" : "سۆھبەتكە قاتنىشىڭ", + "This conversation is password-protected." : "بۇ سۆھبەت مەخپىي نومۇر بىلەن قوغدىلىدۇ.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "بىز IP دىن نۇرغۇن ئىناۋەتسىز پارول سىنىقىنى بايقىدۇق. شۇڭلاشقا كېيىنكى قېتىملىق سىنىقىڭىز 30 سېكۇنتقا يېتىدۇ.", + "The password is wrong. Try again." : "پارول خاتا. قايتا سىناڭ.", + "Password" : "ئىم", + "Submit" : "يوللاڭ", + "Error requesting the password." : "پارول تەلەپ قىلىشتىكى خاتالىق.", + "Request password" : "پارول تەلەپ قىلىڭ", + "This conversation has ended" : "بۇ سۆھبەت ئاخىرلاشتى", + "Error occurred when joining the conversation" : "سۆھبەتكە قاتناشقاندا خاتالىق كۆرۈلدى", + "Close Talk sidebar" : "سۆزلىشىش يانبالدىقىنى تاقاڭ", + "Open Talk sidebar" : "سۆزلىشىش يانبالدىقىنى ئېچىڭ", + "Everyone" : "ھەممەيلەن", + "Users and moderators" : "ئىشلەتكۈچى ۋە رىياسەتچى", + "Moderators only" : "پەقەت رىياسەتچىلەر", + "Disable calls" : "چاقىرىشنى چەكلەڭ", + "Save changes" : "ئۆزگەرتىشلەرنى ساقلاڭ", + "Saving …" : "ساقلاۋاتىدۇ…", + "Saved!" : "قۇتۇلدى!", + "Limit to groups" : "گۇرۇپپىلارغا چەك قويۇڭ", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "كەم دېگەندە بىر گۇرۇپپا تاللانغاندا ، پەقەت تىزىملىكتىكى كىشىلەرلا سۆھبەتنىڭ بىر قىسمى بولالايدۇ.", + "Guests can still join public conversations." : "مېھمانلار يەنىلا ئاممىۋى سۆھبەتكە قاتناشسا بولىدۇ.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "پاراڭنى ئەمدى ئىشلىتەلمەيدىغان ئابونتلار يەنىلا ئىلگىرىكى سۆھبەتلىرىگە قاتناشقۇچىلار قاتارىغا تىزىلىدۇ ، شۇنداقلا ئۇلارنىڭ پاراڭ ئۇچۇرلىرىمۇ ساقلىنىدۇ.", + "Limit using Talk" : "سۆزلىشىشنى چەكلەڭ", + "Limit creating a public and group conversation" : "ئاممىۋى ۋە گۇرۇپپا پاراڭلىشىشنى چەكلەڭ", + "Limit creating conversations" : "سۆھبەتلىشىشنى چەكلەڭ", + "Limit starting a call" : "چاقىرىشنى چەكلەڭ", + "Limit starting calls" : "چاقىرىشنى چەكلەڭ", + "When a call has started, everyone with access to the conversation can join the call." : "تېلېفون باشلانغاندىن كېيىن ، سۆھبەتنى زىيارەت قىلالايدىغانلارنىڭ ھەممىسى تېلېفونغا قاتناشسا بولىدۇ.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "بۇ مۇلازىمېتىرغا تۆۋەندىكى بوتلار ئورنىتىلدى. بۇ ھۆججەتتىن قانداق قىلىپ {linkstart1} ئۆزىڭىزنىڭ بوت {linkend} ياكى {linkstart2} بوتۇلكا تىزىملىكى {linkend} نى قانداق قىلىپ مۇلازىمېتىرىڭىزدا قوزغىتىدىغانلىقىنى تەپسىلىي تاپالايسىز.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "بۇ مۇلازىمېتىرغا ھېچقانداق بوتكا ئورنىتىلمىغان. بۇ ھۆججەتتىن قانداق قىلىپ {linkstart1} ئۆزىڭىزنىڭ بوت {linkend} ياكى {linkstart2} بوتۇلكا تىزىملىكى {linkend} نى قانداق قىلىپ مۇلازىمېتىرىڭىزدا قوزغىتىدىغانلىقىنى تەپسىلىي تاپالايسىز.", + "Description is not provided" : "چۈشەندۈرۈش تەمىنلەنمىدى", + "Locked for moderators" : "رىياسەتچىلەر ئۈچۈن قۇلۇپلاندى", + "Enabled" : "قوزغىتىلدى", + "Disabled" : "چەكلەنگەن", + "Bots settings" : "Bots تەڭشىكى", + "State" : "دۆلەت", + "Name" : "ئاتى", + "Last error" : "ئاخىرقى خاتالىق", + "Total errors count" : "ئومۇمىي خاتالىق سانى", + "Find more bots" : "تېخىمۇ كۆپ بوتكا تېپىڭ", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "ئىشەنچلىك مۇلازىمېتىرلارنى {linkstart} تەڭشەك تەڭشەك بېتى {linkend} at دا تەڭشىگىلى بولىدۇ.", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "بىرلەشمە چات ۋە تېلېفونلار ئاللىبۇرۇن ئىشلەيدۇ. قوشۇمچە ئۇچۇرلارنى بىر تەرەپ قىلىش كېيىنكى نەشرىدە يولغا قويۇلىدۇ.", + "Enable Federation in Talk app" : "سۆزلىشىش دېتالىدا فېدېراتسىيەنى قوزغىتىڭ", + "Permissions" : "ئىجازەت", + "Allow users to be invited to federated conversations" : "ئىشلەتكۈچىلەرنىڭ فېدېراتسىيە سۆھبەتكە تەكلىپ قىلىنىشىغا يول قويۇڭ", + "Allow users to invite federated users into conversation" : "ئىشلەتكۈچىلەرنىڭ فېدېراتسىيە ئابونتلىرىنى سۆھبەتكە تەكلىپ قىلىشىغا يول قويۇڭ", + "Only allow to federate with trusted servers" : "پەقەت ئىشەنچلىك مۇلازىمېتىرلار بىلەن فېدېراتسىيە قىلىشقا يول قويۇڭ", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "كەم دېگەندە بىر گۇرۇپپا تاللانغاندا ، تىزىملىكتىكى كىشىلەرلا فېدېراتسىيە ئابونتلىرىنى سۆھبەتكە تەكلىپ قىلالايدۇ.", + "Groups allowed to invite federated users" : "گۇرۇپپىلار فېدېراتسىيە ئىشلەتكۈچىلەرنى تەكلىپ قىلىشقا رۇخسەت قىلدى", + "Select groups …" : "گۇرۇپپىلارنى تاللاڭ…", + "All messages" : "بارلىق ئۇچۇرلار", + "@-mentions only" : "@ -تىلغا ئېلىشلا", + "Off" : "ئىتىك", + "General settings" : "ئادەتتىكى تەڭشەكلەر", + "Default notification settings" : "كۆڭۈلدىكى ئۇقتۇرۇش تەڭشىكى", + "Default group notification" : "كۆڭۈلدىكى گۇرۇپپا ئۇقتۇرۇشى", + "Default group notification for new groups" : "يېڭى گۇرۇپپىلارغا سۈكۈتتىكى گۇرۇپپا ئۇقتۇرۇشى", + "Integration into other apps" : "باشقا ئەپلەرگە بىرلەشتۈرۈش", + "Allow conversations on files" : "ھۆججەتلەردە پاراڭلىشىشقا يول قويۇڭ", + "Allow conversations on public shares for files" : "ھۆججەتلەرنىڭ ئاممىۋى ئورتاقلىشىشىغا يول قويۇڭ", + "End-to-end encrypted calls" : "باشتىن-ئاخىر شىفىرلانغان چاقىرىق", + "Enable encryption" : "شىفىرلاشنى قوزغىتىڭ", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "سەپلىمە قىلىنغان SIP كۆۋرۈكى ئارقىلىق باشتىن-ئاخىر شىفىرلانغان چاقىرىشلار يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ۋە SIP كۆۋرۈكىنىڭ يېڭى نۇسخىسىنى تەلەپ قىلىدۇ.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "ھازىر يانفون خېرىدارلىرى باشتىن-ئاخىر شىفىرلانغان چاقىرىشلارنى قوللىمايدۇ.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "جەدۋەلدىكى ئۇچۇرنىڭ ئۈستىدىكى كۇنۇپكىنى بېسىش ئارقىلىق Struktur AG نىڭ مۇلازىمېتىرلىرىغا ئەۋەتىلىدۇ. تېخىمۇ كۆپ ئۇچۇرلارنى {linkstart} spreed.eu {linkend} at دىن تاپالايسىز.", + "Pending" : "كۈتۈۋاتىدۇ", + "Error" : "خاتالىق", + "Blocked" : "چەكلەنگەن", + "Active" : "ئاكتىپ", + "Expired" : "ۋاقتى توشتى", + "Never" : "ھەرگىز", + "The trial could not be requested. Please try again later." : "سوراق قىلىنمىدى. كېيىن قايتا سىناڭ.", + "The account could not be deleted. Please try again later." : "ھېساباتنى ئۆچۈرگىلى بولمىدى. كېيىن قايتا سىناڭ.", + "Hosted High-performance backend" : "ساھىپخانلىق قىلغان يۇقىرى ئىقتىدارلىق ئارقا سۇپا", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "بىزنىڭ ھەمراھىمىز Struktur AG ساھىبخانلىق سىگنال مۇلازىمىتى تەلەپ قىلىدىغان مۇلازىمەت بىلەن تەمىنلەيدۇ. بۇنىڭ ئۈچۈن پەقەت تۆۋەندىكى جەدۋەلنى تولدۇرۇشىڭىز كېرەك ، Nextcloud تەلەپ قىلىدۇ. مۇلازىمېتىر سىزگە تەڭشەلگەندىن كېيىن كىنىشكا ئاپتوماتىك تولدۇرۇلىدۇ. بۇ مەۋجۇت سىگنال مۇلازىمېتىر تەڭشىكىنى قاپلىۋېتىدۇ.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "ئەگەر يۇقىرى ئىقتىدارلىق ئارقا سەھنە ھېساباتىڭىزدا STUN ۋە/ياكى TURN ئىقتىدارى بولسا، تەڭشەكلەر شۇنىڭغا ئاساسەن يېڭىلىنىدۇ.", + "URL of this Nextcloud instance" : "بۇ Nextcloud مىسالىنىڭ URL", + "Full name of the user requesting the trial" : "سىناق قىلىشنى تەلەپ قىلغان ئىشلەتكۈچىنىڭ تولۇق ئىسمى", + "Email of the user" : "ئىشلەتكۈچىنىڭ ئېلېكترونلۇق خەت", + "Language" : "تىل", + "Country" : "دۆلەت", + "Request signaling server trial" : "سىگنال مۇلازىمېتىر سىنىقىنى تەلەپ قىلىڭ", + "You can see the current status of your hosted signaling server in the following table." : "تۆۋەندىكى جەدۋەلدە ساھىبخانلىق سىگنال مۇلازىمېتىرىڭىزنىڭ ھازىرقى ھالىتىنى كۆرەلەيسىز.", + "Status" : "ھالەت", + "Created at" : "قۇرۇلدى", + "Expires at" : "ۋاقتى توشىدۇ", + "Limits" : "چەكلىمىسى", + "STUN included" : "STUN كىرگۈزۈلگەن", + "Yes" : "ھەئە", + "No" : "ياق", + "TURN included" : "TURN كىرگۈزۈلگەن", + "Delete the signaling server account" : "سىگنال مۇلازىمېتىر ھېساباتىنى ئۆچۈرۈڭ", + "_%n user_::_%n users_" : ["%n ئىشلەتكۈچى","%n ئىشلەتكۈچى"], + "Installed version: {version}" : "قاچىلانغان نەشرى: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Nextcloud Talk نى باشقا مۇلازىمەتلەر بىلەن ئۇلاش ئۈچۈن Matterbridge نى قاچىلىسىڭىز بولىدۇ ، تېخىمۇ كۆپ تەپسىلاتلار ئۈچۈن ئۇلارنىڭ {linkstart1} GitHub بېتى {linkend} نى زىيارەت قىلىڭ. بۇ دېتالنى چۈشۈرۈش ۋە قاچىلاشقا بىر ئاز ۋاقىت كېتىدۇ. ۋاقتى ئۆتۈپ كەتسە ، {linkstart2} Nextcloud App {linkend} دىن قولدا قاچىلاڭ.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge ئىككىلىك ھۆججىتىنىڭ ھوقۇقى خاتا. Matterbridge ئىككىلىك ھۆججىتىنىڭ توغرا ئىشلەتكۈچىگە تەۋە ئىكەنلىكىگە ۋە ئىجرا قىلغىلى بولىدىغانلىقىغا كاپالەتلىك قىلىڭ. ئۇنى «/…/nextcloud/apps/talk_matterbridge/bin/» دىن تاپقىلى بولىدۇ.", + "Matterbridge binary was not found or couldn't be executed." : "Matterbridge ئىككىلىك تېپىلمىدى ياكى ئىجرا قىلىنمىدى.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "سىز يەنە تەڭشەش ئارقىلىق Matterbridge ئىككىلىك سىستېمىغا قولدا يول قويالايسىز. تېخىمۇ كۆپ ئۇچۇرغا ئېرىشىش ئۈچۈن {linkstart} Matterbridge بىرلەشتۈرۈش ھۆججىتى {linkend} Check نى تەكشۈرۈڭ.", + "Downloading …" : "چۈشۈرۈش…", + "Install Talk Matterbridge" : "Talk Matterbridge نى قاچىلاڭ", + "An error occurred while installing the Matterbridge app" : "Matterbridge دېتالىنى قاچىلىغاندا خاتالىق كۆرۈلدى", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Talk Matterbridge نى قاچىلىغاندا خاتالىق كۆرۈلدى. ئۇنى قولدا قاچىلاڭ", + "Failed to execute Matterbridge binary." : "Matterbridge ئىككىلىك سىستېمىنى ئىجرا قىلالمىدى.", + "Matterbridge integration" : "Matterbridge بىرلەشتۈرۈش", + "Enable Matterbridge integration" : "Matterbridge نى بىرلەشتۈرۈشنى قوزغىتىڭ", + "Status: Checking connection" : "ھالىتى: ئۇلىنىشنى تەكشۈرۈش", + "OK: Running version: {version}" : "ماقۇل: ئىجرا نەشرى: {version}", + "Error: Server seems to be a Signaling server" : "خاتالىق: مۇلازىمېتىر سىگنال مۇلازىمىتىرىدەك قىلىدۇ", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "خاتالىق: Nextcloud سېرۋېرى ۋە خاتىرىلەش ئارقا ئۇچى سېرۋېرىنىڭ سىستېما ۋاقتى ماسلاشمىدى. ھەر ئىككى سېرۋېرنىڭ ۋاقىت سېرۋېرىغا ئۇلانغانلىقىغا ياكى ۋاقتىنى قولدا ماسلاشتۇرغانلىقىغا كاپالەتلىك قىلىڭ.", + "Recording backend URL" : "ئارقا ئادرېسنى خاتىرىلەش", + "Validate SSL certificate" : "SSL گۇۋاھنامىسىنى ئىناۋەتلىك قىلىڭ", + "Delete this server" : "بۇ مۇلازىمېتىرنى ئۆچۈرۈڭ", + "Test this server" : "بۇ مۇلازىمېتىرنى سىناپ بېقىڭ", + "Disabled for all calls" : "بارلىق تېلېفونلار چەكلەنگەن", + "Enabled for all calls" : "بارلىق تېلېفونلار قوزغىتىلدى", + "Configurable on conversation level by moderators" : "رىياسەتچىلەرنىڭ سۆھبەت سەۋىيىسىگە تەڭشىگىلى بولىدۇ", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP تەڭشەكلىرى \"upload_max_filesize\" ياكى \"post_max_size\" پەقەت {maxUpload} غا قەدەر ھۆججەت يوللاشقا يول قويىدۇ.", + "Recording backend settings saved" : "ئارقا بەت تەڭشىكى خاتىرىلەندى", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "رىياسەتچىلەرنىڭ سۆھبەت سەۋىيىسىدە قوشۇلۇشىغا رۇخسەت قىلىنىدۇ. بۇ سۆھبەتتىكى ھەر بىر چاقىرىققا قاتنىشىشتىن بۇرۇن ھەر بىر قاتناشقۇچىغا خاتىرىلەشكە قوشۇلۇش تەلەپ قىلىنىدۇ.", + "The consent to be recorded will be required for each participant before joining every call." : "خاتىرىلەشكە قوشۇلۇش ھەر بىر قاتناشقۇچىغا ھەر بىر تېلېفونغا قاتنىشىشتىن بۇرۇن تەلەپ قىلىنىدۇ.", + "The consent to be recorded is not required." : "خاتىرىلەشكە قوشۇلۇش تەلەپ قىلىنمايدۇ.", + "Recording backend configuration is only possible with a High-performance backend." : "ئارقا ئۇچىنى خاتىرىلەش پەقەت يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ئارقىلىقلا مۇمكىن.", + "Add a new recording backend server" : "يېڭى خاتىرىلەش ئارقا مۇلازىمېتىرى قوشۇڭ", + "Shared secret" : "ئورتاق مەخپىيەتلىك", + "Recording consent" : "خاتىرىلەش", + "Recording transcription" : "ترانسكرىپسىيەنى خاتىرىلەش", + "Automatically transcribe call recordings with a transcription provider" : "تېلېفون خاتىرىلىرىنى ترانسكرىپسىيە تەمىنلىگۈچىسى ئارقىلىق ئاپتوماتىك ترانسكرىپسىيە قىلىڭ", + "Automatically summarize call recordings with transcription and summary providers" : "تېلېفون خاتىرىلىرىنى ترانسكرىپسىيە ۋە خۇلاسە تەمىنلىگۈچىلەر ئارقىلىق ئاپتوماتىك خۇلاسىلاڭ", + "SIP configuration saved!" : "SIP سەپلىمىسى ساقلاندى!", + "SIP configuration is only possible with a High-performance backend." : "SIP سەپلىمىسى پەقەت يۇقىرى ئىقتىدارلىق ئارقا ئۇچى ئارقىلىقلا مۇمكىن.", + "Enable SIP Dial-out option" : "SIP چاقىرىش تاللانمىسىنى قوزغىتىڭ", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "قوللايدىغان SIP Dial-out ئىقتىدارىنى قوللاش ئۈچۈن سىگنال مۇلازىمېتىرىنى يېڭىلاش كېرەك.", + "Do not show SIP Dial-out caller number" : "SIP تېلېفون نومۇرىنى كۆرسەتمەڭ", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "تېلېفون قوبۇل قىلغۇچىغا تېلېفون قىلغاندا نامسىز نومۇر «نامەلۇم» ياكى «ياپون قىلىنغان نومۇر» دەپ كۆرسىتىلىشى كېرەك", + "Dial-out number" : "نۇمۇر بۇراش نۇمۇرى", + "E164 formatted number used as a fallback caller number for outgoing calls" : "چىقىش تېلېفونلىرى ئۈچۈن زاپاس تېلېفون نومۇرى سۈپىتىدە ئىشلىتىلىدىغان E164 فورماتىدىكى نومۇر", + "Dial-out prefix" : "نۇمۇر بۇراش قۇشۇمچىسى", + "Prefix to configured user number for outgoing calls (default is `+`)" : "چىقىش تېلېفونلىرى ئۈچۈن تەڭشەلگەن ئىشلەتكۈچى نومۇرىنىڭ ئالدىن قوشۇمچىسى (سۈكۈتتىكى ھالىتى `+`)", + "Restrict SIP configuration" : "SIP سەپلىمىسىنى چەكلەڭ", + "Enable SIP configuration" : "SIP سەپلىمىسىنى قوزغىتىڭ", + "Only users of the following groups can enable SIP in conversations they moderate" : "پەقەت تۆۋەندىكى گۇرۇپپىلارنى ئىشلەتكۈچىلەرلا ئوتتۇراھال بولغان سۆھبەتتە SIP نى قوزغىتالايدۇ", + "Phone number (Country)" : "تېلېفون نومۇرى (دۆلەت)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "بۇ ئۇچۇرلار تەكلىپلىك ئېلېكترونلۇق خەتتە ئەۋەتىلگەن شۇنداقلا يانبالداقتا بارلىق قاتناشقۇچىلارغا كۆرسىتىلىدۇ.", + "Nextcloud base URL" : "Nextcloud ئاساسىي URL", + "Talk Backend URL" : "پاراڭ ئارقا سۇپا URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "مەۋجۇت ئىقتىدارلار", + "Error: Websocket connection failed" : "خاتالىق: Websocket قا ئۇلىنىش مەغلۇپ بولدى", + "Error code" : "خاتالىق كودى", + "Error message" : "خاتالىق ئۇچۇرى", + "Error: Websocket connection failed. Check browser console" : "خاتالىق: تور بېكەتكە ئۇلىنىش مەغلۇپ بولدى. تور كۆرگۈچ كونترول تاختىسىنى تەكشۈرۈڭ.", + "High-performance backend URL" : "يۇقىرى ئىقتىدارلىق ئارقا كۆرۈنۈش URL", + "Missing High-performance backend warning hidden" : "يۇقىرى ئىقتىدارلىق ئارقا سۇپا ئاگاھلاندۇرۇشى يوقاپ كەتتى", + "High-performance backend settings saved" : "يۇقىرى ئىقتىدارلىق ئارقا سەپلىمىسى ساقلاندى", + "Nextcloud Talk setup not complete" : "Nextcloud پاراڭنى قاچىلاش تاماملانمىدى", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بولمىغان 2 دىن ئارتۇق قاتناشقۇچىسى بار تېلېفونلاردا، قاتناشقۇچىلارنىڭ ئۇلىنىش مەسىلىسىگە دۇچ كېلىشى ۋە قاتناشقۇچى ئۈسكۈنىلەرگە ئېغىر يۈك ئېلىپ كېلىشى مۇمكىنلىكىنى ئۇنۇتماڭ.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "كۆپ قاتناشقۇچىلىق تېلېفونلارنىڭ راۋان ئىشلىشىگە كاپالەتلىك قىلىش ئۈچۈن يۇقىرى ئىقتىدارلىق ئارقا ئۇچىنى ئورنىتىڭ.", + "Nextcloud portal" : "Nextcloud پورتالى", + "Quick installation guide" : "تېز قاچىلاش قوللانمىسى", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى كۆپ قاتناشقۇچىلار بىلەن تېلېفون قىلىش ۋە سۆھبەتلىشىش ئۈچۈن تەلەپ قىلىنىدۇ. ئارقا ئۇچى بولمىسا، بارلىق قاتناشقۇچىلار بىر-بىرى ئۈچۈن ئايرىم-ئايرىم ھالدا ئۆزلىرىنىڭ سىنلىرىنى يوللىشى كېرەك، بۇ بولسا ئۇلىنىش مەسىلىسى ۋە قاتناشقۇچى ئۈسكۈنىلەرنىڭ يۈكىنىڭ ئېغىرلىشىشىنى كەلتۈرۈپ چىقىرىدۇ.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بىلەن Nextcloud Talk ئىشلەتكەندە، تارقىتىلغان كېش ساقلاش بوشلۇقىنى تەڭشەش تەۋسىيە قىلىنىدۇ.", + "Add High-performance backend server" : "يېڭى يۇقىرى ئىقتىدارلىق ئارقا سۇپا مۇلازىمېتىرنى قوشۇڭ", + "Warn about connectivity issues in calls with more than 2 participants" : "2 دىن ئارتۇق قاتناشقۇچىسى بار تېلېفونلاردا ئۇلىنىش مەسىلىسى توغرىسىدا ئاگاھلاندۇرۇش", + "STUN server URL" : "STUN مۇلازىمېتىر ئادرېسى", + "The server address is invalid" : "مۇلازىمېتىر ئادرېسى ئىناۋەتسىز", + "STUN settings saved" : "STUN تەڭشىكى ساقلاندى", + "STUN servers" : "STUN مۇلازىمېتىرلىرى", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN مۇلازىمېتىرى روتېرنىڭ ئارقىسىدىكى قاتناشقۇچىلارنىڭ ئاممىۋى IP ئادرېسىنى ئېنىقلاشقا ئىشلىتىلىدۇ.", + "Add a new STUN server" : "يېڭى STUN مۇلازىمېتىرنى قوشۇڭ", + "{schema} scheme must be used with a domain" : "{schema} پىلانى چوقۇم تور دائىرىسى بىلەن ئىشلىتىلىشى كېرەك", + "{option1} and {option2}" : "{option1} ۋە {option2}", + "{option} only" : "{option} پەقەت", + "OK: Successful ICE candidates returned by the TURN server" : "بولىدۇ: مۇۋەپپەقىيەتلىك ICE كاندىداتلىرى TURN مۇلازىمېتىرى تەرىپىدىن قايتۇرۇلغان", + "Error: No working ICE candidates returned by the TURN server" : "خاتالىق: TURN مۇلازىمېتىرى تەرىپىدىن قايتۇرۇلغان ICE كاندىداتلىرى يوق", + "Testing whether the TURN server returns ICE candidates" : "TURN مۇلازىمېتىرىنىڭ ICE كاندىداتلىرىنى قايتۇرغان-قايتۇرمىغانلىقىنى سىناش", + "TURN server schemes" : "TURN مۇلازىمېتىر لايىھەلىرى", + "TURN server URL" : "مۇلازىمېتىر ئادرېسى", + "TURN server secret" : "مۇلازىمېتىرنىڭ مەخپىيىتى", + "TURN server protocols" : "TURN مۇلازىمېتىر كېلىشىمنامىسى", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN مۇلازىمېتىرى مۇداپىئە تامنىڭ كەينىدىكى قاتناشقۇچىلارنىڭ ئېقىمىنى ۋاكالەتچى قىلىشقا ئىشلىتىلىدۇ. ئەگەر ئايرىم قاتناشقۇچىلار باشقىلارغا ئۇلىنالمىسا TURN مۇلازىمېتىرى تەلەپ قىلىنىدۇ. تەڭشەش كۆرسەتمىسى ئۈچۈن {linkstart} بۇ ھۆججەت {linkend} See دىن كۆرۈڭ.", + "TURN settings saved" : "TURN تەڭشىكى ساقلاندى", + "TURN servers" : "TURN مۇلازىمېتىرلىرى", + "Add a new TURN server" : "يېڭى TURN مۇلازىمېتىرنى قوشۇڭ", + "Failed" : "مەغلۇب بولدى", + "OK" : "جەزملە", + "Checking …" : "تەكشۈرۈش…", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "مەغلۇپ بولدى: بۇ توركۆرگۈدە WebAssemble چەكلەنگەن ياكى قوللىمايدۇ. WebAssemble نى قوزغىتىڭ ياكى ئۇنى قوللاش ئۈچۈن توركۆرگۈ ئىشلىتىڭ.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "مەغلۇپ بولدى: \".wasm\" ۋە \".tflite\" ھۆججەتلىرى تور مۇلازىمېتىرى تەرىپىدىن توغرا قايتۇرۇلمىدى. سۆھبەت ھۆججىتىدىكى «سىستېما تەلىپى» بۆلىكىنى تەكشۈرۈپ بېقىڭ.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "بولىدۇ: \".wasm\" ۋە \".tflite\" ھۆججەتلىرى تور مۇلازىمېتىرى تەرىپىدىن مۇۋاپىق قايتۇرۇلدى.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "قارىغاندا PHP ۋە Apache سەپلىمىسى ماسلاشمىغاندەك قىلىدۇ. شۇنىڭغا دىققەت قىلىڭكى ، PHP نى پەقەت MPM_PREFORK مودۇلى بىلەنلا ئىشلەتكىلى بولىدۇ ، PHP-FPM پەقەت MPM_EVENT مودۇلىدىلا ئىشلىتىلىدۇ.", + "Web server setup checks" : "تور مۇلازىمېتىرنى تەڭشەش", + "Files required for virtual background can be loaded" : "مەۋھۇم تەگلىك ئۈچۈن لازىملىق ھۆججەتلەرنى يۈكلەشكە بولىدۇ", + "Federated user" : "فېدېراتسىيە ئىشلەتكۈچى", + "Assign participants to rooms" : "قاتناشقۇچىلارنى ياتاققا تەقسىم قىلىڭ", + "Configure breakout rooms" : "بۆسۈش ئۆيلىرىنى سەپلەڭ", + "Number of breakout rooms" : "بۆسۈش ئۆي سانى", + "You can create from 1 to 20 breakout rooms." : "1 دىن 20 گىچە بۆسۈش ئۆيى قۇرالايسىز.", + "Assignment method" : "تاپشۇرۇش ئۇسۇلى", + "Automatically assign participants" : "قاتناشقۇچىلارنى ئاپتوماتىك تەقسىملەيدۇ", + "Manually assign participants" : "قاتناشقۇچىلارنى قولدا تەقسىم قىلىڭ", + "Allow participants to choose" : "قاتناشقۇچىلارنىڭ تاللىشىغا يول قويۇڭ", + "Create rooms" : "ياتاق قۇرۇش", + "Confirm" : "جەزملەشتۈرۈڭ", + "Create breakout rooms" : "بۆسۈش ئۆيى قۇرۇش", + "Reset" : "ئەسلىگە قايتۇرۇش", + "Delete breakout rooms" : "بۆسۈش ئۆيلىرىنى ئۆچۈرۈڭ", + "Room {roomNumber}" : "ياتاق {roomNumber}", + "Current breakout rooms and settings will be lost" : "نۆۋەتتىكى بۆسۈش ئۆيى ۋە تەڭشەكلىرى يوقاپ كېتىدۇ", + "Cancel" : "ۋاز كەچ", + "Unassigned participants" : "ئىمزا قويمىغان قاتناشقۇچىلار", + "Back" : "قايتىش", + "Assign" : "تاپشۇرۇق", + "Add participant \"{user}\"" : "قاتناشقۇچى \"{user}\" نى قوشۇڭ", + "Now" : "ھازىر", + "Invalid calendar selected" : "ئىناۋەتسىز يىلنامە تاللاندى", + "Invalid start time selected" : "ئىناۋەتسىز باشلاش ۋاقتى تاللاندى", + "Invalid end time selected" : "ئىناۋەتسىز ئاخىرلىشىش ۋاقتى تاللاندى", + "Unknown error occurred" : "نامەلۇم خاتالىق كۆرۈلدى", + "Sending no invitations" : "تەكلىپنامە ئەۋەتمەيۋاتىدۇ", + "{participant0} will receive an invitation" : "{participant0} تەكلىپ تاپشۇرۋالىدۇ", + "{participant0} and {participant1} will receive invitations" : "{participant0} بىلەن {participant1} تەكلىپ تاپشۇرۋالىدۇ", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}، {participant1}، %n باشقىلار تەكلىپ تاپشۇرۋالىدۇ","{participant0}، {participant1}، %n باشقىلار تەكلىپ تاپشۇرۋالىدۇ"], + "Invite {user}" : "{user} نى تەكلىپ قىل", + "Invite all users and emails in this conversation" : "بۇ سۆھبەتتىكى بارلىق ئىشلەتكۈچىلەرنى ۋە ئېلخەتلەرنى تەكلىپ قىلىڭ", + "Meeting created" : "يىغىن قۇرۇلدى", + "Upcoming meetings" : "كىيىنكى يىغىنلار", + "Loading …" : "يۈكلەۋاتىدۇ…", + "No upcoming meetings" : "كىلىدىغان يىغىنلار يوق", + "Schedule a meeting" : "بىر يىغىن ئورۇنلاشتۇر", + "Meeting title" : "يىغىن ماۋزۇسى", + "From" : "دىن", + "To" : "غا", + "Calendar" : "كالېندار", + "Attendees" : "قاتناشقۇچىلار", + "No other participants to send invitations to." : "تەكلىپنى ئەۋەتىدىغان باشقا قاتناشقۇچى يوق.", + "Add attendees" : "قاتناشقۇچىلارنى قوش", + "Save" : "ساقلا", + "Search participants" : "قاتناشقۇچىلارنى ئىزدە", + "No results" : "ھېچقانداق نەتىجە يوق", + "Done" : "تامام", + "Disable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى ئەت", + "Raise hand" : "قولىنى كۆتۈرۈڭ", + "Raise hand (R)" : "قولىنى كۆتۈرۈڭ (R)", + "Lower hand" : "تۆۋەن قول", + "Lower hand (R)" : "تۆۋەن قول (R)", + "Exit full screen (F)" : "تولۇق ئېكراندىن چىقىڭ (F)", + "Full screen (F)" : "تولۇق ئېكران (F)", + "Speaker view" : "ياڭراتقۇ كۆرۈنۈشى", + "Grid view" : "كاتەكچە كۆرۈنۈش", + "Error when trying to load the available live transcription languages" : "مەۋجۇت بولغان نەق مەيدان كۆچۈرۈش تىللىرىنى يۈكلەشتە خاتالىق كۆرۈلدى", + "Failed to enable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى قوزغىتىش مەغلۇپ بولدى", + "Recording consent is required" : "خاتىرىلەش ئىجازىتى تەلەپ قىلىنىدۇ", + "This conversation is read-only" : "بۇ سۆھبەت پەقەت ئوقۇلىدۇ", + "Conversation not found or not joined" : "سۆھبەت تېپىلمىدى ياكى قوشۇلمىدى", + "Lobby is still active and you're not a moderator" : "لوبى يەنىلا ئاكتىپ ، سىز رىياسەتچى ئەمەس", + "Connection failed" : "ئۇلىنىش مەغلۇپ بولدى", + "Reload" : "قايتا يۈكلەڭ", + "{nickName} raised their hand." : "{nickName} ئۇلارنىڭ قولىنى كۆتۈردى.", + "A participant raised their hand." : "بىر قاتناشقۇچى قولىنى كۆتۈردى.", + "Collapse stripe" : "يىمىرىلىش يولى", + "Expand stripe" : "بەلۋاغنى كېڭەيتىش", + "Previous page of videos" : "سىنلارنىڭ ئالدىنقى بېتى", + "Next page of videos" : "سىنلارنىڭ كېيىنكى بېتى", + "Connecting …" : "ئۇلىنىش…", + "Calling …" : "چاقىرىش…", + "Waiting for {user} to join the call" : "{user} نىڭ چاقىرىققا قاتنىشىشىنى ساقلاش", + "Waiting for others to join the call …" : "باشقىلارنىڭ تېلېفونغا قاتنىشىشىنى ساقلاش…", + "You can invite others in the participant tab of the sidebar" : "يان كۆزنەكنىڭ قاتناشقۇچىلار بەتكۈچىدە باشقىلارنى تەكلىپ قىلسىڭىز بولىدۇ", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "سىز يان كۆزنەكنىڭ قاتناشقۇچىلار بەتكۈچىدە باشقىلارنى تەكلىپ قىلالايسىز ياكى بۇ ئۇلىنىشنى ھەمبەھىرلەپ باشقىلارنى تەكلىپ قىلالايسىز!", + "Share this link to invite others!" : "باشقىلارنى تەكلىپ قىلىش ئۈچۈن بۇ ئۇلىنىشنى ھەمبەھىرلەڭ!", + "Copy link" : "ئۇلانمىنى كۆچۈرۈڭ", + "You are not allowed to enable audio" : "ئاۋازنى قوزغىتىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "No audio. Click to select device" : "ئاۋاز يوق. ئۈسكۈنىنى تاللاش ئۈچۈن چېكىڭ", + "Mute audio" : "ئاۋازسىز", + "Mute audio (M)" : "ئاۋازسىز ئاۋاز (M)", + "Unmute audio" : "ئاۋازسىز ئاۋاز", + "Unmute audio (M)" : "ئاۋازسىز ئاۋاز (M)", + "None" : "يوق", + "Select a microphone" : "مىكروفوننى تاللاڭ", + "Select a speaker" : "بىر سۆزلىگۈچى تاللا", + "Check devices" : "ئۈسكۈنىلەرنى تەكشۈر", + "Access to camera was denied" : "كامېراغا كىرىش رەت قىلىندى", + "Error while accessing camera: It is likely in use by another program" : "كامېرانى زىيارەت قىلغاندا خاتالىق: ئۇنى باشقا پروگرامما ئىشلىتىشى مۇمكىن", + "Error while accessing camera" : "كامېرانى زىيارەت قىلغاندا خاتالىق", + "You have been muted by a moderator" : "سىز بىر رىياسەتچى تەرىپىدىن ئاۋازسىز قىلىندى", + "Hide presenter video" : "رىياسەتچى سىننى يوشۇرۇش", + "You are not allowed to enable video" : "سىننى قوزغىتىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "No video. Click to select device" : "سىن يوق. ئۈسكۈنىنى تاللاش ئۈچۈن چېكىڭ", + "Disable video" : "سىننى چەكلەڭ", + "Disable video (V)" : "سىننى چەكلەش (V)", + "Enable video" : "سىننى قوزغىتىڭ", + "Enable video (V)" : "سىننى قوزغىتىش (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىش - سىننى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىش (V) - سىننى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "سىننى قوزغىتىڭ. بۇ فىلىمنى تۇنجى قېتىم قوزغىتىپ قويسىڭىز ئۇلىنىشىڭىز ئۈزۈلۈپ قالىدۇ", + "Select a video device" : "بىر سىن ئۈسكۈنىسى تاللا", + "Show presenter" : "رىياسەتچى كۆرسەت", + "You" : "سەن", + "Mute" : "جىمجىتلا", + "Muted" : "ئاۋازسىز", + "Show screen" : "ئېكراننى كۆرسىتىش", + "Stop following" : "ئەگىشىشنى توختىتىڭ", + "Connection could not be established …" : "ئۇلىنىش قۇرۇلمىدى…", + "Connection was lost and could not be re-established …" : "ئۇلىنىش يوقاپ كەتتى ، قايتا قۇرغىلى بولمىدى…", + "Connection could not be established. Trying again …" : "ئۇلىنىش قۇرۇلمىدى. قايتا سىناڭ…", + "Connection lost. Trying to reconnect …" : "ئۇلىنىش يوقاپ كەتتى. قايتا ئۇلىماقچى بولۇۋاتىدۇ…", + "Connection problems …" : "ئۇلىنىش مەسىلىسى…", + "Collapse" : "يىمىرىلىش", + "Expand" : "كېڭەيتىش", + "You need to be logged in to upload files" : "ھۆججەتلەرنى يوللاش ئۈچۈن تىزىملىتىشىڭىز كېرەك", + "Drop your files to upload" : "يۈكلەش ئۈچۈن ھۆججەتلىرىڭىزنى تاشلاڭ", + "Conversation messages" : "سۆھبەت ئۇچۇرلىرى", + "Scroll to bottom" : "ئاستىغا يۆتكەڭ", + "Post message" : "ئۇچۇر يوللاش", + "Federated conversation" : "فېدېراتسىيە سۆھبەت", + "Public conversation" : "ئاممىۋى سۆھبەت", + "Favorite" : "يىغقۇچ", + "Banned users" : "چەكلەنگەن ئىشلەتكۈچى", + "Manage the list of banned users in this conversation." : "بۇ سۆھبەتتە چەكلەنگەن ئابونتلارنىڭ تىزىملىكىنى باشقۇرۇڭ.", + "Manage bans" : "چەكلەشنى باشقۇرۇش", + "No banned users" : "چەكلەنگەن ئىشلەتكۈچى يوق", + "Banned by:" : "چەكلىگەن:", + "Date:" : "چېسلا:", + "Note:" : "ئەسكەرتىش:", + "Hide details" : "تەپسىلاتلارنى يوشۇرۇش", + "Show details" : "تەپسىلاتلارنى كۆرسەت", + "Unban" : "چەكلىمە", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "ماۋزۇ ۋە چۈشەندۈرۈشنى {linkstart}Calendar ↗{linkend} دىن ئۆزگەرتەلەيسىز.", + "Error while updating conversation name" : "سۆھبەت نامىنى يېڭىلىغاندا خاتالىق", + "Error while updating conversation description" : "سۆھبەت تەسۋىرىنى يېڭىلىغاندا خاتالىق", + "Enter a name for this conversation" : "بۇ سۆھبەتكە ئىسىم كىرگۈزۈڭ", + "Edit conversation name" : "سۆھبەت نامىنى تەھرىرلەڭ", + "Edit conversation description" : "سۆھبەت چۈشەندۈرۈشىنى تەھرىرلەڭ", + "Enter a description for this conversation" : "بۇ سۆھبەتنىڭ چۈشەندۈرۈشىنى كىرگۈزۈڭ", + "Picture" : "رەسىم", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "بۇ سۆھبەتتە تۆۋەندىكى بوتۇلكىلارنى قوزغىتىشقا بولىدۇ. بۇ مۇلازىمېتىرغا تېخىمۇ كۆپ بوتكا ئورنىتىش ئۈچۈن باشقۇرۇشقا ئالاقىلىشىڭ.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "بۇ مۇلازىمېتىرغا ھېچقانداق بوتكا ئورنىتىلمىغان. بۇ مۇلازىمېتىرغا بوتكا ئورنىتىش ئۈچۈن باشقۇرۇشقا ئالاقىلىشىڭ.", + "Disable" : "چەكلە", + "Enable" : "قوزغىتىش", + "Breakout rooms" : "ياتاق ئۆي", + "Manage breakout rooms" : "بۆسۈش ئۆيلىرىنى باشقۇرۇش", + "Set up breakout rooms for this conversation" : "بۇ سۆھبەت ئۈچۈن بۆسۈش ئۆيى تەسىس قىلىڭ", + "Please select a valid PNG or JPG file" : "ئىناۋەتلىك PNG ياكى JPG ھۆججىتىنى تاللاڭ", + "Choose your conversation picture" : "سۆھبەت رەسىمىڭىزنى تاللاڭ", + "Choose" : "تاللاڭ", + "Error setting conversation picture" : "سۆھبەت رەسىمىنى تەڭشەشتە خاتالىق", + "Could not set the conversation picture: {error}" : "سۆھبەت رەسىمىنى تەڭشىيەلمىدى: {error}", + "Error cropping conversation picture" : "سۆھبەت رەسىمىنى كېسىشتە خاتالىق", + "Error removing conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرۈشتە خاتالىق", + "Set emoji as conversation picture" : "Emoji نى سۆھبەت رەسىمى قىلىپ تەڭشەڭ", + "Set background color for conversation picture" : "سۆھبەت رەسىمىنىڭ تەگلىك رەڭگىنى بەلگىلەڭ", + "Upload conversation picture" : "سۆھبەت رەسىمىنى يۈكلەڭ", + "Choose conversation picture from files" : "ھۆججەتلەردىن سۆھبەت رەسىمىنى تاللاڭ", + "Remove conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرۈڭ", + "The file must be a PNG or JPG" : "ھۆججەت چوقۇم PNG ياكى JPG بولۇشى كېرەك", + "Set picture" : "رەسىم بەلگىلەڭ", + "Default permissions modified for {conversationName}" : "كۆڭۈلدىكى سۆھبەت {conversationName} غا ئۆزگەرتىلدى", + "Could not modify default permissions for {conversationName}" : "{conversationName} نىڭ كۆڭۈلدىكى ئىجازەتلىرىنى ئۆزگەرتەلمىدى", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "بۇ سۆھبەتكە قاتناشقۇچىلارنىڭ كۆڭۈلدىكى ئىجازەتلىرىنى تەھرىرلەڭ. بۇ تەڭشەكلەر رىياسەتچىلەرگە تەسىر كۆرسەتمەيدۇ.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "بۇ بۆلەكتە ھەر قېتىم ئىجازەت ئۆزگەرتىلگەندە ، ئىلگىرى ئايرىم قاتناشقۇچىلارغا تەقسىم قىلىنغان ئىختىيارى ئىجازەتلەر يوقىلىدۇ.", + "All permissions" : "بارلىق ئىجازەتلەر", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "قاتناشقۇچىلارنىڭ چاقىرىشنى باشلاش ، چاقىرىشقا قاتنىشىش ، ئاۋاز ۋە سىننى قوزغىتىش ۋە ئېكراننى ھەمبەھىرلەش ھوقۇقى بار.", + "Restricted" : "چەكلەنگەن", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "قاتناشقۇچىلار تېلېفونغا قاتناشسا بولىدۇ ، ئەمما رىياسەتچى ئۇلارغا ئىجازەت بەرمىگۈچە ئاۋاز ، سىن ياكى ئېكراننى ھەمبەھىرلىيەلمەيدۇ.", + "Advanced permissions" : "ئالىي ئىجازەت", + "Edit permissions" : "ئىجازەتلەرنى تەھرىرلەڭ", + "Conversation settings" : "سۆھبەت تەڭشەكلىرى", + "Basic Info" : "ئاساسىي ئۇچۇر", + "Personal" : "شەخسىي", + "Moderation" : "ئوتتۇراھال", + "Setup overview" : "تەڭشەش ئومۇمىي ئەھۋالى", + "Live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەش", + "Enable live transcription" : "نەق-مەيدان ترانسكرىپسىيەلەشنى قوزغات", + "Breakout Rooms" : "ئارام ئېلىش ئۆيلىرى", + "Matterbridge" : "Matterbridge", + "Bots" : "بوتلار", + "Danger zone" : "خەتەر رايونى", + "Archive conversation" : "ئارخىپ سۆھبىتى", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "ئارخىپلانغان سۆھبەتلەر ئۆزلۈكىدىن سۆھبەت تىزىملىكىدىن يوشۇرۇلىدۇ. قانداقلا بولمىسۇن، سىز سۆھبەت نامىنى ئىزدىگەندە ياكى ئارخىپلانغان سۆھبەتلەر تىزىملىكىگە كىرگىنىڭىزدە، ئۇلار يەنىلا كۆرۈنىدۇ.", + "Do you really want to leave \"{displayName}\"?" : "راستىنلا \"{displayName}\" دىن ئايرىلغۇڭىز بارمۇ؟", + "You can archive this conversation instead." : "ئۇنىڭ ئورنىغا بۇ سۆھبەتنى ئارخىپلاشتۇرالايسىز.", + "Leave conversation" : "سۆھبەتتىن ۋاز كېچىڭ", + "You need to promote a new moderator before you can leave the conversation" : "سۆھبەتتىن ئايرىلىشتىن بۇرۇن يېڭى رىياسەتچىنى تەشۋىق قىلىشىڭىز كېرەك", + "Delete conversation" : "سۆھبەتنى ئۆچۈرۈڭ", + "Do you really want to delete \"{displayName}\"?" : "راستىنلا \"{displayName}\" نى ئۆچۈرمەكچىمۇ؟", + "Error while deleting conversation" : "سۆھبەتنى ئۆچۈرگەندە خاتالىق", + "Delete all chat messages" : "بارلىق پاراڭ ئۇچۇرلىرىنى ئۆچۈرۈڭ", + "Do you really want to delete all messages in \"{displayName}\"?" : "«{displayName}» دىكى بارلىق ئۇچۇرلارنى ئۆچۈرمەكچىمۇ؟", + "Error while clearing chat history" : "پاراڭلىشىش تارىخىنى تازىلاشتا خاتالىق", + "Be careful, these actions cannot be undone." : "ئېھتىيات قىلىڭ ، بۇ ھەرىكەتلەرنى ئەمەلدىن قالدۇرغىلى بولمايدۇ.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "سۆھبەت ئاخىرلاشقاندىن كېيىن ، يېپىق سۆھبەتكە قايتا قاتنىشىش ئۈچۈن تەكلىپ قىلىش كېرەك. ئوچۇق سۆھبەتنى ھەر ۋاقىت قايتا جەم قىلغىلى بولىدۇ.", + "Permanently delete this conversation." : "بۇ سۆھبەتنى مەڭگۈلۈك ئۆچۈرۈڭ.", + "Delete chat messages" : "پاراڭ ئۇچۇرلىرىنى ئۆچۈرۈڭ", + "Permanently delete all the messages in this conversation." : "بۇ سۆھبەتتىكى بارلىق ئۇچۇرلارنى مەڭگۈلۈك ئۆچۈرۈڭ.", + "_%n hour_::_%n hours_" : ["%n سائەت","%n سائەت"], + "_%n day_::_%n days_" : ["%n كۈن","%n كۈن"], + "_%n week_::_%n weeks_" : ["%n ھەپتە","%n ھەپتە"], + "Custom expiration time" : "ئىختىيارى ئىشلىتىش ۋاقتى", + "Message expiration disabled" : "ئۇچۇرنىڭ مۇددىتى چەكلەنگەن", + "Message expiration set: {duration}" : "ئۇچۇرنىڭ ۋاقتى: {duration}", + "Error when trying to set message expiration" : "ئۇچۇرنىڭ مۇددىتى توشماقچى بولغاندا خاتالىق", + "Message expiration" : "ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "پاراڭلىشىش ئۇچۇرلىرى مەلۇم ۋاقىتتىن كېيىن توشىدۇ. ئەسكەرتىش: پاراڭدا ھەمبەھىرلەنگەن ھۆججەتلەر ئىگىسى ئۈچۈن ئۆچۈرۈلمەيدۇ ، ئەمما سۆھبەتتە ئەمدى ھەمبەھىرلەنمەيدۇ.", + "Set message expiration" : "ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Current message expiration" : "نۆۋەتتىكى ئۇچۇرنىڭ ۋاقتى توشىدۇ", + "Password copied to clipboard" : "پارول كۆچۈرۈش تاختىسىغا كۆچۈرۈلدى", + "Password could not be copied" : "پارولنى كۆچۈرگىلى بولمىدى", + "Guest access" : "مېھمان زىيارەت قىلىش", + "Breakout rooms are not allowed in public conversations." : "ئاممىۋى پاراڭلاردا دەم ئېلىش ئۆيى رۇخسەت قىلىنمايدۇ.", + "Allow guests to join this conversation via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق بۇ سۆھبەتكە قاتنىشىشىغا يول قويۇڭ", + "Password protection" : "پارول قوغداش", + "This conversation is password-protected. Guests need password to join" : "بۇ سۆھبەت مەخپىي نومۇر بىلەن قوغدىلىدۇ. مىھمانلار مەخپىي نۇمۇر ئارقىلىق كىرىدۇ", + "Password protection is needed for public conversations" : "ئاممىۋى سۆھبەتلەرنى پارول بىلەن قوغداش كېرەك", + "Set a password" : "پارول بەلگىلەڭ", + "Change password" : "پارولنى ئۆزگەرتىڭ", + "Enter new password" : "يېڭى پارول كىرگۈزۈڭ", + "Save password" : "پارولنى ساقلاڭ", + "Copy password" : "پارول كۆچۈر", + "Guests are allowed to join this conversation via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق بۇ سۆھبەتكە قاتنىشىشىغا رۇخسەت قىلىنىدۇ", + "Guests are not allowed to join this conversation" : "مېھمانلارنىڭ بۇ سۆھبەتكە قاتنىشىشىغا رۇخسەت قىلىنمايدۇ", + "Resend invitations" : "تەكلىپنامىنى قايتۇرۇڭ", + "This conversation is open to both registered users and users created with the Guests app" : "بۇ سۆھبەت مېھمانلار دېتالى بىلەن قۇرۇلغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەر ئۈچۈن ئوچۇق", + "This conversation is open to registered users" : "بۇ سۆھبەت تىزىملاتقان ئابونتلارغا ئوچۇق", + "This conversation is limited to the current participants" : "بۇ سۆھبەت نۆۋەتتىكى قاتناشقۇچىلار بىلەنلا چەكلىنىدۇ", + "You opened the conversation to both registered users and users created with the Guests app" : "سىز مېھمانلار دېتالى بىلەن قۇرغان تىزىملاتقان ئابونتلار ۋە ئىشلەتكۈچىلەرگە سۆھبەتنى ئاچتىڭىز", + "Error occurred when opening or limiting the conversation" : "سۆھبەتنى ئاچقاندا ياكى چەكلىگەندە خاتالىق كۆرۈلدى", + "Open conversation to registered users, showing it in search results" : "تىزىملاتقان ئىشلەتكۈچىلەرگە سۆھبەتنى ئېچىڭ ، ئىزدەش نەتىجىسىدە كۆرسىتىڭ", + "Also open to users created with the Guests app" : "مېھمانلار دېتالى بىلەن قۇرۇلغان ئىشلەتكۈچىلەرگىمۇ ئېچىڭ", + "Open conversation" : "ئوچۇق سۆھبەت", + "Set language spoken in calls" : "بۇ چاقىرىقتا سۆزلەنگەن تىلنى بىكىت", + "Languages could not be loaded" : "تىلنى يۈكلىگىلى بولمىدى", + "Loading languages …" : "تىللارنى يۈكلەۋاتىدۇ ...", + "Invalid language" : "ئىناۋەتسىز تىل", + "Default language (English)" : "كۆڭۈلدىكى تىل (ئىنگىلىزچە)", + "Default live transcription language set" : "كۆڭۈلدىكى نەق-مەيدان ترانسكرىپسىيەلەشنى تىللىرى", + "Live transcription language set: {languageName}" : " نەق-مەيدان ترانسكرىپسىيەلەش تىللىرى: {languageName}", + "Error when trying to set live transcription language" : " نەق-مەيدان ترانسكرىپسىيەلەش تىلىنى بېكىتىۋاتقاندا خاتالىق كۆرۈلدى", + "Start time: {date}" : "باشلىنىش ۋاقتى: {date}", + "Start time has been updated" : "باشلىنىش ۋاقتى يېڭىلاندى", + "Error occurred while updating start time" : "باشلىنىش ۋاقتىنى يېڭىلىغاندا خاتالىق كۆرۈلدى", + "Enabling the lobby will remove non-moderators from the ongoing call." : "لوبىسىنى قوزغىتىپ ، رىياسەتچى بولمىغان تېلېفوننى ئۆچۈرۈۋېتىدۇ.", + "Enable lobby, restricting the conversation to moderators" : "لوبىنى قوزغىتىڭ ، رىياسەتچىلەر بىلەن سۆھبەتنى چەكلەڭ", + "Meeting start time" : "يىغىن باشلىنىش ۋاقتى", + "Start time (optional)" : "باشلاش ۋاقتى (ئىختىيارى)", + "Import email participants" : "ئېلىخەت قاتناشقۇچىلىرىنى كىرگۈز", + "You can import a list of email participants from a CSV file." : "CSV ھۆججىتىدىن ئېلخەت قاتناشقۇچىلىرىنىڭ تىزىملىكىنى ئىمپورت قىلالايسىز.", + "Poll drafts" : "راي سىناش لايىھىسى", + "Browse poll drafts" : "راي سىناش لايىھىسىنى كۆرۈڭ", + "Error occurred when locking the conversation" : "سۆھبەتنى قۇلۇپلىغاندا خاتالىق كۆرۈلدى", + "Error occurred when unlocking the conversation" : "سۆھبەتنى ئاچقاندا خاتالىق كۆرۈلدى", + "Lock conversation" : "سۆھبەتنى قۇلۇپلاڭ", + "This will also terminate the ongoing call." : "بۇمۇ داۋاملىشىۋاتقان تېلېفوننى ئاخىرلاشتۇرىدۇ.", + "Lock the conversation to prevent anyone to post messages or start calls" : "سۆھبەتنى قۇلۇپلاپ ، ھەر قانداق كىشىنىڭ ئۇچۇر يوللىشى ياكى تېلېفون باشلىشىنىڭ ئالدىنى ئالىدۇ", + "Edit" : "تەھرىر", + "More information" : "تېخىمۇ كۆپ ئۇچۇرلار", + "Delete" : "ئۆچۈر", + "Add new bridged channel to current conversation" : "نۆۋەتتىكى سۆھبەتكە يېڭى كۆۋرۈك قانىلى قوشۇڭ", + "unknown state" : "نامەلۇم دۆلەت", + "running" : "ئىجرا بولۇۋاتىدۇ", + "not running, check Matterbridge log" : "ئىجرا بولمايدۇ ، Matterbridge خاتىرىسىنى تەكشۈرۈڭ", + "not running" : "ئىجرا ئەمەس", + "Bridge saved" : "كۆۋرۈك ساقلاندى", + "You can bridge channels from various instant messaging systems with Matterbridge." : "سىز Matterbridge ئارقىلىق ھەرخىل تېز ئۇچۇر سىستېمىسىدىكى قاناللارنى كۆۋرۈك قىلالايسىز.", + "More info on Matterbridge" : "Matterbridge ھەققىدە تېخىمۇ كۆپ ئۇچۇرلار", + "Messaging systems" : "ئۇچۇر سىستېمىسى", + "Enable bridge" : "كۆۋرۈكنى قوزغىتىش", + "Show Matterbridge log" : "Matterbridge خاتىرىسىنى كۆرسەت", + "Log content" : "خاتىرە مەزمۇنى", + "Only moderators are allowed to mention @all" : "پەقەت رىياسەتچىلەرلا @all نى تىلغا ئالىدۇ", + "All participants are allowed to mention @all" : "بارلىق قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا رۇخسەت قىلىنىدۇ", + "Participants are now allowed to mention @all." : "ھازىر قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا رۇخسەت قىلىندى.", + "Mentioning @all has been limited to moderators." : "@All نى تىلغا ئېلىش پەقەت رىياسەتچىلەر بىلەنلا چەكلىنىپ قالدى.", + "Allow participants to mention @all" : "قاتناشقۇچىلارنىڭ @all نى تىلغا ئېلىشىغا يول قويۇڭ", + "Mention permissions" : "ئىجازەتنامە", + "Notifications" : "ئۇقتۇرۇش", + "Notify about calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفونلار ھەققىدە خەۋەر قىلىڭ", + "Important conversation" : "مۇھىم سۆھبەت", + "\"Do not disturb\" user status is ignored for important conversations" : "\"دەخلى قىلما\" ئىشلەتكۈچى ھالىتى مۇھىم سۆھبەتلەرگە ئىشلىمەيدۇ", + "Sensitive conversation" : "نازۇك سۆھبەت", + "Message preview will be disabled in conversation list and notifications" : "سۆھبەت تىزىملىكى ۋە ئۇقتۇرۇشلاردا خەۋەرنى ئالدىن كۆرۈش چەكلىنىدۇ", + "Recording consent is required for calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفون ئۈچۈن خاتىرىلەش رۇخسىتى تەلەپ قىلىنىدۇ", + "Recording consent is not required for calls in this conversation" : "بۇ سۆھبەتتىكى تېلېفون ئۈچۈن خاتىرىلەش رۇخسىتى تەلەپ قىلىنمايدۇ", + "Recording consent requirement was updated" : "خاتىرىلەش ئىجازەت تەلىپى يېڭىلاندى", + "Error occurred while updating recording consent" : "خاتىرىلەش ئىجازىتىنى يېڭىلىغاندا خاتالىق كۆرۈلدى", + "Recording Consent" : "خاتىرىلەش", + "Recording consent cannot be changed once a call or breakout session has started." : "چاقىرىش ياكى بۆسۈش يىغىنى باشلانغاندىن كېيىن خاتىرىلەش ئىجازەتنامىسىنى ئۆزگەرتىشكە بولمايدۇ.", + "Require recording consent before joining call in this conversation" : "بۇ سۆھبەتكە چاقىرىشقا قاتنىشىشتىن بۇرۇن خاتىرىلەش ئىجازىتىنى تەلەپ قىلىڭ", + "Recording consent is required for all calls" : "بارلىق تېلېفونلاردا خاتىرىلەش رۇخسىتى تەلەپ قىلىنىدۇ", + "SIP dial-in is now possible without PIN requirement" : "PIN تەلىپى بولمىسا SIP چاقىرىش ھازىر مۇمكىن", + "SIP dial-in is now enabled" : "ھازىر SIP چاقىرىش ئىقتىدارى قوزغىتىلدى", + "SIP dial-in is now disabled" : "SIP چاقىرىش ھازىر چەكلەنگەن", + "Error occurred when enabling SIP dial-in" : "SIP چاقىرىشنى قوزغىغاندا خاتالىق كۆرۈلدى", + "Error occurred when disabling SIP dial-in" : "SIP چاقىرىشنى چەكلىگەندە خاتالىق كۆرۈلدى", + "Phone and SIP dial-in" : "تېلېفون ۋە SIP چاقىرىش", + "Enable phone and SIP dial-in" : "تېلېفون ۋە SIP چاقىرىشنى قوزغىتىڭ", + "Allow to dial-in without a PIN" : "PIN بولمىسا تېلېفون ئۇرسىڭىز بولىدۇ", + "Ongoing" : "يۈز بېرىۋاتقان", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n كىشلەر قۇبۇل قىلدى","%n كىشلەر قۇبۇل قىلدى"], + "_%n person declined_::_%n people declined_" : ["%n كىشلەر رەت قىلدى","%n كىشلەر رەت قىلدى"], + "_and %n other attachment_::_and %n other attachments_" : ["ھەمدە باشقا %n قۇشۇمچە ھۆججەتلەر","ھەمدە باشقا %n قۇشۇمچە ھۆججەتلەر"], + "With {displayName}" : "{displayName} بىلەن", + "In {conversation}" : "{conversation} دا", + "View attachment" : "قۇشۇمچە ھۆججەتلەرنى كۆر", + "Join" : "قوشۇلۇڭ", + "View conversation" : "سۆھبەتنى كۆر", + "View event on Calendar" : "پائالىيەتنى يىلنامىدە كۆر", + "Error while creating the conversation" : "سۆھبەتنى قۇرغاندا خاتالىق", + "Hello, {displayName}" : "ياخشىمۇسىز، {displayName}", + "Start meeting now" : "يىغىننى ھازىر باشلا", + "Give your meeting a title" : "يىغىنىڭىزغا بىر ماۋزو قۇيۇڭ", + "Create and copy link" : "ئۇلىنىش قۇرۇڭ ھەمدە كۆچۈرۈڭ", + "Create a new conversation" : "يېڭى سۆھبەت قۇر", + "Join open conversations" : "ئوچۇق سۆھبەتكە قاتنىشىڭ", + "Call a phone number" : "تېلېفون نومۇرىغا تېلېفون قىلىڭ", + "Scroll backward" : "كەينىگە قايت", + "Scroll forward" : "ئالدىغا سىيرىل", + "Schedule meetings" : "يىغىن ئورۇنلاشتۇر", + "You don't have any upcoming meetings" : "سىزنىڭ كىلىدىغان ھېچقانداق يىغىنىڭىز يوق", + "Open calendar" : "كالېندارنى ئېچىڭ", + "Unread mentions" : "ئوقۇلمىغان تىلغا ئېلىنغان", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "سىز تىلغا ئېلىنغان ئۇچۇرلار بۇ يەردە كۆرسىتىلىدۇ. سىز كىشىلەرنى تىلغا ئېلىش ئۈچۈن @ بەلگىسىنى كىرگۈزۈپ، ئاندىن ئۇلارنىڭ ئىسمىنى يازسىڭىز بولىدۇ.", + "Upcoming reminders" : "كىلىدىغان ئەسكەرتمىلەر", + "Message reminders" : "ئۇچۇر ئەسكەرتمىلەر", + "Set a reminder on a message to be notified" : "ئۇچۇرغا ئۇقتۇرۇش قىلىنىدىغان ئەسكەرتىش قويۇڭ", + "Start a group conversation" : "گۇرۇپپا سۆھبىتىنى باشلاڭ", + "Create conversation" : "سۆھبەت قۇرۇش", + "Enter your name" : "ئىسمىڭىزنى كىرگۈزۈڭ", + "Submit name and join" : "ئىسىم يوللاڭ ۋە قوشۇلۇڭ", + "Do you already have an account?" : "ھېساباتىڭىز بارمۇ؟", + "Log in" : "كىرىڭ", + "Error while verifying uploaded file" : "يۈكلەنگەن ھۆججەتنى تەكشۈرۈشتە خاتالىق يۈز بەردى", + "Uploaded file is verified" : "چىقىرىلغان ھۆججەت تەكشۈرۈلدى", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "مەزمۇن فورماتى پەش بىلەن ئايرىلغان قىممەتلەر (CSV): 1- باشلىق قۇر تەلەپ قىلىنىدۇ ۋە 2\"name\",\"email\"2 ياكى پەقەت 3\"email\"34- ھەر قۇردا بىردىن كىرگۈزۈش (مەسىلەن 5\"John Doe\",\"john@example.tld\"5)", + "Participants added successfully" : "قاتناشقۇچى مۇۋەپپەقىيەتلىك قوشۇلدى", + "Error while adding participants" : "قاتناشقۇچىنى قوشقاندا خاتالىق", + "Import a file" : "بىر ھۆججەت كىرگۈز", + "Browse" : "زىيارەت قىل", + "Verifying uploaded file …" : "يۈكلەنگەن ھۆججەتنى تەكشۈرۋاتىدۇ..", + "This might take a moment" : "بۇنىڭغا بىر ئاز ۋاقىت كېتىشى مۇمكىن", + "Send invitations" : "تەكلىپنامە يوللا", + "_%n invalid email_::_%n invalid emails_" : ["ئىناۋەتسىز ئېلېكترونلۇق خەت","ئىناۋەتسىز ئېلېكترونلۇق خەت"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n ئېلىخەت ئاللىبۇرۇن كىرگۈزۈلگەن ياكى كۆپەيتىلىدۇ","%n ئېلىخەت ئاللىبۇرۇن كىرگۈزۈلگەن ياكى كۆپەيتىلىدۇ"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n تەكلىپ ئەۋەتىلدۇ","%n تەكلىپ ئەۋەتىلدۇ"], + "An error occurred while calling a phone number" : "تېلېفون نومۇرىغا تېلېفون قىلغاندا خاتالىق كۆرۈلدى", + "Phone number could not be called: {error}" : "تېلېفون نومۇرىنى چاقىرىشقا بولمايدۇ: {error}", + "Phone number could not be called" : "تېلېفون نومۇرىغا تېلېفون قىلغىلى بولمايدۇ", + "Search participants or phone numbers" : "قاتناشقۇچىلار ياكى تېلېفون نومۇرىنى ئىزدەڭ", + "Creating the conversation …" : "سۆھبەت قۇرۇش…", + "Mark as read" : "ئوقۇغاندەك بەلگە قويۇڭ", + "Mark as unread" : "ئوقۇلمىغان دەپ بەلگە قويۇڭ", + "Remove from favorites" : "ياقتۇردىغاندىن چىقىرۋەت", + "Add to favorites" : "ياقتۇردىغانغا قوش", + "Unarchive conversation" : "قالايمىقان سۆھبەت", + "Ignore \"Do not disturb\"" : "\"دەخلى قىلما\" غا كارىڭ بولمىسۇن", + "You need to promote a new moderator before you can leave the conversation." : "سۆھبەتتىن ئايرىلىشتىن بۇرۇن يېڭى رىياسەتچىنى تەشۋىق قىلىشىڭىز كېرەك.", + "Conversation actions" : "سۆھبەت ھەرىكىتى", + "Notify about calls" : "بارلىق چاقىرىقلارغا ئۇقتۇر", + "Hide message text" : "ئۇچۇر تىكىستىنى يۇشۇر", + "Pending invitations" : "تەكلىپنامە ساقلىنىۋاتىدۇ", + "From {user} at {remoteServer}" : "{user} مۇلازىمېتىردىكى {remoteServer} دىن", + "Decline invitation" : "تەكلىپنى رەت قىلىش", + "Accept invitation" : "تەكلىپنى قوبۇل قىلىڭ", + "No pending invitations" : "كۈتۈلمىگەن تەكلىپلەر يوق", + "Home" : "ئۆي", + "Unread" : "ئوقۇمىغان", + "Mentions" : "تىلغا ئېلىشلار", + "Meetings" : "يىغىنلار", + "Alphabetically" : "ئېلىپبە شەكلىدە", + "No followed threads" : "ئەگەشكەن يىپلار يوق", + "No matches found" : "ماس كەلمىدى", + "No conversations found" : "پاراڭ تېپىلمىدى", + "You have no archived conversations." : "ئارخىپ پاراڭلىرىڭىز يوق.", + "Subscribe to an existing thread or start your own." : "مەۋجۇت بىر يىپقا مۇشتەرى بول ياكى ئۆزەڭنىڭكىنى باشلا", + "You have no unread mentions." : "سىزدە ئوقۇلمىغان تىلغا ئېلىنمىدى.", + "You have no unread messages." : "ئوقۇمىغان ئۇچۇرلىرىڭىز يوق.", + "An error occurred while performing the search" : "ئىزدەش جەريانىدا خاتالىق كۆرۈلدى", + "Conversation list" : "سۆھبەت تىزىملىكى", + "Filter conversations by" : "سۆھبەتنى بىلەن سۈز", + "Unread messages" : "ئوقۇلمىغان ئۇچۇرلار", + "Meeting conversations" : "يىغىن سۆھبەتلىرى", + "Clear filters" : "سۈزگۈچنى تازىلاش", + "New personal note" : "يېڭى شەخسىي خاتىرە", + "Back to conversations" : "سۆھبەتكە قايتىش", + "Archived conversations" : "ئارخىپلاشتۇرۇلغان سۆھبەت", + "Threads" : "يىپلار", + "Clear filter" : "سۈزگۈچنى تازىلاش", + "Show more threads" : "جىقراق يىپنى كۆرسەت", + "App settings" : "ئەپ تەڭشىكى", + "Users" : "ئىشلەتكۈچىلەر", + "Groups" : "گۇرۇپپا", + "Teams" : "كوماندىلار", + "Federated users" : "فېدېراتسىيە ئىشلەتكۈچىلەر", + "New private conversation" : "يېڭى شەخسىي سۆھبەت", + "Other sources" : "باشقا مەنبەلەر", + "Open conversations" : "ئوچۇق سۆھبەت", + "No search results" : "ئىزدەش نەتىجىسى يوق", + "Users, groups and teams" : "ئىشلەتكۈچى ، گۇرۇپپا ۋە گۇرۇپپىلار", + "Users and groups" : "ئىشلەتكۈچى ۋە گۇرۇپپىلار", + "Users and teams" : "ئىشلەتكۈچى ۋە گۇرۇپپىلار", + "Groups and teams" : "گۇرۇپپا ۋە گۇرۇپپىلار", + "New group conversation" : "يېڭى گۇرۇپپا سۆھبىتى", + "The meeting will start soon" : "يىغىن پات يېقىندا باشلىنىدۇ", + "This meeting is scheduled for {startTime}" : "بۇ يىغىن {startTime} ئۈچۈن ئورۇنلاشتۇرۇلغان", + "You are currently waiting in the lobby" : "سىز ھازىر كۈتۈپخانىدا ساقلاۋاتىسىز", + "Select microphone" : "مىكروفوننى تاللاڭ", + "No microphone available" : "مىكروفون يوق", + "Select speaker" : "سۆزلىگۈچى تاللا", + "No speaker available" : "سۆزلىگۈچى يوق", + "Select camera" : "كامېرانى تاللاڭ", + "No camera available" : "كامېرا يوق", + "Select a device" : "ئۈسكۈنىنى تاللاڭ", + "Playing …" : "ئويناش…", + "Test speakers" : "سىناق ياڭراتقۇ", + "Test" : "سىناق", + "Devices" : "ئۈسكۈنىلەر", + "Backgrounds" : "تەگلىك", + "No audio" : "ئاۋاز يوق", + "No camera" : "كامېرا يوق", + "Display video as you will see it (mirrored)" : "سىننى كۆرگەندەك كۆرسىتىڭ (ئەينەك)", + "Display video as others will see it" : "سىننى باشقىلار كۆرگەندەك كۆرسىتىڭ", + "Calls are not supported in your browser" : "تور كۆرگۈڭىزدە چاقىرىشنى قوللىمايدۇ", + "Access to microphone is only possible with HTTPS" : "مىكروفونغا ئېرىشىش پەقەت HTTPS ئارقىلىقلا بولىدۇ", + "Access to microphone was denied" : "مىكروفونغا ئېرىشىش رەت قىلىندى", + "Error while accessing microphone" : "مىكروفوننى زىيارەت قىلغاندا خاتالىق", + "Access to camera is only possible with HTTPS" : "كامېراغا كىرىش پەقەت HTTPS ئارقىلىقلا مۇمكىن", + "The call is being recorded." : "تېلېفون خاتىرىلىنىۋاتىدۇ.", + "The call might be recorded." : "تېلېفون خاتىرىلەنگەن بولۇشى مۇمكىن.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "بۇ خاتىرىدە ئاۋازىڭىز ، كامېرادىكى سىن ۋە ئېكران ھەمبەھىرلىنىشىڭىز بولۇشى مۇمكىن. تېلېفونغا قاتنىشىشتىن بۇرۇن سىزنىڭ رۇخسىتىڭىز تەلەپ قىلىنىدۇ.", + "Give consent to the recording of this call" : "بۇ تېلېفوننىڭ خاتىرىسىگە قوشۇلۇڭ", + "Show more info" : "تېخىمۇ كۆپ ئۇچۇرنى كۆرسەت", + "Audio is not available" : "ئاۋاز يوق", + "Video is not available" : "سىن يوق", + "Start recording immediately with the call" : "چاقىرىش بىلەن دەرھال خاتىرىلەشنى باشلاڭ", + "Notify all participants about this call" : "بارلىق قاتناشقۇچىلارغا بۇ چاقىرىقنى ئۇقتۇر", + "Apply settings" : "تەڭشەكلەرنى ئىشلىتىڭ", + "Select virtual office background" : "مەۋھۇم ئىشخانا تەگلىكىنى تاللاڭ", + "Select virtual home background" : "مەۋھۇم ئائىلە تەگلىكىنى تاللاڭ", + "Select virtual abstract background" : "مەۋھۇم ئابستراكت تەگلىكنى تاللاڭ", + "Select virtual beach background" : "مەۋھۇم ساھىل تەگلىكىنى تاللاڭ", + "Select virtual park background" : "مەۋھۇم باغچا تەگلىكىنى تاللاڭ", + "Select virtual theater background" : "مەۋھۇم تىياتىر تەگلىكىنى تاللاڭ", + "Select virtual library background" : "مەۋھۇم كۇتۇپخانا تەگلىكىنى تاللاڭ", + "Select virtual space station background" : "مەۋھۇم بوشلۇق پونكىتى تەگلىكىنى تاللاڭ", + "Error while uploading the file" : "ھۆججەتنى يۈكلەۋاتقاندا خاتالىق", + "Select a file" : "ھۆججەت تاللاڭ", + "Invalid path selected" : "ئىناۋەتسىز يول تاللانغان", + "Select virtual background from file {fileName}" : "ھۆججەتتىن مەۋھۇم تەگلىكنى تاللاڭ {fileName}", + "Blur" : "تۇتۇق", + "Upload" : "يۈكلە", + "Files" : "ھۆججەتلەر", + "(editing)" : "(تەھرىرلەش)", + "(edited)" : "(تەھرىرلەندى)", + "The message has expired or has been deleted" : "ئۇچۇرنىڭ ۋاقتى توشتى ياكى ئۆچۈرۈلدى", + "Cancel quote" : "نەقىلنى بىكار قىلىڭ", + "24 hours" : "24 hours", + "7 days" : "7 كۈن", + "30 days" : "30 كۈن", + "Until unpin" : "مىخلاشتىن چىقارغىچە", + "Clear reminder – {timeLocale}" : "ئەسكەرتىشنى تازىلاش - {timeLocale}", + "Edited by {actor}" : "تەھرىرلىگەن {actor}", + "Pinned by you" : "سىز مىخلىدىڭىز", + "Pinned by {actor}" : "{actor} تەرىپىدىن مىخلاندى", + "Until {absoluteDate}" : "{absoluteDate} غىچە", + "Message text copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن ئۇچۇر تېكىستى", + "Message text could not be copied" : "ئۇچۇر تېكىستىنى كۆچۈرگىلى بولمايدۇ", + "Message forwarded to \"Note to self\"" : "ئۇچۇر «ئۆزىگە ئەسكەرتىش» كە يوللاندى", + "Error while forwarding message to \"Note to self\"" : "«ئۆزىڭىزگە ئەسكەرتىش» گە ئۇچۇر يوللاشتا خاتالىق", + "A reminder was successfully removed" : "ئەسكەرتىش مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى", + "Error occurred when removing a reminder" : "ئەسكەرتىشنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "A reminder was successfully set at {datetime}" : "ئەسكەرتىش {datetime} دا مۇۋەپپەقىيەتلىك تەڭشەلدى", + "Error occurred when creating a reminder" : "ئەسكەرتىش قۇرغاندا خاتالىق كۆرۈلدى", + "Add a reaction to this message" : "بۇ ئۇچۇرغا ئىنكاس قوشۇڭ", + "Reply" : "جاۋاب قايتۇر", + "More actions" : "تېخىمۇ كۆپ ھەرىكەت", + "Set reminder" : "ئەسكەرتىش بەلگىلەڭ", + "Pin message" : "مىخلاش ئۇچۇرى", + "Unpin message" : "مىختىن چىقىرىش ئۇچۇرى", + "Reply privately" : "شەخسىي جاۋاب قايتۇرۇڭ", + "Edit message" : "ئۇچۇرنى تەھرىرلەش", + "Copy message" : "ئۇچۇرنى كۆچۈرۈڭ", + "Copy message link" : "ئۇچۇر ئۇلانمىسىنى كۆچۈرۈڭ", + "Go to file" : "ھۆججەتكە بېرىڭ", + "Download file" : "ھۆججەت چۈشۈرۈش", + "Go to thread" : "يىپقا بار", + "Edit thread details" : "يىپ تەپسىلاتىنى تەھرىرلە", + "Forward message" : "ئۇچۇر يوللاش", + "Translate" : "تەرجىمە", + "Set custom reminder" : "ئىختىيارى ئەسكەرتىش بەلگىلەڭ", + "Keep pinned for" : "مىخلاشنى ساقلا", + "Set custom period" : "خاس مەزگىل بېكىت", + "Close reactions menu" : "ئىنكاس تىزىملىكىنى تاقاش", + "React with {emoji}" : "{emoji} بىلەن ئىنكاس قايتۇرۇڭ", + "React with another emoji" : "باشقا بىر emoji بىلەن ئىنكاس قايتۇرۇڭ", + "Choose a conversation to forward the selected message." : "تاللانغان ئۇچۇرنى يوللاش ئۈچۈن سۆھبەتنى تاللاڭ.", + "Error while forwarding message" : "ئۇچۇر يوللاشتا خاتالىق", + "The message has been forwarded to {selectedConversationName}" : "بۇ ئۇچۇر {selectedConversationName} غا يوللاندى", + "Dismiss" : "خىزمەتتىن ھەيدەش", + "Go to conversation" : "سۆھبەتكە بېرىڭ", + "Detect language" : "تىلنى ئېنىقلاش", + "The message could not be translated" : "بۇ ئۇچۇرنى تەرجىمە قىلىشقا بولمىدى", + "Translation copied to clipboard" : "تەرجىمە تاختىسىغا كۆچۈرۈلگەن", + "Translation could not be copied" : "تەرجىمىنى كۆچۈرگىلى بولمىدى", + "Translate message" : "ئۇچۇرنى تەرجىمە قىلىڭ", + "Source language to translate from" : "تەرجىمە قىلىدىغان مەنبە تىلى", + "Translate from" : "دىن تەرجىمە قىلىڭ", + "Target language to translate into" : "تەرجىمە قىلىدىغان نىشان تىل", + "Translate to" : "تەرجىمە قىلىڭ", + "Translating" : "تەرجىمە قىلىش", + "Copy translated text" : "تەرجىمە قىلىنغان تېكىستنى كۆچۈرۈڭ", + "Send now" : "ھازىر ئەۋەتىڭ", + "Message read by everyone who shares their reading status" : "ئوقۇش ھالىتىنى ھەمبەھىرلىگەن ھەممە ئادەم ئوقۇغان ئۇچۇر", + "Message sent" : "ئۇچۇر ئەۋەتىلدى", + "Sent without notification" : "ئۇقتۇرۇشسىز ئەۋەتىلدى", + "Deleting message" : "ئۇچۇرنى ئۆچۈرۈش", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "ئۇچۇر مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى ، ئەمما بىر bot ياكى Matterbridge سەپلەندى ، بۇ ئۇچۇر باشقا مۇلازىمەتلەرگە تارقىتىلغان بولۇشى مۇمكىن", + "Message deleted successfully" : "ئۇچۇر مۇۋەپپەقىيەتلىك ئۆچۈرۈلدى", + "Message could not be deleted because it is too old" : "ئۇچۇر بەك كونا بولغاچقا ئۆچۈرۈلمىدى", + "Only normal chat messages can be deleted" : "پەقەت نورمال پاراڭلىشىش ئۇچۇرلىرىنىلا ئۆچۈرگىلى بولىدۇ", + "An error occurred while deleting the message" : "ئۇچۇرنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "Pinned" : "مىخلاندى", + "Your browser does not support playing audio files" : "توركۆرگۈڭىز ئاۋاز ھۆججىتىنى قويۇشنى قوللىمايدۇ", + "Contact" : "ئالاقىلىشىڭ", + "{stack} in {board}" : "{board} دا {stack}", + "Deck Card" : "پالۋان كارتىسى", + "Remove {fileName}" : "ئۆچۈرۈڭ {fileName}", + "Open this location in OpenStreetMap" : "بۇ ئورۇننى OpenStreetMap دا ئېچىڭ", + "_%n reply_::_%n replies_" : ["%n جاۋاپ","%n جاۋاپلار"], + "Sending message" : "ئۇچۇر ئەۋەتىش", + "Failed to send the message. Click to try again" : "ئۇچۇر ئەۋەتەلمىدى. قايتا سىناڭ", + "Not enough free space to upload file" : "ھۆججەت يوللاشقا يېتەرلىك بوشلۇق يوق", + "You cannot send messages to this conversation at the moment" : "ھازىرچە بۇ سۆھبەتكە ئۇچۇر ئەۋەتەلمەيسىز", + "Could not update the message" : "ئۇچۇرنى يېڭىلىيالمىدى", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["راي-سىناش ئورگىنالى • %n تاللانما","راي-سىناش ئورگىنالى • %n تاللانمىلار"], + "_%n vote_::_%n votes_" : ["%n vote","%n بېلەت"], + "Edit poll draft" : "راي سىناش لايىھىسىنى تەھرىرلە", + "Delete poll draft" : "راي سىناش لايىھىسىنى ئۆچۈرۈڭ", + "Open poll" : "راي سىناش", + "See results" : "نەتىجىنى كۆرۈڭ", + "Reactions" : "ئىنكاس", + "No permission to post reactions in this conversation" : "بۇ سۆھبەتتە ئىنكاس يوللاشقا ئىجازەت يوق", + "and {participant}" : "ۋە {participant}", + "_and %n other participant_::_and %n other participants_" : ["ھەمدە باشقا %n قاتناشقۇچى","ھەمدە باشقا %n قاتناشقۇچىلار"], + "Show all reactions" : "بارلىق ئىنكاسلارنى كۆرسەت", + "Add more reactions" : "تېخىمۇ كۆپ ئىنكاسلارنى قوشۇڭ", + "Show or collapse system messages" : "سىستېما ئۇچۇرلىرىنى كۆرسىتىش ياكى يىمىرىلىش", + "No messages" : "ھېچقانداق ئۇچۇر يوق", + "All messages have expired or have been deleted." : "بارلىق ئۇچۇرلارنىڭ ۋاقتى توشتى ياكى ئۆچۈرۈلدى.", + "{author} (pinned by you)" : "{author} (سىز مىخلىدىڭىز)", + "{author} (pinned by {actor})" : "{author} ({actor} مىخلىدى)", + "Unpin" : "مىخلىما", + "Cancel search" : "ئىزدەشنى ئەمەلدىن قالدۇرۇڭ", + "Add a phone number" : "تېلېفون نومۇرىنى قوشۇڭ", + "Error: A password is required to create the conversation." : "خاتالىق: بۇ سۆھبەتنى قۇرۇش ئۈچۈن پارول تەلەپ قىلىندى.", + "All set, the conversation \"{conversationName}\" was created." : "ھەممىسى تەڭشەلدى ، سۆھبەت \"{conversationName}\" قۇرۇلدى.", + "Create a new group conversation" : "يېڭى گۇرۇپپا سۆھبىتى قۇر", + "Add participants" : "قاتناشقۇچىلارنى قوشۇڭ", + "Maximum length exceeded ({maxlength} characters)" : "ئەڭ چوڭ ئۇزۇنلۇقىتىن ({maxlength}) ئېشىپ كەتتى", + "Conversation visibility" : "سۆھبەتنىڭ كۆرۈنۈشچانلىقى", + "Allow guests to join via link" : "مېھمانلارنىڭ ئۇلىنىش ئارقىلىق قاتنىشىشىغا يول قويۇڭ", + "Enter password" : "پارول كىرگۈزۈڭ", + "This conversation has been locked" : "بۇ سۆھبەت قۇلۇپلاندى", + "No permission to post messages in this conversation" : "بۇ سۆھبەتتە ئۇچۇر يوللاشقا ئىجازەت يوق", + "Joining conversation …" : "سۆھبەتكە قاتنىشىش…", + "Write a message without notification" : "ئۇقتۇرۇشسىز بىر ئۇچۇر ياز", + "Create a thread silently" : "بىر يىپنى جىمجىت قۇر", + "Create a thread" : "بىر يىپ قۇر", + "Send message silently" : "ئۈن-تىنسىز ئۇچۇر ئەۋەتىڭ", + "Send message" : "ئۇچۇر ئەۋەتىڭ", + "Send without notification" : "ئۇقتۇرۇشسىز ئەۋەتىڭ", + "The participant will not be notified about new messages" : "قاتناشقۇچىلارغا يېڭى ئۇچۇرلار توغرىسىدا ئۇقتۇرۇش قىلىنمايدۇ", + "Participants will not be notified about new messages" : "قاتناشقۇچىلارغا يېڭى ئۇچۇرلار توغرىسىدا ئۇقتۇرۇش قىلىنمايدۇ", + "Thread title is required" : "يىپ ماۋزوسى تەلەپ قىلىنىدۇ", + "Message text is required" : "ئۇچۇر مەزمۇنى تەلەپ قىلىنىدۇ", + "The message could not be edited" : "بۇ ئۇچۇرنى تەھرىرلىگىلى بولمىدى", + "File to share" : "ھەمبەھىرلىنىدىغان ھۆججەت", + "File upload is not available in this conversation" : "بۇ سۆھبەتتە ھۆججەت يوللاش مۇمكىن ئەمەس", + "Add emoji" : "Emoji نى قوشۇڭ", + "Adding a mention will only notify users who did not read the message." : "ئەسكەرتىش قوشقاندا ئۇچۇرنى ئوقۇمىغان ئابونتلارغا ئۇقتۇرۇش قىلىدۇ.", + "Thread title" : "يىپ ماۋزوسى", + "Send later" : "كېيىن ئەۋەتىڭ", + "Cancel editing" : "تەھرىرلەشنى ئەمەلدىن قالدۇرۇڭ", + "{user} is out of office and might not respond." : "{user} ئىشخانىدىن چىقتى ، جاۋاب قايتۇرماسلىقى مۇمكىن.", + "Absence period: {startDate} - {endDate}" : "يوقلۇق مەزگىلى: {startDate} - {endDate}", + "Replacement:" : "ئالماشتۇرۇش: ", + "Share from {nextcloud}" : "{nextcloud} دىن ئورتاقلىشىش", + "Share from Files" : "ھۆججەتلەردىن ئورتاقلىشىش", + "Share files to the conversation" : "سۆھبەتكە ھۆججەتلەرنى ھەمبەھىرلەڭ", + "Upload from device" : "ئۈسكۈنىدىن يۈكلەش", + "Create new poll" : "يېڭى راي سىناش", + "Smart picker" : "ئەقىللىق تاللىغۇچ", + "Record voice message" : "ئاۋازلىق ئۇچۇرنى خاتىرىلەڭ", + "End recording and send" : "خاتىرىلەشنى ئاخىرلاشتۇرۇڭ", + "Dismiss recording" : "خاتىرىسىنى ئەمەلدىن قالدۇرۇش", + "Access to the microphone was denied" : "مىكروفونغا كىرىش رەت قىلىندى", + "Microphone either not available or disabled in settings" : "مىكروفون تەڭشەكلەردە ئىشلەتكىلى بولمايدۇ ياكى چەكلىنىدۇ", + "Error while recording audio" : "ئاۋاز خاتىرىلەۋاتقاندا خاتالىق", + "Generating summary of unread messages …" : "ئوقۇلمىغان ئۇچۇرلارغا خۇلاسە يېزىۋاتىدۇ...", + "Summary is AI generated and might contain mistakes" : "خۇلاسىنى AI يازغان ھەمدە خاتالىقلار بولىشى مۇمكىن", + "Error occurred during a summary generation" : "خۇلاسە يېزىۋاتقاندا جەريانىدا خاتالىق كۆرۈلدى", + "New file" : "يېڭى ھۆججەت", + "Blank" : "ئوچۇق", + "Error while creating file" : "ھۆججەت قۇرغاندا خاتالىق", + "Create and share a new file" : "يېڭى ھۆججەت قۇرۇش ۋە ئورتاقلىشىش", + "Name of the new file" : "يېڭى ھۆججەتنىڭ ئىسمى", + "Create file" : "ھۆججەت قۇرۇش", + "Someone is typing …" : "بىرەيلەن خەت يېزىۋاتىدۇ…", + "{user1} is typing …" : "{user1} يېزىۋاتىدۇ…", + "{user1} and {user2} are typing …" : "{user1} ۋە {user2} يېزىۋاتىدۇ…", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} ۋە {user3} يېزىۋاتىدۇ…", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}، {user2}، {user3} ھەمدە %n يېزىۋاتىدۇ","{user1}، {user2}، {user3} ھەمدە %n باشقىلار يېزىۋاتىدۇ"], + "Add more files" : "تېخىمۇ كۆپ ھۆججەت قوشۇڭ", + "Send" : "يوللا", + "In this conversation {user} can:" : "بۇ سۆھبەتتە {user} بولىدۇ:", + "Edit default permissions for participants in {conversationName}" : " {conversationName} غا قاتناشقۇچىلارنىڭ سۈكۈتتىكى ئىجازەتلىرىنى تەھرىرلەڭ", + "Start a call" : "تېلېفوننى باشلاڭ", + "Skip the lobby" : "لوبىدىن ئاتلاڭ", + "Can post messages and reactions" : "ئۇچۇر ۋە ئىنكاسلارنى يوللىيالايدۇ", + "Enable the microphone" : "مىكروفوننى قوزغىتىڭ", + "Enable the camera" : "كامېرانى قوزغىتىڭ", + "Share the screen" : "ئېكراننى ھەمبەھىرلەڭ", + "Update permissions" : "ئىجازەتلەرنى يېڭىلاش", + "Updating permissions" : "ئىجازەتلەرنى يېڭىلاش", + "No poll drafts" : "راي سىناش لايىھىسى يوق", + "There is no poll drafts yet saved for this conversation" : "بۇ سۆھبەت ئۈچۈن ھازىرغىچە ھېچقانداق بېلەت تاشلاش لايىھىسى ساقلانمىدى", + "Create poll in {name}" : "{name} نامىدا راي-سىناش قۇر", + "Create poll" : "راي سىناش", + "Error while importing poll" : "راي سىناشتا خاتالىق", + "Question" : "سوئال", + "Ask a question" : "سوئال سوراڭ", + "Import draft from file" : "ھۆججەتنى ھۆججەتتىن ئەكىرىڭ", + "Answers" : "جاۋاب", + "Answer {option}" : "جاۋاب {option}", + "Delete poll option" : "راي سىناش تاللانمىسىنى ئۆچۈرۈڭ", + "Add answer" : "جاۋاب قوشۇڭ", + "Settings" : "تەڭشەكلەر", + "Anonymous poll" : "نامسىز راي سىناش", + "Multiple answers" : "كۆپ جاۋاب", + "Save as draft" : "لايىھە سۈپىتىدە ساقلىۋېلىڭ", + "Export draft to file" : "ھۆججەتنى ھۆججەتكە چىقىرىش", + "You voted for this option" : "سىز بۇ تاللاشقا بېلەت تاشلىدىڭىز", + "End poll" : "راي سىناشنى ئاخىرلاشتۇرۇڭ", + "Change your vote" : "ئاۋازىڭىزنى ئۆزگەرتىڭ", + "Results" : "نەتىجە", + "Voted participants" : "بېلەت تاشلىغۇچىلار", + "Send a message to \"{roomName}\"" : "\"{roomName}\" غا ئۇچۇر ئەۋەتىڭ", + "Hide list of participants" : "قاتناشقۇچىلارنىڭ تىزىملىكىنى يوشۇرۇش", + "Show list of participants" : "قاتناشقۇچىلارنىڭ تىزىملىكىنى كۆرسىتىش", + "Assistance requested in {roomName}" : "{roomName} دا تەلەپ قىلىنغان ياردەم", + "The message was sent to \"{roomName}\"" : "بۇ ئۇچۇر \"{roomName}\" غا ئەۋەتىلگەن", + "Dismiss request for assistance" : "ياردەم ئىلتىماسىنى رەت قىلىش", + "Send message to room" : "ياتاققا ئۇچۇر ئەۋەتىڭ", + "Back to main room" : "ئاساسلىق ئۆيگە قايتىش", + "Back to your room" : "ئۆيىڭىزگە قايتىڭ", + "Message all rooms" : "بارلىق ئۆيلەرگە ئۇچۇر قىلىڭ", + "Start session" : "ئولتۇرۇشنى باشلاش", + "Start a call before you start a breakout room session" : "بۆسۈش ئۆيى ئولتۇرۇشنى باشلاشتىن بۇرۇن تېلېفوننى باشلاڭ", + "Stop session" : "يىغىننى توختىتىڭ", + "The message was sent to all breakout rooms" : "بۇ ئۇچۇر بارلىق بۆسۈش ئۆيلىرىگە ئەۋەتىلدى", + "Send a message to all breakout rooms" : "بارلىق بۆسۈش ئۆيلىرىگە ئۇچۇر ئەۋەتىڭ", + "Breakout rooms are not started" : "بۆسۈش ئۆيى باشلانمىدى", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "يۇقىرى ئىقتىدارلىق ئارقا ئۇچى بولمىغان تېلېفونلار ئۇلىنىش مەسىلىسىنى كەلتۈرۈپ چىقىرىشى ۋە ئۈسكۈنىلەرنىڭ يۈكلىنىشىنى كەلتۈرۈپ چىقىرىشى مۇمكىن. {linkstart}تېخىمۇ كۆپ ئۆگىنىڭ{linkend}", + "Talk setup incomplete" : "پاراڭنى تەڭشەش تۇلۇق ئەمەس", + "Disable lobby" : "لوبىنى چەكلەش", + "Settings for participant \"{user}\"" : "قاتناشقۇچىنىڭ تەڭشىكى \"{user}\"", + "Participant \"{user}\"" : "قاتناشقۇچى \"{user}\"", + "moderator" : "رىياسەتچى", + "bot" : "بوت", + "guest" : "مېھمان", + "Ringing …" : "ئۈزۈك…", + "Call rejected" : "تېلېفون رەت قىلىندى", + "{time} talking …" : "{time} پاراڭ…", + "{time} talking time" : "{time} پاراڭلىشىش ۋاقتى", + "Raised their hand" : "ئۇلارنىڭ قولىنى كۆتۈردى", + "Joined with video" : "سىنغا قوشۇلدى", + "Joined via phone" : "تېلېفون ئارقىلىق قوشۇلدى", + "Joined with audio" : "ئاۋاز بىلەن قوشۇلدى", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "بۇ تېكىست چوقۇم {maxLength} ھەرپتىن ئۇزۇن ياكى تەڭ بولۇشى كېرەك. سىزنىڭ ھازىرقى تېكىستىڭىز {charactersCount} ھەرپ ئۇزۇن.", + "Remove group and members" : "گۇرۇپپا ۋە ئەزالارنى چىقىرىۋېتىڭ", + "Remove team and members" : "گۇرۇپپا ۋە ئەزالارنى چىقىرىۋېتىڭ", + "Remove participant" : "قاتناشقۇچىنى ئېلىۋېتىڭ", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "بۇ سۆھبەتتىن «{displayName}» ۋە ئۇنىڭ ئەزالىرىنى ئۆچۈرمەكچىمۇ؟", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "بۇ سۆھبەتتىن «{displayName}» ۋە ئۇنىڭ ئەزالىرىنى ئۆچۈرمەكچىمۇ؟", + "Do you really want to remove {displayName} from this conversation?" : "بۇ سۆھبەتتىن {displayName} نى ئۆچۈرمەكچىمۇ؟", + "Notification was sent to {displayName}" : "ئۇقتۇرۇش {displayName} غا ئەۋەتىلدى", + "Could not send notification to {displayName}" : "{displayName} to غا ئۇقتۇرۇش ئەۋەتەلمىدى", + "Permissions granted to {displayName}" : "{displayName} غا بېرىلگەن ئىجازەت", + "Could not modify permissions for {displayName}" : "{displayName} ئىجازەتنامىسىنى ئۆزگەرتەلمىدى", + "Permissions removed for {displayName}" : "{displayName} ئۈچۈن رۇخسەت چىقىرىۋېتىلدى", + "Permissions set to default for {displayName}" : "ئىجازەتنامە {displayName} غا تەڭشەلدى", + "Phone number could not be hung up" : "تېلېفون نومۇرىنى ئېسىپ قويغىلى بولمايدۇ", + "Phone number could not be put on hold" : "تېلېفون نومۇرىنى توختىتىشقا بولمايدۇ", + "Phone number could not be muted" : "تېلېفون نومۇرىنى ئۆزگەرتكىلى بولمايدۇ", + "Phone number could not be unmuted" : "تېلېفون نومۇرىنى ئۆزگەرتكىلى بولمايدۇ", + "DTMF message could not be sent" : "DTMF ئۇچۇرى ئەۋەتىلمىدى", + "Phone number copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن تېلېفون نومۇرى", + "Phone number could not be copied" : "تېلېفون نومۇرىنى كۆچۈرگىلى بولمايدۇ", + "in the lobby" : "زالدا", + "Dial out phone" : "تېلېفوننى تېلېفون قىلىڭ", + "Hang up phone" : "تېلېفوننى ئېسىپ قويۇڭ", + "Move back to lobby" : "لوبىغا قايتىڭ", + "Move to conversation" : "سۆھبەتكە يۆتكەڭ", + "Dial-in PIN" : "نۇمۇر بۇراش PIN", + "Demote from moderator" : "رىياسەتچىدىن تۆۋەنلەش", + "Promote to moderator" : "رىياسەتچىگە تەشۋىق قىلىڭ", + "Resend invitation" : "تەكلىپنامىنى قايتۇرۇڭ", + "Send call notification" : "چاقىرىش ئۇقتۇرۇشى ئەۋەتىڭ", + "Dial out phone number" : "تېلېفون نومۇرىنى تېلىفۇن قىلىڭ", + "Resume call for phone number" : "تېلېفون نومۇرىغا تېلېفون قىلىشنى ئەسلىگە كەلتۈرۈش", + "Put phone number on hold" : "تېلېفون نومۇرىنى توختىتىڭ", + "Unmute phone number" : "تېلېفون نومۇرىنى بىكار قىلىڭ", + "Mute phone number" : "تېلېفون نومۇرى", + "Copy phone number" : "تېلېفون نومۇرىنى كۆچۈرۈڭ", + "Reset custom permissions" : "ئىختىيارى ئىجازەتنى ئەسلىگە كەلتۈرۈڭ", + "Grant all permissions" : "بارلىق ئىجازەتلەرنى بېرىڭ", + "Remove all permissions" : "بارلىق ئىجازەتلەرنى ئۆچۈرۈڭ", + "Also ban from this conversation" : "بۇ سۆھبەتتىن چەكلەڭ", + "Internal note (reason to ban)" : "ئىچكى خاتىرە (چەكلەش سەۋەبى)", + "Remove" : "ئۆچۈرۈڭ", + "Permissions modified for {displayName}" : "ئىجازەتنامە {displayName} غا ئۆزگەرتىلدى", + "Add users, groups or teams" : "ئىشلەتكۈچى ، گۇرۇپپا ياكى گۇرۇپپا قوشۇڭ", + "Add users or groups" : "ئىشلەتكۈچى ياكى گۇرۇپپا قوش", + "Add users or teams" : "ئىشلەتكۈچى ياكى گۇرۇپپا قوشۇڭ", + "Add users" : "ئىشلەتكۈچى قوشۇڭ", + "Add groups or teams" : "گۇرۇپپا ياكى گۇرۇپپا قوشۇڭ", + "Add groups" : "گۇرۇپپا قوشۇڭ", + "Add teams" : "گۇرۇپپا قوشۇڭ", + "Add other sources" : "باشقا مەنبەلەرنى قوشۇڭ", + "Add emails" : "ئېلېكترونلۇق خەت قوشۇڭ", + "Integrations" : "بىرىكتۈرۈش", + "Add federated users" : "فېدېراتسىيە ئىشلەتكۈچىلەرنى قوشۇڭ", + "Searching …" : "ئىزدەش…", + "Search for more users" : "تېخىمۇ كۆپ ئىشلەتكۈچىنى ئىزدەڭ", + "You can search or add participants via name, email, or Federated Cloud ID" : "ئىسىم ، ئېلېكترونلۇق خەت ياكى فېدېراتسىيە بۇلۇت كىملىكى ئارقىلىق قاتناشقۇچىلارنى ئىزدىسىڭىز ياكى قوشالايسىز", + "Search or add participants" : "قاتناشقۇچىلارنى ئىزدەڭ ياكى قوشۇڭ", + "Invitation was sent to {actorId}" : "تەكلىپنامە {actorId} غا ئەۋەتىلدى", + "An error occurred while adding the participants" : "قاتناشقۇچىلارنى قوشقاندا خاتالىق كۆرۈلدى", + "A new group conversation with selected participant will be created" : "تاللانغان قاتناشقۇچىلار بىلەن بىر گۇرۇپپا سۆھبىتى قۇرۇلىدۇ", + "Participants" : "قاتناشقۇچىلار", + "Pinned by a deleted user" : "بىر ئۆچۈرۋېتىلگەن ئىشلەتكۈچى مىخلىغان", + "Participants ({count})" : "قاتناشقۇچىلار ({count})", + "Open chat" : "پاراڭنى ئېچىڭ", + "You have new unread messages in the chat." : "پاراڭدا يېڭى ئوقۇلمىغان ئۇچۇرلار بار.", + "You have been mentioned in the chat." : "سىز پاراڭدا تىلغا ئېلىنغان.", + "Search messages" : "ئۇچۇرلارنى ئىزدە", + "Chat" : "پاراڭ", + "Details" : "تەپسىلاتى", + "Shared items" : "ئورتاق بەھرىلىنىدىغان بۇيۇملار", + "Search in {name}" : "{name}دا ئىزدە", + "Threads in {name}" : "{name} نامىدىكى يىپ", + "{actor} in {conversation}" : "{conversation} دىكى {actor}", + "Search messages …" : "ئۇچۇرلارنى ئىزدە...", + "Search options" : "ئىزدەش تاللانمىلىرى", + "From User" : "ئىشلەتكۈچىدىن", + "Since" : "بۇيان", + "Until" : "تاكى ھازىرغىچە", + "No results found" : "ھېچقانداق نەتىجە تېپىلمىدى", + "Load more results" : "تېخىمۇ كۆپ نەتىجىلەرنى يۈكلەڭ", + "Recent threads" : "يېقىنقى يىپلار", + "Projects" : "تۈر", + "No shared items" : "ئورتاق بەھرىلىنىدىغان تۈر يوق", + "Thread notifications" : "يىپ ئۇقتۇرۇشى", + "Thread actions" : "يىپ ھەركىتى", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "سۆھبەتكە ئۇلىنىش", + "No open conversations found" : "ئوچۇق سۆھبەت تېپىلمىدى", + "Either there are no open conversations or you joined all of them." : "ياكى ئوچۇق سۆھبەت يوق ياكى ئۇلارنىڭ ھەممىسىگە قوشۇلدىڭىز.", + "Check spelling or use complete words." : "ئىملانى تەكشۈرۈڭ ياكى تولۇق سۆز ئىشلىتىڭ.", + "Search conversations or users" : "پاراڭ ياكى ئىشلەتكۈچىنى ئىزدەڭ", + "Select conversation" : "سۆھبەتنى تاللاڭ", + "Number length is not valid" : "ساننىڭ ئۇزۇنلۇقى ئىناۋەتلىك ئەمەس", + "Region code is not valid" : "رايون كودى ئىناۋەتلىك ئەمەس", + "Number length is too short" : "ساننىڭ ئۇزۇنلۇقى بەك قىسقا", + "Number length is too long" : "ساننىڭ ئۇزۇنلۇقى بەك ئۇزۇن", + "Number is not valid" : "سان ئىناۋەتلىك ئەمەس", + "Phone numbers" : "تېلېفون نومۇرى", + "Display name: {name}" : "كۆرسىتىش ئىسمى: {name}", + "Edit display name" : "كۆرسىتىش نامىنى تەھرىرلەش", + "Display name (required)" : "كۆرسىتىش ئىسمى (مەجبۇرىي)", + "Save name" : "ئىسىمنى ساقلاڭ", + "Error while setting personal setting" : "شەخسىي تەڭشەكنى تەڭشەۋاتقاندا خاتالىق", + "Error while saving sounds setting" : "ئاۋاز تەڭشىكىنى ساقلاشتا خاتالىق", + "Compact conversations list" : "ئىخچام سۆھبەت تىزىملىكى", + "Play sounds when participants join or leave a call" : "قاتناشقۇچىلار قاتناشقاندا ياكى تېلېفوندىن ئايرىلغاندا ئاۋاز قويۇڭ", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "ئىشلەپچىقارغۇچىنىڭ تېخنىكىلىق چەكلىمىسى سەۋەبىدىن ھازىر iPhone ۋە iPad دا يوق", + "Notification settings" : "ئۇقتۇرۇش تەڭشىكى", + "Sounds for chat and call notifications" : "پاراڭ ھەمدە تېلىفۇن ئۇقتۇرۇشلىرىنىڭ ئاۋازى", + "Default language" : "كۆڭۈلدىكى تىل", + "Select location for attachments" : "قوشۇمچە ھۆججەتلەرنىڭ ئورنىنى تاللاڭ", + "Error while setting attachment folder" : "قوشۇمچە ھۆججەت قىسقۇچنى تەڭشەشتە خاتالىق", + "Error while setting read status privacy" : "ئوقۇش ھالىتىنىڭ مەخپىيەتلىكىنى تەڭشەشتە خاتالىق", + "Error while setting typing status privacy" : "خەت ھالىتى مەخپىيەتلىكىنى تەڭشەشتە خاتالىق", + "Error while setting default media state" : "سۈكۈتتىكى مېدىيا ھالىتىنى تەڭشىگەندە خاتالىق", + "Turn camera and microphone off by default" : "كامىرا بىلەن مىكروفۇننى سۈكۈتتە ئۆچۈر", + "Blur camera background by default" : "كامىرا ئارقا كۆرۈنۈشىنى سۈكۈتتە تۇتۇق قىل", + "Skip device preview before joining a call" : "چاقىرىققا كىرىشتىن بۇرۇن ئۈسكۈنە ئالدىن-كۆرسىتىشنى ئاتلا", + "Appearance & Sounds" : "كۆرۈنۈش & ئاۋاز", + "Privacy" : "مەخپىيەتلىك", + "Send read receipts" : "ئۇقۇغان تىلخەتنى يوللا", + "When off, all read statuses will be hidden" : "ئېتىلسە، بارلىق ئوقۇغانلىق ھالەتلىرى يۇشۇرۇلدۇ", + "Share typing status" : "يېزىۋاتقانلىق ھالىتىنى ئورتاقلاش", + "When off, all typing indicators will be hidden" : "ئېتىلسە، بارلىق يېزىۋاتقانلىق ئۇچۇرلىرى يۇشۇرۇلدۇ", + "Attachments folder" : "قوشۇمچە ھۆججەت قىسقۇچ", + "Toggle full screen" : "تولۇق ئېكراننى ئېچىڭ", + "Return to Home screen" : "باشبەتكە قايت", + "Search" : "ئىزدە", + "Shortcuts while in a chat" : "پاراڭلىشۋاتقاندىكى قىسقا يوللار", + "Focus the chat input" : "پاراڭلىشىشنى كىرگۈزۈڭ", + "Unfocus the chat input to use shortcuts" : "تېزلەتمە ئىشلىتىش ئۈچۈن پاراڭ كىرگۈزۈشنى بىكار قىلىڭ", + "Edit your last message" : "ئاخىرقى ئۇچۇرىڭىزنى تەھرىرلەڭ", + "Shortcuts while in a call" : "تېلېفون قىلغاندا تېزلەتمە", + "Camera on and off" : "كامېرا ئوچۇق ۋە تاقالغان", + "Microphone on and off" : "مىكروفون ئېچىش ۋە تاقاش", + "Raise or lower hand" : "قولىنى كۆتۈرۈڭ ياكى تۆۋەن قىلىڭ", + "Push to talk or push to mute" : "سۆزلەشكە ئىتتىرىش ياكى ئۈنسىز ھالەتكە كەلتۈرۈش", + "Zoom-in / zoom-out a screen share" : "ئېكراننى ئورتاقلىشىشنى كىچىكلەت / چوڭلات", + "Mouse wheel" : "مائۇس چاقى", + "Start call silently" : "ئۈن-تىنسىز تېلېفون قىلىشنى باشلاڭ", + "Start call" : "چاقىرىشنى باشلاڭ", + "End call" : "ئاخىرلىشىش تېلېفونى", + "This call has just ended" : "بۇ تېلېفون ئاخىرلاشتى", + "You will be able to join the call only after a moderator starts it." : "رىياسەتچى قوزغىغاندىن كېيىن ئاندىن تېلېفونغا قوشۇلالايسىز.", + "End call for everyone" : "ھەممەيلەنگە تېلېفون قىلىش", + "Starting the recording" : "خاتىرىلەشنى باشلاش", + "Recording" : "خاتىرىلەش", + "The call has been running for one hour." : "تېلېفون بىر سائەت داۋاملاشتى.", + "Cancel recording start" : "خاتىرىلەشنى باشلاشنى ئەمەلدىن قالدۇرۇڭ", + "Stop recording" : "خاتىرىلەشنى توختىتىڭ", + "Send a reaction" : "ئىنكاس قايتۇرۇڭ", + "React with {reaction}" : "{reaction}", + "All tasks done!" : "بارلىق ۋەزىپىلەر تاماملاندى!", + "_{done} of %n task_::_{done} of %n tasks_" : ["%n دىن {done} ۋەزىپە","%n دىن {done} ۋەزىپىلەر"], + "Add participants to this call" : "قاتناشقۇچىلارنى بۇ چاقىرىققا قوش", + "_%n participant in call_::_%n participants in call_" : ["چاقىرىقتا %n قاتناشقۇچى","چاقىرىقتا %n قاتناشقۇچى"], + "You are not allowed to enable screensharing" : "ئېكران ئېكرانىنى قوزغىتىشقا رۇخسەت قىلىنمايدۇ", + "No screensharing" : "ئېكران ئېكرانى يوق", + "Screensharing options" : "ئېكران ئورتاقلىشىش تاللانمىلىرى", + "Enable screensharing" : "ئېكراننى قوزغىتىشنى قوزغىتىڭ", + "Bad sent video and screen quality." : "ئەۋەتىلگەن سىن ۋە ئېكران سۈپىتى ناچار.", + "Bad sent screen quality." : "ئەۋەتىلگەن ئېكران سۈپىتى ناچار.", + "Bad sent video quality." : "ئەۋەتكەن سىن سۈپىتى ناچار.", + "Bad sent audio, video and screen quality." : "ئەۋەتىلگەن ئاۋاز ، سىن ۋە ئېكران سۈپىتى ناچار.", + "Bad sent audio and screen quality." : "ئەۋەتىلگەن ئاۋاز ۋە ئېكران سۈپىتى ناچار.", + "Bad sent audio and video quality." : "ئەۋەتكەن ئاۋاز ۋە سىن سۈپىتى ناچار.", + "Bad sent audio quality." : "ئەۋەتىلگەن ئاۋاز سۈپىتى ناچار.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ھەمبەھىرلىگەندە ئارقا كۆرۈنۈشنى ياكى سىننى چەكلەڭ.", + "Disable background blur" : "تەگلىك تۇتۇقلىقىنى چەكلەڭ", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلىۋاتقاندا سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار ئېكراننى كۆرەلمەسلىكى مۇمكىن.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى كۆرەلمەسلىكى مۇمكىن.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلغاندا ئارقا كۆرۈنۈشنى ياكى سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانى قىلىۋاتقاندا سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىپ ئېكراننى كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن ئېكران ئېكرانىنى چەكلەڭ.", + "Disable screenshare" : "ئېكران ئېكرانىنى چەكلەڭ", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن تەگلىك ياكى سىننى ئىناۋەتسىز قىلىڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ۋە كۆرەلمەسلىكى مۇمكىن. ۋەزىيەتنى ياخشىلاش ئۈچۈن سىننى چەكلەڭ.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "تور ئۇلىنىشىڭىز ياكى كومپيۇتېرىڭىز ئالدىراش ، باشقا قاتناشقۇچىلار سىزنى چۈشىنىشكە ئامالسىز قېلىشى مۇمكىن.", + "Screen sharing is not supported by your browser." : "ئېكران ئورتاقلىشىشنى توركۆرگۈڭىز قوللىمايدۇ.", + "Screen sharing requires the page to be loaded through HTTPS." : "ئېكراندىن ئورتاقلىشىش بۇ بەتنى HTTPS ئارقىلىق يۈكلەشنى تەلەپ قىلىدۇ.", + "Screensharing requires the page to be loaded through HTTPS." : "ئېكراندىن ئورتاقلىشىش بۇ بەتنى HTTPS ئارقىلىق يۈكلەشنى تەلەپ قىلىدۇ.", + "An error occurred while starting screensharing." : "ئېكراننى باشلىغاندا خاتالىق كۆرۈلدى.", + "Select virtual background" : "مەۋھۇم ئارقا-كۆرۈنۈش تاللا", + "Show your screen" : "ئېكرانىڭىزنى كۆرسىتىڭ", + "Stop screensharing" : "ئېكراننى توختىتىڭ", + "Mute others" : "باشقىلارنى تىللاڭ", + "Start recording" : "خاتىرىلەشنى باشلاڭ", + "Set up breakout rooms" : "بۆسۈش ئۆيى تەسىس قىلىڭ", + "Download attendance list" : "قاتنىشىش تىزىملىكىنى چۈشۈرۈڭ", + "Open Calendar" : "كالېندارنى ئېچىڭ", + "Remove participant {name}" : "قاتناشقۇچىنى ئۆچۈرۈڭ {name}", + "Would you like to delete this conversation?" : "سىز بۇ سۆھبەتنى ئۆچۈرمەكچىمۇ؟", + "Are you sure you want to delete this conversation?" : "بۇ سۆھبەتنى سىز راستىنلا ئۆچۈرمەكچىمۇ؟", + "Delete now" : "ھازىرلا ئۆچۈر", + "Keep" : "ساقلاڭ", + "Open dialpad" : "سۆزلىشىش تاختىسىنى ئېچىڭ", + "Select a region" : "رايون تاللاڭ", + "Local time: {time}" : "يەرلىك ۋاقىت:{time}", + "Search …" : "ئىزدەش…", + "Message without mention" : "تىلغا ئېلىنمىغان ئۇچۇر", + "Mention myself" : "ئۆزۈمنى تىلغا ئېلىڭ", + "Mention everyone" : "ھەممەيلەننى تىلغا ئېلىڭ", + "Select a conversation" : "سۆھبەتنى تاللاڭ", + "Select a mode" : "بىر ھالەتنى تاللاڭ", + "You do not have permissions to access this conversation." : "بۇ سۆھبەتنى زىيارەت قىلىش ھوقۇقىڭىز يوق.", + "Join a different conversation or start a new one." : "باشقا سۆھبەتكە قاتنىشىڭ ياكى يېڭى سۆھبەتنى باشلاڭ.", + "The conversation does not exist" : "سۆھبەت مەۋجۇت ئەمەس", + "Join a conversation or start a new one!" : "سۆھبەتكە قاتنىشىڭ ياكى يېڭى باشلاڭ!", + "Duplicate session" : "تەكرار يىغىن", + "Creating and joining a conversation with \"{userid}\"" : "\"{userid}\" بىلەن سۆھبەت قۇرۇش ۋە ئۇنىڭغا قاتنىشىش", + "Join a conversation or start a new one" : "سۆھبەتكە قاتنىشىڭ ياكى يېڭى باشلاڭ", + "Error while joining the conversation" : "سۆھبەتكە قاتناشقاندا خاتالىق", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud ئىشلەتكۈچى", + "User password" : "ئىشلەتكۈچى پارولى", + "Talk conversation" : "پاراڭلىشىش", + "Skip TLS verification" : "TLS دەلىللەشتىن ئاتلاڭ", + "Matrix server URL" : "Matrix مۇلازىمېتىر URL", + "User" : "ئىشلەتكۈچى", + "Matrix channel" : "ماترىتسا قانىلى", + "Mattermost server URL" : "ئەڭ مۇھىم مۇلازىمېتىر URL", + "Mattermost user" : "ئەڭ مۇھىم ئىشلەتكۈچى", + "Team name" : "گۇرۇپپا ئىسمى", + "Channel name" : "قانال ئىسمى", + "Rocket.Chat server URL" : "راكېتا. مۇلازىمېتىر URL", + "User name or email address" : "ئىشلەتكۈچى ئىسمى ياكى ئېلېكترونلۇق خەت ئادرېسى", + "Rocket.Chat channel" : "Rocket.Chat قانىلى", + "Zulip server URL" : "Zulip مۇلازىمېتىر URL", + "Bot user name" : "Bot ئىشلەتكۈچى ئىسمى", + "Bot API key" : "Bot API ئاچقۇچى", + "Zulip channel" : "Zulip قانىلى", + "API token" : "API بەلگىسى", + "Slack channel" : "Slack قانىلى", + "Server ID or name" : "مۇلازىمېتىر كىملىكى ياكى ئىسمى", + "Channel ID (prefixed with \"ID:\") or name" : "قانال ID (\"ID\" بىلەن باشلىندۇ) ياكى ئىسىم", + "Channel" : "قانال", + "Login" : "كىرىش", + "Chat ID" : "پاراڭ كىملىكى", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC مۇلازىمېتىر ئادرېسى (مەسىلەن chat.freenode.net:6667)", + "Nickname" : "تەخەللۇس", + "Connection password" : "ئۇلىنىش پارولى", + "IRC channel" : "IRC قانىلى", + "Channel password" : "قانال پارولى", + "NickServ nickname" : "NickServ لەقىمى", + "NickServ password" : "NickServ پارولى", + "Use TLS" : "TLS نى ئىشلىتىڭ", + "Use SASL" : "SASL نى ئىشلىتىڭ", + "Tenant ID" : "ئىجارە ئالغۇچى كىملىكى", + "Client ID" : "خېرىدار ID", + "Team ID" : "گۇرۇپپا كىملىكى", + "Thread ID" : "تېما كىملىكى", + "XMPP/Jabber server URL" : "XMPP / Jabber مۇلازىمېتىر URL", + "MUC server URL" : "MUC مۇلازىمېتىر ئادرېسى", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "مىخلانغان ئۇچۇرلار", + "Media" : "كۆپ-ۋاستە", + "Polls" : "راي سىناش", + "Deck cards" : "پالۋان كارتىلىرى", + "Voice messages" : "ئاۋازلىق ئۇچۇرلار", + "Locations" : "ئورۇنلار", + "Call recordings" : "چاقىرىش خاتىرىسى", + "Audio" : "ئاۋاز", + "Show all pinned messages" : "بارلىق مىخلانغان ئۇچۇرلارنى كۆرسەت", + "Show all media" : "بارلىق تاراتقۇلارنى كۆرسەت", + "Show all files" : "بارلىق ھۆججەتلەرنى كۆرسەت", + "Show all polls" : "بارلىق راي سىناشلارنى كۆرسەت", + "Show all deck cards" : "بارلىق كارتا كارتىلىرىنى كۆرسەت", + "Show all voice messages" : "بارلىق ئاۋازلىق ئۇچۇرلارنى كۆرسەت", + "Show all locations" : "بارلىق ئورۇنلارنى كۆرسەت", + "Show all call recordings" : "بارلىق چاقىرىش خاتىرىسىنى كۆرسەت", + "Show all audio" : "بارلىق ئاۋازنى كۆرسەت", + "Show all other" : "باشقىلىرىنى كۆرسەت", + "Follow conversation settings" : "سۆھبەت تەڭشەكلىرىگە ئەگەش", + "Group" : "گۇرۇپپا", + "Team" : "ئەتىرەت", + "You reconnected to the call" : "سىز تېلېفونغا قايتا ئۇلاندىڭىز", + "{actor} reconnected to the call" : "{actor} تېلېفونغا قايتا ئۇلاندى", + "You added {user0} and {user1}" : "سىز {user0} ۋە {user1} added نى قوشتىڭىز", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى قوشتىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى قوشتىڭىز"], + "An administrator added you and {user0}" : "باشقۇرغۇچى سىزنى ۋە {user0} نى قوشتى", + "{actor} added you and {user0}" : "{actor} سىزنى ۋە {user0} نى قوشتى", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "An administrator added {user0} and {user1}" : "باشقۇرغۇچى {user0} ۋە {user1} added نى قوشتى", + "{actor} added {user0} and {user1}" : "{actor} قوشۇلدى {user0} ۋە {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى","{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى قوشتى"], + "You removed {user0} and {user1}" : "{user0} ۋە {user1} نى ئۆچۈردىڭىز", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى چىقاردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى چىقاردىڭىز"], + "An administrator removed you and {user0}" : "باشقۇرغۇچى سىزنى ۋە {user0} نى ئېلىۋەتتى", + "{actor} removed you and {user0}" : "{actor} سىزنى ۋە {user0} نى ئېلىۋەتتى", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","{actor} سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "An administrator removed {user0} and {user1}" : "باشقۇرغۇچى {user0} ۋە {user1} نى ئۆچۈرۈۋەتتى", + "{actor} removed {user0} and {user1}" : "{actor} چىقىرىۋېتىلدى {user0} ۋە {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","بىر باشقۇرغۇچى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى","{actor} سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى چىقىرۋەتتى"], + "You and {user0} joined the call" : "سىز ۋە {user0} چاقىرىققا قوشۇلدىڭىز", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىققا قاتناشتى","سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىققا قاتناشتى"], + "{user0} and {user1} joined the call" : "{user0} ۋە {user1} چاقىرىققا قوشۇلدى", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىققا قاتناشتى","{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىققا قاتناشتى"], + "You and {user0} left the call" : "سىز ۋە {user0} تېلېفوندىن ئايرىلدى", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىقتىن ئايرىلدى","سىز {user0} ھمدە يەنە %n قاتناشقۇچى چاقىرىقتىن ئايرىلدى"], + "{user0} and {user1} left the call" : "{user0} ۋە {user1} تېلېفوندىن ئايرىلدى", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىقتىن ئايرىلدى","{user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلار چاقىرىقتىن ئايرىلدى"], + "You promoted {user0} and {user1} to moderators" : "سىز {user0} ۋە {user1} نى رىياسەتچىگە ئۆستۈردىڭىز", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردىڭىز"], + "An administrator promoted you and {user0} to moderators" : "باشقۇرغۇچى سىزنى ۋە {user0} نى رىياسەتچىگە ئۆستۈردى", + "{actor} promoted you and {user0} to moderators" : "{actor} you سىزنى ۋە {user0} mod رىياسەتچىلەرگە ئۆستۈردى", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى مۇرەسسە قىلغۇچىلىققا ئۆستۈردى"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى","{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى"], + "An administrator promoted {user0} and {user1} to moderators" : "باشقۇرغۇچى باشقۇرغۇچىغا {user0} ۋە {user1} نى ئۆستۈردى", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} باشقۇرغۇچىغا {user0} ۋە {user1} نى ئۆستۈردى", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىككە ئۆستۈردى","بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىككە ئۆستۈردى"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى","{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىگە ئۆستۈردى"], + "You demoted {user0} and {user1} from moderators" : "رىياسەتچىلەردىن {user0} ۋە {user1} نى چۈشۈردىڭىز", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردىڭىز","سىز {user0}، {user1} ھەمدە باشقا %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردىڭىز"], + "An administrator demoted you and {user0} from moderators" : "باشقۇرغۇچى سىزنى ۋە {user0} نى رىياسەتچىلىكتىن چۈشۈردى", + "{actor} demoted you and {user0} from moderators" : "{actor} سىزنى ۋە {user0} رىياسەتچىلىكتىن چۈشۈردى", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى","بىر باشقۇرغۇچى سىزنى، {user0} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى","{actor} سىزنى {user0} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى"], + "An administrator demoted {user0} and {user1} from moderators" : "باشقۇرغۇچى باشقۇرغۇچىدىن {user0} ۋە {user1} نى چۈشۈردى", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} رىياسەتچىلەردىن {user0} ۋە {user1} نى چۈشۈردى", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى","بىر باشقۇرغۇچى سىزنى، {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىنى رىياسەتچىلىكتىن چۈشۈردى"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى","{actor} سىزنى {user0}، {user1} ھەمدە يەنە %n قاتناشقۇچىلارنى رىياسەتچىلىكتىن چۈشۈردى"], + "You:" : "سىز:", + "You: {lastMessage}" : "سىز: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(تەھرىرلىگەن)", + "(edited by a deleted user)" : "(ئۆچۈرۈلگەن ئىشلەتكۈچى تەھرىرلىگەن)", + "(edited by {moderator})" : "({moderator} تەرىپىدىن تەھرىرلىگەن)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "سىز باشقا كۆزنەك ياكى ئۈسكۈنىدە ئاكتىپ يىغىن ئاچقاندا سۆھبەتكە قاتناشماقچى بولۇۋاتىسىز. بۇنى Nextcloud Talk قوللىمايدۇ. نېمە قىلماقچى؟", + "Leave this page" : "بۇ بەتنى قالدۇرۇڭ", + "Join here" : "بۇ يەرگە قوشۇلۇڭ", + "Deck card has been posted to {conversation}" : "پالۋان كارتىسى {conversation} يوللاندى", + "An error occurred while posting deck card to conversation" : "تاختاي كارتىسىنى چاپلاۋاتقاندا بىر خاتالىق كۆرۈلدى", + "Post to a conversation" : "بىر سۆھبەتكە يوللا", + "Post to conversation" : "سۆھبەتكە يوللاڭ", + "The recording failed. Please contact your administrator." : "خاتىرىلەش مەغلۇپ بولدى. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Location has been posted to {conversation}" : "ئورنى {conversation} يوللاندى", + "An error occurred while posting location to conversation" : "ئورۇننى بىر سۆھبەتكە يوللاۋاتقاندا بىر خاتالىق كۆرۈلدى", + "Share to a conversation" : "بىر سۆھبەتكە ئورتاقلىشىڭ", + "Share to conversation" : "سۆھبەتكە ئورتاقلىشىڭ", + "In conversation" : "سۆھبەتتە", + "Search in conversation: {conversation}" : "سۆھبەتتە ئىزدەش: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "تەلىپىڭىز ھازىرچە رەھىمسىز كۈچ قوغداش سەۋەبىدىن ئىتتىرىلدى", + "Error while clearing conversation history" : "سۆھبەت تارىخىنى تازىلاش جەريانىدا خاتالىق", + "Error occurred while allowing guests" : "مېھمانلارغا يول قويغاندا خاتالىق كۆرۈلدى", + "Error occurred while disallowing guests" : "مېھمانلارنى رەت قىلغاندا خاتالىق كۆرۈلدى", + "Error occurred when restricting the conversation to moderator" : "رىياسەتچى بىلەن سۆھبەتنى چەكلىگەندە خاتالىق كۆرۈلدى", + "Error occurred when opening the conversation to everyone" : "سۆھبەتنى كۆپچىلىككە ئاچقاندا خاتالىق كۆرۈلدى", + "Conversation password has been saved" : "سۆھبەت پارولى ساقلاندى", + "Conversation password has been removed" : "سۆھبەت پارولى ئۆچۈرۈلدى", + "Error occurred while saving conversation password" : "پاراڭ پارولىنى ساقلىغاندا خاتالىق كۆرۈلدى", + "Call recording is starting." : "تېلېفون خاتىرىلەش باشلىنىۋاتىدۇ.", + "Call recording stopped while starting." : "قوزغالغاندا تېلېفون خاتىرىلەش توختىتىلدى.", + "Call recording stopped. You will be notified once the recording is available." : "تېلېفون خاتىرىلەش توختىتىلدى. خاتىرىلەنگەندىن كېيىن سىزگە ئۇقتۇرۇلىدۇ.", + "Conversation picture set" : "سۆھبەت رەسىملىرى", + "Conversation picture deleted" : "سۆھبەت رەسىمى ئۆچۈرۈلدى", + "Could not delete the conversation picture" : "سۆھبەت رەسىمىنى ئۆچۈرەلمىدى", + "Could not remove the automatic expiration" : "ئاپتۇماتىك مۇددەتنى ئۆچۈرەلمىدى", + "Could not post message: {errorMessage}" : "ئۇچۇر يوللىيالمىدى: {errorMessage}", + "Participant is banned successfully" : "قاتناشقۇچى مۇۋەپپەقىيەتلىك چەكلەنگەن", + "Error while banning the participant" : "قاتناشقۇچىنى چەكلىگەندە خاتالىق", + "An error occurred while fetching the participants" : "قاتناشقۇچىلارنى ئەكەلگەندە خاتالىق كۆرۈلدى", + "Could not send invitation to {actorId}" : "{actorId} to غا تەكلىپ ئەۋەتەلمىدى", + "Invitations sent" : "تەكلىپنامە ئەۋەتىلدى", + "Error occurred when sending invitations" : "تەكلىپنامە ئەۋەتكەندە خاتالىق كۆرۈلدى", + "Failed to join the conversation." : "سۆھبەتكە قاتنىشالمىدى", + "An error occurred while creating breakout rooms" : "بۆسۈش ئۆيى قۇرغاندا خاتالىق كۆرۈلدى", + "An error occurred while re-ordering the attendees" : "يىغىنغا قاتناشقانلارنى قايتا زاكاز قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while deleting breakout rooms" : "بۆسۈش ئۆيلىرىنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "An error occurred while starting breakout rooms" : "بۆسۈش ئۆيلىرىنى باشلىغاندا خاتالىق كۆرۈلدى", + "An error occurred while stopping breakout rooms" : "بۆسۈش ئۆيلىرىنى توختاتقاندا خاتالىق كۆرۈلدى", + "An error occurred while sending a message to the breakout rooms" : "بۆسۈش ئۆيىگە ئۇچۇر ئەۋەتكەندە خاتالىق كۆرۈلدى", + "An error occurred while requesting assistance" : "ياردەم تەلەپ قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while resetting the request for assistance" : "ياردەم ئىلتىماسىنى ئەسلىگە كەلتۈرۈشتە خاتالىق كۆرۈلدى", + "An error occurred while joining breakout room" : "بۆسۈش ئۆيىگە قوشۇلغاندا خاتالىق كۆرۈلدى", + "Failed to rename the thread" : "بۇ يىپنىڭ نامىنى ئۆزگەرتەلمىدى", + "Error fetching upcoming events" : "كىلىدىغان پائالىيەتلەرنى چۈشۈرۈش خاتالىقى", + "Error fetching upcoming reminders" : "كىلىدىغان ئەسكەرتمىلەرنى چۈشۈرۈش خاتالىقى", + "An error occurred while accepting an invitation" : "تەكلىپنى قوبۇل قىلغاندا خاتالىق كۆرۈلدى", + "An error occurred while rejecting an invitation" : "تەكلىپنى رەت قىلغاندا خاتالىق كۆرۈلدى", + "{guest} (guest)" : "{guest} (مېھمان)", + "Poll draft has been saved" : "راي سىناش لايىھىسى ساقلاندى", + "An error occurred while saving the draft" : "لايىھەنى ساقلاۋاتقاندا خاتالىق كۆرۈلدى", + "An error occurred while submitting your vote" : "ئاۋازىڭىزنى تاپشۇرغاندا خاتالىق كۆرۈلدى", + "An error occurred while ending the poll" : "بېلەت تاشلاش ئاخىرلاشقاندا خاتالىق كۆرۈلدى", + "An error occurred while deleting the poll draft" : "بېلەت تاشلاش لايىھىسىنى ئۆچۈرگەندە خاتالىق كۆرۈلدى", + "Poll \"{name}\" was created by {user}. Click to vote" : "راي سىناش \"{name}\" {user} تەرىپىدىن قۇرۇلدى. بېلەت تاشلاش ئۈچۈن چېكىڭ", + "Failed to add reaction" : "ئىنكاس قوشالمىدى", + "Failed to remove reaction" : "ئىنكاسنى ئۆچۈرەلمىدى", + "Error while uploading file \"{fileName}\"" : "\"{fileName}\" ھۆججىتىنى يۈكلەۋاتقاندا خاتالىق", + "Not enough free space to upload file \"{fileName}\"" : "\"{fileName}\" ھۆججىتىنى يۈكلەشكە يېتەرلىك بوشلۇق يوق", + "You are not allowed to share files" : "ھۆججەتلەرنى ئورتاقلىشىڭىزغا رۇخسەت قىلىنمايدۇ", + "Error while sharing file" : "ھۆججەتنى ھەمبەھىرلەشتە خاتالىق", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "سىز ئىشلىتىۋاتقان توركۆرگۈچ Nextcloud Talk تەرىپىدىن تولۇق قوللىمايدۇ. Mozilla Firefox ، Microsoft Edge ، Google Chrome ، Opera ياكى Apple Safari نىڭ ئەڭ يېڭى نەشرىنى ئىشلىتىڭ.", + "_In %n hour_::_In %n hours_" : ["%n سائەتتە","%n سائەتتە"], + "_%n minute _::_%n minutes_" : ["%n مىنۇتتا","%n مىنۇتتا"], + "In {hours} and {minutes}" : "{hours} ۋە {minutes}", + "_In %n minute_::_In %n minutes_" : ["%n مىنۇتتا","%n مىنۇتتا"], + "Later today – {timeLocale}" : "كېيىن بۈگۈن - {timeLocale}", + "Set time for later today" : "ۋاقىتنى بۈگۈنكى كىيىنرەك ۋاقىتقا بېكىت", + "Tomorrow – {timeLocale}" : "ئەتە - {timeLocale}", + "Set time for tomorrow" : "ۋاقىتنى ئەتىگە بېكىت", + "This weekend – {timeLocale}" : "بۇ ھەپتە ئاخىرى - {timeLocale}", + "Set time for this weekend" : "ۋاقىتنى بۇ ھەپتىگە بېكىت", + "Next week – {timeLocale}" : "كېلەر ھەپتە - {timeLocale}", + "Set time for next week" : "ۋاقىتنى كىيىنكى ھەپتىگە بېكىت", + "Conversation link copied to clipboard" : "چاپلاش تاختىسىغا كۆچۈرۈلگەن سۆھبەت ئۇلىنىشى", + "The link could not be copied" : "ئۇلانمىنى كۆچۈرگىلى بولمايدۇ", + "Error while parsing a PROPFIND error" : "PROPFIND خاتالىقىنى تەھلىل قىلغاندا خاتالىق", + "Sending signaling message has failed" : "سىگنال ئۇچۇرى ئەۋەتىش مەغلۇپ بولدى", + "Lost connection to signaling server. Trying to reconnect." : "سىگنال مۇلازىمىتىرىغا ئۇلىنىش يوقاپ كەتتى. قايتا ئۇلىماقچى بولۇۋاتىدۇ.", + "Lost connection to signaling server." : "سىگنال مۇلازىمىتىرىغا ئۇلىنىش يوقاپ كەتتى.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "سەپلىمە سىگنال مۇلازىمېتىرى بۇ نەشرىدىكى Talk بىلەن ماسلىشىش ئۈچۈن يېڭىلىنىشى كېرەك. باشقۇرغۇچىڭىز بىلەن ئالاقىلىشىڭ.", + "Please restart the app." : "بۇ ئەپنى قايتا قوزغىتىڭ.", + "Please reload the page." : "بۇ بەتنى قايتا يۈكلەڭ.", + "Please try to restart the app." : "بۇ ئەپنى قايتا قوزغىتىپ سىناپ بېقىڭ.", + "Please try to reload the page." : "بۇ بەتنى قايتا يۈكلەپ سىناپ بېقىڭ", + "Do not disturb" : "ئاۋارە قىلماڭ", + "Away" : "يىراق", + "Microphone {number}" : "مىكروفون {number}", + "Camera {number}" : "كامېرا {number}", + "Speaker {number}" : "سۆزلىگۈچى {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "ئۈنسىز ھالەتتە پاراڭلاشقاندەك قىلىسىز ، باشقىلارنىڭ گېپىنى ئاڭلىشى ئۈچۈن ئۆزىڭىزنى تىللاڭ", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "كەم دېگەندە بىر قاتناشقۇچى بىلەن ئۇلىنىش قۇرالمىدى. سىنارىيەڭىز ئۈچۈن TURN مۇلازىمېتىرى لازىم بولۇشى مۇمكىن. باشقۇرغۇچىڭىزدىن تۆۋەندىكى {linkstart} بۇ ھۆججەت {linkend} نى تەڭشەشنى تەلەپ قىلىڭ.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "بۇ مۆلچەردىكىدىن ئۇزۇنراق ۋاقىت كېتىۋاتىدۇ. ئاخبارات ئىجازىتى ئاللىقاچان بېرىلگەنمۇ (ياكى رەت قىلىنغان)؟ ئەگەر شۇنداق بولسا ئاۋاز ۋە سىن مەغلۇپ بولغانلىقتىن تور كۆرگۈچىڭىزنى قايتا قوزغىتىڭ", + "Access to microphone & camera is only possible with HTTPS" : "مىكروفون ۋە كامېراغا ئېرىشىش پەقەت HTTPS ئارقىلىقلا مۇمكىن", + "Please move your setup to HTTPS" : "تەڭشەكلىرىڭىزنى HTTPS غا يۆتكەڭ", + "Access to microphone & camera was denied" : "مىكروفون ۋە كامېراغا ئېرىشىش رەت قىلىندى", + "WebRTC is not supported in your browser" : "تور كۆرگۈچىڭىزدە WebRTC قوللىمايدۇ", + "Please use a different browser like Firefox or Chrome" : "Firefox ياكى Chrome غا ئوخشاش باشقا توركۆرگۈچ ئىشلىتىڭ", + "Error while accessing microphone & camera" : "مىكروفون ۋە كامېرانى زىيارەت قىلغاندا خاتالىق", + "%s Talk on your mobile devices" : "%s كۆچمە ئۈسكۈنىڭىزدە سۆزلەڭ", + "Join conversations at any time, anywhere, on any device." : "ھەر قانداق ۋاقىتتا ، ھەر قانداق جايدا ، ھەرقانداق ئۈسكۈنىدە سۆھبەتكە قاتنىشىڭ.", + "Android app" : "ئاندىرويىد دېتالى", + "iOS app" : "iOS ئەپ", + "__language_name__" : "ئۇيغۇرچە", + "Webhook Demo" : "Webhook كۆرگەزمىسى", + "Call summary (%s)" : "چاقىرىش خۇلاسىسى (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "چاقىرىش خۇلاسىسى بوت تېلېفوندىن كېيىن بارلىق قاتناشقۇچىلار ۋە تىزىملىكتىكى ۋەزىپىلەرنى كۆرسىتىپ بەرگەندىن كېيىن ئومۇمىي ئۇچۇر يوللايدۇ", + "Tasks" : "ۋەزىپە", + "Notes" : "ئىزاھات", + "Reports" : "دوكلات", + "Decisions" : "قارار", + "Agenda" : "كۈن تەرتىپى", + "Call summary" : "چاقىرىش خۇلاسىسى", + "Call summary - {title}" : "چاقىرىش خۇلاسىسى - {title}", + "Talk conversation for event" : "پائالىيەتنىڭ پاراڭ سۆھپىتى", + "Client Push is installed, this improves the performance of desktop clients." : "Client Push ئورنىتىلغان بولۇپ، بۇ ئۈستەل يۈزى خېرىدارلىرىنىڭ ئىقتىدارىنى ياخشىلايدۇ.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} ئورنىتىلمىغان، بۇ ئۈستەل يۈزى خېرىدارلىرىنى ئىشلەتكەندە ئىقتىدار مەسىلىسىنى كەلتۈرۈپ چىقىرىشى مۇمكىن.", + "Next meeting" : "كىيىنكى يىغىن", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "كالېندارىڭىزدىن يىغىن پىلانلاڭ. بۇ يەردە كۆرسىتىلىشى ئۈچۈن سۆھبەت سۆھبىتىنى ئورۇن قىلىپ بەلگىلەش كېرەك.", + "Join conversations from remote Nextcloud servers" : "يىراقتىكى Nextcloud مۇلازىمېتىرلىرىدىكى سۆھبەتكە قاتنىشىڭ", + "Your default media state has been saved" : "سۈكۈتتىكى مېدىيا ھالىتىڭىز ساقلاندى", + "Set reminder for later today" : "بۈگۈنگە ئەسكەرتىش بەلگىلەڭ", + "Set reminder for tomorrow" : "ئەتە ئۈچۈن ئەسكەرتىش بەلگىلەڭ", + "Set reminder for this weekend" : "بۇ ھەپتە ئاخىرىدا ئەسكەرتىش بەلگىلەڭ", + "Set reminder for next week" : "كېلەر ھەپتە ئەسكەرتىش بەلگىلەڭ", + "Generate summary" : "خۇلاسە ياز", + "Open poll • You voted already" : "ئوچۇق راي سىناش • سىز ئاللىبۇرۇن بېلەت تاشلىدىڭىز", + "Open poll • Click to vote" : "ئوچۇق راي سىناش • بېلەت تاشلاش ئۈچۈن چېكىڭ", + "Poll • Ended" : "راي سىناش • ئاخىرلاشتى", + "Talk recording from {time} ({conversation})" : "{time} ({conversation}) دىن سۆز خاتىرىلەش", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["راي-سىناش نەتىنجىسى • %n بېلەت","راي-سىناش نەتىنجىسى • %n بېلەت"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["راي-سىناشنى ئېچىش • %n بېلەت","راي-سىناشنى ئېچىش • %n بېلەت"], + "Submit vote" : "بېلەت تاشلاڭ", + "Your privacy setting has been saved" : "مەخپىيەتلىكىڭىز ساقلاندى", + "Your personal setting has been saved" : "شەخسىي تەڭشىكىڭىز ساقلاندى", + "Failed to save sounds setting" : "ئاۋاز تەڭشىكىنى ساقلىيالمىدى", + "Sounds setting saved" : "ئاۋاز تەڭشىكى ساقلاندى", + "Always shown if recording consent is required" : "ئەگەر خاتىرلەش ماقۇللۇقى تەلەپ قىلىنسا ھەر-دائىم كۆرسىتىلىدۇ", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk يېڭىلاندى ، سىز پاراڭنى باشلىيالمايسىز ياكى قاتنىشالمايسىز.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "سىز باشقا كۆزنەك ياكى ئۈسكۈنىدە سۆھبەتكە قاتناشتىڭىز. بۇنى Nextcloud Talk قوللىمايدۇ ، شۇڭا بۇ يىغىن يېپىلدى.", + "Nextcloud Talk was updated." : "Nextcloud پاراڭ يېڭىلاندى.", + "Nextcloud is in maintenance mode." : "Nextcloud ئاسراش ھالىتىدە", + "Nextcloud Talk Federation was updated." : "Nextcloud پاراڭلىشىش بىرلەشمىسى يېڭىلاندى." +},"pluralForm" :"nplurals=2; plural=(n != 1);" +} \ No newline at end of file diff --git a/l10n/uk.js b/l10n/uk.js new file mode 100644 index 0000000..34d99b2 --- /dev/null +++ b/l10n/uk.js @@ -0,0 +1,2126 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "розмова", + "(Duration %s)" : "(Тривалість %s)", + "You attended a call with {user1}" : "Ви були на дзвінку з {user1}", + "_%n guest_::_%n guests_" : ["%n гість","%n гостя","%n гостей","%n гостей"], + "You attended a call with {user1} and {user2}" : "Ви були на дзвінку з {user1} і {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ви були на дзвінку з {user1}, {user2} і {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ви були на дзвінку з {user1}, {user2}, {user3} і {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ви були на дзвінку з {user1}, {user2}, {user3}, {user4} і {user5}", + "_%n other_::_%n others_" : ["%nінший","%nінших","%n інших","%n інших"], + "{actor} invited you to {call}" : "{actor} запросив вас на {call}", + "You were invited to a conversation or had a call" : "Вас запросили на розмову або вам подзвонили", + "Other activities" : "Інші події", + "Talk" : "Розмови", + "Guest" : "Гість", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Ласкаво просимо до Nextcloud Talk!\nУ цій розмові ви дізнаєтесь про нові функції, доступні в Nextcloud Talk.", + "## New in Talk %s" : "Нове в застосунку Talk версії %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "— Microsoft Edge і Safari тепер можна використовувати для участі в аудіо- та відеодзвінках", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "— Розмови «один на один» тепер постійні й більше не можуть бути випадково перетворені на групові. Крім того, коли один із учасників залишає розмову, розмова більше не видаляється автоматично. Лише якщо обидва учасники виходять, розмова видаляється з сервера", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Тепер ви можете повідомити всіх учасників, написавши \"@all\" у чаті", + "- With the \"arrow-up\" key you can repost your last message" : "- За допомогою клавіші зі стрілкою вгору ви можете повторно розмістити своє останнє повідомлення", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk тепер може мати команди, надішліть \"/help\" як повідомлення чату, щоб дізнатися, чи ваш адміністратор налаштував деякі", + "- With projects you can create quick links between conversations, files and other items" : "- За допомогою проектів ви можете створювати швидкі посилання між розмовами, файлами та іншими елементами", + "- You can now mention guests in the chat" : "- Тепер ви можете згадувати гостей у чаті", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "Дозволити гостям приєднуватися через посилання", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Тепер ви можете безпосередньо відповідати на повідомлення, надаючи іншим користувачам більше інформації про ваше повідомлення", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Пошук розмов і учасників тепер також фільтруватиме ваші наявні розмови, що полегшить пошук попередніх розмов", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Після того як буде увімкнено застосунок \"Кола\", ви зможете додавати власні групи користувачів до розмов", + "- Check out the new grid and call view" : "- Перегляньте нову сітку та вигляд викликів", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Тепер ви можете завантажувати та перетягувати файли прямо зі свого пристрою в чат", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Спільні файли тепер відкриваються безпосередньо в поданні чату у застосунку перегляду", + "- You can now search for chats and messages in the unified search in the top bar" : "- Тепер ви можете шукати чати та повідомлення в уніфікованому пошуку на верхній панелі", + "- Spice up your messages with emojis from the emoji picker" : "- Доповніть ваші повідомлення - додайте емоційки до тексту", + "- You can now change your camera and microphone while being in a call" : "- Тепер ви можете змінити камеру та мікрофон під час розмови", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Надайте своїм розмовам певний контекст за допомогою опису та відкрийте його, щоб користувачі, які ввійшли в систему, могли знайти його та приєднатися", + "- See a read status and send failed messages again" : "- Перегляньте статус прочитання та знову надішліть повідомлення, які не вдалося надіслати", + "- Raise your hand in a call with the R key" : "- Підніміть руку під час виклику за допомогою клавіші R", + "- Join the same conversation and call from multiple devices" : "- Приєднуйтесь до однієї розмови та телефонуйте з кількох пристроїв", + "- Send voice messages, share your location or contact details" : "- Надсилайте голосові повідомлення, діліться власним місцем розташування або контактними даними", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Додайте групи до розмови, і нові учасники групи будуть автоматично додані як учасники", + "- A preview of your audio and video is shown before joining a call" : "- Попередній перегляд аудіо та відео відображається перед приєднанням до виклику", + "- You can now blur your background in the newly designed call view" : "- Тепер ви можете розмити фон у новому режимі перегляду викликів", + "- Moderators can now assign general and individual permissions to participants" : "— Модератори тепер можуть призначати загальні та індивідуальні дозволи учасникам", + "- You can now react to chat messages" : "- Тепер ви можете відповідати на повідомлення чату", + "- In the sidebar you can now find an overview of the latest shared items" : "- На бічній панелі тепер ви можете знайти огляд останніх спільних елементів", + "- Use a poll to collect the opinions of others or settle on a date" : "- Використовуйте опитування, щоб зібрати думки інших або домовитися про побачення", + "- Configure an expiration time for chat messages" : "- Налаштуйте термін дії повідомлень чату", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Починайте дзвінки без сповіщення інших під час великих розмов. Ви можете надсилати індивідуальні сповіщення про виклик, щойно він розпочався.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Надсилайте повідомлення в чаті без сповіщення одержувачів, якщо це не є терміновим", + "- Emojis can now be autocompleted by typing a \":\"" : "- Емодзі тепер можна автозаповнювати, ввівши \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Пов'язуйте різні об'єкти з використанням асистенту розумного вибору, для цього просто введіть \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модератори тепер можуть створювати окремі кімнати (потрібен високопродуктивний бекенд)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Дзвінки тепер можна записувати (потрібен Високопродуктивний бекенд)", + "- Conversations can now have an avatar or emoji as icon" : "- Тепер у розмовах можна поставити аватарку або емодзі як іконку", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- На додаток до розмитого фону у відеодзвінках тепер доступні віртуальні фони", + "- Reactions are now available during calls" : "- Реакції тепер доступні під час дзвінка", + "- Typing indicators show which users are currently typing a message" : "- Індикатори набору тексту показують, які користувачі в даний момент набирають повідомлення", + "- Groups can now be mentioned in chats" : "- Групи тепер можна згадувати в чатах", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Записи дзвінків автоматично транскрибуються, якщо зареєстровано застосунок постачальника послуг з транскрибування", + "- Chat messages can be translated if a translation provider app is registered" : "- Повідомлення чату можна перекладати, якщо зареєстровано застосунок перекладу", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** розмітку тепер можна використовувати в повідомленнях _чату_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Для реалізації ботів тепер доступні веб-хуки. Дивіться документацію для отримання додаткової інформації https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Встановіть нагадування в повідомленні чату, щоб пізніше знову отримати сповіщення ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Використовуйте розмову **Нотатки для себе**, щоб робити нотатки та обмінюватися інформацією між своїми пристроями", + "- Captions allow to send a message with a file at the same time" : "- Підписи дозволяють одночасно надсилати повідомлення з файлом", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Відео спікера тепер видно під час спільного доступу до екрана, а реакція на виклик анімована", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Відтепер повідомлення можуть редагувати автори та модератори, що увійшли в систему, протягом 6 годин", + "- Unsent message drafts are now saved in your browser" : "- Чернетки невідправлених повідомлень тепер зберігаються у вашому браузері", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текстовий чат тепер можна використовувати у федеративному режимі з іншими серверами Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модератори тепер можуть банити акаунти та гостей, щоб запобігти їхньому повторному приєднанню до розмови", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Майбутні дзвінки з прив'язаних подій календаря та заміни поза офісом тепер відображаються в розмовах", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Дзвінки тепер можна здійснювати у федеративний спосіб з іншими Talk-серверами (потрібен високопродуктивний бекенд)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Представляємо десктопний клієнт Nextcloud Talk для Windows, macOS та Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Підсумовуйте записи дзвінків і непрочитані повідомлення в чатах за допомогою Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Покращення зустрічей завдяки розпізнаванню гостей, запрошених за їхньою електронною адресою, імпорту списків учасників, проектів опитувань та завантаженню списків учасників дзвінків.", + "- Archive conversations to stay focused" : "- Архівуйте розмови, щоб залишатися зосередженими", + "- Schedule a meeting into your calendar from within a conversation" : "- Заплануйте зустріч у своєму календарі з розмови", + "- Search for messages of the current conversation directly in the right sidebar" : "- Пошук повідомлень поточної розмови безпосередньо в правій бічній панелі", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Переглядайте більше розмов з першого погляду з новим компактним списком (увімкніть у налаштуваннях розмови)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Розмови про зустрічі тепер синхронізуються з назвою та описом з календаря і приховуються за допомогою фільтра пошуку, поки не наближається час їх початку.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Позначте розмови як конфіденційні в налаштуваннях сповіщень, щоб приховати вміст повідомлень зі списку розмов та сповіщень", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Щоб отримувати пуш-сповіщення під час режиму \"Не турбувати\", позначте розмови як важливі", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Додайте інших учасників до тет-а-тет виклику, щоб створити новий груповий виклик на льоту", + "- Use threads to keep your chat and discussions organized" : "- Використовуйте теми, щоб упорядкувати чат і дискусії", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Транскрипція в реальному часі тепер доступна під час дзвінка (потрібен ExApp для транскрипції в реальному часі та високопродуктивний бекенд)", + "_All %n participant_::_All %n participants_" : ["Всі %n учасників","Всі %n учасників","Всі %n учасників","Всі %n учасників"], + "Talk updates ✅" : "Обговоріть оновлення ✅", + "Reaction deleted by author" : "Реакцію вилучено автором", + "{actor} created the conversation" : "{actor} створив(-ла) розмову", + "You created the conversation" : "Ви створили розмову", + "System created the conversation" : "Система створила розмову", + "An administrator created the conversation" : "Адміністратор створив розмову", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} змінив(-ла) назву розмови з \"%1$s\" на \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ви змінили назву розмови з \"%1$s\" на \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Адміністратор змінив(-ла) назву розмови з \"%1$s\" на \"%2$s\"", + "{actor} set the description" : "{actor} встановив опис", + "You set the description" : "Ви встановлюєте опис", + "An administrator set the description" : "Опис встановив адміністратор", + "{actor} removed the description" : "{actor} прибрав(-ла) опис", + "You removed the description" : "Ви вилучили опис", + "An administrator removed the description" : "Адміністратор прибрав опис", + "You started a silent call" : "Ти почав мовчазний дзвінок", + "Outgoing silent call" : "Вихідний тихий дзвінок", + "{actor} started a silent call" : "{actor} почався тихий дзвінок.", + "Incoming silent call" : "Вхідний тихий дзвінок", + "You started a call" : "Ви почали виклик", + "Outgoing call" : "Вихідний дзвінок", + "{actor} started a call" : "{actor} розпочав розмову", + "Incoming call" : "Вхідний дзвінок", + "{actor} joined the call" : "{actor} приєднався до розмови", + "You joined the call" : "Ви приєдналися до виклику", + "{actor} left the call" : "{actor} залишив розмову", + "You left the call" : "Ви залишили розмову", + "{actor} unlocked the conversation" : "{actor} розблокував бесіду", + "You unlocked the conversation" : "Ви розблокували розмову", + "An administrator unlocked the conversation" : "Адміністратор розблокував розмову", + "{actor} locked the conversation" : "{actor} заблокував розмову", + "You locked the conversation" : "Ви заблокували розмову", + "An administrator locked the conversation" : "Адміністратор заблокував розмову", + "{actor} limited the conversation to the current participants" : "{actor} обмежив розмову до поточних учасників", + "You limited the conversation to the current participants" : "Ви обмежили бесіду поточними учасниками", + "An administrator limited the conversation to the current participants" : "Адміністратор обмежив розмову для поточних учасників", + "{actor} opened the conversation to registered users" : "{actor} відкрив розмову для зареєстрованих користувачів", + "You opened the conversation to registered users" : "Ви відкрили розмову для зареєстрованих користувачів", + "An administrator opened the conversation to registered users" : "Адміністратор відкрив розмову для зареєстрованих користувачів", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} відкрив розмову для зареєстрованих користувачів та користувачів, створених у додатку \"Гості", + "You opened the conversation to registered users and users created with the Guests app" : "Ви відкрили бесіду для зареєстрованих користувачів і користувачів, створених за допомогою програми \"Гості", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Адміністратор відкрив розмову зареєстрованим користувачам і користувачам, створеним за допомогою програми \"Гості", + "The conversation is now open to everyone" : "Розмова тепер відкрита для всіх", + "{actor} opened the conversation to everyone" : "{actor} відкрив бесіду для всіх", + "You opened the conversation to everyone" : "Ви відкрили розмову для всіх", + "{actor} restricted the conversation to moderators" : "{actor} обмежив бесіду для модераторів", + "You restricted the conversation to moderators" : "Ви обмежили розмову модераторами", + "{actor} started breakout rooms" : "{actor} запустив розділені кімнати", + "You started breakout rooms" : "{actor} запустили розділені кімнати", + "{actor} stopped breakout rooms" : "{actor} закрив кімнати обговорення", + "You stopped breakout rooms" : "Ви закрили кімнати обговорення", + "{actor} allowed guests" : "{actor} дозволив гостям", + "You allowed guests" : "Ви дозволили доступ гостям", + "An administrator allowed guests" : "Адміністратор дозволив гостей", + "{actor} disallowed guests" : "{actor} заборонив гостей", + "You disallowed guests" : "Ви заборонили гостям", + "An administrator disallowed guests" : "Адміністратор заборонив гостям", + "{actor} set a password" : "{actor} встановив пароль", + "You set a password" : "Ви встановили пароль", + "An administrator set a password" : "Адміністратор встановив пароль", + "{actor} removed the password" : "{actor} вилучив пароль", + "You removed the password" : "Ви вилучили пароль", + "An administrator removed the password" : "Адміністратор забрав пароль", + "{actor} added {user}" : "{actor} додав(-ла) {user}", + "You joined the conversation" : "Ви приєдналися до розмови", + "{actor} joined the conversation" : "{actor} приєднався до розмови", + "You added {user}" : "Ви додали {user}", + "{actor} added you" : "{actor} додав(-ла) вас", + "An administrator added you" : "Вас додав адміністратор", + "An administrator added {user}" : "Адміністратор додав {user}", + "You left the conversation" : "Ви залишили розмову", + "{actor} left the conversation" : "{actor} залишив бесіду", + "{actor} removed {user}" : "{actor} вилучив користувача {user}", + "You removed {user}" : "Ви вилучили користувача {user}", + "{actor} removed you" : "{actor} вилучив вас", + "An administrator removed you" : "Адміністратор вилучив вас", + "An administrator removed {user}" : "Адміністратор вилучив {user}", + "{actor} invited {federated_user}" : "{actor} запрошені {federated_user}", + "You invited {federated_user}" : "Ти запросив {federated_user}", + "You accepted the invitation" : "Ви прийняли запрошення", + "{actor} invited you" : "{actor} запросив тебе.", + "An administrator invited you" : "Вас запросив адміністратор", + "An administrator invited {federated_user}" : "Адміністратор запросив {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} прийняв запрошення", + "{actor} removed {federated_user}" : "{actor} вилучив(-ла) {federated_user}", + "You removed {federated_user}" : "Ви вилучили {federated_user}", + "You declined the invitation" : "Ви відхилили запрошення", + "An administrator removed {federated_user}" : "Адміністратор вилучив {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} відхилив запрошення", + "{actor} added group {group}" : "{actor} додано групу {group}", + "You added group {group}" : "Ви додали групу {group}", + "An administrator added group {group}" : "Адміністратором додано групу {group}", + "{actor} removed group {group}" : "{actor} вилучив(-ла) групу {group}", + "You removed group {group}" : "Ви вилучили групу {group}", + "An administrator removed group {group}" : "Адміністратор вилучив групу {group}", + "{actor} added team {circle}" : "{actor} додано команду {circle}", + "You added team {circle}" : "Ви додали команду {circle}", + "An administrator added team {circle}" : "Адміністратор додав команду {circle}", + "{actor} removed team {circle}" : "{actor} видалена команда {circle}", + "You removed team {circle}" : "Ви видалили команду {circle}", + "An administrator removed team {circle}" : "Команда видалена адміністратором {circle}", + "{actor} added {phone}" : "{actor} додано {phone}", + "You added {phone}" : "Ви додали {phone}", + "An administrator added {phone}" : "Адміністратор додав {phone}", + "{actor} removed {phone}" : "{actor} видалено {phone}", + "You removed {phone}" : "Ви видалили {phone}", + "An administrator removed {phone}" : "Адміністратор видалив {phone}", + "{actor} promoted {user} to moderator" : "{actor} призначив {user} модератором ", + "You promoted {user} to moderator" : "Ви призначили {user} модератором ", + "{actor} promoted you to moderator" : "{actor} призначив вас модератором", + "An administrator promoted you to moderator" : "Адміністратор призначив вас модератором", + "An administrator promoted {user} to moderator" : "Адміністратор призначив {user} модератором", + "{actor} demoted {user} from moderator" : "{actor} позбавив {user} статусу модератора ", + "You demoted {user} from moderator" : "Ви позбавили {user} статусу модератора", + "{actor} demoted you from moderator" : "{actor} позбавив вас статусу модератора", + "An administrator demoted you from moderator" : "Адміністратор позбавив вас статусу модератора", + "An administrator demoted {user} from moderator" : "Адміністратор позбавив {user} статусу модератора", + "{actor} shared a file which is no longer available" : "{actor} поділив(-ла-)ся файлом, який більше не доступний ", + "You shared a file which is no longer available" : "Ви поділилися файлом, який більше не доступний", + "File shares are currently not supported in federated conversations" : "Файлові ресурси наразі не підтримуються в об'єднаних розмовах", + "The shared location is malformed" : "Спільне місце розташування сформовано неправильно", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} налаштував Matterbridge для синхронізації цієї розмови з іншими чатами ", + "You set up Matterbridge to synchronize this conversation with other chats" : "Ви налаштували Matterbridge для синхронізації цієї розмови з іншими чатами ", + "{actor} created thread {title}" : "{actor} створив потік {title}", + "You created thread {title}" : "Ви створили потік {title}", + "{actor} renamed thread {title}" : "{actor} перейменував потік {title}", + "You renamed thread {title}" : "Ви перейменували потік {title}", + "{actor} updated the Matterbridge configuration" : "{actor} оновив(-ла) конфігурацію Matterbridge ", + "You updated the Matterbridge configuration" : "Ви оновили конфігурацію Matterbridge ", + "{actor} removed the Matterbridge configuration" : "{actor} вилучив(-ла) конфігурацію Matterbridge ", + "You removed the Matterbridge configuration" : "Ви вилучили конфігурацію Matterbridge", + "{actor} started Matterbridge" : "{actor} запустив(ла) систему обміну повідомленнями Matterbridge", + "You started Matterbridge" : "Ви запустив(ла) систему обміну повідомленнями Matterbridge", + "{actor} stopped Matterbridge" : "{actor} зупинив(ла) систему обміну повідомленнями Matterbridge", + "You stopped Matterbridge" : "Ви зупинив(ла) систему обміну повідомленнями Matterbridge", + "{actor} deleted a message" : "{actor} вилучив(-ла) повідомлення", + "You deleted a message" : "Ви вилучили повідомлення", + "{actor} edited a message" : "{actor} відредагував повідомлення", + "You edited a message" : "Ви відредагували повідомлення", + "{actor} deleted a reaction" : "{actor} прибрав(-ла) реакцію", + "You deleted a reaction" : "Ви прибрали реакцію", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встанов(-ла) термін дії повідомлення у %n тижні(-в)"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встанов(-ла) термін дії повідомлення у %n дні(-в)"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встанов(-ла) термін дії повідомлення у %n годин(-у,и)"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встанов(-ла) термін дії повідомлення у %n хвилин(-у,и)"], + "{actor} disabled message expiration" : "{actor} вимкнув закінчення терміну дії повідомлення", + "You disabled message expiration" : "Ви вимкнули закінчення терміну дії повідомлення", + "{actor} cleared the history of the conversation" : "{actor} очистив(ла) історію розмови", + "You cleared the history of the conversation" : "Ви очистили історію розмови", + "{actor} set the conversation picture" : "{actor} встанов(ла) картинку розмови", + "You set the conversation picture" : "Ви встановили картинку розмови", + "{actor} removed the conversation picture" : "{actor} прибрав(-ла) зображення розмови", + "You removed the conversation picture" : "Ви вилучили зображення розмови", + "{actor} ended the poll {poll}" : "{actor} завершив опитування {poll}", + "You ended the poll {poll}" : "Ви завершили опитування {poll}", + "{actor} started the video recording" : "{actor} запустив відеозапис", + "You started the video recording" : "Ви запустили відеозапис", + "{actor} stopped the video recording" : "{actor} зупинив(ла) запис відео", + "You stopped the video recording" : "Ви зупинили запис відео", + "{actor} started the audio recording" : "{actor} запустив аудіозапис", + "You started the audio recording" : "Ви запустили аудіозапис", + "{actor} stopped the audio recording" : "{actor} зупинив аудіозапис", + "You stopped the audio recording" : "Ви зупинили аудіозапис", + "The recording failed" : "Запис не вдалося виконати", + "Someone voted on the poll {poll}" : "Хтось проголосував на опитуванні {poll}", + "Message deleted by author" : "Автор вилучив(-ла) повідомлення", + "Message deleted by {actor}" : "{actor} вилучив(-ла) повідомлення", + "Message deleted by you" : "Ви вилучили повідомлення", + "Deleted user" : "Вилучений користувач", + "Unknown number" : "Невідомий номер", + "Administration" : "Адміністрування", + "System" : "Система", + "%s (guest)" : "%s(гість)", + "Missed call" : "Пропущений дзвінок.", + "Unanswered call" : "Дзвінок без відповіді", + "Call ended (Duration {duration})" : "Дзвінок завершено (Тривалість {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завершив розмову (Тривалість {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Дзвінок з гостем %n було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Дзвінок з гостем %n завершено (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} закінчив розмову з %n гостем (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1} було завершено, оскільки було досягнуто максимальної тривалості дзвінка (Тривалість {duration})", + "Call with {user1} ended (Duration {duration})" : "Дзвінок з {user1} закінчився (Тривалість {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завершив виклик за участю {user1} (Тривалість {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1} та {user2} було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Дзвінок з {user1} та {user2} закінчився (тривалість {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завершив виклик з {user1} та {user2} (Тривалість {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1}, {user2} та {user3} було завершено, оскільки він досягнув максимальної тривалості (тривалість {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Дзвінок з {user1}, {user2} та {user3} закінчився (тривалість {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завершив виклик з {user1}, {user2} та {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3} та {user4} було завершено, оскільки він досягнув максимальної тривалості (тривалість {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3} та {user4} закінчився (тривалість {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завершив(-ла) виклик з {user1}, {user2}, {user3} та {user4} (Тривалість {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з абонентами {user1}, {user2}, {user3}, {user4} та {user5} було завершено, оскільки було досягнуто максимальної тривалості дзвінка (Тривалість {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3}, {user4} та {user5} закінчився (Тривалість {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завершив виклик з {user1}, {user2}, {user3}, {user4} та {user5} (Тривалість {duration})", + "Message of {user} in {conversation}" : "Повідомлення {user} у {conversation}", + "Message of {user}" : "Повідомлення від {user}", + "Message of a deleted user in {conversation}" : "Повідомлення видаленого користувача в {conversation}", + "Talk conversations" : "Розмови", + "Talk to %s" : "Спілкуватися з %s", + "An error occurred. Please contact your administrator." : "Виникла помилка. Будь ласка, зверніться до вашого адміністратора.", + "Storage quota exceeded" : "Перевищено дозволений обсяг даних для збереження", + "File not found" : "Файл не знайдено", + "File is not shared, or shared but not with the user" : "До файлу не надано спільний доступ або надано, але не користувачеві", + "No account available to delete." : "Обліковий запис недоступний для видалення.", + "Poll" : "Опитування", + "Password needs to be set" : "Необхідно встановити пароль", + "Uploading the file failed" : "Не вдалося завантажити файл", + "No image file provided" : "Файл зображення не надано", + "File is too big" : "Файл занадто великий", + "Invalid file provided" : "Надано невірний файл", + "Invalid image" : "Недійсне зображення", + "Unknown filetype" : "Невідомий тип файлу", + "Talk mentions" : "Резюме із Talk", + "More conversations" : "Більше розмов", + "Say hi to your friends and colleagues!" : "Привітайтеся з вашими друзями та колегами!", + "No unread mentions" : "Немає непрочитаних згадок", + "Call in progress" : "Триває виклик", + "You were mentioned" : "Про вас згадували", + "Write to conversation" : "Написати у розмові", + "Writes event information into a conversation of your choice" : "Додає інформацію про подію в розмову на ваш вибір", + "Missing email field in header line" : "Відсутнє поле електронної пошти в заголовку", + "Following lines are invalid: %s" : "Наступні рядки є невірними: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s запросив вас до розмови \"%2$s\".", + "You were invited to conversation \"%s\"." : "Вас запросили на розмову \"%s\".", + "Conversation invitation" : "Запрошення до розмови", + "Scheduled time" : "Запланований час", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Ви також можете підключитися за телефоном, вказавши такі дані", + "Dial-in information" : "Інформація для входу в систему", + "Meeting ID" : "Ідентифікатор зустрічі", + "Your PIN" : "Ваш пін-код.", + "Click the button below to join the lobby now." : "Натисніть кнопку нижче, щоб приєднатися до лобі зараз.", + "Click the link below to join the lobby now." : "Натисніть на посилання нижче, щоб приєднатися до лобі зараз.", + "Join lobby for \"%s\"" : "Приєднуйтесь до лобі для \"%s\"", + "Click the button below to join the conversation now." : "Натисніть кнопку нижче, щоб приєднатися до розмови зараз.", + "Click the link below to join the conversation now." : "Перейдіть за посиланням нижче, щоб приєднатися до дискусії прямо зараз.", + "Join \"%s\"" : "Приєднайте \"%s\"", + "Meeting" : "Зустріч", + "Password request: %s" : "Запит пароля:%s", + "Private conversation" : "Приватна розмова", + "Deleted user (%s)" : "Вилучений користувач (%s)", + "Failed to upload call recording" : "Не вдалося завантажити запис розмови", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Серверу запису не вдалося завантажити запис дзвінка {call}. Будь ласка, зверніться до адміністрації.", + "Share to chat" : "Поділитися в чаті", + "Dismiss notification" : "Скасувати сповіщення", + "Call recording now available" : "Відтепер доступний запис дзвінків", + "The recording for the call in {call} was uploaded to {file}." : "Запис дзвінка в {call} було завантажено до {file}.", + "Transcript now available" : "Тепер доступна стенограма", + "The transcript for the call in {call} was uploaded to {file}." : "Розшифровку дзвінка в {call} було завантажено до {file}.", + "Failed to transcript call recording" : "Не вдалося розшифрувати запис розмови", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не вдалося розшифрувати запис за адресою {file} для дзвінка в {call}. Будь ласка, зверніться до адміністрації.", + "Call summary now available" : "Звіт про дзвінки тепер доступний", + "The summary for the call in {call} was uploaded to {file}." : "Підсумки конкурсу {call} були завантажені на сайт {file}.", + "Failed to summarize call recording" : "Не вдалося підсумувати запис розмови", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер не зміг підсумувати запис на {file} для дзвінка на {call}. Будь ласка, зверніться до адміністрації.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} запрошує вас приєднатися до {roomName} на {remoteServer}", + "Accept" : "Прийняти", + "Decline" : "Відхилити", + "{user1} invited you to a federated conversation" : "{user1} запросили вас на федеративну розмову", + "Someone reacted" : "Хтось відреагував", + "New message" : "Нове повідомлення", + "Reminder" : "Нагадування", + "Someone mentioned you" : "Хтось згадував про вас.", + "Notification" : "Сповіщення", + "Someone reacted in a private conversation" : "Хтось відреагував у приватній розмові", + "You received a message in a private conversation" : "Ви отримали повідомлення у приватній розмові", + "Reminder in a private conversation" : "Нагадування в приватній розмові", + "Someone mentioned you in a private conversation" : "Хтось згадав вас у приватній розмові", + "Notification in a private conversation" : "Сповіщення в приватній розмові", + "Reminder: You in {call}" : "Нагадування: Ви в {call}", + "Reminder: {user} in {call}" : "Нагадування: {user} в {call}", + "Reminder: Deleted user in {call}" : "Нагадування: Видалено користувача в {call}", + "Reminder: {guest} (guest) in {call}" : "Нагадування: {guest} (guest) у {call}", + "Reminder: Guest in {call}" : "Нагадування: Гість у {call}", + "{user} reacted with {reaction}" : "{user} прореагував з {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} прореагував з {reaction} у {call}", + "Deleted user reacted with {reaction} in {call}" : "Видалений користувач відреагував на {reaction} у {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) відреагував(ла) на {reaction} у {call}", + "Guest reacted with {reaction} in {call}" : "Гість відреагував {reaction} у {call}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Вилучено користувача у {call}", + "{guest} (guest) in {call}" : "{guest} (guest) у {call}", + "Guest in {call}" : "Гість у {call}", + "{user} sent you a private message" : "{user} відправив(ла) вам приватне повідомлення", + "{user} sent a message in conversation {call}" : "{user} надіслав(ла) повідомлення в розмові {call}", + "A deleted user sent a message in conversation {call}" : "Видалений користувач надіслав(ла) повідомлення в розмові {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) надіслав(ла) повідомлення в розмові {call}", + "A guest sent a message in conversation {call}" : "Гість надіслав повідомлення в розмові {call}.", + "{user} replied to your private message" : "{user} відповів(ла) на ваше особисте повідомлення", + "{user} replied to your message in conversation {call}" : "{user} відповів(ла) на ваше повідомлення у розмові {call}.", + "A deleted user replied to your message in conversation {call}" : "Видалений користувач відповів(ла) на ваше повідомлення в розмові {call}.", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) відповів(ла) на ваше повідомлення у розмові {call}.", + "A guest replied to your message in conversation {call}" : "Гість відповів(ла) на ваше повідомлення у розмові {call}.", + "Reminder: You in private conversation {call}" : "Нагадування: Ви в приватній розмові {call}", + "Reminder: A deleted user in private conversation {call}" : "Нагадування: Видалений користувач у приватній розмові {call}", + "Reminder: {user} in private conversation" : "Нагадування: {user} у приватній розмові", + "Reminder: You in conversation {call}" : "Нагадування: Ви в розмові {call}", + "Reminder: {user} in conversation {call}" : "Нагадування: {user} в розмові {call}", + "Reminder: A deleted user in conversation {call}" : "Нагадування: Видалений користувач у розмові {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Нагадування: {guest} (guest) у розмові {call}", + "Reminder: A guest in conversation {call}" : "Нагадування: Гість у розмові {call}.", + "{user} reacted with {reaction} to your private message" : "{user} відреагував(ла) {reaction} на ваше приватне повідомлення", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} відреагував {reaction} на ваше повідомлення у розмові {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Видалений користувач відреагував {reaction} на ваше повідомлення у розмові {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) відреагував(ла) {reaction} на ваше повідомлення у розмові {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гість відреагував {reaction} на ваше повідомлення у розмові {call}.", + "{user} mentioned you in a private conversation" : "{user} згадав вас у приватній розмові", + "{user} mentioned group {group} in conversation {call}" : "{user} згадав(ла) групу {group} в розмові {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} згадували команду {team} у розмові {call}", + "{user} mentioned everyone in conversation {call}" : "{user} згадав(ла) усіх у розмові {call}", + "{user} mentioned you in conversation {call}" : "{user} згадував(ла) вас у розмові {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Видалений користувач згадав(ла) групу {group} у розмові {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Видалений користувач згадав команду {team} у розмові {call}", + "A deleted user mentioned everyone in conversation {call}" : "Видалений користувач згадав усіх у розмові {call}.", + "A deleted user mentioned you in conversation {call}" : "Користувач, якого було вилучено, згадав вас у розмові {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гість) згадав групу {group} в розмові {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гість) згадав у розмові команду {team} {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гість) згадав усіх у розмові {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гість) згадав вас у розмові {call}", + "A guest mentioned group {group} in conversation {call}" : "Гість згадав групу {group} у розмові {call}", + "A guest mentioned team {team} in conversation {call}" : "У розмові гість згадав команду {team} {call}", + "A guest mentioned everyone in conversation {call}" : "Гість згадав усіх у розмові {call}", + "A guest mentioned you in conversation {call}" : "Гість згадав вас у розмові {call}", + "View message" : "Переглянути повідомлення", + "Dismiss reminder" : "Скасувати нагадування ", + "View chat" : "Перегляд чату", + "{user} invited you to a group conversation: {call}" : "{user} запросив(-ла) вас до групової розмови: {call}", + "Join call" : "Приєднатися", + "Answer call" : "Відповісти на виклик", + "{user} would like to talk with you" : "{user} хотів(-ла) би поговорити з вами", + "Call back" : "Передзвони мені.", + "You missed a call from {user}" : "Ви пропустили виклик від {user}", + "Accept call" : "Прийняти виклик", + "Incoming phone call from {call}" : "Вхідний дзвінок від {call}", + "You missed a phone call from {call}" : "Ви пропустили телефонний дзвінок від {call}", + "A group call has started in {call}" : "Групову розмову розпочато у {call}", + "You missed a group call in {call}" : "Ви пропустили груповий виклик у {call}", + "{email} is requesting the password to access {file}" : "{email} запитує пароль для доступу до {file}", + "{email} tried to request the password to access {file}" : "{email} намагався запросити пароль для доступу до {file}", + "Someone is requesting the password to access {file}" : "Хтось запитує пароль для доступу до {file}", + "Someone tried to request the password to access {file}" : "Хтось намагався запитати пароль для доступу до {file}", + "Open settings" : "Відкрити налаштування", + "Hosted signaling server added" : "Додано виділений сервер сигналізації", + "The hosted signaling server is now configured and will be used." : "Виділений сервер сигналізації налаштований і готовий до використання.", + "Hosted signaling server removed" : "Видалено хостинговий сервер сигналізації", + "The hosted signaling server was removed and will not be used anymore." : "Виділений сервер сигналізації було вилучено і більше не буде використовуватися.", + "Hosted signaling server changed" : "Змінено виділений сервер сигналізації", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Обліковий запис виділеного сервера сигналізації змінив статус з \"{oldstatus}\" на \"{newstatus}\".", + "pending" : "на розгляді", + "active" : "активний", + "expired" : "закінчився", + "blocked" : "заблоковано", + "error" : "помилка", + "The certificate of {host} expires in {days} days" : "Термін дії сертифіката {host} закінчується через {days} дні(-в)", + "The certificate of {host} expired" : "Термін дії сертифіката {host} закінчився", + "Contact via Talk" : "Зв'яжіться з нами через Talk", + "Open Talk" : "Відкрити Talk", + "Default" : "За замовчуванням", + "Presentation" : "Презентація", + "Webinar" : "Вебінар", + "Conversations" : "Розмови", + "Messages in current conversation" : "Повідомлення в поточній розмові", + "{user}" : "{user}", + "Messages" : "Повідомлення", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Повідомлення в інших розмовах", + "One-to-one rooms always need to show the other users avatar" : "У кімнатах один на один завжди потрібно показувати аватарку іншого користувача", + "Invalid emoji character" : "Неправильний символ емодзі", + "Invalid background color" : "Неправильний колір фону", + "Avatar image is not square" : "Зображення аватара не квадратне", + "Room {number}" : "Кімната {number}", + "Other" : "Інші", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Не вдалося запросити пробну версію, оскільки сервер недоступний. Будь ласка, спробуйте пізніше.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Виникла проблема з авторизацією цього сервера хмари. Можливо, він недоступний ззовні, що не дозволяє здійснити перевірити за URL.", + "Something unexpected happened." : "Сталося щось непередбачуване.", + "The URL is invalid." : "URL-адреса є недійсною.", + "An HTTPS URL is required." : "Необхідно вказати HTTPS URL.", + "The email address is invalid." : "Адреса електронної пошти є недійсною.", + "The language is invalid." : "Мова є недійсною.", + "The country is invalid." : "Країна є недійсною.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Існує проблема із запитом на випробування. Будь ласка, перевірте свої журнали для отримання додаткової інформації.", + "Too many requests are send from your servers address. Please try again later." : "Занадто багато запитів відправлено з адреси вашого сервера. Будь ласка, спробуйте пізніше.", + "There is already a trial registered for this Nextcloud instance." : "Для цього примірника сервера хмари Nextcloud вже зареєстровано пробне використання.", + "Something unexpected happened. Please try again later." : "Сталося щось непередбачуване. Будь ласка, спробуйте пізніше.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Не вдалося надіслати запит на пробну версію, тому що пробний сервер поводився некоректно. Будь ласка, спробуйте пізніше.", + "Trial requested but failed to get account information. Please check back later." : "Запитано пробну версію, але не вдалося отримати інформацію про обліковий запис. Будь ласка, перевірте пізніше.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Виникла проблема із авторизацією цього запиту. Можливо, він недоступний ззовні, що не дозволяє перевірити його URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Не вдалося отримати інформацію про обліковий запис через неправильну роботу пробного сервера. Будь ласка, перевірте пізніше.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Існує проблема з отриманням інформації про обліковий запис. Будь ласка, перевірте свої журнали для отримання додаткової інформації.", + "There is no such account registered." : "Такого облікового запису не зареєстровано.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Не вдалося отримати інформацію про обліковий запис, оскільки пробний сервер недоступний. Будь ласка, перевірте пізніше.", + "Deleting the hosted signaling server account failed. Please check back later." : "Не вдалося вилучити обліковий запис сервера сигналізації. Спробуйте пізніше.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Не вдалося вилучити обліковий запис, оскільки отимано неправильний відгук від пробного сервера. Спробуйте пізніше.", + "There is a problem with deleting the account. Please check your logs for further information." : "Виникла проблема з вилученням облікового запису. Будь ласка, перевірте журнали, щоб отримати додаткову інформацію.", + "Too many requests are sent from your servers address. Please try again later." : "Занадто багато запитів відправлено з адреси вашого сервера. Будь ласка, повторіть спробу пізніше.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Не вдалося вилучити обліковий запис, оскільки пробний сервер недоступний. Спробуйте пізніше.", + "Note to self" : "Примітка для себе", + "A place for your private notes, thoughts and ideas" : "Місце для ваших особистих нотаток, думок та ідей", + "Transcript is AI generated and may contain mistakes" : "Транскрипт згенерований штучним інтелектом і може містити помилки", + "Summary is AI generated and may contain mistakes" : "Резюме згенероване штучним інтелектом і може містити помилки", + "Let's get started!" : "Почнімо!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** — це безпечна, самостійно розміщена комунікаційна платформа, яка безперешкодно інтегрується в екосистему Nextcloud.\n\n#### Основні функції Nextcloud Talk:\n\n* Чат і обмін повідомленнями в приватних і групових чатах\n* Голосові та відеодзвінки\n* Обмін файлами та інтеграція з іншими додатками Nextcloud\n* Налаштовувані параметри розмов, модерація та контроль конфіденційності\n* Веб, настільні та мобільні пристрої (iOS та Android)\n* Приватне та безпечне спілкування\n\nДізнайтеся більше в [документації для користувачів](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Ласкаво просимо до Nextcloud Talk\n\nNextcloud Talk — це приватний і потужний месенджер, інтегрований із Nextcloud. Чатуйте в приватних або групових розмовах, співпрацюйте за допомогою голосових і відеодзвінків, організовуйте вебінари та події, налаштовуйте свої розмови та багато іншого.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматування тексту для створення багатоформатних повідомлень\n\nУ Nextcloud Talk ви можете використовувати синтаксис Markdown для форматування своїх повідомлень. Наприклад, застосовувати **жирний** або *курсивний* шрифт, або `виділяти текст як код`. Ви навіть можете створювати таблиці та додавати заголовки до свого тексту.\n\nПотрібно виправити помилку або змінити форматування? Відредагуйте своє повідомлення, натиснувши «Редагувати повідомлення» в меню повідомлення.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Додавання вкладень та посилань\n\nДодавайте файли з Nextcloud Hub за допомогою кнопки «+». Діліться елементами з Files та різних додатків Nextcloud. Деякі додатки навіть підтримують інтерактивні віджети, наприклад, додаток Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Нехай розмови течуть: згадуйте користувачів, реагуйте на повідомлення та багато іншого\n\nВи можете згадати всіх учасників розмови, використовуючи %s або згадати конкретних учасників, набравши «@» і вибравши їх ім'я зі списку.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Ви можете відповідати на повідомлення, пересилати їх в інші чати та іншим користувачам або копіювати їхній вміст.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Робіть більше з Smart Picker\n\nПросто введіть «/» або перейдіть до меню «+», щоб відкрити Smart Picker, де ви можете додавати різний контент до своїх повідомлень. Ви можете налаштувати Smart Picker, щоб додавати елементи з додатків Nextcloud, GIF-файли, місця на карті, контент, створений штучним інтелектом, та багато іншого.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Керування налаштуваннями розмов\n\nУ меню розмов ви можете отримати доступ до різних налаштувань для керування розмовами, таких як:\n* Редагування інформації про розмову\n* Керування сповіщеннями\n* Застосування численних правил модерації\n* Налаштування доступу та безпеки\n* Увімкнення ботів\n* та багато іншого!", + "Andorra" : "Андорра", + "United Arab Emirates" : "Об'єднані Арабські Емірати", + "Afghanistan" : "Афганістан", + "Antigua and Barbuda" : "Антигуа та Барбуда", + "Anguilla" : "Ангілья ", + "Albania" : "Албанія ", + "Armenia" : "Вірменія", + "Angola" : "Ангола ", + "Antarctica" : "Антарктида", + "Argentina" : "Аргентина ", + "American Samoa" : "Американське Самоа ", + "Austria" : "Австрія ", + "Australia" : "Австралія ", + "Aruba" : "Аруба ", + "Åland Islands" : "Аландські острови ", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Боснія і Герцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельгія ", + "Burkina Faso" : "Буркіна-Фасо", + "Bulgaria" : "Болгарія ", + "Bahrain" : "Бахрейн ", + "Burundi" : "Бурунді ", + "Benin" : "Бенін", + "Saint Barthélemy" : "Сен-Бартелемі ", + "Bermuda" : "Бермудські острови", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Болівія", + "Bonaire, Sint Eustatius and Saba" : "Бонайре, Сінт-Естатіус і Саба", + "Brazil" : "Бразилія ", + "Bahamas" : "Багамські острови", + "Bhutan" : "Бутан ", + "Bouvet Island" : "Острів Буве", + "Botswana" : "Ботсвана ", + "Belarus" : "Білорусь", + "Belize" : "Беліз ", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосові (Кілінгові) острови ", + "Congo, the Democratic Republic of the" : "Демократична Республіка Конґо", + "Central African Republic" : "Центральноафриканська Республіка ", + "Congo" : "Конго ", + "Switzerland" : "Швейцарія ", + "Côte d'Ivoire" : "Кот-д'Івуар ", + "Cook Islands" : "Острови Кука", + "Chile" : "Чилі ", + "Cameroon" : "Камерун ", + "China" : "Китай ", + "Colombia" : "Колумбія ", + "Costa Rica" : "Коста-Ріка ", + "Cuba" : "Куба ", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Острів Різдва ", + "Cyprus" : "Кіпр ", + "Czechia" : "Чехія ", + "Germany" : "Німеччина ", + "Djibouti" : "Джибуті ", + "Denmark" : "Данія ", + "Dominica" : "Домініка ", + "Dominican Republic" : "Домініканська Республіка ", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонія", + "Egypt" : "Єгипет", + "Western Sahara" : "Західна Сахара ", + "Eritrea" : "Еритрея", + "Spain" : "Іспанія", + "Ethiopia" : "Ефіопія", + "Finland" : "Фінляндія", + "Fiji" : "Фіджі", + "Falkland Islands (Malvinas)" : "Фолклендські (Мальвінські) острови ", + "Micronesia, Federated States of" : "Мікронезія", + "Faroe Islands" : "Фарерські острови ", + "France" : "Франція", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Сполучене Королівство Великої Британії та Північної Ірландії ", + "Grenada" : "Гренада", + "Georgia" : "Грузія", + "French Guiana" : "Французька Гвіана ", + "Guernsey" : "Гернсі", + "Ghana" : "Гана", + "Gibraltar" : "Гібралтар", + "Greenland" : "Гренландія", + "Gambia" : "Гамбія", + "Guinea" : "Гвінея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Екваторіальна Гвінея ", + "Greece" : "Греція", + "South Georgia and the South Sandwich Islands" : "Південна Георгія та Південні Сандвічеві острови ", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвінея-Бісау ", + "Guyana" : "Гайана", + "Hong Kong" : "Гонконг", + "Heard Island and McDonald Islands" : "Острови Герд і Макдональд", + "Honduras" : "Гондурас", + "Croatia" : "Хорватія", + "Haiti" : "Гаїті", + "Hungary" : "Угорщина", + "Indonesia" : "Індонезія", + "Ireland" : "Ірландія", + "Israel" : "Ізраїль", + "Isle of Man" : "Острів Мен", + "India" : "Індія", + "British Indian Ocean Territory" : "Британська територія в Індійському океані ", + "Iraq" : "Ірак", + "Iran, Islamic Republic of" : "Ісламська Республіка Іран", + "Iceland" : "Ісландія", + "Italy" : "Італія", + "Jersey" : "Джерсі", + "Jamaica" : "Ямайка", + "Jordan" : "Йорданія", + "Japan" : "Японія", + "Kenya" : "Кенія", + "Kyrgyzstan" : "Киргизстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кірибаті", + "Comoros" : "Коморські острови", + "Saint Kitts and Nevis" : "Сент-Кіттс і Невіс", + "Korea, Democratic People's Republic of" : "Корейська Народно-Демократична Республіка Кореї", + "Korea, Republic of" : "Корея, Республіка ", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманові острови ", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоська Народно-Демократична Республіка", + "Lebanon" : "Ліван", + "Saint Lucia" : "Сент-Люсія ", + "Liechtenstein" : "Ліхтенштейн", + "Sri Lanka" : "Шрі-Ланка ", + "Liberia" : "Ліберія", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвія", + "Libya" : "Лівія", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Чорногорія", + "Saint Martin (French part)" : "Сен-Мартен (французька частина) ", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршаллові острови", + "North Macedonia" : "Північна Македонія ", + "Mali" : "Малі", + "Myanmar" : "М'янма", + "Mongolia" : " Монголія ", + "Macao" : "Макао", + "Northern Mariana Islands" : "Північні Маріанські острови", + "Martinique" : "Мартиніка", + "Mauritania" : "Мавританія", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикій", + "Maldives" : "Мальдіви", + "Malawi" : "Малаві", + "Mexico" : "Мексика", + "Malaysia" : "Малайзія", + "Mozambique" : "Мозамбік", + "Namibia" : "Намібія", + "New Caledonia" : "Нова Каледонія ", + "Niger" : "Нігер", + "Norfolk Island" : "Острів Норфолк ", + "Nigeria" : "Нігерія", + "Nicaragua" : "Нікарагуа", + "Netherlands" : "Нідерланди", + "Norway" : "Норвегія", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ніуе", + "New Zealand" : "Нова Зеландія ", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французька Полінезія ", + "Papua New Guinea" : "Папуа-Нова Гвінея", + "Philippines" : "Філіппіни", + "Pakistan" : "Пакистан", + "Poland" : "Польща", + "Saint Pierre and Miquelon" : "Сен-П'єр і Мікелон ", + "Pitcairn" : "Піткерн", + "Puerto Rico" : "Пуерто-Ріко ", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалія", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюньйон", + "Romania" : "Румунія", + "Serbia" : "Сербія", + "Russian Federation" : "мордор", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудівська Аравія ", + "Solomon Islands" : "Соломонові острови ", + "Seychelles" : "Сейшельські острови ", + "Sudan" : "Судан", + "Sweden" : "Швеція", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "острова Святої Єлени, Вознесіння та Тристан-да-Кунья ", + "Slovenia" : "Словенія", + "Svalbard and Jan Mayen" : "Шпіцберген і Ян-Майєн ", + "Slovakia" : "Словаччина", + "Sierra Leone" : "Сьєрра-Леоне ", + "San Marino" : "Сан-Марино ", + "Senegal" : "Сенегал", + "Somalia" : "Сомалі", + "Suriname" : "Суринам", + "South Sudan" : "Південний Судан ", + "Sao Tome and Principe" : "Сан-Томе і Принсіпі ", + "El Salvador" : "Сальвадор ", + "Sint Maarten (Dutch part)" : "Сінт-Мартен (нідерландська частина) ", + "Syrian Arab Republic" : "Сирійська Арабська Республіка ", + "Eswatini" : "Есватіні", + "Turks and Caicos Islands" : "Острови Теркс і Кайкос ", + "Chad" : "Чад", + "French Southern Territories" : "Французькі Південні й Антарктичні Території", + "Togo" : "Того", + "Thailand" : "Таїланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Тимор-Лешті ", + "Turkmenistan" : "Туркменістан", + "Tunisia" : "Туніс", + "Tonga" : "Тонга", + "Turkey" : "Туреччина", + "Trinidad and Tobago" : "Тринідад і Тобаго ", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзанія", + "Ukraine" : "Україна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малі Віддалені Острови Сполучених Штатів Америки ", + "United States of America" : "Сполучені Штати Америки ", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Святий Престол ", + "Saint Vincent and the Grenadines" : "Сент-Вінсент і Гренадини ", + "Venezuela, Bolivarian Republic of" : "Венесуела, Боліваріанська Республіка", + "Virgin Islands, British" : "Віргінські острови, Великобританія", + "Virgin Islands, U.S." : "Віргінські острови, США", + "Viet Nam" : "В'єтнам ", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уолліс і Футуна ", + "Samoa" : "Самоа", + "Yemen" : "Ємен", + "Mayotte" : "Майотта", + "South Africa" : "Півде́нно-Африка́нська Респу́бліка", + "Zambia" : "Замбія", + "Zimbabwe" : "Зімбабве", + "Background blur" : "Розмиття фону", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Не вдалося перевірити підтримку завантаження WASM. Будь ласка, перевірте вручну, чи обслуговує ваш веб-сервер файли `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб-сервер не налаштований належним чином для доставки файлів `.wasm`. Зазвичай це проблема з конфігурацією Nginx. Для розмиття фону потрібно налаштувати доставку файлів `.wasm`. Порівняйте свою конфігурацію Nginx з рекомендованою конфігурацією в нашій документації.", + "Talk configuration values" : "Значення конфігурації розмови", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Примусове обмеження тривалості виклику підтримується лише за допомогою системного cron. Будь ласка, увімкніть системний cron або видаліть конфігурацію `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Невеликі значення `max_call_duration` (наразі встановлено %d) не можуть бути застосовані через технічні обмеження. Фонове завдання виконується лише кожні 5 хвилин, тому використовуйте його на власний ризик.", + "Federation" : "Об'єднання", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Наполегливо рекомендується налаштувати \"memcache.locking\", коли увімкнено Talk Federation.", + "High-performance backend" : "Високопродуктивний бекенд", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Не налаштовано високопродуктивний бекенд - Використання Nextcloud Talk без високопродуктивного бекенду дозволяє лише дуже невеликі дзвінки (максимум 2-3 учасники). Налаштуйте високопродуктивний бекенд, щоб забезпечити безперебійну роботу дзвінків з багатьма учасниками.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Використання високопродуктивного бекенду в режимі «conversation_cluster» є застарілим і більше не буде підтримуватися в наступній версії. Високопродуктивний бекенд зараз підтримує реальне кластеризування, яке слід використовувати замість цього.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Визначення декількох високопродуктивних бекендів є застарілим і більше не буде підтримуватися в наступній версії. Замість цього слід налаштувати балансувальник навантаження разом із кластерними серверами сигналізації та налаштувати його в параметрах Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Збережений відкритий ключ для алгоритму %1$s не збігається зі збереженим закритим ключем. Запустіть %2$s, щоб виправити помилку.", + "High-performance backend not configured correctly. Run %s for details." : "Високопродуктивний бекенд налаштовано неправильно. Запустіть %s для отримання детальної інформації.", + "High-performance backend not configured correctly" : "Високопродуктивний бекенд налаштовано неправильно", + "Error: Cannot connect to server" : "Помилка: Не вдається підключитися до сервера", + "Error: Server did not respond with proper JSON" : "Помилка: Сервер не відповів правильним JSON", + "Error: Certificate expired" : "Помилка: Термін дії сертифіката закінчився", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Помилка: Системний час сервера Nextcloud та високопродуктивного сервера бекенду не синхронізований. Переконайтеся, що обидва сервери підключені до сервера часу, або вручну синхронізуйте їх час.", + "Could not get version" : "Не вдалося отримати версію", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Помилка: Запущена версія: {version}; Сервер потрібно оновити, щоб він був сумісний з цією версією Talk", + "Error: Server responded with: {error}" : "Помилка: Сервер відповів: {error}", + "Error: Unknown error occurred" : "Помилка: Сталася невідома помилка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Попередження: Поточна версія: {version}; Сервер не підтримує всі можливості цієї версії Talk, відсутні функції: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Наполегливо рекомендується налаштувати кеш пам'яті під час запуску Nextcloud Talk з високопродуктивним бекендом.", + "Client Push" : "Клієнтський поштовх", + "Recording backend" : "Бекенд для запису", + "Using the recording backend requires a High-performance backend." : "Використання бекенду для запису вимагає високопродуктивного бекенду.", + "No recording backend configured" : "Не налаштовано бекенд для запису", + "SIP configuration" : "Налаштування SIP", + "Using the SIP functionality requires a High-performance backend." : "Використання функціональності SIP вимагає високопродуктивного бекенда.", + "No SIP backend configured" : "Не налаштовано бекенд SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Недійсна дата, формат дати має бути РРРР-ММ-ДД", + "Conversation not found" : "Розмову не знайдено", + "Path is already shared with this conversation" : "Шлях вже пройдений з цією розмовою", + "Chat, video & audio-conferencing using WebRTC" : "Чат, відео- та аудіоконференції за допомогою WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чат, відео- та аудіоконференції за допомогою WebRTC\n\n* 💬 **Чат** Nextcloud Talk має простий текстовий чат, що дозволяє ділитися або завантажувати файли з програми Nextcloud Files або локального пристрою та згадувати інших учасників.\n* 👥 **Приватні, групові, публічні та захищені паролем дзвінки!** Запросіть когось, цілу групу або надішліть публічне посилання, щоб запросити на дзвінок.\n* 🌐 **Федеративні чати** Чатуйте з іншими користувачами Nextcloud на їхніх серверах\n* 💻 **Спільний доступ до екрана!** Діліться своїм екраном з учасниками дзвінка.\n* 🚀 **Інтеграція з іншими додатками Nextcloud**, такими як Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck та багатьма іншими.\n* 🌉 **Синхронізація з іншими чат-рішеннями** Завдяки інтеграції [Matterbridge](https://github.com/42wim/matterbridge/) у Talk ви можете легко синхронізувати багато інших чат-рішень із Nextcloud Talk і навпаки.", + "Leave call" : "Вийти", + "Navigating away from the page will leave the call in {conversation}" : "При переході зі сторінки виклик залишиться у {conversation}", + "Stay in call" : "Залишатися", + "Error occurred when getting the conversation information" : "Виникла помилка при отриманні інформації про розмову", + "Discuss this file" : "Обговорити цей файл", + "Share this file with others to discuss it" : "Поділітися цим файлом з іншими, щоб обговорити його", + "Share this file" : "Поділитися файлом", + "Join conversation" : "Приєднатися", + "This conversation is password-protected." : "Ця розмова захищена паролем.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Ми виявили кілька невірних спроб введення пароля з вашого IP. Тому ваша наступна спроба буде обмежена до 30 секунд.", + "The password is wrong. Try again." : "Пароль неправильний. Спробуйте ще раз.", + "Password" : "Пароль", + "Submit" : "Гаразд", + "Error requesting the password." : "Помилка при запиті пароля.", + "Request password" : "Запит пароля", + "This conversation has ended" : "Ця розмова завершилася", + "Error occurred when joining the conversation" : "Виникла помилка під час приєднання до розмови", + "Close Talk sidebar" : "Закрити бічну панель", + "Open Talk sidebar" : "Відкрити бічну панель", + "Everyone" : "Всі", + "Users and moderators" : "Учасники та модератори", + "Moderators only" : "Тільки модератори", + "Disable calls" : "Вимкнути дзвінки", + "Save changes" : "Зберегти зміни", + "Saving …" : "Збереження …", + "Saved!" : "Збережено!", + "Limit to groups" : "Обмежити групами", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Якщо вибрано хоча б одну групу, в розмовах можуть брати участь лише користувачі із зазначених груп.", + "Guests can still join public conversations." : "Гості все ще можуть приєднуватися до публічних розмов.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Користувачі, які більше не можуть користуватися чатом, залишаться в списку учасників попередніх розмов, а їхні повідомлення в чаті будуть збережені.", + "Limit using Talk" : "Обмеження на використання Talk", + "Limit creating a public and group conversation" : "Обмежте створення публічних та групових розмов", + "Limit creating conversations" : "Обмеження на створення розмов", + "Limit starting a call" : "Обмеження на початок дзвінка", + "Limit starting calls" : "Обмежити створення викликів", + "When a call has started, everyone with access to the conversation can join the call." : "Після початку виклику будь-хто, хто має доступ до розмови, може приєднатися до конференції.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На цьому сервері встановлені наступні боти. У документації ви можете знайти детальну інформацію про те, як {linkstart1}створити власного бота{linkend} або {linkstart2}список ботів{linkend}, які можна ввімкнути на вашому сервері.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На цьому сервері не встановлено ботів. У документації ви можете знайти детальну інформацію про те, як {linkstart1}створити власного бота{linkend} або {linkstart2}список ботів{linkend}, які можна ввімкнути на вашому сервері.", + "Description is not provided" : "Опис не надається", + "Locked for moderators" : "Заблоковано для модераторів", + "Enabled" : "Увімкнено", + "Disabled" : "Вимкнено", + "Bots settings" : "Налаштування ботів", + "State" : "Стан", + "Name" : "Ім'я", + "Last error" : "Остання помилка", + "Total errors count" : "Загальна кількість помилок", + "Find more bots" : "Знайти більше ботів", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Довірені сервери можна налаштувати на сторінці {linkstart}Налаштування спільного доступу{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Об'єднані чати та дзвінки вже працюють. Робота з вкладеннями буде реалізована в наступній версії.", + "Enable Federation in Talk app" : "Увімкнути застосунок об'єднані хмари для Talk", + "Permissions" : "Дозволи ", + "Allow users to be invited to federated conversations" : "Дозволити користувачам запрошувати вас до розмов з інших хмар", + "Allow users to invite federated users into conversation" : "Дозвольте користувачам запрошувати користувачів з інших хмар до бесіди", + "Only allow to federate with trusted servers" : "Дозволяти об'єднуватися лише з довіреними серверами", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Якщо вибрано хоча б одну групу, тільки люди з перелічених груп можуть запрошувати об'єднаних користувачів до розмов.", + "Groups allowed to invite federated users" : "Групи, яким дозволено запрошувати об'єднаних користувачів", + "Select groups …" : "Виберіть групи ...", + "All messages" : "Всі повідомлення", + "@-mentions only" : "Тільки @-згадки", + "Off" : "Вимкнути", + "General settings" : "Загальні", + "Default notification settings" : "Налаштування сповіщень за замовчуванням", + "Default group notification" : "Сповіщення групи за замовчуванням", + "Default group notification for new groups" : "Сповіщення для нових груп за замовчуванням", + "Integration into other apps" : "Інтеграція з іншими додатками", + "Allow conversations on files" : "Дозволити обговорення файлів", + "Allow conversations on public shares for files" : "Дозволити розмови на спільних ресурсах для файлів", + "End-to-end encrypted calls" : "Наскрізні зашифровані дзвінки", + "Enable encryption" : "Увімкнути шифрування", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Наскрізні зашифровані дзвінки з налаштованим SIP-мостом потребують новішої версії Високопродуктивного бекенду та SIP-мосту.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Наразі мобільні клієнти не підтримують наскрізні зашифровані дзвінки.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "При натисканні на кнопку вище інформація з форми буде відправлена на сервери компанії Struktur AG. Ви можете знайти додаткову інформацію на {linkstart}spreed.eu{linkend}.", + "Pending" : "Очікування", + "Error" : "Помилка", + "Blocked" : "Заблоковано", + "Active" : "Активно", + "Expired" : "Закінчився", + "Never" : "Ніколи", + "The trial could not be requested. Please try again later." : "Не вдалося запросити пробний період використання. Повторіть спробу через деякий час.", + "The account could not be deleted. Please try again later." : "Обліковий запис не вдалося вилучити. Будь ласка, спробуйте пізніше.", + "Hosted High-performance backend" : "Високопродуктивний бекенд на хостингу", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Наш партнер Struktur AG надає послугу, за допомогою якої можна замовити розміщення сервера сигналізації. Для цього вам потрібно лише заповнити форму нижче, і ваш Nextcloud надішле запит. Щойно сервер буде налаштовано для вас, облікові дані будуть заповнені автоматично. При цьому будуть перезаписані існуючі налаштування сервера сигналізації.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Якщо ваш високопродуктивний бекенд-акаунт включає функції STUN і/або TURN, налаштування будуть оновлені відповідно.", + "URL of this Nextcloud instance" : "Посилання на цей сервер хмари Nextcloud", + "Full name of the user requesting the trial" : "Повне ім'я користувача, який запитує пробну версію", + "Email of the user" : "Електронна адреса користувача", + "Language" : "Мова", + "Country" : "Країна", + "Request signaling server trial" : "Запит на пробну версію сервера сигналізації", + "You can see the current status of your hosted signaling server in the following table." : "Ви можете побачити поточний стан вашого сервера сигналізації в наступній таблиці.", + "Status" : "Статус", + "Created at" : "Створено", + "Expires at" : "Термін дії закінчується", + "Limits" : "Обмеження", + "STUN included" : "STUN включено", + "Yes" : "Так", + "No" : "Ні", + "TURN included" : "ТУР включено", + "Delete the signaling server account" : "Вилучити обліковий запис сервера сигналізації", + "_%n user_::_%n users_" : ["%n користувач","%n користувача","%n користувачів","%n користувачів"], + "Installed version: {version}" : "Встановлена версія: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Ви можете встановити застосунок Matterbridge, щоб зв'язати Nextcloud Talk з деякими іншими сервісами, відвідайте їхню {linkstart1}GitHub-сторінку{linkend} для отримання додаткової інформації. Завантаження та встановлення застосунку може зайняти деякий час. Якщо час очікування минув, встановіть його вручну з {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Бінарний файл Matterbridge має неправильні дозволи. Переконайтеся, що бінарний файл Matterbridge належить правильному користувачеві і може бути виконаний. Його можна знайти в «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Бінарний файл Matterbridge не знайдено або не вдалося виконати.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Ви також можете вказати шлях до бінарного файлу Matterbridge в конфігураційному файлі. Для отримання додаткової інформації зверніться до {linkstart}документації з інтеграції Matterbridge{linkend}.", + "Downloading …" : "Отримання ...", + "Install Talk Matterbridge" : "Встановіть Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Виникла помилка під час встановлення застосунку Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Під час інсталяції Talk Matterbridge сталася помилка. Будь ласка, встановіть його вручну", + "Failed to execute Matterbridge binary." : "Не вдалося виконати бінарний файл Matterbridge.", + "Matterbridge integration" : "Інтеграція Matterbridge", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Статус: Перевірка з'єднання", + "OK: Running version: {version}" : "ОК: Запущена версія: {version}", + "Error: Server seems to be a Signaling server" : "Помилка: Здається, що сервер є сервером сигналізації", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Помилка: Системний час сервера Nextcloud та сервера запису не синхронізований. Переконайтеся, що обидва сервери підключені до сервера часу, або вручну синхронізуйте їх час.", + "Recording backend URL" : "Запис URL-адреси бекенду", + "Validate SSL certificate" : "Перевірити сертифікат SSL", + "Delete this server" : "Вилучити цей сервер", + "Test this server" : "Перевірте цей сервер", + "Disabled for all calls" : "Вимкнено для всіх дзвінків", + "Enabled for all calls" : "Ввімкнено для всіх дзвінків", + "Configurable on conversation level by moderators" : "Налаштовується на рівні розмови модераторами", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Налаштування PHP \"upload_max_filesize\" або \"post_max_size\" дозволять завантажувати файли розміром лише до {maxUpload}.", + "Recording backend settings saved" : "Збережено запис налаштувань бекенду", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модератори матимуть право увімкнути згоду на рівні розмови. Згода на запис буде вимагатися від кожного учасника перед тим, як приєднатися до кожного дзвінка в цій розмові.", + "The consent to be recorded will be required for each participant before joining every call." : "Згода на запис буде вимагатися від кожного учасника перед тим, як приєднатися до кожного дзвінка.", + "The consent to be recorded is not required." : "Згода на запис не потрібна.", + "Recording backend configuration is only possible with a High-performance backend." : "Запис конфігурації бекенда можливий лише з Високопродуктивним бекендом.", + "Add a new recording backend server" : "Додати новий сервер бекенд-запису", + "Shared secret" : "Спільний секрет", + "Recording consent" : "Згода на запис", + "Recording transcription" : "Транскрипція запису", + "Automatically transcribe call recordings with a transcription provider" : "Автоматично розшифровуйте записи дзвінків за допомогою постачальника транскрипції", + "Automatically summarize call recordings with transcription and summary providers" : "Автоматично підсумовуйте записи дзвінків за допомогою постачальників транскрипції та резюме", + "SIP configuration saved!" : "Налаштування SIP збережено!", + "SIP configuration is only possible with a High-performance backend." : "Конфігурація SIP можлива тільки з високопродуктивним бекендом.", + "Enable SIP Dial-out option" : "Увімкніть опцію SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Сервер сигналізації необхідно оновити, щоб він підтримував функцію SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Не показувати номер абонента, що дзвонить через SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонімний номер повинен відображатися як «невідомий» або «прихований номер» для абонента, якому дзвонять.", + "Dial-out number" : "Номер для виклику", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Номер у форматі E164, який використовується як резервний номер абонента для вихідних дзвінків", + "Dial-out prefix" : "Префікс вихідного дзвінка", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префікс до налаштованого номера користувача для вихідних дзвінків (за замовчуванням `+`)", + "Restrict SIP configuration" : "Обмеження конфігурації SIP", + "Enable SIP configuration" : "Увімкнути налаштування SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Тільки користувачі наступних груп можуть увімкнути SIP у розмовах, які вони модерують", + "Phone number (Country)" : "Номер телефону (Країна)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ця інформація надсилається в електронних листах-запрошеннях, а також відображається на бічній панелі для всіх учасників.", + "Nextcloud base URL" : "URL-адреса бази Nextcloud", + "Talk Backend URL" : "URL-адреса бекенда для розмови", + "WebSocket URL" : "URL-адреса веб-сокета", + "Available features" : "Доступні функції", + "Error: Websocket connection failed" : "Помилка: Не вдалося з'єднатися з веб-сокетом", + "Error code" : "Код помилки", + "Error message" : "Повідомлення про помилку", + "Error: Websocket connection failed. Check browser console" : "Помилка: Не вдалося з'єднатися з веб-сокетом. Перевірте консоль браузера", + "High-performance backend URL" : "URL-адреса високопродуктивного бекенда", + "Missing High-performance backend warning hidden" : "Відсутнє Високопродуктивний бекенд-попередження приховано", + "High-performance backend settings saved" : "Збережено високопродуктивні налаштування бекенда", + "Nextcloud Talk setup not complete" : "NextНалаштування хмарної розмови не завершено", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Зверніть увагу, що під час дзвінків із більш ніж 2 учасниками без високопродуктивного бекенду учасники, швидше за все, зіткнуться з проблемами підключення та спричинять високе навантаження на пристрої учасників.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Встановіть високопродуктивний бекенд, щоб забезпечити безперебійну роботу дзвінків з кількома учасниками.", + "Nextcloud portal" : "Портал Nextcloud", + "Quick installation guide" : "Короткий посібник з монтажу", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Високопродуктивний бекенд необхідний для дзвінків і розмов з декількома учасниками. Без бекенду всі учасники повинні завантажувати своє відео індивідуально для кожного іншого учасника, що, швидше за все, спричинить проблеми з підключенням і високе навантаження на пристрої учасників.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Наполегливо рекомендується налаштувати розподілений кеш, якщо ви використовуєте Nextcloud Talk з високопродуктивним бекендом.", + "Add High-performance backend server" : "Додати Високопродуктивний сервер бекенда", + "Warn about connectivity issues in calls with more than 2 participants" : "Попередження про проблеми зі з'єднанням під час дзвінків з більш ніж 2 учасниками", + "STUN server URL" : "URL-адреса сервера STUN", + "The server address is invalid" : "Адреса сервера є недійсною", + "STUN settings saved" : "Налаштування STUN збережено", + "STUN servers" : "Сервер STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-сервер використовується для визначення публічної IP-адреси учасників за маршрутизатором.", + "Add a new STUN server" : "Додати новий сервер STUN", + "{schema} scheme must be used with a domain" : "{schema} схема повинна використовуватися з доменом", + "{option1} and {option2}" : "{option1} і {option2}", + "{option} only" : "{option} тільки", + "OK: Successful ICE candidates returned by the TURN server" : "ГАРАЗД: Успішні кандидати ICE повернуті сервером TURN", + "Error: No working ICE candidates returned by the TURN server" : "Помилка: Сервер TURN не повернув жодного робочого кандидата ICE", + "Testing whether the TURN server returns ICE candidates" : "Тестування, чи повертає сервер TURN кандидатів на ICE", + "TURN server schemes" : "Схеми серверів TURN", + "TURN server URL" : "URL-адреса сервера TURN", + "TURN server secret" : "Секрет сервера TURN", + "TURN server protocols" : "Протоколи сервера TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Сервер TURN використовується для проксі-передачі трафіку від учасників, які знаходяться за брандмауером. Якщо окремі учасники не можуть підключитися до інших, найімовірніше, необхідний сервер TURN. Інструкції з налаштування див. у {linkstart} цій документації{linkend}.", + "TURN settings saved" : "Налаштування TURN збережено", + "TURN servers" : "Сервери TURN", + "Add a new TURN server" : "Додати новий сервер TURN", + "Failed" : "Не вдалося", + "OK" : "Гаразд", + "Checking …" : "Перевірка...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Не вдалося: WebAssembly вимкнено або не підтримується в цьому браузері. Увімкніть WebAssembly або скористайтеся браузером, який його підтримує, щоб виконати перевірку.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Не вдалося: Файли \".wasm\" і \".tflite\" некоректно повернуто веб-сервером. Будь ласка, перевірте розділ \"Системні вимоги\" в документації Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файли \".wasm\" і \".tflite\" коректно повернуто веб-сервером.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Схоже, що конфігурація PHP та Apache несумісні. Зверніть увагу, що PHP можна використовувати лише з модулем MPM_PREFORK, а PHP-FPM — лише з модулем MPM_EVENT.", + "Web server setup checks" : "Перевірка налаштувань веб-сервера", + "Files required for virtual background can be loaded" : "Файли, необхідні для віртуального фону, можна завантажити", + "Federated user" : "Обʼєднаний користувач", + "Assign participants to rooms" : "Розподіліть учасників по кімнатах", + "Configure breakout rooms" : "Налаштування секційних кімнат", + "Number of breakout rooms" : "Кількість секційних кімнат", + "You can create from 1 to 20 breakout rooms." : "Ви можете створити від 1 до 20 секційних кімнат.", + "Assignment method" : "Метод призначення", + "Automatically assign participants" : "Автоматичне призначення учасників", + "Manually assign participants" : "Призначайте учасників вручну", + "Allow participants to choose" : "Дозволити учасникам обирати", + "Create rooms" : "Створити кімнати", + "Confirm" : "Підтвердити", + "Create breakout rooms" : "Створіть кімнати для переговорів", + "Reset" : "Скидання", + "Delete breakout rooms" : "Видалити окремі кімнати", + "Room {roomNumber}" : "Кімната {roomNumber}", + "Current breakout rooms and settings will be lost" : "Поточні кімнати та налаштування будуть втрачені", + "Cancel" : "Скасувати", + "Unassigned participants" : "Непризначені учасники", + "Back" : "Назад", + "Assign" : "Призначити", + "Add participant \"{user}\"" : "Додати учасника \"{user}\"", + "Now" : "Зараз", + "Invalid calendar selected" : "Вибрано невірний календар", + "Invalid start time selected" : "Вибрано невірний час запуску", + "Invalid end time selected" : "Вибрано невірний час закінчення", + "Unknown error occurred" : "Виникла невідома помилка", + "Sending no invitations" : "Не надсилати запрошення", + "{participant0} will receive an invitation" : "{participant0} отримають запрошення", + "{participant0} and {participant1} will receive invitations" : "{participant0} та {participant1} отримають запрошення", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення"], + "Invite {user}" : "Запросити {user}", + "Invite all users and emails in this conversation" : "Запросіть усіх користувачів та адреси електронної пошти до цієї розмови", + "Meeting created" : "Зустріч створено", + "Upcoming meetings" : "Найближчі зустрічі", + "Loading …" : "Завантаження …", + "No upcoming meetings" : "Немає найближчих зустрічей", + "Schedule a meeting" : "Заплануйте зустріч", + "Meeting title" : "Назва зустрічі", + "From" : "Від", + "To" : "Кому", + "Calendar" : "Календар", + "Attendees" : "Учасники", + "No other participants to send invitations to." : "Інших учасників, яким потрібно надсилати запрошення, немає.", + "Add attendees" : "Додати учасників", + "Save" : "Зберегти", + "Search participants" : "Пошук учасників", + "No results" : "Немає результатів", + "Done" : "Готово", + "Disable live transcription" : "Вимкнути транскрипцію в прямому ефірі", + "Raise hand" : "Підняти руку", + "Raise hand (R)" : "Підняти руку (R)", + "Lower hand" : "Опустити руку", + "Lower hand (R)" : "Нижня рука (R)", + "Exit full screen (F)" : "Вийти з повноекранного режиму (F)", + "Full screen (F)" : "На весь екран (F)", + "Speaker view" : "Вигляд динаміка", + "Grid view" : "Упорядкування у формі сітки", + "Error when trying to load the available live transcription languages" : "Помилка при спробі завантажити доступні мови транскрипції в реальному часі", + "Failed to enable live transcription" : "Не вдалося увімкнути транскрипцію в реальному часі", + "Recording consent is required" : "Згода на запис необхідна", + "This conversation is read-only" : "Ця розмова призначена лише для читання", + "Conversation not found or not joined" : "Розмова не знайдена або не приєднана", + "Lobby is still active and you're not a moderator" : "Лобі все ще активне, а ви не є модератором", + "Connection failed" : "Не вдалося встановити з'єднання", + "Reload" : "Перезавантажити", + "{nickName} raised their hand." : "{nickName} підняв руку.", + "A participant raised their hand." : "Один з учасників підняв руку.", + "Collapse stripe" : "Смуга згортання", + "Expand stripe" : "Розгорнути смугу", + "Previous page of videos" : "Попередня сторінка відео", + "Next page of videos" : "Наступна сторінка відео", + "Connecting …" : "Підключення ...", + "Calling …" : "Викликаю...", + "Waiting for {user} to join the call" : "Чекаємо на {user}, щоб долучитися до конкурсу", + "Waiting for others to join the call …" : "Чекаємо, доки хтось приєднається до виклику...", + "You can invite others in the participant tab of the sidebar" : "Ви можете запросити користувачів у вкладці учасники на бічній панелі", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ви можете запросити користувачів у вкладці учасники на бічній панелі або поділитися цим посиланням, щоб запросити інших!", + "Share this link to invite others!" : "Поділіться цим посиланням з тими, кого бажаєте запросити!", + "Copy link" : "Копіювати посилання", + "You are not allowed to enable audio" : "Ви не маєте права вмикати аудіо", + "No audio. Click to select device" : "Немає звуку. Натисніть, щоб вибрати пристрій", + "Mute audio" : "Вимкнути мікрофон (m)", + "Mute audio (M)" : "Вимкнути звук (M)", + "Unmute audio" : "Увімкнути мікрофон", + "Unmute audio (M)" : "Увімкнути звук (M)", + "None" : "Відсутній", + "Select a microphone" : "Виберіть мікрофон", + "Select a speaker" : "Виберіть динамік", + "Check devices" : "Перевірте пристрої", + "Access to camera was denied" : "Доступ до камери було заборонено", + "Error while accessing camera: It is likely in use by another program" : "Помилка під час доступу до камери: Ймовірно, вона використовується іншою програмою", + "Error while accessing camera" : "Помилка під час доступу до камери", + "You have been muted by a moderator" : "Ви були приглушені модератором", + "Hide presenter video" : "Приховати відео ведучого", + "You are not allowed to enable video" : "Ви не маєте права вмикати відео", + "No video. Click to select device" : "Немає відео. Натисніть, щоб вибрати пристрій", + "Disable video" : "Вимкнути відео", + "Disable video (V)" : "Вимкнути відео (V)", + "Enable video" : "Увімкнути відео", + "Enable video (V)" : "Увімкнути відео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео - Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео (V) - Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео. Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Select a video device" : "Виберіть відеопристрій", + "Show presenter" : "Ведучий шоу", + "You" : "Ви", + "Mute" : "Вимкнути звук", + "Muted" : "Без звуку.", + "Show screen" : "Демонстрація екрану", + "Stop following" : "Припиніть стежити", + "Connection could not be established …" : "Не вдалося встановити з'єднання ...", + "Connection was lost and could not be re-established …" : "З'єднання було втрачено і не вдалося відновити ...", + "Connection could not be established. Trying again …" : "Не вдалося встановити з'єднання. Повторна спроба ...", + "Connection lost. Trying to reconnect …" : "З'єднання втрачено. Спроба повторного підключення ...", + "Connection problems …" : "Проблеми з підключенням ...", + "Collapse" : "Згорнути", + "Expand" : "Розгорнути", + "You need to be logged in to upload files" : "Для завантаження файлів потрібно авторизуватися", + "Drop your files to upload" : "Перетягнути файли для завантаження", + "Conversation messages" : "Розмовні повідомлення", + "Scroll to bottom" : "Прокрутіть донизу", + "Post message" : "Опублікувати повідомлення", + "Federated conversation" : "Федеративна розмова", + "Public conversation" : "Публічна розмова", + "Favorite" : "Із зірочкою", + "Banned users" : "Заборонені користувачі", + "Manage the list of banned users in this conversation." : "Керуйте списком заблокованих користувачів у цій розмові.", + "Manage bans" : "Керування заборонами", + "No banned users" : "Немає заборонених користувачів", + "Banned by:" : "Заборонено:", + "Date:" : "Дата:", + "Note:" : "Примітка:", + "Hide details" : "Приховати деталі", + "Show details" : "Показати деталі", + "Unban" : "Розбан", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Ви можете змінити назву та опис в {linkstart}Календар{linkend}.", + "Error while updating conversation name" : "Помилка під час оновлення назви розмови", + "Error while updating conversation description" : "Помилка під час оновлення опису розмови", + "Enter a name for this conversation" : "Введіть назву для цієї розмови", + "Edit conversation name" : "Редагувати назву розмови", + "Edit conversation description" : "Редагувати опис розмови", + "Enter a description for this conversation" : "Введіть опис для цієї розмови", + "Picture" : "Зображення", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У цій розмові можна увімкнути наступні боти. Зверніться до адміністрації, щоб встановити на цьому сервері більше ботів.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На цьому сервері не встановлено ботів. Зверніться до своєї адміністрації, щоб встановити ботів на цьому сервері.", + "Disable" : "Вимкнути", + "Enable" : "Увімкнути", + "Breakout rooms" : "Кімнати обговорення", + "Manage breakout rooms" : "Керуйте секційними кімнатами", + "Set up breakout rooms for this conversation" : "Організуйте окремі кімнати для цієї розмови", + "Please select a valid PNG or JPG file" : "Будь ласка, виберіть правильний файл у форматі PNG або JPG", + "Choose your conversation picture" : "Виберіть картинку для розмови", + "Choose" : "Вибрати", + "Error setting conversation picture" : "Помилка встановлення картинки розмови", + "Could not set the conversation picture: {error}" : "Не вдалося встановити картинку розмови: {error}", + "Error cropping conversation picture" : "Помилка обрізання картинки розмови", + "Error removing conversation picture" : "Помилка видалення зображення розмови", + "Set emoji as conversation picture" : "Встановіть емодзі як картинку для розмови", + "Set background color for conversation picture" : "Задати колір фону для зображення розмови", + "Upload conversation picture" : "Завантажити фотографію розмови", + "Choose conversation picture from files" : "Виберіть картинку для розмови з файлів", + "Remove conversation picture" : "Видалити фотографію розмови", + "The file must be a PNG or JPG" : "Файл у форматі PNG або JPG", + "Set picture" : "Встановлене зображення", + "Default permissions modified for {conversationName}" : "Дозволи за замовчуванням змінено для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не вдалося змінити дозволи за замовчуванням для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Відредагуйте дозволи за замовчуванням для учасників цієї бесіди. Ці налаштування не впливають на модераторів.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "При кожній зміні дозволів у цьому розділі дозволи користувачів, які було призначено окремим учасникам, будуть втрачені.", + "All permissions" : "Усі дозволи", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учасники мають дозволи на початок дзвінка, приєднання до дзвінка, увімкнення аудіо та відео, а також спільний доступ до екрана.", + "Restricted" : "Обмежена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учасники можуть приєднуватися до дзвінків, але не можуть увімкнути аудіо, відео або надати спільний доступ до екрану, поки модератор вручну не надасть їм відповідні дозволи.", + "Advanced permissions" : "Розширені дозволи", + "Edit permissions" : "Редагування дозволів", + "Conversation settings" : "Налаштування розмови", + "Basic Info" : "Основна інформація", + "Personal" : "Особисте", + "Moderation" : "Модерація", + "Setup overview" : "Огляд налаштувань", + "Live transcription" : "Транскрипція наживо", + "Enable live transcription" : "Ввімкнути транскрипцію в прямому ефірі", + "Breakout Rooms" : "Секційні кімнати", + "Matterbridge" : "Маттербрідж", + "Bots" : "Боти", + "Danger zone" : "Небезпечна зона", + "Archive conversation" : "Архівна розмова", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архівні розмови за замовчуванням приховані зі списку розмов. Однак вони все одно будуть відображатися, коли ви шукаєте назву розмови або переходите до списку архівних розмов.", + "Do you really want to leave \"{displayName}\"?" : "Ви дійсно хочете покинути \"{displayName}\"?", + "You can archive this conversation instead." : "Замість цього ви можете заархівувати цю розмову.", + "Leave conversation" : "Залишити спілкування", + "You need to promote a new moderator before you can leave the conversation" : "Перед тим, як вийти з розмови, вам потрібно призначити нового модератора", + "Delete conversation" : "Вилучити розмову", + "Do you really want to delete \"{displayName}\"?" : "Дійсно вилучити \"{displayName}\"?", + "Error while deleting conversation" : "Помилка при видаленні розмови", + "Delete all chat messages" : "Вилучити всі повідомлення чату", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ви дійсно хочете видалити всі повідомлення в \"{displayName}\"?", + "Error while clearing chat history" : "Помилка під час очищення історії чату", + "Be careful, these actions cannot be undone." : "Будьте обережні, ці дії не можна скасувати.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Якщо ви вийшли з бесіди, щоб знову приєднатися до закритої бесіди, потрібно буде отримати запрошення. До відкритої бесіди можна приєднатися в будь-який час.", + "Permanently delete this conversation." : "Назавжди вилучити цю розмову.", + "Delete chat messages" : "Вилучити повідомлення чату", + "Permanently delete all the messages in this conversation." : "Назавжди вилучити всі повідомлення в цій розмові.", + "_%n hour_::_%n hours_" : ["%n година","%n години ","%n годин","%n годин"], + "_%n day_::_%n days_" : ["%n день","%n днів","%n днів","%n днів"], + "_%n week_::_%n weeks_" : ["%n день","%n тижнів","%n тижнів","%n тижнів"], + "Custom expiration time" : "Індивідуальний термін придатності", + "Message expiration disabled" : "Вимкнено закінчення терміну дії повідомлення", + "Message expiration set: {duration}" : "Встановлено термін дії повідомлення: {duration}", + "Error when trying to set message expiration" : "Помилка при спробі встановити термін дії повідомлення", + "Message expiration" : "Термін дії повідомлення", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Повідомлення чату можна буде вилучити через певний час. Зверніть увагу, файли, які було надіслано в чаті, не будуть вилучені для автора, але більше не будуть доступні в розмові.", + "Set message expiration" : "Встановити термін дії повідомлення", + "Current message expiration" : "Термін дії поточного повідомлення закінчився", + "Password copied to clipboard" : "Пароль скопійовано до буфера обміну", + "Password could not be copied" : "Не вдалося скопіювати пароль", + "Guest access" : "Гостьовий доступ", + "Breakout rooms are not allowed in public conversations." : "Під час публічних розмов заборонено користуватися кімнатами для переговорів.", + "Allow guests to join this conversation via link" : "Дозволити гостям приєднатися до цієї розмови за посиланням", + "Password protection" : "Захист паролем", + "This conversation is password-protected. Guests need password to join" : "Ця розмова захищена паролем. Гостям потрібен пароль, щоб приєднатися", + "Password protection is needed for public conversations" : "Захист паролем потрібний для публічних розмов", + "Set a password" : "Встановити пароль", + "Change password" : "Змінити пароль", + "Enter new password" : "Введіть новий пароль", + "Save password" : "Зберегти пароль", + "Copy password" : "Скопіювати пароль", + "Guests are allowed to join this conversation via link" : "Гості можуть долучитися до дискусії за посиланням", + "Guests are not allowed to join this conversation" : "Гостям не дозволяється приєднуватися до цієї розмови", + "Resend invitations" : "Повторно надіслати запрошення", + "This conversation is open to both registered users and users created with the Guests app" : "Ця розмова відкрита як для зареєстрованих користувачів, так і для користувачів, створених за допомогою програми \"Гості", + "This conversation is open to registered users" : "Ця розмова відкрита для зареєстрованих користувачів", + "This conversation is limited to the current participants" : "Ця розмова обмежена поточними учасниками", + "You opened the conversation to both registered users and users created with the Guests app" : "Ви відкрили бесіду як для зареєстрованих користувачів, так і для користувачів, створених за допомогою програми \"Гості", + "Error occurred when opening or limiting the conversation" : "Виникла помилка при відкритті або обмеженні розмови", + "Open conversation to registered users, showing it in search results" : "Відкрити бесіду для зареєстрованих користувачів, показуючи її в результатах пошуку", + "Also open to users created with the Guests app" : "Також відкрито для користувачів, створених у додатку \"Гості", + "Open conversation" : "Відкрита розмова", + "Set language spoken in calls" : "Налаштування мови дзвінків", + "Languages could not be loaded" : "Не вдалося завантажити мови", + "Loading languages …" : "Завантаження мов ...", + "Invalid language" : "Недійсний вибір мови", + "Default language (English)" : "Мова за замовчуванням (англійська)", + "Default live transcription language set" : "За замовчуванням встановлено мову транскрипції в прямому ефірі", + "Live transcription language set: {languageName}" : "Набір мов транскрипції в реальному часі: {languageName}", + "Error when trying to set live transcription language" : "Помилка при спробі встановити мову транскрипції в реальному часі", + "Start time: {date}" : "Початок: {date}", + "Start time has been updated" : "Час початку оновлено", + "Error occurred while updating start time" : "Виникла помилка під час оновлення часу запуску", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Увімкнення лобі вилучить з поточної розмови немодераторів.", + "Enable lobby, restricting the conversation to moderators" : "Увімкнути лобі, обмеживши розмову модераторами", + "Meeting start time" : "Час початку зустрічі", + "Start time (optional)" : "Час початку (за бажанням)", + "Import email participants" : "Імпортувати імейли учасників", + "You can import a list of email participants from a CSV file." : "Ви можете імпортувати список учасників розсилки з файлу CSV.", + "Poll drafts" : "Чернетки опитувань", + "Browse poll drafts" : "Переглянути чернетки опитувань", + "Error occurred when locking the conversation" : "Виникла помилка при блокуванні розмови", + "Error occurred when unlocking the conversation" : "Виникла помилка при розблокуванні розмови", + "Lock conversation" : "Заблокувати розмову", + "This will also terminate the ongoing call." : "Це також призведе до завершення поточного виклику.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Блокування розмови, щоб заборонити будь-кому публікувати повідомлення або починати розмову", + "Edit" : "Редагувати", + "More information" : "Докладно", + "Delete" : "Вилучити", + "Add new bridged channel to current conversation" : "Додати новий мостовий канал до поточної розмови", + "unknown state" : "невідомий стан", + "running" : "біг", + "not running, check Matterbridge log" : "не працює, перевірте журнал Matterbridge", + "not running" : "не бігаю.", + "Bridge saved" : "Міст збережено.", + "You can bridge channels from various instant messaging systems with Matterbridge." : "За допомогою Matterbridge ви можете об'єднати канали з різних систем обміну повідомленнями.", + "More info on Matterbridge" : "Більше інформації про Matterbridge", + "Messaging systems" : "Системи обміну повідомленнями", + "Enable bridge" : "Увімкнути міст", + "Show Matterbridge log" : "Показати журнал Matterbridge", + "Log content" : "Вміст журналу", + "Only moderators are allowed to mention @all" : "Тільки модератори можуть згадувати @all", + "All participants are allowed to mention @all" : "Всім учасникам дозволяється згадувати @all", + "Participants are now allowed to mention @all." : "Учасникам тепер дозволено згадувати @all.", + "Mentioning @all has been limited to moderators." : "Згадування @all дозволено лише модераторам.", + "Allow participants to mention @all" : "Дозволити учасникам згадувати @all", + "Mention permissions" : "Дозволи", + "Notifications" : "Сповіщення", + "Notify about calls in this conversation" : "Сповіщати про дзвінки в цій розмові", + "Important conversation" : "Важлива розмова", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус користувача \"Не турбувати\" ігнорується для важливих розмов", + "Sensitive conversation" : "Делікатна розмова", + "Message preview will be disabled in conversation list and notifications" : "Попередній перегляд повідомлень буде вимкнено у списку розмов та сповіщеннях", + "Recording consent is required for calls in this conversation" : "Згода на запис необхідна для дзвінків у цій розмові", + "Recording consent is not required for calls in this conversation" : "Згода на запис не потрібна для дзвінків у цій розмові", + "Recording consent requirement was updated" : "Оновлено вимогу щодо згоди на запис", + "Error occurred while updating recording consent" : "Виникла помилка під час оновлення згоди на запис", + "Recording Consent" : "Запис згоди", + "Recording consent cannot be changed once a call or breakout session has started." : "Згоду на запис не можна змінити після початку дзвінка або секційної сесії.", + "Require recording consent before joining call in this conversation" : "Вимагати згоди на запис перед тим, як приєднатися до розмови в цій розмові", + "Recording consent is required for all calls" : "Згода на запис необхідна для всіх дзвінків", + "SIP dial-in is now possible without PIN requirement" : "SIP-додзвін тепер можливий без запиту PIN-коду", + "SIP dial-in is now enabled" : "SIP-додзвін увімкнено", + "SIP dial-in is now disabled" : "SIP-додзвін вимкнено", + "Error occurred when enabling SIP dial-in" : "Виникла помилка під час увімкнення SIP-дозвону", + "Error occurred when disabling SIP dial-in" : "Виникла помилка при відключенні SIP-дозвону", + "Phone and SIP dial-in" : "Телефонний та SIP-додзвін", + "Enable phone and SIP dial-in" : "Увімкніть телефон і SIP-додзвін", + "Allow to dial-in without a PIN" : "Дозвіл на вхід без PIN-коду", + "Ongoing" : "Триває", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n осіб прийнято","%n осіб прийнято","%n осіб прийнято","%n осіб прийнято"], + "_%n person declined_::_%n people declined_" : ["%n осіб відмовилися","%n людей відмовилися","%n людей відмовилися","%n людей відмовилися"], + "_and %n other attachment_::_and %n other attachments_" : ["та %n інших вкладень","та %n інших вкладень","та %n інших вкладень","та %n інших вкладень"], + "With {displayName}" : "З {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Переглянути вкладення", + "Join" : "Приєднатися", + "View conversation" : "Переглянути розмову", + "View event on Calendar" : "Переглянути подію в Календарі", + "Error while creating the conversation" : "Помилка під час створення розмови", + "Hello, {displayName}" : "Вітання, {displayName}", + "Start meeting now" : "Почати зустріч", + "Give your meeting a title" : "Дайте назву вашій зустрічі", + "Create and copy link" : "Посилання на зустріч", + "Create a new conversation" : "Створити нову розмову", + "Join open conversations" : "Приєднуйтесь до відкритих розмов", + "Call a phone number" : "Зателефонуйте за номером телефону", + "Scroll backward" : "Прокрутити назад", + "Scroll forward" : "Прокрутити вперед", + "Schedule meetings" : "Заплануйте зустрічі", + "You don't have any upcoming meetings" : "У вас немає найближчих зустрічей", + "Open calendar" : "Відкрити календар", + "Unread mentions" : "Непрочитані згадки", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Тут з'являться повідомлення, в яких вас згадували. Ви можете згадати людей, набравши @, а потім їхнє ім'я", + "Upcoming reminders" : "Найближчі нагадування", + "Message reminders" : "Нагадування про повідомлення", + "Set a reminder on a message to be notified" : "Налаштування нагадування про повідомлення для сповіщення", + "Start a group conversation" : "Почніть групову розмову", + "Create conversation" : "Створити розмову", + "Enter your name" : "Зазначте ваше ім'я", + "Submit name and join" : "Введіть ім'я та приєднуйтесь", + "Do you already have an account?" : "У вас вже є обліковий запис?", + "Log in" : "Увійти", + "Error while verifying uploaded file" : "Помилка при перевірці завантаженого файлу", + "Uploaded file is verified" : "Завантажений файл перевірено", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Формат вмісту — значення, розділені комами (CSV):
- Заголовок рядка є обов'язковим і повинен відповідати«name», «email»або просто«email»
- Один запис на рядок (наприклад, «John Doe», «john@example.tld»)", + "Participants added successfully" : "Учасники успішно додані", + "Error while adding participants" : "Помилка під час додавання учасників", + "Import a file" : "Імпорт файлу", + "Browse" : "Переглянути", + "Verifying uploaded file …" : "Перевірка завантаженого файлу ...", + "This might take a moment" : "Це може зайняти деякий час", + "Send invitations" : "Надсилайте запрошення", + "_%n invalid email_::_%n invalid emails_" : ["%n невірна адреса електронної пошти","%n недійсних імейлів","%n недійсних імейлів","%n недійсних імейлів"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n імейл вже імпортовано або є дублікатом","%n імейлів вже імпортовано або є дублікати","%n імейлів вже імпортовано або є дублікати","%n імейлів вже імпортовано або є дублікати"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n запрошень може бути надіслано","Можна надіслати %n запрошень","Можна надіслати %n запрошень","Можна надіслати %n запрошень"], + "An error occurred while calling a phone number" : "Виникла помилка під час дзвінка на номер телефону", + "Phone number could not be called: {error}" : "Не вдалося додзвонитися за номером телефону: {error}", + "Phone number could not be called" : "За номером телефону не вдалося додзвонитися", + "Search participants or phone numbers" : "Пошук учасників або номерів телефонів", + "Creating the conversation …" : "Створення розмови ...", + "Mark as read" : "Відмітити прочитаним", + "Mark as unread" : "Позначити не прочитаним", + "Remove from favorites" : "Прибрати зірочку", + "Add to favorites" : "Додати зірочку", + "Unarchive conversation" : "Неархівована розмова", + "Ignore \"Do not disturb\"" : "Ігнорувати \"Не турбувати\"", + "You need to promote a new moderator before you can leave the conversation." : "Перед тим, як вийти з розмови, вам потрібно призначити нового модератора.", + "Conversation actions" : "Розмовні дії", + "Notify about calls" : "Сповіщати про дзвінки", + "Hide message text" : "Приховати текст повідомлення", + "Pending invitations" : "Очікують на запрошення", + "From {user} at {remoteServer}" : "Від {user} за адресою {remoteServer}", + "Decline invitation" : "Відхилити запрошення", + "Accept invitation" : "Прийняти запрошення", + "No pending invitations" : "Немає очікуваних запрошень", + "Home" : "Домівка", + "Unread" : "Непрочитане", + "Mentions" : "Згадки", + "Meetings" : "Зустрічі", + "Alphabetically" : "Назва", + "No followed threads" : "Немає потоків, за якими слідкують", + "No matches found" : "Збігів не знайдено", + "No conversations found" : "Розмов не знайдено", + "You have no archived conversations." : "У вас немає архівних розмов.", + "Subscribe to an existing thread or start your own." : "Підпишіться на існуючу тему або створіть власну.", + "You have no unread mentions." : "У вас немає непрочитаних згадок.", + "You have no unread messages." : "У вас немає непрочитаних повідомлень.", + "An error occurred while performing the search" : "Помилка під час пошуку", + "Conversation list" : "Список розмов", + "Filter conversations by" : "Фільтруйте розмови за", + "Unread messages" : "Непрочитані повідомлення", + "Meeting conversations" : "Розмови на зустрічах", + "Clear filters" : "Очистити фільтри", + "New personal note" : "Нова особиста нотатка", + "Back to conversations" : "Повернемося до розмов", + "Archived conversations" : "Архівні розмови", + "Threads" : "Гілки", + "Clear filter" : "Очистити фільтр", + "Show more threads" : "Показати більше тем", + "App settings" : "Налаштування", + "Users" : "Користувачі", + "Groups" : "Групи", + "Teams" : "Команди", + "Federated users" : "Об'єднані користувачі", + "New private conversation" : "Нова приватна розмова", + "Other sources" : "Інші джерела", + "Open conversations" : "Відкрити розмови", + "No search results" : "Нічого не знайдено", + "Users, groups and teams" : "Користувачі, групи та команди", + "Users and groups" : "Користувачі та групи", + "Users and teams" : "Користувачі та команди", + "Groups and teams" : "Групи та команди", + "New group conversation" : "Нова групова розмова", + "The meeting will start soon" : "Зустріч незабаром розпочнеться", + "This meeting is scheduled for {startTime}" : "Ця зустріч запланована на {startTime}", + "You are currently waiting in the lobby" : "Чекаємо на схвалення доступу", + "Select microphone" : "Виберіть мікрофон", + "No microphone available" : "Мікрофон відсутній", + "Select speaker" : "Виберіть спікера", + "No speaker available" : "Спікер відсутній", + "Select camera" : "Виберіть камеру", + "No camera available" : "Камера відсутня", + "Select a device" : "Вибрати пристрій", + "Playing …" : "Граю...", + "Test speakers" : "Тестові колонки", + "Test" : "Тест ", + "Devices" : "Пристрої", + "Backgrounds" : "Передумови", + "No audio" : "Вимкнути мікрофон", + "No camera" : "Вимкнути камеру", + "Display video as you will see it (mirrored)" : "Відображати відео так, як ви його побачите (у дзеркальному відображенні)", + "Display video as others will see it" : "Відображайте відео так, як його побачать інші", + "Calls are not supported in your browser" : "Дзвінки не підтримуються у вашому браузері", + "Access to microphone is only possible with HTTPS" : "Доступ до мікрофона можливий лише за допомогою HTTPS", + "Access to microphone was denied" : "У доступі до мікрофону було відмовлено", + "Error while accessing microphone" : "Помилка під час доступу до мікрофона", + "Access to camera is only possible with HTTPS" : "Доступ до камери можливий лише через безпечний протокол HTTPS", + "The call is being recorded." : "Розмова записується.", + "The call might be recorded." : "Дзвінок може бути записаний.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запис може містити ваш голос, відео з камери та скріншот. Перед тим, як приєднатися до дзвінка, потрібна ваша згода.", + "Give consent to the recording of this call" : "Дайте згоду на запис цього дзвінка", + "Show more info" : "Показати більше інформації", + "Audio is not available" : "Аудіо недоступне", + "Video is not available" : "Відео недоступне", + "Start recording immediately with the call" : "Почніть запис одразу після дзвінка", + "Notify all participants about this call" : "Повідомте всіх учасників про цей дзвінок", + "Apply settings" : "Застосувати налаштування", + "Select virtual office background" : "Виберіть фон віртуального офісу", + "Select virtual home background" : "Виберіть фон віртуального будинку", + "Select virtual abstract background" : "Виберіть віртуальний абстрактний фон", + "Select virtual beach background" : "Виберіть віртуальне тло пляжу", + "Select virtual park background" : "Виберіть фон віртуального парку", + "Select virtual theater background" : "Виберіть фон віртуального театру", + "Select virtual library background" : "Виберіть фон віртуальної бібліотеки", + "Select virtual space station background" : "Виберіть фон віртуальної космічної станції", + "Error while uploading the file" : "Помилка під час завантаження файлу", + "Select a file" : "Виберіть файл", + "Invalid path selected" : "Вибрано неправильний шлях", + "Select virtual background from file {fileName}" : "Виберіть віртуальний фон з файлу {fileName}", + "Blur" : "Розмиття", + "Upload" : "Завантажити", + "Files" : "Робота з файлами", + "(editing)" : "(редагування)", + "(edited)" : "(відредаговано)", + "The message has expired or has been deleted" : "Термін дії повідомлення закінчився або його було видалено", + "Cancel quote" : "Скасувати пропозицію", + "24 hours" : "24 години", + "7 days" : "7 днів", + "Clear reminder – {timeLocale}" : "Чітке нагадування - {timeLocale}", + "Edited by {actor}" : "За редакцією {actor}", + "Message text copied to clipboard" : "Текст повідомлення скопійовано до буфера обміну", + "Message text could not be copied" : "Текст повідомлення не вдалося скопіювати", + "Message forwarded to \"Note to self\"" : "Повідомлення перенаправлено до \"Примітки для себе\"", + "Error while forwarding message to \"Note to self\"" : "Помилка при пересиланні повідомлення до \"Примітки для себе\"", + "A reminder was successfully removed" : "Нагадування успішно видалено", + "Error occurred when removing a reminder" : "Виникла помилка при видаленні нагадування", + "A reminder was successfully set at {datetime}" : "Нагадування було успішно встановлено за адресою {datetime}", + "Error occurred when creating a reminder" : "Виникла помилка при створенні нагадування", + "Add a reaction to this message" : "Додати реакцію на це повідомлення", + "Reply" : "Відповісти", + "More actions" : "Більше дій", + "Set reminder" : "Встановити нагадування", + "Reply privately" : "Відповісти у приватній розмові", + "Edit message" : "Редагувати повідомлення", + "Copy message" : "Скопіювати повідомлення", + "Copy message link" : "Скопіювати посилання на повідомлення", + "Go to file" : "Перейти до файлу", + "Download file" : "Звантажити файл", + "Go to thread" : "Перейти до теми", + "Edit thread details" : "Редагування деталей теми", + "Forward message" : "Переадресоване повідомлення", + "Translate" : "Перекласти", + "Set custom reminder" : "Встановити власне нагадування", + "Close reactions menu" : "Закрити меню реакцій", + "React with {emoji}" : "Відреагувати з {emoji}", + "React with another emoji" : "Відреагувати з іншою {emoji}", + "Choose a conversation to forward the selected message." : "Виберіть розмову, щоб переслати вибране повідомлення.", + "Error while forwarding message" : "Помилка під час пересилання повідомлення", + "The message has been forwarded to {selectedConversationName}" : "Повідомлення було надіслано на адресу {selectedConversationName}", + "Dismiss" : "Припинити", + "Go to conversation" : "Перейти до розмови", + "Detect language" : "Визначити мову", + "The message could not be translated" : "Повідомлення не вдалося перекласти", + "Translation copied to clipboard" : "Переклад скопійовано до буфера обміну", + "Translation could not be copied" : "Переклад не можна копіювати", + "Translate message" : "Перекласти повідомлення", + "Source language to translate from" : "Мова оригіналу для перекладу", + "Translate from" : "Перекласти з", + "Target language to translate into" : "Цільова мова для перекладу", + "Translate to" : "Перекласти", + "Translating" : "Переклад", + "Copy translated text" : "Скопіювати перекладений текст", + "Send now" : "Надіслати зараз", + "Message read by everyone who shares their reading status" : "Повідомлення читають усі, хто ділиться своїм статусом читання", + "Message sent" : "Повідомлення відправлено", + "Sent without notification" : "Відправлено без попередження", + "Deleting message" : "Видалення повідомлення", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Повідомлення успішно видалено, але бот або Matterbridge налаштовано, і повідомлення вже може бути розповсюджено на інші сервіси", + "Message deleted successfully" : "Повідомлення успішно видалено", + "Message could not be deleted because it is too old" : "Повідомлення не вдалося видалити, оскільки воно занадто старе", + "Only normal chat messages can be deleted" : "Вилучасти можна лише звичайні повідомлення чату", + "An error occurred while deleting the message" : "Виникла помилка під час видалення повідомлення", + "Your browser does not support playing audio files" : "Ваш браузер не підтримує відтворення аудіофайлів", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} в {board}", + "Deck Card" : "Карта з колоди", + "Remove {fileName}" : "Вилучити {fileName}", + "Open this location in OpenStreetMap" : "Відкрийте це місце на OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n відповідь","%n відповідей","%n відповідей","%n відповідей"], + "Sending message" : "Надсилання повідомлення", + "Failed to send the message. Click to try again" : "Не вдалося відправити повідомлення. Натисніть, щоб спробувати ще раз", + "Not enough free space to upload file" : "Недостатньо місця для завантаження файлу", + "You cannot send messages to this conversation at the moment" : "Наразі ви не можете надсилати повідомлення до цієї розмови", + "Could not update the message" : "Не вдалося оновити повідомлення", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Проект опитування - %n варіант","Проект опитування - %n варіантів","Проект опитування - %n варіантів","Проект опитування - %n варіантів"], + "_%n vote_::_%n votes_" : ["%n голосів","%n голосів","%n голосів","%n голосів"], + "Edit poll draft" : "Редагувати чернетку опитування", + "Delete poll draft" : "Видалити проект опитування", + "Open poll" : "Відкрите опитування", + "See results" : "Переглянути результати", + "Reactions" : "Реакції", + "No permission to post reactions in this conversation" : "Немає дозволу публікувати реакції в цій розмові", + "and {participant}" : "і {participant}", + "_and %n other participant_::_and %n other participants_" : ["та %n інших учасників","та %n інших учасників","та %n інших учасників","та %n інших учасників"], + "Show all reactions" : "Показати всі реакції", + "Add more reactions" : "Додайте більше реакцій", + "Show or collapse system messages" : "Показати або згорнути системні повідомлення", + "No messages" : "Відсутні повідомлення", + "All messages have expired or have been deleted." : "Всі повідомлення втратили актуальність або були видалені.", + "Unpin" : "Відкріпити", + "Cancel search" : "Зупинити пошук", + "Add a phone number" : "Додати номер телефону", + "Error: A password is required to create the conversation." : "Помилка: Для створення розмови потрібен пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Все готово, розмова \"{conversationName}\" створена.", + "Create a new group conversation" : "Створити нову групову розмову", + "Add participants" : "Додати учасників", + "Maximum length exceeded ({maxlength} characters)" : "Перевищено максимальну довжину ({maxlength} символів)", + "Conversation visibility" : "Видимість розмови", + "Allow guests to join via link" : "Дозволити гостям приєднатися за посиланням", + "Enter password" : "Введіть пароль", + "This conversation has been locked" : "Ця розмова була заблокована", + "No permission to post messages in this conversation" : "Немає дозволу на розміщення повідомлень у цій бесіді", + "Joining conversation …" : "Приєднуйтесь до розмови ...", + "Write a message without notification" : "Написати повідомлення без попередження", + "Create a thread silently" : "Створити гілку приховано", + "Create a thread" : "Створіть тему", + "Send message silently" : "Надіслати повідомлення без звуку", + "Send message" : "Надіслати повідомлення", + "Send without notification" : "Надіслати без попередження", + "The participant will not be notified about new messages" : "Учасник не буде отримувати сповіщення про нові повідомлення", + "Participants will not be notified about new messages" : "Учасники не будуть отримувати сповіщення про нові повідомлення", + "Thread title is required" : "Назва теми обов'язкова", + "Message text is required" : "Текст повідомлення є обов'язковий", + "The message could not be edited" : "Повідомлення не вдалося відредагувати", + "File to share" : "Виберіть файл для надання доступу", + "File upload is not available in this conversation" : "Завантаження файлів недоступне в цій розмові", + "Add emoji" : "Додати емоційку", + "Adding a mention will only notify users who did not read the message." : "Додавання згадки сповістить лише тих користувачів, які не читали повідомлення.", + "Thread title" : "Назва гілки", + "Send later" : "Надішліть пізніше", + "Cancel editing" : "Скасувати редагування", + "{user} is out of office and might not respond." : "{user} перебуває у відставці і може не відповісти.", + "Absence period: {startDate} - {endDate}" : "Період відсутності: {startDate} - {endDate}", + "Replacement:" : "Заміна:", + "Share from {nextcloud}" : "Поділітися з {nextcloud}", + "Share from Files" : "Відкрити Файли", + "Share files to the conversation" : "Поділитися файлами під час розмови", + "Upload from device" : "Завантажити з пристрою", + "Create new poll" : "Створити нове опитування", + "Smart picker" : "Асистент розумного вибору", + "Record voice message" : "Записати голосове повідомлення", + "End recording and send" : "Завершити запис і відправити", + "Dismiss recording" : "Зняти запис", + "Access to the microphone was denied" : "У доступі до мікрофону було відмовлено", + "Microphone either not available or disabled in settings" : "Мікрофон або недоступний, або вимкнений у налаштуваннях", + "Error while recording audio" : "Помилка під час запису аудіо", + "Generating summary of unread messages …" : "Створення зведення непрочитаних повідомлень ...", + "Summary is AI generated and might contain mistakes" : "Резюме згенероване штучним інтелектом і може містити помилки", + "Error occurred during a summary generation" : "Виникла помилка під час формування звіту", + "New file" : "Новий файл", + "Blank" : "Порожньо", + "Error while creating file" : "Помилка під час створення файлу", + "Create and share a new file" : "Створіть і надайте спільний доступ до нового файлу", + "Name of the new file" : "Ім'я нового файлу", + "Create file" : "Створити файл", + "Someone is typing …" : "Хтось друкує ...", + "{user1} is typing …" : "{user1} друкує ...", + "{user1} and {user2} are typing …" : "{user1} і {user2} набирають ...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} та {user3} друкують ...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ..."], + "Add more files" : "Додайте більше файлів", + "Send" : "Надіслати", + "In this conversation {user} can:" : "У цій розмові {user} може:", + "Edit default permissions for participants in {conversationName}" : "Редагування дозволів за замовчуванням для учасників у {conversationName}", + "Start a call" : "Почати дзвінок", + "Skip the lobby" : "Пропустити зал очікування", + "Can post messages and reactions" : "Можна публікувати повідомлення та реакції", + "Enable the microphone" : "Вмикати мікрофон", + "Enable the camera" : "Вмикати камеру", + "Share the screen" : "Ділитися екраном", + "Update permissions" : "Оновити дозволи", + "Updating permissions" : "Оновлення дозволів", + "No poll drafts" : "Немає чернеток опитувань", + "There is no poll drafts yet saved for this conversation" : "Для цієї розмови ще не збережено чернеток опитувань", + "Create poll in {name}" : "Створіть опитування в {name}", + "Create poll" : "Створити опитування", + "Error while importing poll" : "Помилка під час імпорту опитування", + "Question" : "Питання", + "Ask a question" : "Поставити запитання", + "Import draft from file" : "Імпортувати чернетку з файлу", + "Answers" : "Відповіді", + "Answer {option}" : "Відповідай. {option}", + "Delete poll option" : "Видалити варіант опитування", + "Add answer" : "Додати відповідь", + "Settings" : "Налаштування", + "Anonymous poll" : "Анонімне опитування", + "Multiple answers" : "Декілька відповідей", + "Save as draft" : "Зберегти як чернетку", + "Export draft to file" : "Експортуйте чернетку до файлу", + "You voted for this option" : "Ви проголосували за цей варіант", + "End poll" : "Завершити опитування", + "Change your vote" : "Змініть свій голос", + "Results" : "Результат", + "Voted participants" : "Проголосували учасники", + "Send a message to \"{roomName}\"" : "Надішліть повідомлення на \"{roomName}\"", + "Hide list of participants" : "Приховати список учасників", + "Show list of participants" : "Показати список учасників", + "Assistance requested in {roomName}" : "Прохання про допомогу в {roomName}", + "The message was sent to \"{roomName}\"" : "Повідомлення було надіслано на адресу \"{roomName}\"", + "Dismiss request for assistance" : "Відхилити запит на допомогу", + "Send message to room" : "Надіслати повідомлення в номер", + "Back to main room" : "Повернутися до головної кімнати", + "Back to your room" : "Поверніться до своєї кімнати", + "Message all rooms" : "Повідомлення на всі номери", + "Start session" : "Початок сесії", + "Start a call before you start a breakout room session" : "Почніть виклик, перш ніж запустити сесію в кімнатах обговорення", + "Stop session" : "Зупинити сеанс", + "The message was sent to all breakout rooms" : "Повідомлення було надіслано до всіх секційних кімнат", + "Send a message to all breakout rooms" : "Надіслати повідомлення до всіх секційних кімнат", + "Breakout rooms are not started" : "Розділені кімнати не запущено.", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Дзвінки без високопродуктивного бекенду можуть спричинити проблеми зі зв'язком і високе навантаження на пристрої. {linkstart}Дізнайтеся більше{linkend}", + "Talk setup incomplete" : "Налаштування розмови не завершено", + "Disable lobby" : "Вимкнути лобі", + "Settings for participant \"{user}\"" : "Налаштування для учасника \"{user}\"", + "Participant \"{user}\"" : "Учасник \"{user}", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гість", + "Ringing …" : "Дзвінок...", + "Call rejected" : "Виклик відхилено", + "{time} talking …" : "{time} розмовляє ...", + "{time} talking time" : "{time} час розмови", + "Raised their hand" : "Підняли руку", + "Joined with video" : "Приєднано до відео", + "Joined via phone" : "Приєднався по телефону", + "Joined with audio" : "Приєднано до аудіо", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текст повинен мати довжину не менше або дорівнювати {maxLength} символів. Ваш поточний текст має довжину {charactersCount} символів.", + "Remove group and members" : "Вилучити групи та учасників", + "Remove team and members" : "Видалити команду та учасників", + "Remove participant" : "Вилучити учасника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Ви дійсно хочете видалити групу \"{displayName}\" та її учасників з цієї розмови?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Ви дійсно хочете видалити команду \"{displayName}\" та її членів з цієї розмови?", + "Do you really want to remove {displayName} from this conversation?" : "Ви дійсно хочете видалити {displayName} з цієї розмови?", + "Notification was sent to {displayName}" : "Повідомлення було надіслано на адресу {displayName}", + "Could not send notification to {displayName}" : "Не вдалося надіслати сповіщення на адресу {displayName}", + "Permissions granted to {displayName}" : "Дозволи, надані для {displayName}", + "Could not modify permissions for {displayName}" : "Не вдалося змінити дозволи для {displayName}", + "Permissions removed for {displayName}" : "Дозволи вилучено для {displayName}", + "Permissions set to default for {displayName}" : "Дозволи, встановлені за замовчуванням для {displayName}", + "Phone number could not be hung up" : "Номер телефону не вдалося покласти слухавку", + "Phone number could not be put on hold" : "Номер телефону не вдалося перевести на утримання", + "Phone number could not be muted" : "Номер телефону не можна вимкнути", + "Phone number could not be unmuted" : "Номер телефону не можна було вимкнути", + "DTMF message could not be sent" : "Не вдалося надіслати DTMF-повідомлення", + "Phone number copied to clipboard" : "Номер телефону скопійовано до буфера обміну", + "Phone number could not be copied" : "Номер телефону не вдалося скопіювати", + "in the lobby" : "у вестибюлі", + "Dial out phone" : "Наберіть номер телефону", + "Hang up phone" : "Покладіть слухавку.", + "Move back to lobby" : "Поверніться до вестибюлю", + "Move to conversation" : "Переходимо до розмови", + "Dial-in PIN" : "PIN-код для входу в систему", + "Demote from moderator" : "Розжалування з модератора", + "Promote to moderator" : "Призначити модератором", + "Resend invitation" : "Повторно надіслати запрошення", + "Send call notification" : "Надіслати сповіщення про дзвінок", + "Dial out phone number" : "Наберіть номер телефону", + "Resume call for phone number" : "Відновити дзвінок за номером телефону", + "Put phone number on hold" : "Поставити номер телефону на утримання", + "Unmute phone number" : "Вимкнути звук телефону", + "Mute phone number" : "Вимкнення звуку номера телефону", + "Copy phone number" : "Скопіювати номер телефону", + "Reset custom permissions" : "Скидання користувацьких дозволів", + "Grant all permissions" : "Надати всі дозволи", + "Remove all permissions" : "Вилучити всі дозволи", + "Also ban from this conversation" : "Також заборона на цю розмову", + "Internal note (reason to ban)" : "Внутрішня примітка (причина заборони)", + "Remove" : "Вилучити", + "Permissions modified for {displayName}" : "Дозволи змінено для {displayName}", + "Add users, groups or teams" : "Додавання користувачів, груп або команд", + "Add users or groups" : "Додати користувачів або групи", + "Add users or teams" : "Додавання користувачів або команд", + "Add users" : "Додати користувачів", + "Add groups or teams" : "Додавання груп або команд", + "Add groups" : "Додати групи", + "Add teams" : "Додати команду", + "Add other sources" : "Додайте інші джерела", + "Add emails" : "Додати email-адреси", + "Integrations" : "Інтеграції", + "Add federated users" : "Додавання об'єднаних користувачів", + "Searching …" : "Пошук...", + "Search for more users" : "Шукати інших користувачів", + "You can search or add participants via name, email, or Federated Cloud ID" : "Ви можете шукати або додавати учасників за іменем, електронною поштою або ідентифікатором Federated Cloud ID", + "Search or add participants" : "Пошук або додавання учасників", + "Invitation was sent to {actorId}" : "Запрошення було надіслано {actorId}", + "An error occurred while adding the participants" : "Виникла помилка під час додавання учасників", + "A new group conversation with selected participant will be created" : "Буде створено нову групову розмову з обраним учасником", + "Participants" : "Учасники", + "Participants ({count})" : "Учасники ({count})", + "Open chat" : "Відкритий чат", + "You have new unread messages in the chat." : "У вас є нові непрочитані повідомлення в чаті.", + "You have been mentioned in the chat." : "Ви були згадані в чаті.", + "Search messages" : "Пошук повідомлень", + "Chat" : "Чат", + "Details" : "Деталі", + "Shared items" : "Спільні ресурси", + "Search in {name}" : "Шукати в {name}", + "Threads in {name}" : "Гілки у {name}", + "{actor} in {conversation}" : "{actor} в {conversation}", + "Search messages …" : "Пошук повідомлень ...", + "Search options" : "Параметри пошуку", + "From User" : "Від користувача", + "Since" : "Оскільки", + "Until" : "До тих пір, поки", + "No results found" : "Не знайдено жодного результату", + "Load more results" : "Завантажити більше результатів", + "Recent threads" : "Останні теми", + "Projects" : "Проєкти", + "No shared items" : "Немає спільних елементів", + "Thread notifications" : "Сповіщення про потоки", + "Thread actions" : "Дії з нитками", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Посилання на розмову", + "No open conversations found" : "Не знайдено жодної відкритої розмови", + "Either there are no open conversations or you joined all of them." : "Або немає відкритих розмов, або ви приєдналися до всіх.", + "Check spelling or use complete words." : "Перевірте правопис або використовуйте повні слова.", + "Search conversations or users" : "Пошук розмов та учасників", + "Select conversation" : "Вибрати розмову", + "Number length is not valid" : "Довжина номера не допустима", + "Region code is not valid" : "Регіональний код не дійсний", + "Number length is too short" : "Занадто коротка довжина номера", + "Number length is too long" : "Довжина номера занадто велика", + "Number is not valid" : "Номер недійсний", + "Phone numbers" : "Номери телефонів", + "Display name: {name}" : "Ім'я для показу: {name}", + "Edit display name" : "Редагувати ім'я для показу", + "Display name (required)" : "Відображати ім'я (обов'язково)", + "Save name" : "Зберегти ім'я", + "Error while setting personal setting" : "Помилка під час встановлення персональних налаштувань", + "Error while saving sounds setting" : "Помилка під час збереження налаштування звуків", + "Play sounds when participants join or leave a call" : "Коли учасники приєднуються до дзвінка або виходять з нього, відтворювати звуковий сигнал", + "Notification settings" : "Налаштування сповіщень", + "Default language" : "Типова мова", + "Select location for attachments" : "Виберіть місце для вкладень", + "Error while setting attachment folder" : "Помилка під час встановлення папки вкладення", + "Error while setting read status privacy" : "Помилка під час встановлення конфіденційності статусу читання", + "Error while setting typing status privacy" : "Помилка під час встановлення конфіденційності статусу набору тексту", + "Error while setting default media state" : "Помилка під час встановлення стану носія за замовчуванням", + "Privacy" : "Конфіденційність", + "Attachments folder" : "Каталог із вкладеннями", + "Toggle full screen" : "Розгорнути на весь екран", + "Search" : "Пошук", + "Focus the chat input" : "Фокусування вводу в чаті", + "Unfocus the chat input to use shortcuts" : "Розфокусувати введення в чаті, щоб використовувати комбінації клавіш", + "Edit your last message" : "Відредагуйте своє останнє повідомлення", + "Shortcuts while in a call" : "Швидкі клавіші під час дзвінка", + "Camera on and off" : "Увімкнення та вимкнення камери", + "Microphone on and off" : "Увімкнення та вимкнення мікрофона", + "Raise or lower hand" : "Підняти або опустити руку", + "Push to talk or push to mute" : "Натисніть, щоб почати говорити, або тисніть, щоб вимкнути звук", + "Zoom-in / zoom-out a screen share" : "Збільшення/зменшення масштабу спільного доступу до екрана", + "Mouse wheel" : "Коліщатко миші", + "Start call silently" : "Почніть дзвінок беззвучно", + "Start call" : "Почати виклик", + "End call" : "Кінець зв'язку.", + "This call has just ended" : "Цей дзвінок щойно закінчився", + "You will be able to join the call only after a moderator starts it." : "Ви зможете приєднатися до дзвінка лише після того, як його розпочне модератор.", + "End call for everyone" : "Завершити дзвінок для всіх", + "Starting the recording" : "Початок запису", + "Recording" : "Запис", + "The call has been running for one hour." : "Дзвінок триває вже годину.", + "Cancel recording start" : "Скасувати початок запису", + "Stop recording" : "Зупинити запис", + "Send a reaction" : "Надішліть реакцію", + "React with {reaction}" : "Реагуйте з {reaction}", + "All tasks done!" : "Всі завдання виконані!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} від %n завдань","{done} з %n завдань","{done} з %n завдань","{done} з %n завдань"], + "Add participants to this call" : "Додайте учасників до цього дзвінка", + "_%n participant in call_::_%n participants in call_" : ["%n учасників дзвінка","%n учасників дзвінка","%n учасників дзвінка","%n учасників дзвінка"], + "You are not allowed to enable screensharing" : "Ви не маєте права ввімкнути спільний доступ до екрана", + "No screensharing" : "Без скріншотів", + "Screensharing options" : "Параметри демонстрації екрану", + "Enable screensharing" : "Увімкнути демонстрацію екрану", + "Bad sent video and screen quality." : "Погана якість надісланого відео та екрану.", + "Bad sent screen quality." : "Погана якість надісланого екрану.", + "Bad sent video quality." : "Погана якість надісланого відео.", + "Bad sent audio, video and screen quality." : "Погана якість надісланого аудіо, відео та екрану.", + "Bad sent audio and screen quality." : "Погана якість надісланого аудіо та екрану.", + "Bad sent audio and video quality." : "Погана якість надісланих аудіо та відео.", + "Bad sent audio quality." : "Погана якість надісланого аудіо.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваше інтернет-з'єднання або комп'ютер перевантажені, і інші учасники можуть не бачити ваш екран. Щоб покращити ситуацію, спробуйте вимкнути розмиття фону або відео під час демонстрації екрана.", + "Disable background blur" : "Вимкнути розмиття фону", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити ваш екран. Щоб поліпшити ситуацію, спробуйте вимкнути відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не бачити ваш екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не бачити вас.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути розмиття фону або відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не чути вас і не бачити ваш екран. Щоб поліпшити ситуацію, спробуйте вимкнути функцію спільного доступу до екрана.", + "Disable screenshare" : "Вимкнути скріншот", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути розмиття фону або відео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути відео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не зрозуміти вас.", + "Screen sharing is not supported by your browser." : "Ваш браузер не підтримує демонстрацію екрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Демонстрація екрану вимагає доступу до сторінки через безпечний протокол https.", + "Screensharing requires the page to be loaded through HTTPS." : "Демонстрація екрану вимагає доступу до сторінки через безпечний протокол https.", + "An error occurred while starting screensharing." : "Помилка під час спроби поділитися екраном.", + "Select virtual background" : "Виберіть віртуальний фон", + "Show your screen" : "Демонстрація екрану", + "Stop screensharing" : "Припинити демонстрацію екрану", + "Mute others" : "Приглушити інших", + "Start recording" : "Почати запис", + "Set up breakout rooms" : "Підготуйте кімнати для секційних засідань", + "Download attendance list" : "Завантажити список відвідувачів", + "Open Calendar" : "Відкрити календар", + "Remove participant {name}" : "Видалити учасника {name}", + "Would you like to delete this conversation?" : "Ви хочете видалити цю розмову?", + "Are you sure you want to delete this conversation?" : "Ви впевнені, що хочете видалити цю розмову?", + "Delete now" : "Видалити зараз", + "Keep" : "Зберегти", + "Open dialpad" : "Відкрийте телефонну книгу", + "Select a region" : "Виберіть регіон", + "Local time: {time}" : "Місцевий час: {time}", + "Search …" : "Пошук …", + "Message without mention" : "Повідомлення без згадки", + "Mention myself" : "Згадати про себе", + "Mention everyone" : "Згадайте всіх", + "Select a conversation" : "Виберіть розмову", + "Select a mode" : "Виберіть режим", + "You do not have permissions to access this conversation." : "Ви не маєте дозволів для доступу до цієї розмови.", + "Join a different conversation or start a new one." : "Приєднайтеся до іншої розмови або почніть нову.", + "The conversation does not exist" : "Розмови не існує", + "Join a conversation or start a new one!" : "Приєднайтеся до розмови або почніть нову!", + "Duplicate session" : "Дублікат сеансу", + "Creating and joining a conversation with \"{userid}\"" : "Створення та приєднання до розмови з \"{userid}\"", + "Join a conversation or start a new one" : "Приєднайтеся до розмови або почніть нову", + "Error while joining the conversation" : "Помилка під час приєднання до розмови", + "Nextcloud URL" : "URL-адреса наступної хмари", + "Nextcloud user" : "Користувач Nextcloud", + "User password" : "Пароль користувача", + "Talk conversation" : "Розмова Talk", + "Skip TLS verification" : "Пропустити перевірку TLS", + "Matrix server URL" : "URL-адреса сервера матриці", + "User" : "Користувач", + "Matrix channel" : "Матричний канал", + "Mattermost server URL" : "Найважливіша URL-адреса сервера", + "Mattermost user" : "Найважливіший користувач", + "Team name" : "Назва команди", + "Channel name" : "Назва каналу", + "Rocket.Chat server URL" : "Адреса сервера Rocket.Chat", + "User name or email address" : "Ім'я користувача або адреса ел. пошти", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "URL-адреса сервера Zulip", + "Bot user name" : "Ім'я користувача бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "Токен API", + "Slack channel" : "Слабкий канал", + "Server ID or name" : "Ідентифікатор або ім'я сервера", + "Channel ID (prefixed with \"ID:\") or name" : "Ідентифікатор каналу (з префіксом \"ID:\") або назва", + "Channel" : "Канал", + "Login" : "Login", + "Chat ID" : "Ідентифікатор чату", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL-адреса IRC-сервера (наприклад, chat.freenode.net:6667)", + "Nickname" : "Прізвисько", + "Connection password" : "Пароль для підключення", + "IRC channel" : "IRC-канал", + "Channel password" : "Пароль каналу", + "NickServ nickname" : "NickServ нікнейм", + "NickServ password" : "Пароль NickServ", + "Use TLS" : "Використовуйте TLS", + "Use SASL" : "Використовуйте SASL", + "Tenant ID" : "Ідентифікатор орендаря", + "Client ID" : "Ідентифікатор клієнта", + "Team ID" : "Ідентифікатор команди", + "Thread ID" : "Ідентифікатор гілки", + "XMPP/Jabber server URL" : "URL-адреса сервера XMPP/Jabber", + "MUC server URL" : "URL-адреса сервера MUC", + "Jabber ID" : "Jabber ID", + "Media" : "Зображення та відео", + "Polls" : "Опитування", + "Deck cards" : "Карти з колоди", + "Voice messages" : "Голосові повідомлення", + "Locations" : "Розташування", + "Call recordings" : "Записи дзвінків", + "Audio" : "Аудіо", + "Show all media" : "Показати всі медіа", + "Show all files" : "Показати всі файли", + "Show all polls" : "Показати всі опитування", + "Show all deck cards" : "Показати всі карти колоди", + "Show all voice messages" : "Показати всі голосові повідомлення", + "Show all locations" : "Показати всі локації", + "Show all call recordings" : "Показати всі записи дзвінків", + "Show all audio" : "Показати всі аудіо", + "Show all other" : "Показати всі інші", + "Follow conversation settings" : "Слідкувати за налаштуваннями розмови", + "Group" : "Група", + "Team" : "Команда", + "You reconnected to the call" : "Ви знову підключилися до дзвінка", + "{actor} reconnected to the call" : "{actor} перепідключився до виклику", + "You added {user0} and {user1}" : "Ви додали {user0} та {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників"], + "An administrator added you and {user0}" : "Адміністратор додав вас і {user0}", + "{actor} added you and {user0}" : "{actor} додав тебе і {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників"], + "An administrator added {user0} and {user1}" : "Адміністратор додав {user0} та {user1}", + "{actor} added {user0} and {user1}" : "{actor} додано {user0} та {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників"], + "You removed {user0} and {user1}" : "Ви видалили {user0} та {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників"], + "An administrator removed you and {user0}" : "Адміністратор видалив вас і {user0}", + "{actor} removed you and {user0}" : "{actor} прибрали тебе і {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} видалив вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників"], + "An administrator removed {user0} and {user1}" : "Адміністратор видалив {user0} та {user1}", + "{actor} removed {user0} and {user1}" : "{actor} видалено {user0} та {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників"], + "You and {user0} joined the call" : "Ви та {user0} долучилися до заклику", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу"], + "{user0} and {user1} joined the call" : "{user0} та {user1} приєдналися до заклику", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} та ще %n учасників долучилися до конкурсу","{user0}, {user1} та ще %n учасників долучилися до заклику","{user0}, {user1} та ще %n учасників долучилися до заклику","{user0}, {user1} та ще %n учасників долучилися до заклику"], + "You and {user0} left the call" : "Ви та {user0} залишили повідомлення", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ви, {user0} та ще %n учасників залишили дзвінок","Ви, {user0} та ще %n учасників залишили повідомлення","Ви, {user0} та ще %n учасників залишили повідомлення","Ви, {user0} та ще %n учасників залишили повідомлення"], + "{user0} and {user1} left the call" : "{user0} і {user1} залишив дзвінок", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} і ще %n учасників залишили дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок"], + "You promoted {user0} and {user1} to moderators" : "Ви призначили {user0} та {user1} модераторами", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів"], + "An administrator promoted you and {user0} to moderators" : "Адміністратор призначив вас і {user0} модераторами", + "{actor} promoted you and {user0} to moderators" : "{actor} підвищили вас і {user0} до модераторів", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів"], + "An administrator promoted {user0} and {user1} to moderators" : "Адміністратор підвищив {user0} та {user1} до рівня модераторів", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} підвищили {user0} та {user1} до рівня модераторів", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів"], + "You demoted {user0} and {user1} from moderators" : "Ви понизили {user0} та {user1} з модераторів", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Ви понизили {user0}, {user1} і ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів"], + "An administrator demoted you and {user0} from moderators" : "Адміністратор понизив вас і {user0} в правах з модераторів", + "{actor} demoted you and {user0} from moderators" : "{actor} понизили вас і {user0} з модераторів", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Адміністратор понизив вас у посаді, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} понизили вас, {user0} та ще %n учасників від модераторів.","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів"], + "An administrator demoted {user0} and {user1} from moderators" : "Адміністратор понизив {user0} та {user1} у званні модераторів", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} понизили {user0} та {user1} з модераторів", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} понижено {user0}, {user1} та ще %n учасників від модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів"], + "You:" : "Ти:", + "You: {lastMessage}" : "Ти: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(відредаговано вами)", + "(edited by a deleted user)" : "(відредаговано видаленим користувачем)", + "(edited by {moderator})" : "(за редакцією {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ви намагаєтеся приєднатися до розмови, маючи активну сесію в іншому вікні або на іншому пристрої. Наразі це не підтримується Nextcloud Talk. Що ви хочете зробити?", + "Leave this page" : "Залиште цю сторінку", + "Join here" : "Приєднуйтесь тут", + "Deck card has been posted to {conversation}" : "Картку колоди опубліковано на {conversation}", + "An error occurred while posting deck card to conversation" : "Виникла помилка під час публікації карти колоди в розмову", + "Post to a conversation" : "Написати до розмови", + "Post to conversation" : "Допис до розмови", + "The recording failed. Please contact your administrator." : "Запис не відбувся. Зверніться до адміністратора.", + "Location has been posted to {conversation}" : "Розташування було розміщено на {conversation}", + "An error occurred while posting location to conversation" : "Виникла помилка під час додавання місцезнаходження до розмови", + "Share to a conversation" : "Долучитися до розмови", + "Share to conversation" : "Долучитися до розмови", + "In conversation" : "У розмові", + "Search in conversation: {conversation}" : "Шукайте в розмові: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Наразі ваші запити блокуються через захист від грубої сили", + "Error while clearing conversation history" : "Помилка під час очищення історії розмов", + "Error occurred while allowing guests" : "Виникла помилка під час входу гостей", + "Error occurred while disallowing guests" : "Виникла помилка під час заборони гостей", + "Error occurred when restricting the conversation to moderator" : "Виникла помилка при обмеженні розмови тільки модератором", + "Error occurred when opening the conversation to everyone" : "Виникла помилка при відкритті розмови для всіх", + "Conversation password has been saved" : "Пароль для розмови збережено", + "Conversation password has been removed" : "Видалено пароль для розмови", + "Error occurred while saving conversation password" : "Виникла помилка під час збереження пароля розмови", + "Call recording is starting." : "Розпочато запис розмови.", + "Call recording stopped while starting." : "Запис розмови зупинився під час запуску.", + "Call recording stopped. You will be notified once the recording is available." : "Запис розмови зупинено. Ви отримаєте сповіщення, коли запис буде доступний.", + "Conversation picture set" : "Зображення обговорення встановлено", + "Conversation picture deleted" : "Зображення розмови вилучено", + "Could not delete the conversation picture" : "Не вдалося вилучити зображення розмови", + "Could not remove the automatic expiration" : "Не вдалося видалити автоматичне закінчення терміну дії", + "Could not post message: {errorMessage}" : "Не вдалося опублікувати повідомлення: {errorMessage}", + "Participant is banned successfully" : "Учасника успішно забанено", + "Error while banning the participant" : "Помилка під час бану учасника", + "An error occurred while fetching the participants" : "Виникла помилка під час отримання учасників", + "Could not send invitation to {actorId}" : "Не вдалося надіслати запрошення до {actorId}", + "Invitations sent" : "Запрошення надіслані", + "Error occurred when sending invitations" : "Виникла помилка під час надсилання запрошень", + "Failed to join the conversation." : "Не зміг долучитися до розмови.", + "An error occurred while creating breakout rooms" : "Виникла помилка при створенні секційних кімнат", + "An error occurred while re-ordering the attendees" : "Виникла помилка при повторному замовленні учасників", + "An error occurred while deleting breakout rooms" : "Виникла помилка при видаленні секційних кімнат", + "An error occurred while starting breakout rooms" : "Виникла помилка під час запуску секційних кімнат", + "An error occurred while stopping breakout rooms" : "Виникла помилка під час зупинки секційних кімнат", + "An error occurred while sending a message to the breakout rooms" : "Виникла помилка під час надсилання повідомлення до секційних кімнат", + "An error occurred while requesting assistance" : "Виникла помилка під час запиту на допомогу", + "An error occurred while resetting the request for assistance" : "Виникла помилка під час скидання запиту на допомогу", + "An error occurred while joining breakout room" : "Виникла помилка під час приєднання до секційної кімнати", + "Failed to rename the thread" : "Не вдалося перейменувати потік", + "Error fetching upcoming events" : "Помилка при отриманні майбутніх подій", + "Error fetching upcoming reminders" : "Помилка при отриманні майбутніх нагадувань", + "An error occurred while accepting an invitation" : "Виникла помилка під час прийняття запрошення", + "An error occurred while rejecting an invitation" : "Виникла помилка під час відхилення запрошення", + "{guest} (guest)" : "{guest} (гість)", + "Poll draft has been saved" : "Чернетка опитування збережена", + "An error occurred while saving the draft" : "Виникла помилка під час збереження чернетки", + "An error occurred while submitting your vote" : "Виникла помилка під час відправлення вашого голосу", + "An error occurred while ending the poll" : "Виникла помилка при завершенні опитування", + "An error occurred while deleting the poll draft" : "Виникла помилка при видаленні чернетки опитування", + "Poll \"{name}\" was created by {user}. Click to vote" : "Опитування \"{name}\" було створено {user}. Натисніть, щоб проголосувати", + "Failed to add reaction" : "Не вдалося додати відповідь", + "Failed to remove reaction" : "Не вдалося прибрати реакцію", + "Error while uploading file \"{fileName}\"" : "Помилка під час завантаження файлу \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Недостатньо місця для завантаження файлу \"{fileName}\"", + "You are not allowed to share files" : "Ви не маєте права ділитися файлами", + "Error while sharing file" : "Помилка під час надання спільного доступу до файлу", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Браузер, який ви використовуєте, не повністю підтримується Nextcloud Talk. Будь ласка, використовуйте останню версію Mozilla Firefox, Microsoft Edge, Google Chrome, Opera або Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Через %n годину","Через %n годин","Через %n годин","Через %n годин"], + "_%n minute _::_%n minutes_" : ["%n хвилина","%n хвилин","%n хвилин","%n хвилин"], + "In {hours} and {minutes}" : "Через {hours} годин і {minutes} хвилин", + "_In %n minute_::_In %n minutes_" : ["Через %n хвилину","Через %n хвилин ","Через %n хвилин","Через %n хвилин"], + "Later today – {timeLocale}" : "Пізніше сьогодні - {timeLocale}", + "Tomorrow – {timeLocale}" : "Завтра - {timeLocale}", + "This weekend – {timeLocale}" : "На цих вихідних - {timeLocale}", + "Next week – {timeLocale}" : "Наступного тижня - {timeLocale}", + "Message link copied to clipboard" : "Посилання на повідомлення скопійовано в буфер обміну", + "Conversation link copied to clipboard" : "Посилання на розмову скопійовано до буфера обміну", + "The link could not be copied" : "Посилання не вдалося скопіювати", + "Error while parsing a PROPFIND error" : "Помилка під час обробки помилки PROPFIND", + "Sending signaling message has failed" : "Не вдалося передати повідомлення сигналізації.", + "Lost connection to signaling server. Trying to reconnect." : "Втрачено зв'язок із сервером сигналізації. Триває спроба відновити зв'язок.", + "Lost connection to signaling server." : "Втрачено зв'язок із сервером сигналізації.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Встановлений сиґнальний сервер потрібно оновити, щоби його версія була сумісною з версією Talk. Будь ласка, сконтактуйте з адміністратором.", + "Please restart the app." : "Будь ласка, перезапустіть програму.", + "Please reload the page." : "Будь ласка, перезавантажте сторінку.", + "Please try to restart the app." : "Спробуйте перезапустити програму.", + "Please try to reload the page." : "Будь ласка, спробуйте перезавантажити сторінку.", + "Do not disturb" : "Не турбувати", + "Away" : "Відсутній(-я)", + "Microphone {number}" : "Мікрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Доповідач {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Здається, ви говорите з вимкненим мікрофоном, будь ласка, увімкніть його, щоб інші могли вас почути", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не вдалося встановити з'єднання принаймні з одним учасником. Для вашого сценарію може знадобитися сервер TURN. Попросіть адміністратора налаштувати його відповідно до {linkstart} цієї документації{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Це займає більше часу, ніж очікувалося. Чи вже надано (або відхилено) дозволи для медіа? Якщо так, перезапустіть браузер, оскільки аудіо та відео не працюють.", + "Access to microphone & camera is only possible with HTTPS" : "Доступ до мікрофона та камери можливий лише через безпечний протокол https.", + "Please move your setup to HTTPS" : "Будь ласка, налаштуйте безпечний доступ до сервера через https.", + "Access to microphone & camera was denied" : "У доступі до мікрофону та камери було відмовлено", + "WebRTC is not supported in your browser" : "WebRTC не підтримується у вашому браузері", + "Please use a different browser like Firefox or Chrome" : "Будь ласка, використовуйте інший браузер, наприклад, Firefox або Chrome", + "Error while accessing microphone & camera" : "Помилка під час доступу до мікрофона та камери", + "%s Talk on your mobile devices" : "%s Talk на мобільних пристроях", + "Join conversations at any time, anywhere, on any device." : "Приєднуйтесь до розмов у будь-який час, у будь-якому місці, на будь-якому пристрої.", + "Android app" : "Застосунок для Android", + "iOS app" : "Застосунок для iOS", + "__language_name__" : "Українська", + "Webhook Demo" : "Демонстраційна версія Webhook", + "Call summary (%s)" : "Підсумки дзвінків (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Після дзвінка бот підбиває підсумки розмови та публікує оглядове повідомлення з переліком усіх учасників і завданнями", + "Tasks" : "Завдання", + "Notes" : "Нотатки", + "Reports" : "Звіти", + "Decisions" : "Рішення", + "Agenda" : "Порядок денний", + "Call summary" : "Підсумки дзвінка", + "Call summary - {title}" : "Підсумки дзвінків - {title}", + "Talk conversation for event" : "Розмова Talk для події", + "Client Push is installed, this improves the performance of desktop clients." : "Встановлено Client Push, це покращує продуктивність десктопних клієнтів.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} не встановлено, це може призвести до проблем з продуктивністю під час використання десктопних клієнтів.", + "Next meeting" : "Наступна зустріч", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Заплануйте зустріч у своєму календарі. Щоб розмова з'явилася тут, потрібно вказати місце, де вона буде проходити", + "Join conversations from remote Nextcloud servers" : "Приєднуйтесь до розмов з віддалених серверів Nextcloud", + "Your default media state has been saved" : "Збережено стан медіа за замовчуванням", + "Set reminder for later today" : "Встановити нагадування на сьогодні пізніше", + "Set reminder for tomorrow" : "Встановити нагадування на завтра", + "Set reminder for this weekend" : "Встановити нагадування на ці вихідні", + "Set reminder for next week" : "Встановити нагадування на наступний тиждень", + "Generate summary" : "Згенерувати підсумок", + "Open poll • You voted already" : "Відкрите опитування - Ви вже проголосували", + "Open poll • Click to vote" : "Відкрите опитування - Натисніть, щоб проголосувати", + "Poll • Ended" : "Опитування - Завершено", + "Talk recording from {time} ({conversation})" : "Запис розмови з {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Результати опитування - %n голосів","Результати опитування - %n голосів","Результати опитування - %n голосів","Результати опитування - %n голосів"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Відкрите голосування - %n голосів","Відкрите голосування - %n голосів","Відкрите голосування - %n голосів","Відкрите голосування - %n голосів"], + "Submit vote" : "Подати голос", + "Your privacy setting has been saved" : "Ваші налаштування конфіденційності збережено", + "Your personal setting has been saved" : "Ваші персональні налаштування збережено", + "Failed to save sounds setting" : "Не вдалося зберегти налаштування звуків", + "Sounds setting saved" : "Налаштування звуків збережено", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk оновлено, ви не можете розпочати або приєднатися до виклику.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ви приєдналися до розмови в іншому вікні або на іншому пристрої. Наразі Nextcloud Talk не підтримує таку функцію, тому ця сесія була закрита.", + "Nextcloud Talk was updated." : "Оновлений Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud знаходиться в режимі технічного обслуговування.", + "Nextcloud Talk Federation was updated." : "Оновлена Nextcloud Talk Federation." +}, +"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);"); diff --git a/l10n/uk.json b/l10n/uk.json new file mode 100644 index 0000000..c45c727 --- /dev/null +++ b/l10n/uk.json @@ -0,0 +1,2124 @@ +{ "translations": { + "a conversation" : "розмова", + "(Duration %s)" : "(Тривалість %s)", + "You attended a call with {user1}" : "Ви були на дзвінку з {user1}", + "_%n guest_::_%n guests_" : ["%n гість","%n гостя","%n гостей","%n гостей"], + "You attended a call with {user1} and {user2}" : "Ви були на дзвінку з {user1} і {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Ви були на дзвінку з {user1}, {user2} і {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Ви були на дзвінку з {user1}, {user2}, {user3} і {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Ви були на дзвінку з {user1}, {user2}, {user3}, {user4} і {user5}", + "_%n other_::_%n others_" : ["%nінший","%nінших","%n інших","%n інших"], + "{actor} invited you to {call}" : "{actor} запросив вас на {call}", + "You were invited to a conversation or had a call" : "Вас запросили на розмову або вам подзвонили", + "Other activities" : "Інші події", + "Talk" : "Розмови", + "Guest" : "Гість", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## Ласкаво просимо до Nextcloud Talk!\nУ цій розмові ви дізнаєтесь про нові функції, доступні в Nextcloud Talk.", + "## New in Talk %s" : "Нове в застосунку Talk версії %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "— Microsoft Edge і Safari тепер можна використовувати для участі в аудіо- та відеодзвінках", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "— Розмови «один на один» тепер постійні й більше не можуть бути випадково перетворені на групові. Крім того, коли один із учасників залишає розмову, розмова більше не видаляється автоматично. Лише якщо обидва учасники виходять, розмова видаляється з сервера", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Тепер ви можете повідомити всіх учасників, написавши \"@all\" у чаті", + "- With the \"arrow-up\" key you can repost your last message" : "- За допомогою клавіші зі стрілкою вгору ви можете повторно розмістити своє останнє повідомлення", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk тепер може мати команди, надішліть \"/help\" як повідомлення чату, щоб дізнатися, чи ваш адміністратор налаштував деякі", + "- With projects you can create quick links between conversations, files and other items" : "- За допомогою проектів ви можете створювати швидкі посилання між розмовами, файлами та іншими елементами", + "- You can now mention guests in the chat" : "- Тепер ви можете згадувати гостей у чаті", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "Дозволити гостям приєднуватися через посилання", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Тепер ви можете безпосередньо відповідати на повідомлення, надаючи іншим користувачам більше інформації про ваше повідомлення", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Пошук розмов і учасників тепер також фільтруватиме ваші наявні розмови, що полегшить пошук попередніх розмов", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Після того як буде увімкнено застосунок \"Кола\", ви зможете додавати власні групи користувачів до розмов", + "- Check out the new grid and call view" : "- Перегляньте нову сітку та вигляд викликів", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Тепер ви можете завантажувати та перетягувати файли прямо зі свого пристрою в чат", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Спільні файли тепер відкриваються безпосередньо в поданні чату у застосунку перегляду", + "- You can now search for chats and messages in the unified search in the top bar" : "- Тепер ви можете шукати чати та повідомлення в уніфікованому пошуку на верхній панелі", + "- Spice up your messages with emojis from the emoji picker" : "- Доповніть ваші повідомлення - додайте емоційки до тексту", + "- You can now change your camera and microphone while being in a call" : "- Тепер ви можете змінити камеру та мікрофон під час розмови", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Надайте своїм розмовам певний контекст за допомогою опису та відкрийте його, щоб користувачі, які ввійшли в систему, могли знайти його та приєднатися", + "- See a read status and send failed messages again" : "- Перегляньте статус прочитання та знову надішліть повідомлення, які не вдалося надіслати", + "- Raise your hand in a call with the R key" : "- Підніміть руку під час виклику за допомогою клавіші R", + "- Join the same conversation and call from multiple devices" : "- Приєднуйтесь до однієї розмови та телефонуйте з кількох пристроїв", + "- Send voice messages, share your location or contact details" : "- Надсилайте голосові повідомлення, діліться власним місцем розташування або контактними даними", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Додайте групи до розмови, і нові учасники групи будуть автоматично додані як учасники", + "- A preview of your audio and video is shown before joining a call" : "- Попередній перегляд аудіо та відео відображається перед приєднанням до виклику", + "- You can now blur your background in the newly designed call view" : "- Тепер ви можете розмити фон у новому режимі перегляду викликів", + "- Moderators can now assign general and individual permissions to participants" : "— Модератори тепер можуть призначати загальні та індивідуальні дозволи учасникам", + "- You can now react to chat messages" : "- Тепер ви можете відповідати на повідомлення чату", + "- In the sidebar you can now find an overview of the latest shared items" : "- На бічній панелі тепер ви можете знайти огляд останніх спільних елементів", + "- Use a poll to collect the opinions of others or settle on a date" : "- Використовуйте опитування, щоб зібрати думки інших або домовитися про побачення", + "- Configure an expiration time for chat messages" : "- Налаштуйте термін дії повідомлень чату", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- Починайте дзвінки без сповіщення інших під час великих розмов. Ви можете надсилати індивідуальні сповіщення про виклик, щойно він розпочався.", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- Надсилайте повідомлення в чаті без сповіщення одержувачів, якщо це не є терміновим", + "- Emojis can now be autocompleted by typing a \":\"" : "- Емодзі тепер можна автозаповнювати, ввівши \":\"", + "- Link various items using the new smart-picker by typing a \"/\"" : "- Пов'язуйте різні об'єкти з використанням асистенту розумного вибору, для цього просто введіть \"/\"", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- Модератори тепер можуть створювати окремі кімнати (потрібен високопродуктивний бекенд)", + "- Calls can now be recorded (requires the High-performance backend)" : "- Дзвінки тепер можна записувати (потрібен Високопродуктивний бекенд)", + "- Conversations can now have an avatar or emoji as icon" : "- Тепер у розмовах можна поставити аватарку або емодзі як іконку", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- На додаток до розмитого фону у відеодзвінках тепер доступні віртуальні фони", + "- Reactions are now available during calls" : "- Реакції тепер доступні під час дзвінка", + "- Typing indicators show which users are currently typing a message" : "- Індикатори набору тексту показують, які користувачі в даний момент набирають повідомлення", + "- Groups can now be mentioned in chats" : "- Групи тепер можна згадувати в чатах", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- Записи дзвінків автоматично транскрибуються, якщо зареєстровано застосунок постачальника послуг з транскрибування", + "- Chat messages can be translated if a translation provider app is registered" : "- Повідомлення чату можна перекладати, якщо зареєстровано застосунок перекладу", + "- **Markdown** can now be used in _chat_ messages" : "- **Markdown** розмітку тепер можна використовувати в повідомленнях _чату_", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Для реалізації ботів тепер доступні веб-хуки. Дивіться документацію для отримання додаткової інформації https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- Встановіть нагадування в повідомленні чату, щоб пізніше знову отримати сповіщення ", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- Використовуйте розмову **Нотатки для себе**, щоб робити нотатки та обмінюватися інформацією між своїми пристроями", + "- Captions allow to send a message with a file at the same time" : "- Підписи дозволяють одночасно надсилати повідомлення з файлом", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- Відео спікера тепер видно під час спільного доступу до екрана, а реакція на виклик анімована", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- Відтепер повідомлення можуть редагувати автори та модератори, що увійшли в систему, протягом 6 годин", + "- Unsent message drafts are now saved in your browser" : "- Чернетки невідправлених повідомлень тепер зберігаються у вашому браузері", + "- Text chatting can now be done in a federated way with other Talk servers" : "- Текстовий чат тепер можна використовувати у федеративному режимі з іншими серверами Talk", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- Модератори тепер можуть банити акаунти та гостей, щоб запобігти їхньому повторному приєднанню до розмови", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- Майбутні дзвінки з прив'язаних подій календаря та заміни поза офісом тепер відображаються в розмовах", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- Дзвінки тепер можна здійснювати у федеративний спосіб з іншими Talk-серверами (потрібен високопродуктивний бекенд)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- Представляємо десктопний клієнт Nextcloud Talk для Windows, macOS та Linux: %s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- Підсумовуйте записи дзвінків і непрочитані повідомлення в чатах за допомогою Nextcloud Assistant", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- Покращення зустрічей завдяки розпізнаванню гостей, запрошених за їхньою електронною адресою, імпорту списків учасників, проектів опитувань та завантаженню списків учасників дзвінків.", + "- Archive conversations to stay focused" : "- Архівуйте розмови, щоб залишатися зосередженими", + "- Schedule a meeting into your calendar from within a conversation" : "- Заплануйте зустріч у своєму календарі з розмови", + "- Search for messages of the current conversation directly in the right sidebar" : "- Пошук повідомлень поточної розмови безпосередньо в правій бічній панелі", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- Переглядайте більше розмов з першого погляду з новим компактним списком (увімкніть у налаштуваннях розмови)", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- Розмови про зустрічі тепер синхронізуються з назвою та описом з календаря і приховуються за допомогою фільтра пошуку, поки не наближається час їх початку.", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- Позначте розмови як конфіденційні в налаштуваннях сповіщень, щоб приховати вміст повідомлень зі списку розмов та сповіщень", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- Щоб отримувати пуш-сповіщення під час режиму \"Не турбувати\", позначте розмови як важливі", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- Додайте інших учасників до тет-а-тет виклику, щоб створити новий груповий виклик на льоту", + "- Use threads to keep your chat and discussions organized" : "- Використовуйте теми, щоб упорядкувати чат і дискусії", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- Транскрипція в реальному часі тепер доступна під час дзвінка (потрібен ExApp для транскрипції в реальному часі та високопродуктивний бекенд)", + "_All %n participant_::_All %n participants_" : ["Всі %n учасників","Всі %n учасників","Всі %n учасників","Всі %n учасників"], + "Talk updates ✅" : "Обговоріть оновлення ✅", + "Reaction deleted by author" : "Реакцію вилучено автором", + "{actor} created the conversation" : "{actor} створив(-ла) розмову", + "You created the conversation" : "Ви створили розмову", + "System created the conversation" : "Система створила розмову", + "An administrator created the conversation" : "Адміністратор створив розмову", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} змінив(-ла) назву розмови з \"%1$s\" на \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Ви змінили назву розмови з \"%1$s\" на \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Адміністратор змінив(-ла) назву розмови з \"%1$s\" на \"%2$s\"", + "{actor} set the description" : "{actor} встановив опис", + "You set the description" : "Ви встановлюєте опис", + "An administrator set the description" : "Опис встановив адміністратор", + "{actor} removed the description" : "{actor} прибрав(-ла) опис", + "You removed the description" : "Ви вилучили опис", + "An administrator removed the description" : "Адміністратор прибрав опис", + "You started a silent call" : "Ти почав мовчазний дзвінок", + "Outgoing silent call" : "Вихідний тихий дзвінок", + "{actor} started a silent call" : "{actor} почався тихий дзвінок.", + "Incoming silent call" : "Вхідний тихий дзвінок", + "You started a call" : "Ви почали виклик", + "Outgoing call" : "Вихідний дзвінок", + "{actor} started a call" : "{actor} розпочав розмову", + "Incoming call" : "Вхідний дзвінок", + "{actor} joined the call" : "{actor} приєднався до розмови", + "You joined the call" : "Ви приєдналися до виклику", + "{actor} left the call" : "{actor} залишив розмову", + "You left the call" : "Ви залишили розмову", + "{actor} unlocked the conversation" : "{actor} розблокував бесіду", + "You unlocked the conversation" : "Ви розблокували розмову", + "An administrator unlocked the conversation" : "Адміністратор розблокував розмову", + "{actor} locked the conversation" : "{actor} заблокував розмову", + "You locked the conversation" : "Ви заблокували розмову", + "An administrator locked the conversation" : "Адміністратор заблокував розмову", + "{actor} limited the conversation to the current participants" : "{actor} обмежив розмову до поточних учасників", + "You limited the conversation to the current participants" : "Ви обмежили бесіду поточними учасниками", + "An administrator limited the conversation to the current participants" : "Адміністратор обмежив розмову для поточних учасників", + "{actor} opened the conversation to registered users" : "{actor} відкрив розмову для зареєстрованих користувачів", + "You opened the conversation to registered users" : "Ви відкрили розмову для зареєстрованих користувачів", + "An administrator opened the conversation to registered users" : "Адміністратор відкрив розмову для зареєстрованих користувачів", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} відкрив розмову для зареєстрованих користувачів та користувачів, створених у додатку \"Гості", + "You opened the conversation to registered users and users created with the Guests app" : "Ви відкрили бесіду для зареєстрованих користувачів і користувачів, створених за допомогою програми \"Гості", + "An administrator opened the conversation to registered users and users created with the Guests app" : "Адміністратор відкрив розмову зареєстрованим користувачам і користувачам, створеним за допомогою програми \"Гості", + "The conversation is now open to everyone" : "Розмова тепер відкрита для всіх", + "{actor} opened the conversation to everyone" : "{actor} відкрив бесіду для всіх", + "You opened the conversation to everyone" : "Ви відкрили розмову для всіх", + "{actor} restricted the conversation to moderators" : "{actor} обмежив бесіду для модераторів", + "You restricted the conversation to moderators" : "Ви обмежили розмову модераторами", + "{actor} started breakout rooms" : "{actor} запустив розділені кімнати", + "You started breakout rooms" : "{actor} запустили розділені кімнати", + "{actor} stopped breakout rooms" : "{actor} закрив кімнати обговорення", + "You stopped breakout rooms" : "Ви закрили кімнати обговорення", + "{actor} allowed guests" : "{actor} дозволив гостям", + "You allowed guests" : "Ви дозволили доступ гостям", + "An administrator allowed guests" : "Адміністратор дозволив гостей", + "{actor} disallowed guests" : "{actor} заборонив гостей", + "You disallowed guests" : "Ви заборонили гостям", + "An administrator disallowed guests" : "Адміністратор заборонив гостям", + "{actor} set a password" : "{actor} встановив пароль", + "You set a password" : "Ви встановили пароль", + "An administrator set a password" : "Адміністратор встановив пароль", + "{actor} removed the password" : "{actor} вилучив пароль", + "You removed the password" : "Ви вилучили пароль", + "An administrator removed the password" : "Адміністратор забрав пароль", + "{actor} added {user}" : "{actor} додав(-ла) {user}", + "You joined the conversation" : "Ви приєдналися до розмови", + "{actor} joined the conversation" : "{actor} приєднався до розмови", + "You added {user}" : "Ви додали {user}", + "{actor} added you" : "{actor} додав(-ла) вас", + "An administrator added you" : "Вас додав адміністратор", + "An administrator added {user}" : "Адміністратор додав {user}", + "You left the conversation" : "Ви залишили розмову", + "{actor} left the conversation" : "{actor} залишив бесіду", + "{actor} removed {user}" : "{actor} вилучив користувача {user}", + "You removed {user}" : "Ви вилучили користувача {user}", + "{actor} removed you" : "{actor} вилучив вас", + "An administrator removed you" : "Адміністратор вилучив вас", + "An administrator removed {user}" : "Адміністратор вилучив {user}", + "{actor} invited {federated_user}" : "{actor} запрошені {federated_user}", + "You invited {federated_user}" : "Ти запросив {federated_user}", + "You accepted the invitation" : "Ви прийняли запрошення", + "{actor} invited you" : "{actor} запросив тебе.", + "An administrator invited you" : "Вас запросив адміністратор", + "An administrator invited {federated_user}" : "Адміністратор запросив {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} прийняв запрошення", + "{actor} removed {federated_user}" : "{actor} вилучив(-ла) {federated_user}", + "You removed {federated_user}" : "Ви вилучили {federated_user}", + "You declined the invitation" : "Ви відхилили запрошення", + "An administrator removed {federated_user}" : "Адміністратор вилучив {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} відхилив запрошення", + "{actor} added group {group}" : "{actor} додано групу {group}", + "You added group {group}" : "Ви додали групу {group}", + "An administrator added group {group}" : "Адміністратором додано групу {group}", + "{actor} removed group {group}" : "{actor} вилучив(-ла) групу {group}", + "You removed group {group}" : "Ви вилучили групу {group}", + "An administrator removed group {group}" : "Адміністратор вилучив групу {group}", + "{actor} added team {circle}" : "{actor} додано команду {circle}", + "You added team {circle}" : "Ви додали команду {circle}", + "An administrator added team {circle}" : "Адміністратор додав команду {circle}", + "{actor} removed team {circle}" : "{actor} видалена команда {circle}", + "You removed team {circle}" : "Ви видалили команду {circle}", + "An administrator removed team {circle}" : "Команда видалена адміністратором {circle}", + "{actor} added {phone}" : "{actor} додано {phone}", + "You added {phone}" : "Ви додали {phone}", + "An administrator added {phone}" : "Адміністратор додав {phone}", + "{actor} removed {phone}" : "{actor} видалено {phone}", + "You removed {phone}" : "Ви видалили {phone}", + "An administrator removed {phone}" : "Адміністратор видалив {phone}", + "{actor} promoted {user} to moderator" : "{actor} призначив {user} модератором ", + "You promoted {user} to moderator" : "Ви призначили {user} модератором ", + "{actor} promoted you to moderator" : "{actor} призначив вас модератором", + "An administrator promoted you to moderator" : "Адміністратор призначив вас модератором", + "An administrator promoted {user} to moderator" : "Адміністратор призначив {user} модератором", + "{actor} demoted {user} from moderator" : "{actor} позбавив {user} статусу модератора ", + "You demoted {user} from moderator" : "Ви позбавили {user} статусу модератора", + "{actor} demoted you from moderator" : "{actor} позбавив вас статусу модератора", + "An administrator demoted you from moderator" : "Адміністратор позбавив вас статусу модератора", + "An administrator demoted {user} from moderator" : "Адміністратор позбавив {user} статусу модератора", + "{actor} shared a file which is no longer available" : "{actor} поділив(-ла-)ся файлом, який більше не доступний ", + "You shared a file which is no longer available" : "Ви поділилися файлом, який більше не доступний", + "File shares are currently not supported in federated conversations" : "Файлові ресурси наразі не підтримуються в об'єднаних розмовах", + "The shared location is malformed" : "Спільне місце розташування сформовано неправильно", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} налаштував Matterbridge для синхронізації цієї розмови з іншими чатами ", + "You set up Matterbridge to synchronize this conversation with other chats" : "Ви налаштували Matterbridge для синхронізації цієї розмови з іншими чатами ", + "{actor} created thread {title}" : "{actor} створив потік {title}", + "You created thread {title}" : "Ви створили потік {title}", + "{actor} renamed thread {title}" : "{actor} перейменував потік {title}", + "You renamed thread {title}" : "Ви перейменували потік {title}", + "{actor} updated the Matterbridge configuration" : "{actor} оновив(-ла) конфігурацію Matterbridge ", + "You updated the Matterbridge configuration" : "Ви оновили конфігурацію Matterbridge ", + "{actor} removed the Matterbridge configuration" : "{actor} вилучив(-ла) конфігурацію Matterbridge ", + "You removed the Matterbridge configuration" : "Ви вилучили конфігурацію Matterbridge", + "{actor} started Matterbridge" : "{actor} запустив(ла) систему обміну повідомленнями Matterbridge", + "You started Matterbridge" : "Ви запустив(ла) систему обміну повідомленнями Matterbridge", + "{actor} stopped Matterbridge" : "{actor} зупинив(ла) систему обміну повідомленнями Matterbridge", + "You stopped Matterbridge" : "Ви зупинив(ла) систему обміну повідомленнями Matterbridge", + "{actor} deleted a message" : "{actor} вилучив(-ла) повідомлення", + "You deleted a message" : "Ви вилучили повідомлення", + "{actor} edited a message" : "{actor} відредагував повідомлення", + "You edited a message" : "Ви відредагували повідомлення", + "{actor} deleted a reaction" : "{actor} прибрав(-ла) реакцію", + "You deleted a reaction" : "Ви прибрали реакцію", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)","Ви встановили термін дії повідомлення у %n тижні(-в)"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)","Ви встановили термін дії повідомлення у %n дні(-в)"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)","Ви встановили термін дії повідомлення у %n годин(-у,и)"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)","Ви встановили термін дії повідомлення у %n хвилин(-у,и)"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встановити термін дії повідомлення у %n тижні(-в)","{actor} встанов(-ла) термін дії повідомлення у %n тижні(-в)"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встановити термін дії повідомлення у %n дні(-в)","{actor} встанов(-ла) термін дії повідомлення у %n дні(-в)"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встановити термін дії повідомлення у %n годин(-у,и)","{actor} встанов(-ла) термін дії повідомлення у %n годин(-у,и)"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встановити термін дії повідомлення у %n хвилин(-у,и)","{actor} встанов(-ла) термін дії повідомлення у %n хвилин(-у,и)"], + "{actor} disabled message expiration" : "{actor} вимкнув закінчення терміну дії повідомлення", + "You disabled message expiration" : "Ви вимкнули закінчення терміну дії повідомлення", + "{actor} cleared the history of the conversation" : "{actor} очистив(ла) історію розмови", + "You cleared the history of the conversation" : "Ви очистили історію розмови", + "{actor} set the conversation picture" : "{actor} встанов(ла) картинку розмови", + "You set the conversation picture" : "Ви встановили картинку розмови", + "{actor} removed the conversation picture" : "{actor} прибрав(-ла) зображення розмови", + "You removed the conversation picture" : "Ви вилучили зображення розмови", + "{actor} ended the poll {poll}" : "{actor} завершив опитування {poll}", + "You ended the poll {poll}" : "Ви завершили опитування {poll}", + "{actor} started the video recording" : "{actor} запустив відеозапис", + "You started the video recording" : "Ви запустили відеозапис", + "{actor} stopped the video recording" : "{actor} зупинив(ла) запис відео", + "You stopped the video recording" : "Ви зупинили запис відео", + "{actor} started the audio recording" : "{actor} запустив аудіозапис", + "You started the audio recording" : "Ви запустили аудіозапис", + "{actor} stopped the audio recording" : "{actor} зупинив аудіозапис", + "You stopped the audio recording" : "Ви зупинили аудіозапис", + "The recording failed" : "Запис не вдалося виконати", + "Someone voted on the poll {poll}" : "Хтось проголосував на опитуванні {poll}", + "Message deleted by author" : "Автор вилучив(-ла) повідомлення", + "Message deleted by {actor}" : "{actor} вилучив(-ла) повідомлення", + "Message deleted by you" : "Ви вилучили повідомлення", + "Deleted user" : "Вилучений користувач", + "Unknown number" : "Невідомий номер", + "Administration" : "Адміністрування", + "System" : "Система", + "%s (guest)" : "%s(гість)", + "Missed call" : "Пропущений дзвінок.", + "Unanswered call" : "Дзвінок без відповіді", + "Call ended (Duration {duration})" : "Дзвінок завершено (Тривалість {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} завершив розмову (Тривалість {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["Дзвінок з гостем %n було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})","Розмова з %n гостями була завершена, оскільки вона досягла максимальної тривалості (Тривалість {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["Дзвінок з гостем %n завершено (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})","Закінчилася розмова з %n гостями (Тривалість {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} закінчив розмову з %n гостем (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})","{actor} закінчив розмову з %n гостями (Duration {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1} було завершено, оскільки було досягнуто максимальної тривалості дзвінка (Тривалість {duration})", + "Call with {user1} ended (Duration {duration})" : "Дзвінок з {user1} закінчився (Тривалість {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} завершив виклик за участю {user1} (Тривалість {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1} та {user2} було завершено, оскільки він досягнув максимальної тривалості (Тривалість {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "Дзвінок з {user1} та {user2} закінчився (тривалість {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} завершив виклик з {user1} та {user2} (Тривалість {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1}, {user2} та {user3} було завершено, оскільки він досягнув максимальної тривалості (тривалість {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "Дзвінок з {user1}, {user2} та {user3} закінчився (тривалість {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} завершив виклик з {user1}, {user2} та {user3} (Duration {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3} та {user4} було завершено, оскільки він досягнув максимальної тривалості (тривалість {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3} та {user4} закінчився (тривалість {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} завершив(-ла) виклик з {user1}, {user2}, {user3} та {user4} (Тривалість {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "Дзвінок з абонентами {user1}, {user2}, {user3}, {user4} та {user5} було завершено, оскільки було досягнуто максимальної тривалості дзвінка (Тривалість {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "Дзвінок з {user1}, {user2}, {user3}, {user4} та {user5} закінчився (Тривалість {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} завершив виклик з {user1}, {user2}, {user3}, {user4} та {user5} (Тривалість {duration})", + "Message of {user} in {conversation}" : "Повідомлення {user} у {conversation}", + "Message of {user}" : "Повідомлення від {user}", + "Message of a deleted user in {conversation}" : "Повідомлення видаленого користувача в {conversation}", + "Talk conversations" : "Розмови", + "Talk to %s" : "Спілкуватися з %s", + "An error occurred. Please contact your administrator." : "Виникла помилка. Будь ласка, зверніться до вашого адміністратора.", + "Storage quota exceeded" : "Перевищено дозволений обсяг даних для збереження", + "File not found" : "Файл не знайдено", + "File is not shared, or shared but not with the user" : "До файлу не надано спільний доступ або надано, але не користувачеві", + "No account available to delete." : "Обліковий запис недоступний для видалення.", + "Poll" : "Опитування", + "Password needs to be set" : "Необхідно встановити пароль", + "Uploading the file failed" : "Не вдалося завантажити файл", + "No image file provided" : "Файл зображення не надано", + "File is too big" : "Файл занадто великий", + "Invalid file provided" : "Надано невірний файл", + "Invalid image" : "Недійсне зображення", + "Unknown filetype" : "Невідомий тип файлу", + "Talk mentions" : "Резюме із Talk", + "More conversations" : "Більше розмов", + "Say hi to your friends and colleagues!" : "Привітайтеся з вашими друзями та колегами!", + "No unread mentions" : "Немає непрочитаних згадок", + "Call in progress" : "Триває виклик", + "You were mentioned" : "Про вас згадували", + "Write to conversation" : "Написати у розмові", + "Writes event information into a conversation of your choice" : "Додає інформацію про подію в розмову на ваш вибір", + "Missing email field in header line" : "Відсутнє поле електронної пошти в заголовку", + "Following lines are invalid: %s" : "Наступні рядки є невірними: %s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s запросив вас до розмови \"%2$s\".", + "You were invited to conversation \"%s\"." : "Вас запросили на розмову \"%s\".", + "Conversation invitation" : "Запрошення до розмови", + "Scheduled time" : "Запланований час", + "Description" : "Опис", + "You can also dial-in via phone with the following details" : "Ви також можете підключитися за телефоном, вказавши такі дані", + "Dial-in information" : "Інформація для входу в систему", + "Meeting ID" : "Ідентифікатор зустрічі", + "Your PIN" : "Ваш пін-код.", + "Click the button below to join the lobby now." : "Натисніть кнопку нижче, щоб приєднатися до лобі зараз.", + "Click the link below to join the lobby now." : "Натисніть на посилання нижче, щоб приєднатися до лобі зараз.", + "Join lobby for \"%s\"" : "Приєднуйтесь до лобі для \"%s\"", + "Click the button below to join the conversation now." : "Натисніть кнопку нижче, щоб приєднатися до розмови зараз.", + "Click the link below to join the conversation now." : "Перейдіть за посиланням нижче, щоб приєднатися до дискусії прямо зараз.", + "Join \"%s\"" : "Приєднайте \"%s\"", + "Meeting" : "Зустріч", + "Password request: %s" : "Запит пароля:%s", + "Private conversation" : "Приватна розмова", + "Deleted user (%s)" : "Вилучений користувач (%s)", + "Failed to upload call recording" : "Не вдалося завантажити запис розмови", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "Серверу запису не вдалося завантажити запис дзвінка {call}. Будь ласка, зверніться до адміністрації.", + "Share to chat" : "Поділитися в чаті", + "Dismiss notification" : "Скасувати сповіщення", + "Call recording now available" : "Відтепер доступний запис дзвінків", + "The recording for the call in {call} was uploaded to {file}." : "Запис дзвінка в {call} було завантажено до {file}.", + "Transcript now available" : "Тепер доступна стенограма", + "The transcript for the call in {call} was uploaded to {file}." : "Розшифровку дзвінка в {call} було завантажено до {file}.", + "Failed to transcript call recording" : "Не вдалося розшифрувати запис розмови", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "Серверу не вдалося розшифрувати запис за адресою {file} для дзвінка в {call}. Будь ласка, зверніться до адміністрації.", + "Call summary now available" : "Звіт про дзвінки тепер доступний", + "The summary for the call in {call} was uploaded to {file}." : "Підсумки конкурсу {call} були завантажені на сайт {file}.", + "Failed to summarize call recording" : "Не вдалося підсумувати запис розмови", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "Сервер не зміг підсумувати запис на {file} для дзвінка на {call}. Будь ласка, зверніться до адміністрації.", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} запрошує вас приєднатися до {roomName} на {remoteServer}", + "Accept" : "Прийняти", + "Decline" : "Відхилити", + "{user1} invited you to a federated conversation" : "{user1} запросили вас на федеративну розмову", + "Someone reacted" : "Хтось відреагував", + "New message" : "Нове повідомлення", + "Reminder" : "Нагадування", + "Someone mentioned you" : "Хтось згадував про вас.", + "Notification" : "Сповіщення", + "Someone reacted in a private conversation" : "Хтось відреагував у приватній розмові", + "You received a message in a private conversation" : "Ви отримали повідомлення у приватній розмові", + "Reminder in a private conversation" : "Нагадування в приватній розмові", + "Someone mentioned you in a private conversation" : "Хтось згадав вас у приватній розмові", + "Notification in a private conversation" : "Сповіщення в приватній розмові", + "Reminder: You in {call}" : "Нагадування: Ви в {call}", + "Reminder: {user} in {call}" : "Нагадування: {user} в {call}", + "Reminder: Deleted user in {call}" : "Нагадування: Видалено користувача в {call}", + "Reminder: {guest} (guest) in {call}" : "Нагадування: {guest} (guest) у {call}", + "Reminder: Guest in {call}" : "Нагадування: Гість у {call}", + "{user} reacted with {reaction}" : "{user} прореагував з {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} прореагував з {reaction} у {call}", + "Deleted user reacted with {reaction} in {call}" : "Видалений користувач відреагував на {reaction} у {call}", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest} (guest) відреагував(ла) на {reaction} у {call}", + "Guest reacted with {reaction} in {call}" : "Гість відреагував {reaction} у {call}", + "{user} in {call}" : "{user} у {call}", + "Deleted user in {call}" : "Вилучено користувача у {call}", + "{guest} (guest) in {call}" : "{guest} (guest) у {call}", + "Guest in {call}" : "Гість у {call}", + "{user} sent you a private message" : "{user} відправив(ла) вам приватне повідомлення", + "{user} sent a message in conversation {call}" : "{user} надіслав(ла) повідомлення в розмові {call}", + "A deleted user sent a message in conversation {call}" : "Видалений користувач надіслав(ла) повідомлення в розмові {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (guest) надіслав(ла) повідомлення в розмові {call}", + "A guest sent a message in conversation {call}" : "Гість надіслав повідомлення в розмові {call}.", + "{user} replied to your private message" : "{user} відповів(ла) на ваше особисте повідомлення", + "{user} replied to your message in conversation {call}" : "{user} відповів(ла) на ваше повідомлення у розмові {call}.", + "A deleted user replied to your message in conversation {call}" : "Видалений користувач відповів(ла) на ваше повідомлення в розмові {call}.", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (guest) відповів(ла) на ваше повідомлення у розмові {call}.", + "A guest replied to your message in conversation {call}" : "Гість відповів(ла) на ваше повідомлення у розмові {call}.", + "Reminder: You in private conversation {call}" : "Нагадування: Ви в приватній розмові {call}", + "Reminder: A deleted user in private conversation {call}" : "Нагадування: Видалений користувач у приватній розмові {call}", + "Reminder: {user} in private conversation" : "Нагадування: {user} у приватній розмові", + "Reminder: You in conversation {call}" : "Нагадування: Ви в розмові {call}", + "Reminder: {user} in conversation {call}" : "Нагадування: {user} в розмові {call}", + "Reminder: A deleted user in conversation {call}" : "Нагадування: Видалений користувач у розмові {call}", + "Reminder: {guest} (guest) in conversation {call}" : "Нагадування: {guest} (guest) у розмові {call}", + "Reminder: A guest in conversation {call}" : "Нагадування: Гість у розмові {call}.", + "{user} reacted with {reaction} to your private message" : "{user} відреагував(ла) {reaction} на ваше приватне повідомлення", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} відреагував {reaction} на ваше повідомлення у розмові {call}", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "Видалений користувач відреагував {reaction} на ваше повідомлення у розмові {call}", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest} (guest) відреагував(ла) {reaction} на ваше повідомлення у розмові {call}", + "A guest reacted with {reaction} to your message in conversation {call}" : "Гість відреагував {reaction} на ваше повідомлення у розмові {call}.", + "{user} mentioned you in a private conversation" : "{user} згадав вас у приватній розмові", + "{user} mentioned group {group} in conversation {call}" : "{user} згадав(ла) групу {group} в розмові {call}", + "{user} mentioned team {team} in conversation {call}" : "{user} згадували команду {team} у розмові {call}", + "{user} mentioned everyone in conversation {call}" : "{user} згадав(ла) усіх у розмові {call}", + "{user} mentioned you in conversation {call}" : "{user} згадував(ла) вас у розмові {call}", + "A deleted user mentioned group {group} in conversation {call}" : "Видалений користувач згадав(ла) групу {group} у розмові {call}", + "A deleted user mentioned team {team} in conversation {call}" : "Видалений користувач згадав команду {team} у розмові {call}", + "A deleted user mentioned everyone in conversation {call}" : "Видалений користувач згадав усіх у розмові {call}.", + "A deleted user mentioned you in conversation {call}" : "Користувач, якого було вилучено, згадав вас у розмові {call}", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest} (гість) згадав групу {group} в розмові {call}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest} (гість) згадав у розмові команду {team} {call}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest} (гість) згадав усіх у розмові {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (гість) згадав вас у розмові {call}", + "A guest mentioned group {group} in conversation {call}" : "Гість згадав групу {group} у розмові {call}", + "A guest mentioned team {team} in conversation {call}" : "У розмові гість згадав команду {team} {call}", + "A guest mentioned everyone in conversation {call}" : "Гість згадав усіх у розмові {call}", + "A guest mentioned you in conversation {call}" : "Гість згадав вас у розмові {call}", + "View message" : "Переглянути повідомлення", + "Dismiss reminder" : "Скасувати нагадування ", + "View chat" : "Перегляд чату", + "{user} invited you to a group conversation: {call}" : "{user} запросив(-ла) вас до групової розмови: {call}", + "Join call" : "Приєднатися", + "Answer call" : "Відповісти на виклик", + "{user} would like to talk with you" : "{user} хотів(-ла) би поговорити з вами", + "Call back" : "Передзвони мені.", + "You missed a call from {user}" : "Ви пропустили виклик від {user}", + "Accept call" : "Прийняти виклик", + "Incoming phone call from {call}" : "Вхідний дзвінок від {call}", + "You missed a phone call from {call}" : "Ви пропустили телефонний дзвінок від {call}", + "A group call has started in {call}" : "Групову розмову розпочато у {call}", + "You missed a group call in {call}" : "Ви пропустили груповий виклик у {call}", + "{email} is requesting the password to access {file}" : "{email} запитує пароль для доступу до {file}", + "{email} tried to request the password to access {file}" : "{email} намагався запросити пароль для доступу до {file}", + "Someone is requesting the password to access {file}" : "Хтось запитує пароль для доступу до {file}", + "Someone tried to request the password to access {file}" : "Хтось намагався запитати пароль для доступу до {file}", + "Open settings" : "Відкрити налаштування", + "Hosted signaling server added" : "Додано виділений сервер сигналізації", + "The hosted signaling server is now configured and will be used." : "Виділений сервер сигналізації налаштований і готовий до використання.", + "Hosted signaling server removed" : "Видалено хостинговий сервер сигналізації", + "The hosted signaling server was removed and will not be used anymore." : "Виділений сервер сигналізації було вилучено і більше не буде використовуватися.", + "Hosted signaling server changed" : "Змінено виділений сервер сигналізації", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Обліковий запис виділеного сервера сигналізації змінив статус з \"{oldstatus}\" на \"{newstatus}\".", + "pending" : "на розгляді", + "active" : "активний", + "expired" : "закінчився", + "blocked" : "заблоковано", + "error" : "помилка", + "The certificate of {host} expires in {days} days" : "Термін дії сертифіката {host} закінчується через {days} дні(-в)", + "The certificate of {host} expired" : "Термін дії сертифіката {host} закінчився", + "Contact via Talk" : "Зв'яжіться з нами через Talk", + "Open Talk" : "Відкрити Talk", + "Default" : "За замовчуванням", + "Presentation" : "Презентація", + "Webinar" : "Вебінар", + "Conversations" : "Розмови", + "Messages in current conversation" : "Повідомлення в поточній розмові", + "{user}" : "{user}", + "Messages" : "Повідомлення", + "{user} in {conversation}" : "{user} в {conversation}", + "Messages in other conversations" : "Повідомлення в інших розмовах", + "One-to-one rooms always need to show the other users avatar" : "У кімнатах один на один завжди потрібно показувати аватарку іншого користувача", + "Invalid emoji character" : "Неправильний символ емодзі", + "Invalid background color" : "Неправильний колір фону", + "Avatar image is not square" : "Зображення аватара не квадратне", + "Room {number}" : "Кімната {number}", + "Other" : "Інші", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Не вдалося запросити пробну версію, оскільки сервер недоступний. Будь ласка, спробуйте пізніше.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Виникла проблема з авторизацією цього сервера хмари. Можливо, він недоступний ззовні, що не дозволяє здійснити перевірити за URL.", + "Something unexpected happened." : "Сталося щось непередбачуване.", + "The URL is invalid." : "URL-адреса є недійсною.", + "An HTTPS URL is required." : "Необхідно вказати HTTPS URL.", + "The email address is invalid." : "Адреса електронної пошти є недійсною.", + "The language is invalid." : "Мова є недійсною.", + "The country is invalid." : "Країна є недійсною.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Існує проблема із запитом на випробування. Будь ласка, перевірте свої журнали для отримання додаткової інформації.", + "Too many requests are send from your servers address. Please try again later." : "Занадто багато запитів відправлено з адреси вашого сервера. Будь ласка, спробуйте пізніше.", + "There is already a trial registered for this Nextcloud instance." : "Для цього примірника сервера хмари Nextcloud вже зареєстровано пробне використання.", + "Something unexpected happened. Please try again later." : "Сталося щось непередбачуване. Будь ласка, спробуйте пізніше.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Не вдалося надіслати запит на пробну версію, тому що пробний сервер поводився некоректно. Будь ласка, спробуйте пізніше.", + "Trial requested but failed to get account information. Please check back later." : "Запитано пробну версію, але не вдалося отримати інформацію про обліковий запис. Будь ласка, перевірте пізніше.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Виникла проблема із авторизацією цього запиту. Можливо, він недоступний ззовні, що не дозволяє перевірити його URL.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Не вдалося отримати інформацію про обліковий запис через неправильну роботу пробного сервера. Будь ласка, перевірте пізніше.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Існує проблема з отриманням інформації про обліковий запис. Будь ласка, перевірте свої журнали для отримання додаткової інформації.", + "There is no such account registered." : "Такого облікового запису не зареєстровано.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Не вдалося отримати інформацію про обліковий запис, оскільки пробний сервер недоступний. Будь ласка, перевірте пізніше.", + "Deleting the hosted signaling server account failed. Please check back later." : "Не вдалося вилучити обліковий запис сервера сигналізації. Спробуйте пізніше.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Не вдалося вилучити обліковий запис, оскільки отимано неправильний відгук від пробного сервера. Спробуйте пізніше.", + "There is a problem with deleting the account. Please check your logs for further information." : "Виникла проблема з вилученням облікового запису. Будь ласка, перевірте журнали, щоб отримати додаткову інформацію.", + "Too many requests are sent from your servers address. Please try again later." : "Занадто багато запитів відправлено з адреси вашого сервера. Будь ласка, повторіть спробу пізніше.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Не вдалося вилучити обліковий запис, оскільки пробний сервер недоступний. Спробуйте пізніше.", + "Note to self" : "Примітка для себе", + "A place for your private notes, thoughts and ideas" : "Місце для ваших особистих нотаток, думок та ідей", + "Transcript is AI generated and may contain mistakes" : "Транскрипт згенерований штучним інтелектом і може містити помилки", + "Summary is AI generated and may contain mistakes" : "Резюме згенероване штучним інтелектом і може містити помилки", + "Let's get started!" : "Почнімо!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** — це безпечна, самостійно розміщена комунікаційна платформа, яка безперешкодно інтегрується в екосистему Nextcloud.\n\n#### Основні функції Nextcloud Talk:\n\n* Чат і обмін повідомленнями в приватних і групових чатах\n* Голосові та відеодзвінки\n* Обмін файлами та інтеграція з іншими додатками Nextcloud\n* Налаштовувані параметри розмов, модерація та контроль конфіденційності\n* Веб, настільні та мобільні пристрої (iOS та Android)\n* Приватне та безпечне спілкування\n\nДізнайтеся більше в [документації для користувачів](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# Ласкаво просимо до Nextcloud Talk\n\nNextcloud Talk — це приватний і потужний месенджер, інтегрований із Nextcloud. Чатуйте в приватних або групових розмовах, співпрацюйте за допомогою голосових і відеодзвінків, організовуйте вебінари та події, налаштовуйте свої розмови та багато іншого.", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 Форматування тексту для створення багатоформатних повідомлень\n\nУ Nextcloud Talk ви можете використовувати синтаксис Markdown для форматування своїх повідомлень. Наприклад, застосовувати **жирний** або *курсивний* шрифт, або `виділяти текст як код`. Ви навіть можете створювати таблиці та додавати заголовки до свого тексту.\n\nПотрібно виправити помилку або змінити форматування? Відредагуйте своє повідомлення, натиснувши «Редагувати повідомлення» в меню повідомлення.", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 Додавання вкладень та посилань\n\nДодавайте файли з Nextcloud Hub за допомогою кнопки «+». Діліться елементами з Files та різних додатків Nextcloud. Деякі додатки навіть підтримують інтерактивні віджети, наприклад, додаток Text.", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 Нехай розмови течуть: згадуйте користувачів, реагуйте на повідомлення та багато іншого\n\nВи можете згадати всіх учасників розмови, використовуючи %s або згадати конкретних учасників, набравши «@» і вибравши їх ім'я зі списку.", + "You can reply to messages, forward them to other chats and people, or copy message content." : "Ви можете відповідати на повідомлення, пересилати їх в інші чати та іншим користувачам або копіювати їхній вміст.", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ Робіть більше з Smart Picker\n\nПросто введіть «/» або перейдіть до меню «+», щоб відкрити Smart Picker, де ви можете додавати різний контент до своїх повідомлень. Ви можете налаштувати Smart Picker, щоб додавати елементи з додатків Nextcloud, GIF-файли, місця на карті, контент, створений штучним інтелектом, та багато іншого.", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ Керування налаштуваннями розмов\n\nУ меню розмов ви можете отримати доступ до різних налаштувань для керування розмовами, таких як:\n* Редагування інформації про розмову\n* Керування сповіщеннями\n* Застосування численних правил модерації\n* Налаштування доступу та безпеки\n* Увімкнення ботів\n* та багато іншого!", + "Andorra" : "Андорра", + "United Arab Emirates" : "Об'єднані Арабські Емірати", + "Afghanistan" : "Афганістан", + "Antigua and Barbuda" : "Антигуа та Барбуда", + "Anguilla" : "Ангілья ", + "Albania" : "Албанія ", + "Armenia" : "Вірменія", + "Angola" : "Ангола ", + "Antarctica" : "Антарктида", + "Argentina" : "Аргентина ", + "American Samoa" : "Американське Самоа ", + "Austria" : "Австрія ", + "Australia" : "Австралія ", + "Aruba" : "Аруба ", + "Åland Islands" : "Аландські острови ", + "Azerbaijan" : "Азербайджан", + "Bosnia and Herzegovina" : "Боснія і Герцеговина", + "Barbados" : "Барбадос", + "Bangladesh" : "Бангладеш", + "Belgium" : "Бельгія ", + "Burkina Faso" : "Буркіна-Фасо", + "Bulgaria" : "Болгарія ", + "Bahrain" : "Бахрейн ", + "Burundi" : "Бурунді ", + "Benin" : "Бенін", + "Saint Barthélemy" : "Сен-Бартелемі ", + "Bermuda" : "Бермудські острови", + "Brunei Darussalam" : "Бруней", + "Bolivia, Plurinational State of" : "Болівія", + "Bonaire, Sint Eustatius and Saba" : "Бонайре, Сінт-Естатіус і Саба", + "Brazil" : "Бразилія ", + "Bahamas" : "Багамські острови", + "Bhutan" : "Бутан ", + "Bouvet Island" : "Острів Буве", + "Botswana" : "Ботсвана ", + "Belarus" : "Білорусь", + "Belize" : "Беліз ", + "Canada" : "Канада", + "Cocos (Keeling) Islands" : "Кокосові (Кілінгові) острови ", + "Congo, the Democratic Republic of the" : "Демократична Республіка Конґо", + "Central African Republic" : "Центральноафриканська Республіка ", + "Congo" : "Конго ", + "Switzerland" : "Швейцарія ", + "Côte d'Ivoire" : "Кот-д'Івуар ", + "Cook Islands" : "Острови Кука", + "Chile" : "Чилі ", + "Cameroon" : "Камерун ", + "China" : "Китай ", + "Colombia" : "Колумбія ", + "Costa Rica" : "Коста-Ріка ", + "Cuba" : "Куба ", + "Cabo Verde" : "Кабо-Верде", + "Curaçao" : "Кюрасао", + "Christmas Island" : "Острів Різдва ", + "Cyprus" : "Кіпр ", + "Czechia" : "Чехія ", + "Germany" : "Німеччина ", + "Djibouti" : "Джибуті ", + "Denmark" : "Данія ", + "Dominica" : "Домініка ", + "Dominican Republic" : "Домініканська Республіка ", + "Algeria" : "Алжир", + "Ecuador" : "Еквадор", + "Estonia" : "Естонія", + "Egypt" : "Єгипет", + "Western Sahara" : "Західна Сахара ", + "Eritrea" : "Еритрея", + "Spain" : "Іспанія", + "Ethiopia" : "Ефіопія", + "Finland" : "Фінляндія", + "Fiji" : "Фіджі", + "Falkland Islands (Malvinas)" : "Фолклендські (Мальвінські) острови ", + "Micronesia, Federated States of" : "Мікронезія", + "Faroe Islands" : "Фарерські острови ", + "France" : "Франція", + "Gabon" : "Габон", + "United Kingdom of Great Britain and Northern Ireland" : "Сполучене Королівство Великої Британії та Північної Ірландії ", + "Grenada" : "Гренада", + "Georgia" : "Грузія", + "French Guiana" : "Французька Гвіана ", + "Guernsey" : "Гернсі", + "Ghana" : "Гана", + "Gibraltar" : "Гібралтар", + "Greenland" : "Гренландія", + "Gambia" : "Гамбія", + "Guinea" : "Гвінея", + "Guadeloupe" : "Гваделупа", + "Equatorial Guinea" : "Екваторіальна Гвінея ", + "Greece" : "Греція", + "South Georgia and the South Sandwich Islands" : "Південна Георгія та Південні Сандвічеві острови ", + "Guatemala" : "Гватемала", + "Guam" : "Гуам", + "Guinea-Bissau" : "Гвінея-Бісау ", + "Guyana" : "Гайана", + "Hong Kong" : "Гонконг", + "Heard Island and McDonald Islands" : "Острови Герд і Макдональд", + "Honduras" : "Гондурас", + "Croatia" : "Хорватія", + "Haiti" : "Гаїті", + "Hungary" : "Угорщина", + "Indonesia" : "Індонезія", + "Ireland" : "Ірландія", + "Israel" : "Ізраїль", + "Isle of Man" : "Острів Мен", + "India" : "Індія", + "British Indian Ocean Territory" : "Британська територія в Індійському океані ", + "Iraq" : "Ірак", + "Iran, Islamic Republic of" : "Ісламська Республіка Іран", + "Iceland" : "Ісландія", + "Italy" : "Італія", + "Jersey" : "Джерсі", + "Jamaica" : "Ямайка", + "Jordan" : "Йорданія", + "Japan" : "Японія", + "Kenya" : "Кенія", + "Kyrgyzstan" : "Киргизстан", + "Cambodia" : "Камбоджа", + "Kiribati" : "Кірибаті", + "Comoros" : "Коморські острови", + "Saint Kitts and Nevis" : "Сент-Кіттс і Невіс", + "Korea, Democratic People's Republic of" : "Корейська Народно-Демократична Республіка Кореї", + "Korea, Republic of" : "Корея, Республіка ", + "Kuwait" : "Кувейт", + "Cayman Islands" : "Кайманові острови ", + "Kazakhstan" : "Казахстан", + "Lao People's Democratic Republic" : "Лаоська Народно-Демократична Республіка", + "Lebanon" : "Ліван", + "Saint Lucia" : "Сент-Люсія ", + "Liechtenstein" : "Ліхтенштейн", + "Sri Lanka" : "Шрі-Ланка ", + "Liberia" : "Ліберія", + "Lesotho" : "Лесото", + "Lithuania" : "Литва", + "Luxembourg" : "Люксембург", + "Latvia" : "Латвія", + "Libya" : "Лівія", + "Morocco" : "Марокко", + "Monaco" : "Монако", + "Moldova, Republic of" : "Молдова", + "Montenegro" : "Чорногорія", + "Saint Martin (French part)" : "Сен-Мартен (французька частина) ", + "Madagascar" : "Мадагаскар", + "Marshall Islands" : "Маршаллові острови", + "North Macedonia" : "Північна Македонія ", + "Mali" : "Малі", + "Myanmar" : "М'янма", + "Mongolia" : " Монголія ", + "Macao" : "Макао", + "Northern Mariana Islands" : "Північні Маріанські острови", + "Martinique" : "Мартиніка", + "Mauritania" : "Мавританія", + "Montserrat" : "Монтсеррат", + "Malta" : "Мальта", + "Mauritius" : "Маврикій", + "Maldives" : "Мальдіви", + "Malawi" : "Малаві", + "Mexico" : "Мексика", + "Malaysia" : "Малайзія", + "Mozambique" : "Мозамбік", + "Namibia" : "Намібія", + "New Caledonia" : "Нова Каледонія ", + "Niger" : "Нігер", + "Norfolk Island" : "Острів Норфолк ", + "Nigeria" : "Нігерія", + "Nicaragua" : "Нікарагуа", + "Netherlands" : "Нідерланди", + "Norway" : "Норвегія", + "Nepal" : "Непал", + "Nauru" : "Науру", + "Niue" : "Ніуе", + "New Zealand" : "Нова Зеландія ", + "Oman" : "Оман", + "Panama" : "Панама", + "Peru" : "Перу", + "French Polynesia" : "Французька Полінезія ", + "Papua New Guinea" : "Папуа-Нова Гвінея", + "Philippines" : "Філіппіни", + "Pakistan" : "Пакистан", + "Poland" : "Польща", + "Saint Pierre and Miquelon" : "Сен-П'єр і Мікелон ", + "Pitcairn" : "Піткерн", + "Puerto Rico" : "Пуерто-Ріко ", + "Palestine, State of" : "Палестина", + "Portugal" : "Португалія", + "Palau" : "Палау", + "Paraguay" : "Парагвай", + "Qatar" : "Катар", + "Réunion" : "Реюньйон", + "Romania" : "Румунія", + "Serbia" : "Сербія", + "Russian Federation" : "мордор", + "Rwanda" : "Руанда", + "Saudi Arabia" : "Саудівська Аравія ", + "Solomon Islands" : "Соломонові острови ", + "Seychelles" : "Сейшельські острови ", + "Sudan" : "Судан", + "Sweden" : "Швеція", + "Singapore" : "Сингапур", + "Saint Helena, Ascension and Tristan da Cunha" : "острова Святої Єлени, Вознесіння та Тристан-да-Кунья ", + "Slovenia" : "Словенія", + "Svalbard and Jan Mayen" : "Шпіцберген і Ян-Майєн ", + "Slovakia" : "Словаччина", + "Sierra Leone" : "Сьєрра-Леоне ", + "San Marino" : "Сан-Марино ", + "Senegal" : "Сенегал", + "Somalia" : "Сомалі", + "Suriname" : "Суринам", + "South Sudan" : "Південний Судан ", + "Sao Tome and Principe" : "Сан-Томе і Принсіпі ", + "El Salvador" : "Сальвадор ", + "Sint Maarten (Dutch part)" : "Сінт-Мартен (нідерландська частина) ", + "Syrian Arab Republic" : "Сирійська Арабська Республіка ", + "Eswatini" : "Есватіні", + "Turks and Caicos Islands" : "Острови Теркс і Кайкос ", + "Chad" : "Чад", + "French Southern Territories" : "Французькі Південні й Антарктичні Території", + "Togo" : "Того", + "Thailand" : "Таїланд", + "Tajikistan" : "Таджикистан", + "Tokelau" : "Токелау", + "Timor-Leste" : "Тимор-Лешті ", + "Turkmenistan" : "Туркменістан", + "Tunisia" : "Туніс", + "Tonga" : "Тонга", + "Turkey" : "Туреччина", + "Trinidad and Tobago" : "Тринідад і Тобаго ", + "Tuvalu" : "Тувалу", + "Taiwan, Province of China" : "Тайвань", + "Tanzania, United Republic of" : "Танзанія", + "Ukraine" : "Україна", + "Uganda" : "Уганда", + "United States Minor Outlying Islands" : "Малі Віддалені Острови Сполучених Штатів Америки ", + "United States of America" : "Сполучені Штати Америки ", + "Uruguay" : "Уругвай", + "Uzbekistan" : "Узбекистан", + "Holy See" : "Святий Престол ", + "Saint Vincent and the Grenadines" : "Сент-Вінсент і Гренадини ", + "Venezuela, Bolivarian Republic of" : "Венесуела, Боліваріанська Республіка", + "Virgin Islands, British" : "Віргінські острови, Великобританія", + "Virgin Islands, U.S." : "Віргінські острови, США", + "Viet Nam" : "В'єтнам ", + "Vanuatu" : "Вануату", + "Wallis and Futuna" : "Уолліс і Футуна ", + "Samoa" : "Самоа", + "Yemen" : "Ємен", + "Mayotte" : "Майотта", + "South Africa" : "Півде́нно-Африка́нська Респу́бліка", + "Zambia" : "Замбія", + "Zimbabwe" : "Зімбабве", + "Background blur" : "Розмиття фону", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "Не вдалося перевірити підтримку завантаження WASM. Будь ласка, перевірте вручну, чи обслуговує ваш веб-сервер файли `.wasm`.", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "Ваш веб-сервер не налаштований належним чином для доставки файлів `.wasm`. Зазвичай це проблема з конфігурацією Nginx. Для розмиття фону потрібно налаштувати доставку файлів `.wasm`. Порівняйте свою конфігурацію Nginx з рекомендованою конфігурацією в нашій документації.", + "Talk configuration values" : "Значення конфігурації розмови", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "Примусове обмеження тривалості виклику підтримується лише за допомогою системного cron. Будь ласка, увімкніть системний cron або видаліть конфігурацію `max_call_duration`.", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "Невеликі значення `max_call_duration` (наразі встановлено %d) не можуть бути застосовані через технічні обмеження. Фонове завдання виконується лише кожні 5 хвилин, тому використовуйте його на власний ризик.", + "Federation" : "Об'єднання", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Наполегливо рекомендується налаштувати \"memcache.locking\", коли увімкнено Talk Federation.", + "High-performance backend" : "Високопродуктивний бекенд", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "Не налаштовано високопродуктивний бекенд - Використання Nextcloud Talk без високопродуктивного бекенду дозволяє лише дуже невеликі дзвінки (максимум 2-3 учасники). Налаштуйте високопродуктивний бекенд, щоб забезпечити безперебійну роботу дзвінків з багатьма учасниками.", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "Використання високопродуктивного бекенду в режимі «conversation_cluster» є застарілим і більше не буде підтримуватися в наступній версії. Високопродуктивний бекенд зараз підтримує реальне кластеризування, яке слід використовувати замість цього.", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "Визначення декількох високопродуктивних бекендів є застарілим і більше не буде підтримуватися в наступній версії. Замість цього слід налаштувати балансувальник навантаження разом із кластерними серверами сигналізації та налаштувати його в параметрах Talk.", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "Збережений відкритий ключ для алгоритму %1$s не збігається зі збереженим закритим ключем. Запустіть %2$s, щоб виправити помилку.", + "High-performance backend not configured correctly. Run %s for details." : "Високопродуктивний бекенд налаштовано неправильно. Запустіть %s для отримання детальної інформації.", + "High-performance backend not configured correctly" : "Високопродуктивний бекенд налаштовано неправильно", + "Error: Cannot connect to server" : "Помилка: Не вдається підключитися до сервера", + "Error: Server did not respond with proper JSON" : "Помилка: Сервер не відповів правильним JSON", + "Error: Certificate expired" : "Помилка: Термін дії сертифіката закінчився", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Помилка: Системний час сервера Nextcloud та високопродуктивного сервера бекенду не синхронізований. Переконайтеся, що обидва сервери підключені до сервера часу, або вручну синхронізуйте їх час.", + "Could not get version" : "Не вдалося отримати версію", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "Помилка: Запущена версія: {version}; Сервер потрібно оновити, щоб він був сумісний з цією версією Talk", + "Error: Server responded with: {error}" : "Помилка: Сервер відповів: {error}", + "Error: Unknown error occurred" : "Помилка: Сталася невідома помилка", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "Попередження: Поточна версія: {version}; Сервер не підтримує всі можливості цієї версії Talk, відсутні функції: {features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "Наполегливо рекомендується налаштувати кеш пам'яті під час запуску Nextcloud Talk з високопродуктивним бекендом.", + "Client Push" : "Клієнтський поштовх", + "Recording backend" : "Бекенд для запису", + "Using the recording backend requires a High-performance backend." : "Використання бекенду для запису вимагає високопродуктивного бекенду.", + "No recording backend configured" : "Не налаштовано бекенд для запису", + "SIP configuration" : "Налаштування SIP", + "Using the SIP functionality requires a High-performance backend." : "Використання функціональності SIP вимагає високопродуктивного бекенда.", + "No SIP backend configured" : "Не налаштовано бекенд SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Недійсна дата, формат дати має бути РРРР-ММ-ДД", + "Conversation not found" : "Розмову не знайдено", + "Path is already shared with this conversation" : "Шлях вже пройдений з цією розмовою", + "Chat, video & audio-conferencing using WebRTC" : "Чат, відео- та аудіоконференції за допомогою WebRTC", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "Чат, відео- та аудіоконференції за допомогою WebRTC\n\n* 💬 **Чат** Nextcloud Talk має простий текстовий чат, що дозволяє ділитися або завантажувати файли з програми Nextcloud Files або локального пристрою та згадувати інших учасників.\n* 👥 **Приватні, групові, публічні та захищені паролем дзвінки!** Запросіть когось, цілу групу або надішліть публічне посилання, щоб запросити на дзвінок.\n* 🌐 **Федеративні чати** Чатуйте з іншими користувачами Nextcloud на їхніх серверах\n* 💻 **Спільний доступ до екрана!** Діліться своїм екраном з учасниками дзвінка.\n* 🚀 **Інтеграція з іншими додатками Nextcloud**, такими як Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck та багатьма іншими.\n* 🌉 **Синхронізація з іншими чат-рішеннями** Завдяки інтеграції [Matterbridge](https://github.com/42wim/matterbridge/) у Talk ви можете легко синхронізувати багато інших чат-рішень із Nextcloud Talk і навпаки.", + "Leave call" : "Вийти", + "Navigating away from the page will leave the call in {conversation}" : "При переході зі сторінки виклик залишиться у {conversation}", + "Stay in call" : "Залишатися", + "Error occurred when getting the conversation information" : "Виникла помилка при отриманні інформації про розмову", + "Discuss this file" : "Обговорити цей файл", + "Share this file with others to discuss it" : "Поділітися цим файлом з іншими, щоб обговорити його", + "Share this file" : "Поділитися файлом", + "Join conversation" : "Приєднатися", + "This conversation is password-protected." : "Ця розмова захищена паролем.", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "Ми виявили кілька невірних спроб введення пароля з вашого IP. Тому ваша наступна спроба буде обмежена до 30 секунд.", + "The password is wrong. Try again." : "Пароль неправильний. Спробуйте ще раз.", + "Password" : "Пароль", + "Submit" : "Гаразд", + "Error requesting the password." : "Помилка при запиті пароля.", + "Request password" : "Запит пароля", + "This conversation has ended" : "Ця розмова завершилася", + "Error occurred when joining the conversation" : "Виникла помилка під час приєднання до розмови", + "Close Talk sidebar" : "Закрити бічну панель", + "Open Talk sidebar" : "Відкрити бічну панель", + "Everyone" : "Всі", + "Users and moderators" : "Учасники та модератори", + "Moderators only" : "Тільки модератори", + "Disable calls" : "Вимкнути дзвінки", + "Save changes" : "Зберегти зміни", + "Saving …" : "Збереження …", + "Saved!" : "Збережено!", + "Limit to groups" : "Обмежити групами", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Якщо вибрано хоча б одну групу, в розмовах можуть брати участь лише користувачі із зазначених груп.", + "Guests can still join public conversations." : "Гості все ще можуть приєднуватися до публічних розмов.", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "Користувачі, які більше не можуть користуватися чатом, залишаться в списку учасників попередніх розмов, а їхні повідомлення в чаті будуть збережені.", + "Limit using Talk" : "Обмеження на використання Talk", + "Limit creating a public and group conversation" : "Обмежте створення публічних та групових розмов", + "Limit creating conversations" : "Обмеження на створення розмов", + "Limit starting a call" : "Обмеження на початок дзвінка", + "Limit starting calls" : "Обмежити створення викликів", + "When a call has started, everyone with access to the conversation can join the call." : "Після початку виклику будь-хто, хто має доступ до розмови, може приєднатися до конференції.", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На цьому сервері встановлені наступні боти. У документації ви можете знайти детальну інформацію про те, як {linkstart1}створити власного бота{linkend} або {linkstart2}список ботів{linkend}, які можна ввімкнути на вашому сервері.", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "На цьому сервері не встановлено ботів. У документації ви можете знайти детальну інформацію про те, як {linkstart1}створити власного бота{linkend} або {linkstart2}список ботів{linkend}, які можна ввімкнути на вашому сервері.", + "Description is not provided" : "Опис не надається", + "Locked for moderators" : "Заблоковано для модераторів", + "Enabled" : "Увімкнено", + "Disabled" : "Вимкнено", + "Bots settings" : "Налаштування ботів", + "State" : "Стан", + "Name" : "Ім'я", + "Last error" : "Остання помилка", + "Total errors count" : "Загальна кількість помилок", + "Find more bots" : "Знайти більше ботів", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "Довірені сервери можна налаштувати на сторінці {linkstart}Налаштування спільного доступу{linkend}.", + "Beta" : "Бета", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "Об'єднані чати та дзвінки вже працюють. Робота з вкладеннями буде реалізована в наступній версії.", + "Enable Federation in Talk app" : "Увімкнути застосунок об'єднані хмари для Talk", + "Permissions" : "Дозволи ", + "Allow users to be invited to federated conversations" : "Дозволити користувачам запрошувати вас до розмов з інших хмар", + "Allow users to invite federated users into conversation" : "Дозвольте користувачам запрошувати користувачів з інших хмар до бесіди", + "Only allow to federate with trusted servers" : "Дозволяти об'єднуватися лише з довіреними серверами", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "Якщо вибрано хоча б одну групу, тільки люди з перелічених груп можуть запрошувати об'єднаних користувачів до розмов.", + "Groups allowed to invite federated users" : "Групи, яким дозволено запрошувати об'єднаних користувачів", + "Select groups …" : "Виберіть групи ...", + "All messages" : "Всі повідомлення", + "@-mentions only" : "Тільки @-згадки", + "Off" : "Вимкнути", + "General settings" : "Загальні", + "Default notification settings" : "Налаштування сповіщень за замовчуванням", + "Default group notification" : "Сповіщення групи за замовчуванням", + "Default group notification for new groups" : "Сповіщення для нових груп за замовчуванням", + "Integration into other apps" : "Інтеграція з іншими додатками", + "Allow conversations on files" : "Дозволити обговорення файлів", + "Allow conversations on public shares for files" : "Дозволити розмови на спільних ресурсах для файлів", + "End-to-end encrypted calls" : "Наскрізні зашифровані дзвінки", + "Enable encryption" : "Увімкнути шифрування", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "Наскрізні зашифровані дзвінки з налаштованим SIP-мостом потребують новішої версії Високопродуктивного бекенду та SIP-мосту.", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "Наразі мобільні клієнти не підтримують наскрізні зашифровані дзвінки.", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "При натисканні на кнопку вище інформація з форми буде відправлена на сервери компанії Struktur AG. Ви можете знайти додаткову інформацію на {linkstart}spreed.eu{linkend}.", + "Pending" : "Очікування", + "Error" : "Помилка", + "Blocked" : "Заблоковано", + "Active" : "Активно", + "Expired" : "Закінчився", + "Never" : "Ніколи", + "The trial could not be requested. Please try again later." : "Не вдалося запросити пробний період використання. Повторіть спробу через деякий час.", + "The account could not be deleted. Please try again later." : "Обліковий запис не вдалося вилучити. Будь ласка, спробуйте пізніше.", + "Hosted High-performance backend" : "Високопродуктивний бекенд на хостингу", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Наш партнер Struktur AG надає послугу, за допомогою якої можна замовити розміщення сервера сигналізації. Для цього вам потрібно лише заповнити форму нижче, і ваш Nextcloud надішле запит. Щойно сервер буде налаштовано для вас, облікові дані будуть заповнені автоматично. При цьому будуть перезаписані існуючі налаштування сервера сигналізації.", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "Якщо ваш високопродуктивний бекенд-акаунт включає функції STUN і/або TURN, налаштування будуть оновлені відповідно.", + "URL of this Nextcloud instance" : "Посилання на цей сервер хмари Nextcloud", + "Full name of the user requesting the trial" : "Повне ім'я користувача, який запитує пробну версію", + "Email of the user" : "Електронна адреса користувача", + "Language" : "Мова", + "Country" : "Країна", + "Request signaling server trial" : "Запит на пробну версію сервера сигналізації", + "You can see the current status of your hosted signaling server in the following table." : "Ви можете побачити поточний стан вашого сервера сигналізації в наступній таблиці.", + "Status" : "Статус", + "Created at" : "Створено", + "Expires at" : "Термін дії закінчується", + "Limits" : "Обмеження", + "STUN included" : "STUN включено", + "Yes" : "Так", + "No" : "Ні", + "TURN included" : "ТУР включено", + "Delete the signaling server account" : "Вилучити обліковий запис сервера сигналізації", + "_%n user_::_%n users_" : ["%n користувач","%n користувача","%n користувачів","%n користувачів"], + "Installed version: {version}" : "Встановлена версія: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "Ви можете встановити застосунок Matterbridge, щоб зв'язати Nextcloud Talk з деякими іншими сервісами, відвідайте їхню {linkstart1}GitHub-сторінку{linkend} для отримання додаткової інформації. Завантаження та встановлення застосунку може зайняти деякий час. Якщо час очікування минув, встановіть його вручну з {linkstart2}Nextcloud App Store{linkend}.", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Бінарний файл Matterbridge має неправильні дозволи. Переконайтеся, що бінарний файл Matterbridge належить правильному користувачеві і може бути виконаний. Його можна знайти в «/…/nextcloud/apps/talk_matterbridge/bin/».", + "Matterbridge binary was not found or couldn't be executed." : "Бінарний файл Matterbridge не знайдено або не вдалося виконати.", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Ви також можете вказати шлях до бінарного файлу Matterbridge в конфігураційному файлі. Для отримання додаткової інформації зверніться до {linkstart}документації з інтеграції Matterbridge{linkend}.", + "Downloading …" : "Отримання ...", + "Install Talk Matterbridge" : "Встановіть Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "Виникла помилка під час встановлення застосунку Matterbridge", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "Під час інсталяції Talk Matterbridge сталася помилка. Будь ласка, встановіть його вручну", + "Failed to execute Matterbridge binary." : "Не вдалося виконати бінарний файл Matterbridge.", + "Matterbridge integration" : "Інтеграція Matterbridge", + "Enable Matterbridge integration" : "Enable Matterbridge integration", + "Status: Checking connection" : "Статус: Перевірка з'єднання", + "OK: Running version: {version}" : "ОК: Запущена версія: {version}", + "Error: Server seems to be a Signaling server" : "Помилка: Здається, що сервер є сервером сигналізації", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "Помилка: Системний час сервера Nextcloud та сервера запису не синхронізований. Переконайтеся, що обидва сервери підключені до сервера часу, або вручну синхронізуйте їх час.", + "Recording backend URL" : "Запис URL-адреси бекенду", + "Validate SSL certificate" : "Перевірити сертифікат SSL", + "Delete this server" : "Вилучити цей сервер", + "Test this server" : "Перевірте цей сервер", + "Disabled for all calls" : "Вимкнено для всіх дзвінків", + "Enabled for all calls" : "Ввімкнено для всіх дзвінків", + "Configurable on conversation level by moderators" : "Налаштовується на рівні розмови модераторами", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "Налаштування PHP \"upload_max_filesize\" або \"post_max_size\" дозволять завантажувати файли розміром лише до {maxUpload}.", + "Recording backend settings saved" : "Збережено запис налаштувань бекенду", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "Модератори матимуть право увімкнути згоду на рівні розмови. Згода на запис буде вимагатися від кожного учасника перед тим, як приєднатися до кожного дзвінка в цій розмові.", + "The consent to be recorded will be required for each participant before joining every call." : "Згода на запис буде вимагатися від кожного учасника перед тим, як приєднатися до кожного дзвінка.", + "The consent to be recorded is not required." : "Згода на запис не потрібна.", + "Recording backend configuration is only possible with a High-performance backend." : "Запис конфігурації бекенда можливий лише з Високопродуктивним бекендом.", + "Add a new recording backend server" : "Додати новий сервер бекенд-запису", + "Shared secret" : "Спільний секрет", + "Recording consent" : "Згода на запис", + "Recording transcription" : "Транскрипція запису", + "Automatically transcribe call recordings with a transcription provider" : "Автоматично розшифровуйте записи дзвінків за допомогою постачальника транскрипції", + "Automatically summarize call recordings with transcription and summary providers" : "Автоматично підсумовуйте записи дзвінків за допомогою постачальників транскрипції та резюме", + "SIP configuration saved!" : "Налаштування SIP збережено!", + "SIP configuration is only possible with a High-performance backend." : "Конфігурація SIP можлива тільки з високопродуктивним бекендом.", + "Enable SIP Dial-out option" : "Увімкніть опцію SIP Dial-out", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Сервер сигналізації необхідно оновити, щоб він підтримував функцію SIP Dial-out.", + "Do not show SIP Dial-out caller number" : "Не показувати номер абонента, що дзвонить через SIP", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "Анонімний номер повинен відображатися як «невідомий» або «прихований номер» для абонента, якому дзвонять.", + "Dial-out number" : "Номер для виклику", + "E164 formatted number used as a fallback caller number for outgoing calls" : "Номер у форматі E164, який використовується як резервний номер абонента для вихідних дзвінків", + "Dial-out prefix" : "Префікс вихідного дзвінка", + "Prefix to configured user number for outgoing calls (default is `+`)" : "Префікс до налаштованого номера користувача для вихідних дзвінків (за замовчуванням `+`)", + "Restrict SIP configuration" : "Обмеження конфігурації SIP", + "Enable SIP configuration" : "Увімкнути налаштування SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Тільки користувачі наступних груп можуть увімкнути SIP у розмовах, які вони модерують", + "Phone number (Country)" : "Номер телефону (Країна)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Ця інформація надсилається в електронних листах-запрошеннях, а також відображається на бічній панелі для всіх учасників.", + "Nextcloud base URL" : "URL-адреса бази Nextcloud", + "Talk Backend URL" : "URL-адреса бекенда для розмови", + "WebSocket URL" : "URL-адреса веб-сокета", + "Available features" : "Доступні функції", + "Error: Websocket connection failed" : "Помилка: Не вдалося з'єднатися з веб-сокетом", + "Error code" : "Код помилки", + "Error message" : "Повідомлення про помилку", + "Error: Websocket connection failed. Check browser console" : "Помилка: Не вдалося з'єднатися з веб-сокетом. Перевірте консоль браузера", + "High-performance backend URL" : "URL-адреса високопродуктивного бекенда", + "Missing High-performance backend warning hidden" : "Відсутнє Високопродуктивний бекенд-попередження приховано", + "High-performance backend settings saved" : "Збережено високопродуктивні налаштування бекенда", + "Nextcloud Talk setup not complete" : "NextНалаштування хмарної розмови не завершено", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "Зверніть увагу, що під час дзвінків із більш ніж 2 учасниками без високопродуктивного бекенду учасники, швидше за все, зіткнуться з проблемами підключення та спричинять високе навантаження на пристрої учасників.", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "Встановіть високопродуктивний бекенд, щоб забезпечити безперебійну роботу дзвінків з кількома учасниками.", + "Nextcloud portal" : "Портал Nextcloud", + "Quick installation guide" : "Короткий посібник з монтажу", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "Високопродуктивний бекенд необхідний для дзвінків і розмов з декількома учасниками. Без бекенду всі учасники повинні завантажувати своє відео індивідуально для кожного іншого учасника, що, швидше за все, спричинить проблеми з підключенням і високе навантаження на пристрої учасників.", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "Наполегливо рекомендується налаштувати розподілений кеш, якщо ви використовуєте Nextcloud Talk з високопродуктивним бекендом.", + "Add High-performance backend server" : "Додати Високопродуктивний сервер бекенда", + "Warn about connectivity issues in calls with more than 2 participants" : "Попередження про проблеми зі з'єднанням під час дзвінків з більш ніж 2 учасниками", + "STUN server URL" : "URL-адреса сервера STUN", + "The server address is invalid" : "Адреса сервера є недійсною", + "STUN settings saved" : "Налаштування STUN збережено", + "STUN servers" : "Сервер STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN-сервер використовується для визначення публічної IP-адреси учасників за маршрутизатором.", + "Add a new STUN server" : "Додати новий сервер STUN", + "{schema} scheme must be used with a domain" : "{schema} схема повинна використовуватися з доменом", + "{option1} and {option2}" : "{option1} і {option2}", + "{option} only" : "{option} тільки", + "OK: Successful ICE candidates returned by the TURN server" : "ГАРАЗД: Успішні кандидати ICE повернуті сервером TURN", + "Error: No working ICE candidates returned by the TURN server" : "Помилка: Сервер TURN не повернув жодного робочого кандидата ICE", + "Testing whether the TURN server returns ICE candidates" : "Тестування, чи повертає сервер TURN кандидатів на ICE", + "TURN server schemes" : "Схеми серверів TURN", + "TURN server URL" : "URL-адреса сервера TURN", + "TURN server secret" : "Секрет сервера TURN", + "TURN server protocols" : "Протоколи сервера TURN", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "Сервер TURN використовується для проксі-передачі трафіку від учасників, які знаходяться за брандмауером. Якщо окремі учасники не можуть підключитися до інших, найімовірніше, необхідний сервер TURN. Інструкції з налаштування див. у {linkstart} цій документації{linkend}.", + "TURN settings saved" : "Налаштування TURN збережено", + "TURN servers" : "Сервери TURN", + "Add a new TURN server" : "Додати новий сервер TURN", + "Failed" : "Не вдалося", + "OK" : "Гаразд", + "Checking …" : "Перевірка...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "Не вдалося: WebAssembly вимкнено або не підтримується в цьому браузері. Увімкніть WebAssembly або скористайтеся браузером, який його підтримує, щоб виконати перевірку.", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "Не вдалося: Файли \".wasm\" і \".tflite\" некоректно повернуто веб-сервером. Будь ласка, перевірте розділ \"Системні вимоги\" в документації Talk.", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK: файли \".wasm\" і \".tflite\" коректно повернуто веб-сервером.", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "Схоже, що конфігурація PHP та Apache несумісні. Зверніть увагу, що PHP можна використовувати лише з модулем MPM_PREFORK, а PHP-FPM — лише з модулем MPM_EVENT.", + "Web server setup checks" : "Перевірка налаштувань веб-сервера", + "Files required for virtual background can be loaded" : "Файли, необхідні для віртуального фону, можна завантажити", + "Federated user" : "Обʼєднаний користувач", + "Assign participants to rooms" : "Розподіліть учасників по кімнатах", + "Configure breakout rooms" : "Налаштування секційних кімнат", + "Number of breakout rooms" : "Кількість секційних кімнат", + "You can create from 1 to 20 breakout rooms." : "Ви можете створити від 1 до 20 секційних кімнат.", + "Assignment method" : "Метод призначення", + "Automatically assign participants" : "Автоматичне призначення учасників", + "Manually assign participants" : "Призначайте учасників вручну", + "Allow participants to choose" : "Дозволити учасникам обирати", + "Create rooms" : "Створити кімнати", + "Confirm" : "Підтвердити", + "Create breakout rooms" : "Створіть кімнати для переговорів", + "Reset" : "Скидання", + "Delete breakout rooms" : "Видалити окремі кімнати", + "Room {roomNumber}" : "Кімната {roomNumber}", + "Current breakout rooms and settings will be lost" : "Поточні кімнати та налаштування будуть втрачені", + "Cancel" : "Скасувати", + "Unassigned participants" : "Непризначені учасники", + "Back" : "Назад", + "Assign" : "Призначити", + "Add participant \"{user}\"" : "Додати учасника \"{user}\"", + "Now" : "Зараз", + "Invalid calendar selected" : "Вибрано невірний календар", + "Invalid start time selected" : "Вибрано невірний час запуску", + "Invalid end time selected" : "Вибрано невірний час закінчення", + "Unknown error occurred" : "Виникла невідома помилка", + "Sending no invitations" : "Не надсилати запрошення", + "{participant0} will receive an invitation" : "{participant0} отримають запрошення", + "{participant0} and {participant1} will receive invitations" : "{participant0} та {participant1} отримають запрошення", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення","{participant0}, {participant1} та %n інших отримають запрошення"], + "Invite {user}" : "Запросити {user}", + "Invite all users and emails in this conversation" : "Запросіть усіх користувачів та адреси електронної пошти до цієї розмови", + "Meeting created" : "Зустріч створено", + "Upcoming meetings" : "Найближчі зустрічі", + "Loading …" : "Завантаження …", + "No upcoming meetings" : "Немає найближчих зустрічей", + "Schedule a meeting" : "Заплануйте зустріч", + "Meeting title" : "Назва зустрічі", + "From" : "Від", + "To" : "Кому", + "Calendar" : "Календар", + "Attendees" : "Учасники", + "No other participants to send invitations to." : "Інших учасників, яким потрібно надсилати запрошення, немає.", + "Add attendees" : "Додати учасників", + "Save" : "Зберегти", + "Search participants" : "Пошук учасників", + "No results" : "Немає результатів", + "Done" : "Готово", + "Disable live transcription" : "Вимкнути транскрипцію в прямому ефірі", + "Raise hand" : "Підняти руку", + "Raise hand (R)" : "Підняти руку (R)", + "Lower hand" : "Опустити руку", + "Lower hand (R)" : "Нижня рука (R)", + "Exit full screen (F)" : "Вийти з повноекранного режиму (F)", + "Full screen (F)" : "На весь екран (F)", + "Speaker view" : "Вигляд динаміка", + "Grid view" : "Упорядкування у формі сітки", + "Error when trying to load the available live transcription languages" : "Помилка при спробі завантажити доступні мови транскрипції в реальному часі", + "Failed to enable live transcription" : "Не вдалося увімкнути транскрипцію в реальному часі", + "Recording consent is required" : "Згода на запис необхідна", + "This conversation is read-only" : "Ця розмова призначена лише для читання", + "Conversation not found or not joined" : "Розмова не знайдена або не приєднана", + "Lobby is still active and you're not a moderator" : "Лобі все ще активне, а ви не є модератором", + "Connection failed" : "Не вдалося встановити з'єднання", + "Reload" : "Перезавантажити", + "{nickName} raised their hand." : "{nickName} підняв руку.", + "A participant raised their hand." : "Один з учасників підняв руку.", + "Collapse stripe" : "Смуга згортання", + "Expand stripe" : "Розгорнути смугу", + "Previous page of videos" : "Попередня сторінка відео", + "Next page of videos" : "Наступна сторінка відео", + "Connecting …" : "Підключення ...", + "Calling …" : "Викликаю...", + "Waiting for {user} to join the call" : "Чекаємо на {user}, щоб долучитися до конкурсу", + "Waiting for others to join the call …" : "Чекаємо, доки хтось приєднається до виклику...", + "You can invite others in the participant tab of the sidebar" : "Ви можете запросити користувачів у вкладці учасники на бічній панелі", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Ви можете запросити користувачів у вкладці учасники на бічній панелі або поділитися цим посиланням, щоб запросити інших!", + "Share this link to invite others!" : "Поділіться цим посиланням з тими, кого бажаєте запросити!", + "Copy link" : "Копіювати посилання", + "You are not allowed to enable audio" : "Ви не маєте права вмикати аудіо", + "No audio. Click to select device" : "Немає звуку. Натисніть, щоб вибрати пристрій", + "Mute audio" : "Вимкнути мікрофон (m)", + "Mute audio (M)" : "Вимкнути звук (M)", + "Unmute audio" : "Увімкнути мікрофон", + "Unmute audio (M)" : "Увімкнути звук (M)", + "None" : "Відсутній", + "Select a microphone" : "Виберіть мікрофон", + "Select a speaker" : "Виберіть динамік", + "Check devices" : "Перевірте пристрої", + "Access to camera was denied" : "Доступ до камери було заборонено", + "Error while accessing camera: It is likely in use by another program" : "Помилка під час доступу до камери: Ймовірно, вона використовується іншою програмою", + "Error while accessing camera" : "Помилка під час доступу до камери", + "You have been muted by a moderator" : "Ви були приглушені модератором", + "Hide presenter video" : "Приховати відео ведучого", + "You are not allowed to enable video" : "Ви не маєте права вмикати відео", + "No video. Click to select device" : "Немає відео. Натисніть, щоб вибрати пристрій", + "Disable video" : "Вимкнути відео", + "Disable video (V)" : "Вимкнути відео (V)", + "Enable video" : "Увімкнути відео", + "Enable video (V)" : "Увімкнути відео (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео - Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео (V) - Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Увімкнути відео. Під час першого ввімкнення відео з'єднання буде ненадовго перервано", + "Select a video device" : "Виберіть відеопристрій", + "Show presenter" : "Ведучий шоу", + "You" : "Ви", + "Mute" : "Вимкнути звук", + "Muted" : "Без звуку.", + "Show screen" : "Демонстрація екрану", + "Stop following" : "Припиніть стежити", + "Connection could not be established …" : "Не вдалося встановити з'єднання ...", + "Connection was lost and could not be re-established …" : "З'єднання було втрачено і не вдалося відновити ...", + "Connection could not be established. Trying again …" : "Не вдалося встановити з'єднання. Повторна спроба ...", + "Connection lost. Trying to reconnect …" : "З'єднання втрачено. Спроба повторного підключення ...", + "Connection problems …" : "Проблеми з підключенням ...", + "Collapse" : "Згорнути", + "Expand" : "Розгорнути", + "You need to be logged in to upload files" : "Для завантаження файлів потрібно авторизуватися", + "Drop your files to upload" : "Перетягнути файли для завантаження", + "Conversation messages" : "Розмовні повідомлення", + "Scroll to bottom" : "Прокрутіть донизу", + "Post message" : "Опублікувати повідомлення", + "Federated conversation" : "Федеративна розмова", + "Public conversation" : "Публічна розмова", + "Favorite" : "Із зірочкою", + "Banned users" : "Заборонені користувачі", + "Manage the list of banned users in this conversation." : "Керуйте списком заблокованих користувачів у цій розмові.", + "Manage bans" : "Керування заборонами", + "No banned users" : "Немає заборонених користувачів", + "Banned by:" : "Заборонено:", + "Date:" : "Дата:", + "Note:" : "Примітка:", + "Hide details" : "Приховати деталі", + "Show details" : "Показати деталі", + "Unban" : "Розбан", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "Ви можете змінити назву та опис в {linkstart}Календар{linkend}.", + "Error while updating conversation name" : "Помилка під час оновлення назви розмови", + "Error while updating conversation description" : "Помилка під час оновлення опису розмови", + "Enter a name for this conversation" : "Введіть назву для цієї розмови", + "Edit conversation name" : "Редагувати назву розмови", + "Edit conversation description" : "Редагувати опис розмови", + "Enter a description for this conversation" : "Введіть опис для цієї розмови", + "Picture" : "Зображення", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "У цій розмові можна увімкнути наступні боти. Зверніться до адміністрації, щоб встановити на цьому сервері більше ботів.", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "На цьому сервері не встановлено ботів. Зверніться до своєї адміністрації, щоб встановити ботів на цьому сервері.", + "Disable" : "Вимкнути", + "Enable" : "Увімкнути", + "Breakout rooms" : "Кімнати обговорення", + "Manage breakout rooms" : "Керуйте секційними кімнатами", + "Set up breakout rooms for this conversation" : "Організуйте окремі кімнати для цієї розмови", + "Please select a valid PNG or JPG file" : "Будь ласка, виберіть правильний файл у форматі PNG або JPG", + "Choose your conversation picture" : "Виберіть картинку для розмови", + "Choose" : "Вибрати", + "Error setting conversation picture" : "Помилка встановлення картинки розмови", + "Could not set the conversation picture: {error}" : "Не вдалося встановити картинку розмови: {error}", + "Error cropping conversation picture" : "Помилка обрізання картинки розмови", + "Error removing conversation picture" : "Помилка видалення зображення розмови", + "Set emoji as conversation picture" : "Встановіть емодзі як картинку для розмови", + "Set background color for conversation picture" : "Задати колір фону для зображення розмови", + "Upload conversation picture" : "Завантажити фотографію розмови", + "Choose conversation picture from files" : "Виберіть картинку для розмови з файлів", + "Remove conversation picture" : "Видалити фотографію розмови", + "The file must be a PNG or JPG" : "Файл у форматі PNG або JPG", + "Set picture" : "Встановлене зображення", + "Default permissions modified for {conversationName}" : "Дозволи за замовчуванням змінено для {conversationName}", + "Could not modify default permissions for {conversationName}" : "Не вдалося змінити дозволи за замовчуванням для {conversationName}", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "Відредагуйте дозволи за замовчуванням для учасників цієї бесіди. Ці налаштування не впливають на модераторів.", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "При кожній зміні дозволів у цьому розділі дозволи користувачів, які було призначено окремим учасникам, будуть втрачені.", + "All permissions" : "Усі дозволи", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "Учасники мають дозволи на початок дзвінка, приєднання до дзвінка, увімкнення аудіо та відео, а також спільний доступ до екрана.", + "Restricted" : "Обмежена", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "Учасники можуть приєднуватися до дзвінків, але не можуть увімкнути аудіо, відео або надати спільний доступ до екрану, поки модератор вручну не надасть їм відповідні дозволи.", + "Advanced permissions" : "Розширені дозволи", + "Edit permissions" : "Редагування дозволів", + "Conversation settings" : "Налаштування розмови", + "Basic Info" : "Основна інформація", + "Personal" : "Особисте", + "Moderation" : "Модерація", + "Setup overview" : "Огляд налаштувань", + "Live transcription" : "Транскрипція наживо", + "Enable live transcription" : "Ввімкнути транскрипцію в прямому ефірі", + "Breakout Rooms" : "Секційні кімнати", + "Matterbridge" : "Маттербрідж", + "Bots" : "Боти", + "Danger zone" : "Небезпечна зона", + "Archive conversation" : "Архівна розмова", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "Архівні розмови за замовчуванням приховані зі списку розмов. Однак вони все одно будуть відображатися, коли ви шукаєте назву розмови або переходите до списку архівних розмов.", + "Do you really want to leave \"{displayName}\"?" : "Ви дійсно хочете покинути \"{displayName}\"?", + "You can archive this conversation instead." : "Замість цього ви можете заархівувати цю розмову.", + "Leave conversation" : "Залишити спілкування", + "You need to promote a new moderator before you can leave the conversation" : "Перед тим, як вийти з розмови, вам потрібно призначити нового модератора", + "Delete conversation" : "Вилучити розмову", + "Do you really want to delete \"{displayName}\"?" : "Дійсно вилучити \"{displayName}\"?", + "Error while deleting conversation" : "Помилка при видаленні розмови", + "Delete all chat messages" : "Вилучити всі повідомлення чату", + "Do you really want to delete all messages in \"{displayName}\"?" : "Ви дійсно хочете видалити всі повідомлення в \"{displayName}\"?", + "Error while clearing chat history" : "Помилка під час очищення історії чату", + "Be careful, these actions cannot be undone." : "Будьте обережні, ці дії не можна скасувати.", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "Якщо ви вийшли з бесіди, щоб знову приєднатися до закритої бесіди, потрібно буде отримати запрошення. До відкритої бесіди можна приєднатися в будь-який час.", + "Permanently delete this conversation." : "Назавжди вилучити цю розмову.", + "Delete chat messages" : "Вилучити повідомлення чату", + "Permanently delete all the messages in this conversation." : "Назавжди вилучити всі повідомлення в цій розмові.", + "_%n hour_::_%n hours_" : ["%n година","%n години ","%n годин","%n годин"], + "_%n day_::_%n days_" : ["%n день","%n днів","%n днів","%n днів"], + "_%n week_::_%n weeks_" : ["%n день","%n тижнів","%n тижнів","%n тижнів"], + "Custom expiration time" : "Індивідуальний термін придатності", + "Message expiration disabled" : "Вимкнено закінчення терміну дії повідомлення", + "Message expiration set: {duration}" : "Встановлено термін дії повідомлення: {duration}", + "Error when trying to set message expiration" : "Помилка при спробі встановити термін дії повідомлення", + "Message expiration" : "Термін дії повідомлення", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "Повідомлення чату можна буде вилучити через певний час. Зверніть увагу, файли, які було надіслано в чаті, не будуть вилучені для автора, але більше не будуть доступні в розмові.", + "Set message expiration" : "Встановити термін дії повідомлення", + "Current message expiration" : "Термін дії поточного повідомлення закінчився", + "Password copied to clipboard" : "Пароль скопійовано до буфера обміну", + "Password could not be copied" : "Не вдалося скопіювати пароль", + "Guest access" : "Гостьовий доступ", + "Breakout rooms are not allowed in public conversations." : "Під час публічних розмов заборонено користуватися кімнатами для переговорів.", + "Allow guests to join this conversation via link" : "Дозволити гостям приєднатися до цієї розмови за посиланням", + "Password protection" : "Захист паролем", + "This conversation is password-protected. Guests need password to join" : "Ця розмова захищена паролем. Гостям потрібен пароль, щоб приєднатися", + "Password protection is needed for public conversations" : "Захист паролем потрібний для публічних розмов", + "Set a password" : "Встановити пароль", + "Change password" : "Змінити пароль", + "Enter new password" : "Введіть новий пароль", + "Save password" : "Зберегти пароль", + "Copy password" : "Скопіювати пароль", + "Guests are allowed to join this conversation via link" : "Гості можуть долучитися до дискусії за посиланням", + "Guests are not allowed to join this conversation" : "Гостям не дозволяється приєднуватися до цієї розмови", + "Resend invitations" : "Повторно надіслати запрошення", + "This conversation is open to both registered users and users created with the Guests app" : "Ця розмова відкрита як для зареєстрованих користувачів, так і для користувачів, створених за допомогою програми \"Гості", + "This conversation is open to registered users" : "Ця розмова відкрита для зареєстрованих користувачів", + "This conversation is limited to the current participants" : "Ця розмова обмежена поточними учасниками", + "You opened the conversation to both registered users and users created with the Guests app" : "Ви відкрили бесіду як для зареєстрованих користувачів, так і для користувачів, створених за допомогою програми \"Гості", + "Error occurred when opening or limiting the conversation" : "Виникла помилка при відкритті або обмеженні розмови", + "Open conversation to registered users, showing it in search results" : "Відкрити бесіду для зареєстрованих користувачів, показуючи її в результатах пошуку", + "Also open to users created with the Guests app" : "Також відкрито для користувачів, створених у додатку \"Гості", + "Open conversation" : "Відкрита розмова", + "Set language spoken in calls" : "Налаштування мови дзвінків", + "Languages could not be loaded" : "Не вдалося завантажити мови", + "Loading languages …" : "Завантаження мов ...", + "Invalid language" : "Недійсний вибір мови", + "Default language (English)" : "Мова за замовчуванням (англійська)", + "Default live transcription language set" : "За замовчуванням встановлено мову транскрипції в прямому ефірі", + "Live transcription language set: {languageName}" : "Набір мов транскрипції в реальному часі: {languageName}", + "Error when trying to set live transcription language" : "Помилка при спробі встановити мову транскрипції в реальному часі", + "Start time: {date}" : "Початок: {date}", + "Start time has been updated" : "Час початку оновлено", + "Error occurred while updating start time" : "Виникла помилка під час оновлення часу запуску", + "Enabling the lobby will remove non-moderators from the ongoing call." : "Увімкнення лобі вилучить з поточної розмови немодераторів.", + "Enable lobby, restricting the conversation to moderators" : "Увімкнути лобі, обмеживши розмову модераторами", + "Meeting start time" : "Час початку зустрічі", + "Start time (optional)" : "Час початку (за бажанням)", + "Import email participants" : "Імпортувати імейли учасників", + "You can import a list of email participants from a CSV file." : "Ви можете імпортувати список учасників розсилки з файлу CSV.", + "Poll drafts" : "Чернетки опитувань", + "Browse poll drafts" : "Переглянути чернетки опитувань", + "Error occurred when locking the conversation" : "Виникла помилка при блокуванні розмови", + "Error occurred when unlocking the conversation" : "Виникла помилка при розблокуванні розмови", + "Lock conversation" : "Заблокувати розмову", + "This will also terminate the ongoing call." : "Це також призведе до завершення поточного виклику.", + "Lock the conversation to prevent anyone to post messages or start calls" : "Блокування розмови, щоб заборонити будь-кому публікувати повідомлення або починати розмову", + "Edit" : "Редагувати", + "More information" : "Докладно", + "Delete" : "Вилучити", + "Add new bridged channel to current conversation" : "Додати новий мостовий канал до поточної розмови", + "unknown state" : "невідомий стан", + "running" : "біг", + "not running, check Matterbridge log" : "не працює, перевірте журнал Matterbridge", + "not running" : "не бігаю.", + "Bridge saved" : "Міст збережено.", + "You can bridge channels from various instant messaging systems with Matterbridge." : "За допомогою Matterbridge ви можете об'єднати канали з різних систем обміну повідомленнями.", + "More info on Matterbridge" : "Більше інформації про Matterbridge", + "Messaging systems" : "Системи обміну повідомленнями", + "Enable bridge" : "Увімкнути міст", + "Show Matterbridge log" : "Показати журнал Matterbridge", + "Log content" : "Вміст журналу", + "Only moderators are allowed to mention @all" : "Тільки модератори можуть згадувати @all", + "All participants are allowed to mention @all" : "Всім учасникам дозволяється згадувати @all", + "Participants are now allowed to mention @all." : "Учасникам тепер дозволено згадувати @all.", + "Mentioning @all has been limited to moderators." : "Згадування @all дозволено лише модераторам.", + "Allow participants to mention @all" : "Дозволити учасникам згадувати @all", + "Mention permissions" : "Дозволи", + "Notifications" : "Сповіщення", + "Notify about calls in this conversation" : "Сповіщати про дзвінки в цій розмові", + "Important conversation" : "Важлива розмова", + "\"Do not disturb\" user status is ignored for important conversations" : "Статус користувача \"Не турбувати\" ігнорується для важливих розмов", + "Sensitive conversation" : "Делікатна розмова", + "Message preview will be disabled in conversation list and notifications" : "Попередній перегляд повідомлень буде вимкнено у списку розмов та сповіщеннях", + "Recording consent is required for calls in this conversation" : "Згода на запис необхідна для дзвінків у цій розмові", + "Recording consent is not required for calls in this conversation" : "Згода на запис не потрібна для дзвінків у цій розмові", + "Recording consent requirement was updated" : "Оновлено вимогу щодо згоди на запис", + "Error occurred while updating recording consent" : "Виникла помилка під час оновлення згоди на запис", + "Recording Consent" : "Запис згоди", + "Recording consent cannot be changed once a call or breakout session has started." : "Згоду на запис не можна змінити після початку дзвінка або секційної сесії.", + "Require recording consent before joining call in this conversation" : "Вимагати згоди на запис перед тим, як приєднатися до розмови в цій розмові", + "Recording consent is required for all calls" : "Згода на запис необхідна для всіх дзвінків", + "SIP dial-in is now possible without PIN requirement" : "SIP-додзвін тепер можливий без запиту PIN-коду", + "SIP dial-in is now enabled" : "SIP-додзвін увімкнено", + "SIP dial-in is now disabled" : "SIP-додзвін вимкнено", + "Error occurred when enabling SIP dial-in" : "Виникла помилка під час увімкнення SIP-дозвону", + "Error occurred when disabling SIP dial-in" : "Виникла помилка при відключенні SIP-дозвону", + "Phone and SIP dial-in" : "Телефонний та SIP-додзвін", + "Enable phone and SIP dial-in" : "Увімкніть телефон і SIP-додзвін", + "Allow to dial-in without a PIN" : "Дозвіл на вхід без PIN-коду", + "Ongoing" : "Триває", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n осіб прийнято","%n осіб прийнято","%n осіб прийнято","%n осіб прийнято"], + "_%n person declined_::_%n people declined_" : ["%n осіб відмовилися","%n людей відмовилися","%n людей відмовилися","%n людей відмовилися"], + "_and %n other attachment_::_and %n other attachments_" : ["та %n інших вкладень","та %n інших вкладень","та %n інших вкладень","та %n інших вкладень"], + "With {displayName}" : "З {displayName}", + "In {conversation}" : "У {conversation}", + "View attachment" : "Переглянути вкладення", + "Join" : "Приєднатися", + "View conversation" : "Переглянути розмову", + "View event on Calendar" : "Переглянути подію в Календарі", + "Error while creating the conversation" : "Помилка під час створення розмови", + "Hello, {displayName}" : "Вітання, {displayName}", + "Start meeting now" : "Почати зустріч", + "Give your meeting a title" : "Дайте назву вашій зустрічі", + "Create and copy link" : "Посилання на зустріч", + "Create a new conversation" : "Створити нову розмову", + "Join open conversations" : "Приєднуйтесь до відкритих розмов", + "Call a phone number" : "Зателефонуйте за номером телефону", + "Scroll backward" : "Прокрутити назад", + "Scroll forward" : "Прокрутити вперед", + "Schedule meetings" : "Заплануйте зустрічі", + "You don't have any upcoming meetings" : "У вас немає найближчих зустрічей", + "Open calendar" : "Відкрити календар", + "Unread mentions" : "Непрочитані згадки", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "Тут з'являться повідомлення, в яких вас згадували. Ви можете згадати людей, набравши @, а потім їхнє ім'я", + "Upcoming reminders" : "Найближчі нагадування", + "Message reminders" : "Нагадування про повідомлення", + "Set a reminder on a message to be notified" : "Налаштування нагадування про повідомлення для сповіщення", + "Start a group conversation" : "Почніть групову розмову", + "Create conversation" : "Створити розмову", + "Enter your name" : "Зазначте ваше ім'я", + "Submit name and join" : "Введіть ім'я та приєднуйтесь", + "Do you already have an account?" : "У вас вже є обліковий запис?", + "Log in" : "Увійти", + "Error while verifying uploaded file" : "Помилка при перевірці завантаженого файлу", + "Uploaded file is verified" : "Завантажений файл перевірено", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "Формат вмісту — значення, розділені комами (CSV):
- Заголовок рядка є обов'язковим і повинен відповідати«name», «email»або просто«email»
- Один запис на рядок (наприклад, «John Doe», «john@example.tld»)", + "Participants added successfully" : "Учасники успішно додані", + "Error while adding participants" : "Помилка під час додавання учасників", + "Import a file" : "Імпорт файлу", + "Browse" : "Переглянути", + "Verifying uploaded file …" : "Перевірка завантаженого файлу ...", + "This might take a moment" : "Це може зайняти деякий час", + "Send invitations" : "Надсилайте запрошення", + "_%n invalid email_::_%n invalid emails_" : ["%n невірна адреса електронної пошти","%n недійсних імейлів","%n недійсних імейлів","%n недійсних імейлів"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n імейл вже імпортовано або є дублікатом","%n імейлів вже імпортовано або є дублікати","%n імейлів вже імпортовано або є дублікати","%n імейлів вже імпортовано або є дублікати"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["%n запрошень може бути надіслано","Можна надіслати %n запрошень","Можна надіслати %n запрошень","Можна надіслати %n запрошень"], + "An error occurred while calling a phone number" : "Виникла помилка під час дзвінка на номер телефону", + "Phone number could not be called: {error}" : "Не вдалося додзвонитися за номером телефону: {error}", + "Phone number could not be called" : "За номером телефону не вдалося додзвонитися", + "Search participants or phone numbers" : "Пошук учасників або номерів телефонів", + "Creating the conversation …" : "Створення розмови ...", + "Mark as read" : "Відмітити прочитаним", + "Mark as unread" : "Позначити не прочитаним", + "Remove from favorites" : "Прибрати зірочку", + "Add to favorites" : "Додати зірочку", + "Unarchive conversation" : "Неархівована розмова", + "Ignore \"Do not disturb\"" : "Ігнорувати \"Не турбувати\"", + "You need to promote a new moderator before you can leave the conversation." : "Перед тим, як вийти з розмови, вам потрібно призначити нового модератора.", + "Conversation actions" : "Розмовні дії", + "Notify about calls" : "Сповіщати про дзвінки", + "Hide message text" : "Приховати текст повідомлення", + "Pending invitations" : "Очікують на запрошення", + "From {user} at {remoteServer}" : "Від {user} за адресою {remoteServer}", + "Decline invitation" : "Відхилити запрошення", + "Accept invitation" : "Прийняти запрошення", + "No pending invitations" : "Немає очікуваних запрошень", + "Home" : "Домівка", + "Unread" : "Непрочитане", + "Mentions" : "Згадки", + "Meetings" : "Зустрічі", + "Alphabetically" : "Назва", + "No followed threads" : "Немає потоків, за якими слідкують", + "No matches found" : "Збігів не знайдено", + "No conversations found" : "Розмов не знайдено", + "You have no archived conversations." : "У вас немає архівних розмов.", + "Subscribe to an existing thread or start your own." : "Підпишіться на існуючу тему або створіть власну.", + "You have no unread mentions." : "У вас немає непрочитаних згадок.", + "You have no unread messages." : "У вас немає непрочитаних повідомлень.", + "An error occurred while performing the search" : "Помилка під час пошуку", + "Conversation list" : "Список розмов", + "Filter conversations by" : "Фільтруйте розмови за", + "Unread messages" : "Непрочитані повідомлення", + "Meeting conversations" : "Розмови на зустрічах", + "Clear filters" : "Очистити фільтри", + "New personal note" : "Нова особиста нотатка", + "Back to conversations" : "Повернемося до розмов", + "Archived conversations" : "Архівні розмови", + "Threads" : "Гілки", + "Clear filter" : "Очистити фільтр", + "Show more threads" : "Показати більше тем", + "App settings" : "Налаштування", + "Users" : "Користувачі", + "Groups" : "Групи", + "Teams" : "Команди", + "Federated users" : "Об'єднані користувачі", + "New private conversation" : "Нова приватна розмова", + "Other sources" : "Інші джерела", + "Open conversations" : "Відкрити розмови", + "No search results" : "Нічого не знайдено", + "Users, groups and teams" : "Користувачі, групи та команди", + "Users and groups" : "Користувачі та групи", + "Users and teams" : "Користувачі та команди", + "Groups and teams" : "Групи та команди", + "New group conversation" : "Нова групова розмова", + "The meeting will start soon" : "Зустріч незабаром розпочнеться", + "This meeting is scheduled for {startTime}" : "Ця зустріч запланована на {startTime}", + "You are currently waiting in the lobby" : "Чекаємо на схвалення доступу", + "Select microphone" : "Виберіть мікрофон", + "No microphone available" : "Мікрофон відсутній", + "Select speaker" : "Виберіть спікера", + "No speaker available" : "Спікер відсутній", + "Select camera" : "Виберіть камеру", + "No camera available" : "Камера відсутня", + "Select a device" : "Вибрати пристрій", + "Playing …" : "Граю...", + "Test speakers" : "Тестові колонки", + "Test" : "Тест ", + "Devices" : "Пристрої", + "Backgrounds" : "Передумови", + "No audio" : "Вимкнути мікрофон", + "No camera" : "Вимкнути камеру", + "Display video as you will see it (mirrored)" : "Відображати відео так, як ви його побачите (у дзеркальному відображенні)", + "Display video as others will see it" : "Відображайте відео так, як його побачать інші", + "Calls are not supported in your browser" : "Дзвінки не підтримуються у вашому браузері", + "Access to microphone is only possible with HTTPS" : "Доступ до мікрофона можливий лише за допомогою HTTPS", + "Access to microphone was denied" : "У доступі до мікрофону було відмовлено", + "Error while accessing microphone" : "Помилка під час доступу до мікрофона", + "Access to camera is only possible with HTTPS" : "Доступ до камери можливий лише через безпечний протокол HTTPS", + "The call is being recorded." : "Розмова записується.", + "The call might be recorded." : "Дзвінок може бути записаний.", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "Запис може містити ваш голос, відео з камери та скріншот. Перед тим, як приєднатися до дзвінка, потрібна ваша згода.", + "Give consent to the recording of this call" : "Дайте згоду на запис цього дзвінка", + "Show more info" : "Показати більше інформації", + "Audio is not available" : "Аудіо недоступне", + "Video is not available" : "Відео недоступне", + "Start recording immediately with the call" : "Почніть запис одразу після дзвінка", + "Notify all participants about this call" : "Повідомте всіх учасників про цей дзвінок", + "Apply settings" : "Застосувати налаштування", + "Select virtual office background" : "Виберіть фон віртуального офісу", + "Select virtual home background" : "Виберіть фон віртуального будинку", + "Select virtual abstract background" : "Виберіть віртуальний абстрактний фон", + "Select virtual beach background" : "Виберіть віртуальне тло пляжу", + "Select virtual park background" : "Виберіть фон віртуального парку", + "Select virtual theater background" : "Виберіть фон віртуального театру", + "Select virtual library background" : "Виберіть фон віртуальної бібліотеки", + "Select virtual space station background" : "Виберіть фон віртуальної космічної станції", + "Error while uploading the file" : "Помилка під час завантаження файлу", + "Select a file" : "Виберіть файл", + "Invalid path selected" : "Вибрано неправильний шлях", + "Select virtual background from file {fileName}" : "Виберіть віртуальний фон з файлу {fileName}", + "Blur" : "Розмиття", + "Upload" : "Завантажити", + "Files" : "Робота з файлами", + "(editing)" : "(редагування)", + "(edited)" : "(відредаговано)", + "The message has expired or has been deleted" : "Термін дії повідомлення закінчився або його було видалено", + "Cancel quote" : "Скасувати пропозицію", + "24 hours" : "24 години", + "7 days" : "7 днів", + "Clear reminder – {timeLocale}" : "Чітке нагадування - {timeLocale}", + "Edited by {actor}" : "За редакцією {actor}", + "Message text copied to clipboard" : "Текст повідомлення скопійовано до буфера обміну", + "Message text could not be copied" : "Текст повідомлення не вдалося скопіювати", + "Message forwarded to \"Note to self\"" : "Повідомлення перенаправлено до \"Примітки для себе\"", + "Error while forwarding message to \"Note to self\"" : "Помилка при пересиланні повідомлення до \"Примітки для себе\"", + "A reminder was successfully removed" : "Нагадування успішно видалено", + "Error occurred when removing a reminder" : "Виникла помилка при видаленні нагадування", + "A reminder was successfully set at {datetime}" : "Нагадування було успішно встановлено за адресою {datetime}", + "Error occurred when creating a reminder" : "Виникла помилка при створенні нагадування", + "Add a reaction to this message" : "Додати реакцію на це повідомлення", + "Reply" : "Відповісти", + "More actions" : "Більше дій", + "Set reminder" : "Встановити нагадування", + "Reply privately" : "Відповісти у приватній розмові", + "Edit message" : "Редагувати повідомлення", + "Copy message" : "Скопіювати повідомлення", + "Copy message link" : "Скопіювати посилання на повідомлення", + "Go to file" : "Перейти до файлу", + "Download file" : "Звантажити файл", + "Go to thread" : "Перейти до теми", + "Edit thread details" : "Редагування деталей теми", + "Forward message" : "Переадресоване повідомлення", + "Translate" : "Перекласти", + "Set custom reminder" : "Встановити власне нагадування", + "Close reactions menu" : "Закрити меню реакцій", + "React with {emoji}" : "Відреагувати з {emoji}", + "React with another emoji" : "Відреагувати з іншою {emoji}", + "Choose a conversation to forward the selected message." : "Виберіть розмову, щоб переслати вибране повідомлення.", + "Error while forwarding message" : "Помилка під час пересилання повідомлення", + "The message has been forwarded to {selectedConversationName}" : "Повідомлення було надіслано на адресу {selectedConversationName}", + "Dismiss" : "Припинити", + "Go to conversation" : "Перейти до розмови", + "Detect language" : "Визначити мову", + "The message could not be translated" : "Повідомлення не вдалося перекласти", + "Translation copied to clipboard" : "Переклад скопійовано до буфера обміну", + "Translation could not be copied" : "Переклад не можна копіювати", + "Translate message" : "Перекласти повідомлення", + "Source language to translate from" : "Мова оригіналу для перекладу", + "Translate from" : "Перекласти з", + "Target language to translate into" : "Цільова мова для перекладу", + "Translate to" : "Перекласти", + "Translating" : "Переклад", + "Copy translated text" : "Скопіювати перекладений текст", + "Send now" : "Надіслати зараз", + "Message read by everyone who shares their reading status" : "Повідомлення читають усі, хто ділиться своїм статусом читання", + "Message sent" : "Повідомлення відправлено", + "Sent without notification" : "Відправлено без попередження", + "Deleting message" : "Видалення повідомлення", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "Повідомлення успішно видалено, але бот або Matterbridge налаштовано, і повідомлення вже може бути розповсюджено на інші сервіси", + "Message deleted successfully" : "Повідомлення успішно видалено", + "Message could not be deleted because it is too old" : "Повідомлення не вдалося видалити, оскільки воно занадто старе", + "Only normal chat messages can be deleted" : "Вилучасти можна лише звичайні повідомлення чату", + "An error occurred while deleting the message" : "Виникла помилка під час видалення повідомлення", + "Your browser does not support playing audio files" : "Ваш браузер не підтримує відтворення аудіофайлів", + "Contact" : "Контакт", + "{stack} in {board}" : "{stack} в {board}", + "Deck Card" : "Карта з колоди", + "Remove {fileName}" : "Вилучити {fileName}", + "Open this location in OpenStreetMap" : "Відкрийте це місце на OpenStreetMap", + "_%n reply_::_%n replies_" : ["%n відповідь","%n відповідей","%n відповідей","%n відповідей"], + "Sending message" : "Надсилання повідомлення", + "Failed to send the message. Click to try again" : "Не вдалося відправити повідомлення. Натисніть, щоб спробувати ще раз", + "Not enough free space to upload file" : "Недостатньо місця для завантаження файлу", + "You cannot send messages to this conversation at the moment" : "Наразі ви не можете надсилати повідомлення до цієї розмови", + "Could not update the message" : "Не вдалося оновити повідомлення", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["Проект опитування - %n варіант","Проект опитування - %n варіантів","Проект опитування - %n варіантів","Проект опитування - %n варіантів"], + "_%n vote_::_%n votes_" : ["%n голосів","%n голосів","%n голосів","%n голосів"], + "Edit poll draft" : "Редагувати чернетку опитування", + "Delete poll draft" : "Видалити проект опитування", + "Open poll" : "Відкрите опитування", + "See results" : "Переглянути результати", + "Reactions" : "Реакції", + "No permission to post reactions in this conversation" : "Немає дозволу публікувати реакції в цій розмові", + "and {participant}" : "і {participant}", + "_and %n other participant_::_and %n other participants_" : ["та %n інших учасників","та %n інших учасників","та %n інших учасників","та %n інших учасників"], + "Show all reactions" : "Показати всі реакції", + "Add more reactions" : "Додайте більше реакцій", + "Show or collapse system messages" : "Показати або згорнути системні повідомлення", + "No messages" : "Відсутні повідомлення", + "All messages have expired or have been deleted." : "Всі повідомлення втратили актуальність або були видалені.", + "Unpin" : "Відкріпити", + "Cancel search" : "Зупинити пошук", + "Add a phone number" : "Додати номер телефону", + "Error: A password is required to create the conversation." : "Помилка: Для створення розмови потрібен пароль.", + "All set, the conversation \"{conversationName}\" was created." : "Все готово, розмова \"{conversationName}\" створена.", + "Create a new group conversation" : "Створити нову групову розмову", + "Add participants" : "Додати учасників", + "Maximum length exceeded ({maxlength} characters)" : "Перевищено максимальну довжину ({maxlength} символів)", + "Conversation visibility" : "Видимість розмови", + "Allow guests to join via link" : "Дозволити гостям приєднатися за посиланням", + "Enter password" : "Введіть пароль", + "This conversation has been locked" : "Ця розмова була заблокована", + "No permission to post messages in this conversation" : "Немає дозволу на розміщення повідомлень у цій бесіді", + "Joining conversation …" : "Приєднуйтесь до розмови ...", + "Write a message without notification" : "Написати повідомлення без попередження", + "Create a thread silently" : "Створити гілку приховано", + "Create a thread" : "Створіть тему", + "Send message silently" : "Надіслати повідомлення без звуку", + "Send message" : "Надіслати повідомлення", + "Send without notification" : "Надіслати без попередження", + "The participant will not be notified about new messages" : "Учасник не буде отримувати сповіщення про нові повідомлення", + "Participants will not be notified about new messages" : "Учасники не будуть отримувати сповіщення про нові повідомлення", + "Thread title is required" : "Назва теми обов'язкова", + "Message text is required" : "Текст повідомлення є обов'язковий", + "The message could not be edited" : "Повідомлення не вдалося відредагувати", + "File to share" : "Виберіть файл для надання доступу", + "File upload is not available in this conversation" : "Завантаження файлів недоступне в цій розмові", + "Add emoji" : "Додати емоційку", + "Adding a mention will only notify users who did not read the message." : "Додавання згадки сповістить лише тих користувачів, які не читали повідомлення.", + "Thread title" : "Назва гілки", + "Send later" : "Надішліть пізніше", + "Cancel editing" : "Скасувати редагування", + "{user} is out of office and might not respond." : "{user} перебуває у відставці і може не відповісти.", + "Absence period: {startDate} - {endDate}" : "Період відсутності: {startDate} - {endDate}", + "Replacement:" : "Заміна:", + "Share from {nextcloud}" : "Поділітися з {nextcloud}", + "Share from Files" : "Відкрити Файли", + "Share files to the conversation" : "Поділитися файлами під час розмови", + "Upload from device" : "Завантажити з пристрою", + "Create new poll" : "Створити нове опитування", + "Smart picker" : "Асистент розумного вибору", + "Record voice message" : "Записати голосове повідомлення", + "End recording and send" : "Завершити запис і відправити", + "Dismiss recording" : "Зняти запис", + "Access to the microphone was denied" : "У доступі до мікрофону було відмовлено", + "Microphone either not available or disabled in settings" : "Мікрофон або недоступний, або вимкнений у налаштуваннях", + "Error while recording audio" : "Помилка під час запису аудіо", + "Generating summary of unread messages …" : "Створення зведення непрочитаних повідомлень ...", + "Summary is AI generated and might contain mistakes" : "Резюме згенероване штучним інтелектом і може містити помилки", + "Error occurred during a summary generation" : "Виникла помилка під час формування звіту", + "New file" : "Новий файл", + "Blank" : "Порожньо", + "Error while creating file" : "Помилка під час створення файлу", + "Create and share a new file" : "Створіть і надайте спільний доступ до нового файлу", + "Name of the new file" : "Ім'я нового файлу", + "Create file" : "Створити файл", + "Someone is typing …" : "Хтось друкує ...", + "{user1} is typing …" : "{user1} друкує ...", + "{user1} and {user2} are typing …" : "{user1} і {user2} набирають ...", + "{user1}, {user2} and {user3} are typing …" : "{user1}, {user2} та {user3} друкують ...", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ...","{user1}, {user2}, {user3} та %n інших набирають ..."], + "Add more files" : "Додайте більше файлів", + "Send" : "Надіслати", + "In this conversation {user} can:" : "У цій розмові {user} може:", + "Edit default permissions for participants in {conversationName}" : "Редагування дозволів за замовчуванням для учасників у {conversationName}", + "Start a call" : "Почати дзвінок", + "Skip the lobby" : "Пропустити зал очікування", + "Can post messages and reactions" : "Можна публікувати повідомлення та реакції", + "Enable the microphone" : "Вмикати мікрофон", + "Enable the camera" : "Вмикати камеру", + "Share the screen" : "Ділитися екраном", + "Update permissions" : "Оновити дозволи", + "Updating permissions" : "Оновлення дозволів", + "No poll drafts" : "Немає чернеток опитувань", + "There is no poll drafts yet saved for this conversation" : "Для цієї розмови ще не збережено чернеток опитувань", + "Create poll in {name}" : "Створіть опитування в {name}", + "Create poll" : "Створити опитування", + "Error while importing poll" : "Помилка під час імпорту опитування", + "Question" : "Питання", + "Ask a question" : "Поставити запитання", + "Import draft from file" : "Імпортувати чернетку з файлу", + "Answers" : "Відповіді", + "Answer {option}" : "Відповідай. {option}", + "Delete poll option" : "Видалити варіант опитування", + "Add answer" : "Додати відповідь", + "Settings" : "Налаштування", + "Anonymous poll" : "Анонімне опитування", + "Multiple answers" : "Декілька відповідей", + "Save as draft" : "Зберегти як чернетку", + "Export draft to file" : "Експортуйте чернетку до файлу", + "You voted for this option" : "Ви проголосували за цей варіант", + "End poll" : "Завершити опитування", + "Change your vote" : "Змініть свій голос", + "Results" : "Результат", + "Voted participants" : "Проголосували учасники", + "Send a message to \"{roomName}\"" : "Надішліть повідомлення на \"{roomName}\"", + "Hide list of participants" : "Приховати список учасників", + "Show list of participants" : "Показати список учасників", + "Assistance requested in {roomName}" : "Прохання про допомогу в {roomName}", + "The message was sent to \"{roomName}\"" : "Повідомлення було надіслано на адресу \"{roomName}\"", + "Dismiss request for assistance" : "Відхилити запит на допомогу", + "Send message to room" : "Надіслати повідомлення в номер", + "Back to main room" : "Повернутися до головної кімнати", + "Back to your room" : "Поверніться до своєї кімнати", + "Message all rooms" : "Повідомлення на всі номери", + "Start session" : "Початок сесії", + "Start a call before you start a breakout room session" : "Почніть виклик, перш ніж запустити сесію в кімнатах обговорення", + "Stop session" : "Зупинити сеанс", + "The message was sent to all breakout rooms" : "Повідомлення було надіслано до всіх секційних кімнат", + "Send a message to all breakout rooms" : "Надіслати повідомлення до всіх секційних кімнат", + "Breakout rooms are not started" : "Розділені кімнати не запущено.", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "Дзвінки без високопродуктивного бекенду можуть спричинити проблеми зі зв'язком і високе навантаження на пристрої. {linkstart}Дізнайтеся більше{linkend}", + "Talk setup incomplete" : "Налаштування розмови не завершено", + "Disable lobby" : "Вимкнути лобі", + "Settings for participant \"{user}\"" : "Налаштування для учасника \"{user}\"", + "Participant \"{user}\"" : "Учасник \"{user}", + "moderator" : "модератор", + "bot" : "бот", + "guest" : "гість", + "Ringing …" : "Дзвінок...", + "Call rejected" : "Виклик відхилено", + "{time} talking …" : "{time} розмовляє ...", + "{time} talking time" : "{time} час розмови", + "Raised their hand" : "Підняли руку", + "Joined with video" : "Приєднано до відео", + "Joined via phone" : "Приєднався по телефону", + "Joined with audio" : "Приєднано до аудіо", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "Текст повинен мати довжину не менше або дорівнювати {maxLength} символів. Ваш поточний текст має довжину {charactersCount} символів.", + "Remove group and members" : "Вилучити групи та учасників", + "Remove team and members" : "Видалити команду та учасників", + "Remove participant" : "Вилучити учасника", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "Ви дійсно хочете видалити групу \"{displayName}\" та її учасників з цієї розмови?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "Ви дійсно хочете видалити команду \"{displayName}\" та її членів з цієї розмови?", + "Do you really want to remove {displayName} from this conversation?" : "Ви дійсно хочете видалити {displayName} з цієї розмови?", + "Notification was sent to {displayName}" : "Повідомлення було надіслано на адресу {displayName}", + "Could not send notification to {displayName}" : "Не вдалося надіслати сповіщення на адресу {displayName}", + "Permissions granted to {displayName}" : "Дозволи, надані для {displayName}", + "Could not modify permissions for {displayName}" : "Не вдалося змінити дозволи для {displayName}", + "Permissions removed for {displayName}" : "Дозволи вилучено для {displayName}", + "Permissions set to default for {displayName}" : "Дозволи, встановлені за замовчуванням для {displayName}", + "Phone number could not be hung up" : "Номер телефону не вдалося покласти слухавку", + "Phone number could not be put on hold" : "Номер телефону не вдалося перевести на утримання", + "Phone number could not be muted" : "Номер телефону не можна вимкнути", + "Phone number could not be unmuted" : "Номер телефону не можна було вимкнути", + "DTMF message could not be sent" : "Не вдалося надіслати DTMF-повідомлення", + "Phone number copied to clipboard" : "Номер телефону скопійовано до буфера обміну", + "Phone number could not be copied" : "Номер телефону не вдалося скопіювати", + "in the lobby" : "у вестибюлі", + "Dial out phone" : "Наберіть номер телефону", + "Hang up phone" : "Покладіть слухавку.", + "Move back to lobby" : "Поверніться до вестибюлю", + "Move to conversation" : "Переходимо до розмови", + "Dial-in PIN" : "PIN-код для входу в систему", + "Demote from moderator" : "Розжалування з модератора", + "Promote to moderator" : "Призначити модератором", + "Resend invitation" : "Повторно надіслати запрошення", + "Send call notification" : "Надіслати сповіщення про дзвінок", + "Dial out phone number" : "Наберіть номер телефону", + "Resume call for phone number" : "Відновити дзвінок за номером телефону", + "Put phone number on hold" : "Поставити номер телефону на утримання", + "Unmute phone number" : "Вимкнути звук телефону", + "Mute phone number" : "Вимкнення звуку номера телефону", + "Copy phone number" : "Скопіювати номер телефону", + "Reset custom permissions" : "Скидання користувацьких дозволів", + "Grant all permissions" : "Надати всі дозволи", + "Remove all permissions" : "Вилучити всі дозволи", + "Also ban from this conversation" : "Також заборона на цю розмову", + "Internal note (reason to ban)" : "Внутрішня примітка (причина заборони)", + "Remove" : "Вилучити", + "Permissions modified for {displayName}" : "Дозволи змінено для {displayName}", + "Add users, groups or teams" : "Додавання користувачів, груп або команд", + "Add users or groups" : "Додати користувачів або групи", + "Add users or teams" : "Додавання користувачів або команд", + "Add users" : "Додати користувачів", + "Add groups or teams" : "Додавання груп або команд", + "Add groups" : "Додати групи", + "Add teams" : "Додати команду", + "Add other sources" : "Додайте інші джерела", + "Add emails" : "Додати email-адреси", + "Integrations" : "Інтеграції", + "Add federated users" : "Додавання об'єднаних користувачів", + "Searching …" : "Пошук...", + "Search for more users" : "Шукати інших користувачів", + "You can search or add participants via name, email, or Federated Cloud ID" : "Ви можете шукати або додавати учасників за іменем, електронною поштою або ідентифікатором Federated Cloud ID", + "Search or add participants" : "Пошук або додавання учасників", + "Invitation was sent to {actorId}" : "Запрошення було надіслано {actorId}", + "An error occurred while adding the participants" : "Виникла помилка під час додавання учасників", + "A new group conversation with selected participant will be created" : "Буде створено нову групову розмову з обраним учасником", + "Participants" : "Учасники", + "Participants ({count})" : "Учасники ({count})", + "Open chat" : "Відкритий чат", + "You have new unread messages in the chat." : "У вас є нові непрочитані повідомлення в чаті.", + "You have been mentioned in the chat." : "Ви були згадані в чаті.", + "Search messages" : "Пошук повідомлень", + "Chat" : "Чат", + "Details" : "Деталі", + "Shared items" : "Спільні ресурси", + "Search in {name}" : "Шукати в {name}", + "Threads in {name}" : "Гілки у {name}", + "{actor} in {conversation}" : "{actor} в {conversation}", + "Search messages …" : "Пошук повідомлень ...", + "Search options" : "Параметри пошуку", + "From User" : "Від користувача", + "Since" : "Оскільки", + "Until" : "До тих пір, поки", + "No results found" : "Не знайдено жодного результату", + "Load more results" : "Завантажити більше результатів", + "Recent threads" : "Останні теми", + "Projects" : "Проєкти", + "No shared items" : "Немає спільних елементів", + "Thread notifications" : "Сповіщення про потоки", + "Thread actions" : "Дії з нитками", + "{actor}: {lastMessage}" : "{actor}: {lastMessage}", + "Link to a conversation" : "Посилання на розмову", + "No open conversations found" : "Не знайдено жодної відкритої розмови", + "Either there are no open conversations or you joined all of them." : "Або немає відкритих розмов, або ви приєдналися до всіх.", + "Check spelling or use complete words." : "Перевірте правопис або використовуйте повні слова.", + "Search conversations or users" : "Пошук розмов та учасників", + "Select conversation" : "Вибрати розмову", + "Number length is not valid" : "Довжина номера не допустима", + "Region code is not valid" : "Регіональний код не дійсний", + "Number length is too short" : "Занадто коротка довжина номера", + "Number length is too long" : "Довжина номера занадто велика", + "Number is not valid" : "Номер недійсний", + "Phone numbers" : "Номери телефонів", + "Display name: {name}" : "Ім'я для показу: {name}", + "Edit display name" : "Редагувати ім'я для показу", + "Display name (required)" : "Відображати ім'я (обов'язково)", + "Save name" : "Зберегти ім'я", + "Error while setting personal setting" : "Помилка під час встановлення персональних налаштувань", + "Error while saving sounds setting" : "Помилка під час збереження налаштування звуків", + "Play sounds when participants join or leave a call" : "Коли учасники приєднуються до дзвінка або виходять з нього, відтворювати звуковий сигнал", + "Notification settings" : "Налаштування сповіщень", + "Default language" : "Типова мова", + "Select location for attachments" : "Виберіть місце для вкладень", + "Error while setting attachment folder" : "Помилка під час встановлення папки вкладення", + "Error while setting read status privacy" : "Помилка під час встановлення конфіденційності статусу читання", + "Error while setting typing status privacy" : "Помилка під час встановлення конфіденційності статусу набору тексту", + "Error while setting default media state" : "Помилка під час встановлення стану носія за замовчуванням", + "Privacy" : "Конфіденційність", + "Attachments folder" : "Каталог із вкладеннями", + "Toggle full screen" : "Розгорнути на весь екран", + "Search" : "Пошук", + "Focus the chat input" : "Фокусування вводу в чаті", + "Unfocus the chat input to use shortcuts" : "Розфокусувати введення в чаті, щоб використовувати комбінації клавіш", + "Edit your last message" : "Відредагуйте своє останнє повідомлення", + "Shortcuts while in a call" : "Швидкі клавіші під час дзвінка", + "Camera on and off" : "Увімкнення та вимкнення камери", + "Microphone on and off" : "Увімкнення та вимкнення мікрофона", + "Raise or lower hand" : "Підняти або опустити руку", + "Push to talk or push to mute" : "Натисніть, щоб почати говорити, або тисніть, щоб вимкнути звук", + "Zoom-in / zoom-out a screen share" : "Збільшення/зменшення масштабу спільного доступу до екрана", + "Mouse wheel" : "Коліщатко миші", + "Start call silently" : "Почніть дзвінок беззвучно", + "Start call" : "Почати виклик", + "End call" : "Кінець зв'язку.", + "This call has just ended" : "Цей дзвінок щойно закінчився", + "You will be able to join the call only after a moderator starts it." : "Ви зможете приєднатися до дзвінка лише після того, як його розпочне модератор.", + "End call for everyone" : "Завершити дзвінок для всіх", + "Starting the recording" : "Початок запису", + "Recording" : "Запис", + "The call has been running for one hour." : "Дзвінок триває вже годину.", + "Cancel recording start" : "Скасувати початок запису", + "Stop recording" : "Зупинити запис", + "Send a reaction" : "Надішліть реакцію", + "React with {reaction}" : "Реагуйте з {reaction}", + "All tasks done!" : "Всі завдання виконані!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} від %n завдань","{done} з %n завдань","{done} з %n завдань","{done} з %n завдань"], + "Add participants to this call" : "Додайте учасників до цього дзвінка", + "_%n participant in call_::_%n participants in call_" : ["%n учасників дзвінка","%n учасників дзвінка","%n учасників дзвінка","%n учасників дзвінка"], + "You are not allowed to enable screensharing" : "Ви не маєте права ввімкнути спільний доступ до екрана", + "No screensharing" : "Без скріншотів", + "Screensharing options" : "Параметри демонстрації екрану", + "Enable screensharing" : "Увімкнути демонстрацію екрану", + "Bad sent video and screen quality." : "Погана якість надісланого відео та екрану.", + "Bad sent screen quality." : "Погана якість надісланого екрану.", + "Bad sent video quality." : "Погана якість надісланого відео.", + "Bad sent audio, video and screen quality." : "Погана якість надісланого аудіо, відео та екрану.", + "Bad sent audio and screen quality." : "Погана якість надісланого аудіо та екрану.", + "Bad sent audio and video quality." : "Погана якість надісланих аудіо та відео.", + "Bad sent audio quality." : "Погана якість надісланого аудіо.", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "Ваше інтернет-з'єднання або комп'ютер перевантажені, і інші учасники можуть не бачити ваш екран. Щоб покращити ситуацію, спробуйте вимкнути розмиття фону або відео під час демонстрації екрана.", + "Disable background blur" : "Вимкнути розмиття фону", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити ваш екран. Щоб поліпшити ситуацію, спробуйте вимкнути відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не бачити ваш екран.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не бачити вас.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути розмиття фону або відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути відео під час спільного використання екрана.", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не чути вас і не бачити ваш екран. Щоб поліпшити ситуацію, спробуйте вимкнути функцію спільного доступу до екрана.", + "Disable screenshare" : "Вимкнути скріншот", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути розмиття фону або відео.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Ваше інтернет-з'єднання або комп'ютер завантажені, і інші учасники можуть не бачити вас і не чути. Щоб поліпшити ситуацію, спробуйте вимкнути відео.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Ваше інтернет-з'єднання або комп'ютер зайняті, і інші учасники можуть не зрозуміти вас.", + "Screen sharing is not supported by your browser." : "Ваш браузер не підтримує демонстрацію екрана.", + "Screen sharing requires the page to be loaded through HTTPS." : "Демонстрація екрану вимагає доступу до сторінки через безпечний протокол https.", + "Screensharing requires the page to be loaded through HTTPS." : "Демонстрація екрану вимагає доступу до сторінки через безпечний протокол https.", + "An error occurred while starting screensharing." : "Помилка під час спроби поділитися екраном.", + "Select virtual background" : "Виберіть віртуальний фон", + "Show your screen" : "Демонстрація екрану", + "Stop screensharing" : "Припинити демонстрацію екрану", + "Mute others" : "Приглушити інших", + "Start recording" : "Почати запис", + "Set up breakout rooms" : "Підготуйте кімнати для секційних засідань", + "Download attendance list" : "Завантажити список відвідувачів", + "Open Calendar" : "Відкрити календар", + "Remove participant {name}" : "Видалити учасника {name}", + "Would you like to delete this conversation?" : "Ви хочете видалити цю розмову?", + "Are you sure you want to delete this conversation?" : "Ви впевнені, що хочете видалити цю розмову?", + "Delete now" : "Видалити зараз", + "Keep" : "Зберегти", + "Open dialpad" : "Відкрийте телефонну книгу", + "Select a region" : "Виберіть регіон", + "Local time: {time}" : "Місцевий час: {time}", + "Search …" : "Пошук …", + "Message without mention" : "Повідомлення без згадки", + "Mention myself" : "Згадати про себе", + "Mention everyone" : "Згадайте всіх", + "Select a conversation" : "Виберіть розмову", + "Select a mode" : "Виберіть режим", + "You do not have permissions to access this conversation." : "Ви не маєте дозволів для доступу до цієї розмови.", + "Join a different conversation or start a new one." : "Приєднайтеся до іншої розмови або почніть нову.", + "The conversation does not exist" : "Розмови не існує", + "Join a conversation or start a new one!" : "Приєднайтеся до розмови або почніть нову!", + "Duplicate session" : "Дублікат сеансу", + "Creating and joining a conversation with \"{userid}\"" : "Створення та приєднання до розмови з \"{userid}\"", + "Join a conversation or start a new one" : "Приєднайтеся до розмови або почніть нову", + "Error while joining the conversation" : "Помилка під час приєднання до розмови", + "Nextcloud URL" : "URL-адреса наступної хмари", + "Nextcloud user" : "Користувач Nextcloud", + "User password" : "Пароль користувача", + "Talk conversation" : "Розмова Talk", + "Skip TLS verification" : "Пропустити перевірку TLS", + "Matrix server URL" : "URL-адреса сервера матриці", + "User" : "Користувач", + "Matrix channel" : "Матричний канал", + "Mattermost server URL" : "Найважливіша URL-адреса сервера", + "Mattermost user" : "Найважливіший користувач", + "Team name" : "Назва команди", + "Channel name" : "Назва каналу", + "Rocket.Chat server URL" : "Адреса сервера Rocket.Chat", + "User name or email address" : "Ім'я користувача або адреса ел. пошти", + "Rocket.Chat channel" : "Канал Rocket.Chat", + "Zulip server URL" : "URL-адреса сервера Zulip", + "Bot user name" : "Ім'я користувача бота", + "Bot API key" : "Ключ API бота", + "Zulip channel" : "Канал Zulip", + "API token" : "Токен API", + "Slack channel" : "Слабкий канал", + "Server ID or name" : "Ідентифікатор або ім'я сервера", + "Channel ID (prefixed with \"ID:\") or name" : "Ідентифікатор каналу (з префіксом \"ID:\") або назва", + "Channel" : "Канал", + "Login" : "Login", + "Chat ID" : "Ідентифікатор чату", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL-адреса IRC-сервера (наприклад, chat.freenode.net:6667)", + "Nickname" : "Прізвисько", + "Connection password" : "Пароль для підключення", + "IRC channel" : "IRC-канал", + "Channel password" : "Пароль каналу", + "NickServ nickname" : "NickServ нікнейм", + "NickServ password" : "Пароль NickServ", + "Use TLS" : "Використовуйте TLS", + "Use SASL" : "Використовуйте SASL", + "Tenant ID" : "Ідентифікатор орендаря", + "Client ID" : "Ідентифікатор клієнта", + "Team ID" : "Ідентифікатор команди", + "Thread ID" : "Ідентифікатор гілки", + "XMPP/Jabber server URL" : "URL-адреса сервера XMPP/Jabber", + "MUC server URL" : "URL-адреса сервера MUC", + "Jabber ID" : "Jabber ID", + "Media" : "Зображення та відео", + "Polls" : "Опитування", + "Deck cards" : "Карти з колоди", + "Voice messages" : "Голосові повідомлення", + "Locations" : "Розташування", + "Call recordings" : "Записи дзвінків", + "Audio" : "Аудіо", + "Show all media" : "Показати всі медіа", + "Show all files" : "Показати всі файли", + "Show all polls" : "Показати всі опитування", + "Show all deck cards" : "Показати всі карти колоди", + "Show all voice messages" : "Показати всі голосові повідомлення", + "Show all locations" : "Показати всі локації", + "Show all call recordings" : "Показати всі записи дзвінків", + "Show all audio" : "Показати всі аудіо", + "Show all other" : "Показати всі інші", + "Follow conversation settings" : "Слідкувати за налаштуваннями розмови", + "Group" : "Група", + "Team" : "Команда", + "You reconnected to the call" : "Ви знову підключилися до дзвінка", + "{actor} reconnected to the call" : "{actor} перепідключився до виклику", + "You added {user0} and {user1}" : "Ви додали {user0} та {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників","Ви додали {user0}, {user1} та ще %n учасників"], + "An administrator added you and {user0}" : "Адміністратор додав вас і {user0}", + "{actor} added you and {user0}" : "{actor} додав тебе і {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників","Адміністратор додав вас, {user0} та ще %n учасників"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників","{actor} додали вас, {user0} та ще %n учасників"], + "An administrator added {user0} and {user1}" : "Адміністратор додав {user0} та {user1}", + "{actor} added {user0} and {user1}" : "{actor} додано {user0} та {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників","Адміністратор додав {user0}, {user1} та ще %n учасників"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників","{actor} додано {user0}, {user1} та ще %n учасників"], + "You removed {user0} and {user1}" : "Ви видалили {user0} та {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників","Ви видалили {user0}, {user1} та ще %n учасників"], + "An administrator removed you and {user0}" : "Адміністратор видалив вас і {user0}", + "{actor} removed you and {user0}" : "{actor} прибрали тебе і {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників","Адміністратор видалив вас, {user0} та ще %n учасників"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} видалив вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників","{actor} видалили вас, {user0} та ще %n учасників"], + "An administrator removed {user0} and {user1}" : "Адміністратор видалив {user0} та {user1}", + "{actor} removed {user0} and {user1}" : "{actor} видалено {user0} та {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників","Адміністратор видалив {user0}, {user1} та ще %n учасників"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників","{actor} видалено {user0}, {user1} та ще %n учасників"], + "You and {user0} joined the call" : "Ви та {user0} долучилися до заклику", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу","Ви, {user0} та ще %n учасників долучилися до конкурсу"], + "{user0} and {user1} joined the call" : "{user0} та {user1} приєдналися до заклику", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}, {user1} та ще %n учасників долучилися до конкурсу","{user0}, {user1} та ще %n учасників долучилися до заклику","{user0}, {user1} та ще %n учасників долучилися до заклику","{user0}, {user1} та ще %n учасників долучилися до заклику"], + "You and {user0} left the call" : "Ви та {user0} залишили повідомлення", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["Ви, {user0} та ще %n учасників залишили дзвінок","Ви, {user0} та ще %n учасників залишили повідомлення","Ви, {user0} та ще %n учасників залишили повідомлення","Ви, {user0} та ще %n учасників залишили повідомлення"], + "{user0} and {user1} left the call" : "{user0} і {user1} залишив дзвінок", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}, {user1} і ще %n учасників залишили дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок","{user0}, {user1} та ще %n учасників відповіли на дзвінок"], + "You promoted {user0} and {user1} to moderators" : "Ви призначили {user0} та {user1} модераторами", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","Ви підвищили {user0}, {user1} та ще %n учасників до рівня модераторів"], + "An administrator promoted you and {user0} to moderators" : "Адміністратор призначив вас і {user0} модераторами", + "{actor} promoted you and {user0} to moderators" : "{actor} підвищили вас і {user0} до модераторів", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів","Адміністратор підвищив вас, {user0} та ще %n учасників до рівня модераторів"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів","{actor} підвищили вас, {user0} та ще %n учасників до модераторів"], + "An administrator promoted {user0} and {user1} to moderators" : "Адміністратор підвищив {user0} та {user1} до рівня модераторів", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} підвищили {user0} та {user1} до рівня модераторів", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів","Адміністратор підвищив {user0}, {user1} та ще %n учасників до рівня модераторів"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} підвищили {user0}, {user1} та ще %n учасників до рівня модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів","{actor} просунули {user0}, {user1} та ще %n учасників до модераторів"], + "You demoted {user0} and {user1} from moderators" : "Ви понизили {user0} та {user1} з модераторів", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["Ви понизили {user0}, {user1} і ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів","Ви понизили {user0}, {user1} та ще %n учасників з модераторів"], + "An administrator demoted you and {user0} from moderators" : "Адміністратор понизив вас і {user0} в правах з модераторів", + "{actor} demoted you and {user0} from moderators" : "{actor} понизили вас і {user0} з модераторів", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["Адміністратор понизив вас у посаді, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів","Адміністратор понизив вас, {user0} та ще %n учасників з модераторів"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} понизили вас, {user0} та ще %n учасників від модераторів.","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів","{actor} понизили вас у посаді, {user0} та ще %n учасників від модераторів"], + "An administrator demoted {user0} and {user1} from moderators" : "Адміністратор понизив {user0} та {user1} у званні модераторів", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} понизили {user0} та {user1} з модераторів", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів","Адміністратор понизив {user0}, {user1} та ще %n учасників з модераторів"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} понижено {user0}, {user1} та ще %n учасників від модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів","{actor} понизили {user0}, {user1} та ще %n учасників з модераторів"], + "You:" : "Ти:", + "You: {lastMessage}" : "Ти: {lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "(edited by you)" : "(відредаговано вами)", + "(edited by a deleted user)" : "(відредаговано видаленим користувачем)", + "(edited by {moderator})" : "(за редакцією {moderator})", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Ви намагаєтеся приєднатися до розмови, маючи активну сесію в іншому вікні або на іншому пристрої. Наразі це не підтримується Nextcloud Talk. Що ви хочете зробити?", + "Leave this page" : "Залиште цю сторінку", + "Join here" : "Приєднуйтесь тут", + "Deck card has been posted to {conversation}" : "Картку колоди опубліковано на {conversation}", + "An error occurred while posting deck card to conversation" : "Виникла помилка під час публікації карти колоди в розмову", + "Post to a conversation" : "Написати до розмови", + "Post to conversation" : "Допис до розмови", + "The recording failed. Please contact your administrator." : "Запис не відбувся. Зверніться до адміністратора.", + "Location has been posted to {conversation}" : "Розташування було розміщено на {conversation}", + "An error occurred while posting location to conversation" : "Виникла помилка під час додавання місцезнаходження до розмови", + "Share to a conversation" : "Долучитися до розмови", + "Share to conversation" : "Долучитися до розмови", + "In conversation" : "У розмові", + "Search in conversation: {conversation}" : "Шукайте в розмові: {conversation}", + "Your requests are throttled at the moment due to brute force protection" : "Наразі ваші запити блокуються через захист від грубої сили", + "Error while clearing conversation history" : "Помилка під час очищення історії розмов", + "Error occurred while allowing guests" : "Виникла помилка під час входу гостей", + "Error occurred while disallowing guests" : "Виникла помилка під час заборони гостей", + "Error occurred when restricting the conversation to moderator" : "Виникла помилка при обмеженні розмови тільки модератором", + "Error occurred when opening the conversation to everyone" : "Виникла помилка при відкритті розмови для всіх", + "Conversation password has been saved" : "Пароль для розмови збережено", + "Conversation password has been removed" : "Видалено пароль для розмови", + "Error occurred while saving conversation password" : "Виникла помилка під час збереження пароля розмови", + "Call recording is starting." : "Розпочато запис розмови.", + "Call recording stopped while starting." : "Запис розмови зупинився під час запуску.", + "Call recording stopped. You will be notified once the recording is available." : "Запис розмови зупинено. Ви отримаєте сповіщення, коли запис буде доступний.", + "Conversation picture set" : "Зображення обговорення встановлено", + "Conversation picture deleted" : "Зображення розмови вилучено", + "Could not delete the conversation picture" : "Не вдалося вилучити зображення розмови", + "Could not remove the automatic expiration" : "Не вдалося видалити автоматичне закінчення терміну дії", + "Could not post message: {errorMessage}" : "Не вдалося опублікувати повідомлення: {errorMessage}", + "Participant is banned successfully" : "Учасника успішно забанено", + "Error while banning the participant" : "Помилка під час бану учасника", + "An error occurred while fetching the participants" : "Виникла помилка під час отримання учасників", + "Could not send invitation to {actorId}" : "Не вдалося надіслати запрошення до {actorId}", + "Invitations sent" : "Запрошення надіслані", + "Error occurred when sending invitations" : "Виникла помилка під час надсилання запрошень", + "Failed to join the conversation." : "Не зміг долучитися до розмови.", + "An error occurred while creating breakout rooms" : "Виникла помилка при створенні секційних кімнат", + "An error occurred while re-ordering the attendees" : "Виникла помилка при повторному замовленні учасників", + "An error occurred while deleting breakout rooms" : "Виникла помилка при видаленні секційних кімнат", + "An error occurred while starting breakout rooms" : "Виникла помилка під час запуску секційних кімнат", + "An error occurred while stopping breakout rooms" : "Виникла помилка під час зупинки секційних кімнат", + "An error occurred while sending a message to the breakout rooms" : "Виникла помилка під час надсилання повідомлення до секційних кімнат", + "An error occurred while requesting assistance" : "Виникла помилка під час запиту на допомогу", + "An error occurred while resetting the request for assistance" : "Виникла помилка під час скидання запиту на допомогу", + "An error occurred while joining breakout room" : "Виникла помилка під час приєднання до секційної кімнати", + "Failed to rename the thread" : "Не вдалося перейменувати потік", + "Error fetching upcoming events" : "Помилка при отриманні майбутніх подій", + "Error fetching upcoming reminders" : "Помилка при отриманні майбутніх нагадувань", + "An error occurred while accepting an invitation" : "Виникла помилка під час прийняття запрошення", + "An error occurred while rejecting an invitation" : "Виникла помилка під час відхилення запрошення", + "{guest} (guest)" : "{guest} (гість)", + "Poll draft has been saved" : "Чернетка опитування збережена", + "An error occurred while saving the draft" : "Виникла помилка під час збереження чернетки", + "An error occurred while submitting your vote" : "Виникла помилка під час відправлення вашого голосу", + "An error occurred while ending the poll" : "Виникла помилка при завершенні опитування", + "An error occurred while deleting the poll draft" : "Виникла помилка при видаленні чернетки опитування", + "Poll \"{name}\" was created by {user}. Click to vote" : "Опитування \"{name}\" було створено {user}. Натисніть, щоб проголосувати", + "Failed to add reaction" : "Не вдалося додати відповідь", + "Failed to remove reaction" : "Не вдалося прибрати реакцію", + "Error while uploading file \"{fileName}\"" : "Помилка під час завантаження файлу \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Недостатньо місця для завантаження файлу \"{fileName}\"", + "You are not allowed to share files" : "Ви не маєте права ділитися файлами", + "Error while sharing file" : "Помилка під час надання спільного доступу до файлу", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Браузер, який ви використовуєте, не повністю підтримується Nextcloud Talk. Будь ласка, використовуйте останню версію Mozilla Firefox, Microsoft Edge, Google Chrome, Opera або Apple Safari.", + "_In %n hour_::_In %n hours_" : ["Через %n годину","Через %n годин","Через %n годин","Через %n годин"], + "_%n minute _::_%n minutes_" : ["%n хвилина","%n хвилин","%n хвилин","%n хвилин"], + "In {hours} and {minutes}" : "Через {hours} годин і {minutes} хвилин", + "_In %n minute_::_In %n minutes_" : ["Через %n хвилину","Через %n хвилин ","Через %n хвилин","Через %n хвилин"], + "Later today – {timeLocale}" : "Пізніше сьогодні - {timeLocale}", + "Tomorrow – {timeLocale}" : "Завтра - {timeLocale}", + "This weekend – {timeLocale}" : "На цих вихідних - {timeLocale}", + "Next week – {timeLocale}" : "Наступного тижня - {timeLocale}", + "Message link copied to clipboard" : "Посилання на повідомлення скопійовано в буфер обміну", + "Conversation link copied to clipboard" : "Посилання на розмову скопійовано до буфера обміну", + "The link could not be copied" : "Посилання не вдалося скопіювати", + "Error while parsing a PROPFIND error" : "Помилка під час обробки помилки PROPFIND", + "Sending signaling message has failed" : "Не вдалося передати повідомлення сигналізації.", + "Lost connection to signaling server. Trying to reconnect." : "Втрачено зв'язок із сервером сигналізації. Триває спроба відновити зв'язок.", + "Lost connection to signaling server." : "Втрачено зв'язок із сервером сигналізації.", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "Встановлений сиґнальний сервер потрібно оновити, щоби його версія була сумісною з версією Talk. Будь ласка, сконтактуйте з адміністратором.", + "Please restart the app." : "Будь ласка, перезапустіть програму.", + "Please reload the page." : "Будь ласка, перезавантажте сторінку.", + "Please try to restart the app." : "Спробуйте перезапустити програму.", + "Please try to reload the page." : "Будь ласка, спробуйте перезавантажити сторінку.", + "Do not disturb" : "Не турбувати", + "Away" : "Відсутній(-я)", + "Microphone {number}" : "Мікрофон {number}", + "Camera {number}" : "Камера {number}", + "Speaker {number}" : "Доповідач {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Здається, ви говорите з вимкненим мікрофоном, будь ласка, увімкніть його, щоб інші могли вас почути", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Не вдалося встановити з'єднання принаймні з одним учасником. Для вашого сценарію може знадобитися сервер TURN. Попросіть адміністратора налаштувати його відповідно до {linkstart} цієї документації{linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Це займає більше часу, ніж очікувалося. Чи вже надано (або відхилено) дозволи для медіа? Якщо так, перезапустіть браузер, оскільки аудіо та відео не працюють.", + "Access to microphone & camera is only possible with HTTPS" : "Доступ до мікрофона та камери можливий лише через безпечний протокол https.", + "Please move your setup to HTTPS" : "Будь ласка, налаштуйте безпечний доступ до сервера через https.", + "Access to microphone & camera was denied" : "У доступі до мікрофону та камери було відмовлено", + "WebRTC is not supported in your browser" : "WebRTC не підтримується у вашому браузері", + "Please use a different browser like Firefox or Chrome" : "Будь ласка, використовуйте інший браузер, наприклад, Firefox або Chrome", + "Error while accessing microphone & camera" : "Помилка під час доступу до мікрофона та камери", + "%s Talk on your mobile devices" : "%s Talk на мобільних пристроях", + "Join conversations at any time, anywhere, on any device." : "Приєднуйтесь до розмов у будь-який час, у будь-якому місці, на будь-якому пристрої.", + "Android app" : "Застосунок для Android", + "iOS app" : "Застосунок для iOS", + "__language_name__" : "Українська", + "Webhook Demo" : "Демонстраційна версія Webhook", + "Call summary (%s)" : "Підсумки дзвінків (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "Після дзвінка бот підбиває підсумки розмови та публікує оглядове повідомлення з переліком усіх учасників і завданнями", + "Tasks" : "Завдання", + "Notes" : "Нотатки", + "Reports" : "Звіти", + "Decisions" : "Рішення", + "Agenda" : "Порядок денний", + "Call summary" : "Підсумки дзвінка", + "Call summary - {title}" : "Підсумки дзвінків - {title}", + "Talk conversation for event" : "Розмова Talk для події", + "Client Push is installed, this improves the performance of desktop clients." : "Встановлено Client Push, це покращує продуктивність десктопних клієнтів.", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "{notify_push} не встановлено, це може призвести до проблем з продуктивністю під час використання десктопних клієнтів.", + "Next meeting" : "Наступна зустріч", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "Заплануйте зустріч у своєму календарі. Щоб розмова з'явилася тут, потрібно вказати місце, де вона буде проходити", + "Join conversations from remote Nextcloud servers" : "Приєднуйтесь до розмов з віддалених серверів Nextcloud", + "Your default media state has been saved" : "Збережено стан медіа за замовчуванням", + "Set reminder for later today" : "Встановити нагадування на сьогодні пізніше", + "Set reminder for tomorrow" : "Встановити нагадування на завтра", + "Set reminder for this weekend" : "Встановити нагадування на ці вихідні", + "Set reminder for next week" : "Встановити нагадування на наступний тиждень", + "Generate summary" : "Згенерувати підсумок", + "Open poll • You voted already" : "Відкрите опитування - Ви вже проголосували", + "Open poll • Click to vote" : "Відкрите опитування - Натисніть, щоб проголосувати", + "Poll • Ended" : "Опитування - Завершено", + "Talk recording from {time} ({conversation})" : "Запис розмови з {time} ({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["Результати опитування - %n голосів","Результати опитування - %n голосів","Результати опитування - %n голосів","Результати опитування - %n голосів"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["Відкрите голосування - %n голосів","Відкрите голосування - %n голосів","Відкрите голосування - %n голосів","Відкрите голосування - %n голосів"], + "Submit vote" : "Подати голос", + "Your privacy setting has been saved" : "Ваші налаштування конфіденційності збережено", + "Your personal setting has been saved" : "Ваші персональні налаштування збережено", + "Failed to save sounds setting" : "Не вдалося зберегти налаштування звуків", + "Sounds setting saved" : "Налаштування звуків збережено", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk оновлено, ви не можете розпочати або приєднатися до виклику.", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Ви приєдналися до розмови в іншому вікні або на іншому пристрої. Наразі Nextcloud Talk не підтримує таку функцію, тому ця сесія була закрита.", + "Nextcloud Talk was updated." : "Оновлений Nextcloud Talk.", + "Nextcloud is in maintenance mode." : "Nextcloud знаходиться в режимі технічного обслуговування.", + "Nextcloud Talk Federation was updated." : "Оновлена Nextcloud Talk Federation." +},"pluralForm" :"nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 ? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > 14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % 100 >=11 && n % 100 <=14 )) ? 2: 3);" +} \ No newline at end of file diff --git a/l10n/uz.js b/l10n/uz.js new file mode 100644 index 0000000..6998972 --- /dev/null +++ b/l10n/uz.js @@ -0,0 +1,390 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "Suhbat", + "(Duration %s)" : "(Davomiylik %s)", + "You attended a call with {user1}" : "Siz {user1} bilan suhbatda ishtirok etdingiz", + "_%n guest_::_%n guests_" : ["%n mehmon"], + "You attended a call with {user1} and {user2}" : "Siz {user1} va {user2} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2} and {user3}" : "Siz {user1}, {user2} va {user3} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Siz {user1}, {user2}, {user3} va {user4} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Siz {user1}, {user2}, {user3}, {user4} va {user5} bilan suhbatda ishtirok etdingiz", + "_%n other_::_%n others_" : ["%n boshqalar"], + "Talk" : "Gaplash", + "Incoming call" : "Kiruvchi qo'ng'iroq", + "Message deleted by author" : "Xabar muallif tomonidan o'chirildi", + "Deleted user" : "Deleted user", + "System" : "System", + "File not found" : "Fayl topilmadi", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Description" : "Tavsif", + "Meeting" : "Uchrashuv", + "Accept" : "Qabul qiling", + "Decline" : "Rad etish", + "Reminder" : "Eslatma", + "Notification" : "Bildirishnomalar", + "error" : "Xatolik", + "Default" : "Standart", + "Other" : "Boshqa", + "Andorra" : "Andorra", + "United Arab Emirates" : "Birlashgan Arab Amirliklari", + "Afghanistan" : "Afg'oniston", + "Antigua and Barbuda" : "Antigua va Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albaniya", + "Armenia" : "Armaniston", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Amerika Samoasi", + "Austria" : "Avstriya", + "Australia" : "Avstraliya", + "Aruba" : "Aruba", + "Åland Islands" : "Aland orollari", + "Azerbaijan" : "Ozarbayjon", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgiya", + "Burkina Faso" : "Burkina-Faso", + "Bulgaria" : "Bolgariya", + "Bahrain" : "Bahrayn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sent-Bartelemi", + "Bermuda" : "Bermud orollari", + "Brunei Darussalam" : "Bruney Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius va Saba", + "Brazil" : "Braziliya", + "Bahamas" : "Bagama orollari", + "Bhutan" : "Butan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Beliz", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokos (Kiling) orollari", + "Central African Republic" : "Markaziy Afrika Respublikasi", + "Congo" : "Kongo", + "Switzerland" : "Shveytsariya", + "Côte d'Ivoire" : "Kot-diuvar", + "Cook Islands" : "Kuk orollari", + "Chile" : "Chili", + "Cameroon" : "Kamerun", + "China" : "Xitoy", + "Colombia" : "Kolumbiya", + "Costa Rica" : "Kosta-Rika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kabo Verde", + "Curaçao" : "Kyurasao", + "Christmas Island" : "Rojdestvo oroli", + "Cyprus" : "Kipr", + "Czechia" : "Chexiya", + "Germany" : "Germaniya", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominika Respublikasi", + "Algeria" : "Jazoir", + "Ecuador" : "Ekvador", + "Estonia" : "Estoniya", + "Egypt" : "Misr", + "Western Sahara" : "G'arbiy Sahara", + "Eritrea" : "Eritreya", + "Spain" : "Ispaniya", + "Ethiopia" : "Efiopiya", + "Finland" : "Finlyandiya", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Folklend orollari (Malvin orollari)", + "Faroe Islands" : "Farer orollari", + "France" : "Fransiya", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Buyuk Britaniya va Shimoliy Irlandiya Birlashgan Qirolligi", + "Grenada" : "Grenada", + "Georgia" : "Gruziya", + "French Guiana" : "Fransuz Gvianasi", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandiya", + "Gambia" : "Gambiya", + "Guinea" : "Guinea", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Ekvatorial Gvineya", + "Greece" : "Gretsiya", + "South Georgia and the South Sandwich Islands" : "Janubiy Jorjiya va Janubiy Sandvich orollari", + "Guatemala" : "Gvatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Gonkong", + "Heard Island and McDonald Islands" : "Heard oroli va Makdonald orollari", + "Honduras" : "Gonduras", + "Croatia" : "Xorvatiya", + "Haiti" : "Gaiti", + "Hungary" : "Vengriya", + "Indonesia" : "Indoneziya", + "Ireland" : "Irlandiya", + "Israel" : "Isroil", + "Isle of Man" : "Man oroli", + "India" : "Hindiston", + "British Indian Ocean Territory" : "Britaniya Hind okeani hududi", + "Iraq" : "Iroq", + "Iceland" : "Islandiya", + "Italy" : "Italiya", + "Jersey" : "Jersi", + "Jamaica" : "Yamayka", + "Jordan" : "Iordaniya", + "Japan" : "Yaponiya", + "Kenya" : "Keniya", + "Kyrgyzstan" : "Qirg'iziston", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komor orollari", + "Saint Kitts and Nevis" : "Sent-Kitts va Nevis", + "Korea, Republic of" : "Korea Republikasi", + "Kuwait" : "Quvayt", + "Cayman Islands" : "Kayman orollari", + "Kazakhstan" : "Qozog'iston", + "Lao People's Democratic Republic" : "Laos Xalq Demokratik Respublikasi", + "Lebanon" : "Livan", + "Saint Lucia" : "Sent-Lyusiya", + "Liechtenstein" : "Lixtenshteyn", + "Sri Lanka" : "Shri-Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litva", + "Luxembourg" : "Lyuksemburg", + "Latvia" : "Latviya", + "Libya" : "Libya", + "Morocco" : "Marokash", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova Republikasi", + "Montenegro" : "Chernogoriya", + "Saint Martin (French part)" : "Sent-Martin (frantsuz qismi)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall orollari", + "North Macedonia" : "Shimoliy Makedoniya", + "Mali" : "Mali", + "Myanmar" : "Myanma", + "Mongolia" : "Mo'g'uliston", + "Macao" : "Makao", + "Northern Mariana Islands" : "Shimoliy Mariana orollari", + "Martinique" : "Martinika", + "Mauritania" : "Mavritaniya", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mavrikiy", + "Maldives" : "Maldiv orollari", + "Malawi" : "Malavi", + "Mexico" : "Meksika", + "Malaysia" : "Malayziya", + "Mozambique" : "Mozambik", + "Namibia" : "Namibiya", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk oroli", + "Nigeria" : "Nigeriya", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niderlandiya", + "Norway" : "Norvegiya", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Ummon", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransuz Polineziyasi", + "Papua New Guinea" : "Papua-Yangi Gvineya", + "Philippines" : "Filippin", + "Pakistan" : "Pokiston", + "Poland" : "Polsha", + "Saint Pierre and Miquelon" : "Sent-Pyer va Mikelon", + "Pitcairn" : "Pitkern", + "Puerto Rico" : "Puerto-Riko", + "Palestine, State of" : "Falastin, Davlat", + "Portugal" : "Portugaliya", + "Palau" : "Palau", + "Paraguay" : "Paragvay", + "Qatar" : "Qatar", + "Réunion" : "Reunion", + "Romania" : "Ruminiya", + "Serbia" : "Serbiya", + "Russian Federation" : "Rossiya Federatsiyasi", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudiya Arabistoni", + "Solomon Islands" : "Solomon orollari", + "Seychelles" : "Seyshel orollari", + "Sudan" : "Sudan", + "Sweden" : "Shvetsiya", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Avliyo Yelena, Ko'tarilish va Tristan da Kunya", + "Slovenia" : "Sloveniya", + "Svalbard and Jan Mayen" : "Svalbard va Yan Mayen", + "Slovakia" : "Slovakiya", + "Sierra Leone" : "Syerra-Leone", + "San Marino" : "San-Marino", + "Senegal" : "Senegal", + "Somalia" : "Somali", + "Suriname" : "Surinam", + "South Sudan" : "Janubiy Sudan", + "Sao Tome and Principe" : "San-Tome va Prinsipi", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint-Marten (Gollandiya qismi)", + "Syrian Arab Republic" : "Suriya Arab Respublikasi", + "Eswatini" : "Esvatin", + "Turks and Caicos Islands" : "Turks va Kaykos orollari", + "Chad" : "Chad", + "French Southern Territories" : "Frantsiyaning janubiy hududlari", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tojikiston", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmaniston", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Turkiya", + "Trinidad and Tobago" : "Trinidad va Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Xitoy provintsiyasi", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Amerika Qo'shma Shtatlarining Kichik Chet orollari", + "United States of America" : "Amerika Qo'shma Shtatlari", + "Uruguay" : "Urugvay", + "Uzbekistan" : "O'zbekiston", + "Holy See" : "Muqaddas orollar", + "Saint Vincent and the Grenadines" : "Sent-Vinsent va Grenadin orollari", + "Viet Nam" : "Vyetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Uollis va Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yaman", + "Mayotte" : "Mayotte", + "South Africa" : "Janubiy Afrika", + "Zambia" : "Zambiya", + "Zimbabwe" : "Zimbabve", + "Federation" : "Jamg'arma", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Jamg'armaning muloqot moduli yoqilgan bo'lsa, \"memcache.locking\" ni sozlash tavsiya etiladi.", + "The password is wrong. Try again." : "Parol noto'g'ri. Qayta urinib ko'ring.", + "Password" : "Password", + "Submit" : "Submit", + "Everyone" : "Everyone", + "Save changes" : "Save changes", + "Saving …" : "Saqlanmoqda...", + "Saved!" : "Saqlandi!", + "Name" : "Name", + "Enable Federation in Talk app" : "Talk ilovasida Jamg'armani yoqish", + "Permissions" : "Ruxsatnomalar", + "Off" : "Oʻchirilgan", + "Enable encryption" : "Enable encryption", + "Pending" : "Pending", + "Error" : "Xatolik", + "Never" : "Hech qachon", + "Language" : "Language", + "Status" : "Status", + "Yes" : "Yes", + "No" : "No", + "OK" : "Yaxshi", + "Checking …" : "Checking …", + "Federated user" : "Korporativ foydalanuvchi", + "Confirm" : "Confirm", + "Reset" : "Qayta tiklash", + "Cancel" : "Bekor qilish", + "Back" : "Orqaga", + "Now" : "Hozir", + "Loading …" : "Yuklanmoqda…", + "From" : "Dan", + "To" : "Gacha", + "Calendar" : "Calendar", + "Attendees" : "Ishtirokchilar", + "Save" : "Saqlash", + "No results" : "Natija yo'q", + "Done" : "Bajarildi", + "Grid view" : "To‘r ko‘rinishi", + "Reload" : "Qayta yuklash", + "Copy link" : "Havolani nusxalash", + "None" : "Yo'q", + "Favorite" : "Favorite", + "Date:" : "Sana:", + "Hide details" : "Tafsilotlarni yashirish", + "Show details" : "Tafsilotlarni ko'rsatish", + "Disable" : "Oʻchirish", + "Enable" : "Enable", + "Choose" : "Choose", + "Restricted" : "Cheklangan", + "Personal" : "Personal", + "Delete conversation" : "Delete conversation", + "_%n hour_::_%n hours_" : ["%n soat"], + "_%n day_::_%n days_" : ["%n kun"], + "_%n week_::_%n weeks_" : ["%n hafta"], + "Password protection" : "Parol himoyasi", + "Change password" : "Change password", + "Edit" : "Tahrirlash", + "Delete" : "O'chirish", + "Notifications" : "Notifications", + "Create a new conversation" : "Yangi suhbat yarating", + "Log in" : "Kirish", + "Remove from favorites" : "Sevimlilardan olib tashlang", + "Add to favorites" : "Sevimlilarga qo'shing", + "Home" : "Uy", + "Users" : "Users", + "Groups" : "Groups", + "Teams" : "Jamoalar", + "No search results" : "Qidiruv natijalari yo‘q", + "Select a device" : "Qurilmani tanlang", + "Test" : "Test", + "Upload" : "Yuklash", + "Files" : "Fayllar", + "24 hours" : "24 soat", + "Reply" : "Javob bering", + "More actions" : "Ko'proq harakatlar", + "Translate" : "Tarjima", + "Dismiss" : "Dismiss", + "Contact" : "Aloqa", + "Remove {fileName}" : " {fileName} ni o'chirish", + "Add emoji" : "Emoji qo'shing", + "Upload from device" : "Qurilmadan yuklash", + "Send" : "Send", + "Settings" : "Sozlamalar", + "Results" : "Natijalar", + "Remove participant" : "Ishtirokchini olib tashlash", + "Remove" : "O'chirish", + "Searching …" : "Qidirilmoqda …", + "Participants" : "Ishtirokchilar", + "Details" : "Details", + "Search in {name}" : " {name}ni qidirish", + "No results found" : "Hech qanday natija topilmadi", + "Load more results" : "Ko'proq natijalarni yuklang", + "Projects" : "Loyihalar", + "Select conversation" : "Suhbatni tanlang", + "Notification settings" : "Bildirishnoma sozlamalari", + "Privacy" : "Maxfiylik", + "Attachments folder" : "Qo'shimchalar papkasi", + "Search" : "Qidirish", + "Select a region" : "Hududni tanlang", + "User" : "Foydalanuvchi", + "Login" : "Login", + "Client ID" : "Mijoz identifikatori", + "Audio" : "Audio", + "Show all files" : "Barcha fayllarni ko'rsatish", + "Group" : "Guruh", + "Team" : "Jamoa", + "Error while sharing file" : "Fayl almashishda xatolik yuz berdi", + "Error while parsing a PROPFIND error" : "PROPFIND xatosini tahlil qilishda xatolik yuz berdi", + "Please reload the page." : "Please reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Tasks" : "Tasks", + "Notes" : "Eslatmalar", + "Reports" : "Hisobotlar", + "Talk conversation for event" : "Tadbir uchun suhbat", + "Nextcloud Talk Federation was updated." : "Nextcloud Talkda jamg'arma yangilandi." +}, +"nplurals=1; plural=0;"); diff --git a/l10n/uz.json b/l10n/uz.json new file mode 100644 index 0000000..da8e731 --- /dev/null +++ b/l10n/uz.json @@ -0,0 +1,388 @@ +{ "translations": { + "a conversation" : "Suhbat", + "(Duration %s)" : "(Davomiylik %s)", + "You attended a call with {user1}" : "Siz {user1} bilan suhbatda ishtirok etdingiz", + "_%n guest_::_%n guests_" : ["%n mehmon"], + "You attended a call with {user1} and {user2}" : "Siz {user1} va {user2} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2} and {user3}" : "Siz {user1}, {user2} va {user3} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Siz {user1}, {user2}, {user3} va {user4} bilan suhbatda ishtirok etdingiz", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Siz {user1}, {user2}, {user3}, {user4} va {user5} bilan suhbatda ishtirok etdingiz", + "_%n other_::_%n others_" : ["%n boshqalar"], + "Talk" : "Gaplash", + "Incoming call" : "Kiruvchi qo'ng'iroq", + "Message deleted by author" : "Xabar muallif tomonidan o'chirildi", + "Deleted user" : "Deleted user", + "System" : "System", + "File not found" : "Fayl topilmadi", + "File is too big" : "File is too big", + "Invalid file provided" : "Invalid file provided", + "Invalid image" : "Invalid image", + "Unknown filetype" : "Unknown filetype", + "Description" : "Tavsif", + "Meeting" : "Uchrashuv", + "Accept" : "Qabul qiling", + "Decline" : "Rad etish", + "Reminder" : "Eslatma", + "Notification" : "Bildirishnomalar", + "error" : "Xatolik", + "Default" : "Standart", + "Other" : "Boshqa", + "Andorra" : "Andorra", + "United Arab Emirates" : "Birlashgan Arab Amirliklari", + "Afghanistan" : "Afg'oniston", + "Antigua and Barbuda" : "Antigua va Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albaniya", + "Armenia" : "Armaniston", + "Angola" : "Angola", + "Antarctica" : "Antarktida", + "Argentina" : "Argentina", + "American Samoa" : "Amerika Samoasi", + "Austria" : "Avstriya", + "Australia" : "Avstraliya", + "Aruba" : "Aruba", + "Åland Islands" : "Aland orollari", + "Azerbaijan" : "Ozarbayjon", + "Bosnia and Herzegovina" : "Bosnia and Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Belgiya", + "Burkina Faso" : "Burkina-Faso", + "Bulgaria" : "Bolgariya", + "Bahrain" : "Bahrayn", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Sent-Bartelemi", + "Bermuda" : "Bermud orollari", + "Brunei Darussalam" : "Bruney Darussalam", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius va Saba", + "Brazil" : "Braziliya", + "Bahamas" : "Bagama orollari", + "Bhutan" : "Butan", + "Bouvet Island" : "Bouvet Island", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Beliz", + "Canada" : "Kanada", + "Cocos (Keeling) Islands" : "Kokos (Kiling) orollari", + "Central African Republic" : "Markaziy Afrika Respublikasi", + "Congo" : "Kongo", + "Switzerland" : "Shveytsariya", + "Côte d'Ivoire" : "Kot-diuvar", + "Cook Islands" : "Kuk orollari", + "Chile" : "Chili", + "Cameroon" : "Kamerun", + "China" : "Xitoy", + "Colombia" : "Kolumbiya", + "Costa Rica" : "Kosta-Rika", + "Cuba" : "Kuba", + "Cabo Verde" : "Kabo Verde", + "Curaçao" : "Kyurasao", + "Christmas Island" : "Rojdestvo oroli", + "Cyprus" : "Kipr", + "Czechia" : "Chexiya", + "Germany" : "Germaniya", + "Djibouti" : "Djibouti", + "Denmark" : "Denmark", + "Dominica" : "Dominica", + "Dominican Republic" : "Dominika Respublikasi", + "Algeria" : "Jazoir", + "Ecuador" : "Ekvador", + "Estonia" : "Estoniya", + "Egypt" : "Misr", + "Western Sahara" : "G'arbiy Sahara", + "Eritrea" : "Eritreya", + "Spain" : "Ispaniya", + "Ethiopia" : "Efiopiya", + "Finland" : "Finlyandiya", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Folklend orollari (Malvin orollari)", + "Faroe Islands" : "Farer orollari", + "France" : "Fransiya", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Buyuk Britaniya va Shimoliy Irlandiya Birlashgan Qirolligi", + "Grenada" : "Grenada", + "Georgia" : "Gruziya", + "French Guiana" : "Fransuz Gvianasi", + "Guernsey" : "Guernsey", + "Ghana" : "Gana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Grenlandiya", + "Gambia" : "Gambiya", + "Guinea" : "Guinea", + "Guadeloupe" : "Gvadelupa", + "Equatorial Guinea" : "Ekvatorial Gvineya", + "Greece" : "Gretsiya", + "South Georgia and the South Sandwich Islands" : "Janubiy Jorjiya va Janubiy Sandvich orollari", + "Guatemala" : "Gvatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Gonkong", + "Heard Island and McDonald Islands" : "Heard oroli va Makdonald orollari", + "Honduras" : "Gonduras", + "Croatia" : "Xorvatiya", + "Haiti" : "Gaiti", + "Hungary" : "Vengriya", + "Indonesia" : "Indoneziya", + "Ireland" : "Irlandiya", + "Israel" : "Isroil", + "Isle of Man" : "Man oroli", + "India" : "Hindiston", + "British Indian Ocean Territory" : "Britaniya Hind okeani hududi", + "Iraq" : "Iroq", + "Iceland" : "Islandiya", + "Italy" : "Italiya", + "Jersey" : "Jersi", + "Jamaica" : "Yamayka", + "Jordan" : "Iordaniya", + "Japan" : "Yaponiya", + "Kenya" : "Keniya", + "Kyrgyzstan" : "Qirg'iziston", + "Cambodia" : "Kambodja", + "Kiribati" : "Kiribati", + "Comoros" : "Komor orollari", + "Saint Kitts and Nevis" : "Sent-Kitts va Nevis", + "Korea, Republic of" : "Korea Republikasi", + "Kuwait" : "Quvayt", + "Cayman Islands" : "Kayman orollari", + "Kazakhstan" : "Qozog'iston", + "Lao People's Democratic Republic" : "Laos Xalq Demokratik Respublikasi", + "Lebanon" : "Livan", + "Saint Lucia" : "Sent-Lyusiya", + "Liechtenstein" : "Lixtenshteyn", + "Sri Lanka" : "Shri-Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Litva", + "Luxembourg" : "Lyuksemburg", + "Latvia" : "Latviya", + "Libya" : "Libya", + "Morocco" : "Marokash", + "Monaco" : "Monako", + "Moldova, Republic of" : "Moldova Republikasi", + "Montenegro" : "Chernogoriya", + "Saint Martin (French part)" : "Sent-Martin (frantsuz qismi)", + "Madagascar" : "Madagaskar", + "Marshall Islands" : "Marshall orollari", + "North Macedonia" : "Shimoliy Makedoniya", + "Mali" : "Mali", + "Myanmar" : "Myanma", + "Mongolia" : "Mo'g'uliston", + "Macao" : "Makao", + "Northern Mariana Islands" : "Shimoliy Mariana orollari", + "Martinique" : "Martinika", + "Mauritania" : "Mavritaniya", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mavrikiy", + "Maldives" : "Maldiv orollari", + "Malawi" : "Malavi", + "Mexico" : "Meksika", + "Malaysia" : "Malayziya", + "Mozambique" : "Mozambik", + "Namibia" : "Namibiya", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Norfolk oroli", + "Nigeria" : "Nigeriya", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Niderlandiya", + "Norway" : "Norvegiya", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Ummon", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Fransuz Polineziyasi", + "Papua New Guinea" : "Papua-Yangi Gvineya", + "Philippines" : "Filippin", + "Pakistan" : "Pokiston", + "Poland" : "Polsha", + "Saint Pierre and Miquelon" : "Sent-Pyer va Mikelon", + "Pitcairn" : "Pitkern", + "Puerto Rico" : "Puerto-Riko", + "Palestine, State of" : "Falastin, Davlat", + "Portugal" : "Portugaliya", + "Palau" : "Palau", + "Paraguay" : "Paragvay", + "Qatar" : "Qatar", + "Réunion" : "Reunion", + "Romania" : "Ruminiya", + "Serbia" : "Serbiya", + "Russian Federation" : "Rossiya Federatsiyasi", + "Rwanda" : "Ruanda", + "Saudi Arabia" : "Saudiya Arabistoni", + "Solomon Islands" : "Solomon orollari", + "Seychelles" : "Seyshel orollari", + "Sudan" : "Sudan", + "Sweden" : "Shvetsiya", + "Singapore" : "Singapur", + "Saint Helena, Ascension and Tristan da Cunha" : "Avliyo Yelena, Ko'tarilish va Tristan da Kunya", + "Slovenia" : "Sloveniya", + "Svalbard and Jan Mayen" : "Svalbard va Yan Mayen", + "Slovakia" : "Slovakiya", + "Sierra Leone" : "Syerra-Leone", + "San Marino" : "San-Marino", + "Senegal" : "Senegal", + "Somalia" : "Somali", + "Suriname" : "Surinam", + "South Sudan" : "Janubiy Sudan", + "Sao Tome and Principe" : "San-Tome va Prinsipi", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint-Marten (Gollandiya qismi)", + "Syrian Arab Republic" : "Suriya Arab Respublikasi", + "Eswatini" : "Esvatin", + "Turks and Caicos Islands" : "Turks va Kaykos orollari", + "Chad" : "Chad", + "French Southern Territories" : "Frantsiyaning janubiy hududlari", + "Togo" : "Togo", + "Thailand" : "Thailand", + "Tajikistan" : "Tojikiston", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Timor-Leste", + "Turkmenistan" : "Turkmaniston", + "Tunisia" : "Tunis", + "Tonga" : "Tonga", + "Turkey" : "Turkiya", + "Trinidad and Tobago" : "Trinidad va Tobago", + "Tuvalu" : "Tuvalu", + "Taiwan, Province of China" : "Taiwan, Xitoy provintsiyasi", + "Tanzania, United Republic of" : "Tanzania, United Republic of", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Amerika Qo'shma Shtatlarining Kichik Chet orollari", + "United States of America" : "Amerika Qo'shma Shtatlari", + "Uruguay" : "Urugvay", + "Uzbekistan" : "O'zbekiston", + "Holy See" : "Muqaddas orollar", + "Saint Vincent and the Grenadines" : "Sent-Vinsent va Grenadin orollari", + "Viet Nam" : "Vyetnam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Uollis va Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yaman", + "Mayotte" : "Mayotte", + "South Africa" : "Janubiy Afrika", + "Zambia" : "Zambiya", + "Zimbabwe" : "Zimbabve", + "Federation" : "Jamg'arma", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "Jamg'armaning muloqot moduli yoqilgan bo'lsa, \"memcache.locking\" ni sozlash tavsiya etiladi.", + "The password is wrong. Try again." : "Parol noto'g'ri. Qayta urinib ko'ring.", + "Password" : "Password", + "Submit" : "Submit", + "Everyone" : "Everyone", + "Save changes" : "Save changes", + "Saving …" : "Saqlanmoqda...", + "Saved!" : "Saqlandi!", + "Name" : "Name", + "Enable Federation in Talk app" : "Talk ilovasida Jamg'armani yoqish", + "Permissions" : "Ruxsatnomalar", + "Off" : "Oʻchirilgan", + "Enable encryption" : "Enable encryption", + "Pending" : "Pending", + "Error" : "Xatolik", + "Never" : "Hech qachon", + "Language" : "Language", + "Status" : "Status", + "Yes" : "Yes", + "No" : "No", + "OK" : "Yaxshi", + "Checking …" : "Checking …", + "Federated user" : "Korporativ foydalanuvchi", + "Confirm" : "Confirm", + "Reset" : "Qayta tiklash", + "Cancel" : "Bekor qilish", + "Back" : "Orqaga", + "Now" : "Hozir", + "Loading …" : "Yuklanmoqda…", + "From" : "Dan", + "To" : "Gacha", + "Calendar" : "Calendar", + "Attendees" : "Ishtirokchilar", + "Save" : "Saqlash", + "No results" : "Natija yo'q", + "Done" : "Bajarildi", + "Grid view" : "To‘r ko‘rinishi", + "Reload" : "Qayta yuklash", + "Copy link" : "Havolani nusxalash", + "None" : "Yo'q", + "Favorite" : "Favorite", + "Date:" : "Sana:", + "Hide details" : "Tafsilotlarni yashirish", + "Show details" : "Tafsilotlarni ko'rsatish", + "Disable" : "Oʻchirish", + "Enable" : "Enable", + "Choose" : "Choose", + "Restricted" : "Cheklangan", + "Personal" : "Personal", + "Delete conversation" : "Delete conversation", + "_%n hour_::_%n hours_" : ["%n soat"], + "_%n day_::_%n days_" : ["%n kun"], + "_%n week_::_%n weeks_" : ["%n hafta"], + "Password protection" : "Parol himoyasi", + "Change password" : "Change password", + "Edit" : "Tahrirlash", + "Delete" : "O'chirish", + "Notifications" : "Notifications", + "Create a new conversation" : "Yangi suhbat yarating", + "Log in" : "Kirish", + "Remove from favorites" : "Sevimlilardan olib tashlang", + "Add to favorites" : "Sevimlilarga qo'shing", + "Home" : "Uy", + "Users" : "Users", + "Groups" : "Groups", + "Teams" : "Jamoalar", + "No search results" : "Qidiruv natijalari yo‘q", + "Select a device" : "Qurilmani tanlang", + "Test" : "Test", + "Upload" : "Yuklash", + "Files" : "Fayllar", + "24 hours" : "24 soat", + "Reply" : "Javob bering", + "More actions" : "Ko'proq harakatlar", + "Translate" : "Tarjima", + "Dismiss" : "Dismiss", + "Contact" : "Aloqa", + "Remove {fileName}" : " {fileName} ni o'chirish", + "Add emoji" : "Emoji qo'shing", + "Upload from device" : "Qurilmadan yuklash", + "Send" : "Send", + "Settings" : "Sozlamalar", + "Results" : "Natijalar", + "Remove participant" : "Ishtirokchini olib tashlash", + "Remove" : "O'chirish", + "Searching …" : "Qidirilmoqda …", + "Participants" : "Ishtirokchilar", + "Details" : "Details", + "Search in {name}" : " {name}ni qidirish", + "No results found" : "Hech qanday natija topilmadi", + "Load more results" : "Ko'proq natijalarni yuklang", + "Projects" : "Loyihalar", + "Select conversation" : "Suhbatni tanlang", + "Notification settings" : "Bildirishnoma sozlamalari", + "Privacy" : "Maxfiylik", + "Attachments folder" : "Qo'shimchalar papkasi", + "Search" : "Qidirish", + "Select a region" : "Hududni tanlang", + "User" : "Foydalanuvchi", + "Login" : "Login", + "Client ID" : "Mijoz identifikatori", + "Audio" : "Audio", + "Show all files" : "Barcha fayllarni ko'rsatish", + "Group" : "Guruh", + "Team" : "Jamoa", + "Error while sharing file" : "Fayl almashishda xatolik yuz berdi", + "Error while parsing a PROPFIND error" : "PROPFIND xatosini tahlil qilishda xatolik yuz berdi", + "Please reload the page." : "Please reload the page.", + "Do not disturb" : "Do not disturb", + "Away" : "Away", + "Tasks" : "Tasks", + "Notes" : "Eslatmalar", + "Reports" : "Hisobotlar", + "Talk conversation for event" : "Tadbir uchun suhbat", + "Nextcloud Talk Federation was updated." : "Nextcloud Talkda jamg'arma yangilandi." +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/vi.js b/l10n/vi.js new file mode 100644 index 0000000..f3b8f8b --- /dev/null +++ b/l10n/vi.js @@ -0,0 +1,950 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "Một cuộc đàm thoại", + "(Duration %s)" : "(Thời lượng %s)", + "You attended a call with {user1}" : "Bạn đã tham dự một cuộc gọi với {user1}", + "_%n guest_::_%n guests_" : ["%n khách"], + "You attended a call with {user1} and {user2}" : "Bạn đã tham dự một cuộc gọi với {user1} và {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2} và {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2}, {user3} và {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2}, {user3}, {user4} và {user5}", + "_%n other_::_%n others_" : ["%n khác"], + "{actor} invited you to {call}" : "{actor} mời bạn tham dự {call}", + "You were invited to a conversation or had a call" : "Bạn đã được mời vào cuộc trò chuyện hoặc có 1 cuộc gọi", + "Other activities" : "Hoạt động khác", + "Talk" : "Trò chuyện", + "Guest" : "Khách", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge và Safari hiện có thể được sử dụng để tham gia vào các cuộc gọi âm thanh và video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Giờ đây, bạn có thể thông báo cho tất cả những người tham gia bằng cách đăng \"@all\" vào cuộc trò chuyện", + "- With the \"arrow-up\" key you can repost your last message" : "- Với phím \"mũi tên lên\", bạn có thể đăng lại tin nhắn cuối cùng của mình", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "Talk hiện có thể có các lệnh, hãy gửi \"/ help\" dưới dạng tin nhắn trò chuyện nếu quản trị viên của bạn có định một số cấu hình", + "- With projects you can create quick links between conversations, files and other items" : "- Với các dự án, bạn có thể tạo liên kết nhanh giữa các cuộc hội thoại, tệp và các mục khác", + "- You can now mention guests in the chat" : "- Bây giờ bạn có thể đề cập đến khách trong cuộc trò chuyện", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "Các cuộc trò chuyện bây giờ có thể có sảnh đợi. Điều này sẽ cho phép người kiểm duyệt tham gia trò chuyện và gọi điện để chuẩn bị cuộc họp, trong khi người dùng và khách phải đợi", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Giờ đây, bạn có thể trực tiếp trả lời tin nhắn cho những người dùng khác để họ biết thêm ngữ cảnh về nội dung tin nhắn của bạn", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Tìm kiếm các cuộc trò chuyện và người tham gia giờ đây cũng sẽ lọc các cuộc trò chuyện hiện có của bạn, giúp việc tìm kiếm các cuộc trò chuyện trước đó dễ dàng hơn nhiều", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Giờ đây, bạn có thể thêm nhóm người dùng tùy chỉnh vào cuộc trò chuyện khi ứng dụng vòng kết nối được cài đặt", + "- Check out the new grid and call view" : "- Kiểm tra lưới mới và chế độ xem cuộc gọi", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Giờ đây, bạn có thể tải lên và kéo các tệp tin trực tiếp từ thiết bị của mình vào cuộc trò chuyện", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Các tệp được chia sẻ hiện được mở trực tiếp bên trong chế độ xem trò chuyện bằng ứng dụng trình xem", + "- You can now search for chats and messages in the unified search in the top bar" : "- Giờ đây, bạn có thể tìm kiếm các cuộc trò chuyện và tin nhắn trong tìm kiếm hợp nhất ở thanh trên cùng", + "- Spice up your messages with emojis from the emoji picker" : "- Thêm gia vị cho tin nhắn của bạn bằng các biểu tượng cảm xúc từ bộ chọn biểu tượng cảm xúc", + "- You can now change your camera and microphone while being in a call" : "- Giờ đây, bạn có thể thay đổi máy ảnh và micrô của mình khi đang gọi điện", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Cung cấp cho các cuộc trò chuyện của bạn một số ngữ cảnh kèm theo mô tả và mở nó ra để người dùng đã đăng nhập có thể tìm thấy nó và tự tham gia", + "- See a read status and send failed messages again" : "- Xem trạng thái đã đọc và gửi lại tin nhắn không thành công", + "- Raise your hand in a call with the R key" : "- Giơ tay của bạn trong cuộc họp bằng phím R", + "- Join the same conversation and call from multiple devices" : "- Tham gia cùng một cuộc trò chuyện và gọi nhau từ nhiều thiết bị khác nhau", + "- Send voice messages, share your location or contact details" : "- Gửi những tin nhắn thoại, chia sẻ vị trí hiện tại hoặc những thông tin liên hệ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Thêm nhiều nhóm vào cuộc trò chuyện và những thành viên mới của nhóm sẽ tự động được thêm như là những thành viên", + "Talk updates ✅" : "Cập nhật Talk ✅", + "{actor} created the conversation" : "{actor} đã tạo đàm thoại", + "You created the conversation" : "Bạn đã tạo đàm thoại", + "An administrator created the conversation" : "Quản trị viên đã tạo cuộc trò chuyện", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} đã đổi tên cuộc hội thoại từ \"%1$s\" thành \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Bạn đã đổi tên cuộc hội thoại từ \"%1$s\" thành \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Quản trị viên đã đổi tên cuộc trò chuyện từ \"%1$s\" thành \"%2$s\"", + "{actor} set the description" : "{actor} đổi thông tin mô tả", + "You set the description" : "Bạn đã đổi thông tin mô tả", + "An administrator set the description" : "Một quản trị viên đã đổi thông tin mô tả", + "{actor} removed the description" : "{actor} đã xóa miêu tả", + "You removed the description" : "Bạn đá xóa miêu tả", + "An administrator removed the description" : "Một quản trị viên đã xóa miêu tả", + "You started a call" : "Bạn đã thực hiện một cuộc gọi", + "{actor} started a call" : "{actor} đã thực hiện một cuộc gọi", + "{actor} joined the call" : "{actor} đã tham gia cuộc gọi", + "You joined the call" : "Bạn đã tham gia cuộc gọi", + "{actor} left the call" : "{actor} đã rời khỏi cuộc gọi", + "You left the call" : "Bạn đã rời khỏi cuộc gọi", + "{actor} unlocked the conversation" : "{actor} đã mở khóa cuộc trò chuyện", + "You unlocked the conversation" : "Bạn đá mở khóa cuộc trò chuyện", + "An administrator unlocked the conversation" : "Một quản trị viên đã mở khóa cuộc trò chuyện", + "{actor} locked the conversation" : "{actor} đã khóa cuộc trò chuyện", + "You locked the conversation" : "Bạn đá khóa cuộc trò chuyện", + "An administrator locked the conversation" : "Một quản trị viên đã khóa cuộc trò chuyện", + "{actor} limited the conversation to the current participants" : "{actor} đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "You limited the conversation to the current participants" : "Bạn đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "An administrator limited the conversation to the current participants" : "Một quản trị viên đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "{actor} opened the conversation to registered users" : "{actor} mở cuộc trò chuyện với người dùng đã đăng kí", + "You opened the conversation to registered users" : "Bạn đã mở cuộc trò chuyện với người dùng đã đăng kí", + "An administrator opened the conversation to registered users" : "Một quản trị viên đã mở cuộc trò chuyện với người dùng đã đăng kí", + "The conversation is now open to everyone" : "Cuộc trò chuyện được mở cho tất cả", + "{actor} opened the conversation to everyone" : "{actor} đã mở cuộc trò chuyện cho tất cả", + "You opened the conversation to everyone" : "Bạn đã mở cuộc trò chuyện cho tất cả", + "{actor} restricted the conversation to moderators" : "{actor} giới hạn cuộc trò chuyện với người kiểm duyệt", + "You restricted the conversation to moderators" : "Bạn giới hạn cuộc trò chuyện với người kiểm duyệt", + "{actor} allowed guests" : "{actor} đã cho phép khách mời", + "You allowed guests" : "Bạn đã cho phép khách mời", + "An administrator allowed guests" : "Quản trị viên đã cho phép khách", + "{actor} disallowed guests" : "{actor} đã không cho phép khách mời", + "You disallowed guests" : "Bạn đã không cho phép khách mời", + "An administrator disallowed guests" : "Quản trị viên đã không cho phép khách", + "{actor} set a password" : "{actor} đã đặt mật khẩu", + "You set a password" : "Bạn đã đặt một mật khẩu", + "An administrator set a password" : "Quản trị viên đã đặt mật khẩu", + "{actor} removed the password" : "{actor} đã xóa mật khẩu", + "You removed the password" : "Bạn đã xóa mật khẩu", + "An administrator removed the password" : "Quản trị viên đã xóa mật khẩu", + "{actor} added {user}" : "{actor} đã thêm {user}", + "You joined the conversation" : "Bạn đã tham gia cuộc trò chuyện", + "{actor} joined the conversation" : "{actor} đã tham gia cuộc trò chuyện", + "You added {user}" : "Bạn đã thêm {user}", + "{actor} added you" : "{actor} đã thêm bạn vào", + "An administrator added you" : "Quản trị viên đã thêm bạn", + "An administrator added {user}" : "Quản trị viên đã thêm {user}", + "You left the conversation" : "Bạn đã rời cuộc trò chuyện", + "{actor} left the conversation" : "{actor} đã rời khỏi cuộc hội thoại", + "{actor} removed {user}" : "{actor} đã mời {user} ra ngoài", + "You removed {user}" : "Bạn đã mời {user} ra ngoài. ", + "{actor} removed you" : "{actor} đã mời bạn ra ngoài.", + "An administrator removed you" : "Quản trị viên đã xóa bạn", + "An administrator removed {user}" : "Quản trị viên đã xóa {user}", + "{actor} added group {group}" : "{actor} đã thêm nhóm {group}", + "You added group {group}" : "Bạn đã thêm nhóm {group}", + "An administrator added group {group}" : "Một quản trị viên đã thêm nhóm {group}", + "{actor} removed group {group}" : "{actor} đã xóa nhóm {group}", + "You removed group {group}" : " Bạn đã xóa nhóm {group}", + "An administrator removed group {group}" : "Một quản trị viên đã xóa nhóm {group}", + "{actor} promoted {user} to moderator" : "{actor} đã giới thiệu {user} thành người kiểm duyệt", + "You promoted {user} to moderator" : "Bạn đã bầu chọn {user} là người kiểm duyệt", + "{actor} promoted you to moderator" : "{actor} đã bầu chọn cho bạn là người kiểm duyệt", + "An administrator promoted you to moderator" : "Quản trị viên đã thăng cấp bạn lên người kiểm duyệt", + "An administrator promoted {user} to moderator" : "Quản trị viên đã thăng cấp {user} thành quản trị viên", + "{actor} demoted {user} from moderator" : "{actor} phản đối {user} là người kiểm duyệt", + "You demoted {user} from moderator" : "Bạn đã phản đối {user} là người kiểm duyệt", + "{actor} demoted you from moderator" : "{actor} đã phản đối bạn là người kiểm duyệt", + "An administrator demoted you from moderator" : "Quản trị viên đã giáng cấp bạn khỏi người kiểm duyệt", + "An administrator demoted {user} from moderator" : "Quản trị viên đã giáng cấp {user} khỏi người kiểm duyệt", + "{actor} shared a file which is no longer available" : "{actor} đã chia sẻ một tệp không còn tồn tại", + "You shared a file which is no longer available" : "Bạn đã chia sẻ một tệp không còn tồn tại", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} đã thiết lập Matterbridge để đồng bộ hóa cuộc trò chuyện này với các cuộc trò chuyện khác.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Bạn thiết lập Matterbridge để đồng bộ hóa cuộc trò chuyện này với các cuộc trò chuyện khác.", + "{actor} updated the Matterbridge configuration" : "{actor} đã cập nhật cấu hình của Matterbridge", + "You updated the Matterbridge configuration" : "Bạn đã cập nhật cấu hình của Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} đã xóa cấu hình của Matterbridge", + "You removed the Matterbridge configuration" : "Bạn đã xóa cấu hình của Matterbridge", + "{actor} started Matterbridge" : "{actor} đã khởi động Matterbridge", + "You started Matterbridge" : "Bạn đã khởi động Matterbridge", + "{actor} stopped Matterbridge" : "{actor} đã dừng Matterbridge", + "You stopped Matterbridge" : "Bạn đã đừng Matterbridge", + "{actor} deleted a message" : "{actor} đã xóa tin nhắn", + "You deleted a message" : "Bạn đã xóa tin nhắn", + "{actor} cleared the history of the conversation" : "{actor} đã xóa lịch sử của cuộc gọi", + "You cleared the history of the conversation" : "Bạn đã xóa lịch sử của cuộc gọi", + "Message deleted by author" : "Tin nhắn đã xóa bởi tác giả", + "Message deleted by {actor}" : "Tin nhắn đã xóa bởi {actor}", + "Message deleted by you" : "Tin nhắn đá xóa bởi bạn", + "Administration" : "Quản trị viên", + "System" : "Hệ thống", + "%s (guest)" : "%s (khách mời)", + "Talk to %s" : "Trò chuyện với %s", + "File not found" : "Không tìm thấy tập tin", + "File is not shared, or shared but not with the user" : "Tệp này không được chia sẻ, hoạc được chia sẻ nhưng không phải với người dùng này", + "No account available to delete." : "Không có tài khoản nào để xóa", + "No image file provided" : "Không có tệp ảnh nào được cung cấp", + "File is too big" : "Tệp quá lớn", + "Invalid file provided" : "Tệp đã cung cấp không hợp lệ", + "Invalid image" : "Ảnh không hợp lệ", + "Unknown filetype" : "Loại tệp không xác định", + "Talk mentions" : "Đề cập trong cuộc trò chuyện", + "Say hi to your friends and colleagues!" : "Gửi lòi chào đến bạn bè và đồng nghiệp", + "No unread mentions" : "Không có đề cập nào chưa đọc", + "Call in progress" : "Cuộc gọi đang chờ", + "You were mentioned" : "Bạn đã được nhắc tới", + "Write to conversation" : "Viết vào cuộc trò chuyên", + "Writes event information into a conversation of your choice" : "Viết thông tin sự kiện vào một cuộc trò chuyện bạn chọn", + "Conversation invitation" : "Lời mời vào cuộc trò chuyện", + "Description" : "Mô tả", + "You can also dial-in via phone with the following details" : "Bạn cũng có thể quay số qua điện thoại với các thông tin chi tiết sau", + "Dial-in information" : "Thông tin quay số", + "Meeting ID" : "Id cuộc họp", + "Your PIN" : "Mã PIN của bạn", + "Meeting" : "Cuộc họp", + "Password request: %s" : "Yêu cầu mật khẩu: %s", + "Private conversation" : "Cuộc trò chuyện bí mật", + "Deleted user (%s)" : "Người dùng đã xóa (%s)", + "Dismiss notification" : "Bỏ qua thông báo ", + "Accept" : "Đồng ý", + "Decline" : "Từ chối", + "New message" : "Tin nhắn mới", + "Reminder" : "Lịch nhắc hẹn", + "Notification" : "Thông báo", + "{user} in {call}" : "{user} trong {call}", + "Deleted user in {call}" : "Người dùng đã xóa trong {call}", + "{guest} (guest) in {call}" : "{guest} (khách) trong {call}", + "Guest in {call}" : "Khách trong {call}", + "{user} sent you a private message" : "{user} đã gửi cho bạn một tin nhắn riêng", + "{user} sent a message in conversation {call}" : "{user} gửi tin nhắn trong cuộc trò chuyện{call}", + "A deleted user sent a message in conversation {call}" : "Một người dùng đã xóa gửi tin nhắn trong cuộc trò chuyện {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (khách) gửi tin nhắn trong cuộc trò chuyện {call}", + "A guest sent a message in conversation {call}" : "Khách gửi tin nhắn trong cuộc trò chuyện {call}", + "{user} replied to your private message" : "{user} phản hồi lại tin nhắn bí mật của bạn", + "{user} replied to your message in conversation {call}" : "{user} phản hồi lại tin nhắn của bạn trong cuộc trò chuyện {call}", + "A deleted user replied to your message in conversation {call}" : "Một người dùng bị xóa đã trả lời tin nhắn của bạn trong cuộc trò chuyện {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (khách) đã phản hồi tin nhắn của bạn trong cuộc trò chuyện {call}", + "A guest replied to your message in conversation {call}" : "Một khách đã trả lời tin nhắn của bạn trong cuộc trò chuyện {call}", + "{user} mentioned you in a private conversation" : "{user} đã đề cập đến bạn trong cuộc trò chuyện riêng", + "{user} mentioned you in conversation {call}" : "{user} nhắc đến bạn trong cuộc trò chuyện {call}", + "A deleted user mentioned you in conversation {call}" : "Một người dùng bị xóa đã đề cập đến bạn trong cuộc trò chuyện {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (khách) đã đề cập đến bạn trong cuộc trò chuyện {call}", + "A guest mentioned you in conversation {call}" : "Một khách đã đề cập đến bạn trong cuộc trò chuyện {call}", + "View chat" : "Xem trò chuyện", + "{user} invited you to a group conversation: {call}" : "{user} đã mời bạn tham gia cuộc trò chuyện nhóm: {call}", + "Join call" : "Tham gia cuộc gọi", + "Answer call" : "Trả lời cuộc gọi", + "{user} would like to talk with you" : "{user} muốn nói chuyện với bạn", + "Call back" : "Gọi lại", + "You missed a call from {user}" : "Bạn đã lỡ cuộc gọi từ {user}", + "A group call has started in {call}" : "Một cuộc gọi nhóm đã được thực hiện trong {call}", + "You missed a group call in {call}" : "Bạn đã lỡ cuộc gọi nhóm trong {call}", + "{email} is requesting the password to access {file}" : "{email} đang yêu cầu mật khẩu để truy cập {file}", + "{email} tried to request the password to access {file}" : "{email} đã cố gắng yêu cầu mật khẩu để truy cập {file}", + "Someone is requesting the password to access {file}" : "Ai đó đang yêu cầu mật khẩu để truy cập {file}", + "Someone tried to request the password to access {file}" : "Ai đó đã cố gắng yêu cầu mật khẩu để truy cập {file}", + "Open settings" : "Mở thiết đặt", + "The hosted signaling server is now configured and will be used." : "Máy chủ báo hiệu hiện đã được định cấu hình và sẽ được sử dụng", + "The hosted signaling server was removed and will not be used anymore." : "Máy chủ báo hiệu đã bị xóa và sẽ không được sử dụng nữa.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Tài khoản máy chủ báo hiệu đã thay đổi trạng thái từ \"{oldstatus}\" thành \"{newstatus}\".", + "error" : "Lỗi", + "Default" : "Mặc định", + "Presentation" : "Buổi thuyết trình", + "Conversations" : "Đàm thoại", + "{user}" : "{user}", + "Messages" : "Thông điệp", + "{user} in {conversation}" : "{user} trong {conversation}", + "Messages in other conversations" : "Tin nhắn trong cuộc trò chuyện khác", + "Other" : "Khác", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Không thể yêu cầu dùng thử vì không thể truy cập được máy chủ dùng thử. Vui lòng thử lại sau.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Có vấn đề với xác thực của phiên bản này. Có thể không thể truy cập từ bên ngoài để xác minh URL của nó.", + "Something unexpected happened." : "Một điều gì đó không mong muốn đã xảy ra.", + "The URL is invalid." : "URL không hợp lệ.", + "An HTTPS URL is required." : "URL HTTPS là bắt buộc.", + "The email address is invalid." : "Địa chỉ email không hợp lệ.", + "The language is invalid." : "Ngôn ngữ không hợp lệ.", + "The country is invalid." : "Quốc gia không hợp lệ.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Có vấn đề với yêu cầu của bản dùng thử. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin", + "Too many requests are send from your servers address. Please try again later." : "Quá nhiều yêu cầu được gửi từ địa chỉ máy chủ của bạn. Vui lòng thử lại sau.", + "There is already a trial registered for this Nextcloud instance." : "Đã có một bản dùng thử được đăng ký cho phiên bản vWorkspace này.", + "Something unexpected happened. Please try again later." : "Một điều gì đó không mong muốn đã xảy ra. Vui lòng thử lại sau.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Không thể yêu cầu dùng thử vì máy chủ dùng thử hoạt động sai. Vui lòng thử lại sau.", + "Trial requested but failed to get account information. Please check back later." : "Đã yêu cầu dùng thử nhưng không lấy được thông tin tài khoản. Vui lòng kiểm tra lại sau.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Đã xảy ra sự cố với việc xác thực yêu cầu này. Có thể không thể truy cập từ bên ngoài để xác minh URL của nó.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Không tìm nạp được thông tin tài khoản vì máy chủ dùng thử hoạt động sai. Vui lòng kiểm tra lại sau.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Đã xảy ra sự cố khi tìm nạp thông tin tài khoản. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin.", + "There is no such account registered." : "Không có tài khoản như vậy được đăng ký.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Không thể tìm nạp thông tin tài khoản vì không thể truy cập được máy chủ dùng thử. Vui lòng kiểm tra lại sau.", + "Deleting the hosted signaling server account failed. Please check back later." : "Không xóa được tài khoản máy chủ báo hiệu. Vui lòng kiểm tra lại sau.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Không thể xóa tài khoản vì máy chủ dùng thử hoạt động sai. Vui lòng kiểm tra lại sau.", + "There is a problem with deleting the account. Please check your logs for further information." : "Đã xảy ra sự cố khi xóa tài khoản. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin.", + "Too many requests are sent from your servers address. Please try again later." : "Quá nhiều yêu cầu được gửi từ địa chỉ máy chủ của bạn. Vui lòng thử lại sau.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Không thể xóa tài khoản vì không thể truy cập được máy chủ dùng thử. Vui lòng kiểm tra lại sau.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Các Tiểu vương quốc Ả Rập Thống nhất", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua và Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Nam Cực", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Áo", + "Australia" : "Úc", + "Aruba" : "Aruba", + "Åland Islands" : "Quần đảo Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia và Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bỉ", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius và Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Đảo Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Quần đảo Cocos (Keeling)", + "Central African Republic" : "Cộng hòa Trung Phi", + "Congo" : "Congo", + "Switzerland" : "Thụy Sĩ", + "Côte d'Ivoire" : "Bờ Biển Ngà", + "Cook Islands" : "Quần đảo Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "Trung Quốc", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Đảo Christmas", + "Cyprus" : "Síp", + "Czechia" : "Séc", + "Germany" : "Đức", + "Djibouti" : "Djibouti", + "Denmark" : "Đan Mạch", + "Dominica" : "Dominica", + "Dominican Republic" : "Cộng hòa Dominica", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Ai Cập", + "Western Sahara" : "Tây Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Tây Ban Nha", + "Ethiopia" : "Ethiopia", + "Finland" : "Phần Lan", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Quần đảo Falkland (Malvinas)", + "Faroe Islands" : "Quần đảo Faroe", + "France" : "Pháp", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Vương quốc Anh", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana thuộc Pháp", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Xích Đạo Guinea", + "Greece" : "Hy Lạp", + "South Georgia and the South Sandwich Islands" : "Nam Georgia và Quần đảo Nam Sandwich", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hồng Kông", + "Heard Island and McDonald Islands" : "Đảo Heard và QĐ McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Đảo Man", + "India" : "Ấn Độ", + "British Indian Ocean Territory" : "Lãnh thổ Ấn Độ Dương thuộc Anh", + "Iraq" : "Iraq", + "Iceland" : "Iceland", + "Italy" : "Ý", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Nhật Bản", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Campuchia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts và Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Quần đảo Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lào", + "Lebanon" : "Li-băng", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Ma-rốc", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (phần thuộc Pháp)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Quần đảo Marshall", + "North Macedonia" : "Bắc Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mông Cổ", + "Macao" : "Ma Cao", + "Northern Mariana Islands" : "Quần đảo Bắc Mariana", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Đảo Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Hà Lan", + "Norway" : "Na Uy", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polynesia thuộc Pháp", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Ba Lan", + "Saint Pierre and Miquelon" : "Saint Pierre và Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine", + "Portugal" : "Bồ Đào Nha", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Nga", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Ả Rập Xê Út", + "Solomon Islands" : "Quần đảo Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Thụy Điển", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension và Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard và Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Nam Sudan", + "Sao Tome and Principe" : "Sao Tome và Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (phần thuộc Hà Lan)", + "Syrian Arab Republic" : "Cộng hòa Ả Rập Syria", + "Turks and Caicos Islands" : "Quần đảo Turks và Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Vùng đất phía Nam và châu Nam Cực thuộc Pháp", + "Togo" : "Togo", + "Thailand" : "Thái Lan", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Đông Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Thổ Nhĩ Kỳ", + "Trinidad and Tobago" : "Trinidad và Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Các đảo nhỏ xa trung tâm Hoa Kỳ", + "United States of America" : "Hoa Kỳ", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Tòa Thánh", + "Saint Vincent and the Grenadines" : "Saint Vincent và Grenadines", + "Viet Nam" : "Việt Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis và Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Nam Phi", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Kết nối Liên Bang ", + "High-performance backend" : "Backend hiệu suất cao", + "Error: Server did not respond with proper JSON" : "Lỗi: Máy chủ không phản hồi với JSON thích hợp", + "Error: Server responded with: {error}" : "Lỗi: Máy chủ phản hồi: {error}", + "Error: Unknown error occurred" : "Lỗi: Đã xảy ra lỗi không xác định", + "SIP configuration" : "Cấu hình SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Định dạng ngày không hợp lệ phải là YYYY-MM-DD", + "Conversation not found" : "Không tìm thấy cuộc hội thoại", + "Chat, video & audio-conferencing using WebRTC" : "Trò chuyện, hội thảo âm thanh và video bằng WebRTC", + "Leave call" : "Rời khỏi cuộc gọi", + "Navigating away from the page will leave the call in {conversation}" : "Điều hướng khỏi trang sẽ rời khỏi cuộc gọi trong {cuộc trò chuyện}", + "Stay in call" : "Giữ cuộc gọi", + "Discuss this file" : "Thảo luận về tệp này", + "Share this file with others to discuss it" : "Chia sẻ tệp này với những người khác để thảo luận về nó", + "Share this file" : "Chia sẻ tệp này", + "Join conversation" : "Tham gia cuộc trò chuyện", + "The password is wrong. Try again." : "Sai mật khẩu. Thử lại.", + "Password" : "Mật khẩu", + "Submit" : "Gửi đi", + "Error requesting the password." : "Lỗi khi đang yêu cầu mật khẩu.", + "Request password" : "Yêu cầu mật khẩu", + "This conversation has ended" : "Cuộc trò chuyện này đã kết thúc", + "Everyone" : "Tất cả mọi người", + "Users and moderators" : "Người dùng và người kiểm duyệt", + "Moderators only" : "Chỉ người kiểm duyệt", + "Save changes" : "Lưu thay đổi", + "Saving …" : "Đang lưu ...", + "Saved!" : "Đã lưu!", + "Limit to groups" : "Giới hạn nhóm", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Khi ít nhất một nhóm được chọn, chỉ những người thuộc các nhóm được liệt kê mới có thể tham gia cuộc trò chuyện.", + "Guests can still join public conversations." : "Khách vẫn có thể tham gia những cuộc trò chuyện công khai", + "Limit using Talk" : "Hạn chế sử dụng Talk", + "Limit creating a public and group conversation" : "Hạn chế tạo cuộc trò chuyện công khai và nhóm", + "Limit creating conversations" : "Hạn chế tạo cuộc trò chuyện", + "Limit starting a call" : "Hạn chế bắt đầu cuộc gọi", + "Limit starting calls" : "Hạn chế bắt đầu cuộc gọi", + "When a call has started, everyone with access to the conversation can join the call." : "Khi cuộc gọi bắt đầu, mọi người có quyền truy cập vào cuộc trò chuyện đều có thể tham gia cuộc gọi.", + "Enabled" : "Đá kích hoạt", + "Disabled" : "Tắt", + "State" : "Trạng thái", + "Name" : "Tên", + "All messages" : "Tất cả tin nhắn", + "Off" : "Tắt", + "General settings" : "Cài đặt chung", + "Default notification settings" : "Cài đặt thông báo mặc định", + "Default group notification" : "Thông báo nhóm mặc định", + "Default group notification for new groups" : "Thông báo nhóm mặc định cho các nhóm mới", + "Integration into other apps" : "Tích hợp vào các ứng dụng khác", + "Allow conversations on files" : "Cho phép các cuộc trò chuyện trên tệp", + "Allow conversations on public shares for files" : "Cho phép các cuộc trò chuyện chia sẻ công khai đối với các tệp", + "Enable encryption" : "Bật mã hóa", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Bằng cách nhấp vào nút phía trên, thông tin trong biểu mẫu sẽ được gửi đến máy chủ của Struktur AG. Bạn có thể tìm thêm thông tin tại {linkstart} spreed.eu {linkend}.", + "Pending" : "Đang dừng", + "Error" : "Lỗi", + "Blocked" : "Bị chặn", + "Active" : "Hoạt động", + "Expired" : "Đã hết hạn", + "Never" : "Không bao giờ", + "The trial could not be requested. Please try again later." : "Không thể yêu cầu thử nghiệm. Vui lòng thử lại sau.", + "The account could not be deleted. Please try again later." : "Không thể xóa tài khoản. Vui lòng thử lại sau.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Đối tác Struktur AG của chúng tôi cung cấp một dịch vụ mà một máy chủ báo hiệu được lưu trữ có thể được yêu cầu. Đối với điều này, bạn chỉ cần điền vào biểu mẫu bên dưới và vWorkspace của bạn sẽ yêu cầu nó. Sau khi máy chủ được thiết lập cho bạn, thông tin đăng nhập sẽ tự động được điền. Điều này sẽ ghi đè cài đặt máy chủ báo hiệu hiện có.", + "URL of this Nextcloud instance" : "URL của phiên bản vWorkspace này", + "Full name of the user requesting the trial" : "Tên đầy đủ của người dùng yêu cầu bản dùng thử", + "Language" : "Ngôn ngữ", + "Country" : "Quốc gia", + "Request signaling server trial" : "Yêu cầu dùng thử máy chủ báo hiệu", + "You can see the current status of your hosted signaling server in the following table." : "Bạn có thể xem trạng thái hiện tại của máy chủ báo hiệu trong bảng sau.", + "Status" : "Trạng thái", + "Created at" : "Được tạo ra vào lúc", + "Expires at" : "Hết hạn vào", + "Limits" : "Giới hạn", + "Yes" : "Có", + "No" : "Không", + "Delete the signaling server account" : "Xóa tài khoản máy chủ báo hiệu", + "_%n user_::_%n users_" : ["%n người dùng"], + "Installed version: {version}" : "Phiên bản đã cài đặt: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Nhị phân Matterbridge không được tìm thấy hoặc không thể được thực thi", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Bạn cũng có thể đặt đường dẫn đến nhị phân Matterbridge theo cách thủ công thông qua cấu hình. Kiểm tra {linkstart} tài liệu tích hợp Matterbridge {linkend} để biết thêm thông tin.", + "Downloading …" : "Đang tải ...", + "Install Talk Matterbridge" : "Cài đặt Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Không thực thi được mã nhị phân Matterbridge.", + "Matterbridge integration" : "Tích hợp Matterbridge ", + "Enable Matterbridge integration" : "Bật tích hợp Matterbridge", + "Status: Checking connection" : "Trạng thái: Đang kiểm tra kết nối", + "OK: Running version: {version}" : "OK: Phiên bản đang chạy: {version}", + "Validate SSL certificate" : "Xác thực chứng chỉ SSL", + "Delete this server" : "Xóa máy chủ này", + "Test this server" : "Kiểm tra máy chủ này", + "Shared secret" : "Chia sẽ mật khẩu", + "Restrict SIP configuration" : "Hạn chế cấu hình SIP", + "Enable SIP configuration" : "Bật cấu hình SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Chỉ những người dùng thuộc các nhóm sau mới có thể bật SIP trong các cuộc trò chuyện mà họ kiểm duyệt", + "Phone number (Country)" : "Số điện thoại (Quốc gia)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Thông tin này được gửi trong thư điện tử mời cũng như hiển thị trong thanh bên cho tất cả những người tham gia.", + "High-performance backend URL" : "URL backend hiệu suất cao", + "STUN server URL" : "URL máy chủ STUN", + "STUN servers" : "Máy chủ STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Máy chủ STUN được sử dụng để xác định địa chỉ IP công khai của người tham gia phía sau bộ định tuyến.", + "{schema} scheme must be used with a domain" : "Lược đồ {schema} phải được sử dụng với một miền", + "{option1} and {option2}" : "{option1} và {option2}", + "{option} only" : "Chỉ {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Các ứng viên ICE thành công do máy chủ TURN trả về", + "Error: No working ICE candidates returned by the TURN server" : "Lỗi: Không có ứng cử viên ICE nào đang hoạt động được máy chủ TURN trả về", + "Testing whether the TURN server returns ICE candidates" : "Kiểm tra xem máy chủ TURN có trả về các ứng viên ICE hay không", + "TURN server schemes" : "Lược đồ máy chủ TURN", + "TURN server URL" : "URL máy chủ TURN", + "TURN server secret" : "Bảo mật máy chủ TURN", + "TURN server protocols" : "Giao thức máy chủ TURN", + "TURN servers" : "Máy chủ TURN", + "OK" : "OK", + "Federated user" : "Người dùng được liên kết", + "Confirm" : "Xác nhận", + "Reset" : "Đặt lại", + "Cancel" : "Hủy", + "Back" : "Quay lại", + "Add participant \"{user}\"" : "Thêm người tham gia \"{user}\"", + "Loading …" : "Đang tải …", + "From" : "Từ", + "To" : "Tới", + "Calendar" : "Lịch", + "Attendees" : "Người tham gia", + "Save" : "Lưu", + "Search participants" : "Tìm kiếm người tham gia", + "No results" : "Không có kết quả", + "Done" : "Hoàn thành", + "Raise hand" : "Giơ tay", + "Lower hand" : "Đặt tay xuống", + "Speaker view" : "Chế độ xem người gọi điện", + "Grid view" : "Xem dạng Lưới", + "This conversation is read-only" : "Cuộc trò chuyện này ở chế độ chỉ đọc", + "Reload" : "Tải lại", + "{nickName} raised their hand." : "{nickName} giơ tay.", + "A participant raised their hand." : "Một người tham gia giơ tay.", + "Collapse stripe" : "Thu gọi sọc", + "Expand stripe" : "Mở rộng sọc", + "Previous page of videos" : "Trang trước của video", + "Next page of videos" : "Trang tiếp theo của video", + "Connecting …" : "Đang kết nối …", + "Waiting for others to join the call …" : "Đang chờ người khác tham gia cuộc gọi…", + "You can invite others in the participant tab of the sidebar" : "Bạn có thể mời những người khác trong tab người tham gia của thanh bên", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Bạn có thể mời những người khác trong tab người tham gia của thanh bên hoặc chia sẻ liên kết này để mời những người khác!", + "Share this link to invite others!" : "Chia sẻ liên kết này để mời những người khác!", + "Copy link" : "Sao chép liên kết", + "Mute audio" : "Tắt âm thanh", + "Unmute audio" : "Bật âm thanh", + "None" : "Không có", + "Access to camera was denied" : "Quyền truy cập vào máy ảnh đã bị từ chối", + "Error while accessing camera" : "Lỗi khi truy cập máy ảnh", + "You have been muted by a moderator" : "Bạn đã bị người kiểm duyệt tắt tiếng", + "Disable video" : "Tắt Video", + "Enable video" : "Bật Video", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Bật video. Kết nối của bạn sẽ bị gián đoạn trong thời gian ngắn khi bật video lần đầu tiên", + "You" : "Bạn", + "Mute" : "Tắt tiếng", + "Show screen" : "Hiện màn hình", + "Stop following" : "Ngừng theo dõi", + "Collapse" : "Thu gọn", + "Expand" : "Mở rộng", + "You need to be logged in to upload files" : "Bạn cần đăng nhập để tải tệp lên", + "Drop your files to upload" : "Thả tệp của bạn để tải lên", + "Conversation messages" : "Tin nhắn đàm thoại", + "Scroll to bottom" : "Cuộn xuống dưới cùng", + "Post message" : "Đăng tin nhắn", + "Favorite" : "Ưa thích", + "Date:" : "Ngày:", + "Hide details" : "Ẩn chi tiết", + "Show details" : "Hiển thị chi tiết", + "Error while updating conversation description" : "Lỗi khi cập nhật mô tả cuộc trò chuyện", + "Edit conversation description" : "Chỉnh sửa mô tả cuộc trò chuyện", + "Disable" : "Tắt", + "Enable" : "Bật", + "Choose" : "Chọn", + "The file must be a PNG or JPG" : "Tệp phải là PNG hoặc JPG", + "Restricted" : "Bị giới hạn", + "Conversation settings" : "Cài đặt cuộc trò chuyện", + "Personal" : "Cá nhân", + "Danger zone" : "Khu vực nguy hiểm", + "Leave conversation" : "Rời khỏi cuộc đàm thoại", + "Delete conversation" : "Xóa cuộc trò chuyện", + "Do you really want to delete \"{displayName}\"?" : "Bạn có thực sự muốn xóa \"{displayName}\" không?", + "Error while deleting conversation" : "Lỗi khi xóa cuộc trò chuyện", + "Be careful, these actions cannot be undone." : "Hãy cẩn thận, không thể hoàn tác những hành động này.", + "Password protection" : "Password protection", + "Set a password" : "Đặt mật khẩu", + "Save password" : "Lưu mật khẩu", + "Resend invitations" : "Gửi lại lời mời", + "Error occurred when opening or limiting the conversation" : "Đã xảy ra lỗi khi mở hoặc giới hạn cuộc trò chuyện", + "Start time has been updated" : "Thời gian bắt đầu đã được cập nhật", + "Error occurred while updating start time" : "Đã xảy ra lỗi khi cập nhật thời gian bắt đầu", + "Meeting start time" : "Thời gian bắt đầu cuộc họp", + "Start time (optional)" : "Thời gian bắt đầu (tùy chọn)", + "Error occurred when locking the conversation" : "Đã xảy ra lỗi khi khóa cuộc trò chuyện", + "Error occurred when unlocking the conversation" : "Đã xảy ra lỗi khi mở khóa cuộc trò chuyện", + "Lock conversation" : "Khóa cuộc trò chuyện", + "This will also terminate the ongoing call." : "Điều này cũng sẽ kết thúc cuộc gọi đang diễn ra.", + "Edit" : "Chỉnh sửa", + "More information" : "Thêm thông tin", + "Delete" : "Xóa", + "Add new bridged channel to current conversation" : "Thêm kênh bắc cầu mới vào cuộc trò chuyện hiện tại", + "unknown state" : "trạng thái không xác định", + "running" : "đang chạy", + "not running, check Matterbridge log" : "không chạy, kiểm tra nhật kí Matterbridge", + "not running" : "không chạy", + "Bridge saved" : "Cầu nối đã được lưu", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Bạn có thể kết nối các kênh từ các hệ thống nhắn tin tức thời khác nhau với Matterbridge.", + "More info on Matterbridge" : "Thông tin thêm về Matterbridge", + "Enable bridge" : "Bật cầu nối", + "Show Matterbridge log" : "Hiển thị nhật kí Matterbridge", + "Notifications" : "Thông báo", + "SIP dial-in is now enabled" : "Quay số SIP hiện đã được bật", + "SIP dial-in is now disabled" : "Tính năng quay số SIP hiện đã bị tắt", + "Error occurred when enabling SIP dial-in" : "Đã xảy ra lỗi khi bật quay số SIP", + "Error occurred when disabling SIP dial-in" : "Đã xảy ra lỗi khi tắt quay số SIP", + "Join" : "Tham gia", + "Error while creating the conversation" : "Lỗi khi tạo cuộc trò chuyện", + "Create conversation" : "Tạo cuộc trò chuyện", + "Log in" : "Đăng nhập", + "Mark as read" : "Đánh dấu đã đọc", + "Mark as unread" : "Đánh dấu là chưa đọc", + "Remove from favorites" : "Xóa khỏi ưa thích", + "Add to favorites" : "Thêm vào ưa thích", + "You need to promote a new moderator before you can leave the conversation." : "Bạn cần chọn người kiểm duyệt mới trước khi có thể rời khỏi cuộc trò chuyện.", + "Conversation actions" : "Hoạt động cuộc trò chuyện", + "Home" : "Trang nhà", + "Alphabetically" : "Theo bảng chữ cái", + "No conversations found" : "Không tìm thấy cuộc trò chuyện nào", + "An error occurred while performing the search" : "Đã xảy ra lỗi khi thực hiện tìm kiếm", + "Conversation list" : "Danh sách cuộc trò chuyện", + "Unread messages" : "Tin nhắn chưa đọc", + "Clear filter" : "Xóa bộ lọc", + "Users" : "Người dùng", + "Groups" : "Nhóm", + "Other sources" : "Những nguồn khác", + "Open conversations" : "Mở cuộc trò chuyện", + "No search results" : "Không có kết quả tìm kiếm", + "Users and groups" : "Người dùng và nhóm", + "You are currently waiting in the lobby" : "Bạn hiện đang đợi ở sảnh đợi", + "Select microphone" : "Chọn micrô", + "No microphone available" : "Không có micrô", + "Select camera" : "Chọn camera", + "No camera available" : "Không có camera khả dụng", + "No audio" : "Không có âm thanh", + "No camera" : "Không có máy ảnh", + "Calls are not supported in your browser" : "Cuộc gọi không được hỗ trợ trong trình duyệt của bạn", + "Access to microphone is only possible with HTTPS" : "Chỉ có thể truy cập vào micrô với HTTPS", + "Access to microphone was denied" : "Quyền truy cập vào micrô đã bị từ chối", + "Error while accessing microphone" : "Lỗi khi truy cập micrô", + "Access to camera is only possible with HTTPS" : "Chỉ có thể truy cập vào camera với HTTPS", + "Invalid path selected" : "Đường dẫn đã chọn không hợp lệ", + "Upload" : "Tải lên", + "Files" : "Tệp", + "24 hours" : "24 tiếng", + "Reply" : "Trả l", + "More actions" : "Nhiều hành động hơn", + "Set reminder" : "Thiết lập nhắc nhở", + "Reply privately" : "Trả lời riêng tư", + "Copy message link" : "Sao chép liên kết tin nhắn", + "Go to file" : "Tới tập tin", + "Translate" : "Dịch", + "Dismiss" : "Bỏ qua", + "Message read by everyone who shares their reading status" : "Tin nhắn được đọc bởi tất cả những người chia sẻ trạng thái đọc của họ", + "Message sent" : "Tin nhắn đã gửi", + "Deleting message" : "Đang xóa tin nhắn", + "Message deleted successfully" : "Đã xóa tin nhắn thành công", + "Message could not be deleted because it is too old" : "Không thể xóa tin nhắn vì nó quá cũ", + "Only normal chat messages can be deleted" : "Chỉ những tin nhắn trò chuyện bình thường mới có thể bị xóa", + "An error occurred while deleting the message" : "Đã xảy ra lỗi khi xóa tin nhắn", + "Contact" : "Liên hệ", + "{stack} in {board}" : "{stack} trong {board}", + "Deck Card" : "Thẻ bài", + "Sending message" : "Đang gửi tin nhắn", + "Failed to send the message. Click to try again" : "Không gửi được tin nhắn. Bấm để thử lại", + "Not enough free space to upload file" : "Không đủ dung lượng trống để tải tệp lên", + "No messages" : "Không có tin nhắn", + "Create a new group conversation" : "Tạo một cuộc trò chuyện nhóm mới", + "Add participants" : "Thêm người tham gia", + "Allow guests to join via link" : "Cho phép khách tham gia qua liên kết", + "This conversation has been locked" : "Cuộc trò chuyện này đã bị khóa", + "No permission to post messages in this conversation" : "Không có quyền đăng tin nhắn trong cuộc trò chuyện này", + "Joining conversation …" : "Tham gia cuộc trò chuyện …", + "Send message" : "Gửi thông điệp", + "File to share" : "Tệp để chia sẻ", + "Add emoji" : "Thêm biểu tượng cảm xúc", + "Share from Files" : "Chia sẻ từ Thư mục", + "Share files to the conversation" : "Chia sẻ tệp với cuộc trò chuyện", + "New file" : "Tập tin mới", + "Blank" : "‎Trống‎", + "Add more files" : "Thêm nhiều tập tin", + "Send" : "Gửi", + "Settings" : "Thiết lập", + "Results" : "Kết quả", + "Disable lobby" : "Vô hiệu hóa sảnh đợi", + "Settings for participant \"{user}\"" : "Cài đặt cho người tham gia \"{user}\"", + "Participant \"{user}\"" : "Người tham gia \"{user}\"", + "moderator" : "Người kiểm duyệt", + "guest" : "khách", + "Raised their hand" : "Giơ tay của họ", + "Joined with video" : "Đã tham gia qua video", + "Joined via phone" : "Đã tham gia qua điện thoại", + "Joined with audio" : "Đã tham gia qua audio", + "Remove participant" : "Xóa người tham gia", + "Dial-in PIN" : "Mã PIN quay số", + "Demote from moderator" : "Hạ uy tín từ người kiểm duyệt", + "Promote to moderator" : "Giới thiệu người kiểm duyệt", + "Resend invitation" : "Gửi lại lời mời", + "Remove" : "Xoá", + "Add users or groups" : "Add users or groups", + "Add users" : "Thêm người dùng", + "Add groups" : "Thêm nhóm", + "Add other sources" : "Thêm các nguồn khác", + "Add emails" : "Thêm email", + "Integrations" : "Các bộ tích hợp", + "Searching …" : "Đang tìm kiếm ...", + "Search for more users" : "Tìm kiếm thêm người dùng", + "Search or add participants" : "Tìm kiếm hoặc thêm người dùng", + "An error occurred while adding the participants" : "Đã xảy ra lỗi khi thêm người tham gia", + "Participants" : "Người tham gia", + "Chat" : "Trò chuyện", + "Details" : "Chi tiết", + "No results found" : "Không tìm thấy kết quả", + "Load more results" : "Tải thêm kết quả", + "Projects" : "Dự án", + "Link to a conversation" : "Liên kết đến một cuộc trò chuyện", + "Search conversations or users" : "Tìm kiếm cuộc trò chuyện hoặc người dùng", + "Select conversation" : "Chọn cuộc trò chuyện", + "Edit display name" : "Chỉnh sửa tên hiển thị", + "Notification settings" : "Cài đặt thông báo", + "Default language" : "Ngôn ngữ mặc định", + "Select location for attachments" : "Chọn vị trí cho tệp đính kèm", + "Error while setting attachment folder" : "Lỗi khi cấu hình thư mục tệp đính kèm", + "Error while setting read status privacy" : "Lỗi khi đặt quyền riêng tư của trạng thái đã đọc", + "Privacy" : "Bảo mật", + "Attachments folder" : "Thư mục đính kèm", + "Search" : "Tìm", + "Focus the chat input" : "Tập trung vào đầu vào trò chuyện", + "Unfocus the chat input to use shortcuts" : "Bỏ tập trung vào đầu vào trò chuyện để sử dụng các phím tắt", + "Shortcuts while in a call" : "Các phím tắt khi đang gọi điện", + "Microphone on and off" : "Bật và tắt micrô", + "Raise or lower hand" : "Giơ tay hoặc hạ tay", + "Push to talk or push to mute" : "Nhấn để nói hoặc tắt tiếng", + "Start call" : "Bắt đầu cuộc gọi", + "You will be able to join the call only after a moderator starts it." : "Bạn sẽ chỉ có thể tham gia cuộc gọi sau khi người kiểm duyệt bắt đầu cuộc gọi.", + "Screensharing options" : "Tùy chọn chia sẻ màn hình", + "Enable screensharing" : "Bật chia sẽ màn hình", + "Bad sent video and screen quality." : "Chất lượng màn hình và video đã gửi kém.", + "Bad sent screen quality." : "Chất lượng màn hình đã gửi kém.", + "Bad sent video quality." : "Chất lượng video đã gửi kém.", + "Bad sent audio, video and screen quality." : "Chất lượng âm thanh, video và màn hình được gửi kém.", + "Bad sent audio and screen quality." : "Chất lượng âm thanh và màn hình đã gửi kém.", + "Bad sent audio and video quality." : "Chất lượng âm thanh và video được gửi kém.", + "Bad sent audio quality." : "Chất lượng âm thanh đã gửi kém.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không nhìn thấy màn hình của bạn.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không nhìn thấy bạn.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu và nhìn thấy bạn. Để cải thiện tình hình, hãy thử tắt video của bạn trong khi thực hiện chia sẻ màn hình.", + "Disable screenshare" : "Tắt chia sẻ màn hình", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu và nhìn thấy bạn. Để cải thiện tình hình, hãy thử tắt video của bạn.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu bạn.", + "Screen sharing is not supported by your browser." : "Chia sẻ màn hình không được trình duyệt của bạn hỗ trợ.", + "Screen sharing requires the page to be loaded through HTTPS." : "Chia sẻ màn hình yêu cầu trang được tải qua HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Chia sẻ màn hình yêu cầu trang phải tải qua HTTPS.", + "An error occurred while starting screensharing." : "Đã xảy ra lỗi khi bắt đầu chia sẻ màn hình.", + "Show your screen" : "Hiện màn hình của bạn", + "Stop screensharing" : "Ngừng chia sẽ màn hình", + "Mute others" : "Tắt tiếng người khác", + "Keep" : "Giữ", + "Select a region" : "Chọn một khu vực", + "Message without mention" : "Tin nhắn không đề cập", + "Mention myself" : "Nhắc đến chính mình", + "The conversation does not exist" : "Cuộc trò chuyện không tồn tại", + "Join a conversation or start a new one!" : "Tham gia một cuộc trò chuyện hoặc bắt đầu một cuộc trò chuyện mới!", + "Duplicate session" : "Phiên trùng lặp", + "Join a conversation or start a new one" : "Tham gia cuộc trò chuyện hoặc bắt đầu một cuộc trò chuyện mới", + "Nextcloud URL" : "vWorkspace URL", + "Nextcloud user" : "Người dùng vWorkspace", + "User password" : "Mật khẩu người dùng", + "Talk conversation" : "Nói chuyện", + "Skip TLS verification" : "Bỏ qua xác minh TLS", + "Matrix server URL" : "URL máy chủ ma trận", + "User" : "Người dùng", + "Matrix channel" : "Kênh ma trận", + "Mattermost server URL" : "URL máy chủ Mattermost", + "Mattermost user" : "Người dùng Mattermost", + "Team name" : "Tên nhóm", + "Channel name" : "Tên kênh", + "Rocket.Chat server URL" : "URL máy chủ Rocket.Chat", + "Rocket.Chat channel" : "Kênh Rocket.Chat", + "Zulip server URL" : "URL máy chủ Zulip", + "Bot user name" : "Tên người dùng bot", + "Bot API key" : "Khóa API bot", + "Zulip channel" : "Kênh Zulip", + "API token" : "Tín chỉ API", + "Slack channel" : "Kênh Slack", + "Server ID or name" : "ID hoặc tên máy chủ", + "Channel" : "Kênh", + "Login" : "Login", + "Chat ID" : "ID trò chuyện", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL máy chủ IRC (ví dụ: chat.freenode.net:6667)", + "Nickname" : "Biệt danh", + "Connection password" : "Mật khẩu kết nối", + "IRC channel" : "Kênh IRC", + "Channel password" : "Kênh mật khẩu", + "NickServ nickname" : "Biệt hiệu NickServ", + "NickServ password" : "Mật khẩu NickServ", + "Use TLS" : "Sử dụng TLS", + "Use SASL" : "Sử dụng SASL", + "Tenant ID" : "ID người thuê", + "Client ID" : "ID khách hàng", + "Team ID" : "ID nhóm", + "Thread ID" : "ID chủ đề", + "XMPP/Jabber server URL" : "URL máy chủ XMPP/Jabber", + "MUC server URL" : "URL máy chủ MUC", + "Jabber ID" : "Mã Jabber", + "Media" : "Phương tiện", + "Locations" : "Các địa điểm", + "Audio" : "Âm thanh", + "Show all files" : "Hiện tất cả tệp", + "Group" : "Nhóm", + "Team" : "Đội", + "You: {lastMessage}" : "Bạn: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Bạn đang cố gắng tham gia một cuộc trò chuyện trong khi có một phiên hoạt động trong một cửa sổ hoặc thiết bị khác. Điều này hiện không được vWorkspace Talk hỗ trợ. Bạn muốn làm gì?", + "Leave this page" : "Rời khỏi trang này", + "Join here" : "Tham gia tại đây", + "Post to a conversation" : "Đăng lên một cuộc trò chuyện", + "Post to conversation" : "Đăng lên cuộc trò chuyện", + "Error occurred while allowing guests" : "Đã xảy ra lỗi khi cho phép khách", + "Error occurred while disallowing guests" : "Đã xảy ra lỗi khi không cho phép khách", + "Error occurred when restricting the conversation to moderator" : "Đã xảy ra lỗi khi giới hạn cuộc trò chuyện với người kiểm duyệt", + "Error occurred when opening the conversation to everyone" : "Đã xảy ra lỗi khi mở cuộc trò chuyện với mọi người", + "Conversation password has been saved" : "Mật khẩu cuộc trò chuyện đã được lưu", + "Conversation password has been removed" : "Mật khẩu cuộc trò chuyện đã bị xóa", + "Error occurred while saving conversation password" : "Đã xảy ra lỗi khi lưu mật khẩu cuộc trò chuyện", + "Could not post message: {errorMessage}" : "Không thể đăng thông báo: {errorMessage}", + "An error occurred while fetching the participants" : "Đã xảy ra lỗi khi tìm nạp những người tham gia", + "Could not send invitation to {actorId}" : "Không thể gửi lời mời đến {actorId}", + "Invitations sent" : "Lời mời đã được gửi", + "Error occurred when sending invitations" : "Đã xảy ra lỗi khi gửi lời mời", + "Error while uploading file \"{fileName}\"" : "Lỗi khi tải lên tệp \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Không đủ dung lượng trống để tải lên tệp \"{fileName}\"", + "Error while sharing file" : "Lỗi khi chia sẻ tệp", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Trình duyệt bạn đang sử dụng không được vWorkspace Talk hỗ trợ đầy đủ. Vui lòng sử dụng phiên bản mới nhất của Mozilla Firefox, Microsoft Edge, Google Chrome, Opera hoặc Apple Safari.", + "Later today – {timeLocale}" : "Sau này - {timeLocale}", + "Tomorrow – {timeLocale}" : "Ngày mai - {timeLocale}", + "This weekend – {timeLocale}" : "Cuối tuần này - {timeLocale}", + "Next week – {timeLocale}" : "Tuần sau - {timeLocale}", + "Lost connection to signaling server. Trying to reconnect." : "Mất kết nối với máy chủ báo hiệu. Đang cố gắng kết nối lại.", + "Please reload the page." : "Vui lòng tải lại trang.", + "Do not disturb" : "Đừng làm phiền", + "Away" : "Tạm vắng", + "Microphone {number}" : "Micrô {number}", + "Camera {number}" : "Máy ảnh {number}", + "Speaker {number}" : "Người nói {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Có vẻ như bạn đang nói chuyện khi bị tắt tiếng, vui lòng tự bật tiếng để người khác nghe thấy bạn", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Không thể thiết lập kết nối với ít nhất một người tham gia. Máy chủ TURN có thể cần thiết cho tình huống của bạn. Vui lòng yêu cầu quản trị viên của bạn thiết lập một tài liệu sau {linkstart} tài liệu này {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Quá trình này mất nhiều thời gian hơn dự kiến. Các quyền phương tiện đã được cấp (hoặc bị từ chối)? Nếu có, vui lòng khởi động lại trình duyệt của bạn, vì âm thanh và video không thành công", + "Access to microphone & camera is only possible with HTTPS" : "Chỉ có thể truy cập micrô và máy ảnh bằng HTTPS", + "Please move your setup to HTTPS" : "Vui lòng di chuyển thiết lập của bạn sang HTTPS", + "Access to microphone & camera was denied" : "Quyền truy cập vào micrô và máy ảnh đã bị từ chối", + "WebRTC is not supported in your browser" : "WebRTC không được hỗ trợ trong trình duyệt của bạn", + "Please use a different browser like Firefox or Chrome" : "Vui lòng sử dụng một trình duyệt khác như Firefox hoặc Chrome", + "Error while accessing microphone & camera" : "Lỗi khi truy cập micrô và máy ảnh", + "%s Talk on your mobile devices" : "%sNói chuyện trên thiết bị di động của bạn ", + "Join conversations at any time, anywhere, on any device." : "Tham gia các cuộc trò chuyện mọi lúc, mọi nơi, trên mọi thiết bị.", + "Android app" : "Ứng dụng Android", + "iOS app" : "Ứng dụng IOS", + "__language_name__" : "Tiếng Việt", + "Tasks" : "Nhiệm vụ", + "Notes" : "Ghi chú", + "Your privacy setting has been saved" : "Các thiết lập quyền riêng tư của bạn đã được lưu", + "Failed to save sounds setting" : "Không thể lưu cài đặt âm thanh", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Bạn đã tham gia cuộc trò chuyện trong một cửa sổ hoặc thiết bị khác. Điều này hiện không được vWorkspace Talk hỗ trợ nên phiên này đã bị đóng." +}, +"nplurals=1; plural=0;"); diff --git a/l10n/vi.json b/l10n/vi.json new file mode 100644 index 0000000..1ab795b --- /dev/null +++ b/l10n/vi.json @@ -0,0 +1,948 @@ +{ "translations": { + "a conversation" : "Một cuộc đàm thoại", + "(Duration %s)" : "(Thời lượng %s)", + "You attended a call with {user1}" : "Bạn đã tham dự một cuộc gọi với {user1}", + "_%n guest_::_%n guests_" : ["%n khách"], + "You attended a call with {user1} and {user2}" : "Bạn đã tham dự một cuộc gọi với {user1} và {user2}", + "You attended a call with {user1}, {user2} and {user3}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2} và {user3}", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2}, {user3} và {user4}", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "Bạn đã tham dự một cuộc gọi với {user1}, {user2}, {user3}, {user4} và {user5}", + "_%n other_::_%n others_" : ["%n khác"], + "{actor} invited you to {call}" : "{actor} mời bạn tham dự {call}", + "You were invited to a conversation or had a call" : "Bạn đã được mời vào cuộc trò chuyện hoặc có 1 cuộc gọi", + "Other activities" : "Hoạt động khác", + "Talk" : "Trò chuyện", + "Guest" : "Khách", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge và Safari hiện có thể được sử dụng để tham gia vào các cuộc gọi âm thanh và video", + "- You can now notify all participants by posting \"@all\" into the chat" : "- Giờ đây, bạn có thể thông báo cho tất cả những người tham gia bằng cách đăng \"@all\" vào cuộc trò chuyện", + "- With the \"arrow-up\" key you can repost your last message" : "- Với phím \"mũi tên lên\", bạn có thể đăng lại tin nhắn cuối cùng của mình", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "Talk hiện có thể có các lệnh, hãy gửi \"/ help\" dưới dạng tin nhắn trò chuyện nếu quản trị viên của bạn có định một số cấu hình", + "- With projects you can create quick links between conversations, files and other items" : "- Với các dự án, bạn có thể tạo liên kết nhanh giữa các cuộc hội thoại, tệp và các mục khác", + "- You can now mention guests in the chat" : "- Bây giờ bạn có thể đề cập đến khách trong cuộc trò chuyện", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "Các cuộc trò chuyện bây giờ có thể có sảnh đợi. Điều này sẽ cho phép người kiểm duyệt tham gia trò chuyện và gọi điện để chuẩn bị cuộc họp, trong khi người dùng và khách phải đợi", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- Giờ đây, bạn có thể trực tiếp trả lời tin nhắn cho những người dùng khác để họ biết thêm ngữ cảnh về nội dung tin nhắn của bạn", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- Tìm kiếm các cuộc trò chuyện và người tham gia giờ đây cũng sẽ lọc các cuộc trò chuyện hiện có của bạn, giúp việc tìm kiếm các cuộc trò chuyện trước đó dễ dàng hơn nhiều", + "- You can now add custom user groups to conversations when the circles app is installed" : "- Giờ đây, bạn có thể thêm nhóm người dùng tùy chỉnh vào cuộc trò chuyện khi ứng dụng vòng kết nối được cài đặt", + "- Check out the new grid and call view" : "- Kiểm tra lưới mới và chế độ xem cuộc gọi", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- Giờ đây, bạn có thể tải lên và kéo các tệp tin trực tiếp từ thiết bị của mình vào cuộc trò chuyện", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- Các tệp được chia sẻ hiện được mở trực tiếp bên trong chế độ xem trò chuyện bằng ứng dụng trình xem", + "- You can now search for chats and messages in the unified search in the top bar" : "- Giờ đây, bạn có thể tìm kiếm các cuộc trò chuyện và tin nhắn trong tìm kiếm hợp nhất ở thanh trên cùng", + "- Spice up your messages with emojis from the emoji picker" : "- Thêm gia vị cho tin nhắn của bạn bằng các biểu tượng cảm xúc từ bộ chọn biểu tượng cảm xúc", + "- You can now change your camera and microphone while being in a call" : "- Giờ đây, bạn có thể thay đổi máy ảnh và micrô của mình khi đang gọi điện", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- Cung cấp cho các cuộc trò chuyện của bạn một số ngữ cảnh kèm theo mô tả và mở nó ra để người dùng đã đăng nhập có thể tìm thấy nó và tự tham gia", + "- See a read status and send failed messages again" : "- Xem trạng thái đã đọc và gửi lại tin nhắn không thành công", + "- Raise your hand in a call with the R key" : "- Giơ tay của bạn trong cuộc họp bằng phím R", + "- Join the same conversation and call from multiple devices" : "- Tham gia cùng một cuộc trò chuyện và gọi nhau từ nhiều thiết bị khác nhau", + "- Send voice messages, share your location or contact details" : "- Gửi những tin nhắn thoại, chia sẻ vị trí hiện tại hoặc những thông tin liên hệ", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- Thêm nhiều nhóm vào cuộc trò chuyện và những thành viên mới của nhóm sẽ tự động được thêm như là những thành viên", + "Talk updates ✅" : "Cập nhật Talk ✅", + "{actor} created the conversation" : "{actor} đã tạo đàm thoại", + "You created the conversation" : "Bạn đã tạo đàm thoại", + "An administrator created the conversation" : "Quản trị viên đã tạo cuộc trò chuyện", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} đã đổi tên cuộc hội thoại từ \"%1$s\" thành \"%2$s\"", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "Bạn đã đổi tên cuộc hội thoại từ \"%1$s\" thành \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "Quản trị viên đã đổi tên cuộc trò chuyện từ \"%1$s\" thành \"%2$s\"", + "{actor} set the description" : "{actor} đổi thông tin mô tả", + "You set the description" : "Bạn đã đổi thông tin mô tả", + "An administrator set the description" : "Một quản trị viên đã đổi thông tin mô tả", + "{actor} removed the description" : "{actor} đã xóa miêu tả", + "You removed the description" : "Bạn đá xóa miêu tả", + "An administrator removed the description" : "Một quản trị viên đã xóa miêu tả", + "You started a call" : "Bạn đã thực hiện một cuộc gọi", + "{actor} started a call" : "{actor} đã thực hiện một cuộc gọi", + "{actor} joined the call" : "{actor} đã tham gia cuộc gọi", + "You joined the call" : "Bạn đã tham gia cuộc gọi", + "{actor} left the call" : "{actor} đã rời khỏi cuộc gọi", + "You left the call" : "Bạn đã rời khỏi cuộc gọi", + "{actor} unlocked the conversation" : "{actor} đã mở khóa cuộc trò chuyện", + "You unlocked the conversation" : "Bạn đá mở khóa cuộc trò chuyện", + "An administrator unlocked the conversation" : "Một quản trị viên đã mở khóa cuộc trò chuyện", + "{actor} locked the conversation" : "{actor} đã khóa cuộc trò chuyện", + "You locked the conversation" : "Bạn đá khóa cuộc trò chuyện", + "An administrator locked the conversation" : "Một quản trị viên đã khóa cuộc trò chuyện", + "{actor} limited the conversation to the current participants" : "{actor} đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "You limited the conversation to the current participants" : "Bạn đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "An administrator limited the conversation to the current participants" : "Một quản trị viên đã giới hạn cuộc trò chuyện với người dùng hiện tại", + "{actor} opened the conversation to registered users" : "{actor} mở cuộc trò chuyện với người dùng đã đăng kí", + "You opened the conversation to registered users" : "Bạn đã mở cuộc trò chuyện với người dùng đã đăng kí", + "An administrator opened the conversation to registered users" : "Một quản trị viên đã mở cuộc trò chuyện với người dùng đã đăng kí", + "The conversation is now open to everyone" : "Cuộc trò chuyện được mở cho tất cả", + "{actor} opened the conversation to everyone" : "{actor} đã mở cuộc trò chuyện cho tất cả", + "You opened the conversation to everyone" : "Bạn đã mở cuộc trò chuyện cho tất cả", + "{actor} restricted the conversation to moderators" : "{actor} giới hạn cuộc trò chuyện với người kiểm duyệt", + "You restricted the conversation to moderators" : "Bạn giới hạn cuộc trò chuyện với người kiểm duyệt", + "{actor} allowed guests" : "{actor} đã cho phép khách mời", + "You allowed guests" : "Bạn đã cho phép khách mời", + "An administrator allowed guests" : "Quản trị viên đã cho phép khách", + "{actor} disallowed guests" : "{actor} đã không cho phép khách mời", + "You disallowed guests" : "Bạn đã không cho phép khách mời", + "An administrator disallowed guests" : "Quản trị viên đã không cho phép khách", + "{actor} set a password" : "{actor} đã đặt mật khẩu", + "You set a password" : "Bạn đã đặt một mật khẩu", + "An administrator set a password" : "Quản trị viên đã đặt mật khẩu", + "{actor} removed the password" : "{actor} đã xóa mật khẩu", + "You removed the password" : "Bạn đã xóa mật khẩu", + "An administrator removed the password" : "Quản trị viên đã xóa mật khẩu", + "{actor} added {user}" : "{actor} đã thêm {user}", + "You joined the conversation" : "Bạn đã tham gia cuộc trò chuyện", + "{actor} joined the conversation" : "{actor} đã tham gia cuộc trò chuyện", + "You added {user}" : "Bạn đã thêm {user}", + "{actor} added you" : "{actor} đã thêm bạn vào", + "An administrator added you" : "Quản trị viên đã thêm bạn", + "An administrator added {user}" : "Quản trị viên đã thêm {user}", + "You left the conversation" : "Bạn đã rời cuộc trò chuyện", + "{actor} left the conversation" : "{actor} đã rời khỏi cuộc hội thoại", + "{actor} removed {user}" : "{actor} đã mời {user} ra ngoài", + "You removed {user}" : "Bạn đã mời {user} ra ngoài. ", + "{actor} removed you" : "{actor} đã mời bạn ra ngoài.", + "An administrator removed you" : "Quản trị viên đã xóa bạn", + "An administrator removed {user}" : "Quản trị viên đã xóa {user}", + "{actor} added group {group}" : "{actor} đã thêm nhóm {group}", + "You added group {group}" : "Bạn đã thêm nhóm {group}", + "An administrator added group {group}" : "Một quản trị viên đã thêm nhóm {group}", + "{actor} removed group {group}" : "{actor} đã xóa nhóm {group}", + "You removed group {group}" : " Bạn đã xóa nhóm {group}", + "An administrator removed group {group}" : "Một quản trị viên đã xóa nhóm {group}", + "{actor} promoted {user} to moderator" : "{actor} đã giới thiệu {user} thành người kiểm duyệt", + "You promoted {user} to moderator" : "Bạn đã bầu chọn {user} là người kiểm duyệt", + "{actor} promoted you to moderator" : "{actor} đã bầu chọn cho bạn là người kiểm duyệt", + "An administrator promoted you to moderator" : "Quản trị viên đã thăng cấp bạn lên người kiểm duyệt", + "An administrator promoted {user} to moderator" : "Quản trị viên đã thăng cấp {user} thành quản trị viên", + "{actor} demoted {user} from moderator" : "{actor} phản đối {user} là người kiểm duyệt", + "You demoted {user} from moderator" : "Bạn đã phản đối {user} là người kiểm duyệt", + "{actor} demoted you from moderator" : "{actor} đã phản đối bạn là người kiểm duyệt", + "An administrator demoted you from moderator" : "Quản trị viên đã giáng cấp bạn khỏi người kiểm duyệt", + "An administrator demoted {user} from moderator" : "Quản trị viên đã giáng cấp {user} khỏi người kiểm duyệt", + "{actor} shared a file which is no longer available" : "{actor} đã chia sẻ một tệp không còn tồn tại", + "You shared a file which is no longer available" : "Bạn đã chia sẻ một tệp không còn tồn tại", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} đã thiết lập Matterbridge để đồng bộ hóa cuộc trò chuyện này với các cuộc trò chuyện khác.", + "You set up Matterbridge to synchronize this conversation with other chats" : "Bạn thiết lập Matterbridge để đồng bộ hóa cuộc trò chuyện này với các cuộc trò chuyện khác.", + "{actor} updated the Matterbridge configuration" : "{actor} đã cập nhật cấu hình của Matterbridge", + "You updated the Matterbridge configuration" : "Bạn đã cập nhật cấu hình của Matterbridge", + "{actor} removed the Matterbridge configuration" : "{actor} đã xóa cấu hình của Matterbridge", + "You removed the Matterbridge configuration" : "Bạn đã xóa cấu hình của Matterbridge", + "{actor} started Matterbridge" : "{actor} đã khởi động Matterbridge", + "You started Matterbridge" : "Bạn đã khởi động Matterbridge", + "{actor} stopped Matterbridge" : "{actor} đã dừng Matterbridge", + "You stopped Matterbridge" : "Bạn đã đừng Matterbridge", + "{actor} deleted a message" : "{actor} đã xóa tin nhắn", + "You deleted a message" : "Bạn đã xóa tin nhắn", + "{actor} cleared the history of the conversation" : "{actor} đã xóa lịch sử của cuộc gọi", + "You cleared the history of the conversation" : "Bạn đã xóa lịch sử của cuộc gọi", + "Message deleted by author" : "Tin nhắn đã xóa bởi tác giả", + "Message deleted by {actor}" : "Tin nhắn đã xóa bởi {actor}", + "Message deleted by you" : "Tin nhắn đá xóa bởi bạn", + "Administration" : "Quản trị viên", + "System" : "Hệ thống", + "%s (guest)" : "%s (khách mời)", + "Talk to %s" : "Trò chuyện với %s", + "File not found" : "Không tìm thấy tập tin", + "File is not shared, or shared but not with the user" : "Tệp này không được chia sẻ, hoạc được chia sẻ nhưng không phải với người dùng này", + "No account available to delete." : "Không có tài khoản nào để xóa", + "No image file provided" : "Không có tệp ảnh nào được cung cấp", + "File is too big" : "Tệp quá lớn", + "Invalid file provided" : "Tệp đã cung cấp không hợp lệ", + "Invalid image" : "Ảnh không hợp lệ", + "Unknown filetype" : "Loại tệp không xác định", + "Talk mentions" : "Đề cập trong cuộc trò chuyện", + "Say hi to your friends and colleagues!" : "Gửi lòi chào đến bạn bè và đồng nghiệp", + "No unread mentions" : "Không có đề cập nào chưa đọc", + "Call in progress" : "Cuộc gọi đang chờ", + "You were mentioned" : "Bạn đã được nhắc tới", + "Write to conversation" : "Viết vào cuộc trò chuyên", + "Writes event information into a conversation of your choice" : "Viết thông tin sự kiện vào một cuộc trò chuyện bạn chọn", + "Conversation invitation" : "Lời mời vào cuộc trò chuyện", + "Description" : "Mô tả", + "You can also dial-in via phone with the following details" : "Bạn cũng có thể quay số qua điện thoại với các thông tin chi tiết sau", + "Dial-in information" : "Thông tin quay số", + "Meeting ID" : "Id cuộc họp", + "Your PIN" : "Mã PIN của bạn", + "Meeting" : "Cuộc họp", + "Password request: %s" : "Yêu cầu mật khẩu: %s", + "Private conversation" : "Cuộc trò chuyện bí mật", + "Deleted user (%s)" : "Người dùng đã xóa (%s)", + "Dismiss notification" : "Bỏ qua thông báo ", + "Accept" : "Đồng ý", + "Decline" : "Từ chối", + "New message" : "Tin nhắn mới", + "Reminder" : "Lịch nhắc hẹn", + "Notification" : "Thông báo", + "{user} in {call}" : "{user} trong {call}", + "Deleted user in {call}" : "Người dùng đã xóa trong {call}", + "{guest} (guest) in {call}" : "{guest} (khách) trong {call}", + "Guest in {call}" : "Khách trong {call}", + "{user} sent you a private message" : "{user} đã gửi cho bạn một tin nhắn riêng", + "{user} sent a message in conversation {call}" : "{user} gửi tin nhắn trong cuộc trò chuyện{call}", + "A deleted user sent a message in conversation {call}" : "Một người dùng đã xóa gửi tin nhắn trong cuộc trò chuyện {call}", + "{guest} (guest) sent a message in conversation {call}" : "{guest} (khách) gửi tin nhắn trong cuộc trò chuyện {call}", + "A guest sent a message in conversation {call}" : "Khách gửi tin nhắn trong cuộc trò chuyện {call}", + "{user} replied to your private message" : "{user} phản hồi lại tin nhắn bí mật của bạn", + "{user} replied to your message in conversation {call}" : "{user} phản hồi lại tin nhắn của bạn trong cuộc trò chuyện {call}", + "A deleted user replied to your message in conversation {call}" : "Một người dùng bị xóa đã trả lời tin nhắn của bạn trong cuộc trò chuyện {call}", + "{guest} (guest) replied to your message in conversation {call}" : "{guest} (khách) đã phản hồi tin nhắn của bạn trong cuộc trò chuyện {call}", + "A guest replied to your message in conversation {call}" : "Một khách đã trả lời tin nhắn của bạn trong cuộc trò chuyện {call}", + "{user} mentioned you in a private conversation" : "{user} đã đề cập đến bạn trong cuộc trò chuyện riêng", + "{user} mentioned you in conversation {call}" : "{user} nhắc đến bạn trong cuộc trò chuyện {call}", + "A deleted user mentioned you in conversation {call}" : "Một người dùng bị xóa đã đề cập đến bạn trong cuộc trò chuyện {call}", + "{guest} (guest) mentioned you in conversation {call}" : "{guest} (khách) đã đề cập đến bạn trong cuộc trò chuyện {call}", + "A guest mentioned you in conversation {call}" : "Một khách đã đề cập đến bạn trong cuộc trò chuyện {call}", + "View chat" : "Xem trò chuyện", + "{user} invited you to a group conversation: {call}" : "{user} đã mời bạn tham gia cuộc trò chuyện nhóm: {call}", + "Join call" : "Tham gia cuộc gọi", + "Answer call" : "Trả lời cuộc gọi", + "{user} would like to talk with you" : "{user} muốn nói chuyện với bạn", + "Call back" : "Gọi lại", + "You missed a call from {user}" : "Bạn đã lỡ cuộc gọi từ {user}", + "A group call has started in {call}" : "Một cuộc gọi nhóm đã được thực hiện trong {call}", + "You missed a group call in {call}" : "Bạn đã lỡ cuộc gọi nhóm trong {call}", + "{email} is requesting the password to access {file}" : "{email} đang yêu cầu mật khẩu để truy cập {file}", + "{email} tried to request the password to access {file}" : "{email} đã cố gắng yêu cầu mật khẩu để truy cập {file}", + "Someone is requesting the password to access {file}" : "Ai đó đang yêu cầu mật khẩu để truy cập {file}", + "Someone tried to request the password to access {file}" : "Ai đó đã cố gắng yêu cầu mật khẩu để truy cập {file}", + "Open settings" : "Mở thiết đặt", + "The hosted signaling server is now configured and will be used." : "Máy chủ báo hiệu hiện đã được định cấu hình và sẽ được sử dụng", + "The hosted signaling server was removed and will not be used anymore." : "Máy chủ báo hiệu đã bị xóa và sẽ không được sử dụng nữa.", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "Tài khoản máy chủ báo hiệu đã thay đổi trạng thái từ \"{oldstatus}\" thành \"{newstatus}\".", + "error" : "Lỗi", + "Default" : "Mặc định", + "Presentation" : "Buổi thuyết trình", + "Conversations" : "Đàm thoại", + "{user}" : "{user}", + "Messages" : "Thông điệp", + "{user} in {conversation}" : "{user} trong {conversation}", + "Messages in other conversations" : "Tin nhắn trong cuộc trò chuyện khác", + "Other" : "Khác", + "Failed to request trial because the trial server is unreachable. Please try again later." : "Không thể yêu cầu dùng thử vì không thể truy cập được máy chủ dùng thử. Vui lòng thử lại sau.", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "Có vấn đề với xác thực của phiên bản này. Có thể không thể truy cập từ bên ngoài để xác minh URL của nó.", + "Something unexpected happened." : "Một điều gì đó không mong muốn đã xảy ra.", + "The URL is invalid." : "URL không hợp lệ.", + "An HTTPS URL is required." : "URL HTTPS là bắt buộc.", + "The email address is invalid." : "Địa chỉ email không hợp lệ.", + "The language is invalid." : "Ngôn ngữ không hợp lệ.", + "The country is invalid." : "Quốc gia không hợp lệ.", + "There is a problem with the request of the trial. Please check your logs for further information." : "Có vấn đề với yêu cầu của bản dùng thử. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin", + "Too many requests are send from your servers address. Please try again later." : "Quá nhiều yêu cầu được gửi từ địa chỉ máy chủ của bạn. Vui lòng thử lại sau.", + "There is already a trial registered for this Nextcloud instance." : "Đã có một bản dùng thử được đăng ký cho phiên bản vWorkspace này.", + "Something unexpected happened. Please try again later." : "Một điều gì đó không mong muốn đã xảy ra. Vui lòng thử lại sau.", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "Không thể yêu cầu dùng thử vì máy chủ dùng thử hoạt động sai. Vui lòng thử lại sau.", + "Trial requested but failed to get account information. Please check back later." : "Đã yêu cầu dùng thử nhưng không lấy được thông tin tài khoản. Vui lòng kiểm tra lại sau.", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "Đã xảy ra sự cố với việc xác thực yêu cầu này. Có thể không thể truy cập từ bên ngoài để xác minh URL của nó.", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "Không tìm nạp được thông tin tài khoản vì máy chủ dùng thử hoạt động sai. Vui lòng kiểm tra lại sau.", + "There is a problem with fetching the account information. Please check your logs for further information." : "Đã xảy ra sự cố khi tìm nạp thông tin tài khoản. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin.", + "There is no such account registered." : "Không có tài khoản như vậy được đăng ký.", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "Không thể tìm nạp thông tin tài khoản vì không thể truy cập được máy chủ dùng thử. Vui lòng kiểm tra lại sau.", + "Deleting the hosted signaling server account failed. Please check back later." : "Không xóa được tài khoản máy chủ báo hiệu. Vui lòng kiểm tra lại sau.", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "Không thể xóa tài khoản vì máy chủ dùng thử hoạt động sai. Vui lòng kiểm tra lại sau.", + "There is a problem with deleting the account. Please check your logs for further information." : "Đã xảy ra sự cố khi xóa tài khoản. Vui lòng kiểm tra nhật ký của bạn để biết thêm thông tin.", + "Too many requests are sent from your servers address. Please try again later." : "Quá nhiều yêu cầu được gửi từ địa chỉ máy chủ của bạn. Vui lòng thử lại sau.", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "Không thể xóa tài khoản vì không thể truy cập được máy chủ dùng thử. Vui lòng kiểm tra lại sau.", + "Andorra" : "Andorra", + "United Arab Emirates" : "Các Tiểu vương quốc Ả Rập Thống nhất", + "Afghanistan" : "Afghanistan", + "Antigua and Barbuda" : "Antigua và Barbuda", + "Anguilla" : "Anguilla", + "Albania" : "Albania", + "Armenia" : "Armenia", + "Angola" : "Angola", + "Antarctica" : "Nam Cực", + "Argentina" : "Argentina", + "American Samoa" : "American Samoa", + "Austria" : "Áo", + "Australia" : "Úc", + "Aruba" : "Aruba", + "Åland Islands" : "Quần đảo Åland", + "Azerbaijan" : "Azerbaijan", + "Bosnia and Herzegovina" : "Bosnia và Herzegovina", + "Barbados" : "Barbados", + "Bangladesh" : "Bangladesh", + "Belgium" : "Bỉ", + "Burkina Faso" : "Burkina Faso", + "Bulgaria" : "Bulgaria", + "Bahrain" : "Bahrain", + "Burundi" : "Burundi", + "Benin" : "Benin", + "Saint Barthélemy" : "Saint Barthélemy", + "Bermuda" : "Bermuda", + "Brunei Darussalam" : "Brunei", + "Bonaire, Sint Eustatius and Saba" : "Bonaire, Sint Eustatius và Saba", + "Brazil" : "Brazil", + "Bahamas" : "Bahamas", + "Bhutan" : "Bhutan", + "Bouvet Island" : "Đảo Bouvet", + "Botswana" : "Botswana", + "Belarus" : "Belarus", + "Belize" : "Belize", + "Canada" : "Canada", + "Cocos (Keeling) Islands" : "Quần đảo Cocos (Keeling)", + "Central African Republic" : "Cộng hòa Trung Phi", + "Congo" : "Congo", + "Switzerland" : "Thụy Sĩ", + "Côte d'Ivoire" : "Bờ Biển Ngà", + "Cook Islands" : "Quần đảo Cook", + "Chile" : "Chile", + "Cameroon" : "Cameroon", + "China" : "Trung Quốc", + "Colombia" : "Colombia", + "Costa Rica" : "Costa Rica", + "Cuba" : "Cuba", + "Cabo Verde" : "Cabo Verde", + "Curaçao" : "Curaçao", + "Christmas Island" : "Đảo Christmas", + "Cyprus" : "Síp", + "Czechia" : "Séc", + "Germany" : "Đức", + "Djibouti" : "Djibouti", + "Denmark" : "Đan Mạch", + "Dominica" : "Dominica", + "Dominican Republic" : "Cộng hòa Dominica", + "Algeria" : "Algeria", + "Ecuador" : "Ecuador", + "Estonia" : "Estonia", + "Egypt" : "Ai Cập", + "Western Sahara" : "Tây Sahara", + "Eritrea" : "Eritrea", + "Spain" : "Tây Ban Nha", + "Ethiopia" : "Ethiopia", + "Finland" : "Phần Lan", + "Fiji" : "Fiji", + "Falkland Islands (Malvinas)" : "Quần đảo Falkland (Malvinas)", + "Faroe Islands" : "Quần đảo Faroe", + "France" : "Pháp", + "Gabon" : "Gabon", + "United Kingdom of Great Britain and Northern Ireland" : "Vương quốc Anh", + "Grenada" : "Grenada", + "Georgia" : "Georgia", + "French Guiana" : "Guiana thuộc Pháp", + "Guernsey" : "Guernsey", + "Ghana" : "Ghana", + "Gibraltar" : "Gibraltar", + "Greenland" : "Greenland", + "Gambia" : "Gambia", + "Guinea" : "Guinea", + "Guadeloupe" : "Guadeloupe", + "Equatorial Guinea" : "Xích Đạo Guinea", + "Greece" : "Hy Lạp", + "South Georgia and the South Sandwich Islands" : "Nam Georgia và Quần đảo Nam Sandwich", + "Guatemala" : "Guatemala", + "Guam" : "Guam", + "Guinea-Bissau" : "Guinea-Bissau", + "Guyana" : "Guyana", + "Hong Kong" : "Hồng Kông", + "Heard Island and McDonald Islands" : "Đảo Heard và QĐ McDonald", + "Honduras" : "Honduras", + "Croatia" : "Croatia", + "Haiti" : "Haiti", + "Hungary" : "Hungary", + "Indonesia" : "Indonesia", + "Ireland" : "Ireland", + "Israel" : "Israel", + "Isle of Man" : "Đảo Man", + "India" : "Ấn Độ", + "British Indian Ocean Territory" : "Lãnh thổ Ấn Độ Dương thuộc Anh", + "Iraq" : "Iraq", + "Iceland" : "Iceland", + "Italy" : "Ý", + "Jersey" : "Jersey", + "Jamaica" : "Jamaica", + "Jordan" : "Jordan", + "Japan" : "Nhật Bản", + "Kenya" : "Kenya", + "Kyrgyzstan" : "Kyrgyzstan", + "Cambodia" : "Campuchia", + "Kiribati" : "Kiribati", + "Comoros" : "Comoros", + "Saint Kitts and Nevis" : "Saint Kitts và Nevis", + "Kuwait" : "Kuwait", + "Cayman Islands" : "Quần đảo Cayman", + "Kazakhstan" : "Kazakhstan", + "Lao People's Democratic Republic" : "Lào", + "Lebanon" : "Li-băng", + "Saint Lucia" : "Saint Lucia", + "Liechtenstein" : "Liechtenstein", + "Sri Lanka" : "Sri Lanka", + "Liberia" : "Liberia", + "Lesotho" : "Lesotho", + "Lithuania" : "Lithuania", + "Luxembourg" : "Luxembourg", + "Latvia" : "Latvia", + "Libya" : "Libya", + "Morocco" : "Ma-rốc", + "Monaco" : "Monaco", + "Montenegro" : "Montenegro", + "Saint Martin (French part)" : "Saint Martin (phần thuộc Pháp)", + "Madagascar" : "Madagascar", + "Marshall Islands" : "Quần đảo Marshall", + "North Macedonia" : "Bắc Macedonia", + "Mali" : "Mali", + "Myanmar" : "Myanmar", + "Mongolia" : "Mông Cổ", + "Macao" : "Ma Cao", + "Northern Mariana Islands" : "Quần đảo Bắc Mariana", + "Martinique" : "Martinique", + "Mauritania" : "Mauritania", + "Montserrat" : "Montserrat", + "Malta" : "Malta", + "Mauritius" : "Mauritius", + "Maldives" : "Maldives", + "Malawi" : "Malawi", + "Mexico" : "Mexico", + "Malaysia" : "Malaysia", + "Mozambique" : "Mozambique", + "Namibia" : "Namibia", + "New Caledonia" : "New Caledonia", + "Niger" : "Niger", + "Norfolk Island" : "Đảo Norfolk", + "Nigeria" : "Nigeria", + "Nicaragua" : "Nicaragua", + "Netherlands" : "Hà Lan", + "Norway" : "Na Uy", + "Nepal" : "Nepal", + "Nauru" : "Nauru", + "Niue" : "Niue", + "New Zealand" : "New Zealand", + "Oman" : "Oman", + "Panama" : "Panama", + "Peru" : "Peru", + "French Polynesia" : "Polynesia thuộc Pháp", + "Papua New Guinea" : "Papua New Guinea", + "Philippines" : "Philippines", + "Pakistan" : "Pakistan", + "Poland" : "Ba Lan", + "Saint Pierre and Miquelon" : "Saint Pierre và Miquelon", + "Pitcairn" : "Pitcairn", + "Puerto Rico" : "Puerto Rico", + "Palestine, State of" : "Palestine", + "Portugal" : "Bồ Đào Nha", + "Palau" : "Palau", + "Paraguay" : "Paraguay", + "Qatar" : "Qatar", + "Réunion" : "Réunion", + "Romania" : "Romania", + "Serbia" : "Serbia", + "Russian Federation" : "Nga", + "Rwanda" : "Rwanda", + "Saudi Arabia" : "Ả Rập Xê Út", + "Solomon Islands" : "Quần đảo Solomon", + "Seychelles" : "Seychelles", + "Sudan" : "Sudan", + "Sweden" : "Thụy Điển", + "Singapore" : "Singapore", + "Saint Helena, Ascension and Tristan da Cunha" : "Saint Helena, Ascension và Tristan da Cunha", + "Slovenia" : "Slovenia", + "Svalbard and Jan Mayen" : "Svalbard và Jan Mayen", + "Slovakia" : "Slovakia", + "Sierra Leone" : "Sierra Leone", + "San Marino" : "San Marino", + "Senegal" : "Senegal", + "Somalia" : "Somalia", + "Suriname" : "Suriname", + "South Sudan" : "Nam Sudan", + "Sao Tome and Principe" : "Sao Tome và Principe", + "El Salvador" : "El Salvador", + "Sint Maarten (Dutch part)" : "Sint Maarten (phần thuộc Hà Lan)", + "Syrian Arab Republic" : "Cộng hòa Ả Rập Syria", + "Turks and Caicos Islands" : "Quần đảo Turks và Caicos", + "Chad" : "Chad", + "French Southern Territories" : "Vùng đất phía Nam và châu Nam Cực thuộc Pháp", + "Togo" : "Togo", + "Thailand" : "Thái Lan", + "Tajikistan" : "Tajikistan", + "Tokelau" : "Tokelau", + "Timor-Leste" : "Đông Timor", + "Turkmenistan" : "Turkmenistan", + "Tunisia" : "Tunisia", + "Tonga" : "Tonga", + "Turkey" : "Thổ Nhĩ Kỳ", + "Trinidad and Tobago" : "Trinidad và Tobago", + "Tuvalu" : "Tuvalu", + "Tanzania, United Republic of" : "Tanzania", + "Ukraine" : "Ukraina", + "Uganda" : "Uganda", + "United States Minor Outlying Islands" : "Các đảo nhỏ xa trung tâm Hoa Kỳ", + "United States of America" : "Hoa Kỳ", + "Uruguay" : "Uruguay", + "Uzbekistan" : "Uzbekistan", + "Holy See" : "Tòa Thánh", + "Saint Vincent and the Grenadines" : "Saint Vincent và Grenadines", + "Viet Nam" : "Việt Nam", + "Vanuatu" : "Vanuatu", + "Wallis and Futuna" : "Wallis và Futuna", + "Samoa" : "Samoa", + "Yemen" : "Yemen", + "Mayotte" : "Mayotte", + "South Africa" : "Nam Phi", + "Zambia" : "Zambia", + "Zimbabwe" : "Zimbabwe", + "Federation" : "Kết nối Liên Bang ", + "High-performance backend" : "Backend hiệu suất cao", + "Error: Server did not respond with proper JSON" : "Lỗi: Máy chủ không phản hồi với JSON thích hợp", + "Error: Server responded with: {error}" : "Lỗi: Máy chủ phản hồi: {error}", + "Error: Unknown error occurred" : "Lỗi: Đã xảy ra lỗi không xác định", + "SIP configuration" : "Cấu hình SIP", + "Invalid date, date format must be YYYY-MM-DD" : "Định dạng ngày không hợp lệ phải là YYYY-MM-DD", + "Conversation not found" : "Không tìm thấy cuộc hội thoại", + "Chat, video & audio-conferencing using WebRTC" : "Trò chuyện, hội thảo âm thanh và video bằng WebRTC", + "Leave call" : "Rời khỏi cuộc gọi", + "Navigating away from the page will leave the call in {conversation}" : "Điều hướng khỏi trang sẽ rời khỏi cuộc gọi trong {cuộc trò chuyện}", + "Stay in call" : "Giữ cuộc gọi", + "Discuss this file" : "Thảo luận về tệp này", + "Share this file with others to discuss it" : "Chia sẻ tệp này với những người khác để thảo luận về nó", + "Share this file" : "Chia sẻ tệp này", + "Join conversation" : "Tham gia cuộc trò chuyện", + "The password is wrong. Try again." : "Sai mật khẩu. Thử lại.", + "Password" : "Mật khẩu", + "Submit" : "Gửi đi", + "Error requesting the password." : "Lỗi khi đang yêu cầu mật khẩu.", + "Request password" : "Yêu cầu mật khẩu", + "This conversation has ended" : "Cuộc trò chuyện này đã kết thúc", + "Everyone" : "Tất cả mọi người", + "Users and moderators" : "Người dùng và người kiểm duyệt", + "Moderators only" : "Chỉ người kiểm duyệt", + "Save changes" : "Lưu thay đổi", + "Saving …" : "Đang lưu ...", + "Saved!" : "Đã lưu!", + "Limit to groups" : "Giới hạn nhóm", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "Khi ít nhất một nhóm được chọn, chỉ những người thuộc các nhóm được liệt kê mới có thể tham gia cuộc trò chuyện.", + "Guests can still join public conversations." : "Khách vẫn có thể tham gia những cuộc trò chuyện công khai", + "Limit using Talk" : "Hạn chế sử dụng Talk", + "Limit creating a public and group conversation" : "Hạn chế tạo cuộc trò chuyện công khai và nhóm", + "Limit creating conversations" : "Hạn chế tạo cuộc trò chuyện", + "Limit starting a call" : "Hạn chế bắt đầu cuộc gọi", + "Limit starting calls" : "Hạn chế bắt đầu cuộc gọi", + "When a call has started, everyone with access to the conversation can join the call." : "Khi cuộc gọi bắt đầu, mọi người có quyền truy cập vào cuộc trò chuyện đều có thể tham gia cuộc gọi.", + "Enabled" : "Đá kích hoạt", + "Disabled" : "Tắt", + "State" : "Trạng thái", + "Name" : "Tên", + "All messages" : "Tất cả tin nhắn", + "Off" : "Tắt", + "General settings" : "Cài đặt chung", + "Default notification settings" : "Cài đặt thông báo mặc định", + "Default group notification" : "Thông báo nhóm mặc định", + "Default group notification for new groups" : "Thông báo nhóm mặc định cho các nhóm mới", + "Integration into other apps" : "Tích hợp vào các ứng dụng khác", + "Allow conversations on files" : "Cho phép các cuộc trò chuyện trên tệp", + "Allow conversations on public shares for files" : "Cho phép các cuộc trò chuyện chia sẻ công khai đối với các tệp", + "Enable encryption" : "Bật mã hóa", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "Bằng cách nhấp vào nút phía trên, thông tin trong biểu mẫu sẽ được gửi đến máy chủ của Struktur AG. Bạn có thể tìm thêm thông tin tại {linkstart} spreed.eu {linkend}.", + "Pending" : "Đang dừng", + "Error" : "Lỗi", + "Blocked" : "Bị chặn", + "Active" : "Hoạt động", + "Expired" : "Đã hết hạn", + "Never" : "Không bao giờ", + "The trial could not be requested. Please try again later." : "Không thể yêu cầu thử nghiệm. Vui lòng thử lại sau.", + "The account could not be deleted. Please try again later." : "Không thể xóa tài khoản. Vui lòng thử lại sau.", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "Đối tác Struktur AG của chúng tôi cung cấp một dịch vụ mà một máy chủ báo hiệu được lưu trữ có thể được yêu cầu. Đối với điều này, bạn chỉ cần điền vào biểu mẫu bên dưới và vWorkspace của bạn sẽ yêu cầu nó. Sau khi máy chủ được thiết lập cho bạn, thông tin đăng nhập sẽ tự động được điền. Điều này sẽ ghi đè cài đặt máy chủ báo hiệu hiện có.", + "URL of this Nextcloud instance" : "URL của phiên bản vWorkspace này", + "Full name of the user requesting the trial" : "Tên đầy đủ của người dùng yêu cầu bản dùng thử", + "Language" : "Ngôn ngữ", + "Country" : "Quốc gia", + "Request signaling server trial" : "Yêu cầu dùng thử máy chủ báo hiệu", + "You can see the current status of your hosted signaling server in the following table." : "Bạn có thể xem trạng thái hiện tại của máy chủ báo hiệu trong bảng sau.", + "Status" : "Trạng thái", + "Created at" : "Được tạo ra vào lúc", + "Expires at" : "Hết hạn vào", + "Limits" : "Giới hạn", + "Yes" : "Có", + "No" : "Không", + "Delete the signaling server account" : "Xóa tài khoản máy chủ báo hiệu", + "_%n user_::_%n users_" : ["%n người dùng"], + "Installed version: {version}" : "Phiên bản đã cài đặt: {version}", + "Matterbridge binary was not found or couldn't be executed." : "Nhị phân Matterbridge không được tìm thấy hoặc không thể được thực thi", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "Bạn cũng có thể đặt đường dẫn đến nhị phân Matterbridge theo cách thủ công thông qua cấu hình. Kiểm tra {linkstart} tài liệu tích hợp Matterbridge {linkend} để biết thêm thông tin.", + "Downloading …" : "Đang tải ...", + "Install Talk Matterbridge" : "Cài đặt Talk Matterbridge", + "Failed to execute Matterbridge binary." : "Không thực thi được mã nhị phân Matterbridge.", + "Matterbridge integration" : "Tích hợp Matterbridge ", + "Enable Matterbridge integration" : "Bật tích hợp Matterbridge", + "Status: Checking connection" : "Trạng thái: Đang kiểm tra kết nối", + "OK: Running version: {version}" : "OK: Phiên bản đang chạy: {version}", + "Validate SSL certificate" : "Xác thực chứng chỉ SSL", + "Delete this server" : "Xóa máy chủ này", + "Test this server" : "Kiểm tra máy chủ này", + "Shared secret" : "Chia sẽ mật khẩu", + "Restrict SIP configuration" : "Hạn chế cấu hình SIP", + "Enable SIP configuration" : "Bật cấu hình SIP", + "Only users of the following groups can enable SIP in conversations they moderate" : "Chỉ những người dùng thuộc các nhóm sau mới có thể bật SIP trong các cuộc trò chuyện mà họ kiểm duyệt", + "Phone number (Country)" : "Số điện thoại (Quốc gia)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "Thông tin này được gửi trong thư điện tử mời cũng như hiển thị trong thanh bên cho tất cả những người tham gia.", + "High-performance backend URL" : "URL backend hiệu suất cao", + "STUN server URL" : "URL máy chủ STUN", + "STUN servers" : "Máy chủ STUN", + "A STUN server is used to determine the public IP address of participants behind a router." : "Máy chủ STUN được sử dụng để xác định địa chỉ IP công khai của người tham gia phía sau bộ định tuyến.", + "{schema} scheme must be used with a domain" : "Lược đồ {schema} phải được sử dụng với một miền", + "{option1} and {option2}" : "{option1} và {option2}", + "{option} only" : "Chỉ {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK: Các ứng viên ICE thành công do máy chủ TURN trả về", + "Error: No working ICE candidates returned by the TURN server" : "Lỗi: Không có ứng cử viên ICE nào đang hoạt động được máy chủ TURN trả về", + "Testing whether the TURN server returns ICE candidates" : "Kiểm tra xem máy chủ TURN có trả về các ứng viên ICE hay không", + "TURN server schemes" : "Lược đồ máy chủ TURN", + "TURN server URL" : "URL máy chủ TURN", + "TURN server secret" : "Bảo mật máy chủ TURN", + "TURN server protocols" : "Giao thức máy chủ TURN", + "TURN servers" : "Máy chủ TURN", + "OK" : "OK", + "Federated user" : "Người dùng được liên kết", + "Confirm" : "Xác nhận", + "Reset" : "Đặt lại", + "Cancel" : "Hủy", + "Back" : "Quay lại", + "Add participant \"{user}\"" : "Thêm người tham gia \"{user}\"", + "Loading …" : "Đang tải …", + "From" : "Từ", + "To" : "Tới", + "Calendar" : "Lịch", + "Attendees" : "Người tham gia", + "Save" : "Lưu", + "Search participants" : "Tìm kiếm người tham gia", + "No results" : "Không có kết quả", + "Done" : "Hoàn thành", + "Raise hand" : "Giơ tay", + "Lower hand" : "Đặt tay xuống", + "Speaker view" : "Chế độ xem người gọi điện", + "Grid view" : "Xem dạng Lưới", + "This conversation is read-only" : "Cuộc trò chuyện này ở chế độ chỉ đọc", + "Reload" : "Tải lại", + "{nickName} raised their hand." : "{nickName} giơ tay.", + "A participant raised their hand." : "Một người tham gia giơ tay.", + "Collapse stripe" : "Thu gọi sọc", + "Expand stripe" : "Mở rộng sọc", + "Previous page of videos" : "Trang trước của video", + "Next page of videos" : "Trang tiếp theo của video", + "Connecting …" : "Đang kết nối …", + "Waiting for others to join the call …" : "Đang chờ người khác tham gia cuộc gọi…", + "You can invite others in the participant tab of the sidebar" : "Bạn có thể mời những người khác trong tab người tham gia của thanh bên", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "Bạn có thể mời những người khác trong tab người tham gia của thanh bên hoặc chia sẻ liên kết này để mời những người khác!", + "Share this link to invite others!" : "Chia sẻ liên kết này để mời những người khác!", + "Copy link" : "Sao chép liên kết", + "Mute audio" : "Tắt âm thanh", + "Unmute audio" : "Bật âm thanh", + "None" : "Không có", + "Access to camera was denied" : "Quyền truy cập vào máy ảnh đã bị từ chối", + "Error while accessing camera" : "Lỗi khi truy cập máy ảnh", + "You have been muted by a moderator" : "Bạn đã bị người kiểm duyệt tắt tiếng", + "Disable video" : "Tắt Video", + "Enable video" : "Bật Video", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "Bật video. Kết nối của bạn sẽ bị gián đoạn trong thời gian ngắn khi bật video lần đầu tiên", + "You" : "Bạn", + "Mute" : "Tắt tiếng", + "Show screen" : "Hiện màn hình", + "Stop following" : "Ngừng theo dõi", + "Collapse" : "Thu gọn", + "Expand" : "Mở rộng", + "You need to be logged in to upload files" : "Bạn cần đăng nhập để tải tệp lên", + "Drop your files to upload" : "Thả tệp của bạn để tải lên", + "Conversation messages" : "Tin nhắn đàm thoại", + "Scroll to bottom" : "Cuộn xuống dưới cùng", + "Post message" : "Đăng tin nhắn", + "Favorite" : "Ưa thích", + "Date:" : "Ngày:", + "Hide details" : "Ẩn chi tiết", + "Show details" : "Hiển thị chi tiết", + "Error while updating conversation description" : "Lỗi khi cập nhật mô tả cuộc trò chuyện", + "Edit conversation description" : "Chỉnh sửa mô tả cuộc trò chuyện", + "Disable" : "Tắt", + "Enable" : "Bật", + "Choose" : "Chọn", + "The file must be a PNG or JPG" : "Tệp phải là PNG hoặc JPG", + "Restricted" : "Bị giới hạn", + "Conversation settings" : "Cài đặt cuộc trò chuyện", + "Personal" : "Cá nhân", + "Danger zone" : "Khu vực nguy hiểm", + "Leave conversation" : "Rời khỏi cuộc đàm thoại", + "Delete conversation" : "Xóa cuộc trò chuyện", + "Do you really want to delete \"{displayName}\"?" : "Bạn có thực sự muốn xóa \"{displayName}\" không?", + "Error while deleting conversation" : "Lỗi khi xóa cuộc trò chuyện", + "Be careful, these actions cannot be undone." : "Hãy cẩn thận, không thể hoàn tác những hành động này.", + "Password protection" : "Password protection", + "Set a password" : "Đặt mật khẩu", + "Save password" : "Lưu mật khẩu", + "Resend invitations" : "Gửi lại lời mời", + "Error occurred when opening or limiting the conversation" : "Đã xảy ra lỗi khi mở hoặc giới hạn cuộc trò chuyện", + "Start time has been updated" : "Thời gian bắt đầu đã được cập nhật", + "Error occurred while updating start time" : "Đã xảy ra lỗi khi cập nhật thời gian bắt đầu", + "Meeting start time" : "Thời gian bắt đầu cuộc họp", + "Start time (optional)" : "Thời gian bắt đầu (tùy chọn)", + "Error occurred when locking the conversation" : "Đã xảy ra lỗi khi khóa cuộc trò chuyện", + "Error occurred when unlocking the conversation" : "Đã xảy ra lỗi khi mở khóa cuộc trò chuyện", + "Lock conversation" : "Khóa cuộc trò chuyện", + "This will also terminate the ongoing call." : "Điều này cũng sẽ kết thúc cuộc gọi đang diễn ra.", + "Edit" : "Chỉnh sửa", + "More information" : "Thêm thông tin", + "Delete" : "Xóa", + "Add new bridged channel to current conversation" : "Thêm kênh bắc cầu mới vào cuộc trò chuyện hiện tại", + "unknown state" : "trạng thái không xác định", + "running" : "đang chạy", + "not running, check Matterbridge log" : "không chạy, kiểm tra nhật kí Matterbridge", + "not running" : "không chạy", + "Bridge saved" : "Cầu nối đã được lưu", + "You can bridge channels from various instant messaging systems with Matterbridge." : "Bạn có thể kết nối các kênh từ các hệ thống nhắn tin tức thời khác nhau với Matterbridge.", + "More info on Matterbridge" : "Thông tin thêm về Matterbridge", + "Enable bridge" : "Bật cầu nối", + "Show Matterbridge log" : "Hiển thị nhật kí Matterbridge", + "Notifications" : "Thông báo", + "SIP dial-in is now enabled" : "Quay số SIP hiện đã được bật", + "SIP dial-in is now disabled" : "Tính năng quay số SIP hiện đã bị tắt", + "Error occurred when enabling SIP dial-in" : "Đã xảy ra lỗi khi bật quay số SIP", + "Error occurred when disabling SIP dial-in" : "Đã xảy ra lỗi khi tắt quay số SIP", + "Join" : "Tham gia", + "Error while creating the conversation" : "Lỗi khi tạo cuộc trò chuyện", + "Create conversation" : "Tạo cuộc trò chuyện", + "Log in" : "Đăng nhập", + "Mark as read" : "Đánh dấu đã đọc", + "Mark as unread" : "Đánh dấu là chưa đọc", + "Remove from favorites" : "Xóa khỏi ưa thích", + "Add to favorites" : "Thêm vào ưa thích", + "You need to promote a new moderator before you can leave the conversation." : "Bạn cần chọn người kiểm duyệt mới trước khi có thể rời khỏi cuộc trò chuyện.", + "Conversation actions" : "Hoạt động cuộc trò chuyện", + "Home" : "Trang nhà", + "Alphabetically" : "Theo bảng chữ cái", + "No conversations found" : "Không tìm thấy cuộc trò chuyện nào", + "An error occurred while performing the search" : "Đã xảy ra lỗi khi thực hiện tìm kiếm", + "Conversation list" : "Danh sách cuộc trò chuyện", + "Unread messages" : "Tin nhắn chưa đọc", + "Clear filter" : "Xóa bộ lọc", + "Users" : "Người dùng", + "Groups" : "Nhóm", + "Other sources" : "Những nguồn khác", + "Open conversations" : "Mở cuộc trò chuyện", + "No search results" : "Không có kết quả tìm kiếm", + "Users and groups" : "Người dùng và nhóm", + "You are currently waiting in the lobby" : "Bạn hiện đang đợi ở sảnh đợi", + "Select microphone" : "Chọn micrô", + "No microphone available" : "Không có micrô", + "Select camera" : "Chọn camera", + "No camera available" : "Không có camera khả dụng", + "No audio" : "Không có âm thanh", + "No camera" : "Không có máy ảnh", + "Calls are not supported in your browser" : "Cuộc gọi không được hỗ trợ trong trình duyệt của bạn", + "Access to microphone is only possible with HTTPS" : "Chỉ có thể truy cập vào micrô với HTTPS", + "Access to microphone was denied" : "Quyền truy cập vào micrô đã bị từ chối", + "Error while accessing microphone" : "Lỗi khi truy cập micrô", + "Access to camera is only possible with HTTPS" : "Chỉ có thể truy cập vào camera với HTTPS", + "Invalid path selected" : "Đường dẫn đã chọn không hợp lệ", + "Upload" : "Tải lên", + "Files" : "Tệp", + "24 hours" : "24 tiếng", + "Reply" : "Trả l", + "More actions" : "Nhiều hành động hơn", + "Set reminder" : "Thiết lập nhắc nhở", + "Reply privately" : "Trả lời riêng tư", + "Copy message link" : "Sao chép liên kết tin nhắn", + "Go to file" : "Tới tập tin", + "Translate" : "Dịch", + "Dismiss" : "Bỏ qua", + "Message read by everyone who shares their reading status" : "Tin nhắn được đọc bởi tất cả những người chia sẻ trạng thái đọc của họ", + "Message sent" : "Tin nhắn đã gửi", + "Deleting message" : "Đang xóa tin nhắn", + "Message deleted successfully" : "Đã xóa tin nhắn thành công", + "Message could not be deleted because it is too old" : "Không thể xóa tin nhắn vì nó quá cũ", + "Only normal chat messages can be deleted" : "Chỉ những tin nhắn trò chuyện bình thường mới có thể bị xóa", + "An error occurred while deleting the message" : "Đã xảy ra lỗi khi xóa tin nhắn", + "Contact" : "Liên hệ", + "{stack} in {board}" : "{stack} trong {board}", + "Deck Card" : "Thẻ bài", + "Sending message" : "Đang gửi tin nhắn", + "Failed to send the message. Click to try again" : "Không gửi được tin nhắn. Bấm để thử lại", + "Not enough free space to upload file" : "Không đủ dung lượng trống để tải tệp lên", + "No messages" : "Không có tin nhắn", + "Create a new group conversation" : "Tạo một cuộc trò chuyện nhóm mới", + "Add participants" : "Thêm người tham gia", + "Allow guests to join via link" : "Cho phép khách tham gia qua liên kết", + "This conversation has been locked" : "Cuộc trò chuyện này đã bị khóa", + "No permission to post messages in this conversation" : "Không có quyền đăng tin nhắn trong cuộc trò chuyện này", + "Joining conversation …" : "Tham gia cuộc trò chuyện …", + "Send message" : "Gửi thông điệp", + "File to share" : "Tệp để chia sẻ", + "Add emoji" : "Thêm biểu tượng cảm xúc", + "Share from Files" : "Chia sẻ từ Thư mục", + "Share files to the conversation" : "Chia sẻ tệp với cuộc trò chuyện", + "New file" : "Tập tin mới", + "Blank" : "‎Trống‎", + "Add more files" : "Thêm nhiều tập tin", + "Send" : "Gửi", + "Settings" : "Thiết lập", + "Results" : "Kết quả", + "Disable lobby" : "Vô hiệu hóa sảnh đợi", + "Settings for participant \"{user}\"" : "Cài đặt cho người tham gia \"{user}\"", + "Participant \"{user}\"" : "Người tham gia \"{user}\"", + "moderator" : "Người kiểm duyệt", + "guest" : "khách", + "Raised their hand" : "Giơ tay của họ", + "Joined with video" : "Đã tham gia qua video", + "Joined via phone" : "Đã tham gia qua điện thoại", + "Joined with audio" : "Đã tham gia qua audio", + "Remove participant" : "Xóa người tham gia", + "Dial-in PIN" : "Mã PIN quay số", + "Demote from moderator" : "Hạ uy tín từ người kiểm duyệt", + "Promote to moderator" : "Giới thiệu người kiểm duyệt", + "Resend invitation" : "Gửi lại lời mời", + "Remove" : "Xoá", + "Add users or groups" : "Add users or groups", + "Add users" : "Thêm người dùng", + "Add groups" : "Thêm nhóm", + "Add other sources" : "Thêm các nguồn khác", + "Add emails" : "Thêm email", + "Integrations" : "Các bộ tích hợp", + "Searching …" : "Đang tìm kiếm ...", + "Search for more users" : "Tìm kiếm thêm người dùng", + "Search or add participants" : "Tìm kiếm hoặc thêm người dùng", + "An error occurred while adding the participants" : "Đã xảy ra lỗi khi thêm người tham gia", + "Participants" : "Người tham gia", + "Chat" : "Trò chuyện", + "Details" : "Chi tiết", + "No results found" : "Không tìm thấy kết quả", + "Load more results" : "Tải thêm kết quả", + "Projects" : "Dự án", + "Link to a conversation" : "Liên kết đến một cuộc trò chuyện", + "Search conversations or users" : "Tìm kiếm cuộc trò chuyện hoặc người dùng", + "Select conversation" : "Chọn cuộc trò chuyện", + "Edit display name" : "Chỉnh sửa tên hiển thị", + "Notification settings" : "Cài đặt thông báo", + "Default language" : "Ngôn ngữ mặc định", + "Select location for attachments" : "Chọn vị trí cho tệp đính kèm", + "Error while setting attachment folder" : "Lỗi khi cấu hình thư mục tệp đính kèm", + "Error while setting read status privacy" : "Lỗi khi đặt quyền riêng tư của trạng thái đã đọc", + "Privacy" : "Bảo mật", + "Attachments folder" : "Thư mục đính kèm", + "Search" : "Tìm", + "Focus the chat input" : "Tập trung vào đầu vào trò chuyện", + "Unfocus the chat input to use shortcuts" : "Bỏ tập trung vào đầu vào trò chuyện để sử dụng các phím tắt", + "Shortcuts while in a call" : "Các phím tắt khi đang gọi điện", + "Microphone on and off" : "Bật và tắt micrô", + "Raise or lower hand" : "Giơ tay hoặc hạ tay", + "Push to talk or push to mute" : "Nhấn để nói hoặc tắt tiếng", + "Start call" : "Bắt đầu cuộc gọi", + "You will be able to join the call only after a moderator starts it." : "Bạn sẽ chỉ có thể tham gia cuộc gọi sau khi người kiểm duyệt bắt đầu cuộc gọi.", + "Screensharing options" : "Tùy chọn chia sẻ màn hình", + "Enable screensharing" : "Bật chia sẽ màn hình", + "Bad sent video and screen quality." : "Chất lượng màn hình và video đã gửi kém.", + "Bad sent screen quality." : "Chất lượng màn hình đã gửi kém.", + "Bad sent video quality." : "Chất lượng video đã gửi kém.", + "Bad sent audio, video and screen quality." : "Chất lượng âm thanh, video và màn hình được gửi kém.", + "Bad sent audio and screen quality." : "Chất lượng âm thanh và màn hình đã gửi kém.", + "Bad sent audio and video quality." : "Chất lượng âm thanh và video được gửi kém.", + "Bad sent audio quality." : "Chất lượng âm thanh đã gửi kém.", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không nhìn thấy màn hình của bạn.", + "Your internet connection or computer are busy and other participants might be unable to see you." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không nhìn thấy bạn.", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu và nhìn thấy bạn. Để cải thiện tình hình, hãy thử tắt video của bạn trong khi thực hiện chia sẻ màn hình.", + "Disable screenshare" : "Tắt chia sẻ màn hình", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu và nhìn thấy bạn. Để cải thiện tình hình, hãy thử tắt video của bạn.", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "Kết nối internet hoặc máy tính của bạn đang bận và những người tham gia khác có thể không hiểu bạn.", + "Screen sharing is not supported by your browser." : "Chia sẻ màn hình không được trình duyệt của bạn hỗ trợ.", + "Screen sharing requires the page to be loaded through HTTPS." : "Chia sẻ màn hình yêu cầu trang được tải qua HTTPS.", + "Screensharing requires the page to be loaded through HTTPS." : "Chia sẻ màn hình yêu cầu trang phải tải qua HTTPS.", + "An error occurred while starting screensharing." : "Đã xảy ra lỗi khi bắt đầu chia sẻ màn hình.", + "Show your screen" : "Hiện màn hình của bạn", + "Stop screensharing" : "Ngừng chia sẽ màn hình", + "Mute others" : "Tắt tiếng người khác", + "Keep" : "Giữ", + "Select a region" : "Chọn một khu vực", + "Message without mention" : "Tin nhắn không đề cập", + "Mention myself" : "Nhắc đến chính mình", + "The conversation does not exist" : "Cuộc trò chuyện không tồn tại", + "Join a conversation or start a new one!" : "Tham gia một cuộc trò chuyện hoặc bắt đầu một cuộc trò chuyện mới!", + "Duplicate session" : "Phiên trùng lặp", + "Join a conversation or start a new one" : "Tham gia cuộc trò chuyện hoặc bắt đầu một cuộc trò chuyện mới", + "Nextcloud URL" : "vWorkspace URL", + "Nextcloud user" : "Người dùng vWorkspace", + "User password" : "Mật khẩu người dùng", + "Talk conversation" : "Nói chuyện", + "Skip TLS verification" : "Bỏ qua xác minh TLS", + "Matrix server URL" : "URL máy chủ ma trận", + "User" : "Người dùng", + "Matrix channel" : "Kênh ma trận", + "Mattermost server URL" : "URL máy chủ Mattermost", + "Mattermost user" : "Người dùng Mattermost", + "Team name" : "Tên nhóm", + "Channel name" : "Tên kênh", + "Rocket.Chat server URL" : "URL máy chủ Rocket.Chat", + "Rocket.Chat channel" : "Kênh Rocket.Chat", + "Zulip server URL" : "URL máy chủ Zulip", + "Bot user name" : "Tên người dùng bot", + "Bot API key" : "Khóa API bot", + "Zulip channel" : "Kênh Zulip", + "API token" : "Tín chỉ API", + "Slack channel" : "Kênh Slack", + "Server ID or name" : "ID hoặc tên máy chủ", + "Channel" : "Kênh", + "Login" : "Login", + "Chat ID" : "ID trò chuyện", + "IRC server URL (e.g. chat.freenode.net:6667)" : "URL máy chủ IRC (ví dụ: chat.freenode.net:6667)", + "Nickname" : "Biệt danh", + "Connection password" : "Mật khẩu kết nối", + "IRC channel" : "Kênh IRC", + "Channel password" : "Kênh mật khẩu", + "NickServ nickname" : "Biệt hiệu NickServ", + "NickServ password" : "Mật khẩu NickServ", + "Use TLS" : "Sử dụng TLS", + "Use SASL" : "Sử dụng SASL", + "Tenant ID" : "ID người thuê", + "Client ID" : "ID khách hàng", + "Team ID" : "ID nhóm", + "Thread ID" : "ID chủ đề", + "XMPP/Jabber server URL" : "URL máy chủ XMPP/Jabber", + "MUC server URL" : "URL máy chủ MUC", + "Jabber ID" : "Mã Jabber", + "Media" : "Phương tiện", + "Locations" : "Các địa điểm", + "Audio" : "Âm thanh", + "Show all files" : "Hiện tất cả tệp", + "Group" : "Nhóm", + "Team" : "Đội", + "You: {lastMessage}" : "Bạn: {lastMessage}", + "{relativeDate}, {absoluteDate}" : "{relativeDate}, {absoluteDate}", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "Bạn đang cố gắng tham gia một cuộc trò chuyện trong khi có một phiên hoạt động trong một cửa sổ hoặc thiết bị khác. Điều này hiện không được vWorkspace Talk hỗ trợ. Bạn muốn làm gì?", + "Leave this page" : "Rời khỏi trang này", + "Join here" : "Tham gia tại đây", + "Post to a conversation" : "Đăng lên một cuộc trò chuyện", + "Post to conversation" : "Đăng lên cuộc trò chuyện", + "Error occurred while allowing guests" : "Đã xảy ra lỗi khi cho phép khách", + "Error occurred while disallowing guests" : "Đã xảy ra lỗi khi không cho phép khách", + "Error occurred when restricting the conversation to moderator" : "Đã xảy ra lỗi khi giới hạn cuộc trò chuyện với người kiểm duyệt", + "Error occurred when opening the conversation to everyone" : "Đã xảy ra lỗi khi mở cuộc trò chuyện với mọi người", + "Conversation password has been saved" : "Mật khẩu cuộc trò chuyện đã được lưu", + "Conversation password has been removed" : "Mật khẩu cuộc trò chuyện đã bị xóa", + "Error occurred while saving conversation password" : "Đã xảy ra lỗi khi lưu mật khẩu cuộc trò chuyện", + "Could not post message: {errorMessage}" : "Không thể đăng thông báo: {errorMessage}", + "An error occurred while fetching the participants" : "Đã xảy ra lỗi khi tìm nạp những người tham gia", + "Could not send invitation to {actorId}" : "Không thể gửi lời mời đến {actorId}", + "Invitations sent" : "Lời mời đã được gửi", + "Error occurred when sending invitations" : "Đã xảy ra lỗi khi gửi lời mời", + "Error while uploading file \"{fileName}\"" : "Lỗi khi tải lên tệp \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "Không đủ dung lượng trống để tải lên tệp \"{fileName}\"", + "Error while sharing file" : "Lỗi khi chia sẻ tệp", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Trình duyệt bạn đang sử dụng không được vWorkspace Talk hỗ trợ đầy đủ. Vui lòng sử dụng phiên bản mới nhất của Mozilla Firefox, Microsoft Edge, Google Chrome, Opera hoặc Apple Safari.", + "Later today – {timeLocale}" : "Sau này - {timeLocale}", + "Tomorrow – {timeLocale}" : "Ngày mai - {timeLocale}", + "This weekend – {timeLocale}" : "Cuối tuần này - {timeLocale}", + "Next week – {timeLocale}" : "Tuần sau - {timeLocale}", + "Lost connection to signaling server. Trying to reconnect." : "Mất kết nối với máy chủ báo hiệu. Đang cố gắng kết nối lại.", + "Please reload the page." : "Vui lòng tải lại trang.", + "Do not disturb" : "Đừng làm phiền", + "Away" : "Tạm vắng", + "Microphone {number}" : "Micrô {number}", + "Camera {number}" : "Máy ảnh {number}", + "Speaker {number}" : "Người nói {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "Có vẻ như bạn đang nói chuyện khi bị tắt tiếng, vui lòng tự bật tiếng để người khác nghe thấy bạn", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "Không thể thiết lập kết nối với ít nhất một người tham gia. Máy chủ TURN có thể cần thiết cho tình huống của bạn. Vui lòng yêu cầu quản trị viên của bạn thiết lập một tài liệu sau {linkstart} tài liệu này {linkend}.", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "Quá trình này mất nhiều thời gian hơn dự kiến. Các quyền phương tiện đã được cấp (hoặc bị từ chối)? Nếu có, vui lòng khởi động lại trình duyệt của bạn, vì âm thanh và video không thành công", + "Access to microphone & camera is only possible with HTTPS" : "Chỉ có thể truy cập micrô và máy ảnh bằng HTTPS", + "Please move your setup to HTTPS" : "Vui lòng di chuyển thiết lập của bạn sang HTTPS", + "Access to microphone & camera was denied" : "Quyền truy cập vào micrô và máy ảnh đã bị từ chối", + "WebRTC is not supported in your browser" : "WebRTC không được hỗ trợ trong trình duyệt của bạn", + "Please use a different browser like Firefox or Chrome" : "Vui lòng sử dụng một trình duyệt khác như Firefox hoặc Chrome", + "Error while accessing microphone & camera" : "Lỗi khi truy cập micrô và máy ảnh", + "%s Talk on your mobile devices" : "%sNói chuyện trên thiết bị di động của bạn ", + "Join conversations at any time, anywhere, on any device." : "Tham gia các cuộc trò chuyện mọi lúc, mọi nơi, trên mọi thiết bị.", + "Android app" : "Ứng dụng Android", + "iOS app" : "Ứng dụng IOS", + "__language_name__" : "Tiếng Việt", + "Tasks" : "Nhiệm vụ", + "Notes" : "Ghi chú", + "Your privacy setting has been saved" : "Các thiết lập quyền riêng tư của bạn đã được lưu", + "Failed to save sounds setting" : "Không thể lưu cài đặt âm thanh", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "Bạn đã tham gia cuộc trò chuyện trong một cửa sổ hoặc thiết bị khác. Điều này hiện không được vWorkspace Talk hỗ trợ nên phiên này đã bị đóng." +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/zh_CN.js b/l10n/zh_CN.js new file mode 100644 index 0000000..6fb965b --- /dev/null +++ b/l10n/zh_CN.js @@ -0,0 +1,2260 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "一个对话", + "(Duration %s)" : "(时长 %s)", + "You attended a call with {user1}" : "您参加了{user1}的通话", + "_%n guest_::_%n guests_" : ["%n 位访客"], + "You attended a call with {user1} and {user2}" : "您参加了{user1}和{user2}的通话", + "You attended a call with {user1}, {user2} and {user3}" : "您参加了{user1},{user2}和{user3} 的通话", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您参加了{user1},{user2},{user3}和{user4}的通话", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您参加了{user1},{user2},{user3},{user4}和{user5}的通话", + "_%n other_::_%n others_" : ["及另外%n人"], + "{actor} invited you to {call}" : "{actor}邀请您加入{call}", + "You were invited to a conversation or had a call" : "您被邀请加入一个对话或一个通话", + "Other activities" : "其他活动", + "Talk" : "通话", + "Guest" : "访客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 欢迎来到 Nextcloud 通话!\n此对话将向您介绍Nextcloud通话中的新功能", + "## New in Talk %s" : "## Talk %s 的新功能", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge和Safari浏览器现可用于参与音视频通话", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 一对一的对话现在是持久性的,并且不会意外地变成群组对话。另外,当其中一个参与者离开对话时,对话不会被自动删除。只有当双方都离开时,对话才会从服务器上删除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您可以在聊天中输入 \"@all\" 以通知所有参与者", + "- With the \"arrow-up\" key you can repost your last message" : "- 您可以使用 \"向上\" 键重复输入您的上一条消息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- 通话应用现在可以支持命令了,将 \"/help\" 作为聊天消息发出以查看您的管理员是否配置了一些命令", + "- With projects you can create quick links between conversations, files and other items" : "- 您可以使用项目来在对话、文件和其他项目间创建快速链接", + "- You can now mention guests in the chat" : "-您现在可以在聊天中提及访客", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 对话现在可以设置一个大厅。 这将使主持人可以加入聊天并开始通话以准备会议,而用户和访客则必须等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您现在可以直接回复消息,为其他用户提供更多关于您的消息的上下文", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 现在,搜索对话和参与者也将过滤您现有的对话,使查找以前的对话更加容易", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 现在,您可以在安装圈子应用后将自定义用户组添加到对话中", + "- Check out the new grid and call view" : "- 体验一下新的排列和通话界面", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您现在可以从您的设备上传或拖拽文件到一场对话", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 分享文件现在可以直接从聊天界面使用查看应用打开", + "- You can now search for chats and messages in the unified search in the top bar" : "- 你现在可以在顶栏的统一搜索框搜索聊天和消息", + "- Spice up your messages with emojis from the emoji picker" : "- 用从表情选择器挑选来的表情符号为您的消息加点料", + "- You can now change your camera and microphone while being in a call" : "- 您现在可以在通话时切换您的摄像头和麦克风", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 给你的对话提供一些背景和描述,并打开它,以便登录用户可以找到它并加入他们自己", + "- See a read status and send failed messages again" : "- 查看阅读状态,并再次发送失败的消息", + "- Raise your hand in a call with the R key" : "- 在通话中按 R 键举手", + "- Join the same conversation and call from multiple devices" : "- 加入同一对话并从多个设备进行呼叫", + "- Send voice messages, share your location or contact details" : "- 发送语音消息,分享您的位置或联系方式", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 在对话中加入群组,群组成员会自动被添加为参与者", + "- A preview of your audio and video is shown before joining a call" : "- 加入通话前会显示音视频预览", + "- You can now blur your background in the newly designed call view" : "- 你现在可以在新设计的通话视图中模糊你的背景", + "- Moderators can now assign general and individual permissions to participants" : "- 主持人现在可以为参与者分配一般和单独权限", + "- You can now react to chat messages" : "- 您现在可以对聊天消息做出回应", + "- In the sidebar you can now find an overview of the latest shared items" : "- 现在您可以在侧边栏中找到最近已分享项目的概况", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用投票搜集他人意见或确定日期", + "- Configure an expiration time for chat messages" : "- 配置聊天消息的过期时间", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在不通知他人的情況下开始通话。通话开始后,您可以发送单独的通话通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不紧急的情況下发送聊天消息而不通知收讯人", + "- Emojis can now be autocompleted by typing a \":\"" : "- 现在可以通过输入“:”来自动补全表情符号", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 通过输入“/”来使用新的智能选择器链接各种项目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人现在可以创建分组讨论室(需要高性能后端)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 现在可以录制通话(需要高性能后端)", + "- Conversations can now have an avatar or emoji as icon" : "- 对话现在可以使用头像或者表情符号来作为图标", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 视频通话除了模糊背景外,现在也可以使用虚拟背景了", + "- Reactions are now available during calls" : "- 现在可以在通话期间做出回应", + "- Typing indicators show which users are currently typing a message" : "- 输入指示器显示目前正在输入的用户", + "- Groups can now be mentioned in chats" : "- 现在可以在聊天中提及群组", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 如果注册了转录提供者应用,会自动转录通话录制", + "- Chat messages can be translated if a translation provider app is registered" : "- 如果注册了提供翻译的应用程序,则可以翻译聊天消息", + "- **Markdown** can now be used in _chat_ messages" : "- _聊天信息_ 中可以使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- 支持使用 Webhook 接入机器人。详情请参考文档 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 为聊天消息设置稍后提醒", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用 **自我备注** 对话在您的设备之间做笔记和共享信息", + "- Captions allow to send a message with a file at the same time" : "- 字幕允许同时发送消息和文件", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 现在在共享屏幕时可以看到演讲者的视频,并且通话反应以动画形式显示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登录的作者和主持人现在可以在 6 小时内编辑消息", + "- Unsent message drafts are now saved in your browser" : "- 未发送的消息草稿现在会保存在浏览器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 现在可以与其他 Talk 服务器以联合方式进行文本聊天", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人现在可以封禁账号和访客,以防止他们重新加入对话", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 对话中现在会显示来自链接日历活动和外出接替者的预定的通话", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 现在可以与其他 Talk 服务器以联合方式进行通话(需要高性能后端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 引入适用于 Windows、macOS 和 Linux 的 Nextcloud Talk 桌面客户端:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud 助手总结通话记录和聊天中的未读消息", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 改进了会议功能,通过电子邮件地址识别受邀访客、导入参与者列表、起草投票和下载通话参与者列表", + "- Archive conversations to stay focused" : "- 将对话存档以保持专注", + "- Schedule a meeting into your calendar from within a conversation" : "- 从对话中将会议安排到您的日历中", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右侧边栏中搜索当前对话的消息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的紧凑列表(在通话设置中启用)一眼就能看到更多对话", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 会议对话现在可以同步日历中的标题和描述,并使用搜索过滤器隐藏,直到接近开始时才显示", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知设置中将对话标记为敏感,以在对话列表和通知中隐藏消息内容", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 要在“勿扰”期间接收推送通知,请将对话标记为重要", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 将其他参与者添加到一对一通话中,以便即时创建新的群组通话", + "- Use threads to keep your chat and discussions organized" : "- 使用帖子来组织您的聊天和讨论", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通话期间现在可以进行实时转录(需要实时转录外部应用和高性能后端)", + "- Moderators can now pin messages so they are kept at the top" : "- 主持人现在可以置顶消息,使其始终在顶部显示", + "- Schedule a message to send it at a later time" : "- 安排消息以便稍后发送", + "_All %n participant_::_All %n participants_" : ["全部 %n 位参与者"], + "Talk updates ✅" : "通话应用更新 ✅", + "Reaction deleted by author" : "回应被作者删除", + "{actor} created the conversation" : "{actor}创建了对话", + "You created the conversation" : "您创建了对话", + "System created the conversation" : "系统创建了对话", + "An administrator created the conversation" : "管理员创建了这个对话", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}将对话“%1$s”重命名为了“%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您将对话 \"%1$s\" 重命名为 \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "一位管理员将对话从“%1$s”重命名为“%2$s”", + "{actor} set the description" : "{actor} 设置了描述", + "You set the description" : "你设置了描述", + "An administrator set the description" : "一名管理员设置了描述", + "{actor} removed the description" : "{actor} 移除了描述", + "You removed the description" : "您移除了描述", + "An administrator removed the description" : "一位管理员移除了描述", + "You started a silent call" : "您发起了一个静默通话", + "Outgoing silent call" : "静默去电", + "{actor} started a silent call" : "{actor} 发起了一个静默通话", + "Incoming silent call" : "静默来电", + "You started a call" : "您开始了一个通话", + "Outgoing call" : "去电", + "{actor} started a call" : "{actor} 开始了一个通话", + "Incoming call" : "来电", + "{actor} joined the call" : "{actor} 加入了通话", + "You joined the call" : "您加入了通话", + "{actor} left the call" : "{actor} 离开了通话", + "You left the call" : "您离开了通话", + "{actor} unlocked the conversation" : "{actor}解锁了对话", + "You unlocked the conversation" : "您解锁了对话", + "An administrator unlocked the conversation" : "一位管理员解锁了对话", + "{actor} locked the conversation" : "{actor}锁定了对话", + "You locked the conversation" : "您锁定了对话", + "An administrator locked the conversation" : "一位管理员锁定了对话", + "{actor} limited the conversation to the current participants" : "{actor}将对话限于当前参与者", + "You limited the conversation to the current participants" : "你将对话限制在当前参与者范围内", + "An administrator limited the conversation to the current participants" : "管理员将对话限于当前参与者", + "{actor} opened the conversation to registered users" : "{actor} 向注册用户开放了对话", + "You opened the conversation to registered users" : "你向注册用户开放了对话", + "An administrator opened the conversation to registered users" : "管理员向注册用户开放了对话", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已注册用户和通过访客应用创建的账号开放了此对话", + "You opened the conversation to registered users and users created with the Guests app" : "你向已注册用户和通过访客应用创建的账号开放了此对话", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理员向已注册用户和通过访客应用创建的账号开放了此对话", + "The conversation is now open to everyone" : "此对话现在对所有人开放", + "{actor} opened the conversation to everyone" : "{actor}将对话开放给所有人", + "You opened the conversation to everyone" : "您将对话开放给所有人", + "{actor} restricted the conversation to moderators" : "{actor}将对话限制到与主持人之间", + "You restricted the conversation to moderators" : "你将对话限制到与主持人之间", + "{actor} started breakout rooms" : "{actor}开始了分组讨论室", + "You started breakout rooms" : "您开始了分组讨论室", + "{actor} stopped breakout rooms" : "{actor}停止了分组讨论室", + "You stopped breakout rooms" : "您停止了分组讨论室", + "{actor} allowed guests" : "{actor} 允许了访客加入", + "You allowed guests" : "您允许了访客加入", + "An administrator allowed guests" : "一位管理员允许了访客", + "{actor} disallowed guests" : "{actor} 禁止了访客加入", + "You disallowed guests" : "您禁止了访客加入", + "An administrator disallowed guests" : "一位管理员禁止了访客", + "{actor} set a password" : "{actor} 设置了一个密码", + "You set a password" : "您设置了一个密码", + "An administrator set a password" : "一位管理员设置了口令", + "{actor} removed the password" : "{actor} 移除了密码", + "You removed the password" : "您移除了密码", + "An administrator removed the password" : "一位管理员移除了口令", + "{actor} added {user}" : "{actor} 添加了 {user}", + "You joined the conversation" : "您加入了对话", + "{actor} joined the conversation" : "{actor}加入了对话", + "You added {user}" : "您添加了 {user}", + "{actor} added you" : "{actor} 添加了您", + "An administrator added you" : "一位管理员添加了您", + "An administrator added {user}" : "一位管理员添加了 {user}", + "You left the conversation" : "您离开了对话", + "{actor} left the conversation" : "{actor}离开了对话", + "{actor} removed {user}" : "{actor} 移除了 {user}", + "You removed {user}" : "您移除了 {user}", + "{actor} removed you" : "{actor} 移除了您", + "An administrator removed you" : "一位管理员移除了您", + "An administrator removed {user}" : "一位管理员移除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀请了 {federated_user}", + "You invited {federated_user}" : "你邀请了 {federated_user}", + "You accepted the invitation" : "您接收了邀请", + "{actor} invited you" : "{actor} 邀请了您", + "An administrator invited you" : "管理员邀请了您", + "An administrator invited {federated_user}" : "管理员邀请了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀请", + "{actor} removed {federated_user}" : "{actor} 移除了{federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您拒绝了邀请", + "An administrator removed {federated_user}" : "管理员移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 拒绝了邀請", + "{actor} added group {group}" : "{actor} 添加了小组 {group}", + "You added group {group}" : "你添加了小组 {group}", + "An administrator added group {group}" : "一名管理员添加了小组 {group}", + "{actor} removed group {group}" : "{actor} 删除了小组 {group}", + "You removed group {group}" : "你删除了小组 {group}", + "An administrator removed group {group}" : "一名管理员删除了小组 {group}", + "{actor} added team {circle}" : "{actor} 添加了团队 {circle}", + "You added team {circle}" : "您添加了团队 {circle}", + "An administrator added team {circle}" : "管理员添加了团队 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了团队 {circle}", + "You removed team {circle}" : "您移除了团队 {circle}", + "An administrator removed team {circle}" : "管理员移除了团队 {circle}", + "{actor} added {phone}" : "{actor} 添加了 {phone}", + "You added {phone}" : "你添加了 {phone}", + "An administrator added {phone}" : "管理员添加了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "你移除了 {phone}", + "An administrator removed {phone}" : "管理员移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor}将{user}提升为主持人", + "You promoted {user} to moderator" : "您将{user}提升为主持人", + "{actor} promoted you to moderator" : "{actor}提升您为主持人", + "An administrator promoted you to moderator" : "一位管理员将您提升为主持人", + "An administrator promoted {user} to moderator" : "一位管理员将{user}提升为主持人", + "{actor} demoted {user} from moderator" : "{actor}将{user}撤销主持人", + "You demoted {user} from moderator" : "您将{user}撤销主持人", + "{actor} demoted you from moderator" : "{actor}将您撤销主持人", + "An administrator demoted you from moderator" : "一位管理员将您撤销主持人", + "An administrator demoted {user} from moderator" : "一位管理员将{user}撤销主持人", + "{actor} shared a file which is no longer available" : "{actor}分享了一个不再可用的文件", + "You shared a file which is no longer available" : "您分享了一个不再可用的文件", + "File shares are currently not supported in federated conversations" : "联合对话现在不支持文件分享", + "The shared location is malformed" : "分享的位置变形", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 设置了 Matterbridge,使此对话与其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "你设置了 Matterbridge,以将此对话与其他聊天同步", + "{actor} created thread {title}" : "{actor} 创建了帖子 {title}", + "You created thread {title}" : "您创建了帖子 {title}", + "{actor} renamed thread {title}" : "{actor} 已将帖子重命名为 {title}", + "You renamed thread {title}" : "您已将帖子重命名为 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 配置", + "You updated the Matterbridge configuration" : "你更新了 Matterbridge 配置", + "{actor} removed the Matterbridge configuration" : "{actor} 移除了 Matterbridge 配置", + "You removed the Matterbridge configuration" : "你移除了 Matterbridge 配置", + "{actor} started Matterbridge" : "{actor} 启动了 Matterbridge", + "You started Matterbridge" : "你启动了 Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "你停止了 Matterbridge", + "{actor} deleted a message" : "{actor}删除了一条消息", + "You deleted a message" : "你删除了一条消息", + "{actor} edited a message" : "{actor} 编辑了一条信息", + "You edited a message" : "您编辑了一条信息", + "{actor} pinned a message" : "{actor} 置顶了一条消息", + "You pinned a message" : "您置顶了一条消息", + "{actor} unpinned a message" : "{actor} 取消置顶了一条消息", + "Message was automatically unpinned" : "消息已自动取消置顶", + "You unpinned a message" : "您取消置顶了一条消息", + "{actor} deleted a reaction" : "{actor} 刪除了一个回应", + "You deleted a reaction" : "你删除了一个回应", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您将消息过期时间设置为%n星期"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您将消息过期时间设置为%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您将消息过期时间设置为%n小时"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您将消息过期时间设置为%n分钟"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}将消息过期时间设置为%n星期"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}将消息过期时间设置为%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}将消息过期时间设置为%n小时"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}将消息过期时间设置为%n分钟"], + "{actor} disabled message expiration" : "{actor}禁用了消息过期时间", + "You disabled message expiration" : "您禁用了消息过期时间", + "{actor} cleared the history of the conversation" : "{actor}清除了对话历史", + "You cleared the history of the conversation" : "你清除了对话历史", + "{actor} set the conversation picture" : "{actor}设置了对话图片", + "You set the conversation picture" : "您设置了对话图片", + "{actor} removed the conversation picture" : "{actor}移除了对话图片", + "You removed the conversation picture" : "您设置了对话图片", + "{actor} ended the poll {poll}" : "{actor} 结束了投票 {poll}", + "You ended the poll {poll}" : "您结束了投票 {poll}", + "{actor} started the video recording" : "{actor}开始视频录制", + "You started the video recording" : "您开始视频录制", + "{actor} stopped the video recording" : "{actor}停止视频录制", + "You stopped the video recording" : "您停止视频录制", + "{actor} started the audio recording" : "{actor}开始音频录制", + "You started the audio recording" : "您开始音频录制", + "{actor} stopped the audio recording" : "{actor}停止音频录制", + "You stopped the audio recording" : "您停止音频录制", + "The recording failed" : "录制失败", + "Someone voted on the poll {poll}" : "有人在投票 {poll} 中投票了", + "Message deleted by author" : "消息被作者删除了", + "Message deleted by {actor}" : "消息被 {actor} 删除了", + "Message deleted by you" : "消息被你删除了", + "Deleted user" : "删除用户", + "Unknown number" : "未知号码", + "Administration" : "管理员", + "System" : "系统", + "%s (guest)" : "%s(访客)", + "Missed call" : "未接来电", + "Unanswered call" : "未接通话", + "Call ended (Duration {duration})" : "通话结束(时长 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "通话结束,因为已达到最大通话时长(时长 {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} 结束了通话(时长 {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["与 %n 位访客的通话已结束,因为已达到最大通话时长(时长 {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["与 %n 位访客的通话已结束(时长 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 结束了与 %n 位访客的通话(时长 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1} ended (Duration {duration})" : "与 {user1} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 结束了与 {user1} 的通话(时长 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1} 和 {user2} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "与 {user1} 和 {user2} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 结束了与 {user1} 和 {user2} 的通话(时长 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2} 和 {user3} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "与 {user1}、{user2} 和 {user3} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 和 {user3} 的通话(时长 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2}、{user3} 和 {user4} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "与 {user1}、{user2}、{user3} 和 {user4} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 、 {user3} 和 {user4} 的通话(时长 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2}、{user3}、{user4} 和 {user5} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "与 {user1}、{user2}、{user3}、{user4} 和 {user5} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 、 {user3}、{user4} 和 {user5} 的通话(时长 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中来自 {user} 的消息", + "Message of {user}" : "{user} 的消息", + "Message of a deleted user in {conversation}" : "{conversation} 中已删除用户的消息", + "Talk conversations" : "对话", + "Talk to %s" : "和 %s 对话", + "An error occurred. Please contact your administrator." : "发生了一个错误。请联系你的管理员。", + "App disabled" : "应用已禁用", + "Conversation subfolders are disabled" : "对话子文件夹已禁用", + "Storage quota exceeded" : "超出存储限额", + "Could not prepare conversation folder" : "无法准备对话文件夹", + "File not found" : "文件未找到", + "Path must point to a file" : "路径必须指向文件", + "File is not inside the conversation draft folder for this room" : "文件不在此聊天室的对话草稿文件夹中", + "File is not shared, or shared but not with the user" : "文件未分享,或没有分享给用户", + "No account available to delete." : "没有可删除的账号。", + "Poll" : "投票", + "Password needs to be set" : "需要设置密码", + "Uploading the file failed" : "上传文件失败", + "No image file provided" : "未提供图片文件", + "File is too big" : "文件太大", + "Invalid file provided" : "提供了无效文件", + "Invalid image" : "无效图片", + "Unknown filetype" : "未知的文件类型", + "Talk mentions" : "通话提及", + "More conversations" : "更多对话", + "Say hi to your friends and colleagues!" : "跟您的朋友和同事打个招呼!", + "No unread mentions" : "无未读的提及", + "Call in progress" : "通话中...", + "You were mentioned" : "有人提及了您", + "Write to conversation" : "向对话写入", + "Writes event information into a conversation of your choice" : "将活动信息写入您选择的对话", + "Missing email field in header line" : "标题行中缺少电子邮件字段", + "Following lines are invalid: %s" : "以下行无效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀请您加入对话“%2$s”。", + "You were invited to conversation \"%s\"." : "您已受邀加入对话“%s”。", + "Conversation invitation" : "对话邀请", + "Scheduled time" : "预定时间", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "你也可以通过电话拨号,详情如下 ", + "Dial-in information" : "拨号信息", + "Meeting ID" : "会议ID", + "Your PIN" : "您的 PIN 码", + "Click the button below to join the lobby now." : "点击下方按钮立即加入大厅。", + "Click the link below to join the lobby now." : "点击下方链接立即加入大厅。", + "Join lobby for \"%s\"" : "加入“%s”的大厅", + "Click the button below to join the conversation now." : "点击下方按钮立即加入对话。", + "Click the link below to join the conversation now." : "点击下方链接立即加入对话。", + "Join \"%s\"" : "加入“%s”", + "Meeting" : "会议", + "Password request: %s" : "密码请求: %s", + "Private conversation" : "私有对话", + "Deleted user (%s)" : "已删除用户(%s)", + "Failed to upload call recording" : "上传通话录制失败", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "录制服务器上传通话{call}的录制失败。请联系管理员。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "忽略通知", + "Call recording now available" : "通话录制现在可用", + "The recording for the call in {call} was uploaded to {file}." : "{call}中的通话录制已上传到{file}。", + "Transcript now available" : "转录现在可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 通话的转录已上传至 {file}。", + "Failed to transcript call recording" : "无法转录通话录制", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "服务器无法转录 {call} 中 {file} 的通话录音。请联系管理员。", + "Call summary now available" : "通话摘要现已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 中的通话摘要已上传到 {file}。", + "Failed to summarize call recording" : "无法总结通话记录", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "服务器无法总结 {call} 中的通话在 {file} 上的录音。请联系管理员。 ", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀请您加入 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "拒绝", + "{user1} invited you to a federated conversation" : "{user1} 邀请您加入联合对话", + "Someone reacted" : "有人做出了回应", + "New message" : "新消息", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通知", + "Someone reacted in a private conversation" : "有人在私人对话中做出了回应", + "You received a message in a private conversation" : "您在私人对话中收到了一条消息", + "Reminder in a private conversation" : "私人对话中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人对话中提及你", + "Notification in a private conversation" : "私人对话中的通知", + "Reminder: You in {call}" : "提醒:你在 {call} 中", + "Reminder: {user} in {call}" : "提醒: {user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已删除的用户在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:访客 {guest} 在 {call} 中", + "Reminder: Guest in {call}" : "提醒:访客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 表示了 {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中表示了 {reaction}", + "Deleted user reacted with {reaction} in {call}" : "已删除的用户在 {call} 中表示了 {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "访客 {guest} 在 {call} 中表示了 {reaction}", + "Guest reacted with {reaction} in {call}" : "访客在 {call} 中表示了 {reaction}", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "删除了 {call} 中的用户", + "{guest} (guest) in {call}" : "{guest} (访客) 位于 {call}", + "Guest in {call}" : "在 {call} 中的访客", + "{user} sent you a private message" : "{user}给您发了一条私信", + "{user} sent a message in conversation {call}" : "{user}在对话{call}中发了一条消息", + "A deleted user sent a message in conversation {call}" : "一位已删除的用户在对话{call}中发了一条消息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(访客)在对话{call}中发了一条消息", + "A guest sent a message in conversation {call}" : "一位访客在对话{call}中发了一条消息", + "{user} replied to your private message" : "{user}回复了您的私信", + "{user} replied to your message in conversation {call}" : "{user}在对话{call}中回复了您的消息", + "A deleted user replied to your message in conversation {call}" : "一个已删除的用户在对话{call}中回复了您的消息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(访客)在对话{call}中回复了您的消息", + "A guest replied to your message in conversation {call}" : "一个访客在对话{call}中回复了您的消息", + "Reminder: You in private conversation {call}" : "提醒:你在私密对话 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已删除的用户在私密对话 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私密对话中", + "Reminder: You in conversation {call}" : "提醒:你在对话 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在对话 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已删除的用户在对话 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:访客 {guest} 在对话 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:访客在对话 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user}对您的私信做出了{reaction}回应", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}在对话{call}中对您的消息做出了{reaction}回应", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "一位已删除的用户在对话{call}中对您的消息做出了{reaction}回应", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}(访客)在对话{call}中对您的消息做出了{reaction}回应", + "A guest reacted with {reaction} to your message in conversation {call}" : "访客在对话{call}中对您的消息做出了{reaction}回应", + "{user} mentioned you in a private conversation" : "{user} 在一个私人对话中提及了您", + "{user} mentioned group {group} in conversation {call}" : "{user}在对话{call}中提及了群组{group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在对话 {call} 中提及了团队 {team}", + "{user} mentioned everyone in conversation {call}" : "{user}在对话{call}中提及了所有人", + "{user} mentioned you in conversation {call}" : "{user} 在对话 {call} 中提及了您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了群组 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了团队 {team}", + "A deleted user mentioned everyone in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了所有人", + "A deleted user mentioned you in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了群组 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了团队 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了您 ", + "A guest mentioned group {group} in conversation {call}" : "一位访客在对话 {call} 中提及了群组 {group}", + "A guest mentioned team {team} in conversation {call}" : "一位访客在对话 {call} 中提及了团队 {team}", + "A guest mentioned everyone in conversation {call}" : "一位访客在对话 {call} 中提及了所有人", + "A guest mentioned you in conversation {call}" : "一位访客在对话 {call} 中提及了您 ", + "View message" : "查看消息", + "Dismiss reminder" : "取消提醒", + "View chat" : "查看聊天", + "{user} invited you to a group conversation: {call}" : "{user}邀请您加入一个小组对话:{call}", + "Join call" : "加入通话", + "Answer call" : "接听通话", + "{user} would like to talk with you" : "{user}想和您对话", + "Call back" : "回拨", + "You missed a call from {user}" : "您错过了来自 {user} 的一个通话", + "Accept call" : "接听通话", + "Incoming phone call from {call}" : "来自 {call} 的来电", + "You missed a phone call from {call}" : "您错过了来自 {call} 的通话", + "A group call has started in {call}" : "已在 {call} 小组中开始通话", + "You missed a group call in {call}" : "您在 {call} 中错过了一个组通话", + "{email} is requesting the password to access {file}" : "{email} 请求密码以访问 {file}", + "{email} tried to request the password to access {file}" : "{email} 尝试请求密码访问 {file}", + "Someone is requesting the password to access {file}" : "有人请求密码以访问 {file}", + "Someone tried to request the password to access {file}" : "有人试图要求密码访问 {file}", + "Open settings" : "打开设置", + "Hosted signaling server added" : "已添加托管的信令服务器", + "The hosted signaling server is now configured and will be used." : "托管的信令服务器现已配置并将被使用。", + "Hosted signaling server removed" : "已移除托管的信令服务器", + "The hosted signaling server was removed and will not be used anymore." : "托管的信令服务器已被移除且无法再使用。", + "Hosted signaling server changed" : "已更改托管的信令服务器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "托管信令服务器账号的状态已从 \"{oldstatus}\" 变更为 \"{newstatus}\"", + "pending" : "等待中", + "active" : "活动", + "expired" : "已过期", + "blocked" : "已封锁", + "error" : "错误", + "The certificate of {host} expires in {days} days" : "{host}的证书将在{days}天后过期", + "The certificate of {host} expired" : "{host}的证书已过期", + "Contact via Talk" : "通过通话应用联系", + "Open Talk" : "打开通话应用", + "Default" : "默认", + "Send messages, create threads, and start voice and video calls." : "发送消息、创建线程以及开始语音和视频通话。", + "Presentation" : "演示文稿", + "Voice room" : "语音室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通话,非常适合即时会议或自发会议。", + "Webinar" : "网络研讨会", + "Conversations" : "对话", + "Messages in current conversation" : "当前对话中的消息", + "{user}" : "{user}", + "Messages" : "消息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "在其他对话中的消息", + "One-to-one rooms always need to show the other users avatar" : "一对一的聊天室一律需要显示其他用户的邮箱", + "Invalid emoji character" : "无效的表情符号字符", + "Invalid background color" : "无效的背景颜色", + "Avatar image is not square" : "头像图像不是正方形", + "Room {number}" : "聊天室{number}", + "Other" : "其他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "因测试服务器不可达,无法请求测试。请稍后重试。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此实例的身份验证存在一个问题。也许不能从外部访问它来验证它的 URL。", + "Something unexpected happened." : "出现了一些异常情况。", + "The URL is invalid." : "URL 无效", + "An HTTPS URL is required." : "要求使用 HTTPS 链接", + "The email address is invalid." : "电子邮件地址无效", + "The language is invalid." : "语言无效", + "The country is invalid." : "国家/地区无效", + "There is a problem with the request of the trial. Please check your logs for further information." : "试用请求有个问题。请检查你的日志以获得进一步的信息。", + "Too many requests are send from your servers address. Please try again later." : "你的服务器地址发送了太多的请求。请稍后再试。", + "There is already a trial registered for this Nextcloud instance." : "此Nextcloud实例已有一个已注册的trial。", + "Something unexpected happened. Please try again later." : "出现了一些异常情况。请稍后重试。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "因测试服务器行为异常,无法请求测试。请稍后重试。", + "Trial requested but failed to get account information. Please check back later." : "已请求测试但无法获取账号信息。请稍后检查。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此请求的验证操作有问题。可能是因为无法从外部访问来验证它的URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "由于测试服务器行为错误,无法获取帐户信息。请稍后再来查看。 ", + "There is a problem with fetching the account information. Please check your logs for further information." : "获取账号信息有问题。请查看您的日志以获取更多信息。", + "There is no such account registered." : "没有这个已注册账号。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "因测试服务器不可达,无法获取账号信息。请稍后检查。", + "Deleting the hosted signaling server account failed. Please check back later." : "删除托管信令服务器失败。请稍后检查。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "因测试服务器行为异常,无法删除账号。请稍后检查。", + "There is a problem with deleting the account. Please check your logs for further information." : "删除账号有问题。请查看您的日志以获取更多信息。", + "Too many requests are sent from your servers address. Please try again later." : "你的服务器地址发送了太多的请求。请稍后再试。 ", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "因测试服务器不可达,无法删除账号。请稍后检查。", + "Note to self" : "自我备注", + "A place for your private notes, thoughts and ideas" : "一个用于记录您的私人笔记、思考和想法的地方", + "Transcript is AI generated and may contain mistakes" : "转录是 AI 生成的,可能包含错误", + "Summary is AI generated and may contain mistakes" : "摘要是 AI 生成的,可能包含错误", + "Let's get started!" : "让我们开始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是安全的、自托管的通信平台,与 Nextcloud 生态系统无缝集成。\n\n#### Nextcloud Talk 的主要特点:\n\n* 私聊和群聊中的聊天和消息\n* 语音和视频通话\n* 文件分享和与其他 Nextcloud 应用的集成\n* 可定制的对话设置、审核和隐私控制\n* 网页、桌面和移动设备(iOS 和 Android)\n* 私密且安全的通信\n\n在[用户文档](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)中了解详情。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 欢迎使用 Nextcloud Talk\n\nNextcloud Talk 是与 Nextcloud 集成的私密且功能强大的消息应用。在私人或群组对话中聊天,通过语音和视频通话进行协作,组织网络研讨会和活动,定制您的对话等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 设置文本格式以创建丰富的消息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 语法来格式化您的消息。例如,应用 **加粗** 或 *倾斜* 格式,或 `将文本突出显示为代码`。您甚至可以创建表格,并在文本中添加标题。\n\n需要修正拼写错误或更改格式吗?通过点击消息菜单中的“编辑消息”来编辑您的消息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 添加附件和链接\n\n使用“+”按钮从 Nextcloud Hub 附加文件。分享文件和各种 Nextcloud 应用中的项目。一些应用甚至支持互动式微件,例如文本应用。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 让对话流畅:提及用户、回应消息等等\n\n您可以使用 %s 提及对话中的所有人,或者输入“@”并从列表中选择特定参与者的名称来提及他们。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回复消息,将其转发给其他聊天和联系人,或复制消息内容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智能选择器执行更多操作\n\n只需输入“/”或转到“+”菜单即可打开智能选择器,您可以在其中将各种内容附加到您的消息中。您可以配置智能选择器,使其能够从 Nextcloud 应用、GIF、地图位置、AI 生成的内容等添加项目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理对话设置\n\n在对话菜单中,您可以访问各种设置来管理对话,例如:\n* 编辑对话信息\n* 管理通知\n* 应用众多审核规则\n* 配置访问权限和安全性\n* 启用机器人\n* 以及更多!", + "Andorra" : "安道尔", + "United Arab Emirates" : "阿拉伯联合酋长国", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布达", + "Anguilla" : "安圭拉", + "Albania" : "阿尔巴尼亚", + "Armenia" : "亚美尼亚共和国", + "Angola" : "安哥拉", + "Antarctica" : "南极洲", + "Argentina" : "阿根廷", + "American Samoa" : "美属萨摩亚", + "Austria" : "奥地利", + "Australia" : "澳大利亚", + "Aruba" : "阿鲁巴", + "Åland Islands" : "奥兰", + "Azerbaijan" : "阿塞拜疆", + "Bosnia and Herzegovina" : "波斯尼亚和黑塞哥维那", + "Barbados" : "巴巴多斯", + "Bangladesh" : "孟加拉国", + "Belgium" : "比利时", + "Burkina Faso" : "布基纳法索", + "Bulgaria" : "保加利亚", + "Bahrain" : "巴林", + "Burundi" : "布隆迪", + "Benin" : "贝宁", + "Saint Barthélemy" : "圣巴泰勒米", + "Bermuda" : "百慕大", + "Brunei Darussalam" : "文莱达鲁萨兰国", + "Bolivia, Plurinational State of" : "多民族玻利维亚国", + "Bonaire, Sint Eustatius and Saba" : "博内尔岛,圣尤斯特歇斯岛和萨巴岛", + "Brazil" : "巴西", + "Bahamas" : "巴哈马", + "Bhutan" : "不丹", + "Bouvet Island" : "布维岛", + "Botswana" : "博茨瓦纳", + "Belarus" : "白俄罗斯", + "Belize" : "伯利兹", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科科斯(基林)群岛", + "Congo, the Democratic Republic of the" : "刚果民主共和国", + "Central African Republic" : "中非共和国", + "Congo" : "刚果", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "科特迪瓦", + "Cook Islands" : "库克群岛", + "Chile" : "智利", + "Cameroon" : "喀麦隆", + "China" : "中国", + "Colombia" : "哥伦比亚", + "Costa Rica" : "哥斯达黎加", + "Cuba" : "古巴", + "Cabo Verde" : "佛得角", + "Curaçao" : "库拉索", + "Christmas Island" : "圣诞岛", + "Cyprus" : "赛浦路斯", + "Czechia" : "捷克", + "Germany" : "德国", + "Djibouti" : "吉布提", + "Denmark" : "丹麦", + "Dominica" : "多米尼加", + "Dominican Republic" : "多明尼加共和国", + "Algeria" : "阿尔及利亚", + "Ecuador" : "厄瓜多尔", + "Estonia" : "爱沙尼亚", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄立特里亚", + "Spain" : "西班牙", + "Ethiopia" : "埃塞俄比亚", + "Finland" : "芬兰", + "Fiji" : "斐济", + "Falkland Islands (Malvinas)" : "福克兰群岛(马尔维纳斯群岛)", + "Micronesia, Federated States of" : "密克罗尼西亚联邦", + "Faroe Islands" : "法罗群岛", + "France" : "法国", + "Gabon" : "加蓬", + "United Kingdom of Great Britain and Northern Ireland" : "大不列颠及北爱尔兰联合王国", + "Grenada" : "格林纳达", + "Georgia" : "格鲁吉亚", + "French Guiana" : "法属圭亚那", + "Guernsey" : "根西岛", + "Ghana" : "加纳", + "Gibraltar" : "直布罗陀", + "Greenland" : "格陵兰", + "Gambia" : "冈比亚", + "Guinea" : "几内亚", + "Guadeloupe" : "瓜德罗普岛", + "Equatorial Guinea" : "赤道几内亚", + "Greece" : "希腊", + "South Georgia and the South Sandwich Islands" : "南乔治亚岛和南桑威奇群岛", + "Guatemala" : "危地马拉", + "Guam" : "关岛", + "Guinea-Bissau" : "几内亚-比绍", + "Guyana" : "圭亚那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德岛和麦当劳群岛", + "Honduras" : "洪都拉斯", + "Croatia" : "克罗地亚", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印度尼西亚", + "Ireland" : "爱尔兰", + "Israel" : "以色列", + "Isle of Man" : "马恩岛", + "India" : "印度", + "British Indian Ocean Territory" : "英属印度洋领地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗伊斯兰共和国", + "Iceland" : "冰岛", + "Italy" : "意大利", + "Jersey" : "泽西", + "Jamaica" : "牙买加", + "Jordan" : "约旦", + "Japan" : "日本", + "Kenya" : "肯尼亚", + "Kyrgyzstan" : "吉尔吉斯斯坦", + "Cambodia" : "柬埔寨", + "Kiribati" : "基里巴斯", + "Comoros" : "科摩罗", + "Saint Kitts and Nevis" : "圣基茨和尼维斯", + "Korea, Democratic People's Republic of" : "朝鲜民主主义人民共和国", + "Korea, Republic of" : "韩国(共和国)", + "Kuwait" : "科威特", + "Cayman Islands" : "开曼群岛", + "Kazakhstan" : "哈萨克斯坦", + "Lao People's Democratic Republic" : "老挝", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "圣卢西亚", + "Liechtenstein" : "列支敦士登", + "Sri Lanka" : "斯里兰卡", + "Liberia" : "利比里亚", + "Lesotho" : "莱索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "卢森堡", + "Latvia" : "拉脱维亚", + "Libya" : "利比亚", + "Morocco" : "摩洛哥", + "Monaco" : "摩纳哥", + "Moldova, Republic of" : "摩尔多瓦(共和国)", + "Montenegro" : "黑山", + "Saint Martin (French part)" : "圣马丁(法国部分)", + "Madagascar" : "马达加斯加", + "Marshall Islands" : "马绍尔群岛", + "North Macedonia" : "北马其顿", + "Mali" : "马里", + "Myanmar" : "缅甸", + "Mongolia" : "蒙古", + "Macao" : "澳门", + "Northern Mariana Islands" : "北马里亚纳群岛", + "Martinique" : "马提尼克", + "Mauritania" : "毛里塔尼亚", + "Montserrat" : "蒙特塞拉特", + "Malta" : "马耳他", + "Mauritius" : "毛里求斯", + "Maldives" : "马尔代夫", + "Malawi" : "马拉维", + "Mexico" : "墨西哥", + "Malaysia" : "马来西亚", + "Mozambique" : "莫桑比克", + "Namibia" : "纳米比亚", + "New Caledonia" : "新喀里多尼亚", + "Niger" : "尼日尔", + "Norfolk Island" : "诺福克岛", + "Nigeria" : "尼日利亚", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷兰", + "Norway" : "挪威", + "Nepal" : "尼泊尔", + "Nauru" : "瑙鲁", + "Niue" : "纽埃", + "New Zealand" : "新西兰", + "Oman" : "阿曼", + "Panama" : "巴拿马", + "Peru" : "秘鲁", + "French Polynesia" : "法属波利尼西亚", + "Papua New Guinea" : "巴布亚新几内亚", + "Philippines" : "菲律宾", + "Pakistan" : "巴基斯坦", + "Poland" : "波兰", + "Saint Pierre and Miquelon" : "圣皮埃尔和密克隆", + "Pitcairn" : "皮特凯恩", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕劳", + "Paraguay" : "巴拉圭", + "Qatar" : "卡塔尔", + "Réunion" : "留尼汪", + "Romania" : "罗马尼亚", + "Serbia" : "塞尔维亚", + "Russian Federation" : "俄罗斯联邦", + "Rwanda" : "卢旺达", + "Saudi Arabia" : "沙特阿拉伯", + "Solomon Islands" : "所罗门群岛", + "Seychelles" : "塞舌尔", + "Sudan" : "苏丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "圣赫勒拿,阿森松岛和特里斯坦达库尼亚", + "Slovenia" : "斯洛文尼亚", + "Svalbard and Jan Mayen" : "斯瓦尔巴和扬马延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "塞拉利昂", + "San Marino" : "圣马力诺", + "Senegal" : "塞内加尔", + "Somalia" : "索马里", + "Suriname" : "苏里南", + "South Sudan" : "南苏丹", + "Sao Tome and Principe" : "圣多美和普林西比", + "El Salvador" : "萨尔瓦多", + "Sint Maarten (Dutch part)" : "圣马丁(荷兰部分)", + "Syrian Arab Republic" : "阿拉伯叙利亚共和国", + "Eswatini" : "斯威士兰", + "Turks and Caicos Islands" : "特克斯和凯科斯群岛", + "Chad" : "乍得", + "French Southern Territories" : "法国南部领地", + "Togo" : "多哥", + "Thailand" : "泰国", + "Tajikistan" : "塔吉克斯坦", + "Tokelau" : "托克劳", + "Timor-Leste" : "东帝汶", + "Turkmenistan" : "土库曼斯坦", + "Tunisia" : "突尼斯", + "Tonga" : "汤加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "特立尼达和多巴哥", + "Tuvalu" : "图瓦卢", + "Taiwan, Province of China" : "台湾", + "Tanzania, United Republic of" : "坦桑尼亚联合共和国", + "Ukraine" : "乌克兰", + "Uganda" : "乌干达", + "United States Minor Outlying Islands" : "美国本土外小岛屿", + "United States of America" : "美利坚合众国", + "Uruguay" : "乌拉圭", + "Uzbekistan" : "乌兹别克斯坦", + "Holy See" : "教廷", + "Saint Vincent and the Grenadines" : "圣文森特和格林纳丁斯", + "Venezuela, Bolivarian Republic of" : "委内瑞拉玻利瓦尔共和国", + "Virgin Islands, British" : "英属维尔京群岛", + "Virgin Islands, U.S." : "美属维尔京群岛", + "Viet Nam" : "越南", + "Vanuatu" : "瓦努阿图", + "Wallis and Futuna" : "瓦利斯和富图纳群岛", + "Samoa" : "萨摩亚", + "Yemen" : "也门", + "Mayotte" : "马约特", + "South Africa" : "南非", + "Zambia" : "赞比亚", + "Zimbabwe" : "津巴布韦", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "无法检查 WASM 加载支持。请手动检查您的 Web 服务器是否提供 `.wasm` 文件。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的 Web 服务器设置不正确,无法传递 `.wasm` 文件。这通常是 Nginx 配置的问题。对于背景模糊,它需要调整以同时传递 `.wasm` 文件。将您的 Nginx 配置与我们文档中推荐的配置进行比较。", + "Talk configuration values" : "Talk 配置值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "只有系统 cron 支持强制通话时长。请启用系统 cron 或移除 `max_call_duration` 配置。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "由于技术限制,较小的 `max_call_duration` 值(当前设置为 %d)不可执行。后台任务仅每 5 分钟执行一次,因此使用风险自负。", + "Federation" : "联合", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "强烈推荐在启用 Talk 联合后配置“memcache.locking”。", + "High-performance backend" : "高性能后端 ", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未配置高性能后端——在没有高性能后端的情况下运行 Nextcloud Talk 仅适用于非常小规模的通话(最多 2-3 位参与者)。请设置高性能后端,以确保多位参与者的通话无缝进行。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "运行高性能后端“conversation_cluster”模式已被弃用,在即将推出的版本中将不再受支持。如今,高性能后端支持真正的集群,应该使用它。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定义多个高性能后端已被弃用,在即将推出的版本中将不再受支持。相反,负载均衡器应该与集群信令服务器一起设置,并在 Talk 设置中配置。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所用算法 %1$s 的已存储公钥与已存储的私钥不匹配。运行 %2$s 以修复此问题。", + "High-performance backend not configured correctly. Run %s for details." : "高性能后端配置不正确。运行 %s 以获取详情。", + "High-performance backend not configured correctly" : "高性能后端配置不正确", + "Error: Cannot connect to server" : "错误:无法连接到服务器 ", + "Error: Server did not respond with proper JSON" : "错误:服务器没有用正确的 JSON 响应", + "Error: Certificate expired" : "错误:证书已过期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "错误:Nextcloud 服务器和高性能后端服务器的系统时间不同步。请确保两台服务器都连接到时间服务器或手动同步它们的时间。", + "Could not get version" : "无法获取版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "错误:当前的运行版本为:{version},服务器需要更新以与此版本的 Talk 兼容", + "Error: Server responded with: {error}" : "错误:服务器回复:{error}", + "Error: Unknown error occurred" : "错误:发生未知错误", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:当前的运行版本为:{version},此版本的 Talk 中的下列功能不受服务器支持:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "强烈推荐在使用高性能后端运行 Nextcloud Talk 时配置内存缓存。", + "Client Push" : "客户端推送", + "Client Push is installed, this improves the punctuality of Talk notifications." : "客户端推送已安装,这将提高 Talk 通知的及时性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} 未安装。这可能会导致 Talk 通知延迟。", + "Recording backend" : "录制后端", + "Using the recording backend requires a High-performance backend." : "使用录制后端需要高性能后端。", + "No recording backend configured" : "未配置录制后端", + "SIP configuration" : "SIP 配置", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高性能后端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 电话号码不得以 + 或 0 开头。请移除或更新以下号码:\n{list}", + "No SIP backend configured" : "未配置 SIP 后端", + "Invalid date, date format must be YYYY-MM-DD" : "日期无效,日期格式必须为 YYYY-MM-DD", + "Conversation not found" : "未找到对话", + "Path is already shared with this conversation" : "路径已与此对话分享", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 进行聊天、视频和音频会议", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 进行聊天、视频和音频会议\n\n* 💬 **聊天** Nextcloud Talk 附带了简单的文本聊天功能,允许您从 Nextcloud 文件应用或本地设备分享或上传文件,并提及其他参与者。\n* 👥 **私人、群组、公开和密码保护的通话!**邀请某人、整个群组或发送公开链接以邀请通话。\n* 🌐 **联合聊天** 与其他 Nextcloud 服务器上的用户聊天\n* 💻 **屏幕共享!** 与通话参与者共享您的屏幕。\n* 🚀 **与其他 Nextcloud 应用集成** 如文件、日历、用户状态、仪表盘、流程、地图、智能选择器、联系人、Deck 等。\n* 🌉 **与其他聊天解决方案同步** 通过将 [Matterbridge](https://github.com/42wim/matterbridge/) 集成到 Talk 中,您可以轻松地将许多其他聊天解决方法同步到 Nextcloud Talk,反之亦然。", + "Leave call" : "离开通话", + "Navigating away from the page will leave the call in {conversation}" : "离开此页面也将中断 {conversation} 中的通话", + "Stay in call" : "保持通话", + "Error occurred when getting the conversation information" : "获取对话信息时出错", + "Discuss this file" : "讨论此文件", + "Share this file with others to discuss it" : "与他人分享此文件以讨论它", + "Share this file" : "分享此文件", + "Join conversation" : "加入对话", + "This conversation is password-protected." : "此对话受密码保护。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "我们检测到您的IP进行了多次无效密码尝试。因此,您的下一次登录最长会延迟30秒。", + "The password is wrong. Try again." : "用户名或密码错误!请重试", + "Password" : "密码", + "Submit" : "提交", + "Error requesting the password." : "请求密码错误。", + "Request password" : "需要密码", + "This conversation has ended" : "此对话已结束", + "Error occurred when joining the conversation" : "加入对话时发生错误", + "Close Talk sidebar" : "关闭通话应用侧边栏", + "Open Talk sidebar" : "打开通话应用侧边栏", + "Everyone" : "所有人", + "Users and moderators" : "用户和主持人", + "Moderators only" : "仅管理员", + "Disable calls" : "禁用通话", + "Save changes" : "保存更改", + "Saving …" : "正在保存……", + "Saved!" : "已保存!", + "Limit to groups" : "限制于分组", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "当至少一个分组被选择时,只有列出分组的成员才能成为对话的一分子。", + "Guests can still join public conversations." : "访客仍可加入公开对话。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "已不再能使用通话应用的用户在其以前的对话中仍会被列为参与者,他们的聊天消息也将被保留。", + "Limit using Talk" : "限制使用通话应用", + "Limit creating a public and group conversation" : "限制创建公开和群组对话", + "Limit creating conversations" : "限制创建对话", + "Limit starting a call" : "限制开始一个通话", + "Limit starting calls" : "限制开始通话", + "When a call has started, everyone with access to the conversation can join the call." : "当一个通话已开始时,能访问该对话的所有人都能加入通话", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此服务器安装了下列机器人。请参阅文档以获取一份现有的{linkstart2}机器人列表{linkend},或者了解{linkstart1}如何编写您自己的机器人{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此服务器上未安装任何机器人。请参阅文档以获取一份现有的{linkstart2}机器人列表{linkend},或者了解{linkstart1}如何编写您自己的机器人{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "为主持人锁定", + "Enabled" : "已启用", + "Disabled" : "已禁用", + "Bots settings" : "机器人设置", + "State" : "状况", + "Name" : "名称", + "Last error" : "上次错误", + "Total errors count" : "总错误数", + "Find more bots" : "查找更多机器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}共享设置页面{linkend}配置受信任的服务器。", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "联合聊天和通话已经可以工作了。附件处理将在未来的版本中推出。", + "Enable Federation in Talk app" : "在 Talk 应用中启用联合功能", + "Permissions" : "权限", + "Allow users to be invited to federated conversations" : "允许邀请用户加入联合对话", + "Allow users to invite federated users into conversation" : "允许用户邀请联合用户加入对话", + "Only allow to federate with trusted servers" : "只允许与受信任的服务器联合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "当至少选择了一个群组时,只有列出的群组中的用户可以邀请联合用户进行对话。", + "Groups allowed to invite federated users" : "允许邀请联合用户的群组", + "Select groups …" : "选择群组…", + "All messages" : "全部消息", + "@-mentions only" : "仅被 @ 提及的消息", + "Off" : "关闭", + "General settings" : "通用设置", + "Default notification settings" : "默认通知设置", + "Default group notification" : "默认分组通知", + "Default group notification for new groups" : "对新分组的默认分组通知", + "Integration into other apps" : "与其他应用的集成", + "Allow conversations on files" : "允许文件上的对话", + "Allow conversations on public shares for files" : "允许文件的公开分享上的对话", + "End-to-end encrypted calls" : "端到端加密通话", + "Enable encryption" : "启用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已配置 SIP 桥接的端到端加密通话需要更新版本的高性能后端和 SIP 桥接。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "移动客户端目前不支持端到端加密通话。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "点击上方按钮,表格中的信息将发送到 Struktur AG 的服务器。您可以在 {linkstart}spreed.eu{linkend} 上找到更多信息。", + "Pending" : "待定", + "Error" : "错误", + "Blocked" : "被阻止", + "Active" : "活动", + "Expired" : "已过期", + "Never" : "永不", + "The trial could not be requested. Please try again later." : "无法请求测试。请稍后重试。", + "The account could not be deleted. Please try again later." : "账号无法删除。请稍后重试。", + "Hosted High-performance backend" : "托管的高性能后端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我们的合作伙伴 Struktur AG 提供了一种可以请求托管信令服务器的服务。为此,你只需要填写下面的表单,然后Nextcloud就会请求它。一旦为你设置好服务器,凭据将被自动填写。这将覆盖现有的信令服务器设置。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "如果您的高性能后端账号包括 STUN 和/或 TURN 功能,将会相应更新设置。", + "URL of this Nextcloud instance" : "此Nextcloud实例的URL", + "Full name of the user requesting the trial" : "请求试用的用户全名", + "Email of the user" : "用户的电子邮箱地址 ", + "Language" : "语言", + "Country" : "国家/地区", + "Request signaling server trial" : "请求信令服务器试用", + "You can see the current status of your hosted signaling server in the following table." : "您可在以下表格中查看您托管的信令服务器的当前状态。", + "Status" : "状态", + "Created at" : "创建于", + "Expires at" : "过期于", + "Limits" : "限制", + "STUN included" : "包括 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包括 TURN", + "Delete the signaling server account" : "删除信令服务器账号", + "_%n user_::_%n users_" : ["%n 个用户"], + "Installed version: {version}" : "已安装版本:{version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安装Matterbridge以将Nextcloud通话应用连接到其他服务,请访问其{linkstart1}GitHub页面{linkend}以获得更多信息。下载并安装应用程序可能需要一段时间。如果超时,请从{linkstart2}Nextcloud应用商店{linkend}手动安装。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge 二进制文件的权限不正确。请确保 Matterbridge 二进制文件由正确的用户拥有并且可以执行。它可以在“/…/nextcloud/apps/talk_matterbridge/bin/”中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到 Matterbridge 二进制文件或无法执行。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "你也可以通过 config 手动设置 Matterbridge 二进制文件的路径。更多信息请查阅 {linkstart}Matterbridge 集成文档{linkend}", + "Downloading …" : "下载中 …", + "Install Talk Matterbridge" : "安装通话应用Matterbridge", + "An error occurred while installing the Matterbridge app" : "安装Matterbridge应用程序时发生错误", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安装通话应用Matterbridge时发生错误。请手动安装。", + "Failed to execute Matterbridge binary." : "执行Matterbridge二进制文件失败。", + "Matterbridge integration" : "Matterbridge 集成", + "Enable Matterbridge integration" : "启用 Matterbridge 集成", + "Status: Checking connection" : "状态:正在检查连接", + "OK: Running version: {version}" : "OK:运行版本:{version}", + "Error: Server seems to be a Signaling server" : "错误:服务器似乎是信令服务器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "错误:Nextcloud 服务器和录制后端服务器的系统时间不同步。请确保两台服务器都连接到时间服务器或手动同步它们的时间。", + "Recording backend URL" : "录制后端 URL", + "Validate SSL certificate" : "验证 SSL 证书", + "Delete this server" : "删除此服务器", + "Test this server" : "测试此服务器", + "Disabled for all calls" : "对所有通话禁用", + "Enabled for all calls" : "对所有通话启用", + "Configurable on conversation level by moderators" : "由各对话主持人自行设置", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP设置“upload_max_filesize”或“post_max_size”仅允许上传最大{maxUpload}的文件。", + "Recording backend settings saved" : "已保存录制后端设置", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "允许各对话主持人自行决定是否征求录制授权。所有参与者在加入对话中的所有通话前需要同意录制", + "The consent to be recorded will be required for each participant before joining every call." : "所有参与者在加入任何通话前都需要同意录制", + "The consent to be recorded is not required." : "不征求录制授权", + "Recording backend configuration is only possible with a High-performance backend." : "录制后端配置仅适用于高性能后端。", + "Add a new recording backend server" : "添加新的录制后端服务器", + "Shared secret" : "已分享密码", + "Recording consent" : "录制准许", + "Recording transcription" : "录制转录", + "Automatically transcribe call recordings with a transcription provider" : "使用转录提供者自动转录通话录制内容", + "Automatically summarize call recordings with transcription and summary providers" : "使用转录和摘要提供者自动总结通话录制内容", + "SIP configuration saved!" : "SIP 配置已保存!", + "SIP configuration is only possible with a High-performance backend." : "SIP 配置仅适用于高性能后端。", + "Enable SIP Dial-out option" : "启用 SIP 外呼选项", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "信令服务器需要更新以支持 SIP 外呼功能。", + "Do not show SIP Dial-out caller number" : "不要显示 SIP 外呼主叫号码", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名号码应向对方显示为“未知号码”或“隐藏号码”", + "Dial-out number" : "外呼号码", + "E164 formatted number used as a fallback caller number for outgoing calls" : "外呼电话使用 E164 格式号码作为备用主叫号码", + "Dial-out prefix" : "外呼前缀", + "Prefix to configured user number for outgoing calls (default is `+`)" : "外呼电话主叫号码前缀(默认为 `+`)", + "Restrict SIP configuration" : "限制 SIP 配置", + "Enable SIP configuration" : "启用 SIP 配置", + "Only users of the following groups can enable SIP in conversations they moderate" : "只有以下群组的用户可以在自己主持的对话中开启 SIP", + "Phone number (Country)" : "电话号码(国家/地区)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "这些信息会在邀请邮件中发送,也会在侧边栏中显示给所有参与者。 ", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 后端 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用功能", + "Error: Websocket connection failed" : "错误:Websocket 连接失败", + "Error code" : "错误代码", + "Error message" : "错误消息", + "Error: Websocket connection failed. Check browser console" : "错误:Websocket 连接失败,请检查浏览器控制台", + "High-performance backend URL" : "高性能后端 URL", + "Missing High-performance backend warning hidden" : "缺失高性能后端警告已隐藏", + "High-performance backend settings saved" : "高性能后端设置已保存", + "Nextcloud Talk setup not complete" : "Nextcloud Talk 设置未完成", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "请注意,在没有高性能后端的 2 位以上参与者的通话中,参与者很可能会遇到连接问题,并导致参与设备的高负载。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安装高性能后端,以确保多位参与者的通话无缝进行。", + "Nextcloud portal" : "Nextcloud 门户", + "Quick installation guide" : "快速安装指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位参与者的通话和对话需要高性能后端。如果没有后端,所有参与者都必须为其他参与者单独上传自己的视频,这很可能会导致连接问题和参与设备的高负载。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "强烈推荐在使用具有高性能后端的 Nextcloud Talk 时设置分布式缓存。", + "Add High-performance backend server" : "添加高性能后端服务器", + "Warn about connectivity issues in calls with more than 2 participants" : "在超过 2 位参与者的通话中警告连接问题", + "STUN server URL" : "STUN 服务器 URL", + "The server address is invalid" : "服务器地址无效", + "STUN settings saved" : "STUN设置已保存", + "STUN servers" : "STUN 服务器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 服务器用以探测路由器下的参与者的公网 IP 地址。", + "Add a new STUN server" : "添一个新的STUN服务器", + "{schema} scheme must be used with a domain" : "{schema} 协议必须与域名一起使用", + "{option1} and {option2}" : "{option1} 和 {option2}", + "{option} only" : "仅 {option} ", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN服务器成功返回ICE候选", + "Error: No working ICE candidates returned by the TURN server" : "错误:TURN服务器没有返回可用的ICE候选", + "Testing whether the TURN server returns ICE candidates" : "测试TURN服务器是否返回ICE候选", + "TURN server schemes" : "TURN 服务器 scheme", + "TURN server URL" : "TURN 服务器URL", + "TURN server secret" : "TURN 服务器密码", + "TURN server protocols" : "TURN 服务器协议", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 服务器服务器用于代理来自防火墙后参与者的通信。如果单个参与者无法连接到其他参与者,则很可能需要一个 TURN 服务器。设置说明见 {linkstart}此文档{linkend}", + "TURN settings saved" : "TURN设置已保存", + "TURN servers" : "TURN 服务器", + "Add a new TURN server" : "添加一个新的TURN服务器", + "Failed" : "失败了", + "OK" : "好", + "Checking …" : "检查中...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失败:此浏览器禁用或不支持 WebAssembly。请启用 WebAssembly 或使用支持它的浏览器进行检查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失败:Web服务器没有正确返回”.wasm” 和“.tflite” 文件。请查看通话应用文档中的“系统要求”部分。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "好:web 服务器正确返回了 \".wasm\" 和 \".tflite\" 文件", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP与Apache配置似乎不兼容。请注意,PHP仅能与MPM_PREFORK模块一起使用,PHP-FPM仅能与MPM_EVENT模块一起使用。", + "Web server setup checks" : "Web 服务器设置检查", + "Files required for virtual background can be loaded" : "可以加载背景模糊所需的文件", + "Federated user" : "联合云用户", + "Assign participants to rooms" : "指派参与者到聊天室", + "Configure breakout rooms" : "配置分组讨论室", + "Number of breakout rooms" : "分组讨论室数量", + "You can create from 1 to 20 breakout rooms." : "您可以创建 1 到 20 个分组讨论室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自动指派参与者", + "Manually assign participants" : "手动指派参与者", + "Allow participants to choose" : "允许参与者选择", + "Create rooms" : "创建聊天室", + "Confirm" : "确认", + "Create breakout rooms" : "创建分组讨论室", + "Reset" : "重置", + "Delete breakout rooms" : "删除分组讨论室", + "Room {roomNumber}" : "聊天室{roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分组讨论室和设置将会丢失", + "Cancel" : "取消", + "Unassigned participants" : "未指派的参与者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "添加参与者“{user}”", + "Now" : "现在", + "Invalid calendar selected" : "所选日历无效", + "Invalid start time selected" : "所选开始时间无效", + "Invalid end time selected" : "所选结束时间无效", + "Unknown error occurred" : "发生未知错误", + "Sending no invitations" : "不发送邀请", + "{participant0} will receive an invitation" : "{participant0} 将收到邀请", + "{participant0} and {participant1} will receive invitations" : "{participant0} 和 {participant1} 将收到邀请", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 和其他 %n 人将收到邀请"], + "Invite {user}" : "邀请 {user}", + "Invite all users and emails in this conversation" : "邀请此对话中的所有用户和电子邮件", + "Meeting created" : "会议已创建", + "Upcoming meetings" : "预定的会议", + "Loading …" : "正在加载…", + "No upcoming meetings" : "没有预定的会议", + "Schedule a meeting" : "安排会议", + "Meeting title" : "会议标题", + "From" : "来自", + "To" : "给", + "Calendar" : "日历", + "Attendees" : "参加者", + "No other participants to send invitations to." : "没有其他参与者可以向其发送邀请。", + "Add attendees" : "添加参加者", + "Save" : "保存", + "Search participants" : "搜索参与者", + "No results" : "没有结果", + "Done" : "完成", + "Disable live transcription" : "禁用实时转录", + "Enable live transcription (generated by AI)" : "启用实时转录(由 AI 生成)", + "Enable live transcription (Live transcriptions app is not installed)" : "启用实时转录(未安装实时转录应用)", + "Disable live translation" : "禁用实时翻译", + "Enable live translation (generated by AI)" : "启用实时翻译(由 AI 生成)", + "Original language" : "原始语言", + "Live translations app is not installed" : "未安装实时翻译应用", + "Original language: {languageName}" : "原始语言:{languageName}", + "Translated language" : "翻译语言", + "Translated language: {languageName}" : "翻译语言:{languageName}", + "Raise hand" : "举起手 ", + "Raise hand (R)" : "举起手 (R)", + "Lower hand" : "放下手 ", + "Lower hand (R)" : "放下手 (R)", + "Exit full screen (F)" : "退出全屏(F)", + "Full screen (F)" : "全屏(F)", + "Speaker view" : "扬声器视图", + "Grid view" : "网格视图", + "Error when trying to load the available live transcription languages" : "尝试加载可用的实时转录语言时出错", + "Failed to enable live transcription" : "无法启用实时转录", + "Failed to enable live translations" : "无法启用实时翻译", + "Failed to disable live translations" : "无法禁用实时翻译", + "Recording consent is required" : "需要同意录制", + "This conversation is read-only" : "此对话是只读的", + "Conversation not found or not joined" : "未找到或未加入对话", + "Lobby is still active and you're not a moderator" : "大厅仍然活跃,您不是主持人", + "Connection failed" : "连接失败", + "Reload" : "重新加载", + "{nickName} raised their hand." : "{nickName} 举手。", + "A participant raised their hand." : "一位参与者举手。 ", + "Collapse stripe" : "折叠条纹", + "Expand stripe" : "展开条纹", + "Previous page of videos" : "视频上一页 ", + "Next page of videos" : "视频下一页", + "Connecting …" : "正在连接…", + "Calling …" : "正在呼叫…", + "Waiting for {user} to join the call" : "等待{user}加入通话", + "Waiting for others to join the call …" : "等待其他人加入通话 ...", + "You can invite others in the participant tab of the sidebar" : "您可以在侧栏的参与者选项卡中邀请其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在侧边栏的参与者标签中邀请其他人或分享此链接以邀请其他人!", + "Share this link to invite others!" : "分享这个链接来邀请其他人!", + "Copy link" : "复制链接", + "You are not allowed to enable audio" : "你不被允许启用音频", + "No audio. Click to select device" : "没有音频。点击以选择设备", + "Mute audio" : "静音", + "Mute audio (M)" : "静音音频 (M)", + "Unmute audio" : "取消静音", + "Unmute audio (M)" : "取消静音音频 (M)", + "None" : "无", + "Select a microphone" : "选择麦克风", + "Select a speaker" : "选择扬声器", + "Microphone settings" : "麦克风设置", + "Check devices" : "检查设备", + "Access to camera was denied" : "对摄像头的访问被拒绝", + "Error while accessing camera: It is likely in use by another program" : "访问摄像头时出现错误:它可能正在被另一个程序使用", + "Error while accessing camera" : "访问摄像头时出错", + "You have been muted by a moderator" : "您已被主持人静音", + "Hide presenter video" : "隐藏演示者视频", + "You are not allowed to enable video" : "你不被允许启用视频", + "No video. Click to select device" : "没有视频。点击以选择设备", + "Disable video" : "禁用视频", + "Disable video (V)" : "禁用视频 (V)", + "Enable video" : "启用视频", + "Enable video (V)" : "启用视频 (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "启用时评 - 首次启用视频时,您的连接会短暂中断", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "启用视频 (V) - 首次启用视频时,您的连接将短暂中断", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "启用视频。当您第一次启用视频时您的连接将会被短暂中断", + "Select a video device" : "选择视频设备", + "Show presenter" : "显示演示者", + "You" : "您", + "Mute" : "静音", + "Muted" : "已静音", + "Show screen" : "显示屏幕", + "Stop following" : "取消关注", + "Connection could not be established …" : "无法建立连接", + "Connection was lost and could not be re-established …" : "连接丢失且无法被重新建立", + "Connection could not be established. Trying again …" : "无法建立连接。再次尝试中…", + "Connection lost. Trying to reconnect …" : "连接丢失。尝试重新连接…", + "Connection problems …" : "连接问题…", + "Collapse" : "折叠", + "Expand" : "展开", + "You need to be logged in to upload files" : "您需要登录以上传文件", + "Drop your files to upload" : "拖放您的文件以上传", + "Conversation messages" : "对话消息", + "Scroll to bottom" : "滚动到底部", + "Post message" : "发送消息", + "Federated conversation" : "联合对话", + "Public conversation" : "公开对话", + "Favorite" : "收藏", + "Banned users" : "已封禁用户", + "Manage the list of banned users in this conversation." : "管理此对话中已封禁用户列表。", + "Manage bans" : "管理封禁", + "No banned users" : "没有已封禁用户", + "Banned by:" : "封禁者:", + "Date:" : "日期:", + "Note:" : "说明:", + "Hide details" : "隐藏详情", + "Show details" : "显示详情", + "Unban" : "取消封禁", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日历 ↗{linkend} 中更改标题和描述。", + "Error while updating conversation name" : "更新对话名称时出错", + "Error while updating conversation description" : "更新对话描述时出错 ", + "Enter a name for this conversation" : "输入此对话的名称", + "Edit conversation name" : "编辑对话名称", + "Edit conversation description" : "编辑对话描述", + "Enter a description for this conversation" : "为这个对话输入一个描述 ", + "Picture" : "图片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此对话中启用以下机器人。要安装其他机器人,请联系管理员。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此服务器上没有安装机器人。要安装机器人,请联系管理员。", + "Disable" : "禁用", + "Enable" : "开启", + "The bot is not available anymore" : "机器人不再可用", + "Breakout rooms" : "分组讨论室", + "Manage breakout rooms" : "管理分组讨论室", + "Set up breakout rooms for this conversation" : "为此对话设置分组讨论室", + "Please select a valid PNG or JPG file" : "请选择有效的PNG或JPG文件", + "Choose your conversation picture" : "选择您的对话图片", + "Choose" : "选择", + "Error setting conversation picture" : "设置对话图片时出错", + "Could not set the conversation picture: {error}" : "无法设定对话图片:{error}", + "Error cropping conversation picture" : "裁剪对话图片时出错", + "Error removing conversation picture" : "移除对话图片时出错", + "Set emoji as conversation picture" : "将表情符号设置为对话图片", + "Set background color for conversation picture" : "设置对话图片的背景颜色", + "Upload conversation picture" : "上传对话图片", + "Choose conversation picture from files" : "从文件中选择对话图片", + "Remove conversation picture" : "移除对话图片", + "The file must be a PNG or JPG" : "文件必须是 PNG 或 JPG 格式", + "Set picture" : "设置图片", + "Default permissions modified for {conversationName}" : "更改了 {conversationName} 的默认权限", + "Could not modify default permissions for {conversationName}" : "无法更改 {conversationName} 的默认权限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "编辑此对话中参与者的默认权限。这些设置不会影响版主。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此部分修改权限时,之前指派给各个参与者的自定义权限都将丢失。", + "All permissions" : "所有权限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "与会者具有发起通话、加入通话、开启音频、视频和共享屏幕等权限。", + "Participants can use all available features." : "参与者可以使用所有可用功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在版主手动授权之前,与会者可以加入通话,但不能开启音频、视频也不能共享屏幕", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "在主持人手动授予额外权限之前,参与者只能使用部分功能。", + "Advanced permissions" : "高级权限", + "Edit permissions" : "编辑权限", + "Conversation settings" : "对话设置", + "Basic Info" : "基本信息", + "Personal" : "个人", + "Moderation" : "限制", + "Setup overview" : "设置概览", + "Live transcription" : "实时转录", + "Live transcriptions app is not installed" : "未安装实时转录应用", + "Enable live transcription" : "启用实时转录", + "Breakout Rooms" : "分组讨论室", + "Matterbridge" : "Matterbridge ", + "Bots" : "机器人", + "Danger zone" : "危险区域", + "Archive conversation" : "存档对话", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "已存档的对话默认在对话列表中隐藏。但是,当您搜索对话名称或访问已存档的对话列表时,它们仍然会出现。", + "Do you really want to leave \"{displayName}\"?" : "是否确定要离开“{displayName}”?", + "You can archive this conversation instead." : "您可以改为将此对话存档。", + "Leave conversation" : "离开对话", + "You need to promote a new moderator before you can leave the conversation" : "在您离开对话之前需要推举一位新的主持人", + "Delete conversation" : "删除对话", + "Do you really want to delete \"{displayName}\"?" : "是否确定要删除“{displayName}”?", + "Error while deleting conversation" : "删除对话时出错 ", + "Delete all chat messages" : "删除所有聊天消息", + "Do you really want to delete all messages in \"{displayName}\"?" : "是否确定要删除“{displayName}”中的所有消息?", + "Error while clearing chat history" : "清除聊天消息时出错", + "Be careful, these actions cannot be undone." : "小心,这些操作无法被撤销。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "一旦离开对话,要重新加入已关闭的谈话,需要一个邀请。公开对话可以在任何时候重新加入。", + "Permanently delete this conversation." : "永久删除此对话。", + "Delete chat messages" : "删除聊天消息", + "Permanently delete all the messages in this conversation." : "永久删除此对话中的所有消息", + "_%n hour_::_%n hours_" : ["%n 小时"], + "_%n day_::_%n days_" : ["%n 天"], + "_%n week_::_%n weeks_" : ["%n 周"], + "Custom expiration time" : "自定义过期时间", + "Message expiration disabled" : "消息过期已禁用", + "Message expiration set: {duration}" : "消息过期设置:{duration}", + "Error when trying to set message expiration" : "尝试设置消息过期时发生错误", + "Message expiration" : "消息过期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "可指定聊天消息在一定时间后过期。注意:聊天中分享的文件不会被从所有者一方删除,但是会被从对话中取消分享。", + "Set message expiration" : "设置消息过期时间", + "Current message expiration" : "当前的消息过期时间", + "Password copied to clipboard" : "密码已复制到剪贴板", + "Password could not be copied" : "无法复制密码", + "Guest access" : "访客访问", + "Breakout rooms are not allowed in public conversations." : "公开对话中不允许分组会议室。", + "Allow guests to join this conversation via link" : "允许访客通过链接加入此对话", + "Password protection" : "密码保护", + "This conversation is password-protected. Guests need password to join" : "此对话受密码保护,访客需要密码才能加入", + "Password protection is needed for public conversations" : "公开对话需要密码保护", + "Set a password" : "设置密码", + "Change password" : "更改密码", + "Enter new password" : "输入新密码", + "Save password" : "保存密码", + "Copy password" : "复制密码", + "Guests are allowed to join this conversation via link" : "访客可以通过链接加入此对话", + "Guests are not allowed to join this conversation" : "访客不能加入此对话", + "Resend invitations" : "重新发送邀请", + "This conversation is open to both registered users and users created with the Guests app" : "此对话对已注册用户和使用访客应用建立的应用开放", + "This conversation is open to registered users" : "此对话对已注册用户开放", + "This conversation is limited to the current participants" : "此对话仅对当前参与者开放", + "You opened the conversation to both registered users and users created with the Guests app" : "你向已注册用户和通过访客应用创建的账号开放了此对话", + "Error occurred when opening or limiting the conversation" : "开放或限制对话时发生错误", + "Open conversation to registered users, showing it in search results" : "向注册用户开放对话并在搜索结果中显示", + "Also open to users created with the Guests app" : "同时对使用访客应用创建的账号开放", + "Open conversation" : "开放对话", + "Set language spoken in calls" : "设置通话语言", + "Languages could not be loaded" : "无法加载语言", + "Loading languages …" : "正在加载语言 …", + "Invalid language" : "语言无效", + "Default language (English)" : "默认语言(英语)", + "Default live transcription language set" : "默认实时转录语言集", + "Live transcription language set: {languageName}" : "实时转录语言集:{languageName}", + "Error when trying to set live transcription language" : "尝试设置实时转录语言时出错", + "Start time: {date}" : "开始时间:{date}", + "Start time has been updated" : "开始时间已更新", + "Error occurred while updating start time" : "更新开始时间时发生错误 ", + "Enabling the lobby will remove non-moderators from the ongoing call." : "启用大厅将会从正在进行的对话中移除非主持人", + "Enable lobby, restricting the conversation to moderators" : "启用大厅,将对话限制到与主持人之间", + "Meeting start time" : "会议开始时间", + "Start time (optional)" : "开始时间(可选)", + "Import email participants" : "导入电子邮件参与者", + "You can import a list of email participants from a CSV file." : "您可以从 CSV 文件导入电子邮件参与者列表。", + "Poll drafts" : "投票草稿", + "Browse poll drafts" : "浏览投票草稿", + "Error occurred when locking the conversation" : "锁定对话时发生错误 ", + "Error occurred when unlocking the conversation" : "解锁对话时发生错误 ", + "Lock conversation" : "锁定对话", + "This will also terminate the ongoing call." : "这也将终止正在进行的通话。", + "Lock the conversation to prevent anyone to post messages or start calls" : "锁定对话防止任何人发布消息或开始通话。", + "Edit" : "编辑", + "More information" : "更多信息", + "Delete" : "删除", + "Add new bridged channel to current conversation" : "向当前对话添加新的桥接通道", + "unknown state" : "未知状态", + "running" : "运行中", + "not running, check Matterbridge log" : "未在运行,检查 Matterbridge 日志", + "not running" : "未在运行", + "Bridge saved" : "网桥已保存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "你可以使用 Matterbridge 桥接来自各种即时消息传递系统的频道。", + "More info on Matterbridge" : "更多关于Matterbridge的信息", + "Messaging systems" : "消息系统", + "Enable bridge" : "启用桥接", + "Show Matterbridge log" : "显示 Matterbridge 日志", + "Log content" : "日志内容", + "Only moderators are allowed to mention @all" : "仅允许主持人提及 @all", + "All participants are allowed to mention @all" : "所有参与者都可以提及 @all", + "Participants are now allowed to mention @all." : "现在允许参与者提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 仅限于主持人。", + "Allow participants to mention @all" : "允许参与者提及 @all", + "Mention permissions" : "提及权限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "关于此对话中呼叫的通知", + "Important conversation" : "重要对话", + "\"Do not disturb\" user status is ignored for important conversations" : "重要对话忽略“勿扰”用户状态", + "Sensitive conversation" : "敏感对话", + "Message preview will be disabled in conversation list and notifications" : "将在对话列表和通知中禁用消息预览", + "Recording consent is required for calls in this conversation" : "在此对话中通话需要提供录制许可", + "Recording consent is not required for calls in this conversation" : "在此对话中通话无需提供录制许可", + "Recording consent requirement was updated" : "已更新录制许可要求", + "Error occurred while updating recording consent" : "更新录制同意时出错", + "Recording Consent" : "录制许可", + "Recording consent cannot be changed once a call or breakout session has started." : "通话或分组会议开始后,录制同意书就不能更改。", + "Require recording consent before joining call in this conversation" : "在此对话中加入通话前要求准许录制", + "Recording consent is required for all calls" : "所有通话都需要提供录制许可", + "SIP dial-in is now possible without PIN requirement" : "现在无需 PIN 即可进行 SIP 拨号", + "SIP dial-in is now enabled" : "启用了 SIP 拨号 ", + "SIP dial-in is now disabled" : "禁用了 SIP 拨号", + "Error occurred when enabling SIP dial-in" : "启用 SIP 拨号时发生错误", + "Error occurred when disabling SIP dial-in" : "禁用 SIP 拨号时发生错误", + "Phone and SIP dial-in" : "电话和 SIP 拨号", + "Enable phone and SIP dial-in" : "启用电话和 SIP 拨号", + "Allow to dial-in without a PIN" : "允许在没有 PIN 的情况下拨号", + "Ongoing" : "正在进行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n 人接受"], + "_%n person declined_::_%n people declined_" : ["%n 人拒绝"], + "_and %n other attachment_::_and %n other attachments_" : ["以及另外 %n 个附件"], + "With {displayName}" : "有 {displayName}", + "In {conversation}" : "在 {conversation} 中", + "View attachment" : "查看附件", + "Join" : "加入", + "View conversation" : "查看对话", + "View event on Calendar" : "在日历上查看活动", + "Error while creating the conversation" : "创建对话时出错", + "Hello, {displayName}" : "您好,{displayName}", + "Start meeting now" : "立即开始会议", + "Give your meeting a title" : "为您的会议命名", + "Create and copy link" : "创建并复制链接", + "Create a new conversation" : "创建一个新对话", + "Join open conversations" : "加入公开对话", + "Call a phone number" : "呼叫电话号码", + "Scroll backward" : "向后滚动", + "Scroll forward" : "向前滚动", + "Schedule meetings" : "安排会议", + "You don't have any upcoming meetings" : "您没有任何预定的会议", + "Calendar events with a conversation link as the location are shown here" : "此处显示的是将对话链接设为位置的日历活动", + "Open calendar" : "打开日历", + "Unread mentions" : "未读的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的消息会显示在此处。您可以通过输入 @ 后跟他们的名称来提及他们", + "Upcoming reminders" : "预定的提醒", + "Message reminders" : "消息提醒", + "Set a reminder on a message to be notified" : "在要通知的消息上设置提醒", + "Start a group conversation" : "开始群组对话", + "Create conversation" : "创建对话", + "Enter your name" : "输入你的名字", + "Submit name and join" : "设置名称并加入", + "Do you already have an account?" : "已经有账号了?", + "Log in" : "登录", + "Error while verifying uploaded file" : "验证上传文件时出错", + "Uploaded file is verified" : "已验证上传的文件", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "内容格式为逗号分隔值(CSV):
- 标题行是必需的,必须与“姓名”、“电子邮件”或仅“电子邮件”匹配。
- 每行一个条目(例如“John Doe\",\"john@example.tld\")", + "Participants added successfully" : "参与者添加成功", + "Error while adding participants" : "添加参与者时出错", + "Import a file" : "导入文件", + "Browse" : "浏览", + "Verifying uploaded file …" : "正在验证上传的文件…", + "This might take a moment" : "这可能需要一段时间", + "Send invitations" : "发送邀请", + "_%n invalid email_::_%n invalid emails_" : [" %n 个无效的电子邮件"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n 个电子邮件已导入或重复"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以发送 %n 个邀请"], + "An error occurred while calling a phone number" : "呼叫电话号码时发生错误", + "Phone number could not be called: {error}" : "无法呼叫电话号码: {error}", + "Phone number could not be called" : "无法呼叫电话号码", + "Search participants or phone numbers" : "搜索参与者或电话号码", + "Creating the conversation …" : "正在建立对话……", + "Mark as read" : "标为已读", + "Mark as unread" : "标为未读", + "Remove from favorites" : "从收藏夹移除", + "Add to favorites" : "添加到收藏夹", + "Unarchive conversation" : "取消归档对话", + "Ignore \"Do not disturb\"" : "忽略“勿扰”", + "You need to promote a new moderator before you can leave the conversation." : "在您离开对话之前您需要推举一位新的主持人。", + "Conversation actions" : "对话操作", + "Notify about calls" : "通话通知", + "Hide message text" : "隐藏消息文本", + "Pending invitations" : "待处理的邀请", + "Join conversations from other servers" : "加入其他服务器的对话", + "From {user} at {remoteServer}" : "来自 {remoteServer} 的 {user}", + "Decline invitation" : "拒绝邀请", + "Accept invitation" : "接受邀请", + "No pending invitations" : "没有待处理的邀请", + "Home" : "首页", + "Unread" : "未读", + "Mentions" : "提及", + "Meetings" : "会议", + "Sort conversations" : "排序对话", + "By recent activity" : "按最近的活动", + "Alphabetically" : "按字母顺序", + "Do not group by type" : "不按类型分组", + "Show private ones first" : "先显示私人对话", + "Show group ones first" : "先显示群组对话", + "No followed threads" : "没有关注的帖子", + "No matches found" : "未找到匹配项", + "No conversations found" : "未找到对话", + "You have no archived conversations." : "您没有已存档的对话。", + "Subscribe to an existing thread or start your own." : "订阅现有的帖子或开始自己的帖子。", + "You have no unread mentions." : "无未读的提及", + "You have no unread messages." : "无未读消息", + "An error occurred while performing the search" : "执行搜索时出错", + "Conversation list" : "对话列表", + "Filter conversations by" : "按以下条件筛选对话", + "Unread messages" : "未读消息", + "Meeting conversations" : "会议对话", + "Clear filters" : "清除过滤器", + "New personal note" : "新建个人笔记", + "SIP backend is not installed" : "未安装 SIP 后端", + "Back to conversations" : "返回对话", + "Archived conversations" : "已存档的对话", + "Threads" : "帖子‌", + "Clear filter" : "清除筛选", + "Show more threads" : "显示更多帖子‌", + "App settings" : "应用设置", + "Users" : "用户", + "Groups" : "分组", + "Teams" : "团队", + "Federated users" : "联合用户", + "New private conversation" : "新私人对话", + "Other sources" : "其他来源", + "Open conversations" : "开启对话", + "No search results" : "无搜索结果", + "Users, groups and teams" : "用户、群组和团队", + "Users and groups" : "用户和群组", + "Users and teams" : "用户和团队", + "Groups and teams" : "群组和团队", + "New group conversation" : "新群组对话", + "The meeting will start soon" : "会议不久后开始", + "This meeting is scheduled for {startTime}" : "此会议定于 {startTime} 开始", + "You are currently waiting in the lobby" : "您当前正在大厅等待。", + "Enable noise suppression" : "启用噪声抑制", + "Reduce background noises for better voice quality" : "减少背景噪音,提高语音质量", + "Enable echo cancellation" : "启用回声消除", + "Minimize echo effect from own surrounding" : "尽量减少自身周围环境的回声效应", + "Enable auto gain control" : "启用自动增益控制", + "Dynamically adjust microphone volume for consistent level" : "动态调节麦克风音量以保持音量稳定", + "Select microphone" : "选择麦克风", + "No microphone available" : "麦克风不可用", + "Select speaker" : "选择扬声器", + "No speaker available" : "没有扬声器可用", + "Select camera" : "选择摄像头", + "No camera available" : "摄像头不可用", + "Select a device" : "选择设备", + "Playing …" : "正在播放…", + "Test speakers" : "测试扬声器", + "Test" : "测试", + "Devices" : "设备", + "Backgrounds" : "背景图片", + "No audio" : "无音频", + "No camera" : "没有摄像头", + "Display video as you will see it (mirrored)" : "显示您将看到的视频(镜像)", + "Display video as others will see it" : "以其他人看到的方式显示视频", + "Calls are not supported in your browser" : "您的浏览器不支持呼叫", + "Access to microphone is only possible with HTTPS" : "麦克风只能通过 HTTPS 协议访问", + "Access to microphone was denied" : "无权访问麦克风", + "Error while accessing microphone" : "访问麦克风时出错", + "Access to camera is only possible with HTTPS" : "摄像头只能通过 HTTPS 协议访问", + "The call is being recorded." : "通话正在被录制", + "The call might be recorded." : "通话可能被录制", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "录制内容可能包括您的声音、摄像头的画面,以及屏幕分享的内容。要加入通话,您需要同意录制。", + "Give consent to the recording of this call" : "您需要同意录制此通话", + "Show more info" : "显示更多信息", + "Audio is not available" : "音频不可用", + "Video is not available" : "视频不可用", + "Start recording immediately with the call" : "通话开始的同时开始录制", + "Recording backend is not installed" : "未安装录制后端", + "Notify all participants about this call" : "通知所有参与者关于此通话", + "Apply settings" : "应用设置", + "Select virtual office background" : "选择虚拟办公室背景", + "Select virtual home background" : "选择虚拟家庭背景", + "Select virtual abstract background" : "选择虚拟抽象背景", + "Select virtual beach background" : "选择虚拟海滩背景", + "Select virtual park background" : "选择虚拟公园背景", + "Select virtual theater background" : "选择虚拟剧院背景", + "Select virtual library background" : "选择虚拟图书馆背景", + "Select virtual space station background" : "选择虚拟太空站背景", + "Error while uploading the file" : "上传文件时出错", + "Select a file" : "选择文件", + "Invalid path selected" : "选择的路径无效", + "Select virtual background from file {fileName}" : "从{fileName}文件中选择背景", + "Blur" : "模糊", + "Upload" : "上传", + "Files" : "文件", + "(editing)" : "(编辑中)", + "(edited)" : "(已编辑)", + "The message has expired or has been deleted" : "消息已过期或已被删除。", + "Cancel quote" : "取消引用", + "24 hours" : "24 小时 ", + "7 days" : "7 天", + "30 days" : "30 天", + "Until unpin" : "直到取消置顶", + "Clear reminder – {timeLocale}" : "取消提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 编辑", + "Pinned by you" : "由您置顶", + "Pinned by {actor}" : "由 {actor} 置顶", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "消息文本已复制到剪贴板", + "Message text could not be copied" : "无法复制消息文本", + "Message forwarded to \"Note to self\"" : "消息已转发到“自我备注”", + "Error while forwarding message to \"Note to self\"" : "将消息转发到“自我备注”时出错", + "A reminder was successfully removed" : "提醒删除成功", + "Error occurred when removing a reminder" : "移除提醒时出错", + "A reminder was successfully set at {datetime}" : "于 {datetime} 的提醒设置成功", + "Error occurred when creating a reminder" : "创建提醒时出错", + "Add a reaction to this message" : "添加对此消息的回应", + "Reply" : "回复", + "More actions" : "更多操作 ", + "Set reminder" : "设置提醒", + "Pin message" : "置顶消息", + "Unpin message" : "取消置顶消息", + "Reply privately" : "私下回复", + "Edit message" : "编辑消息", + "Copy message" : "复制消息", + "Copy message link" : "复制消息链接", + "Go to file" : "前往文件", + "Download file" : "下载文件", + "Go to thread" : "转到帖子", + "Edit thread details" : "编辑帖子详情", + "Forward message" : "转发消息", + "Translate" : "翻译", + "Set custom reminder" : "设置自定义提醒", + "Keep pinned for" : "保持置顶", + "Set custom period" : "设置自定义时段", + "Close reactions menu" : "关闭回应菜单", + "React with {emoji}" : "使用 {emoji} 回应", + "React with another emoji" : "使用其他表情符号做出回应", + "Choose a conversation to forward the selected message." : "选择对话来转发所选消息", + "Error while forwarding message" : "转发消息时出错", + "The message has been forwarded to {selectedConversationName}" : "已转发此消息至{selectedConversationName}", + "Dismiss" : "关闭", + "Go to conversation" : "转到对话", + "Detect language" : "检测语言", + "The message could not be translated" : "无法翻译信息", + "Translation copied to clipboard" : "翻译已复制到剪贴板", + "Translation could not be copied" : "无法复制翻译。", + "Translate message" : "翻译信息", + "Source language to translate from" : "要翻译的来源语言", + "Translate from" : "翻译至", + "Target language to translate into" : "要翻译的目标语言", + "Translate to" : "翻译至", + "Translating" : "正在翻译", + "This translation is AI generated and may contain mistakes." : "此翻译是 AI 生成的,可能包含错误。", + "Copy translated text" : "复制已翻译的文字", + "Error when scheduling the message" : "安排消息时出错", + "Reschedule" : "重新安排", + "Send now" : "立即发送", + "Choose a time" : "选择时间", + "Send at custom time" : "在自定义时间发送", + "Will be sent without notification" : "将不另行通知发送", + "Message read by everyone who shares their reading status" : "消息被每个分享他们阅读状态的人读取", + "Message sent" : "消息已发送", + "Sent without notification" : "发送而不通知", + "Deleting message" : "正在删除消息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "消息已成功删除,但已配置机器人或 Matterbridge,消息可能已分发到其他服务", + "Message deleted successfully" : "成功删除了消息", + "Message could not be deleted because it is too old" : "消息太旧,无法删除", + "Only normal chat messages can be deleted" : "只能删除正常的聊天消息 ", + "An error occurred while deleting the message" : "删除消息时发生错误 ", + "Pinned" : "已置顶", + "Your browser does not support playing audio files" : "你的浏览器不支持播放音频文件", + "Contact" : "联系人", + "{stack} in {board}" : "{stack} 于 {board}", + "Deck Card" : "看板卡片", + "Remove {fileName}" : "删除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打开此位置", + "_%n reply_::_%n replies_" : ["%n 个回复"], + "Sending message" : "正在发送消息", + "Failed to send the message. Click to try again" : "消息发送失败。点击重试", + "Not enough free space to upload file" : "没有足够的空间上传文件", + "You cannot send messages to this conversation at the moment" : "您目前无法向此对话发送消息", + "Could not update the message" : "无法更新消息", + "Reply to thread \"{threadTitle}\"" : "回复帖子“{threadTitle}”", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["点击投票 • %n 票"], + "Click to vote" : "点击投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["投票草稿 • %n 个选项"], + "_%n vote_::_%n votes_" : ["%n 票"], + "Edit poll draft" : "编辑投票草稿", + "Delete poll draft" : "删除投票草稿", + "Open poll" : "公开投票", + "Closed poll" : "非公开投票", + "See results" : "查看结果", + "Reactions" : "回应", + "No permission to post reactions in this conversation" : "无权限在此对话中发布回应", + "and {participant}" : "与 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及其他 %n 位参与者"], + "Show all reactions" : "显示所有回应", + "Add more reactions" : "添加更多回应", + "Show or collapse system messages" : "显示或折叠系统消息", + "No messages" : "没有消息", + "All messages have expired or have been deleted." : "所有消息都已过期或已被删除。", + "Generate summary with AI" : "使用 AI 生成摘要", + "{author} (pinned by you)" : "{author}(由您置顶)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 置顶)", + "Unpin" : "取消置顶", + "Cancel search" : "取消搜索", + "Add a phone number" : "添加电话号码", + "Error: A password is required to create the conversation." : "错误:创建对话需要密码。", + "All set, the conversation \"{conversationName}\" was created." : "一切就绪,对话“{conversationName}”已创建", + "Create a new group conversation" : "建立新的群组对话", + "Add participants" : "添加参与者", + "Maximum length exceeded ({maxlength} characters)" : "超过最大长度({maxlength} 个字符)", + "Conversation type" : "对话类型", + "Conversation visibility" : "对话可见性", + "Allow guests to join via link" : "允许访客通过链接加入", + "Enter password" : "输入密码", + "This conversation has been locked" : "此对话已锁定", + "No permission to post messages in this conversation" : "无权限在此对话中发布消息", + "Joining conversation …" : "正在加入对话…", + "Write a message without notification" : "写消息而不通知", + "Create a thread silently" : "静默创建帖子", + "Create a thread" : "创建帖子", + "Send message silently" : "静默发送消息", + "Send message" : "发送消息", + "Send without notification" : "发送而不通知", + "The participant will not be notified about new messages" : "此参与者将不会收到新消息的通知", + "Participants will not be notified about new messages" : "参与者将不会收到新消息的通知", + "Message will be sent {datetimeString}" : "消息将于 {datetimeString} 发送", + "Thread title is required" : "帖子标题为必填项", + "Message text is required" : "消息文本为必填项", + "The message could not be edited" : "无法编辑消息", + "File to share" : "要分享的文件", + "File upload is not available in this conversation" : "此对话中无法上传文件", + "Message was successfully scheduled" : "消息已成功安排", + "Add emoji" : "添加 emoji", + "Adding a mention will only notify users who did not read the message." : "添加提及只会通知未阅读消息的用户。", + "Thread title" : "帖子‌标题", + "Send later" : "稍后发送", + "Show scheduled messages" : "显示已安排的消息", + "Cancel editing" : "取消编辑", + "Schedule message" : "安排消息", + "{user} is out of office and might not respond." : "{user} 不在办公室,可能不会回复。", + "Absence period: {startDate} - {endDate}" : "缺勤时段:{startDate} - {endDate}", + "Replacement:" : "接替者:", + "Share from {nextcloud}" : "从{nextcloud}分享", + "Share from Files" : "从文件共享", + "Share files to the conversation" : "分享文件到对话", + "Upload from device" : "从设备上传", + "Create new poll" : "创建新的投票", + "Smart picker" : "智能选择器", + "Record voice message" : "录制语音消息", + "End recording and send" : "结束录音并发送", + "Dismiss recording" : "取消录音", + "Access to the microphone was denied" : "对麦克风的访问被拒绝", + "Microphone either not available or disabled in settings" : "麦克风不可用或者在设置中被禁用", + "Error while recording audio" : "录制音频时出错", + "Voice message {time} ({conversation})" : "语音信息 {time}({conversation})", + "Generating summary of unread messages …" : "正在生成未读消息的摘要…", + "Summary is AI generated and might contain mistakes" : "摘要是 AI 生成的,可能包含错误", + "Error occurred during a summary generation" : "生成摘要时出错", + "New file" : "新文件", + "Blank" : "空白", + "Error while creating file" : "创建文件时出错", + "Create and share a new file" : "创建及分享新文档", + "Name of the new file" : "新文件的名称", + "Create file" : "创建文件", + "Someone is typing …" : "有人在输入……", + "{user1} is typing …" : "{user1}在输入……", + "{user1} and {user2} are typing …" : "{user1}和{user2}在输入……", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2}和{user3}正在输入……", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 和其他 %n 人正在输入…"], + "Add more files" : "添加更多文件", + "Send" : "发送", + "In this conversation {user} can:" : "此对话中,{user}可以:", + "Edit default permissions for participants in {conversationName}" : "编辑 {conversationName}中参与者的默认权限", + "Start a call" : "启动通话", + "Skip the lobby" : "跳过大厅", + "Can post messages" : "可以发布消息", + "Can post messages and reactions" : "可以发布消息和回应", + "Can add reactions" : "可以添加回应", + "Enable the microphone" : "启用麦克风", + "Enable the camera" : "启用相机", + "Share the screen" : "共享屏幕", + "Update permissions" : "更新权限", + "Updating permissions" : "正在更新权限", + "No poll drafts" : "无投票草稿", + "There is no poll drafts yet saved for this conversation" : "此对话尚未保存投票草稿", + "Create poll in {name}" : "在 {name} 中创建投票", + "Create poll" : "创建投票", + "Error while importing poll" : "导入投票时出错", + "Question" : "问题", + "Ask a question" : "提出一个问题", + "Import draft from file" : "从文件导入草稿", + "Answers" : "答案", + "Answer {option}" : "答案{option}", + "Delete poll option" : "删除投票选项", + "Add answer" : "添加答案", + "Settings" : "设置", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多选答案", + "Save as draft" : "保存为草稿", + "Export draft to file" : "将草稿导出到文件", + "_Final results • %n vote_::_Final results • %n votes_" : ["最终结果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此选项", + "End poll" : "結束投票", + "Change your vote" : "更改您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "结果", + "Voted participants" : "已投票的参与者", + "Send a message to \"{roomName}\"" : "向“{roomName}”分组讨论室发送消息", + "Hide list of participants" : "隐藏参与者列表", + "Show list of participants" : "显示参与者列表", + "Assistance requested in {roomName}" : "{roomName}请求协助", + "The message was sent to \"{roomName}\"" : "消息已发送至分组讨论室“{roomName}”", + "Dismiss request for assistance" : "撤销协助请求", + "Send message to room" : "发送消息至聊天室", + "Back to main room" : "回到主聊天室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室发送消息", + "Start session" : "开启会话", + "Start a call before you start a breakout room session" : "在开启分组讨论室会话之前开始一个通话", + "Stop session" : "停止会话", + "The message was sent to all breakout rooms" : "消息已发送至所有分组讨论室", + "Send a message to all breakout rooms" : "向所有分组讨论室发送消息", + "Breakout rooms are not started" : "分组讨论室尚未开启", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "没有高性能后端的通话可能会导致连接问题和设备上的高负载。{linkstart}了解更多{linkend}", + "Talk setup incomplete" : "Talk 设置未完成", + "Disable lobby" : "禁用大厅", + "Settings for participant \"{user}\"" : "参与者 \"{user}\" 的设置", + "Participant \"{user}\"" : "参与者\"{user}\" ", + "moderator" : "主持人", + "bot" : "机器人", + "guest" : "访客", + "Ringing …" : "正在响铃……", + "Call rejected" : "通话被拒绝", + "{time} talking …" : "{time} 说话…", + "{time} talking time" : "{time} 说话时间", + "Raised their hand" : "举起了他们的手", + "Joined with video" : "通过视频加入", + "Joined via phone" : "通过电话加入", + "Joined with audio" : "通过音频加入", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的长度必须小于或等于 {maxLength}个字符。您目前的文字长度为{charactersCount}个字符。", + "Remove group and members" : "移除群组和成员", + "Remove team and members" : "移除团队和成员", + "Remove participant" : "移除参与者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "是否确定要从此对话中移除群组“{displayName}”及其成员?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "是否确定要从此对话中移除团队“{displayName}”及其成员?", + "Do you really want to remove {displayName} from this conversation?" : "是否确定要从此对话中移除 {displayName}?", + "Notification was sent to {displayName}" : "通知已发送给·{displayName}", + "Could not send notification to {displayName}" : "无法发送通知给{displayName}", + "Permissions granted to {displayName}" : "已将权限授予 {displayName}", + "Could not modify permissions for {displayName}" : "无法更改 {displayName} 的权限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的权限", + "Permissions set to default for {displayName}" : "{displayName} 权限已设为默认值", + "Phone number could not be hung up" : "无法挂断电话号码", + "Phone number could not be put on hold" : "无法保持电话号码", + "Phone number could not be muted" : "对电话号码静音失败", + "Phone number could not be unmuted" : "取消电话号码静音失败", + "DTMF message could not be sent" : "无法发送 DTMF 消息", + "Phone number copied to clipboard" : "电话号码已复制到剪贴板", + "Phone number could not be copied" : "无法复制电话号码", + "in the lobby" : "在大厅", + "Dial out phone" : "拨打电话", + "Hang up phone" : "挂断电话", + "Move back to lobby" : "移回大厅", + "Move to conversation" : "移至对话", + "Dial-in PIN" : "拨号 PIN 码", + "Demote from moderator" : "撤销主持人", + "Promote to moderator" : "提升为主持人", + "Resend invitation" : "重新发送邀请", + "Send call notification" : "发送通话通知", + "Dial out phone number" : "呼叫的电话号码", + "Resume call for phone number" : "恢复电话号码的通话", + "Put phone number on hold" : "将电话置入呼叫保持", + "Unmute phone number" : "取消电话号码静音", + "Mute phone number" : "静音电话号码", + "Copy phone number" : "复制电话号码", + "Reset custom permissions" : "重置自定义权限", + "Grant all permissions" : "授予所有权限", + "Remove all permissions" : "移除所有权限", + "Also ban from this conversation" : "也从此对话中封禁", + "Internal note (reason to ban)" : "内部备注(封禁原因)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "更改了 {displayName} 的权限", + "Add users, groups or teams" : "添加用户、群组或团队", + "Add users or groups" : "增加用户或组", + "Add users or teams" : "添加用户或团队", + "Add users" : "添加用户", + "Add groups or teams" : "添加群组或团队", + "Add groups" : "添加分组", + "Add teams" : "添加团队", + "Add other sources" : "添加其他来源", + "Add emails" : "添加电子邮件", + "Integrations" : "集成", + "Add federated users" : "添加联合用户", + "Searching …" : "正在搜索 ...", + "Search for more users" : "搜索更多用户", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以通过姓名、电子邮件或联合云 ID 搜索或添加参与者", + "Search or add participants" : "搜索或添加参与者", + "Invitation was sent to {actorId}" : "邀请已发送至{actorId}", + "An error occurred while adding the participants" : "添加参与者时发生错误 ", + "A new group conversation with selected participant will be created" : "将创建与所选参与者的新群组对话", + "Participants" : "参与者", + "Pinned by a deleted user" : "由已删除用户置顶", + "Participants ({count})" : "参与者数量 ({count})", + "Open chat" : "开启聊天", + "You have new unread messages in the chat." : "你在聊天中有新的未读消息", + "You have been mentioned in the chat." : "你在聊天中被提及", + "Search messages" : "搜索消息", + "Chat" : "聊天", + "Details" : "详情", + "Shared items" : "已共享项目", + "Search in {name}" : "在 {name} 中搜索", + "Threads in {name}" : "{name} 中的帖子‌", + "{actor} in {conversation}" : "{conversation}中的 {actor}", + "Search messages …" : "搜索消息…", + "Search options" : "搜索选项", + "From User" : "来自用户", + "Since" : "自", + "Until" : "直到", + "No results found" : "未找到结果", + "Load more results" : "加载更多结果", + "Recent threads" : "最近的帖子", + "Projects" : "项目", + "No shared items" : "沒有已共享的项目", + "Thread notifications" : "帖子通知", + "Thread actions" : "帖子操作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "链接到一个对话", + "No open conversations found" : "没有找到公开对话", + "Either there are no open conversations or you joined all of them." : "可能是没有公开对话,或是您已经加入了所有公开对话。", + "Check spelling or use complete words." : "检查拼写或使用完整字词。", + "Search conversations or users" : "搜索对话或用户", + "Select conversation" : "选择对话", + "Number length is not valid" : "号码长度不正确", + "Region code is not valid" : "区号无效", + "Number length is too short" : "号码太短", + "Number length is too long" : "号码太长", + "Number is not valid" : "号码无效", + "Phone numbers" : "电话号码 ", + "Display name: {name}" : "显示名称:{name}", + "Edit display name" : "编辑显示名称", + "Display name (required)" : "显示名称(必填)", + "Save name" : "保存名称", + "I picked message bubbles" : "我选了消息气泡", + "I picked the list style" : "我已选择列表样式", + "Error while setting personal setting" : "设置个人设置时出错", + "Error while saving sounds setting" : "保存声音设置时出错", + "Compact conversations list" : "紧凑的对话列表", + "Chat appearance" : "聊天外观", + "Messages list" : "消息列表", + "Message bubbles" : "消息气泡", + "Play sounds when participants join or leave a call" : "参与者加入或离开通话时播放声音", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由于制造商的技术限制,目前无法在 iPhone 和 iPad 上使用", + "Notification settings" : "通知设置", + "Sounds for chat and call notifications" : "聊天和通话通知的声音", + "Invalid language ({languageId})" : "无效语言({languageId})", + "Default language" : "默认语言", + "Default language ({languageName})" : "默认语言({languageName})", + "Error when trying to load the available live translation languages" : "尝试加载可用的实时翻译语言时出错", + "Error when trying to set live translation language" : "尝试设置实时翻译语言时出错", + "Set language used to show the transcriptions" : "设置用于显示转录的语言", + "Select location for attachments" : "选择附件的位置 ", + "Error while setting attachment folder" : "设置附件文件夹时出错", + "Error while setting read status privacy" : "设置读取状态隐私时发生错误 ", + "Error while setting typing status privacy" : "设置打字状态隐私时发生错误", + "Error while setting default media state" : "设置默认媒体状态时出错", + "Turn camera and microphone off by default" : "默认关闭摄像头和麦克风", + "Blur camera background by default" : "默认模糊相机背景", + "Skip device preview before joining a call" : "加入通话前跳过设备预览", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入后摄像头将自动关闭。如果需要录制同意,则会始终显示。", + "Appearance & Sounds" : "外观和声音", + "Privacy" : "隐私", + "Send read receipts" : "发送已读回执", + "When off, all read statuses will be hidden" : "关闭后,将隐藏所有阅读状态", + "Share typing status" : "分享输入状态", + "When off, all typing indicators will be hidden" : "关闭后,将隐藏所有输入指示器", + "Attachments folder" : "附件文件夹", + "Toggle full screen" : "切换全屏", + "Return to Home screen" : "返回主屏幕", + "Search" : "搜索", + "Shortcuts while in a chat" : "聊天中的快捷键", + "Focus the chat input" : "聚焦聊天输入", + "Unfocus the chat input to use shortcuts" : "取消聊天输入框的焦点以使用快捷键", + "Edit your last message" : "编辑您的最后一条消息", + "Shortcuts while in a call" : "通话中的快捷键", + "Camera on and off" : "摄像头开关", + "Microphone on and off" : "麦克风开和关", + "Raise or lower hand" : "举起手或放下手", + "Push to talk or push to mute" : "按下讲话或按下静音", + "Zoom-in / zoom-out a screen share" : "放大/缩小屏幕共享", + "Mouse wheel" : "鼠标滚轮", + "Start call silently" : "安静地开始通话", + "Start call" : "开始通话", + "End call" : "结束通话", + "The server was updated, you cannot start or join a call." : "服务器已更新,您无法开始或加入通话。", + "This call has just ended" : "此通话刚刚结束", + "You will be able to join the call only after a moderator starts it." : "您只有在主持人开始一个通话之后才能加入通话。", + "End call for everyone" : "为所有人结束通话", + "Starting the recording" : "开始录制", + "Recording" : "录音", + "The call has been running for one hour." : "通话已持续一小时", + "Cancel recording start" : "取消录制开始", + "Stop recording" : "停止录制", + "Send a reaction" : "发送回应", + "React with {reaction}" : "使用{reaction}回应", + "All tasks done!" : "所有任务完成!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n 任务"], + "Add participants to this call" : "将参与者添加到此通话", + "_%n participant in call_::_%n participants in call_" : ["通话中有 %n 位参与者"], + "Scheduled messages" : "已安排的消息", + "You are not allowed to enable screensharing" : "你不被允许启用屏幕分享", + "No screensharing" : "无屏幕分享", + "Screensharing options" : "屏幕共享选项", + "Enable screensharing" : "启用屏幕共享", + "Bad sent video and screen quality." : "发送的视频和屏幕质量不好", + "Bad sent screen quality." : "发送的屏幕质量不好", + "Bad sent video quality." : "发送的视频质量不好", + "Bad sent audio, video and screen quality." : "发送的音频、视频和屏幕质量不好。 ", + "Bad sent audio and screen quality." : "发送的音频和屏幕质量不佳", + "Bad sent audio and video quality." : "发送的音频和视频质量不佳", + "Bad sent audio quality." : "发送的音频质量不好", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的网络连接或计算机繁忙,其他参与者可能无法看到您的屏幕。为了改善这种情况,尝试在进行屏幕共享时禁用背景模糊或您的视频。", + "Disable background blur" : "禁用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的网络连接或计算机繁忙,其他参与者可能无法看到您的屏幕。为了改善这种情况,尝试在进行屏幕共享时禁用视频。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "你的互联网连接或计算机繁忙,其他参与者可能无法看到你的屏幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "你的互联网连接或计算机繁忙,其他参与者可能无法看到你。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的网络连接或计算机繁忙,其他参与者可能无法理解和看到您。为了改善这种情况,尝试在进行屏幕共享时禁用背景模糊或您的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "你的互联网连接或计算机繁忙,其他参与者可能无法理解和看到你。为了改善这种情况,尝试在做屏幕分享时禁用你的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的网络连接或计算机正忙,其他参与者可能无法理解您的意思和看到您的屏幕。为了改善这种情况,可以试着禁用屏幕共享。", + "Disable screenshare" : "禁用屏幕共享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的网络连接或计算机繁忙,其他参与者可能无法理解和看到您。为了改善这种情况,尝试禁用背景模糊或您的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "你的互联网连接或计算机繁忙,其他参与者可能无法理解和看到你。为了改善这种情况,请禁用你的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "你的网络连接或计算机处于繁忙状态,其他与会者可能无法理解你的意思。", + "Screen sharing is not supported by your browser." : "您的浏览器不支持屏幕共享。", + "Screen sharing requires the page to be loaded through HTTPS." : "屏幕共享需要页面通过 HTTPS 加载。", + "Screensharing requires the page to be loaded through HTTPS." : "屏幕共享需要页面通过 HTTPS 加载。", + "An error occurred while starting screensharing." : "开始屏幕共享时发生错误。", + "Select virtual background" : "选择虚拟背景", + "Show your screen" : "显示您的屏幕", + "Stop screensharing" : "停止屏幕共享", + "Mute others" : "降低其他人的声音", + "Start recording" : "开始录制", + "Set up breakout rooms" : "设置分组讨论室", + "Download attendance list" : "下载出席名单", + "Open Calendar" : "打开日历", + "Remove participant {name}" : "移除参与者{name}", + "Would you like to delete this conversation?" : "是否删除此对话?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此对话将在 %n 天不活动后自动对所有人删除。"], + "Are you sure you want to delete this conversation?" : "是否确定要删除此对话?", + "Delete now" : "立即删除", + "Keep" : "保留", + "Open dialpad" : "打开拨号面板", + "Select a region" : "选择国家/地区", + "Local time: {time}" : "本地时间:{time}", + "Scheduled {datetime}" : "预定于 {datetime}", + "Scheduled for {datetime}" : "预定于 {datetime}", + "Search …" : "搜索...", + "Message without mention" : "没有提及的消息", + "Mention myself" : "提到我自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "选择对话", + "Select a mode" : "选择模式", + "You do not have permissions to access this conversation." : "您没有访问此对话的权限。", + "Join a different conversation or start a new one." : "加入不同的对话或开始新对话。", + "The conversation does not exist" : "该对话不存在", + "Join a conversation or start a new one!" : "加入对话或开始新的对话!", + "Duplicate session" : "重复对话", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此对话已在其他标签页中打开。当前服务器版本不支持在多个标签页中打开对话。", + "Creating and joining a conversation with \"{userid}\"" : "使用“{userid}”创建和加入对话", + "Join a conversation or start a new one" : "加入一个对话或开始新对话", + "Error while joining the conversation" : "加入对话时出错", + "Another user" : "其他用户", + "Hey! Are you using the list style or message bubbles?" : "嘿!您是使用列表样式还是消息气泡?", + "Nextcloud URL" : "Nextcloud URL ", + "Nextcloud user" : "Nextcloud 用户", + "User password" : "使用密码", + "Talk conversation" : "对话", + "Skip TLS verification" : "跳过 TLS 验证", + "Matrix server URL" : "Matrix 服务器 URL", + "User" : "用户", + "Matrix channel" : "Matrix 频道", + "Mattermost server URL" : "Mattermost 服务器 URL", + "Mattermost user" : "Mattermost 用户", + "Team name" : "团队名称", + "Channel name" : "频道名称", + "Rocket.Chat server URL" : "Rocket.Chat 服务器 URL", + "User name or email address" : "用户名或电子邮件地址 ", + "Rocket.Chat channel" : "Rocket.Chat 频道", + "Zulip server URL" : "Zulip 服务器 URL", + "Bot user name" : "机器人用户名", + "Bot API key" : "机器人 API 密钥", + "Zulip channel" : "Zulip 频道", + "API token" : "API 令牌", + "Slack channel" : "Slack 频道", + "Server ID or name" : "服务器 ID 或名称", + "Channel ID (prefixed with \"ID:\") or name" : "频道 ID(前缀为“ID:”)或名称", + "Channel" : "频道", + "Login" : "登录", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 服务器 URL ( 如:chat.freenode.net:6667 )", + "Nickname" : "昵称", + "Connection password" : "连接密码", + "IRC channel" : "IRC 频道", + "Channel password" : "频道密码", + "NickServ nickname" : "NickServ 昵称", + "NickServ password" : "NickServ 密码", + "Use TLS" : "使用 TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租户 ID", + "Client ID" : "客户端ID", + "Team ID" : "团队 ID", + "Thread ID" : "帖子 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 服务器 URL", + "MUC server URL" : "MUC 服务器 URL", + "Jabber ID" : "Jabber ID ", + "Pinned messages" : "已置顶的消息", + "Media" : "媒体文件", + "Polls" : "投票", + "Deck cards" : "看板卡片", + "Voice messages" : "语音消息", + "Locations" : "地点", + "Call recordings" : "通话录制", + "Audio" : "音频", + "Show all pinned messages" : "显示所有已置顶的消息", + "Show all media" : "显示所有媒体", + "Show all files" : "显示所有文件", + "Show all polls" : "显示所有投票", + "Show all deck cards" : "显示所有看板卡片", + "Show all voice messages" : "显示所有语音消息", + "Show all locations" : "显示所有位置", + "Show all call recordings" : "显示所有通话录制", + "Show all audio" : "显示所有音频", + "Show all other" : "显示所有其他", + "Follow conversation settings" : "遵循对话设置", + "Group" : "群组", + "Team" : "团队", + "You reconnected to the call" : "你重新连接到通话", + "{actor} reconnected to the call" : "{actor} 重新连接到通话", + "You added {user0} and {user1}" : "你添加了 {user0} 和 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["你添加了 {user0} 、 {user1} 及另外%n个参与者"], + "An administrator added you and {user0}" : "管理员已添加你和 {user0}", + "{actor} added you and {user0}" : "{actor} 添加了你和 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理员已添加你、 {user0} 及另外%n个参与者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 添加了你、 {user0} 及另外%n个参与者"], + "An administrator added {user0} and {user1}" : "管理员已添加 {user0} 和 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 添加了 {user0} 和 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理员已添加 {user0} 、 {user1} 及另外%n个参与者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 添加了 {user0} 、 {user1} 及另外%n个参与者"], + "You removed {user0} and {user1}" : "您移除了 {user0} 和 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您移除了 {user0}、{user1} 和另外 %n 位参与者"], + "An administrator removed you and {user0}" : "管理员移除了您和 {user0}", + "{actor} removed you and {user0}" : "{actor} 移除了您和 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理员移除了您、{user0} 和另外 %n 位参与者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 移除了您、{user0} 和另外 %n 位参与者"], + "An administrator removed {user0} and {user1}" : "管理员移除了 {user0} 和 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 移除了 {user0} 和 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理员移除了 {user0}、{user1} 和另外 %n 位参与者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 移除了 {user0}、{user1} 和另外 %n 位参与者"], + "You and {user0} joined the call" : "您和 {user0} 加入了通话", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 以及另外 %n 位参与者加入了通话"], + "{user0} and {user1} joined the call" : "{user0} 和 {user1} 加入了通话", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 以及另外 %n 位参与者加入了通话"], + "You and {user0} left the call" : "您和 {user0} 离开了通话", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 以及另外 %n 位参与者离开了通话"], + "{user0} and {user1} left the call" : "{user0} 和 {user1} 离开了通话", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 以及另外 %n 位参与者离开了通话"], + "You promoted {user0} and {user1} to moderators" : "您将 {user0} 和 {user1} 设为了主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "An administrator promoted you and {user0} to moderators" : "管理员将您和 {user0} 设为了主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 将您和 {user0} 设为了主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理员将您、{user0} 以及另外 %n 位参与者设为了主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 将您、{user0} 以及另外 %n 位参与者设为了主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理员将 {user0} 和 {user1} 设为了主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 将 {user0} 和 {user1} 设为了主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理员将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "You demoted {user0} and {user1} from moderators" : "您取消了 {user0} 和 {user1} 的主持人身份", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您取消了 {user0}、{user1} 及另外 %n 位参与者的主持人身份"], + "An administrator demoted you and {user0} from moderators" : "管理员取消了您和 {user0} 的主持人身份", + "{actor} demoted you and {user0} from moderators" : "{actor} 取消了您和 {user0} 的主持人身份", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理员取消了您、{user0} 以及另外 %n 位参与者的主持人身份"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 取消了您、{user0} 以及另外 %n 位参与者的主持人身份"], + "An administrator demoted {user0} and {user1} from moderators" : "管理员取消了 {user0} 和 {user1} 的主持人身份", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 取消了 {user0} 和 {user1} 的主持人身份", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理员取消了 {user0}、{user1} 以及另外 %n 位参与者的主持人身份"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 取消了 {user0}、{user1} 以及另外 %n 位参与者的主持人身份"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "服务器已更新。", + "(edited by you)" : "(由您编辑)", + "(edited by a deleted user)" : "(由已删除的用户编辑)", + "(edited by {moderator})" : "(由 {moderator} 编辑)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在尝试加入对话,但同时在另一个窗口或设备中有活动会话。Nextcloud通话应用目前不支持这么做。您想做什么?", + "Leave this page" : "离开此页面", + "Join here" : "点此加入", + "Deck card has been posted to {conversation}" : "看板卡片已发送至 {conversation}", + "An error occurred while posting deck card to conversation" : "将看板卡片发布到对话时发生错误", + "Post to a conversation" : "发布到一个对话中", + "Post to conversation" : "发布到对话中", + "The recording failed. Please contact your administrator." : "录制失败。请联系您的管理员。", + "Location has been posted to {conversation}" : "位置已发布到 {conversation}", + "An error occurred while posting location to conversation" : "将位置发布到对话时发生错误", + "Share to a conversation" : "分享到一个对话", + "Share to conversation" : "分享到对话", + "In conversation" : "对话中", + "Search in conversation: {conversation}" : "在对话中搜索:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "由于暴力保护,您的请求目前受到限制", + "Error while clearing conversation history" : "清除对话历史时出错", + "Error occurred while allowing guests" : "允许访客时发生错误", + "Error occurred while disallowing guests" : "禁止访客时发生错误", + "Error occurred when restricting the conversation to moderator" : "将对话限制为主持人时发生错误", + "Error occurred when opening the conversation to everyone" : "向所有人开放对话时发生错误", + "Conversation password has been saved" : "对话密码已保存", + "Conversation password has been removed" : "对话密码已被删除 ", + "Error occurred while saving conversation password" : "保存对话密码时发生错误 ", + "Call recording is starting." : "通话录制启动中。", + "Call recording stopped while starting." : "通话录制启动时停止。", + "Call recording stopped. You will be notified once the recording is available." : "通话录制已停止。您会在录制可用时收到通知。", + "Conversation picture set" : "对话图片已设定", + "Conversation picture deleted" : "对话图片已删除", + "Could not delete the conversation picture" : "无法删除对话图片", + "Could not remove the automatic expiration" : "无法移除自动过期", + "Could not post message: {errorMessage}" : "无法发布消息: {errorMessage}", + "Participant is banned successfully" : "成功封禁了参与者", + "Error while banning the participant" : "封禁参与者时出错", + "An error occurred while fetching the participants" : "获取参与者时出错", + "Could not send invitation to {actorId}" : "无法发送邀请到 {actorId}", + "Invitations sent" : "邀请已发送", + "Error occurred when sending invitations" : "发送邀请时发生错误 ", + "Failed to join the conversation." : "无法加入对话。", + "An error occurred while creating breakout rooms" : "创建分组讨论室时发生了错误", + "An error occurred while re-ordering the attendees" : "重新排序参加者时出错", + "An error occurred while deleting breakout rooms" : "删除分组讨论室时发生错误", + "An error occurred while starting breakout rooms" : "开始分组讨论室时发生错误", + "An error occurred while stopping breakout rooms" : "停止分组讨论室时发生错误", + "An error occurred while sending a message to the breakout rooms" : "向分组讨论室发送消息时发生错误", + "An error occurred while requesting assistance" : "请求协助时发生错误·", + "An error occurred while resetting the request for assistance" : "重置协助请求时发生错误", + "An error occurred while joining breakout room" : "加入分组讨论室时发生错误", + "Failed to rename the thread" : "无法重命名帖子", + "Error fetching upcoming events" : "获取预定的活动时出错", + "Error fetching upcoming reminders" : "获取预定的提醒时出错", + "An error occurred while accepting an invitation" : "接受邀请时出错", + "An error occurred while rejecting an invitation" : "拒绝邀请时出错", + "{guest} (guest)" : "{guest}(访客)", + "Poll draft has been saved" : "已保存投票草稿", + "An error occurred while saving the draft" : "保存草稿时出错", + "An error occurred while submitting your vote" : "提交您的投票时发生错误", + "An error occurred while ending the poll" : "结束投票时发生错误", + "An error occurred while deleting the poll draft" : "删除投票草稿时出错", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} 创建了投票“{name}”,点击投票", + "Failed to add reaction" : "无法添加回应", + "Failed to remove reaction" : "无法移除回应", + "The server is in maintenance mode." : "服务器处于维护模式。", + "Federated server was updated." : "联合服务器已更新。", + "Error while uploading file \"{fileName}\"" : "上传文件 \"{fileName}\" 时出错", + "Not enough free space to upload file \"{fileName}\"" : "没有足够空间来上传文件 \"{fileName}\"", + "You are not allowed to share files" : "您不被允许分享文件", + "Error while sharing file" : "共享文件时出错", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud通话应用并不完全支持你使用的浏览器。请使用最新版本的 Mozilla Firefox、Microsoft Edge、Google Chrome、Opera 或 Apple Safari 浏览器。", + "_In %n hour_::_In %n hours_" : ["%n 小时内"], + "_%n minute _::_%n minutes_" : ["%n 分钟"], + "In {hours} and {minutes}" : "{hours} {minutes} 内", + "_In %n minute_::_In %n minutes_" : ["%n 分钟内"], + "Later today – {timeLocale}" : "今日稍晚 – {timeLocale}", + "Set time for later today" : "设定今天晚些时候的时间", + "Tomorrow – {timeLocale}" : "明天 – {timeLocale}", + "Set time for tomorrow" : "设定明天的时间", + "This weekend – {timeLocale}" : "本周末 – {timeLocale}", + "Set time for this weekend" : "设定本周末的时间", + "Next week – {timeLocale}" : "下周 – {timeLocale}", + "Set time for next week" : "设定下周的时间", + "Message link copied to clipboard" : "消息链接已复制到剪贴板", + "Conversation link copied to clipboard" : "对话链接已复制到剪贴板。", + "The link could not be copied" : "无法复制链接。", + "Error while parsing a PROPFIND error" : "解析 PROPFIND 错误时出错", + "Sending signaling message has failed" : "发送信令消息失败", + "Lost connection to signaling server. Trying to reconnect." : "与信令服务器的连接中断,正在尝试重新连接。", + "Lost connection to signaling server." : "与信令服务器连接中断。", + "Connecting is taking longer than expected …" : "连接时间比预期长…", + "Failed to connect. Retrying …" : "无法连接,正在重试…", + "Failed to connect. The signaling server may be set up incorrectly" : "无法连接,信令服务器可能设置不正确", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "配置的信令服务器需要更新才能与此版本的 Talk 兼容,请联系您的管理员。", + "Please restart the app." : "请重启应用。", + "Please reload the page." : "请重新加载页面。", + "Please try to restart the app." : "请尝试重启应用。", + "Please try to reload the page." : "请尝试重新加载页面。", + "Do not disturb" : "勿扰", + "Away" : "离开", + "Microphone {number}" : "第{number}号麦克风", + "Camera {number}" : "第{number}号摄像头", + "Speaker {number}" : "第{number}号扬声器", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎是在静音状态下讲话,请将您自己的静音取消使其他人能听到", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "无法与至少一个参与者建立连接。你的场景可能需要一个 TURN 服务器。请请求你的管理员按照 {linkstart}这个文档{linkend} 来设置一个。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "耗时超出预期。媒体权限是否已被授予(或被拒绝)?如果已被授予,请重启您的浏览器,因为音视频当前无法工作", + "Access to microphone & camera is only possible with HTTPS" : "仅使用 HTTPS 访问麦克风和摄像头", + "Please move your setup to HTTPS" : "请将您的环境移至HTTPS", + "Access to microphone & camera was denied" : "访问麦克风和摄像头被拒绝", + "WebRTC is not supported in your browser" : "您的浏览器不支持 WebRTC", + "Please use a different browser like Firefox or Chrome" : "请使用 Firefox 或 Chrome 等其他浏览器", + "Error while accessing microphone & camera" : "访问麦克风和摄像头时出错", + "%s Talk on your mobile devices" : "用于移动设备的%s通话应用", + "Join conversations at any time, anywhere, on any device." : "随时随地在任何设备上加入对话。", + "Android app" : "Android 应用", + "iOS app" : "iOS 应用", + "__language_name__" : "简体中文", + "Webhook Demo" : "Webhook 演示", + "Call summary (%s)" : "通话摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通话摘要机器人会在通话结束后发布一条概述信息,列出所有与会者并概述各项任务", + "Tasks" : "任务", + "Notes" : "附注", + "Reports" : "报告", + "Decisions" : "决定", + "Agenda" : "日程", + "Call summary" : "通话摘要", + "Call summary - {title}" : "通话摘要 - {title}", + "Talk conversation for event" : "活动的 Talk 对话", + "Client Push is installed, this improves the performance of desktop clients." : "已安装客户端推送,这提高了桌面客户端的性能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "未安装 {notify_push},这可能会导致使用桌面客户端时出现性能问题。", + "Next meeting" : "下次会议", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "从日历中安排会议。需要将 Talk 对话设置为位置才能在此处显示", + "Join conversations from remote Nextcloud servers" : "从远程 Nextcloud 服务器加入对话", + "Your default media state has been saved" : "已保存您的默认媒体状态", + "Set reminder for later today" : "今日稍晚提醒", + "Set reminder for tomorrow" : "明天提醒", + "Set reminder for this weekend" : "本周末提醒", + "Set reminder for next week" : "下周提醒", + "Generate summary" : "生成摘要", + "Open poll • You voted already" : "公开投票 · 您已投票", + "Open poll • Click to vote" : "公开投票 · 点击投票", + "Poll • Ended" : "投票 · 已结束", + "Talk recording from {time} ({conversation})" : "{time}于({conversation})对话中的录制 ", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公开投票 • %n票"], + "Submit vote" : "提交投票", + "Your privacy setting has been saved" : "你的隐私设置已保存", + "Your personal setting has been saved" : "已保存您的个人设置", + "Failed to save sounds setting" : "保存声音设置失败", + "Sounds setting saved" : "声音设置已保存", + "Always shown if recording consent is required" : "如果需要录制同意,则始终显示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您无法开始或加入通话。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "你在另一个窗口或设备上加入了对话。Nextcloud通话应用目前不支持这么做,所以这个会话被关闭了。", + "Nextcloud Talk was updated." : "Nextcloud Talk 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 处于维护模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "启用实时翻译", + "I picked list style" : "我择了列表样式", + "Hey! Are you using Talk in list style or with message bubbles?" : "嘿!您是使用列表样式还是有消息气泡的 Talk?" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/zh_CN.json b/l10n/zh_CN.json new file mode 100644 index 0000000..b4f0d00 --- /dev/null +++ b/l10n/zh_CN.json @@ -0,0 +1,2258 @@ +{ "translations": { + "a conversation" : "一个对话", + "(Duration %s)" : "(时长 %s)", + "You attended a call with {user1}" : "您参加了{user1}的通话", + "_%n guest_::_%n guests_" : ["%n 位访客"], + "You attended a call with {user1} and {user2}" : "您参加了{user1}和{user2}的通话", + "You attended a call with {user1}, {user2} and {user3}" : "您参加了{user1},{user2}和{user3} 的通话", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您参加了{user1},{user2},{user3}和{user4}的通话", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您参加了{user1},{user2},{user3},{user4}和{user5}的通话", + "_%n other_::_%n others_" : ["及另外%n人"], + "{actor} invited you to {call}" : "{actor}邀请您加入{call}", + "You were invited to a conversation or had a call" : "您被邀请加入一个对话或一个通话", + "Other activities" : "其他活动", + "Talk" : "通话", + "Guest" : "访客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 欢迎来到 Nextcloud 通话!\n此对话将向您介绍Nextcloud通话中的新功能", + "## New in Talk %s" : "## Talk %s 的新功能", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- Microsoft Edge和Safari浏览器现可用于参与音视频通话", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 一对一的对话现在是持久性的,并且不会意外地变成群组对话。另外,当其中一个参与者离开对话时,对话不会被自动删除。只有当双方都离开时,对话才会从服务器上删除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您可以在聊天中输入 \"@all\" 以通知所有参与者", + "- With the \"arrow-up\" key you can repost your last message" : "- 您可以使用 \"向上\" 键重复输入您的上一条消息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- 通话应用现在可以支持命令了,将 \"/help\" 作为聊天消息发出以查看您的管理员是否配置了一些命令", + "- With projects you can create quick links between conversations, files and other items" : "- 您可以使用项目来在对话、文件和其他项目间创建快速链接", + "- You can now mention guests in the chat" : "-您现在可以在聊天中提及访客", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 对话现在可以设置一个大厅。 这将使主持人可以加入聊天并开始通话以准备会议,而用户和访客则必须等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您现在可以直接回复消息,为其他用户提供更多关于您的消息的上下文", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 现在,搜索对话和参与者也将过滤您现有的对话,使查找以前的对话更加容易", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 现在,您可以在安装圈子应用后将自定义用户组添加到对话中", + "- Check out the new grid and call view" : "- 体验一下新的排列和通话界面", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您现在可以从您的设备上传或拖拽文件到一场对话", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 分享文件现在可以直接从聊天界面使用查看应用打开", + "- You can now search for chats and messages in the unified search in the top bar" : "- 你现在可以在顶栏的统一搜索框搜索聊天和消息", + "- Spice up your messages with emojis from the emoji picker" : "- 用从表情选择器挑选来的表情符号为您的消息加点料", + "- You can now change your camera and microphone while being in a call" : "- 您现在可以在通话时切换您的摄像头和麦克风", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 给你的对话提供一些背景和描述,并打开它,以便登录用户可以找到它并加入他们自己", + "- See a read status and send failed messages again" : "- 查看阅读状态,并再次发送失败的消息", + "- Raise your hand in a call with the R key" : "- 在通话中按 R 键举手", + "- Join the same conversation and call from multiple devices" : "- 加入同一对话并从多个设备进行呼叫", + "- Send voice messages, share your location or contact details" : "- 发送语音消息,分享您的位置或联系方式", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 在对话中加入群组,群组成员会自动被添加为参与者", + "- A preview of your audio and video is shown before joining a call" : "- 加入通话前会显示音视频预览", + "- You can now blur your background in the newly designed call view" : "- 你现在可以在新设计的通话视图中模糊你的背景", + "- Moderators can now assign general and individual permissions to participants" : "- 主持人现在可以为参与者分配一般和单独权限", + "- You can now react to chat messages" : "- 您现在可以对聊天消息做出回应", + "- In the sidebar you can now find an overview of the latest shared items" : "- 现在您可以在侧边栏中找到最近已分享项目的概况", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用投票搜集他人意见或确定日期", + "- Configure an expiration time for chat messages" : "- 配置聊天消息的过期时间", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在不通知他人的情況下开始通话。通话开始后,您可以发送单独的通话通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不紧急的情況下发送聊天消息而不通知收讯人", + "- Emojis can now be autocompleted by typing a \":\"" : "- 现在可以通过输入“:”来自动补全表情符号", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 通过输入“/”来使用新的智能选择器链接各种项目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人现在可以创建分组讨论室(需要高性能后端)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 现在可以录制通话(需要高性能后端)", + "- Conversations can now have an avatar or emoji as icon" : "- 对话现在可以使用头像或者表情符号来作为图标", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 视频通话除了模糊背景外,现在也可以使用虚拟背景了", + "- Reactions are now available during calls" : "- 现在可以在通话期间做出回应", + "- Typing indicators show which users are currently typing a message" : "- 输入指示器显示目前正在输入的用户", + "- Groups can now be mentioned in chats" : "- 现在可以在聊天中提及群组", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 如果注册了转录提供者应用,会自动转录通话录制", + "- Chat messages can be translated if a translation provider app is registered" : "- 如果注册了提供翻译的应用程序,则可以翻译聊天消息", + "- **Markdown** can now be used in _chat_ messages" : "- _聊天信息_ 中可以使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- 支持使用 Webhook 接入机器人。详情请参考文档 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 为聊天消息设置稍后提醒", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用 **自我备注** 对话在您的设备之间做笔记和共享信息", + "- Captions allow to send a message with a file at the same time" : "- 字幕允许同时发送消息和文件", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 现在在共享屏幕时可以看到演讲者的视频,并且通话反应以动画形式显示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登录的作者和主持人现在可以在 6 小时内编辑消息", + "- Unsent message drafts are now saved in your browser" : "- 未发送的消息草稿现在会保存在浏览器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 现在可以与其他 Talk 服务器以联合方式进行文本聊天", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人现在可以封禁账号和访客,以防止他们重新加入对话", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 对话中现在会显示来自链接日历活动和外出接替者的预定的通话", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 现在可以与其他 Talk 服务器以联合方式进行通话(需要高性能后端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 引入适用于 Windows、macOS 和 Linux 的 Nextcloud Talk 桌面客户端:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud 助手总结通话记录和聊天中的未读消息", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 改进了会议功能,通过电子邮件地址识别受邀访客、导入参与者列表、起草投票和下载通话参与者列表", + "- Archive conversations to stay focused" : "- 将对话存档以保持专注", + "- Schedule a meeting into your calendar from within a conversation" : "- 从对话中将会议安排到您的日历中", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右侧边栏中搜索当前对话的消息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的紧凑列表(在通话设置中启用)一眼就能看到更多对话", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 会议对话现在可以同步日历中的标题和描述,并使用搜索过滤器隐藏,直到接近开始时才显示", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知设置中将对话标记为敏感,以在对话列表和通知中隐藏消息内容", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 要在“勿扰”期间接收推送通知,请将对话标记为重要", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 将其他参与者添加到一对一通话中,以便即时创建新的群组通话", + "- Use threads to keep your chat and discussions organized" : "- 使用帖子来组织您的聊天和讨论", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通话期间现在可以进行实时转录(需要实时转录外部应用和高性能后端)", + "- Moderators can now pin messages so they are kept at the top" : "- 主持人现在可以置顶消息,使其始终在顶部显示", + "- Schedule a message to send it at a later time" : "- 安排消息以便稍后发送", + "_All %n participant_::_All %n participants_" : ["全部 %n 位参与者"], + "Talk updates ✅" : "通话应用更新 ✅", + "Reaction deleted by author" : "回应被作者删除", + "{actor} created the conversation" : "{actor}创建了对话", + "You created the conversation" : "您创建了对话", + "System created the conversation" : "系统创建了对话", + "An administrator created the conversation" : "管理员创建了这个对话", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor}将对话“%1$s”重命名为了“%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您将对话 \"%1$s\" 重命名为 \"%2$s\"", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "一位管理员将对话从“%1$s”重命名为“%2$s”", + "{actor} set the description" : "{actor} 设置了描述", + "You set the description" : "你设置了描述", + "An administrator set the description" : "一名管理员设置了描述", + "{actor} removed the description" : "{actor} 移除了描述", + "You removed the description" : "您移除了描述", + "An administrator removed the description" : "一位管理员移除了描述", + "You started a silent call" : "您发起了一个静默通话", + "Outgoing silent call" : "静默去电", + "{actor} started a silent call" : "{actor} 发起了一个静默通话", + "Incoming silent call" : "静默来电", + "You started a call" : "您开始了一个通话", + "Outgoing call" : "去电", + "{actor} started a call" : "{actor} 开始了一个通话", + "Incoming call" : "来电", + "{actor} joined the call" : "{actor} 加入了通话", + "You joined the call" : "您加入了通话", + "{actor} left the call" : "{actor} 离开了通话", + "You left the call" : "您离开了通话", + "{actor} unlocked the conversation" : "{actor}解锁了对话", + "You unlocked the conversation" : "您解锁了对话", + "An administrator unlocked the conversation" : "一位管理员解锁了对话", + "{actor} locked the conversation" : "{actor}锁定了对话", + "You locked the conversation" : "您锁定了对话", + "An administrator locked the conversation" : "一位管理员锁定了对话", + "{actor} limited the conversation to the current participants" : "{actor}将对话限于当前参与者", + "You limited the conversation to the current participants" : "你将对话限制在当前参与者范围内", + "An administrator limited the conversation to the current participants" : "管理员将对话限于当前参与者", + "{actor} opened the conversation to registered users" : "{actor} 向注册用户开放了对话", + "You opened the conversation to registered users" : "你向注册用户开放了对话", + "An administrator opened the conversation to registered users" : "管理员向注册用户开放了对话", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已注册用户和通过访客应用创建的账号开放了此对话", + "You opened the conversation to registered users and users created with the Guests app" : "你向已注册用户和通过访客应用创建的账号开放了此对话", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理员向已注册用户和通过访客应用创建的账号开放了此对话", + "The conversation is now open to everyone" : "此对话现在对所有人开放", + "{actor} opened the conversation to everyone" : "{actor}将对话开放给所有人", + "You opened the conversation to everyone" : "您将对话开放给所有人", + "{actor} restricted the conversation to moderators" : "{actor}将对话限制到与主持人之间", + "You restricted the conversation to moderators" : "你将对话限制到与主持人之间", + "{actor} started breakout rooms" : "{actor}开始了分组讨论室", + "You started breakout rooms" : "您开始了分组讨论室", + "{actor} stopped breakout rooms" : "{actor}停止了分组讨论室", + "You stopped breakout rooms" : "您停止了分组讨论室", + "{actor} allowed guests" : "{actor} 允许了访客加入", + "You allowed guests" : "您允许了访客加入", + "An administrator allowed guests" : "一位管理员允许了访客", + "{actor} disallowed guests" : "{actor} 禁止了访客加入", + "You disallowed guests" : "您禁止了访客加入", + "An administrator disallowed guests" : "一位管理员禁止了访客", + "{actor} set a password" : "{actor} 设置了一个密码", + "You set a password" : "您设置了一个密码", + "An administrator set a password" : "一位管理员设置了口令", + "{actor} removed the password" : "{actor} 移除了密码", + "You removed the password" : "您移除了密码", + "An administrator removed the password" : "一位管理员移除了口令", + "{actor} added {user}" : "{actor} 添加了 {user}", + "You joined the conversation" : "您加入了对话", + "{actor} joined the conversation" : "{actor}加入了对话", + "You added {user}" : "您添加了 {user}", + "{actor} added you" : "{actor} 添加了您", + "An administrator added you" : "一位管理员添加了您", + "An administrator added {user}" : "一位管理员添加了 {user}", + "You left the conversation" : "您离开了对话", + "{actor} left the conversation" : "{actor}离开了对话", + "{actor} removed {user}" : "{actor} 移除了 {user}", + "You removed {user}" : "您移除了 {user}", + "{actor} removed you" : "{actor} 移除了您", + "An administrator removed you" : "一位管理员移除了您", + "An administrator removed {user}" : "一位管理员移除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀请了 {federated_user}", + "You invited {federated_user}" : "你邀请了 {federated_user}", + "You accepted the invitation" : "您接收了邀请", + "{actor} invited you" : "{actor} 邀请了您", + "An administrator invited you" : "管理员邀请了您", + "An administrator invited {federated_user}" : "管理员邀请了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀请", + "{actor} removed {federated_user}" : "{actor} 移除了{federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您拒绝了邀请", + "An administrator removed {federated_user}" : "管理员移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 拒绝了邀請", + "{actor} added group {group}" : "{actor} 添加了小组 {group}", + "You added group {group}" : "你添加了小组 {group}", + "An administrator added group {group}" : "一名管理员添加了小组 {group}", + "{actor} removed group {group}" : "{actor} 删除了小组 {group}", + "You removed group {group}" : "你删除了小组 {group}", + "An administrator removed group {group}" : "一名管理员删除了小组 {group}", + "{actor} added team {circle}" : "{actor} 添加了团队 {circle}", + "You added team {circle}" : "您添加了团队 {circle}", + "An administrator added team {circle}" : "管理员添加了团队 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了团队 {circle}", + "You removed team {circle}" : "您移除了团队 {circle}", + "An administrator removed team {circle}" : "管理员移除了团队 {circle}", + "{actor} added {phone}" : "{actor} 添加了 {phone}", + "You added {phone}" : "你添加了 {phone}", + "An administrator added {phone}" : "管理员添加了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "你移除了 {phone}", + "An administrator removed {phone}" : "管理员移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor}将{user}提升为主持人", + "You promoted {user} to moderator" : "您将{user}提升为主持人", + "{actor} promoted you to moderator" : "{actor}提升您为主持人", + "An administrator promoted you to moderator" : "一位管理员将您提升为主持人", + "An administrator promoted {user} to moderator" : "一位管理员将{user}提升为主持人", + "{actor} demoted {user} from moderator" : "{actor}将{user}撤销主持人", + "You demoted {user} from moderator" : "您将{user}撤销主持人", + "{actor} demoted you from moderator" : "{actor}将您撤销主持人", + "An administrator demoted you from moderator" : "一位管理员将您撤销主持人", + "An administrator demoted {user} from moderator" : "一位管理员将{user}撤销主持人", + "{actor} shared a file which is no longer available" : "{actor}分享了一个不再可用的文件", + "You shared a file which is no longer available" : "您分享了一个不再可用的文件", + "File shares are currently not supported in federated conversations" : "联合对话现在不支持文件分享", + "The shared location is malformed" : "分享的位置变形", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 设置了 Matterbridge,使此对话与其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "你设置了 Matterbridge,以将此对话与其他聊天同步", + "{actor} created thread {title}" : "{actor} 创建了帖子 {title}", + "You created thread {title}" : "您创建了帖子 {title}", + "{actor} renamed thread {title}" : "{actor} 已将帖子重命名为 {title}", + "You renamed thread {title}" : "您已将帖子重命名为 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 配置", + "You updated the Matterbridge configuration" : "你更新了 Matterbridge 配置", + "{actor} removed the Matterbridge configuration" : "{actor} 移除了 Matterbridge 配置", + "You removed the Matterbridge configuration" : "你移除了 Matterbridge 配置", + "{actor} started Matterbridge" : "{actor} 启动了 Matterbridge", + "You started Matterbridge" : "你启动了 Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "你停止了 Matterbridge", + "{actor} deleted a message" : "{actor}删除了一条消息", + "You deleted a message" : "你删除了一条消息", + "{actor} edited a message" : "{actor} 编辑了一条信息", + "You edited a message" : "您编辑了一条信息", + "{actor} pinned a message" : "{actor} 置顶了一条消息", + "You pinned a message" : "您置顶了一条消息", + "{actor} unpinned a message" : "{actor} 取消置顶了一条消息", + "Message was automatically unpinned" : "消息已自动取消置顶", + "You unpinned a message" : "您取消置顶了一条消息", + "{actor} deleted a reaction" : "{actor} 刪除了一个回应", + "You deleted a reaction" : "你删除了一个回应", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您将消息过期时间设置为%n星期"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您将消息过期时间设置为%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您将消息过期时间设置为%n小时"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您将消息过期时间设置为%n分钟"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor}将消息过期时间设置为%n星期"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor}将消息过期时间设置为%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor}将消息过期时间设置为%n小时"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor}将消息过期时间设置为%n分钟"], + "{actor} disabled message expiration" : "{actor}禁用了消息过期时间", + "You disabled message expiration" : "您禁用了消息过期时间", + "{actor} cleared the history of the conversation" : "{actor}清除了对话历史", + "You cleared the history of the conversation" : "你清除了对话历史", + "{actor} set the conversation picture" : "{actor}设置了对话图片", + "You set the conversation picture" : "您设置了对话图片", + "{actor} removed the conversation picture" : "{actor}移除了对话图片", + "You removed the conversation picture" : "您设置了对话图片", + "{actor} ended the poll {poll}" : "{actor} 结束了投票 {poll}", + "You ended the poll {poll}" : "您结束了投票 {poll}", + "{actor} started the video recording" : "{actor}开始视频录制", + "You started the video recording" : "您开始视频录制", + "{actor} stopped the video recording" : "{actor}停止视频录制", + "You stopped the video recording" : "您停止视频录制", + "{actor} started the audio recording" : "{actor}开始音频录制", + "You started the audio recording" : "您开始音频录制", + "{actor} stopped the audio recording" : "{actor}停止音频录制", + "You stopped the audio recording" : "您停止音频录制", + "The recording failed" : "录制失败", + "Someone voted on the poll {poll}" : "有人在投票 {poll} 中投票了", + "Message deleted by author" : "消息被作者删除了", + "Message deleted by {actor}" : "消息被 {actor} 删除了", + "Message deleted by you" : "消息被你删除了", + "Deleted user" : "删除用户", + "Unknown number" : "未知号码", + "Administration" : "管理员", + "System" : "系统", + "%s (guest)" : "%s(访客)", + "Missed call" : "未接来电", + "Unanswered call" : "未接通话", + "Call ended (Duration {duration})" : "通话结束(时长 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "通话结束,因为已达到最大通话时长(时长 {duration})", + "{actor} ended the call (Duration {duration})" : "{actor} 结束了通话(时长 {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["与 %n 位访客的通话已结束,因为已达到最大通话时长(时长 {duration})"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["与 %n 位访客的通话已结束(时长 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 结束了与 %n 位访客的通话(时长 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1} ended (Duration {duration})" : "与 {user1} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 结束了与 {user1} 的通话(时长 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1} 和 {user2} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1} and {user2} ended (Duration {duration})" : "与 {user1} 和 {user2} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 结束了与 {user1} 和 {user2} 的通话(时长 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2} 和 {user3} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "与 {user1}、{user2} 和 {user3} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 和 {user3} 的通话(时长 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2}、{user3} 和 {user4} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "与 {user1}、{user2}、{user3} 和 {user4} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 、 {user3} 和 {user4} 的通话(时长 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "与 {user1}、{user2}、{user3}、{user4} 和 {user5} 的通话已结束,因为已达到最大通话时长(时长 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "与 {user1}、{user2}、{user3}、{user4} 和 {user5} 的通话已结束(时长 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 结束了与 {user1}、{user2} 、 {user3}、{user4} 和 {user5} 的通话(时长 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中来自 {user} 的消息", + "Message of {user}" : "{user} 的消息", + "Message of a deleted user in {conversation}" : "{conversation} 中已删除用户的消息", + "Talk conversations" : "对话", + "Talk to %s" : "和 %s 对话", + "An error occurred. Please contact your administrator." : "发生了一个错误。请联系你的管理员。", + "App disabled" : "应用已禁用", + "Conversation subfolders are disabled" : "对话子文件夹已禁用", + "Storage quota exceeded" : "超出存储限额", + "Could not prepare conversation folder" : "无法准备对话文件夹", + "File not found" : "文件未找到", + "Path must point to a file" : "路径必须指向文件", + "File is not inside the conversation draft folder for this room" : "文件不在此聊天室的对话草稿文件夹中", + "File is not shared, or shared but not with the user" : "文件未分享,或没有分享给用户", + "No account available to delete." : "没有可删除的账号。", + "Poll" : "投票", + "Password needs to be set" : "需要设置密码", + "Uploading the file failed" : "上传文件失败", + "No image file provided" : "未提供图片文件", + "File is too big" : "文件太大", + "Invalid file provided" : "提供了无效文件", + "Invalid image" : "无效图片", + "Unknown filetype" : "未知的文件类型", + "Talk mentions" : "通话提及", + "More conversations" : "更多对话", + "Say hi to your friends and colleagues!" : "跟您的朋友和同事打个招呼!", + "No unread mentions" : "无未读的提及", + "Call in progress" : "通话中...", + "You were mentioned" : "有人提及了您", + "Write to conversation" : "向对话写入", + "Writes event information into a conversation of your choice" : "将活动信息写入您选择的对话", + "Missing email field in header line" : "标题行中缺少电子邮件字段", + "Following lines are invalid: %s" : "以下行无效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀请您加入对话“%2$s”。", + "You were invited to conversation \"%s\"." : "您已受邀加入对话“%s”。", + "Conversation invitation" : "对话邀请", + "Scheduled time" : "预定时间", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "你也可以通过电话拨号,详情如下 ", + "Dial-in information" : "拨号信息", + "Meeting ID" : "会议ID", + "Your PIN" : "您的 PIN 码", + "Click the button below to join the lobby now." : "点击下方按钮立即加入大厅。", + "Click the link below to join the lobby now." : "点击下方链接立即加入大厅。", + "Join lobby for \"%s\"" : "加入“%s”的大厅", + "Click the button below to join the conversation now." : "点击下方按钮立即加入对话。", + "Click the link below to join the conversation now." : "点击下方链接立即加入对话。", + "Join \"%s\"" : "加入“%s”", + "Meeting" : "会议", + "Password request: %s" : "密码请求: %s", + "Private conversation" : "私有对话", + "Deleted user (%s)" : "已删除用户(%s)", + "Failed to upload call recording" : "上传通话录制失败", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "录制服务器上传通话{call}的录制失败。请联系管理员。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "忽略通知", + "Call recording now available" : "通话录制现在可用", + "The recording for the call in {call} was uploaded to {file}." : "{call}中的通话录制已上传到{file}。", + "Transcript now available" : "转录现在可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 通话的转录已上传至 {file}。", + "Failed to transcript call recording" : "无法转录通话录制", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "服务器无法转录 {call} 中 {file} 的通话录音。请联系管理员。", + "Call summary now available" : "通话摘要现已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 中的通话摘要已上传到 {file}。", + "Failed to summarize call recording" : "无法总结通话记录", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "服务器无法总结 {call} 中的通话在 {file} 上的录音。请联系管理员。 ", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀请您加入 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "拒绝", + "{user1} invited you to a federated conversation" : "{user1} 邀请您加入联合对话", + "Someone reacted" : "有人做出了回应", + "New message" : "新消息", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通知", + "Someone reacted in a private conversation" : "有人在私人对话中做出了回应", + "You received a message in a private conversation" : "您在私人对话中收到了一条消息", + "Reminder in a private conversation" : "私人对话中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人对话中提及你", + "Notification in a private conversation" : "私人对话中的通知", + "Reminder: You in {call}" : "提醒:你在 {call} 中", + "Reminder: {user} in {call}" : "提醒: {user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已删除的用户在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:访客 {guest} 在 {call} 中", + "Reminder: Guest in {call}" : "提醒:访客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 表示了 {reaction}", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中表示了 {reaction}", + "Deleted user reacted with {reaction} in {call}" : "已删除的用户在 {call} 中表示了 {reaction}", + "{guest} (guest) reacted with {reaction} in {call}" : "访客 {guest} 在 {call} 中表示了 {reaction}", + "Guest reacted with {reaction} in {call}" : "访客在 {call} 中表示了 {reaction}", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "删除了 {call} 中的用户", + "{guest} (guest) in {call}" : "{guest} (访客) 位于 {call}", + "Guest in {call}" : "在 {call} 中的访客", + "{user} sent you a private message" : "{user}给您发了一条私信", + "{user} sent a message in conversation {call}" : "{user}在对话{call}中发了一条消息", + "A deleted user sent a message in conversation {call}" : "一位已删除的用户在对话{call}中发了一条消息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(访客)在对话{call}中发了一条消息", + "A guest sent a message in conversation {call}" : "一位访客在对话{call}中发了一条消息", + "{user} replied to your private message" : "{user}回复了您的私信", + "{user} replied to your message in conversation {call}" : "{user}在对话{call}中回复了您的消息", + "A deleted user replied to your message in conversation {call}" : "一个已删除的用户在对话{call}中回复了您的消息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(访客)在对话{call}中回复了您的消息", + "A guest replied to your message in conversation {call}" : "一个访客在对话{call}中回复了您的消息", + "Reminder: You in private conversation {call}" : "提醒:你在私密对话 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已删除的用户在私密对话 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私密对话中", + "Reminder: You in conversation {call}" : "提醒:你在对话 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在对话 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已删除的用户在对话 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:访客 {guest} 在对话 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:访客在对话 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user}对您的私信做出了{reaction}回应", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user}在对话{call}中对您的消息做出了{reaction}回应", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "一位已删除的用户在对话{call}中对您的消息做出了{reaction}回应", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}(访客)在对话{call}中对您的消息做出了{reaction}回应", + "A guest reacted with {reaction} to your message in conversation {call}" : "访客在对话{call}中对您的消息做出了{reaction}回应", + "{user} mentioned you in a private conversation" : "{user} 在一个私人对话中提及了您", + "{user} mentioned group {group} in conversation {call}" : "{user}在对话{call}中提及了群组{group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在对话 {call} 中提及了团队 {team}", + "{user} mentioned everyone in conversation {call}" : "{user}在对话{call}中提及了所有人", + "{user} mentioned you in conversation {call}" : "{user} 在对话 {call} 中提及了您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了群组 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了团队 {team}", + "A deleted user mentioned everyone in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了所有人", + "A deleted user mentioned you in conversation {call}" : "一位已删除的用户在对话 {call} 中提及了您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了群组 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了团队 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(访客)在对话 {call} 中提及了您 ", + "A guest mentioned group {group} in conversation {call}" : "一位访客在对话 {call} 中提及了群组 {group}", + "A guest mentioned team {team} in conversation {call}" : "一位访客在对话 {call} 中提及了团队 {team}", + "A guest mentioned everyone in conversation {call}" : "一位访客在对话 {call} 中提及了所有人", + "A guest mentioned you in conversation {call}" : "一位访客在对话 {call} 中提及了您 ", + "View message" : "查看消息", + "Dismiss reminder" : "取消提醒", + "View chat" : "查看聊天", + "{user} invited you to a group conversation: {call}" : "{user}邀请您加入一个小组对话:{call}", + "Join call" : "加入通话", + "Answer call" : "接听通话", + "{user} would like to talk with you" : "{user}想和您对话", + "Call back" : "回拨", + "You missed a call from {user}" : "您错过了来自 {user} 的一个通话", + "Accept call" : "接听通话", + "Incoming phone call from {call}" : "来自 {call} 的来电", + "You missed a phone call from {call}" : "您错过了来自 {call} 的通话", + "A group call has started in {call}" : "已在 {call} 小组中开始通话", + "You missed a group call in {call}" : "您在 {call} 中错过了一个组通话", + "{email} is requesting the password to access {file}" : "{email} 请求密码以访问 {file}", + "{email} tried to request the password to access {file}" : "{email} 尝试请求密码访问 {file}", + "Someone is requesting the password to access {file}" : "有人请求密码以访问 {file}", + "Someone tried to request the password to access {file}" : "有人试图要求密码访问 {file}", + "Open settings" : "打开设置", + "Hosted signaling server added" : "已添加托管的信令服务器", + "The hosted signaling server is now configured and will be used." : "托管的信令服务器现已配置并将被使用。", + "Hosted signaling server removed" : "已移除托管的信令服务器", + "The hosted signaling server was removed and will not be used anymore." : "托管的信令服务器已被移除且无法再使用。", + "Hosted signaling server changed" : "已更改托管的信令服务器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "托管信令服务器账号的状态已从 \"{oldstatus}\" 变更为 \"{newstatus}\"", + "pending" : "等待中", + "active" : "活动", + "expired" : "已过期", + "blocked" : "已封锁", + "error" : "错误", + "The certificate of {host} expires in {days} days" : "{host}的证书将在{days}天后过期", + "The certificate of {host} expired" : "{host}的证书已过期", + "Contact via Talk" : "通过通话应用联系", + "Open Talk" : "打开通话应用", + "Default" : "默认", + "Send messages, create threads, and start voice and video calls." : "发送消息、创建线程以及开始语音和视频通话。", + "Presentation" : "演示文稿", + "Voice room" : "语音室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通话,非常适合即时会议或自发会议。", + "Webinar" : "网络研讨会", + "Conversations" : "对话", + "Messages in current conversation" : "当前对话中的消息", + "{user}" : "{user}", + "Messages" : "消息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "在其他对话中的消息", + "One-to-one rooms always need to show the other users avatar" : "一对一的聊天室一律需要显示其他用户的邮箱", + "Invalid emoji character" : "无效的表情符号字符", + "Invalid background color" : "无效的背景颜色", + "Avatar image is not square" : "头像图像不是正方形", + "Room {number}" : "聊天室{number}", + "Other" : "其他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "因测试服务器不可达,无法请求测试。请稍后重试。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此实例的身份验证存在一个问题。也许不能从外部访问它来验证它的 URL。", + "Something unexpected happened." : "出现了一些异常情况。", + "The URL is invalid." : "URL 无效", + "An HTTPS URL is required." : "要求使用 HTTPS 链接", + "The email address is invalid." : "电子邮件地址无效", + "The language is invalid." : "语言无效", + "The country is invalid." : "国家/地区无效", + "There is a problem with the request of the trial. Please check your logs for further information." : "试用请求有个问题。请检查你的日志以获得进一步的信息。", + "Too many requests are send from your servers address. Please try again later." : "你的服务器地址发送了太多的请求。请稍后再试。", + "There is already a trial registered for this Nextcloud instance." : "此Nextcloud实例已有一个已注册的trial。", + "Something unexpected happened. Please try again later." : "出现了一些异常情况。请稍后重试。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "因测试服务器行为异常,无法请求测试。请稍后重试。", + "Trial requested but failed to get account information. Please check back later." : "已请求测试但无法获取账号信息。请稍后检查。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此请求的验证操作有问题。可能是因为无法从外部访问来验证它的URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "由于测试服务器行为错误,无法获取帐户信息。请稍后再来查看。 ", + "There is a problem with fetching the account information. Please check your logs for further information." : "获取账号信息有问题。请查看您的日志以获取更多信息。", + "There is no such account registered." : "没有这个已注册账号。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "因测试服务器不可达,无法获取账号信息。请稍后检查。", + "Deleting the hosted signaling server account failed. Please check back later." : "删除托管信令服务器失败。请稍后检查。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "因测试服务器行为异常,无法删除账号。请稍后检查。", + "There is a problem with deleting the account. Please check your logs for further information." : "删除账号有问题。请查看您的日志以获取更多信息。", + "Too many requests are sent from your servers address. Please try again later." : "你的服务器地址发送了太多的请求。请稍后再试。 ", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "因测试服务器不可达,无法删除账号。请稍后检查。", + "Note to self" : "自我备注", + "A place for your private notes, thoughts and ideas" : "一个用于记录您的私人笔记、思考和想法的地方", + "Transcript is AI generated and may contain mistakes" : "转录是 AI 生成的,可能包含错误", + "Summary is AI generated and may contain mistakes" : "摘要是 AI 生成的,可能包含错误", + "Let's get started!" : "让我们开始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是安全的、自托管的通信平台,与 Nextcloud 生态系统无缝集成。\n\n#### Nextcloud Talk 的主要特点:\n\n* 私聊和群聊中的聊天和消息\n* 语音和视频通话\n* 文件分享和与其他 Nextcloud 应用的集成\n* 可定制的对话设置、审核和隐私控制\n* 网页、桌面和移动设备(iOS 和 Android)\n* 私密且安全的通信\n\n在[用户文档](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)中了解详情。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 欢迎使用 Nextcloud Talk\n\nNextcloud Talk 是与 Nextcloud 集成的私密且功能强大的消息应用。在私人或群组对话中聊天,通过语音和视频通话进行协作,组织网络研讨会和活动,定制您的对话等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 设置文本格式以创建丰富的消息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 语法来格式化您的消息。例如,应用 **加粗** 或 *倾斜* 格式,或 `将文本突出显示为代码`。您甚至可以创建表格,并在文本中添加标题。\n\n需要修正拼写错误或更改格式吗?通过点击消息菜单中的“编辑消息”来编辑您的消息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 添加附件和链接\n\n使用“+”按钮从 Nextcloud Hub 附加文件。分享文件和各种 Nextcloud 应用中的项目。一些应用甚至支持互动式微件,例如文本应用。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 让对话流畅:提及用户、回应消息等等\n\n您可以使用 %s 提及对话中的所有人,或者输入“@”并从列表中选择特定参与者的名称来提及他们。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回复消息,将其转发给其他聊天和联系人,或复制消息内容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智能选择器执行更多操作\n\n只需输入“/”或转到“+”菜单即可打开智能选择器,您可以在其中将各种内容附加到您的消息中。您可以配置智能选择器,使其能够从 Nextcloud 应用、GIF、地图位置、AI 生成的内容等添加项目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理对话设置\n\n在对话菜单中,您可以访问各种设置来管理对话,例如:\n* 编辑对话信息\n* 管理通知\n* 应用众多审核规则\n* 配置访问权限和安全性\n* 启用机器人\n* 以及更多!", + "Andorra" : "安道尔", + "United Arab Emirates" : "阿拉伯联合酋长国", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布达", + "Anguilla" : "安圭拉", + "Albania" : "阿尔巴尼亚", + "Armenia" : "亚美尼亚共和国", + "Angola" : "安哥拉", + "Antarctica" : "南极洲", + "Argentina" : "阿根廷", + "American Samoa" : "美属萨摩亚", + "Austria" : "奥地利", + "Australia" : "澳大利亚", + "Aruba" : "阿鲁巴", + "Åland Islands" : "奥兰", + "Azerbaijan" : "阿塞拜疆", + "Bosnia and Herzegovina" : "波斯尼亚和黑塞哥维那", + "Barbados" : "巴巴多斯", + "Bangladesh" : "孟加拉国", + "Belgium" : "比利时", + "Burkina Faso" : "布基纳法索", + "Bulgaria" : "保加利亚", + "Bahrain" : "巴林", + "Burundi" : "布隆迪", + "Benin" : "贝宁", + "Saint Barthélemy" : "圣巴泰勒米", + "Bermuda" : "百慕大", + "Brunei Darussalam" : "文莱达鲁萨兰国", + "Bolivia, Plurinational State of" : "多民族玻利维亚国", + "Bonaire, Sint Eustatius and Saba" : "博内尔岛,圣尤斯特歇斯岛和萨巴岛", + "Brazil" : "巴西", + "Bahamas" : "巴哈马", + "Bhutan" : "不丹", + "Bouvet Island" : "布维岛", + "Botswana" : "博茨瓦纳", + "Belarus" : "白俄罗斯", + "Belize" : "伯利兹", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科科斯(基林)群岛", + "Congo, the Democratic Republic of the" : "刚果民主共和国", + "Central African Republic" : "中非共和国", + "Congo" : "刚果", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "科特迪瓦", + "Cook Islands" : "库克群岛", + "Chile" : "智利", + "Cameroon" : "喀麦隆", + "China" : "中国", + "Colombia" : "哥伦比亚", + "Costa Rica" : "哥斯达黎加", + "Cuba" : "古巴", + "Cabo Verde" : "佛得角", + "Curaçao" : "库拉索", + "Christmas Island" : "圣诞岛", + "Cyprus" : "赛浦路斯", + "Czechia" : "捷克", + "Germany" : "德国", + "Djibouti" : "吉布提", + "Denmark" : "丹麦", + "Dominica" : "多米尼加", + "Dominican Republic" : "多明尼加共和国", + "Algeria" : "阿尔及利亚", + "Ecuador" : "厄瓜多尔", + "Estonia" : "爱沙尼亚", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄立特里亚", + "Spain" : "西班牙", + "Ethiopia" : "埃塞俄比亚", + "Finland" : "芬兰", + "Fiji" : "斐济", + "Falkland Islands (Malvinas)" : "福克兰群岛(马尔维纳斯群岛)", + "Micronesia, Federated States of" : "密克罗尼西亚联邦", + "Faroe Islands" : "法罗群岛", + "France" : "法国", + "Gabon" : "加蓬", + "United Kingdom of Great Britain and Northern Ireland" : "大不列颠及北爱尔兰联合王国", + "Grenada" : "格林纳达", + "Georgia" : "格鲁吉亚", + "French Guiana" : "法属圭亚那", + "Guernsey" : "根西岛", + "Ghana" : "加纳", + "Gibraltar" : "直布罗陀", + "Greenland" : "格陵兰", + "Gambia" : "冈比亚", + "Guinea" : "几内亚", + "Guadeloupe" : "瓜德罗普岛", + "Equatorial Guinea" : "赤道几内亚", + "Greece" : "希腊", + "South Georgia and the South Sandwich Islands" : "南乔治亚岛和南桑威奇群岛", + "Guatemala" : "危地马拉", + "Guam" : "关岛", + "Guinea-Bissau" : "几内亚-比绍", + "Guyana" : "圭亚那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德岛和麦当劳群岛", + "Honduras" : "洪都拉斯", + "Croatia" : "克罗地亚", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印度尼西亚", + "Ireland" : "爱尔兰", + "Israel" : "以色列", + "Isle of Man" : "马恩岛", + "India" : "印度", + "British Indian Ocean Territory" : "英属印度洋领地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗伊斯兰共和国", + "Iceland" : "冰岛", + "Italy" : "意大利", + "Jersey" : "泽西", + "Jamaica" : "牙买加", + "Jordan" : "约旦", + "Japan" : "日本", + "Kenya" : "肯尼亚", + "Kyrgyzstan" : "吉尔吉斯斯坦", + "Cambodia" : "柬埔寨", + "Kiribati" : "基里巴斯", + "Comoros" : "科摩罗", + "Saint Kitts and Nevis" : "圣基茨和尼维斯", + "Korea, Democratic People's Republic of" : "朝鲜民主主义人民共和国", + "Korea, Republic of" : "韩国(共和国)", + "Kuwait" : "科威特", + "Cayman Islands" : "开曼群岛", + "Kazakhstan" : "哈萨克斯坦", + "Lao People's Democratic Republic" : "老挝", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "圣卢西亚", + "Liechtenstein" : "列支敦士登", + "Sri Lanka" : "斯里兰卡", + "Liberia" : "利比里亚", + "Lesotho" : "莱索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "卢森堡", + "Latvia" : "拉脱维亚", + "Libya" : "利比亚", + "Morocco" : "摩洛哥", + "Monaco" : "摩纳哥", + "Moldova, Republic of" : "摩尔多瓦(共和国)", + "Montenegro" : "黑山", + "Saint Martin (French part)" : "圣马丁(法国部分)", + "Madagascar" : "马达加斯加", + "Marshall Islands" : "马绍尔群岛", + "North Macedonia" : "北马其顿", + "Mali" : "马里", + "Myanmar" : "缅甸", + "Mongolia" : "蒙古", + "Macao" : "澳门", + "Northern Mariana Islands" : "北马里亚纳群岛", + "Martinique" : "马提尼克", + "Mauritania" : "毛里塔尼亚", + "Montserrat" : "蒙特塞拉特", + "Malta" : "马耳他", + "Mauritius" : "毛里求斯", + "Maldives" : "马尔代夫", + "Malawi" : "马拉维", + "Mexico" : "墨西哥", + "Malaysia" : "马来西亚", + "Mozambique" : "莫桑比克", + "Namibia" : "纳米比亚", + "New Caledonia" : "新喀里多尼亚", + "Niger" : "尼日尔", + "Norfolk Island" : "诺福克岛", + "Nigeria" : "尼日利亚", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷兰", + "Norway" : "挪威", + "Nepal" : "尼泊尔", + "Nauru" : "瑙鲁", + "Niue" : "纽埃", + "New Zealand" : "新西兰", + "Oman" : "阿曼", + "Panama" : "巴拿马", + "Peru" : "秘鲁", + "French Polynesia" : "法属波利尼西亚", + "Papua New Guinea" : "巴布亚新几内亚", + "Philippines" : "菲律宾", + "Pakistan" : "巴基斯坦", + "Poland" : "波兰", + "Saint Pierre and Miquelon" : "圣皮埃尔和密克隆", + "Pitcairn" : "皮特凯恩", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕劳", + "Paraguay" : "巴拉圭", + "Qatar" : "卡塔尔", + "Réunion" : "留尼汪", + "Romania" : "罗马尼亚", + "Serbia" : "塞尔维亚", + "Russian Federation" : "俄罗斯联邦", + "Rwanda" : "卢旺达", + "Saudi Arabia" : "沙特阿拉伯", + "Solomon Islands" : "所罗门群岛", + "Seychelles" : "塞舌尔", + "Sudan" : "苏丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "圣赫勒拿,阿森松岛和特里斯坦达库尼亚", + "Slovenia" : "斯洛文尼亚", + "Svalbard and Jan Mayen" : "斯瓦尔巴和扬马延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "塞拉利昂", + "San Marino" : "圣马力诺", + "Senegal" : "塞内加尔", + "Somalia" : "索马里", + "Suriname" : "苏里南", + "South Sudan" : "南苏丹", + "Sao Tome and Principe" : "圣多美和普林西比", + "El Salvador" : "萨尔瓦多", + "Sint Maarten (Dutch part)" : "圣马丁(荷兰部分)", + "Syrian Arab Republic" : "阿拉伯叙利亚共和国", + "Eswatini" : "斯威士兰", + "Turks and Caicos Islands" : "特克斯和凯科斯群岛", + "Chad" : "乍得", + "French Southern Territories" : "法国南部领地", + "Togo" : "多哥", + "Thailand" : "泰国", + "Tajikistan" : "塔吉克斯坦", + "Tokelau" : "托克劳", + "Timor-Leste" : "东帝汶", + "Turkmenistan" : "土库曼斯坦", + "Tunisia" : "突尼斯", + "Tonga" : "汤加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "特立尼达和多巴哥", + "Tuvalu" : "图瓦卢", + "Taiwan, Province of China" : "台湾", + "Tanzania, United Republic of" : "坦桑尼亚联合共和国", + "Ukraine" : "乌克兰", + "Uganda" : "乌干达", + "United States Minor Outlying Islands" : "美国本土外小岛屿", + "United States of America" : "美利坚合众国", + "Uruguay" : "乌拉圭", + "Uzbekistan" : "乌兹别克斯坦", + "Holy See" : "教廷", + "Saint Vincent and the Grenadines" : "圣文森特和格林纳丁斯", + "Venezuela, Bolivarian Republic of" : "委内瑞拉玻利瓦尔共和国", + "Virgin Islands, British" : "英属维尔京群岛", + "Virgin Islands, U.S." : "美属维尔京群岛", + "Viet Nam" : "越南", + "Vanuatu" : "瓦努阿图", + "Wallis and Futuna" : "瓦利斯和富图纳群岛", + "Samoa" : "萨摩亚", + "Yemen" : "也门", + "Mayotte" : "马约特", + "South Africa" : "南非", + "Zambia" : "赞比亚", + "Zimbabwe" : "津巴布韦", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "无法检查 WASM 加载支持。请手动检查您的 Web 服务器是否提供 `.wasm` 文件。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的 Web 服务器设置不正确,无法传递 `.wasm` 文件。这通常是 Nginx 配置的问题。对于背景模糊,它需要调整以同时传递 `.wasm` 文件。将您的 Nginx 配置与我们文档中推荐的配置进行比较。", + "Talk configuration values" : "Talk 配置值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "只有系统 cron 支持强制通话时长。请启用系统 cron 或移除 `max_call_duration` 配置。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "由于技术限制,较小的 `max_call_duration` 值(当前设置为 %d)不可执行。后台任务仅每 5 分钟执行一次,因此使用风险自负。", + "Federation" : "联合", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "强烈推荐在启用 Talk 联合后配置“memcache.locking”。", + "High-performance backend" : "高性能后端 ", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未配置高性能后端——在没有高性能后端的情况下运行 Nextcloud Talk 仅适用于非常小规模的通话(最多 2-3 位参与者)。请设置高性能后端,以确保多位参与者的通话无缝进行。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "运行高性能后端“conversation_cluster”模式已被弃用,在即将推出的版本中将不再受支持。如今,高性能后端支持真正的集群,应该使用它。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定义多个高性能后端已被弃用,在即将推出的版本中将不再受支持。相反,负载均衡器应该与集群信令服务器一起设置,并在 Talk 设置中配置。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所用算法 %1$s 的已存储公钥与已存储的私钥不匹配。运行 %2$s 以修复此问题。", + "High-performance backend not configured correctly. Run %s for details." : "高性能后端配置不正确。运行 %s 以获取详情。", + "High-performance backend not configured correctly" : "高性能后端配置不正确", + "Error: Cannot connect to server" : "错误:无法连接到服务器 ", + "Error: Server did not respond with proper JSON" : "错误:服务器没有用正确的 JSON 响应", + "Error: Certificate expired" : "错误:证书已过期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "错误:Nextcloud 服务器和高性能后端服务器的系统时间不同步。请确保两台服务器都连接到时间服务器或手动同步它们的时间。", + "Could not get version" : "无法获取版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "错误:当前的运行版本为:{version},服务器需要更新以与此版本的 Talk 兼容", + "Error: Server responded with: {error}" : "错误:服务器回复:{error}", + "Error: Unknown error occurred" : "错误:发生未知错误", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:当前的运行版本为:{version},此版本的 Talk 中的下列功能不受服务器支持:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "强烈推荐在使用高性能后端运行 Nextcloud Talk 时配置内存缓存。", + "Client Push" : "客户端推送", + "Client Push is installed, this improves the punctuality of Talk notifications." : "客户端推送已安装,这将提高 Talk 通知的及时性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} 未安装。这可能会导致 Talk 通知延迟。", + "Recording backend" : "录制后端", + "Using the recording backend requires a High-performance backend." : "使用录制后端需要高性能后端。", + "No recording backend configured" : "未配置录制后端", + "SIP configuration" : "SIP 配置", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高性能后端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 电话号码不得以 + 或 0 开头。请移除或更新以下号码:\n{list}", + "No SIP backend configured" : "未配置 SIP 后端", + "Invalid date, date format must be YYYY-MM-DD" : "日期无效,日期格式必须为 YYYY-MM-DD", + "Conversation not found" : "未找到对话", + "Path is already shared with this conversation" : "路径已与此对话分享", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 进行聊天、视频和音频会议", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 进行聊天、视频和音频会议\n\n* 💬 **聊天** Nextcloud Talk 附带了简单的文本聊天功能,允许您从 Nextcloud 文件应用或本地设备分享或上传文件,并提及其他参与者。\n* 👥 **私人、群组、公开和密码保护的通话!**邀请某人、整个群组或发送公开链接以邀请通话。\n* 🌐 **联合聊天** 与其他 Nextcloud 服务器上的用户聊天\n* 💻 **屏幕共享!** 与通话参与者共享您的屏幕。\n* 🚀 **与其他 Nextcloud 应用集成** 如文件、日历、用户状态、仪表盘、流程、地图、智能选择器、联系人、Deck 等。\n* 🌉 **与其他聊天解决方案同步** 通过将 [Matterbridge](https://github.com/42wim/matterbridge/) 集成到 Talk 中,您可以轻松地将许多其他聊天解决方法同步到 Nextcloud Talk,反之亦然。", + "Leave call" : "离开通话", + "Navigating away from the page will leave the call in {conversation}" : "离开此页面也将中断 {conversation} 中的通话", + "Stay in call" : "保持通话", + "Error occurred when getting the conversation information" : "获取对话信息时出错", + "Discuss this file" : "讨论此文件", + "Share this file with others to discuss it" : "与他人分享此文件以讨论它", + "Share this file" : "分享此文件", + "Join conversation" : "加入对话", + "This conversation is password-protected." : "此对话受密码保护。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "我们检测到您的IP进行了多次无效密码尝试。因此,您的下一次登录最长会延迟30秒。", + "The password is wrong. Try again." : "用户名或密码错误!请重试", + "Password" : "密码", + "Submit" : "提交", + "Error requesting the password." : "请求密码错误。", + "Request password" : "需要密码", + "This conversation has ended" : "此对话已结束", + "Error occurred when joining the conversation" : "加入对话时发生错误", + "Close Talk sidebar" : "关闭通话应用侧边栏", + "Open Talk sidebar" : "打开通话应用侧边栏", + "Everyone" : "所有人", + "Users and moderators" : "用户和主持人", + "Moderators only" : "仅管理员", + "Disable calls" : "禁用通话", + "Save changes" : "保存更改", + "Saving …" : "正在保存……", + "Saved!" : "已保存!", + "Limit to groups" : "限制于分组", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "当至少一个分组被选择时,只有列出分组的成员才能成为对话的一分子。", + "Guests can still join public conversations." : "访客仍可加入公开对话。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "已不再能使用通话应用的用户在其以前的对话中仍会被列为参与者,他们的聊天消息也将被保留。", + "Limit using Talk" : "限制使用通话应用", + "Limit creating a public and group conversation" : "限制创建公开和群组对话", + "Limit creating conversations" : "限制创建对话", + "Limit starting a call" : "限制开始一个通话", + "Limit starting calls" : "限制开始通话", + "When a call has started, everyone with access to the conversation can join the call." : "当一个通话已开始时,能访问该对话的所有人都能加入通话", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此服务器安装了下列机器人。请参阅文档以获取一份现有的{linkstart2}机器人列表{linkend},或者了解{linkstart1}如何编写您自己的机器人{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此服务器上未安装任何机器人。请参阅文档以获取一份现有的{linkstart2}机器人列表{linkend},或者了解{linkstart1}如何编写您自己的机器人{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "为主持人锁定", + "Enabled" : "已启用", + "Disabled" : "已禁用", + "Bots settings" : "机器人设置", + "State" : "状况", + "Name" : "名称", + "Last error" : "上次错误", + "Total errors count" : "总错误数", + "Find more bots" : "查找更多机器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}共享设置页面{linkend}配置受信任的服务器。", + "Beta" : "Beta", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "联合聊天和通话已经可以工作了。附件处理将在未来的版本中推出。", + "Enable Federation in Talk app" : "在 Talk 应用中启用联合功能", + "Permissions" : "权限", + "Allow users to be invited to federated conversations" : "允许邀请用户加入联合对话", + "Allow users to invite federated users into conversation" : "允许用户邀请联合用户加入对话", + "Only allow to federate with trusted servers" : "只允许与受信任的服务器联合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "当至少选择了一个群组时,只有列出的群组中的用户可以邀请联合用户进行对话。", + "Groups allowed to invite federated users" : "允许邀请联合用户的群组", + "Select groups …" : "选择群组…", + "All messages" : "全部消息", + "@-mentions only" : "仅被 @ 提及的消息", + "Off" : "关闭", + "General settings" : "通用设置", + "Default notification settings" : "默认通知设置", + "Default group notification" : "默认分组通知", + "Default group notification for new groups" : "对新分组的默认分组通知", + "Integration into other apps" : "与其他应用的集成", + "Allow conversations on files" : "允许文件上的对话", + "Allow conversations on public shares for files" : "允许文件的公开分享上的对话", + "End-to-end encrypted calls" : "端到端加密通话", + "Enable encryption" : "启用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已配置 SIP 桥接的端到端加密通话需要更新版本的高性能后端和 SIP 桥接。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "移动客户端目前不支持端到端加密通话。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "点击上方按钮,表格中的信息将发送到 Struktur AG 的服务器。您可以在 {linkstart}spreed.eu{linkend} 上找到更多信息。", + "Pending" : "待定", + "Error" : "错误", + "Blocked" : "被阻止", + "Active" : "活动", + "Expired" : "已过期", + "Never" : "永不", + "The trial could not be requested. Please try again later." : "无法请求测试。请稍后重试。", + "The account could not be deleted. Please try again later." : "账号无法删除。请稍后重试。", + "Hosted High-performance backend" : "托管的高性能后端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我们的合作伙伴 Struktur AG 提供了一种可以请求托管信令服务器的服务。为此,你只需要填写下面的表单,然后Nextcloud就会请求它。一旦为你设置好服务器,凭据将被自动填写。这将覆盖现有的信令服务器设置。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "如果您的高性能后端账号包括 STUN 和/或 TURN 功能,将会相应更新设置。", + "URL of this Nextcloud instance" : "此Nextcloud实例的URL", + "Full name of the user requesting the trial" : "请求试用的用户全名", + "Email of the user" : "用户的电子邮箱地址 ", + "Language" : "语言", + "Country" : "国家/地区", + "Request signaling server trial" : "请求信令服务器试用", + "You can see the current status of your hosted signaling server in the following table." : "您可在以下表格中查看您托管的信令服务器的当前状态。", + "Status" : "状态", + "Created at" : "创建于", + "Expires at" : "过期于", + "Limits" : "限制", + "STUN included" : "包括 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包括 TURN", + "Delete the signaling server account" : "删除信令服务器账号", + "_%n user_::_%n users_" : ["%n 个用户"], + "Installed version: {version}" : "已安装版本:{version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安装Matterbridge以将Nextcloud通话应用连接到其他服务,请访问其{linkstart1}GitHub页面{linkend}以获得更多信息。下载并安装应用程序可能需要一段时间。如果超时,请从{linkstart2}Nextcloud应用商店{linkend}手动安装。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge 二进制文件的权限不正确。请确保 Matterbridge 二进制文件由正确的用户拥有并且可以执行。它可以在“/…/nextcloud/apps/talk_matterbridge/bin/”中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到 Matterbridge 二进制文件或无法执行。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "你也可以通过 config 手动设置 Matterbridge 二进制文件的路径。更多信息请查阅 {linkstart}Matterbridge 集成文档{linkend}", + "Downloading …" : "下载中 …", + "Install Talk Matterbridge" : "安装通话应用Matterbridge", + "An error occurred while installing the Matterbridge app" : "安装Matterbridge应用程序时发生错误", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安装通话应用Matterbridge时发生错误。请手动安装。", + "Failed to execute Matterbridge binary." : "执行Matterbridge二进制文件失败。", + "Matterbridge integration" : "Matterbridge 集成", + "Enable Matterbridge integration" : "启用 Matterbridge 集成", + "Status: Checking connection" : "状态:正在检查连接", + "OK: Running version: {version}" : "OK:运行版本:{version}", + "Error: Server seems to be a Signaling server" : "错误:服务器似乎是信令服务器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "错误:Nextcloud 服务器和录制后端服务器的系统时间不同步。请确保两台服务器都连接到时间服务器或手动同步它们的时间。", + "Recording backend URL" : "录制后端 URL", + "Validate SSL certificate" : "验证 SSL 证书", + "Delete this server" : "删除此服务器", + "Test this server" : "测试此服务器", + "Disabled for all calls" : "对所有通话禁用", + "Enabled for all calls" : "对所有通话启用", + "Configurable on conversation level by moderators" : "由各对话主持人自行设置", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP设置“upload_max_filesize”或“post_max_size”仅允许上传最大{maxUpload}的文件。", + "Recording backend settings saved" : "已保存录制后端设置", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "允许各对话主持人自行决定是否征求录制授权。所有参与者在加入对话中的所有通话前需要同意录制", + "The consent to be recorded will be required for each participant before joining every call." : "所有参与者在加入任何通话前都需要同意录制", + "The consent to be recorded is not required." : "不征求录制授权", + "Recording backend configuration is only possible with a High-performance backend." : "录制后端配置仅适用于高性能后端。", + "Add a new recording backend server" : "添加新的录制后端服务器", + "Shared secret" : "已分享密码", + "Recording consent" : "录制准许", + "Recording transcription" : "录制转录", + "Automatically transcribe call recordings with a transcription provider" : "使用转录提供者自动转录通话录制内容", + "Automatically summarize call recordings with transcription and summary providers" : "使用转录和摘要提供者自动总结通话录制内容", + "SIP configuration saved!" : "SIP 配置已保存!", + "SIP configuration is only possible with a High-performance backend." : "SIP 配置仅适用于高性能后端。", + "Enable SIP Dial-out option" : "启用 SIP 外呼选项", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "信令服务器需要更新以支持 SIP 外呼功能。", + "Do not show SIP Dial-out caller number" : "不要显示 SIP 外呼主叫号码", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名号码应向对方显示为“未知号码”或“隐藏号码”", + "Dial-out number" : "外呼号码", + "E164 formatted number used as a fallback caller number for outgoing calls" : "外呼电话使用 E164 格式号码作为备用主叫号码", + "Dial-out prefix" : "外呼前缀", + "Prefix to configured user number for outgoing calls (default is `+`)" : "外呼电话主叫号码前缀(默认为 `+`)", + "Restrict SIP configuration" : "限制 SIP 配置", + "Enable SIP configuration" : "启用 SIP 配置", + "Only users of the following groups can enable SIP in conversations they moderate" : "只有以下群组的用户可以在自己主持的对话中开启 SIP", + "Phone number (Country)" : "电话号码(国家/地区)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "这些信息会在邀请邮件中发送,也会在侧边栏中显示给所有参与者。 ", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 后端 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用功能", + "Error: Websocket connection failed" : "错误:Websocket 连接失败", + "Error code" : "错误代码", + "Error message" : "错误消息", + "Error: Websocket connection failed. Check browser console" : "错误:Websocket 连接失败,请检查浏览器控制台", + "High-performance backend URL" : "高性能后端 URL", + "Missing High-performance backend warning hidden" : "缺失高性能后端警告已隐藏", + "High-performance backend settings saved" : "高性能后端设置已保存", + "Nextcloud Talk setup not complete" : "Nextcloud Talk 设置未完成", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "请注意,在没有高性能后端的 2 位以上参与者的通话中,参与者很可能会遇到连接问题,并导致参与设备的高负载。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安装高性能后端,以确保多位参与者的通话无缝进行。", + "Nextcloud portal" : "Nextcloud 门户", + "Quick installation guide" : "快速安装指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位参与者的通话和对话需要高性能后端。如果没有后端,所有参与者都必须为其他参与者单独上传自己的视频,这很可能会导致连接问题和参与设备的高负载。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "强烈推荐在使用具有高性能后端的 Nextcloud Talk 时设置分布式缓存。", + "Add High-performance backend server" : "添加高性能后端服务器", + "Warn about connectivity issues in calls with more than 2 participants" : "在超过 2 位参与者的通话中警告连接问题", + "STUN server URL" : "STUN 服务器 URL", + "The server address is invalid" : "服务器地址无效", + "STUN settings saved" : "STUN设置已保存", + "STUN servers" : "STUN 服务器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 服务器用以探测路由器下的参与者的公网 IP 地址。", + "Add a new STUN server" : "添一个新的STUN服务器", + "{schema} scheme must be used with a domain" : "{schema} 协议必须与域名一起使用", + "{option1} and {option2}" : "{option1} 和 {option2}", + "{option} only" : "仅 {option} ", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN服务器成功返回ICE候选", + "Error: No working ICE candidates returned by the TURN server" : "错误:TURN服务器没有返回可用的ICE候选", + "Testing whether the TURN server returns ICE candidates" : "测试TURN服务器是否返回ICE候选", + "TURN server schemes" : "TURN 服务器 scheme", + "TURN server URL" : "TURN 服务器URL", + "TURN server secret" : "TURN 服务器密码", + "TURN server protocols" : "TURN 服务器协议", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 服务器服务器用于代理来自防火墙后参与者的通信。如果单个参与者无法连接到其他参与者,则很可能需要一个 TURN 服务器。设置说明见 {linkstart}此文档{linkend}", + "TURN settings saved" : "TURN设置已保存", + "TURN servers" : "TURN 服务器", + "Add a new TURN server" : "添加一个新的TURN服务器", + "Failed" : "失败了", + "OK" : "好", + "Checking …" : "检查中...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失败:此浏览器禁用或不支持 WebAssembly。请启用 WebAssembly 或使用支持它的浏览器进行检查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失败:Web服务器没有正确返回”.wasm” 和“.tflite” 文件。请查看通话应用文档中的“系统要求”部分。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "好:web 服务器正确返回了 \".wasm\" 和 \".tflite\" 文件", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP与Apache配置似乎不兼容。请注意,PHP仅能与MPM_PREFORK模块一起使用,PHP-FPM仅能与MPM_EVENT模块一起使用。", + "Web server setup checks" : "Web 服务器设置检查", + "Files required for virtual background can be loaded" : "可以加载背景模糊所需的文件", + "Federated user" : "联合云用户", + "Assign participants to rooms" : "指派参与者到聊天室", + "Configure breakout rooms" : "配置分组讨论室", + "Number of breakout rooms" : "分组讨论室数量", + "You can create from 1 to 20 breakout rooms." : "您可以创建 1 到 20 个分组讨论室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自动指派参与者", + "Manually assign participants" : "手动指派参与者", + "Allow participants to choose" : "允许参与者选择", + "Create rooms" : "创建聊天室", + "Confirm" : "确认", + "Create breakout rooms" : "创建分组讨论室", + "Reset" : "重置", + "Delete breakout rooms" : "删除分组讨论室", + "Room {roomNumber}" : "聊天室{roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分组讨论室和设置将会丢失", + "Cancel" : "取消", + "Unassigned participants" : "未指派的参与者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "添加参与者“{user}”", + "Now" : "现在", + "Invalid calendar selected" : "所选日历无效", + "Invalid start time selected" : "所选开始时间无效", + "Invalid end time selected" : "所选结束时间无效", + "Unknown error occurred" : "发生未知错误", + "Sending no invitations" : "不发送邀请", + "{participant0} will receive an invitation" : "{participant0} 将收到邀请", + "{participant0} and {participant1} will receive invitations" : "{participant0} 和 {participant1} 将收到邀请", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 和其他 %n 人将收到邀请"], + "Invite {user}" : "邀请 {user}", + "Invite all users and emails in this conversation" : "邀请此对话中的所有用户和电子邮件", + "Meeting created" : "会议已创建", + "Upcoming meetings" : "预定的会议", + "Loading …" : "正在加载…", + "No upcoming meetings" : "没有预定的会议", + "Schedule a meeting" : "安排会议", + "Meeting title" : "会议标题", + "From" : "来自", + "To" : "给", + "Calendar" : "日历", + "Attendees" : "参加者", + "No other participants to send invitations to." : "没有其他参与者可以向其发送邀请。", + "Add attendees" : "添加参加者", + "Save" : "保存", + "Search participants" : "搜索参与者", + "No results" : "没有结果", + "Done" : "完成", + "Disable live transcription" : "禁用实时转录", + "Enable live transcription (generated by AI)" : "启用实时转录(由 AI 生成)", + "Enable live transcription (Live transcriptions app is not installed)" : "启用实时转录(未安装实时转录应用)", + "Disable live translation" : "禁用实时翻译", + "Enable live translation (generated by AI)" : "启用实时翻译(由 AI 生成)", + "Original language" : "原始语言", + "Live translations app is not installed" : "未安装实时翻译应用", + "Original language: {languageName}" : "原始语言:{languageName}", + "Translated language" : "翻译语言", + "Translated language: {languageName}" : "翻译语言:{languageName}", + "Raise hand" : "举起手 ", + "Raise hand (R)" : "举起手 (R)", + "Lower hand" : "放下手 ", + "Lower hand (R)" : "放下手 (R)", + "Exit full screen (F)" : "退出全屏(F)", + "Full screen (F)" : "全屏(F)", + "Speaker view" : "扬声器视图", + "Grid view" : "网格视图", + "Error when trying to load the available live transcription languages" : "尝试加载可用的实时转录语言时出错", + "Failed to enable live transcription" : "无法启用实时转录", + "Failed to enable live translations" : "无法启用实时翻译", + "Failed to disable live translations" : "无法禁用实时翻译", + "Recording consent is required" : "需要同意录制", + "This conversation is read-only" : "此对话是只读的", + "Conversation not found or not joined" : "未找到或未加入对话", + "Lobby is still active and you're not a moderator" : "大厅仍然活跃,您不是主持人", + "Connection failed" : "连接失败", + "Reload" : "重新加载", + "{nickName} raised their hand." : "{nickName} 举手。", + "A participant raised their hand." : "一位参与者举手。 ", + "Collapse stripe" : "折叠条纹", + "Expand stripe" : "展开条纹", + "Previous page of videos" : "视频上一页 ", + "Next page of videos" : "视频下一页", + "Connecting …" : "正在连接…", + "Calling …" : "正在呼叫…", + "Waiting for {user} to join the call" : "等待{user}加入通话", + "Waiting for others to join the call …" : "等待其他人加入通话 ...", + "You can invite others in the participant tab of the sidebar" : "您可以在侧栏的参与者选项卡中邀请其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在侧边栏的参与者标签中邀请其他人或分享此链接以邀请其他人!", + "Share this link to invite others!" : "分享这个链接来邀请其他人!", + "Copy link" : "复制链接", + "You are not allowed to enable audio" : "你不被允许启用音频", + "No audio. Click to select device" : "没有音频。点击以选择设备", + "Mute audio" : "静音", + "Mute audio (M)" : "静音音频 (M)", + "Unmute audio" : "取消静音", + "Unmute audio (M)" : "取消静音音频 (M)", + "None" : "无", + "Select a microphone" : "选择麦克风", + "Select a speaker" : "选择扬声器", + "Microphone settings" : "麦克风设置", + "Check devices" : "检查设备", + "Access to camera was denied" : "对摄像头的访问被拒绝", + "Error while accessing camera: It is likely in use by another program" : "访问摄像头时出现错误:它可能正在被另一个程序使用", + "Error while accessing camera" : "访问摄像头时出错", + "You have been muted by a moderator" : "您已被主持人静音", + "Hide presenter video" : "隐藏演示者视频", + "You are not allowed to enable video" : "你不被允许启用视频", + "No video. Click to select device" : "没有视频。点击以选择设备", + "Disable video" : "禁用视频", + "Disable video (V)" : "禁用视频 (V)", + "Enable video" : "启用视频", + "Enable video (V)" : "启用视频 (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "启用时评 - 首次启用视频时,您的连接会短暂中断", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "启用视频 (V) - 首次启用视频时,您的连接将短暂中断", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "启用视频。当您第一次启用视频时您的连接将会被短暂中断", + "Select a video device" : "选择视频设备", + "Show presenter" : "显示演示者", + "You" : "您", + "Mute" : "静音", + "Muted" : "已静音", + "Show screen" : "显示屏幕", + "Stop following" : "取消关注", + "Connection could not be established …" : "无法建立连接", + "Connection was lost and could not be re-established …" : "连接丢失且无法被重新建立", + "Connection could not be established. Trying again …" : "无法建立连接。再次尝试中…", + "Connection lost. Trying to reconnect …" : "连接丢失。尝试重新连接…", + "Connection problems …" : "连接问题…", + "Collapse" : "折叠", + "Expand" : "展开", + "You need to be logged in to upload files" : "您需要登录以上传文件", + "Drop your files to upload" : "拖放您的文件以上传", + "Conversation messages" : "对话消息", + "Scroll to bottom" : "滚动到底部", + "Post message" : "发送消息", + "Federated conversation" : "联合对话", + "Public conversation" : "公开对话", + "Favorite" : "收藏", + "Banned users" : "已封禁用户", + "Manage the list of banned users in this conversation." : "管理此对话中已封禁用户列表。", + "Manage bans" : "管理封禁", + "No banned users" : "没有已封禁用户", + "Banned by:" : "封禁者:", + "Date:" : "日期:", + "Note:" : "说明:", + "Hide details" : "隐藏详情", + "Show details" : "显示详情", + "Unban" : "取消封禁", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日历 ↗{linkend} 中更改标题和描述。", + "Error while updating conversation name" : "更新对话名称时出错", + "Error while updating conversation description" : "更新对话描述时出错 ", + "Enter a name for this conversation" : "输入此对话的名称", + "Edit conversation name" : "编辑对话名称", + "Edit conversation description" : "编辑对话描述", + "Enter a description for this conversation" : "为这个对话输入一个描述 ", + "Picture" : "图片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此对话中启用以下机器人。要安装其他机器人,请联系管理员。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此服务器上没有安装机器人。要安装机器人,请联系管理员。", + "Disable" : "禁用", + "Enable" : "开启", + "The bot is not available anymore" : "机器人不再可用", + "Breakout rooms" : "分组讨论室", + "Manage breakout rooms" : "管理分组讨论室", + "Set up breakout rooms for this conversation" : "为此对话设置分组讨论室", + "Please select a valid PNG or JPG file" : "请选择有效的PNG或JPG文件", + "Choose your conversation picture" : "选择您的对话图片", + "Choose" : "选择", + "Error setting conversation picture" : "设置对话图片时出错", + "Could not set the conversation picture: {error}" : "无法设定对话图片:{error}", + "Error cropping conversation picture" : "裁剪对话图片时出错", + "Error removing conversation picture" : "移除对话图片时出错", + "Set emoji as conversation picture" : "将表情符号设置为对话图片", + "Set background color for conversation picture" : "设置对话图片的背景颜色", + "Upload conversation picture" : "上传对话图片", + "Choose conversation picture from files" : "从文件中选择对话图片", + "Remove conversation picture" : "移除对话图片", + "The file must be a PNG or JPG" : "文件必须是 PNG 或 JPG 格式", + "Set picture" : "设置图片", + "Default permissions modified for {conversationName}" : "更改了 {conversationName} 的默认权限", + "Could not modify default permissions for {conversationName}" : "无法更改 {conversationName} 的默认权限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "编辑此对话中参与者的默认权限。这些设置不会影响版主。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此部分修改权限时,之前指派给各个参与者的自定义权限都将丢失。", + "All permissions" : "所有权限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "与会者具有发起通话、加入通话、开启音频、视频和共享屏幕等权限。", + "Participants can use all available features." : "参与者可以使用所有可用功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在版主手动授权之前,与会者可以加入通话,但不能开启音频、视频也不能共享屏幕", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "在主持人手动授予额外权限之前,参与者只能使用部分功能。", + "Advanced permissions" : "高级权限", + "Edit permissions" : "编辑权限", + "Conversation settings" : "对话设置", + "Basic Info" : "基本信息", + "Personal" : "个人", + "Moderation" : "限制", + "Setup overview" : "设置概览", + "Live transcription" : "实时转录", + "Live transcriptions app is not installed" : "未安装实时转录应用", + "Enable live transcription" : "启用实时转录", + "Breakout Rooms" : "分组讨论室", + "Matterbridge" : "Matterbridge ", + "Bots" : "机器人", + "Danger zone" : "危险区域", + "Archive conversation" : "存档对话", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "已存档的对话默认在对话列表中隐藏。但是,当您搜索对话名称或访问已存档的对话列表时,它们仍然会出现。", + "Do you really want to leave \"{displayName}\"?" : "是否确定要离开“{displayName}”?", + "You can archive this conversation instead." : "您可以改为将此对话存档。", + "Leave conversation" : "离开对话", + "You need to promote a new moderator before you can leave the conversation" : "在您离开对话之前需要推举一位新的主持人", + "Delete conversation" : "删除对话", + "Do you really want to delete \"{displayName}\"?" : "是否确定要删除“{displayName}”?", + "Error while deleting conversation" : "删除对话时出错 ", + "Delete all chat messages" : "删除所有聊天消息", + "Do you really want to delete all messages in \"{displayName}\"?" : "是否确定要删除“{displayName}”中的所有消息?", + "Error while clearing chat history" : "清除聊天消息时出错", + "Be careful, these actions cannot be undone." : "小心,这些操作无法被撤销。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "一旦离开对话,要重新加入已关闭的谈话,需要一个邀请。公开对话可以在任何时候重新加入。", + "Permanently delete this conversation." : "永久删除此对话。", + "Delete chat messages" : "删除聊天消息", + "Permanently delete all the messages in this conversation." : "永久删除此对话中的所有消息", + "_%n hour_::_%n hours_" : ["%n 小时"], + "_%n day_::_%n days_" : ["%n 天"], + "_%n week_::_%n weeks_" : ["%n 周"], + "Custom expiration time" : "自定义过期时间", + "Message expiration disabled" : "消息过期已禁用", + "Message expiration set: {duration}" : "消息过期设置:{duration}", + "Error when trying to set message expiration" : "尝试设置消息过期时发生错误", + "Message expiration" : "消息过期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "可指定聊天消息在一定时间后过期。注意:聊天中分享的文件不会被从所有者一方删除,但是会被从对话中取消分享。", + "Set message expiration" : "设置消息过期时间", + "Current message expiration" : "当前的消息过期时间", + "Password copied to clipboard" : "密码已复制到剪贴板", + "Password could not be copied" : "无法复制密码", + "Guest access" : "访客访问", + "Breakout rooms are not allowed in public conversations." : "公开对话中不允许分组会议室。", + "Allow guests to join this conversation via link" : "允许访客通过链接加入此对话", + "Password protection" : "密码保护", + "This conversation is password-protected. Guests need password to join" : "此对话受密码保护,访客需要密码才能加入", + "Password protection is needed for public conversations" : "公开对话需要密码保护", + "Set a password" : "设置密码", + "Change password" : "更改密码", + "Enter new password" : "输入新密码", + "Save password" : "保存密码", + "Copy password" : "复制密码", + "Guests are allowed to join this conversation via link" : "访客可以通过链接加入此对话", + "Guests are not allowed to join this conversation" : "访客不能加入此对话", + "Resend invitations" : "重新发送邀请", + "This conversation is open to both registered users and users created with the Guests app" : "此对话对已注册用户和使用访客应用建立的应用开放", + "This conversation is open to registered users" : "此对话对已注册用户开放", + "This conversation is limited to the current participants" : "此对话仅对当前参与者开放", + "You opened the conversation to both registered users and users created with the Guests app" : "你向已注册用户和通过访客应用创建的账号开放了此对话", + "Error occurred when opening or limiting the conversation" : "开放或限制对话时发生错误", + "Open conversation to registered users, showing it in search results" : "向注册用户开放对话并在搜索结果中显示", + "Also open to users created with the Guests app" : "同时对使用访客应用创建的账号开放", + "Open conversation" : "开放对话", + "Set language spoken in calls" : "设置通话语言", + "Languages could not be loaded" : "无法加载语言", + "Loading languages …" : "正在加载语言 …", + "Invalid language" : "语言无效", + "Default language (English)" : "默认语言(英语)", + "Default live transcription language set" : "默认实时转录语言集", + "Live transcription language set: {languageName}" : "实时转录语言集:{languageName}", + "Error when trying to set live transcription language" : "尝试设置实时转录语言时出错", + "Start time: {date}" : "开始时间:{date}", + "Start time has been updated" : "开始时间已更新", + "Error occurred while updating start time" : "更新开始时间时发生错误 ", + "Enabling the lobby will remove non-moderators from the ongoing call." : "启用大厅将会从正在进行的对话中移除非主持人", + "Enable lobby, restricting the conversation to moderators" : "启用大厅,将对话限制到与主持人之间", + "Meeting start time" : "会议开始时间", + "Start time (optional)" : "开始时间(可选)", + "Import email participants" : "导入电子邮件参与者", + "You can import a list of email participants from a CSV file." : "您可以从 CSV 文件导入电子邮件参与者列表。", + "Poll drafts" : "投票草稿", + "Browse poll drafts" : "浏览投票草稿", + "Error occurred when locking the conversation" : "锁定对话时发生错误 ", + "Error occurred when unlocking the conversation" : "解锁对话时发生错误 ", + "Lock conversation" : "锁定对话", + "This will also terminate the ongoing call." : "这也将终止正在进行的通话。", + "Lock the conversation to prevent anyone to post messages or start calls" : "锁定对话防止任何人发布消息或开始通话。", + "Edit" : "编辑", + "More information" : "更多信息", + "Delete" : "删除", + "Add new bridged channel to current conversation" : "向当前对话添加新的桥接通道", + "unknown state" : "未知状态", + "running" : "运行中", + "not running, check Matterbridge log" : "未在运行,检查 Matterbridge 日志", + "not running" : "未在运行", + "Bridge saved" : "网桥已保存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "你可以使用 Matterbridge 桥接来自各种即时消息传递系统的频道。", + "More info on Matterbridge" : "更多关于Matterbridge的信息", + "Messaging systems" : "消息系统", + "Enable bridge" : "启用桥接", + "Show Matterbridge log" : "显示 Matterbridge 日志", + "Log content" : "日志内容", + "Only moderators are allowed to mention @all" : "仅允许主持人提及 @all", + "All participants are allowed to mention @all" : "所有参与者都可以提及 @all", + "Participants are now allowed to mention @all." : "现在允许参与者提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 仅限于主持人。", + "Allow participants to mention @all" : "允许参与者提及 @all", + "Mention permissions" : "提及权限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "关于此对话中呼叫的通知", + "Important conversation" : "重要对话", + "\"Do not disturb\" user status is ignored for important conversations" : "重要对话忽略“勿扰”用户状态", + "Sensitive conversation" : "敏感对话", + "Message preview will be disabled in conversation list and notifications" : "将在对话列表和通知中禁用消息预览", + "Recording consent is required for calls in this conversation" : "在此对话中通话需要提供录制许可", + "Recording consent is not required for calls in this conversation" : "在此对话中通话无需提供录制许可", + "Recording consent requirement was updated" : "已更新录制许可要求", + "Error occurred while updating recording consent" : "更新录制同意时出错", + "Recording Consent" : "录制许可", + "Recording consent cannot be changed once a call or breakout session has started." : "通话或分组会议开始后,录制同意书就不能更改。", + "Require recording consent before joining call in this conversation" : "在此对话中加入通话前要求准许录制", + "Recording consent is required for all calls" : "所有通话都需要提供录制许可", + "SIP dial-in is now possible without PIN requirement" : "现在无需 PIN 即可进行 SIP 拨号", + "SIP dial-in is now enabled" : "启用了 SIP 拨号 ", + "SIP dial-in is now disabled" : "禁用了 SIP 拨号", + "Error occurred when enabling SIP dial-in" : "启用 SIP 拨号时发生错误", + "Error occurred when disabling SIP dial-in" : "禁用 SIP 拨号时发生错误", + "Phone and SIP dial-in" : "电话和 SIP 拨号", + "Enable phone and SIP dial-in" : "启用电话和 SIP 拨号", + "Allow to dial-in without a PIN" : "允许在没有 PIN 的情况下拨号", + "Ongoing" : "正在进行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["%n 人接受"], + "_%n person declined_::_%n people declined_" : ["%n 人拒绝"], + "_and %n other attachment_::_and %n other attachments_" : ["以及另外 %n 个附件"], + "With {displayName}" : "有 {displayName}", + "In {conversation}" : "在 {conversation} 中", + "View attachment" : "查看附件", + "Join" : "加入", + "View conversation" : "查看对话", + "View event on Calendar" : "在日历上查看活动", + "Error while creating the conversation" : "创建对话时出错", + "Hello, {displayName}" : "您好,{displayName}", + "Start meeting now" : "立即开始会议", + "Give your meeting a title" : "为您的会议命名", + "Create and copy link" : "创建并复制链接", + "Create a new conversation" : "创建一个新对话", + "Join open conversations" : "加入公开对话", + "Call a phone number" : "呼叫电话号码", + "Scroll backward" : "向后滚动", + "Scroll forward" : "向前滚动", + "Schedule meetings" : "安排会议", + "You don't have any upcoming meetings" : "您没有任何预定的会议", + "Calendar events with a conversation link as the location are shown here" : "此处显示的是将对话链接设为位置的日历活动", + "Open calendar" : "打开日历", + "Unread mentions" : "未读的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的消息会显示在此处。您可以通过输入 @ 后跟他们的名称来提及他们", + "Upcoming reminders" : "预定的提醒", + "Message reminders" : "消息提醒", + "Set a reminder on a message to be notified" : "在要通知的消息上设置提醒", + "Start a group conversation" : "开始群组对话", + "Create conversation" : "创建对话", + "Enter your name" : "输入你的名字", + "Submit name and join" : "设置名称并加入", + "Do you already have an account?" : "已经有账号了?", + "Log in" : "登录", + "Error while verifying uploaded file" : "验证上传文件时出错", + "Uploaded file is verified" : "已验证上传的文件", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "内容格式为逗号分隔值(CSV):
- 标题行是必需的,必须与“姓名”、“电子邮件”或仅“电子邮件”匹配。
- 每行一个条目(例如“John Doe\",\"john@example.tld\")", + "Participants added successfully" : "参与者添加成功", + "Error while adding participants" : "添加参与者时出错", + "Import a file" : "导入文件", + "Browse" : "浏览", + "Verifying uploaded file …" : "正在验证上传的文件…", + "This might take a moment" : "这可能需要一段时间", + "Send invitations" : "发送邀请", + "_%n invalid email_::_%n invalid emails_" : [" %n 个无效的电子邮件"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["%n 个电子邮件已导入或重复"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以发送 %n 个邀请"], + "An error occurred while calling a phone number" : "呼叫电话号码时发生错误", + "Phone number could not be called: {error}" : "无法呼叫电话号码: {error}", + "Phone number could not be called" : "无法呼叫电话号码", + "Search participants or phone numbers" : "搜索参与者或电话号码", + "Creating the conversation …" : "正在建立对话……", + "Mark as read" : "标为已读", + "Mark as unread" : "标为未读", + "Remove from favorites" : "从收藏夹移除", + "Add to favorites" : "添加到收藏夹", + "Unarchive conversation" : "取消归档对话", + "Ignore \"Do not disturb\"" : "忽略“勿扰”", + "You need to promote a new moderator before you can leave the conversation." : "在您离开对话之前您需要推举一位新的主持人。", + "Conversation actions" : "对话操作", + "Notify about calls" : "通话通知", + "Hide message text" : "隐藏消息文本", + "Pending invitations" : "待处理的邀请", + "Join conversations from other servers" : "加入其他服务器的对话", + "From {user} at {remoteServer}" : "来自 {remoteServer} 的 {user}", + "Decline invitation" : "拒绝邀请", + "Accept invitation" : "接受邀请", + "No pending invitations" : "没有待处理的邀请", + "Home" : "首页", + "Unread" : "未读", + "Mentions" : "提及", + "Meetings" : "会议", + "Sort conversations" : "排序对话", + "By recent activity" : "按最近的活动", + "Alphabetically" : "按字母顺序", + "Do not group by type" : "不按类型分组", + "Show private ones first" : "先显示私人对话", + "Show group ones first" : "先显示群组对话", + "No followed threads" : "没有关注的帖子", + "No matches found" : "未找到匹配项", + "No conversations found" : "未找到对话", + "You have no archived conversations." : "您没有已存档的对话。", + "Subscribe to an existing thread or start your own." : "订阅现有的帖子或开始自己的帖子。", + "You have no unread mentions." : "无未读的提及", + "You have no unread messages." : "无未读消息", + "An error occurred while performing the search" : "执行搜索时出错", + "Conversation list" : "对话列表", + "Filter conversations by" : "按以下条件筛选对话", + "Unread messages" : "未读消息", + "Meeting conversations" : "会议对话", + "Clear filters" : "清除过滤器", + "New personal note" : "新建个人笔记", + "SIP backend is not installed" : "未安装 SIP 后端", + "Back to conversations" : "返回对话", + "Archived conversations" : "已存档的对话", + "Threads" : "帖子‌", + "Clear filter" : "清除筛选", + "Show more threads" : "显示更多帖子‌", + "App settings" : "应用设置", + "Users" : "用户", + "Groups" : "分组", + "Teams" : "团队", + "Federated users" : "联合用户", + "New private conversation" : "新私人对话", + "Other sources" : "其他来源", + "Open conversations" : "开启对话", + "No search results" : "无搜索结果", + "Users, groups and teams" : "用户、群组和团队", + "Users and groups" : "用户和群组", + "Users and teams" : "用户和团队", + "Groups and teams" : "群组和团队", + "New group conversation" : "新群组对话", + "The meeting will start soon" : "会议不久后开始", + "This meeting is scheduled for {startTime}" : "此会议定于 {startTime} 开始", + "You are currently waiting in the lobby" : "您当前正在大厅等待。", + "Enable noise suppression" : "启用噪声抑制", + "Reduce background noises for better voice quality" : "减少背景噪音,提高语音质量", + "Enable echo cancellation" : "启用回声消除", + "Minimize echo effect from own surrounding" : "尽量减少自身周围环境的回声效应", + "Enable auto gain control" : "启用自动增益控制", + "Dynamically adjust microphone volume for consistent level" : "动态调节麦克风音量以保持音量稳定", + "Select microphone" : "选择麦克风", + "No microphone available" : "麦克风不可用", + "Select speaker" : "选择扬声器", + "No speaker available" : "没有扬声器可用", + "Select camera" : "选择摄像头", + "No camera available" : "摄像头不可用", + "Select a device" : "选择设备", + "Playing …" : "正在播放…", + "Test speakers" : "测试扬声器", + "Test" : "测试", + "Devices" : "设备", + "Backgrounds" : "背景图片", + "No audio" : "无音频", + "No camera" : "没有摄像头", + "Display video as you will see it (mirrored)" : "显示您将看到的视频(镜像)", + "Display video as others will see it" : "以其他人看到的方式显示视频", + "Calls are not supported in your browser" : "您的浏览器不支持呼叫", + "Access to microphone is only possible with HTTPS" : "麦克风只能通过 HTTPS 协议访问", + "Access to microphone was denied" : "无权访问麦克风", + "Error while accessing microphone" : "访问麦克风时出错", + "Access to camera is only possible with HTTPS" : "摄像头只能通过 HTTPS 协议访问", + "The call is being recorded." : "通话正在被录制", + "The call might be recorded." : "通话可能被录制", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "录制内容可能包括您的声音、摄像头的画面,以及屏幕分享的内容。要加入通话,您需要同意录制。", + "Give consent to the recording of this call" : "您需要同意录制此通话", + "Show more info" : "显示更多信息", + "Audio is not available" : "音频不可用", + "Video is not available" : "视频不可用", + "Start recording immediately with the call" : "通话开始的同时开始录制", + "Recording backend is not installed" : "未安装录制后端", + "Notify all participants about this call" : "通知所有参与者关于此通话", + "Apply settings" : "应用设置", + "Select virtual office background" : "选择虚拟办公室背景", + "Select virtual home background" : "选择虚拟家庭背景", + "Select virtual abstract background" : "选择虚拟抽象背景", + "Select virtual beach background" : "选择虚拟海滩背景", + "Select virtual park background" : "选择虚拟公园背景", + "Select virtual theater background" : "选择虚拟剧院背景", + "Select virtual library background" : "选择虚拟图书馆背景", + "Select virtual space station background" : "选择虚拟太空站背景", + "Error while uploading the file" : "上传文件时出错", + "Select a file" : "选择文件", + "Invalid path selected" : "选择的路径无效", + "Select virtual background from file {fileName}" : "从{fileName}文件中选择背景", + "Blur" : "模糊", + "Upload" : "上传", + "Files" : "文件", + "(editing)" : "(编辑中)", + "(edited)" : "(已编辑)", + "The message has expired or has been deleted" : "消息已过期或已被删除。", + "Cancel quote" : "取消引用", + "24 hours" : "24 小时 ", + "7 days" : "7 天", + "30 days" : "30 天", + "Until unpin" : "直到取消置顶", + "Clear reminder – {timeLocale}" : "取消提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 编辑", + "Pinned by you" : "由您置顶", + "Pinned by {actor}" : "由 {actor} 置顶", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "消息文本已复制到剪贴板", + "Message text could not be copied" : "无法复制消息文本", + "Message forwarded to \"Note to self\"" : "消息已转发到“自我备注”", + "Error while forwarding message to \"Note to self\"" : "将消息转发到“自我备注”时出错", + "A reminder was successfully removed" : "提醒删除成功", + "Error occurred when removing a reminder" : "移除提醒时出错", + "A reminder was successfully set at {datetime}" : "于 {datetime} 的提醒设置成功", + "Error occurred when creating a reminder" : "创建提醒时出错", + "Add a reaction to this message" : "添加对此消息的回应", + "Reply" : "回复", + "More actions" : "更多操作 ", + "Set reminder" : "设置提醒", + "Pin message" : "置顶消息", + "Unpin message" : "取消置顶消息", + "Reply privately" : "私下回复", + "Edit message" : "编辑消息", + "Copy message" : "复制消息", + "Copy message link" : "复制消息链接", + "Go to file" : "前往文件", + "Download file" : "下载文件", + "Go to thread" : "转到帖子", + "Edit thread details" : "编辑帖子详情", + "Forward message" : "转发消息", + "Translate" : "翻译", + "Set custom reminder" : "设置自定义提醒", + "Keep pinned for" : "保持置顶", + "Set custom period" : "设置自定义时段", + "Close reactions menu" : "关闭回应菜单", + "React with {emoji}" : "使用 {emoji} 回应", + "React with another emoji" : "使用其他表情符号做出回应", + "Choose a conversation to forward the selected message." : "选择对话来转发所选消息", + "Error while forwarding message" : "转发消息时出错", + "The message has been forwarded to {selectedConversationName}" : "已转发此消息至{selectedConversationName}", + "Dismiss" : "关闭", + "Go to conversation" : "转到对话", + "Detect language" : "检测语言", + "The message could not be translated" : "无法翻译信息", + "Translation copied to clipboard" : "翻译已复制到剪贴板", + "Translation could not be copied" : "无法复制翻译。", + "Translate message" : "翻译信息", + "Source language to translate from" : "要翻译的来源语言", + "Translate from" : "翻译至", + "Target language to translate into" : "要翻译的目标语言", + "Translate to" : "翻译至", + "Translating" : "正在翻译", + "This translation is AI generated and may contain mistakes." : "此翻译是 AI 生成的,可能包含错误。", + "Copy translated text" : "复制已翻译的文字", + "Error when scheduling the message" : "安排消息时出错", + "Reschedule" : "重新安排", + "Send now" : "立即发送", + "Choose a time" : "选择时间", + "Send at custom time" : "在自定义时间发送", + "Will be sent without notification" : "将不另行通知发送", + "Message read by everyone who shares their reading status" : "消息被每个分享他们阅读状态的人读取", + "Message sent" : "消息已发送", + "Sent without notification" : "发送而不通知", + "Deleting message" : "正在删除消息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "消息已成功删除,但已配置机器人或 Matterbridge,消息可能已分发到其他服务", + "Message deleted successfully" : "成功删除了消息", + "Message could not be deleted because it is too old" : "消息太旧,无法删除", + "Only normal chat messages can be deleted" : "只能删除正常的聊天消息 ", + "An error occurred while deleting the message" : "删除消息时发生错误 ", + "Pinned" : "已置顶", + "Your browser does not support playing audio files" : "你的浏览器不支持播放音频文件", + "Contact" : "联系人", + "{stack} in {board}" : "{stack} 于 {board}", + "Deck Card" : "看板卡片", + "Remove {fileName}" : "删除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打开此位置", + "_%n reply_::_%n replies_" : ["%n 个回复"], + "Sending message" : "正在发送消息", + "Failed to send the message. Click to try again" : "消息发送失败。点击重试", + "Not enough free space to upload file" : "没有足够的空间上传文件", + "You cannot send messages to this conversation at the moment" : "您目前无法向此对话发送消息", + "Could not update the message" : "无法更新消息", + "Reply to thread \"{threadTitle}\"" : "回复帖子“{threadTitle}”", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["点击投票 • %n 票"], + "Click to vote" : "点击投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["投票草稿 • %n 个选项"], + "_%n vote_::_%n votes_" : ["%n 票"], + "Edit poll draft" : "编辑投票草稿", + "Delete poll draft" : "删除投票草稿", + "Open poll" : "公开投票", + "Closed poll" : "非公开投票", + "See results" : "查看结果", + "Reactions" : "回应", + "No permission to post reactions in this conversation" : "无权限在此对话中发布回应", + "and {participant}" : "与 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及其他 %n 位参与者"], + "Show all reactions" : "显示所有回应", + "Add more reactions" : "添加更多回应", + "Show or collapse system messages" : "显示或折叠系统消息", + "No messages" : "没有消息", + "All messages have expired or have been deleted." : "所有消息都已过期或已被删除。", + "Generate summary with AI" : "使用 AI 生成摘要", + "{author} (pinned by you)" : "{author}(由您置顶)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 置顶)", + "Unpin" : "取消置顶", + "Cancel search" : "取消搜索", + "Add a phone number" : "添加电话号码", + "Error: A password is required to create the conversation." : "错误:创建对话需要密码。", + "All set, the conversation \"{conversationName}\" was created." : "一切就绪,对话“{conversationName}”已创建", + "Create a new group conversation" : "建立新的群组对话", + "Add participants" : "添加参与者", + "Maximum length exceeded ({maxlength} characters)" : "超过最大长度({maxlength} 个字符)", + "Conversation type" : "对话类型", + "Conversation visibility" : "对话可见性", + "Allow guests to join via link" : "允许访客通过链接加入", + "Enter password" : "输入密码", + "This conversation has been locked" : "此对话已锁定", + "No permission to post messages in this conversation" : "无权限在此对话中发布消息", + "Joining conversation …" : "正在加入对话…", + "Write a message without notification" : "写消息而不通知", + "Create a thread silently" : "静默创建帖子", + "Create a thread" : "创建帖子", + "Send message silently" : "静默发送消息", + "Send message" : "发送消息", + "Send without notification" : "发送而不通知", + "The participant will not be notified about new messages" : "此参与者将不会收到新消息的通知", + "Participants will not be notified about new messages" : "参与者将不会收到新消息的通知", + "Message will be sent {datetimeString}" : "消息将于 {datetimeString} 发送", + "Thread title is required" : "帖子标题为必填项", + "Message text is required" : "消息文本为必填项", + "The message could not be edited" : "无法编辑消息", + "File to share" : "要分享的文件", + "File upload is not available in this conversation" : "此对话中无法上传文件", + "Message was successfully scheduled" : "消息已成功安排", + "Add emoji" : "添加 emoji", + "Adding a mention will only notify users who did not read the message." : "添加提及只会通知未阅读消息的用户。", + "Thread title" : "帖子‌标题", + "Send later" : "稍后发送", + "Show scheduled messages" : "显示已安排的消息", + "Cancel editing" : "取消编辑", + "Schedule message" : "安排消息", + "{user} is out of office and might not respond." : "{user} 不在办公室,可能不会回复。", + "Absence period: {startDate} - {endDate}" : "缺勤时段:{startDate} - {endDate}", + "Replacement:" : "接替者:", + "Share from {nextcloud}" : "从{nextcloud}分享", + "Share from Files" : "从文件共享", + "Share files to the conversation" : "分享文件到对话", + "Upload from device" : "从设备上传", + "Create new poll" : "创建新的投票", + "Smart picker" : "智能选择器", + "Record voice message" : "录制语音消息", + "End recording and send" : "结束录音并发送", + "Dismiss recording" : "取消录音", + "Access to the microphone was denied" : "对麦克风的访问被拒绝", + "Microphone either not available or disabled in settings" : "麦克风不可用或者在设置中被禁用", + "Error while recording audio" : "录制音频时出错", + "Voice message {time} ({conversation})" : "语音信息 {time}({conversation})", + "Generating summary of unread messages …" : "正在生成未读消息的摘要…", + "Summary is AI generated and might contain mistakes" : "摘要是 AI 生成的,可能包含错误", + "Error occurred during a summary generation" : "生成摘要时出错", + "New file" : "新文件", + "Blank" : "空白", + "Error while creating file" : "创建文件时出错", + "Create and share a new file" : "创建及分享新文档", + "Name of the new file" : "新文件的名称", + "Create file" : "创建文件", + "Someone is typing …" : "有人在输入……", + "{user1} is typing …" : "{user1}在输入……", + "{user1} and {user2} are typing …" : "{user1}和{user2}在输入……", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2}和{user3}正在输入……", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 和其他 %n 人正在输入…"], + "Add more files" : "添加更多文件", + "Send" : "发送", + "In this conversation {user} can:" : "此对话中,{user}可以:", + "Edit default permissions for participants in {conversationName}" : "编辑 {conversationName}中参与者的默认权限", + "Start a call" : "启动通话", + "Skip the lobby" : "跳过大厅", + "Can post messages" : "可以发布消息", + "Can post messages and reactions" : "可以发布消息和回应", + "Can add reactions" : "可以添加回应", + "Enable the microphone" : "启用麦克风", + "Enable the camera" : "启用相机", + "Share the screen" : "共享屏幕", + "Update permissions" : "更新权限", + "Updating permissions" : "正在更新权限", + "No poll drafts" : "无投票草稿", + "There is no poll drafts yet saved for this conversation" : "此对话尚未保存投票草稿", + "Create poll in {name}" : "在 {name} 中创建投票", + "Create poll" : "创建投票", + "Error while importing poll" : "导入投票时出错", + "Question" : "问题", + "Ask a question" : "提出一个问题", + "Import draft from file" : "从文件导入草稿", + "Answers" : "答案", + "Answer {option}" : "答案{option}", + "Delete poll option" : "删除投票选项", + "Add answer" : "添加答案", + "Settings" : "设置", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多选答案", + "Save as draft" : "保存为草稿", + "Export draft to file" : "将草稿导出到文件", + "_Final results • %n vote_::_Final results • %n votes_" : ["最终结果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此选项", + "End poll" : "結束投票", + "Change your vote" : "更改您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "结果", + "Voted participants" : "已投票的参与者", + "Send a message to \"{roomName}\"" : "向“{roomName}”分组讨论室发送消息", + "Hide list of participants" : "隐藏参与者列表", + "Show list of participants" : "显示参与者列表", + "Assistance requested in {roomName}" : "{roomName}请求协助", + "The message was sent to \"{roomName}\"" : "消息已发送至分组讨论室“{roomName}”", + "Dismiss request for assistance" : "撤销协助请求", + "Send message to room" : "发送消息至聊天室", + "Back to main room" : "回到主聊天室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室发送消息", + "Start session" : "开启会话", + "Start a call before you start a breakout room session" : "在开启分组讨论室会话之前开始一个通话", + "Stop session" : "停止会话", + "The message was sent to all breakout rooms" : "消息已发送至所有分组讨论室", + "Send a message to all breakout rooms" : "向所有分组讨论室发送消息", + "Breakout rooms are not started" : "分组讨论室尚未开启", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "没有高性能后端的通话可能会导致连接问题和设备上的高负载。{linkstart}了解更多{linkend}", + "Talk setup incomplete" : "Talk 设置未完成", + "Disable lobby" : "禁用大厅", + "Settings for participant \"{user}\"" : "参与者 \"{user}\" 的设置", + "Participant \"{user}\"" : "参与者\"{user}\" ", + "moderator" : "主持人", + "bot" : "机器人", + "guest" : "访客", + "Ringing …" : "正在响铃……", + "Call rejected" : "通话被拒绝", + "{time} talking …" : "{time} 说话…", + "{time} talking time" : "{time} 说话时间", + "Raised their hand" : "举起了他们的手", + "Joined with video" : "通过视频加入", + "Joined via phone" : "通过电话加入", + "Joined with audio" : "通过音频加入", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的长度必须小于或等于 {maxLength}个字符。您目前的文字长度为{charactersCount}个字符。", + "Remove group and members" : "移除群组和成员", + "Remove team and members" : "移除团队和成员", + "Remove participant" : "移除参与者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "是否确定要从此对话中移除群组“{displayName}”及其成员?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "是否确定要从此对话中移除团队“{displayName}”及其成员?", + "Do you really want to remove {displayName} from this conversation?" : "是否确定要从此对话中移除 {displayName}?", + "Notification was sent to {displayName}" : "通知已发送给·{displayName}", + "Could not send notification to {displayName}" : "无法发送通知给{displayName}", + "Permissions granted to {displayName}" : "已将权限授予 {displayName}", + "Could not modify permissions for {displayName}" : "无法更改 {displayName} 的权限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的权限", + "Permissions set to default for {displayName}" : "{displayName} 权限已设为默认值", + "Phone number could not be hung up" : "无法挂断电话号码", + "Phone number could not be put on hold" : "无法保持电话号码", + "Phone number could not be muted" : "对电话号码静音失败", + "Phone number could not be unmuted" : "取消电话号码静音失败", + "DTMF message could not be sent" : "无法发送 DTMF 消息", + "Phone number copied to clipboard" : "电话号码已复制到剪贴板", + "Phone number could not be copied" : "无法复制电话号码", + "in the lobby" : "在大厅", + "Dial out phone" : "拨打电话", + "Hang up phone" : "挂断电话", + "Move back to lobby" : "移回大厅", + "Move to conversation" : "移至对话", + "Dial-in PIN" : "拨号 PIN 码", + "Demote from moderator" : "撤销主持人", + "Promote to moderator" : "提升为主持人", + "Resend invitation" : "重新发送邀请", + "Send call notification" : "发送通话通知", + "Dial out phone number" : "呼叫的电话号码", + "Resume call for phone number" : "恢复电话号码的通话", + "Put phone number on hold" : "将电话置入呼叫保持", + "Unmute phone number" : "取消电话号码静音", + "Mute phone number" : "静音电话号码", + "Copy phone number" : "复制电话号码", + "Reset custom permissions" : "重置自定义权限", + "Grant all permissions" : "授予所有权限", + "Remove all permissions" : "移除所有权限", + "Also ban from this conversation" : "也从此对话中封禁", + "Internal note (reason to ban)" : "内部备注(封禁原因)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "更改了 {displayName} 的权限", + "Add users, groups or teams" : "添加用户、群组或团队", + "Add users or groups" : "增加用户或组", + "Add users or teams" : "添加用户或团队", + "Add users" : "添加用户", + "Add groups or teams" : "添加群组或团队", + "Add groups" : "添加分组", + "Add teams" : "添加团队", + "Add other sources" : "添加其他来源", + "Add emails" : "添加电子邮件", + "Integrations" : "集成", + "Add federated users" : "添加联合用户", + "Searching …" : "正在搜索 ...", + "Search for more users" : "搜索更多用户", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以通过姓名、电子邮件或联合云 ID 搜索或添加参与者", + "Search or add participants" : "搜索或添加参与者", + "Invitation was sent to {actorId}" : "邀请已发送至{actorId}", + "An error occurred while adding the participants" : "添加参与者时发生错误 ", + "A new group conversation with selected participant will be created" : "将创建与所选参与者的新群组对话", + "Participants" : "参与者", + "Pinned by a deleted user" : "由已删除用户置顶", + "Participants ({count})" : "参与者数量 ({count})", + "Open chat" : "开启聊天", + "You have new unread messages in the chat." : "你在聊天中有新的未读消息", + "You have been mentioned in the chat." : "你在聊天中被提及", + "Search messages" : "搜索消息", + "Chat" : "聊天", + "Details" : "详情", + "Shared items" : "已共享项目", + "Search in {name}" : "在 {name} 中搜索", + "Threads in {name}" : "{name} 中的帖子‌", + "{actor} in {conversation}" : "{conversation}中的 {actor}", + "Search messages …" : "搜索消息…", + "Search options" : "搜索选项", + "From User" : "来自用户", + "Since" : "自", + "Until" : "直到", + "No results found" : "未找到结果", + "Load more results" : "加载更多结果", + "Recent threads" : "最近的帖子", + "Projects" : "项目", + "No shared items" : "沒有已共享的项目", + "Thread notifications" : "帖子通知", + "Thread actions" : "帖子操作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "链接到一个对话", + "No open conversations found" : "没有找到公开对话", + "Either there are no open conversations or you joined all of them." : "可能是没有公开对话,或是您已经加入了所有公开对话。", + "Check spelling or use complete words." : "检查拼写或使用完整字词。", + "Search conversations or users" : "搜索对话或用户", + "Select conversation" : "选择对话", + "Number length is not valid" : "号码长度不正确", + "Region code is not valid" : "区号无效", + "Number length is too short" : "号码太短", + "Number length is too long" : "号码太长", + "Number is not valid" : "号码无效", + "Phone numbers" : "电话号码 ", + "Display name: {name}" : "显示名称:{name}", + "Edit display name" : "编辑显示名称", + "Display name (required)" : "显示名称(必填)", + "Save name" : "保存名称", + "I picked message bubbles" : "我选了消息气泡", + "I picked the list style" : "我已选择列表样式", + "Error while setting personal setting" : "设置个人设置时出错", + "Error while saving sounds setting" : "保存声音设置时出错", + "Compact conversations list" : "紧凑的对话列表", + "Chat appearance" : "聊天外观", + "Messages list" : "消息列表", + "Message bubbles" : "消息气泡", + "Play sounds when participants join or leave a call" : "参与者加入或离开通话时播放声音", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由于制造商的技术限制,目前无法在 iPhone 和 iPad 上使用", + "Notification settings" : "通知设置", + "Sounds for chat and call notifications" : "聊天和通话通知的声音", + "Invalid language ({languageId})" : "无效语言({languageId})", + "Default language" : "默认语言", + "Default language ({languageName})" : "默认语言({languageName})", + "Error when trying to load the available live translation languages" : "尝试加载可用的实时翻译语言时出错", + "Error when trying to set live translation language" : "尝试设置实时翻译语言时出错", + "Set language used to show the transcriptions" : "设置用于显示转录的语言", + "Select location for attachments" : "选择附件的位置 ", + "Error while setting attachment folder" : "设置附件文件夹时出错", + "Error while setting read status privacy" : "设置读取状态隐私时发生错误 ", + "Error while setting typing status privacy" : "设置打字状态隐私时发生错误", + "Error while setting default media state" : "设置默认媒体状态时出错", + "Turn camera and microphone off by default" : "默认关闭摄像头和麦克风", + "Blur camera background by default" : "默认模糊相机背景", + "Skip device preview before joining a call" : "加入通话前跳过设备预览", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入后摄像头将自动关闭。如果需要录制同意,则会始终显示。", + "Appearance & Sounds" : "外观和声音", + "Privacy" : "隐私", + "Send read receipts" : "发送已读回执", + "When off, all read statuses will be hidden" : "关闭后,将隐藏所有阅读状态", + "Share typing status" : "分享输入状态", + "When off, all typing indicators will be hidden" : "关闭后,将隐藏所有输入指示器", + "Attachments folder" : "附件文件夹", + "Toggle full screen" : "切换全屏", + "Return to Home screen" : "返回主屏幕", + "Search" : "搜索", + "Shortcuts while in a chat" : "聊天中的快捷键", + "Focus the chat input" : "聚焦聊天输入", + "Unfocus the chat input to use shortcuts" : "取消聊天输入框的焦点以使用快捷键", + "Edit your last message" : "编辑您的最后一条消息", + "Shortcuts while in a call" : "通话中的快捷键", + "Camera on and off" : "摄像头开关", + "Microphone on and off" : "麦克风开和关", + "Raise or lower hand" : "举起手或放下手", + "Push to talk or push to mute" : "按下讲话或按下静音", + "Zoom-in / zoom-out a screen share" : "放大/缩小屏幕共享", + "Mouse wheel" : "鼠标滚轮", + "Start call silently" : "安静地开始通话", + "Start call" : "开始通话", + "End call" : "结束通话", + "The server was updated, you cannot start or join a call." : "服务器已更新,您无法开始或加入通话。", + "This call has just ended" : "此通话刚刚结束", + "You will be able to join the call only after a moderator starts it." : "您只有在主持人开始一个通话之后才能加入通话。", + "End call for everyone" : "为所有人结束通话", + "Starting the recording" : "开始录制", + "Recording" : "录音", + "The call has been running for one hour." : "通话已持续一小时", + "Cancel recording start" : "取消录制开始", + "Stop recording" : "停止录制", + "Send a reaction" : "发送回应", + "React with {reaction}" : "使用{reaction}回应", + "All tasks done!" : "所有任务完成!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n 任务"], + "Add participants to this call" : "将参与者添加到此通话", + "_%n participant in call_::_%n participants in call_" : ["通话中有 %n 位参与者"], + "Scheduled messages" : "已安排的消息", + "You are not allowed to enable screensharing" : "你不被允许启用屏幕分享", + "No screensharing" : "无屏幕分享", + "Screensharing options" : "屏幕共享选项", + "Enable screensharing" : "启用屏幕共享", + "Bad sent video and screen quality." : "发送的视频和屏幕质量不好", + "Bad sent screen quality." : "发送的屏幕质量不好", + "Bad sent video quality." : "发送的视频质量不好", + "Bad sent audio, video and screen quality." : "发送的音频、视频和屏幕质量不好。 ", + "Bad sent audio and screen quality." : "发送的音频和屏幕质量不佳", + "Bad sent audio and video quality." : "发送的音频和视频质量不佳", + "Bad sent audio quality." : "发送的音频质量不好", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的网络连接或计算机繁忙,其他参与者可能无法看到您的屏幕。为了改善这种情况,尝试在进行屏幕共享时禁用背景模糊或您的视频。", + "Disable background blur" : "禁用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的网络连接或计算机繁忙,其他参与者可能无法看到您的屏幕。为了改善这种情况,尝试在进行屏幕共享时禁用视频。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "你的互联网连接或计算机繁忙,其他参与者可能无法看到你的屏幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "你的互联网连接或计算机繁忙,其他参与者可能无法看到你。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的网络连接或计算机繁忙,其他参与者可能无法理解和看到您。为了改善这种情况,尝试在进行屏幕共享时禁用背景模糊或您的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "你的互联网连接或计算机繁忙,其他参与者可能无法理解和看到你。为了改善这种情况,尝试在做屏幕分享时禁用你的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的网络连接或计算机正忙,其他参与者可能无法理解您的意思和看到您的屏幕。为了改善这种情况,可以试着禁用屏幕共享。", + "Disable screenshare" : "禁用屏幕共享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的网络连接或计算机繁忙,其他参与者可能无法理解和看到您。为了改善这种情况,尝试禁用背景模糊或您的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "你的互联网连接或计算机繁忙,其他参与者可能无法理解和看到你。为了改善这种情况,请禁用你的视频。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "你的网络连接或计算机处于繁忙状态,其他与会者可能无法理解你的意思。", + "Screen sharing is not supported by your browser." : "您的浏览器不支持屏幕共享。", + "Screen sharing requires the page to be loaded through HTTPS." : "屏幕共享需要页面通过 HTTPS 加载。", + "Screensharing requires the page to be loaded through HTTPS." : "屏幕共享需要页面通过 HTTPS 加载。", + "An error occurred while starting screensharing." : "开始屏幕共享时发生错误。", + "Select virtual background" : "选择虚拟背景", + "Show your screen" : "显示您的屏幕", + "Stop screensharing" : "停止屏幕共享", + "Mute others" : "降低其他人的声音", + "Start recording" : "开始录制", + "Set up breakout rooms" : "设置分组讨论室", + "Download attendance list" : "下载出席名单", + "Open Calendar" : "打开日历", + "Remove participant {name}" : "移除参与者{name}", + "Would you like to delete this conversation?" : "是否删除此对话?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此对话将在 %n 天不活动后自动对所有人删除。"], + "Are you sure you want to delete this conversation?" : "是否确定要删除此对话?", + "Delete now" : "立即删除", + "Keep" : "保留", + "Open dialpad" : "打开拨号面板", + "Select a region" : "选择国家/地区", + "Local time: {time}" : "本地时间:{time}", + "Scheduled {datetime}" : "预定于 {datetime}", + "Scheduled for {datetime}" : "预定于 {datetime}", + "Search …" : "搜索...", + "Message without mention" : "没有提及的消息", + "Mention myself" : "提到我自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "选择对话", + "Select a mode" : "选择模式", + "You do not have permissions to access this conversation." : "您没有访问此对话的权限。", + "Join a different conversation or start a new one." : "加入不同的对话或开始新对话。", + "The conversation does not exist" : "该对话不存在", + "Join a conversation or start a new one!" : "加入对话或开始新的对话!", + "Duplicate session" : "重复对话", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此对话已在其他标签页中打开。当前服务器版本不支持在多个标签页中打开对话。", + "Creating and joining a conversation with \"{userid}\"" : "使用“{userid}”创建和加入对话", + "Join a conversation or start a new one" : "加入一个对话或开始新对话", + "Error while joining the conversation" : "加入对话时出错", + "Another user" : "其他用户", + "Hey! Are you using the list style or message bubbles?" : "嘿!您是使用列表样式还是消息气泡?", + "Nextcloud URL" : "Nextcloud URL ", + "Nextcloud user" : "Nextcloud 用户", + "User password" : "使用密码", + "Talk conversation" : "对话", + "Skip TLS verification" : "跳过 TLS 验证", + "Matrix server URL" : "Matrix 服务器 URL", + "User" : "用户", + "Matrix channel" : "Matrix 频道", + "Mattermost server URL" : "Mattermost 服务器 URL", + "Mattermost user" : "Mattermost 用户", + "Team name" : "团队名称", + "Channel name" : "频道名称", + "Rocket.Chat server URL" : "Rocket.Chat 服务器 URL", + "User name or email address" : "用户名或电子邮件地址 ", + "Rocket.Chat channel" : "Rocket.Chat 频道", + "Zulip server URL" : "Zulip 服务器 URL", + "Bot user name" : "机器人用户名", + "Bot API key" : "机器人 API 密钥", + "Zulip channel" : "Zulip 频道", + "API token" : "API 令牌", + "Slack channel" : "Slack 频道", + "Server ID or name" : "服务器 ID 或名称", + "Channel ID (prefixed with \"ID:\") or name" : "频道 ID(前缀为“ID:”)或名称", + "Channel" : "频道", + "Login" : "登录", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 服务器 URL ( 如:chat.freenode.net:6667 )", + "Nickname" : "昵称", + "Connection password" : "连接密码", + "IRC channel" : "IRC 频道", + "Channel password" : "频道密码", + "NickServ nickname" : "NickServ 昵称", + "NickServ password" : "NickServ 密码", + "Use TLS" : "使用 TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租户 ID", + "Client ID" : "客户端ID", + "Team ID" : "团队 ID", + "Thread ID" : "帖子 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 服务器 URL", + "MUC server URL" : "MUC 服务器 URL", + "Jabber ID" : "Jabber ID ", + "Pinned messages" : "已置顶的消息", + "Media" : "媒体文件", + "Polls" : "投票", + "Deck cards" : "看板卡片", + "Voice messages" : "语音消息", + "Locations" : "地点", + "Call recordings" : "通话录制", + "Audio" : "音频", + "Show all pinned messages" : "显示所有已置顶的消息", + "Show all media" : "显示所有媒体", + "Show all files" : "显示所有文件", + "Show all polls" : "显示所有投票", + "Show all deck cards" : "显示所有看板卡片", + "Show all voice messages" : "显示所有语音消息", + "Show all locations" : "显示所有位置", + "Show all call recordings" : "显示所有通话录制", + "Show all audio" : "显示所有音频", + "Show all other" : "显示所有其他", + "Follow conversation settings" : "遵循对话设置", + "Group" : "群组", + "Team" : "团队", + "You reconnected to the call" : "你重新连接到通话", + "{actor} reconnected to the call" : "{actor} 重新连接到通话", + "You added {user0} and {user1}" : "你添加了 {user0} 和 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["你添加了 {user0} 、 {user1} 及另外%n个参与者"], + "An administrator added you and {user0}" : "管理员已添加你和 {user0}", + "{actor} added you and {user0}" : "{actor} 添加了你和 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理员已添加你、 {user0} 及另外%n个参与者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 添加了你、 {user0} 及另外%n个参与者"], + "An administrator added {user0} and {user1}" : "管理员已添加 {user0} 和 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 添加了 {user0} 和 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理员已添加 {user0} 、 {user1} 及另外%n个参与者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 添加了 {user0} 、 {user1} 及另外%n个参与者"], + "You removed {user0} and {user1}" : "您移除了 {user0} 和 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您移除了 {user0}、{user1} 和另外 %n 位参与者"], + "An administrator removed you and {user0}" : "管理员移除了您和 {user0}", + "{actor} removed you and {user0}" : "{actor} 移除了您和 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理员移除了您、{user0} 和另外 %n 位参与者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 移除了您、{user0} 和另外 %n 位参与者"], + "An administrator removed {user0} and {user1}" : "管理员移除了 {user0} 和 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 移除了 {user0} 和 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理员移除了 {user0}、{user1} 和另外 %n 位参与者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 移除了 {user0}、{user1} 和另外 %n 位参与者"], + "You and {user0} joined the call" : "您和 {user0} 加入了通话", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 以及另外 %n 位参与者加入了通话"], + "{user0} and {user1} joined the call" : "{user0} 和 {user1} 加入了通话", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 以及另外 %n 位参与者加入了通话"], + "You and {user0} left the call" : "您和 {user0} 离开了通话", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 以及另外 %n 位参与者离开了通话"], + "{user0} and {user1} left the call" : "{user0} 和 {user1} 离开了通话", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 以及另外 %n 位参与者离开了通话"], + "You promoted {user0} and {user1} to moderators" : "您将 {user0} 和 {user1} 设为了主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "An administrator promoted you and {user0} to moderators" : "管理员将您和 {user0} 设为了主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 将您和 {user0} 设为了主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理员将您、{user0} 以及另外 %n 位参与者设为了主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 将您、{user0} 以及另外 %n 位参与者设为了主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理员将 {user0} 和 {user1} 设为了主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 将 {user0} 和 {user1} 设为了主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理员将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 将 {user0}、{user1} 以及另外 %n 位参与者设为了主持人"], + "You demoted {user0} and {user1} from moderators" : "您取消了 {user0} 和 {user1} 的主持人身份", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您取消了 {user0}、{user1} 及另外 %n 位参与者的主持人身份"], + "An administrator demoted you and {user0} from moderators" : "管理员取消了您和 {user0} 的主持人身份", + "{actor} demoted you and {user0} from moderators" : "{actor} 取消了您和 {user0} 的主持人身份", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理员取消了您、{user0} 以及另外 %n 位参与者的主持人身份"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 取消了您、{user0} 以及另外 %n 位参与者的主持人身份"], + "An administrator demoted {user0} and {user1} from moderators" : "管理员取消了 {user0} 和 {user1} 的主持人身份", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 取消了 {user0} 和 {user1} 的主持人身份", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理员取消了 {user0}、{user1} 以及另外 %n 位参与者的主持人身份"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 取消了 {user0}、{user1} 以及另外 %n 位参与者的主持人身份"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "服务器已更新。", + "(edited by you)" : "(由您编辑)", + "(edited by a deleted user)" : "(由已删除的用户编辑)", + "(edited by {moderator})" : "(由 {moderator} 编辑)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在尝试加入对话,但同时在另一个窗口或设备中有活动会话。Nextcloud通话应用目前不支持这么做。您想做什么?", + "Leave this page" : "离开此页面", + "Join here" : "点此加入", + "Deck card has been posted to {conversation}" : "看板卡片已发送至 {conversation}", + "An error occurred while posting deck card to conversation" : "将看板卡片发布到对话时发生错误", + "Post to a conversation" : "发布到一个对话中", + "Post to conversation" : "发布到对话中", + "The recording failed. Please contact your administrator." : "录制失败。请联系您的管理员。", + "Location has been posted to {conversation}" : "位置已发布到 {conversation}", + "An error occurred while posting location to conversation" : "将位置发布到对话时发生错误", + "Share to a conversation" : "分享到一个对话", + "Share to conversation" : "分享到对话", + "In conversation" : "对话中", + "Search in conversation: {conversation}" : "在对话中搜索:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "由于暴力保护,您的请求目前受到限制", + "Error while clearing conversation history" : "清除对话历史时出错", + "Error occurred while allowing guests" : "允许访客时发生错误", + "Error occurred while disallowing guests" : "禁止访客时发生错误", + "Error occurred when restricting the conversation to moderator" : "将对话限制为主持人时发生错误", + "Error occurred when opening the conversation to everyone" : "向所有人开放对话时发生错误", + "Conversation password has been saved" : "对话密码已保存", + "Conversation password has been removed" : "对话密码已被删除 ", + "Error occurred while saving conversation password" : "保存对话密码时发生错误 ", + "Call recording is starting." : "通话录制启动中。", + "Call recording stopped while starting." : "通话录制启动时停止。", + "Call recording stopped. You will be notified once the recording is available." : "通话录制已停止。您会在录制可用时收到通知。", + "Conversation picture set" : "对话图片已设定", + "Conversation picture deleted" : "对话图片已删除", + "Could not delete the conversation picture" : "无法删除对话图片", + "Could not remove the automatic expiration" : "无法移除自动过期", + "Could not post message: {errorMessage}" : "无法发布消息: {errorMessage}", + "Participant is banned successfully" : "成功封禁了参与者", + "Error while banning the participant" : "封禁参与者时出错", + "An error occurred while fetching the participants" : "获取参与者时出错", + "Could not send invitation to {actorId}" : "无法发送邀请到 {actorId}", + "Invitations sent" : "邀请已发送", + "Error occurred when sending invitations" : "发送邀请时发生错误 ", + "Failed to join the conversation." : "无法加入对话。", + "An error occurred while creating breakout rooms" : "创建分组讨论室时发生了错误", + "An error occurred while re-ordering the attendees" : "重新排序参加者时出错", + "An error occurred while deleting breakout rooms" : "删除分组讨论室时发生错误", + "An error occurred while starting breakout rooms" : "开始分组讨论室时发生错误", + "An error occurred while stopping breakout rooms" : "停止分组讨论室时发生错误", + "An error occurred while sending a message to the breakout rooms" : "向分组讨论室发送消息时发生错误", + "An error occurred while requesting assistance" : "请求协助时发生错误·", + "An error occurred while resetting the request for assistance" : "重置协助请求时发生错误", + "An error occurred while joining breakout room" : "加入分组讨论室时发生错误", + "Failed to rename the thread" : "无法重命名帖子", + "Error fetching upcoming events" : "获取预定的活动时出错", + "Error fetching upcoming reminders" : "获取预定的提醒时出错", + "An error occurred while accepting an invitation" : "接受邀请时出错", + "An error occurred while rejecting an invitation" : "拒绝邀请时出错", + "{guest} (guest)" : "{guest}(访客)", + "Poll draft has been saved" : "已保存投票草稿", + "An error occurred while saving the draft" : "保存草稿时出错", + "An error occurred while submitting your vote" : "提交您的投票时发生错误", + "An error occurred while ending the poll" : "结束投票时发生错误", + "An error occurred while deleting the poll draft" : "删除投票草稿时出错", + "Poll \"{name}\" was created by {user}. Click to vote" : "{user} 创建了投票“{name}”,点击投票", + "Failed to add reaction" : "无法添加回应", + "Failed to remove reaction" : "无法移除回应", + "The server is in maintenance mode." : "服务器处于维护模式。", + "Federated server was updated." : "联合服务器已更新。", + "Error while uploading file \"{fileName}\"" : "上传文件 \"{fileName}\" 时出错", + "Not enough free space to upload file \"{fileName}\"" : "没有足够空间来上传文件 \"{fileName}\"", + "You are not allowed to share files" : "您不被允许分享文件", + "Error while sharing file" : "共享文件时出错", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud通话应用并不完全支持你使用的浏览器。请使用最新版本的 Mozilla Firefox、Microsoft Edge、Google Chrome、Opera 或 Apple Safari 浏览器。", + "_In %n hour_::_In %n hours_" : ["%n 小时内"], + "_%n minute _::_%n minutes_" : ["%n 分钟"], + "In {hours} and {minutes}" : "{hours} {minutes} 内", + "_In %n minute_::_In %n minutes_" : ["%n 分钟内"], + "Later today – {timeLocale}" : "今日稍晚 – {timeLocale}", + "Set time for later today" : "设定今天晚些时候的时间", + "Tomorrow – {timeLocale}" : "明天 – {timeLocale}", + "Set time for tomorrow" : "设定明天的时间", + "This weekend – {timeLocale}" : "本周末 – {timeLocale}", + "Set time for this weekend" : "设定本周末的时间", + "Next week – {timeLocale}" : "下周 – {timeLocale}", + "Set time for next week" : "设定下周的时间", + "Message link copied to clipboard" : "消息链接已复制到剪贴板", + "Conversation link copied to clipboard" : "对话链接已复制到剪贴板。", + "The link could not be copied" : "无法复制链接。", + "Error while parsing a PROPFIND error" : "解析 PROPFIND 错误时出错", + "Sending signaling message has failed" : "发送信令消息失败", + "Lost connection to signaling server. Trying to reconnect." : "与信令服务器的连接中断,正在尝试重新连接。", + "Lost connection to signaling server." : "与信令服务器连接中断。", + "Connecting is taking longer than expected …" : "连接时间比预期长…", + "Failed to connect. Retrying …" : "无法连接,正在重试…", + "Failed to connect. The signaling server may be set up incorrectly" : "无法连接,信令服务器可能设置不正确", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "配置的信令服务器需要更新才能与此版本的 Talk 兼容,请联系您的管理员。", + "Please restart the app." : "请重启应用。", + "Please reload the page." : "请重新加载页面。", + "Please try to restart the app." : "请尝试重启应用。", + "Please try to reload the page." : "请尝试重新加载页面。", + "Do not disturb" : "勿扰", + "Away" : "离开", + "Microphone {number}" : "第{number}号麦克风", + "Camera {number}" : "第{number}号摄像头", + "Speaker {number}" : "第{number}号扬声器", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎是在静音状态下讲话,请将您自己的静音取消使其他人能听到", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "无法与至少一个参与者建立连接。你的场景可能需要一个 TURN 服务器。请请求你的管理员按照 {linkstart}这个文档{linkend} 来设置一个。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "耗时超出预期。媒体权限是否已被授予(或被拒绝)?如果已被授予,请重启您的浏览器,因为音视频当前无法工作", + "Access to microphone & camera is only possible with HTTPS" : "仅使用 HTTPS 访问麦克风和摄像头", + "Please move your setup to HTTPS" : "请将您的环境移至HTTPS", + "Access to microphone & camera was denied" : "访问麦克风和摄像头被拒绝", + "WebRTC is not supported in your browser" : "您的浏览器不支持 WebRTC", + "Please use a different browser like Firefox or Chrome" : "请使用 Firefox 或 Chrome 等其他浏览器", + "Error while accessing microphone & camera" : "访问麦克风和摄像头时出错", + "%s Talk on your mobile devices" : "用于移动设备的%s通话应用", + "Join conversations at any time, anywhere, on any device." : "随时随地在任何设备上加入对话。", + "Android app" : "Android 应用", + "iOS app" : "iOS 应用", + "__language_name__" : "简体中文", + "Webhook Demo" : "Webhook 演示", + "Call summary (%s)" : "通话摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通话摘要机器人会在通话结束后发布一条概述信息,列出所有与会者并概述各项任务", + "Tasks" : "任务", + "Notes" : "附注", + "Reports" : "报告", + "Decisions" : "决定", + "Agenda" : "日程", + "Call summary" : "通话摘要", + "Call summary - {title}" : "通话摘要 - {title}", + "Talk conversation for event" : "活动的 Talk 对话", + "Client Push is installed, this improves the performance of desktop clients." : "已安装客户端推送,这提高了桌面客户端的性能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "未安装 {notify_push},这可能会导致使用桌面客户端时出现性能问题。", + "Next meeting" : "下次会议", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "从日历中安排会议。需要将 Talk 对话设置为位置才能在此处显示", + "Join conversations from remote Nextcloud servers" : "从远程 Nextcloud 服务器加入对话", + "Your default media state has been saved" : "已保存您的默认媒体状态", + "Set reminder for later today" : "今日稍晚提醒", + "Set reminder for tomorrow" : "明天提醒", + "Set reminder for this weekend" : "本周末提醒", + "Set reminder for next week" : "下周提醒", + "Generate summary" : "生成摘要", + "Open poll • You voted already" : "公开投票 · 您已投票", + "Open poll • Click to vote" : "公开投票 · 点击投票", + "Poll • Ended" : "投票 · 已结束", + "Talk recording from {time} ({conversation})" : "{time}于({conversation})对话中的录制 ", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公开投票 • %n票"], + "Submit vote" : "提交投票", + "Your privacy setting has been saved" : "你的隐私设置已保存", + "Your personal setting has been saved" : "已保存您的个人设置", + "Failed to save sounds setting" : "保存声音设置失败", + "Sounds setting saved" : "声音设置已保存", + "Always shown if recording consent is required" : "如果需要录制同意,则始终显示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您无法开始或加入通话。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "你在另一个窗口或设备上加入了对话。Nextcloud通话应用目前不支持这么做,所以这个会话被关闭了。", + "Nextcloud Talk was updated." : "Nextcloud Talk 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 处于维护模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "启用实时翻译", + "I picked list style" : "我择了列表样式", + "Hey! Are you using Talk in list style or with message bubbles?" : "嘿!您是使用列表样式还是有消息气泡的 Talk?" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/zh_HK.js b/l10n/zh_HK.js new file mode 100644 index 0000000..c273f8f --- /dev/null +++ b/l10n/zh_HK.js @@ -0,0 +1,2260 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "對話", + "(Duration %s)" : "(歷時 %s)", + "You attended a call with {user1}" : "您加入了與 {user1} 的通話", + "_%n guest_::_%n guests_" : ["%n位訪客"], + "You attended a call with {user1} and {user2}" : "您加入了與 {user1} 及 {user2} 之間的通話", + "You attended a call with {user1}, {user2} and {user3}" : "您加入了與 {user1}﹑{user2} 及 {user3} 之間的通話", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您加入了與 {user1}﹑{user2}﹑{user3} 及 {user4} 之間的通話", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您加入了與 {user1}﹑{user2}﹑{user3}﹑{user4} 及 {user5} 之間的通話", + "_%n other_::_%n others_" : ["及另外%n位其他人"], + "{actor} invited you to {call}" : "{actor} 邀請你加入 {call}", + "You were invited to a conversation or had a call" : "你被邀請加入對話通話", + "Other activities" : "其它活動", + "Talk" : "Talk", + "Guest" : "訪客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 歡迎來到Nextcloud Talk!\n在此對話中,我們將向您介紹Nextcloud Talk中可用的新功能。", + "## New in Talk %s" : "## Talk 的新功能 %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 現在可以使用Microsoft Edge和Safari參加音頻和視像通話", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 單對單對話現在是持久的,不會再意外話地變成小組對話。同樣,當參與者之一離開對話時,該對話不再自動刪除。僅當兩個參與者都離開時,對話才會從伺服器中刪除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您現在可以通過在聊天室中張貼“@all”來通知所有參與者", + "- With the \"arrow-up\" key you can repost your last message" : "- 使用【上箭頭】鍵,您可以重新發佈上一條消息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk 現在支持指令。發送 “/help” 作為聊天訊息,以查看管理員是否配置了任何指令。", + "- With projects you can create quick links between conversations, files and other items" : "- 使用方案,您可以在對話﹑檔案和其他項目之間建立快速連結", + "- You can now mention guests in the chat" : "- 您現在可以在聊天中提及來賓", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 對話現在可以有一個等候室。這將使主持人可以加入聊天及通話以準備會議,而用戶和來賓則必須等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您現在可以直接回覆郵件,為其他用戶提供更多有關您的郵件內容的背景訊息", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 現在,搜尋對話和參與者也將過濾您現有的對話,從而使找出以前的對話變得更加容易", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 現在,您可以在安裝社交圈子應用程式後將自訂用戶群組添加到對話中", + "- Check out the new grid and call view" : "- 體驗新的網格和通話視圖", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您現在可以直接從裝置上載檔案或將檔案拖放到聊天中", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 現在可以使用查看器應用程式直接在聊天視圖中打開分享檔案", + "- You can now search for chats and messages in the unified search in the top bar" : "您現在可以搜索聊天和訊息在頂部欄的搜索", + "- Spice up your messages with emojis from the emoji picker" : "使用表情符號選擇器中的表情符號來豐富您的訊息", + "- You can now change your camera and microphone while being in a call" : "您可以在通話時更改相機和麥克風 ", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 給您的對話一些描述的上下文並打開它,以便已登入的用戶可以找到它並加入", + "- See a read status and send failed messages again" : "- 查看讀取狀態並再次發送失敗的訊息", + "- Raise your hand in a call with the R key" : "- 使用【R】鍵在通話中舉手", + "- Join the same conversation and call from multiple devices" : "- 加入同一個對話並從多個設備撥打電話", + "- Send voice messages, share your location or contact details" : "- 發送音頻信息,分享您的位置或聯絡方式", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 將群組添加到對話中,新群組成員將自動成為參與者", + "- A preview of your audio and video is shown before joining a call" : "- 在加入通話之前顯示您的音頻和視頻預覽", + "- You can now blur your background in the newly designed call view" : "- 您現在可以在新設計的通話視圖中模糊背景", + "- Moderators can now assign general and individual permissions to participants" : "- 版主現在可以為參與者分配一般和個人權限", + "- You can now react to chat messages" : "- 您現在可以對聊天訊息做出反應", + "- In the sidebar you can now find an overview of the latest shared items" : "- 現在您可以在側邊欄中找到最新共享項目的概覽", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用民意調查收集他人的意見或確定日期", + "- Configure an expiration time for chat messages" : "- 配置聊天訊息的過期時間", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在不通知他人的情況下開始通話。通話開始後,您可以發送單獨的通話通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不緊急的情況下發送聊天訊息而不通知收件人", + "- Emojis can now be autocompleted by typing a \":\"" : "- 表情符號現在可以通過輸入 \":\" 自動完成", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 通過輸入 \"/\" 使用新的智能選擇器鏈接各種項目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人現在可以創建分組討論室(需要高性能後端系統)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 現在可以記錄通話(需要高性能後端系統)", + "- Conversations can now have an avatar or emoji as icon" : "- 對話現在可以有虛擬化身或 emoji 作為圖示", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 除了視頻通話中的模糊背景外,現在還可以使用虛擬背景", + "- Reactions are now available during calls" : "- 現在可以在通話期間做出反應", + "- Typing indicators show which users are currently typing a message" : "- 打字指示器顯示目前正在打字的用戶", + "- Groups can now be mentioned in chats" : "- 現在可以在聊天中提及群組", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 如果註冊了轉錄提供商應用程式,通話錄音會自動轉錄", + "- Chat messages can be translated if a translation provider app is registered" : "- 如果註冊了翻譯提供商應用程式,則可以翻譯聊天消息", + "- **Markdown** can now be used in _chat_ messages" : "- 現在可以在 _聊天_ 訊息中使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook 現在可用於實作機器人。要取得更多資訊,請參閱文件 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 在聊天訊息上設定提醒,如此稍後可收到通知", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用**給自己的筆記 **對話來記筆記並在裝置間分享資訊", + "- Captions allow to send a message with a file at the same time" : "- 字幕允許同時傳送包含檔案的訊息", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 現在在分享螢幕時可以看到講者的視訊,通話反應以動畫形式顯示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登入的作者和主持人現在可以在 6 小時內編輯訊息", + "- Unsent message drafts are now saved in your browser" : "- 未發送的訊息草稿現在保存在您的瀏覽器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 文字聊天現在可以透過聯盟方式與其他 Talk 伺服器通訊", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人現在可以禁止帳戶和訪客,以防止他們重新加入對話", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 連結的日曆活動和外出替換的即將打來的電話現在顯示在對話中", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 通話現在可以透過聯盟方式與其他 Talk 伺服器通訊(需要高效能後端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 介紹 Nextcloud Talk 桌面客戶端,支持 Windows、macOS 和 Linux:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud Assistant 總結通話錄音和聊天中的未讀消息。", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 改進會議功能,識別通過電郵地址邀請的嘉賓,導入參與者名單,草擬投票並下載通話參與者名單。", + "- Archive conversations to stay focused" : "- 存檔對話以保持專注", + "- Schedule a meeting into your calendar from within a conversation" : "- 在對話中安排會議到您的日曆", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右側邊欄搜尋目前對話的訊息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的精簡清單(在 Talk 設定中啟用),第一眼就能看到更多對話內容", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 會議對話現在會從日曆同步標題和描述,並且在開始前會用搜尋過濾器隱藏。", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知設定中標記對話為敏感,以隱藏對話清單和通知中的訊息內容。", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 在「勿擾」模式下接收推送通知,請將對話標記為重要。", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 在一對一通話中添加其他參與者,即可隨時創建新的群組通話", + "- Use threads to keep your chat and discussions organized" : "- 使用討論串來讓您的聊天與討論井然有序", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話期間現已提供即時轉錄功能(需安裝即時轉錄 ExApp 及高效能後端系統)", + "- Moderators can now pin messages so they are kept at the top" : "- 主持人現在可以將訊息釘選,讓它們固定顯示在最上方", + "- Schedule a message to send it at a later time" : "- 安排訊息於稍後傳送", + "_All %n participant_::_All %n participants_" : ["所有 %n 個參與者"], + "Talk updates ✅" : "Talk 更新 ✅", + "Reaction deleted by author" : "反應被作者刪除", + "{actor} created the conversation" : "{actor} 建立了對話", + "You created the conversation" : "你建立了對話", + "System created the conversation" : "系統創建了對話", + "An administrator created the conversation" : "管理員建立了對話", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} 將對話從 “%1$s” 重命名為 “%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您將對話從 “%1$s” 重命名為 “%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理員將對話從 “%1$s” 重命名為 “%2$s”", + "{actor} set the description" : "{actor} 設置了描述", + "You set the description" : "您設置了描述", + "An administrator set the description" : "管理員設置了描述", + "{actor} removed the description" : "{actor} 刪除了描述", + "You removed the description" : "您刪除了描述", + "An administrator removed the description" : "管理員刪除了描述", + "You started a silent call" : "您發起了無聲通話", + "Outgoing silent call" : "無聲去電", + "{actor} started a silent call" : "{actor} 發起了無聲通話", + "Incoming silent call" : "無聲來電", + "You started a call" : "您發起了一通話", + "Outgoing call" : "去電", + "{actor} started a call" : "{actor} 發起了一通話", + "Incoming call" : "來電", + "{actor} joined the call" : "{actor} 加入了通話", + "You joined the call" : "您已加入了通話", + "{actor} left the call" : "{actor} 離開了通話", + "You left the call" : "你離開了通話", + "{actor} unlocked the conversation" : "{actor} 解鎖了對話", + "You unlocked the conversation" : "您解鎖了對話", + "An administrator unlocked the conversation" : "管理員解鎖了對話", + "{actor} locked the conversation" : "{actor} 鎖定了對話", + "You locked the conversation" : "您鎖定了對話", + "An administrator locked the conversation" : "管理員鎖定了對話", + "{actor} limited the conversation to the current participants" : "{actor} 將對話限制為目前參與者", + "You limited the conversation to the current participants" : "您將對話限制為目前參與者", + "An administrator limited the conversation to the current participants" : "管理員將對話限制為目前參與者", + "{actor} opened the conversation to registered users" : "{actor} 已向註冊用戶開放對話", + "You opened the conversation to registered users" : "您已向註冊用戶開放對話", + "An administrator opened the conversation to registered users" : "管理員已向註冊用戶開放對話", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "You opened the conversation to registered users and users created with the Guests app" : "您向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理員向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "The conversation is now open to everyone" : "對話現在向所有人開放", + "{actor} opened the conversation to everyone" : "{actor} 向所有人開放了對話", + "You opened the conversation to everyone" : "您向所有人開放了對話", + "{actor} restricted the conversation to moderators" : "{actor} 將對話限制為主持人", + "You restricted the conversation to moderators" : "您將對話限制為主持人", + "{actor} started breakout rooms" : "{actor} 開始了分組討論室", + "You started breakout rooms" : "您開始了分組討論室", + "{actor} stopped breakout rooms" : "{actor} 停止了分組討論室", + "You stopped breakout rooms" : "您停止了分組討論室", + "{actor} allowed guests" : "{actor} 允許來賓加入對話", + "You allowed guests" : "您允許來賓加入對話", + "An administrator allowed guests" : "管理員允許來賓加入對話", + "{actor} disallowed guests" : "{actor} 不允許來賓加入對話", + "You disallowed guests" : "您不允許來賓加入對話", + "An administrator disallowed guests" : "管理員不允許來賓加入對話", + "{actor} set a password" : "{actor} 設置了密碼", + "You set a password" : "您設置了密碼", + "An administrator set a password" : "管理員設置了密碼", + "{actor} removed the password" : "{actor} 刪除了密碼", + "You removed the password" : "您刪除了密碼", + "An administrator removed the password" : "管理員刪除了密碼", + "{actor} added {user}" : "{actor} 添加了 {user}", + "You joined the conversation" : "您加入了對話", + "{actor} joined the conversation" : "{actor} 加入了對話", + "You added {user}" : "您添加了 {user}", + "{actor} added you" : "{actor} 添加了您", + "An administrator added you" : "管理員添加了您", + "An administrator added {user}" : "管理員添加了 {user}", + "You left the conversation" : "你離開了對話", + "{actor} left the conversation" : "{actor} 離開了對話", + "{actor} removed {user}" : "{actor} 刪除了 {user}", + "You removed {user}" : "您刪除了 {user}", + "{actor} removed you" : "{actor} 刪除了您", + "An administrator removed you" : "管理員刪除了您", + "An administrator removed {user}" : "管理員刪除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀請了 {federated_user}", + "You invited {federated_user}" : "您邀請了 {federated_user}", + "You accepted the invitation" : "您接受了邀請", + "{actor} invited you" : "{actor} 邀請了您", + "An administrator invited you" : "管理員邀請了您", + "An administrator invited {federated_user}" : "管理員邀請了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀請", + "{actor} removed {federated_user}" : "{actor} 移除了{federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您婉拒了邀請", + "An administrator removed {federated_user}" : "管理員移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 婉拒了邀請", + "{actor} added group {group}" : "{actor} 添加了群組 {group}", + "You added group {group}" : "您添加了群組 {group}", + "An administrator added group {group}" : "管理員添加了群組 {group} ", + "{actor} removed group {group}" : "{actor} 移除了群組 {group}", + "You removed group {group}" : "您移除了群組 {group}", + "An administrator removed group {group}" : "管理員已將群組 {group} 移除", + "{actor} added team {circle}" : "{actor} 新增了團隊 {circle}", + "You added team {circle}" : "您新增了團隊 {circle}", + "An administrator added team {circle}" : "管理員新增了團隊 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了團隊 {circle}", + "You removed team {circle}" : "您移除了團隊 {circle}", + "An administrator removed team {circle}" : "管理員移除了團隊 {circle}", + "{actor} added {phone}" : "{actor} 添加了 {phone}", + "You added {phone}" : "您添加了 {phone}", + "An administrator added {phone}" : "管理員添加了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "您移除了 {phone}", + "An administrator removed {phone}" : "管理員移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor} 晉升 {user} 為主持人", + "You promoted {user} to moderator" : "您晉升 {user} 為主持人", + "{actor} promoted you to moderator" : "{actor} 晉升您為主持人", + "An administrator promoted you to moderator" : "管理員晉升了您為主持人", + "An administrator promoted {user} to moderator" : "管理員晉升了 {user} 為主持人", + "{actor} demoted {user} from moderator" : "{actor} 將 {user} 從主持人降級", + "You demoted {user} from moderator" : "您將 {user} 從主持人降級", + "{actor} demoted you from moderator" : "{actor} 將您從主持人降級", + "An administrator demoted you from moderator" : "管理員將您從主持人降級", + "An administrator demoted {user} from moderator" : "管理員將 {user} 從主持人降級", + "{actor} shared a file which is no longer available" : "{actor} 共享了一個不再可用的檔案", + "You shared a file which is no longer available" : "您共享了一個不再可用的檔案", + "File shares are currently not supported in federated conversations" : "在聯合對話中目前不支援檔案共享", + "The shared location is malformed" : "分享位置格式錯誤", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 設置了 Matterbridge 以將此對話與其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "您設置了 Matterbridge 以將此對話與其他聊天同步", + "{actor} created thread {title}" : "{actor} 建立了討論串 {title}", + "You created thread {title}" : "您建立了討論串 {title}", + "{actor} renamed thread {title}" : "{actor} 重新命名了討論串 {title}", + "You renamed thread {title}" : "您重新命名了討論串 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 的配置", + "You updated the Matterbridge configuration" : "您更新了 Matterbridge 的配置", + "{actor} removed the Matterbridge configuration" : "{actor} 刪除了 Matterbridge 的配置", + "You removed the Matterbridge configuration" : "您刪除了 Matterbridge 的配置", + "{actor} started Matterbridge" : "{actor} 啟動了Matterbridge", + "You started Matterbridge" : "您啟動了Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "您停止了 Matterbridge", + "{actor} deleted a message" : "{actor} 刪除了訊息", + "You deleted a message" : "您刪除了訊息", + "{actor} edited a message" : "{actor} 編輯了訊息", + "You edited a message" : "您編輯了訊息", + "{actor} pinned a message" : "{actor} 釘選了訊息", + "You pinned a message" : "您釘選了訊息", + "{actor} unpinned a message" : "{actor} 取消釘選了訊息", + "Message was automatically unpinned" : "訊息已自動取消釘選", + "You unpinned a message" : "您取消釘選了訊息", + "{actor} deleted a reaction" : "{actor} 刪除了反應", + "You deleted a reaction" : "您刪除了反應", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您將訊息過期時間設置為%n星期"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您將訊息過期時間設置為%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您將訊息過期時間設置為%n小時"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您將訊息過期時間設置為%n分鐘"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} 將訊息過期時間設置為%n星期"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} 將訊息過期時間設置為%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} 將訊息過期時間設置為%n小時"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} 將訊息過期時間設置為%n分鐘"], + "{actor} disabled message expiration" : "{actor} 已停用訊息過期時間", + "You disabled message expiration" : "您已停用訊息過期時間", + "{actor} cleared the history of the conversation" : "{actor} 清除了對話的歷史記錄", + "You cleared the history of the conversation" : "你清除了對話的歷史記錄", + "{actor} set the conversation picture" : "{actor} 設置了對話圖片", + "You set the conversation picture" : "您設置了對話圖片", + "{actor} removed the conversation picture" : "{actor} 移除了對話圖片", + "You removed the conversation picture" : "您移除了對話圖片", + "{actor} ended the poll {poll}" : "{actor} 結束了投票 {poll}", + "You ended the poll {poll}" : "您結束了投票 {poll}", + "{actor} started the video recording" : "{actor} 開始錄影", + "You started the video recording" : "您開始錄影", + "{actor} stopped the video recording" : "{actor} 停止了錄影", + "You stopped the video recording" : "您停止了錄影", + "{actor} started the audio recording" : "{actor} 開始錄音", + "You started the audio recording" : "您開始錄音", + "{actor} stopped the audio recording" : "{actor} 停止了錄音", + "You stopped the audio recording" : "您停止了錄音", + "The recording failed" : "錄製失敗", + "Someone voted on the poll {poll}" : "有人在民意調查 {poll} 中投票", + "Message deleted by author" : "訊息被作者刪除", + "Message deleted by {actor}" : "訊息被 {actor} 刪除", + "Message deleted by you" : "訊息被您刪除", + "Deleted user" : "已刪除的用戶", + "Unknown number" : "號碼不詳", + "Administration" : "管理", + "System" : "系统", + "%s (guest)" : "%s(訪客)", + "Missed call" : "未接來電", + "Unanswered call" : "未接通話", + "Call ended (Duration {duration})" : "通話已結束(持續時間 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "通話因達到最長通話時長(持續時間 {duration})而結束", + "{actor} ended the call (Duration {duration})" : "{actor} 結束了通話(持續時間 {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["與 %n 位訪客的通話因達到最長通話時間(持續時間 {duration})而結束"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["與 %n 位訪客的通話結束(持續時間 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 結束了與 %n 位客人的通話(持續時間 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "與{user1}的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} ended (Duration {duration})" : "與 {user1}的通話已結束(持續時間 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 結束了與 {user1} 的通話(持續時間 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}及 {user2} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} and {user2} ended (Duration {duration})" : "與 {user1} 及 {user2} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 結束了與 {user1} 和 {user2} 的通話(持續時間 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2} 和 {user3} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3} 和 {user4} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 結束了與 {user1}﹑{user2}﹑{user3}﹑{user4} 和 {user5} 的通話(持續時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中 {user} 的訊息", + "Message of {user}" : "{user} 的訊息", + "Message of a deleted user in {conversation}" : "{conversation} 中已刪除用戶的訊息", + "Talk conversations" : "Talk 對話", + "Talk to %s" : "與 %s 通話", + "An error occurred. Please contact your administrator." : "發生錯誤,請聯絡管理員。", + "App disabled" : "已停用應用程式", + "Conversation subfolders are disabled" : "已停用對話子資料夾", + "Storage quota exceeded" : "超過儲存空間配額", + "Could not prepare conversation folder" : "無法準備對話資料夾", + "File not found" : "找不到檔案", + "Path must point to a file" : "路徑必須指向檔案", + "File is not inside the conversation draft folder for this room" : "檔案不在此聊天室的草稿資料夾中", + "File is not shared, or shared but not with the user" : "檔案未分享,或未與用戶分享", + "No account available to delete." : "沒有可刪除的帳戶。", + "Poll" : "民意調查", + "Password needs to be set" : "需要設定密碼", + "Uploading the file failed" : "上傳檔案失敗", + "No image file provided" : "未提供圖像", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", + "Invalid image" : "圖像無效", + "Unknown filetype" : "檔案類型不詳", + "Talk mentions" : "Talk 提及", + "More conversations" : "更多對話", + "Say hi to your friends and colleagues!" : "跟大家打招呼", + "No unread mentions" : "沒有未讀的 @提及", + "Call in progress" : "正在通話中…", + "You were mentioned" : "您被提及", + "Write to conversation" : "寫到對話", + "Writes event information into a conversation of your choice" : "將活動資訊寫入您選擇的對話中", + "Missing email field in header line" : "標題行中缺少電郵地址欄位", + "Following lines are invalid: %s" : "以下行無效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀請您加入對話「%2$s」。", + "You were invited to conversation \"%s\"." : "您被邀請加入對話「%s」。", + "Conversation invitation" : "對話邀請", + "Scheduled time" : "排定時間", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "您也可以使用以下細節通過電話撥入", + "Dial-in information" : "撥入細節", + "Meeting ID" : "會議 ID", + "Your PIN" : "您的 PIN", + "Click the button below to join the lobby now." : "點擊下方按鈕以立刻加入等候室。", + "Click the link below to join the lobby now." : "點選下方連結以立刻加入等候室。", + "Join lobby for \"%s\"" : "加入「%s」的等候室", + "Click the button below to join the conversation now." : "點選下方按鈕以立刻加入對話。", + "Click the link below to join the conversation now." : "點選下方連結以立刻加入對話。", + "Join \"%s\"" : "加入「%s」", + "Meeting" : "會議", + "Password request: %s" : "索取密碼: %s", + "Private conversation" : "私人對話", + "Deleted user (%s)" : "已刪除用戶(%s)", + "Failed to upload call recording" : "上傳通話錄音失敗", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "錄音伺服器無法上傳通話 {call} 的錄音。請聯絡管理員。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "撤銷通告", + "Call recording now available" : "通話錄音現已可用", + "The recording for the call in {call} was uploaded to {file}." : "{call} 中的通話錄音已上傳到 {file}。", + "Transcript now available" : "通話抄本現已可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 中的通話抄本已上傳到 {file}。", + "Failed to transcript call recording" : "通話錄音轉抄本失敗", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處創建錄音抄本。請聯絡管理員。", + "Call summary now available" : "通話摘要現已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 通話的摘要已上傳至 {file}。", + "Failed to summarize call recording" : "通話錄音文字摘要失敗", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立摘要。請聯絡管理員。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀請您加入在 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "婉拒", + "{user1} invited you to a federated conversation" : "{user1} 邀請您加入聯合對話", + "Someone reacted" : "有人回應了", + "New message" : "新郵件", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通告", + "Someone reacted in a private conversation" : "有人在私人對話中反應了", + "You received a message in a private conversation" : "您在私人對話中收到訊息", + "Reminder in a private conversation" : "私人對話中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人對話中提及您", + "Notification in a private conversation" : "私人對話中的通知", + "Reminder: You in {call}" : "提醒:您在 {call} 中", + "Reminder: {user} in {call}" : "提醒:{user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已刪除的用戶在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:{guest}(訪客)在 {call} 中", + "Reminder: Guest in {call}" : "提醒:訪客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 使用 {reaction} 做出反應", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中使用 {reaction} 做出反應", + "Deleted user reacted with {reaction} in {call}" : "已刪除的使用者在 {call} 中使用 {reaction} 做出反應", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}(訪客)在 {call} 中使用 {reaction} 做出反應", + "Guest reacted with {reaction} in {call}" : "訪客在 {call} 中使用 {reaction} 做出反應", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "{call} 中已刪除的 {user}", + "{guest} (guest) in {call}" : "{call} 中的 {guest}(訪客)", + "Guest in {call}" : "{call} 中的訪客", + "{user} sent you a private message" : "{user} 向您發送了一條私人訊息", + "{user} sent a message in conversation {call}" : "{user} 向對話 {call} 發送了一條訊息", + "A deleted user sent a message in conversation {call}" : "刪除的用戶在對話 {call} 中發送了一條訊息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(訪客)向對話 {call} 發送了一條訊息", + "A guest sent a message in conversation {call}" : "一位訪客向對話 {call} 發送了一條訊息", + "{user} replied to your private message" : "{user} 回覆了您的私人留言", + "{user} replied to your message in conversation {call}" : "{user} 在對話 {call} 中回覆了您的訊息", + "A deleted user replied to your message in conversation {call}" : "刪除的用戶在對話 {call} 中回覆了您的訊息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(guest)在對話 {call} 中回覆了您的訊息", + "A guest replied to your message in conversation {call}" : "一位來賓在對話 {call} 中回覆了您的訊息", + "Reminder: You in private conversation {call}" : "提醒:您在私人對話 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已刪除的用戶在私人對話 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私人對話中", + "Reminder: You in conversation {call}" : "提醒:您在對話 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在對話 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已刪除的用戶在對話 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:{guest}(訪客)在對話 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:訪客在對話 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user} 對您的私人訊息做出了 {reaction} 的反應", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "已刪除 {user} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "來賓 {guest} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "A guest reacted with {reaction} to your message in conversation {call}" : "來賓 {guest} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "{user} mentioned you in a private conversation" : "{user} 在私人對話中提及您", + "{user} mentioned group {group} in conversation {call}" : "{user} 在對話 {call} 中提及群組 {group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在對話 {call} 中提及團隊 {team}", + "{user} mentioned everyone in conversation {call}" : "{user} 在對話 {call} 中提及所有人", + "{user} mentioned you in conversation {call}" : "{user} 在對話 {call} 中提及您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及群組 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及團隊 {team}", + "A deleted user mentioned everyone in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及所有人", + "A deleted user mentioned you in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及群組 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及團隊 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及您", + "A guest mentioned group {group} in conversation {call}" : "一位訪客在對話 {call} 中提及群組 {group}", + "A guest mentioned team {team} in conversation {call}" : "一位訪客在對話 {call} 中提及團隊 {team}", + "A guest mentioned everyone in conversation {call}" : "一位訪客在對話 {call} 中提及所有人", + "A guest mentioned you in conversation {call}" : "一位訪客在對話 {call} 中提及您", + "View message" : "檢視訊息", + "Dismiss reminder" : "撤銷提醒", + "View chat" : "檢視聊天", + "{user} invited you to a group conversation: {call}" : "{user} 邀請您參加群組對話:{call}", + "Join call" : "加入通話", + "Answer call" : "接聽通話", + "{user} would like to talk with you" : "{user} 想與您交談", + "Call back" : "回電", + "You missed a call from {user}" : "您錯過了 {user} 的來電", + "Accept call" : "接聽通話", + "Incoming phone call from {call}" : "{call} 的來電", + "You missed a phone call from {call}" : "您錯過了 {call} 的來電", + "A group call has started in {call}" : "{call} 中的群組通話已開始", + "You missed a group call in {call}" : "您錯過了 {call} 中的群組通話", + "{email} is requesting the password to access {file}" : "{email} 請求密碼以存取 {file}", + "{email} tried to request the password to access {file}" : "{email} 嘗試請求密碼以存取 {file}", + "Someone is requesting the password to access {file}" : "有人請求密碼以存取 {file}", + "Someone tried to request the password to access {file}" : "有人嘗試請求密碼以存取 {file}", + "Open settings" : "開啟設定", + "Hosted signaling server added" : "添加了架設好的訊號伺服器", + "The hosted signaling server is now configured and will be used." : "已配置好託管的信號伺服器並將被使用。", + "Hosted signaling server removed" : "已移除架設好的訊號伺服器", + "The hosted signaling server was removed and will not be used anymore." : "託管的信號伺服器已刪除,將不再使用。", + "Hosted signaling server changed" : "已更新架設好的訊號伺服器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "託管的信令伺服器帳戶已將狀態從 “ {oldstatus}” 更改為 “{newstatus}”。", + "pending" : "待定", + "active" : "啟用", + "expired" : "已過期", + "blocked" : "被封鎖", + "error" : "錯誤", + "The certificate of {host} expires in {days} days" : "{host} 的證書將在 {days} 天後過期", + "The certificate of {host} expired" : "{host} 的證書已過期", + "Contact via Talk" : "透過 Talk 聯絡", + "Open Talk" : "開啟 Talk", + "Default" : "默認", + "Send messages, create threads, and start voice and video calls." : "傳送訊息、建立討論串、開始音訊與視訊通話。", + "Presentation" : "簡報", + "Voice room" : "語音聊天室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通話,非常適合閒聊或臨時開會。", + "Webinar" : "網絡研討會", + "Conversations" : "對話", + "Messages in current conversation" : "目前對話中的訊息", + "{user}" : "{user}", + "Messages" : "訊息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "其他對話中的訊息", + "One-to-one rooms always need to show the other users avatar" : "一對一的房間一律需要顯示其他用戶的虛擬化身", + "Invalid emoji character" : "無效的 emoji 字元", + "Invalid background color" : "無效的背景顏色", + "Avatar image is not square" : "虛擬化身圖像不是正方形", + "Room {number}" : "聊天室 {number}", + "Other" : "其它", + "Failed to request trial because the trial server is unreachable. Please try again later." : "由於聯繫不到試用伺服器,因此無法請求試用。請稍後再試。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此安裝的身分驗證存在問題。可能無法從外部訪問以驗證其URL。", + "Something unexpected happened." : "發生了意外情況。", + "The URL is invalid." : "URL 無效。", + "An HTTPS URL is required." : "需要 HTTPS URL。", + "The email address is invalid." : "電郵地址無效。", + "The language is invalid." : "語言無效。", + "The country is invalid." : "國家無效。", + "There is a problem with the request of the trial. Please check your logs for further information." : "試用請求有問題。請檢查您的記錄以獲取更多資訊。", + "Too many requests are send from your servers address. Please try again later." : "您的伺服器地址發送了太多請求。請稍後再試。", + "There is already a trial registered for this Nextcloud instance." : "此 Nextcloud 實例已經有一個試用用戶註冊。", + "Something unexpected happened. Please try again later." : "發生了意外情況。請稍後再試。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "由於試用伺服器的行為不正確,因此無法請求試用。請稍後再試。", + "Trial requested but failed to get account information. Please check back later." : "已請求試用,但無法獲取帳戶信息。請稍後再試。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此請求的身分驗證存在問題。也許無法從外部聯繫它以驗證其URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "由於試用伺服器的行為異常,因此無法擷取帳戶資訊。請稍後再試。", + "There is a problem with fetching the account information. Please check your logs for further information." : "提取帳戶資訊時出現問題。請檢查您的日誌以獲取更多資訊。", + "There is no such account registered." : "沒有這樣的帳戶註冊。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "由於無法連接試用伺服器,因此無法擷取帳戶資訊。請稍後再試。", + "Deleting the hosted signaling server account failed. Please check back later." : "刪除託管的信令伺服器帳戶失敗。請稍後再試。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "由於試用伺服器的行為異常,因此無法刪除帳戶。請稍後再試。", + "There is a problem with deleting the account. Please check your logs for further information." : "刪除帳戶存在問題。請檢查系統日誌以獲取更多信息。", + "Too many requests are sent from your servers address. Please try again later." : "您的伺服器地址發送了太多請求。請稍後再試。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "由於無法訪問試用伺服器,因此無法刪除帳戶。請稍後再檢查。", + "Note to self" : "給自己的備註", + "A place for your private notes, thoughts and ideas" : "一個用於儲存您的私人筆記、思考和想法的地方。", + "Transcript is AI generated and may contain mistakes" : "轉錄為人工智慧產生,可能有錯", + "Summary is AI generated and may contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Let's get started!" : "我們開始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是一個安全的自托管通訊平台,與 Nextcloud 生態系統無縫集成。\n\n#### Nextcloud Talk 的重要功能:\n\n* 在私人與群組聊天中傳送訊息\n* 音訊與視訊通話\n* 檔案分享以及其他 Nextcloud 應用程式的整合\n* 可自訂的對話設定、審核與隱私控制\n* 網頁、桌面與行動裝置(iOS 與 Android)\n* 私密且安全的通訊\n\n如需了解更多信息,請參見[用戶說明書] (https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 歡迎使用 Nextcloud Talk\n\nNextcloud Talk 是與 Nextcloud 整合的私密且功能強大的訊息應用程式。以私人或群組對話方式聊天、透過語音與視訊通話進行協作、舉辦網路研討會與活動、自訂您的對話等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 格式化文字以建立多采多姿的訊息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 語法來格式化您的訊息。例如,套用**粗體**或*義式斜體*格式,或「將文字突顯為程式碼」。您甚至可以建立表格,並在文字中加入標題。\n\n需要修正錯字或變更格式嗎?按一下訊息功能表中的「編輯訊息」即可編輯您的訊息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 新增附件與連結\n\n使用「+」按鈕從 Nextcloud Hub 附加檔案。從檔案與各種 Nextcloud 應用程式分享項目。有些應用程式甚至支援互動小工具,例如 Text 應用程式。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 讓對話流暢:提及用戶、回應訊息等\n\n您可以使用 %s 來提及對話中的每個人,或是輸入「@」並從清單中選出特定參與者的名字來提及他們。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回覆訊息、將訊息轉寄給其他聊天室與夥伴,或複製訊息內容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智慧型挑選程式做更多\n\n只要輸入「/」或前往「+」功能表,即可開啟智慧型挑選程式,在這裡您可以將各種內容附加到訊息中。您可以設定智慧型挑選程式,讓它能夠加入 Nextcloud 應用程式、GIF、地圖位置、AI 產生的內容等項目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理對話設定\n\n在對話功能表中,您可以存取各種設定來管理您的對話,例如\n* 編輯對話資訊\n* 管理通知\n* 套用許多審核規則\n* 設定存取權限與安全性\n* 啟用機器人\n* 以及更多!", + "Andorra" : "安道爾", + "United Arab Emirates" : "阿聯酋", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布達", + "Anguilla" : "安圭拉", + "Albania" : "阿爾巴尼亞", + "Armenia" : "亞美尼亞", + "Angola" : "安哥拉", + "Antarctica" : "南極洲", + "Argentina" : "阿根廷", + "American Samoa" : "美屬薩摩亞", + "Austria" : "奧地利", + "Australia" : "澳洲", + "Aruba" : "阿魯巴", + "Åland Islands" : "奧蘭", + "Azerbaijan" : "阿塞拜疆", + "Bosnia and Herzegovina" : "波斯尼亞及黑塞哥維那", + "Barbados" : "巴巴多斯", + "Bangladesh" : "孟加拉", + "Belgium" : "比利時", + "Burkina Faso" : "布基納法索", + "Bulgaria" : "保加利亞", + "Bahrain" : "巴林", + "Burundi" : "布隆迪", + "Benin" : "貝寧", + "Saint Barthélemy" : "聖巴瑟米", + "Bermuda" : "百慕達", + "Brunei Darussalam" : "汶萊", + "Bolivia, Plurinational State of" : "玻利維亞", + "Bonaire, Sint Eustatius and Saba" : "荷蘭加勒比區", + "Brazil" : "巴西", + "Bahamas" : "巴哈馬", + "Bhutan" : "不丹", + "Bouvet Island" : "布韋島", + "Botswana" : "博茨瓦納", + "Belarus" : "白俄羅斯", + "Belize" : "伯利茲", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科科斯(基林)群島", + "Congo, the Democratic Republic of the" : "剛果民主共和國", + "Central African Republic" : "中非共和國", + "Congo" : "剛果共和國", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "科特迪瓦", + "Cook Islands" : "庫克群島", + "Chile" : "智利", + "Cameroon" : "喀麥隆", + "China" : "中國大陸", + "Colombia" : "哥倫比亞", + "Costa Rica" : "哥斯達黎加", + "Cuba" : "古巴", + "Cabo Verde" : "佛得角", + "Curaçao" : "古拉索", + "Christmas Island" : "聖誕島領地", + "Cyprus" : "塞浦路斯", + "Czechia" : "捷克", + "Germany" : "德國", + "Djibouti" : "吉布提", + "Denmark" : "丹麥", + "Dominica" : "多米尼克", + "Dominican Republic" : "多明尼加共和國", + "Algeria" : "阿爾及利亞", + "Ecuador" : "厄瓜多爾", + "Estonia" : "愛沙尼亞", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄立特里亞", + "Spain" : "西班牙", + "Ethiopia" : "埃塞俄比亞", + "Finland" : "芬蘭", + "Fiji" : "斐濟", + "Falkland Islands (Malvinas)" : "福克蘭群島", + "Micronesia, Federated States of" : "密克羅尼西亞聯邦", + "Faroe Islands" : "法羅群島", + "France" : "法國", + "Gabon" : "加蓬", + "United Kingdom of Great Britain and Northern Ireland" : "英國", + "Grenada" : "格林納達", + "Georgia" : "格魯吉亞", + "French Guiana" : "法屬圭亞那", + "Guernsey" : "根西島", + "Ghana" : "迦納", + "Gibraltar" : "直布羅陀", + "Greenland" : "格陵蘭", + "Gambia" : "岡比亞", + "Guinea" : "幾內亞", + "Guadeloupe" : "瓜地洛普", + "Equatorial Guinea" : "赤道幾內亞", + "Greece" : "希臘", + "South Georgia and the South Sandwich Islands" : "南喬治亞和南桑威奇群島", + "Guatemala" : "危地馬拉", + "Guam" : "關島", + "Guinea-Bissau" : "幾內亞比紹", + "Guyana" : "圭亞那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德島和麥克唐納群島", + "Honduras" : "洪都拉斯", + "Croatia" : "克羅地亞", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印尼", + "Ireland" : "愛爾蘭", + "Israel" : "以色列", + "Isle of Man" : "萌島", + "India" : "印度", + "British Indian Ocean Territory" : "英屬印度洋領地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗", + "Iceland" : "冰島", + "Italy" : "意大利", + "Jersey" : "澤西島", + "Jamaica" : "牙買加", + "Jordan" : "約旦", + "Japan" : "日本", + "Kenya" : "肯亞", + "Kyrgyzstan" : "吉爾吉斯斯坦", + "Cambodia" : "柬埔寨", + "Kiribati" : "基里巴斯", + "Comoros" : "科摩羅", + "Saint Kitts and Nevis" : "聖吉斯納域斯", + "Korea, Democratic People's Republic of" : "北韓", + "Korea, Republic of" : "南韓", + "Kuwait" : "科威特", + "Cayman Islands" : "開曼群島", + "Kazakhstan" : "哈薩克", + "Lao People's Democratic Republic" : "老撾", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "聖露西亞", + "Liechtenstein" : "列支敦士登", + "Sri Lanka" : "斯里蘭卡", + "Liberia" : "利比里亞", + "Lesotho" : "萊索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "盧森堡", + "Latvia" : "拉脫維亞", + "Libya" : "利比亞", + "Morocco" : "摩洛哥", + "Monaco" : "摩納哥", + "Moldova, Republic of" : "摩爾多瓦共和國", + "Montenegro" : "黑山", + "Saint Martin (French part)" : "法屬聖馬丁島", + "Madagascar" : "馬達加斯加", + "Marshall Islands" : "馬紹爾群島", + "North Macedonia" : "北馬其頓", + "Mali" : "馬里", + "Myanmar" : "緬甸", + "Mongolia" : "蒙古", + "Macao" : "澳門", + "Northern Mariana Islands" : "北馬利安納群島", + "Martinique" : "馬丁尼克", + "Mauritania" : "毛里塔尼亞", + "Montserrat" : "蒙特塞拉特", + "Malta" : "馬爾他", + "Mauritius" : "毛里求斯", + "Maldives" : "馬爾代夫", + "Malawi" : "馬拉維", + "Mexico" : "墨西哥", + "Malaysia" : "馬來西亞", + "Mozambique" : "莫桑比克", + "Namibia" : "納米比亞", + "New Caledonia" : "新喀里多尼亞", + "Niger" : "尼日爾", + "Norfolk Island" : "諾福克島", + "Nigeria" : "尼日利亞", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷蘭", + "Norway" : "挪威", + "Nepal" : "尼泊爾", + "Nauru" : "瑙魯", + "Niue" : "紐埃島", + "New Zealand" : "紐西蘭", + "Oman" : "阿曼", + "Panama" : "巴拿馬", + "Peru" : "秘魯", + "French Polynesia" : "法屬波利尼西亞", + "Papua New Guinea" : "巴布亞新幾內亞", + "Philippines" : "菲律賓", + "Pakistan" : "巴基斯坦", + "Poland" : "波蘭", + "Saint Pierre and Miquelon" : "聖皮埃與密克隆群島", + "Pitcairn" : "皮特肯群島", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕勞", + "Paraguay" : "巴拉圭", + "Qatar" : "卡塔爾", + "Réunion" : "留尼旺島", + "Romania" : "羅馬尼亞", + "Serbia" : "塞爾維亞", + "Russian Federation" : "俄羅斯", + "Rwanda" : "盧旺達", + "Saudi Arabia" : "沙地阿拉伯", + "Solomon Islands" : "所羅門群島", + "Seychelles" : "塞舌爾", + "Sudan" : "蘇丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "聖赫勒拿、阿森松和特里斯坦-達庫尼亞", + "Slovenia" : "斯洛文尼亞", + "Svalbard and Jan Mayen" : "斯瓦爾巴和揚馬延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "塞拉利昂", + "San Marino" : "聖馬力諾", + "Senegal" : "塞內加爾", + "Somalia" : "索馬里", + "Suriname" : "蘇利南", + "South Sudan" : "南蘇丹", + "Sao Tome and Principe" : "聖多美和普林西比", + "El Salvador" : "薩爾瓦多", + "Sint Maarten (Dutch part)" : "荷屬聖馬丁", + "Syrian Arab Republic" : "敘利亞", + "Eswatini" : "史瓦濟蘭王國", + "Turks and Caicos Islands" : "特克斯及凱科斯群島", + "Chad" : "乍得共和國", + "French Southern Territories" : "法屬南部和南極領地", + "Togo" : "多哥", + "Thailand" : "泰國", + "Tajikistan" : "塔吉克斯坦", + "Tokelau" : "托克勞", + "Timor-Leste" : "東帝汶", + "Turkmenistan" : "土庫曼", + "Tunisia" : "突尼西亞", + "Tonga" : "湯加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "千里達及多巴哥", + "Tuvalu" : "圖瓦盧", + "Taiwan, Province of China" : "台灣,中華民國", + "Tanzania, United Republic of" : "坦桑尼亞", + "Ukraine" : "烏克蘭", + "Uganda" : "烏干達", + "United States Minor Outlying Islands" : "美國本土外小島嶼", + "United States of America" : "美國", + "Uruguay" : "烏拉圭", + "Uzbekistan" : "烏茲別克", + "Holy See" : "梵蒂岡", + "Saint Vincent and the Grenadines" : "聖文森特和格林納丁斯", + "Venezuela, Bolivarian Republic of" : "委內瑞拉", + "Virgin Islands, British" : "英屬處女群島", + "Virgin Islands, U.S." : "美屬處女群島", + "Viet Nam" : "越南", + "Vanuatu" : "瓦努阿圖", + "Wallis and Futuna" : "瓦利斯和富圖那", + "Samoa" : "薩摩亞", + "Yemen" : "也門", + "Mayotte" : "馬約特", + "South Africa" : "南非", + "Zambia" : "贊比亞", + "Zimbabwe" : "津巴布韋", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "無法檢查 WASM 載入支援。請手動檢查您的網路伺服器是否可服務 `.wasm` 檔案。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的伺服器並未正確的設定,因此無法傳遞 `.wasm` 的檔案。這通常是因為 Nginx 的設定問題所導致。對於背景模糊來說,需要一些調整才能一併傳遞 `.wasm` 的檔案。請檢查您的 Nginx 設定,和 Nextcloud 說明書中提到的建議設定。", + "Talk configuration values" : "Talk 設定值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "僅系統 cron 支援強制通話持續時間。請啟用系統 cron 或刪除 `max_call_duration` 配置。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "由於技術限制,較小的 “max_call_duration” 值(目前設定為 %d)不可強制執行。後台作業每 5 分鐘執行一次,因此使用風險自負。", + "Federation" : "聯盟", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "強烈建議在啟用聯盟 Talk 時設定「memcache.locking」。", + "High-performance backend" : "高性能後端", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未設定高效能後端 - 在沒有高效能後端的情況下執行 Nextcloud Talk 只適用於非常小規模的通話(最多 2-3 名參與者)。請設定高效能後端,以確保有多位參與者的通話能順暢運作。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高效能後端的「conversation_cluster」執行模式已棄用,在即將推出的版本中將不再支援。高效能後端現在支援真正的叢集,應該改用真正的叢集。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定義多個高效能後端已被淘汰,在即將推出的版本中將不再支援。取而代之的是在 Talk 設定中設定負載平衡器與叢集訊號伺服器。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所使用演算法 %1$s 的已儲存公鑰與儲存的私鑰不相符。請執行 %2$s 以修正問題。", + "High-performance backend not configured correctly. Run %s for details." : "未正確設定高效能後端。請執行 %s 以取得更多詳細資訊。", + "High-performance backend not configured correctly" : "未正確設定高效能後端", + "Error: Cannot connect to server" : "錯誤:無法連接到伺服器", + "Error: Server did not respond with proper JSON" : "錯誤:伺服器未使用正確的 JSON 回應", + "Error: Certificate expired" : "錯誤︰證書已過期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器和 High-performance 後端伺服器的系統時間不同步。請確保兩個伺服器都連接到時間伺服器,或手動同步它們的時間。", + "Could not get version" : "無法獲取版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "錯誤:運行版本:{version}; 要與此版本的 Talk 兼容,伺服器需要更新", + "Error: Server responded with: {error}" : "錯誤:伺服器回應:{error}", + "Error: Unknown error occurred" : "錯誤:發生不詳錯誤", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:正在執行的版本:{version};伺服器不支援此 Talk 版本的所有功能,缺少的功能:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "強烈建議在使用高效能後端執行 Nextcloud Talk 時設定記憶體快取。", + "Client Push" : "客戶端推送", + "Client Push is installed, this improves the punctuality of Talk notifications." : "已安裝客戶端推送,這會改善 Talk 通知的及時性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} 未安裝。這可能會導致 Talk 通知延遲。", + "Recording backend" : "記録後端系統中", + "Using the recording backend requires a High-performance backend." : "使用錄製後端需要高效能後端。", + "No recording backend configured" : "未設定錄製後端", + "SIP configuration" : "SIP 配置", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高效能後端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 電話號碼不得以 + 或 0 開頭。請移除或更新以下號碼:\n{list}", + "No SIP backend configured" : "未設定 SIP 後端系統", + "Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式", + "Conversation not found" : "未找到對話", + "Path is already shared with this conversation" : "已與此對話分享路徑", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 進行聊天、視像和音頻會議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 的聊天、視頻和音頻會議\n\n* 💬 **聊天** Nextcloud Talk 提供簡單的文本聊天功能,允許您從 Nextcloud Files 應用程式或近端裝置分享或上傳檔案,並提及其他參與者。\n* 👥 **私人、小組、公開和密碼保護的通話!** 邀請某人、整個小組或發送公開鏈接來邀請參加通話。\n* 🌐 **聯邦式聊天** 與其他 Nextcloud 用戶在他們的服務器上聊天。\n* 💻 **屏幕共享!** 與通話的參與者共享您的屏幕。\n* 🚀 **與其他 Nextcloud 應用集成**,如 Files、Calendar、User status、Dashboard、Flow、Maps、Smart picker、Contacts、Deck 等,還有更多。\n* 🌉 **與其他聊天解決方案同步** 通過 [Matterbridge](https://github.com/42wim/matterbridge/) 在 Talk 中集成,您可以輕鬆將許多其他聊天解決方案與 Nextcloud Talk 進行同步,反之亦然。", + "Leave call" : "離開通話", + "Navigating away from the page will leave the call in {conversation}" : "離開頁面導航將使通話保留在 {conversation} 中", + "Stay in call" : "保持通話", + "Error occurred when getting the conversation information" : "取得對話資訊時發生錯誤", + "Discuss this file" : "討論此檔案", + "Share this file with others to discuss it" : "與他人分享此檔案以進行討論", + "Share this file" : "分享此檔案", + "Join conversation" : "加入對話", + "This conversation is password-protected." : "此對話受密碼保護。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "您的 IP 多次嘗試密碼無效,下一次登入將會被延時 30 秒。", + "The password is wrong. Try again." : "密碼錯誤,請重試", + "Password" : "密碼", + "Submit" : "遞交", + "Error requesting the password." : "索取密碼時出錯。", + "Request password" : "索取密碼", + "This conversation has ended" : "對話已結束", + "Error occurred when joining the conversation" : "加入會話時發生了錯誤", + "Close Talk sidebar" : "關閉 Talk 側邊攔", + "Open Talk sidebar" : "開啟 Talk 側邊攔", + "Everyone" : "所有人", + "Users and moderators" : "用戶和主持人", + "Moderators only" : "僅限主持人", + "Disable calls" : "停用通話", + "Save changes" : "儲存變更", + "Saving …" : "儲存中 ...", + "Saved!" : "已儲存!", + "Limit to groups" : "限制給特定群組", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "選擇一或多個群組後,只有所選群組中的人才能參與對話。", + "Guests can still join public conversations." : "來賓仍可以加入公共對話。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "不再使用 Talk 的用戶仍將被列為以前的對話的參與者。他們的聊天訊息將被保留。", + "Limit using Talk" : "使用 Talk 的限制", + "Limit creating a public and group conversation" : "創建公開和群組對話的限制", + "Limit creating conversations" : "創建對話的限制", + "Limit starting a call" : "限制撥打通話", + "Limit starting calls" : "限制撥打通話", + "When a call has started, everyone with access to the conversation can join the call." : "通話開始後,有權存取對話的每個人都可以加入通話。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上安裝了以下機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上並未安裝機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "為主持人鎖定", + "Enabled" : "啟用", + "Disabled" : "停用", + "Bots settings" : "機器人設定", + "State" : "狀態", + "Name" : "名稱", + "Last error" : "上次錯誤", + "Total errors count" : "總錯誤數量", + "Find more bots" : "尋找更多機器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}分享設定頁面{linkedin}設定信任伺服器。", + "Beta" : "Beta 測試版", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "聯盟聊天與通話已經可以運作。附件處理將在未來的版本中推出。", + "Enable Federation in Talk app" : "啟用 Talk 應用程式中的聯邦功能", + "Permissions" : "權限", + "Allow users to be invited to federated conversations" : "允許邀請用戶加入聯合對話", + "Allow users to invite federated users into conversation" : "允許用戶邀請聯合用戶加入對話", + "Only allow to federate with trusted servers" : "僅允許與信任的伺服器聯合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "選擇一或多個群組後,只有所選群組中的人才能邀請聯合用戶到對話中。", + "Groups allowed to invite federated users" : "允許邀請聯合用戶的群組", + "Select groups …" : "選取群組 …", + "All messages" : "全部消息", + "@-mentions only" : "僅被 @提及的消息", + "Off" : "關閉", + "General settings" : "一般設定", + "Default notification settings" : "預設通告設定", + "Default group notification" : "預設群組通告", + "Default group notification for new groups" : "新群組的默認群組通告", + "Integration into other apps" : "整合=到其他應用程序", + "Allow conversations on files" : "允許檔案對話", + "Allow conversations on public shares for files" : "允許公共分享檔案對話", + "End-to-end encrypted calls" : "端到端加密通話", + "Enable encryption" : "啟用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已設定 SIP 橋接的端到端加密通話需要較新版本的高效能後端與 SIP 橋接器。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "行動裝置客戶端目前不支援端到端加密通話。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "通過單擊上面的按鈕,表格中的資訊將發送到 Struktur AG 的伺服器。您可以在{linkstart} spreed.eu {linkend}上找到更多資訊。", + "Pending" : "擱置中", + "Error" : "錯誤", + "Blocked" : "已封鎖", + "Active" : "啟動", + "Expired" : "已過期", + "Never" : "從不", + "The trial could not be requested. Please try again later." : "無法請求試用版。請稍後再試。", + "The account could not be deleted. Please try again later." : "無法刪除該帳戶。請稍後再試。", + "Hosted High-performance backend" : "託管的高效能後端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我們的合作夥伴 Struktur AG 提供信令伺服器的託管服務。您只需要填寫下面的表格,您的 Nextcloud 就會為您申請該服務。為您設置伺服器後,將自動填寫憑據。這將覆蓋現有的信令伺服器設置。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "如果您的高性能後端系統帳戶包括 STUN 和/或 TURN 功能,設定將被相應更新。", + "URL of this Nextcloud instance" : "此Nextcloud的 URL", + "Full name of the user requesting the trial" : "請求試用的用戶的全名", + "Email of the user" : "用戶電郵地址", + "Language" : "語言", + "Country" : "國家", + "Request signaling server trial" : "請求信號伺服器試用", + "You can see the current status of your hosted signaling server in the following table." : "您可以在下表中查看託管的信令伺服器的目前狀態。", + "Status" : "狀態", + "Created at" : "建立於", + "Expires at" : "有效期至", + "Limits" : "限制", + "STUN included" : "包括 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包括 TURN", + "Delete the signaling server account" : "刪除 signaling 伺服器帳戶", + "_%n user_::_%n users_" : ["%n 用戶"], + "Installed version: {version}" : "安裝版本: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安裝 Matterbridge 將 Nextcloud Talk 連結到其他服務,請訪問其 {linkstart1}GitHub頁面{linkend} 以了解更多詳細信息。下載和安裝該應用程式可能需要一段時間。如果超時,請從 {linkstart2}Nextcloud App Store{linkend} 人手安裝。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary 的權限不正確。請確保 Matterbridge binary 歸正確的用戶所有並且可以執行。可以在 \"/…/nextcloud/apps/talk_matterbridge/bin/\" 中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到或無法執行 Matterbridge 可執行代碼。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "您也可以通過人手設置 Matterbridge 可執行代碼的路徑。詳情請參閱 {linkstart} Matterbridge 整合指南{linkend}。", + "Downloading …" : "下載中…", + "Install Talk Matterbridge" : "安裝 Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "安裝 Matterbridge 應用程式時發生錯誤", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安裝 Talk Matterbridge 時發生錯誤。請手動安裝。", + "Failed to execute Matterbridge binary." : "無法執行 Matterbridge。", + "Matterbridge integration" : "Matterbridge 整合", + "Enable Matterbridge integration" : "啟用 Matterbridge 整合", + "Status: Checking connection" : "狀態:正在檢查連接", + "OK: Running version: {version}" : "OK:運行版本:{version}", + "Error: Server seems to be a Signaling server" : "錯誤:伺服器似乎是 Signaling 伺服器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器和 Recording 後端伺服器的系統時間不同步。請確保兩個伺服器都連接到時間伺服器,或手動同步它們的時間。", + "Recording backend URL" : "錄製後端系統 URL", + "Validate SSL certificate" : "驗證 SSL憑證", + "Delete this server" : "刪除此伺服器", + "Test this server" : "測試此伺服器", + "Disabled for all calls" : "對所有通話停用", + "Enabled for all calls" : "對所有通話啟用", + "Configurable on conversation level by moderators" : "可由主持人在對話層級配置", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP 設定「upload_max_filesize」或「post_max_size」僅允許上傳最大 {maxUpload} 的檔案。", + "Recording backend settings saved" : "已保存後端系統記録伺服器設定", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "主持人將被允許在對話級別啟用同意。 每位參與者在加入此對話中的每個通話之前都需要給予錄製同意。", + "The consent to be recorded will be required for each participant before joining every call." : "在每次通話之前,每位參與者都需要同意錄製。", + "The consent to be recorded is not required." : "並不需要獲得錄音同意。", + "Recording backend configuration is only possible with a High-performance backend." : "僅當使用高效能後端時才能設定錄製後端。", + "Add a new recording backend server" : "添加新後端系統記録伺服器", + "Shared secret" : "分享了密碼", + "Recording consent" : "錄製同意", + "Recording transcription" : "錄音轉錄", + "Automatically transcribe call recordings with a transcription provider" : "使用轉錄提供者自動轉錄通話錄音", + "Automatically summarize call recordings with transcription and summary providers" : "使用轉錄與摘要提供者自動總結通話錄音", + "SIP configuration saved!" : "已保存 SIP 配置!", + "SIP configuration is only possible with a High-performance backend." : "SIP 組態僅於有高效能後端時可用。", + "Enable SIP Dial-out option" : "啟用 SIP 撥出選項", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling 伺服器必須更新以支援 SIP 撥出功能。", + "Do not show SIP Dial-out caller number" : "不要顯示 SIP Dial-out 來電者號碼。", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名號碼應顯示為「未知號碼」或「隱藏號碼」給接聽者。", + "Dial-out number" : "Dial-out 電話號碼", + "E164 formatted number used as a fallback caller number for outgoing calls" : "以 E164 格式顯示的號碼用作外撥電話的備用來電號碼", + "Dial-out prefix" : "Dial-out 前綴", + "Prefix to configured user number for outgoing calls (default is `+`)" : "外撥電話時,配置用戶號碼的前綴(默認為 `+`)", + "Restrict SIP configuration" : "限制SIP配置", + "Enable SIP configuration" : "啟用 SIP 配置", + "Only users of the following groups can enable SIP in conversations they moderate" : "只有以下群組的用戶才能在他們主持的對話中啟用SIP", + "Phone number (Country)" : "電話號碼(國家)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "此資訊通過邀請電子郵件發送,並在邊欄中顯示給所有參與者。", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 後端系統 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用特點", + "Error: Websocket connection failed" : "錯誤:Websocket 連接失敗", + "Error code" : "錯誤代碼", + "Error message" : "錯誤訊息", + "Error: Websocket connection failed. Check browser console" : "錯誤:Websocket 連接失敗。請檢查瀏覽器主控台", + "High-performance backend URL" : "高性能後端 URL", + "Missing High-performance backend warning hidden" : "隱藏缺少高效能後端的警告", + "High-performance backend settings saved" : "高性能後端設定已保存", + "Nextcloud Talk setup not complete" : "未完成 Nextcloud Talk 設定", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "請注意,在沒有高效能後端的情況下,如果通話有 2 位以上的參與者,參與者很可能會遇到連線問題,導致參與者的裝置負載過高。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安裝高效能後端,以確保有多位參與者的通話能順暢運作。", + "Nextcloud portal" : "Nextcloud 入口網站", + "Quick installation guide" : "快速安裝指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位參與者的通話和對話需要高效能後端。如果沒有後端,所有參與者都必須為其他參與者各自上傳自己的視訊,這極有可能造成連線問題,並對參與者的裝置造成高負載。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "使用 Nextcloud Talk 搭配高效能後端時,強烈建議設定分散式快取。", + "Add High-performance backend server" : "新增高效能後端伺服器", + "Warn about connectivity issues in calls with more than 2 participants" : "在參與者超過兩人的通話中發出連接問題的警告", + "STUN server URL" : "STUN 伺服器 URL", + "The server address is invalid" : "伺服器地址無效", + "STUN settings saved" : "STUN 設定已保存", + "STUN servers" : "STUN 伺服器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 伺服器用於確定路由器後面的參與者的公共 IP 地址。", + "Add a new STUN server" : "添加新 STUN 伺服器", + "{schema} scheme must be used with a domain" : "{schema} 方案必須與域名一起使用", + "{option1} and {option2}" : "{option1} 和 {option2}", + "{option} only" : "僅 {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN 伺服器返回成功的 ICE 候選者", + "Error: No working ICE candidates returned by the TURN server" : "錯誤:TURN 伺服器未返回任何有效的 ICE 候選者", + "Testing whether the TURN server returns ICE candidates" : "測試 TURN 伺服器是否返回 ICE 候選者", + "TURN server schemes" : "TURN 伺服器方案", + "TURN server URL" : "TURN 伺服器 URL", + "TURN server secret" : "TURN 伺服器密鑰", + "TURN server protocols" : "TURN 伺服器協定", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 伺服器用於代理(proxy)來自防火牆後參與者的流量。如果個別參與者無法連接到其他參與者,則很可能需要 TURN 伺服器。有關設置說明,請參見{linkstart}此說明書{linkend}。", + "TURN settings saved" : "TURN 設定已保存", + "TURN servers" : "TURN 伺服器", + "Add a new TURN server" : "添加新 TURN 伺服器", + "Failed" : "失敗了", + "OK" : "OK", + "Checking …" : "檢查中 ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗: 此瀏覽器中禁用或不支持 WebAssembly。請啟用 WebAssembly 或使用支持它的瀏覽器進行檢查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗:Web 伺服器沒有正確返回 ”.wasm” 和 “.tflite” 檔案。請查看 Talk 說明書中的“系統需求”部分。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK:Web 伺服器正確返回了 “.wasm” 和 “.tflite” 檔案。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "似乎 PHP 和 Apache 配置不兼容。 請注意,PHP 只能與 MPM_PREFORK 模塊一起使用,PHP-FPM 只能與 MPM_EVENT 模塊一起使用。", + "Web server setup checks" : "Web 伺服器設置檢查", + "Files required for virtual background can be loaded" : "可以加載虛擬背景所需的檔案", + "Federated user" : "聯盟用戶", + "Assign participants to rooms" : "將參與者分配到分組討論室", + "Configure breakout rooms" : "配置分組討論室", + "Number of breakout rooms" : "分組討論室數量︰", + "You can create from 1 to 20 breakout rooms." : "您可以建立 1 到 20 個分組討論室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自動分配參與者", + "Manually assign participants" : "人手分配參與者", + "Allow participants to choose" : "允許參與者選擇", + "Create rooms" : "創建分組討論室", + "Confirm" : "確認", + "Create breakout rooms" : "創建分組討論室", + "Reset" : "重設", + "Delete breakout rooms" : "刪除分組討論室", + "Room {roomNumber}" : "聊天室 {roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分組討論室和設置將會丟失", + "Cancel" : "取消", + "Unassigned participants" : "已取消分配參與者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "添加參與者 \"{user}\"", + "Now" : "現在", + "Invalid calendar selected" : "所選的日曆無效", + "Invalid start time selected" : "所選的開始時間無效", + "Invalid end time selected" : "所選的結束時間無效", + "Unknown error occurred" : "發生了不詳的錯誤", + "Sending no invitations" : "不發送邀請", + "{participant0} will receive an invitation" : "{participant0} 將會收到邀請", + "{participant0} and {participant1} will receive invitations" : "{participant0} 與 {participant1} 將會收到邀請", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 與 %n 個其他人將會收到邀請"], + "Invite {user}" : "邀請 {user}", + "Invite all users and emails in this conversation" : "邀請此對話中的所有使用者與電子郵件", + "Meeting created" : "創建了會議", + "Upcoming meetings" : "接下來的會議", + "Loading …" : "加載中 …", + "No upcoming meetings" : "沒有即將舉行的會議", + "Schedule a meeting" : "預先安排會議", + "Meeting title" : "會議標題", + "From" : "從", + "To" : "至", + "Calendar" : "日曆", + "Attendees" : "參與者", + "No other participants to send invitations to." : "沒有其他要傳送邀請函的參與者。", + "Add attendees" : "添加與會者", + "Save" : "儲存", + "Search participants" : "搜尋參與者", + "No results" : "沒有符合搜尋的項目", + "Done" : "完成", + "Disable live transcription" : "停用即時轉錄", + "Enable live transcription (generated by AI)" : "啟用即時轉錄(由人工智能產生)", + "Enable live transcription (Live transcriptions app is not installed)" : "啟用即時轉錄(未安裝即時轉錄應用程式)", + "Disable live translation" : "停用即時翻譯", + "Enable live translation (generated by AI)" : "啟用即時翻譯(由人工智能產生)", + "Original language" : "原先的語言", + "Live translations app is not installed" : "未安裝即時翻譯應用程式", + "Original language: {languageName}" : "原文語言:{languageName}", + "Translated language" : "翻譯語言", + "Translated language: {languageName}" : "翻譯語言:{languageName}", + "Raise hand" : "舉手", + "Raise hand (R)" : "舉手(R)", + "Lower hand" : "放下手", + "Lower hand (R)" : "放下手(R)", + "Exit full screen (F)" : "離開全螢幕(F)", + "Full screen (F)" : "全螢幕(F)", + "Speaker view" : "演講者視圖", + "Grid view" : "網格檢視", + "Error when trying to load the available live transcription languages" : "嘗試加載可用的即時轉錄語言時出錯", + "Failed to enable live transcription" : "無法啟用轉錄", + "Failed to enable live translations" : "無法啟用即時翻譯", + "Failed to disable live translations" : "無法停用即時翻譯", + "Recording consent is required" : "需要錄製同意", + "This conversation is read-only" : "對話是唯讀狀態", + "Conversation not found or not joined" : "找不到或未加入對話", + "Lobby is still active and you're not a moderator" : "等候室仍然活躍,你不是主持人", + "Connection failed" : "連線失敗", + "Reload" : "重新載入", + "{nickName} raised their hand." : "{nickName} 舉起了手。", + "A participant raised their hand." : "一位參與者舉起了手。", + "Collapse stripe" : "收合 stripe", + "Expand stripe" : "展開 stripe", + "Previous page of videos" : "視像的上一頁", + "Next page of videos" : "視像的下一頁", + "Connecting …" : "連線中...", + "Calling …" : "連接中...", + "Waiting for {user} to join the call" : "等待 {user} 加入通話...", + "Waiting for others to join the call …" : "等待其他人加入通話...", + "You can invite others in the participant tab of the sidebar" : "您可以在邊欄的“參與者”標籤中邀請其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在邊欄的“參與者”選項卡中邀請其他人,或分享此連結以邀請其他人!", + "Share this link to invite others!" : "分享此連結以邀請其他人!", + "Copy link" : "複製連結", + "You are not allowed to enable audio" : "你無權啟用音頻", + "No audio. Click to select device" : "沒有音頻。請點擊以選擇裝置", + "Mute audio" : "靜音", + "Mute audio (M)" : "靜音(M)", + "Unmute audio" : "取消靜音", + "Unmute audio (M)" : "取消靜音(M)", + "None" : "無", + "Select a microphone" : "選擇米高風", + "Select a speaker" : "選擇喇叭", + "Microphone settings" : "咪高風設定", + "Check devices" : "檢查裝置", + "Access to camera was denied" : "無法存取相機", + "Error while accessing camera: It is likely in use by another program" : "存取相機時出錯:另一個程序可能正在使用鏡頭", + "Error while accessing camera" : "存取相機時發生錯誤", + "You have been muted by a moderator" : "您已被主持人靜音", + "Hide presenter video" : "隱藏演講者視訊", + "You are not allowed to enable video" : "你無權啟用視像", + "No video. Click to select device" : "沒有視像。請點擊以選擇裝置", + "Disable video" : "停用視訊", + "Disable video (V)" : "停用視像(V)", + "Enable video" : "啟用視訊", + "Enable video (V)" : "啟用視訊(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像 - 首次啟用視像時,您的連接將短暫中斷", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像(V)- 首次啟用視像時,您的連接將短暫中斷", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像。首次啟用視像時,您的連接將短暫中斷", + "Select a video device" : "選擇視訊裝置", + "Show presenter" : "顯示演講者", + "You" : "您", + "Mute" : "無聲", + "Muted" : "靜音", + "Show screen" : "顯示螢幕", + "Stop following" : "停止關注", + "Connection could not be established …" : "無法建立連線 ...", + "Connection was lost and could not be re-established …" : "連接被切斷,無法重新建立 …", + "Connection could not be established. Trying again …" : "無法建立連接。 再試一次 …", + "Connection lost. Trying to reconnect …" : "連接切斷。 正在嘗試重新連接…", + "Connection problems …" : "連接問題 …", + "Collapse" : "收合", + "Expand" : "展開", + "You need to be logged in to upload files" : "您需要登入才能上傳檔案", + "Drop your files to upload" : "拖放您的檔案以上傳", + "Conversation messages" : "對話訊息", + "Scroll to bottom" : "滾動到底部", + "Post message" : "發表訊息", + "Federated conversation" : "聯合對話", + "Public conversation" : "公開對話", + "Favorite" : "我的最愛", + "Banned users" : "被封禁的用戶", + "Manage the list of banned users in this conversation." : "管理此對話中被封禁用戶的清單。", + "Manage bans" : "管理封禁", + "No banned users" : "沒有被封禁的用戶", + "Banned by:" : "封鎖者:", + "Date:" : "日期:", + "Note:" : "備註:", + "Hide details" : "隱藏細節", + "Show details" : "顯示細節", + "Unban" : "解除封禁", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日曆 ↗{linkend}中變更標題與描述。", + "Error while updating conversation name" : "更新對話名稱時發生錯誤", + "Error while updating conversation description" : "更新對話描述時發生錯誤", + "Enter a name for this conversation" : "輸入此對話名稱", + "Edit conversation name" : "編輯對話名稱", + "Edit conversation description" : "編輯對話描述", + "Enter a description for this conversation" : "輸入此對話的描述", + "Picture" : "圖片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此對話啟用以下機器人。請與您的管理員聯絡以在此伺服器上安裝更多機器人。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此伺服器上未安裝機器人。請與您的管理員聯絡以在此伺服器上安裝機器人。", + "Disable" : "停用", + "Enable" : "啟用", + "The bot is not available anymore" : "該機器人已不再提供服務", + "Breakout rooms" : "分組討論室", + "Manage breakout rooms" : "管理分組討論室", + "Set up breakout rooms for this conversation" : "在此對話中設置分組討論室", + "Please select a valid PNG or JPG file" : "請選擇有效的 PNG 或 JPG 檔案", + "Choose your conversation picture" : "選擇您的對話圖片", + "Choose" : "選擇", + "Error setting conversation picture" : "設定對話圖片時出錯", + "Could not set the conversation picture: {error}" : "無法設置對話圖片: {error}", + "Error cropping conversation picture" : "裁剪對話圖片時出錯", + "Error removing conversation picture" : "移除對話圖片時出錯", + "Set emoji as conversation picture" : "設定 emoji 為對話圖片", + "Set background color for conversation picture" : "設置對話圖片的背景顏色", + "Upload conversation picture" : "上傳對話圖片", + "Choose conversation picture from files" : "從檔案選擇對話圖片", + "Remove conversation picture" : "移除對話圖片", + "The file must be a PNG or JPG" : "該檔案必須是 PNG 或 JPG", + "Set picture" : "設置圖片", + "Default permissions modified for {conversationName}" : "為 {conversationName} 修改了默認權限", + "Could not modify default permissions for {conversationName}" : "無法更改 {conversationName} 的權限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "編輯此對話中參與者的默認權限。 這些設置不會影響主持人。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此部分修改權限時,之前分配給各個參與者的自訂權限都將丟失。", + "All permissions" : "所有權限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "參與者有權發起通話、加入通話、啟用音頻、視像和螢幕共享。", + "Participants can use all available features." : "參與者可以使用所有可用的功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在主持人手動授予他們權限之前,參與者只能加入對話,但不能啟用音頻、視頻或螢幕共享。", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "參與者在管理員手動授予額外權限前,只能使用受限的功能。", + "Advanced permissions" : "高級權限", + "Edit permissions" : "編輯權限", + "Conversation settings" : "對話設定", + "Basic Info" : "基本資料", + "Personal" : "個人", + "Moderation" : "主持", + "Setup overview" : "設置概覽", + "Live transcription" : "即時轉錄", + "Live transcriptions app is not installed" : "未安裝即時轉錄應用程式", + "Enable live transcription" : "啟用即時轉錄", + "Breakout Rooms" : "分組討論室", + "Matterbridge" : "Matterbridge", + "Bots" : "機器人", + "Danger zone" : "危險地帶", + "Archive conversation" : "封存對話", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "預設情況下,已封存的對話會從對話清單中隱藏。但是,當您搜尋對話名稱或存取已封存的對話清單時,它們仍會出現。", + "Do you really want to leave \"{displayName}\"?" : "您真的想要離開「{displayName}」嗎?", + "You can archive this conversation instead." : "您可以改為封存此對話。", + "Leave conversation" : "離開對話", + "You need to promote a new moderator before you can leave the conversation" : "在您離開對話之前您需要推舉一位新的主持人", + "Delete conversation" : "刪除對話", + "Do you really want to delete \"{displayName}\"?" : "您確定要刪除\"{displayName}\"嗎?", + "Error while deleting conversation" : "刪除對話時發生錯誤", + "Delete all chat messages" : "刪除所有聊天訊息", + "Do you really want to delete all messages in \"{displayName}\"?" : "您確定要刪除 \"{displayName}\" 內所有的訊息嗎?", + "Error while clearing chat history" : "清除聊天記錄時出錯", + "Be careful, these actions cannot be undone." : "請注意,這些操作無法還原。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "離開封閉式對話後,您需要收到邀請才能重新加入。 您可以隨時重新加入公開對話。", + "Permanently delete this conversation." : "永久刪除此對話。", + "Delete chat messages" : "刪除聊天訊息", + "Permanently delete all the messages in this conversation." : "永久刪除此對話中的所有訊息。", + "_%n hour_::_%n hours_" : ["%n 小時"], + "_%n day_::_%n days_" : ["%n 天"], + "_%n week_::_%n weeks_" : ["%n個星期"], + "Custom expiration time" : "自訂定到期日", + "Message expiration disabled" : "訊息過期功能已禁用", + "Message expiration set: {duration}" : "訊息過期設置:{duration}", + "Error when trying to set message expiration" : "嘗試設置訊息過期時出錯", + "Message expiration" : "訊息過期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "聊天訊息可能會在一定時間後過期。注意:在聊天中共享的檔案不會為所有者刪除,但將不再在對話中共享。", + "Set message expiration" : "設置訊息過期時間", + "Current message expiration" : "目前的訊息過期時間", + "Password copied to clipboard" : "密碼已複製到剪貼板", + "Password could not be copied" : "密碼無法複製", + "Guest access" : "訪客存取", + "Breakout rooms are not allowed in public conversations." : "公共對話中不允許分組討論。", + "Allow guests to join this conversation via link" : "允許訪客透過連結加入此對話", + "Password protection" : "密碼保護", + "This conversation is password-protected. Guests need password to join" : "此對話受到密碼保護。訪客需要密碼才能加入。", + "Password protection is needed for public conversations" : "公共對話需要密碼保護。", + "Set a password" : "設定密碼", + "Change password" : "更改密碼", + "Enter new password" : "輸入新密碼", + "Save password" : "保存密碼", + "Copy password" : "複製密碼", + "Guests are allowed to join this conversation via link" : "允許訪客透過連結加入此對話", + "Guests are not allowed to join this conversation" : "不允許訪客透過連結加入此對話", + "Resend invitations" : "重新傳送邀請", + "This conversation is open to both registered users and users created with the Guests app" : "此對話已同時對已註冊的用戶及使以訪客(Guests)應用程式建立的用戶開放", + "This conversation is open to registered users" : "此對話對已註冊的用戶開放", + "This conversation is limited to the current participants" : "此對話僅限目前參與者", + "You opened the conversation to both registered users and users created with the Guests app" : "您同時向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "Error occurred when opening or limiting the conversation" : "打開或限制對話時發生錯誤", + "Open conversation to registered users, showing it in search results" : "向註冊用戶開放對話並在搜索結果中顯示", + "Also open to users created with the Guests app" : "同時對以訪客(Guests)應用程式建立的用戶開放", + "Open conversation" : "開放對話", + "Set language spoken in calls" : "設置通話語言", + "Languages could not be loaded" : "無法加載語言", + "Loading languages …" : "正在載入語言 …", + "Invalid language" : "無效的語言", + "Default language (English)" : "默認語言 (英文)", + "Default live transcription language set" : "默認即時轉錄語言集", + "Live transcription language set: {languageName}" : "即時轉錄語言集: {languageName}", + "Error when trying to set live transcription language" : "嘗試設置即時轉錄語言時出錯", + "Start time: {date}" : "開始時間:{date}", + "Start time has been updated" : "開始時間已被更新。", + "Error occurred while updating start time" : "更新開始時間時發生錯誤", + "Enabling the lobby will remove non-moderators from the ongoing call." : "啟用等候室將從正在進行的通話中刪除非主持人。", + "Enable lobby, restricting the conversation to moderators" : "啟用等候室,將對話限制為主持人", + "Meeting start time" : "會議開始時間", + "Start time (optional)" : "開始時間(可選)", + "Import email participants" : "匯入電子郵件參與者", + "You can import a list of email participants from a CSV file." : "您可以從 CSV 檔案匯入電子郵件參與者清單。", + "Poll drafts" : "民意調查草稿", + "Browse poll drafts" : "瀏覽民意調查草稿", + "Error occurred when locking the conversation" : "上鎖會話時發生了錯誤", + "Error occurred when unlocking the conversation" : "解鎖會話時發生了錯誤", + "Lock conversation" : "鎖定對話", + "This will also terminate the ongoing call." : "這也將終止正在進行的通話。", + "Lock the conversation to prevent anyone to post messages or start calls" : "鎖上對話以防止任何人發佈消息或發起對話。", + "Edit" : "編輯", + "More information" : "更多資訊", + "Delete" : "刪除", + "Add new bridged channel to current conversation" : "添加新的橋接頻道至對話", + "unknown state" : "狀態不詳", + "running" : "運行中", + "not running, check Matterbridge log" : "未運行,請檢查Matterbridge日誌", + "not running" : "沒有運行", + "Bridge saved" : "Bridge 已保存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "您可以使用 Matterbridge 橋接來自各種即時消息傳遞系統的頻道。", + "More info on Matterbridge" : "有關 Matterbridge 的更多信息。", + "Messaging systems" : "訊息系統", + "Enable bridge" : "啟用 bridge", + "Show Matterbridge log" : "顯示 Matterbridge 記錄", + "Log content" : "記錄內容", + "Only moderators are allowed to mention @all" : "僅允許主持人提及 @all", + "All participants are allowed to mention @all" : "僅允所有參與者提及 @all", + "Participants are now allowed to mention @all." : "現在參與者可以提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 的權限已限於主持人。", + "Allow participants to mention @all" : "允許參與者提及 @all", + "Mention permissions" : "提及權限", + "Notifications" : "通告", + "Notify about calls in this conversation" : "在此對話中有電話時通知", + "Important conversation" : "重要對話", + "\"Do not disturb\" user status is ignored for important conversations" : "「勿擾」用戶狀態將在重要對話中略過。", + "Sensitive conversation" : "敏感對話", + "Message preview will be disabled in conversation list and notifications" : "對話清單和通知中的訊息預覽將被停用。", + "Recording consent is required for calls in this conversation" : "在此次對話中,需要獲得錄製同意", + "Recording consent is not required for calls in this conversation" : "在此次通話中,並不需要獲得錄製同意", + "Recording consent requirement was updated" : "錄製同意需求已更新", + "Error occurred while updating recording consent" : "更新錄製同意時發生錯誤", + "Recording Consent" : "錄製同意", + "Recording consent cannot be changed once a call or breakout session has started." : "通話或分組會議開始後,錄製同意就無法更改。", + "Require recording consent before joining call in this conversation" : "在此次對話中,需要在加入通話前給予錄製同意", + "Recording consent is required for all calls" : "所有通話都需要獲得錄製同意", + "SIP dial-in is now possible without PIN requirement" : "SIP 撥入現在無需密碼", + "SIP dial-in is now enabled" : "現在啟用了 SIP 撥入", + "SIP dial-in is now disabled" : "已停用 SIP 撥入功能", + "Error occurred when enabling SIP dial-in" : "啟用SIP撥入時發生錯誤", + "Error occurred when disabling SIP dial-in" : "停用SIP撥入時發生錯誤", + "Phone and SIP dial-in" : "電話及 SIP 撥入", + "Enable phone and SIP dial-in" : "啟用電話及 SIP 撥入", + "Allow to dial-in without a PIN" : "允許在沒有密碼的情況下撥入", + "Ongoing" : "持續進行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["已接受 %n 個人"], + "_%n person declined_::_%n people declined_" : ["已拒絕 %n 個人"], + "_and %n other attachment_::_and %n other attachments_" : ["及 %n 其他附件"], + "With {displayName}" : "與 {displayName}", + "In {conversation}" : "在 {conversation} 對話中", + "View attachment" : "檢視附件", + "Join" : "加入", + "View conversation" : "檢視對話", + "View event on Calendar" : "在日曆上檢視活動", + "Error while creating the conversation" : "建立會話時發生了錯誤", + "Hello, {displayName}" : "哈囉,{displayName}", + "Start meeting now" : "立刻開始會議", + "Give your meeting a title" : "為您的會議命名", + "Create and copy link" : "建立並複製連結", + "Create a new conversation" : "創建新對話", + "Join open conversations" : "加入公開對話", + "Call a phone number" : "撥打電話號碼", + "Scroll backward" : "向後捲動", + "Scroll forward" : "向前捲動", + "Schedule meetings" : "安排會議", + "You don't have any upcoming meetings" : "您沒有任何即將舉行的會議", + "Calendar events with a conversation link as the location are shown here" : "以對話連結作為地點的日曆活動會在此顯示", + "Open calendar" : "打開日曆", + "Unread mentions" : "未讀的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的訊息將顯示於此處。您可以透過輸入 @ 加上對方姓名來標記他人。", + "Upcoming reminders" : "即將到來的提醒", + "Message reminders" : "訊息提醒", + "Set a reminder on a message to be notified" : "在訊息上設定提醒以接收通知", + "Start a group conversation" : "開始群組對話", + "Create conversation" : "建立對話", + "Enter your name" : "輸入您的名稱", + "Submit name and join" : "遞交名稱並加入", + "Do you already have an account?" : "您已經有帳戶了嗎?", + "Log in" : "登入", + "Error while verifying uploaded file" : "驗證上傳的檔案時發生錯誤", + "Uploaded file is verified" : "已驗證上傳的檔案", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "內容格式為逗號分隔值 (CSV):
- 標題行為必填,且必須符合 \"名字\",\"電郵地址\"\"電郵地址\"
- 一個項目一行(例如 \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "參與者新增成功", + "Error while adding participants" : "新增參與者時發生錯誤", + "Import a file" : "導入檔案", + "Browse" : "瀏覽", + "Verifying uploaded file …" : "正在驗證已上傳的檔案 …", + "This might take a moment" : "這可能需要一段時間", + "Send invitations" : "傳送邀請", + "_%n invalid email_::_%n invalid emails_" : ["%n 個無效的電郵地址"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["有 %n 個電郵地址已導入或重複"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以傳送 %n 個邀請"], + "An error occurred while calling a phone number" : "撥打電話號碼時發生錯誤", + "Phone number could not be called: {error}" : "無法撥打電話號碼:{error}", + "Phone number could not be called" : "無法撥打電話號碼", + "Search participants or phone numbers" : "搜尋參與者或電話號碼", + "Creating the conversation …" : "正在建立對話 ...", + "Mark as read" : "標為已讀", + "Mark as unread" : "標為未讀", + "Remove from favorites" : "取消我的最愛", + "Add to favorites" : "加到我的最愛", + "Unarchive conversation" : "解除封存對話", + "Ignore \"Do not disturb\"" : "不用理會「請勿打擾」", + "You need to promote a new moderator before you can leave the conversation." : "在您離開對話之前您需要推舉一位新的主持人。", + "Conversation actions" : "對話操作", + "Notify about calls" : "通話通知", + "Hide message text" : "隱藏訊息文字", + "Pending invitations" : "擱置中的邀請", + "Join conversations from other servers" : "加入其他伺服器的對話", + "From {user} at {remoteServer}" : "來自 {remoteServer} 的 {user}", + "Decline invitation" : "婉拒邀請", + "Accept invitation" : "接受邀請", + "No pending invitations" : "沒有待處理的邀請", + "Home" : "主頁", + "Unread" : "未讀", + "Mentions" : "提及", + "Meetings" : "會議", + "Sort conversations" : "排序對話", + "By recent activity" : "按最近活動排序", + "Alphabetically" : "按字母順序", + "Do not group by type" : "請勿按類型分組", + "Show private ones first" : "先顯示私人訊息", + "Show group ones first" : "先顯示群組訊息", + "No followed threads" : "沒有追蹤的討論串", + "No matches found" : "找不到符合的項目", + "No conversations found" : "找不到對話", + "You have no archived conversations." : "您沒有已封存的對話。", + "Subscribe to an existing thread or start your own." : "訂閱既有的討論串或開啟您的討論串。", + "You have no unread mentions." : "您沒有未讀的提及。", + "You have no unread messages." : "您沒有未讀的訊息。", + "An error occurred while performing the search" : "搜尋時發生了錯誤", + "Conversation list" : "對話清單", + "Filter conversations by" : "按以下條件過濾對話", + "Unread messages" : "未讀郵件", + "Meeting conversations" : "會議對話", + "Clear filters" : "清除過濾器", + "New personal note" : "新個人筆記", + "SIP backend is not installed" : "未安裝 SIP 後端", + "Back to conversations" : "回到對話", + "Archived conversations" : "已封存的對話", + "Threads" : "討論串", + "Clear filter" : "清空過濾器", + "Show more threads" : "顯示更多討論串", + "App settings" : "應用程式設定", + "Users" : "用戶", + "Groups" : "群組", + "Teams" : "團隊", + "Federated users" : "聯盟用戶", + "New private conversation" : "新私人對話", + "Other sources" : "其他來源", + "Open conversations" : "開放對話", + "No search results" : "無搜尋結果", + "Users, groups and teams" : "用戶,群組和團隊", + "Users and groups" : "用戶和群組", + "Users and teams" : "用戶和團隊", + "Groups and teams" : "群組和團隊", + "New group conversation" : "新群組對話", + "The meeting will start soon" : "會議即將開始", + "This meeting is scheduled for {startTime}" : "此會議定於 {startTime} 開始", + "You are currently waiting in the lobby" : "您目前正在等候室等候。", + "Enable noise suppression" : "啟用降噪", + "Reduce background noises for better voice quality" : "減少背景噪音,以提升語音品質", + "Enable echo cancellation" : "啟用回音消除", + "Minimize echo effect from own surrounding" : "降低周圍環境造成的回音效果", + "Enable auto gain control" : "啟用自動增益控制", + "Dynamically adjust microphone volume for consistent level" : "動態調整咪高風音量,以保持音量一致", + "Select microphone" : "選擇米高風", + "No microphone available" : "沒有可用的米高風", + "Select speaker" : "選擇喇叭", + "No speaker available" : "沒有可用的喇叭", + "Select camera" : "選擇相機", + "No camera available" : "沒有可用的相機", + "Select a device" : "選取裝置", + "Playing …" : "正在播放 …", + "Test speakers" : "測試喇叭", + "Test" : "測試", + "Devices" : "裝置", + "Backgrounds" : "背景", + "No audio" : "沒有音訊", + "No camera" : "沒有相機", + "Display video as you will see it (mirrored)" : "顯示您將看到的視訊(鏡像)", + "Display video as others will see it" : "以其他人看到的方式顯示視訊", + "Calls are not supported in your browser" : "你使用的瀏覽器不支援通話", + "Access to microphone is only possible with HTTPS" : "只有使用 HTTPS 才能存取米高風", + "Access to microphone was denied" : "存取米高風被拒絕", + "Error while accessing microphone" : "存取米高風時發生錯誤", + "Access to camera is only possible with HTTPS" : "只有使用 HTTPS 才能存取相機", + "The call is being recorded." : "通話正在錄音中。", + "The call might be recorded." : "通話可能會被錄製。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "錄製可能包括您的聲音、視像和螢幕共享。在您加入通話之前,需要獲得您的同意。", + "Give consent to the recording of this call" : "請您同意錄製此通話", + "Show more info" : "顯示更多資訊", + "Audio is not available" : "音頻不可用", + "Video is not available" : "視像不可用", + "Start recording immediately with the call" : "通話後立刻開始錄音", + "Recording backend is not installed" : "未安裝錄製後端", + "Notify all participants about this call" : "通知所有參與者此通話", + "Apply settings" : "運用設定", + "Select virtual office background" : "選擇虛擬辦公室背景", + "Select virtual home background" : "選擇虛擬家居背景", + "Select virtual abstract background" : "選擇虛擬抽象背景", + "Select virtual beach background" : "選擇虛擬海灘背景", + "Select virtual park background" : "選擇虛擬公園背景", + "Select virtual theater background" : "選擇虛擬劇院背景", + "Select virtual library background" : "選擇虛擬圖書館背景", + "Select virtual space station background" : "選擇虛擬太空站背景", + "Error while uploading the file" : "上傳檔案時發生錯誤", + "Select a file" : "選擇檔案", + "Invalid path selected" : "所選的路徑無效", + "Select virtual background from file {fileName}" : "從檔案 {fileName} 選擇虛擬背景", + "Blur" : "模糊", + "Upload" : "上傳", + "Files" : "檔案", + "(editing)" : "(正在編輯)", + "(edited)" : "(已編輯)", + "The message has expired or has been deleted" : "訊息已過期或已被刪除。", + "Cancel quote" : "取消報價", + "24 hours" : "24 小時", + "7 days" : "7 日", + "30 days" : "30 日", + "Until unpin" : "直到取消置頂", + "Clear reminder – {timeLocale}" : "清除提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 編輯", + "Pinned by you" : "由你置頂", + "Pinned by {actor}" : "由 {actor} 置頂", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "訊息文字已複製到剪貼板", + "Message text could not be copied" : "訊息文字無法複製", + "Message forwarded to \"Note to self\"" : "訊息已轉寄至「給自己的註記」", + "Error while forwarding message to \"Note to self\"" : "轉寄訊息到「給自己的註記」時發生錯誤", + "A reminder was successfully removed" : "已成功移除提醒", + "Error occurred when removing a reminder" : "移除提醒時發生錯誤", + "A reminder was successfully set at {datetime}" : "已成功設定於 {datetime} 的提醒", + "Error occurred when creating a reminder" : "建立提醒時發生錯誤", + "Add a reaction to this message" : "添加對此訊息的反應", + "Reply" : "回覆", + "More actions" : "更多操作", + "Set reminder" : "設定提醒", + "Pin message" : "置頂訊息", + "Unpin message" : "取消置頂訊息", + "Reply privately" : "私下回覆", + "Edit message" : "編輯訊息", + "Copy message" : "複製訊息", + "Copy message link" : "複製訊息連結", + "Go to file" : "前往檔案", + "Download file" : "下載檔案", + "Go to thread" : "前往討論串", + "Edit thread details" : "編輯討論串詳細資訊", + "Forward message" : "轉寄訊息", + "Translate" : "翻譯", + "Set custom reminder" : "設定自訂提醒", + "Keep pinned for" : "置頂保留期限", + "Set custom period" : "設定自訂期限", + "Close reactions menu" : "關閉反應選項單", + "React with {emoji}" : "使用 {emoji} 做出反應", + "React with another emoji" : "使用另一個表情符號做出反應", + "Choose a conversation to forward the selected message." : "選擇要將所選消息轉發到的對話。", + "Error while forwarding message" : "轉寄訊息時發生錯誤", + "The message has been forwarded to {selectedConversationName}" : "訊息已轉發至 {selectedConversationName}", + "Dismiss" : "撤銷", + "Go to conversation" : "前往對話", + "Detect language" : "檢測語言", + "The message could not be translated" : "無法翻譯訊息", + "Translation copied to clipboard" : "翻譯已複製到剪貼簿", + "Translation could not be copied" : "無法複製翻譯", + "Translate message" : "翻譯訊息", + "Source language to translate from" : "要翻譯的來源語言", + "Translate from" : "翻譯從", + "Target language to translate into" : "要翻譯至的目標語言", + "Translate to" : "翻譯至", + "Translating" : "正在翻譯", + "This translation is AI generated and may contain mistakes." : "此翻譯為人工智能產生,可能會出錯。", + "Copy translated text" : "複製已翻譯的文字", + "Error when scheduling the message" : "安排傳送訊息時發生錯誤", + "Reschedule" : "重新安排", + "Send now" : "立即傳送", + "Choose a time" : "選擇時間", + "Send at custom time" : "於自訂時間傳送", + "Will be sent without notification" : "將不另行發出傳送檔案通知", + "Message read by everyone who shares their reading status" : "共享閱讀狀態的所有人都閱讀了該郵件", + "Message sent" : "訊息已傳送", + "Sent without notification" : "傳送而不通知", + "Deleting message" : "正在刪除訊息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "訊息已成功刪除,但已設定機器人或 Matterbridge,訊息可能已散佈至其他服務", + "Message deleted successfully" : "成功刪除了訊息", + "Message could not be deleted because it is too old" : "無法刪除訊息,因為它距今太久", + "Only normal chat messages can be deleted" : "只能刪除普通聊天訊息", + "An error occurred while deleting the message" : "刪除訊息時發生錯誤", + "Pinned" : "已置頂", + "Your browser does not support playing audio files" : "您的瀏覽器不支援播放音頻檔案", + "Contact" : "聯絡人", + "{stack} in {board}" : "{board} 中的 {stack}", + "Deck Card" : "看板卡片", + "Remove {fileName}" : "移除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打開此位置", + "_%n reply_::_%n replies_" : ["%n 個回覆"], + "Sending message" : "傳送訊息", + "Failed to send the message. Click to try again" : "發送消息失敗。點擊重試", + "Not enough free space to upload file" : "空間不足,不能上傳檔案", + "You cannot send messages to this conversation at the moment" : "您目前無法向此對話發送消息", + "Could not update the message" : "無法更新訊息", + "Reply to thread \"{threadTitle}\"" : "回覆討論串「{threadTitle}」", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["點選以投票 • %n 票"], + "Click to vote" : "點選以投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["民意調查草稿 • %n 選項"], + "_%n vote_::_%n votes_" : ["%n 張選票"], + "Edit poll draft" : "編輯民意調查草稿", + "Delete poll draft" : "刪除民意調查草稿", + "Open poll" : "開放投票", + "Closed poll" : "已關閉的投票", + "See results" : "查看結果", + "Reactions" : "反應", + "No permission to post reactions in this conversation" : "無權在此對話中發表反應", + "and {participant}" : "及 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及 %n 其他參與者"], + "Show all reactions" : "顯示所有反應", + "Add more reactions" : "添加更多反應", + "Show or collapse system messages" : "顯示或折疊系統訊息", + "No messages" : "沒有訊息", + "All messages have expired or have been deleted." : "所有訊息都已過期或已被刪除。", + "Generate summary with AI" : "使用人工人工智能產生摘要", + "{author} (pinned by you)" : "{author}(由你置頂)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 置頂)", + "Unpin" : "取消固定", + "Cancel search" : "取消搜尋", + "Add a phone number" : "添加電話號碼", + "Error: A password is required to create the conversation." : "錯誤:創建對話需要密碼。", + "All set, the conversation \"{conversationName}\" was created." : "一切就緒,對話 「{conversationName}」已創建。", + "Create a new group conversation" : "建立新群組對話", + "Add participants" : "添加參與者", + "Maximum length exceeded ({maxlength} characters)" : "超出最大長度({maxlength} 個字元)", + "Conversation type" : "對話類型", + "Conversation visibility" : "對話可見性", + "Allow guests to join via link" : "允許訪客透過連結加入", + "Enter password" : "輸入密碼", + "This conversation has been locked" : "此對話已被上鎖", + "No permission to post messages in this conversation" : "無權在此對話中發佈訊息", + "Joining conversation …" : "正在加入對話 …", + "Write a message without notification" : "撰寫訊息而不通知", + "Create a thread silently" : "默默建立討論串", + "Create a thread" : "創建討論串", + "Send message silently" : "無聲傳送訊息", + "Send message" : "傳送訊息", + "Send without notification" : "傳送而不通知", + "The participant will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Participants will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Message will be sent {datetimeString}" : "訊息將於 {datetimeString} 傳送", + "Thread title is required" : "討論串標題為必填", + "Message text is required" : "訊息文字為必填", + "The message could not be edited" : "無法編輯訊息", + "File to share" : "要分享的檔案", + "File upload is not available in this conversation" : "此對話中無法上傳檔案", + "Message was successfully scheduled" : "訊息已成功安排傳送", + "Add emoji" : "添加 emoji", + "Adding a mention will only notify users who did not read the message." : "添加提及只會通知尚未閱讀訊息的用戶。", + "Thread title" : "討論串標題", + "Send later" : "稍後傳送", + "Show scheduled messages" : "顯示已安排傳送的訊息", + "Cancel editing" : "取消編輯", + "Schedule message" : "預先安排訊息", + "{user} is out of office and might not respond." : "{user} 不在辦公室,可能不會回覆。", + "Absence period: {startDate} - {endDate}" : "缺席期間:{startDate} - {endDate}", + "Replacement:" : "取代︰", + "Share from {nextcloud}" : "透過 {nextcloud} 分享", + "Share from Files" : "從檔案進行分享", + "Share files to the conversation" : "在對話中分享檔案", + "Upload from device" : "從裝置上傳", + "Create new poll" : "創建新民意調查", + "Smart picker" : "聰明的選擇器", + "Record voice message" : "錄製話音短訊", + "End recording and send" : "結束錄音並傳送", + "Dismiss recording" : "撤銷錄音", + "Access to the microphone was denied" : "存取米高風被拒絕", + "Microphone either not available or disabled in settings" : "麥克風不可用或在設置中停用", + "Error while recording audio" : "錄音時出錯", + "Voice message {time} ({conversation})" : "從 {time} 開始的語音訊息({conversation})", + "Generating summary of unread messages …" : "正在産生未讀訊息的摘要 ...", + "Summary is AI generated and might contain mistakes" : "摘要為人工智能產生,可能有錯", + "Error occurred during a summary generation" : "在産生摘要過程中發生錯誤", + "New file" : "新增檔案", + "Blank" : "空白", + "Error while creating file" : "建立檔案時發生錯誤", + "Create and share a new file" : "創建及分享新檔案", + "Name of the new file" : "新檔案名稱", + "Create file" : "創建檔案", + "Someone is typing …" : "有人在打字 …", + "{user1} is typing …" : "{user1} 在打字……", + "{user1} and {user2} are typing …" : "{user1} 及 {user2} 在打字 …", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2} 及 {user3} 正在打字 …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 及其他 %n 人正在打字 …"], + "Add more files" : "添加更多檔案", + "Send" : "傳送", + "In this conversation {user} can:" : "此對話中,{user}可以:", + "Edit default permissions for participants in {conversationName}" : "編輯 {conversationName} 中參與者的默認權限", + "Start a call" : "開始通話", + "Skip the lobby" : "跳過等候室", + "Can post messages" : "可以發佈訊息", + "Can post messages and reactions" : "可以發佈消息和反應", + "Can add reactions" : "可以添加反應", + "Enable the microphone" : "啟用米高風", + "Enable the camera" : "啟用相機", + "Share the screen" : "分享螢幕", + "Update permissions" : "更新權限", + "Updating permissions" : "更新權限", + "No poll drafts" : "沒有民意調查草稿", + "There is no poll drafts yet saved for this conversation" : "尚未為此對話保存民意調查草稿", + "Create poll in {name}" : "在 {name} 建立投票", + "Create poll" : "創建民意調查", + "Error while importing poll" : "導入投票時發生錯誤", + "Question" : "問題", + "Ask a question" : "問一個問題", + "Import draft from file" : "從檔案導入草稿", + "Answers" : "答案", + "Answer {option}" : "答案 {option}", + "Delete poll option" : "刪除民意調查選項", + "Add answer" : "添加答案", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多個答案", + "Save as draft" : "保存為草稿", + "Export draft to file" : "將草稿導出至檔案", + "_Final results • %n vote_::_Final results • %n votes_" : ["最終結果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此選項一票", + "End poll" : "結束民意調查", + "Change your vote" : "更改您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "結果", + "Voted participants" : "投票參與者", + "Send a message to \"{roomName}\"" : "向 “{roomName}” 傳送訊息", + "Hide list of participants" : "隱藏參與者清單", + "Show list of participants" : "顯示參與者清單", + "Assistance requested in {roomName}" : "{roomName} 請求協助", + "The message was sent to \"{roomName}\"" : "訊息已發佈至 “{roomName}”", + "Dismiss request for assistance" : "撤銷協助請求", + "Send message to room" : "傳送訊息至聊天室", + "Back to main room" : "回到主室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室發送訊息", + "Start session" : "開始時段", + "Start a call before you start a breakout room session" : "在開始分組討論室之前開始通話", + "Stop session" : "停止時段", + "The message was sent to all breakout rooms" : "訊息已傳送至所有分組討論室", + "Send a message to all breakout rooms" : "向所有分組討論室傳送訊息", + "Breakout rooms are not started" : "分組討論室未啟動", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "沒有高效能後端的通話可能導致連接問題和設備負載過高。{linkstart}了解更多{linkend}", + "Talk setup incomplete" : "未完成 Talk 設定", + "Disable lobby" : "等候室停用", + "Settings for participant \"{user}\"" : "參與者 \"{user}\" 的設定", + "Participant \"{user}\"" : "參與者 \"{user}\"", + "moderator" : "主持人", + "bot" : "機器人", + "guest" : "訪客", + "Ringing …" : "連線中 …", + "Call rejected" : "通话被拒絕", + "{time} talking …" : "{time} 說話中 ...", + "{time} talking time" : "{time} 說話時間", + "Raised their hand" : "舉手", + "Joined with video" : "用戶已加入視像對話", + "Joined via phone" : "透過電話加入", + "Joined with audio" : "用戶已加入音頻對話", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的長度必須小於或等於{maxLength}個字符。您目前的文本長度為{charactersCount}個字符。", + "Remove group and members" : "移除群組及組員", + "Remove team and members" : "移除團隊和成員", + "Remove participant" : "移除參與者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "你確定要將群組「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "你確定要將團隊「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove {displayName} from this conversation?" : "你確定要將「{displayName}」從此對話中移除嗎?", + "Notification was sent to {displayName}" : "通告已傳送至 {displayName}", + "Could not send notification to {displayName}" : "無法向 {displayName} 傳送通告", + "Permissions granted to {displayName}" : "已將權限授予{displayName}", + "Could not modify permissions for {displayName}" : "無法更改 {displayName} 的權限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的權限", + "Permissions set to default for {displayName}" : "{displayName} 的權限設置為默認值", + "Phone number could not be hung up" : "無法掛斷電話", + "Phone number could not be put on hold" : "無法暫停電話通話", + "Phone number could not be muted" : "無法將電話靜音", + "Phone number could not be unmuted" : "無法取消電話靜音", + "DTMF message could not be sent" : "無法傳送 DTMF 訊息", + "Phone number copied to clipboard" : "電話號碼已複製到剪貼板", + "Phone number could not be copied" : "無法複製電話號碼", + "in the lobby" : "在等候室中", + "Dial out phone" : "撥出電話", + "Hang up phone" : "掛斷電話", + "Move back to lobby" : "移回等候室", + "Move to conversation" : "移至對話", + "Dial-in PIN" : "撥入 PIN", + "Demote from moderator" : "從主持人降級", + "Promote to moderator" : "晉升為主持人", + "Resend invitation" : "重新傳送邀請", + "Send call notification" : "傳送通話通告", + "Dial out phone number" : "撥出電話號碼", + "Resume call for phone number" : "恢復電話號碼的通話", + "Put phone number on hold" : "保留電話號碼", + "Unmute phone number" : "取消電話號碼靜音", + "Mute phone number" : "將電話號碼靜音", + "Copy phone number" : "複製電話號碼", + "Reset custom permissions" : "重設自訂權限", + "Grant all permissions" : "授予所有權限", + "Remove all permissions" : "移除所有權限", + "Also ban from this conversation" : "同時從此對話中封禁", + "Internal note (reason to ban)" : "內部備註(封禁原因)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "更改了 {displayName} 的權限", + "Add users, groups or teams" : "添加用戶,群組和團隊", + "Add users or groups" : "增加用戶或者群組", + "Add users or teams" : "添加用戶或團隊", + "Add users" : "新增用戶", + "Add groups or teams" : "添加群組或團隊", + "Add groups" : "新增群組", + "Add teams" : "添加團隊", + "Add other sources" : "添加其他來源", + "Add emails" : "新增電郵", + "Integrations" : "整合", + "Add federated users" : "添加 federated 用戶", + "Searching …" : "正在搜尋……", + "Search for more users" : "搜尋更多用戶", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以透過名稱、電郵地址或雲端聯盟 ID 搜尋或新增參與者", + "Search or add participants" : "搜尋或添加參與者", + "Invitation was sent to {actorId}" : "邀請已傳送到 {actorId}", + "An error occurred while adding the participants" : "添加參與者時發生了錯誤", + "A new group conversation with selected participant will be created" : "將會建立包含選定參與者的新群組對話", + "Participants" : "參與者", + "Pinned by a deleted user" : "由已刪除的用戶置頂", + "Participants ({count})" : "參與者 ({count})", + "Open chat" : "開啟聊天", + "You have new unread messages in the chat." : "您在聊天中有新的未讀消息。", + "You have been mentioned in the chat." : "您已在聊天中被提及。", + "Search messages" : "搜尋訊息", + "Chat" : "聊天", + "Details" : "細節", + "Shared items" : "分享項目", + "Search in {name}" : "在 {name} 中搜尋", + "Threads in {name}" : "在 {name} 中的討論串", + "{actor} in {conversation}" : "{conversation} 中的 {actor}", + "Search messages …" : "搜尋訊息 ...", + "Search options" : "搜尋選項", + "From User" : "來自用戶", + "Since" : "自", + "Until" : "直至", + "No results found" : "未找到結果", + "Load more results" : "正在載入更多結果", + "Recent threads" : "最近的討論串", + "Projects" : "專案項目", + "No shared items" : "沒有已分享的項目", + "Thread notifications" : "討論串通知", + "Thread actions" : "討論串動作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "連結對話", + "No open conversations found" : "沒有找到公開對話", + "Either there are no open conversations or you joined all of them." : "要不然就是沒有公開的對話,要不然就是你已經參與了所有的對話。", + "Check spelling or use complete words." : "檢查拼寫或使用完整的單詞。", + "Search conversations or users" : "搜尋對話或用戶", + "Select conversation" : "選擇對話", + "Number length is not valid" : "號碼長度無效", + "Region code is not valid" : "區碼無效", + "Number length is too short" : "號碼長度太短", + "Number length is too long" : "號碼長度太長", + "Number is not valid" : "號碼無效", + "Phone numbers" : "電話號碼", + "Display name: {name}" : "顯示名稱:{name}", + "Edit display name" : "編輯顯示名稱", + "Display name (required)" : "顯示名稱(必填)", + "Save name" : "保存名字", + "I picked message bubbles" : "已選擇訊息氣泡", + "I picked the list style" : "我挑選了清單樣式", + "Error while setting personal setting" : "設置您的個人設置時發生錯誤", + "Error while saving sounds setting" : "儲存聲音設置時發生錯誤", + "Compact conversations list" : "簡潔對話清單", + "Chat appearance" : "聊天外觀", + "Messages list" : "訊息清單", + "Message bubbles" : "訊息氣泡", + "Play sounds when participants join or leave a call" : "參與者加入或離開通話時播放聲音", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由於製造商的技術限制,目前在 iPhone 與 iPad 上無法使用", + "Notification settings" : "通告設定", + "Sounds for chat and call notifications" : "聊天與通話通知的音效", + "Invalid language ({languageId})" : "無效的語言({languageId})", + "Default language" : "預設語言", + "Default language ({languageName})" : "預設語言({languageName})", + "Error when trying to load the available live translation languages" : "載入可用的即時翻譯語言時發生錯誤", + "Error when trying to set live translation language" : "設定即時翻譯語言時發生錯誤", + "Set language used to show the transcriptions" : "設定顯示轉錄內容所使用的語言", + "Select location for attachments" : "選擇附件的位置", + "Error while setting attachment folder" : "設置附件資料夾時出錯", + "Error while setting read status privacy" : "設置讀取狀態私隱時出錯", + "Error while setting typing status privacy" : "設置打字狀態私隱時出錯", + "Error while setting default media state" : "設定預設媒體狀態時發生錯誤", + "Turn camera and microphone off by default" : "預設關閉相機與麥克風", + "Blur camera background by default" : "預設模糊相機背景", + "Skip device preview before joining a call" : "略過加入通話前的裝置預覽", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入時將關閉相機。如需錄影同意,則會一直顯示。", + "Appearance & Sounds" : "外觀與音效", + "Privacy" : "私隱", + "Send read receipts" : "傳送讀取回條", + "When off, all read statuses will be hidden" : "關閉時,所有讀取狀態都會被隱藏", + "Share typing status" : "分享輸入狀態", + "When off, all typing indicators will be hidden" : "關閉時,所有輸入指示器都會被隱藏", + "Attachments folder" : "附件資料夾", + "Toggle full screen" : "切換全螢幕", + "Return to Home screen" : "回到主畫面", + "Search" : "搜尋", + "Shortcuts while in a chat" : "聊天中的捷徑", + "Focus the chat input" : "關注聊天輸入字段", + "Unfocus the chat input to use shortcuts" : "取消對聊天輸入字段的關注以使用快捷方式", + "Edit your last message" : "編輯您最新的訊息", + "Shortcuts while in a call" : "通話中的快捷方式", + "Camera on and off" : "開啟和關閉相機", + "Microphone on and off" : "開啟和關閉麥克風", + "Raise or lower hand" : "舉或放下手", + "Push to talk or push to mute" : "一鍵通話或靜音", + "Zoom-in / zoom-out a screen share" : "放大/縮小螢幕分享", + "Mouse wheel" : "滑鼠滾輪", + "Start call silently" : "安靜地開始通話", + "Start call" : "開始通話", + "End call" : "結束通話", + "The server was updated, you cannot start or join a call." : "伺服器已更新,您無法開始或加入通話。", + "This call has just ended" : "此通話剛結束", + "You will be able to join the call only after a moderator starts it." : "只有主持人發起通話後,您才能加入該通話。", + "End call for everyone" : "為所有人結束通話", + "Starting the recording" : "開始錄製", + "Recording" : "錄製", + "The call has been running for one hour." : "請注意,通話已經持續一個小時了。", + "Cancel recording start" : "取消錄製開始", + "Stop recording" : "停止錄音", + "Send a reaction" : "傳送反應", + "React with {reaction}" : "使用 {reaction} 做出反應", + "All tasks done!" : "所有任務完成!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n 任務"], + "Add participants to this call" : "新增參與者至此通話", + "_%n participant in call_::_%n participants in call_" : ["通話中有 %n 位參與者"], + "Scheduled messages" : "預先安排好的訊息", + "You are not allowed to enable screensharing" : "你無權啟用啟用螢幕分享", + "No screensharing" : "沒有螢幕分享", + "Screensharing options" : "螢幕分享選項", + "Enable screensharing" : "啟用螢幕分享", + "Bad sent video and screen quality." : "發送的視像和螢幕質量不佳。", + "Bad sent screen quality." : "發送的螢幕質量不佳。", + "Bad sent video quality." : "發送的視像質量不佳。", + "Bad sent audio, video and screen quality." : "發送的音頻,視像和螢幕質量不佳。", + "Bad sent audio and screen quality." : "發送的音頻和螢幕質量不佳。", + "Bad sent audio and video quality." : "發送的音頻和視像質量不佳。", + "Bad sent audio quality." : "發送的音頻質量不佳。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的互聯網連接或電腦正忙,其他參與者可能無法看到您的螢幕。 為了改善這種情況,嘗試在進行螢幕共享時禁用背景模糊或視像。", + "Disable background blur" : "禁用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您的螢幕。為了改善這種情況,請嘗試在進行螢幕共享時禁用視像。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您的螢幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的互聯網連接或電腦正忙,其他參與者可能無法理解和看到您。 為了改善這種情況,嘗試在進行螢幕共享時禁用背景模糊或視像。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您。為了改善這種情況,請嘗試在執行螢幕共享時禁用視像。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您的螢幕。為了改善這種情況,請嘗試停用螢幕共享。", + "Disable screenshare" : "停用螢幕共享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的互聯網連接或電腦正忙,其他參與者可能無法理解和看到您。 為了改善這種情況,嘗試禁用背景模糊或視像。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您。為了改善這種情況,請嘗試停用您的視像。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "您的 Internet 連接或電腦繁忙,其他參與者可能聽不到您。", + "Screen sharing is not supported by your browser." : "您的瀏覽器不支持螢幕共享。", + "Screen sharing requires the page to be loaded through HTTPS." : "螢幕共享要求頁面通過HTTPS加載。", + "Screensharing requires the page to be loaded through HTTPS." : "螢幕共享要求頁面通過HTTPS加載。", + "An error occurred while starting screensharing." : "開始螢幕共享時發生錯誤。", + "Select virtual background" : "選擇虛擬背景", + "Show your screen" : "顯示您的螢幕", + "Stop screensharing" : "停止螢幕分享", + "Mute others" : "使其他人靜音", + "Start recording" : "開始錄音", + "Set up breakout rooms" : "設置分組討論室", + "Download attendance list" : "下載出勤名單", + "Open Calendar" : "打開日曆", + "Remove participant {name}" : "移除參與者 {name}", + "Would you like to delete this conversation?" : "您想要刪除此對話嗎?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此對話在閒置 %n 天後將會自動為所有人刪除"], + "Are you sure you want to delete this conversation?" : "您確定您想要刪除此對話嗎?", + "Delete now" : "立刻刪除", + "Keep" : "保留", + "Open dialpad" : "開啟撥號鍵盤", + "Select a region" : "選擇地區", + "Local time: {time}" : "本地時間︰{time}", + "Scheduled {datetime}" : "預定於 {datetime}", + "Scheduled for {datetime}" : "預定於 {datetime}", + "Search …" : "搜尋 …", + "Message without mention" : "沒有 @提及的訊息", + "Mention myself" : "提及自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "選取對話", + "Select a mode" : "選取模式", + "You do not have permissions to access this conversation." : "您無權存取此對話。", + "Join a different conversation or start a new one." : "加入不同的對話或開始新的對話​​。", + "The conversation does not exist" : "對話不存在", + "Join a conversation or start a new one!" : "加入或者開一個新的對話", + "Duplicate session" : "重複對話", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此對話已在另一個分頁開啟。目前的伺服器版本不支援同一個對話同時在多個分頁開啟。", + "Creating and joining a conversation with \"{userid}\"" : "使用「{userid}」建立並加入對話", + "Join a conversation or start a new one" : "加入或者開一個新的對話", + "Error while joining the conversation" : "加入對話時發生錯誤", + "Another user" : "另一個用戶", + "Hey! Are you using the list style or message bubbles?" : "嘿!你用的是清單樣式還是訊息泡泡樣式呢?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 用戶", + "User password" : "用戶密碼", + "Talk conversation" : "Talk 對話", + "Skip TLS verification" : "跳過 TLS 驗證", + "Matrix server URL" : "Matrix 伺服器 URL", + "User" : "用戶", + "Matrix channel" : "Matrix 頻道", + "Mattermost server URL" : "Mattermost 伺服器 URL", + "Mattermost user" : "Mattermost 用戶", + "Team name" : "團隊名稱", + "Channel name" : "頻道名稱", + "Rocket.Chat server URL" : "Rocket。Chat 伺服器 URL", + "User name or email address" : "用戶名稱或電郵地址", + "Rocket.Chat channel" : "Rocket。Chat 頻道", + "Zulip server URL" : "Zulip 伺服器 URL", + "Bot user name" : "Bot 用戶名稱", + "Bot API key" : "Bot API 密鑰", + "Zulip channel" : "Zulip 頻道", + "API token" : "API 權杖", + "Slack channel" : "Slack 頻道", + "Server ID or name" : "伺服器 ID 或名稱", + "Channel ID (prefixed with \"ID:\") or name" : "頻道 ID(前綴為「ID:」)或名稱", + "Channel" : "頻道", + "Login" : "登入", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 伺服器 URL(e.g. chat.freenode.net:6667)", + "Nickname" : "暱稱", + "Connection password" : "連線密碼", + "IRC channel" : "IRC 頻道", + "Channel password" : "頻道密碼", + "NickServ nickname" : "NickServ 暱稱", + "NickServ password" : "NickServ 密碼", + "Use TLS" : "Use TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租戶 ID", + "Client ID" : "客戶端ID", + "Team ID" : "團隊 ID", + "Thread ID" : "帖子 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 伺服器 URL", + "MUC server URL" : "MUC 伺服器 URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "置頂訊息", + "Media" : "多媒體", + "Polls" : "調查", + "Deck cards" : "看板卡片", + "Voice messages" : "音頻留言", + "Locations" : "地點", + "Call recordings" : "通話錄音", + "Audio" : "音頻", + "Show all pinned messages" : "顯示所有置頂訊息", + "Show all media" : "顯示所有媒體", + "Show all files" : "顯示所有檔案", + "Show all polls" : "顯示所有民意調查", + "Show all deck cards" : "顯示所有卡片", + "Show all voice messages" : "顯示所有話音短訊", + "Show all locations" : "顯示所有位置", + "Show all call recordings" : "顯示所有通話錄音", + "Show all audio" : "顯示所有音頻", + "Show all other" : "顯示所有其他", + "Follow conversation settings" : "跟隨對話設定", + "Group" : "群組", + "Team" : "團隊", + "You reconnected to the call" : "您已重新連線至通話", + "{actor} reconnected to the call" : "{actor} 已重新連線至通話", + "You added {user0} and {user1}" : "您添加了 {user0} 與 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["您添加了 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator added you and {user0}" : "管理員添加了您與 {user0}", + "{actor} added you and {user0}" : "{actor} 添加了您與 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理員添加了您、{user0} 與 %n 個其他參與者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 添加了您、{user0} 與 %n 個其他參與者"], + "An administrator added {user0} and {user1}" : "管理員添加了 {user0} 與 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 添加了 {user0} 與 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理員添加了 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 添加了 {user0}、{user1} 與 %n 個其他參與者"], + "You removed {user0} and {user1}" : "您移除了 {user0} 與 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您移除了 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator removed you and {user0}" : "管理員移除了您與 {user0}", + "{actor} removed you and {user0}" : "{actor} 移除了您與 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理員移除了您、{user0} 與 %n 個其他參與者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 移除了您、{user0} 與 %n 個其他參與者"], + "An administrator removed {user0} and {user1}" : "管理員移除了 {user0} 與 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 移除了 {user0} 與 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理員移除了 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 移除了 {user0}、{user1} 與 %n 個其他參與者"], + "You and {user0} joined the call" : "您與 {user0} 已加入通話", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 及 %n 個其他參與者加入了通話"], + "{user0} and {user1} joined the call" : "{user0} 與 {user1} 已加入通話", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 及 %n 個其他參與者已加入通話"], + "You and {user0} left the call" : "您與 {user0} 已離開通話", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 及 %n 個其他參與者已離開通話"], + "{user0} and {user1} left the call" : "{user0} 與 {user1} 已離開通話", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 及 %n 個其他參與者已離開通話"], + "You promoted {user0} and {user1} to moderators" : "您已將 {user0} 與 {user1} 晉升為主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted you and {user0} to moderators" : "管理員已將您與 {user0} 升級為主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 將您與 {user} 升級為主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理員已將 {user0} 與 {user1} 升級為主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 已將 {user0} 與 {user1} 晉升為主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "You demoted {user0} and {user1} from moderators" : "您已將 {user0} 與 {user1} 由主持人降級", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "An administrator demoted you and {user0} from moderators" : "管理員已將您與 {user0} 由主持人降級", + "{actor} demoted you and {user0} from moderators" : "{actor} 將您與 {user} 由主持人降級", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者由主持人降級"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者由主持人降級"], + "An administrator demoted {user0} and {user1} from moderators" : "管理員已將 {user0} 與 {user1} 由主持人降級", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 已將 {user0} 與 {user1} 由主持人降級", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "伺服器已更新。", + "(edited by you)" : "(由您編輯)", + "(edited by a deleted user)" : "(已刪除的用戶編輯)", + "(edited by {moderator})" : "(由 {moderator} 編輯)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在嘗試加入對話,而在另一個窗口或裝置中擁有活動會話。Nextcloud Talk 目前不支持此功能。你想做什麼?", + "Leave this page" : "離開此頁面", + "Join here" : "在這裡加入", + "Deck card has been posted to {conversation}" : "Deck 卡片已發佈至 {conversation}", + "An error occurred while posting deck card to conversation" : "將卡片發佈到對話時發生錯誤", + "Post to a conversation" : "發佈到對話", + "Post to conversation" : "發佈到對話", + "The recording failed. Please contact your administrator." : "錄製失敗。請聯絡管理員。", + "Location has been posted to {conversation}" : "位置已發佈至 {conversation}", + "An error occurred while posting location to conversation" : "將位置發佈到對話時發生錯誤。", + "Share to a conversation" : "分享到對話", + "Share to conversation" : "分享到對話", + "In conversation" : "在對話中", + "Search in conversation: {conversation}" : "在對話中搜尋:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "目前由於防止暴力攻擊保護,您的請求受到限制。", + "Error while clearing conversation history" : "清除對話記錄時出錯", + "Error occurred while allowing guests" : "允許訪客時發生錯誤", + "Error occurred while disallowing guests" : "禁止訪客時發生錯誤", + "Error occurred when restricting the conversation to moderator" : "將對話限制為主持人時發生錯誤", + "Error occurred when opening the conversation to everyone" : "向所有人打開對話時發生錯誤", + "Conversation password has been saved" : "對話密碼已被保存", + "Conversation password has been removed" : "對話密碼已被刪除", + "Error occurred while saving conversation password" : "保存對話密碼時發生錯誤", + "Call recording is starting." : "通話錄音開始。", + "Call recording stopped while starting." : "通話錄音在開始時停止。", + "Call recording stopped. You will be notified once the recording is available." : "通話錄音已停止。 一旦錄音可用,您將收到通知。", + "Conversation picture set" : "對話圖片設定", + "Conversation picture deleted" : "對話圖片已刪除", + "Could not delete the conversation picture" : "無法刪除對話圖片", + "Could not remove the automatic expiration" : "無法移除自動過期", + "Could not post message: {errorMessage}" : "無法發佈訊息:{errorMessage}", + "Participant is banned successfully" : "成功封禁了參與者", + "Error while banning the participant" : "封禁參與者時發生錯誤。", + "An error occurred while fetching the participants" : "擷取參與者時發生錯誤", + "Could not send invitation to {actorId}" : "向 {actorId} 傳送邀請時發生錯誤", + "Invitations sent" : "邀請已傳送", + "Error occurred when sending invitations" : "發送邀請時發生了錯誤", + "Failed to join the conversation." : "無法加入對話。", + "An error occurred while creating breakout rooms" : "建立分組討論室時發生了錯誤", + "An error occurred while re-ordering the attendees" : "重新排序與會者時出錯", + "An error occurred while deleting breakout rooms" : "刪除分組討論室時發生了錯誤", + "An error occurred while starting breakout rooms" : "開始分組討論室時發生錯誤。", + "An error occurred while stopping breakout rooms" : "停止分組討論室時發生錯誤。", + "An error occurred while sending a message to the breakout rooms" : "向分組討論室傳送訊息時發生了錯誤", + "An error occurred while requesting assistance" : "請求協助時出錯", + "An error occurred while resetting the request for assistance" : "重置協助請求時出錯", + "An error occurred while joining breakout room" : "加入分組討論室時發生錯誤。", + "Failed to rename the thread" : "重新命名討論串失敗", + "Error fetching upcoming events" : "擷取即將舉行的活動時發生錯誤", + "Error fetching upcoming reminders" : "擷取即將舉行的提醒時發生錯誤", + "An error occurred while accepting an invitation" : "接受邀請時發生錯誤", + "An error occurred while rejecting an invitation" : "拒絕邀請時發生錯誤", + "{guest} (guest)" : "{guest}(訪客)", + "Poll draft has been saved" : "民意調查草稿已保存", + "An error occurred while saving the draft" : "儲存草稿時發生了錯誤", + "An error occurred while submitting your vote" : "遞交您的投票時發生錯誤。", + "An error occurred while ending the poll" : "結束投票時出錯", + "An error occurred while deleting the poll draft" : "刪除任務時發生了錯誤", + "Poll \"{name}\" was created by {user}. Click to vote" : "投票「{name}」是由 {user} 建立的。點擊投票", + "Failed to add reaction" : "添加反應失敗", + "Failed to remove reaction" : "移除反應失敗", + "The server is in maintenance mode." : "伺服器正處於維護模式。", + "Federated server was updated." : "聯合伺服器已更新。", + "Error while uploading file \"{fileName}\"" : "上傳檔案時發生錯誤 \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "空間不足,不能上傳檔案 \"{fileName}\"", + "You are not allowed to share files" : "你無權分享檔案", + "Error while sharing file" : "分享檔案時發生錯誤", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk 不完全支持您使用的瀏覽器。請使用最新版本的 Mozilla Firefox,Microsoft Edge,Google Chrome,Opera 或 Apple Safari。", + "_In %n hour_::_In %n hours_" : ["%n 小時後"], + "_%n minute _::_%n minutes_" : ["%n 分鐘"], + "In {hours} and {minutes}" : "{hours} 與 {minutes} 內", + "_In %n minute_::_In %n minutes_" : ["%n 分鐘後"], + "Later today – {timeLocale}" : "今天稍後 – {timeLocale}", + "Set time for later today" : "設定今天稍後的時間", + "Tomorrow – {timeLocale}" : "明日 – {timeLocale}", + "Set time for tomorrow" : "設定明日的時間", + "This weekend – {timeLocale}" : "本週末 – {timeLocale}", + "Set time for this weekend" : "設定本週末的時間", + "Next week – {timeLocale}" : "下星期 – {timeLocale}", + "Set time for next week" : "設定下星期的時間", + "Message link copied to clipboard" : "訊息連結已複製到剪貼板", + "Conversation link copied to clipboard" : "對話連結已複製到剪貼板", + "The link could not be copied" : "連結無法複製", + "Error while parsing a PROPFIND error" : "解析 PROPFIND 錯誤時發生錯誤", + "Sending signaling message has failed" : "傳送訊號訊息失敗", + "Lost connection to signaling server. Trying to reconnect." : "與信令伺服器的連接斷開。嘗試重新連接。", + "Lost connection to signaling server." : "與信號伺服器的連接已斷開。", + "Connecting is taking longer than expected …" : "連線時間比預期長⋯⋯", + "Failed to connect. Retrying …" : "連線失敗,正在重試⋯⋯", + "Failed to connect. The signaling server may be set up incorrectly" : "連線失敗,訊號伺服器可能設定不正確", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "配置的信令伺服器需要更新才能兼容此版本的 Talk。 請聯絡您的管理員。", + "Please restart the app." : "請重新啟動應用程式。", + "Please reload the page." : "請重新整理頁面。", + "Please try to restart the app." : "請嘗試重新啟動應用程式。", + "Please try to reload the page." : "請嘗試重新載入頁面。", + "Do not disturb" : "請勿打擾", + "Away" : "離開", + "Microphone {number}" : "米高風 {number}", + "Camera {number}" : "相機 {number}", + "Speaker {number}" : "喇叭 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎在靜音時說話,請取消靜音以使其他人聽到您的聲音", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "無法與至少一個參與者建立連接。您的處境可能需要安裝 TURN 伺服器。請要求您的管理員按照 {linkstart}本說明書{linkend} 進行設置。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "此操作花費的時間比預期的長。是否已授予(或拒絕)媒體權限?如果是,請重新啟動瀏覽器,因為音頻和視像均出現故障", + "Access to microphone & camera is only possible with HTTPS" : "只有使用 HTTPS 才能存取米高風和相機", + "Please move your setup to HTTPS" : "請將您的設置移至HTTPS", + "Access to microphone & camera was denied" : "無法存取米高風和相機", + "WebRTC is not supported in your browser" : "你使用的瀏覽器不支援 WebRTC", + "Please use a different browser like Firefox or Chrome" : "請使用其他瀏覽器,例如Firefox或Chrome", + "Error while accessing microphone & camera" : "存取米高風和相機時發生錯誤", + "%s Talk on your mobile devices" : "%s Talk 在您的流動裝置上", + "Join conversations at any time, anywhere, on any device." : "隨時隨地在任何裝置上加入對話。", + "Android app" : "Android 應用程式", + "iOS app" : "iOS 應用程式", + "__language_name__" : "正體中文(香港)", + "Webhook Demo" : "Webhook 示範", + "Call summary (%s)" : "通話摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通話摘要機器人在通話後張貼概述訊息,列出所有參與者並概述任務", + "Tasks" : "任務", + "Notes" : "備註", + "Reports" : "報告", + "Decisions" : "決定", + "Agenda" : "議程", + "Call summary" : "通話摘要", + "Call summary - {title}" : "通話摘要 - {title}", + "Talk conversation for event" : "活動 Talk 對話", + "Client Push is installed, this improves the performance of desktop clients." : "已安裝客戶端推送,這會改善桌面客戶端的效能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "尚未安裝 {notify_push},在使用桌面客戶端時,這可能會導致性能問題。", + "Next meeting" : "下一個會議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "從您的日曆安排會議。必須將 Talk 對話設定為位置以在此處顯示", + "Join conversations from remote Nextcloud servers" : "加入來自遠端 Nextcloud 伺服器的對話", + "Your default media state has been saved" : "已儲存您的預設媒體狀態", + "Set reminder for later today" : "設定今天稍後的提醒", + "Set reminder for tomorrow" : "設定明日的提醒", + "Set reminder for this weekend" : "設定本週末的提醒", + "Set reminder for next week" : "設定下星期的提醒", + "Generate summary" : "產生摘要", + "Open poll • You voted already" : "公開民意調查・已投票", + "Open poll • Click to vote" : "公開民意調查 · 點擊投票", + "Poll • Ended" : "民意調查・已結束", + "Talk recording from {time} ({conversation})" : "從 {time} 開始的談話錄音({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["民意調查結果 • %n 票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公開民意調查 • %n 票"], + "Submit vote" : "遞交投票", + "Your privacy setting has been saved" : "已更新您的私隱設定", + "Your personal setting has been saved" : "您的個人設置已保存", + "Failed to save sounds setting" : "聲音設定儲存失敗", + "Sounds setting saved" : "聲音設置已保存", + "Always shown if recording consent is required" : "若需取得錄影同意,此提示將一律顯示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您無法開始或加入通話。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "您在另一個窗口或裝置中加入了對話。Nextcloud Talk 目前不支持此功能,因此該節,時段已關閉。", + "Nextcloud Talk was updated." : "Nextcloud 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 處於維護模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "啟用即時翻譯", + "I picked list style" : "已選擇清單樣式", + "Hey! Are you using Talk in list style or with message bubbles?" : "你目前在 Talk 中使用列表顯示還是訊息氣泡顯示?" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/zh_HK.json b/l10n/zh_HK.json new file mode 100644 index 0000000..a2ce761 --- /dev/null +++ b/l10n/zh_HK.json @@ -0,0 +1,2258 @@ +{ "translations": { + "a conversation" : "對話", + "(Duration %s)" : "(歷時 %s)", + "You attended a call with {user1}" : "您加入了與 {user1} 的通話", + "_%n guest_::_%n guests_" : ["%n位訪客"], + "You attended a call with {user1} and {user2}" : "您加入了與 {user1} 及 {user2} 之間的通話", + "You attended a call with {user1}, {user2} and {user3}" : "您加入了與 {user1}﹑{user2} 及 {user3} 之間的通話", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您加入了與 {user1}﹑{user2}﹑{user3} 及 {user4} 之間的通話", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您加入了與 {user1}﹑{user2}﹑{user3}﹑{user4} 及 {user5} 之間的通話", + "_%n other_::_%n others_" : ["及另外%n位其他人"], + "{actor} invited you to {call}" : "{actor} 邀請你加入 {call}", + "You were invited to a conversation or had a call" : "你被邀請加入對話通話", + "Other activities" : "其它活動", + "Talk" : "Talk", + "Guest" : "訪客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 歡迎來到Nextcloud Talk!\n在此對話中,我們將向您介紹Nextcloud Talk中可用的新功能。", + "## New in Talk %s" : "## Talk 的新功能 %s", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 現在可以使用Microsoft Edge和Safari參加音頻和視像通話", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 單對單對話現在是持久的,不會再意外話地變成小組對話。同樣,當參與者之一離開對話時,該對話不再自動刪除。僅當兩個參與者都離開時,對話才會從伺服器中刪除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您現在可以通過在聊天室中張貼“@all”來通知所有參與者", + "- With the \"arrow-up\" key you can repost your last message" : "- 使用【上箭頭】鍵,您可以重新發佈上一條消息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk 現在支持指令。發送 “/help” 作為聊天訊息,以查看管理員是否配置了任何指令。", + "- With projects you can create quick links between conversations, files and other items" : "- 使用方案,您可以在對話﹑檔案和其他項目之間建立快速連結", + "- You can now mention guests in the chat" : "- 您現在可以在聊天中提及來賓", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 對話現在可以有一個等候室。這將使主持人可以加入聊天及通話以準備會議,而用戶和來賓則必須等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您現在可以直接回覆郵件,為其他用戶提供更多有關您的郵件內容的背景訊息", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 現在,搜尋對話和參與者也將過濾您現有的對話,從而使找出以前的對話變得更加容易", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 現在,您可以在安裝社交圈子應用程式後將自訂用戶群組添加到對話中", + "- Check out the new grid and call view" : "- 體驗新的網格和通話視圖", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您現在可以直接從裝置上載檔案或將檔案拖放到聊天中", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 現在可以使用查看器應用程式直接在聊天視圖中打開分享檔案", + "- You can now search for chats and messages in the unified search in the top bar" : "您現在可以搜索聊天和訊息在頂部欄的搜索", + "- Spice up your messages with emojis from the emoji picker" : "使用表情符號選擇器中的表情符號來豐富您的訊息", + "- You can now change your camera and microphone while being in a call" : "您可以在通話時更改相機和麥克風 ", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 給您的對話一些描述的上下文並打開它,以便已登入的用戶可以找到它並加入", + "- See a read status and send failed messages again" : "- 查看讀取狀態並再次發送失敗的訊息", + "- Raise your hand in a call with the R key" : "- 使用【R】鍵在通話中舉手", + "- Join the same conversation and call from multiple devices" : "- 加入同一個對話並從多個設備撥打電話", + "- Send voice messages, share your location or contact details" : "- 發送音頻信息,分享您的位置或聯絡方式", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 將群組添加到對話中,新群組成員將自動成為參與者", + "- A preview of your audio and video is shown before joining a call" : "- 在加入通話之前顯示您的音頻和視頻預覽", + "- You can now blur your background in the newly designed call view" : "- 您現在可以在新設計的通話視圖中模糊背景", + "- Moderators can now assign general and individual permissions to participants" : "- 版主現在可以為參與者分配一般和個人權限", + "- You can now react to chat messages" : "- 您現在可以對聊天訊息做出反應", + "- In the sidebar you can now find an overview of the latest shared items" : "- 現在您可以在側邊欄中找到最新共享項目的概覽", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用民意調查收集他人的意見或確定日期", + "- Configure an expiration time for chat messages" : "- 配置聊天訊息的過期時間", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在不通知他人的情況下開始通話。通話開始後,您可以發送單獨的通話通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不緊急的情況下發送聊天訊息而不通知收件人", + "- Emojis can now be autocompleted by typing a \":\"" : "- 表情符號現在可以通過輸入 \":\" 自動完成", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 通過輸入 \"/\" 使用新的智能選擇器鏈接各種項目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人現在可以創建分組討論室(需要高性能後端系統)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 現在可以記錄通話(需要高性能後端系統)", + "- Conversations can now have an avatar or emoji as icon" : "- 對話現在可以有虛擬化身或 emoji 作為圖示", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 除了視頻通話中的模糊背景外,現在還可以使用虛擬背景", + "- Reactions are now available during calls" : "- 現在可以在通話期間做出反應", + "- Typing indicators show which users are currently typing a message" : "- 打字指示器顯示目前正在打字的用戶", + "- Groups can now be mentioned in chats" : "- 現在可以在聊天中提及群組", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 如果註冊了轉錄提供商應用程式,通話錄音會自動轉錄", + "- Chat messages can be translated if a translation provider app is registered" : "- 如果註冊了翻譯提供商應用程式,則可以翻譯聊天消息", + "- **Markdown** can now be used in _chat_ messages" : "- 現在可以在 _聊天_ 訊息中使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook 現在可用於實作機器人。要取得更多資訊,請參閱文件 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 在聊天訊息上設定提醒,如此稍後可收到通知", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用**給自己的筆記 **對話來記筆記並在裝置間分享資訊", + "- Captions allow to send a message with a file at the same time" : "- 字幕允許同時傳送包含檔案的訊息", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 現在在分享螢幕時可以看到講者的視訊,通話反應以動畫形式顯示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登入的作者和主持人現在可以在 6 小時內編輯訊息", + "- Unsent message drafts are now saved in your browser" : "- 未發送的訊息草稿現在保存在您的瀏覽器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 文字聊天現在可以透過聯盟方式與其他 Talk 伺服器通訊", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人現在可以禁止帳戶和訪客,以防止他們重新加入對話", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 連結的日曆活動和外出替換的即將打來的電話現在顯示在對話中", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 通話現在可以透過聯盟方式與其他 Talk 伺服器通訊(需要高效能後端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 介紹 Nextcloud Talk 桌面客戶端,支持 Windows、macOS 和 Linux:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud Assistant 總結通話錄音和聊天中的未讀消息。", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 改進會議功能,識別通過電郵地址邀請的嘉賓,導入參與者名單,草擬投票並下載通話參與者名單。", + "- Archive conversations to stay focused" : "- 存檔對話以保持專注", + "- Schedule a meeting into your calendar from within a conversation" : "- 在對話中安排會議到您的日曆", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右側邊欄搜尋目前對話的訊息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的精簡清單(在 Talk 設定中啟用),第一眼就能看到更多對話內容", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 會議對話現在會從日曆同步標題和描述,並且在開始前會用搜尋過濾器隱藏。", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知設定中標記對話為敏感,以隱藏對話清單和通知中的訊息內容。", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 在「勿擾」模式下接收推送通知,請將對話標記為重要。", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 在一對一通話中添加其他參與者,即可隨時創建新的群組通話", + "- Use threads to keep your chat and discussions organized" : "- 使用討論串來讓您的聊天與討論井然有序", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話期間現已提供即時轉錄功能(需安裝即時轉錄 ExApp 及高效能後端系統)", + "- Moderators can now pin messages so they are kept at the top" : "- 主持人現在可以將訊息釘選,讓它們固定顯示在最上方", + "- Schedule a message to send it at a later time" : "- 安排訊息於稍後傳送", + "_All %n participant_::_All %n participants_" : ["所有 %n 個參與者"], + "Talk updates ✅" : "Talk 更新 ✅", + "Reaction deleted by author" : "反應被作者刪除", + "{actor} created the conversation" : "{actor} 建立了對話", + "You created the conversation" : "你建立了對話", + "System created the conversation" : "系統創建了對話", + "An administrator created the conversation" : "管理員建立了對話", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} 將對話從 “%1$s” 重命名為 “%2$s”", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您將對話從 “%1$s” 重命名為 “%2$s”", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理員將對話從 “%1$s” 重命名為 “%2$s”", + "{actor} set the description" : "{actor} 設置了描述", + "You set the description" : "您設置了描述", + "An administrator set the description" : "管理員設置了描述", + "{actor} removed the description" : "{actor} 刪除了描述", + "You removed the description" : "您刪除了描述", + "An administrator removed the description" : "管理員刪除了描述", + "You started a silent call" : "您發起了無聲通話", + "Outgoing silent call" : "無聲去電", + "{actor} started a silent call" : "{actor} 發起了無聲通話", + "Incoming silent call" : "無聲來電", + "You started a call" : "您發起了一通話", + "Outgoing call" : "去電", + "{actor} started a call" : "{actor} 發起了一通話", + "Incoming call" : "來電", + "{actor} joined the call" : "{actor} 加入了通話", + "You joined the call" : "您已加入了通話", + "{actor} left the call" : "{actor} 離開了通話", + "You left the call" : "你離開了通話", + "{actor} unlocked the conversation" : "{actor} 解鎖了對話", + "You unlocked the conversation" : "您解鎖了對話", + "An administrator unlocked the conversation" : "管理員解鎖了對話", + "{actor} locked the conversation" : "{actor} 鎖定了對話", + "You locked the conversation" : "您鎖定了對話", + "An administrator locked the conversation" : "管理員鎖定了對話", + "{actor} limited the conversation to the current participants" : "{actor} 將對話限制為目前參與者", + "You limited the conversation to the current participants" : "您將對話限制為目前參與者", + "An administrator limited the conversation to the current participants" : "管理員將對話限制為目前參與者", + "{actor} opened the conversation to registered users" : "{actor} 已向註冊用戶開放對話", + "You opened the conversation to registered users" : "您已向註冊用戶開放對話", + "An administrator opened the conversation to registered users" : "管理員已向註冊用戶開放對話", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "You opened the conversation to registered users and users created with the Guests app" : "您向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理員向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "The conversation is now open to everyone" : "對話現在向所有人開放", + "{actor} opened the conversation to everyone" : "{actor} 向所有人開放了對話", + "You opened the conversation to everyone" : "您向所有人開放了對話", + "{actor} restricted the conversation to moderators" : "{actor} 將對話限制為主持人", + "You restricted the conversation to moderators" : "您將對話限制為主持人", + "{actor} started breakout rooms" : "{actor} 開始了分組討論室", + "You started breakout rooms" : "您開始了分組討論室", + "{actor} stopped breakout rooms" : "{actor} 停止了分組討論室", + "You stopped breakout rooms" : "您停止了分組討論室", + "{actor} allowed guests" : "{actor} 允許來賓加入對話", + "You allowed guests" : "您允許來賓加入對話", + "An administrator allowed guests" : "管理員允許來賓加入對話", + "{actor} disallowed guests" : "{actor} 不允許來賓加入對話", + "You disallowed guests" : "您不允許來賓加入對話", + "An administrator disallowed guests" : "管理員不允許來賓加入對話", + "{actor} set a password" : "{actor} 設置了密碼", + "You set a password" : "您設置了密碼", + "An administrator set a password" : "管理員設置了密碼", + "{actor} removed the password" : "{actor} 刪除了密碼", + "You removed the password" : "您刪除了密碼", + "An administrator removed the password" : "管理員刪除了密碼", + "{actor} added {user}" : "{actor} 添加了 {user}", + "You joined the conversation" : "您加入了對話", + "{actor} joined the conversation" : "{actor} 加入了對話", + "You added {user}" : "您添加了 {user}", + "{actor} added you" : "{actor} 添加了您", + "An administrator added you" : "管理員添加了您", + "An administrator added {user}" : "管理員添加了 {user}", + "You left the conversation" : "你離開了對話", + "{actor} left the conversation" : "{actor} 離開了對話", + "{actor} removed {user}" : "{actor} 刪除了 {user}", + "You removed {user}" : "您刪除了 {user}", + "{actor} removed you" : "{actor} 刪除了您", + "An administrator removed you" : "管理員刪除了您", + "An administrator removed {user}" : "管理員刪除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀請了 {federated_user}", + "You invited {federated_user}" : "您邀請了 {federated_user}", + "You accepted the invitation" : "您接受了邀請", + "{actor} invited you" : "{actor} 邀請了您", + "An administrator invited you" : "管理員邀請了您", + "An administrator invited {federated_user}" : "管理員邀請了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀請", + "{actor} removed {federated_user}" : "{actor} 移除了{federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您婉拒了邀請", + "An administrator removed {federated_user}" : "管理員移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 婉拒了邀請", + "{actor} added group {group}" : "{actor} 添加了群組 {group}", + "You added group {group}" : "您添加了群組 {group}", + "An administrator added group {group}" : "管理員添加了群組 {group} ", + "{actor} removed group {group}" : "{actor} 移除了群組 {group}", + "You removed group {group}" : "您移除了群組 {group}", + "An administrator removed group {group}" : "管理員已將群組 {group} 移除", + "{actor} added team {circle}" : "{actor} 新增了團隊 {circle}", + "You added team {circle}" : "您新增了團隊 {circle}", + "An administrator added team {circle}" : "管理員新增了團隊 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了團隊 {circle}", + "You removed team {circle}" : "您移除了團隊 {circle}", + "An administrator removed team {circle}" : "管理員移除了團隊 {circle}", + "{actor} added {phone}" : "{actor} 添加了 {phone}", + "You added {phone}" : "您添加了 {phone}", + "An administrator added {phone}" : "管理員添加了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "您移除了 {phone}", + "An administrator removed {phone}" : "管理員移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor} 晉升 {user} 為主持人", + "You promoted {user} to moderator" : "您晉升 {user} 為主持人", + "{actor} promoted you to moderator" : "{actor} 晉升您為主持人", + "An administrator promoted you to moderator" : "管理員晉升了您為主持人", + "An administrator promoted {user} to moderator" : "管理員晉升了 {user} 為主持人", + "{actor} demoted {user} from moderator" : "{actor} 將 {user} 從主持人降級", + "You demoted {user} from moderator" : "您將 {user} 從主持人降級", + "{actor} demoted you from moderator" : "{actor} 將您從主持人降級", + "An administrator demoted you from moderator" : "管理員將您從主持人降級", + "An administrator demoted {user} from moderator" : "管理員將 {user} 從主持人降級", + "{actor} shared a file which is no longer available" : "{actor} 共享了一個不再可用的檔案", + "You shared a file which is no longer available" : "您共享了一個不再可用的檔案", + "File shares are currently not supported in federated conversations" : "在聯合對話中目前不支援檔案共享", + "The shared location is malformed" : "分享位置格式錯誤", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 設置了 Matterbridge 以將此對話與其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "您設置了 Matterbridge 以將此對話與其他聊天同步", + "{actor} created thread {title}" : "{actor} 建立了討論串 {title}", + "You created thread {title}" : "您建立了討論串 {title}", + "{actor} renamed thread {title}" : "{actor} 重新命名了討論串 {title}", + "You renamed thread {title}" : "您重新命名了討論串 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 的配置", + "You updated the Matterbridge configuration" : "您更新了 Matterbridge 的配置", + "{actor} removed the Matterbridge configuration" : "{actor} 刪除了 Matterbridge 的配置", + "You removed the Matterbridge configuration" : "您刪除了 Matterbridge 的配置", + "{actor} started Matterbridge" : "{actor} 啟動了Matterbridge", + "You started Matterbridge" : "您啟動了Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "您停止了 Matterbridge", + "{actor} deleted a message" : "{actor} 刪除了訊息", + "You deleted a message" : "您刪除了訊息", + "{actor} edited a message" : "{actor} 編輯了訊息", + "You edited a message" : "您編輯了訊息", + "{actor} pinned a message" : "{actor} 釘選了訊息", + "You pinned a message" : "您釘選了訊息", + "{actor} unpinned a message" : "{actor} 取消釘選了訊息", + "Message was automatically unpinned" : "訊息已自動取消釘選", + "You unpinned a message" : "您取消釘選了訊息", + "{actor} deleted a reaction" : "{actor} 刪除了反應", + "You deleted a reaction" : "您刪除了反應", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您將訊息過期時間設置為%n星期"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您將訊息過期時間設置為%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您將訊息過期時間設置為%n小時"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您將訊息過期時間設置為%n分鐘"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} 將訊息過期時間設置為%n星期"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} 將訊息過期時間設置為%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} 將訊息過期時間設置為%n小時"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} 將訊息過期時間設置為%n分鐘"], + "{actor} disabled message expiration" : "{actor} 已停用訊息過期時間", + "You disabled message expiration" : "您已停用訊息過期時間", + "{actor} cleared the history of the conversation" : "{actor} 清除了對話的歷史記錄", + "You cleared the history of the conversation" : "你清除了對話的歷史記錄", + "{actor} set the conversation picture" : "{actor} 設置了對話圖片", + "You set the conversation picture" : "您設置了對話圖片", + "{actor} removed the conversation picture" : "{actor} 移除了對話圖片", + "You removed the conversation picture" : "您移除了對話圖片", + "{actor} ended the poll {poll}" : "{actor} 結束了投票 {poll}", + "You ended the poll {poll}" : "您結束了投票 {poll}", + "{actor} started the video recording" : "{actor} 開始錄影", + "You started the video recording" : "您開始錄影", + "{actor} stopped the video recording" : "{actor} 停止了錄影", + "You stopped the video recording" : "您停止了錄影", + "{actor} started the audio recording" : "{actor} 開始錄音", + "You started the audio recording" : "您開始錄音", + "{actor} stopped the audio recording" : "{actor} 停止了錄音", + "You stopped the audio recording" : "您停止了錄音", + "The recording failed" : "錄製失敗", + "Someone voted on the poll {poll}" : "有人在民意調查 {poll} 中投票", + "Message deleted by author" : "訊息被作者刪除", + "Message deleted by {actor}" : "訊息被 {actor} 刪除", + "Message deleted by you" : "訊息被您刪除", + "Deleted user" : "已刪除的用戶", + "Unknown number" : "號碼不詳", + "Administration" : "管理", + "System" : "系统", + "%s (guest)" : "%s(訪客)", + "Missed call" : "未接來電", + "Unanswered call" : "未接通話", + "Call ended (Duration {duration})" : "通話已結束(持續時間 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "通話因達到最長通話時長(持續時間 {duration})而結束", + "{actor} ended the call (Duration {duration})" : "{actor} 結束了通話(持續時間 {duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["與 %n 位訪客的通話因達到最長通話時間(持續時間 {duration})而結束"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["與 %n 位訪客的通話結束(持續時間 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 結束了與 %n 位客人的通話(持續時間 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "與{user1}的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} ended (Duration {duration})" : "與 {user1}的通話已結束(持續時間 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 結束了與 {user1} 的通話(持續時間 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}及 {user2} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} and {user2} ended (Duration {duration})" : "與 {user1} 及 {user2} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 結束了與 {user1} 和 {user2} 的通話(持續時間 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2} 和 {user3} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3} 和 {user4} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 結束了與 {user1}﹑{user2}﹑{user3}﹑{user4} 和 {user5} 的通話(持續時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中 {user} 的訊息", + "Message of {user}" : "{user} 的訊息", + "Message of a deleted user in {conversation}" : "{conversation} 中已刪除用戶的訊息", + "Talk conversations" : "Talk 對話", + "Talk to %s" : "與 %s 通話", + "An error occurred. Please contact your administrator." : "發生錯誤,請聯絡管理員。", + "App disabled" : "已停用應用程式", + "Conversation subfolders are disabled" : "已停用對話子資料夾", + "Storage quota exceeded" : "超過儲存空間配額", + "Could not prepare conversation folder" : "無法準備對話資料夾", + "File not found" : "找不到檔案", + "Path must point to a file" : "路徑必須指向檔案", + "File is not inside the conversation draft folder for this room" : "檔案不在此聊天室的草稿資料夾中", + "File is not shared, or shared but not with the user" : "檔案未分享,或未與用戶分享", + "No account available to delete." : "沒有可刪除的帳戶。", + "Poll" : "民意調查", + "Password needs to be set" : "需要設定密碼", + "Uploading the file failed" : "上傳檔案失敗", + "No image file provided" : "未提供圖像", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", + "Invalid image" : "圖像無效", + "Unknown filetype" : "檔案類型不詳", + "Talk mentions" : "Talk 提及", + "More conversations" : "更多對話", + "Say hi to your friends and colleagues!" : "跟大家打招呼", + "No unread mentions" : "沒有未讀的 @提及", + "Call in progress" : "正在通話中…", + "You were mentioned" : "您被提及", + "Write to conversation" : "寫到對話", + "Writes event information into a conversation of your choice" : "將活動資訊寫入您選擇的對話中", + "Missing email field in header line" : "標題行中缺少電郵地址欄位", + "Following lines are invalid: %s" : "以下行無效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀請您加入對話「%2$s」。", + "You were invited to conversation \"%s\"." : "您被邀請加入對話「%s」。", + "Conversation invitation" : "對話邀請", + "Scheduled time" : "排定時間", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "您也可以使用以下細節通過電話撥入", + "Dial-in information" : "撥入細節", + "Meeting ID" : "會議 ID", + "Your PIN" : "您的 PIN", + "Click the button below to join the lobby now." : "點擊下方按鈕以立刻加入等候室。", + "Click the link below to join the lobby now." : "點選下方連結以立刻加入等候室。", + "Join lobby for \"%s\"" : "加入「%s」的等候室", + "Click the button below to join the conversation now." : "點選下方按鈕以立刻加入對話。", + "Click the link below to join the conversation now." : "點選下方連結以立刻加入對話。", + "Join \"%s\"" : "加入「%s」", + "Meeting" : "會議", + "Password request: %s" : "索取密碼: %s", + "Private conversation" : "私人對話", + "Deleted user (%s)" : "已刪除用戶(%s)", + "Failed to upload call recording" : "上傳通話錄音失敗", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "錄音伺服器無法上傳通話 {call} 的錄音。請聯絡管理員。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "撤銷通告", + "Call recording now available" : "通話錄音現已可用", + "The recording for the call in {call} was uploaded to {file}." : "{call} 中的通話錄音已上傳到 {file}。", + "Transcript now available" : "通話抄本現已可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 中的通話抄本已上傳到 {file}。", + "Failed to transcript call recording" : "通話錄音轉抄本失敗", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處創建錄音抄本。請聯絡管理員。", + "Call summary now available" : "通話摘要現已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 通話的摘要已上傳至 {file}。", + "Failed to summarize call recording" : "通話錄音文字摘要失敗", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立摘要。請聯絡管理員。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀請您加入在 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "婉拒", + "{user1} invited you to a federated conversation" : "{user1} 邀請您加入聯合對話", + "Someone reacted" : "有人回應了", + "New message" : "新郵件", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通告", + "Someone reacted in a private conversation" : "有人在私人對話中反應了", + "You received a message in a private conversation" : "您在私人對話中收到訊息", + "Reminder in a private conversation" : "私人對話中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人對話中提及您", + "Notification in a private conversation" : "私人對話中的通知", + "Reminder: You in {call}" : "提醒:您在 {call} 中", + "Reminder: {user} in {call}" : "提醒:{user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已刪除的用戶在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:{guest}(訪客)在 {call} 中", + "Reminder: Guest in {call}" : "提醒:訪客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 使用 {reaction} 做出反應", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中使用 {reaction} 做出反應", + "Deleted user reacted with {reaction} in {call}" : "已刪除的使用者在 {call} 中使用 {reaction} 做出反應", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}(訪客)在 {call} 中使用 {reaction} 做出反應", + "Guest reacted with {reaction} in {call}" : "訪客在 {call} 中使用 {reaction} 做出反應", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "{call} 中已刪除的 {user}", + "{guest} (guest) in {call}" : "{call} 中的 {guest}(訪客)", + "Guest in {call}" : "{call} 中的訪客", + "{user} sent you a private message" : "{user} 向您發送了一條私人訊息", + "{user} sent a message in conversation {call}" : "{user} 向對話 {call} 發送了一條訊息", + "A deleted user sent a message in conversation {call}" : "刪除的用戶在對話 {call} 中發送了一條訊息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(訪客)向對話 {call} 發送了一條訊息", + "A guest sent a message in conversation {call}" : "一位訪客向對話 {call} 發送了一條訊息", + "{user} replied to your private message" : "{user} 回覆了您的私人留言", + "{user} replied to your message in conversation {call}" : "{user} 在對話 {call} 中回覆了您的訊息", + "A deleted user replied to your message in conversation {call}" : "刪除的用戶在對話 {call} 中回覆了您的訊息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(guest)在對話 {call} 中回覆了您的訊息", + "A guest replied to your message in conversation {call}" : "一位來賓在對話 {call} 中回覆了您的訊息", + "Reminder: You in private conversation {call}" : "提醒:您在私人對話 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已刪除的用戶在私人對話 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私人對話中", + "Reminder: You in conversation {call}" : "提醒:您在對話 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在對話 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已刪除的用戶在對話 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:{guest}(訪客)在對話 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:訪客在對話 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user} 對您的私人訊息做出了 {reaction} 的反應", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "已刪除 {user} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "來賓 {guest} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "A guest reacted with {reaction} to your message in conversation {call}" : "來賓 {guest} 在對話 {call} 中對您的訊息做出了 {reaction} 反應", + "{user} mentioned you in a private conversation" : "{user} 在私人對話中提及您", + "{user} mentioned group {group} in conversation {call}" : "{user} 在對話 {call} 中提及群組 {group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在對話 {call} 中提及團隊 {team}", + "{user} mentioned everyone in conversation {call}" : "{user} 在對話 {call} 中提及所有人", + "{user} mentioned you in conversation {call}" : "{user} 在對話 {call} 中提及您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及群組 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及團隊 {team}", + "A deleted user mentioned everyone in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及所有人", + "A deleted user mentioned you in conversation {call}" : "一位已刪除的用戶在對話 {call} 中提及您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及群組 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及團隊 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及您", + "A guest mentioned group {group} in conversation {call}" : "一位訪客在對話 {call} 中提及群組 {group}", + "A guest mentioned team {team} in conversation {call}" : "一位訪客在對話 {call} 中提及團隊 {team}", + "A guest mentioned everyone in conversation {call}" : "一位訪客在對話 {call} 中提及所有人", + "A guest mentioned you in conversation {call}" : "一位訪客在對話 {call} 中提及您", + "View message" : "檢視訊息", + "Dismiss reminder" : "撤銷提醒", + "View chat" : "檢視聊天", + "{user} invited you to a group conversation: {call}" : "{user} 邀請您參加群組對話:{call}", + "Join call" : "加入通話", + "Answer call" : "接聽通話", + "{user} would like to talk with you" : "{user} 想與您交談", + "Call back" : "回電", + "You missed a call from {user}" : "您錯過了 {user} 的來電", + "Accept call" : "接聽通話", + "Incoming phone call from {call}" : "{call} 的來電", + "You missed a phone call from {call}" : "您錯過了 {call} 的來電", + "A group call has started in {call}" : "{call} 中的群組通話已開始", + "You missed a group call in {call}" : "您錯過了 {call} 中的群組通話", + "{email} is requesting the password to access {file}" : "{email} 請求密碼以存取 {file}", + "{email} tried to request the password to access {file}" : "{email} 嘗試請求密碼以存取 {file}", + "Someone is requesting the password to access {file}" : "有人請求密碼以存取 {file}", + "Someone tried to request the password to access {file}" : "有人嘗試請求密碼以存取 {file}", + "Open settings" : "開啟設定", + "Hosted signaling server added" : "添加了架設好的訊號伺服器", + "The hosted signaling server is now configured and will be used." : "已配置好託管的信號伺服器並將被使用。", + "Hosted signaling server removed" : "已移除架設好的訊號伺服器", + "The hosted signaling server was removed and will not be used anymore." : "託管的信號伺服器已刪除,將不再使用。", + "Hosted signaling server changed" : "已更新架設好的訊號伺服器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "託管的信令伺服器帳戶已將狀態從 “ {oldstatus}” 更改為 “{newstatus}”。", + "pending" : "待定", + "active" : "啟用", + "expired" : "已過期", + "blocked" : "被封鎖", + "error" : "錯誤", + "The certificate of {host} expires in {days} days" : "{host} 的證書將在 {days} 天後過期", + "The certificate of {host} expired" : "{host} 的證書已過期", + "Contact via Talk" : "透過 Talk 聯絡", + "Open Talk" : "開啟 Talk", + "Default" : "默認", + "Send messages, create threads, and start voice and video calls." : "傳送訊息、建立討論串、開始音訊與視訊通話。", + "Presentation" : "簡報", + "Voice room" : "語音聊天室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通話,非常適合閒聊或臨時開會。", + "Webinar" : "網絡研討會", + "Conversations" : "對話", + "Messages in current conversation" : "目前對話中的訊息", + "{user}" : "{user}", + "Messages" : "訊息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "其他對話中的訊息", + "One-to-one rooms always need to show the other users avatar" : "一對一的房間一律需要顯示其他用戶的虛擬化身", + "Invalid emoji character" : "無效的 emoji 字元", + "Invalid background color" : "無效的背景顏色", + "Avatar image is not square" : "虛擬化身圖像不是正方形", + "Room {number}" : "聊天室 {number}", + "Other" : "其它", + "Failed to request trial because the trial server is unreachable. Please try again later." : "由於聯繫不到試用伺服器,因此無法請求試用。請稍後再試。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此安裝的身分驗證存在問題。可能無法從外部訪問以驗證其URL。", + "Something unexpected happened." : "發生了意外情況。", + "The URL is invalid." : "URL 無效。", + "An HTTPS URL is required." : "需要 HTTPS URL。", + "The email address is invalid." : "電郵地址無效。", + "The language is invalid." : "語言無效。", + "The country is invalid." : "國家無效。", + "There is a problem with the request of the trial. Please check your logs for further information." : "試用請求有問題。請檢查您的記錄以獲取更多資訊。", + "Too many requests are send from your servers address. Please try again later." : "您的伺服器地址發送了太多請求。請稍後再試。", + "There is already a trial registered for this Nextcloud instance." : "此 Nextcloud 實例已經有一個試用用戶註冊。", + "Something unexpected happened. Please try again later." : "發生了意外情況。請稍後再試。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "由於試用伺服器的行為不正確,因此無法請求試用。請稍後再試。", + "Trial requested but failed to get account information. Please check back later." : "已請求試用,但無法獲取帳戶信息。請稍後再試。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此請求的身分驗證存在問題。也許無法從外部聯繫它以驗證其URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "由於試用伺服器的行為異常,因此無法擷取帳戶資訊。請稍後再試。", + "There is a problem with fetching the account information. Please check your logs for further information." : "提取帳戶資訊時出現問題。請檢查您的日誌以獲取更多資訊。", + "There is no such account registered." : "沒有這樣的帳戶註冊。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "由於無法連接試用伺服器,因此無法擷取帳戶資訊。請稍後再試。", + "Deleting the hosted signaling server account failed. Please check back later." : "刪除託管的信令伺服器帳戶失敗。請稍後再試。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "由於試用伺服器的行為異常,因此無法刪除帳戶。請稍後再試。", + "There is a problem with deleting the account. Please check your logs for further information." : "刪除帳戶存在問題。請檢查系統日誌以獲取更多信息。", + "Too many requests are sent from your servers address. Please try again later." : "您的伺服器地址發送了太多請求。請稍後再試。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "由於無法訪問試用伺服器,因此無法刪除帳戶。請稍後再檢查。", + "Note to self" : "給自己的備註", + "A place for your private notes, thoughts and ideas" : "一個用於儲存您的私人筆記、思考和想法的地方。", + "Transcript is AI generated and may contain mistakes" : "轉錄為人工智慧產生,可能有錯", + "Summary is AI generated and may contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Let's get started!" : "我們開始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是一個安全的自托管通訊平台,與 Nextcloud 生態系統無縫集成。\n\n#### Nextcloud Talk 的重要功能:\n\n* 在私人與群組聊天中傳送訊息\n* 音訊與視訊通話\n* 檔案分享以及其他 Nextcloud 應用程式的整合\n* 可自訂的對話設定、審核與隱私控制\n* 網頁、桌面與行動裝置(iOS 與 Android)\n* 私密且安全的通訊\n\n如需了解更多信息,請參見[用戶說明書] (https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 歡迎使用 Nextcloud Talk\n\nNextcloud Talk 是與 Nextcloud 整合的私密且功能強大的訊息應用程式。以私人或群組對話方式聊天、透過語音與視訊通話進行協作、舉辦網路研討會與活動、自訂您的對話等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 格式化文字以建立多采多姿的訊息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 語法來格式化您的訊息。例如,套用**粗體**或*義式斜體*格式,或「將文字突顯為程式碼」。您甚至可以建立表格,並在文字中加入標題。\n\n需要修正錯字或變更格式嗎?按一下訊息功能表中的「編輯訊息」即可編輯您的訊息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 新增附件與連結\n\n使用「+」按鈕從 Nextcloud Hub 附加檔案。從檔案與各種 Nextcloud 應用程式分享項目。有些應用程式甚至支援互動小工具,例如 Text 應用程式。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 讓對話流暢:提及用戶、回應訊息等\n\n您可以使用 %s 來提及對話中的每個人,或是輸入「@」並從清單中選出特定參與者的名字來提及他們。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回覆訊息、將訊息轉寄給其他聊天室與夥伴,或複製訊息內容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智慧型挑選程式做更多\n\n只要輸入「/」或前往「+」功能表,即可開啟智慧型挑選程式,在這裡您可以將各種內容附加到訊息中。您可以設定智慧型挑選程式,讓它能夠加入 Nextcloud 應用程式、GIF、地圖位置、AI 產生的內容等項目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理對話設定\n\n在對話功能表中,您可以存取各種設定來管理您的對話,例如\n* 編輯對話資訊\n* 管理通知\n* 套用許多審核規則\n* 設定存取權限與安全性\n* 啟用機器人\n* 以及更多!", + "Andorra" : "安道爾", + "United Arab Emirates" : "阿聯酋", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布達", + "Anguilla" : "安圭拉", + "Albania" : "阿爾巴尼亞", + "Armenia" : "亞美尼亞", + "Angola" : "安哥拉", + "Antarctica" : "南極洲", + "Argentina" : "阿根廷", + "American Samoa" : "美屬薩摩亞", + "Austria" : "奧地利", + "Australia" : "澳洲", + "Aruba" : "阿魯巴", + "Åland Islands" : "奧蘭", + "Azerbaijan" : "阿塞拜疆", + "Bosnia and Herzegovina" : "波斯尼亞及黑塞哥維那", + "Barbados" : "巴巴多斯", + "Bangladesh" : "孟加拉", + "Belgium" : "比利時", + "Burkina Faso" : "布基納法索", + "Bulgaria" : "保加利亞", + "Bahrain" : "巴林", + "Burundi" : "布隆迪", + "Benin" : "貝寧", + "Saint Barthélemy" : "聖巴瑟米", + "Bermuda" : "百慕達", + "Brunei Darussalam" : "汶萊", + "Bolivia, Plurinational State of" : "玻利維亞", + "Bonaire, Sint Eustatius and Saba" : "荷蘭加勒比區", + "Brazil" : "巴西", + "Bahamas" : "巴哈馬", + "Bhutan" : "不丹", + "Bouvet Island" : "布韋島", + "Botswana" : "博茨瓦納", + "Belarus" : "白俄羅斯", + "Belize" : "伯利茲", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科科斯(基林)群島", + "Congo, the Democratic Republic of the" : "剛果民主共和國", + "Central African Republic" : "中非共和國", + "Congo" : "剛果共和國", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "科特迪瓦", + "Cook Islands" : "庫克群島", + "Chile" : "智利", + "Cameroon" : "喀麥隆", + "China" : "中國大陸", + "Colombia" : "哥倫比亞", + "Costa Rica" : "哥斯達黎加", + "Cuba" : "古巴", + "Cabo Verde" : "佛得角", + "Curaçao" : "古拉索", + "Christmas Island" : "聖誕島領地", + "Cyprus" : "塞浦路斯", + "Czechia" : "捷克", + "Germany" : "德國", + "Djibouti" : "吉布提", + "Denmark" : "丹麥", + "Dominica" : "多米尼克", + "Dominican Republic" : "多明尼加共和國", + "Algeria" : "阿爾及利亞", + "Ecuador" : "厄瓜多爾", + "Estonia" : "愛沙尼亞", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄立特里亞", + "Spain" : "西班牙", + "Ethiopia" : "埃塞俄比亞", + "Finland" : "芬蘭", + "Fiji" : "斐濟", + "Falkland Islands (Malvinas)" : "福克蘭群島", + "Micronesia, Federated States of" : "密克羅尼西亞聯邦", + "Faroe Islands" : "法羅群島", + "France" : "法國", + "Gabon" : "加蓬", + "United Kingdom of Great Britain and Northern Ireland" : "英國", + "Grenada" : "格林納達", + "Georgia" : "格魯吉亞", + "French Guiana" : "法屬圭亞那", + "Guernsey" : "根西島", + "Ghana" : "迦納", + "Gibraltar" : "直布羅陀", + "Greenland" : "格陵蘭", + "Gambia" : "岡比亞", + "Guinea" : "幾內亞", + "Guadeloupe" : "瓜地洛普", + "Equatorial Guinea" : "赤道幾內亞", + "Greece" : "希臘", + "South Georgia and the South Sandwich Islands" : "南喬治亞和南桑威奇群島", + "Guatemala" : "危地馬拉", + "Guam" : "關島", + "Guinea-Bissau" : "幾內亞比紹", + "Guyana" : "圭亞那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德島和麥克唐納群島", + "Honduras" : "洪都拉斯", + "Croatia" : "克羅地亞", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印尼", + "Ireland" : "愛爾蘭", + "Israel" : "以色列", + "Isle of Man" : "萌島", + "India" : "印度", + "British Indian Ocean Territory" : "英屬印度洋領地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗", + "Iceland" : "冰島", + "Italy" : "意大利", + "Jersey" : "澤西島", + "Jamaica" : "牙買加", + "Jordan" : "約旦", + "Japan" : "日本", + "Kenya" : "肯亞", + "Kyrgyzstan" : "吉爾吉斯斯坦", + "Cambodia" : "柬埔寨", + "Kiribati" : "基里巴斯", + "Comoros" : "科摩羅", + "Saint Kitts and Nevis" : "聖吉斯納域斯", + "Korea, Democratic People's Republic of" : "北韓", + "Korea, Republic of" : "南韓", + "Kuwait" : "科威特", + "Cayman Islands" : "開曼群島", + "Kazakhstan" : "哈薩克", + "Lao People's Democratic Republic" : "老撾", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "聖露西亞", + "Liechtenstein" : "列支敦士登", + "Sri Lanka" : "斯里蘭卡", + "Liberia" : "利比里亞", + "Lesotho" : "萊索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "盧森堡", + "Latvia" : "拉脫維亞", + "Libya" : "利比亞", + "Morocco" : "摩洛哥", + "Monaco" : "摩納哥", + "Moldova, Republic of" : "摩爾多瓦共和國", + "Montenegro" : "黑山", + "Saint Martin (French part)" : "法屬聖馬丁島", + "Madagascar" : "馬達加斯加", + "Marshall Islands" : "馬紹爾群島", + "North Macedonia" : "北馬其頓", + "Mali" : "馬里", + "Myanmar" : "緬甸", + "Mongolia" : "蒙古", + "Macao" : "澳門", + "Northern Mariana Islands" : "北馬利安納群島", + "Martinique" : "馬丁尼克", + "Mauritania" : "毛里塔尼亞", + "Montserrat" : "蒙特塞拉特", + "Malta" : "馬爾他", + "Mauritius" : "毛里求斯", + "Maldives" : "馬爾代夫", + "Malawi" : "馬拉維", + "Mexico" : "墨西哥", + "Malaysia" : "馬來西亞", + "Mozambique" : "莫桑比克", + "Namibia" : "納米比亞", + "New Caledonia" : "新喀里多尼亞", + "Niger" : "尼日爾", + "Norfolk Island" : "諾福克島", + "Nigeria" : "尼日利亞", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷蘭", + "Norway" : "挪威", + "Nepal" : "尼泊爾", + "Nauru" : "瑙魯", + "Niue" : "紐埃島", + "New Zealand" : "紐西蘭", + "Oman" : "阿曼", + "Panama" : "巴拿馬", + "Peru" : "秘魯", + "French Polynesia" : "法屬波利尼西亞", + "Papua New Guinea" : "巴布亞新幾內亞", + "Philippines" : "菲律賓", + "Pakistan" : "巴基斯坦", + "Poland" : "波蘭", + "Saint Pierre and Miquelon" : "聖皮埃與密克隆群島", + "Pitcairn" : "皮特肯群島", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕勞", + "Paraguay" : "巴拉圭", + "Qatar" : "卡塔爾", + "Réunion" : "留尼旺島", + "Romania" : "羅馬尼亞", + "Serbia" : "塞爾維亞", + "Russian Federation" : "俄羅斯", + "Rwanda" : "盧旺達", + "Saudi Arabia" : "沙地阿拉伯", + "Solomon Islands" : "所羅門群島", + "Seychelles" : "塞舌爾", + "Sudan" : "蘇丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "聖赫勒拿、阿森松和特里斯坦-達庫尼亞", + "Slovenia" : "斯洛文尼亞", + "Svalbard and Jan Mayen" : "斯瓦爾巴和揚馬延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "塞拉利昂", + "San Marino" : "聖馬力諾", + "Senegal" : "塞內加爾", + "Somalia" : "索馬里", + "Suriname" : "蘇利南", + "South Sudan" : "南蘇丹", + "Sao Tome and Principe" : "聖多美和普林西比", + "El Salvador" : "薩爾瓦多", + "Sint Maarten (Dutch part)" : "荷屬聖馬丁", + "Syrian Arab Republic" : "敘利亞", + "Eswatini" : "史瓦濟蘭王國", + "Turks and Caicos Islands" : "特克斯及凱科斯群島", + "Chad" : "乍得共和國", + "French Southern Territories" : "法屬南部和南極領地", + "Togo" : "多哥", + "Thailand" : "泰國", + "Tajikistan" : "塔吉克斯坦", + "Tokelau" : "托克勞", + "Timor-Leste" : "東帝汶", + "Turkmenistan" : "土庫曼", + "Tunisia" : "突尼西亞", + "Tonga" : "湯加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "千里達及多巴哥", + "Tuvalu" : "圖瓦盧", + "Taiwan, Province of China" : "台灣,中華民國", + "Tanzania, United Republic of" : "坦桑尼亞", + "Ukraine" : "烏克蘭", + "Uganda" : "烏干達", + "United States Minor Outlying Islands" : "美國本土外小島嶼", + "United States of America" : "美國", + "Uruguay" : "烏拉圭", + "Uzbekistan" : "烏茲別克", + "Holy See" : "梵蒂岡", + "Saint Vincent and the Grenadines" : "聖文森特和格林納丁斯", + "Venezuela, Bolivarian Republic of" : "委內瑞拉", + "Virgin Islands, British" : "英屬處女群島", + "Virgin Islands, U.S." : "美屬處女群島", + "Viet Nam" : "越南", + "Vanuatu" : "瓦努阿圖", + "Wallis and Futuna" : "瓦利斯和富圖那", + "Samoa" : "薩摩亞", + "Yemen" : "也門", + "Mayotte" : "馬約特", + "South Africa" : "南非", + "Zambia" : "贊比亞", + "Zimbabwe" : "津巴布韋", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "無法檢查 WASM 載入支援。請手動檢查您的網路伺服器是否可服務 `.wasm` 檔案。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的伺服器並未正確的設定,因此無法傳遞 `.wasm` 的檔案。這通常是因為 Nginx 的設定問題所導致。對於背景模糊來說,需要一些調整才能一併傳遞 `.wasm` 的檔案。請檢查您的 Nginx 設定,和 Nextcloud 說明書中提到的建議設定。", + "Talk configuration values" : "Talk 設定值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "僅系統 cron 支援強制通話持續時間。請啟用系統 cron 或刪除 `max_call_duration` 配置。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "由於技術限制,較小的 “max_call_duration” 值(目前設定為 %d)不可強制執行。後台作業每 5 分鐘執行一次,因此使用風險自負。", + "Federation" : "聯盟", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "強烈建議在啟用聯盟 Talk 時設定「memcache.locking」。", + "High-performance backend" : "高性能後端", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未設定高效能後端 - 在沒有高效能後端的情況下執行 Nextcloud Talk 只適用於非常小規模的通話(最多 2-3 名參與者)。請設定高效能後端,以確保有多位參與者的通話能順暢運作。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高效能後端的「conversation_cluster」執行模式已棄用,在即將推出的版本中將不再支援。高效能後端現在支援真正的叢集,應該改用真正的叢集。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定義多個高效能後端已被淘汰,在即將推出的版本中將不再支援。取而代之的是在 Talk 設定中設定負載平衡器與叢集訊號伺服器。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所使用演算法 %1$s 的已儲存公鑰與儲存的私鑰不相符。請執行 %2$s 以修正問題。", + "High-performance backend not configured correctly. Run %s for details." : "未正確設定高效能後端。請執行 %s 以取得更多詳細資訊。", + "High-performance backend not configured correctly" : "未正確設定高效能後端", + "Error: Cannot connect to server" : "錯誤:無法連接到伺服器", + "Error: Server did not respond with proper JSON" : "錯誤:伺服器未使用正確的 JSON 回應", + "Error: Certificate expired" : "錯誤︰證書已過期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器和 High-performance 後端伺服器的系統時間不同步。請確保兩個伺服器都連接到時間伺服器,或手動同步它們的時間。", + "Could not get version" : "無法獲取版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "錯誤:運行版本:{version}; 要與此版本的 Talk 兼容,伺服器需要更新", + "Error: Server responded with: {error}" : "錯誤:伺服器回應:{error}", + "Error: Unknown error occurred" : "錯誤:發生不詳錯誤", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:正在執行的版本:{version};伺服器不支援此 Talk 版本的所有功能,缺少的功能:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "強烈建議在使用高效能後端執行 Nextcloud Talk 時設定記憶體快取。", + "Client Push" : "客戶端推送", + "Client Push is installed, this improves the punctuality of Talk notifications." : "已安裝客戶端推送,這會改善 Talk 通知的及時性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "{notify_push} 未安裝。這可能會導致 Talk 通知延遲。", + "Recording backend" : "記録後端系統中", + "Using the recording backend requires a High-performance backend." : "使用錄製後端需要高效能後端。", + "No recording backend configured" : "未設定錄製後端", + "SIP configuration" : "SIP 配置", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高效能後端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 電話號碼不得以 + 或 0 開頭。請移除或更新以下號碼:\n{list}", + "No SIP backend configured" : "未設定 SIP 後端系統", + "Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式", + "Conversation not found" : "未找到對話", + "Path is already shared with this conversation" : "已與此對話分享路徑", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 進行聊天、視像和音頻會議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 的聊天、視頻和音頻會議\n\n* 💬 **聊天** Nextcloud Talk 提供簡單的文本聊天功能,允許您從 Nextcloud Files 應用程式或近端裝置分享或上傳檔案,並提及其他參與者。\n* 👥 **私人、小組、公開和密碼保護的通話!** 邀請某人、整個小組或發送公開鏈接來邀請參加通話。\n* 🌐 **聯邦式聊天** 與其他 Nextcloud 用戶在他們的服務器上聊天。\n* 💻 **屏幕共享!** 與通話的參與者共享您的屏幕。\n* 🚀 **與其他 Nextcloud 應用集成**,如 Files、Calendar、User status、Dashboard、Flow、Maps、Smart picker、Contacts、Deck 等,還有更多。\n* 🌉 **與其他聊天解決方案同步** 通過 [Matterbridge](https://github.com/42wim/matterbridge/) 在 Talk 中集成,您可以輕鬆將許多其他聊天解決方案與 Nextcloud Talk 進行同步,反之亦然。", + "Leave call" : "離開通話", + "Navigating away from the page will leave the call in {conversation}" : "離開頁面導航將使通話保留在 {conversation} 中", + "Stay in call" : "保持通話", + "Error occurred when getting the conversation information" : "取得對話資訊時發生錯誤", + "Discuss this file" : "討論此檔案", + "Share this file with others to discuss it" : "與他人分享此檔案以進行討論", + "Share this file" : "分享此檔案", + "Join conversation" : "加入對話", + "This conversation is password-protected." : "此對話受密碼保護。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "您的 IP 多次嘗試密碼無效,下一次登入將會被延時 30 秒。", + "The password is wrong. Try again." : "密碼錯誤,請重試", + "Password" : "密碼", + "Submit" : "遞交", + "Error requesting the password." : "索取密碼時出錯。", + "Request password" : "索取密碼", + "This conversation has ended" : "對話已結束", + "Error occurred when joining the conversation" : "加入會話時發生了錯誤", + "Close Talk sidebar" : "關閉 Talk 側邊攔", + "Open Talk sidebar" : "開啟 Talk 側邊攔", + "Everyone" : "所有人", + "Users and moderators" : "用戶和主持人", + "Moderators only" : "僅限主持人", + "Disable calls" : "停用通話", + "Save changes" : "儲存變更", + "Saving …" : "儲存中 ...", + "Saved!" : "已儲存!", + "Limit to groups" : "限制給特定群組", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "選擇一或多個群組後,只有所選群組中的人才能參與對話。", + "Guests can still join public conversations." : "來賓仍可以加入公共對話。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "不再使用 Talk 的用戶仍將被列為以前的對話的參與者。他們的聊天訊息將被保留。", + "Limit using Talk" : "使用 Talk 的限制", + "Limit creating a public and group conversation" : "創建公開和群組對話的限制", + "Limit creating conversations" : "創建對話的限制", + "Limit starting a call" : "限制撥打通話", + "Limit starting calls" : "限制撥打通話", + "When a call has started, everyone with access to the conversation can join the call." : "通話開始後,有權存取對話的每個人都可以加入通話。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上安裝了以下機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上並未安裝機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "為主持人鎖定", + "Enabled" : "啟用", + "Disabled" : "停用", + "Bots settings" : "機器人設定", + "State" : "狀態", + "Name" : "名稱", + "Last error" : "上次錯誤", + "Total errors count" : "總錯誤數量", + "Find more bots" : "尋找更多機器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}分享設定頁面{linkedin}設定信任伺服器。", + "Beta" : "Beta 測試版", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "聯盟聊天與通話已經可以運作。附件處理將在未來的版本中推出。", + "Enable Federation in Talk app" : "啟用 Talk 應用程式中的聯邦功能", + "Permissions" : "權限", + "Allow users to be invited to federated conversations" : "允許邀請用戶加入聯合對話", + "Allow users to invite federated users into conversation" : "允許用戶邀請聯合用戶加入對話", + "Only allow to federate with trusted servers" : "僅允許與信任的伺服器聯合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "選擇一或多個群組後,只有所選群組中的人才能邀請聯合用戶到對話中。", + "Groups allowed to invite federated users" : "允許邀請聯合用戶的群組", + "Select groups …" : "選取群組 …", + "All messages" : "全部消息", + "@-mentions only" : "僅被 @提及的消息", + "Off" : "關閉", + "General settings" : "一般設定", + "Default notification settings" : "預設通告設定", + "Default group notification" : "預設群組通告", + "Default group notification for new groups" : "新群組的默認群組通告", + "Integration into other apps" : "整合=到其他應用程序", + "Allow conversations on files" : "允許檔案對話", + "Allow conversations on public shares for files" : "允許公共分享檔案對話", + "End-to-end encrypted calls" : "端到端加密通話", + "Enable encryption" : "啟用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已設定 SIP 橋接的端到端加密通話需要較新版本的高效能後端與 SIP 橋接器。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "行動裝置客戶端目前不支援端到端加密通話。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "通過單擊上面的按鈕,表格中的資訊將發送到 Struktur AG 的伺服器。您可以在{linkstart} spreed.eu {linkend}上找到更多資訊。", + "Pending" : "擱置中", + "Error" : "錯誤", + "Blocked" : "已封鎖", + "Active" : "啟動", + "Expired" : "已過期", + "Never" : "從不", + "The trial could not be requested. Please try again later." : "無法請求試用版。請稍後再試。", + "The account could not be deleted. Please try again later." : "無法刪除該帳戶。請稍後再試。", + "Hosted High-performance backend" : "託管的高效能後端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我們的合作夥伴 Struktur AG 提供信令伺服器的託管服務。您只需要填寫下面的表格,您的 Nextcloud 就會為您申請該服務。為您設置伺服器後,將自動填寫憑據。這將覆蓋現有的信令伺服器設置。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "如果您的高性能後端系統帳戶包括 STUN 和/或 TURN 功能,設定將被相應更新。", + "URL of this Nextcloud instance" : "此Nextcloud的 URL", + "Full name of the user requesting the trial" : "請求試用的用戶的全名", + "Email of the user" : "用戶電郵地址", + "Language" : "語言", + "Country" : "國家", + "Request signaling server trial" : "請求信號伺服器試用", + "You can see the current status of your hosted signaling server in the following table." : "您可以在下表中查看託管的信令伺服器的目前狀態。", + "Status" : "狀態", + "Created at" : "建立於", + "Expires at" : "有效期至", + "Limits" : "限制", + "STUN included" : "包括 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包括 TURN", + "Delete the signaling server account" : "刪除 signaling 伺服器帳戶", + "_%n user_::_%n users_" : ["%n 用戶"], + "Installed version: {version}" : "安裝版本: {version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安裝 Matterbridge 將 Nextcloud Talk 連結到其他服務,請訪問其 {linkstart1}GitHub頁面{linkend} 以了解更多詳細信息。下載和安裝該應用程式可能需要一段時間。如果超時,請從 {linkstart2}Nextcloud App Store{linkend} 人手安裝。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge binary 的權限不正確。請確保 Matterbridge binary 歸正確的用戶所有並且可以執行。可以在 \"/…/nextcloud/apps/talk_matterbridge/bin/\" 中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到或無法執行 Matterbridge 可執行代碼。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "您也可以通過人手設置 Matterbridge 可執行代碼的路徑。詳情請參閱 {linkstart} Matterbridge 整合指南{linkend}。", + "Downloading …" : "下載中…", + "Install Talk Matterbridge" : "安裝 Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "安裝 Matterbridge 應用程式時發生錯誤", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安裝 Talk Matterbridge 時發生錯誤。請手動安裝。", + "Failed to execute Matterbridge binary." : "無法執行 Matterbridge。", + "Matterbridge integration" : "Matterbridge 整合", + "Enable Matterbridge integration" : "啟用 Matterbridge 整合", + "Status: Checking connection" : "狀態:正在檢查連接", + "OK: Running version: {version}" : "OK:運行版本:{version}", + "Error: Server seems to be a Signaling server" : "錯誤:伺服器似乎是 Signaling 伺服器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器和 Recording 後端伺服器的系統時間不同步。請確保兩個伺服器都連接到時間伺服器,或手動同步它們的時間。", + "Recording backend URL" : "錄製後端系統 URL", + "Validate SSL certificate" : "驗證 SSL憑證", + "Delete this server" : "刪除此伺服器", + "Test this server" : "測試此伺服器", + "Disabled for all calls" : "對所有通話停用", + "Enabled for all calls" : "對所有通話啟用", + "Configurable on conversation level by moderators" : "可由主持人在對話層級配置", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP 設定「upload_max_filesize」或「post_max_size」僅允許上傳最大 {maxUpload} 的檔案。", + "Recording backend settings saved" : "已保存後端系統記録伺服器設定", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "主持人將被允許在對話級別啟用同意。 每位參與者在加入此對話中的每個通話之前都需要給予錄製同意。", + "The consent to be recorded will be required for each participant before joining every call." : "在每次通話之前,每位參與者都需要同意錄製。", + "The consent to be recorded is not required." : "並不需要獲得錄音同意。", + "Recording backend configuration is only possible with a High-performance backend." : "僅當使用高效能後端時才能設定錄製後端。", + "Add a new recording backend server" : "添加新後端系統記録伺服器", + "Shared secret" : "分享了密碼", + "Recording consent" : "錄製同意", + "Recording transcription" : "錄音轉錄", + "Automatically transcribe call recordings with a transcription provider" : "使用轉錄提供者自動轉錄通話錄音", + "Automatically summarize call recordings with transcription and summary providers" : "使用轉錄與摘要提供者自動總結通話錄音", + "SIP configuration saved!" : "已保存 SIP 配置!", + "SIP configuration is only possible with a High-performance backend." : "SIP 組態僅於有高效能後端時可用。", + "Enable SIP Dial-out option" : "啟用 SIP 撥出選項", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling 伺服器必須更新以支援 SIP 撥出功能。", + "Do not show SIP Dial-out caller number" : "不要顯示 SIP Dial-out 來電者號碼。", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名號碼應顯示為「未知號碼」或「隱藏號碼」給接聽者。", + "Dial-out number" : "Dial-out 電話號碼", + "E164 formatted number used as a fallback caller number for outgoing calls" : "以 E164 格式顯示的號碼用作外撥電話的備用來電號碼", + "Dial-out prefix" : "Dial-out 前綴", + "Prefix to configured user number for outgoing calls (default is `+`)" : "外撥電話時,配置用戶號碼的前綴(默認為 `+`)", + "Restrict SIP configuration" : "限制SIP配置", + "Enable SIP configuration" : "啟用 SIP 配置", + "Only users of the following groups can enable SIP in conversations they moderate" : "只有以下群組的用戶才能在他們主持的對話中啟用SIP", + "Phone number (Country)" : "電話號碼(國家)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "此資訊通過邀請電子郵件發送,並在邊欄中顯示給所有參與者。", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 後端系統 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用特點", + "Error: Websocket connection failed" : "錯誤:Websocket 連接失敗", + "Error code" : "錯誤代碼", + "Error message" : "錯誤訊息", + "Error: Websocket connection failed. Check browser console" : "錯誤:Websocket 連接失敗。請檢查瀏覽器主控台", + "High-performance backend URL" : "高性能後端 URL", + "Missing High-performance backend warning hidden" : "隱藏缺少高效能後端的警告", + "High-performance backend settings saved" : "高性能後端設定已保存", + "Nextcloud Talk setup not complete" : "未完成 Nextcloud Talk 設定", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "請注意,在沒有高效能後端的情況下,如果通話有 2 位以上的參與者,參與者很可能會遇到連線問題,導致參與者的裝置負載過高。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安裝高效能後端,以確保有多位參與者的通話能順暢運作。", + "Nextcloud portal" : "Nextcloud 入口網站", + "Quick installation guide" : "快速安裝指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位參與者的通話和對話需要高效能後端。如果沒有後端,所有參與者都必須為其他參與者各自上傳自己的視訊,這極有可能造成連線問題,並對參與者的裝置造成高負載。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "使用 Nextcloud Talk 搭配高效能後端時,強烈建議設定分散式快取。", + "Add High-performance backend server" : "新增高效能後端伺服器", + "Warn about connectivity issues in calls with more than 2 participants" : "在參與者超過兩人的通話中發出連接問題的警告", + "STUN server URL" : "STUN 伺服器 URL", + "The server address is invalid" : "伺服器地址無效", + "STUN settings saved" : "STUN 設定已保存", + "STUN servers" : "STUN 伺服器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 伺服器用於確定路由器後面的參與者的公共 IP 地址。", + "Add a new STUN server" : "添加新 STUN 伺服器", + "{schema} scheme must be used with a domain" : "{schema} 方案必須與域名一起使用", + "{option1} and {option2}" : "{option1} 和 {option2}", + "{option} only" : "僅 {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN 伺服器返回成功的 ICE 候選者", + "Error: No working ICE candidates returned by the TURN server" : "錯誤:TURN 伺服器未返回任何有效的 ICE 候選者", + "Testing whether the TURN server returns ICE candidates" : "測試 TURN 伺服器是否返回 ICE 候選者", + "TURN server schemes" : "TURN 伺服器方案", + "TURN server URL" : "TURN 伺服器 URL", + "TURN server secret" : "TURN 伺服器密鑰", + "TURN server protocols" : "TURN 伺服器協定", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 伺服器用於代理(proxy)來自防火牆後參與者的流量。如果個別參與者無法連接到其他參與者,則很可能需要 TURN 伺服器。有關設置說明,請參見{linkstart}此說明書{linkend}。", + "TURN settings saved" : "TURN 設定已保存", + "TURN servers" : "TURN 伺服器", + "Add a new TURN server" : "添加新 TURN 伺服器", + "Failed" : "失敗了", + "OK" : "OK", + "Checking …" : "檢查中 ...", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗: 此瀏覽器中禁用或不支持 WebAssembly。請啟用 WebAssembly 或使用支持它的瀏覽器進行檢查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗:Web 伺服器沒有正確返回 ”.wasm” 和 “.tflite” 檔案。請查看 Talk 說明書中的“系統需求”部分。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK:Web 伺服器正確返回了 “.wasm” 和 “.tflite” 檔案。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "似乎 PHP 和 Apache 配置不兼容。 請注意,PHP 只能與 MPM_PREFORK 模塊一起使用,PHP-FPM 只能與 MPM_EVENT 模塊一起使用。", + "Web server setup checks" : "Web 伺服器設置檢查", + "Files required for virtual background can be loaded" : "可以加載虛擬背景所需的檔案", + "Federated user" : "聯盟用戶", + "Assign participants to rooms" : "將參與者分配到分組討論室", + "Configure breakout rooms" : "配置分組討論室", + "Number of breakout rooms" : "分組討論室數量︰", + "You can create from 1 to 20 breakout rooms." : "您可以建立 1 到 20 個分組討論室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自動分配參與者", + "Manually assign participants" : "人手分配參與者", + "Allow participants to choose" : "允許參與者選擇", + "Create rooms" : "創建分組討論室", + "Confirm" : "確認", + "Create breakout rooms" : "創建分組討論室", + "Reset" : "重設", + "Delete breakout rooms" : "刪除分組討論室", + "Room {roomNumber}" : "聊天室 {roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分組討論室和設置將會丟失", + "Cancel" : "取消", + "Unassigned participants" : "已取消分配參與者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "添加參與者 \"{user}\"", + "Now" : "現在", + "Invalid calendar selected" : "所選的日曆無效", + "Invalid start time selected" : "所選的開始時間無效", + "Invalid end time selected" : "所選的結束時間無效", + "Unknown error occurred" : "發生了不詳的錯誤", + "Sending no invitations" : "不發送邀請", + "{participant0} will receive an invitation" : "{participant0} 將會收到邀請", + "{participant0} and {participant1} will receive invitations" : "{participant0} 與 {participant1} 將會收到邀請", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 與 %n 個其他人將會收到邀請"], + "Invite {user}" : "邀請 {user}", + "Invite all users and emails in this conversation" : "邀請此對話中的所有使用者與電子郵件", + "Meeting created" : "創建了會議", + "Upcoming meetings" : "接下來的會議", + "Loading …" : "加載中 …", + "No upcoming meetings" : "沒有即將舉行的會議", + "Schedule a meeting" : "預先安排會議", + "Meeting title" : "會議標題", + "From" : "從", + "To" : "至", + "Calendar" : "日曆", + "Attendees" : "參與者", + "No other participants to send invitations to." : "沒有其他要傳送邀請函的參與者。", + "Add attendees" : "添加與會者", + "Save" : "儲存", + "Search participants" : "搜尋參與者", + "No results" : "沒有符合搜尋的項目", + "Done" : "完成", + "Disable live transcription" : "停用即時轉錄", + "Enable live transcription (generated by AI)" : "啟用即時轉錄(由人工智能產生)", + "Enable live transcription (Live transcriptions app is not installed)" : "啟用即時轉錄(未安裝即時轉錄應用程式)", + "Disable live translation" : "停用即時翻譯", + "Enable live translation (generated by AI)" : "啟用即時翻譯(由人工智能產生)", + "Original language" : "原先的語言", + "Live translations app is not installed" : "未安裝即時翻譯應用程式", + "Original language: {languageName}" : "原文語言:{languageName}", + "Translated language" : "翻譯語言", + "Translated language: {languageName}" : "翻譯語言:{languageName}", + "Raise hand" : "舉手", + "Raise hand (R)" : "舉手(R)", + "Lower hand" : "放下手", + "Lower hand (R)" : "放下手(R)", + "Exit full screen (F)" : "離開全螢幕(F)", + "Full screen (F)" : "全螢幕(F)", + "Speaker view" : "演講者視圖", + "Grid view" : "網格檢視", + "Error when trying to load the available live transcription languages" : "嘗試加載可用的即時轉錄語言時出錯", + "Failed to enable live transcription" : "無法啟用轉錄", + "Failed to enable live translations" : "無法啟用即時翻譯", + "Failed to disable live translations" : "無法停用即時翻譯", + "Recording consent is required" : "需要錄製同意", + "This conversation is read-only" : "對話是唯讀狀態", + "Conversation not found or not joined" : "找不到或未加入對話", + "Lobby is still active and you're not a moderator" : "等候室仍然活躍,你不是主持人", + "Connection failed" : "連線失敗", + "Reload" : "重新載入", + "{nickName} raised their hand." : "{nickName} 舉起了手。", + "A participant raised their hand." : "一位參與者舉起了手。", + "Collapse stripe" : "收合 stripe", + "Expand stripe" : "展開 stripe", + "Previous page of videos" : "視像的上一頁", + "Next page of videos" : "視像的下一頁", + "Connecting …" : "連線中...", + "Calling …" : "連接中...", + "Waiting for {user} to join the call" : "等待 {user} 加入通話...", + "Waiting for others to join the call …" : "等待其他人加入通話...", + "You can invite others in the participant tab of the sidebar" : "您可以在邊欄的“參與者”標籤中邀請其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在邊欄的“參與者”選項卡中邀請其他人,或分享此連結以邀請其他人!", + "Share this link to invite others!" : "分享此連結以邀請其他人!", + "Copy link" : "複製連結", + "You are not allowed to enable audio" : "你無權啟用音頻", + "No audio. Click to select device" : "沒有音頻。請點擊以選擇裝置", + "Mute audio" : "靜音", + "Mute audio (M)" : "靜音(M)", + "Unmute audio" : "取消靜音", + "Unmute audio (M)" : "取消靜音(M)", + "None" : "無", + "Select a microphone" : "選擇米高風", + "Select a speaker" : "選擇喇叭", + "Microphone settings" : "咪高風設定", + "Check devices" : "檢查裝置", + "Access to camera was denied" : "無法存取相機", + "Error while accessing camera: It is likely in use by another program" : "存取相機時出錯:另一個程序可能正在使用鏡頭", + "Error while accessing camera" : "存取相機時發生錯誤", + "You have been muted by a moderator" : "您已被主持人靜音", + "Hide presenter video" : "隱藏演講者視訊", + "You are not allowed to enable video" : "你無權啟用視像", + "No video. Click to select device" : "沒有視像。請點擊以選擇裝置", + "Disable video" : "停用視訊", + "Disable video (V)" : "停用視像(V)", + "Enable video" : "啟用視訊", + "Enable video (V)" : "啟用視訊(V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像 - 首次啟用視像時,您的連接將短暫中斷", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像(V)- 首次啟用視像時,您的連接將短暫中斷", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視像。首次啟用視像時,您的連接將短暫中斷", + "Select a video device" : "選擇視訊裝置", + "Show presenter" : "顯示演講者", + "You" : "您", + "Mute" : "無聲", + "Muted" : "靜音", + "Show screen" : "顯示螢幕", + "Stop following" : "停止關注", + "Connection could not be established …" : "無法建立連線 ...", + "Connection was lost and could not be re-established …" : "連接被切斷,無法重新建立 …", + "Connection could not be established. Trying again …" : "無法建立連接。 再試一次 …", + "Connection lost. Trying to reconnect …" : "連接切斷。 正在嘗試重新連接…", + "Connection problems …" : "連接問題 …", + "Collapse" : "收合", + "Expand" : "展開", + "You need to be logged in to upload files" : "您需要登入才能上傳檔案", + "Drop your files to upload" : "拖放您的檔案以上傳", + "Conversation messages" : "對話訊息", + "Scroll to bottom" : "滾動到底部", + "Post message" : "發表訊息", + "Federated conversation" : "聯合對話", + "Public conversation" : "公開對話", + "Favorite" : "我的最愛", + "Banned users" : "被封禁的用戶", + "Manage the list of banned users in this conversation." : "管理此對話中被封禁用戶的清單。", + "Manage bans" : "管理封禁", + "No banned users" : "沒有被封禁的用戶", + "Banned by:" : "封鎖者:", + "Date:" : "日期:", + "Note:" : "備註:", + "Hide details" : "隱藏細節", + "Show details" : "顯示細節", + "Unban" : "解除封禁", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日曆 ↗{linkend}中變更標題與描述。", + "Error while updating conversation name" : "更新對話名稱時發生錯誤", + "Error while updating conversation description" : "更新對話描述時發生錯誤", + "Enter a name for this conversation" : "輸入此對話名稱", + "Edit conversation name" : "編輯對話名稱", + "Edit conversation description" : "編輯對話描述", + "Enter a description for this conversation" : "輸入此對話的描述", + "Picture" : "圖片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此對話啟用以下機器人。請與您的管理員聯絡以在此伺服器上安裝更多機器人。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此伺服器上未安裝機器人。請與您的管理員聯絡以在此伺服器上安裝機器人。", + "Disable" : "停用", + "Enable" : "啟用", + "The bot is not available anymore" : "該機器人已不再提供服務", + "Breakout rooms" : "分組討論室", + "Manage breakout rooms" : "管理分組討論室", + "Set up breakout rooms for this conversation" : "在此對話中設置分組討論室", + "Please select a valid PNG or JPG file" : "請選擇有效的 PNG 或 JPG 檔案", + "Choose your conversation picture" : "選擇您的對話圖片", + "Choose" : "選擇", + "Error setting conversation picture" : "設定對話圖片時出錯", + "Could not set the conversation picture: {error}" : "無法設置對話圖片: {error}", + "Error cropping conversation picture" : "裁剪對話圖片時出錯", + "Error removing conversation picture" : "移除對話圖片時出錯", + "Set emoji as conversation picture" : "設定 emoji 為對話圖片", + "Set background color for conversation picture" : "設置對話圖片的背景顏色", + "Upload conversation picture" : "上傳對話圖片", + "Choose conversation picture from files" : "從檔案選擇對話圖片", + "Remove conversation picture" : "移除對話圖片", + "The file must be a PNG or JPG" : "該檔案必須是 PNG 或 JPG", + "Set picture" : "設置圖片", + "Default permissions modified for {conversationName}" : "為 {conversationName} 修改了默認權限", + "Could not modify default permissions for {conversationName}" : "無法更改 {conversationName} 的權限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "編輯此對話中參與者的默認權限。 這些設置不會影響主持人。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此部分修改權限時,之前分配給各個參與者的自訂權限都將丟失。", + "All permissions" : "所有權限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "參與者有權發起通話、加入通話、啟用音頻、視像和螢幕共享。", + "Participants can use all available features." : "參與者可以使用所有可用的功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在主持人手動授予他們權限之前,參與者只能加入對話,但不能啟用音頻、視頻或螢幕共享。", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "參與者在管理員手動授予額外權限前,只能使用受限的功能。", + "Advanced permissions" : "高級權限", + "Edit permissions" : "編輯權限", + "Conversation settings" : "對話設定", + "Basic Info" : "基本資料", + "Personal" : "個人", + "Moderation" : "主持", + "Setup overview" : "設置概覽", + "Live transcription" : "即時轉錄", + "Live transcriptions app is not installed" : "未安裝即時轉錄應用程式", + "Enable live transcription" : "啟用即時轉錄", + "Breakout Rooms" : "分組討論室", + "Matterbridge" : "Matterbridge", + "Bots" : "機器人", + "Danger zone" : "危險地帶", + "Archive conversation" : "封存對話", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "預設情況下,已封存的對話會從對話清單中隱藏。但是,當您搜尋對話名稱或存取已封存的對話清單時,它們仍會出現。", + "Do you really want to leave \"{displayName}\"?" : "您真的想要離開「{displayName}」嗎?", + "You can archive this conversation instead." : "您可以改為封存此對話。", + "Leave conversation" : "離開對話", + "You need to promote a new moderator before you can leave the conversation" : "在您離開對話之前您需要推舉一位新的主持人", + "Delete conversation" : "刪除對話", + "Do you really want to delete \"{displayName}\"?" : "您確定要刪除\"{displayName}\"嗎?", + "Error while deleting conversation" : "刪除對話時發生錯誤", + "Delete all chat messages" : "刪除所有聊天訊息", + "Do you really want to delete all messages in \"{displayName}\"?" : "您確定要刪除 \"{displayName}\" 內所有的訊息嗎?", + "Error while clearing chat history" : "清除聊天記錄時出錯", + "Be careful, these actions cannot be undone." : "請注意,這些操作無法還原。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "離開封閉式對話後,您需要收到邀請才能重新加入。 您可以隨時重新加入公開對話。", + "Permanently delete this conversation." : "永久刪除此對話。", + "Delete chat messages" : "刪除聊天訊息", + "Permanently delete all the messages in this conversation." : "永久刪除此對話中的所有訊息。", + "_%n hour_::_%n hours_" : ["%n 小時"], + "_%n day_::_%n days_" : ["%n 天"], + "_%n week_::_%n weeks_" : ["%n個星期"], + "Custom expiration time" : "自訂定到期日", + "Message expiration disabled" : "訊息過期功能已禁用", + "Message expiration set: {duration}" : "訊息過期設置:{duration}", + "Error when trying to set message expiration" : "嘗試設置訊息過期時出錯", + "Message expiration" : "訊息過期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "聊天訊息可能會在一定時間後過期。注意:在聊天中共享的檔案不會為所有者刪除,但將不再在對話中共享。", + "Set message expiration" : "設置訊息過期時間", + "Current message expiration" : "目前的訊息過期時間", + "Password copied to clipboard" : "密碼已複製到剪貼板", + "Password could not be copied" : "密碼無法複製", + "Guest access" : "訪客存取", + "Breakout rooms are not allowed in public conversations." : "公共對話中不允許分組討論。", + "Allow guests to join this conversation via link" : "允許訪客透過連結加入此對話", + "Password protection" : "密碼保護", + "This conversation is password-protected. Guests need password to join" : "此對話受到密碼保護。訪客需要密碼才能加入。", + "Password protection is needed for public conversations" : "公共對話需要密碼保護。", + "Set a password" : "設定密碼", + "Change password" : "更改密碼", + "Enter new password" : "輸入新密碼", + "Save password" : "保存密碼", + "Copy password" : "複製密碼", + "Guests are allowed to join this conversation via link" : "允許訪客透過連結加入此對話", + "Guests are not allowed to join this conversation" : "不允許訪客透過連結加入此對話", + "Resend invitations" : "重新傳送邀請", + "This conversation is open to both registered users and users created with the Guests app" : "此對話已同時對已註冊的用戶及使以訪客(Guests)應用程式建立的用戶開放", + "This conversation is open to registered users" : "此對話對已註冊的用戶開放", + "This conversation is limited to the current participants" : "此對話僅限目前參與者", + "You opened the conversation to both registered users and users created with the Guests app" : "您同時向已註冊用戶及以訪客(Guests)應用程式建立的用戶開放了對話", + "Error occurred when opening or limiting the conversation" : "打開或限制對話時發生錯誤", + "Open conversation to registered users, showing it in search results" : "向註冊用戶開放對話並在搜索結果中顯示", + "Also open to users created with the Guests app" : "同時對以訪客(Guests)應用程式建立的用戶開放", + "Open conversation" : "開放對話", + "Set language spoken in calls" : "設置通話語言", + "Languages could not be loaded" : "無法加載語言", + "Loading languages …" : "正在載入語言 …", + "Invalid language" : "無效的語言", + "Default language (English)" : "默認語言 (英文)", + "Default live transcription language set" : "默認即時轉錄語言集", + "Live transcription language set: {languageName}" : "即時轉錄語言集: {languageName}", + "Error when trying to set live transcription language" : "嘗試設置即時轉錄語言時出錯", + "Start time: {date}" : "開始時間:{date}", + "Start time has been updated" : "開始時間已被更新。", + "Error occurred while updating start time" : "更新開始時間時發生錯誤", + "Enabling the lobby will remove non-moderators from the ongoing call." : "啟用等候室將從正在進行的通話中刪除非主持人。", + "Enable lobby, restricting the conversation to moderators" : "啟用等候室,將對話限制為主持人", + "Meeting start time" : "會議開始時間", + "Start time (optional)" : "開始時間(可選)", + "Import email participants" : "匯入電子郵件參與者", + "You can import a list of email participants from a CSV file." : "您可以從 CSV 檔案匯入電子郵件參與者清單。", + "Poll drafts" : "民意調查草稿", + "Browse poll drafts" : "瀏覽民意調查草稿", + "Error occurred when locking the conversation" : "上鎖會話時發生了錯誤", + "Error occurred when unlocking the conversation" : "解鎖會話時發生了錯誤", + "Lock conversation" : "鎖定對話", + "This will also terminate the ongoing call." : "這也將終止正在進行的通話。", + "Lock the conversation to prevent anyone to post messages or start calls" : "鎖上對話以防止任何人發佈消息或發起對話。", + "Edit" : "編輯", + "More information" : "更多資訊", + "Delete" : "刪除", + "Add new bridged channel to current conversation" : "添加新的橋接頻道至對話", + "unknown state" : "狀態不詳", + "running" : "運行中", + "not running, check Matterbridge log" : "未運行,請檢查Matterbridge日誌", + "not running" : "沒有運行", + "Bridge saved" : "Bridge 已保存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "您可以使用 Matterbridge 橋接來自各種即時消息傳遞系統的頻道。", + "More info on Matterbridge" : "有關 Matterbridge 的更多信息。", + "Messaging systems" : "訊息系統", + "Enable bridge" : "啟用 bridge", + "Show Matterbridge log" : "顯示 Matterbridge 記錄", + "Log content" : "記錄內容", + "Only moderators are allowed to mention @all" : "僅允許主持人提及 @all", + "All participants are allowed to mention @all" : "僅允所有參與者提及 @all", + "Participants are now allowed to mention @all." : "現在參與者可以提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 的權限已限於主持人。", + "Allow participants to mention @all" : "允許參與者提及 @all", + "Mention permissions" : "提及權限", + "Notifications" : "通告", + "Notify about calls in this conversation" : "在此對話中有電話時通知", + "Important conversation" : "重要對話", + "\"Do not disturb\" user status is ignored for important conversations" : "「勿擾」用戶狀態將在重要對話中略過。", + "Sensitive conversation" : "敏感對話", + "Message preview will be disabled in conversation list and notifications" : "對話清單和通知中的訊息預覽將被停用。", + "Recording consent is required for calls in this conversation" : "在此次對話中,需要獲得錄製同意", + "Recording consent is not required for calls in this conversation" : "在此次通話中,並不需要獲得錄製同意", + "Recording consent requirement was updated" : "錄製同意需求已更新", + "Error occurred while updating recording consent" : "更新錄製同意時發生錯誤", + "Recording Consent" : "錄製同意", + "Recording consent cannot be changed once a call or breakout session has started." : "通話或分組會議開始後,錄製同意就無法更改。", + "Require recording consent before joining call in this conversation" : "在此次對話中,需要在加入通話前給予錄製同意", + "Recording consent is required for all calls" : "所有通話都需要獲得錄製同意", + "SIP dial-in is now possible without PIN requirement" : "SIP 撥入現在無需密碼", + "SIP dial-in is now enabled" : "現在啟用了 SIP 撥入", + "SIP dial-in is now disabled" : "已停用 SIP 撥入功能", + "Error occurred when enabling SIP dial-in" : "啟用SIP撥入時發生錯誤", + "Error occurred when disabling SIP dial-in" : "停用SIP撥入時發生錯誤", + "Phone and SIP dial-in" : "電話及 SIP 撥入", + "Enable phone and SIP dial-in" : "啟用電話及 SIP 撥入", + "Allow to dial-in without a PIN" : "允許在沒有密碼的情況下撥入", + "Ongoing" : "持續進行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["已接受 %n 個人"], + "_%n person declined_::_%n people declined_" : ["已拒絕 %n 個人"], + "_and %n other attachment_::_and %n other attachments_" : ["及 %n 其他附件"], + "With {displayName}" : "與 {displayName}", + "In {conversation}" : "在 {conversation} 對話中", + "View attachment" : "檢視附件", + "Join" : "加入", + "View conversation" : "檢視對話", + "View event on Calendar" : "在日曆上檢視活動", + "Error while creating the conversation" : "建立會話時發生了錯誤", + "Hello, {displayName}" : "哈囉,{displayName}", + "Start meeting now" : "立刻開始會議", + "Give your meeting a title" : "為您的會議命名", + "Create and copy link" : "建立並複製連結", + "Create a new conversation" : "創建新對話", + "Join open conversations" : "加入公開對話", + "Call a phone number" : "撥打電話號碼", + "Scroll backward" : "向後捲動", + "Scroll forward" : "向前捲動", + "Schedule meetings" : "安排會議", + "You don't have any upcoming meetings" : "您沒有任何即將舉行的會議", + "Calendar events with a conversation link as the location are shown here" : "以對話連結作為地點的日曆活動會在此顯示", + "Open calendar" : "打開日曆", + "Unread mentions" : "未讀的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的訊息將顯示於此處。您可以透過輸入 @ 加上對方姓名來標記他人。", + "Upcoming reminders" : "即將到來的提醒", + "Message reminders" : "訊息提醒", + "Set a reminder on a message to be notified" : "在訊息上設定提醒以接收通知", + "Start a group conversation" : "開始群組對話", + "Create conversation" : "建立對話", + "Enter your name" : "輸入您的名稱", + "Submit name and join" : "遞交名稱並加入", + "Do you already have an account?" : "您已經有帳戶了嗎?", + "Log in" : "登入", + "Error while verifying uploaded file" : "驗證上傳的檔案時發生錯誤", + "Uploaded file is verified" : "已驗證上傳的檔案", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "內容格式為逗號分隔值 (CSV):
- 標題行為必填,且必須符合 \"名字\",\"電郵地址\"\"電郵地址\"
- 一個項目一行(例如 \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "參與者新增成功", + "Error while adding participants" : "新增參與者時發生錯誤", + "Import a file" : "導入檔案", + "Browse" : "瀏覽", + "Verifying uploaded file …" : "正在驗證已上傳的檔案 …", + "This might take a moment" : "這可能需要一段時間", + "Send invitations" : "傳送邀請", + "_%n invalid email_::_%n invalid emails_" : ["%n 個無效的電郵地址"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["有 %n 個電郵地址已導入或重複"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以傳送 %n 個邀請"], + "An error occurred while calling a phone number" : "撥打電話號碼時發生錯誤", + "Phone number could not be called: {error}" : "無法撥打電話號碼:{error}", + "Phone number could not be called" : "無法撥打電話號碼", + "Search participants or phone numbers" : "搜尋參與者或電話號碼", + "Creating the conversation …" : "正在建立對話 ...", + "Mark as read" : "標為已讀", + "Mark as unread" : "標為未讀", + "Remove from favorites" : "取消我的最愛", + "Add to favorites" : "加到我的最愛", + "Unarchive conversation" : "解除封存對話", + "Ignore \"Do not disturb\"" : "不用理會「請勿打擾」", + "You need to promote a new moderator before you can leave the conversation." : "在您離開對話之前您需要推舉一位新的主持人。", + "Conversation actions" : "對話操作", + "Notify about calls" : "通話通知", + "Hide message text" : "隱藏訊息文字", + "Pending invitations" : "擱置中的邀請", + "Join conversations from other servers" : "加入其他伺服器的對話", + "From {user} at {remoteServer}" : "來自 {remoteServer} 的 {user}", + "Decline invitation" : "婉拒邀請", + "Accept invitation" : "接受邀請", + "No pending invitations" : "沒有待處理的邀請", + "Home" : "主頁", + "Unread" : "未讀", + "Mentions" : "提及", + "Meetings" : "會議", + "Sort conversations" : "排序對話", + "By recent activity" : "按最近活動排序", + "Alphabetically" : "按字母順序", + "Do not group by type" : "請勿按類型分組", + "Show private ones first" : "先顯示私人訊息", + "Show group ones first" : "先顯示群組訊息", + "No followed threads" : "沒有追蹤的討論串", + "No matches found" : "找不到符合的項目", + "No conversations found" : "找不到對話", + "You have no archived conversations." : "您沒有已封存的對話。", + "Subscribe to an existing thread or start your own." : "訂閱既有的討論串或開啟您的討論串。", + "You have no unread mentions." : "您沒有未讀的提及。", + "You have no unread messages." : "您沒有未讀的訊息。", + "An error occurred while performing the search" : "搜尋時發生了錯誤", + "Conversation list" : "對話清單", + "Filter conversations by" : "按以下條件過濾對話", + "Unread messages" : "未讀郵件", + "Meeting conversations" : "會議對話", + "Clear filters" : "清除過濾器", + "New personal note" : "新個人筆記", + "SIP backend is not installed" : "未安裝 SIP 後端", + "Back to conversations" : "回到對話", + "Archived conversations" : "已封存的對話", + "Threads" : "討論串", + "Clear filter" : "清空過濾器", + "Show more threads" : "顯示更多討論串", + "App settings" : "應用程式設定", + "Users" : "用戶", + "Groups" : "群組", + "Teams" : "團隊", + "Federated users" : "聯盟用戶", + "New private conversation" : "新私人對話", + "Other sources" : "其他來源", + "Open conversations" : "開放對話", + "No search results" : "無搜尋結果", + "Users, groups and teams" : "用戶,群組和團隊", + "Users and groups" : "用戶和群組", + "Users and teams" : "用戶和團隊", + "Groups and teams" : "群組和團隊", + "New group conversation" : "新群組對話", + "The meeting will start soon" : "會議即將開始", + "This meeting is scheduled for {startTime}" : "此會議定於 {startTime} 開始", + "You are currently waiting in the lobby" : "您目前正在等候室等候。", + "Enable noise suppression" : "啟用降噪", + "Reduce background noises for better voice quality" : "減少背景噪音,以提升語音品質", + "Enable echo cancellation" : "啟用回音消除", + "Minimize echo effect from own surrounding" : "降低周圍環境造成的回音效果", + "Enable auto gain control" : "啟用自動增益控制", + "Dynamically adjust microphone volume for consistent level" : "動態調整咪高風音量,以保持音量一致", + "Select microphone" : "選擇米高風", + "No microphone available" : "沒有可用的米高風", + "Select speaker" : "選擇喇叭", + "No speaker available" : "沒有可用的喇叭", + "Select camera" : "選擇相機", + "No camera available" : "沒有可用的相機", + "Select a device" : "選取裝置", + "Playing …" : "正在播放 …", + "Test speakers" : "測試喇叭", + "Test" : "測試", + "Devices" : "裝置", + "Backgrounds" : "背景", + "No audio" : "沒有音訊", + "No camera" : "沒有相機", + "Display video as you will see it (mirrored)" : "顯示您將看到的視訊(鏡像)", + "Display video as others will see it" : "以其他人看到的方式顯示視訊", + "Calls are not supported in your browser" : "你使用的瀏覽器不支援通話", + "Access to microphone is only possible with HTTPS" : "只有使用 HTTPS 才能存取米高風", + "Access to microphone was denied" : "存取米高風被拒絕", + "Error while accessing microphone" : "存取米高風時發生錯誤", + "Access to camera is only possible with HTTPS" : "只有使用 HTTPS 才能存取相機", + "The call is being recorded." : "通話正在錄音中。", + "The call might be recorded." : "通話可能會被錄製。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "錄製可能包括您的聲音、視像和螢幕共享。在您加入通話之前,需要獲得您的同意。", + "Give consent to the recording of this call" : "請您同意錄製此通話", + "Show more info" : "顯示更多資訊", + "Audio is not available" : "音頻不可用", + "Video is not available" : "視像不可用", + "Start recording immediately with the call" : "通話後立刻開始錄音", + "Recording backend is not installed" : "未安裝錄製後端", + "Notify all participants about this call" : "通知所有參與者此通話", + "Apply settings" : "運用設定", + "Select virtual office background" : "選擇虛擬辦公室背景", + "Select virtual home background" : "選擇虛擬家居背景", + "Select virtual abstract background" : "選擇虛擬抽象背景", + "Select virtual beach background" : "選擇虛擬海灘背景", + "Select virtual park background" : "選擇虛擬公園背景", + "Select virtual theater background" : "選擇虛擬劇院背景", + "Select virtual library background" : "選擇虛擬圖書館背景", + "Select virtual space station background" : "選擇虛擬太空站背景", + "Error while uploading the file" : "上傳檔案時發生錯誤", + "Select a file" : "選擇檔案", + "Invalid path selected" : "所選的路徑無效", + "Select virtual background from file {fileName}" : "從檔案 {fileName} 選擇虛擬背景", + "Blur" : "模糊", + "Upload" : "上傳", + "Files" : "檔案", + "(editing)" : "(正在編輯)", + "(edited)" : "(已編輯)", + "The message has expired or has been deleted" : "訊息已過期或已被刪除。", + "Cancel quote" : "取消報價", + "24 hours" : "24 小時", + "7 days" : "7 日", + "30 days" : "30 日", + "Until unpin" : "直到取消置頂", + "Clear reminder – {timeLocale}" : "清除提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 編輯", + "Pinned by you" : "由你置頂", + "Pinned by {actor}" : "由 {actor} 置頂", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "訊息文字已複製到剪貼板", + "Message text could not be copied" : "訊息文字無法複製", + "Message forwarded to \"Note to self\"" : "訊息已轉寄至「給自己的註記」", + "Error while forwarding message to \"Note to self\"" : "轉寄訊息到「給自己的註記」時發生錯誤", + "A reminder was successfully removed" : "已成功移除提醒", + "Error occurred when removing a reminder" : "移除提醒時發生錯誤", + "A reminder was successfully set at {datetime}" : "已成功設定於 {datetime} 的提醒", + "Error occurred when creating a reminder" : "建立提醒時發生錯誤", + "Add a reaction to this message" : "添加對此訊息的反應", + "Reply" : "回覆", + "More actions" : "更多操作", + "Set reminder" : "設定提醒", + "Pin message" : "置頂訊息", + "Unpin message" : "取消置頂訊息", + "Reply privately" : "私下回覆", + "Edit message" : "編輯訊息", + "Copy message" : "複製訊息", + "Copy message link" : "複製訊息連結", + "Go to file" : "前往檔案", + "Download file" : "下載檔案", + "Go to thread" : "前往討論串", + "Edit thread details" : "編輯討論串詳細資訊", + "Forward message" : "轉寄訊息", + "Translate" : "翻譯", + "Set custom reminder" : "設定自訂提醒", + "Keep pinned for" : "置頂保留期限", + "Set custom period" : "設定自訂期限", + "Close reactions menu" : "關閉反應選項單", + "React with {emoji}" : "使用 {emoji} 做出反應", + "React with another emoji" : "使用另一個表情符號做出反應", + "Choose a conversation to forward the selected message." : "選擇要將所選消息轉發到的對話。", + "Error while forwarding message" : "轉寄訊息時發生錯誤", + "The message has been forwarded to {selectedConversationName}" : "訊息已轉發至 {selectedConversationName}", + "Dismiss" : "撤銷", + "Go to conversation" : "前往對話", + "Detect language" : "檢測語言", + "The message could not be translated" : "無法翻譯訊息", + "Translation copied to clipboard" : "翻譯已複製到剪貼簿", + "Translation could not be copied" : "無法複製翻譯", + "Translate message" : "翻譯訊息", + "Source language to translate from" : "要翻譯的來源語言", + "Translate from" : "翻譯從", + "Target language to translate into" : "要翻譯至的目標語言", + "Translate to" : "翻譯至", + "Translating" : "正在翻譯", + "This translation is AI generated and may contain mistakes." : "此翻譯為人工智能產生,可能會出錯。", + "Copy translated text" : "複製已翻譯的文字", + "Error when scheduling the message" : "安排傳送訊息時發生錯誤", + "Reschedule" : "重新安排", + "Send now" : "立即傳送", + "Choose a time" : "選擇時間", + "Send at custom time" : "於自訂時間傳送", + "Will be sent without notification" : "將不另行發出傳送檔案通知", + "Message read by everyone who shares their reading status" : "共享閱讀狀態的所有人都閱讀了該郵件", + "Message sent" : "訊息已傳送", + "Sent without notification" : "傳送而不通知", + "Deleting message" : "正在刪除訊息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "訊息已成功刪除,但已設定機器人或 Matterbridge,訊息可能已散佈至其他服務", + "Message deleted successfully" : "成功刪除了訊息", + "Message could not be deleted because it is too old" : "無法刪除訊息,因為它距今太久", + "Only normal chat messages can be deleted" : "只能刪除普通聊天訊息", + "An error occurred while deleting the message" : "刪除訊息時發生錯誤", + "Pinned" : "已置頂", + "Your browser does not support playing audio files" : "您的瀏覽器不支援播放音頻檔案", + "Contact" : "聯絡人", + "{stack} in {board}" : "{board} 中的 {stack}", + "Deck Card" : "看板卡片", + "Remove {fileName}" : "移除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中打開此位置", + "_%n reply_::_%n replies_" : ["%n 個回覆"], + "Sending message" : "傳送訊息", + "Failed to send the message. Click to try again" : "發送消息失敗。點擊重試", + "Not enough free space to upload file" : "空間不足,不能上傳檔案", + "You cannot send messages to this conversation at the moment" : "您目前無法向此對話發送消息", + "Could not update the message" : "無法更新訊息", + "Reply to thread \"{threadTitle}\"" : "回覆討論串「{threadTitle}」", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["點選以投票 • %n 票"], + "Click to vote" : "點選以投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["民意調查草稿 • %n 選項"], + "_%n vote_::_%n votes_" : ["%n 張選票"], + "Edit poll draft" : "編輯民意調查草稿", + "Delete poll draft" : "刪除民意調查草稿", + "Open poll" : "開放投票", + "Closed poll" : "已關閉的投票", + "See results" : "查看結果", + "Reactions" : "反應", + "No permission to post reactions in this conversation" : "無權在此對話中發表反應", + "and {participant}" : "及 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及 %n 其他參與者"], + "Show all reactions" : "顯示所有反應", + "Add more reactions" : "添加更多反應", + "Show or collapse system messages" : "顯示或折疊系統訊息", + "No messages" : "沒有訊息", + "All messages have expired or have been deleted." : "所有訊息都已過期或已被刪除。", + "Generate summary with AI" : "使用人工人工智能產生摘要", + "{author} (pinned by you)" : "{author}(由你置頂)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 置頂)", + "Unpin" : "取消固定", + "Cancel search" : "取消搜尋", + "Add a phone number" : "添加電話號碼", + "Error: A password is required to create the conversation." : "錯誤:創建對話需要密碼。", + "All set, the conversation \"{conversationName}\" was created." : "一切就緒,對話 「{conversationName}」已創建。", + "Create a new group conversation" : "建立新群組對話", + "Add participants" : "添加參與者", + "Maximum length exceeded ({maxlength} characters)" : "超出最大長度({maxlength} 個字元)", + "Conversation type" : "對話類型", + "Conversation visibility" : "對話可見性", + "Allow guests to join via link" : "允許訪客透過連結加入", + "Enter password" : "輸入密碼", + "This conversation has been locked" : "此對話已被上鎖", + "No permission to post messages in this conversation" : "無權在此對話中發佈訊息", + "Joining conversation …" : "正在加入對話 …", + "Write a message without notification" : "撰寫訊息而不通知", + "Create a thread silently" : "默默建立討論串", + "Create a thread" : "創建討論串", + "Send message silently" : "無聲傳送訊息", + "Send message" : "傳送訊息", + "Send without notification" : "傳送而不通知", + "The participant will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Participants will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Message will be sent {datetimeString}" : "訊息將於 {datetimeString} 傳送", + "Thread title is required" : "討論串標題為必填", + "Message text is required" : "訊息文字為必填", + "The message could not be edited" : "無法編輯訊息", + "File to share" : "要分享的檔案", + "File upload is not available in this conversation" : "此對話中無法上傳檔案", + "Message was successfully scheduled" : "訊息已成功安排傳送", + "Add emoji" : "添加 emoji", + "Adding a mention will only notify users who did not read the message." : "添加提及只會通知尚未閱讀訊息的用戶。", + "Thread title" : "討論串標題", + "Send later" : "稍後傳送", + "Show scheduled messages" : "顯示已安排傳送的訊息", + "Cancel editing" : "取消編輯", + "Schedule message" : "預先安排訊息", + "{user} is out of office and might not respond." : "{user} 不在辦公室,可能不會回覆。", + "Absence period: {startDate} - {endDate}" : "缺席期間:{startDate} - {endDate}", + "Replacement:" : "取代︰", + "Share from {nextcloud}" : "透過 {nextcloud} 分享", + "Share from Files" : "從檔案進行分享", + "Share files to the conversation" : "在對話中分享檔案", + "Upload from device" : "從裝置上傳", + "Create new poll" : "創建新民意調查", + "Smart picker" : "聰明的選擇器", + "Record voice message" : "錄製話音短訊", + "End recording and send" : "結束錄音並傳送", + "Dismiss recording" : "撤銷錄音", + "Access to the microphone was denied" : "存取米高風被拒絕", + "Microphone either not available or disabled in settings" : "麥克風不可用或在設置中停用", + "Error while recording audio" : "錄音時出錯", + "Voice message {time} ({conversation})" : "從 {time} 開始的語音訊息({conversation})", + "Generating summary of unread messages …" : "正在産生未讀訊息的摘要 ...", + "Summary is AI generated and might contain mistakes" : "摘要為人工智能產生,可能有錯", + "Error occurred during a summary generation" : "在産生摘要過程中發生錯誤", + "New file" : "新增檔案", + "Blank" : "空白", + "Error while creating file" : "建立檔案時發生錯誤", + "Create and share a new file" : "創建及分享新檔案", + "Name of the new file" : "新檔案名稱", + "Create file" : "創建檔案", + "Someone is typing …" : "有人在打字 …", + "{user1} is typing …" : "{user1} 在打字……", + "{user1} and {user2} are typing …" : "{user1} 及 {user2} 在打字 …", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2} 及 {user3} 正在打字 …", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 及其他 %n 人正在打字 …"], + "Add more files" : "添加更多檔案", + "Send" : "傳送", + "In this conversation {user} can:" : "此對話中,{user}可以:", + "Edit default permissions for participants in {conversationName}" : "編輯 {conversationName} 中參與者的默認權限", + "Start a call" : "開始通話", + "Skip the lobby" : "跳過等候室", + "Can post messages" : "可以發佈訊息", + "Can post messages and reactions" : "可以發佈消息和反應", + "Can add reactions" : "可以添加反應", + "Enable the microphone" : "啟用米高風", + "Enable the camera" : "啟用相機", + "Share the screen" : "分享螢幕", + "Update permissions" : "更新權限", + "Updating permissions" : "更新權限", + "No poll drafts" : "沒有民意調查草稿", + "There is no poll drafts yet saved for this conversation" : "尚未為此對話保存民意調查草稿", + "Create poll in {name}" : "在 {name} 建立投票", + "Create poll" : "創建民意調查", + "Error while importing poll" : "導入投票時發生錯誤", + "Question" : "問題", + "Ask a question" : "問一個問題", + "Import draft from file" : "從檔案導入草稿", + "Answers" : "答案", + "Answer {option}" : "答案 {option}", + "Delete poll option" : "刪除民意調查選項", + "Add answer" : "添加答案", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多個答案", + "Save as draft" : "保存為草稿", + "Export draft to file" : "將草稿導出至檔案", + "_Final results • %n vote_::_Final results • %n votes_" : ["最終結果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此選項一票", + "End poll" : "結束民意調查", + "Change your vote" : "更改您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "結果", + "Voted participants" : "投票參與者", + "Send a message to \"{roomName}\"" : "向 “{roomName}” 傳送訊息", + "Hide list of participants" : "隱藏參與者清單", + "Show list of participants" : "顯示參與者清單", + "Assistance requested in {roomName}" : "{roomName} 請求協助", + "The message was sent to \"{roomName}\"" : "訊息已發佈至 “{roomName}”", + "Dismiss request for assistance" : "撤銷協助請求", + "Send message to room" : "傳送訊息至聊天室", + "Back to main room" : "回到主室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室發送訊息", + "Start session" : "開始時段", + "Start a call before you start a breakout room session" : "在開始分組討論室之前開始通話", + "Stop session" : "停止時段", + "The message was sent to all breakout rooms" : "訊息已傳送至所有分組討論室", + "Send a message to all breakout rooms" : "向所有分組討論室傳送訊息", + "Breakout rooms are not started" : "分組討論室未啟動", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "沒有高效能後端的通話可能導致連接問題和設備負載過高。{linkstart}了解更多{linkend}", + "Talk setup incomplete" : "未完成 Talk 設定", + "Disable lobby" : "等候室停用", + "Settings for participant \"{user}\"" : "參與者 \"{user}\" 的設定", + "Participant \"{user}\"" : "參與者 \"{user}\"", + "moderator" : "主持人", + "bot" : "機器人", + "guest" : "訪客", + "Ringing …" : "連線中 …", + "Call rejected" : "通话被拒絕", + "{time} talking …" : "{time} 說話中 ...", + "{time} talking time" : "{time} 說話時間", + "Raised their hand" : "舉手", + "Joined with video" : "用戶已加入視像對話", + "Joined via phone" : "透過電話加入", + "Joined with audio" : "用戶已加入音頻對話", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的長度必須小於或等於{maxLength}個字符。您目前的文本長度為{charactersCount}個字符。", + "Remove group and members" : "移除群組及組員", + "Remove team and members" : "移除團隊和成員", + "Remove participant" : "移除參與者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "你確定要將群組「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "你確定要將團隊「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove {displayName} from this conversation?" : "你確定要將「{displayName}」從此對話中移除嗎?", + "Notification was sent to {displayName}" : "通告已傳送至 {displayName}", + "Could not send notification to {displayName}" : "無法向 {displayName} 傳送通告", + "Permissions granted to {displayName}" : "已將權限授予{displayName}", + "Could not modify permissions for {displayName}" : "無法更改 {displayName} 的權限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的權限", + "Permissions set to default for {displayName}" : "{displayName} 的權限設置為默認值", + "Phone number could not be hung up" : "無法掛斷電話", + "Phone number could not be put on hold" : "無法暫停電話通話", + "Phone number could not be muted" : "無法將電話靜音", + "Phone number could not be unmuted" : "無法取消電話靜音", + "DTMF message could not be sent" : "無法傳送 DTMF 訊息", + "Phone number copied to clipboard" : "電話號碼已複製到剪貼板", + "Phone number could not be copied" : "無法複製電話號碼", + "in the lobby" : "在等候室中", + "Dial out phone" : "撥出電話", + "Hang up phone" : "掛斷電話", + "Move back to lobby" : "移回等候室", + "Move to conversation" : "移至對話", + "Dial-in PIN" : "撥入 PIN", + "Demote from moderator" : "從主持人降級", + "Promote to moderator" : "晉升為主持人", + "Resend invitation" : "重新傳送邀請", + "Send call notification" : "傳送通話通告", + "Dial out phone number" : "撥出電話號碼", + "Resume call for phone number" : "恢復電話號碼的通話", + "Put phone number on hold" : "保留電話號碼", + "Unmute phone number" : "取消電話號碼靜音", + "Mute phone number" : "將電話號碼靜音", + "Copy phone number" : "複製電話號碼", + "Reset custom permissions" : "重設自訂權限", + "Grant all permissions" : "授予所有權限", + "Remove all permissions" : "移除所有權限", + "Also ban from this conversation" : "同時從此對話中封禁", + "Internal note (reason to ban)" : "內部備註(封禁原因)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "更改了 {displayName} 的權限", + "Add users, groups or teams" : "添加用戶,群組和團隊", + "Add users or groups" : "增加用戶或者群組", + "Add users or teams" : "添加用戶或團隊", + "Add users" : "新增用戶", + "Add groups or teams" : "添加群組或團隊", + "Add groups" : "新增群組", + "Add teams" : "添加團隊", + "Add other sources" : "添加其他來源", + "Add emails" : "新增電郵", + "Integrations" : "整合", + "Add federated users" : "添加 federated 用戶", + "Searching …" : "正在搜尋……", + "Search for more users" : "搜尋更多用戶", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以透過名稱、電郵地址或雲端聯盟 ID 搜尋或新增參與者", + "Search or add participants" : "搜尋或添加參與者", + "Invitation was sent to {actorId}" : "邀請已傳送到 {actorId}", + "An error occurred while adding the participants" : "添加參與者時發生了錯誤", + "A new group conversation with selected participant will be created" : "將會建立包含選定參與者的新群組對話", + "Participants" : "參與者", + "Pinned by a deleted user" : "由已刪除的用戶置頂", + "Participants ({count})" : "參與者 ({count})", + "Open chat" : "開啟聊天", + "You have new unread messages in the chat." : "您在聊天中有新的未讀消息。", + "You have been mentioned in the chat." : "您已在聊天中被提及。", + "Search messages" : "搜尋訊息", + "Chat" : "聊天", + "Details" : "細節", + "Shared items" : "分享項目", + "Search in {name}" : "在 {name} 中搜尋", + "Threads in {name}" : "在 {name} 中的討論串", + "{actor} in {conversation}" : "{conversation} 中的 {actor}", + "Search messages …" : "搜尋訊息 ...", + "Search options" : "搜尋選項", + "From User" : "來自用戶", + "Since" : "自", + "Until" : "直至", + "No results found" : "未找到結果", + "Load more results" : "正在載入更多結果", + "Recent threads" : "最近的討論串", + "Projects" : "專案項目", + "No shared items" : "沒有已分享的項目", + "Thread notifications" : "討論串通知", + "Thread actions" : "討論串動作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "連結對話", + "No open conversations found" : "沒有找到公開對話", + "Either there are no open conversations or you joined all of them." : "要不然就是沒有公開的對話,要不然就是你已經參與了所有的對話。", + "Check spelling or use complete words." : "檢查拼寫或使用完整的單詞。", + "Search conversations or users" : "搜尋對話或用戶", + "Select conversation" : "選擇對話", + "Number length is not valid" : "號碼長度無效", + "Region code is not valid" : "區碼無效", + "Number length is too short" : "號碼長度太短", + "Number length is too long" : "號碼長度太長", + "Number is not valid" : "號碼無效", + "Phone numbers" : "電話號碼", + "Display name: {name}" : "顯示名稱:{name}", + "Edit display name" : "編輯顯示名稱", + "Display name (required)" : "顯示名稱(必填)", + "Save name" : "保存名字", + "I picked message bubbles" : "已選擇訊息氣泡", + "I picked the list style" : "我挑選了清單樣式", + "Error while setting personal setting" : "設置您的個人設置時發生錯誤", + "Error while saving sounds setting" : "儲存聲音設置時發生錯誤", + "Compact conversations list" : "簡潔對話清單", + "Chat appearance" : "聊天外觀", + "Messages list" : "訊息清單", + "Message bubbles" : "訊息氣泡", + "Play sounds when participants join or leave a call" : "參與者加入或離開通話時播放聲音", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由於製造商的技術限制,目前在 iPhone 與 iPad 上無法使用", + "Notification settings" : "通告設定", + "Sounds for chat and call notifications" : "聊天與通話通知的音效", + "Invalid language ({languageId})" : "無效的語言({languageId})", + "Default language" : "預設語言", + "Default language ({languageName})" : "預設語言({languageName})", + "Error when trying to load the available live translation languages" : "載入可用的即時翻譯語言時發生錯誤", + "Error when trying to set live translation language" : "設定即時翻譯語言時發生錯誤", + "Set language used to show the transcriptions" : "設定顯示轉錄內容所使用的語言", + "Select location for attachments" : "選擇附件的位置", + "Error while setting attachment folder" : "設置附件資料夾時出錯", + "Error while setting read status privacy" : "設置讀取狀態私隱時出錯", + "Error while setting typing status privacy" : "設置打字狀態私隱時出錯", + "Error while setting default media state" : "設定預設媒體狀態時發生錯誤", + "Turn camera and microphone off by default" : "預設關閉相機與麥克風", + "Blur camera background by default" : "預設模糊相機背景", + "Skip device preview before joining a call" : "略過加入通話前的裝置預覽", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入時將關閉相機。如需錄影同意,則會一直顯示。", + "Appearance & Sounds" : "外觀與音效", + "Privacy" : "私隱", + "Send read receipts" : "傳送讀取回條", + "When off, all read statuses will be hidden" : "關閉時,所有讀取狀態都會被隱藏", + "Share typing status" : "分享輸入狀態", + "When off, all typing indicators will be hidden" : "關閉時,所有輸入指示器都會被隱藏", + "Attachments folder" : "附件資料夾", + "Toggle full screen" : "切換全螢幕", + "Return to Home screen" : "回到主畫面", + "Search" : "搜尋", + "Shortcuts while in a chat" : "聊天中的捷徑", + "Focus the chat input" : "關注聊天輸入字段", + "Unfocus the chat input to use shortcuts" : "取消對聊天輸入字段的關注以使用快捷方式", + "Edit your last message" : "編輯您最新的訊息", + "Shortcuts while in a call" : "通話中的快捷方式", + "Camera on and off" : "開啟和關閉相機", + "Microphone on and off" : "開啟和關閉麥克風", + "Raise or lower hand" : "舉或放下手", + "Push to talk or push to mute" : "一鍵通話或靜音", + "Zoom-in / zoom-out a screen share" : "放大/縮小螢幕分享", + "Mouse wheel" : "滑鼠滾輪", + "Start call silently" : "安靜地開始通話", + "Start call" : "開始通話", + "End call" : "結束通話", + "The server was updated, you cannot start or join a call." : "伺服器已更新,您無法開始或加入通話。", + "This call has just ended" : "此通話剛結束", + "You will be able to join the call only after a moderator starts it." : "只有主持人發起通話後,您才能加入該通話。", + "End call for everyone" : "為所有人結束通話", + "Starting the recording" : "開始錄製", + "Recording" : "錄製", + "The call has been running for one hour." : "請注意,通話已經持續一個小時了。", + "Cancel recording start" : "取消錄製開始", + "Stop recording" : "停止錄音", + "Send a reaction" : "傳送反應", + "React with {reaction}" : "使用 {reaction} 做出反應", + "All tasks done!" : "所有任務完成!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done} / %n 任務"], + "Add participants to this call" : "新增參與者至此通話", + "_%n participant in call_::_%n participants in call_" : ["通話中有 %n 位參與者"], + "Scheduled messages" : "預先安排好的訊息", + "You are not allowed to enable screensharing" : "你無權啟用啟用螢幕分享", + "No screensharing" : "沒有螢幕分享", + "Screensharing options" : "螢幕分享選項", + "Enable screensharing" : "啟用螢幕分享", + "Bad sent video and screen quality." : "發送的視像和螢幕質量不佳。", + "Bad sent screen quality." : "發送的螢幕質量不佳。", + "Bad sent video quality." : "發送的視像質量不佳。", + "Bad sent audio, video and screen quality." : "發送的音頻,視像和螢幕質量不佳。", + "Bad sent audio and screen quality." : "發送的音頻和螢幕質量不佳。", + "Bad sent audio and video quality." : "發送的音頻和視像質量不佳。", + "Bad sent audio quality." : "發送的音頻質量不佳。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的互聯網連接或電腦正忙,其他參與者可能無法看到您的螢幕。 為了改善這種情況,嘗試在進行螢幕共享時禁用背景模糊或視像。", + "Disable background blur" : "禁用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您的螢幕。為了改善這種情況,請嘗試在進行螢幕共享時禁用視像。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您的螢幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "您的 Internet 連接或電腦繁忙,其他參與者可能看不到您。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的互聯網連接或電腦正忙,其他參與者可能無法理解和看到您。 為了改善這種情況,嘗試在進行螢幕共享時禁用背景模糊或視像。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您。為了改善這種情況,請嘗試在執行螢幕共享時禁用視像。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您的螢幕。為了改善這種情況,請嘗試停用螢幕共享。", + "Disable screenshare" : "停用螢幕共享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的互聯網連接或電腦正忙,其他參與者可能無法理解和看到您。 為了改善這種情況,嘗試禁用背景模糊或視像。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "您的 Internet 連接或電腦繁忙,其他參與者可能無法理解和看到您。為了改善這種情況,請嘗試停用您的視像。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "您的 Internet 連接或電腦繁忙,其他參與者可能聽不到您。", + "Screen sharing is not supported by your browser." : "您的瀏覽器不支持螢幕共享。", + "Screen sharing requires the page to be loaded through HTTPS." : "螢幕共享要求頁面通過HTTPS加載。", + "Screensharing requires the page to be loaded through HTTPS." : "螢幕共享要求頁面通過HTTPS加載。", + "An error occurred while starting screensharing." : "開始螢幕共享時發生錯誤。", + "Select virtual background" : "選擇虛擬背景", + "Show your screen" : "顯示您的螢幕", + "Stop screensharing" : "停止螢幕分享", + "Mute others" : "使其他人靜音", + "Start recording" : "開始錄音", + "Set up breakout rooms" : "設置分組討論室", + "Download attendance list" : "下載出勤名單", + "Open Calendar" : "打開日曆", + "Remove participant {name}" : "移除參與者 {name}", + "Would you like to delete this conversation?" : "您想要刪除此對話嗎?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此對話在閒置 %n 天後將會自動為所有人刪除"], + "Are you sure you want to delete this conversation?" : "您確定您想要刪除此對話嗎?", + "Delete now" : "立刻刪除", + "Keep" : "保留", + "Open dialpad" : "開啟撥號鍵盤", + "Select a region" : "選擇地區", + "Local time: {time}" : "本地時間︰{time}", + "Scheduled {datetime}" : "預定於 {datetime}", + "Scheduled for {datetime}" : "預定於 {datetime}", + "Search …" : "搜尋 …", + "Message without mention" : "沒有 @提及的訊息", + "Mention myself" : "提及自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "選取對話", + "Select a mode" : "選取模式", + "You do not have permissions to access this conversation." : "您無權存取此對話。", + "Join a different conversation or start a new one." : "加入不同的對話或開始新的對話​​。", + "The conversation does not exist" : "對話不存在", + "Join a conversation or start a new one!" : "加入或者開一個新的對話", + "Duplicate session" : "重複對話", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此對話已在另一個分頁開啟。目前的伺服器版本不支援同一個對話同時在多個分頁開啟。", + "Creating and joining a conversation with \"{userid}\"" : "使用「{userid}」建立並加入對話", + "Join a conversation or start a new one" : "加入或者開一個新的對話", + "Error while joining the conversation" : "加入對話時發生錯誤", + "Another user" : "另一個用戶", + "Hey! Are you using the list style or message bubbles?" : "嘿!你用的是清單樣式還是訊息泡泡樣式呢?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 用戶", + "User password" : "用戶密碼", + "Talk conversation" : "Talk 對話", + "Skip TLS verification" : "跳過 TLS 驗證", + "Matrix server URL" : "Matrix 伺服器 URL", + "User" : "用戶", + "Matrix channel" : "Matrix 頻道", + "Mattermost server URL" : "Mattermost 伺服器 URL", + "Mattermost user" : "Mattermost 用戶", + "Team name" : "團隊名稱", + "Channel name" : "頻道名稱", + "Rocket.Chat server URL" : "Rocket。Chat 伺服器 URL", + "User name or email address" : "用戶名稱或電郵地址", + "Rocket.Chat channel" : "Rocket。Chat 頻道", + "Zulip server URL" : "Zulip 伺服器 URL", + "Bot user name" : "Bot 用戶名稱", + "Bot API key" : "Bot API 密鑰", + "Zulip channel" : "Zulip 頻道", + "API token" : "API 權杖", + "Slack channel" : "Slack 頻道", + "Server ID or name" : "伺服器 ID 或名稱", + "Channel ID (prefixed with \"ID:\") or name" : "頻道 ID(前綴為「ID:」)或名稱", + "Channel" : "頻道", + "Login" : "登入", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 伺服器 URL(e.g. chat.freenode.net:6667)", + "Nickname" : "暱稱", + "Connection password" : "連線密碼", + "IRC channel" : "IRC 頻道", + "Channel password" : "頻道密碼", + "NickServ nickname" : "NickServ 暱稱", + "NickServ password" : "NickServ 密碼", + "Use TLS" : "Use TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租戶 ID", + "Client ID" : "客戶端ID", + "Team ID" : "團隊 ID", + "Thread ID" : "帖子 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 伺服器 URL", + "MUC server URL" : "MUC 伺服器 URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "置頂訊息", + "Media" : "多媒體", + "Polls" : "調查", + "Deck cards" : "看板卡片", + "Voice messages" : "音頻留言", + "Locations" : "地點", + "Call recordings" : "通話錄音", + "Audio" : "音頻", + "Show all pinned messages" : "顯示所有置頂訊息", + "Show all media" : "顯示所有媒體", + "Show all files" : "顯示所有檔案", + "Show all polls" : "顯示所有民意調查", + "Show all deck cards" : "顯示所有卡片", + "Show all voice messages" : "顯示所有話音短訊", + "Show all locations" : "顯示所有位置", + "Show all call recordings" : "顯示所有通話錄音", + "Show all audio" : "顯示所有音頻", + "Show all other" : "顯示所有其他", + "Follow conversation settings" : "跟隨對話設定", + "Group" : "群組", + "Team" : "團隊", + "You reconnected to the call" : "您已重新連線至通話", + "{actor} reconnected to the call" : "{actor} 已重新連線至通話", + "You added {user0} and {user1}" : "您添加了 {user0} 與 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["您添加了 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator added you and {user0}" : "管理員添加了您與 {user0}", + "{actor} added you and {user0}" : "{actor} 添加了您與 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理員添加了您、{user0} 與 %n 個其他參與者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 添加了您、{user0} 與 %n 個其他參與者"], + "An administrator added {user0} and {user1}" : "管理員添加了 {user0} 與 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 添加了 {user0} 與 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理員添加了 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 添加了 {user0}、{user1} 與 %n 個其他參與者"], + "You removed {user0} and {user1}" : "您移除了 {user0} 與 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您移除了 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator removed you and {user0}" : "管理員移除了您與 {user0}", + "{actor} removed you and {user0}" : "{actor} 移除了您與 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理員移除了您、{user0} 與 %n 個其他參與者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 移除了您、{user0} 與 %n 個其他參與者"], + "An administrator removed {user0} and {user1}" : "管理員移除了 {user0} 與 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 移除了 {user0} 與 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理員移除了 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 移除了 {user0}、{user1} 與 %n 個其他參與者"], + "You and {user0} joined the call" : "您與 {user0} 已加入通話", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 及 %n 個其他參與者加入了通話"], + "{user0} and {user1} joined the call" : "{user0} 與 {user1} 已加入通話", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 及 %n 個其他參與者已加入通話"], + "You and {user0} left the call" : "您與 {user0} 已離開通話", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 及 %n 個其他參與者已離開通話"], + "{user0} and {user1} left the call" : "{user0} 與 {user1} 已離開通話", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 及 %n 個其他參與者已離開通話"], + "You promoted {user0} and {user1} to moderators" : "您已將 {user0} 與 {user1} 晉升為主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted you and {user0} to moderators" : "管理員已將您與 {user0} 升級為主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 將您與 {user} 升級為主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理員已將 {user0} 與 {user1} 升級為主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 已將 {user0} 與 {user1} 晉升為主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "You demoted {user0} and {user1} from moderators" : "您已將 {user0} 與 {user1} 由主持人降級", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "An administrator demoted you and {user0} from moderators" : "管理員已將您與 {user0} 由主持人降級", + "{actor} demoted you and {user0} from moderators" : "{actor} 將您與 {user} 由主持人降級", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者由主持人降級"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者由主持人降級"], + "An administrator demoted {user0} and {user1} from moderators" : "管理員已將 {user0} 與 {user1} 由主持人降級", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 已將 {user0} 與 {user1} 由主持人降級", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者由主持人降級"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "伺服器已更新。", + "(edited by you)" : "(由您編輯)", + "(edited by a deleted user)" : "(已刪除的用戶編輯)", + "(edited by {moderator})" : "(由 {moderator} 編輯)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在嘗試加入對話,而在另一個窗口或裝置中擁有活動會話。Nextcloud Talk 目前不支持此功能。你想做什麼?", + "Leave this page" : "離開此頁面", + "Join here" : "在這裡加入", + "Deck card has been posted to {conversation}" : "Deck 卡片已發佈至 {conversation}", + "An error occurred while posting deck card to conversation" : "將卡片發佈到對話時發生錯誤", + "Post to a conversation" : "發佈到對話", + "Post to conversation" : "發佈到對話", + "The recording failed. Please contact your administrator." : "錄製失敗。請聯絡管理員。", + "Location has been posted to {conversation}" : "位置已發佈至 {conversation}", + "An error occurred while posting location to conversation" : "將位置發佈到對話時發生錯誤。", + "Share to a conversation" : "分享到對話", + "Share to conversation" : "分享到對話", + "In conversation" : "在對話中", + "Search in conversation: {conversation}" : "在對話中搜尋:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "目前由於防止暴力攻擊保護,您的請求受到限制。", + "Error while clearing conversation history" : "清除對話記錄時出錯", + "Error occurred while allowing guests" : "允許訪客時發生錯誤", + "Error occurred while disallowing guests" : "禁止訪客時發生錯誤", + "Error occurred when restricting the conversation to moderator" : "將對話限制為主持人時發生錯誤", + "Error occurred when opening the conversation to everyone" : "向所有人打開對話時發生錯誤", + "Conversation password has been saved" : "對話密碼已被保存", + "Conversation password has been removed" : "對話密碼已被刪除", + "Error occurred while saving conversation password" : "保存對話密碼時發生錯誤", + "Call recording is starting." : "通話錄音開始。", + "Call recording stopped while starting." : "通話錄音在開始時停止。", + "Call recording stopped. You will be notified once the recording is available." : "通話錄音已停止。 一旦錄音可用,您將收到通知。", + "Conversation picture set" : "對話圖片設定", + "Conversation picture deleted" : "對話圖片已刪除", + "Could not delete the conversation picture" : "無法刪除對話圖片", + "Could not remove the automatic expiration" : "無法移除自動過期", + "Could not post message: {errorMessage}" : "無法發佈訊息:{errorMessage}", + "Participant is banned successfully" : "成功封禁了參與者", + "Error while banning the participant" : "封禁參與者時發生錯誤。", + "An error occurred while fetching the participants" : "擷取參與者時發生錯誤", + "Could not send invitation to {actorId}" : "向 {actorId} 傳送邀請時發生錯誤", + "Invitations sent" : "邀請已傳送", + "Error occurred when sending invitations" : "發送邀請時發生了錯誤", + "Failed to join the conversation." : "無法加入對話。", + "An error occurred while creating breakout rooms" : "建立分組討論室時發生了錯誤", + "An error occurred while re-ordering the attendees" : "重新排序與會者時出錯", + "An error occurred while deleting breakout rooms" : "刪除分組討論室時發生了錯誤", + "An error occurred while starting breakout rooms" : "開始分組討論室時發生錯誤。", + "An error occurred while stopping breakout rooms" : "停止分組討論室時發生錯誤。", + "An error occurred while sending a message to the breakout rooms" : "向分組討論室傳送訊息時發生了錯誤", + "An error occurred while requesting assistance" : "請求協助時出錯", + "An error occurred while resetting the request for assistance" : "重置協助請求時出錯", + "An error occurred while joining breakout room" : "加入分組討論室時發生錯誤。", + "Failed to rename the thread" : "重新命名討論串失敗", + "Error fetching upcoming events" : "擷取即將舉行的活動時發生錯誤", + "Error fetching upcoming reminders" : "擷取即將舉行的提醒時發生錯誤", + "An error occurred while accepting an invitation" : "接受邀請時發生錯誤", + "An error occurred while rejecting an invitation" : "拒絕邀請時發生錯誤", + "{guest} (guest)" : "{guest}(訪客)", + "Poll draft has been saved" : "民意調查草稿已保存", + "An error occurred while saving the draft" : "儲存草稿時發生了錯誤", + "An error occurred while submitting your vote" : "遞交您的投票時發生錯誤。", + "An error occurred while ending the poll" : "結束投票時出錯", + "An error occurred while deleting the poll draft" : "刪除任務時發生了錯誤", + "Poll \"{name}\" was created by {user}. Click to vote" : "投票「{name}」是由 {user} 建立的。點擊投票", + "Failed to add reaction" : "添加反應失敗", + "Failed to remove reaction" : "移除反應失敗", + "The server is in maintenance mode." : "伺服器正處於維護模式。", + "Federated server was updated." : "聯合伺服器已更新。", + "Error while uploading file \"{fileName}\"" : "上傳檔案時發生錯誤 \"{fileName}\"", + "Not enough free space to upload file \"{fileName}\"" : "空間不足,不能上傳檔案 \"{fileName}\"", + "You are not allowed to share files" : "你無權分享檔案", + "Error while sharing file" : "分享檔案時發生錯誤", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk 不完全支持您使用的瀏覽器。請使用最新版本的 Mozilla Firefox,Microsoft Edge,Google Chrome,Opera 或 Apple Safari。", + "_In %n hour_::_In %n hours_" : ["%n 小時後"], + "_%n minute _::_%n minutes_" : ["%n 分鐘"], + "In {hours} and {minutes}" : "{hours} 與 {minutes} 內", + "_In %n minute_::_In %n minutes_" : ["%n 分鐘後"], + "Later today – {timeLocale}" : "今天稍後 – {timeLocale}", + "Set time for later today" : "設定今天稍後的時間", + "Tomorrow – {timeLocale}" : "明日 – {timeLocale}", + "Set time for tomorrow" : "設定明日的時間", + "This weekend – {timeLocale}" : "本週末 – {timeLocale}", + "Set time for this weekend" : "設定本週末的時間", + "Next week – {timeLocale}" : "下星期 – {timeLocale}", + "Set time for next week" : "設定下星期的時間", + "Message link copied to clipboard" : "訊息連結已複製到剪貼板", + "Conversation link copied to clipboard" : "對話連結已複製到剪貼板", + "The link could not be copied" : "連結無法複製", + "Error while parsing a PROPFIND error" : "解析 PROPFIND 錯誤時發生錯誤", + "Sending signaling message has failed" : "傳送訊號訊息失敗", + "Lost connection to signaling server. Trying to reconnect." : "與信令伺服器的連接斷開。嘗試重新連接。", + "Lost connection to signaling server." : "與信號伺服器的連接已斷開。", + "Connecting is taking longer than expected …" : "連線時間比預期長⋯⋯", + "Failed to connect. Retrying …" : "連線失敗,正在重試⋯⋯", + "Failed to connect. The signaling server may be set up incorrectly" : "連線失敗,訊號伺服器可能設定不正確", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "配置的信令伺服器需要更新才能兼容此版本的 Talk。 請聯絡您的管理員。", + "Please restart the app." : "請重新啟動應用程式。", + "Please reload the page." : "請重新整理頁面。", + "Please try to restart the app." : "請嘗試重新啟動應用程式。", + "Please try to reload the page." : "請嘗試重新載入頁面。", + "Do not disturb" : "請勿打擾", + "Away" : "離開", + "Microphone {number}" : "米高風 {number}", + "Camera {number}" : "相機 {number}", + "Speaker {number}" : "喇叭 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎在靜音時說話,請取消靜音以使其他人聽到您的聲音", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "無法與至少一個參與者建立連接。您的處境可能需要安裝 TURN 伺服器。請要求您的管理員按照 {linkstart}本說明書{linkend} 進行設置。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "此操作花費的時間比預期的長。是否已授予(或拒絕)媒體權限?如果是,請重新啟動瀏覽器,因為音頻和視像均出現故障", + "Access to microphone & camera is only possible with HTTPS" : "只有使用 HTTPS 才能存取米高風和相機", + "Please move your setup to HTTPS" : "請將您的設置移至HTTPS", + "Access to microphone & camera was denied" : "無法存取米高風和相機", + "WebRTC is not supported in your browser" : "你使用的瀏覽器不支援 WebRTC", + "Please use a different browser like Firefox or Chrome" : "請使用其他瀏覽器,例如Firefox或Chrome", + "Error while accessing microphone & camera" : "存取米高風和相機時發生錯誤", + "%s Talk on your mobile devices" : "%s Talk 在您的流動裝置上", + "Join conversations at any time, anywhere, on any device." : "隨時隨地在任何裝置上加入對話。", + "Android app" : "Android 應用程式", + "iOS app" : "iOS 應用程式", + "__language_name__" : "正體中文(香港)", + "Webhook Demo" : "Webhook 示範", + "Call summary (%s)" : "通話摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通話摘要機器人在通話後張貼概述訊息,列出所有參與者並概述任務", + "Tasks" : "任務", + "Notes" : "備註", + "Reports" : "報告", + "Decisions" : "決定", + "Agenda" : "議程", + "Call summary" : "通話摘要", + "Call summary - {title}" : "通話摘要 - {title}", + "Talk conversation for event" : "活動 Talk 對話", + "Client Push is installed, this improves the performance of desktop clients." : "已安裝客戶端推送,這會改善桌面客戶端的效能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "尚未安裝 {notify_push},在使用桌面客戶端時,這可能會導致性能問題。", + "Next meeting" : "下一個會議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "從您的日曆安排會議。必須將 Talk 對話設定為位置以在此處顯示", + "Join conversations from remote Nextcloud servers" : "加入來自遠端 Nextcloud 伺服器的對話", + "Your default media state has been saved" : "已儲存您的預設媒體狀態", + "Set reminder for later today" : "設定今天稍後的提醒", + "Set reminder for tomorrow" : "設定明日的提醒", + "Set reminder for this weekend" : "設定本週末的提醒", + "Set reminder for next week" : "設定下星期的提醒", + "Generate summary" : "產生摘要", + "Open poll • You voted already" : "公開民意調查・已投票", + "Open poll • Click to vote" : "公開民意調查 · 點擊投票", + "Poll • Ended" : "民意調查・已結束", + "Talk recording from {time} ({conversation})" : "從 {time} 開始的談話錄音({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["民意調查結果 • %n 票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["公開民意調查 • %n 票"], + "Submit vote" : "遞交投票", + "Your privacy setting has been saved" : "已更新您的私隱設定", + "Your personal setting has been saved" : "您的個人設置已保存", + "Failed to save sounds setting" : "聲音設定儲存失敗", + "Sounds setting saved" : "聲音設置已保存", + "Always shown if recording consent is required" : "若需取得錄影同意,此提示將一律顯示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您無法開始或加入通話。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "您在另一個窗口或裝置中加入了對話。Nextcloud Talk 目前不支持此功能,因此該節,時段已關閉。", + "Nextcloud Talk was updated." : "Nextcloud 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 處於維護模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "啟用即時翻譯", + "I picked list style" : "已選擇清單樣式", + "Hey! Are you using Talk in list style or with message bubbles?" : "你目前在 Talk 中使用列表顯示還是訊息氣泡顯示?" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/l10n/zh_TW.js b/l10n/zh_TW.js new file mode 100644 index 0000000..78357b1 --- /dev/null +++ b/l10n/zh_TW.js @@ -0,0 +1,2262 @@ +OC.L10N.register( + "spreed", + { + "a conversation" : "對話", + "(Duration %s)" : "(已歷時 %s)", + "You attended a call with {user1}" : "您加入了與 {user1} 之間的通話", + "_%n guest_::_%n guests_" : ["%n 位訪客"], + "You attended a call with {user1} and {user2}" : "您加入了與 {user1} 及 {user2} 之間的通話", + "You attended a call with {user1}, {user2} and {user3}" : "您加入了與 {user1}、{user2} 及 {user3} 之間的通話", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您加入了與 {user1}、{user2}、{user3} 及 {user4} 之間的通話", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您加入了與 {user1}、{user2}、{user3}、{user4} 及 {user5} 之間的通話", + "_%n other_::_%n others_" : ["及另外 %n 位其他人"], + "{actor} invited you to {call}" : "{actor} 邀請您加入 {call}", + "You were invited to a conversation or had a call" : "您已被邀請加入一個對話通話", + "Other activities" : "其它活動", + "Talk" : "Talk", + "Guest" : "訪客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 歡迎使用 Nextcloud Talk!\n在此對話中,您將了解關於 Nextcloud Talk 中提供的新功能。 ", + "## New in Talk %s" : "## Talk %s 的新功能", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 現在可以使用 Microsoft Edge 和 Safari 參與語音和視訊通話 ", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 一對一對話現在是永久的,不會再意外變成群組對話。同樣,當參與者之一離開對話時,該對話將不再自動刪除。僅當參與者雙方都離開時,對話才會從伺服器中刪除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您現在可以透過在聊天室中張貼「@all」來通知所有參與者了", + "- With the \"arrow-up\" key you can repost your last message" : "- 使用「上方向鍵」,您可以重新張貼上一則訊息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk 現在支援指令。在聊天訊息中傳送「/help」以檢視管理員是否設定了任何指令", + "- With projects you can create quick links between conversations, files and other items" : "- 使用專案,您可以在對話、檔案與其他項目間建立快速連結", + "- You can now mention guests in the chat" : "- 您現在可以在聊天中提及訪客", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 對話現在有大廳功能了。這讓主持人可以加入聊天與通話以準備會議,而使用者與訪客則必須等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您現在可以直接回覆訊息,為其他使用者提供更多關於您訊息內容的情境", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 搜尋對話與參與者現在也將過濾您現有的對話,從而更容易找到以前的對話", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 您現在可以在安裝小圈圈應用程式時將自訂使用者群組新增至對話中", + "- Check out the new grid and call view" : "- 體驗新的網格與通話介面", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您現在可以上傳或直接從您的裝置拖曳檔案到聊天中", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 分享檔案現在可以直接在聊天檢視中以檢視器應用程式開啟", + "- You can now search for chats and messages in the unified search in the top bar" : "- 您現在可以在頂部列統一搜尋中搜尋聊天與訊息", + "- Spice up your messages with emojis from the emoji picker" : "- 使用表情符號選擇器中的表情符號來豐富您的訊息", + "- You can now change your camera and microphone while being in a call" : "- 您現在可以在通話中變更您的攝影機與麥克風", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 為您的對話加入一些背景和描述,並可將其開放,以便於已登入使用者可以找到並自行加入", + "- See a read status and send failed messages again" : "- 檢視閱讀狀態和重新發送失敗的訊息", + "- Raise your hand in a call with the R key" : "- 使用 R 鍵在通話中進行舉手操作", + "- Join the same conversation and call from multiple devices" : "透過多重裝置加入同一個對話或語音通話", + "- Send voice messages, share your location or contact details" : "- 可傳送語音信息,分享您的位置訊息或聯絡資訊", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 將群組新增到對話中,該群組中所有成員將自動成為對話參與者", + "- A preview of your audio and video is shown before joining a call" : "- 在加入通話之前顯示您的音訊與視訊預覽", + "- You can now blur your background in the newly designed call view" : "- 您現在可以在新設計的通話檢視中模糊背景", + "- Moderators can now assign general and individual permissions to participants" : "- 主持人現在可以分配一般與個人權限給參與者", + "- You can now react to chat messages" : "- 您現在可以對聊天訊息做出回應", + "- In the sidebar you can now find an overview of the latest shared items" : "- 現在您可以在側邊列中找到最新已分享項目的概覽", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用投票來蒐集其他人的意見或決定日期", + "- Configure an expiration time for chat messages" : "- 設定聊天訊息的過期時間", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在大型對話中,於不通知其他人的情況下開始通話。通話開始後,您可以傳送單獨的通話通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不緊急的情況下傳送聊天訊息而不通知收件者", + "- Emojis can now be autocompleted by typing a \":\"" : "- 表情符號現在可以透過輸入 \":\" 自動完成", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 透過輸入 \"/\" 使用新的智慧型挑選器連結各種項目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人現在可以建立分組討論室(需要高效能後端)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 現在可以錄製通話了(需要高效能後端)", + "- Conversations can now have an avatar or emoji as icon" : "- 對話現在可以用大頭貼或表情符號作為圖示了", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 視訊通話除了模糊背景以外,現在也可以使用虛擬背景了", + "- Reactions are now available during calls" : "- 現在可以在通話期間做出反應", + "- Typing indicators show which users are currently typing a message" : "- 打字指示器顯示目前正在打字的使用者", + "- Groups can now be mentioned in chats" : "- 現在可以在聊天中提及群組", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 若註冊了文字紀錄提供者應用程式,通話錄音會自動轉寫", + "- Chat messages can be translated if a translation provider app is registered" : "- 若註冊了翻譯提供者應用程式,則可以翻譯聊天訊息", + "- **Markdown** can now be used in _chat_ messages" : "- 現在可以在 _聊天_ 訊息中使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook 現在可用於實作機器人。要取得更多資訊,請參閱文件 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 在聊天訊息上設定提醒,如此稍後可收到通知", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用**給自己的筆記 **對話來記筆記並在裝置間分享資訊", + "- Captions allow to send a message with a file at the same time" : "- 字幕允許同時傳送包含檔案的訊息", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 現在在分享螢幕時可以看到演講者的視訊,通話反應以動畫形式顯示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登入的作者與主持人可以在6小時內編輯訊息", + "- Unsent message drafts are now saved in your browser" : "- 未傳送的訊息草稿現在會儲存在您的瀏覽器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 文字聊天現在可以透過聯盟方式與其他 Talk 伺服器通訊", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人現在可以封鎖帳號與訪客,避免他們重新加入對話", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 來自連結的日曆事件以及離開辦公室取代的即將到來的通話現在會顯示在對話中", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 通話現在可以透過聯盟方式與其他 Talk 伺服器通訊(需要高效能後端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 引入適用於 Windows、macOS 與 Linux 的 Nextcloud Talk 桌面客戶端:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud 小幫手總結通話錄音與聊天中的未讀訊息", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 透過電子郵件地址、匯入參與者名單、投票草稿與下載通話參與者名單,改善會議中可辨識邀請來賓的功能", + "- Archive conversations to stay focused" : "- 封存對話以保持專注", + "- Schedule a meeting into your calendar from within a conversation" : "- 在對話中安排會議到您的日曆", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右側邊欄搜尋目前對話的訊息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的精簡清單(在 Talk 設定中啟用),第一眼就能看到更多對話內容", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 會議對話現在會同步行事曆中的標題與描述,並會隱藏搜尋篩選條件,直到接近開始時為止", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知設定中將對話標記為敏感,從對話清單與通知中隱藏訊息內容", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 若要在「請勿打擾」期間接收推送通知,請將對話標記為重要對話", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 在一對一通話中加入其他參與者,以立即建立新的群組通話", + "- Use threads to keep your chat and discussions organized" : "- 使用討論串來讓您的聊天與討論井然有序", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話期間現已提供即時轉錄功能(需安裝即時轉錄 ExApp 及高效能後端系統)", + "- Moderators can now pin messages so they are kept at the top" : "- 版主現在可以釘選訊息,使其保持在頂端顯示", + "- Schedule a message to send it at a later time" : "- 排程訊息以便稍後發送", + "_All %n participant_::_All %n participants_" : ["全部 %n 個參與者"], + "Talk updates ✅" : "Talk 更新 ✅", + "Reaction deleted by author" : "回應被作者刪除", + "{actor} created the conversation" : "{actor} 建立了對話", + "You created the conversation" : "您建立了對話", + "System created the conversation" : "系統建立了對話", + "An administrator created the conversation" : "管理員建立了對話", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} 將對話從「%1$s」重新命名為「%2$s」", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您將對話從「%1$s」重新命名為「%2$s」", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理員將對話從「%1$s」重新命名為「%2$s」", + "{actor} set the description" : "{actor} 設定了描述", + "You set the description" : "您設定了描述", + "An administrator set the description" : "管理員設定了描述", + "{actor} removed the description" : "{actor} 移除了描述", + "You removed the description" : "您移除了描述", + "An administrator removed the description" : "管理員移除了描述", + "You started a silent call" : "您發起了無聲通話", + "Outgoing silent call" : "無聲去電", + "{actor} started a silent call" : "{actor} 發起了無聲通話", + "Incoming silent call" : "無聲來電", + "You started a call" : "您發起了通話", + "Outgoing call" : "去電", + "{actor} started a call" : "{actor} 發起了通話", + "Incoming call" : "來電", + "{actor} joined the call" : "{actor} 加入了通話", + "You joined the call" : "您加入了通話", + "{actor} left the call" : "{actor} 離開了通話", + "You left the call" : "您離開了通話", + "{actor} unlocked the conversation" : "{actor} 解鎖了對話", + "You unlocked the conversation" : "您解鎖了對話", + "An administrator unlocked the conversation" : "管理員解鎖了對話", + "{actor} locked the conversation" : "{actor} 鎖定了對話", + "You locked the conversation" : "您鎖定了對話", + "An administrator locked the conversation" : "管理員鎖定了對話", + "{actor} limited the conversation to the current participants" : "{actor} 將對話限制於目前的參與者", + "You limited the conversation to the current participants" : "您將對話限制於目前的參與者", + "An administrator limited the conversation to the current participants" : "管理員將對話限制於目前的參與者", + "{actor} opened the conversation to registered users" : "{actor} 向已註冊使用者開放了對話", + "You opened the conversation to registered users" : "您向已註冊使用者開放了對話", + "An administrator opened the conversation to registered users" : "管理員向已註冊使用者開放了對話", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "You opened the conversation to registered users and users created with the Guests app" : "您向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理員向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "The conversation is now open to everyone" : "對話現在對所有人開放", + "{actor} opened the conversation to everyone" : "{actor} 對所有人開放了對話", + "You opened the conversation to everyone" : "您對所有人開放了對話", + "{actor} restricted the conversation to moderators" : "{actor} 將對話限制為主持人", + "You restricted the conversation to moderators" : "您將對話限制為主持人", + "{actor} started breakout rooms" : "{actor} 開始了分組討論室", + "You started breakout rooms" : "您開始了分組討論室", + "{actor} stopped breakout rooms" : "{actor} 停止了分組討論室", + "You stopped breakout rooms" : "您停止了分組討論室", + "{actor} allowed guests" : "{actor} 已允許訪客加入", + "You allowed guests" : "您已允許訪客加入", + "An administrator allowed guests" : "管理員已允許訪客加入", + "{actor} disallowed guests" : "{actor} 已停用訪客加入", + "You disallowed guests" : "您已停用訪客加入", + "An administrator disallowed guests" : "管理員已停用訪客加入", + "{actor} set a password" : "{actor} 已設定密碼", + "You set a password" : "您已設定密碼", + "An administrator set a password" : "管理員已設定密碼", + "{actor} removed the password" : "{actor} 移除了密碼", + "You removed the password" : "您移除了密碼", + "An administrator removed the password" : "管理員移除了密碼", + "{actor} added {user}" : "{actor} 新增了 {user}", + "You joined the conversation" : "您加入了對話", + "{actor} joined the conversation" : "{actor} 加入了對話", + "You added {user}" : "您新增了 {user}", + "{actor} added you" : "{actor} 新增了您", + "An administrator added you" : "管理員新增了您", + "An administrator added {user}" : "管理員新增了 {user}", + "You left the conversation" : "您離開了對話", + "{actor} left the conversation" : "{actor} 離開了對話", + "{actor} removed {user}" : "{actor} 移除了 {user}", + "You removed {user}" : "您移除了 {user}", + "{actor} removed you" : "{actor} 移除了您", + "An administrator removed you" : "管理員移除了您", + "An administrator removed {user}" : "管理員移除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀請了 {federated_user}", + "You invited {federated_user}" : "您邀請了 {federated_user}", + "You accepted the invitation" : "您接受了邀請", + "{actor} invited you" : "{actor} 邀請了您", + "An administrator invited you" : "管理員邀請了您", + "An administrator invited {federated_user}" : "管理員邀請了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀請", + "{actor} removed {federated_user}" : "{actor} 移除了 {federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您拒絕了邀請", + "An administrator removed {federated_user}" : "管理員移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 拒絕了邀請", + "{actor} added group {group}" : "{actor} 新增了群組 {group}", + "You added group {group}" : "您新增了群組 {group}", + "An administrator added group {group}" : "管理員新增了群組 {group}", + "{actor} removed group {group}" : "{actor} 移除了群組 {group}", + "You removed group {group}" : "您移除了群組 {group}", + "An administrator removed group {group}" : "管理員移除了群組 {group}", + "{actor} added team {circle}" : "{actor} 新增了團隊 {circle}", + "You added team {circle}" : "您新增了團隊 {circle}", + "An administrator added team {circle}" : "管理員新增了團隊 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了團隊 {circle}", + "You removed team {circle}" : "您移除了團隊 {circle}", + "An administrator removed team {circle}" : "管理員移除了團隊 {circle}", + "{actor} added {phone}" : "{actor} 新增了 {phone}", + "You added {phone}" : "您新增了 {phone}", + "An administrator added {phone}" : "管理員新增了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "您移除了 {phone}", + "An administrator removed {phone}" : "管理員移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor} 將 {user} 升級為主持人", + "You promoted {user} to moderator" : "您將 {user} 升級為主持人", + "{actor} promoted you to moderator" : "{actor} 將您升級為主持人", + "An administrator promoted you to moderator" : "管理員將您升級為主持人", + "An administrator promoted {user} to moderator" : "管理員將 {user} 升級為主持人", + "{actor} demoted {user} from moderator" : "{actor} 將 {user} 從主持人降級", + "You demoted {user} from moderator" : "您將 {user} 從主持人降級", + "{actor} demoted you from moderator" : "{actor} 將您從主持人降級", + "An administrator demoted you from moderator" : "管理員將您從主持人降級", + "An administrator demoted {user} from moderator" : "管理員將 {user} 從主持人降級", + "{actor} shared a file which is no longer available" : "{actor} 分享了一個不再可用的檔案", + "You shared a file which is no longer available" : "您分享了一個不再可用的檔案", + "File shares are currently not supported in federated conversations" : "在聯盟式對話中目前不支援分享檔案", + "The shared location is malformed" : "分享位置格式錯誤", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 設定了 Matterbridge 以將此對話與其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "您設定了 Matterbridge 以將此對話與其他聊天同步", + "{actor} created thread {title}" : "{actor} 建立了討論串 {title}", + "You created thread {title}" : "您建立了討論串 {title}", + "{actor} renamed thread {title}" : "{actor} 重新命名了討論串 {title}", + "You renamed thread {title}" : "您重新命名了討論串 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 組態", + "You updated the Matterbridge configuration" : "您更新了 Matterbridge 組態", + "{actor} removed the Matterbridge configuration" : "{actor} 刪除了 Matterbridge 組態", + "You removed the Matterbridge configuration" : "您刪除了 Matterbridge 組態", + "{actor} started Matterbridge" : "{actor} 啟動了 Matterbridge", + "You started Matterbridge" : "您啟動了 Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "您停止了 Matterbridge", + "{actor} deleted a message" : "{actor} 刪除了訊息", + "You deleted a message" : "您刪除了訊息", + "{actor} edited a message" : "{actor} 編輯了訊息", + "You edited a message" : "您編輯了訊息", + "{actor} pinned a message" : "{actor} 釘選了訊息", + "You pinned a message" : "您釘選了訊息", + "{actor} unpinned a message" : "{actor} 取消釘選了訊息", + "Message was automatically unpinned" : "訊息已自動取消釘選", + "You unpinned a message" : "您取消釘選了訊息", + "{actor} deleted a reaction" : "{actor} 刪除了反應", + "You deleted a reaction" : "您刪除了反應", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您將訊息過期時間設定為%n週"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您將訊息過期時間設定為%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您將訊息過期時間設定為%n小時"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您將訊息過期時間設定為%n分鐘"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} 將訊息過期時間設定為%n分鐘"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} 將訊息過期時間設定為%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} 將訊息過期時間設定為%n小時"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} 將訊息過期時間設定為%n分鐘"], + "{actor} disabled message expiration" : "{actor} 停用了訊息過期時間", + "You disabled message expiration" : "您停用了訊息過期時間", + "{actor} cleared the history of the conversation" : "{actor} 清除了對話的歷史紀錄", + "You cleared the history of the conversation" : "您清除了對話的歷史紀錄", + "{actor} set the conversation picture" : "{actor} 設定了對話圖片", + "You set the conversation picture" : "您設定了對話圖片", + "{actor} removed the conversation picture" : "{actor} 移除了對話圖片", + "You removed the conversation picture" : "您移除了對話圖片", + "{actor} ended the poll {poll}" : "{actor} 結束了投票 {poll}", + "You ended the poll {poll}" : "您結束了投票 {poll}", + "{actor} started the video recording" : "{actor} 開始錄影", + "You started the video recording" : "您開始錄影", + "{actor} stopped the video recording" : "{actor} 停止錄影", + "You stopped the video recording" : "您停止錄影", + "{actor} started the audio recording" : "{actor} 開始錄音", + "You started the audio recording" : "您開始錄音", + "{actor} stopped the audio recording" : "{actor} 停止錄音", + "You stopped the audio recording" : "您停止錄音", + "The recording failed" : "錄音失敗", + "Someone voted on the poll {poll}" : "某人在投票 {poll} 中投票了", + "Message deleted by author" : "訊息已被作者刪除", + "Message deleted by {actor}" : "訊息已被 {actor} 刪除", + "Message deleted by you" : "訊息已被您刪除", + "Deleted user" : "已刪除的使用者", + "Unknown number" : "未知號碼", + "Administration" : "管理", + "System" : "系統", + "%s (guest)" : "%s(訪客)", + "Missed call" : "未接通話", + "Unanswered call" : "未接通話", + "Call ended (Duration {duration})" : "通話結束(持續時間 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "因為通話已達到最長通話時間(持續時間{duration})而結束", + "{actor} ended the call (Duration {duration})" : "{actor} 已結束通話(持續時間{duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["因為與 %n 個訪客的通話已達到最長通話時間(持續時間 {duration})而結束"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["與 %n 位訪客的通話結束(持續時間 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 結束了與 %n 位訪客的通話(持續時間 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1} 的通話已達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} ended (Duration {duration})" : "與 {user1} 的通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 結束了與 {user1} 的通話(持續時間 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1} 及 {user2} 的通話已達到最長通話時間(持續時間{duration})而結束", + "Call with {user1} and {user2} ended (Duration {duration})" : "與 {user1} 及 {user2} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 結束了與 {user1} 及 {user2} 的通話(持續時間 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1}、{user2} 與 {user3} 的通話已達到最長通話時間(持續時間:{duration})而結束", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2} 及 {user3} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3} 及 {user4} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話(持續時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中來自 {user} 的訊息", + "Message of {user}" : "{user} 的訊息", + "Message of a deleted user in {conversation}" : "{conversation} 中已刪除使用者的訊息", + "Talk conversations" : "Talk 交談", + "Talk to %s" : "與 %s 交談", + "An error occurred. Please contact your administrator." : "發生錯誤,請聯絡管理員。", + "App disabled" : "應用程式已停用", + "Conversation subfolders are disabled" : "已停用對話子資料夾", + "Storage quota exceeded" : "超過儲存空間容量限制", + "Could not prepare conversation folder" : "無法準備對話資料夾", + "File not found" : "找不到檔案", + "Path must point to a file" : "路徑必須指向檔案", + "File is not inside the conversation draft folder for this room" : "檔案不在此聊天室的草稿資料夾中", + "File is not shared, or shared but not with the user" : "檔案未被分享,或未與使用者分享", + "No account available to delete." : "沒有可刪除的帳號。", + "Poll" : "投票", + "Password needs to be set" : "需要設定密碼", + "Uploading the file failed" : "上傳檔案失敗", + "No image file provided" : "未提供圖片檔案", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", + "Invalid image" : "圖片無效", + "Unknown filetype" : "未知的檔案類型", + "Talk mentions" : "Talk 提及", + "More conversations" : "更多對話", + "Say hi to your friends and colleagues!" : "跟您的朋友與同事打招呼!", + "No unread mentions" : "沒有未讀的提及", + "Call in progress" : "通話進行中", + "You were mentioned" : "您被提及", + "Write to conversation" : "寫入至對話", + "Writes event information into a conversation of your choice" : "將事件資訊寫入至您選擇的對話中", + "Missing email field in header line" : "標題行中缺少電子郵件欄位", + "Following lines are invalid: %s" : "以下行無效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀請您加入對話「%2$s」。", + "You were invited to conversation \"%s\"." : "您被邀請加入對話「%s」。", + "Conversation invitation" : "對話邀請", + "Scheduled time" : "排定時間", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "您也可以使用以下資訊,透過電話撥號加入", + "Dial-in information" : "撥號加入資訊", + "Meeting ID" : "會議 ID", + "Your PIN" : "您的 PIN", + "Click the button below to join the lobby now." : "點選下方按鈕以立刻加入大廳。", + "Click the link below to join the lobby now." : "點選下方連結以立刻加入大廳。", + "Join lobby for \"%s\"" : "加入「%s」的大廳", + "Click the button below to join the conversation now." : "點選下方按鈕以立刻加入對話。", + "Click the link below to join the conversation now." : "點選下方連結以立刻加入對話。", + "Join \"%s\"" : "加入「%s」", + "Meeting" : "會議", + "Password request: %s" : "密碼請求:%s", + "Private conversation" : "私人對話", + "Deleted user (%s)" : "已刪除使用者 (%s)", + "Failed to upload call recording" : "上傳通話錄音失敗", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "錄音伺服器上傳通話 {call} 的錄音失敗。請聯絡管理員。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "忽略通知", + "Call recording now available" : "通話錄音現已可用", + "The recording for the call in {call} was uploaded to {file}." : "{call} 中的通話錄音已上傳到 {file}。", + "Transcript now available" : "文字紀錄現已可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 通話的文字紀錄已上傳至 {file}。", + "Failed to transcript call recording" : "通話錄音文字轉錄失敗", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立文字紀錄。請聯絡管理員。", + "Call summary now available" : "通話摘要現已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 通話的摘要已上傳至 {file}。", + "Failed to summarize call recording" : "通話錄音文字摘要失敗", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立摘要。請聯絡管理員。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀請您加入在 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "回絕", + "{user1} invited you to a federated conversation" : "{user1} 邀請您加入聯合對話", + "Someone reacted" : "有人回應了", + "New message" : "新郵件", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通知", + "Someone reacted in a private conversation" : "有人在私人對話中反應了", + "You received a message in a private conversation" : "您在私人對話中收到訊息", + "Reminder in a private conversation" : "私人對話中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人對話中提及您", + "Notification in a private conversation" : "私人對話中的通知", + "Reminder: You in {call}" : "提醒:您在 {call} 中", + "Reminder: {user} in {call}" : "提醒:{user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已刪除的使用者在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:{guest}(訪客)在 {call} 中", + "Reminder: Guest in {call}" : "提醒:訪客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 使用 {reaction} 反應", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中使用 {reaction} 反應", + "Deleted user reacted with {reaction} in {call}" : "已刪除的使用者在 {call} 中使用 {reaction} 反應", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}(訪客)在 {call} 中使用 {reaction} 反應", + "Guest reacted with {reaction} in {call}" : "訪客在 {call} 中使用 {reaction} 反應", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "{call} 中已刪除的使用者", + "{guest} (guest) in {call}" : "{call} 中的 {guest}(訪客)", + "Guest in {call}" : "在 {call} 中的訪客", + "{user} sent you a private message" : "{user} 向您傳送了私人訊息", + "{user} sent a message in conversation {call}" : "{user} 在對話 {call} 中傳送了訊息", + "A deleted user sent a message in conversation {call}" : "刪除的使用者在對話 {call} 中傳送了訊息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(訪客)在對話 {call} 中傳送了訊息", + "A guest sent a message in conversation {call}" : "訪客在對話 {call} 中傳送了訊息", + "{user} replied to your private message" : "{user} 回覆了您的私人訊息", + "{user} replied to your message in conversation {call}" : "{user} 在對話 {call} 中回覆了您的訊息", + "A deleted user replied to your message in conversation {call}" : "刪除的使用者在對話 {call} 中回覆了您的訊息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(訪客)在對話 {call} 中回覆了您的訊息", + "A guest replied to your message in conversation {call}" : "訪客在對話 {call} 中回覆了您的訊息", + "Reminder: You in private conversation {call}" : "提醒:您在私人對話 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已刪除的使用者在私人對話 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私人對話 {call} 中", + "Reminder: You in conversation {call}" : "提醒:您在對話 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在對話 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已刪除的使用者在對話 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:{guest}(訪客)在對話 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:訪客在對話 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user} 對您的私人訊息做出了 {reaction} 反應", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} 在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "已刪除的使用者在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}(訪客)在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "A guest reacted with {reaction} to your message in conversation {call}" : "訪客在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "{user} mentioned you in a private conversation" : "{user} 在私人對話中提及您", + "{user} mentioned group {group} in conversation {call}" : "{user} 在對話 {call} 中提及群組 {group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在對話 {call} 中提及團隊 {team}", + "{user} mentioned everyone in conversation {call}" : "{user} 在對話 {call} 中提及所有人", + "{user} mentioned you in conversation {call}" : "{user} 在對話 {call} 中提及您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已刪除的使用者在對話 {call} 中提及群組 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "已刪除的使用者在對話 {call} 中提及團隊 {team}", + "A deleted user mentioned everyone in conversation {call}" : "已刪除的使用者在對話 {call} 中提及所有人", + "A deleted user mentioned you in conversation {call}" : "已刪除的使用者在對話 {call} 中提及您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及群組 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及團隊 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及您", + "A guest mentioned group {group} in conversation {call}" : "一位訪客在對話 {call} 中提及群組 {group}", + "A guest mentioned team {team} in conversation {call}" : "訪客在對話 {call} 中提及團隊 {team}", + "A guest mentioned everyone in conversation {call}" : "一位訪客在對話 {call} 中提及所有人", + "A guest mentioned you in conversation {call}" : "訪客在對話 {call} 中提及您", + "View message" : "檢視訊息", + "Dismiss reminder" : "取消提醒", + "View chat" : "檢視聊天", + "{user} invited you to a group conversation: {call}" : "{user} 邀請您加入群組對話:{call}", + "Join call" : "加入通話", + "Answer call" : "接聽通話", + "{user} would like to talk with you" : "{user} 想要與您交談", + "Call back" : "回電", + "You missed a call from {user}" : "您錯過了 {user} 的來電", + "Accept call" : "接聽通話", + "Incoming phone call from {call}" : "{call} 的來電", + "You missed a phone call from {call}" : "您錯過了 {call} 的來電", + "A group call has started in {call}" : "{call} 中的群組通話已經開始", + "You missed a group call in {call}" : "您錯過了 {call} 中的群組通話", + "{email} is requesting the password to access {file}" : "{email} 請求密碼以存取 {file}", + "{email} tried to request the password to access {file}" : "{email} 嘗試請求密碼以存取 {file}", + "Someone is requesting the password to access {file}" : "有人請求密碼以存取 {file}", + "Someone tried to request the password to access {file}" : "有人嘗試請求密碼以存取 {file}", + "Open settings" : "開啟設定", + "Hosted signaling server added" : "已新增架設好的訊號伺服器", + "The hosted signaling server is now configured and will be used." : "已設定好架設的訊號伺服器並將被使用。", + "Hosted signaling server removed" : "已移除架設好的訊號伺服器", + "The hosted signaling server was removed and will not be used anymore." : "架設的訊號伺服器已被移除且無法再使用。", + "Hosted signaling server changed" : "已變更架設好的訊號伺服器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "架設的訊號伺服器帳號已將狀態從「{oldstatus}」變更為「{newstatus}」。", + "pending" : "擱置中", + "active" : "作用中", + "expired" : "已過期", + "blocked" : "已封鎖", + "error" : "錯誤", + "The certificate of {host} expires in {days} days" : "{host} 的憑證將在 {days} 天後過期", + "The certificate of {host} expired" : "{host} 的憑證已過期", + "Contact via Talk" : "透過 Talk 連結", + "Open Talk" : "開啟 Talk", + "Default" : "預設", + "Send messages, create threads, and start voice and video calls." : "傳送訊息、建立討論串、開始音訊與視訊通話。", + "Presentation" : "簡報", + "Voice room" : "語音聊天室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通話,非常適合閒聊或臨時開會。", + "Webinar" : "網路研討會", + "Conversations" : "對話", + "Messages in current conversation" : "目前對話中的訊息", + "{user}" : "{user}", + "Messages" : "訊息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "其他對話中的訊息", + "One-to-one rooms always need to show the other users avatar" : "一對一的聊天室一律必須顯示其他使用者的大頭照", + "Invalid emoji character" : "無效的表情符號字元", + "Invalid background color" : "無效背景色彩", + "Avatar image is not square" : "大頭照圖片不是正方形", + "Room {number}" : "聊天室 {number}", + "Other" : "其他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "因為無法連線至試用伺服器,無法請求試用。請稍後再試。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此站台的身份驗證有問題。可能無法從外部連結以確認其 URL。", + "Something unexpected happened." : "出現了一些意外的狀況。", + "The URL is invalid." : "URL 無效。", + "An HTTPS URL is required." : "必須使用 HTTPS URL。", + "The email address is invalid." : "電子郵件無效。", + "The language is invalid." : "語言無效。", + "The country is invalid." : "國家無效。", + "There is a problem with the request of the trial. Please check your logs for further information." : "試用請求有問題。請檢查您的紀錄檔以取得進一步的資訊。", + "Too many requests are send from your servers address. Please try again later." : "您的伺服器地址傳送了太多請求。請稍後再試。", + "There is already a trial registered for this Nextcloud instance." : "此 Nextcloud 站台已有一個試用註冊。", + "Something unexpected happened. Please try again later." : "出現了一些意外的狀況。請稍後再試。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "因為試用伺服器行為不正確,因此無法請求試用。請稍後再試。", + "Trial requested but failed to get account information. Please check back later." : "已請求試用,但無法取得帳號資訊。請稍後再試。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此請求的身份驗證有問題。可能無法從外部連結以確認其 URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "因為試用伺服器行為不正確,因此無法擷取帳號資訊。請稍後再試。", + "There is a problem with fetching the account information. Please check your logs for further information." : "擷取帳號資訊時發生問題。請檢查您的紀錄檔以取得更多資訊。", + "There is no such account registered." : "沒有此已註冊的帳號。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "因為無法連結試用伺服器,因此無法擷取帳號資訊。請稍後再試。", + "Deleting the hosted signaling server account failed. Please check back later." : "刪除架設的訊號伺服器帳號失敗。請稍後再試。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "因為試用伺服器行為不正確,因此無法刪除帳號。請稍後再試。", + "There is a problem with deleting the account. Please check your logs for further information." : "刪除帳號時發生問題。請檢查您的紀錄檔以取得更多資訊。", + "Too many requests are sent from your servers address. Please try again later." : "您的伺服器地址傳送了太多請求。請稍後再試。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "因為無法連結試用伺服器,因此無法刪除帳號。請稍後再試。", + "Note to self" : "給自己的筆記", + "A place for your private notes, thoughts and ideas" : "一個用於儲存您的私人筆記、思考與想法的地方", + "Transcript is AI generated and may contain mistakes" : "轉錄為人工智慧產生,可能有錯", + "Summary is AI generated and may contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Let's get started!" : "我們開始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是安全可自架的通訊平台,並與 Nextcloud 生態系無縫整合。\n\n#### Nextcloud Talk 的重要功能:\n\n* 在私人與群組聊天中傳送訊息\n* 音訊與視訊通話\n* 檔案分享以及其他 Nextcloud 應用程式的整合\n* 可自訂的對話設定、審核與隱私控制\n* 網頁、桌面與行動裝置(iOS 與 Android)\n* 私密且安全的通訊\n\n 在[使用者文件](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)中了解更多資訊。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 歡迎使用 Nextcloud Talk\n\nNextcloud Talk 是與 Nextcloud 整合的私密且功能強大的訊息應用程式。以私人或群組對話方式聊天、透過語音與視訊通話進行協作、舉辦網路研討會與活動、自訂您的對話等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 格式化文字以建立多采多姿的訊息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 語法來格式化您的訊息。例如,套用**粗體**或*義式斜體*格式,或「將文字突顯為程式碼」。您甚至可以建立表格,並在文字中加入標題。\n\n需要修正錯字或變更格式嗎?按一下訊息功能表中的「編輯訊息」即可編輯您的訊息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 新增附件與連結\n\n使用「+」按鈕從 Nextcloud Hub 附加檔案。從檔案與各種 Nextcloud 應用程式分享項目。有些應用程式甚至支援互動小工具,例如 Text 應用程式。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 讓對話流暢:提及使用者、回應訊息等\n\n您可以使用 %s 來提及對話中的每個人,或是輸入「@」並從清單中選出特定參與者的名字來提及他們。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回覆訊息、將訊息轉寄給其他聊天室與夥伴,或複製訊息內容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智慧型挑選程式做更多\n\n只要輸入「/」或前往「+」功能表,即可開啟智慧型挑選程式,在這裡您可以將各種內容附加到訊息中。您可以設定智慧型挑選程式,讓它能夠加入 Nextcloud 應用程式、GIF、地圖位置、AI 產生的內容等項目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理對話設定\n\n在對話功能表中,您可以存取各種設定來管理您的對話,例如\n* 編輯對話資訊\n* 管理通知\n* 套用許多審核規則\n* 設定存取權限與安全性\n* 啟用機器人\n* 以及更多!", + "Andorra" : "安道爾", + "United Arab Emirates" : "阿拉伯聯合大公國", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布達", + "Anguilla" : "安吉拉", + "Albania" : "阿爾巴尼亞", + "Armenia" : "亞美尼亞", + "Angola" : "安哥拉", + "Antarctica" : "南極地區", + "Argentina" : "阿根廷", + "American Samoa" : "美屬薩摩亞", + "Austria" : "奧地利", + "Australia" : "澳大利亞", + "Aruba" : "阿路巴", + "Åland Islands" : "奧蘭群島", + "Azerbaijan" : "亞塞拜然", + "Bosnia and Herzegovina" : "波士尼亞與赫塞哥維納", + "Barbados" : "巴貝多", + "Bangladesh" : "孟加拉", + "Belgium" : "比利時", + "Burkina Faso" : "布吉納法索", + "Bulgaria" : "保加利亞", + "Bahrain" : "巴林", + "Burundi" : "蒲隆地", + "Benin" : "貝南", + "Saint Barthélemy" : "聖巴瑟米", + "Bermuda" : "百慕達", + "Brunei Darussalam" : "汶萊", + "Bolivia, Plurinational State of" : "玻利維亞", + "Bonaire, Sint Eustatius and Saba" : "波奈、聖佑達修斯與荷屬沙巴", + "Brazil" : "巴西", + "Bahamas" : "巴哈馬", + "Bhutan" : "不丹", + "Bouvet Island" : "布威島", + "Botswana" : "波札那", + "Belarus" : "白俄羅斯", + "Belize" : "貝里斯", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科寇斯(基林)群島", + "Congo, the Democratic Republic of the" : "剛果民主共和國", + "Central African Republic" : "中非共和國", + "Congo" : "剛果", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "象牙海岸", + "Cook Islands" : "庫克群島", + "Chile" : "智利", + "Cameroon" : "喀麥隆", + "China" : "中國", + "Colombia" : "哥倫比亞", + "Costa Rica" : "哥斯大黎加", + "Cuba" : "古巴", + "Cabo Verde" : "維德角", + "Curaçao" : "古拉索", + "Christmas Island" : "聖誕島", + "Cyprus" : "賽普勒斯", + "Czechia" : "捷克", + "Germany" : "德國", + "Djibouti" : "吉布地", + "Denmark" : "丹麥", + "Dominica" : "多米尼克", + "Dominican Republic" : "多明尼加", + "Algeria" : "阿爾及利亞", + "Ecuador" : "厄瓜多", + "Estonia" : "愛沙尼亞", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄利垂亞", + "Spain" : "西班牙", + "Ethiopia" : "衣索比亞", + "Finland" : "芬蘭", + "Fiji" : "斐濟", + "Falkland Islands (Malvinas)" : "福克蘭群島(馬爾維納斯群島)", + "Micronesia, Federated States of" : "密克羅尼西亞聯邦", + "Faroe Islands" : "法羅群島", + "France" : "法國", + "Gabon" : "加彭", + "United Kingdom of Great Britain and Northern Ireland" : "大不列顛暨北愛爾蘭聯合王國", + "Grenada" : "格瑞那達", + "Georgia" : "喬治亞", + "French Guiana" : "法屬圭亞那", + "Guernsey" : "根西", + "Ghana" : "迦納", + "Gibraltar" : "直布羅陀", + "Greenland" : "格陵蘭", + "Gambia" : "甘比亞", + "Guinea" : "幾內亞", + "Guadeloupe" : "瓜地洛普", + "Equatorial Guinea" : "赤道幾內亞", + "Greece" : "希臘", + "South Georgia and the South Sandwich Islands" : "南喬治亞與南桑威奇群島", + "Guatemala" : "瓜地馬拉", + "Guam" : "關島", + "Guinea-Bissau" : "幾內亞比索", + "Guyana" : "蓋亞那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德島和麥克唐納群島", + "Honduras" : "宏都拉斯", + "Croatia" : "克羅埃西亞", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印尼", + "Ireland" : "愛爾蘭", + "Israel" : "以色列", + "Isle of Man" : "曼島", + "India" : "印度", + "British Indian Ocean Territory" : "英屬印度洋領地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗", + "Iceland" : "冰島", + "Italy" : "義大利", + "Jersey" : "澤西", + "Jamaica" : "牙買加", + "Jordan" : "約旦", + "Japan" : "日本", + "Kenya" : "肯亞", + "Kyrgyzstan" : "吉爾吉斯", + "Cambodia" : "柬埔寨", + "Kiribati" : "吉里巴斯", + "Comoros" : "葛摩", + "Saint Kitts and Nevis" : "聖克里斯多福及尼維斯", + "Korea, Democratic People's Republic of" : "朝鮮民主主義人民共和國", + "Korea, Republic of" : "韓國", + "Kuwait" : "科威特", + "Cayman Islands" : "開曼群島", + "Kazakhstan" : "哈薩克", + "Lao People's Democratic Republic" : "寮國", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "聖露西亞", + "Liechtenstein" : "列支敦斯登", + "Sri Lanka" : "斯里蘭卡", + "Liberia" : "賴比瑞亞", + "Lesotho" : "賴索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "盧森堡", + "Latvia" : "拉脫維亞", + "Libya" : "利比亞", + "Morocco" : "摩洛哥", + "Monaco" : "摩納哥", + "Moldova, Republic of" : "摩爾多瓦共和國", + "Montenegro" : "蒙特內哥羅", + "Saint Martin (French part)" : "法屬聖馬丁", + "Madagascar" : "馬達加斯加", + "Marshall Islands" : "馬紹爾群島", + "North Macedonia" : "北馬其頓", + "Mali" : "馬利", + "Myanmar" : "緬甸", + "Mongolia" : "蒙古", + "Macao" : "澳門", + "Northern Mariana Islands" : "北馬里亞納群島", + "Martinique" : "馬丁尼克", + "Mauritania" : "茅利塔尼亞", + "Montserrat" : "蒙哲臘", + "Malta" : "馬爾他", + "Mauritius" : "模里西斯", + "Maldives" : "馬爾地夫", + "Malawi" : "馬拉威", + "Mexico" : "墨西哥", + "Malaysia" : "馬來西亞", + "Mozambique" : "莫三比克", + "Namibia" : "納米比亞", + "New Caledonia" : "新喀里多尼亞", + "Niger" : "尼日", + "Norfolk Island" : "諾福克島", + "Nigeria" : "奈及利亞", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷蘭", + "Norway" : "挪威", + "Nepal" : "尼泊爾", + "Nauru" : "諾魯", + "Niue" : "紐埃", + "New Zealand" : "紐西蘭", + "Oman" : "阿曼", + "Panama" : "巴拿馬", + "Peru" : "秘魯", + "French Polynesia" : "法屬玻里尼西亞", + "Papua New Guinea" : "巴布亞紐幾內亞", + "Philippines" : "菲律賓", + "Pakistan" : "巴基斯坦", + "Poland" : "波蘭", + "Saint Pierre and Miquelon" : "聖皮埃與密克隆群島", + "Pitcairn" : "皮特肯群島", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕勞", + "Paraguay" : "巴拉圭", + "Qatar" : "卡達", + "Réunion" : "留尼旺", + "Romania" : "羅馬尼亞", + "Serbia" : "塞爾維亞", + "Russian Federation" : "俄羅斯", + "Rwanda" : "盧安達", + "Saudi Arabia" : "沙烏地阿拉伯", + "Solomon Islands" : "索羅門群島", + "Seychelles" : "塞席爾", + "Sudan" : "蘇丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "聖赫勒拿、亞森欣與崔斯坦達庫尼亞", + "Slovenia" : "斯洛維尼亞", + "Svalbard and Jan Mayen" : "斯瓦巴和揚馬延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "獅子山共和國", + "San Marino" : "聖馬力諾", + "Senegal" : "塞內加爾", + "Somalia" : "索馬利亞", + "Suriname" : "蘇利南", + "South Sudan" : "南蘇丹", + "Sao Tome and Principe" : "聖多美及普林西比", + "El Salvador" : "薩爾瓦多", + "Sint Maarten (Dutch part)" : "荷屬聖馬丁", + "Syrian Arab Republic" : "敘利亞", + "Eswatini" : "史瓦帝尼", + "Turks and Caicos Islands" : "土克凱可群島", + "Chad" : "查德", + "French Southern Territories" : "法屬南部和南極領地", + "Togo" : "多哥", + "Thailand" : "泰國", + "Tajikistan" : "塔吉克", + "Tokelau" : "托克勞", + "Timor-Leste" : "東帝汶", + "Turkmenistan" : "土庫曼", + "Tunisia" : "突尼西亞", + "Tonga" : "東加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "千里達及托巴哥", + "Tuvalu" : "吐瓦魯", + "Taiwan, Province of China" : "台灣", + "Tanzania, United Republic of" : "坦尚尼亞", + "Ukraine" : "烏克蘭", + "Uganda" : "烏干達", + "United States Minor Outlying Islands" : "美國本土外小島嶼", + "United States of America" : "美國", + "Uruguay" : "烏拉圭", + "Uzbekistan" : "烏茲別克", + "Holy See" : "聖座", + "Saint Vincent and the Grenadines" : "聖文森及格瑞那丁", + "Venezuela, Bolivarian Republic of" : "委內瑞拉", + "Virgin Islands, British" : "英屬維京群島", + "Virgin Islands, U.S." : "美屬維京群島", + "Viet Nam" : "越南", + "Vanuatu" : "萬那杜", + "Wallis and Futuna" : "瓦利斯和富圖那", + "Samoa" : "薩摩亞", + "Yemen" : "葉門", + "Mayotte" : "馬約特", + "South Africa" : "南非", + "Zambia" : "尚比亞", + "Zimbabwe" : "辛巴威", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "無法檢查 WASM 載入支援。請手動檢查您的網路伺服器是否可服務 `.wasm` 檔案。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的伺服器並未正確的設定,因此無法傳遞 `.wasm` 的檔案。這通常是因為 Nginx 的設定問題所導致。對於背景模糊來說,需要一些調整才能一併傳遞 `.wasm` 的檔案。請檢查您的 Nginx 設定,和 Nextcloud 說明文件中提到的建議設定。", + "Talk configuration values" : "Talk 設定值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "僅系統 cron 支援強制通話持續時間。請啟用系統 cron 或移除 `max_call_duration` 設定。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "因為技術限制,較小的 `max_call_duration` 值(目前設定為 %d)無法強制執行。背景作業每5分鐘執行一次,因此使用請自負風險。", + "Federation" : "聯盟", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "強烈建議在啟用聯盟 Talk 時設定「memcache.locking」。", + "High-performance backend" : "高效能後端", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未設定高效能後端 - 在沒有高效能後端的情況下執行 Nextcloud Talk 只適用於非常小規模的通話(最多 2-3 名參與者)。請設定高效能後端,以確保有多位參與者的通話能順暢運作。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高效能後端的「conversation_cluster」執行模式已棄用,在即將推出的版本中將不再支援。高效能後端現在支援真正的叢集,應該改用真正的叢集。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定義多個高效能後端已被淘汰,在即將推出的版本中將不再支援。取而代之的是在 Talk 設定中設定負載平衡器與叢集訊號伺服器。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所使用演算法 %1$s 的已儲存公鑰與儲存的私鑰不相符。請執行 %2$s 以修正問題。", + "High-performance backend not configured correctly. Run %s for details." : "未正確設定高效能後端。請執行 %s 以取得更多詳細資訊。", + "High-performance backend not configured correctly" : "未正確設定高效能後端", + "Error: Cannot connect to server" : "錯誤:無法連線至伺服器", + "Error: Server did not respond with proper JSON" : "錯誤:伺服器並未回覆正確的 JSON", + "Error: Certificate expired" : "錯誤:憑證已過期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器與高效能後端伺服器的系統時間不同步。請確保兩個伺服器都連線到校時伺服器,或手動同步它們的時間。", + "Could not get version" : "無法取得版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "錯誤:執行中的版本:{version};伺服器必須更新以與此版本的 Talk 相容", + "Error: Server responded with: {error}" : "錯誤:伺服器回應:{error}", + "Error: Unknown error occurred" : "錯誤:遇到未知的錯誤", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:正在執行的版本:{version};伺服器不支援此 Talk 版本的所有功能,缺少的功能:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "強烈建議在使用高效能後端執行 Nextcloud Talk 時設定記憶體快取。", + "Client Push" : "客戶端推播", + "Client Push is installed, this improves the punctuality of Talk notifications." : "已安裝客戶端推播,這可以改善 Talk 通知的即時性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "尚未安裝 {notify_push}。這可能會導致 Talk 通知延遲。", + "Recording backend" : "錄製後端", + "Using the recording backend requires a High-performance backend." : "使用錄製後端需要高效能後端。", + "No recording backend configured" : "未設定錄製後端", + "SIP configuration" : "SIP 組態", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高效能後端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 電話號碼不得以 + 或 0 開頭。請移除或更新以下號碼:\n{list}", + "No SIP backend configured" : "未設定 SIP 後端", + "Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式", + "Conversation not found" : "找不到對話", + "Path is already shared with this conversation" : "已與此對話分享路徑", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 進行聊天、視訊和語音會議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 的聊天、視訊語音訊會議\n\n* 💬 **聊天** NextCloud Talk 包含簡單的文字聊天,讓您可以從 NextCloud 檔案應用程式或本機裝置分享或上傳檔案,並提及其他參與者。\n* 👥 **私人、群組、公開與密碼保護通話!** 邀請某人、整個群組或是傳送公開連結來邀請通話\n* 🌐 **聯盟式通話** 與其他伺服器上的 Nextcloud 使用者聊天\n* 💻 **畫面分享!** 與您通話的參與者分享畫面。\n* 🚀 **與其他 Nextcloud 應用程式整合** 如檔案、日曆、使用者狀態、儀表板、流程、地圖、智慧型挑選程式、通訊錄、Deck 與更多其他應用程式。\n* 🌉 **與其他聊天解決方案同步** 使用整合到 Talk 中的 [Matterbridge](https://github.com/42wim/matterbridge/),您可以輕鬆地將其他許多聊天解決方案同步到 Nextcloud Talk,反之亦然。", + "Leave call" : "離開通話", + "Navigating away from the page will leave the call in {conversation}" : "離開頁面也將離開 {conversation} 中的通話", + "Stay in call" : "留在通話中", + "Error occurred when getting the conversation information" : "取得對話資訊時發生錯誤", + "Discuss this file" : "討論此檔案", + "Share this file with others to discuss it" : "與其他人分享此檔案並進行討論", + "Share this file" : "分享此檔案", + "Join conversation" : "加入對話", + "This conversation is password-protected." : "此對話受密碼保護。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "您的 IP 多次嘗試密碼無效。因此下一次嘗試將會被延時30秒。", + "The password is wrong. Try again." : "密碼錯誤,請重試。", + "Password" : "密碼", + "Submit" : "遞交", + "Error requesting the password." : "請求密碼時發生錯誤", + "Request password" : "請求密碼", + "This conversation has ended" : "此對話已結束", + "Error occurred when joining the conversation" : "加入對話時發生錯誤", + "Close Talk sidebar" : "關閉 Talk 側邊欄", + "Open Talk sidebar" : "開啟 Talk 側邊欄", + "Everyone" : "所有人", + "Users and moderators" : "使用者與主持人", + "Moderators only" : "僅主持人", + "Disable calls" : "停用通話", + "Save changes" : "儲存變更", + "Saving …" : "正在儲存……", + "Saved!" : "已儲存!", + "Limit to groups" : "群組限制", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "選擇一或多個群組後,只有所選群組中的人才能參與對話。", + "Guests can still join public conversations." : "訪客仍可加入公開對話。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "不再能夠使用 Talk 的使用者仍將被列為以前的對話的參與者。他們的聊天訊息將被保留。", + "Limit using Talk" : "限制使用 Talk", + "Limit creating a public and group conversation" : "限制建立公開和群組對話", + "Limit creating conversations" : "限制建立對話", + "Limit starting a call" : "限制開始通話", + "Limit starting calls" : "限制開始通話", + "When a call has started, everyone with access to the conversation can join the call." : "通話開始後,每個有權存取對話的人都可以加入通話。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上安裝了以下機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上並未安裝機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "為主持人鎖定", + "Enabled" : "已啟用", + "Disabled" : "已停用", + "Bots settings" : "機器人設定", + "State" : "狀態", + "Name" : "名稱", + "Last error" : "上次錯誤", + "Total errors count" : "總錯誤數量", + "Find more bots" : "尋找更多機器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}分享設定頁面{linkedin}設定信任伺服器。", + "Beta" : "測試版", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "聯盟聊天與通話已經可以運作。附件處理將在未來的版本中推出。", + "Enable Federation in Talk app" : "啟用 Talk 應用程式中的聯盟功能", + "Permissions" : "權限", + "Allow users to be invited to federated conversations" : "允許邀請使用者加入聯合對話", + "Allow users to invite federated users into conversation" : "允許使用者邀請聯合使用者加入對話", + "Only allow to federate with trusted servers" : "僅允許與信任的伺服器聯合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "選擇一或多個群組後,只有所選群組中的人才能邀請聯合使用者到對話中。", + "Groups allowed to invite federated users" : "允許邀請聯合使用者的群組", + "Select groups …" : "選取群組……", + "All messages" : "所有訊息", + "@-mentions only" : "僅被 @ - 提及 的訊息", + "Off" : "關閉", + "General settings" : "一般設定", + "Default notification settings" : "預設通知設定", + "Default group notification" : "預設群組通知", + "Default group notification for new groups" : "新群組的預設群組通知", + "Integration into other apps" : "整合至其他應用程式", + "Allow conversations on files" : "允許在檔案中開始對話", + "Allow conversations on public shares for files" : "允許在檔案公開分享中開始對話", + "End-to-end encrypted calls" : "端到端加密通話", + "Enable encryption" : "啟用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已設定 SIP 橋接的端到端加密通話需要較新版本的高效能後端與 SIP 橋接器。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "行動裝置客戶端目前不支援端到端加密通話。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "透過點選上面的按鈕,表單中的資訊將傳送到 Struktur AG 的伺服器。您可以在 {linkstart}spreed.eu{linkend} 上找到更多資訊。", + "Pending" : "擱置中", + "Error" : "錯誤", + "Blocked" : "已封鎖", + "Active" : "啟動", + "Expired" : "已過期", + "Never" : "永不", + "The trial could not be requested. Please try again later." : "無法請求測試。請稍後重試。", + "The account could not be deleted. Please try again later." : "無法刪除帳號。請稍後再試。", + "Hosted High-performance backend" : "託管的高效能後端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我們的合作夥伴 Struktur AG 提供訊號伺服器的託管服務。您只需要填寫下面的表單,您的 Nextcloud 就會為您申請該服務。為您設定伺服器後,將自動填寫憑證。這將覆蓋現有的訊號伺服器設定。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "若您的高效能後端系統帳號包含 STUN 及/或 TURN 功能,將會更新對應設定。", + "URL of this Nextcloud instance" : "此 Nextcloud 站台的 URL", + "Full name of the user requesting the trial" : "請求試用的使用者全名", + "Email of the user" : "使用者電子郵件", + "Language" : "語言", + "Country" : "國家", + "Request signaling server trial" : "請求訊號伺服器試用", + "You can see the current status of your hosted signaling server in the following table." : "您可以在以下表格中檢視您託管的訊號伺服器的目前狀態。", + "Status" : "狀態", + "Created at" : "建立於", + "Expires at" : "過期於", + "Limits" : "限制", + "STUN included" : "包含 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包含 TURN", + "Delete the signaling server account" : "刪除訊號伺服器帳號", + "_%n user_::_%n users_" : ["%n 個使用者"], + "Installed version: {version}" : "已安裝版本:{version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安裝 Matterbridge 以將 Nextcloud Talk 連結至其他服務,請造訪其 {linkstart1}GitHub 頁面{linkend}以取得更多資訊。下載並安裝應用程式可能需要一段時間。若逾時,請從 {linkstart2}Nextcloud 應用程式商店{linkend}手動安裝。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge 可執行檔的權限不正確。請確保 Matterbridge 可執行檔為正確的使用者所擁有且可執行。可以在「/…/nextcloud/apps/talk_matterbridge/bin/」中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到或無法執行 Matterbridge 程式。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "您也可以透過組態檔手動設定 Matterbridge 程式的路徑。更多資訊請檢視 {linkstart}Matterbridge 整合文件{linkend}。", + "Downloading …" : "正在下載……", + "Install Talk Matterbridge" : "安裝 Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "安裝 Matterbridge 應用程式時發生錯誤", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安裝 Talk Matterbridge 時發生錯誤。請手動安裝", + "Failed to execute Matterbridge binary." : "無法執行 Matterbridge 程式。", + "Matterbridge integration" : "Matterbridge 整合", + "Enable Matterbridge integration" : "啟用 Matterbridge 整合", + "Status: Checking connection" : "狀態:正在檢查連線", + "OK: Running version: {version}" : "OK:執行中的版本:{version}", + "Error: Server seems to be a Signaling server" : "錯誤:伺服器似乎是 Signaling 伺服器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器與 Recording 後端伺服器的系統時間不同步。請確保兩個伺服器都連線到校時伺服器,或手動同步它們的時間。", + "Recording backend URL" : "錄製後端 URL", + "Validate SSL certificate" : "驗證 SSL 憑證", + "Delete this server" : "刪除此伺服器", + "Test this server" : "測試此伺服器", + "Disabled for all calls" : "對所有通話停用", + "Enabled for all calls" : "對所有通話啟用", + "Configurable on conversation level by moderators" : "可由主持人在對話層級設定", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP 設定「upload_max_filesize」或「post_max_size」僅允許上傳最大 {maxUpload} 的檔案。", + "Recording backend settings saved" : "錄製後端設定已儲存", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "允許主持人在對話層級啟用同意。每位參與者在加入此對話中的每個通話之前都需要給予錄製同意。", + "The consent to be recorded will be required for each participant before joining every call." : "在每次通話之前,每位參與者都需要同意錄製。", + "The consent to be recorded is not required." : "同意錄音並非必須。", + "Recording backend configuration is only possible with a High-performance backend." : "僅當使用高效能後端時才能設定錄製後端。", + "Add a new recording backend server" : "新增錄製後端伺服器", + "Shared secret" : "已分享密碼", + "Recording consent" : "同意錄製", + "Recording transcription" : "錄音轉錄", + "Automatically transcribe call recordings with a transcription provider" : "使用轉錄提供者自動轉錄通話錄音", + "Automatically summarize call recordings with transcription and summary providers" : "使用轉錄與摘要提供者自動總結通話錄音", + "SIP configuration saved!" : "已儲存 SIP 組態!", + "SIP configuration is only possible with a High-performance backend." : "SIP 組態僅於有高效能後端時可用。", + "Enable SIP Dial-out option" : "啟用 SIP 撥出選項", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling 伺服器必須更新以支援 SIP 撥出功能。", + "Do not show SIP Dial-out caller number" : "不要顯示 SIP Dial-out 來電者號碼", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名號碼應對接聽者顯示為「未知號碼」或「隱藏號碼」", + "Dial-out number" : "Dial-out 號碼", + "E164 formatted number used as a fallback caller number for outgoing calls" : "以 E164 格式顯示的號碼作為撥出通話的備用來電號碼", + "Dial-out prefix" : "Dial-out 前綴", + "Prefix to configured user number for outgoing calls (default is `+`)" : "撥出通話時,設定使用者號碼的前綴(預設為 `+`)", + "Restrict SIP configuration" : "限制 SIP 組態", + "Enable SIP configuration" : "啟用 SIP 組態", + "Only users of the following groups can enable SIP in conversations they moderate" : "僅以下群組的使用者可以在他們主持的對話中啟用 SIP", + "Phone number (Country)" : "電話號碼(國家)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "此資訊會在邀請電子郵件中傳送,也會在側邊欄中顯示給所有參與者。", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 後端 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用功能", + "Error: Websocket connection failed" : "錯誤:Websocket 連線失敗", + "Error code" : "錯誤代碼", + "Error message" : "錯誤訊息", + "Error: Websocket connection failed. Check browser console" : "錯誤:Websocket 連線失敗。請檢查瀏覽器主控台", + "High-performance backend URL" : "高效能後端 URL", + "Missing High-performance backend warning hidden" : "隱藏缺少高效能後端的警告", + "High-performance backend settings saved" : "高效能後端設定已儲存", + "Nextcloud Talk setup not complete" : "未完成 Nextcloud Talk 設定", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "請注意,在沒有高效能後端的情況下,如果通話有 2 位以上的參與者,參與者很可能會遇到連線問題,導致參與者的裝置負載過高。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安裝高效能後端,以確保有多位參與者的通話能順暢運作。", + "Nextcloud portal" : "Nextcloud 入口網站", + "Quick installation guide" : "快速安裝指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位參與者的通話和對話需要高效能後端。如果沒有後端,所有參與者都必須為其他參與者各自上傳自己的視訊,這極有可能造成連線問題,並對參與者的裝置造成高負載。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "使用 Nextcloud Talk 搭配高效能後端時,強烈建議設定分散式快取。", + "Add High-performance backend server" : "新增高效能後端伺服器", + "Warn about connectivity issues in calls with more than 2 participants" : "在有 2 個以上參與者的通話中警告連線問題", + "STUN server URL" : "STUN 伺服器 URL", + "The server address is invalid" : "伺服器地址無效", + "STUN settings saved" : "STUN 設定已儲存", + "STUN servers" : "STUN 伺服器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 伺服用於確認位於路由器後的參與者的公開 IP 位置。", + "Add a new STUN server" : "新增 STUN 伺服器", + "{schema} scheme must be used with a domain" : "{option} 方案必須與域名一起使用", + "{option1} and {option2}" : "{option1} 與 {option2}", + "{option} only" : "僅 {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN 伺服器回傳成功的 ICE 候選者", + "Error: No working ICE candidates returned by the TURN server" : "錯誤:TURN 伺服器並未回傳任何有效的 ICE 候選者", + "Testing whether the TURN server returns ICE candidates" : "測試 TURN 伺服器是否回傳 ICE 候選者", + "TURN server schemes" : "TURN 伺服器方案", + "TURN server URL" : "TURN 伺服器 URL", + "TURN server secret" : "TURN 伺服器密碼", + "TURN server protocols" : "TURN 伺服器協定", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 伺服器用於代理來自防火牆後參與者的流量。如果個別參與者無法連線至其他參與者,則很可能需要使用 TURN 伺服器。關於設定指南,請參見{linkstart}此文件{linkend}。", + "TURN settings saved" : "TURN 設定已儲存", + "TURN servers" : "TURN 伺服器", + "Add a new TURN server" : "新增 TURN 伺服器", + "Failed" : "失敗", + "OK" : "確定", + "Checking …" : "正在檢查……", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗:此瀏覽器中停用或不支援 WebAssembly。請啟用 WebAssembly 或使用支援此功能的瀏覽器進行檢查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗:網路伺服器沒有正確回傳「.wasm」與「.tflite」檔案。請檢視 Talk 文件中的「系統需求」區塊。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK:網路伺服器正確回傳了「.wasm」與「.tflite」檔案。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP 與 Apache 組態似乎不相容。請注意,PHP 僅能與 MPM_PREFORK 模組一起使用,PHP-FPM 僅能與 MPM_EVENT 模組一起使用。", + "Web server setup checks" : "網路伺服器設定檢查", + "Files required for virtual background can be loaded" : "可以載入背景模糊所需的檔案", + "Federated user" : "聯盟使用者", + "Assign participants to rooms" : "指派參與者到聊天室", + "Configure breakout rooms" : "設定分組討論室", + "Number of breakout rooms" : "分組討論室數量", + "You can create from 1 to 20 breakout rooms." : "您可以建立 1 到 20 個分組討論室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自動指派參與者", + "Manually assign participants" : "手動指派參與者", + "Allow participants to choose" : "允許參與者選擇", + "Create rooms" : "建立聊天室", + "Confirm" : "確認", + "Create breakout rooms" : "建立分組討論室", + "Reset" : "重設", + "Delete breakout rooms" : "刪除分組討論室", + "Room {roomNumber}" : "聊天室 {roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分組討論室與設定將會遺失", + "Cancel" : "取消", + "Unassigned participants" : "未指派的參與者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "新增參與者「{user}」", + "Now" : "現在", + "Invalid calendar selected" : "選取了無效的日曆", + "Invalid start time selected" : "選取了無效的開始時間", + "Invalid end time selected" : "選取了無效的結束時間", + "Unknown error occurred" : "發生未知錯誤", + "Sending no invitations" : "不傳送邀請", + "{participant0} will receive an invitation" : "{participant0} 將會收到邀請", + "{participant0} and {participant1} will receive invitations" : "{participant0} 與 {participant1} 將會收到邀請", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 與 %n 個其他人將會收到邀請"], + "Invite {user}" : "邀請 {user}", + "Invite all users and emails in this conversation" : "邀請此對話中的所有使用者與電子郵件", + "Meeting created" : "已建立會議", + "Upcoming meetings" : "即將到來的會議", + "Loading …" : "正在載入……", + "No upcoming meetings" : "沒有即將舉行的會議", + "Schedule a meeting" : "安排會議", + "Meeting title" : "會議標題", + "From" : "從", + "To" : "至", + "Calendar" : "行事曆", + "Attendees" : "參與者", + "No other participants to send invitations to." : "沒有其他要傳送邀請函的參與者。", + "Add attendees" : "新增參與者", + "Save" : "儲存", + "Search participants" : "搜尋參與者", + "No results" : "沒有符合搜尋的項目", + "Done" : "完成", + "Disable live transcription" : "停用即時轉錄", + "Enable live transcription (generated by AI)" : "啟用即時轉錄(由人工智慧產生)", + "Enable live transcription (Live transcriptions app is not installed)" : "啟用即時轉錄(未安裝即時轉錄應用程式)", + "Disable live translation" : "停用即時翻譯", + "Enable live translation (generated by AI)" : "啟用即時翻譯(由人工智慧產生)", + "Original language" : "原始語言", + "Live translations app is not installed" : "即時轉錄應用程式未安裝", + "Original language: {languageName}" : "原始語言:{languageName}", + "Translated language" : "翻譯後的語言", + "Translated language: {languageName}" : "翻譯後的語言:{languageName}", + "Raise hand" : "舉手", + "Raise hand (R)" : "舉手 (R)", + "Lower hand" : "放手", + "Lower hand (R)" : "放手 (R)", + "Exit full screen (F)" : "離開全螢幕 (F)", + "Full screen (F)" : "全螢幕 (F)", + "Speaker view" : "演講者檢視", + "Grid view" : "網格檢視", + "Error when trying to load the available live transcription languages" : "嘗試載入可用的即時轉錄語言時發生錯誤", + "Failed to enable live transcription" : "啟用即時轉錄失敗", + "Failed to enable live translations" : "啟用即時翻譯失敗", + "Failed to disable live translations" : "停用即時翻譯失敗", + "Recording consent is required" : "需要同意錄製", + "This conversation is read-only" : "此對話唯讀", + "Conversation not found or not joined" : "找不到或未加入對話", + "Lobby is still active and you're not a moderator" : "大廳仍然活躍,您不是主持人", + "Connection failed" : "連線失敗", + "Reload" : "重新載入", + "{nickName} raised their hand." : "{nickName} 舉手了。", + "A participant raised their hand." : "一位參與者舉手了。", + "Collapse stripe" : "折疊條紋", + "Expand stripe" : "展開條紋", + "Previous page of videos" : "視訊的上一頁", + "Next page of videos" : "視訊的下一頁", + "Connecting …" : "正在連線……", + "Calling …" : "正在通話……", + "Waiting for {user} to join the call" : "等待 {user} 加入通話", + "Waiting for others to join the call …" : "等待其他人加入通話……", + "You can invite others in the participant tab of the sidebar" : "您可以在在側邊欄的「參與者」分頁中邀請其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在在側邊欄的「參與者」分頁中邀請其他人,或是分享此連結以邀請其他人!", + "Share this link to invite others!" : "分享此連結以邀請其他人!", + "Copy link" : "複製連結", + "You are not allowed to enable audio" : "您無權啟用音訊", + "No audio. Click to select device" : "無音訊。點擊以選取裝置", + "Mute audio" : "靜音", + "Mute audio (M)" : "靜音 (M)", + "Unmute audio" : "取消靜音", + "Unmute audio (M)" : "取消靜音 (M)", + "None" : "無", + "Select a microphone" : "選取麥克風", + "Select a speaker" : "選取喇叭", + "Microphone settings" : "麥克風設定", + "Check devices" : "檢查裝置", + "Access to camera was denied" : "拒絕存取網路攝影機", + "Error while accessing camera: It is likely in use by another program" : "存取網路攝影機時發生錯誤:其似乎正在被另一個程式使用", + "Error while accessing camera" : "存取網路攝影機時發生錯誤", + "You have been muted by a moderator" : "您已被主持人靜音", + "Hide presenter video" : "隱藏演講者視訊", + "You are not allowed to enable video" : "您無權啟用視訊", + "No video. Click to select device" : "無視訊。點擊以選取裝置", + "Disable video" : "停用視訊", + "Disable video (V)" : "停用視訊 (V)", + "Enable video" : "啟用視訊", + "Enable video (V)" : "啟用視訊 (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊 - 首次啟用視訊時,您的連線會短暫中斷", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊 (V) - 首次啟用視訊時,您的連線會短暫中斷", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊。首次啟用視訊時,您的連線會短暫中斷", + "Select a video device" : "選取視訊裝置", + "Show presenter" : "顯示演講者", + "You" : "您", + "Mute" : "靜音", + "Muted" : "已靜音", + "Show screen" : "顯示螢幕", + "Stop following" : "停止追蹤", + "Connection could not be established …" : "無法建立連線……", + "Connection was lost and could not be re-established …" : "連線遺失且無法重新建立……", + "Connection could not be established. Trying again …" : "無法建立連線。正在重試……", + "Connection lost. Trying to reconnect …" : "連線遺失。正在嘗試重新連線……", + "Connection problems …" : "連線問題……", + "Collapse" : "收合", + "Expand" : "展開", + "You need to be logged in to upload files" : "您需要登入以上傳檔案", + "Drop your files to upload" : "拖曳您的檔案以上傳", + "Conversation messages" : "對話訊息", + "Scroll to bottom" : "捲動至底部", + "Post message" : "張貼訊息", + "Federated conversation" : "聯合對話", + "Public conversation" : "公開對話", + "Favorite" : "我的最愛", + "Banned users" : "被封鎖的使用者", + "Manage the list of banned users in this conversation." : "管理此對話中被封鎖使用者的清單。", + "Manage bans" : "管理封鎖", + "No banned users" : "沒有被封鎖的使用者", + "Banned by:" : "封鎖者:", + "Date:" : "日期:", + "Note:" : "備註:", + "Hide details" : "隱藏細節", + "Show details" : "顯示細節", + "Unban" : "取消封鎖", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日曆 ↗{linkend}中變更標題與描述。", + "Error while updating conversation name" : "更新對話名稱時發生錯誤", + "Error while updating conversation description" : "更新對話描述時發生錯誤", + "Enter a name for this conversation" : "輸入此對話名稱", + "Edit conversation name" : "編輯對話名稱", + "Edit conversation description" : "編輯對話描述", + "Enter a description for this conversation" : "輸入此對話的描述", + "Picture" : "圖片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此對話啟用以下機器人。請與您的管理員聯絡以在此伺服器上安裝更多機器人。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此伺服器上未安裝機器人。請與您的管理員聯絡以在此伺服器上安裝機器人。", + "Disable" : "停用", + "Enable" : "啟用", + "The bot is not available anymore" : "該機器人已不再提供服務", + "Breakout rooms" : "分組討論室", + "Manage breakout rooms" : "管理分組討論室", + "Set up breakout rooms for this conversation" : "為此對話設定分組討論室", + "Please select a valid PNG or JPG file" : "請選取有效的 PNG 或 JPG 檔案", + "Choose your conversation picture" : "選擇您的對話圖片", + "Choose" : "選擇", + "Error setting conversation picture" : "設定對話圖片時發生錯誤", + "Could not set the conversation picture: {error}" : "無法設定對話圖片:{error}", + "Error cropping conversation picture" : "裁剪對話圖片時發生錯誤", + "Error removing conversation picture" : "移除對話圖片時發生錯誤", + "Set emoji as conversation picture" : "將表情符號設定對話圖片", + "Set background color for conversation picture" : "設定對話圖片的背景顏色", + "Upload conversation picture" : "上傳對話圖片", + "Choose conversation picture from files" : "從檔案選擇對話圖片", + "Remove conversation picture" : "移除對話圖片", + "The file must be a PNG or JPG" : "檔案必須是 PNG 或 JPG", + "Set picture" : "設定圖片", + "Default permissions modified for {conversationName}" : "為 {conversationName} 修改了預設權限", + "Could not modify default permissions for {conversationName}" : "無法修改 {conversationName} 的預設權限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "編輯此對話中參與者的預設權限。這些設定不會影響主持人。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此區塊修改權限時,之前指派給每個參與者的自訂權限都會遺失。", + "All permissions" : "所有權限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "參與者有權開始通話、加入通話、啟用音訊與視訊以及分享螢幕。", + "Participants can use all available features." : "參與者可以使用所有可用的功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在主持人手動授予他們權限之前,參與者只能加入對話,但不能啟用音訊、視訊或螢幕分享。", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "在主持人手動授予額外權限之前,參與者只能使用有限的功能。", + "Advanced permissions" : "進階權限", + "Edit permissions" : "編輯權限", + "Conversation settings" : "對話設定", + "Basic Info" : "基本資訊", + "Personal" : "個人", + "Moderation" : "主持", + "Setup overview" : "設定概覽", + "Live transcription" : "即時轉錄", + "Live transcriptions app is not installed" : "即時轉錄應用程式未安裝", + "Enable live transcription" : "啟用即時轉錄", + "Breakout Rooms" : "分組討論室", + "Matterbridge" : "Matterbridge ", + "Bots" : "機器人", + "Danger zone" : "危險區域", + "Archive conversation" : "封存對話", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "預設情況下,已封存的對話會從對話清單中隱藏。但是,當您搜尋對話名稱或存取已封存的對話清單時,它們仍會出現。", + "Do you really want to leave \"{displayName}\"?" : "您真的想要離開「{displayName}」嗎?", + "You can archive this conversation instead." : "您可以改為封存此對話。", + "Leave conversation" : "離開對話", + "You need to promote a new moderator before you can leave the conversation" : "在您離開對話前,您必須授權一位新的主持人", + "Delete conversation" : "刪除對話", + "Do you really want to delete \"{displayName}\"?" : "您真的想要刪除「{displayName}」嗎?", + "Error while deleting conversation" : "刪除對話時發生錯誤", + "Delete all chat messages" : "刪除所有聊天訊息", + "Do you really want to delete all messages in \"{displayName}\"?" : "您真的想要刪除「{displayName}」中的所有訊息嗎?", + "Error while clearing chat history" : "清除聊天歷史紀錄時發生錯誤", + "Be careful, these actions cannot be undone." : "請謹慎,這些操作無法被還原。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "離開封閉式對話後,您需要收到邀請才能重新加入。 您可以隨時重新加入公開對話。", + "Permanently delete this conversation." : "永久刪除此對話", + "Delete chat messages" : "刪除聊天訊息", + "Permanently delete all the messages in this conversation." : "永久刪除此對話中的所有訊息。", + "_%n hour_::_%n hours_" : ["%n小時"], + "_%n day_::_%n days_" : ["%n天"], + "_%n week_::_%n weeks_" : ["%n週"], + "Custom expiration time" : "自訂過期時間", + "Message expiration disabled" : "已停用訊息過期", + "Message expiration set: {duration}" : "訊息過期設定:{duration}", + "Error when trying to set message expiration" : "嘗試設定訊息過期時發生錯誤", + "Message expiration" : "訊息過期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "聊天訊息可能會在一定時間後過期。注意:在聊天中分享的檔案不會為所有者刪除,但將不再於對話中被分享。", + "Set message expiration" : "設定訊息過期", + "Current message expiration" : "目前的訊息過期", + "Password copied to clipboard" : "密碼已複製到剪貼簿", + "Password could not be copied" : "無法複製密碼", + "Guest access" : "訪客存取", + "Breakout rooms are not allowed in public conversations." : "不允許在分組討論室進行公開對話。", + "Allow guests to join this conversation via link" : "允許訪客透過連結加入此對話", + "Password protection" : "密碼保護", + "This conversation is password-protected. Guests need password to join" : "此對話受密碼保護。訪客需要密碼才能加入", + "Password protection is needed for public conversations" : "公開對話需要密碼保護", + "Set a password" : "設定密碼", + "Change password" : "變更密碼", + "Enter new password" : "輸入新密碼", + "Save password" : "儲存密碼", + "Copy password" : "複製密碼", + "Guests are allowed to join this conversation via link" : "允許訪客透過連結加入此對話", + "Guests are not allowed to join this conversation" : "不允許訪客透過連結加入此對話", + "Resend invitations" : "重新傳送邀請", + "This conversation is open to both registered users and users created with the Guests app" : "此對話已同時對已註冊的使用者與使用訪客應用程式建立的使用者開放", + "This conversation is open to registered users" : "此對話對已註冊的使用者開放", + "This conversation is limited to the current participants" : "此對話僅限目前參與者", + "You opened the conversation to both registered users and users created with the Guests app" : "您同時向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "Error occurred when opening or limiting the conversation" : "開啟或限制對話時發生錯誤", + "Open conversation to registered users, showing it in search results" : "向註冊使用者開放對話時並在搜尋結果中顯示", + "Also open to users created with the Guests app" : "同時對使用訪客應用程式建立的使用者開放", + "Open conversation" : "開啟對話", + "Set language spoken in calls" : "設定通話語言", + "Languages could not be loaded" : "無法載入語言", + "Loading languages …" : "正在載入語言……", + "Invalid language" : "無效的語言", + "Default language (English)" : "預設語言(英文)", + "Default live transcription language set" : "預設即時轉錄語言集", + "Live transcription language set: {languageName}" : "即時轉錄語言集:{languageName}", + "Error when trying to set live transcription language" : "嘗試設定即時轉錄語言時發生錯誤", + "Start time: {date}" : "開始時間:{date}", + "Start time has been updated" : "開始時間已更新", + "Error occurred while updating start time" : "更新開始時間時發生錯誤", + "Enabling the lobby will remove non-moderators from the ongoing call." : "啟用大廳將從正在進行的通話中移除非主持人。", + "Enable lobby, restricting the conversation to moderators" : "啟用大廳,將對話限制為主持人", + "Meeting start time" : "會議開始時間", + "Start time (optional)" : "開始時間(選擇性)", + "Import email participants" : "匯入電子郵件參與者", + "You can import a list of email participants from a CSV file." : "您可以從 CSV 檔案匯入電子郵件參與者清單。", + "Poll drafts" : "投票草稿", + "Browse poll drafts" : "瀏覽投票草稿", + "Error occurred when locking the conversation" : "鎖定對話時發生錯誤", + "Error occurred when unlocking the conversation" : "解除鎖定對話時發生錯誤", + "Lock conversation" : "鎖定對話", + "This will also terminate the ongoing call." : "這也會終止正在進行的通話。", + "Lock the conversation to prevent anyone to post messages or start calls" : "鎖定對話以防止任何人發佈訊息或開始通話", + "Edit" : "編輯", + "More information" : "更多資訊", + "Delete" : "刪除", + "Add new bridged channel to current conversation" : "向目前對話新增新的橋接頻道", + "unknown state" : "未知狀態", + "running" : "執行中", + "not running, check Matterbridge log" : "未執行,請檢查 Matterbridge 紀錄檔", + "not running" : "未執行", + "Bridge saved" : "橋接已儲存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "您可以使用 Matterbridge 橋接來自各種即時通訊系統的頻道。", + "More info on Matterbridge" : "更多關於 Matterbridge 的資訊", + "Messaging systems" : "訊息系統", + "Enable bridge" : "啟用橋接", + "Show Matterbridge log" : "顯示 Matterbridge 紀錄檔", + "Log content" : "記錄內容", + "Only moderators are allowed to mention @all" : "僅允許主持人提及 @all", + "All participants are allowed to mention @all" : "所有參與者都可以提及 @all", + "Participants are now allowed to mention @all." : "現在參與者可以提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 的權限已限於主持人。", + "Allow participants to mention @all" : "允許參與者提及 @all", + "Mention permissions" : "提及權限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "在此對話中有通話時通知", + "Important conversation" : "重要交談", + "\"Do not disturb\" user status is ignored for important conversations" : "重要對話會忽略「請勿打擾」使用者狀態", + "Sensitive conversation" : "敏感對話", + "Message preview will be disabled in conversation list and notifications" : "對話清單與通知中的訊息預覽將停用", + "Recording consent is required for calls in this conversation" : "在此次對話中,需要獲得錄製同意", + "Recording consent is not required for calls in this conversation" : "在此次對話中,不需要獲得錄製同意", + "Recording consent requirement was updated" : "錄製同意要求已更新", + "Error occurred while updating recording consent" : "更新錄製同意時發生錯誤", + "Recording Consent" : "錄製同意", + "Recording consent cannot be changed once a call or breakout session has started." : "通話或分組會議開始後,錄製同意就無法更改。", + "Require recording consent before joining call in this conversation" : "在此對話中,需要在加入通話前給予錄製同意", + "Recording consent is required for all calls" : "所有通話都需要獲得錄製同意", + "SIP dial-in is now possible without PIN requirement" : "SIP 撥入現在不需要 PIN 碼", + "SIP dial-in is now enabled" : "SIP 撥入現在已啟用", + "SIP dial-in is now disabled" : "SIP 撥入現在已停用", + "Error occurred when enabling SIP dial-in" : "啟用 SIP 撥入時發生錯誤", + "Error occurred when disabling SIP dial-in" : "停用 SIP 撥入時發生錯誤", + "Phone and SIP dial-in" : "電話與 SIP 撥入", + "Enable phone and SIP dial-in" : "啟用電話與 SIP 撥入", + "Allow to dial-in without a PIN" : "允許在沒有 PIN 碼的情況下撥入", + "Ongoing" : "持續進行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["已接受 %n 個人"], + "_%n person declined_::_%n people declined_" : ["已拒絕 %n 個人"], + "_and %n other attachment_::_and %n other attachments_" : ["以及 %n 個其他附件"], + "With {displayName}" : "與 {displayName}", + "In {conversation}" : "在 {conversation} 中", + "View attachment" : "檢視附件", + "Join" : "加入", + "View conversation" : "檢視對話", + "View event on Calendar" : "在日曆上檢視活動", + "Error while creating the conversation" : "建立對話時發生錯誤", + "Hello, {displayName}" : "嗨,{displayName}", + "Start meeting now" : "立刻開始會議", + "Give your meeting a title" : "為您的會議命名", + "Create and copy link" : "建立並複製連結", + "Create a new conversation" : "建立新對話", + "Join open conversations" : "加入開放對話", + "Call a phone number" : "撥打電話號碼", + "Scroll backward" : "向後捲動", + "Scroll forward" : "向前捲動", + "Schedule meetings" : "安排會議", + "You don't have any upcoming meetings" : "您沒有任何即將舉行的會議", + "Calendar events with a conversation link as the location are shown here" : "此處顯示將對話連結設為地點的行事曆活動", + "Open calendar" : "開啟日曆", + "Unread mentions" : "未讀的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的訊息將顯示於此處。您可以透過輸入 @ 加上對方姓名來標記他人。", + "Upcoming reminders" : "即將到來的提醒", + "Message reminders" : "訊息提醒", + "Set a reminder on a message to be notified" : "在訊息上設定提醒以接收通知", + "Start a group conversation" : "開始群組對話", + "Create conversation" : "建立對話", + "Enter your name" : "輸入您的名稱", + "Submit name and join" : "遞交名稱並加入", + "Do you already have an account?" : "您已經有帳號了嗎?", + "Log in" : "登入", + "Error while verifying uploaded file" : "驗證上傳的檔案時發生錯誤", + "Uploaded file is verified" : "已驗證上傳的檔案", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "內容格式為逗號分隔值 (CSV):
- 標題行為必填,且必須符合 \"name\",\"email\"\"email\"
- 一個條目一行(例如 \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "參與者新增成功", + "Error while adding participants" : "新增參與者時發生錯誤", + "Import a file" : "匯入檔案", + "Browse" : "瀏覽", + "Verifying uploaded file …" : "正在驗證已上傳的檔案……", + "This might take a moment" : "這可能需要一段時間", + "Send invitations" : "傳送邀請", + "_%n invalid email_::_%n invalid emails_" : ["%n 個無效的電子郵件"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["有 %n 個電子郵件匯入過或重複"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以傳送 %n 個邀請"], + "An error occurred while calling a phone number" : "撥打電話號碼時發生錯誤", + "Phone number could not be called: {error}" : "無法撥打電話號碼:{error}", + "Phone number could not be called" : "無法撥打電話號碼", + "Search participants or phone numbers" : "搜尋參與者或電話號碼", + "Creating the conversation …" : "正在建立對話……", + "Mark as read" : "標為已讀", + "Mark as unread" : "標為未讀", + "Remove from favorites" : "從我的最愛移除", + "Add to favorites" : "新增至我的最愛", + "Unarchive conversation" : "解除封存對話", + "Ignore \"Do not disturb\"" : "忽略「請勿打擾」", + "You need to promote a new moderator before you can leave the conversation." : "在您離開對話前,您必須授權一位新的主持人。", + "Conversation actions" : "對話動作", + "Notify about calls" : "通話通知", + "Hide message text" : "隱藏訊息文字", + "Pending invitations" : "擱置中的邀請", + "Join conversations from other servers" : "加入來自其他伺服器的對話", + "From {user} at {remoteServer}" : "來自 {remoteServer} 的 {user}", + "Decline invitation" : "婉拒邀請", + "Accept invitation" : "接受邀請", + "No pending invitations" : "沒有待處理的邀請", + "Home" : "家庭", + "Unread" : "未讀", + "Mentions" : "提及", + "Meetings" : "會議", + "Sort conversations" : "排序對話", + "By recent activity" : "按最近活動排序", + "Alphabetically" : "字母", + "Do not group by type" : "請勿按類型分組", + "Show private ones first" : "先顯示私人訊息", + "Show group ones first" : "先顯示群組訊息", + "No followed threads" : "沒有追蹤的討論串", + "No matches found" : "找不到符合的項目", + "No conversations found" : "找不到任何對話", + "You have no archived conversations." : "您沒有已封存的對話。", + "Subscribe to an existing thread or start your own." : "訂閱既有的討論串或開啟您的討論串。", + "You have no unread mentions." : "您沒有未讀的提及。", + "You have no unread messages." : "您沒有未讀的訊息。", + "An error occurred while performing the search" : "搜尋時發生了錯誤", + "Conversation list" : "對話清單", + "Filter conversations by" : "按以下條件過濾對話", + "Unread messages" : "未讀訊息", + "Meeting conversations" : "會議對話", + "Clear filters" : "清除過濾條件", + "New personal note" : "新個人註記", + "SIP backend is not installed" : "未安裝 SIP 後端", + "Back to conversations" : "回到對話", + "Archived conversations" : "已封存的對話", + "Threads" : "討論串", + "Clear filter" : "清除過濾條件", + "Show more threads" : "顯示更多討論串", + "App settings" : "應用程式設定", + "Users" : "使用者", + "Groups" : "群組", + "Teams" : "團隊", + "Federated users" : "聯盟使用者", + "New private conversation" : "新私人對話", + "Other sources" : "其他來源", + "Open conversations" : "開啟對話", + "No search results" : "無搜尋結果", + "Users, groups and teams" : "使用者、群組與團隊", + "Users and groups" : "使用者與群組", + "Users and teams" : "使用者與團隊", + "Groups and teams" : "群組與團隊", + "New group conversation" : "新群組對話", + "The meeting will start soon" : "會議即將開始", + "This meeting is scheduled for {startTime}" : "此會議定於 {startTime} 開始", + "You are currently waiting in the lobby" : "您目前正在大廳等候", + "Enable noise suppression" : "啟用雜訊抑制", + "Reduce background noises for better voice quality" : "降低背景雜音,改善語音品質", + "Enable echo cancellation" : "啟用迴音消除", + "Minimize echo effect from own surrounding" : "盡量減少自身周圍環境造成的迴音效應", + "Enable auto gain control" : "啟用自動增益控制", + "Dynamically adjust microphone volume for consistent level" : "動態調整麥克風音量以維持穩定音量", + "Select microphone" : "選取麥克風", + "No microphone available" : "沒有可用的麥克風", + "Select speaker" : "選取喇叭", + "No speaker available" : "沒有可用的喇叭", + "Select camera" : "選取網路攝影機", + "No camera available" : "沒有可用的網路攝影機", + "Select a device" : "選取裝置", + "Playing …" : "正在播放……", + "Test speakers" : "測試喇叭", + "Test" : "測試", + "Devices" : "裝置", + "Backgrounds" : "背景", + "No audio" : "沒有音訊", + "No camera" : "沒有網路攝影機", + "Display video as you will see it (mirrored)" : "顯示您將看到的視訊(鏡像)", + "Display video as others will see it" : "以其他人看到的方式顯示視訊", + "Calls are not supported in your browser" : "您的瀏覽器不支援通話", + "Access to microphone is only possible with HTTPS" : "僅使用 HTTPS 時才能存取麥克風", + "Access to microphone was denied" : "無法存取麥克風", + "Error while accessing microphone" : "存取麥克風時發生錯誤", + "Access to camera is only possible with HTTPS" : "僅使用 HTTPS 時才能存取網路攝影機", + "The call is being recorded." : "通話正在錄音。", + "The call might be recorded." : "通話可能會被錄製。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "錄製可能包含您的聲音、來自攝影機的影像與螢幕分享。在加入通話前,需要獲得您的同意。", + "Give consent to the recording of this call" : "對此通話的錄製給予同意", + "Show more info" : "顯示更多資訊", + "Audio is not available" : "音訊不可用", + "Video is not available" : "視訊不可用", + "Start recording immediately with the call" : "通話後立刻開始錄音", + "Recording backend is not installed" : "未安裝錄製後端", + "Notify all participants about this call" : "通知所有參與者此通話", + "Apply settings" : "套用設定", + "Select virtual office background" : "選取虛擬辦公室背景", + "Select virtual home background" : "選取虛擬家庭背景", + "Select virtual abstract background" : "選取虛擬抽象背景", + "Select virtual beach background" : "選取虛擬海灘背景", + "Select virtual park background" : "選取虛擬公園背景", + "Select virtual theater background" : "選取虛擬電影院背景", + "Select virtual library background" : "選取虛擬圖書館背景", + "Select virtual space station background" : "選取虛擬太空站背景", + "Error while uploading the file" : "上傳檔案時發生錯誤", + "Select a file" : "選取檔案", + "Invalid path selected" : "所選的路徑無效", + "Select virtual background from file {fileName}" : "選取來自 {fileName} 檔案的虛擬背景", + "Blur" : "模糊", + "Upload" : "上傳", + "Files" : "檔案", + "(editing)" : "(正在編輯)", + "(edited)" : "(已編輯)", + "The message has expired or has been deleted" : "訊息已過期或已被刪除", + "Cancel quote" : "取消引用", + "24 hours" : "24小時", + "7 days" : "7天", + "30 days" : "30 天", + "Until unpin" : "直到取消釘選", + "Clear reminder – {timeLocale}" : "清除提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 編輯", + "Pinned by you" : "由您釘選", + "Pinned by {actor}" : "由 {actor} 釘選", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "訊息文字已複製到剪貼簿", + "Message text could not be copied" : "訊息文字無法複製", + "Message forwarded to \"Note to self\"" : "訊息已轉寄至「給自己的筆記」", + "Error while forwarding message to \"Note to self\"" : "轉寄訊息到「給自己的筆記」時發生錯誤", + "A reminder was successfully removed" : "已成功移除提醒", + "Error occurred when removing a reminder" : "移除提醒時發生錯誤", + "A reminder was successfully set at {datetime}" : "已成功設定於 {datetime} 的提醒", + "Error occurred when creating a reminder" : "建立提醒時發生錯誤", + "Add a reaction to this message" : "新增反應至此訊息", + "Reply" : "回覆", + "More actions" : "更多動作", + "Set reminder" : "設定提醒", + "Pin message" : "釘選訊息", + "Unpin message" : "取消釘選訊息", + "Reply privately" : "私下回覆", + "Edit message" : "編輯訊息", + "Copy message" : "複製訊息", + "Copy message link" : "複製訊息連結", + "Go to file" : "前往檔案", + "Download file" : "下載檔案", + "Go to thread" : "到討論串", + "Edit thread details" : "編輯討論串詳細資訊", + "Forward message" : "轉寄訊息", + "Translate" : "翻譯", + "Set custom reminder" : "設定自訂提醒", + "Keep pinned for" : "維持釘選狀態", + "Set custom period" : "設定自訂週期", + "Close reactions menu" : "關閉反應選單", + "React with {emoji}" : "使用 {emoji} 做出反應", + "React with another emoji" : "使用其他表情符號做出反應", + "Choose a conversation to forward the selected message." : "選擇所選訊息將轉寄的目標對話。", + "Error while forwarding message" : "轉寄訊息時發生錯誤", + "The message has been forwarded to {selectedConversationName}" : "訊息已轉寄至 {selectedConversationName}", + "Dismiss" : "取消", + "Go to conversation" : "前往對話", + "Detect language" : "偵測語言", + "The message could not be translated" : "無法翻譯訊息", + "Translation copied to clipboard" : "翻譯已複製到剪貼簿", + "Translation could not be copied" : "無法複製翻譯", + "Translate message" : "翻譯訊息", + "Source language to translate from" : "要翻譯的來源語言", + "Translate from" : "翻譯從", + "Target language to translate into" : "要翻譯至的目標語言", + "Translate to" : "翻譯至", + "Translating" : "正在翻譯", + "This translation is AI generated and may contain mistakes." : "此翻譯為人工智慧產生,可能會出錯。", + "Copy translated text" : "複製已翻譯的文字", + "Error when scheduling the message" : "安排訊息時發生錯誤", + "Reschedule" : "重新安排", + "Send now" : "立刻傳送", + "Choose a time" : "選擇時間", + "Send at custom time" : "於自訂時間傳送", + "Will be sent without notification" : "將不另行通知即寄出", + "Message read by everyone who shares their reading status" : "已分享閱讀狀態的所有人都閱讀了此訊息", + "Message sent" : "已傳送郵件", + "Sent without notification" : "傳送而不通知", + "Deleting message" : "正在刪除訊息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "訊息已成功刪除,但已設定機器人或 Matterbridge,訊息可能已散佈至其他服務", + "Message deleted successfully" : "訊息已刪除成功", + "Message could not be deleted because it is too old" : "訊息太舊,無法刪除", + "Only normal chat messages can be deleted" : "只能刪除一般聊天訊息", + "An error occurred while deleting the message" : "刪除訊息時發生錯誤", + "Pinned" : "已釘選", + "Your browser does not support playing audio files" : "您的瀏覽器不支援播放音訊檔案", + "Contact" : "聯絡人", + "{stack} in {board}" : "{stack} 於 {board}", + "Deck Card" : "Deck 卡片", + "Remove {fileName}" : "移除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中開啟此位置", + "_%n reply_::_%n replies_" : ["%n 個回覆"], + "Sending message" : "傳送訊息", + "Failed to send the message. Click to try again" : "傳送訊息失敗。點擊重試", + "Not enough free space to upload file" : "可用空間不足,無法上傳檔案", + "You cannot send messages to this conversation at the moment" : "您目前無法向此對話傳送訊息", + "Could not update the message" : "無法更新訊息", + "Reply to thread \"{threadTitle}\"" : "回覆至討論串「{threadTitle}」", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["點選以投票 • %n 票"], + "Click to vote" : "點選以投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["投票草稿 • %n 個選項"], + "_%n vote_::_%n votes_" : ["%n 個投票"], + "Edit poll draft" : "編輯投票草稿", + "Delete poll draft" : "刪除投票草稿", + "Open poll" : "開放投票", + "Closed poll" : "已關閉的投票", + "See results" : "檢視結果", + "Reactions" : "反應", + "No permission to post reactions in this conversation" : "無權在此對話中張貼反應", + "and {participant}" : "與 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及 %n 位其他參與者"], + "Show all reactions" : "顯示所有反應", + "Add more reactions" : "新增更多反應", + "Show or collapse system messages" : "顯示或折疊系統訊息", + "No messages" : "沒有訊息", + "All messages have expired or have been deleted." : "所有訊息都已過期或已刪除。", + "Generate summary with AI" : "使用人工智慧產生摘要", + "{author} (pinned by you)" : "{author}(由您釘選)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 釘選)", + "Unpin" : "取消釘選", + "Cancel search" : "取消搜尋", + "Add a phone number" : "新增電話號碼", + "Error: A password is required to create the conversation." : "錯誤:建立對話需要密碼。", + "All set, the conversation \"{conversationName}\" was created." : "一切就緒,對話「{conversationName}」已建立。", + "Create a new group conversation" : "建立新群組對話", + "Add participants" : "新增參與者", + "Maximum length exceeded ({maxlength} characters)" : "超出最大長度({maxlength} 個字元)", + "Conversation type" : "對話類型", + "Conversation visibility" : "對話能見度", + "Allow guests to join via link" : "允許訪客透過連結加入", + "Enter password" : "輸入密碼", + "This conversation has been locked" : "此對話已鎖定", + "No permission to post messages in this conversation" : "無權在此對話中發佈訊息", + "Joining conversation …" : "正在加入對話……", + "Write a message without notification" : "撰寫訊息而不通知", + "Create a thread silently" : "默默建立討論串", + "Create a thread" : "建立討論串", + "Send message silently" : "無聲傳送訊息", + "Send message" : "傳送訊息", + "Send without notification" : "傳送而不通知", + "The participant will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Participants will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Message will be sent {datetimeString}" : "訊息將於 {datetimeString} 傳送", + "Thread title is required" : "討論串標題為必填", + "Message text is required" : "訊息文字為必填", + "The message could not be edited" : "無法編輯訊息", + "File to share" : "要分享的檔案", + "File upload is not available in this conversation" : "此對話中無法上傳檔案", + "Message was successfully scheduled" : "訊息已成功排定", + "Add emoji" : "新增表情符號", + "Adding a mention will only notify users who did not read the message." : "新增提及僅會通知尚未閱讀訊息的使用者。", + "Thread title" : "討論串標題", + "Send later" : "稍後傳送", + "Show scheduled messages" : "顯示已排定的訊息", + "Cancel editing" : "取消編輯", + "Schedule message" : "安排訊息", + "{user} is out of office and might not respond." : "{user} 不在辦公室,可能不會回覆。", + "Absence period: {startDate} - {endDate}" : "缺席時段:{startDate} - {endDate}", + "Replacement:" : "取代:", + "Share from {nextcloud}" : "透過 {nextcloud} 分享", + "Share from Files" : "從「檔案」分享", + "Share files to the conversation" : "分享檔案至對話", + "Upload from device" : "從裝置上傳", + "Create new poll" : "新增一項調查", + "Smart picker" : "智慧型挑選器", + "Record voice message" : "錄製語音訊息", + "End recording and send" : "結束錄製並傳送", + "Dismiss recording" : "取消錄音", + "Access to the microphone was denied" : "無法存取麥克風", + "Microphone either not available or disabled in settings" : "麥克風不可用或已在設定中被停用", + "Error while recording audio" : "錄製音訊時發生錯誤", + "Voice message {time} ({conversation})" : "語音訊息 {time} ({conversation})", + "Generating summary of unread messages …" : "正在產生未讀訊息的摘要……", + "Summary is AI generated and might contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Error occurred during a summary generation" : "產生摘要時發生錯誤", + "New file" : "新增檔案", + "Blank" : "空白", + "Error while creating file" : "建立檔案時發生錯誤", + "Create and share a new file" : "建立並分享新檔案", + "Name of the new file" : "新檔案的名稱", + "Create file" : "建立檔案", + "Someone is typing …" : "有人在打字……", + "{user1} is typing …" : "{user1} 在打字……", + "{user1} and {user2} are typing …" : "{user1} 與 {user2} 在打字……", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2} 與 {user3} 在打字……", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 與 %n 個其他人在打字……"], + "Add more files" : "新增更多檔案", + "Send" : "傳送", + "In this conversation {user} can:" : "在此對話中,{user} 可以:", + "Edit default permissions for participants in {conversationName}" : "編輯 {conversationName} 中參與者的預設權限", + "Start a call" : "開始通話", + "Skip the lobby" : "略過大廳", + "Can post messages" : "可以張貼訊息", + "Can post messages and reactions" : "可以發佈訊息與反應", + "Can add reactions" : "可以新增反應", + "Enable the microphone" : "啟用麥克風", + "Enable the camera" : "啟用網路攝影機", + "Share the screen" : "分享螢幕", + "Update permissions" : "更新權限", + "Updating permissions" : "正在更新權限", + "No poll drafts" : "沒有投票草稿", + "There is no poll drafts yet saved for this conversation" : "此對話尚未儲存任何投票草稿", + "Create poll in {name}" : "在 {name} 建立投票", + "Create poll" : "建立投票", + "Error while importing poll" : "匯入投票時發生錯誤", + "Question" : "問題", + "Ask a question" : "詢問問題", + "Import draft from file" : "從檔案匯入草稿", + "Answers" : "答案", + "Answer {option}" : "答案 {option}", + "Delete poll option" : "刪除投票選項", + "Add answer" : "新增答案", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多個答案", + "Save as draft" : "儲存為草稿", + "Export draft to file" : "將草稿匯出至檔案", + "_Final results • %n vote_::_Final results • %n votes_" : ["最終結果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此選項", + "End poll" : "結束投票", + "Change your vote" : "變更您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "結果", + "Download as spreadsheet" : "下載為試算表", + "Download as CSV" : "下載為 CSV", + "Voted participants" : "已投票的參與者", + "Send a message to \"{roomName}\"" : "傳送訊息給「{roomName}」", + "Hide list of participants" : "隱藏參與者清單", + "Show list of participants" : "顯示參與者清單", + "Assistance requested in {roomName}" : "{roomName} 請求協助", + "The message was sent to \"{roomName}\"" : "訊息已傳送至「{roomName}」", + "Dismiss request for assistance" : "撤銷協助請求", + "Send message to room" : "傳送訊息至聊天室", + "Back to main room" : "回到主聊天室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室傳送訊息", + "Start session" : "開始工作階段", + "Start a call before you start a breakout room session" : "在開始分組討論室工作階段之前開始通話", + "Stop session" : "停止工作階段", + "The message was sent to all breakout rooms" : "訊息已傳送至所有分組討論室", + "Send a message to all breakout rooms" : "傳送訊息至所有分組討論室", + "Breakout rooms are not started" : "分組討論室尚未啟動", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "沒有高效能後端的通話可能會造成連線問題與裝置上的高負載。{linkstart}取得更多資訊{linkend}", + "Talk setup incomplete" : "未完成 Talk 設定", + "Disable lobby" : "停用大廳", + "Settings for participant \"{user}\"" : "參與者「{user}」的設定", + "Participant \"{user}\"" : "參與者「{user}」", + "moderator" : "主持人", + "bot" : "機器人", + "guest" : "訪客", + "Ringing …" : "鈴聲響起……", + "Call rejected" : "通話已拒絕", + "{time} talking …" : "{time} 正在說話……", + "{time} talking time" : "{time} 說話時間", + "Raised their hand" : "舉手了", + "Joined with video" : "使用視訊加入", + "Joined via phone" : "使用電話加入", + "Joined with audio" : "使用音訊加入", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的長度必須小於或等於 {maxLength} 個字元。您目前的文字長度為 {charactersCount} 個字元。", + "Remove group and members" : "移除群組與成員", + "Remove team and members" : "移除團隊與成員", + "Remove participant" : "移除參與者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "你確定要將群組「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "你確定要將團隊「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove {displayName} from this conversation?" : "您真的想要將 {displayName} 從此對話中移除嗎?", + "Notification was sent to {displayName}" : "通知已傳送給 {displayName}", + "Could not send notification to {displayName}" : "無法傳送通知給 {displayName}", + "Permissions granted to {displayName}" : "已將權限授予 {displayName}", + "Could not modify permissions for {displayName}" : "無法修改 {displayName} 的權限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的權限", + "Permissions set to default for {displayName}" : "{displayName} 的權限已設定為預設值", + "Phone number could not be hung up" : "無法掛斷電話號碼", + "Phone number could not be put on hold" : "無法保留電話號碼", + "Phone number could not be muted" : "無法靜音電話號碼", + "Phone number could not be unmuted" : "無法取消靜音電話號碼", + "DTMF message could not be sent" : "無法傳送 DTMF 訊息", + "Phone number copied to clipboard" : "電話號碼已複製到剪貼簿", + "Phone number could not be copied" : "無法複製電話號碼", + "in the lobby" : "在大廳中", + "Dial out phone" : "撥出電話", + "Hang up phone" : "掛斷電話", + "Move back to lobby" : "移動回大廳", + "Move to conversation" : "移動至對話", + "Dial-in PIN" : "撥入 PIN 碼", + "Demote from moderator" : "取消主持人資格", + "Promote to moderator" : "授予主持人資格", + "Resend invitation" : "重新傳送邀請", + "Send call notification" : "傳送通話通知", + "Dial out phone number" : "撥出電話號碼", + "Resume call for phone number" : "恢復電話號碼的通話", + "Put phone number on hold" : "保留電話號碼", + "Unmute phone number" : "取消電話號碼靜音", + "Mute phone number" : "將電話號碼靜音", + "Copy phone number" : "複製電話號碼", + "Reset custom permissions" : "重設自訂權限", + "Grant all permissions" : "授予所有權限", + "Remove all permissions" : "移除所有權限", + "Also ban from this conversation" : "也從此對話中封鎖", + "Internal note (reason to ban)" : "內部備註(封鎖理由)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "修改了 {displayName} 的權限", + "Add users, groups or teams" : "新增使用者、群組或團隊", + "Add users or groups" : "新增使用者或群組", + "Add users or teams" : "新增使用者或團隊", + "Add users" : "新增使用者", + "Add groups or teams" : "新增群組或團隊", + "Add groups" : "新增群組", + "Add teams" : "新增團隊", + "Add other sources" : "新增其他來源", + "Add emails" : "新增電子郵件", + "Integrations" : "整合", + "Add federated users" : "新增聯盟使用者", + "Searching …" : "正在搜尋……", + "Search for more users" : "搜尋更多使用者", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以透過名稱、電子郵件或雲端聯盟 ID 搜尋或新增參與者", + "Search or add participants" : "搜尋或新增參與者", + "Invitation was sent to {actorId}" : "邀請已傳送至 {actorId}", + "An error occurred while adding the participants" : "新增參與者時發生了錯誤", + "A new group conversation with selected participant will be created" : "將會建立包含選定參與者的新群組對話", + "Participants" : "參與者", + "Pinned by a deleted user" : "由已刪除的使用者釘選", + "Participants ({count})" : "參與者 ({count})", + "Open chat" : "開啟聊天", + "You have new unread messages in the chat." : "您在聊天中有新的未讀訊息。", + "You have been mentioned in the chat." : "您已在聊天中被提及。", + "Search messages" : "搜尋訊息", + "Chat" : "聊天", + "Details" : "詳細資訊", + "Shared items" : "已分享項目", + "Search in {name}" : "在 {name} 中搜尋", + "Threads in {name}" : "在 {name} 的討論串", + "{actor} in {conversation}" : "{conversation} 中的 {actor}", + "Search messages …" : "搜尋訊息……", + "Search options" : "搜尋選項", + "From User" : "來自使用者", + "Since" : "自", + "Until" : "直到", + "No results found" : "找不到結果", + "Load more results" : "載入更多結果", + "Recent threads" : "最近的討論串", + "Projects" : "專案", + "No shared items" : "無已分享項目", + "Thread notifications" : "討論串通知", + "Thread actions" : "討論串動作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "連結至對話", + "No open conversations found" : "找不到開放對話", + "Either there are no open conversations or you joined all of them." : "可能是沒有公開對話,或是您已經加入了所有開放對話。", + "Check spelling or use complete words." : "檢查拼寫或使用完整單字。", + "Search conversations or users" : "搜尋對話或使用者", + "Select conversation" : "選擇對話", + "Number length is not valid" : "號碼長度無效", + "Region code is not valid" : "區碼無效", + "Number length is too short" : "號碼長度太短", + "Number length is too long" : "號碼長度太長", + "Number is not valid" : "號碼無效", + "Phone numbers" : "電話號碼", + "Display name: {name}" : "顯示名稱:{name}", + "Edit display name" : "編輯顯示名稱", + "Display name (required)" : "顯示名稱(必填)", + "Save name" : "儲存名稱", + "I picked message bubbles" : "我選了訊息泡泡", + "I picked the list style" : "我挑選了清單樣式", + "Error while setting personal setting" : "設定個人設定時發生錯誤", + "Error while saving sounds setting" : "儲存音訊設定時發生錯誤", + "Compact conversations list" : "簡潔對話清單", + "Chat appearance" : "聊天外觀", + "Messages list" : "訊息清單", + "Message bubbles" : "訊息泡泡", + "Play sounds when participants join or leave a call" : "參與者加入或離開通話時播放音訊", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由於製造商的技術限制,目前在 iPhone 與 iPad 上無法使用", + "Notification settings" : "通知設定", + "Sounds for chat and call notifications" : "聊天與通話通知的音效", + "Invalid language ({languageId})" : "無效的語言 ({languageId})", + "Default language" : "預設語言", + "Default language ({languageName})" : "預設語言 ({languageName})", + "Error when trying to load the available live translation languages" : "嘗試載入可用即時翻譯語言時發生錯誤", + "Error when trying to set live translation language" : "嘗試設定即時翻譯語言時發生錯誤", + "Set language used to show the transcriptions" : "設定顯示轉錄內容所使用的語言", + "Select location for attachments" : "選擇附件的位置", + "Error while setting attachment folder" : "設定附件資料夾時出錯", + "Error while setting read status privacy" : "變更閱讀狀態隱私設定時出錯", + "Error while setting typing status privacy" : "設定打字狀態隱私時發生錯誤", + "Error while setting default media state" : "設定預設媒體狀態時發生錯誤", + "Turn camera and microphone off by default" : "預設關閉相機與麥克風", + "Blur camera background by default" : "預設模糊相機背景", + "Skip device preview before joining a call" : "略過加入通話前的裝置預覽", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入時將關閉攝影機。若需取得錄影同意,此訊息將一律顯示。", + "Appearance & Sounds" : "外觀與音效", + "Privacy" : "隱私", + "Send read receipts" : "傳送讀取回條", + "When off, all read statuses will be hidden" : "關閉時,所有讀取狀態都會被隱藏", + "Share typing status" : "分享輸入狀態", + "When off, all typing indicators will be hidden" : "關閉時,所有輸入指示器都會被隱藏", + "Attachments folder" : "附件資料夾", + "Toggle full screen" : "切換全螢幕", + "Return to Home screen" : "回到主畫面", + "Search" : "搜尋", + "Shortcuts while in a chat" : "聊天中的捷徑", + "Focus the chat input" : "聚焦聊天輸入", + "Unfocus the chat input to use shortcuts" : "取消對聊天輸入的聚焦以使用捷徑", + "Edit your last message" : "編輯您最新的訊息", + "Shortcuts while in a call" : "通話中的捷徑", + "Camera on and off" : "開啟和關閉相機", + "Microphone on and off" : "開啟和關閉麥克風", + "Raise or lower hand" : "舉起或放下手", + "Push to talk or push to mute" : "一鍵通話或一鍵靜音", + "Zoom-in / zoom-out a screen share" : "放大/縮小螢幕分享", + "Mouse wheel" : "滑鼠滾輪", + "Start call silently" : "安靜地開始通話", + "Start call" : "開始通話", + "End call" : "結束通話", + "The server was updated, you cannot start or join a call." : "伺服器已更新,您無法開始或加入通話。", + "This call has just ended" : "此通話剛結束", + "You will be able to join the call only after a moderator starts it." : "您僅能在主持人開始通話後才能加入。", + "End call for everyone" : "為所有人結束通話", + "Starting the recording" : "開始錄音", + "Recording" : "錄音", + "The call has been running for one hour." : "通話已經持續一個小時了。", + "Cancel recording start" : "取消錄音開始", + "Stop recording" : "停止錄音", + "Send a reaction" : "傳送反應", + "React with {reaction}" : "使用 {reaction} 反應", + "All tasks done!" : "所有任務都完成了!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n 任務"], + "Add participants to this call" : "新增參與者至此通話", + "_%n participant in call_::_%n participants in call_" : ["通話中有 %n 位參與者"], + "Scheduled messages" : "已排定的訊息", + "You are not allowed to enable screensharing" : "您無權啟用螢幕分享", + "No screensharing" : "沒有螢幕分享", + "Screensharing options" : "螢幕分享選項", + "Enable screensharing" : "啟用螢幕分享", + "Bad sent video and screen quality." : "傳送的視訊與畫面品質不好。", + "Bad sent screen quality." : "傳送的畫面品質不好。", + "Bad sent video quality." : "傳送的視訊品質不好。", + "Bad sent audio, video and screen quality." : "傳送的音訊、視訊與畫面品質不好。", + "Bad sent audio and screen quality." : "傳送的音訊與畫面品質不好。", + "Bad sent audio and video quality." : "傳送的音訊與視訊品質不好。", + "Bad sent audio quality." : "傳送的音訊品質不好。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。為了改善這種狀況,請嘗試在螢幕分享時停用背景模糊或您的視訊。", + "Disable background blur" : "停用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。為了改善這種狀況,請嘗試在螢幕分享時停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試在螢幕分享時停用背景模糊或您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試在螢幕分享時停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解您與看到您的螢幕。為了改善這種狀況,請嘗試停用螢幕分享。", + "Disable screenshare" : "停用螢幕分享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試停用背景模糊或您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解您。", + "Screen sharing is not supported by your browser." : "您的瀏覽器不支援螢幕分享", + "Screen sharing requires the page to be loaded through HTTPS." : "螢幕分享要求頁面透過 HTTPS 載入。", + "Screensharing requires the page to be loaded through HTTPS." : "螢幕分享要求頁面透過 HTTPS 載入。", + "An error occurred while starting screensharing." : "開始螢幕分享時發生錯誤。", + "Select virtual background" : "選取虛擬背景", + "Show your screen" : "顯示您的螢幕", + "Stop screensharing" : "停止分享螢幕", + "Mute others" : "將其他人靜音", + "Start recording" : "開始錄音", + "Set up breakout rooms" : "設定分組討論室", + "Download attendance list" : "下載出席名單", + "Open Calendar" : "開啟日曆", + "Remove participant {name}" : "移除參與者 {name}", + "Would you like to delete this conversation?" : "您想要刪除此對話嗎?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此對話將在 %n 天內不活躍的情況下自動為所有人刪除。"], + "Are you sure you want to delete this conversation?" : "您確定您想要刪除此對話嗎?", + "Delete now" : "立刻刪除", + "Keep" : "保留", + "Open dialpad" : "開啟撥號鍵盤", + "Select a region" : "選取區域", + "Local time: {time}" : "當地時間:{time}", + "Scheduled {datetime}" : "預定於 {datetime}", + "Scheduled for {datetime}" : "預定於 {datetime}", + "Search …" : "搜尋 …", + "Message without mention" : "沒有提及的訊息", + "Mention myself" : "提及自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "選取對話", + "Select a mode" : "選取模式", + "You do not have permissions to access this conversation." : "您無權存取此對話。", + "Join a different conversation or start a new one." : "加入他對話或開始新的。", + "The conversation does not exist" : "對話不存在", + "Join a conversation or start a new one!" : "加入對話或開始新的!", + "Duplicate session" : "再製工作階段", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此對話已於其他分頁開啟。目前的伺服器版本不支援在多個分頁開啟同一個對話。", + "Creating and joining a conversation with \"{userid}\"" : "使用「{userid}」建立並加入對話", + "Join a conversation or start a new one" : "加入一個對話或者開一個新的", + "Error while joining the conversation" : "加入對話時發生錯誤", + "Another user" : "其他使用者", + "Hey! Are you using the list style or message bubbles?" : "嘿!您想要使用清單樣式或訊息泡泡呢?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 使用者", + "User password" : "使用者密碼", + "Talk conversation" : "Talk 對話", + "Skip TLS verification" : "略過 TLS 驗證", + "Matrix server URL" : "Matrix 伺服器 URL", + "User" : "使用者", + "Matrix channel" : "Matrix 頻道", + "Mattermost server URL" : "Mattermost 伺服器 URL", + "Mattermost user" : "Mattermost 使用者", + "Team name" : "團隊名稱", + "Channel name" : "頻道名稱", + "Rocket.Chat server URL" : "Rocket.Chat 伺服器 URL", + "User name or email address" : "使用者名稱或電子郵件地址", + "Rocket.Chat channel" : "Rocket.Chat 頻道", + "Zulip server URL" : "Zulip 伺服器 URL", + "Bot user name" : "機器人使用者名稱", + "Bot API key" : "機器人 API 金鑰", + "Zulip channel" : "Zulip 頻道", + "API token" : "API 權杖", + "Slack channel" : "Slack 頻道", + "Server ID or name" : "伺服器 ID 或名稱", + "Channel ID (prefixed with \"ID:\") or name" : "頻道 ID(前綴為「ID:」)或名稱", + "Channel" : "頻道", + "Login" : "帳號", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 伺服器 URL(例如 chat.freenode.net:6667)", + "Nickname" : "暱稱", + "Connection password" : "連線密碼", + "IRC channel" : "IRC 頻道", + "Channel password" : "頻道密碼", + "NickServ nickname" : "NickServ 暱稱", + "NickServ password" : "NickServ 密碼", + "Use TLS" : "使用 TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租戶 ID", + "Client ID" : "客戶端 ID", + "Team ID" : "團隊 ID", + "Thread ID" : "討論串 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 伺服器 URL", + "MUC server URL" : "MUC 伺服器 URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "釘選的訊息", + "Media" : "媒體", + "Polls" : "投票", + "Deck cards" : "看板卡片", + "Voice messages" : "語音訊息", + "Locations" : "地點", + "Call recordings" : "通話錄音", + "Audio" : "音訊", + "Show all pinned messages" : "顯示所有釘選訊息", + "Show all media" : "顯示所有媒體", + "Show all files" : "顯示所有檔案", + "Show all polls" : "顯示所有投票", + "Show all deck cards" : "顯示所有看板卡片", + "Show all voice messages" : "顯示所有語音訊息", + "Show all locations" : "顯示所有位置", + "Show all call recordings" : "顯示所有通話錄音", + "Show all audio" : "顯示所有音訊", + "Show all other" : "顯示所有其他東西", + "Follow conversation settings" : "遵循對話設定", + "Group" : "群組", + "Team" : "團隊", + "You reconnected to the call" : "您已重新連線至通話", + "{actor} reconnected to the call" : "{actor} 已重新連線至通話", + "You added {user0} and {user1}" : "您已新增 {user0} 與 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["您已新增 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator added you and {user0}" : "管理員已新增您與 {user0}", + "{actor} added you and {user0}" : "{actor} 已新增您與 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理員已新增您、{user0} 與 %n 個其他參與者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 已新增您、{user0} 與 %n 個其他參與者"], + "An administrator added {user0} and {user1}" : "管理員已新增 {user0} 與 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 已新增 {user0} 與 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理員已新增 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 已新增 {user0}、{user1} 與 %n 個其他參與者"], + "You removed {user0} and {user1}" : "您已移除 {user0} 與 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您已移除 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator removed you and {user0}" : "管理員已移除您與 {user0}", + "{actor} removed you and {user0}" : "{actor} 已移除您與 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理員已移除您、{user0} 與 %n 個其他參與者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 已移除您、{user0} 與 %n 個其他參與者"], + "An administrator removed {user0} and {user1}" : "管理員已移除 {user0} 與 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 已移除 {user0} 與 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理員已移除 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 已移除 {user0}、{user1} 與 %n 個其他參與者"], + "You and {user0} joined the call" : "您與 {user0} 已加入通話", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 及 %n 個其他參與者加入了通話"], + "{user0} and {user1} joined the call" : "{user0} 與 {user1} 已加入通話", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 及 %n 個其他參與者已加入通話"], + "You and {user0} left the call" : "您與 {user0} 已離開通話", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 及 %n 個其他參與者已離開通話"], + "{user0} and {user1} left the call" : "{user0} 與 {user1} 已離開通話", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 及 %n 個其他參與者已離開通話"], + "You promoted {user0} and {user1} to moderators" : "您已將 {user0} 與 {user1} 升級為主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted you and {user0} to moderators" : "管理員已將您與 {user0} 升級為主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 將您與 {user} 升級為主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理員已將 {user0} 與 {user1} 升級為主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 已將 {user0} 與 {user1} 升級為主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "You demoted {user0} and {user1} from moderators" : "您已將 {user0} 與 {user1} 從主持人降級", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "An administrator demoted you and {user0} from moderators" : "管理員已將您與 {user0} 從主持人降級", + "{actor} demoted you and {user0} from moderators" : "{actor} 將您與 {user} 從主持人降級", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者從主持人降級"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者從主持人降級"], + "An administrator demoted {user0} and {user1} from moderators" : "管理員已將 {user0} 與 {user1} 從主持人降級", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 已將 {user0} 與 {user1} 從主持人降級", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "伺服器已更新。", + "(edited by you)" : "(您已編輯)", + "(edited by a deleted user)" : "(由已刪除的使用者編輯)", + "(edited by {moderator})" : "({moderator} 已編輯)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在嘗試加入對話,但在其他視窗或裝置中有作用中的工作階段。Nextcloud Talk 目前不支援這麼做。您想要做什麼?", + "Leave this page" : "離開此頁面", + "Join here" : "此處加入", + "Deck card has been posted to {conversation}" : "Deck 卡片已張貼至 {conversation}", + "An error occurred while posting deck card to conversation" : "將看板卡片發佈到對話時發生錯誤", + "Post to a conversation" : "發佈到一個對話", + "Post to conversation" : "發佈到對話", + "The recording failed. Please contact your administrator." : "錄音失敗。請聯絡您的管理員。", + "Location has been posted to {conversation}" : "位置已張貼至 {conversation}", + "An error occurred while posting location to conversation" : "將位置發佈到對話時發生錯誤", + "Share to a conversation" : "分享到一個對話", + "Share to conversation" : "分享到對話", + "In conversation" : "在對話中", + "Search in conversation: {conversation}" : "在對話中搜尋:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "因為暴力攻擊保護,您的請求目前已受限", + "Error while clearing conversation history" : "清除對話歷史紀錄時發生錯誤", + "Error occurred while allowing guests" : "允許訪客時發生錯誤", + "Error occurred while disallowing guests" : "取消允許訪客時發生錯誤", + "Error occurred when restricting the conversation to moderator" : "將對話限制為主持人時發生錯誤", + "Error occurred when opening the conversation to everyone" : "向所有人開放對話時發生錯誤", + "Conversation password has been saved" : "已儲存對話密碼", + "Conversation password has been removed" : "已移除對話密碼", + "Error occurred while saving conversation password" : "儲存對話密碼時發生錯誤", + "Call recording is starting." : "通話錄音開始。", + "Call recording stopped while starting." : "通話錄音在開始時停止。", + "Call recording stopped. You will be notified once the recording is available." : "通話錄音已停止。您會在錄音可用時收到通知。", + "Conversation picture set" : "對話圖片設定", + "Conversation picture deleted" : "對話圖片已刪除", + "Could not delete the conversation picture" : "無法刪除對話圖片", + "Could not remove the automatic expiration" : "無法移除自動過期", + "Could not post message: {errorMessage}" : "無法發佈訊息:{errorMessage}", + "Participant is banned successfully" : "成功封鎖了參與者", + "Error while banning the participant" : "封鎖參與者時發生錯誤", + "An error occurred while fetching the participants" : "擷取參與者時發生錯誤", + "Could not send invitation to {actorId}" : "無法傳送邀請給 {actorId}", + "Invitations sent" : "已傳送邀請", + "Error occurred when sending invitations" : "傳送邀請時發生錯誤", + "Failed to join the conversation." : "無法加入對話。", + "An error occurred while creating breakout rooms" : "建立分組討論室時發生錯誤", + "An error occurred while re-ordering the attendees" : "重新排序參與者時發生錯誤", + "An error occurred while deleting breakout rooms" : "刪除分組討論室時發生錯誤", + "An error occurred while starting breakout rooms" : "開始分組討論室時發生錯誤", + "An error occurred while stopping breakout rooms" : "停止分組討論室時發生錯誤", + "An error occurred while sending a message to the breakout rooms" : "向分組討論室傳送訊息時發生錯誤", + "An error occurred while requesting assistance" : "請求協助時發生錯誤", + "An error occurred while resetting the request for assistance" : "重設協助請求時發生錯誤", + "An error occurred while joining breakout room" : "加入分組討論室時發生錯誤", + "Failed to rename the thread" : "重新命名討論串失敗", + "Error fetching upcoming events" : "擷取即將到來的活動時發生錯誤", + "Error fetching upcoming reminders" : "擷取即將到來的提醒時發生錯誤", + "An error occurred while accepting an invitation" : "接受邀請時發生錯誤", + "An error occurred while rejecting an invitation" : "拒絕邀請時發生錯誤", + "{guest} (guest)" : "{guest}(訪客)", + "Poll draft has been saved" : "已儲存投票草稿", + "An error occurred while saving the draft" : "儲存草稿時發生錯誤", + "An error occurred while submitting your vote" : "遞交您的投票時發生錯誤", + "An error occurred while ending the poll" : "結束投票時發生錯誤", + "An error occurred while deleting the poll draft" : "刪除投票草稿時發生錯誤", + "Poll \"{name}\" was created by {user}. Click to vote" : "投票「{name}」是由 {user} 建立的。點擊投票", + "Failed to add reaction" : "新增反應失敗", + "Failed to remove reaction" : "移除反應失敗", + "The server is in maintenance mode." : "伺服器處於維護模式。", + "Federated server was updated." : "聯盟伺服器已更新。", + "Error while uploading file \"{fileName}\"" : "上傳檔案「{fileName}」時發生錯誤", + "Not enough free space to upload file \"{fileName}\"" : "沒有足夠的空間可以上傳檔案「{fileName}」", + "You are not allowed to share files" : "您不被允許分享檔案", + "Error while sharing file" : "分享檔案時發生錯誤", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk 不完全支援您使用的瀏覽器。請使用最新版本的 Mozilla Firefox、Microsoft Edge、Google Chrome、Opera 或 Apple Safari。", + "_In %n hour_::_In %n hours_" : ["%n小時內"], + "_%n minute _::_%n minutes_" : ["%n分鐘"], + "In {hours} and {minutes}" : "{hours}與{minutes}內", + "_In %n minute_::_In %n minutes_" : ["%n分鐘內"], + "Later today – {timeLocale}" : "今天稍後 – {timeLocale}", + "Set time for later today" : "設定今天稍後的時間", + "Tomorrow – {timeLocale}" : "明天 – {timeLocale}", + "Set time for tomorrow" : "設定明天的時間", + "This weekend – {timeLocale}" : "本週末 – {timeLocale}", + "Set time for this weekend" : "設定週末的時間", + "Next week – {timeLocale}" : "下週 – {timeLocale}", + "Set time for next week" : "設定下週的時間", + "Message link copied to clipboard" : "訊息連結已複製到剪貼簿", + "Conversation link copied to clipboard" : "對話連結已複製到剪貼簿", + "The link could not be copied" : "無法複製連結", + "Error while parsing a PROPFIND error" : "解析 PROFIND 錯誤時發生錯誤", + "Sending signaling message has failed" : "傳送訊號訊息失敗", + "Lost connection to signaling server. Trying to reconnect." : "遺失與訊號伺服器的連線。正在嘗試重新連線。", + "Lost connection to signaling server." : "失去對訊號伺服器的連線。", + "Connecting is taking longer than expected …" : "連線時間比預期更長……", + "Failed to connect. Retrying …" : "連線失敗。正在重試……", + "Failed to connect. The signaling server may be set up incorrectly" : "無法連線。訊號伺服器可能設定錯誤", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "需要更新設定好的訊號伺服器,使其與此版本的 Talk 相容。請聯絡您的管理員。", + "Please restart the app." : "請重新啟動應用程式。", + "Please reload the page." : "請重新載入頁面。", + "Please try to restart the app." : "請嘗試重新啟動應用程式。", + "Please try to reload the page." : "請嘗試重新載入頁面。", + "Do not disturb" : "請勿打擾", + "Away" : "離開", + "Microphone {number}" : "麥克風 {number}", + "Camera {number}" : "相機 {number}", + "Speaker {number}" : "喇叭 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎在靜音時說話,請取消靜音以讓其他人聽到您的聲音", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "無法與至少一個參與者建立連線。您的狀況可能要一台 TURN 伺服器。請要求您的管理員按照{linkstart}此文件{linkend}來設定。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "此動作花費的時間比預期的長。是否已授予(或拒絕)媒體權限?如果是,請重新啟動瀏覽器,因為音訊與視訊均無法運作", + "Access to microphone & camera is only possible with HTTPS" : "僅使用 HTTPS 時才能存取麥克風與網路攝影機", + "Please move your setup to HTTPS" : "請將您的設定狀態移至 HTTPS", + "Access to microphone & camera was denied" : "無法存取麥克風與網路攝影機", + "WebRTC is not supported in your browser" : "您的瀏覽器不支援 WebRTC", + "Please use a different browser like Firefox or Chrome" : "請使用其他瀏覽器,例如 Firefox 或 Chrome", + "Error while accessing microphone & camera" : "存取麥克風與網路攝影機時發生錯誤", + "%s Talk on your mobile devices" : "用於行動裝置的 %s Talk", + "Join conversations at any time, anywhere, on any device." : "隨時隨地在任何裝置上加入對話。", + "Android app" : "Android 應用程式", + "iOS app" : "iOS 應用程式", + "__language_name__" : "正體中文(臺灣)", + "Webhook Demo" : "Webhook 展示", + "Call summary (%s)" : "通話摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通話摘要機器人在通話後張貼概述訊息,列出所有參與者並概述任務", + "Tasks" : "工作項目", + "Notes" : "Notes", + "Reports" : "報告", + "Decisions" : "決定", + "Agenda" : "議程", + "Call summary" : "通話摘要", + "Call summary - {title}" : "通話摘要 - {title}", + "Talk conversation for event" : "活動的 Talk 對話", + "Client Push is installed, this improves the performance of desktop clients." : "已安裝客戶端推播,這會改善桌面客戶端的效能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "尚未安裝 {notify_push},在使用桌面客戶端時,這可能會導致效能問題。", + "Next meeting" : "下一場會議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "從您的日曆安排會議。必須將 Talk 對話設定為位置以在此處顯示", + "Join conversations from remote Nextcloud servers" : "加入來自遠端 Nextcloud 伺服器的對話", + "Your default media state has been saved" : "已儲存您的預設媒體狀態", + "Set reminder for later today" : "設定今天稍後的提醒", + "Set reminder for tomorrow" : "設定明天的提醒", + "Set reminder for this weekend" : "設定本週末的提醒", + "Set reminder for next week" : "設定下週的提醒", + "Generate summary" : "產生摘要", + "Open poll • You voted already" : "開放投票 • 您已經投票", + "Open poll • Click to vote" : "開放投票 • 點擊以投票", + "Poll • Ended" : "投票 • 已結束", + "Talk recording from {time} ({conversation})" : "從 {time} 開始的 Talk 錄音({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n 票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["開放投票 • %n 票"], + "Submit vote" : "遞交投票", + "Your privacy setting has been saved" : "您的隱私設定已儲存", + "Your personal setting has been saved" : "已儲存您的個人設定", + "Failed to save sounds setting" : "音訊設定儲存失敗", + "Sounds setting saved" : "音訊設定已儲存", + "Always shown if recording consent is required" : "若需取得錄影同意,此提示將一律顯示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您無法開始或加入通話。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "您在其他視窗或裝置上加入了對話。Nextcloud Talk 目前不支援這麼做,因此此工作階段被關閉了。", + "Nextcloud Talk was updated." : "Nextcloud 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 處於維護模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "啟用即時翻譯", + "I picked list style" : "我選了清單樣式", + "Hey! Are you using Talk in list style or with message bubbles?" : "嘿!您要使用清單樣式或訊息泡泡的 Talk?" +}, +"nplurals=1; plural=0;"); diff --git a/l10n/zh_TW.json b/l10n/zh_TW.json new file mode 100644 index 0000000..4a139b2 --- /dev/null +++ b/l10n/zh_TW.json @@ -0,0 +1,2260 @@ +{ "translations": { + "a conversation" : "對話", + "(Duration %s)" : "(已歷時 %s)", + "You attended a call with {user1}" : "您加入了與 {user1} 之間的通話", + "_%n guest_::_%n guests_" : ["%n 位訪客"], + "You attended a call with {user1} and {user2}" : "您加入了與 {user1} 及 {user2} 之間的通話", + "You attended a call with {user1}, {user2} and {user3}" : "您加入了與 {user1}、{user2} 及 {user3} 之間的通話", + "You attended a call with {user1}, {user2}, {user3} and {user4}" : "您加入了與 {user1}、{user2}、{user3} 及 {user4} 之間的通話", + "You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}" : "您加入了與 {user1}、{user2}、{user3}、{user4} 及 {user5} 之間的通話", + "_%n other_::_%n others_" : ["及另外 %n 位其他人"], + "{actor} invited you to {call}" : "{actor} 邀請您加入 {call}", + "You were invited to a conversation or had a call" : "您已被邀請加入一個對話通話", + "Other activities" : "其它活動", + "Talk" : "Talk", + "Guest" : "訪客", + "## Welcome to Nextcloud Talk!\nIn this conversation you will be informed about new features available in Nextcloud Talk." : "## 歡迎使用 Nextcloud Talk!\n在此對話中,您將了解關於 Nextcloud Talk 中提供的新功能。 ", + "## New in Talk %s" : "## Talk %s 的新功能", + "- Microsoft Edge and Safari can now be used to participate in audio and video calls" : "- 現在可以使用 Microsoft Edge 和 Safari 參與語音和視訊通話 ", + "- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server" : "- 一對一對話現在是永久的,不會再意外變成群組對話。同樣,當參與者之一離開對話時,該對話將不再自動刪除。僅當參與者雙方都離開時,對話才會從伺服器中刪除", + "- You can now notify all participants by posting \"@all\" into the chat" : "- 您現在可以透過在聊天室中張貼「@all」來通知所有參與者了", + "- With the \"arrow-up\" key you can repost your last message" : "- 使用「上方向鍵」,您可以重新張貼上一則訊息", + "- Talk can now have commands, send \"/help\" as a chat message to see if your administrator configured some" : "- Talk 現在支援指令。在聊天訊息中傳送「/help」以檢視管理員是否設定了任何指令", + "- With projects you can create quick links between conversations, files and other items" : "- 使用專案,您可以在對話、檔案與其他項目間建立快速連結", + "- You can now mention guests in the chat" : "- 您現在可以在聊天中提及訪客", + "- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait" : "- 對話現在有大廳功能了。這讓主持人可以加入聊天與通話以準備會議,而使用者與訪客則必須等待", + "- You can now directly reply to messages giving the other users more context what your message is about" : "- 您現在可以直接回覆訊息,為其他使用者提供更多關於您訊息內容的情境", + "- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations" : "- 搜尋對話與參與者現在也將過濾您現有的對話,從而更容易找到以前的對話", + "- You can now add custom user groups to conversations when the circles app is installed" : "- 您現在可以在安裝小圈圈應用程式時將自訂使用者群組新增至對話中", + "- Check out the new grid and call view" : "- 體驗新的網格與通話介面", + "- You can now upload and drag'n'drop files directly from your device into the chat" : "- 您現在可以上傳或直接從您的裝置拖曳檔案到聊天中", + "- Shared files are now opened directly inside the chat view with the viewer apps" : "- 分享檔案現在可以直接在聊天檢視中以檢視器應用程式開啟", + "- You can now search for chats and messages in the unified search in the top bar" : "- 您現在可以在頂部列統一搜尋中搜尋聊天與訊息", + "- Spice up your messages with emojis from the emoji picker" : "- 使用表情符號選擇器中的表情符號來豐富您的訊息", + "- You can now change your camera and microphone while being in a call" : "- 您現在可以在通話中變更您的攝影機與麥克風", + "- Give your conversations some context with a description and open it up so logged in users can find it and join themselves" : "- 為您的對話加入一些背景和描述,並可將其開放,以便於已登入使用者可以找到並自行加入", + "- See a read status and send failed messages again" : "- 檢視閱讀狀態和重新發送失敗的訊息", + "- Raise your hand in a call with the R key" : "- 使用 R 鍵在通話中進行舉手操作", + "- Join the same conversation and call from multiple devices" : "透過多重裝置加入同一個對話或語音通話", + "- Send voice messages, share your location or contact details" : "- 可傳送語音信息,分享您的位置訊息或聯絡資訊", + "- Add groups to a conversation and new group members will automatically be added as participants" : "- 將群組新增到對話中,該群組中所有成員將自動成為對話參與者", + "- A preview of your audio and video is shown before joining a call" : "- 在加入通話之前顯示您的音訊與視訊預覽", + "- You can now blur your background in the newly designed call view" : "- 您現在可以在新設計的通話檢視中模糊背景", + "- Moderators can now assign general and individual permissions to participants" : "- 主持人現在可以分配一般與個人權限給參與者", + "- You can now react to chat messages" : "- 您現在可以對聊天訊息做出回應", + "- In the sidebar you can now find an overview of the latest shared items" : "- 現在您可以在側邊列中找到最新已分享項目的概覽", + "- Use a poll to collect the opinions of others or settle on a date" : "- 使用投票來蒐集其他人的意見或決定日期", + "- Configure an expiration time for chat messages" : "- 設定聊天訊息的過期時間", + "- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started." : "- 在大型對話中,於不通知其他人的情況下開始通話。通話開始後,您可以傳送單獨的通話通知。", + "- Send chat messages without notifying the recipients in case it is not urgent" : "- 在不緊急的情況下傳送聊天訊息而不通知收件者", + "- Emojis can now be autocompleted by typing a \":\"" : "- 表情符號現在可以透過輸入 \":\" 自動完成", + "- Link various items using the new smart-picker by typing a \"/\"" : "- 透過輸入 \"/\" 使用新的智慧型挑選器連結各種項目", + "- Moderators can now create breakout rooms (requires the High-performance backend)" : "- 主持人現在可以建立分組討論室(需要高效能後端)", + "- Calls can now be recorded (requires the High-performance backend)" : "- 現在可以錄製通話了(需要高效能後端)", + "- Conversations can now have an avatar or emoji as icon" : "- 對話現在可以用大頭貼或表情符號作為圖示了", + "- Virtual backgrounds are now available in addition to the blurred background in video calls" : "- 視訊通話除了模糊背景以外,現在也可以使用虛擬背景了", + "- Reactions are now available during calls" : "- 現在可以在通話期間做出反應", + "- Typing indicators show which users are currently typing a message" : "- 打字指示器顯示目前正在打字的使用者", + "- Groups can now be mentioned in chats" : "- 現在可以在聊天中提及群組", + "- Call recordings are automatically transcribed if a transcription provider app is registered" : "- 若註冊了文字紀錄提供者應用程式,通話錄音會自動轉寫", + "- Chat messages can be translated if a translation provider app is registered" : "- 若註冊了翻譯提供者應用程式,則可以翻譯聊天訊息", + "- **Markdown** can now be used in _chat_ messages" : "- 現在可以在 _聊天_ 訊息中使用 **Markdown** 了", + "- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/" : "- Webhook 現在可用於實作機器人。要取得更多資訊,請參閱文件 https://nextcloud-talk.readthedocs.io/en/latest/bot-list/", + "- Set a reminder on a chat message to be notified later again" : "- 在聊天訊息上設定提醒,如此稍後可收到通知", + "- Use the **Note to self** conversation to take notes and share information between your devices" : "- 使用**給自己的筆記 **對話來記筆記並在裝置間分享資訊", + "- Captions allow to send a message with a file at the same time" : "- 字幕允許同時傳送包含檔案的訊息", + "- Video of the speaker is now visible while sharing the screen and call reactions are animated" : "- 現在在分享螢幕時可以看到演講者的視訊,通話反應以動畫形式顯示", + "- Messages can now be edited by logged-in authors and moderators for 6 hours" : "- 登入的作者與主持人可以在6小時內編輯訊息", + "- Unsent message drafts are now saved in your browser" : "- 未傳送的訊息草稿現在會儲存在您的瀏覽器中", + "- Text chatting can now be done in a federated way with other Talk servers" : "- 文字聊天現在可以透過聯盟方式與其他 Talk 伺服器通訊", + "- Moderators can now ban accounts and guests to prevent them from rejoining a conversation" : "- 主持人現在可以封鎖帳號與訪客,避免他們重新加入對話", + "- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations" : "- 來自連結的日曆事件以及離開辦公室取代的即將到來的通話現在會顯示在對話中", + "- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)" : "- 通話現在可以透過聯盟方式與其他 Talk 伺服器通訊(需要高效能後端)", + "- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s" : "- 引入適用於 Windows、macOS 與 Linux 的 Nextcloud Talk 桌面客戶端:%s", + "- Summarize call recordings and unread messages in chats with the Nextcloud Assistant" : "- 使用 Nextcloud 小幫手總結通話錄音與聊天中的未讀訊息", + "- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists" : "- 透過電子郵件地址、匯入參與者名單、投票草稿與下載通話參與者名單,改善會議中可辨識邀請來賓的功能", + "- Archive conversations to stay focused" : "- 封存對話以保持專注", + "- Schedule a meeting into your calendar from within a conversation" : "- 在對話中安排會議到您的日曆", + "- Search for messages of the current conversation directly in the right sidebar" : "- 直接在右側邊欄搜尋目前對話的訊息", + "- See more conversations on a first glance with the new compact list (enable in the Talk settings)" : "- 使用新的精簡清單(在 Talk 設定中啟用),第一眼就能看到更多對話內容", + "- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start" : "- 會議對話現在會同步行事曆中的標題與描述,並會隱藏搜尋篩選條件,直到接近開始時為止", + "- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications" : "- 在通知設定中將對話標記為敏感,從對話清單與通知中隱藏訊息內容", + "- To receive push notifications during \"Do not disturb\", mark conversations as important" : "- 若要在「請勿打擾」期間接收推送通知,請將對話標記為重要對話", + "- Add other participants to a one-to-one call to create a new group call on the fly" : "- 在一對一通話中加入其他參與者,以立即建立新的群組通話", + "- Use threads to keep your chat and discussions organized" : "- 使用討論串來讓您的聊天與討論井然有序", + "- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)" : "- 通話期間現已提供即時轉錄功能(需安裝即時轉錄 ExApp 及高效能後端系統)", + "- Moderators can now pin messages so they are kept at the top" : "- 版主現在可以釘選訊息,使其保持在頂端顯示", + "- Schedule a message to send it at a later time" : "- 排程訊息以便稍後發送", + "_All %n participant_::_All %n participants_" : ["全部 %n 個參與者"], + "Talk updates ✅" : "Talk 更新 ✅", + "Reaction deleted by author" : "回應被作者刪除", + "{actor} created the conversation" : "{actor} 建立了對話", + "You created the conversation" : "您建立了對話", + "System created the conversation" : "系統建立了對話", + "An administrator created the conversation" : "管理員建立了對話", + "{actor} renamed the conversation from \"%1$s\" to \"%2$s\"" : "{actor} 將對話從「%1$s」重新命名為「%2$s」", + "You renamed the conversation from \"%1$s\" to \"%2$s\"" : "您將對話從「%1$s」重新命名為「%2$s」", + "An administrator renamed the conversation from \"%1$s\" to \"%2$s\"" : "管理員將對話從「%1$s」重新命名為「%2$s」", + "{actor} set the description" : "{actor} 設定了描述", + "You set the description" : "您設定了描述", + "An administrator set the description" : "管理員設定了描述", + "{actor} removed the description" : "{actor} 移除了描述", + "You removed the description" : "您移除了描述", + "An administrator removed the description" : "管理員移除了描述", + "You started a silent call" : "您發起了無聲通話", + "Outgoing silent call" : "無聲去電", + "{actor} started a silent call" : "{actor} 發起了無聲通話", + "Incoming silent call" : "無聲來電", + "You started a call" : "您發起了通話", + "Outgoing call" : "去電", + "{actor} started a call" : "{actor} 發起了通話", + "Incoming call" : "來電", + "{actor} joined the call" : "{actor} 加入了通話", + "You joined the call" : "您加入了通話", + "{actor} left the call" : "{actor} 離開了通話", + "You left the call" : "您離開了通話", + "{actor} unlocked the conversation" : "{actor} 解鎖了對話", + "You unlocked the conversation" : "您解鎖了對話", + "An administrator unlocked the conversation" : "管理員解鎖了對話", + "{actor} locked the conversation" : "{actor} 鎖定了對話", + "You locked the conversation" : "您鎖定了對話", + "An administrator locked the conversation" : "管理員鎖定了對話", + "{actor} limited the conversation to the current participants" : "{actor} 將對話限制於目前的參與者", + "You limited the conversation to the current participants" : "您將對話限制於目前的參與者", + "An administrator limited the conversation to the current participants" : "管理員將對話限制於目前的參與者", + "{actor} opened the conversation to registered users" : "{actor} 向已註冊使用者開放了對話", + "You opened the conversation to registered users" : "您向已註冊使用者開放了對話", + "An administrator opened the conversation to registered users" : "管理員向已註冊使用者開放了對話", + "{actor} opened the conversation to registered users and users created with the Guests app" : "{actor} 向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "You opened the conversation to registered users and users created with the Guests app" : "您向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "An administrator opened the conversation to registered users and users created with the Guests app" : "管理員向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "The conversation is now open to everyone" : "對話現在對所有人開放", + "{actor} opened the conversation to everyone" : "{actor} 對所有人開放了對話", + "You opened the conversation to everyone" : "您對所有人開放了對話", + "{actor} restricted the conversation to moderators" : "{actor} 將對話限制為主持人", + "You restricted the conversation to moderators" : "您將對話限制為主持人", + "{actor} started breakout rooms" : "{actor} 開始了分組討論室", + "You started breakout rooms" : "您開始了分組討論室", + "{actor} stopped breakout rooms" : "{actor} 停止了分組討論室", + "You stopped breakout rooms" : "您停止了分組討論室", + "{actor} allowed guests" : "{actor} 已允許訪客加入", + "You allowed guests" : "您已允許訪客加入", + "An administrator allowed guests" : "管理員已允許訪客加入", + "{actor} disallowed guests" : "{actor} 已停用訪客加入", + "You disallowed guests" : "您已停用訪客加入", + "An administrator disallowed guests" : "管理員已停用訪客加入", + "{actor} set a password" : "{actor} 已設定密碼", + "You set a password" : "您已設定密碼", + "An administrator set a password" : "管理員已設定密碼", + "{actor} removed the password" : "{actor} 移除了密碼", + "You removed the password" : "您移除了密碼", + "An administrator removed the password" : "管理員移除了密碼", + "{actor} added {user}" : "{actor} 新增了 {user}", + "You joined the conversation" : "您加入了對話", + "{actor} joined the conversation" : "{actor} 加入了對話", + "You added {user}" : "您新增了 {user}", + "{actor} added you" : "{actor} 新增了您", + "An administrator added you" : "管理員新增了您", + "An administrator added {user}" : "管理員新增了 {user}", + "You left the conversation" : "您離開了對話", + "{actor} left the conversation" : "{actor} 離開了對話", + "{actor} removed {user}" : "{actor} 移除了 {user}", + "You removed {user}" : "您移除了 {user}", + "{actor} removed you" : "{actor} 移除了您", + "An administrator removed you" : "管理員移除了您", + "An administrator removed {user}" : "管理員移除了 {user}", + "{actor} invited {federated_user}" : "{actor} 邀請了 {federated_user}", + "You invited {federated_user}" : "您邀請了 {federated_user}", + "You accepted the invitation" : "您接受了邀請", + "{actor} invited you" : "{actor} 邀請了您", + "An administrator invited you" : "管理員邀請了您", + "An administrator invited {federated_user}" : "管理員邀請了 {federated_user}", + "{federated_user} accepted the invitation" : "{federated_user} 接受了邀請", + "{actor} removed {federated_user}" : "{actor} 移除了 {federated_user}", + "You removed {federated_user}" : "您移除了 {federated_user}", + "You declined the invitation" : "您拒絕了邀請", + "An administrator removed {federated_user}" : "管理員移除了 {federated_user}", + "{federated_user} declined the invitation" : "{federated_user} 拒絕了邀請", + "{actor} added group {group}" : "{actor} 新增了群組 {group}", + "You added group {group}" : "您新增了群組 {group}", + "An administrator added group {group}" : "管理員新增了群組 {group}", + "{actor} removed group {group}" : "{actor} 移除了群組 {group}", + "You removed group {group}" : "您移除了群組 {group}", + "An administrator removed group {group}" : "管理員移除了群組 {group}", + "{actor} added team {circle}" : "{actor} 新增了團隊 {circle}", + "You added team {circle}" : "您新增了團隊 {circle}", + "An administrator added team {circle}" : "管理員新增了團隊 {circle}", + "{actor} removed team {circle}" : "{actor} 移除了團隊 {circle}", + "You removed team {circle}" : "您移除了團隊 {circle}", + "An administrator removed team {circle}" : "管理員移除了團隊 {circle}", + "{actor} added {phone}" : "{actor} 新增了 {phone}", + "You added {phone}" : "您新增了 {phone}", + "An administrator added {phone}" : "管理員新增了 {phone}", + "{actor} removed {phone}" : "{actor} 移除了 {phone}", + "You removed {phone}" : "您移除了 {phone}", + "An administrator removed {phone}" : "管理員移除了 {phone}", + "{actor} promoted {user} to moderator" : "{actor} 將 {user} 升級為主持人", + "You promoted {user} to moderator" : "您將 {user} 升級為主持人", + "{actor} promoted you to moderator" : "{actor} 將您升級為主持人", + "An administrator promoted you to moderator" : "管理員將您升級為主持人", + "An administrator promoted {user} to moderator" : "管理員將 {user} 升級為主持人", + "{actor} demoted {user} from moderator" : "{actor} 將 {user} 從主持人降級", + "You demoted {user} from moderator" : "您將 {user} 從主持人降級", + "{actor} demoted you from moderator" : "{actor} 將您從主持人降級", + "An administrator demoted you from moderator" : "管理員將您從主持人降級", + "An administrator demoted {user} from moderator" : "管理員將 {user} 從主持人降級", + "{actor} shared a file which is no longer available" : "{actor} 分享了一個不再可用的檔案", + "You shared a file which is no longer available" : "您分享了一個不再可用的檔案", + "File shares are currently not supported in federated conversations" : "在聯盟式對話中目前不支援分享檔案", + "The shared location is malformed" : "分享位置格式錯誤", + "{actor} set up Matterbridge to synchronize this conversation with other chats" : "{actor} 設定了 Matterbridge 以將此對話與其他聊天同步", + "You set up Matterbridge to synchronize this conversation with other chats" : "您設定了 Matterbridge 以將此對話與其他聊天同步", + "{actor} created thread {title}" : "{actor} 建立了討論串 {title}", + "You created thread {title}" : "您建立了討論串 {title}", + "{actor} renamed thread {title}" : "{actor} 重新命名了討論串 {title}", + "You renamed thread {title}" : "您重新命名了討論串 {title}", + "{actor} updated the Matterbridge configuration" : "{actor} 更新了 Matterbridge 組態", + "You updated the Matterbridge configuration" : "您更新了 Matterbridge 組態", + "{actor} removed the Matterbridge configuration" : "{actor} 刪除了 Matterbridge 組態", + "You removed the Matterbridge configuration" : "您刪除了 Matterbridge 組態", + "{actor} started Matterbridge" : "{actor} 啟動了 Matterbridge", + "You started Matterbridge" : "您啟動了 Matterbridge", + "{actor} stopped Matterbridge" : "{actor} 停止了 Matterbridge", + "You stopped Matterbridge" : "您停止了 Matterbridge", + "{actor} deleted a message" : "{actor} 刪除了訊息", + "You deleted a message" : "您刪除了訊息", + "{actor} edited a message" : "{actor} 編輯了訊息", + "You edited a message" : "您編輯了訊息", + "{actor} pinned a message" : "{actor} 釘選了訊息", + "You pinned a message" : "您釘選了訊息", + "{actor} unpinned a message" : "{actor} 取消釘選了訊息", + "Message was automatically unpinned" : "訊息已自動取消釘選", + "You unpinned a message" : "您取消釘選了訊息", + "{actor} deleted a reaction" : "{actor} 刪除了反應", + "You deleted a reaction" : "您刪除了反應", + "_You set the message expiration to %n week_::_You set the message expiration to %n weeks_" : ["您將訊息過期時間設定為%n週"], + "_You set the message expiration to %n day_::_You set the message expiration to %n days_" : ["您將訊息過期時間設定為%n天"], + "_You set the message expiration to %n hour_::_You set the message expiration to %n hours_" : ["您將訊息過期時間設定為%n小時"], + "_You set the message expiration to %n minute_::_You set the message expiration to %n minutes_" : ["您將訊息過期時間設定為%n分鐘"], + "_{actor} set the message expiration to %n week_::_{actor} set the message expiration to %n weeks_" : ["{actor} 將訊息過期時間設定為%n分鐘"], + "_{actor} set the message expiration to %n day_::_{actor} set the message expiration to %n days_" : ["{actor} 將訊息過期時間設定為%n天"], + "_{actor} set the message expiration to %n hour_::_{actor} set the message expiration to %n hours_" : ["{actor} 將訊息過期時間設定為%n小時"], + "_{actor} set the message expiration to %n minute_::_{actor} set the message expiration to %n minutes_" : ["{actor} 將訊息過期時間設定為%n分鐘"], + "{actor} disabled message expiration" : "{actor} 停用了訊息過期時間", + "You disabled message expiration" : "您停用了訊息過期時間", + "{actor} cleared the history of the conversation" : "{actor} 清除了對話的歷史紀錄", + "You cleared the history of the conversation" : "您清除了對話的歷史紀錄", + "{actor} set the conversation picture" : "{actor} 設定了對話圖片", + "You set the conversation picture" : "您設定了對話圖片", + "{actor} removed the conversation picture" : "{actor} 移除了對話圖片", + "You removed the conversation picture" : "您移除了對話圖片", + "{actor} ended the poll {poll}" : "{actor} 結束了投票 {poll}", + "You ended the poll {poll}" : "您結束了投票 {poll}", + "{actor} started the video recording" : "{actor} 開始錄影", + "You started the video recording" : "您開始錄影", + "{actor} stopped the video recording" : "{actor} 停止錄影", + "You stopped the video recording" : "您停止錄影", + "{actor} started the audio recording" : "{actor} 開始錄音", + "You started the audio recording" : "您開始錄音", + "{actor} stopped the audio recording" : "{actor} 停止錄音", + "You stopped the audio recording" : "您停止錄音", + "The recording failed" : "錄音失敗", + "Someone voted on the poll {poll}" : "某人在投票 {poll} 中投票了", + "Message deleted by author" : "訊息已被作者刪除", + "Message deleted by {actor}" : "訊息已被 {actor} 刪除", + "Message deleted by you" : "訊息已被您刪除", + "Deleted user" : "已刪除的使用者", + "Unknown number" : "未知號碼", + "Administration" : "管理", + "System" : "系統", + "%s (guest)" : "%s(訪客)", + "Missed call" : "未接通話", + "Unanswered call" : "未接通話", + "Call ended (Duration {duration})" : "通話結束(持續時間 {duration})", + "Call was ended, as it reached the maximum call duration (Duration {duration})" : "因為通話已達到最長通話時間(持續時間{duration})而結束", + "{actor} ended the call (Duration {duration})" : "{actor} 已結束通話(持續時間{duration})", + "_Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})_::_Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})_" : ["因為與 %n 個訪客的通話已達到最長通話時間(持續時間 {duration})而結束"], + "_Call with %n guest ended (Duration {duration})_::_Call with %n guests ended (Duration {duration})_" : ["與 %n 位訪客的通話結束(持續時間 {duration})"], + "_{actor} ended the call with %n guest (Duration {duration})_::_{actor} ended the call with %n guests (Duration {duration})_" : ["{actor} 結束了與 %n 位訪客的通話(持續時間 {duration})"], + "Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1} 的通話已達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1} ended (Duration {duration})" : "與 {user1} 的通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} (Duration {duration})" : "{actor} 結束了與 {user1} 的通話(持續時間 {duration})", + "Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1} 及 {user2} 的通話已達到最長通話時間(持續時間{duration})而結束", + "Call with {user1} and {user2} ended (Duration {duration})" : "與 {user1} 及 {user2} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1} and {user2} (Duration {duration})" : "{actor} 結束了與 {user1} 及 {user2} 的通話(持續時間 {duration})", + "Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})" : "因為與 {user1}、{user2} 與 {user3} 的通話已達到最長通話時間(持續時間:{duration})而結束", + "Call with {user1}, {user2} and {user3} ended (Duration {duration})" : "與 {user1}、{user2} 及 {user3} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2} 及 {user3} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})" : "與 {user1}、{user2}、{user3} 及 {user4} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3} 及 {user4} 的通話(持續時間 {duration})", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話因達到最長通話時間(持續時間 {duration})而結束", + "Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})" : "與 {user1}、{user2}、{user3}、{user4} 及 {user5} 通話結束(持續時間 {duration})", + "{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})" : "{actor} 結束了與 {user1}、{user2}、{user3}、{user4} 及 {user5} 的通話(持續時間 {duration})", + "Message of {user} in {conversation}" : "{conversation} 中來自 {user} 的訊息", + "Message of {user}" : "{user} 的訊息", + "Message of a deleted user in {conversation}" : "{conversation} 中已刪除使用者的訊息", + "Talk conversations" : "Talk 交談", + "Talk to %s" : "與 %s 交談", + "An error occurred. Please contact your administrator." : "發生錯誤,請聯絡管理員。", + "App disabled" : "應用程式已停用", + "Conversation subfolders are disabled" : "已停用對話子資料夾", + "Storage quota exceeded" : "超過儲存空間容量限制", + "Could not prepare conversation folder" : "無法準備對話資料夾", + "File not found" : "找不到檔案", + "Path must point to a file" : "路徑必須指向檔案", + "File is not inside the conversation draft folder for this room" : "檔案不在此聊天室的草稿資料夾中", + "File is not shared, or shared but not with the user" : "檔案未被分享,或未與使用者分享", + "No account available to delete." : "沒有可刪除的帳號。", + "Poll" : "投票", + "Password needs to be set" : "需要設定密碼", + "Uploading the file failed" : "上傳檔案失敗", + "No image file provided" : "未提供圖片檔案", + "File is too big" : "檔案太大", + "Invalid file provided" : "提供的檔案無效", + "Invalid image" : "圖片無效", + "Unknown filetype" : "未知的檔案類型", + "Talk mentions" : "Talk 提及", + "More conversations" : "更多對話", + "Say hi to your friends and colleagues!" : "跟您的朋友與同事打招呼!", + "No unread mentions" : "沒有未讀的提及", + "Call in progress" : "通話進行中", + "You were mentioned" : "您被提及", + "Write to conversation" : "寫入至對話", + "Writes event information into a conversation of your choice" : "將事件資訊寫入至您選擇的對話中", + "Missing email field in header line" : "標題行中缺少電子郵件欄位", + "Following lines are invalid: %s" : "以下行無效:%s", + "%1$s invited you to conversation \"%2$s\"." : "%1$s 邀請您加入對話「%2$s」。", + "You were invited to conversation \"%s\"." : "您被邀請加入對話「%s」。", + "Conversation invitation" : "對話邀請", + "Scheduled time" : "排定時間", + "Description" : "描述", + "You can also dial-in via phone with the following details" : "您也可以使用以下資訊,透過電話撥號加入", + "Dial-in information" : "撥號加入資訊", + "Meeting ID" : "會議 ID", + "Your PIN" : "您的 PIN", + "Click the button below to join the lobby now." : "點選下方按鈕以立刻加入大廳。", + "Click the link below to join the lobby now." : "點選下方連結以立刻加入大廳。", + "Join lobby for \"%s\"" : "加入「%s」的大廳", + "Click the button below to join the conversation now." : "點選下方按鈕以立刻加入對話。", + "Click the link below to join the conversation now." : "點選下方連結以立刻加入對話。", + "Join \"%s\"" : "加入「%s」", + "Meeting" : "會議", + "Password request: %s" : "密碼請求:%s", + "Private conversation" : "私人對話", + "Deleted user (%s)" : "已刪除使用者 (%s)", + "Failed to upload call recording" : "上傳通話錄音失敗", + "The recording server failed to upload recording of call {call}. Please reach out to the administration." : "錄音伺服器上傳通話 {call} 的錄音失敗。請聯絡管理員。", + "Share to chat" : "分享至聊天", + "Dismiss notification" : "忽略通知", + "Call recording now available" : "通話錄音現已可用", + "The recording for the call in {call} was uploaded to {file}." : "{call} 中的通話錄音已上傳到 {file}。", + "Transcript now available" : "文字紀錄現已可用", + "The transcript for the call in {call} was uploaded to {file}." : "{call} 通話的文字紀錄已上傳至 {file}。", + "Failed to transcript call recording" : "通話錄音文字轉錄失敗", + "The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立文字紀錄。請聯絡管理員。", + "Call summary now available" : "通話摘要現已可用", + "The summary for the call in {call} was uploaded to {file}." : "{call} 通話的摘要已上傳至 {file}。", + "Failed to summarize call recording" : "通話錄音文字摘要失敗", + "The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration." : "伺服器無法為 {call} 中的通話在 {file} 處建立摘要。請聯絡管理員。", + "{user1} invited you to join {roomName} on {remoteServer}" : "{user1} 邀請您加入在 {remoteServer} 上的 {roomName}", + "Accept" : "接受", + "Decline" : "回絕", + "{user1} invited you to a federated conversation" : "{user1} 邀請您加入聯合對話", + "Someone reacted" : "有人回應了", + "New message" : "新郵件", + "Reminder" : "提醒", + "Someone mentioned you" : "有人提及您", + "Notification" : "通知", + "Someone reacted in a private conversation" : "有人在私人對話中反應了", + "You received a message in a private conversation" : "您在私人對話中收到訊息", + "Reminder in a private conversation" : "私人對話中的提醒", + "Someone mentioned you in a private conversation" : "有人在私人對話中提及您", + "Notification in a private conversation" : "私人對話中的通知", + "Reminder: You in {call}" : "提醒:您在 {call} 中", + "Reminder: {user} in {call}" : "提醒:{user} 在 {call} 中", + "Reminder: Deleted user in {call}" : "提醒:已刪除的使用者在 {call} 中", + "Reminder: {guest} (guest) in {call}" : "提醒:{guest}(訪客)在 {call} 中", + "Reminder: Guest in {call}" : "提醒:訪客在 {call} 中", + "{user} reacted with {reaction}" : "{user} 使用 {reaction} 反應", + "{user} reacted with {reaction} in {call}" : "{user} 在 {call} 中使用 {reaction} 反應", + "Deleted user reacted with {reaction} in {call}" : "已刪除的使用者在 {call} 中使用 {reaction} 反應", + "{guest} (guest) reacted with {reaction} in {call}" : "{guest}(訪客)在 {call} 中使用 {reaction} 反應", + "Guest reacted with {reaction} in {call}" : "訪客在 {call} 中使用 {reaction} 反應", + "{user} in {call}" : "{call} 中的 {user}", + "Deleted user in {call}" : "{call} 中已刪除的使用者", + "{guest} (guest) in {call}" : "{call} 中的 {guest}(訪客)", + "Guest in {call}" : "在 {call} 中的訪客", + "{user} sent you a private message" : "{user} 向您傳送了私人訊息", + "{user} sent a message in conversation {call}" : "{user} 在對話 {call} 中傳送了訊息", + "A deleted user sent a message in conversation {call}" : "刪除的使用者在對話 {call} 中傳送了訊息", + "{guest} (guest) sent a message in conversation {call}" : "{guest}(訪客)在對話 {call} 中傳送了訊息", + "A guest sent a message in conversation {call}" : "訪客在對話 {call} 中傳送了訊息", + "{user} replied to your private message" : "{user} 回覆了您的私人訊息", + "{user} replied to your message in conversation {call}" : "{user} 在對話 {call} 中回覆了您的訊息", + "A deleted user replied to your message in conversation {call}" : "刪除的使用者在對話 {call} 中回覆了您的訊息", + "{guest} (guest) replied to your message in conversation {call}" : "{guest}(訪客)在對話 {call} 中回覆了您的訊息", + "A guest replied to your message in conversation {call}" : "訪客在對話 {call} 中回覆了您的訊息", + "Reminder: You in private conversation {call}" : "提醒:您在私人對話 {call} 中", + "Reminder: A deleted user in private conversation {call}" : "提醒:已刪除的使用者在私人對話 {call} 中", + "Reminder: {user} in private conversation" : "提醒:{user} 在私人對話 {call} 中", + "Reminder: You in conversation {call}" : "提醒:您在對話 {call} 中", + "Reminder: {user} in conversation {call}" : "提醒:{user} 在對話 {call} 中", + "Reminder: A deleted user in conversation {call}" : "提醒:已刪除的使用者在對話 {call} 中", + "Reminder: {guest} (guest) in conversation {call}" : "提醒:{guest}(訪客)在對話 {call} 中", + "Reminder: A guest in conversation {call}" : "提醒:訪客在對話 {call} 中", + "{user} reacted with {reaction} to your private message" : "{user} 對您的私人訊息做出了 {reaction} 反應", + "{user} reacted with {reaction} to your message in conversation {call}" : "{user} 在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "A deleted user reacted with {reaction} to your message in conversation {call}" : "已刪除的使用者在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "{guest} (guest) reacted with {reaction} to your message in conversation {call}" : "{guest}(訪客)在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "A guest reacted with {reaction} to your message in conversation {call}" : "訪客在對話 {call} 中對您的私人訊息做出了 {reaction} 反應", + "{user} mentioned you in a private conversation" : "{user} 在私人對話中提及您", + "{user} mentioned group {group} in conversation {call}" : "{user} 在對話 {call} 中提及群組 {group}", + "{user} mentioned team {team} in conversation {call}" : "{user} 在對話 {call} 中提及團隊 {team}", + "{user} mentioned everyone in conversation {call}" : "{user} 在對話 {call} 中提及所有人", + "{user} mentioned you in conversation {call}" : "{user} 在對話 {call} 中提及您", + "A deleted user mentioned group {group} in conversation {call}" : "一位已刪除的使用者在對話 {call} 中提及群組 {group}", + "A deleted user mentioned team {team} in conversation {call}" : "已刪除的使用者在對話 {call} 中提及團隊 {team}", + "A deleted user mentioned everyone in conversation {call}" : "已刪除的使用者在對話 {call} 中提及所有人", + "A deleted user mentioned you in conversation {call}" : "已刪除的使用者在對話 {call} 中提及您", + "{guest} (guest) mentioned group {group} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及群組 {group}", + "{guest} (guest) mentioned team {team} in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及團隊 {team}", + "{guest} (guest) mentioned everyone in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及所有人", + "{guest} (guest) mentioned you in conversation {call}" : "{guest}(訪客)在對話 {call} 中提及您", + "A guest mentioned group {group} in conversation {call}" : "一位訪客在對話 {call} 中提及群組 {group}", + "A guest mentioned team {team} in conversation {call}" : "訪客在對話 {call} 中提及團隊 {team}", + "A guest mentioned everyone in conversation {call}" : "一位訪客在對話 {call} 中提及所有人", + "A guest mentioned you in conversation {call}" : "訪客在對話 {call} 中提及您", + "View message" : "檢視訊息", + "Dismiss reminder" : "取消提醒", + "View chat" : "檢視聊天", + "{user} invited you to a group conversation: {call}" : "{user} 邀請您加入群組對話:{call}", + "Join call" : "加入通話", + "Answer call" : "接聽通話", + "{user} would like to talk with you" : "{user} 想要與您交談", + "Call back" : "回電", + "You missed a call from {user}" : "您錯過了 {user} 的來電", + "Accept call" : "接聽通話", + "Incoming phone call from {call}" : "{call} 的來電", + "You missed a phone call from {call}" : "您錯過了 {call} 的來電", + "A group call has started in {call}" : "{call} 中的群組通話已經開始", + "You missed a group call in {call}" : "您錯過了 {call} 中的群組通話", + "{email} is requesting the password to access {file}" : "{email} 請求密碼以存取 {file}", + "{email} tried to request the password to access {file}" : "{email} 嘗試請求密碼以存取 {file}", + "Someone is requesting the password to access {file}" : "有人請求密碼以存取 {file}", + "Someone tried to request the password to access {file}" : "有人嘗試請求密碼以存取 {file}", + "Open settings" : "開啟設定", + "Hosted signaling server added" : "已新增架設好的訊號伺服器", + "The hosted signaling server is now configured and will be used." : "已設定好架設的訊號伺服器並將被使用。", + "Hosted signaling server removed" : "已移除架設好的訊號伺服器", + "The hosted signaling server was removed and will not be used anymore." : "架設的訊號伺服器已被移除且無法再使用。", + "Hosted signaling server changed" : "已變更架設好的訊號伺服器", + "The hosted signaling server account has changed the status from \"{oldstatus}\" to \"{newstatus}\"." : "架設的訊號伺服器帳號已將狀態從「{oldstatus}」變更為「{newstatus}」。", + "pending" : "擱置中", + "active" : "作用中", + "expired" : "已過期", + "blocked" : "已封鎖", + "error" : "錯誤", + "The certificate of {host} expires in {days} days" : "{host} 的憑證將在 {days} 天後過期", + "The certificate of {host} expired" : "{host} 的憑證已過期", + "Contact via Talk" : "透過 Talk 連結", + "Open Talk" : "開啟 Talk", + "Default" : "預設", + "Send messages, create threads, and start voice and video calls." : "傳送訊息、建立討論串、開始音訊與視訊通話。", + "Presentation" : "簡報", + "Voice room" : "語音聊天室", + "Directly join the call, ideal for catch-ups or spontaneous meetings." : "直接加入通話,非常適合閒聊或臨時開會。", + "Webinar" : "網路研討會", + "Conversations" : "對話", + "Messages in current conversation" : "目前對話中的訊息", + "{user}" : "{user}", + "Messages" : "訊息", + "{user} in {conversation}" : "{conversation} 中的 {user}", + "Messages in other conversations" : "其他對話中的訊息", + "One-to-one rooms always need to show the other users avatar" : "一對一的聊天室一律必須顯示其他使用者的大頭照", + "Invalid emoji character" : "無效的表情符號字元", + "Invalid background color" : "無效背景色彩", + "Avatar image is not square" : "大頭照圖片不是正方形", + "Room {number}" : "聊天室 {number}", + "Other" : "其他", + "Failed to request trial because the trial server is unreachable. Please try again later." : "因為無法連線至試用伺服器,無法請求試用。請稍後再試。", + "There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it's URL." : "此站台的身份驗證有問題。可能無法從外部連結以確認其 URL。", + "Something unexpected happened." : "出現了一些意外的狀況。", + "The URL is invalid." : "URL 無效。", + "An HTTPS URL is required." : "必須使用 HTTPS URL。", + "The email address is invalid." : "電子郵件無效。", + "The language is invalid." : "語言無效。", + "The country is invalid." : "國家無效。", + "There is a problem with the request of the trial. Please check your logs for further information." : "試用請求有問題。請檢查您的紀錄檔以取得進一步的資訊。", + "Too many requests are send from your servers address. Please try again later." : "您的伺服器地址傳送了太多請求。請稍後再試。", + "There is already a trial registered for this Nextcloud instance." : "此 Nextcloud 站台已有一個試用註冊。", + "Something unexpected happened. Please try again later." : "出現了一些意外的狀況。請稍後再試。", + "Failed to request trial because the trial server behaved wrongly. Please try again later." : "因為試用伺服器行為不正確,因此無法請求試用。請稍後再試。", + "Trial requested but failed to get account information. Please check back later." : "已請求試用,但無法取得帳號資訊。請稍後再試。", + "There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it's URL." : "此請求的身份驗證有問題。可能無法從外部連結以確認其 URL。", + "Failed to fetch account information because the trial server behaved wrongly. Please check back later." : "因為試用伺服器行為不正確,因此無法擷取帳號資訊。請稍後再試。", + "There is a problem with fetching the account information. Please check your logs for further information." : "擷取帳號資訊時發生問題。請檢查您的紀錄檔以取得更多資訊。", + "There is no such account registered." : "沒有此已註冊的帳號。", + "Failed to fetch account information because the trial server is unreachable. Please check back later." : "因為無法連結試用伺服器,因此無法擷取帳號資訊。請稍後再試。", + "Deleting the hosted signaling server account failed. Please check back later." : "刪除架設的訊號伺服器帳號失敗。請稍後再試。", + "Failed to delete the account because the trial server behaved wrongly. Please check back later." : "因為試用伺服器行為不正確,因此無法刪除帳號。請稍後再試。", + "There is a problem with deleting the account. Please check your logs for further information." : "刪除帳號時發生問題。請檢查您的紀錄檔以取得更多資訊。", + "Too many requests are sent from your servers address. Please try again later." : "您的伺服器地址傳送了太多請求。請稍後再試。", + "Failed to delete the account because the trial server is unreachable. Please check back later." : "因為無法連結試用伺服器,因此無法刪除帳號。請稍後再試。", + "Note to self" : "給自己的筆記", + "A place for your private notes, thoughts and ideas" : "一個用於儲存您的私人筆記、思考與想法的地方", + "Transcript is AI generated and may contain mistakes" : "轉錄為人工智慧產生,可能有錯", + "Summary is AI generated and may contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Let's get started!" : "我們開始吧!", + "**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem.\n\n#### Key Features of Nextcloud Talk:\n\n* Chat and messaging in private and group chats\n* Voice and video calls\n* File sharing and integration with other Nextcloud apps\n* Customizable conversation settings, moderation and privacy controls\n* Web, desktop and mobile (iOS and Android)\n* Private & secure communication\n\n Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)." : "**Nextcloud Talk** 是安全可自架的通訊平台,並與 Nextcloud 生態系無縫整合。\n\n#### Nextcloud Talk 的重要功能:\n\n* 在私人與群組聊天中傳送訊息\n* 音訊與視訊通話\n* 檔案分享以及其他 Nextcloud 應用程式的整合\n* 可自訂的對話設定、審核與隱私控制\n* 網頁、桌面與行動裝置(iOS 與 Android)\n* 私密且安全的通訊\n\n 在[使用者文件](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html)中了解更多資訊。", + "# Welcome to Nextcloud Talk\n\nNextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more." : "# 歡迎使用 Nextcloud Talk\n\nNextcloud Talk 是與 Nextcloud 整合的私密且功能強大的訊息應用程式。以私人或群組對話方式聊天、透過語音與視訊通話進行協作、舉辦網路研討會與活動、自訂您的對話等。", + "## 🎨 Format texts to create rich messages\n\nIn Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text.\n\nNeed to fix a typo or change formatting? Edit your message by clicking \"Edit message\" in the message menu." : "## 🎨 格式化文字以建立多采多姿的訊息\n\n在 Nextcloud Talk 中,您可以使用 Markdown 語法來格式化您的訊息。例如,套用**粗體**或*義式斜體*格式,或「將文字突顯為程式碼」。您甚至可以建立表格,並在文字中加入標題。\n\n需要修正錯字或變更格式嗎?按一下訊息功能表中的「編輯訊息」即可編輯您的訊息。", + "## 🔗 Add attachments and links\n\nAttach files from your Nextcloud Hub using the \"+\" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app." : "## 🔗 新增附件與連結\n\n使用「+」按鈕從 Nextcloud Hub 附加檔案。從檔案與各種 Nextcloud 應用程式分享項目。有些應用程式甚至支援互動小工具,例如 Text 應用程式。", + "## 💭 Let the conversations flow: mention users, react to messages and more\n\nYou can mention everybody in the conversation by using %s or mention specific participants by typing \"@\" and picking their name from the list." : "## 💭 讓對話流暢:提及使用者、回應訊息等\n\n您可以使用 %s 來提及對話中的每個人,或是輸入「@」並從清單中選出特定參與者的名字來提及他們。", + "You can reply to messages, forward them to other chats and people, or copy message content." : "您可以回覆訊息、將訊息轉寄給其他聊天室與夥伴,或複製訊息內容。", + "## ✨ Do more with Smart Picker\n\nSimply type \"/\" or go to the \"+\" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more." : "## ✨ 使用智慧型挑選程式做更多\n\n只要輸入「/」或前往「+」功能表,即可開啟智慧型挑選程式,在這裡您可以將各種內容附加到訊息中。您可以設定智慧型挑選程式,讓它能夠加入 Nextcloud 應用程式、GIF、地圖位置、AI 產生的內容等項目。", + "## ⚙️ Manage conversation settings\n\nIn the conversation menu, you can access various settings to manage your conversations, such as:\n* Edit conversation info\n* Manage notifications\n* Apply numerous moderation rules\n* Configure access and security\n* Enable bots\n* and more!" : "## ⚙️ 管理對話設定\n\n在對話功能表中,您可以存取各種設定來管理您的對話,例如\n* 編輯對話資訊\n* 管理通知\n* 套用許多審核規則\n* 設定存取權限與安全性\n* 啟用機器人\n* 以及更多!", + "Andorra" : "安道爾", + "United Arab Emirates" : "阿拉伯聯合大公國", + "Afghanistan" : "阿富汗", + "Antigua and Barbuda" : "安提瓜和巴布達", + "Anguilla" : "安吉拉", + "Albania" : "阿爾巴尼亞", + "Armenia" : "亞美尼亞", + "Angola" : "安哥拉", + "Antarctica" : "南極地區", + "Argentina" : "阿根廷", + "American Samoa" : "美屬薩摩亞", + "Austria" : "奧地利", + "Australia" : "澳大利亞", + "Aruba" : "阿路巴", + "Åland Islands" : "奧蘭群島", + "Azerbaijan" : "亞塞拜然", + "Bosnia and Herzegovina" : "波士尼亞與赫塞哥維納", + "Barbados" : "巴貝多", + "Bangladesh" : "孟加拉", + "Belgium" : "比利時", + "Burkina Faso" : "布吉納法索", + "Bulgaria" : "保加利亞", + "Bahrain" : "巴林", + "Burundi" : "蒲隆地", + "Benin" : "貝南", + "Saint Barthélemy" : "聖巴瑟米", + "Bermuda" : "百慕達", + "Brunei Darussalam" : "汶萊", + "Bolivia, Plurinational State of" : "玻利維亞", + "Bonaire, Sint Eustatius and Saba" : "波奈、聖佑達修斯與荷屬沙巴", + "Brazil" : "巴西", + "Bahamas" : "巴哈馬", + "Bhutan" : "不丹", + "Bouvet Island" : "布威島", + "Botswana" : "波札那", + "Belarus" : "白俄羅斯", + "Belize" : "貝里斯", + "Canada" : "加拿大", + "Cocos (Keeling) Islands" : "科寇斯(基林)群島", + "Congo, the Democratic Republic of the" : "剛果民主共和國", + "Central African Republic" : "中非共和國", + "Congo" : "剛果", + "Switzerland" : "瑞士", + "Côte d'Ivoire" : "象牙海岸", + "Cook Islands" : "庫克群島", + "Chile" : "智利", + "Cameroon" : "喀麥隆", + "China" : "中國", + "Colombia" : "哥倫比亞", + "Costa Rica" : "哥斯大黎加", + "Cuba" : "古巴", + "Cabo Verde" : "維德角", + "Curaçao" : "古拉索", + "Christmas Island" : "聖誕島", + "Cyprus" : "賽普勒斯", + "Czechia" : "捷克", + "Germany" : "德國", + "Djibouti" : "吉布地", + "Denmark" : "丹麥", + "Dominica" : "多米尼克", + "Dominican Republic" : "多明尼加", + "Algeria" : "阿爾及利亞", + "Ecuador" : "厄瓜多", + "Estonia" : "愛沙尼亞", + "Egypt" : "埃及", + "Western Sahara" : "西撒哈拉", + "Eritrea" : "厄利垂亞", + "Spain" : "西班牙", + "Ethiopia" : "衣索比亞", + "Finland" : "芬蘭", + "Fiji" : "斐濟", + "Falkland Islands (Malvinas)" : "福克蘭群島(馬爾維納斯群島)", + "Micronesia, Federated States of" : "密克羅尼西亞聯邦", + "Faroe Islands" : "法羅群島", + "France" : "法國", + "Gabon" : "加彭", + "United Kingdom of Great Britain and Northern Ireland" : "大不列顛暨北愛爾蘭聯合王國", + "Grenada" : "格瑞那達", + "Georgia" : "喬治亞", + "French Guiana" : "法屬圭亞那", + "Guernsey" : "根西", + "Ghana" : "迦納", + "Gibraltar" : "直布羅陀", + "Greenland" : "格陵蘭", + "Gambia" : "甘比亞", + "Guinea" : "幾內亞", + "Guadeloupe" : "瓜地洛普", + "Equatorial Guinea" : "赤道幾內亞", + "Greece" : "希臘", + "South Georgia and the South Sandwich Islands" : "南喬治亞與南桑威奇群島", + "Guatemala" : "瓜地馬拉", + "Guam" : "關島", + "Guinea-Bissau" : "幾內亞比索", + "Guyana" : "蓋亞那", + "Hong Kong" : "香港", + "Heard Island and McDonald Islands" : "赫德島和麥克唐納群島", + "Honduras" : "宏都拉斯", + "Croatia" : "克羅埃西亞", + "Haiti" : "海地", + "Hungary" : "匈牙利", + "Indonesia" : "印尼", + "Ireland" : "愛爾蘭", + "Israel" : "以色列", + "Isle of Man" : "曼島", + "India" : "印度", + "British Indian Ocean Territory" : "英屬印度洋領地", + "Iraq" : "伊拉克", + "Iran, Islamic Republic of" : "伊朗", + "Iceland" : "冰島", + "Italy" : "義大利", + "Jersey" : "澤西", + "Jamaica" : "牙買加", + "Jordan" : "約旦", + "Japan" : "日本", + "Kenya" : "肯亞", + "Kyrgyzstan" : "吉爾吉斯", + "Cambodia" : "柬埔寨", + "Kiribati" : "吉里巴斯", + "Comoros" : "葛摩", + "Saint Kitts and Nevis" : "聖克里斯多福及尼維斯", + "Korea, Democratic People's Republic of" : "朝鮮民主主義人民共和國", + "Korea, Republic of" : "韓國", + "Kuwait" : "科威特", + "Cayman Islands" : "開曼群島", + "Kazakhstan" : "哈薩克", + "Lao People's Democratic Republic" : "寮國", + "Lebanon" : "黎巴嫩", + "Saint Lucia" : "聖露西亞", + "Liechtenstein" : "列支敦斯登", + "Sri Lanka" : "斯里蘭卡", + "Liberia" : "賴比瑞亞", + "Lesotho" : "賴索托", + "Lithuania" : "立陶宛", + "Luxembourg" : "盧森堡", + "Latvia" : "拉脫維亞", + "Libya" : "利比亞", + "Morocco" : "摩洛哥", + "Monaco" : "摩納哥", + "Moldova, Republic of" : "摩爾多瓦共和國", + "Montenegro" : "蒙特內哥羅", + "Saint Martin (French part)" : "法屬聖馬丁", + "Madagascar" : "馬達加斯加", + "Marshall Islands" : "馬紹爾群島", + "North Macedonia" : "北馬其頓", + "Mali" : "馬利", + "Myanmar" : "緬甸", + "Mongolia" : "蒙古", + "Macao" : "澳門", + "Northern Mariana Islands" : "北馬里亞納群島", + "Martinique" : "馬丁尼克", + "Mauritania" : "茅利塔尼亞", + "Montserrat" : "蒙哲臘", + "Malta" : "馬爾他", + "Mauritius" : "模里西斯", + "Maldives" : "馬爾地夫", + "Malawi" : "馬拉威", + "Mexico" : "墨西哥", + "Malaysia" : "馬來西亞", + "Mozambique" : "莫三比克", + "Namibia" : "納米比亞", + "New Caledonia" : "新喀里多尼亞", + "Niger" : "尼日", + "Norfolk Island" : "諾福克島", + "Nigeria" : "奈及利亞", + "Nicaragua" : "尼加拉瓜", + "Netherlands" : "荷蘭", + "Norway" : "挪威", + "Nepal" : "尼泊爾", + "Nauru" : "諾魯", + "Niue" : "紐埃", + "New Zealand" : "紐西蘭", + "Oman" : "阿曼", + "Panama" : "巴拿馬", + "Peru" : "秘魯", + "French Polynesia" : "法屬玻里尼西亞", + "Papua New Guinea" : "巴布亞紐幾內亞", + "Philippines" : "菲律賓", + "Pakistan" : "巴基斯坦", + "Poland" : "波蘭", + "Saint Pierre and Miquelon" : "聖皮埃與密克隆群島", + "Pitcairn" : "皮特肯群島", + "Puerto Rico" : "波多黎各", + "Palestine, State of" : "巴勒斯坦", + "Portugal" : "葡萄牙", + "Palau" : "帕勞", + "Paraguay" : "巴拉圭", + "Qatar" : "卡達", + "Réunion" : "留尼旺", + "Romania" : "羅馬尼亞", + "Serbia" : "塞爾維亞", + "Russian Federation" : "俄羅斯", + "Rwanda" : "盧安達", + "Saudi Arabia" : "沙烏地阿拉伯", + "Solomon Islands" : "索羅門群島", + "Seychelles" : "塞席爾", + "Sudan" : "蘇丹", + "Sweden" : "瑞典", + "Singapore" : "新加坡", + "Saint Helena, Ascension and Tristan da Cunha" : "聖赫勒拿、亞森欣與崔斯坦達庫尼亞", + "Slovenia" : "斯洛維尼亞", + "Svalbard and Jan Mayen" : "斯瓦巴和揚馬延", + "Slovakia" : "斯洛伐克", + "Sierra Leone" : "獅子山共和國", + "San Marino" : "聖馬力諾", + "Senegal" : "塞內加爾", + "Somalia" : "索馬利亞", + "Suriname" : "蘇利南", + "South Sudan" : "南蘇丹", + "Sao Tome and Principe" : "聖多美及普林西比", + "El Salvador" : "薩爾瓦多", + "Sint Maarten (Dutch part)" : "荷屬聖馬丁", + "Syrian Arab Republic" : "敘利亞", + "Eswatini" : "史瓦帝尼", + "Turks and Caicos Islands" : "土克凱可群島", + "Chad" : "查德", + "French Southern Territories" : "法屬南部和南極領地", + "Togo" : "多哥", + "Thailand" : "泰國", + "Tajikistan" : "塔吉克", + "Tokelau" : "托克勞", + "Timor-Leste" : "東帝汶", + "Turkmenistan" : "土庫曼", + "Tunisia" : "突尼西亞", + "Tonga" : "東加", + "Turkey" : "土耳其", + "Trinidad and Tobago" : "千里達及托巴哥", + "Tuvalu" : "吐瓦魯", + "Taiwan, Province of China" : "台灣", + "Tanzania, United Republic of" : "坦尚尼亞", + "Ukraine" : "烏克蘭", + "Uganda" : "烏干達", + "United States Minor Outlying Islands" : "美國本土外小島嶼", + "United States of America" : "美國", + "Uruguay" : "烏拉圭", + "Uzbekistan" : "烏茲別克", + "Holy See" : "聖座", + "Saint Vincent and the Grenadines" : "聖文森及格瑞那丁", + "Venezuela, Bolivarian Republic of" : "委內瑞拉", + "Virgin Islands, British" : "英屬維京群島", + "Virgin Islands, U.S." : "美屬維京群島", + "Viet Nam" : "越南", + "Vanuatu" : "萬那杜", + "Wallis and Futuna" : "瓦利斯和富圖那", + "Samoa" : "薩摩亞", + "Yemen" : "葉門", + "Mayotte" : "馬約特", + "South Africa" : "南非", + "Zambia" : "尚比亞", + "Zimbabwe" : "辛巴威", + "Background blur" : "背景模糊", + "Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files." : "無法檢查 WASM 載入支援。請手動檢查您的網路伺服器是否可服務 `.wasm` 檔案。", + "Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation." : "您的伺服器並未正確的設定,因此無法傳遞 `.wasm` 的檔案。這通常是因為 Nginx 的設定問題所導致。對於背景模糊來說,需要一些調整才能一併傳遞 `.wasm` 的檔案。請檢查您的 Nginx 設定,和 Nextcloud 說明文件中提到的建議設定。", + "Talk configuration values" : "Talk 設定值", + "Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration." : "僅系統 cron 支援強制通話持續時間。請啟用系統 cron 或移除 `max_call_duration` 設定。", + "Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk." : "因為技術限制,較小的 `max_call_duration` 值(目前設定為 %d)無法強制執行。背景作業每5分鐘執行一次,因此使用請自負風險。", + "Federation" : "聯盟", + "It is highly recommended to configure \"memcache.locking\" when Talk Federation is enabled." : "強烈建議在啟用聯盟 Talk 時設定「memcache.locking」。", + "High-performance backend" : "高效能後端", + "No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly." : "未設定高效能後端 - 在沒有高效能後端的情況下執行 Nextcloud Talk 只適用於非常小規模的通話(最多 2-3 名參與者)。請設定高效能後端,以確保有多位參與者的通話能順暢運作。", + "Running the High-performance backend \"conversation_cluster\" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead." : "高效能後端的「conversation_cluster」執行模式已棄用,在即將推出的版本中將不再支援。高效能後端現在支援真正的叢集,應該改用真正的叢集。", + "Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings." : "定義多個高效能後端已被淘汰,在即將推出的版本中將不再支援。取而代之的是在 Talk 設定中設定負載平衡器與叢集訊號伺服器。", + "The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue." : "所使用演算法 %1$s 的已儲存公鑰與儲存的私鑰不相符。請執行 %2$s 以修正問題。", + "High-performance backend not configured correctly. Run %s for details." : "未正確設定高效能後端。請執行 %s 以取得更多詳細資訊。", + "High-performance backend not configured correctly" : "未正確設定高效能後端", + "Error: Cannot connect to server" : "錯誤:無法連線至伺服器", + "Error: Server did not respond with proper JSON" : "錯誤:伺服器並未回覆正確的 JSON", + "Error: Certificate expired" : "錯誤:憑證已過期", + "Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器與高效能後端伺服器的系統時間不同步。請確保兩個伺服器都連線到校時伺服器,或手動同步它們的時間。", + "Could not get version" : "無法取得版本", + "Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk" : "錯誤:執行中的版本:{version};伺服器必須更新以與此版本的 Talk 相容", + "Error: Server responded with: {error}" : "錯誤:伺服器回應:{error}", + "Error: Unknown error occurred" : "錯誤:遇到未知的錯誤", + "Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}" : "警告:正在執行的版本:{version};伺服器不支援此 Talk 版本的所有功能,缺少的功能:{features}", + "It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend." : "強烈建議在使用高效能後端執行 Nextcloud Talk 時設定記憶體快取。", + "Client Push" : "客戶端推播", + "Client Push is installed, this improves the punctuality of Talk notifications." : "已安裝客戶端推播,這可以改善 Talk 通知的即時性。", + "{notify_push} is not installed. This may lead to delayed Talk notifications." : "尚未安裝 {notify_push}。這可能會導致 Talk 通知延遲。", + "Recording backend" : "錄製後端", + "Using the recording backend requires a High-performance backend." : "使用錄製後端需要高效能後端。", + "No recording backend configured" : "未設定錄製後端", + "SIP configuration" : "SIP 組態", + "Using the SIP functionality requires a High-performance backend." : "使用 SIP 功能需要高效能後端。", + "Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}" : "分配的 Talk 電話號碼不得以 + 或 0 開頭。請移除或更新以下號碼:\n{list}", + "No SIP backend configured" : "未設定 SIP 後端", + "Invalid date, date format must be YYYY-MM-DD" : "無效的日期,需為 YYYY-MM-DD 格式", + "Conversation not found" : "找不到對話", + "Path is already shared with this conversation" : "已與此對話分享路徑", + "Chat, video & audio-conferencing using WebRTC" : "使用 WebRTC 進行聊天、視訊和語音會議", + "Chat, video & audio-conferencing using WebRTC\n\n* 💬 **Chat** Nextcloud Talk comes with a simple text chat, allowing you to share or upload files from your Nextcloud Files app or local device and mention other participants.\n* 👥 **Private, group, public and password protected calls!** Invite someone, a whole group or send a public link to invite to a call.\n* 🌐 **Federated chats** Chat with other Nextcloud users on their servers\n* 💻 **Screen sharing!** Share your screen with the participants of your call.\n* 🚀 **Integration with other Nextcloud apps** like Files, Calendar, User status, Dashboard, Flow, Maps, Smart picker, Contacts, Deck, and many more.\n* 🌉 **Sync with other chat solutions** With [Matterbridge](https://github.com/42wim/matterbridge/) being integrated in Talk, you can easily sync a lot of other chat solutions to Nextcloud Talk and vice-versa." : "使用 WebRTC 的聊天、視訊語音訊會議\n\n* 💬 **聊天** NextCloud Talk 包含簡單的文字聊天,讓您可以從 NextCloud 檔案應用程式或本機裝置分享或上傳檔案,並提及其他參與者。\n* 👥 **私人、群組、公開與密碼保護通話!** 邀請某人、整個群組或是傳送公開連結來邀請通話\n* 🌐 **聯盟式通話** 與其他伺服器上的 Nextcloud 使用者聊天\n* 💻 **畫面分享!** 與您通話的參與者分享畫面。\n* 🚀 **與其他 Nextcloud 應用程式整合** 如檔案、日曆、使用者狀態、儀表板、流程、地圖、智慧型挑選程式、通訊錄、Deck 與更多其他應用程式。\n* 🌉 **與其他聊天解決方案同步** 使用整合到 Talk 中的 [Matterbridge](https://github.com/42wim/matterbridge/),您可以輕鬆地將其他許多聊天解決方案同步到 Nextcloud Talk,反之亦然。", + "Leave call" : "離開通話", + "Navigating away from the page will leave the call in {conversation}" : "離開頁面也將離開 {conversation} 中的通話", + "Stay in call" : "留在通話中", + "Error occurred when getting the conversation information" : "取得對話資訊時發生錯誤", + "Discuss this file" : "討論此檔案", + "Share this file with others to discuss it" : "與其他人分享此檔案並進行討論", + "Share this file" : "分享此檔案", + "Join conversation" : "加入對話", + "This conversation is password-protected." : "此對話受密碼保護。", + "We have detected multiple invalid password attempts from your IP. Therefore your next attempt is throttled up to 30 seconds." : "您的 IP 多次嘗試密碼無效。因此下一次嘗試將會被延時30秒。", + "The password is wrong. Try again." : "密碼錯誤,請重試。", + "Password" : "密碼", + "Submit" : "遞交", + "Error requesting the password." : "請求密碼時發生錯誤", + "Request password" : "請求密碼", + "This conversation has ended" : "此對話已結束", + "Error occurred when joining the conversation" : "加入對話時發生錯誤", + "Close Talk sidebar" : "關閉 Talk 側邊欄", + "Open Talk sidebar" : "開啟 Talk 側邊欄", + "Everyone" : "所有人", + "Users and moderators" : "使用者與主持人", + "Moderators only" : "僅主持人", + "Disable calls" : "停用通話", + "Save changes" : "儲存變更", + "Saving …" : "正在儲存……", + "Saved!" : "已儲存!", + "Limit to groups" : "群組限制", + "When at least one group is selected, only people of the listed groups can be part of conversations." : "選擇一或多個群組後,只有所選群組中的人才能參與對話。", + "Guests can still join public conversations." : "訪客仍可加入公開對話。", + "Users that cannot use Talk anymore will still be listed as participants in their previous conversations and also their chat messages will be kept." : "不再能夠使用 Talk 的使用者仍將被列為以前的對話的參與者。他們的聊天訊息將被保留。", + "Limit using Talk" : "限制使用 Talk", + "Limit creating a public and group conversation" : "限制建立公開和群組對話", + "Limit creating conversations" : "限制建立對話", + "Limit starting a call" : "限制開始通話", + "Limit starting calls" : "限制開始通話", + "When a call has started, everyone with access to the conversation can join the call." : "通話開始後,每個有權存取對話的人都可以加入通話。", + "The following bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上安裝了以下機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "No bots are installed on this server. In the documentation you can find details how to {linkstart1}build your own bot{linkend} or a {linkstart2}list of bots{linkend} to enable on your server." : "此伺服器上並未安裝機器人。在文件中,您可以找到如何{linkstart1}建構您自己的機器人{linkend},或是可以在您的伺服器上啟用的{linkstart2}機器人清單{linkend}。", + "Description is not provided" : "未提供描述", + "Locked for moderators" : "為主持人鎖定", + "Enabled" : "已啟用", + "Disabled" : "已停用", + "Bots settings" : "機器人設定", + "State" : "狀態", + "Name" : "名稱", + "Last error" : "上次錯誤", + "Total errors count" : "總錯誤數量", + "Find more bots" : "尋找更多機器人", + "Trusted servers can be configured at {linkstart}Sharing settings page{linkend}." : "可以在{linkstart}分享設定頁面{linkedin}設定信任伺服器。", + "Beta" : "測試版", + "Federated chats and calls work already. Attachment handling is coming in a future version." : "聯盟聊天與通話已經可以運作。附件處理將在未來的版本中推出。", + "Enable Federation in Talk app" : "啟用 Talk 應用程式中的聯盟功能", + "Permissions" : "權限", + "Allow users to be invited to federated conversations" : "允許邀請使用者加入聯合對話", + "Allow users to invite federated users into conversation" : "允許使用者邀請聯合使用者加入對話", + "Only allow to federate with trusted servers" : "僅允許與信任的伺服器聯合", + "When at least one group is selected, only people of the listed groups can invite federated users to conversations." : "選擇一或多個群組後,只有所選群組中的人才能邀請聯合使用者到對話中。", + "Groups allowed to invite federated users" : "允許邀請聯合使用者的群組", + "Select groups …" : "選取群組……", + "All messages" : "所有訊息", + "@-mentions only" : "僅被 @ - 提及 的訊息", + "Off" : "關閉", + "General settings" : "一般設定", + "Default notification settings" : "預設通知設定", + "Default group notification" : "預設群組通知", + "Default group notification for new groups" : "新群組的預設群組通知", + "Integration into other apps" : "整合至其他應用程式", + "Allow conversations on files" : "允許在檔案中開始對話", + "Allow conversations on public shares for files" : "允許在檔案公開分享中開始對話", + "End-to-end encrypted calls" : "端到端加密通話", + "Enable encryption" : "啟用加密", + "End-to-end encrypted calls with a configured SIP bridge require a newer version of the High-performance backend and SIP bridge." : "使用已設定 SIP 橋接的端到端加密通話需要較新版本的高效能後端與 SIP 橋接器。", + "Mobile clients do not support end-to-end encrypted calls at the moment." : "行動裝置客戶端目前不支援端到端加密通話。", + "By clicking the button above the information in the form is sent to the servers of Struktur AG. You can find further information at {linkstart}spreed.eu{linkend}." : "透過點選上面的按鈕,表單中的資訊將傳送到 Struktur AG 的伺服器。您可以在 {linkstart}spreed.eu{linkend} 上找到更多資訊。", + "Pending" : "擱置中", + "Error" : "錯誤", + "Blocked" : "已封鎖", + "Active" : "啟動", + "Expired" : "已過期", + "Never" : "永不", + "The trial could not be requested. Please try again later." : "無法請求測試。請稍後重試。", + "The account could not be deleted. Please try again later." : "無法刪除帳號。請稍後再試。", + "Hosted High-performance backend" : "託管的高效能後端", + "Our partner Struktur AG provides a service where a hosted signaling server can be requested. For this you only need to fill out the form below and your Nextcloud will request it. Once the server is set up for you the credentials will be filled automatically. This will overwrite the existing signaling server settings." : "我們的合作夥伴 Struktur AG 提供訊號伺服器的託管服務。您只需要填寫下面的表單,您的 Nextcloud 就會為您申請該服務。為您設定伺服器後,將自動填寫憑證。這將覆蓋現有的訊號伺服器設定。", + "If your high-performance backend account includes STUN and/or TURN functionality, the settings will be updated accordingly." : "若您的高效能後端系統帳號包含 STUN 及/或 TURN 功能,將會更新對應設定。", + "URL of this Nextcloud instance" : "此 Nextcloud 站台的 URL", + "Full name of the user requesting the trial" : "請求試用的使用者全名", + "Email of the user" : "使用者電子郵件", + "Language" : "語言", + "Country" : "國家", + "Request signaling server trial" : "請求訊號伺服器試用", + "You can see the current status of your hosted signaling server in the following table." : "您可以在以下表格中檢視您託管的訊號伺服器的目前狀態。", + "Status" : "狀態", + "Created at" : "建立於", + "Expires at" : "過期於", + "Limits" : "限制", + "STUN included" : "包含 STUN", + "Yes" : "是", + "No" : "否", + "TURN included" : "包含 TURN", + "Delete the signaling server account" : "刪除訊號伺服器帳號", + "_%n user_::_%n users_" : ["%n 個使用者"], + "Installed version: {version}" : "已安裝版本:{version}", + "You can install the Matterbridge to link Nextcloud Talk to some other services, visit their {linkstart1}GitHub page{linkend} for more details. Downloading and installing the app can take a while. In case it times out, please install it manually from the {linkstart2}Nextcloud App Store{linkend}." : "您可以安裝 Matterbridge 以將 Nextcloud Talk 連結至其他服務,請造訪其 {linkstart1}GitHub 頁面{linkend}以取得更多資訊。下載並安裝應用程式可能需要一段時間。若逾時,請從 {linkstart2}Nextcloud 應用程式商店{linkend}手動安裝。", + "Matterbridge binary has incorrect permissions. Please make sure the Matterbridge binary file is owned by the correct user and can be executed. It can be found in \"/…/nextcloud/apps/talk_matterbridge/bin/\"." : "Matterbridge 可執行檔的權限不正確。請確保 Matterbridge 可執行檔為正確的使用者所擁有且可執行。可以在「/…/nextcloud/apps/talk_matterbridge/bin/」中找到。", + "Matterbridge binary was not found or couldn't be executed." : "找不到或無法執行 Matterbridge 程式。", + "You can also set the path to the Matterbridge binary manually via the config. Check the {linkstart}Matterbridge integration documentation{linkend} for more information." : "您也可以透過組態檔手動設定 Matterbridge 程式的路徑。更多資訊請檢視 {linkstart}Matterbridge 整合文件{linkend}。", + "Downloading …" : "正在下載……", + "Install Talk Matterbridge" : "安裝 Talk Matterbridge", + "An error occurred while installing the Matterbridge app" : "安裝 Matterbridge 應用程式時發生錯誤", + "An error occurred while installing the Talk Matterbridge. Please install it manually" : "安裝 Talk Matterbridge 時發生錯誤。請手動安裝", + "Failed to execute Matterbridge binary." : "無法執行 Matterbridge 程式。", + "Matterbridge integration" : "Matterbridge 整合", + "Enable Matterbridge integration" : "啟用 Matterbridge 整合", + "Status: Checking connection" : "狀態:正在檢查連線", + "OK: Running version: {version}" : "OK:執行中的版本:{version}", + "Error: Server seems to be a Signaling server" : "錯誤:伺服器似乎是 Signaling 伺服器", + "Error: System times of Nextcloud server and Recording backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time." : "錯誤:Nextcloud 伺服器與 Recording 後端伺服器的系統時間不同步。請確保兩個伺服器都連線到校時伺服器,或手動同步它們的時間。", + "Recording backend URL" : "錄製後端 URL", + "Validate SSL certificate" : "驗證 SSL 憑證", + "Delete this server" : "刪除此伺服器", + "Test this server" : "測試此伺服器", + "Disabled for all calls" : "對所有通話停用", + "Enabled for all calls" : "對所有通話啟用", + "Configurable on conversation level by moderators" : "可由主持人在對話層級設定", + "The PHP settings \"upload_max_filesize\" or \"post_max_size\" only will allow to upload files up to {maxUpload}." : "PHP 設定「upload_max_filesize」或「post_max_size」僅允許上傳最大 {maxUpload} 的檔案。", + "Recording backend settings saved" : "錄製後端設定已儲存", + "Moderators will be allowed to enable consent on conversation level. The consent to be recorded will be required for each participant before joining every call in this conversation." : "允許主持人在對話層級啟用同意。每位參與者在加入此對話中的每個通話之前都需要給予錄製同意。", + "The consent to be recorded will be required for each participant before joining every call." : "在每次通話之前,每位參與者都需要同意錄製。", + "The consent to be recorded is not required." : "同意錄音並非必須。", + "Recording backend configuration is only possible with a High-performance backend." : "僅當使用高效能後端時才能設定錄製後端。", + "Add a new recording backend server" : "新增錄製後端伺服器", + "Shared secret" : "已分享密碼", + "Recording consent" : "同意錄製", + "Recording transcription" : "錄音轉錄", + "Automatically transcribe call recordings with a transcription provider" : "使用轉錄提供者自動轉錄通話錄音", + "Automatically summarize call recordings with transcription and summary providers" : "使用轉錄與摘要提供者自動總結通話錄音", + "SIP configuration saved!" : "已儲存 SIP 組態!", + "SIP configuration is only possible with a High-performance backend." : "SIP 組態僅於有高效能後端時可用。", + "Enable SIP Dial-out option" : "啟用 SIP 撥出選項", + "Signaling server needs to be updated to supported SIP Dial-out feature." : "Signaling 伺服器必須更新以支援 SIP 撥出功能。", + "Do not show SIP Dial-out caller number" : "不要顯示 SIP Dial-out 來電者號碼", + "Anonymous number should appear as \"unknown\" or \"withheld number\" to call recipient" : "匿名號碼應對接聽者顯示為「未知號碼」或「隱藏號碼」", + "Dial-out number" : "Dial-out 號碼", + "E164 formatted number used as a fallback caller number for outgoing calls" : "以 E164 格式顯示的號碼作為撥出通話的備用來電號碼", + "Dial-out prefix" : "Dial-out 前綴", + "Prefix to configured user number for outgoing calls (default is `+`)" : "撥出通話時,設定使用者號碼的前綴(預設為 `+`)", + "Restrict SIP configuration" : "限制 SIP 組態", + "Enable SIP configuration" : "啟用 SIP 組態", + "Only users of the following groups can enable SIP in conversations they moderate" : "僅以下群組的使用者可以在他們主持的對話中啟用 SIP", + "Phone number (Country)" : "電話號碼(國家)", + "This information is sent in invitation emails as well as displayed in the sidebar to all participants." : "此資訊會在邀請電子郵件中傳送,也會在側邊欄中顯示給所有參與者。", + "Nextcloud base URL" : "Nextcloud 基本 URL", + "Talk Backend URL" : "Talk 後端 URL", + "WebSocket URL" : "WebSocket URL", + "Available features" : "可用功能", + "Error: Websocket connection failed" : "錯誤:Websocket 連線失敗", + "Error code" : "錯誤代碼", + "Error message" : "錯誤訊息", + "Error: Websocket connection failed. Check browser console" : "錯誤:Websocket 連線失敗。請檢查瀏覽器主控台", + "High-performance backend URL" : "高效能後端 URL", + "Missing High-performance backend warning hidden" : "隱藏缺少高效能後端的警告", + "High-performance backend settings saved" : "高效能後端設定已儲存", + "Nextcloud Talk setup not complete" : "未完成 Nextcloud Talk 設定", + "Please note that in calls with more than 2 participants without the High-performance backend, participants will most likely experience connectivity issues and cause high load on participating devices." : "請注意,在沒有高效能後端的情況下,如果通話有 2 位以上的參與者,參與者很可能會遇到連線問題,導致參與者的裝置負載過高。", + "Install the High-performance backend to ensure calls with multiple participants work seamlessly." : "安裝高效能後端,以確保有多位參與者的通話能順暢運作。", + "Nextcloud portal" : "Nextcloud 入口網站", + "Quick installation guide" : "快速安裝指南", + "The High-performance backend is required for calls and conversations with multiple participants. Without the backend, all participants have to upload their own video individually for each other participant, which will most likely cause connectivity issues and a high load on participating devices." : "有多位參與者的通話和對話需要高效能後端。如果沒有後端,所有參與者都必須為其他參與者各自上傳自己的視訊,這極有可能造成連線問題,並對參與者的裝置造成高負載。", + "It is highly recommended to set up a distributed cache when using Nextcloud Talk with a High-performance backend." : "使用 Nextcloud Talk 搭配高效能後端時,強烈建議設定分散式快取。", + "Add High-performance backend server" : "新增高效能後端伺服器", + "Warn about connectivity issues in calls with more than 2 participants" : "在有 2 個以上參與者的通話中警告連線問題", + "STUN server URL" : "STUN 伺服器 URL", + "The server address is invalid" : "伺服器地址無效", + "STUN settings saved" : "STUN 設定已儲存", + "STUN servers" : "STUN 伺服器", + "A STUN server is used to determine the public IP address of participants behind a router." : "STUN 伺服用於確認位於路由器後的參與者的公開 IP 位置。", + "Add a new STUN server" : "新增 STUN 伺服器", + "{schema} scheme must be used with a domain" : "{option} 方案必須與域名一起使用", + "{option1} and {option2}" : "{option1} 與 {option2}", + "{option} only" : "僅 {option}", + "OK: Successful ICE candidates returned by the TURN server" : "OK:TURN 伺服器回傳成功的 ICE 候選者", + "Error: No working ICE candidates returned by the TURN server" : "錯誤:TURN 伺服器並未回傳任何有效的 ICE 候選者", + "Testing whether the TURN server returns ICE candidates" : "測試 TURN 伺服器是否回傳 ICE 候選者", + "TURN server schemes" : "TURN 伺服器方案", + "TURN server URL" : "TURN 伺服器 URL", + "TURN server secret" : "TURN 伺服器密碼", + "TURN server protocols" : "TURN 伺服器協定", + "A TURN server is used to proxy the traffic from participants behind a firewall. If individual participants cannot connect to others a TURN server is most likely required. See {linkstart}this documentation{linkend} for setup instructions." : "TURN 伺服器用於代理來自防火牆後參與者的流量。如果個別參與者無法連線至其他參與者,則很可能需要使用 TURN 伺服器。關於設定指南,請參見{linkstart}此文件{linkend}。", + "TURN settings saved" : "TURN 設定已儲存", + "TURN servers" : "TURN 伺服器", + "Add a new TURN server" : "新增 TURN 伺服器", + "Failed" : "失敗", + "OK" : "確定", + "Checking …" : "正在檢查……", + "Failed: WebAssembly is disabled or not supported in this browser. Please enable WebAssembly or use a browser with support for it to do the check." : "失敗:此瀏覽器中停用或不支援 WebAssembly。請啟用 WebAssembly 或使用支援此功能的瀏覽器進行檢查。", + "Failed: \".wasm\" and \".tflite\" files were not properly returned by the web server. Please check \"System requirements\" section in Talk documentation." : "失敗:網路伺服器沒有正確回傳「.wasm」與「.tflite」檔案。請檢視 Talk 文件中的「系統需求」區塊。", + "OK: \".wasm\" and \".tflite\" files were properly returned by the web server." : "OK:網路伺服器正確回傳了「.wasm」與「.tflite」檔案。", + "It seems that the PHP and Apache configuration is not compatible. Please note that PHP can only be used with the MPM_PREFORK module and PHP-FPM can only be used with the MPM_EVENT module." : "PHP 與 Apache 組態似乎不相容。請注意,PHP 僅能與 MPM_PREFORK 模組一起使用,PHP-FPM 僅能與 MPM_EVENT 模組一起使用。", + "Web server setup checks" : "網路伺服器設定檢查", + "Files required for virtual background can be loaded" : "可以載入背景模糊所需的檔案", + "Federated user" : "聯盟使用者", + "Assign participants to rooms" : "指派參與者到聊天室", + "Configure breakout rooms" : "設定分組討論室", + "Number of breakout rooms" : "分組討論室數量", + "You can create from 1 to 20 breakout rooms." : "您可以建立 1 到 20 個分組討論室。", + "Assignment method" : "指派方法", + "Automatically assign participants" : "自動指派參與者", + "Manually assign participants" : "手動指派參與者", + "Allow participants to choose" : "允許參與者選擇", + "Create rooms" : "建立聊天室", + "Confirm" : "確認", + "Create breakout rooms" : "建立分組討論室", + "Reset" : "重設", + "Delete breakout rooms" : "刪除分組討論室", + "Room {roomNumber}" : "聊天室 {roomNumber}", + "Current breakout rooms and settings will be lost" : "目前的分組討論室與設定將會遺失", + "Cancel" : "取消", + "Unassigned participants" : "未指派的參與者", + "Back" : "返回", + "Assign" : "指派", + "Add participant \"{user}\"" : "新增參與者「{user}」", + "Now" : "現在", + "Invalid calendar selected" : "選取了無效的日曆", + "Invalid start time selected" : "選取了無效的開始時間", + "Invalid end time selected" : "選取了無效的結束時間", + "Unknown error occurred" : "發生未知錯誤", + "Sending no invitations" : "不傳送邀請", + "{participant0} will receive an invitation" : "{participant0} 將會收到邀請", + "{participant0} and {participant1} will receive invitations" : "{participant0} 與 {participant1} 將會收到邀請", + "_{participant0}, {participant1} and %n other will receive invitations_::_{participant0}, {participant1} and %n others will receive invitations_" : ["{participant0}、{participant1} 與 %n 個其他人將會收到邀請"], + "Invite {user}" : "邀請 {user}", + "Invite all users and emails in this conversation" : "邀請此對話中的所有使用者與電子郵件", + "Meeting created" : "已建立會議", + "Upcoming meetings" : "即將到來的會議", + "Loading …" : "正在載入……", + "No upcoming meetings" : "沒有即將舉行的會議", + "Schedule a meeting" : "安排會議", + "Meeting title" : "會議標題", + "From" : "從", + "To" : "至", + "Calendar" : "行事曆", + "Attendees" : "參與者", + "No other participants to send invitations to." : "沒有其他要傳送邀請函的參與者。", + "Add attendees" : "新增參與者", + "Save" : "儲存", + "Search participants" : "搜尋參與者", + "No results" : "沒有符合搜尋的項目", + "Done" : "完成", + "Disable live transcription" : "停用即時轉錄", + "Enable live transcription (generated by AI)" : "啟用即時轉錄(由人工智慧產生)", + "Enable live transcription (Live transcriptions app is not installed)" : "啟用即時轉錄(未安裝即時轉錄應用程式)", + "Disable live translation" : "停用即時翻譯", + "Enable live translation (generated by AI)" : "啟用即時翻譯(由人工智慧產生)", + "Original language" : "原始語言", + "Live translations app is not installed" : "即時轉錄應用程式未安裝", + "Original language: {languageName}" : "原始語言:{languageName}", + "Translated language" : "翻譯後的語言", + "Translated language: {languageName}" : "翻譯後的語言:{languageName}", + "Raise hand" : "舉手", + "Raise hand (R)" : "舉手 (R)", + "Lower hand" : "放手", + "Lower hand (R)" : "放手 (R)", + "Exit full screen (F)" : "離開全螢幕 (F)", + "Full screen (F)" : "全螢幕 (F)", + "Speaker view" : "演講者檢視", + "Grid view" : "網格檢視", + "Error when trying to load the available live transcription languages" : "嘗試載入可用的即時轉錄語言時發生錯誤", + "Failed to enable live transcription" : "啟用即時轉錄失敗", + "Failed to enable live translations" : "啟用即時翻譯失敗", + "Failed to disable live translations" : "停用即時翻譯失敗", + "Recording consent is required" : "需要同意錄製", + "This conversation is read-only" : "此對話唯讀", + "Conversation not found or not joined" : "找不到或未加入對話", + "Lobby is still active and you're not a moderator" : "大廳仍然活躍,您不是主持人", + "Connection failed" : "連線失敗", + "Reload" : "重新載入", + "{nickName} raised their hand." : "{nickName} 舉手了。", + "A participant raised their hand." : "一位參與者舉手了。", + "Collapse stripe" : "折疊條紋", + "Expand stripe" : "展開條紋", + "Previous page of videos" : "視訊的上一頁", + "Next page of videos" : "視訊的下一頁", + "Connecting …" : "正在連線……", + "Calling …" : "正在通話……", + "Waiting for {user} to join the call" : "等待 {user} 加入通話", + "Waiting for others to join the call …" : "等待其他人加入通話……", + "You can invite others in the participant tab of the sidebar" : "您可以在在側邊欄的「參與者」分頁中邀請其他人", + "You can invite others in the participant tab of the sidebar or share this link to invite others!" : "您可以在在側邊欄的「參與者」分頁中邀請其他人,或是分享此連結以邀請其他人!", + "Share this link to invite others!" : "分享此連結以邀請其他人!", + "Copy link" : "複製連結", + "You are not allowed to enable audio" : "您無權啟用音訊", + "No audio. Click to select device" : "無音訊。點擊以選取裝置", + "Mute audio" : "靜音", + "Mute audio (M)" : "靜音 (M)", + "Unmute audio" : "取消靜音", + "Unmute audio (M)" : "取消靜音 (M)", + "None" : "無", + "Select a microphone" : "選取麥克風", + "Select a speaker" : "選取喇叭", + "Microphone settings" : "麥克風設定", + "Check devices" : "檢查裝置", + "Access to camera was denied" : "拒絕存取網路攝影機", + "Error while accessing camera: It is likely in use by another program" : "存取網路攝影機時發生錯誤:其似乎正在被另一個程式使用", + "Error while accessing camera" : "存取網路攝影機時發生錯誤", + "You have been muted by a moderator" : "您已被主持人靜音", + "Hide presenter video" : "隱藏演講者視訊", + "You are not allowed to enable video" : "您無權啟用視訊", + "No video. Click to select device" : "無視訊。點擊以選取裝置", + "Disable video" : "停用視訊", + "Disable video (V)" : "停用視訊 (V)", + "Enable video" : "啟用視訊", + "Enable video (V)" : "啟用視訊 (V)", + "Enable video - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊 - 首次啟用視訊時,您的連線會短暫中斷", + "Enable video (V) - Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊 (V) - 首次啟用視訊時,您的連線會短暫中斷", + "Enable video. Your connection will be briefly interrupted when enabling the video for the first time" : "啟用視訊。首次啟用視訊時,您的連線會短暫中斷", + "Select a video device" : "選取視訊裝置", + "Show presenter" : "顯示演講者", + "You" : "您", + "Mute" : "靜音", + "Muted" : "已靜音", + "Show screen" : "顯示螢幕", + "Stop following" : "停止追蹤", + "Connection could not be established …" : "無法建立連線……", + "Connection was lost and could not be re-established …" : "連線遺失且無法重新建立……", + "Connection could not be established. Trying again …" : "無法建立連線。正在重試……", + "Connection lost. Trying to reconnect …" : "連線遺失。正在嘗試重新連線……", + "Connection problems …" : "連線問題……", + "Collapse" : "收合", + "Expand" : "展開", + "You need to be logged in to upload files" : "您需要登入以上傳檔案", + "Drop your files to upload" : "拖曳您的檔案以上傳", + "Conversation messages" : "對話訊息", + "Scroll to bottom" : "捲動至底部", + "Post message" : "張貼訊息", + "Federated conversation" : "聯合對話", + "Public conversation" : "公開對話", + "Favorite" : "我的最愛", + "Banned users" : "被封鎖的使用者", + "Manage the list of banned users in this conversation." : "管理此對話中被封鎖使用者的清單。", + "Manage bans" : "管理封鎖", + "No banned users" : "沒有被封鎖的使用者", + "Banned by:" : "封鎖者:", + "Date:" : "日期:", + "Note:" : "備註:", + "Hide details" : "隱藏細節", + "Show details" : "顯示細節", + "Unban" : "取消封鎖", + "You can change the title and the description in {linkstart}Calendar ↗{linkend}." : "您可以在{linkstart}日曆 ↗{linkend}中變更標題與描述。", + "Error while updating conversation name" : "更新對話名稱時發生錯誤", + "Error while updating conversation description" : "更新對話描述時發生錯誤", + "Enter a name for this conversation" : "輸入此對話名稱", + "Edit conversation name" : "編輯對話名稱", + "Edit conversation description" : "編輯對話描述", + "Enter a description for this conversation" : "輸入此對話的描述", + "Picture" : "圖片", + "The following bots can be enabled in this conversation. Reach out to your administration to get more bots installed on this server." : "可在此對話啟用以下機器人。請與您的管理員聯絡以在此伺服器上安裝更多機器人。", + "No bots are installed on this server. Reach out to your administration to get bots installed on this server." : "此伺服器上未安裝機器人。請與您的管理員聯絡以在此伺服器上安裝機器人。", + "Disable" : "停用", + "Enable" : "啟用", + "The bot is not available anymore" : "該機器人已不再提供服務", + "Breakout rooms" : "分組討論室", + "Manage breakout rooms" : "管理分組討論室", + "Set up breakout rooms for this conversation" : "為此對話設定分組討論室", + "Please select a valid PNG or JPG file" : "請選取有效的 PNG 或 JPG 檔案", + "Choose your conversation picture" : "選擇您的對話圖片", + "Choose" : "選擇", + "Error setting conversation picture" : "設定對話圖片時發生錯誤", + "Could not set the conversation picture: {error}" : "無法設定對話圖片:{error}", + "Error cropping conversation picture" : "裁剪對話圖片時發生錯誤", + "Error removing conversation picture" : "移除對話圖片時發生錯誤", + "Set emoji as conversation picture" : "將表情符號設定對話圖片", + "Set background color for conversation picture" : "設定對話圖片的背景顏色", + "Upload conversation picture" : "上傳對話圖片", + "Choose conversation picture from files" : "從檔案選擇對話圖片", + "Remove conversation picture" : "移除對話圖片", + "The file must be a PNG or JPG" : "檔案必須是 PNG 或 JPG", + "Set picture" : "設定圖片", + "Default permissions modified for {conversationName}" : "為 {conversationName} 修改了預設權限", + "Could not modify default permissions for {conversationName}" : "無法修改 {conversationName} 的預設權限", + "Edit the default permissions for participants in this conversation. These settings do not affect moderators." : "編輯此對話中參與者的預設權限。這些設定不會影響主持人。", + "Every time permissions are modified in this section, custom permissions previously assigned to individual participants will be lost." : "每次在此區塊修改權限時,之前指派給每個參與者的自訂權限都會遺失。", + "All permissions" : "所有權限", + "Participants have permissions to start a call, join a call, enable audio and video, and share screen." : "參與者有權開始通話、加入通話、啟用音訊與視訊以及分享螢幕。", + "Participants can use all available features." : "參與者可以使用所有可用的功能。", + "Restricted" : "受限", + "Participants can join calls, but cannot enable audio nor video nor share screen until a moderator manually grants them permissions." : "在主持人手動授予他們權限之前,參與者只能加入對話,但不能啟用音訊、視訊或螢幕分享。", + "Participants get a reduced feature set until a moderator manually grants additional permissions." : "在主持人手動授予額外權限之前,參與者只能使用有限的功能。", + "Advanced permissions" : "進階權限", + "Edit permissions" : "編輯權限", + "Conversation settings" : "對話設定", + "Basic Info" : "基本資訊", + "Personal" : "個人", + "Moderation" : "主持", + "Setup overview" : "設定概覽", + "Live transcription" : "即時轉錄", + "Live transcriptions app is not installed" : "即時轉錄應用程式未安裝", + "Enable live transcription" : "啟用即時轉錄", + "Breakout Rooms" : "分組討論室", + "Matterbridge" : "Matterbridge ", + "Bots" : "機器人", + "Danger zone" : "危險區域", + "Archive conversation" : "封存對話", + "Archived conversations are hidden from the conversation list by default. However, they will still appear when you search for the conversation name or access a list of archived conversations." : "預設情況下,已封存的對話會從對話清單中隱藏。但是,當您搜尋對話名稱或存取已封存的對話清單時,它們仍會出現。", + "Do you really want to leave \"{displayName}\"?" : "您真的想要離開「{displayName}」嗎?", + "You can archive this conversation instead." : "您可以改為封存此對話。", + "Leave conversation" : "離開對話", + "You need to promote a new moderator before you can leave the conversation" : "在您離開對話前,您必須授權一位新的主持人", + "Delete conversation" : "刪除對話", + "Do you really want to delete \"{displayName}\"?" : "您真的想要刪除「{displayName}」嗎?", + "Error while deleting conversation" : "刪除對話時發生錯誤", + "Delete all chat messages" : "刪除所有聊天訊息", + "Do you really want to delete all messages in \"{displayName}\"?" : "您真的想要刪除「{displayName}」中的所有訊息嗎?", + "Error while clearing chat history" : "清除聊天歷史紀錄時發生錯誤", + "Be careful, these actions cannot be undone." : "請謹慎,這些操作無法被還原。", + "Once a conversation is left, to rejoin a closed conversation, an invite is needed. An open conversation can be rejoined at any time." : "離開封閉式對話後,您需要收到邀請才能重新加入。 您可以隨時重新加入公開對話。", + "Permanently delete this conversation." : "永久刪除此對話", + "Delete chat messages" : "刪除聊天訊息", + "Permanently delete all the messages in this conversation." : "永久刪除此對話中的所有訊息。", + "_%n hour_::_%n hours_" : ["%n小時"], + "_%n day_::_%n days_" : ["%n天"], + "_%n week_::_%n weeks_" : ["%n週"], + "Custom expiration time" : "自訂過期時間", + "Message expiration disabled" : "已停用訊息過期", + "Message expiration set: {duration}" : "訊息過期設定:{duration}", + "Error when trying to set message expiration" : "嘗試設定訊息過期時發生錯誤", + "Message expiration" : "訊息過期", + "Chat messages can be expired after a certain time. Note: Files shared in chat will not be deleted for the owner, but will no longer be shared in the conversation." : "聊天訊息可能會在一定時間後過期。注意:在聊天中分享的檔案不會為所有者刪除,但將不再於對話中被分享。", + "Set message expiration" : "設定訊息過期", + "Current message expiration" : "目前的訊息過期", + "Password copied to clipboard" : "密碼已複製到剪貼簿", + "Password could not be copied" : "無法複製密碼", + "Guest access" : "訪客存取", + "Breakout rooms are not allowed in public conversations." : "不允許在分組討論室進行公開對話。", + "Allow guests to join this conversation via link" : "允許訪客透過連結加入此對話", + "Password protection" : "密碼保護", + "This conversation is password-protected. Guests need password to join" : "此對話受密碼保護。訪客需要密碼才能加入", + "Password protection is needed for public conversations" : "公開對話需要密碼保護", + "Set a password" : "設定密碼", + "Change password" : "變更密碼", + "Enter new password" : "輸入新密碼", + "Save password" : "儲存密碼", + "Copy password" : "複製密碼", + "Guests are allowed to join this conversation via link" : "允許訪客透過連結加入此對話", + "Guests are not allowed to join this conversation" : "不允許訪客透過連結加入此對話", + "Resend invitations" : "重新傳送邀請", + "This conversation is open to both registered users and users created with the Guests app" : "此對話已同時對已註冊的使用者與使用訪客應用程式建立的使用者開放", + "This conversation is open to registered users" : "此對話對已註冊的使用者開放", + "This conversation is limited to the current participants" : "此對話僅限目前參與者", + "You opened the conversation to both registered users and users created with the Guests app" : "您同時向已註冊使用者與使用訪客應用程式建立的使用者開放了對話", + "Error occurred when opening or limiting the conversation" : "開啟或限制對話時發生錯誤", + "Open conversation to registered users, showing it in search results" : "向註冊使用者開放對話時並在搜尋結果中顯示", + "Also open to users created with the Guests app" : "同時對使用訪客應用程式建立的使用者開放", + "Open conversation" : "開啟對話", + "Set language spoken in calls" : "設定通話語言", + "Languages could not be loaded" : "無法載入語言", + "Loading languages …" : "正在載入語言……", + "Invalid language" : "無效的語言", + "Default language (English)" : "預設語言(英文)", + "Default live transcription language set" : "預設即時轉錄語言集", + "Live transcription language set: {languageName}" : "即時轉錄語言集:{languageName}", + "Error when trying to set live transcription language" : "嘗試設定即時轉錄語言時發生錯誤", + "Start time: {date}" : "開始時間:{date}", + "Start time has been updated" : "開始時間已更新", + "Error occurred while updating start time" : "更新開始時間時發生錯誤", + "Enabling the lobby will remove non-moderators from the ongoing call." : "啟用大廳將從正在進行的通話中移除非主持人。", + "Enable lobby, restricting the conversation to moderators" : "啟用大廳,將對話限制為主持人", + "Meeting start time" : "會議開始時間", + "Start time (optional)" : "開始時間(選擇性)", + "Import email participants" : "匯入電子郵件參與者", + "You can import a list of email participants from a CSV file." : "您可以從 CSV 檔案匯入電子郵件參與者清單。", + "Poll drafts" : "投票草稿", + "Browse poll drafts" : "瀏覽投票草稿", + "Error occurred when locking the conversation" : "鎖定對話時發生錯誤", + "Error occurred when unlocking the conversation" : "解除鎖定對話時發生錯誤", + "Lock conversation" : "鎖定對話", + "This will also terminate the ongoing call." : "這也會終止正在進行的通話。", + "Lock the conversation to prevent anyone to post messages or start calls" : "鎖定對話以防止任何人發佈訊息或開始通話", + "Edit" : "編輯", + "More information" : "更多資訊", + "Delete" : "刪除", + "Add new bridged channel to current conversation" : "向目前對話新增新的橋接頻道", + "unknown state" : "未知狀態", + "running" : "執行中", + "not running, check Matterbridge log" : "未執行,請檢查 Matterbridge 紀錄檔", + "not running" : "未執行", + "Bridge saved" : "橋接已儲存", + "You can bridge channels from various instant messaging systems with Matterbridge." : "您可以使用 Matterbridge 橋接來自各種即時通訊系統的頻道。", + "More info on Matterbridge" : "更多關於 Matterbridge 的資訊", + "Messaging systems" : "訊息系統", + "Enable bridge" : "啟用橋接", + "Show Matterbridge log" : "顯示 Matterbridge 紀錄檔", + "Log content" : "記錄內容", + "Only moderators are allowed to mention @all" : "僅允許主持人提及 @all", + "All participants are allowed to mention @all" : "所有參與者都可以提及 @all", + "Participants are now allowed to mention @all." : "現在參與者可以提及 @all。", + "Mentioning @all has been limited to moderators." : "提及 @all 的權限已限於主持人。", + "Allow participants to mention @all" : "允許參與者提及 @all", + "Mention permissions" : "提及權限", + "Notifications" : "通知", + "Notify about calls in this conversation" : "在此對話中有通話時通知", + "Important conversation" : "重要交談", + "\"Do not disturb\" user status is ignored for important conversations" : "重要對話會忽略「請勿打擾」使用者狀態", + "Sensitive conversation" : "敏感對話", + "Message preview will be disabled in conversation list and notifications" : "對話清單與通知中的訊息預覽將停用", + "Recording consent is required for calls in this conversation" : "在此次對話中,需要獲得錄製同意", + "Recording consent is not required for calls in this conversation" : "在此次對話中,不需要獲得錄製同意", + "Recording consent requirement was updated" : "錄製同意要求已更新", + "Error occurred while updating recording consent" : "更新錄製同意時發生錯誤", + "Recording Consent" : "錄製同意", + "Recording consent cannot be changed once a call or breakout session has started." : "通話或分組會議開始後,錄製同意就無法更改。", + "Require recording consent before joining call in this conversation" : "在此對話中,需要在加入通話前給予錄製同意", + "Recording consent is required for all calls" : "所有通話都需要獲得錄製同意", + "SIP dial-in is now possible without PIN requirement" : "SIP 撥入現在不需要 PIN 碼", + "SIP dial-in is now enabled" : "SIP 撥入現在已啟用", + "SIP dial-in is now disabled" : "SIP 撥入現在已停用", + "Error occurred when enabling SIP dial-in" : "啟用 SIP 撥入時發生錯誤", + "Error occurred when disabling SIP dial-in" : "停用 SIP 撥入時發生錯誤", + "Phone and SIP dial-in" : "電話與 SIP 撥入", + "Enable phone and SIP dial-in" : "啟用電話與 SIP 撥入", + "Allow to dial-in without a PIN" : "允許在沒有 PIN 碼的情況下撥入", + "Ongoing" : "持續進行", + "{dayPrefix} {dateTime}" : "{dayPrefix} {dateTime}", + "_%n person accepted_::_%n people accepted_" : ["已接受 %n 個人"], + "_%n person declined_::_%n people declined_" : ["已拒絕 %n 個人"], + "_and %n other attachment_::_and %n other attachments_" : ["以及 %n 個其他附件"], + "With {displayName}" : "與 {displayName}", + "In {conversation}" : "在 {conversation} 中", + "View attachment" : "檢視附件", + "Join" : "加入", + "View conversation" : "檢視對話", + "View event on Calendar" : "在日曆上檢視活動", + "Error while creating the conversation" : "建立對話時發生錯誤", + "Hello, {displayName}" : "嗨,{displayName}", + "Start meeting now" : "立刻開始會議", + "Give your meeting a title" : "為您的會議命名", + "Create and copy link" : "建立並複製連結", + "Create a new conversation" : "建立新對話", + "Join open conversations" : "加入開放對話", + "Call a phone number" : "撥打電話號碼", + "Scroll backward" : "向後捲動", + "Scroll forward" : "向前捲動", + "Schedule meetings" : "安排會議", + "You don't have any upcoming meetings" : "您沒有任何即將舉行的會議", + "Calendar events with a conversation link as the location are shown here" : "此處顯示將對話連結設為地點的行事曆活動", + "Open calendar" : "開啟日曆", + "Unread mentions" : "未讀的提及", + "Messages where you were mentioned will show up here. You can mention people by typing @ followed by their name" : "提及您的訊息將顯示於此處。您可以透過輸入 @ 加上對方姓名來標記他人。", + "Upcoming reminders" : "即將到來的提醒", + "Message reminders" : "訊息提醒", + "Set a reminder on a message to be notified" : "在訊息上設定提醒以接收通知", + "Start a group conversation" : "開始群組對話", + "Create conversation" : "建立對話", + "Enter your name" : "輸入您的名稱", + "Submit name and join" : "遞交名稱並加入", + "Do you already have an account?" : "您已經有帳號了嗎?", + "Log in" : "登入", + "Error while verifying uploaded file" : "驗證上傳的檔案時發生錯誤", + "Uploaded file is verified" : "已驗證上傳的檔案", + "Content format is comma-separated values (CSV):
- Header line is required and must match \"name\",\"email\" or just \"email\"
- One entry per line (e.g. \"John Doe\",\"john@example.tld\")" : "內容格式為逗號分隔值 (CSV):
- 標題行為必填,且必須符合 \"name\",\"email\"\"email\"
- 一個條目一行(例如 \"John Doe\",\"john@example.tld\")", + "Participants added successfully" : "參與者新增成功", + "Error while adding participants" : "新增參與者時發生錯誤", + "Import a file" : "匯入檔案", + "Browse" : "瀏覽", + "Verifying uploaded file …" : "正在驗證已上傳的檔案……", + "This might take a moment" : "這可能需要一段時間", + "Send invitations" : "傳送邀請", + "_%n invalid email_::_%n invalid emails_" : ["%n 個無效的電子郵件"], + "_%n email is already imported or a duplicate_::_%n emails are already imported or duplicates_" : ["有 %n 個電子郵件匯入過或重複"], + "_%n invitation can be sent_::_%n invitations can be sent_" : ["可以傳送 %n 個邀請"], + "An error occurred while calling a phone number" : "撥打電話號碼時發生錯誤", + "Phone number could not be called: {error}" : "無法撥打電話號碼:{error}", + "Phone number could not be called" : "無法撥打電話號碼", + "Search participants or phone numbers" : "搜尋參與者或電話號碼", + "Creating the conversation …" : "正在建立對話……", + "Mark as read" : "標為已讀", + "Mark as unread" : "標為未讀", + "Remove from favorites" : "從我的最愛移除", + "Add to favorites" : "新增至我的最愛", + "Unarchive conversation" : "解除封存對話", + "Ignore \"Do not disturb\"" : "忽略「請勿打擾」", + "You need to promote a new moderator before you can leave the conversation." : "在您離開對話前,您必須授權一位新的主持人。", + "Conversation actions" : "對話動作", + "Notify about calls" : "通話通知", + "Hide message text" : "隱藏訊息文字", + "Pending invitations" : "擱置中的邀請", + "Join conversations from other servers" : "加入來自其他伺服器的對話", + "From {user} at {remoteServer}" : "來自 {remoteServer} 的 {user}", + "Decline invitation" : "婉拒邀請", + "Accept invitation" : "接受邀請", + "No pending invitations" : "沒有待處理的邀請", + "Home" : "家庭", + "Unread" : "未讀", + "Mentions" : "提及", + "Meetings" : "會議", + "Sort conversations" : "排序對話", + "By recent activity" : "按最近活動排序", + "Alphabetically" : "字母", + "Do not group by type" : "請勿按類型分組", + "Show private ones first" : "先顯示私人訊息", + "Show group ones first" : "先顯示群組訊息", + "No followed threads" : "沒有追蹤的討論串", + "No matches found" : "找不到符合的項目", + "No conversations found" : "找不到任何對話", + "You have no archived conversations." : "您沒有已封存的對話。", + "Subscribe to an existing thread or start your own." : "訂閱既有的討論串或開啟您的討論串。", + "You have no unread mentions." : "您沒有未讀的提及。", + "You have no unread messages." : "您沒有未讀的訊息。", + "An error occurred while performing the search" : "搜尋時發生了錯誤", + "Conversation list" : "對話清單", + "Filter conversations by" : "按以下條件過濾對話", + "Unread messages" : "未讀訊息", + "Meeting conversations" : "會議對話", + "Clear filters" : "清除過濾條件", + "New personal note" : "新個人註記", + "SIP backend is not installed" : "未安裝 SIP 後端", + "Back to conversations" : "回到對話", + "Archived conversations" : "已封存的對話", + "Threads" : "討論串", + "Clear filter" : "清除過濾條件", + "Show more threads" : "顯示更多討論串", + "App settings" : "應用程式設定", + "Users" : "使用者", + "Groups" : "群組", + "Teams" : "團隊", + "Federated users" : "聯盟使用者", + "New private conversation" : "新私人對話", + "Other sources" : "其他來源", + "Open conversations" : "開啟對話", + "No search results" : "無搜尋結果", + "Users, groups and teams" : "使用者、群組與團隊", + "Users and groups" : "使用者與群組", + "Users and teams" : "使用者與團隊", + "Groups and teams" : "群組與團隊", + "New group conversation" : "新群組對話", + "The meeting will start soon" : "會議即將開始", + "This meeting is scheduled for {startTime}" : "此會議定於 {startTime} 開始", + "You are currently waiting in the lobby" : "您目前正在大廳等候", + "Enable noise suppression" : "啟用雜訊抑制", + "Reduce background noises for better voice quality" : "降低背景雜音,改善語音品質", + "Enable echo cancellation" : "啟用迴音消除", + "Minimize echo effect from own surrounding" : "盡量減少自身周圍環境造成的迴音效應", + "Enable auto gain control" : "啟用自動增益控制", + "Dynamically adjust microphone volume for consistent level" : "動態調整麥克風音量以維持穩定音量", + "Select microphone" : "選取麥克風", + "No microphone available" : "沒有可用的麥克風", + "Select speaker" : "選取喇叭", + "No speaker available" : "沒有可用的喇叭", + "Select camera" : "選取網路攝影機", + "No camera available" : "沒有可用的網路攝影機", + "Select a device" : "選取裝置", + "Playing …" : "正在播放……", + "Test speakers" : "測試喇叭", + "Test" : "測試", + "Devices" : "裝置", + "Backgrounds" : "背景", + "No audio" : "沒有音訊", + "No camera" : "沒有網路攝影機", + "Display video as you will see it (mirrored)" : "顯示您將看到的視訊(鏡像)", + "Display video as others will see it" : "以其他人看到的方式顯示視訊", + "Calls are not supported in your browser" : "您的瀏覽器不支援通話", + "Access to microphone is only possible with HTTPS" : "僅使用 HTTPS 時才能存取麥克風", + "Access to microphone was denied" : "無法存取麥克風", + "Error while accessing microphone" : "存取麥克風時發生錯誤", + "Access to camera is only possible with HTTPS" : "僅使用 HTTPS 時才能存取網路攝影機", + "The call is being recorded." : "通話正在錄音。", + "The call might be recorded." : "通話可能會被錄製。", + "The recording might include your voice, video from camera, and screen share. Your consent is required before joining the call." : "錄製可能包含您的聲音、來自攝影機的影像與螢幕分享。在加入通話前,需要獲得您的同意。", + "Give consent to the recording of this call" : "對此通話的錄製給予同意", + "Show more info" : "顯示更多資訊", + "Audio is not available" : "音訊不可用", + "Video is not available" : "視訊不可用", + "Start recording immediately with the call" : "通話後立刻開始錄音", + "Recording backend is not installed" : "未安裝錄製後端", + "Notify all participants about this call" : "通知所有參與者此通話", + "Apply settings" : "套用設定", + "Select virtual office background" : "選取虛擬辦公室背景", + "Select virtual home background" : "選取虛擬家庭背景", + "Select virtual abstract background" : "選取虛擬抽象背景", + "Select virtual beach background" : "選取虛擬海灘背景", + "Select virtual park background" : "選取虛擬公園背景", + "Select virtual theater background" : "選取虛擬電影院背景", + "Select virtual library background" : "選取虛擬圖書館背景", + "Select virtual space station background" : "選取虛擬太空站背景", + "Error while uploading the file" : "上傳檔案時發生錯誤", + "Select a file" : "選取檔案", + "Invalid path selected" : "所選的路徑無效", + "Select virtual background from file {fileName}" : "選取來自 {fileName} 檔案的虛擬背景", + "Blur" : "模糊", + "Upload" : "上傳", + "Files" : "檔案", + "(editing)" : "(正在編輯)", + "(edited)" : "(已編輯)", + "The message has expired or has been deleted" : "訊息已過期或已被刪除", + "Cancel quote" : "取消引用", + "24 hours" : "24小時", + "7 days" : "7天", + "30 days" : "30 天", + "Until unpin" : "直到取消釘選", + "Clear reminder – {timeLocale}" : "清除提醒 – {timeLocale}", + "Edited by {actor}" : "由 {actor} 編輯", + "Pinned by you" : "由您釘選", + "Pinned by {actor}" : "由 {actor} 釘選", + "Until {absoluteDate}" : "直到 {absoluteDate}", + "Message text copied to clipboard" : "訊息文字已複製到剪貼簿", + "Message text could not be copied" : "訊息文字無法複製", + "Message forwarded to \"Note to self\"" : "訊息已轉寄至「給自己的筆記」", + "Error while forwarding message to \"Note to self\"" : "轉寄訊息到「給自己的筆記」時發生錯誤", + "A reminder was successfully removed" : "已成功移除提醒", + "Error occurred when removing a reminder" : "移除提醒時發生錯誤", + "A reminder was successfully set at {datetime}" : "已成功設定於 {datetime} 的提醒", + "Error occurred when creating a reminder" : "建立提醒時發生錯誤", + "Add a reaction to this message" : "新增反應至此訊息", + "Reply" : "回覆", + "More actions" : "更多動作", + "Set reminder" : "設定提醒", + "Pin message" : "釘選訊息", + "Unpin message" : "取消釘選訊息", + "Reply privately" : "私下回覆", + "Edit message" : "編輯訊息", + "Copy message" : "複製訊息", + "Copy message link" : "複製訊息連結", + "Go to file" : "前往檔案", + "Download file" : "下載檔案", + "Go to thread" : "到討論串", + "Edit thread details" : "編輯討論串詳細資訊", + "Forward message" : "轉寄訊息", + "Translate" : "翻譯", + "Set custom reminder" : "設定自訂提醒", + "Keep pinned for" : "維持釘選狀態", + "Set custom period" : "設定自訂週期", + "Close reactions menu" : "關閉反應選單", + "React with {emoji}" : "使用 {emoji} 做出反應", + "React with another emoji" : "使用其他表情符號做出反應", + "Choose a conversation to forward the selected message." : "選擇所選訊息將轉寄的目標對話。", + "Error while forwarding message" : "轉寄訊息時發生錯誤", + "The message has been forwarded to {selectedConversationName}" : "訊息已轉寄至 {selectedConversationName}", + "Dismiss" : "取消", + "Go to conversation" : "前往對話", + "Detect language" : "偵測語言", + "The message could not be translated" : "無法翻譯訊息", + "Translation copied to clipboard" : "翻譯已複製到剪貼簿", + "Translation could not be copied" : "無法複製翻譯", + "Translate message" : "翻譯訊息", + "Source language to translate from" : "要翻譯的來源語言", + "Translate from" : "翻譯從", + "Target language to translate into" : "要翻譯至的目標語言", + "Translate to" : "翻譯至", + "Translating" : "正在翻譯", + "This translation is AI generated and may contain mistakes." : "此翻譯為人工智慧產生,可能會出錯。", + "Copy translated text" : "複製已翻譯的文字", + "Error when scheduling the message" : "安排訊息時發生錯誤", + "Reschedule" : "重新安排", + "Send now" : "立刻傳送", + "Choose a time" : "選擇時間", + "Send at custom time" : "於自訂時間傳送", + "Will be sent without notification" : "將不另行通知即寄出", + "Message read by everyone who shares their reading status" : "已分享閱讀狀態的所有人都閱讀了此訊息", + "Message sent" : "已傳送郵件", + "Sent without notification" : "傳送而不通知", + "Deleting message" : "正在刪除訊息", + "Message deleted successfully, but a bot or Matterbridge is configured and the message might already be distributed to other services" : "訊息已成功刪除,但已設定機器人或 Matterbridge,訊息可能已散佈至其他服務", + "Message deleted successfully" : "訊息已刪除成功", + "Message could not be deleted because it is too old" : "訊息太舊,無法刪除", + "Only normal chat messages can be deleted" : "只能刪除一般聊天訊息", + "An error occurred while deleting the message" : "刪除訊息時發生錯誤", + "Pinned" : "已釘選", + "Your browser does not support playing audio files" : "您的瀏覽器不支援播放音訊檔案", + "Contact" : "聯絡人", + "{stack} in {board}" : "{stack} 於 {board}", + "Deck Card" : "Deck 卡片", + "Remove {fileName}" : "移除 {fileName}", + "Open this location in OpenStreetMap" : "在 OpenStreetMap 中開啟此位置", + "_%n reply_::_%n replies_" : ["%n 個回覆"], + "Sending message" : "傳送訊息", + "Failed to send the message. Click to try again" : "傳送訊息失敗。點擊重試", + "Not enough free space to upload file" : "可用空間不足,無法上傳檔案", + "You cannot send messages to this conversation at the moment" : "您目前無法向此對話傳送訊息", + "Could not update the message" : "無法更新訊息", + "Reply to thread \"{threadTitle}\"" : "回覆至討論串「{threadTitle}」", + "_You voted • %n vote_::_You voted • %n votes_" : ["您已投票 • %n 票"], + "You voted" : "您已投票", + "_Click to vote • %n vote_::_Click to vote • %n votes_" : ["點選以投票 • %n 票"], + "Click to vote" : "點選以投票", + "_Poll draft • %n option_::_Poll draft • %n options_" : ["投票草稿 • %n 個選項"], + "_%n vote_::_%n votes_" : ["%n 個投票"], + "Edit poll draft" : "編輯投票草稿", + "Delete poll draft" : "刪除投票草稿", + "Open poll" : "開放投票", + "Closed poll" : "已關閉的投票", + "See results" : "檢視結果", + "Reactions" : "反應", + "No permission to post reactions in this conversation" : "無權在此對話中張貼反應", + "and {participant}" : "與 {participant}", + "_and %n other participant_::_and %n other participants_" : ["及 %n 位其他參與者"], + "Show all reactions" : "顯示所有反應", + "Add more reactions" : "新增更多反應", + "Show or collapse system messages" : "顯示或折疊系統訊息", + "No messages" : "沒有訊息", + "All messages have expired or have been deleted." : "所有訊息都已過期或已刪除。", + "Generate summary with AI" : "使用人工智慧產生摘要", + "{author} (pinned by you)" : "{author}(由您釘選)", + "{author} (pinned by {actor})" : "{author}(由 {actor} 釘選)", + "Unpin" : "取消釘選", + "Cancel search" : "取消搜尋", + "Add a phone number" : "新增電話號碼", + "Error: A password is required to create the conversation." : "錯誤:建立對話需要密碼。", + "All set, the conversation \"{conversationName}\" was created." : "一切就緒,對話「{conversationName}」已建立。", + "Create a new group conversation" : "建立新群組對話", + "Add participants" : "新增參與者", + "Maximum length exceeded ({maxlength} characters)" : "超出最大長度({maxlength} 個字元)", + "Conversation type" : "對話類型", + "Conversation visibility" : "對話能見度", + "Allow guests to join via link" : "允許訪客透過連結加入", + "Enter password" : "輸入密碼", + "This conversation has been locked" : "此對話已鎖定", + "No permission to post messages in this conversation" : "無權在此對話中發佈訊息", + "Joining conversation …" : "正在加入對話……", + "Write a message without notification" : "撰寫訊息而不通知", + "Create a thread silently" : "默默建立討論串", + "Create a thread" : "建立討論串", + "Send message silently" : "無聲傳送訊息", + "Send message" : "傳送訊息", + "Send without notification" : "傳送而不通知", + "The participant will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Participants will not be notified about new messages" : "參與者將不會收到新訊息通知", + "Message will be sent {datetimeString}" : "訊息將於 {datetimeString} 傳送", + "Thread title is required" : "討論串標題為必填", + "Message text is required" : "訊息文字為必填", + "The message could not be edited" : "無法編輯訊息", + "File to share" : "要分享的檔案", + "File upload is not available in this conversation" : "此對話中無法上傳檔案", + "Message was successfully scheduled" : "訊息已成功排定", + "Add emoji" : "新增表情符號", + "Adding a mention will only notify users who did not read the message." : "新增提及僅會通知尚未閱讀訊息的使用者。", + "Thread title" : "討論串標題", + "Send later" : "稍後傳送", + "Show scheduled messages" : "顯示已排定的訊息", + "Cancel editing" : "取消編輯", + "Schedule message" : "安排訊息", + "{user} is out of office and might not respond." : "{user} 不在辦公室,可能不會回覆。", + "Absence period: {startDate} - {endDate}" : "缺席時段:{startDate} - {endDate}", + "Replacement:" : "取代:", + "Share from {nextcloud}" : "透過 {nextcloud} 分享", + "Share from Files" : "從「檔案」分享", + "Share files to the conversation" : "分享檔案至對話", + "Upload from device" : "從裝置上傳", + "Create new poll" : "新增一項調查", + "Smart picker" : "智慧型挑選器", + "Record voice message" : "錄製語音訊息", + "End recording and send" : "結束錄製並傳送", + "Dismiss recording" : "取消錄音", + "Access to the microphone was denied" : "無法存取麥克風", + "Microphone either not available or disabled in settings" : "麥克風不可用或已在設定中被停用", + "Error while recording audio" : "錄製音訊時發生錯誤", + "Voice message {time} ({conversation})" : "語音訊息 {time} ({conversation})", + "Generating summary of unread messages …" : "正在產生未讀訊息的摘要……", + "Summary is AI generated and might contain mistakes" : "摘要為人工智慧產生,可能有錯", + "Error occurred during a summary generation" : "產生摘要時發生錯誤", + "New file" : "新增檔案", + "Blank" : "空白", + "Error while creating file" : "建立檔案時發生錯誤", + "Create and share a new file" : "建立並分享新檔案", + "Name of the new file" : "新檔案的名稱", + "Create file" : "建立檔案", + "Someone is typing …" : "有人在打字……", + "{user1} is typing …" : "{user1} 在打字……", + "{user1} and {user2} are typing …" : "{user1} 與 {user2} 在打字……", + "{user1}, {user2} and {user3} are typing …" : "{user1}、{user2} 與 {user3} 在打字……", + "_{user1}, {user2}, {user3} and %n other are typing …_::_{user1}, {user2}, {user3} and %n others are typing …_" : ["{user1}、{user2}、{user3} 與 %n 個其他人在打字……"], + "Add more files" : "新增更多檔案", + "Send" : "傳送", + "In this conversation {user} can:" : "在此對話中,{user} 可以:", + "Edit default permissions for participants in {conversationName}" : "編輯 {conversationName} 中參與者的預設權限", + "Start a call" : "開始通話", + "Skip the lobby" : "略過大廳", + "Can post messages" : "可以張貼訊息", + "Can post messages and reactions" : "可以發佈訊息與反應", + "Can add reactions" : "可以新增反應", + "Enable the microphone" : "啟用麥克風", + "Enable the camera" : "啟用網路攝影機", + "Share the screen" : "分享螢幕", + "Update permissions" : "更新權限", + "Updating permissions" : "正在更新權限", + "No poll drafts" : "沒有投票草稿", + "There is no poll drafts yet saved for this conversation" : "此對話尚未儲存任何投票草稿", + "Create poll in {name}" : "在 {name} 建立投票", + "Create poll" : "建立投票", + "Error while importing poll" : "匯入投票時發生錯誤", + "Question" : "問題", + "Ask a question" : "詢問問題", + "Import draft from file" : "從檔案匯入草稿", + "Answers" : "答案", + "Answer {option}" : "答案 {option}", + "Delete poll option" : "刪除投票選項", + "Add answer" : "新增答案", + "Settings" : "設定", + "Anonymous poll" : "匿名投票", + "Multiple answers" : "多個答案", + "Save as draft" : "儲存為草稿", + "Export draft to file" : "將草稿匯出至檔案", + "_Final results • %n vote_::_Final results • %n votes_" : ["最終結果 • %n 票"], + "Your vote is anonymous" : "您的投票是匿名的", + "You voted for this option" : "您投了此選項", + "End poll" : "結束投票", + "Change your vote" : "變更您的投票", + "Withdraw vote" : "撤回投票", + "Results" : "結果", + "Download as spreadsheet" : "下載為試算表", + "Download as CSV" : "下載為 CSV", + "Voted participants" : "已投票的參與者", + "Send a message to \"{roomName}\"" : "傳送訊息給「{roomName}」", + "Hide list of participants" : "隱藏參與者清單", + "Show list of participants" : "顯示參與者清單", + "Assistance requested in {roomName}" : "{roomName} 請求協助", + "The message was sent to \"{roomName}\"" : "訊息已傳送至「{roomName}」", + "Dismiss request for assistance" : "撤銷協助請求", + "Send message to room" : "傳送訊息至聊天室", + "Back to main room" : "回到主聊天室", + "Back to your room" : "回到您的聊天室", + "Message all rooms" : "向所有聊天室傳送訊息", + "Start session" : "開始工作階段", + "Start a call before you start a breakout room session" : "在開始分組討論室工作階段之前開始通話", + "Stop session" : "停止工作階段", + "The message was sent to all breakout rooms" : "訊息已傳送至所有分組討論室", + "Send a message to all breakout rooms" : "傳送訊息至所有分組討論室", + "Breakout rooms are not started" : "分組討論室尚未啟動", + "Calls without High-performance backend can cause connectivity issues and high load on devices. {linkstart}Learn more{linkend}" : "沒有高效能後端的通話可能會造成連線問題與裝置上的高負載。{linkstart}取得更多資訊{linkend}", + "Talk setup incomplete" : "未完成 Talk 設定", + "Disable lobby" : "停用大廳", + "Settings for participant \"{user}\"" : "參與者「{user}」的設定", + "Participant \"{user}\"" : "參與者「{user}」", + "moderator" : "主持人", + "bot" : "機器人", + "guest" : "訪客", + "Ringing …" : "鈴聲響起……", + "Call rejected" : "通話已拒絕", + "{time} talking …" : "{time} 正在說話……", + "{time} talking time" : "{time} 說話時間", + "Raised their hand" : "舉手了", + "Joined with video" : "使用視訊加入", + "Joined via phone" : "使用電話加入", + "Joined with audio" : "使用音訊加入", + "The text must be less than or equal to {maxLength} characters long. Your current text is {charactersCount} characters long." : "文字的長度必須小於或等於 {maxLength} 個字元。您目前的文字長度為 {charactersCount} 個字元。", + "Remove group and members" : "移除群組與成員", + "Remove team and members" : "移除團隊與成員", + "Remove participant" : "移除參與者", + "Do you really want to remove group \"{displayName}\" and its members from this conversation?" : "你確定要將群組「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove team \"{displayName}\" and its members from this conversation?" : "你確定要將團隊「{displayName}」及其成員從此對話中移除嗎?", + "Do you really want to remove {displayName} from this conversation?" : "您真的想要將 {displayName} 從此對話中移除嗎?", + "Notification was sent to {displayName}" : "通知已傳送給 {displayName}", + "Could not send notification to {displayName}" : "無法傳送通知給 {displayName}", + "Permissions granted to {displayName}" : "已將權限授予 {displayName}", + "Could not modify permissions for {displayName}" : "無法修改 {displayName} 的權限", + "Permissions removed for {displayName}" : "移除了 {displayName} 的權限", + "Permissions set to default for {displayName}" : "{displayName} 的權限已設定為預設值", + "Phone number could not be hung up" : "無法掛斷電話號碼", + "Phone number could not be put on hold" : "無法保留電話號碼", + "Phone number could not be muted" : "無法靜音電話號碼", + "Phone number could not be unmuted" : "無法取消靜音電話號碼", + "DTMF message could not be sent" : "無法傳送 DTMF 訊息", + "Phone number copied to clipboard" : "電話號碼已複製到剪貼簿", + "Phone number could not be copied" : "無法複製電話號碼", + "in the lobby" : "在大廳中", + "Dial out phone" : "撥出電話", + "Hang up phone" : "掛斷電話", + "Move back to lobby" : "移動回大廳", + "Move to conversation" : "移動至對話", + "Dial-in PIN" : "撥入 PIN 碼", + "Demote from moderator" : "取消主持人資格", + "Promote to moderator" : "授予主持人資格", + "Resend invitation" : "重新傳送邀請", + "Send call notification" : "傳送通話通知", + "Dial out phone number" : "撥出電話號碼", + "Resume call for phone number" : "恢復電話號碼的通話", + "Put phone number on hold" : "保留電話號碼", + "Unmute phone number" : "取消電話號碼靜音", + "Mute phone number" : "將電話號碼靜音", + "Copy phone number" : "複製電話號碼", + "Reset custom permissions" : "重設自訂權限", + "Grant all permissions" : "授予所有權限", + "Remove all permissions" : "移除所有權限", + "Also ban from this conversation" : "也從此對話中封鎖", + "Internal note (reason to ban)" : "內部備註(封鎖理由)", + "Remove" : "移除", + "Permissions modified for {displayName}" : "修改了 {displayName} 的權限", + "Add users, groups or teams" : "新增使用者、群組或團隊", + "Add users or groups" : "新增使用者或群組", + "Add users or teams" : "新增使用者或團隊", + "Add users" : "新增使用者", + "Add groups or teams" : "新增群組或團隊", + "Add groups" : "新增群組", + "Add teams" : "新增團隊", + "Add other sources" : "新增其他來源", + "Add emails" : "新增電子郵件", + "Integrations" : "整合", + "Add federated users" : "新增聯盟使用者", + "Searching …" : "正在搜尋……", + "Search for more users" : "搜尋更多使用者", + "You can search or add participants via name, email, or Federated Cloud ID" : "您可以透過名稱、電子郵件或雲端聯盟 ID 搜尋或新增參與者", + "Search or add participants" : "搜尋或新增參與者", + "Invitation was sent to {actorId}" : "邀請已傳送至 {actorId}", + "An error occurred while adding the participants" : "新增參與者時發生了錯誤", + "A new group conversation with selected participant will be created" : "將會建立包含選定參與者的新群組對話", + "Participants" : "參與者", + "Pinned by a deleted user" : "由已刪除的使用者釘選", + "Participants ({count})" : "參與者 ({count})", + "Open chat" : "開啟聊天", + "You have new unread messages in the chat." : "您在聊天中有新的未讀訊息。", + "You have been mentioned in the chat." : "您已在聊天中被提及。", + "Search messages" : "搜尋訊息", + "Chat" : "聊天", + "Details" : "詳細資訊", + "Shared items" : "已分享項目", + "Search in {name}" : "在 {name} 中搜尋", + "Threads in {name}" : "在 {name} 的討論串", + "{actor} in {conversation}" : "{conversation} 中的 {actor}", + "Search messages …" : "搜尋訊息……", + "Search options" : "搜尋選項", + "From User" : "來自使用者", + "Since" : "自", + "Until" : "直到", + "No results found" : "找不到結果", + "Load more results" : "載入更多結果", + "Recent threads" : "最近的討論串", + "Projects" : "專案", + "No shared items" : "無已分享項目", + "Thread notifications" : "討論串通知", + "Thread actions" : "討論串動作", + "{actor}: {lastMessage}" : "{actor}:{lastMessage}", + "Link to a conversation" : "連結至對話", + "No open conversations found" : "找不到開放對話", + "Either there are no open conversations or you joined all of them." : "可能是沒有公開對話,或是您已經加入了所有開放對話。", + "Check spelling or use complete words." : "檢查拼寫或使用完整單字。", + "Search conversations or users" : "搜尋對話或使用者", + "Select conversation" : "選擇對話", + "Number length is not valid" : "號碼長度無效", + "Region code is not valid" : "區碼無效", + "Number length is too short" : "號碼長度太短", + "Number length is too long" : "號碼長度太長", + "Number is not valid" : "號碼無效", + "Phone numbers" : "電話號碼", + "Display name: {name}" : "顯示名稱:{name}", + "Edit display name" : "編輯顯示名稱", + "Display name (required)" : "顯示名稱(必填)", + "Save name" : "儲存名稱", + "I picked message bubbles" : "我選了訊息泡泡", + "I picked the list style" : "我挑選了清單樣式", + "Error while setting personal setting" : "設定個人設定時發生錯誤", + "Error while saving sounds setting" : "儲存音訊設定時發生錯誤", + "Compact conversations list" : "簡潔對話清單", + "Chat appearance" : "聊天外觀", + "Messages list" : "訊息清單", + "Message bubbles" : "訊息泡泡", + "Play sounds when participants join or leave a call" : "參與者加入或離開通話時播放音訊", + "Currently not available on iPhone and iPad due to technical restrictions by the manufacturer" : "由於製造商的技術限制,目前在 iPhone 與 iPad 上無法使用", + "Notification settings" : "通知設定", + "Sounds for chat and call notifications" : "聊天與通話通知的音效", + "Invalid language ({languageId})" : "無效的語言 ({languageId})", + "Default language" : "預設語言", + "Default language ({languageName})" : "預設語言 ({languageName})", + "Error when trying to load the available live translation languages" : "嘗試載入可用即時翻譯語言時發生錯誤", + "Error when trying to set live translation language" : "嘗試設定即時翻譯語言時發生錯誤", + "Set language used to show the transcriptions" : "設定顯示轉錄內容所使用的語言", + "Select location for attachments" : "選擇附件的位置", + "Error while setting attachment folder" : "設定附件資料夾時出錯", + "Error while setting read status privacy" : "變更閱讀狀態隱私設定時出錯", + "Error while setting typing status privacy" : "設定打字狀態隱私時發生錯誤", + "Error while setting default media state" : "設定預設媒體狀態時發生錯誤", + "Turn camera and microphone off by default" : "預設關閉相機與麥克風", + "Blur camera background by default" : "預設模糊相機背景", + "Skip device preview before joining a call" : "略過加入通話前的裝置預覽", + "Camera will be turned off when joining. Always shown if recording consent is required." : "加入時將關閉攝影機。若需取得錄影同意,此訊息將一律顯示。", + "Appearance & Sounds" : "外觀與音效", + "Privacy" : "隱私", + "Send read receipts" : "傳送讀取回條", + "When off, all read statuses will be hidden" : "關閉時,所有讀取狀態都會被隱藏", + "Share typing status" : "分享輸入狀態", + "When off, all typing indicators will be hidden" : "關閉時,所有輸入指示器都會被隱藏", + "Attachments folder" : "附件資料夾", + "Toggle full screen" : "切換全螢幕", + "Return to Home screen" : "回到主畫面", + "Search" : "搜尋", + "Shortcuts while in a chat" : "聊天中的捷徑", + "Focus the chat input" : "聚焦聊天輸入", + "Unfocus the chat input to use shortcuts" : "取消對聊天輸入的聚焦以使用捷徑", + "Edit your last message" : "編輯您最新的訊息", + "Shortcuts while in a call" : "通話中的捷徑", + "Camera on and off" : "開啟和關閉相機", + "Microphone on and off" : "開啟和關閉麥克風", + "Raise or lower hand" : "舉起或放下手", + "Push to talk or push to mute" : "一鍵通話或一鍵靜音", + "Zoom-in / zoom-out a screen share" : "放大/縮小螢幕分享", + "Mouse wheel" : "滑鼠滾輪", + "Start call silently" : "安靜地開始通話", + "Start call" : "開始通話", + "End call" : "結束通話", + "The server was updated, you cannot start or join a call." : "伺服器已更新,您無法開始或加入通話。", + "This call has just ended" : "此通話剛結束", + "You will be able to join the call only after a moderator starts it." : "您僅能在主持人開始通話後才能加入。", + "End call for everyone" : "為所有人結束通話", + "Starting the recording" : "開始錄音", + "Recording" : "錄音", + "The call has been running for one hour." : "通話已經持續一個小時了。", + "Cancel recording start" : "取消錄音開始", + "Stop recording" : "停止錄音", + "Send a reaction" : "傳送反應", + "React with {reaction}" : "使用 {reaction} 反應", + "All tasks done!" : "所有任務都完成了!", + "_{done} of %n task_::_{done} of %n tasks_" : ["{done}/%n 任務"], + "Add participants to this call" : "新增參與者至此通話", + "_%n participant in call_::_%n participants in call_" : ["通話中有 %n 位參與者"], + "Scheduled messages" : "已排定的訊息", + "You are not allowed to enable screensharing" : "您無權啟用螢幕分享", + "No screensharing" : "沒有螢幕分享", + "Screensharing options" : "螢幕分享選項", + "Enable screensharing" : "啟用螢幕分享", + "Bad sent video and screen quality." : "傳送的視訊與畫面品質不好。", + "Bad sent screen quality." : "傳送的畫面品質不好。", + "Bad sent video quality." : "傳送的視訊品質不好。", + "Bad sent audio, video and screen quality." : "傳送的音訊、視訊與畫面品質不好。", + "Bad sent audio and screen quality." : "傳送的音訊與畫面品質不好。", + "Bad sent audio and video quality." : "傳送的音訊與視訊品質不好。", + "Bad sent audio quality." : "傳送的音訊品質不好。", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable the background blur or your video while doing a screen share." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。為了改善這種狀況,請嘗試在螢幕分享時停用背景模糊或您的視訊。", + "Disable background blur" : "停用背景模糊", + "Your internet connection or computer are busy and other participants might be unable to see your screen. To improve the situation try to disable your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。為了改善這種狀況,請嘗試在螢幕分享時停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to see your screen." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您的螢幕。", + "Your internet connection or computer are busy and other participants might be unable to see you." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法看到您。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試在螢幕分享時停用背景模糊或您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video while doing a screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試在螢幕分享時停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand you and see your screen. To improve the situation try to disable your screenshare." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解您與看到您的螢幕。為了改善這種狀況,請嘗試停用螢幕分享。", + "Disable screenshare" : "停用螢幕分享", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable the background blur or your video." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試停用背景模糊或您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand and see you. To improve the situation try to disable your video." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解與看到您。為了改善這種狀況,請嘗試停用您的視訊。", + "Your internet connection or computer are busy and other participants might be unable to understand you." : "您的網際網路連線或電腦太忙碌,其他參與者可能無法理解您。", + "Screen sharing is not supported by your browser." : "您的瀏覽器不支援螢幕分享", + "Screen sharing requires the page to be loaded through HTTPS." : "螢幕分享要求頁面透過 HTTPS 載入。", + "Screensharing requires the page to be loaded through HTTPS." : "螢幕分享要求頁面透過 HTTPS 載入。", + "An error occurred while starting screensharing." : "開始螢幕分享時發生錯誤。", + "Select virtual background" : "選取虛擬背景", + "Show your screen" : "顯示您的螢幕", + "Stop screensharing" : "停止分享螢幕", + "Mute others" : "將其他人靜音", + "Start recording" : "開始錄音", + "Set up breakout rooms" : "設定分組討論室", + "Download attendance list" : "下載出席名單", + "Open Calendar" : "開啟日曆", + "Remove participant {name}" : "移除參與者 {name}", + "Would you like to delete this conversation?" : "您想要刪除此對話嗎?", + "_This conversation will be automatically deleted for everyone after %n day of inactivity._::_This conversation will be automatically deleted for everyone after %n days of inactivity._" : ["此對話將在 %n 天內不活躍的情況下自動為所有人刪除。"], + "Are you sure you want to delete this conversation?" : "您確定您想要刪除此對話嗎?", + "Delete now" : "立刻刪除", + "Keep" : "保留", + "Open dialpad" : "開啟撥號鍵盤", + "Select a region" : "選取區域", + "Local time: {time}" : "當地時間:{time}", + "Scheduled {datetime}" : "預定於 {datetime}", + "Scheduled for {datetime}" : "預定於 {datetime}", + "Search …" : "搜尋 …", + "Message without mention" : "沒有提及的訊息", + "Mention myself" : "提及自己", + "Mention everyone" : "提及所有人", + "Select a conversation" : "選取對話", + "Select a mode" : "選取模式", + "You do not have permissions to access this conversation." : "您無權存取此對話。", + "Join a different conversation or start a new one." : "加入他對話或開始新的。", + "The conversation does not exist" : "對話不存在", + "Join a conversation or start a new one!" : "加入對話或開始新的!", + "Duplicate session" : "再製工作階段", + "This conversation was opened in another tab. The current server version does not support opening a conversation in multiple tabs." : "此對話已於其他分頁開啟。目前的伺服器版本不支援在多個分頁開啟同一個對話。", + "Creating and joining a conversation with \"{userid}\"" : "使用「{userid}」建立並加入對話", + "Join a conversation or start a new one" : "加入一個對話或者開一個新的", + "Error while joining the conversation" : "加入對話時發生錯誤", + "Another user" : "其他使用者", + "Hey! Are you using the list style or message bubbles?" : "嘿!您想要使用清單樣式或訊息泡泡呢?", + "Nextcloud URL" : "Nextcloud URL", + "Nextcloud user" : "Nextcloud 使用者", + "User password" : "使用者密碼", + "Talk conversation" : "Talk 對話", + "Skip TLS verification" : "略過 TLS 驗證", + "Matrix server URL" : "Matrix 伺服器 URL", + "User" : "使用者", + "Matrix channel" : "Matrix 頻道", + "Mattermost server URL" : "Mattermost 伺服器 URL", + "Mattermost user" : "Mattermost 使用者", + "Team name" : "團隊名稱", + "Channel name" : "頻道名稱", + "Rocket.Chat server URL" : "Rocket.Chat 伺服器 URL", + "User name or email address" : "使用者名稱或電子郵件地址", + "Rocket.Chat channel" : "Rocket.Chat 頻道", + "Zulip server URL" : "Zulip 伺服器 URL", + "Bot user name" : "機器人使用者名稱", + "Bot API key" : "機器人 API 金鑰", + "Zulip channel" : "Zulip 頻道", + "API token" : "API 權杖", + "Slack channel" : "Slack 頻道", + "Server ID or name" : "伺服器 ID 或名稱", + "Channel ID (prefixed with \"ID:\") or name" : "頻道 ID(前綴為「ID:」)或名稱", + "Channel" : "頻道", + "Login" : "帳號", + "Chat ID" : "聊天 ID", + "IRC server URL (e.g. chat.freenode.net:6667)" : "IRC 伺服器 URL(例如 chat.freenode.net:6667)", + "Nickname" : "暱稱", + "Connection password" : "連線密碼", + "IRC channel" : "IRC 頻道", + "Channel password" : "頻道密碼", + "NickServ nickname" : "NickServ 暱稱", + "NickServ password" : "NickServ 密碼", + "Use TLS" : "使用 TLS", + "Use SASL" : "使用 SASL", + "Tenant ID" : "租戶 ID", + "Client ID" : "客戶端 ID", + "Team ID" : "團隊 ID", + "Thread ID" : "討論串 ID", + "XMPP/Jabber server URL" : "XMPP/Jabber 伺服器 URL", + "MUC server URL" : "MUC 伺服器 URL", + "Jabber ID" : "Jabber ID", + "Pinned messages" : "釘選的訊息", + "Media" : "媒體", + "Polls" : "投票", + "Deck cards" : "看板卡片", + "Voice messages" : "語音訊息", + "Locations" : "地點", + "Call recordings" : "通話錄音", + "Audio" : "音訊", + "Show all pinned messages" : "顯示所有釘選訊息", + "Show all media" : "顯示所有媒體", + "Show all files" : "顯示所有檔案", + "Show all polls" : "顯示所有投票", + "Show all deck cards" : "顯示所有看板卡片", + "Show all voice messages" : "顯示所有語音訊息", + "Show all locations" : "顯示所有位置", + "Show all call recordings" : "顯示所有通話錄音", + "Show all audio" : "顯示所有音訊", + "Show all other" : "顯示所有其他東西", + "Follow conversation settings" : "遵循對話設定", + "Group" : "群組", + "Team" : "團隊", + "You reconnected to the call" : "您已重新連線至通話", + "{actor} reconnected to the call" : "{actor} 已重新連線至通話", + "You added {user0} and {user1}" : "您已新增 {user0} 與 {user1}", + "_You added {user0}, {user1} and %n more participant_::_You added {user0}, {user1} and %n more participants_" : ["您已新增 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator added you and {user0}" : "管理員已新增您與 {user0}", + "{actor} added you and {user0}" : "{actor} 已新增您與 {user0}", + "_An administrator added you, {user0} and %n more participant_::_An administrator added you, {user0} and %n more participants_" : ["管理員已新增您、{user0} 與 %n 個其他參與者"], + "_{actor} added you, {user0} and %n more participant_::_{actor} added you, {user0} and %n more participants_" : ["{actor} 已新增您、{user0} 與 %n 個其他參與者"], + "An administrator added {user0} and {user1}" : "管理員已新增 {user0} 與 {user1}", + "{actor} added {user0} and {user1}" : "{actor} 已新增 {user0} 與 {user1}", + "_An administrator added {user0}, {user1} and %n more participant_::_An administrator added {user0}, {user1} and %n more participants_" : ["管理員已新增 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} added {user0}, {user1} and %n more participant_::_{actor} added {user0}, {user1} and %n more participants_" : ["{actor} 已新增 {user0}、{user1} 與 %n 個其他參與者"], + "You removed {user0} and {user1}" : "您已移除 {user0} 與 {user1}", + "_You removed {user0}, {user1} and %n more participant_::_You removed {user0}, {user1} and %n more participants_" : ["您已移除 {user0}、{user1} 與 %n 個其他參與者"], + "An administrator removed you and {user0}" : "管理員已移除您與 {user0}", + "{actor} removed you and {user0}" : "{actor} 已移除您與 {user0}", + "_An administrator removed you, {user0} and %n more participant_::_An administrator removed you, {user0} and %n more participants_" : ["管理員已移除您、{user0} 與 %n 個其他參與者"], + "_{actor} removed you, {user0} and %n more participant_::_{actor} removed you, {user0} and %n more participants_" : ["{actor} 已移除您、{user0} 與 %n 個其他參與者"], + "An administrator removed {user0} and {user1}" : "管理員已移除 {user0} 與 {user1}", + "{actor} removed {user0} and {user1}" : "{actor} 已移除 {user0} 與 {user1}", + "_An administrator removed {user0}, {user1} and %n more participant_::_An administrator removed {user0}, {user1} and %n more participants_" : ["管理員已移除 {user0}、{user1} 與 %n 個其他參與者"], + "_{actor} removed {user0}, {user1} and %n more participant_::_{actor} removed {user0}, {user1} and %n more participants_" : ["{actor} 已移除 {user0}、{user1} 與 %n 個其他參與者"], + "You and {user0} joined the call" : "您與 {user0} 已加入通話", + "_You, {user0} and %n more participant joined the call_::_You, {user0} and %n more participants joined the call_" : ["您、{user0} 及 %n 個其他參與者加入了通話"], + "{user0} and {user1} joined the call" : "{user0} 與 {user1} 已加入通話", + "_{user0}, {user1} and %n more participant joined the call_::_{user0}, {user1} and %n more participants joined the call_" : ["{user0}、{user1} 及 %n 個其他參與者已加入通話"], + "You and {user0} left the call" : "您與 {user0} 已離開通話", + "_You, {user0} and %n more participant left the call_::_You, {user0} and %n more participants left the call_" : ["您、{user0} 及 %n 個其他參與者已離開通話"], + "{user0} and {user1} left the call" : "{user0} 與 {user1} 已離開通話", + "_{user0}, {user1} and %n more participant left the call_::_{user0}, {user1} and %n more participants left the call_" : ["{user0}、{user1} 及 %n 個其他參與者已離開通話"], + "You promoted {user0} and {user1} to moderators" : "您已將 {user0} 與 {user1} 升級為主持人", + "_You promoted {user0}, {user1} and %n more participant to moderators_::_You promoted {user0}, {user1} and %n more participants to moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted you and {user0} to moderators" : "管理員已將您與 {user0} 升級為主持人", + "{actor} promoted you and {user0} to moderators" : "{actor} 將您與 {user} 升級為主持人", + "_An administrator promoted you, {user0} and %n more participant to moderators_::_An administrator promoted you, {user0} and %n more participants to moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted you, {user0} and %n more participant to moderators_::_{actor} promoted you, {user0} and %n more participants to moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者升級為主持人"], + "An administrator promoted {user0} and {user1} to moderators" : "管理員已將 {user0} 與 {user1} 升級為主持人", + "{actor} promoted {user0} and {user1} to moderators" : "{actor} 已將 {user0} 與 {user1} 升級為主持人", + "_An administrator promoted {user0}, {user1} and %n more participant to moderators_::_An administrator promoted {user0}, {user1} and %n more participants to moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "_{actor} promoted {user0}, {user1} and %n more participant to moderators_::_{actor} promoted {user0}, {user1} and %n more participants to moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者升級為主持人"], + "You demoted {user0} and {user1} from moderators" : "您已將 {user0} 與 {user1} 從主持人降級", + "_You demoted {user0}, {user1} and %n more participant from moderators_::_You demoted {user0}, {user1} and %n more participants from moderators_" : ["您已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "An administrator demoted you and {user0} from moderators" : "管理員已將您與 {user0} 從主持人降級", + "{actor} demoted you and {user0} from moderators" : "{actor} 將您與 {user} 從主持人降級", + "_An administrator demoted you, {user0} and %n more participant from moderators_::_An administrator demoted you, {user0} and %n more participants from moderators_" : ["管理員已將您、{user0} 與 %n 個其他參與者從主持人降級"], + "_{actor} demoted you, {user0} and %n more participant from moderators_::_{actor} demoted you, {user0} and %n more participants from moderators_" : ["{actor} 已將您、{user0} 與 %n 個其他參與者從主持人降級"], + "An administrator demoted {user0} and {user1} from moderators" : "管理員已將 {user0} 與 {user1} 從主持人降級", + "{actor} demoted {user0} and {user1} from moderators" : "{actor} 已將 {user0} 與 {user1} 從主持人降級", + "_An administrator demoted {user0}, {user1} and %n more participant from moderators_::_An administrator demoted {user0}, {user1} and %n more participants from moderators_" : ["管理員已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "_{actor} demoted {user0}, {user1} and %n more participant from moderators_::_{actor} demoted {user0}, {user1} and %n more participants from moderators_" : ["{actor} 已將 {user0}、{user1} 與 %n 個其他參與者從主持人降級"], + "You:" : "您:", + "You: {lastMessage}" : "您:{lastMessage}", + "{actor}:" : "{actor}:", + "{relativeDate}, {absoluteDate}" : "{relativeDate},{absoluteDate}", + "The server was updated." : "伺服器已更新。", + "(edited by you)" : "(您已編輯)", + "(edited by a deleted user)" : "(由已刪除的使用者編輯)", + "(edited by {moderator})" : "({moderator} 已編輯)", + "You are trying to join a conversation while having an active session in another window or device. This is currently not supported by Nextcloud Talk. What do you want to do?" : "您正在嘗試加入對話,但在其他視窗或裝置中有作用中的工作階段。Nextcloud Talk 目前不支援這麼做。您想要做什麼?", + "Leave this page" : "離開此頁面", + "Join here" : "此處加入", + "Deck card has been posted to {conversation}" : "Deck 卡片已張貼至 {conversation}", + "An error occurred while posting deck card to conversation" : "將看板卡片發佈到對話時發生錯誤", + "Post to a conversation" : "發佈到一個對話", + "Post to conversation" : "發佈到對話", + "The recording failed. Please contact your administrator." : "錄音失敗。請聯絡您的管理員。", + "Location has been posted to {conversation}" : "位置已張貼至 {conversation}", + "An error occurred while posting location to conversation" : "將位置發佈到對話時發生錯誤", + "Share to a conversation" : "分享到一個對話", + "Share to conversation" : "分享到對話", + "In conversation" : "在對話中", + "Search in conversation: {conversation}" : "在對話中搜尋:{conversation}", + "Your requests are throttled at the moment due to brute force protection" : "因為暴力攻擊保護,您的請求目前已受限", + "Error while clearing conversation history" : "清除對話歷史紀錄時發生錯誤", + "Error occurred while allowing guests" : "允許訪客時發生錯誤", + "Error occurred while disallowing guests" : "取消允許訪客時發生錯誤", + "Error occurred when restricting the conversation to moderator" : "將對話限制為主持人時發生錯誤", + "Error occurred when opening the conversation to everyone" : "向所有人開放對話時發生錯誤", + "Conversation password has been saved" : "已儲存對話密碼", + "Conversation password has been removed" : "已移除對話密碼", + "Error occurred while saving conversation password" : "儲存對話密碼時發生錯誤", + "Call recording is starting." : "通話錄音開始。", + "Call recording stopped while starting." : "通話錄音在開始時停止。", + "Call recording stopped. You will be notified once the recording is available." : "通話錄音已停止。您會在錄音可用時收到通知。", + "Conversation picture set" : "對話圖片設定", + "Conversation picture deleted" : "對話圖片已刪除", + "Could not delete the conversation picture" : "無法刪除對話圖片", + "Could not remove the automatic expiration" : "無法移除自動過期", + "Could not post message: {errorMessage}" : "無法發佈訊息:{errorMessage}", + "Participant is banned successfully" : "成功封鎖了參與者", + "Error while banning the participant" : "封鎖參與者時發生錯誤", + "An error occurred while fetching the participants" : "擷取參與者時發生錯誤", + "Could not send invitation to {actorId}" : "無法傳送邀請給 {actorId}", + "Invitations sent" : "已傳送邀請", + "Error occurred when sending invitations" : "傳送邀請時發生錯誤", + "Failed to join the conversation." : "無法加入對話。", + "An error occurred while creating breakout rooms" : "建立分組討論室時發生錯誤", + "An error occurred while re-ordering the attendees" : "重新排序參與者時發生錯誤", + "An error occurred while deleting breakout rooms" : "刪除分組討論室時發生錯誤", + "An error occurred while starting breakout rooms" : "開始分組討論室時發生錯誤", + "An error occurred while stopping breakout rooms" : "停止分組討論室時發生錯誤", + "An error occurred while sending a message to the breakout rooms" : "向分組討論室傳送訊息時發生錯誤", + "An error occurred while requesting assistance" : "請求協助時發生錯誤", + "An error occurred while resetting the request for assistance" : "重設協助請求時發生錯誤", + "An error occurred while joining breakout room" : "加入分組討論室時發生錯誤", + "Failed to rename the thread" : "重新命名討論串失敗", + "Error fetching upcoming events" : "擷取即將到來的活動時發生錯誤", + "Error fetching upcoming reminders" : "擷取即將到來的提醒時發生錯誤", + "An error occurred while accepting an invitation" : "接受邀請時發生錯誤", + "An error occurred while rejecting an invitation" : "拒絕邀請時發生錯誤", + "{guest} (guest)" : "{guest}(訪客)", + "Poll draft has been saved" : "已儲存投票草稿", + "An error occurred while saving the draft" : "儲存草稿時發生錯誤", + "An error occurred while submitting your vote" : "遞交您的投票時發生錯誤", + "An error occurred while ending the poll" : "結束投票時發生錯誤", + "An error occurred while deleting the poll draft" : "刪除投票草稿時發生錯誤", + "Poll \"{name}\" was created by {user}. Click to vote" : "投票「{name}」是由 {user} 建立的。點擊投票", + "Failed to add reaction" : "新增反應失敗", + "Failed to remove reaction" : "移除反應失敗", + "The server is in maintenance mode." : "伺服器處於維護模式。", + "Federated server was updated." : "聯盟伺服器已更新。", + "Error while uploading file \"{fileName}\"" : "上傳檔案「{fileName}」時發生錯誤", + "Not enough free space to upload file \"{fileName}\"" : "沒有足夠的空間可以上傳檔案「{fileName}」", + "You are not allowed to share files" : "您不被允許分享檔案", + "Error while sharing file" : "分享檔案時發生錯誤", + "The browser you're using is not fully supported by Nextcloud Talk. Please use the latest version of Mozilla Firefox, Microsoft Edge, Google Chrome, Opera or Apple Safari." : "Nextcloud Talk 不完全支援您使用的瀏覽器。請使用最新版本的 Mozilla Firefox、Microsoft Edge、Google Chrome、Opera 或 Apple Safari。", + "_In %n hour_::_In %n hours_" : ["%n小時內"], + "_%n minute _::_%n minutes_" : ["%n分鐘"], + "In {hours} and {minutes}" : "{hours}與{minutes}內", + "_In %n minute_::_In %n minutes_" : ["%n分鐘內"], + "Later today – {timeLocale}" : "今天稍後 – {timeLocale}", + "Set time for later today" : "設定今天稍後的時間", + "Tomorrow – {timeLocale}" : "明天 – {timeLocale}", + "Set time for tomorrow" : "設定明天的時間", + "This weekend – {timeLocale}" : "本週末 – {timeLocale}", + "Set time for this weekend" : "設定週末的時間", + "Next week – {timeLocale}" : "下週 – {timeLocale}", + "Set time for next week" : "設定下週的時間", + "Message link copied to clipboard" : "訊息連結已複製到剪貼簿", + "Conversation link copied to clipboard" : "對話連結已複製到剪貼簿", + "The link could not be copied" : "無法複製連結", + "Error while parsing a PROPFIND error" : "解析 PROFIND 錯誤時發生錯誤", + "Sending signaling message has failed" : "傳送訊號訊息失敗", + "Lost connection to signaling server. Trying to reconnect." : "遺失與訊號伺服器的連線。正在嘗試重新連線。", + "Lost connection to signaling server." : "失去對訊號伺服器的連線。", + "Connecting is taking longer than expected …" : "連線時間比預期更長……", + "Failed to connect. Retrying …" : "連線失敗。正在重試……", + "Failed to connect. The signaling server may be set up incorrectly" : "無法連線。訊號伺服器可能設定錯誤", + "The configured signaling server needs to be updated to be compatible with this version of Talk. Please contact your administration." : "需要更新設定好的訊號伺服器,使其與此版本的 Talk 相容。請聯絡您的管理員。", + "Please restart the app." : "請重新啟動應用程式。", + "Please reload the page." : "請重新載入頁面。", + "Please try to restart the app." : "請嘗試重新啟動應用程式。", + "Please try to reload the page." : "請嘗試重新載入頁面。", + "Do not disturb" : "請勿打擾", + "Away" : "離開", + "Microphone {number}" : "麥克風 {number}", + "Camera {number}" : "相機 {number}", + "Speaker {number}" : "喇叭 {number}", + "You seem to be talking while muted, please unmute yourself for others to hear you" : "您似乎在靜音時說話,請取消靜音以讓其他人聽到您的聲音", + "Could not establish a connection with at least one participant. A TURN server might be needed for your scenario. Please ask your administrator to set one up following {linkstart}this documentation{linkend}." : "無法與至少一個參與者建立連線。您的狀況可能要一台 TURN 伺服器。請要求您的管理員按照{linkstart}此文件{linkend}來設定。", + "This is taking longer than expected. Are the media permissions already granted (or rejected)? If yes please restart your browser, as audio and video are failing" : "此動作花費的時間比預期的長。是否已授予(或拒絕)媒體權限?如果是,請重新啟動瀏覽器,因為音訊與視訊均無法運作", + "Access to microphone & camera is only possible with HTTPS" : "僅使用 HTTPS 時才能存取麥克風與網路攝影機", + "Please move your setup to HTTPS" : "請將您的設定狀態移至 HTTPS", + "Access to microphone & camera was denied" : "無法存取麥克風與網路攝影機", + "WebRTC is not supported in your browser" : "您的瀏覽器不支援 WebRTC", + "Please use a different browser like Firefox or Chrome" : "請使用其他瀏覽器,例如 Firefox 或 Chrome", + "Error while accessing microphone & camera" : "存取麥克風與網路攝影機時發生錯誤", + "%s Talk on your mobile devices" : "用於行動裝置的 %s Talk", + "Join conversations at any time, anywhere, on any device." : "隨時隨地在任何裝置上加入對話。", + "Android app" : "Android 應用程式", + "iOS app" : "iOS 應用程式", + "__language_name__" : "正體中文(臺灣)", + "Webhook Demo" : "Webhook 展示", + "Call summary (%s)" : "通話摘要 (%s)", + "The call summary bot posts an overview message after the call listing all participants and outlining tasks" : "通話摘要機器人在通話後張貼概述訊息,列出所有參與者並概述任務", + "Tasks" : "工作項目", + "Notes" : "Notes", + "Reports" : "報告", + "Decisions" : "決定", + "Agenda" : "議程", + "Call summary" : "通話摘要", + "Call summary - {title}" : "通話摘要 - {title}", + "Talk conversation for event" : "活動的 Talk 對話", + "Client Push is installed, this improves the performance of desktop clients." : "已安裝客戶端推播,這會改善桌面客戶端的效能。", + "{notify_push} is not installed, this might lead to performance issues when using desktop clients." : "尚未安裝 {notify_push},在使用桌面客戶端時,這可能會導致效能問題。", + "Next meeting" : "下一場會議", + "Schedule a meeting from your calendar. A Talk conversation needs to be set as location to show up here" : "從您的日曆安排會議。必須將 Talk 對話設定為位置以在此處顯示", + "Join conversations from remote Nextcloud servers" : "加入來自遠端 Nextcloud 伺服器的對話", + "Your default media state has been saved" : "已儲存您的預設媒體狀態", + "Set reminder for later today" : "設定今天稍後的提醒", + "Set reminder for tomorrow" : "設定明天的提醒", + "Set reminder for this weekend" : "設定本週末的提醒", + "Set reminder for next week" : "設定下週的提醒", + "Generate summary" : "產生摘要", + "Open poll • You voted already" : "開放投票 • 您已經投票", + "Open poll • Click to vote" : "開放投票 • 點擊以投票", + "Poll • Ended" : "投票 • 已結束", + "Talk recording from {time} ({conversation})" : "從 {time} 開始的 Talk 錄音({conversation})", + "_Poll results • %n vote_::_Poll results • %n votes_" : ["投票結果 • %n 票"], + "_Open poll • %n vote_::_Open poll • %n votes_" : ["開放投票 • %n 票"], + "Submit vote" : "遞交投票", + "Your privacy setting has been saved" : "您的隱私設定已儲存", + "Your personal setting has been saved" : "已儲存您的個人設定", + "Failed to save sounds setting" : "音訊設定儲存失敗", + "Sounds setting saved" : "音訊設定已儲存", + "Always shown if recording consent is required" : "若需取得錄影同意,此提示將一律顯示", + "Nextcloud Talk was updated, you cannot start or join a call." : "Nextcloud Talk 已更新,您無法開始或加入通話。", + "You joined the conversation in another window or device. This is currently not supported by Nextcloud Talk so this session was closed." : "您在其他視窗或裝置上加入了對話。Nextcloud Talk 目前不支援這麼做,因此此工作階段被關閉了。", + "Nextcloud Talk was updated." : "Nextcloud 已更新。", + "Nextcloud is in maintenance mode." : "Nextcloud 處於維護模式。", + "Nextcloud Talk Federation was updated." : "Nextcloud Talk Federation 已更新。", + "Enable live translation" : "啟用即時翻譯", + "I picked list style" : "我選了清單樣式", + "Hey! Are you using Talk in list style or with message bubbles?" : "嘿!您要使用清單樣式或訊息泡泡的 Talk?" +},"pluralForm" :"nplurals=1; plural=0;" +} \ No newline at end of file diff --git a/lib/Activity/Listener.php b/lib/Activity/Listener.php new file mode 100644 index 0000000..aa0e2b4 --- /dev/null +++ b/lib/Activity/Listener.php @@ -0,0 +1,191 @@ + + */ +class Listener implements IEventListener { + + public function __construct( + protected IManager $activityManager, + protected IUserSession $userSession, + protected ChatManager $chatManager, + protected ParticipantService $participantService, + protected RoomService $roomService, + protected RecordingService $recordingService, + protected LoggerInterface $logger, + protected ITimeFactory $timeFactory, + protected Setting $setting, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof ARoomEvent && $event->getRoom()->isFederatedConversation()) { + return; + } + + match (get_class($event)) { + CallEndedEvent::class, + CallEndedForEveryoneEvent::class => $this->generateCallActivity($event), + AttendeesAddedEvent::class => $this->generateInvitationActivity($event->getRoom(), $event->getAttendees()), + }; + } + + /** + * Call activity: "You attended a call with {user1} and {user2}" + */ + protected function generateCallActivity(ACallEndedEvent $event): void { + $room = $event->getRoom(); + $actor = $event->getActor(); + $activeSince = $event->getOldValue(); + + $duration = $this->timeFactory->getTime() - $activeSince->getTimestamp(); + $userIds = $this->participantService->getParticipantUserIds($room, $activeSince); + $cloudIds = $this->participantService->getParticipantActorIdsByActorType($room, [Attendee::ACTOR_FEDERATED_USERS], $activeSince); + $numGuests = $this->participantService->getActorsCountByType($room, Attendee::ACTOR_GUESTS, $activeSince->getTimestamp()); + $numGuests += $this->participantService->getActorsCountByType($room, Attendee::ACTOR_EMAILS, $activeSince->getTimestamp()); + + $message = 'call_ended'; + if (($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) && \count($userIds) === 1) { + $message = 'call_missed'; + } elseif ($event instanceof CallEndedForEveryoneEvent) { + $message = 'call_ended_everyone'; + } + + if ($actor instanceof Participant) { + $actorId = $actor->getAttendee()->getActorId(); + $actorType = $actor->getAttendee()->getActorType(); + } else { + $actorType = Attendee::ACTOR_GUESTS; + $actorId = Attendee::ACTOR_ID_SYSTEM; + } + $this->chatManager->addSystemMessage($room, $actor, $actorType, $actorId, json_encode([ + 'message' => $message, + 'parameters' => [ + 'users' => $userIds, + 'cloudIds' => $cloudIds, + 'guests' => $numGuests, + 'duration' => $duration, + ], + ]), $this->timeFactory->getDateTime(), false); + + if (empty($userIds)) { + return; + } + + $activity = $this->activityManager->generateEvent(); + try { + $activity->setApp('spreed') + ->setType('spreed') + ->setAuthor('') + ->setObject('room', $room->getId()) + ->setTimestamp($this->timeFactory->getTime()) + ->setSubject('call', [ + 'room' => $room->getId(), + 'users' => $userIds, + 'cloudIds' => $cloudIds, + 'guests' => $numGuests, + 'duration' => $duration, + ]); + } catch (InvalidValueException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return; + } + + $this->activityManager->bulkPublish($activity, $userIds, $this->setting); + } + + /** + * Invitation activity: "{actor} invited you to {call}" + * + * @param Room $room + * @param Attendee[] $attendees + */ + protected function generateInvitationActivity(Room $room, array $attendees): void { + $actor = $this->userSession->getUser(); + if (!$actor instanceof IUser) { + return; + } + $actorId = $actor->getUID(); + + $event = $this->activityManager->generateEvent(); + try { + $event->setApp('spreed') + ->setType('spreed') + ->setAuthor($actorId) + ->setObject('room', $room->getId()) + ->setTimestamp($this->timeFactory->getTime()) + ->setSubject('invitation', [ + 'user' => $actor->getUID(), + 'room' => $room->getId(), + ]); + } catch (\Throwable $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return; + } + + // We know the new participant is in the room, + // so skip loading them just to make sure they can read it. + // Must be overwritten later on for one-to-one chats. + $roomName = $room->getDisplayName($actorId); + + foreach ($attendees as $attendee) { + if ($attendee->getActorType() !== Attendee::ACTOR_USERS) { + // No user => no activity + continue; + } + + if ($actorId === $attendee->getActorId()) { + // No activity for self-joining and the creator + continue; + } + + try { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + // Overwrite the room name with the other participant + $roomName = $room->getDisplayName($attendee->getActorId()); + } + $event + ->setObject('room', $room->getId(), $roomName) + ->setSubject('invitation', [ + 'user' => $actor->getUID(), + 'room' => $room->getId(), + 'name' => $roomName, + ]) + ->setAffectedUser($attendee->getActorId()); + $this->activityManager->publish($event); + } catch (\Throwable $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } + } +} diff --git a/lib/Activity/Provider/Base.php b/lib/Activity/Provider/Base.php new file mode 100644 index 0000000..e8ae480 --- /dev/null +++ b/lib/Activity/Provider/Base.php @@ -0,0 +1,142 @@ +getApp() !== 'spreed') { + throw new UnknownActivityException('app'); + } + + $uid = $event->getAffectedUser(); + $user = $this->userManager->get($uid); + if (!$user instanceof IUser || $this->config->isDisabledForUser($user)) { + throw new UnknownActivityException('User can not use Talk'); + } + + if ($this->activityManager->getRequirePNG()) { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('spreed', 'app-dark.png'))); + } else { + $event->setIcon($this->url->getAbsoluteURL($this->url->imagePath('spreed', 'app-dark.svg'))); + } + + return $event; + } + + /** + * @param IEvent $event + * @param string $subject + * @param array $parameters + */ + protected function setSubjects(IEvent $event, string $subject, array $parameters): void { + $placeholders = $replacements = []; + foreach ($parameters as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + $replacements[] = $parameter['name']; + } + + $event->setParsedSubject(str_replace($placeholders, $replacements, $subject)) + ->setRichSubject($subject, $parameters); + } + + protected function getRoom(Room $room, string $userId): array { + switch ($room->getType()) { + case Room::TYPE_ONE_TO_ONE: + case Room::TYPE_ONE_TO_ONE_FORMER: + $stringType = 'one2one'; + break; + case Room::TYPE_GROUP: + $stringType = 'group'; + break; + case Room::TYPE_PUBLIC: + default: + $stringType = 'public'; + break; + } + + return [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $room->getDisplayName($userId), + 'link' => $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]), + 'call-type' => $stringType, + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ]; + } + + protected function getFormerRoom(IL10N $l): array { + return [ + 'type' => 'highlight', + 'id' => 'deleted', + 'name' => $l->t('a conversation'), + ]; + } + + protected function getUser(string $uid): array { + return [ + 'type' => 'user', + 'id' => $uid, + 'name' => $this->userManager->getDisplayName($uid) ?? $uid, + ]; + } + + protected function getRemoteUser(Room $room, string $federationId): array { + $cloudId = $this->cloudIdManager->resolveCloudId($federationId); + $displayName = $cloudId->getDisplayId(); + try { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_FEDERATED_USERS, $federationId); + $displayName = $participant->getAttendee()->getDisplayName(); + } catch (ParticipantNotFoundException) { + } + + return [ + 'type' => 'user', + 'id' => $cloudId->getUser(), + 'name' => $displayName, + 'server' => $cloudId->getRemote(), + ]; + } +} diff --git a/lib/Activity/Provider/Call.php b/lib/Activity/Provider/Call.php new file mode 100644 index 0000000..b604f19 --- /dev/null +++ b/lib/Activity/Provider/Call.php @@ -0,0 +1,156 @@ +preParse($event); + + if ($event->getSubject() === 'call') { + $l = $this->languageFactory->get('spreed', $language); + $parameters = $event->getSubjectParameters(); + + try { + $room = $this->manager->getRoomForUser((int)$parameters['room'], $this->activityManager->getCurrentUserId()); + } catch (RoomNotFoundException) { + $room = null; + } + + $result = $this->parseCall($room, $event, $l); + $result['subject'] .= ' ' . $this->getDuration($l, (int)$parameters['duration']); + // $result['params']['call'] = $roomParameter; + $this->setSubjects($event, $result['subject'], $result['params']); + } else { + throw new UnknownActivityException('subject'); + } + + return $event; + } + + protected function getDuration(IL10N $l, int $seconds): string { + $hours = floor($seconds / 3600); + $seconds %= 3600; + $minutes = floor($seconds / 60); + $seconds %= 60; + + if ($hours > 0) { + $duration = sprintf('%1$d:%2$02d:%3$02d', $hours, $minutes, $seconds); + } else { + $duration = sprintf('%1$d:%2$02d', $minutes, $seconds); + } + + return $l->t('(Duration %s)', $duration); + } + + protected function parseCall(?Room $room, IEvent $event, IL10N $l): array { + $parameters = $event->getSubjectParameters(); + + $currentUser = array_search($this->activityManager->getCurrentUserId(), $parameters['users'], true); + if ($currentUser === false) { + throw new UnknownActivityException('Unknown case'); + } + unset($parameters['users'][$currentUser]); + sort($parameters['users']); + + if (!isset($parameters['cloudIds'])) { + // Compatibility with old messages + $parameters['cloudIds'] = []; + } + sort($parameters['users']); + sort($parameters['cloudIds']); + + $numUsers = $numRealUsers = count($parameters['users']); + + // Without room, we can not resolve cloudIds, so we list them as guests instead + if (!$room instanceof Room) { + $numUsers += count($parameters['cloudIds']); + } else { + $parameters['guests'] += count($parameters['cloudIds']); + } + $displayedUsers = $numUsers; + + switch ($numUsers) { + case 0: + $subject = $l->t('You attended a call with {user1}'); + $subject = str_replace('{user1}', $l->n('%n guest', '%n guests', $parameters['guests']), $subject); + break; + case 1: + if ($parameters['guests'] === 0) { + $subject = $l->t('You attended a call with {user1}'); + } else { + $subject = $l->t('You attended a call with {user1} and {user2}'); + $subject = str_replace('{user2}', $l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 2: + if ($parameters['guests'] === 0) { + $subject = $l->t('You attended a call with {user1} and {user2}'); + } else { + $subject = $l->t('You attended a call with {user1}, {user2} and {user3}'); + $subject = str_replace('{user3}', $l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 3: + if ($parameters['guests'] === 0) { + $subject = $l->t('You attended a call with {user1}, {user2} and {user3}'); + } else { + $subject = $l->t('You attended a call with {user1}, {user2}, {user3} and {user4}'); + $subject = str_replace('{user4}', $l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 4: + if ($parameters['guests'] === 0) { + $subject = $l->t('You attended a call with {user1}, {user2}, {user3} and {user4}'); + } else { + $subject = $l->t('You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}'); + $subject = str_replace('{user5}', $l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 5: + default: + $subject = $l->t('You attended a call with {user1}, {user2}, {user3}, {user4} and {user5}'); + if ($numUsers === 5 && $parameters['guests'] === 0) { + $displayedUsers = 5; + } else { + $displayedUsers = 4; + $numOthers = $parameters['guests'] + $numUsers - $displayedUsers; + $subject = str_replace('{user5}', $l->n('%n other', '%n others', $numOthers), $subject); + } + } + + $params = []; + for ($i = 1; $i <= $displayedUsers; $i++) { + if ($i <= $numRealUsers) { + $params['user' . $i] = $this->getUser($parameters['users'][$i - 1]); + } else { + $params['user' . $i] = $this->getRemoteUser($room, $parameters['cloudIds'][$i - $numRealUsers - 1]); + } + } + + return [ + 'subject' => $subject, + 'params' => $params, + ]; + } +} diff --git a/lib/Activity/Provider/Invitation.php b/lib/Activity/Provider/Invitation.php new file mode 100644 index 0000000..8bd20f2 --- /dev/null +++ b/lib/Activity/Provider/Invitation.php @@ -0,0 +1,49 @@ +preParse($event); + + if ($event->getSubject() === 'invitation') { + $l = $this->languageFactory->get('spreed', $language); + $parameters = $event->getSubjectParameters(); + + try { + $room = $this->manager->getRoomById((int)$parameters['room']); + $roomParameter = $this->getRoom($room, $event->getAffectedUser()); + } catch (RoomNotFoundException) { + $roomParameter = $this->getFormerRoom($l); + } + + $this->setSubjects($event, $l->t('{actor} invited you to {call}'), [ + 'actor' => $this->getUser($parameters['user']), + 'call' => $roomParameter, + ]); + } else { + throw new UnknownActivityException('subject'); + } + + return $event; + } +} diff --git a/lib/Activity/Setting.php b/lib/Activity/Setting.php new file mode 100644 index 0000000..944710b --- /dev/null +++ b/lib/Activity/Setting.php @@ -0,0 +1,76 @@ +l->t('You were invited to a conversation or had a call'); + } + + /** + * {@inheritdoc} + */ + #[\Override] + public function getGroupIdentifier(): string { + return 'other'; + } + + /** + * {@inheritdoc} + */ + #[\Override] + public function getGroupName(): string { + return $this->l->t('Other activities'); + } + + /** + * {@inheritdoc} + */ + #[\Override] + public function getPriority(): int { + return 51; + } + /** + * {@inheritdoc} + */ + #[\Override] + public function canChangeNotification(): bool { + return false; + } + /** + * {@inheritdoc} + */ + #[\Override] + public function isDefaultEnabledNotification(): bool { + return false; + } +} diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php new file mode 100644 index 0000000..9210102 --- /dev/null +++ b/lib/AppInfo/Application.php @@ -0,0 +1,440 @@ +registerMiddleWare(CanUseTalkMiddleware::class); + $context->registerMiddleWare(InjectionMiddleware::class); + $context->registerMiddleWare(ParameterOutOfRangeMiddleware::class); + $context->registerCapability(Capabilities::class); + + // Listeners to load the UI and integrate it into other apps + $context->registerEventListener(AddContentSecurityPolicyEvent::class, CSPListener::class); + $context->registerEventListener(AddFeaturePolicyEvent::class, FeaturePolicyListener::class); + $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, UnifiedSearchCSSLoader::class); + $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, DeckPluginLoader::class); + $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, MapsPluginLoader::class); + $context->registerEventListener(\OCP\AppFramework\Http\Events\BeforeTemplateRenderedEvent::class, UnifiedSearchFilterPlugin::class); + $context->registerEventListener(RegisterOperationsEvent::class, RegisterOperationsListener::class); + $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareTemplateLoader::class); + $context->registerEventListener(BeforeTemplateRenderedEvent::class, PublicShareAuthTemplateLoader::class); + $context->registerEventListener(LoadSidebar::class, FilesTemplateLoader::class); + $context->registerEventListener(BeforePreferenceSetEvent::class, BeforePreferenceSetEventListener::class); + + // Activity listeners + $context->registerEventListener(AttendeesAddedEvent::class, ActivityListener::class); + $context->registerEventListener(CallEndedEvent::class, ActivityListener::class); + $context->registerEventListener(CallEndedForEveryoneEvent::class, ActivityListener::class); + + // Bot listeners + $context->registerEventListener(BotDisabledEvent::class, BotListener::class); + $context->registerEventListener(BotEnabledEvent::class, BotListener::class); + $context->registerEventListener(BotInstallEvent::class, BotListener::class); + $context->registerEventListener(BotUninstallEvent::class, BotListener::class); + $context->registerEventListener(ChatMessageSentEvent::class, BotListener::class); + $context->registerEventListener(ReactionAddedEvent::class, BotListener::class); + $context->registerEventListener(ReactionRemovedEvent::class, BotListener::class); + $context->registerEventListener(SystemMessageSentEvent::class, BotListener::class); + + // Chat listeners + $context->registerEventListener(BeforeRoomsFetchEvent::class, ChangelogListener::class); + $context->registerEventListener(RoomDeletedEvent::class, ChatListener::class); + $context->registerEventListener(BeforeRoomsFetchEvent::class, NoteToSelfListener::class); + $context->registerEventListener(BeforeRoomsFetchEvent::class, SampleConversationsListener::class); + $context->registerEventListener(AttendeesAddedEvent::class, SystemMessageListener::class); + $context->registerEventListener(AttendeeRemovedEvent::class, SystemMessageListener::class); + $context->registerEventListener(AttendeesRemovedEvent::class, SystemMessageListener::class); + $context->registerEventListener(BeforeDuplicateShareSentEvent::class, SystemMessageListener::class); + $context->registerEventListener(BeforeParticipantModifiedEvent::class, SystemMessageListener::class); + $context->registerEventListener(BeforeShareCreatedEvent::class, SystemMessageListener::class); + $context->registerEventListener(LobbyModifiedEvent::class, SystemMessageListener::class); + $context->registerEventListener(ParticipantModifiedEvent::class, SystemMessageListener::class, 100); + $context->registerEventListener(RoomCreatedEvent::class, SystemMessageListener::class); + $context->registerEventListener(RoomModifiedEvent::class, SystemMessageListener::class); + $context->registerEventListener(ShareCreatedEvent::class, SystemMessageListener::class); + + // Chat parser + $context->registerEventListener(MessageParseEvent::class, Changelog::class, -75); + $context->registerEventListener(MessageParseEvent::class, ReactionParser::class); + $context->registerEventListener(MessageParseEvent::class, SystemMessage::class); + $context->registerEventListener(MessageParseEvent::class, SystemMessage::class, 9999); + $context->registerEventListener(MessageParseEvent::class, UserMention::class, -100); + + // Calendar listeners + $context->registerEventListener(CalendarObjectCreatedEvent::class, CalDavEventListener::class); + $context->registerEventListener(CalendarObjectUpdatedEvent::class, CalDavEventListener::class); + + // Files integration listeners + $context->registerEventListener(BeforeGuestJoinedRoomEvent::class, FilesListener::class); + $context->registerEventListener(BeforeUserJoinedRoomEvent::class, FilesListener::class); + + // Collaborators / Auto complete listeners + $context->registerEventListener(AutoCompleteFilterEvent::class, CollaboratorsListener::class); + + // Reference listeners + $context->registerEventListener(AttendeesAddedEvent::class, ReferenceInvalidationListener::class); + $context->registerEventListener(AttendeesRemovedEvent::class, ReferenceInvalidationListener::class); + $context->registerEventListener(LobbyModifiedEvent::class, ReferenceInvalidationListener::class); + $context->registerEventListener(RoomDeletedEvent::class, ReferenceInvalidationListener::class); + $context->registerEventListener(RoomModifiedEvent::class, ReferenceInvalidationListener::class); + + // Resources listeners + $context->registerEventListener(AttendeesAddedEvent::class, ResourceListener::class); + $context->registerEventListener(AttendeesRemovedEvent::class, ResourceListener::class); + $context->registerEventListener(EmailInvitationSentEvent::class, ResourceListener::class); + $context->registerEventListener(RoomDeletedEvent::class, ResourceListener::class); + $context->registerEventListener(RoomModifiedEvent::class, ResourceListener::class); + + // Sharing listeners + $context->registerEventListener(BeforeShareCreatedEvent::class, ShareListener::class, 1000); + $context->registerEventListener(VerifyMountPointEvent::class, ShareListener::class, 1000); + $context->registerEventListener(RoomDeletedEvent::class, ShareListener::class); + + // Group and Circles listeners + $context->registerEventListener(GroupDeletedEvent::class, GroupDeletedListener::class); + $context->registerEventListener(GroupChangedEvent::class, DisplayNameListener::class); + $context->registerEventListener(UserDeletedEvent::class, UserDeletedListener::class); + $context->registerEventListener(UserChangedEvent::class, DisplayNameListener::class); + $context->registerEventListener(UserAddedEvent::class, GroupMembershipListener::class); + $context->registerEventListener(UserRemovedEvent::class, GroupMembershipListener::class); + $context->registerEventListener(CircleDestroyedEvent::class, CircleDeletedListener::class); + $context->registerEventListener(EditingCircleEvent::class, CircleEditedListener::class); + $context->registerEventListener(CircleEditedEvent::class, CircleEditedListener::class); + $context->registerEventListener(AddingCircleMemberEvent::class, CircleMembershipListener::class); + $context->registerEventListener(RemovingCircleMemberEvent::class, CircleMembershipListener::class); + + // Notification listeners + $context->registerEventListener(AttendeesAddedEvent::class, NotificationListener::class); + $context->registerEventListener(BeforeCallStartedEvent::class, NotificationListener::class); + $context->registerEventListener(CallStartedEvent::class, NotificationListener::class); + $context->registerEventListener(CallNotificationSendEvent::class, NotificationListener::class); + $context->registerEventListener(ParticipantModifiedEvent::class, NotificationListener::class); + $context->registerEventListener(UserJoinedRoomEvent::class, NotificationListener::class); + + // Call listeners + $context->registerEventListener(BeforeUserLoggedOutEvent::class, BeforeUserLoggedOutListener::class); + $context->registerEventListener(BeforeParticipantModifiedEvent::class, RestrictStartingCallsListener::class, 1000); + $context->registerEventListener(BeforeParticipantModifiedEvent::class, StatusListener::class); + $context->registerEventListener(CallEndedForEveryoneEvent::class, StatusListener::class); + + // Recording listeners + $context->registerEventListener(RoomDeletedEvent::class, RecordingListener::class); + $context->registerEventListener(CallEndedEvent::class, RecordingListener::class); + $context->registerEventListener(CallEndedForEveryoneEvent::class, RecordingListener::class); + $context->registerEventListener(TaskSuccessfulEvent::class, RecordingListener::class); + $context->registerEventListener(TaskFailedEvent::class, RecordingListener::class); + + // Federation listeners + $context->registerEventListener(BeforeRoomDeletedEvent::class, TalkV1BeforeRoomDeletedListener::class); + $context->registerEventListener(ParticipantModifiedEvent::class, TalkV1ParticipantModifiedListener::class); + $context->registerEventListener(CallEndedEvent::class, TalkV1RoomModifiedListener::class); + $context->registerEventListener(CallEndedForEveryoneEvent::class, TalkV1RoomModifiedListener::class); + $context->registerEventListener(CallStartedEvent::class, TalkV1RoomModifiedListener::class); + $context->registerEventListener(LobbyModifiedEvent::class, TalkV1RoomModifiedListener::class); + $context->registerEventListener(RoomModifiedEvent::class, TalkV1RoomModifiedListener::class); + $context->registerEventListener(ChatMessageSentEvent::class, TalkV1MessageSentListener::class); + $context->registerEventListener(SystemMessageSentEvent::class, TalkV1MessageSentListener::class); + $context->registerEventListener(SystemMessagesMultipleSentEvent::class, TalkV1MessageSentListener::class); + $context->registerEventListener(AttendeeRemovedEvent::class, TalkV1CancelRetryOCMListener::class); + $context->registerEventListener(ResourceTypeRegisterEvent::class, ResourceTypeRegisterListener::class); + + // Signaling listeners (External) + $context->registerEventListener(AttendeesAddedEvent::class, SignalingListener::class); + $context->registerEventListener(AttendeeRemovedEvent::class, SignalingListener::class); + $context->registerEventListener(AttendeesRemovedEvent::class, SignalingListener::class); + $context->registerEventListener(SessionLeftRoomEvent::class, SignalingListener::class); + + $context->registerEventListener(CallEndedForEveryoneEvent::class, SignalingListener::class); + $context->registerEventListener(GuestsCleanedUpEvent::class, SignalingListener::class); + $context->registerEventListener(LobbyModifiedEvent::class, SignalingListener::class); + $context->registerEventListener(BeforeRoomSyncedEvent::class, SignalingListener::class); + $context->registerEventListener(RoomSyncedEvent::class, SignalingListener::class); + $context->registerEventListener(RoomExtendedEvent::class, SignalingListener::class); + + $context->registerEventListener(ChatMessageSentEvent::class, SignalingListener::class); + $context->registerEventListener(SystemMessageSentEvent::class, SignalingListener::class); + $context->registerEventListener(SystemMessagesMultipleSentEvent::class, SignalingListener::class); + $context->registerEventListener(ReactionAddedEvent::class, SignalingListener::class); + $context->registerEventListener(ReactionRemovedEvent::class, SignalingListener::class); + + // Signaling listeners (Both) + $context->registerEventListener(BeforeRoomDeletedEvent::class, SignalingListener::class); + $context->registerEventListener(ParticipantModifiedEvent::class, SignalingListener::class, 50); + $context->registerEventListener(RoomModifiedEvent::class, SignalingListener::class); + + // Signaling listeners (Internal) + $context->registerEventListener(BeforeSessionLeftRoomEvent::class, SignalingListener::class); + $context->registerEventListener(BeforeAttendeeRemovedEvent::class, SignalingListener::class); + $context->registerEventListener(GuestJoinedRoomEvent::class, SignalingListener::class); + $context->registerEventListener(UserJoinedRoomEvent::class, SignalingListener::class); + + // Threads listeners + $context->registerEventListener(AttendeesRemovedEvent::class, ThreadListener::class); + + // Video verification + $context->registerEventListener(BeforeUserJoinedRoomEvent::class, PublicShareAuthListener::class); + $context->registerEventListener(BeforeGuestJoinedRoomEvent::class, PublicShareAuthListener::class); + $context->registerEventListener(BeforeAttendeesAddedEvent::class, PublicShareAuthListener::class); + $context->registerEventListener(AttendeeRemovedEvent::class, PublicShareAuthListener::class); + $context->registerEventListener(SessionLeftRoomEvent::class, PublicShareAuthListener::class); + $context->registerEventListener(GuestsCleanedUpEvent::class, PublicShareAuthListener::class); + + // Register other integrations of Talk + $context->registerSearchProvider(ConversationSearch::class); + $context->registerSearchProvider(CurrentMessageSearch::class); + $context->registerSearchProvider(MessageSearch::class); + + // Fix database issues + $context->registerEventListener(AddMissingIndicesEvent::class, AddMissingIndicesListener::class); + + $context->registerDashboardWidget(TalkWidget::class); + + $context->registerNotifierService(Notifier::class); + + $context->registerProfileLinkAction(TalkAction::class); + + $context->registerReferenceProvider(TalkReferenceProvider::class); + + $context->registerTalkBackend(TalkBackend::class); + + $context->registerTeamResourceProvider(TalkTeamResourceProvider::class); + + $context->registerSetupCheck(Configuration::class); + $context->registerSetupCheck(HighPerformanceBackend::class); + $context->registerSetupCheck(FederationLockCache::class); + $context->registerSetupCheck(NotifyPush::class); + $context->registerSetupCheck(RecordingBackend::class); + $context->registerSetupCheck(SIPConfiguration::class); + $context->registerSetupCheck(BackgroundBlurLoading::class); + } + + #[\Override] + public function boot(IBootContext $context): void { + $context->injectFn([$this, 'registerCollaborationResourceProvider']); + $context->injectFn([$this, 'registerClientLinks']); + $context->injectFn([$this, 'registerNavigationLink']); + $context->injectFn([$this, 'registerCloudFederationProviderManager']); + } + + public function registerCollaborationResourceProvider(IProviderManager $resourceManager, IEventDispatcher $dispatcher): void { + $resourceManager->registerResourceProvider(ConversationProvider::class); + $dispatcher->addListener(LoadAdditionalScriptsEvent::class, static function (): void { + Util::addScript(self::APP_ID, 'talk-collections'); + }); + } + + public function registerClientLinks(IAppManager $appManager, IManager $settingManager): void { + if ($appManager->isEnabledForUser('firstrunwizard')) { + $settingManager->registerSetting('personal', Personal::class); + } + } + + public function registerNavigationLink(INavigationManager $navigationManager): void { + $navigationManager->add(static function () { + $config = Server::get(Config::class); + $userSession = Server::get(IUserSession::class); + $urlGenerator = Server::get(IURLGenerator::class); + $l = Server::get(IFactory::class)->get(self::APP_ID); + $user = $userSession->getUser(); + return [ + 'id' => self::APP_ID, + 'name' => $l->t('Talk'), + 'href' => $urlGenerator->linkToRouteAbsolute('spreed.Page.index'), + 'icon' => $urlGenerator->imagePath(self::APP_ID, 'app.svg'), + 'order' => -5, + 'type' => $user instanceof IUser && !$config->isDisabledForUser($user) ? 'link' : 'hidden', + ]; + }); + } + + public function registerCloudFederationProviderManager( + IConfig $config, + ICloudFederationProviderManager $manager, + ): void { + if ($config->getAppValue('spreed', 'federation_enabled', 'no') !== 'yes') { + return; + } + + $manager->addCloudFederationProvider( + 'talk-room', + 'Talk Federation', + static fn (): ICloudFederationProvider => Server::get(CloudFederationProviderTalk::class) + ); + } +} diff --git a/lib/BackgroundJob/CheckCertificates.php b/lib/BackgroundJob/CheckCertificates.php new file mode 100644 index 0000000..0fe2b42 --- /dev/null +++ b/lib/BackgroundJob/CheckCertificates.php @@ -0,0 +1,135 @@ +setInterval(60 * 60 * 24 * 7); + $this->setTimeSensitivity(IJob::TIME_INSENSITIVE); + } + + /* + * @return string[] + */ + private function getUsersToNotify(): array { + $users = []; + + $groupToNotify = $this->groupManager->get('admin'); + if ($groupToNotify instanceof IGroup) { + foreach ($groupToNotify->getUsers() as $user) { + $users[] = $user->getUID(); + } + } + + return $users; + } + + /** + * Create a notification and inform admins about the certificate which is about to expire + * + * @param string $host The host which was checked + * @param int $days Number of days until the certificate expires + */ + private function createNotifications(string $host, int $days): void { + $notification = $this->notificationManager->createNotification(); + + try { + $notification->setApp(Application::APP_ID) + ->setDateTime(new \DateTime()) + ->setObject('certificate_expiration', $host); + + $notification->setSubject('certificate_expiration', [ + 'host' => $host, + 'days_to_expire' => $days, + ]); + + foreach ($this->getUsersToNotify() as $uid) { + $notification->setUser($uid); + $this->notificationManager->notify($notification); + } + } catch (\InvalidArgumentException $e) { + return; + } + } + + /** + * Check the certificate of the specified host + * + * @param string $host The host to check the certificate of without scheme + */ + private function checkServerCertificate(string $host): void { + $expirationInDays = $this->certService->getCertificateExpirationInDays($host); + + if ($expirationInDays == null) { + return; + } + + if ($expirationInDays < 10) { + $this->logger->warning('Certificate of ' . $host . ' expires in less than ' . $expirationInDays . ' days'); + + $this->createNotifications($host, $expirationInDays); + } else { + $this->logger->debug('Certificate of ' . $host . ' is valid for ' . $expirationInDays . ' days'); + } + } + + /** + * @inheritDoc + */ + #[\Override] + protected function run($argument): void { + $turnServers = $this->talkConfig->getTurnServers(false); + + foreach ($turnServers as $turnServer) { + // Only check server which support the 'turns' protocol + if (!str_contains($turnServer['schemes'], 'turns')) { + continue; + } + + $this->checkServerCertificate($turnServer['server']); + } + + $signalingServers = $this->talkConfig->getSignalingServers(); + + foreach ($signalingServers as $signalingServer) { + if ((bool)$signalingServer['verify']) { + $this->checkServerCertificate($signalingServer['server']); + } + } + + $recordingServers = $this->talkConfig->getRecordingServers(); + + foreach ($recordingServers as $recordingServer) { + if ((bool)$recordingServer['verify']) { + $this->checkServerCertificate($recordingServer['server']); + } + } + } +} diff --git a/lib/BackgroundJob/CheckHostedSignalingServer.php b/lib/BackgroundJob/CheckHostedSignalingServer.php new file mode 100644 index 0000000..4bd96c4 --- /dev/null +++ b/lib/BackgroundJob/CheckHostedSignalingServer.php @@ -0,0 +1,208 @@ +setInterval(3600); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + + } + + private function formatTurnSchemes(array $schemes): string { + if (in_array('turn', $schemes, true) && in_array('turns', $schemes, true)) { + return 'turn,turns'; + } elseif (in_array('turn', $schemes, true)) { + return 'turn'; + } elseif (in_array('turns', $schemes, true)) { + return 'turns'; + } else { + return 'turn'; + } + } + + private function formatTurnProtocols(array $protocols): string { + if (in_array('udp', $protocols, true) && in_array('tcp', $protocols, true)) { + return 'udp,tcp'; + } elseif (in_array('udp', $protocols, true)) { + return 'udp'; + } elseif (in_array('tcp', $protocols, true)) { + return 'tcp'; + } else { + return 'udp'; + } + } + + private function updateStunTurnSettings(array $oldAccountInfo, array $accountInfo) { + if (!empty($accountInfo['stun']['servers'])) { + if ($this->talkConfig->getStunServers() !== $accountInfo['stun']['servers']) { + // STUN servers were added / changed + $this->config->setAppValue('spreed', 'stun_servers', json_encode($accountInfo['stun']['servers'])); + } + } elseif (!empty($oldAccountInfo['stun']['servers'])) { + // STUN servers are no longer available, reset to default. + $this->config->deleteAppValue('spreed', 'stun_servers'); + } + + if (!empty($accountInfo['turn']['servers'])) { + $newTurnServers = []; + foreach ($accountInfo['turn']['servers'] as $server) { + $newTurnServers[] = [ + 'server' => $server['server'], + 'secret' => $server['secret'], + 'schemes' => $this->formatTurnSchemes($server['schemes']), + 'protocols' => $this->formatTurnProtocols($server['protocols']), + ]; + } + + if ($this->talkConfig->getTurnServers() !== $newTurnServers) { + // TURN servers were added / changed + $this->config->setAppValue('spreed', 'turn_servers', json_encode($newTurnServers)); + } + } elseif (!empty($oldAccountInfo['turn']['servers'])) { + // TURN servers are no longer available, reset to default. + $this->config->deleteAppValue('spreed', 'turn_servers'); + } + } + + #[\Override] + protected function run($argument): void { + $accountId = $this->config->getAppValue('spreed', 'hosted-signaling-server-account-id', ''); + $oldAccountInfo = json_decode($this->config->getAppValue('spreed', 'hosted-signaling-server-account', '{}'), true); + + if ($accountId === '') { + return; + } + $accountId = new AccountId($accountId); + try { + $accountInfo = $this->hostedSignalingServerService->fetchAccountInfo($accountId); + } catch (HostedSignalingServerAPIException $e) { + if ($e->getCode() === Http::STATUS_NOT_FOUND) { + // Account was deleted, so remove the information locally + $accountInfo = ['status' => 'deleted']; + } else { + // API or connection issues - do nothing and just try again later + return; + } + } + + $oldStatus = $oldAccountInfo['status'] ?? ''; + $newStatus = $accountInfo['status']; + + $notificationSubject = null; + $notificationParameters = []; + + // the status has changed + if ($oldStatus !== $newStatus) { + if ($newStatus === 'deleted') { + // remove signaling servers if account is not active anymore + $this->config->deleteAppValue('spreed', 'signaling_mode'); + $this->config->deleteAppValue('spreed', 'signaling_servers'); + + $notificationSubject = 'removed'; + } elseif ($newStatus === 'active') { + // add signaling servers if account got active + $this->config->deleteAppValue('spreed', 'signaling_mode'); + $this->config->setAppValue('spreed', 'signaling_servers', json_encode([ + 'servers' => [ + [ + 'server' => $accountInfo['signaling']['url'], + 'verify' => true, + ] + ], + 'secret' => $accountInfo['signaling']['secret'], + ])); + $this->updateStunTurnSettings($oldAccountInfo, $accountInfo); + + $notificationSubject = 'added'; + } + + if (is_null($notificationSubject)) { + $notificationSubject = 'changed-status'; + $notificationParameters = [ + 'oldstatus' => $oldAccountInfo['status'], + 'newstatus' => $accountInfo['status'], + ]; + } + + // only credentials have changed + } elseif ($newStatus === 'active') { + if ($oldAccountInfo['signaling']['url'] !== $accountInfo['signaling']['url'] + || $oldAccountInfo['signaling']['secret'] !== $accountInfo['signaling']['secret']) { + $this->config->setAppValue('spreed', 'signaling_servers', json_encode([ + 'servers' => [ + [ + 'server' => $accountInfo['signaling']['url'], + 'verify' => true, + ] + ], + 'secret' => $accountInfo['signaling']['secret'], + ])); + } + $this->updateStunTurnSettings($oldAccountInfo, $accountInfo); + } + + // store new account info + if ($oldAccountInfo !== $accountInfo) { + $this->config->setAppValue('spreed', 'hosted-signaling-server-account', json_encode($accountInfo)); + } + + if (!is_null($notificationSubject)) { + $this->logger->info('Hosted signaling server background job caused a notification: ' . $notificationSubject . ' ' . json_encode($notificationParameters)); + + $notification = $this->notificationManager->createNotification(); + $notification + ->setApp('spreed') + ->setDateTime(new \DateTime()) + ->setObject('hosted-signaling-server', $notificationSubject) + ->setSubject($notificationSubject, $notificationParameters) + ->setLink($this->urlGenerator->linkToRouteAbsolute('settings.AdminSettings.index', ['section' => 'talk']) . '#signaling_server') + ->setIcon($this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('spreed', 'app-dark.svg'))) + ; + + $adminGroup = $this->groupManager->get('admin'); + if ($adminGroup instanceof IGroup) { + $users = $adminGroup->getUsers(); + foreach ($users as $user) { + // Now add the new notification + $notification->setUser($user->getUID()); + $this->notificationManager->notify($notification); + } + } + } + } +} diff --git a/lib/BackgroundJob/CheckMatterbridges.php b/lib/BackgroundJob/CheckMatterbridges.php new file mode 100644 index 0000000..dda11be --- /dev/null +++ b/lib/BackgroundJob/CheckMatterbridges.php @@ -0,0 +1,51 @@ +setInterval(60 * 15); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + + } + + #[\Override] + protected function run($argument): void { + if ($this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1') { + $this->bridgeManager->checkAllBridges(); + $this->bridgeManager->killZombieBridges(); + $this->logger->info('Checked if Matterbridge instances are running correctly.'); + } else { + if ($this->bridgeManager->stopAllBridges()) { + $this->logger->info('Stopped all Matterbridge instances as it is disabled'); + } + } + } +} diff --git a/lib/BackgroundJob/ExpireChatMessages.php b/lib/BackgroundJob/ExpireChatMessages.php new file mode 100644 index 0000000..c6e2512 --- /dev/null +++ b/lib/BackgroundJob/ExpireChatMessages.php @@ -0,0 +1,39 @@ +setInterval(5 * 60); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + } + + /** + * @inheritDoc + */ + #[\Override] + protected function run($argument): void { + $this->chatManager->deleteExpiredMessages(); + $this->pcmService->deleteExpiredMessages(); + } +} diff --git a/lib/BackgroundJob/ExpireObjectRooms.php b/lib/BackgroundJob/ExpireObjectRooms.php new file mode 100644 index 0000000..da2d480 --- /dev/null +++ b/lib/BackgroundJob/ExpireObjectRooms.php @@ -0,0 +1,77 @@ +setInterval(60 * 60); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + } + + #[\Override] + protected function run($argument): void { + $phoneRetention = $this->appConfig->getAppValueInt('retention_phone_rooms', 7); + if ($phoneRetention !== 0) { + $this->executeRetention(Room::OBJECT_TYPE_PHONE_TEMPORARY, $phoneRetention); + } + + $eventRetention = $this->appConfig->getAppValueInt('retention_event_rooms', 28); + if ($eventRetention !== 0) { + $this->executeRetention(Room::OBJECT_TYPE_EVENT, $eventRetention); + } + + $instantMeetingRetention = $this->appConfig->getAppValueInt('retention_instant_meetings', 1); + if ($instantMeetingRetention !== 0) { + $this->executeRetention(Room::OBJECT_TYPE_INSTANT_MEETING, $instantMeetingRetention); + } + } + + protected function executeRetention(string $objectType, int $retention): void { + $now = $this->time->getTime(); + $minimumLastActivity = $now - $retention * 24 * 3600; + $rooms = $this->manager->getExpiringRoomsForObjectType($objectType, $minimumLastActivity); + + $numDeletedRooms = 0; + foreach ($rooms as $room) { + if ($objectType === Room::OBJECT_TYPE_EVENT) { + [, $endTime] = explode('#', $room->getObjectId()); + if ($endTime >= $minimumLastActivity) { + // Event time is in the future, so don't even consider deleting + continue; + } + } + + $this->roomService->deleteRoom($room); + $numDeletedRooms++; + } + + $this->logger->info('Deleted {numDeletedRooms} {objectType} rooms because they did not have activity since {minimumLastActivity} days', [ + 'objectType' => $objectType, + 'numDeletedRooms' => $numDeletedRooms, + 'minimumLastActivity' => $retention, + ]); + } +} diff --git a/lib/BackgroundJob/ExpireSignalingMessage.php b/lib/BackgroundJob/ExpireSignalingMessage.php new file mode 100644 index 0000000..8a10a51 --- /dev/null +++ b/lib/BackgroundJob/ExpireSignalingMessage.php @@ -0,0 +1,40 @@ +setInterval(60 * 5); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + + } + + #[\Override] + protected function run($argument): void { + // Older than 5 minutes + $this->messages->expireOlderThan(5 * 60); + } +} diff --git a/lib/BackgroundJob/LockInactiveRooms.php b/lib/BackgroundJob/LockInactiveRooms.php new file mode 100644 index 0000000..0e336d3 --- /dev/null +++ b/lib/BackgroundJob/LockInactiveRooms.php @@ -0,0 +1,57 @@ +setInterval(60 * 60 * 24); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + } + + /** + * @inheritDoc + */ + #[\Override] + public function run($argument): void { + $interval = $this->appConfig->getInactiveLockTime(); + $forceLobby = $this->appConfig->enableLobbyOnLockedRooms(); + if ($interval === 0) { + return; + } + $timestamp = $this->time->getTime() - $interval * 60 * 60 * 24; + $time = $this->time->getDateTime('@' . $timestamp); + $rooms = $this->roomService->getInactiveRooms($time); + array_map(function (Room $room) use ($forceLobby) { + $this->roomService->setReadOnly($room, Room::READ_ONLY); + $this->logger->debug("Locking room {$room->getId()} due to inactivity"); + if ($forceLobby) { + $this->roomService->setLobby($room, Webinary::LOBBY_NON_MODERATORS, $this->time->getDateTime()); + $this->logger->debug("Enabling lobby for room {$room->getId()}"); + } + }, $rooms); + } +} diff --git a/lib/BackgroundJob/MaximumCallDuration.php b/lib/BackgroundJob/MaximumCallDuration.php new file mode 100644 index 0000000..949ab13 --- /dev/null +++ b/lib/BackgroundJob/MaximumCallDuration.php @@ -0,0 +1,58 @@ +setInterval(1); + } + + #[\Override] + protected function run($argument): void { + $maxCallDuration = $this->appConfig->getAppValueInt('max_call_duration'); + if ($maxCallDuration <= 0) { + return; + } + + $now = $this->time->getDateTime(); + $maxActiveSince = $now->sub(new \DateInterval('PT' . $maxCallDuration . 'S')); + $rooms = $this->manager->getRoomsLongerActiveSince($maxActiveSince); + + foreach ($rooms as $room) { + if ($room->isFederatedConversation()) { + continue; + } + + $result = $this->roomService->resetActiveSinceInDatabaseOnly($room); + if (!$result) { + // Someone else won the race condition, make sure this user disconnects directly and then return + continue; + } + + $this->participantService->endCallForEveryone($room, null); + $this->roomService->resetActiveSinceInModelOnly($room); + } + } +} diff --git a/lib/BackgroundJob/Reminder.php b/lib/BackgroundJob/Reminder.php new file mode 100644 index 0000000..320e6f1 --- /dev/null +++ b/lib/BackgroundJob/Reminder.php @@ -0,0 +1,33 @@ +setInterval(60); + } + + /** + * @inheritDoc + */ + #[\Override] + protected function run($argument): void { + $this->reminderService->executeReminders($this->time->getDateTime()); + } +} diff --git a/lib/BackgroundJob/RemoveEmptyRooms.php b/lib/BackgroundJob/RemoveEmptyRooms.php new file mode 100644 index 0000000..083dca4 --- /dev/null +++ b/lib/BackgroundJob/RemoveEmptyRooms.php @@ -0,0 +1,107 @@ +setInterval(60 * 5); + $this->setTimeSensitivity(IJob::TIME_INSENSITIVE); + + } + + #[\Override] + protected function run($argument): void { + $this->manager->forAllRooms([$this, 'callback']); + + if ($this->numDeletedRooms) { + $this->logger->info('Deleted {numDeletedRooms} rooms because they were empty', [ + 'numDeletedRooms' => $this->numDeletedRooms, + ]); + } + } + + public function callback(Room $room): void { + if ($room->getType() === Room::TYPE_CHANGELOG) { + return; + } + + if ($this->deleteIfIsEmpty($room)) { + return; + } + + $this->deleteIfFileIsRemoved($room); + } + + private function deleteIfIsEmpty(Room $room): bool { + if ($room->getObjectType() === 'file') { + return false; + } + + if ($this->participantService->getNumberOfActors($room) !== 0) { + return false; + } + + if ($room->isFederatedConversation() + && $this->federationManager->getNumberOfInvitations($room) !== 0) { + return false; + } + + $this->doDeleteRoom($room); + return true; + } + + private function deleteIfFileIsRemoved(Room $room): bool { + if ($room->getObjectType() !== 'file') { + return false; + } + + $mountsForFile = $this->userMountCache->getMountsForFileId((int)$room->getObjectId()); + if (!empty($mountsForFile)) { + return false; + } + + $this->doDeleteRoom($room); + return true; + } + + private function doDeleteRoom(Room $room): void { + $this->roomService->deleteRoom($room); + $this->numDeletedRooms++; + } +} diff --git a/lib/BackgroundJob/ResetAssignedSignalingServer.php b/lib/BackgroundJob/ResetAssignedSignalingServer.php new file mode 100644 index 0000000..88a95ca --- /dev/null +++ b/lib/BackgroundJob/ResetAssignedSignalingServer.php @@ -0,0 +1,45 @@ +setInterval(60 * 5); + $this->setTimeSensitivity(IJob::TIME_SENSITIVE); + + $this->cache = $cacheFactory->createDistributed(CachePrefix::SIGNALING_ASSIGNED_SERVER); + } + + #[\Override] + protected function run($argument): void { + $this->manager->resetAssignedSignalingServers($this->cache); + } +} diff --git a/lib/BackgroundJob/RetryNotificationsJob.php b/lib/BackgroundJob/RetryNotificationsJob.php new file mode 100644 index 0000000..0799edc --- /dev/null +++ b/lib/BackgroundJob/RetryNotificationsJob.php @@ -0,0 +1,33 @@ +setInterval(1); + } + + #[\Override] + protected function run($argument): void { + $this->backendNotifier->retrySendingFailedNotifications($this->time->getDateTime()); + } +} diff --git a/lib/CachePrefix.php b/lib/CachePrefix.php new file mode 100644 index 0000000..8265411 --- /dev/null +++ b/lib/CachePrefix.php @@ -0,0 +1,16 @@ + [ + 'allowed', + 'folder', + ], + 'call' => [ + 'predefined-backgrounds', + 'predefined-backgrounds-v2', + 'can-upload-background', + 'start-without-media', + 'blur-virtual-background', + 'play-sounds', + 'grid-limit', + 'grid-limit-enforced', + ], + 'chat' => [ + 'read-privacy', + 'has-translation-providers', + 'has-translation-task-providers', + 'typing-privacy', + 'summary-threshold', + 'matterbridge-enabled', + ], + 'conversations' => [ + 'can-create', + 'list-style', + 'description-length', + ], + 'federation' => [ + 'enabled', + 'incoming-enabled', + 'outgoing-enabled', + 'only-trusted-servers', + ], + 'previews' => [ + 'max-gif-size', + ], + 'signaling' => [ + 'session-ping-limit', + 'hello-v2-token-key', + 'mode', + ], + 'experiments' => [ + 'enabled', + ], + 'permissions' => [ + ], + ]; + + protected ICache $talkCache; + + public function __construct( + protected IConfig $serverConfig, + protected Config $talkConfig, + protected IAppConfig $appConfig, + protected ICommentsManager $commentsManager, + protected IUserSession $userSession, + protected IAppManager $appManager, + protected ITranslationManager $translationManager, + protected ITaskProcessingManager $taskProcessingManager, + protected LiveTranscriptionService $liveTranscriptionService, + ICacheFactory $cacheFactory, + ) { + $this->talkCache = $cacheFactory->createLocal('talk::'); + } + + /** + * @return array{ + * spreed?: TalkCapabilities, + * } + */ + #[\Override] + public function getCapabilities(): array { + $user = $this->userSession->getUser(); + if ($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)) { + return []; + } + + $capabilities = [ + 'features' => self::FEATURES, + 'features-local' => self::LOCAL_FEATURES, + 'config' => [ + 'attachments' => [ + 'allowed' => $user instanceof IUser && $user->getBackendClassName() !== UserBackend::class, + // 'folder' => string, + ], + 'call' => [ + 'enabled' => ((int)$this->serverConfig->getAppValue('spreed', 'start_calls', (string)Room::START_CALL_EVERYONE)) !== Room::START_CALL_NOONE, + 'breakout-rooms' => $this->talkConfig->isBreakoutRoomsEnabled(), + 'recording' => $this->talkConfig->isRecordingEnabled(), + 'recording-consent' => $this->talkConfig->recordingConsentRequired(), + 'supported-reactions' => ['❤️', '🎉', '👏', '👋', '👍', '👎', '🔥', '😂', '🤩', '🤔', '😲', '😥'], + // 'predefined-backgrounds' => list, + // 'predefined-backgrounds-v2' => list, + 'can-upload-background' => false, + 'sip-enabled' => $this->talkConfig->isSIPConfigured(), + 'sip-dialout-enabled' => $this->talkConfig->isSIPDialOutEnabled(), + 'default-phone-region' => $this->serverConfig->getSystemValueString('default_phone_region'), + 'can-enable-sip' => false, + 'start-without-media' => $this->talkConfig->getCallsStartWithoutMedia($user?->getUID()), + 'max-duration' => $this->appConfig->getAppValueInt('max_call_duration'), + 'blur-virtual-background' => $this->talkConfig->getBlurVirtualBackground($user?->getUID()), + 'end-to-end-encryption' => $this->talkConfig->isCallEndToEndEncryptionEnabled(), + 'live-transcription' => $this->talkConfig->getSignalingMode() === Config::SIGNALING_EXTERNAL + && $this->liveTranscriptionService->isLiveTranscriptionAppEnabled(), + 'play-sounds' => $this->talkConfig->getPlaySoundsForUser($user), + 'grid-limit' => $this->talkConfig->getGridVideosLimit(), + 'grid-limit-enforced' => $this->talkConfig->getGridVideosLimitEnforced(), + ], + 'chat' => [ + 'max-length' => ChatManager::MAX_CHAT_LENGTH, + 'read-privacy' => Participant::PRIVACY_PUBLIC, + 'has-translation-providers' => $this->translationManager->hasProviders(), + 'has-translation-task-providers' => false, + 'typing-privacy' => Participant::PRIVACY_PUBLIC, + 'summary-threshold' => max(1, $this->appConfig->getAppValueInt('summary_threshold', 100)), + 'matterbridge-enabled' => $user instanceof IUser && $this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1', + ], + 'conversations' => [ + 'can-create' => $user instanceof IUser && !$this->talkConfig->isNotAllowedToCreateConversations($user), + 'force-passwords' => $this->talkConfig->isPasswordEnforced(), + 'list-style' => $this->talkConfig->getConversationsListStyle($user?->getUID()), + 'description-length' => Room::DESCRIPTION_MAXIMUM_LENGTH, + 'retention-event' => max(0, $this->appConfig->getAppValueInt('retention_event_rooms', 28)), + 'retention-phone' => max(0, $this->appConfig->getAppValueInt('retention_phone_rooms', 7)), + 'retention-instant-meetings' => max(0, $this->appConfig->getAppValueInt('retention_instant_meetings', 1)), + ], + 'federation' => [ + 'enabled' => false, + 'incoming-enabled' => false, + 'outgoing-enabled' => false, + 'only-trusted-servers' => true, + ], + 'previews' => [ + 'max-gif-size' => (int)$this->serverConfig->getAppValue('spreed', 'max-gif-size', '3145728'), + ], + 'signaling' => [ + 'session-ping-limit' => max(0, (int)$this->serverConfig->getAppValue('spreed', 'session-ping-limit', '200')), + 'mode' => $this->talkConfig->getSignalingMode(), + // 'hello-v2-token-key' => string, + ], + 'experiments' => [ + 'enabled' => max(0, $this->appConfig->getAppValueInt($user instanceof IUser ? 'experiments_users' : 'experiments_guests')), + ], + 'permissions' => [ + 'max-default' => Attendee::PERMISSIONS_MAX_DEFAULT, + 'max-custom' => Attendee::PERMISSIONS_MAX_CUSTOM, + 'default' => $this->talkConfig->getDefaultPermissions(), + ], + ], + 'config-local' => self::LOCAL_CONFIGS, + 'version' => $this->appManager->getAppVersion('spreed'), + ]; + + if ($this->serverConfig->getAppValue('core', 'backgroundjobs_mode', 'ajax') === 'cron') { + $capabilities['features'][] = 'message-expiration'; + } + + if ($this->commentsManager->supportReactions()) { + $capabilities['features'][] = 'reactions'; + } + + if ($user instanceof IUser) { + if ($this->talkConfig->isFederationEnabled() && $this->talkConfig->isFederationEnabledForUserId($user)) { + $capabilities['config']['federation'] = [ + 'enabled' => true, + 'incoming-enabled' => $this->appConfig->getAppValueBool('federation_incoming_enabled', true), + 'outgoing-enabled' => $this->appConfig->getAppValueBool('federation_outgoing_enabled', true), + 'only-trusted-servers' => $this->appConfig->getAppValueBool('federation_only_trusted_servers'), + ]; + } + + $capabilities['config']['attachments']['folder'] = $this->talkConfig->getAttachmentFolder($user->getUID()); + $capabilities['config']['chat']['read-privacy'] = $this->talkConfig->getUserReadPrivacy($user->getUID()); + $capabilities['config']['chat']['typing-privacy'] = $this->talkConfig->getUserTypingPrivacy($user->getUID()); + $capabilities['config']['call']['blur-virtual-background'] = $this->talkConfig->getBlurVirtualBackground($user->getUID()); + } + + $pubKey = $this->talkConfig->getSignalingTokenPublicKey(); + if ($pubKey) { + $capabilities['config']['signaling']['hello-v2-token-key'] = $pubKey; + } + + $includeBrandedBackgrounds = $user instanceof IUser || $this->appConfig->getAppValueBool('backgrounds_branded_for_guests'); + $includeDefaultBackgrounds = !$user instanceof IUser || $this->appConfig->getAppValueBool('backgrounds_default_for_users', true); + + $predefinedBackgrounds = []; + $defaultBackgrounds = $this->getBackgroundsFromDirectory(__DIR__ . '/../img/backgrounds', '_default'); + if ($includeBrandedBackgrounds) { + $predefinedBackgrounds = $this->getBackgroundsFromDirectory(\OC::$SERVERROOT . '/themes/talk-backgrounds', '_branded'); + $predefinedBackgrounds = array_map(static fn ($fileName) => '/themes/talk-backgrounds/' . $fileName, $predefinedBackgrounds); + } + + if ($includeDefaultBackgrounds) { + $spreedWebPath = $this->appManager->getAppWebPath('spreed'); + $prefixedDefaultBackgrounds = array_map(static fn ($fileName) => $spreedWebPath . '/img/backgrounds/' . $fileName, $defaultBackgrounds); + $predefinedBackgrounds = array_merge($predefinedBackgrounds, $prefixedDefaultBackgrounds); + } + + $capabilities['config']['call']['predefined-backgrounds'] = $defaultBackgrounds; + $capabilities['config']['call']['predefined-backgrounds-v2'] = array_values($predefinedBackgrounds); + + if ($user instanceof IUser) { + $userAllowedToUpload = $this->appConfig->getAppValueBool('backgrounds_upload_users', true); + if ($userAllowedToUpload) { + $quota = $user->getQuota(); + if ($quota !== 'none') { + $quota = Util::computerFileSize($quota); + } + $capabilities['config']['call']['can-upload-background'] = $quota === 'none' || $quota > 0; + } + $capabilities['config']['call']['can-enable-sip'] = $this->talkConfig->canUserEnableSIP($user); + } + + $supportedTaskTypeIds = $this->taskProcessingManager->getAvailableTaskTypeIds(); + if (in_array(TextToTextSummary::ID, $supportedTaskTypeIds, true)) { + $capabilities['features'][] = 'chat-summary-api'; + } + if (in_array(TextToTextTranslate::ID, $supportedTaskTypeIds, true)) { + $capabilities['config']['chat']['has-translation-task-providers'] = true; + } + + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_EXTERNAL) { + $capabilities['features'][] = 'call-end-to-end-encryption'; + } + + return [ + 'spreed' => $capabilities, + ]; + } + + /** + * @return list + */ + protected function getBackgroundsFromDirectory(string $directory, string $cacheSuffix): array { + $cacheKey = 'predefined_backgrounds' . $cacheSuffix; + + /** @var ?list $predefinedBackgrounds */ + $predefinedBackgrounds = null; + $cachedPredefinedBackgrounds = $this->talkCache->get($cacheKey); + if ($cachedPredefinedBackgrounds !== null) { + // Try using cached value + /** @var list|null $predefinedBackgrounds */ + $predefinedBackgrounds = json_decode($cachedPredefinedBackgrounds, true); + } + + if (!is_array($predefinedBackgrounds)) { + if (file_exists($directory) && is_dir($directory)) { + $directoryIterator = new \DirectoryIterator($directory); + foreach ($directoryIterator as $file) { + if (!$file->isFile()) { + continue; + } + if ($file->isDot()) { + continue; + } + if ($file->getFilename() === 'COPYING') { + continue; + } + $predefinedBackgrounds[] = $file->getFilename(); + } + sort($predefinedBackgrounds); + } + + $this->talkCache->set($cacheKey, json_encode($predefinedBackgrounds), 300); + } + + return $predefinedBackgrounds ?? []; + } +} diff --git a/lib/Chat/AutoComplete/SearchPlugin.php b/lib/Chat/AutoComplete/SearchPlugin.php new file mode 100644 index 0000000..bebf142 --- /dev/null +++ b/lib/Chat/AutoComplete/SearchPlugin.php @@ -0,0 +1,451 @@ +room = $context['room']; + } + + /** + * @param string $search + * @param int $limit + * @param int $offset + * @param ISearchResult $searchResult + * @return bool whether the plugin has more results + * @since 13.0.0 + */ + #[\Override] + public function search($search, $limit, $offset, ISearchResult $searchResult): bool { + if ($this->room->getObjectType() === 'file') { + $usersWithFileAccess = $this->util->getUsersWithAccessFile($this->room->getObjectId()); + if (!empty($usersWithFileAccess)) { + $users = []; + foreach ($usersWithFileAccess as $userId) { + $users[$userId] = $this->userManager->getDisplayName($userId) ?? $userId; + } + $this->searchUsers($search, $users, $searchResult); + } + } + + /** @var array $userIds */ + $userIds = []; + /** @var array $groupIds */ + $groupIds = []; + /** @var array $cloudIds */ + $cloudIds = []; + /** @var array $emailAttendees */ + $emailAttendees = []; + /** @var list $guestAttendees */ + $guestAttendees = []; + /** @var array $teamIds */ + $teamIds = []; + + if ($this->room->getType() === Room::TYPE_ONE_TO_ONE) { + // Add potential leavers of one-to-one rooms again. + $participants = json_decode($this->room->getName(), true); + foreach ($participants as $userId) { + $userIds[$userId] = $this->userManager->getDisplayName($userId) ?? $userId; + } + } else { + $participants = $this->participantService->getParticipantsForRoom($this->room); + foreach ($participants as $participant) { + $attendee = $participant->getAttendee(); + if ($attendee->getActorType() === Attendee::ACTOR_GUESTS) { + $guestAttendees[] = $attendee; + } elseif ($attendee->getActorType() === Attendee::ACTOR_EMAILS) { + $emailAttendees[$attendee->getActorId()] = $attendee; + } elseif ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $userIds[$attendee->getActorId()] = $attendee->getDisplayName(); + } elseif ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $cloudIds[$attendee->getActorId()] = $attendee->getDisplayName(); + } elseif ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { + $groupIds[$attendee->getActorId()] = $attendee->getDisplayName(); + } elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + $teamIds[$attendee->getActorId()] = $attendee->getDisplayName(); + } + } + } + + $this->searchUsers($search, $userIds, $searchResult); + $this->searchGroups($search, $groupIds, $searchResult); + $this->searchGuests($search, $guestAttendees, $searchResult); + $this->searchEmails($search, $emailAttendees, $searchResult); + $this->searchFederatedUsers($search, $cloudIds, $searchResult); + $this->searchTeams($search, $teamIds, $searchResult); + + return false; + } + + /** + * @param array $users + */ + protected function searchUsers(string $search, array $users, ISearchResult $searchResult): void { + $search = mb_strtolower($search); + + $type = new SearchResultType('users'); + + $matches = $exactMatches = []; + foreach ($users as $userId => $displayName) { + $userId = (string)$userId; + if ($searchResult->hasResult($type, $userId)) { + continue; + } + + if ($search === '') { + $matches[] = $this->createResult('user', $userId, $displayName); + continue; + } + + if (strtolower($userId) === $search) { + $exactMatches[] = $this->createResult('user', $userId, $displayName); + continue; + } + + if (stripos($userId, $search) !== false) { + $matches[] = $this->createResult('user', $userId, $displayName); + continue; + } + + if ($displayName === '') { + continue; + } + + if (mb_strtolower($displayName) === $search) { + $exactMatches[] = $this->createResult('user', $userId, $displayName); + continue; + } + + if (mb_stripos($displayName, $search) !== false) { + $matches[] = $this->createResult('user', $userId, $displayName); + continue; + } + } + + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + /** + * @param array $cloudIds + */ + protected function searchFederatedUsers(string $search, array $cloudIds, ISearchResult $searchResult): void { + $search = mb_strtolower($search); + + $type = new SearchResultType('federated_users'); + + $matches = $exactMatches = []; + foreach ($cloudIds as $cloudId => $displayName) { + if ($searchResult->hasResult($type, $cloudId)) { + continue; + } + + if ($search === '') { + $matches[] = $this->createResult('federated_user', $cloudId, $displayName); + continue; + } + + if (mb_strtolower($cloudId) === $search) { + $exactMatches[] = $this->createResult('federated_user', $cloudId, $displayName); + continue; + } + + if (stripos($cloudId, $search) !== false) { + $matches[] = $this->createResult('federated_user', $cloudId, $displayName); + continue; + } + + if ($displayName === '') { + continue; + } + + if (mb_strtolower($displayName) === $search) { + $exactMatches[] = $this->createResult('federated_user', $cloudId, $displayName); + continue; + } + + if (mb_stripos($displayName, $search) !== false) { + $matches[] = $this->createResult('federated_user', $cloudId, $displayName); + continue; + } + } + + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + /** + * @param array $groups + */ + protected function searchGroups(string $search, array $groups, ISearchResult $searchResult): void { + $search = mb_strtolower($search); + + $type = new SearchResultType('groups'); + + $matches = $exactMatches = []; + foreach ($groups as $groupId => $displayName) { + if ($displayName === '') { + continue; + } + + $groupId = (string)$groupId; + if ($searchResult->hasResult($type, $groupId)) { + continue; + } + + if ($search === '') { + $matches[] = $this->createGroupResult($groupId, $displayName); + continue; + } + + if (mb_strtolower($groupId) === $search) { + $exactMatches[] = $this->createGroupResult($groupId, $displayName); + continue; + } + + if (mb_stripos($groupId, $search) !== false) { + $matches[] = $this->createGroupResult($groupId, $displayName); + continue; + } + + if (mb_strtolower($displayName) === $search) { + $exactMatches[] = $this->createGroupResult($groupId, $displayName); + continue; + } + + if (mb_stripos($displayName, $search) !== false) { + $matches[] = $this->createGroupResult($groupId, $displayName); + continue; + } + } + + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + /** + * @param string $search + * @param list $attendees + * @param ISearchResult $searchResult + */ + protected function searchGuests(string $search, array $attendees, ISearchResult $searchResult): void { + if (empty($attendees)) { + $type = new SearchResultType('guests'); + $searchResult->addResultSet($type, [], []); + return; + } + + $search = mb_strtolower($search); + $matches = $exactMatches = []; + foreach ($attendees as $attendee) { + $name = $attendee->getDisplayName() ?: $this->l->t('Guest'); + if ($search === '') { + $matches[] = $this->createGuestResult($attendee->getActorId(), $name); + continue; + } + + if (mb_strtolower($name) === $search) { + $exactMatches[] = $this->createGuestResult($attendee->getActorId(), $name); + continue; + } + + if (mb_stripos($name, $search) !== false) { + $matches[] = $this->createGuestResult($attendee->getActorId(), $name); + continue; + } + } + + $type = new SearchResultType('guests'); + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + /** + * @param string $search + * @param array $attendees + * @param ISearchResult $searchResult + */ + protected function searchEmails(string $search, array $attendees, ISearchResult $searchResult): void { + if (empty($attendees)) { + $type = new SearchResultType('emails'); + $searchResult->addResultSet($type, [], []); + return; + } + + $search = mb_strtolower($search); + $currentSessionHash = null; + if (!$this->userId) { + // Best effort: Might not work on guests that reloaded but not worth too much performance impact atm. + $currentSessionHash = false; // FIXME sha1($this->talkSession->getSessionForRoom($this->room->getToken())); + } + + $matches = $exactMatches = []; + foreach ($attendees as $actorId => $attendee) { + if ($currentSessionHash === $actorId) { + // Do not suggest the current guest + continue; + } + + $displayName = $attendee->getDisplayName() ?: $this->l->t('Guest'); + if ($search === '') { + $matches[] = $this->createEmailResult($actorId, $displayName, $attendee->getInvitedCloudId()); + continue; + } + + if (mb_strtolower($displayName) === $search) { + $exactMatches[] = $this->createEmailResult($actorId, $displayName, $attendee->getInvitedCloudId()); + continue; + } + + if (mb_stripos($displayName, $search) !== false) { + $matches[] = $this->createEmailResult($actorId, $displayName, $attendee->getInvitedCloudId()); + continue; + } + } + + $type = new SearchResultType('emails'); + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + /** + * @param string $search + * @param array $attendees + * @param ISearchResult $searchResult + */ + /** + * @param array $teams + */ + protected function searchTeams(string $search, array $teams, ISearchResult $searchResult): void { + $search = mb_strtolower($search); + + $type = new SearchResultType('teams'); + + $matches = $exactMatches = []; + foreach ($teams as $teamId => $displayName) { + if ($displayName === '') { + continue; + } + + $teamId = (string)$teamId; + if ($searchResult->hasResult($type, $teamId)) { + continue; + } + + if ($search === '') { + $matches[] = $this->createTeamResult($teamId, $displayName); + continue; + } + + if (strtolower($teamId) === $search) { + $exactMatches[] = $this->createTeamResult($teamId, $displayName); + continue; + } + + if (stripos($teamId, $search) !== false) { + $matches[] = $this->createTeamResult($teamId, $displayName); + continue; + } + + if (mb_strtolower($displayName) === $search) { + $exactMatches[] = $this->createTeamResult($teamId, $displayName); + continue; + } + + if (mb_stripos($displayName, $search) !== false) { + $matches[] = $this->createTeamResult($teamId, $displayName); + } + } + + $searchResult->addResultSet($type, $matches, $exactMatches); + } + + protected function createResult(string $type, string $uid, string $name): array { + if ($type === 'user' && $name === '') { + $name = $this->userManager->getDisplayName($uid) ?? $uid; + } + + return [ + 'label' => $name, + 'value' => [ + 'shareType' => $type, + 'shareWith' => $uid, + ], + ]; + } + + protected function createGroupResult(string $groupId, string $name): array { + return [ + 'label' => $name, + 'value' => [ + 'shareType' => 'group', + 'shareWith' => 'group/' . $groupId, + ], + ]; + } + + protected function createGuestResult(string $actorId, string $name): array { + return [ + 'label' => $name, + 'value' => [ + 'shareType' => 'guest', + 'shareWith' => 'guest/' . $actorId, + ], + ]; + } + + protected function createEmailResult(string $actorId, string $name, ?string $email): array { + $data = [ + 'label' => $name, + 'value' => [ + 'shareType' => 'email', + 'shareWith' => 'email/' . $actorId, + ], + ]; + + if ($email) { + $data['details'] = ['email' => $email]; + } + + return $data; + } + + protected function createTeamResult(string $actorId, string $name): array { + return [ + 'label' => $name, + 'value' => [ + 'shareType' => 'team', + 'shareWith' => 'team/' . $actorId, + ], + ]; + } +} diff --git a/lib/Chat/AutoComplete/Sorter.php b/lib/Chat/AutoComplete/Sorter.php new file mode 100644 index 0000000..270b35e --- /dev/null +++ b/lib/Chat/AutoComplete/Sorter.php @@ -0,0 +1,86 @@ + &$byType) { + if ($type !== 'users') { + continue; + } + + /** @var \DateTime[] $lastComments */ + $lastComments = $this->commentsManager->getLastCommentDateByActor( + $context['itemType'], + $context['itemId'], + ChatManager::VERB_MESSAGE, + $type, + array_map(function (array $suggestion) { + return $suggestion['value']['shareWith']; + }, $byType)); + + $search = $context['search']; + $selfUserId = $context['selfUserId'] ?? null; + + usort($byType, static function (array $a, array $b) use ($lastComments, $search, $selfUserId) { + if ($selfUserId === $a['value']['shareWith']) { + return 1; + } + if ($selfUserId === $b['value']['shareWith']) { + return -1; + } + + if ($search) { + // If the user searched for "Dani" we make sure "Daniel" comes before "Madani" + if (stripos($a['label'], $search) === 0) { + if (stripos($b['label'], $search) !== 0) { + return -1; + } + } elseif (stripos($b['label'], $search) === 0) { + return 1; + } + } + + if (!isset($lastComments[$b['value']['shareWith']])) { + return -1; + } + if (!isset($lastComments[$a['value']['shareWith']])) { + return 1; + } + return $lastComments[$b['value']['shareWith']]->getTimestamp() - $lastComments[$a['value']['shareWith']]->getTimestamp(); + }); + } + } +} diff --git a/lib/Chat/Changelog/Listener.php b/lib/Chat/Changelog/Listener.php new file mode 100644 index 0000000..4e749bd --- /dev/null +++ b/lib/Chat/Changelog/Listener.php @@ -0,0 +1,38 @@ + + */ +class Listener implements IEventListener { + public function __construct( + protected Manager $manager, + protected IConfig $serverConfig, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeRoomsFetchEvent) { + return; + } + + if ($this->serverConfig->getAppValue('spreed', 'changelog', 'yes') !== 'yes') { + return; + } + + $this->manager->updateChangelog($event->getUserId()); + } +} diff --git a/lib/Chat/Changelog/Manager.php b/lib/Chat/Changelog/Manager.php new file mode 100644 index 0000000..b906e5c --- /dev/null +++ b/lib/Chat/Changelog/Manager.php @@ -0,0 +1,157 @@ +config->getUserValue($userId, 'spreed', 'changelog', '0'); + } + + public function updateChangelog(string $userId): void { + $logs = $this->getChangelogs(); + $hasReceivedLog = $this->getChangelogForUser($userId); + $shouldHaveReceived = count($logs); + + if ($hasReceivedLog === $shouldHaveReceived) { + return; + } + + try { + $this->config->setUserValue($userId, 'spreed', 'changelog', (string)$shouldHaveReceived, (string)$hasReceivedLog); + } catch (PreConditionNotMetException) { + // Parallel request won the race + return; + } + + $room = $this->roomManager->getChangelogRoom($userId); + + foreach ($logs as $key => $changelog) { + if ($key < $hasReceivedLog || $changelog === '') { + continue; + } + $this->chatManager->addChangelogMessage($room, $changelog); + } + } + + public function getChangelogs(): array { + return [ + $this->l->t( + "## Welcome to Nextcloud Talk!\n" + . 'In this conversation you will be informed about new features available in Nextcloud Talk.' + ), + $this->l->t('## New in Talk %s', ['6']), + $this->l->t('- Microsoft Edge and Safari can now be used to participate in audio and video calls'), + $this->l->t('- One-to-one conversations are now persistent and cannot be turned into group conversations by accident anymore. Also when one of the participants leaves the conversation, the conversation is not automatically deleted anymore. Only if both participants leave, the conversation is deleted from the server'), + $this->l->t('- You can now notify all participants by posting "@all" into the chat'), + $this->l->t('- With the "arrow-up" key you can repost your last message'), + $this->l->t('- Talk can now have commands, send "/help" as a chat message to see if your administrator configured some'), + $this->l->t('- With projects you can create quick links between conversations, files and other items'), + $this->l->t('## New in Talk %s', ['7']), + $this->l->t('- You can now mention guests in the chat'), + $this->l->t('- Conversations can now have a lobby. This will allow moderators to join the chat and call already to prepare the meeting, while users and guests have to wait'), + $this->l->t('## New in Talk %s', ['8']), + $this->l->t('- You can now directly reply to messages giving the other users more context what your message is about'), + $this->l->t('- Searching for conversations and participants will now also filter your existing conversations, making it much easier to find previous conversations'), + $this->l->t('- You can now add custom user groups to conversations when the circles app is installed'), + $this->l->t('## New in Talk %s', ['9']), + $this->l->t('- Check out the new grid and call view'), + $this->l->t('- You can now upload and drag\'n\'drop files directly from your device into the chat'), + $this->l->t('- Shared files are now opened directly inside the chat view with the viewer apps'), + $this->l->t('## New in Talk %s', ['10']), + $this->l->t('- You can now search for chats and messages in the unified search in the top bar'), + $this->l->t('- Spice up your messages with emojis from the emoji picker'), + $this->l->t('- You can now change your camera and microphone while being in a call'), + $this->l->t('## New in Talk %s', ['11']), + $this->l->t('- Give your conversations some context with a description and open it up so logged in users can find it and join themselves'), + $this->l->t('- See a read status and send failed messages again'), + $this->l->t('- Raise your hand in a call with the R key'), + $this->l->t('## New in Talk %s', ['12']), + $this->l->t('- Join the same conversation and call from multiple devices'), + $this->l->t('- Send voice messages, share your location or contact details'), + $this->l->t('- Add groups to a conversation and new group members will automatically be added as participants'), + $this->l->t('## New in Talk %s', ['13']), + $this->l->t('- A preview of your audio and video is shown before joining a call'), + $this->l->t('- You can now blur your background in the newly designed call view'), + $this->l->t('- Moderators can now assign general and individual permissions to participants'), + $this->l->t('## New in Talk %s', ['14']), + $this->l->t('- You can now react to chat messages'), + $this->l->t('- In the sidebar you can now find an overview of the latest shared items'), + $this->l->t('## New in Talk %s', ['15']), + $this->l->t('- Use a poll to collect the opinions of others or settle on a date'), + $this->l->t('- Configure an expiration time for chat messages'), + $this->l->t('- Start calls without notifying others in big conversations. You can send individual call notifications once the call has started.'), + $this->l->t('- Send chat messages without notifying the recipients in case it is not urgent'), + $this->l->t('## New in Talk %s', ['16']), + $this->l->t('- Emojis can now be autocompleted by typing a ":"'), + $this->l->t('- Link various items using the new smart-picker by typing a "/"'), + $this->l->t('- Moderators can now create breakout rooms (requires the High-performance backend)'), + $this->l->t('- Calls can now be recorded (requires the High-performance backend)'), + $this->l->t('## New in Talk %s', ['17']) . "\n" + . $this->l->t('- Conversations can now have an avatar or emoji as icon') . "\n" + . $this->l->t('- Virtual backgrounds are now available in addition to the blurred background in video calls') . "\n" + . $this->l->t('- Reactions are now available during calls') . "\n" + . $this->l->t('- Typing indicators show which users are currently typing a message') . "\n" + . $this->l->t('- Groups can now be mentioned in chats') . "\n" + . $this->l->t('- Call recordings are automatically transcribed if a transcription provider app is registered') . "\n" + . $this->l->t('- Chat messages can be translated if a translation provider app is registered'), + $this->l->t('## New in Talk %s', ['17.1']) . "\n" + . $this->l->t('- **Markdown** can now be used in _chat_ messages') . "\n" + . $this->l->t('- Webhooks are now available to implement bots. See the documentation for more information https://nextcloud-talk.readthedocs.io/en/latest/bot-list/') . "\n" + . $this->l->t('- Set a reminder on a chat message to be notified later again'), + $this->l->t('## New in Talk %s', ['18']) . "\n" + . $this->l->t('- Use the **Note to self** conversation to take notes and share information between your devices') . "\n" + . $this->l->t('- Captions allow to send a message with a file at the same time') . "\n" + . $this->l->t('- Video of the speaker is now visible while sharing the screen and call reactions are animated'), + $this->l->t('## New in Talk %s', ['19']) . "\n" + . $this->l->t('- Messages can now be edited by logged-in authors and moderators for 6 hours') . "\n" + . $this->l->t('- Unsent message drafts are now saved in your browser') . "\n" + . $this->l->t('- Text chatting can now be done in a federated way with other Talk servers'), + $this->l->t('## New in Talk %s', ['20']) . "\n" + . $this->l->t('- Moderators can now ban accounts and guests to prevent them from rejoining a conversation') . "\n" + . $this->l->t('- Upcoming calls from linked calendar events and out-of-office replacements are now shown in conversations') . "\n" + . $this->l->t('- Calls can now be done in a federated way with other Talk servers (requires the High-performance backend)'), + $this->l->t('## New in Talk %s', ['20.1']) . "\n" + . $this->l->t('- Introducing the Nextcloud Talk desktop client for Windows, macOS and Linux: %s', ['https://nextcloud.com/talk-desktop-install']) . "\n" + . $this->l->t('- Summarize call recordings and unread messages in chats with the Nextcloud Assistant') . "\n" + . $this->l->t('- Improved meetings with recognizing guests invited via their email address, import of participant lists, drafts for polls and downloading call participant lists') . "\n" + . $this->l->t('- Archive conversations to stay focused'), + $this->l->t('## New in Talk %s', ['21']) . "\n" + . $this->l->t('- Schedule a meeting into your calendar from within a conversation') . "\n" + . $this->l->t('- Search for messages of the current conversation directly in the right sidebar') . "\n" + . $this->l->t('- See more conversations on a first glance with the new compact list (enable in the Talk settings)'), + $this->l->t('## New in Talk %s', ['21.1']) . "\n" + . $this->l->t('- Meeting conversations now sync the title and description from the calendar and are hidden with a search filter until they are close to the start') . "\n" + . $this->l->t('- Mark conversations as sensitive in the notification settings, to hide the message content from the conversation list and notifications') . "\n" + . $this->l->t('- To receive push notifications during "Do not disturb", mark conversations as important') . "\n" + . $this->l->t('- Add other participants to a one-to-one call to create a new group call on the fly') . "\n", + $this->l->t('## New in Talk %s', ['22']) . "\n" + . $this->l->t('- Use threads to keep your chat and discussions organized') . "\n" + . $this->l->t('- Live transcriptions now available during the call (requires the live-transcription ExApp and the High-performance backend)') . "\n", + ]; + } +} diff --git a/lib/Chat/ChatManager.php b/lib/Chat/ChatManager.php new file mode 100644 index 0000000..46fb2f5 --- /dev/null +++ b/lib/Chat/ChatManager.php @@ -0,0 +1,1227 @@ +cache = $cacheFactory->createDistributed(CachePrefix::CHAT_LAST_MESSAGE_ID); + $this->unreadCountCache = $cacheFactory->createDistributed(CachePrefix::CHAT_UNREAD_COUNT); + } + + /** + * Sends a new message to the given chat. + * + * @param bool $shouldSkipLastMessageUpdate If multiple messages will be posted + * (e.g. when adding multiple users to a room) we can skip the last + * message and last activity update until the last entry was created + * and then update with those values. + * This will replace O(n) with 1 database update. + * @throws MessagingNotAllowedException + */ + public function addSystemMessage( + Room $chat, + ?Participant $participant, + string $actorType, + string $actorId, + string $message, + \DateTime $creationDateTime, + bool $sendNotifications, + ?string $referenceId = null, + ?IComment $replyTo = null, + bool $shouldSkipLastMessageUpdate = false, + bool $silent = false, + int $threadId = 0, + ): IComment { + if ($chat->isFederatedConversation()) { + $e = new MessagingNotAllowedException(); + $this->logger->error('Attempt to post system message into proxy conversation', ['exception' => $e]); + throw $e; + } + + $comment = $this->commentsManager->create($actorType, $actorId, 'chat', (string)$chat->getId()); + $comment->setMessage($message, self::MAX_CHAT_LENGTH); + $comment->setCreationDateTime($creationDateTime); + if ($referenceId !== null) { + $referenceId = trim(substr($referenceId, 0, 64)); + if ($referenceId !== '') { + $comment->setReferenceId($referenceId); + } + } + if ($replyTo !== null) { + $comment->setParentId($replyTo->getId()); + } elseif ($threadId !== 0) { + $comment->setParentId((string)$threadId); + } + + $messageDecoded = json_decode($message, true); + $messageType = $messageDecoded['message'] ?? ''; + + if ($messageType === 'object_shared' || $messageType === 'file_shared') { + $comment->setVerb(self::VERB_OBJECT_SHARED); + } else { + $comment->setVerb(self::VERB_SYSTEM); + } + + $metadata = []; + if ($silent) { + $metadata[Message::METADATA_SILENT] = true; + } + if ($chat->getMentionPermissions() === Room::MENTION_PERMISSIONS_EVERYONE || $participant?->hasModeratorPermissions()) { + $metadata[Message::METADATA_CAN_MENTION_ALL] = true; + } + $comment->setMetaData($metadata); + + $this->setMessageExpiration($chat, $comment); + + $shouldFlush = $this->notificationManager->defer(); + $threadId = 0; + + $event = new BeforeSystemMessageSentEvent($chat, $comment, silent: $silent, parent: $replyTo, skipLastActivityUpdate: $shouldSkipLastMessageUpdate); + $this->dispatcher->dispatchTyped($event); + try { + $this->commentsManager->save($comment); + $threadId = (int)$comment->getTopmostParentId(); + + if (!$shouldSkipLastMessageUpdate) { + // Update last_message + $this->roomService->setLastMessage($chat, $comment); + $this->unreadCountCache->clear($chat->getId() . '-'); + + if ($threadId !== 0) { + $isThread = $this->threadService->updateLastMessageInfoAfterReply($threadId, (int)$comment->getId(), $chat->getId()); + if ($isThread && $actorType === Attendee::ACTOR_USERS) { + try { + // Add to subscribed threads list + $participant = $this->participantService->getParticipant($chat, $actorId); + $this->threadService->ensureIsThreadAttendee($participant->getAttendee(), $threadId); + } catch (ParticipantNotFoundException) { + } + } elseif (!$isThread) { + $threadId = 0; + } + } + } + + if ($sendNotifications) { + /** @var ?IComment $captionComment */ + $captionComment = null; + $alreadyNotifiedUsers = $usersDirectlyMentioned = $federatedUsersDirectlyMentioned = []; + if ($messageType === 'file_shared') { + if (isset($messageDecoded['parameters']['metaData']['caption'])) { + $captionComment = clone $comment; + $captionComment->setMessage($messageDecoded['parameters']['metaData']['caption'], self::MAX_CHAT_LENGTH); + $usersDirectlyMentioned = $this->notifier->getMentionedUserIds($captionComment); + $federatedUsersDirectlyMentioned = $this->notifier->getMentionedCloudIds($captionComment); + } + if ($replyTo instanceof IComment) { + $alreadyNotifiedUsers = $this->notifier->notifyReplyToAuthor($chat, $comment, $replyTo, $silent, $threadId); + if ($replyTo->getActorType() === Attendee::ACTOR_USERS) { + $usersDirectlyMentioned[] = $replyTo->getActorId(); + } elseif ($replyTo->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $federatedUsersDirectlyMentioned[] = $replyTo->getActorId(); + } + } + } + + $alreadyNotifiedUsers = $this->notifier->notifyMentionedUsers($chat, $captionComment ?? $comment, $alreadyNotifiedUsers, $silent, threadId: $threadId); + if (!empty($alreadyNotifiedUsers)) { + $userIds = array_column($alreadyNotifiedUsers, 'id'); + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_USERS, $userIds, (int)$comment->getId(), $usersDirectlyMentioned); + } + if (!empty($federatedUsersDirectlyMentioned)) { + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_FEDERATED_USERS, $federatedUsersDirectlyMentioned, (int)$comment->getId(), $federatedUsersDirectlyMentioned); + } + + $this->notifier->notifyOtherParticipant($chat, $comment, [], $silent); + } + + if (!$shouldSkipLastMessageUpdate && $sendNotifications) { + // Update the read-marker for the author when it is a "relevant" system message, + // e.g. sharing an item to the chat + try { + $participant = $this->participantService->getParticipantByActor($chat, $actorType, $actorId); + $this->participantService->updateLastReadMessage($participant, (int)$comment->getId()); + } catch (ParticipantNotFoundException) { + // Participant not found => No read-marker update needed + } + } + + $event = new SystemMessageSentEvent($chat, $comment, silent: $silent, parent: $replyTo, skipLastActivityUpdate: $shouldSkipLastMessageUpdate); + $this->dispatcher->dispatchTyped($event); + } catch (NotFoundException $e) { + } + $this->cache->remove($chat->getToken()); + if ($threadId !== 0) { + $this->cache->remove($chat->getToken() . '/' . $threadId); + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + + if ($messageType === 'object_shared' || $messageType === 'file_shared') { + $this->attachmentService->createAttachmentEntry($chat, $comment, $messageType, $messageDecoded['parameters'] ?? []); + } + + return $comment; + } + + /** + * Sends a new message to the given chat. + * + * @param Room $chat + * @param string $message + * @return IComment + */ + public function addChangelogMessage(Room $chat, string $message): IComment { + $comment = $this->commentsManager->create(Attendee::ACTOR_GUESTS, Attendee::ACTOR_ID_CHANGELOG, 'chat', (string)$chat->getId()); + + $comment->setMessage($message, self::MAX_CHAT_LENGTH); + $comment->setCreationDateTime($this->timeFactory->getDateTime()); + $comment->setVerb(self::VERB_MESSAGE); // Has to be 'comment', so it counts as unread message + + $threadId = 0; + $event = new BeforeSystemMessageSentEvent($chat, $comment); + $this->dispatcher->dispatchTyped($event); + try { + $this->commentsManager->save($comment); + $threadId = (int)$comment->getTopmostParentId(); + + // Update last_message + $this->roomService->setLastMessage($chat, $comment); + $this->unreadCountCache->clear($chat->getId() . '-'); + + $event = new SystemMessageSentEvent($chat, $comment); + $this->dispatcher->dispatchTyped($event); + } catch (NotFoundException $e) { + } + $this->cache->remove($chat->getToken()); + if ($threadId !== 0) { + $this->cache->remove($chat->getToken() . '/' . $threadId); + } + + return $comment; + } + + /** + * Post a new message to the given chat. + * + * @param Room $chat + * @param string $message + * @return IComment + */ + public function postSampleMessage(Room $chat, string $message, string $replyTo): IComment { + $comment = $this->commentsManager->create(Attendee::ACTOR_GUESTS, Attendee::ACTOR_ID_SAMPLE, 'chat', (string)$chat->getId()); + + if ($replyTo) { + $comment->setParentId($replyTo); + } + $comment->setMessage($message, self::MAX_CHAT_LENGTH); + $comment->setCreationDateTime($this->timeFactory->getDateTime()); + $comment->setVerb(self::VERB_MESSAGE); // Has to be 'comment', so it counts as unread message + $metaData = [ + Message::METADATA_CAN_MENTION_ALL => true, + ]; + $comment->setMetaData($metaData); + $threadId = 0; + + $event = new BeforeSystemMessageSentEvent($chat, $comment); + $this->dispatcher->dispatchTyped($event); + try { + $this->commentsManager->save($comment); + $threadId = (int)$comment->getTopmostParentId(); + + // Update last_message + $this->roomService->setLastMessage($chat, $comment); + $this->unreadCountCache->clear($chat->getId() . '-'); + + $event = new SystemMessageSentEvent($chat, $comment); + $this->dispatcher->dispatchTyped($event); + } catch (NotFoundException $e) { + } + $this->cache->remove($chat->getToken()); + if ($threadId !== 0) { + $this->cache->remove($chat->getToken() . '/' . $threadId); + } + + return $comment; + } + + /** + * Sends a new message to the given chat. + * + * @throws IRateLimitExceededException Only when $rateLimitGuestMentions is true and the author is a guest participant + * @throws MessageTooLongException + * @throws MessagingNotAllowedException + */ + public function sendMessage( + Room $chat, + ?Participant $participant, + string $actorType, + string $actorId, + string $message, + \DateTime $creationDateTime, + ?IComment $replyTo = null, + string $referenceId = '', + bool $silent = false, + bool $rateLimitGuestMentions = true, + int $threadId = 0, + ): IComment { + if ($chat->isFederatedConversation()) { + $e = new MessagingNotAllowedException(); + $this->logger->error('Attempt to post system message into proxy conversation', ['exception' => $e]); + throw $e; + } + + $comment = $this->commentsManager->create($actorType, $actorId, 'chat', (string)$chat->getId()); + $comment->setMessage($message, self::MAX_CHAT_LENGTH); + $comment->setCreationDateTime($creationDateTime); + // A verb ('comment', 'like'...) must be provided to be able to save a + // comment + $comment->setVerb(self::VERB_MESSAGE); + + if ($replyTo instanceof IComment) { + $comment->setParentId($replyTo->getId()); + $threadId = (int)$replyTo->getTopmostParentId() ?: (int)$replyTo->getId(); + $threadId = $this->threadService->validateThread($chat->getId(), $threadId) ? $threadId : Thread::THREAD_NONE; + } elseif ($threadId !== Thread::THREAD_NONE && $threadId !== Thread::THREAD_CREATE) { + $comment->setParentId((string)$threadId); + } + + $referenceId = trim(substr($referenceId, 0, 64)); + if ($referenceId !== '') { + $comment->setReferenceId($referenceId); + } + $this->setMessageExpiration($chat, $comment); + + if ($rateLimitGuestMentions && $participant instanceof Participant && $participant->isGuest()) { + $mentions = $comment->getMentions(); + if (!empty($mentions)) { + $this->rateLimiter->registerAnonRequest( + 'talk-mentions', + self::RATE_LIMIT_GUEST_MENTIONS_LIMIT, + self::RATE_LIMIT_GUEST_MENTIONS_PERIOD, + $this->request->getRemoteAddress(), + ); + } + } + + $metadata = []; + if ($silent) { + $metadata[Message::METADATA_SILENT] = true; + } + if ($chat->getMentionPermissions() === Room::MENTION_PERMISSIONS_EVERYONE || $participant?->hasModeratorPermissions()) { + $metadata[Message::METADATA_CAN_MENTION_ALL] = true; + } + if ($threadId !== Thread::THREAD_NONE) { + $metadata[Message::METADATA_THREAD_ID] = $threadId; + } + $comment->setMetaData($metadata); + + $event = new BeforeChatMessageSentEvent($chat, $comment, $participant, $silent, $replyTo); + $this->dispatcher->dispatchTyped($event); + + $shouldFlush = $this->notificationManager->defer(); + try { + $this->commentsManager->save($comment); + $messageId = (int)$comment->getId(); + if ($threadId === Thread::THREAD_CREATE) { + $metadata[Message::METADATA_THREAD_ID] = $messageId; + $comment->setMetaData($metadata); + $this->commentsManager->save($comment); + } elseif ($threadId !== Thread::THREAD_NONE) { + $isThread = $this->threadService->updateLastMessageInfoAfterReply($threadId, $messageId, $chat->getId()); + if (!$isThread) { + $threadId = Thread::THREAD_NONE; + } elseif ($participant instanceof Participant) { + // Add to subscribed threads list + $this->threadService->ensureIsThreadAttendee($participant->getAttendee(), $threadId); + } + } + + if ($participant instanceof Participant) { + $this->participantService->updateLastReadMessage($participant, $messageId); + } + + // Update last_message + if ($comment->getActorType() !== Attendee::ACTOR_BOTS + || $comment->getActorId() === Attendee::ACTOR_ID_CHANGELOG + || str_starts_with($comment->getActorId(), Attendee::ACTOR_BOT_PREFIX)) { + $this->roomService->setLastMessage($chat, $comment); + $this->unreadCountCache->clear($chat->getId() . '-'); + } else { + $this->roomService->setLastActivity($chat, $comment->getCreationDateTime()); + } + + $alreadyNotifiedUsers = []; + $usersDirectlyMentioned = $this->notifier->getMentionedUserIds($comment); + $federatedUsersDirectlyMentioned = $this->notifier->getMentionedCloudIds($comment); + if ($replyTo instanceof IComment) { + $alreadyNotifiedUsers = $this->notifier->notifyReplyToAuthor($chat, $comment, $replyTo, $silent, $threadId); + if ($replyTo->getActorType() === Attendee::ACTOR_USERS) { + $usersDirectlyMentioned[] = $replyTo->getActorId(); + } elseif ($replyTo->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $federatedUsersDirectlyMentioned[] = $replyTo->getActorId(); + } + } + + $alreadyNotifiedUsers = $this->notifier->notifyMentionedUsers($chat, $comment, $alreadyNotifiedUsers, $silent, $participant, threadId: $threadId); + if (!empty($alreadyNotifiedUsers)) { + $userIds = array_column($alreadyNotifiedUsers, 'id'); + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_USERS, $userIds, (int)$comment->getId(), $usersDirectlyMentioned); + } + if (!empty($federatedUsersDirectlyMentioned)) { + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_FEDERATED_USERS, $federatedUsersDirectlyMentioned, (int)$comment->getId(), $federatedUsersDirectlyMentioned); + } + + // User was not mentioned, send a normal notification + $this->notifier->notifyOtherParticipant($chat, $comment, $alreadyNotifiedUsers, $silent); + + $event = new ChatMessageSentEvent($chat, $comment, $participant, $silent, $replyTo); + $this->dispatcher->dispatchTyped($event); + } catch (NotFoundException $e) { + } + $this->cache->remove($chat->getToken()); + if ($threadId !== Thread::THREAD_NONE) { + $this->cache->remove($chat->getToken() . '/' . $threadId); + } + if ($shouldFlush) { + $this->notificationManager->flush(); + } + + return $comment; + } + + private function setMessageExpiration(Room $room, IComment $comment): void { + $messageExpiration = $room->getMessageExpiration(); + if (!$messageExpiration) { + return; + } + + $dateTime = $this->timeFactory->getDateTime(); + $dateTime->add(DateInterval::createFromDateString($messageExpiration . ' seconds')); + $comment->setExpireDate($dateTime); + } + + /** + * @param Room $room + * @param Participant $participant + * @param array $messageData + * @throws ShareNotFound + */ + public function unshareFileOnMessageDelete(Room $room, Participant $participant, array $messageData): void { + if (!isset($messageData['message'], $messageData['parameters']['share']) || $messageData['message'] !== 'file_shared') { + // Not a file share + return; + } + + $share = $this->shareManager->getShareById('ocRoomShare:' . $messageData['parameters']['share']); + + if ($share->getShareType() !== IShare::TYPE_ROOM || $share->getSharedWith() !== $room->getToken()) { + // Share does not match the correct room + throw new ShareNotFound(); + } + + $attendee = $participant->getAttendee(); + + if (!$participant->hasModeratorPermissions(false) + && !($attendee->getActorType() === Attendee::ACTOR_USERS && $attendee->getActorId() === $share->getShareOwner())) { + // Only moderators or the share owner can delete the share + return; + } + + $this->shareManager->deleteShare($share); + } + + /** + * @throws ShareNotFound + */ + public function removePollOnMessageDelete(Room $room, Participant $participant, array $messageData, \DateTime $deletionTime): void { + if (!isset($messageData['message'], $messageData['parameters']['objectType'], $messageData['parameters']['objectId']) + || $messageData['message'] !== 'object_shared' + || $messageData['parameters']['objectType'] !== 'talk-poll') { + // Not a poll share + return; + } + + try { + $poll = $this->pollService->getPoll($room->getId(), (int)$messageData['parameters']['objectId']); + } catch (DoesNotExistException $e) { + return; + } + + if ($poll->getStatus() === Poll::STATUS_CLOSED) { + $closingMessages = $this->commentsManager->searchForObjects( + json_encode([ + 'message' => 'poll_closed', + 'parameters' => [ + 'poll' => [ + 'type' => 'talk-poll', + 'id' => $poll->getId(), + 'name' => $poll->getQuestion(), + ], + ], + ], JSON_THROW_ON_ERROR), + 'chat', + [(string)$room->getId()], + 'system', + 0 + ); + foreach ($closingMessages as $closingMessage) { + $this->deleteMessage($room, $closingMessage, $participant, $deletionTime); + } + } + + if (!$participant->hasModeratorPermissions(false)) { + $attendee = $participant->getAttendee(); + if (!($attendee->getActorType() === $poll->getActorType() + && $attendee->getActorId() === $poll->getActorId())) { + // Only moderators or the poll creator can delete it + return; + } + } + + $this->pollService->deleteByPollId($poll->getId()); + } + + /** + * @param Room $chat + * @param IComment $comment + * @param Participant $participant + * @param \DateTime $deletionTime + * @return IComment + * @throws ShareNotFound + */ + public function deleteMessage(Room $chat, IComment $comment, Participant $participant, \DateTime $deletionTime): IComment { + if ($comment->getVerb() === self::VERB_OBJECT_SHARED) { + $messageData = json_decode($comment->getMessage(), true); + $this->unshareFileOnMessageDelete($chat, $participant, $messageData); + $this->removePollOnMessageDelete($chat, $participant, $messageData, $deletionTime); + } + + $comment->setMessage( + json_encode([ + 'deleted_by_type' => $participant->getAttendee()->getActorType(), + 'deleted_by_id' => $participant->getAttendee()->getActorId(), + 'deleted_on' => $deletionTime->getTimestamp(), + ]) + ); + $comment->setVerb(self::VERB_MESSAGE_DELETED); + + $metaData = $comment->getMetaData() ?? []; + if (isset($metaData[Message::METADATA_LAST_EDITED_BY_TYPE])) { + unset( + $metaData[Message::METADATA_LAST_EDITED_BY_TYPE], + $metaData[Message::METADATA_LAST_EDITED_BY_ID], + $metaData[Message::METADATA_LAST_EDITED_TIME], + ); + $comment->setMetaData($metaData); + } + + $this->commentsManager->save($comment); + + $this->attachmentService->deleteAttachmentByMessageId((int)$comment->getId()); + + $this->referenceManager->invalidateCache($chat->getToken()); + + $this->unreadCountCache->clear($chat->getId() . '-'); + + return $this->addSystemMessage( + $chat, + $participant, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + json_encode(['message' => 'message_deleted', 'parameters' => ['message' => $comment->getId()]]), + $this->timeFactory->getDateTime(), + false, + null, + $comment, + true + ); + } + + /** + * @param Room $chat + * @param IComment $comment + * @param Participant $participant + * @param \DateTime $editTime + * @param string $message + * @return IComment + * @throws MessageTooLongException + * @throws \InvalidArgumentException When the message is empty or the shared object is not a file share with caption + */ + public function editMessage(Room $chat, IComment $comment, Participant $participant, \DateTime $editTime, string $message): IComment { + if (trim($message) === '') { + throw new \InvalidArgumentException('message'); + } + + if ($comment->getVerb() === ChatManager::VERB_OBJECT_SHARED) { + $messageData = json_decode($comment->getMessage(), true); + if (!isset($messageData['message']) || $messageData['message'] !== 'file_shared') { + // Not a file share + throw new \InvalidArgumentException('object_share'); + } + + $messageData['parameters'] ??= []; + $messageData['parameters']['metaData'] ??= []; + $messageData['parameters']['metaData']['caption'] = $message; + $message = json_encode($messageData); + } + + $metaData = $comment->getMetaData() ?? []; + $metaData[Message::METADATA_LAST_EDITED_BY_TYPE] = $participant->getAttendee()->getActorType(); + $metaData[Message::METADATA_LAST_EDITED_BY_ID] = $participant->getAttendee()->getActorId(); + $metaData[Message::METADATA_LAST_EDITED_TIME] = $editTime->getTimestamp(); + $comment->setMetaData($metaData); + + $wasSilent = $metaData[Message::METADATA_SILENT] ?? false; + + if (!$wasSilent) { + $mentionsBefore = $comment->getMentions(); + $usersDirectlyMentionedBefore = $this->notifier->getMentionedUserIds($comment); + $usersToNotifyBefore = $this->notifier->getUsersToNotify($chat, $comment, []); + } + $comment->setMessage($message, self::MAX_CHAT_LENGTH); + if (!$wasSilent) { + $mentionsAfter = $comment->getMentions(); + } + + $this->commentsManager->save($comment); + $this->referenceManager->invalidateCache($chat->getToken()); + + if (!$wasSilent) { + $removedMentions = empty($mentionsAfter) ? $mentionsBefore : array_udiff($mentionsBefore, $mentionsAfter, [$this, 'compareMention']); + $addedMentions = empty($mentionsBefore) ? $mentionsAfter : array_udiff($mentionsAfter, $mentionsBefore, [$this, 'compareMention']); + + if (!empty($removedMentions)) { + $usersToNotifyAfter = $this->notifier->getUsersToNotify($chat, $comment, []); + $removedUsersMentioned = array_udiff($usersToNotifyBefore, $usersToNotifyAfter, [$this, 'compareMention']); + $userIds = array_column($removedUsersMentioned, 'id'); + $this->notifier->removeMentionNotificationAfterEdit($chat, $comment, $userIds); + } + + if (!empty($addedMentions)) { + $usersDirectlyMentionedAfter = $this->notifier->getMentionedUserIds($comment); + $federatedUsersDirectlyMentionedAfter = $this->notifier->getMentionedCloudIds($comment); + $addedUsersDirectMentioned = array_diff($usersDirectlyMentionedAfter, $usersDirectlyMentionedBefore); + + $alreadyNotifiedUsers = $this->notifier->notifyMentionedUsers($chat, $comment, $usersToNotifyBefore, silent: false); + if (!empty($alreadyNotifiedUsers)) { + $userIds = array_column($alreadyNotifiedUsers, 'id'); + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_USERS, $userIds, (int)$comment->getId(), $addedUsersDirectMentioned); + } + if (!empty($federatedUsersDirectlyMentionedAfter)) { + $this->participantService->markUsersAsMentioned($chat, Attendee::ACTOR_FEDERATED_USERS, $federatedUsersDirectlyMentionedAfter, (int)$comment->getId(), $federatedUsersDirectlyMentionedAfter); + } + } + } + + return $this->addSystemMessage( + $chat, + $participant, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + json_encode(['message' => 'message_edited', 'parameters' => ['message' => $comment->getId()]]), + $this->timeFactory->getDateTime(), + false, + null, + $comment, + true + ); + } + + protected static function compareMention(array $mention1, array $mention2): int { + if ($mention1['type'] === $mention2['type']) { + return $mention1['id'] <=> $mention2['id']; + } + return $mention1['type'] <=> $mention2['type']; + } + + public function clearHistory(Room $chat, string $actorType, string $actorId): IComment { + $this->commentsManager->deleteCommentsAtObject('chat', (string)$chat->getId()); + + $this->shareProvider->deleteInRoom($chat->getToken()); + + $this->notifier->removePendingNotificationsForRoom($chat, true); + + $this->participantService->resetChatDetails($chat); + + $this->pollService->deleteByRoomId($chat->getId()); + $this->threadService->deleteByRoom($chat); + + return $this->addSystemMessage( + $chat, + null, + $actorType, + $actorId, + json_encode(['message' => 'history_cleared', 'parameters' => []]), + $this->timeFactory->getDateTime(), + false + ); + } + + /** + * @param Room $chat + * @param string $parentId + * @return IComment + * @throws NotFoundException + */ + public function getParentComment(Room $chat, string $parentId): IComment { + $comment = $this->commentsManager->get($parentId); + + if ($comment->getObjectType() !== 'chat' || $comment->getObjectId() !== (string)$chat->getId()) { + throw new NotFoundException('Parent not found in the right context'); + } + + return $comment; + } + + /** + * @param Room $chat + * @param string $messageId + * @return IComment + * @throws NotFoundException + */ + public function getComment(Room $chat, string $messageId): IComment { + if ($chat->isFederatedConversation()) { + throw new InvalidRoomException('Can not call ChatManager::getComment() with a federated chat.'); + } + + $comment = $this->commentsManager->get($messageId); + + if ($comment->getObjectType() !== 'chat' || $comment->getObjectId() !== (string)$chat->getId()) { + throw new NotFoundException('Message not found in the right context'); + } + + return $comment; + } + + /** + * @param Room $chat + * @param string $messageId + * @return IComment + * @throws NotFoundException + */ + public function getTopMostComment(Room $chat, string $messageId): IComment { + if ($chat->isFederatedConversation()) { + throw new InvalidRoomException('Can not call ChatManager::getTopMostComment() with a federated chat.'); + } + + $comment = $this->commentsManager->get($messageId); + + if ($comment->getObjectType() !== 'chat' || $comment->getObjectId() !== (string)$chat->getId()) { + throw new NotFoundException('Message not found in the right context'); + } + + if ($comment->getTopmostParentId() !== '0') { + $comment = $this->getComment($chat, $comment->getTopmostParentId()); + } + + return $comment; + } + + public function getLastReadMessageFromLegacy(Room $chat, IUser $user): int { + $marker = $this->commentsManager->getReadMark('chat', (string)$chat->getId(), $user); + if ($marker === null) { + return 0; + } + + return $this->commentsManager->getLastCommentBeforeDate('chat', (string)$chat->getId(), $marker, self::VERB_MESSAGE); + } + + public function getUnreadCount(Room $chat, int $lastReadMessage): int { + /** + * for a given message id $lastReadMessage we cache the number of messages + * that exist past that message, which happen to also be the number of + * unread messages, because this is expensive to query per room and user repeatedly + */ + $key = $chat->getId() . '-' . $lastReadMessage; + $unreadCount = $this->unreadCountCache->get($key); + if ($unreadCount === null) { + $unreadCount = $this->commentsManager->getNumberOfCommentsWithVerbsForObjectSinceComment('chat', (string)$chat->getId(), $lastReadMessage, [self::VERB_MESSAGE, self::VERB_OBJECT_SHARED]); + $this->unreadCountCache->set($key, $unreadCount, 1800); + } + return $unreadCount; + } + + /** + * Returns the ID of the last chat message, that was read by everyone + * sharing their read status. + * + * @param Room $chat + * @return int + */ + public function getLastCommonReadMessage(Room $chat): int { + return $this->participantService->getLastCommonReadChatMessage($chat); + } + + /** + * Receive the history of a chat + * + * @param Room $chat + * @param int $offset Last known message id + * @param int $limit + * @param bool $includeLastKnown + * @return IComment[] the messages found (only the id, actor type and id, + * creation date and message are relevant), or an empty array if the + * timeout expired. + */ + public function getHistory(Room $chat, int $offset, int $limit, bool $includeLastKnown, int $threadId = 0): array { + return $this->commentsManager->getCommentsWithVerbForObjectSinceComment( + 'chat', + (string)$chat->getId(), + [], + $offset, + 'desc', + $limit, + $includeLastKnown, + $threadId !== 0 ? (string)$threadId : '', + ); + } + + /** + * @param Room $chat + * @param int $offset Last known message id + * @param array $verbs + * @param bool $offsetIsVerbMatch + * @return IComment + * @throws NotFoundException + */ + public function getPreviousMessageWithVerb(Room $chat, int $offset, array $verbs, bool $offsetIsVerbMatch): IComment { + $messages = $this->commentsManager->getCommentsWithVerbForObjectSinceComment( + 'chat', + (string)$chat->getId(), + $verbs, + $offset, + 'desc', + !$offsetIsVerbMatch ? 2 : 1 + ); + + if (empty($messages)) { + throw new NotFoundException('No comment with verb found'); + } + + return array_pop($messages); + } + + /** + * If there are currently no messages the response will not be sent + * immediately. Instead, HTTP connection will be kept open waiting for new + * messages to arrive and, when they do, then the response will be sent. The + * connection will not be kept open indefinitely, though; the number of + * seconds to wait for new messages to arrive can be set using the timeout + * parameter; the default timeout is 30 seconds, maximum timeout is 60 + * seconds. If the timeout ends a successful but empty response will be + * sent. + * + * @param int $offset Last known message id + * @return IComment[] the messages found (only the id, actor type and id, + * creation date and message are relevant), or an empty array if the + * timeout expired. + */ + public function waitForNewMessages(Room $chat, int $offset, int $limit, int $timeout, ?IUser $user, bool $includeLastKnown, bool $markNotificationsAsRead = true, int $threadId = 0): array { + if ($markNotificationsAsRead && $user instanceof IUser) { + $this->notifier->markMentionNotificationsRead($chat, $user->getUID()); + } + + if ($this->cache instanceof NullCache + || $this->cache instanceof ArrayCache) { + return $this->waitForNewMessagesWithDatabase($chat, $offset, $limit, $timeout, $includeLastKnown, $threadId); + } + + return $this->waitForNewMessagesWithCache($chat, $offset, $limit, $timeout, $includeLastKnown, $threadId); + } + + /** + * Check the cache until we found new messages, or the timeout was reached + * + * @return IComment[] + */ + protected function waitForNewMessagesWithCache(Room $chat, int $offset, int $limit, int $timeout, bool $includeLastKnown, int $threadId): array { + $elapsedTime = 0; + + $comments = $this->checkCacheOrDatabase($chat, $offset, $limit, $includeLastKnown, $threadId); + + while (empty($comments) && $elapsedTime < $timeout) { + $this->connection->close(); + sleep(1); + $elapsedTime++; + + $comments = $this->checkCacheOrDatabase($chat, $offset, $limit, $includeLastKnown, $threadId); + } + + return $comments; + } + + /** + * Check the cache for the last message id or check the database for updates + * + * @return IComment[] + */ + protected function checkCacheOrDatabase(Room $chat, int $offset, int $limit, bool $includeLastKnown, int $threadId): array { + $cacheKey = $chat->getToken(); + if ($threadId !== 0) { + $cacheKey .= '/' . $threadId; + } + $cachedId = $this->cache->get($cacheKey); + if ($offset === $cachedId) { + // Cache hit, nothing new ¯\_(ツ)_/¯ + return []; + } + + // Load data from the database + $comments = $this->commentsManager->getCommentsWithVerbForObjectSinceComment( + 'chat', + (string)$chat->getId(), + [], + $offset, + 'asc', + $limit, + $includeLastKnown, + $threadId !== 0 ? (string)$threadId : '', + ); + + if (empty($comments)) { + // We only write the cache when there were no new comments, + // otherwise it could happen that this is not the last message, + // but the last within $limit + $this->cache->set($cacheKey, $offset, 30); + return []; + } + + return $comments; + } + + /** + * Check the database for new messages until there a new messages or we exceeded the timeout + * + * @return IComment[] + */ + protected function waitForNewMessagesWithDatabase(Room $chat, int $offset, int $limit, int $timeout, bool $includeLastKnown, int $threadId): array { + $elapsedTime = 0; + + $comments = $this->commentsManager->getCommentsWithVerbForObjectSinceComment( + 'chat', + (string)$chat->getId(), + [], + $offset, + 'asc', + $limit, + $includeLastKnown, + $threadId !== 0 ? (string)$threadId : '', + ); + + while (empty($comments) && $elapsedTime < $timeout) { + sleep(1); + $elapsedTime++; + + $comments = $this->commentsManager->getCommentsWithVerbForObjectSinceComment( + 'chat', + (string)$chat->getId(), + [], + $offset, + 'asc', + $limit, + $includeLastKnown, + $threadId !== 0 ? (string)$threadId : '', + ); + } + + return $comments; + } + + /** + * Deletes all the messages for the given chat. + * + * @param Room $chat + */ + public function deleteMessages(Room $chat): void { + $this->commentsManager->deleteCommentsAtObject('chat', (string)$chat->getId()); + + $this->shareProvider->deleteInRoom($chat->getToken()); + + $this->notifier->removePendingNotificationsForRoom($chat); + + $this->attachmentService->deleteAttachmentsForRoom($chat); + + $this->pollService->deleteByRoomId($chat->getId()); + $this->threadService->deleteByRoom($chat); + } + + /** + * Get messages for the given chat by ID + * + * @param Room $chat + * @param int[] $commentIds + * @return IComment[] + */ + public function getMessagesForRoomById(Room $chat, array $commentIds): array { + $comments = $this->commentsManager->getCommentsById(array_map('strval', $commentIds)); + + $comments = array_filter($comments, static function (IComment $comment) use ($chat) { + return $comment->getObjectType() === 'chat' + && (int)$comment->getObjectId() === $chat->getId(); + }); + + return $comments; + } + + /** + * Get messages by ID + * + * @param int[] $commentIds + * @return array Key is the message id + */ + public function getMessagesById(array $commentIds): array { + return $this->commentsManager->getCommentsById(array_map('strval', $commentIds)); + } + + /** + * Search for comments with a given content + * + * @param string $search content to search for + * @param array $objectIds Limit the search by object ids + * @param string $verb Limit the verb of the comment + * @param int $offset + * @param int $limit + * @return IComment[] + */ + public function searchForObjects(string $search, array $objectIds, string $verb = '', int $offset = 0, int $limit = 50): array { + return $this->commentsManager->searchForObjects($search, 'chat', $objectIds, $verb, $offset, $limit); + } + + /** + * Search for comments on one or more objects with a given content + * + * @param string $search content to search for + * @param string[] $objectIds Limit the search by object ids + * @param string[] $verbs Limit the verb of the comment + * @return list + */ + public function searchForObjectsWithFilters(string $search, array $objectIds, array $verbs, ?\DateTimeImmutable $since, ?\DateTimeImmutable $until, ?string $actorType, ?string $actorId, int $offset, int $limit = 50): array { + return $this->commentsManager->searchForObjectsWithFilters($search, 'chat', $objectIds, $verbs, $since, $until, $actorType, $actorId, $offset, $limit); + } + + /** + * @param list $results + * @return list + */ + public function addConversationNotify(array $results, string $search, Room $room, Participant $participant): array { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + return $results; + } + if ($room->getMentionPermissions() === Room::MENTION_PERMISSIONS_MODERATORS && !$participant->hasModeratorPermissions()) { + return $results; + } + + $attendee = $participant->getAttendee(); + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $roomDisplayName = $room->getDisplayName($attendee->getActorId()); + } else { + $roomDisplayName = $room->getDisplayName(''); + } + if ($search === '' || $this->searchIsPartOfConversationNameOrAtAll($search, $roomDisplayName)) { + $participantCount = $this->participantService->getNumberOfUsers($room); + + $atAllResult = [ + 'id' => 'all', + 'label' => $roomDisplayName, + 'source' => 'calls', + 'mentionId' => 'all', + ]; + + if ($participantCount > 1) { + // TRANSLATORS The string will only be used with more than 1 participant, so you can keep the "All" in all plural forms + $atAllResult['details'] = $this->l->n('All %n participant', 'All %n participants', $participantCount); + } + + $results[] = $atAllResult; + } + return $results; + } + + private function searchIsPartOfConversationNameOrAtAll(string $search, string $roomDisplayName): bool { + if (mb_stripos($roomDisplayName, $search) !== false) { + return true; + } + /** + * @psalm-suppress InvalidLiteralArgument + */ + if (str_starts_with('all', $search)) { + return true; + } + /** + * @psalm-suppress InvalidLiteralArgument + */ + if (str_starts_with('here', $search)) { + return true; + } + return false; + } + + public function deleteExpiredMessages(): void { + $this->commentsManager->deleteCommentsExpiredAtObject('chat', ''); + } + + public function fileOfMessageExists(string $message): bool { + $parameters = $this->getParametersFromMessage($message); + try { + $this->shareProvider->getShareById($parameters['share']); + } catch (ShareNotFound $e) { + return false; + } + return true; + } + + public function isSharedFile(string $message): bool { + $parameters = $this->getParametersFromMessage($message); + return !empty($parameters['share']); + } + + protected function getParametersFromMessage(string $message): array { + $data = json_decode($message, true); + if (!\is_array($data) || !array_key_exists('parameters', $data) || !is_array($data['parameters'])) { + return []; + } + return $data['parameters']; + } + + /** + * When receive a list of comments, filter the comments, + * removing all that have shares of file that no more exists + * + * @param IComment[] $comments + * @return IComment[] + */ + public function filterCommentsWithNonExistingFiles(array $comments): array { + return array_filter($comments, function (IComment $comment) { + if ($this->isSharedFile($comment->getMessage())) { + if (!$this->fileOfMessageExists($comment->getMessage())) { + return false; + } + } + return true; + }); + } +} diff --git a/lib/Chat/CommentsManager.php b/lib/Chat/CommentsManager.php new file mode 100644 index 0000000..c4d3d48 --- /dev/null +++ b/lib/Chat/CommentsManager.php @@ -0,0 +1,309 @@ +normalizeDatabaseData($data)); + $comment->setMessage($message, ChatManager::MAX_CHAT_LENGTH); + return $comment; + } + + /** + * @param string[] $ids + * @return IComment[] + * @throws Exception + */ + public function getCommentsById(array $ids): array { + $commentIds = array_map('intval', $ids); + + $query = $this->dbConn->getQueryBuilder(); + $query->select('*') + ->from('comments') + ->where($query->expr()->in('id', $query->createNamedParameter($commentIds, IQueryBuilder::PARAM_INT_ARRAY))); + + $comments = []; + $result = $query->execute(); + while ($row = $result->fetch()) { + $comments[(int)$row['id']] = $this->getCommentFromData($row); + } + $result->closeCursor(); + + return $comments; + } + + /** + * FIXME: TEMPORARY method until https://github.com/nextcloud/server/pull/53896 is merged + * + * @param string $objectType the object type, e.g. 'files' + * @param string $objectId the id of the object + * @param int $lastKnownCommentId the last known comment (will be used as offset) + * @param string $sortDirection direction of the comments (`asc` or `desc`) + * @param int $limit optional, number of maximum comments to be returned. if + * set to 0, all comments are returned. + * @param bool $includeLastKnown + * @return list + */ + #[\Override] + public function getForObjectSince( + string $objectType, + string $objectId, + int $lastKnownCommentId, + string $sortDirection = 'asc', + int $limit = 30, + bool $includeLastKnown = false, + string $topmostParentId = '', + ): array { + return $this->getCommentsWithVerbForObjectSinceComment( + $objectType, + $objectId, + [], + $lastKnownCommentId, + $sortDirection, + $limit, + $includeLastKnown, + $topmostParentId, + ); + } + + /** + * FIXME: TEMPORARY method until https://github.com/nextcloud/server/pull/53896 is merged + * + * @param string $objectType the object type, e.g. 'files' + * @param string $objectId the id of the object + * @param string[] $verbs List of verbs to filter by + * @param int $lastKnownCommentId the last known comment (will be used as offset) + * @param string $sortDirection direction of the comments (`asc` or `desc`) + * @param int $limit optional, number of maximum comments to be returned. if + * set to 0, all comments are returned. + * @param bool $includeLastKnown + * @return list + */ + #[\Override] + public function getCommentsWithVerbForObjectSinceComment( + string $objectType, + string $objectId, + array $verbs, + int $lastKnownCommentId, + string $sortDirection = 'asc', + int $limit = 30, + bool $includeLastKnown = false, + string $topmostParentId = '', + ): array { + $comments = []; + + $query = $this->dbConn->getQueryBuilder(); + $query->select('*') + ->from('comments') + ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) + ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($objectId))) + ->orderBy('creation_timestamp', $sortDirection === 'desc' ? 'DESC' : 'ASC') + ->addOrderBy('id', $sortDirection === 'desc' ? 'DESC' : 'ASC'); + + if ($limit > 0) { + $query->setMaxResults($limit); + } + + if (!empty($verbs)) { + $query->andWhere($query->expr()->in('verb', $query->createNamedParameter($verbs, IQueryBuilder::PARAM_STR_ARRAY))); + } + + if ($topmostParentId !== '') { + $query->andWhere($query->expr()->orX( + $query->expr()->eq('id', $query->createNamedParameter($topmostParentId)), + $query->expr()->eq('topmost_parent_id', $query->createNamedParameter($topmostParentId)), + )); + } + + $lastKnownComment = $lastKnownCommentId > 0 ? $this->getLastKnownComment( + $objectType, + $objectId, + $lastKnownCommentId + ) : null; + if ($lastKnownComment instanceof IComment) { + $lastKnownCommentDateTime = $lastKnownComment->getCreationDateTime(); + if ($sortDirection === 'desc') { + if ($includeLastKnown) { + $idComparison = $query->expr()->lte('id', $query->createNamedParameter($lastKnownCommentId)); + } else { + $idComparison = $query->expr()->lt('id', $query->createNamedParameter($lastKnownCommentId)); + } + $query->andWhere( + $query->expr()->orX( + $query->expr()->lt( + 'creation_timestamp', + $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATETIME_MUTABLE), + IQueryBuilder::PARAM_DATETIME_MUTABLE + ), + $query->expr()->andX( + $query->expr()->eq( + 'creation_timestamp', + $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATETIME_MUTABLE), + IQueryBuilder::PARAM_DATETIME_MUTABLE + ), + $idComparison + ) + ) + ); + } else { + if ($includeLastKnown) { + $idComparison = $query->expr()->gte('id', $query->createNamedParameter($lastKnownCommentId)); + } else { + $idComparison = $query->expr()->gt('id', $query->createNamedParameter($lastKnownCommentId)); + } + $query->andWhere( + $query->expr()->orX( + $query->expr()->gt( + 'creation_timestamp', + $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATETIME_MUTABLE), + IQueryBuilder::PARAM_DATETIME_MUTABLE + ), + $query->expr()->andX( + $query->expr()->eq( + 'creation_timestamp', + $query->createNamedParameter($lastKnownCommentDateTime, IQueryBuilder::PARAM_DATETIME_MUTABLE), + IQueryBuilder::PARAM_DATETIME_MUTABLE + ), + $idComparison + ) + ) + ); + } + } elseif ($lastKnownCommentId > 0) { + // We didn't find the "$lastKnownComment" but we still use the ID as an offset. + // This is required as a fall-back for expired messages in talk and deleted comments in other apps. + if ($sortDirection === 'desc') { + if ($includeLastKnown) { + $query->andWhere($query->expr()->lte('id', $query->createNamedParameter($lastKnownCommentId))); + } else { + $query->andWhere($query->expr()->lt('id', $query->createNamedParameter($lastKnownCommentId))); + } + } else { + if ($includeLastKnown) { + $query->andWhere($query->expr()->gte('id', $query->createNamedParameter($lastKnownCommentId))); + } else { + $query->andWhere($query->expr()->gt('id', $query->createNamedParameter($lastKnownCommentId))); + } + } + } + + $resultStatement = $query->execute(); + while ($data = $resultStatement->fetch()) { + $comment = $this->getCommentFromData($data); + $this->cache($comment); + $comments[] = $comment; + } + $resultStatement->closeCursor(); + + return $comments; + } + + + /** + * @param string $actorType + * @param string $actorId + * @param string[] $messageIds + * @return array + * @psalm-return array + */ + public function retrieveReactionsByActor(string $actorType, string $actorId, array $messageIds): array { + $commentIds = array_map('intval', $messageIds); + + $query = $this->dbConn->getQueryBuilder(); + $query->select('*') + ->from('reactions') + ->where($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))) + ->andWhere($query->expr()->in('parent_id', $query->createNamedParameter($commentIds, IQueryBuilder::PARAM_INT_ARRAY))); + + $reactions = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $reactions[(int)$row['parent_id']] ??= []; + $reactions[(int)$row['parent_id']][] = $row['reaction']; + } + $result->closeCursor(); + + return $reactions; + } + + /** + * Search for comments on one or more objects with a given content + * + * @param string $search content to search for + * @param string $objectType Limit the search by object type + * @param string[] $objectIds Limit the search by object ids + * @param string[] $verbs Limit the verb of the comment + * @return list + */ + public function searchForObjectsWithFilters(string $search, string $objectType, array $objectIds, array $verbs, ?\DateTimeImmutable $since, ?\DateTimeImmutable $until, ?string $actorType, ?string $actorId, int $offset, int $limit = 50): array { + $query = $this->dbConn->getQueryBuilder(); + + $query->select('*') + ->from('comments') + ->orderBy('creation_timestamp', 'DESC') + ->addOrderBy('id', 'DESC') + ->setMaxResults($limit); + + if ($search !== '') { + $query->where($query->expr()->iLike('message', $query->createNamedParameter( + '%' . $this->dbConn->escapeLikeParameter($search) . '%' + ))); + } + + if ($since !== null) { + $query->andWhere($query->expr()->gte('creation_timestamp', $query->createNamedParameter($since, IQueryBuilder::PARAM_DATE), IQueryBuilder::PARAM_DATE)); + } + + if ($until !== null) { + $query->andWhere($query->expr()->lte('creation_timestamp', $query->createNamedParameter($until, IQueryBuilder::PARAM_DATE), IQueryBuilder::PARAM_DATE)); + } + + if ($actorType !== null && $actorId !== null) { + $query->andWhere($query->expr()->lte('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->lte('actor_id', $query->createNamedParameter($actorId))); + } + + if ($objectType !== '') { + $query->andWhere($query->expr()->eq('object_type', $query->createNamedParameter($objectType))); + } + if (!empty($objectIds)) { + $query->andWhere($query->expr()->in('object_id', $query->createNamedParameter($objectIds, IQueryBuilder::PARAM_STR_ARRAY))); + } + if (!empty($verbs)) { + $query->andWhere($query->expr()->in('verb', $query->createNamedParameter($verbs, IQueryBuilder::PARAM_STR_ARRAY))); + } + if ($offset !== 0) { + $query->setFirstResult($offset); + } + + $comments = []; + $result = $query->executeQuery(); + while ($data = $result->fetch()) { + $comment = $this->getCommentFromData($data); + $this->cache($comment); + $comments[] = $comment; + } + $result->closeCursor(); + + return $comments; + } +} diff --git a/lib/Chat/Listener.php b/lib/Chat/Listener.php new file mode 100644 index 0000000..c902ef6 --- /dev/null +++ b/lib/Chat/Listener.php @@ -0,0 +1,31 @@ + + */ +class Listener implements IEventListener { + public function __construct( + protected ChatManager $chatManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof RoomDeletedEvent) { + $this->chatManager->deleteMessages($event->getRoom()); + } + } +} diff --git a/lib/Chat/MessageParser.php b/lib/Chat/MessageParser.php new file mode 100644 index 0000000..3794350 --- /dev/null +++ b/lib/Chat/MessageParser.php @@ -0,0 +1,201 @@ +setActor( + $proxy->getActorType(), + $proxy->getActorId(), + $proxy->getActorDisplayName() ?? '', + ); + + $message->setMessageType($proxy->getMessageType()); + + $message->setMessage( + $proxy->getMessage(), + $proxy->getParsedMessageParameters() + ); + + return $message; + } + + /** + * @param bool $allowInaccurate File share messages will not have fully correct data for the file object + * E.g. path is only the file name and preview generation is estimated by + * mimetype only. This is done to prevent a filesystem setup. + */ + public function parseMessage(Message $message, bool $allowInaccurate = false): void { + $message->setMessage($message->getComment()->getMessage(), []); + + $verb = $message->getComment()->getVerb(); + if ($verb === ChatManager::VERB_OBJECT_SHARED) { + $verb = ChatManager::VERB_SYSTEM; + } + $message->setMessageType($verb); + $this->setMessageActor($message); + $this->setLastEditInfo($message); + + $event = new MessageParseEvent($message->getRoom(), $message, $allowInaccurate); + $this->dispatcher->dispatchTyped($event); + } + + protected function setMessageActor(Message $message): void { + [$actorType, $actorId, $displayName] = $this->getActorInformation( + $message, + $message->getComment()->getActorType(), + $message->getComment()->getActorId() + ); + + $message->setActor( + $actorType, + $actorId, + $displayName + ); + } + + protected function setLastEditInfo(Message $message): void { + $metaData = $message->getComment()->getMetaData(); + if (!empty($metaData)) { + if (isset($metaData['last_edited_by_type'], $metaData['last_edited_by_id'], $metaData['last_edited_time'])) { + [$actorType, $actorId, $displayName] = $this->getActorInformation( + $message, + $metaData['last_edited_by_type'], + $metaData['last_edited_by_id'], + $metaData['last_edited_by_displayname'] ?? '', + ); + + $message->setLastEdit( + $actorType, + $actorId, + $displayName, + $metaData['last_edited_time'] + ); + } + } + } + + protected function getActorInformation(Message $message, string $actorType, string $actorId, string $displayName = ''): array { + if ($actorType === Attendee::ACTOR_USERS) { + $tempDisplayName = $this->userManager->getDisplayName($actorId); + if ($tempDisplayName === null) { + $user = $this->userManager->get($actorId); + if (!$user instanceof IUser) { + // Deleted user + return [ + ICommentsManager::DELETED_USER, + ICommentsManager::DELETED_USER, + '', + ]; + } + $displayName = $user->getDisplayName(); + } else { + $displayName = $tempDisplayName; + } + } elseif ($actorType === Attendee::ACTOR_BRIDGED) { + $displayName = $actorId; + $actorId = MatterbridgeManager::BRIDGE_BOT_USERID; + } elseif (($actorType === Attendee::ACTOR_GUESTS || $actorType === Attendee::ACTOR_EMAILS) + && !in_array($actorId, [Attendee::ACTOR_ID_CLI, Attendee::ACTOR_ID_SYSTEM, Attendee::ACTOR_ID_CHANGELOG, Attendee::ACTOR_ID_SAMPLE], true)) { + $cacheKey = $actorType . '/' . $actorId; + if (isset($this->guestNames[$cacheKey])) { + $displayName = $this->guestNames[$cacheKey]; + } else { + try { + $participant = $this->participantService->getParticipantByActor($message->getRoom(), $actorType, $actorId); + $displayName = $participant->getAttendee()->getDisplayName(); + } catch (ParticipantNotFoundException) { + } + $this->guestNames[$cacheKey] = $displayName; + } + } elseif ($actorType === Attendee::ACTOR_BOTS) { + $displayName = $actorId . '-bot'; + $token = $message->getRoom()->getToken(); + if (str_starts_with($actorId, Attendee::ACTOR_BOT_PREFIX)) { + $urlHash = substr($actorId, strlen(Attendee::ACTOR_BOT_PREFIX)); + $botName = $this->getBotNameByUrlHashForConversation($token, $urlHash); + if ($botName) { + $displayName = $botName . ' (Bot)'; + } + } + } elseif ($actorType === Attendee::ACTOR_FEDERATED_USERS) { + if (isset($this->federatedUsersNames[$actorId])) { + $displayName = $this->federatedUsersNames[$actorId]; + } else { + $displayName = $actorId; + try { + $participant = $this->participantService->getParticipantByActor($message->getRoom(), Attendee::ACTOR_FEDERATED_USERS, $actorId); + $displayName = $participant->getAttendee()->getDisplayName(); + } catch (ParticipantNotFoundException) { + // FIXME Read from some addressbooks? + } + $this->federatedUsersNames[$actorId] = $displayName; + } + } + + return [ + $actorType, + $actorId, + $displayName + ]; + } + + protected function getBotNameByUrlHashForConversation(string $token, string $urlHash): ?string { + if (!isset($this->botNames[$token])) { + $this->botNames[$token] = []; + $bots = $this->botService->getBotsForToken($token, null); + foreach ($bots as $bot) { + $botServer = $bot->getBotServer(); + $this->botNames[$token][$botServer->getUrlHash()] = $botServer->getName(); + } + } + + return $this->botNames[$token][$urlHash] ?? null; + } +} diff --git a/lib/Chat/Notifier.php b/lib/Chat/Notifier.php new file mode 100644 index 0000000..0bd3ff3 --- /dev/null +++ b/lib/Chat/Notifier.php @@ -0,0 +1,777 @@ + $alreadyNotifiedUsers + * @param bool $silent + * @param Participant|null $participant + * @return string[] Users that were mentioned + * @psalm-return array + */ + public function notifyMentionedUsers(Room $chat, IComment $comment, array $alreadyNotifiedUsers, bool $silent, ?Participant $participant = null, ?int $threadId = null): array { + $usersToNotify = $this->getUsersToNotify($chat, $comment, $alreadyNotifiedUsers, $participant); + + if (!$usersToNotify) { + return $alreadyNotifiedUsers; + } + + $shouldFlush = false; + if (!$silent) { + $notification = $this->createNotification($chat, $comment, 'mention', threadId: $threadId); + $parameters = $notification->getSubjectParameters(); + $shouldFlush = $this->notificationManager->defer(); + } + + foreach ($usersToNotify as $mentionedUser) { + $shouldMentionedUserBeNotified = $this->shouldMentionedUserBeNotified($mentionedUser['id'], $comment, $chat, $mentionedUser['attendee'] ?? null); + if ($shouldMentionedUserBeNotified !== self::PRIORITY_NONE) { + if (!$silent) { + $notification->setUser($mentionedUser['id']); + if (isset($mentionedUser['reason'])) { + $notification->setSubject('mention_' . $mentionedUser['reason'], array_merge($parameters, [ + 'sourceId' => $mentionedUser['sourceId'] ?? null, + ])); + } else { + $notification->setSubject('mention', $parameters); + } + $notification->setPriorityNotification($shouldMentionedUserBeNotified === self::PRIORITY_IMPORTANT); + $this->notificationManager->notify($notification); + } + $alreadyNotifiedUsers[] = $mentionedUser; + } + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + + return $alreadyNotifiedUsers; + } + + /** + * @param Room $chat + * @param IComment $comment + * @param array $alreadyNotifiedUsers + * @psalm-param array $alreadyNotifiedUsers + * @param Participant|null $participant + * @return array + * @psalm-return array + */ + public function getUsersToNotify(Room $chat, IComment $comment, array $alreadyNotifiedUsers, ?Participant $participant = null): array { + $usersToNotify = $this->getMentionedUsers($comment); + $usersToNotify = $this->getMentionedGroupMembers($chat, $comment, $usersToNotify); + $usersToNotify = $this->getMentionedTeamMembers($chat, $comment, $usersToNotify); + $usersToNotify = $this->addMentionAllToList($chat, $usersToNotify, $participant); + $usersToNotify = $this->removeAlreadyNotifiedUsers($usersToNotify, $alreadyNotifiedUsers); + + return $usersToNotify; + } + + /** + * @param array $usersToNotify + * @psalm-param array $usersToNotify + * @param array $alreadyNotifiedUsers + * @psalm-param array $alreadyNotifiedUsers + * @return array + * @psalm-return array + */ + private function removeAlreadyNotifiedUsers(array $usersToNotify, array $alreadyNotifiedUsers): array { + return array_filter($usersToNotify, static function (array $userToNotify) use ($alreadyNotifiedUsers): bool { + foreach ($alreadyNotifiedUsers as $alreadyNotified) { + if ($alreadyNotified['id'] === $userToNotify['id'] && $alreadyNotified['type'] === $userToNotify['type']) { + return false; + } + } + return true; + }); + } + + /** + * @param Room $chat + * @param array $list + * @psalm-param array $list + * @param Participant|null $participant + * @return array + * @psalm-return array + */ + private function addMentionAllToList(Room $chat, array $list, ?Participant $participant = null): array { + $usersToNotify = array_filter($list, static function (array $entry): bool { + return $entry['type'] !== Attendee::ACTOR_USERS || $entry['id'] !== 'all'; + }); + + if (count($list) === count($usersToNotify)) { + return $usersToNotify; + } + if ($chat->getMentionPermissions() === Room::MENTION_PERMISSIONS_MODERATORS && (!$participant instanceof Participant || !$participant->hasModeratorPermissions())) { + return $usersToNotify; + } + + $attendees = $this->participantService->getActorsByType($chat, Attendee::ACTOR_USERS); + foreach ($attendees as $attendee) { + $alreadyAddedToNotify = array_filter($list, static function ($user) use ($attendee): bool { + return $user['id'] === $attendee->getActorId(); + }); + if (!empty($alreadyAddedToNotify)) { + continue; + } + + $usersToNotify[] = [ + 'id' => $attendee->getActorId(), + 'type' => $attendee->getActorType(), + 'attendee' => $attendee, + 'reason' => 'all', + ]; + } + + return $usersToNotify; + } + + + /** + * Notifies the author that wrote the comment which was replied to + * + * The comment must be a chat message comment. That is, its "objectId" must + * be the room ID. + * + * The author of the message is notified only if they are still able to participate in the room + * + * @param Room $chat + * @param IComment $comment + * @param IComment $replyTo + * @param bool $silent + * @return array[] Actor that was replied to + * @psalm-return array + */ + public function notifyReplyToAuthor(Room $chat, IComment $comment, IComment $replyTo, bool $silent, ?int $threadId = null): array { + if ($replyTo->getActorType() !== Attendee::ACTOR_USERS && $replyTo->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + // No reply notification when the replyTo-author was not a user or federated user + return []; + } + + if ($replyTo->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + return [ + [ + 'id' => $replyTo->getActorId(), + 'type' => $replyTo->getActorType(), + 'reason' => 'reply', + ], + ]; + } + + $shouldMentionedUserBeNotified = $this->shouldMentionedUserBeNotified($replyTo->getActorId(), $comment, $chat); + if ($shouldMentionedUserBeNotified === self::PRIORITY_NONE) { + return []; + } + + if (!$silent) { + $notification = $this->createNotification($chat, $comment, 'reply', threadId: $threadId); + $notification->setUser($replyTo->getActorId()); + $notification->setPriorityNotification($shouldMentionedUserBeNotified === self::PRIORITY_IMPORTANT); + $this->notificationManager->notify($notification); + } + + return [ + [ + 'id' => $replyTo->getActorId(), + 'type' => $replyTo->getActorType(), + 'reason' => 'reply', + ], + ]; + } + + /** + * Notifies the user mentioned in the comment. + * + * The comment must be a chat message comment. That is, its "objectId" must + * be the room ID. + * + * Not every user mentioned in the message is notified, but only those that + * are able to participate in the room. + * + * @param Room $chat + * @param IComment $comment + * @param array[] $alreadyNotifiedUsers + * @param bool $silent + * @psalm-param array $alreadyNotifiedUsers + */ + public function notifyOtherParticipant(Room $chat, IComment $comment, array $alreadyNotifiedUsers, bool $silent): void { + if ($silent) { + return; + } + + $participants = $this->participantService->getParticipantsByNotificationLevel($chat, Participant::NOTIFY_ALWAYS); + $threadId = (int)$comment->getTopmostParentId(); + /** @var array $threadAttendees */ + $threadAttendees = []; + if ($threadId !== 0) { + $threadAttendees = $this->threadService->findAttendeesForNotificationByThreadId($chat->getId(), $threadId); + } + + // Handle participants that only subscribed with Participant::NOTIFY_ALWAYS to the thread, but not the conversation + $threadAttendeeIds = array_map(static fn (ThreadAttendee $threadAttendee): int => $threadAttendee->getAttendeeId(), + array_filter($threadAttendees, static fn (ThreadAttendee $threadAttendee): bool => $threadAttendee->getNotificationLevel() === Participant::NOTIFY_ALWAYS) + ); + if (!empty($threadAttendeeIds)) { + $participantIds = array_map(static fn (Participant $participant): int => $participant->getAttendee()->getId(), $participants); + $missingParticipantIds = array_diff($threadAttendeeIds, $participantIds); + if (!empty($missingParticipantIds)) { + $missingParticipants = $this->participantService->getParticipantsByAttendeeId($chat, $missingParticipantIds); + if (!empty($missingParticipants)) { + $participants = array_merge($participants, $missingParticipants); + } + } + } + + $notification = $this->createNotification($chat, $comment, 'chat', threadId: $threadId); + foreach ($participants as $participant) { + $attendeeId = $participant->getAttendee()->getId(); + $shouldParticipantBeNotified = $this->shouldParticipantBeNotified($participant, $comment, $alreadyNotifiedUsers); + + if (isset($threadAttendees[$attendeeId])) { + $threadAttendee = $threadAttendees[$attendeeId]; + if ($threadAttendee->getNotificationLevel() !== Participant::NOTIFY_ALWAYS) { + // User unsubscribed from this thread + continue; + } + } + + if ($shouldParticipantBeNotified === self::PRIORITY_NONE) { + continue; + } + + $notification->setUser($participant->getAttendee()->getActorId()); + $notification->setPriorityNotification($shouldParticipantBeNotified === self::PRIORITY_IMPORTANT); + $this->notificationManager->notify($notification); + } + + // Also notify default participants in one-to-one chats or when the admin default is "always" + if ($this->getDefaultGroupNotification() === Participant::NOTIFY_ALWAYS || $chat->getType() === Room::TYPE_ONE_TO_ONE) { + $participants = $this->participantService->getParticipantsByNotificationLevel($chat, Participant::NOTIFY_DEFAULT); + foreach ($participants as $participant) { + $shouldParticipantBeNotified = $this->shouldParticipantBeNotified($participant, $comment, $alreadyNotifiedUsers); + if ($shouldParticipantBeNotified === self::PRIORITY_NONE) { + continue; + } + + $notification->setUser($participant->getAttendee()->getActorId()); + $notification->setPriorityNotification($shouldParticipantBeNotified === self::PRIORITY_IMPORTANT); + $this->notificationManager->notify($notification); + } + } + } + + public function notifyReacted(Room $chat, IComment $comment, IComment $reaction): void { + if ($comment->getActorType() !== Attendee::ACTOR_USERS) { + return; + } + + if ($comment->getActorType() === $reaction->getActorType() && $comment->getActorId() === $reaction->getActorId()) { + return; + } + + try { + $participant = $this->participantService->getParticipant($chat, $comment->getActorId(), false); + } catch (ParticipantNotFoundException $e) { + return; + } + + $notificationLevel = $participant->getAttendee()->getNotificationLevel(); + if ($notificationLevel === Participant::NOTIFY_DEFAULT) { + if ($chat->getType() === Room::TYPE_ONE_TO_ONE) { + $notificationLevel = Participant::NOTIFY_ALWAYS; + } else { + $notificationLevel = $this->getDefaultGroupNotification(); + } + } + + if ($notificationLevel === Participant::NOTIFY_ALWAYS) { + $notification = $this->createNotification($chat, $comment, 'reaction', [ + 'reaction' => $reaction->getMessage(), + ], $reaction); + $notification->setUser($comment->getActorId()); + $this->notificationManager->notify($notification); + } + } + + /** + * Removes all the pending notifications for the room with the given ID. + */ + public function removePendingNotificationsForRoom(Room $chat, bool $chatOnly = false): void { + $notification = $this->notificationManager->createNotification(); + $shouldFlush = $this->notificationManager->defer(); + + // @todo this should be in the Notifications\Hooks + $notification->setApp('spreed'); + + $objectTypes = [ + 'chat', + 'reminder', + ]; + if (!$chatOnly) { + $objectTypes = [ + 'call', + 'chat', + 'room', + 'recording', + 'recording_information', + 'remote_talk_share', + ]; + } + foreach ($objectTypes as $type) { + $notification->setObject($type, $chat->getToken()); + $this->notificationManager->markProcessed($notification); + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + /** + * Removes all the pending mention notifications for the room + * + * @param Room $chat + * @param ?string $userId + */ + public function markMentionNotificationsRead(Room $chat, ?string $userId): void { + if ($userId === null || $userId === '') { + return; + } + + $shouldFlush = $this->notificationManager->defer(); + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setObject('chat', $chat->getToken()) + ->setUser($userId); + + $this->notificationManager->markProcessed($notification); + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + /** + * Remove all mention notifications of users that got their mention removed + * + * @param list $userIds + */ + public function removeMentionNotificationAfterEdit(Room $chat, IComment $comment, array $userIds): void { + $shouldFlush = $this->notificationManager->defer(); + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setObject('chat', $chat->getToken()) + // FIXME message_parameters are not handled by notification app, so this removes all notifications :( + ->setMessage('comment', [ + 'commentId' => $comment->getId(), + ]); + + foreach (['mention_all', 'mention_direct'] as $subject) { + $notification->setSubject($subject); + foreach ($userIds as $userId) { + $notification->setUser($userId); + $this->notificationManager->markProcessed($notification); + } + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + /** + * Returns the IDs of the users mentioned in the given comment. + * + * @param IComment $comment + * @return string[] the mentioned user IDs + */ + public function getMentionedUserIds(IComment $comment): array { + $mentionedUsers = $this->getMentionedUsers($comment); + return array_map(static function ($mentionedUser) { + return $mentionedUser['id']; + }, $mentionedUsers); + } + + /** + * Returns the cloud IDs of the federated users mentioned in the given comment. + * + * @param IComment $comment + * @return string[] the mentioned cloud IDs + */ + public function getMentionedCloudIds(IComment $comment): array { + $mentionedFederatedUsers = $this->getMentionedFederatedUsers($comment); + return array_map(static function ($mentionedUser) { + return $mentionedUser['id']; + }, $mentionedFederatedUsers); + } + + /** + * @param IComment $comment + * @return array[] + * @psalm-return array + */ + private function getMentionedUsers(IComment $comment): array { + $mentions = $comment->getMentions(); + + if (empty($mentions)) { + return []; + } + + $mentionedUsers = []; + foreach ($mentions as $mention) { + if ($mention['type'] !== 'user') { + continue; + } + + $mentionedUsers[] = [ + 'id' => $mention['id'], + 'type' => Attendee::ACTOR_USERS, + 'reason' => 'direct', + ]; + } + return $mentionedUsers; + } + + /** + * @param IComment $comment + * @return array[] + * @psalm-return array + */ + private function getMentionedFederatedUsers(IComment $comment): array { + $mentions = $comment->getMentions(); + + if (empty($mentions)) { + return []; + } + + $mentionedUsers = []; + foreach ($mentions as $mention) { + if ($mention['type'] !== 'federated_user') { + continue; + } + + $mentionedUsers[] = [ + 'id' => $mention['id'], + 'type' => Attendee::ACTOR_FEDERATED_USERS, + 'reason' => 'direct', + ]; + } + return $mentionedUsers; + } + + /** + * @param Room $chat + * @param IComment $comment + * @param array $list + * @psalm-param array $list + * @return array[] + * @psalm-return array + */ + private function getMentionedGroupMembers(Room $chat, IComment $comment, array $list): array { + $mentions = $comment->getMentions(); + + if (empty($mentions)) { + return []; + } + + $alreadyMentionedUserIds = array_filter( + array_map(static fn (array $entry) => $entry['type'] === Attendee::ACTOR_USERS ? $entry['id'] : null, $list), + static fn ($userId) => $userId !== null + ); + $alreadyMentionedUserIds = array_flip($alreadyMentionedUserIds); + + foreach ($mentions as $mention) { + if ($mention['type'] !== 'group') { + continue; + } + + $group = $this->groupManager->get($mention['id']); + if (!$group instanceof IGroup) { + continue; + } + + try { + $this->participantService->getParticipantByActor($chat, Attendee::ACTOR_GROUPS, $group->getGID()); + } catch (ParticipantNotFoundException $e) { + continue; + } + + $members = $group->getUsers(); + foreach ($members as $member) { + if (isset($alreadyMentionedUserIds[$member->getUID()])) { + continue; + } + + $list[] = [ + 'id' => $member->getUID(), + 'type' => Attendee::ACTOR_USERS, + 'reason' => 'group', + 'sourceId' => $group->getGID(), + ]; + $alreadyMentionedUserIds[$member->getUID()] = true; + } + } + + return $list; + } + + /** + * @param Room $chat + * @param IComment $comment + * @param array $list + * @psalm-param array $list + * @return array[] + * @psalm-return array + */ + private function getMentionedTeamMembers(Room $chat, IComment $comment, array $list): array { + $mentions = $comment->getMentions(); + + if (empty($mentions)) { + return []; + } + + $alreadyMentionedUserIds = array_filter( + array_map(static fn (array $entry) => $entry['type'] === Attendee::ACTOR_USERS ? $entry['id'] : null, $list), + static fn ($userId) => $userId !== null + ); + $alreadyMentionedUserIds = array_flip($alreadyMentionedUserIds); + + foreach ($mentions as $mention) { + if ($mention['type'] !== 'team') { + continue; + } + + try { + $this->participantService->getParticipantByActor($chat, Attendee::ACTOR_CIRCLES, $mention['id']); + } catch (ParticipantNotFoundException) { + continue; + } + + $members = $this->participantService->getCircleMembers($mention['id']); + if (empty($members)) { + continue; + } + + foreach ($members as $member) { + $list[] = [ + 'id' => $member->getUserId(), + 'type' => Attendee::ACTOR_USERS, + 'reason' => 'team', + 'sourceId' => $mention['id'], + ]; + $alreadyMentionedUserIds[$member->getUserId()] = true; + } + } + + return $list; + } + + /** + * Creates a notification for the given chat message comment and mentioned + * user ID. + */ + private function createNotification(Room $chat, IComment $comment, string $subject, array $subjectData = [], ?IComment $reaction = null, ?int $threadId = null): INotification { + $subjectData['userType'] = $reaction ? $reaction->getActorType() : $comment->getActorType(); + $subjectData['userId'] = $reaction ? $reaction->getActorId() : $comment->getActorId(); + + $messageData = [ + 'commentId' => $comment->getId(), + ]; + + if ($threadId !== null && $threadId !== 0) { + $messageData['threadId'] = $threadId; + } + + $notification = $this->notificationManager->createNotification(); + $notification + ->setApp('spreed') + ->setObject('chat', $chat->getToken()) + ->setSubject($subject, $subjectData) + ->setMessage($comment->getVerb(), $messageData) + ->setDateTime($reaction ? $reaction->getCreationDateTime() : $comment->getCreationDateTime()); + + return $notification; + } + + protected function getDefaultGroupNotification(): int { + return (int)$this->config->getAppValue('spreed', 'default_group_notification', (string)Participant::NOTIFY_MENTION); + } + + /** + * Determines whether a user should be notified about the mention: + * + * 1. The user did not mention themself + * 2. The user must exist + * 3. The user must be a participant of the room + * 4. The user must not be active in the room + */ + protected function shouldMentionedUserBeNotified(string $userId, IComment $comment, Room $room, ?Attendee $attendee = null): int { + if ($comment->getActorType() === Attendee::ACTOR_USERS && $userId === $comment->getActorId()) { + // Do not notify the user if they mentioned themselves + return self::PRIORITY_NONE; + } + + try { + if (!$attendee instanceof Attendee) { + if (!$this->userManager->userExists($userId)) { + return self::PRIORITY_NONE; + } + + $participant = $this->participantService->getParticipant($room, $userId, false); + $attendee = $participant->getAttendee(); + } else { + $participant = new Participant($room, $attendee, null); + } + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE + && !($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + return self::PRIORITY_NONE; + } + + $notificationLevel = $attendee->getNotificationLevel(); + $threadId = (int)$comment->getTopmostParentId(); + if ($threadId !== 0) { + $threadAttendees = $this->threadService->findAttendeeByThreadIds($attendee, [$threadId]); + $threadAttendee = array_shift($threadAttendees); + if ($threadAttendee !== null && $threadAttendee->getNotificationLevel() !== Participant::NOTIFY_DEFAULT) { + $notificationLevel = $threadAttendee->getNotificationLevel(); + } + } + + if ($notificationLevel === Participant::NOTIFY_DEFAULT) { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + $notificationLevel = Participant::NOTIFY_ALWAYS; + } else { + $notificationLevel = $this->getDefaultGroupNotification(); + } + } + if ($notificationLevel === Participant::NOTIFY_NEVER) { + return self::PRIORITY_NONE; + } + + if ($attendee->isImportant()) { + return self::PRIORITY_IMPORTANT; + } + return self::PRIORITY_NORMAL; + } catch (ParticipantNotFoundException $e) { + if ($room->getObjectType() === 'file' && $this->util->canUserAccessFile($room->getObjectId(), $userId)) { + // Users are added on mentions in file-rooms, + // so they can see the room in their room list and + // the notification can be parsed and links to an existing room, + // where they are a participant of. + $userDisplayName = $this->userManager->getDisplayName($userId); + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $userId, + 'displayName' => $userDisplayName ?? $userId, + ]]); + return self::PRIORITY_NORMAL; + } + return self::PRIORITY_NONE; + } + } + + /** + * Determines whether a participant should be notified about the message: + * + * 1. The participant is not a guest + * 2. The participant is not the writing user + * 3. The participant was not mentioned already + * 4. The participant must not be active in the room + * + * @psalm-param array $alreadyNotifiedUsers + */ + protected function shouldParticipantBeNotified(Participant $participant, IComment $comment, array $alreadyNotifiedUsers): int { + if ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_USERS) { + return self::PRIORITY_NONE; + } + + $userId = $participant->getAttendee()->getActorId(); + if ($comment->getActorType() === Attendee::ACTOR_USERS && $userId === $comment->getActorId()) { + // Do not notify the author + return self::PRIORITY_NONE; + } + + $actorType = $participant->getAttendee()->getActorType(); + foreach ($alreadyNotifiedUsers as $user) { + if ($user['id'] === $userId && $user['type'] === $actorType) { + return self::PRIORITY_NONE; + } + } + + if ($participant->getSession()?->getLastPing() >= $this->timeFactory->getTime() - Session::SESSION_TIMEOUT) { + // User is online + return self::PRIORITY_NONE; + } + + if ($participant->getAttendee()->isImportant()) { + return self::PRIORITY_IMPORTANT; + } + + return self::PRIORITY_NORMAL; + } +} diff --git a/lib/Chat/Parser/Changelog.php b/lib/Chat/Parser/Changelog.php new file mode 100644 index 0000000..2fcf7d1 --- /dev/null +++ b/lib/Chat/Parser/Changelog.php @@ -0,0 +1,49 @@ + + */ +class Changelog implements IEventListener { + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof MessageParseEvent) { + return; + } + + $chatMessage = $event->getMessage(); + if ($chatMessage->getMessageType() !== ChatManager::VERB_MESSAGE) { + return; + } + + if ($chatMessage->getActorType() !== Attendee::ACTOR_GUESTS) { + return; + } + + if ($chatMessage->getActorId() === Attendee::ACTOR_ID_CHANGELOG) { + $l = $chatMessage->getL10n(); + $chatMessage->setActor(Attendee::ACTOR_BOTS, Attendee::ACTOR_ID_CHANGELOG, $l->t('Talk updates ✅')); + $event->stopPropagation(); + } + + if ($chatMessage->getActorId() === Attendee::ACTOR_ID_SAMPLE) { + $theme = Server::get(Defaults::class); + $chatMessage->setActor(Attendee::ACTOR_BOTS, Attendee::ACTOR_ID_SAMPLE, $theme->getName()); + } + } +} diff --git a/lib/Chat/Parser/Command.php b/lib/Chat/Parser/Command.php new file mode 100644 index 0000000..c1d6254 --- /dev/null +++ b/lib/Chat/Parser/Command.php @@ -0,0 +1,63 @@ + + */ +class Command implements IEventListener { + public const RESPONSE_NONE = 0; + public const RESPONSE_USER = 1; + public const RESPONSE_ALL = 2; + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof MessageParseEvent) { + return; + } + + $message = $event->getMessage(); + + if ($message->getMessageType() !== ChatManager::VERB_COMMAND) { + return; + } + + $message->setVisibility(false); + + $comment = $message->getComment(); + $data = json_decode($comment->getMessage(), true); + if (!\is_array($data)) { + return; + } + + $event->stopPropagation(); + + if ($data['visibility'] === self::RESPONSE_NONE) { + $message->setVisibility(false); + return; + } + + $participant = $message->getParticipant(); + if ($data['visibility'] !== self::RESPONSE_ALL + && $participant !== null + && ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_USERS + || $data['user'] !== $participant->getAttendee()->getActorId())) { + $message->setVisibility(false); + return; + } + + $message->setMessage($data['output'], []); + } +} diff --git a/lib/Chat/Parser/ReactionParser.php b/lib/Chat/Parser/ReactionParser.php new file mode 100644 index 0000000..9966776 --- /dev/null +++ b/lib/Chat/Parser/ReactionParser.php @@ -0,0 +1,44 @@ + + */ +class ReactionParser implements IEventListener { + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof MessageParseEvent) { + return; + } + $message = $event->getMessage(); + if ($message->getMessageType() !== ChatManager::VERB_REACTION && $message->getMessageType() !== ChatManager::VERB_REACTION_DELETED) { + return; + } + + $comment = $message->getComment(); + if (!in_array($comment->getVerb(), [ChatManager::VERB_REACTION, ChatManager::VERB_REACTION_DELETED], true)) { + return; + } + + $message->setMessageType(ChatManager::VERB_SYSTEM); + if ($comment->getVerb() === ChatManager::VERB_REACTION_DELETED) { + // This message is necessary to make compatible with old clients + $message->setMessage($message->getL10n()->t('Reaction deleted by author'), [], $comment->getVerb()); + } else { + $message->setMessage($message->getMessage(), [], $comment->getVerb()); + } + } +} diff --git a/lib/Chat/Parser/SystemMessage.php b/lib/Chat/Parser/SystemMessage.php new file mode 100644 index 0000000..a7012e3 --- /dev/null +++ b/lib/Chat/Parser/SystemMessage.php @@ -0,0 +1,1377 @@ + + */ +class SystemMessage implements IEventListener { + protected ?IL10N $l = null; + + /** + * @psalm-var array + */ + protected array $displayNames = []; + /** @var string[] */ + protected array $groupNames = []; + /** @var string[] */ + protected array $circleNames = []; + /** @var string[] */ + protected array $circleLinks = []; + /** @var string[] */ + protected array $guestNames = []; + /** @var array> */ + protected array $phoneNames = []; + + + protected array $currentFederatedUserDetails = []; + + public function __construct( + protected IAppConfig $appConfig, + protected IUserManager $userManager, + protected IGroupManager $groupManager, + protected GuestManager $guestManager, + protected ParticipantService $participantService, + protected IPreviewManager $previewManager, + protected RoomShareProvider $shareProvider, + protected PhotoCache $photoCache, + protected IRootFolder $rootFolder, + protected ICloudIdManager $cloudIdManager, + protected IURLGenerator $url, + protected FilesMetadataCache $metadataCache, + protected Authenticator $federationAuthenticator, + protected IEventDispatcher $dispatcher, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof MessageParseEvent) { + return; + } + + if ($event->getMessage()->getMessageType() === ChatManager::VERB_SYSTEM) { + try { + $this->parseMessage($event->getMessage(), $event->allowInaccurate()); + // Disabled so we can parse mentions in captions: $event->stopPropagation(); + } catch (\OutOfBoundsException $e) { + // Unknown message, ignore + } + } elseif ($event->getMessage()->getMessageType() === ChatManager::VERB_MESSAGE_DELETED) { + try { + $this->parseDeletedMessage($event->getMessage()); + $event->stopPropagation(); + } catch (\OutOfBoundsException) { + // Unknown message, ignore + } + } + } + + /** + * @param Message $chatMessage + * @throws \OutOfBoundsException + */ + protected function parseMessage(Message $chatMessage, $allowInaccurate): void { + $this->l = $chatMessage->getL10n(); + $comment = $chatMessage->getComment(); + $room = $chatMessage->getRoom(); + $data = json_decode($chatMessage->getMessage(), true); + if (!\is_array($data)) { + throw new \OutOfBoundsException('Invalid message'); + } + + $message = $data['message']; + $parameters = $data['parameters']; + $parsedParameters = ['actor' => $this->getActorFromComment($room, $comment)]; + + $participant = $chatMessage->getParticipant(); + if ($participant === null) { + $currentActorType = null; + $currentActorId = null; + $currentUserIsActor = false; + } elseif ($this->federationAuthenticator->isFederationRequest()) { + if (empty($this->currentFederatedUserDetails)) { + $cloudId = $this->cloudIdManager->resolveCloudId($this->federationAuthenticator->getCloudId()); + $this->currentFederatedUserDetails = [ + 'user' => $cloudId->getUser(), + 'server' => $cloudId->getRemote(), + ]; + } + + $currentActorType = $participant->getAttendee()->getActorType(); + $currentActorId = $participant->getAttendee()->getActorId(); + $currentUserIsActor = isset($parsedParameters['actor']['server']) + && $parsedParameters['actor']['type'] === 'user' + && $this->currentFederatedUserDetails['user'] === $parsedParameters['actor']['id'] + && $this->currentFederatedUserDetails['server'] === $parsedParameters['actor']['server']; + } elseif (!$participant->isGuest()) { + $currentActorType = $participant->getAttendee()->getActorType(); + $currentActorId = $participant->getAttendee()->getActorId(); + $currentUserIsActor = $parsedParameters['actor']['type'] === 'user' + && $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS + && $currentActorId === $parsedParameters['actor']['id'] + && empty($parsedParameters['actor']['server']); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS) { + $currentActorType = $participant->getAttendee()->getActorType(); + $currentActorId = $participant->getAttendee()->getActorId(); + $currentUserIsActor = $parsedParameters['actor']['type'] === 'email' + && $participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS + && $participant->getAttendee()->getActorId() === $parsedParameters['actor']['id']; + } else { + $currentActorType = $participant->getAttendee()->getActorType(); + $currentActorId = $participant->getAttendee()->getActorId(); + $currentUserIsActor = $parsedParameters['actor']['type'] === 'guest' + && $participant->getAttendee()->getActorType() === 'guest' + && $participant->getAttendee()->getActorId() === $parsedParameters['actor']['id']; + } + $cliIsActor = $parsedParameters['actor']['type'] === 'guest' + && 'guest/' . Attendee::ACTOR_ID_CLI === $parsedParameters['actor']['id']; + + if ($message === 'conversation_created') { + $systemIsActor = $parsedParameters['actor']['type'] === 'guest' + && 'guest/' . Attendee::ACTOR_ID_SYSTEM === $parsedParameters['actor']['id']; + + $parsedMessage = $this->l->t('{actor} created the conversation'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You created the conversation'); + } elseif ($systemIsActor) { + $parsedMessage = $this->l->t('System created the conversation'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator created the conversation'); + } + } elseif ($message === 'conversation_renamed') { + $parsedMessage = $this->l->t('{actor} renamed the conversation from "%1$s" to "%2$s"', [$parameters['oldName'], $parameters['newName']]); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You renamed the conversation from "%1$s" to "%2$s"', [$parameters['oldName'], $parameters['newName']]); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator renamed the conversation from "%1$s" to "%2$s"', [$parameters['oldName'], $parameters['newName']]); + } + } elseif ($message === 'description_set') { + $parsedMessage = $this->l->t('{actor} set the description'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You set the description'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator set the description'); + } + } elseif ($message === 'description_removed') { + $parsedMessage = $this->l->t('{actor} removed the description'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed the description'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed the description'); + } + } elseif ($message === 'call_started') { + $metaData = $comment->getMetaData() ?? []; + $silentCall = $metaData[Message::METADATA_SILENT] ?? false; + if ($silentCall) { + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started a silent call'); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $parsedMessage = $this->l->t('Outgoing silent call'); + } + } else { + $parsedMessage = $this->l->t('{actor} started a silent call'); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $parsedMessage = $this->l->t('Incoming silent call'); + } + } + } else { + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started a call'); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $parsedMessage = $this->l->t('Outgoing call'); + } + } else { + $parsedMessage = $this->l->t('{actor} started a call'); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $parsedMessage = $this->l->t('Incoming call'); + } + } + } + } elseif ($message === 'call_joined') { + $parsedMessage = $this->l->t('{actor} joined the call'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You joined the call'); + } + } elseif ($message === 'call_left') { + $parsedMessage = $this->l->t('{actor} left the call'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You left the call'); + } + } elseif ($message === 'call_missed') { + [$parsedMessage, $parsedParameters, $message] = $this->parseMissedCall($room, $parameters, $currentActorType === Attendee::ACTOR_FEDERATED_USERS ? null : $currentActorId); + } elseif ($message === 'call_ended' || $message === 'call_ended_everyone') { + [$parsedMessage, $parsedParameters] = $this->parseCall($room, $message, $parameters, $parsedParameters); + } elseif ($message === 'read_only_off') { + $parsedMessage = $this->l->t('{actor} unlocked the conversation'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You unlocked the conversation'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator unlocked the conversation'); + } + } elseif ($message === 'read_only') { + $parsedMessage = $this->l->t('{actor} locked the conversation'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You locked the conversation'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator locked the conversation'); + } + } elseif ($message === 'listable_none') { + $parsedMessage = $this->l->t('{actor} limited the conversation to the current participants'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You limited the conversation to the current participants'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator limited the conversation to the current participants'); + } + } elseif ($message === 'listable_users') { + $parsedMessage = $this->l->t('{actor} opened the conversation to registered users'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You opened the conversation to registered users'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator opened the conversation to registered users'); + } + } elseif ($message === 'listable_all') { + $parsedMessage = $this->l->t('{actor} opened the conversation to registered users and users created with the Guests app'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You opened the conversation to registered users and users created with the Guests app'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator opened the conversation to registered users and users created with the Guests app'); + } + } elseif ($message === 'lobby_timer_reached') { + $parsedMessage = $this->l->t('The conversation is now open to everyone'); + } elseif ($message === 'lobby_none') { + $parsedMessage = $this->l->t('{actor} opened the conversation to everyone'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You opened the conversation to everyone'); + } + } elseif ($message === 'lobby_non_moderators') { + $parsedMessage = $this->l->t('{actor} restricted the conversation to moderators'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You restricted the conversation to moderators'); + } + } elseif ($message === 'breakout_rooms_started') { + $parsedMessage = $this->l->t('{actor} started breakout rooms'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started breakout rooms'); + } + } elseif ($message === 'breakout_rooms_stopped') { + $parsedMessage = $this->l->t('{actor} stopped breakout rooms'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You stopped breakout rooms'); + } + } elseif ($message === 'guests_allowed') { + $parsedMessage = $this->l->t('{actor} allowed guests'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You allowed guests'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator allowed guests'); + } + } elseif ($message === 'guests_disallowed') { + $parsedMessage = $this->l->t('{actor} disallowed guests'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You disallowed guests'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator disallowed guests'); + } + } elseif ($message === 'password_set') { + $parsedMessage = $this->l->t('{actor} set a password'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You set a password'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator set a password'); + } + } elseif ($message === 'password_removed') { + $parsedMessage = $this->l->t('{actor} removed the password'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed the password'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed the password'); + } + } elseif ($message === 'user_added') { + $parsedParameters['user'] = $this->getUser($parameters['user']); + $parsedMessage = $this->l->t('{actor} added {user}'); + if ($parsedParameters['user']['id'] === $parsedParameters['actor']['id']) { + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You joined the conversation'); + } else { + $parsedMessage = $this->l->t('{actor} joined the conversation'); + } + } elseif ($currentUserIsActor) { + $parsedMessage = $this->l->t('You added {user}'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} added you'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added you'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added {user}'); + } + } elseif ($message === 'user_removed') { + $parsedParameters['user'] = $this->getUser($parameters['user']); + if ($parsedParameters['user']['id'] === $parsedParameters['actor']['id']) { + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You left the conversation'); + } else { + $parsedMessage = $this->l->t('{actor} left the conversation'); + } + } else { + $parsedMessage = $this->l->t('{actor} removed {user}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed {user}'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} removed you'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed you'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed {user}'); + } + } + } elseif ($message === 'federated_user_added') { + $parsedParameters['federated_user'] = $this->getRemoteUser($room, $parameters['federated_user']); + $parsedMessage = $this->l->t('{actor} invited {federated_user}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You invited {federated_user}'); + if ($this->isFederatedUserThemselvesActor($parsedParameters['federated_user'], $parsedParameters['actor'])) { + $parsedMessage = $this->l->t('You accepted the invitation'); + } + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['federated_user'])) { + $parsedMessage = $this->l->t('{actor} invited you'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator invited you'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator invited {federated_user}'); + } elseif ($this->isFederatedUserThemselvesActor($parsedParameters['federated_user'], $parsedParameters['actor'])) { + $parsedMessage = $this->l->t('{federated_user} accepted the invitation'); + } + } elseif ($message === 'federated_user_removed') { + $parsedParameters['federated_user'] = $this->getRemoteUser($room, $parameters['federated_user']); + $parsedMessage = $this->l->t('{actor} removed {federated_user}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed {federated_user}'); + if ($this->isFederatedUserThemselvesActor($parsedParameters['federated_user'], $parsedParameters['actor'])) { + $parsedMessage = $this->l->t('You declined the invitation'); + } + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['federated_user'])) { + $parsedMessage = $this->l->t('{actor} removed you'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed you'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed {federated_user}'); + } elseif ($this->isFederatedUserThemselvesActor($parsedParameters['federated_user'], $parsedParameters['actor'])) { + $parsedMessage = $this->l->t('{federated_user} declined the invitation'); + } + } elseif ($message === 'group_added') { + $parsedParameters['group'] = $this->getGroup($parameters['group']); + $parsedMessage = $this->l->t('{actor} added group {group}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You added group {group}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added group {group}'); + } + } elseif ($message === 'group_removed') { + $parsedParameters['group'] = $this->getGroup($parameters['group']); + $parsedMessage = $this->l->t('{actor} removed group {group}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed group {group}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed group {group}'); + } + } elseif ($message === 'circle_added') { + $parsedParameters['circle'] = $this->getCircle($parameters['circle']); + $parsedMessage = $this->l->t('{actor} added team {circle}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You added team {circle}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added team {circle}'); + } + } elseif ($message === 'circle_removed') { + $parsedParameters['circle'] = $this->getCircle($parameters['circle']); + $parsedMessage = $this->l->t('{actor} removed team {circle}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed team {circle}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed team {circle}'); + } + } elseif ($message === 'phone_added') { + $parsedParameters['phone'] = $this->getPhone($room, $parameters['phone'], $parameters['name']); + $parsedMessage = $this->l->t('{actor} added {phone}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You added {phone}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator added {phone}'); + } + } elseif ($message === 'phone_removed') { + $parsedParameters['phone'] = $this->getPhone($room, $parameters['phone'], $parameters['name']); + $parsedMessage = $this->l->t('{actor} removed {phone}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed {phone}'); + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator removed {phone}'); + } + } elseif ($message === 'moderator_promoted') { + $parsedParameters['user'] = $this->getUser($parameters['user']); + $parsedMessage = $this->l->t('{actor} promoted {user} to moderator'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You promoted {user} to moderator'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} promoted you to moderator'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator promoted you to moderator'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator promoted {user} to moderator'); + } + } elseif ($message === 'moderator_demoted') { + $parsedParameters['user'] = $this->getUser($parameters['user']); + $parsedMessage = $this->l->t('{actor} demoted {user} from moderator'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You demoted {user} from moderator'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} demoted you from moderator'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator demoted you from moderator'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator demoted {user} from moderator'); + } + } elseif ($message === 'guest_moderator_promoted') { + if (isset($parameters['type'], $parameters['id'])) { + $parsedParameters['user'] = $this->getGuest($room, $parameters['type'], $parameters['id']); + } else { + // Before Nextcloud 30 + $parsedParameters['user'] = $this->getGuest($room, Attendee::ACTOR_GUESTS, $parameters['session']); + } + $parsedMessage = $this->l->t('{actor} promoted {user} to moderator'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You promoted {user} to moderator'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} promoted you to moderator'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator promoted you to moderator'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator promoted {user} to moderator'); + } + } elseif ($message === 'guest_moderator_demoted') { + if (isset($parameters['type'], $parameters['id'])) { + $parsedParameters['user'] = $this->getGuest($room, $parameters['type'], $parameters['id']); + } else { + // Before Nextcloud 30 + $parsedParameters['user'] = $this->getGuest($room, Attendee::ACTOR_GUESTS, $parameters['session']); + } + $parsedMessage = $this->l->t('{actor} demoted {user} from moderator'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You demoted {user} from moderator'); + } elseif ($this->isCurrentParticipantChangedUser($currentActorType, $currentActorId, $parsedParameters['user'])) { + $parsedMessage = $this->l->t('{actor} demoted you from moderator'); + if ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator demoted you from moderator'); + } + } elseif ($cliIsActor) { + $parsedMessage = $this->l->t('An administrator demoted {user} from moderator'); + } + } elseif ($message === 'file_shared') { + try { + $parsedParameters['file'] = $this->getFileFromShare($room, $participant, $parameters['share'], $allowInaccurate); + $parsedMessage = '{file}'; + $metaData = $parameters['metaData'] ?? []; + if (isset($metaData['messageType'])) { + if ($metaData['messageType'] === ChatManager::VERB_VOICE_MESSAGE) { + $chatMessage->setMessageType(ChatManager::VERB_VOICE_MESSAGE); + } elseif ($metaData['messageType'] === ChatManager::VERB_RECORD_AUDIO) { + $chatMessage->setMessageType(ChatManager::VERB_RECORD_AUDIO); + } elseif ($metaData['messageType'] === ChatManager::VERB_RECORD_VIDEO) { + $chatMessage->setMessageType(ChatManager::VERB_RECORD_VIDEO); + } else { + $chatMessage->setMessageType(ChatManager::VERB_MESSAGE); + } + } else { + $chatMessage->setMessageType(ChatManager::VERB_MESSAGE); + } + + if (isset($metaData['caption']) && $metaData['caption'] !== '') { + $parsedMessage = $metaData['caption']; + } + } catch (\Exception) { + $chatMessage->setMessageType(ChatManager::VERB_MESSAGE); + $parsedMessage = $this->l->t('{actor} shared a file which is no longer available'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You shared a file which is no longer available'); + } elseif ($currentActorType === Attendee::ACTOR_FEDERATED_USERS) { + $parsedMessage = $this->l->t('File shares are currently not supported in federated conversations'); + } + $parsedMessage = '*' . $parsedMessage . '*'; + + $metaData = $parameters['metaData'] ?? []; + if (isset($metaData['caption']) && $metaData['caption'] !== '') { + $parsedMessage .= "\n\n" . $metaData['caption']; + } + } + } elseif ($message === 'object_shared') { + $parsedParameters['object'] = $parameters['metaData']; + $parsedParameters['object']['id'] = (string)$parsedParameters['object']['id']; + $parsedMessage = '{object}'; + + if (isset($parsedParameters['object']['type']) + && $parsedParameters['object']['type'] === 'geo-location' + && !preg_match(ChatManager::GEO_LOCATION_VALIDATOR, $parsedParameters['object']['id'])) { + $parsedParameters = []; + $parsedMessage = $this->l->t('The shared location is malformed'); + } + + $chatMessage->setMessageType(ChatManager::VERB_MESSAGE); + } elseif ($message === 'matterbridge_config_added') { + $parsedMessage = $this->l->t('{actor} set up Matterbridge to synchronize this conversation with other chats'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You set up Matterbridge to synchronize this conversation with other chats'); + } + } elseif ($message === 'thread_created') { + $parsedMessage = $this->l->t('{actor} created thread {title}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You created thread {title}'); + } + $parsedParameters['title'] = [ + 'type' => 'highlight', + 'id' => 'thread/' . $parameters['thread'], + 'name' => $parameters['title'] ?? (string)$parameters['thread'], + ]; + } elseif ($message === 'thread_renamed') { + $parsedMessage = $this->l->t('{actor} renamed thread {title}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You renamed thread {title}'); + } + $parsedParameters['title'] = [ + 'type' => 'highlight', + 'id' => 'thread/' . $parameters['thread'], + 'name' => $parameters['title'], + ]; + } elseif ($message === 'matterbridge_config_edited') { + $parsedMessage = $this->l->t('{actor} updated the Matterbridge configuration'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You updated the Matterbridge configuration'); + } + } elseif ($message === 'matterbridge_config_removed') { + $parsedMessage = $this->l->t('{actor} removed the Matterbridge configuration'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed the Matterbridge configuration'); + } + } elseif ($message === 'matterbridge_config_enabled') { + $parsedMessage = $this->l->t('{actor} started Matterbridge'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started Matterbridge'); + } + } elseif ($message === 'matterbridge_config_disabled') { + $parsedMessage = $this->l->t('{actor} stopped Matterbridge'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You stopped Matterbridge'); + } + } elseif ($message === 'message_deleted') { + $parsedMessage = $this->l->t('{actor} deleted a message'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You deleted a message'); + } + } elseif ($message === 'message_edited') { + $parsedMessage = $this->l->t('{actor} edited a message'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You edited a message'); + } + } elseif ($message === 'reaction_revoked') { + $parsedMessage = $this->l->t('{actor} deleted a reaction'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You deleted a reaction'); + } + } elseif ($message === 'message_expiration_enabled') { + $weeks = $parameters['seconds'] >= (86400 * 7) ? (int)round($parameters['seconds'] / (86400 * 7)) : 0; + $days = $parameters['seconds'] >= 86400 ? (int)round($parameters['seconds'] / 86400) : 0; + $hours = $parameters['seconds'] >= 3600 ? (int)round($parameters['seconds'] / 3600) : 0; + $minutes = (int)round($parameters['seconds'] / 60); + + if ($currentUserIsActor) { + if ($weeks > 0) { + $parsedMessage = $this->l->n('You set the message expiration to %n week', 'You set the message expiration to %n weeks', $weeks); + } elseif ($days > 0) { + $parsedMessage = $this->l->n('You set the message expiration to %n day', 'You set the message expiration to %n days', $days); + } elseif ($hours > 0) { + $parsedMessage = $this->l->n('You set the message expiration to %n hour', 'You set the message expiration to %n hours', $hours); + } else { + $parsedMessage = $this->l->n('You set the message expiration to %n minute', 'You set the message expiration to %n minutes', $minutes); + } + } else { + if ($weeks > 0) { + $parsedMessage = $this->l->n('{actor} set the message expiration to %n week', '{actor} set the message expiration to %n weeks', $weeks); + } elseif ($days > 0) { + $parsedMessage = $this->l->n('{actor} set the message expiration to %n day', '{actor} set the message expiration to %n days', $days); + } elseif ($hours > 0) { + $parsedMessage = $this->l->n('{actor} set the message expiration to %n hour', '{actor} set the message expiration to %n hours', $hours); + } else { + $parsedMessage = $this->l->n('{actor} set the message expiration to %n minute', '{actor} set the message expiration to %n minutes', $minutes); + } + } + } elseif ($message === 'message_expiration_disabled') { + $parsedMessage = $this->l->t('{actor} disabled message expiration'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You disabled message expiration'); + } + } elseif ($message === 'history_cleared') { + $parsedMessage = $this->l->t('{actor} cleared the history of the conversation'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You cleared the history of the conversation'); + } + } elseif ($message === 'avatar_set') { + $parsedMessage = $this->l->t('{actor} set the conversation picture'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You set the conversation picture'); + } + } elseif ($message === 'avatar_removed') { + $parsedMessage = $this->l->t('{actor} removed the conversation picture'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You removed the conversation picture'); + } + } elseif ($message === 'poll_closed') { + $parsedParameters['poll'] = $parameters['poll']; + $parsedParameters['poll']['id'] = (string)$parsedParameters['poll']['id']; + $parsedMessage = $this->l->t('{actor} ended the poll {poll}'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You ended the poll {poll}'); + } + } elseif ($message === 'recording_started') { + $parsedMessage = $this->l->t('{actor} started the video recording'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started the video recording'); + } + } elseif ($message === 'recording_stopped') { + $parsedMessage = $this->l->t('{actor} stopped the video recording'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You stopped the video recording'); + } + } elseif ($message === 'audio_recording_started') { + $parsedMessage = $this->l->t('{actor} started the audio recording'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You started the audio recording'); + } + } elseif ($message === 'audio_recording_stopped') { + $parsedMessage = $this->l->t('{actor} stopped the audio recording'); + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('You stopped the audio recording'); + } + } elseif ($message === 'recording_failed') { + $parsedMessage = $this->l->t('The recording failed'); + } elseif ($message === 'poll_voted') { + $parsedParameters['poll'] = $parameters['poll']; + $parsedParameters['poll']['id'] = (string)$parsedParameters['poll']['id']; + $parsedMessage = $this->l->t('Someone voted on the poll {poll}'); + unset($parsedParameters['actor']); + + $chatMessage->setActor(Attendee::ACTOR_GUESTS, Attendee::ACTOR_ID_SYSTEM, ''); + } else { + throw new \OutOfBoundsException('Unknown subject'); + } + + $chatMessage->setMessage($parsedMessage, $parsedParameters, $message); + } + + /** + * @param Message $chatMessage + * @throws \OutOfBoundsException + */ + protected function parseDeletedMessage(Message $chatMessage): void { + $this->l = $chatMessage->getL10n(); + $data = json_decode($chatMessage->getMessage(), true); + if (!\is_array($data)) { + throw new \OutOfBoundsException('Invalid message'); + } + $room = $chatMessage->getRoom(); + + $parsedParameters = ['actor' => $this->getActor($room, $data['deleted_by_type'], $data['deleted_by_id'])]; + + $participant = $chatMessage->getParticipant(); + + $authorIsActor = $data['deleted_by_type'] === $chatMessage->getComment()->getActorType() + && $data['deleted_by_id'] === $chatMessage->getComment()->getActorId(); + + if ($participant === null) { + $currentUserIsActor = false; + } elseif ($this->federationAuthenticator->isFederationRequest()) { + if (empty($this->currentFederatedUserDetails)) { + $cloudId = $this->cloudIdManager->resolveCloudId($this->federationAuthenticator->getCloudId()); + $this->currentFederatedUserDetails = [ + 'user' => $cloudId->getUser(), + 'server' => $cloudId->getRemote(), + ]; + } + + $currentUserIsActor = isset($parsedParameters['actor']['server']) + && $parsedParameters['actor']['type'] === 'user' + && $this->currentFederatedUserDetails['user'] === $parsedParameters['actor']['id'] + && $this->currentFederatedUserDetails['server'] === $parsedParameters['actor']['server']; + } elseif (!$participant->isGuest()) { + $currentUserIsActor = $parsedParameters['actor']['type'] === 'user' + && $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS + && $participant->getAttendee()->getActorId() === $parsedParameters['actor']['id'] + && empty($parsedParameters['actor']['server']); + } else { + $currentUserIsActor = $parsedParameters['actor']['type'] === 'guest' + && $participant->getAttendee()->getActorType() === 'guest' + && $participant->getAttendee()->getActorId() === $parsedParameters['actor']['id']; + } + + if ($chatMessage->getMessageType() === ChatManager::VERB_MESSAGE_DELETED) { + $message = 'message_deleted'; + $parsedMessage = $this->l->t('Message deleted by author'); + + if (!$authorIsActor) { + $parsedMessage = $this->l->t('Message deleted by {actor}'); + } + if ($currentUserIsActor) { + $parsedMessage = $this->l->t('Message deleted by you'); + } + } else { + throw new \OutOfBoundsException('Unknown subject'); + } + + // Overwrite reactions of deleted messages as you can not react to them anymore either + $chatMessage->getComment()->setReactions([]); + + $chatMessage->setMessage($parsedMessage, $parsedParameters, $message); + } + + /** + * @throws InvalidPathException + * @throws NotFoundException + * @throws ShareNotFound + */ + protected function getFileFromShare(Room $room, ?Participant $participant, string $shareId, bool $allowInaccurate): array { + $share = $this->shareProvider->getShareById((int)$shareId); + + if ($participant && $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + if ($allowInaccurate) { + $node = $share->getNodeCacheEntry(); + if ($node === null) { + throw new ShareNotFound(); + } + + $name = $node->getName(); + $size = $node->getSize(); + $path = $name; + } elseif ($share->getShareOwner() !== $participant->getAttendee()->getActorId()) { + $userFolder = $this->rootFolder->getUserFolder($participant->getAttendee()->getActorId()); + if (!$userFolder instanceof Node) { + throw new ShareNotFound(); + } + + $node = $userFolder->getFirstNodeById($share->getNodeId()); + if (!$node instanceof Node) { + // FIXME This should be much more sensible, e.g. + // 1. Only be executed on "Waiting for new messages" + // 2. Once per request + \OC_Util::tearDownFS(); + \OC_Util::setupFS($participant->getAttendee()->getActorId()); + $userNodes = $userFolder->getById($share->getNodeId()); + + if (empty($userNodes)) { + throw new NotFoundException('File was not found'); + } + + /** @var Node $node */ + $node = reset($userNodes); + } + + $fullPath = $node->getPath(); + $pathSegments = explode('/', $fullPath, 4); + $name = $node->getName(); + $size = $node->getSize(); + $path = $pathSegments[3] ?? $name; + } else { + $node = $share->getNode(); + $name = $node->getName(); + $size = $node->getSize(); + + $fullPath = $node->getPath(); + $pathSegments = explode('/', $fullPath, 4); + $path = $pathSegments[3] ?? $name; + } + + $url = $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', [ + 'fileid' => $node->getId(), + ]); + } elseif ($participant && $room->getType() !== Room::TYPE_PUBLIC && $participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + throw new ShareNotFound(); + } else { + if ($allowInaccurate) { + $node = $share->getNodeCacheEntry(); + } else { + $node = $share->getNode(); + $this->dispatcher->dispatchTyped(new OverwritePublicSharePropertiesEvent($share)); + } + + $name = $node->getName(); + $size = $node->getSize(); + $path = $name; + + $url = $this->url->linkToRouteAbsolute('files_sharing.sharecontroller.showShare', [ + 'token' => $share->getToken(), + ]); + } + + $fileId = $node->getId(); + if ($node instanceof FileInfo) { + $isPreviewAvailable = $this->previewManager->isAvailable($node); + } else { + $isPreviewAvailable = $size > 0 && $this->previewManager->isMimeSupported($node->getMimeType()); + } + + $data = [ + 'type' => 'file', + 'id' => (string)$fileId, + 'name' => $name, + 'size' => (string)$size, + 'path' => $path, + 'link' => $url, + 'etag' => $node->getEtag(), + 'permissions' => (string)$node->getPermissions(), + 'mimetype' => $node->getMimeType(), + 'preview-available' => $isPreviewAvailable ? 'yes' : 'no', + 'hide-download' => $share->getHideDownload() ? 'yes' : 'no', + ]; + + // If a preview is available, check if we can get the dimensions of the file from the metadata API + if ($isPreviewAvailable && str_starts_with($node->getMimeType(), 'image/')) { + try { + $sizeMetadata = $this->metadataCache->getImageMetadataForFileId($fileId); + if (isset($sizeMetadata['width'], $sizeMetadata['height'])) { + $data['width'] = (string)$sizeMetadata['width']; + $data['height'] = (string)$sizeMetadata['height']; + } + + if (isset($sizeMetadata['blurhash'])) { + $data['blurhash'] = $sizeMetadata['blurhash']; + } + } catch (FilesMetadataNotFoundException) { + } + } + + if ($node instanceof FileInfo && $node->getMimeType() === 'text/vcard') { + $vCard = $node->getContent(); + + $vObject = Reader::read($vCard); + if (!empty($vObject->FN)) { + $data['contact-name'] = (string)$vObject->FN; + } + + $photo = $this->photoCache->getPhotoFromVObject($vObject); + if ($photo) { + $data['contact-photo-mimetype'] = $photo['Content-Type']; + $data['contact-photo'] = base64_encode($photo['body']); + } + } + + return $data; + } + + protected function isCurrentParticipantChangedUser(?string $currentActorType, ?string $currentActorId, array $parameter): bool { + if ($currentActorType === Attendee::ACTOR_GUESTS) { + return $parameter['type'] === 'guest' && $currentActorId === $parameter['id']; + } + if ($currentActorType === Attendee::ACTOR_EMAILS) { + return $parameter['type'] === 'guest' && 'email/' . $currentActorId === $parameter['id']; + } + + if (isset($parameter['server']) + && $currentActorType === Attendee::ACTOR_FEDERATED_USERS + && $parameter['type'] === 'user') { + return $this->currentFederatedUserDetails['user'] === $parameter['id'] + && $this->currentFederatedUserDetails['server'] === $parameter['server']; + } + + return $currentActorType === Attendee::ACTOR_USERS && $parameter['type'] === 'user' && $currentActorId === $parameter['id'] && empty($parameter['server']); + } + + protected function isFederatedUserThemselvesActor(array $federated, array $actor): bool { + return isset($federated['server'], $actor['server']) + && $federated['id'] === $actor['id'] + && $federated['server'] === $actor['server']; + } + + protected function getActorFromComment(Room $room, IComment $comment): array { + return $this->getActor($room, $comment->getActorType(), $comment->getActorId()); + } + + protected function getActor(Room $room, string $actorType, string $actorId): array { + if ($actorType === Attendee::ACTOR_GUESTS || $actorType === Attendee::ACTOR_EMAILS) { + return $this->getGuest($room, $actorType, $actorId); + } + if ($actorType === Attendee::ACTOR_PHONES) { + return $this->getPhone($room, $actorId, ''); + } + if ($actorType === Attendee::ACTOR_FEDERATED_USERS) { + return $this->getRemoteUser($room, $actorId); + } + + return $this->getUser($actorId); + } + + protected function getUser(string $uid): array { + if (!isset($this->displayNames[$uid])) { + try { + $this->displayNames[$uid] = $this->getDisplayName($uid); + } catch (ParticipantNotFoundException $e) { + $this->displayNames[$uid] = null; + } + } + + if ($this->displayNames[$uid] === null) { + return [ + 'type' => 'highlight', + 'id' => ICommentsManager::DELETED_USER, + 'name' => $this->l->t('Deleted user'), + ]; + } + + return [ + 'type' => 'user', + 'id' => $uid, + 'name' => $this->displayNames[$uid], + 'mention-id' => $uid, + ]; + } + + protected function getRemoteUser(Room $room, string $federationId): array { + $cloudId = $this->cloudIdManager->resolveCloudId($federationId); + $displayName = $cloudId->getDisplayId(); + try { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_FEDERATED_USERS, $federationId); + $displayName = $participant->getAttendee()->getDisplayName(); + } catch (ParticipantNotFoundException) { + } + + return [ + 'type' => 'user', + 'id' => $cloudId->getUser(), + 'name' => $displayName, + 'server' => $cloudId->getRemote(), + 'mention-id' => 'federated_user/' . $cloudId->getUser() . '@' . $cloudId->getRemote(), + ]; + } + + protected function getDisplayName(string $uid): string { + $userName = $this->userManager->getDisplayName($uid); + if ($userName !== null) { + return $userName; + } + + throw new ParticipantNotFoundException(); + } + + protected function getGroup(string $gid): array { + if (!isset($this->groupNames[$gid])) { + $this->groupNames[$gid] = $this->getDisplayNameGroup($gid); + } + + return [ + 'type' => 'group', + 'id' => $gid, + 'name' => $this->groupNames[$gid], + 'mention-id' => 'user-group/' . $gid, + ]; + } + + protected function getPhone(Room $room, string $actorId, string $fallbackDisplayName): array { + if (!isset($this->phoneNames[$room->getToken()][$actorId])) { + $this->phoneNames[$room->getToken()][$actorId] = $this->getDisplayNamePhone($room, $actorId, $fallbackDisplayName); + } + + return [ + 'type' => 'highlight', + 'id' => $actorId, + 'name' => $this->phoneNames[$room->getToken()][$actorId], + ]; + } + + protected function getCircle(string $circleId): array { + if (!isset($this->circleNames[$circleId])) { + $this->loadCircleDetails($circleId); + } + + if (!isset($this->circleNames[$circleId])) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + return [ + 'type' => 'circle', + 'id' => $circleId, + 'name' => $this->circleNames[$circleId], + 'link' => $this->circleLinks[$circleId], + 'mention-id' => 'team/' . $circleId, + ]; + } + + protected function getDisplayNamePhone(Room $room, string $actorId, string $fallbackDisplayName): string { + try { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_PHONES, $actorId); + return $participant->getAttendee()->getDisplayName(); + } catch (ParticipantNotFoundException) { + if ($fallbackDisplayName) { + return $fallbackDisplayName; + } + return $this->l->t('Unknown number'); + } + } + + protected function getDisplayNameGroup(string $gid): string { + $group = $this->groupManager->get($gid); + if ($group instanceof IGroup) { + return $group->getDisplayName(); + } + return $gid; + } + + protected function loadCircleDetails(string $circleId): void { + try { + $circlesManager = Server::get(CirclesManager::class); + $circlesManager->startSuperSession(); + $circle = $circlesManager->getCircle($circleId); + $circlesManager->stopSession(); + + $this->circleNames[$circleId] = $circle->getDisplayName(); + $this->circleLinks[$circleId] = $circle->getUrl(); + } catch (\Exception $e) { + $circlesManager->stopSession(); + } + } + + protected function getGuest(Room $room, string $actorType, string $actorId): array { + $key = $room->getId() . '/' . $actorType . '/' . $actorId; + if (!isset($this->guestNames[$key])) { + $this->guestNames[$key] = $this->getGuestName($room, $actorType, $actorId); + } + + return [ + 'type' => 'guest', + 'id' => ($actorType === Attendee::ACTOR_GUESTS ? 'guest/' : 'email/') . $actorId, + 'name' => $this->guestNames[$key], + 'mention-id' => ($actorType === Attendee::ACTOR_GUESTS ? 'guest/' : 'email/') . $actorId, + ]; + } + + protected function getGuestName(Room $room, string $actorType, string $actorId): string { + if ($actorId === Attendee::ACTOR_ID_CLI) { + // TRANSLATORS Actor name when a chat message was done by an administration person via the commmand line + return $this->l->t('Administration'); + } + if ($actorId === Attendee::ACTOR_ID_SYSTEM) { + // TRANSLATORS Actor name when a chat message was done by the system instead of an actual actor + return $this->l->t('System'); + } + if ($actorId === Attendee::ACTOR_ID_SAMPLE + || $actorId === Attendee::ACTOR_ID_CHANGELOG) { + // Will be set by the Changelog Parser + return $this->l->t('Guest'); + } + + try { + $participant = $this->participantService->getParticipantByActor($room, $actorType, $actorId); + $name = $participant->getAttendee()->getDisplayName(); + if ($name === '' && $actorType === Attendee::ACTOR_EMAILS && !preg_match('/^[0-9a-f]{64}$/', $actorId)) { + $name = $actorId; + } elseif ($name === '') { + return $this->l->t('Guest'); + } + return $this->l->t('%s (guest)', [$name]); + } catch (ParticipantNotFoundException $e) { + return $this->l->t('Guest'); + } + } + + protected function parseMissedCall(Room $room, array $parameters, ?string $currentActorId): array { + if ($parameters['users'][0] !== $currentActorId) { + return [ + $this->l->t('Missed call'), + [ + 'user' => $this->getUser($parameters['users'][0]), + ], + 'call_missed', + ]; + } + + if ($room->getType() !== Room::TYPE_ONE_TO_ONE) { + // Can happen if a user was remove from a one-to-one room. + return [ + $this->l->t('Unanswered call'), + [ + 'user' => [ + 'type' => 'highlight', + 'id' => ICommentsManager::DELETED_USER, + 'name' => $room->getName(), + ], + ], + 'call_tried', + ]; + } + + $participants = json_decode($room->getName(), true); + $other = ''; + foreach ($participants as $participant) { + if ($participant !== $currentActorId) { + $other = $participant; + } + } + + return [ + $this->l->t('Unanswered call'), + [ + 'user' => $this->getUser($other), + ], + 'call_tried', + ]; + } + + + protected function parseCall(Room $room, string $message, array $parameters, array $params): array { + $actorIsSystem = $params['actor']['type'] === 'guest' && $params['actor']['id'] === 'guest/' . Attendee::ACTOR_ID_SYSTEM; + $maxDuration = $this->appConfig->getAppValueInt('max_call_duration'); + $maxDurationWasReached = $message === 'call_ended_everyone' && $actorIsSystem && $maxDuration > 0 && $parameters['duration'] > $maxDuration; + + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $this->l->t('Call ended (Duration {duration})'); + $subject = str_replace('{duration}', $this->getDuration($parameters['duration']), $subject); + return [ + $subject, + $params, + ]; + } + + if ($message === 'call_ended_everyone') { + if ($params['actor']['type'] === 'user') { + $entry = array_keys($parameters['users'], $params['actor']['id'], true); + foreach ($entry as $i) { + unset($parameters['users'][$i]); + } + } elseif (!$actorIsSystem) { + $parameters['guests']--; + } + } + if (!isset($parameters['cloudIds'])) { + // Compatibility with old messages + $parameters['cloudIds'] = []; + } + sort($parameters['users']); + sort($parameters['cloudIds']); + + $numRealUsers = count($parameters['users']); + $numUsers = $numRealUsers + count($parameters['cloudIds']); + $displayedUsers = $numUsers; + + switch ($numUsers) { + case 0: + if ($parameters['guests'] === 0) { + // Call without users and guests + if ($maxDurationWasReached) { + $subject = $this->l->t('Call was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call (Duration {duration})'); + } + } else { + if ($maxDurationWasReached) { + $subject = $this->l->n( + 'Call with %n guest was ended, as it reached the maximum call duration (Duration {duration})', + 'Call with %n guests was ended, as it reached the maximum call duration (Duration {duration})', + $parameters['guests'] + ); + } elseif ($message === 'call_ended') { + $subject = $this->l->n( + 'Call with %n guest ended (Duration {duration})', + 'Call with %n guests ended (Duration {duration})', + $parameters['guests'] + ); + } else { + $subject = $this->l->n( + '{actor} ended the call with %n guest (Duration {duration})', + '{actor} ended the call with %n guests (Duration {duration})', + $parameters['guests'] + ); + } + } + break; + case 1: + if ($parameters['guests'] === 0) { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1} (Duration {duration})'); + } + } else { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1} and {user2} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1} and {user2} (Duration {duration})'); + } + $subject = str_replace('{user2}', $this->l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 2: + if ($parameters['guests'] === 0) { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1} and {user2} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1} and {user2} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1} and {user2} (Duration {duration})'); + } + } else { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2} and {user3} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})'); + } + $subject = str_replace('{user3}', $this->l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 3: + if ($parameters['guests'] === 0) { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2} and {user3} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2} and {user3} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2} and {user3} (Duration {duration})'); + } + } else { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})'); + } + $subject = str_replace('{user4}', $this->l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 4: + if ($parameters['guests'] === 0) { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2}, {user3} and {user4} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2}, {user3} and {user4} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2}, {user3} and {user4} (Duration {duration})'); + } + } else { + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})'); + } + $subject = str_replace('{user5}', $this->l->n('%n guest', '%n guests', $parameters['guests']), $subject); + } + break; + case 5: + default: + if ($maxDurationWasReached) { + $subject = $this->l->t('Call with {user1}, {user2}, {user3}, {user4} and {user5} was ended, as it reached the maximum call duration (Duration {duration})'); + } elseif ($message === 'call_ended') { + $subject = $this->l->t('Call with {user1}, {user2}, {user3}, {user4} and {user5} ended (Duration {duration})'); + } else { + $subject = $this->l->t('{actor} ended the call with {user1}, {user2}, {user3}, {user4} and {user5} (Duration {duration})'); + } + if ($numUsers === 5 && $parameters['guests'] === 0) { + $displayedUsers = 5; + } else { + $displayedUsers = 4; + $numOthers = $parameters['guests'] + $numUsers - $displayedUsers; + $subject = str_replace('{user5}', $this->l->n('%n other', '%n others', $numOthers), $subject); + } + } + + if ($displayedUsers > 0) { + for ($i = 1; $i <= $displayedUsers; $i++) { + if ($i <= $numRealUsers) { + $params['user' . $i] = $this->getUser($parameters['users'][$i - 1]); + } else { + $params['user' . $i] = $this->getRemoteUser($room, $parameters['cloudIds'][$i - $numRealUsers - 1]); + } + } + } + + $subject = str_replace('{duration}', $this->getDuration($parameters['duration']), $subject); + return [ + $subject, + $params, + ]; + } + + protected function getDuration(int $seconds): string { + $hours = floor($seconds / 3600); + $seconds %= 3600; + $minutes = floor($seconds / 60); + $seconds %= 60; + + if ($hours > 0) { + $duration = sprintf('%1$d:%2$02d:%3$02d', $hours, $minutes, $seconds); + } else { + $duration = sprintf('%1$d:%2$02d', $minutes, $seconds); + } + + return $duration; + } +} diff --git a/lib/Chat/Parser/UserMention.php b/lib/Chat/Parser/UserMention.php new file mode 100644 index 0000000..22d6764 --- /dev/null +++ b/lib/Chat/Parser/UserMention.php @@ -0,0 +1,320 @@ + + */ +class UserMention implements IEventListener { + /** @var array */ + protected array $circleNames = []; + /** @var array */ + protected array $circleLinks = []; + + public function __construct( + protected IAppManager $appManager, + protected ICommentsManager $commentsManager, + protected IUserManager $userManager, + protected IGroupManager $groupManager, + protected GuestManager $guestManager, + protected AvatarService $avatarService, + protected ICloudIdManager $cloudIdManager, + protected ParticipantService $participantService, + protected IL10N $l, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof MessageParseEvent) { + return; + } + + $message = $event->getMessage(); + if ($message->getMessageType() !== ChatManager::VERB_MESSAGE) { + return; + } + + $this->parseMessage($message); + } + + /** + * Returns the equivalent rich message to the given comment. + * + * The mentions in the comment are replaced by "{mention-$type$index}" in + * the returned rich message; each "mention-$type$index" parameter contains + * the following attributes: + * -type: the type of the mention ("user") + * -id: the ID of the user + * -name: the display name of the user, or an empty string if it could + * not be resolved. + * + * @param Message $chatMessage + */ + protected function parseMessage(Message $chatMessage): void { + $comment = $chatMessage->getComment(); + $message = $chatMessage->getMessage(); + $messageParameters = $chatMessage->getMessageParameters(); + + $mentionTypeCount = []; + + // Set the current message as comment content, so that the message finds + // mentions which are now part of the message, but were not on the original + // comment, e.g. mentions at the beginning of captions + $originalCommentMessage = $comment->getMessage(); + $comment->setMessage($message, ChatManager::MAX_CHAT_LENGTH + 10000); + $mentions = $comment->getMentions(); + $comment->setMessage($originalCommentMessage, ChatManager::MAX_CHAT_LENGTH); + + // TODO This can be removed once getMentions() returns sorted results (Nextcloud 21+) + usort($mentions, static function (array $m1, array $m2) { + return mb_strlen($m2['id']) <=> mb_strlen($m1['id']); + }); + + $metadata = $comment->getMetaData() ?? []; + foreach ($mentions as $mention) { + if ($mention['type'] === 'user' && $mention['id'] === 'all') { + if (!isset($metadata[Message::METADATA_CAN_MENTION_ALL])) { + continue; + } + + $mention['type'] = 'call'; + } + + if ($mention['type'] === 'user') { + $userDisplayName = $this->userManager->getDisplayName($mention['id']); + if ($userDisplayName === null) { + continue; + } + } + + if (!array_key_exists($mention['type'], $mentionTypeCount)) { + $mentionTypeCount[$mention['type']] = 0; + } + $mentionTypeCount[$mention['type']]++; + + $search = $mention['id']; + if ( + $mention['type'] === 'email' + || $mention['type'] === 'group' + // || $mention['type'] === 'federated_group' + || $mention['type'] === 'team' + // || $mention['type'] === 'federated_team' + || $mention['type'] === 'federated_user') { + $search = $mention['type'] . '/' . $mention['id']; + } + + // To keep a limited character set in parameter IDs ([a-zA-Z0-9-]) + // the mention parameter ID does not include the mention ID (which + // could contain characters like '@' for user IDs) but a one-based + // index of the mentions of that type. + $mentionParameterId = 'mention-' . str_replace('_', '-', $mention['type']) . $mentionTypeCount[$mention['type']]; + + $message = str_replace('@"' . $search . '"', '{' . $mentionParameterId . '}', $message); + if (!str_contains($search, ' ') + && !str_starts_with($search, 'guest/') + && !str_starts_with($search, 'email/') + && !str_starts_with($search, 'group/') + // && !str_starts_with($search, 'federated_group/') + && !str_starts_with($search, 'team/') + // && !str_starts_with($search, 'federated_team/') + && !str_starts_with($search, 'federated_user/')) { + $message = str_replace('@' . $search, '{' . $mentionParameterId . '}', $message); + } + + if ($mention['type'] === 'call') { + $userId = ''; + if ($chatMessage->getParticipant()?->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $userId = $chatMessage->getParticipant()->getAttendee()->getActorId(); + } + + $messageParameters[$mentionParameterId] = [ + 'type' => $mention['type'], + 'id' => $chatMessage->getRoom()->getToken(), + 'name' => $chatMessage->getRoom()->getDisplayName($userId, true), + 'call-type' => $this->getRoomType($chatMessage->getRoom()), + 'icon-url' => $this->avatarService->getAvatarUrl($chatMessage->getRoom()), + 'mention-id' => $search, + ]; + } elseif ($mention['type'] === 'guest') { + try { + $participant = $this->participantService->getParticipantByActor($chatMessage->getRoom(), Attendee::ACTOR_GUESTS, substr($mention['id'], strlen('guest/'))); + $displayName = $participant->getAttendee()->getDisplayName() ?: $this->l->t('Guest'); + } catch (ParticipantNotFoundException $e) { + $displayName = $this->l->t('Guest'); + } + + $messageParameters[$mentionParameterId] = [ + 'type' => $mention['type'], + 'id' => $mention['id'], + 'name' => $displayName, + 'mention-id' => $search, + ]; + } elseif ($mention['type'] === 'email') { + try { + $participant = $this->participantService->getParticipantByActor($chatMessage->getRoom(), Attendee::ACTOR_EMAILS, $mention['id']); + $displayName = $participant->getAttendee()->getDisplayName() ?: $this->l->t('Guest'); + } catch (ParticipantNotFoundException) { + $displayName = $this->l->t('Guest'); + } + + $messageParameters[$mentionParameterId] = [ + 'type' => $mention['type'], + 'id' => $mention['id'], + 'name' => $displayName, + 'mention-id' => $search, + ]; + } elseif ($mention['type'] === 'federated_user') { + try { + $cloudId = $this->cloudIdManager->resolveCloudId($mention['id']); + } catch (\Throwable) { + continue; + } + + try { + $participant = $this->participantService->getParticipantByActor($chatMessage->getRoom(), Attendee::ACTOR_FEDERATED_USERS, $mention['id']); + $displayName = $participant->getAttendee()->getDisplayName() ?: $cloudId->getDisplayId(); + } catch (ParticipantNotFoundException) { + $displayName = $mention['id']; + } + + $messageParameters[$mentionParameterId] = [ + 'type' => 'user', + 'id' => $cloudId->getUser(), + 'name' => $displayName, + 'server' => $cloudId->getRemote(), + 'mention-id' => $search, + ]; + } elseif ($mention['type'] === 'group') { + $group = $this->groupManager->get($mention['id']); + if ($group instanceof IGroup) { + $displayName = $group->getDisplayName(); + } else { + $displayName = $mention['id']; + } + + $messageParameters[$mentionParameterId] = [ + 'type' => 'user-group', + 'id' => $mention['id'], + 'name' => $displayName, + 'mention-id' => $search, + ]; + } elseif ($mention['type'] === 'team') { + $messageParameters[$mentionParameterId] = $this->getCircle($mention['id']); + } else { + try { + $displayName = $this->commentsManager->resolveDisplayName($mention['type'], $mention['id']); + } catch (\OutOfBoundsException $e) { + // There is no registered display name resolver for the mention + // type, so the client decides what to display. + $displayName = ''; + } + + $messageParameters[$mentionParameterId] = [ + 'type' => $mention['type'], + 'id' => $mention['id'], + 'name' => $displayName, + 'mention-id' => $search, + ]; + } + } + + if (str_starts_with($message, '//')) { + $message = substr($message, 1); + } + + $chatMessage->setMessage($message, $messageParameters); + } + + /** + * @param Room $room + * @return string + * @throws \InvalidArgumentException + */ + protected function getRoomType(Room $room): string { + switch ($room->getType()) { + case Room::TYPE_ONE_TO_ONE: + case Room::TYPE_ONE_TO_ONE_FORMER: + case Room::TYPE_NOTE_TO_SELF: + return 'one2one'; + case Room::TYPE_GROUP: + return 'group'; + case Room::TYPE_PUBLIC: + return 'public'; + default: + throw new \InvalidArgumentException('Unknown room type'); + } + } + + protected function getCircle(string $circleId): array { + if (!$this->appManager->isEnabledForUser('circles')) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + if (!isset($this->circleNames[$circleId])) { + $this->loadCircleDetails($circleId); + } + + if (!isset($this->circleNames[$circleId])) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + return [ + 'type' => 'circle', + 'id' => $circleId, + 'name' => $this->circleNames[$circleId], + 'link' => $this->circleLinks[$circleId], + 'mention-id' => 'team/' . $circleId, + ]; + } + + protected function loadCircleDetails(string $circleId): void { + try { + $circlesManager = Server::get(CirclesManager::class); + $circlesManager->startSuperSession(); + $circle = $circlesManager->getCircle($circleId); + + $this->circleNames[$circleId] = $circle->getDisplayName(); + $this->circleLinks[$circleId] = $circle->getUrl(); + } catch (\Exception) { + } finally { + $circlesManager?->stopSession(); + } + } +} diff --git a/lib/Chat/ReactionManager.php b/lib/Chat/ReactionManager.php new file mode 100644 index 0000000..e20a1fe --- /dev/null +++ b/lib/Chat/ReactionManager.php @@ -0,0 +1,210 @@ +getCommentToReact($chat, (string)$messageId); + try { + // Check if the user already reacted with the same reaction + $this->commentsManager->getReactionComment( + (int)$parentMessage->getId(), + $actorType, + $actorId, + $reaction + ); + throw new ReactionAlreadyExistsException(); + } catch (NotFoundException $e) { + } + + /** @var IComment $comment */ + $comment = $this->commentsManager->create( + $actorType, + $actorId, + 'chat', + (string)$chat->getId() + ); + $comment->setParentId($parentMessage->getId()); + $comment->setMessage($reaction); + $comment->setVerb(ChatManager::VERB_REACTION); + $comment->setExpireDate($parentMessage->getExpireDate()); + + $event = new BeforeReactionAddedEvent($chat, $parentMessage, $actorType, $actorId, $actorDisplayName, $reaction); + $this->dispatcher->dispatchTyped($event); + + $this->commentsManager->save($comment); + + $event = new ReactionAddedEvent($chat, $parentMessage, $actorType, $actorId, $actorDisplayName, $reaction, $comment); + $this->dispatcher->dispatchTyped($event); + + $this->notifier->notifyReacted($chat, $parentMessage, $comment); + return $comment; + } + + /** + * Delete reaction + * + * @param Room $chat + * @param string $actorType + * @param string $actorId + * @param integer $messageId + * @param string $reaction + * @return IComment + * @throws NotFoundException + * @throws ReactionNotSupportedException + * @throws ReactionOutOfContextException + */ + public function deleteReactionMessage(Room $chat, string $actorType, string $actorId, string $actorDisplayName, int $messageId, string $reaction): IComment { + // Just to verify that messageId is part of the room and throw error if not. + $parentComment = $this->getCommentToReact($chat, (string)$messageId); + + $event = new BeforeReactionRemovedEvent($chat, $parentComment, $actorType, $actorId, $actorDisplayName, $reaction); + $this->dispatcher->dispatchTyped($event); + + $comment = $this->commentsManager->getReactionComment( + $messageId, + $actorType, + $actorId, + $reaction + ); + $comment->setMessage( + json_encode([ + 'deleted_by_type' => $actorType, + 'deleted_by_id' => $actorId, + 'deleted_on' => $this->timeFactory->getDateTime()->getTimestamp(), + ]) + ); + $comment->setVerb(ChatManager::VERB_REACTION_DELETED); + $this->commentsManager->save($comment); + + $this->chatManager->addSystemMessage( + $chat, + null, + $actorType, + $actorId, + json_encode(['message' => 'reaction_revoked', 'parameters' => ['message' => (int)$comment->getId()]]), + $this->timeFactory->getDateTime(), + false, + null, + $parentComment, + true + ); + + $event = new ReactionRemovedEvent($chat, $parentComment, $actorType, $actorId, $actorDisplayName, $reaction, $comment); + $this->dispatcher->dispatchTyped($event); + + return $comment; + } + + /** + * @return array> + * @throws PreConditionNotMetException + */ + public function retrieveReactionMessages(Room $chat, Participant $participant, int $messageId, ?string $reaction = null): array { + if ($reaction) { + $comments = $this->commentsManager->retrieveAllReactionsWithSpecificReaction($messageId, $reaction); + } else { + $comments = $this->commentsManager->retrieveAllReactions($messageId); + } + + $reactions = []; + foreach ($comments as $comment) { + $message = $this->messageParser->createMessage($chat, $participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + $reactions[$comment->getMessage()][] = [ + 'actorType' => $comment->getActorType(), + 'actorId' => $comment->getActorId(), + 'actorDisplayName' => $message->getActorDisplayName(), + 'timestamp' => $comment->getCreationDateTime()->getTimestamp(), + ]; + } + return $reactions; + } + + /** + * @param Participant $participant + * @param array $messageIds + * @return array[] + * @psalm-return array + */ + public function getReactionsByActorForMessages(Participant $participant, array $messageIds): array { + return $this->commentsManager->retrieveReactionsByActor( + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + $messageIds + ); + } + + /** + * @param Room $chat + * @param string $messageId + * @return IComment + * @throws NotFoundException + * @throws ReactionNotSupportedException + * @throws ReactionOutOfContextException + */ + public function getCommentToReact(Room $chat, string $messageId): IComment { + if (!$this->commentsManager->supportReactions()) { + throw new ReactionNotSupportedException(); + } + $comment = $this->commentsManager->get($messageId); + + if ($comment->getObjectType() !== 'chat' + || $comment->getObjectId() !== (string)$chat->getId() + || !in_array($comment->getVerb(), [ + ChatManager::VERB_MESSAGE, + ChatManager::VERB_OBJECT_SHARED, + ], true)) { + throw new ReactionOutOfContextException(); + } + + return $comment; + } +} diff --git a/lib/Chat/SystemMessage/Listener.php b/lib/Chat/SystemMessage/Listener.php new file mode 100644 index 0000000..0bbc0bb --- /dev/null +++ b/lib/Chat/SystemMessage/Listener.php @@ -0,0 +1,699 @@ + + */ +class Listener implements IEventListener { + + public function __construct( + protected IRequest $request, + protected ChatManager $chatManager, + protected TalkSession $talkSession, + protected ISession $session, + protected IUserSession $userSession, + protected ITimeFactory $timeFactory, + protected Manager $manager, + protected ParticipantService $participantService, + protected MessageParser $messageParser, + protected ThreadService $threadService, + protected IL10N $l, + protected LoggerInterface $logger, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof ARoomEvent && $event->getRoom()->isFederatedConversation()) { + return; + } + + if ($event instanceof AttendeesAddedEvent) { + $this->attendeesAddedEvent($event); + } elseif ($event instanceof AttendeeRemovedEvent) { + $this->sendSystemMessageUserRemoved($event); + } elseif ($event instanceof AttendeesRemovedEvent) { + $this->attendeesRemovedEvent($event); + } elseif ($event instanceof RoomCreatedEvent) { + $this->sendSystemMessageAboutConversationCreated($event); + } elseif ($event instanceof LobbyModifiedEvent) { + $this->sendSystemLobbyMessage($event); + } elseif ($event instanceof RoomModifiedEvent) { + match ($event->getProperty()) { + ARoomModifiedEvent::PROPERTY_AVATAR => $this->avatarChanged($event), + ARoomModifiedEvent::PROPERTY_CALL_RECORDING => $this->setCallRecording($event), + ARoomModifiedEvent::PROPERTY_DESCRIPTION => $this->sendSystemMessageAboutRoomDescriptionChanges($event), + ARoomModifiedEvent::PROPERTY_LISTABLE => $this->sendSystemListableMessage($event), + ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION => $this->afterSetMessageExpiration($event), + ARoomModifiedEvent::PROPERTY_NAME => $this->sendSystemMessageAboutConversationRenamed($event), + ARoomModifiedEvent::PROPERTY_PASSWORD => $this->sendSystemMessageAboutRoomPassword($event), + ARoomModifiedEvent::PROPERTY_READ_ONLY => $this->sendSystemReadOnlyMessage($event), + ARoomModifiedEvent::PROPERTY_TYPE => $this->sendSystemGuestPermissionsMessage($event), + default => null, + }; + } elseif ($event instanceof BeforeParticipantModifiedEvent) { + match ($event->getProperty()) { + AParticipantModifiedEvent::PROPERTY_IN_CALL => $this->sendSystemMessageAboutBeginOfCall($event), + default => null, + }; + } elseif ($event instanceof ParticipantModifiedEvent) { + match ($event->getProperty()) { + AParticipantModifiedEvent::PROPERTY_TYPE => $this->sendSystemMessageAboutPromoteOrDemoteModerator($event), + AParticipantModifiedEvent::PROPERTY_IN_CALL => $this->sendSystemMessageAboutCallLeft($event), + default => null, + }; + } elseif ($event instanceof BeforeShareCreatedEvent) { + $this->setShareExpiration($event); + } elseif ($event instanceof BeforeDuplicateShareSentEvent || $event instanceof ShareCreatedEvent) { + $this->fixMimeTypeOfVoiceMessage($event); + } + } + + protected function sendSystemMessageAboutBeginOfCall(BeforeParticipantModifiedEvent $event): void { + if ($event->getOldValue() !== Participant::FLAG_DISCONNECTED + || $event->getNewValue() === Participant::FLAG_DISCONNECTED) { + return; + } + + if ($this->participantService->hasActiveSessionsInCall($event->getRoom())) { + $this->sendSystemMessage($event->getRoom(), 'call_joined', [], $event->getParticipant()); + } else { + $silent = $event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT) ?? false; + $this->sendSystemMessage($event->getRoom(), 'call_started', [], $event->getParticipant(), silent: $silent); + } + } + + protected function sendSystemMessageAboutCallLeft(ParticipantModifiedEvent $event): void { + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_END_FOR_EVERYONE)) { + // No individual system message if the call is ended for everyone + return; + } + + if ($event->getNewValue() === $event->getOldValue()) { + return; + } + + if ($event->getOldValue() === Participant::FLAG_DISCONNECTED + || $event->getNewValue() !== Participant::FLAG_DISCONNECTED) { + return; + } + + $session = $event->getParticipant()->getSession(); + if (!$session instanceof Session) { + // This happens in case the user was kicked/lobbied + return; + } + + $this->sendSystemMessage($event->getRoom(), 'call_left', [], $event->getParticipant()); + } + + protected function sendSystemMessageAboutConversationCreated(RoomCreatedEvent $event): void { + if ($event->getRoom()->getType() === Room::TYPE_CHANGELOG || $this->isCreatingNoteToSelfAutomatically($event) || $this->isCreatingSample($event)) { + $this->sendSystemMessage($event->getRoom(), 'conversation_created', forceSystemAsActor: true); + } else { + $this->sendSystemMessage($event->getRoom(), 'conversation_created'); + } + } + + protected function sendSystemMessageAboutConversationRenamed(RoomModifiedEvent $event): void { + if ($event->getOldValue() === '' + || $event->getNewValue() === '') { + return; + } + + $this->sendSystemMessage($event->getRoom(), 'conversation_renamed', [ + 'newName' => $event->getNewValue(), + 'oldName' => $event->getOldValue(), + ]); + } + + protected function sendSystemMessageAboutRoomDescriptionChanges(RoomModifiedEvent $event): void { + if ($event->getNewValue() !== '') { + if ($this->isCreatingNoteToSelf($event) || $this->isCreatingSample($event)) { + return; + } + + $this->sendSystemMessage($event->getRoom(), 'description_set', [ + 'newDescription' => $event->getNewValue(), + ]); + } else { + $this->sendSystemMessage($event->getRoom(), 'description_removed'); + } + } + + protected function sendSystemMessageAboutRoomPassword(RoomModifiedEvent $event): void { + if ($event->getNewValue() !== '') { + $this->sendSystemMessage($event->getRoom(), 'password_set'); + } else { + $this->sendSystemMessage($event->getRoom(), 'password_removed'); + } + } + + protected function sendSystemGuestPermissionsMessage(RoomModifiedEvent $event): void { + if ($event->getOldValue() === Room::TYPE_ONE_TO_ONE) { + return; + } + + if ($event->getNewValue() === Room::TYPE_PUBLIC) { + $this->sendSystemMessage($event->getRoom(), 'guests_allowed'); + } elseif ($event->getNewValue() === Room::TYPE_GROUP) { + $this->sendSystemMessage($event->getRoom(), 'guests_disallowed'); + } + } + + protected function sendSystemReadOnlyMessage(RoomModifiedEvent $event): void { + $room = $event->getRoom(); + + if ($room->getType() === Room::TYPE_CHANGELOG) { + return; + } + + if ($event->getNewValue() === Room::READ_ONLY) { + $this->sendSystemMessage($room, 'read_only'); + } elseif ($event->getNewValue() === Room::READ_WRITE) { + $this->sendSystemMessage($room, 'read_only_off'); + } + } + + protected function sendSystemListableMessage(RoomModifiedEvent $event): void { + if ($event->getNewValue() === Room::LISTABLE_NONE) { + $this->sendSystemMessage($event->getRoom(), 'listable_none'); + } elseif ($event->getNewValue() === Room::LISTABLE_USERS) { + $this->sendSystemMessage($event->getRoom(), 'listable_users'); + } elseif ($event->getNewValue() === Room::LISTABLE_ALL) { + $this->sendSystemMessage($event->getRoom(), 'listable_all'); + } + } + + protected function sendSystemLobbyMessage(LobbyModifiedEvent $event): void { + if ($event->getNewValue() === $event->getOldValue()) { + return; + } + + $room = $event->getRoom(); + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + if ($event->getNewValue() === Webinary::LOBBY_NONE) { + $this->sendSystemMessage($room, 'breakout_rooms_started'); + } else { + $this->sendSystemMessage($room, 'breakout_rooms_stopped'); + } + } elseif ($event->isTimerReached()) { + $this->sendSystemMessage($room, 'lobby_timer_reached'); + } elseif ($event->getNewValue() === Webinary::LOBBY_NONE) { + $this->sendSystemMessage($room, 'lobby_none'); + } elseif ($event->getNewValue() === Webinary::LOBBY_NON_MODERATORS) { + $this->sendSystemMessage($room, 'lobby_non_moderators'); + } + } + + protected function addSystemMessageUserAdded(AttendeesAddedEvent $event, Attendee $attendee): void { + $room = $event->getRoom(); + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + return; + } + + if ($room->getType() === Room::TYPE_CHANGELOG) { + return; + } + + $userJoinedFileRoom = $room->getObjectType() === Room::OBJECT_TYPE_FILE && $attendee->getParticipantType() !== Participant::USER_SELF_JOINED; + + // add a message "X joined the conversation", whenever user $userId: + if ( + // - has joined a file room but not through a public link + $userJoinedFileRoom + // - has been added by another user (and not when creating a conversation) + || $this->getUserId() !== $attendee->getActorId() + // - has joined a listable room on their own + || $attendee->getParticipantType() === Participant::USER) { + $this->logger->debug('User "' . $attendee->getActorId() . '" added to room "' . $room->getToken() . '"', ['app' => 'spreed-bfp']); + $comment = $this->sendSystemMessage( + $room, + 'user_added', + ['user' => $attendee->getActorId()], + null, + $event->shouldSkipLastMessageUpdate() + ); + + $event->setLastMessage($comment); + } + } + + protected function sendSystemMessageUserRemoved(AttendeeRemovedEvent $event): void { + $room = $event->getRoom(); + + if ($event->getAttendee()->getActorType() !== Attendee::ACTOR_USERS) { + return; + } + + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + return; + } + + if ($event->getReason() === AAttendeeRemovedEvent::REASON_LEFT + && $event->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + // Self-joined user closes the tab/window or leaves via the menu + return; + } + + $this->logger->debug('User "' . $event->getAttendee()->getActorId() . '" removed from room "' . $room->getToken() . '"', ['app' => 'spreed-bfp']); + $this->sendSystemMessage($room, 'user_removed', ['user' => $event->getAttendee()->getActorId()]); + } + + public function sendSystemMessageAboutPromoteOrDemoteModerator(ParticipantModifiedEvent $event): void { + $room = $event->getRoom(); + $attendee = $event->getParticipant()->getAttendee(); + + if (!in_array($attendee->getActorType(), [ + Attendee::ACTOR_USERS, + Attendee::ACTOR_EMAILS, + Attendee::ACTOR_GUESTS, + ], true)) { + return; + } + + if ($event->getNewValue() === Participant::MODERATOR) { + $this->sendSystemMessage($room, 'moderator_promoted', ['user' => $attendee->getActorId()]); + } elseif ($event->getNewValue() === Participant::USER) { + if ($event->getOldValue() === Participant::USER_SELF_JOINED) { + $this->sendSystemMessage($room, 'user_added', ['user' => $attendee->getActorId()]); + } else { + $this->sendSystemMessage($room, 'moderator_demoted', ['user' => $attendee->getActorId()]); + } + } elseif ($event->getNewValue() === Participant::GUEST_MODERATOR) { + $this->sendSystemMessage($room, 'guest_moderator_promoted', ['type' => $attendee->getActorType(), 'id' => $attendee->getActorId()]); + } elseif ($event->getNewValue() === Participant::GUEST) { + $this->sendSystemMessage($room, 'guest_moderator_demoted', ['type' => $attendee->getActorType(), 'id' => $attendee->getActorId()]); + } + } + + protected function setShareExpiration(BeforeShareCreatedEvent $event): void { + $share = $event->getShare(); + + if ($share->getShareType() !== IShare::TYPE_ROOM) { + return; + } + + $room = $this->manager->getRoomByToken($share->getSharedWith()); + + $messageExpiration = $room->getMessageExpiration(); + if (!$messageExpiration) { + return; + } + + $dateTime = $this->timeFactory->getDateTime(); + $dateTime->add(DateInterval::createFromDateString($messageExpiration . ' seconds')); + $share->setExpirationDate($dateTime); + } + + protected function fixMimeTypeOfVoiceMessage(ShareCreatedEvent|BeforeDuplicateShareSentEvent $event): void { + $share = $event->getShare(); + + if ($share->getShareType() !== IShare::TYPE_ROOM) { + return; + } + + if (strtolower($this->request->getParam('_route')) === 'ocs.spreed.recording.sharetochat') { + return; + } + $room = $this->manager->getRoomByToken($share->getSharedWith()); + $this->participantService->ensureOneToOneRoomIsFilled($room); + + $metaData = $this->request->getParam('talkMetaData') ?? ''; + $metaData = json_decode($metaData, true); + $metaData = is_array($metaData) ? $metaData : []; + + if (isset($metaData['messageType']) && $metaData['messageType'] === ChatManager::VERB_VOICE_MESSAGE) { + if ($share->getNode()->getMimeType() !== 'audio/mpeg' + && $share->getNode()->getMimeType() !== 'audio/wav') { + unset($metaData['messageType']); + } + } + $metaData['mimeType'] = $share->getNode()->getMimeType(); + + if (isset($metaData['caption'])) { + if (is_string($metaData['caption']) && trim($metaData['caption']) !== '') { + $metaData['caption'] = trim($metaData['caption']); + } else { + unset($metaData['caption']); + } + } + + if (isset($metaData[Message::METADATA_SILENT])) { + $silent = (bool)$metaData[Message::METADATA_SILENT]; + } else { + $silent = false; + } + + $replyTo = null; + if (isset($metaData['replyTo'])) { + $replyTo = (int)$metaData['replyTo']; + unset($metaData['replyTo']); + } + $threadId = null; + if (isset($metaData['threadId'])) { + $threadId = (int)$metaData['threadId']; + unset($metaData['threadId']); + } + + $threadTitle = ''; + if (isset($metaData['threadTitle'])) { + if (is_string($metaData['threadTitle']) && trim($metaData['threadTitle']) !== '') { + $threadTitle = trim($metaData['threadTitle']); + } + unset($metaData['threadTitle']); + } + + $comment = $this->sendSystemMessage( + $room, + 'file_shared', + ['share' => $share->getId(), 'metaData' => $metaData], + silent: $silent, + replyTo: $replyTo, + threadId: $threadId, + ); + $messageId = (int)$comment->getId(); + + if ($threadTitle !== '' && $comment->getTopmostParentId() === '0') { + $thread = $this->threadService->createThread($room, $messageId, $threadTitle); + try { + // Add to subscribed threads list + $participant = $this->participantService->getParticipant($room, $this->getUserId()); + $this->threadService->setNotificationLevel($participant->getAttendee(), $thread->getId(), Participant::NOTIFY_DEFAULT); + } catch (ParticipantNotFoundException) { + } + + $this->sendSystemMessage( + $room, + 'thread_created', + ['thread' => $messageId, 'title' => $thread->getName()], + shouldSkipLastMessageUpdate: true, + silent: true, + parent: $comment, + ); + } + } + + protected function attendeesAddedEvent(AttendeesAddedEvent $event): void { + foreach ($event->getAttendees() as $attendee) { + $this->logger->debug($attendee->getActorType() . ' "' . $attendee->getActorId() . '" added to room "' . $event->getRoom()->getToken() . '"', ['app' => 'spreed-bfp']); + if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { + $this->sendSystemMessage($event->getRoom(), 'group_added', ['group' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + $this->sendSystemMessage($event->getRoom(), 'circle_added', ['circle' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $this->sendSystemMessage($event->getRoom(), 'federated_user_added', ['federated_user' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_PHONES) { + $this->sendSystemMessage($event->getRoom(), 'phone_added', ['phone' => $attendee->getActorId(), 'name' => $attendee->getDisplayName()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $this->addSystemMessageUserAdded($event, $attendee); + } + } + } + + protected function attendeesRemovedEvent(AttendeesRemovedEvent $event): void { + foreach ($event->getAttendees() as $attendee) { + $this->logger->debug($attendee->getActorType() . ' "' . $attendee->getActorId() . '" removed from room "' . $event->getRoom()->getToken() . '"', ['app' => 'spreed-bfp']); + if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { + $this->sendSystemMessage($event->getRoom(), 'group_removed', ['group' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + $this->sendSystemMessage($event->getRoom(), 'circle_removed', ['circle' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $this->sendSystemMessage($event->getRoom(), 'federated_user_removed', ['federated_user' => $attendee->getActorId()]); + } elseif ($attendee->getActorType() === Attendee::ACTOR_PHONES) { + $this->sendSystemMessage($event->getRoom(), 'phone_removed', ['phone' => $attendee->getActorId(), 'name' => $attendee->getDisplayName()]); + } + } + } + + protected function sendSystemMessage( + Room $room, + string $message, + array $parameters = [], + ?Participant $participant = null, + bool $shouldSkipLastMessageUpdate = false, + bool $silent = false, + bool $forceSystemAsActor = false, + ?int $replyTo = null, + ?IComment $parent = null, + ?int $threadId = null, + ): IComment { + if ($participant instanceof Participant) { + $actorType = $participant->getAttendee()->getActorType(); + $actorId = $participant->getAttendee()->getActorId(); + } elseif ($forceSystemAsActor) { + $actorType = Attendee::ACTOR_GUESTS; + $actorId = Attendee::ACTOR_ID_SYSTEM; + } else { + $user = $this->userSession->getUser(); + if ($user instanceof IUser) { + $actorType = Attendee::ACTOR_USERS; + $actorId = $user->getUID(); + } elseif (\OC::$CLI || $this->session->exists('talk-overwrite-actor-cli')) { + $actorType = Attendee::ACTOR_GUESTS; + $actorId = Attendee::ACTOR_ID_CLI; + } elseif ($this->session->exists('talk-overwrite-actor-type')) { + $actorType = $this->session->get('talk-overwrite-actor-type'); + $actorId = $this->session->get('talk-overwrite-actor-id'); + } elseif ($this->session->exists('talk-overwrite-actor-id')) { + $actorType = Attendee::ACTOR_USERS; + $actorId = $this->session->get('talk-overwrite-actor-id'); + } else { + $actorType = Attendee::ACTOR_GUESTS; + $sessionId = $this->talkSession->getSessionForRoom($room->getToken()); + $actorId = $sessionId ? sha1($sessionId) : 'failed-to-get-session'; + } + } + + // Little hack to get the reference id from the share request into + // the system message left for the share in the chat. + $referenceId = $this->request->getParam('referenceId', null); + if ($referenceId !== null) { + $referenceId = (string)$referenceId; + } + + if ($parent === null && $replyTo !== null) { + try { + $parentComment = $this->chatManager->getParentComment($room, (string)$replyTo); + $parentMessage = $this->messageParser->createMessage($room, $participant, $parentComment, $this->l); + $this->messageParser->parseMessage($parentMessage, true); + if ($parentMessage->isReplyable()) { + $parent = $parentComment; + } + } catch (NotFoundException) { + } + } elseif ($parent === null && $threadId !== null) { + if (!$this->threadService->validateThread($room->getId(), $threadId)) { + $threadId = null; + } + } + + return $this->chatManager->addSystemMessage( + $room, $participant, $actorType, $actorId, + json_encode(['message' => $message, 'parameters' => $parameters]), + $this->timeFactory->getDateTime(), + $message === 'file_shared', + $referenceId, + $parent, + $shouldSkipLastMessageUpdate, + $silent, + $threadId ?? 0, + ); + } + + protected function getUserId(): ?string { + $user = $this->userSession->getUser(); + return $user instanceof IUser ? $user->getUID() : null; + } + + protected function afterSetMessageExpiration(RoomModifiedEvent $event): void { + $seconds = $event->getNewValue(); + + if ($seconds > 0) { + $message = 'message_expiration_enabled'; + } else { + $message = 'message_expiration_disabled'; + } + + $this->sendSystemMessage( + $event->getRoom(), + $message, + [ + 'seconds' => $seconds, + ] + ); + } + + protected function setCallRecording(RoomModifiedEvent $event): void { + $recordingHasStarted = in_array($event->getOldValue(), [Room::RECORDING_NONE, Room::RECORDING_VIDEO_STARTING, Room::RECORDING_AUDIO_STARTING, Room::RECORDING_FAILED], true) + && in_array($event->getNewValue(), [Room::RECORDING_VIDEO, Room::RECORDING_AUDIO], true); + $recordingHasStopped = in_array($event->getOldValue(), [Room::RECORDING_VIDEO, Room::RECORDING_AUDIO], true) + && $event->getNewValue() === Room::RECORDING_NONE; + $recordingHasFailed = in_array($event->getOldValue(), [Room::RECORDING_VIDEO, Room::RECORDING_AUDIO], true) + && $event->getNewValue() === Room::RECORDING_FAILED; + + if (!$recordingHasStarted && !$recordingHasStopped && !$recordingHasFailed) { + return; + } + + $actor = $event->getActor(); + if ($recordingHasStopped && $actor === null) { + // No actor means the recording was stopped by the end of the call. + // So we are not generating a system message + return; + } + + $prefix = $this->getCallRecordingPrefix($event); + $suffix = $this->getCallRecordingSuffix($event); + $systemMessage = $prefix . 'recording_' . $suffix; + + $this->sendSystemMessage($event->getRoom(), $systemMessage, [], $actor); + } + + protected function getCallRecordingSuffix(RoomModifiedEvent $event): string { + $newStatus = $event->getNewValue(); + $startStatus = [ + Room::RECORDING_VIDEO, + Room::RECORDING_AUDIO, + ]; + if (in_array($newStatus, $startStatus, true)) { + return 'started'; + } + if ($newStatus === Room::RECORDING_FAILED) { + return 'failed'; + } + return 'stopped'; + } + + protected function getCallRecordingPrefix(RoomModifiedEvent $event): string { + $newValue = $event->getNewValue(); + $oldValue = $event->getOldValue(); + $isAudioStatus = $newValue === Room::RECORDING_AUDIO + || ($oldValue === Room::RECORDING_AUDIO && $newValue !== Room::RECORDING_FAILED); + return $isAudioStatus ? 'audio_' : ''; + } + + protected function avatarChanged(RoomModifiedEvent $event): void { + if ($event->getNewValue()) { + if ($this->isCreatingNoteToSelf($event) || $this->isCreatingSample($event)) { + return; + } + + $message = 'avatar_set'; + } else { + $message = 'avatar_removed'; + } + + $this->sendSystemMessage($event->getRoom(), $message); + } + + protected function isCreatingNoteToSelf(RoomModifiedEvent $event): bool { + if ($event->getRoom()->getType() !== Room::TYPE_NOTE_TO_SELF) { + return false; + } + + $exception = new \Exception(); + $trace = $exception->getTrace(); + + foreach ($trace as $step) { + if (isset($step['class']) && $step['class'] === NoteToSelfService::class + && isset($step['function']) && $step['function'] === 'initialCreateNoteToSelfForUser') { + return true; + } + if (isset($step['class']) && $step['class'] === NoteToSelfService::class + && isset($step['function']) && $step['function'] === 'ensureNoteToSelfExistsForUser') { + return true; + } + } + + return false; + } + + protected function isCreatingSample(ARoomEvent $event): bool { + if ($event->getRoom()->getType() !== Room::TYPE_GROUP) { + return false; + } + + $exception = new \Exception(); + $trace = $exception->getTrace(); + + foreach ($trace as $step) { + if (isset($step['class']) && $step['class'] === SampleConversationsService::class + && isset($step['function']) && $step['function'] === 'initialCreateSamples') { + return true; + } + } + + return false; + } + + protected function isCreatingNoteToSelfAutomatically(RoomCreatedEvent $event): bool { + if ($event->getRoom()->getType() !== Room::TYPE_NOTE_TO_SELF) { + return false; + } + + $exception = new \Exception(); + $trace = $exception->getTrace(); + + foreach ($trace as $step) { + if (isset($step['class']) && $step['class'] === NoteToSelfService::class + && isset($step['function']) && $step['function'] === 'initialCreateNoteToSelfForUser') { + return true; + } + } + + return false; + } +} diff --git a/lib/Collaboration/Collaborators/Listener.php b/lib/Collaboration/Collaborators/Listener.php new file mode 100644 index 0000000..6fa2bb5 --- /dev/null +++ b/lib/Collaboration/Collaborators/Listener.php @@ -0,0 +1,188 @@ + + */ +class Listener implements IEventListener { + /** @var string[] */ + protected array $allowedGroupIds = []; + protected string $roomToken; + protected ?Room $room = null; + + public function __construct( + protected Manager $manager, + protected IUserManager $userManager, + protected ParticipantService $participantService, + protected Config $config, + protected TalkSession $talkSession, + protected ?string $userId, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof AutoCompleteFilterEvent) { + return; + } + + if ($event->getItemType() !== 'call') { + return; + } + + $event->setResults($this->filterUsersAndGroupsWithoutTalk($event->getResults())); + + $event->setResults($this->filterBridgeBot($event->getResults())); + if ($event->getItemId() !== 'new') { + $event->setResults($this->filterExistingParticipants($event->getItemId(), $event->getResults())); + } + } + + protected function filterUsersAndGroupsWithoutTalk(array $results): array { + $this->allowedGroupIds = $this->config->getAllowedTalkGroupIds(); + if (empty($this->allowedGroupIds)) { + return $results; + } + + if (!empty($results['groups'])) { + $results['groups'] = array_filter($results['groups'], [$this, 'filterBlockedGroupResult']); + } + if (!empty($results['exact']['groups'])) { + $results['exact']['groups'] = array_filter($results['exact']['groups'], [$this, 'filterBlockedGroupResult']); + } + + if (!empty($results['users'])) { + $results['users'] = array_filter($results['users'], [$this, 'filterBlockedUserResult']); + } + if (!empty($results['exact']['users'])) { + $results['exact']['users'] = array_filter($results['exact']['users'], [$this, 'filterBlockedUserResult']); + } + + return $results; + } + + protected function filterBlockedUserResult(array $result): bool { + $user = $this->userManager->get($result['value']['shareWith']); + return $user instanceof IUser && !$this->config->isDisabledForUser($user); + } + + protected function filterBlockedGroupResult(array $result): bool { + return \in_array($result['value']['shareWith'], $this->allowedGroupIds, true); + } + + protected function filterBridgeBot(array $results): array { + if (!empty($results['users'])) { + $results['users'] = array_filter($results['users'], [$this, 'filterBridgeBotUserResult']); + } + if (!empty($results['exact']['users'])) { + $results['exact']['users'] = array_filter($results['exact']['users'], [$this, 'filterBridgeBotUserResult']); + } + + return $results; + } + + protected function filterExistingParticipants(string $token, array $results): array { + $sessionId = $this->talkSession->getSessionForRoom($token); + try { + $this->room = $this->manager->getRoomForUserByToken($token, $this->userId); + if ($this->userId !== null) { + $this->participantService->getParticipant($this->room, $this->userId, $sessionId); + } else { + $this->participantService->getParticipantBySession($this->room, $sessionId); + } + } catch (RoomNotFoundException|ParticipantNotFoundException) { + return $results; + } + + if ($this->room->isFederatedConversation()) { + return $results; + } + + if (!empty($results['groups'])) { + $results['groups'] = array_filter($results['groups'], [$this, 'filterParticipantGroupResult']); + } + if (!empty($results['exact']['groups'])) { + $results['exact']['groups'] = array_filter($results['exact']['groups'], [$this, 'filterParticipantGroupResult']); + } + + if (!empty($results['users'])) { + $results['users'] = array_filter($results['users'], [$this, 'filterParticipantUserResult']); + } + if (!empty($results['exact']['users'])) { + $results['exact']['users'] = array_filter($results['exact']['users'], [$this, 'filterParticipantUserResult']); + } + + if (!empty($results['circles'])) { + $results['circles'] = array_filter($results['circles'], [$this, 'filterParticipantTeamResult']); + } + if (!empty($results['exact']['circles'])) { + $results['exact']['circles'] = array_filter($results['exact']['circles'], [$this, 'filterParticipantTeamResult']); + } + + return $results; + } + + protected function filterBridgeBotUserResult(array $result): bool { + return $result['value']['shareWith'] !== MatterbridgeManager::BRIDGE_BOT_USERID; + } + + protected function filterParticipantUserResult(array $result): bool { + $userId = $result['value']['shareWith']; + + try { + $participant = $this->participantService->getParticipant($this->room, $userId, false); + if ($participant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + // do list self-joined users so they can be added as permanent participants by moderators + return true; + } + return false; + } catch (ParticipantNotFoundException $e) { + return true; + } + } + + protected function filterParticipantGroupResult(array $result): bool { + $groupId = $result['value']['shareWith']; + + try { + $this->participantService->getParticipantByActor($this->room, Attendee::ACTOR_GROUPS, $groupId); + return false; + } catch (ParticipantNotFoundException $e) { + return true; + } + } + + protected function filterParticipantTeamResult(array $result): bool { + $circleId = $result['value']['shareWith']; + + try { + $this->participantService->getParticipantByActor($this->room, Attendee::ACTOR_CIRCLES, $circleId); + return false; + } catch (ParticipantNotFoundException $e) { + return true; + } + } +} diff --git a/lib/Collaboration/Collaborators/RoomPlugin.php b/lib/Collaboration/Collaborators/RoomPlugin.php new file mode 100644 index 0000000..1099f85 --- /dev/null +++ b/lib/Collaboration/Collaborators/RoomPlugin.php @@ -0,0 +1,88 @@ +userSession->getUser()->getUID(); + + $result = ['wide' => [], 'exact' => []]; + + $rooms = $this->manager->getRoomsForUser($userId); + foreach ($rooms as $room) { + if ($room->getReadOnly() === Room::READ_ONLY) { + // Can not add new shares to read-only rooms + continue; + } + + if ($room->isFederatedConversation()) { + continue; + } + + $participant = $this->participantService->getParticipant($room, $userId, false); + if (!($participant->getPermissions() & Attendee::PERMISSIONS_CHAT)) { + // No chat permissions is like read-only + continue; + } + + if (mb_stripos($room->getDisplayName($userId), $search) !== false) { + $item = $this->roomToSearchResultItem($room, $userId); + + if (mb_strtolower($item['label']) === mb_strtolower($search)) { + $result['exact'][] = $item; + } else { + $result['wide'][] = $item; + } + } + } + + $type = new SearchResultType('rooms'); + $searchResult->addResultSet($type, $result['wide'], $result['exact']); + + return false; + } + + private function roomToSearchResultItem(Room $room, string $userId): array { + return + [ + 'label' => $room->getDisplayName($userId), + 'value' => [ + 'shareType' => IShare::TYPE_ROOM, + 'shareWith' => $room->getToken() + ] + ]; + } +} diff --git a/lib/Collaboration/Reference/ReferenceInvalidationListener.php b/lib/Collaboration/Reference/ReferenceInvalidationListener.php new file mode 100644 index 0000000..0e211cf --- /dev/null +++ b/lib/Collaboration/Reference/ReferenceInvalidationListener.php @@ -0,0 +1,40 @@ + + */ +class ReferenceInvalidationListener implements IEventListener { + + public function __construct( + protected IReferenceManager $referenceManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof AttendeesAddedEvent + || $event instanceof AttendeesRemovedEvent + || $event instanceof LobbyModifiedEvent + || $event instanceof RoomDeletedEvent + || $event instanceof RoomModifiedEvent) { + $this->referenceManager->invalidateCache($event->getRoom()->getToken()); + } + } +} diff --git a/lib/Collaboration/Reference/TalkReferenceProvider.php b/lib/Collaboration/Reference/TalkReferenceProvider.php new file mode 100644 index 0000000..db7dc46 --- /dev/null +++ b/lib/Collaboration/Reference/TalkReferenceProvider.php @@ -0,0 +1,321 @@ +getTalkAppLinkToken($referenceText) !== null; + } + + /** + * @param string $referenceText + * @return array|null + * @psalm-return ReferenceMatch|null + */ + protected function getTalkAppLinkToken(string $referenceText): ?array { + $indexPhpUrl = $this->urlGenerator->getAbsoluteURL('/index.php/call/'); + $rewriteUrl = $this->urlGenerator->getAbsoluteURL('/call/'); + + if (str_starts_with($referenceText, $indexPhpUrl)) { + $urlOfInterest = substr($referenceText, strlen($indexPhpUrl)); + } elseif (str_starts_with($referenceText, $rewriteUrl)) { + $urlOfInterest = substr($referenceText, strlen($rewriteUrl)); + } else { + return null; + } + + $hashPosition = strpos($urlOfInterest, '#'); + $queryPosition = strpos($urlOfInterest, '?'); + + if ($hashPosition === false && $queryPosition === false) { + return [ + 'token' => $urlOfInterest, + 'message' => null, + ]; + } + + if ($hashPosition !== false && $queryPosition !== false) { + $cutPosition = min($hashPosition, $queryPosition); + } elseif ($hashPosition !== false) { + $cutPosition = $hashPosition; + } else { + $cutPosition = $queryPosition; + } + + $token = substr($urlOfInterest, 0, $cutPosition); + $messageId = null; + if ($hashPosition !== false) { + $afterHash = substr($urlOfInterest, $hashPosition + 1); + if (preg_match('/^message_(\d+)$/', $afterHash, $matches)) { + $messageId = (int)$matches[1]; + } + } + + return [ + 'token' => $token, + 'message' => $messageId, + ]; + } + + /** + * @inheritDoc + */ + #[\Override] + public function resolveReference(string $referenceText): ?IReference { + if ($this->matchReference($referenceText)) { + $reference = new Reference($referenceText); + try { + $this->fetchReference($reference); + } catch (RoomNotFoundException|ParticipantNotFoundException $e) { + $reference->setRichObject('call', null); + $reference->setAccessible(false); + } + return $reference; + } + + return null; + } + + /** + * @throws RoomNotFoundException + */ + protected function fetchReference(Reference $reference): void { + if ($this->userId === null) { + throw new RoomNotFoundException(); + } + + $referenceMatch = $this->getTalkAppLinkToken($reference->getId()); + if ($referenceMatch === null) { + throw new RoomNotFoundException(); + } + + $room = $this->roomManager->getRoomForUserByToken($referenceMatch['token'], $this->userId); + try { + $participant = $this->participantService->getParticipant($room, $this->userId); + } catch (ParticipantNotFoundException $e) { + $participant = null; + } + + /** + * Default handling: + * Title is the conversation name + * Description the conversation description + */ + $roomName = $room->getDisplayName($this->userId); + $title = $roomName; + $description = ''; + $messageId = null; + + if ($participant instanceof Participant + || $this->roomManager->isRoomListableByUser($room, $this->userId)) { + $description = $room->getDescription(); + } + + + /** + * If linking to a comment and the user is already a participant + * Title is "Message of {user} in {conversation}" + * Description is the plain text chat message + */ + if ($participant && !empty($referenceMatch['message'])) { + $messageId = (string)$referenceMatch['message']; + if (!$room->isFederatedConversation()) { + try { + $comment = $this->chatManager->getComment($room, $messageId); + } catch (NotFoundException) { + throw new RoomNotFoundException(); + } + $message = $this->messageParser->createMessage($room, $participant, $comment, $this->l); + $this->messageParser->parseMessage($message, true); + } else { + try { + $proxy = $this->proxyCacheMessageMapper->findById($room, (int)$messageId); + if ($proxy->getLocalToken() !== $room->getToken()) { + throw new RoomNotFoundException(); + } + } catch (DoesNotExistException) { + throw new RoomNotFoundException(); + } + $message = $this->messageParser->createMessageFromProxyCache($room, $participant, $proxy, $this->l); + } + + $placeholders = $replacements = []; + foreach ($message->getMessageParameters() as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + if ($parameter['type'] === 'user' || $parameter['type'] === 'guest') { + $replacements[] = '@' . $parameter['name']; + } else { + $replacements[] = $parameter['name']; + } + } + $description = str_replace($placeholders, $replacements, $message->getMessage()); + + $titleLine = $this->l->t('Message of {user} in {conversation}'); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $titleLine = $this->l->t('Message of {user}'); + } + + $displayName = $message->getActorDisplayName(); + if (in_array($message->getActorType(), [Attendee::ACTOR_GUESTS, Attendee::ACTOR_EMAILS], true)) { + if ($displayName === '') { + $displayName = $this->l->t('Guest'); + } else { + $displayName = $this->l->t('%s (guest)', $displayName); + } + } elseif ($displayName === '') { + $titleLine = $this->l->t('Message of a deleted user in {conversation}'); + } + + $title = str_replace( + ['{user}', '{conversation}'], + [$displayName, $title], + $titleLine + ); + } + + $reference->setTitle($title); + $reference->setDescription($description); + $reference->setUrl($this->urlGenerator->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()])); + $reference->setImageUrl($this->avatarService->getAvatarUrl($room)); + + $referenceData = [ + 'id' => $room->getToken(), + 'name' => $roomName, + 'link' => $reference->getUrl(), + 'call-type' => $this->getRoomType($room), + ]; + + if ($messageId) { + $referenceData['message-id'] = $messageId; + } + + $reference->setRichObject('call', $referenceData); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getCachePrefix(string $referenceId): string { + $referenceMatch = $this->getTalkAppLinkToken($referenceId); + if ($referenceMatch === null) { + return ''; + } + + return $referenceMatch['token']; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getCacheKey(string $referenceId): ?string { + $referenceMatch = $this->getTalkAppLinkToken($referenceId); + if ($referenceMatch === null) { + return ''; + } + + return ($this->userId ?? '') . '#' . ($referenceMatch['message'] ?? 0); + } + + protected function getRoomType(Room $room): string { + switch ($room->getType()) { + case Room::TYPE_ONE_TO_ONE: + case Room::TYPE_ONE_TO_ONE_FORMER: + return 'one2one'; + case Room::TYPE_GROUP: + return 'group'; + case Room::TYPE_PUBLIC: + return 'public'; + default: + return 'unknown'; + } + } + + /** + * @inheritDoc + */ + #[\Override] + public function getId(): string { + return Application::APP_ID; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getTitle(): string { + return $this->l->t('Talk conversations'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getOrder(): int { + return 0; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getIconUrl(): string { + return $this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg'); + } + + #[\Override] + public function getSupportedSearchProviderIds(): array { + if ($this->userId === null) { + return []; + } + return ['talk-conversations']; + } +} diff --git a/lib/Collaboration/Resources/ConversationProvider.php b/lib/Collaboration/Resources/ConversationProvider.php new file mode 100644 index 0000000..ee1e040 --- /dev/null +++ b/lib/Collaboration/Resources/ConversationProvider.php @@ -0,0 +1,111 @@ +userSession->getUser(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + $room = $this->manager->getRoomByToken($resource->getId(), $userId); + + $iconURL = $this->avatarService->getAvatarUrl($room); + /** + * Disabled for now, because it would show a square avatar + * if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + * $iconURL = $this->urlGenerator->linkToRouteAbsolute('core.avatar.getAvatar', ['userId' => 'admin', 'size' => 32]); + * } + */ + + return [ + 'type' => 'room', + 'id' => $resource->getId(), + 'name' => $room->getDisplayName($userId), + 'call-type' => $this->getRoomType($room), + 'iconUrl' => $iconURL, + 'link' => $this->urlGenerator->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]) + ]; + } catch (RoomNotFoundException $e) { + throw new ResourceException('Conversation not found'); + } + } + + #[\Override] + public function canAccessResource(IResource $resource, ?IUser $user = null): bool { + $userId = $user instanceof IUser ? $user->getUID() : null; + if ($userId === null) { + throw new ResourceException('Guests are not supported at the moment'); + } + + try { + $room = $this->manager->getRoomForUserByToken( + $resource->getId(), + $userId + ); + + // Logged in users need to have a regular participant, + // before they can do anything with the room. + $participant = $this->participantService->getParticipant($room, $userId, false); + return $participant->getAttendee()->getParticipantType() !== Participant::USER_SELF_JOINED; + } catch (RoomNotFoundException $e) { + throw new ResourceException('Conversation not found'); + } catch (ParticipantNotFoundException $e) { + throw new ResourceException('Participant not found'); + } + } + + #[\Override] + public function getType(): string { + return 'room'; + } + + /** + * @param Room $room + * @return string + * @throws \InvalidArgumentException + */ + protected function getRoomType(Room $room): string { + switch ($room->getType()) { + case Room::TYPE_ONE_TO_ONE: + case Room::TYPE_ONE_TO_ONE_FORMER: + return 'one2one'; + case Room::TYPE_GROUP: + return 'group'; + case Room::TYPE_PUBLIC: + return 'public'; + default: + throw new \InvalidArgumentException('Unknown room type'); + } + } +} diff --git a/lib/Collaboration/Resources/Listener.php b/lib/Collaboration/Resources/Listener.php new file mode 100644 index 0000000..7a4046c --- /dev/null +++ b/lib/Collaboration/Resources/Listener.php @@ -0,0 +1,47 @@ + + */ +class Listener implements IEventListener { + public function __construct( + protected IManager $resourceManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof AttendeesAddedEvent + || $event instanceof AttendeesRemovedEvent + || $event instanceof RoomDeletedEvent + || $event instanceof EmailInvitationSentEvent + || ($event instanceof RoomModifiedEvent + && $event->getProperty() === ARoomModifiedEvent::PROPERTY_TYPE)) { + try { + $resource = $this->resourceManager->getResourceForUser('room', $event->getRoom()->getToken(), null); + } catch (ResourceException) { + return; + } + $this->resourceManager->invalidateAccessCacheForResource($resource); + } + } +} diff --git a/lib/Command/Bot/Create.php b/lib/Command/Bot/Create.php new file mode 100644 index 0000000..f77ef59 --- /dev/null +++ b/lib/Command/Bot/Create.php @@ -0,0 +1,116 @@ +setName('talk:bot:create') + ->setDescription('Creates a new bot on the server with \'response\' feature only.') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'The name under which the messages will be posted (min. 1 char, max. 64 chars)' + ) + ->addArgument( + 'description', + InputArgument::OPTIONAL, + 'Optional description shown in the admin settings (max. 4000 chars)' + ) + ->addOption( + 'secret', + 's', + InputOption::VALUE_REQUIRED, + 'Secret used to validate API calls (min. 40 chars, max. 128 chars). When none is provided, a random 64 chars string is generated and output.' + ) + ->addOption( + 'no-setup', + null, + InputOption::VALUE_NONE, + 'Prevent moderators from setting up the bot in a conversation' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $name = $input->getArgument('name'); + $description = $input->getArgument('description') ?? ''; + $noSetup = $input->getOption('no-setup'); + $featureFlags = Bot::FEATURE_RESPONSE; + + $secret = $input->getOption('secret') ?? $this->secureRandom->generate(64); + $url = Bot::URL_RESPONSE_ONLY_PREFIX . bin2hex(random_bytes(16)); + + try { + $this->botService->validateBotParameters($name, $secret, $url, $description); + } catch (\InvalidArgumentException $e) { + $output->writeln('' . $e->getMessage() . ''); + return 1; + } + + try { + $this->botServerMapper->findByUrl($url); + $output->writeln('Bot with the same URL is already registered'); + return 2; + } catch (DoesNotExistException) { + } + + $bot = new BotServer(); + $bot->setName($name); + $bot->setSecret($secret); + $bot->setUrl($url); + $bot->setUrlHash(sha1($url)); + $bot->setDescription($description); + $bot->setState($noSetup ? Bot::STATE_NO_SETUP : Bot::STATE_ENABLED); + $bot->setFeatures($featureFlags); + try { + $botEntity = $this->botServerMapper->insert($bot); + } catch (\Exception $e) { + if ($e instanceof Exception && $e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $output->writeln('Bot with the same secret is already registered'); + return 3; + } else { + $output->writeln('' . get_class($e) . ': ' . $e->getMessage() . ''); + return 1; + } + } + + $output->writeln('Bot installed'); + $output->writeln('ID: ' . $botEntity->getId()); + + if ($input->getOption('secret') === null) { + $output->writeln('Secret: ' . $secret); + } + + return 0; + } +} diff --git a/lib/Command/Bot/Install.php b/lib/Command/Bot/Install.php new file mode 100644 index 0000000..f9acace --- /dev/null +++ b/lib/Command/Bot/Install.php @@ -0,0 +1,141 @@ +setName('talk:bot:install') + ->setDescription('Install a new bot on the server') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'The name under which the messages will be posted (min. 1 char, max. 64 chars)' + ) + ->addArgument( + 'secret', + InputArgument::REQUIRED, + 'Secret used to validate API calls (min. 40 chars, max. 128 chars)' + ) + ->addArgument( + 'url', + InputArgument::REQUIRED, + 'Webhook endpoint to post messages to (max. 4000 chars)' + ) + ->addArgument( + 'description', + InputArgument::OPTIONAL, + 'Optional description shown in the admin settings (max. 4000 chars)' + ) + ->addOption( + 'no-setup', + null, + InputOption::VALUE_NONE, + 'Prevent moderators from setting up the bot in a conversation' + ) + ->addOption( + 'feature', + 'f', + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Specify the list of features for the bot' . "\n" + . ' - webhook: The bot receives posted chat messages as webhooks' . "\n" + . ' - response: The bot can post messages and reactions as a response' . "\n" + . ' - event: The bot reads posted messages from local events' . "\n" + . ' - reaction: The bot is notified about adding and removing of reactions' . "\n" + . ' - none: When all features should be disabled for the bot' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $name = $input->getArgument('name'); + $secret = $input->getArgument('secret'); + $url = $input->getArgument('url'); + $description = $input->getArgument('description') ?? ''; + $noSetup = $input->getOption('no-setup'); + + if (!empty($input->getOption('feature'))) { + $featureFlags = Bot::featureLabelsToFlags($input->getOption('feature')); + if (str_starts_with($url, Bot::URL_APP_PREFIX)) { + $featureFlags &= ~Bot::FEATURE_WEBHOOK; + } + } elseif (str_starts_with($url, Bot::URL_APP_PREFIX)) { + $featureFlags = Bot::FEATURE_EVENT; + } else { + $featureFlags = Bot::FEATURE_WEBHOOK + Bot::FEATURE_RESPONSE; + } + + if ($featureFlags & Bot::FEATURE_EVENT + && ($featureFlags & Bot::FEATURE_WEBHOOK + || $featureFlags & Bot::FEATURE_RESPONSE + || $featureFlags & Bot::FEATURE_REACTION)) { + $output->writeln('Bots with feature "event" can not support "webhook", "response" or "reaction" feature. They are mutual exclusive'); + return 1; + } + + try { + $this->botService->validateBotParameters($name, $secret, $url, $description); + } catch (\InvalidArgumentException $e) { + $output->writeln('' . $e->getMessage() . ''); + return 1; + } + + try { + $this->botServerMapper->findByUrl($url); + $output->writeln('Bot with the same URL is already registered'); + return 2; + } catch (DoesNotExistException) { + } + + $bot = new BotServer(); + $bot->setName($name); + $bot->setSecret($secret); + $bot->setUrl($url); + $bot->setUrlHash(sha1($url)); + $bot->setDescription($description); + $bot->setState($noSetup ? Bot::STATE_NO_SETUP : Bot::STATE_ENABLED); + $bot->setFeatures($featureFlags); + try { + $botEntity = $this->botServerMapper->insert($bot); + } catch (\Exception $e) { + if ($e instanceof Exception && $e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $output->writeln('Bot with the same secret is already registered'); + return 3; + } else { + $output->writeln('' . get_class($e) . ': ' . $e->getMessage() . ''); + return 1; + } + } + + $output->writeln('Bot installed'); + $output->writeln('ID: ' . $botEntity->getId()); + return 0; + } +} diff --git a/lib/Command/Bot/ListBots.php b/lib/Command/Bot/ListBots.php new file mode 100644 index 0000000..9a607f3 --- /dev/null +++ b/lib/Command/Bot/ListBots.php @@ -0,0 +1,96 @@ +setName('talk:bot:list') + ->setDescription('List all installed bots of the server or a conversation') + ->addArgument( + 'token', + InputArgument::OPTIONAL, + 'Conversation token to limit the bot list for' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $bots = $this->botServerMapper->getAllBots(); + $token = $input->getArgument('token'); + + if ($token) { + $botIds = array_map(static function (BotConversation $bot): int { + return $bot->getBotId(); + }, $this->botConversationMapper->findForToken($token)); + } + + $data = []; + foreach ($bots as $bot) { + if ($token && !in_array($bot->getId(), $botIds, true)) { + continue; + } + + $botData = $bot->jsonSerialize(); + $botData['features'] = Bot::featureFlagsToLabels($botData['features']); + + if (!$this->botService->isAppForBotEnabled($bot)) { + $botData['state'] = Bot::STATE_UNAVAILABLE; + if ($input->getOption('output') === 'plain') { + $botData['error_count'] = '' . 1 . ''; + } else { + $botData['error_count'] = 1; + } + $botData['last_error_date'] = $this->timeFactory->getTime(); + if ($input->getOption('output') === 'plain') { + $botData['last_error_message'] = 'App disabled'; + } else { + $botData['last_error_message'] = 'App disabled'; + } + } + + if (!$output->isVerbose()) { + unset($botData['url']); + unset($botData['url_hash']); + unset($botData['secret']); + unset($botData['last_error_date']); + unset($botData['last_error_message']); + } + + $data[] = $botData; + } + + $this->writeTableInOutputFormat($input, $output, $data); + return 0; + } +} diff --git a/lib/Command/Bot/Remove.php b/lib/Command/Bot/Remove.php new file mode 100644 index 0000000..8727bb2 --- /dev/null +++ b/lib/Command/Bot/Remove.php @@ -0,0 +1,78 @@ +setName('talk:bot:remove') + ->setDescription('Remove a bot from a conversation') + ->addArgument( + 'bot-id', + InputArgument::REQUIRED, + 'The ID of the bot to remove in a conversation' + ) + ->addArgument( + 'token', + InputArgument::IS_ARRAY, + 'Conversation tokens to remove bot up for' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $botId = (int)$input->getArgument('bot-id'); + $tokens = $input->getArgument('token'); + + try { + $botServer = $this->botServerMapper->findById($botId); + } catch (DoesNotExistException) { + $output->writeln('Bot could not be found by id: ' . $botId . ''); + return 1; + } + + $this->botConversationMapper->deleteByBotIdAndTokens($botId, $tokens); + $output->writeln('Remove bot from given conversations'); + + foreach ($tokens as $token) { + try { + $room = $this->roomManager->getRoomByToken($token); + } catch (RoomNotFoundException) { + continue; + } + $event = new BotDisabledEvent($room, $botServer); + $this->dispatcher->dispatchTyped($event); + } + + return 0; + } +} diff --git a/lib/Command/Bot/Setup.php b/lib/Command/Bot/Setup.php new file mode 100644 index 0000000..2aaaa20 --- /dev/null +++ b/lib/Command/Bot/Setup.php @@ -0,0 +1,113 @@ +setName('talk:bot:setup') + ->setDescription('Add a bot to a conversation') + ->addArgument( + 'bot-id', + InputArgument::REQUIRED, + 'The ID of the bot to set up in a conversation' + ) + ->addArgument( + 'token', + InputArgument::IS_ARRAY, + 'Conversation tokens to set the bot up for' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $botId = (int)$input->getArgument('bot-id'); + $tokens = $input->getArgument('token'); + + try { + $botServer = $this->botServerMapper->findById($botId); + } catch (DoesNotExistException) { + $output->writeln('Bot could not be found by id: ' . $botId . ''); + return 1; + } + + if (!$this->botService->isAppForBotEnabled($botServer)) { + $output->writeln('Bot app is disabled: ' . $botServer->getUrl() . ''); + return 1; + } + + $returnCode = 0; + foreach ($tokens as $token) { + try { + $room = $this->roomManager->getRoomByToken($token); + + if ($room->isFederatedConversation()) { + $output->writeln('Federated conversations can not have bots: ' . $token . ''); + $returnCode = 2; + continue; + } + } catch (RoomNotFoundException) { + $output->writeln('Conversation could not be found by token: ' . $token . ''); + $returnCode = 2; + continue; + } + + $bot = new BotConversation(); + $bot->setBotId($botId); + $bot->setToken($token); + $bot->setState(Bot::STATE_ENABLED); + + try { + $this->botConversationMapper->insert($bot); + $output->writeln('Successfully set up for conversation ' . $token . ''); + + $event = new BotEnabledEvent($room, $botServer); + $this->dispatcher->dispatchTyped($event); + } catch (\Exception $e) { + if ($e instanceof Exception && $e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $output->writeln('Bot is already set up for the conversation ' . $token . ''); + $returnCode = 3; + } else { + $output->writeln('' . get_class($e) . ': ' . $e->getMessage() . ''); + $returnCode = 4; + } + } + } + + return $returnCode; + } +} diff --git a/lib/Command/Bot/State.php b/lib/Command/Bot/State.php new file mode 100644 index 0000000..0c5a031 --- /dev/null +++ b/lib/Command/Bot/State.php @@ -0,0 +1,96 @@ +setName('talk:bot:state') + ->setDescription('Change the state or feature list for a bot') + ->addArgument( + 'bot-id', + InputArgument::REQUIRED, + 'Bot ID to change the state for' + ) + ->addArgument( + 'state', + InputArgument::REQUIRED, + 'New state for the bot (0 = disabled, 1 = enabled, 2 = no setup via GUI)' + ) + ->addOption( + 'feature', + 'f', + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Specify the list of features for the bot' . "\n" + . ' - webhook: The bot receives posted chat messages as webhooks' . "\n" + . ' - response: The bot can post messages and reactions as a response' . "\n" + . ' - event: The bot reads posted messages from local events' . "\n" + . ' - reaction: The bot is notified about adding and removing of reactions' . "\n" + . ' - none: When all features should be disabled for the bot' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $botId = (int)$input->getArgument('bot-id'); + $state = (int)$input->getArgument('state'); + + $featureFlags = null; + if (!empty($input->getOption('feature'))) { + $featureFlags = Bot::featureLabelsToFlags($input->getOption('feature')); + } + + if (!in_array($state, [Bot::STATE_DISABLED, Bot::STATE_ENABLED, Bot::STATE_NO_SETUP], true)) { + $output->writeln('Provided state is invalid'); + return 1; + } + + try { + $bot = $this->botServerMapper->findById($botId); + } catch (DoesNotExistException) { + $output->writeln('Bot could not be found by id: ' . $botId . ''); + return 1; + } + + $bot->setState($state); + if ($featureFlags !== null) { + if (str_starts_with($bot->getUrl(), Bot::URL_RESPONSE_ONLY_PREFIX)) { + $output->writeln('Feature flags of response-only bots cannot be changed'); + return 1; + } + + $bot->setFeatures($featureFlags); + } + $this->botServerMapper->update($bot); + + if ($featureFlags !== null) { + $output->writeln('Bot state set to ' . $state . ' with features: ' . Bot::featureFlagsToLabels($featureFlags) . ''); + } else { + $output->writeln('Bot state set to ' . $state . ''); + } + return 0; + } +} diff --git a/lib/Command/Bot/Uninstall.php b/lib/Command/Bot/Uninstall.php new file mode 100644 index 0000000..4062d89 --- /dev/null +++ b/lib/Command/Bot/Uninstall.php @@ -0,0 +1,73 @@ +setName('talk:bot:uninstall') + ->setDescription('Uninstall a bot from the server') + ->addArgument( + 'id', + InputArgument::OPTIONAL, + 'The ID of the bot' + ) + ->addOption( + 'url', + null, + InputOption::VALUE_REQUIRED, + 'The URL of the bot (required when no ID is given, ignored otherwise)' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $botId = (int)$input->getArgument('id'); + + try { + if ($botId === 0) { + $url = $input->getOption('url'); + if ($url === null) { + $output->writeln('URL is required when no ID is given'); + return 1; + } + $bot = $this->botServerMapper->findByUrl($url); + } else { + $bot = $this->botServerMapper->findById($botId); + } + } catch (DoesNotExistException) { + $output->writeln('Bot not found'); + return 1; + } + + $this->botConversationMapper->deleteByBotId($bot->getId()); + $this->botServerMapper->deleteById($bot->getId()); + + $output->writeln('Bot uninstalled'); + return 0; + } +} diff --git a/lib/Command/Developer/AgeChatMessages.php b/lib/Command/Developer/AgeChatMessages.php new file mode 100644 index 0000000..e4649d4 --- /dev/null +++ b/lib/Command/Developer/AgeChatMessages.php @@ -0,0 +1,113 @@ +config->getSystemValue('debug', false) === true; + } + + #[\Override] + protected function configure(): void { + $this + ->setName('talk:developer:age-chat-messages') + ->setDescription('Artificially ages chat messages in the given conversation, so deletion and other things can be tested') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room to manipulate' + ) + ->addOption( + 'hours', + null, + InputOption::VALUE_REQUIRED, + 'Number of hours to age all chat messages', + 24 + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $hours = (int)$input->getOption('hours'); + if ($hours < 1) { + $output->writeln('Invalid age: ' . $hours . ''); + return 1; + } + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException) { + $output->writeln('Room not found: ' . $token . ''); + return 1; + } + + $update = $this->connection->getQueryBuilder(); + $update->update('comments') + ->set('creation_timestamp', $update->createParameter('creation_timestamp')) + ->set('expire_date', $update->createParameter('expire_date')) + ->set('meta_data', $update->createParameter('meta_data')) + ->where($update->expr()->eq('id', $update->createParameter('id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('id', 'creation_timestamp', 'expire_date', 'meta_data') + ->from('comments') + ->where($query->expr()->eq('object_type', $query->createNamedParameter('chat'))) + ->andWhere($query->expr()->eq('object_id', $query->createNamedParameter($room->getId()))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $creationTimestamp = new \DateTime($row['creation_timestamp']); + $creationTimestamp->sub(new \DateInterval('PT' . $hours . 'H')); + + $expireDate = null; + if ($row['expire_date']) { + $expireDate = new \DateTime($row['expire_date']); + $expireDate->sub(new \DateInterval('PT' . $hours . 'H')); + } + + $metaData = 'null'; + if ($row['meta_data'] !== 'null') { + $metaData = json_decode($row['meta_data'], true); + if (isset($metaData['last_edited_time'])) { + $metaData['last_edited_time'] -= $hours * 3600; + } + $metaData = json_encode($metaData); + } + + $update->setParameter('id', $row['id']); + $update->setParameter('creation_timestamp', $creationTimestamp, IQueryBuilder::PARAM_DATE); + $update->setParameter('expire_date', $expireDate, IQueryBuilder::PARAM_DATE); + $update->setParameter('meta_data', $metaData); + $update->executeStatement(); + } + $result->closeCursor(); + + return 0; + } +} diff --git a/lib/Command/Developer/UpdateDocs.php b/lib/Command/Developer/UpdateDocs.php new file mode 100644 index 0000000..feda68a --- /dev/null +++ b/lib/Command/Developer/UpdateDocs.php @@ -0,0 +1,145 @@ +config->getSystemValue('debug', false) === true; + } + + #[\Override] + protected function configure(): void { + $this + ->setName('talk:developer:update-docs') + ->setDescription('Update documentation of commands') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $info = $this->appManager->getAppInfo('spreed'); + $documentation = "# Talk occ commands\n\n"; + foreach ($info['commands'] as $namespace) { + if ($namespace === self::class + || $namespace === AgeChatMessages::class) { + continue; + } + + $command = $this->getCommand($namespace); + $documentation .= $this->getDocumentation($command) . "\n"; + } + + $handle = fopen(__DIR__ . '/../../../docs/occ.md', 'w'); + fwrite($handle, $documentation); + fclose($handle); + return 0; + } + + protected function getCommand(string $namespace): Command { + $command = Server::get($namespace); + // Clean full definition of command that have the default Symfony options + $command->setApplication($this->getApplication()); + return $command; + } + + protected function getDocumentation(Command $command): string { + $doc = '## ' . $command->getName() . "\n\n"; + $doc .= $command->getDescription() . "\n\n"; + $doc + .= '### Usage' . "\n\n" + . array_reduce( + array_merge( + [$command->getSynopsis()], + $command->getAliases(), + $command->getUsages() + ), + function ($carry, $usage) { + return $carry . '* `' . $usage . '`' . "\n"; + } + ); + $doc .= $this->describeInputDefinition($command); + + return $doc; + } + + protected function describeInputDefinition(Command $command): string { + $definition = $command->getDefinition(); + $text = ''; + if (\count($definition->getArguments()) > 0) { + $text .= "\n"; + $text .= "| Arguments | Description | Is required | Is array | Default |\n"; + $text .= '|---|---|---|---|---|'; + foreach ($definition->getArguments() as $argument) { + $describeInputArgument = $this->describeInputArgument($argument); + if ($describeInputArgument) { + $text .= "\n" . $describeInputArgument; + } + } + $text .= "\n"; + } + + if (\count($definition->getOptions()) > 0) { + $text .= "\n"; + + $text .= "| Options | Description | Accept value | Is value required | Is multiple | Default |\n"; + $text .= '|---|---|---|---|---|---|'; + foreach ($definition->getOptions() as $option) { + $describeInputOption = $this->describeInputOption($option); + if ($describeInputOption) { + $text .= "\n" . $describeInputOption; + } + } + $text .= "\n"; + } + return $text; + } + + protected function describeInputArgument(InputArgument $argument): string { + $description = $argument->getDescription(); + + return + '| `' . ($argument->getName() ?: '') . '` | ' + . ($description ? preg_replace('/\s*[\r\n]\s*/', ' ', $description) : '') . ' | ' + . ($argument->isRequired() ? 'yes' : 'no') . ' | ' + . ($argument->isArray() ? 'yes' : 'no') . ' | ' + . ($argument->isRequired() ? '*Required*' : '`' . str_replace("\n", '', var_export($argument->getDefault(), true)) . '`') . ' |'; + } + + protected function describeInputOption(InputOption $option): string { + $name = '--' . $option->getName(); + if ($option->getShortcut()) { + $name .= '\|-' . str_replace('|', '\|-', $option->getShortcut()); + } + $description = $option->getDescription(); + + return + '| `' . $name . '` | ' + . ($description ? preg_replace('/\s*[\r\n]\s*/', ' ', $description) : '') . ' | ' + . ($option->acceptValue() ? 'yes' : 'no') . ' | ' + . ($option->isValueRequired() ? 'yes' : 'no') . ' | ' + . ($option->isArray() ? 'yes' : 'no') . ' | ' + . ($option->isValueRequired() ? '*Required*' : '`' . str_replace("\n", '', var_export($option->getDefault(), true)) . '`') . ' |'; + } +} diff --git a/lib/Command/Monitor/Calls.php b/lib/Command/Monitor/Calls.php new file mode 100644 index 0000000..4846c68 --- /dev/null +++ b/lib/Command/Monitor/Calls.php @@ -0,0 +1,76 @@ +setName('talk:monitor:calls') + ->setDescription('Prints a list with conversations that have an active call as well as their participant count') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $query = $this->connection->getQueryBuilder(); + $subQuery = $this->connection->getQueryBuilder(); + $subQuery->select('attendee_id') + ->from('talk_sessions') + ->where($subQuery->expr()->gt('in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED))) + ->andWhere($subQuery->expr()->gt('last_ping', $query->createNamedParameter(time() - 60))) + ->groupBy('attendee_id'); + + $query->select('r.token', $query->func()->count('*', 'num_attendees')) + ->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_rooms', 'r', $query->expr()->eq('a.room_id', 'r.id')) + ->where($query->expr()->in('a.id', $query->createFunction($subQuery->getSQL()))) + ->groupBy('r.token'); + + $data = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $key = (string)$row['token']; + if ($input->getOption('output') === Base::OUTPUT_FORMAT_PLAIN) { + $key = '"' . $key . '"'; + } + + $data[$key] = (int)$row['num_attendees']; + } + $result->closeCursor(); + + if ($input->getOption('output') === Base::OUTPUT_FORMAT_PLAIN) { + $numCalls = count($data); + $numParticipants = array_sum($data); + + if (empty($data)) { + $output->writeln('No calls in progress'); + } else { + $output->writeln(sprintf('There are currently %1$d calls in progress with %2$d participants', $numCalls, $numParticipants)); + } + } + + $this->writeArrayInOutputFormat($input, $output, $data); + return 0; + } +} diff --git a/lib/Command/Monitor/HasActiveCalls.php b/lib/Command/Monitor/HasActiveCalls.php new file mode 100644 index 0000000..1d27278 --- /dev/null +++ b/lib/Command/Monitor/HasActiveCalls.php @@ -0,0 +1,75 @@ +setName('talk:active-calls') + ->setDescription('Allows you to check if calls are currently in process') + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $query = $this->connection->getQueryBuilder(); + + $query->select($query->func()->count('*', 'num_calls')) + ->from('talk_rooms') + ->where($query->expr()->isNotNull('active_since')); + + $result = $query->executeQuery(); + $numCalls = (int)$result->fetchColumn(); + $result->closeCursor(); + + if ($numCalls === 0) { + if ($input->getOption('output') === 'plain') { + $output->writeln('No calls in progress'); + } else { + $data = ['calls' => 0, 'participants' => 0]; + $this->writeArrayInOutputFormat($input, $output, $data); + } + return 0; + } + + $query = $this->connection->getQueryBuilder(); + $query->select($query->func()->count('*', 'num_participants')) + ->from('talk_sessions') + ->where($query->expr()->gt('in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED))) + ->andWhere($query->expr()->gt('last_ping', $query->createNamedParameter(time() - 60))); + + $result = $query->executeQuery(); + $numParticipants = (int)$result->fetchColumn(); + $result->closeCursor(); + + + if ($input->getOption('output') === 'plain') { + $output->writeln(sprintf('There are currently %1$d calls in progress with %2$d participants', $numCalls, $numParticipants)); + } else { + $data = ['calls' => $numCalls, 'participants' => $numParticipants]; + $this->writeArrayInOutputFormat($input, $output, $data); + } + return 1; + } +} diff --git a/lib/Command/Monitor/Room.php b/lib/Command/Monitor/Room.php new file mode 100644 index 0000000..4563937 --- /dev/null +++ b/lib/Command/Monitor/Room.php @@ -0,0 +1,124 @@ +setName('talk:monitor:room') + ->setDescription('Prints the number of attendees, active sessions and participant in the call.') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room to monitor' + ) + ->addOption( + 'separator', + null, + InputOption::VALUE_REQUIRED, + 'Separator for the CSV list when output=csv is used', + ',' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + + $query = $this->connection->getQueryBuilder(); + $query->select('id') + ->from('talk_rooms') + ->where($query->expr()->eq('token', $query->createNamedParameter($token))); + + $result = $query->executeQuery(); + $roomId = (int)$result->fetchOne(); + $result->closeCursor(); + + if ($roomId === 0) { + if ($input->getOption('output') === Base::OUTPUT_FORMAT_PLAIN) { + $output->writeln(sprintf('Room with token %1$s not found', $token)); + } + return 1; + } + + $query = $this->connection->getQueryBuilder(); + $query->select($query->func()->count('*', 'num_attendees')) + ->from('talk_attendees') + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + $numAttendees = (int)$result->fetchOne(); + $result->closeCursor(); + + $numSessions = $numSessionsInCall = 0; + $query = $this->connection->getQueryBuilder(); + $query->select($query->func()->count('s.id', 'num_sessions')) + ->from('talk_sessions', 's') + ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->gt('s.last_ping', $query->createNamedParameter(time() - 60, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + $numSessions = (int)$result->fetchOne(); + $result->closeCursor(); + + $query = $this->connection->getQueryBuilder(); + $query->select($query->func()->count('s.id', 'num_sessions')) + ->from('talk_sessions', 's') + ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->gt('s.in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->gt('s.last_ping', $query->createNamedParameter(time() - 60, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + $numSessionsInCall = (int)$result->fetchOne(); + $result->closeCursor(); + + if ($input->getOption('output') === Base::OUTPUT_FORMAT_PLAIN) { + $output->writeln(sprintf( + 'The conversation has %1$d attendees with %2$d sessions of which %3$d are in the call.', + $numAttendees, + $numSessions, + $numSessionsInCall + )); + return 0; + } + if ($input->getOption('output') === 'csv') { + $separator = $input->getOption('separator'); + $output->writeln($numAttendees . $separator . $numSessions . $separator . $numSessionsInCall); + return 0; + } + + $this->writeArrayInOutputFormat($input, $output, [ + 'attendees' => $numAttendees, + 'sessions' => $numSessions, + 'call' => $numSessionsInCall, + ]); + return 0; + } +} diff --git a/lib/Command/PhoneNumber/AddPhoneNumber.php b/lib/Command/PhoneNumber/AddPhoneNumber.php new file mode 100644 index 0000000..8785684 --- /dev/null +++ b/lib/Command/PhoneNumber/AddPhoneNumber.php @@ -0,0 +1,105 @@ +setName('talk:phone-number:add') + ->setDescription('Add a mapping entry to map a phone number to an user') + ->addArgument( + 'phone', + InputArgument::REQUIRED, + 'Phone number that will be called', + ) + ->addArgument( + 'user', + InputArgument::REQUIRED, + 'User to be added to the conversation', + ) + ->addOption( + 'force', + 'f', + InputOption::VALUE_NONE, + 'Force the number to the given user even when it is assigned already', + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $phoneNumber = $input->getArgument('phone'); + $userId = $input->getArgument('user'); + $force = (bool)$input->getOption('force'); + + $user = $this->userManager->get($userId); + if (!$user instanceof IUser) { + $output->writeln('Invalid user "' . $userId . '" provided'); + return self::FAILURE; + } + $userId = $user->getUID(); + + try { + $phoneNumber = $this->phoneNumberValidation->validateNumber($phoneNumber); + } catch (\InvalidArgumentException) { + $output->writeln('Not a valid phone number ' . $phoneNumber . '. The format is invalid.'); + return self::FAILURE; + } + + try { + $entry = $this->mapper->findByPhoneNumber($phoneNumber); + } catch (DoesNotExistException) { + $entry = null; + } + + if ($entry !== null) { + $oldActor = $entry->getActorId(); + if (!$force) { + $output->writeln('Phone number is already assigned to ' . $oldActor . ''); + return self::FAILURE; + } + + $entry->setActorId($userId); + $this->mapper->update($entry); + + $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is now assigned to ' . $entry->getActorId() . ''); + $output->writeln('Was assigned to ' . $oldActor . ' before'); + return self::SUCCESS; + } + + $entry = new PhoneNumber(); + $entry->setPhoneNumber($phoneNumber); + $entry->setActorId($userId); + $this->mapper->insert($entry); + + $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is now assigned to ' . $entry->getActorId() . ''); + return self::SUCCESS; + } +} diff --git a/lib/Command/PhoneNumber/FindPhoneNumber.php b/lib/Command/PhoneNumber/FindPhoneNumber.php new file mode 100644 index 0000000..1e1b509 --- /dev/null +++ b/lib/Command/PhoneNumber/FindPhoneNumber.php @@ -0,0 +1,84 @@ +setName('talk:phone-number:find') + ->setDescription('Find a phone number or the phone number of an user') + ->addOption( + 'phone', + null, + InputOption::VALUE_REQUIRED, + 'Phone number to search for', + ) + ->addOption( + 'user', + null, + InputOption::VALUE_REQUIRED, + 'User to get number(s) for', + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $phoneNumber = (string)$input->getOption('phone'); + $userId = (string)$input->getOption('user'); + + if ($phoneNumber !== '') { + try { + $entry = $this->mapper->findByPhoneNumber($phoneNumber); + } catch (DoesNotExistException) { + $output->writeln('Phone number ' . $phoneNumber . ' could not be found'); + return self::FAILURE; + } + $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is assigned to ' . $entry->getActorId()); + return self::SUCCESS; + } + + if ($userId === '') { + $output->writeln('Neither phone number nor user provided'); + return self::FAILURE; + } + + $entries = $this->mapper->findByUser($userId); + if (empty($entries)) { + $output->writeln('No phone number found for ' . $userId . ''); + return self::FAILURE; + } + + if (count($entries) === 1) { + $entry = array_pop($entries); + $output->writeln($entry->getActorId() . ' has phone number ' . $entry->getPhoneNumber() . ' assigned'); + } else { + $output->writeln($userId . ' has the following phone numbers assigned:'); + foreach ($entries as $entry) { + $output->writeln(' - ' . $entry->getPhoneNumber()); + } + } + + return self::SUCCESS; + } +} diff --git a/lib/Command/PhoneNumber/ImportPhoneNumbers.php b/lib/Command/PhoneNumber/ImportPhoneNumbers.php new file mode 100644 index 0000000..32c4697 --- /dev/null +++ b/lib/Command/PhoneNumber/ImportPhoneNumbers.php @@ -0,0 +1,122 @@ +setName('talk:phone-number:import') + ->setDescription('Import a CSV list (format: "number","user") for SIP dial-in') + ->addOption( + 'reset', + null, + InputOption::VALUE_NONE, + 'Delete all phone numbers before importing', + ) + ->addOption( + 'force', + 'f', + InputOption::VALUE_NONE, + 'Force the numbers to the given user even when they are assigned already', + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $reset = (bool)$input->getOption('reset'); + $force = (bool)$input->getOption('force'); + + $this->db->beginTransaction(); + if ($reset) { + $this->db->truncateTable('talk_phone_numbers', false); + $force = false; + } + + $handle = $this->getResourceFromStdin(); + if ($handle === false) { + $output->writeln('Invalid StdIn provided'); + return self::FAILURE; + } + + $map = []; + while ($row = fgetcsv($handle, escape: '')) { + if (count($row) !== 2 || $row[0] === '' || $row[1] === '') { + continue; + } + + try { + $row[0] = $this->phoneNumberValidation->validateNumber($row[0]); + } catch (\InvalidArgumentException) { + $output->writeln('Not a valid phone number ' . $row[0] . '. The format is invalid.'); + return self::FAILURE; + } + + $user = $this->userManager->get($row[1]); + if (!$user instanceof IUser) { + $output->writeln('Invalid user "' . $row[1] . '" provided'); + return self::FAILURE; + } + $row[1] = $user->getUID(); + + $map[$row[0]] = $row[1]; + } + + $entries = $this->mapper->findByPhoneNumbers(array_keys($map)); + + if (!$force && !empty($entries)) { + $output->writeln('Phone number already assigned:'); + foreach ($entries as $entry) { + $output->writeln(' - ' . $entry->getPhoneNumber()); + } + return self::FAILURE; + } + + foreach ($map as $phoneNumber => $userId) { + $entry = new PhoneNumber(); + $entry->setPhoneNumber($phoneNumber); + $entry->setActorId($userId); + $this->mapper->insert($entry); + + $output->writeln('Phone number ' . $entry->getPhoneNumber() . ' is now assigned to ' . $entry->getActorId() . ''); + } + + $this->db->commit(); + return self::SUCCESS; + } + + /** + * Get the resource from stdin ("talk:phone-numbers:import < file.csv") + * @return resource|false + */ + protected function getResourceFromStdin() { + return fopen('php://stdin', 'rb'); + } +} diff --git a/lib/Command/PhoneNumber/RemovePhoneNumber.php b/lib/Command/PhoneNumber/RemovePhoneNumber.php new file mode 100644 index 0000000..a5484c4 --- /dev/null +++ b/lib/Command/PhoneNumber/RemovePhoneNumber.php @@ -0,0 +1,43 @@ +setName('talk:phone-number:remove') + ->setDescription('Remove a mapping entry by phone number') + ->addArgument( + 'phone', + InputArgument::REQUIRED, + 'Phone number to remove the mapping entry for', + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $phoneNumber = $input->getArgument('phone'); + $this->mapper->deleteByPhoneNumber($phoneNumber); + return self::SUCCESS; + } +} diff --git a/lib/Command/PhoneNumber/RemoveUser.php b/lib/Command/PhoneNumber/RemoveUser.php new file mode 100644 index 0000000..a6955d3 --- /dev/null +++ b/lib/Command/PhoneNumber/RemoveUser.php @@ -0,0 +1,43 @@ +setName('talk:phone-number:remove-user') + ->setDescription('Remove mapping entries by user') + ->addArgument( + 'user', + InputArgument::REQUIRED, + 'User to remove all mapping entries for', + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $userId = $input->getArgument('user'); + $this->mapper->deleteByUser($userId); + return self::SUCCESS; + } +} diff --git a/lib/Command/Recording/Consent.php b/lib/Command/Recording/Consent.php new file mode 100644 index 0000000..b5cf29a --- /dev/null +++ b/lib/Command/Recording/Consent.php @@ -0,0 +1,98 @@ +setName('talk:recording:consent') + ->setDescription('List all matching consent that were given to be audio and video recorded during a call (requires administrator or moderator configuration)') + ->addOption( + 'token', + null, + InputOption::VALUE_REQUIRED, + 'Limit to the given conversation' + ) + ->addOption( + 'actor-type', + null, + InputOption::VALUE_REQUIRED, + 'Limit to the given actor (only valid when --actor-id is also provided)' + ) + ->addOption( + 'actor-id', + null, + InputOption::VALUE_REQUIRED, + 'Limit to the given actor (only valid when --actor-type is also provided)' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getOption('token'); + $actorType = $input->getOption('actor-type'); + $actorId = $input->getOption('actor-id'); + if (($actorType !== null) !== ($actorId !== null)) { + $output->writeln('actor-type and actor-id must either both be specified or both left out'); + return 1; + } + + $room = null; + if ($token !== null) { + try { + $room = $this->roomManager->getRoomByToken($token); + } catch (RoomNotFoundException) { + $output->writeln('Conversation could not be found by token'); + return 2; + } + } + + if ($actorType) { + if ($room instanceof Room) { + $consentData = $this->consentService->getConsentForRoomByActor($room, $actorType, $actorId); + } else { + $consentData = $this->consentService->getConsentForActor($actorType, $actorId); + } + } elseif ($room instanceof Room) { + $consentData = $this->consentService->getConsentForRoom($room); + } else { + $output->writeln('No conversation or actor provided'); + return 3; + } + + $this->writeTableInOutputFormat( + $input, + $output, + array_map(static fn (\OCA\Talk\Model\Consent $consent) => $consent->jsonSerialize(), $consentData) + ); + + return 0; + } + +} diff --git a/lib/Command/Room/Add.php b/lib/Command/Room/Add.php new file mode 100644 index 0000000..09bca6c --- /dev/null +++ b/lib/Command/Room/Add.php @@ -0,0 +1,102 @@ +setName('talk:room:add') + ->setDescription('Adds users to a room') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room to add users to' + )->addOption( + 'user', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Invites the given users to the room' + )->addOption( + 'group', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Invites all members of the given groups to the room' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $users = $input->getOption('user'); + $groups = $input->getOption('group'); + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + try { + $this->addRoomParticipants($room, $users); + $this->addRoomParticipantsByGroup($room, $groups); + } catch (InvalidArgumentException $e) { + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + + $output->writeln('Users successfully added to room.'); + return 0; + } + + #[\Override] + public function completeOptionValues($optionName, CompletionContext $context) { + switch ($optionName) { + case 'user': + return $this->completeUserValues($context); + + case 'group': + return $this->completeGroupValues($context); + } + + return parent::completeOptionValues($optionName, $context); + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Room/Create.php b/lib/Command/Room/Create.php new file mode 100644 index 0000000..7a6aa2a --- /dev/null +++ b/lib/Command/Room/Create.php @@ -0,0 +1,178 @@ +setName('talk:room:create') + ->setDescription('Create a new room') + ->addArgument( + 'name', + InputArgument::REQUIRED, + 'The name of the room to create' + )->addOption( + 'description', + null, + InputOption::VALUE_REQUIRED, + 'The description of the room to create' + )->addOption( + 'user', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Invites the given users to the room to create' + )->addOption( + 'group', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Invites all members of the given group to the room to create' + )->addOption( + 'public', + null, + InputOption::VALUE_NONE, + 'Creates the room as public room if set' + )->addOption( + 'readonly', + null, + InputOption::VALUE_NONE, + 'Creates the room with read-only access only if set' + )->addOption( + 'listable', + null, + InputOption::VALUE_REQUIRED, + 'Creates the room with the given listable scope' + )->addOption( + 'password', + null, + InputOption::VALUE_REQUIRED, + 'Protects the room to create with the given password' + )->addOption( + 'owner', + null, + InputOption::VALUE_REQUIRED, + 'Sets the given user as owner of the room to create' + )->addOption( + 'moderator', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Promotes the given users to moderators' + )->addOption( + 'message-expiration', + null, + InputOption::VALUE_REQUIRED, + 'Seconds to expire a message after sent. If zero will disable the expire message duration.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $name = $input->getArgument('name'); + $description = $input->getOption('description'); + $users = $input->getOption('user'); + $groups = $input->getOption('group'); + $public = $input->getOption('public'); + $readonly = $input->getOption('readonly'); + $listable = $input->getOption('listable'); + $password = $input->getOption('password'); + $owner = $input->getOption('owner'); + $moderators = $input->getOption('moderator'); + $messageExpiration = $input->getOption('message-expiration'); + + if (!in_array($listable, [ + null, + (string)Room::LISTABLE_NONE, + (string)Room::LISTABLE_USERS, + (string)Room::LISTABLE_ALL, + ], true)) { + $output->writeln('Invalid value for option "--listable" given.'); + return 1; + } + + $roomType = $public ? Room::TYPE_PUBLIC : Room::TYPE_GROUP; + try { + $room = $this->roomService->createConversation($roomType, $name); + } catch (InvalidArgumentException $e) { + if ($e->getMessage() === 'name') { + $output->writeln('Invalid room name.'); + return 1; + } + throw $e; + } + + try { + if ($description !== null) { + $this->setRoomDescription($room, $description); + } + + $this->setRoomReadOnly($room, $readonly); + $this->setRoomListable($room, (int)$listable); + + if ($password !== null) { + $this->setRoomPassword($room, $password); + } + + $this->addRoomParticipants($room, $users); + $this->addRoomParticipantsByGroup($room, $groups); + $this->addRoomModerators($room, $moderators); + + if ($owner !== null) { + $this->setRoomOwner($room, $owner); + } + + if ($messageExpiration !== null) { + $this->setMessageExpiration($room, (int)$messageExpiration); + } + } catch (InvalidArgumentException $e) { + $this->roomService->deleteRoom($room); + + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + $output->writeln('Room token: ' . $room->getToken()); + + $output->writeln('Room successfully created.'); + return 0; + } + + #[\Override] + public function completeOptionValues($optionName, CompletionContext $context) { + switch ($optionName) { + case 'user': + return $this->completeUserValues($context); + + case 'group': + return $this->completeGroupValues($context); + + case 'owner': + case 'moderator': + return $this->completeParticipantValues($context); + case 'readonly': + return [(string)Room::READ_ONLY, (string)Room::READ_WRITE]; + case 'listable': + return [ + (string)Room::LISTABLE_ALL, + (string)Room::LISTABLE_USERS, + (string)Room::LISTABLE_NONE, + ]; + } + + return parent::completeOptionValues($optionName, $context); + } +} diff --git a/lib/Command/Room/Delete.php b/lib/Command/Room/Delete.php new file mode 100644 index 0000000..8841e60 --- /dev/null +++ b/lib/Command/Room/Delete.php @@ -0,0 +1,69 @@ +setName('talk:room:delete') + ->setDescription('Deletes a room') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room to delete' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + $this->roomService->deleteRoom($room); + + $output->writeln('Room successfully deleted.'); + return 0; + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Room/Demote.php b/lib/Command/Room/Demote.php new file mode 100644 index 0000000..6f533ad --- /dev/null +++ b/lib/Command/Room/Demote.php @@ -0,0 +1,83 @@ +setName('talk:room:demote') + ->setDescription('Demotes participants of a room to regular users') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room in which users should be demoted' + )->addArgument( + 'participant', + InputArgument::REQUIRED | InputArgument::IS_ARRAY, + 'Demotes the given participants of the room to regular users' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $users = $input->getArgument('participant'); + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + try { + $this->removeRoomModerators($room, $users); + } catch (InvalidArgumentException $e) { + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + + $output->writeln('Participants successfully demoted to regular users.'); + return 0; + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + + case 'participant': + return $this->completeParticipantValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Room/Promote.php b/lib/Command/Room/Promote.php new file mode 100644 index 0000000..4e68dad --- /dev/null +++ b/lib/Command/Room/Promote.php @@ -0,0 +1,83 @@ +setName('talk:room:promote') + ->setDescription('Promotes participants of a room to moderators') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room in which users should be promoted' + )->addArgument( + 'participant', + InputArgument::REQUIRED | InputArgument::IS_ARRAY, + 'Promotes the given participants of the room to moderators' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $users = $input->getArgument('participant'); + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + try { + $this->addRoomModerators($room, $users); + } catch (InvalidArgumentException $e) { + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + + $output->writeln('Participants successfully promoted to moderators.'); + return 0; + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + + case 'participant': + return $this->completeParticipantValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Room/Remove.php b/lib/Command/Room/Remove.php new file mode 100644 index 0000000..44f2114 --- /dev/null +++ b/lib/Command/Room/Remove.php @@ -0,0 +1,83 @@ +setName('talk:room:remove') + ->setDescription('Remove users from a room') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'Token of the room to remove users from' + )->addArgument( + 'participant', + InputArgument::REQUIRED | InputArgument::IS_ARRAY, + 'Removes the given participants from the room' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $users = $input->getArgument('participant'); + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + try { + $this->removeRoomParticipants($room, $users); + } catch (InvalidArgumentException $e) { + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + + $output->writeln('Users successfully removed from room.'); + return 0; + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + + case 'participant': + return $this->completeParticipantValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Room/TRoomCommand.php b/lib/Command/Room/TRoomCommand.php new file mode 100644 index 0000000..dbde5ac --- /dev/null +++ b/lib/Command/Room/TRoomCommand.php @@ -0,0 +1,417 @@ +getName()) { + return; + } + + if (!$this->validateRoomName($name)) { + throw new InvalidArgumentException('Invalid room name.'); + } + + try { + $this->roomService->setName($room, $name); + } catch (NameException) { + throw new InvalidArgumentException('Unable to change room name.'); + } + } + + /** + * @param string $name + * + * @return bool + * + * @throws InvalidArgumentException + */ + protected function validateRoomName(string $name): bool { + $name = trim($name); + return (($name !== '') && !isset($name[255])); + } + + /** + * @param Room $room + * @param string $description + * + * @throws InvalidArgumentException + */ + protected function setRoomDescription(Room $room, string $description): void { + try { + $this->roomService->setDescription($room, $description); + } catch (DescriptionException $e) { + throw new InvalidArgumentException('Invalid room description.'); + } + } + + /** + * @param Room $room + * @param bool $public + * + * @throws InvalidArgumentException + */ + protected function setRoomPublic(Room $room, bool $public): void { + if ($public === ($room->getType() === Room::TYPE_PUBLIC)) { + return; + } + + try { + $this->roomService->setType($room, $public ? Room::TYPE_PUBLIC : Room::TYPE_GROUP); + } catch (TypeException) { + throw new InvalidArgumentException('Unable to change room type.'); + } + } + + /** + * @param Room $room + * @param bool $readOnly + * + * @throws InvalidArgumentException + */ + protected function setRoomReadOnly(Room $room, bool $readOnly): void { + if ($readOnly === ($room->getReadOnly() === Room::READ_ONLY)) { + return; + } + + try { + $this->roomService->setReadOnly($room, $readOnly ? Room::READ_ONLY : Room::READ_WRITE); + } catch (ReadOnlyException) { + throw new InvalidArgumentException('Unable to change room state.'); + } + } + + /** + * @param Room $room + * @param int $listable + * + * @throws InvalidArgumentException + */ + protected function setRoomListable(Room $room, int $listable): void { + if ($room->getListable() === $listable) { + return; + } + + try { + $this->roomService->setListable($room, $listable); + } catch (ListableException) { + throw new InvalidArgumentException('Unable to change room state.'); + } + } + + /** + * @param Room $room + * @param string $password + * + * @throws InvalidArgumentException + */ + protected function setRoomPassword(Room $room, string $password): void { + if ($room->hasPassword() ? $this->roomService->verifyPassword($room, $password)['result'] : ($password === '')) { + return; + } + + if (($password !== '') && ($room->getType() !== Room::TYPE_PUBLIC)) { + throw new InvalidArgumentException('Unable to add password protection to private room.'); + } + + try { + $this->roomService->setPassword($room, $password); + } catch (PasswordException $e) { + if ($e->getReason() === PasswordException::REASON_VALUE) { + throw new InvalidArgumentException($e->getHint()); + } + throw new InvalidArgumentException('Unable to change room password.'); + } + } + + /** + * @param Room $room + * @param string $userId + * + * @throws InvalidArgumentException + */ + protected function setRoomOwner(Room $room, string $userId): void { + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + throw new InvalidArgumentException(sprintf("User '%s' is no participant.", $userId)); + } + + if ($userId === MatterbridgeManager::BRIDGE_BOT_USERID) { + throw new InvalidArgumentException('Can not promote the bridge-bot user.'); + } + + $this->unsetRoomOwner($room); + + $this->participantService->updateParticipantType($room, $participant, Participant::OWNER); + } + + /** + * @param Room $room + * + * @throws InvalidArgumentException + */ + protected function unsetRoomOwner(Room $room): void { + $participants = $this->participantService->getParticipantsForRoom($room); + foreach ($participants as $participant) { + if ($participant->getAttendee()->getParticipantType() === Participant::OWNER) { + $this->participantService->updateParticipantType($room, $participant, Participant::USER); + } + } + } + + /** + * @param Room $room + * @param string[] $groupIds + * + * @throws InvalidArgumentException + */ + protected function addRoomParticipantsByGroup(Room $room, array $groupIds): void { + if (!$groupIds) { + return; + } + + foreach ($groupIds as $groupId) { + $group = $this->groupManager->get($groupId); + if ($group === null) { + throw new InvalidArgumentException(sprintf("Group '%s' not found.", $groupId)); + } + + $this->participantService->addGroup($room, $group); + } + } + + /** + * @param Room $room + * @param string[] $userIds + * + * @throws InvalidArgumentException + */ + protected function addRoomParticipants(Room $room, array $userIds): void { + if (!$userIds) { + return; + } + + /** @var array $participants */ + $participants = []; + foreach ($userIds as $userId) { + if ($userId === MatterbridgeManager::BRIDGE_BOT_USERID) { + throw new InvalidArgumentException('Can not add the bridge-bot user.'); + } + + $user = $this->userManager->get($userId); + if ($user === null) { + throw new InvalidArgumentException(sprintf("User '%s' not found.", $userId)); + } + + if (isset($participants[$user->getUID()])) { + // nothing to do, user is going to be a participant already + continue; + } + + try { + $this->participantService->getParticipant($room, $user->getUID(), false); + + // nothing to do, user is a participant already + continue; + } catch (ParticipantNotFoundException $e) { + // we expect the user not to be a participant yet + } + + $participants[$user->getUID()] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + ]; + } + + $this->participantService->addUsers($room, $participants); + } + + /** + * @param Room $room + * @param string[] $userIds + * + * @throws InvalidArgumentException + */ + protected function removeRoomParticipants(Room $room, array $userIds): void { + $users = []; + foreach ($userIds as $userId) { + try { + $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + throw new InvalidArgumentException(sprintf("User '%s' is no participant.", $userId)); + } + + $users[] = $this->userManager->get($userId); + } + + foreach ($users as $user) { + $this->participantService->removeUser($room, $user, AAttendeeRemovedEvent::REASON_REMOVED); + } + } + + /** + * @param Room $room + * @param string[] $userIds + * + * @throws InvalidArgumentException + */ + protected function addRoomModerators(Room $room, array $userIds): void { + $participants = []; + foreach ($userIds as $userId) { + if ($userId === MatterbridgeManager::BRIDGE_BOT_USERID) { + throw new InvalidArgumentException('Can not promote the bridge-bot user.'); + } + + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + throw new InvalidArgumentException(sprintf("User '%s' is no participant.", $userId)); + } + + if ($participant->getAttendee()->getParticipantType() !== Participant::OWNER) { + $participants[] = $participant; + } + } + + foreach ($participants as $participant) { + $this->participantService->updateParticipantType($room, $participant, Participant::MODERATOR); + } + } + + /** + * @param Room $room + * @param string[] $userIds + * + * @throws InvalidArgumentException + */ + protected function removeRoomModerators(Room $room, array $userIds): void { + $participants = []; + foreach ($userIds as $userId) { + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + throw new InvalidArgumentException(sprintf("User '%s' is no participant.", $userId)); + } + + if ($participant->getAttendee()->getParticipantType() === Participant::MODERATOR) { + $participants[] = $participant; + } + } + + foreach ($participants as $participant) { + $this->participantService->updateParticipantType($room, $participant, Participant::USER); + } + } + + protected function completeTokenValues(CompletionContext $context): array { + return array_map(function (Room $room) { + return $room->getToken(); + }, $this->manager->searchRoomsByToken($context->getCurrentWord())); + } + + protected function completeUserValues(CompletionContext $context): array { + return array_map(function (IUser $user) { + if ($user->getUID() === MatterbridgeManager::BRIDGE_BOT_USERID) { + return ''; + } + return $user->getUID(); + }, $this->userManager->search($context->getCurrentWord())); + } + + protected function completeGroupValues(CompletionContext $context): array { + return array_map(function (IGroup $group) { + return $group->getGID(); + }, $this->groupManager->search($context->getCurrentWord())); + } + + protected function completeParticipantValues(CompletionContext $context): array { + $definition = new InputDefinition(); + + if ($this->getApplication() !== null) { + $definition->addArguments($this->getApplication()->getDefinition()->getArguments()); + $definition->addOptions($this->getApplication()->getDefinition()->getOptions()); + } + + $definition->addArguments($this->getDefinition()->getArguments()); + $definition->addOptions($this->getDefinition()->getOptions()); + + $input = new ArgvInput($context->getWords(), $definition); + if ($input->hasArgument('token')) { + $token = $input->getArgument('token'); + } elseif ($input->hasOption('token')) { + $token = $input->getOption('token'); + } else { + return []; + } + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + return []; + } + + return array_filter($this->participantService->getParticipantUserIds($room), static function ($userId) use ($context) { + return stripos($userId, $context->getCurrentWord()) !== false; + }); + } + + protected function setMessageExpiration(Room $room, int $seconds): void { + try { + $this->roomService->setMessageExpiration($room, $seconds); + } catch (MessageExpirationException) { + throw new InvalidArgumentException('Unable to change message expiration.'); + } + } +} diff --git a/lib/Command/Room/Update.php b/lib/Command/Room/Update.php new file mode 100644 index 0000000..e2767f0 --- /dev/null +++ b/lib/Command/Room/Update.php @@ -0,0 +1,198 @@ +setName('talk:room:update') + ->setDescription('Updates a room') + ->addArgument( + 'token', + InputArgument::REQUIRED, + 'The token of the room to update' + )->addOption( + 'name', + null, + InputOption::VALUE_REQUIRED, + 'Sets a new name for the room' + )->addOption( + 'description', + null, + InputOption::VALUE_REQUIRED, + 'Sets a new description for the room' + )->addOption( + 'public', + null, + InputOption::VALUE_REQUIRED, + 'Modifies the room to be a public room (value 1) or private room (value 0)' + )->addOption( + 'readonly', + null, + InputOption::VALUE_REQUIRED, + 'Modifies the room to be read-only (value 1) or read-write (value 0)' + )->addOption( + 'listable', + null, + InputOption::VALUE_REQUIRED, + 'Modifies the room\'s listable scope' + )->addOption( + 'password', + null, + InputOption::VALUE_REQUIRED, + 'Sets a new password for the room; pass an empty value to remove password protection' + )->addOption( + 'owner', + null, + InputOption::VALUE_REQUIRED, + 'Sets the given user as owner of the room; pass an empty value to remove the owner' + )->addOption( + 'message-expiration', + null, + InputOption::VALUE_REQUIRED, + 'Seconds to expire a message after sent. If zero will disable the expire message duration.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $token = $input->getArgument('token'); + $name = $input->getOption('name'); + $description = $input->getOption('description'); + $public = $input->getOption('public'); + $readOnly = $input->getOption('readonly'); + $listable = $input->getOption('listable'); + $password = $input->getOption('password'); + $owner = $input->getOption('owner'); + $messageExpiration = $input->getOption('message-expiration'); + + if (!in_array($public, [null, '0', '1'], true)) { + $output->writeln('Invalid value for option "--public" given.'); + return 1; + } + + if (!in_array($readOnly, [null, (string)Room::READ_WRITE, (string)Room::READ_ONLY], true)) { + $output->writeln('Invalid value for option "--readonly" given.'); + return 1; + } + + if (!in_array($listable, [ + null, + (string)Room::LISTABLE_NONE, + (string)Room::LISTABLE_USERS, + (string)Room::LISTABLE_ALL, + ], true)) { + $output->writeln('Invalid value for option "--listable" given.'); + return 1; + } + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $output->writeln('Room not found.'); + return 1; + } + + if ($room->isFederatedConversation()) { + $output->writeln('Room is a federated conversation.'); + return 1; + } + + if (in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $output->writeln('Room is a private (1 to 1) conversation.'); + return 1; + } + + try { + if ($name !== null) { + $this->setRoomName($room, $name); + } + + if ($description !== null) { + $this->setRoomDescription($room, $description); + } + + if ($public !== null) { + $this->setRoomPublic($room, ($public === '1')); + } + + if ($readOnly !== null) { + $this->setRoomReadOnly($room, ($readOnly === '1')); + } + + if ($listable !== null) { + $this->setRoomListable($room, (int)$listable); + } + + if ($password !== null) { + $this->setRoomPassword($room, $password); + } + + if ($owner !== null) { + if ($owner !== '') { + $this->setRoomOwner($room, $owner); + } else { + $this->unsetRoomOwner($room); + } + } + + if ($messageExpiration !== null) { + $this->setMessageExpiration($room, (int)$messageExpiration); + } + } catch (InvalidArgumentException $e) { + $output->writeln(sprintf('%s', $e->getMessage())); + return 1; + } + + $output->writeln('Room successfully updated.'); + return 0; + } + + #[\Override] + public function completeOptionValues($optionName, CompletionContext $context) { + switch ($optionName) { + case 'public': + case 'readonly': + return [(string)Room::READ_ONLY, (string)Room::READ_WRITE]; + case 'listable': + return [ + (string)Room::LISTABLE_ALL, + (string)Room::LISTABLE_USERS, + (string)Room::LISTABLE_NONE, + ]; + + case 'owner': + return $this->completeParticipantValues($context); + } + + return parent::completeOptionValues($optionName, $context); + } + + #[\Override] + public function completeArgumentValues($argumentName, CompletionContext $context) { + switch ($argumentName) { + case 'token': + return $this->completeTokenValues($context); + } + + return parent::completeArgumentValues($argumentName, $context); + } +} diff --git a/lib/Command/Signaling/Add.php b/lib/Command/Signaling/Add.php new file mode 100644 index 0000000..2afaed8 --- /dev/null +++ b/lib/Command/Signaling/Add.php @@ -0,0 +1,83 @@ +setName('talk:signaling:add') + ->setDescription('Add an external signaling server.') + ->addArgument( + 'server', + InputArgument::REQUIRED, + 'A server string, ex. wss://signaling.example.org' + )->addArgument( + 'secret', + InputArgument::REQUIRED, + 'A shared secret string.' + )->addOption( + 'verify', + null, + InputOption::VALUE_NONE, + 'Validate SSL certificate if set.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $server = $input->getArgument('server'); + $secret = $input->getArgument('secret'); + $verify = $input->getOption('verify'); + + // quick validation, similar to signaling-server.js + if (trim($server) === '') { + $output->writeln('Server cannot be empty.'); + return 1; + } + if (trim($secret) === '') { + $output->writeln('Secret cannot be empty.'); + return 1; + } + + $config = $this->config->getAppValue('spreed', 'signaling_servers'); + + $signaling = json_decode($config, true); + if ($signaling === null || empty($signaling) || !is_array($signaling)) { + $servers = []; + } else { + $servers = is_array($signaling['servers']) ? $signaling['servers'] : []; + } + $servers[] = [ + 'server' => $server, + 'verify' => $verify, + ]; + $signaling = [ + 'servers' => $servers, + 'secret' => $secret, + ]; + + $this->config->setAppValue('spreed', 'signaling_servers', json_encode($signaling)); + $output->writeln('Added signaling server ' . $server . '.'); + return 0; + } +} diff --git a/lib/Command/Signaling/Delete.php b/lib/Command/Signaling/Delete.php new file mode 100644 index 0000000..685f4d1 --- /dev/null +++ b/lib/Command/Signaling/Delete.php @@ -0,0 +1,63 @@ +setName('talk:signaling:delete') + ->setDescription('Remove an existing signaling server.') + ->addArgument( + 'server', + InputArgument::REQUIRED, + 'An external signaling server string, ex. wss://signaling.example.org' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $server = $input->getArgument('server'); + + $config = $this->config->getAppValue('spreed', 'signaling_servers'); + $signaling = json_decode($config, true); + if ($signaling === null || empty($signaling) || !is_array($signaling)) { + $signaling = [ + 'servers' => [], + 'secret' => '', + ]; + } + $count = count($signaling['servers']); + // remove all occurrences of $server + $servers = array_filter($signaling['servers'], function ($s) use ($server) { + return $s['server'] !== $server; + }); + $signaling['servers'] = array_values($servers); // reindex + + $this->config->setAppValue('spreed', 'signaling_servers', json_encode($signaling)); + if ($count > count($signaling['servers'])) { + $output->writeln('Deleted ' . $server . '.'); + } else { + $output->writeln('There is nothing to delete.'); + } + return 0; + } +} diff --git a/lib/Command/Signaling/ListCommand.php b/lib/Command/Signaling/ListCommand.php new file mode 100644 index 0000000..957de92 --- /dev/null +++ b/lib/Command/Signaling/ListCommand.php @@ -0,0 +1,43 @@ +setName('talk:signaling:list') + ->setDescription('List external signaling servers.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $config = $this->config->getAppValue('spreed', 'signaling_servers'); + $signaling = json_decode($config, true); + if (!is_array($signaling)) { + $signaling = []; + } + + $this->writeMixedInOutputFormat($input, $output, $signaling); + return 0; + } +} diff --git a/lib/Command/Signaling/VerifyKeys.php b/lib/Command/Signaling/VerifyKeys.php new file mode 100644 index 0000000..a208887 --- /dev/null +++ b/lib/Command/Signaling/VerifyKeys.php @@ -0,0 +1,67 @@ +setName('talk:signaling:verify-keys') + ->setDescription('Verify if the stored public key matches the stored private key for the signaling server') + ->addOption('update', null, InputOption::VALUE_NONE, 'Updates the stored public key to match the private key if there is a mis-match'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $update = $input->getOption('update'); + + $alg = $this->talkConfig->getSignalingTokenAlgorithm(); + $privateKey = $this->talkConfig->getSignalingTokenPrivateKey(); + $publicKey = $this->talkConfig->getSignalingTokenPublicKey(); + $publicKeyDerived = $this->talkConfig->deriveSignalingTokenPublicKey($privateKey, $alg); + + $output->writeln('Stored public key:'); + $output->writeln($publicKey); + $output->writeln('Derived public key:'); + $output->writeln($publicKeyDerived); + + if ($publicKey != $publicKeyDerived) { + if ($update) { + $output->writeln('Stored public key for algorithm ' . strtolower($alg) . ' did not match stored private key.'); + $output->writeln('A new public key was created and stored.'); + $this->config->setAppValue('spreed', 'signaling_token_pubkey_' . strtolower($alg), $publicKeyDerived); + + return 0; + } + + $output->writeln('Stored public key for algorithm ' . strtolower($alg) . ' does not match stored private key'); + return 1; + } + + $output->writeln('Stored public key for algorithm ' . strtolower($alg) . ' matches stored private key'); + + return 0; + } +} diff --git a/lib/Command/Stun/Add.php b/lib/Command/Stun/Add.php new file mode 100644 index 0000000..79b75b3 --- /dev/null +++ b/lib/Command/Stun/Add.php @@ -0,0 +1,68 @@ +setName('talk:stun:add') + ->setDescription('Add a new STUN server.') + ->addArgument( + 'server', + InputArgument::REQUIRED, + 'A domain name and port number separated by the colons, ex. stun.nextcloud.com:443' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $server = $input->getArgument('server'); + // check input, similar to stun-server.js + $host = parse_url($server, PHP_URL_HOST); + $port = parse_url($server, PHP_URL_PORT); + if (empty($host) || empty($port)) { + $output->writeln('Incorrect value. Must be stunserver:port.'); + return 1; + } + + $config = $this->config->getAppValue('spreed', 'stun_servers'); + $servers = json_decode($config, true); + + if ($servers === null || empty($servers) || !is_array($servers)) { + $servers = []; + } + + // check if the server is already in the list + foreach ($servers as $existingServer) { + if ($existingServer === "$host:$port") { + $output->writeln('Server already exists.'); + return 1; + } + } + + $servers[] = "$host:$port"; + + $this->config->setAppValue('spreed', 'stun_servers', json_encode($servers)); + $output->writeln('Added ' . "$host:$port" . '.'); + return 0; + } +} diff --git a/lib/Command/Stun/Delete.php b/lib/Command/Stun/Delete.php new file mode 100644 index 0000000..12c4adc --- /dev/null +++ b/lib/Command/Stun/Delete.php @@ -0,0 +1,66 @@ +setName('talk:stun:delete') + ->setDescription('Remove an existing STUN server.') + ->addArgument( + 'server', + InputArgument::REQUIRED, + 'A domain name and port number separated by the colons, ex. stun.nextcloud.com:443' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $server = $input->getArgument('server'); + + $config = $this->config->getAppValue('spreed', 'stun_servers'); + $servers = json_decode($config); + if (! is_array($servers)) { + $servers = []; + } + $count = count($servers); + // remove all occurrences of $server + $servers = array_filter($servers, function ($s) use ($server) { + return $s !== $server; + }); + $servers = array_values($servers); // reindex + + if (empty($servers)) { + $servers = ['stun.nextcloud.com:443']; + $this->config->setAppValue('spreed', 'stun_servers', json_encode($servers)); + $output->writeln('You deleted all STUN servers. A default STUN server was added.'); + } else { + $this->config->setAppValue('spreed', 'stun_servers', json_encode($servers)); + if ($count > count($servers)) { + $output->writeln('Deleted ' . $server . '.'); + } else { + $output->writeln('There is nothing to delete.'); + } + } + return 0; + } +} diff --git a/lib/Command/Stun/ListCommand.php b/lib/Command/Stun/ListCommand.php new file mode 100644 index 0000000..ee4aeca --- /dev/null +++ b/lib/Command/Stun/ListCommand.php @@ -0,0 +1,43 @@ +setName('talk:stun:list') + ->setDescription('List STUN servers.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $config = $this->config->getAppValue('spreed', 'stun_servers'); + $servers = json_decode($config); + if (!is_array($servers)) { + $servers = []; + } + + $this->writeArrayInOutputFormat($input, $output, $servers); + return 0; + } +} diff --git a/lib/Command/Turn/Add.php b/lib/Command/Turn/Add.php new file mode 100644 index 0000000..eeaf84b --- /dev/null +++ b/lib/Command/Turn/Add.php @@ -0,0 +1,128 @@ +setName('talk:turn:add') + ->setDescription('Add a TURN server.') + ->addArgument( + 'schemes', + InputArgument::REQUIRED, + 'Schemes, can be turn or turns or turn,turns.' + )->addArgument( + 'server', + InputArgument::REQUIRED, + 'A domain name, ex. turn.nextcloud.com' + )->addArgument( + 'protocols', + InputArgument::REQUIRED, + 'Protocols, can be udp or tcp or udp,tcp.' + )->addOption( + 'secret', + null, + InputOption::VALUE_REQUIRED, + 'A shard secret string' + )->addOption( + 'generate-secret', + null, + InputOption::VALUE_NONE, + 'Generate secret if set.' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $schemes = $input->getArgument('schemes'); + $server = $input->getArgument('server'); + $protocols = $input->getArgument('protocols'); + $secret = $input->getOption('secret'); + $generate = $input->getOption('generate-secret'); + + if (!in_array($schemes, ['turn', 'turns', 'turn,turns'])) { + $output->writeln('Not allowed schemes, must be turn or turns or turn,turns.'); + return 1; + } + if (!in_array($protocols, ['tcp', 'udp', 'udp,tcp'])) { + $output->writeln('Not allowed protocols, must be udp or tcp or udp,tcp.'); + return 1; + } + // quick validation, similar to turn-server.js + if (trim($server) === '') { + $output->writeln('Server cannot be empty.'); + return 1; + } + if (($generate === false && $secret === null) + || ($generate && $secret !== null)) { + $output->writeln('You must provide --secret or --generate-secret.'); + return 1; + } + if (!$generate && trim($secret) === '') { + $output->writeln('Secret cannot be empty.'); + return 1; + } + if ($generate) { + $secret = $this->secureRandom->generate(128); + } + if (stripos($server, 'https://') === 0) { + $server = substr($server, 8); + } + if (stripos($server, 'http://') === 0) { + $server = substr($server, 7); + } + + $config = $this->config->getAppValue('spreed', 'turn_servers'); + $servers = json_decode($config, true); + + if ($servers === null || empty($servers) || !is_array($servers)) { + $servers = []; + } + + //Checking if the server is already added + foreach ($servers as $existingServer) { + if ( + $existingServer['schemes'] === $schemes + && $existingServer['server'] === $server + && $existingServer['protocols'] === $protocols + ) { + $output->writeln('Server already exists with the same configuration.'); + return 1; + } + } + + + $servers[] = [ + 'schemes' => $schemes, + 'server' => $server, + 'secret' => $secret, // @todo: check the order + 'protocols' => $protocols, + ]; + + $this->config->setAppValue('spreed', 'turn_servers', json_encode($servers)); + $output->writeln('Added ' . $server . '.'); + return 0; + } +} diff --git a/lib/Command/Turn/Delete.php b/lib/Command/Turn/Delete.php new file mode 100644 index 0000000..6bc557f --- /dev/null +++ b/lib/Command/Turn/Delete.php @@ -0,0 +1,72 @@ +setName('talk:turn:delete') + ->setDescription('Remove an existing TURN server.') + ->addArgument( + 'schemes', + InputArgument::REQUIRED, + 'Schemes, can be turn or turns or turn,turns' + )->addArgument( + 'server', + InputArgument::REQUIRED, + 'A domain name, ex. turn.nextcloud.com' + )->addArgument( + 'protocols', + InputArgument::REQUIRED, + 'Protocols, can be udp or tcp or udp,tcp' + ); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $schemes = $input->getArgument('schemes'); + $server = $input->getArgument('server'); + $protocols = $input->getArgument('protocols'); + + $config = $this->config->getAppValue('spreed', 'turn_servers'); + $servers = json_decode($config, true); + + if ($servers === null || empty($servers) || !is_array($servers)) { + $servers = []; + } + + $count = count($servers); + // remove all occurrences which match $schemes, $server and $protocols + $servers = array_filter($servers, function ($s) use ($schemes, $server, $protocols) { + return $s['schemes'] !== $schemes || $s['server'] !== $server || $s['protocols'] !== $protocols; + }); + $servers = array_values($servers); // reindex + + $this->config->setAppValue('spreed', 'turn_servers', json_encode($servers)); + if ($count > count($servers)) { + $output->writeln('Deleted ' . $server . '.'); + } else { + $output->writeln('There is nothing to delete.'); + } + return 0; + } +} diff --git a/lib/Command/Turn/ListCommand.php b/lib/Command/Turn/ListCommand.php new file mode 100644 index 0000000..16a2361 --- /dev/null +++ b/lib/Command/Turn/ListCommand.php @@ -0,0 +1,43 @@ +setName('talk:turn:list') + ->setDescription('List TURN servers.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $config = $this->config->getAppValue('spreed', 'turn_servers'); + $servers = json_decode($config, true); + if (!is_array($servers)) { + $servers = []; + } + + $this->writeMixedInOutputFormat($input, $output, $servers); + return 0; + } +} diff --git a/lib/Command/User/Remove.php b/lib/Command/User/Remove.php new file mode 100644 index 0000000..fc190cc --- /dev/null +++ b/lib/Command/User/Remove.php @@ -0,0 +1,68 @@ +setName('talk:user:remove') + ->setDescription('Remove a user from all their rooms') + ->addOption( + 'user', + null, + InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, + 'Remove the given users from all rooms' + ) + ->addOption( + 'private-only', + null, + InputOption::VALUE_NONE, + 'Only remove the user from private rooms, retaining membership in public and open conversations as well as one-to-ones' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $userIds = $input->getOption('user'); + $privateOnly = $input->getOption('private-only'); + + $users = []; + foreach ($userIds as $userId) { + $user = $this->userManager->get($userId); + if (!$user) { + $output->writeln('' . sprintf("User '%s' not found.", $userId) . ''); + return 1; + } + $users[] = $user; + } + + foreach ($users as $user) { + $this->manager->removeUserFromAllRooms($user, $privateOnly); + } + + $output->writeln('Users successfully removed from all rooms.'); + return 0; + } +} diff --git a/lib/Command/User/TransferOwnership.php b/lib/Command/User/TransferOwnership.php new file mode 100644 index 0000000..d4254cb --- /dev/null +++ b/lib/Command/User/TransferOwnership.php @@ -0,0 +1,170 @@ +setName('talk:user:transfer-ownership') + ->setDescription('Adds the destination-user with the same participant type to all (not one-to-one) conversations of source-user') + ->addArgument( + 'source-user', + InputArgument::REQUIRED, + 'Owner of conversations which shall be moved' + ) + ->addArgument( + 'destination-user', + InputArgument::REQUIRED, + 'User who will be the new owner of the conversations' + ) + ->addOption( + 'include-non-moderator', + null, + InputOption::VALUE_NONE, + 'Also include conversations where the source-user is a normal user' + ) + ->addOption( + 'remove-source-user', + null, + InputOption::VALUE_NONE, + 'Remove the source-user from the conversations' + ) + ; + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $sourceUID = $input->getArgument('source-user'); + $destinationUID = $input->getArgument('destination-user'); + + $destinationUser = $this->userManager->get($destinationUID); + if ($destinationUser === null) { + $output->writeln('Destination user could not be found.'); + return 1; + } + + $includeNonModeratorRooms = $input->getOption('include-non-moderator'); + $removeSourceUser = $input->getOption('remove-source-user'); + + $modified = $federatedRooms = 0; + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_USERS, $sourceUID); + foreach ($rooms as $room) { + if ($room->getType() !== Room::TYPE_GROUP && $room->getType() !== Room::TYPE_PUBLIC) { + // Skip one-to-one, changelog and any other room types + continue; + } + + if ($room->getObjectType() === Room::OBJECT_TYPE_SAMPLE) { + // Skip sample rooms + continue; + } + + if ($room->isFederatedConversation()) { + $federatedRooms++; + continue; + } + + $sourceParticipant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_USERS, $sourceUID); + + if ($sourceParticipant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + continue; + } + + if (!$includeNonModeratorRooms && !$sourceParticipant->hasModeratorPermissions()) { + continue; + } + + try { + $destinationParticipant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_USERS, $destinationUser->getUID()); + + $targetType = $this->shouldUpdateParticipantType($sourceParticipant->getAttendee()->getParticipantType(), $destinationParticipant->getAttendee()->getParticipantType()); + + if ($targetType !== null) { + $this->participantService->updateParticipantType( + $room, + $destinationParticipant, + $sourceParticipant->getAttendee()->getParticipantType() + ); + $modified++; + } + } catch (ParticipantNotFoundException $e) { + $this->participantService->addUsers($room, [ + [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $destinationUser->getUID(), + 'displayName' => $destinationUser->getDisplayName(), + 'participantType' => $sourceParticipant->getAttendee()->getParticipantType(), + ] + ]); + $modified++; + } + + if ($removeSourceUser) { + $this->participantService->removeAttendee($room, $sourceParticipant, AAttendeeRemovedEvent::REASON_REMOVED); + } + } + + if ($federatedRooms > 0) { + $output->writeln('Could not transfer membership in ' . $federatedRooms . ' federated rooms.'); + } + + $output->writeln('Added or promoted user ' . $destinationUser->getUID() . ' in ' . $modified . ' rooms.'); + return 0; + } + + protected function shouldUpdateParticipantType(int $sourceParticipantType, int $destinationParticipantType): ?int { + if ($sourceParticipantType === Participant::OWNER) { + if ($destinationParticipantType === Participant::OWNER) { + return null; + } + return $sourceParticipantType; + } + + if ($sourceParticipantType === Participant::MODERATOR) { + if ($destinationParticipantType === Participant::OWNER || $destinationParticipantType === Participant::MODERATOR) { + return null; + } + return $sourceParticipantType; + } + + if ($sourceParticipantType === Participant::USER) { + if ($destinationParticipantType !== Participant::USER_SELF_JOINED) { + return null; + } + return $sourceParticipantType; + } + + return null; + } +} diff --git a/lib/Config.php b/lib/Config.php new file mode 100644 index 0000000..aeed875 --- /dev/null +++ b/lib/Config.php @@ -0,0 +1,823 @@ + */ + protected array $canEnableSIP = []; + + public function __construct( + protected IConfig $config, + protected IAppConfig $appConfig, + protected IUserConfig $userConfig, + private ISecureRandom $secureRandom, + private IGroupManager $groupManager, + private IUserManager $userManager, + private IURLGenerator $urlGenerator, + protected ITimeFactory $timeFactory, + private IEventDispatcher $dispatcher, + ) { + } + + /** + * @return string[] + */ + public function getAllowedTalkGroupIds(): array { + $groups = $this->config->getAppValue('spreed', 'allowed_groups', '[]'); + $groups = json_decode($groups, true); + return \is_array($groups) ? $groups : []; + } + + /** + * @return Participant::PRIVACY_* + */ + public function getUserReadPrivacy(string $userId): int { + return match ((int)$this->config->getUserValue( + $userId, + 'spreed', UserPreference::READ_STATUS_PRIVACY, + (string)Participant::PRIVACY_PUBLIC)) { + Participant::PRIVACY_PUBLIC => Participant::PRIVACY_PUBLIC, + default => Participant::PRIVACY_PRIVATE, + }; + } + + /** + * @return Participant::PRIVACY_* + */ + public function getUserTypingPrivacy(string $userId): int { + return match ((int)$this->config->getUserValue( + $userId, + 'spreed', UserPreference::TYPING_PRIVACY, + (string)Participant::PRIVACY_PUBLIC)) { + Participant::PRIVACY_PUBLIC => Participant::PRIVACY_PUBLIC, + default => Participant::PRIVACY_PRIVATE, + }; + } + + /** + * @return string[] + */ + public function getSIPGroups(): array { + $groups = $this->config->getAppValue('spreed', 'sip_bridge_groups', '[]'); + $groups = json_decode($groups, true); + return \is_array($groups) ? $groups : []; + } + + public function isSIPConfigured(): bool { + return $this->getSIPSharedSecret() !== '' + && $this->getDialInInfo() !== ''; + } + + /** + * Determine if Talk federation is enabled on this instance + */ + public function isFederationEnabled(): bool { + // TODO: Set to default true once implementation is complete + return $this->config->getAppValue('spreed', 'federation_enabled', 'no') === 'yes'; + } + + public function isFederationEnabledForUserId(IUser $user): bool { + $allowedGroups = $this->appConfig->getAppValueArray('federation_allowed_groups', lazy: true); + if (empty($allowedGroups)) { + return true; + } + + $userGroups = $this->groupManager->getUserGroupIds($user); + return !empty(array_intersect($allowedGroups, $userGroups)); + } + + public function isBreakoutRoomsEnabled(): bool { + return $this->config->getAppValue('spreed', 'breakout_rooms', 'yes') === 'yes'; + } + + public function getDialInInfo(): string { + return $this->config->getAppValue('spreed', 'sip_bridge_dialin_info'); + } + + public function getSIPSharedSecret(): string { + return $this->config->getAppValue('spreed', 'sip_bridge_shared_secret'); + } + + public function canUserEnableSIP(IUser $user): bool { + if (isset($this->canEnableSIP[$user->getUID()])) { + return $this->canEnableSIP[$user->getUID()]; + } + + $this->canEnableSIP[$user->getUID()] = false; + + $allowedGroups = $this->getSIPGroups(); + if (empty($allowedGroups)) { + $this->canEnableSIP[$user->getUID()] = true; + } else { + $userGroups = $this->groupManager->getUserGroupIds($user); + $this->canEnableSIP[$user->getUID()] = !empty(array_intersect($allowedGroups, $userGroups)); + } + + return $this->canEnableSIP[$user->getUID()]; + } + + public function canUserDialOutSIP(IUser $user): bool { + if (!$this->isSIPDialOutEnabled()) { + return false; + } + + return $this->canUserEnableSIP($user); + } + + public function isSIPDialOutEnabled(): bool { + return $this->config->getAppValue('spreed', 'sip_dialout', 'no') !== 'no'; + } + + public function getRecordingServers(): array { + $config = $this->config->getAppValue('spreed', 'recording_servers'); + $recording = json_decode($config, true); + + if (!is_array($recording) || !isset($recording['servers'])) { + return []; + } + + return $recording['servers']; + } + + public function getRecordingSecret(): string { + $config = $this->config->getAppValue('spreed', 'recording_servers'); + $recording = json_decode($config, true); + + if (!is_array($recording)) { + return ''; + } + + return $recording['secret']; + } + + public function isRecordingEnabled(): bool { + if ($this->getSignalingMode() === self::SIGNALING_INTERNAL) { + return false; + } + + if ($this->config->getAppValue('spreed', 'call_recording', 'yes') !== 'yes') { + return false; + } + + if ($this->getRecordingSecret() === '') { + return false; + } + + $recordingServers = $this->getRecordingServers(); + if (empty($recordingServers)) { + return false; + } + + return true; + } + + /** + * @return RecordingService::CONSENT_REQUIRED_* + */ + public function recordingConsentRequired(): int { + if (!$this->isRecordingEnabled()) { + return RecordingService::CONSENT_REQUIRED_NO; + } + + return $this->getRecordingConsentConfig(); + } + + /** + * @return RecordingService::CONSENT_REQUIRED_* + */ + public function getRecordingConsentConfig(): int { + return match ((int)$this->config->getAppValue('spreed', 'recording_consent', (string)RecordingService::CONSENT_REQUIRED_NO)) { + RecordingService::CONSENT_REQUIRED_YES => RecordingService::CONSENT_REQUIRED_YES, + RecordingService::CONSENT_REQUIRED_OPTIONAL => RecordingService::CONSENT_REQUIRED_OPTIONAL, + default => RecordingService::CONSENT_REQUIRED_NO, + }; + } + + public function getRecordingFolder(string $userId): string { + return $this->config->getUserValue( + $userId, + 'spreed', + UserPreference::RECORDING_FOLDER, + $this->getAttachmentFolder($userId) . '/Recording' + ); + } + + public function isDisabledForUser(IUser $user): bool { + $allowedGroups = $this->getAllowedTalkGroupIds(); + if (empty($allowedGroups)) { + return false; + } + + $userGroups = $this->groupManager->getUserGroupIds($user); + return empty(array_intersect($allowedGroups, $userGroups)); + } + + /** + * @return string[] + */ + public function getAllowedConversationsGroupIds(): array { + $groups = $this->config->getAppValue('spreed', 'start_conversations', '[]'); + $groups = json_decode($groups, true); + return \is_array($groups) ? $groups : []; + } + + public function isNotAllowedToCreateConversations(IUser $user): bool { + $allowedGroups = $this->getAllowedConversationsGroupIds(); + if (empty($allowedGroups)) { + return false; + } + + $userGroups = $this->groupManager->getUserGroupIds($user); + return empty(array_intersect($allowedGroups, $userGroups)); + } + + /** + * @return int<0, 255> + * @psalm-return int-mask-of + */ + public function getDefaultPermissions(): int { + // Admin configured default permissions + $configurableDefault = $this->config->getAppValue('spreed', 'default_permissions'); + if ($configurableDefault !== '') { + return min(Attendee::PERMISSIONS_MAX_CUSTOM, max(Attendee::PERMISSIONS_DEFAULT, (int)$configurableDefault)); + } + + // Falling back to an unrestricted set of permissions, only ignoring the lobby is off + return Attendee::PERMISSIONS_MAX_DEFAULT & ~Attendee::PERMISSIONS_LOBBY_IGNORE; + } + + public function getAttachmentFolder(string $userId): string { + $defaultAttachmentFolder = $this->config->getAppValue('spreed', 'default_attachment_folder', '/Talk'); + return $this->config->getUserValue($userId, 'spreed', UserPreference::ATTACHMENT_FOLDER, $defaultAttachmentFolder); + } + + /** + * @return string[] + */ + public function getAllServerUrlsForCSP(): array { + $urls = []; + + foreach ($this->getStunServers() as $server) { + $urls[] = $server; + } + + foreach ($this->getTurnServers() as $server) { + $urls[] = $server['server']; + } + + foreach ($this->getSignalingServers() as $server) { + $urls[] = $this->getWebSocketDomainForSignalingServer($server['server']); + } + + return array_filter($urls); + } + + protected function getWebSocketDomainForSignalingServer(string $url): string { + if (str_ends_with($url, ':') || str_ends_with($url, ':/') || str_ends_with($url, '://')) { + return ''; + } + + $url .= '/'; + if (str_starts_with($url, 'https://')) { + return 'wss://' . substr($url, 8, strpos($url, '/', 8) - 8); + } + + if (str_starts_with($url, 'http://')) { + return 'ws://' . substr($url, 7, strpos($url, '/', 7) - 7); + } + + if (str_starts_with($url, 'wss://')) { + return substr($url, 0, strpos($url, '/', 6)); + } + + if (str_starts_with($url, 'ws://')) { + return substr($url, 0, strpos($url, '/', 5)); + } + + $protocol = strpos($url, '://'); + if ($protocol !== false) { + return substr($url, $protocol + 3, strpos($url, '/', $protocol + 3) - $protocol - 3); + } + + return substr($url, 0, strpos($url, '/')); + } + + /** + * @return string[] + */ + public function getStunServers(): array { + $config = $this->config->getAppValue('spreed', 'stun_servers', json_encode(['stun.nextcloud.com:443'])); + $servers = json_decode($config, true); + + if (!is_array($servers) || empty($servers)) { + $servers = ['stun.nextcloud.com:443']; + } + + if (!$this->config->getSystemValueBool('has_internet_connection', true)) { + $servers = array_filter($servers, static function ($server) { + return $server !== 'stun.nextcloud.com:443'; + }); + } + + return $servers; + } + + /** + * Generates a username and password for the TURN server + * + * @return array + */ + public function getTurnServers(bool $withEvent = true): array { + $config = $this->config->getAppValue('spreed', 'turn_servers'); + $servers = json_decode($config, true); + + if ($servers === null || empty($servers) || !is_array($servers)) { + $servers = []; + } + + if ($withEvent) { + $event = new BeforeTurnServersGetEvent($servers); + $this->dispatcher->dispatchTyped($event); + $servers = $event->getServers(); + } + + foreach ($servers as $key => $server) { + $servers[$key]['schemes'] = $server['schemes'] ?? 'turn'; + } + + return $servers; + } + + /** + * Prepares a list of TURN servers with username and password + * + * @return array + */ + public function getTurnSettings(): array { + $servers = $this->getTurnServers(); + + if (empty($servers)) { + return []; + } + + // Credentials are valid for 24h + // FIXME add the TTL to the response and properly reconnect then + $timestamp = $this->timeFactory->getTime() + 86400; + $rnd = $this->secureRandom->generate(16); + $username = $timestamp . ':' . $rnd; + + foreach ($servers as $server) { + $u = $server['username'] ?? $username; + $password = $server['password'] ?? base64_encode(hash_hmac('sha1', $u, $server['secret'], true)); + + $turnSettings[] = [ + 'schemes' => $server['schemes'], + 'server' => $server['server'], + 'username' => $u, + 'password' => $password, + 'protocols' => $server['protocols'], + ]; + } + + return $turnSettings; + } + + /** + * @psalm-return self::SIGNALING_INTERNAL|self::SIGNALING_EXTERNAL|self::SIGNALING_CLUSTER_CONVERSATION + */ + public function getSignalingMode(bool $cleanExternalSignaling = true): string { + $validModes = [ + self::SIGNALING_INTERNAL, + self::SIGNALING_EXTERNAL, + self::SIGNALING_CLUSTER_CONVERSATION, + ]; + + $mode = $this->config->getAppValue('spreed', 'signaling_mode', null); + if ($mode === self::SIGNALING_INTERNAL) { + return self::SIGNALING_INTERNAL; + } + + $numSignalingServers = count($this->getSignalingServers()); + if ($numSignalingServers === 0) { + return self::SIGNALING_INTERNAL; + } + if ($numSignalingServers === 1 + && $cleanExternalSignaling) { + return self::SIGNALING_EXTERNAL; + } + + return $mode === self::SIGNALING_CLUSTER_CONVERSATION ? $mode : self::SIGNALING_EXTERNAL; + } + + /** + * Returns list of signaling servers. Each entry contains the URL of the + * server and a flag whether the certificate should be verified. + * + * @return array + */ + public function getSignalingServers(): array { + $config = $this->config->getAppValue('spreed', 'signaling_servers'); + $signaling = json_decode($config, true); + if (!is_array($signaling) || !isset($signaling['servers'])) { + return []; + } + + return $signaling['servers']; + } + + /** + * @return string + */ + public function getSignalingSecret(): string { + $config = $this->config->getAppValue('spreed', 'signaling_servers'); + $signaling = json_decode($config, true); + + if (!is_array($signaling)) { + return ''; + } + + return $signaling['secret']; + } + + public function getHideSignalingWarning(): bool { + return $this->config->getAppValue('spreed', 'hide_signaling_warning', 'no') === 'yes'; + } + + /** + * @param int $version + * @param string|null $userId + * @return string + */ + public function getSignalingTicket(int $version, ?string $userId, ?string $cloudId = null): string { + switch ($version) { + case self::SIGNALING_TICKET_V2: + return $this->getSignalingTicketV2($userId, $cloudId); + case self::SIGNALING_TICKET_V1: + default: + return $this->getSignalingTicketV1($userId); + } + } + + /** + * @param string|null $userId + * @return string + */ + private function getSignalingTicketV1(?string $userId): string { + if (empty($userId)) { + $secret = $this->config->getAppValue('spreed', 'signaling_ticket_secret'); + } else { + $secret = $this->config->getUserValue($userId, 'spreed', 'signaling_ticket_secret'); + } + if (empty($secret)) { + // Create secret lazily on first access. + // TODO(fancycode): Is there a possibility for a race condition? + $secret = $this->secureRandom->generate(255); + if (empty($userId)) { + $this->config->setAppValue('spreed', 'signaling_ticket_secret', $secret); + } else { + $this->config->setUserValue($userId, 'spreed', 'signaling_ticket_secret', $secret); + } + } + + // Format is "random:timestamp:userid:checksum" and "checksum" is the + // SHA256-HMAC of "random:timestamp:userid" with the per-user secret. + $random = $this->secureRandom->generate(16); + $timestamp = $this->timeFactory->getTime(); + $data = $random . ':' . $timestamp . ':' . $userId; + $hash = hash_hmac('sha256', $data, $secret); + return $data . ':' . $hash; + } + + private function ensureSignalingTokenKeys(string $alg): void { + $secret = $this->config->getAppValue('spreed', 'signaling_token_privkey_' . strtolower($alg)); + if ($secret) { + return; + } + + if (str_starts_with($alg, 'ES')) { + $privKey = openssl_pkey_new([ + 'curve_name' => $alg === 'ES384' ? 'secp384r1' : 'prime256v1', + 'private_key_bits' => 2048, + 'private_key_type' => OPENSSL_KEYTYPE_EC, + ]); + $pubKey = openssl_pkey_get_details($privKey); + $public = $pubKey['key']; + if (!openssl_pkey_export($privKey, $secret)) { + throw new \Exception('Could not export private key'); + } + } elseif (str_starts_with($alg, 'RS')) { + $privKey = openssl_pkey_new([ + 'private_key_bits' => 2048, + 'private_key_type' => OPENSSL_KEYTYPE_RSA, + ]); + $pubKey = openssl_pkey_get_details($privKey); + $public = $pubKey['key']; + if (!openssl_pkey_export($privKey, $secret)) { + throw new \Exception('Could not export private key'); + } + } elseif ($alg === 'EdDSA') { + $privKey = sodium_crypto_sign_keypair(); + $public = base64_encode(sodium_crypto_sign_publickey($privKey)); + $secret = base64_encode(sodium_crypto_sign_secretkey($privKey)); + } else { + throw new \Exception('Unsupported algorithm ' . $alg); + } + + $this->config->setAppValue('spreed', 'signaling_token_privkey_' . strtolower($alg), $secret); + $this->config->setAppValue('spreed', 'signaling_token_pubkey_' . strtolower($alg), $public); + } + + public function getSignalingTokenAlgorithm(): string { + return $this->config->getAppValue('spreed', 'signaling_token_alg', 'ES256'); + } + + public function getSignalingTokenPrivateKey(?string $alg = null): string { + if (!$alg) { + $alg = $this->getSignalingTokenAlgorithm(); + } + $this->ensureSignalingTokenKeys($alg); + + return $this->config->getAppValue('spreed', 'signaling_token_privkey_' . strtolower($alg)); + } + + public function getSignalingTokenPublicKey(?string $alg = null): string { + if (!$alg) { + $alg = $this->getSignalingTokenAlgorithm(); + } + $this->ensureSignalingTokenKeys($alg); + + return $this->config->getAppValue('spreed', 'signaling_token_pubkey_' . strtolower($alg)); + } + + public function deriveSignalingTokenPublicKey(string $privateKey, string $alg): string { + // Clear any existing (unrelated) OpenSSL errors + while (openssl_error_string() !== false); + + if (str_starts_with($alg, 'ES') || str_starts_with($alg, 'RS')) { + $opensslPrivateKey = openssl_pkey_get_private($privateKey); + $this->throwOnOpensslError(); + + $pubKey = openssl_pkey_get_details($opensslPrivateKey); + $this->throwOnOpensslError(); + + $public = $pubKey['key']; + if (!openssl_pkey_export($privateKey, $secret)) { + throw new \Exception('Could not export private key'); + } + } elseif ($alg === 'EdDSA') { + $public = base64_encode(sodium_crypto_sign_publickey_from_secretkey($privateKey)); + } else { + throw new \Exception('Unsupported algorithm ' . $alg); + } + + return $public; + } + + private function throwOnOpensslError() { + $errors = []; + while ($error = openssl_error_string()) { + $errors[] = $error; + } + + if (!empty($errors)) { + throw new \Exception("OpenSSL error:\n" . implode("\n", $errors)); + } + } + + /** + * @param IUser $user + * @return array + */ + public function getSignalingUserData(IUser $user): array { + return [ + 'displayname' => $user->getDisplayName(), + ]; + } + + public function getSignalingFederatedUserData(): array { + /** @var Authenticator $authenticator */ + $authenticator = \OCP\Server::get(Authenticator::class); + if (!$authenticator->isFederationRequest()) { + return []; + } + + return [ + 'displayname' => $authenticator->getParticipant()->getAttendee()->getDisplayName(), + ]; + } + + /** + * @param string|null $userId if given, the id of a user in this instance or + * a cloud id. + * @return string + */ + private function getSignalingTicketV2(?string $userId, ?string $cloudId): string { + $timestamp = $this->timeFactory->getTime(); + $data = [ + 'iss' => $this->urlGenerator->getAbsoluteURL(''), + 'iat' => $timestamp, + 'exp' => $timestamp + 60, // Valid for 1 minute. + ]; + $user = $userId !== null ? $this->userManager->get($userId) : null; + if ($user instanceof IUser) { + $data['sub'] = $user->getUID(); + $data['userdata'] = $this->getSignalingUserData($user); + } elseif ($cloudId !== null && $cloudId !== '') { + $data['sub'] = $cloudId; + $extendedData = $this->getSignalingFederatedUserData(); + if (!empty($extendedData)) { + $data['userdata'] = $extendedData; + } + } + + $alg = $this->getSignalingTokenAlgorithm(); + $secret = $this->getSignalingTokenPrivateKey($alg); + $token = JWT::encode($data, $secret, $alg); + return $token; + } + + /** + * @param string|null $userId + * @param string $ticket + * @return bool + */ + public function validateSignalingTicket(?string $userId, string $ticket): bool { + if (empty($userId)) { + $secret = $this->config->getAppValue('spreed', 'signaling_ticket_secret'); + } else { + $secret = $this->config->getUserValue($userId, 'spreed', 'signaling_ticket_secret'); + } + if (empty($secret)) { + return false; + } + + $lastColon = strrpos($ticket, ':'); + if ($lastColon === false) { + // Immediately reject invalid formats. + return false; + } + + // TODO(fancycode): Should we reject tickets that are too old? + $data = substr($ticket, 0, $lastColon); + $hash = hash_hmac('sha256', $data, $secret); + return hash_equals($hash, substr($ticket, $lastColon + 1)); + } + + public function getGridVideosLimit(): int { + return (int)$this->config->getAppValue('spreed', 'grid_videos_limit', '19'); // 5*4 - self + } + + public function getGridVideosLimitEnforced(): bool { + return $this->config->getAppValue('spreed', 'grid_videos_limit_enforced', 'no') === 'yes'; + } + + /** + * User setting falling back to admin defined app config + * + * @param ?string $userId + * @return bool + */ + public function getCallsStartWithoutMedia(?string $userId): bool { + if ($userId !== null) { + $userSetting = $this->config->getUserValue($userId, 'spreed', UserPreference::CALLS_START_WITHOUT_MEDIA); + if ($userSetting === 'yes' || $userSetting === 'no') { + return $userSetting === 'yes'; + } + } + + return $this->appConfig->getAppValueBool('calls_start_without_media'); + } + + /** + * User setting for blur background + * + * @param ?string $userId + * @return bool + */ + public function getBlurVirtualBackground(?string $userId): bool { + if ($userId !== null) { + $userSetting = $this->config->getUserValue($userId, 'spreed', UserPreference::BLUR_VIRTUAL_BACKGROUND); + return $userSetting === 'yes'; + } + return false; + } + + /** + * User setting for conversations list style + * + * @param ?string $userId + * @return UserPreference::CONVERSATION_LIST_STYLE_* + */ + public function getConversationsListStyle(?string $userId): string { + if ($userId !== null) { + $userSetting = $this->config->getUserValue( + $userId, + 'spreed', + UserPreference::CONVERSATIONS_LIST_STYLE, + UserPreference::CONVERSATION_LIST_STYLE_TWO_LINES + ); + + if (in_array($userSetting, [UserPreference::CONVERSATION_LIST_STYLE_TWO_LINES, UserPreference::CONVERSATION_LIST_STYLE_COMPACT], true)) { + return $userSetting; + } + } + return UserPreference::CONVERSATION_LIST_STYLE_TWO_LINES; + } + + /** + * User setting falling back to admin defined app config + */ + public function getInactiveLockTime(): int { + return $this->appConfig->getAppValueInt('inactivity_lock_after_days'); + } + + public function enableLobbyOnLockedRooms(): bool { + return $this->appConfig->getAppValueBool('inactivity_enable_lobby'); + } + + /** + * @param self::EXPERIMENTAL_* $experiment + */ + public function hasExperiment(int $experiment): bool { + return $this->appConfig->getAppValueInt('experiments_users') & $experiment + || $this->appConfig->getAppValueInt('experiments_guests') & $experiment; + } + + public function isPasswordEnforced(): bool { + return $this->appConfig->getAppValueBool('force_passwords'); + } + + public function isCallEndToEndEncryptionEnabled(): bool { + if ($this->getSignalingMode() !== self::SIGNALING_EXTERNAL) { + return false; + } + + // TODO Default value will be set to true, once all mobile clients support it. + return $this->appConfig->getAppValueBool('call_end_to_end_encryption'); + } + + public function isChatRelayEnabled(): bool { + $isEnabled + = (max(0, $this->appConfig->getAppValueInt('experiments_users')) + | max(0, $this->appConfig->getAppValueInt('experiments_guests')) + ) + & self::EXPERIMENT_CHAT_RELAY; + return $isEnabled === self::EXPERIMENT_CHAT_RELAY; + } + + public function getPlaySoundsForUser(?IUser $user): bool { + if (!$user instanceof IUser) { + return $this->getPlaySoundsDefaultForGuests(); + } + return $this->userConfig->getValueBool($user->getUID(), Application::APP_ID, UserPreference::PLAY_SOUNDS); + } + + public function getPlaySoundsDefaultForGuests(): bool { + return $this->appConfig->getAppValueBool('guests_play_sounds', true); + } +} diff --git a/lib/ContactsMenu/Providers/CallProvider.php b/lib/ContactsMenu/Providers/CallProvider.php new file mode 100644 index 0000000..b8e5ce1 --- /dev/null +++ b/lib/ContactsMenu/Providers/CallProvider.php @@ -0,0 +1,63 @@ +getProperty('UID'); + + if ($uid === null) { + // Nothing to do + return; + } + + if ($entry->getProperty('isLocalSystemBook') !== true) { + // Not internal user + return; + } + + $user = $this->userManager->get($uid); + if (!$user instanceof IUser) { + // No valid user object + return; + } + + if ($this->config->isDisabledForUser($user)) { + // User can not use Talk + return; + } + + $talkAction = $this->l10n->t('Talk to %s', [$user->getDisplayName()]); + $iconUrl = $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath('spreed', 'app-dark.svg')); + $callUrl = $this->urlGenerator->linkToRouteAbsolute('spreed.Page.index') . '?callUser=' . $user->getUID(); + $action = $this->actionFactory->newLinkAction($iconUrl, $talkAction, $callUrl, Application::APP_ID); + $entry->addAction($action); + } +} diff --git a/lib/Controller/AEnvironmentAwareOCSController.php b/lib/Controller/AEnvironmentAwareOCSController.php new file mode 100644 index 0000000..402b832 --- /dev/null +++ b/lib/Controller/AEnvironmentAwareOCSController.php @@ -0,0 +1,76 @@ +apiVersion = $apiVersion; + } + + public function getAPIVersion(): int { + return $this->apiVersion; + } + + public function setRoom(Room $room): void { + $this->room = $room; + } + + public function getRoom(): ?Room { + return $this->room; + } + + public function setParticipant(Participant $participant): void { + $this->participant = $participant; + } + + public function getParticipant(): ?Participant { + return $this->participant; + } + + public function setInvitation(Invitation $invitation): void { + $this->invitation = $invitation; + } + + public function getInvitation(): ?Invitation { + return $this->invitation; + } + + /** + * Following the logic of {@see Dispatcher::executeController} + * @return string Either 'json' or 'xml' + * @psalm-return 'json'|'xml' + */ + public function getResponseFormat(): string { + // get format from the url format or request format parameter + $format = $this->request->getParam('format'); + + // if none is given try the first Accept header + if ($format === null) { + $headers = $this->request->getHeader('accept'); + /** + * Default value of + * @see OCSController::buildResponse() + */ + $format = $this->getResponderByHTTPHeader($headers, 'xml'); + } + + return $format; + } +} diff --git a/lib/Controller/AvatarController.php b/lib/Controller/AvatarController.php new file mode 100644 index 0000000..ce731ec --- /dev/null +++ b/lib/Controller/AvatarController.php @@ -0,0 +1,333 @@ +|DataResponse + * + * 200: Avatar uploaded successfully + * 400: Avatar invalid + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function uploadAvatar(): DataResponse { + try { + $file = $this->request->getUploadedFile('file'); + $this->avatarService->setAvatarFromRequest($this->getRoom(), $file); + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->getRoom(), + $this->participant, + )); + } catch (InvalidArgumentException $e) { + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } catch (\Exception $e) { + $this->logger->error('Failed to post avatar', [ + 'exception' => $e, + ]); + + return new DataResponse(['message' => $this->l->t('An error occurred. Please contact your administrator.')], Http::STATUS_BAD_REQUEST); + } + } + + /** + * Set an emoji as avatar + * + * @param string $emoji Emoji + * @param ?string $color Color of the emoji + * @return DataResponse|DataResponse + * + * 200: Avatar set successfully + * 400: Setting emoji avatar is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function emojiAvatar(string $emoji, ?string $color): DataResponse { + try { + $this->avatarService->setAvatarFromEmoji($this->getRoom(), $emoji, $color); + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->getRoom(), + $this->participant, + )); + } catch (InvalidArgumentException $e) { + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } catch (\Exception $e) { + $this->logger->error('Failed to post avatar', [ + 'exception' => $e, + ]); + + return new DataResponse(['message' => $this->l->t('An error occurred. Please contact your administrator.')], Http::STATUS_BAD_REQUEST); + } + } + + /** + * Get the avatar of a room + * + * @param bool $darkTheme Theme used for background + * @return FileDisplayResponse + * + * 200: Room avatar returned + */ + #[FederationSupported] + #[PublicPage] + #[NoCSRFRequired] + #[AllowWithoutParticipantWhenPendingInvitation] + #[RequireParticipantOrLoggedInAndListedConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getAvatar(bool $darkTheme = false): FileDisplayResponse { + // Cache for 1 day + $cacheDuration = 60 * 60 * 24; + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\AvatarController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\AvatarController::class); + try { + return $proxy->getAvatar($this->room, $this->participant, $this->invitation, $darkTheme); + } catch (CannotReachRemoteException) { + // Falling back to a local "globe" avatar for indicating the federation + // Cache for 15 minutes only + $cacheDuration = 15 * 60; + } + } + $file = $this->avatarService->getAvatar($this->getRoom(), $this->userSession->getUser(), $darkTheme); + + $response = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => $file->getMimeType()]); + $response->cacheFor($cacheDuration, false, true); + return $response; + } + + /** + * Get the dark mode avatar of a room + * + * @return FileDisplayResponse + * + * 200: Room avatar returned + */ + #[FederationSupported] + #[PublicPage] + #[NoCSRFRequired] + #[AllowWithoutParticipantWhenPendingInvitation] + #[RequireParticipantOrLoggedInAndListedConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getAvatarDark(): FileDisplayResponse { + return $this->getAvatar(true); + } + + /** + * Get the avatar of a cloudId user when inviting users while creating a conversation + * + * @param int $size Avatar size + * @psalm-param 64|512 $size + * @param string $cloudId Federation CloudID to get the avatar for + * @param bool $darkTheme Theme used for background + * @return FileDisplayResponse + * + * 200: User avatar returned + */ + #[FederationSupported] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[NoAdminRequired] + #[NoCSRFRequired] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getUserProxyAvatarWithoutRoom(int $size, string $cloudId, bool $darkTheme = false): FileDisplayResponse { + return $this->getUserProxyAvatar($size, $cloudId, $darkTheme); + } + + /** + * Get the dark mode avatar of a cloudId user when inviting users while creating a conversation + * + * @param int $size Avatar size + * @psalm-param 64|512 $size + * @param string $cloudId Federation CloudID to get the avatar for + * @return FileDisplayResponse + * + * 200: User avatar returned + */ + #[FederationSupported] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[NoAdminRequired] + #[NoCSRFRequired] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getUserProxyAvatarDarkWithoutRoom(int $size, string $cloudId): FileDisplayResponse { + return $this->getUserProxyAvatar($size, $cloudId, true); + } + + /** + * Get the avatar of a cloudId user + * + * @param int $size Avatar size + * @psalm-param 64|512 $size + * @param string $cloudId Federation CloudID to get the avatar for + * @param bool $darkTheme Theme used for background + * @return FileDisplayResponse + * + * 200: User avatar returned + */ + #[FederationSupported] + #[BruteForceProtection(action: 'talkRoomToken')] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[PublicPage] + #[NoCSRFRequired] + #[AllowWithoutParticipantWhenPendingInvitation] + #[RequireLoggedInParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getUserProxyAvatar(int $size, string $cloudId, bool $darkTheme = false): FileDisplayResponse { + try { + $resolvedCloudId = $this->cloudIdManager->resolveCloudId($cloudId); + } catch (\InvalidArgumentException) { + return $this->getPlaceholderResponse($darkTheme); + } + + $ownId = $this->cloudIdManager->getCloudId($this->userSession->getUser()->getCloudId(), null); + + /** + * Reach out to the remote server to get the avatar + */ + if ($ownId->getRemote() !== $resolvedCloudId->getRemote()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\AvatarController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\AvatarController::class); + try { + return $proxy->getUserProxyAvatar($resolvedCloudId->getRemote(), $resolvedCloudId->getUser(), $size, $darkTheme); + } catch (CannotReachRemoteException) { + // Falling back to a local "user" avatar + return $this->getPlaceholderResponse($darkTheme); + } + } + + /** + * We are the server that hosts the user, so getting it from the avatar manager + */ + try { + $avatar = $this->avatarManager->getAvatar($resolvedCloudId->getUser()); + $avatarFile = $avatar->getFile($size, $darkTheme); + } catch (\Exception) { + return $this->getPlaceholderResponse($darkTheme); + } + + $response = new FileDisplayResponse( + $avatarFile, + Http::STATUS_OK, + ['Content-Type' => $avatarFile->getMimeType()], + ); + // Cache for 1 day + $response->cacheFor(60 * 60 * 24, false, true); + return $response; + } + + /** + * Get the dark mode avatar of a cloudId user + * + * @param int $size Avatar size + * @psalm-param 64|512 $size + * @param string $cloudId Federation CloudID to get the avatar for + * @return FileDisplayResponse + * + * 200: User avatar returned + */ + #[FederationSupported] + #[BruteForceProtection(action: 'talkRoomToken')] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[PublicPage] + #[NoCSRFRequired] + #[AllowWithoutParticipantWhenPendingInvitation] + #[RequireLoggedInParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getUserProxyAvatarDark(int $size, string $cloudId): FileDisplayResponse { + return $this->getUserProxyAvatar($size, $cloudId, true); + } + + /** + * Get the placeholder avatar + * + * @param bool $darkTheme Theme used for background + * @return FileDisplayResponse + * + * 200: User avatar returned + */ + protected function getPlaceholderResponse(bool $darkTheme): FileDisplayResponse { + $file = $this->avatarService->getPersonPlaceholder($darkTheme); + $response = new FileDisplayResponse( + $file, + Http::STATUS_OK, + ['Content-Type' => $file->getMimeType()], + ); + $response->cacheFor(60 * 15, false, true); + return $response; + + } + + /** + * Delete the avatar of a room + * + * @return DataResponse + * + * 200: Avatar removed successfully + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function deleteAvatar(): DataResponse { + $this->avatarService->deleteAvatar($this->getRoom()); + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->getRoom(), + $this->participant, + )); + } +} diff --git a/lib/Controller/BanController.php b/lib/Controller/BanController.php new file mode 100644 index 0000000..6501a76 --- /dev/null +++ b/lib/Controller/BanController.php @@ -0,0 +1,108 @@ +|DataResponse + * + * 200: Ban successfully + * 400: Actor information is invalid + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function banActor(string $actorType, string $actorId, string $internalNote = ''): DataResponse { + try { + $moderator = $this->participant->getAttendee(); + + $ban = $this->banService->createBan( + $this->room, + $moderator->getActorType(), + $moderator->getActorId(), + $moderator->getDisplayName(), + $actorType, + $actorId, + $this->timeFactory->getDateTime(), + $internalNote + ); + + return new DataResponse($ban->jsonSerialize(), Http::STATUS_OK); + } catch (\InvalidArgumentException $e) { + /** @var 'bannedActor'|'internalNote'|'moderator'|'self' $message */ + $message = $e->getMessage(); + return new DataResponse([ + 'error' => $message, + ], Http::STATUS_BAD_REQUEST); + } + } + + /** + * List the bans of a conversation + * + * Required capability: `ban-v1` + * + * @return DataResponse, array{}> + * + * 200: List all bans + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function listBans(): DataResponse { + $bans = $this->banService->getBansForRoom($this->room->getId()); + $result = array_map(static fn (Ban $ban): array => $ban->jsonSerialize(), $bans); + return new DataResponse($result, Http::STATUS_OK); + } + + /** + * Unban an actor or IP address + * + * Required capability: `ban-v1` + * + * @param int $banId ID of the ban to be removed + * @return DataResponse + * + * 200: Unban successfully or not found + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function unbanActor(int $banId): DataResponse { + $this->banService->findAndDeleteBanByIdForRoom($banId, $this->room->getId()); + return new DataResponse(null, Http::STATUS_OK); + } +} diff --git a/lib/Controller/BotController.php b/lib/Controller/BotController.php new file mode 100644 index 0000000..f02c3c5 --- /dev/null +++ b/lib/Controller/BotController.php @@ -0,0 +1,493 @@ +request->getHeader('x-nextcloud-talk-bot-random'); + if (empty($random) || strlen($random) < 32) { + $this->logger->error('Invalid Random received from bot response'); + throw new \InvalidArgumentException('Invalid Random received from bot response', Http::STATUS_BAD_REQUEST); + } + $checksum = $this->request->getHeader('x-nextcloud-talk-bot-signature'); + if (empty($checksum)) { + $this->logger->error('Invalid Signature received from bot response'); + throw new \InvalidArgumentException('Invalid Signature received from bot response', Http::STATUS_BAD_REQUEST); + } + + $bots = $this->botService->getBotsForToken($token, Bot::FEATURE_RESPONSE); + foreach ($bots as $botAttempt) { + try { + $this->checksumVerificationService->validateRequest( + $random, + $checksum, + $botAttempt->getBotServer()->getSecret(), + $message + ); + + if (!($botAttempt->getBotServer()->getFeatures() & Bot::FEATURE_RESPONSE)) { + $this->logger->debug('Not accepting response from bot ID ' . $botAttempt->getBotServer()->getId() . ' because the feature is disabled for it'); + throw new \InvalidArgumentException('Feature not enabled for bot', Http::STATUS_BAD_REQUEST); + } + + return $botAttempt; + } catch (UnauthorizedException) { + } + } + + $this->logger->debug('No valid Bot entry found'); + throw new \InvalidArgumentException('No valid Bot entry found', Http::STATUS_UNAUTHORIZED); + } + + /** + * Sends a new chat message to the given room + * + * The author and timestamp are automatically set to the current user/guest + * and time. + * + * @param string $token Conversation token + * @param string $message The message to send + * @param string $referenceId For the message to be able to later identify it again + * @param int $replyTo Parent id which this message is a reply to + * @param bool $silent If sent silent the chat message will not create any notifications + * @param string $threadTitle Only supported when not replying, when given will create a thread (requires `threads` capability) + * @param int $threadId Thread id which this message is a reply to without quoting a specific message (ignored when $replyTo is given, also requires `threads` capability) + * @return DataResponse + * + * 201: Message sent successfully + * 400: When the replyTo is invalid or message is empty + * 401: Sending message is not allowed + * 413: Message too long + */ + #[BruteForceProtection(action: 'bot')] + #[OpenAPI(scope: 'bots')] + #[PublicPage] + public function sendMessage(string $token, string $message, string $referenceId = '', int $replyTo = 0, bool $silent = false, string $threadTitle = '', int $threadId = 0): DataResponse { + if (trim($message) === '') { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + try { + $bot = $this->getBotFromHeaders($token, $message); + } catch (\InvalidArgumentException $e) { + /** @var Http::STATUS_BAD_REQUEST|Http::STATUS_UNAUTHORIZED $status */ + $status = $e->getCode(); + $response = new DataResponse(null, $status); + if ($e->getCode() === Http::STATUS_UNAUTHORIZED) { + $response->throttle(['action' => 'bot']); + } + return $response; + } + + $room = $this->manager->getRoomByToken($token); + + $actorType = Attendee::ACTOR_BOTS; + $actorId = Attendee::ACTOR_BOT_PREFIX . $bot->getBotServer()->getUrlHash(); + + $parent = null; + if ($replyTo !== 0) { + try { + $parent = $this->chatManager->getParentComment($room, (string)$replyTo); + } catch (NotFoundException $e) { + // Someone is trying to reply cross-rooms or to a non-existing message + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + } elseif ($threadId !== Thread::THREAD_NONE && $threadId !== Thread::THREAD_CREATE) { + if (!$this->threadService->validateThread($room->getId(), $threadId)) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + } + + $this->participantService->ensureOneToOneRoomIsFilled($room); + $creationDateTime = $this->timeFactory->getDateTime('now', new \DateTimeZone('UTC')); + + try { + $createThread = $replyTo === 0 && $threadId === Thread::THREAD_NONE && $threadTitle !== ''; + $threadId = $createThread ? Thread::THREAD_CREATE : $threadId; + $comment = $this->chatManager->sendMessage($room, null, $actorType, $actorId, $message, $creationDateTime, $parent, $referenceId, $silent, false, $threadId); + if ($createThread) { + $thread = $this->threadService->createThread($room, (int)$comment->getId(), $threadTitle); + + $this->chatManager->addSystemMessage( + $room, + null, + $actorType, + $actorId, + json_encode(['message' => 'thread_created', 'parameters' => ['thread' => (int)$comment->getId(), 'title' => $thread->getName()]]), + $this->timeFactory->getDateTime(), + false, + null, + $comment, + true, + true + ); + } + } catch (MessageTooLongException) { + return new DataResponse(null, Http::STATUS_REQUEST_ENTITY_TOO_LARGE); + } catch (\Exception) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null, Http::STATUS_CREATED); + } + + /** + * Adds a reaction to a chat message + * + * @param string $token Conversation token + * @param int $messageId ID of the message + * @param string $reaction Reaction to add + * @return DataResponse + * + * 200: Reaction already exists + * 201: Reacted successfully + * 400: Reacting is not possible + * 401: Reacting is not allowed + * 404: Reaction not found + */ + #[BruteForceProtection(action: 'bot')] + #[OpenAPI(scope: 'bots')] + #[PublicPage] + public function react(string $token, int $messageId, string $reaction): DataResponse { + try { + $bot = $this->getBotFromHeaders($token, $reaction); + } catch (\InvalidArgumentException $e) { + /** @var Http::STATUS_BAD_REQUEST|Http::STATUS_UNAUTHORIZED $status */ + $status = $e->getCode(); + $response = new DataResponse(null, $status); + if ($e->getCode() === Http::STATUS_UNAUTHORIZED) { + $response->throttle(['action' => 'bot']); + } + return $response; + } + + $room = $this->manager->getRoomByToken($token); + + $actorType = Attendee::ACTOR_BOTS; + $actorId = Attendee::ACTOR_BOT_PREFIX . $bot->getBotServer()->getUrlHash(); + + try { + $this->reactionManager->addReactionMessage( + $room, + $actorType, + $actorId, + $bot->getBotServer()->getName(), + $messageId, + $reaction + ); + } catch (NotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (ReactionAlreadyExistsException) { + return new DataResponse(null, Http::STATUS_OK); + } catch (ReactionNotSupportedException|ReactionOutOfContextException|\Exception) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null, Http::STATUS_CREATED); + } + + /** + * Deletes a reaction from a chat message + * + * @param string $token Conversation token + * @param int $messageId ID of the message + * @param string $reaction Reaction to delete + * @return DataResponse + * + * 200: Reaction deleted successfully + * 400: Reacting is not possible + * 401: Reacting is not allowed + * 404: Reaction not found + */ + #[BruteForceProtection(action: 'bot')] + #[OpenAPI(scope: 'bots')] + #[PublicPage] + public function deleteReaction(string $token, int $messageId, string $reaction): DataResponse { + try { + $bot = $this->getBotFromHeaders($token, $reaction); + } catch (\InvalidArgumentException $e) { + /** @var Http::STATUS_BAD_REQUEST|Http::STATUS_UNAUTHORIZED $status */ + $status = $e->getCode(); + $response = new DataResponse(null, $status); + if ($e->getCode() === Http::STATUS_UNAUTHORIZED) { + $response->throttle(['action' => 'bot']); + } + return $response; + } + + $room = $this->manager->getRoomByToken($token); + + $actorType = Attendee::ACTOR_BOTS; + $actorId = Attendee::ACTOR_BOT_PREFIX . $bot->getBotServer()->getUrlHash(); + + try { + $this->reactionManager->deleteReactionMessage( + $room, + $actorType, + $actorId, + $bot->getBotServer()->getName(), + $messageId, + $reaction + ); + } catch (ReactionNotSupportedException|ReactionOutOfContextException|NotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (\Exception) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null, Http::STATUS_OK); + } + + /** + * List admin bots + * + * @return DataResponse, array{}> + * + * 200: Bot list returned + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['settings'])] + public function adminListBots(): DataResponse { + $data = []; + $bots = $this->botServerMapper->getAllBots(); + foreach ($bots as $bot) { + $botData = $bot->jsonSerialize(); + unset($botData['secret']); + + if (!$this->botService->isAppForBotEnabled($bot)) { + $botData['state'] = Bot::STATE_UNAVAILABLE; + $botData['error_count'] = 1; + $botData['last_error_date'] = $this->timeFactory->getTime(); + $botData['last_error_message'] = $this->l->t('App disabled'); + } + + $data[] = $botData; + } + + return new DataResponse($data); + } + + /** + * List bots + * + * @return DataResponse, array{}> + * + * 200: Bot list returned + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function listBots(): DataResponse { + $alreadyInstalled = array_map(static function (BotConversation $bot): int { + return $bot->getBotId(); + }, $this->botConversationMapper->findForToken($this->room->getToken())); + + $data = []; + $bots = $this->botServerMapper->getAllBots(); + foreach ($bots as $bot) { + $botData = $this->formatBot($bot, in_array($bot->getId(), $alreadyInstalled, true)); + + if (!$this->botService->isAppForBotEnabled($bot)) { + if ($botData['state'] !== Bot::STATE_DISABLED) { + $botData['state'] = Bot::STATE_UNAVAILABLE; + } else { + continue; + } + } + + if ($botData !== null) { + $data[] = $botData; + } + } + + return new DataResponse($data); + } + + /** + * Enables a bot + * + * @param int $botId ID of the bot + * @return DataResponse|DataResponse + * + * 200: Bot already enabled + * 201: Bot enabled successfully + * 400: Enabling bot errored + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function enableBot(int $botId): DataResponse { + if ($this->room->isFederatedConversation() || $this->room->getType() === ROOM::TYPE_ONE_TO_ONE_FORMER) { + return new DataResponse([ + 'error' => 'room', + ], Http::STATUS_BAD_REQUEST); + } + + try { + $bot = $this->botServerMapper->findById($botId); + } catch (DoesNotExistException) { + return new DataResponse([ + 'error' => 'bot', + ], Http::STATUS_BAD_REQUEST); + } + + if ($bot->getState() !== Bot::STATE_ENABLED || !$this->botService->isAppForBotEnabled($bot)) { + return new DataResponse([ + 'error' => 'bot', + ], Http::STATUS_BAD_REQUEST); + } + + $alreadyInstalled = array_map(static function (BotConversation $bot): int { + return $bot->getBotId(); + }, $this->botConversationMapper->findForToken($this->room->getToken())); + + if (in_array($botId, $alreadyInstalled)) { + return new DataResponse($this->formatBot($bot, true), Http::STATUS_OK); + } + + $conversationBot = new BotConversation(); + $conversationBot->setBotId($botId); + $conversationBot->setToken($this->room->getToken()); + $conversationBot->setState(Bot::STATE_ENABLED); + + $this->botConversationMapper->insert($conversationBot); + + $event = new BotEnabledEvent($this->room, $bot); + $this->dispatcher->dispatchTyped($event); + + return new DataResponse($this->formatBot($bot, true), Http::STATUS_CREATED); + } + + /** + * Disables a bot + * + * @param int $botId ID of the bot + * @return DataResponse|DataResponse + * + * 200: Bot disabled successfully + * 400: Disabling bot errored + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function disableBot(int $botId): DataResponse { + try { + $bot = $this->botServerMapper->findById($botId); + } catch (DoesNotExistException) { + return new DataResponse([ + 'error' => 'bot', + ], Http::STATUS_BAD_REQUEST); + } + + if ($bot->getState() !== Bot::STATE_ENABLED) { + return new DataResponse([ + 'error' => 'bot', + ], Http::STATUS_BAD_REQUEST); + } + + $this->botConversationMapper->deleteByBotIdAndTokens($botId, [$this->room->getToken()]); + + $event = new BotDisabledEvent($this->room, $bot); + $this->dispatcher->dispatchTyped($event); + + return new DataResponse($this->formatBot($bot, false), Http::STATUS_OK); + } + + /** + * @param BotServer $bot + * @param bool $conversationEnabled + * @return array|null + * @psalm-return ?TalkBot + */ + protected function formatBot(BotServer $bot, bool $conversationEnabled): ?array { + $state = $conversationEnabled ? Bot::STATE_ENABLED : Bot::STATE_DISABLED; + + if ($bot->getState() === Bot::STATE_NO_SETUP) { + if ($state === Bot::STATE_DISABLED) { + return null; + } + $state = Bot::STATE_NO_SETUP; + } + + return [ + 'id' => $bot->getId(), + 'name' => $bot->getName(), + 'description' => $bot->getDescription(), + 'state' => $state, + ]; + } +} diff --git a/lib/Controller/BreakoutRoomController.php b/lib/Controller/BreakoutRoomController.php new file mode 100644 index 0000000..71578c6 --- /dev/null +++ b/lib/Controller/BreakoutRoomController.php @@ -0,0 +1,270 @@ + $amount Number of breakout rooms - Constants {@see BreakoutRoom::MINIMUM_ROOM_AMOUNT} and {@see BreakoutRoom::MAXIMUM_ROOM_AMOUNT} + * @param string $attendeeMap Mapping of the attendees to breakout rooms + * @return DataResponse, array{}>|DataResponse + * + * 200: Breakout rooms configured successfully + * 400: Configuring breakout rooms errored + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function configureBreakoutRooms(int $mode, int $amount, string $attendeeMap = '[]'): DataResponse { + try { + $rooms = $this->breakoutRoomService->setupBreakoutRooms($this->room, $mode, $amount, $attendeeMap); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $rooms[] = $this->room; + return new DataResponse($this->formatMultipleRooms($rooms), Http::STATUS_OK); + } + + /** + * Remove the breakout rooms + * + * @return DataResponse + * + * 200: Breakout rooms removed successfully + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function removeBreakoutRooms(): DataResponse { + $this->breakoutRoomService->removeBreakoutRooms($this->room); + + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->room, + $this->participant, + )); + } + + /** + * Broadcast a chat message to all breakout rooms + * + * @param string $message Message to broadcast + * @return DataResponse, array{}>|DataResponse + * + * 201: Chat message broadcasted successfully + * 400: Broadcasting chat message is not possible + * 413: Chat message too long + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function broadcastChatMessage(string $message): DataResponse { + try { + $rooms = $this->breakoutRoomService->broadcastChatMessage($this->room, $this->participant, $message); + } catch (MessageTooLongException $e) { + return new DataResponse(['error' => 'message'], Http::STATUS_REQUEST_ENTITY_TOO_LARGE); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + $rooms[] = $this->room; + return new DataResponse($this->formatMultipleRooms($rooms), Http::STATUS_CREATED); + } + + /** + * Apply an attendee map to the breakout rooms + * + * @param string $attendeeMap JSON encoded mapping of the attendees to breakout rooms `array` + * @return DataResponse, array{}>|DataResponse + * + * 200: Attendee map applied successfully + * 400: Applying attendee map is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function applyAttendeeMap(string $attendeeMap): DataResponse { + try { + $rooms = $this->breakoutRoomService->applyAttendeeMap($this->room, $attendeeMap); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + $rooms[] = $this->room; + return new DataResponse($this->formatMultipleRooms($rooms), Http::STATUS_OK); + } + + /** + * Request assistance + * + * @return DataResponse|DataResponse + * + * 200: Assistance requested successfully + * 400: Requesting assistance is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function requestAssistance(): DataResponse { + try { + $this->breakoutRoomService->requestAssistance($this->room); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->room, + $this->participant, + )); + } + + /** + * Reset the request for assistance + * + * @return DataResponse|DataResponse + * + * 200: Request for assistance reset successfully + * 400: Resetting the request for assistance is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function resetRequestForAssistance(): DataResponse { + try { + $this->breakoutRoomService->resetRequestForAssistance($this->room); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $this->room, + $this->participant, + )); + } + + /** + * Start the breakout rooms + * + * @return DataResponse, array{}>|DataResponse + * + * 200: Breakout rooms started successfully + * 400: Starting breakout rooms is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function startBreakoutRooms(): DataResponse { + try { + $rooms = $this->breakoutRoomService->startBreakoutRooms($this->room); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $rooms[] = $this->room; + return new DataResponse($this->formatMultipleRooms($rooms), Http::STATUS_OK); + } + + /** + * Stop the breakout rooms + * + * @return DataResponse, array{}>|DataResponse + * + * 200: Breakout rooms stopped successfully + * 400: Stopping breakout rooms is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function stopBreakoutRooms(): DataResponse { + try { + $rooms = $this->breakoutRoomService->stopBreakoutRooms($this->room); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $rooms[] = $this->room; + return new DataResponse($this->formatMultipleRooms($rooms), Http::STATUS_OK); + } + + /** + * Switch to another breakout room + * + * @param string $target Target breakout room + * @return DataResponse|DataResponse + * + * 200: Switched to breakout room successfully + * 400: Switching to breakout room is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function switchBreakoutRoom(string $target): DataResponse { + try { + $room = $this->breakoutRoomService->switchBreakoutRoom($this->room, $this->participant, $target); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $room, + $this->participant, + )); + } + + /** + * @return list + */ + protected function formatMultipleRooms(array $rooms): array { + $return = []; + foreach ($rooms as $room) { + try { + $return[] = $this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $room, + $this->participantService->getParticipant($room, $this->userId), + [], + false, + true + ); + } catch (ParticipantNotFoundException $e) { + } + } + return $return; + } +} diff --git a/lib/Controller/CalendarIntegrationController.php b/lib/Controller/CalendarIntegrationController.php new file mode 100644 index 0000000..b729cd1 --- /dev/null +++ b/lib/Controller/CalendarIntegrationController.php @@ -0,0 +1,77 @@ +, array{}> + * + * 200: A list of dashboard entries or an empty array + */ + #[NoAdminRequired] + public function getDashboardEvents(): DataResponse { + $userId = $this->userSession->getUser()?->getUID(); + $entries = $this->service->getDashboardEvents($userId); + return new DataResponse($entries); + } + + /** + * Get up to 3 events in the next 7 days + * sorted by their start timestamp ascending + * + * Required capability: `mutual-calendar-events` + * + * @return DataResponse, array{}>|DataResponse + * + * 200: A list of dashboard entries or an empty array + * 403: Room is not a 1 to 1 room, room is invalid, or user is not participant + */ + #[NoAdminRequired] + #[RequireParticipant] + public function getMutualEvents(): DataResponse { + $userId = $this->userSession->getUser()?->getUID(); + try { + $entries = $this->service->getMutualEvents($userId, $this->room); + } catch (InvalidRoomException|ParticipantNotFoundException) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + return new DataResponse($entries); + } +} diff --git a/lib/Controller/CallController.php b/lib/Controller/CallController.php new file mode 100644 index 0000000..7feed9a --- /dev/null +++ b/lib/Controller/CallController.php @@ -0,0 +1,595 @@ +, array{}> + * + * 200: List of peers in the call returned + */ + #[FederationSupported] + #[PublicPage] + #[RequireCallEnabled] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getPeersForCall(): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController::class); + return $proxy->getPeersForCall($this->room, $this->participant); + } + + $timeout = $this->timeFactory->getTime() - Session::SESSION_TIMEOUT; + $result = []; + $participants = $this->participantService->getParticipantsInCall($this->room, $timeout); + + foreach ($participants as $participant) { + $displayName = $participant->getAttendee()->getActorId(); + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + if ($participant->getAttendee()->getDisplayName()) { + $displayName = $participant->getAttendee()->getDisplayName(); + } else { + $userDisplayName = $this->userManager->getDisplayName($participant->getAttendee()->getActorId()); + if ($userDisplayName !== null) { + $displayName = $userDisplayName; + } + } + } else { + $displayName = $participant->getAttendee()->getDisplayName(); + } + + $result[] = [ + 'actorType' => $participant->getAttendee()->getActorType(), + 'actorId' => $participant->getAttendee()->getActorId(), + 'displayName' => $displayName, + 'token' => $this->room->getToken(), + 'lastPing' => $participant->getSession()->getLastPing(), + 'sessionId' => $participant->getSession()->getSessionId(), + ]; + } + + return new DataResponse($result); + } + + /** + * Download the list of current call participants + * + * Required capability: `download-call-participants` + * + * @param 'csv' $format Download format + * @return DataDownloadResponse|Response + * + * 200: List of participants in the call downloaded in the requested format + * 400: No call in progress + */ + #[PublicPage] + #[RequireModeratorParticipant] + #[NoCSRFRequired] + public function downloadParticipantsForCall(string $format = 'csv'): DataDownloadResponse|Response { + $callStart = $this->room->getActiveSince()?->getTimestamp() ?? 0; + if ($callStart === 0) { + return new Response(Http::STATUS_BAD_REQUEST); + } + $participants = $this->participantService->getParticipantsJoinedCurrentCall($this->room, $callStart); + + if (empty($participants)) { + return new Response(Http::STATUS_BAD_REQUEST); + } + + if ($format !== 'csv') { + // Unsupported format + return new Response(Http::STATUS_BAD_REQUEST); + } + + $output = fopen('php://memory', 'w'); + fputcsv($output, [ + 'name', + 'email', + 'type', + 'identifier', + ], escape: ''); + + foreach ($participants as $participant) { + $email = ''; + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS) { + $email = $participant->getAttendee()->getInvitedCloudId(); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $email = $this->userManager->get($participant->getAttendee()->getActorId())?->getEMailAddress() ?? ''; + } + fputcsv($output, array_map([$this, 'escapeFormulae'], [ + $participant->getAttendee()->getDisplayName(), + $email, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + ]), escape: ''); + } + + fseek($output, 0); + + // Clean the room name + $cleanedRoomName = preg_replace('/[\/\\\\:*?"<>|\- ]+/', '-', $this->room->getName()); + // Limit to a reasonable length + $cleanedRoomName = substr($cleanedRoomName, 0, 100); + + $timezone = 'UTC'; + if ($this->participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $timezone = $this->serverConfig->getUserValue($this->participant->getAttendee()->getActorId(), 'core', 'timezone', 'UTC'); + } + + try { + $dateTimeZone = new \DateTimeZone($timezone); + } catch (\Throwable) { + $dateTimeZone = null; + } + + $date = $this->timeFactory->getDateTime('now', $dateTimeZone)->format('Y-m-d'); + $fileName = $cleanedRoomName . ' ' . $date . '.csv'; + + return new DataDownloadResponse(stream_get_contents($output), $fileName, 'text/csv'); + } + + protected function escapeFormulae(string $value): string { + if (preg_match('/^[=+\-@\t\r]/', $value)) { + return "'" . $value; + } + return $value; + } + + /** + * Join a call + * + * @param int<0, 15>|null $flags In-Call flags + * @psalm-param int-mask-of|null $flags + * @param bool $silent Join the call silently + * @param bool $recordingConsent When the user ticked a checkbox and agreed with being recorded + * (Only needed when the `config => call => recording-consent` capability is set to {@see RecordingService::CONSENT_REQUIRED_YES} + * or the capability is {@see RecordingService::CONSENT_REQUIRED_OPTIONAL} + * and the conversation `recordingConsent` value is {@see RecordingService::CONSENT_REQUIRED_YES} ) + * @param list $silentFor Send no call notification for previous participants + * @return DataResponse|DataResponse + * + * 200: Call joined successfully + * 400: No recording consent was given + * 404: Call not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireCallEnabled] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function joinCall(?int $flags = null, bool $silent = false, bool $recordingConsent = false, array $silentFor = []): DataResponse { + try { + $this->validateRecordingConsent($recordingConsent); + } catch (\InvalidArgumentException) { + return new DataResponse(['error' => 'consent'], Http::STATUS_BAD_REQUEST); + } + + $this->participantService->ensureOneToOneRoomIsFilled($this->room); + + $session = $this->participant->getSession(); + if (!$session instanceof Session) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if ($flags === null) { + // Default flags: user is in room with audio/video. + $flags = Participant::FLAG_IN_CALL | Participant::FLAG_WITH_AUDIO | Participant::FLAG_WITH_VIDEO; + } + $lastJoinedCall = $this->timeFactory->getDateTime(); + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController::class); + $response = $proxy->joinFederatedCall($this->room, $this->participant, $flags, $silent, $recordingConsent); + + if ($response->getStatus() === Http::STATUS_OK) { + $this->participantService->changeInCall($this->room, $this->participant, $flags, silent: $silent, lastJoinedCall: $lastJoinedCall->getTimestamp()); + } + + return $response; + } + + try { + $this->participantService->changeInCall($this->room, $this->participant, $flags, silent: $silent, lastJoinedCall: $lastJoinedCall->getTimestamp()); + $this->roomService->setActiveSince($this->room, $this->participant, $lastJoinedCall, $flags, silent: $silent, silentFor: $silentFor); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Validates and stores recording consent. + * + * @throws \InvalidArgumentException if recording consent is required but + * not given + */ + protected function validateRecordingConsent(bool $recordingConsent): void { + if (!$recordingConsent && $this->talkConfig->recordingConsentRequired() !== RecordingService::CONSENT_REQUIRED_NO) { + if ($this->talkConfig->recordingConsentRequired() === RecordingService::CONSENT_REQUIRED_YES) { + throw new \InvalidArgumentException(); + } + if ($this->talkConfig->recordingConsentRequired() === RecordingService::CONSENT_REQUIRED_OPTIONAL + && $this->room->getRecordingConsent() === RecordingService::CONSENT_REQUIRED_YES) { + throw new \InvalidArgumentException(); + } + } elseif ($recordingConsent && $this->talkConfig->recordingConsentRequired() !== RecordingService::CONSENT_REQUIRED_NO) { + $attendee = $this->participant->getAttendee(); + $this->consentService->storeConsent($this->room, $attendee->getActorType(), $attendee->getActorId()); + } + } + + /** + * Join call on the host server using the session id of the federated user + * + * @param string $sessionId Federated session id to join with + * @param int<0, 15>|null $flags In-Call flags + * @psalm-param int-mask-of|null $flags + * @param bool $silent Join the call silently + * @param bool $recordingConsent Agreement to be recorded + * @return DataResponse|DataResponse + * + * 200: Call joined successfully + * 400: Conditions to join not met + * 404: Call not found + */ + #[PublicPage] + #[RequireCallEnabled] + #[RequireModeratorOrNoLobby] + #[RequireFederatedParticipant] + #[RequireReadWriteConversation] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[BruteForceProtection(action: 'talkRoomToken')] + public function joinFederatedCall(string $sessionId, ?int $flags = null, bool $silent = false, bool $recordingConsent = false): DataResponse { + if (!$this->federationAuthenticator->isFederationRequest()) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $this->room->getToken(), 'action' => 'talkRoomToken']); + return $response; + } + + try { + $this->validateRecordingConsent($recordingConsent); + } catch (\InvalidArgumentException) { + return new DataResponse(['error' => 'consent'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->participantService->changeInCall($this->room, $this->participant, $flags, false, $silent); + $this->roomService->setActiveSince($this->room, $this->participant, $this->timeFactory->getDateTime(), $flags, silent: $silent); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Ring an attendee + * + * @param int $attendeeId ID of the attendee to ring + * @return DataResponse|DataResponse + * + * 200: Attendee rang successfully + * 400: Ringing attendee is not possible + * 404: Attendee could not be found + */ + #[FederationSupported] + #[PublicPage] + #[RequireCallEnabled] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::START_CALL)] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function ringAttendee(int $attendeeId): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController::class); + return $proxy->ringAttendee($this->room, $this->participant, $attendeeId); + } + + if ($this->room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + if ($this->participant->getSession() && $this->participant->getSession()->getInCall() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->participantService->sendCallNotificationForAttendee($this->room, $this->participant, $attendeeId); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } catch (DoesNotExistException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + return new DataResponse(null); + } + + /** + * Call a SIP dial-out attendee + * + * @param int $attendeeId ID of the attendee to call + * @return DataResponse|DataResponse + * + * 201: Dial-out initiated successfully + * 400: SIP dial-out not possible + * 404: Participant could not be found or is a wrong type + * 501: SIP dial-out is not configured on the server + */ + #[PublicPage] + #[RequireCallEnabled] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::START_CALL)] + public function sipDialOut(int $attendeeId): DataResponse { + if ($this->room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + if ($this->participant->getSession() && $this->participant->getSession()->getInCall() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $callerNumber = true; + if ($this->appConfig->getAppValueBool('sip_bridge_dialout_anonymous')) { + $callerNumber = false; + } elseif ($this->appConfig->getAppValueString('sip_bridge_dialout_number') !== '') { + $callerNumber = $this->appConfig->getAppValueString('sip_bridge_dialout_number'); + } + + // No elseif, so we have the fallback to sip_bridge_dialout_number when the caller is no user or doesn't have a number + if ($callerNumber !== false && $this->appConfig->getAppValueString('sip_bridge_dialout_prefix', '+') !== '') { + $attendee = $this->participant->getAttendee(); + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $numbers = $this->phoneNumberMapper->findByUser($attendee->getActorId()); + if (!empty($numbers)) { + $number = array_shift($numbers); + $callerNumber = $this->appConfig->getAppValueString('sip_bridge_dialout_prefix', '+'); + $callerNumber .= $number->getPhoneNumber(); + } + } + } + + try { + $this->participantService->startDialOutRequest($this->dialOutService, $this->room, $attendeeId, $callerNumber); + } catch (ParticipantNotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (DialOutFailedException $e) { + return new DataResponse([ + 'error' => $e->getMessage(), + 'message' => $e->getReadableError(), + ], Http::STATUS_NOT_IMPLEMENTED); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e], Http::STATUS_NOT_IMPLEMENTED); + } + + return new DataResponse(null, Http::STATUS_CREATED); + } + + /** + * Update the in-call flags + * + * @param int<0, 15> $flags New flags + * @psalm-param int-mask-of $flags New flags + * @return DataResponse + * + * 200: In-call flags updated successfully + * 400: Updating in-call flags is not possible + * 404: Call session not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function updateCallFlags(int $flags): DataResponse { + $session = $this->participant->getSession(); + if (!$session instanceof Session) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController::class); + $response = $proxy->updateFederatedCallFlags($this->room, $this->participant, $flags); + + if ($response->getStatus() === Http::STATUS_OK) { + $this->participantService->updateCallFlags($this->room, $this->participant, $flags); + } + + return $response; + } + + try { + $this->participantService->updateCallFlags($this->room, $this->participant, $flags); + } catch (\Exception $exception) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Update the in-call flags on the host server using the session id of the + * federated user + * + * @param string $sessionId Federated session id to update the flags with + * @param int<0, 15> $flags New flags + * @psalm-param int-mask-of $flags New flags + * @return DataResponse + * + * 200: In-call flags updated successfully + * 400: Updating in-call flags is not possible + * 404: Call session not found + */ + #[PublicPage] + #[RequireFederatedParticipant] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[BruteForceProtection(action: 'talkRoomToken')] + public function updateFederatedCallFlags(string $sessionId, int $flags): DataResponse { + if (!$this->federationAuthenticator->isFederationRequest()) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $this->room->getToken(), 'action' => 'talkRoomToken']); + return $response; + } + + try { + $this->participantService->updateCallFlags($this->room, $this->participant, $flags); + } catch (\Exception) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Leave a call + * + * @param bool $all whether to also terminate the call for all participants + * @return DataResponse + * + * 200: Call left successfully + * 404: Call session not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function leaveCall(bool $all = false): DataResponse { + $session = $this->participant->getSession(); + if (!$session instanceof Session) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\CallController::class); + $response = $proxy->leaveFederatedCall($this->room, $this->participant); + + if ($response->getStatus() === Http::STATUS_OK) { + $this->participantService->changeInCall($this->room, $this->participant, Participant::FLAG_DISCONNECTED); + } + + return $response; + } + + if ($all && $this->participant->hasModeratorPermissions()) { + $result = $this->roomService->resetActiveSinceInDatabaseOnly($this->room); + if (!$result) { + // Someone else won the race condition, make sure this user disconnects directly and then return + $this->participantService->changeInCall($this->room, $this->participant, Participant::FLAG_DISCONNECTED); + return new DataResponse(null); + } + $this->participantService->endCallForEveryone($this->room, $this->participant); + $this->roomService->resetActiveSinceInModelOnly($this->room); + } else { + $this->participantService->changeInCall($this->room, $this->participant, Participant::FLAG_DISCONNECTED); + if (!$this->participantService->hasActiveSessionsInCall($this->room)) { + $this->roomService->resetActiveSince($this->room, $this->participant); + } + } + + return new DataResponse(null); + } + + /** + * Leave a call on the host server using the session id of the federated + * user + * + * @param string $sessionId Federated session id to leave with + * @return DataResponse + * + * 200: Call left successfully + * 404: Call session not found + */ + #[PublicPage] + #[RequireFederatedParticipant] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[BruteForceProtection(action: 'talkRoomToken')] + public function leaveFederatedCall(string $sessionId): DataResponse { + if (!$this->federationAuthenticator->isFederationRequest()) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $this->room->getToken(), 'action' => 'talkRoomToken']); + return $response; + } + + $this->participantService->changeInCall($this->room, $this->participant, Participant::FLAG_DISCONNECTED); + if (!$this->participantService->hasActiveSessionsInCall($this->room)) { + $this->roomService->resetActiveSince($this->room, $this->participant); + } + + return new DataResponse(null); + } +} diff --git a/lib/Controller/CallNotificationController.php b/lib/Controller/CallNotificationController.php new file mode 100644 index 0000000..31f1a88 --- /dev/null +++ b/lib/Controller/CallNotificationController.php @@ -0,0 +1,65 @@ + + * + * 200: Notification should be kept alive + * 201: Dismiss call notification and show "Missed call"-notification instead + * 403: Not logged in, try again with auth data sent + * 404: Dismiss call notification + */ + #[NoAdminRequired] + #[OpenAPI(tags: ['call'])] + public function state(string $token): DataResponse { + if ($this->userId === null) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + $status = match($this->participantService->checkIfUserIsMissingCall($token, $this->userId)) { + self::CASE_PARTICIPANT_JOINED, + self::CASE_ROOM_NOT_FOUND => Http::STATUS_NOT_FOUND, + self::CASE_MISSED_CALL => Http::STATUS_CREATED, + self::CASE_STILL_CURRENT => Http::STATUS_OK, + }; + + return new DataResponse(null, $status); + } +} diff --git a/lib/Controller/CertificateController.php b/lib/Controller/CertificateController.php new file mode 100644 index 0000000..922bdd1 --- /dev/null +++ b/lib/Controller/CertificateController.php @@ -0,0 +1,56 @@ +|DataResponse + * + * 200: Certificate expiration returned + * 400: Getting certificate expiration is not possible + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['settings'])] + public function getCertificateExpiration(string $host): DataResponse { + try { + $expirationInDays = $this->certificateService->getCertificateExpirationInDays($host); + + return new DataResponse([ + 'expiration_in_days' => $expirationInDays, + ]); + } catch (\Exception $e) { + $this->logger->error('Failed get certificate expiration', [ + 'exception' => $e, + ]); + + return new DataResponse(['message' => $this->l->t('An error occurred. Please contact your administrator.')], Http::STATUS_BAD_REQUEST); + } + } +} diff --git a/lib/Controller/ChatController.php b/lib/Controller/ChatController.php new file mode 100644 index 0000000..89f388c --- /dev/null +++ b/lib/Controller/ChatController.php @@ -0,0 +1,1835 @@ +federationAuthenticator->getCloudId(); + if ($remoteCloudId !== '') { + if ($actorDisplayName) { + $this->participantService->updateDisplayNameForActor(Attendee::ACTOR_FEDERATED_USERS, $remoteCloudId, $actorDisplayName); + } + return [Attendee::ACTOR_FEDERATED_USERS, $remoteCloudId]; + } + + if ($this->userId === null) { + if ($actorDisplayName) { + $this->guestManager->updateName($this->room, $this->participant, $actorDisplayName); + } + /** @var Attendee::ACTOR_GUESTS|Attendee::ACTOR_EMAILS $actorType */ + $actorType = $this->participant->getAttendee()->getActorType(); + return [$actorType, $this->participant->getAttendee()->getActorId()]; + } + + if ($this->userId === MatterbridgeManager::BRIDGE_BOT_USERID && $actorDisplayName) { + return [Attendee::ACTOR_BRIDGED, str_replace(['/', '"'], '', $actorDisplayName)]; + } + + return [Attendee::ACTOR_USERS, $this->userId]; + } + + /** + * @return DataResponse + */ + protected function parseCommentToResponse(IComment $comment, ?Message $parentMessage = null): DataResponse { + $chatMessage = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($chatMessage); + + if (!$chatMessage->getVisibility()) { + $headers = []; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $headers = ['X-Chat-Last-Common-Read' => (string)$this->chatManager->getLastCommonReadMessage($this->room)]; + } + return new DataResponse(null, Http::STATUS_CREATED, $headers); + } + + try { + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + $thread = $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + $thread = null; + } + $data = $chatMessage->toArray($this->getResponseFormat(), $thread); + if ($parentMessage instanceof Message) { + $data['parent'] = $parentMessage->toArray($this->getResponseFormat(), $thread); + } + + $headers = []; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $headers = ['X-Chat-Last-Common-Read' => (string)$this->chatManager->getLastCommonReadMessage($this->room)]; + } + return new DataResponse($data, Http::STATUS_CREATED, $headers); + } + + /** + * Sends a new chat message to the given room + * + * The author and timestamp are automatically set to the current user/guest + * and time. + * + * @param string $message the message to send + * @param string $actorDisplayName for guests + * @param string $referenceId for the message to be able to later identify it again + * @param int $replyTo Parent id which this message is a reply to + * @psalm-param non-negative-int $replyTo + * @param bool $silent If sent silent the chat message will not create any notifications + * @param string $threadTitle Only supported when not replying, when given will create a thread (requires `threads` capability) + * @param int $threadId Thread id which this message is a reply to without quoting a specific message (ignored when $replyTo is given, also requires `threads` capability) + * @return DataResponse|DataResponse + * + * 201: Message sent successfully + * 400: Sending message is not possible + * 404: Actor not found + * 413: Message too long + * 429: Mention rate limit exceeded (guests only) + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function sendMessage(string $message, string $actorDisplayName = '', string $referenceId = '', int $replyTo = 0, bool $silent = false, string $threadTitle = '', int $threadId = 0): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->sendMessage($this->room, $this->participant, $message, $referenceId, $replyTo, $silent, $threadTitle, $threadId); + } + + if (trim($message) === '') { + return new DataResponse(['error' => 'message'], Http::STATUS_BAD_REQUEST); + } + + [$actorType, $actorId] = $this->getActorInfo($actorDisplayName); + if (!$actorId) { + return new DataResponse(['error' => 'actor'], Http::STATUS_NOT_FOUND); + } + + $parent = $parentMessage = null; + if ($replyTo !== 0) { + try { + $parent = $this->chatManager->getParentComment($this->room, (string)$replyTo); + } catch (NotFoundException $e) { + // Someone is trying to reply cross-rooms or to a non-existing message + return new DataResponse(['error' => 'reply-to'], Http::STATUS_BAD_REQUEST); + } + + $parentMessage = $this->messageParser->createMessage($this->room, $this->participant, $parent, $this->l); + $this->messageParser->parseMessage($parentMessage); + if (!$parentMessage->isReplyable()) { + return new DataResponse(['error' => 'reply-to'], Http::STATUS_BAD_REQUEST); + } + } elseif ($threadId !== 0) { + if (!$this->threadService->validateThread($this->room->getId(), $threadId)) { + return new DataResponse(['error' => 'reply-to'], Http::STATUS_BAD_REQUEST); + } + } + + $this->participantService->ensureOneToOneRoomIsFilled($this->room); + $creationDateTime = $this->timeFactory->getDateTime('now', new \DateTimeZone('UTC')); + + try { + $createThread = $replyTo === 0 && $threadId === Thread::THREAD_NONE && $threadTitle !== ''; + $threadId = $createThread ? Thread::THREAD_CREATE : $threadId; + $comment = $this->chatManager->sendMessage($this->room, $this->participant, $actorType, $actorId, $message, $creationDateTime, $parent, $referenceId, $silent, threadId: $threadId); + if ($createThread) { + $thread = $this->threadService->createThread($this->room, (int)$comment->getId(), $threadTitle); + // Add to subscribed threads list + $this->threadService->setNotificationLevel($this->participant->getAttendee(), $thread->getId(), Participant::NOTIFY_DEFAULT); + + $this->chatManager->addSystemMessage( + $this->room, + $this->participant, + $this->participant->getAttendee()->getActorType(), + $this->participant->getAttendee()->getActorId(), + json_encode(['message' => 'thread_created', 'parameters' => ['thread' => (int)$comment->getId(), 'title' => $thread->getName()]]), + $this->timeFactory->getDateTime(), + false, + null, + $comment, + true, + true + ); + } + } catch (MessageTooLongException) { + return new DataResponse(['error' => 'message'], Http::STATUS_REQUEST_ENTITY_TOO_LARGE); + } catch (IRateLimitExceededException) { + return new DataResponse(['error' => 'mentions'], Http::STATUS_TOO_MANY_REQUESTS); + } catch (\Exception $e) { + $this->logger->warning($e->getMessage()); + return new DataResponse(['error' => 'message'], Http::STATUS_BAD_REQUEST); + } + + return $this->parseCommentToResponse($comment, $parentMessage); + } + + /** + * Sends a rich-object to the given room + * + * The author and timestamp are automatically set to the current user/guest + * and time. + * + * @param string $objectType Type of the object + * @param string $objectId ID of the object + * @param string $metaData Additional metadata, sample value: `{\"type\":\"geo-location\",\"id\":\"geo:52.5450511,13.3741463\",\"name\":\"Nextcloud Berlin Office\",\"latitude\":\"52.5450511\",\"longitude\":\"13.3741463\"}` + * @param string $actorDisplayName Guest name + * @param string $referenceId Reference ID + * @param int $threadId Thread id which this message is a reply to without quoting a specific message (also requires `threads` capability) + * @return DataResponse|DataResponse + * + * 201: Object shared successfully + * 400: Sharing object is not possible + * 404: Actor not found + * 413: Message too long + */ + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/share', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function shareObjectToChat(string $objectType, string $objectId, string $metaData = '', string $actorDisplayName = '', string $referenceId = '', int $threadId = 0): DataResponse { + [$actorType, $actorId] = $this->getActorInfo($actorDisplayName); + if (!$actorId) { + return new DataResponse(['error' => 'actor'], Http::STATUS_NOT_FOUND); + } + + /** @var TalkRichObjectParameter $data */ + $data = $metaData !== '' ? json_decode($metaData, true) : []; + if (!is_array($data)) { + /** @var TalkRichObjectParameter $data */ + $data = []; + } + $data['type'] = $objectType; + $data['id'] = $objectId; + $data['icon-url'] = $this->avatarService->getAvatarUrl($this->room); + + if (isset($data['link']) && !$this->trustedDomainHelper->isTrustedUrl($data['link'])) { + return new DataResponse(['error' => 'link'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->richObjectValidator->validate('{object}', ['object' => $data]); + } catch (InvalidObjectExeption $e) { + return new DataResponse(['error' => 'object'], Http::STATUS_BAD_REQUEST); + } + + if ($data['type'] === 'geo-location' + && !preg_match(ChatManager::GEO_LOCATION_VALIDATOR, $data['id'])) { + return new DataResponse(['error' => 'object'], Http::STATUS_BAD_REQUEST); + } + + $this->participantService->ensureOneToOneRoomIsFilled($this->room); + $creationDateTime = $this->timeFactory->getDateTime('now', new \DateTimeZone('UTC')); + + $message = json_encode([ + 'message' => 'object_shared', + 'parameters' => [ + 'objectType' => $objectType, + 'objectId' => $objectId, + 'metaData' => $data, + ], + ]); + + if ($threadId !== 0) { + try { + $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + // Someone tried to cheat, ignore + $threadId = 0; + } + } + + try { + $comment = $this->chatManager->addSystemMessage($this->room, $this->participant, $actorType, $actorId, $message, $creationDateTime, true, $referenceId, threadId: $threadId); + } catch (MessageTooLongException $e) { + return new DataResponse(['error' => 'message'], Http::STATUS_REQUEST_ENTITY_TOO_LARGE); + } catch (\Exception $e) { + return new DataResponse(['error' => 'message'], Http::STATUS_BAD_REQUEST); + } + + return $this->parseCommentToResponse($comment); + } + + /** + * Receives chat messages from the given room + * + * - Receiving the history ($lookIntoFuture=0): + * The next $limit messages after $lastKnownMessageId will be returned. + * The new $lastKnownMessageId for the follow up query is available as + * `X-Chat-Last-Given` header. + * + * - Looking into the future ($lookIntoFuture=1): + * If there are currently no messages the response will not be sent + * immediately. Instead, HTTP connection will be kept open waiting for new + * messages to arrive and, when they do, then the response will be sent. The + * connection will not be kept open indefinitely, though; the number of + * seconds to wait for new messages to arrive can be set using the timeout + * parameter; the default timeout is 30 seconds, maximum timeout is 60 + * seconds. If the timeout ends a successful but empty response will be + * sent. + * If messages have been returned (status=200) the new $lastKnownMessageId + * for the follow up query is available as `X-Chat-Last-Given` header. + * + * The limit specifies the maximum number of messages that will be returned, + * although the actual number of returned messages could be lower if some + * messages are not visible to the participant. Note that if none of the + * messages are visible to the participant the returned number of messages + * will be 0, yet the status will still be 200. Also note that + * `X-Chat-Last-Given` may reference a message not visible and thus not + * returned, but it should be used nevertheless as the $lastKnownMessageId + * for the follow-up query. + * + * @param 0|1 $lookIntoFuture Polling for new messages (1) or getting the history of the chat (0) + * @param int<1, 200> $limit Number of chat messages to receive (100 by default, 200 at most) + * @param int $lastKnownMessageId The last known message (serves as offset) + * @psalm-param non-negative-int $lastKnownMessageId + * @param int $lastCommonReadId The last known common read message + * (so the response is 200 instead of 304 when + * it changes even when there are no messages) + * @psalm-param non-negative-int $lastCommonReadId + * @param int<0, 30> $timeout Number of seconds to wait for new messages (30 by default, 30 at most) + * @param 0|1 $setReadMarker Automatically set the last read marker when 1, + * if your client does this itself via chat/{token}/read set to 0 + * @param 0|1 $includeLastKnown Include the $lastKnownMessageId in the messages when 1 (default 0) + * @param 0|1 $noStatusUpdate When the user status should not be automatically set to online set to 1 (default 0) + * @param 0|1 $markNotificationsAsRead Set to 0 when notifications should not be marked as read (default 1) + * @param int $threadId Limit the chat message list to a given thread + * @psalm-param non-negative-int $threadId + * @return DataResponse, array{'X-Chat-Last-Common-Read'?: numeric-string, X-Chat-Last-Given?: numeric-string}>|DataResponse + * + * 200: Messages returned + * 304: No messages + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function receiveMessages( + int $lookIntoFuture, + int $limit = 100, + int $lastKnownMessageId = 0, + int $lastCommonReadId = 0, + int $timeout = 30, + int $setReadMarker = 1, + int $includeLastKnown = 0, + int $noStatusUpdate = 0, + int $markNotificationsAsRead = 1, + int $threadId = 0, + ): DataResponse { + $limit = min(200, max(1, $limit)); + $timeout = min(30, $timeout); + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->receiveMessages( + $this->room, + $this->participant, + $lookIntoFuture, + $limit, + $lastKnownMessageId, + $lastCommonReadId, + $timeout, + $setReadMarker, + $includeLastKnown, + $noStatusUpdate, + $markNotificationsAsRead, + // FIXME support threads in federation $threadId, + ); + } + + $session = $this->participant->getSession(); + if ($noStatusUpdate === 0 && $session instanceof Session) { + // The mobile apps dont do internal signaling unless in a call + $isMobileApp = $this->request->isUserAgent([ + IRequest::USER_AGENT_TALK_ANDROID, + IRequest::USER_AGENT_TALK_IOS, + ]); + if ($isMobileApp && $session->getInCall() === Participant::FLAG_DISCONNECTED) { + $this->sessionService->updateLastPing($session, $this->timeFactory->getTime()); + + if ($lookIntoFuture) { + $attendee = $this->participant->getAttendee(); + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + // Bump the user status again + $event = new UserLiveStatusEvent( + $this->userManager->get($attendee->getActorId()), + IUserStatus::ONLINE, + $this->timeFactory->getTime() + ); + $this->eventDispatcher->dispatchTyped($event); + } + } + } + } + + /** + * Automatic last read message marking for old clients + * This is pretty dumb and does not give the best and native feeling + * you are used to from other chat apps. The clients should manually + * set the read marker depending on the view port of the set of messages. + * + * We are only setting it automatically here for old clients and the + * web UI, until it can be fixed in Vue. To not use too much broken data, + * we only update the read marker to the last known id, when it is higher + * then the current read marker. + */ + + $attendee = $this->participant->getAttendee(); + if ($lookIntoFuture && $setReadMarker === 1 + && $lastKnownMessageId > $attendee->getLastReadMessage()) { + $this->participantService->updateLastReadMessage($this->participant, $lastKnownMessageId); + } + + $currentUser = $this->userManager->get($this->userId); + if ($lookIntoFuture) { + $comments = $this->chatManager->waitForNewMessages($this->room, $lastKnownMessageId, $limit, $timeout, $currentUser, (bool)$includeLastKnown, (bool)$markNotificationsAsRead, $threadId); + } else { + $comments = $this->chatManager->getHistory($this->room, $lastKnownMessageId, $limit, (bool)$includeLastKnown, $threadId); + } + + return $this->prepareCommentsAsDataResponse($comments, $lastCommonReadId); + } + + /** + * Summarize the next bunch of chat messages from a given offset + * + * Required capability: `chat-summary-api` + * + * @param positive-int $fromMessageId Offset from where on the summary should be generated + * @return DataResponse|DataResponse|DataResponse + * @throws \InvalidArgumentException + * + * 201: Summary was scheduled, use the returned taskId to get the status information and output from the TaskProcessing API: [OCS TaskProcessing API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-taskprocessing-api.html#fetch-a-task-by-id). If the response data contains nextOffset, not all messages could be handled in a single request. After receiving the response a second summary should be requested with the provided nextOffset. + * 204: No messages found to summarize + * 400: No AI provider available or summarizing failed + */ + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/summarize', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function summarizeChat( + int $fromMessageId, + ): DataResponse { + $fromMessageId = max(0, $fromMessageId); + + $supportedTaskTypeIds = $this->taskProcessingManager->getAvailableTaskTypeIds(); + if (!in_array(TextToTextSummary::ID, $supportedTaskTypeIds, true)) { + return new DataResponse([ + 'error' => ChatSummaryException::REASON_AI_ERROR, + ], Http::STATUS_BAD_REQUEST); + } + + // if ($this->room->isFederatedConversation()) { + // /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + // $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + // return $proxy->summarizeChat( + // $this->room, + // $this->participant, + // $fromMessageId, + // ); + // } + + $currentUser = $this->userManager->get($this->userId); + $batchSize = $this->appConfig->getAppValueInt('ai_unread_summary_batch_size', 500); + $comments = $this->chatManager->waitForNewMessages($this->room, $fromMessageId, $batchSize, 0, $currentUser, true, false); + $this->sharePreloader->preloadShares($comments); + + $messages = []; + $nextOffset = 0; + foreach ($comments as $comment) { + $nextOffset = (int)$comment->getId(); + $message = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($message, true); + + if (!$message->getVisibility()) { + continue; + } + + if ($message->getMessageType() === ChatManager::VERB_SYSTEM + && !in_array($message->getMessageRaw(), [ + 'call_ended', + 'call_ended_everyone', + 'file_shared', + 'object_shared', + ], true)) { + // Ignore system messages apart from calls, shared objects and files + continue; + } + + $parsedMessage = $this->richTextFormatter->richToParsed( + $message->getMessage(), + $message->getMessageParameters(), + ); + + $displayName = $message->getActorDisplayName(); + if (in_array($message->getActorType(), [ + Attendee::ACTOR_GUESTS, + Attendee::ACTOR_EMAILS, + ], true)) { + if ($displayName === '') { + $displayName = $this->l->t('Guest'); + } else { + $displayName = $this->l->t('%s (guest)', $displayName); + } + } + + if ($comment->getParentId() !== '0') { + // FIXME should add something? + } + + $messages[] = $displayName . ': ' . $parsedMessage; + } + + if (empty($messages)) { + return new DataResponse(null, Http::STATUS_NO_CONTENT); + } + + $task = new Task( + TextToTextSummary::ID, + ['input' => implode("\n\n", $messages)], + Application::APP_ID, + $this->userId, + 'summary/' . $this->room->getToken(), + ); + + try { + $this->taskProcessingManager->scheduleTask($task); + } catch (Exception $e) { + $this->logger->error('An error occurred while trying to summarize unread messages', ['exception' => $e]); + return new DataResponse([ + 'error' => ChatSummaryException::REASON_AI_ERROR, + ], Http::STATUS_BAD_REQUEST); + } + + $taskId = $task->getId(); + if ($taskId === null) { + return new DataResponse([ + 'error' => ChatSummaryException::REASON_AI_ERROR, + ], Http::STATUS_BAD_REQUEST); + } + + $data = [ + 'taskId' => $taskId, + ]; + + if ($nextOffset !== $this->room->getLastMessageId()) { + $data['nextOffset'] = $nextOffset; + } + + return new DataResponse($data, Http::STATUS_CREATED); + } + + /** + * @return DataResponse, array{'X-Chat-Last-Common-Read'?: numeric-string, X-Chat-Last-Given?: numeric-string}>|DataResponse + */ + protected function prepareCommentsAsDataResponse(array $comments, int $lastCommonReadId = 0): DataResponse { + if (empty($comments)) { + if ($lastCommonReadId && $this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $newLastCommonRead = $this->chatManager->getLastCommonReadMessage($this->room); + if ($lastCommonReadId !== $newLastCommonRead) { + // Set the status code to 200 so the header is sent to the client. + // As per "section 10.3.5 of RFC 2616" entity headers shall be + // stripped out on 304: https://stackoverflow.com/a/17822709 + /** @var array{X-Chat-Last-Common-Read?: numeric-string, X-Chat-Last-Given?: numeric-string} $headers */ + $headers = ['X-Chat-Last-Common-Read' => (string)$newLastCommonRead]; + return new DataResponse([], Http::STATUS_OK, $headers); + } + } + return new DataResponse(null, Http::STATUS_NOT_MODIFIED); + } + + $this->sharePreloader->preloadShares($comments); + $potentialThreadIds = array_map(static fn (IComment $comment) => (int)$comment->getTopmostParentId() ?: (int)$comment->getId(), $comments); + $threads = $this->threadService->findByThreadIds($this->room->getId(), $potentialThreadIds); + + $i = 0; + $now = $this->timeFactory->getDateTime(); + $messages = $commentIdToIndex = $parentIds = []; + foreach ($comments as $comment) { + $id = (int)$comment->getId(); + $message = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + $expireDate = $message->getExpirationDateTime(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + $commentIdToIndex[$id] = null; + continue; + } + + if (!$message->getVisibility()) { + $commentIdToIndex[$id] = null; + continue; + } + + if ($comment->getParentId() !== '0') { + $parentIds[$id] = $comment->getParentId(); + } + + $threadId = (int)$comment->getTopmostParentId() ?: $id; + $messages[] = $message->toArray($this->getResponseFormat(), $threads[$threadId] ?? null); + $commentIdToIndex[$id] = $i; + $i++; + } + + /** + * Set the parent for reply-messages + */ + $loadedParents = []; + foreach ($parentIds as $commentId => $parentId) { + $commentKey = $commentIdToIndex[$commentId]; + + // Parent is already parsed in the message list + if (isset($commentIdToIndex[$parentId])) { + $parentKey = $commentIdToIndex[$parentId]; + $messages[$commentKey]['parent'] = $messages[$parentKey]; + + // We don't show nested parents… + unset($messages[$commentKey]['parent']['parent']); + continue; + } + + // Parent was already loaded manually for another comment + if (!empty($loadedParents[$parentId])) { + $messages[$commentKey]['parent'] = $loadedParents[$parentId]; + continue; + } + + // Parent was not skipped due to visibility, so we need to manually grab it. + if (!isset($commentIdToIndex[$parentId])) { + try { + $comment = $this->chatManager->getParentComment($this->room, $parentId); + $message = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + if ($message->getVisibility()) { + $threadId = (int)$comment->getTopmostParentId() ?: $parentId; + $loadedParents[$parentId] = $message->toArray($this->getResponseFormat(), $threads[$threadId] ?? null); + $messages[$commentKey]['parent'] = $loadedParents[$parentId]; + continue; + } + + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + $commentIdToIndex[$id] = null; + continue; + } + + $loadedParents[$parentId] = [ + 'id' => (int)$parentId, + 'deleted' => true, + ]; + } catch (NotFoundException $e) { + } + } + + // Message is not visible to the user + $messages[$commentKey]['parent'] = [ + 'id' => (int)$parentId, + 'deleted' => true, + ]; + } + + $messages = $this->loadSelfReactions($messages, $commentIdToIndex); + + $headers = []; + $newLastKnown = end($comments); + if ($newLastKnown instanceof IComment) { + $headers = ['X-Chat-Last-Given' => (string)(int)$newLastKnown->getId()]; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + /** + * This falsely set the read marker on new messages, although you + * navigated away to a different chat already. So we removed this + * and instead update the read marker before your next waiting. + * So when you are still there, it will just have a wrong read + * marker for the time until your next request starts, while it will + * not update the value, when you actually left the chat already. + * if ($setReadMarker === 1 && $lookIntoFuture) { + * $this->participantService->updateLastReadMessage($this->participant, (int) $newLastKnown->getId()); + * } + */ + $headers['X-Chat-Last-Common-Read'] = (string)$this->chatManager->getLastCommonReadMessage($this->room); + } + } + + return new DataResponse($messages, Http::STATUS_OK, $headers); + } + + /** + * Get the context of a message + * + * @param int $messageId The focused message which should be in the "middle" of the returned context + * @psalm-param non-negative-int $messageId + * @param int<0, 100> $limit Number of chat messages to receive in both directions (50 by default, 100 at most, might return 201 messages) + * @param int $threadId Limit the chat message list to a given thread + * @psalm-param non-negative-int $threadId + * @return DataResponse, array{'X-Chat-Last-Common-Read'?: numeric-string, X-Chat-Last-Given?: numeric-string}>|DataResponse + * + * 200: Message context returned + * 304: No messages + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/{messageId}/context', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function getMessageContext( + int $messageId, + int $limit = 50, + int $threadId = 0, + ): DataResponse { + $limit = min(100, max(0, $limit)); + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->getMessageContext( + $this->room, + $this->participant, + $messageId, + $limit, + // FIXME support threads in federation $threadId, + ); + } + + $currentUser = $this->userManager->get($this->userId); + if ($messageId === 0) { + // Guest in a fully expired chat, no history, just loading the chat from beginning for now + $commentsHistory = $commentsFuture = []; + } else { + // Load at least 1 history entry to get the includeLastKnown + $historyLimit = max(1, $limit); + $commentsHistory = $this->chatManager->getHistory($this->room, $messageId, $historyLimit, true, $threadId); + $commentsHistory = array_reverse($commentsHistory); + if ($limit === 0) { + // No context requested, only the known message + $commentsFuture = []; + } else { + $commentsFuture = $this->chatManager->waitForNewMessages($this->room, $messageId, $limit, 0, $currentUser, false, threadId: $threadId); + } + } + + return $this->prepareCommentsAsDataResponse(array_merge($commentsHistory, $commentsFuture)); + } + + /** + * @psalm-template T as list + * @psalm-param T $messages + * @param array $commentIdToIndex + * @psalm-return T + */ + protected function loadSelfReactions(array $messages, array $commentIdToIndex): array { + // Get message ids with reactions + $messageIdsWithReactions = array_map( + static fn (array $message) => $message['id'], + array_filter($messages, static fn (array $message) => !empty($message['reactions'])) + ); + + // Get parents with reactions + $parentsWithReactions = array_map( + static fn (array $message) => ['parent' => $message['parent']['id'], 'message' => $message['id']], + array_filter($messages, static fn (array $message) => !empty($message['parent']['reactions'])) + ); + + // Create a map, so we can translate the parent's $messageId to the correct child entries + $parentMap = $parentIdsWithReactions = []; + foreach ($parentsWithReactions as $entry) { + $parentMap[(int)$entry['parent']] ??= []; + $parentMap[(int)$entry['parent']][] = (int)$entry['message']; + $parentIdsWithReactions[] = (int)$entry['parent']; + } + + // Unique list for the query + $idsWithReactions = array_unique(array_merge($messageIdsWithReactions, $parentIdsWithReactions)); + $reactionsById = $this->reactionManager->getReactionsByActorForMessages($this->participant, $idsWithReactions); + + // Inject the reactions self into the $messages array + foreach ($reactionsById as $messageId => $reactions) { + if (isset($commentIdToIndex[$messageId], $messages[$commentIdToIndex[$messageId]])) { + $messages[$commentIdToIndex[$messageId]]['reactionsSelf'] = $reactions; + } + + // Add the self part also to potential parent elements + if (isset($parentMap[$messageId])) { + foreach ($parentMap[$messageId] as $mid) { + if (isset($messages[$commentIdToIndex[$mid]])) { + $messages[$commentIdToIndex[$mid]]['parent']['reactionsSelf'] = $reactions; + } + } + } + } + + /** @psalm-var T $messages */ + return $messages; + } + + /** + * Delete a chat message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @return DataResponse|DataResponse + * + * 200: Message deleted successfully + * 202: Message deleted successfully, but a bot or Matterbridge is configured, so the information can be replicated elsewhere + * 400: Deleting message is not possible + * 403: Missing permissions to delete message + * 404: Message not found + * 405: Deleting this message type is not allowed + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireAuthenticatedParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/{messageId}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function deleteMessage(int $messageId): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->deleteMessage( + $this->room, + $this->participant, + $messageId, + ); + } + + try { + $message = $this->chatManager->getComment($this->room, (string)$messageId); + } catch (NotFoundException) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $attendee = $this->participant->getAttendee(); + $isOwnMessage = $message->getActorType() === $attendee->getActorType() + && $message->getActorId() === $attendee->getActorId(); + + // Special case for if the message is a bridged message, then the message is the bridge bot's message. + $isOwnMessage = $isOwnMessage || ($message->getActorType() === Attendee::ACTOR_BRIDGED && $attendee->getActorId() === MatterbridgeManager::BRIDGE_BOT_USERID); + if (!$isOwnMessage + && (!$this->participant->hasModeratorPermissions(false) + || $this->room->getType() === Room::TYPE_ONE_TO_ONE + || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER)) { + // Actor is not a moderator or not the owner of the message + return new DataResponse(['error' => 'permission'], Http::STATUS_FORBIDDEN); + } + + if ($message->getVerb() !== ChatManager::VERB_MESSAGE && $message->getVerb() !== ChatManager::VERB_OBJECT_SHARED) { + // System message (since the message is not parsed, it has type "system") + return new DataResponse(['error' => 'message'], Http::STATUS_METHOD_NOT_ALLOWED); + } + + try { + $systemMessageComment = $this->chatManager->deleteMessage( + $this->room, + $message, + $this->participant, + $this->timeFactory->getDateTime() + ); + } catch (ShareNotFound) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $systemMessage = $this->messageParser->createMessage($this->room, $this->participant, $systemMessageComment, $this->l); + $this->messageParser->parseMessage($systemMessage); + + $comment = $this->chatManager->getComment($this->room, (string)$messageId); + $message = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + try { + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + $thread = $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + $thread = null; + } + + $data = $systemMessage->toArray($this->getResponseFormat(), $thread); + $data['parent'] = $message->toArray($this->getResponseFormat(), $thread); + + $hasBotOrBridge = !empty($this->botService->getBotsForToken($this->room->getToken(), Bot::FEATURE_WEBHOOK)); + if (!$hasBotOrBridge) { + $bridge = $this->matterbridgeManager->getBridgeOfRoom($this->room); + $hasBotOrBridge = $bridge['enabled']; + } + + $headers = []; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $headers = ['X-Chat-Last-Common-Read' => (string)$this->chatManager->getLastCommonReadMessage($this->room)]; + } + return new DataResponse($data, $hasBotOrBridge ? Http::STATUS_ACCEPTED : Http::STATUS_OK, $headers); + } + + /** + * Edit a chat message + * + * @param int $messageId ID of the message + * @param string $message the message to send + * @psalm-param non-negative-int $messageId + * @return DataResponse|DataResponse|DataResponse + * + * 200: Message edited successfully + * 202: Message edited successfully, but a bot or Matterbridge is configured, so the information can be replicated to other services + * 400: Editing message is not possible, e.g. when the new message is empty or the message is too old + * 403: Missing permissions to edit message + * 404: Message not found + * 405: Editing this message type is not allowed + * 413: Message too long + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireAuthenticatedParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'PUT', url: '/api/{apiVersion}/chat/{token}/{messageId}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function editMessage(int $messageId, string $message): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->editMessage( + $this->room, + $this->participant, + $messageId, + $message, + ); + } + + try { + $comment = $this->chatManager->getComment($this->room, (string)$messageId); + } catch (NotFoundException $e) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $attendee = $this->participant->getAttendee(); + $isOwnMessage = $comment->getActorType() === $attendee->getActorType() + && $comment->getActorId() === $attendee->getActorId(); + + // Special case for if the message is a bridged message, then the message is the bridge bot's message. + $isOwnMessage = $isOwnMessage || ($comment->getActorType() === Attendee::ACTOR_BRIDGED && $attendee->getActorId() === MatterbridgeManager::BRIDGE_BOT_USERID); + $isBotInOneToOne = $comment->getActorType() === Attendee::ACTOR_BOTS + && str_starts_with($comment->getActorId(), Attendee::ACTOR_BOT_PREFIX) + && ($this->room->getType() === Room::TYPE_ONE_TO_ONE + || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER); + if (!($isOwnMessage || $isBotInOneToOne) + && (!$this->participant->hasModeratorPermissions(false) + || $this->room->getType() === Room::TYPE_ONE_TO_ONE + || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER)) { + // Actor is not a moderator or not the owner of the message + return new DataResponse(['error' => 'permission'], Http::STATUS_FORBIDDEN); + } + + if ($comment->getVerb() !== ChatManager::VERB_MESSAGE && $comment->getVerb() !== ChatManager::VERB_OBJECT_SHARED) { + // System message (since the message is not parsed, it has type "system") + return new DataResponse(['error' => 'message'], Http::STATUS_METHOD_NOT_ALLOWED); + } + + if ($this->room->getType() !== Room::TYPE_NOTE_TO_SELF) { + $maxAge = $this->timeFactory->getDateTime(); + $maxAge->sub(new \DateInterval('P1D')); + if ($comment->getCreationDateTime() < $maxAge) { + // Message is too old + return new DataResponse(['error' => 'age'], Http::STATUS_BAD_REQUEST); + } + } + try { + $systemMessageComment = $this->chatManager->editMessage( + $this->room, + $comment, + $this->participant, + $this->timeFactory->getDateTime(), + $message + ); + } catch (MessageTooLongException) { + return new DataResponse(['error' => 'message'], Http::STATUS_REQUEST_ENTITY_TOO_LARGE); + } catch (\InvalidArgumentException $e) { + if ($e->getMessage() === 'object_share') { + return new DataResponse(['error' => 'message'], Http::STATUS_METHOD_NOT_ALLOWED); + } + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $systemMessage = $this->messageParser->createMessage($this->room, $this->participant, $systemMessageComment, $this->l); + $this->messageParser->parseMessage($systemMessage); + + $comment = $this->chatManager->getComment($this->room, (string)$messageId); + $parseMessage = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + $this->messageParser->parseMessage($parseMessage); + + try { + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + $thread = $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + $thread = null; + } + + $data = $systemMessage->toArray($this->getResponseFormat(), $thread); + $data['parent'] = $parseMessage->toArray($this->getResponseFormat(), $thread); + + $hasBotOrBridge = !empty($this->botService->getBotsForToken($this->room->getToken(), Bot::FEATURE_WEBHOOK)); + if (!$hasBotOrBridge) { + $bridge = $this->matterbridgeManager->getBridgeOfRoom($this->room); + $hasBotOrBridge = $bridge['enabled']; + } + + $headers = []; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $headers = ['X-Chat-Last-Common-Read' => (string)$this->chatManager->getLastCommonReadMessage($this->room)]; + } + return new DataResponse($data, $hasBotOrBridge ? Http::STATUS_ACCEPTED : Http::STATUS_OK, $headers); + } + + /** + * Set a reminder for a chat message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @param int $timestamp Timestamp of the reminder + * @psalm-param non-negative-int $timestamp + * @return DataResponse|DataResponse + * + * 201: Reminder created successfully + * 404: Message not found + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireModeratorOrNoLobby] + #[RequireLoggedInParticipant] + #[UserRateLimit(limit: 60, period: 3600)] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function setReminder(int $messageId, int $timestamp): DataResponse { + try { + // FIXME fail 400 when reminder is after expiration + // And system messages + $this->validateMessageExists($messageId, sync: true); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $reminder = $this->reminderService->setReminder( + $this->participant->getAttendee()->getActorId(), + $this->room->getToken(), + $messageId, + $timestamp + ); + + return new DataResponse($reminder->jsonSerialize(), Http::STATUS_CREATED); + } + + /** + * Get the reminder for a chat message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @return DataResponse|DataResponse + * + * 200: Reminder returned + * 404: No reminder found or message not found + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireModeratorOrNoLobby] + #[RequireLoggedInParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function getReminder(int $messageId): DataResponse { + try { + $this->validateMessageExists($messageId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + try { + $reminder = $this->reminderService->getReminder( + $this->participant->getAttendee()->getActorId(), + $this->room->getToken(), + $messageId, + ); + return new DataResponse($reminder->jsonSerialize(), Http::STATUS_OK); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'reminder'], Http::STATUS_NOT_FOUND); + } + } + + /** + * Delete a chat reminder + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @return DataResponse + * + * 200: Reminder deleted successfully + * 404: Message not found + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireModeratorOrNoLobby] + #[RequireLoggedInParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/{messageId}/reminder', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function deleteReminder(int $messageId): DataResponse { + try { + $this->validateMessageExists($messageId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $this->reminderService->deleteReminder( + $this->participant->getAttendee()->getActorId(), + $this->room->getToken(), + $messageId, + ); + + return new DataResponse([], Http::STATUS_OK); + } + + /** + * Get all upcoming reminders + * + * Required capability: `upcoming-reminders` + * + * @return DataResponse, array{}> + * + * 200: Reminders returned + */ + #[NoAdminRequired] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/upcoming-reminders', requirements: [ + 'apiVersion' => '(v1)', + ])] + public function getUpcomingReminders(): DataResponse { + if ($this->userId === null) { + return new DataResponse([], Http::STATUS_OK); + } + + $reminders = $this->reminderService->getUpcomingReminders($this->userId, Reminder::NUM_UPCOMING_REMINDERS); + if (empty($reminders)) { + return new DataResponse([], Http::STATUS_OK); + } + + $tokens = array_unique(array_map(static fn (Reminder $reminder): string => $reminder->getToken(), $reminders)); + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_USERS, $this->userId, tokens: $tokens); + $roomMap = []; + foreach ($rooms as $room) { + if ($room->isFederatedConversation()) { + // FIXME Federated chats + continue; + } + $roomMap[$room->getToken()] = $room; + } + + /** @var Reminder[] $reminders */ + $reminders = array_filter($reminders, static fn (Reminder $reminder): bool => isset($roomMap[$reminder->getToken()])); + if (empty($reminders)) { + return new DataResponse([], Http::STATUS_OK); + } + + $messageIds = array_map(static fn (Reminder $reminder): int => $reminder->getMessageId(), $reminders); + $comments = $this->chatManager->getMessagesById($messageIds); + $now = $this->timeFactory->getDateTime(); + + $resultData = []; + foreach ($reminders as $reminder) { + if (!isset($comments[$reminder->getMessageId()])) { + continue; + } + $comment = $comments[$reminder->getMessageId()]; + $room = $roomMap[$reminder->getToken()]; + try { + $participant = $this->participantService->getParticipant($room, $this->userId); + } catch (ParticipantNotFoundException) { + continue; + } + + $message = $this->messageParser->createMessage($room, $participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + $expireDate = $message->getExpirationDateTime(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + continue; + } + + if (!$message->getVisibility()) { + continue; + } + + $data = $message->toArray($this->getResponseFormat(), null); + + if ($participant->getAttendee()->isSensitive()) { + $data['message'] = ''; + $data['messageParameters'] = []; + } + + $resultData[] = [ + 'reminderTimestamp' => $reminder->getDateTime()->getTimestamp(), + 'roomToken' => $reminder->getToken(), + 'messageId' => $reminder->getMessageId(), + 'actorType' => $data['actorType'], + 'actorId' => $data['actorId'], + 'actorDisplayName' => $data['actorDisplayName'], + 'message' => $data['message'], + 'messageParameters' => $data['messageParameters'], + ]; + } + + return new DataResponse($resultData, Http::STATUS_OK); + } + + /** + * @throws DoesNotExistException + * @throws CannotReachRemoteException + */ + protected function validateMessageExists(int $messageId, bool $sync = false): void { + if ($this->room->isFederatedConversation()) { + try { + $this->pcmService->findByRemote($this->room->getRemoteServer(), $this->room->getRemoteToken(), $messageId); + } catch (DoesNotExistException) { + if ($sync) { + $this->pcmService->syncRemoteMessage($this->room, $this->participant, $messageId); + } + } + return; + } + + try { + $this->chatManager->getComment($this->room, (string)$messageId); + } catch (NotFoundException $e) { + throw new DoesNotExistException($e->getMessage()); + } + } + + /** + * Clear the chat history + * + * @return DataResponse|DataResponse + * + * 200: History cleared successfully + * 202: History cleared successfully, but Federation or Matterbridge is configured, so the information can be replicated elsewhere + * 403: Missing permissions to clear history + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + #[RequireReadWriteConversation] + #[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function clearHistory(): DataResponse { + $attendee = $this->participant->getAttendee(); + if (!$this->participant->hasModeratorPermissions(false)) { + // Actor is not a moderator + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + if (!$this->appConfig->getAppValueBool('delete_one_to_one_conversations') + && ($this->room->getType() === Room::TYPE_ONE_TO_ONE + || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER)) { + // Not allowed to purge one-to-one conversations + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + $systemMessageComment = $this->chatManager->clearHistory( + $this->room, + $attendee->getActorType(), + $attendee->getActorId() + ); + + $systemMessage = $this->messageParser->createMessage($this->room, $this->participant, $systemMessageComment, $this->l); + $this->messageParser->parseMessage($systemMessage); + + + $data = $systemMessage->toArray($this->getResponseFormat(), null); + + $bridge = $this->matterbridgeManager->getBridgeOfRoom($this->room); + + $headers = []; + if ($this->participant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $headers = ['X-Chat-Last-Common-Read' => (string)$this->chatManager->getLastCommonReadMessage($this->room)]; + } + return new DataResponse($data, $bridge['enabled'] ? Http::STATUS_ACCEPTED : Http::STATUS_OK, $headers); + } + + /** + * Set the read marker to a specific message + * + * @param int|null $lastReadMessage ID if the last read message (Optional only with `chat-read-last` capability) + * @psalm-param int<-2, max>|null $lastReadMessage + * @return DataResponse + * + * 200: Read marker set successfully + */ + #[FederationSupported] + #[PublicPage] + #[RequireAuthenticatedParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/read', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function setReadMarker(?int $lastReadMessage = null): DataResponse { + $setToMessage = $lastReadMessage ?? $this->room->getLastMessageId(); + if ($setToMessage === 0) { + /** + * Frontend and Desktop don't get chat context with ID 0, + * so we collectively tested and decided that @see ChatManager::UNREAD_FIRST_MESSAGE + * should be used instead. + */ + $setToMessage = ChatManager::UNREAD_FIRST_MESSAGE; + } + + if ($setToMessage === $this->room->getLastMessageId() + && $this->participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $this->notifier->markMentionNotificationsRead($this->room, $this->participant->getAttendee()->getActorId()); + } + + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->setReadMarker($this->room, $this->participant, $this->getResponseFormat(), $lastReadMessage); + } + + $this->participantService->updateLastReadMessage($this->participant, $setToMessage); + $attendee = $this->participant->getAttendee(); + + $headers = $lastCommonRead = []; + if ($attendee->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + $lastCommonRead[$this->room->getId()] = $this->chatManager->getLastCommonReadMessage($this->room); + $headers = ['X-Chat-Last-Common-Read' => (string)$lastCommonRead[$this->room->getId()]]; + } + + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + $lastCommonRead, + $this->room, + $this->participant, + ), Http::STATUS_OK, $headers); + } + + /** + * Mark a chat as unread + * + * @return DataResponse + * + * 200: Read marker set successfully + */ + #[FederationSupported] + #[PublicPage] + #[RequireAuthenticatedParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/chat/{token}/read', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function markUnread(): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->markUnread($this->room, $this->participant, $this->getResponseFormat()); + } + + $message = $this->room->getLastMessage(); + if ($message instanceof IComment) { + try { + $previousMessage = $this->chatManager->getPreviousMessageWithVerb( + $this->room, + (int)$message->getId(), + [ChatManager::VERB_MESSAGE, ChatManager::VERB_OBJECT_SHARED], + $message->getVerb() === ChatManager::VERB_MESSAGE || $message->getVerb() === ChatManager::VERB_OBJECT_SHARED + ); + return $this->setReadMarker((int)$previousMessage->getId()); + } catch (NotFoundException) { + // No chat message found, try system messages … + } + + try { + $messages = $this->chatManager->getHistory( + $this->room, + (int)$message->getId(), + 1, + false, + ); + + if (empty($messages)) { + throw new NotFoundException('No comments found'); + } + + $previousMessage = array_pop($messages); + return $this->setReadMarker((int)$previousMessage->getId()); + } catch (NotFoundException) { + /** + * Neither system messages found, fall back to `-1`. + * This can happen when you: + * - Set up message expiration + * - Clear the chat history afterwards + */ + } + } + + return $this->setReadMarker(ChatManager::UNREAD_FIRST_MESSAGE); + } + + /** + * Get objects that are shared in the room overview + * + * Federated conversations are supported with the `federated-shared-items` capability + * + * @param int<1, 20> $limit Maximum number of objects + * @return DataResponse>, array{}> + * + * 200: List of shared objects messages of each type returned + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/share/overview', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function getObjectsSharedInRoomOverview(int $limit = 7): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->getObjectsSharedInRoomOverview($this->room, $this->participant, $limit); + } + + $limit = min(20, max(1, $limit)); + + $objectTypes = [ + Attachment::TYPE_AUDIO, + Attachment::TYPE_DECK_CARD, + Attachment::TYPE_FILE, + Attachment::TYPE_LOCATION, + Attachment::TYPE_MEDIA, + Attachment::TYPE_OTHER, + Attachment::TYPE_POLL, + Attachment::TYPE_RECORDING, + Attachment::TYPE_VOICE, + ]; + + if ($this->participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + // No file support for federated users so far + $objectTypes = [ + // Attachment::TYPE_AUDIO, + Attachment::TYPE_DECK_CARD, + // Attachment::TYPE_FILE, + Attachment::TYPE_LOCATION, + // Attachment::TYPE_MEDIA, + // Attachment::TYPE_OTHER, + Attachment::TYPE_POLL, + // Attachment::TYPE_RECORDING, + // Attachment::TYPE_VOICE, + ]; + } + + $messageIdsByType = []; + // Get all attachments + foreach ($objectTypes as $objectType) { + $attachments = $this->attachmentService->getAttachmentsByType($this->room, $objectType, 0, $limit); + $messageIdsByType[$objectType] = array_map(static fn (Attachment $attachment): string => (string)$attachment->getMessageId(), $attachments); + } + + $messages = $this->getMessagesForRoom(array_merge(...array_values($messageIdsByType))); + + $messagesByType = []; + // Convert list of $messages to array grouped by type + foreach ($objectTypes as $objectType) { + $messagesByType[$objectType] = []; + + foreach ($messageIdsByType[$objectType] as $messageId) { + if (isset($messages[$messageId])) { + $messagesByType[$objectType][] = $messages[$messageId]; + } + } + } + + return new DataResponse($messagesByType, Http::STATUS_OK); + } + + /** + * Get objects that are shared in the room + * + * Federated conversations are supported with the `federated-shared-items` capability + * + * @param string $objectType Type of the objects + * @param int $lastKnownMessageId ID of the last known message + * @psalm-param non-negative-int $lastKnownMessageId + * @param int<1, 200> $limit Maximum number of objects + * @return DataResponse, array{X-Chat-Last-Given?: numeric-string}> + * + * 200: List of shared objects messages returned + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/share', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function getObjectsSharedInRoom(string $objectType, int $lastKnownMessageId = 0, int $limit = 100): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->getObjectsSharedInRoom($this->room, $this->participant, $objectType, $lastKnownMessageId, $limit); + } + + $isFileType = [ + Attachment::TYPE_AUDIO, + Attachment::TYPE_FILE, + Attachment::TYPE_MEDIA, + Attachment::TYPE_OTHER, + Attachment::TYPE_RECORDING, + Attachment::TYPE_VOICE, + ]; + + if (in_array($objectType, $isFileType, true) + && $this->participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + // No file support for federated users so far + return new DataResponse([], Http::STATUS_OK, []); + } + + $offset = max(0, $lastKnownMessageId); + $limit = min(200, max(1, $limit)); + + $attachments = $this->attachmentService->getAttachmentsByType($this->room, $objectType, $offset, $limit); + $messageIds = array_map(static fn (Attachment $attachment): int => $attachment->getMessageId(), $attachments); + + $messages = $this->getMessagesForRoom($messageIds); + + $headers = []; + if (!empty($messages)) { + $newLastKnown = (string)(int)min(array_keys($messages)); + $headers = ['X-Chat-Last-Given' => $newLastKnown]; + } + + return new DataResponse($messages, Http::STATUS_OK, $headers); + } + + /** + * @return array + */ + protected function getMessagesForRoom(array $messageIds): array { + $comments = $this->chatManager->getMessagesForRoomById($this->room, $messageIds); + $this->sharePreloader->preloadShares($comments); + $potentialThreadIds = array_map(static fn (IComment $comment) => (int)$comment->getTopmostParentId() ?: (int)$comment->getId(), $comments); + $threads = $this->threadService->findByThreadIds($this->room->getId(), $potentialThreadIds); + + $messages = []; + $comments = $this->chatManager->filterCommentsWithNonExistingFiles($comments); + foreach ($comments as $comment) { + $message = $this->messageParser->createMessage($this->room, $this->participant, $comment, $this->l); + + $this->messageParser->parseMessage($message); + + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + continue; + } + + if (!$message->getVisibility()) { + continue; + } + + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + $messages[$comment->getId()] = $message->toArray($this->getResponseFormat(), $threads[$threadId] ?? null); + } + + return $messages; + } + + /** + * Search for mentions + * + * @param string $search Text to search for + * @param int $limit Maximum number of results + * @param bool $includeStatus Include the user statuses + * @return DataResponse, array{}> + * + * 200: List of mention suggestions returned + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/mentions', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function mentions(string $search, int $limit = 20, bool $includeStatus = false): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + return $proxy->mentions($this->room, $this->participant, $search, $limit, $includeStatus); + } + $this->searchPlugin->setContext([ + 'itemType' => 'chat', + 'itemId' => $this->room->getId(), + 'room' => $this->room, + ]); + $this->searchPlugin->search($search, $limit, 0, $this->searchResult); + + $results = $this->searchResult->asArray(); + $exactMatches = $results['exact']; + unset($results['exact']); + $results = array_merge_recursive($exactMatches, $results); + + $this->autoCompleteManager->registerSorter(Sorter::class); + /** @psalm-suppress InvalidArgument */ + $this->autoCompleteManager->runSorters(['talk_chat_participants'], $results, [ + 'itemType' => 'chat', + 'itemId' => (string)$this->room->getId(), + 'search' => $search, + 'selfUserId' => $this->userId, + 'selfCloudId' => $this->userId === null ? $this->federationAuthenticator->getCloudId() : null, + ]); + + $statuses = []; + if ($this->userId !== null + && $includeStatus + && $this->appManager->isEnabledForUser('user_status')) { + $userIds = array_filter(array_map(static function (array $userResult) { + return $userResult['value']['shareWith']; + }, $results['users'])); + + $statuses = $this->statusManager->getUserStatuses($userIds); + } + + $results = $this->prepareResultArray($results, $statuses); + + $results = $this->chatManager->addConversationNotify($results, $search, $this->room, $this->participant); + + return new DataResponse($results); + } + + + /** + * @param array $results + * @param array $statuses + * @return list + */ + protected function prepareResultArray(array $results, array $statuses): array { + $output = []; + foreach ($results as $type => $subResult) { + foreach ($subResult as $result) { + $data = [ + 'id' => $result['value']['shareWith'], + 'label' => $result['label'], + 'source' => $type, + 'mentionId' => $this->createMentionString($type, $result['value']['shareWith']), + ]; + + if ($type === Attendee::ACTOR_USERS && isset($statuses[$data['id']])) { + $data['status'] = $statuses[$data['id']]->getStatus(); + $data['statusIcon'] = $statuses[$data['id']]->getIcon(); + $data['statusMessage'] = $statuses[$data['id']]->getMessage(); + $data['statusClearAt'] = $statuses[$data['id']]->getClearAt()?->getTimestamp(); + } + + if ($type === Attendee::ACTOR_EMAILS && isset($result['details']) && $this->participant->hasModeratorPermissions()) { + $data['details'] = $result['details']['email']; + } + + $output[] = $data; + } + } + return $output; + } + + protected function createMentionString(string $type, string $id): string { + if ($type !== Attendee::ACTOR_FEDERATED_USERS) { + return $id; + } + + // We want "federated_user/admin@example.tld" so we have to strip off the trailing "s" from the type "federated_users" + return substr($type, 0, -1) . '/' . $id; + } +} diff --git a/lib/Controller/FederationController.php b/lib/Controller/FederationController.php new file mode 100644 index 0000000..1267bcc --- /dev/null +++ b/lib/Controller/FederationController.php @@ -0,0 +1,174 @@ +request->getParam('format'); + + // if none is given try the first Accept header + if ($format === null) { + $headers = $this->request->getHeader('accept'); + /** + * Default value of + * @see OCSController::buildResponse() + */ + $format = $this->getResponderByHTTPHeader($headers, 'xml'); + } + + return $format; + } + + /** + * Accept a federation invites + * + * 🚧 Draft: Still work in progress + * + * @param int $id ID of the share + * @psalm-param non-negative-int $id + * @return DataResponse|DataResponse + * + * 200: Invite accepted successfully + * 400: Invite can not be accepted (maybe it was accepted already) + * 404: Invite can not be found + * 410: Remote server could not be reached to notify about the acceptance + */ + #[NoAdminRequired] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + public function acceptShare(int $id): DataResponse { + $user = $this->userSession->getUser(); + if (!$user instanceof IUser) { + return new DataResponse(['error' => 'user'], Http::STATUS_NOT_FOUND); + } + try { + $participant = $this->federationManager->acceptRemoteRoomShare($user, $id); + } catch (CannotReachRemoteException) { + return new DataResponse(['error' => 'remote'], Http::STATUS_GONE); + } catch (UnauthorizedException $e) { + return new DataResponse(['error' => 'user'], Http::STATUS_NOT_FOUND); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], $e->getMessage() === 'invitation' ? Http::STATUS_NOT_FOUND : Http::STATUS_BAD_REQUEST); + } + return new DataResponse($this->roomFormatter->formatRoom( + $this->getResponseFormat(), + [], + $participant->getRoom(), + $participant, + )); + } + + /** + * Decline a federation invites + * + * 🚧 Draft: Still work in progress + * + * @param int $id ID of the share + * @psalm-param non-negative-int $id + * @return DataResponse|DataResponse + * + * 200: Invite declined successfully + * 400: Invite was already accepted, use the "Remove the current user from a room" endpoint instead + * 404: Invite can not be found + */ + #[NoAdminRequired] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + public function rejectShare(int $id): DataResponse { + $user = $this->userSession->getUser(); + if (!$user instanceof IUser) { + return new DataResponse(['error' => 'user'], Http::STATUS_NOT_FOUND); + } + try { + $this->federationManager->rejectRemoteRoomShare($user, $id); + } catch (UnauthorizedException $e) { + return new DataResponse(['error' => 'user'], Http::STATUS_NOT_FOUND); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], $e->getMessage() === 'invitation' ? Http::STATUS_NOT_FOUND : Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Get a list of federation invites + * + * 🚧 Draft: Still work in progress + * + * @return DataResponse, array{}> + * + * 200: Get list of received federation invites successfully + */ + #[NoAdminRequired] + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + public function getShares(): DataResponse { + $user = $this->userSession->getUser(); + if (!$user instanceof IUser) { + throw new UnauthorizedException(); + } + $invitations = $this->federationManager->getRemoteRoomShares($user); + + /** @var list $data */ + $data = array_values(array_filter(array_map([$this, 'enrichInvite'], $invitations))); + + return new DataResponse($data); + } + + /** + * @param Invitation $invitation + * @return TalkFederationInvite|null + */ + protected function enrichInvite(Invitation $invitation): ?array { + try { + $room = $this->talkManager->getRoomById($invitation->getLocalRoomId()); + } catch (RoomNotFoundException) { + return null; + } + + $federationInvite = $invitation->jsonSerialize(); + $federationInvite['roomName'] = $room->getName(); + $federationInvite['localToken'] = $room->getToken(); + return $federationInvite; + } +} diff --git a/lib/Controller/FilesIntegrationController.php b/lib/Controller/FilesIntegrationController.php new file mode 100644 index 0000000..1ea2a40 --- /dev/null +++ b/lib/Controller/FilesIntegrationController.php @@ -0,0 +1,217 @@ +|DataResponse + * @throws OCSNotFoundException Share not found + * + * 200: Room token returned + * 400: Rooms not allowed for shares + */ + #[NoAdminRequired] + public function getRoomByFileId(string $fileId): DataResponse { + if ($this->config->getAppValue('spreed', 'conversations_files', '1') !== '1') { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $currentUser = $this->userSession->getUser(); + if (!$currentUser instanceof IUser) { + throw new OCSException($this->l->t('File is not shared, or shared but not with the user'), Http::STATUS_UNAUTHORIZED); + } + + + $node = $this->util->getAnyNodeOfFileAccessibleByUser($fileId, $currentUser->getUID()); + if ($node === null) { + throw new OCSNotFoundException($this->l->t('File is not shared, or shared but not with the user')); + } + + $users = $this->util->getUsersWithAccessFile($fileId); + if (count($users) <= 1 && !$this->util->canGuestsAccessFile($fileId)) { + throw new OCSNotFoundException($this->l->t('File is not shared, or shared but not with the user')); + } + + try { + $room = $this->manager->getRoomByObject('file', $fileId); + } catch (RoomNotFoundException $e) { + $name = $node->getName(); + $name = $this->roomService->prepareConversationName($name); + $room = $this->roomService->createConversation( + Room::TYPE_PUBLIC, + $name, + null, + Room::OBJECT_TYPE_FILE, + $fileId, + ); + } + + return new DataResponse([ + 'token' => $room->getToken() + ]); + } + + /** + * Returns the token of the room associated to the file of the given + * share token + * + * This is the counterpart of self::getRoomByFileId() for share tokens + * instead of file ids, although both return the same room token if the + * given file id and share token refer to the same file. + * + * If there is no room associated to the file id of the given share token a + * new room is created; the new room is a public room associated with a + * "file" object with the file id of the given share token. Unlike normal + * rooms in which the owner is the user that created the room these are + * special rooms without owner (although self joined users with direct + * access to the file become persistent participants automatically when they + * join until they explicitly leave or no longer have access to the file). + * + * In any case, to create or even get the token of the room, the file must + * be publicly shared (like a link share, for example); an error is returned + * otherwise. + * + * Besides the token of the room this also returns the current user ID and + * display name, if any; this is needed by the Talk sidebar to know the + * actual current user, as the public share page uses the incognito mode and + * thus logged-in users as seen as guests. + * + * @param string $shareToken Token of the file share + * @return DataResponse|DataResponse + * + * 200: Room token and user info returned + * 400: Rooms not allowed for shares + * 404: Share not found + */ + #[PublicPage] + #[UseSession] + #[BruteForceProtection(action: 'shareinfo')] + public function getRoomByShareToken(string $shareToken): DataResponse { + if ($this->config->getAppValue('spreed', 'conversations_files', '1') !== '1' + || $this->config->getAppValue('spreed', 'conversations_files_public_shares', '1') !== '1') { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + try { + $share = $this->shareManager->getShareByToken($shareToken); + if ($share->getPassword() !== null) { + $shareId = $this->session->get('public_link_authenticated'); + if ($share->getId() !== $shareId) { + throw new ShareNotFound(); + } + } + } catch (ShareNotFound $e) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $shareToken, 'action' => 'shareinfo']); + return $response; + } + + try { + if ($share->getNodeType() !== FileInfo::TYPE_FILE) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $fileId = (string)$share->getNodeId(); + + try { + $room = $this->manager->getRoomByObject('file', $fileId); + } catch (RoomNotFoundException) { + $name = $share->getNode()->getName(); + $name = $this->roomService->prepareConversationName($name); + $room = $this->roomService->createConversation( + Room::TYPE_PUBLIC, + $name, + null, + Room::OBJECT_TYPE_FILE, + $fileId, + ); + } + } catch (NotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $this->talkSession->setFileShareTokenForRoom($room->getToken(), $shareToken); + + $currentUser = $this->userSession->getUser(); + $currentUserId = $currentUser instanceof IUser ? $currentUser->getUID() : ''; + $currentUserDisplayName = $currentUser instanceof IUser ? $currentUser->getDisplayName() : ''; + + return new DataResponse([ + 'token' => $room->getToken(), + 'userId' => $currentUserId, + 'userDisplayName' => $currentUserDisplayName, + ]); + } +} diff --git a/lib/Controller/GuestController.php b/lib/Controller/GuestController.php new file mode 100644 index 0000000..9fbadc4 --- /dev/null +++ b/lib/Controller/GuestController.php @@ -0,0 +1,55 @@ + + * + * 200: Display name updated successfully + * 403: Not a guest + * 404: Not a participant + */ + #[PublicPage] + #[RequireParticipant] + public function setDisplayName(string $displayName): DataResponse { + $participant = $this->getParticipant(); + if (!$participant instanceof Participant) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if (!$participant->isGuest()) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + $this->guestManager->updateName($this->getRoom(), $participant, $displayName); + + return new DataResponse(null); + } +} diff --git a/lib/Controller/HostedSignalingServerController.php b/lib/Controller/HostedSignalingServerController.php new file mode 100644 index 0000000..499a24e --- /dev/null +++ b/lib/Controller/HostedSignalingServerController.php @@ -0,0 +1,156 @@ +|DataResponse + * + * 200: Authentication credentials returned + * 403: Provided nonce is wrong + * 412: Getting authentication credentials is not possible + */ + #[OpenAPI(scope: OpenAPI::SCOPE_IGNORE)] + #[PublicPage] + #[BruteForceProtection(action: 'hosted-hpb-nonce')] + #[RequestHeader(name: 'x-account-service-nonce', description: 'Random string provided to the hostedsignalingserver entity, so it can verify that it was requested')] + public function auth(): DataResponse { + $sentNonce = $this->request->getHeader('x-account-service-nonce'); + if ($sentNonce === '') { + $response = new DataResponse(null, Http::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } + + $storedNonce = $this->config->getAppValue('spreed', 'hosted-signaling-server-nonce', ''); + if ($storedNonce === '') { + return new DataResponse(null, Http::STATUS_PRECONDITION_FAILED); + } + + if (!hash_equals($storedNonce, $sentNonce)) { + $response = new DataResponse(null, Http::STATUS_FORBIDDEN); + $response->throttle(); + return $response; + } + + // reset nonce after one request + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-nonce'); + + return new DataResponse([ + 'nonce' => $storedNonce, + ]); + } + + /** + * Request a trial account + * + * @param string $url Server URL + * @param string $name Display name of the user + * @param string $email Email of the user + * @param string $language Language of the user + * @param string $country Country of the user + * @return DataResponse, array{}>|DataResponse + * + * 200: Trial requested successfully + * 400: Requesting trial is not possible + */ + public function requestTrial(string $url, string $name, string $email, string $language, string $country): DataResponse { + try { + $registerAccountData = new RegisterAccountData( + $url, + $name, + $email, + $language, + $country + ); + + $accountId = $this->hostedSignalingServerService->registerAccount($registerAccountData); + $accountInfo = $this->hostedSignalingServerService->fetchAccountInfo($accountId); + $this->config->setAppValue('spreed', 'hosted-signaling-server-account', json_encode($accountInfo)); + } catch (HostedSignalingServerAPIException $e) { // API or connection issues + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR); + } catch (HostedSignalingServerInputException $e) { // user solvable issues + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + + return new DataResponse($accountInfo); + } + + /** + * Delete the account + * + * @return DataResponse|DataResponse + * + * 204: Account deleted successfully + * 400: Deleting account is not possible + */ + public function deleteAccount(): DataResponse { + $accountId = $this->config->getAppValue('spreed', 'hosted-signaling-server-account-id'); + + if ($accountId === null) { + return new DataResponse(['message' => $this->l10n->t('No account available to delete.')], Http::STATUS_BAD_REQUEST); + } + + try { + $this->hostedSignalingServerService->deleteAccount(new AccountId($accountId)); + } catch (HostedSignalingServerAPIException $e) { + if ($e->getCode() === Http::STATUS_NOT_FOUND) { + // Account was deleted, so remove the information locally + } else { + // API or connection issues - do nothing and just try again later + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_INTERNAL_SERVER_ERROR); + } + } + + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-account'); + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-account-id'); + + // remove signaling servers if account is not active anymore + $this->config->deleteAppValue('spreed', 'signaling_mode'); + $this->config->deleteAppValue('spreed', 'signaling_servers'); + + $this->logger->info('Deleted hosted signaling server account with ID ' . $accountId); + + return new DataResponse(null, Http::STATUS_NO_CONTENT); + } +} diff --git a/lib/Controller/LiveTranscriptionController.php b/lib/Controller/LiveTranscriptionController.php new file mode 100644 index 0000000..f8e5498 --- /dev/null +++ b/lib/Controller/LiveTranscriptionController.php @@ -0,0 +1,153 @@ +|DataResponse + * + * 200: Live transcription enabled successfully + * 400: The external app "live_transcription" is not available + * 400: The participant is not in the call + */ + #[PublicPage] + #[RequireCallEnabled] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/live-transcription/{token}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function enable(): DataResponse { + if ($this->room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + if ($this->participant->getSession() && $this->participant->getSession()->getInCall() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->liveTranscriptionService->enable($this->room, $this->participant); + } catch (LiveTranscriptionAppNotEnabledException $e) { + return new DataResponse(['error' => 'app'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Disable the live transcription + * + * @return DataResponse|DataResponse + * + * 200: Live transcription stopped successfully + * 400: The external app "live_transcription" is not available + * 400: The participant is not in the call + */ + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[ApiRoute(verb: 'DELETE', url: '/api/{apiVersion}/live-transcription/{token}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function disable(): DataResponse { + if ($this->room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + if ($this->participant->getSession() && $this->participant->getSession()->getInCall() === Participant::FLAG_DISCONNECTED) { + return new DataResponse(['error' => 'in-call'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->liveTranscriptionService->disable($this->room, $this->participant); + } catch (LiveTranscriptionAppNotEnabledException $e) { + return new DataResponse(['error' => 'app'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Get available languages for live transcriptions + * + * @return DataResponse, array{}>|DataResponse + * + * 200: Available languages got successfully + * 400: The external app "live_transcription" is not available + */ + #[PublicPage] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/live-transcription/languages', requirements: [ + 'apiVersion' => '(v1)', + ])] + public function getAvailableLanguages(): DataResponse { + try { + $languages = $this->liveTranscriptionService->getAvailableLanguages(); + } catch (LiveTranscriptionAppNotEnabledException $e) { + return new DataResponse(['error' => 'app'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($languages); + } + + /** + * Set language for live transcriptions + * + * @param string $languageId the ID of the language to set + * @return DataResponse|DataResponse + * + * 200: Language set successfully + * 400: The external app "live_transcription" is not available + * 403: Participant is not a moderator + */ + #[PublicPage] + #[RequireModeratorParticipant] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/live-transcription/{token}/language', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function setLanguage(string $languageId): DataResponse { + try { + $this->liveTranscriptionService->setLanguage($this->room, $languageId); + } catch (LiveTranscriptionAppNotEnabledException $e) { + return new DataResponse(['error' => 'app'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } +} diff --git a/lib/Controller/MatterbridgeController.php b/lib/Controller/MatterbridgeController.php new file mode 100644 index 0000000..495687a --- /dev/null +++ b/lib/Controller/MatterbridgeController.php @@ -0,0 +1,110 @@ + + * + * 200: Return list of configured bridges + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function getBridgeOfRoom(): DataResponse { + $pid = $this->bridgeManager->checkBridge($this->room); + $logContent = $this->bridgeManager->getBridgeLog($this->room); + $bridge = $this->bridgeManager->getBridgeOfRoom($this->room); + $bridge['running'] = ($pid !== 0); + $bridge['log'] = $logContent; + return new DataResponse($bridge); + } + + /** + * Get bridge process information + * + * @return DataResponse + * + * 200: Return list of running processes + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function getBridgeProcessState(): DataResponse { + $state = $this->bridgeManager->getBridgeProcessState($this->room); + return new DataResponse($state); + } + + /** + * Edit bridge information of one room + * + * @param bool $enabled If the bridge should be enabled + * @param TalkMatterbridgeConfigFields $parts New parts + * @return DataResponse|DataResponse + * + * 200: Bridge edited successfully + * 406: Editing bridge is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function editBridgeOfRoom(bool $enabled, array $parts = []): DataResponse { + try { + $state = $this->bridgeManager->editBridgeOfRoom($this->room, $this->userId, $enabled, $parts); + } catch (ImpossibleToKillException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_NOT_ACCEPTABLE); + } + return new DataResponse($state); + } + + /** + * Delete bridge of one room + * + * @return DataResponse|DataResponse + * + * 200: Bridge deleted successfully + * 406: Deleting bridge is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function deleteBridgeOfRoom(): DataResponse { + try { + $success = $this->bridgeManager->deleteBridgeOfRoom($this->room); + } catch (ImpossibleToKillException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_NOT_ACCEPTABLE); + } + return new DataResponse($success); + } +} diff --git a/lib/Controller/MatterbridgeSettingsController.php b/lib/Controller/MatterbridgeSettingsController.php new file mode 100644 index 0000000..4544779 --- /dev/null +++ b/lib/Controller/MatterbridgeSettingsController.php @@ -0,0 +1,75 @@ +|DataResponse + * + * 200: Bridge version returned + * 400: Getting bridge version is not possible + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['matterbridge'])] + public function getMatterbridgeVersion(): DataResponse { + try { + $version = $this->bridgeManager->getCurrentVersionFromBinary(); + if ($version === null) { + return new DataResponse([ + 'error' => 'binary', + ], Http::STATUS_BAD_REQUEST); + } + } catch (WrongPermissionsException $e) { + return new DataResponse([ + 'error' => 'binary_permissions', + ], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse([ + 'version' => $version, + ]); + } + + /** + * Stop all bridges + * + * @return DataResponse|DataResponse + * + * 200: All bridges stopped successfully + * 406: Stopping all bridges is not possible + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['matterbridge'])] + public function stopAllBridges(): DataResponse { + try { + $success = $this->bridgeManager->stopAllBridges(); + } catch (ImpossibleToKillException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_NOT_ACCEPTABLE); + } + return new DataResponse($success); + } +} diff --git a/lib/Controller/PageController.php b/lib/Controller/PageController.php new file mode 100644 index 0000000..e0009a9 --- /dev/null +++ b/lib/Controller/PageController.php @@ -0,0 +1,521 @@ +logger = $logger; + $this->initialState = $initialState; + $this->memcacheFactory = $memcacheFactory; + $this->talkConfig = $talkConfig; + $this->serverConfig = $serverConfig; + $this->groupManager = $groupManager; + } + + /** + * @param string $token + * @return Response + * @throws HintException + */ + #[NoCSRFRequired] + #[PublicPage] + #[UseSession] + #[BruteForceProtection(action: 'talkRoomToken')] + public function showCall(string $token, string $email = '', string $access = ''): Response { + // This is the entry point from the `/call/{token}` URL which is hardcoded in the server. + return $this->pageHandler($token, email: $email, accessToken: $access); + } + + /** + * @param string $token + * @param string $password + * @return Response + * @throws HintException + */ + #[NoCSRFRequired] + #[PublicPage] + #[UseSession] + #[BruteForceProtection(action: 'talkRoomPassword')] + public function authenticatePassword(string $token, string $password = ''): Response { + // This is the entry point from the `/call/{token}` URL which is hardcoded in the server. + return $this->pageHandler($token, password: $password); + } + + #[NoCSRFRequired] + #[PublicPage] + public function notFound(): Response { + return $this->pageHandler(); + } + + #[NoCSRFRequired] + #[PublicPage] + public function duplicateSession(): Response { + return $this->pageHandler(); + } + + /** + * @param string $token + * @param string $callUser + * @return TemplateResponse|RedirectResponse + * @throws HintException + */ + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomToken')] + #[UseSession] + public function index(string $token = '', string $callUser = ''): Response { + if ($callUser !== '') { + $token = ''; + } + return $this->pageHandler($token, $callUser); + } + + /** + * @param string $token + * @param string $callUser + * @param string $password + * @return TemplateResponse|RedirectResponse + * @throws HintException + */ + protected function pageHandler( + string $token = '', + string $callUser = '', + string $password = '', + string $email = '', + #[SensitiveParameter] + string $accessToken = '', + ): Response { + $bruteForceToken = $token; + $user = $this->userSession->getUser(); + if (!$user instanceof IUser) { + return $this->guestEnterRoom($token, $password, $email, $accessToken); + } + + $throttle = false; + if ($token !== '') { + $room = null; + try { + $room = $this->manager->getRoomByToken($token, $this->userId); + $notification = $this->notificationManager->createNotification(); + $shouldFlush = $this->notificationManager->defer(); + try { + $notification->setApp('spreed') + ->setUser($this->userId) + ->setObject('room', $room->getToken()); + $this->notificationManager->markProcessed($notification); + $notification->setObject('call', $room->getToken()); + $this->notificationManager->markProcessed($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + + // If the room is not a public room, check if the user is in the participants + if ($room->getType() !== Room::TYPE_PUBLIC) { + $this->manager->getRoomForUser($room->getId(), $this->userId); + } + } catch (RoomNotFoundException $e) { + // Room not found, redirect to main page + $token = ''; + $throttle = true; + } + + if ($room instanceof Room && $room->hasPassword()) { + // If the user joined themselves or is not found, they need the password. + try { + $participant = $this->participantService->getParticipant($room, $this->userId, false); + $requirePassword = $participant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED; + } catch (ParticipantNotFoundException $e) { + $requirePassword = true; + } + + if ($requirePassword) { + $password = $password !== '' ? $password : (string)$this->talkSession->getPasswordForRoom($token); + + $passwordVerification = $this->roomService->verifyPassword($room, $password); + + if ($passwordVerification['result']) { + $this->talkSession->renewSessionId(); + $this->talkSession->setPasswordForRoom($token, $password); + $this->throttler->resetDelay($this->request->getRemoteAddress(), 'talkRoomPassword', ['token' => $token, 'action' => 'talkRoomPassword']); + } else { + $this->talkSession->removePasswordForRoom($token); + $showBruteForceWarning = $this->throttler->getDelay($this->request->getRemoteAddress(), 'talkRoomPassword') > 5000; + + if ($passwordVerification['url'] === '') { + $response = new TemplateResponse($this->appName, 'authenticate', [ + 'wrongpw' => $password !== '', + 'showBruteForceWarning' => $showBruteForceWarning, + ], 'guest'); + } else { + $response = new RedirectResponse($passwordVerification['url']); + } + + $this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']); + $response->throttle(['token' => $token, 'action' => 'talkRoomPassword']); + return $response; + } + } + } + } else { + $response = $this->api->createRoom(Room::TYPE_ONE_TO_ONE, $callUser); + if ($response->getStatus() === Http::STATUS_OK + || $response->getStatus() === Http::STATUS_CREATED) { + $data = $response->getData(); + return $this->redirectToConversation($data['token']); + } + } + + $this->publishInitialStateForUser($user, $this->rootFolder, $this->appManager); + + if (class_exists(LoadViewer::class)) { + $this->eventDispatcher->dispatchTyped(new LoadViewer()); + } + + $this->eventDispatcher->dispatchTyped(new LoadAdditionalScriptsEvent()); + $this->eventDispatcher->dispatchTyped(new RenderReferenceEvent()); + + $response = new TemplateResponse($this->appName, 'index', [ + 'app' => Application::APP_ID, + 'id-app-content' => '#content-vue', + 'id-app-navigation' => '#app-navigation-vue', + ]); + + $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedWorkerSrcDomain('blob:'); + $csp->addAllowedWorkerSrcDomain("'self'"); + $csp->addAllowedChildSrcDomain('blob:'); + $csp->addAllowedChildSrcDomain("'self'"); + $csp->addAllowedScriptDomain('blob:'); + $csp->addAllowedScriptDomain("'self'"); + $csp->addAllowedScriptDomain("'wasm-unsafe-eval'"); + $csp->addAllowedConnectDomain('blob:'); + $csp->addAllowedConnectDomain("'self'"); + foreach ($this->talkConfig->getAllServerUrlsForCSP() as $server) { + $csp->addAllowedConnectDomain($server); + } + + $response->setContentSecurityPolicy($csp); + if ($throttle) { + // Logged-in user tried to access a chat they can not access + $this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $bruteForceToken . '"', ['app' => 'spreed-bfp']); + $response->throttle(['token' => $bruteForceToken, 'action' => 'talkRoomToken']); + } + return $response; + } + + /** + * @param string $token + * @return TemplateResponse|NotFoundResponse + */ + #[NoCSRFRequired] + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomToken')] + #[BruteForceProtection(action: 'talkRecordingStatus')] + public function recording(string $token): Response { + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $response = new NotFoundResponse(); + $this->logger->debug('Recording "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + + return $response; + } + + if ($room->getCallRecording() !== Room::RECORDING_VIDEO_STARTING && $room->getCallRecording() !== Room::RECORDING_AUDIO_STARTING) { + $response = new NotFoundResponse(); + $this->logger->debug('Recording "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . $token . '"', ['app' => 'spreed-bfp']); + $response->throttle(['token' => $token, 'action' => 'talkRecordingStatus']); + return $response; + } + + if (class_exists(LoadViewer::class)) { + $this->eventDispatcher->dispatchTyped(new LoadViewer()); + } + + $this->publishInitialStateForGuest(); + + $this->eventDispatcher->dispatchTyped(new LoadAdditionalScriptsEvent()); + $this->eventDispatcher->dispatchTyped(new RenderReferenceEvent()); + + $response = new PublicTemplateResponse($this->appName, 'recording', [ + 'id-app-content' => '#content-vue', + 'id-app-navigation' => null, + ]); + + $response->setFooterVisible(false); + $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedWorkerSrcDomain('blob:'); + $csp->addAllowedWorkerSrcDomain("'self'"); + $csp->addAllowedChildSrcDomain('blob:'); + $csp->addAllowedChildSrcDomain("'self'"); + $csp->addAllowedScriptDomain('blob:'); + $csp->addAllowedScriptDomain("'self'"); + $csp->addAllowedScriptDomain("'wasm-unsafe-eval'"); + $csp->addAllowedConnectDomain('blob:'); + $csp->addAllowedConnectDomain("'self'"); + foreach ($this->talkConfig->getAllServerUrlsForCSP() as $server) { + $csp->addAllowedConnectDomain($server); + } + $response->setContentSecurityPolicy($csp); + + return $response; + } + + /** + * @return TemplateResponse|RedirectResponse + * @throws HintException + */ + protected function guestEnterRoom( + string $token, + string $password, + string $email, + #[SensitiveParameter] + string $accessToken, + ): Response { + if ($email && $accessToken) { + return $this->invitedEmail( + $token, + $email, + $accessToken, + ); + } + try { + $room = $this->manager->getRoomByToken($token); + if ($room->getType() !== Room::TYPE_PUBLIC) { + throw new RoomNotFoundException(); + } + } catch (RoomNotFoundException $e) { + $redirectUrl = $this->url->linkToRoute('spreed.Page.index'); + if ($token) { + $redirectUrl = $this->url->linkToRoute('spreed.Page.showCall', ['token' => $token]); + } + $response = new RedirectResponse($this->url->linkToRoute('core.login.showLoginForm', [ + 'redirect_url' => $redirectUrl, + ])); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + if ($room->hasPassword()) { + $password = $password !== '' ? $password : (string)$this->talkSession->getPasswordForRoom($token); + + $passwordVerification = $this->roomService->verifyPassword($room, $password); + if ($passwordVerification['result']) { + $this->talkSession->renewSessionId(); + $this->talkSession->setPasswordForRoom($token, $password); + $this->throttler->resetDelay($this->request->getRemoteAddress(), 'talkRoomPassword', ['token' => $token, 'action' => 'talkRoomPassword']); + } else { + $this->talkSession->removePasswordForRoom($token); + $showBruteForceWarning = $this->throttler->getDelay($this->request->getRemoteAddress(), 'talkRoomPassword') > 5000; + + if ($passwordVerification['url'] === '') { + $response = new TemplateResponse($this->appName, 'authenticate', [ + 'wrongpw' => $password !== '', + 'showBruteForceWarning' => $showBruteForceWarning, + ], 'guest'); + } else { + $response = new RedirectResponse($passwordVerification['url']); + } + $response->throttle(['token' => $token, 'action' => 'talkRoomPassword']); + return $response; + } + } + + $this->publishInitialStateForGuest(); + $this->eventDispatcher->dispatchTyped(new RenderReferenceEvent()); + + $response = new PublicTemplateResponse($this->appName, 'index', [ + 'id-app-content' => '#content-vue', + 'id-app-navigation' => null, + ]); + + $response->setFooterVisible(false); + $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedWorkerSrcDomain('blob:'); + $csp->addAllowedWorkerSrcDomain("'self'"); + $csp->addAllowedChildSrcDomain('blob:'); + $csp->addAllowedChildSrcDomain("'self'"); + $csp->addAllowedScriptDomain('blob:'); + $csp->addAllowedScriptDomain("'self'"); + $csp->addAllowedScriptDomain("'wasm-unsafe-eval'"); + $csp->addAllowedConnectDomain('blob:'); + $csp->addAllowedConnectDomain("'self'"); + foreach ($this->talkConfig->getAllServerUrlsForCSP() as $server) { + $csp->addAllowedConnectDomain($server); + } + $response->setContentSecurityPolicy($csp); + return $response; + } + + /** + * @return TemplateResponse|RedirectResponse + * @throws HintException + */ + protected function invitedEmail( + string $token, + string $email, + #[SensitiveParameter] + string $accessToken, + ): Response { + try { + $actorId = hash('sha256', $email); + $this->manager->getRoomByAccessToken( + $token, + Attendee::ACTOR_EMAILS, + $actorId, + $accessToken, + ); + $this->talkSession->renewSessionId(); + $this->talkSession->setAuthedEmailActorIdForRoom($token, $actorId); + } catch (RoomNotFoundException) { + $redirectUrl = $this->url->linkToRoute('spreed.Page.index'); + if ($token) { + $redirectUrl = $this->url->linkToRoute('spreed.Page.showCall', ['token' => $token]); + } + $response = new RedirectResponse($this->url->linkToRoute('core.login.showLoginForm', [ + 'redirect_url' => $redirectUrl, + ])); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + $this->publishInitialStateForGuest(); + $this->eventDispatcher->dispatchTyped(new RenderReferenceEvent()); + + $response = new PublicTemplateResponse($this->appName, 'index', [ + 'id-app-content' => '#content-vue', + 'id-app-navigation' => null, + ]); + + $response->setFooterVisible(false); + $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedWorkerSrcDomain('blob:'); + $csp->addAllowedWorkerSrcDomain("'self'"); + $csp->addAllowedChildSrcDomain('blob:'); + $csp->addAllowedChildSrcDomain("'self'"); + $csp->addAllowedScriptDomain('blob:'); + $csp->addAllowedScriptDomain("'self'"); + $csp->addAllowedScriptDomain("'wasm-unsafe-eval'"); + $csp->addAllowedConnectDomain('blob:'); + $csp->addAllowedConnectDomain("'self'"); + foreach ($this->talkConfig->getAllServerUrlsForCSP() as $server) { + $csp->addAllowedConnectDomain($server); + } + $response->setContentSecurityPolicy($csp); + return $response; + } + + /** + * @param string $token + * @return RedirectResponse + */ + #[NoCSRFRequired] + #[PublicPage] + protected function redirectToConversation(string $token): RedirectResponse { + // These redirects are already done outside of this method + if ($this->userId === null) { + try { + $room = $this->manager->getRoomByToken($token); + if ($room->getType() !== Room::TYPE_PUBLIC) { + throw new RoomNotFoundException(); + } + return new RedirectResponse($this->url->linkToRoute('spreed.Page.showCall', ['token' => $token])); + } catch (RoomNotFoundException $e) { + return new RedirectResponse($this->url->linkToRoute('core.login.showLoginForm', [ + 'redirect_url' => $this->url->linkToRoute('spreed.Page.showCall', ['token' => $token]), + ])); + } + } + return new RedirectResponse($this->url->linkToRoute('spreed.Page.showCall', ['token' => $token])); + } +} diff --git a/lib/Controller/PollController.php b/lib/Controller/PollController.php new file mode 100644 index 0000000..078e6b4 --- /dev/null +++ b/lib/Controller/PollController.php @@ -0,0 +1,467 @@ + $options + * @param 0|1 $resultMode Mode how the results will be shown + * @psalm-param Poll::MODE_* $resultMode Mode how the results will be shown + * @param int $maxVotes Number of maximum votes per voter + * @param bool $draft Whether the poll should be saved as a draft (only allowed for moderators and with `talk-polls-drafts` capability) + * @param int $threadId Thread id which this poll should be posted into (also requires `threads` capability) + * @return DataResponse|DataResponse|DataResponse + * + * 200: Draft created successfully + * 201: Poll created successfully + * 400: Creating poll is not possible + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function createPoll(string $question, array $options, int $resultMode, int $maxVotes, bool $draft = false, int $threadId = 0): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->createPoll($this->room, $this->participant, $question, $options, $resultMode, $maxVotes, $draft); + } + + if ($this->room->getType() !== Room::TYPE_GROUP + && $this->room->getType() !== Room::TYPE_PUBLIC) { + return new DataResponse(['error' => PollPropertyException::REASON_ROOM], Http::STATUS_BAD_REQUEST); + } + + if ($draft === true && !$this->participant->hasModeratorPermissions()) { + return new DataResponse(['error' => PollPropertyException::REASON_DRAFT], Http::STATUS_BAD_REQUEST); + } + + $attendee = $this->participant->getAttendee(); + try { + $poll = $this->pollService->createPoll( + $this->room->getId(), + $attendee->getActorType(), + $attendee->getActorId(), + $attendee->getDisplayName(), + $question, + $options, + $resultMode, + $maxVotes, + $draft, + ); + } catch (PollPropertyException $e) { + $this->logger->error('Error creating poll', ['exception' => $e]); + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + if ($draft) { + return new DataResponse($poll->renderAsDraft()); + } + + if ($threadId !== 0) { + try { + $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + // Someone tried to cheat, ignore + $threadId = 0; + } + } + + $message = json_encode([ + 'message' => 'object_shared', + 'parameters' => [ + 'objectType' => 'talk-poll', + 'objectId' => $poll->getId(), + 'metaData' => [ + 'type' => 'talk-poll', + 'id' => $poll->getId(), + 'name' => $question, + ] + ], + ], JSON_THROW_ON_ERROR); + + try { + $this->chatManager->addSystemMessage($this->room, $this->participant, $attendee->getActorType(), $attendee->getActorId(), $message, $this->timeFactory->getDateTime(), true, threadId: $threadId); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + + return new DataResponse($this->renderPoll($poll), Http::STATUS_CREATED); + } + + /** + * Modify a draft poll + * + * Required capability: `edit-draft-poll` + * + * @param int $pollId The poll id + * @param string $question Question of the poll + * @param string[] $options Options of the poll + * @psalm-param list $options + * @param 0|1 $resultMode Mode how the results will be shown + * @psalm-param Poll::MODE_* $resultMode Mode how the results will be shown + * @param int $maxVotes Number of maximum votes per voter + * @return DataResponse|DataResponse + * + * 200: Draft modified successfully + * 400: Modifying poll is not possible + * 403: No permission to modify this poll + * 404: No draft poll exists + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function updateDraftPoll(int $pollId, string $question, array $options, int $resultMode, int $maxVotes): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->updateDraftPoll($pollId, $this->room, $this->participant, $question, $options, $resultMode, $maxVotes); + } + + if ($this->room->getType() !== Room::TYPE_GROUP + && $this->room->getType() !== Room::TYPE_PUBLIC) { + return new DataResponse(['error' => PollPropertyException::REASON_ROOM], Http::STATUS_BAD_REQUEST); + } + + try { + $poll = $this->pollService->getPoll($this->room->getId(), $pollId); + } catch (DoesNotExistException $e) { + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_NOT_FOUND); + } + + if (!$poll->isDraft()) { + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_BAD_REQUEST); + } + + if (!$this->participant->hasModeratorPermissions() + && ($poll->getActorType() !== $this->participant->getAttendee()->getActorType() + || $poll->getActorId() !== $this->participant->getAttendee()->getActorId())) { + return new DataResponse(['error' => PollPropertyException::REASON_DRAFT], Http::STATUS_BAD_REQUEST); + } + + try { + $poll->setQuestion($question); + $poll->setOptions($options); + $poll->setResultMode($resultMode); + $poll->setMaxVotes($maxVotes); + } catch (PollPropertyException $e) { + $this->logger->error('Error modifying poll', ['exception' => $e]); + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + try { + $this->pollService->updatePoll($this->participant, $poll); + } catch (WrongPermissionsException $e) { + $this->logger->error('Error modifying poll', ['exception' => $e]); + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_FORBIDDEN); + } + + return new DataResponse($poll->renderAsDraft()); + } + + /** + * Get all drafted polls + * + * Required capability: `talk-polls-drafts` + * + * @return DataResponse, array{}>|DataResponse, array{}> + * + * 200: Poll returned + * 403: User is not a moderator + * 404: Poll not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getAllDraftPolls(): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->getDraftsForRoom($this->room, $this->participant); + } + + $polls = $this->pollService->getDraftsForRoom($this->room->getId()); + $data = []; + foreach ($polls as $poll) { + $data[] = $poll->renderAsDraft(); + } + + return new DataResponse($data); + } + + /** + * Get a poll + * + * @param int $pollId ID of the poll + * @psalm-param non-negative-int $pollId + * @return DataResponse|DataResponse + * + * 200: Poll returned + * 404: Poll not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function showPoll(int $pollId): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->showPoll($this->room, $this->participant, $pollId); + } + + try { + $poll = $this->pollService->getPoll($this->room->getId(), $pollId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'poll'], Http::STATUS_NOT_FOUND); + } + + if ($poll->getStatus() === Poll::STATUS_DRAFT && !$this->participant->hasModeratorPermissions()) { + return new DataResponse(['error' => 'poll'], Http::STATUS_NOT_FOUND); + } + + $votedSelf = $this->pollService->getVotesForActor($this->participant, $poll); + $detailedVotes = []; + if ($poll->getResultMode() === Poll::MODE_PUBLIC && $poll->getStatus() === Poll::STATUS_CLOSED) { + $detailedVotes = $this->pollService->getVotes($poll); + } + + return new DataResponse($this->renderPoll($poll, $votedSelf, $detailedVotes)); + } + + /** + * Vote on a poll + * + * @param int $pollId ID of the poll + * @psalm-param non-negative-int $pollId + * @param list $optionIds IDs of the selected options + * @return DataResponse|DataResponse + * + * 200: Voted successfully + * 400: Voting is not possible + * 404: Poll not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function votePoll(int $pollId, array $optionIds = []): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->votePoll($this->room, $this->participant, $pollId, $optionIds); + } + + try { + $poll = $this->pollService->getPoll($this->room->getId(), $pollId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'poll'], Http::STATUS_NOT_FOUND); + } + + if ($poll->getStatus() === Poll::STATUS_DRAFT) { + return new DataResponse(['error' => 'poll'], Http::STATUS_NOT_FOUND); + } + + if ($poll->getStatus() === Poll::STATUS_CLOSED) { + return new DataResponse(['error' => 'poll'], Http::STATUS_BAD_REQUEST); + } + + try { + $votedSelf = $this->pollService->votePoll($this->participant, $poll, $optionIds); + } catch (\RuntimeException $e) { + return new DataResponse(['error' => 'options'], Http::STATUS_BAD_REQUEST); + } + + if ($poll->getResultMode() === Poll::MODE_PUBLIC) { + $attendee = $this->participant->getAttendee(); + try { + $message = json_encode([ + 'message' => 'poll_voted', + 'parameters' => [ + 'poll' => [ + 'type' => 'talk-poll', + 'id' => $poll->getId(), + 'name' => $poll->getQuestion(), + ], + ], + ], JSON_THROW_ON_ERROR); + $this->chatManager->addSystemMessage($this->room, $this->participant, $attendee->getActorType(), $attendee->getActorId(), $message, $this->timeFactory->getDateTime(), false); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } + + return new DataResponse($this->renderPoll($poll, $votedSelf)); + } + + /** + * Close a poll + * + * @param int $pollId ID of the poll + * @psalm-param non-negative-int $pollId + * @return DataResponse|DataResponse|DataResponse + * + * 200: Poll closed successfully + * 202: Poll draft was deleted successfully + * 400: Poll already closed + * 403: Missing permissions to close poll + * 404: Poll not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function closePoll(int $pollId): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\PollController::class); + return $proxy->closePoll($this->room, $this->participant, $pollId); + } + + try { + $poll = $this->pollService->getPoll($this->room->getId(), $pollId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_NOT_FOUND); + } + + if ($poll->getStatus() === Poll::STATUS_DRAFT) { + if (!$this->participant->hasModeratorPermissions(false)) { + // Only moderators can manage drafts + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_NOT_FOUND); + } + + $this->pollService->deleteByPollId($poll->getId()); + return new DataResponse(null, Http::STATUS_ACCEPTED); + } + + if ($poll->getStatus() === Poll::STATUS_CLOSED) { + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_BAD_REQUEST); + } + + try { + $this->pollService->closePoll($this->participant, $poll); + } catch (WrongPermissionsException $e) { + return new DataResponse(['error' => PollPropertyException::REASON_POLL], Http::STATUS_FORBIDDEN); + } + + $attendee = $this->participant->getAttendee(); + try { + $message = json_encode([ + 'message' => 'poll_closed', + 'parameters' => [ + 'poll' => [ + 'type' => 'talk-poll', + 'id' => $poll->getId(), + 'name' => $poll->getQuestion(), + ], + ], + ], JSON_THROW_ON_ERROR); + $this->chatManager->addSystemMessage($this->room, $this->participant, $attendee->getActorType(), $attendee->getActorId(), $message, $this->timeFactory->getDateTime(), true); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + + $detailedVotes = []; + if ($poll->getResultMode() === Poll::MODE_PUBLIC) { + $detailedVotes = $this->pollService->getVotes($poll); + } + + $votedSelf = $this->pollService->getVotesForActor($this->participant, $poll); + + return new DataResponse($this->renderPoll($poll, $votedSelf, $detailedVotes)); + } + + /** + * @return TalkPoll + * @throws JsonException + */ + protected function renderPoll(Poll $poll, array $votedSelf = [], array $detailedVotes = []): array { + $data = $poll->renderAsPoll(); + + $canSeeSummary = !empty($votedSelf) && $poll->getResultMode() === Poll::MODE_PUBLIC; + + if (!$canSeeSummary && $poll->getStatus() === Poll::STATUS_OPEN) { + $data['votes'] = []; + if ($this->participant->hasModeratorPermissions() + || ($poll->getActorType() === $this->participant->getAttendee()->getActorType() + && $poll->getActorId() === $this->participant->getAttendee()->getActorId())) { + // Allow moderators and the author to see the number of voters, + // So they know when to close the poll. + } else { + $data['numVoters'] = 0; + } + } elseif ($poll->getResultMode() === Poll::MODE_PUBLIC && $poll->getStatus() === Poll::STATUS_CLOSED) { + $data['details'] = array_values(array_map(static fn (Vote $vote) => $vote->asArray(), $detailedVotes)); + } + + $data['votedSelf'] = array_values(array_map(static fn (Vote $vote) => $vote->getOptionId(), $votedSelf)); + + return $data; + } +} diff --git a/lib/Controller/PublicShareAuthController.php b/lib/Controller/PublicShareAuthController.php new file mode 100644 index 0000000..8037910 --- /dev/null +++ b/lib/Controller/PublicShareAuthController.php @@ -0,0 +1,101 @@ +|DataResponse + * + * 201: Room created successfully + * 404: Share not found + */ + #[PublicPage] + #[OpenAPI(tags: ['files_integration'])] + public function createRoom(string $shareToken): DataResponse { + try { + $share = $this->shareManager->getShareByToken($shareToken); + } catch (ShareNotFound) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if (!$share->getSendPasswordByTalk()) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $sharerUser = $this->userManager->get($share->getSharedBy()); + + if (!$sharerUser instanceof IUser) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if ($share->getShareType() === IShare::TYPE_EMAIL) { + $roomName = $share->getSharedWith(); + } else { + $roomName = trim($share->getTarget(), '/'); + } + $roomName = $this->roomService->prepareConversationName($roomName); + + // Create the room + $room = $this->roomService->createConversation( + Room::TYPE_PUBLIC, + $roomName, + $sharerUser, + Room::OBJECT_TYPE_VIDEO_VERIFICATION, + $shareToken, + ); + + $user = $this->userSession->getUser(); + $userId = $user instanceof IUser ? $user->getUID() : ''; + + return new DataResponse([ + 'token' => $room->getToken(), + 'name' => $room->getName(), + 'displayName' => $room->getDisplayName($userId), + ], Http::STATUS_CREATED); + } +} diff --git a/lib/Controller/ReactionController.php b/lib/Controller/ReactionController.php new file mode 100644 index 0000000..8fa1e21 --- /dev/null +++ b/lib/Controller/ReactionController.php @@ -0,0 +1,182 @@ +>|\stdClass, array{}>|DataResponse + * + * 200: Reaction already existed + * 201: Reaction added successfully + * 400: Adding reaction is not possible + * 404: Message not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function react(int $messageId, string $reaction): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController::class); + return $proxy->react($this->room, $this->participant, $messageId, $reaction, $this->getResponseFormat()); + } + + try { + $this->reactionManager->addReactionMessage( + $this->getRoom(), + $this->getParticipant()->getAttendee()->getActorType(), + $this->getParticipant()->getAttendee()->getActorId(), + $this->getParticipant()->getAttendee()->getDisplayName(), + $messageId, + $reaction + ); + $status = Http::STATUS_CREATED; + } catch (NotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (ReactionAlreadyExistsException $e) { + $status = Http::STATUS_OK; + } catch (ReactionNotSupportedException|ReactionOutOfContextException|\Exception $e) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + $reactions = $this->reactionManager->retrieveReactionMessages($this->getRoom(), $this->getParticipant(), $messageId); + return new DataResponse($this->formatReactions($reactions), $status); + } + + /** + * Delete a reaction from a message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @param string $reaction Emoji to remove + * @return DataResponse>|\stdClass, array{}>|DataResponse + * + * 200: Reaction deleted successfully + * 400: Deleting reaction is not possible + * 404: Message not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function delete(int $messageId, string $reaction): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController::class); + return $proxy->delete($this->room, $this->participant, $messageId, $reaction, $this->getResponseFormat()); + } + + try { + $this->reactionManager->deleteReactionMessage( + $this->getRoom(), + $this->getParticipant()->getAttendee()->getActorType(), + $this->getParticipant()->getAttendee()->getActorId(), + $this->getParticipant()->getAttendee()->getDisplayName(), + $messageId, + $reaction + ); + $reactions = $this->reactionManager->retrieveReactionMessages($this->getRoom(), $this->getParticipant(), $messageId); + } catch (ReactionNotSupportedException|ReactionOutOfContextException|NotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (\Exception $e) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatReactions($reactions), Http::STATUS_OK); + } + + /** + * Get a list of reactions for a message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @param string|null $reaction Emoji to filter + * @return DataResponse>|\stdClass, array{}>|DataResponse + * + * 200: Reactions returned + * 404: Message or reaction not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getReactions(int $messageId, ?string $reaction): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ReactionController::class); + return $proxy->getReactions($this->room, $this->participant, $messageId, $reaction, $this->getResponseFormat()); + } + + try { + // Verify that messageId is part of the room + $this->reactionManager->getCommentToReact($this->getRoom(), (string)$messageId); + } catch (ReactionNotSupportedException|ReactionOutOfContextException|NotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $reactions = $this->reactionManager->retrieveReactionMessages($this->getRoom(), $this->getParticipant(), $messageId, $reaction); + + return new DataResponse($this->formatReactions($reactions), Http::STATUS_OK); + } + + /** + * @param array> $reactions + * @return array>|\stdClass + */ + protected function formatReactions(array $reactions): array|\stdClass { + if ($this->getResponseFormat() === 'json' && empty($reactions)) { + // Cheating here to make sure the reactions array is always a + // JSON object on the API, even when there is no reaction at all. + return new \stdClass(); + } + + return $reactions; + } +} diff --git a/lib/Controller/RecordingController.php b/lib/Controller/RecordingController.php new file mode 100644 index 0000000..b1aa9ed --- /dev/null +++ b/lib/Controller/RecordingController.php @@ -0,0 +1,473 @@ +|DataResponse|DataResponse + * + * 200: Welcome message returned + * 404: Recording server not found or not configured + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['settings'])] + public function getWelcomeMessage(int $serverId): DataResponse { + $recordingServers = $this->talkConfig->getRecordingServers(); + if (empty($recordingServers) || !isset($recordingServers[$serverId])) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $url = rtrim($recordingServers[$serverId]['server'], '/'); + $url = strtolower($url); + + $verifyServer = (bool)$recordingServers[$serverId]['verify']; + + if ($verifyServer && str_contains($url, 'https://')) { + $expiration = $this->certificateService->getCertificateExpirationInDays($url); + + if ($expiration < 0) { + return new DataResponse(['error' => 'CERTIFICATE_EXPIRED'], Http::STATUS_INTERNAL_SERVER_ERROR); + } + } + + $client = $this->clientService->newClient(); + try { + $timeBefore = $this->timeFactory->getTime(); + $response = $client->get($url . '/api/v1/welcome', [ + 'verify' => $verifyServer, + 'nextcloud' => [ + 'allow_local_address' => true, + ], + ]); + $timeAfter = $this->timeFactory->getTime(); + + if ($response->getHeader(\OCA\Talk\Signaling\Manager::FEATURE_HEADER)) { + return new DataResponse([ + 'error' => 'IS_SIGNALING_SERVER', + ], Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $responseTime = $this->timeFactory->getDateTime($response->getHeader('date'))->getTimestamp(); + if (($timeBefore - Config::ALLOWED_BACKEND_TIMEOFFSET) > $responseTime + || ($timeAfter + Config::ALLOWED_BACKEND_TIMEOFFSET) < $responseTime) { + return new DataResponse([ + 'error' => 'TIME_OUT_OF_SYNC', + ], Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $body = $response->getBody(); + $data = json_decode($body, true); + + if (!is_array($data)) { + return new DataResponse([ + 'error' => 'JSON_INVALID', + ], Http::STATUS_INTERNAL_SERVER_ERROR); + } + + return new DataResponse($data); + } catch (ConnectException $e) { + return new DataResponse(['error' => 'CAN_NOT_CONNECT'], Http::STATUS_INTERNAL_SERVER_ERROR); + } catch (\Exception $e) { + return new DataResponse(['error' => (string)$e->getCode()], Http::STATUS_INTERNAL_SERVER_ERROR); + } + } + + /** + * Check if the current request is coming from an allowed backend. + * + * The backends are sending the custom header "Talk-Recording-Random" + * containing at least 32 bytes random data, and the header + * "Talk-Recording-Checksum", which is the SHA256-HMAC of the random data + * and the body of the request, calculated with the shared secret from the + * configuration. + * + * @param string $data + * @return bool + */ + private function validateBackendRequest(string $data): bool { + $random = $this->request->getHeader('talk-recording-random'); + $checksum = $this->request->getHeader('talk-recording-checksum'); + $secret = $this->talkConfig->getRecordingSecret(); + try { + return $this->checksumVerificationService->validateRequest($random, $checksum, $secret, $data); + } catch (UnauthorizedException) { + return false; + } + } + + /** + * Return the body of the backend request. This can be overridden in + * tests. + * + * @return string + */ + protected function getInputStream(): string { + return (string)file_get_contents('php://input'); + } + + /** + * Update the recording status as a backend + * + * @return DataResponse|DataResponse + * + * 200: Recording status updated successfully + * 400: Updating recording status is not possible + * 403: Missing permissions to update recording status + * 404: Room not found + */ + #[OpenAPI(scope: 'backend-recording')] + #[PublicPage] + #[BruteForceProtection(action: 'talkRecordingSecret')] + #[BruteForceProtection(action: 'talkRecordingStatus')] + #[RequestHeader(name: 'talk-recording-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-recording-checksum', description: 'Checksum over the request body to verify authenticity from the recording backend', indirect: true)] + public function backend(): DataResponse { + $json = $this->getInputStream(); + if (!$this->validateBackendRequest($json)) { + $response = new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'invalid_request', + 'message' => 'The request could not be authenticated.', + ], + ], Http::STATUS_FORBIDDEN); + $response->throttle(['action' => 'talkRecordingSecret']); + return $response; + } + + $message = json_decode($json, true); + switch ($message['type'] ?? '') { + case 'started': + return $this->backendStarted($message['started']); + case 'stopped': + return $this->backendStopped($message['stopped']); + case 'failed': + return $this->backendFailed($message['failed']); + default: + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'unknown_type', + 'message' => 'The given type ' . json_encode($message) . ' is not supported.', + ], + ], Http::STATUS_BAD_REQUEST); + } + } + + /** + * @return DataResponse|DataResponse + */ + private function backendStarted(array $started): DataResponse { + $token = $started['token']; + $status = $started['status']; + $actor = $started['actor']; + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $this->logger->debug('Failed to get room {token}', [ + 'token' => $token, + 'app' => 'spreed-recording', + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'Room not found.', + ], + ], Http::STATUS_NOT_FOUND); + } + + if ($room->getCallRecording() !== Room::RECORDING_VIDEO_STARTING && $room->getCallRecording() !== Room::RECORDING_AUDIO_STARTING) { + $this->logger->error('Recording backend tried to start recording in room {token}, but it was not requested by a moderator.', [ + 'token' => $token, + 'app' => 'spreed-recording', + ]); + $response = new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'Room not found.', + ], + ], Http::STATUS_NOT_FOUND); + $response->throttle(['action' => 'talkRecordingStatus']); + return $response; + } + + try { + $participant = $this->participantService->getParticipantByActor($room, $actor['type'], $actor['id']); + } catch (ParticipantNotFoundException $e) { + $participant = null; + } + + $this->roomService->setCallRecording($room, $status, $participant); + + return new DataResponse(null); + } + + /** + * @return DataResponse|DataResponse + */ + private function backendStopped(array $stopped): DataResponse { + $token = $stopped['token']; + $actor = null; + if (array_key_exists('actor', $stopped)) { + $actor = $stopped['actor']; + } + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $this->logger->debug('Failed to get room {token}', [ + 'token' => $token, + 'app' => 'spreed-recording', + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'Room not found.', + ], + ], Http::STATUS_NOT_FOUND); + } + + try { + if ($actor === null) { + throw new ParticipantNotFoundException(); + } + + $participant = $this->participantService->getParticipantByActor($room, $actor['type'], $actor['id']); + } catch (ParticipantNotFoundException $e) { + $participant = null; + } + + $this->roomService->setCallRecording($room, Room::RECORDING_NONE, $participant); + + return new DataResponse(null); + } + + /** + * @return DataResponse|DataResponse + */ + private function backendFailed(array $failed): DataResponse { + $token = $failed['token']; + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $this->logger->debug('Failed to get room {token}', [ + 'token' => $token, + 'app' => 'spreed-recording', + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'Room not found.', + ], + ], Http::STATUS_NOT_FOUND); + } + + $this->roomService->setCallRecording($room, Room::RECORDING_FAILED); + + return new DataResponse(null); + } + + /** + * Start the recording + * + * @param int $status Type of the recording + * @psalm-param Room::RECORDING_* $status + * @return DataResponse|DataResponse + * + * 200: Recording started successfully + * 400: Starting recording is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function start(int $status): DataResponse { + try { + $this->recordingService->start($this->room, $status, $this->userId, $this->participant); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Stop the recording + * + * @return DataResponse|DataResponse + * + * 200: Recording stopped successfully + * 400: Stopping recording is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function stop(): DataResponse { + try { + $this->recordingService->stop($this->room, $this->participant); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Store the recording + * + * @param ?string $owner User that will own the recording file. `null` is actually not allowed and will always result in a "400 Bad Request". It's only allowed code-wise to handle requests where the post data exceeded the limits, so we can return a proper error instead of "500 Internal Server Error". + * @return DataResponse|DataResponse|DataResponse + * + * 200: Recording stored successfully + * 400: Storing recording is not possible + * 401: Missing permissions to store recording + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkRecordingSecret')] + #[OpenAPI(scope: 'backend-recording')] + #[RequireRoom] + #[RequestHeader(name: 'talk-recording-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-recording-checksum', description: 'Checksum over the request body to verify authenticity from the recording backend', indirect: true)] + public function store(?string $owner): DataResponse { + $data = $this->room->getToken(); + if (!$this->validateBackendRequest($data)) { + $response = new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'invalid_request', + 'message' => 'The request could not be authenticated.', + ], + ], Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkRecordingSecret']); + return $response; + } + + if ($owner === null) { + $this->logger->error('Recording backend failed to provide the owner when uploading a recording [ conversation: "' . $this->room->getToken() . '" ]. Most likely the post_max_size or upload_max_filesize were exceeded.'); + try { + $this->recordingService->notifyAboutFailedStore($this->room); + } catch (InvalidArgumentException) { + // Ignoring, we logged an error already + } + return new DataResponse(['error' => 'size'], Http::STATUS_BAD_REQUEST); + } + + try { + $file = $this->request->getUploadedFile('file'); + $this->recordingService->store($this->getRoom(), $owner, $file); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Dismiss the store call recording notification + * + * @param int $timestamp Timestamp of the notification to be dismissed + * @psalm-param non-negative-int $timestamp + * @return DataResponse|DataResponse + * + * 200: Notification dismissed successfully + * 400: Dismissing notification is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function notificationDismiss(int $timestamp): DataResponse { + try { + $this->recordingService->notificationDismiss( + $this->getRoom(), + $this->participant, + $timestamp, + null, // FIXME we would/should extend the URL, but the iOS app is crafting it manually atm due to OS limitations + ); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } + + /** + * Share the recorded file to the chat + * + * @param int $fileId ID of the file + * @psalm-param non-negative-int $fileId + * @param int $timestamp Timestamp of the notification to be dismissed + * @psalm-param non-negative-int $timestamp + * @return DataResponse|DataResponse + * + * 200: Recording shared to chat successfully + * 400: Sharing recording to chat is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function shareToChat(int $fileId, int $timestamp): DataResponse { + try { + $this->recordingService->shareToChat( + $this->getRoom(), + $this->participant, + $fileId, + $timestamp, + ); + } catch (InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse(null); + } +} diff --git a/lib/Controller/RoomController.php b/lib/Controller/RoomController.php new file mode 100644 index 0000000..9109cd0 --- /dev/null +++ b/lib/Controller/RoomController.php @@ -0,0 +1,2981 @@ +config->getSystemValueString('version'), + $this->config->getAppValue('spreed', 'installed_version'), + $this->config->getAppValue('spreed', 'stun_servers'), + $this->config->getAppValue('spreed', 'turn_servers'), + $this->config->getAppValue('spreed', 'signaling_servers'), + $this->config->getAppValue('spreed', 'signaling_mode'), + $this->config->getAppValue('spreed', 'signaling_ticket_secret'), + $this->config->getAppValue('spreed', 'signaling_token_alg', 'ES256'), + $this->config->getAppValue('spreed', 'signaling_token_privkey_' . $this->config->getAppValue('spreed', 'signaling_token_alg', 'ES256')), + $this->config->getAppValue('spreed', 'signaling_token_pubkey_' . $this->config->getAppValue('spreed', 'signaling_token_alg', 'ES256')), + $this->config->getAppValue('spreed', 'call_recording'), + $this->config->getAppValue('spreed', 'recording_servers'), + $this->config->getAppValue('spreed', 'allowed_groups'), + $this->config->getAppValue('spreed', 'start_calls'), + $this->config->getAppValue('spreed', 'start_conversations'), + $this->config->getAppValue('spreed', 'default_permissions'), + $this->config->getAppValue('spreed', 'breakout_rooms'), + $this->config->getAppValue('spreed', 'federation_enabled'), + $this->config->getAppValue('spreed', 'enable_matterbridge'), + $this->config->getAppValue('spreed', 'sip_bridge_groups', '[]'), + $this->config->getAppValue('spreed', 'sip_bridge_dialin_info'), + $this->config->getAppValue('spreed', 'sip_bridge_shared_secret'), + $this->config->getAppValue('spreed', 'recording_consent'), + $this->config->getAppValue('spreed', 'call_recording_transcription'), + $this->config->getAppValue('spreed', 'call_recording_summary'), + $this->config->getAppValue('theming', 'cachebuster', '1'), + $this->config->getUserValue($this->userId, 'theming', 'userCacheBuster', '0'), + $this->config->getAppValue('spreed', 'federation_incoming_enabled'), + $this->config->getAppValue('spreed', 'federation_outgoing_enabled'), + $this->config->getAppValue('spreed', 'federation_only_trusted_servers'), + $this->config->getAppValue('spreed', 'federation_allowed_groups', '[]'), + ]; + + if ($this->userId !== null) { + $values[] = $this->appConfig->getAppValueInt('experiments_users'); + $values[] = $this->config->getUserValue($this->userId, 'spreed', UserPreference::ATTACHMENT_FOLDER); + } else { + $values[] = $this->appConfig->getAppValueInt('experiments_guests'); + } + + return [ + 'X-Nextcloud-Talk-Hash' => sha1(implode('#', $values)), + ]; + } + + /** + * Get all currently existent rooms which the user has joined + * + * @param 0|1 $noStatusUpdate When the user status should not be automatically set to online set to 1 (default 0) + * @param bool $includeStatus Include the user status + * @param int $modifiedSince Filter rooms modified after a timestamp + * @param bool $includeLastMessage Include the last message, clients should opt-out when only rendering a compact list + * @psalm-param non-negative-int $modifiedSince + * @return DataResponse, array{X-Nextcloud-Talk-Hash: string, X-Nextcloud-Talk-Modified-Before: numeric-string, X-Nextcloud-Talk-Federation-Invites?: numeric-string}> + * + * 200: Return list of rooms + */ + #[NoAdminRequired] + public function getRooms(int $noStatusUpdate = 0, bool $includeStatus = false, int $modifiedSince = 0, bool $includeLastMessage = true): DataResponse { + $nextModifiedSince = $this->timeFactory->getTime(); + + $event = new BeforeRoomsFetchEvent($this->userId); + $this->dispatcher->dispatchTyped($event); + $user = $this->userManager->get($this->userId); + + if ($noStatusUpdate === 0) { + $isMobileApp = $this->request->isUserAgent([ + IRequest::USER_AGENT_TALK_ANDROID, + IRequest::USER_AGENT_TALK_IOS, + ]); + + if ($isMobileApp) { + // Bump the user status again + $event = new UserLiveStatusEvent( + $user, + IUserStatus::ONLINE, + $this->timeFactory->getTime() + ); + $this->dispatcher->dispatchTyped($event); + } + } + + $sessionIds = $this->session->getAllActiveSessions(); + $rooms = $this->manager->getRoomsForUser($this->userId, $sessionIds, $includeLastMessage); + + if ($modifiedSince !== 0) { + $rooms = array_filter($rooms, function (Room $room) use ($includeStatus, $modifiedSince): bool { + if ($includeStatus && $room->getType() === Room::TYPE_ONE_TO_ONE) { + // Always include 1-1s to update the user status + return true; + } + if ($room->getCallFlag() !== Participant::FLAG_DISCONNECTED) { + // Always include active calls + return true; + } + if ($room->getLastActivity() && $room->getLastActivity()->getTimestamp() >= $modifiedSince) { + // Include rooms which had activity + return true; + } + + // Include rooms where only attendee level things changed, + // e.g. favorite, read-marker update, notification setting + $attendee = $room->getParticipant($this->userId)->getAttendee(); + return $attendee->getLastAttendeeActivity() >= $modifiedSince; + }); + } + + $readPrivacy = $this->talkConfig->getUserReadPrivacy($this->userId); + if ($readPrivacy === Participant::PRIVACY_PUBLIC) { + $roomIds = array_map(static function (Room $room) { + return $room->getId(); + }, $rooms); + $this->commonReadMessages = $this->participantService->getLastCommonReadChatMessageForMultipleRooms($roomIds); + } + + $statuses = $threads = []; + if ($includeStatus + && $this->appManager->isEnabledForUser('user_status')) { + $userIds = array_filter(array_map(function (Room $room) { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + $participants = json_decode($room->getName(), true); + foreach ($participants as $participant) { + if ($participant !== $this->userId) { + return $participant; + } + } + } + return null; + }, $rooms)); + + $statuses = $this->statusManager->getUserStatuses($userIds); + } + + if ($includeLastMessage) { + $sharesInLastMessages = array_filter(array_map(static fn (Room $room): ?IComment => $room->getLastMessage()?->getVerb() === 'object_shared' ? $room->getLastMessage() : null, $rooms)); + $this->sharePreloader->preloadShares($sharesInLastMessages); + + $lastLocalMessages = array_filter(array_map(static fn (Room $room): ?IComment => !$room->isFederatedConversation() ? $room->getLastMessage() : null, $rooms)); + $potentialThreads = array_map(static fn (IComment $lastMessage): int => (int)$lastMessage->getTopmostParentId() ?: (int)$lastMessage->getId(), $lastLocalMessages); + + $threads = $this->threadService->preloadThreadsForConversationList($potentialThreads); + } + + $return = []; + foreach ($rooms as $room) { + try { + $return[] = $this->formatRoom( + $room, + $this->participantService->getParticipant($room, $this->userId), + $statuses, + skipLastMessage: !$includeLastMessage, + thread: $threads[$room->getId()] ?? null, + isThreadInfoComplete: true, + ); + } catch (ParticipantNotFoundException $e) { + // for example in case the room was deleted concurrently, + // the user is not a participant anymore + } + } + + /** @var array{X-Nextcloud-Talk-Modified-Before: numeric-string, X-Nextcloud-Talk-Federation-Invites?: numeric-string} $headers */ + $headers = ['X-Nextcloud-Talk-Modified-Before' => (string)$nextModifiedSince]; + if ($this->talkConfig->isFederationEnabledForUserId($user)) { + $numInvites = $this->federationManager->getNumberOfPendingInvitationsForUser($user); + if ($numInvites !== 0) { + $headers['X-Nextcloud-Talk-Federation-Invites'] = (string)$numInvites; + } + } + + /** @var array{X-Nextcloud-Talk-Hash: string, X-Nextcloud-Talk-Modified-Before: numeric-string, X-Nextcloud-Talk-Federation-Invites?: numeric-string} $headers */ + $headers = array_merge($this->getTalkHashHeader(), $headers); + + return new DataResponse($return, Http::STATUS_OK, $headers); + } + + /** + * Get listed rooms with optional search term + * + * @param string $searchTerm search term + * @return DataResponse, array{}> + * + * 200: Return list of matching rooms + */ + #[NoAdminRequired] + public function getListedRooms(string $searchTerm = ''): DataResponse { + $rooms = $this->manager->getListedRoomsForUser($this->userId, $searchTerm); + + $return = []; + foreach ($rooms as $room) { + $return[] = $this->formatRoom($room, null, skipLastMessage: true); + } + + return new DataResponse($return, Http::STATUS_OK); + } + + /** + * Get breakout rooms + * + * All for moderators and in case of "free selection", or the assigned breakout room for other participants + * + * @return DataResponse, array{}>|DataResponse + * + * 200: Breakout rooms returned + * 400: Getting breakout rooms is not possible + */ + #[NoAdminRequired] + #[BruteForceProtection(action: 'talkRoomToken')] + #[RequireLoggedInParticipant] + public function getBreakoutRooms(): DataResponse { + try { + $rooms = $this->breakoutRoomService->getBreakoutRooms($this->room, $this->participant); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $return = []; + foreach ($rooms as $room) { + try { + $participant = $this->participantService->getParticipant($room, $this->userId); + } catch (ParticipantNotFoundException $e) { + $participant = null; + } + + $return[] = $this->formatRoom($room, $participant, null, false, true, true); + } + + + return new DataResponse($return); + } + + /** + * Get a room + * + * @param string $token Token of the room + * @return DataResponse|DataResponse + * + * 200: Room returned + * 401: SIP request invalid + * 404: Room not found + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[BruteForceProtection(action: 'talkRoomToken')] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function getSingleRoom(string $token): DataResponse { + try { + $isSIPBridgeRequest = $this->validateSIPBridgeRequest($token); + } catch (UnauthorizedException $e) { + /** + * A hack to fix type collision + * @var DataResponse $response + */ + $response = new DataResponse([], Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + // The SIP bridge only needs room details (public, sip enabled, lobby state, etc) + $includeLastMessage = !$isSIPBridgeRequest; + + try { + $action = 'talkRoomToken'; + $participant = null; + + $isTalkFederation = $this->request->getHeader('x-nextcloud-federation'); + + if (!$isTalkFederation) { + $sessionId = $this->session->getSessionForRoom($token); + $room = $this->manager->getRoomForUserByToken($token, $this->userId, $sessionId, $includeLastMessage, $isSIPBridgeRequest); + + try { + $participant = $this->participantService->getParticipant($room, $this->userId, $sessionId); + } catch (ParticipantNotFoundException $e) { + try { + $participant = $this->participantService->getParticipantBySession($room, $sessionId); + } catch (ParticipantNotFoundException $e) { + } + } + } else { + $action = 'talkFederationAccess'; + try { + $room = $this->federationAuthenticator->getRoom(); + } catch (RoomNotFoundException) { + $room = $this->manager->getRoomByRemoteAccess( + $token, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId(), + $this->federationAuthenticator->getAccessToken(), + ); + } + try { + $participant = $this->federationAuthenticator->getParticipant(); + } catch (ParticipantNotFoundException) { + $participant = $this->participantService->getParticipantByActor( + $room, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId(), + ); + $this->federationAuthenticator->authenticated($room, $participant); + } + } + + $statuses = []; + if ($this->userId !== null + && $this->appManager->isEnabledForUser('user_status')) { + $userIds = array_filter(array_map(function (Room $room) { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + $participants = json_decode($room->getName(), true); + foreach ($participants as $participant) { + if ($participant !== $this->userId) { + return $participant; + } + } + } + return null; + }, [$room])); + + $statuses = $this->statusManager->getUserStatuses($userIds); + } + return new DataResponse($this->formatRoom($room, $participant, $statuses, $isSIPBridgeRequest), Http::STATUS_OK, $this->getTalkHashHeader()); + } catch (RoomNotFoundException $e) { + /** + * A hack to fix type collision + * @var DataResponse $response + */ + $response = new DataResponse([], Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => $action]); + return $response; + } + } + + /** + * Get the "Note to self" conversation for the user + * + * It will be automatically created when it is currently missing + * + * @return DataResponse + * + * 200: Room returned successfully + */ + #[NoAdminRequired] + public function getNoteToSelfConversation(): DataResponse { + $room = $this->noteToSelfService->ensureNoteToSelfExistsForUser($this->userId); + $participant = $this->participantService->getParticipant($room, $this->userId, false); + return new DataResponse($this->formatRoom($room, $participant), Http::STATUS_OK, $this->getTalkHashHeader()); + } + + /** + * Check if the current request is coming from an allowed backend. + * + * The SIP bridge is sending the custom header "Talk-SIPBridge-Random" + * containing at least 32 bytes random data, and the header + * "Talk-SIPBridge-Checksum", which is the SHA256-HMAC of the random data + * and the body of the request, calculated with the shared secret from the + * configuration. + * + * @param string $token + * @return bool True if the request is from the SIP bridge and valid, false if not from SIP bridge + * @throws UnauthorizedException when the request tried to sign as SIP bridge but is not valid + */ + private function validateSIPBridgeRequest(string $token): bool { + $random = $this->request->getHeader('talk-sipbridge-random'); + $checksum = $this->request->getHeader('talk-sipbridge-checksum'); + $secret = $this->talkConfig->getSIPSharedSecret(); + return $this->checksumVerificationService->validateRequest($random, $checksum, $secret, $token); + } + + /** + * @return TalkRoom + */ + protected function formatRoom( + Room $room, + ?Participant $currentParticipant, + ?array $statuses = null, + bool $isSIPBridgeRequest = false, + bool $isListingBreakoutRooms = false, + bool $skipLastMessage = false, + ?Thread $thread = null, + bool $isThreadInfoComplete = false, + ): array { + return $this->roomFormatter->formatRoom( + $this->getResponseFormat(), + $this->commonReadMessages, + $room, + $currentParticipant, + $statuses, + $isSIPBridgeRequest, + $isListingBreakoutRooms, + $skipLastMessage, + $thread, + $isThreadInfoComplete, + ); + } + + /** + * Create a room with a user, a group or a circle + * + * With the `conversation-creation-all` capability a lot of new options where + * introduced. + * Before that only `$roomType`, `$roomName`, `$objectType` and `$objectId` + * were supported all the time, and `$password` with the + * `conversation-creation-password` capability + * In case the `$roomType` is {@see Room::TYPE_ONE_TO_ONE} only the `$invite` + * or `$participants` parameter is supported. + * + * @param int $roomType Type of the room + * @psalm-param Room::TYPE_* $roomType + * @param string $invite User, group, … ID to invite @deprecated Use the `$participants` array instead + * @param string $roomName Name of the room, unless the legacy mode providing `$invite` and `$source` is used, the name must no longer be empty with the `conversation-creation-all` capability (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE}) + * @param 'groups'|'circles'|'' $source Source of the invite ID ('circles' to create a room with a circle, etc.) @deprecated Use the `$participants` array instead + * @param string $objectType Type of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE}) + * @param string $objectId ID of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE}) + * @param string $password The room password (only available with `conversation-creation-password` capability) (Ignored if `$roomType` is not {@see Room::TYPE_PUBLIC}) + * @param 0|1 $readOnly Read only state of the conversation (Default writable) (only available with `conversation-creation-all` capability) + * @psalm-param Room::READ_* $readOnly + * @param 0|1|2 $listable Scope where the conversation is listable (Default not listable for anyone) (only available with `conversation-creation-all` capability) + * @psalm-param Room::LISTABLE_* $listable + * @param int $messageExpiration Seconds after which messages will disappear, 0 disables expiration (Default 0) (only available with `conversation-creation-all` capability) + * @psalm-param non-negative-int $messageExpiration + * @param 0|1 $lobbyState Lobby state of the conversation (Default lobby is disabled) (only available with `conversation-creation-all` capability) + * @psalm-param Webinary::LOBBY_* $lobbyState + * @param int|null $lobbyTimer Timer when the lobby will be removed (Default null, will not be disabled automatically) (only available with `conversation-creation-all` capability) + * @psalm-param non-negative-int|null $lobbyTimer + * @param 0|1|2 $sipEnabled Whether SIP dial-in shall be enabled (only available with `conversation-creation-all` capability) + * @psalm-param Webinary::SIP_* $sipEnabled + * @param int<0, 255> $permissions Default permissions for participants (only available with `conversation-creation-all` capability) + * @psalm-param int-mask-of $permissions + * @param 0|1 $recordingConsent Whether participants need to agree to a recording before joining a call (only available with `conversation-creation-all` capability) + * @psalm-param RecordingService::CONSENT_REQUIRED_NO|RecordingService::CONSENT_REQUIRED_YES $recordingConsent + * @param 0|1 $mentionPermissions Who can mention at-all in the chat (only available with `conversation-creation-all` capability) + * @psalm-param Room::MENTION_PERMISSIONS_* $mentionPermissions + * @param string $description Description for the conversation (limited to 2.000 characters) (only available with `conversation-creation-all` capability) + * @param ?non-empty-string $emoji Emoji for the avatar of the conversation (only available with `conversation-creation-all` capability) + * @param ?non-empty-string $avatarColor Background color of the avatar (Only considered when an emoji was provided) (only available with `conversation-creation-all` capability) + * @param array> $participants List of participants to add grouped by type (only available with `conversation-creation-all` capability) + * @psalm-param TalkInvitationList $participants + * @return DataResponse|DataResponse|DataResponse + * + * 200: Room already existed + * 201: Room created successfully + * 202: Room created successfully but not all participants could be added + * 400: Room type invalid or missing or invalid password + * 403: Missing permissions to create room + * 404: User, group or other target to invite was not found + */ + #[NoAdminRequired] + public function createRoom( + int $roomType = Room::TYPE_GROUP, + string $invite = '', /* @deprecated */ + string $roomName = '', + string $source = '', /* @deprecated */ + string $objectType = '', + string $objectId = '', + string $password = '', + int $readOnly = Room::READ_WRITE, + int $listable = Room::LISTABLE_NONE, + int $messageExpiration = 0, + int $lobbyState = Webinary::LOBBY_NONE, + ?int $lobbyTimer = null, + int $sipEnabled = Webinary::SIP_DISABLED, + int $permissions = Attendee::PERMISSIONS_DEFAULT, + int $recordingConsent = RecordingService::CONSENT_REQUIRED_NO, + int $mentionPermissions = Room::MENTION_PERMISSIONS_EVERYONE, + string $description = '', + ?string $emoji = null, + ?string $avatarColor = null, + array $participants = [], + ): DataResponse { + if ($roomType === Room::TYPE_ONE_TO_ONE) { + if ($invite === '' + && isset($participants['users'][0]) + && is_string($participants['users'][0])) { + $invite = $participants['users'][0]; + } + + return $this->createOneToOneRoom($invite); + } + + /** @var IUser $user */ + $user = $this->userManager->get($this->userId); + + /** @var ?Room $oldRoom */ + $oldRoom = null; + if ($objectType === Room::OBJECT_TYPE_EXTENDED_CONVERSATION && $objectId !== '') { + try { + $oldRoom = $this->manager->getRoomForUserByToken($objectId, $this->userId); + // Don't allow to extend unjoined public conversations + $this->participantService->getParticipant($oldRoom, $this->userId, false); + } catch (RoomNotFoundException|ParticipantNotFoundException) { + return new DataResponse(['error' => CreationException::REASON_OBJECT], Http::STATUS_BAD_REQUEST); + } + + if ($oldRoom->getType() !== Room::TYPE_ONE_TO_ONE) { + // If we ever allow more types, only moderators should be able to perform the action + return new DataResponse(['error' => CreationException::REASON_OBJECT], Http::STATUS_BAD_REQUEST); + } + } + + if ($this->talkConfig->isNotAllowedToCreateConversations($user)) { + return new DataResponse(['error' => 'permissions'], Http::STATUS_FORBIDDEN); + } + + if ($invite !== '') { + // Legacy fallback for creating a conversation directly with a group or team + if ($source === 'circles') { + $sourceV2 = 'teams'; + } else { + $sourceV2 = 'groups'; + } + if (!isset($participants[$sourceV2])) { + $participants[$sourceV2] = []; + } + $participants[$sourceV2][] = $invite; + $participants[$sourceV2] = array_values(array_unique($participants[$sourceV2])); + } + + if ($roomName === '') { + // Legacy fallback for creating a conversation without a name + $roomName = $this->roomService->prepareConversationName($invite ?: '---'); + if ($source === 'circles') { + try { + $circle = $this->participantService->getCircle($invite, $this->userId); + $roomName = $this->roomService->prepareConversationName($circle->getName()); + } catch (\Exception) { + } + } else { + $targetGroup = $this->groupManager->get($invite); + if ($targetGroup instanceof IGroup) { + $roomName = $this->roomService->prepareConversationName($targetGroup->getDisplayName()); + } + } + } + + if ($roomType !== Room::TYPE_PUBLIC) { + // Force empty password for non-public conversations + $password = ''; + } + + $invitationList = $this->invitationService->validateInvitations($participants, $user); + if ($invitationList->hasInvalidInvitations() && !$invitationList->hasValidInvitations()) { + // FIXME add the list of failed invitations? + return new DataResponse(['error' => 'invite'], Http::STATUS_NOT_FOUND); + } + + if (!empty($invitationList->getEmails())) { + $roomType = Room::TYPE_PUBLIC; + } + + if (in_array($objectType, [ + Room::OBJECT_TYPE_PHONE_PERSIST, + Room::OBJECT_TYPE_PHONE_TEMPORARY, + Room::OBJECT_TYPE_PHONE_LEGACY, + ], true)) { + $objectId = Room::OBJECT_ID_PHONE_OUTGOING; + } + + try { + $room = $this->roomService->createConversation( + $roomType, + $roomName, + $user, + $objectType, + $objectId, + $password, + $readOnly, + $listable, + $messageExpiration, + $lobbyState, + $lobbyTimer, + $sipEnabled, + $permissions, + $recordingConsent, + $mentionPermissions, + $description, + $emoji, + $avatarColor, + allowInternalTypes: false, + ); + } catch (CreationException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } catch (PasswordException $e) { + return new DataResponse(['error' => 'password', 'message' => $e->getHint()], Http::STATUS_BAD_REQUEST); + } + + if ($invitationList->hasValidInvitations()) { + $this->participantService->addInvitationList($room, $invitationList, $user); + } + + if ($objectType === Room::OBJECT_TYPE_EXTENDED_CONVERSATION) { + $event = new RoomExtendedEvent($oldRoom, $room); + $this->dispatcher->dispatchTyped($event); + } + + if (!$invitationList->hasInvalidInvitations()) { + return new DataResponse($this->formatRoom($room, $this->participantService->getParticipant($room, $this->userId, false)), Http::STATUS_CREATED); + } + + $data = $this->formatRoom($room, $this->participantService->getParticipant($room, $this->userId, false)); + $data['invalidParticipants'] = $invitationList->getInvalidList(); + + return new DataResponse($data, Http::STATUS_ACCEPTED); + } + + /** + * Initiates a one-to-one video call from the current user to the recipient + * + * @param string $targetUserId ID of the user + * @return DataResponse|DataResponse + */ + #[NoAdminRequired] + protected function createOneToOneRoom(string $targetUserId): DataResponse { + $currentUser = $this->userManager->get($this->userId); + if (!$currentUser instanceof IUser) { + // Should never happen, basically an internal server error so we reuse another error + return new DataResponse(['error' => 'invite'], Http::STATUS_NOT_FOUND); + } + + if ($targetUserId === MatterbridgeManager::BRIDGE_BOT_USERID) { + return new DataResponse(['error' => 'invite'], Http::STATUS_NOT_FOUND); + } + + $targetUser = $this->userManager->get($targetUserId); + if (!$targetUser instanceof IUser) { + return new DataResponse(['error' => 'invite'], Http::STATUS_NOT_FOUND); + } + + try { + // We are only doing this manually here to be able to return different status codes + // Actually createOneToOneConversation also checks it. + $room = $this->manager->getOne2OneRoom($currentUser->getUID(), $targetUser->getUID()); + $this->participantService->ensureOneToOneRoomIsFilled($room, $currentUser->getUID()); + return new DataResponse( + $this->formatRoom($room, $this->participantService->getParticipant($room, $currentUser->getUID(), false)), + Http::STATUS_OK + ); + } catch (RoomNotFoundException $e) { + } + + try { + $room = $this->roomService->createOneToOneConversation($currentUser, $targetUser); + return new DataResponse( + $this->formatRoom($room, $this->participantService->getParticipant($room, $currentUser->getUID(), false)), + Http::STATUS_CREATED + ); + } catch (\InvalidArgumentException $e) { + // Same current and target user + return new DataResponse(['error' => 'invite'], Http::STATUS_FORBIDDEN); + } catch (RoomNotFoundException $e) { + return new DataResponse(['error' => 'invite'], Http::STATUS_FORBIDDEN); + } + } + + /** + * Add a room to the favorites + * + * @return DataResponse + * + * 200: Successfully added room to favorites + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function addToFavorites(): DataResponse { + $this->participantService->updateFavoriteStatus($this->participant, true); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Remove a room from the favorites + * + * @return DataResponse + * + * 200: Successfully removed room from favorites + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function removeFromFavorites(): DataResponse { + $this->participantService->updateFavoriteStatus($this->participant, false); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update the notification level for a room + * + * @param int $level New level + * @psalm-param Participant::NOTIFY_* $level + * @return DataResponse|DataResponse + * + * 200: Notification level updated successfully + * 400: Updating notification level is not possible + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function setNotificationLevel(int $level): DataResponse { + try { + $this->participantService->updateNotificationLevel($this->participant, $level); + } catch (\InvalidArgumentException) { + return new DataResponse(['error' => 'level'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update call notifications + * + * @param int $level New level + * @psalm-param Participant::NOTIFY_CALLS_* $level + * @return DataResponse|DataResponse + * + * 200: Call notification level updated successfully + * 400: Updating call notification level is not possible + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireLoggedInParticipant] + public function setNotificationCalls(int $level): DataResponse { + try { + $this->participantService->updateNotificationCalls($this->participant, $level); + } catch (\InvalidArgumentException) { + return new DataResponse(['error' => 'level'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Rename a room + * + * @param string $roomName New name + * @return DataResponse|DataResponse + * + * 200: Room renamed successfully + * 400: Renaming room is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function renameRoom(string $roomName): DataResponse { + if ($this->room->getObjectType() === Room::OBJECT_TYPE_EVENT) { + return new DataResponse(['error' => Room::OBJECT_TYPE_EVENT], Http::STATUS_BAD_REQUEST); + } + + try { + $this->roomService->setName($this->room, $roomName, validateType: true); + } catch (NameException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update the description of a room + * + * @param string $description New description for the conversation (limited to 2.000 characters, was 500 before Talk 21) + * @return DataResponse|DataResponse + * + * 200: Description updated successfully + * 400: Updating description is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setDescription(string $description): DataResponse { + if ($this->room->getObjectType() === Room::OBJECT_TYPE_EVENT) { + return new DataResponse(['error' => Room::OBJECT_TYPE_EVENT], Http::STATUS_BAD_REQUEST); + } + + try { + $this->roomService->setDescription($this->room, $description); + } catch (DescriptionException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Delete a room + * + * @return DataResponse + * + * 200: Room successfully deleted + * 400: Deleting room is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function deleteRoom(): DataResponse { + if (!$this->appConfig->getAppValueBool('delete_one_to_one_conversations') + && in_array($this->room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $this->roomService->deleteRoom($this->room); + + return new DataResponse(null); + } + + /** + * Unbind a room from its object to prevent automatic retention + * + * Required capability: `unbind-conversation` + * + * @return DataResponse|DataResponse + * + * 200: Room successfully unbound + * 400: Unbinding room is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function unbindRoomFromObject(): DataResponse { + if ($this->room->getObjectType() === Room::OBJECT_TYPE_EVENT || $this->room->getObjectType() === Room::OBJECT_TYPE_INSTANT_MEETING) { + $this->roomService->resetObject($this->room); + } elseif ($this->room->getObjectType() === Room::OBJECT_TYPE_PHONE_TEMPORARY) { + $this->roomService->setObject($this->room, Room::OBJECT_TYPE_PHONE_PERSIST, $this->room->getObjectId()); + } else { + return new DataResponse(['error' => 'object-type'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * + * Get a list of participants for a room + * + * @param bool $includeStatus Include the user statuses + * @return DataResponse, array{X-Nextcloud-Has-User-Statuses?: bool}>|DataResponse + * + * 200: Participants returned + * 403: Missing permissions for getting participants + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getParticipants(bool $includeStatus = false): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController::class); + $response = $proxy->getParticipants($this->room, $this->participant); + $data = $response->getData(); + + if ($this->userId !== null + && $includeStatus + && count($data) < Config::USER_STATUS_INTEGRATION_LIMIT + && $this->appManager->isEnabledForUser('user_status')) { + $userIds = array_filter(array_map(static function (array $parsedParticipant): ?string { + if ($parsedParticipant['actorType'] === Attendee::ACTOR_USERS) { + return $parsedParticipant['actorId']; + } + return null; + }, $data)); + + $statuses = $this->statusManager->getUserStatuses($userIds); + $data = array_map(static function (array $parsedParticipant) use ($statuses): array { + if ($parsedParticipant['actorType'] === Attendee::ACTOR_USERS + && isset($statuses[$parsedParticipant['actorId']])) { + $userId = $parsedParticipant['actorId']; + if (isset($statuses[$userId])) { + $parsedParticipant['status'] = $statuses[$userId]->getStatus(); + $parsedParticipant['statusIcon'] = $statuses[$userId]->getIcon(); + $parsedParticipant['statusMessage'] = $statuses[$userId]->getMessage(); + $parsedParticipant['statusClearAt'] = $statuses[$userId]->getClearAt()?->getTimestamp(); + } else { + $parsedParticipant['status'] = IUserStatus::OFFLINE; + $parsedParticipant['statusIcon'] = null; + $parsedParticipant['statusMessage'] = null; + $parsedParticipant['statusClearAt'] = null; + } + } + return $parsedParticipant; + }, $data); + } + + $response->setData($data); + return $response; + } + + if ($this->participant->getAttendee()->getParticipantType() === Participant::GUEST) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + $participants = $this->participantService->getSessionsAndParticipantsForRoom($this->room); + + return $this->formatParticipantList($participants, $includeStatus); + } + + /** + * Get the breakout room participants for a room + * + * @param bool $includeStatus Include the user statuses + * @return DataResponse, array{X-Nextcloud-Has-User-Statuses?: bool}>|DataResponse|DataResponse + * + * 200: Breakout room participants returned + * 400: Getting breakout room participants is not possible + * 403: Missing permissions to get breakout room participants + */ + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + public function getBreakoutRoomParticipants(bool $includeStatus = false): DataResponse { + if ($this->participant->getAttendee()->getParticipantType() === Participant::GUEST) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + + try { + $breakoutRooms = $this->breakoutRoomService->getBreakoutRooms($this->room, $this->participant); + } catch (\InvalidArgumentException $e) { + return new DataResponse(['error' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } + + $breakoutRooms[] = $this->room; + $participants = $this->participantService->getSessionsAndParticipantsForRooms($breakoutRooms); + + return $this->formatParticipantList($participants, $includeStatus); + } + + /** + * @param Participant[] $participants + * @param bool $includeStatus + * @return DataResponse, array{X-Nextcloud-Has-User-Statuses?: true}> + */ + protected function formatParticipantList(array $participants, bool $includeStatus): DataResponse { + $results = $headers = $statuses = []; + $maxPingAge = $this->timeFactory->getTime() - Session::SESSION_TIMEOUT_KILL; + + if ($this->userId !== null + && $includeStatus + && count($participants) < Config::USER_STATUS_INTEGRATION_LIMIT + && $this->appManager->isEnabledForUser('user_status')) { + $userIds = array_filter(array_map(static function (Participant $participant): ?string { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + return $participant->getAttendee()->getActorId(); + } + return null; + }, $participants)); + + $statuses = $this->statusManager->getUserStatuses($userIds); + + $headers['X-Nextcloud-Has-User-Statuses'] = true; + } + + $currentUser = null; + if ($this->userId !== null) { + $currentUser = $this->userManager->get($this->userId); + } + + $cleanGuests = false; + foreach ($participants as $participant) { + $attendeeId = $participant->getAttendee()->getId(); + if (isset($results[$attendeeId])) { + $session = $participant->getSession(); + if (!$session instanceof Session) { + // If the user has an entry already and this has no session we don't need it anymore. + continue; + } + + if ($session->getLastPing() <= $maxPingAge) { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_GUESTS) { + $cleanGuests = true; + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS + || $participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS + || $participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $this->participantService->leaveRoomAsSession($this->room, $participant); + } + // Session expired, ignore + continue; + } + + // Combine the session values: All inCall bit flags, newest lastPing and any sessionId (for online checking) + $results[$attendeeId]['inCall'] |= $session->getInCall(); + $results[$attendeeId]['lastPing'] = max($results[$attendeeId]['lastPing'], $session->getLastPing()); + $results[$attendeeId]['sessionIds'][] = $session->getSessionId(); + continue; + } + + $result = [ + 'roomToken' => $participant->getRoom()->getToken(), + 'inCall' => Participant::FLAG_DISCONNECTED, + 'lastPing' => 0, + 'sessionIds' => [], + 'participantType' => $participant->getAttendee()->getParticipantType(), + 'attendeeId' => $attendeeId, + 'actorId' => $participant->getAttendee()->getActorId(), + 'actorType' => $participant->getAttendee()->getActorType(), + 'displayName' => $participant->getAttendee()->getActorId(), + 'permissions' => $participant->getPermissions(), + 'attendeePermissions' => $participant->getAttendee()->getPermissions(), + 'attendeePin' => '', + 'phoneNumber' => '', + 'callId' => '', + ]; + if ($this->talkConfig->isSIPConfigured() + && $this->room->getSIPEnabled() !== Webinary::SIP_DISABLED + && ($this->participant->hasModeratorPermissions(false) + || $this->participant->getAttendee()->getId() === $participant->getAttendee()->getId())) { + // Generate a PIN if the attendee is a user and doesn't have one. + $this->participantService->generatePinForParticipant($this->room, $participant); + + $result['attendeePin'] = (string)$participant->getAttendee()->getPin(); + } + + if ($participant->getSession() instanceof Session) { + $result['inCall'] = $participant->getSession()->getInCall(); + $result['lastPing'] = $participant->getSession()->getLastPing(); + $result['sessionIds'] = [$participant->getSession()->getSessionId()]; + } + + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $userId = $participant->getAttendee()->getActorId(); + if ($participant->getSession() instanceof Session && $participant->getSession()->getLastPing() <= $maxPingAge) { + $this->participantService->leaveRoomAsSession($this->room, $participant); + } + + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + if (!$result['displayName']) { + $userDisplayName = $this->userManager->getDisplayName($userId); + if ($userDisplayName === null) { + continue; + } + $result['displayName'] = $userDisplayName; + } + + if (isset($statuses[$userId])) { + $result['status'] = $statuses[$userId]->getStatus(); + $result['statusIcon'] = $statuses[$userId]->getIcon(); + $result['statusMessage'] = $statuses[$userId]->getMessage(); + $result['statusClearAt'] = $statuses[$userId]->getClearAt()?->getTimestamp(); + } elseif (isset($headers['X-Nextcloud-Has-User-Statuses'])) { + $result['status'] = IUserStatus::OFFLINE; + $result['statusIcon'] = null; + $result['statusMessage'] = null; + $result['statusClearAt'] = null; + } + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_GUESTS) { + if ($participant->getAttendee()->getParticipantType() === Participant::GUEST + && ($participant->getAttendee()->getPermissions() === Attendee::PERMISSIONS_DEFAULT + || $participant->getAttendee()->getPermissions() === Attendee::PERMISSIONS_CUSTOM)) { + // Guests without an up-to-date session are filtered out. We + // only keep there attendees in the database, so that the + // comments show the display name. Only when they have + // non-default permissions we show them, so permissions can + // be reset or removed + if ($result['lastPing'] <= $maxPingAge) { + $cleanGuests = true; + continue; + } + } + + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_GROUPS) { + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_CIRCLES) { + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS) { + if ($participant->getSession() instanceof Session && $participant->getSession()->getLastPing() <= $maxPingAge) { + $this->participantService->leaveRoomAsSession($this->room, $participant); + } + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + if ($this->participant->hasModeratorPermissions() || $this->participant->getAttendee()->getId() === $participant->getAttendee()->getId()) { + $result['invitedActorId'] = $participant->getAttendee()->getInvitedCloudId(); + } + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + if ($participant->getSession() instanceof Session && $participant->getSession()->getLastPing() <= $maxPingAge) { + $this->participantService->leaveRoomAsSession($this->room, $participant); + } + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_PHONES) { + $result['displayName'] = $participant->getAttendee()->getDisplayName(); + if ($this->talkConfig->isSIPConfigured() + && $this->participant->hasModeratorPermissions(false)) { + $result['phoneNumber'] = $participant->getAttendee()->getPhoneNumber(); + + if ($currentUser instanceof IUser && $this->talkConfig->canUserDialOutSIP($currentUser)) { + $result['callId'] = $participant->getAttendee()->getCallId(); + } + } + } + + $results[$attendeeId] = $result; + } + + if ($cleanGuests) { + $this->participantService->cleanGuestParticipants($this->room); + } + + return new DataResponse(array_values($results), Http::STATUS_OK, $headers); + } + + /** + * Add a participant to a room + * + * @param string $newParticipant New participant + * @param 'users'|'groups'|'circles'|'emails'|'federated_users'|'phones'|'teams' $source Source of the participant + * @return DataResponse|DataResponse + * + * 200: Participant successfully added + * 400: Adding participant is not possible, e.g. when the user is banned (check error attribute of response for detail key) + * 404: User, group or other target to invite was not found + * 501: SIP dial-out is not configured + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function addParticipantToRoom(string $newParticipant, string $source = 'users'): DataResponse { + if ($this->room->getType() === Room::TYPE_ONE_TO_ONE + || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $this->room->getType() === Room::TYPE_NOTE_TO_SELF + || $this->room->getObjectType() === Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return new DataResponse(['error' => 'room-type'], Http::STATUS_BAD_REQUEST); + } + + if ($source !== 'users' && $this->room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + // Can only add users to breakout rooms + return new DataResponse(['error' => 'source'], Http::STATUS_BAD_REQUEST); + } + + $participants = $this->participantService->getParticipantsForRoom($this->room); + $participantsByUserId = []; + $remoteParticipantsByFederatedId = []; + foreach ($participants as $participant) { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $participantsByUserId[$participant->getAttendee()->getActorId()] = $participant; + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $remoteParticipantsByFederatedId[$participant->getAttendee()->getActorId()] = $participant; + } + } + + /** @var IUser $addedBy */ + $addedBy = $this->userManager->get($this->userId); + + // list of participants to attempt adding, + // existing ones will be filtered later below + $participantsToAdd = []; + + if ($source === 'users') { + if ($newParticipant === MatterbridgeManager::BRIDGE_BOT_USERID) { + return new DataResponse(['error' => 'new-participant'], Http::STATUS_NOT_FOUND); + } + + $newUser = $this->userManager->get($newParticipant); + if (!$newUser instanceof IUser) { + return new DataResponse(['error' => 'new-participant'], Http::STATUS_NOT_FOUND); + } + + //Check if the user is banned + if ($this->banService->isActorBanned($this->room, Attendee::ACTOR_USERS, $newUser->getUID())) { + return new DataResponse(['error' => 'ban'], Http::STATUS_BAD_REQUEST); + } + + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $newUser->getUID(), + 'displayName' => $newUser->getDisplayName(), + ]; + } elseif ($source === 'groups') { + $group = $this->groupManager->get($newParticipant); + if (!$group instanceof IGroup) { + return new DataResponse(['error' => 'new-participant'], Http::STATUS_NOT_FOUND); + } + + $this->participantService->addGroup($this->room, $group, $participants); + } elseif ($source === 'circles' || $source === 'teams') { + if (!$this->appManager->isEnabledForUser('circles')) { + return new DataResponse(['error' => 'new-participant'], Http::STATUS_BAD_REQUEST); + } + + try { + $circle = $this->participantService->getCircle($newParticipant, $this->userId); + } catch (\Exception) { + return new DataResponse(['error' => 'new-participant'], Http::STATUS_NOT_FOUND); + } + + $this->participantService->addCircle($this->room, $circle, $participants); + } elseif ($source === 'emails') { + $data = []; + try { + $this->roomService->setType($this->room, Room::TYPE_PUBLIC); + $data = ['type' => $this->room->getType()]; + } catch (TypeException) { + } + + $email = strtolower($newParticipant); + $actorId = hash('sha256', $email); + try { + $this->participantService->getParticipantByActor($this->room, Attendee::ACTOR_EMAILS, $actorId); + } catch (ParticipantNotFoundException) { + $participant = $this->participantService->inviteEmailAddress($this->room, $actorId, $email); + $this->guestManager->sendEmailInvitation($this->room, $participant); + } + + return new DataResponse($data); + } elseif ($source === 'federated_users') { + if (!$this->talkConfig->isFederationEnabled()) { + return new DataResponse(['error' => 'federation'], Http::STATUS_NOT_IMPLEMENTED); + } + try { + $newUser = $this->cloudIdManager->resolveCloudId($newParticipant); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), [ + 'exception' => $e, + ]); + return new DataResponse(['error' => 'cloud-id'], Http::STATUS_BAD_REQUEST); + } + try { + $this->federationManager->isAllowedToInvite($addedBy, $newUser); + } catch (FederationRestrictionException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_FEDERATED_USERS, + 'actorId' => $newUser->getId(), + 'displayName' => $newUser->getDisplayId(), + ]; + } elseif ($source === 'phones') { + if ( + !$addedBy instanceof IUser + || !$this->talkConfig->isSIPConfigured() + || !$this->talkConfig->canUserDialOutSIP($addedBy) + || preg_match(Room::SIP_INCOMPATIBLE_REGEX, $this->room->getToken()) + || ($this->room->getType() !== Room::TYPE_GROUP && $this->room->getType() !== Room::TYPE_PUBLIC)) { + return new DataResponse(['error' => 'sip'], Http::STATUS_NOT_IMPLEMENTED); + } + + $phoneRegion = $this->config->getSystemValueString('default_phone_region'); + if ($phoneRegion === '') { + $phoneRegion = null; + } + + $formattedNumber = $this->phoneNumberUtil->convertToStandardFormat($newParticipant, $phoneRegion); + if ($formattedNumber === null) { + return new DataResponse([], Http::STATUS_BAD_REQUEST); + } + + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_PHONES, + 'actorId' => sha1($formattedNumber . '#' . $this->timeFactory->getTime()), + 'displayName' => substr($formattedNumber, 0, -4) . '…', // FIXME Allow the UI to hand in a name (when selected from contacts?) + 'phoneNumber' => $formattedNumber, + ]; + } else { + $this->logger->error('Trying to add participant from unsupported source ' . $source); + return new DataResponse(['error' => 'source'], Http::STATUS_BAD_REQUEST); + } + + // attempt adding the listed users to the room + // existing users with USER_SELF_JOINED will get converted to regular USER participants + foreach ($participantsToAdd as $index => $participantToAdd) { + $existingParticipant = $participantsByUserId[$participantToAdd['actorId']] ?? null; + if ($participantToAdd['actorType'] === Attendee::ACTOR_FEDERATED_USERS) { + $existingParticipant = $remoteParticipantsByFederatedId[$participantToAdd['actorId']] ?? null; + } + + if ($existingParticipant !== null) { + unset($participantsToAdd[$index]); + if ($existingParticipant->getAttendee()->getParticipantType() !== Participant::USER_SELF_JOINED) { + // user is already a regular participant, skip + continue; + } + $this->participantService->updateParticipantType($this->room, $existingParticipant, Participant::USER); + } + } + + if ($source === 'users' && $this->room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + $parentRoom = $this->manager->getRoomByToken($this->room->getObjectId()); + + // Also add to parent room in case the user is missing + try { + $this->participantService->getParticipantByActor( + $parentRoom, + Attendee::ACTOR_USERS, + $newParticipant + ); + } catch (ParticipantNotFoundException $e) { + $this->participantService->addUsers($parentRoom, $participantsToAdd, $addedBy); + } + + // Remove from previous breakout room in case the user is moved + try { + $this->breakoutRoomService->removeAttendeeFromBreakoutRoom($parentRoom, Attendee::ACTOR_USERS, $newParticipant); + } catch (\InvalidArgumentException $e) { + /** @var 'moderator' $error */ + $error = $e->getMessage(); + return new DataResponse(['error' => $error], Http::STATUS_BAD_REQUEST); + } + } + + // add the remaining users in batch + try { + $this->participantService->addUsers($this->room, $participantsToAdd, $addedBy); + } catch (CannotReachRemoteException $e) { + return new DataResponse(['error' => 'reach-remote'], Http::STATUS_NOT_FOUND); + } + + return new DataResponse([]); + } + + /** + * Remove the current user from a room + * + * @return DataResponse|DataResponse + * + * 200: Participant removed successfully + * 400: Removing participant is not possible + * 404: Participant not found + */ + #[FederationSupported] + #[NoAdminRequired] + #[RequireLoggedInParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function removeSelfFromRoom(): DataResponse { + return $this->removeSelfFromRoomLogic($this->room, $this->participant); + } + + /** + * @return DataResponse|DataResponse + */ + protected function removeSelfFromRoomLogic(Room $room, Participant $participant): DataResponse { + if ($room->isFederatedConversation()) { + $this->federationManager->rejectByRemoveSelf($room, $this->userId); + } + + if ($room->getType() !== Room::TYPE_ONE_TO_ONE && $room->getType() !== Room::TYPE_ONE_TO_ONE_FORMER) { + if ($participant->hasModeratorPermissions(false) + && $this->participantService->getNumberOfUsers($room) > 1 + && $this->participantService->getNumberOfModerators($room) === 1) { + return new DataResponse(['error' => 'last-moderator'], Http::STATUS_BAD_REQUEST); + } + } + + if ($room->getType() !== Room::TYPE_CHANGELOG + && $room->getObjectType() !== Room::OBJECT_TYPE_FILE + && $this->participantService->getNumberOfUsers($room) === 1 + && \in_array($participant->getAttendee()->getParticipantType(), [ + Participant::USER, + Participant::MODERATOR, + Participant::OWNER, + ], true)) { + $this->roomService->deleteRoom($room); + return new DataResponse(null); + } + + if ($this->appConfig->getAppValueBool('delete_one_to_one_conversations') + && in_array($this->room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $this->roomService->deleteRoom($room); + return new DataResponse(null); + } + + $currentUser = $this->userManager->get($this->userId); + if (!$currentUser instanceof IUser) { + return new DataResponse(['error' => 'participant'], Http::STATUS_NOT_FOUND); + } + + $this->participantService->removeUser($room, $currentUser, AAttendeeRemovedEvent::REASON_LEFT); + + return new DataResponse(null); + } + + /** + * Remove an attendee from a room + * + * @param int $attendeeId ID of the attendee + * @psalm-param non-negative-int $attendeeId + * @return DataResponse|DataResponse + * + * 200: Attendee removed successfully + * 400: Removing attendee is not possible + * 403: Removing attendee is not allowed + * 404: Attendee not found + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function removeAttendeeFromRoom(int $attendeeId): DataResponse { + try { + $targetParticipant = $this->participantService->getParticipantByAttendeeId($this->room, $attendeeId); + } catch (ParticipantNotFoundException $e) { + return new DataResponse(['error' => 'participant'], Http::STATUS_NOT_FOUND); + } + + if ($targetParticipant->getAttendee()->getActorType() === Attendee::ACTOR_USERS + && $targetParticipant->getAttendee()->getActorId() === MatterbridgeManager::BRIDGE_BOT_USERID) { + return new DataResponse(['error' => 'participant'], Http::STATUS_NOT_FOUND); + } + + if ($this->room->getType() === Room::TYPE_ONE_TO_ONE || $this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + return new DataResponse(['error' => 'room-type'], Http::STATUS_BAD_REQUEST); + } + + if ($this->participant->getAttendee()->getId() === $targetParticipant->getAttendee()->getId()) { + return $this->removeSelfFromRoomLogic($this->room, $targetParticipant); + } + + if ($targetParticipant->getAttendee()->getParticipantType() === Participant::OWNER) { + return new DataResponse(['error' => 'owner'], Http::STATUS_FORBIDDEN); + } + + $this->participantService->removeAttendee($this->room, $targetParticipant, AAttendeeRemovedEvent::REASON_REMOVED); + return new DataResponse(null); + } + + /** + * Allowed guests to join conversation + * + * Required capability: `conversation-creation-password` for `string $password` parameter + * + * @param string $password New password (only available with `conversation-creation-password` capability) + * @return DataResponse|DataResponse + * + * 200: Allowed guests successfully + * 400: Allowing guests is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function makePublic(string $password = ''): DataResponse { + if ($this->talkConfig->isPasswordEnforced() && $password === '') { + return new DataResponse(['error' => 'password', 'message' => $this->l->t('Password needs to be set')], Http::STATUS_BAD_REQUEST); + } + + try { + if ($password !== '') { + $this->roomService->makePublicWithPassword($this->room, $password); + } else { + $this->roomService->setType($this->room, Room::TYPE_PUBLIC); + } + } catch (PasswordException $e) { + return new DataResponse(['error' => 'password', 'message' => $e->getHint()], Http::STATUS_BAD_REQUEST); + } catch (TypeException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Disallowed guests to join conversation + * + * @return DataResponse|DataResponse + * + * 200: Room unpublished Disallowing guests successfully + * 400: Disallowing guests is not possible + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function makePrivate(): DataResponse { + try { + $this->roomService->setType($this->room, Room::TYPE_GROUP); + } catch (TypeException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Set read-only state of a room + * + * @param 0|1 $state New read-only state + * @psalm-param Room::READ_* $state + * @return DataResponse|DataResponse + * + * 200: Read-only state updated successfully + * 400: Updating read-only state is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function setReadOnly(int $state): DataResponse { + try { + $this->roomService->setReadOnly($this->room, $state); + } catch (ReadOnlyException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + if ($state === Room::READ_ONLY) { + $participants = $this->participantService->getParticipantsInCall($this->room); + + // kick out all participants out of the call + foreach ($participants as $participant) { + $this->participantService->changeInCall($this->room, $participant, Participant::FLAG_DISCONNECTED); + } + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Make a room listable + * + * @param 0|1|2 $scope Scope where the room is listable + * @psalm-param Room::LISTABLE_* $scope + * @return DataResponse|DataResponse + * + * 200: Made room listable successfully + * 400: Making room listable is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function setListable(int $scope): DataResponse { + try { + $this->roomService->setListable($this->room, $scope); + } catch (ListableException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update the mention permissions for a room + * + * @param 0|1 $mentionPermissions New mention permissions + * @psalm-param Room::MENTION_PERMISSIONS_* $mentionPermissions + * @return DataResponse|DataResponse + * + * 200: Permissions updated successfully + * 400: Updating permissions is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function setMentionPermissions(int $mentionPermissions): DataResponse { + try { + $this->roomService->setMentionPermissions($this->room, $mentionPermissions); + } catch (MentionPermissionsException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Set a password for a room + * + * @param string $password New password + * @return DataResponse|DataResponse + * + * 200: Password set successfully + * 400: Setting password is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setPassword(string $password): DataResponse { + try { + $this->roomService->setPassword($this->room, $password); + } catch (PasswordException $e) { + $data = ['error' => $e->getReason()]; + if ($e->getHint() !== '') { + $data['message'] = $e->getHint(); + } + return new DataResponse($data, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Archive a conversation + * + * Required capability: `archived-conversations-v2` + * + * @return DataResponse + * + * 200: Conversation was archived + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function archiveConversation(): DataResponse { + $this->participantService->archiveConversation($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Unarchive a conversation + * + * Required capability: `archived-conversations-v2` + * + * @return DataResponse + * + * 200: Conversation was unarchived + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function unarchiveConversation(): DataResponse { + $this->participantService->unarchiveConversation($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Mark a conversation as important (still sending notifications while on DND) + * + * Required capability: `important-conversations` + * + * @return DataResponse + * + * 200: Conversation was marked as important + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function markConversationAsImportant(): DataResponse { + $this->participantService->markConversationAsImportant($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Mark a conversation as unimportant (no longer sending notifications while on DND) + * + * Required capability: `important-conversations` + * + * @return DataResponse + * + * 200: Conversation was marked as unimportant + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function markConversationAsUnimportant(): DataResponse { + $this->participantService->markConversationAsUnimportant($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Mark a conversation as sensitive (no last message is visible / no push preview is shown) + * + * Required capability: `sensitive-conversations` + * + * @return DataResponse + * + * 200: Conversation was marked as sensitive + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function markConversationAsSensitive(): DataResponse { + $this->participantService->markConversationAsSensitive($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Mark a conversation as insensitive (last message is visible / push preview is shown) + * + * Required capability: `sensitive-conversations` + * + * @return DataResponse + * + * 200: Conversation was marked as insensitive + */ + #[NoAdminRequired] + #[FederationSupported] + #[RequireLoggedInParticipant] + public function markConversationAsInsensitive(): DataResponse { + $this->participantService->markConversationAsInsensitive($this->participant); + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Join a room + * + * @param string $token Token of the room + * @param string $password Password of the room + * @param bool $force Create a new session if necessary + * @return DataResponse|DataResponse|DataResponse|DataResponse + * + * 200: Room joined successfully + * 403: Joining room is not allowed + * 404: Room not found + * 409: Session already exists + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomPassword')] + #[BruteForceProtection(action: 'talkRoomToken')] + public function joinRoom(string $token, string $password = '', bool $force = true): DataResponse { + $sessionId = $this->session->getSessionForRoom($token); + try { + // The participant is just joining, so enforce to not load any session + $room = $this->manager->getRoomForUserByToken($token, $this->userId, null); + } catch (RoomNotFoundException $e) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + try { + $this->banService->throwIfActorIsBanned($room, $this->userId); + } catch (ForbiddenException $e) { + $this->logger->info('Participant ' . ($this->userId ?? 'guest') . ' is banned from room ' . $token . ' by ' . $e->getMessage()); + return new DataResponse([ + 'error' => 'ban', + ], Http::STATUS_FORBIDDEN); + } + + /** @var Participant|null $previousSession */ + $previousParticipant = null; + /** @var Session|null $previousSession */ + $previousSession = null; + + if ($sessionId !== null) { + try { + if ($this->userId !== null) { + $previousParticipant = $this->participantService->getParticipant($room, $this->userId, $sessionId); + } else { + $previousParticipant = $this->participantService->getParticipantBySession($room, $sessionId); + } + $previousSession = $previousParticipant->getSession(); + } catch (ParticipantNotFoundException $e) { + } + + if ($previousSession instanceof Session && $previousSession->getSessionId() === $sessionId) { + if ($force === false && $previousSession->getInCall() !== Participant::FLAG_DISCONNECTED) { + // Previous session is/was active in the call, show a warning + return new DataResponse([ + 'sessionId' => $previousSession->getSessionId(), + 'inCall' => $previousSession->getInCall(), + 'lastPing' => $previousSession->getLastPing(), + ], Http::STATUS_CONFLICT); + } + + if ($previousSession->getInCall() !== Participant::FLAG_DISCONNECTED) { + $this->participantService->changeInCall($room, $previousParticipant, Participant::FLAG_DISCONNECTED); + } + + $this->participantService->leaveRoomAsSession($room, $previousParticipant, true); + } + } + + $authenticatedEmailGuest = $this->session->getAuthedEmailActorIdForRoom($token); + + $headers = []; + if ($authenticatedEmailGuest !== null || $room->isFederatedConversation() + || ($previousParticipant instanceof Participant && $previousParticipant->isGuest())) { + // Skip password checking + $result = [ + 'result' => true, + ]; + } else { + $result = $this->roomService->verifyPassword($room, (string)$this->session->getPasswordForRoom($token)); + } + + $user = $this->userManager->get($this->userId); + try { + if ($user instanceof IUser) { + $participant = $this->participantService->joinRoom($this->roomService, $room, $user, $password, $result['result']); + $this->participantService->generatePinForParticipant($room, $participant); + } else { + if ($authenticatedEmailGuest !== null && $previousParticipant === null) { + try { + $previousParticipant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_EMAILS, $authenticatedEmailGuest); + } catch (ParticipantNotFoundException $e) { + } + } + $participant = $this->participantService->joinRoomAsNewGuest($this->roomService, $room, $password, $result['result'], $previousParticipant); + $this->session->setGuestActorIdForRoom($room->getToken(), $participant->getAttendee()->getActorId()); + } + $this->throttler->resetDelay($this->request->getRemoteAddress(), 'talkRoomPassword', ['token' => $token, 'action' => 'talkRoomPassword']); + $this->throttler->resetDelay($this->request->getRemoteAddress(), 'talkRoomToken', ['token' => $token, 'action' => 'talkRoomToken']); + } catch (InvalidPasswordException $e) { + $response = new DataResponse([ + 'error' => 'password', + ], Http::STATUS_FORBIDDEN); + $response->throttle(['token' => $token, 'action' => 'talkRoomPassword']); + return $response; + } catch (UnauthorizedException $e) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + $this->session->removePasswordForRoom($token); + $session = $participant->getSession(); + if ($session instanceof Session) { + $this->session->setSessionForRoom($token, $session->getSessionId()); + } + + if ($room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController::class); + + try { + $response = $proxy->joinFederatedRoom($room, $participant); + } catch (CannotReachRemoteException $e) { + $this->participantService->leaveRoomAsSession($room, $participant); + + throw $e; + } + + if ($response->getStatus() === Http::STATUS_NOT_FOUND) { + $this->participantService->removeAttendee($room, $participant, AAttendeeRemovedEvent::REASON_REMOVED); + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + /** @var TalkRoom $data */ + $data = $response->getData(); + $this->roomService->syncPropertiesFromHostRoom($room, $data); + + $proxyHeaders = $response->getHeaders(); + if (isset($proxyHeaders['X-Nextcloud-Talk-Proxy-Hash'])) { + $headers['X-Nextcloud-Talk-Proxy-Hash'] = $proxyHeaders['X-Nextcloud-Talk-Proxy-Hash']; + } + } + + $userStatuses = null; + if ($this->userId !== null + && $this->appManager->isEnabledForUser('user_status') + && $room->getType() === Room::TYPE_ONE_TO_ONE) { + $actorIds = json_decode($room->getName(), true) ?? []; + if (is_array($actorIds)) { + $actorIds = array_filter($actorIds, fn ($actorId) => $actorId !== $this->userId); + if (!empty($actorIds)) { + $userStatuses = $this->statusManager->getUserStatuses($actorIds); + } + } + } + + return new DataResponse($this->formatRoom($room, $participant, $userStatuses), Http::STATUS_OK, $headers); + } + + /** + * Join room on the host server using the session id of the federated user + * + * The session id can be null only for requests from Talk < 20. + * + * @param string $token Token of the room + * @param ?string $sessionId Federated session id to join with + * @return DataResponse|DataResponse + * + * 200: Federated user joined the room + * 404: Room not found + */ + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomToken')] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function joinFederatedRoom(string $token, ?string $sessionId): DataResponse { + if (!$this->federationAuthenticator->isFederationRequest()) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + try { + try { + $room = $this->federationAuthenticator->getRoom(); + } catch (RoomNotFoundException) { + $room = $this->manager->getRoomByRemoteAccess( + $token, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId(), + $this->federationAuthenticator->getAccessToken(), + ); + } + + if ($sessionId !== null) { + $participant = $this->participantService->joinRoomAsFederatedUser($room, Attendee::ACTOR_FEDERATED_USERS, $this->federationAuthenticator->getCloudId(), $sessionId); + } else { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_FEDERATED_USERS, $this->federationAuthenticator->getCloudId()); + } + + // Let the clients know if they need to reload capabilities + $capabilities = $this->capabilities->getCapabilities(); + return new DataResponse($this->formatRoom($room, $participant), Http::STATUS_OK, [ + 'X-Nextcloud-Talk-Hash' => sha1(json_encode($capabilities)), + ]); + } catch (RoomNotFoundException|ParticipantNotFoundException|UnauthorizedException) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkFederationAccess']); + return $response; + } + } + + /** + * Verify a dial-in PIN (SIP bridge) + * + * @param numeric-string $pin PIN the participant used to dial-in + * @return DataResponse|DataResponse + * + * 200: Participant returned + * 401: SIP request invalid + * 404: Participant not found + * 501: SIP dial-in is not configured + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequireRoom] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function verifyDialInPin(string $pin): DataResponse { + if (!$this->talkConfig->isSIPConfigured()) { + return new DataResponse(null, Http::STATUS_NOT_IMPLEMENTED); + } + + try { + if (!$this->validateSIPBridgeRequest($this->room->getToken())) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + } catch (UnauthorizedException) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + try { + $participant = $this->participantService->getParticipantByPin($this->room, $pin); + } catch (ParticipantNotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + return new DataResponse($this->formatRoom($this->room, $participant, skipLastMessage: true)); + } + + /** + * Direct dial-in (SIP bridge) + * + * Required capability: `sip-direct-dialin` + * + * @param string $phoneNumber Phone number that is called + * @param string $caller Phone number of the person calling in + * @return DataResponse|DataResponse + * + * 200: Call conversation created + * 401: SIP request invalid + * 404: Number is not assigned to any user + * 500: Error occurred while creating conversation + * 501: SIP dial-in is not configured + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function directDialIn(string $phoneNumber, string $caller): DataResponse { + if (!$this->talkConfig->isSIPConfigured()) { + return new DataResponse(null, Http::STATUS_NOT_IMPLEMENTED); + } + + try { + if (!$this->validateSIPBridgeRequest($phoneNumber)) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + } catch (UnauthorizedException) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + try { + $entity = $this->phoneService->getAccountToCallForPhoneNumber($phoneNumber); + } catch (DoesNotExistException) { + $this->logger->info('No account found for direct dial-in with number: ' . $phoneNumber); + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $caller = trim($caller); + // TODO: Use later and get name from addressbook? $cleanedCaller = $this->phoneNumberUtil->convertToStandardFormat($caller); + $user = $this->userManager->get($entity->getActorId()); + try { + $room = $this->roomService->createConversation( + Room::TYPE_GROUP, + $caller, + $user, + Room::OBJECT_TYPE_PHONE_TEMPORARY, + Room::OBJECT_ID_PHONE_INCOMING, + sipEnabled: Webinary::SIP_ENABLED_NO_PIN, + ); + } catch (CreationException|PasswordException $e) { + $this->logger->error('Error occurred while creating SIP direct dial-in conversation', ['exception' => $e]); + return new DataResponse(null, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $participant = $this->participantService->joinRoomAsNewGuest($this->roomService, $room, '', true, displayName: $caller); + return new DataResponse($this->formatRoom($room, $participant)); + } + + /** + * Verify a dial-out number (SIP bridge) + * + * @param string $number E164 formatted phone number + * @param array{actorId?: string, actorType?: string, attendeeId?: int} $options Additional details to verify the validity of the request + * @return DataResponse|DataResponse + * + * 200: Participant created successfully + * 400: Phone number and details could not be confirmed + * 401: SIP request invalid + * 404: Phone number is not invited as a participant + * 501: SIP dial-out is not configured + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequireRoom] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function verifyDialOutNumber(string $number, array $options = []): DataResponse { + if (!$this->talkConfig->isSIPConfigured() || !$this->talkConfig->isSIPDialOutEnabled()) { + return new DataResponse(null, Http::STATUS_NOT_IMPLEMENTED); + } + + try { + if (!$this->validateSIPBridgeRequest($this->room->getToken())) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + } catch (UnauthorizedException) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + if (!isset($options['actorId'], $options['actorType']) || $options['actorType'] !== Attendee::ACTOR_PHONES) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + try { + $participant = $this->participantService->getParticipantByActor($this->room, Attendee::ACTOR_PHONES, $options['actorId']); + } catch (ParticipantNotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + if ($participant->getAttendee()->getPhoneNumber() !== $number) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $participant, skipLastMessage: true)); + } + + /** + * Create a guest by their dial-in + * + * @return DataResponse|DataResponse + * + * 200: Participant created successfully + * 400: SIP not enabled + * 401: SIP request invalid + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequireRoom] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function createGuestByDialIn(): DataResponse { + try { + if (!$this->validateSIPBridgeRequest($this->room->getToken())) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + } catch (UnauthorizedException $e) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + if ($this->room->getSIPEnabled() !== Webinary::SIP_ENABLED_NO_PIN) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $participant = $this->participantService->joinRoomAsNewGuest($this->roomService, $this->room, '', true); + + return new DataResponse($this->formatRoom($this->room, $participant, skipLastMessage: true)); + } + + /** + * Reset call ID of a dial-out participant when the SIP gateway rejected it + * + * @param string $callId The call ID provided by the SIP bridge earlier to uniquely identify the call to terminate + * @param array{actorId?: string, actorType?: string, attendeeId?: int} $options Additional details to verify the validity of the request + * @return DataResponse + * + * 200: Call ID reset + * 400: Call ID mismatch or attendeeId not found in $options + * 401: SIP request invalid + * 404: Participant was not found + * 501: SIP dial-out is not configured + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkSipBridgeSecret')] + #[OpenAPI(scope: 'backend-sipbridge')] + #[RequireRoom] + #[RequestHeader(name: 'talk-sipbridge-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-sipbridge-checksum', description: 'Checksum over the request body to verify authenticity from the Sipbridge', indirect: true)] + public function rejectedDialOutRequest(string $callId, array $options = []): DataResponse { + if (!$this->talkConfig->isSIPConfigured() || !$this->talkConfig->isSIPDialOutEnabled()) { + return new DataResponse(null, Http::STATUS_NOT_IMPLEMENTED); + } + + try { + if (!$this->validateSIPBridgeRequest($this->room->getToken())) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + } catch (UnauthorizedException $e) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkSipBridgeSecret']); + return $response; + } + + if (empty($options['attendeeId'])) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + try { + $this->participantService->resetDialOutRequest($this->room, $options['attendeeId'], $callId); + } catch (ParticipantNotFoundException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } catch (\InvalidArgumentException) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null); + } + + /** + * Set active state for a session + * + * @param 0|1 $state of the room + * @psalm-param Session::STATE_* $state + * @return DataResponse|DataResponse + * + * 200: Session state set successfully + * 400: The provided new state was invalid + * 404: The participant did not have a session + */ + #[FederationSupported] + #[PublicPage] + #[RequireParticipant] + public function setSessionState(int $state): DataResponse { + if (!$this->participant->getSession() instanceof Session) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + try { + $this->sessionService->updateSessionState($this->participant->getSession(), $state); + } catch (\InvalidArgumentException) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Leave a room + * + * @param string $token Token of the room + * @return DataResponse + * + * 200: Successfully left the room + */ + #[PublicPage] + public function leaveRoom(string $token): DataResponse { + $sessionId = $this->session->getSessionForRoom($token); + $this->session->removeSessionForRoom($token); + + try { + $room = $this->manager->getRoomForUserByToken($token, $this->userId, $sessionId); + $participant = $this->participantService->getParticipantBySession($room, $sessionId); + + if ($room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController::class); + $response = $proxy->leaveFederatedRoom($room, $participant); + } + + $this->participantService->leaveRoomAsSession($room, $participant); + } catch (RoomNotFoundException|ParticipantNotFoundException) { + } + + return new DataResponse(null); + } + + /** + * Leave room on the host server using the session id of the federated user + * + * @param string $token Token of the room + * @param string $sessionId Federated session id to leave with + * @return DataResponse + * + * 200: Successfully left the room + * 404: Room not found (non-federation request) + */ + #[OpenAPI(scope: OpenAPI::SCOPE_FEDERATION)] + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomToken')] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function leaveFederatedRoom(string $token, string $sessionId): DataResponse { + if (!$this->federationAuthenticator->isFederationRequest()) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + + try { + try { + $room = $this->federationAuthenticator->getRoom(); + } catch (RoomNotFoundException) { + $room = $this->manager->getRoomByRemoteAccess( + $token, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId(), + $this->federationAuthenticator->getAccessToken(), + ); + } + + try { + $participant = $this->federationAuthenticator->getParticipant(); + } catch (ParticipantNotFoundException) { + $participant = $this->participantService->getParticipantBySession( + $room, + $sessionId, + ); + + if ( + $participant->getAttendee()->getActorType() !== Attendee::ACTOR_FEDERATED_USERS + || $participant->getAttendee()->getActorId() !== $this->federationAuthenticator->getCloudId() + || !hash_equals($participant->getAttendee()->getAccessToken(), $this->federationAuthenticator->getAccessToken()) + ) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => 'talkRoomToken']); + return $response; + } + $this->federationAuthenticator->authenticated($room, $participant); + } + + $this->participantService->leaveRoomAsSession($room, $participant); + } catch (RoomNotFoundException|ParticipantNotFoundException) { + } + + return new DataResponse(null); + } + + /** + * Promote an attendee to moderator + * + * @param int $attendeeId ID of the attendee + * @psalm-param non-negative-int $attendeeId + * @return DataResponse + * + * 200: Attendee promoted to moderator successfully + * 400: Promoting attendee to moderator is not possible + * 403: Promoting attendee to moderator is not allowed + * 404: Attendee not found + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function promoteModerator(int $attendeeId): DataResponse { + return $this->changeParticipantType($attendeeId, true); + } + + /** + * Demote an attendee from moderator + * + * @param int $attendeeId ID of the attendee + * @psalm-param non-negative-int $attendeeId + * @return DataResponse + * + * 200: Attendee demoted from moderator successfully + * 400: Demoting attendee from moderator is not possible + * 403: Demoting attendee from moderator is not allowed + * 404: Attendee not found + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function demoteModerator(int $attendeeId): DataResponse { + return $this->changeParticipantType($attendeeId, false); + } + + /** + * Toggle a user/guest to moderator/guest-moderator or vice-versa based on + * attendeeId + * + * @param int $attendeeId + * @psalm-param non-negative-int $attendeeId + * @param bool $promote Shall the attendee be promoted or demoted + * @return DataResponse + */ + protected function changeParticipantType(int $attendeeId, bool $promote): DataResponse { + try { + $targetParticipant = $this->participantService->getParticipantByAttendeeId($this->room, $attendeeId); + } catch (ParticipantNotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + $attendee = $targetParticipant->getAttendee(); + + if ($attendee->getActorType() === Attendee::ACTOR_USERS + && $attendee->getActorId() === MatterbridgeManager::BRIDGE_BOT_USERID) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + // Prevent users/moderators modifying themselves + if ($attendee->getActorType() === $this->participant->getAttendee()->getActorType()) { + if ($attendee->getActorId() === $this->participant->getAttendee()->getActorId()) { + return new DataResponse(null, Http::STATUS_FORBIDDEN); + } + } elseif ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { + // Can not promote/demote groups + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + if ($promote === $targetParticipant->hasModeratorPermissions()) { + // Prevent concurrent changes + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + if ($attendee->getParticipantType() === Participant::USER + || $attendee->getParticipantType() === Participant::USER_SELF_JOINED) { + $newType = Participant::MODERATOR; + } elseif ($attendee->getParticipantType() === Participant::GUEST) { + $newType = Participant::GUEST_MODERATOR; + } elseif ($attendee->getParticipantType() === Participant::MODERATOR) { + $newType = Participant::USER; + } elseif ($attendee->getParticipantType() === Participant::GUEST_MODERATOR) { + $newType = Participant::GUEST; + } else { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $this->participantService->updateParticipantType($this->room, $targetParticipant, $newType); + + return new DataResponse(null); + } + + /** + * Update the permissions of a room + * + * @param 'call'|'default' $mode Level of the permissions ('call' (removed in Talk 20), 'default') + * @param int<0, 255> $permissions New permissions + * @psalm-param int-mask-of $permissions + * @return DataResponse|DataResponse + * + * 200: Permissions updated successfully + * 400: Updating permissions is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setPermissions(string $mode, int $permissions): DataResponse { + if ($mode !== 'default') { + return new DataResponse(['error' => 'mode'], Http::STATUS_BAD_REQUEST); + } + + try { + $this->roomService->setDefaultPermissions($this->room, $permissions); + } catch (DefaultPermissionsException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update the permissions of an attendee + * + * @param int $attendeeId ID of the attendee + * @psalm-param non-negative-int $attendeeId + * @param 'set'|'remove'|'add' $method Method of updating permissions ('set', 'remove', 'add') + * @param int<0, 255> $permissions New permissions + * @psalm-param int-mask-of $permissions + * @return DataResponse, array{X-Nextcloud-Has-User-Statuses?: true}>|DataResponse + * + * 200: Permissions updated successfully + * 400: Updating permissions is not possible + * 403: Missing permissions to update permissions + * 404: Attendee not found + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setAttendeePermissions(int $attendeeId, string $method, int $permissions): DataResponse { + try { + $targetParticipant = $this->participantService->getParticipantByAttendeeId($this->room, $attendeeId); + } catch (ParticipantNotFoundException $e) { + return new DataResponse(['error' => 'participant'], Http::STATUS_NOT_FOUND); + } + + try { + $this->participantService->updatePermissions($this->room, $targetParticipant, $method, $permissions); + } catch (PermissionsException $e) { + if ($e->getReason() === PermissionsException::REASON_MODERATOR) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_FORBIDDEN); + } + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return $this->formatParticipantList([$targetParticipant], true); + } + + /** + * Update the permissions of all attendees + * + * @param 'set'|'remove'|'add' $method Method of updating permissions ('set', 'remove', 'add') + * @psalm-param Attendee::PERMISSIONS_MODIFY_* $method + * @param int<0, 255> $permissions New permissions + * @psalm-param int-mask-of $permissions + * @return DataResponse|DataResponse + * @deprecated Call permissions have been removed + * + * 200: Permissions updated successfully + * 400: Updating permissions is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setAllAttendeesPermissions(string $method, int $permissions): DataResponse { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + /** + * Update the lobby state for a room + * + * @param 0|1 $state New state + * @psalm-param Webinary::LOBBY_* $state + * @param int|null $timer Timer when the lobby will be removed + * @psalm-param non-negative-int|null $timer + * @return DataResponse|DataResponse + * + * 200: Lobby state updated successfully + * 400: Updating lobby state is not possible + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function setLobby(int $state, ?int $timer = null): DataResponse { + $timerDateTime = null; + if ($timer !== null && $timer > 0) { + try { + $timerDateTime = $this->timeFactory->getDateTime('@' . $timer); + $timerDateTime->setTimezone(new \DateTimeZone('UTC')); + } catch (\Exception $e) { + return new DataResponse(['error' => LobbyException::REASON_VALUE], Http::STATUS_BAD_REQUEST); + } + } + + if ($this->room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + // Do not allow manual changing the lobby in breakout rooms + return new DataResponse(['error' => LobbyException::REASON_BREAKOUT_ROOM], Http::STATUS_BAD_REQUEST); + } + + try { + $this->roomService->setLobby($this->room, $state, $timerDateTime); + } catch (LobbyException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + if ($state === Webinary::LOBBY_NON_MODERATORS) { + $participants = $this->participantService->getParticipantsInCall($this->room); + foreach ($participants as $participant) { + if ($participant->hasModeratorPermissions()) { + continue; + } + + $this->participantService->changeInCall($this->room, $participant, Participant::FLAG_DISCONNECTED); + } + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Update SIP enabled state + * + * @param 0|1|2 $state New state + * @psalm-param Webinary::SIP_* $state + * @return DataResponse|DataResponse|DataResponse + * + * 200: SIP enabled state updated successfully + * 400: Updating SIP enabled state is not possible + * 401: User not found + * 403: Missing permissions to update SIP enabled state + * 412: SIP not configured + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function setSIPEnabled(int $state): DataResponse { + $user = $this->userManager->get($this->userId); + if (!$user instanceof IUser) { + return new DataResponse(['error' => 'config'], Http::STATUS_UNAUTHORIZED); + } + + if (!$this->talkConfig->canUserEnableSIP($user)) { + return new DataResponse(['error' => 'config'], Http::STATUS_FORBIDDEN); + } + + if (!$this->talkConfig->isSIPConfigured()) { + return new DataResponse(['error' => 'config'], Http::STATUS_PRECONDITION_FAILED); + } + + try { + $this->roomService->setSIPEnabled($this->room, $state); + } catch (SipConfigurationException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Set recording consent requirement for this conversation + * + * @param int $recordingConsent New consent setting for the conversation + * (Only {@see RecordingService::CONSENT_REQUIRED_NO} and {@see RecordingService::CONSENT_REQUIRED_YES} are allowed here.) + * @psalm-param RecordingService::CONSENT_REQUIRED_NO|RecordingService::CONSENT_REQUIRED_YES $recordingConsent + * @return DataResponse|DataResponse|DataResponse + * + * 200: Recording consent requirement set successfully + * 400: Setting recording consent requirement is not possible + * 412: No recording server is configured + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function setRecordingConsent(int $recordingConsent): DataResponse { + if (!$this->talkConfig->isRecordingEnabled()) { + return new DataResponse(['error' => 'config'], Http::STATUS_PRECONDITION_FAILED); + } + + try { + $this->roomService->setRecordingConsent($this->room, $recordingConsent); + } catch (RecordingConsentException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Resend invitations + * + * @param int|null $attendeeId ID of the attendee + * @psalm-param non-negative-int|null $attendeeId + * @return DataResponse + * + * 200: Invitation resent successfully + * 404: Attendee not found + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function resendInvitations(?int $attendeeId): DataResponse { + /** @var Participant[] $participants */ + $participants = []; + + // targeting specific participant + if ($attendeeId !== null) { + try { + $participants[] = $this->participantService->getParticipantByAttendeeId($this->room, $attendeeId); + } catch (ParticipantNotFoundException $e) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + } else { + $participants = $this->participantService->getParticipantsByActorType($this->room, Attendee::ACTOR_EMAILS); + } + + foreach ($participants as $participant) { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_EMAILS) { + // generate PIN if applicable + $this->participantService->generatePinForParticipant($this->room, $participant); + $this->guestManager->sendEmailInvitation($this->room, $participant); + } + } + return new DataResponse(null); + } + + /** + * Update message expiration time + * + * @param int $seconds New time + * @psalm-param non-negative-int $seconds + * @return DataResponse|DataResponse + * + * 200: Message expiration time updated successfully + * 400: Updating message expiration time is not possible + */ + #[PublicPage] + #[RequireModeratorParticipant] + public function setMessageExpiration(int $seconds): DataResponse { + try { + $this->roomService->setMessageExpiration($this->room, $seconds); + } catch (MessageExpirationException $e) { + return new DataResponse(['error' => $e->getReason()], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse($this->formatRoom($this->room, $this->participant)); + } + + /** + * Import a list of email attendees + * + * Content format is comma separated values: + * - Header line is required and must match `"email","name"` or `"email"` + * - One entry per line (e.g. `"John Doe","john@example.tld"`) + * + * Required capability: `email-csv-import` + * + * @param bool $testRun When set to true, the file is validated and no email is actually sent nor any participant added to the conversation + * @return DataResponse, type?: int<-1, 6>}, array{}>|DataResponse, type?: int<-1, 6>}, array{}> + * + * 200: All entries imported successfully + * 400: Import was not successful. When message is provided the string is in user language and should be displayed as an error. + */ + #[NoAdminRequired] + #[RequireModeratorParticipant] + public function importEmailsAsParticipants(bool $testRun = false): DataResponse { + $file = $this->request->getUploadedFile('file'); + if ($file === null) { + return new DataResponse([ + 'error' => 'file', + 'message' => $this->l->t('Uploading the file failed'), + ], Http::STATUS_BAD_REQUEST); + } + if ($file['error'] !== 0) { + $this->logger->error('Uploading email CSV file failed with error: ' . $file['error']); + return new DataResponse([ + 'error' => 'file', + 'message' => $this->l->t('Uploading the file failed'), + ], Http::STATUS_BAD_REQUEST); + } + + try { + $data = $this->guestManager->importEmails($this->room, $file['tmp_name'], $testRun); + return new DataResponse($data); + } catch (GuestImportException $e) { + return new DataResponse($e->getData(), Http::STATUS_BAD_REQUEST); + } + + } + + /** + * Get capabilities for a room + * + * See "Capability handling in federated conversations" in https://github.com/nextcloud/spreed/issues/10680 + * to learn which capabilities should be considered from the local server or from the remote server. + * + * @return DataResponse + * + * 200: Get capabilities successfully + */ + #[FederationSupported] + #[PublicPage] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + public function getCapabilities(): DataResponse { + $headers = []; + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\RoomController::class); + $response = $proxy->getCapabilities($this->room, $this->participant); + + /** @var TalkCapabilities|array $data */ + $data = $response->getData(); + + /** + * IMPORTANT: + * When adding, changing or removing anything here, update + * @see ProxyRequest::overwrittenRemoteTalkHash() + * so clients correctly refresh their capabilities. + */ + if (isset($data['config']['chat']['read-privacy'])) { + $data['config']['chat']['read-privacy'] = Participant::PRIVACY_PRIVATE; + } + if (isset($data['config']['chat']['typing-privacy'])) { + $data['config']['chat']['typing-privacy'] = $this->talkConfig->getUserTypingPrivacy($this->userId); + } + if (isset($data['config']['call']['start-without-media'])) { + $data['config']['call']['start-without-media'] = $this->talkConfig->getCallsStartWithoutMedia($this->userId); + } + if (isset($data['config']['call']['blur-virtual-background'])) { + $data['config']['call']['blur-virtual-background'] = $this->talkConfig->getBlurVirtualBackground($this->userId); + } + if (isset($data['config']['conversations']['list-style'])) { + $data['config']['conversations']['list-style'] = $this->talkConfig->getConversationsListStyle($this->userId); + } + + if ($response->getHeaders()['X-Nextcloud-Talk-Hash']) { + $headers['X-Nextcloud-Talk-Proxy-Hash'] = $response->getHeaders()['X-Nextcloud-Talk-Hash']; + } + + /** @var TalkCapabilities|\stdClass $data */ + $data = !empty($data) ? $data : new \stdClass(); + } else { + $capabilities = $this->capabilities->getCapabilities(); + $data = $capabilities['spreed'] ?? new \stdClass(); + $headers['X-Nextcloud-Talk-Hash'] = sha1(json_encode($capabilities)); + } + + return new DataResponse($data, Http::STATUS_OK, $headers); + } + + /** + * Schedule a meeting for a conversation + * + * Required capability: `schedule-meeting` + * + * @param string $calendarUri Last part of the calendar URI as seen by the participant e.g. 'personal' or 'company_shared_by_other_user' + * @param int $start Unix timestamp when the meeting starts + * @param ?list $attendeeIds List of attendee ids to invite, if null everyone will be invited, if empty array only the actor will receive the event + * @param ?int $end Unix timestamp when the meeting ends, falls back to 60 minutes after start + * @param ?string $title Title or summary of the event, falling back to the conversation name if none is given + * @param ?string $description Description of the event, falling back to the conversation description if none is given + * @return DataResponse|DataResponse + * + * 200: Meeting scheduled + * 400: Meeting could not be created successfully + */ + #[NoAdminRequired] + #[RequireLoggedInModeratorParticipant] + public function scheduleMeeting(string $calendarUri, int $start, ?array $attendeeIds = null, ?int $end = null, ?string $title = null, ?string $description = null): DataResponse { + if ($this->room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + return new DataResponse(['error' => 'conversation'], Http::STATUS_BAD_REQUEST); + } + + $eventBuilder = $this->calendarManager->createEventBuilder(); + $calendars = $this->calendarManager->getCalendarsForPrincipal('principals/users/' . $this->userId, [$calendarUri]); + + if (empty($calendars)) { + return new DataResponse(['error' => 'calendar'], Http::STATUS_BAD_REQUEST); + } + + /** @var ICreateFromString $calendar */ + $calendar = array_pop($calendars); + + $user = $this->userManager->get($this->userId); + if (!$user instanceof IUser || $user->getEMailAddress() === null) { + return new DataResponse(['error' => 'email'], Http::STATUS_BAD_REQUEST); + } + + $timezoneService = Server::get(TimezoneService::class); + $userTimezone = $timezoneService->getUserTimezone($user->getUID()); + $timezone = new \DateTimeZone($userTimezone); + $startDate = $this->timeFactory->getDateTime('@' . $start)->setTimezone($timezone); + if ($start < $this->timeFactory->getTime()) { + return new DataResponse(['error' => 'start'], Http::STATUS_BAD_REQUEST); + } + + if ($end !== null) { + $endDate = $this->timeFactory->getDateTime('@' . $end)->setTimezone($timezone); + if ($start >= $end) { + return new DataResponse(['error' => 'end'], Http::STATUS_BAD_REQUEST); + } + } else { + $endDate = clone $startDate; + $endDate->add(new \DateInterval('PT1H')); + } + + $eventBuilder->setLocation( + $this->url->linkToRouteAbsolute( + 'spreed.Page.showCall', + ['token' => $this->room->getToken()] + ) + ); + $eventBuilder->setSummary($title ?: $this->room->getDisplayName($this->userId)); + $eventBuilder->setDescription($description ?: $this->room->getDescription()); + $eventBuilder->setOrganizer($user->getEMailAddress(), $user->getDisplayName() ?: $this->userId); + $eventBuilder->setStartDate($startDate); + $eventBuilder->setEndDate($endDate); + $eventBuilder->setStatus(CalendarEventStatus::CONFIRMED); + + if ($this->room->getType() === Room::TYPE_ONE_TO_ONE) { + $this->participantService->ensureOneToOneRoomIsFilled($this->room); + } + + $userAttendees = $this->participantService->getParticipantsByActorType($this->room, Attendee::ACTOR_USERS); + foreach ($userAttendees as $userAttendee) { + if ($attendeeIds !== null && !in_array($userAttendee->getAttendee()->getId(), $attendeeIds, true)) { + continue; + } + + $targetUser = $this->userManager->get($userAttendee->getAttendee()->getActorId()); + if (!$targetUser instanceof IUser) { + continue; + } + if ($targetUser->getEMailAddress() === null) { + continue; + } + // Do not add the organizer as an attendee + if ($targetUser->getEMailAddress() === $user->getEMailAddress()) { + continue; + } + + $eventBuilder->addAttendee( + $targetUser->getEMailAddress(), + $targetUser->getDisplayName(), + ); + } + + $emailGuests = $this->participantService->getParticipantsByActorType($this->room, Attendee::ACTOR_EMAILS); + foreach ($emailGuests as $emailGuest) { + if ($attendeeIds !== null && !in_array($emailGuest->getAttendee()->getId(), $attendeeIds, true)) { + continue; + } + + $eventBuilder->addAttendee( + $emailGuest->getAttendee()->getInvitedCloudId(), + $emailGuest->getAttendee()->getDisplayName(), + ); + } + + try { + $eventBuilder->createInCalendar($calendar); + } catch (\InvalidArgumentException|CalendarException $e) { + $this->logger->debug('Failed to get calendar to schedule a meeting', ['exception' => $e]); + return new DataResponse(['error' => 'calendar'], Http::STATUS_BAD_REQUEST); + } + + return new DataResponse(null, Http::STATUS_OK); + } +} diff --git a/lib/Controller/SettingsController.php b/lib/Controller/SettingsController.php new file mode 100644 index 0000000..55c9050 --- /dev/null +++ b/lib/Controller/SettingsController.php @@ -0,0 +1,89 @@ + + * + * 200: User setting updated successfully + * 400: Updating user setting is not possible + */ + #[NoAdminRequired] + public function setUserSetting(string $key, string|int|null $value): DataResponse { + if (!$this->preferenceListener->validatePreference($this->userId, $key, $value)) { + return new DataResponse(null, Http::STATUS_BAD_REQUEST); + } + + $this->config->setUserValue($this->userId, 'spreed', $key, $value); + + return new DataResponse(null); + } + + /** + * Update SIP bridge settings + * + * @param list $sipGroups New SIP groups + * @param string $dialInInfo New dial info + * @param string $sharedSecret New shared secret + * @return DataResponse + * + * 200: Successfully set new SIP settings + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['settings'])] + public function setSIPSettings( + array $sipGroups = [], + string $dialInInfo = '', + string $sharedSecret = ''): DataResponse { + $groups = []; + foreach ($sipGroups as $gid) { + $group = $this->groupManager->get($gid); + if ($group instanceof IGroup) { + $groups[] = $group->getGID(); + } + } + + $this->config->setAppValue('spreed', 'sip_bridge_groups', json_encode($groups)); + $this->config->setAppValue('spreed', 'sip_bridge_dialin_info', $dialInInfo); + $this->config->setAppValue('spreed', 'sip_bridge_shared_secret', $sharedSecret); + + return new DataResponse(null); + } +} diff --git a/lib/Controller/SignalingController.php b/lib/Controller/SignalingController.php new file mode 100644 index 0000000..f986e3c --- /dev/null +++ b/lib/Controller/SignalingController.php @@ -0,0 +1,953 @@ +request->getHeader('talk-recording-random'); + $checksum = $this->request->getHeader('talk-recording-checksum'); + $secret = $this->talkConfig->getRecordingSecret(); + try { + return $this->checksumVerificationService->validateRequest($random, $checksum, $secret, $data); + } catch (UnauthorizedException) { + return false; + } + } + + /** + * Get the signaling settings + * + * @param string $token Token of the room + * @return DataResponse|DataResponse + * + * 200: Signaling settings returned + * 401: Recording request invalid + * 404: Room not found + */ + #[PublicPage] + #[BruteForceProtection(action: 'talkRoomToken')] + #[BruteForceProtection(action: 'talkRecordingSecret')] + #[BruteForceProtection(action: 'talkFederationAccess')] + #[OpenAPI(tags: ['internal_signaling', 'external_signaling'])] + #[RequestHeader(name: 'talk-recording-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'talk-recording-checksum', description: 'Checksum over the request body to verify authenticity from the recording backend', indirect: true)] + public function getSettings(string $token = ''): DataResponse { + $isRecordingRequest = false; + + if (!empty($this->request->getHeader('talk-recording-random')) || !empty($this->request->getHeader('talk-recording-checksum'))) { + if (!$this->validateRecordingBackendRequest('')) { + $response = new DataResponse(null, Http::STATUS_UNAUTHORIZED); + $response->throttle(['action' => 'talkRecordingSecret']); + return $response; + } + + $isRecordingRequest = true; + } elseif ($this->serverSession->get('app_api') === true) { + // Live transcription ex-app + $isRecordingRequest = true; + } + + $isTalkFederation = $this->federationAuthenticator->isFederationRequest(); + + try { + $action = 'talkRoomToken'; + if ($token !== '' && $isRecordingRequest) { + $room = $this->manager->getRoomByToken($token); + } elseif ($token !== '' && $isTalkFederation) { + $action = 'talkFederationAccess'; + $room = $this->manager->getRoomByRemoteAccess( + $token, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId(), + $this->federationAuthenticator->getAccessToken(), + ); + $participant = $this->participantService->getParticipantByActor( + $room, + Attendee::ACTOR_FEDERATED_USERS, + $this->federationAuthenticator->getCloudId() + ); + $this->federationAuthenticator->authenticated($room, $participant); + } elseif ($token !== '') { + $room = $this->manager->getRoomForUserByToken($token, $this->userId); + } elseif ($this->userId !== null || $isRecordingRequest) { + // Mobile clients and admin setup check use the neutral point + // Same for live-transcription + $room = null; + } else { + throw new RoomNotFoundException(); + } + } catch (RoomNotFoundException|ParticipantNotFoundException) { + $response = new DataResponse(null, Http::STATUS_NOT_FOUND); + $response->throttle(['token' => $token, 'action' => $action]); + return $response; + } + + $stun = []; + $stunUrls = []; + $stunServers = $this->talkConfig->getStunServers(); + foreach ($stunServers as $stunServer) { + if (empty($stunServer)) { + continue; + } + + $stunUrls[] = 'stun:' . $stunServer; + } + if (!empty($stunUrls)) { + $stun[] = [ + 'urls' => $stunUrls + ]; + } + + $turn = []; + $turnSettings = $this->talkConfig->getTurnSettings(); + foreach ($turnSettings as $turnServer) { + if (empty($turnServer['schemes']) || empty($turnServer['server']) || empty($turnServer['protocols'])) { + continue; + } + + $turnUrls = []; + $schemes = explode(',', $turnServer['schemes']); + $protocols = explode(',', $turnServer['protocols']); + foreach ($schemes as $scheme) { + foreach ($protocols as $proto) { + $turnUrls[] = $scheme . ':' . $turnServer['server'] . '?transport=' . $proto; + } + } + + $turn[] = [ + 'urls' => $turnUrls, + 'username' => (string)$turnServer['username'], + 'credential' => (string)$turnServer['password'], + ]; + } + + $signalingMode = $this->talkConfig->getSignalingMode(); + $signaling = $this->signalingManager->getSignalingServerLinkForConversation($room); + + $data = [ + 'signalingMode' => $signalingMode, + 'userId' => $this->userId, + 'hideWarning' => $signaling !== '' || $this->talkConfig->getHideSignalingWarning(), + 'server' => $signaling, + 'federation' => $this->getFederationSettings($room), + 'stunservers' => $stun, + 'turnservers' => $turn, + 'sipDialinInfo' => $this->talkConfig->isSIPConfigured() ? $this->talkConfig->getDialInInfo() : '', + ]; + + if ($signalingMode !== Config::SIGNALING_INTERNAL) { + $helloAuthParams20UserId = $isTalkFederation ? null : $this->userId; + $helloAuthParams20CloudId = $isTalkFederation ? $this->federationAuthenticator->getCloudId() : null; + $helloAuthParams = [ + '1.0' => [ + 'userid' => $this->userId, + 'ticket' => $this->talkConfig->getSignalingTicket(Config::SIGNALING_TICKET_V1, $this->userId), + ], + '2.0' => [ + 'token' => $this->talkConfig->getSignalingTicket(Config::SIGNALING_TICKET_V2, $helloAuthParams20UserId, $helloAuthParams20CloudId), + ], + ]; + + $data['ticket'] = $helloAuthParams['1.0']['ticket']; + $data['helloAuthParams'] = $helloAuthParams; + } + + return new DataResponse($data); + } + + /** + * @psalm-return ?TalkSignalingFederationSettings + */ + private function getFederationSettings(?Room $room): ?array { + if ($room === null || !$room->isFederatedConversation()) { + return null; + } + + try { + $participant = $this->participantService->getParticipant($room, $this->userId); + } catch (ParticipantNotFoundException $e) { + return null; + } + + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\SignalingController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\SignalingController::class); + $response = $proxy->getSettings($room, $participant); + + if ($response->getStatus() === Http::STATUS_NOT_FOUND) { + return null; + } + + /** @var TalkSignalingSettings $data */ + $data = $response->getData(); + + return [ + 'server' => $data['server'], + 'nextcloudServer' => $room->getRemoteServer(), + 'helloAuthParams' => [ + 'token' => $data['helloAuthParams']['2.0']['token'], + ], + 'roomId' => $room->getRemoteToken(), + ]; + } + + /** + * Get the welcome message from a signaling server + * + * Only available for logged-in users because guests can not use the apps + * right now. + * + * @param int $serverId ID of the signaling server + * @psalm-param non-negative-int $serverId + * @return DataResponse}, array{}>|DataResponse|DataResponse + * + * 200: Welcome message returned + * 404: Signaling server not found + */ + #[OpenAPI(scope: OpenAPI::SCOPE_ADMINISTRATION, tags: ['settings'])] + public function getWelcomeMessage(int $serverId): DataResponse { + try { + $testResult = $this->signalingManager->checkServerCompatibility($serverId); + } catch (\OutOfBoundsException) { + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + return new DataResponse($testResult['data'], $testResult['status']); + } + + /** + * Send signaling messages + * + * @param string $token Token of the room + * @param string $messages JSON encoded messages + * @return DataResponse|DataResponse + * + * 200: Signaling message sent successfully + * 400: Sending signaling message is not possible + */ + #[PublicPage] + #[OpenAPI(tags: ['internal_signaling'])] + public function sendMessages(string $token, string $messages): DataResponse { + if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) { + return new DataResponse('Internal signaling disabled.', Http::STATUS_BAD_REQUEST); + } + + $response = []; + $messages = json_decode($messages, true); + foreach ($messages as $message) { + $ev = $message['ev']; + switch ($ev) { + case 'message': + $fn = $message['fn']; + if (!is_string($fn)) { + break; + } + $decodedMessage = json_decode($fn, true); + if ($message['sessionId'] !== $this->session->getSessionForRoom($token)) { + break; + } + $decodedMessage['from'] = $message['sessionId']; + + $room = $this->manager->getRoomForSession($this->userId, $message['sessionId']); + $participant = $this->participantService->getParticipantBySession($room, $message['sessionId']); + try { + $this->participantService->getParticipantBySession($room, $decodedMessage['to']); + } catch (ParticipantNotFoundException) { + break; + } + + + if ($decodedMessage['type'] === 'control') { + if (!$participant->hasModeratorPermissions(false)) { + break; + } + } elseif ($decodedMessage['type'] === 'offer' || $decodedMessage['type'] === 'answer') { + if (!($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_AUDIO) && $decodedMessage['roomType'] === 'video' + && $this->isTryingToPublishMedia($decodedMessage['payload']['sdp'], 'audio')) { + break; + } + if (!($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_VIDEO) && $decodedMessage['roomType'] === 'video' + && $this->isTryingToPublishMedia($decodedMessage['payload']['sdp'], 'video')) { + break; + } + if (!($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_SCREEN) && $decodedMessage['roomType'] === 'screen' + && ($this->isTryingToPublishMedia($decodedMessage['payload']['sdp'], 'audio') + || $this->isTryingToPublishMedia($decodedMessage['payload']['sdp'], 'video'))) { + break; + } + } + + $this->messages->addMessage($message['sessionId'], $decodedMessage['to'], json_encode($decodedMessage)); + + break; + } + } + + return new DataResponse(null); + } + + /** + * Returns whether the SDP is trying to publish the given media based on the + * media direction. + * + * The SDP is trying to publish if the related media description contains a + * media direction of either "sendrecv" or "sendonly". If no media direction + * is provided in a media description the media direction in the session + * description is used instead. If that is not provided either then + * "sendrecv" is assumed. + * + * See https://www.rfc-editor.org/rfc/rfc8866.html#name-media-direction-attributes + * + * @param string $sdp the SDP to check + * @param string $media the media to check, either "audio" or "video" + * @return bool true if it is trying to publish, false otherwise + */ + private function isTryingToPublishMedia(string $sdp, string $media): bool { + $lines = preg_split('/\r\n|\n|\r/', $sdp); + + $sessionMediaDirectionIndex = -1; + $mediaDirectionIndex = -1; + $mediaDescriptionIndex = -1; + $matchingMediaDescriptionIndex = -1; + + for ($i = 0; $i < count($lines); $i++) { + if (strpos($lines[$i], 'a=sendrecv') === 0 + || strpos($lines[$i], 'a=sendonly') === 0 + || strpos($lines[$i], 'a=recvonly') === 0 + || strpos($lines[$i], 'a=inactive') === 0) { + $mediaDirectionIndex = $i; + + if ($mediaDescriptionIndex < 0) { + $sessionMediaDirectionIndex = $mediaDirectionIndex; + } + + if ($matchingMediaDescriptionIndex >= 0 + && $matchingMediaDescriptionIndex >= $mediaDescriptionIndex + && $mediaDirectionIndex > $matchingMediaDescriptionIndex + && (strpos($lines[$mediaDirectionIndex], 'a=sendrecv') === 0 + || strpos($lines[$mediaDirectionIndex], 'a=sendonly') === 0)) { + return true; + } + } elseif (strpos($lines[$i], 'm=') === 0) { + // No media direction in previous matching media description, + // fallback to media direction in the session description or, if + // not set, default to "sendrecv". + if ($matchingMediaDescriptionIndex >= 0 + && $matchingMediaDescriptionIndex >= $mediaDescriptionIndex + && $mediaDirectionIndex < $matchingMediaDescriptionIndex + && ($sessionMediaDirectionIndex < 0 + || strpos($lines[$sessionMediaDirectionIndex], 'a=sendrecv') === 0 + || strpos($lines[$sessionMediaDirectionIndex], 'a=sendonly') === 0)) { + return true; + } + + $mediaDescriptionIndex = $i; + + if (strpos($lines[$i], 'm=' . $media) === 0) { + $matchingMediaDescriptionIndex = $i; + } + } + } + + // No media direction in last matching media description, fallback to + // media direction in the session description or, if not set, default to + // "sendrecv". + if ($matchingMediaDescriptionIndex >= 0 + && $matchingMediaDescriptionIndex >= $mediaDescriptionIndex + && $mediaDirectionIndex < $matchingMediaDescriptionIndex + && ($sessionMediaDirectionIndex < 0 + || strpos($lines[$sessionMediaDirectionIndex], 'a=sendrecv') === 0 + || strpos($lines[$sessionMediaDirectionIndex], 'a=sendonly') === 0)) { + return true; + } + + return false; + } + + /** + * Get signaling messages + * + * @param string $token Token of the room + * @return DataResponse|string}>, array{}>|DataResponse + * + * 200: Signaling messages returned + * 400: Getting signaling messages is not possible + * 404: Session, room or participant not found + * 409: Session killed + */ + #[PublicPage] + #[OpenAPI(tags: ['internal_signaling'])] + public function pullMessages(string $token): DataResponse { + if ($this->talkConfig->getSignalingMode() !== Config::SIGNALING_INTERNAL) { + return new DataResponse('Internal signaling disabled.', Http::STATUS_BAD_REQUEST); + } + + $data = []; + $seconds = self::PULL_MESSAGES_TIMEOUT; + + try { + $sessionId = $this->session->getSessionForRoom($token); + if ($sessionId === null) { + // User is not active in this room + return new DataResponse([['type' => 'usersInRoom', 'data' => []]], Http::STATUS_NOT_FOUND); + } + + $room = $this->manager->getRoomForSession($this->userId, $sessionId); + $participant = $this->participantService->getParticipantBySession($room, $sessionId); // FIXME this causes another query + + $pingTimestamp = $this->timeFactory->getTime(); + if ($participant->getSession() instanceof Session) { + $this->sessionService->updateLastPing($participant->getSession(), $pingTimestamp); + } + } catch (RoomNotFoundException) { + $this->banIpIfGuestGotBanned($token); + return new DataResponse([['type' => 'usersInRoom', 'data' => []]], Http::STATUS_NOT_FOUND); + } + + while ($seconds > 0) { + // Query all messages and send them to the user + $data = $this->messages->getAndDeleteMessages($sessionId); + $messageCount = count($data); + $data = array_filter($data, function ($message) { + return $message['data'] !== 'refresh-participant-list'; + }); + + // Make sure the array is a json array not a json object, + // because the index list has a gap + $data = array_values($data); + + if ($messageCount !== count($data)) { + // Participant list changed, bail out and deliver the info to the user + break; + } + + $this->dbConnection->close(); + if (empty($data)) { + $seconds--; + } else { + break; + } + sleep(1); + + // Refresh the session and retry + $sessionId = $this->session->getSessionForRoom($token); + if ($sessionId === null) { + // User is not active in this room + return new DataResponse([['type' => 'usersInRoom', 'data' => []]], Http::STATUS_NOT_FOUND); + } + } + + try { + // Add an update of the room participants at the end of the waiting + $room = $this->manager->getRoomForSession($this->userId, $sessionId); + $data[] = ['type' => 'usersInRoom', 'data' => $this->getUsersInRoom($room, $pingTimestamp)]; + } catch (RoomNotFoundException) { + $this->banIpIfGuestGotBanned($token); + $data[] = ['type' => 'usersInRoom', 'data' => []]; + + // Was the session killed or the complete conversation? + try { + $room = $this->manager->getRoomForUserByToken($token, $this->userId); + if ($this->userId) { + // For logged in users we check if they are still part of the public conversation, + // if not they were removed instead of having a conflict. + $this->participantService->getParticipant($room, $this->userId, false); + } + + // Session was killed, make the UI redirect to an error + return new DataResponse($data, Http::STATUS_CONFLICT); + } catch (ParticipantNotFoundException $e) { + // User removed from conversation, bye! + return new DataResponse($data, Http::STATUS_NOT_FOUND); + } catch (RoomNotFoundException $e) { + // Complete conversation was killed, bye! + return new DataResponse($data, Http::STATUS_NOT_FOUND); + } + } + + return new DataResponse($data); + } + + /** + * @param Room $room + * @param int $pingTimestamp + * @return list + */ + protected function getUsersInRoom(Room $room, int $pingTimestamp): array { + $usersInRoom = []; + // Get participants active in the last 40 seconds (an extra time is used + // to include other participants pinging almost at the same time as the + // current user), or since the last signaling ping of the current user + // if it was done more than 40 seconds ago. + $timestamp = min($this->timeFactory->getTime() - (self::PULL_MESSAGES_TIMEOUT + 10), $pingTimestamp); + // "- 1" is needed because only the participants whose last ping is + // greater than the given timestamp are returned. + $participants = $this->participantService->getParticipantsForAllSessions($room, $timestamp - 1); + foreach ($participants as $participant) { + $session = $participant->getSession(); + if (!$session instanceof Session) { + // This is just to make Psalm happy, since we select by session it's always with one. + continue; + } + + $userId = ''; + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $userId = $participant->getAttendee()->getActorId(); + } + + $usersInRoom[] = [ + 'userId' => $userId, + 'roomId' => $room->getId(), + 'lastPing' => $session->getLastPing(), + 'sessionId' => $session->getSessionId(), + 'inCall' => $session->getInCall(), + 'participantPermissions' => $participant->getPermissions(), + 'actorType' => $participant->getAttendee()->getActorType(), + 'actorId' => $participant->getAttendee()->getActorId(), + ]; + } + + return $usersInRoom; + } + + protected function banIpIfGuestGotBanned(string $token): void { + if ($this->userId !== null) { + return; + } + + try { + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException) { + return; + } + + try { + $this->banService->throwIfActorIsBanned($room, null); + } catch (ForbiddenException) { + } + } + + /** + * Check if the current request is coming from an allowed backend. + * + * The backends are sending the custom header "Talk-Signaling-Random" + * containing at least 32 bytes random data, and the header + * "Talk-Signaling-Checksum", which is the SHA256-HMAC of the random data + * and the body of the request, calculated with the shared secret from the + * configuration. + * + * @param string $data + * @return bool + */ + private function validateBackendRequest(string $data): bool { + $random = $this->request->getHeader('spreed-signaling-random'); + $checksum = $this->request->getHeader('spreed-signaling-checksum'); + $secret = $this->talkConfig->getSignalingSecret(); + try { + return $this->checksumVerificationService->validateRequest($random, $checksum, $secret, $data); + } catch (UnauthorizedException) { + return false; + } + } + + /** + * Return the body of the backend request. This can be overridden in + * tests. + * + * @return string + */ + protected function getInputStream(): string { + return (string)file_get_contents('php://input'); + } + + /** + * Backend API to query information required for standalone signaling + * servers + * + * See sections "Backend validation" in + * https://nextcloud-spreed-signaling.readthedocs.io/en/latest/standalone-signaling-api-v1/#backend-requests + * + * @return DataResponse}, room?: array{version: string, roomid?: string, properties?: array, permissions?: list, session?: array}}, array{}> + * + * 200: Always, sorry about that + */ + #[OpenAPI(scope: 'backend-signaling')] + #[PublicPage] + #[BruteForceProtection(action: 'talkSignalingSecret')] + #[RequestHeader(name: 'spreed-signaling-random', description: 'Random seed used to generate the request checksum', indirect: true)] + #[RequestHeader(name: 'spreed-signaling-checksum', description: 'Checksum over the request body to verify authenticity from the signaling backend', indirect: true)] + public function backend(): DataResponse { + $json = $this->getInputStream(); + if (!$this->validateBackendRequest($json)) { + $response = new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'invalid_request', + 'message' => 'The request could not be authenticated.', + ], + ]); + $response->throttle(['action' => 'talkSignalingSecret']); + return $response; + } + + $message = json_decode($json, true); + switch ($message['type'] ?? '') { + case 'auth': + // Query authentication information about a user. + return $this->backendAuth($message['auth']); + case 'room': + // Query information about a room. + return $this->backendRoom($message['room']); + case 'ping': + // Ping sessions connected to a room. + return $this->backendPing($message['ping']); + default: + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'unknown_type', + 'message' => 'The given type ' . json_encode($message) . ' is not supported.', + ], + ]); + } + } + + /** + * @return DataResponse}}, array{}> + */ + private function backendAuth(array $auth): DataResponse { + $params = $auth['params']; + $userId = $params['userid']; + if (!$this->talkConfig->validateSignalingTicket($userId, $params['ticket'])) { + $this->logger->debug('Signaling ticket for {user} was not valid', [ + 'user' => !empty($userId) ? $userId : '(guests)', + 'app' => 'spreed-hpb', + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'invalid_ticket', + 'message' => 'The given ticket is not valid for this user.', + ], + ]); + } + + if (!empty($userId)) { + $user = $this->userManager->get($userId); + if (!$user instanceof IUser) { + $this->logger->debug('Tried to validate signaling ticket for {user}, but user manager returned no user', [ + 'user' => $userId, + 'app' => 'spreed-hpb', + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_user', + 'message' => 'The given user does not exist.', + ], + ]); + } + } + + $response = [ + 'type' => 'auth', + 'auth' => [ + 'version' => '1.0', + ], + ]; + if (!empty($userId)) { + $response['auth']['userid'] = $user->getUID(); + $response['auth']['user'] = $this->talkConfig->getSignalingUserData($user); + } + $this->logger->debug('Validated signaling ticket for {user}', [ + 'user' => !empty($userId) ? $userId : '(guests)', + 'app' => 'spreed-hpb', + ]); + return new DataResponse($response); + } + + /** + * @return DataResponse, permissions: list, session?: array}}, array{}> + */ + private function backendRoom(array $roomRequest): DataResponse { + $token = $roomRequest['roomid']; // It's actually the room token + $userId = $roomRequest['userid']; + $sessionId = $roomRequest['sessionid']; + $action = !empty($roomRequest['action']) ? $roomRequest['action'] : 'join'; + $actorId = $roomRequest['actorid'] ?? null; + $actorType = $roomRequest['actortype'] ?? null; + $inCall = $roomRequest['incall'] ?? null; + + $participant = null; + if ($actorId !== null && $actorType !== null) { + try { + $room = $this->manager->getRoomByActor($token, $actorType, $actorId); + } catch (RoomNotFoundException $e) { + $this->logger->debug('Failed to get room {token} by actor {actorType}/{actorId}', [ + 'token' => $token, + 'actorType' => $actorType ?? 'null', + 'actorId' => $actorId ?? 'null', + 'app' => 'spreed-hpb', + 'hpbRequest' => json_encode($roomRequest), + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'The user is not invited to this room.', + ], + ]); + } + + if ($sessionId) { + try { + $participant = $this->participantService->getParticipantBySession($room, $sessionId); + } catch (ParticipantNotFoundException $e) { + if ($action === 'join') { + // If the user joins the session might not be known to the server yet. + // In this case we load by actor information and use the session id as new session. + try { + $participant = $this->participantService->getParticipantByActor($room, $actorType, $actorId); + } catch (ParticipantNotFoundException $e) { + } + } + } + } else { + try { + $participant = $this->participantService->getParticipantByActor($room, $actorType, $actorId); + } catch (ParticipantNotFoundException $e) { + } + } + } else { + try { + // FIXME Don't preload with the user as that misses the session, kinda meh. + $room = $this->manager->getRoomByToken($token); + } catch (RoomNotFoundException $e) { + $this->logger->debug('Failed to get room by token {token}', [ + 'token' => $token, + 'app' => 'spreed-hpb', + 'hpbRequest' => json_encode($roomRequest), + ]); + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'The user is not invited to this room.', + ], + ]); + } + + if ($sessionId) { + try { + $participant = $this->participantService->getParticipantBySession($room, $sessionId); + } catch (ParticipantNotFoundException $e) { + } + } elseif (!empty($userId)) { + // User trying to join room. + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + } + } + } + + if (!$participant instanceof Participant) { + $this->logger->debug('Failed to get room {token} with participant', [ + 'token' => $token, + 'app' => 'spreed-hpb', + 'hpbRequest' => json_encode($roomRequest), + ]); + // Return generic error to avoid leaking which rooms exist. + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'no_such_room', + 'message' => 'The user is not invited to this room.', + ], + ]); + } + + if ($action === 'join') { + if ($sessionId && !$participant->getSession() instanceof Session) { + try { + $session = $this->sessionService->createSessionForAttendee($participant->getAttendee(), $sessionId); + } catch (Exception $e) { + return new DataResponse([ + 'type' => 'error', + 'error' => [ + 'code' => 'duplicate_session', + 'message' => 'The given session is already in use.', + ], + ]); + } + $participant->setSession($session); + } + + if ($participant->getSession() instanceof Session) { + if ($inCall !== null) { + $lastJoinedCall = $this->timeFactory->getDateTime(); + $this->participantService->changeInCall($room, $participant, $inCall, lastJoinedCall: $lastJoinedCall->getTimestamp()); + $this->roomService->setActiveSince($room, $participant, $lastJoinedCall, callFlag: $inCall, silent: false); + } + $this->sessionService->updateLastPing($participant->getSession(), $this->timeFactory->getTime()); + } + } elseif ($action === 'leave') { + $this->participantService->leaveRoomAsSession($room, $participant); + } + + $this->logger->debug('Room request to "{action}" room {token} by actor {actorType}/{actorId}', [ + 'token' => $token, + 'action' => $action ?? 'null', + 'actorType' => $participant->getAttendee()->getActorType(), + 'actorId' => $participant->getAttendee()->getActorId(), + 'app' => 'spreed-hpb', + 'hpbRequest' => json_encode($roomRequest), + ]); + + $permissions = []; + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_AUDIO) { + $permissions[] = 'publish-audio'; + } + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_VIDEO) { + $permissions[] = 'publish-video'; + } + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_SCREEN) { + $permissions[] = 'publish-screen'; + } + if ($participant->hasModeratorPermissions(false)) { + $permissions[] = 'control'; + } + + $event = new BeforeSignalingResponseSentEvent($room, $participant, $action); + $this->dispatcher->dispatchTyped($event); + + $response = [ + 'type' => 'room', + 'room' => [ + 'version' => '1.0', + 'roomid' => $room->getToken(), + 'properties' => $room->getPropertiesForSignaling((string)$userId), + 'permissions' => $permissions, + ], + ]; + if (!empty($event->getSession())) { + $response['room']['session'] = $event->getSession(); + } + return new DataResponse($response); + } + + /** + * @return DataResponse + */ + private function backendPing(array $request): DataResponse { + $pingSessionIds = []; + $now = $this->timeFactory->getTime(); + foreach ($request['entries'] as $entry) { + if ($entry['sessionid'] !== '0') { + $pingSessionIds[] = $entry['sessionid']; + } + } + + // Ping all active sessions with one query + $this->sessionService->updateMultipleLastPings($pingSessionIds, $now); + + $response = [ + 'type' => 'room', + 'room' => [ + 'version' => '1.0', + ], + ]; + $this->logger->debug('Pinged {numSessions} sessions {token}', [ + 'numSessions' => count($pingSessionIds), + 'token' => !empty($request['roomid']) ? ('in room ' . $request['roomid']) : '', + 'app' => 'spreed-hpb', + ]); + return new DataResponse($response); + } +} diff --git a/lib/Controller/TempAvatarController.php b/lib/Controller/TempAvatarController.php new file mode 100644 index 0000000..06f7f73 --- /dev/null +++ b/lib/Controller/TempAvatarController.php @@ -0,0 +1,134 @@ +|DataResponse + * + * 200: Avatar uploaded successfully + * 400: Uploading avatar is not possible + */ + #[NoAdminRequired] + #[OpenAPI(tags: ['user_avatar'])] + public function postAvatar(): DataResponse { + $files = $this->request->getUploadedFile('files'); + + if (is_null($files)) { + return new DataResponse( + ['message' => $this->l->t('No image file provided')], + Http::STATUS_BAD_REQUEST + ); + } + + if ( + $files['error'][0] === 0 + && is_uploaded_file($files['tmp_name'][0]) + && !Filesystem::isFileBlacklisted($files['tmp_name'][0]) + ) { + if ($files['size'][0] > 20 * 1024 * 1024) { + return new DataResponse( + ['message' => $this->l->t('File is too big')], + Http::STATUS_BAD_REQUEST + ); + } + $content = file_get_contents($files['tmp_name'][0]); + // noopengrep: php.lang.security.unlink-use.unlink-use + unlink($files['tmp_name'][0]); + } else { + return new DataResponse( + ['message' => $this->l->t('Invalid file provided')], + Http::STATUS_BAD_REQUEST + ); + } + + try { + $image = new \OCP\Image(); + $image->loadFromData($content); + $image->readExif($content); + $image->fixOrientation(); + + if (!$image->valid()) { + return new DataResponse( + ['data' => ['message' => $this->l->t('Invalid image')]], + Http::STATUS_BAD_REQUEST + ); + } + + $mimeType = $image->mimeType(); + if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') { + return new DataResponse( + ['data' => ['message' => $this->l->t('Unknown filetype')]], + Http::STATUS_BAD_REQUEST + ); + } + + $avatar = $this->avatarManager->getAvatar($this->userId); + $avatar->set($image); + return new DataResponse(null); + } catch (NotSquareException $e) { + return new DataResponse(['message' => $e->getMessage()], Http::STATUS_BAD_REQUEST); + } catch (\Exception $e) { + $this->logger->error('Failed to post avatar', [ + 'exception' => $e, + ]); + + return new DataResponse(['message' => $this->l->t('An error occurred. Please contact your administrator.')], Http::STATUS_BAD_REQUEST); + } + } + + /** + * Delete your avatar as a user + * + * @return DataResponse|DataResponse + * + * 200: Avatar deleted successfully + * 400: Deleting avatar is not possible + */ + #[NoAdminRequired] + #[OpenAPI(tags: ['user_avatar'])] + public function deleteAvatar(): DataResponse { + try { + $avatar = $this->avatarManager->getAvatar($this->userId); + $avatar->remove(); + return new DataResponse(null); + } catch (\Exception $e) { + $this->logger->error('Failed to delete avatar', [ + 'exception' => $e, + ]); + return new DataResponse(['error' => 'avatar'], Http::STATUS_BAD_REQUEST); + } + } +} diff --git a/lib/Controller/ThreadController.php b/lib/Controller/ThreadController.php new file mode 100644 index 0000000..4de1ca0 --- /dev/null +++ b/lib/Controller/ThreadController.php @@ -0,0 +1,397 @@ + $limit Number of threads to return + * @return DataResponse, array{}> + * + * 200: List of threads returned + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/threads/recent', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + ])] + public function getRecentActiveThreads(int $limit = 50): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController::class); + return $proxy->getRecentActiveThreads($this->room, $this->participant, $limit); + } + + $threads = $this->threadService->getRecentByRoomId($this->room, $limit); + $list = $this->prepareListOfThreads($threads); + return new DataResponse($list); + } + + + /** + * Get subscribed threads for a user + * + * Required capability: `threads` + * + * @param int<1, 100> $limit Number of threads to return + * @param non-negative-int $offset Offset in the threads list + * @return DataResponse, array{}> + * + * 200: List of threads returned + */ + #[NoAdminRequired] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/subscribed-threads', requirements: [ + 'apiVersion' => '(v1)', + ])] + public function getSubscribedThreads(int $limit = 100, int $offset = 0): DataResponse { + $results = $this->threadService->getRecentByActor(Attendee::ACTOR_USERS, $this->userId, $limit, $offset); + + $roomIds = array_keys($results); + $rooms = $this->manager->getRoomsByIdForUser($roomIds, $this->userId); + + $threads = $threadAttendees = []; + foreach ($results as $roomId => $data) { + if (!isset($rooms[$roomId])) { + continue; + } + + foreach ($data as $threadData) { + $threads[] = $threadData['thread']; + $threadAttendees[$threadData['thread']->getId()] = $threadData['attendee']; + } + } + + // Sort by last activity again + usort($threads, static function (Thread $a, Thread $b): int { + if ($b->getLastActivity() === $a->getLastActivity()) { + return $b->getId() <=> $a->getId(); + } + return $b->getLastActivity() <=> $a->getLastActivity(); + }); + + return new DataResponse($this->prepareListOfThreads($threads, $threadAttendees, $rooms)); + } + + /** + * Get thread info of a single thread + * + * Required capability: `threads` + * + * @param int $threadId The thread ID to get the info for + * @psalm-param non-negative-int $threadId + * @return DataResponse|DataResponse + * + * 200: Thread info returned + * 404: Thread not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'GET', url: '/api/{apiVersion}/chat/{token}/threads/{threadId}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'threadId' => '[0-9]+', + ])] + public function getThread(int $threadId): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController::class); + return $proxy->getThread($this->room, $this->participant, $threadId); + } + + try { + $thread = $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'thread'], Http::STATUS_NOT_FOUND); + } + + $list = $this->prepareListOfThreads([$thread]); + /** @var TalkThreadInfo $threadInfo */ + $threadInfo = array_shift($list); + return new DataResponse($threadInfo); + } + + /** + * Rename a thread + * + * Required capability: `threads` + * + * @param int $threadId The thread ID to get the info for + * @psalm-param non-negative-int $threadId + * @param string $threadTitle New thread title, must not be empty + * @return DataResponse|DataResponse|DataResponse|DataResponse + * + * 200: Thread renamed successfully + * 400: When the provided title is empty + * 403: Not allowed, either not the original author or not a moderator + * 404: Thread not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'PUT', url: '/api/{apiVersion}/chat/{token}/threads/{threadId}', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'threadId' => '[0-9]+', + ])] + public function renameThread(int $threadId, string $threadTitle): DataResponse { + $threadTitle = trim($threadTitle); + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController::class); + return $proxy->renameThread($this->room, $this->participant, $threadId, $threadTitle); + } + + try { + $thread = $this->threadService->findByThreadId($this->room->getId(), $threadId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'thread'], Http::STATUS_NOT_FOUND); + } + + $attendee = $this->participant->getAttendee(); + $isOwnMessage = false; + try { + $comment = $this->chatManager->getComment($this->room, (string)$threadId); + $isOwnMessage = $comment->getActorType() === $attendee->getActorType() + && $comment->getActorId() === $attendee->getActorId(); + } catch (NotFoundException) { + // Root message expired, only moderators can edit + } + + if (!$isOwnMessage + && !$this->participant->hasModeratorPermissions(false)) { + // Actor is not a moderator or not the owner of the message + return new DataResponse(['error' => 'permission'], Http::STATUS_FORBIDDEN); + } + + try { + $this->threadService->renameThread($thread, $threadTitle); + } catch (\InvalidArgumentException) { + return new DataResponse(['error' => 'title'], Http::STATUS_BAD_REQUEST); + } + + try { + $comment = $this->chatManager->getComment($this->room, (string)$threadId); + } catch (NotFoundException) { + // Root message expired, continuing without replying + $comment = null; + } + + $this->chatManager->addSystemMessage( + $this->room, + $this->participant, + $this->participant->getAttendee()->getActorType(), + $this->participant->getAttendee()->getActorId(), + json_encode(['message' => 'thread_renamed', 'parameters' => ['thread' => $threadId, 'title' => $thread->getName()]]), + $this->timeFactory->getDateTime(), + false, + null, + $comment, + true, + true, + $threadId, + ); + + $list = $this->prepareListOfThreads([$thread]); + /** @var TalkThreadInfo $threadInfo */ + $threadInfo = array_shift($list); + return new DataResponse($threadInfo); + } + + /** + * @param list $threads + * @param ?list $attendees + * @return list + */ + protected function prepareListOfThreads(array $threads, ?array $attendees = null, ?array $rooms = null): array { + $threadIds = array_map(static fn (Thread $thread) => $thread->getId(), $threads); + if ($attendees === null) { + $attendees = $this->threadService->findAttendeeByThreadIds($this->participant->getAttendee(), $threadIds); + } + if ($rooms === null) { + $rooms = [$this->room->getId() => $this->room]; + $participants = [$this->room->getId() => $this->participant]; + } + + $messageIds = []; + foreach ($threads as $thread) { + $messageIds[] = $thread->getId(); + $messageIds[] = $thread->getLastMessageId(); + } + + $comments = $this->chatManager->getMessagesById($messageIds); + $this->sharePreloader->preloadShares($comments); + + $list = []; + foreach ($threads as $thread) { + if (!isset($rooms[$thread->getRoomId()])) { + continue; + } + + $room = $rooms[$thread->getRoomId()]; + // The getParticipant here should read only from the cache, so it's no problem inside the loop + $participant = $participants[$thread->getRoomId()] ?? $this->participantService->getParticipant($room, $this->userId); + + $firstMessage = $lastMessage = null; + $attendee = $attendees[$thread->getId()] ?? null; + if ($attendee === null) { + $attendee = ThreadAttendee::createFromParticipant($thread->getId(), $participant); + } + + $first = $comments[$thread->getId()] ?? null; + if ($first !== null) { + $firstMessage = $this->messageParser->createMessage($room, $participant, $first, $this->l); + $this->messageParser->parseMessage($firstMessage); + } + + $last = $comments[$thread->getLastMessageId()] ?? null; + if ($last !== null) { + $lastMessage = $this->messageParser->createMessage($room, $participant, $last, $this->l); + $this->messageParser->parseMessage($lastMessage); + } + + $list[] = [ + 'thread' => $thread->toArray($room), + 'attendee' => $attendee->jsonSerialize(), + 'first' => $firstMessage?->toArray($this->getResponseFormat(), $thread), + 'last' => $lastMessage?->toArray($this->getResponseFormat(), $thread), + ]; + } + + return $list; + } + + /** + * Set notification level for a specific thread + * + * Required capability: `threads` + * + * @param int $messageId The message to create a thread for (Doesn't have to be the root) + * @psalm-param non-negative-int $messageId + * @param int $level New level + * @psalm-param Participant::NOTIFY_* $level + * @return DataResponse|DataResponse + * + * 200: Successfully set notification level for thread + * 400: Notification level was invalid + * 404: Message or top most message not found + */ + #[FederationSupported] + #[PublicPage] + #[RequireModeratorOrNoLobby] + #[RequireParticipant] + #[RequirePermission(permission: RequirePermission::CHAT)] + #[RequireReadWriteConversation] + #[RequestHeader(name: 'x-nextcloud-federation', description: 'Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request', indirect: true)] + #[ApiRoute(verb: 'POST', url: '/api/{apiVersion}/chat/{token}/threads/{messageId}/notify', requirements: [ + 'apiVersion' => '(v1)', + 'token' => '[a-z0-9]{4,30}', + 'messageId' => '[0-9]+', + ])] + public function setNotificationLevel(int $messageId, int $level): DataResponse { + if ($this->room->isFederatedConversation()) { + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ThreadController::class); + $response = $proxy->setNotificationLevel($this->room, $this->participant, $messageId, $level); + + if ($response->getStatus() === Http::STATUS_OK) { + // Also save locally, for later handling when receiving a federated message + $this->threadService->setNotificationLevel($this->participant->getAttendee(), $messageId, $level); + } + + return $response; + } + + if (!\in_array($level, [ + Participant::NOTIFY_DEFAULT, + Participant::NOTIFY_ALWAYS, + Participant::NOTIFY_MENTION, + Participant::NOTIFY_NEVER, + ], true)) { + return new DataResponse(['error' => 'level'], Http::STATUS_BAD_REQUEST); + } + + + try { + $thread = $this->threadService->findByThreadId($this->room->getId(), $messageId); + } catch (DoesNotExistException) { + return new DataResponse(['error' => 'message'], Http::STATUS_NOT_FOUND); + } + + $threadAttendee = $this->threadService->setNotificationLevel($this->participant->getAttendee(), $thread->getId(), $level); + $attendees = [$thread->getId() => $threadAttendee]; + $list = $this->prepareListOfThreads([$thread], $attendees); + + /** @var TalkThreadInfo $threadInfo */ + $threadInfo = array_shift($list); + return new DataResponse($threadInfo); + } +} diff --git a/lib/Dashboard/Event.php b/lib/Dashboard/Event.php new file mode 100644 index 0000000..ef16fce --- /dev/null +++ b/lib/Dashboard/Event.php @@ -0,0 +1,303 @@ + */ + protected array $calendars = []; + protected string $eventName = ''; + protected string $eventLink = ''; + protected int $start = 0; + protected int $end = 0; + protected string $roomToken = ''; + protected string $roomAvatarVersion = ''; + protected string $roomName = ''; + protected string $roomDisplayName = ''; + protected int $roomType = 0; + protected ?string $eventDescription = null; + /** @var array */ + protected array $eventAttachments = []; + protected ?int $roomActiveSince = null; + protected ?int $accepted = null; + protected ?int $tentative = null; + protected ?int $declined = null; + protected ?int $invited = null; + + public function __construct() { + } + + /** + * @return non-empty-list + */ + public function getCalendars(): array { + return $this->calendars; + } + + public function getEventName(): string { + return $this->eventName; + } + + public function setEventName(string $eventName): void { + $this->eventName = $eventName; + } + + public function getEventDescription(): ?string { + return $this->eventDescription; + } + + public function setEventDescription(?string $eventDescription): void { + $this->eventDescription = $eventDescription; + } + + /** + * @return array + */ + public function getEventAttachments(): array { + return $this->eventAttachments; + } + + public function setEventLink(string $eventLink): void { + $this->eventLink = $eventLink; + } + + public function getStart(): int { + return $this->start; + } + + public function setStart(int $start): void { + $this->start = $start; + } + + public function getEnd(): int { + return $this->end; + } + + public function setEnd(int $end): void { + $this->end = $end; + } + + public function setRoomToken(string $roomToken): void { + $this->roomToken = $roomToken; + } + + public function setRoomAvatarVersion(string $roomAvatarVersion): void { + $this->roomAvatarVersion = $roomAvatarVersion; + } + + public function setRoomName(string $roomName): void { + $this->roomName = $roomName; + } + + public function setRoomDisplayName(string $roomDisplayName): void { + $this->roomDisplayName = $roomDisplayName; + } + + public function setRoomType(int $roomType): void { + $this->roomType = $roomType; + } + + public function setRoomActiveSince(?int $roomActiveSince): void { + $this->roomActiveSince = $roomActiveSince; + } + + public function generateAttendance(array $attendees): void { + foreach ($attendees as $attendee) { + if (!isset($attendee[1]['PARTSTAT'])) { + continue; + } + + switch ($attendee[1]['PARTSTAT']->getValue()) { + case 'ACCEPTED': + (int)$this->accepted++; + break; + case 'TENTATIVE': + (int)$this->tentative++; + break; + case 'DECLINED': + (int)$this->declined++; + break; + case 'NEEDS-ACTION': + (int)$this->invited++; + break; + default: + break; + } + } + } + + public function isAttendee(array $attendees, string $email): bool { + foreach ($attendees as $attendee) { + if (!isset($attendee[1]['PARTSTAT'])) { + continue; + } + + // Calendar emails start with 'mailto:' + if (substr($attendee[0], 7) === $email) { + return true; + } + } + + return false; + } + + + public function isOrganizer(array $organizer, string $email): bool { + // Calendar emails start with 'mailto:' + return substr($organizer[0], 7) === $email; + } + + /** + * Takes the room token, start and end time and attendees to build an identifier + * If the identifier already exists, another event is happening at the same time + * in the same room + * + * We only return duplicates if the attendees are different + * + * @return string + */ + public function generateEventIdentifier(): string { + return $this->roomToken . '#' . $this->start . '#' . $this->end . '#' . (int)$this->accepted . '#' . (int)$this->tentative . '#' . (int)$this->declined; + } + + /** + * @param string $calendarName + * @param array $attachments + * @return void + */ + public function handleCalendarAttachments(string $calendarName, array $attachments): void { + foreach ($attachments as $attachment) { + $params = $attachment[1]; + if (!isset($params['X-NC-FILE-ID'])) { + continue; + } + + $this->eventAttachments[$attachment[0]] = [ + 'calendars' => [$calendarName], + 'fmttype' => $params['FMTTYPE']?->getValue() ?? '', + 'filename' => $params['FILENAME']?->getValue() ?? '', + 'fileid' => $params['X-NC-FILE-ID']->getValue(), + 'preview' => $params['X-NC-HAS-PREVIEW']?->getValue() ?? false, + 'previewLink' => $params['X-NC-HAS-PREVIEW']?->getValue() ? $attachment[0] : null, + ]; + } + } + + /** + * @param string $principalUri + * @param string $calendarName + * @param string|null $calendarColor + * @return void + */ + public function addCalendar(string $principalUri, string $calendarName, ?string $calendarColor): void { + $this->calendars[] = [ + 'principalUri' => $principalUri, + 'calendarName' => $calendarName, + 'calendarColor' => $calendarColor, + ]; + } + + public function mergeAttachments(self $event): void { + $attachments = $event->getEventAttachments(); + + if (empty($attachments) === true) { + return; + } + + if (empty($this->eventAttachments) === true) { + $this->eventAttachments = $attachments; + return; + } + + foreach ($attachments as $filename => $attachment) { + if (isset($this->eventAttachments[$filename])) { + $this->eventAttachments[$filename]['calendars'] + = array_merge($this->eventAttachments[$filename]['calendars'], $attachment['calendars']); + } else { + $this->eventAttachments[$filename] = $attachment; + } + } + } + + public function getEventLink(): string { + return $this->eventLink; + } + + public function getRoomToken(): string { + return $this->roomToken; + } + + public function getRoomAvatarVersion(): string { + return $this->roomAvatarVersion; + } + + public function getRoomName(): string { + return $this->roomName; + } + + public function getRoomDisplayName(): string { + return $this->roomDisplayName; + } + + public function getRoomType(): int { + return $this->roomType; + } + + public function getRoomActiveSince(): ?int { + return $this->roomActiveSince; + } + + public function getAccepted(): ?int { + return $this->accepted; + } + + public function getTentative(): ?int { + return $this->tentative; + } + + public function getDeclined(): ?int { + return $this->declined; + } + + public function getInvited(): ?int { + return $this->invited; + } + + /** + * @return TalkDashboardEvent + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'calendars' => $this->getCalendars(), + 'eventName' => $this->getEventName(), + 'eventLink' => $this->getEventLink(), + 'start' => $this->getStart(), + 'end' => $this->getEnd(), + 'roomToken' => $this->getRoomToken(), + 'roomAvatarVersion' => $this->getRoomAvatarVersion(), + 'roomName' => $this->getRoomName(), + 'roomDisplayName' => $this->getRoomDisplayName(), + 'roomType' => $this->getRoomType(), + 'eventDescription' => $this->getEventDescription(), + 'eventAttachments' => $this->getEventAttachments(), + 'roomActiveSince' => $this->getRoomActiveSince(), + 'accepted' => $this->getAccepted(), + 'tentative' => $this->getTentative(), + 'declined' => $this->getDeclined(), + 'invited' => $this->getInvited(), + ]; + } +} diff --git a/lib/Dashboard/TalkWidget.php b/lib/Dashboard/TalkWidget.php new file mode 100644 index 0000000..7986975 --- /dev/null +++ b/lib/Dashboard/TalkWidget.php @@ -0,0 +1,345 @@ +l10n->t('Talk mentions'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getOrder(): int { + return 10; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getIconClass(): string { + return 'dashboard-talk-icon'; + } + + /** + * @inheritDoc + */ + #[\Override] + public function isEnabled(): bool { + $user = $this->userSession->getUser(); + return !($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)); + } + + #[\Override] + public function getWidgetOptions(): WidgetOptions { + return new WidgetOptions(true); + } + + /** + * @return list + */ + #[\Override] + public function getWidgetButtons(string $userId): array { + $buttons = []; + $buttons[] = new WidgetButton( + WidgetButton::TYPE_MORE, + $this->url->linkToRouteAbsolute('spreed.Page.index'), + $this->l10n->t('More conversations') + ); + return $buttons; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getIconUrl(): string { + return $this->url->getAbsoluteURL($this->url->imagePath('spreed', 'app-dark.svg')); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getUrl(): ?string { + return $this->url->linkToRouteAbsolute('spreed.Page.index'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function load(): void { + Util::addStyle('spreed', 'talk-icons'); + } + + #[\Override] + public function getItems(string $userId, ?string $since = null, int $limit = 7): array { + $event = new BeforeRoomsFetchEvent($userId); + $this->dispatcher->dispatchTyped($event); + + $rooms = $this->manager->getRoomsForUser($userId, [], true); + + $rooms = array_filter($rooms, function (Room $room) use ($userId) { + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + return false; + } + + $participant = $this->participantService->getParticipant($room, $userId); + $attendee = $participant->getAttendee(); + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE + && !($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + return false; + } + + if (!$attendee->isArchived() && $room->getCallFlag() !== Participant::FLAG_DISCONNECTED) { + return true; + } + + if (($room->isFederatedConversation() && $attendee->getLastMentionMessage()) + || (!$room->isFederatedConversation() && $attendee->getLastMentionMessage() > $attendee->getLastReadMessage())) { + return true; + } + + return ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) + && $room->getLastMessageId() > $attendee->getLastReadMessage() + && $this->chatManager->getUnreadCount($room, $attendee->getLastReadMessage()) > 0; + }); + + uasort($rooms, [$this, 'sortRooms']); + + $rooms = array_slice($rooms, 0, $limit); + + $result = []; + foreach ($rooms as $room) { + $result[] = $this->prepareRoom($room, $userId); + } + + return $result; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getItemsV2(string $userId, ?string $since = null, int $limit = 7): WidgetItems { + $event = new BeforeRoomsFetchEvent($userId); + $this->dispatcher->dispatchTyped($event); + + $allRooms = $this->manager->getRoomsForUser($userId, [], true); + + $rooms = []; + $mentions = []; + foreach ($allRooms as $room) { + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + continue; + } + + $participant = $this->participantService->getParticipant($room, $userId); + $attendee = $participant->getAttendee(); + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE + && !($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + continue; + } + + if (!$attendee->isArchived()) { + $rooms[] = $room; + + if ($room->getCallFlag() !== Participant::FLAG_DISCONNECTED) { + // Call in progress + $mentions[] = $room; + continue; + } + } + + if (($room->isFederatedConversation() && $attendee->getLastMentionMessage()) + || (!$room->isFederatedConversation() && $attendee->getLastMentionMessage() > $attendee->getLastReadMessage())) { + // Really mentioned + $mentions[] = $room; + continue; + } + + if (($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) + && $room->getLastMessageId() > $attendee->getLastReadMessage()) { + // If there are "unread" messages in one-to-one or former one-to-one + // we check if they are actual messages or system messages not + // considered by the read-marker + if ($this->chatManager->getUnreadCount($room, $attendee->getLastReadMessage()) > 0) { + // Unread message in one-to-one are considered "mentions" + $mentions[] = $room; + } + } + } + + $roomsToReturn = $rooms; + if (!empty($mentions)) { + $roomsToReturn = $mentions; + } + + uasort($roomsToReturn, [$this, 'sortRooms']); + $roomsToReturn = array_slice($roomsToReturn, 0, $limit); + + $result = []; + foreach ($roomsToReturn as $room) { + $result[] = $this->prepareRoom($room, $userId); + } + + return new WidgetItems( + $result, + empty($result) ? $this->l10n->t('Say hi to your friends and colleagues!') : '', + empty($mentions) ? $this->l10n->t('No unread mentions') : '', + ); + } + + protected function prepareRoom(Room $room, string $userId): WidgetItem { + $participant = $this->participantService->getParticipant($room, $userId); + $attendee = $participant->getAttendee(); + $subtitle = ''; + + if ($attendee->isSensitive()) { + // Don't leak sensitive last messages on dashboard + } elseif ($room->getLastMessageId() && $room->isFederatedConversation()) { + try { + $cachedMessage = $this->pcmService->findByRemote( + $room->getRemoteServer(), + $room->getRemoteToken(), + $room->getLastMessageId(), + ); + $message = $this->messageParser->createMessageFromProxyCache($room, $participant, $cachedMessage, $this->l10n); + $subtitle = $this->getSubtitleFromMessage($message); + } catch (DoesNotExistException) { + // Fallback to empty subtitle + } + } elseif ($room->getLastMessageId() && $room->getLastMessage() && !$room->isFederatedConversation()) { + $message = $this->messageParser->createMessage($room, $participant, $room->getLastMessage(), $this->l10n); + $this->messageParser->parseMessage($message, true); + $subtitle = $this->getSubtitleFromMessage($message); + } + + if ($room->getCallFlag() !== Participant::FLAG_DISCONNECTED) { + $subtitle = $this->l10n->t('Call in progress'); + } elseif (($room->isFederatedConversation() && $attendee->getLastMentionMessage()) + || (!$room->isFederatedConversation() && $attendee->getLastMentionMessage() > $attendee->getLastReadMessage())) { + $subtitle = $this->l10n->t('You were mentioned'); + } + + return new WidgetItem( + $room->getDisplayName($userId), + $subtitle, + $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]), + $this->avatarService->getAvatarUrl($room) + ); + } + + protected function getSubtitleFromMessage(Message $message): string { + $expireDate = $message->getExpirationDateTime(); + if ($expireDate instanceof \DateTimeInterface + && $expireDate <= $this->timeFactory->getDateTime()) { + return ''; + } + + if (!$message->getVisibility()) { + return ''; + } + + $placeholders = $replacements = []; + foreach ($message->getMessageParameters() as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + if ($parameter['type'] === 'user' || $parameter['type'] === 'guest') { + $replacements[] = '@' . $parameter['name']; + } else { + $replacements[] = $parameter['name']; + } + } + + return str_replace($placeholders, $replacements, $message->getMessage()); + } + + protected function sortRooms(Room $roomA, Room $roomB): int { + if ($roomA->getCallFlag() !== $roomB->getCallFlag()) { + return $roomA->getCallFlag() !== Participant::FLAG_DISCONNECTED ? -1 : 1; + } + + return $roomA->getLastActivity() >= $roomB->getLastActivity() ? -1 : 1; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getReloadInterval(): int { + return 30; + } +} diff --git a/lib/DataObjects/AccountId.php b/lib/DataObjects/AccountId.php new file mode 100644 index 0000000..a2cd2e4 --- /dev/null +++ b/lib/DataObjects/AccountId.php @@ -0,0 +1,21 @@ +accountId; + } +} diff --git a/lib/DataObjects/RegisterAccountData.php b/lib/DataObjects/RegisterAccountData.php new file mode 100644 index 0000000..a1da2f5 --- /dev/null +++ b/lib/DataObjects/RegisterAccountData.php @@ -0,0 +1,41 @@ +url; + } + + public function getName(): string { + return $this->name; + } + + public function getEmail(): string { + return $this->email; + } + + public function getLanguage(): string { + return $this->language; + } + + public function getCountry(): string { + return $this->country; + } +} diff --git a/lib/Deck/DeckPluginLoader.php b/lib/Deck/DeckPluginLoader.php new file mode 100644 index 0000000..21d70dd --- /dev/null +++ b/lib/Deck/DeckPluginLoader.php @@ -0,0 +1,44 @@ + + */ +class DeckPluginLoader implements IEventListener { + + public function __construct( + private IRequest $request, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof BeforeTemplateRenderedEvent)) { + return; + } + + if (!$event->isLoggedIn()) { + return; + } + + if (str_starts_with($this->request->getPathInfo(), '/apps/deck')) { + Util::addScript('spreed', 'talk-collections'); + + Util::addScript('spreed', 'talk-deck'); + Util::addStyle('spreed', 'talk-deck'); + } + } +} diff --git a/lib/Events/AAttendeeRemovedEvent.php b/lib/Events/AAttendeeRemovedEvent.php new file mode 100644 index 0000000..4ac70c0 --- /dev/null +++ b/lib/Events/AAttendeeRemovedEvent.php @@ -0,0 +1,50 @@ +attendee; + } + + /** + * @return self::REASON_* + */ + public function getReason(): string { + return $this->reason; + } + + /** + * @return Session[] + */ + public function getSessions(): array { + return $this->sessions; + } +} diff --git a/lib/Events/ABeforeJoinedRoomEvent.php b/lib/Events/ABeforeJoinedRoomEvent.php new file mode 100644 index 0000000..037e7ba --- /dev/null +++ b/lib/Events/ABeforeJoinedRoomEvent.php @@ -0,0 +1,43 @@ +cancelJoin = $cancelJoin; + } + + public function getCancelJoin(): bool { + return $this->cancelJoin; + } + + public function getPassword(): string { + return $this->password; + } + + public function setPassedPasswordProtection(bool $passedPasswordProtection): void { + $this->passedPasswordProtection = $passedPasswordProtection; + } + + public function getPassedPasswordProtection(): bool { + return $this->passedPasswordProtection; + } +} diff --git a/lib/Events/ACallEndedEvent.php b/lib/Events/ACallEndedEvent.php new file mode 100644 index 0000000..08189c2 --- /dev/null +++ b/lib/Events/ACallEndedEvent.php @@ -0,0 +1,35 @@ +> $details + */ + public function __construct( + Room $room, + ?\DateTime $newValue, + protected int $callFlag, + protected array $details, + ?Participant $actor, + ) { + parent::__construct( + $room, + self::PROPERTY_ACTIVE_SINCE, + $newValue, + null, + $actor, + ); + } + + public function getCallFlag(): int { + return $this->callFlag; + } + + /** + * @param AParticipantModifiedEvent::DETAIL_* $detail + */ + public function getDetail(string $detail): ?bool { + if (!isset($this->details[$detail])) { + return null; + } + return (bool)$this->details[$detail]; + } + + /** + * @param AParticipantModifiedEvent::DETAIL_* $detail + * @return list + */ + public function getDetailList(string $detail): array { + if (!isset($this->details[$detail]) || !is_array($this->details[$detail])) { + return []; + } + return $this->details[$detail]; + } +} diff --git a/lib/Events/ALobbyModifiedEvent.php b/lib/Events/ALobbyModifiedEvent.php new file mode 100644 index 0000000..2b33c78 --- /dev/null +++ b/lib/Events/ALobbyModifiedEvent.php @@ -0,0 +1,36 @@ +lobbyTimer; + } + + public function isTimerReached(): bool { + return $this->timerReached; + } +} diff --git a/lib/Events/AMessageSentEvent.php b/lib/Events/AMessageSentEvent.php new file mode 100644 index 0000000..30a3af4 --- /dev/null +++ b/lib/Events/AMessageSentEvent.php @@ -0,0 +1,43 @@ +comment; + } + + public function getParticipant(): ?Participant { + return $this->participant; + } + + public function isSilentMessage(): bool { + return $this->silent; + } + + public function getParent(): ?IComment { + return $this->parent; + } +} diff --git a/lib/Events/AParticipantModifiedEvent.php b/lib/Events/AParticipantModifiedEvent.php new file mode 100644 index 0000000..98fc008 --- /dev/null +++ b/lib/Events/AParticipantModifiedEvent.php @@ -0,0 +1,62 @@ + $details + */ + public function __construct( + Room $room, + protected Participant $participant, + protected string $property, + protected string|int $newValue, + protected string|int|null $oldValue = null, + protected array $details = [], + ) { + parent::__construct($room); + } + + public function getParticipant(): Participant { + return $this->participant; + } + + public function getProperty(): string { + return $this->property; + } + + public function getNewValue(): string|int { + return $this->newValue; + } + + public function getOldValue(): string|int|null { + return $this->oldValue; + } + + /** + * @param self::DETAIL_* $detail + */ + public function getDetail(string $detail): ?bool { + return $this->details[$detail] ?? null; + } +} diff --git a/lib/Events/AReactionEvent.php b/lib/Events/AReactionEvent.php new file mode 100644 index 0000000..664402f --- /dev/null +++ b/lib/Events/AReactionEvent.php @@ -0,0 +1,51 @@ +message; + } + + public function getReactionMessage(): ?IComment { + return $this->reactionMessage; + } + + + public function getActorType(): string { + return $this->actorType; + } + + public function getActorId(): string { + return $this->actorId; + } + + public function getActorDisplayName(): string { + return $this->actorDisplayName; + } + + public function getReaction(): string { + return $this->reaction; + } +} diff --git a/lib/Events/ARoomEvent.php b/lib/Events/ARoomEvent.php new file mode 100644 index 0000000..a8552b0 --- /dev/null +++ b/lib/Events/ARoomEvent.php @@ -0,0 +1,26 @@ +room; + } +} diff --git a/lib/Events/ARoomModifiedEvent.php b/lib/Events/ARoomModifiedEvent.php new file mode 100644 index 0000000..ede725f --- /dev/null +++ b/lib/Events/ARoomModifiedEvent.php @@ -0,0 +1,65 @@ +property; + } + + public function getNewValue(): \DateTime|string|int|null { + return $this->newValue; + } + + public function getOldValue(): \DateTime|string|int|null { + return $this->oldValue; + } + + public function getActor(): ?Participant { + return $this->actor; + } +} diff --git a/lib/Events/ARoomSyncedEvent.php b/lib/Events/ARoomSyncedEvent.php new file mode 100644 index 0000000..97cd3a6 --- /dev/null +++ b/lib/Events/ARoomSyncedEvent.php @@ -0,0 +1,13 @@ +participant; + } + + public function isRejoining(): bool { + return $this->rejoining; + } +} diff --git a/lib/Events/ASystemMessageSentEvent.php b/lib/Events/ASystemMessageSentEvent.php new file mode 100644 index 0000000..c8ab642 --- /dev/null +++ b/lib/Events/ASystemMessageSentEvent.php @@ -0,0 +1,47 @@ +skipLastActivityUpdate; + } +} diff --git a/lib/Events/AttendeeRemovedEvent.php b/lib/Events/AttendeeRemovedEvent.php new file mode 100644 index 0000000..ef6bc46 --- /dev/null +++ b/lib/Events/AttendeeRemovedEvent.php @@ -0,0 +1,12 @@ +skipLastMessageUpdate; + } + + public function setLastMessage(IComment $lastMessage): void { + $this->lastMessage = $lastMessage; + } + + public function getLastMessage(): ?IComment { + return $this->lastMessage; + } +} diff --git a/lib/Events/AttendeesEvent.php b/lib/Events/AttendeesEvent.php new file mode 100644 index 0000000..bde3426 --- /dev/null +++ b/lib/Events/AttendeesEvent.php @@ -0,0 +1,31 @@ +attendees; + } +} diff --git a/lib/Events/AttendeesRemovedEvent.php b/lib/Events/AttendeesRemovedEvent.php new file mode 100644 index 0000000..b36bbc1 --- /dev/null +++ b/lib/Events/AttendeesRemovedEvent.php @@ -0,0 +1,12 @@ +share; + } +} diff --git a/lib/Events/BeforeEmailInvitationSentEvent.php b/lib/Events/BeforeEmailInvitationSentEvent.php new file mode 100644 index 0000000..5c501b6 --- /dev/null +++ b/lib/Events/BeforeEmailInvitationSentEvent.php @@ -0,0 +1,26 @@ +attendee; + } +} diff --git a/lib/Events/BeforeFederatedUserJoinedRoomEvent.php b/lib/Events/BeforeFederatedUserJoinedRoomEvent.php new file mode 100644 index 0000000..33b590d --- /dev/null +++ b/lib/Events/BeforeFederatedUserJoinedRoomEvent.php @@ -0,0 +1,20 @@ +cancelJoin; + } + public function cancelJoin(): void { + $this->cancelJoin = true; + } +} diff --git a/lib/Events/BeforeGuestJoinedRoomEvent.php b/lib/Events/BeforeGuestJoinedRoomEvent.php new file mode 100644 index 0000000..425ab28 --- /dev/null +++ b/lib/Events/BeforeGuestJoinedRoomEvent.php @@ -0,0 +1,12 @@ +userId; + } +} diff --git a/lib/Events/BeforeSessionLeftRoomEvent.php b/lib/Events/BeforeSessionLeftRoomEvent.php new file mode 100644 index 0000000..a668f59 --- /dev/null +++ b/lib/Events/BeforeSessionLeftRoomEvent.php @@ -0,0 +1,12 @@ +participant; + } + + public function getAction(): string { + return $this->action; + } + + public function setSession(array $session): void { + $this->session = $session; + } + + public function getSession(): array { + return $this->session; + } +} diff --git a/lib/Events/BeforeSignalingRoomPropertiesSentEvent.php b/lib/Events/BeforeSignalingRoomPropertiesSentEvent.php new file mode 100644 index 0000000..32645fa --- /dev/null +++ b/lib/Events/BeforeSignalingRoomPropertiesSentEvent.php @@ -0,0 +1,38 @@ +userId; + } + + public function getProperties(): array { + return $this->properties; + } + + public function setProperty(string $property, $data): void { + $this->properties[$property] = $data; + } + + public function unsetProperty(string $property): void { + unset($this->properties[$property]); + } +} diff --git a/lib/Events/BeforeSystemMessageSentEvent.php b/lib/Events/BeforeSystemMessageSentEvent.php new file mode 100644 index 0000000..9975af9 --- /dev/null +++ b/lib/Events/BeforeSystemMessageSentEvent.php @@ -0,0 +1,12 @@ + $servers + */ + public function __construct( + protected array $servers, + ) { + parent::__construct(); + } + + /** + * @return list + */ + public function getServers(): array { + return $this->servers; + } + + /** + * @param list $servers + */ + public function setServers(array $servers): void { + $this->servers = $servers; + } +} diff --git a/lib/Events/BeforeUserJoinedRoomEvent.php b/lib/Events/BeforeUserJoinedRoomEvent.php new file mode 100644 index 0000000..b386e21 --- /dev/null +++ b/lib/Events/BeforeUserJoinedRoomEvent.php @@ -0,0 +1,32 @@ +user; + } + + #[\Override] + public function getPassword(): string { + return $this->password; + } +} diff --git a/lib/Events/BotDisabledEvent.php b/lib/Events/BotDisabledEvent.php new file mode 100644 index 0000000..69e973e --- /dev/null +++ b/lib/Events/BotDisabledEvent.php @@ -0,0 +1,26 @@ +botServer; + } +} diff --git a/lib/Events/BotEnabledEvent.php b/lib/Events/BotEnabledEvent.php new file mode 100644 index 0000000..af0a301 --- /dev/null +++ b/lib/Events/BotEnabledEvent.php @@ -0,0 +1,26 @@ +botServer; + } +} diff --git a/lib/Events/BotInstallEvent.php b/lib/Events/BotInstallEvent.php new file mode 100644 index 0000000..7bdd4d7 --- /dev/null +++ b/lib/Events/BotInstallEvent.php @@ -0,0 +1,50 @@ +name; + } + + public function getSecret(): string { + return $this->secret; + } + + public function getUrl(): string { + return $this->url; + } + + public function getDescription(): string { + return $this->description; + } + + public function getFeatures(): int { + if ($this->features !== null) { + return $this->features; + } + if (str_starts_with($this->url, Bot::URL_APP_PREFIX)) { + return Bot::FEATURE_EVENT; + } + return Bot::FEATURE_WEBHOOK | Bot::FEATURE_RESPONSE; + } +} diff --git a/lib/Events/BotInvokeEvent.php b/lib/Events/BotInvokeEvent.php new file mode 100644 index 0000000..604897e --- /dev/null +++ b/lib/Events/BotInvokeEvent.php @@ -0,0 +1,160 @@ + */ + protected array $reactions = []; + /** @var list */ + protected array $answers = []; + + /** + * @param InvocationData $message + */ + public function __construct( + protected string $botUrl, + protected array $message, + ) { + parent::__construct(); + } + + public function getBotUrl(): string { + return $this->botUrl; + } + + /** + * @return InvocationData + */ + public function getMessage(): array { + return $this->message; + } + + public function addReaction(string $emoji): void { + $this->reactions[] = $emoji; + } + + /** + * @return list + */ + public function getReactions(): array { + return $this->reactions; + } + + public function addAnswer(string $message, bool|int $reply = false, bool $silent = false, string $referenceId = '', bool $thread = false, ?string $threadTitle = null): void { + $this->answers[] = [ + 'message' => $message, + 'referenceId' => $referenceId, + 'reply' => $reply, + 'thread' => $thread, + 'threadTitle' => $threadTitle, + 'silent' => $silent, + ]; + } + + /** + * @return list + */ + public function getAnswers(): array { + return $this->answers; + } +} diff --git a/lib/Events/BotUninstallEvent.php b/lib/Events/BotUninstallEvent.php new file mode 100644 index 0000000..5586cf8 --- /dev/null +++ b/lib/Events/BotUninstallEvent.php @@ -0,0 +1,28 @@ +secret; + } + + public function getUrl(): string { + return $this->url; + } +} diff --git a/lib/Events/CallEndedEvent.php b/lib/Events/CallEndedEvent.php new file mode 100644 index 0000000..e986afe --- /dev/null +++ b/lib/Events/CallEndedEvent.php @@ -0,0 +1,12 @@ +sessionIds; + } + + /** + * @return string[] + */ + public function getUserIds(): array { + return $this->userIds; + } +} diff --git a/lib/Events/CallNotificationSendEvent.php b/lib/Events/CallNotificationSendEvent.php new file mode 100644 index 0000000..b14b90e --- /dev/null +++ b/lib/Events/CallNotificationSendEvent.php @@ -0,0 +1,34 @@ +actor; + } + + public function getTarget(): Participant { + return $this->target; + } +} diff --git a/lib/Events/CallStartedEvent.php b/lib/Events/CallStartedEvent.php new file mode 100644 index 0000000..4be89b2 --- /dev/null +++ b/lib/Events/CallStartedEvent.php @@ -0,0 +1,12 @@ +attendee; + } +} diff --git a/lib/Events/FederatedUserJoinedRoomEvent.php b/lib/Events/FederatedUserJoinedRoomEvent.php new file mode 100644 index 0000000..6230cb5 --- /dev/null +++ b/lib/Events/FederatedUserJoinedRoomEvent.php @@ -0,0 +1,24 @@ +cloudId; + } +} diff --git a/lib/Events/GuestJoinedRoomEvent.php b/lib/Events/GuestJoinedRoomEvent.php new file mode 100644 index 0000000..5e560af --- /dev/null +++ b/lib/Events/GuestJoinedRoomEvent.php @@ -0,0 +1,25 @@ +participant; + } +} diff --git a/lib/Events/GuestsCleanedUpEvent.php b/lib/Events/GuestsCleanedUpEvent.php new file mode 100644 index 0000000..f53814e --- /dev/null +++ b/lib/Events/GuestsCleanedUpEvent.php @@ -0,0 +1,12 @@ +message; + } + + public function allowInaccurate(): bool { + return $this->allowInaccurate; + } +} diff --git a/lib/Events/OverwritePublicSharePropertiesEvent.php b/lib/Events/OverwritePublicSharePropertiesEvent.php new file mode 100644 index 0000000..6f7132d --- /dev/null +++ b/lib/Events/OverwritePublicSharePropertiesEvent.php @@ -0,0 +1,27 @@ +share; + } +} diff --git a/lib/Events/ParticipantModifiedEvent.php b/lib/Events/ParticipantModifiedEvent.php new file mode 100644 index 0000000..644eae5 --- /dev/null +++ b/lib/Events/ParticipantModifiedEvent.php @@ -0,0 +1,12 @@ +newRoom; + } +} diff --git a/lib/Events/RoomModifiedEvent.php b/lib/Events/RoomModifiedEvent.php new file mode 100644 index 0000000..b298e00 --- /dev/null +++ b/lib/Events/RoomModifiedEvent.php @@ -0,0 +1,12 @@ +password; + } + + public function setIsPasswordValid(bool $isPasswordValid): void { + $this->isPasswordValid = $isPasswordValid; + } + + public function isPasswordValid(): ?bool { + return $this->isPasswordValid; + } + + public function setRedirectUrl(string $redirectUrl): void { + $this->redirectUrl = $redirectUrl; + } + + public function getRedirectUrl(): string { + return $this->redirectUrl; + } +} diff --git a/lib/Events/RoomSyncedEvent.php b/lib/Events/RoomSyncedEvent.php new file mode 100644 index 0000000..042d1ea --- /dev/null +++ b/lib/Events/RoomSyncedEvent.php @@ -0,0 +1,30 @@ + $properties + */ + public function __construct( + Room $room, + protected array $properties, + ) { + parent::__construct($room); + } + + /** + * @return array + */ + public function getProperties(): array { + return $this->properties; + } +} diff --git a/lib/Events/SessionLeftRoomEvent.php b/lib/Events/SessionLeftRoomEvent.php new file mode 100644 index 0000000..fd591b3 --- /dev/null +++ b/lib/Events/SessionLeftRoomEvent.php @@ -0,0 +1,12 @@ +user; + } + + public function getParticipant(): Participant { + return $this->participant; + } +} diff --git a/lib/Exceptions/CannotReachRemoteException.php b/lib/Exceptions/CannotReachRemoteException.php new file mode 100644 index 0000000..fe346be --- /dev/null +++ b/lib/Exceptions/CannotReachRemoteException.php @@ -0,0 +1,13 @@ +reason; + } +} diff --git a/lib/Exceptions/DialOutFailedException.php b/lib/Exceptions/DialOutFailedException.php new file mode 100644 index 0000000..61f606c --- /dev/null +++ b/lib/Exceptions/DialOutFailedException.php @@ -0,0 +1,23 @@ +readableError; + } +} diff --git a/lib/Exceptions/FederationRestrictionException.php b/lib/Exceptions/FederationRestrictionException.php new file mode 100644 index 0000000..8588f44 --- /dev/null +++ b/lib/Exceptions/FederationRestrictionException.php @@ -0,0 +1,33 @@ +reason); + } + + /** + * @return self::REASON_* + */ + public function getReason(): string { + return $this->reason; + } +} diff --git a/lib/Exceptions/ForbiddenException.php b/lib/Exceptions/ForbiddenException.php new file mode 100644 index 0000000..2f00ee3 --- /dev/null +++ b/lib/Exceptions/ForbiddenException.php @@ -0,0 +1,13 @@ +|null $invalidLines + * @param non-negative-int|null $invites + * @param non-negative-int|null $duplicates + */ + public function __construct( + protected readonly string $reason, + protected readonly ?string $errorMessage = null, + protected readonly ?array $invalidLines = null, + protected readonly ?int $invites = null, + protected readonly ?int $duplicates = null, + ) { + parent::__construct($reason); + } + + /** + * @return self::REASON_* + */ + public function getReason(): string { + return $this->reason; + } + + public function getErrorMessage(): ?string { + return $this->errorMessage; + } + + /** + * @return non-negative-int|null + */ + public function getInvites(): ?int { + return $this->invites; + } + + /** + * @return non-negative-int|null + */ + public function getDuplicates(): ?int { + return $this->duplicates; + } + + /** + * @return non-negative-int|null + */ + public function getInvalid(): ?int { + return $this->invalidLines === null ? null : count($this->invalidLines); + } + + /** + * @return list|null + */ + public function getInvalidLines(): ?array { + return $this->invalidLines; + } + + public function getData(): array { + $data = ['error' => $this->errorMessage]; + if ($this->errorMessage !== null) { + $data['message'] = $this->errorMessage; + } + if ($this->invites !== null) { + $data['invites'] = $this->invites; + } + if ($this->duplicates !== null) { + $data['duplicates'] = $this->duplicates; + } + if ($this->invalidLines !== null) { + $data['invalid'] = count($this->invalidLines); + $data['invalidLines'] = $this->invalidLines; + } + + return $data; + } +} diff --git a/lib/Exceptions/HostedSignalingServerAPIException.php b/lib/Exceptions/HostedSignalingServerAPIException.php new file mode 100644 index 0000000..04e8f7c --- /dev/null +++ b/lib/Exceptions/HostedSignalingServerAPIException.php @@ -0,0 +1,19 @@ +response; + } +} diff --git a/lib/Exceptions/MessagingNotAllowedException.php b/lib/Exceptions/MessagingNotAllowedException.php new file mode 100644 index 0000000..18bb5eb --- /dev/null +++ b/lib/Exceptions/MessagingNotAllowedException.php @@ -0,0 +1,19 @@ +reason; + } +} diff --git a/lib/Exceptions/PermissionsException.php b/lib/Exceptions/PermissionsException.php new file mode 100644 index 0000000..dd4da45 --- /dev/null +++ b/lib/Exceptions/PermissionsException.php @@ -0,0 +1,13 @@ +reason; + } +} diff --git a/lib/Exceptions/ReactionAlreadyExistsException.php b/lib/Exceptions/ReactionAlreadyExistsException.php new file mode 100644 index 0000000..8857ba7 --- /dev/null +++ b/lib/Exceptions/ReactionAlreadyExistsException.php @@ -0,0 +1,12 @@ +responseData; + } +} diff --git a/lib/Exceptions/RoomHasNoModeratorException.php b/lib/Exceptions/RoomHasNoModeratorException.php new file mode 100644 index 0000000..040414e --- /dev/null +++ b/lib/Exceptions/RoomHasNoModeratorException.php @@ -0,0 +1,13 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/BreakoutRoomModeException.php b/lib/Exceptions/RoomProperty/BreakoutRoomModeException.php new file mode 100644 index 0000000..bdec69b --- /dev/null +++ b/lib/Exceptions/RoomProperty/BreakoutRoomModeException.php @@ -0,0 +1,29 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/BreakoutRoomStatusException.php b/lib/Exceptions/RoomProperty/BreakoutRoomStatusException.php new file mode 100644 index 0000000..4bc139a --- /dev/null +++ b/lib/Exceptions/RoomProperty/BreakoutRoomStatusException.php @@ -0,0 +1,29 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/CallRecordingException.php b/lib/Exceptions/RoomProperty/CallRecordingException.php new file mode 100644 index 0000000..af75d37 --- /dev/null +++ b/lib/Exceptions/RoomProperty/CallRecordingException.php @@ -0,0 +1,34 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/CreationException.php b/lib/Exceptions/RoomProperty/CreationException.php new file mode 100644 index 0000000..dc37feb --- /dev/null +++ b/lib/Exceptions/RoomProperty/CreationException.php @@ -0,0 +1,44 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/DefaultPermissionsException.php b/lib/Exceptions/RoomProperty/DefaultPermissionsException.php new file mode 100644 index 0000000..4cec622 --- /dev/null +++ b/lib/Exceptions/RoomProperty/DefaultPermissionsException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/DescriptionException.php b/lib/Exceptions/RoomProperty/DescriptionException.php new file mode 100644 index 0000000..0d6a330 --- /dev/null +++ b/lib/Exceptions/RoomProperty/DescriptionException.php @@ -0,0 +1,30 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/ListableException.php b/lib/Exceptions/RoomProperty/ListableException.php new file mode 100644 index 0000000..3728137 --- /dev/null +++ b/lib/Exceptions/RoomProperty/ListableException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/LobbyException.php b/lib/Exceptions/RoomProperty/LobbyException.php new file mode 100644 index 0000000..eee55f9 --- /dev/null +++ b/lib/Exceptions/RoomProperty/LobbyException.php @@ -0,0 +1,32 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/MentionPermissionsException.php b/lib/Exceptions/RoomProperty/MentionPermissionsException.php new file mode 100644 index 0000000..d4e1728 --- /dev/null +++ b/lib/Exceptions/RoomProperty/MentionPermissionsException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/MessageExpirationException.php b/lib/Exceptions/RoomProperty/MessageExpirationException.php new file mode 100644 index 0000000..c172fb5 --- /dev/null +++ b/lib/Exceptions/RoomProperty/MessageExpirationException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/NameException.php b/lib/Exceptions/RoomProperty/NameException.php new file mode 100644 index 0000000..971a6bc --- /dev/null +++ b/lib/Exceptions/RoomProperty/NameException.php @@ -0,0 +1,30 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/PasswordException.php b/lib/Exceptions/RoomProperty/PasswordException.php new file mode 100644 index 0000000..166281e --- /dev/null +++ b/lib/Exceptions/RoomProperty/PasswordException.php @@ -0,0 +1,36 @@ +reason; + } + + public function getHint(): string { + return $this->hint; + } +} diff --git a/lib/Exceptions/RoomProperty/ReadOnlyException.php b/lib/Exceptions/RoomProperty/ReadOnlyException.php new file mode 100644 index 0000000..91b2d6b --- /dev/null +++ b/lib/Exceptions/RoomProperty/ReadOnlyException.php @@ -0,0 +1,30 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/RecordingConsentException.php b/lib/Exceptions/RoomProperty/RecordingConsentException.php new file mode 100644 index 0000000..93180b3 --- /dev/null +++ b/lib/Exceptions/RoomProperty/RecordingConsentException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/SipConfigurationException.php b/lib/Exceptions/RoomProperty/SipConfigurationException.php new file mode 100644 index 0000000..2fe27a7 --- /dev/null +++ b/lib/Exceptions/RoomProperty/SipConfigurationException.php @@ -0,0 +1,32 @@ +reason; + } +} diff --git a/lib/Exceptions/RoomProperty/TypeException.php b/lib/Exceptions/RoomProperty/TypeException.php new file mode 100644 index 0000000..8a9e62d --- /dev/null +++ b/lib/Exceptions/RoomProperty/TypeException.php @@ -0,0 +1,31 @@ +reason; + } +} diff --git a/lib/Exceptions/UnauthorizedException.php b/lib/Exceptions/UnauthorizedException.php new file mode 100644 index 0000000..3d19985 --- /dev/null +++ b/lib/Exceptions/UnauthorizedException.php @@ -0,0 +1,13 @@ +isFederationRequest = (bool)$this->request->getHeader('x-nextcloud-federation'); + if (!$this->isFederationRequest) { + $this->federationCloudId = ''; + $this->accessToken = ''; + return; + } + + $authUser = $this->request->server['PHP_AUTH_USER'] ?? ''; + $authUser = urldecode($authUser); + + try { + $cloudId = $this->cloudIdManager->resolveCloudId($authUser); + $this->federationCloudId = $cloudId->getId(); + $this->accessToken = $this->request->server['PHP_AUTH_PW'] ?? ''; + } catch (\InvalidArgumentException) { + $this->isFederationRequest = false; + $this->federationCloudId = ''; + $this->accessToken = ''; + } + } + + public function isFederationRequest(): bool { + if ($this->isFederationRequest === null) { + $this->readHeaders(); + + if ($this->isFederationRequest === null) { + return false; + } + } + + return $this->isFederationRequest; + } + + public function getCloudId(): string { + if ($this->federationCloudId === null) { + $this->readHeaders(); + + if ($this->federationCloudId === null) { + return ''; + } + } + + return $this->federationCloudId; + } + + public function getAccessToken(): string { + if ($this->accessToken === null) { + $this->readHeaders(); + + if ($this->accessToken === null) { + return ''; + } + } + + return $this->accessToken; + } + + public function authenticated(Room $room, Participant $participant): void { + $this->room = $room; + $this->participant = $participant; + } + + /** + * @throws RoomNotFoundException + */ + public function getRoom(): Room { + if ($this->room === null) { + throw new RoomNotFoundException(); + } + return $this->room; + } + + /** + * @throws ParticipantNotFoundException + */ + public function getParticipant(): Participant { + if ($this->participant === null) { + throw new ParticipantNotFoundException(); + } + return $this->participant; + + } +} diff --git a/lib/Federation/BackendNotifier.php b/lib/Federation/BackendNotifier.php new file mode 100644 index 0000000..fed8907 --- /dev/null +++ b/lib/Federation/BackendNotifier.php @@ -0,0 +1,613 @@ +cloudIdManager->resolveCloudId($shareWith); + + $roomName = $room->getName(); + $roomType = $room->getType(); + $roomToken = $room->getToken(); + $roomDefaultPermissions = $room->getDefaultPermissions(); + + try { + $this->restrictionValidator->isAllowedToInvite($sharedBy, $invitedCloudId); + } catch (\InvalidArgumentException) { + return false; + } + + /** @var IUser $roomOwner */ + $roomOwner = $this->userManager->get($roomOwnerAttendee->getActorId()); + + $remote = $this->prepareRemoteUrl($invitedCloudId->getRemote()); + if (str_starts_with($remote, 'https://')) { + $remote = substr($remote, 8); + } + + $shareWithCloudId = $invitedCloudId->getUser() . '@' . $remote; + $share = $this->cloudFederationFactory->getCloudFederationShare( + $shareWithCloudId, + $roomToken, + '', + $providerId, + $roomOwner->getCloudId(), + $roomOwner->getDisplayName(), + $sharedBy->getCloudId(), + $sharedBy->getDisplayName(), + $token, + $shareType, + FederationManager::TALK_ROOM_RESOURCE + ); + + // Put room name info in the share + $protocol = $share->getProtocol(); + $protocol['invitedCloudId'] = $invitedCloudId->getId(); + $protocol['roomName'] = $roomName; + $protocol['roomType'] = $roomType; + $protocol['roomDefaultPermissions'] = $roomDefaultPermissions; + $protocol['name'] = FederationManager::TALK_PROTOCOL_NAME; + $share->setProtocol($protocol); + + try { + $response = $this->federationProviderManager->sendCloudShare($share); + if ($response->getStatusCode() === Http::STATUS_CREATED) { + $body = $response->getBody(); + $data = json_decode((string)$body, true); + if (isset($data['recipientUserId']) && $data['recipientUserId'] !== '') { + $shareWithCloudId = $data['recipientUserId'] . '@' . $remote; + } + return [ + 'displayName' => $data['recipientDisplayName'] ?: $shareWithCloudId, + 'cloudId' => $shareWithCloudId, + ]; + } + + $this->logger->warning("Failed sharing $roomToken with $shareWith, received status code {code}\n{body}", [ + 'code' => $response->getStatusCode(), + 'body' => (string)$response->getBody(), + ]); + + return false; + } catch (OCMProviderException $e) { + $this->logger->error("Failed sharing $roomToken with $shareWith, received OCMProviderException", ['exception' => $e]); + return false; + } + } + + /** + * The invited participant accepted joining the federated room + * Sent from Remote participant server to Host server + * + * @return bool success + */ + public function sendShareAccepted( + string $remoteServerUrl, + int $remoteAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $displayName, + string $cloudId, + ): bool { + $remote = $this->prepareRemoteUrl($remoteServerUrl); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_SHARE_ACCEPTED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$remoteAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'message' => 'Recipient accepted the share', + 'displayName' => $displayName, + 'cloudId' => $cloudId, + ] + ); + + return $this->sendUpdateToRemote($remote, $notification, retry: false) === true; + } + + /** + * The invited participant declined joining the federated room + * Sent from Remote participant server to Host server + */ + public function sendShareDeclined( + string $remoteServerUrl, + int $remoteAttendeeId, + #[SensitiveParameter] + string $accessToken, + ): void { + $remote = $this->prepareRemoteUrl($remoteServerUrl); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_SHARE_DECLINED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$remoteAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'message' => 'Recipient declined the share', + ] + ); + + // We don't handle the return here as all local data is already deleted. + // If the retry ever aborts due to "unknown" we are fine with it. + $this->sendUpdateToRemote($remote, $notification); + } + + public function sendRemoteUnShare( + string $remoteServerUrl, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + ): void { + $remote = $this->prepareRemoteUrl($remoteServerUrl); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_SHARE_UNSHARED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'message' => 'This room has been unshared', + ] + ); + + // We don't handle the return here as when the retry ever + // aborts due to "unknown" we are fine with it. + $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that the room meta info updated + * Sent from Host server to Remote participant server + */ + public function sendRoomModifiedUpdate( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + string $changedProperty, + string|int|bool|null $newValue, + string|int|bool|null $oldValue, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_ROOM_MODIFIED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'changedProperty' => $changedProperty, + 'newValue' => $newValue, + 'oldValue' => $oldValue, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that the participant meta info updated + * Sent from Host server to Remote participant server (only for the affected participant) + */ + public function sendParticipantModifiedUpdate( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + string $changedProperty, + string|int $newValue, + string|int|null $oldValue, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_PARTICIPANT_MODIFIED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'changedProperty' => $changedProperty, + 'newValue' => $newValue, + 'oldValue' => $oldValue, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that "active since" was updated + * Sent from Host server to Remote participant server + * + * @psalm-param array $details + */ + public function sendCallStarted( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + string $changedProperty, + \DateTime $activeSince, + int $callFlag, + array $details, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_ROOM_MODIFIED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'changedProperty' => $changedProperty, + 'newValue' => $activeSince->getTimestamp(), + 'oldValue' => null, + 'callFlag' => $callFlag, + 'details' => $details, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that "active since" was updated + * Sent from Host server to Remote participant server + * + * @psalm-param array $details + */ + public function sendCallEnded( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + string $changedProperty, + ?\DateTime $activeSince, + int $callFlag, + array $details, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_ROOM_MODIFIED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'changedProperty' => $changedProperty, + 'newValue' => $activeSince?->getTimestamp(), + 'oldValue' => null, + 'callFlag' => $callFlag, + 'details' => $details, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that the lobby was updated + * Sent from Host server to Remote participant server + */ + public function sendRoomModifiedLobbyUpdate( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + string $changedProperty, + int $newValue, + int $oldValue, + ?\DateTime $dateTime, + bool $timerReached, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_ROOM_MODIFIED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'changedProperty' => $changedProperty, + 'newValue' => $newValue, + 'oldValue' => $oldValue, + 'dateTime' => $dateTime ? (string)$dateTime->getTimestamp() : '', + 'timerReached' => $timerReached, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + /** + * Send information to remote participants that a message was posted + * Sent from Host server to Remote participant server + * + * @param array{remoteMessageId: int, actorType: string, actorId: string, actorDisplayName: string, messageType: string, systemMessage: string, expirationDatetime: string, message: string, messageParameter: string, creationDatetime: string, metaData: string} $messageData + * @param array{unreadMessages: int, unreadMention: bool, unreadMentionDirect: bool, lastReadMessage: int} $unreadInfo + */ + public function sendMessageUpdate( + string $remoteServer, + int $localAttendeeId, + #[SensitiveParameter] + string $accessToken, + string $localToken, + array $messageData, + array $unreadInfo, + ): ?bool { + $remote = $this->prepareRemoteUrl($remoteServer); + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + FederationManager::NOTIFICATION_MESSAGE_POSTED, + FederationManager::TALK_ROOM_RESOURCE, + (string)$localAttendeeId, + [ + 'remoteServerUrl' => $this->getServerRemoteUrl(), + 'sharedSecret' => $accessToken, + 'remoteToken' => $localToken, + 'messageData' => $messageData, + 'unreadInfo' => $unreadInfo, + ], + ); + + return $this->sendUpdateToRemote($remote, $notification); + } + + protected function sendUpdateToRemote(string $remote, ICloudFederationNotification $notification, int $try = 0, bool $retry = true): ?bool { + try { + $response = $this->federationProviderManager->sendCloudNotification($remote, $notification); + if ($response->getStatusCode() === Http::STATUS_CREATED) { + return true; + } + + if ($response->getStatusCode() === Http::STATUS_BAD_REQUEST) { + $ocmBody = json_decode((string)$response->getBody(), true) ?? []; + if (isset($ocmBody['message']) && $ocmBody['message'] === FederationManager::OCM_RESOURCE_NOT_FOUND) { + // Remote exists but tells us the OCM notification can not be received (invalid invite data) + // So we stop retrying + return null; + } + } + + $this->logger->warning("Failed to send notification for share from $remote, received status code {code}\n{body}", [ + 'code' => $response->getStatusCode(), + 'body' => (string)$response->getBody(), + ]); + } catch (OCMProviderException $e) { + $this->logger->error("Failed to send notification for share from $remote, received OCMProviderException", ['exception' => $e]); + } + + if ($retry && $try === 0) { + $now = $this->timeFactory->getTime(); + $now += $this->getRetryDelay(1); + + // Talk data + $retryNotification = new RetryNotification(); + $retryNotification->setRemoteServer($remote); + $retryNotification->setNumAttempts(1); + $retryNotification->setNextRetry($this->timeFactory->getDateTime('@' . $now)); + + // OCM notification data + $data = $notification->getMessage(); + $retryNotification->setNotificationType($data['notificationType']); + $retryNotification->setResourceType($data['resourceType']); + $retryNotification->setProviderId($data['providerId']); + $retryNotification->setNotification(json_encode($data['notification'])); + + $this->retryNotificationMapper->insert($retryNotification); + } + + return false; + } + + public function retrySendingFailedNotifications(\DateTimeInterface $dueDateTime): void { + $retryNotifications = $this->retryNotificationMapper->getAllDue($dueDateTime); + + foreach ($retryNotifications as $retryNotification) { + $this->retrySendingFailedNotification($retryNotification); + } + } + + protected function retrySendingFailedNotification(RetryNotification $retryNotification): void { + $data = json_decode($retryNotification->getNotification(), true, flags: JSON_THROW_ON_ERROR); + if ($retryNotification->getNotificationType() === FederationManager::NOTIFICATION_ROOM_MODIFIED) { + $localToken = $data['remoteToken']; + + try { + $manager = \OCP\Server::get(Manager::class); + $room = $manager->getRoomByToken($localToken); + } catch (RoomNotFoundException) { + // Room was deleted in the meantime + return; + } + + if ($data['changedProperty'] === ARoomModifiedEvent::PROPERTY_LOBBY) { + $dateTime = $room->getLobbyTimer(); + $data['newValue'] = $room->getLobbyState(); + $data['dateTime'] = (string)$dateTime?->getTimestamp(); + } elseif ($data['changedProperty'] === ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE) { + if ($room->getActiveSince() === null) { + $data['newValue'] = null; + $data['callFlag'] = Participant::FLAG_DISCONNECTED; + } else { + $data['newValue'] = $room->getActiveSince()->getTimestamp(); + $data['callFlag'] = $room->getCallFlag(); + } + } else { + $data['newValue'] = match ($data['changedProperty']) { + ARoomModifiedEvent::PROPERTY_AVATAR => $room->getAvatar(), + ARoomModifiedEvent::PROPERTY_CALL_RECORDING => $room->getCallRecording(), + ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS => $room->getDefaultPermissions(), + ARoomModifiedEvent::PROPERTY_DESCRIPTION => $room->getDescription(), + ARoomModifiedEvent::PROPERTY_IN_CALL => $room->getCallFlag(), + ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS => $room->getMentionPermissions(), + ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION => $room->getMessageExpiration(), + ARoomModifiedEvent::PROPERTY_NAME => $room->getName(), + ARoomModifiedEvent::PROPERTY_READ_ONLY => $room->getReadOnly(), + ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT => $room->getRecordingConsent(), + ARoomModifiedEvent::PROPERTY_SIP_ENABLED => $room->getSIPEnabled(), + ARoomModifiedEvent::PROPERTY_TYPE => $room->getType(), + default => $data['newValue'], + }; + } + } + + $notification = $this->cloudFederationFactory->getCloudFederationNotification(); + $notification->setMessage( + $retryNotification->getNotificationType(), + $retryNotification->getResourceType(), + $retryNotification->getProviderId(), + $data, + ); + + $success = $this->sendUpdateToRemote($retryNotification->getRemoteServer(), $notification, $retryNotification->getNumAttempts()); + + if ($success) { + $this->retryNotificationMapper->delete($retryNotification); + } elseif ($success === null) { + $this->logger->error('Server signaled the OCM notification is not accepted at ' . $retryNotification->getRemoteServer() . ', giving up!'); + $this->retryNotificationMapper->delete($retryNotification); + } elseif ($retryNotification->getNumAttempts() === RetryNotification::MAX_NUM_ATTEMPTS) { + $this->logger->error('Failed to send notification to ' . $retryNotification->getRemoteServer() . ' ' . RetryNotification::MAX_NUM_ATTEMPTS . ' times, giving up!'); + $this->retryNotificationMapper->delete($retryNotification); + } else { + $retryNotification->setNumAttempts($retryNotification->getNumAttempts() + 1); + + $now = $this->timeFactory->getTime(); + $now += $this->getRetryDelay($retryNotification->getNumAttempts()); + + $retryNotification->setNextRetry($this->timeFactory->getDateTime('@' . $now)); + $this->retryNotificationMapper->update($retryNotification); + } + } + + /** + * First 5 attempts are retried on the next cron run. + * Attempts 6-10 we back off to cover slightly longer maintenance/downtimes (5 minutes * per attempt) + * And the last tries 11-20 are retried with ~8 hours delay + * + * This means the last retry is after ~84 hours so a downtime from Friday to Monday would be covered + */ + protected function getRetryDelay(int $attempt): int { + if ($attempt < 5) { + // Retry after "attempt" minutes + return 5 * 60; + } + + if ($attempt > 10) { + // Retry after 8 hours + return 8 * 3600; + } + + // Retry after "attempt" * 5 minutes + return $attempt * 5 * 60; + } + + protected function prepareRemoteUrl(string $remote): string { + if (!$this->addressHandler->urlContainProtocol($remote)) { + return 'https://' . $remote; + } + return $remote; + } + + protected function getServerRemoteUrl(): string { + $server = rtrim($this->url->getAbsoluteURL('/'), '/'); + if (str_ends_with($server, '/index.php')) { + $server = substr($server, 0, -10); + } + + return $server; + } +} diff --git a/lib/Federation/CloudFederationProviderTalk.php b/lib/Federation/CloudFederationProviderTalk.php new file mode 100644 index 0000000..6c49458 --- /dev/null +++ b/lib/Federation/CloudFederationProviderTalk.php @@ -0,0 +1,699 @@ +proxyCacheMessages = $cacheFactory->isAvailable() ? $cacheFactory->createDistributed(CachePrefix::FEDERATED_PCM) : null; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getShareType(): string { + return 'talk-room'; + } + + /** + * @inheritDoc + * @throws HintException + * @throws DBException + */ + #[\Override] + public function shareReceived(ICloudFederationShare $share): string { + if (!$this->config->isFederationEnabled()) { + $this->logger->debug('Received a federation invite but federation is disabled'); + throw new ProviderCouldNotAddShareException('Server does not support talk federation', '', Http::STATUS_SERVICE_UNAVAILABLE); + } + if (!$this->appConfig->getAppValueBool('federation_incoming_enabled', true)) { + $this->logger->warning('Received a federation invite but incoming federation is disabled'); + throw new ProviderCouldNotAddShareException('Server does not support talk federation', '', Http::STATUS_SERVICE_UNAVAILABLE); + } + if (!in_array($share->getShareType(), $this->getSupportedShareTypes(), true)) { + $this->logger->debug('Received a federation invite for invalid share type'); + throw new ProviderCouldNotAddShareException('Support for sharing with non-users not implemented yet', '', Http::STATUS_NOT_IMPLEMENTED); + // TODO: Implement group shares + } + + $roomType = $share->getProtocol()['roomType']; + if (!is_numeric($roomType) || !in_array((int)$roomType, $this->validSharedRoomTypes(), true)) { + $this->logger->debug('Received a federation invite for invalid room type'); + throw new ProviderCouldNotAddShareException('roomType is not a valid number', '', Http::STATUS_BAD_REQUEST); + } + + $shareSecret = $share->getShareSecret(); + $shareWith = $share->getShareWith(); + $remoteId = $share->getProviderId(); + $roomToken = $share->getResourceName(); + $roomName = $share->getProtocol()['roomName']; + $roomDefaultPermissions = $share->getProtocol()['roomDefaultPermissions'] ?? Attendee::PERMISSIONS_DEFAULT; + if (isset($share->getProtocol()['invitedCloudId'])) { + $localCloudId = $share->getProtocol()['invitedCloudId']; + } else { + $this->logger->debug('Received a federation invite without invitedCloudId, falling back to shareWith'); + $cloudId = $this->cloudIdManager->getCloudId($shareWith, null); + $localCloudId = $cloudId->getUser() . '@' . $cloudId->getRemote(); + } + $roomType = (int)$roomType; + $sharedByDisplayName = $share->getSharedByDisplayName(); + $sharedByFederatedId = $share->getSharedBy(); + $ownerDisplayName = $share->getOwnerDisplayName(); + $ownerFederatedId = $share->getOwner(); + [, $remote] = $this->addressHandler->splitUserRemote($ownerFederatedId); + + if (!$this->addressHandler->urlContainProtocol($remote)) { + // Heal federation from before Nextcloud 29.0.4 which sends requests + // without the protocol on the remote in case it is https:// + $remote = 'https://' . $remote; + } + + // if no explicit information about the person who created the share was sent + // we assume that the share comes from the owner + if ($sharedByFederatedId === null) { + $sharedByDisplayName = $ownerDisplayName; + $sharedByFederatedId = $ownerFederatedId; + } + + if ($remote && $shareSecret && $shareWith && $roomToken && $remoteId && is_string($roomName) && $roomName && $ownerDisplayName) { + $shareWithUser = $this->userManager->get($shareWith); + if ($shareWithUser === null) { + $this->logger->debug('Received a federation invite for user that could not be found'); + throw new ProviderCouldNotAddShareException('User does not exist', '', Http::STATUS_BAD_REQUEST); + } elseif (!str_starts_with($localCloudId, $shareWithUser->getUID() . '@')) { + // Fix the user ID as we also return it via the cloud federation api response in Nextcloud 30+ + $cloudId = $this->cloudIdManager->resolveCloudId($localCloudId); + $localRemote = $cloudId->getRemote(); + if (str_starts_with($localRemote, 'https://')) { + $localRemote = substr($localRemote, 8); + } + $localCloudId = $shareWithUser->getUID() . '@' . $localRemote; + } + + if ($this->config->isDisabledForUser($shareWithUser)) { + $this->logger->debug('Received a federation invite for user that is not allowed to use Talk'); + throw new ProviderCouldNotAddShareException('User does not exist', '', Http::STATUS_BAD_REQUEST); + } + + if (!$this->config->isFederationEnabledForUserId($shareWithUser)) { + $this->logger->debug('Received a federation invite for user that is not allowed to use Talk Federation'); + throw new ProviderCouldNotAddShareException('User does not exist', '', Http::STATUS_BAD_REQUEST); + } + + $invite = $this->federationManager->addRemoteRoom($shareWithUser, (int)$remoteId, $roomType, $roomName, $roomDefaultPermissions, $roomToken, $remote, $shareSecret, $sharedByFederatedId, $sharedByDisplayName, $localCloudId); + + $this->notifyAboutNewShare($shareWithUser, (string)$invite->getId(), $sharedByFederatedId, $sharedByDisplayName, $roomName, $roomToken, $remote); + return (string)$invite->getId(); + } + + $this->logger->debug('Received a federation invite with missing request data'); + throw new ProviderCouldNotAddShareException('required request data not found', '', Http::STATUS_BAD_REQUEST); + } + + /** + * @inheritDoc + */ + #[\Override] + public function notificationReceived($notificationType, $providerId, array $notification): array { + if (!is_numeric($providerId)) { + throw new BadRequestException(['providerId']); + } + switch ($notificationType) { + case FederationManager::NOTIFICATION_SHARE_ACCEPTED: + return $this->shareAccepted((int)$providerId, $notification); + case FederationManager::NOTIFICATION_SHARE_DECLINED: + return $this->shareDeclined((int)$providerId, $notification); + case FederationManager::NOTIFICATION_SHARE_UNSHARED: + return $this->shareUnshared((int)$providerId, $notification); + case FederationManager::NOTIFICATION_PARTICIPANT_MODIFIED: + return $this->participantModified((int)$providerId, $notification); + case FederationManager::NOTIFICATION_ROOM_MODIFIED: + return $this->roomModified((int)$providerId, $notification); + case FederationManager::NOTIFICATION_MESSAGE_POSTED: + return $this->messagePosted((int)$providerId, $notification); + } + + throw new BadRequestException([$notificationType]); + } + + /** + * @throws ActionNotSupportedException + * @throws ShareNotFound + * @throws AuthenticationFailedException + */ + private function shareAccepted(int $id, array $notification): array { + $attendee = $this->getLocalAttendeeAndValidate($id, $notification['sharedSecret']); + + if (!empty($notification['displayName'])) { + $attendee->setDisplayName($notification['displayName']); + $attendee->setState(Invitation::STATE_ACCEPTED); + + if (!empty($notification['cloudId'])) { + $attendee->setActorId($notification['cloudId']); + } + + $this->attendeeMapper->update($attendee); + } + + $this->session->set('talk-overwrite-actor-type', $attendee->getActorType()); + $this->session->set('talk-overwrite-actor-id', $attendee->getActorId()); + $this->session->set('talk-overwrite-actor-displayname', $attendee->getDisplayName()); + + $room = $this->manager->getRoomById($attendee->getRoomId()); + $event = new AttendeesAddedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($event); + + $this->session->remove('talk-overwrite-actor-type'); + $this->session->remove('talk-overwrite-actor-id'); + $this->session->remove('talk-overwrite-actor-displayname'); + + return []; + } + + /** + * @throws ActionNotSupportedException + * @throws ShareNotFound + * @throws AuthenticationFailedException + */ + private function shareDeclined(int $id, array $notification): array { + $attendee = $this->getLocalAttendeeAndValidate($id, $notification['sharedSecret']); + + $this->session->set('talk-overwrite-actor-type', $attendee->getActorType()); + $this->session->set('talk-overwrite-actor-id', $attendee->getActorId()); + $this->session->set('talk-overwrite-actor-displayname', $attendee->getDisplayName()); + + $room = $this->manager->getRoomById($attendee->getRoomId()); + $participant = new Participant($room, $attendee, null); + $this->participantService->removeAttendee($room, $participant, AAttendeeRemovedEvent::REASON_LEFT); + + $this->session->remove('talk-overwrite-actor-type'); + $this->session->remove('talk-overwrite-actor-id'); + $this->session->remove('talk-overwrite-actor-displayname'); + return []; + } + + /** + * @throws ActionNotSupportedException + * @throws ShareNotFound + * @throws AuthenticationFailedException + */ + private function shareUnshared(int $remoteAttendeeId, array $notification): array { + $invite = $this->getByRemoteAttendeeAndValidate($notification['remoteServerUrl'], $remoteAttendeeId, $notification['sharedSecret']); + try { + $room = $this->manager->getRoomById($invite->getLocalRoomId()); + } catch (RoomNotFoundException) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + // Sanity check to make sure the room is a remote room + if (!$room->isFederatedConversation()) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + $this->invitationMapper->delete($invite); + + try { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_USERS, $invite->getUserId()); + $this->participantService->removeAttendee($room, $participant, AAttendeeRemovedEvent::REASON_REMOVED); + } catch (ParticipantNotFoundException) { + // Never accepted the invite + } + + return []; + } + + /** + * @param int $remoteAttendeeId + * @param array{remoteServerUrl: string, sharedSecret: string, remoteToken: string, changedProperty: string, newValue: string|int, oldValue: string|int|null} $notification + * @return array + * @throws ActionNotSupportedException + * @throws AuthenticationFailedException + * @throws ShareNotFound + */ + private function participantModified(int $remoteAttendeeId, array $notification): array { + $invite = $this->getByRemoteAttendeeAndValidate($notification['remoteServerUrl'], $remoteAttendeeId, $notification['sharedSecret']); + try { + $room = $this->manager->getRoomById($invite->getLocalRoomId()); + } catch (RoomNotFoundException) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + // Sanity check to make sure the room is a remote room + if (!$room->isFederatedConversation()) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + try { + $participant = $this->participantService->getParticipant($room, $invite->getUserId()); + } catch (ParticipantNotFoundException $e) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + if ($notification['changedProperty'] === AParticipantModifiedEvent::PROPERTY_PERMISSIONS) { + $this->participantService->updatePermissions($room, $participant, Attendee::PERMISSIONS_MODIFY_SET, $notification['newValue']); + } elseif ($notification['changedProperty'] === AParticipantModifiedEvent::PROPERTY_RESEND_CALL) { + $event = new CallNotificationSendEvent($room, null, $participant); + $this->dispatcher->dispatchTyped($event); + } else { + $this->logger->debug('Update of participant property "' . $notification['changedProperty'] . '" is not handled and should not be send via federation'); + } + + return []; + } + + /** + * @param int $remoteAttendeeId + * @param array{remoteServerUrl: string, sharedSecret: string, remoteToken: string, changedProperty: string, newValue: string|int|bool|null, oldValue: string|int|bool|null, callFlag?: int, dateTime?: string, timerReached?: bool, details?: array} $notification + * @return array + * @throws ActionNotSupportedException + * @throws AuthenticationFailedException + * @throws ShareNotFound + */ + private function roomModified(int $remoteAttendeeId, array $notification): array { + $invite = $this->getByRemoteAttendeeAndValidate($notification['remoteServerUrl'], $remoteAttendeeId, $notification['sharedSecret']); + try { + $room = $this->manager->getRoomById($invite->getLocalRoomId()); + } catch (RoomNotFoundException) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + // Sanity check to make sure the room is a remote room + if (!$room->isFederatedConversation()) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + if ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE) { + if ($notification['newValue'] === null) { + $this->roomService->resetActiveSince($room, null); + } else { + $activeSince = $room->getActiveSince(); + if ($activeSince === null || $notification['newValue'] < $activeSince->getTimestamp()) { + /** + * If the host is sending a lower timestamp, we healed an early in_call update, + * so we take the older value as the host should know more specifically. + */ + $activeSince = $this->timeFactory->getDateTime('@' . $notification['newValue']); + } + $this->roomService->setActiveSince( + $room, + null, + $activeSince, + $notification['callFlag'] | $room->getCallFlag(), + !empty($notification['details'][AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT]), + ); + } + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_AVATAR) { + $this->roomService->setAvatar($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_CALL_RECORDING) { + /** @psalm-suppress InvalidArgument */ + $this->roomService->setCallRecording($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS) { + $this->roomService->setDefaultPermissions($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_DESCRIPTION) { + $this->roomService->setDescription($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_IN_CALL) { + /** + * In case the in_call update arrives before the actual active_since update, + * we fake the timestamp so we at least don't fail the request. + * When the active_since finally arrives we merge the results. + */ + $this->roomService->setActiveSince( + $room, + null, + $room->getActiveSince() ?? $this->timeFactory->getDateTime(), + $notification['newValue'], + true, + ); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_LOBBY) { + $dateTime = !empty($notification['dateTime']) ? \DateTime::createFromFormat('U', $notification['dateTime']) : null; + $this->roomService->setLobby($room, $notification['newValue'], $dateTime, $notification['timerReached'] ?? false); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS) { + /** @psalm-suppress InvalidArgument */ + $this->roomService->setMentionPermissions($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION) { + $this->roomService->setMessageExpiration($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_NAME) { + $this->roomService->setName($room, $notification['newValue'], $notification['oldValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_READ_ONLY) { + $this->roomService->setReadOnly($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT) { + /** @psalm-suppress InvalidArgument */ + $this->roomService->setRecordingConsent($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_SIP_ENABLED) { + $this->roomService->setSIPEnabled($room, $notification['newValue']); + } elseif ($notification['changedProperty'] === ARoomModifiedEvent::PROPERTY_TYPE) { + $this->roomService->setType($room, $notification['newValue']); + } else { + $this->logger->debug('Update of room property "' . $notification['changedProperty'] . '" is not handled and should not be send via federation'); + } + + return []; + } + + /** + * @param int $remoteAttendeeId + * @param array{remoteServerUrl: string, sharedSecret: string, remoteToken: string, messageData: array{remoteMessageId: int, actorType: string, actorId: string, actorDisplayName: string, messageType: string, systemMessage: string, expirationDatetime: string, message: string, messageParameter: string, creationDatetime: string, metaData: string}, unreadInfo: array{unreadMessages: int, unreadMention: bool, unreadMentionDirect: bool, lastReadMessage: int}} $notification + * @return array + * @throws ActionNotSupportedException + * @throws AuthenticationFailedException + * @throws ShareNotFound + */ + private function messagePosted(int $remoteAttendeeId, array $notification): array { + $invite = $this->getByRemoteAttendeeAndValidate($notification['remoteServerUrl'], $remoteAttendeeId, $notification['sharedSecret']); + try { + $room = $this->manager->getRoomById($invite->getLocalRoomId()); + } catch (RoomNotFoundException) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + // Sanity check to make sure the room is a remote room + if (!$room->isFederatedConversation()) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + + $removeParentMessage = null; + if ($notification['messageData']['systemMessage'] === 'message_edited' + || $notification['messageData']['systemMessage'] === 'message_deleted') { + $metaData = json_decode($notification['messageData']['metaData'], true); + if (isset($metaData['replyToMessageId'])) { + $removeParentMessage = $metaData['replyToMessageId']; + } + } + + // We transform the parameters when storing in the PCM, so we only have + // to do it once for each message. + // Note: `messageParameters` (array during parsing) vs `messageParameter` (string during sending) + $notification['messageData']['messageParameters'] = json_decode($notification['messageData']['messageParameter'], true, flags: JSON_THROW_ON_ERROR); + unset($notification['messageData']['messageParameter']); + $converted = $this->userConverter->convertMessage($room, $notification['messageData']); + $converted['messageParameter'] = json_encode($converted['messageParameters'], JSON_THROW_ON_ERROR); + unset($converted['messageParameters']); + + /** @var array{remoteMessageId: int, actorType: string, actorId: string, actorDisplayName: string, messageType: string, systemMessage: string, expirationDatetime: string, message: string, messageParameter: string, creationDatetime: string, metaData: string} $converted */ + $notification['messageData'] = $converted; + + $message = null; + if ($removeParentMessage === null) { + $message = new ProxyCacheMessage(); + $message->setLocalToken($room->getToken()); + $message->setRemoteServerUrl($notification['remoteServerUrl']); + $message->setRemoteToken($notification['remoteToken']); + $message->setRemoteMessageId($notification['messageData']['remoteMessageId']); + $message->setActorType($notification['messageData']['actorType']); + $message->setActorId($notification['messageData']['actorId']); + $message->setActorDisplayName($notification['messageData']['actorDisplayName']); + $message->setMessageType($notification['messageData']['messageType']); + $message->setSystemMessage($notification['messageData']['systemMessage']); + if ($notification['messageData']['expirationDatetime']) { + $message->setExpirationDatetime(new \DateTime($notification['messageData']['expirationDatetime'])); + } + $message->setMessage($notification['messageData']['message']); + $message->setMessageParameters($notification['messageData']['messageParameter']); + $message->setCreationDatetime(new \DateTime($notification['messageData']['creationDatetime'])); + $message->setMetaData($notification['messageData']['metaData']); + + try { + $this->proxyCacheMessageMapper->insert($message); + + $lastMessageId = $room->getLastMessageId(); + if ($notification['messageData']['remoteMessageId'] > $lastMessageId) { + $lastMessageId = (int)$notification['messageData']['remoteMessageId']; + } + + if ($notification['messageData']['systemMessage'] !== 'message_edited' + && $notification['messageData']['systemMessage'] !== 'message_deleted') { + $this->roomService->setLastMessageInfo($room, $lastMessageId, $this->timeFactory->getDateTime()); + } + + if ($this->proxyCacheMessages instanceof ICache) { + $cacheKey = sha1(json_encode([$notification['remoteServerUrl'], $notification['remoteToken']])); + $cacheData = $this->proxyCacheMessages->get($cacheKey); + if ($cacheData === null || $cacheData < $notification['messageData']['remoteMessageId']) { + $this->proxyCacheMessages->set($cacheKey, $notification['messageData']['remoteMessageId'], 300); + } + } + } catch (DBException $e) { + // DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION happens when + // multiple users are in the same conversation. We are therefore + // informed multiple times about the same remote message. + if ($e->getReason() !== DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $this->logger->error('Error saving proxy cache message failed: ' . $e->getMessage(), ['exception' => $e]); + throw $e; + } + + $message = $this->pcmService->findByRemote( + $notification['remoteServerUrl'], + $notification['remoteToken'], + $notification['messageData']['remoteMessageId'], + ); + } + } + + try { + $participant = $this->participantService->getParticipantWithActiveSession($room, $invite->getUserId()); + } catch (ParticipantNotFoundException) { + // Not accepted the invite yet + return []; + } + + if ($removeParentMessage !== null) { + try { + $this->pcmService->syncRemoteMessage($room, $participant, $removeParentMessage); + } catch (\InvalidArgumentException|CannotReachRemoteException) { + $oldMessage = $this->pcmService->findByRemote( + $notification['remoteServerUrl'], + $notification['remoteToken'], + $removeParentMessage, + ); + $this->pcmService->delete($oldMessage); + $this->logger->info('Failed to resync chat message #' . $removeParentMessage . ' after being notified by host ' . $notification['remoteServerUrl']); + } + + // Update the last activity so the left sidebar refreshes the data as well + $this->roomService->setLastMessageInfo($room, $room->getLastMessageId(), new \DateTime()); + } + + $this->logger->debug('Setting unread info for local federated user ' . $invite->getUserId() . ' in ' . $room->getToken() . ' to ' . json_encode($notification['unreadInfo']), [ + 'app' => 'spreed-federation', + ]); + + $this->participantService->updateUnreadInfoForProxyParticipant( + $participant, + $notification['unreadInfo']['unreadMessages'], + $notification['unreadInfo']['unreadMention'], + $notification['unreadInfo']['unreadMentionDirect'], + $notification['unreadInfo']['lastReadMessage'], + ); + + if ($message instanceof ProxyCacheMessage) { + $this->federationChatNotifier->handleChatMessage($room, $participant, $message, $notification); + } + + return []; + } + + /** + * @throws AuthenticationFailedException + * @throws ActionNotSupportedException + * @throws ShareNotFound + */ + private function getLocalAttendeeAndValidate( + int $attendeeId, + #[SensitiveParameter] + string $sharedSecret, + ): Attendee { + if (!$this->config->isFederationEnabled()) { + throw new ActionNotSupportedException('Server does not support Talk federation'); + } + + try { + $attendee = $this->attendeeMapper->getById($attendeeId); + } catch (Exception) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + if ($attendee->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + if ($attendee->getAccessToken() !== $sharedSecret) { + throw new AuthenticationFailedException(); + } + return $attendee; + } + + /** + * @throws ActionNotSupportedException + * @throws ShareNotFound + * @throws AuthenticationFailedException + */ + private function getByRemoteAttendeeAndValidate( + string $remoteServerUrl, + int $remoteAttendeeId, + #[SensitiveParameter] + string $sharedSecret, + ): Invitation { + if (!$this->config->isFederationEnabled()) { + throw new ActionNotSupportedException('Server does not support Talk federation'); + } + + if (!$sharedSecret) { + throw new AuthenticationFailedException(); + } + + if (!$this->addressHandler->urlContainProtocol($remoteServerUrl)) { + // Heal federation from before Nextcloud 29.0.4 which sends requests + // without the protocol on the remote in case it is https:// + $remoteServerUrl = 'https://' . $remoteServerUrl; + } + + try { + return $this->invitationMapper->getByRemoteAndAccessToken($remoteServerUrl, $remoteAttendeeId, $sharedSecret); + } catch (DoesNotExistException) { + throw new ShareNotFound(FederationManager::OCM_RESOURCE_NOT_FOUND); + } + } + + private function notifyAboutNewShare(IUser $shareWith, string $inviteId, string $sharedByFederatedId, string $sharedByName, string $roomName, string $remoteRoomToken, string $remoteServerUrl): void { + $notification = $this->notificationManager->createNotification(); + $notification->setApp(Application::APP_ID) + ->setUser($shareWith->getUID()) + ->setDateTime(new \DateTime()) + ->setObject('remote_talk_share', $inviteId) + ->setSubject('remote_talk_share', [ + 'sharedByDisplayName' => $sharedByName, + 'sharedByFederatedId' => $sharedByFederatedId, + 'roomName' => $roomName, + 'serverUrl' => $remoteServerUrl, + 'roomToken' => $remoteRoomToken, + ]); + + $this->notificationManager->notify($notification); + } + + private function validSharedRoomTypes(): array { + return [ + Room::TYPE_ONE_TO_ONE, + Room::TYPE_GROUP, + Room::TYPE_PUBLIC, + ]; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getSupportedShareTypes(): array { + return ['user']; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getFederationIdFromSharedSecret( + #[SensitiveParameter] + string $sharedSecret, + array $payload, + ): string { + $remoteServerUrl = $payload['remoteServerUrl']; + if (str_starts_with($remoteServerUrl, 'https://')) { + $remoteServerUrl = substr($remoteServerUrl, strlen('https://')); + } + + try { + $invite = $this->invitationMapper->getByRemoteServerAndAccessToken($payload['remoteServerUrl'], $sharedSecret); + return $invite->getInviterCloudId(); + } catch (DoesNotExistException) { + } + + $attendees = $this->attendeeMapper->getByAccessToken($sharedSecret); + foreach ($attendees as $attendee) { + if (str_ends_with($attendee->getActorId(), '@' . $remoteServerUrl)) { + return $attendee->getActorId(); + } + } + + return ''; + } +} diff --git a/lib/Federation/FederationManager.php b/lib/Federation/FederationManager.php new file mode 100644 index 0000000..c5d06af --- /dev/null +++ b/lib/Federation/FederationManager.php @@ -0,0 +1,279 @@ +restrictionValidator->isAllowedToInvite($user, $cloudIdToInvite); + } + + public function addRemoteRoom( + IUser $user, + int $remoteAttendeeId, + int $roomType, + string $roomName, + int $roomDefaultPermissions, + string $remoteToken, + string $remoteServerUrl, + #[SensitiveParameter] + string $sharedSecret, + string $inviterCloudId, + string $inviterDisplayName, + string $localCloudId, + ): Invitation { + $couldHaveInviteWithOtherCasing = false; + try { + $room = $this->manager->getRoomByToken($remoteToken, null, $remoteServerUrl); + $couldHaveInviteWithOtherCasing = true; + } catch (RoomNotFoundException) { + $room = $this->manager->createRemoteRoom($roomType, $roomName, $remoteToken, $remoteServerUrl); + } + + // Only update the room permissions if there are no participants in the + // remote room. Otherwise, the room permissions would be up to date + // already due to the notifications about room permission changes. + if (!$this->participantService->getNumberOfActors($room)) { + $this->roomService->setDefaultPermissions($room, $roomDefaultPermissions); + } + + if ($couldHaveInviteWithOtherCasing) { + try { + $invitation = $this->invitationMapper->getInvitationForUserByLocalRoom($room, $user->getUID(), true); + $invitation->setAccessToken($sharedSecret); + $invitation->setRemoteAttendeeId($remoteAttendeeId); + $invitation->setInviterCloudId($inviterCloudId); + $invitation->setInviterDisplayName($inviterDisplayName); + + if ($invitation->getState() === Invitation::STATE_ACCEPTED) { + try { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_USERS, $user->getUID()); + $attendee = $participant->getAttendee(); + $attendee->setAccessToken($sharedSecret); + $attendee->setRemoteId((string)$remoteAttendeeId); + $this->attendeeMapper->update($attendee); + } catch (ParticipantNotFoundException) { + $invitation->setState(Invitation::STATE_PENDING); + } + } + $this->invitationMapper->update($invitation); + + return $invitation; + } catch (DoesNotExistException) { + // Not invited with any casing already, so all good. + } + } + + $invitation = new Invitation(); + $invitation->setUserId($user->getUID()); + $invitation->setState(Invitation::STATE_PENDING); + $invitation->setLocalRoomId($room->getId()); + $invitation->setLocalCloudId($localCloudId); + $invitation->setAccessToken($sharedSecret); + $invitation->setRemoteServerUrl($remoteServerUrl); + $invitation->setRemoteToken($remoteToken); + $invitation->setRemoteAttendeeId($remoteAttendeeId); + $invitation->setInviterCloudId($inviterCloudId); + $invitation->setInviterDisplayName($inviterDisplayName); + $this->invitationMapper->insert($invitation); + + return $invitation; + } + + protected function markNotificationProcessed(string $userId, int $shareId): void { + $notification = $this->notificationManager->createNotification(); + $notification->setApp(Application::APP_ID) + ->setUser($userId) + ->setObject('remote_talk_share', (string)$shareId); + $this->notificationManager->markProcessed($notification); + } + + /** + * @throws \InvalidArgumentException + * @throws CannotReachRemoteException + */ + public function acceptRemoteRoomShare(IUser $user, int $shareId): Participant { + try { + $invitation = $this->invitationMapper->getInvitationById($shareId); + } catch (DoesNotExistException $e) { + throw new \InvalidArgumentException('invitation'); + } + if ($invitation->getUserId() !== $user->getUID()) { + throw new UnauthorizedException('user'); + } + + if ($invitation->getState() === Invitation::STATE_ACCEPTED) { + throw new \InvalidArgumentException('state'); + } + + + $cloudId = $this->cloudIdManager->getCloudId($user->getUID(), null); + + // Add user to the room + $room = $this->manager->getRoomById($invitation->getLocalRoomId()); + if ( + !$this->backendNotifier->sendShareAccepted($invitation->getRemoteServerUrl(), $invitation->getRemoteAttendeeId(), $invitation->getAccessToken(), $user->getDisplayName(), $cloudId->getId()) + ) { + throw new CannotReachRemoteException(); + } + + $participant = [ + [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + 'accessToken' => $invitation->getAccessToken(), + 'remoteId' => $invitation->getRemoteAttendeeId(), + 'invitedCloudId' => $invitation->getLocalCloudId(), + 'lastReadMessage' => $room->getLastMessageId(), + ] + ]; + $attendees = $this->participantService->addUsers($room, $participant, $user); + /** @var Attendee $attendee */ + $attendee = array_pop($attendees); + + $invitation->setState(Invitation::STATE_ACCEPTED); + $invitation->setLocalCloudId($cloudId->getId()); + $this->invitationMapper->update($invitation); + + $this->markNotificationProcessed($user->getUID(), $shareId); + + return new Participant($room, $attendee, null); + } + + /** + * @throws DoesNotExistException + */ + public function getRemoteShareById(int $shareId): Invitation { + return $this->invitationMapper->getInvitationById($shareId); + } + + /** + * @throws \InvalidArgumentException + * @throws UnauthorizedException + */ + public function rejectRemoteRoomShare(IUser $user, int $shareId): void { + try { + $invitation = $this->invitationMapper->getInvitationById($shareId); + } catch (DoesNotExistException $e) { + throw new \InvalidArgumentException('invitation'); + } + + if ($invitation->getUserId() !== $user->getUID()) { + throw new UnauthorizedException('user'); + } + + if ($invitation->getState() !== Invitation::STATE_PENDING) { + throw new \InvalidArgumentException('state'); + } + + $this->rejectInvitation($invitation, $user->getUID()); + } + + /** + * @throws \InvalidArgumentException + * @throws UnauthorizedException + */ + public function rejectByRemoveSelf(Room $room, string $userId): void { + try { + $invitation = $this->invitationMapper->getInvitationForUserByLocalRoom($room, $userId); + } catch (DoesNotExistException $e) { + throw new \InvalidArgumentException('invitation'); + } + + $this->rejectInvitation($invitation, $userId); + } + + /** + * @throws \InvalidArgumentException + * @throws UnauthorizedException + */ + protected function rejectInvitation(Invitation $invitation, string $userId): void { + $this->invitationMapper->delete($invitation); + $this->markNotificationProcessed($userId, $invitation->getId()); + + $this->backendNotifier->sendShareDeclined($invitation->getRemoteServerUrl(), $invitation->getRemoteAttendeeId(), $invitation->getAccessToken()); + } + + /** + * @param IUser $user + * @return Invitation[] + */ + public function getRemoteRoomShares(IUser $user): array { + return $this->invitationMapper->getInvitationsForUser($user); + } + + public function getNumberOfPendingInvitationsForUser(IUser $user): int { + return $this->invitationMapper->countInvitationsForUser($user, Invitation::STATE_PENDING); + } + + public function getNumberOfInvitations(Room $room): int { + return $this->invitationMapper->countInvitationsForLocalRoom($room); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/AvatarController.php b/lib/Federation/Proxy/TalkV1/Controller/AvatarController.php new file mode 100644 index 0000000..317e415 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/AvatarController.php @@ -0,0 +1,103 @@ + + * @throws CannotReachRemoteException + * + * 200: Room avatar returned + */ + public function getAvatar(Room $room, ?Participant $participant, ?Invitation $invitation, bool $darkTheme): FileDisplayResponse { + if ($participant === null && $invitation === null) { + throw new CannotReachRemoteException('Must receive either participant or invitation'); + } + + $proxy = $this->proxy->get( + $participant ? $participant->getAttendee()->getInvitedCloudId() : $invitation->getLocalCloudId(), + $participant ? $participant->getAttendee()->getAccessToken() : $invitation->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/room/' . $room->getRemoteToken() . '/avatar' . ($darkTheme ? '/dark' : ''), + ); + + if ($proxy->getStatusCode() !== Http::STATUS_OK) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode(), (string)$proxy->getBody()); + throw new CannotReachRemoteException('Avatar request had unexpected status code'); + } + + $content = $proxy->getBody(); + if ($content === '') { + throw new CannotReachRemoteException('No avatar content received'); + } + + $file = new InMemoryFile($room->getToken(), $content); + + $response = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => $file->getMimeType()]); + // Cache for 1 day + $response->cacheFor(60 * 60 * 24, false, true); + return $response; + } + + /** + * @see \OCA\Talk\Controller\AvatarController::getUserProxyAvatar() + * + * @return FileDisplayResponse + * @throws CannotReachRemoteException + * + * 200: User avatar returned + */ + public function getUserProxyAvatar(string $remoteServer, string $user, int $size, bool $darkTheme): FileDisplayResponse { + $proxy = $this->proxy->get( + null, + null, + $remoteServer . '/index.php/avatar/' . $user . '/' . $size . ($darkTheme ? '/dark' : ''), + ); + + if ($proxy->getStatusCode() !== Http::STATUS_OK) { + if ($proxy->getStatusCode() !== Http::STATUS_NOT_FOUND) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode(), (string)$proxy->getBody()); + } + throw new CannotReachRemoteException('Avatar request had unexpected status code'); + } + + $content = $proxy->getBody(); + if ($content === '') { + throw new CannotReachRemoteException('No avatar content received'); + } + + $file = new InMemoryFile($user, $content); + + $response = new FileDisplayResponse($file, Http::STATUS_OK, ['Content-Type' => $file->getMimeType()]); + // Cache for 1 day + $response->cacheFor(60 * 60 * 24, false, true); + return $response; + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/CallController.php b/lib/Federation/Proxy/TalkV1/Controller/CallController.php new file mode 100644 index 0000000..a2fee70 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/CallController.php @@ -0,0 +1,215 @@ +, array{}> + * @throws CannotReachRemoteException + * + * 200: List of peers in the call returned + */ + public function getPeersForCall(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/call/' . $room->getRemoteToken(), + ); + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + + /** @var list $data */ + $data = $this->userConverter->convertAttendees($room, $data, 'actorType', 'actorId', 'displayName'); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + return new DataResponse($data, $statusCode); + } + + /** + * @see \OCA\Talk\Controller\CallController::joinFederatedCall() + * + * @param Room $room the federated room to join the call in + * @param Participant $participant the federated user that will join the + * call; the participant must have a session + * @param int<0, 15> $flags In-Call flags + * @psalm-param int-mask-of $flags + * @param bool $silent Join the call silently + * @param bool $recordingConsent Agreement to be recorded + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Federated user is now in the call + * 400: Conditions to join not met + * 404: Room not found + */ + public function joinFederatedCall(Room $room, Participant $participant, int $flags, bool $silent, bool $recordingConsent): DataResponse { + $options = [ + 'sessionId' => $participant->getSession()->getSessionId(), + 'flags' => $flags, + 'silent' => $silent, + 'recordingConsent' => $recordingConsent, + ]; + + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/call/' . $room->getRemoteToken() . '/federation', + $options, + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_BAD_REQUEST, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + if ($statusCode === Http::STATUS_BAD_REQUEST) { + /** @var array{error: string} $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_BAD_REQUEST]); + return new DataResponse($data, $statusCode); + } + + return new DataResponse(null, $statusCode); + } + + /** + * @see \OCA\Talk\Controller\CallController::ringAttendee() + * + * @param int $attendeeId ID of the attendee to ring + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Attendee rang successfully + * 400: Ringing attendee is not possible + * 404: Attendee could not be found + */ + public function ringAttendee(Room $room, Participant $participant, int $attendeeId): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/call/' . $room->getRemoteToken() . '/ring/' . $attendeeId, + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_BAD_REQUEST, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + if ($statusCode === Http::STATUS_BAD_REQUEST) { + /** @var array{error: string} $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_BAD_REQUEST]); + return new DataResponse($data, $statusCode); + } + + return new DataResponse(null, $statusCode); + } + + /** + * @see \OCA\Talk\Controller\CallController::updateFederatedCallFlags() + * + * @param Room $room the federated room to update the call flags in + * @param Participant $participant the federated user to update the call + * flags; the participant must have a session + * @param int<0, 15> $flags New flags + * @psalm-param int-mask-of $flags New flags + * @return DataResponse + * @throws CannotReachRemoteException + * + * 200: In-call flags updated successfully for federated user + * 400: Updating in-call flags is not possible + * 404: Room not found + */ + public function updateFederatedCallFlags(Room $room, Participant $participant, int $flags): DataResponse { + $options = [ + 'sessionId' => $participant->getSession()->getSessionId(), + 'flags' => $flags, + ]; + + $proxy = $this->proxy->put( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/call/' . $room->getRemoteToken() . '/federation', + $options, + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_BAD_REQUEST, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + return new DataResponse(null, $statusCode); + } + + /** + * @see \OCA\Talk\Controller\CallController::leaveFederatedCall() + * + * @param Room $room the federated room to leave the call in + * @param Participant $participant the federated user that will leave the + * call; the participant must have a session + * @return DataResponse + * @throws CannotReachRemoteException + * + * 200: Federated user left the call + * 404: Room not found + */ + public function leaveFederatedCall(Room $room, Participant $participant): DataResponse { + $options = [ + 'sessionId' => $participant->getSession()->getSessionId(), + ]; + + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/call/' . $room->getRemoteToken() . '/federation', + $options, + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + return new DataResponse(null, $statusCode); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/ChatController.php b/lib/Federation/Proxy/TalkV1/Controller/ChatController.php new file mode 100644 index 0000000..79df4ca --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/ChatController.php @@ -0,0 +1,539 @@ +proxyCacheMessages = $cacheFactory->isAvailable() ? $cacheFactory->createDistributed(CachePrefix::FEDERATED_PCM) : null; + } + + /** + * @see \OCA\Talk\Controller\ChatController::sendMessage() + * + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 201: Message sent successfully + * 400: Sending message is not possible + * 404: Actor not found + * 413: Message too long + * 429: Mention rate limit exceeded (guests only) + */ + public function sendMessage(Room $room, Participant $participant, string $message, string $referenceId, int $replyTo, bool $silent, string $threadTitle, int $threadId): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken(), + [ + 'message' => $message, + 'actorDisplayName' => $participant->getAttendee()->getDisplayName(), + 'referenceId' => $referenceId, + 'replyTo' => $replyTo, + 'silent' => $silent, + 'threadTitle' => $threadTitle, + 'threadId' => $threadId, + ], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_CREATED) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + Http::STATUS_REQUEST_ENTITY_TOO_LARGE, + Http::STATUS_TOO_MANY_REQUESTS, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + /** @var array{error: string} $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_CREATED]); + return new DataResponse($data, $statusCode); + } + + /** @var ?TalkChatMessageWithParent $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_CREATED]); + if (!empty($data)) { + $data = $this->userConverter->convertMessage($room, $data); + } else { + $data = null; + } + + $headers = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $headers['X-Chat-Last-Common-Read'] = (string)(int)$proxy->getHeader('X-Chat-Last-Common-Read'); + } + + return new DataResponse( + $data, + Http::STATUS_CREATED, + $headers, + ); + } + + /** + * @return DataResponse, array{'X-Chat-Last-Common-Read'?: numeric-string, X-Chat-Last-Given?: numeric-string}>|DataResponse + * @throws CannotReachRemoteException + * + * 200: Messages returned + * 304: No messages + * + * @see \OCA\Talk\Controller\ChatController::getMessageContext() + */ + public function receiveMessages( + Room $room, + Participant $participant, + int $lookIntoFuture, + int $limit, + int $lastKnownMessageId, + int $lastCommonReadId, + int $timeout, + int $setReadMarker, + int $includeLastKnown, + int $noStatusUpdate, + int $markNotificationsAsRead): DataResponse { + $cacheKey = sha1(json_encode([$room->getRemoteServer(), $room->getRemoteToken()])); + + + if ($lookIntoFuture && $markNotificationsAsRead && $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $this->notifier->markMentionNotificationsRead($room, $participant->getAttendee()->getActorId()); + } + + if ($lookIntoFuture) { + if ($this->proxyCacheMessages instanceof ICache) { + for ($i = 0; $i <= $timeout; $i++) { + $cacheData = (int)$this->proxyCacheMessages->get($cacheKey); + if ($lastKnownMessageId !== $cacheData) { + break; + } + sleep(1); + } + } else { + // Poor-mans timeout, should later on cancel/trigger earlier, + // by checking the PCM database table + sleep(max(0, $timeout - 5)); + } + } + + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken(), + [ + 'lookIntoFuture' => $lookIntoFuture, + 'limit' => $limit, + 'lastKnownMessageId' => $lastKnownMessageId, + 'lastCommonReadId' => $lastCommonReadId, + 'timeout' => 0, + 'setReadMarker' => $setReadMarker, + 'includeLastKnown' => $includeLastKnown, + 'noStatusUpdate' => $noStatusUpdate, + 'markNotificationsAsRead' => $markNotificationsAsRead, + ], + ); + + if ($lookIntoFuture && $setReadMarker) { + $this->participantService->updateUnreadInfoForProxyParticipant($participant, + 0, + false, + false, + (int)($proxy->getHeader('X-Chat-Last-Given') ?: $lastKnownMessageId), + ); + } + + if ($proxy->getStatusCode() === Http::STATUS_NOT_MODIFIED) { + if ($lookIntoFuture && $this->proxyCacheMessages instanceof ICache) { + $cacheData = $this->proxyCacheMessages->get($cacheKey); + if ($cacheData === null || $cacheData < $lastKnownMessageId) { + $this->proxyCacheMessages->set($cacheKey, $lastKnownMessageId, 300); + } + } + return new DataResponse(null, Http::STATUS_NOT_MODIFIED); + } + + $headers = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $headers['X-Chat-Last-Common-Read'] = (string)(int)$proxy->getHeader('X-Chat-Last-Common-Read'); + } + if ($proxy->getHeader('X-Chat-Last-Given')) { + $headers['X-Chat-Last-Given'] = (string)(int)$proxy->getHeader('X-Chat-Last-Given'); + if ($lookIntoFuture && $this->proxyCacheMessages instanceof ICache) { + $cacheData = $this->proxyCacheMessages->get($cacheKey); + if ($cacheData === null || $cacheData < $headers['X-Chat-Last-Given']) { + $this->proxyCacheMessages->set($cacheKey, (int)$headers['X-Chat-Last-Given'], 300); + } + } + } + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + /** @var list $data */ + $data = $this->userConverter->convertMessages($room, $data); + + return new DataResponse($data, Http::STATUS_OK, $headers); + } + + /** + * @return DataResponse, array{'X-Chat-Last-Common-Read'?: numeric-string, X-Chat-Last-Given?: numeric-string}>|DataResponse + * @throws CannotReachRemoteException + * + * 200: Message context returned + * 304: No messages + * + * @see \OCA\Talk\Controller\ChatController::getMessageContext() + */ + public function getMessageContext(Room $room, Participant $participant, int $messageId, int $limit): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/' . $messageId . '/context', + [ + 'limit' => $limit, + ], + ); + + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $this->notifier->markMentionNotificationsRead($room, $participant->getAttendee()->getActorId()); + } + + if ($proxy->getStatusCode() === Http::STATUS_NOT_MODIFIED) { + return new DataResponse(null, Http::STATUS_NOT_MODIFIED); + } + + $headers = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $headers['X-Chat-Last-Common-Read'] = (string)(int)$proxy->getHeader('X-Chat-Last-Common-Read'); + } + if ($proxy->getHeader('X-Chat-Last-Given')) { + $headers['X-Chat-Last-Given'] = (string)(int)$proxy->getHeader('X-Chat-Last-Given'); + } + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + /** @var list $data */ + $data = $this->userConverter->convertMessages($room, $data); + + return new DataResponse($data, Http::STATUS_OK, $headers); + } + + /** + * @return DataResponse>, array{}> + * @throws CannotReachRemoteException + * + * 200: List of shared objects messages of each type returned + * + * @see \OCA\Talk\Controller\ChatController::getObjectsSharedInRoomOverview() + */ + public function getObjectsSharedInRoomOverview(Room $room, Participant $participant, int $limit): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/share/overview', + [ + 'limit' => $limit, + ], + ); + + // We allow "200 OK" and "406 Not Acceptable" here, so that 33 against 32 and before is working well + /** @var array> $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_NOT_ACCEPTABLE]); + + $result = []; + foreach ($data as $type => $items) { + $result[$type] = array_values($this->userConverter->convertMessages($room, $items)); + } + + /** @var array> $result */ + return new DataResponse($result, Http::STATUS_OK); + } + + /** + * @return DataResponse, array{}> + * @throws CannotReachRemoteException + * + * 200: List of shared objects messages returned + * + * @see \OCA\Talk\Controller\ChatController::getObjectsSharedInRoom() + */ + public function getObjectsSharedInRoom(Room $room, Participant $participant, string $objectType, int $lastKnownMessageId, int $limit): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/share', + [ + 'objectType' => $objectType, + 'lastKnownMessageId' => $lastKnownMessageId, + 'limit' => $limit, + ], + ); + + // We allow "200 OK" and "406 Not Acceptable" here, so that 33 against 32 and before is working well + /** @var array $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_NOT_ACCEPTABLE]); + /** @var array $data */ + $data = $this->userConverter->convertMessages($room, $data); + + return new DataResponse($data, Http::STATUS_OK); + } + + /** + * @return DataResponse|DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Message edited successfully + * 202: Message edited successfully, but a bot or Matterbridge is configured, so the information can be replicated to other services + * 400: Editing message is not possible, e.g. when the new message is empty or the message is too old + * 403: Missing permissions to edit message + * 404: Message not found + * 405: Editing this message type is not allowed + * + * @see \OCA\Talk\Controller\ChatController::editMessage() + */ + public function editMessage(Room $room, Participant $participant, int $messageId, string $message): DataResponse { + $proxy = $this->proxy->put( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/' . $messageId, + [ + 'message' => $message, + ], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK && $statusCode !== Http::STATUS_ACCEPTED) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_FORBIDDEN, + Http::STATUS_NOT_FOUND, + Http::STATUS_METHOD_NOT_ALLOWED, + Http::STATUS_REQUEST_ENTITY_TOO_LARGE, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + $data = ['error' => 'status']; + } elseif ($statusCode === Http::STATUS_BAD_REQUEST) { + /** @var array{error: string} $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_BAD_REQUEST]); + } else { + $data = []; + } + return new DataResponse($data, $statusCode); + } + + /** @var TalkChatMessageWithParent $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_ACCEPTED]); + $data = $this->userConverter->convertMessage($room, $data); + + $headers = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $headers['X-Chat-Last-Common-Read'] = (string)(int)$proxy->getHeader('X-Chat-Last-Common-Read'); + } + + return new DataResponse( + $data, + $statusCode, + $headers, + ); + } + + /** + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Message deleted successfully + * 202: Message deleted successfully, but a bot or Matterbridge is configured, so the information can be replicated elsewhere + * 400: Deleting message is not possible + * 403: Missing permissions to delete message + * 404: Message not found + * 405: Deleting this message type is not allowed + * + * @see \OCA\Talk\Controller\ChatController::deleteMessage() + */ + public function deleteMessage(Room $room, Participant $participant, int $messageId): DataResponse { + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/' . $messageId, + ); + + /** @var Http::STATUS_OK|Http::STATUS_ACCEPTED|Http::STATUS_BAD_REQUEST|Http::STATUS_FORBIDDEN|Http::STATUS_NOT_FOUND|Http::STATUS_REQUEST_ENTITY_TOO_LARGE $statusCode */ + $statusCode = $proxy->getStatusCode(); + + if ($statusCode !== Http::STATUS_OK && $statusCode !== Http::STATUS_ACCEPTED) { + if (in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_FORBIDDEN, + Http::STATUS_NOT_FOUND, + Http::STATUS_REQUEST_ENTITY_TOO_LARGE, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + return new DataResponse([], $statusCode); + } + + /** @var TalkChatMessageWithParent $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_ACCEPTED]); + $data = $this->userConverter->convertMessage($room, $data); + + $headers = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $headers['X-Chat-Last-Common-Read'] = (string)(int)$proxy->getHeader('X-Chat-Last-Common-Read'); + } + + return new DataResponse( + $data, + $statusCode, + $headers, + ); + } + + /** + * @see \OCA\Talk\Controller\ChatController::setReadMarker() + * + * @param 'json'|'xml' $responseFormat + * @return DataResponse + * @throws CannotReachRemoteException + * + * 200: List of mention suggestions returned + */ + public function setReadMarker(Room $room, Participant $participant, string $responseFormat, ?int $lastReadMessage): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/read', + $lastReadMessage !== null ? [ + 'lastReadMessage' => $lastReadMessage, + ] : [], + ); + + /** @var TalkRoom $data */ + $data = $this->proxy->getOCSData($proxy); + + $this->participantService->updateUnreadInfoForProxyParticipant( + $participant, + $data['unreadMessages'], + $data['unreadMention'], + $data['unreadMentionDirect'], + $data['lastReadMessage'], + ); + + $headers = $lastCommonRead = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $lastCommonRead[$room->getId()] = (int)$proxy->getHeader('X-Chat-Last-Common-Read'); + $headers['X-Chat-Last-Common-Read'] = (string)$lastCommonRead[$room->getId()]; + } + + return new DataResponse($this->roomFormatter->formatRoom( + $responseFormat, + $lastCommonRead, + $room, + $participant, + ), Http::STATUS_OK, $headers); + } + + /** + * @see \OCA\Talk\Controller\ChatController::markUnread() + * + * @param 'json'|'xml' $responseFormat + * @return DataResponse + * @throws CannotReachRemoteException + * + * 200: List of mention suggestions returned + */ + public function markUnread(Room $room, Participant $participant, string $responseFormat): DataResponse { + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/read', + ); + + /** @var TalkRoom $data */ + $data = $this->proxy->getOCSData($proxy); + + $this->participantService->updateUnreadInfoForProxyParticipant( + $participant, + $data['unreadMessages'], + $data['unreadMention'], + $data['unreadMentionDirect'], + $data['lastReadMessage'], + ); + + $headers = $lastCommonRead = []; + if ($proxy->getHeader('X-Chat-Last-Common-Read')) { + $lastCommonRead[$room->getId()] = (int)$proxy->getHeader('X-Chat-Last-Common-Read'); + $headers['X-Chat-Last-Common-Read'] = (string)$lastCommonRead[$room->getId()]; + } + + return new DataResponse($this->roomFormatter->formatRoom( + $responseFormat, + $lastCommonRead, + $room, + $participant, + ), Http::STATUS_OK, $headers); + } + + /** + * @see \OCA\Talk\Controller\ChatController::mentions() + * + * @return DataResponse, array{}> + * @throws CannotReachRemoteException + * + * 200: List of mention suggestions returned + */ + public function mentions(Room $room, Participant $participant, string $search, int $limit, bool $includeStatus): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/mentions', + [ + 'search' => $search, + 'limit' => $limit, + 'includeStatus' => $includeStatus, + ], + ); + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + /** @var list $data */ + $data = $this->userConverter->convertAttendees($room, $data, 'source', 'id', 'label'); + + // FIXME post-load status information + return new DataResponse($data, Http::STATUS_OK); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/PollController.php b/lib/Federation/Proxy/TalkV1/Controller/PollController.php new file mode 100644 index 0000000..cf7c2f9 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/PollController.php @@ -0,0 +1,258 @@ +, array{}>|DataResponse, array{}> + * @throws CannotReachRemoteException + * + * 200: Polls returned + * 404: Polls not found + * + * @see \OCA\Talk\Controller\PollController::showPoll() + */ + public function getDraftsForRoom(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken() . '/drafts', + ); + + $status = $proxy->getStatusCode(); + if ($status === Http::STATUS_NOT_FOUND || $status === Http::STATUS_FORBIDDEN) { + return new DataResponse([], $status); + } + + /** @var list $list */ + $list = $this->proxy->getOCSData($proxy); + + $data = []; + foreach ($list as $poll) { + $data[] = $this->userConverter->convertPoll($room, $poll); + } + + return new DataResponse($data); + } + + /** + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Poll returned + * 404: Poll not found + * + * @see \OCA\Talk\Controller\PollController::showPoll() + */ + public function showPoll(Room $room, Participant $participant, int $pollId): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken() . '/' . $pollId, + ); + + if ($proxy->getStatusCode() === Http::STATUS_NOT_FOUND) { + /** @var array{error?: string} $data */ + $data = $this->proxy->getOCSData($proxy); + return new DataResponse(['error' => $data['error'] ?? 'poll'], Http::STATUS_NOT_FOUND); + } + + /** @var TalkPoll $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertPoll($room, $data); + + return new DataResponse($data); + } + + /** + * @param list $optionIds + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Voted successfully + * 400: Voting is not possible + * 404: Poll not found + * + * @see \OCA\Talk\Controller\PollController::votePoll() + */ + public function votePoll(Room $room, Participant $participant, int $pollId, array $optionIds): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken() . '/' . $pollId, + ['optionIds' => $optionIds], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + /** @var array{error?: string} $data */ + $data = $this->proxy->getOCSData($proxy); + return new DataResponse(['error' => $data['error'] ?? 'poll'], $statusCode); + } + + /** @var TalkPoll $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertPoll($room, $data); + + return new DataResponse($data); + } + + + /** + * @return DataResponse|DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Draft created successfully + * 201: Poll created successfully + * 400: Creating poll is not possible + * + * @see \OCA\Talk\Controller\PollController::createPoll() + */ + public function createPoll(Room $room, Participant $participant, string $question, array $options, int $resultMode, int $maxVotes, bool $draft): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken(), + [ + 'question' => $question, + 'options' => $options, + 'resultMode' => $resultMode, + 'maxVotes' => $maxVotes, + 'draft' => $draft, + ], + ); + + $status = $proxy->getStatusCode(); + if ($status === Http::STATUS_BAD_REQUEST) { + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_BAD_REQUEST]); + return new DataResponse($data, Http::STATUS_BAD_REQUEST); + } + + /** @var TalkPoll $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_CREATED]); + $data = $this->userConverter->convertPoll($room, $data); + + if ($status === Http::STATUS_OK) { + return new DataResponse($data); + } + return new DataResponse($data, Http::STATUS_CREATED); + } + + /** + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Draft created successfully + * 201: Poll created successfully + * 400: Creating poll is not possible + * + * @see \OCA\Talk\Controller\PollController::createPoll() + */ + public function updateDraftPoll(int $pollId, Room $room, Participant $participant, string $question, array $options, int $resultMode, int $maxVotes): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken() . '/draft/' . $pollId, + [ + 'question' => $question, + 'options' => $options, + 'resultMode' => $resultMode, + 'maxVotes' => $maxVotes + ], + ); + + $status = $proxy->getStatusCode(); + if ($status === Http::STATUS_BAD_REQUEST) { + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_BAD_REQUEST]); + return new DataResponse($data, Http::STATUS_BAD_REQUEST); + } + + /** @var TalkPollDraft $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_OK, Http::STATUS_CREATED]); + $data = $this->userConverter->convertPoll($room, $data); + + if ($status === Http::STATUS_OK) { + return new DataResponse($data); + } + return new DataResponse($data); + } + + /** + * @return DataResponse|DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Poll closed successfully + * 400: Poll already closed + * 403: Missing permissions to close poll + * 404: Poll not found + * + * @see \OCA\Talk\Controller\PollController::closePoll() + */ + public function closePoll(Room $room, Participant $participant, int $pollId): DataResponse { + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/poll/' . $room->getRemoteToken() . '/' . $pollId, + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_FORBIDDEN, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + /** @var array{error?: string} $data */ + $data = $this->proxy->getOCSData($proxy); + + if ($data['error'] !== PollPropertyException::REASON_POLL) { + $this->logger->error('Unhandled error in ' . __METHOD__ . ': ' . $data['error']); + } + + return new DataResponse(['error' => PollPropertyException::REASON_POLL], $statusCode); + } + + /** @var TalkPoll $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertPoll($room, $data); + + return new DataResponse($data); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/ReactionController.php b/lib/Federation/Proxy/TalkV1/Controller/ReactionController.php new file mode 100644 index 0000000..4cb454a --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/ReactionController.php @@ -0,0 +1,166 @@ +>|\stdClass, array{}>|DataResponse + * + * 200: Reaction already existed + * 201: Reaction added successfully + * 400: Adding reaction is not possible + * 404: Message not found + * + * @see \OCA\Talk\Controller\ReactionController::react() + */ + public function react(Room $room, Participant $participant, int $messageId, string $reaction, string $format): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/reaction/' . $room->getRemoteToken() . '/' . $messageId, + [ + 'reaction' => $reaction, + ], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK && $statusCode !== Http::STATUS_CREATED) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + return new DataResponse(null, $statusCode); + } + + /** @var array> $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_CREATED, Http::STATUS_OK]); + $data = $this->userConverter->convertReactionsList($room, $data); + + return new DataResponse($this->formatReactions($format, $data), $statusCode); + } + + /** + * Delete a reaction from a message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @param string $reaction Emoji to remove + * @return DataResponse>|\stdClass, array{}>|DataResponse + * + * 200: Reaction deleted successfully + * 400: Deleting reaction is not possible + * 404: Message not found + * + * @see \OCA\Talk\Controller\ReactionController::delete() + */ + public function delete(Room $room, Participant $participant, int $messageId, string $reaction, string $format): DataResponse { + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/reaction/' . $room->getRemoteToken() . '/' . $messageId, + [ + 'reaction' => $reaction, + ], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + return new DataResponse(null, $statusCode); + } + + /** @var array> $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertReactionsList($room, $data); + + return new DataResponse($this->formatReactions($format, $data), $statusCode); + } + + + /** + * Get a list of reactions for a message + * + * @param int $messageId ID of the message + * @psalm-param non-negative-int $messageId + * @param string|null $reaction Emoji to filter + * @return DataResponse>|\stdClass, array{}>|DataResponse + * + * 200: Reactions returned + * 404: Message or reaction not found + * + * @see \OCA\Talk\Controller\ReactionController::getReactions() + */ + public function getReactions(Room $room, Participant $participant, int $messageId, ?string $reaction, string $format): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/reaction/' . $room->getRemoteToken() . '/' . $messageId, + $reaction === null ? [] : [ + 'reaction' => $reaction, + ], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if ($statusCode !== Http::STATUS_NOT_FOUND) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + } + return new DataResponse(null, Http::STATUS_NOT_FOUND); + } + + /** @var array> $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertReactionsList($room, $data); + + return new DataResponse($this->formatReactions($format, $data), $statusCode); + } + + /** + * @param array> $reactions + * @return array>|\stdClass + */ + protected function formatReactions(string $format, array $reactions): array|\stdClass { + if ($format === 'json' && empty($reactions)) { + // Cheating here to make sure the reactions array is always a + // JSON object on the API, even when there is no reaction at all. + return new \stdClass(); + } + + return $reactions; + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/RoomController.php b/lib/Federation/Proxy/TalkV1/Controller/RoomController.php new file mode 100644 index 0000000..4ef045d --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/RoomController.php @@ -0,0 +1,169 @@ +, array{X-Nextcloud-Has-User-Statuses?: bool}> + * @throws CannotReachRemoteException + * + * 200: Participants returned + * 403: Missing permissions for getting participants + */ + public function getParticipants(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/room/' . $room->getRemoteToken() . '/participants', + ); + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + + /** @var list $data */ + $data = $this->userConverter->convertAttendees($room, $data, 'actorType', 'actorId', 'displayName'); + $headers = []; + if ($proxy->getHeader('X-Nextcloud-Has-User-Statuses')) { + $headers['X-Nextcloud-Has-User-Statuses'] = (bool)$proxy->getHeader('X-Nextcloud-Has-User-Statuses'); + } + + return new DataResponse($data, Http::STATUS_OK, $headers); + } + + /** + * @see \OCA\Talk\Controller\RoomController::joinFederatedRoom() + * + * @param Room $room the federated room to join + * @param Participant $participant the federated user to will join the room; + * the participant must have a session + * @return DataResponse, array{X-Nextcloud-Talk-Proxy-Hash: string}> + * @throws CannotReachRemoteException + * + * 200: Federated user joined the room + * 404: Room not found + */ + public function joinFederatedRoom(Room $room, Participant $participant): DataResponse { + $options = [ + 'sessionId' => $participant->getSession()->getSessionId(), + ]; + + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/room/' . $room->getRemoteToken() . '/federation/active', + $options, + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + $headers = ['X-Nextcloud-Talk-Proxy-Hash' => $this->proxy->overwrittenRemoteTalkHash($proxy->getHeader('X-Nextcloud-Talk-Hash'))]; + + /** @var TalkRoom[] $data */ + $data = $this->proxy->getOCSData($proxy); + + $data = $this->userConverter->convertAttendee($room, $data, 'actorType', 'actorId', 'displayName'); + + return new DataResponse($data, $statusCode, $headers); + } + + /** + * @see \OCA\Talk\Controller\RoomController::leaveFederatedRoom() + * + * @param Room $room the federated room to leave + * @param Participant $participant the federated user that will leave the + * room; the participant must have a session + * @return DataResponse, array{}> + * @throws CannotReachRemoteException + * + * 200: Federated user left the room + */ + public function leaveFederatedRoom(Room $room, Participant $participant): DataResponse { + $options = [ + 'sessionId' => $participant->getSession()->getSessionId(), + ]; + + $proxy = $this->proxy->delete( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/room/' . $room->getRemoteToken() . '/federation/active', + $options, + ); + + // STATUS_NOT_FOUND is not taken into account, as it should happen only + // for non-federation requests. + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + return new DataResponse([], $statusCode); + } + + /** + * @see \OCA\Talk\Controller\RoomController::getCapabilities() + * + * @return DataResponse, array{X-Nextcloud-Talk-Hash: string}> + * @throws CannotReachRemoteException + * + * 200: Get capabilities successfully + */ + public function getCapabilities(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v4/room/' . $room->getRemoteToken() . '/capabilities', + ); + + /** @var TalkCapabilities|array $data */ + $data = $this->proxy->getOCSData($proxy); + + $headers = [ + 'X-Nextcloud-Talk-Hash' => $this->proxy->overwrittenRemoteTalkHash($proxy->getHeader('X-Nextcloud-Talk-Hash')), + ]; + + return new DataResponse($data, Http::STATUS_OK, $headers); + } + + /** + * @return array|\stdClass + */ + protected function emptyArray(): array|\stdClass { + // Cheating here to make sure the array is always a + // JSON object on the API, even when there is no entry at all. + return new \stdClass(); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/SignalingController.php b/lib/Federation/Proxy/TalkV1/Controller/SignalingController.php new file mode 100644 index 0000000..67a1c11 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/SignalingController.php @@ -0,0 +1,58 @@ +|DataResponse, array{}> + * @throws CannotReachRemoteException + * + * 200: Signaling settings returned + * 404: Room not found + */ + public function getSettings(Room $room, Participant $participant): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v3/signaling/settings', + [ + 'token' => $room->getRemoteToken(), + ], + ); + + $statusCode = $proxy->getStatusCode(); + if (!in_array($statusCode, [Http::STATUS_OK, Http::STATUS_NOT_FOUND], true)) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $proxy->getStatusCode()); + throw new CannotReachRemoteException(); + } + + /** @var TalkSignalingSettings|array $data */ + $data = $this->proxy->getOCSData($proxy); + + return new DataResponse($data, $statusCode); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Controller/ThreadController.php b/lib/Federation/Proxy/TalkV1/Controller/ThreadController.php new file mode 100644 index 0000000..afcfadb --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Controller/ThreadController.php @@ -0,0 +1,197 @@ +, array{}> + * @throws CannotReachRemoteException + * + * 200: List of threads returned + */ + public function getRecentActiveThreads(Room $room, Participant $participant, int $limit): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/threads/recent', + [ + 'limit' => $limit, + ], + ); + + /** @var list $data */ + $data = $this->proxy->getOCSData($proxy); + if (!empty($data)) { + $data = $this->userConverter->convertThreadInfos($room, $data); + } + + return new DataResponse($data); + } + + /** + * @see \OCA\Talk\Controller\ThreadController::getThread() + * + * @psalm-param non-negative-int $threadId + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Thread info returned + * 404: Thread not found + */ + public function getThread(Room $room, Participant $participant, int $threadId): DataResponse { + $proxy = $this->proxy->get( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/threads/' . $threadId, + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if ($statusCode !== Http::STATUS_NOT_FOUND) { + $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + $data = ['error' => 'status']; + } else { + /** @var array{error: 'thread'} $data */ + $data = $this->proxy->getOCSData($proxy, [Http::STATUS_NOT_FOUND]); + } + return new DataResponse($data, Http::STATUS_NOT_FOUND); + } + + /** @var TalkThreadInfo $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertThreadInfo($room, $data); + + return new DataResponse($data, Http::STATUS_OK); + } + + /** + * @see \OCA\Talk\Controller\ThreadController::setNotificationLevel() + * + * @psalm-param non-negative-int $threadId + * @return DataResponse|DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Thread renamed successfully + * 400: When the provided title is empty + * 404: Thread not found + */ + public function renameThread(Room $room, Participant $participant, int $threadId, string $threadTitle): DataResponse { + $proxy = $this->proxy->put( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/threads/' . $threadId, + ['threadTitle' => $threadTitle], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + $data = ['error' => 'thread']; + } elseif ($statusCode === Http::STATUS_BAD_REQUEST) { + /** @var array{error: 'title'} $data */ + $data = $this->proxy->getOCSData($proxy, [ + Http::STATUS_BAD_REQUEST, + ]); + } else { + /** @var array{error: 'thread'} $data */ + $data = $this->proxy->getOCSData($proxy, [ + Http::STATUS_NOT_FOUND, + ]); + } + return new DataResponse($data, $statusCode); + } + + /** @var TalkThreadInfo $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertThreadInfo($room, $data); + + return new DataResponse($data, Http::STATUS_OK); + } + + + /** + * @see \OCA\Talk\Controller\ThreadController::setNotificationLevel() + * + * @psalm-param non-negative-int $messageId + * @psalm-param Participant::NOTIFY_* $level + * @return DataResponse|DataResponse + * @throws CannotReachRemoteException + * + * 200: Successfully set notification level for thread + * 400: Notification level was invalid + * 404: Message or top most message not found + */ + public function setNotificationLevel(Room $room, Participant $participant, int $messageId, int $level): DataResponse { + $proxy = $this->proxy->post( + $participant->getAttendee()->getInvitedCloudId(), + $participant->getAttendee()->getAccessToken(), + $room->getRemoteServer() . '/ocs/v2.php/apps/spreed/api/v1/chat/' . $room->getRemoteToken() . '/threads/' . $messageId . '/notify', + ['level' => $level], + ); + + $statusCode = $proxy->getStatusCode(); + if ($statusCode !== Http::STATUS_OK) { + if (!in_array($statusCode, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ], true)) { + $statusCode = $this->proxy->logUnexpectedStatusCode(__METHOD__, $statusCode); + $data = ['error' => 'status']; + } else { + /** @var array{error: 'level'|'message'|'top-most'} $data */ + $data = $this->proxy->getOCSData($proxy, [ + Http::STATUS_BAD_REQUEST, + Http::STATUS_NOT_FOUND, + ]); + } + return new DataResponse($data, $statusCode); + } + + /** @var TalkThreadInfo $data */ + $data = $this->proxy->getOCSData($proxy); + $data = $this->userConverter->convertThreadInfo($room, $data); + + return new DataResponse($data, Http::STATUS_OK); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Listener/ResourceTypeRegisterListener.php b/lib/Federation/Proxy/TalkV1/Listener/ResourceTypeRegisterListener.php new file mode 100644 index 0000000..d16fc80 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Listener/ResourceTypeRegisterListener.php @@ -0,0 +1,50 @@ + + */ +class ResourceTypeRegisterListener implements IEventListener { + + public function __construct( + protected Config $talkConfig, + protected IOCMProvider $provider, + protected CloudFederationProviderTalk $talkProvider, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof ResourceTypeRegisterEvent) { + // Unrelated + return; + } + + if (!$this->talkConfig->isFederationEnabled()) { + return; + } + + $event->registerResourceType( + FederationManager::TALK_ROOM_RESOURCE, + $this->talkProvider->getSupportedShareTypes(), + [ + 'talk-v1' => '/ocs/v2.php/apps/spreed/api/', + ] + ); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Notifier/BeforeRoomDeletedListener.php b/lib/Federation/Proxy/TalkV1/Notifier/BeforeRoomDeletedListener.php new file mode 100644 index 0000000..3d191bf --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Notifier/BeforeRoomDeletedListener.php @@ -0,0 +1,47 @@ + + */ +class BeforeRoomDeletedListener implements IEventListener { + public function __construct( + protected BackendNotifier $backendNotifier, + protected ParticipantService $participantService, + protected ICloudIdManager $cloudIdManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeRoomDeletedEvent) { + return; + } + + $participants = $this->participantService->getParticipantsByActorType($event->getRoom(), Attendee::ACTOR_FEDERATED_USERS); + foreach ($participants as $participant) { + $cloudId = $this->cloudIdManager->resolveCloudId($participant->getAttendee()->getActorId()); + + $this->backendNotifier->sendRemoteUnShare( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + ); + } + } +} diff --git a/lib/Federation/Proxy/TalkV1/Notifier/CancelRetryOCMListener.php b/lib/Federation/Proxy/TalkV1/Notifier/CancelRetryOCMListener.php new file mode 100644 index 0000000..0a2f94c --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Notifier/CancelRetryOCMListener.php @@ -0,0 +1,41 @@ + + */ +class CancelRetryOCMListener implements IEventListener { + public function __construct( + protected RetryNotificationMapper $retryNotificationMapper, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof AttendeeRemovedEvent) { + return; + } + + $attendee = $event->getAttendee(); + if ($attendee->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + return; + } + + $this->retryNotificationMapper->deleteByProviderId( + (string)$event->getAttendee()->getId() + ); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Notifier/MessageSentListener.php b/lib/Federation/Proxy/TalkV1/Notifier/MessageSentListener.php new file mode 100644 index 0000000..3809419 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Notifier/MessageSentListener.php @@ -0,0 +1,128 @@ + + */ +class MessageSentListener implements IEventListener { + public function __construct( + protected BackendNotifier $backendNotifier, + protected ParticipantService $participantService, + protected ICloudIdManager $cloudIdManager, + protected MessageParser $messageParser, + protected IFactory $l10nFactory, + protected ChatManager $chatManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof ChatMessageSentEvent + && !$event instanceof SystemMessageSentEvent + && !$event instanceof SystemMessagesMultipleSentEvent) { + return; + } + + // FIXME once we store/cache the info skip this if the room has no federation participant + // if (!$event->getRoom()->hasFederatedParticipants()) { + // return; + // } + + // Try to have as neutral as possible messages + $l = $this->l10nFactory->get('spreed', 'en', 'en'); + $chatMessage = $this->messageParser->createMessage($event->getRoom(), null, $event->getComment(), $l); + $this->messageParser->parseMessage($chatMessage); + + $systemMessage = $chatMessage->getMessageType() === ChatManager::VERB_SYSTEM ? $chatMessage->getMessageRaw() : ''; + if ($systemMessage !== 'message_edited' + && $systemMessage !== 'message_deleted' + && $event instanceof ASystemMessageSentEvent + && $event->shouldSkipLastActivityUpdate()) { + return; + } + + if (!$chatMessage->getVisibility()) { + return; + } + + $expireDate = $event->getComment()->getExpireDate(); + $creationDate = $event->getComment()->getCreationDateTime(); + + $metaData = $event->getComment()->getMetaData() ?? []; + $parent = $event->getParent(); + if ($parent instanceof IComment) { + $metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_TYPE] = $parent->getActorType(); + $metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_ID] = $parent->getActorId(); + $metaData[ProxyCacheMessage::METADATA_REPLY_TO_MESSAGE_ID] = (int)$parent->getId(); + } + + $messageData = [ + 'remoteMessageId' => (int)$event->getComment()->getId(), + 'actorType' => $chatMessage->getActorType(), + 'actorId' => $chatMessage->getActorId(), + 'actorDisplayName' => $chatMessage->getActorDisplayName(), + 'messageType' => $chatMessage->getMessageType(), + 'systemMessage' => $systemMessage, + 'expirationDatetime' => $expireDate ? $expireDate->format(\DateTime::ATOM) : '', + 'message' => $chatMessage->getMessage(), + 'messageParameter' => json_encode($chatMessage->getMessageParameters(), JSON_THROW_ON_ERROR), + 'creationDatetime' => $creationDate->format(\DateTime::ATOM), + 'metaData' => json_encode($metaData, JSON_THROW_ON_ERROR), + ]; + + $participants = $this->participantService->getParticipantsByActorType($event->getRoom(), Attendee::ACTOR_FEDERATED_USERS); + foreach ($participants as $participant) { + $attendee = $participant->getAttendee(); + $cloudId = $this->cloudIdManager->resolveCloudId($attendee->getActorId()); + + $lastReadMessage = $attendee->getLastReadMessage(); + $lastMention = $attendee->getLastMentionMessage(); + $lastMentionDirect = $attendee->getLastMentionDirect(); + + $unreadInfo = [ + 'lastReadMessage' => $lastReadMessage, + 'unreadMessages' => $this->chatManager->getUnreadCount($event->getRoom(), $lastReadMessage), + 'unreadMention' => $lastMention !== 0 && $lastReadMessage < $lastMention, + 'unreadMentionDirect' => $lastMentionDirect !== 0 && $lastReadMessage < $lastMentionDirect, + ]; + + $success = $this->backendNotifier->sendMessageUpdate( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + $messageData, + $unreadInfo, + ); + + if ($success === null) { + $this->participantService->removeAttendee($event->getRoom(), $participant, AAttendeeRemovedEvent::REASON_LEFT); + } + } + } +} diff --git a/lib/Federation/Proxy/TalkV1/Notifier/ParticipantModifiedListener.php b/lib/Federation/Proxy/TalkV1/Notifier/ParticipantModifiedListener.php new file mode 100644 index 0000000..01ea154 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Notifier/ParticipantModifiedListener.php @@ -0,0 +1,72 @@ + + */ +class ParticipantModifiedListener implements IEventListener { + public function __construct( + protected BackendNotifier $backendNotifier, + protected ParticipantService $participantService, + protected ICloudIdManager $cloudIdManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof ParticipantModifiedEvent) { + return; + } + + $participant = $event->getParticipant(); + if ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + return; + } + + if (!in_array($event->getProperty(), [ + AParticipantModifiedEvent::PROPERTY_PERMISSIONS, + AParticipantModifiedEvent::PROPERTY_RESEND_CALL, + ], true)) { + return; + } + + // For modifying participants we only notify the affected participant's server + $cloudId = $this->cloudIdManager->resolveCloudId($participant->getAttendee()->getActorId()); + $success = $this->notifyParticipantModified($cloudId, $participant, $event); + + if ($success === null) { + $this->participantService->removeAttendee($event->getRoom(), $participant, AAttendeeRemovedEvent::REASON_LEFT); + } + } + + private function notifyParticipantModified(ICloudId $cloudId, Participant $participant, AParticipantModifiedEvent $event): ?bool { + return $this->backendNotifier->sendParticipantModifiedUpdate( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + $event->getProperty(), + $event->getNewValue(), + $event->getOldValue(), + ); + } +} diff --git a/lib/Federation/Proxy/TalkV1/Notifier/RoomModifiedListener.php b/lib/Federation/Proxy/TalkV1/Notifier/RoomModifiedListener.php new file mode 100644 index 0000000..bb14d1d --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/Notifier/RoomModifiedListener.php @@ -0,0 +1,154 @@ + + */ +class RoomModifiedListener implements IEventListener { + public function __construct( + protected BackendNotifier $backendNotifier, + protected ParticipantService $participantService, + protected ICloudIdManager $cloudIdManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof CallStartedEvent + && !$event instanceof CallEndedEvent + && !$event instanceof CallEndedForEveryoneEvent + && !$event instanceof LobbyModifiedEvent + && !$event instanceof RoomModifiedEvent) { + return; + } + + if (!in_array($event->getProperty(), [ + ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE, + ARoomModifiedEvent::PROPERTY_AVATAR, + ARoomModifiedEvent::PROPERTY_CALL_RECORDING, + ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, + ARoomModifiedEvent::PROPERTY_DESCRIPTION, + ARoomModifiedEvent::PROPERTY_IN_CALL, + ARoomModifiedEvent::PROPERTY_LOBBY, + ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS, + ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION, + ARoomModifiedEvent::PROPERTY_NAME, + ARoomModifiedEvent::PROPERTY_READ_ONLY, + ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT, + ARoomModifiedEvent::PROPERTY_SIP_ENABLED, + ARoomModifiedEvent::PROPERTY_TYPE, + ], true)) { + return; + } + + if ($event->getRoom()->isFederatedConversation()) { + return; + } + + $participants = $this->participantService->getParticipantsByActorType($event->getRoom(), Attendee::ACTOR_FEDERATED_USERS); + foreach ($participants as $participant) { + $cloudId = $this->cloudIdManager->resolveCloudId($participant->getAttendee()->getActorId()); + + if ($event instanceof CallStartedEvent) { + $success = $this->notifyCallStarted($cloudId, $participant, $event); + } elseif ($event instanceof CallEndedEvent || $event instanceof CallEndedForEveryoneEvent) { + $success = $this->notifyCallEnded($cloudId, $participant, $event); + } elseif ($event instanceof ALobbyModifiedEvent) { + $success = $this->notifyLobbyModified($cloudId, $participant, $event); + } else { + $success = $this->notifyRoomModified($cloudId, $participant, $event); + } + + if ($success === null) { + $this->participantService->removeAttendee($event->getRoom(), $participant, AAttendeeRemovedEvent::REASON_LEFT); + } + } + } + + private function notifyCallStarted(ICloudId $cloudId, Participant $participant, CallStartedEvent $event) { + $details = []; + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT)) { + $details = [AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT => true]; + } + + return $this->backendNotifier->sendCallStarted( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + $event->getProperty(), + $event->getNewValue(), + $event->getCallFlag(), + $details, + ); + } + + private function notifyCallEnded(ICloudId $cloudId, Participant $participant, CallEndedEvent|CallEndedForEveryoneEvent $event) { + $details = []; + if ($event instanceof CallEndedForEveryoneEvent) { + $details = [AParticipantModifiedEvent::DETAIL_IN_CALL_END_FOR_EVERYONE => true]; + } + + return $this->backendNotifier->sendCallEnded( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE, + null, + Participant::FLAG_DISCONNECTED, + $details, + ); + } + + private function notifyLobbyModified(ICloudId $cloudId, Participant $participant, ALobbyModifiedEvent $event) { + return $this->backendNotifier->sendRoomModifiedLobbyUpdate( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + $event->getProperty(), + $event->getNewValue(), + $event->getOldValue(), + $event->getLobbyTimer(), + $event->isTimerReached(), + ); + } + + private function notifyRoomModified(ICloudId $cloudId, Participant $participant, ARoomModifiedEvent $event) { + return $this->backendNotifier->sendRoomModifiedUpdate( + $cloudId->getRemote(), + $participant->getAttendee()->getId(), + $participant->getAttendee()->getAccessToken(), + $event->getRoom()->getToken(), + $event->getProperty(), + $event->getNewValue(), + $event->getOldValue(), + ); + } +} diff --git a/lib/Federation/Proxy/TalkV1/ProxyRequest.php b/lib/Federation/Proxy/TalkV1/ProxyRequest.php new file mode 100644 index 0000000..264bbd7 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/ProxyRequest.php @@ -0,0 +1,260 @@ +config->getUserValue( + $this->userSession->getUser()?->getUID(), + Application::APP_ID, + UserPreference::TYPING_PRIVACY, + Participant::PRIVACY_PRIVATE, + ); + return sha1(json_encode([ + 'remoteHash' => $hash, + 'manipulated' => [ + 'config' => [ + 'chat' => [ + 'read-privacy', + 'typing-privacy' => $typingIndicator, + ], + 'call' => [ + 'blur-virtual-background', + ], + 'conversations' => [ + 'list-style', + ], + ], + ] + ])); + } + + /** + * @return Http::STATUS_BAD_REQUEST + */ + public function logUnexpectedStatusCode(string $method, int $statusCode, string $logDetails = ''): int { + if ($this->config->getSystemValueBool('debug')) { + $this->logger->error('Unexpected status code ' . $statusCode . ' returned for ' . $method . ($logDetails !== '' ? "\n" . $logDetails : '')); + } else { + $this->logger->debug('Unexpected status code ' . $statusCode . ' returned for ' . $method . ($logDetails !== '' ? "\n" . $logDetails : '')); + } + return Http::STATUS_BAD_REQUEST; + } + + protected function generateDefaultRequestOptions( + ?string $cloudId, + #[SensitiveParameter] + ?string $accessToken, + ): array { + $options = [ + 'verify' => !$this->config->getSystemValueBool('sharing.federation.allowSelfSignedCertificates'), + 'nextcloud' => [ + 'allow_local_address' => $this->config->getSystemValueBool('allow_local_remote_servers'), + ], + 'headers' => [ + 'Accept' => 'application/json', + 'X-Nextcloud-Federation' => 'true', + 'OCS-APIRequest' => 'true', + 'Accept-Language' => $this->l10nFactory->getUserLanguage($this->userSession->getUser()), + ], + 'timeout' => 5, + ]; + + if ($cloudId !== null && $accessToken !== null) { + $options['auth'] = [urlencode($cloudId), $accessToken]; + } + + return $options; + } + + protected function prependProtocolIfNotAvailable(string $url): string { + if (!str_starts_with($url, 'http://') && !str_starts_with($url, 'https://')) { + $url = 'https://' . $url; + } + return $url; + } + + /** + * @param 'get'|'post'|'put'|'delete' $verb + * @throws CannotReachRemoteException + */ + protected function request( + string $verb, + ?string $cloudId, + #[SensitiveParameter] + ?string $accessToken, + string $url, + array $parameters, + ): IResponse { + if (!$this->talkConfig->isFederationEnabled()) { + throw new CannotReachRemoteException(); + } + + $requestOptions = $this->generateDefaultRequestOptions($cloudId, $accessToken); + if (!empty($parameters)) { + $requestOptions['json'] = $parameters; + } + + try { + return $this->clientService->newClient()->{$verb}( + $this->prependProtocolIfNotAvailable($url), + $requestOptions + ); + } catch (ClientException $e) { + $status = $e->getResponse()->getStatusCode(); + + try { + $body = $e->getResponse()->getBody()->getContents(); + $data = json_decode($body, true, flags: JSON_THROW_ON_ERROR); + $e->getResponse()->getBody()->rewind(); + if (!is_array($data)) { + throw new \RuntimeException('JSON response is not an array'); + } + } catch (\Throwable $e) { + throw new CannotReachRemoteException('Error parsing JSON response', $e->getCode(), $e); + } + + $clientException = new RemoteClientException($e->getMessage(), $status, $e, $data); + $this->logger->debug('Client error from remote', ['exception' => $clientException]); + return new Response($e->getResponse(), false); + } catch (ServerException|\Throwable $e) { + $serverException = new CannotReachRemoteException($e->getMessage(), $e->getCode(), $e); + $this->logger->error('Could not reach remote', ['exception' => $serverException]); + throw $serverException; + } + } + + /** + * @throws CannotReachRemoteException + */ + public function get( + ?string $cloudId, + #[SensitiveParameter] + ?string $accessToken, + string $url, + array $parameters = [], + ): IResponse { + return $this->request( + 'get', + $cloudId, + $accessToken, + $url, + $parameters, + ); + } + + /** + * @throws CannotReachRemoteException + */ + public function put( + string $cloudId, + #[SensitiveParameter] + string $accessToken, + string $url, + array $parameters = [], + ): IResponse { + return $this->request( + 'put', + $cloudId, + $accessToken, + $url, + $parameters, + ); + } + + /** + * @throws CannotReachRemoteException + */ + public function delete( + string $cloudId, + #[SensitiveParameter] + string $accessToken, + string $url, + array $parameters = [], + ): IResponse { + return $this->request( + 'delete', + $cloudId, + $accessToken, + $url, + $parameters, + ); + } + + /** + * @throws CannotReachRemoteException + */ + public function post( + string $cloudId, + #[SensitiveParameter] + string $accessToken, + string $url, + array $parameters = [], + ): IResponse { + return $this->request( + 'post', + $cloudId, + $accessToken, + $url, + $parameters, + ); + } + + /** + * @param list $allowedStatusCodes + * @throws CannotReachRemoteException + */ + public function getOCSData(IResponse $response, array $allowedStatusCodes = [Http::STATUS_OK]): array { + if (!in_array($response->getStatusCode(), $allowedStatusCodes, true)) { + $this->logUnexpectedStatusCode(__METHOD__, $response->getStatusCode()); + } + + try { + $content = $response->getBody(); + $responseData = json_decode($content, true, flags: JSON_THROW_ON_ERROR); + if (!is_array($responseData)) { + throw new \RuntimeException('JSON response is not an array'); + } + } catch (\Throwable $e) { + $this->logger->error('Error parsing JSON response: ' . ($content ?? 'no-data'), ['exception' => $e]); + throw new CannotReachRemoteException('Error parsing JSON response', $e->getCode(), $e); + } + + return $responseData['ocs']['data'] ?? []; + } +} diff --git a/lib/Federation/Proxy/TalkV1/UserConverter.php b/lib/Federation/Proxy/TalkV1/UserConverter.php new file mode 100644 index 0000000..4d59c78 --- /dev/null +++ b/lib/Federation/Proxy/TalkV1/UserConverter.php @@ -0,0 +1,259 @@ +> + */ + protected array $participantsPerRoom = []; + + public function __construct( + protected ParticipantService $participantService, + protected AvatarService $avatarService, + ) { + } + + /** + * @return array{type: string, id: string} + */ + public function convertTypeAndId(Room $room, string $type, string $id): array { + if ($type === Attendee::ACTOR_USERS) { + $type = Attendee::ACTOR_FEDERATED_USERS; + $id = $this->createCloudIdFromUserIdAndFullServerUrl($id, $room->getRemoteServer()); + } elseif ($type === Attendee::ACTOR_FEDERATED_USERS) { + $localParticipants = $this->getLocalParticipants($room); + if (isset($localParticipants[$id])) { + $local = $localParticipants[$id]; + + $type = Attendee::ACTOR_USERS; + $id = $local['userId']; + } + } + + return ['type' => $type, 'id' => $id]; + } + + public function convertAttendee(Room $room, array $entry, string $typeField, string $idField, string $displayNameField): array { + if (!isset($entry[$typeField])) { + return $entry; + } + + if ($entry[$typeField] === Attendee::ACTOR_USERS) { + $entry[$typeField] = Attendee::ACTOR_FEDERATED_USERS; + $entry[$idField] = $this->createCloudIdFromUserIdAndFullServerUrl($entry[$idField], $room->getRemoteServer()); + } elseif ($entry[$typeField] === Attendee::ACTOR_FEDERATED_USERS) { + $localParticipants = $this->getLocalParticipants($room); + if (isset($localParticipants[$entry[$idField]])) { + $local = $localParticipants[$entry[$idField]]; + + $entry[$typeField] = Attendee::ACTOR_USERS; + $entry[$idField] = $local['userId']; + $entry[$displayNameField] = $local['displayName']; + } + } + return $entry; + } + + public function convertAttendees(Room $room, array $entries, string $typeField, string $idField, string $displayNameField): array { + return array_map( + fn (array $entry): array => $this->convertAttendee($room, $entry, $typeField, $idField, $displayNameField), + $entries + ); + } + + protected function convertMessageParameter(Room $room, array $parameter): array { + if ($parameter['type'] === 'user') { // RichObjectDefinition, not Attendee::ACTOR_USERS + if (!isset($parameter['server'])) { + $parameter['server'] = $room->getRemoteServer(); + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = $parameter['id']; + } + } elseif ($parameter['server']) { + $localParticipants = $this->getLocalParticipants($room); + $cloudId = $this->createCloudIdFromUserIdAndFullServerUrl($parameter['id'], $parameter['server']); + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = 'federated_user/' . $parameter['id'] . '@' . $parameter['server']; + } + if (isset($localParticipants[$cloudId])) { + unset($parameter['server']); + $parameter['name'] = $localParticipants[$cloudId]['displayName']; + } + } + } elseif ($parameter['type'] === 'call' && $parameter['id'] === $room->getRemoteToken()) { + $parameter['id'] = $room->getToken(); + $parameter['icon-url'] = $this->avatarService->getAvatarUrl($room); + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = 'all'; + } + } elseif ($parameter['type'] === 'circle') { + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = 'team/' . $parameter['id']; + } + } elseif ($parameter['type'] === 'user-group') { + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = 'group/' . $parameter['id']; + } + } elseif ($parameter['type'] === 'email' || $parameter['type'] === 'guest') { + if (!isset($parameter['mention-id'])) { + $parameter['mention-id'] = $parameter['type'] . '/' . $parameter['id']; + } + } + return $parameter; + } + + public function convertMessageParameters(Room $room, array $message): array { + $message['messageParameters'] = array_map( + fn (array $message): array => $this->convertMessageParameter($room, $message), + $message['messageParameters'] + ); + return $message; + } + + /** + * @param Room $room + * @param TalkChatMessageWithParent $message + * @return TalkChatMessageWithParent + */ + public function convertMessage(Room $room, array $message): array { + $message['token'] = $room->getToken(); + $message = $this->convertAttendee($room, $message, 'actorType', 'actorId', 'actorDisplayName'); + $message = $this->convertAttendee($room, $message, 'lastEditActorType', 'lastEditActorId', 'lastEditActorDisplayName'); + $message = $this->convertMessageParameters($room, $message); + + if (isset($message['parent'])) { + $message['parent'] = $this->convertMessage($room, $message['parent']); + } + return $message; + } + + /** + * @param Room $room + * @param TalkChatMessageWithParent[] $messages + * @return TalkChatMessageWithParent[] + */ + public function convertMessages(Room $room, array $messages): array { + return array_map( + fn (array $message): array => $this->convertMessage($room, $message), + $messages + ); + } + + /** + * @param Room $room + * @param TalkThreadInfo $threadInfo + * @return TalkThreadInfo + */ + public function convertThreadInfo(Room $room, array $threadInfo): array { + $threadInfo['thread']['roomToken'] = $room->getToken(); + if (isset($threadInfo['first'])) { + $threadInfo['first'] = $this->convertMessageParameters($room, $threadInfo['first']); + } + if (isset($threadInfo['last'])) { + $threadInfo['last'] = $this->convertMessageParameters($room, $threadInfo['last']); + } + return $threadInfo; + } + + /** + * @param Room $room + * @param list $threadInfos + * @return list + */ + public function convertThreadInfos(Room $room, array $threadInfos): array { + return array_map( + fn (array $threadInfo): array => $this->convertThreadInfo($room, $threadInfo), + $threadInfos + ); + } + + /** + * @template T of TalkPoll|TalkPollDraft + * @param Room $room + * @param TalkPoll|TalkPollDraft $poll + * @psalm-param T $poll + * @return TalkPoll|TalkPollDraft + * @psalm-return T + */ + public function convertPoll(Room $room, array $poll): array { + $poll = $this->convertAttendee($room, $poll, 'actorType', 'actorId', 'actorDisplayName'); + if (isset($poll['details'])) { + $poll['details'] = array_map( + fn (array $vote): array => $this->convertAttendee($room, $vote, 'actorType', 'actorId', 'actorDisplayName'), + $poll['details'] + ); + } + return $poll; + } + + /** + * @param Room $room + * @param TalkReaction[] $reactions + * @return TalkReaction[] + */ + protected function convertReactions(Room $room, array $reactions): array { + return array_map( + fn (array $reaction): array => $this->convertAttendee($room, $reaction, 'actorType', 'actorId', 'actorDisplayName'), + $reactions + ); + } + + /** + * @param Room $room + * @param array $reactionsList + * @return array + */ + public function convertReactionsList(Room $room, array $reactionsList): array { + return array_map( + fn (array $reactions): array => $this->convertReactions($room, $reactions), + $reactionsList + ); + } + + /** + * @return array + */ + protected function getLocalParticipants(Room $room): array { + if (array_key_exists($room->getToken(), $this->participantsPerRoom)) { + return $this->participantsPerRoom[$room->getToken()]; + } + + $this->participantsPerRoom[$room->getToken()] = []; + $localParticipants = $this->participantService->getActorsByType($room, Attendee::ACTOR_USERS); + foreach ($localParticipants as $participant) { + $this->participantsPerRoom[$room->getToken()][$participant->getInvitedCloudId()] = [ + 'userId' => $participant->getActorId(), + 'displayName' => $participant->getDisplayName(), + ]; + } + + return $this->participantsPerRoom[$room->getToken()]; + } + + protected function createCloudIdFromUserIdAndFullServerUrl(string $userId, string $serverUrl): string { + if (str_starts_with($serverUrl, 'https://')) { + $serverUrl = substr($serverUrl, strlen('https://')); + } + return $userId . '@' . $serverUrl; + } +} diff --git a/lib/Federation/RestrictionValidator.php b/lib/Federation/RestrictionValidator.php new file mode 100644 index 0000000..ca9c0bb --- /dev/null +++ b/lib/Federation/RestrictionValidator.php @@ -0,0 +1,73 @@ +getUser() && $cloudIdToInvite->getRemote())) { + $this->logger->debug('Could not share conversation as the recipient is invalid: ' . $cloudIdToInvite->getId()); + throw new FederationRestrictionException(FederationRestrictionException::REASON_CLOUD_ID); + } + + if (!$this->appConfig->getAppValueBool('federation_outgoing_enabled', true)) { + $this->logger->debug('Could not share conversation as outgoing federation is disabled'); + throw new FederationRestrictionException(FederationRestrictionException::REASON_OUTGOING); + } + + if (!$this->talkConfig->isFederationEnabledForUserId($user)) { + $this->logger->debug('Talk federation not allowed for user ' . $user->getUID()); + throw new FederationRestrictionException(FederationRestrictionException::REASON_FEDERATION); + } + + if ($this->appConfig->getAppValueBool('federation_only_trusted_servers')) { + if (!$this->appManager->isEnabledForUser('federation')) { + $this->logger->error('Federation is limited to trusted servers but the "federation" app is disabled'); + throw new FederationRestrictionException(FederationRestrictionException::REASON_TRUSTED_SERVERS); + } + + $trustedServers = Server::get(TrustedServers::class); + $serverUrl = $this->addressHandler->removeProtocolFromUrl($cloudIdToInvite->getRemote()); + if (!$trustedServers->isTrustedServer($serverUrl)) { + $this->logger->warning( + 'Tried to send Talk federation invite to untrusted server {serverUrl}', + ['serverUrl' => $serverUrl] + ); + throw new FederationRestrictionException(FederationRestrictionException::REASON_TRUSTED_SERVERS); + } + } + } +} diff --git a/lib/Files/Listener.php b/lib/Files/Listener.php new file mode 100644 index 0000000..1c68fde --- /dev/null +++ b/lib/Files/Listener.php @@ -0,0 +1,163 @@ + + */ +class Listener implements IEventListener { + + public function __construct( + protected Util $util, + protected ParticipantService $participantService, + protected IUserManager $userManager, + protected TalkSession $talkSession, + ) { + } + + #[\Override] + public function handle(Event $event): void { + match (get_class($event)) { + BeforeUserJoinedRoomEvent::class => $this->beforeUserJoinedRoomEvent($event), + BeforeGuestJoinedRoomEvent::class => $this->beforeGuestJoinedRoomEvent($event), + }; + } + + protected function beforeUserJoinedRoomEvent(BeforeUserJoinedRoomEvent $event): void { + try { + $this->preventUsersWithoutAccessToTheFileFromJoining($event->getRoom(), $event->getUser()->getUID()); + $this->addUserAsPersistentParticipant($event->getRoom(), $event->getUser()->getUID()); + } catch (UnauthorizedException) { + $event->setCancelJoin(true); + } + } + + protected function beforeGuestJoinedRoomEvent(BeforeGuestJoinedRoomEvent $event): void { + try { + $this->preventGuestsFromJoiningIfNotPubliclyAccessible($event->getRoom()); + } catch (UnauthorizedException) { + $event->setCancelJoin(true); + } + } + + /** + * Prevents users from joining if they do not have access to the file. + * + * A user has access to the file if the file is publicly accessible (through + * a link share, for example) or if the user has direct access to it. + * + * A user has direct access to a file if they received the file (or an + * ancestor) through a user, group, circle or room share (but not through a + * link share, for example), or if they are the owner of such a file. + * + * This method should be called before a user joins a room. + * + * @param Room $room + * @param string $userId + * @throws UnauthorizedException + */ + protected function preventUsersWithoutAccessToTheFileFromJoining(Room $room, string $userId): void { + if ($room->getObjectType() !== 'file') { + return; + } + + // If a guest can access the file then any user can too. + $shareToken = $this->talkSession->getFileShareTokenForRoom($room->getToken()); + if ($shareToken && $this->util->canGuestAccessFile($shareToken)) { + return; + } + + $node = $this->util->getAnyNodeOfFileAccessibleByUser($room->getObjectId(), $userId); + if ($node === null) { + throw new UnauthorizedException('User does not have access to the file'); + } + } + + /** + * Add user as a persistent participant of a file room. + * + * Only users with direct access to the file are added as persistent + * participants of the room. + * + * This method should be called before a user joins a room, but only if the + * user should be able to join the room. + * + * @param Room $room + * @param string $userId + */ + protected function addUserAsPersistentParticipant(Room $room, string $userId): void { + if ($room->getObjectType() !== 'file') { + return; + } + + if ($this->util->getAnyNodeOfFileAccessibleByUser($room->getObjectId(), $userId) === null) { + return; + } + + try { + $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + $user = $this->userManager->get($userId); + + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $userId, + 'displayName' => $user ? $user->getDisplayName() : $userId, + ]]); + } + } + + /** + * Prevents guests from joining the room if it is not publicly accessible. + * + * This method should be called before a guest joins a room. + * + * @param Room $room + * @throws UnauthorizedException + */ + protected function preventGuestsFromJoiningIfNotPubliclyAccessible(Room $room): void { + if ($room->getObjectType() !== 'file') { + return; + } + + $shareToken = $this->talkSession->getFileShareTokenForRoom($room->getToken()); + if ($shareToken && $this->util->canGuestAccessFile($shareToken)) { + return; + } + + throw new UnauthorizedException('Guests are not allowed in this room'); + } +} diff --git a/lib/Files/TemplateLoader.php b/lib/Files/TemplateLoader.php new file mode 100644 index 0000000..607aa2a --- /dev/null +++ b/lib/Files/TemplateLoader.php @@ -0,0 +1,92 @@ + + */ +class TemplateLoader implements IEventListener { + use TInitialState; + + public function __construct( + IInitialState $initialState, + ICacheFactory $memcacheFactory, + Config $talkConfig, + IConfig $serverConfig, + private IAppManager $appManager, + private IRootFolder $rootFolder, + private IUserSession $userSession, + IGroupManager $groupManager, + protected IRequest $request, + LoggerInterface $logger, + ) { + $this->initialState = $initialState; + $this->memcacheFactory = $memcacheFactory; + $this->talkConfig = $talkConfig; + $this->serverConfig = $serverConfig; + $this->groupManager = $groupManager; + $this->logger = $logger; + } + + /** + * Loads the Talk UI in the sidebar of the Files app. + * + * This method should be called when handling the LoadSidebar event of the + * Files app. + * + * @param Event $event + */ + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof LoadSidebar)) { + return; + } + + if ($this->serverConfig->getAppValue('spreed', 'conversations_files', '1') !== '1') { + return; + } + + $user = $this->userSession->getUser(); + if ($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)) { + return; + } + + Util::addStyle(Application::APP_ID, 'talk-icons'); + if (!str_starts_with($this->request->getPathInfo(), '/apps/maps')) { + Util::addScript(Application::APP_ID, 'talk-files-sidebar'); + Util::addStyle(Application::APP_ID, 'talk-files-sidebar'); + } + + if ($user instanceof IUser) { + $this->publishInitialStateForUser($user, $this->rootFolder, $this->appManager); + } else { + $this->publishInitialStateForGuest(); + } + } +} diff --git a/lib/Files/Util.php b/lib/Files/Util.php new file mode 100644 index 0000000..0f98479 --- /dev/null +++ b/lib/Files/Util.php @@ -0,0 +1,122 @@ +accessLists[$fileId])) { + $nodes = $this->rootFolder->getById((int)$fileId); + + if (empty($nodes)) { + return []; + } + + $node = array_shift($nodes); + $accessList = $this->shareManager->getAccessList($node); + $accessList['users'] ??= []; + if (!$node->getStorage()->instanceOfStorage(SharedStorage::class)) { + // The file is not a shared file, + // let's check the accesslist for mount points of groupfolders and external storages + $mountsForFile = $this->userMountCache->getMountsForFileId($fileId); + $affectedUserIds = array_map(function (ICachedMountInfo $mount) { + return $mount->getUser()->getUID(); + }, $mountsForFile); + + $accessList['users'] = array_unique(array_merge($affectedUserIds, $accessList['users'])); + } + + $this->accessLists[$fileId] = $accessList['users']; + } + + return $this->accessLists[$fileId]; + } + + public function canUserAccessFile(string $fileId, string $userId): bool { + return \in_array($userId, $this->getUsersWithAccessFile($fileId), true); + } + + public function canGuestsAccessFile(string $fileId): bool { + if (!isset($this->publicAccessLists[$fileId])) { + $nodes = $this->rootFolder->getById((int)$fileId); + + if (empty($nodes)) { + return false; + } + + $node = array_shift($nodes); + $accessList = $this->shareManager->getAccessList($node, false); + $this->publicAccessLists[$fileId] = $accessList['public'] ?? false; + } + return $this->publicAccessLists[$fileId] === true; + } + + public function canGuestAccessFile(string $shareToken): bool { + try { + $share = $this->shareManager->getShareByToken($shareToken); + if ($share->getPassword() !== null) { + $shareId = $this->session->get('public_link_authenticated'); + if ($share->getId() !== $shareId) { + throw new ShareNotFound(); + } + } + return true; + } catch (ShareNotFound $e) { + return false; + } + } + + /** + * Returns any node of the file that is public and owned by the user, or + * that the user has direct access to. + * + * @param string $fileId + * @param string $userId + * @return Node|null + */ + public function getAnyNodeOfFileAccessibleByUser(string $fileId, string $userId): ?Node { + $userFolder = $this->rootFolder->getUserFolder($userId); + $nodes = $userFolder->getById((int)$fileId); + + $nodes = array_filter($nodes, static function (Node $node) { + return $node->getType() === FileInfo::TYPE_FILE; + }); + + if (empty($nodes)) { + return null; + } + + return array_shift($nodes); + } +} diff --git a/lib/Flow/Operation.php b/lib/Flow/Operation.php new file mode 100644 index 0000000..d149355 --- /dev/null +++ b/lib/Flow/Operation.php @@ -0,0 +1,227 @@ + 1, + 'SELF_MENTION' => 2, + 'ROOM_MENTION' => 3, + ]; + + public function __construct( + protected IL10N $l, + protected IURLGenerator $urlGenerator, + protected TalkManager $talkManager, + protected ParticipantService $participantService, + protected IUserSession $session, + protected ChatManager $chatManager, + ) { + } + + #[\Override] + public function getDisplayName(): string { + return $this->l->t('Write to conversation'); + } + + #[\Override] + public function getDescription(): string { + return $this->l->t('Writes event information into a conversation of your choice'); + } + + #[\Override] + public function getIcon(): string { + return $this->urlGenerator->imagePath('spreed', 'app.svg'); + } + + #[\Override] + public function isAvailableForScope(int $scope): bool { + return $scope === FlowManager::SCOPE_USER; + } + + /** + * Validates whether a configured workflow rule is valid. If it is not, + * an `\UnexpectedValueException` is supposed to be thrown. + * + * @throws UnexpectedValueException + * @since 9.1 + */ + #[\Override] + public function validateOperation(string $name, array $checks, string $operation): void { + [$mode, $token] = $this->parseOperationConfig($operation); + $this->validateOperationConfig($mode, $token, $this->getUser()->getUID()); + } + + #[\Override] + public function onEvent(string $eventName, Event $event, IRuleMatcher $ruleMatcher): void { + $flows = $ruleMatcher->getFlows(false); + foreach ($flows as $flow) { + try { + [$mode, $token] = $this->parseOperationConfig($flow['operation']); + $uid = $flow['scope_actor_id']; + $this->validateOperationConfig($mode, $token, $uid); + + $entity = $ruleMatcher->getEntity(); + + $message = $this->prepareText($entity, $eventName); + if ($message === '') { + continue; + } + + $room = $this->getRoom($token, $uid); + if ($room->getReadOnly() !== Room::READ_WRITE) { + // Ignore conversation because it is locked + continue; + } + + if ($room->isFederatedConversation()) { + // Ignore conversation because it is a proxy conversation + continue; + } + + $participant = $this->participantService->getParticipant($room, $uid, false); + if (!($participant->getPermissions() & Attendee::PERMISSIONS_CHAT)) { + // Ignore conversation because the user has no permissions + continue; + } + + $this->chatManager->sendMessage( + $room, + null, + Attendee::ACTOR_BOTS, + $participant->getAttendee()->getActorId(), + $this->prepareMention($mode, $participant) . $message, + new \DateTime(), + rateLimitGuestMentions: false, + ); + } catch (UnexpectedValueException|ParticipantNotFoundException|RoomNotFoundException) { + continue; + } + } + } + + protected function prepareText(IEntity $entity, string $eventName): string { + $message = $eventName; + if ($entity instanceof IDisplayText) { + $message = trim($entity->getDisplayText(3)); + } + if ($entity instanceof IUrl && $message !== '') { + $message .= ' ' . $entity->getUrl(); + } + return $message; + } + + /** + * returns a mention including a trailing whitespace, or an empty string + */ + protected function prepareMention(int $mode, Participant $participant): string { + switch ($mode) { + case self::MESSAGE_MODES['ROOM_MENTION']: + return '@all '; + case self::MESSAGE_MODES['SELF_MENTION']: + $hasWhitespace = str_contains($participant->getAttendee()->getActorId(), ' '); + $enclosure = $hasWhitespace ? '"' : ''; + return '@' . $enclosure . $participant->getAttendee()->getActorId() . $enclosure . ' '; + case self::MESSAGE_MODES['NO_MENTION']: + default: + return ''; + } + } + + protected function parseOperationConfig(string $raw): array { + /** + * We expect $operation be a json string, containing + * 't' => string, the room token + * 'm' => int > 0, see self::MESSAGE_MODES + * + * setting up room mentions are only permitted to moderators + */ + + $opConfig = \json_decode($raw, true); + if (!is_array($opConfig) || empty($opConfig)) { + throw new UnexpectedValueException('Cannot decode operation details'); + } + + $mode = (int)($opConfig['m'] ?? 0); + $token = trim((string)($opConfig['t'] ?? '')); + + return [$mode, $token]; + } + + protected function validateOperationConfig(int $mode, string $token, string $uid): void { + if (!in_array($mode, self::MESSAGE_MODES)) { + throw new UnexpectedValueException('Invalid mode'); + } + + if (empty($token)) { + throw new UnexpectedValueException('Invalid token'); + } + + try { + $room = $this->getRoom($token, $uid); + } catch (RoomNotFoundException $e) { + throw new UnexpectedValueException('Room not found', $e->getCode(), $e); + } + + if ($room->isFederatedConversation()) { + throw new UnexpectedValueException('Room is a proxy conversation'); + } + + if ($mode === self::MESSAGE_MODES['ROOM_MENTION']) { + try { + $participant = $this->participantService->getParticipant($room, $uid, false); + if (!$participant->hasModeratorPermissions(false)) { + throw new UnexpectedValueException('Not allowed to mention room'); + } + } catch (ParticipantNotFoundException $e) { + throw new UnexpectedValueException('Participant not found', $e->getCode(), $e); + } + } + } + + /** + * @throws UnexpectedValueException + */ + protected function getUser(): IUser { + $user = $this->session->getUser(); + if ($user === null) { + throw new UnexpectedValueException('User not logged in'); + } + return $user; + } + + /** + * @throws RoomNotFoundException + */ + protected function getRoom(string $token, string $uid): Room { + return $this->talkManager->getRoomForUserByToken($token, $uid); + } +} diff --git a/lib/Flow/RegisterOperationsListener.php b/lib/Flow/RegisterOperationsListener.php new file mode 100644 index 0000000..4516ddf --- /dev/null +++ b/lib/Flow/RegisterOperationsListener.php @@ -0,0 +1,37 @@ + + */ +class RegisterOperationsListener implements IEventListener { + + public function __construct( + private Operation $operation, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof RegisterOperationsEvent)) { + // Unrelated + return; + } + + $event->registerOperation($this->operation); + Util::addScript('spreed', 'talk-flow'); + Util::addStyle('spreed', 'talk-flow'); + } +} diff --git a/lib/GuestManager.php b/lib/GuestManager.php new file mode 100644 index 0000000..39509b3 --- /dev/null +++ b/lib/GuestManager.php @@ -0,0 +1,325 @@ +getAttendee(); + if ($attendee->getDisplayName() !== $displayName) { + $event = new BeforeParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_NAME, $displayName); + $this->dispatcher->dispatchTyped($event); + + $this->participantService->updateDisplayNameForActor( + $attendee->getActorType(), + $attendee->getActorId(), + $displayName + ); + + $this->pollService->updateDisplayNameForActor( + $attendee->getActorType(), + $attendee->getActorId(), + $displayName + ); + + $attendee->setDisplayName($displayName); + + $event = new ParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_NAME, $displayName); + $this->dispatcher->dispatchTyped($event); + } + } + + public function validateMailAddress(string $email): bool { + return $this->mailer->validateMailAddress($email); + } + + /** + * @return array{invites: non-negative-int, duplicates: non-negative-int, invalid?: non-negative-int, invalidLines?: list, type?: int<-1, 6>} + * @throws GuestImportException + */ + public function importEmails(Room $room, string $filePath, bool $testRun): array { + if ($room->getType() === Room::TYPE_ONE_TO_ONE + || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $room->getType() === Room::TYPE_NOTE_TO_SELF + || $room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE + || $room->getObjectType() === Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + throw new GuestImportException(GuestImportException::REASON_ROOM); + } + + $content = fopen($filePath, 'rb'); + $details = fgetcsv($content, escape: ''); + + $emailKey = $nameKey = null; + foreach ($details as $key => $header) { + if (strtolower($header) === 'email') { + $emailKey = $key; + } elseif (strtolower($header) === 'name') { + $nameKey = $key; + } + } + + if ($emailKey === null) { + throw new GuestImportException( + GuestImportException::REASON_HEADER_EMAIL, + $this->l->t('Missing email field in header line'), + ); + } + + if ($nameKey === null) { + $this->logger->debug('No name field in header line, skipping name import'); + } + + $participants = $this->participantService->getParticipantsByActorType($room, Attendee::ACTOR_EMAILS); + $alreadyInvitedEmails = array_flip(array_map(static fn (Participant $participant): string => $participant->getAttendee()->getInvitedCloudId(), $participants)); + + $line = 1; + $duplicates = 0; + $emailsToAdd = $invalidLines = []; + while ($details = fgetcsv($content, escape: '')) { + $line++; + if (isset($alreadyInvitedEmails[$details[$emailKey]])) { + $this->logger->debug('Skipping import of ' . $details[$emailKey] . ' (line: ' . $line . ') as they are already invited'); + $duplicates++; + continue; + } + + if (!isset($details[$emailKey])) { + $this->logger->debug('Invalid entry without email fields on line: ' . $line); + $invalidLines[] = $line; + continue; + } + + $email = strtolower(trim($details[$emailKey])); + if ($nameKey !== null && isset($details[$nameKey])) { + $name = trim($details[$nameKey]); + if ($name === '' || strcasecmp($name, $email) === 0) { + $name = null; + } + } else { + $name = null; + } + + if (!$this->validateMailAddress($email)) { + $this->logger->debug('Invalid email "' . $email . '" on line: ' . $line); + $invalidLines[] = $line; + continue; + } + + $actorId = hash('sha256', $email); + $alreadyInvitedEmails[$email] = $actorId; + $emailsToAdd[] = [ + 'email' => $email, + 'actorId' => $actorId, + 'name' => $name, + ]; + } + + if ($testRun) { + if (empty($invalidLines)) { + return [ + 'invites' => count($emailsToAdd), + 'duplicates' => $duplicates, + ]; + } + + throw new GuestImportException( + GuestImportException::REASON_ROWS, + $this->l->t('Following lines are invalid: %s', implode(', ', $invalidLines)), + $invalidLines, + count($emailsToAdd), + $duplicates, + ); + } + + $data = [ + 'invites' => count($emailsToAdd), + 'duplicates' => $duplicates, + ]; + + try { + $this->roomService->setType($room, Room::TYPE_PUBLIC); + $data['type'] = $room->getType(); + } catch (TypeException) { + } + + foreach ($emailsToAdd as $add) { + $participant = $this->participantService->inviteEmailAddress($room, $add['actorId'], $add['email'], $add['name']); + $this->sendEmailInvitation($room, $participant); + } + + if (!empty($invalidLines)) { + $data['invalidLines'] = $invalidLines; + $data['invalid'] = count($invalidLines); + } + + return $data; + } + + public function sendEmailInvitation(Room $room, Participant $participant): void { + if ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_EMAILS) { + throw new \InvalidArgumentException('Cannot send email for non-email participant actor type'); + } + $email = $participant->getAttendee()->getInvitedCloudId(); + $pin = $participant->getAttendee()->getPin(); + + $event = new BeforeEmailInvitationSentEvent($room, $participant->getAttendee()); + $this->dispatcher->dispatchTyped($event); + + $link = $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken(), 'email' => $email, 'access' => $participant->getAttendee()->getAccessToken()]); + + $message = $this->mailer->createMessage(); + + $user = $this->userSession->getUser(); + $invitee = $user instanceof IUser ? $user->getDisplayName() : ''; + + $template = $this->mailer->createEMailTemplate('Talk.InviteByEmail', [ + 'invitee' => $invitee, + 'roomName' => $room->getDisplayName(''), + 'roomLink' => $link, + 'email' => $email, + 'pin' => $pin, + ]); + + if ($user instanceof IUser) { + $subject = $this->l->t('%1$s invited you to conversation "%2$s".', [$user->getDisplayName(), $room->getDisplayName('')]); + $message->setFrom([Util::getDefaultEmailAddress('no-reply') => $user->getDisplayName()]); + } else { + $subject = $this->l->t('You were invited to conversation "%s".', $room->getDisplayName('')); + $message->setFrom([Util::getDefaultEmailAddress('no-reply') => $this->defaults->getName()]); + } + + $template->setSubject($subject); + $template->addHeader(); + $template->addHeading( + htmlspecialchars($room->getDisplayName('')), + $this->l->t('Conversation invitation') + ); + $template->addBodyText( + htmlspecialchars($subject), + $subject + ); + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE && $room->getLobbyTimer() !== null) { + $timezone = $this->dateTimeZone->getTimeZone(); + $start = $room->getLobbyTimer()->setTimezone($timezone); + $template->addBodyListItem( + $this->l->l('datetime', $start) . ' (' . $timezone->getName() . ')', + $this->l->t('Scheduled time'), + $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')) + ); + } + + if (!empty($room->getDescription())) { + $template->addBodyListItem( + nl2br(htmlspecialchars($room->getDescription())), + $this->l->t('Description'), + $this->url->getAbsoluteURL($this->url->imagePath('core', 'apps/notes.svg')), + $room->getDescription() + ); + } + + if ($pin) { + $template->addBodyText($this->l->t('You can also dial-in via phone with the following details')); + + $template->addBodyListItem( + $this->talkConfig->getDialInInfo(), + $this->l->t('Dial-in information'), + $this->url->getAbsoluteURL($this->url->imagePath('spreed', 'phone.png')) + ); + + $template->addBodyListItem( + $room->getToken(), + $this->l->t('Meeting ID'), + $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.png')) + ); + + $template->addBodyListItem( + $pin, + $this->l->t('Your PIN'), + $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/password.png')) + ); + } + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE && $room->getLobbyTimer() !== null) { + $template->addBodyText(''); + $template->addBodyText( + $this->l->t('Click the button below to join the lobby now.'), + $this->l->t('Click the link below to join the lobby now.') + ); + $template->addBodyButton( + $this->l->t('Join lobby for "%s"', [$room->getDisplayName('')]), + $link + ); + } else { + $template->addBodyText(''); + $template->addBodyText( + $this->l->t('Click the button below to join the conversation now.'), + $this->l->t('Click the link below to join the conversation now.') + ); + $template->addBodyButton( + $this->l->t('Join "%s"', [$room->getDisplayName('')]), + $link + ); + } + + $template->addFooter(); + $message->setTo([$email]); + $message->useTemplate($template); + try { + $this->mailer->send($message); + + $event = new EmailInvitationSentEvent($room, $participant->getAttendee()); + $this->dispatcher->dispatchTyped($event); + } catch (\Exception $e) { + } + } +} diff --git a/lib/Listener/AMembershipListener.php b/lib/Listener/AMembershipListener.php new file mode 100644 index 0000000..30286d5 --- /dev/null +++ b/lib/Listener/AMembershipListener.php @@ -0,0 +1,105 @@ + + */ +abstract class AMembershipListener implements IEventListener { + + public function __construct( + protected Manager $manager, + protected IAppManager $appManager, + protected IGroupManager $groupManager, + protected ParticipantService $participantService, + protected BanService $banService, + protected LoggerInterface $logger, + ) { + } + + protected function removeFromRoomsUnlessStillLinked(array $rooms, IUser $user): void { + $rooms = $this->filterRoomsWithOtherGroupMemberships($rooms, $user); + $rooms = $this->filterRoomsWithOtherCircleMemberships($rooms, $user); + + foreach ($rooms as $room) { + try { + $participant = $room->getParticipant($user->getUID()); + $participantType = $participant->getAttendee()->getParticipantType(); + if ($participantType === Participant::USER) { + $this->participantService->removeUser($room, $user, AAttendeeRemovedEvent::REASON_REMOVED); + } + } catch (ParticipantNotFoundException $e) { + } + } + } + + protected function filterRoomsWithOtherGroupMemberships(array $rooms, IUser $user): array { + $userGroupIds = $this->groupManager->getUserGroupIds($user); + + $furtherMemberships = []; + foreach ($userGroupIds as $groupId) { + $groupRooms = $this->manager->getRoomsForActor(Attendee::ACTOR_GROUPS, $groupId); + foreach ($groupRooms as $room) { + $furtherMemberships[$room->getId()] = true; + } + } + + return array_filter($rooms, static function (Room $room) use ($furtherMemberships) { + // Only delete from rooms where the user is not member via another group + return !isset($furtherMemberships[$room->getId()]); + }); + } + + protected function filterRoomsWithOtherCircleMemberships(array $rooms, IUser $user): array { + if (!$this->appManager->isEnabledForUser('circles', $user)) { + Server::get(LoggerInterface::class)->debug('Circles not enabled', ['app' => 'spreed']); + return $rooms; + } + + try { + $circlesManager = Server::get(CirclesManager::class); + $federatedUser = $circlesManager->getFederatedUser($user->getUID(), Member::TYPE_USER); + $memberships = $federatedUser->getMemberships(); + } catch (\Exception $e) { + return $rooms; + } + + $furtherMemberships = []; + foreach ($memberships as $membership) { + $circleRooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $membership->getCircleId()); + + foreach ($circleRooms as $room) { + $furtherMemberships[$room->getId()] = true; + } + } + + return array_filter($rooms, static function (Room $room) use ($furtherMemberships) { + // Only delete from rooms where the user is not member via another group + return !isset($furtherMemberships[$room->getId()]); + }); + } +} diff --git a/lib/Listener/AddMissingIndicesListener.php b/lib/Listener/AddMissingIndicesListener.php new file mode 100644 index 0000000..26859a9 --- /dev/null +++ b/lib/Listener/AddMissingIndicesListener.php @@ -0,0 +1,35 @@ + + */ +class AddMissingIndicesListener implements IEventListener { + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof AddMissingIndicesEvent)) { + // Unrelated + return; + } + + /** + * Added to @see Version3003Date20180720162342 + */ + $event->addMissingIndex( + 'talk_rooms', + 'tr_room_object', + ['object_type', 'object_id'] + ); + } +} diff --git a/lib/Listener/BeforeUserLoggedOutListener.php b/lib/Listener/BeforeUserLoggedOutListener.php new file mode 100644 index 0000000..06b8a65 --- /dev/null +++ b/lib/Listener/BeforeUserLoggedOutListener.php @@ -0,0 +1,60 @@ + + */ +class BeforeUserLoggedOutListener implements IEventListener { + + public function __construct( + private Manager $manager, + private ParticipantService $participantService, + private TalkSession $talkSession, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof BeforeUserLoggedOutEvent)) { + // Unrelated + return; + } + + $user = $event->getUser(); + if (!$user instanceof IUser) { + // User already not there anymore, so well … + return; + } + + $sessionIds = $this->talkSession->getAllActiveSessions(); + foreach ($sessionIds as $sessionId) { + try { + $room = $this->manager->getRoomForSession($user->getUID(), $sessionId); + $participant = $this->participantService->getParticipant($room, $user->getUID(), $sessionId); + if ($participant->getSession() && $participant->getSession()->getInCall() !== Participant::FLAG_DISCONNECTED) { + $this->participantService->changeInCall($room, $participant, Participant::FLAG_DISCONNECTED); + } + $this->participantService->leaveRoomAsSession($room, $participant); + } catch (RoomNotFoundException|ParticipantNotFoundException) { + } + } + } +} diff --git a/lib/Listener/BotListener.php b/lib/Listener/BotListener.php new file mode 100644 index 0000000..efdf278 --- /dev/null +++ b/lib/Listener/BotListener.php @@ -0,0 +1,132 @@ + + */ +class BotListener implements IEventListener { + public function __construct( + protected BotServerMapper $botServerMapper, + protected BotConversationMapper $botConversationMapper, + protected BotService $botService, + protected LoggerInterface $logger, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof BotInstallEvent) { + $this->handleBotInstallEvent($event); + return; + } + if ($event instanceof BotUninstallEvent) { + $this->handleBotUninstallEvent($event); + return; + } + + if ($event instanceof BotEnabledEvent) { + $this->botService->afterBotEnabled($event); + return; + } + if ($event instanceof BotDisabledEvent) { + $this->botService->afterBotDisabled($event); + return; + } + + /** @var MessageParser $messageParser */ + $messageParser = Server::get(MessageParser::class); + + if ($event instanceof ChatMessageSentEvent) { + $this->botService->afterChatMessageSent($event, $messageParser); + return; + } + if ($event instanceof ReactionAddedEvent) { + $this->botService->afterReactionAdded($event, $messageParser); + return; + } + if ($event instanceof ReactionRemovedEvent) { + $this->botService->afterReactionRemoved($event, $messageParser); + return; + } + if ($event instanceof SystemMessageSentEvent) { + $this->botService->afterSystemMessageSent($event, $messageParser); + } + } + + protected function handleBotInstallEvent(BotInstallEvent $event): void { + try { + $this->botService->validateBotParameters($event->getName(), $event->getSecret(), $event->getUrl(), $event->getDescription()); + } catch (\InvalidArgumentException $e) { + $this->logger->error('Invalid data in bot install event: ' . $e->getMessage(), ['exception' => $e]); + throw $e; + } + + try { + $bot = $this->botServerMapper->findByUrlAndSecret($event->getUrl(), $event->getSecret()); + + $bot->setName($event->getName()); + $bot->setDescription($event->getDescription()); + $this->botServerMapper->update($bot); + } catch (DoesNotExistException) { + try { + $this->botServerMapper->findByUrl($event->getUrl()); + $e = new \InvalidArgumentException('Bot with the same URL and a different secret is already registered'); + $this->logger->error('Invalid data in bot install event: ' . $e->getMessage(), ['exception' => $e]); + throw $e; + } catch (DoesNotExistException) { + } + + $features = $event->getFeatures(); + if (str_starts_with($event->getUrl(), Bot::URL_APP_PREFIX)) { + $features &= ~Bot::FEATURE_WEBHOOK; + } + + $bot = new BotServer(); + $bot->setName($event->getName()); + $bot->setDescription($event->getDescription()); + $bot->setSecret($event->getSecret()); + $bot->setUrl($event->getUrl()); + $bot->setUrlHash(sha1($event->getUrl())); + $bot->setState(Bot::STATE_ENABLED); + $bot->setFeatures($features); + $this->botServerMapper->insert($bot); + } + } + + protected function handleBotUninstallEvent(BotUninstallEvent $event): void { + try { + $bot = $this->botServerMapper->findByUrlAndSecret($event->getUrl(), $event->getSecret()); + $this->botConversationMapper->deleteByBotId($bot->getId()); + $this->botServerMapper->delete($bot); + } catch (DoesNotExistException) { + } + } +} diff --git a/lib/Listener/CSPListener.php b/lib/Listener/CSPListener.php new file mode 100644 index 0000000..e13487c --- /dev/null +++ b/lib/Listener/CSPListener.php @@ -0,0 +1,51 @@ + + */ +class CSPListener implements IEventListener { + + public function __construct( + private Config $config, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof AddContentSecurityPolicyEvent)) { + return; + } + + $csp = new ContentSecurityPolicy(); + $csp->addAllowedImageDomain('https://*.tile.openstreetmap.org'); + $csp->addAllowedMediaDomain('blob:'); + $csp->addAllowedWorkerSrcDomain('blob:'); + $csp->addAllowedWorkerSrcDomain("'self'"); + $csp->addAllowedChildSrcDomain('blob:'); + $csp->addAllowedChildSrcDomain("'self'"); + $csp->addAllowedScriptDomain('blob:'); + $csp->addAllowedScriptDomain("'self'"); + $csp->addAllowedScriptDomain("'wasm-unsafe-eval'"); + $csp->addAllowedConnectDomain('blob:'); + $csp->addAllowedConnectDomain("'self'"); + foreach ($this->config->getAllServerUrlsForCSP() as $server) { + $csp->addAllowedConnectDomain($server); + } + + $event->addPolicy($csp); + } +} diff --git a/lib/Listener/CalDavEventListener.php b/lib/Listener/CalDavEventListener.php new file mode 100644 index 0000000..5a2326f --- /dev/null +++ b/lib/Listener/CalDavEventListener.php @@ -0,0 +1,215 @@ + */ +class CalDavEventListener implements IEventListener { + + public function __construct( + private Manager $manager, + private RoomService $roomService, + private LoggerInterface $logger, + private TimezoneService $timezoneService, + private ParticipantService $participantService, + private IL10N $l10n, + ) { + + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof CalendarObjectCreatedEvent && !$event instanceof CalendarObjectUpdatedEvent && !$event instanceof CalendarObjectDeletedEvent) { + return; + } + + $principaluri = $event->getCalendarData()['principaluri'] ?? null; + if (!$principaluri) { + $this->logger->debug('No principal uri for the event, skipping for calendar event integration'); + return; + } + + if ($principaluri === 'principals/system/system') { + $this->logger->debug('System calendar, skipping for calendar event integration'); + return; + } + + // The principal uri is in the format 'principals/users/' + $userId = substr($principaluri, 17); + + $calData = $event->getObjectData()['calendardata'] ?? null; + if (!$calData) { + $this->logger->debug('No calendar data for the event, skipping for calendar event integration'); + return; + } + + if (!str_contains($calData, 'LOCATION:')) { + $this->logger->debug('No location for the event, skipping for calendar event integration'); + return; + } + + try { + $vobject = Reader::read($calData); + } catch (ParseException $e) { /** Undocumented in sabre code */ + $this->logger->warning($e->getMessage()); + return; + } + + $vevent = $vobject->VEVENT; + + // Calendar objects can also be VTODO or VJOURNAL for instance + if ($vevent === null) { + $this->logger->debug('Calendar object is not an event, skipping for calendar event integration'); + return; + } + + // Check if the location is set and if the location string contains a call url + $location = $vevent->LOCATION?->getValue(); + if ($location === null || !str_contains($location, '/call/')) { + $this->logger->debug('No location for the event or event is not a call link, skipping for calendar event integration'); + return; + } + + // Check if room exists and check if user is part of room + $array = explode('/', $location); + $roomToken = end($array); + // Cut off any excess characters from the room token + if (str_contains($roomToken, '?')) { + $roomToken = substr($roomToken, 0, strpos($roomToken, '?')); + } + if (str_contains($roomToken, '#')) { + $roomToken = substr($roomToken, 0, strpos($roomToken, '#')); + } + try { + $room = $this->manager->getRoomForUserByToken($roomToken, $userId); + } catch (RoomNotFoundException) { + // Change log level if log is spammed too much + $this->logger->warning('Room with ' . $roomToken . ' not found for calendar event integration'); + return; + } + + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException) { + $this->logger->debug('Room with ' . $roomToken . ' not found for user ' . $userId . ' for calendar event integration'); + return; + } + + if ($participant->getAttendee()->getParticipantType() !== Participant::OWNER) { + $this->logger->debug('Participant ' . $userId . ' is not owner for calendar event integration'); + return; + } + + // get room type and if it is not Room Object Event, return + if ($room->getObjectType() !== Room::OBJECT_TYPE_EVENT) { + $this->logger->debug("Room $roomToken not an event room for calendar event integration"); + return; + } + + $name = $vevent->SUMMARY?->getValue(); + if ($name !== null) { + $name = strlen($name) > 254 ? substr($name, 0, 254) . "\u{2026}" : trim($name); + } + + $description = $vevent->DESCRIPTION?->getValue(); + if ($description !== null) { + $description = strlen($description) > 1999 ? substr($description, 0, 1999) . "\u{2026}" : $description; + } + + $rrule = $vevent->RRULE; + $recurrenceId = $vevent->{'RECURRENCE-ID'}?->getValue(); + // We don't handle events with RRULEs + // And you cannot create an event room for a recurrence exception + if (!empty($rrule) || !empty($recurrenceId)) { + $this->roomService->resetObject($room); + $this->logger->debug("Room $roomToken calendar event contains an RRULE, converting to regular room for calendar event integration"); + if ($event instanceof CalendarObjectCreatedEvent && $description !== null) { + // We still need to set the description for newly created events + // Since the room is still a type event when sending the data from the frontend + // So set the description for newly created events here to restore previous behaviour + $this->roomService->setDescription($room, $description); + } + return; + } + + if ($this->roomService->hasExistingCalendarEvents($room, $userId, $vevent->UID->getValue())) { + $this->roomService->resetObject($room); + $this->logger->debug("Room $roomToken calendar event was already used previously, converting to regular room for calendar event integration"); + if ($event instanceof CalendarObjectCreatedEvent && $description !== null) { + // We still need to set the description for newly created events + // Since the room is still a type event when sending the data from the frontend + // So set the description for newly created events here to restore previous behaviour + $this->roomService->setDescription($room, $description); + } + return; + } + + // If the calendar event was deleted, we lock the room + if ($event instanceof CalendarObjectDeletedEvent) { + $this->roomService->setReadOnly($room, Room::READ_ONLY); + return; + } + + + // So we can unset names & descriptions in case the user deleted them + $this->roomService->setName($room, $name ?? $this->l10n->t('Talk conversation for event')); + $this->roomService->setDescription($room, $description ?? ''); + + /** @var DateTime $start */ + $start = $vevent->DTSTART; + /** @var DateTime $end */ + $end = $vevent->DTEND; + if ($start instanceof Date) { + // Full day events don't have a timezone so we need to get the user's timezone + // If we don't have that we can use the default server timezone + $timezone = $this->timezoneService->getUserTimezone($userId) ?? $this->timezoneService->getDefaultTimezone(); + try { + $start = $start->getDateTime(new \DateTimeZone($timezone))->getTimestamp(); + $end = $end->getDateTime(new \DateTimeZone($timezone))->getTimestamp(); + } catch (\Exception $e) { + $this->logger->warning("Invalid date time zone for user for room $roomToken, continuing with UTC+0: " . $e->getMessage() . ' for calendar event integration'); + // Since this is for a full day event, we set a timestamp with UTC+0 instead + $start = $start->getDateTime(new \DateTimeZone('UTC'))->getTimestamp(); + $end = $end->getDateTime(new \DateTimeZone('UTC'))->getTimestamp(); + } + } elseif ($start instanceof DateTime) { + // This already includes a TZ in the object + $start = $start->getDateTime()->getTimestamp(); + $end = $end->getDateTime()->getTimestamp(); + } + + $objectId = $start . '#' . $end; + $this->roomService->setObject($room, Room::OBJECT_TYPE_EVENT, $objectId); + // TODO Reconsider the lobby later, but it needs more thoughts to: + // 1. Allow others to ping the owner/host + // 2. Automatically disable + // but how to recover from adding a second event to a conversation then? + // $this->roomService->setLobby($room, Webinary::LOBBY_NON_MODERATORS, null); + } +} diff --git a/lib/Listener/CircleDeletedListener.php b/lib/Listener/CircleDeletedListener.php new file mode 100644 index 0000000..d21c905 --- /dev/null +++ b/lib/Listener/CircleDeletedListener.php @@ -0,0 +1,46 @@ + + */ +class CircleDeletedListener implements IEventListener { + + public function __construct( + private Manager $manager, + private ParticipantService $participantService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof CircleDestroyedEvent)) { + // Unrelated + return; + } + + $circleId = $event->getCircle()->getSingleId(); + + // Remove the circle itself from being a participant + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $circleId); + foreach ($rooms as $room) { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_CIRCLES, $circleId); + $this->participantService->removeAttendee($room, $participant, AAttendeeRemovedEvent::REASON_REMOVED); + } + } +} diff --git a/lib/Listener/CircleEditedListener.php b/lib/Listener/CircleEditedListener.php new file mode 100644 index 0000000..26d0fc4 --- /dev/null +++ b/lib/Listener/CircleEditedListener.php @@ -0,0 +1,49 @@ + + */ +class CircleEditedListener implements IEventListener { + + public function __construct( + private readonly ParticipantService $participantService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof EditingCircleEvent && !$event instanceof CircleEditedEvent) { + // Unrelated + return; + } + + $displayName = $event->getCircle()->getDisplayName(); + if ($event instanceof EditingCircleEvent) { + // In the before event we need to cheat to get the name + if ($event->getFederatedEvent()?->getData()?->hasKey('name')) { + $displayName = $event->getFederatedEvent()->getData()->g('name'); + } + } + + $this->participantService->updateDisplayNameForActor( + Attendee::ACTOR_CIRCLES, + $event->getCircle()->getSingleId(), + $displayName, + ); + } +} diff --git a/lib/Listener/CircleMembershipListener.php b/lib/Listener/CircleMembershipListener.php new file mode 100644 index 0000000..f539987 --- /dev/null +++ b/lib/Listener/CircleMembershipListener.php @@ -0,0 +1,182 @@ +addingCircleMemberEvent($event); + } + + if ($event instanceof RemovingCircleMemberEvent) { + $this->removeFormerMemberFromRooms($event); + } + } + + protected function addingCircleMemberEvent(AddingCircleMemberEvent $event): void { + $circle = $event->getCircle(); + $roomsForTargetCircle = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $circle->getSingleId()); + $roomsToAdd = []; + foreach ($roomsForTargetCircle as $room) { + $roomsToAdd[$room->getId()] = $room; + } + + // Check nested circles + $memberships = $circle->getMemberships(); + foreach ($memberships as $membership) { + $parentId = $membership->getCircleId(); + $parentRooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $parentId); + foreach ($parentRooms as $room) { + if (isset($roomsToAdd[$room->getId()])) { + continue; + } + $roomsToAdd[$room->getId()] = $room; + } + } + + + if (empty($roomsToAdd)) { + // The circle is not in any room => bye! + return; + } + + // This member is a "membership" in circles which links to entities such as users, groups or circles + $newMember = $event->getMember(); + // Get the base circle of the membership + $basedOnCircle = $newMember->getBasedOn(); + // Get all (nested) memberships in the added $newMember as a flat list + $userMembers = $basedOnCircle->getInheritedMembers(); + + $invitedBy = $circle->hasInitiator() ? $circle->getInitiator() : $newMember->getInvitedBy(); + if ($invitedBy->getUserType() === Member::TYPE_USER && $invitedBy->getUserId() !== '') { + $this->session->set('talk-overwrite-actor-id', $invitedBy->getUserId()); + $this->session->set('talk-overwrite-actor-displayname', $invitedBy->getDisplayName()); + } elseif ($invitedBy->getUserType() === Member::TYPE_APP && $invitedBy->getBasedOn()->getSource() === Member::APP_OCC) { + $this->session->set('talk-overwrite-actor-cli', 'cli'); + } + + foreach ($userMembers as $userMember) { + $this->addNewMemberToRooms(array_values($roomsToAdd), $userMember); + } + $this->session->remove('talk-overwrite-actor-displayname'); + $this->session->remove('talk-overwrite-actor-id'); + $this->session->remove('talk-overwrite-actor-cli'); + } + + protected function addNewMemberToRooms(array $rooms, Member $member): void { + if (empty($rooms)) { + return; + } + + if ($member->getUserType() !== Member::TYPE_USER || $member->getUserId() === '') { + // Not a user? + return; + } + + $user = $this->userManager->get($member->getUserId()); + if (!$user instanceof IUser) { + return; + } + + $bannedRoomIds = $this->banService->getBannedRoomsForUserId($user->getUID()); + foreach ($rooms as $room) { + if (isset($bannedRoomIds[$room->getId()])) { + $this->logger->warning('User ' . $user->getUID() . ' is banned from conversation ' . $room->getToken() . ' and was skipped while adding them to circle ' . $member->getCircle()->getDisplayName()); + continue; + } + + try { + $participant = $room->getParticipant($member->getUserId()); + if ($participant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + $this->participantService->updateParticipantType($room, $participant, Participant::USER); + } + } catch (ParticipantNotFoundException $e) { + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $member->getUserId(), + 'displayName' => $user->getDisplayName(), + ]]); + } + } + } + + protected function removeFormerMemberFromRooms(RemovingCircleMemberEvent $event): void { + $circle = $event->getCircle(); + $removedMember = $event->getMember(); + + if ($removedMember->getUserType() !== Member::TYPE_USER || $removedMember->getUserId() === '') { + // Not a user? + return; + } + + $user = $this->userManager->get($removedMember->getUserId()); + if (!$user instanceof IUser) { + // User doesn't exist anymore? + return; + } + + $removedBy = $circle->hasInitiator() ? $circle->getInitiator() : $removedMember->getInvitedBy(); + if ($removedBy->getUserType() === Member::TYPE_USER && $removedBy->getUserId() !== '') { + $this->session->set('talk-overwrite-actor-id', $removedBy->getUserId()); + $this->session->set('talk-overwrite-actor-displayname', $removedBy->getDisplayName()); + } elseif ($removedBy->getUserType() === Member::TYPE_APP && $removedBy->getUserId() === 'occ') { + $this->session->set('talk-overwrite-actor-cli', 'cli'); + } + + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $circle->getSingleId()); + if (empty($rooms)) { + return; + } + + $this->removeFromRoomsUnlessStillLinked($rooms, $user); + + $this->session->remove('talk-overwrite-actor-displayname'); + $this->session->remove('talk-overwrite-actor-id'); + $this->session->remove('talk-overwrite-actor-cli'); + } +} diff --git a/lib/Listener/DisplayNameListener.php b/lib/Listener/DisplayNameListener.php new file mode 100644 index 0000000..a5fbcdf --- /dev/null +++ b/lib/Listener/DisplayNameListener.php @@ -0,0 +1,61 @@ + + */ +class DisplayNameListener implements IEventListener { + + public function __construct( + private ParticipantService $participantService, + private PollService $pollService, + private BanService $banService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof UserChangedEvent && $event->getFeature() === 'displayName') { + $this->updateCachedName(Attendee::ACTOR_USERS, $event->getUser()->getUID(), (string)$event->getValue()); + } + if ($event instanceof GroupChangedEvent && $event->getFeature() === 'displayName') { + $this->updateCachedName(Attendee::ACTOR_GROUPS, $event->getGroup()->getGID(), (string)$event->getValue()); + } + } + + protected function updateCachedName(string $actorType, string $actorId, string $newName): void { + $this->participantService->updateDisplayNameForActor( + $actorType, + $actorId, + $newName + ); + + $this->pollService->updateDisplayNameForActor( + $actorType, + $actorId, + $newName + ); + + $this->banService->updateDisplayNameForActor( + $actorType, + $actorId, + $newName + ); + } +} diff --git a/lib/Listener/FeaturePolicyListener.php b/lib/Listener/FeaturePolicyListener.php new file mode 100644 index 0000000..1d1d548 --- /dev/null +++ b/lib/Listener/FeaturePolicyListener.php @@ -0,0 +1,31 @@ + + */ +class FeaturePolicyListener implements IEventListener { + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof AddFeaturePolicyEvent)) { + return; + } + + $policy = new FeaturePolicy(); + $policy->addAllowedCameraDomain('\'self\''); + $policy->addAllowedMicrophoneDomain('\'self\''); + $event->addPolicy($policy); + } +} diff --git a/lib/Listener/GroupDeletedListener.php b/lib/Listener/GroupDeletedListener.php new file mode 100644 index 0000000..6cab43e --- /dev/null +++ b/lib/Listener/GroupDeletedListener.php @@ -0,0 +1,64 @@ + + */ +class GroupDeletedListener implements IEventListener { + + public function __construct( + private IConfig $config, + private Manager $manager, + private ParticipantService $participantService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof GroupDeletedEvent)) { + // Unrelated + return; + } + + $gid = $event->getGroup()->getGID(); + + $this->removeGroupFromConfig('sip_bridge_groups', $gid); + $this->removeGroupFromConfig('start_conversations', $gid); + $this->removeGroupFromConfig('allowed_groups', $gid); + + // Remove the group itself from being a participant + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_GROUPS, $gid); + foreach ($rooms as $room) { + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_GROUPS, $gid); + $this->participantService->removeAttendee($room, $participant, AAttendeeRemovedEvent::REASON_REMOVED); + } + } + + protected function removeGroupFromConfig(string $configKey, string $removeGroupId): void { + $json = $this->config->getAppValue('spreed', $configKey, '[]'); + $array = json_decode($json, true); + $gids = \is_array($array) ? $array : []; + + $gids = array_filter($gids, static function ($gid) use ($removeGroupId) { + return $gid !== $removeGroupId; + }); + + $this->config->setAppValue('spreed', $configKey, json_encode($gids)); + } +} diff --git a/lib/Listener/GroupMembershipListener.php b/lib/Listener/GroupMembershipListener.php new file mode 100644 index 0000000..a7d87c5 --- /dev/null +++ b/lib/Listener/GroupMembershipListener.php @@ -0,0 +1,68 @@ +addNewMemberToRooms($event->getGroup(), $event->getUser()); + } + if ($event instanceof UserRemovedEvent) { + $this->removeFormerMemberFromRooms($event->getGroup(), $event->getUser()); + } + } + + protected function addNewMemberToRooms(IGroup $group, IUser $user): void { + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_GROUPS, $group->getGID()); + + if (empty($rooms)) { + return; + } + + $bannedRoomIds = $this->banService->getBannedRoomsForUserId($user->getUID()); + foreach ($rooms as $room) { + if (isset($bannedRoomIds[$room->getId()])) { + $this->logger->warning('User ' . $user->getUID() . ' is banned from conversation ' . $room->getToken() . ' and was skipped while adding them to group ' . $group->getDisplayName()); + continue; + } + + try { + $participant = $this->participantService->getParticipant($room, $user->getUID()); + if ($participant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + $this->participantService->updateParticipantType($room, $participant, Participant::USER); + } + } catch (ParticipantNotFoundException $e) { + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + ]]); + } + } + } + + protected function removeFormerMemberFromRooms(IGroup $group, IUser $user): void { + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_GROUPS, $group->getGID()); + if (empty($rooms)) { + return; + } + + $this->removeFromRoomsUnlessStillLinked($rooms, $user); + } +} diff --git a/lib/Listener/NoteToSelfListener.php b/lib/Listener/NoteToSelfListener.php new file mode 100644 index 0000000..817b3a2 --- /dev/null +++ b/lib/Listener/NoteToSelfListener.php @@ -0,0 +1,31 @@ + + */ +class NoteToSelfListener implements IEventListener { + public function __construct( + protected NoteToSelfService $service, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof BeforeRoomsFetchEvent) { + $this->service->initialCreateNoteToSelfForUser($event->getUserId()); + } + } +} diff --git a/lib/Listener/RestrictStartingCalls.php b/lib/Listener/RestrictStartingCalls.php new file mode 100644 index 0000000..b441f90 --- /dev/null +++ b/lib/Listener/RestrictStartingCalls.php @@ -0,0 +1,71 @@ + + */ +class RestrictStartingCalls implements IEventListener { + + public function __construct( + protected IConfig $serverConfig, + protected ParticipantService $participantService, + ) { + } + + /** + * @throws ForbiddenException + */ + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeParticipantModifiedEvent) { + return; + } + + if ($event->getProperty() !== AParticipantModifiedEvent::PROPERTY_IN_CALL) { + return; + } + + if ($event->getNewValue() === Participant::FLAG_DISCONNECTED + || $event->getOldValue() !== Participant::FLAG_DISCONNECTED) { + return; + } + + $room = $event->getRoom(); + if ($room->getType() === Room::TYPE_PUBLIC + && $room->getObjectType() === Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + // Always allow guests to start calls in password-request calls + return; + } + + if (in_array($room->getObjectType(), [ + Room::OBJECT_TYPE_PHONE_LEGACY, + Room::OBJECT_TYPE_PHONE_TEMPORARY, + Room::OBJECT_TYPE_PHONE_PERSIST, + ], true) && $room->getObjectId() === Room::OBJECT_ID_PHONE_INCOMING) { + // Always allow guests to use the direct-dialin + return; + } + + if (!$event->getParticipant()->canStartCall($this->serverConfig) + && !$this->participantService->hasActiveSessionsInCall($room)) { + throw new ForbiddenException('Can not start a call'); + } + } +} diff --git a/lib/Listener/SampleConversationsListener.php b/lib/Listener/SampleConversationsListener.php new file mode 100644 index 0000000..71b7021 --- /dev/null +++ b/lib/Listener/SampleConversationsListener.php @@ -0,0 +1,31 @@ + + */ +class SampleConversationsListener implements IEventListener { + public function __construct( + protected SampleConversationsService $service, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof BeforeRoomsFetchEvent) { + $this->service->initialCreateSamples($event->getUserId()); + } + } +} diff --git a/lib/Listener/ThreadListener.php b/lib/Listener/ThreadListener.php new file mode 100644 index 0000000..9c7a7ed --- /dev/null +++ b/lib/Listener/ThreadListener.php @@ -0,0 +1,33 @@ + + */ +class ThreadListener implements IEventListener { + public function __construct( + protected readonly ThreadService $threadService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof AttendeesRemovedEvent) { + $attendeeIds = array_map(static fn (Attendee $attendee): int => $attendee->getId(), $event->getAttendees()); + $this->threadService->removeThreadAttendeesByAttendeeIds($attendeeIds); + } + } +} diff --git a/lib/Listener/UserDeletedListener.php b/lib/Listener/UserDeletedListener.php new file mode 100644 index 0000000..7dbf4a1 --- /dev/null +++ b/lib/Listener/UserDeletedListener.php @@ -0,0 +1,45 @@ + + */ +class UserDeletedListener implements IEventListener { + + public function __construct( + private Manager $manager, + private PollService $pollService, + private ConsentService $consentService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof UserDeletedEvent)) { + // Unrelated + return; + } + + $user = $event->getUser(); + $this->manager->removeUserFromAllRooms($user); + + $this->pollService->neutralizeDeletedUser(Attendee::ACTOR_USERS, $user->getUID()); + + $this->consentService->deleteByActor(Attendee::ACTOR_USERS, $user->getUID()); + } +} diff --git a/lib/Manager.php b/lib/Manager.php new file mode 100644 index 0000000..6613539 --- /dev/null +++ b/lib/Manager.php @@ -0,0 +1,1565 @@ +commentsManager = $commentsManager; + } + + public function forAllRooms(callable $callback): void { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $room = $this->createRoomObject($row); + $callback($room); + } + $result->closeCursor(); + } + + /** + * @param array $data + * @return Room + */ + public function createRoomObjectFromData(array $data): Room { + return $this->createRoomObject(array_merge([ + 'r_id' => 0, + 'type' => 0, + 'read_only' => 0, + 'listable' => 0, + 'message_expiration' => 0, + 'lobby_state' => 0, + 'sip_enabled' => 0, + 'assigned_hpb' => null, + 'token' => '', + 'name' => '', + 'description' => '', + 'password' => '', + 'avatar' => '', + 'remote_server' => '', + 'remote_token' => '', + 'default_permissions' => 0, + 'call_permissions' => 0, + 'call_flag' => 0, + 'active_since' => null, + 'last_activity' => null, + 'last_message' => 0, + 'comment_id' => null, + 'lobby_timer' => null, + 'object_type' => '', + 'object_id' => '', + 'breakout_room_mode' => 0, + 'breakout_room_status' => 0, + 'call_recording' => 0, + 'recording_consent' => 0, + 'has_federation' => 0, + 'mention_permissions' => 0, + 'transcription_language' => '', + ], $data)); + } + + /** + * @param array $row + * @return Room + */ + public function createRoomObject(array $row): Room { + $activeSince = null; + if (!empty($row['active_since'])) { + $activeSince = $this->timeFactory->getDateTime($row['active_since']); + } + + $lastActivity = null; + if (!empty($row['last_activity'])) { + $lastActivity = $this->timeFactory->getDateTime($row['last_activity']); + } + + $lobbyTimer = null; + if (!empty($row['lobby_timer'])) { + $lobbyTimer = $this->timeFactory->getDateTime($row['lobby_timer']); + } + + $lastMessage = null; + if (!empty($row['comment_id'])) { + $lastMessage = $this->createCommentObject($row); + } + + $assignedSignalingServer = $row['assigned_hpb']; + if ($assignedSignalingServer !== null) { + $assignedSignalingServer = (int)$assignedSignalingServer; + } + + return new Room( + $this, + $this->db, + $this->dispatcher, + $this->timeFactory, + (int)$row['r_id'], + (int)$row['type'], + (int)$row['read_only'], + (int)$row['listable'], + (int)$row['message_expiration'], + (int)$row['lobby_state'], + (int)$row['sip_enabled'], + $assignedSignalingServer, + (string)$row['token'], + (string)$row['name'], + (string)$row['description'], + (string)$row['password'], + (string)$row['avatar'], + (string)$row['remote_server'], + (string)$row['remote_token'], + (int)$row['default_permissions'], + (int)$row['call_permissions'], + (int)$row['call_flag'], + $activeSince, + $lastActivity, + (int)$row['last_message'], + $lastMessage, + $lobbyTimer, + (string)$row['object_type'], + (string)$row['object_id'], + (int)$row['breakout_room_mode'], + (int)$row['breakout_room_status'], + (int)$row['call_recording'], + (int)$row['recording_consent'], + (int)$row['has_federation'], + (int)$row['mention_permissions'], + (string)$row['transcription_language'], + ); + } + + /** + * @param Room $room + * @param array $row + * @return Participant + */ + public function createParticipantObject(Room $room, array $row): Participant { + $attendee = $this->attendeeMapper->createAttendeeFromRow($row); + $session = null; + if (!empty($row['s_id'])) { + $session = $this->sessionMapper->createSessionFromRow($row); + } + + return new Participant($room, $attendee, $session); + } + + public function createCommentObject(array $row): ?IComment { + /** @psalm-suppress UndefinedInterfaceMethod */ + return $this->commentsManager->getCommentFromData([ + 'id' => $row['comment_id'], + 'parent_id' => $row['comment_parent_id'], + 'topmost_parent_id' => $row['comment_topmost_parent_id'], + 'children_count' => $row['comment_children_count'], + 'message' => $row['comment_message'], + 'verb' => $row['comment_verb'], + 'actor_type' => $row['comment_actor_type'], + 'actor_id' => $row['comment_actor_id'], + 'object_type' => $row['comment_object_type'], + 'object_id' => $row['comment_object_id'], + // Reference id column might not be there, so we need to fallback to null + 'reference_id' => $row['comment_reference_id'] ?? null, + 'creation_timestamp' => $row['comment_creation_timestamp'], + 'latest_child_timestamp' => $row['comment_latest_child_timestamp'], + 'reactions' => $row['comment_reactions'], + 'expire_date' => $row['comment_expire_date'], + 'meta_data' => $row['comment_meta_data'], + ]); + } + + public function loadLastCommentInfo(int $id): ?IComment { + try { + return $this->commentsManager->get((string)$id); + } catch (NotFoundException $e) { + return null; + } + } + + public function resetAssignedSignalingServers(ICache $cache): void { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->isNotNull('r.assigned_hpb')); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $room = $this->createRoomObject($row); + if (!$this->participantService->hasActiveSessions($room)) { + Server::get(RoomService::class)->setAssignedSignalingServer($room, null); + $cache->remove($room->getToken()); + } + } + $result->closeCursor(); + } + + /** + * @param string $searchToken + * @param int|null $limit + * @param int|null $offset + * @return Room[] + */ + public function searchRoomsByToken(string $searchToken = '', ?int $limit = null, ?int $offset = null): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->setMaxResults(1); + + if ($searchToken !== '') { + $query->where($query->expr()->iLike('r.token', $query->createNamedParameter( + '%' . $this->db->escapeLikeParameter($searchToken) . '%' + ))); + } + + $query->setMaxResults($limit) + ->setFirstResult($offset) + ->orderBy('r.token', 'ASC'); + $result = $query->executeQuery(); + + $rooms = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $rooms[] = $this->createRoomObject($row); + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @return Room[] + */ + public function getRoomsLongerActiveSince(\DateTime $maxActiveSince): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->isNotNull('r.active_since')) + ->andWhere($query->expr()->lte('r.active_since', $query->createNamedParameter($maxActiveSince, IQueryBuilder::PARAM_DATE))) + ->orderBy('r.id', 'ASC'); + $result = $query->executeQuery(); + + $rooms = []; + while ($row = $result->fetch()) { + $rooms[] = $this->createRoomObject($row); + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @return list + */ + public function getInactiveRooms(\DateTime $inactiveSince): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->andWhere($query->expr()->lte('r.last_activity', $query->createNamedParameter($inactiveSince, IQueryBuilder::PARAM_DATETIME_MUTABLE))) + ->andWhere($query->expr()->neq('r.read_only', $query->createNamedParameter(Room::READ_ONLY, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->in('r.type', $query->createNamedParameter([Room::TYPE_PUBLIC, Room::TYPE_GROUP], IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($query->expr()->emptyString('remoteServer')) + ->orderBy('r.id', 'ASC'); + $result = $query->executeQuery(); + + $rooms = []; + while ($row = $result->fetch()) { + $rooms[] = $this->createRoomObject($row); + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @param string $userId + * @param array $sessionIds A list of talk sessions to consider for loading (otherwise no session is loaded) + * @param bool $includeLastMessage + * @return Room[] + */ + public function getRoomsForUser(string $userId, array $sessionIds = [], bool $includeLastMessage = false): array { + return $this->getRoomsForActor(Attendee::ACTOR_USERS, $userId, $sessionIds, $includeLastMessage); + } + + /** + * @param string $actorType + * @param string $actorId + * @param array $sessionIds A list of talk sessions to consider for loading (otherwise no session is loaded) + * @param bool $includeLastMessage + * @return Room[] + */ + public function getRoomsForActor(string $actorType, string $actorId, array $sessionIds = [], bool $includeLastMessage = false, array $tokens = []): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $query->from('talk_rooms', 'r') + ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId)), + $query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType)), + $query->expr()->eq('a.room_id', 'r.id') + )) + ->where($query->expr()->isNotNull('a.id')); + + if (!empty($tokens)) { + $query->andWhere($query->expr()->in('r.token', $query->createNamedParameter($tokens, IQueryBuilder::PARAM_STR_ARRAY))); + } + + if (!empty($sessionIds)) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('a.id', 's.attendee_id'), + $query->expr()->in('s.session_id', $query->createNamedParameter($sessionIds, IQueryBuilder::PARAM_STR_ARRAY)) + )); + } + + if ($includeLastMessage) { + $this->loadLastMessageInfo($query); + } + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $room = $this->createRoomObject($row); + if ($actorType === Attendee::ACTOR_USERS && isset($row['actor_id'])) { + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + } + $rooms[] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @param string $userId + * @return Room[] + */ + public function getLeftOneToOneRoomsForUser(string $userId): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.type', $query->createNamedParameter(Room::TYPE_ONE_TO_ONE))) + ->andWhere($query->expr()->like('r.name', $query->createNamedParameter('%' . $this->db->escapeLikeParameter(json_encode($userId)) . '%'))); + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $room = $this->createRoomObject($row); + $rooms[] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + public function removeUserFromAllRooms(IUser $user, bool $privateOnly = false): void { + $rooms = $this->getRoomsForUser($user->getUID()); + foreach ($rooms as $room) { + if ($privateOnly) { + if ($room->getType() === Room::TYPE_ONE_TO_ONE + || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $room->getType() === Room::TYPE_PUBLIC) { + continue; + } + + if ($this->isRoomListableByUser($room, $user->getUID())) { + continue; + } + } + + if ($this->participantService->getNumberOfUsers($room) === 1) { + Server::get(RoomService::class)->deleteRoom($room); + } else { + $this->participantService->removeUser($room, $user, AAttendeeRemovedEvent::REASON_REMOVED_ALL); + } + } + + if (!$privateOnly) { + $leftRooms = $this->getLeftOneToOneRoomsForUser($user->getUID()); + foreach ($leftRooms as $room) { + // We are changing the room type and name so a potential follow-up + // user with the same user-id can not reopen the one-to-one conversation. + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setType($room, Room::TYPE_ONE_TO_ONE_FORMER, true); + $roomService->setName($room, $user->getDisplayName(), ''); + $roomService->setReadOnly($room, Room::READ_ONLY); + } + } + } + + /** + * @param string $userId + * @return string[] + */ + public function getRoomTokensWithAttachmentsForUser(string $userId): array { + $query = $this->db->getQueryBuilder(); + $query->select('r.token') + ->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_rooms', 'r', $query->expr()->eq('a.room_id', 'r.id')) + ->where($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))) + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('r.has_attachments', $query->createNamedParameter(Attachment::ATTACHMENTS_ATLEAST_ONE))); + + $result = $query->executeQuery(); + $roomTokens = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $roomTokens[] = $row['token']; + } + $result->closeCursor(); + + return $roomTokens; + } + + /** + * Returns rooms that are listable where the current user is not a participant. + * + * @param string $userId user id + * @param string $term search term + * @return Room[] + */ + public function getListedRoomsForUser(string $userId, string $term = ''): array { + $allowedRoomTypes = [Room::TYPE_GROUP, Room::TYPE_PUBLIC]; + $allowedListedTypes = [Room::LISTABLE_ALL]; + if (!$this->isGuestUser($userId)) { + $allowedListedTypes[] = Room::LISTABLE_USERS; + } + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), + $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), + $query->expr()->eq('a.room_id', 'r.id') + )) + ->where($query->expr()->isNull('a.id')) + ->andWhere($query->expr()->in('r.type', $query->createNamedParameter($allowedRoomTypes, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($query->expr()->in('r.listable', $query->createNamedParameter($allowedListedTypes, IQueryBuilder::PARAM_INT_ARRAY))) + ->orderBy('r.id', 'ASC'); + + if ($term !== '') { + $query->andWhere( + $query->expr()->iLike('name', $query->createNamedParameter( + '%' . $this->db->escapeLikeParameter($term) . '%' + )) + ); + } + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + $room = $this->createRoomObject($row); + $rooms[] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + /** + * Does *not* return public rooms for participants that have not been invited + * + * @param int $roomId + * @param string|null $userId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomForUser(int $roomId, ?string $userId): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + if ($userId !== null) { + // Non guest user + $helper->selectAttendeesTable($query); + $query->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), + $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), + $query->expr()->eq('a.room_id', 'r.id') + )) + ->andWhere($query->expr()->isNotNull('a.id')); + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + $room = $this->createRoomObject($row); + if ($userId !== null && isset($row['actor_id'])) { + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + } + + if ($userId === null && $room->getType() !== Room::TYPE_PUBLIC) { + throw new RoomNotFoundException(); + } + + return $room; + } + + /** + * Does *not* return public rooms for participants that have not been invited + * + * @param list $roomIds + * @param string $userId + * @return array Key is the roomId + */ + public function getRoomsByIdForUser(array $roomIds, string $userId): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $query->from('talk_rooms', 'r') + ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), + $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), + $query->expr()->eq('a.room_id', 'r.id') + )) + ->where($query->expr()->in('r.id', $query->createNamedParameter($roomIds, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($query->expr()->isNotNull('a.id')); + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + continue; + } + + $room = $this->createRoomObject($row); + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + $rooms[$room->getId()] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + /** + * Returns room object for a user by token. + * + * Also returns: + * - public rooms for participants that have not been invited + * - listable rooms for participants that have not been invited + * + * This is useful so they can join. + * + * @param string $token + * @param string|null $userId + * @param string|null $sessionId + * @param bool $includeLastMessage + * @param bool $isSIPBridgeRequest + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomForUserByToken(string $token, ?string $userId, ?string $sessionId = null, bool $includeLastMessage = false, bool $isSIPBridgeRequest = false): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))) + ->setMaxResults(1); + + if ($userId !== null) { + // Non guest user + $helper->selectAttendeesTable($query); + $query->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_id', $query->createNamedParameter($userId)), + $query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS)), + $query->expr()->eq('a.room_id', 'r.id') + )); + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } + } + + if ($includeLastMessage) { + $this->loadLastMessageInfo($query); + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + $room = $this->createRoomObject($row); + if ($userId !== null && isset($row['actor_id'])) { + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + } + + if ($isSIPBridgeRequest || $room->getType() === Room::TYPE_PUBLIC) { + return $room; + } + + if ($userId !== null) { + // user already joined that room before + if ($row['actor_id'] === $userId) { + return $room; + } + + // never joined before but found in listing + if ($this->isRoomListableByUser($room, $userId)) { + return $room; + } + } + + throw new RoomNotFoundException(); + } + + /** + * @param int $roomId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomById(int $roomId): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + return $this->createRoomObject($row); + } + + /** + * @throws RoomNotFoundException + */ + public function getRoomByActor(string $token, string $actorType, string $actorId, ?string $sessionId = null, ?string $serverUrl = null): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $query->from('talk_rooms', 'r') + ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType)), + $query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId)), + $query->expr()->eq('a.room_id', 'r.id') + )); + + + if ($serverUrl === null) { + $query->where($query->expr()->eq('r.token', $query->createNamedParameter($token))); + } else { + $query + ->where($query->expr()->eq('r.remote_token', $query->createNamedParameter($token))) + ->andWhere($query->expr()->eq('r.remote_server', $query->createNamedParameter($serverUrl))); + } + + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + $room = $this->createRoomObject($row); + if ($actorType === Attendee::ACTOR_USERS && isset($row['actor_id'])) { + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + } + + return $room; + } + + /** + * @param string $token + * @param string $actorType + * @param string $actorId + * @param string $remoteAccess + * @param ?string $sessionId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomByRemoteAccess( + string $token, + string $actorType, + string $actorId, + #[SensitiveParameter] + string $remoteAccess, + ?string $sessionId = null, + ): Room { + return $this->getRoomByAccessToken($token, $actorType, $actorId, $remoteAccess, $sessionId); + } + + /** + * @param string $token + * @param string $actorType + * @param string $actorId + * @param string $remoteAccess + * @param ?string $sessionId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomByAccessToken( + string $token, + string $actorType, + string $actorId, + #[SensitiveParameter] + string $accessToken, + ?string $sessionId = null, + ): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $query->from('talk_rooms', 'r') + ->leftJoin('r', 'talk_attendees', 'a', $query->expr()->andX( + $query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType)), + $query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId)), + $query->expr()->eq('a.access_token', $query->createNamedParameter($accessToken)), + $query->expr()->eq('a.room_id', 'r.id') + )) + ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))); + + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + $room = $this->createRoomObject($row); + if (isset($row['actor_id'])) { + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + } else { + throw new RoomNotFoundException(); + } + + return $room; + } + + /** + * @param string|null $preloadUserId Load this participant's information if possible + * @throws RoomNotFoundException + */ + public function getRoomByToken(string $token, ?string $preloadUserId = null, ?string $serverUrl = null): Room { + $preloadUserId = $preloadUserId === '' ? null : $preloadUserId; + if ($preloadUserId !== null) { + return $this->getRoomByActor($token, Attendee::ACTOR_USERS, $preloadUserId, null, $serverUrl); + } + + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r'); + + if ($serverUrl === null) { + $query->where($query->expr()->eq('r.token', $query->createNamedParameter($token))); + } else { + $query + ->where($query->expr()->eq('r.remote_token', $query->createNamedParameter($token))) + ->andWhere($query->expr()->eq('r.remote_server', $query->createNamedParameter($serverUrl))); + } + + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + return $this->createRoomObject($row); + } + + /** + * @param string $objectType + * @param string $objectId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomByObject(string $objectType, string $objectId): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.object_type', $query->createNamedParameter($objectType))) + ->andWhere($query->expr()->eq('r.object_id', $query->createNamedParameter($objectId))) + ->orderBy('r.id', 'ASC'); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + return $this->createRoomObject($row); + } + + /** + * @return list + */ + public function getMultipleRoomsByObject(string $objectType, string $objectId, bool $orderById = false): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.object_type', $query->createNamedParameter($objectType))) + ->andWhere($query->expr()->eq('r.object_id', $query->createNamedParameter($objectId))); + + if ($orderById) { + $query->orderBy('id', 'ASC'); + } + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + $room = $this->createRoomObject($row); + $rooms[] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @return list + */ + public function getExpiringRoomsForObjectType(string $objectType, int $minimumLastActivity): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query, ''); + $query->from('talk_rooms') + ->where($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) + ->andWhere($query->expr()->lte('last_activity', $query->createNamedParameter(new \DateTimeImmutable('@' . $minimumLastActivity), IQueryBuilder::PARAM_DATETIME_IMMUTABLE))); + + if ($objectType === Room::OBJECT_TYPE_EVENT) { + // Ignore events that don't have a start and end date, + // as they are most likely from before the Talk 21.1 upgrade + $query->andWhere($query->expr()->like('object_id', $query->createNamedParameter('%' . $this->db->escapeLikeParameter('#') . '%'))); + } + + $result = $query->executeQuery(); + + $rooms = []; + while ($row = $result->fetch()) { + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + continue; + } + + $rooms[] = $this->createRoomObject($row); + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @param string[] $tokens + * @return array + */ + public function getRoomsByToken(array $tokens): array { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->in('r.token', $query->createNamedParameter($tokens, IQueryBuilder::PARAM_STR_ARRAY))); + + $result = $query->executeQuery(); + $rooms = []; + while ($row = $result->fetch()) { + $room = $this->createRoomObject($row); + $rooms[$room->getToken()] = $room; + } + $result->closeCursor(); + + return $rooms; + } + + /** + * @param string|null $userId + * @param string|null $sessionId + * @return Room + * @throws RoomNotFoundException + */ + public function getRoomForSession(?string $userId, ?string $sessionId): Room { + if ($sessionId === '' || $sessionId === '0') { + throw new RoomNotFoundException(); + } + + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') + ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) + ->leftJoin('a', 'talk_rooms', 'r', $query->expr()->eq('a.room_id', 'r.id')) + ->where($query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId))) + ->setMaxResults(1); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false || !$row['r_id']) { + throw new RoomNotFoundException(); + } + + if ($userId !== null) { + if ($row['actor_type'] !== Attendee::ACTOR_USERS || $userId !== $row['actor_id']) { + throw new RoomNotFoundException(); + } + } else { + if ($row['actor_type'] !== Attendee::ACTOR_GUESTS && $row['actor_type'] !== Attendee::ACTOR_EMAILS) { + throw new RoomNotFoundException(); + } + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + $room = $this->createRoomObject($row); + $participant = $this->createParticipantObject($room, $row); + $this->participantService->cacheParticipant($room, $participant); + $room->setParticipant($row['actor_id'], $participant); + + if ($room->getType() === Room::TYPE_PUBLIC || !in_array($participant->getAttendee()->getParticipantType(), [Participant::GUEST, Participant::GUEST_MODERATOR, Participant::USER_SELF_JOINED], true)) { + return $room; + } + + throw new RoomNotFoundException(); + } + + /** + * @param string $participant1 + * @param string $participant2 + * @return Room + * @throws RoomNotFoundException + */ + public function getOne2OneRoom(string $participant1, string $participant2): Room { + $users = [$participant1, $participant2]; + sort($users); + $name = json_encode($users); + + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.type', $query->createNamedParameter(Room::TYPE_ONE_TO_ONE, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('r.name', $query->createNamedParameter($name))); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new RoomNotFoundException(); + } + + if ($row['token'] === null) { + // FIXME Temporary solution for the Talk6 release + throw new RoomNotFoundException(); + } + + return $this->createRoomObject($row); + } + + /** + * Makes sure the user is part of a changelog room and returns it + * + * @param string $userId + * @return Room + */ + public function getChangelogRoom(string $userId): Room { + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectRoomsTable($query); + $query->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.type', $query->createNamedParameter(Room::TYPE_CHANGELOG, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('r.name', $query->createNamedParameter($userId))); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + $room = $this->createRoom(Room::TYPE_CHANGELOG, $userId, sipEnabled: Webinary::SIP_DISABLED); + Server::get(RoomService::class)->setReadOnly($room, Room::READ_ONLY); + + $user = $this->userManager->get($userId); + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $userId, + 'displayName' => $user ? $user->getDisplayName() : $userId, + ]]); + return $room; + } + + $room = $this->createRoomObject($row); + + try { + $this->participantService->getParticipant($room, $userId, false); + } catch (ParticipantNotFoundException $e) { + $user = $this->userManager->get($userId); + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $userId, + 'displayName' => $user ? $user->getDisplayName() : $userId, + ]]); + } + + return $room; + } + + public function createRoom( + int $type, + string $name = '', + string $objectType = '', + string $objectId = '', + string $password = '', + ?int $readOnly = null, + ?int $listable = null, + ?int $messageExpiration = null, + ?int $lobbyState = null, + ?\DateTime $lobbyTimer = null, + ?int $sipEnabled = null, + ?int $permissions = null, + ?int $recordingConsent = null, + ?int $mentionPermissions = null, + ?string $description = null, + ): Room { + $token = $this->getNewToken(); + $row = [ + 'name' => $name, + 'type' => $type, + 'token' => $token, + 'object_type' => $objectType, + 'object_id' => $objectId, + 'password' => $password, + ]; + + $insert = $this->db->getQueryBuilder(); + $insert->insert('talk_rooms') + ->values( + [ + 'name' => $insert->createNamedParameter($name), + 'type' => $insert->createNamedParameter($type, IQueryBuilder::PARAM_INT), + 'token' => $insert->createNamedParameter($token), + 'password' => $insert->createNamedParameter($password), + ] + ); + + if (!empty($objectType) && !empty($objectId)) { + $insert->setValue('object_type', $insert->createNamedParameter($objectType)) + ->setValue('object_id', $insert->createNamedParameter($objectId)); + } + + if ($readOnly !== null) { + $insert->setValue('read_only', $insert->createNamedParameter($readOnly, IQueryBuilder::PARAM_INT)); + $row['read_only'] = $readOnly; + } + if ($listable !== null) { + $insert->setValue('listable', $insert->createNamedParameter($listable, IQueryBuilder::PARAM_INT)); + $row['listable'] = $listable; + } + if ($messageExpiration !== null) { + $insert->setValue('message_expiration', $insert->createNamedParameter($messageExpiration, IQueryBuilder::PARAM_INT)); + $row['message_expiration'] = $messageExpiration; + } + if ($lobbyState !== null) { + $insert->setValue('lobby_state', $insert->createNamedParameter($lobbyState, IQueryBuilder::PARAM_INT)); + $row['lobby_state'] = $lobbyState; + if ($lobbyTimer !== null) { + $insert->setValue('lobby_timer', $insert->createNamedParameter($lobbyTimer, IQueryBuilder::PARAM_DATETIME_MUTABLE)); + $row['lobby_timer'] = $lobbyTimer->format(\DATE_ATOM); + } + } + if ($sipEnabled === null) { + $default = $this->config->getAppValue('spreed', 'sip_dialin_default', 'none'); + if ($default !== 'none') { + $default = (int)$default; + if (in_array($default, [Webinary::SIP_DISABLED, Webinary::SIP_ENABLED, Webinary::SIP_ENABLED_NO_PIN], true)) { + $sipEnabled = $default; + } + } + } + if ($sipEnabled !== null) { + $insert->setValue('sip_enabled', $insert->createNamedParameter($sipEnabled, IQueryBuilder::PARAM_INT)); + $row['sip_enabled'] = $sipEnabled; + } + if ($permissions !== null) { + $insert->setValue('default_permissions', $insert->createNamedParameter($permissions, IQueryBuilder::PARAM_INT)); + $row['default_permissions'] = $permissions; + } + if ($recordingConsent !== null) { + $insert->setValue('recording_consent', $insert->createNamedParameter($recordingConsent, IQueryBuilder::PARAM_INT)); + $row['recording_consent'] = $recordingConsent; + } + if ($mentionPermissions !== null) { + $insert->setValue('mention_permissions', $insert->createNamedParameter($mentionPermissions, IQueryBuilder::PARAM_INT)); + $row['mention_permissions'] = $mentionPermissions; + } + if ($description !== null) { + $insert->setValue('description', $insert->createNamedParameter($description)); + $row['description'] = $description; + } + + $insert->executeStatement(); + $row['r_id'] = $insert->getLastInsertId(); + $room = $this->createRoomObjectFromData($row); + + $event = new RoomCreatedEvent($room); + $this->dispatcher->dispatchTyped($event); + + return $room; + } + + public function createRemoteRoom(int $type, string $name, string $remoteToken, string $remoteServer): Room { + $token = $this->getNewToken(); + + $qb = $this->db->getQueryBuilder(); + + $qb->insert('talk_rooms') + ->values([ + 'name' => $qb->createNamedParameter($name), + 'type' => $qb->createNamedParameter($type, IQueryBuilder::PARAM_INT), + 'token' => $qb->createNamedParameter($token), + 'remote_token' => $qb->createNamedParameter($remoteToken), + 'remote_server' => $qb->createNamedParameter($remoteServer), + ]); + + $qb->executeStatement(); + $roomId = $qb->getLastInsertId(); + + return $this->createRoomObjectFromData([ + 'r_id' => $roomId, + 'name' => $name, + 'type' => $type, + 'token' => $token, + 'remote_token' => $remoteToken, + 'remote_server' => $remoteServer, + ]); + } + + public function resolveRoomDisplayName(Room $room, string $userId, bool $forceName = false): string { + if ($room->getObjectType() === 'share:password') { + return $this->l->t('Password request: %s', [$room->getName()]); + } + + if ($room->getType() === Room::TYPE_CHANGELOG) { + return $this->l->t('Talk updates ✅'); + } + + if ($this->federationAuthenticator->isFederationRequest()) { + try { + $authenticatedRoom = $this->federationAuthenticator->getRoom(); + if ($authenticatedRoom->getId() === $room->getId()) { + return $room->getName(); + } + } catch (RoomNotFoundException) { + } + } + + if (!$forceName && $userId === '' && $room->getType() !== Room::TYPE_PUBLIC) { + return $this->l->t('Private conversation'); + } + + if ($room->getType() !== Room::TYPE_ONE_TO_ONE && $room->getName() === '') { + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setName($room, $this->getRoomNameByParticipants($room), ''); + } + + // Set the room name to the other participant for one-to-one rooms + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + if ($userId === '') { + return $this->l->t('Private conversation'); + } + + $users = json_decode($room->getName(), true); + $otherParticipant = ''; + $userIsParticipant = false; + + foreach ($users as $participantId) { + if ($participantId !== $userId) { + $otherParticipant = $this->userManager->getDisplayName($participantId) ?? $participantId; + } else { + $userIsParticipant = true; + } + } + + if (!$userIsParticipant) { + // Do not leak the name of rooms the user is not a part of + return $this->l->t('Private conversation'); + } + + if ($otherParticipant === '' && $room->getName() !== '') { + $userDisplayName = $this->userManager->getDisplayName($room->getName()); + $otherParticipant = $userDisplayName ?? $this->l->t('Deleted user (%s)', $room->getName()); + } + + return $otherParticipant; + } + + if ($forceName) { + return $room->getName(); + } + + if (!$this->isRoomListableByUser($room, $userId)) { + try { + if ($userId === '') { + $sessionId = $this->talkSession->getSessionForRoom($room->getToken()); + $this->participantService->getParticipantBySession($room, $sessionId); + } else { + $this->participantService->getParticipant($room, $userId, false); + } + } catch (ParticipantNotFoundException $e) { + // Do not leak the name of rooms the user is not a part of + return $this->l->t('Private conversation'); + } + } + + return $room->getName(); + } + + /** + * Returns whether the given room is listable for the given user. + * + * @param Room $room room + * @param string|null $userId user id + */ + public function isRoomListableByUser(Room $room, ?string $userId): bool { + if ($userId === null) { + // not listable for guest users with no account + return false; + } + + if ($room->getListable() === Room::LISTABLE_ALL) { + return true; + } + + if ($room->getListable() === Room::LISTABLE_USERS && !$this->isGuestUser($userId)) { + return true; + } + + return false; + } + + protected function getRoomNameByParticipants(Room $room): string { + $users = $this->participantService->getParticipantUserIds($room); + $displayNames = []; + + foreach ($users as $participantId) { + $displayNames[] = $this->userManager->getDisplayName($participantId) ?? $participantId; + } + + $roomName = implode(', ', $displayNames); + if (mb_strlen($roomName) > 64) { + $roomName = mb_substr($roomName, 0, 60) . '…'; + } + return $roomName; + } + + /** + * @return string + */ + protected function getNewToken(): string { + $entropy = (int)$this->config->getAppValue('spreed', 'token_entropy', '8'); + $entropy = max(8, $entropy); // For update cases + $digitsOnly = $this->talkConfig->isSIPConfigured(); + if ($digitsOnly) { + // Increase default token length as we only use numbers + $entropy = max(10, $entropy); + } + + $query = $this->db->getQueryBuilder(); + $query->select('r.id') + ->from('talk_rooms', 'r') + ->where($query->expr()->eq('r.token', $query->createParameter('token'))); + + $i = 0; + while ($i < 1000) { + try { + $token = $this->generateNewToken($query, $entropy, $digitsOnly); + if (\in_array($token, ['settings', 'backend'], true)) { + throw new \OutOfBoundsException('Reserved word'); + } + return $token; + } catch (\OutOfBoundsException $e) { + $i++; + if ($entropy >= 30 || $i >= 999) { + // Max entropy of 30 + $i = 0; + } + } + } + + $entropy++; + $this->config->setAppValue('spreed', 'token_entropy', (string)$entropy); + return $this->generateNewToken($query, $entropy, $digitsOnly); + } + + /** + * @param IQueryBuilder $query + * @param int $entropy + * @param bool $digitsOnly + * @return string + * @throws \OutOfBoundsException + */ + protected function generateNewToken(IQueryBuilder $query, int $entropy, bool $digitsOnly): string { + if (!$digitsOnly) { + $chars = str_replace(['l', '0', '1'], '', ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS); + $token = $this->secureRandom->generate($entropy, $chars); + } else { + $chars = ISecureRandom::CHAR_DIGITS; + $token = ''; + // Do not allow to start with a '0' as that is a special mode on the phone server + // Also there are issues with some providers when you enter the same number twice + // consecutive too fast, so we avoid this as well. + $lastDigit = '0'; + for ($i = 0; $i < $entropy; $i++) { + $lastDigit = $this->secureRandom->generate(1, + str_replace($lastDigit, '', $chars) + ); + $token .= $lastDigit; + } + } + + $query->setParameter('token', $token); + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if (is_array($row)) { + // Token already in use + throw new \OutOfBoundsException(); + } + return $token; + } + + public function isValidParticipant(string $userId): bool { + return $this->userManager->userExists($userId); + } + + /** + * Returns whether the given user id is a user created with the Guests app + * + * @param string $userId user id to check + * @return bool true if the user is a guest, false otherwise + */ + public function isGuestUser(string $userId): bool { + if (!$this->appManager->isEnabledForUser('guests')) { + return false; + } + // TODO: retrieve guest group name from app once exposed + return $this->groupManager->isInGroup($userId, 'guest_app'); + } + + protected function loadLastMessageInfo(IQueryBuilder $query): void { + $query->leftJoin('r', 'comments', 'c', $query->expr()->andX( + $query->expr()->eq('r.last_message', 'c.id'), + $query->expr()->isNull('r.remote_server'), + )); + $query->selectAlias('c.id', 'comment_id'); + $query->selectAlias('c.parent_id', 'comment_parent_id'); + $query->selectAlias('c.topmost_parent_id', 'comment_topmost_parent_id'); + $query->selectAlias('c.children_count', 'comment_children_count'); + $query->selectAlias('c.message', 'comment_message'); + $query->selectAlias('c.verb', 'comment_verb'); + $query->selectAlias('c.actor_type', 'comment_actor_type'); + $query->selectAlias('c.actor_id', 'comment_actor_id'); + $query->selectAlias('c.object_type', 'comment_object_type'); + $query->selectAlias('c.object_id', 'comment_object_id'); + $query->selectAlias('c.reference_id', 'comment_reference_id'); + $query->selectAlias('c.creation_timestamp', 'comment_creation_timestamp'); + $query->selectAlias('c.latest_child_timestamp', 'comment_latest_child_timestamp'); + $query->selectAlias('c.reactions', 'comment_reactions'); + $query->selectAlias('c.expire_date', 'comment_expire_date'); + $query->selectAlias('c.meta_data', 'comment_meta_data'); + } + + /** + * @param int $roomId + * @param string $password + * @throws Exception + */ + public function setPublic(int $roomId, string $password = ''): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('type', $update->createNamedParameter(Room::TYPE_PUBLIC, IQueryBuilder::PARAM_INT)) + ->set('password', $update->createNamedParameter($password, IQueryBuilder::PARAM_STR)) + ->where($update->expr()->eq('id', $update->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + } +} diff --git a/lib/Maps/MapsPluginLoader.php b/lib/Maps/MapsPluginLoader.php new file mode 100644 index 0000000..2e298a9 --- /dev/null +++ b/lib/Maps/MapsPluginLoader.php @@ -0,0 +1,53 @@ + + */ +class MapsPluginLoader implements IEventListener { + + public function __construct( + protected IRequest $request, + protected Config $talkConfig, + protected IUserSession $userSession, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof BeforeTemplateRenderedEvent)) { + return; + } + + if (!$event->isLoggedIn()) { + return; + } + + $user = $this->userSession->getUser(); + if ($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)) { + return; + } + + if (str_starts_with($this->request->getPathInfo(), '/apps/maps')) { + Util::addScript('spreed', 'talk-collections'); + Util::addScript('spreed', 'talk-maps'); + Util::addStyle('spreed', 'talk-maps'); + } + } +} diff --git a/lib/MatterbridgeManager.php b/lib/MatterbridgeManager.php new file mode 100644 index 0000000..b2e6290 --- /dev/null +++ b/lib/MatterbridgeManager.php @@ -0,0 +1,1012 @@ +getBridgeFromDb($room); + } + + /** + * Get bridge process information for a specific room + * + * @param Room $room the room + * @return TalkMatterbridgeProcessState process state and log + */ + public function getBridgeProcessState(Room $room): array { + $bridge = $this->getBridgeFromDb($room); + + $logContent = $this->getBridgeLog($room); + + $pid = $this->checkBridgeProcess($room, $bridge, false); + return [ + 'running' => ($pid !== 0), + 'log' => $logContent + ]; + } + + /** + * Get bridge log file content + * + * @param Room $room the room + * @return string log file content + */ + public function getBridgeLog(Room $room): string { + $outputPath = sprintf('/tmp/bridge-%s.log', $room->getToken()); + $logContent = file_get_contents($outputPath); + return $logContent !== false ? $logContent : ''; + } + + /** + * Edit bridge information for a room + * + * @param Room $room the room + * @param string $userId + * @param bool $enabled desired state of the bridge + * @param array $parts parts of the bridge (what it connects to) + * @return TalkMatterbridgeProcessState + */ + public function editBridgeOfRoom(Room $room, string $userId, bool $enabled, array $parts = []): array { + $currentBridge = $this->getBridgeOfRoom($room); + // kill matterbridge if we edit a running bridge config file so that it will be launched again + // matterbridge dynamic config reload does not fully work + if ($currentBridge['enabled'] && $enabled && $currentBridge['pid'] && $currentBridge['pid'] !== 0) { + $this->killPid($currentBridge['pid']); + } + $newBridge = [ + 'enabled' => $enabled, + 'pid' => $currentBridge['pid'] ?? 0, + 'parts' => $this->validateParts($parts), + ]; + + $this->notify($room, $userId, $currentBridge, $newBridge); + + $this->writeBridgeConfig($room, $newBridge); + + // check state and manage the binary + $pid = $this->checkBridgeProcess($room, $newBridge); + $newBridge['pid'] = $pid; + + // save config + $this->saveBridgeToDb($room->getId(), $newBridge); + + $logContent = $this->getBridgeLog($room); + return [ + 'running' => ($pid !== 0), + 'log' => $logContent + ]; + } + + /** + * Delete bridge information for a room + * + * @param Room $room the room + * @return bool success + */ + public function deleteBridgeOfRoom(Room $room): bool { + // first potentially kill the process + $currentBridge = $this->getBridgeOfRoom($room); + $currentBridge['enabled'] = false; + $this->checkBridgeProcess($room, $currentBridge); + // then actually delete the config + $this->config->deleteAppValue('spreed', 'bridge_' . $room->getToken()); + return true; + } + + /** + * Check everything bridge-related is running fine + * For each room, check mattermost process respects desired state + */ + public function checkAllBridges(): void { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from('talk_bridges') + ->where($query->expr()->eq('enabled', $query->createNamedParameter(1, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $bridge = [ + 'enabled' => (bool)$row['enabled'], + 'pid' => (int)$row['pid'], + 'parts' => json_decode($row['json_values'], true), + ]; + try { + $room = $this->manager->getRoomById((int)$row['room_id']); + } catch (RoomNotFoundException $e) { + continue; + } + $this->checkBridge($room, $bridge); + } + $result->closeCursor(); + } + + /** + * For one room, check mattermost process respects desired state + * @param Room $room the room + * @param array|null $bridge + * @return int the bridge process ID + */ + public function checkBridge(Room $room, ?array $bridge = null): int { + $bridge = $bridge ?: $this->getBridgeOfRoom($room); + $pid = $this->checkBridgeProcess($room, $bridge); + if ($pid !== $bridge['pid']) { + // save the new PID if necessary + $bridge['pid'] = $pid; + $this->saveBridgeToDb($room->getId(), $bridge); + } + return $pid; + } + + /** + * Write the mattermost configuration file for one room + * This method takes care of connecting the bridge to the Talk room with a bot user + * + * @param Room $room + * @param array $newBridge + */ + private function writeBridgeConfig(Room $room, array $newBridge): void { + // check bot user exists and is member of the room + // add the 'local' bridge part + $newBridge = $this->addLocalPart($room, $newBridge); + + // TODO adapt that to use appData + $configPath = sprintf('/tmp/bridge-%s.toml', $room->getToken()); + $configContent = $this->generateConfig($newBridge); + + // Create the config file and set permissions on it + touch($configPath); + chmod($configPath, 0600); + + file_put_contents($configPath, $configContent); + } + + /** + * Add a bridge part with bot credentials to connect to the room + * + * @param Room $room the room + * @param array $bridge bridge information + * @return array the bridge with local part added + */ + private function addLocalPart(Room $room, array $bridge): array { + $botInfo = $this->checkBotUser($room, $bridge['enabled']); + $localPart = [ + 'type' => 'nctalk', + 'login' => $botInfo['id'], + 'password' => $botInfo['password'], + 'channel' => $room->getToken(), + 'skiptls' => true, + ]; + $bridge['parts'][] = $localPart; + return $bridge; + } + + /** + * routine to check the Nextcloud bot user exists (and create it if not) + * and to add it in the room in necessary + * and to revoke its old app token + * and to generate a new app token (used to connect via matterbridge) + * + * @param Room $room the room + * @param bool $isBridgeEnabled whether we should add the bot and generate a new app token or remove the bot from the room + * @return array Bot user information (username and app token). token is an empty string if creation was not asked. + */ + private function checkBotUser(Room $room, bool $isBridgeEnabled): array { + // check if user exists and create it if necessary + if (!$this->userManager->userExists(self::BRIDGE_BOT_USERID)) { + $pass = $this->generatePassword(); + $this->config->setAppValue('spreed', 'bridge_bot_password', $pass); + $botUser = $this->userManager->createUser(self::BRIDGE_BOT_USERID, $pass); + // set avatar + $avatar = $this->avatarManager->getAvatar(self::BRIDGE_BOT_USERID); + $imageData = file_get_contents(\OC::$SERVERROOT . '/apps/spreed/img/bridge-bot.png'); + $avatar->set($imageData); + } else { + $botUser = $this->userManager->get(self::BRIDGE_BOT_USERID); + } + + // check if the bot user is member of the room and add or remove it + try { + $this->participantService->getParticipant($room, self::BRIDGE_BOT_USERID, false); + if (!$isBridgeEnabled) { + $this->participantService->removeUser($room, $botUser, AAttendeeRemovedEvent::REASON_REMOVED); + } + } catch (ParticipantNotFoundException $e) { + if ($isBridgeEnabled) { + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => self::BRIDGE_BOT_USERID, + 'displayName' => $botUser->getDisplayName(), + 'participantType' => Participant::USER, + ]]); + } + } + + // delete old bot app tokens for this room + $tokenName = 'spreed_' . $room->getToken(); + $tokens = $this->tokenProvider->getTokenByUser(self::BRIDGE_BOT_USERID); + foreach ($tokens as $t) { + if ($t->getName() === $tokenName) { + $this->tokenProvider->invalidateTokenById(self::BRIDGE_BOT_USERID, $t->getId()); + } + } + + if ($isBridgeEnabled) { + // generate app token for the bot + $appToken = $this->generatePassword(); + $botPassword = $this->config->getAppValue('spreed', 'bridge_bot_password', ''); + $generatedToken = $this->tokenProvider->generateToken( + $appToken, + self::BRIDGE_BOT_USERID, + self::BRIDGE_BOT_USERID, + $botPassword, + $tokenName, + IToken::PERMANENT_TOKEN, + IToken::REMEMBER + ); + } else { + $appToken = ''; + } + + return [ + 'id' => self::BRIDGE_BOT_USERID, + 'password' => $appToken, + ]; + } + + private function generatePassword(): string { + // remove \ and " because it messes with Matterbridge toml file parsing + $symbols = str_replace(['"', '\\'], '', ISecureRandom::CHAR_SYMBOLS); + + // make sure we have at least one of all categories + $upper = $this->random->generate(1, ISecureRandom::CHAR_UPPER); + $lower = $this->random->generate(1, ISecureRandom::CHAR_LOWER); + $digit = $this->random->generate(1, ISecureRandom::CHAR_DIGITS); + $symbol = $this->random->generate(1, $symbols); + + $randomString = $this->random->generate(68, ISecureRandom::CHAR_UPPER . ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS . $symbols); + + $password = $upper . $lower . $digit . $symbol . $randomString; + $password = str_shuffle($password); + return $password; + } + + /** + * Actually generate the matterbridge configuration file content for one bridge (one room) + * It basically add a pair of sections for each part: authentication and target channel + * + * @param array $bridge + * @return string config file content + */ + private function generateConfig(array $bridge): string { + $content = ''; + foreach ($bridge['parts'] as $k => $part) { + $k = (int)$k; + $type = $part['type']; + + if ($type === 'nctalk') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + if (isset($part['server']) && $part['server'] !== '') { + $serverUrl = $part['server']; + } else { + $serverUrl = preg_replace('/\/+$/', '', $this->urlGenerator->getAbsoluteURL('')); + $content .= ' SeparateDisplayName = true' . "\n"; + // TODO remove that + //$serverUrl = preg_replace('/https:/', 'http:', $serverUrl); + } + if ($part['skiptls']) { + $content .= ' SkipTLSVerify = true' . "\n"; + } + $content .= sprintf(' Server = "%s"', $serverUrl) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat="[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'mattermost') { + // remove protocol from server URL + if (preg_match('/^https?:/', $part['server'])) { + $part['server'] = $this->cleanUrl($part['server']); + } + $content .= sprintf('[%s]', $type) . "\n"; + $content .= sprintf(' [%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= sprintf(' Team = "%s"', $part['team']) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'matrix') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' NoHomeServerSuffix = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'zulip') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Token = "%s"', $part['token']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'rocketchat') { + // include # in channel + if (!str_starts_with($part['channel'], '#')) { + $bridge['parts'][$k]['channel'] = '#' . $part['channel']; + } + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + if ($part['skiptls']) { + $content .= ' SkipTLSVerify = true' . "\n"; + } + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'slack') { + // do not include # in channel + if (str_starts_with($part['channel'], '#')) { + $bridge['parts'][$k]['channel'] = ltrim($part['channel'], '#'); + } + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Token = "%s"', $part['token']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'discord') { + // do not include # in channel + if (str_starts_with($part['channel'], '#')) { + $bridge['parts'][$k]['channel'] = ltrim($part['channel'], '#'); + } + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Token = "%s"', $part['token']) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'telegram') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Token = "%s"', $part['token']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'steam') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Login = "%s"', $part['login']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'irc') { + // include # in channel + if (!str_starts_with($part['channel'], '#')) { + $bridge['parts'][$k]['channel'] = '#' . $part['channel']; + } + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + if ($part['password']) { + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + } + $content .= sprintf(' Nick = "%s"', $part['nick']) . "\n"; + if ($part['nickservnick']) { + $content .= sprintf(' NickServNick = "%s"', $part['nickservnick']) . "\n"; + $content .= sprintf(' NickServPassword = "%s"', $part['nickservpassword']) . "\n"; + } + if ($part['usetls']) { + $content .= ' UseTLS = true' . "\n"; + } + if ($part['usesasl']) { + $content .= ' UseSASL = true' . "\n"; + } + if ($part['skiptls']) { + $content .= ' SkipTLSVerify = true' . "\n"; + } + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'msteams') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' TenantID = "%s"', $part['tenantid']) . "\n"; + $content .= sprintf(' ClientID = "%s"', $part['clientid']) . "\n"; + $content .= sprintf(' TeamID = "%s"', $part['teamid']) . "\n"; + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } elseif ($type === 'xmpp') { + $content .= sprintf('[%s.%s]', $type, $k) . "\n"; + $content .= sprintf(' Server = "%s"', $part['server']) . "\n"; + $content .= sprintf(' Jid = "%s"', $part['jid']) . "\n"; + $content .= sprintf(' Password = "%s"', $part['password']) . "\n"; + $content .= sprintf(' Muc = "%s"', $part['muc']) . "\n"; + $content .= sprintf(' Nick = "%s"', $part['nick']) . "\n"; + if ($part['skiptls']) { + $content .= ' SkipTLSVerify = true' . "\n"; + } + $content .= ' PrefixMessagesWithNick = true' . "\n"; + $content .= ' RemoteNickFormat = "[{PROTOCOL}] <{NICK}> "' . "\n\n"; + } + } + + $content .= '[[gateway]]' . "\n"; + $content .= ' name = "myGateway"' . "\n"; + $content .= ' enable = true' . "\n\n"; + + foreach ($bridge['parts'] as $k => $part) { + $type = $part['type']; + + $content .= '[[gateway.inout]]' . "\n"; + $content .= sprintf(' account = "%s.%s"', $type, $k) . "\n"; + $content .= sprintf(' channel = "%s"', $part['channel']) . "\n"; + if ($type === 'irc' && $part['channelpassword']) { + $content .= sprintf(' options = { key = "%s" }', $part['channelpassword']) . "\n"; + } + $content .= "\n"; + } + + return $content; + } + + protected function validateParts(array $parts): array { + foreach ($parts as $k => $part) { + if (!is_numeric($k)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + + /** + * Applicable: + * - irc: Server="irc.freenode.net:6667" + * - mattermost: Server="yourmattermostserver.domain" (do not prefix it with http or https) + * - matrix: Server="https://matrix.org" + * - rocketchat: Server="https://yourrocketchatserver.domain.com:443" + * - xmpp: Server="jabber.example.com:5222" + * - zulip: Server="https://yourserver.zulipchat.com" + * + * Maybe applicable: + * - nctalk: If it's not the same server as the current one + * + * Not applicable: + * - discord: If you want to bridge https://discord.com/channels/AAAA/BBBB, then this should be AAAA. + */ + if (in_array($part['type'], ['irc', 'mattermost', 'matrix', 'rocketchat', 'xmpp', 'zulip'], true)) { + $tempServer = str_starts_with($part['server'], 'https://') ? $part['server'] : ('https://' . $part['server']); + $host = parse_url($tempServer, PHP_URL_HOST); + if ($host === null || !$this->hostValidator->isValid($host)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + } elseif ($part['type'] === 'nctalk') { + $host = parse_url($part['server'], PHP_URL_HOST); + $currentDomain = $this->urlGenerator->getAbsoluteURL('/'); + $currentHost = parse_url($currentDomain, PHP_URL_HOST); + + if ($host === null || ($host !== $currentHost && !$this->hostValidator->isValid($host))) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + + if ($host === $currentHost && !$this->hostValidator->isValid($host)) { + $port = parse_url($part['server'], PHP_URL_PORT); + $currentPort = parse_url($currentDomain, PHP_URL_PORT); + if ($port !== $currentPort) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + } + } + + foreach ($part as $key => $value) { + if (in_array($key, ['editing', 'skiptls', 'usesasl', 'usetls'], true)) { + if (!is_bool($value)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + continue; + } + + if (!is_string($key) || !is_string($value) || preg_match('/["\n\r]/', $key) || preg_match('/["\n\r]/', $value)) { + $this->logger->error('User tried to configure a malicious matterbridge setup'); + throw new \InvalidArgumentException('Invalid matterbridge parameters'); + } + } + } + return $parts; + } + + /** + * Remove the scheme from an URL and add port + * + * @param string $url + * @return string + */ + private function cleanUrl(string $url): string { + $uo = parse_url($url); + $result = $uo['host']; + if ($uo['scheme'] === 'https' && !isset($uo['port'])) { + $result .= ':443'; + } elseif (isset($uo['port'])) { + $result .= ':' . $uo['port']; + } + $result .= $uo['path']; + return $result; + } + + /** + * check if a bridge process is running + * + * @param Room $room the room + * @param array $bridge bridge information + * @param bool $relaunch whether to launch the process if it's down but bridge is enabled + * @return int the corresponding matterbridge process ID, 0 if none + */ + private function checkBridgeProcess(Room $room, array $bridge, bool $relaunch = true): int { + $pid = 0; + + if (isset($bridge['pid']) && (int)$bridge['pid'] !== 0) { + // config : there is a PID stored + $isRunning = $this->isRunning($bridge['pid']); + // if bridge running and enabled is false : kill it + if ($isRunning) { + if ($bridge['enabled']) { + $this->logger->info('Process running AND bridge enabled in config : doing nothing'); + $pid = $bridge['pid']; + } else { + $this->logger->info('Process running AND bridge disabled in config : KILL ' . $bridge['pid']); + $killed = $this->killPid($bridge['pid']); + if ($killed) { + $pid = 0; + } else { + $this->logger->info('Impossible to kill ' . $bridge['pid']); + throw new ImpossibleToKillException('Impossible to kill bridge process [' . $bridge['pid'] . ']'); + } + } + } else { + // no process found + if ($bridge['enabled']) { + if ($relaunch) { + $this->logger->info('Process not found AND bridge enabled in config : relaunching'); + $pid = $this->launchMatterbridge($room); + } + } else { + $this->logger->info('Process not found AND bridge disabled in config : doing nothing'); + } + } + } elseif ($bridge['enabled']) { + if ($relaunch) { + // config : no PID stored + // config : enabled => launch it + $pid = $this->launchMatterbridge($room); + $this->logger->info('Launch process, PID is ' . $pid); + } + } else { + $this->logger->info('No PID defined in config AND bridge disabled in config : doing nothing'); + } + + return $pid; + } + + /** + * Send system message to the room if necessary + * + * @param Room $room the room + * @param string $userId the editing user + * @param array $currentBridge previous bridge values + * @param array $newBridge future bridge values + */ + private function notify(Room $room, string $userId, array $currentBridge, array $newBridge): void { + $currentParts = $currentBridge['parts']; + $newParts = $newBridge['parts']; + if ($currentBridge['enabled'] && !$newBridge['enabled']) { + $this->sendSystemMessage($room, $userId, 'matterbridge_config_disabled'); + } elseif (!$currentBridge['enabled'] && $newBridge['enabled']) { + $this->sendSystemMessage($room, $userId, 'matterbridge_config_enabled'); + } elseif (empty($currentParts) && !empty($newParts)) { + $this->sendSystemMessage($room, $userId, 'matterbridge_config_added'); + } elseif (!empty($currentParts) && empty($newParts)) { + $this->sendSystemMessage($room, $userId, 'matterbridge_config_removed'); + } elseif (count($currentParts) !== count($newParts) || !$this->compareBridges($currentBridge, $newBridge)) { + $this->sendSystemMessage($room, $userId, 'matterbridge_config_edited'); + } + } + + /** + * Check if 2 bridge configurations are identical + * + * @param array $bridge1 + * @param array $bridge2 + * @return bool True if they are strictly equivalent + */ + private function compareBridges(array $bridge1, array $bridge2): bool { + // try to find an equivalent for each bridge part of one side in the other + foreach ($bridge1['parts'] as $part1) { + $found = false; + foreach ($bridge2['parts'] as $part2) { + if ($this->compareBridgeParts($part1, $part2)) { + $found = true; + break; + } + } + if (!$found) { + return false; + } + } + return true; + } + + /** + * Check if 2 bridge parts are identical + * + * @param array $part1 + * @param array $part2 + * @return bool True if they are strictly equivalent + */ + private function compareBridgeParts(array $part1, array $part2): bool { + $keys1 = array_keys($part1); + $keys2 = array_keys($part2); + if (count($keys1) !== count($keys2)) { + return false; + } + + foreach ($part1 as $key => $val) { + if (!isset($part2[$key]) || $val !== $part2[$key]) { + return false; + } + } + + return true; + } + + /** + * actually send the system message + * @param Room $room the room + * @param string $userId the involved user + * @param string $message the message ID + */ + private function sendSystemMessage(Room $room, string $userId, string $message): void { + $this->chatManager->addSystemMessage( + $room, + null, + Attendee::ACTOR_USERS, + $userId, + json_encode(['message' => $message, 'parameters' => []]), + $this->timeFactory->getDateTime(), + false + ); + } + + /** + * Actually launch a matterbridge process for a room + * + * @param Room $room the room + * @return int the corresponding matterbridge process ID, 0 if it failed + */ + private function launchMatterbridge(Room $room): int { + $binaryPath = $this->config->getAppValue('spreed', 'matterbridge_binary'); + $configPath = sprintf('/tmp/bridge-%s.toml', $room->getToken()); + + // recreate config file if it's not there (can happen after a reboot) + if (!file_exists($configPath)) { + $currentBridge = $this->getBridgeOfRoom($room); + $this->writeBridgeConfig($room, $currentBridge); + } + + $outputPath = sprintf('/tmp/bridge-%s.log', $room->getToken()); + $matterbridgeCmd = sprintf('%s -conf %s', $binaryPath, $configPath); + $cmd = sprintf('nice -n19 %s > %s 2>&1 & echo $!', $matterbridgeCmd, $outputPath); + + // Create the log file and set permissions on it + touch($outputPath); + chmod($outputPath, 0600); + + $cmdResult = $this->runCommand($cmd); + if (!is_null($cmdResult) && $cmdResult['return_code'] === 0 && is_numeric($cmdResult['stdout'] ?? 0)) { + return (int)$cmdResult['stdout']; + } + return 0; + } + + /** + * kill the mattermost processes (owned by web server unix user) that do not match with any room + * @param bool $killAll + */ + public function killZombieBridges(bool $killAll = false): void { + // get list of running matterbridge processes + $runningPidList = []; + $cmd = 'ps x -o user,pid,args'; + $cmdResult = $this->runCommand($cmd); + if ($cmdResult && $cmdResult['return_code'] === 0) { + $lines = explode("\n", $cmdResult['stdout']); + foreach ($lines as $l) { + if (preg_match('/matterbridge/i', $l)) { + $items = preg_split('/\s+/', $l); + if (count($items) > 1 && is_numeric($items[1])) { + $runningPidList[] = (int)$items[1]; + } + } + } + } + + if (empty($runningPidList)) { + // No processes running, so also no zombies + return; + } + + if ($killAll) { + foreach ($runningPidList as $runningPid) { + $this->killPid($runningPid); + } + return; + } + + // get list of what should be running + $expectedPidList = []; + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from('talk_bridges') + ->where($query->expr()->eq('enabled', $query->createNamedParameter(1, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->gt('pid', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $expectedPidList[] = (int)$row['pid']; + } + $result->closeCursor(); + + // kill what should not be running + $toKill = array_diff($runningPidList, $expectedPidList); + foreach ($toKill as $toKillPid) { + $this->killPid($toKillPid); + } + } + + /** + * Utility to kill a process + * + * @param int $pid the process ID to kill + * @return bool if it was successfully killed + */ + private function killPid(int $pid): bool { + // kill + $cmdResult = $this->runCommand(sprintf('kill -9 %d', $pid)); + + // check the process is gone + $isStillRunning = $this->isRunning($pid); + return !is_null($cmdResult) && $cmdResult['return_code'] === 0 && !$isStillRunning; + } + + /** + * Check if a process is running + * + * @param int $pid the process ID + * @return bool true if it's running + */ + private function isRunning(int $pid): bool { + try { + $cmd = 'ps x -o user,pid,args'; + $cmdResult = $this->runCommand($cmd); + if ($cmdResult && $cmdResult['return_code'] === 0) { + $lines = explode("\n", $cmdResult['stdout']); + foreach ($lines as $l) { + $items = preg_split('/\s+/', $l); + if (count($items) > 1 && is_numeric($items[1])) { + $lPid = (int)$items[1]; + if ($lPid === $pid) { + return true; + } + } + } + } + } catch (\Exception $e) { + } + return false; + } + + /** + * Launch a command, wait until it ends and return outputs and return code + * + * @param string $cmd command string + * @return ?array outputs and return code, null if process launch failed + */ + private function runCommand(string $cmd): ?array { + $descriptorspec = [fopen('php://stdin', 'r'), ['pipe', 'w'], ['pipe', 'w']]; + // noopengrep: php.lang.security.exec-use.exec-use + $process = proc_open($cmd, $descriptorspec, $pipes); + if ($process) { + $output = stream_get_contents($pipes[1]); + $errorOutput = stream_get_contents($pipes[2]); + fclose($pipes[1]); + fclose($pipes[2]); + $returnCode = proc_close($process); + return [ + 'stdout' => trim($output), + 'stderr' => trim($errorOutput), + 'return_code' => $returnCode, + ]; + } + return null; + } + + /** + * Stop all bridges + * + * @return bool If bridges where stopped + */ + public function stopAllBridges(): bool { + $query = $this->db->getQueryBuilder(); + + $query->update('talk_bridges') + ->set('enabled', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + ->set('pid', $query->createNamedParameter(0, IQueryBuilder::PARAM_INT)); + $result = $query->executeStatement(); + + // finally kill all potential zombie matterbridge processes + $this->killZombieBridges(true); + return $result !== 0; + } + + /** + * Get bridge information for one room + * + * @param Room $room the room + * @return TalkMatterbridge + */ + private function getBridgeFromDb(Room $room): array { + $roomId = $room->getId(); + + $qb = $this->db->getQueryBuilder(); + $qb->select('json_values', 'enabled', 'pid') + ->from('talk_bridges') + ->where( + $qb->expr()->eq('room_id', $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT)) + ) + ->setMaxResults(1); + $result = $qb->executeQuery(); + $enabled = false; + $pid = 0; + $jsonValues = '[]'; + if ($row = $result->fetch()) { + $pid = (int)$row['pid']; + $enabled = ((int)$row['enabled'] === 1); + $jsonValues = $row['json_values']; + } + $result->closeCursor(); + + return [ + 'enabled' => $enabled, + 'pid' => $pid, + 'parts' => json_decode($jsonValues, true), + ]; + } + + /** + * Save bridge information for one room + * + * @param int $roomId the room ID + * @param array $bridge bridge values + */ + private function saveBridgeToDb(int $roomId, array $bridge): void { + $jsonValues = json_encode($bridge['parts']); + $intEnabled = $bridge['enabled'] ? 1 : 0; + + $qb = $this->db->getQueryBuilder(); + try { + $qb->insert('talk_bridges') + ->values([ + 'room_id' => $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + 'json_values' => $qb->createNamedParameter($jsonValues, IQueryBuilder::PARAM_STR), + 'enabled' => $qb->createNamedParameter($intEnabled, IQueryBuilder::PARAM_INT), + 'pid' => $qb->createNamedParameter($bridge['pid'], IQueryBuilder::PARAM_INT), + ]); + $qb->executeStatement(); + } catch (Exception $e) { + if ($e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $qb = $this->db->getQueryBuilder(); + $qb->update('talk_bridges'); + $qb->set('json_values', $qb->createNamedParameter($jsonValues, IQueryBuilder::PARAM_STR)); + $qb->set('enabled', $qb->createNamedParameter($intEnabled, IQueryBuilder::PARAM_INT)); + $qb->set('pid', $qb->createNamedParameter($bridge['pid'], IQueryBuilder::PARAM_INT)); + $qb->where( + $qb->expr()->eq('room_id', $qb->createNamedParameter($roomId, IQueryBuilder::PARAM_INT)) + ); + $qb->executeStatement(); + } else { + $this->logger->error($e->getMessage(), [ + 'exception' => $e, + ]); + } + } + } + + public function getCurrentVersionFromBinary(): ?string { + $binaryPath = $this->config->getAppValue('spreed', 'matterbridge_binary'); + if (!file_exists($binaryPath)) { + return null; + } + + // is www user the file owner? + $user = posix_getpwuid(posix_getuid()); + $fileOwner = posix_getpwuid(fileowner($binaryPath)); + $userIsOwner = $user['name'] === $fileOwner['name']; + + // get file group and user groups + $fileGid = filegroup($binaryPath); + $myGids = posix_getgroups(); + + // check permissions + $perms = fileperms($binaryPath); + $uExec = (($perms & 0x0040) && !($perms & 0x0800)); + $gExec = (($perms & 0x0008) && !($perms & 0x0400)); + $aExec = (($perms & 0x0001) && !($perms & 0x0200)); + + // 3 ways to have the permission : + // * be the owner and have u+x perm + // * not be the owner, be in the file group and have g+x perm + // * have o+x perm + $execPerm = $aExec + || ($user['name'] === $fileOwner['name'] && $uExec) + || ($user['name'] !== $fileOwner['name'] && in_array($fileGid, $myGids) && $gExec); + + if (!$execPerm) { + throw new WrongPermissionsException(); + } + + $cmd = escapeshellcmd($binaryPath) . ' ' . escapeshellarg('-version'); + $cmdResult = $this->runCommand($cmd); + if (is_null($cmdResult) || $cmdResult['return_code'] !== 0) { + return null; + } + + return $cmdResult['stdout'] ?? null; + } +} diff --git a/lib/Middleware/Attribute/AllowWithoutParticipantWhenPendingInvitation.php b/lib/Middleware/Attribute/AllowWithoutParticipantWhenPendingInvitation.php new file mode 100644 index 0000000..c3759d2 --- /dev/null +++ b/lib/Middleware/Attribute/AllowWithoutParticipantWhenPendingInvitation.php @@ -0,0 +1,20 @@ +sessionIdParameter; + } +} diff --git a/lib/Middleware/Attribute/RequireLoggedInModeratorParticipant.php b/lib/Middleware/Attribute/RequireLoggedInModeratorParticipant.php new file mode 100644 index 0000000..5d54b10 --- /dev/null +++ b/lib/Middleware/Attribute/RequireLoggedInModeratorParticipant.php @@ -0,0 +1,20 @@ +permission; + } +} diff --git a/lib/Middleware/Attribute/RequireReadWriteConversation.php b/lib/Middleware/Attribute/RequireReadWriteConversation.php new file mode 100644 index 0000000..3e6eccd --- /dev/null +++ b/lib/Middleware/Attribute/RequireReadWriteConversation.php @@ -0,0 +1,20 @@ += 23 handles the configuration flag for E2EE and shows a appropiate message + // Support for E2EE on Talk iOS is still pending + public const TALK_IOS_MIN_VERSION_E2EE_CALLS = '23.0.0'; + + + public function __construct( + protected IUserSession $userSession, + protected IGroupManager $groupManager, + protected Config $talkConfig, + protected IConfig $serverConfig, + protected IRequest $request, + protected IURLGenerator $url, + ) { + } + + /** + * @throws CanNotUseTalkException + * @throws UnsupportedClientVersionException + */ + #[\Override] + public function beforeController(Controller $controller, string $methodName): void { + if ($this->request->isUserAgent([ + IRequest::USER_AGENT_TALK_DESKTOP, + IRequest::USER_AGENT_TALK_ANDROID, + IRequest::USER_AGENT_TALK_IOS, + ])) { + if ($this->request->isUserAgent([IRequest::USER_AGENT_TALK_DESKTOP])) { + $this->throwIfUnsupportedClientVersion('desktop', $this->request->getHeader('USER_AGENT')); + } elseif ($this->request->isUserAgent([IRequest::USER_AGENT_TALK_ANDROID])) { + $this->throwIfUnsupportedClientVersion('android', $this->request->getHeader('USER_AGENT')); + } elseif ($this->request->isUserAgent([IRequest::USER_AGENT_TALK_IOS])) { + $this->throwIfUnsupportedClientVersion('ios', $this->request->getHeader('USER_AGENT')); + } + } + + $user = $this->userSession->getUser(); + if ($user instanceof IUser && $this->talkConfig->isDisabledForUser($user)) { + if ($methodName === 'getWelcomeMessage' + && ($controller instanceof SignalingController + || $controller instanceof RecordingController) + && $this->groupManager->isAdmin($user->getUID())) { + return; + } + + if ($controller instanceof HostedSignalingServerController + && $this->groupManager->isAdmin($user->getUID())) { + return; + } + + throw new CanNotUseTalkException(); + } + + $reflectionMethod = new \ReflectionMethod($controller, $methodName); + $hasAttribute = !empty($reflectionMethod->getAttributes(RequireCallEnabled::class)); + + if ($hasAttribute + && ((int)$this->serverConfig->getAppValue('spreed', 'start_calls')) === Room::START_CALL_NOONE) { + throw new CanNotUseTalkException(); + } + } + + /** + * @throws \Exception + */ + #[\Override] + public function afterException(Controller $controller, string $methodName, \Exception $exception): Response { + if ($exception instanceof UnsupportedClientVersionException) { + if ($controller instanceof OCSController) { + throw new OCSException($exception->getMinVersion(), Http::STATUS_UPGRADE_REQUIRED); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + if ($exception instanceof CanNotUseTalkException + || $exception instanceof ForbiddenException) { + if ($controller instanceof OCSController) { + throw new OCSException($exception->getMessage(), Http::STATUS_FORBIDDEN); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + throw $exception; + } + + /** + * @param string $client + * @param string $userAgent + * @throws UnsupportedClientVersionException + */ + protected function throwIfUnsupportedClientVersion(string $client, string $userAgent): void { + $configMinVersion = $this->serverConfig->getAppValue('spreed', 'minimum.supported.' . $client . '.version'); + + if ($client === 'desktop') { + $versionRegex = IRequest::USER_AGENT_TALK_DESKTOP; + $minVersion = self::TALK_DESKTOP_MIN_VERSION; + + if ($this->talkConfig->isCallEndToEndEncryptionEnabled()) { + $minVersion = self::TALK_DESKTOP_MIN_VERSION_E2EE_CALLS; + } elseif ($this->talkConfig->recordingConsentRequired()) { + $minVersion = self::TALK_DESKTOP_MIN_VERSION_RECORDING_CONSENT; + } + } elseif ($client === 'android') { + $versionRegex = IRequest::USER_AGENT_TALK_ANDROID; + $minVersion = self::TALK_ANDROID_MIN_VERSION; + + if ($this->talkConfig->isCallEndToEndEncryptionEnabled()) { + $minVersion = self::TALK_ANDROID_MIN_VERSION_E2EE_CALLS; + } elseif ($this->talkConfig->recordingConsentRequired()) { + $minVersion = self::TALK_ANDROID_MIN_VERSION_RECORDING_CONSENT; + } + } elseif ($client === 'ios') { + $versionRegex = IRequest::USER_AGENT_TALK_IOS; + $minVersion = self::TALK_IOS_MIN_VERSION; + + if ($this->talkConfig->isCallEndToEndEncryptionEnabled()) { + $minVersion = self::TALK_IOS_MIN_VERSION_E2EE_CALLS; + } elseif ($this->talkConfig->recordingConsentRequired()) { + $minVersion = self::TALK_IOS_MIN_VERSION_RECORDING_CONSENT; + } + } else { + return; + } + + preg_match($versionRegex, $userAgent, $matches); + + if (isset($matches[1])) { + $clientVersion = $matches[1]; + if (str_contains($clientVersion, '-')) { + // Claim pre-releases being compatible with the final releases + $clientVersion = substr($clientVersion, 0, strpos($clientVersion, '-')); + } + + // API requirement and safety net + if (version_compare($clientVersion, $minVersion, '<')) { + throw new UnsupportedClientVersionException($minVersion); + } + + // Admin option to be more pushy + if ($configMinVersion && version_compare($clientVersion, $configMinVersion, '<')) { + throw new UnsupportedClientVersionException($configMinVersion); + } + } + } +} diff --git a/lib/Middleware/Exceptions/CanNotUseTalkException.php b/lib/Middleware/Exceptions/CanNotUseTalkException.php new file mode 100644 index 0000000..6579766 --- /dev/null +++ b/lib/Middleware/Exceptions/CanNotUseTalkException.php @@ -0,0 +1,17 @@ +version; + } +} diff --git a/lib/Middleware/InjectionMiddleware.php b/lib/Middleware/InjectionMiddleware.php new file mode 100644 index 0000000..d86cd56 --- /dev/null +++ b/lib/Middleware/InjectionMiddleware.php @@ -0,0 +1,450 @@ +request->getParam('apiVersion'); + $controller->setAPIVersion((int)substr($apiVersion, 1)); + + if (!empty($reflectionMethod->getAttributes(AllowWithoutParticipantWhenPendingInvitation::class))) { + try { + $this->getRoomByInvite($controller); + return; + } catch (RoomNotFoundException|ParticipantNotFoundException) { + // Falling back to bellow checks + } + } + + if (!empty($reflectionMethod->getAttributes(RequireAuthenticatedParticipant::class))) { + $this->getLoggedInOrGuest($controller, false, requireFederationWhenNotLoggedIn: true); + } + + if (!empty($reflectionMethod->getAttributes(RequireLoggedInParticipant::class))) { + $this->getLoggedIn($controller, false); + } + + if (!empty($reflectionMethod->getAttributes(RequireLoggedInModeratorParticipant::class))) { + $this->getLoggedIn($controller, true); + } + + if (!empty($reflectionMethod->getAttributes(RequireParticipantOrLoggedInAndListedConversation::class))) { + $this->getLoggedInOrGuest($controller, false, true); + } + + $attributes = $reflectionMethod->getAttributes(RequireFederatedParticipant::class); + if (!empty($attributes)) { + $sessionIdParameter = $this->readSessionIdParameterFromAttributes($attributes); + $this->getLoggedInOrGuest($controller, false, sessionIdParameter: $sessionIdParameter); + } + + if (!empty($reflectionMethod->getAttributes(RequireParticipant::class))) { + $this->getLoggedInOrGuest($controller, false); + } + + if (!empty($reflectionMethod->getAttributes(RequireModeratorParticipant::class))) { + $this->getLoggedInOrGuest($controller, true); + } + + if (!empty($reflectionMethod->getAttributes(RequireRoom::class))) { + $this->getRoom($controller); + } + + if (empty($reflectionMethod->getAttributes(FederationSupported::class))) { + // When federation is not supported, the room needs to be local + $this->checkFederationSupport($controller); + } + + if (!empty($reflectionMethod->getAttributes(RequireReadWriteConversation::class))) { + $this->checkReadOnlyState($controller); + } + + if (!empty($reflectionMethod->getAttributes(RequireModeratorOrNoLobby::class))) { + $this->checkLobbyState($controller); + } + + $requiredPermissions = $reflectionMethod->getAttributes(RequirePermission::class); + if ($requiredPermissions) { + foreach ($requiredPermissions as $attribute) { + /** @var RequirePermission $requirement */ + $requirement = $attribute->newInstance(); + $this->checkPermission($controller, $requirement->getPermission()); + } + } + } + + protected function readSessionIdParameterFromAttributes(array $attributes): ?string { + foreach ($attributes as $attribute) { + /** @var RequireFederatedParticipant $instance */ + $instance = $attribute->newInstance(); + if ($instance->getSessionIdParameter() !== null) { + return $instance->getSessionIdParameter(); + } + } + return null; + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @throws ForbiddenException + */ + protected function getRoom(AEnvironmentAwareOCSController $controller): void { + $token = $this->request->getParam('token'); + $room = $this->manager->getRoomByToken($token); + $controller->setRoom($room); + + $this->banService->throwIfActorIsBanned($room, $this->userId); + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @param bool $moderatorRequired + * @throws NotAModeratorException + */ + protected function getLoggedIn(AEnvironmentAwareOCSController $controller, bool $moderatorRequired): void { + $token = $this->request->getParam('token'); + $sessionId = $this->talkSession->getSessionForRoom($token); + $room = $this->manager->getRoomForUserByToken($token, $this->userId, $sessionId); + $controller->setRoom($room); + + $participant = $this->participantService->getParticipant($room, $this->userId, $sessionId); + $controller->setParticipant($participant); + + $this->banService->throwIfActorIsBanned($room, $this->userId); + + if ($moderatorRequired && !$participant->hasModeratorPermissions(false)) { + throw new NotAModeratorException(); + } + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @param bool $moderatorRequired + * @param bool $requireListedWhenNoParticipant + * @throws NotAModeratorException + * @throws ParticipantNotFoundException + */ + protected function getLoggedInOrGuest( + AEnvironmentAwareOCSController $controller, + bool $moderatorRequired, + bool $requireListedWhenNoParticipant = false, + bool $requireFederationWhenNotLoggedIn = false, + ?string $sessionIdParameter = null, + ): void { + if ($requireFederationWhenNotLoggedIn && $this->userId === null && !$this->federationAuthenticator->isFederationRequest()) { + throw new ParticipantNotFoundException(); + } + + if ($sessionIdParameter !== null && !$this->federationAuthenticator->isFederationRequest()) { + throw new ParticipantNotFoundException(); + } + + $room = $controller->getRoom(); + $sessionId = null; + if (!$room instanceof Room) { + $token = $this->request->getParam('token'); + if (!$this->federationAuthenticator->isFederationRequest()) { + $sessionId = $this->talkSession->getSessionForRoom($token); + $room = $this->manager->getRoomForUserByToken($token, $this->userId, $sessionId); + } else { + $sessionId = $sessionIdParameter !== null ? $this->request->getParam($sessionIdParameter) : null; + $room = $this->manager->getRoomByRemoteAccess($token, Attendee::ACTOR_FEDERATED_USERS, $this->federationAuthenticator->getCloudId(), $this->federationAuthenticator->getAccessToken(), $sessionId); + + // Get and set the participant already, so we don't retry public access + $participant = $this->participantService->getParticipantByActor($room, Attendee::ACTOR_FEDERATED_USERS, $this->federationAuthenticator->getCloudId()); + + if ($sessionIdParameter !== null && !$participant->getSession() instanceof Session) { + // If a session is required, fail if we didn't find it + throw new ParticipantNotFoundException(); + } + + $this->federationAuthenticator->authenticated($room, $participant); + $controller->setParticipant($participant); + } + $controller->setRoom($room); + } + + $participant = $controller->getParticipant(); + if (!$participant instanceof Participant) { + $participant = null; + if ($sessionId !== null) { + try { + $participant = $this->participantService->getParticipantBySession($room, $sessionId); + $controller->setParticipant($participant); + } catch (ParticipantNotFoundException $e) { + // ignore and fall back in case a concurrent request might have + // invalidated the session + } + } + + if ($participant === null) { + if (!$requireListedWhenNoParticipant || !$this->manager->isRoomListableByUser($room, $this->userId)) { + $participant = $this->participantService->getParticipant($room, $this->userId); + $controller->setParticipant($participant); + } + } + } + + $this->banService->throwIfActorIsBanned($room, $this->userId); + + if ($moderatorRequired && !$participant->hasModeratorPermissions()) { + throw new NotAModeratorException(); + } + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @throws RoomNotFoundException + * @throws ParticipantNotFoundException + */ + protected function getRoomByInvite(AEnvironmentAwareOCSController $controller): void { + if ($this->userId === null) { + throw new ParticipantNotFoundException('No user available'); + } + + $room = $controller->getRoom(); + if (!$room instanceof Room) { + $token = $this->request->getParam('token'); + $room = $this->manager->getRoomByToken($token); + } + + $participant = $controller->getParticipant(); + if (!$participant instanceof Participant) { + try { + $invitation = $this->invitationMapper->getInvitationForUserByLocalRoom($room, $this->userId); + $controller->setRoom($room); + $controller->setInvitation($invitation); + } catch (DoesNotExistException $e) { + throw new ParticipantNotFoundException('No invite available', $e->getCode(), $e); + } + } + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @throws FederationUnsupportedFeatureException + */ + protected function checkFederationSupport(AEnvironmentAwareOCSController $controller): void { + $room = $controller->getRoom(); + if ($room instanceof Room && $room->isFederatedConversation()) { + throw new FederationUnsupportedFeatureException(); + } + } + + /** + * @param AEnvironmentAwareOCSController $controller + * @throws ReadOnlyException + */ + protected function checkReadOnlyState(AEnvironmentAwareOCSController $controller): void { + $room = $controller->getRoom(); + if (!$room instanceof Room || $room->getReadOnly() === Room::READ_ONLY) { + throw new ReadOnlyException(); + } + if ($room->getType() === Room::TYPE_CHANGELOG) { + throw new ReadOnlyException(); + } + } + + /** + * @throws PermissionsException + */ + protected function checkPermission(AEnvironmentAwareOCSController $controller, string $permission): void { + $participant = $controller->getParticipant(); + if (!$participant instanceof Participant) { + throw new PermissionsException(); + } + + if ($permission === RequirePermission::CHAT && !($participant->getPermissions() & Attendee::PERMISSIONS_CHAT)) { + throw new PermissionsException(); + } + if ($permission === RequirePermission::START_CALL && !($participant->getPermissions() & Attendee::PERMISSIONS_CALL_START)) { + throw new PermissionsException(); + } + } + + /** + * @throws LobbyException + */ + protected function checkLobbyState(AEnvironmentAwareOCSController $controller): void { + try { + $this->getLoggedInOrGuest($controller, true); + return; + } catch (NotAModeratorException|ParticipantNotFoundException) { + } + + $participant = $controller->getParticipant(); + if ($participant instanceof Participant + && $participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE) { + return; + } + + $room = $controller->getRoom(); + if (!$room instanceof Room || $room->getLobbyState() !== Webinary::LOBBY_NONE) { + throw new LobbyException(); + } + } + + /** + * @throws \Exception + */ + #[\Override] + public function afterException(Controller $controller, string $methodName, \Exception $exception): Response { + if ($exception instanceof RoomNotFoundException + || $exception instanceof ParticipantNotFoundException) { + if ($controller instanceof OCSController) { + $reflectionMethod = new \ReflectionMethod($controller, $methodName); + $attributes = $reflectionMethod->getAttributes(BruteForceProtection::class); + + if (!empty($attributes)) { + foreach ($attributes as $attribute) { + /** @var BruteForceProtection $protection */ + $protection = $attribute->newInstance(); + $action = $protection->getAction(); + + if ($action === 'talkRoomToken') { + $this->logger->debug('User "' . ($this->userId ?? 'ANONYMOUS') . '" throttled for accessing "' . ($this->request->getParam('token') ?? 'UNKNOWN') . '"', ['app' => 'spreed-bfp']); + try { + $this->throttler->sleepDelayOrThrowOnMax($this->request->getRemoteAddress(), $action); + } catch (MaxDelayReached $e) { + throw new OCSException($e->getMessage(), Http::STATUS_TOO_MANY_REQUESTS); + } + $this->throttler->registerAttempt($action, $this->request->getRemoteAddress(), [ + 'token' => $this->request->getParam('token') ?? '', + ]); + } + } + } + + throw new OCSException('', Http::STATUS_NOT_FOUND); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + if ($exception instanceof CannotReachRemoteException) { + if ($controller instanceof OCSController) { + throw new OCSException('', Http::STATUS_UNPROCESSABLE_ENTITY); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + if ($exception instanceof FederationUnsupportedFeatureException) { + if ($controller instanceof OCSController) { + throw new OCSException('', Http::STATUS_NOT_ACCEPTABLE); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + if ($exception instanceof LobbyException) { + if ($controller instanceof OCSController) { + throw new OCSException('', Http::STATUS_PRECONDITION_FAILED); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + if ($exception instanceof NotAModeratorException + || $exception instanceof ReadOnlyException + || $exception instanceof ForbiddenException + || $exception instanceof PermissionsException) { + if ($controller instanceof OCSController) { + throw new OCSException('', Http::STATUS_FORBIDDEN); + } + + return new RedirectResponse($this->url->linkToDefaultPageUrl()); + } + + throw $exception; + } +} diff --git a/lib/Middleware/ParameterOutOfRangeMiddleware.php b/lib/Middleware/ParameterOutOfRangeMiddleware.php new file mode 100644 index 0000000..6ceb8b2 --- /dev/null +++ b/lib/Middleware/ParameterOutOfRangeMiddleware.php @@ -0,0 +1,34 @@ + $exception->getParameterName(), + ], Http::STATUS_BAD_REQUEST); + } + + throw $exception; + } +} diff --git a/lib/Migration/CacheUserDisplayNames.php b/lib/Migration/CacheUserDisplayNames.php new file mode 100644 index 0000000..06546ae --- /dev/null +++ b/lib/Migration/CacheUserDisplayNames.php @@ -0,0 +1,60 @@ +connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('display_name', $update->createParameter('displayName')) + ->where($update->expr()->eq('actor_type', $update->createParameter('actorType'))) + ->andWhere($update->expr()->eq('actor_id', $update->createParameter('actorId'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('actor_id') + ->from('talk_attendees') + ->where($query->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('display_name', $query->createNamedParameter(''))) + ->groupBy('actor_id'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $user = $this->userManager->get($row['actor_id']); + if (!$user instanceof IUser) { + continue; + } + + $update->setParameter('displayName', $user->getDisplayName()) + ->setParameter('actorType', Attendee::ACTOR_USERS) + ->setParameter('actorId', $row['actor_id']); + $update->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/ClearResourceAccessCache.php b/lib/Migration/ClearResourceAccessCache.php new file mode 100644 index 0000000..a2a5f69 --- /dev/null +++ b/lib/Migration/ClearResourceAccessCache.php @@ -0,0 +1,44 @@ +config->getAppValue('spreed', 'project_access_invalidated', '0'); + + if ($invalidatedCache === self::INVALIDATIONS) { + $output->info('Invalidation not required'); + return; + } + + $this->manager->invalidateAccessCacheForProvider($this->provider); + $this->config->setAppValue('spreed', 'project_access_invalidated', (string)self::INVALIDATIONS); + } +} diff --git a/lib/Migration/FixLastReadMessageZero.php b/lib/Migration/FixLastReadMessageZero.php new file mode 100644 index 0000000..20489cb --- /dev/null +++ b/lib/Migration/FixLastReadMessageZero.php @@ -0,0 +1,53 @@ +connection->getQueryBuilder(); + $update->update('talk_attendees') + /** + * -2 is {@see ChatManager::UNREAD_FIRST_MESSAGE}, but we can't use + * it in update code, because ChatManager is already loaded with the + * previous implementation. + */ + ->set('last_read_message', $update->createNamedParameter(-2, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('last_read_message', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT))); + $updatedEntries = $update->executeStatement(); + if ($updatedEntries) { + $output->info($updatedEntries . ' attendees have been updated.'); + } + } +} diff --git a/lib/Migration/FixNamespaceInDatabaseTables.php b/lib/Migration/FixNamespaceInDatabaseTables.php new file mode 100644 index 0000000..0a3ae8a --- /dev/null +++ b/lib/Migration/FixNamespaceInDatabaseTables.php @@ -0,0 +1,56 @@ +connection->getQueryBuilder(); + $update->update('jobs') + ->set('class', $update->createParameter('newClass')) + ->where($update->expr()->eq('id', $update->createParameter('id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('id', 'class') + ->from('jobs') + ->where($query->expr()->like('class', $query->createNamedParameter( + '%' . $this->connection->escapeLikeParameter('Spreed') . '%' + ))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $oldClass = $row['class']; + if (!str_starts_with($oldClass, 'OCA\\Spreed\\')) { + continue; + } + + $newClass = 'OCA\\Talk\\' . substr($oldClass, strlen('OCA\\Spreed\\')); + + $update->setParameter('newClass', $newClass) + ->setParameter('id', $row['id']); + $update->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/RegenerateSignalingKeys.php b/lib/Migration/RegenerateSignalingKeys.php new file mode 100644 index 0000000..808e867 --- /dev/null +++ b/lib/Migration/RegenerateSignalingKeys.php @@ -0,0 +1,48 @@ +talkConfig->getSignalingTokenAlgorithm(); + + if ($alg === 'ES384') { + try { + $this->talkConfig->getSignalingTicket(2, null); + } catch (\Exception $e) { + $this->appConfig->setAppValue('signaling_token_privkey_' . strtolower($alg), ''); + $this->appConfig->setAppValue('signaling_token_pubkey_' . strtolower($alg), ''); + + $this->talkConfig->getSignalingTokenPrivateKey($alg); + } + } + } +} diff --git a/lib/Migration/Version10000Date20200819121721.php b/lib/Migration/Version10000Date20200819121721.php new file mode 100644 index 0000000..1f9af8f --- /dev/null +++ b/lib/Migration/Version10000Date20200819121721.php @@ -0,0 +1,49 @@ +hasTable('talk_bridges')) { + $table = $schema->createTable('talk_bridges'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('json_values', Types::TEXT, [ + 'notnull' => true, + ]); + $table->addUniqueIndex(['room_id'], 'tbr_room_id'); + + $table->setPrimaryKey(['id']); + } + + return $schema; + } +} diff --git a/lib/Migration/Version10000Date20201012144235.php b/lib/Migration/Version10000Date20201012144235.php new file mode 100644 index 0000000..577b1d1 --- /dev/null +++ b/lib/Migration/Version10000Date20201012144235.php @@ -0,0 +1,41 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('sip_enabled')) { + $table->addColumn('sip_enabled', Types::SMALLINT, [ + 'notnull' => true, + 'default' => 0, + 'unsigned' => true, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version10000Date20201015134000.php b/lib/Migration/Version10000Date20201015134000.php new file mode 100644 index 0000000..d3ea650 --- /dev/null +++ b/lib/Migration/Version10000Date20201015134000.php @@ -0,0 +1,228 @@ +hasTable('talk_attendees')) { + $table = $schema->createTable('talk_attendees'); + + // Auto increment id + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + + // Unique key + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('display_name', Types::STRING, [ + 'notnull' => false, + 'default' => '', + 'length' => 64, + ]); + + $table->addColumn('pin', Types::STRING, [ + 'notnull' => false, + 'length' => 32, + ]); + $table->addColumn('participant_type', Types::SMALLINT, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('favorite', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + $table->addColumn('notification_level', Types::INTEGER, [ + 'default' => Participant::NOTIFY_DEFAULT, + 'notnull' => false, + ]); + $table->addColumn('last_joined_call', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('last_read_message', Types::BIGINT, [ + 'default' => 0, + 'notnull' => false, + ]); + $table->addColumn('last_mention_message', Types::BIGINT, [ + 'default' => 0, + 'notnull' => false, + ]); + + $table->setPrimaryKey(['id']); + + $table->addUniqueIndex(['room_id', 'actor_type', 'actor_id'], 'ta_ident'); + $table->addIndex(['room_id', 'pin'], 'ta_roompin'); + //$table->addIndex(['room_id'], 'ta_room'); Removed in Version20000Date20240717180417 + $table->addIndex(['actor_type', 'actor_id'], 'ta_actor'); + } + + + if (!$schema->hasTable('talk_sessions')) { + $table = $schema->createTable('talk_sessions'); + + // Auto increment id + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + + // Unique key (for now, might remove this in the future, + // so a user can join multiple times. + $table->addColumn('attendee_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + + // Unique key to avoid duplication issues + $table->addColumn('session_id', Types::STRING, [ + 'notnull' => true, + 'length' => 512, + ]); + + $table->addColumn('in_call', Types::INTEGER, [ + 'default' => 0, + ]); + $table->addColumn('last_ping', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + 'default' => 0, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + + $table->addUniqueIndex(['attendee_id'], 'ts_attendee'); + $table->addUniqueIndex(['session_id'], 'ts_session'); + $table->addIndex(['in_call'], 'ts_in_call'); + $table->addIndex(['last_ping'], 'ts_last_ping'); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + #[\Override] + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + $insert = $this->connection->getQueryBuilder(); + $insert->insert('talk_attendees') + ->values([ + 'room_id' => $insert->createParameter('room_id'), + 'actor_type' => $insert->createParameter('actor_type'), + 'actor_id' => $insert->createParameter('actor_id'), + 'participant_type' => $insert->createParameter('participant_type'), + 'favorite' => $insert->createParameter('favorite'), + 'notification_level' => $insert->createParameter('notification_level'), + 'last_joined_call' => $insert->createParameter('last_joined_call'), + 'last_read_message' => $insert->createParameter('last_read_message'), + 'last_mention_message' => $insert->createParameter('last_mention_message'), + ]); + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('talk_participants') + ->where($query->expr()->neq('user_id', $query->createNamedParameter(''))) + ->andWhere($query->expr()->isNotNull('user_id')); + + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $lastJoinedCall = 0; + if (!empty($row['last_joined_call'])) { + $lastJoinedCall = $this->timeFactory->getDateTime($row['last_joined_call'])->getTimestamp(); + } + + $insert + ->setParameter('room_id', (int)$row['room_id'], IQueryBuilder::PARAM_INT) + ->setParameter('actor_type', Attendee::ACTOR_USERS) + ->setParameter('actor_id', $row['user_id']) + ->setParameter('participant_type', (int)$row['participant_type'], IQueryBuilder::PARAM_INT) + ->setParameter('favorite', (bool)$row['favorite'], IQueryBuilder::PARAM_BOOL) + ->setParameter('notification_level', (int)$row['notification_level'], IQueryBuilder::PARAM_INT) + ->setParameter('last_joined_call', $lastJoinedCall, IQueryBuilder::PARAM_INT) + ->setParameter('last_read_message', (int)$row['last_read_message'], IQueryBuilder::PARAM_INT) + ->setParameter('last_mention_message', (int)$row['last_mention_message'], IQueryBuilder::PARAM_INT) + ; + + try { + $insert->executeStatement(); + } catch (\Exception $e) { + if (class_exists(UniqueConstraintViolationException::class) + && $e instanceof UniqueConstraintViolationException) { + // UniqueConstraintViolationException before 21 + continue; + } + + if (class_exists(Exception::class) + && $e instanceof Exception + // Exception with 21 and later + && $e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + continue; + } + + throw $e; + } + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/Version10000Date20201015143852.php b/lib/Migration/Version10000Date20201015143852.php new file mode 100644 index 0000000..add87e2 --- /dev/null +++ b/lib/Migration/Version10000Date20201015143852.php @@ -0,0 +1,35 @@ +hasTable('talk_participants')) { + $schema->dropTable('talk_participants'); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version10000Date20201015150000.php b/lib/Migration/Version10000Date20201015150000.php new file mode 100644 index 0000000..7f7caf7 --- /dev/null +++ b/lib/Migration/Version10000Date20201015150000.php @@ -0,0 +1,45 @@ +hasTable('talk_sessions')) { + $table = $schema->getTable('talk_sessions'); + + $column = $table->getColumn('session_id'); + + if ($column->getLength() !== 512) { + $column->setLength(512); + return $schema; + } + } + + return null; + } +} diff --git a/lib/Migration/Version11000Date20200922161218.php b/lib/Migration/Version11000Date20200922161218.php new file mode 100644 index 0000000..52beb37 --- /dev/null +++ b/lib/Migration/Version11000Date20200922161218.php @@ -0,0 +1,105 @@ +hasTable('talk_bridges')) { + $table = $schema->getTable('talk_bridges'); + if (!$table->hasColumn('enabled')) { + $table->addColumn('enabled', Types::SMALLINT, [ + 'notnull' => true, + 'default' => 0, + 'unsigned' => true, + ]); + } + if (!$table->hasColumn('pid')) { + $table->addColumn('pid', Types::INTEGER, [ + 'notnull' => true, + 'default' => 0, + 'unsigned' => true, + ]); + } + } + + return $schema; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + #[\Override] + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + $query = $this->connection->getQueryBuilder(); + + $bridges = []; + $query->select('id', 'json_values') + ->from('talk_bridges'); + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $bridges[] = [ + 'id' => $row['id'], + 'json_values' => $row['json_values'], + ]; + } + $result->closeCursor(); + + if (empty($bridges)) { + return; + } + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_bridges') + ->set('enabled', $update->createParameter('enabled')) + ->set('pid', $update->createParameter('pid')) + ->set('json_values', $update->createParameter('json_values')) + ->where($update->expr()->eq('id', $update->createParameter('id'))); + + foreach ($bridges as $bridge) { + $values = json_decode($bridge['json_values'], true); + if (isset($values['pid'], $values['enabled'])) { + $intEnabled = $values['enabled'] ? 1 : 0; + $newValues = $values['parts'] ?: []; + $encodedNewValues = json_encode($newValues); + + $update->setParameter('enabled', $intEnabled, IQueryBuilder::PARAM_INT) + ->setParameter('pid', $values['pid'], IQueryBuilder::PARAM_INT) + ->setParameter('json_values', $encodedNewValues, IQueryBuilder::PARAM_STR) + ->setParameter('id', $bridge['id'], IQueryBuilder::PARAM_INT); + $update->executeStatement(); + } + } + } +} diff --git a/lib/Migration/Version11000Date20201011082810.php b/lib/Migration/Version11000Date20201011082810.php new file mode 100644 index 0000000..9d86b15 --- /dev/null +++ b/lib/Migration/Version11000Date20201011082810.php @@ -0,0 +1,41 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('description')) { + $table->addColumn('description', Types::TEXT, [ + 'notnull' => false, + 'default' => '', + ]); + + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version11000Date20201201102528.php b/lib/Migration/Version11000Date20201201102528.php new file mode 100644 index 0000000..1a7a8c5 --- /dev/null +++ b/lib/Migration/Version11000Date20201201102528.php @@ -0,0 +1,52 @@ +hasTable('talk_rooms')) { + $table = $schema->getTable('talk_rooms'); + + if (!$table->hasColumn('listable')) { + $table->addColumn('listable', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + 'unsigned' => true, + ]); + } + + if (!$table->hasIndex('tr_listable')) { + $table->addIndex(['listable'], 'tr_listable'); + } + + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version11000Date20201204110210.php b/lib/Migration/Version11000Date20201204110210.php new file mode 100644 index 0000000..897ce40 --- /dev/null +++ b/lib/Migration/Version11000Date20201204110210.php @@ -0,0 +1,43 @@ +hasTable('talk_attendees')) { + $table = $schema->getTable('talk_attendees'); + if (!$table->hasColumn('read_privacy')) { + $table->addColumn('read_privacy', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + 'unsigned' => true, + ]); + return $schema; + } + } + + return null; + } +} diff --git a/lib/Migration/Version11000Date20201209142525.php b/lib/Migration/Version11000Date20201209142525.php new file mode 100644 index 0000000..5aa8093 --- /dev/null +++ b/lib/Migration/Version11000Date20201209142525.php @@ -0,0 +1,87 @@ +hasTable('talk_internalsignaling')) { + $table = $schema->createTable('talk_internalsignaling'); + + // Auto increment id + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + + $table->addColumn('sender', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('recipient', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('message', Types::TEXT, [ + 'notnull' => true, + ]); + $table->addColumn('timestamp', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['recipient', 'timestamp'], 'tis_recipient_time'); + + $changedSchema = true; + } + + if (!$schema->hasTable('talk_guestnames')) { + $table = $schema->createTable('talk_guestnames'); + + // Auto increment id + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + + $table->addColumn('session_hash', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table->addColumn('display_name', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + 'default' => '', + ]); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['session_hash'], 'tgn_session_hash'); + $changedSchema = true; + } + + return $changedSchema ? $schema : null; + } +} diff --git a/lib/Migration/Version11000Date20201209142526.php b/lib/Migration/Version11000Date20201209142526.php new file mode 100644 index 0000000..e014b68 --- /dev/null +++ b/lib/Migration/Version11000Date20201209142526.php @@ -0,0 +1,42 @@ +hasTable('talk_signaling')) { + $schema->dropTable('talk_signaling'); + $changedSchema = true; + } + + if ($schema->hasTable('talk_guests')) { + $schema->dropTable('talk_guests'); + $changedSchema = true; + } + + return $changedSchema ? $schema : null; + } +} diff --git a/lib/Migration/Version11001Date20210211111527.php b/lib/Migration/Version11001Date20210211111527.php new file mode 100644 index 0000000..c3c77ce --- /dev/null +++ b/lib/Migration/Version11001Date20210211111527.php @@ -0,0 +1,38 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('call_flag')) { + $table->addColumn('call_flag', Types::INTEGER, [ + 'default' => 0, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version11001Date20210212105406.php b/lib/Migration/Version11001Date20210212105406.php new file mode 100644 index 0000000..7343978 --- /dev/null +++ b/lib/Migration/Version11001Date20210212105406.php @@ -0,0 +1,39 @@ +hasTable('talk_guestnames')) { + $schema->dropTable('talk_guestnames'); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version12000Date20210217134030.php b/lib/Migration/Version12000Date20210217134030.php new file mode 100644 index 0000000..00869c9 --- /dev/null +++ b/lib/Migration/Version12000Date20210217134030.php @@ -0,0 +1,42 @@ +getTable('talk_sessions'); + if ($table->hasIndex('ts_attendee')) { + $table->dropIndex('ts_attendee'); + } + if (!$table->hasIndex('ts_attendee_id')) { + $table->addIndex(['attendee_id'], 'ts_attendee_id'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version12000Date20210401124139.php b/lib/Migration/Version12000Date20210401124139.php new file mode 100644 index 0000000..036df86 --- /dev/null +++ b/lib/Migration/Version12000Date20210401124139.php @@ -0,0 +1,45 @@ +ensureColumnIsNullable($schema, 'talk_attendees', 'favorite'); + + return $result ? $schema : null; + } + + protected function ensureColumnIsNullable(ISchemaWrapper $schema, string $tableName, string $columnName): bool { + $table = $schema->getTable($tableName); + $column = $table->getColumn($columnName); + + if ($column->getNotnull()) { + $column->setNotnull(false); + return true; + } + + return false; + } +} diff --git a/lib/Migration/Version12000Date20210528100404.php b/lib/Migration/Version12000Date20210528100404.php new file mode 100644 index 0000000..20f8988 --- /dev/null +++ b/lib/Migration/Version12000Date20210528100404.php @@ -0,0 +1,40 @@ +getTable('talk_attendees'); + // if (!$table->hasColumn('publishing_permissions')) { + // $table->addColumn('publishing_permissions', Types::INTEGER, [ + // 'default' => 7, + // ]); + // + // return $schema; + // } + + return null; + } +} diff --git a/lib/Migration/Version13000Date20210625232111.php b/lib/Migration/Version13000Date20210625232111.php new file mode 100644 index 0000000..f2c71eb --- /dev/null +++ b/lib/Migration/Version13000Date20210625232111.php @@ -0,0 +1,87 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('access_token')) { + $table->addColumn('access_token', Types::STRING, [ + 'notnull' => false, + 'default' => null, + 'length' => 64 + ]); + } + if (!$table->hasColumn('remote_id')) { + $table->addColumn('remote_id', Types::STRING, [ + 'notnull' => false, + 'default' => null, + 'length' => 255, + ]); + } + + $table = $schema->getTable('talk_rooms'); + if (!$table->hasColumn('server_url')) { + $table->addColumn('server_url', Types::STRING, [ + 'notnull' => false, + 'default' => null, + ]); + } + + /** Removed in {@see Version18000Date20231024141626} */ + /** Recreated in {@see Version18000Date20231024141627} */ + // if (!$schema->hasTable('talk_invitations')) { + // $table = $schema->createTable('talk_invitations'); + // $table->addColumn('id', Types::BIGINT, [ + // 'autoincrement' => true, + // 'notnull' => true, + // ]); + // $table->addColumn('room_id', Types::BIGINT, [ + // 'notnull' => true, + // 'unsigned' => true, + // ]); + // $table->addColumn('user_id', Types::STRING, [ + // 'notnull' => true, + // 'length' => 255, + // ]); + // $table->addColumn('access_token', Types::STRING, [ + // 'notnull' => true, + // 'length' => 64, + // ]); + // $table->addColumn('remote_id', Types::STRING, [ + // 'notnull' => true, + // 'length' => 255, + // ]); + // + // $table->setPrimaryKey(['id']); + // + // $table->addIndex(['room_id']); + // } + + return $schema; + } +} diff --git a/lib/Migration/Version13000Date20210901164235.php b/lib/Migration/Version13000Date20210901164235.php new file mode 100644 index 0000000..88bfd40 --- /dev/null +++ b/lib/Migration/Version13000Date20210901164235.php @@ -0,0 +1,39 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('last_mention_direct')) { + $table->addColumn('last_mention_direct', Types::BIGINT, [ + 'default' => 0, + ]); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version13000Date20210921142733.php b/lib/Migration/Version13000Date20210921142733.php new file mode 100644 index 0000000..8e9e6eb --- /dev/null +++ b/lib/Migration/Version13000Date20210921142733.php @@ -0,0 +1,64 @@ +getTable('talk_attendees'); + if ($table->hasColumn('publishing_permissions')) { + $table->dropColumn('publishing_permissions'); + } + + if (!$table->hasColumn('permissions')) { + $table->addColumn('permissions', Types::INTEGER, [ + 'default' => 0, + ]); + } + + $table = $schema->getTable('talk_rooms'); + if (!$table->hasColumn('default_permissions')) { + $table->addColumn('default_permissions', Types::INTEGER, [ + 'default' => 0, + ]); + } + if (!$table->hasColumn('call_permissions')) { + $table->addColumn('call_permissions', Types::INTEGER, [ + 'default' => 0, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + #[\Override] + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + // FIXME set default_permissions based on appconfig "start_calls" + } +} diff --git a/lib/Migration/Version13000Date20211007192733.php b/lib/Migration/Version13000Date20211007192733.php new file mode 100644 index 0000000..5b62edd --- /dev/null +++ b/lib/Migration/Version13000Date20211007192733.php @@ -0,0 +1,39 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('notification_calls')) { + $table->addColumn('notification_calls', Types::INTEGER, [ + 'default' => Participant::NOTIFY_CALLS_ON, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version14000Date20211203132513.php b/lib/Migration/Version14000Date20211203132513.php new file mode 100644 index 0000000..5000ddd --- /dev/null +++ b/lib/Migration/Version14000Date20211203132513.php @@ -0,0 +1,52 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('remote_server')) { + $table->addColumn('remote_server', Types::STRING, [ + 'notnull' => false, + 'length' => 512, + 'default' => null, + ]); + $table->addColumn('remote_token', Types::STRING, [ + 'notnull' => false, + 'length' => 32, + 'default' => null, + ]); + + // Can not be unique as we have null, null for all local rooms. + $table->addIndex(['remote_server', 'remote_token'], 'remote_id'); + } + + if ($table->hasColumn('server_url')) { + $table->dropColumn('server_url'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version14000Date20220217115327.php b/lib/Migration/Version14000Date20220217115327.php new file mode 100644 index 0000000..9cd7e09 --- /dev/null +++ b/lib/Migration/Version14000Date20220217115327.php @@ -0,0 +1,31 @@ +config->deleteAppValue('spreed', 'hosted-signaling-server-account-last-checked'); + } +} diff --git a/lib/Migration/Version14000Date20220328153054.php b/lib/Migration/Version14000Date20220328153054.php new file mode 100644 index 0000000..09a55e6 --- /dev/null +++ b/lib/Migration/Version14000Date20220328153054.php @@ -0,0 +1,37 @@ +getTable('talk_attendees'); + $displayName = $table->getColumn('display_name'); + if ($displayName->getLength() !== 255) { + $displayName->setLength(255); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version14000Date20220330141647.php b/lib/Migration/Version14000Date20220330141647.php new file mode 100644 index 0000000..95f7afc --- /dev/null +++ b/lib/Migration/Version14000Date20220330141647.php @@ -0,0 +1,219 @@ +hasTable('talk_attachments')) { + $table = $schema->createTable('talk_attachments'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('message_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('message_time', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('object_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + + $table->setPrimaryKey(['id']); + + $table->addIndex(['room_id', 'object_type'], 'objects_in_room'); + + return $schema; + } + return null; + } + + /** + * @param IOutput $output + * @param Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + */ + #[\Override] + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + $sql = $this->connection->getDatabasePlatform() + ->getTruncateTableSQL('`*PREFIX*talk_attachments`'); + $this->connection->executeQuery($sql); + + $insert = $this->connection->getQueryBuilder(); + $insert->insert('talk_attachments') + ->setValue('room_id', $insert->createParameter('room_id')) + ->setValue('message_id', $insert->createParameter('message_id')) + ->setValue('message_time', $insert->createParameter('message_time')) + ->setValue('object_type', $insert->createParameter('object_type')) + ->setValue('actor_type', $insert->createParameter('actor_type')) + ->setValue('actor_id', $insert->createParameter('actor_id')); + + $offset = -1; + $select = $this->connection->getQueryBuilder(); + $select->select('id', 'creation_timestamp', 'object_id', 'actor_type', 'actor_id', 'message') + ->from('comments') + ->where($select->expr()->eq('object_type', $select->createParameter('object_type'))) + ->andWhere($select->expr()->eq('verb', $select->createParameter('verb'))) + ->andWhere($select->expr()->gt('id', $select->createParameter('offset'))) + ->orderBy('id', 'ASC') + ->setMaxResults(1000); + + $select->setParameter('object_type', 'chat') + ->setParameter('verb', 'object_shared'); + + while ($offset !== 0) { + $offset = $this->chunkedWriting($insert, $select, max($offset, 0)); + } + } + + protected function chunkedWriting(IQueryBuilder $insert, IQueryBuilder $select, int $offset): int { + $select->setParameter('offset', $offset); + + $attachments = $sharesWithoutMimetype = []; + $result = $select->executeQuery(); + while ($row = $result->fetch()) { + $attachment = [ + 'room_id' => (int)$row['object_id'], + 'message_id' => (int)$row['id'], + 'actor_type' => $row['actor_type'], + 'actor_id' => $row['actor_id'], + ]; + + $datetime = new \DateTime($row['creation_timestamp']); + $attachment['message_time'] = $datetime->getTimestamp(); + + $message = json_decode($row['message'], true); + $messageType = $message['message'] ?? ''; + $parameters = $message['parameters'] ?? []; + + if ($messageType === 'object_shared') { + $objectType = $parameters['objectType'] ?? ''; + if ($objectType === 'geo-location') { + $attachment['object_type'] = Attachment::TYPE_LOCATION; + } elseif ($objectType === 'deck-card') { + $attachment['object_type'] = Attachment::TYPE_DECK_CARD; + } else { + $attachment['object_type'] = Attachment::TYPE_OTHER; + } + } else { + $messageType = $parameters['metaData']['messageType'] ?? ''; + $mimetype = $parameters['metaData']['mimeType'] ?? ''; + + if ($messageType === 'voice-message') { + $attachment['object_type'] = Attachment::TYPE_VOICE; + } elseif (str_starts_with($mimetype, 'audio/')) { + $attachment['object_type'] = Attachment::TYPE_AUDIO; + } elseif (str_starts_with($mimetype, 'image/') || str_starts_with($mimetype, 'video/')) { + $attachment['object_type'] = Attachment::TYPE_MEDIA; + } else { + if ($mimetype === '' && isset($parameters['share'])) { + $sharesWithoutMimetype[(int)$parameters['share']] = (int)$row['id']; + } + $attachment['object_type'] = Attachment::TYPE_FILE; + } + } + + $attachments[(int)$row['id']] = $attachment; + } + $result->closeCursor(); + + if (empty($attachments)) { + return 0; + } + + $mimetypes = $this->getMimetypeFromFileCache(array_keys($sharesWithoutMimetype)); + foreach ($mimetypes as $shareId => $mimetype) { + if (!isset($attachments[$sharesWithoutMimetype[$shareId]])) { + continue; + } + + if (str_starts_with($mimetype, 'audio/')) { + $attachments[$sharesWithoutMimetype[$shareId]]['object_type'] = Attachment::TYPE_AUDIO; + } elseif (str_starts_with($mimetype, 'image/') || str_starts_with($mimetype, 'video/')) { + $attachments[$sharesWithoutMimetype[$shareId]]['object_type'] = Attachment::TYPE_MEDIA; + } + } + + $this->connection->beginTransaction(); + foreach ($attachments as $attachment) { + $insert + ->setParameter('room_id', $attachment['room_id'], IQueryBuilder::PARAM_INT) + ->setParameter('message_id', $attachment['message_id'], IQueryBuilder::PARAM_INT) + ->setParameter('message_time', $attachment['message_time'], IQueryBuilder::PARAM_INT) + ->setParameter('actor_type', $attachment['actor_type']) + ->setParameter('actor_id', $attachment['actor_id']) + ->setParameter('object_type', $attachment['object_type']) + ; + + $insert->executeStatement(); + } + $this->connection->commit(); + + return end($attachments)['message_id']; + } + + protected function getMimetypeFromFileCache(array $shareIds): array { + $mimetype = []; + + $query = $this->connection->getQueryBuilder(); + $query->select('s.id', 'm.mimetype') + ->from('share', 's') + ->leftJoin('s', 'filecache', 'f', $query->expr()->eq('s.file_source', 'f.fileid')) + ->leftJoin('f', 'mimetypes', 'm', $query->expr()->eq('f.mimetype', 'm.id')) + ->where($query->expr()->in('s.id', $query->createNamedParameter($shareIds, IQueryBuilder::PARAM_INT_ARRAY))); + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $mimetype[$row['id']] = $row['mimetype']; + } + $result->closeCursor(); + + return $mimetype; + } +} diff --git a/lib/Migration/Version15000Date20220427183026.php b/lib/Migration/Version15000Date20220427183026.php new file mode 100644 index 0000000..479dc49 --- /dev/null +++ b/lib/Migration/Version15000Date20220427183026.php @@ -0,0 +1,97 @@ +connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('default_permissions', $update->func()->add( + 'default_permissions', + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + )) + ->where($update->expr()->neq('default_permissions', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT))) // Attendee::PERMISSIONS_DEFAULT + ->andWhere( + $update->expr()->neq( + $update->expr()->castColumn( + $update->expr()->bitwiseAnd( + 'default_permissions', + 128 // Attendee::PERMISSION_CHAT + ), + IQueryBuilder::PARAM_INT + ), + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + ) + ); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('call_permissions', $update->func()->add( + 'call_permissions', + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + )) + ->where($update->expr()->neq('call_permissions', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT))) // Attendee::PERMISSIONS_DEFAULT + ->andWhere( + $update->expr()->neq( + $update->expr()->castColumn( + $update->expr()->bitwiseAnd( + 'call_permissions', + 128 // Attendee::PERMISSION_CHAT + ), + IQueryBuilder::PARAM_INT + ), + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + ) + ); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('permissions', $update->func()->add( + 'permissions', + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + )) + ->where($update->expr()->neq('permissions', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT))) // Attendee::PERMISSIONS_DEFAULT + ->andWhere( + $update->expr()->neq( + $update->expr()->castColumn( + $update->expr()->bitwiseAnd( + 'permissions', + 128 // Attendee::PERMISSION_CHAT + ), + IQueryBuilder::PARAM_INT + ), + $update->createNamedParameter(128, IQueryBuilder::PARAM_INT) // Attendee::PERMISSION_CHAT + ) + ); + $update->executeStatement(); + } +} diff --git a/lib/Migration/Version15000Date20220503121308.php b/lib/Migration/Version15000Date20220503121308.php new file mode 100644 index 0000000..adf59d3 --- /dev/null +++ b/lib/Migration/Version15000Date20220503121308.php @@ -0,0 +1,128 @@ +hasTable('talk_polls')) { + $table = $schema->createTable('talk_polls'); + + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('question', Types::TEXT, [ + 'notnull' => false, + 'length' => null, + ]); + $table->addColumn('options', Types::TEXT, [ + 'notnull' => false, + 'length' => null, + ]); + $table->addColumn('votes', Types::TEXT, [ + 'notnull' => false, + 'length' => null, + ]); + $table->addColumn('num_voters', Types::BIGINT, [ + 'notnull' => false, + 'length' => 20, + 'default' => 0, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('display_name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('status', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('result_mode', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('max_votes', Types::INTEGER, [ + 'notnull' => true, + 'default' => 0, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['room_id'], 'talk_poll_room'); + } + + if (!$schema->hasTable('talk_poll_votes')) { + $table = $schema->createTable('talk_poll_votes'); + + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('poll_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('display_name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('option_id', Types::INTEGER, [ + 'notnull' => true, + 'length' => 6, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['poll_id', 'actor_type', 'actor_id'], 'talk_poll_vote'); + $table->addIndex(['room_id'], 'talk_vote_room'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version15000Date20220506005058.php b/lib/Migration/Version15000Date20220506005058.php new file mode 100644 index 0000000..a49be1b --- /dev/null +++ b/lib/Migration/Version15000Date20220506005058.php @@ -0,0 +1,39 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('message_expiration')) { + $table->addColumn('message_expiration', Types::INTEGER, [ + 'default' => 0, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version16000Date20221110151714.php b/lib/Migration/Version16000Date20221110151714.php new file mode 100644 index 0000000..59e6307 --- /dev/null +++ b/lib/Migration/Version16000Date20221110151714.php @@ -0,0 +1,47 @@ +getTable('talk_rooms'); + + if (!$table->hasColumn('breakout_room_mode')) { + $table->addColumn('breakout_room_mode', Types::INTEGER, [ + 'default' => 0, + ]); + $table->addColumn('breakout_room_status', Types::INTEGER, [ + 'default' => 0, + ]); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version16000Date20221116163301.php b/lib/Migration/Version16000Date20221116163301.php new file mode 100644 index 0000000..1109585 --- /dev/null +++ b/lib/Migration/Version16000Date20221116163301.php @@ -0,0 +1,41 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('avatar')) { + $table->addColumn('avatar', Types::STRING, [ + 'notnull' => false, + 'length' => 24, + 'default' => '', + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version16000Date20221208013745.php b/lib/Migration/Version16000Date20221208013745.php new file mode 100644 index 0000000..9303781 --- /dev/null +++ b/lib/Migration/Version16000Date20221208013745.php @@ -0,0 +1,39 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('call_recording')) { + $table->addColumn('call_recording', Types::INTEGER, [ + 'default' => 0, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version16000Date20230502145340.php b/lib/Migration/Version16000Date20230502145340.php new file mode 100644 index 0000000..733b1b2 --- /dev/null +++ b/lib/Migration/Version16000Date20230502145340.php @@ -0,0 +1,44 @@ +connection->getQueryBuilder(); + + $query->update('talk_attendees') + ->set('permissions', $query->createNamedParameter(Attendee::PERMISSIONS_DEFAULT, IQueryBuilder::PARAM_INT)) + ->where($query->expr()->eq('participant_type', $query->createNamedParameter(Participant::MODERATOR))) + ->orWhere($query->expr()->eq('participant_type', $query->createNamedParameter(Participant::GUEST_MODERATOR))); + $fixed = $query->executeStatement(); + + $output->info('Fixed permissions of ' . $fixed . ' moderators'); + } +} diff --git a/lib/Migration/Version18000Date20230504205823.php b/lib/Migration/Version18000Date20230504205823.php new file mode 100644 index 0000000..6d04a4e --- /dev/null +++ b/lib/Migration/Version18000Date20230504205823.php @@ -0,0 +1,104 @@ +hasTable('talk_bots_server')) { + $table = $schema->createTable('talk_bots_server'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('name', Types::STRING, [ + 'length' => 64, + ]); + $table->addColumn('url', Types::STRING, [ + 'length' => 4000, + ]); + $table->addColumn('url_hash', Types::STRING, [ + 'length' => 64, + ]); + $table->addColumn('description', Types::STRING, [ + 'length' => 4000, + 'notnull' => false, + ]); + $table->addColumn('secret', Types::STRING, [ + 'length' => 128, + ]); + $table->addColumn('error_count', Types::BIGINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('last_error_date', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('last_error_message', Types::STRING, [ + 'length' => 4000, + 'notnull' => false, + ]); + $table->addColumn('state', Types::SMALLINT, [ + 'default' => 0, + 'notnull' => false, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['state'], 'talk_bots_server_state'); + $table->addUniqueIndex(['url_hash'], 'talk_bots_server_urlhash'); + $table->addUniqueIndex(['secret'], 'talk_bots_server_secret'); + + $table = $schema->createTable('talk_bots_conversation'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('bot_id', Types::BIGINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('token', Types::STRING, [ + 'length' => 64, + 'notnull' => false, + ]); + $table->addColumn('state', Types::SMALLINT, [ + 'default' => 0, + 'notnull' => false, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['token', 'state'], 'talk_bots_convo_token'); + //$table->addIndex(['bot_id'], 'talk_bots_convo_id'); Removed in Version20000Date20240717180417 + $table->addUniqueIndex(['bot_id', 'token'], 'talk_bots_convo_uniq'); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version18000Date20230808120823.php b/lib/Migration/Version18000Date20230808120823.php new file mode 100644 index 0000000..e57967b --- /dev/null +++ b/lib/Migration/Version18000Date20230808120823.php @@ -0,0 +1,58 @@ +hasTable('talk_reminders')) { + $table = $schema->createTable('talk_reminders'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('user_id', Types::STRING, [ + 'length' => 64, + ]); + $table->addColumn('token', Types::STRING, [ + 'length' => 64, + ]); + $table->addColumn('message_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('date_time', Types::DATETIME, [ + 'notnull' => false, + ]); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['user_id', 'message_id'], 'talk_reminder_user_msg'); + $table->addIndex(['date_time'], 'talk_reminder_exectime'); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version18000Date20230821112014.php b/lib/Migration/Version18000Date20230821112014.php new file mode 100644 index 0000000..7f1484b --- /dev/null +++ b/lib/Migration/Version18000Date20230821112014.php @@ -0,0 +1,39 @@ +getTable('talk_bots_server'); + if (!$table->hasColumn('features')) { + $table->addColumn('features', Types::INTEGER, [ + 'default' => 3, // webhook + response + 'unsigned' => true, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20230824123939.php b/lib/Migration/Version18000Date20230824123939.php new file mode 100644 index 0000000..0311a19 --- /dev/null +++ b/lib/Migration/Version18000Date20230824123939.php @@ -0,0 +1,47 @@ +getTable('talk_bots_server'); + if (!$table->hasIndex('talk_bots_server_urlhash')) { + $table->addUniqueIndex(['url_hash'], 'talk_bots_server_urlhash'); + $modified = true; + } + if (!$table->hasIndex('talk_bots_server_secret')) { + $table->addUniqueIndex(['secret'], 'talk_bots_server_secret'); + $modified = true; + } + + $table = $schema->getTable('talk_bots_conversation'); + if (!$table->hasIndex('talk_bots_convo_uniq')) { + $table->addUniqueIndex(['bot_id', 'token'], 'talk_bots_convo_uniq'); + $modified = true; + } + + return $modified ? $schema : null; + } +} diff --git a/lib/Migration/Version18000Date20230920182747.php b/lib/Migration/Version18000Date20230920182747.php new file mode 100644 index 0000000..e20fee0 --- /dev/null +++ b/lib/Migration/Version18000Date20230920182747.php @@ -0,0 +1,39 @@ +getTable('talk_sessions'); + if (!$table->hasColumn('state')) { + $table->addColumn('state', Types::SMALLINT, [ + 'default' => 1, // active + 'unsigned' => true, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20230928131717.php b/lib/Migration/Version18000Date20230928131717.php new file mode 100644 index 0000000..34f71bf --- /dev/null +++ b/lib/Migration/Version18000Date20230928131717.php @@ -0,0 +1,45 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('phone_number')) { + $table->addColumn('phone_number', Types::STRING, [ + 'notnull' => false, + 'default' => '', + 'length' => 255, + ]); + $table->addColumn('call_id', Types::STRING, [ + 'notnull' => false, + 'default' => '', + 'length' => 255, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20231005091416.php b/lib/Migration/Version18000Date20231005091416.php new file mode 100644 index 0000000..3b77ead --- /dev/null +++ b/lib/Migration/Version18000Date20231005091416.php @@ -0,0 +1,39 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('recording_consent')) { + $table->addColumn('recording_consent', Types::SMALLINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20231018065816.php b/lib/Migration/Version18000Date20231018065816.php new file mode 100644 index 0000000..7c1619d --- /dev/null +++ b/lib/Migration/Version18000Date20231018065816.php @@ -0,0 +1,61 @@ +hasTable('talk_consent')) { + $table = $schema->createTable('talk_consent'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('token', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('date_time', Types::DATETIME, [ + 'notnull' => false, + ]); + + $table->setPrimaryKey(['id']); + + $table->addIndex(['token'], 'talk_reccons_token'); + $table->addIndex(['actor_id', 'actor_type'], 'talk_reccons_actor'); + + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20231024141626.php b/lib/Migration/Version18000Date20231024141626.php new file mode 100644 index 0000000..003e5f4 --- /dev/null +++ b/lib/Migration/Version18000Date20231024141626.php @@ -0,0 +1,36 @@ +hasTable('talk_invitations')) { + /** Recreated in {@see Version18000Date20231024141627} */ + $schema->dropTable('talk_invitations'); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version18000Date20231024141627.php b/lib/Migration/Version18000Date20231024141627.php new file mode 100644 index 0000000..8f51e5e --- /dev/null +++ b/lib/Migration/Version18000Date20231024141627.php @@ -0,0 +1,76 @@ +hasTable('talk_invitations')) { + $table = $schema->createTable('talk_invitations'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('user_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('state', Types::SMALLINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('local_room_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('access_token', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('remote_server_url', Types::STRING, [ + 'notnull' => true, + 'length' => 512, + ]); + $table->addColumn('remote_token', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('remote_attendee_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + + $table->addIndex(['local_room_id'], 'talk_fedinv_lri'); + $table->addUniqueIndex(['remote_server_url', 'remote_attendee_id'], 'talk_fedinv_remote'); + return $schema; + } + return null; + } +} diff --git a/lib/Migration/Version19000Date20240212155937.php b/lib/Migration/Version19000Date20240212155937.php new file mode 100644 index 0000000..cac1ab5 --- /dev/null +++ b/lib/Migration/Version19000Date20240212155937.php @@ -0,0 +1,48 @@ +getTable('talk_invitations'); + if (!$table->hasColumn('inviter_cloud_id')) { + $table->addColumn('inviter_cloud_id', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('inviter_display_name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version19000Date20240214095011.php b/lib/Migration/Version19000Date20240214095011.php new file mode 100644 index 0000000..ef677b4 --- /dev/null +++ b/lib/Migration/Version19000Date20240214095011.php @@ -0,0 +1,55 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('invited_cloud_id')) { + $table->addColumn('invited_cloud_id', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $changed = true; + } + + $table = $schema->getTable('talk_invitations'); + if (!$table->hasColumn('local_cloud_id')) { + $table->addColumn('local_cloud_id', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $changed = true; + } + + return $changed ? $schema : null; + } +} diff --git a/lib/Migration/Version19000Date20240227084313.php b/lib/Migration/Version19000Date20240227084313.php new file mode 100644 index 0000000..fb31f73 --- /dev/null +++ b/lib/Migration/Version19000Date20240227084313.php @@ -0,0 +1,91 @@ +createTable('talk_proxy_messages'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('local_token', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('remote_server_url', Types::STRING, [ + 'notnull' => true, + 'length' => 512, + ]); + $table->addColumn('remote_token', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('remote_message_id', Types::BIGINT, [ + 'notnull' => true, + 'unsigned' => true, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('actor_display_name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('message_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('system_message', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + ]); + $table->addColumn('expiration_datetime', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('message', Types::TEXT, [ + 'notnull' => false, + ]); + $table->addColumn('message_parameters', Types::TEXT, [ + 'notnull' => false, + ]); + + $table->setPrimaryKey(['id']); + + $table->addUniqueIndex(['remote_server_url', 'remote_token', 'remote_message_id'], 'talk_pcm_remote'); + $table->addIndex(['local_token'], 'talk_pmc_local'); + + return $schema; + } +} diff --git a/lib/Migration/Version19000Date20240305115243.php b/lib/Migration/Version19000Date20240305115243.php new file mode 100644 index 0000000..c52a5ae --- /dev/null +++ b/lib/Migration/Version19000Date20240305115243.php @@ -0,0 +1,47 @@ +getTable('talk_proxy_messages'); + if (!$table->hasColumn('creation_datetime')) { + $table->addColumn('creation_datetime', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('meta_data', Types::TEXT, [ + 'notnull' => false, + ]); + + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version19000Date20240312105627.php b/lib/Migration/Version19000Date20240312105627.php new file mode 100644 index 0000000..97d1844 --- /dev/null +++ b/lib/Migration/Version19000Date20240312105627.php @@ -0,0 +1,91 @@ +createTable('talk_retry_ocm'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + ]); + $table->addColumn('remote_server', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('num_attempts', Types::INTEGER, [ + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('next_retry', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('notification_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('resource_type', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('provider_id', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('notification', Types::TEXT, [ + 'notnull' => true, + ]); + + + $table->setPrimaryKey(['id']); + $table->addIndex(['next_retry'], 'talk_retry_ocm_next'); + + return $schema; + } + + /** + * Remove legacy RetryJobs + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + /** @psalm-suppress UndefinedClass */ + $formerClassName = \OCA\Talk\BackgroundJob\RetryJob::class; + + $query = $this->connection->getQueryBuilder(); + $query->delete('jobs') + ->where($query->expr()->eq('class', $query->createNamedParameter($formerClassName))); + $query->executeStatement(); + } +} diff --git a/lib/Migration/Version19000Date20240313134926.php b/lib/Migration/Version19000Date20240313134926.php new file mode 100644 index 0000000..d097520 --- /dev/null +++ b/lib/Migration/Version19000Date20240313134926.php @@ -0,0 +1,87 @@ +getTable('talk_attendees'); + $table->addColumn('state', Types::SMALLINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('unread_messages', Types::BIGINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + + $table = $schema->getTable('talk_rooms'); + $table->addColumn('has_federation', Types::SMALLINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + + return $schema; + } + + /** + * Set the invitation state to accepted for existing federated users + * Set the "has federation" for rooms with TalkV1 users + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + $query = $this->connection->getQueryBuilder(); + $query->update('talk_attendees') + ->set('state', $query->createNamedParameter(Invitation::STATE_ACCEPTED)) + ->where($query->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_FEDERATED_USERS))); + $query->executeStatement(); + + $query = $this->connection->getQueryBuilder(); + $subQuery = $this->connection->getQueryBuilder(); + $subQuery->select('room_id') + ->from('talk_attendees') + ->where($subQuery->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_FEDERATED_USERS))) + ->groupBy('room_id'); + + $query = $this->connection->getQueryBuilder(); + $query->update('talk_rooms') + // Don't use const Room::HAS_FEDERATION_TALKv1 because the file might have been loaded with old content before the migration + // ->set('has_federation', $query->createNamedParameter(Room::HAS_FEDERATION_TALKv1)) + ->set('has_federation', $query->createNamedParameter(1)) + ->where($query->expr()->in('id', $query->createFunction($subQuery->getSQL()))); + $query->executeStatement(); + } +} diff --git a/lib/Migration/Version19000Date20240416104656.php b/lib/Migration/Version19000Date20240416104656.php new file mode 100644 index 0000000..0ec025b --- /dev/null +++ b/lib/Migration/Version19000Date20240416104656.php @@ -0,0 +1,42 @@ +getTable('talk_attendees'); + $table->addColumn('last_attendee_activity', Types::BIGINT, [ + 'default' => 0, + 'unsigned' => true, + ]); + + return $schema; + } +} diff --git a/lib/Migration/Version19000Date20240709183938.php b/lib/Migration/Version19000Date20240709183938.php new file mode 100644 index 0000000..6478bd2 --- /dev/null +++ b/lib/Migration/Version19000Date20240709183938.php @@ -0,0 +1,54 @@ +addMissingProtocol('talk_invitations', 'remote_server_url'); + $this->addMissingProtocol('talk_proxy_messages', 'remote_server_url'); + $this->addMissingProtocol('talk_rooms', 'remote_server'); + } + + protected function addMissingProtocol(string $table, string $column): void { + $query = $this->connection->getQueryBuilder(); + $query->update($table) + ->set($column, $query->func()->concat($query->createNamedParameter('https://'), $column)) + ->where($query->expr()->notLike($column, $query->createNamedParameter( + $this->connection->escapeLikeParameter('http://') . '%' + ))) + ->andWhere($query->expr()->notLike($column, $query->createNamedParameter( + $this->connection->escapeLikeParameter('https://') . '%' + ))) + ->andWhere($query->expr()->nonEmptyString($column)); + $query->executeStatement(); + } +} diff --git a/lib/Migration/Version20000Date20240621150333.php b/lib/Migration/Version20000Date20240621150333.php new file mode 100644 index 0000000..abac558 --- /dev/null +++ b/lib/Migration/Version20000Date20240621150333.php @@ -0,0 +1,74 @@ +hasTable('talk_bans')) { + // $table = $schema->createTable('talk_bans'); + // $table->addColumn('id', Types::BIGINT, [ + // 'autoincrement' => true, + // 'notnull' => true, + // 'length' => 20, + // ]); + // $table->addColumn('actor_type', Types::STRING, [ + // 'notnull' => true, + // 'length' => 64, + // ]); + // $table->addColumn('actor_id', Types::STRING, [ + // 'notnull' => true, + // 'length' => 64, + // ]); + // $table->addColumn('room_id', Types::BIGINT, [ + // 'notnull' => true, + // 'unsigned' => true, + // ]); + // $table->addColumn('banned_type', Types::STRING, [ + // 'length' => 64, + // 'notnull' => true, + // ]); + // $table->addColumn('banned_id', Types::STRING, [ + // 'length' => 64, + // 'notnull' => true, + // ]); + // $table->addColumn('banned_time', Types::DATETIME, [ + // 'notnull' => false, + // ]); + // $table->addColumn('internal_note', Types::TEXT, [ + // 'notnull' => false, + // ]); + // + // $table->setPrimaryKey(['id']); + // //A user should not be banned from the same room more than once + // $table->addUniqueIndex(['banned_type', 'banned_id', 'room_id'], 'talk_bans_unique_actor_room'); + // $table->addIndex(['room_id']); + // return $schema; + // } + + return null; + } +} diff --git a/lib/Migration/Version20000Date20240621150334.php b/lib/Migration/Version20000Date20240621150334.php new file mode 100644 index 0000000..bddc4db --- /dev/null +++ b/lib/Migration/Version20000Date20240621150334.php @@ -0,0 +1,35 @@ +hasTable('talk_bans')) { + $schema->dropTable('talk_bans'); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version20000Date20240621150335.php b/lib/Migration/Version20000Date20240621150335.php new file mode 100644 index 0000000..ed58076 --- /dev/null +++ b/lib/Migration/Version20000Date20240621150335.php @@ -0,0 +1,79 @@ +hasTable('talk_bans')) { + $table = $schema->createTable('talk_bans'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('moderator_actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('moderator_actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('moderator_displayname', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('banned_actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 32, + ]); + $table->addColumn('banned_actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('banned_displayname', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'unsigned' => true, + ]); + $table->addColumn('banned_time', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('internal_note', Types::TEXT, [ + 'notnull' => false, + ]); + + $table->setPrimaryKey(['id']); + //A user should not be banned from the same room more than once + $table->addUniqueIndex(['banned_actor_type', 'banned_actor_id', 'room_id'], 'talk_room_bans'); + $table->addIndex(['room_id']); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version20000Date20240623123938.php b/lib/Migration/Version20000Date20240623123938.php new file mode 100644 index 0000000..4d5a34f --- /dev/null +++ b/lib/Migration/Version20000Date20240623123938.php @@ -0,0 +1,41 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('mention_permissions')) { + $table->addColumn('mention_permissions', Types::INTEGER, [ + 'default' => 0, + 'notnull' => true, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version20000Date20240716190335.php b/lib/Migration/Version20000Date20240716190335.php new file mode 100644 index 0000000..a1b24a6 --- /dev/null +++ b/lib/Migration/Version20000Date20240716190335.php @@ -0,0 +1,37 @@ +getTable('talk_invitations'); + if (!$table->hasIndex('talk_user_state')) { + $table->addIndex(['user_id', 'state'], 'talk_user_state'); + return $schema; + } + + return null; + } +} diff --git a/lib/Migration/Version20000Date20240717180417.php b/lib/Migration/Version20000Date20240717180417.php new file mode 100644 index 0000000..ba828b1 --- /dev/null +++ b/lib/Migration/Version20000Date20240717180417.php @@ -0,0 +1,43 @@ +getTable('talk_attendees'); + if ($table->hasIndex('ta_room')) { + $table->dropIndex('ta_room'); + } + + // Remove redundant index talk_bots_convo_id from talk_bots_conversation + $table = $schema->getTable('talk_bots_conversation'); + if ($table->hasIndex('talk_bots_convo_id')) { + $table->dropIndex('talk_bots_convo_id'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version20000Date20240718031959.php b/lib/Migration/Version20000Date20240718031959.php new file mode 100644 index 0000000..ed1a2c4 --- /dev/null +++ b/lib/Migration/Version20000Date20240718031959.php @@ -0,0 +1,58 @@ +hasTable('talk_internalsignaling')) { + $table = $schema->getTable('talk_internalsignaling'); + + $modified = false; + + $sender = $table->getColumn('sender'); + if ($sender->getLength() !== 512) { + $sender->setLength(512); + $modified = true; + } + + $recipient = $table->getColumn('recipient'); + if ($recipient->getLength() !== 512) { + $recipient->setLength(512); + $modified = true; + } + + if ($modified) { + return $schema; + } + } + + return null; + } +} diff --git a/lib/Migration/Version2000Date20170707093535.php b/lib/Migration/Version2000Date20170707093535.php new file mode 100644 index 0000000..ae8cee4 --- /dev/null +++ b/lib/Migration/Version2000Date20170707093535.php @@ -0,0 +1,110 @@ +hasTable('spreedme_messages')) { + $table = $schema->createTable('spreedme_messages'); + + $table->addColumn('id', Types::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('sender', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('recipient', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('sessionId', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('object', Types::TEXT, [ + 'notnull' => true, + ]); + $table->addColumn('timestamp', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + + $table->setPrimaryKey(['id']); + } + + if (!$schema->hasTable('spreedme_rooms')) { + $table = $schema->createTable('spreedme_rooms'); + + $table->addColumn('id', Types::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + 'default' => '', + ]); + $table->addColumn('token', Types::STRING, [ + 'notnull' => false, + 'length' => 32, + 'default' => '', + ]); + $table->addColumn('type', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + + $table->setPrimaryKey(['id']); + // FIXME: Couldn't make it unique because the migration only ran afterwards on updates + $table->addIndex(['token'], 'unique_token'); + } + + if (!$schema->hasTable('spreedme_room_participants')) { + $table = $schema->createTable('spreedme_room_participants'); + + $table->addColumn('userId', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('roomId', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('lastPing', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('sessionId', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version2000Date20171026140256.php b/lib/Migration/Version2000Date20171026140256.php new file mode 100644 index 0000000..614e78f --- /dev/null +++ b/lib/Migration/Version2000Date20171026140256.php @@ -0,0 +1,62 @@ +config->getAppValue('spreed', 'installed_version', '0.0.0'), '2.0.0', '<')) { + // Migrations only work after 2.0.0 + return; + } + + $update = $this->connection->getQueryBuilder(); + $update->update('spreedme_rooms') + ->set('name', $update->createNamedParameter('')) + ->where($update->expr()->eq('id', $update->createParameter('room_id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('spreedme_rooms'); + $result = $query->executeQuery(); + + $output->startProgress(); + while ($row = $result->fetch()) { + $output->advance(); + + if (strlen($row['name']) !== 12 || $this->groupManager->groupExists($row['name'])) { + continue; + } + + $update->setParameter('room_id', (int)$row['id'], IQueryBuilder::PARAM_INT) + ->executeStatement(); + } + $output->finishProgress(); + } +} diff --git a/lib/Migration/Version2000Date20171026140257.php b/lib/Migration/Version2000Date20171026140257.php new file mode 100644 index 0000000..2d331c6 --- /dev/null +++ b/lib/Migration/Version2000Date20171026140257.php @@ -0,0 +1,84 @@ +tokens = []; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + if (version_compare($this->config->getAppValue('spreed', 'installed_version', '0.0.0'), '2.0.0', '<')) { + // Migrations only work after 2.0.0 + return; + } + + $chars = str_replace(['l', '0', '1'], '', ISecureRandom::CHAR_LOWER . ISecureRandom::CHAR_DIGITS); + $entropy = (int)$this->config->getAppValue('spreed', 'token_entropy', '8'); + + $update = $this->connection->getQueryBuilder(); + $update->update('spreedme_rooms') + ->set('token', $update->createParameter('token')) + ->where($update->expr()->eq('id', $update->createParameter('room_id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('spreedme_rooms') + ->where($query->expr()->emptyString('token')) + ->orWhere($query->expr()->isNull('token')); + $result = $query->executeQuery(); + + $output->startProgress(); + while ($row = $result->fetch()) { + $output->advance(); + + $token = $this->getNewToken($entropy, $chars); + + $update->setParameter('token', $token) + ->setParameter('room_id', (int)$row['id'], IQueryBuilder::PARAM_INT) + ->executeStatement(); + } + $output->finishProgress(); + } + + /** + * @param int $entropy + * @param string $chars + * @return string + */ + protected function getNewToken(int $entropy, string $chars): string { + $token = $this->secureRandom->generate($entropy, $chars); + while (isset($this->tokens[$token])) { + $token = $this->secureRandom->generate($entropy, $chars); + } + $this->tokens[$token] = $token; + return $token; + } +} diff --git a/lib/Migration/Version2001Date20170707115443.php b/lib/Migration/Version2001Date20170707115443.php new file mode 100644 index 0000000..d9eac1f --- /dev/null +++ b/lib/Migration/Version2001Date20170707115443.php @@ -0,0 +1,143 @@ +getTable('spreedme_room_participants'); + + if (!$table->hasColumn('participantType')) { + $table->addColumn('participantType', Types::SMALLINT, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + if (version_compare($this->config->getAppValue('spreed', 'installed_version', '0.0.0'), '2.0.0', '<')) { + // Migrations only work after 2.0.0 + return; + } + + $query = $this->db->getQueryBuilder(); + + $query->selectAlias($query->createFunction('COUNT(*)'), 'num_rooms') + ->from('spreedme_rooms'); + $result = $query->executeQuery(); + $return = (int)$result->fetch(); + $result->closeCursor(); + $numRooms = (int)$return['num_rooms']; + + if ($numRooms === 0) { + return; + } + + $query->select('id') + ->from('spreedme_rooms') + ->where($query->expr()->eq('type', $query->createNamedParameter(Room::TYPE_ONE_TO_ONE))); + $result = $query->executeQuery(); + + $one2oneRooms = []; + while ($row = $result->fetch()) { + $one2oneRooms[] = (int)$row['id']; + } + $result->closeCursor(); + + if (!empty($one2oneRooms)) { + $owners = $this->makeOne2OneParticipantsOwners($one2oneRooms); + $output->info('Made ' . $owners . ' users owner of their one2one calls'); + } + + if (count($one2oneRooms) !== $numRooms) { + $moderators = $this->makeGroupParticipantsModerators($one2oneRooms); + $output->info('Made ' . $moderators . ' users moderators in group calls'); + } + } + + /** + * @param int[] $one2oneRooms List of one2one room ids + * @return int Number of updated participants + */ + protected function makeOne2OneParticipantsOwners(array $one2oneRooms): int { + $update = $this->db->getQueryBuilder(); + + if ($this->db->getDatabaseProvider() !== IDBConnection::PLATFORM_POSTGRES) { + $update->update('spreedme_room_participants') + ->set('participantType', $update->createNamedParameter(Participant::OWNER)) + ->where($update->expr()->in('roomId', $update->createNamedParameter($one2oneRooms, IQueryBuilder::PARAM_INT_ARRAY))); + } else { + $update->update('spreedme_room_participants') + ->set('participanttype', $update->createNamedParameter(Participant::OWNER)) + ->where($update->expr()->in('roomId', $update->createNamedParameter($one2oneRooms, IQueryBuilder::PARAM_INT_ARRAY))); + } + + return $update->executeStatement(); + } + + /** + * @param int[] $one2oneRooms List of one2one room ids which should not be touched + * @return int Number of updated participants + */ + protected function makeGroupParticipantsModerators(array $one2oneRooms): int { + $update = $this->db->getQueryBuilder(); + + if ($this->db->getDatabaseProvider() !== IDBConnection::PLATFORM_POSTGRES) { + $update->update('spreedme_room_participants') + ->set('participantType', $update->createNamedParameter(Participant::MODERATOR)) + ->where($update->expr()->nonEmptyString('userId')); + } else { + $update->update('spreedme_room_participants') + ->set('participanttype', $update->createNamedParameter(Participant::MODERATOR)) + ->where($update->expr()->nonEmptyString('userId')); + } + + if (!empty($one2oneRooms)) { + $update->andWhere($update->expr()->notIn('roomId', $update->createNamedParameter($one2oneRooms, IQueryBuilder::PARAM_INT_ARRAY))); + } + + return $update->executeStatement(); + } +} diff --git a/lib/Migration/Version2001Date20170913104501.php b/lib/Migration/Version2001Date20170913104501.php new file mode 100644 index 0000000..f0c1dc5 --- /dev/null +++ b/lib/Migration/Version2001Date20170913104501.php @@ -0,0 +1,56 @@ +hasTable('videocalls_signaling')) { + $table = $schema->createTable('videocalls_signaling'); + + $table->addColumn('sender', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('recipient', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('message', Types::TEXT, [ + 'notnull' => true, + ]); + $table->addColumn('timestamp', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + + $table->addIndex(['recipient', 'timestamp'], 'vcsig_recipient'); + } + + if ($schema->hasTable('spreedme_messages')) { + $schema->dropTable('spreedme_messages'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version2001Date20170921145301.php b/lib/Migration/Version2001Date20170921145301.php new file mode 100644 index 0000000..0e28ae6 --- /dev/null +++ b/lib/Migration/Version2001Date20170921145301.php @@ -0,0 +1,37 @@ +getTable('spreedme_rooms'); + $table->addColumn('password', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + 'default' => '', + ]); + + return $schema; + } +} diff --git a/lib/Migration/Version2001Date20170929092606.php b/lib/Migration/Version2001Date20170929092606.php new file mode 100644 index 0000000..460d26d --- /dev/null +++ b/lib/Migration/Version2001Date20170929092606.php @@ -0,0 +1,46 @@ +config->getAppValue('spreed', 'stun_server', 'stun.nextcloud.com:443'); + $turnServer = [ + 'server' => $this->config->getAppValue('spreed', 'turn_server'), + 'secret' => $this->config->getAppValue('spreed', 'turn_server_secret'), + 'protocols' => $this->config->getAppValue('spreed', 'turn_server_protocols'), + ]; + + $this->config->setAppValue('spreed', 'stun_servers', json_encode([$stunServer])); + if ($turnServer['server'] !== '' && $turnServer['secret'] !== '' && $turnServer['protocols'] !== '') { + $this->config->setAppValue('spreed', 'turn_servers', json_encode([$turnServer])); + } + + $this->config->deleteAppValue('spreed', 'stun_server'); + $this->config->deleteAppValue('spreed', 'turn_server'); + $this->config->deleteAppValue('spreed', 'turn_server_secret'); + $this->config->deleteAppValue('spreed', 'turn_server_protocols'); + } +} diff --git a/lib/Migration/Version2001Date20171009132424.php b/lib/Migration/Version2001Date20171009132424.php new file mode 100644 index 0000000..0000f76 --- /dev/null +++ b/lib/Migration/Version2001Date20171009132424.php @@ -0,0 +1,41 @@ +getTable('spreedme_rooms'); + $table->addColumn('activeSince', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('activeGuests', Types::INTEGER, [ + 'notnull' => true, + 'length' => 4, + 'default' => 0, + 'unsigned' => true, + ]); + + return $schema; + } +} diff --git a/lib/Migration/Version2001Date20171026134605.php b/lib/Migration/Version2001Date20171026134605.php new file mode 100644 index 0000000..cc081ee --- /dev/null +++ b/lib/Migration/Version2001Date20171026134605.php @@ -0,0 +1,390 @@ +hasTable('talk_signaling')) { + * $table = $schema->createTable('talk_signaling'); + * + * $table->addColumn('sender', Types::STRING, [ + * 'notnull' => true, + * 'length' => 255, + * ]); + * $table->addColumn('recipient', Types::STRING, [ + * 'notnull' => true, + * 'length' => 255, + * ]); + * $table->addColumn('message', Types::TEXT, [ + * 'notnull' => true, + * ]); + * $table->addColumn('timestamp', Types::INTEGER, [ + * 'notnull' => true, + * 'length' => 11, + * ]); + * + * $table->addIndex(['recipient', 'timestamp'], 'ts_recipient_time'); + * } + */ + + if (!$schema->hasTable('talk_rooms')) { + $table = $schema->createTable('talk_rooms'); + + $table->addColumn('id', Types::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + 'default' => '', + ]); + $table->addColumn('token', Types::STRING, [ + 'notnull' => false, + 'length' => 32, + 'default' => '', + ]); + $table->addColumn('type', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('password', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + 'default' => '', + ]); + $table->addColumn('activeSince', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('activeGuests', Types::INTEGER, [ + 'notnull' => true, + 'length' => 4, + 'default' => 0, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['token'], 'tr_room_token'); + } + + if (!$schema->hasTable('talk_participants')) { + $table = $schema->createTable('talk_participants'); + + $table->addColumn('userId', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('roomId', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('lastPing', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + ]); + $table->addColumn('sessionId', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('participantType', Types::SMALLINT, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + if (version_compare($this->config->getAppValue('spreed', 'installed_version', '0.0.0'), '2.0.0', '<')) { + // Migrations only work after 2.0.0 + return; + } + + $roomIdMap = $this->copyRooms(); + $this->copyParticipants($roomIdMap); + $this->fixNotifications($roomIdMap); + $this->fixActivities($roomIdMap); + $this->fixActivityMails($roomIdMap); + } + + /** + * @return int[] + */ + protected function copyRooms(): array { + $roomIdMap = []; + + $insert = $this->connection->getQueryBuilder(); + $insert->insert('talk_rooms') + ->values([ + 'name' => $insert->createParameter('name'), + 'token' => $insert->createParameter('token'), + 'type' => $insert->createParameter('type'), + 'password' => $insert->createParameter('password'), + ]); + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('spreedme_rooms'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $insert + ->setParameter('name', $row['name']) + ->setParameter('token', $row['token']) + ->setParameter('type', (int)$row['type'], IQueryBuilder::PARAM_INT) + ->setParameter('password', $row['password']); + $insert->executeStatement(); + + $roomIdMap[(int)$row['id']] = $insert->getLastInsertId(); + } + $result->closeCursor(); + + return $roomIdMap; + } + + /** + * @param int[] $roomIdMap + */ + protected function copyParticipants(array $roomIdMap): void { + $insert = $this->connection->getQueryBuilder(); + if ($this->connection->getDatabaseProvider() !== IDBConnection::PLATFORM_POSTGRES) { + $insert->insert('talk_participants') + ->values([ + 'userId' => $insert->createParameter('userId'), + 'roomId' => $insert->createParameter('roomId'), + 'lastPing' => $insert->createParameter('lastPing'), + 'sessionId' => $insert->createParameter('sessionId'), + 'participantType' => $insert->createParameter('participantType'), + ]); + } else { + $insert->insert('talk_participants') + ->values([ + 'userid' => $insert->createParameter('userId'), + 'roomid' => $insert->createParameter('roomId'), + 'lastping' => $insert->createParameter('lastPing'), + 'sessionid' => $insert->createParameter('sessionId'), + 'participanttype' => $insert->createParameter('participantType'), + ]); + } + + $query = $this->connection->getQueryBuilder(); + $query->select('*') + ->from('spreedme_room_participants'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + if (!isset($roomIdMap[(int)$row['roomId']])) { + continue; + } + + $insert + ->setParameter('userId', $row['userId']) + ->setParameter('roomId', $roomIdMap[(int)$row['roomId']], IQueryBuilder::PARAM_INT) + ->setParameter('lastPing', (int)$row['lastPing'], IQueryBuilder::PARAM_INT) + ->setParameter('sessionId', $row['sessionId']) + ; + if ($this->connection->getDatabaseProvider() !== IDBConnection::PLATFORM_POSTGRES) { + $insert->setParameter('participantType', (int)$row['participantType'], IQueryBuilder::PARAM_INT); + } else { + $insert->setParameter('participantType', (int)$row['participanttype'], IQueryBuilder::PARAM_INT); + } + $insert->executeStatement(); + } + $result->closeCursor(); + } + + /** + * @param int[] $roomIdMap + */ + protected function fixNotifications(array $roomIdMap): void { + $update = $this->connection->getQueryBuilder(); + $update->update('notifications') + ->set('object_id', $update->createParameter('newId')) + ->where($update->expr()->eq('notification_id', $update->createParameter('id'))); + + $delete = $this->connection->getQueryBuilder(); + $delete->delete('notifications') + ->where($delete->expr()->eq('notification_id', $delete->createParameter('id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select(['notification_id', 'object_id']) + ->from('notifications') + ->where($query->expr()->eq('app', $query->createNamedParameter('spreed'))) + ->andWhere($query->expr()->eq('object_type', $query->createNamedParameter('room'))); + + try { + $result = $query->executeQuery(); + } catch (TableNotFoundException $e) { + return; + } + + while ($row = $result->fetch()) { + if (!isset($roomIdMap[(int)$row['object_id']])) { + $delete + ->setParameter('id', (int)$row['notification_id']) + ; + $delete->executeStatement(); + continue; + } + + $update + ->setParameter('id', (int)$row['notification_id']) + ->setParameter('newId', $roomIdMap[(int)$row['object_id']]) + ; + $update->executeStatement(); + } + $result->closeCursor(); + } + + /** + * @param int[] $roomIdMap + */ + protected function fixActivities(array $roomIdMap): void { + $update = $this->connection->getQueryBuilder(); + $update->update('activity') + ->set('object_id', $update->createParameter('newId')) + ->set('subjectparams', $update->createParameter('subjectParams')) + ->where($update->expr()->eq('activity_id', $update->createParameter('id'))); + + $delete = $this->connection->getQueryBuilder(); + $delete->delete('activity') + ->where($delete->expr()->eq('activity_id', $delete->createParameter('id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select(['activity_id', 'object_id', 'subjectparams']) + ->from('activity') + ->where($query->expr()->eq('app', $query->createNamedParameter('spreed'))) + ->andWhere($query->expr()->eq('type', $query->createNamedParameter('spreed'))) + ->andWhere($query->expr()->eq('object_type', $query->createNamedParameter('room'))); + + try { + $result = $query->executeQuery(); + } catch (TableNotFoundException|InvalidFieldNameException) { + return; + } + + while ($row = $result->fetch()) { + if (!isset($roomIdMap[(int)$row['object_id']])) { + $delete + ->setParameter('id', (int)$row['activity_id']) + ; + $delete->executeStatement(); + continue; + } + + $params = json_decode($row['subjectparams'], true); + + if (!isset($params['room'])) { + $delete + ->setParameter('id', (int)$row['activity_id']) + ; + $delete->executeStatement(); + continue; + } + + $params['room'] = $roomIdMap[(int)$row['object_id']]; + + $update + ->setParameter('id', (int)$row['activity_id']) + ->setParameter('newId', $roomIdMap[(int)$row['object_id']]) + ->setParameter('subjectParams', json_encode($params)) + ; + $update->executeStatement(); + } + $result->closeCursor(); + } + + /** + * @param int[] $roomIdMap + */ + protected function fixActivityMails(array $roomIdMap): void { + $update = $this->connection->getQueryBuilder(); + $update->update('activity_mq') + ->set('amq_subjectparams', $update->createParameter('subjectParams')) + ->where($update->expr()->eq('mail_id', $update->createParameter('id'))); + + $delete = $this->connection->getQueryBuilder(); + $delete->delete('activity_mq') + ->where($delete->expr()->eq('mail_id', $delete->createParameter('id'))); + + $query = $this->connection->getQueryBuilder(); + $query->select(['mail_id', 'amq_subjectparams']) + ->from('activity_mq') + ->where($query->expr()->eq('amq_appid', $query->createNamedParameter('spreed'))) + ->andWhere($query->expr()->eq('amq_type', $query->createNamedParameter('spreed'))); + + try { + $result = $query->executeQuery(); + } catch (TableNotFoundException|InvalidFieldNameException) { + return; + } + + while ($row = $result->fetch()) { + $params = json_decode($row['subjectparams'], true); + + if (!isset($params['room']) || !isset($roomIdMap[(int)$params['room']])) { + $delete + ->setParameter('id', (int)$row['mail_id']) + ; + $delete->executeStatement(); + continue; + } + + $params['room'] = $roomIdMap[(int)$params['room']]; + + $update + ->setParameter('id', (int)$row['mail_id']) + ->setParameter('subjectParams', json_encode($params)) + ; + $update->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/Version2001Date20171026141336.php b/lib/Migration/Version2001Date20171026141336.php new file mode 100644 index 0000000..96776c6 --- /dev/null +++ b/lib/Migration/Version2001Date20171026141336.php @@ -0,0 +1,41 @@ +hasTable('videocalls_signaling')) { + $schema->dropTable('videocalls_signaling'); + } + + if ($schema->hasTable('spreedme_rooms')) { + $schema->dropTable('spreedme_rooms'); + } + + if ($schema->hasTable('spreedme_room_participants')) { + $schema->dropTable('spreedme_room_participants'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version2001Date20171031102049.php b/lib/Migration/Version2001Date20171031102049.php new file mode 100644 index 0000000..a45d1b1 --- /dev/null +++ b/lib/Migration/Version2001Date20171031102049.php @@ -0,0 +1,36 @@ +getTable('talk_participants'); + $table->addColumn('inCall', Types::BOOLEAN, [ + 'default' => 0, + ]); + + return $schema; + } +} diff --git a/lib/Migration/Version2001Date20180103144447.php b/lib/Migration/Version2001Date20180103144447.php new file mode 100644 index 0000000..2eef84f --- /dev/null +++ b/lib/Migration/Version2001Date20180103144447.php @@ -0,0 +1,137 @@ +getTable('talk_rooms'); + + if (!$table->hasColumn('active_since')) { + $table->addColumn('active_since', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('active_guests', Types::INTEGER, [ + 'notnull' => true, + 'length' => 4, + 'default' => 0, + 'unsigned' => true, + ]); + } + + $table = $schema->getTable('talk_participants'); + + if (!$table->hasColumn('user_id')) { + $table->addColumn('user_id', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + ]); + $table->addColumn('room_id', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('last_ping', Types::INTEGER, [ + 'notnull' => true, + 'length' => 11, + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('session_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + 'default' => '0', + ]); + $table->addColumn('participant_type', Types::SMALLINT, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + 'unsigned' => true, + ]); + $table->addColumn('in_call', Types::BOOLEAN, [ + 'default' => 0, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + if (version_compare($this->config->getAppValue('spreed', 'installed_version', '0.0.0'), '2.0.0', '<')) { + // Migrations only work after 2.0.0 + return; + } + + if ($this->connection->getDatabaseProvider() !== IDBConnection::PLATFORM_POSTGRES) { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('active_since', 'activeSince') + ->set('active_guests', 'activeGuests'); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_participants') + ->set('user_id', 'userId') + ->set('room_id', 'roomId') + ->set('last_ping', 'lastPing') + ->set('session_id', 'sessionId') + ->set('participant_type', 'participantType') + ->set('in_call', 'inCall'); + $update->executeStatement(); + } else { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('active_since', 'activesince') + ->set('active_guests', 'activeguests'); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_participants') + ->set('user_id', 'userid') + ->set('room_id', 'roomid') + ->set('last_ping', 'lastping') + ->set('session_id', 'sessionid') + ->set('participant_type', 'participanttype') + ->set('in_call', 'incall'); + $update->executeStatement(); + } + } +} diff --git a/lib/Migration/Version2001Date20180103150836.php b/lib/Migration/Version2001Date20180103150836.php new file mode 100644 index 0000000..33f0c45 --- /dev/null +++ b/lib/Migration/Version2001Date20180103150836.php @@ -0,0 +1,45 @@ +getTable('talk_rooms'); + if ($table->hasColumn('activeSince')) { + $table->dropColumn('activeSince'); + $table->dropColumn('activeGuests'); + } + + $table = $schema->getTable('talk_participants'); + if ($table->hasColumn('userId')) { + $table->dropColumn('userId'); + $table->dropColumn('roomId'); + $table->dropColumn('lastPing'); + $table->dropColumn('sessionId'); + $table->dropColumn('participantType'); + $table->dropColumn('inCall'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version21000Date20240919222538.php b/lib/Migration/Version21000Date20240919222538.php new file mode 100644 index 0000000..e3f47e3 --- /dev/null +++ b/lib/Migration/Version21000Date20240919222538.php @@ -0,0 +1,41 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('archived')) { + $table->addColumn('archived', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version21001Date20250328123156.php b/lib/Migration/Version21001Date20250328123156.php new file mode 100644 index 0000000..8f15e46 --- /dev/null +++ b/lib/Migration/Version21001Date20250328123156.php @@ -0,0 +1,41 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('important')) { + $table->addColumn('important', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version21001Date20250417141337.php b/lib/Migration/Version21001Date20250417141337.php new file mode 100644 index 0000000..fff28ba --- /dev/null +++ b/lib/Migration/Version21001Date20250417141337.php @@ -0,0 +1,54 @@ +hasTable('talk_phone_numbers')) { + return null; + } + + $table = $schema->createTable('talk_phone_numbers'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('phone_number', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + + $table->setPrimaryKey(['id']); + $table->addUniqueIndex(['phone_number']); + $table->addIndex(['actor_id']); + return $schema; + } +} diff --git a/lib/Migration/Version21001Date20250509153510.php b/lib/Migration/Version21001Date20250509153510.php new file mode 100644 index 0000000..517bad7 --- /dev/null +++ b/lib/Migration/Version21001Date20250509153510.php @@ -0,0 +1,41 @@ +getTable('talk_attendees'); + if (!$table->hasColumn('sensitive')) { + $table->addColumn('sensitive', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version22000Date20250526102909.php b/lib/Migration/Version22000Date20250526102909.php new file mode 100644 index 0000000..8e70d0c --- /dev/null +++ b/lib/Migration/Version22000Date20250526102909.php @@ -0,0 +1,37 @@ +getTable('talk_rooms'); + if ($table->hasColumn('active_guests')) { + $table->dropColumn('active_guests'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version22000Date20250623142327.php b/lib/Migration/Version22000Date20250623142327.php new file mode 100644 index 0000000..995c696 --- /dev/null +++ b/lib/Migration/Version22000Date20250623142327.php @@ -0,0 +1,132 @@ +hasTable('talk_threads')) { + return null; + } + + $table = $schema->createTable('talk_threads'); + $table->addColumn('id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('last_message_id', Types::BIGINT, [ + 'default' => 0, + 'length' => 20, + ]); + $table->addColumn('num_replies', Types::BIGINT, [ + 'default' => 0, + 'length' => 20, + ]); + + $table->setPrimaryKey(['id']); + $table->addIndex(['room_id'], 'tt_room_threads'); + + $table = $schema->createTable('talk_thread_attendees'); + $table->addColumn('id', Types::BIGINT, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('room_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('thread_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('attendee_id', Types::BIGINT, [ + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('actor_type', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('actor_id', Types::STRING, [ + 'notnull' => true, + 'length' => 255, + ]); + $table->addColumn('notification_level', Types::INTEGER, [ + 'notnull' => false, + 'default' => Participant::NOTIFY_DEFAULT, + ]); + $table->addColumn('last_read_message', Types::BIGINT, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('last_mention_message', Types::BIGINT, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('last_mention_direct', Types::BIGINT, [ + 'notnull' => false, + 'default' => 0, + ]); + $table->addColumn('read_privacy', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + 'unsigned' => true, + ]); + + $table->setPrimaryKey(['id']); + /** Replaced by @see Version22001Date20250927174738 */ + // $table->addUniqueIndex(['thread_id', 'actor_type', 'actor_id'], 'tta_thread_attendee'); + $table->addIndex(['room_id', 'actor_type', 'actor_id'], 'tta_room_attendee'); + + $table = $schema->getTable('talk_attendees'); + if (!$table->hasColumn('has_unread_threads')) { + $table->addColumn('has_unread_threads', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + if (!$table->hasColumn('has_unread_thread_mentions')) { + $table->addColumn('has_unread_thread_mentions', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + if (!$table->hasColumn('has_unread_thread_directs')) { + $table->addColumn('has_unread_thread_directs', Types::BOOLEAN, [ + 'default' => 0, + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version22000Date20250710124258.php b/lib/Migration/Version22000Date20250710124258.php new file mode 100644 index 0000000..800f8b4 --- /dev/null +++ b/lib/Migration/Version22000Date20250710124258.php @@ -0,0 +1,64 @@ +getTable('talk_threads'); + if (!$table->hasColumn('last_activity')) { + $table->addColumn('last_activity', Types::DATETIME, [ + 'notnull' => false, + ]); + $table->addColumn('name', Types::STRING, [ + 'notnull' => false, + 'length' => 255, + 'default' => '', + ]); + + $table->addIndex(['last_activity'], 'talkthread_lastactive'); + } + + $table = $schema->getTable('talk_thread_attendees'); + if ($table->hasColumn('last_read_message')) { + $table->dropColumn('last_read_message'); + } + if ($table->hasColumn('last_mention_message')) { + $table->dropColumn('last_mention_message'); + } + if ($table->hasColumn('last_mention_direct')) { + $table->dropColumn('last_mention_direct'); + } + if ($table->hasColumn('read_privacy')) { + $table->dropColumn('read_privacy'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version22000Date20250803160923.php b/lib/Migration/Version22000Date20250803160923.php new file mode 100644 index 0000000..867d257 --- /dev/null +++ b/lib/Migration/Version22000Date20250803160923.php @@ -0,0 +1,87 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('has_attachments')) { + $table->addColumn('has_attachments', Types::SMALLINT, [ + 'notnull' => false, + 'default' => 0, + ]); + return $schema; + } + + return null; + } + + /** + * @param IOutput $output + * @param Closure(): ISchemaWrapper $schemaClosure + * @param array $options + */ + #[Override] + public function postSchemaChange(IOutput $output, Closure $schemaClosure, array $options): void { + $query = $this->db->getQueryBuilder(); + $query->select('share_with') + ->from('share') + ->where($query->expr()->eq('share_type', $query->createNamedParameter(IShare::TYPE_ROOM))) + ->groupBy('share_with'); + + $tokens = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $tokens[] = $row['share_with']; + } + $result->closeCursor(); + + // Update current conversations with the correct flag + $chunks = array_chunk($tokens, 1000); + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + /** Can not use @see \OCA\Talk\Model\Attachment::ATTACHMENTS_ATLEAST_ONE during update */ + ->set('has_attachments', $update->createNamedParameter(1)) + ->where($update->expr()->in('token', $update->createParameter('tokens'))); + + foreach ($chunks as $chunk) { + $update->setParameter('tokens', $chunk, IQueryBuilder::PARAM_STR_ARRAY); + $update->executeStatement(); + } + } +} diff --git a/lib/Migration/Version22000Date20250813122342.php b/lib/Migration/Version22000Date20250813122342.php new file mode 100644 index 0000000..66baac5 --- /dev/null +++ b/lib/Migration/Version22000Date20250813122342.php @@ -0,0 +1,42 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('transcription_language')) { + $table->addColumn('transcription_language', Types::STRING, [ + 'notnull' => false, + 'default' => '', + 'length' => 16, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version22001Date20250927174738.php b/lib/Migration/Version22001Date20250927174738.php new file mode 100644 index 0000000..510b3ea --- /dev/null +++ b/lib/Migration/Version22001Date20250927174738.php @@ -0,0 +1,40 @@ +getTable('talk_thread_attendees'); + if ($table->hasUniqueConstraint('tta_thread_attendee')) { + $table->removeUniqueConstraint('tta_thread_attendee'); + } + if (!$table->hasUniqueConstraint('tta_throom_attendee')) { + $table->addUniqueIndex(['thread_id', 'room_id', 'actor_type', 'actor_id'], 'tta_throom_attendee'); + } + + return null; + } +} diff --git a/lib/Migration/Version3002Date20180319104030.php b/lib/Migration/Version3002Date20180319104030.php new file mode 100644 index 0000000..bade14b --- /dev/null +++ b/lib/Migration/Version3002Date20180319104030.php @@ -0,0 +1,50 @@ +hasTable('talk_guests')) { + * $table = $schema->createTable('talk_guests'); + * + * $table->addColumn('session_hash', Type::STRING, [ + * 'notnull' => false, + * 'length' => 64, + * ]); + * $table->addColumn('display_name', Type::STRING, [ + * 'notnull' => false, + * 'length' => 64, + * 'default' => '', + * ]); + * + * $table->addUniqueIndex(['session_hash'], 'tg_session_hash'); + * } + * + * return $schema; + */ + return null; + } +} diff --git a/lib/Migration/Version3003Date20180707222130.php b/lib/Migration/Version3003Date20180707222130.php new file mode 100644 index 0000000..5cc5629 --- /dev/null +++ b/lib/Migration/Version3003Date20180707222130.php @@ -0,0 +1,37 @@ +getTable('talk_participants'); + if (!$table->hasColumn('favorite')) { + $table->addColumn('favorite', Types::BOOLEAN, [ + 'default' => 0, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version3003Date20180718112436.php b/lib/Migration/Version3003Date20180718112436.php new file mode 100644 index 0000000..ed4d216 --- /dev/null +++ b/lib/Migration/Version3003Date20180718112436.php @@ -0,0 +1,77 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('last_activity')) { + $table->addColumn('last_activity', Types::DATETIME, [ + 'notnull' => false, + ]); + + $table->addIndex(['last_activity'], 'last_active'); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('last_activity', $update->createParameter('activity')) + ->where($update->expr()->eq('id', $update->createParameter('room'))); + + $query = $this->connection->getQueryBuilder(); + $query->select('object_id') + ->selectAlias($query->createFunction('MAX(' . $query->getColumnName('creation_timestamp') . ')'), 'last_activity') + ->from('comments') + ->where($query->expr()->eq('object_type', $query->createNamedParameter('chat'))) + ->groupBy('object_id'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $lastActivity = new \DateTime($row['last_activity']); + $update->setParameter('activity', $lastActivity, IQueryBuilder::PARAM_DATE) + ->setParameter('room', $row['object_id']); + $update->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/Version3003Date20180718133519.php b/lib/Migration/Version3003Date20180718133519.php new file mode 100644 index 0000000..bc11956 --- /dev/null +++ b/lib/Migration/Version3003Date20180718133519.php @@ -0,0 +1,75 @@ +getTable('talk_rooms'); + + if (!$table->hasColumn('last_message')) { + $table->addColumn('last_message', Types::BIGINT, [ + 'notnull' => false, + 'default' => 0, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @since 13.0.0 + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_rooms') + ->set('last_message', $update->createParameter('message')) + ->where($update->expr()->eq('id', $update->createParameter('room'))); + + $query = $this->connection->getQueryBuilder(); + $query->selectAlias($query->createFunction('MAX(' . $query->getColumnName('id') . ')'), 'message') + ->addSelect('object_id') + ->from('comments') + ->where($query->expr()->eq('object_type', $query->createNamedParameter('chat'))) + ->groupBy('object_id'); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $update->setParameter('message', $row['message']) + ->setParameter('room', $row['object_id']); + $update->executeStatement(); + } + $result->closeCursor(); + } +} diff --git a/lib/Migration/Version3003Date20180720162342.php b/lib/Migration/Version3003Date20180720162342.php new file mode 100644 index 0000000..86494dd --- /dev/null +++ b/lib/Migration/Version3003Date20180720162342.php @@ -0,0 +1,47 @@ +getTable('talk_rooms'); + + if (!$table->hasColumn('object_type')) { + $table->addColumn('object_type', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + 'default' => '', + ]); + $table->addColumn('object_id', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + 'default' => '', + ]); + $table->addIndex(['object_type', 'object_id'], 'tr_room_object'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version3003Date20180722152733.php b/lib/Migration/Version3003Date20180722152733.php new file mode 100644 index 0000000..b6caee1 --- /dev/null +++ b/lib/Migration/Version3003Date20180722152733.php @@ -0,0 +1,32 @@ +getTable('talk_participants'); + $table->dropColumn('in_call'); + + return $schema; + } +} diff --git a/lib/Migration/Version3003Date20180722152849.php b/lib/Migration/Version3003Date20180722152849.php new file mode 100644 index 0000000..d61fba9 --- /dev/null +++ b/lib/Migration/Version3003Date20180722152849.php @@ -0,0 +1,35 @@ +getTable('talk_participants'); + $table->addColumn('in_call', Types::INTEGER, [ + 'default' => 0, + ]); + + return $schema; + } +} diff --git a/lib/Migration/Version3003Date20180730080327.php b/lib/Migration/Version3003Date20180730080327.php new file mode 100644 index 0000000..5f1fd65 --- /dev/null +++ b/lib/Migration/Version3003Date20180730080327.php @@ -0,0 +1,37 @@ +getTable('talk_participants'); + if (!$table->hasColumn('last_mention')) { + $table->addColumn('last_mention', Types::DATETIME, [ + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version4099Date20181001123058.php b/lib/Migration/Version4099Date20181001123058.php new file mode 100644 index 0000000..e241a2f --- /dev/null +++ b/lib/Migration/Version4099Date20181001123058.php @@ -0,0 +1,40 @@ +getTable('talk_participants'); + if (!$table->hasColumn('notification_level')) { + $table->addColumn('notification_level', Types::INTEGER, [ + 'default' => Participant::NOTIFY_DEFAULT, + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version5099Date20190121102337.php b/lib/Migration/Version5099Date20190121102337.php new file mode 100644 index 0000000..19294ea --- /dev/null +++ b/lib/Migration/Version5099Date20190121102337.php @@ -0,0 +1,69 @@ +hasTable('talk_commands')) { + $table = $schema->createTable('talk_commands'); + + $table->addColumn('id', Types::INTEGER, [ + 'autoincrement' => true, + 'notnull' => true, + 'length' => 20, + ]); + $table->addColumn('app', Types::STRING, [ + 'notnull' => false, + 'length' => 64, + 'default' => '', + ]); + $table->addColumn('name', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('command', Types::STRING, [ + 'notnull' => true, + 'length' => 64, + ]); + $table->addColumn('script', Types::TEXT, [ + 'notnull' => true, + ]); + $table->addColumn('response', Types::INTEGER, [ + 'notnull' => true, + 'length' => 6, + 'default' => 1, + ]); + $table->addColumn('enabled', Types::INTEGER, [ + 'notnull' => true, + 'length' => 6, + 'default' => 1, + ]); + + $table->setPrimaryKey(['id']); + } + + return $schema; + } +} diff --git a/lib/Migration/Version5099Date20190319134820.php b/lib/Migration/Version5099Date20190319134820.php new file mode 100644 index 0000000..c251232 --- /dev/null +++ b/lib/Migration/Version5099Date20190319134820.php @@ -0,0 +1,43 @@ +hasTable('talk_rooms')) { + $table = $schema->getTable('talk_rooms'); + + if (!$table->hasColumn('read_only')) { + $table->addColumn('read_only', Types::INTEGER, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + ]); + } + } + + return $schema; + } +} diff --git a/lib/Migration/Version6099Date20190627172429.php b/lib/Migration/Version6099Date20190627172429.php new file mode 100644 index 0000000..5fc7214 --- /dev/null +++ b/lib/Migration/Version6099Date20190627172429.php @@ -0,0 +1,46 @@ +hasTable('talk_rooms')) { + $table = $schema->getTable('talk_rooms'); + + if (!$table->hasColumn('lobby_state')) { + $table->addColumn('lobby_state', Types::INTEGER, [ + 'notnull' => true, + 'length' => 6, + 'default' => 0, + ]); + $table->addColumn('lobby_timer', Types::DATETIME, [ + 'notnull' => false, + ]); + } + } + + return $schema; + } +} diff --git a/lib/Migration/Version7000Date20190717141457.php b/lib/Migration/Version7000Date20190717141457.php new file mode 100644 index 0000000..a639a7a --- /dev/null +++ b/lib/Migration/Version7000Date20190717141457.php @@ -0,0 +1,37 @@ +getTable('talk_participants'); + if (!$table->hasColumn('last_joined_call')) { + $table->addColumn('last_joined_call', Types::DATETIME, [ + 'notnull' => false, + ]); + } + + return $schema; + } +} diff --git a/lib/Migration/Version7000Date20190724121136.php b/lib/Migration/Version7000Date20190724121136.php new file mode 100644 index 0000000..89ab391 --- /dev/null +++ b/lib/Migration/Version7000Date20190724121136.php @@ -0,0 +1,103 @@ +getTable('talk_participants'); + if (!$table->hasColumn('last_read_message')) { + $table->addColumn('last_read_message', Types::BIGINT, [ + 'default' => 0, + 'notnull' => false, + ]); + $table->addColumn('last_mention_message', Types::BIGINT, [ + 'default' => 0, + 'notnull' => false, + ]); + } + + return $schema; + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * + * @since 13.0.0 + * + * @return void + */ + #[\Override] + public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) { + $query = $this->connection->getQueryBuilder(); + $query->select('m.user_id', 'm.object_id') + ->selectAlias($query->createFunction('MAX(' . $query->getColumnName('c.id') . ')'), 'last_comment') + ->from('comments_read_markers', 'm') + ->leftJoin('m', 'comments', 'c', $query->expr()->andX( + $query->expr()->eq('c.object_id', 'm.object_id'), + $query->expr()->eq('c.object_type', 'm.object_type'), + $query->expr()->eq('c.creation_timestamp', 'm.marker_datetime') + )) + ->where($query->expr()->eq('m.object_type', $query->createNamedParameter('chat'))) + ->groupBy('m.user_id', 'm.object_id'); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_participants') + ->set('last_read_message', $update->createParameter('message_id')) + ->where($update->expr()->eq('user_id', $update->createParameter('user_id'))) + ->andWhere($update->expr()->eq('room_id', $update->createParameter('room_id'))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $update->setParameter('message_id', (int)$row['last_comment'], IQueryBuilder::PARAM_INT) + ->setParameter('user_id', $row['user_id']) + ->setParameter('room_id', (int)$row['object_id'], IQueryBuilder::PARAM_INT); + $update->executeStatement(); + } + $result->closeCursor(); + + /** + * The above query only works if the user read in the same exact second + * as the comment was posted (author only), we set the read marker to -1 + * for all users and in case of -1 we calculate the marker on the next request. + */ + $update = $this->connection->getQueryBuilder(); + $update->update('talk_participants') + ->set('last_read_message', $update->createNamedParameter(-1)) + ->where($update->expr()->isNotNull('user_id')) + ->andWhere($update->expr()->eq('last_read_message', $update->createNamedParameter(0))); + $update->executeStatement(); + } +} diff --git a/lib/Migration/Version7000Date20190724121137.php b/lib/Migration/Version7000Date20190724121137.php new file mode 100644 index 0000000..0f2fbc5 --- /dev/null +++ b/lib/Migration/Version7000Date20190724121137.php @@ -0,0 +1,82 @@ +connection->getQueryBuilder(); + $query->select('p.user_id', 'p.room_id') + ->selectAlias($query->createFunction('MAX(' . $query->getColumnName('c.id') . ')'), 'last_mention_message') + ->from('talk_participants', 'p') + ->leftJoin('p', 'comments', 'c', $query->expr()->andX( + $query->expr()->eq('c.object_id', $query->expr()->castColumn('p.room_id', IQueryBuilder::PARAM_STR)), + $query->expr()->eq('c.object_type', $query->createNamedParameter('chat')), + $query->expr()->eq('c.creation_timestamp', 'p.last_mention') + )) + ->where($query->expr()->isNotNull('p.user_id')) + ->groupBy('p.user_id', 'p.room_id'); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_participants') + ->set('last_mention_message', $update->createParameter('message_id')) + ->where($update->expr()->eq('user_id', $update->createParameter('user_id'))) + ->andWhere($update->expr()->eq('room_id', $update->createParameter('room_id'))); + + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $update->setParameter('message_id', (int)$row['last_mention_message'], IQueryBuilder::PARAM_INT) + ->setParameter('user_id', $row['user_id']) + ->setParameter('room_id', (int)$row['room_id'], IQueryBuilder::PARAM_INT); + $update->executeStatement(); + } + $result->closeCursor(); + } + + /** + * @param IOutput $output + * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper` + * @param array $options + * @return null|ISchemaWrapper + * @throws SchemaException + * @since 13.0.0 + */ + #[\Override] + public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options): ?ISchemaWrapper { + /** @var ISchemaWrapper $schema */ + $schema = $schemaClosure(); + + $table = $schema->getTable('talk_participants'); + if ($table->hasColumn('last_mention')) { + $table->dropColumn('last_mention'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version8000Date20200331144101.php b/lib/Migration/Version8000Date20200331144101.php new file mode 100644 index 0000000..94e6cfb --- /dev/null +++ b/lib/Migration/Version8000Date20200331144101.php @@ -0,0 +1,38 @@ +getTable('talk_participants'); + if (!$table->hasIndex('tp_ident')) { + $table->addUniqueIndex(['room_id', 'user_id', 'session_id'], 'tp_ident'); + } + if (!$table->hasIndex('tp_room')) { + $table->addIndex(['room_id'], 'tp_room'); + } + if (!$table->hasIndex('tp_last_ping')) { + $table->addIndex(['last_ping'], 'tp_last_ping'); + } + if (!$table->hasIndex('tp_in_call')) { + $table->addIndex(['in_call'], 'tp_in_call'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version8000Date20200402124456.php b/lib/Migration/Version8000Date20200402124456.php new file mode 100644 index 0000000..01d6fcf --- /dev/null +++ b/lib/Migration/Version8000Date20200402124456.php @@ -0,0 +1,29 @@ +getTable('talk_participants'); + if (!$table->hasIndex('tp_uid')) { + $table->addIndex(['user_id'], 'tp_uid'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version8000Date20200407073807.php b/lib/Migration/Version8000Date20200407073807.php new file mode 100644 index 0000000..0a37378 --- /dev/null +++ b/lib/Migration/Version8000Date20200407073807.php @@ -0,0 +1,30 @@ +getTable('talk_participants'); + if (!$table->hasIndex('tp_session_id')) { + $table->addIndex(['session_id'], 'tp_session_id'); + } + + return $schema; + } +} diff --git a/lib/Migration/Version8000Date20200407115318.php b/lib/Migration/Version8000Date20200407115318.php new file mode 100644 index 0000000..3818cb0 --- /dev/null +++ b/lib/Migration/Version8000Date20200407115318.php @@ -0,0 +1,41 @@ +getTable('talk_rooms'); + if (!$table->hasColumn('assigned_hpb')) { + $table->addColumn('assigned_hpb', Types::INTEGER, [ + 'notnull' => false, + 'length' => 4, + 'unsigned' => false, + 'default' => null, + ]); + } + + return $schema; + } +} diff --git a/lib/Model/Attachment.php b/lib/Model/Attachment.php new file mode 100644 index 0000000..37588f0 --- /dev/null +++ b/lib/Model/Attachment.php @@ -0,0 +1,83 @@ +addType('roomId', Types::BIGINT); + $this->addType('messageId', Types::BIGINT); + $this->addType('messageTime', Types::BIGINT); + $this->addType('objectType', Types::STRING); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + } + + /** + * @return array + */ + public function asArray(): array { + return [ + 'id' => $this->getId(), + 'room_id' => $this->getRoomId(), + 'message_id' => $this->getMessageId(), + 'message_time' => $this->getMessageTime(), + 'object_type' => $this->getObjectType(), + 'actor_type' => $this->getActorType(), + 'actor_id' => $this->getActorId(), + ]; + } +} diff --git a/lib/Model/AttachmentMapper.php b/lib/Model/AttachmentMapper.php new file mode 100644 index 0000000..1ef2b6c --- /dev/null +++ b/lib/Model/AttachmentMapper.php @@ -0,0 +1,78 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class AttachmentMapper extends QBMapper { + use TTransactional; + + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_attachments', Attachment::class); + } + + public function createAttachmentFromRow(array $row): Attachment { + return $this->mapRowToEntity([ + 'id' => (int)$row['id'], + 'room_id' => (int)$row['room_id'], + 'message_id' => (int)$row['message_id'], + 'message_time' => (int)$row['message_time'], + 'object_type' => (string)$row['object_type'], + 'actor_type' => (string)$row['actor_type'], + 'actor_id' => (string)$row['actor_id'], + ]); + } + + /** + * @return list + * @throws \OCP\DB\Exception + */ + public function getAttachmentsByType(int $roomId, string $objectType, int $offset, int $limit): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('object_type', $query->createNamedParameter($objectType))) + ->setMaxResults($limit) + ->orderBy('id', 'DESC'); + + if ($offset > 0) { + $query->andWhere($query->expr()->lt('message_id', $query->createNamedParameter($offset))); + } + + return $this->findEntities($query); + } + + public function deleteByMessageId(int $messageId): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('message_id', $query->createNamedParameter($messageId, IQueryBuilder::PARAM_INT))); + + $query->executeStatement(); + } + + public function deleteByRoomId(int $roomId): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + $this->atomic(static function () use ($query): void { + $query->executeStatement(); + }, $this->db); + } +} diff --git a/lib/Model/Attendee.php b/lib/Model/Attendee.php new file mode 100644 index 0000000..4304730 --- /dev/null +++ b/lib/Model/Attendee.php @@ -0,0 +1,181 @@ +addType('roomId', Types::BIGINT); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('displayName', Types::STRING); + $this->addType('pin', Types::STRING); + $this->addType('participantType', Types::SMALLINT); + $this->addType('favorite', Types::BOOLEAN); + $this->addType('archived', Types::BOOLEAN); + $this->addType('important', Types::BOOLEAN); + $this->addType('sensitive', Types::BOOLEAN); + $this->addType('notificationLevel', Types::INTEGER); + $this->addType('notificationCalls', Types::INTEGER); + $this->addType('lastJoinedCall', Types::INTEGER); + $this->addType('lastReadMessage', Types::INTEGER); + $this->addType('lastMentionMessage', Types::INTEGER); + $this->addType('lastMentionDirect', Types::BIGINT); + $this->addType('readPrivacy', Types::SMALLINT); + $this->addType('permissions', Types::INTEGER); + $this->addType('accessToken', Types::STRING); + $this->addType('remoteId', Types::STRING); + $this->addType('invitedCloudId', Types::STRING); + $this->addType('phoneNumber', Types::STRING); + $this->addType('callId', Types::STRING); + $this->addType('state', Types::SMALLINT); + $this->addType('unreadMessages', Types::BIGINT); + $this->addType('lastAttendeeActivity', Types::BIGINT); + $this->addType('hasUnreadThreads', Types::BOOLEAN); + $this->addType('hasUnreadThreadMentions', Types::BOOLEAN); + $this->addType('hasUnreadThreadDirects', Types::BOOLEAN); + } + + public function getDisplayName(): string { + return (string)$this->displayName; + } +} diff --git a/lib/Model/AttendeeMapper.php b/lib/Model/AttendeeMapper.php new file mode 100644 index 0000000..4577019 --- /dev/null +++ b/lib/Model/AttendeeMapper.php @@ -0,0 +1,319 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class AttendeeMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_attendees', Attendee::class); + } + + /** + * @throws DoesNotExistException + */ + public function findByActor(int $roomId, string $actorType, string $actorId): Attendee { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId))); + + return $this->findEntity($query); + } + + /** + * @throws DoesNotExistException + * @throws MultipleObjectsReturnedException + */ + public function getById(int $id): Attendee { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($id, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function getByAccessToken(string $accessToken): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('access_token', $query->createNamedParameter($accessToken))); + // There could be multiple in case of local federation, + // so we have to get all and afterwards check + // the actor id for the serverUrl. + return $this->findEntities($query); + } + + /** + * @throws DoesNotExistException + * @throws MultipleObjectsReturnedException + */ + public function getByRemoteIdAndToken(int $id, string $token): Attendee { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('remote_id', $query->createNamedParameter($id, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('access_token', $query->createNamedParameter($token, IQueryBuilder::PARAM_STR))); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function getActorsByType(int $roomId, string $actorType, ?int $lastJoinedCall = null): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))); + + if ($lastJoinedCall !== null) { + $query->andWhere($query->expr()->gte('last_joined_call', $query->createNamedParameter($lastJoinedCall, IQueryBuilder::PARAM_INT))); + } + + return $this->findEntities($query); + } + + /** + * @return list + */ + public function getActorsByTypes(int $roomId, array $actorTypes, ?int $lastJoinedCall = null): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->in('actor_type', $query->createNamedParameter($actorTypes, IQueryBuilder::PARAM_STR_ARRAY))); + + if ($lastJoinedCall !== null) { + $query->andWhere($query->expr()->gte('last_joined_call', $query->createNamedParameter($lastJoinedCall, IQueryBuilder::PARAM_INT))); + } + + return $this->findEntities($query); + } + + /** + * @return list + * @throws DBException + */ + public function getActorsByParticipantTypes(int $roomId, array $participantType): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + if (!empty($participantType)) { + $query->andWhere($query->expr()->in('participant_type', $query->createNamedParameter($participantType, IQueryBuilder::PARAM_INT_ARRAY))); + } + + return $this->findEntities($query); + } + + public function getActorsCountByType(int $roomId, string $actorType, ?int $lastJoinedCall = null): int { + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->count('*', 'num_actors')) + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))); + + if ($lastJoinedCall !== null) { + $query->andWhere($query->expr()->gte('last_joined_call', $query->createNamedParameter($lastJoinedCall, IQueryBuilder::PARAM_INT))); + } + + $result = $query->executeQuery(); + $count = (int)$result->fetchOne(); + $result->closeCursor(); + + return $count; + } + + /** + * @param int[] $participantType + */ + public function countActorsByParticipantType(int $roomId, array $participantType): int { + $query = $this->db->getQueryBuilder(); + $query->select($query->func()->count('*', 'num_actors')) + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->notIn('actor_type', $query->createNamedParameter([ + Attendee::ACTOR_CIRCLES, + Attendee::ACTOR_GROUPS, + ], IQueryBuilder::PARAM_STR_ARRAY))); + + if (!empty($participantType)) { + $query->andWhere($query->expr()->in('participant_type', $query->createNamedParameter($participantType, IQueryBuilder::PARAM_INT_ARRAY))); + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + return (int)($row['num_actors'] ?? 0); + } + + /** + * @param int[] $ids + * @return int Number of deleted entities + */ + public function deleteByIds(array $ids): int { + $delete = $this->db->getQueryBuilder(); + $delete->delete($this->getTableName()) + ->where($delete->expr()->in('id', $delete->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))); + + return $delete->executeStatement(); + } + + public function modifyPermissions(int $roomId, string $mode, int $newState): void { + if ($mode === Attendee::PERMISSIONS_MODIFY_SET) { + if ($newState !== Attendee::PERMISSIONS_DEFAULT) { + $newState |= Attendee::PERMISSIONS_CUSTOM; + } + + $query = $this->getModifyPermissionsBaseQuery($roomId); + $query->set('permissions', $query->createNamedParameter($newState, IQueryBuilder::PARAM_INT)); + $query->executeStatement(); + } else { + foreach ([ + Attendee::PERMISSIONS_CALL_JOIN, + Attendee::PERMISSIONS_CALL_START, + Attendee::PERMISSIONS_PUBLISH_AUDIO, + Attendee::PERMISSIONS_PUBLISH_VIDEO, + Attendee::PERMISSIONS_PUBLISH_SCREEN, + Attendee::PERMISSIONS_LOBBY_IGNORE, + ] as $permission) { + if ($permission & $newState) { + $query = $this->getModifyPermissionsBaseQuery($roomId); + + if ($mode === Attendee::PERMISSIONS_MODIFY_ADD) { + $this->addSinglePermission($query, $permission); + } elseif ($mode === Attendee::PERMISSIONS_MODIFY_REMOVE) { + $this->removeSinglePermission($query, $permission); + } + } + } + } + } + + protected function getModifyPermissionsBaseQuery(int $roomId): IQueryBuilder { + $query = $this->db->getQueryBuilder(); + $query->update($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->notIn('actor_type', $query->createNamedParameter([ + Attendee::ACTOR_CIRCLES, + Attendee::ACTOR_GROUPS, + ], IQueryBuilder::PARAM_STR_ARRAY))); + + return $query; + } + + protected function addSinglePermission(IQueryBuilder $query, int $permission): void { + $query->set('permissions', $query->func()->add( + 'permissions', + $query->createNamedParameter($permission, IQueryBuilder::PARAM_INT) + )); + + $query->andWhere( + $query->expr()->neq( + $query->expr()->castColumn( + $query->expr()->bitwiseAnd( + 'permissions', + $permission + ), + IQueryBuilder::PARAM_INT + ), + $query->createNamedParameter($permission, IQueryBuilder::PARAM_INT) + ) + ); + $query->andWhere( + $query->expr()->neq( + 'permissions', + $query->createNamedParameter(Attendee::PERMISSIONS_DEFAULT, IQueryBuilder::PARAM_INT) + ) + ); + + $query->executeStatement(); + } + + protected function removeSinglePermission(IQueryBuilder $query, int $permission): void { + $query->set('permissions', $query->func()->subtract( + 'permissions', + $query->createNamedParameter($permission, IQueryBuilder::PARAM_INT) + )); + + $query->andWhere( + $query->expr()->eq( + $query->expr()->castColumn( + $query->expr()->bitwiseAnd( + 'permissions', + $permission + ), + IQueryBuilder::PARAM_INT + ), + $query->createNamedParameter($permission, IQueryBuilder::PARAM_INT) + ) + ); + // Removing permissions does not need to be explicitly prevented when + // the attendee has default permissions, as in that case it will not be + // possible to remove the permissions anyway. + + $query->executeStatement(); + } + + public function createAttendeeFromRow(array $row): Attendee { + return $this->mapRowToEntity([ + 'id' => $row['a_id'], + 'room_id' => $row['room_id'], + 'actor_type' => $row['actor_type'], + 'actor_id' => $row['actor_id'], + 'display_name' => (string)$row['display_name'], + 'pin' => $row['pin'], + 'participant_type' => (int)$row['participant_type'], + 'favorite' => (bool)$row['favorite'], + 'notification_level' => (int)$row['notification_level'], + 'notification_calls' => (int)$row['notification_calls'], + 'last_joined_call' => (int)$row['last_joined_call'], + 'last_read_message' => (int)$row['last_read_message'], + 'last_mention_message' => (int)$row['last_mention_message'], + 'last_mention_direct' => (int)$row['last_mention_direct'], + 'read_privacy' => (int)$row['read_privacy'], + 'permissions' => (int)$row['permissions'], + 'access_token' => (string)$row['access_token'], + 'remote_id' => (string)$row['remote_id'], + 'invited_cloud_id' => (string)$row['invited_cloud_id'], + 'phone_number' => $row['phone_number'], + 'call_id' => $row['call_id'], + 'state' => (int)$row['state'], + 'unread_messages' => (int)$row['unread_messages'], + 'last_attendee_activity' => (int)$row['last_attendee_activity'], + 'archived' => (bool)$row['archived'], + 'important' => (bool)$row['important'], + 'sensitive' => (bool)$row['sensitive'], + 'has_unread_threads' => (bool)$row['has_unread_threads'], + 'has_unread_thread_mentions' => (bool)$row['has_unread_thread_mentions'], + 'has_unread_thread_directs' => (bool)$row['has_unread_thread_directs'], + ]); + } +} diff --git a/lib/Model/Ban.php b/lib/Model/Ban.php new file mode 100644 index 0000000..e5e4e4d --- /dev/null +++ b/lib/Model/Ban.php @@ -0,0 +1,82 @@ +addType('id', Types::BIGINT); + $this->addType('moderatorActorType', Types::STRING); + $this->addType('moderatorActorId', Types::STRING); + $this->addType('moderatorDisplayname', Types::STRING); + $this->addType('roomId', Types::BIGINT); + $this->addType('bannedActorType', Types::STRING); + $this->addType('bannedActorId', Types::STRING); + $this->addType('bannedDisplayname', Types::STRING); + $this->addType('bannedTime', Types::DATETIME); + $this->addType('internalNote', Types::TEXT); + } + + /** + * @return TalkBan + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'id' => $this->getId(), + 'moderatorActorType' => $this->getModeratorActorType(), + 'moderatorActorId' => $this->getModeratorActorId(), + 'moderatorDisplayName' => $this->getModeratorDisplayname() ?? $this->getModeratorActorId(), + 'bannedActorType' => $this->getBannedActorType(), + 'bannedActorId' => $this->getBannedActorId(), + 'bannedDisplayName' => $this->getBannedDisplayname() ?? $this->getBannedActorId(), + 'bannedTime' => $this->getBannedTime()->getTimestamp(), + 'internalNote' => $this->getInternalNote() ?? '', + ]; + } +} diff --git a/lib/Model/BanMapper.php b/lib/Model/BanMapper.php new file mode 100644 index 0000000..4629524 --- /dev/null +++ b/lib/Model/BanMapper.php @@ -0,0 +1,98 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class BanMapper extends QBMapper { + + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_bans', Ban::class); + } + + /** + * @throws DoesNotExistException + */ + public function findForBannedActorAndRoom(string $bannedActorType, string $bannedActorId, int $roomId): Ban { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('banned_actor_type', $query->createNamedParameter($bannedActorType, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('banned_actor_id', $query->createNamedParameter($bannedActorId, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function findByRoomId(int $roomId, ?string $bannedActorType = null): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->orderBy('id', 'ASC'); + + if ($bannedActorType !== null) { + $query->andWhere($query->expr()->eq('banned_actor_type', $query->createNamedParameter($bannedActorType, IQueryBuilder::PARAM_STR))); + } + + return $this->findEntities($query); + } + + public function findByUserId(string $userId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('banned_actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('banned_actor_id', $query->createNamedParameter($userId, IQueryBuilder::PARAM_STR))) + ->orderBy('id', 'ASC'); + + return $this->findEntities($query); + } + + /** + * @throws DoesNotExistException + */ + public function findByBanIdAndRoom(int $banId, int $roomId): Ban { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($banId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + public function updateDisplayNameForActor(string $actorType, string $actorId, string $displayName): void { + $update = $this->db->getQueryBuilder(); + $update->update($this->getTableName()) + ->set('moderator_displayname', $update->createNamedParameter($displayName)) + ->where($update->expr()->eq('moderator_actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('moderator_actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + + $update = $this->db->getQueryBuilder(); + $update->update($this->getTableName()) + ->set('banned_displayname', $update->createNamedParameter($displayName)) + ->where($update->expr()->eq('banned_actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('banned_actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } +} diff --git a/lib/Model/Bot.php b/lib/Model/Bot.php new file mode 100644 index 0000000..f1a0f53 --- /dev/null +++ b/lib/Model/Bot.php @@ -0,0 +1,87 @@ + self::FEATURE_LABEL_NONE, + self::FEATURE_WEBHOOK => self::FEATURE_LABEL_WEBHOOK, + self::FEATURE_RESPONSE => self::FEATURE_LABEL_RESPONSE, + self::FEATURE_EVENT => self::FEATURE_LABEL_EVENT, + self::FEATURE_REACTION => self::FEATURE_LABEL_REACTION, + ]; + + public function __construct( + protected BotServer $botServer, + protected BotConversation $botConversation, + ) { + } + + public function getBotServer(): BotServer { + return $this->botServer; + } + + public function getBotConversation(): BotConversation { + return $this->botConversation; + } + + public function isEnabled(): bool { + return $this->botServer->getState() !== self::STATE_DISABLED + && $this->botConversation->getState() !== self::STATE_DISABLED; + } + + public static function featureFlagsToLabels(int $flags): string { + if ($flags === self::FEATURE_NONE) { + return self::FEATURE_LABEL_NONE; + } + + $features = []; + foreach (self::FEATURE_MAP as $flag => $label) { + if ($flags & $flag) { + $features[] = $label; + } + } + return implode(', ', $features); + } + + public static function featureLabelsToFlags(array $labels): int { + $reverseMap = array_flip(self::FEATURE_MAP); + $flags = 0; + foreach ($labels as $label) { + if ($label === self::FEATURE_LABEL_NONE) { + return self::FEATURE_NONE; + } + if (isset($reverseMap[$label])) { + $flags += $reverseMap[$label]; + } + } + + return $flags; + } +} diff --git a/lib/Model/BotConversation.php b/lib/Model/BotConversation.php new file mode 100644 index 0000000..89853e0 --- /dev/null +++ b/lib/Model/BotConversation.php @@ -0,0 +1,42 @@ +addType('bot_id', Types::BIGINT); + $this->addType('token', Types::STRING); + $this->addType('state', Types::SMALLINT); + } + + #[\Override] + public function jsonSerialize(): array { + return [ + 'id' => $this->getId(), + 'bot_id' => $this->getBotId(), + 'token' => $this->getToken(), + 'state' => $this->getState(), + ]; + } +} diff --git a/lib/Model/BotConversationMapper.php b/lib/Model/BotConversationMapper.php new file mode 100644 index 0000000..445c9f2 --- /dev/null +++ b/lib/Model/BotConversationMapper.php @@ -0,0 +1,59 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class BotConversationMapper extends QBMapper { + use TTransactional; + + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_bots_conversation', BotConversation::class); + } + + /** + * @return list + */ + public function findForToken(string $token): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('token', $query->createNamedParameter($token))); + + return $this->findEntities($query); + } + + public function deleteByBotId(int $botId): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('bot_id', $query->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); + + return $query->executeStatement(); + } + + public function deleteByBotIdAndTokens(int $botId, array $tokens): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('bot_id', $query->createNamedParameter($botId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->in('token', $query->createNamedParameter($tokens, IQueryBuilder::PARAM_STR_ARRAY))); + + return $query->executeStatement(); + } +} diff --git a/lib/Model/BotServer.php b/lib/Model/BotServer.php new file mode 100644 index 0000000..d76dc09 --- /dev/null +++ b/lib/Model/BotServer.php @@ -0,0 +1,92 @@ +addType('name', Types::STRING); + $this->addType('url', Types::STRING); + $this->addType('url_hash', Types::STRING); + $this->addType('description', Types::STRING); + $this->addType('secret', Types::STRING); + $this->addType('error_count', Types::BIGINT); + $this->addType('last_error_date', Types::DATETIME); + $this->addType('last_error_message', Types::STRING); + $this->addType('state', Types::SMALLINT); + $this->addType('features', Types::INTEGER); + } + + /** + * @return array{ + * id: int, + * name: string, + * url: string, + * url_hash: string, + * description: ?string, + * secret: string, + * error_count: int, + * last_error_date: int, + * last_error_message: string, + * state: int, + * features: int, + * } + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'id' => $this->getId(), + 'name' => $this->getName(), + 'url' => $this->getUrl(), + 'url_hash' => $this->getUrlHash(), + 'description' => $this->getDescription(), + 'secret' => $this->getSecret(), + 'error_count' => $this->getErrorCount(), + 'last_error_date' => $this->getLastErrorDate() ? $this->getLastErrorDate()->getTimestamp() : 0, + 'last_error_message' => $this->getLastErrorMessage(), + 'state' => $this->getState(), + 'features' => $this->getFeatures(), + ]; + } +} diff --git a/lib/Model/BotServerMapper.php b/lib/Model/BotServerMapper.php new file mode 100644 index 0000000..0db8508 --- /dev/null +++ b/lib/Model/BotServerMapper.php @@ -0,0 +1,108 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class BotServerMapper extends QBMapper { + use TTransactional; + + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_bots_server', BotServer::class); + } + + /** + * @throws DoesNotExistException + */ + public function findById(int $botId): BotServer { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + /** + * @throws DoesNotExistException + */ + public function findByUrlAndSecret(string $url, string $secret): BotServer { + $urlHash = sha1($url); + + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('url_hash', $query->createNamedParameter($urlHash))) + ->andWhere($query->expr()->eq('secret', $query->createNamedParameter($secret))); + + return $this->findEntity($query); + } + + /** + * @throws DoesNotExistException + */ + public function findByUrl(string $url): BotServer { + return $this->findByUrlHash(sha1($url)); + } + + /** + * @throws DoesNotExistException + */ + public function findByUrlHash(string $urlHash): BotServer { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('url_hash', $query->createNamedParameter($urlHash))); + + return $this->findEntity($query); + } + + public function deleteById(int $botId): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($botId, IQueryBuilder::PARAM_INT))); + + return $query->executeStatement(); + } + + /** + * @return list + */ + public function findByIds(array $botIds): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->in('id', $query->createNamedParameter($botIds, IQueryBuilder::PARAM_INT_ARRAY))); + + return $this->findEntities($query); + } + + /** + * @return list + */ + public function getAllBots(): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()); + + return $this->findEntities($query); + } +} diff --git a/lib/Model/BreakoutRoom.php b/lib/Model/BreakoutRoom.php new file mode 100644 index 0000000..57782cc --- /dev/null +++ b/lib/Model/BreakoutRoom.php @@ -0,0 +1,26 @@ +addType('token', Types::STRING); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('dateTime', Types::DATETIME); + } + + #[\Override] + public function jsonSerialize(): array { + return [ + 'token' => $this->getToken(), + 'actorType' => $this->getActorType(), + 'actorId' => $this->getActorId(), + 'timestamp' => $this->getDateTime()->getTimestamp(), + ]; + } +} diff --git a/lib/Model/ConsentMapper.php b/lib/Model/ConsentMapper.php new file mode 100644 index 0000000..474943e --- /dev/null +++ b/lib/Model/ConsentMapper.php @@ -0,0 +1,83 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class ConsentMapper extends QBMapper { + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_consent', Consent::class); + } + + /** + * @return list + */ + public function findForToken(string $token): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('token', $query->createNamedParameter($token))); + + return $this->findEntities($query); + } + + public function deleteByToken(string $token): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('token', $query->createNamedParameter($token))); + + return $query->executeStatement(); + } + + /** + * @return list + */ + public function findForActor(string $actorType, string $actorId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))); + + return $this->findEntities($query); + } + + public function deleteByActor(string $actorType, string $actorId): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))); + + return $query->executeStatement(); + } + + /** + * @return list + */ + public function findForTokenByActor(string $token, string $actorType, string $actorId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('token', $query->createNamedParameter($token))) + ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))); + + return $this->findEntities($query); + } +} diff --git a/lib/Model/Invitation.php b/lib/Model/Invitation.php new file mode 100644 index 0000000..c98f586 --- /dev/null +++ b/lib/Model/Invitation.php @@ -0,0 +1,81 @@ +addType('userId', Types::STRING); + $this->addType('state', Types::SMALLINT); + $this->addType('localRoomId', Types::BIGINT); + $this->addType('accessToken', Types::STRING); + $this->addType('remoteServerUrl', Types::STRING); + $this->addType('remoteToken', Types::STRING); + $this->addType('remoteAttendeeId', Types::BIGINT); + $this->addType('inviterCloudId', Types::STRING); + $this->addType('inviterDisplayName', Types::STRING); + $this->addType('localCloudId', Types::STRING); + } + + /** + * @return array{id: int, localCloudId: string, remoteAttendeeId: int, remoteServerUrl: string, remoteToken: string, state: int, userId: string, inviterCloudId: string, inviterDisplayName: string} + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'id' => $this->getId(), + 'userId' => $this->getUserId(), + 'state' => $this->getState(), + 'localCloudId' => $this->getLocalCloudId(), + 'remoteServerUrl' => $this->getRemoteServerUrl(), + 'remoteToken' => $this->getRemoteToken(), + 'remoteAttendeeId' => $this->getRemoteAttendeeId(), + 'inviterCloudId' => $this->getInviterCloudId(), + 'inviterDisplayName' => $this->getInviterDisplayName() ?: $this->getInviterCloudId(), + ]; + } +} diff --git a/lib/Model/InvitationList.php b/lib/Model/InvitationList.php new file mode 100644 index 0000000..e3ef395 --- /dev/null +++ b/lib/Model/InvitationList.php @@ -0,0 +1,177 @@ + */ + protected array $validUsers = []; + /** @var list */ + protected array $invalidUsers = []; + + /** @var array */ + protected array $validFederatedUsers = []; + /** @var list */ + protected array $invalidFederatedUsers = []; + + /** @var array */ + protected array $validGroups = []; + /** @var list */ + protected array $invalidGroups = []; + + /** @var array */ + protected array $validTeams = []; + /** @var list */ + protected array $invalidTeams = []; + + /** @var array */ + protected array $validEmails = []; + /** @var list */ + protected array $invalidEmails = []; + + /** @var array */ + protected array $validPhoneNumbers = []; + /** @var list */ + protected array $invalidPhoneNumbers = []; + + /** + * @param array $valid + * @param list $invalid + */ + public function setUserResults(array $valid, array $invalid): void { + $this->validUsers = $valid; + $this->invalidUsers = $invalid; + } + + /** + * @param array $valid + * @param list $invalid + */ + public function setFederatedUserResults(array $valid, array $invalid): void { + $this->validFederatedUsers = $valid; + $this->invalidFederatedUsers = $invalid; + } + + /** + * @param array $valid + * @param list $invalid + */ + public function setGroupResults(array $valid, array $invalid): void { + $this->validGroups = $valid; + $this->invalidGroups = $invalid; + } + + /** + * @param array $valid + * @param list $invalid + */ + public function setTeamResults(array $valid, array $invalid): void { + $this->validTeams = $valid; + $this->invalidTeams = $invalid; + } + + /** + * @param array $valid + * @param list $invalid + */ + public function setEmailResults(array $valid, array $invalid): void { + $this->validEmails = $valid; + $this->invalidEmails = $invalid; + } + + /** + * @param array $valid + * @param list $invalid + */ + public function setPhoneNumberResults(array $valid, array $invalid): void { + $this->validPhoneNumbers = $valid; + $this->invalidPhoneNumbers = $invalid; + } + + /** + * @return array + */ + public function getUsers(): array { + return $this->validUsers; + } + + /** + * @return array + */ + public function getFederatedUsers(): array { + return $this->validFederatedUsers; + } + + /** + * @return array + */ + public function getGroup(): array { + return $this->validGroups; + } + + /** + * @return array + */ + public function getTeams(): array { + return $this->validTeams; + } + + /** + * @return array + */ + public function getEmails(): array { + return $this->validEmails; + } + + /** + * @return array + */ + public function getPhoneNumbers(): array { + return $this->validPhoneNumbers; + } + + /** + * @return array<'users'|'federated_users'|'groups'|'emails'|'phones'|'teams', list> + */ + public function getInvalidList(): array { + $response = [ + 'users' => $this->invalidUsers, + 'federated_users' => $this->invalidFederatedUsers, + 'groups' => $this->invalidGroups, + 'teams' => $this->invalidTeams, + 'emails' => $this->invalidEmails, + 'phones' => $this->invalidPhoneNumbers, + ]; + return array_filter($response); + } + + public function hasValidInvitations(): bool { + return !empty($this->validUsers) + || !empty($this->validFederatedUsers) + || !empty($this->validGroups) + || !empty($this->validTeams) + || !empty($this->validEmails) + || !empty($this->validPhoneNumbers); + } + + public function hasInvalidInvitations(): bool { + return !empty($this->invalidUsers) + || !empty($this->invalidFederatedUsers) + || !empty($this->invalidGroups) + || !empty($this->invalidTeams) + || !empty($this->invalidEmails) + || !empty($this->invalidPhoneNumbers); + } +} diff --git a/lib/Model/InvitationMapper.php b/lib/Model/InvitationMapper.php new file mode 100644 index 0000000..82f8bef --- /dev/null +++ b/lib/Model/InvitationMapper.php @@ -0,0 +1,152 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class InvitationMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_invitations', Invitation::class); + } + + /** + * @throws DoesNotExistException + */ + public function getInvitationById(int $id): Invitation { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))); + + return $this->findEntity($qb); + } + + /** + * @throws DoesNotExistException + * @internal Does not check user relation + */ + public function getByRemoteServerAndAccessToken( + string $remoteServerUrl, + #[SensitiveParameter] + string $accessToken, + ): Invitation { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('remote_server_url', $qb->createNamedParameter($remoteServerUrl))) + ->andWhere($qb->expr()->eq('access_token', $qb->createNamedParameter($accessToken))); + + return $this->findEntity($qb); + } + + /** + * @throws DoesNotExistException + */ + public function getByRemoteAndAccessToken( + string $remoteServerUrl, + int $remoteAttendeeId, + #[SensitiveParameter] + string $accessToken, + ): Invitation { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('remote_server_url', $qb->createNamedParameter($remoteServerUrl))) + ->andWhere($qb->expr()->eq('remote_attendee_id', $qb->createNamedParameter($remoteAttendeeId, IQueryBuilder::PARAM_INT))) + ->andWhere($qb->expr()->eq('access_token', $qb->createNamedParameter($accessToken))); + + return $this->findEntity($qb); + } + + /** + * @param IUser $user + * @return list + */ + public function getInvitationsForUser(IUser $user): array { + $qb = $this->db->getQueryBuilder(); + + $qb->select('*') + ->from($this->getTableName()) + ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user->getUID()))); + + return $this->findEntities($qb); + } + + /** + * @psalm-param Invitation::STATE_*|null $state + */ + public function countInvitationsForUser(IUser $user, ?int $state = null): int { + $qb = $this->db->getQueryBuilder(); + + $qb->select($qb->func()->count('*')) + ->from($this->getTableName()) + ->where($qb->expr()->eq('user_id', $qb->createNamedParameter($user->getUID()))); + + if ($state !== null) { + $qb->andWhere($qb->expr()->eq('state', $qb->createNamedParameter($state))); + } + + $result = $qb->executeQuery(); + $count = (int)$result->fetchOne(); + $result->closeCursor(); + + return $count; + } + + /** + * @throws DoesNotExistException + */ + public function getInvitationForUserByLocalRoom(Room $room, string $userId, bool $caseInsensitive = false): Invitation { + $query = $this->db->getQueryBuilder(); + + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('local_room_id', $query->createNamedParameter($room->getId()))); + + if ($caseInsensitive) { + $query->andWhere($query->expr()->eq($query->func()->lower('user_id'), $query->createNamedParameter(strtolower($userId)))); + } else { + $query->andWhere($query->expr()->eq('user_id', $query->createNamedParameter($userId))); + } + return $this->findEntity($query); + } + + public function countInvitationsForLocalRoom(Room $room): int { + $qb = $this->db->getQueryBuilder(); + + $qb->select($qb->func()->count('*', 'num_invitations')) + ->from($this->getTableName()) + ->where($qb->expr()->eq('local_room_id', $qb->createNamedParameter($room->getId()))); + + $result = $qb->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + return (int)($row['num_invitations'] ?? 0); + } +} diff --git a/lib/Model/Message.php b/lib/Model/Message.php new file mode 100644 index 0000000..75e86de --- /dev/null +++ b/lib/Model/Message.php @@ -0,0 +1,243 @@ +room; + } + + public function getComment(): ?IComment { + return $this->comment; + } + + public function getL10n(): IL10N { + return $this->l; + } + + public function getParticipant(): ?Participant { + return $this->participant; + } + + /* + * Parsed message information + */ + + public function getMessageId(): int { + return $this->comment ? (int)$this->comment->getId() : $this->proxy->getRemoteMessageId(); + } + + public function getExpirationDateTime(): ?\DateTimeInterface { + return $this->comment ? $this->comment->getExpireDate() : $this->proxy->getExpirationDatetime(); + } + + public function setVisibility(bool $visible): void { + $this->visible = $visible; + } + + public function getVisibility(): bool { + return $this->visible; + } + + public function setMessage(string $message, array $parameters, string $rawMessage = ''): void { + $this->message = $message; + $this->parameters = $parameters; + $this->rawMessage = $rawMessage; + } + + public function getMessage(): string { + return $this->message; + } + + public function getMessageParameters(): array { + return $this->parameters; + } + + public function getMessageRaw(): string { + return $this->rawMessage; + } + + public function setMessageType(string $type): void { + $this->type = $type; + } + + public function getMessageType(): string { + return $this->type; + } + + public function setActor(string $type, string $id, string $displayName): void { + $this->actorType = $type; + $this->actorId = $id; + $this->actorDisplayName = $displayName; + } + + public function setLastEdit(string $type, string $id, string $displayName, int $timestamp): void { + $this->lastEditActorType = $type; + $this->lastEditActorId = $id; + $this->lastEditActorDisplayName = $displayName; + $this->lastEditTimestamp = $timestamp; + } + + public function getActorType(): string { + return $this->actorType; + } + + public function getActorId(): string { + return $this->actorId; + } + + public function getActorDisplayName(): string { + return $this->actorDisplayName; + } + + /** + * Specifies whether a message can be replied to + */ + public function isReplyable(): bool { + return $this->getMessageType() !== ChatManager::VERB_SYSTEM + && $this->getMessageType() !== ChatManager::VERB_COMMAND + && $this->getMessageType() !== ChatManager::VERB_MESSAGE_DELETED + && $this->getMessageType() !== ChatManager::VERB_REACTION + && $this->getMessageType() !== ChatManager::VERB_REACTION_DELETED + && \in_array($this->getActorType(), [ + Attendee::ACTOR_USERS, + Attendee::ACTOR_FEDERATED_USERS, + Attendee::ACTOR_GUESTS, + Attendee::ACTOR_EMAILS, + Attendee::ACTOR_BOTS, + ], true); + } + + /** + * @param string $format + * @psalm-param 'json'|'xml' $format + * @return TalkChatMessage + */ + public function toArray(string $format, ?Thread $thread): array { + $expireDate = $this->getComment()->getExpireDate(); + + $reactions = $this->getComment()->getReactions(); + if ($format === 'json' && empty($reactions)) { + // Cheating here to make sure the reactions array is always a + // JSON object on the API, even when there is no reaction at all. + $reactions = new \stdClass(); + } + + $id = (int)$this->getComment()->getId(); + $threadId = (int)$this->getComment()->getTopmostParentId() ?: $id; + + $data = [ + 'id' => $id, + 'token' => $this->getRoom()->getToken(), + 'actorType' => $this->getActorType(), + 'actorId' => $this->getActorId(), + 'actorDisplayName' => $this->getActorDisplayName(), + 'timestamp' => $this->getComment()->getCreationDateTime()->getTimestamp(), + 'message' => $this->getMessage(), + 'messageParameters' => $this->getMessageParameters(), + 'systemMessage' => $this->getMessageType() === ChatManager::VERB_SYSTEM ? $this->getMessageRaw() : '', + 'messageType' => $this->getMessageType(), + 'isReplyable' => $this->isReplyable(), + 'referenceId' => (string)$this->getComment()->getReferenceId(), + 'reactions' => $reactions, + 'expirationTimestamp' => $expireDate ? $expireDate->getTimestamp() : 0, + 'markdown' => $this->getMessageType() === ChatManager::VERB_SYSTEM ? false : true, + 'threadId' => $threadId, + ]; + if ($thread !== null) { + $data['isThread'] = true; + $data['threadTitle'] = $thread->getName(); + $data['threadReplies'] = $thread->getNumReplies(); + } + + if ($this->lastEditActorType && $this->lastEditActorId && $this->lastEditTimestamp) { + $data['lastEditActorType'] = $this->lastEditActorType; + $data['lastEditActorId'] = $this->lastEditActorId; + $data['lastEditActorDisplayName'] = $this->lastEditActorDisplayName; + $data['lastEditTimestamp'] = $this->lastEditTimestamp; + } + + if ($this->getMessageType() === ChatManager::VERB_MESSAGE_DELETED) { + $data['deleted'] = true; + } + + $metaData = $this->getComment()->getMetaData() ?? []; + if (!empty($metaData[self::METADATA_SILENT])) { + $data[self::METADATA_SILENT] = true; + } + + return $data; + } +} diff --git a/lib/Model/PhoneNumber.php b/lib/Model/PhoneNumber.php new file mode 100644 index 0000000..076ac32 --- /dev/null +++ b/lib/Model/PhoneNumber.php @@ -0,0 +1,29 @@ + getId() + * @method void setPhoneNumber(string $phoneNumber) + * @method string getPhoneNumber() + * @method void setActorId(string $actorId) + * @method string getActorId() + */ +class PhoneNumber extends Entity { + protected string $phoneNumber = ''; + protected string $actorId = ''; + + public function __construct() { + $this->addType('phoneNumber', Types::STRING); + $this->addType('actorId', Types::STRING); + } +} diff --git a/lib/Model/PhoneNumberMapper.php b/lib/Model/PhoneNumberMapper.php new file mode 100644 index 0000000..7d69e81 --- /dev/null +++ b/lib/Model/PhoneNumberMapper.php @@ -0,0 +1,84 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class PhoneNumberMapper extends QBMapper { + use TTransactional; + + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_phone_numbers', PhoneNumber::class); + } + + /** + * @throws DoesNotExistException + */ + public function findByPhoneNumber(string $phoneNumber): PhoneNumber { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('phone_number', $query->createNamedParameter($phoneNumber, IQueryBuilder::PARAM_STR))) + ->orderBy('id', 'ASC'); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function findByUser(string $userId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('actor_id', $query->createNamedParameter($userId, IQueryBuilder::PARAM_STR))); + + return $this->findEntities($query); + } + + /** + * @return list + */ + public function findByPhoneNumbers(array $phoneNumbers): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->in('phone_number', $query->createNamedParameter($phoneNumbers, IQueryBuilder::PARAM_STR_ARRAY))); + + return $this->findEntities($query); + } + + public function deleteByPhoneNumber(string $phoneNumber): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('phone_number', $query->createNamedParameter($phoneNumber, IQueryBuilder::PARAM_STR))); + + $query->executeStatement(); + } + + public function deleteByUser(string $userId): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('actor_id', $query->createNamedParameter($userId, IQueryBuilder::PARAM_STR))); + + $query->executeStatement(); + } +} diff --git a/lib/Model/Poll.php b/lib/Model/Poll.php new file mode 100644 index 0000000..09dabab --- /dev/null +++ b/lib/Model/Poll.php @@ -0,0 +1,176 @@ + getId() + * @method void setRoomId(int $roomId) + * @method int getRoomId() + * @psalm-method int<1, max> getRoomId() + * @method string getQuestion() + * @psalm-method non-empty-string getQuestion() + * @method string getOptions() + * @method void setVotes(string $votes) + * @method string getVotes() + * @method void setNumVoters(int $numVoters) + * @method int getNumVoters() + * @psalm-method int<0, max> getNumVoters() + * @method void setActorType(string $actorType) + * @method string getActorType() + * @psalm-method TalkActorTypes getActorType() + * @method void setActorId(string $actorId) + * @method string getActorId() + * @psalm-method non-empty-string getActorId() + * @method void setDisplayName(string $displayName) + * @method string getDisplayName() + * @method void setStatus(int $status) + * @method int getStatus() + * @psalm-method self::STATUS_* getStatus() + * @method void setResultMode(int $resultMode) + * @method int getResultMode() + * @psalm-method self::MODE_* getResultMode() + * @method void setMaxVotes(int $maxVotes) + * @method int getMaxVotes() + * @psalm-method int<0, max> getMaxVotes() + * + * @psalm-import-type TalkActorTypes from ResponseDefinitions + * @psalm-import-type TalkPoll from ResponseDefinitions + * @psalm-import-type TalkPollDraft from ResponseDefinitions + */ +class Poll extends Entity { + public const STATUS_OPEN = 0; + public const STATUS_CLOSED = 1; + public const STATUS_DRAFT = 2; + public const MODE_PUBLIC = 0; + public const MODE_HIDDEN = 1; + public const MAX_VOTES_UNLIMITED = 0; + + protected int $roomId = 0; + protected string $question = ''; + protected string $options = ''; + protected string $votes = ''; + protected int $numVoters = 0; + protected string $actorType = ''; + protected string $actorId = ''; + protected ?string $displayName = null; + protected int $status = self::STATUS_OPEN; + protected int $resultMode = self::MODE_PUBLIC; + protected int $maxVotes = self::MAX_VOTES_UNLIMITED; + + public function __construct() { + $this->addType('roomId', Types::BIGINT); + $this->addType('question', Types::TEXT); + $this->addType('options', Types::TEXT); + $this->addType('votes', Types::TEXT); + $this->addType('numVoters', Types::BIGINT); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('displayName', Types::STRING); + $this->addType('status', Types::SMALLINT); + $this->addType('resultMode', Types::SMALLINT); + $this->addType('maxVotes', Types::INTEGER); + } + + /** + * @return TalkPoll + */ + public function renderAsPoll(): array { + $data = $this->renderAsDraft(); + $votes = json_decode($this->getVotes(), true, 512, JSON_THROW_ON_ERROR); + + // Because PHP is turning arrays with sequent numeric keys "{"0":x,"1":y,"2":z}" into "[x,y,z]" + // when json_encode() is used we have to prefix the keys with a string, + // to prevent breaking in the mobile apps. + $data['votes'] = []; + foreach ($votes as $option => $count) { + $data['votes']['option-' . $option] = $count; + } + $data['numVoters'] = $this->getNumVoters(); + + return $data; + } + + /** + * @return TalkPollDraft + */ + public function renderAsDraft(): array { + return [ + 'id' => $this->getId(), + // The room id is not needed on the API level but only internally for optimising database queries + // 'roomId' => $this->getRoomId(), + 'question' => $this->getQuestion(), + 'options' => json_decode($this->getOptions(), true, 512, JSON_THROW_ON_ERROR), + 'actorType' => $this->getActorType(), + 'actorId' => $this->getActorId(), + 'actorDisplayName' => $this->getDisplayName(), + 'status' => $this->getStatus(), + 'resultMode' => $this->getResultMode(), + 'maxVotes' => $this->getMaxVotes(), + ]; + } + + public function isDraft(): bool { + return $this->getStatus() === self::STATUS_DRAFT; + } + + /** + * @param array $options + * @return void + * @throws PollPropertyException + */ + public function setOptions(array $options): void { + try { + $jsonOptions = json_encode($options, JSON_THROW_ON_ERROR, 1); + } catch (\Exception) { + throw new PollPropertyException(PollPropertyException::REASON_OPTIONS); + } + + $validOptions = []; + foreach ($options as $option) { + if (!is_string($option)) { + throw new PollPropertyException(PollPropertyException::REASON_OPTIONS); + } + + $option = trim($option); + if ($option !== '') { + $validOptions[] = $option; + } + } + + if (count($validOptions) < 2) { + throw new PollPropertyException(PollPropertyException::REASON_OPTIONS); + } + + if (strlen($jsonOptions) > 60_000) { + throw new PollPropertyException(PollPropertyException::REASON_OPTIONS); + } + + $this->setter('options', [$jsonOptions]); + } + + /** + * @param string $question + * @return void + * @throws PollPropertyException + */ + public function setQuestion(string $question): void { + $question = trim($question); + if ($question === '' || strlen($question) > 32_000) { + throw new PollPropertyException(PollPropertyException::REASON_QUESTION); + } + + $this->setter('question', [$question]); + } +} diff --git a/lib/Model/PollMapper.php b/lib/Model/PollMapper.php new file mode 100644 index 0000000..9d02101 --- /dev/null +++ b/lib/Model/PollMapper.php @@ -0,0 +1,75 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class PollMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_polls', Poll::class); + } + + /** + * @return list + */ + public function getDraftsByRoomId(int $roomId): array { + $query = $this->db->getQueryBuilder(); + + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('status', $query->createNamedParameter(Poll::STATUS_DRAFT, IQueryBuilder::PARAM_INT))) + ->orderBy('id', 'ASC'); + + return $this->findEntities($query); + } + + /** + * @throws DoesNotExistException + * @throws MultipleObjectsReturnedException + */ + public function getPollByRoomIdAndPollId(int $roomId, int $pollId): Poll { + $query = $this->db->getQueryBuilder(); + + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + public function deleteByRoomId(int $roomId): void { + $query = $this->db->getQueryBuilder(); + + $query->delete($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + $query->executeStatement(); + } + + public function deleteByPollId(int $pollId): void { + $query = $this->db->getQueryBuilder(); + + $query->delete($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))); + + $query->executeStatement(); + } +} diff --git a/lib/Model/ProxyCacheMessage.php b/lib/Model/ProxyCacheMessage.php new file mode 100644 index 0000000..9caf752 --- /dev/null +++ b/lib/Model/ProxyCacheMessage.php @@ -0,0 +1,116 @@ +addType('localToken', Types::STRING); + $this->addType('remoteServerUrl', Types::STRING); + $this->addType('remoteToken', Types::STRING); + $this->addType('remoteMessageId', Types::BIGINT); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('actorDisplayName', Types::STRING); + $this->addType('messageType', Types::STRING); + $this->addType('systemMessage', Types::STRING); + $this->addType('expirationDatetime', Types::DATETIME); + $this->addType('message', Types::TEXT); + $this->addType('messageParameters', Types::TEXT); + $this->addType('creationDatetime', Types::DATETIME); + $this->addType('metaData', Types::TEXT); + } + + public function getParsedMessageParameters(): array { + return json_decode($this->getMessageParameters() ?? '[]', true); + } + + public function getParsedMetaData(): array { + return json_decode($this->getMetaData() ?? '[]', true); + } + + /** + * @return TalkChatProxyMessage + */ + #[\Override] + public function jsonSerialize(): array { + $expirationTimestamp = 0; + if ($this->getExpirationDatetime()) { + $expirationTimestamp = $this->getExpirationDatetime()->getTimestamp(); + } + + return [ + 'actorType' => $this->getActorType(), + 'actorId' => $this->getActorId(), + 'actorDisplayName' => $this->getActorDisplayName() ?? '', + 'timestamp' => $this->getCreationDatetime()->getTimestamp(), + 'expirationTimestamp' => $expirationTimestamp, + 'messageType' => $this->getMessageType(), + 'systemMessage' => $this->getSystemMessage() ?? '', + 'message' => $this->getMessage() ?? '', + 'messageParameters' => $this->getParsedMessageParameters(), + ]; + } +} diff --git a/lib/Model/ProxyCacheMessageMapper.php b/lib/Model/ProxyCacheMessageMapper.php new file mode 100644 index 0000000..e60dc13 --- /dev/null +++ b/lib/Model/ProxyCacheMessageMapper.php @@ -0,0 +1,72 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class ProxyCacheMessageMapper extends QBMapper { + use TTransactional; + + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_proxy_messages', ProxyCacheMessage::class); + } + + /** + * @throws DoesNotExistException + */ + public function findById(Room $chat, int $proxyId): ProxyCacheMessage { + if (!$chat->isFederatedConversation()) { + throw new InvalidRoomException('Can not call ProxyCacheMessageMapper::findById() with a non-federated chat.'); + } + + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('id', $query->createNamedParameter($proxyId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + /** + * @throws DoesNotExistException + */ + public function findByRemote(string $remoteServerUrl, string $remoteToken, int $remoteMessageId): ProxyCacheMessage { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('remote_server_url', $query->createNamedParameter($remoteServerUrl, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('remote_token', $query->createNamedParameter($remoteToken, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('remote_message_id', $query->createNamedParameter($remoteMessageId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + public function deleteExpiredMessages(\DateTimeInterface $dateTime): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->isNotNull('expiration_datetime')) + ->andWhere($query->expr()->lte('expiration_datetime', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE))); + + return $query->executeStatement(); + } +} diff --git a/lib/Model/Reminder.php b/lib/Model/Reminder.php new file mode 100644 index 0000000..ea3fa5e --- /dev/null +++ b/lib/Model/Reminder.php @@ -0,0 +1,54 @@ +addType('userId', Types::STRING); + $this->addType('token', Types::STRING); + $this->addType('messageId', Types::BIGINT); + $this->addType('dateTime', Types::DATETIME); + } + + /** + * @return TalkChatReminder + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'userId' => $this->getUserId(), + 'token' => $this->getToken(), + 'messageId' => $this->getMessageId(), + 'timestamp' => $this->getDateTime()->getTimestamp(), + ]; + } +} diff --git a/lib/Model/ReminderMapper.php b/lib/Model/ReminderMapper.php new file mode 100644 index 0000000..4db2b68 --- /dev/null +++ b/lib/Model/ReminderMapper.php @@ -0,0 +1,76 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class ReminderMapper extends QBMapper { + use TTransactional; + + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_reminders', Reminder::class); + } + + public function findForUser(string $userId, int $limit): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('user_id', $query->createNamedParameter($userId, IQueryBuilder::PARAM_STR))) + ->orderBy('date_time', 'ASC') + ->setMaxResults($limit); + + return $this->findEntities($query); + } + + /** + * @throws DoesNotExistException + */ + public function findForUserAndMessage(string $userId, string $token, int $messageId): Reminder { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('user_id', $query->createNamedParameter($userId, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('token', $query->createNamedParameter($token, IQueryBuilder::PARAM_STR))) + ->andWhere($query->expr()->eq('message_id', $query->createNamedParameter($messageId, IQueryBuilder::PARAM_INT))); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function findRemindersToExecute(\DateTime $dateTime): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->lt('date_time', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE), IQueryBuilder::PARAM_DATE)); + + return $this->findEntities($query); + } + + public function deleteExecutedReminders(\DateTime $dateTime): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->lt('date_time', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE), IQueryBuilder::PARAM_DATE)); + + $query->executeStatement(); + } +} diff --git a/lib/Model/RetryNotification.php b/lib/Model/RetryNotification.php new file mode 100644 index 0000000..2e2eab0 --- /dev/null +++ b/lib/Model/RetryNotification.php @@ -0,0 +1,50 @@ +addType('remoteServer', Types::STRING); + $this->addType('numAttempts', Types::INTEGER); + $this->addType('nextRetry', Types::DATETIME); + $this->addType('notificationType', Types::STRING); + $this->addType('resourceType', Types::STRING); + $this->addType('providerId', Types::STRING); + $this->addType('notification', Types::TEXT); + } +} diff --git a/lib/Model/RetryNotificationMapper.php b/lib/Model/RetryNotificationMapper.php new file mode 100644 index 0000000..2a90436 --- /dev/null +++ b/lib/Model/RetryNotificationMapper.php @@ -0,0 +1,52 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class RetryNotificationMapper extends QBMapper { + public function __construct( + IDBConnection $db, + ) { + parent::__construct($db, 'talk_retry_ocm', RetryNotification::class); + } + + /** + * @return list + */ + public function getAllDue(\DateTimeInterface $dueDateTime, ?int $limit = 500): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->lte('next_retry', $query->createNamedParameter($dueDateTime, IQueryBuilder::PARAM_DATE), IQueryBuilder::PARAM_DATE)); + + if ($limit !== null) { + $query->setMaxResults($limit) + ->orderBy('next_retry', 'ASC') + ->addOrderBy('id', 'ASC'); + } + + return $this->findEntities($query); + } + + public function deleteByProviderId($providerId): void { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq('provider_id', $query->createNamedParameter($providerId))); + $query->executeStatement(); + } +} diff --git a/lib/Model/SelectHelper.php b/lib/Model/SelectHelper.php new file mode 100644 index 0000000..304c614 --- /dev/null +++ b/lib/Model/SelectHelper.php @@ -0,0 +1,115 @@ +addSelect($alias . 'type') + ->addSelect($alias . 'read_only') + ->addSelect($alias . 'lobby_state') + ->addSelect($alias . 'sip_enabled') + ->addSelect($alias . 'assigned_hpb') + ->addSelect($alias . 'token') + ->addSelect($alias . 'name') + ->addSelect($alias . 'description') + ->addSelect($alias . 'password') + ->addSelect($alias . 'avatar') + ->addSelect($alias . 'active_since') + ->addSelect($alias . 'default_permissions') + ->addSelect($alias . 'call_permissions') + ->addSelect($alias . 'call_flag') + ->addSelect($alias . 'last_activity') + ->addSelect($alias . 'last_message') + ->addSelect($alias . 'lobby_timer') + ->addSelect($alias . 'object_type') + ->addSelect($alias . 'object_id') + ->addSelect($alias . 'listable') + ->addSelect($alias . 'message_expiration') + ->addSelect($alias . 'remote_server') + ->addSelect($alias . 'remote_token') + ->addSelect($alias . 'breakout_room_mode') + ->addSelect($alias . 'breakout_room_status') + ->addSelect($alias . 'call_recording') + ->addSelect($alias . 'recording_consent') + ->addSelect($alias . 'has_federation') + ->addSelect($alias . 'mention_permissions') + ->addSelect($alias . 'transcription_language') + ->selectAlias($alias . 'id', 'r_id'); + } + + public function selectAttendeesTable(IQueryBuilder $query, string $alias = 'a'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->addSelect($alias . 'room_id') + ->addSelect($alias . 'actor_type') + ->addSelect($alias . 'actor_id') + ->addSelect($alias . 'display_name') + ->addSelect($alias . 'pin') + ->addSelect($alias . 'participant_type') + ->addSelect($alias . 'favorite') + ->addSelect($alias . 'notification_level') + ->addSelect($alias . 'notification_calls') + ->addSelect($alias . 'last_joined_call') + ->addSelect($alias . 'last_read_message') + ->addSelect($alias . 'last_mention_message') + ->addSelect($alias . 'last_mention_direct') + ->addSelect($alias . 'read_privacy') + ->addSelect($alias . 'permissions') + ->addSelect($alias . 'access_token') + ->addSelect($alias . 'remote_id') + ->addSelect($alias . 'invited_cloud_id') + ->addSelect($alias . 'phone_number') + ->addSelect($alias . 'call_id') + ->addSelect($alias . 'state') + ->addSelect($alias . 'unread_messages') + ->addSelect($alias . 'last_attendee_activity') + ->addSelect($alias . 'archived') + ->addSelect($alias . 'important') + ->addSelect($alias . 'sensitive') + ->addSelect($alias . 'has_unread_threads') + ->addSelect($alias . 'has_unread_thread_mentions') + ->addSelect($alias . 'has_unread_thread_directs') + ->selectAlias($alias . 'id', 'a_id'); + } + + public function selectSessionsTable(IQueryBuilder $query, string $alias = 's'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->addSelect($alias . 'attendee_id') + ->addSelect($alias . 'session_id') + ->addSelect($alias . 'in_call') + ->addSelect($alias . 'last_ping') + ->selectAlias($alias . 'state', 's_state') + ->selectAlias($alias . 'id', 's_id'); + } + + public function selectSessionsTableMax(IQueryBuilder $query, string $alias = 's'): void { + if ($alias !== '') { + $alias .= '.'; + } + + $query->selectAlias($query->func()->max($alias . 'attendee_id'), 'attendee_id') + ->selectAlias($query->func()->max($alias . 'session_id'), 'session_id') + // BIT_OR would be better, but SQLite does not support something like it. + ->selectAlias($query->func()->max($alias . 'in_call'), 'in_call') + ->selectAlias($query->func()->max($alias . 'last_ping'), 'last_ping') + ->selectAlias($query->func()->max($alias . 'state'), 's_state') + ->selectAlias($query->func()->max($alias . 'id'), 's_id'); + } +} diff --git a/lib/Model/Session.php b/lib/Model/Session.php new file mode 100644 index 0000000..4a7a66b --- /dev/null +++ b/lib/Model/Session.php @@ -0,0 +1,72 @@ +addType('attendeeId', Types::BIGINT); + $this->addType('sessionId', Types::STRING); + $this->addType('inCall', Types::INTEGER); + $this->addType('lastPing', Types::INTEGER); + $this->addType('state', Types::SMALLINT); + } + + /** + * @return array + */ + public function asArray(): array { + return [ + 'id' => $this->getId(), + 'attendee_id' => $this->getAttendeeId(), + 'session_id' => $this->getSessionId(), + 'in_call' => $this->getInCall(), + 'last_ping' => $this->getLastPing(), + ]; + } +} diff --git a/lib/Model/SessionMapper.php b/lib/Model/SessionMapper.php new file mode 100644 index 0000000..78c445c --- /dev/null +++ b/lib/Model/SessionMapper.php @@ -0,0 +1,96 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class SessionMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_sessions', Session::class); + } + + /** + * @throws DoesNotExistException + */ + public function findBySessionId(string $sessionId): Session { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('session_id', $query->createNamedParameter($sessionId))); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function findByAttendeeId(int $attendeeId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('attendee_id', $query->createNamedParameter($attendeeId))); + + return $this->findEntities($query); + } + + /** + * @return int Number of deleted entities + */ + public function deleteByAttendeeId(int $attendeeId): int { + $delete = $this->db->getQueryBuilder(); + $delete->delete($this->getTableName()) + ->where($delete->expr()->eq('attendee_id', $delete->createNamedParameter($attendeeId, IQueryBuilder::PARAM_INT))); + + return $delete->executeStatement(); + } + + /** + * @param int[] $ids + * @return int Number of deleted entities + */ + public function deleteByIds(array $ids): int { + $delete = $this->db->getQueryBuilder(); + $delete->delete($this->getTableName()) + ->where($delete->expr()->in('id', $delete->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))); + + return $delete->executeStatement(); + } + + /** + * @param string[] $sessionIds + */ + public function resetInCallByIds(array $sessionIds): void { + $update = $this->db->getQueryBuilder(); + $update->update($this->getTableName()) + ->set('in_call', $update->createNamedParameter(Participant::FLAG_DISCONNECTED, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->in('session_id', $update->createNamedParameter($sessionIds, IQueryBuilder::PARAM_STR_ARRAY))); + $update->executeStatement(); + } + + public function createSessionFromRow(array $row): Session { + return $this->mapRowToEntity([ + 'id' => $row['s_id'], + 'session_id' => $row['session_id'], + 'attendee_id' => (int)$row['a_id'], + 'in_call' => (int)$row['in_call'], + 'last_ping' => (int)$row['last_ping'], + 'state' => (int)$row['s_state'], + ]); + } +} diff --git a/lib/Model/Thread.php b/lib/Model/Thread.php new file mode 100644 index 0000000..b2822c8 --- /dev/null +++ b/lib/Model/Thread.php @@ -0,0 +1,113 @@ +addType('roomId', Types::BIGINT); + $this->addType('lastMessageId', Types::BIGINT); + $this->addType('numReplies', Types::BIGINT); + $this->addType('lastActivity', Types::DATETIME); + $this->addType('name', Types::STRING); + } + + public static function createFromRow(array $row): Thread { + $thread = new Thread(); + $thread->setId((int)$row['t_id']); + $thread->setRoomId((int)$row['room_id']); + $thread->setLastMessageId((int)$row['last_message_id']); + $thread->setNumReplies((int)$row['num_replies']); + $thread->setLastActivity(new \DateTime($row['last_activity'])); + $thread->setName($row['name']); + return $thread; + } + + /** + * @param string $json + * @return Thread + * @throws \JsonException + */ + public static function fromJson(string $json): Thread { + $row = json_decode($json, true, flags: JSON_THROW_ON_ERROR); + $thread = new Thread(); + $thread->setId((int)$row['id']); + $thread->setRoomId((int)$row['room_id']); + $thread->setLastMessageId((int)$row['last_message_id']); + $thread->setNumReplies((int)$row['num_replies']); + $thread->setLastActivity(new \DateTime('@' . $row['last_activity'])); + $thread->setName($row['name']); + return $thread; + } + + /** + * @return string + * @throws \JsonException + */ + public function toJson(): string { + return json_encode([ + 'id' => $this->getId(), + 'room_id' => $this->getRoomId(), + 'last_message_id' => $this->getLastMessageId(), + 'num_replies' => $this->getNumReplies(), + 'last_activity' => $this->getLastActivity()?->getTimestamp() ?? 0, + 'name' => $this->getName(), + ], flags: JSON_THROW_ON_ERROR); + } + + public function getName(): string { + if ($this->name !== '') { + return $this->name; + } + + // FIXME temporary workaround against empty titles + return 'Thread #' . $this->getId(); + } + + /** + * @return TalkThread + */ + public function toArray(Room $room): array { + return [ + 'id' => max(1, $this->getId()), + // 'roomId' => max(1, $this->getRoomId()), + 'roomToken' => $room->getToken(), + 'lastMessageId' => max(0, $this->getLastMessageId()), + 'numReplies' => max(0, $this->getNumReplies()), + 'lastActivity' => max(0, $this->getLastActivity()?->getTimestamp() ?? 0), + 'title' => $this->getName(), + ]; + } +} diff --git a/lib/Model/ThreadAttendee.php b/lib/Model/ThreadAttendee.php new file mode 100644 index 0000000..a47b62b --- /dev/null +++ b/lib/Model/ThreadAttendee.php @@ -0,0 +1,80 @@ +addType('roomId', Types::BIGINT); + $this->addType('threadId', Types::BIGINT); + $this->addType('attendeeId', Types::BIGINT); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('notificationLevel', Types::INTEGER); + } + + public static function createFromRow(array $row): ThreadAttendee { + $attendee = new ThreadAttendee(); + $attendee->setRoomId((int)$row['room_id']); + $attendee->setThreadId((int)$row['thread_id']); + $attendee->setAttendeeId((int)$row['attendee_id']); + $attendee->setNotificationLevel((int)$row['notification_level']); + $attendee->setActorType($row['actor_type']); + $attendee->setActorId($row['actor_id']); + return $attendee; + } + + public static function createFromParticipant(int $threadId, Participant $participant): ThreadAttendee { + $attendee = new ThreadAttendee(); + $attendee->setRoomId($participant->getRoom()->getId()); + $attendee->setThreadId($threadId); + $attendee->setAttendeeId($participant->getAttendee()->getId()); + $attendee->setNotificationLevel(Participant::NOTIFY_DEFAULT); + $attendee->setActorType($participant->getAttendee()->getActorType()); + $attendee->setActorId($participant->getAttendee()->getActorId()); + return $attendee; + } + + /** + * @return TalkThreadAttendee + */ + #[\Override] + public function jsonSerialize(): array { + return [ + 'notificationLevel' => min(3, max(0, $this->getNotificationLevel())), + ]; + } +} diff --git a/lib/Model/ThreadAttendeeMapper.php b/lib/Model/ThreadAttendeeMapper.php new file mode 100644 index 0000000..8c8e945 --- /dev/null +++ b/lib/Model/ThreadAttendeeMapper.php @@ -0,0 +1,118 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class ThreadAttendeeMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_thread_attendees', ThreadAttendee::class); + } + + public function deleteByRoomId(int $roomId): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )); + + return $query->executeStatement(); + } + + /** + * @param list $threadIds + * @return list + */ + public function findAttendeeByThreadIds(string $actorType, string $actorId, int $roomId, array $threadIds): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq( + 'actor_type', + $query->createNamedParameter($actorType), + )) + ->andWhere($query->expr()->eq( + 'actor_id', + $query->createNamedParameter($actorId), + )) + ->andWhere($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId), + )) + ->andWhere($query->expr()->in( + 'thread_id', + $query->createNamedParameter($threadIds, IQueryBuilder::PARAM_INT_ARRAY), + IQueryBuilder::PARAM_INT_ARRAY, + )); + + return $this->findEntities($query); + } + + /** + * @throws DoesNotExistException if the item does not exist + */ + public function findAttendeeByThreadId(string $actorType, string $actorId, int $roomId, int $threadId): ThreadAttendee { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq( + 'actor_type', + $query->createNamedParameter($actorType), + )) + ->andWhere($query->expr()->eq( + 'actor_id', + $query->createNamedParameter($actorId), + )) + ->andWhere($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId), + )) + ->andWhere($query->expr()->eq( + 'thread_id', + $query->createNamedParameter($threadId), + )); + + return $this->findEntity($query); + } + + /** + * @return list + */ + public function findAttendeesForNotification(int $roomId, int $threadId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + )) + ->andWhere($query->expr()->eq( + 'thread_id', + $query->createNamedParameter($threadId, IQueryBuilder::PARAM_INT), + )) + ->andWhere($query->expr()->neq( + 'notification_level', + $query->createNamedParameter(Participant::NOTIFY_DEFAULT, IQueryBuilder::PARAM_INT), + )); + + return $this->findEntities($query); + } +} diff --git a/lib/Model/ThreadMapper.php b/lib/Model/ThreadMapper.php new file mode 100644 index 0000000..aa362f1 --- /dev/null +++ b/lib/Model/ThreadMapper.php @@ -0,0 +1,126 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class ThreadMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_threads', Thread::class); + } + + /** + * @param non-negative-int $roomId + * @param non-negative-int $threadId + * @throws DoesNotExistException + */ + public function findById(int $roomId, int $threadId): Thread { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq( + 'id', + $query->createNamedParameter($threadId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )) + ->andWhere($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )); + + return $this->findEntity($query); + } + + /** + * @param non-negative-int $roomId + * @param list $threadIds + * @return list + */ + public function findByIds(int $roomId, array $threadIds): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->in( + 'id', + $query->createNamedParameter($threadIds, IQueryBuilder::PARAM_INT_ARRAY), + IQueryBuilder::PARAM_INT, + )) + ->andWhere($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )); + + return $this->findEntities($query); + } + + /** + * @param list $threadIds + * @return list + */ + public function getForIds(array $threadIds): array { + $threads = []; + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()); + foreach (array_chunk($threadIds, 1000) as $ids) { + $query->where($query->expr()->in( + 'id', + $query->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY), + IQueryBuilder::PARAM_INT, + )); + $threads[] = $this->findEntities($query); + } + + + return array_merge(...$threads); + } + + + /** + * @param int<1, 50> $limit + * @return list + */ + public function getRecentByRoomId(int $roomId, int $limit): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )) + ->orderBy('last_activity', 'DESC') + ->setMaxResults($limit); + + return $this->findEntities($query); + } + + public function deleteByRoomId(int $roomId): int { + $query = $this->db->getQueryBuilder(); + $query->delete($this->getTableName()) + ->where($query->expr()->eq( + 'room_id', + $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT), + IQueryBuilder::PARAM_INT, + )); + + return $query->executeStatement(); + } +} diff --git a/lib/Model/Vote.php b/lib/Model/Vote.php new file mode 100644 index 0000000..7398d68 --- /dev/null +++ b/lib/Model/Vote.php @@ -0,0 +1,64 @@ +addType('pollId', Types::BIGINT); + $this->addType('roomId', Types::BIGINT); + $this->addType('actorType', Types::STRING); + $this->addType('actorId', Types::STRING); + $this->addType('displayName', Types::STRING); + $this->addType('optionId', Types::INTEGER); + } + + /** + * @return TalkPollVote + */ + public function asArray(): array { + return [ + // The ids are not needed on the API level but only internally for optimising database queries + // 'id' => $this->getId(), + // 'pollId' => $this->getPollId(), + // 'roomId' => $this->getRoomId(), + 'actorType' => $this->getActorType(), + 'actorId' => $this->getActorId(), + 'actorDisplayName' => $this->getDisplayName(), + 'optionId' => $this->getOptionId(), + ]; + } +} diff --git a/lib/Model/VoteMapper.php b/lib/Model/VoteMapper.php new file mode 100644 index 0000000..08d0709 --- /dev/null +++ b/lib/Model/VoteMapper.php @@ -0,0 +1,80 @@ + findEntities(IQueryBuilder $query) + * @template-extends QBMapper + */ +class VoteMapper extends QBMapper { + public function __construct(IDBConnection $db) { + parent::__construct($db, 'talk_poll_votes', Vote::class); + } + + /** + * @return list + */ + public function findByPollId(int $pollId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('poll_id', $query->createNamedParameter($pollId))); + + return $this->findEntities($query); + } + + /** + * @return list + */ + public function findByPollIdForActor(int $pollId, string $actorType, string $actorId): array { + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from($this->getTableName()) + ->where($query->expr()->eq('poll_id', $query->createNamedParameter($pollId))) + ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))); + + return $this->findEntities($query); + } + + public function deleteByRoomId(int $roomId): void { + $query = $this->db->getQueryBuilder(); + + $query->delete($this->getTableName()) + ->where($query->expr()->eq('room_id', $query->createNamedParameter($roomId, IQueryBuilder::PARAM_INT))); + + $query->executeStatement(); + } + + public function deleteByPollId(int $pollId): void { + $query = $this->db->getQueryBuilder(); + + $query->delete($this->getTableName()) + ->where($query->expr()->eq('poll_id', $query->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))); + + $query->executeStatement(); + } + + public function deleteVotesByActor(int $pollId, string $actorType, string $actorId): void { + $query = $this->db->getQueryBuilder(); + + $query->delete($this->getTableName()) + ->where($query->expr()->eq('poll_id', $query->createNamedParameter($pollId))) + ->andWhere($query->expr()->eq('actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('actor_id', $query->createNamedParameter($actorId))); + + $query->executeStatement(); + } +} diff --git a/lib/Notification/FederationChatNotifier.php b/lib/Notification/FederationChatNotifier.php new file mode 100644 index 0000000..2db7077 --- /dev/null +++ b/lib/Notification/FederationChatNotifier.php @@ -0,0 +1,177 @@ +getAttendee()->getActorType() === $inboundNotification['messageData']['actorType'] + && $participant->getAttendee()->getActorId() === $inboundNotification['messageData']['actorId']) { + return; + } + + /** @var array{silent?: bool, last_edited_time?: int, last_edited_by_type?: string, last_edited_by_id?: string, replyToActorType?: string, replyToActorId?: string, thread_id?: int} $metaData */ + $metaData = json_decode($inboundNotification['messageData']['metaData'] ?? '', true, flags: JSON_THROW_ON_ERROR); + + if (isset($metaData[Message::METADATA_SILENT])) { + // Silent message, skip notification handling + return; + } + + $threadId = null; + if (isset($metaData[Message::METADATA_THREAD_ID])) { + $threadId = (int)$metaData[Message::METADATA_THREAD_ID]; + } + + if ($participant->getSession() instanceof Session && $participant->getSession()->getState() === Session::STATE_ACTIVE) { + // User has an active session + return; + } + + + $notificationLevel = $participant->getAttendee()->getNotificationLevel(); + if ($threadId !== null) { + $threadAttendees = $this->threadService->findAttendeeByThreadIds($participant->getAttendee(), [$threadId]); + $threadAttendee = $threadAttendees[$threadId] ?? null; + + if ($threadAttendee !== null + && $threadAttendee->getNotificationLevel() !== Participant::NOTIFY_DEFAULT) { + $notificationLevel = $threadAttendee->getNotificationLevel(); + } + } + + // Also notify default participants in one-to-one chats or when the admin default is "always" + $defaultLevel = $this->appConfig->getAppValueInt('default_group_notification', Participant::NOTIFY_MENTION); + if ($notificationLevel === Participant::NOTIFY_MENTION + || ($defaultLevel !== Participant::NOTIFY_NEVER && $notificationLevel === Participant::NOTIFY_DEFAULT)) { + if ($this->isRepliedTo($room, $participant, $metaData)) { + $notification = $this->createNotification($room, $message, 'reply', threadId: $threadId); + $notification->setUser($participant->getAttendee()->getActorId()); + $this->notificationManager->notify($notification); + } elseif ($this->isMentioned($participant, $message)) { + $notification = $this->createNotification($room, $message, 'mention', threadId: $threadId); + $notification->setUser($participant->getAttendee()->getActorId()); + $this->notificationManager->notify($notification); + } elseif ($this->isMentionedAll($room, $message)) { + $notification = $this->createNotification($room, $message, 'mention_all', threadId: $threadId); + $notification->setUser($participant->getAttendee()->getActorId()); + $this->notificationManager->notify($notification); + } + } elseif ($participant->getAttendee()->getNotificationLevel() === Participant::NOTIFY_ALWAYS + || ($defaultLevel === Participant::NOTIFY_ALWAYS && $notificationLevel === Participant::NOTIFY_DEFAULT)) { + if ($this->isUserMessageOrRelevantSystemMessage($message->getSystemMessage())) { + $notification = $this->createNotification($room, $message, 'chat', threadId: $threadId); + $notification->setUser($participant->getAttendee()->getActorId()); + $this->notificationManager->notify($notification); + } + } + } + + /** + * @param array{silent?: bool, last_edited_time?: int, last_edited_by_type?: string, last_edited_by_id?: string, replyToActorType?: string, replyToActorId?: string, thread_id?: int} $metaData + */ + protected function isRepliedTo(Room $room, Participant $participant, array $metaData): bool { + if (!isset($metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_TYPE]) + || !isset($metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_ID]) + || $metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_TYPE] !== Attendee::ACTOR_FEDERATED_USERS) { + return false; + } + + $repliedTo = $this->userConverter->convertTypeAndId($room, $metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_TYPE], $metaData[ProxyCacheMessage::METADATA_REPLY_TO_ACTOR_ID]); + return $repliedTo['type'] === $participant->getAttendee()->getActorType() + && $repliedTo['id'] === $participant->getAttendee()->getActorId(); + } + + protected function isMentioned(Participant $participant, ProxyCacheMessage $message): bool { + if ($participant->getAttendee()->getActorType() !== Attendee::ACTOR_USERS) { + return false; + } + + foreach ($message->getParsedMessageParameters() as $parameter) { + if ($parameter['type'] === 'user' // RichObjectDefinition, not Attendee::ACTOR_USERS + && $parameter['id'] === $participant->getAttendee()->getActorId() + && empty($parameter['server'])) { + return true; + } + } + + return false; + } + + protected function isMentionedAll(Room $room, ProxyCacheMessage $message): bool { + foreach ($message->getParsedMessageParameters() as $parameter) { + if ($parameter['type'] === 'call' // RichObjectDefinition + && $parameter['id'] === $room->getToken()) { + return true; + } + } + + return false; + } + + protected function isUserMessageOrRelevantSystemMessage(?string $systemMessage): bool { + return $systemMessage === null + || $systemMessage === '' + || $systemMessage === 'object_shared' + || $systemMessage === 'poll_closed' + || $systemMessage === 'file_shared'; + } + + /** + * Creates a notification for the given proxy message and mentioned users + */ + protected function createNotification(Room $chat, ProxyCacheMessage $message, string $subject, array $subjectData = [], ?int $threadId = null): INotification { + $subjectData['userType'] = $message->getActorType(); + $subjectData['userId'] = $message->getActorId(); + + $notificationParameters = [ + 'proxyId' => $message->getId(), + ]; + if ($threadId !== null) { + $notificationParameters['threadId'] = $threadId; + } + + $notification = $this->notificationManager->createNotification(); + $notification + ->setApp('spreed') + ->setObject('chat', $chat->getToken()) + ->setSubject($subject, $subjectData) + ->setMessage($message->getMessageType(), $notificationParameters) + ->setDateTime($message->getCreationDatetime()); + + return $notification; + } +} diff --git a/lib/Notification/Listener.php b/lib/Notification/Listener.php new file mode 100644 index 0000000..fa4f039 --- /dev/null +++ b/lib/Notification/Listener.php @@ -0,0 +1,379 @@ + + */ +class Listener implements IEventListener { + + protected bool $shouldSendCallNotification = false; + /** @var array $preparedCallNotifications Map of language => parsed notification in that language */ + protected array $preparedCallNotifications = []; + + public function __construct( + protected IConfig $serverConfig, + protected IDBConnection $connection, + protected IManager $notificationManager, + protected Notifier $notificationProvider, + protected ParticipantService $participantsService, + protected IEventDispatcher $dispatcher, + protected IUserSession $userSession, + protected ITimeFactory $timeFactory, + protected LoggerInterface $logger, + ) { + } + + #[\Override] + public function handle(Event $event): void { + match (get_class($event)) { + CallNotificationSendEvent::class => $this->sendCallNotification($event->getRoom(), $event->getActor()?->getAttendee(), $event->getTarget()->getAttendee()), + AttendeesAddedEvent::class => $this->generateInvitation($event->getRoom(), $event->getAttendees()), + UserJoinedRoomEvent::class => $this->handleUserJoinedRoomEvent($event), + BeforeCallStartedEvent::class => $this->checkCallNotifications($event), + ParticipantModifiedEvent::class => $this->afterParticipantJoinedCall($event), + CallStartedEvent::class => $this->afterCallStarted($event), + }; + } + + /** + * Room invitation: "{actor} invited you to {call}" + * + * @param Room $room + * @param Attendee[] $attendees + */ + protected function generateInvitation(Room $room, array $attendees): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + return; + } + + if ($room->getObjectType() === Room::OBJECT_TYPE_FILE) { + return; + } + + $actor = $this->userSession->getUser(); + if (!$actor instanceof IUser) { + return; + } + $actorId = $actor->getUID(); + + $notification = $this->notificationManager->createNotification(); + $shouldFlush = $this->notificationManager->defer(); + $dateTime = $this->timeFactory->getDateTime(); + try { + $notification->setApp(Application::APP_ID) + ->setDateTime($dateTime) + ->setObject('room', $room->getToken()) + ->setSubject('invitation', [ + 'actorId' => $actor->getUID(), + ]); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + if ($shouldFlush) { + $this->notificationManager->flush(); + } + return; + } + + foreach ($attendees as $attendee) { + if ($attendee->getActorType() !== Attendee::ACTOR_USERS) { + // No user => no activity + continue; + } + + if ($actorId === $attendee->getActorId()) { + // No activity for self-joining and the creator + continue; + } + + try { + $notification->setUser($attendee->getActorId()); + $this->notificationManager->notify($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + protected function handleUserJoinedRoomEvent(UserJoinedRoomEvent $event): void { + $this->markInvitationRead($event->getRoom(), $event->getUser()); + $this->markReactionNotificationsRead($event->getRoom(), $event->getUser()); + } + + /** + * Room invitation: "{actor} invited you to {call}" + */ + protected function markInvitationRead(Room $room, IUser $user): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE + || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + // No notifications for one-to-one, save a query + return; + } + + $notification = $this->notificationManager->createNotification(); + try { + $notification->setApp(Application::APP_ID) + ->setUser($user->getUID()) + ->setObject('room', $room->getToken()) + ->setSubject('invitation'); + $this->notificationManager->markProcessed($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return; + } + } + + /** + * Reaction: "{user} reacted with {reaction} in {call}" + * + * We should not mark reactions read based on the read-status of the comment + * they apply to, but the point in time when the reaction was done. + * However, these messages are not visible and don't update the read marker, + * so we purge them on joining the conversation. + * This already happened before on the initial loading of a chat with + * {@see ChatController::getMessageContext()}, but not on follow-up visits + * (when the room history was not empty in the browser storage) this does + * not trigger, so it was possible to end a session with all messages read, + * but still having notifications about reactions. + * For normal chat messages this happens in {@see Notifier::parseChatMessage()} + */ + protected function markReactionNotificationsRead(Room $room, IUser $user): void { + $notification = $this->notificationManager->createNotification(); + try { + $notification->setApp(Application::APP_ID) + ->setUser($user->getUID()) + ->setObject('chat', $room->getToken()) + ->setSubject('reaction'); + $this->notificationManager->markProcessed($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return; + } + } + + /** + * Call notification: "{user} wants to talk with you" + */ + protected function checkCallNotifications(BeforeCallStartedEvent $event): void { + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT)) { + $this->shouldSendCallNotification = false; + return; + } + + if ($event->getRoom()->getObjectType() === Room::OBJECT_TYPE_FILE) { + $this->shouldSendCallNotification = false; + return; + } + + $this->shouldSendCallNotification = true; + } + + protected function afterParticipantJoinedCall(ParticipantModifiedEvent $event): void { + if ($event->getProperty() !== AParticipantModifiedEvent::PROPERTY_IN_CALL) { + return; + } + + if ($event->getOldValue() !== Participant::FLAG_DISCONNECTED + || $event->getNewValue() === Participant::FLAG_DISCONNECTED) { + return; + } + + // Purge received call notifications on joining + $this->markCallNotificationsRead($event->getRoom()); + } + + protected function afterCallStarted(CallStartedEvent $event): void { + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT)) { + return; + } + + if ($this->shouldSendCallNotification || $event->getRoom()->isFederatedConversation()) { + $this->sendCallNotifications($event->getRoom(), $event->getDetailList(AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT_FOR)); + } + } + + /** + * Call notification: "{user} wants to talk with you" + * + * @param Room $room + */ + protected function markCallNotificationsRead(Room $room): void { + $currentUser = $this->userSession->getUser(); + if (!$currentUser instanceof IUser) { + return; + } + + $notification = $this->notificationManager->createNotification(); + try { + $notification->setApp(Application::APP_ID) + ->setUser($currentUser->getUID()) + ->setObject('call', $room->getToken()) + ->setSubject('call'); + $this->notificationManager->markProcessed($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return; + } + } + + /** + * Call notification: "{user} wants to talk with you" + * + * @param list $silentFor + */ + protected function sendCallNotifications(Room $room, array $silentFor = []): void { + $actor = $this->userSession->getUser(); + $actorId = $actor instanceof IUser ? $actor->getUID() :''; + + $notification = $this->notificationManager->createNotification(); + $shouldFlush = $this->notificationManager->defer(); + $dateTime = $this->timeFactory->getDateTime(); + try { + // Remove all old notifications for this room + $notification->setApp(Application::APP_ID) + ->setObject('room', $room->getToken()); + $this->notificationManager->markProcessed($notification); + + $notification->setObject('call', $room->getToken()); + $this->notificationManager->markProcessed($notification); + + $notification->setSubject('call', [ + 'callee' => $actorId, + ]) + ->setDateTime($dateTime); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + if ($shouldFlush) { + $this->notificationManager->flush(); + } + return; + } + + $this->preparedCallNotifications = []; + $users = $this->participantsService->getParticipantUsersForCallNotifications($room); + + if (!empty($silentFor)) { + // Remove users for which the call should be silent + foreach ($silentFor as $userId) { + unset($users[$userId]); + } + } + + // Room name depends on the notification user for one-to-one, + // so we avoid pre-parsing it there. Also, it comes with some base load, + // so we only do it for "big enough" calls. + $preparseNotificationForPush = count($users) > 10; + if ($preparseNotificationForPush) { + $fallbackLang = $this->serverConfig->getSystemValue('force_language', null); + if (is_string($fallbackLang)) { + /** @psalm-var array $userLanguages */ + $userLanguages = []; + } else { + $fallbackLang = $this->serverConfig->getSystemValueString('default_language', 'en'); + /** @psalm-var array $userLanguages */ + $userLanguages = $this->serverConfig->getUserValueForUsers('core', 'lang', array_map('strval', array_keys($users))); + } + } + + $this->connection->beginTransaction(); + try { + foreach ($users as $userId => $isImportant) { + $userId = (string)$userId; + if ($actorId === $userId) { + continue; + } + + if ($preparseNotificationForPush) { + // Get the settings for this particular user, then check if we have notifications to email them + $languageCode = $userLanguages[$userId] ?? $fallbackLang; + + if (!isset($this->preparedCallNotifications[$languageCode])) { + $translatedNotification = clone $notification; + + $this->notificationManager->setPreparingPushNotification(true); + $this->preparedCallNotifications[$languageCode] = $this->notificationProvider->prepare($translatedNotification, $languageCode); + $this->notificationManager->setPreparingPushNotification(false); + } + $userNotification = $this->preparedCallNotifications[$languageCode]; + } else { + $userNotification = $notification; + } + + try { + $userNotification->setUser($userId); + $userNotification->setPriorityNotification($isImportant); + $this->notificationManager->notify($userNotification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } + } catch (\Throwable $e) { + $this->connection->rollBack(); + throw $e; + } + $this->connection->commit(); + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + /** + * Forced call notification when ringing a single participant again + */ + protected function sendCallNotification(Room $room, ?Attendee $actor, Attendee $target): void { + try { + // Remove previous call notifications + $notification = $this->notificationManager->createNotification(); + $notification->setApp(Application::APP_ID) + ->setObject('call', $room->getToken()) + ->setUser($target->getActorId()); + $this->notificationManager->markProcessed($notification); + + $dateTime = $this->timeFactory->getDateTime(); + $notification->setSubject('call', [ + 'callee' => $actor?->getActorId(), + ]) + ->setDateTime($dateTime) + ->setPriorityNotification($target->isImportant()); + $this->notificationManager->notify($notification); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + } +} diff --git a/lib/Notification/Notifier.php b/lib/Notification/Notifier.php new file mode 100644 index 0000000..5e6b63f --- /dev/null +++ b/lib/Notification/Notifier.php @@ -0,0 +1,1375 @@ + */ + protected array $circleNames = []; + /** @var array */ + protected array $circleLinks = []; + protected ICommentsManager $commentManager; + + public function __construct( + protected IFactory $lFactory, + protected IURLGenerator $url, + protected Config $config, + protected IAppManager $appManager, + protected IUserManager $userManager, + protected IGroupManager $groupManager, + protected GuestManager $guestManager, + private IShareManager $shareManager, + protected Manager $manager, + protected ParticipantService $participantService, + protected AvatarService $avatarService, + protected INotificationManager $notificationManager, + CommentsManager $commentManager, + protected ProxyCacheMessageMapper $proxyCacheMessageMapper, + protected MessageParser $messageParser, + protected IRootFolder $rootFolder, + protected ITimeFactory $timeFactory, + protected Definitions $definitions, + protected AddressHandler $addressHandler, + protected BotServerMapper $botServerMapper, + protected FederationManager $federationManager, + protected ICloudIdManager $cloudIdManager, + protected LoggerInterface $logger, + ) { + $this->commentManager = $commentManager; + } + + /** + * Identifier of the notifier, only use [a-z0-9_] + * + * @return string + * @since 17.0.0 + */ + #[\Override] + public function getID(): string { + return 'talk'; + } + + /** + * Human readable name describing the notifier + * + * @return string + * @since 17.0.0 + */ + #[\Override] + public function getName(): string { + return $this->lFactory->get(Application::APP_ID)->t('Talk'); + } + + /** + * @param string $objectId + * @param string $userId + * @return Room + * @throws RoomNotFoundException + */ + protected function getRoom(string $objectId, string $userId): Room { + if (array_key_exists($objectId, $this->rooms)) { + if ($this->rooms[$objectId] === null) { + throw new RoomNotFoundException('Room does not exist'); + } + + return $this->rooms[$objectId]; + } + + try { + $room = $this->manager->getRoomByToken($objectId, $userId); + $this->rooms[$objectId] = $room; + return $room; + } catch (RoomNotFoundException $e) { + if (!is_numeric($objectId)) { + // Room does not exist + $this->rooms[$objectId] = null; + throw $e; + } + + try { + // Before 3.2.3 the id was passed in notifications + $room = $this->manager->getRoomById((int)$objectId); + $this->rooms[$objectId] = $room; + return $room; + } catch (RoomNotFoundException $e) { + // Room does not exist + $this->rooms[$objectId] = null; + throw $e; + } + } + } + + /** + * @param Room $room + * @param string $userId + * @return Participant + * @throws ParticipantNotFoundException + */ + protected function getParticipant(Room $room, string $userId): Participant { + $roomId = $room->getId(); + if (array_key_exists($roomId, $this->participants) && array_key_exists($userId, $this->participants[$roomId])) { + if ($this->participants[$roomId][$userId] === null) { + throw new ParticipantNotFoundException('Participant does not exist'); + } + + return $this->participants[$roomId][$userId]; + } + + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + $this->participants[$roomId][$userId] = $participant; + return $participant; + } catch (ParticipantNotFoundException $e) { + // Participant does not exist + $this->participants[$roomId][$userId] = null; + throw $e; + } + } + + /** + * @param INotification $notification + * @param string $languageCode The code of the language that should be used to prepare the notification + * @return INotification + * @throws AlreadyProcessedException + * @throws UnknownNotificationException + * @since 9.0.0 + */ + #[\Override] + public function prepare(INotification $notification, string $languageCode): INotification { + if ($notification->getApp() !== Application::APP_ID) { + throw new UnknownNotificationException('Incorrect app'); + } + + if (!($this->notificationManager->isPreparingPushNotification() && $notification->getSubject() === 'call')) { + $userId = $notification->getUser(); + $user = $this->userManager->get($userId); + if (!$user instanceof IUser || $this->config->isDisabledForUser($user)) { + throw new AlreadyProcessedException(); + } + } + + $l = $this->lFactory->get(Application::APP_ID, $languageCode); + + if ($notification->getObjectType() === 'hosted-signaling-server') { + return $this->parseHostedSignalingServer($notification, $l); + } + + if ($notification->getObjectType() === 'remote_talk_share') { + return $this->parseRemoteInvitationMessage($notification, $l); + } + + if ($notification->getObjectType() === 'certificate_expiration') { + return $this->parseCertificateExpiration($notification, $l); + } + + if ($this->notificationManager->isPreparingPushNotification() && $notification->getSubject() === 'call') { + try { + $room = $this->manager->getRoomByToken($notification->getObjectId()); + } catch (RoomNotFoundException) { + // Room does not exist + throw new AlreadyProcessedException(); + } + + // Skip the participant check when we generate push notifications + // we just looped over the participants to create the notification, + // they can not be removed between these 2 steps, but we can save + // n queries. + $participant = null; + } else { + try { + $room = $this->getRoom($notification->getObjectId(), $userId); + } catch (RoomNotFoundException $e) { + // Room does not exist + throw new AlreadyProcessedException(); + } + + try { + $participant = $this->getParticipant($room, $userId); + } catch (ParticipantNotFoundException $e) { + // Room does not exist + throw new AlreadyProcessedException(); + } + } + + $notification + ->setIcon($this->url->getAbsoluteURL($this->url->imagePath(Application::APP_ID, 'app-dark.svg'))) + ->setLink($this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()])); + + if ($participant instanceof Participant && $this->notificationManager->isPreparingPushNotification()) { + $notification->setPriorityNotification($participant->getAttendee()->isImportant()); + } + + $subject = $notification->getSubject(); + if ($subject === 'record_file_stored' || $subject === 'transcript_file_stored' || $subject === 'transcript_failed' || $subject === 'summary_file_stored' || $subject === 'summary_failed') { + return $this->parseStoredRecording($notification, $room, $participant, $l); + } + if ($subject === 'record_file_store_fail') { + return $this->parseStoredRecordingFail($notification, $room, $participant, $l); + } + if ($subject === 'invitation') { + return $this->parseInvitation($notification, $room, $l); + } + if ($subject === 'call') { + if ($participant instanceof Participant + && $room->getLobbyState() !== Webinary::LOBBY_NONE + && !($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + // User is blocked by the lobby, remove notification + throw new AlreadyProcessedException(); + } + + if ($room->getObjectType() === 'share:password') { + return $this->parsePasswordRequest($notification, $room, $l); + } + return $this->parseCall($notification, $room, $l); + } + if ($subject === 'reply' || $subject === 'mention' || $subject === 'mention_direct' || $subject === 'mention_group' || $subject === 'mention_team' || $subject === 'mention_all' || $subject === 'chat' || $subject === 'reaction' || $subject === 'reminder') { + if ($participant instanceof Participant + && $room->getLobbyState() !== Webinary::LOBBY_NONE + && !($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + // User is blocked by the lobby, remove notification + throw new AlreadyProcessedException(); + } + + return $this->parseChatMessage($notification, $room, $participant, $l); + } + + $this->notificationManager->markProcessed($notification); + throw new UnknownNotificationException('Unknown subject'); + } + + protected function shortenJsonEncodedMultibyteSave(string $subject, int $dataLength): string { + $temp = mb_substr($subject, 0, $dataLength); + while (strlen(json_encode($temp)) > $dataLength) { + $temp = mb_substr($temp, 0, -5); + } + return $temp; + } + + protected function parseStoredRecordingFail( + INotification $notification, + Room $room, + Participant $participant, + IL10N $l, + ): INotification { + $notification + ->setRichSubject( + $l->t('Failed to upload call recording'), + ) + ->setRichMessage( + $l->t('The recording server failed to upload recording of call {call}. Please reach out to the administration.'), + [ + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $room->getDisplayName($participant->getAttendee()->getActorId()), + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + ] + ); + return $notification; + } + + protected function parseStoredRecording( + INotification $notification, + Room $room, + Participant $participant, + IL10N $l, + ): INotification { + $parameters = $notification->getSubjectParameters(); + try { + $userFolder = $this->rootFolder->getUserFolder($notification->getUser()); + /** @var \OCP\Files\File[] */ + $files = $userFolder->getById($parameters['objectId']); + /** @var \OCP\Files\File $file */ + $file = array_shift($files); + $path = $userFolder->getRelativePath($file->getPath()); + } catch (\Throwable $th) { + throw new AlreadyProcessedException(); + } + + $shareAction = $notification->createAction() + ->setParsedLabel($l->t('Share to chat')) + ->setPrimary(true) + ->setLink( + $this->url->linkToOCSRouteAbsolute( + 'spreed.Recording.shareToChat', + [ + 'apiVersion' => 'v1', + 'fileId' => $file->getId(), + 'timestamp' => $notification->getDateTime()->getTimestamp(), + 'token' => $room->getToken() + ] + ), + IAction::TYPE_POST + ); + $dismissAction = $notification->createAction() + ->setParsedLabel($l->t('Dismiss notification')) + ->setLink( + $this->url->linkToOCSRouteAbsolute( + 'spreed.Recording.notificationDismiss', + [ + 'apiVersion' => 'v1', + 'token' => $room->getToken(), + 'timestamp' => $notification->getDateTime()->getTimestamp(), + ] + ), + IAction::TYPE_DELETE + ); + + if ($notification->getSubject() === 'record_file_stored') { + $subject = $l->t('Call recording now available'); + $message = $l->t('The recording for the call in {call} was uploaded to {file}.'); + } elseif ($notification->getSubject() === 'transcript_file_stored') { + $subject = $l->t('Transcript now available'); + $message = $l->t('The transcript for the call in {call} was uploaded to {file}.'); + } elseif ($notification->getSubject() === 'transcript_failed') { + $subject = $l->t('Failed to transcript call recording'); + $message = $l->t('The server failed to transcript the recording at {file} for the call in {call}. Please reach out to the administration.'); + } elseif ($notification->getSubject() === 'summary_file_stored') { + $subject = $l->t('Call summary now available'); + $message = $l->t('The summary for the call in {call} was uploaded to {file}.'); + } else { + $subject = $l->t('Failed to summarize call recording'); + $message = $l->t('The server failed to summarize the recording at {file} for the call in {call}. Please reach out to the administration.'); + } + + $notification + ->setRichSubject($subject) + ->setRichMessage( + $message, + [ + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $room->getDisplayName($participant->getAttendee()->getActorId()), + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + 'file' => [ + 'type' => 'file', + 'id' => (string)$file->getId(), + 'name' => $file->getName(), + 'path' => (string)$path, + 'link' => $this->url->linkToRouteAbsolute('files.viewcontroller.showFile', ['fileid' => $file->getId()]), + ], + ]); + + if ($notification->getSubject() !== 'transcript_failed' && $notification->getSubject() !== 'summary_failed') { + $notification->addParsedAction($shareAction); + $notification->addParsedAction($dismissAction); + } + + return $notification; + } + + protected function parseRemoteInvitationMessage(INotification $notification, IL10N $l): INotification { + $subjectParameters = $notification->getSubjectParameters(); + + try { + $invite = $this->federationManager->getRemoteShareById((int)$notification->getObjectId()); + if ($invite->getUserId() !== $notification->getUser()) { + throw new AlreadyProcessedException(); + } + $room = $this->manager->getRoomById($invite->getLocalRoomId()); + } catch (DoesNotExistException) { + // Invitation does not exist + throw new AlreadyProcessedException(); + } catch (RoomNotFoundException) { + // Room does not exist + throw new AlreadyProcessedException(); + } + + [$sharedById, $sharedByServer] = $this->addressHandler->splitUserRemote($subjectParameters['sharedByFederatedId']); + + $message = $l->t('{user1} invited you to join {roomName} on {remoteServer}'); + + $rosParameters = [ + 'user1' => [ + 'type' => 'user', + 'id' => $sharedById, + 'name' => $subjectParameters['sharedByDisplayName'], + 'server' => $sharedByServer, + ], + 'roomName' => [ + 'type' => 'highlight', + 'id' => $subjectParameters['serverUrl'] . '::' . $subjectParameters['roomToken'], + 'name' => $room->getName(), + ], + 'remoteServer' => [ + 'type' => 'highlight', + 'id' => $subjectParameters['serverUrl'], + 'name' => $subjectParameters['serverUrl'], + ] + ]; + + $acceptAction = $notification->createAction(); + $acceptAction->setParsedLabel($l->t('Accept')); + $acceptAction->setLink($this->url->linkToOCSRouteAbsolute( + 'spreed.Federation.acceptShare', + ['apiVersion' => 'v1', 'id' => (int)$notification->getObjectId()] + ), IAction::TYPE_POST); + $acceptAction->setPrimary(true); + $notification->addParsedAction($acceptAction); + + $declineAction = $notification->createAction(); + $declineAction->setParsedLabel($l->t('Decline')); + $declineAction->setLink($this->url->linkToOCSRouteAbsolute( + 'spreed.Federation.rejectShare', + ['apiVersion' => 'v1', 'id' => (int)$notification->getObjectId()] + ), IAction::TYPE_DELETE); + $notification->addParsedAction($declineAction); + + $notification->setRichSubject($l->t('{user1} invited you to a federated conversation'), ['user1' => $rosParameters['user1']]); + $notification->setRichMessage($message, $rosParameters); + + return $notification; + } + + /** + * @param INotification $notification + * @param Room $room + * @param Participant $participant + * @param IL10N $l + * @return INotification + * @throws AlreadyProcessedException + * @throws UnknownNotificationException + */ + protected function parseChatMessage(INotification $notification, Room $room, Participant $participant, IL10N $l): INotification { + if ($notification->getObjectType() !== 'chat' && $notification->getObjectType() !== 'reminder') { + throw new UnknownNotificationException('Unknown object type'); + } + + $messageParameters = $notification->getMessageParameters(); + if (!isset($messageParameters['commentId']) && !isset($messageParameters['proxyId'])) { + throw new AlreadyProcessedException(); + } + + if (isset($messageParameters['commentId'])) { + if (!$this->notificationManager->isPreparingPushNotification() + && $notification->getObjectType() === 'chat' + /** + * Notification only contains the message id of the target comment + * not the one of the reaction, so we can't determine if it was read. + * @see Listener::markReactionNotificationsRead() + */ + && $notification->getSubject() !== 'reaction' + && ((int)$messageParameters['commentId']) <= $participant->getAttendee()->getLastReadMessage()) { + // Mark notifications of messages that are read as processed + throw new AlreadyProcessedException(); + } + + try { + $comment = $this->commentManager->get($messageParameters['commentId']); + } catch (NotFoundException) { + throw new AlreadyProcessedException(); + } + + if ($comment->getObjectType() !== 'chat' + || $room->getId() !== (int)$comment->getObjectId()) { + $this->logger->warning('Ignoring ' . $notification->getSubject() . ' notification for user ' . $notification->getUser() . ' as messages #' . $comment->getId() . ' could not be found for conversation ' . $room->getToken()); + throw new AlreadyProcessedException(); + } + + $message = $this->messageParser->createMessage($room, $participant, $comment, $l); + $this->messageParser->parseMessage($message, true); + + if (!$message->getVisibility()) { + throw new AlreadyProcessedException(); + } + } else { + try { + $proxy = $this->proxyCacheMessageMapper->findById($room, $messageParameters['proxyId']); + $message = $this->messageParser->createMessageFromProxyCache($room, $participant, $proxy, $l); + } catch (DoesNotExistException) { + throw new AlreadyProcessedException(); + } + } + + $subjectParameters = $notification->getSubjectParameters(); + + $richSubjectUser = null; + $isGuest = false; + if ($subjectParameters['userType'] === Attendee::ACTOR_USERS) { + $userId = $subjectParameters['userId']; + $userDisplayName = $this->userManager->getDisplayName($userId); + + if ($userDisplayName !== null) { + $richSubjectUser = [ + 'type' => 'user', + 'id' => $userId, + 'name' => $userDisplayName, + ]; + } + } elseif ($subjectParameters['userType'] === Attendee::ACTOR_FEDERATED_USERS) { + try { + $cloudId = $this->cloudIdManager->resolveCloudId($message->getActorId()); + $richSubjectUser = [ + 'type' => 'user', + 'id' => $cloudId->getUser(), + 'name' => $message->getActorDisplayName(), + 'server' => $cloudId->getRemote(), + ]; + } catch (\InvalidArgumentException) { + $richSubjectUser = [ + 'type' => 'highlight', + 'id' => $message->getActorId(), + 'name' => $message->getActorId(), + ]; + } + } elseif ($subjectParameters['userType'] === Attendee::ACTOR_BOTS) { + $botId = $subjectParameters['userId']; + try { + $bot = $this->botServerMapper->findByUrlHash(substr($botId, strlen(Attendee::ACTOR_BOT_PREFIX))); + $richSubjectUser = [ + 'type' => 'highlight', + 'id' => $botId, + 'name' => $bot->getName() . ' (Bot)', + ]; + } catch (DoesNotExistException $e) { + $richSubjectUser = [ + 'type' => 'highlight', + 'id' => $botId, + 'name' => 'Bot', + ]; + } + } else { + $isGuest = true; + } + + $richSubjectCall = [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $room->getDisplayName($notification->getUser()), + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ]; + + // Set the link to the specific message + $urlParams = [ + 'token' => $room->getToken(), + '_fragment' => 'message_' . $message->getMessageId(), + ]; + if (isset($messageParameters['threadId'])) { + $urlParams['threadId'] = $messageParameters['threadId']; + } + $notification->setLink($this->url->linkToRouteAbsolute('spreed.Page.showCall', $urlParams)); + + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getExpirationDateTime(); + if ($expireDate instanceof \DateTimeInterface && $expireDate < $now) { + throw new AlreadyProcessedException(); + } + + if ($message->getMessageType() === ChatManager::VERB_MESSAGE_DELETED) { + throw new AlreadyProcessedException(); + } + + $placeholders = $replacements = []; + foreach ($message->getMessageParameters() as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + if ($parameter['type'] === 'user' || $parameter['type'] === 'guest') { + $replacements[] = '@' . $parameter['name']; + } else { + $replacements[] = $parameter['name']; + } + } + + $parsedMessage = str_replace($placeholders, $replacements, $message->getMessage()); + if (!$this->notificationManager->isPreparingPushNotification() && !$participant->getAttendee()->isSensitive()) { + $notification->setParsedMessage($parsedMessage); + $notification->setRichMessage($message->getMessage(), $message->getMessageParameters()); + + // Forward the message ID as well to the clients, so they can quote the message on replies + $notification->setObject($notification->getObjectType(), $notification->getObjectId() . '/' . $message->getMessageId()); + if (isset($messageParameters['threadId'])) { + $notification->setObject($notification->getObjectType(), $notification->getObjectId() . '/' . $messageParameters['threadId']); + } + } + + $richSubjectParameters = [ + 'user' => $richSubjectUser, + 'call' => $richSubjectCall, + ]; + + if ($participant->getAttendee()->isSensitive()) { + // Prevent message preview and conversation name in sensitive conversations + + if ($this->notificationManager->isPreparingPushNotification()) { + $translatedPrivateConversation = $l->t('Private conversation'); + + if ($notification->getSubject() === 'reaction') { + // TRANSLATORS Someone reacted in a private conversation + $subject = $translatedPrivateConversation . "\n" . $l->t('Someone reacted'); + } elseif ($notification->getSubject() === 'chat') { + // TRANSLATORS You received a new message in a private conversation + $subject = $translatedPrivateConversation . "\n" . $l->t('New message'); + } elseif ($notification->getSubject() === 'reminder') { + // TRANSLATORS Reminder for a message in a private conversation + $subject = $translatedPrivateConversation . "\n" . $l->t('Reminder'); + } elseif (str_starts_with($notification->getSubject(), 'mention_')) { + // TRANSLATORS Someone mentioned you in a private conversation + $subject = $translatedPrivateConversation . "\n" . $l->t('Someone mentioned you'); + } else { + // TRANSLATORS There's a notification in a private conversation + $subject = $translatedPrivateConversation . "\n" . $l->t('Notification'); + } + } else { + if ($notification->getSubject() === 'reaction') { + $subject = $l->t('Someone reacted in a private conversation'); + } elseif ($notification->getSubject() === 'chat') { + $subject = $l->t('You received a message in a private conversation'); + } elseif ($notification->getSubject() === 'reminder') { + $subject = $l->t('Reminder in a private conversation'); + } elseif (str_starts_with($notification->getSubject(), 'mention_')) { + $subject = $l->t('Someone mentioned you in a private conversation'); + } else { + $subject = $l->t('Notification in a private conversation'); + } + } + + $richSubjectParameters = []; + } elseif ($this->notificationManager->isPreparingPushNotification()) { + $shortenMessage = $this->shortenJsonEncodedMultibyteSave($parsedMessage, 100); + if ($shortenMessage !== $parsedMessage) { + $shortenMessage .= '…'; + } + $richSubjectParameters['message'] = [ + 'type' => 'highlight', + 'id' => (string)$message->getMessageId(), + 'name' => $shortenMessage, + ]; + if ($notification->getSubject() === 'reminder') { + if ($message->getActorId() === $notification->getUser()) { + // TRANSLATORS Reminder for a message you sent in the conversation {call} + $subject = $l->t('Reminder: You in {call}') . "\n{message}"; + } elseif ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + // TRANSLATORS Reminder for a message from {user} in conversation {call} + $subject = $l->t('Reminder: {user} in {call}') . "\n{message}"; + } elseif ($richSubjectUser) { + // TRANSLATORS Reminder for a message from {user} in conversation {call} + $subject = $l->t('Reminder: {user} in {call}') . "\n{message}"; + } elseif (!$isGuest) { + // TRANSLATORS Reminder for a message from a deleted user in conversation {call} + $subject = $l->t('Reminder: Deleted user in {call}') . "\n{message}"; + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + // TRANSLATORS Reminder for a message from a guest in conversation {call} + $subject = $l->t('Reminder: {guest} (guest) in {call}') . "\n{message}"; + } catch (ParticipantNotFoundException $e) { + // TRANSLATORS Reminder for a message from a guest in conversation {call} + $subject = $l->t('Reminder: Guest in {call}') . "\n{message}"; + } + } + } elseif ($notification->getSubject() === 'reaction') { + $richSubjectParameters['reaction'] = [ + 'type' => 'highlight', + 'id' => $subjectParameters['reaction'], + 'name' => $subjectParameters['reaction'], + ]; + + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('{user} reacted with {reaction}') . "\n{message}"; + } elseif ($richSubjectUser) { + $subject = $l->t('{user} reacted with {reaction} in {call}') . "\n{message}"; + } elseif (!$isGuest) { + $subject = $l->t('Deleted user reacted with {reaction} in {call}') . "\n{message}"; + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('{guest} (guest) reacted with {reaction} in {call}') . "\n{message}"; + } catch (ParticipantNotFoundException $e) { + $subject = $l->t('Guest reacted with {reaction} in {call}') . "\n{message}"; + } + } + } else { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = "{user}\n{message}"; + } elseif ($richSubjectUser) { + $subject = $l->t('{user} in {call}') . "\n{message}"; + } elseif (!$isGuest) { + $subject = $l->t('Deleted user in {call}') . "\n{message}"; + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('{guest} (guest) in {call}') . "\n{message}"; + } catch (ParticipantNotFoundException $e) { + $subject = $l->t('Guest in {call}') . "\n{message}"; + } + } + } + } elseif ($notification->getSubject() === 'chat') { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('{user} sent you a private message'); + } elseif ($richSubjectUser) { + $subject = $l->t('{user} sent a message in conversation {call}'); + } elseif (!$isGuest) { + $subject = $l->t('A deleted user sent a message in conversation {call}'); + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('{guest} (guest) sent a message in conversation {call}'); + } catch (ParticipantNotFoundException $e) { + $subject = $l->t('A guest sent a message in conversation {call}'); + } + } + } elseif ($notification->getSubject() === 'reply') { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('{user} replied to your private message'); + } elseif ($richSubjectUser) { + $subject = $l->t('{user} replied to your message in conversation {call}'); + } elseif (!$isGuest) { + $subject = $l->t('A deleted user replied to your message in conversation {call}'); + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('{guest} (guest) replied to your message in conversation {call}'); + } catch (ParticipantNotFoundException $e) { + $subject = $l->t('A guest replied to your message in conversation {call}'); + } + } + } elseif ($notification->getSubject() === 'reminder') { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + if ($message->getActorId() === $notification->getUser()) { + $subject = $l->t('Reminder: You in private conversation {call}'); + } elseif ($room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('Reminder: A deleted user in private conversation {call}'); + } else { + $subject = $l->t('Reminder: {user} in private conversation'); + } + } elseif ($richSubjectUser) { + if ($message->getActorId() === $notification->getUser()) { + $subject = $l->t('Reminder: You in conversation {call}'); + } else { + $subject = $l->t('Reminder: {user} in conversation {call}'); + } + } elseif (!$isGuest) { + $subject = $l->t('Reminder: A deleted user in conversation {call}'); + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('Reminder: {guest} (guest) in conversation {call}'); + } catch (ParticipantNotFoundException) { + $subject = $l->t('Reminder: A guest in conversation {call}'); + } + } + } elseif ($notification->getSubject() === 'reaction') { + $richSubjectParameters['reaction'] = [ + 'type' => 'highlight', + 'id' => $subjectParameters['reaction'], + 'name' => $subjectParameters['reaction'], + ]; + + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('{user} reacted with {reaction} to your private message'); + } elseif ($richSubjectUser) { + $subject = $l->t('{user} reacted with {reaction} to your message in conversation {call}'); + } elseif (!$isGuest) { + $subject = $l->t('A deleted user reacted with {reaction} to your message in conversation {call}'); + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + $subject = $l->t('{guest} (guest) reacted with {reaction} to your message in conversation {call}'); + } catch (ParticipantNotFoundException $e) { + $subject = $l->t('A guest reacted with {reaction} to your message in conversation {call}'); + } + } + } elseif ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subject = $l->t('{user} mentioned you in a private conversation'); + } elseif ($richSubjectUser) { + if ($notification->getSubject() === 'mention_group') { + $groupName = $this->groupManager->getDisplayName($subjectParameters['sourceId']) ?? $subjectParameters['sourceId']; + $richSubjectParameters['group'] = [ + 'type' => 'user-group', + 'id' => $subjectParameters['sourceId'], + 'name' => $groupName, + ]; + + $subject = $l->t('{user} mentioned group {group} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_team') { + $richSubjectParameters['team'] = $this->getCircle($subjectParameters['sourceId']); + $subject = $l->t('{user} mentioned team {team} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_all') { + $subject = $l->t('{user} mentioned everyone in conversation {call}'); + } else { + $subject = $l->t('{user} mentioned you in conversation {call}'); + } + } elseif (!$isGuest) { + if ($notification->getSubject() === 'mention_group') { + $groupName = $this->groupManager->getDisplayName($subjectParameters['sourceId']) ?? $subjectParameters['sourceId']; + $richSubjectParameters['group'] = [ + 'type' => 'user-group', + 'id' => $subjectParameters['sourceId'], + 'name' => $groupName, + ]; + + $subject = $l->t('A deleted user mentioned group {group} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_team') { + $richSubjectParameters['team'] = $this->getCircle($subjectParameters['sourceId']); + $subject = $l->t('A deleted user mentioned team {team} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_all') { + $subject = $l->t('A deleted user mentioned everyone in conversation {call}'); + } else { + $subject = $l->t('A deleted user mentioned you in conversation {call}'); + } + } else { + try { + $richSubjectParameters['guest'] = $this->getGuestParameter($room, $message->getActorType(), $message->getActorId()); + if ($notification->getSubject() === 'mention_group') { + $groupName = $this->groupManager->getDisplayName($subjectParameters['sourceId']) ?? $subjectParameters['sourceId']; + $richSubjectParameters['group'] = [ + 'type' => 'user-group', + 'id' => $subjectParameters['sourceId'], + 'name' => $groupName, + ]; + + $subject = $l->t('{guest} (guest) mentioned group {group} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_team') { + $richSubjectParameters['team'] = $this->getCircle($subjectParameters['sourceId']); + $subject = $l->t('{guest} (guest) mentioned team {team} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_all') { + $subject = $l->t('{guest} (guest) mentioned everyone in conversation {call}'); + } else { + $subject = $l->t('{guest} (guest) mentioned you in conversation {call}'); + } + } catch (ParticipantNotFoundException $e) { + if ($notification->getSubject() === 'mention_group') { + $groupName = $this->groupManager->getDisplayName($subjectParameters['sourceId']) ?? $subjectParameters['sourceId']; + $richSubjectParameters['group'] = [ + 'type' => 'user-group', + 'id' => $subjectParameters['sourceId'], + 'name' => $groupName, + ]; + + $subject = $l->t('A guest mentioned group {group} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_team') { + $richSubjectParameters['team'] = $this->getCircle($subjectParameters['sourceId']); + $subject = $l->t('A guest mentioned team {team} in conversation {call}'); + } elseif ($notification->getSubject() === 'mention_all') { + $subject = $l->t('A guest mentioned everyone in conversation {call}'); + } else { + $subject = $l->t('A guest mentioned you in conversation {call}'); + } + } + } + + if ($notification->getObjectType() === 'reminder') { + $notification = $this->addActionButton($notification, 'message_view', $l->t('View message')); + + $action = $notification->createAction(); + $action->setLabel('reminder_dismiss') + ->setParsedLabel($l->t('Dismiss reminder')) + ->setLink( + $this->url->linkToOCSRouteAbsolute( + 'spreed.Chat.deleteReminder', + [ + 'apiVersion' => 'v1', + 'token' => $room->getToken(), + 'messageId' => $message->getMessageId(), + ] + ), + IAction::TYPE_DELETE + ); + + $notification->addParsedAction($action); + } else { + $notification = $this->addActionButton($notification, 'chat_view', $l->t('View chat'), false); + } + + if (array_key_exists('user', $richSubjectParameters) && $richSubjectParameters['user'] === null) { + unset($richSubjectParameters['user']); + } + + $placeholders = $replacements = []; + foreach ($richSubjectParameters as $placeholder => $parameter) { + $placeholders[] = '{' . $placeholder . '}'; + $replacements[] = $parameter['name']; + } + + $notification->setParsedSubject(str_replace($placeholders, $replacements, $subject)) + ->setRichSubject($subject, $richSubjectParameters); + + return $notification; + } + + /** + * @param Room $room + * @param Attendee::ACTOR_* $actorType + * @param string $actorId + * @return array + * @throws ParticipantNotFoundException + */ + protected function getGuestParameter(Room $room, string $actorType, string $actorId): array { + if (!in_array($actorType, [Attendee::ACTOR_GUESTS, Attendee::ACTOR_EMAILS], true)) { + throw new ParticipantNotFoundException('Not a guest actor type'); + } + + $participant = $this->participantService->getParticipantByActor($room, $actorType, $actorId); + $name = $participant->getAttendee()->getDisplayName(); + if (trim($name) === '') { + throw new ParticipantNotFoundException('Empty name'); + } + + return [ + 'type' => 'guest', + 'id' => $actorId, + 'name' => $name, + ]; + } + + /** + * @param Room $room + * @return string + * @throws \InvalidArgumentException + */ + protected function getRoomType(Room $room): string { + switch ($room->getType()) { + case Room::TYPE_ONE_TO_ONE: + case Room::TYPE_ONE_TO_ONE_FORMER: + return 'one2one'; + case Room::TYPE_GROUP: + case Room::TYPE_NOTE_TO_SELF: + return 'group'; + case Room::TYPE_PUBLIC: + return 'public'; + default: + throw new \InvalidArgumentException('Unknown room type'); + } + } + + /** + * @param INotification $notification + * @param Room $room + * @param IL10N $l + * @return INotification + * @throws AlreadyProcessedException + * @throws UnknownNotificationException + */ + protected function parseInvitation(INotification $notification, Room $room, IL10N $l): INotification { + if ($notification->getObjectType() !== 'room') { + throw new UnknownNotificationException('Unknown object type'); + } + + $parameters = $notification->getSubjectParameters(); + $uid = $parameters['actorId'] ?? $parameters[0]; + + $userDisplayName = $this->userManager->getDisplayName($uid); + if ($userDisplayName === null) { + throw new AlreadyProcessedException(); + } + + $roomName = $room->getDisplayName($notification->getUser()); + if (\in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + $subject = $l->t('{user} invited you to a group conversation: {call}'); + if ($this->participantService->hasActiveSessionsInCall($room)) { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Join call'), true, true); + } else { + $notification = $this->addActionButton($notification, 'chat_view', $l->t('View chat'), false); + } + + $notification + ->setParsedSubject(str_replace(['{user}', '{call}'], [$userDisplayName, $roomName], $subject)) + ->setRichSubject( + $subject, [ + 'user' => [ + 'type' => 'user', + 'id' => $uid, + 'name' => $userDisplayName, + ], + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $roomName, + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + ] + ); + } else { + throw new AlreadyProcessedException(); + } + + return $notification; + } + + /** + * @param INotification $notification + * @param Room $room + * @param IL10N $l + * @return INotification + * @throws AlreadyProcessedException + * @throws UnknownNotificationException + */ + protected function parseCall(INotification $notification, Room $room, IL10N $l): INotification { + if ($notification->getObjectType() !== 'call') { + throw new UnknownNotificationException('Unknown object type'); + } + + $roomName = $room->getDisplayName($notification->getUser()); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $parameters = $notification->getSubjectParameters(); + $calleeId = $parameters['callee']; // TODO can be null on federated conversations, so needs to be changed once we have federated 1-1 + $userDisplayName = $this->userManager->getDisplayName($calleeId); + if ($userDisplayName !== null) { + if ($this->notificationManager->isPreparingPushNotification() || $this->participantService->hasActiveSessionsInCall($room)) { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Answer call'), true, true); + $subject = $l->t('{user} would like to talk with you'); + } else { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Call back')); + $subject = $l->t('You missed a call from {user}'); + } + + $notification + ->setParsedSubject(str_replace('{user}', $userDisplayName, $subject)) + ->setRichSubject( + $subject, [ + 'user' => [ + 'type' => 'user', + 'id' => $calleeId, + 'name' => $userDisplayName, + ], + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $roomName, + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + ] + ); + } else { + throw new AlreadyProcessedException(); + } + } elseif ($room->getObjectId() === Room::OBJECT_ID_PHONE_INCOMING + && in_array($room->getObjectType(), [Room::OBJECT_TYPE_PHONE_PERSIST, Room::OBJECT_TYPE_PHONE_TEMPORARY, Room::OBJECT_TYPE_PHONE_LEGACY], true)) { + if ($this->notificationManager->isPreparingPushNotification() + || (!$room->isFederatedConversation() && $this->participantService->hasActiveSessionsInCall($room)) + || ($room->isFederatedConversation() && $room->getActiveSince()) + ) { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Accept call'), true, true); + $subject = $l->t('Incoming phone call from {call}'); + } else { + $notification = $this->addActionButton($notification, 'chat_view', $l->t('View chat'), false); + $subject = $l->t('You missed a phone call from {call}'); + } + + $notification + ->setParsedSubject(str_replace('{call}', $roomName, $subject)) + ->setRichSubject( + $subject, [ + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $roomName, + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + ] + ); + } elseif (\in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + if ($this->notificationManager->isPreparingPushNotification() + || (!$room->isFederatedConversation() && $this->participantService->hasActiveSessionsInCall($room)) + || ($room->isFederatedConversation() && $room->getActiveSince()) + ) { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Join call'), true, true); + $subject = $l->t('A group call has started in {call}'); + } else { + $notification = $this->addActionButton($notification, 'chat_view', $l->t('View chat'), false); + $subject = $l->t('You missed a group call in {call}'); + } + + $notification + ->setParsedSubject(str_replace('{call}', $roomName, $subject)) + ->setRichSubject( + $subject, [ + 'call' => [ + 'type' => 'call', + 'id' => (string)$room->getId(), + 'name' => $roomName, + 'call-type' => $this->getRoomType($room), + 'icon-url' => $this->avatarService->getAvatarUrl($room), + ], + ] + ); + } else { + throw new AlreadyProcessedException(); + } + + return $notification; + } + + /** + * @param INotification $notification + * @param Room $room + * @param IL10N $l + * @return INotification + * @throws AlreadyProcessedException + * @throws UnknownNotificationException + */ + protected function parsePasswordRequest(INotification $notification, Room $room, IL10N $l): INotification { + if ($notification->getObjectType() !== 'call') { + throw new UnknownNotificationException('Unknown object type'); + } + + try { + $share = $this->shareManager->getShareByToken($room->getObjectId()); + } catch (ShareNotFound $e) { + throw new AlreadyProcessedException(); + } + + try { + $file = [ + 'type' => 'highlight', + 'id' => (string)$share->getNodeId(), + 'name' => $share->getNode()->getName(), + ]; + } catch (\OCP\Files\NotFoundException $e) { + throw new AlreadyProcessedException(); + } + + $callIsActive = $this->notificationManager->isPreparingPushNotification() || $this->participantService->hasActiveSessionsInCall($room); + if ($callIsActive) { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Answer call'), true, true); + } else { + $notification = $this->addActionButton($notification, 'call_view', $l->t('Call back')); + } + + if ($share->getShareType() === IShare::TYPE_EMAIL) { + $sharedWith = $share->getSharedWith(); + if ($callIsActive) { + $subject = $l->t('{email} is requesting the password to access {file}'); + } else { + $subject = $l->t('{email} tried to request the password to access {file}'); + } + + $notification + ->setParsedSubject(str_replace(['{email}', '{file}'], [$sharedWith, $file['name']], $subject)) + ->setRichSubject($subject, [ + 'email' => [ + 'type' => 'email', + 'id' => $sharedWith, + 'name' => $sharedWith, + ], + 'file' => $file, + ] + ); + } else { + if ($callIsActive) { + $subject = $l->t('Someone is requesting the password to access {file}'); + } else { + $subject = $l->t('Someone tried to request the password to access {file}'); + } + + $notification + ->setParsedSubject(str_replace('{file}', $file['name'], $subject)) + ->setRichSubject($subject, ['file' => $file]); + } + + return $notification; + } + + protected function addActionButton(INotification $notification, string $labelKey, string $label, bool $primary = true, bool $directCallLink = false): INotification { + $link = $notification->getLink(); + if ($directCallLink) { + $link .= '#direct-call'; + } + + $action = $notification->createAction(); + $action->setLabel($labelKey) + ->setParsedLabel($label) + ->setLink($link, IAction::TYPE_WEB) + ->setPrimary($primary); + + $notification->addParsedAction($action); + + return $notification; + } + + /** + * @throws UnknownNotificationException + */ + protected function parseHostedSignalingServer(INotification $notification, IL10N $l): INotification { + $action = $notification->createAction(); + $action->setLabel('open_settings') + ->setParsedLabel($l->t('Open settings')) + ->setLink($notification->getLink(), IAction::TYPE_WEB) + ->setPrimary(true); + + $parsedParameters = []; + $icon = ''; + switch ($notification->getSubject()) { + case 'added': + $subject = $l->t('Hosted signaling server added'); + $message = $l->t('The hosted signaling server is now configured and will be used.'); + $icon = $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/video.svg')); + break; + case 'removed': + $subject = $l->t('Hosted signaling server removed'); + $message = $l->t('The hosted signaling server was removed and will not be used anymore.'); + $icon = $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/video-off.svg')); + break; + case 'changed-status': + $subject = $l->t('Hosted signaling server changed'); + $message = $l->t('The hosted signaling server account has changed the status from "{oldstatus}" to "{newstatus}".'); + $icon = $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/video-switch.svg')); + + $parameters = $notification->getSubjectParameters(); + $parsedParameters = [ + 'oldstatus' => $this->createHPBParameter($parameters['oldstatus'], $l), + 'newstatus' => $this->createHPBParameter($parameters['newstatus'], $l), + ]; + break; + default: + throw new UnknownNotificationException('Unknown subject'); + } + + return $notification + ->setRichSubject($subject) + ->setRichMessage($message, $parsedParameters) + ->setIcon($icon) + ->addParsedAction($action); + } + + protected function hostedHPBStatusToLabel(string $status, IL10N $l): string { + return match ($status) { + 'pending' => $l->t('pending'), + 'active' => $l->t('active'), + 'expired' => $l->t('expired'), + 'blocked' => $l->t('blocked'), + 'error' => $l->t('error'), + default => $status, + }; + } + + protected function createHPBParameter(string $status, IL10N $l): array { + return [ + 'type' => 'highlight', + 'id' => $status, + 'name' => $this->hostedHPBStatusToLabel($status, $l), + ]; + } + + protected function parseCertificateExpiration(INotification $notification, IL10N $l): INotification { + $subjectParameters = $notification->getSubjectParameters(); + + $host = $subjectParameters['host']; + $daysToExpire = $subjectParameters['days_to_expire']; + + if ($daysToExpire > 0) { + $subject = $l->t('The certificate of {host} expires in {days} days'); + } else { + $subject = $l->t('The certificate of {host} expired'); + } + + $subject = str_replace( + ['{host}', '{days}'], + [$host, $daysToExpire], + $subject + ); + + $notification->setParsedSubject($subject); + + return $notification; + } + + protected function getCircle(string $circleId): array { + if (!$this->appManager->isEnabledForUser('circles')) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + if (!isset($this->circleNames[$circleId])) { + $this->loadCircleDetails($circleId); + } + + if (!isset($this->circleNames[$circleId])) { + return [ + 'type' => 'highlight', + 'id' => $circleId, + 'name' => $circleId, + ]; + } + + return [ + 'type' => 'circle', + 'id' => $circleId, + 'name' => $this->circleNames[$circleId], + 'link' => $this->circleLinks[$circleId], + ]; + } + + protected function loadCircleDetails(string $circleId): void { + try { + $circlesManager = Server::get(CirclesManager::class); + $circlesManager->startSuperSession(); + $circle = $circlesManager->getCircle($circleId); + + $this->circleNames[$circleId] = $circle->getDisplayName(); + $this->circleLinks[$circleId] = $circle->getUrl(); + } catch (\Exception) { + } finally { + $circlesManager?->stopSession(); + } + } +} diff --git a/lib/OCP/Conversation.php b/lib/OCP/Conversation.php new file mode 100644 index 0000000..8a0a1ff --- /dev/null +++ b/lib/OCP/Conversation.php @@ -0,0 +1,33 @@ +room->getToken(); + } + + #[\Override] + public function getAbsoluteUrl(): string { + return $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $this->room->getToken()]); + } +} diff --git a/lib/OCP/TalkBackend.php b/lib/OCP/TalkBackend.php new file mode 100644 index 0000000..35498b6 --- /dev/null +++ b/lib/OCP/TalkBackend.php @@ -0,0 +1,71 @@ +getMeetingStartDate() !== null) { + $objectType = Room::OBJECT_TYPE_EVENT; + $objectId = $options->getMeetingStartDate()->getTimestamp() . '#' . $options->getMeetingEndDate()->getTimestamp(); + } + } + + $room = $this->manager->createRoom( + $options->isPublic() ? Room::TYPE_PUBLIC : Room::TYPE_GROUP, + $name, + $objectType, + $objectId, + ); + + if (!empty($moderators)) { + $users = []; + foreach ($moderators as $moderator) { + $users[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $moderator->getUID(), + 'participantType' => Participant::MODERATOR, + ]; + } + + $this->participantService->addUsers($room, $users); + } + + return new Conversation($this->url, $room); + } + + #[\Override] + public function deleteConversation(string $id): void { + $room = $this->manager->getRoomByToken($id); + $this->roomService->deleteRoom($room); + } +} diff --git a/lib/Participant.php b/lib/Participant.php new file mode 100644 index 0000000..f564954 --- /dev/null +++ b/lib/Participant.php @@ -0,0 +1,131 @@ +room; + } + + public function getAttendee(): Attendee { + return $this->attendee; + } + + public function getSession(): ?Session { + return $this->session; + } + + public function setSession(Session $session): void { + $this->session = $session; + } + + public function isGuest(): bool { + $participantType = $this->attendee->getParticipantType(); + return \in_array($participantType, [self::GUEST, self::GUEST_MODERATOR], true); + } + + public function hasModeratorPermissions(bool $guestModeratorAllowed = true): bool { + $participantType = $this->attendee->getParticipantType(); + if (!$guestModeratorAllowed) { + return \in_array($participantType, [self::OWNER, self::MODERATOR], true); + } + + return \in_array($participantType, [self::OWNER, self::MODERATOR, self::GUEST_MODERATOR], true); + } + + public function canStartCall(IConfig $config): bool { + if ($this->room->getType() === Room::TYPE_NOTE_TO_SELF) { + return false; + } + + $defaultStartCall = (int)$config->getAppValue('spreed', 'start_calls', (string)Room::START_CALL_EVERYONE); + + if ($defaultStartCall === Room::START_CALL_NOONE) { + return false; + } + + if (!($this->getPermissions() & Attendee::PERMISSIONS_CALL_START)) { + return false; + } + + if ($defaultStartCall === Room::START_CALL_EVERYONE) { + return true; + } + + if ($defaultStartCall === Room::START_CALL_USERS && (!$this->isGuest() || $this->hasModeratorPermissions())) { + return true; + } + + if ($defaultStartCall === Room::START_CALL_MODERATORS && $this->hasModeratorPermissions()) { + return true; + } + + return false; + } + + public function getPermissions(): int { + $permissions = $this->getPermissionsFromFallbackChain(); + + if ($this->hasModeratorPermissions()) { + // Moderators can always do everything + $permissions = Attendee::PERMISSIONS_MAX_DEFAULT; + } + + return $permissions; + } + + protected function getPermissionsFromFallbackChain(): int { + if ($this->getAttendee()->getPermissions() !== Attendee::PERMISSIONS_DEFAULT) { + return $this->getAttendee()->getPermissions(); + } + + if ($this->room->getDefaultPermissions() !== Attendee::PERMISSIONS_DEFAULT) { + // The conversation has some permissions set + return $this->room->getDefaultPermissions(); + } + + return Server::get(Config::class)->getDefaultPermissions(); + } +} diff --git a/lib/Profile/TalkAction.php b/lib/Profile/TalkAction.php new file mode 100644 index 0000000..a91f977 --- /dev/null +++ b/lib/Profile/TalkAction.php @@ -0,0 +1,85 @@ +targetUser = $targetUser; + } + + #[\Override] + public function getAppId(): string { + return Application::APP_ID; + } + + #[\Override] + public function getId(): string { + return 'talk'; + } + + #[\Override] + public function getDisplayId(): string { + return $this->l->t('Contact via Talk'); + } + + #[\Override] + public function getTitle(): string { + $visitingUser = $this->userSession->getUser(); + if (!$visitingUser || $visitingUser === $this->targetUser) { + return $this->l->t('Open Talk'); + } + return $this->l->t('Talk to %s', [$this->targetUser->getDisplayName()]); + } + + #[\Override] + public function getPriority(): int { + return 10; + } + + #[\Override] + public function getIcon(): string { + return $this->urlGenerator->getAbsoluteURL($this->urlGenerator->imagePath(Application::APP_ID, 'app-dark.svg')); + } + + #[\Override] + public function getTarget(): ?string { + $visitingUser = $this->userSession->getUser(); + if ( + !$visitingUser + || $this->config->isDisabledForUser($this->targetUser) + || $this->config->isDisabledForUser($visitingUser) + ) { + return null; + } + if ($visitingUser === $this->targetUser) { + return $this->urlGenerator->linkToRouteAbsolute('spreed.Page.index'); + } + return $this->urlGenerator->linkToRouteAbsolute('spreed.Page.index') . '?callUser=' . $this->targetUser->getUID(); + } +} diff --git a/lib/PublicShare/TemplateLoader.php b/lib/PublicShare/TemplateLoader.php new file mode 100644 index 0000000..c888e3b --- /dev/null +++ b/lib/PublicShare/TemplateLoader.php @@ -0,0 +1,83 @@ + + */ +class TemplateLoader implements IEventListener { + use TInitialState; + + public function __construct( + IInitialState $initialState, + ICacheFactory $memcacheFactory, + Config $talkConfig, + IConfig $serverConfig, + IGroupManager $groupManager, + LoggerInterface $logger, + ) { + $this->initialState = $initialState; + $this->talkConfig = $talkConfig; + $this->memcacheFactory = $memcacheFactory; + $this->serverConfig = $serverConfig; + $this->groupManager = $groupManager; + $this->logger = $logger; + } + + /** + * Load the "Talk sidebar" UI in the public share page for the given share. + * @param Event $event + */ + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeTemplateRenderedEvent) { + return; + } + + if ($event->getScope() !== null) { + // If the event has a scope, it's not the default share page, but e.g. authentication + return; + } + + if ($this->serverConfig->getAppValue('spreed', 'conversations_files', '1') !== '1' + || $this->serverConfig->getAppValue('spreed', 'conversations_files_public_shares', '1') !== '1') { + return; + } + + $share = $event->getShare(); + if ($share->getNodeType() !== FileInfo::TYPE_FILE) { + return; + } + + Util::addStyle(Application::APP_ID, 'talk-icons'); + Util::addScript(Application::APP_ID, 'talk-public-share-sidebar'); + Util::addStyle(Application::APP_ID, 'talk-public-share-sidebar'); + + $this->publishInitialStateForGuest(); + } +} diff --git a/lib/PublicShareAuth/Listener.php b/lib/PublicShareAuth/Listener.php new file mode 100644 index 0000000..86e27d1 --- /dev/null +++ b/lib/PublicShareAuth/Listener.php @@ -0,0 +1,157 @@ + + */ +class Listener implements IEventListener { + public function __construct( + protected ParticipantService $participantService, + protected RoomService $roomService, + ) { + } + + #[\Override] + public function handle(Event $event): void { + match (get_class($event)) { + BeforeUserJoinedRoomEvent::class => $this->preventExtraUsersFromJoining($event->getRoom(), $event->getUser()->getUID()), + BeforeGuestJoinedRoomEvent::class => $this->preventExtraGuestsFromJoining($event->getRoom()), + BeforeAttendeesAddedEvent::class => $this->preventExtraUsersFromBeingAdded($event->getRoom(), $event->getAttendees()), + AttendeeRemovedEvent::class, + SessionLeftRoomEvent::class, + GuestsCleanedUpEvent::class => $this->destroyRoomOnParticipantLeave($event->getRoom()), + }; + } + + /** + * Prevents other users from joining if there is already another participant + * in the room besides the owner. + * + * This method should be called before a user joins a room. + * + * @param Room $room + * @param string $userId + * @throws RoomNotFoundException + */ + protected function preventExtraUsersFromJoining(Room $room, string $userId): void { + if ($room->getObjectType() !== Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return; + } + + try { + $participant = $this->participantService->getParticipant($room, $userId, false); + if ($participant->getAttendee()->getParticipantType() === Participant::OWNER) { + return; + } + } catch (ParticipantNotFoundException) { + } + + if ($this->participantService->getNumberOfActors($room) > 1) { + throw new RoomNotFoundException('Only the owner and another participant are allowed in rooms to request the password for a share'); + } + } + + /** + * Prevents other guests from joining if there is already another + * participant in the room besides the owner. + * + * This method should be called before a guest joins a room. + * + * @param Room $room + * @throws RoomNotFoundException + */ + protected function preventExtraGuestsFromJoining(Room $room): void { + if ($room->getObjectType() !== Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return; + } + + if ($this->participantService->getNumberOfActors($room) > 1) { + throw new RoomNotFoundException('Only the owner and another participant are allowed in rooms to request the password for a share'); + } + } + + /** + * Prevents other users from being added to the room (as they will not be + * able to join). + * + * This method should be called before a user is added to a room. + * + * @param Room $room + * @param Attendee[] $attendees + * @throws RoomNotFoundException + */ + protected function preventExtraUsersFromBeingAdded(Room $room, array $attendees): void { + if ($room->getObjectType() !== Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return; + } + + if (empty($attendees)) { + return; + } + + // Events with more than one participant can be directly aborted, as + // when the owner is added during room creation or a user self-joins the + // event will always have just one participant. + if (count($attendees) > 1) { + throw new RoomNotFoundException('Only the owner and another participant are allowed in rooms to request the password for a share'); + } + + $attendee = $attendees[0]; + if ($attendee->getParticipantType() !== Participant::OWNER && $attendee->getParticipantType() !== Participant::USER_SELF_JOINED) { + throw new RoomNotFoundException('Only the owner and another participant are allowed in rooms to request the password for a share'); + } + } + + /** + * Destroys the PublicShareAuth room as soon as one of the participant + * leaves the room. + * + * This method should be called after a user or guest leaves a room for any + * reason (no matter if the user or guest removed herself, was removed or + * timed out). + * + * @param Room $room + */ + protected function destroyRoomOnParticipantLeave(Room $room): void { + if ($room->getObjectType() !== Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return; + } + + $this->roomService->deleteRoom($room); + } +} diff --git a/lib/PublicShareAuth/TemplateLoader.php b/lib/PublicShareAuth/TemplateLoader.php new file mode 100644 index 0000000..fa8f48b --- /dev/null +++ b/lib/PublicShareAuth/TemplateLoader.php @@ -0,0 +1,78 @@ + + */ +class TemplateLoader implements IEventListener { + use TInitialState; + + public function __construct( + IInitialState $initialState, + ICacheFactory $memcacheFactory, + Config $talkConfig, + IConfig $serverConfig, + IGroupManager $groupManager, + LoggerInterface $logger, + ) { + $this->initialState = $initialState; + $this->talkConfig = $talkConfig; + $this->memcacheFactory = $memcacheFactory; + $this->serverConfig = $serverConfig; + $this->groupManager = $groupManager; + $this->logger = $logger; + } + + /** + * Load the "Video verification" UI in the public share auth page. + * @param Event $event + */ + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeTemplateRenderedEvent) { + return; + } + + if ($event->getScope() !== BeforeTemplateRenderedEvent::SCOPE_PUBLIC_SHARE_AUTH) { + // If the scope is not the authentication page we don't load this part of the Talk UI + return; + } + + // Check if "Video verification" option was set + $share = $event->getShare(); + if (!$share->getSendPasswordByTalk()) { + return; + } + + Util::addStyle(Application::APP_ID, 'talk-icons'); + Util::addScript(Application::APP_ID, 'talk-public-share-auth-sidebar'); + Util::addStyle(Application::APP_ID, 'talk-public-share-auth-sidebar'); + + $this->publishInitialStateForGuest(); + } +} diff --git a/lib/Recording/BackendNotifier.php b/lib/Recording/BackendNotifier.php new file mode 100644 index 0000000..85923ee --- /dev/null +++ b/lib/Recording/BackendNotifier.php @@ -0,0 +1,169 @@ +clientService->newClient(); + try { + $response = $client->post($url, $params); + } catch (ServerException|ConnectException $e) { + if ($retries > 1) { + $this->logger->error('Failed to send message to recording server, ' . $retries . ' retries left!', ['exception' => $e]); + $this->doRequest($url, $params, $retries - 1); + } else { + $this->logger->error('Failed to send message to recording server, giving up!', ['exception' => $e]); + throw $e; + } + } catch (\Exception $e) { + $this->logger->error('Failed to send message to recording server', ['exception' => $e]); + throw $e; + } + } + + /** + * Perform a request to the recording backend. + * + * @param Room $room + * @param array $data + * @throws \Exception + */ + private function backendRequest(Room $room, array $data): void { + $recordingServers = $this->config->getRecordingServers(); + if (empty($recordingServers)) { + $this->logger->error('No configured recording server'); + return; + } + + // FIXME Currently clustering is not implemented in the recording + // server, so for now only the first configured server is taken into + // account to ensure that all the "stop" requests are sent to the same + // server that received the "start" request. + $recording = $recordingServers[0]; + $recording['server'] = rtrim($recording['server'], '/'); + + $url = '/api/v1/room/' . $room->getToken(); + $url = $recording['server'] . $url; + if (str_starts_with($url, 'ws://')) { + $url = 'http://' . substr($url, 5); + } elseif (str_starts_with($url, 'wss://')) { + $url = 'https://' . substr($url, 6); + } + $body = json_encode($data); + $headers = [ + 'Content-Type' => 'application/json', + ]; + + $random = $this->secureRandom->generate(64); + $hash = hash_hmac('sha256', $random . $body, $this->config->getRecordingSecret()); + $headers['Talk-Recording-Random'] = $random; + $headers['Talk-Recording-Checksum'] = $hash; + $headers['Talk-Recording-Backend'] = $this->urlGenerator->getAbsoluteURL(''); + + $params = [ + 'headers' => $headers, + 'body' => $body, + 'nextcloud' => [ + 'allow_local_address' => true, + ], + ]; + if (empty($recording['verify'])) { + $params['verify'] = false; + } + $this->doRequest($url, $params); + } + + public function start(Room $room, int $status, string $owner, Participant $participant): void { + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'start', + 'start' => [ + 'status' => $status, + 'owner' => $owner, + 'actor' => [ + 'type' => $participant->getAttendee()->getActorType(), + 'id' => $participant->getAttendee()->getActorId(), + ], + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Send start message: {token} ({duration})', [ + 'token' => $room->getToken(), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-recording', + ]); + } + + public function stop(Room $room, ?Participant $participant = null): void { + $parameters = []; + if ($participant !== null) { + $parameters['actor'] = [ + 'type' => $participant->getAttendee()->getActorType(), + 'id' => $participant->getAttendee()->getActorId(), + ]; + } + + $start = microtime(true); + try { + $this->backendRequest($room, [ + 'type' => 'stop', + 'stop' => $parameters, + ]); + } catch (ClientException $e) { + if ($e->getResponse()->getStatusCode() === Http::STATUS_NOT_FOUND) { + throw new RecordingNotFoundException(); + } + + throw $e; + } + $duration = microtime(true) - $start; + $this->logger->debug('Send stop message: {token} ({duration})', [ + 'token' => $room->getToken(), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-recording', + ]); + } +} diff --git a/lib/Recording/Listener.php b/lib/Recording/Listener.php new file mode 100644 index 0000000..6b1597c --- /dev/null +++ b/lib/Recording/Listener.php @@ -0,0 +1,109 @@ + + */ +class Listener implements IEventListener { + public function __construct( + protected RecordingService $recordingService, + protected ConsentService $consentService, + protected IRootFolder $rootFolder, + protected LoggerInterface $logger, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof AbstractTaskProcessingEvent) { + try { + $this->handleTranscriptionEvents($event); + } catch (\Throwable $e) { + $this->logger->error('An error occurred while processing recording AI follow-up task', ['exception' => $e]); + } + return; + } + + if ($event instanceof ARoomEvent && $event->getRoom()->isFederatedConversation()) { + return; + } + + match (get_class($event)) { + RoomDeletedEvent::class => $this->roomDeleted($event), + CallEndedEvent::class, + CallEndedForEveryoneEvent::class => $this->endRecordingOnCallEnd($event), + }; + } + + public function handleTranscriptionEvents(AbstractTaskProcessingEvent $event): void { + $task = $event->getTask(); + if ($task->getAppId() !== Application::APP_ID) { + return; + } + + // 'call/transcription/' . $room->getToken() + $customId = $task->getCustomId(); + if (str_starts_with($customId, 'call/transcription/')) { + $aiType = 'transcript'; + $roomToken = substr($customId, strlen('call/transcription/')); + + $fileId = (int)($task->getInput()['input'] ?? null); + } elseif (str_starts_with($customId, 'call/summary/')) { + $aiType = 'summary'; + [$roomToken, $fileId] = explode('/', substr($customId, strlen('call/summary/'))); + $fileId = (int)$fileId; + } else { + return; + } + + if ($fileId === 0) { + return; + } + + if ($task->getUserId() === null) { + return; + } + + if ($event instanceof TaskSuccessfulEvent) { + $this->recordingService->storeTranscript($task->getUserId(), $roomToken, $fileId, $task->getOutput()['output'] ?? '', $aiType); + } elseif ($event instanceof TaskFailedEvent) { + $this->recordingService->notifyAboutFailedTranscript($task->getUserId(), $roomToken, $fileId, $aiType); + } + } + + protected function roomDeleted(RoomDeletedEvent $event): void { + $this->consentService->deleteByRoom($event->getRoom()); + } + + protected function endRecordingOnCallEnd(ACallEndedEvent $event): void { + $callRecording = $event->getRoom()->getCallRecording(); + if ($callRecording !== Room::RECORDING_NONE && $callRecording !== Room::RECORDING_FAILED) { + $this->recordingService->stop($event->getRoom()); + } + } +} diff --git a/lib/ResponseDefinitions.php b/lib/ResponseDefinitions.php new file mode 100644 index 0000000..0b8eaec --- /dev/null +++ b/lib/ResponseDefinitions.php @@ -0,0 +1,560 @@ +, + * messageType: string, + * systemMessage: string, + * } + * + * @psalm-type TalkChatMessage = TalkBaseMessage&array{ + * deleted?: true, + * id: int, + * isReplyable: bool, + * markdown: bool, + * reactions: array|\stdClass, + * reactionsSelf?: list, + * referenceId: string, + * timestamp: int, + * token: string, + * lastEditActorDisplayName?: string, + * lastEditActorId?: string, + * lastEditActorType?: string, + * lastEditTimestamp?: int, + * silent?: bool, + * threadId?: int, + * isThread?: bool, + * threadTitle?: string, + * threadReplies?: int, + * } + * + * @psalm-type TalkChatProxyMessage = TalkBaseMessage + * + * @psalm-type TalkRoomLastMessage = TalkChatMessage|TalkChatProxyMessage + * + * @psalm-type TalkDeletedChatMessage = array{ + * id: int, + * deleted: true, + * } + * + * @psalm-type TalkChatMessageWithParent = TalkChatMessage&array{parent?: TalkChatMessage|TalkDeletedChatMessage} + * + * @psalm-type TalkChatReminder = array{ + * messageId: int, + * timestamp: int, + * token: string, + * userId: string, + * } + * + * @psalm-type TalkChatReminderUpcoming = array{ + * actorDisplayName: string, + * actorId: string, + * actorType: string, + * message: string, + * messageId: int, + * messageParameters: array, + * reminderTimestamp: int, + * roomToken: string, + * } + * + * @psalm-type TalkFederationInvite = array{ + * id: int, + * state: int, + * localCloudId: string, + * localToken: string, + * remoteAttendeeId: int, + * remoteServerUrl: string, + * remoteToken: string, + * roomName: string, + * userId: string, + * inviterCloudId: string, + * inviterDisplayName: string, + * } + * + * @psalm-type TalkMatterbridgeConfigFields = list> + * + * @psalm-type TalkMatterbridge = array{ + * enabled: bool, + * parts: TalkMatterbridgeConfigFields, + * pid: int, + * } + * + * @psalm-type TalkMatterbridgeProcessState = array{ + * log: string, + * running: bool, + * } + * + * @psalm-type TalkMatterbridgeWithProcessState = TalkMatterbridge&TalkMatterbridgeProcessState + * + * @psalm-type TalkParticipant = array{ + * actorId: string, + * invitedActorId?: string, + * actorType: string, + * attendeeId: int, + * attendeePermissions: int, + * attendeePin: string, + * displayName: string, + * inCall: int, + * lastPing: int, + * participantType: int, + * permissions: int, + * roomToken: string, + * sessionIds: list, + * status?: string, + * statusClearAt?: ?int, + * statusIcon?: ?string, + * statusMessage?: ?string, + * phoneNumber?: ?string, + * callId?: ?string, + * } + * + * @psalm-type TalkPollVote = array{ + * actorDisplayName: string, + * actorId: string, + * actorType: string, + * optionId: int, + * } + * + * @psalm-type TalkPollDraft = array{ + * actorDisplayName: string, + * actorId: non-empty-string, + * actorType: TalkActorTypes, + * id: int<1, max>, + * maxVotes: int<0, max>, + * options: list, + * question: non-empty-string, + * resultMode: 0|1, + * status: 0|1|2, + * } + * + * @psalm-type TalkPoll = TalkPollDraft&array{ + * details?: list, + * numVoters?: int<0, max>, + * votedSelf?: list, + * votes?: array, + * } + * + * @psalm-type TalkReaction = array{ + * actorDisplayName: string, + * actorId: string, + * actorType: string, + * timestamp: int, + * } + * + * @psalm-type TalkInvitationList = array{ + * users?: list, + * federated_users?: list, + * groups?: list, + * emails?: list, + * phones?: list, + * teams?: list, + * } + * + * @psalm-type TalkRoom = array{ + * // The unique identifier for the given actor type + * actorId: string, + * // The cloud id of the invited user + * invitedActorId?: string, + * // Actor type of the current user (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-types)) + * actorType: string, + * // Unique attendee id + * attendeeId: int, + * // Dedicated permissions for the current participant, if not `Custom` this are not the resulting permissions (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions)) + * attendeePermissions: int, + * // Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute) + * attendeePin: ?string, + * // Version of conversation avatar used to easier expiration of the avatar in case a moderator updates it, since the avatar endpoint should be cached for 24 hours. (only available with `avatar` capability) + * avatarVersion: string, + * // Breakout room configuration mode (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-modes)) (only available with `breakout-rooms-v1` capability) + * breakoutRoomMode: int, + * // Breakout room status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-status)) (only available with `breakout-rooms-v1` capability) + * breakoutRoomStatus: int, + * // Combined flag of all participants in the current call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-in-call-flag), only available with `conversation-call-flags` capability) + * callFlag: int, + * // Call permissions, if not `Custom` this are not the resulting permissions, if set they will reset after the end of the call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions)) + * callPermissions: int, + * // Type of call recording (see [Constants - Call recording status](https://nextcloud-talk.readthedocs.io/en/latest/constants#call-recording-status)) (only available with `recording-v1` capability) + * callRecording: 0|1|2|3|4|5, + * // Timestamp when the call was started (only available with `recording-v1` capability) + * callStartTime: int, + * // Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations) + * canDeleteConversation: bool, + * // Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation + * canEnableSIP: bool, + * // Flag if the user can leave the conversation (not possible for the last user with moderator permissions) + * canLeaveConversation: bool, + * // Flag if the user can start a new call in this conversation (joining is always possible) (only available with `start-call-flag` capability) + * canStartCall: bool, + * // Default permissions for new participants (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions)) + * defaultPermissions: int, + * // Description of the conversation (can also be empty) (only available with `room-description` capability) + * description: string, + * // `name` if non-empty, otherwise it falls back to a list of participants + * displayName: string, + * // Flag if the conversation has an active call + * hasCall: bool, + * // Flag if the conversation has a password + * hasPassword: bool, + * // Numeric identifier of the conversation + * id: int, + * // Flag if the conversation has a custom avatar (only available with `avatar` capability) + * isCustomAvatar: bool, + * // Flag if the conversation is favorited by the user + * isFavorite: bool, + * // Timestamp of the last activity in the conversation, in seconds and UTC time zone + * lastActivity: int, + * // ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability) + * lastCommonReadMessage: int, + * // Last message in a conversation if available, otherwise empty. **Note:** Even when given the message will not contain the `parent` or `reactionsSelf` attribute due to performance reasons + * lastMessage?: TalkRoomLastMessage, + * // Timestamp of the user's session making the request + * lastPing: int, + * // ID of the last read message in a room (only available with `chat-read-marker` capability) + * lastReadMessage: int, + * // Listable scope for the room (only available with `listable-rooms` capability) + * listable: int, + * // ID of the language to use for live transcriptions in the room, + * liveTranscriptionLanguageId: string, + * // Webinar lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability) (See [Webinar lobby states](https://nextcloud-talk.readthedocs.io/en/latest/constants#webinar-lobby-states)) + * lobbyState: int, + * // Timestamp when the lobby will be automatically disabled (only available with `webinary-lobby` capability) + * lobbyTimer: int, + * // Whether all participants can mention using `@all` or only moderators (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#mention-permissions)) (only available with `mention-permissions` capability) + * mentionPermissions: 0|1, + * // The message expiration time in seconds in this chat. Zero if disabled. (only available with `message-expiration` capability) + * messageExpiration: int, + * // Name of the conversation (can also be empty) + * name: string, + * notificationCalls: int, + * // The notification level for the user (See [Participant notification levels](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-notification-levels)) + * notificationLevel: int, + * // See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types) documentation for explanation + * objectId: string, + * // The type of object that the conversation is associated with (See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types)) + * objectType: string, + * // "In call" flags of the user's session making the request (only available with `in-call-flags` capability) + * participantFlags: int, + * // Permissions level of the current user + * participantType: int, + * // Combined final permissions for the current participant, permissions are picked in order of attendee then call then default and the first which is `Custom` will apply (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions)) + * permissions: int, + * // Read-only state for the current user (only available with `read-only-rooms` capability) + * readOnly: int, + * // Whether recording consent is required before joining a call (Only 0 and 1 will be returned, see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#recording-consent-required)) (only available with `recording-consent` capability) + * recordingConsent: int, + * remoteServer?: string, + * remoteToken?: string, + * // `'0'` if not connected, otherwise an up to 512 character long string that is the identifier of the user's session making the request. Should only be used to pre-check if the user joined already with this session, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](https://nextcloud-talk.readthedocs.io/en/latest/participant/#get-list-of-participants-in-a-conversation) + * sessionId: string, + * // SIP enable status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#sip-states)) + * sipEnabled: int, + * // Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status + * status?: string, + * // Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status + * statusClearAt?: ?int, + * // Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status + * statusIcon?: ?string, + * // Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status + * statusMessage?: ?string, + * // Token identifier of the conversation which is used for further interaction + * token: string, + * // See list of conversation types in the [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants/#conversation-types) + * type: int, + * // Flag if the user was mentioned since their last visit + * unreadMention: bool, + * // Flag if the user was mentioned directly (ignoring `@all` mentions) since their last visit (only available with `direct-mention-flag` capability) + * unreadMentionDirect: bool, + * // Number of unread chat messages in the conversation (only available with `chat-v2` capability) + * unreadMessages: int, + * // Flag if the conversation is archived by the user (only available with `archived-conversations-v2` capability) + * isArchived: bool, + * // Required capability: `important-conversations` + * isImportant: bool, + * // Required capability: `sensitive-conversations` + * isSensitive: bool, + * } + * + * @psalm-type TalkDashboardEventAttachment = array{ + * calendars: non-empty-list, + * fmttype: string, + * filename: string, + * fileid: int, + * preview: boolean, + * previewLink: ?string, + * } + * + * @psalm-type TalkDashboardEventCalendar = array{ + * principalUri: string, + * calendarName: string, + * calendarColor: ?string, + * } + * + * @psalm-type TalkDashboardEvent = array{ + * calendars: non-empty-list, + * eventName: string, + * eventDescription: ?string, + * eventAttachments: array, + * eventLink: string, + * start: int, + * end: int, + * roomToken: string, + * roomAvatarVersion: string, + * roomName: string, + * roomDisplayName: string, + * roomType: int, + * roomActiveSince: ?int, + * invited: ?int, + * accepted: ?int, + * tentative: ?int, + * declined: ?int, + * } + * + * @psalm-type TalkRoomWithInvalidInvitations = TalkRoom&array{ + * invalidParticipants: TalkInvitationList, + * } + * + * @psalm-type TalkSignalingSession = array{ + * actorId: string, + * actorType: string, + * inCall: int, + * lastPing: int, + * participantPermissions: int, + * roomId: int, + * sessionId: string, + * userId: string, + * } + * + * @psalm-type TalkSignalingFederationSettings = array{ + * server: string, + * nextcloudServer: string, + * helloAuthParams: array{ + * token: string, + * }, + * roomId: string, + * } + * + * @psalm-type TalkSignalingSettings = array{ + * federation: TalkSignalingFederationSettings|null, + * helloAuthParams?: array{ + * "1.0": array{ + * userid: ?string, + * ticket: string, + * }, + * "2.0": array{ + * token: string, + * }, + * }, + * hideWarning: bool, + * server: string, + * signalingMode: string, + * sipDialinInfo: string, + * stunservers: list}>, + * ticket?: string, + * turnservers: list, username: string, credential: mixed}>, + * userId: ?string, + * } + * + * @psalm-type TalkThread = array{ + * id: positive-int, + * roomToken: string, + * title: string, + * lastMessageId: non-negative-int, + * lastActivity: non-negative-int, + * numReplies: non-negative-int, + * } + * + * @psalm-type TalkThreadAttendee = array{ + * notificationLevel: 0|1|2|3, + * } + * + * @psalm-type TalkThreadInfo = array{ + * thread: TalkThread, + * attendee: TalkThreadAttendee, + * first: ?TalkChatMessage, + * last: ?TalkChatMessage, + * } + * + * @psalm-type TalkCapabilities = array{ + * features: non-empty-list, + * features-local: non-empty-list, + * config: array{ + * attachments: array{ + * allowed: bool, + * folder?: string, + * }, + * call: array{ + * enabled: bool, + * breakout-rooms: bool, + * recording: bool, + * recording-consent: int, + * supported-reactions: list, + * // List of file names relative to the spreed/img/backgrounds/ web path, e.g. `2_home.jpg` + * predefined-backgrounds: list, + * // List of file paths relative to the server web root with leading slash, e.g. `/apps/spreed/img/backgrounds/2_home.jpg` + * predefined-backgrounds-v2: list, + * can-upload-background: bool, + * sip-enabled: bool, + * sip-dialout-enabled: bool, + * default-phone-region: string, + * can-enable-sip: bool, + * start-without-media: bool, + * max-duration: int, + * blur-virtual-background: bool, + * end-to-end-encryption: bool, + * live-transcription: bool, + * play-sounds: bool, + * grid-limit: int, + * grid-limit-enforced: bool, + * }, + * chat: array{ + * max-length: int, + * read-privacy: int, + * has-translation-providers: bool, + * has-translation-task-providers: bool, + * typing-privacy: int, + * summary-threshold: positive-int, + * matterbridge-enabled: bool, + * }, + * conversations: array{ + * can-create: bool, + * force-passwords: bool, + * list-style: 'two-lines'|'compact', + * description-length: positive-int, + * retention-event: non-negative-int, + * retention-phone: non-negative-int, + * retention-instant-meetings: non-negative-int, + * }, + * federation: array{ + * enabled: bool, + * incoming-enabled: bool, + * outgoing-enabled: bool, + * only-trusted-servers: bool, + * }, + * previews: array{ + * max-gif-size: int, + * }, + * signaling: array{ + * session-ping-limit: int, + * mode: 'internal'|'external'|'conversation_cluster', + * hello-v2-token-key?: string, + * }, + * experiments: array{ + * enabled: non-negative-int, + * }, + * permissions: array{ + * max-default: int, + * max-custom: int, + * default: int, + * }, + * }, + * config-local: array>, + * version: string, + * } + * + * @psalm-type TalkLiveTranscriptionLanguage = array{ + * name: string, + * metadata: array{ + * separator: string, + * rtl: bool, + * }, + * } + */ +class ResponseDefinitions { +} diff --git a/lib/Room.php b/lib/Room.php new file mode 100644 index 0000000..4795f4f --- /dev/null +++ b/lib/Room.php @@ -0,0 +1,620 @@ + $hasFederation + * @psalm-param self::RECORDING_* $callRecording + * @psalm-param self::MENTION_PERMISSIONS_* $mentionPermissions + */ + public function __construct( + private Manager $manager, + private IDBConnection $db, + private IEventDispatcher $dispatcher, + private ITimeFactory $timeFactory, + private int $id, + private int $type, + private int $readOnly, + private int $listable, + private int $messageExpiration, + private int $lobbyState, + private int $sipEnabled, + private ?int $assignedSignalingServer, + private string $token, + private string $name, + private string $description, + private string $password, + private string $avatar, + private string $remoteServer, + private string $remoteToken, + private int $defaultPermissions, + private int $callPermissions, + private int $callFlag, + private ?\DateTime $activeSince, + private ?\DateTime $lastActivity, + private int $lastMessageId, + private ?IComment $lastMessage, + private ?\DateTime $lobbyTimer, + private string $objectType, + private string $objectId, + private int $breakoutRoomMode, + private int $breakoutRoomStatus, + private int $callRecording, + private int $recordingConsent, + private int $hasFederation, + private int $mentionPermissions, + private string $liveTranscriptionLanguageId, + ) { + } + + public function getId(): int { + return $this->id; + } + + /** + * @return int + * @psalm-return Room::TYPE_* + */ + public function getType(): int { + return $this->type; + } + + /** + * @param int $type + * @psalm-param Room::TYPE_* $type + */ + public function setType(int $type): void { + $this->type = $type; + } + + public function getReadOnly(): int { + return $this->readOnly; + } + + /** + * @param int $readOnly Currently it is only allowed to change between + * `self::READ_ONLY` and `self::READ_WRITE` + * Also it's only allowed on rooms of type + * `self::TYPE_GROUP` and `self::TYPE_PUBLIC` + */ + public function setReadOnly(int $readOnly): void { + $this->readOnly = $readOnly; + } + + public function getListable(): int { + return $this->listable; + } + + /** + * @param int $newState New listable scope from self::LISTABLE_* + * Also it's only allowed on rooms of type + * `self::TYPE_GROUP` and `self::TYPE_PUBLIC` + */ + public function setListable(int $newState): void { + $this->listable = $newState; + } + + public function getMessageExpiration(): int { + return $this->messageExpiration; + } + + public function setMessageExpiration(int $messageExpiration): void { + $this->messageExpiration = $messageExpiration; + } + + public function getLobbyState(bool $validateTime = true): int { + if ($validateTime) { + $this->validateTimer(); + } + return $this->lobbyState; + } + + public function setLobbyState(int $lobbyState): void { + $this->lobbyState = $lobbyState; + } + + public function getLobbyTimer(bool $validateTime = true): ?\DateTime { + if ($validateTime) { + $this->validateTimer(); + } + return $this->lobbyTimer; + } + + public function setLobbyTimer(?\DateTime $lobbyTimer): void { + $this->lobbyTimer = $lobbyTimer; + } + + protected function validateTimer(): void { + if ($this->lobbyTimer !== null && $this->lobbyTimer < $this->timeFactory->getDateTime()) { + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setLobby($this, Webinary::LOBBY_NONE, null, true); + } + } + + public function getSIPEnabled(): int { + return $this->sipEnabled; + } + + public function setSIPEnabled(int $sipEnabled): void { + $this->sipEnabled = $sipEnabled; + } + + public function getAssignedSignalingServer(): ?int { + return $this->assignedSignalingServer; + } + + public function setAssignedSignalingServer(?int $assignedSignalingServer): void { + $this->assignedSignalingServer = $assignedSignalingServer; + } + + public function getToken(): string { + return $this->token; + } + + public function getName(): string { + if ($this->type === self::TYPE_ONE_TO_ONE) { + if ($this->name === '') { + // TODO use DI + $participantService = Server::get(ParticipantService::class); + // Fill the room name with the participants for 1-to-1 conversations + $users = $participantService->getParticipantUserIds($this); + sort($users); + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setName($this, json_encode($users), ''); + } elseif (!str_starts_with($this->name, '["')) { + // TODO use DI + $participantService = Server::get(ParticipantService::class); + // Not the json array, but the old fallback when someone left + $users = $participantService->getParticipantUserIds($this); + if (count($users) !== 2) { + $users[] = $this->name; + } + sort($users); + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setName($this, json_encode($users), ''); + } + } + return $this->name; + } + + public function setName(string $name): void { + $this->name = $name; + } + + public function getSecondParticipant(string $userId): string { + if ($this->getType() !== self::TYPE_ONE_TO_ONE) { + throw new \InvalidArgumentException('Not a one-to-one room'); + } + $participants = json_decode($this->getName(), true); + + foreach ($participants as $uid) { + if ($uid !== $userId) { + return $uid; + } + } + + return $this->getName(); + } + + public function getDisplayName(string $userId, bool $forceName = false): string { + return $this->manager->resolveRoomDisplayName($this, $userId, $forceName); + } + + public function getDescription(): string { + return $this->description; + } + + public function setDescription(string $description): void { + $this->description = $description; + } + + public function resetActiveSince(): void { + $this->activeSince = null; + $this->callFlag = Participant::FLAG_DISCONNECTED; + } + + public function getDefaultPermissions(): int { + return $this->defaultPermissions; + } + + public function setDefaultPermissions(int $defaultPermissions): void { + $this->defaultPermissions = $defaultPermissions; + } + + /** + * @deprecated + */ + public function getCallPermissions(): int { + return Attendee::PERMISSIONS_DEFAULT; + } + + /** + * @deprecated + */ + public function setCallPermissions(int $callPermissions): void { + $this->callPermissions = $callPermissions; + } + + public function getCallFlag(): int { + return $this->callFlag; + } + + public function getActiveSince(): ?\DateTime { + return $this->activeSince; + } + + public function getLastActivity(): ?\DateTime { + return $this->lastActivity; + } + + public function setLastActivity(\DateTime $now): void { + $this->lastActivity = $now; + } + + public function getLastMessageId(): int { + return $this->lastMessageId; + } + + public function setLastMessageId(int $lastMessageId): void { + $this->lastMessageId = $lastMessageId; + } + + public function getLastMessage(): ?IComment { + if ($this->isFederatedConversation()) { + return null; + } + + if ($this->lastMessageId && $this->lastMessage === null) { + $this->lastMessage = $this->manager->loadLastCommentInfo($this->lastMessageId); + if ($this->lastMessage === null) { + $this->lastMessageId = 0; + } + } + + return $this->lastMessage; + } + + public function setLastMessage(IComment $message): void { + $this->lastMessage = $message; + $this->lastMessageId = (int)$message->getId(); + } + + public function getObjectType(): string { + return $this->objectType; + } + + public function getObjectId(): string { + return $this->objectId; + } + + public function hasPassword(): bool { + return $this->password !== ''; + } + + public function getPassword(): string { + return $this->password; + } + + public function setPassword(string $password): void { + $this->password = $password; + } + + public function setAvatar(string $avatar): void { + $this->avatar = $avatar; + } + + public function getAvatar(): string { + return $this->avatar; + } + + public function getRemoteServer(): string { + return $this->remoteServer; + } + + /** + * Whether the conversation is a "proxy conversation" or the original hosted conversation + * @return bool + */ + public function isFederatedConversation(): bool { + return $this->remoteServer !== ''; + } + + public function getRemoteToken(): string { + return $this->remoteToken; + } + + public function setParticipant(?string $userId, Participant $participant): void { + // FIXME Also used with cloudId, need actorType checking? + $this->currentUser = $userId; + $this->participant = $participant; + } + + /** + * Return the room properties to send to the signaling server. + * + * @param string $userId + * @param bool $roomModified + * @return array + */ + public function getPropertiesForSignaling(string $userId, bool $roomModified = true): array { + $properties = [ + 'name' => $this->getDisplayName($userId), + 'type' => $this->getType(), + 'lobby-state' => $this->getLobbyState(), + 'lobby-timer' => $this->getLobbyTimer(), + 'read-only' => $this->getReadOnly(), + 'listable' => $this->getListable(), + 'active-since' => $this->getActiveSince(), + 'sip-enabled' => $this->getSIPEnabled(), + ]; + + if ($roomModified) { + $properties['description'] = $this->getDescription(); + } else { + $properties['participant-list'] = 'refresh'; + } + + $event = new BeforeSignalingRoomPropertiesSentEvent($this, $userId, $properties); + $this->dispatcher->dispatchTyped($event); + return $event->getProperties(); + } + + /** + * @param string|null $userId + * @param string|null|false $sessionId Set to false if you don't want to load a session (and save resources), + * string to try loading a specific session + * null to try loading "any" + * @return Participant + * @throws ParticipantNotFoundException When the user is not a participant + * @deprecated + */ + public function getParticipant(?string $userId, $sessionId = null): Participant { + if (!is_string($userId) || $userId === '') { + throw new ParticipantNotFoundException('Not a user'); + } + + if ($this->currentUser === $userId && $this->participant instanceof Participant) { + if (!$sessionId + || ($this->participant->getSession() instanceof Session + && $this->participant->getSession()->getSessionId() === $sessionId)) { + return $this->participant; + } + } + + $query = $this->db->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->where($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($this->getId()))) + ->setMaxResults(1); + + if ($sessionId !== false) { + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } else { + $helper->selectSessionsTable($query); // FIXME PROBLEM + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')); + } + } + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new ParticipantNotFoundException('User is not a participant'); + } + + if ($this->currentUser === $userId) { + $this->participant = $this->manager->createParticipantObject($this, $row); + return $this->participant; + } + + return $this->manager->createParticipantObject($this, $row); + } + + public function setActiveSince(\DateTime $since, int $callFlag): void { + if (!$this->activeSince) { + $this->activeSince = $since; + } + $this->callFlag |= $callFlag; + } + + public function getBreakoutRoomMode(): int { + return $this->breakoutRoomMode; + } + + public function setBreakoutRoomMode(int $mode): void { + $this->breakoutRoomMode = $mode; + } + + public function getBreakoutRoomStatus(): int { + return $this->breakoutRoomStatus; + } + + public function setBreakoutRoomStatus(int $status): void { + $this->breakoutRoomStatus = $status; + } + + /** + * @psalm-return self::RECORDING_* + */ + public function getCallRecording(): int { + return $this->callRecording; + } + + /** + * @psalm-param self::RECORDING_* $callRecording + */ + public function setCallRecording(int $callRecording): void { + $this->callRecording = $callRecording; + } + + /** + * @return RecordingService::CONSENT_REQUIRED_* + */ + public function getRecordingConsent(): int { + return $this->recordingConsent; + } + + /** + * @param int $recordingConsent + * @psalm-param RecordingService::CONSENT_REQUIRED_* $recordingConsent + */ + public function setRecordingConsent(int $recordingConsent): void { + $this->recordingConsent = $recordingConsent; + } + + /** + * @psalm-return int-mask-of + */ + public function hasFederatedParticipants(): int { + return $this->hasFederation; + } + + /** + * @param int $hasFederation + * @psalm-param int-mask-of $hasFederation (bit map) + */ + public function setFederatedParticipants(int $hasFederation): void { + $this->hasFederation = $hasFederation; + } + + /** + * @psalm-return self::MENTION_PERMISSIONS_* + */ + public function getMentionPermissions(): int { + return $this->mentionPermissions; + } + + /** + * @psalm-param self::MENTION_PERMISSIONS_* $mentionPermissions + */ + public function setMentionPermissions(int $mentionPermissions): void { + $this->mentionPermissions = $mentionPermissions; + } + + public function setObjectId(string $objectId): void { + $this->objectId = $objectId; + } + + public function setObjectType(string $objectType): void { + $this->objectType = $objectType; + } + + public function getLiveTranscriptionLanguageId(): string { + return $this->liveTranscriptionLanguageId; + } + + public function setLiveTranscriptionLanguageId(string $liveTranscriptionLanguageId): void { + $this->liveTranscriptionLanguageId = $liveTranscriptionLanguageId; + } +} diff --git a/lib/Search/ConversationSearch.php b/lib/Search/ConversationSearch.php new file mode 100644 index 0000000..b631fd2 --- /dev/null +++ b/lib/Search/ConversationSearch.php @@ -0,0 +1,184 @@ +l->t('Conversations'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getOrder(string $route, array $routeParameters): ?int { + $currentUser = $this->userSession->getUser(); + if ($currentUser && $this->talkConfig->isDisabledForUser($currentUser)) { + return null; + } + + if (str_starts_with($route, Application::APP_ID . '.')) { + // Active app, prefer Talk results + return -1; + } + + return 25; + } + + /** + * Search for user's conversations + * + * Cursor is the conversation token + * Results are sorted by display name and then conversation token + * + * @inheritDoc + */ + #[\Override] + public function search(IUser $user, ISearchQuery $query): SearchResult { + $rooms = $this->manager->getRoomsForUser($user->getUID()); + + $cursorKey = null; + $result = []; + foreach ($rooms as $room) { + if ($room->getType() === Room::TYPE_CHANGELOG) { + continue; + } + + $parameters = $query->getRouteParameters(); + if (isset($parameters['token']) + && $parameters['token'] === $room->getToken() + && str_starts_with($query->getRoute(), Application::APP_ID . '.')) { + // Don't search the current conversation. + // User most likely looks for other things with the same name + continue; + } + + $displayName = $room->getDisplayName($user->getUID()); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $otherUserId = str_replace( + json_encode($user->getUID()), + '', + $room->getName() + ); + if (mb_stripos($otherUserId, $query->getTerm()) === false + && mb_stripos($displayName, $query->getTerm()) === false) { + // Neither name nor displayname (one-to-one) match, skip + continue; + } + } elseif (mb_stripos($room->getName(), $query->getTerm()) === false) { + continue; + } + + $entry = new SearchResultEntry( + $this->avatarService->getAvatarUrl($room), + $displayName, + '', + $this->url->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]), + '', + true + ); + + $entry->addAttribute('conversation', $room->getToken()); + + $result[mb_strtolower($displayName . '#' . $room->getToken())] = $entry; + + if ($query->getCursor() === $room->getToken()) { + $cursorKey = mb_strtolower($displayName . '#' . $room->getToken()); + } + } + + ksort($result); + if (count($result) <= $query->getLimit()) { + return SearchResult::complete( + $this->l->t('Conversations'), + array_values($result), + ); + } + + $newCursorWithName = '#'; + if ($cursorKey) { + $foundCursor = false; + $filteredResults = []; + $lastPossibleCursor = '#'; + foreach ($result as $key => $entry) { + if ($cursorKey === $key) { + $foundCursor = true; + continue; + } + if (!$foundCursor) { + continue; + } + + if (count($filteredResults) === $query->getLimit()) { + // We already have enough results, but there are more, + // so we add the cursor for the next request. + $newCursorWithName = $lastPossibleCursor; + break; + } + + $filteredResults[] = $entry; + $lastPossibleCursor = $key; + } + } else { + $filteredResults = array_slice($result, 0, $query->getLimit()); + // Next page starts at the last result + $newCursorWithName = array_key_last($filteredResults); + } + + // Cursor is the token only (to survive renamed), + // but the array key is `display name#token`, so we split by the # + // and get the last part which is the token. + // If it's empty, there is no cursor for a next page + $parts = explode('#', $newCursorWithName); + $newCursor = end($parts); + + return SearchResult::paginated( + $this->l->t('Conversations'), + array_values($filteredResults), + $newCursor + ); + } +} diff --git a/lib/Search/CurrentMessageSearch.php b/lib/Search/CurrentMessageSearch.php new file mode 100644 index 0000000..0c2c16c --- /dev/null +++ b/lib/Search/CurrentMessageSearch.php @@ -0,0 +1,95 @@ +l->t('Messages in current conversation'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getOrder(string $route, array $routeParameters): ?int { + $currentUser = $this->userSession->getUser(); + if ($currentUser && $this->talkConfig->isDisabledForUser($currentUser)) { + return null; + } + + if ($route === 'spreed.Page.showCall') { + // In conversation, prefer this search results + return -3; + } + + // We are not returning something anyway. + return null; + } + + #[\Override] + protected function getSublineTemplate(): string { + return $this->l->t('{user}'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function search(IUser $user, ISearchQuery $query): SearchResult { + $title = $this->l->t('Messages'); + $currentToken = $this->getCurrentConversationToken($query); + if ($currentToken === '') { + return SearchResult::complete($title, []); + } + + $filter = $query->getFilter(self::CONVERSATION_FILTER); + if ($filter && $filter->get() !== $currentToken) { + return SearchResult::complete($title, []); + } + + try { + $room = $this->roomManager->getRoomForUserByToken( + $currentToken, + $user->getUID() + ); + } catch (RoomNotFoundException) { + return SearchResult::complete($title, []); + } + + try { + $this->participantService->getParticipant($room, $user->getUID(), false); + } catch (ParticipantNotFoundException) { + return SearchResult::complete($title, []); + } + + if ($room->isFederatedConversation()) { + return SearchResult::complete($title, []); + } + + return $this->performSearch($user, $query, $this->l->t('Messages'), [$room], true); + } +} diff --git a/lib/Search/MessageSearch.php b/lib/Search/MessageSearch.php new file mode 100644 index 0000000..ccaf12d --- /dev/null +++ b/lib/Search/MessageSearch.php @@ -0,0 +1,347 @@ +l->t('Messages'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getOrder(string $route, array $routeParameters): ?int { + $currentUser = $this->userSession->getUser(); + if ($currentUser && $this->talkConfig->isDisabledForUser($currentUser)) { + return null; + } + + if (str_starts_with($route, Application::APP_ID . '.')) { + // Active app, prefer Talk results + return -2; + } + + return 15; + } + + protected function getCurrentConversationToken(ISearchQuery $query): string { + if ($query->getRoute() === 'spreed.Page.showCall') { + return $query->getRouteParameters()['token']; + } + return ''; + } + + protected function getSublineTemplate(): string { + if ($this->isConversationFiltered) { + return $this->l->t('{user}'); + } + return $this->l->t('{user} in {conversation}'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function search(IUser $user, ISearchQuery $query): SearchResult { + $title = $this->l->t('Messages'); + $currentToken = $this->getCurrentConversationToken($query); + if ($currentToken !== '') { + $title = $this->l->t('Messages in other conversations'); + } + + $filter = $query->getFilter(self::CONVERSATION_FILTER); + if ($filter && $filter->get() !== $currentToken) { + $this->isConversationFiltered = true; + $title = $this->l->t('Messages'); + + try { + $rooms = [$this->roomManager->getRoomForUserByToken( + $filter->get(), + $user->getUID() + )]; + } catch (RoomNotFoundException) { + return SearchResult::complete($title, []); + } + } elseif ($filter) { + // The filter is the "Current conversation" so the CurrentMessageSearch will handle it + return SearchResult::complete($title, []); + } else { + $rooms = $this->roomManager->getRoomsForUser($user->getUID()); + } + + return $this->performSearch($user, $query, $title, $rooms, $this->isConversationFiltered); + } + + /** + * @param Room[] $rooms + */ + public function performSearch(IUser $user, ISearchQuery $query, string $title, array $rooms, bool $isCurrentMessageSearch = false): SearchResult { + $roomMap = []; + foreach ($rooms as $room) { + if (!$isCurrentMessageSearch + && $room->getType() === Room::TYPE_CHANGELOG) { + continue; + } + + if (!$isCurrentMessageSearch + && $this->getCurrentConversationToken($query) === $room->getToken()) { + // No search result from current conversation + continue; + } + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE) { + $participant = $this->participantService->getParticipant($room, $user->getUID(), false); + if (!($participant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + continue; + } + } + + if ($room->isFederatedConversation()) { + continue; + } + + $roomMap[(string)$room->getId()] = $room; + } + + if (empty($roomMap)) { + return SearchResult::complete($title, []); + } + + // Apply filters when available + $lowerTimeBoundary = $upperTimeBoundary = $actorType = $actorId = null; + if ($since = $query->getFilter(IFilter::BUILTIN_SINCE)?->get()) { + if ($since instanceof \DateTimeImmutable) { + $lowerTimeBoundary = $since; + } + } + + if ($until = $query->getFilter(IFilter::BUILTIN_UNTIL)?->get()) { + if ($until instanceof \DateTimeImmutable) { + $upperTimeBoundary = $until; + } + } + + if ($person = $query->getFilter(IFilter::BUILTIN_PERSON)?->get()) { + if ($person instanceof IUser) { + $actorType = Attendee::ACTOR_USERS; + $actorId = $person->getUID(); + } + } + + $offset = (int)$query->getCursor(); + $comments = $this->chatManager->searchForObjectsWithFilters( + $query->getTerm(), + array_keys($roomMap), + [ChatManager::VERB_MESSAGE, ChatManager::VERB_OBJECT_SHARED], + $lowerTimeBoundary, + $upperTimeBoundary, + $actorType, + $actorId, + $offset, + $query->getLimit() + ); + + $result = []; + foreach ($comments as $comment) { + $room = $roomMap[$comment->getObjectId()]; + try { + $result[] = $this->commentToSearchResultEntry($room, $user, $comment, $query); + } catch (UnauthorizedException|ParticipantNotFoundException) { + } + } + + return SearchResult::paginated( + $title, + $result, + $offset + $query->getLimit() + ); + } + + /** + * @throws ParticipantNotFoundException + * @throws UnauthorizedException + */ + protected function commentToSearchResultEntry(Room $room, IUser $user, IComment $comment, ISearchQuery $query): SearchResultEntry { + $participant = $this->participantService->getParticipant($room, $user->getUID(), false); + + $id = (int)$comment->getId(); + $message = $this->messageParser->createMessage($room, $participant, $comment, $this->l); + $this->messageParser->parseMessage($message); + + $messageStr = $message->getMessage(); + $search = $replace = []; + foreach ($message->getMessageParameters() as $key => $parameter) { + $search[] = '{' . $key . '}'; + if ($parameter['type'] === 'user') { + $replace[] = '@' . $parameter['name']; + } else { + $replace[] = $parameter['name']; + } + } + $messageStr = str_replace($search, $replace, $messageStr); + + $matchPosition = mb_stripos($messageStr, $query->getTerm()); + if ($matchPosition > 30 && mb_strlen($messageStr) > 40) { + // Mostlikely the result is not visible from the beginning, + // so we cut of the message a bit. + $messageStr = '…' . mb_substr($messageStr, $matchPosition - 10); + } + + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + throw new UnauthorizedException('Expired'); + } + + if (!$message->getVisibility()) { + throw new UnauthorizedException('Not visible'); + } + + $iconUrl = ''; + if ($message->getActorType() === Attendee::ACTOR_USERS) { + $iconUrl = $this->url->linkToRouteAbsolute('core.avatar.getAvatar', [ + 'userId' => $message->getActorId(), + 'size' => 512, + ]); + } + + $subline = $this->getSublineTemplate(); + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $subline = '{user}'; + } + + $displayName = $message->getActorDisplayName(); + if (in_array($message->getActorType(), [Attendee::ACTOR_GUESTS, Attendee::ACTOR_EMAILS], true)) { + if ($displayName === '') { + $displayName = $this->l->t('Guest'); + } else { + $displayName = $this->l->t('%s (guest)', $displayName); + } + } + + $urlParams = [ + 'token' => $room->getToken(), + '_fragment' => 'message_' . $id, + ]; + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + try { + $thread = $this->threadService->findByThreadId($room->getId(), $threadId); + $urlParams['threadId'] = $thread->getId(); + } catch (DoesNotExistException) { + $thread = null; + } + + $entry = new SearchResultEntry( + $iconUrl, + str_replace( + ['{user}', '{conversation}'], + [$displayName, $room->getDisplayName($user->getUID())], + $subline + ), + $messageStr, + $this->url->linkToRouteAbsolute('spreed.Page.showCall', $urlParams), + 'icon-talk', // $iconClass, + true + ); + + $entry->addAttribute('conversation', $room->getToken()); + $entry->addAttribute('messageId', $comment->getId()); + if ($thread !== null) { + $entry->addAttribute('threadId', (string)$thread->getId()); + } + $entry->addAttribute('actorType', $comment->getActorType()); + $entry->addAttribute('actorId', $comment->getActorId()); + $entry->addAttribute('timestamp', '' . $comment->getCreationDateTime()->getTimestamp()); + + return $entry; + } + + #[\Override] + public function getSupportedFilters(): array { + return [ + IFilter::BUILTIN_TERM, + IFilter::BUILTIN_SINCE, + IFilter::BUILTIN_UNTIL, + IFilter::BUILTIN_PERSON, + self::CONVERSATION_FILTER, + ]; + } + + #[\Override] + public function getAlternateIds(): array { + return ['talk-message']; + } + + #[\Override] + public function getCustomFilters(): array { + return [ + new FilterDefinition(self::CONVERSATION_FILTER) + ]; + } +} diff --git a/lib/Search/UnifiedSearchCSSLoader.php b/lib/Search/UnifiedSearchCSSLoader.php new file mode 100644 index 0000000..baf5383 --- /dev/null +++ b/lib/Search/UnifiedSearchCSSLoader.php @@ -0,0 +1,31 @@ + + */ +class UnifiedSearchCSSLoader implements IEventListener { + #[\Override] + public function handle(Event $event): void { + if (!$event instanceof BeforeTemplateRenderedEvent) { + return; + } + + if ($event->isLoggedIn()) { + Util::addStyle(Application::APP_ID, 'talk-search'); + } + } +} diff --git a/lib/Search/UnifiedSearchFilterPlugin.php b/lib/Search/UnifiedSearchFilterPlugin.php new file mode 100644 index 0000000..ab56a5e --- /dev/null +++ b/lib/Search/UnifiedSearchFilterPlugin.php @@ -0,0 +1,42 @@ + + */ +class UnifiedSearchFilterPlugin implements IEventListener { + + public function __construct( + protected Config $talkConfig, + protected IUserSession $userSession, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof BeforeTemplateRenderedEvent)) { + return; + } + + $currentUser = $this->userSession->getUser(); + if ($currentUser === null || $this->talkConfig->isDisabledForUser($currentUser)) { + return; + } + + Util::addScript('spreed', 'talk-search'); + } +} diff --git a/lib/Service/ActivityPubHelper.php b/lib/Service/ActivityPubHelper.php new file mode 100644 index 0000000..4a8a8a3 --- /dev/null +++ b/lib/Service/ActivityPubHelper.php @@ -0,0 +1,111 @@ + 'Application', + 'id' => Attendee::ACTOR_BOTS . '/' . Attendee::ACTOR_BOT_PREFIX . $bot->getUrlHash(), + 'name' => $bot->getName(), + ]; + } + + /** + * @return array{type: 'Collection', id: non-empty-string, name: string} + */ + public function generateCollectionFromRoom(Room $room): array { + /** @var non-empty-string $token */ + $token = $room->getToken(); + return [ + 'type' => 'Collection', + 'id' => $token, + 'name' => $room->getName(), + ]; + } + + /** + * @psalm-param ?ChatMessageParentData $inReplyTo + * @psalm-return NoteType&array{inReplyTo?: ChatMessageParentData, threadId?: int} + */ + public function generateNote(IComment $comment, array $messageData, string $messageType, ?array $inReplyTo = null): array { + /** @var string $content */ + $content = json_encode($messageData, JSON_THROW_ON_ERROR); + /** @var numeric-string $messageId */ + $messageId = $comment->getId(); + /** @var 'text/markdown'|'text/plain' $mediaType */ + $mediaType = 'text/markdown';// FIXME or text/plain when markdown is disabled + $note = [ + 'type' => 'Note', + 'id' => $messageId, + 'name' => $messageType, + 'content' => $content, + 'mediaType' => $mediaType, + ]; + if ($inReplyTo !== null) { + $note['inReplyTo'] = $inReplyTo; + } + $metadata = $comment->getMetaData() ?? []; + $threadId = $metadata[Message::METADATA_THREAD_ID] ?? Thread::THREAD_NONE; + if ($threadId !== Thread::THREAD_NONE) { + $note['threadId'] = (int)$threadId; + } + return $note; + } + + /** + * @return array{type: 'Person', id: non-falsy-string, name: string, talkParticipantType: numeric-string} + */ + public function generatePersonFromAttendee(Attendee $attendee): array { + return [ + 'type' => 'Person', + 'id' => $attendee->getActorType() . '/' . $attendee->getActorId(), + 'name' => $attendee->getDisplayName(), + 'talkParticipantType' => (string)$attendee->getParticipantType(), + ]; + } + + /** + * @return array{type: 'Person', id: non-falsy-string, name: string} + */ + public function generatePersonFromMessageActor(Message $message): array { + return [ + 'type' => 'Person', + 'id' => $message->getActorType() . '/' . $message->getActorId(), + 'name' => $message->getActorDisplayName(), + ]; + } + + /** + * @return array{type: 'Person', id: non-falsy-string, name: string} + */ + public function generatePerson(string $actorType, string $actorId, string $displayName): array { + return [ + 'type' => 'Person', + 'id' => $actorType . '/' . $actorId, + 'name' => $displayName, + ]; + } +} diff --git a/lib/Service/AttachmentService.php b/lib/Service/AttachmentService.php new file mode 100644 index 0000000..1f4e98c --- /dev/null +++ b/lib/Service/AttachmentService.php @@ -0,0 +1,84 @@ +setRoomId($room->getId()); + $attachment->setActorType($comment->getActorType()); + $attachment->setActorId($comment->getActorId()); + $attachment->setMessageId((int)$comment->getId()); + $attachment->setMessageTime($comment->getCreationDateTime()->getTimestamp()); + + if ($messageType === 'object_shared') { + $objectType = $parameters['objectType'] ?? ''; + if ($objectType === 'geo-location') { + $attachment->setObjectType(Attachment::TYPE_LOCATION); + } elseif ($objectType === 'deck-card') { + $attachment->setObjectType(Attachment::TYPE_DECK_CARD); + } elseif ($objectType === 'talk-poll') { + $attachment->setObjectType(Attachment::TYPE_POLL); + } else { + $attachment->setObjectType(Attachment::TYPE_OTHER); + } + } else { + $messageType = $parameters['metaData']['messageType'] ?? ''; + $mimetype = $parameters['metaData']['mimeType'] ?? ''; + + if ($messageType === ChatManager::VERB_RECORD_AUDIO) { + $attachment->setObjectType(Attachment::TYPE_RECORDING); + } elseif ($messageType === ChatManager::VERB_RECORD_VIDEO) { + $attachment->setObjectType(Attachment::TYPE_RECORDING); + } elseif ($messageType === ChatManager::VERB_VOICE_MESSAGE) { + $attachment->setObjectType(Attachment::TYPE_VOICE); + } elseif (str_starts_with($mimetype, 'audio/')) { + $attachment->setObjectType(Attachment::TYPE_AUDIO); + } elseif (str_starts_with($mimetype, 'image/') || str_starts_with($mimetype, 'video/')) { + $attachment->setObjectType(Attachment::TYPE_MEDIA); + } else { + $attachment->setObjectType(Attachment::TYPE_FILE); + } + } + + $this->attachmentMapper->insert($attachment); + } + + /** + * @param Room $room + * @param string $objectType + * @param int $offset + * @param int $limit + * @return Attachment[] + */ + public function getAttachmentsByType(Room $room, string $objectType, int $offset, int $limit): array { + return $this->attachmentMapper->getAttachmentsByType($room->getId(), $objectType, $offset, $limit); + } + + public function deleteAttachmentByMessageId(int $messageId): void { + $this->attachmentMapper->deleteByMessageId($messageId); + } + + public function deleteAttachmentsForRoom(Room $room): void { + $this->attachmentMapper->deleteByRoomId($room->getId()); + } +} diff --git a/lib/Service/AvatarService.php b/lib/Service/AvatarService.php new file mode 100644 index 0000000..975cc95 --- /dev/null +++ b/lib/Service/AvatarService.php @@ -0,0 +1,326 @@ +getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new InvalidArgumentException($this->l->t('One-to-one rooms always need to show the other users avatar')); + } + + if ($file === null) { + throw new InvalidArgumentException($this->l->t('No image file provided')); + } + + if ( + $file['error'] !== 0 + || !is_uploaded_file($file['tmp_name']) + || Filesystem::isFileBlacklisted($file['tmp_name']) + ) { + throw new InvalidArgumentException($this->l->t('Invalid file provided')); + } + if ($file['size'] > 20 * 1024 * 1024) { + throw new InvalidArgumentException($this->l->t('File is too big')); + } + + $content = file_get_contents($file['tmp_name']); + // noopengrep: php.lang.security.unlink-use.unlink-use + unlink($file['tmp_name']); + $image = new \OCP\Image(); + $image->loadFromData($content); + $image->readExif($content); + $this->setAvatar($room, $image); + } + + public function setAvatarFromEmoji(Room $room, string $emoji, ?string $color): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new InvalidArgumentException($this->l->t('One-to-one rooms always need to show the other users avatar')); + } + + if ($this->emojiService->getFirstCombinedEmoji($emoji) !== $emoji) { + throw new InvalidArgumentException($this->l->t('Invalid emoji character')); + } + + if ($color === null) { + $color = self::THEMING_PLACEHOLDER; + } elseif (!preg_match('/^[a-fA-F0-9]{6}$/', $color)) { + throw new InvalidArgumentException($this->l->t('Invalid background color')); + } + + $content = $this->getEmojiAvatar($emoji, $color); + + $token = $room->getToken(); + $avatarFolder = $this->getAvatarFolder($token); + + // Delete previous avatars + foreach ($avatarFolder->getDirectoryListing() as $file) { + $file->delete(); + } + + $avatarName = $this->random->generate(16, ISecureRandom::CHAR_HUMAN_READABLE) . '.svg'; + $avatarFolder->newFile($avatarName, $content); + $this->roomService->setAvatar($room, $avatarName); + } + + public function setAvatar(Room $room, \OCP\Image $image): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new InvalidArgumentException($this->l->t('One-to-one rooms always need to show the other users avatar')); + } + $image->fixOrientation(); + if (!($image->height() === $image->width())) { + throw new InvalidArgumentException($this->l->t('Avatar image is not square')); + } + + if (!$image->valid()) { + throw new InvalidArgumentException($this->l->t('Invalid image')); + } + + $mimeType = $image->mimeType(); + $allowedMimeTypes = [ + 'image/jpeg', + 'image/png', + ]; + if (!in_array($mimeType, $allowedMimeTypes)) { + throw new InvalidArgumentException($this->l->t('Unknown filetype')); + } + + + $token = $room->getToken(); + $avatarFolder = $this->getAvatarFolder($token); + + // Delete previous avatars + foreach ($avatarFolder->getDirectoryListing() as $file) { + $file->delete(); + } + + $avatarName = $this->random->generate(16, ISecureRandom::CHAR_HUMAN_READABLE); + if ($mimeType === 'image/jpeg') { + $avatarName .= '.jpg'; + } else { + $avatarName .= '.png'; + } + + $avatarFolder->newFile($avatarName, $image->data()); + $this->roomService->setAvatar($room, $avatarName); + } + + private function getAvatarFolder(string $token): ISimpleFolder { + try { + $folder = $this->appData->getFolder('room-avatar'); + } catch (NotFoundException $e) { + $folder = $this->appData->newFolder('room-avatar'); + } + try { + $avatarFolder = $folder->getFolder($token); + } catch (NotFoundException $e) { + $avatarFolder = $folder->newFolder($token); + } + return $avatarFolder; + } + + /** + * https://github.com/sebdesign/cap-height -- for 500px height + * Automated check: https://codepen.io/skjnldsv/pen/PydLBK/ + * Noto Sans cap-height is 0.715 and we want a 200px caps height size + * (0.4 letter-to-total-height ratio, 500*0.4=200), so: 200/0.715 = 280px. + * Since we start from the baseline (text-anchor) we need to + * shift the y axis by 100px (half the caps height): 500/2+100=350 + * + * Copied from @see \OC\Avatar\Avatar::$svgTemplate with some changes: + * - {font} is injected + * - size fixed to 512 + * - font-size reduced to 240 + * - font-weight and fill color are removed as they are not applicable + */ + private string $svgTemplate = ' + + + {letter} + '; + + public function getAvatar(Room $room, ?IUser $user, bool $darkTheme = false): ISimpleFile { + $token = $room->getToken(); + $avatar = $room->getAvatar(); + if ($avatar) { + try { + $folder = $this->appData->getFolder('room-avatar'); + if ($folder->fileExists($token)) { + $file = $folder->getFolder($token)->getFile($avatar); + + if ($file->getMimeType() === 'image/svg+xml' && str_contains($file->getContent(), self::THEMING_PLACEHOLDER)) { + $color = $darkTheme ? self::THEMING_DARK_BACKGROUND : self::THEMING_BRIGHT_BACKGROUND; + return new InMemoryFile( + $file->getName(), + str_replace(self::THEMING_PLACEHOLDER, $color, $file->getContent()), + ); + } + + return $file; + } + } catch (NotFoundException $e) { + } + } + + // Fallback + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + $users = json_decode($room->getName(), true); + foreach ($users as $participantId) { + if ($user instanceof IUser && $participantId !== $user->getUID()) { + $avatar = $this->avatarManager->getAvatar($participantId); + return $avatar->getFile(512, $darkTheme); + } + } + } + if ($this->emojiService->isValidSingleEmoji(mb_substr($room->getName(), 0, 1))) { + return new InMemoryFile( + $token, + $this->getEmojiAvatar( + $this->emojiService->getFirstCombinedEmoji($room->getName()), + $darkTheme ? self::THEMING_DARK_BACKGROUND : self::THEMING_BRIGHT_BACKGROUND + ) + ); + } + return new InMemoryFile($token, file_get_contents($this->getAvatarPath($room, $darkTheme))); + } + + public function getPersonPlaceholder(bool $darkTheme = false): ISimpleFile { + $colorTone = $darkTheme ? 'dark' : 'bright'; + return new InMemoryFile('fallback', file_get_contents(__DIR__ . '/../../img/icon-conversation-user-' . $colorTone . '.svg')); + } + + protected function getEmojiAvatar(string $emoji, string $fillColor): string { + return str_replace([ + '{letter}', + '{fill}', + '{font}', + ], [ + $emoji, + $fillColor, + implode(',', [ + "'Segoe UI'", + 'Roboto', + 'Oxygen-Sans', + 'Cantarell', + 'Ubuntu', + "'Helvetica Neue'", + 'Arial', + 'sans-serif', + "'Noto Color Emoji'", + "'Apple Color Emoji'", + "'Segoe UI Emoji'", + "'Segoe UI Symbol'", + "'Noto Sans'", + ]), + ], $this->svgTemplate); + } + + public function isCustomAvatar(Room $room): bool { + return $room->getAvatar() !== ''; + } + + private function getAvatarPath(Room $room, bool $darkTheme = false): string { + $colorTone = $darkTheme ? 'dark' : 'bright'; + if ($room->getType() === Room::TYPE_CHANGELOG) { + return __DIR__ . '/../../img/changelog.svg'; + } + if ($room->getObjectType() === Room::OBJECT_TYPE_FILE) { + return __DIR__ . '/../../img/icon-conversation-text-' . $colorTone . '.svg'; + } + if ($room->getObjectType() === Room::OBJECT_TYPE_VIDEO_VERIFICATION) { + return __DIR__ . '/../../img/icon-conversation-password-' . $colorTone . '.svg'; + } + if ($room->getObjectType() === Room::OBJECT_TYPE_EMAIL) { + return __DIR__ . '/../../img/icon-conversation-mail-' . $colorTone . '.svg'; + } + if (in_array($room->getObjectType(), [Room::OBJECT_TYPE_PHONE_PERSIST, Room::OBJECT_TYPE_PHONE_TEMPORARY, Room::OBJECT_TYPE_PHONE_LEGACY], true)) { + return __DIR__ . '/../../img/icon-conversation-phone-' . $colorTone . '.svg'; + } + if ($room->getObjectType() === Room::OBJECT_TYPE_EVENT) { + return __DIR__ . '/../../img/icon-conversation-event-' . $colorTone . '.svg'; + } + if ($room->isFederatedConversation()) { + return __DIR__ . '/../../img/icon-conversation-federation-' . $colorTone . '.svg'; + } + if ($room->getType() === Room::TYPE_PUBLIC) { + return __DIR__ . '/../../img/icon-conversation-public-' . $colorTone . '.svg'; + } + if ($room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $room->getType() === Room::TYPE_ONE_TO_ONE + ) { + return __DIR__ . '/../../img/icon-conversation-user-' . $colorTone . '.svg'; + } + return __DIR__ . '/../../img/icon-conversation-group-' . $colorTone . '.svg'; + } + + public function deleteAvatar(Room $room): void { + try { + $folder = $this->appData->getFolder('room-avatar'); + $avatarFolder = $folder->getFolder($room->getToken()); + $avatarFolder->delete(); + $this->roomService->setAvatar($room, ''); + } catch (NotFoundException $e) { + } + } + + public function getAvatarUrl(Room $room): string { + $arguments = [ + 'token' => $room->getToken(), + 'apiVersion' => 'v1', + ]; + + $avatarVersion = $this->getAvatarVersion($room); + if ($avatarVersion !== '') { + $arguments['v'] = $avatarVersion; + } + return $this->url->linkToOCSRouteAbsolute('spreed.Avatar.getAvatar', $arguments); + } + + public function getAvatarVersion(Room $room): string { + $avatarVersion = $room->getAvatar(); + if ($avatarVersion) { + [$version] = explode('.', $avatarVersion); + return $version; + } + if ($this->emojiService->isValidSingleEmoji(mb_substr($room->getName(), 0, 1))) { + return substr(md5($this->getEmojiAvatar($this->emojiService->getFirstCombinedEmoji($room->getName()), self::THEMING_BRIGHT_BACKGROUND)), 0, 8); + } + $avatarPath = $this->getAvatarPath($room); + return substr(md5($avatarPath), 0, 8); + } +} diff --git a/lib/Service/BanService.php b/lib/Service/BanService.php new file mode 100644 index 0000000..876a4f9 --- /dev/null +++ b/lib/Service/BanService.php @@ -0,0 +1,268 @@ +getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + throw new \InvalidArgumentException('room'); + } + + if (!in_array($bannedActorType, [Attendee::ACTOR_USERS, Attendee::ACTOR_GUESTS, Attendee::ACTOR_EMAILS, 'ip'], true)) { + throw new \InvalidArgumentException('bannedActor'); + } + + if (empty($bannedActorId)) { + throw new \InvalidArgumentException('bannedActor'); + } + + if ($bannedActorType === 'ip') { + try { + $this->ipFactory->addressFromString($bannedActorId); + } catch (\InvalidArgumentException) { + // Not an IP, check if it's a range + try { + $this->ipFactory->rangeFromString($bannedActorId); + } catch (\InvalidArgumentException) { + // Not an IP range either + throw new \InvalidArgumentException('bannedActor'); + } + } + } + + if (strlen($internalNote) > Ban::NOTE_MAX_LENGTH) { + throw new \InvalidArgumentException('internalNote'); + } + + if ($bannedActorType === $moderatorActorType && $bannedActorId === $moderatorActorId) { + throw new \InvalidArgumentException('self'); + } + + /** @var ?string $displayname */ + $displayname = null; + if (in_array($bannedActorType, [Attendee::ACTOR_USERS, Attendee::ACTOR_EMAILS, Attendee::ACTOR_GUESTS], true)) { + try { + $bannedParticipant = $this->participantService->getParticipantByActor($room, $bannedActorType, $bannedActorId); + $displayname = $bannedParticipant->getAttendee()->getDisplayName(); + if ($bannedParticipant->hasModeratorPermissions()) { + throw new \InvalidArgumentException('moderator'); + } + } catch (ParticipantNotFoundException) { + // No failure if the banned actor is not in the room yet/anymore + if ($bannedActorType === Attendee::ACTOR_USERS) { + $displayname = $this->userManager->getDisplayName($bannedActorId); + } + } + } + + if ($displayname === null || $displayname === '') { + $displayname = $bannedActorId; + } + + $ban = new Ban(); + $ban->setModeratorActorType($moderatorActorType); + $ban->setModeratorActorId($moderatorActorId); + $ban->setModeratorDisplayname($moderatorDisplayname); + $ban->setRoomId($room->getId()); + $ban->setBannedActorType($bannedActorType); + $ban->setBannedActorId($bannedActorId); + $ban->setBannedDisplayname($displayname); + $ban->setBannedTime($bannedTime); + $ban->setInternalNote($internalNote); + + //Remove the banned user from the room + if ($bannedActorType !== 'ip') { + try { + $bannedParticipant = $this->participantService->getParticipantByActor($room, $bannedActorType, $bannedActorId); + $this->participantService->removeAttendee($room, $bannedParticipant, AAttendeeRemovedEvent::REASON_REMOVED); + } catch (ParticipantNotFoundException) { + // No failure if the banned actor is not in the room yet/anymore + } + } + + return $this->banMapper->insert($ban); + } + + public function copyBanForRemoteAddress(Ban $ban, string $remoteAddress): void { + $this->logger->info('Banned guest detected, banning IP address: ' . $remoteAddress . ' to prevent rejoining.'); + + $newBan = new Ban(); + $newBan->setModeratorActorType($ban->getModeratorActorType()); + $newBan->setModeratorActorId($ban->getModeratorActorId()); + $newBan->setModeratorDisplayname($ban->getModeratorDisplayname()); + $newBan->setRoomId($ban->getRoomId()); + $newBan->setBannedTime($ban->getBannedTime()); + $newBan->setInternalNote($ban->getInternalNote()); + + $newBan->setBannedActorType('ip'); + $newBan->setBannedActorId($remoteAddress); + + try { + $this->banMapper->insert($newBan); + } catch (Exception $e) { + if ($e->getReason() === Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + return; + } + throw $e; + } + } + + /** + * @throws ForbiddenException + */ + public function throwIfActorIsBanned(Room $room, ?string $userId): void { + if ($userId !== null) { + $actorType = Attendee::ACTOR_USERS; + $actorId = $userId; + } else { + $actorId = $this->talkSession->getAuthedEmailActorIdForRoom($room->getToken()); + if ($actorId !== null) { + $actorType = Attendee::ACTOR_EMAILS; + } else { + $actorId = $this->talkSession->getGuestActorIdForRoom($room->getToken()); + $actorType = Attendee::ACTOR_GUESTS; + } + } + + if ($actorId !== null) { + try { + $ban = $this->banMapper->findForBannedActorAndRoom($actorType, $actorId, $room->getId()); + if (in_array($actorType, [Attendee::ACTOR_GUESTS, Attendee::ACTOR_EMAILS], true)) { + $this->copyBanForRemoteAddress($ban, $this->request->getRemoteAddress()); + } + throw new ForbiddenException('actor'); + } catch (DoesNotExistException) { + } + } + + if ($actorType !== Attendee::ACTOR_GUESTS) { + return; + } + + $ipBans = $this->banMapper->findByRoomId($room->getId(), 'ip'); + + if (empty($ipBans)) { + return; + } + + try { + $remoteAddress = $this->ipFactory->addressFromString($this->request->getRemoteAddress()); + } catch (\InvalidArgumentException) { + return; + } + + foreach ($ipBans as $ban) { + if ($ban->getBannedActorId() === $this->request->getRemoteAddress()) { + throw new ForbiddenException('ip'); + } + + try { + $range = $this->ipFactory->rangeFromString($ban->getBannedActorId()); + if ($range->contains($remoteAddress)) { + throw new ForbiddenException('ip'); + } + } catch (\InvalidArgumentException) { + } + } + } + + /** + * Check if the actor is banned without logging + * + * @return bool True if the actor is banned, false otherwise + */ + public function isActorBanned(Room $room, string $actorType, string $actorId): bool { + try { + $this->banMapper->findForBannedActorAndRoom($actorType, $actorId, $room->getId()); + return true; + } catch (DoesNotExistException) { + return false; + } + } + + /** + * Retrieve all bans for a specific room. + * + * @return list + */ + public function getBansForRoom(int $roomId): array { + return $this->banMapper->findByRoomId($roomId); + } + + /** + * Retrieve all banned userIDs for a specific room. + * + * @return array Key is the user ID + */ + public function getBannedUserIdsForRoom(int $roomId): array { + $bans = $this->banMapper->findByRoomId($roomId, Attendee::ACTOR_USERS); + return array_flip(array_map(static fn (Ban $ban) => $ban->getBannedActorId(), $bans)); + } + + /** + * Retrieve all room IDs a user is banned from + * + * @return array Key is the room ID + */ + public function getBannedRoomsForUserId(string $userId): array { + $bans = $this->banMapper->findByUserId($userId); + return array_flip(array_map(static fn (Ban $ban) => $ban->getRoomId(), $bans)); + } + + /** + * Retrieve a ban by its ID and delete it. + */ + public function findAndDeleteBanByIdForRoom(int $banId, int $roomId): void { + try { + $ban = $this->banMapper->findByBanIdAndRoom($banId, $roomId); + $this->banMapper->delete($ban); + } catch (DoesNotExistException) { + // Ban does not exist + } + } + + public function updateDisplayNameForActor(string $actorType, string $actorId, string $displayName): void { + $this->banMapper->updateDisplayNameForActor($actorType, $actorId, $displayName); + } +} diff --git a/lib/Service/BotService.php b/lib/Service/BotService.php new file mode 100644 index 0000000..6824684 --- /dev/null +++ b/lib/Service/BotService.php @@ -0,0 +1,503 @@ +activityPubHelper = new ActivityPubHelper(); + } + + public function afterBotEnabled(BotEnabledEvent $event): void { + $this->invokeBots([$event->getBotServer()], $event->getRoom(), null, [ + 'type' => 'Join', + 'actor' => $this->activityPubHelper->generateApplicationFromBot($event->getBotServer()), + 'object' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + ]); + } + + public function afterBotDisabled(BotDisabledEvent $event): void { + $this->invokeBots([$event->getBotServer()], $event->getRoom(), null, [ + 'type' => 'Leave', + 'actor' => $this->activityPubHelper->generateApplicationFromBot($event->getBotServer()), + 'object' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + ]); + } + + public function afterChatMessageSent(ChatMessageSentEvent $event, MessageParser $messageParser): void { + $attendee = $event->getParticipant()?->getAttendee(); + if (!$attendee instanceof Attendee) { + // No bots for bots + return; + } + + $bots = $this->getBotsForToken($event->getRoom()->getToken(), Bot::FEATURE_WEBHOOK | Bot::FEATURE_EVENT); + if (empty($bots)) { + return; + } + + $inReplyTo = null; + $parent = $event->getParent(); + if ($parent instanceof IComment) { + $parentMessage = $messageParser->createMessage( + $event->getRoom(), + $event->getParticipant(), + $parent, + $this->l10nFactory->get('spreed', 'en', 'en') + ); + $messageParser->parseMessage($parentMessage, true); + $parentMessageData = [ + 'message' => $parentMessage->getMessage(), + 'parameters' => $parentMessage->getMessageParameters(), + ]; + + $inReplyTo = [ + 'type' => 'Note', + 'actor' => $this->activityPubHelper->generatePersonFromMessageActor($parentMessage), + 'object' => $this->activityPubHelper->generateNote($parent, $parentMessageData, 'message'), + ]; + } + + $message = $messageParser->createMessage( + $event->getRoom(), + $event->getParticipant(), + $event->getComment(), + $this->l10nFactory->get('spreed', 'en', 'en') + ); + $messageParser->parseMessage($message, true); + $messageData = [ + 'message' => $message->getMessage(), + 'parameters' => $message->getMessageParameters(), + ]; + + $botServers = array_map(static fn (Bot $bot): BotServer => $bot->getBotServer(), $bots); + + $this->invokeBots($botServers, $event->getRoom(), $event->getComment(), [ + 'type' => 'Create', + 'actor' => $this->activityPubHelper->generatePersonFromAttendee($attendee), + 'object' => $this->activityPubHelper->generateNote($event->getComment(), $messageData, 'message', $inReplyTo), + 'target' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + ]); + } + + public function afterSystemMessageSent(SystemMessageSentEvent $event, MessageParser $messageParser): void { + $bots = $this->getBotsForToken($event->getRoom()->getToken(), Bot::FEATURE_WEBHOOK | Bot::FEATURE_EVENT); + if (empty($bots)) { + return; + } + + $message = $messageParser->createMessage( + $event->getRoom(), + null, + $event->getComment(), + $this->l10nFactory->get('spreed', 'en', 'en') + ); + $messageParser->parseMessage($message); + $messageData = [ + 'message' => $message->getMessage(), + 'parameters' => $message->getMessageParameters(), + ]; + + $botServers = array_map(static fn (Bot $bot): BotServer => $bot->getBotServer(), $bots); + + $this->invokeBots($botServers, $event->getRoom(), $event->getComment(), [ + 'type' => 'Activity', + 'actor' => $this->activityPubHelper->generatePersonFromMessageActor($message), + 'object' => $this->activityPubHelper->generateNote($event->getComment(), $messageData, $message->getMessageRaw()), + 'target' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + ]); + } + + public function afterReactionAdded(ReactionAddedEvent $event, MessageParser $messageParser): void { + $bots = $this->getBotsForToken($event->getRoom()->getToken(), Bot::FEATURE_REACTION); + if (empty($bots)) { + return; + } + + $message = $messageParser->createMessage( + $event->getRoom(), + null, + $event->getMessage(), + $this->l10nFactory->get('spreed', 'en', 'en') + ); + $messageParser->parseMessage($message); + $messageData = [ + 'message' => $message->getMessage(), + 'parameters' => $message->getMessageParameters(), + ]; + + $botServers = array_map(static fn (Bot $bot): BotServer => $bot->getBotServer(), $bots); + + $this->invokeBots($botServers, $event->getRoom(), $event->getMessage(), [ + 'type' => 'Like', + 'actor' => $this->activityPubHelper->generatePerson($event->getActorType(), $event->getActorId(), $event->getActorDisplayName()), + 'object' => $this->activityPubHelper->generateNote($event->getMessage(), $messageData, $message->getMessageRaw()), + 'target' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + 'content' => $event->getReaction(), + ]); + } + + public function afterReactionRemoved(ReactionRemovedEvent $event, MessageParser $messageParser): void { + $bots = $this->getBotsForToken($event->getRoom()->getToken(), Bot::FEATURE_REACTION); + if (empty($bots)) { + return; + } + + $message = $messageParser->createMessage( + $event->getRoom(), + null, + $event->getMessage(), + $this->l10nFactory->get('spreed', 'en', 'en') + ); + $messageParser->parseMessage($message); + $messageData = [ + 'message' => $message->getMessage(), + 'parameters' => $message->getMessageParameters(), + ]; + + $botServers = array_map(static fn (Bot $bot): BotServer => $bot->getBotServer(), $bots); + + $this->invokeBots($botServers, $event->getRoom(), $event->getMessage(), [ + 'type' => 'Undo', + 'actor' => $this->activityPubHelper->generatePerson($event->getActorType(), $event->getActorId(), $event->getActorDisplayName()), + 'object' => [ + 'type' => 'Like', + 'actor' => $this->activityPubHelper->generatePersonFromMessageActor($message), + 'object' => $this->activityPubHelper->generateNote($event->getMessage(), $messageData, $message->getMessageRaw()), + 'target' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + 'content' => $event->getReaction(), + ], + 'target' => $this->activityPubHelper->generateCollectionFromRoom($event->getRoom()), + ]); + } + + /** + * @param BotServer[] $bots + * @param InvocationData $body + */ + protected function invokeBots(array $bots, Room $room, ?IComment $comment, array $body): void { + $jsonBody = json_encode($body, JSON_THROW_ON_ERROR); + + foreach ($bots as $bot) { + if ($bot->getFeatures() & Bot::FEATURE_EVENT) { + $event = new BotInvokeEvent($bot->getUrl(), $body); + $this->dispatcher->dispatchTyped($event); + + if ($comment instanceof IComment) { + if (!empty($event->getReactions())) { + $reactionManager = Server::get(ReactionManager::class); + foreach ($event->getReactions() as $reaction) { + try { + $reactionManager->addReactionMessage( + $room, + Attendee::ACTOR_BOTS, + Attendee::ACTOR_BOT_PREFIX . $bot->getUrlHash(), + $bot->getName(), + (int)$comment->getId(), + $reaction + ); + } catch (\Exception $e) { + $this->logger->error('Error while trying to react as a bot: ' . $e->getMessage(), ['exception' => $e]); + } + } + } + if (!empty($event->getAnswers())) { + $chatManager = Server::get(ChatManager::class); + foreach ($event->getAnswers() as $answer) { + $creationDateTime = $this->timeFactory->getDateTime('now', new \DateTimeZone('UTC')); + try { + $replyTo = null; + $threadId = 0; + $threadTitle = ''; + if ($answer['reply'] === true) { + $replyTo = $comment; + } elseif (is_int($answer['reply'])) { + $replyTo = $chatManager->getParentComment($room, (string)$answer['reply']); + } elseif ($answer['thread'] === true) { + $threadId = (int)$comment->getTopmostParentId() ?: (int)$comment->getId(); + } elseif ($answer['threadTitle'] !== null) { + $threadTitle = $answer['threadTitle']; + } + + $botComment = $chatManager->sendMessage( + $room, + null, + Attendee::ACTOR_BOTS, + Attendee::ACTOR_BOT_PREFIX . $bot->getUrlHash(), + $answer['message'], + $creationDateTime, + $replyTo, + $answer['referenceId'], + $answer['silent'], + rateLimitGuestMentions: false, + threadId: $threadId, + ); + + if ($threadTitle !== '') { + $thread = $this->threadService->createThread($room, (int)$comment->getId(), $threadTitle); + + $this->chatManager->addSystemMessage( + $room, + null, + Attendee::ACTOR_BOTS, + Attendee::ACTOR_BOT_PREFIX . $bot->getUrlHash(), + json_encode(['message' => 'thread_created', 'parameters' => ['thread' => (int)$botComment->getId(), 'title' => $thread->getName()]]), + $this->timeFactory->getDateTime(), + false, + null, + $botComment, + true, + true + ); + } + } catch (\Exception $e) { + $this->logger->error('Error while trying to answer as a bot: ' . $e->getMessage(), ['exception' => $e]); + } + } + } + } + } else { + $this->sendAsyncRequest($bot, $body, $jsonBody); + } + } + } + + /** + * @param BotServer $botServer + * @param array $body + * #param string|null $jsonBody + */ + protected function sendAsyncRequest(BotServer $botServer, array $body, ?string $jsonBody = null): void { + $jsonBody = $jsonBody ?? json_encode($body, JSON_THROW_ON_ERROR); + + $random = $this->secureRandom->generate(64); + $hash = hash_hmac('sha256', $random . $jsonBody, $botServer->getSecret()); + $headers = [ + 'Content-Type' => 'application/json', + 'X-Nextcloud-Talk-Random' => $random, + 'X-Nextcloud-Talk-Signature' => $hash, + 'X-Nextcloud-Talk-Backend' => rtrim($this->serverConfig->getSystemValueString('overwrite.cli.url'), '/') . '/', + 'OCS-APIRequest' => 'true', + ]; + + $data = [ + 'verify' => $this->certificateManager->getAbsoluteBundlePath(), + 'nextcloud' => [ + 'allow_local_address' => true, + ], + 'headers' => $headers, + 'timeout' => 5, + 'body' => $jsonBody, + ]; + + $client = $this->clientService->newClient(); + $promise = $client->postAsync($botServer->getUrl(), $data); + + $promise->then(function (IResponse $response) use ($botServer): void { + if ($response->getStatusCode() !== Http::STATUS_OK && $response->getStatusCode() !== Http::STATUS_ACCEPTED) { + $this->logger->error('Bot responded with unexpected status code (Received: ' . $response->getStatusCode() . '), increasing error count'); + $botServer->setErrorCount($botServer->getErrorCount() + 1); + $botServer->setLastErrorDate($this->timeFactory->now()); + $botServer->setLastErrorMessage('UnexpectedStatusCode: ' . $response->getStatusCode()); + $this->botServerMapper->update($botServer); + } + }, function (\Exception $exception) use ($botServer): void { + $this->logger->error('Bot error occurred, increasing error count', ['exception' => $exception]); + $botServer->setErrorCount($botServer->getErrorCount() + 1); + $botServer->setLastErrorDate($this->timeFactory->now()); + $botServer->setLastErrorMessage(get_class($exception) . ': ' . $exception->getMessage()); + $this->botServerMapper->update($botServer); + }); + } + + /** + * @param Room $room + * @return array + * @psalm-return array{type: string, id: string, name: string} + */ + protected function getActor(Room $room): array { + if (\OC::$CLI || $this->session->exists('talk-overwrite-actor-cli')) { + return [ + 'type' => Attendee::ACTOR_GUESTS, + 'id' => 'cli', + 'name' => 'Administration', + ]; + } + + if ($this->session->exists('talk-overwrite-actor-type')) { + return [ + 'type' => $this->session->get('talk-overwrite-actor-type'), + 'id' => $this->session->get('talk-overwrite-actor-id'), + 'name' => $this->session->get('talk-overwrite-actor-displayname'), + ]; + } + + if ($this->session->exists('talk-overwrite-actor-id')) { + return [ + 'type' => Attendee::ACTOR_USERS, + 'id' => $this->session->get('talk-overwrite-actor-id'), + 'name' => $this->session->get('talk-overwrite-actor-displayname'), + ]; + } + + $user = $this->userSession->getUser(); + if ($user instanceof IUser) { + return [ + 'type' => Attendee::ACTOR_USERS, + 'id' => $user->getUID(), + 'name' => $user->getDisplayName(), + ]; + } + + $sessionId = $this->talkSession->getSessionForRoom($room->getToken()); + $actorId = $sessionId ? sha1($sessionId) : 'failed-to-get-session'; + return [ + 'type' => Attendee::ACTOR_GUESTS, + 'id' => $actorId, + 'name' => '', + ]; + } + + /** + * @param string $token + * @param int|null $requiredFeature + * @return Bot[] + */ + public function getBotsForToken(string $token, ?int $requiredFeature): array { + $botConversations = $this->botConversationMapper->findForToken($token); + + if (empty($botConversations)) { + return []; + } + + $botIds = array_map(static fn (BotConversation $bot): int => $bot->getBotId(), $botConversations); + + $serversMap = []; + $botServers = $this->botServerMapper->findByIds($botIds); + foreach ($botServers as $botServer) { + $serversMap[$botServer->getId()] = $botServer; + } + + $bots = []; + foreach ($botConversations as $botConversation) { + if (!isset($serversMap[$botConversation->getBotId()])) { + $this->logger->warning('Can not find bot by ID ' . $botConversation->getBotId() . ' for token ' . $botConversation->getToken()); + continue; + } + $botServer = $serversMap[$botConversation->getBotId()]; + + if ($requiredFeature && !($botServer->getFeatures() & $requiredFeature)) { + $this->logger->debug('Ignoring bot ID ' . $botConversation->getBotId() . ' because the feature (' . $requiredFeature . ') is disabled for it'); + continue; + } + + $bot = new Bot( + $botServer, + $botConversation, + ); + + if ($bot->isEnabled()) { + $bots[] = $bot; + } + } + + return $bots; + } + + /** + * @throws \InvalidArgumentException + */ + public function validateBotParameters(string $name, string $secret, string $url, string $description): void { + $nameLength = strlen($name); + if ($nameLength === 0 || $nameLength > 64) { + throw new \InvalidArgumentException('The provided name is too short or too long (min. 1 char, max. 64 chars)'); + } + $secretLength = strlen($secret); + if ($secretLength < 40 || $secretLength > 128) { + throw new \InvalidArgumentException('The provided secret is too short (min. 40 chars, max. 128 chars)'); + } + + if (!$url || strlen($url) > 4000 || !(str_starts_with($url, 'http://') || str_starts_with($url, 'https://') || str_starts_with($url, Bot::URL_APP_PREFIX) || str_starts_with($url, Bot::URL_RESPONSE_ONLY_PREFIX))) { + throw new \InvalidArgumentException('The provided URL is not a valid URL'); + } + + if (strlen($description) > 4000) { + throw new \InvalidArgumentException('The provided description is too long (max. 4000 chars)'); + } + } + + public function isAppForBotEnabled(BotServer $bot): bool { + if (!str_starts_with($bot->getUrl(), Bot::URL_APP_PREFIX)) { + return true; + } + + $url = substr($bot->getUrl(), strlen(Bot::URL_APP_PREFIX)); + [$appId] = explode('/', $url, 2); + return $this->appManager->isEnabledForAnyone($appId); + } +} diff --git a/lib/Service/BreakoutRoomService.php b/lib/Service/BreakoutRoomService.php new file mode 100644 index 0000000..8329054 --- /dev/null +++ b/lib/Service/BreakoutRoomService.php @@ -0,0 +1,572 @@ + true, ARRAY_FILTER_USE_BOTH); + } catch (\Throwable) { + throw new InvalidArgumentException('attendeeMap'); + } + + if (empty($attendeeMap)) { + return []; + } + + if (max($attendeeMap) >= $max) { + throw new InvalidArgumentException('attendeeMap'); + } + + if (min($attendeeMap) < 0) { + throw new InvalidArgumentException('attendeeMap'); + } + + if (min(array_keys($attendeeMap)) <= 0) { + throw new InvalidArgumentException('attendeeMap'); + } + + return $attendeeMap; + } + + /** + * @param Room $parent + * @param 0|1|2|3 $mode + * @psalm-param BreakoutRoom::MODE_* $mode + * @param int $amount + * @param string $attendeeMap + * @return Room[] + * @throws InvalidArgumentException When the breakout rooms are configured already + */ + public function setupBreakoutRooms(Room $parent, int $mode, int $amount, string $attendeeMap): array { + if (!$this->config->isBreakoutRoomsEnabled()) { + throw new InvalidArgumentException('config'); + } + + if ($parent->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('room'); + } + + if ($parent->getType() !== Room::TYPE_GROUP) { + // Can only do breakout rooms in group rooms + throw new InvalidArgumentException('room'); + } + + if ($parent->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + // Can not nest breakout rooms + throw new InvalidArgumentException('room'); + } + + try { + $this->roomService->setBreakoutRoomMode($parent, $mode); + } catch (BreakoutRoomModeException) { + throw new InvalidArgumentException('mode'); + } + + if ($amount < BreakoutRoom::MINIMUM_ROOM_AMOUNT) { + throw new InvalidArgumentException('amount'); + } + + if ($amount > BreakoutRoom::MAXIMUM_ROOM_AMOUNT) { + throw new InvalidArgumentException('amount'); + } + + if ($mode === BreakoutRoom::MODE_MANUAL) { + $cleanedMap = $this->parseAttendeeMap($attendeeMap, $amount); + } + + $breakoutRooms = $this->createBreakoutRooms($parent, $amount); + + $participants = $this->participantService->getParticipantsForRoom($parent); + // TODO Removing any non-users here as breakout rooms only support logged in users in version 1 + $participants = array_filter($participants, static fn (Participant $participant) => $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS); + + $moderators = array_filter($participants, static fn (Participant $participant) => $participant->hasModeratorPermissions()); + $this->addModeratorsToBreakoutRooms($breakoutRooms, $moderators); + + $others = array_filter($participants, static fn (Participant $participant) => !$participant->hasModeratorPermissions()); + if ($mode === BreakoutRoom::MODE_AUTOMATIC) { + // Shuffle the attendees, so they are not always distributed in the same way + shuffle($others); + + $map = []; + foreach ($others as $index => $participant) { + $map[$index % $amount] ??= []; + $map[$index % $amount][] = $participant; + } + + $this->addOthersToBreakoutRooms($breakoutRooms, $map); + } elseif ($mode === BreakoutRoom::MODE_MANUAL) { + $map = []; + foreach ($others as $participant) { + if (!isset($cleanedMap[$participant->getAttendee()->getId()])) { + continue; + } + + $roomNumber = (int)$cleanedMap[$participant->getAttendee()->getId()]; + + $map[$roomNumber] ??= []; + $map[$roomNumber][] = $participant; + } + + $this->addOthersToBreakoutRooms($breakoutRooms, $map); + } + + + return $breakoutRooms; + } + + /** + * @param Room $parent + * @param string $attendeeMap + * @return Room[] + * @throws InvalidArgumentException When the map was invalid, breakout rooms are disabled or not configured for this conversation + */ + public function applyAttendeeMap(Room $parent, string $attendeeMap): array { + if (!$this->config->isBreakoutRoomsEnabled()) { + throw new InvalidArgumentException('config'); + } + + if ($parent->getBreakoutRoomMode() === BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('mode'); + } + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken()); + $amount = count($breakoutRooms); + usort($breakoutRooms, static function (Room $roomA, Room $roomB) { + return $roomA->getId() - $roomB->getId(); + }); + + $cleanedMap = $this->parseAttendeeMap($attendeeMap, $amount); + $attendeeIds = array_keys($cleanedMap); + + $participants = $this->participantService->getParticipantsForRoom($parent); + $participants = array_filter($participants, static fn (Participant $participant) => in_array($participant->getAttendee()->getId(), $attendeeIds, true)); + // TODO Removing any non-users here as breakout rooms only support logged in users in version 1 + $participants = array_filter($participants, static fn (Participant $participant) => $participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS); + + $userIds = array_map(static fn (Participant $participant) => $participant->getAttendee()->getActorId(), $participants); + + $removals = []; + foreach ($breakoutRooms as $breakoutRoom) { + $breakoutRoomParticipants = $this->participantService->getParticipantsForRoom($breakoutRoom); + + foreach ($breakoutRoomParticipants as $participant) { + $attendee = $participant->getAttendee(); + if ($attendee->getActorType() === Attendee::ACTOR_USERS && in_array($attendee->getActorId(), $userIds, true)) { + if ($participant->hasModeratorPermissions()) { + // Can not remove moderators with this method + throw new InvalidArgumentException('moderator'); + } + + $removals[] = [ + 'room' => $breakoutRoom, + 'participant' => $participant, + ]; + } + } + } + + foreach ($removals as $removal) { + $this->participantService->removeAttendee($removal['room'], $removal['participant'], AAttendeeRemovedEvent::REASON_REMOVED); + } + + $map = []; + foreach ($participants as $participant) { + if (!isset($cleanedMap[$participant->getAttendee()->getId()])) { + continue; + } + + $roomNumber = (int)$cleanedMap[$participant->getAttendee()->getId()]; + + $map[$roomNumber] ??= []; + $map[$roomNumber][] = $participant; + } + + $this->addOthersToBreakoutRooms($breakoutRooms, $map); + + return $breakoutRooms; + } + + /** + * @param Room[] $rooms + * @param Participant[] $moderators + */ + public function addModeratorsToBreakoutRooms(array $rooms, array $moderators): void { + $moderatorsToAdd = []; + foreach ($moderators as $moderator) { + $attendee = $moderator->getAttendee(); + + $moderatorsToAdd[] = [ + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + 'displayName' => $attendee->getDisplayName(), + 'participantType' => $attendee->getParticipantType(), + ]; + } + + foreach ($rooms as $room) { + $this->participantService->addUsers($room, $moderatorsToAdd); + } + } + + /** + * @param array $rooms + * @param Participant[][] $participantsMap + */ + protected function addOthersToBreakoutRooms(array $rooms, array $participantsMap): void { + foreach ($rooms as $roomNumber => $room) { + $toAdd = []; + + $participants = $participantsMap[$roomNumber] ?? []; + foreach ($participants as $participant) { + $attendee = $participant->getAttendee(); + + $toAdd[] = [ + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + 'displayName' => $attendee->getDisplayName(), + 'participantType' => $attendee->getParticipantType(), + ]; + } + + if (empty($toAdd)) { + continue; + } + + $this->participantService->addUsers($room, $toAdd); + } + } + + protected function createBreakoutRooms(Room $parent, int $amount): array { + // Safety caution cleaning up potential orphan rooms + $this->deleteBreakoutRooms($parent); + + // TRANSLATORS Label for the breakout rooms, this is not a plural! The result will be "Room 1", "Room 2", "Room 3", ... + $label = $this->l->t('Room {number}'); + + $rooms = []; + for ($i = 1; $i <= $amount; $i++) { + $breakoutRoom = $this->roomService->createConversation( + $parent->getType(), + str_replace('{number}', (string)$i, $label), + null, + BreakoutRoom::PARENT_OBJECT_TYPE, + $parent->getToken() + ); + + $this->roomService->setLobby($breakoutRoom, Webinary::LOBBY_NON_MODERATORS, null, false, false); + + $rooms[] = $breakoutRoom; + } + + return $rooms; + } + + public function removeBreakoutRooms(Room $parent): void { + $this->deleteBreakoutRooms($parent); + $this->roomService->setBreakoutRoomMode($parent, BreakoutRoom::MODE_NOT_CONFIGURED); + $this->roomService->setBreakoutRoomStatus($parent, BreakoutRoom::STATUS_STOPPED); + } + + protected function deleteBreakoutRooms(Room $parent): void { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken()); + foreach ($breakoutRooms as $breakoutRoom) { + $this->roomService->deleteRoom($breakoutRoom); + } + } + + /** + * @param Room $parent + * @param Participant $participant + * @param string $message + * @return Room[] + */ + public function broadcastChatMessage(Room $parent, Participant $participant, string $message): array { + if ($parent->getBreakoutRoomMode() === BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('mode'); + } + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken()); + $attendeeType = $participant->getAttendee()->getActorType(); + $attendeeId = $participant->getAttendee()->getActorId(); + $creationDateTime = new \DateTime(); + + $shouldFlush = $this->notificationManager->defer(); + try { + foreach ($breakoutRooms as $breakoutRoom) { + $breakoutParticipant = $this->participantService->getParticipantByActor($breakoutRoom, $attendeeType, $attendeeId); + $comment = $this->chatManager->sendMessage($breakoutRoom, $breakoutParticipant, $attendeeType, $attendeeId, $message, $creationDateTime, rateLimitGuestMentions: false); + $breakoutRoom->setLastMessage($comment); + } + } finally { + if ($shouldFlush) { + $this->notificationManager->flush(); + } + } + + return $breakoutRooms; + } + + public function requestAssistance(Room $breakoutRoom): void { + $this->setAssistanceRequest($breakoutRoom, BreakoutRoom::STATUS_ASSISTANCE_REQUESTED); + } + + public function resetRequestForAssistance(Room $breakoutRoom): void { + $this->setAssistanceRequest($breakoutRoom, BreakoutRoom::STATUS_ASSISTANCE_RESET); + } + + protected function setAssistanceRequest(Room $breakoutRoom, int $status): void { + if ($breakoutRoom->getObjectType() !== BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new InvalidArgumentException('room'); + } + + if ($breakoutRoom->getLobbyState() !== Webinary::LOBBY_NONE) { + throw new InvalidArgumentException('room'); + } + + if (!in_array($status, [ + BreakoutRoom::STATUS_ASSISTANCE_RESET, + BreakoutRoom::STATUS_ASSISTANCE_REQUESTED, + ], true)) { + throw new InvalidArgumentException('status'); + } + + $this->roomService->setBreakoutRoomStatus($breakoutRoom, $status); + $this->roomService->setLastActivity($breakoutRoom, $this->timeFactory->getDateTime()); + } + + /** + * @param Room $parent + * @return Room[] + */ + public function startBreakoutRooms(Room $parent): array { + if ($parent->getBreakoutRoomMode() === BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('mode'); + } + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken(), true); + foreach ($breakoutRooms as $breakoutRoom) { + $this->roomService->setLobby($breakoutRoom, Webinary::LOBBY_NONE, null); + } + + $this->roomService->setBreakoutRoomStatus($parent, BreakoutRoom::STATUS_STARTED); + + return $breakoutRooms; + } + + /** + * @param Room $parent + * @return Room[] + */ + public function stopBreakoutRooms(Room $parent): array { + if ($parent->getBreakoutRoomMode() === BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('mode'); + } + + $this->roomService->setBreakoutRoomStatus($parent, BreakoutRoom::STATUS_STOPPED); + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken(), true); + foreach ($breakoutRooms as $breakoutRoom) { + $this->roomService->setLobby($breakoutRoom, Webinary::LOBBY_NON_MODERATORS, null); + + if ($breakoutRoom->getBreakoutRoomStatus() === BreakoutRoom::STATUS_ASSISTANCE_REQUESTED) { + $this->roomService->setBreakoutRoomStatus($breakoutRoom, BreakoutRoom::STATUS_ASSISTANCE_RESET); + } + } + + return $breakoutRooms; + } + + public function switchBreakoutRoom(Room $parent, Participant $participant, string $targetToken): Room { + if ($parent->getBreakoutRoomMode() !== BreakoutRoom::MODE_FREE) { + throw new InvalidArgumentException('mode'); + } + + if ($parent->getBreakoutRoomStatus() !== BreakoutRoom::STATUS_STARTED) { + throw new InvalidArgumentException('status'); + } + + if ($participant->hasModeratorPermissions()) { + // Moderators don't switch, they are part of all breakout rooms + throw new InvalidArgumentException('moderator'); + } + + $attendee = $participant->getAttendee(); + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken()); + + $target = null; + foreach ($breakoutRooms as $breakoutRoom) { + if ($targetToken === $breakoutRoom->getToken()) { + $target = $breakoutRoom; + break; + } + } + + if ($target === null) { + throw new InvalidArgumentException('target'); + } + + foreach ($breakoutRooms as $breakoutRoom) { + try { + $removeParticipant = $this->participantService->getParticipantByActor( + $breakoutRoom, + $attendee->getActorType(), + $attendee->getActorId() + ); + + if ($targetToken !== $breakoutRoom->getToken()) { + // Remove from all other breakout rooms + $this->participantService->removeAttendee( + $breakoutRoom, + $removeParticipant, + AAttendeeRemovedEvent::REASON_LEFT + ); + } + } catch (ParticipantNotFoundException $e) { + if ($targetToken === $breakoutRoom->getToken()) { + // Join the target breakout room + $this->participantService->addUsers( + $breakoutRoom, + [ + [ + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + 'displayName' => $attendee->getDisplayName(), + 'participantType' => $attendee->getParticipantType(), + ] + ] + ); + } + } + } + + return $target; + } + + /** + * @param Room $parent + * @param Participant $participant + * @return Room[] + */ + public function getBreakoutRooms(Room $parent, Participant $participant): array { + if ($parent->getBreakoutRoomMode() === BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new InvalidArgumentException('mode'); + } + + if (!$participant->hasModeratorPermissions() && $parent->getBreakoutRoomStatus() !== BreakoutRoom::STATUS_STARTED) { + throw new InvalidArgumentException('status'); + } + + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken(), true); + + $returnAll = $participant->hasModeratorPermissions() || $parent->getBreakoutRoomMode() === BreakoutRoom::MODE_FREE; + if (!$returnAll) { + $rooms = []; + foreach ($breakoutRooms as $breakoutRoom) { + try { + $this->participantService->getParticipantByActor( + $breakoutRoom, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId() + ); + $rooms[] = $breakoutRoom; + } catch (ParticipantNotFoundException $e) { + // Skip this room + } + } + return $rooms; + } + return $breakoutRooms; + } + + /** + * @param Room $parent + * @param string $actorType + * @param string $actorId + * @param bool $throwOnModerator + * @return void + * @throws InvalidArgumentException When being used for a moderator + */ + public function removeAttendeeFromBreakoutRoom(Room $parent, string $actorType, string $actorId, bool $throwOnModerator = true): void { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $parent->getToken()); + + foreach ($breakoutRooms as $breakoutRoom) { + try { + $participant = $this->participantService->getParticipantByActor( + $breakoutRoom, + $actorType, + $actorId + ); + + if ($throwOnModerator && $participant->hasModeratorPermissions()) { + throw new InvalidArgumentException('moderator'); + } + + $this->participantService->removeAttendee($breakoutRoom, $participant, AAttendeeRemovedEvent::REASON_REMOVED); + } catch (ParticipantNotFoundException $e) { + // Skip this room + } + } + } +} diff --git a/lib/Service/CalendarIntegrationService.php b/lib/Service/CalendarIntegrationService.php new file mode 100644 index 0000000..1df1bb1 --- /dev/null +++ b/lib/Service/CalendarIntegrationService.php @@ -0,0 +1,357 @@ + + */ + public function getDashboardEvents(string $userId): array { + $principaluri = 'principals/users/' . $userId; + $calendars = $this->calendarManager->getCalendarsForPrincipal($principaluri); + if (count($calendars) === 0) { + return []; + } + + // Only use personal calendars + // Events for shared calendars where you are an ATTENDEE will be in your personal calendar + $calendars = array_filter($calendars, static function (ICalendar $calendar) { + if ($calendar->getUri() === 'contact_birthdays') { + // The birthday calendar does not contain events with a location matching a talk room. + return false; + } + if (method_exists($calendar, 'isShared')) { + return $calendar->isShared() === false; + } + return true; + }); + + $userTimezone = $this->dateTimeZone->getTimezone(); + // Midnight for the current user so we also include ongoing events (might be all day events) + $start = $this->timeFactory->getDateTime()->setTimezone($userTimezone)->setTime(0, 0); + $start = $start->setTimezone(new \DateTimeZone('UTC')); + $end = clone($start); + $end = $end->add(\DateInterval::createFromDateString('1 week')); + $options = [ + 'timerange' => [ + 'start' => $start, + 'end' => $end, + ], + ]; + + $pattern = '/call/'; + $searchProperties = ['LOCATION']; + $events = []; + /** @var ICalendar $calendar */ + foreach ($calendars as $calendar) { + $searchResult = $calendar->search($pattern, $searchProperties, $options, 100); + foreach ($searchResult as $calendarEvent) { + // Find first recurrence in the future + $event = null; + $dashboardEvent = new Event(); + + foreach ($calendarEvent['objects'] as $object) { + if (!isset($object['DTEND'][0])) { + // Don't show events without end since they should not take up any time + // @link https://www.kanzaki.com/docs/ical/vevent.html + continue; + } + $dashboardEvent->setStart(\DateTime::createFromImmutable($object['DTSTART'][0])->setTimezone($userTimezone)->getTimestamp()); + $dashboardEvent->setEnd(\DateTime::createFromImmutable($object['DTEND'][0])->setTimezone($userTimezone)->getTimestamp()); + // Filter out events in the past + if ($dashboardEvent->getEnd() <= $this->timeFactory->getDateTime('now', $userTimezone)->getTimestamp()) { + continue; + } + + $event = $object; + break; + } + + $location = $event['LOCATION'][0] ?? null; + if ($event === null || $location === null) { + continue; + } + + if (isset($event['STATUS']) && $event['STATUS'][0] === 'CANCELLED') { + continue; + } + + try { + $token = $this->roomService->parseRoomTokenFromUrl($location); + // Already returns public / open conversations + $room = $this->manager->getRoomForUserByToken($token, $userId); + } catch (RoomNotFoundException) { + $this->logger->debug("Room for url $location not found in dashboard service"); + continue; + } + + $dashboardEvent->setRoomToken($token); + $dashboardEvent->setRoomType($room->getType()); + $dashboardEvent->setRoomName($room->getName()); + $dashboardEvent->setRoomDisplayName($room->getDisplayName($userId)); + + if (isset($event['ATTENDEE'])) { + $dashboardEvent->generateAttendance($event['ATTENDEE']); + } + + $dashboardEvent->setEventName($event['SUMMARY'][0] ?? ''); + $dashboardEvent->setEventDescription($event['DESCRIPTION'][0] ?? null); + + if (isset($event['ATTACH'])) { + $dashboardEvent->handleCalendarAttachments($calendar->getUri(), $event['ATTACH']); + } + + if (isset($events[$dashboardEvent->generateEventIdentifier()])) { + /** @var Event $existing */ + $existing = $events[$dashboardEvent->generateEventIdentifier()]; + $existing->addCalendar($calendar->getUri(), $calendar->getDisplayName(), $calendar->getDisplayColor()); + // Merge attachments + $existing->mergeAttachments($dashboardEvent); + + // If original SUMMARY is empty, use the duplicate content if it exists + if ($existing->getEventDescription() === null) { + $existing->setEventDescription($dashboardEvent->getEventDescription() ?? ''); + } + + // We continue here as the same event already exists in a different calendar + $events[$existing->generateEventIdentifier()] = $existing; + continue; + } + + $dashboardEvent->addCalendar($calendar->getUri(), $calendar->getDisplayName(), $calendar->getDisplayColor()); + $dashboardEvent->setRoomAvatarVersion($this->avatarService->getAvatarVersion($room)); + $dashboardEvent->setRoomActiveSince($room->getActiveSince()?->getTimestamp()); + $objectId = base64_encode($this->urlGenerator->getWebroot() . '/remote.php/dav/calendars/' . $userId . '/' . $calendar->getUri() . '/' . $calendarEvent['uri']); + + if (isset($event['RECURRENCE-ID'])) { + $dashboardEvent->setEventLink( + $this->urlGenerator->linkToRouteAbsolute( + 'calendar.view.indexdirect.edit', + [ + 'objectId' => $objectId, + 'recurrenceId' => $event['RECURRENCE-ID'][0], + ] + ) + ); + } else { + $dashboardEvent->setEventLink( + $this->urlGenerator->linkToRouteAbsolute('calendar.view.indexdirect.edit', ['objectId' => $objectId]) + ); + } + + $events[$dashboardEvent->generateEventIdentifier()] = $dashboardEvent; + if (count($events) === 10) { + break; + } + } + } + + if (empty($events)) { + return $events; + } + + usort($events, static function (Event $a, Event $b) { + return $a->getStart() - $b->getStart(); + }); + + return array_map(static function (Event $event) { + return $event->jsonSerialize(); + }, array_slice($events, 0, 10)); + } + + /** + * @param string $userId + * @param Room $room + * @return list + */ + public function getMutualEvents(string $userId, Room $room): array { + if ($room->getType() !== Room::TYPE_ONE_TO_ONE) { + throw new InvalidRoomException(); + } + + try { + $userIds = json_decode($room->getName(), false, 512, JSON_THROW_ON_ERROR); + } catch (\JsonException) { + throw new InvalidRoomException(); + } + + $participants = array_filter($userIds, static function (string $participantId) use ($userId) { + return $participantId !== $userId; + }); + + if (count($participants) !== 1) { + throw new InvalidRoomException(); + } + + $otherParticipant = $this->userManager->get(array_pop($participants)); + if ($otherParticipant === null) { + // Change to correct exception + throw new ParticipantNotFoundException(); + } + + $pattern = $otherParticipant->getEMailAddress(); + if ($pattern === null) { + return []; + } + + $principaluri = 'principals/users/' . $userId; + $calendars = $this->calendarManager->getCalendarsForPrincipal($principaluri); + if (count($calendars) === 0) { + return []; + } + + // Only use personal calendars + $calendars = array_filter($calendars, static function (ICalendar $calendar) { + if (method_exists($calendar, 'isShared')) { + return $calendar->isShared() === false; + } + return true; + }); + + $start = $this->timeFactory->getDateTime(); + $end = clone($start); + $end = $end->add(\DateInterval::createFromDateString('1 week')); + $options = [ + 'timerange' => [ + 'start' => $start, + 'end' => $end, + ], + ]; + + $userTimezone = $this->dateTimeZone->getTimezone(); + $searchProperties = ['ATTENDEE', 'ORGANIZER']; + $events = []; + /** @var ICalendar $calendar */ + foreach ($calendars as $calendar) { + $searchResult = $calendar->search($pattern, $searchProperties, $options); + foreach ($searchResult as $calendarEvent) { + // Find first recurrence in the future + $event = null; + $dashboardEvent = new Event(); + foreach ($calendarEvent['objects'] as $object) { + $dashboardEvent->setStart(\DateTime::createFromImmutable($object['DTSTART'][0])->setTimezone($userTimezone)->getTimestamp()); + $dashboardEvent->setEnd(\DateTime::createFromImmutable($object['DTEND'][0])->setTimezone($userTimezone)->getTimestamp()); + + if ($dashboardEvent->getStart() >= $start->getTimestamp()) { + $event = $object; + break; + } + } + + if ($event === null) { + continue; + } + + if (!isset($event['ORGANIZER']) && !isset($event['ATTENDEE'])) { + // Don't show events without attendees + continue; + } + + if (!$dashboardEvent->isOrganizer($event['ORGANIZER'], $otherParticipant->getEMailAddress()) && !$dashboardEvent->isAttendee($event['ATTENDEE'], $otherParticipant->getEMailAddress())) { + // Due to a bug in the caldav search, we will get a search result for recurring events + // even if the pattern does not match the current recurrence + // So make sure that $otherParticipant is an attendee on the current event + continue; + } + + $dashboardEvent->generateAttendance($event['ATTENDEE']); + $dashboardEvent->setEventName($event['SUMMARY'][0] ?? ''); + $dashboardEvent->setEventDescription($event['DESCRIPTION'][0] ?? null); + $dashboardEvent->addCalendar($calendar->getUri(), $calendar->getDisplayName(), $calendar->getDisplayColor()); + + $location = $event['LOCATION'][0] ?? null; + if ($location !== null && str_contains($location, '/call/') === true) { + try { + $token = $this->roomService->parseRoomTokenFromUrl($location); + // Already returns public / open conversations + $eventRoom = $this->manager->getRoomForUserByToken($token, $userId); + } catch (RoomNotFoundException) { + $this->logger->debug("Room for url $location not found in dashboard service"); + continue; + } + $dashboardEvent->setRoomType($eventRoom->getType()); + $dashboardEvent->setRoomName($eventRoom->getName()); + $dashboardEvent->setRoomToken($eventRoom->getToken()); + $dashboardEvent->setRoomDisplayName($eventRoom->getDisplayName($userId)); + $dashboardEvent->setRoomAvatarVersion($this->avatarService->getAvatarVersion($eventRoom)); + $dashboardEvent->setRoomActiveSince($eventRoom->getActiveSince()?->getTimestamp()); + } + + if (isset($event['ATTACH'])) { + $dashboardEvent->handleCalendarAttachments($calendar->getUri(), $event['ATTACH']); + } + + $objectId = base64_encode($this->urlGenerator->getWebroot() . '/remote.php/dav/calendars/' . $userId . '/' . $calendar->getUri() . '/' . $calendarEvent['uri']); + if (isset($event['RECURRENCE-ID'])) { + $dashboardEvent->setEventLink( + $this->urlGenerator->linkToRouteAbsolute( + 'calendar.view.indexdirect.edit', + [ + 'objectId' => $objectId, + 'recurrenceId' => $event['RECURRENCE-ID'][0], + ] + ) + ); + } else { + $dashboardEvent->setEventLink( + $this->urlGenerator->linkToRouteAbsolute('calendar.view.indexdirect.edit', ['objectId' => $objectId]) + ); + } + + $events[] = $dashboardEvent; + } + } + + if (empty($events)) { + return $events; + } + + usort($events, static function (Event $a, Event $b) { + return $a->getStart() - $b->getStart(); + }); + + return array_map(static function (Event $event) { + return $event->jsonSerialize(); + }, array_slice($events, 0, 3)); + } +} diff --git a/lib/Service/CertificateService.php b/lib/Service/CertificateService.php new file mode 100644 index 0000000..6291c33 --- /dev/null +++ b/lib/Service/CertificateService.php @@ -0,0 +1,117 @@ +getParsedTlsHost($host); + + if ($parsedHost === null) { + // Unable to parse the specified host + $this->logger->debug('Ignoring certificate check of non-tls host ' . $host); + return null; + } + + // We need to disable verification here to also get an expired certificate + $streamContext = stream_context_create([ + 'ssl' => [ + 'capture_peer_cert' => true, + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true, + ], + ]); + + // In case no port was specified, use port 443 for the check + if (!str_contains($parsedHost, ':')) { + $parsedHost .= ':443'; + } + + $this->logger->debug('Checking certificate of ' . $parsedHost); + + $streamClient = stream_socket_client('ssl://' . $parsedHost, $errorNumber, $errorString, 30, STREAM_CLIENT_CONNECT, $streamContext); + + if ($streamClient === false || $errorNumber !== 0) { + // Unable to connect or invalid server address + $this->logger->debug('Unable to check certificate of ' . $parsedHost); + return null; + } + + $streamCertificate = stream_context_get_params($streamClient); + $certificateInfo = openssl_x509_parse($streamCertificate['options']['ssl']['peer_certificate']); + $certificateValidTo = new \DateTime('@' . $certificateInfo['validTo_time_t']); + + $now = new \DateTime(); + $diff = $now->diff($certificateValidTo); + $days = $diff->days; + + if ($days === false) { + return null; + } + + // $days will always be positive -> invert it, when the end date of the certificate is in the past + if ($diff->invert) { + $days *= -1; + } + + return $days; + } +} diff --git a/lib/Service/ChecksumVerificationService.php b/lib/Service/ChecksumVerificationService.php new file mode 100644 index 0000000..99fe7de --- /dev/null +++ b/lib/Service/ChecksumVerificationService.php @@ -0,0 +1,55 @@ +setToken($room->getToken()); + $consent->setActorType($actorType); + $consent->setActorId($actorId); + $consent->setDateTime($this->timeFactory->getDateTime()); + $this->consentMapper->insert($consent); + + return $consent; + } + + /** + * @return Consent[] + */ + public function getConsentForRoom(Room $room): array { + return $this->consentMapper->findForToken($room->getToken()); + } + + /** + * @param Attendee::ACTOR_* $actorType + * @return Consent[] + */ + public function getConsentForActor(string $actorType, string $actorId): array { + return $this->consentMapper->findForActor($actorType, $actorId); + } + + /** + * @param Attendee::ACTOR_* $actorType + * @return Consent[] + */ + public function getConsentForRoomByActor(Room $room, string $actorType, string $actorId): array { + return $this->consentMapper->findForTokenByActor($room->getToken(), $actorType, $actorId); + } + + public function deleteByActor(string $actorType, string $actorId): void { + $this->consentMapper->deleteByActor($actorType, $actorId); + } + + public function deleteByRoom(Room $room): void { + $this->consentMapper->deleteByToken($room->getToken()); + } +} diff --git a/lib/Service/EmojiService.php b/lib/Service/EmojiService.php new file mode 100644 index 0000000..18674d1 --- /dev/null +++ b/lib/Service/EmojiService.php @@ -0,0 +1,43 @@ +emojiHelper->doesPlatformSupportEmoji() || mb_strlen($roomName) === $length) { + return ''; + } + + $attempt = mb_substr($roomName, 0, $length + 1); + if ($this->emojiHelper->isValidSingleEmoji($attempt)) { + $longerAttempt = $this->getFirstCombinedEmoji($roomName, $length + 1); + return $longerAttempt ?: $attempt; + } + return ''; + } + + public function isValidSingleEmoji(string $string): bool { + return $this->emojiHelper->doesPlatformSupportEmoji() && $this->emojiHelper->isValidSingleEmoji(mb_substr($string, 0, 1)); + } +} diff --git a/lib/Service/HostedSignalingServerService.php b/lib/Service/HostedSignalingServerService.php new file mode 100644 index 0000000..a966078 --- /dev/null +++ b/lib/Service/HostedSignalingServerService.php @@ -0,0 +1,487 @@ +apiServerUrl = $this->config->getSystemValue('talk_hardcoded_hpb_service', 'https://api.spreed.cloud'); + } + + /** + * @throws HostedSignalingServerAPIException + * @throws HostedSignalingServerInputException + */ + public function registerAccount(RegisterAccountData $registerAccountData): AccountId { + try { + $nonce = $this->secureRandom->generate(32); + $this->config->setAppValue('spreed', 'hosted-signaling-server-nonce', $nonce); + + $client = $this->clientService->newClient(); + $response = $client->post($this->apiServerUrl . '/v1/account', [ + 'json' => [ + 'url' => $registerAccountData->getUrl(), + 'name' => $registerAccountData->getName(), + 'email' => $registerAccountData->getEmail(), + 'language' => $registerAccountData->getLanguage(), + 'country' => $registerAccountData->getCountry(), + ], + 'headers' => [ + 'X-Account-Service-Nonce' => $nonce, + ], + 'timeout' => 10, + ]); + } catch (ClientException $e) { + $response = $e->getResponse(); + + if ($response === null) { + $this->logger->error('Failed to request hosted signaling server trial', ['exception' => $e]); + $message = $this->l10n->t('Failed to request trial because the trial server is unreachable. Please try again later.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $status = $response->getStatusCode(); + switch ($status) { + case Http::STATUS_UNAUTHORIZED: + $body = $response->getBody()->getContents(); + $this->logger->error('Requesting hosted signaling server trial failed: unauthorized - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is a problem with the authentication of this instance. Maybe it is not reachable from the outside to verify it\'s URL.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_BAD_REQUEST: + $body = $response->getBody()->getContents(); + if ($body) { + $parsedBody = json_decode($body, true); + if (json_last_error() !== JSON_ERROR_NONE) { + $this->logger->error('Requesting hosted signaling server trial failed: cannot parse JSON response - JSON error: ' . json_last_error() . ' ' . json_last_error_msg() . ' HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + if ($parsedBody['reason']) { + $message = ''; + switch ($parsedBody['reason']) { + case 'invalid_content_type': + $log = 'The content type is invalid.'; + break; + case 'invalid_json': + $log = 'The JSON is invalid.'; + break; + case 'missing_url': + $log = 'The URL is missing.'; + break; + case 'missing_name': + $log = 'The name is missing.'; + break; + case 'missing_email': + $log = 'The email address is missing'; + break; + case 'missing_language': + $log = 'The language code is missing.'; + break; + case 'missing_country': + $log = 'The country code is missing.'; + break; + case 'invalid_url': + $message = $this->l10n->t('The URL is invalid.'); + $log = 'The entered URL is invalid.'; + break; + case 'https_required': + $message = $this->l10n->t('An HTTPS URL is required.'); + $log = 'An HTTPS URL is required.'; + break; + case 'invalid_email': + $message = $this->l10n->t('The email address is invalid.'); + $log = 'The email address is invalid.'; + break; + case 'invalid_language': + $message = $this->l10n->t('The language is invalid.'); + $log = 'The language is invalid.'; + break; + case 'invalid_country': + $message = $this->l10n->t('The country is invalid.'); + $log = 'The country is invalid.'; + break; + } + // user error + if ($message !== '') { + $this->logger->warning('Requesting hosted signaling server trial failed: bad request - reason: ' . $parsedBody['reason'] . ' ' . $log); + throw new HostedSignalingServerAPIException($message, $status); + } + $this->logger->error('Requesting hosted signaling server trial failed: bad request - reason: ' . $parsedBody['reason'] . ' ' . $log); + + $message = $this->l10n->t('There is a problem with the request of the trial. Please check your logs for further information.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_TOO_MANY_REQUESTS: + $body = $response->getBody()->getContents(); + $this->logger->error('Requesting hosted signaling server trial failed: too many requests - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Too many requests are send from your servers address. Please try again later.'); + throw new HostedSignalingServerInputException($message, $status); + case Http::STATUS_CONFLICT: + $body = $response->getBody()->getContents(); + $this->logger->error('Requesting hosted signaling server trial failed: already registered - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is already a trial registered for this Nextcloud instance.'); + throw new HostedSignalingServerInputException($message, $status); + case Http::STATUS_INTERNAL_SERVER_ERROR: + $body = $response->getBody()->getContents(); + $this->logger->error('Requesting hosted signaling server trial failed: internal server error - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + default: + $body = $response->getBody()->getContents(); + $this->logger->error('Requesting hosted signaling server trial failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Failed to request trial because the trial server behaved wrongly. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } catch (\Exception $e) { + $this->logger->error('Failed to request hosted signaling server trial', ['exception' => $e]); + $message = $this->l10n->t('Failed to request trial because the trial server is unreachable. Please try again later.'); + throw new HostedSignalingServerAPIException($message, ($e instanceof ServerException ? $e->getResponse()?->getStatusCode() : null) ?? Http::STATUS_INTERNAL_SERVER_ERROR); + } finally { + // this is needed here because the deletion happens in a concurrent request + // and thus the cached value in the config object would trigger an UPDATE + // instead of an INSERT if there is another request to the API server + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-nonce'); + } + + $status = $response->getStatusCode(); + + if ($status !== Http::STATUS_CREATED) { + $body = $response->getBody(); + $this->logger->error('Requesting hosted signaling server trial failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + + $body = $response->getBody(); + $data = json_decode($body, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + $this->logger->error('Requesting hosted signaling server trial failed: cannot parse JSON response - JSON error: ' . json_last_error() . ' ' . json_last_error_msg() . ' HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + if (!isset($data['account_id'])) { + $this->logger->error('Requesting hosted signaling server trial failed: no account ID transfered - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $accountId = (string)$data['account_id']; + $this->config->setAppValue('spreed', 'hosted-signaling-server-account-id', $accountId); + + return new AccountId($accountId); + } + + /** + * @throws HostedSignalingServerAPIException + * + * @return \ArrayAccess|array{created: mixed, owner: \ArrayAccess|array{country: mixed, email: mixed, language: mixed, name: mixed, url: mixed, ...}, status: mixed, signaling?: array, ...} + */ + public function fetchAccountInfo(AccountId $accountId) { + try { + $nonce = $this->secureRandom->generate(32); + $this->config->setAppValue('spreed', 'hosted-signaling-server-nonce', $nonce); + + $client = $this->clientService->newClient(); + $response = $client->get($this->apiServerUrl . '/v1/account/' . $accountId->get(), [ + 'headers' => [ + 'X-Account-Service-Nonce' => $nonce, + ], + 'timeout' => 10, + ]); + } catch (ClientException $e) { + $response = $e->getResponse(); + + if ($response === null) { + $this->logger->error('Trial requested but failed to get account information', ['exception' => $e]); + $message = $this->l10n->t('Trial requested but failed to get account information. Please check back later.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $status = $response->getStatusCode(); + + switch ($status) { + case Http::STATUS_UNAUTHORIZED: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: unauthorized - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it\'s URL.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_BAD_REQUEST: + $body = $response->getBody()->getContents(); + if ($body) { + $parsedBody = json_decode($body, true); + if (json_last_error() !== JSON_ERROR_NONE) { + $this->logger->error('Getting the account information failed: cannot parse JSON response - JSON error: ' . json_last_error() . ' ' . json_last_error_msg() . ' HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + if ($parsedBody['reason']) { + switch ($parsedBody['reason']) { + case 'missing_account_id': + $log = 'The account ID is missing.'; + break; + default: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Failed to fetch account information because the trial server behaved wrongly. Please check back later.'); + throw new HostedSignalingServerAPIException($message, $status); + } + $this->logger->error('Getting the account information failed: bad request - reason: ' . $parsedBody['reason'] . ' ' . $log); + + $message = $this->l10n->t('There is a problem with fetching the account information. Please check your logs for further information.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_TOO_MANY_REQUESTS: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: too many requests - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Too many requests are send from your servers address. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_NOT_FOUND: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: account not found - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is no such account registered.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_INTERNAL_SERVER_ERROR: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: internal server error - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + default: + $body = $response->getBody()->getContents(); + $this->logger->error('Getting the account information failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Failed to fetch account information because the trial server behaved wrongly. Please check back later.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } catch (\Exception $e) { + $this->logger->error('Failed to request hosted signaling server trial', ['exception' => $e]); + $message = $this->l10n->t('Failed to fetch account information because the trial server is unreachable. Please check back later.'); + throw new HostedSignalingServerAPIException($message, ($e instanceof ServerException ? $e->getResponse()?->getStatusCode() : null) ?? Http::STATUS_INTERNAL_SERVER_ERROR); + } finally { + // this is needed here because the delete happens in a concurrent request + // and thus the cached value in the config object would trigger an UPDATE + // instead of an INSERT if there is another request to the API server + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-nonce'); + } + + $status = $response->getStatusCode(); + + if ($status !== Http::STATUS_OK) { + $body = $response->getBody(); + $this->logger->error('Getting the account information failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + + $body = $response->getBody(); + $data = (array)json_decode($body, true); + + if (json_last_error() !== JSON_ERROR_NONE) { + $this->logger->error('Getting the account information failed: cannot parse JSON response - JSON error: ' . json_last_error() . ' ' . json_last_error_msg() . ' HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + if (!isset($data['status']) + || !isset($data['created']) + || ($data['status'] === 'active' && ( + !isset($data['signaling']) + || !isset($data['signaling']['url']) + || !isset($data['signaling']['secret']) + ) + ) + || !isset($data['owner']) + || !isset($data['owner']['url']) + || !isset($data['owner']['name']) + || !isset($data['owner']['email']) + || !isset($data['owner']['language']) + || !isset($data['owner']['country']) + /* TODO they are not yet returned + || ($data['status'] === 'active' && ( + !isset($data['limits']) + || !isset($data['limits']['users']) + ) + ) + */ + || (in_array($data['status'], ['error', 'blocked']) && !isset($data['reason'])) + || !in_array($data['status'], ['error', 'blocked', 'pending', 'active', 'expired']) + ) { + $this->logger->error('Getting the account information failed: response is missing mandatory field - data: ' . json_encode($data)); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + return $data; + } + + /** + * @throws HostedSignalingServerAPIException + */ + public function deleteAccount(AccountId $accountId): void { + try { + $nonce = $this->secureRandom->generate(32); + $this->config->setAppValue('spreed', 'hosted-signaling-server-nonce', $nonce); + + $client = $this->clientService->newClient(); + $response = $client->delete($this->apiServerUrl . '/v1/account/' . $accountId->get(), [ + 'headers' => [ + 'X-Account-Service-Nonce' => $nonce, + ], + 'timeout' => 10, + ]); + } catch (ClientException $e) { + $response = $e->getResponse(); + + if ($response === null) { + $this->logger->error('Deleting the hosted signaling server account failed', ['exception' => $e]); + $message = $this->l10n->t('Deleting the hosted signaling server account failed. Please check back later.'); + throw new HostedSignalingServerAPIException($message, Http::STATUS_INTERNAL_SERVER_ERROR); + } + + $status = $response->getStatusCode(); + + switch ($status) { + case Http::STATUS_UNAUTHORIZED: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: unauthorized - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is a problem with the authentication of this request. Maybe it is not reachable from the outside to verify it\'s URL.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_BAD_REQUEST: + $body = $response->getBody()->getContents(); + if ($body) { + $parsedBody = json_decode($body, true); + if (json_last_error() !== JSON_ERROR_NONE) { + $this->logger->error('Deleting the hosted signaling server account failed: cannot parse JSON response - JSON error: ' . json_last_error() . ' ' . json_last_error_msg() . ' HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + if ($parsedBody['reason']) { + switch ($parsedBody['reason']) { + case 'missing_account_id': + $log = 'The account ID is missing.'; + break; + default: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Failed to delete the account because the trial server behaved wrongly. Please check back later.'); + throw new HostedSignalingServerAPIException($message, $status); + } + $this->logger->error('Deleting the hosted signaling server account failed: bad request - reason: ' . $parsedBody['reason'] . ' ' . $log); + + $message = $this->l10n->t('There is a problem with deleting the account. Please check your logs for further information.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_TOO_MANY_REQUESTS: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: too many requests - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Too many requests are sent from your servers address. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_NOT_FOUND: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: account not found - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('There is no such account registered.'); + throw new HostedSignalingServerAPIException($message, $status); + case Http::STATUS_INTERNAL_SERVER_ERROR: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: internal server error - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Something unexpected happened. Please try again later.'); + throw new HostedSignalingServerAPIException($message, $status); + default: + $body = $response->getBody()->getContents(); + $this->logger->error('Deleting the hosted signaling server account failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + $message = $this->l10n->t('Failed to delete the account because the trial server behaved wrongly. Please check back later.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } catch (\Exception $e) { + $this->logger->error('Deleting the hosted signaling server account failed', ['exception' => $e]); + $message = $this->l10n->t('Failed to delete the account because the trial server is unreachable. Please check back later.'); + throw new HostedSignalingServerAPIException($message, ($e instanceof ServerException ? $e->getResponse()?->getStatusCode() : null) ?? Http::STATUS_INTERNAL_SERVER_ERROR); + } finally { + // this is needed here because the delete happens in a concurrent request + // and thus the cached value in the config object would trigger an UPDATE + // instead of an INSERT if there is another request to the API server + $this->config->deleteAppValue('spreed', 'hosted-signaling-server-nonce'); + } + + $status = $response->getStatusCode(); + + if ($status !== Http::STATUS_NO_CONTENT) { + $body = $response->getBody(); + $this->logger->error('Deleting the hosted signaling server account failed: something else happened - HTTP status: ' . $status . ' Response body: ' . $body); + + + $message = $this->l10n->t('Something unexpected happened.'); + throw new HostedSignalingServerAPIException($message, $status); + } + } +} diff --git a/lib/Service/InvitationService.php b/lib/Service/InvitationService.php new file mode 100644 index 0000000..1c1bb82 --- /dev/null +++ b/lib/Service/InvitationService.php @@ -0,0 +1,199 @@ +validateUserInvitations($invitationList, $participants['users']); + } + if (!empty($participants['emails'])) { + $this->validateEmailInvitations($invitationList, $participants['emails']); + } + if (!empty($participants['groups'])) { + $this->validateGroupInvitations($invitationList, $participants['groups']); + } + if (!empty($participants['teams'])) { + $this->validateTeamInvitations($invitationList, $participants['teams'], $currentUser); + } + if (!empty($participants['federated_users'])) { + $this->validateFederatedUserInvitations($invitationList, $participants['federated_users'], $currentUser); + } + if (!empty($participants['phones'])) { + $this->validatePhoneInvitations($invitationList, $participants['phones'], $currentUser, $room); + } + return $invitationList; + } + + /** + * @param list $userIds + */ + protected function validateUserInvitations(InvitationList $invitationList, array $userIds): void { + $invalidUsers = $validUsers = []; + foreach ($userIds as $userId) { + if ($userId === MatterbridgeManager::BRIDGE_BOT_USERID) { + $invalidUsers[] = $userId; + continue; + } + + $user = $this->userManager->get($userId); + if ($user instanceof IUser) { + $validUsers[$userId] = $user; + } else { + $invalidUsers[] = $userId; + } + } + + $invitationList->setUserResults($validUsers, $invalidUsers); + } + + /** + * @param list $emails + */ + protected function validateEmailInvitations(InvitationList $invitationList, array $emails): void { + $invalidEmails = $validEmails = []; + foreach ($emails as $email) { + if ($this->mailer->validateMailAddress($email)) { + $validEmails[$email] = strtolower($email); + } else { + $invalidEmails[] = $email; + } + } + $invitationList->setEmailResults($validEmails, $invalidEmails); + } + + /** + * @param list $groupIds + */ + protected function validateGroupInvitations(InvitationList $invitationList, array $groupIds): void { + $invalidGroups = $validGroups = []; + + foreach ($groupIds as $groupId) { + $group = $this->groupManager->get($groupId); + if ($group instanceof IGroup) { + $validGroups[$groupId] = $group; + } else { + $invalidGroups[] = $groupId; + } + } + $invitationList->setGroupResults($validGroups, $invalidGroups); + } + + /** + * @param list $teamIds + */ + protected function validateTeamInvitations(InvitationList $invitationList, array $teamIds, IUser $currentUser): void { + if (!$this->appManager->isEnabledForUser('circles')) { + $invitationList->setTeamResults([], $teamIds); + return; + } + + $invalidTeams = $validTeams = []; + + foreach ($teamIds as $teamId) { + try { + $team = $this->participantService->getCircle($teamId, $currentUser->getUID()); + $validTeams[$teamId] = $team; + } catch (\Exception) { + $invalidTeams[] = $teamId; + } + } + + $invitationList->setTeamResults($validTeams, $invalidTeams); + } + + /** + * @param list $cloudIds + */ + protected function validateFederatedUserInvitations(InvitationList $invitationList, array $cloudIds, IUser $currentUser): void { + if (!$this->talkConfig->isFederationEnabled()) { + $invitationList->setFederatedUserResults([], $cloudIds); + return; + } + + $invalidCloudIds = $validCloudIds = []; + foreach ($cloudIds as $cloudIdString) { + try { + $cloudId = $this->cloudIdManager->resolveCloudId($cloudIdString); + $this->federationManager->isAllowedToInvite($currentUser, $cloudId); + $validCloudIds[$cloudIdString] = $cloudId; + } catch (\InvalidArgumentException|FederationRestrictionException) { + $invalidCloudIds[] = $cloudIdString; + } + } + $invitationList->setFederatedUserResults($validCloudIds, $invalidCloudIds); + } + + /** + * @param list $phoneNumbers + */ + protected function validatePhoneInvitations(InvitationList $invitationList, array $phoneNumbers, IUser $currentUser, ?Room $room): void { + if (!$this->talkConfig->isSIPConfigured() || !$this->talkConfig->canUserDialOutSIP($currentUser)) { + $invitationList->setPhoneNumberResults([], $phoneNumbers); + return; + } + + if ($room instanceof Room + && (preg_match(Room::SIP_INCOMPATIBLE_REGEX, $room->getToken()) + || !in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true))) { + $invitationList->setPhoneNumberResults([], $phoneNumbers); + return; + } + + $phoneRegion = $this->serverConfig->getSystemValueString('default_phone_region'); + if ($phoneRegion === '') { + $phoneRegion = null; + } + + $invalidPhoneNumbers = []; + $validPhoneNumbers = []; + + foreach ($phoneNumbers as $phoneNumber) { + $formattedNumber = $this->phoneNumberUtil->convertToStandardFormat($phoneNumber, $phoneRegion); + if ($formattedNumber === null) { + $invalidPhoneNumbers[] = $phoneNumber; + } else { + $validPhoneNumbers[$phoneNumber] = $formattedNumber; + } + } + + $invitationList->setPhoneNumberResults($validPhoneNumbers, $invalidPhoneNumbers); + } +} diff --git a/lib/Service/LiveTranscriptionService.php b/lib/Service/LiveTranscriptionService.php new file mode 100644 index 0000000..e48b0d3 --- /dev/null +++ b/lib/Service/LiveTranscriptionService.php @@ -0,0 +1,254 @@ +getAppApiPublicFunctions(); + } + } catch (LiveTranscriptionAppAPIException $e) { + return false; + } + + $exApp = $appApiPublicFunctions->getExApp('live_transcription'); + if ($exApp === null || !$exApp['enabled']) { + return false; + } + + return true; + } + + /** + * @throws LiveTranscriptionAppAPIException if app_api is not enabled or the + * public functions could not be + * got. + */ + private function getAppApiPublicFunctions(): object { + if (!$this->appManager->isEnabledForUser('app_api')) { + throw new LiveTranscriptionAppAPIException('app-api'); + } + + try { + $appApiPublicFunctions = Server::get(PublicFunctions::class); + } catch (ContainerExceptionInterface|NotFoundExceptionInterface $e) { + throw new LiveTranscriptionAppAPIException('app-api-functions'); + } + + return $appApiPublicFunctions; + } + + /** + * @throws LiveTranscriptionAppNotEnabledException if the external app + * "live_transcription" is + * not enabled. + * @throws LiveTranscriptionAppAPIException if the request could not be sent + * to the app or the response could + * not be processed. + * @throws LiveTranscriptionAppResponseException if the request itself + * succeeded but the app + * responded with an error. + */ + public function enable(Room $room, Participant $participant): void { + $parameters = [ + 'roomToken' => $room->getToken(), + 'ncSessionId' => $participant->getSession()->getSessionId(), + 'enable' => true, + ]; + + $languageId = $room->getLiveTranscriptionLanguageId(); + if (!empty($languageId)) { + $parameters['langId'] = $languageId; + } + + $this->requestToExAppLiveTranscription('POST', '/api/v1/call/transcribe', $parameters); + } + + /** + * @throws LiveTranscriptionAppNotEnabledException if the external app + * "live_transcription" is + * not enabled. + * @throws LiveTranscriptionAppAPIException if the request could not be sent + * to the app or the response could + * not be processed. + * @throws LiveTranscriptionAppResponseException if the request itself + * succeeded but the app + * responded with an error. + */ + public function disable(Room $room, Participant $participant): void { + $parameters = [ + 'roomToken' => $room->getToken(), + 'ncSessionId' => $participant->getSession()->getSessionId(), + 'enable' => false, + ]; + + $this->requestToExAppLiveTranscription('POST', '/api/v1/call/transcribe', $parameters); + } + + /** + * @throws LiveTranscriptionAppNotEnabledException if the external app + * "live_transcription" is + * not enabled. + * @throws LiveTranscriptionAppAPIException if the request could not be sent + * to the app or the response could + * not be processed. + * @throws LiveTranscriptionAppResponseException if the request itself + * succeeded but the app + * responded with an error. + */ + public function getAvailableLanguages(): array { + $languages = $this->requestToExAppLiveTranscription('GET', '/api/v1/languages'); + if ($languages === null) { + $this->logger->error('Request to live_transcription (ExApp) failed: list of available languages is null'); + + throw new LiveTranscriptionAppAPIException('response-null-language-list'); + } + + return $languages; + } + + /** + * @throws LiveTranscriptionAppNotEnabledException if the external app + * "live_transcription" is + * not enabled. + * @throws LiveTranscriptionAppAPIException if the request could not be sent + * to the app or the response could + * not be processed. + * @throws LiveTranscriptionAppResponseException if the request itself + * succeeded but the app + * responded with an error. + */ + public function setLanguage(Room $room, string $languageId): void { + $parameters = [ + 'roomToken' => $room->getToken(), + 'langId' => $languageId !== '' ? $languageId : 'en', + ]; + + try { + $this->requestToExAppLiveTranscription('POST', '/api/v1/call/set-language', $parameters); + } catch (LiveTranscriptionAppResponseException $e) { + // If there is no active transcription continue setting the language + // in the room. In any other case, abort. + if ($e->getResponse()->getStatusCode() !== 404) { + throw $e; + } + } + + $this->roomService->setLiveTranscriptionLanguageId($room, $languageId); + } + + /** + * @throws LiveTranscriptionAppNotEnabledException if the external app + * "live_transcription" is + * not enabled. + * @throws LiveTranscriptionAppAPIException if the request could not be sent + * to the app or the response could + * not be processed. + * @throws LiveTranscriptionAppResponseException if the request itself + * succeeded but the app + * responded with an error. + */ + private function requestToExAppLiveTranscription(string $method, string $route, array $parameters = []): ?array { + try { + $appApiPublicFunctions = $this->getAppApiPublicFunctions(); + } catch (LiveTranscriptionAppAPIException $e) { + if ($e->getMessage() === 'app-api') { + $this->logger->error('AppAPI is not enabled'); + } elseif ($e->getMessage() === 'app-api-functions') { + $this->logger->error('Could not get AppAPI public functions', ['exception' => $e]); + } + + throw new LiveTranscriptionAppNotEnabledException($e->getMessage()); + } + + if (!$this->isLiveTranscriptionAppEnabled($appApiPublicFunctions)) { + $this->logger->error('live_transcription (ExApp) is not enabled'); + + throw new LiveTranscriptionAppNotEnabledException('live-transcription-app'); + } + + $response = $appApiPublicFunctions->exAppRequest( + 'live_transcription', + $route, + $this->userId, + $method, + $parameters, + ); + + if (is_array($response) && isset($response['error'])) { + $this->logger->error('Request to live_transcription (ExApp) failed: ' . $response['error']); + + throw new LiveTranscriptionAppAPIException('response-error'); + } + + if (is_array($response)) { + // AppApi only uses array responses for errors, so this should never + // happen. + $this->logger->error('Request to live_transcription (ExApp) failed: response is not a valid response object'); + + throw new LiveTranscriptionAppAPIException('response-invalid-object'); + } + + $responseContentType = $response->getHeader('Content-Type'); + if (strpos($responseContentType, 'application/json') !== false) { + $body = $response->getBody(); + if (!is_string($body)) { + $this->logger->error('Request to live_transcription (ExApp) failed: response body is not a string, but content type is application/json', ['response' => $response]); + + throw new LiveTranscriptionAppAPIException('response-content-type'); + } + + $decodedBody = json_decode($body, true); + } else { + $decodedBody = ['response' => $response->getBody()]; + } + + if ($response->getStatusCode() < 200 || $response->getStatusCode() >= 300) { + $this->logger->error('live_transcription (ExApp) returned an error', [ + 'status-code' => $response->getStatusCode(), + 'response' => $decodedBody, + 'method' => $method, + 'route' => $route, + 'parameters' => $parameters, + ]); + + $exceptionMessage = 'response-status-code'; + if (is_array($decodedBody) && isset($decodedBody['error'])) { + $exceptionMessage .= ': ' . $decodedBody['error']; + } + throw new LiveTranscriptionAppResponseException($exceptionMessage, 0, null, $response); + } + + return $decodedBody; + } +} diff --git a/lib/Service/MembershipService.php b/lib/Service/MembershipService.php new file mode 100644 index 0000000..f88d5c1 --- /dev/null +++ b/lib/Service/MembershipService.php @@ -0,0 +1,100 @@ +filterUsersWithOtherGroupMemberships($room, $users); + $users = $this->filterUsersWithOtherCircleMemberships($room, $users); + return $users; + } + + /** + * @param Room $room + * @param IUser[] $users + * @return IUser[] + */ + protected function filterUsersWithOtherGroupMemberships(Room $room, array $users): array { + $groupAttendees = $this->attendeeMapper->getActorsByType($room->getId(), Attendee::ACTOR_GROUPS); + $groupIds = array_map(static function (Attendee $attendee) { + return $attendee->getActorId(); + }, $groupAttendees); + + if (empty($groupIds)) { + return $users; + } + + return array_filter($users, function (IUser $user) use ($groupIds) { + // Only delete users when the user is not member via another group + $userGroups = $this->groupManager->getUserGroupIds($user); + return empty(array_intersect($userGroups, $groupIds)); + }); + } + + /** + * @param Room $room + * @param IUser[] $users + * @return IUser[] + */ + protected function filterUsersWithOtherCircleMemberships(Room $room, array $users): array { + if (empty($users)) { + return $users; + } + $anyUser = reset($users); + if (!$this->appManager->isEnabledForUser('circles', $anyUser)) { + Server::get(LoggerInterface::class)->debug('Circles not enabled', ['app' => 'spreed']); + return $users; + } + + $circleAttendees = $this->attendeeMapper->getActorsByType($room->getId(), Attendee::ACTOR_CIRCLES); + $circleIds = array_map(static function (Attendee $attendee) { + return $attendee->getActorId(); + }, $circleAttendees); + + if (empty($circleIds)) { + return $users; + } + + $circlesManager = Server::get(CirclesManager::class); + return array_filter($users, static function (IUser $user) use ($circlesManager, $circleIds) { + // Only delete users when the user is not member via another circle + $federatedUser = $circlesManager->getFederatedUser($user->getUID(), Member::TYPE_USER); + $memberships = $federatedUser->getMemberships(); + $userCircles = array_map(static function (Membership $membership) { + return $membership->getCircleId(); + }, $memberships); + return empty(array_intersect($userCircles, $circleIds)); + }); + } +} diff --git a/lib/Service/NoteToSelfService.php b/lib/Service/NoteToSelfService.php new file mode 100644 index 0000000..c4297c4 --- /dev/null +++ b/lib/Service/NoteToSelfService.php @@ -0,0 +1,118 @@ +getNoteToSelfConversationId($userId); + + if ($noteToSelfId !== 0) { + try { + return $this->manager->getRoomById($noteToSelfId); + } catch (RoomNotFoundException) { + // Fall through and recreate it … + } + } + + $currentUser = $this->userManager->get($userId); + if (!$currentUser instanceof IUser) { + throw new \InvalidArgumentException('User not found'); + } + + return $this->createNoteToSelfConversation($currentUser, $noteToSelfId); + } + + public function initialCreateNoteToSelfForUser(string $userId): void { + $noteToSelfId = $this->getNoteToSelfConversationId($userId); + if ($noteToSelfId !== 0) { + return; + } + + // Prefixing with zz, so that casting to int does not give a random roomId for other requests + $randomLock = 'zz' . $this->secureRandom->generate(3); + $this->config->setUserValue($userId, 'spreed', 'note_to_self', $randomLock); + + $currentUser = $this->userManager->get($userId); + if (!$currentUser instanceof IUser) { + throw new \InvalidArgumentException('User not found'); + } + + $this->createNoteToSelfConversation($currentUser, $randomLock); + } + + protected function createNoteToSelfConversation(IUser $user, string|int $previousValue): Room { + $room = $this->roomService->createConversation( + Room::TYPE_NOTE_TO_SELF, + $this->l->t('Note to self'), + $user, + Room::OBJECT_TYPE_NOTE_TO_SELF, + $user->getUID() + ); + + try { + $this->config->setUserValue($user->getUID(), 'spreed', 'note_to_self', (string)$room->getId(), (string)$previousValue); + } catch (PreConditionNotMetException $e) { + // This process didn't win the race for creating the conversation, so fetch the other one + $this->roomService->deleteRoom($room); + + // This is a little trick to bypass local caching + $values = $this->config->getUserValueForUsers('spreed', 'note_to_self', [$user->getUID()]); + if (isset($values[$user->getUID()])) { + return $this->manager->getRoomById($values[$user->getUID()]); + } + + // Failed to read parallel note-to-self creation + throw new RoomNotFoundException('Failed due to parallel requests'); + } + + $this->roomService->setDescription( + $room, + $this->l->t('A place for your private notes, thoughts and ideas'), + ); + + $this->avatarService->setAvatarFromEmoji($room, '📝', '0082c9'); + + $participant = $this->participantService->getParticipantByActor( + $room, + Attendee::ACTOR_USERS, + $user->getUID() + ); + + $this->participantService->updateFavoriteStatus($participant, true); + + return $room; + } + + protected function getNoteToSelfConversationId(string $userId): int { + return (int)$this->config->getUserValue($userId, 'spreed', 'note_to_self', '0'); + } +} diff --git a/lib/Service/ParticipantService.php b/lib/Service/ParticipantService.php new file mode 100644 index 0000000..8e997ac --- /dev/null +++ b/lib/Service/ParticipantService.php @@ -0,0 +1,2370 @@ +>> */ + protected array $actorCache; + /** @var array> */ + protected array $sessionCache; + + public function __construct( + protected IConfig $serverConfig, + protected Config $talkConfig, + protected AttendeeMapper $attendeeMapper, + protected SessionMapper $sessionMapper, + protected SessionService $sessionService, + private ISecureRandom $secureRandom, + protected IDBConnection $connection, + private IEventDispatcher $dispatcher, + private IUserManager $userManager, + private ICloudIdManager $cloudIdManager, + private IGroupManager $groupManager, + private MembershipService $membershipService, + private BackendNotifier $backendNotifier, + private ITimeFactory $timeFactory, + private ICacheFactory $cacheFactory, + private IUserStatusManager $userStatusManager, + private LoggerInterface $logger, + ) { + } + + public function updateParticipantType(Room $room, Participant $participant, int $participantType): void { + $attendee = $participant->getAttendee(); + + if ($attendee->getActorType() === Attendee::ACTOR_GROUPS) { + // Can not promote/demote groups + return; + } + + $oldType = $attendee->getParticipantType(); + if ($oldType === $participantType) { + return; + } + + $event = new BeforeParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_TYPE, $participantType, $oldType); + $this->dispatcher->dispatchTyped($event); + + $attendee->setParticipantType($participantType); + + $promotedToModerator = in_array($participantType, [ + Participant::OWNER, + Participant::MODERATOR, + ], true); + $demotedFromModerator = in_array($oldType, [ + Participant::OWNER, + Participant::MODERATOR, + ], true); + + if ($promotedToModerator) { + // Reset permissions on promotion + $attendee->setPermissions(Attendee::PERMISSIONS_DEFAULT); + } + + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + + // XOR so we don't move the participant in and out when they are changed from moderator to owner or vice versa + if (($promotedToModerator xor $demotedFromModerator) && $room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + /** @var Manager $manager */ + $manager = Server::get(Manager::class); + + $breakoutRooms = $manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $room->getToken()); + + foreach ($breakoutRooms as $breakoutRoom) { + try { + $breakoutRoomParticipant = $this->getParticipantByActor( + $breakoutRoom, + $attendee->getActorType(), + $attendee->getActorId() + ); + + if ($demotedFromModerator) { + // Remove participant from all breakout rooms + $this->removeAttendee($breakoutRoom, $breakoutRoomParticipant, AAttendeeRemovedEvent::REASON_REMOVED); + } elseif (!$breakoutRoomParticipant->hasModeratorPermissions()) { + if ($breakoutRoomParticipant->getAttendee()->getParticipantType() === Participant::USER + || $breakoutRoomParticipant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + $this->updateParticipantType($breakoutRoom, $breakoutRoomParticipant, Participant::MODERATOR); + } + } + } catch (ParticipantNotFoundException $e) { + if ($promotedToModerator) { + // Add participant as a moderator when they were not in the room already + $this->addUsers($breakoutRoom, [ + [ + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + 'displayName' => $attendee->getDisplayName(), + 'participantType' => $attendee->getParticipantType(), + ], + ]); + } + } + } + } + + $event = new ParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_TYPE, $participantType, $oldType); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @throws PermissionsException + */ + public function updatePermissions(Room $room, Participant $participant, string $method, int $newPermissions): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new PermissionsException(PermissionsException::REASON_ROOM_TYPE); + } + + if ($participant->hasModeratorPermissions()) { + throw new PermissionsException(PermissionsException::REASON_MODERATOR); + } + + $attendee = $participant->getAttendee(); + + if ($attendee->getActorType() === Attendee::ACTOR_GROUPS || $attendee->getActorType() === Attendee::ACTOR_CIRCLES) { + // Can not set publishing permissions for those actor types + throw new PermissionsException(PermissionsException::REASON_TYPE); + } + + if ($newPermissions < Attendee::PERMISSIONS_DEFAULT || $newPermissions > Attendee::PERMISSIONS_MAX_CUSTOM) { + throw new PermissionsException(PermissionsException::REASON_VALUE); + } + + $oldPermissions = $participant->getPermissions(); + if ($method === Attendee::PERMISSIONS_MODIFY_SET) { + if ($newPermissions !== Attendee::PERMISSIONS_DEFAULT) { + // Make sure the custom flag is set when not setting to default permissions + $newPermissions |= Attendee::PERMISSIONS_CUSTOM; + } + } elseif ($method === Attendee::PERMISSIONS_MODIFY_ADD) { + $newPermissions = $oldPermissions | $newPermissions; + } elseif ($method === Attendee::PERMISSIONS_MODIFY_REMOVE) { + $newPermissions = $oldPermissions & ~$newPermissions; + } else { + throw new PermissionsException(PermissionsException::REASON_METHOD); + } + + $event = new BeforeParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_PERMISSIONS, $newPermissions, $oldPermissions); + $this->dispatcher->dispatchTyped($event); + + $attendee->setPermissions($newPermissions); + if ($attendee->getParticipantType() === Participant::USER_SELF_JOINED) { + $attendee->setParticipantType(Participant::USER); + } + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + + $event = new ParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_PERMISSIONS, $newPermissions, $oldPermissions); + $this->dispatcher->dispatchTyped($event); + } + + public function updateAllPermissions(Room $room, string $method, int $newState): void { + $this->attendeeMapper->modifyPermissions($room->getId(), $method, $newState); + } + + public function updateLastReadMessage(Participant $participant, int $lastReadMessage): void { + $attendee = $participant->getAttendee(); + $attendee->setLastReadMessage($lastReadMessage); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + public function updateUnreadInfoForProxyParticipant(Participant $participant, int $unreadMessageCount, bool $hasMention, bool $hadDirectMention, int $lastReadMessageId): void { + $attendee = $participant->getAttendee(); + $attendee->setUnreadMessages($unreadMessageCount); + $attendee->setLastReadMessage($lastReadMessageId); + $attendee->setLastMentionMessage($hasMention ? 1 : 0); + $attendee->setLastMentionDirect($hadDirectMention ? 1 : 0); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + public function updateFavoriteStatus(Participant $participant, bool $isFavorite): void { + $attendee = $participant->getAttendee(); + $attendee->setFavorite($isFavorite); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + * @param int $level + * @throws \InvalidArgumentException When the notification level is invalid + */ + public function updateNotificationLevel(Participant $participant, int $level): void { + if (!\in_array($level, [ + Participant::NOTIFY_ALWAYS, + Participant::NOTIFY_MENTION, + Participant::NOTIFY_NEVER + ], true)) { + throw new \InvalidArgumentException('level'); + } + + $attendee = $participant->getAttendee(); + $attendee->setNotificationLevel($level); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + * @param int $level + * @throws \InvalidArgumentException + */ + public function updateNotificationCalls(Participant $participant, int $level): void { + if (!\in_array($level, [ + Participant::NOTIFY_CALLS_OFF, + Participant::NOTIFY_CALLS_ON, + ], true)) { + throw new \InvalidArgumentException('level'); + } + + $attendee = $participant->getAttendee(); + $attendee->setNotificationCalls($level); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function archiveConversation(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setArchived(true); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function unarchiveConversation(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setArchived(false); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function markConversationAsImportant(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setImportant(true); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function markConversationAsUnimportant(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setImportant(false); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function markConversationAsSensitive(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setSensitive(true); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param Participant $participant + */ + public function markConversationAsInsensitive(Participant $participant): void { + $attendee = $participant->getAttendee(); + $attendee->setSensitive(false); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + + /** + * @param RoomService $roomService + * @param Room $room + * @param IUser $user + * @param string $password + * @param bool $passedPasswordProtection + * @return Participant + * @throws InvalidPasswordException + * @throws UnauthorizedException + */ + public function joinRoom(RoomService $roomService, Room $room, IUser $user, string $password, bool $passedPasswordProtection = false): Participant { + $event = new BeforeUserJoinedRoomEvent($room, $user, $password, $passedPasswordProtection); + $this->dispatcher->dispatchTyped($event); + + if ($event->getCancelJoin() === true) { + $this->removeUser($room, $user, AAttendeeRemovedEvent::REASON_LEFT); + throw new UnauthorizedException('Participant is not allowed to join'); + } + + try { + $attendee = $this->attendeeMapper->findByActor($room->getId(), Attendee::ACTOR_USERS, $user->getUID()); + } catch (DoesNotExistException $e) { + // queried here to avoid loop deps + $manager = Server::get(Manager::class); + $isListableByUser = $manager->isRoomListableByUser($room, $user->getUID()); + + if (!$isListableByUser && !$event->getPassedPasswordProtection() && !$roomService->verifyPassword($room, $password)['result']) { + throw new InvalidPasswordException('Provided password is invalid'); + } + + // User joining a group or public call through listing + if (($room->getType() === Room::TYPE_GROUP || $room->getType() === Room::TYPE_PUBLIC) && $isListableByUser) { + $this->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + // need to use "USER" here, because "USER_SELF_JOINED" only works for public calls + 'participantType' => Participant::USER, + ]], $user); + } elseif ($room->getType() === Room::TYPE_PUBLIC) { + // User joining a public room, without being invited + $this->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + 'participantType' => Participant::USER_SELF_JOINED, + ]], $user); + } else { + // shouldn't happen unless some code called joinRoom without previous checks + throw new UnauthorizedException('Participant is not allowed to join'); + } + + $attendee = $this->attendeeMapper->findByActor($room->getId(), Attendee::ACTOR_USERS, $user->getUID()); + } + + $session = $this->sessionService->createSessionForAttendee($attendee); + $participant = new Participant($room, $attendee, $session); + + $event = new UserJoinedRoomEvent($room, $user, $participant); + $this->dispatcher->dispatchTyped($event); + + return $participant; + } + + /** + * @throws UnauthorizedException + */ + public function joinRoomAsFederatedUser(Room $room, string $actorType, string $actorId, string $sessionId): Participant { + $event = new BeforeFederatedUserJoinedRoomEvent($room, $actorId); + $this->dispatcher->dispatchTyped($event); + + if ($event->isJoinCanceled()) { + throw new UnauthorizedException('Participant is not allowed to join'); + } + + try { + $participant = $this->getParticipantByActor($room, $actorType, $actorId); + $attendee = $participant->getAttendee(); + } catch (ParticipantNotFoundException $e) { + // shouldn't happen unless some code called joinRoom without previous checks + throw new UnauthorizedException('Participant is not allowed to join'); + } + + $session = $this->sessionService->createSessionForAttendee($attendee, $sessionId); + + $event = new FederatedUserJoinedRoomEvent($room, $actorId); + $this->dispatcher->dispatchTyped($event); + + return new Participant($room, $attendee, $session); + } + + /** + * @param RoomService $roomService + * @param Room $room + * @param string $password + * @param bool $passedPasswordProtection + * @param ?Participant $previousParticipant + * @return Participant + * @throws InvalidPasswordException + * @throws UnauthorizedException + */ + public function joinRoomAsNewGuest(RoomService $roomService, Room $room, string $password, bool $passedPasswordProtection = false, ?Participant $previousParticipant = null, ?string $displayName = null): Participant { + $event = new BeforeGuestJoinedRoomEvent($room, $password, $passedPasswordProtection); + $this->dispatcher->dispatchTyped($event); + + if ($event->getCancelJoin()) { + throw new UnauthorizedException('Participant is not allowed to join'); + } + + if (!$event->getPassedPasswordProtection() && !$roomService->verifyPassword($room, $password)['result']) { + throw new InvalidPasswordException(); + } + + $lastMessage = 0; + if ($room->getLastMessage() instanceof IComment) { + $lastMessage = (int)$room->getLastMessage()->getId(); + } + + if ($previousParticipant instanceof Participant) { + $attendee = $previousParticipant->getAttendee(); + } else { + $randomActorId = $this->secureRandom->generate(255); + + $attendee = new Attendee(); + $attendee->setRoomId($room->getId()); + $attendee->setActorType(Attendee::ACTOR_GUESTS); + $attendee->setActorId($randomActorId); + $attendee->setParticipantType(Participant::GUEST); + $attendee->setPermissions(Attendee::PERMISSIONS_DEFAULT); + $attendee->setLastReadMessage($lastMessage); + + if ($displayName !== null && $displayName !== '') { + $attendee->setDisplayName($displayName); + } + + $this->attendeeMapper->insert($attendee); + + $attendeeEvent = new AttendeesAddedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + $session = $this->sessionService->createSessionForAttendee($attendee); + + if (!$previousParticipant instanceof Participant) { + // Update the random guest id + $attendee->setActorId(sha1($session->getSessionId())); + $this->attendeeMapper->update($attendee); + } + + $participant = new Participant($room, $attendee, $session); + + $event = new GuestJoinedRoomEvent($room, $participant); + $this->dispatcher->dispatchTyped($event); + + return $participant; + } + + public function addInvitationList(Room $room, InvitationList $invitationList, ?IUser $addedBy = null): void { + $participantsToAdd = []; + foreach ($invitationList->getUsers() as $user) { + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + ]; + } + + foreach ($invitationList->getFederatedUsers() as $cloudId) { + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_FEDERATED_USERS, + 'actorId' => $cloudId->getId(), + 'displayName' => $cloudId->getDisplayId(), + ]; + } + + foreach ($invitationList->getPhoneNumbers() as $phoneNumber) { + $participantsToAdd[] = [ + 'actorType' => Attendee::ACTOR_PHONES, + 'actorId' => sha1($phoneNumber . '#' . $this->timeFactory->getTime()), + 'displayName' => substr($phoneNumber, 0, -4) . '…', // FIXME Allow the UI to hand in a name (when selected from contacts?) + 'phoneNumber' => $phoneNumber, + ]; + } + + $existingParticipants = []; + if (!empty($participantsToAdd)) { + $attendees = $this->addUsers($room, $participantsToAdd, $addedBy); + $existingParticipants = array_map(static fn (Attendee $attendee): Participant => new Participant($room, $attendee, null), $attendees); + } + + $emails = $invitationList->getEmails(); + if (!empty($emails)) { + $guestManager = Server::get(GuestManager::class); + foreach ($emails as $email) { + $actorId = hash('sha256', $email); + try { + $this->getParticipantByActor($room, Attendee::ACTOR_EMAILS, $actorId); + } catch (ParticipantNotFoundException) { + $participant = $this->inviteEmailAddress($room, $actorId, $email); + try { + $guestManager->sendEmailInvitation($room, $participant); + } catch (\InvalidArgumentException) { + } + } + } + } + + foreach ($invitationList->getGroup() as $group) { + $this->addGroup($room, $group, $existingParticipants); + } + + foreach ($invitationList->getTeams() as $team) { + $this->addCircle($room, $team, $existingParticipants); + } + } + + /** + * @param Room $room + * @param array $participants + * @param IUser|null $addedBy User that is attempting to add these users (must be set for federated users to be added) + * @return list + * @throws CannotReachRemoteException thrown when sending the federation request didn't work + * @throws \Exception thrown if $addedBy is not set when adding a federated user + */ + public function addUsers(Room $room, array $participants, ?IUser $addedBy = null, bool $bansAlreadyChecked = false): array { + if (empty($participants)) { + return []; + } + + $lastMessage = 0; + if ($room->getLastMessage() instanceof IComment) { + $lastMessage = (int)$room->getLastMessage()->getId(); + } + + $bannedUserIds = []; + if (!$bansAlreadyChecked) { + $banService = Server::get(BanService::class); + $bannedUserIds = $banService->getBannedUserIdsForRoom($room->getId()); + } + $attendees = []; + foreach ($participants as $participant) { + $readPrivacy = Participant::PRIVACY_PUBLIC; + if ($participant['actorType'] === Attendee::ACTOR_USERS) { + if (isset($bannedUserIds[$participant['actorId']])) { + $this->logger->warning('User ' . $participant['actorId'] . ' is banned from conversation ' . $room->getToken() . ' and was skipped while adding users'); + continue; + } + + $readPrivacy = $this->talkConfig->getUserReadPrivacy($participant['actorId']); + } elseif ($participant['actorType'] === Attendee::ACTOR_FEDERATED_USERS) { + if ($addedBy === null) { + throw new \Exception('$addedBy must be set to add a federated user'); + } + $participant['accessToken'] = $this->secureRandom->generate( + FederationManager::TOKEN_LENGTH, + ISecureRandom::CHAR_HUMAN_READABLE + ); + + // Disable read marker for federated users + $readPrivacy = Participant::PRIVACY_PRIVATE; + } + + $attendee = new Attendee(); + $attendee->setRoomId($room->getId()); + $attendee->setActorType($participant['actorType']); + $attendee->setActorId($participant['actorId']); + if (isset($participant['displayName'])) { + $attendee->setDisplayName($participant['displayName']); + } + if (isset($participant['accessToken'])) { + $attendee->setAccessToken($participant['accessToken']); + } + if (isset($participant['remoteId'])) { + $attendee->setRemoteId($participant['remoteId']); + } + if (isset($participant['phoneNumber'])) { + $attendee->setPhoneNumber($participant['phoneNumber']); + } + if (isset($participant['invitedCloudId'])) { + $attendee->setInvitedCloudId($participant['invitedCloudId']); + } + $attendee->setParticipantType($participant['participantType'] ?? Participant::USER); + $attendee->setPermissions(Attendee::PERMISSIONS_DEFAULT); + $attendee->setLastReadMessage($participant['lastReadMessage'] ?? $lastMessage); + $attendee->setReadPrivacy($readPrivacy); + $attendees[] = $attendee; + } + + $event = new BeforeAttendeesAddedEvent($room, $attendees); + $this->dispatcher->dispatchTyped($event); + + $setFederationFlagAlready = $room->hasFederatedParticipants() & Room::HAS_FEDERATION_TALKv1; + foreach ($attendees as $attendee) { + try { + $this->attendeeMapper->insert($attendee); + + if ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $response = $this->backendNotifier->sendRemoteShare((string)$attendee->getId(), $attendee->getAccessToken(), $attendee->getActorId(), $addedBy, 'user', $room, $this->getHighestPermissionAttendee($room)); + if (!$response) { + $this->attendeeMapper->delete($attendee); + throw new CannotReachRemoteException(); + } + + // Update the display name and the cloud ID based on the server's response + if (isset($response['displayName']) && $response['displayName'] !== '') { + $attendee->setDisplayName($response['displayName']); + } + if (isset($response['cloudId']) && $response['cloudId'] !== '') { + $attendee->setActorId($response['cloudId']); + } + + $this->attendeeMapper->update($attendee); + + if (!$setFederationFlagAlready) { + $flag = $room->hasFederatedParticipants() | Room::HAS_FEDERATION_TALKv1; + + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setHasFederation($room, $flag); + + $setFederationFlagAlready = true; + } + } + } catch (Exception $e) { + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + throw $e; + } + } + } + + $event = new AttendeesAddedEvent($room, $attendees, true); + $this->dispatcher->dispatchTyped($event); + + $lastMessage = $event->getLastMessage(); + if ($lastMessage instanceof IComment) { + $this->updateRoomLastMessage($room, $lastMessage); + } + + return $attendees; + } + + protected function updateRoomLastMessage(Room $room, IComment $message): void { + /** @var RoomService $roomService */ + $roomService = Server::get(RoomService::class); + $roomService->setLastMessage($room, $message); + + $lastMessageCache = $this->cacheFactory->createDistributed(CachePrefix::CHAT_LAST_MESSAGE_ID); + $lastMessageCache->remove($room->getToken()); + $unreadCountCache = $this->cacheFactory->createDistributed(CachePrefix::CHAT_UNREAD_COUNT); + $unreadCountCache->clear($room->getId() . '-'); + + $event = new SystemMessagesMultipleSentEvent($room, $message); + $this->dispatcher->dispatchTyped($event); + } + + public function getHighestPermissionAttendee(Room $room): ?Attendee { + try { + $roomOwners = $this->attendeeMapper->getActorsByParticipantTypes($room->getId(), [Participant::OWNER]); + if (!empty($roomOwners)) { + foreach ($roomOwners as $owner) { + if ($owner->getActorType() === Attendee::ACTOR_USERS) { + return $owner; + } + } + } + + $roomModerators = $this->attendeeMapper->getActorsByParticipantTypes($room->getId(), [Participant::MODERATOR]); + if (!empty($roomModerators)) { + foreach ($roomModerators as $moderator) { + if ($moderator->getActorType() === Attendee::ACTOR_USERS) { + return $moderator; + } + } + } + } catch (Exception $e) { + $this->logger->error('Error while trying to get owner or moderator in room ' . $room->getToken(), ['exception' => $e]); + } + return null; + } + + /** + * @param Room $room + * @param IGroup $group + * @param Participant[] &$existingParticipants + */ + public function addGroup(Room $room, IGroup $group, array &$existingParticipants = []): void { + $usersInGroup = $group->getUsers(); + + if (empty($existingParticipants)) { + $existingParticipants = $this->getParticipantsForRoom($room); + } + + $banService = Server::get(BanService::class); + $bannedUserIds = $banService->getBannedUserIdsForRoom($room->getId()); + $participantsByUserId = []; + foreach ($existingParticipants as $participant) { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $participantsByUserId[$participant->getAttendee()->getActorId()] = $participant; + } + } + + $newParticipants = []; + foreach ($usersInGroup as $user) { + $existingParticipant = $participantsByUserId[$user->getUID()] ?? null; + if ($existingParticipant instanceof Participant) { + if ($existingParticipant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + $this->updateParticipantType($room, $existingParticipant, Participant::USER); + } + + // Participant is already in the conversation, so skip them. + continue; + } + + if (isset($bannedUserIds[$user->getUID()])) { + $this->logger->warning('User ' . $user->getUID() . ' is banned from conversation ' . $room->getToken() . ' and was skipped while adding group ' . $group->getDisplayName()); + continue; + } + + $newParticipants[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + ]; + } + + try { + $this->attendeeMapper->findByActor($room->getId(), Attendee::ACTOR_GROUPS, $group->getGID()); + } catch (DoesNotExistException $e) { + $attendee = new Attendee(); + $attendee->setRoomId($room->getId()); + $attendee->setActorType(Attendee::ACTOR_GROUPS); + $attendee->setActorId($group->getGID()); + $attendee->setDisplayName($group->getDisplayName()); + $attendee->setParticipantType(Participant::USER); + $attendee->setPermissions(Attendee::PERMISSIONS_DEFAULT); + $attendee->setReadPrivacy(Participant::PRIVACY_PRIVATE); + $this->attendeeMapper->insert($attendee); + + $attendeeEvent = new AttendeesAddedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + $attendees = $this->addUsers($room, $newParticipants, bansAlreadyChecked: true); + if (!empty($attendees)) { + $existingParticipants = array_merge(array_map(static fn (Attendee $attendee): Participant => new Participant($room, $attendee, null), $attendees), $existingParticipants); + } + } + + /** + * @param string $circleId + * @param string $userId + * @return Circle + * @throws ParticipantNotFoundException + */ + public function getCircle(string $circleId, string $userId): Circle { + try { + $circlesManager = Server::get(CirclesManager::class); + $federatedUser = $circlesManager->getFederatedUser($userId, Member::TYPE_USER); + $federatedUser->getLink($circleId); + } catch (\Exception $e) { + throw new ParticipantNotFoundException('Circle not found or not a member'); + } + + $circlesManager->startSession($federatedUser); + try { + return $circlesManager->getCircle($circleId); + } catch (\Exception $e) { + } finally { + $circlesManager->stopSession(); + } + + throw new ParticipantNotFoundException('Circle not found or not a member'); + } + + /** + * @param string $circleId + * @param string $userId + * @return Member[] + * @throws ParticipantNotFoundException + */ + public function getCircleMembers(string $circleId): array { + try { + $circlesManager = Server::get(CirclesManager::class); + } catch (\Exception) { + throw new ParticipantNotFoundException('Circle not found'); + } + + $circlesManager->startSuperSession(); + try { + $circle = $circlesManager->getCircle($circleId); + } catch (\Exception) { + throw new ParticipantNotFoundException('Circle not found'); + } finally { + $circlesManager->stopSession(); + } + + $members = $circle->getInheritedMembers(); + return array_filter($members, static function (Member $member) { + return $member->getUserType() === Member::TYPE_USER; + }); + } + + /** + * @param Room $room + * @param Circle $circle + * @param Participant[] &$existingParticipants + */ + public function addCircle(Room $room, Circle $circle, array &$existingParticipants = []): void { + $membersInCircle = $circle->getInheritedMembers(); + + if (empty($existingParticipants)) { + $existingParticipants = $this->getParticipantsForRoom($room); + } + + $banService = Server::get(BanService::class); + $bannedUserIds = $banService->getBannedUserIdsForRoom($room->getId()); + $participantsByUserId = []; + foreach ($existingParticipants as $participant) { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $participantsByUserId[$participant->getAttendee()->getActorId()] = $participant; + } + } + + $newParticipants = []; + foreach ($membersInCircle as $member) { + /** @var Member $member */ + if ($member->getUserType() !== Member::TYPE_USER || $member->getUserId() === '') { + // Not a user? + continue; + } + + if ($member->getStatus() !== Member::STATUS_INVITED && $member->getStatus() !== Member::STATUS_MEMBER) { + // Only allow invited and regular members + continue; + } + + $user = $this->userManager->get($member->getUserId()); + if (!$user instanceof IUser) { + continue; + } + + $existingParticipant = $participantsByUserId[$user->getUID()] ?? null; + if ($existingParticipant instanceof Participant) { + if ($existingParticipant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED) { + $this->updateParticipantType($room, $existingParticipant, Participant::USER); + } + + // Participant is already in the conversation, so skip them. + continue; + } + + if (isset($bannedUserIds[$user->getUID()])) { + $this->logger->warning('User ' . $user->getUID() . ' is banned from conversation ' . $room->getToken() . ' and was skipped while adding circle ' . $circle->getDisplayName()); + continue; + } + + $newParticipants[] = [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $user->getUID(), + 'displayName' => $user->getDisplayName(), + ]; + } + + try { + $this->attendeeMapper->findByActor($room->getId(), Attendee::ACTOR_CIRCLES, $circle->getSingleId()); + } catch (DoesNotExistException $e) { + $attendee = new Attendee(); + $attendee->setRoomId($room->getId()); + $attendee->setActorType(Attendee::ACTOR_CIRCLES); + $attendee->setActorId($circle->getSingleId()); + $attendee->setDisplayName($circle->getDisplayName()); + $attendee->setParticipantType(Participant::USER); + $attendee->setPermissions(Attendee::PERMISSIONS_DEFAULT); + $attendee->setReadPrivacy(Participant::PRIVACY_PRIVATE); + $this->attendeeMapper->insert($attendee); + + $attendeeEvent = new AttendeesAddedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + $attendees = $this->addUsers($room, $newParticipants, bansAlreadyChecked: true); + if (!empty($attendees)) { + $existingParticipants = array_merge(array_map(static fn (Attendee $attendee): Participant => new Participant($room, $attendee, null), $attendees), $existingParticipants); + } + } + + public function inviteEmailAddress(Room $room, string $actorId, string $email, ?string $name = null): Participant { + $lastMessage = 0; + if ($room->getLastMessage() instanceof IComment) { + $lastMessage = (int)$room->getLastMessage()->getId(); + } + + $attendee = new Attendee(); + $attendee->setRoomId($room->getId()); + $attendee->setActorType(Attendee::ACTOR_EMAILS); + $attendee->setActorId($actorId); + $attendee->setInvitedCloudId($email); + $attendee->setAccessToken($this->secureRandom->generate( + FederationManager::TOKEN_LENGTH, + ISecureRandom::CHAR_HUMAN_READABLE + )); + + if ($name !== null) { + $attendee->setDisplayName($name); + } + + if ($room->getSIPEnabled() !== Webinary::SIP_DISABLED + && $this->talkConfig->isSIPConfigured()) { + $attendee->setPin($this->generatePin()); + } + + $attendee->setParticipantType(Participant::GUEST); + $attendee->setLastReadMessage($lastMessage); + $this->attendeeMapper->insert($attendee); + // FIXME handle duplicate invites gracefully + + $attendeeEvent = new AttendeesAddedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($attendeeEvent); + + return new Participant($room, $attendee, null); + } + + public function generatePinForParticipant(Room $room, Participant $participant): void { + $attendee = $participant->getAttendee(); + if ($room->getSIPEnabled() !== Webinary::SIP_DISABLED + && $this->talkConfig->isSIPConfigured() + && ($attendee->getActorType() === Attendee::ACTOR_USERS || $attendee->getActorType() === Attendee::ACTOR_EMAILS) + && !$attendee->getPin()) { + $attendee->setPin($this->generatePin()); + $attendee->setLastAttendeeActivity($this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } + } + + public function ensureOneToOneRoomIsFilled(Room $room, ?string $enforceUserId = null): void { + if ($room->getType() !== Room::TYPE_ONE_TO_ONE) { + return; + } + + $users = json_decode($room->getName(), true); + $participants = $this->getParticipantUserIds($room); + if ($enforceUserId !== null) { + $missingUsers = !in_array($enforceUserId, $participants, true) ? [$enforceUserId] : []; + } else { + $missingUsers = array_diff($users, $participants); + } + + foreach ($missingUsers as $userId) { + $userDisplayName = $this->userManager->getDisplayName($userId); + if ($userDisplayName !== null) { + $this->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $userId, + 'displayName' => $userDisplayName, + 'participantType' => Participant::OWNER, + ]]); + } + } + } + + public function leaveRoomAsSession(Room $room, Participant $participant, bool $duplicatedParticipant = false): void { + $event = new BeforeSessionLeftRoomEvent($room, $participant, $duplicatedParticipant); + $this->dispatcher->dispatchTyped($event); + + $session = $participant->getSession(); + if ($session instanceof Session) { + $isInCall = $session->getInCall() !== Participant::FLAG_DISCONNECTED; + if ($isInCall) { + $this->changeInCall($room, $participant, Participant::FLAG_DISCONNECTED); + } + + $this->sessionMapper->delete($session); + } else { + $this->sessionMapper->deleteByAttendeeId($participant->getAttendee()->getId()); + } + + $event = new SessionLeftRoomEvent($room, $participant, $duplicatedParticipant); + $this->dispatcher->dispatchTyped($event); + + if ($participant->getAttendee()->getParticipantType() === Participant::USER_SELF_JOINED + && empty($this->sessionMapper->findByAttendeeId($participant->getAttendee()->getId()))) { + $user = $this->userManager->get($participant->getAttendee()->getActorId()); + + $this->removeUser($room, $user, AAttendeeRemovedEvent::REASON_LEFT); + } else { + $this->resetCallStateWhenNeeded($room); + } + } + + /** + * @psalm-param AAttendeeRemovedEvent::REASON_* $reason + */ + public function removeAttendee(Room $room, Participant $participant, string $reason, bool $attendeeEventIsTriggeredAlready = false): void { + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_FEDERATED_USERS && $reason !== AAttendeeRemovedEvent::REASON_LEFT) { + $attendee = $participant->getAttendee(); + $cloudId = $this->cloudIdManager->resolveCloudId($attendee->getActorId()); + + $this->backendNotifier->sendRemoteUnShare( + $cloudId->getRemote(), + $attendee->getId(), + $attendee->getAccessToken(), + ); + } + + $sessions = $this->sessionService->getAllSessionsForAttendee($participant->getAttendee()); + + if ($room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + /** @var BreakoutRoomService $breakoutRoomService */ + $breakoutRoomService = Server::get(BreakoutRoomService::class); + $breakoutRoomService->removeAttendeeFromBreakoutRoom( + $room, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + false + ); + } + + $event = new BeforeAttendeeRemovedEvent($room, $participant->getAttendee(), $reason, $sessions); + $this->dispatcher->dispatchTyped($event); + + $this->sessionMapper->deleteByAttendeeId($participant->getAttendee()->getId()); + $this->attendeeMapper->delete($participant->getAttendee()); + + $event = new AttendeeRemovedEvent($room, $participant->getAttendee(), $reason, $sessions); + $this->dispatcher->dispatchTyped($event); + + if (!$attendeeEventIsTriggeredAlready) { + $attendeeEvent = new AttendeesRemovedEvent($room, [$participant->getAttendee()]); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_GROUPS) { + $this->removeGroupMembers($room, $participant, $reason); + } elseif ($participant->getAttendee()->getActorType() === Attendee::ACTOR_CIRCLES) { + $this->removeCircleMembers($room, $participant, $reason); + } + + $this->resetCallStateWhenNeeded($room); + } + + /** + * @return Attendee[] + */ + public function getActorsByType(Room $room, string $actorType): array { + return $this->attendeeMapper->getActorsByType($room->getId(), $actorType); + } + + public function removeGroupMembers(Room $room, Participant $removedGroupParticipant, string $reason): void { + $removedGroup = $this->groupManager->get($removedGroupParticipant->getAttendee()->getActorId()); + if (!$removedGroup instanceof IGroup) { + return; + } + + $users = $this->membershipService->getUsersWithoutOtherMemberships($room, $removedGroup->getUsers()); + $attendees = []; + foreach ($users as $user) { + try { + $participant = $this->getParticipant($room, $user->getUID()); + $participantType = $participant->getAttendee()->getParticipantType(); + + if ($participantType === Participant::USER) { + // Only remove normal users, not moderators/admins + $this->removeAttendee($room, $participant, $reason, true); + $attendees[] = $participant->getAttendee(); + } + } catch (ParticipantNotFoundException $e) { + } + } + + $attendeeEvent = new AttendeesRemovedEvent($room, $attendees); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + public function removeCircleMembers(Room $room, Participant $removedCircleParticipant, string $reason): void { + try { + $circlesManager = Server::get(CirclesManager::class); + $circlesManager->startSuperSession(); + $circle = $circlesManager->getCircle($removedCircleParticipant->getAttendee()->getActorId()); + $circlesManager->stopSession(); + } catch (\Exception $e) { + // Circles not enabled + return; + } + + $circlesManager->startSuperSession(); + try { + $circle = $circlesManager->getCircle($removedCircleParticipant->getAttendee()->getActorId()); + $circlesManager->stopSession(); + } catch (\Exception $e) { + $circlesManager->stopSession(); + return; + } + + $membersInCircle = $circle->getInheritedMembers(); + $users = []; + foreach ($membersInCircle as $member) { + /** @var Member $member */ + if ($member->getUserType() !== Member::TYPE_USER || $member->getUserId() === '') { + // Not a user? + continue; + } + + if ($member->getStatus() !== Member::STATUS_INVITED && $member->getStatus() !== Member::STATUS_MEMBER) { + // Only allow invited and regular members + continue; + } + + $users[] = $this->userManager->get($member->getUserId()); + } + + $users = array_filter($users); + + if (empty($users)) { + return; + } + + $users = $this->membershipService->getUsersWithoutOtherMemberships($room, $users); + $attendees = []; + foreach ($users as $user) { + try { + $participant = $this->getParticipant($room, $user->getUID()); + $participantType = $participant->getAttendee()->getParticipantType(); + + if ($participantType === Participant::USER) { + // Only remove normal users, not moderators/admins + $this->removeAttendee($room, $participant, $reason, true); + $attendees[] = $participant->getAttendee(); + } + } catch (ParticipantNotFoundException $e) { + } + } + + $attendeeEvent = new AttendeesRemovedEvent($room, $attendees); + $this->dispatcher->dispatchTyped($attendeeEvent); + } + + /** + * @psalm-param AAttendeeRemovedEvent::REASON_* $reason + */ + public function removeUser(Room $room, IUser $user, string $reason): void { + try { + $participant = $this->getParticipant($room, $user->getUID(), false); + } catch (ParticipantNotFoundException $e) { + return; + } + + $attendee = $participant->getAttendee(); + $sessions = $this->sessionService->getAllSessionsForAttendee($attendee); + + if ($reason !== AAttendeeRemovedEvent::REASON_REMOVED_ALL && $room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + /** @var BreakoutRoomService $breakoutRoomService */ + $breakoutRoomService = Server::get(BreakoutRoomService::class); + $breakoutRoomService->removeAttendeeFromBreakoutRoom( + $room, + $attendee->getActorType(), + $attendee->getActorId(), + false + ); + } elseif ($reason === AAttendeeRemovedEvent::REASON_REMOVED_ALL) { + $reason = AAttendeeRemovedEvent::REASON_REMOVED; + } + + $attendeeEvent = new BeforeAttendeeRemovedEvent($room, $attendee, $reason, $sessions); + $this->dispatcher->dispatchTyped($attendeeEvent); + + foreach ($sessions as $session) { + $this->sessionMapper->delete($session); + } + + $this->attendeeMapper->delete($attendee); + + $attendeeEvent = new AttendeeRemovedEvent($room, $attendee, $reason, $sessions); + $this->dispatcher->dispatchTyped($attendeeEvent); + + $attendeeEvent = new AttendeesRemovedEvent($room, [$attendee]); + $this->dispatcher->dispatchTyped($attendeeEvent); + + $this->resetCallStateWhenNeeded($room); + } + + public function cleanGuestParticipants(Room $room): void { + $event = new BeforeGuestsCleanedUpEvent($room); + $this->dispatcher->dispatchTyped($event); + + $query = $this->connection->getQueryBuilder(); + $query->selectAlias('s.id', 's_id') + ->from('talk_sessions', 's') + ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('s.attendee_id', 'a.id')) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_GUESTS))) + ->andWhere($query->expr()->lte('s.last_ping', $query->createNamedParameter($this->timeFactory->getTime() - Session::SESSION_TIMEOUT_KILL, IQueryBuilder::PARAM_INT))); + + $sessionTableIds = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $sessionTableIds[] = (int)$row['s_id']; + } + $result->closeCursor(); + + $this->sessionService->deleteSessionsById($sessionTableIds); + + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('s.attendee_id', 'a.id')) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_GUESTS))) + ->andWhere($query->expr()->isNull('s.id')); + + $attendeeIds = []; + $attendees = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + if ($row['display_name'] !== '' && $row['display_name'] !== null) { + // Keep guests with a non-empty display name, so we can still + // render the guest display name on chat messages. + continue; + } + + if ((int)$row['participant_type'] !== Participant::GUEST + || ((int)$row['permissions'] !== Attendee::PERMISSIONS_DEFAULT + && (int)$row['permissions'] !== Attendee::PERMISSIONS_CUSTOM)) { + // Keep guests with non-default permissions in case they just reconnect + continue; + } + + $attendeeIds[] = (int)$row['a_id']; + $attendees[] = $this->attendeeMapper->createAttendeeFromRow($row); + } + $result->closeCursor(); + + if (empty($attendeeIds)) { + return; + } + + $this->attendeeMapper->deleteByIds($attendeeIds); + + $attendeeEvent = new AttendeesRemovedEvent($room, $attendees); + $this->dispatcher->dispatchTyped($attendeeEvent); + + $event = new GuestsCleanedUpEvent($room); + $this->dispatcher->dispatchTyped($event); + + $this->resetCallStateWhenNeeded($room); + } + + public function endCallForEveryone(Room $room, ?Participant $moderator): void { + $oldActiveSince = $room->getActiveSince(); + $event = new BeforeCallEndedForEveryoneEvent($room, $moderator, $oldActiveSince); + $this->dispatcher->dispatchTyped($event); + + $participants = $this->getParticipantsInCall($room); + $changedSessionIds = []; + $changedUserIds = []; + + // kick all participants out of the call + foreach ($participants as $participant) { + $changedSessionIds[] = $participant->getSession()->getSessionId(); + if ($participant->getAttendee()->getActorType() === Attendee::ACTOR_USERS) { + $changedUserIds[] = $participant->getAttendee()->getActorId(); + } + $this->changeInCall($room, $participant, Participant::FLAG_DISCONNECTED, true); + } + + $this->sessionMapper->resetInCallByIds($changedSessionIds); + + $event = new CallEndedForEveryoneEvent($room, $moderator, $oldActiveSince, $changedSessionIds, $changedUserIds); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @psalm-param int-mask-of $flags + * @throws \InvalidArgumentException + */ + public function changeInCall(Room $room, Participant $participant, int $flags, bool $endCallForEveryone = false, bool $silent = false, int $lastJoinedCall = 0): void { + if ($room->getType() === Room::TYPE_CHANGELOG + || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $room->getType() === Room::TYPE_NOTE_TO_SELF) { + throw new \InvalidArgumentException('type'); + } + + $session = $participant->getSession(); + if (!$session instanceof Session) { + throw new \InvalidArgumentException('session'); + } + + $permissions = $participant->getPermissions(); + if (!($permissions & Attendee::PERMISSIONS_PUBLISH_AUDIO)) { + $flags &= ~Participant::FLAG_WITH_AUDIO; + } + if (!($permissions & Attendee::PERMISSIONS_PUBLISH_VIDEO)) { + $flags &= ~Participant::FLAG_WITH_VIDEO; + } + + $oldFlags = $session->getInCall(); + $details = []; + + if ($flags !== Participant::FLAG_DISCONNECTED && $silent) { + $details = [AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT => $silent]; + } elseif ($flags === Participant::FLAG_DISCONNECTED && $endCallForEveryone) { + $details = [AParticipantModifiedEvent::DETAIL_IN_CALL_END_FOR_EVERYONE => $endCallForEveryone]; + } + + $event = new BeforeParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_IN_CALL, $flags, $oldFlags, $details); + $this->dispatcher->dispatchTyped($event); + + $session->setInCall($flags); + if (!$endCallForEveryone) { + $this->sessionMapper->update($session); + } + + $attendee = $participant->getAttendee(); + if ($flags !== Participant::FLAG_DISCONNECTED) { + $attendee->setLastJoinedCall($lastJoinedCall ?: $this->timeFactory->getTime()); + $this->attendeeMapper->update($attendee); + } elseif ($attendee->getActorType() === Attendee::ACTOR_PHONES) { + $attendee->setCallId(''); + $this->attendeeMapper->update($attendee); + } + + $event = new ParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_IN_CALL, $flags, $oldFlags, $details); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @throws \InvalidArgumentException + * @throws DoesNotExistException + */ + public function sendCallNotificationForAttendee(Room $room, Participant $currentParticipant, int $targetAttendeeId): void { + $attendee = $this->attendeeMapper->getById($targetAttendeeId); + + if ($attendee->getActorType() !== Attendee::ACTOR_USERS && $attendee->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + throw new \InvalidArgumentException('actor-type'); + } + + if ($attendee->getRoomId() !== $room->getId()) { + throw new DoesNotExistException('Room mismatch'); + } + + $sessions = $this->sessionMapper->findByAttendeeId($targetAttendeeId); + foreach ($sessions as $session) { + if ($session->getInCall() !== Participant::FLAG_DISCONNECTED) { + return; + } + } + + if ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $target = new Participant($room, $attendee, null); + $event = new ParticipantModifiedEvent($room, $target, AParticipantModifiedEvent::PROPERTY_RESEND_CALL, 1); + $this->dispatcher->dispatchTyped($event); + return; + } + + $userStatus = $this->userStatusManager->getUserStatuses([$attendee->getActorId()]); + if (isset($userStatus[$attendee->getActorId()]) && $userStatus[$attendee->getActorId()]->getStatus() === IUserStatus::DND) { + throw new \InvalidArgumentException('status'); + } + + $target = new Participant($room, $attendee, null); + $event = new CallNotificationSendEvent($room, $currentParticipant, $target); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @throws \InvalidArgumentException + * @throws DialOutFailedException + * @throws ParticipantNotFoundException + */ + public function startDialOutRequest(SIPDialOutService $dialOutService, Room $room, int $targetAttendeeId, string|bool $callerNumber): void { + try { + $attendee = $this->attendeeMapper->getById($targetAttendeeId); + } catch (DoesNotExistException|MultipleObjectsReturnedException|Exception) { + throw new ParticipantNotFoundException(); + } + + if ($attendee->getRoomId() !== $room->getId()) { + throw new ParticipantNotFoundException(); + } + + if ($attendee->getActorType() !== Attendee::ACTOR_PHONES) { + throw new ParticipantNotFoundException(); + } + + $dialOutResponse = $dialOutService->sendDialOutRequestToBackend($room, $attendee, $callerNumber); + + if (!$dialOutResponse) { + throw new \InvalidArgumentException('backend'); + } + + if ($dialOutResponse->dialOut->error?->code) { + throw new DialOutFailedException( + $dialOutResponse->dialOut->error->code, + $dialOutResponse->dialOut->error->message, + ); + } + + $attendee->setCallId($dialOutResponse->dialOut->callId); + $this->attendeeMapper->update($attendee); + } + + /** + * @throws \InvalidArgumentException + * @throws ParticipantNotFoundException + */ + public function resetDialOutRequest(Room $room, int $targetAttendeeId, string $callId): void { + try { + $attendee = $this->attendeeMapper->getById($targetAttendeeId); + } catch (DoesNotExistException|MultipleObjectsReturnedException|Exception) { + throw new ParticipantNotFoundException(); + } + + if ($attendee->getRoomId() !== $room->getId()) { + throw new ParticipantNotFoundException(); + } + + if ($attendee->getActorType() !== Attendee::ACTOR_PHONES) { + throw new ParticipantNotFoundException(); + } + + if ($callId === $attendee->getCallId()) { + $attendee->setCallId(null); + $this->attendeeMapper->update($attendee); + } else { + throw new \InvalidArgumentException('callId'); + } + + } + + public function updateCallFlags(Room $room, Participant $participant, int $flags): void { + $session = $participant->getSession(); + if (!$session instanceof Session) { + return; + } + + if (!($session->getInCall() & Participant::FLAG_IN_CALL)) { + throw new \Exception('Participant not in call'); + } + + if (!($flags & Participant::FLAG_IN_CALL)) { + throw new \InvalidArgumentException('Invalid flags'); + } + + $permissions = $participant->getPermissions(); + if (!($permissions & Attendee::PERMISSIONS_PUBLISH_AUDIO)) { + $flags &= ~Participant::FLAG_WITH_AUDIO; + } + if (!($permissions & Attendee::PERMISSIONS_PUBLISH_VIDEO)) { + $flags &= ~Participant::FLAG_WITH_VIDEO; + } + + $oldFlags = $session->getInCall(); + $event = new BeforeParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_IN_CALL, $flags, $oldFlags); + $this->dispatcher->dispatchTyped($event); + + $session->setInCall($flags); + $this->sessionMapper->update($session); + + // FIXME Missing potential update of call flags on room level + + $event = new ParticipantModifiedEvent($room, $participant, AParticipantModifiedEvent::PROPERTY_IN_CALL, $flags, $oldFlags); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param string[] $actorIds + * @param string[] $actorsDirectlyMentioned + */ + public function markUsersAsMentioned(Room $room, string $actorType, array $actorIds, int $messageId, array $actorsDirectlyMentioned): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('last_mention_message', $update->createNamedParameter($messageId, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('room_id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->in('actor_id', $update->createNamedParameter($actorIds, IQueryBuilder::PARAM_STR_ARRAY))) + ->andWhere($update->expr()->lt('last_mention_message', $update->createNamedParameter($messageId, IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + if (!empty($actorsDirectlyMentioned)) { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('last_mention_direct', $update->createNamedParameter($messageId, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('room_id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->in('actor_id', $update->createNamedParameter($actorsDirectlyMentioned, IQueryBuilder::PARAM_STR_ARRAY))) + ->andWhere($update->expr()->lt('last_mention_direct', $update->createNamedParameter($messageId, IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + } + } + + public function resetChatDetails(Room $room): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('last_read_message', $update->createNamedParameter(ChatManager::UNREAD_FIRST_MESSAGE, IQueryBuilder::PARAM_INT)) + ->set('last_mention_message', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + ->set('last_mention_direct', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + ->set('last_attendee_activity', $update->createNamedParameter($this->timeFactory->getTime(), IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('room_id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + } + + public function updateReadPrivacyForActor(string $actorType, string $actorId, int $readPrivacy): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('read_privacy', $update->createNamedParameter($readPrivacy, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } + + public function updateDisplayNameForActor(string $actorType, string $actorId, string $displayName): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_attendees') + ->set('display_name', $update->createNamedParameter($displayName)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } + + public function getLastCommonReadChatMessage(Room $room): int { + $query = $this->connection->getQueryBuilder(); + $query->selectAlias($query->func()->min('last_read_message'), 'last_common_read_message') + ->from('talk_attendees') + ->where($query->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('read_privacy', $query->createNamedParameter(Participant::PRIVACY_PUBLIC, IQueryBuilder::PARAM_INT))); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + return (int)($row['last_common_read_message'] ?? 0); + } + + /** + * @param int[] $roomIds + * @return array A map of roomId => "last common read message id" + * @psalm-return array + */ + public function getLastCommonReadChatMessageForMultipleRooms(array $roomIds): array { + $commonReads = array_fill_keys($roomIds, 0); + + $query = $this->connection->getQueryBuilder(); + $query->select('room_id') + ->selectAlias($query->func()->min('last_read_message'), 'last_common_read_message') + ->from('talk_attendees') + ->where($query->expr()->eq('actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->in('room_id', $query->createParameter('roomIds'))) + ->andWhere($query->expr()->eq('read_privacy', $query->createNamedParameter(Participant::PRIVACY_PUBLIC, IQueryBuilder::PARAM_INT))) + ->groupBy('room_id'); + + $chunks = array_chunk($roomIds, 1000); + foreach ($chunks as $chunk) { + $query->setParameter('roomIds', $chunk, IQueryBuilder::PARAM_INT_ARRAY); + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $commonReads[(int)$row['room_id']] = (int)$row['last_common_read_message']; + } + $result->closeCursor(); + } + + return $commonReads; + } + + /** + * @param Room $room + * @return Participant[] + */ + public function getParticipantsForRoom(Room $room): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->orX( + $query->expr()->neq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_GUESTS)), + $query->expr()->isNotNull('s.id'), + )); + + return $this->getParticipantsFromQuery($query, $room); + } + + /** + * Get all sessions and attendees without a session for the room + * + * This will return multiple items for the same attendee if the attendee + * has multiple sessions in the room. + * + * @param Room $room + * @return Participant[] + */ + public function getSessionsAndParticipantsForRoom(Room $room): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->eq('s.attendee_id', 'a.id') + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + + return $this->getParticipantsFromQuery($query, $room); + } + + /** + * Get all sessions and attendees without a session for the room + * + * This will return multiple items for the same attendee if the attendee + * has multiple sessions in the room. + * + * @param Room[] $rooms + * @return Participant[] + */ + public function getSessionsAndParticipantsForRooms(array $rooms): array { + $roomIds = array_map(static fn (Room $room) => $room->getId(), $rooms); + $map = array_combine($roomIds, $rooms); + + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->eq('s.attendee_id', 'a.id') + ) + ->where($query->expr()->in('a.room_id', $query->createNamedParameter($roomIds, IQueryBuilder::PARAM_INT_ARRAY))); + + return $this->getParticipantsForRoomsFromQuery($query, $map); + } + + /** + * @param Room $room + * @param int $maxAge + * @return Participant[] + */ + public function getParticipantsForAllSessions(Room $room, int $maxAge = 0): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') + ->leftJoin( + 's', 'talk_attendees', 'a', + $query->expr()->eq('s.attendee_id', 'a.id') + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->isNotNull('a.id')); + + if ($maxAge > 0) { + $query->andWhere($query->expr()->gt('s.last_ping', $query->createNamedParameter($maxAge, IQueryBuilder::PARAM_INT))); + } + + return $this->getParticipantsFromQuery($query, $room); + } + + /** + * @param Room $room + * @param int $maxAge + * @return Participant[] + */ + public function getParticipantsInCall(Room $room, int $maxAge = 0): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') + ->leftJoin( + 's', 'talk_attendees', 'a', + $query->expr()->eq('s.attendee_id', 'a.id') + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->neq('s.in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED))); + + if ($maxAge > 0) { + $query->andWhere($query->expr()->gte('s.last_ping', $query->createNamedParameter($maxAge, IQueryBuilder::PARAM_INT))); + } + + return $this->getParticipantsFromQuery($query, $room); + } + + /** + * Do not try to modernize this into using the Room, Participant or other objects. + * This function is called by {@see CallNotificationController::state} + * and mobile as well as desktop clients are basically ddos-ing it, to check + * if the call notification / call screen should be removed. + * @return CallNotificationController::CASE_* + */ + public function checkIfUserIsMissingCall(string $token, string $userId): int { + $query = $this->connection->getQueryBuilder(); + $query->select('r.active_since', 'a.last_joined_call', 's.in_call') + ->from('talk_rooms', 'r') + ->innerJoin( + 'r', 'talk_attendees', 'a', + $query->expr()->eq('r.id', 'a.room_id') + ) + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->andX( + $query->expr()->eq('s.attendee_id', 'a.id'), + $query->expr()->neq('s.in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED, IQueryBuilder::PARAM_INT), IQueryBuilder::PARAM_INT), + ) + ) + ->where($query->expr()->eq('r.token', $query->createNamedParameter($token))) + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))); + + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + return CallNotificationController::CASE_ROOM_NOT_FOUND; + } + + if ($row['active_since'] === null) { + return CallNotificationController::CASE_MISSED_CALL; + } + + try { + $activeSince = new \DateTime($row['active_since']); + } catch (\Throwable) { + return CallNotificationController::CASE_MISSED_CALL; + } + + if ($row['in_call'] !== null) { + return CallNotificationController::CASE_PARTICIPANT_JOINED; + } + + if ($activeSince->getTimestamp() >= $row['last_joined_call']) { + return CallNotificationController::CASE_STILL_CURRENT; + } + + // The participant had joined the call, but left again. + // In this case we should not ring any more, but clients stop + // pinging the endpoint 45s after receiving the push anyway. + // However, it is also possible that the participant was ringed + // again by a moderator after they had joined the call before. + // So if a client pings the endpoint after 45s initial ringing + // + 15 seconds for worst case push notification delay, we will + // again tell them to show the call notification. + if (($activeSince->getTimestamp() + 45 + 15) < $this->timeFactory->getTime()) { + return CallNotificationController::CASE_STILL_CURRENT; + } + return CallNotificationController::CASE_PARTICIPANT_JOINED; + } + + /** + * @return Participant[] + */ + public function getParticipantsJoinedCurrentCall(Room $room, int $maxAge): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->gte('a.last_joined_call', $query->createNamedParameter($maxAge, IQueryBuilder::PARAM_INT))) + ->orderBy('a.id', 'ASC'); + + return $this->getParticipantsFromQuery($query, $room); + } + + /** + * @param Room $room + * @param int $notificationLevel + * @return Participant[] + */ + public function getParticipantsByNotificationLevel(Room $room, int $notificationLevel): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') + // Currently we only care if the user has an active session at all, so we can select any + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->andX( + $query->expr()->eq('s.attendee_id', 'a.id'), + $query->expr()->eq('s.state', $query->createNamedParameter(Session::STATE_ACTIVE, IQueryBuilder::PARAM_INT)) + ) + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('a.notification_level', $query->createNamedParameter($notificationLevel, IQueryBuilder::PARAM_INT))); + + $participants = $this->getParticipantsFromQuery($query, $room); + + $uniqueAttendees = []; + foreach ($participants as $participant) { + $uniqueAttendees[$participant->getAttendee()->getId()] = $participant; + } + + return array_values($uniqueAttendees); + } + + /** + * @param Room $room + * @param list $attendeeIds + * @return Participant[] + */ + public function getParticipantsByAttendeeId(Room $room, array $attendeeIds): array { + $query = $this->connection->getQueryBuilder(); + + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') + // Currently we only care if the user has an active session at all, so we can select any + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->andX( + $query->expr()->eq('s.attendee_id', 'a.id'), + $query->expr()->eq('s.state', $query->createNamedParameter(Session::STATE_ACTIVE, IQueryBuilder::PARAM_INT)) + ) + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->in('a.id', $query->createNamedParameter($attendeeIds, IQueryBuilder::PARAM_INT_ARRAY))); + + $participants = $this->getParticipantsFromQuery($query, $room); + + $uniqueAttendees = []; + foreach ($participants as $participant) { + $uniqueAttendees[$participant->getAttendee()->getId()] = $participant; + } + + return array_values($uniqueAttendees); + } + + /** + * @return Participant[] + */ + public function getParticipantsByActorType(Room $room, string $actorType): array { + $attendees = $this->getActorsByType($room, $actorType); + return array_map(static fn (Attendee $attendee) => new Participant($room, $attendee, null), $attendees); + } + + /** + * @param IQueryBuilder $query + * @param Room $room + * @return Participant[] + */ + protected function getParticipantsFromQuery(IQueryBuilder $query, Room $room): array { + return $this->getParticipantsForRoomsFromQuery($query, [$room->getId() => $room]); + } + + /** + * @param IQueryBuilder $query + * @param Room[] $rooms Room ID => Room object + * @psalm-param array $rooms + * @return Participant[] + */ + protected function getParticipantsForRoomsFromQuery(IQueryBuilder $query, array $rooms): array { + $participants = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $room = $rooms[(int)$row['room_id']] ?? null; + if ($room === null) { + continue; + } + + $attendee = $this->attendeeMapper->createAttendeeFromRow($row); + if (isset($row['s_id'])) { + $session = $this->sessionMapper->createSessionFromRow($row); + } else { + $session = null; + } + + $participants[] = new Participant($room, $attendee, $session); + } + $result->closeCursor(); + + return $participants; + } + + /** + * @throws ParticipantNotFoundException + */ + protected function getParticipantFromQuery(IQueryBuilder $query, Room $room): Participant { + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + if ($row === false) { + throw new ParticipantNotFoundException('User is not a participant'); + } + + $attendee = $this->attendeeMapper->createAttendeeFromRow($row); + if (isset($row['s_id'])) { + $session = $this->sessionMapper->createSessionFromRow($row); + } else { + $session = null; + } + + return new Participant($room, $attendee, $session); + } + + /** + * @return string[] + */ + public function getParticipantUserIds(Room $room, ?\DateTime $maxLastJoined = null): array { + return $this->getParticipantActorIdsByActorType($room, [Attendee::ACTOR_USERS], $maxLastJoined); + } + + /** + * @return string[] + */ + public function getParticipantUserIdsAndFederatedUserCloudIds(Room $room, ?\DateTime $maxLastJoined = null): array { + return $this->getParticipantActorIdsByActorType($room, [Attendee::ACTOR_USERS, Attendee::ACTOR_FEDERATED_USERS], $maxLastJoined); + } + + /** + * @return string[] + */ + public function getParticipantActorIdsByActorType(Room $room, array $actorTypes, ?\DateTime $maxLastJoined = null): array { + $maxLastJoinedTimestamp = null; + if ($maxLastJoined !== null) { + $maxLastJoinedTimestamp = $maxLastJoined->getTimestamp(); + } + $attendees = $this->attendeeMapper->getActorsByTypes($room->getId(), $actorTypes, $maxLastJoinedTimestamp); + + return array_map(static function (Attendee $attendee) { + return $attendee->getActorId(); + }, $attendees); + } + + public function getActorsCountByType(Room $room, string $actorType, int $maxLastJoined): int { + return $this->attendeeMapper->getActorsCountByType($room->getId(), $actorType, $maxLastJoined); + } + + /** + * @param Room $room + * @return array (userId => isImportant) + */ + public function getParticipantUsersForCallNotifications(Room $room): array { + $query = $this->connection->getQueryBuilder(); + + $query->select('a.actor_id', 'a.important') + ->from('talk_attendees', 'a') + ->leftJoin( + 'a', 'talk_sessions', 's', + $query->expr()->andX( + $query->expr()->eq('s.attendee_id', 'a.id'), + $query->expr()->neq('s.in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED)), + $query->expr()->gte('s.last_ping', $query->createNamedParameter($this->timeFactory->getTime() - Session::SESSION_TIMEOUT, IQueryBuilder::PARAM_INT)), + ) + ) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('a.notification_calls', $query->createNamedParameter(Participant::NOTIFY_CALLS_ON))) + ->andWhere($query->expr()->isNull('s.in_call')); + + if ($room->getLobbyState() !== Webinary::LOBBY_NONE) { + // Filter out non-moderators and users without lobby permissions + $query->andWhere( + $query->expr()->orX( + $query->expr()->in('a.participant_type', $query->createNamedParameter( + [Participant::MODERATOR, Participant::OWNER], + IQueryBuilder::PARAM_INT_ARRAY + )), + $query->expr()->eq( + $query->expr()->castColumn( + $query->expr()->bitwiseAnd( + 'permissions', + Attendee::PERMISSIONS_LOBBY_IGNORE + ), + IQueryBuilder::PARAM_INT + ), + $query->createNamedParameter(Attendee::PERMISSIONS_LOBBY_IGNORE, IQueryBuilder::PARAM_INT) + ) + ) + ); + } + + $users = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $users[$row['actor_id']] = (bool)$row['important']; + } + $result->closeCursor(); + + return $users; + } + + /** + * @param Room $room + * @return int + */ + public function getNumberOfUsers(Room $room): int { + return $this->attendeeMapper->countActorsByParticipantType($room->getId(), [ + Participant::USER, + Participant::MODERATOR, + Participant::OWNER, + ]); + } + + /** + * @param Room $room + * @param bool $ignoreGuestModerators + * @return int + */ + public function getNumberOfModerators(Room $room, bool $ignoreGuestModerators = true): int { + $participantTypes = [ + Participant::MODERATOR, + Participant::OWNER, + ]; + if (!$ignoreGuestModerators) { + $participantTypes[] = Participant::GUEST_MODERATOR; + } + return $this->attendeeMapper->countActorsByParticipantType($room->getId(), $participantTypes); + } + + /** + * @param Room $room + * @return int + */ + public function getNumberOfActors(Room $room): int { + return $this->attendeeMapper->countActorsByParticipantType($room->getId(), []); + } + + /** + * @param Room $room + * @return bool + */ + public function hasActiveSessions(Room $room): bool { + $query = $this->connection->getQueryBuilder(); + $query->select('a.room_id') + ->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq( + 'a.id', 's.attendee_id' + )) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->isNotNull('s.id')) + ->setMaxResults(1); + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + return (bool)$row; + } + + public function cacheParticipant(Room $room, Participant $participant): void { + $attendee = $participant->getAttendee(); + + $this->actorCache[$room->getId()] ??= []; + $this->actorCache[$room->getId()][$attendee->getActorType()] ??= []; + $this->actorCache[$room->getId()][$attendee->getActorType()][$attendee->getActorId()] = $participant; + if ($participant->getSession()) { + $participantSessionId = $participant->getSession()->getSessionId(); + $this->sessionCache[$room->getId()] ??= []; + $this->sessionCache[$room->getId()][$participantSessionId] = $participant; + } + } + + protected function resetCallStateWhenNeeded(Room $room): void { + if ($room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + // No call + return; + } + + if ($this->hasActiveSessionsInCall($room)) { + // Still others there + return; + } + + $roomService = Server::get(RoomService::class); + $roomService->resetActiveSince($room, null); + } + + /** + * @param Room $room + * @return bool + */ + public function hasActiveSessionsInCall(Room $room): bool { + $query = $this->connection->getQueryBuilder(); + $query->select('a.room_id') + ->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq( + 'a.id', 's.attendee_id' + )) + ->where($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->isNotNull('s.in_call')) + ->andWhere($query->expr()->neq('s.in_call', $query->createNamedParameter(Participant::FLAG_DISCONNECTED))) + ->andWhere($query->expr()->gte('s.last_ping', $query->createNamedParameter($this->timeFactory->getTime() - Session::SESSION_TIMEOUT, IQueryBuilder::PARAM_INT))) + ->setMaxResults(1); + $result = $query->executeQuery(); + $row = $result->fetch(); + $result->closeCursor(); + + return (bool)$row; + } + + protected function generatePin(int $entropy = 7): string { + $pin = ''; + // Do not allow to start with a '0' as that is a special mode on the phone server + // Also there are issues with some providers when you enter the same number twice + // consecutive too fast, so we avoid this as well. + $lastDigit = '0'; + for ($i = 0; $i < $entropy; $i++) { + $lastDigit = $this->secureRandom->generate(1, + str_replace($lastDigit, '', ISecureRandom::CHAR_DIGITS) + ); + $pin .= $lastDigit; + } + + return $pin; + } + + /** + * @param Room $room + * @param string|null $userId + * @param string|null|false $sessionId Set to false if you don't want to load a session (and save resources), + * string to try loading a specific session + * null to try loading "any" + * @return Participant + * @throws ParticipantNotFoundException When the user is not a participant + */ + public function getParticipant(Room $room, ?string $userId, $sessionId = null): Participant { + if (!is_string($userId) || $userId === '') { + throw new ParticipantNotFoundException('Not a user'); + } + + if (isset($this->actorCache[$room->getId()][Attendee::ACTOR_USERS][$userId])) { + $participant = $this->actorCache[$room->getId()][Attendee::ACTOR_USERS][$userId]; + if (!$sessionId + || ($participant->getSession() instanceof Session + && $participant->getSession()->getSessionId() === $sessionId)) { + return $participant; + } + } + + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->where($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + if ($sessionId !== false) { + if ($sessionId !== null) { + $helper->selectSessionsTable($query); + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId)), + $query->expr()->eq('a.id', 's.attendee_id') + )); + } else { + $helper->selectSessionsTable($query); // FIXME PROBLEM + $query->leftJoin('a', 'talk_sessions', 's', $query->expr()->eq('a.id', 's.attendee_id')); + } + } + + $participant = $this->getParticipantFromQuery($query, $room); + + $this->actorCache[$room->getId()] ??= []; + $this->actorCache[$room->getId()][Attendee::ACTOR_USERS] ??= []; + $this->actorCache[$room->getId()][Attendee::ACTOR_USERS][$userId] = $participant; + if ($participant->getSession()) { + $participantSessionId = $participant->getSession()->getSessionId(); + $this->sessionCache[$room->getId()] ??= []; + $this->sessionCache[$room->getId()][$participantSessionId] = $participant; + } + + return $participant; + } + + /** + * Get a participant with an active session if there is one, otherwise without session + * + * @param Room $room + * @param string $userId + * @return Participant + * @throws ParticipantNotFoundException When the user is not a participant + */ + public function getParticipantWithActiveSession(Room $room, string $userId): Participant { + if ($userId === '') { + throw new ParticipantNotFoundException('Not a user'); + } + + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_attendees', 'a') + ->leftJoin('a', 'talk_sessions', 's', $query->expr()->andX( + $query->expr()->eq('a.id', 's.attendee_id'), + $query->expr()->eq('s.state', $query->createNamedParameter(Session::STATE_ACTIVE, IQueryBuilder::PARAM_INT)), + $query->expr()->gte('s.last_ping', $query->createNamedParameter($this->timeFactory->getTime() - Session::SESSION_TIMEOUT, IQueryBuilder::PARAM_INT)), + )) + ->where($query->expr()->eq('a.actor_type', $query->createNamedParameter(Attendee::ACTOR_USERS))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($userId))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + + return $this->getParticipantFromQuery($query, $room); + } + + /** + * @param Room $room + * @param string|null $sessionId + * @return Participant + * @throws ParticipantNotFoundException When the user is not a participant + */ + public function getParticipantBySession(Room $room, ?string $sessionId): Participant { + if (!is_string($sessionId) || $sessionId === '' || $sessionId === '0') { + throw new ParticipantNotFoundException('Not a user'); + } + + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $helper->selectSessionsTable($query); + $query->from('talk_sessions', 's') + ->leftJoin('s', 'talk_attendees', 'a', $query->expr()->eq('a.id', 's.attendee_id')) + ->where($query->expr()->eq('s.session_id', $query->createNamedParameter($sessionId))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + return $this->getParticipantFromQuery($query, $room); + } + + /** + * @param Room $room + * @param string $pin + * @return Participant + * @throws ParticipantNotFoundException When the pin is not valid (has no participant assigned) + */ + public function getParticipantByPin(Room $room, string $pin): Participant { + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->where($query->expr()->eq('a.pin', $query->createNamedParameter($pin))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + return $this->getParticipantFromQuery($query, $room); + } + + /** + * @param Room $room + * @param int $attendeeId + * @return Participant + * @throws ParticipantNotFoundException When the pin is not valid (has no participant assigned) + */ + public function getParticipantByAttendeeId(Room $room, int $attendeeId): Participant { + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->where($query->expr()->eq('a.id', $query->createNamedParameter($attendeeId, IQueryBuilder::PARAM_INT))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + return $this->getParticipantFromQuery($query, $room); + } + + /** + * @param Room $room + * @param string $actorType + * @param string $actorId + * @return Participant + * @throws ParticipantNotFoundException When the pin is not valid (has no participant assigned) + */ + public function getParticipantByActor(Room $room, string $actorType, string $actorId): Participant { + if (isset($this->actorCache[$room->getId()][$actorType][$actorId])) { + return $this->actorCache[$room->getId()][$actorType][$actorId]; + } + + if ($actorType === Attendee::ACTOR_USERS) { + return $this->getParticipant($room, $actorId, false); + } + + if ($actorType === Attendee::ACTOR_GUESTS + && in_array($actorId, [Attendee::ACTOR_ID_CLI, Attendee::ACTOR_ID_SYSTEM, Attendee::ACTOR_ID_CHANGELOG, Attendee::ACTOR_ID_SAMPLE], true)) { + $exception = new ParticipantNotFoundException('User is not a participant'); + $this->logger->info('Trying to load hardcoded system guest from attendees table: ' . $actorType . '/' . $actorId); + throw $exception; + } + + $query = $this->connection->getQueryBuilder(); + $helper = new SelectHelper(); + $helper->selectAttendeesTable($query); + $query->from('talk_attendees', 'a') + ->andWhere($query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId))) + ->andWhere($query->expr()->eq('a.room_id', $query->createNamedParameter($room->getId()))) + ->setMaxResults(1); + + $participant = $this->getParticipantFromQuery($query, $room); + $this->cacheParticipant($room, $participant); + return $participant; + } +} diff --git a/lib/Service/PhoneNumberValidation.php b/lib/Service/PhoneNumberValidation.php new file mode 100644 index 0000000..69fb017 --- /dev/null +++ b/lib/Service/PhoneNumberValidation.php @@ -0,0 +1,55 @@ +config->getSystemValueString('default_phone_region') ?: null; + $standardPhoneNumber = $this->phoneNumberUtil->convertToStandardFormat($phoneNumber, $defaultRegion); + + if ($standardPhoneNumber === null) { + throw new \InvalidArgumentException(); + } + + if (str_starts_with($standardPhoneNumber, '+')) { + return substr($standardPhoneNumber, 1); + } + + throw new \InvalidArgumentException(); + } +} diff --git a/lib/Service/PhoneService.php b/lib/Service/PhoneService.php new file mode 100644 index 0000000..416278e --- /dev/null +++ b/lib/Service/PhoneService.php @@ -0,0 +1,93 @@ +mapper->findByPhoneNumber($phoneNumber); + + $user = $this->userManager->get($entity->getActorId()); + if (!$user instanceof IUser) { + throw new DoesNotExistException('Invalid user'); + } + + $outOfOffice = $this->availabilityCoordinator->getCurrentOutOfOfficeData($user); + if ($outOfOffice === null + || $outOfOffice->getReplacementUserId() === null + || !$this->availabilityCoordinator->isInEffect($outOfOffice)) { + return $entity; + } + + $replacementUser = $this->userManager->get($outOfOffice->getReplacementUserId()); + if (!$replacementUser instanceof IUser) { + // Replacement is wrong, fall back to original user + return $entity; + } + + $outOfOffice = $this->availabilityCoordinator->getCurrentOutOfOfficeData($replacementUser); + if ($outOfOffice !== null + && $this->availabilityCoordinator->isInEffect($outOfOffice)) { + // Replacement is also OOO, fall back to original user + return $entity; + } + + $entities = $this->mapper->findByUser($replacementUser->getUID()); + if (empty($entities)) { + // Replacement has no phone number, fall back to original user + return $entity; + } + + return array_shift($entities); + } + + /** + * @return list + */ + public function findByUser(string $userId): array { + return $this->mapper->findByUser($userId); + } + + /** + * @return list + */ + public function findByPhoneNumbers(array $phoneNumbers): array { + return $this->mapper->findByPhoneNumbers($phoneNumbers); + } + + public function deleteByPhoneNumber(string $phoneNumber): void { + $this->mapper->deleteByPhoneNumber($phoneNumber); + } + + public function deleteByUser(string $userId): void { + $this->mapper->deleteByUser($userId); + } +} diff --git a/lib/Service/PollService.php b/lib/Service/PollService.php new file mode 100644 index 0000000..00e653f --- /dev/null +++ b/lib/Service/PollService.php @@ -0,0 +1,324 @@ +setRoomId($roomId); + $poll->setActorType($actorType); + $poll->setActorId($actorId); + $poll->setDisplayName($displayName); + $poll->setQuestion($question); + $poll->setOptions($options); + $poll->setVotes(json_encode([])); + $poll->setResultMode($resultMode); + $poll->setMaxVotes($maxVotes); + if ($draft) { + $poll->setStatus(Poll::STATUS_DRAFT); + } + + $this->pollMapper->insert($poll); + + return $poll; + } + + /** + * @param int $roomId + * @return list + */ + public function getDraftsForRoom(int $roomId): array { + return $this->pollMapper->getDraftsByRoomId($roomId); + } + + /** + * @param int $roomId + * @param int $pollId + * @return Poll + * @throws DoesNotExistException + */ + public function getPoll(int $roomId, int $pollId): Poll { + return $this->pollMapper->getPollByRoomIdAndPollId($roomId, $pollId); + } + + /** + * @param Participant $participant + * @param Poll $poll + * @throws WrongPermissionsException + */ + public function updatePoll(Participant $participant, Poll $poll): void { + if (!$participant->hasModeratorPermissions() + && ($poll->getActorType() !== $participant->getAttendee()->getActorType() + || $poll->getActorId() !== $participant->getAttendee()->getActorId())) { + // Only moderators and the author of the poll can update it + throw new WrongPermissionsException(); + } + $this->pollMapper->update($poll); + } + + /** + * @throws WrongPermissionsException + */ + public function closePoll(Participant $participant, Poll $poll): void { + if (!$participant->hasModeratorPermissions() + && ($poll->getActorType() !== $participant->getAttendee()->getActorType() + || $poll->getActorId() !== $participant->getAttendee()->getActorId())) { + // Only moderators and the author of the poll can update it + throw new WrongPermissionsException(); + } + + $poll->setStatus(Poll::STATUS_CLOSED); + $this->pollMapper->update($poll); + } + + /** + * @param Participant $participant + * @param Poll $poll + * @return list + */ + public function getVotesForActor(Participant $participant, Poll $poll): array { + return $this->voteMapper->findByPollIdForActor( + $poll->getId(), + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId() + ); + } + + /** + * @param Poll $poll + * @return list + */ + public function getVotes(Poll $poll): array { + return $this->voteMapper->findByPollId($poll->getId()); + } + + /** + * @param Participant $participant + * @param Poll $poll + * @param int[] $optionIds Options the user voted for + * @return list + * @throws \RuntimeException + */ + public function votePoll(Participant $participant, Poll $poll, array $optionIds): array { + $numVotes = count($optionIds); + if ($numVotes !== count(array_unique($optionIds))) { + throw new \UnexpectedValueException(); + } + + if ($poll->getMaxVotes() !== Poll::MAX_VOTES_UNLIMITED + && $poll->getMaxVotes() < $numVotes) { + throw new \OverflowException(); + } + + if (!empty($optionIds)) { + foreach ($optionIds as $optionId) { + if (!is_numeric($optionId)) { + throw new \RangeException(); + } + } + + $maxOptionId = max(array_keys(json_decode($poll->getOptions(), true, 512, JSON_THROW_ON_ERROR))); + $maxVotedId = max($optionIds); + $minVotedId = min($optionIds); + if ($minVotedId < 0 || $maxVotedId > $maxOptionId) { + throw new \RangeException(); + } + } + + $votes = []; + $result = json_decode($poll->getVotes(), true); + + $previousVotes = $this->voteMapper->findByPollIdForActor( + $poll->getId(), + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId() + ); + + $numVoters = $poll->getNumVoters(); + if ($previousVotes && $numVoters > 0) { + $numVoters--; + } + + foreach ($previousVotes as $vote) { + $result[$vote->getOptionId()] ??= 1; + $result[$vote->getOptionId()] -= 1; + } + + $this->connection->beginTransaction(); + try { + $this->voteMapper->deleteVotesByActor( + $poll->getId(), + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId() + ); + + if (!empty($optionIds)) { + $numVoters++; + } + + foreach ($optionIds as $optionId) { + $vote = new Vote(); + $vote->setPollId($poll->getId()); + $vote->setRoomId($poll->getRoomId()); + $vote->setActorType($participant->getAttendee()->getActorType()); + $vote->setActorId($participant->getAttendee()->getActorId()); + $vote->setDisplayName($participant->getAttendee()->getDisplayName()); + $vote->setOptionId($optionId); + $this->voteMapper->insert($vote); + + $result[$optionId] ??= 0; + $result[$optionId] += 1; + $votes[] = $vote; + } + } catch (\Exception $e) { + $this->connection->rollBack(); + throw $e; + } + $this->connection->commit(); + + $this->updateResultCache($poll->getId()); + $result = array_filter($result); + $poll->setVotes(json_encode($result)); + $poll->setNumVoters($numVoters); + + return $votes; + } + + public function updateResultCache(int $pollId): void { + $resultQuery = $this->connection->getQueryBuilder(); + $resultQuery->selectAlias( + $resultQuery->func()->concat( + $resultQuery->expr()->literal('"'), + 'option_id', + $resultQuery->expr()->literal('":'), + $resultQuery->func()->count('id') + ), + 'colonseparatedvalue' + ) + ->from('talk_poll_votes') + ->where($resultQuery->expr()->eq('poll_id', $resultQuery->createNamedParameter($pollId))) + ->groupBy('option_id') + ->orderBy('option_id', 'ASC'); + + $jsonQuery = $this->connection->getQueryBuilder(); + $jsonQuery + ->selectAlias( + $jsonQuery->func()->concat( + $jsonQuery->expr()->literal('{'), + $jsonQuery->func()->groupConcat('colonseparatedvalue'), + $jsonQuery->expr()->literal('}') + ), + 'json' + ) + ->from($jsonQuery->createFunction('(' . $resultQuery->getSQL() . ')'), 'json'); + + $subQuery = $this->connection->getQueryBuilder(); + $subQuery->select('actor_type', 'actor_id') + ->from('talk_poll_votes') + ->where($subQuery->expr()->eq('poll_id', $subQuery->createNamedParameter($pollId))) + ->groupBy('actor_type', 'actor_id'); + + $votersQuery = $this->connection->getQueryBuilder(); + $votersQuery->select($votersQuery->func()->count('*')) + ->from($votersQuery->createFunction('(' . $subQuery->getSQL() . ')'), 'voters'); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_polls') + ->set('votes', $jsonQuery->createFunction('(' . $jsonQuery->getSQL() . ')')) + ->set('num_voters', $jsonQuery->createFunction('(' . $votersQuery->getSQL() . ')')) + ->where($update->expr()->eq('id', $update->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))); + + $this->connection->beginTransaction(); + try { + $update->executeStatement(); + + // Fix `null` being stored if the only voter revokes their vote + $updateFixNull = $this->connection->getQueryBuilder(); + $updateFixNull->update('talk_polls') + ->set('votes', $updateFixNull->createNamedParameter('{}')) + ->where($updateFixNull->expr()->eq('id', $updateFixNull->createNamedParameter($pollId, IQueryBuilder::PARAM_INT))) + ->andWhere($updateFixNull->expr()->isNull('votes')); + + $updateFixNull->executeStatement(); + } catch (\Exception $e) { + $this->connection->rollBack(); + throw $e; + } + $this->connection->commit(); + } + + public function deleteByRoomId(int $roomId): void { + $this->voteMapper->deleteByRoomId($roomId); + $this->pollMapper->deleteByRoomId($roomId); + } + + public function deleteByPollId(int $pollId): void { + $this->voteMapper->deleteByPollId($pollId); + $this->pollMapper->deleteByPollId($pollId); + } + + public function updateDisplayNameForActor(string $actorType, string $actorId, string $displayName): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_polls') + ->set('display_name', $update->createNamedParameter($displayName)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_poll_votes') + ->set('display_name', $update->createNamedParameter($displayName)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } + + public function neutralizeDeletedUser(string $actorType, string $actorId): void { + $update = $this->connection->getQueryBuilder(); + $update->update('talk_polls') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter(ICommentsManager::DELETED_USER)) + ->set('actor_id', $update->createNamedParameter(ICommentsManager::DELETED_USER)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + + $update = $this->connection->getQueryBuilder(); + $update->update('talk_poll_votes') + ->set('display_name', $update->createNamedParameter('')) + ->set('actor_type', $update->createNamedParameter(ICommentsManager::DELETED_USER)) + ->set('actor_id', $update->createNamedParameter(ICommentsManager::DELETED_USER)) + ->where($update->expr()->eq('actor_type', $update->createNamedParameter($actorType))) + ->andWhere($update->expr()->eq('actor_id', $update->createNamedParameter($actorId))); + $update->executeStatement(); + } +} diff --git a/lib/Service/ProxyCacheMessageService.php b/lib/Service/ProxyCacheMessageService.php new file mode 100644 index 0000000..bd02b88 --- /dev/null +++ b/lib/Service/ProxyCacheMessageService.php @@ -0,0 +1,131 @@ +mapper->findByRemote($remoteServerUrl, $remoteToken, $remoteMessageId); + } + + public function delete(ProxyCacheMessage $message): ProxyCacheMessage { + return $this->mapper->delete($message); + } + + public function deleteExpiredMessages(): void { + $this->mapper->deleteExpiredMessages($this->timeFactory->getDateTime()); + } + + /** + * @throws \InvalidArgumentException + * @throws CannotReachRemoteException + */ + public function syncRemoteMessage(Room $room, Participant $participant, int $messageId): ProxyCacheMessage { + if (!$room->isFederatedConversation()) { + throw new \InvalidArgumentException('room'); + } + + /** @var \OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController $proxy */ + $proxy = \OCP\Server::get(\OCA\Talk\Federation\Proxy\TalkV1\Controller\ChatController::class); + $ocsResponse = $proxy->getMessageContext($room, $participant, $messageId, 1); + + if ($ocsResponse->getStatus() !== Http::STATUS_OK || !isset($ocsResponse->getData()[0])) { + throw new \InvalidArgumentException('message'); + } + + /** @var TalkChatMessageWithParent $messageData */ + $messageData = $ocsResponse->getData()[0]; + + try { + $proxy = $this->mapper->findByRemote($room->getRemoteServer(), $room->getRemoteToken(), $messageId); + } catch (DoesNotExistException) { + $proxy = new ProxyCacheMessage(); + } + + $proxy->setLocalToken($room->getToken()); + $proxy->setRemoteServerUrl($room->getRemoteServer()); + $proxy->setRemoteToken($room->getRemoteToken()); + $proxy->setRemoteMessageId($messageData['id']); + $proxy->setActorType($messageData['actorType']); + $proxy->setActorId($messageData['actorId']); + $proxy->setActorDisplayName($messageData['actorDisplayName']); + $proxy->setMessageType($messageData['messageType']); + $proxy->setSystemMessage($messageData['systemMessage']); + if ($messageData['expirationTimestamp']) { + $proxy->setExpirationDatetime(new \DateTime('@' . $messageData['expirationTimestamp'])); + } + $proxy->setCreationDatetime(new \DateTime('@' . $messageData['timestamp'])); + $proxy->setMessage($messageData['message']); + $proxy->setMessageParameters(json_encode($messageData['messageParameters'])); + + $metaData = []; + if (!empty($messageData['lastEditActorType']) && !empty($messageData['lastEditActorId'])) { + $metaData[Message::METADATA_LAST_EDITED_BY_TYPE] = $messageData['lastEditActorType']; + $metaData[Message::METADATA_LAST_EDITED_BY_ID] = $messageData['lastEditActorId']; + } + if (!empty($messageData['lastEditTimestamp'])) { + $metaData[Message::METADATA_LAST_EDITED_TIME] = $messageData['lastEditTimestamp']; + } + if (!empty($messageData['silent'])) { + $metaData[Message::METADATA_SILENT] = $messageData['silent']; + } + $proxy->setMetaData(json_encode($metaData)); + + if ($proxy->getId() !== null) { + $this->mapper->update($proxy); + return $proxy; + } + + try { + $this->mapper->insert($proxy); + } catch (DBException $e) { + // DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION happens when + // multiple users are in the same conversation. We are therefore + // informed multiple times about the same remote message. + if ($e->getReason() !== DBException::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + $this->logger->error('Error saving proxy cache message failed: ' . $e->getMessage(), ['exception' => $e]); + throw $e; + } + + $proxy = $this->mapper->findByRemote( + $room->getRemoteServer(), + $room->getRemoteToken(), + $messageData['id'], + ); + } + + return $proxy; + } +} diff --git a/lib/Service/RecordingService.php b/lib/Service/RecordingService.php new file mode 100644 index 0000000..848e9da --- /dev/null +++ b/lib/Service/RecordingService.php @@ -0,0 +1,570 @@ + ['ogg'], + 'video/ogg' => ['ogv'], + 'video/mp4' => ['mp4'], + 'video/webm' => ['webm'], + 'video/x-matroska' => ['mkv'], + ]; + public const UPLOAD_ERRORS = [ + UPLOAD_ERR_INI_SIZE => 'The uploaded file exceeds the upload_max_filesize directive in php.ini', + UPLOAD_ERR_FORM_SIZE => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form', + UPLOAD_ERR_PARTIAL => 'The file was only partially uploaded', + UPLOAD_ERR_NO_FILE => 'No file was uploaded', + UPLOAD_ERR_NO_TMP_DIR => 'Missing a temporary folder', + UPLOAD_ERR_CANT_WRITE => 'Could not write file to disk', + UPLOAD_ERR_EXTENSION => 'A PHP extension stopped the file upload', + ]; + + public function __construct( + protected IMimeTypeDetector $mimeTypeDetector, + protected ParticipantService $participantService, + protected IRootFolder $rootFolder, + protected IManager $notificationManager, + protected Manager $roomManager, + protected ITimeFactory $timeFactory, + protected Config $config, + protected IConfig $serverConfig, + protected IAppConfig $appConfig, + protected RoomService $roomService, + protected ShareManager $shareManager, + protected ChatManager $chatManager, + protected LoggerInterface $logger, + protected BackendNotifier $backendNotifier, + protected ITaskProcessingManager $taskProcessingManager, + protected IFactory $l10nFactory, + protected IUserManager $userManager, + ) { + } + + /** + * @psalm-param Room::RECORDING_* $status + */ + public function start(Room $room, int $status, string $owner, Participant $participant): void { + $availableRecordingTypes = [Room::RECORDING_VIDEO, Room::RECORDING_AUDIO]; + if (!in_array($status, $availableRecordingTypes, true)) { + throw new InvalidArgumentException('status'); + } + if ($room->getCallRecording() !== Room::RECORDING_NONE && $room->getCallRecording() !== Room::RECORDING_FAILED) { + throw new InvalidArgumentException('recording'); + } + if (!$room->getActiveSince() instanceof \DateTimeInterface) { + throw new InvalidArgumentException('call'); + } + if (!$this->config->isRecordingEnabled()) { + throw new InvalidArgumentException('config'); + } + + $this->backendNotifier->start($room, $status, $owner, $participant); + + $startingStatus = $status === Room::RECORDING_VIDEO ? Room::RECORDING_VIDEO_STARTING : Room::RECORDING_AUDIO_STARTING; + $this->roomService->setCallRecording($room, $startingStatus); + $this->appConfig->setAppValueString(self::APPCONFIG_PREFIX . $room->getToken(), $owner, true, true); + } + + public function stop(Room $room, ?Participant $participant = null): void { + if ($room->getCallRecording() === Room::RECORDING_NONE) { + return; + } + + try { + $this->backendNotifier->stop($room, $participant); + } catch (RecordingNotFoundException $e) { + // If the recording to be stopped is not known to the recording + // server it will never notify that the recording was stopped, so + // the status needs to be explicitly changed here. + $this->roomService->setCallRecording($room, Room::RECORDING_FAILED); + } + } + + public function store(Room $room, string $owner, array $file): void { + $this->appConfig->deleteAppValue(self::APPCONFIG_PREFIX . $room->getToken()); + try { + $participant = $this->participantService->getParticipant($room, $owner); + } catch (ParticipantNotFoundException $e) { + throw new InvalidArgumentException('owner_participant'); + } + + $resource = $this->getResourceFromFileArray($file, $room, $participant); + + $fileName = basename($file['name']); + $fileRealPath = realpath($file['tmp_name']); + + $this->validateFileFormat($fileName, $fileRealPath); + + try { + $recordingFolder = $this->getRecordingFolder($owner, $room->getToken()); + $fileNode = $recordingFolder->newFile($fileName, $resource); + $this->notifyStoredRecording($room, $participant, $fileNode); + } catch (NoUserException $e) { + throw new InvalidArgumentException('owner_invalid'); + } catch (NotPermittedException $e) { + throw new InvalidArgumentException('owner_permission'); + } + + $shouldTranscribe = $this->serverConfig->getAppValue('spreed', 'call_recording_transcription', 'no') === 'yes'; + $shouldSummarize = $this->serverConfig->getAppValue('spreed', 'call_recording_summary', 'yes') === 'yes'; + if (!$shouldTranscribe && !$shouldSummarize) { + $this->logger->debug('Skipping transcription and summary of call recording, as both are disabled'); + return; + } + + $supportedTaskTypeIds = $this->taskProcessingManager->getAvailableTaskTypeIds(); + if (!in_array(AudioToText::ID, $supportedTaskTypeIds, true)) { + $this->logger->error('Can not transcribe call recording as no Audio2Text task provider is available'); + return; + } + + $task = new Task( + AudioToText::ID, + ['input' => $fileNode->getId()], + Application::APP_ID, + $owner, + 'call/transcription/' . $room->getToken(), + ); + + try { + $this->taskProcessingManager->scheduleTask($task); + $this->logger->debug('Scheduled call recording transcript'); + } catch (Exception $e) { + $this->logger->error('An error occurred while trying to transcribe the call recording', ['exception' => $e]); + } + } + + /** + * @param 'transcript'|'summary' $aiTask + */ + public function storeTranscript(string $owner, string $roomToken, int $recordingFileId, string $output, string $aiTask): void { + $userFolder = $this->rootFolder->getUserFolder($owner); + $recordingNodes = $userFolder->getById($recordingFileId); + + if (empty($recordingNodes)) { + $this->logger->warning("Could not save recording $aiTask as the recording could not be found", [ + 'owner' => $owner, + 'roomToken' => $roomToken, + 'recordingFileId' => $recordingFileId, + ]); + throw new InvalidArgumentException('owner_participant'); + } + $recording = array_pop($recordingNodes); + $recordingFolder = $recording->getParent(); + + if ($recordingFolder->getName() !== $roomToken) { + $this->logger->warning("Could not determinate conversation when trying to store $aiTask of call recording, as folder name did not match customId conversation token"); + throw new InvalidArgumentException('owner_participant'); + } + + try { + $room = $this->roomManager->getRoomForUserByToken($roomToken, $owner); + $participant = $this->participantService->getParticipant($room, $owner); + } catch (ParticipantNotFoundException) { + $this->logger->warning("Could not determinate conversation when trying to store $aiTask of call recording"); + throw new InvalidArgumentException('owner_participant'); + } + + $shouldTranscribe = $this->serverConfig->getAppValue('spreed', 'call_recording_transcription', 'no') === 'yes'; + $shouldSummarize = $this->serverConfig->getAppValue('spreed', 'call_recording_summary', 'yes') === 'yes'; + + if ($aiTask === 'transcript') { + $transcriptFileName = pathinfo($recording->getName(), PATHINFO_FILENAME) . '.md'; + if (!$shouldTranscribe) { + $this->logger->debug('Skipping saving of transcript for call recording as it is disabled'); + } + } else { + $transcriptFileName = pathinfo($recording->getName(), PATHINFO_FILENAME) . ' - ' . $aiTask . '.md'; + } + + if (($shouldTranscribe && $aiTask === 'transcript') + || ($shouldSummarize && $aiTask === 'summary')) { + $user = $this->userManager->get($owner); + $language = $this->l10nFactory->getUserLanguage($user); + $l = $this->l10nFactory->get(Application::APP_ID, $language); + + if ($aiTask === 'transcript') { + $warning = $l->t('Transcript is AI generated and may contain mistakes'); + } else { + $warning = $l->t('Summary is AI generated and may contain mistakes'); + } + + try { + $fileNode = $recordingFolder->newFile( + $transcriptFileName, + $output . "\n\n$warning\n", + ); + $this->notifyStoredTranscript($room, $participant, $fileNode, $aiTask); + } catch (NoUserException) { + throw new InvalidArgumentException('owner_invalid'); + } catch (NotPermittedException) { + throw new InvalidArgumentException('owner_permission'); + } + } + + if (!$shouldSummarize) { + // If summary is off skip scheduling it + $this->logger->debug('Skipping scheduling summary of call recording as it is disabled'); + return; + } + + if ($aiTask === 'summary') { + // After saving the summary there is nothing more to do + return; + } + + $supportedTaskTypeIds = $this->taskProcessingManager->getAvailableTaskTypeIds(); + if (!in_array(TextToTextSummary::ID, $supportedTaskTypeIds, true)) { + $this->logger->error('Can not summarize call recording as no TextToTextSummary task provider is available'); + return; + } + + $task = new Task( + TextToTextSummary::ID, + ['input' => $output], + Application::APP_ID, + $owner, + 'call/summary/' . $room->getToken() . '/' . $recordingFileId, + ); + + try { + $this->taskProcessingManager->scheduleTask($task); + $this->logger->debug('Scheduled call recording summary'); + } catch (Exception $e) { + $this->logger->error('An error occurred while trying to summarize the call recording', ['exception' => $e]); + } + } + + /** + * @throws InvalidArgumentException + */ + public function notifyAboutFailedStore(Room $room): void { + $owner = $this->appConfig->getAppValueString(self::APPCONFIG_PREFIX . $room->getToken(), lazy: true); + if ($owner === '') { + return; + } + + try { + $participant = $this->participantService->getParticipant($room, $owner); + } catch (ParticipantNotFoundException) { + $this->logger->warning('Could not determinate conversation when trying to notify about failed upload of call recording'); + throw new InvalidArgumentException('owner_participant'); + } + + $attendee = $participant->getAttendee(); + + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setDateTime($this->timeFactory->getDateTime()) + ->setObject('recording_information', $room->getToken()) + ->setUser($attendee->getActorId()) + ->setSubject('record_file_store_fail'); + $this->notificationManager->notify($notification); + } + + public function notifyAboutFailedTranscript(string $owner, string $roomToken, int $recordingFileId, string $aiType): void { + $userFolder = $this->rootFolder->getUserFolder($owner); + $recordingNodes = $userFolder->getById($recordingFileId); + + if (empty($recordingNodes)) { + $this->logger->warning("Could not trying to notify about failed $aiType as the recording could not be found", [ + 'owner' => $owner, + 'roomToken' => $roomToken, + 'recordingFileId' => $recordingFileId, + ]); + throw new InvalidArgumentException('owner_participant'); + } + $recording = array_pop($recordingNodes); + $recordingFolder = $recording->getParent(); + + if ($recordingFolder->getName() !== $roomToken) { + $this->logger->warning("Could not determinate conversation when trying to notify about failed $aiType, as folder name did not match customId conversation token"); + throw new InvalidArgumentException('owner_participant'); + } + + try { + $room = $this->roomManager->getRoomForUserByToken($roomToken, $owner); + $participant = $this->participantService->getParticipant($room, $owner); + } catch (ParticipantNotFoundException) { + $this->logger->warning("Could not determinate conversation when trying to notify about failed $aiType of call recording"); + throw new InvalidArgumentException('owner_participant'); + } + + $attendee = $participant->getAttendee(); + + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setDateTime($this->timeFactory->getDateTime()) + ->setObject('recording', $room->getToken()) + ->setUser($attendee->getActorId()) + ->setSubject($aiType === 'transcript' ? 'transcript_failed' : 'summary_failed', [ + 'objectId' => $recording->getId(), + ]); + $this->notificationManager->notify($notification); + } + + /** + * Gets a resource that represents the file contents of the file array. + * + * @param array $file File array from which a resource will be returned + * @param Room $room The Talk room that requests the resource + * @param Participant $participant The Talk participant that requests the resource + * @return resource Resource representing the file contents of the file array + */ + public function getResourceFromFileArray(array $file, Room $room, Participant $participant) { + if ($file['error'] !== 0) { + $error = self::UPLOAD_ERRORS[$file['error']]; + $this->logger->error($error); + + $notification = $this->notificationManager->createNotification(); + $notification + ->setApp('spreed') + ->setDateTime($this->timeFactory->getDateTime()) + ->setObject('recording_information', $room->getToken()) + ->setUser($participant->getAttendee()->getActorId()) + ->setSubject('record_file_store_fail'); + $this->notificationManager->notify($notification); + + throw new InvalidArgumentException('invalid_file'); + } + + $resource = fopen($file['tmp_name'], 'r'); + if ($resource === false) { + throw new InvalidArgumentException('fopen_failed'); + } + + $resourceStat = fstat($resource); + if ($resourceStat === false) { + throw new InvalidArgumentException('fstat_failed'); + } + + if ($resourceStat['size'] === 0) { + throw new InvalidArgumentException('empty_file'); + } + + return $resource; + } + + public function validateFileFormat(string $fileName, string $fileRealPath): void { + if (!is_file($fileRealPath)) { + $this->logger->warning("An invalid file path ($fileRealPath) was provided"); + throw new InvalidArgumentException('file_invalid_path'); + } + + $mimeType = $this->mimeTypeDetector->detectContent($fileRealPath); + $allowed = self::DEFAULT_ALLOWED_RECORDING_FORMATS; + if (!array_key_exists($mimeType, $allowed)) { + $this->logger->warning("Uploaded file detected mime type ($mimeType) is not allowed"); + throw new InvalidArgumentException('file_mimetype'); + } + + $extension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION)); + if (!$extension || !in_array($extension, $allowed[$mimeType], true)) { + $this->logger->warning("Uploaded file extensions ($extension) is not allowed for the detected mime type ($mimeType)"); + throw new InvalidArgumentException('file_extension'); + } + } + + /** + * @throws NotPermittedException + * @throws NoUserException + */ + private function getRecordingFolder(string $owner, string $token): Folder { + $userFolder = $this->rootFolder->getUserFolder($owner); + $recordingRootFolderName = $this->config->getRecordingFolder($owner); + try { + /** @var Folder */ + $recordingRootFolder = $userFolder->get($recordingRootFolderName); + if ($recordingRootFolder->isShared()) { + $this->logger->error('Talk attachment folder for user {userId} is set to a shared folder. Resetting to their root.', [ + 'userId' => $owner, + ]); + + $this->serverConfig->setUserValue($owner, 'spreed', UserPreference::ATTACHMENT_FOLDER, '/'); + } + } catch (NotFoundException $e) { + /** @var Folder */ + $recordingRootFolder = $userFolder->newFolder($recordingRootFolderName); + } + try { + $recordingFolder = $recordingRootFolder->get($token); + } catch (NotFoundException $e) { + $recordingFolder = $recordingRootFolder->newFolder($token); + } + return $recordingFolder; + } + + public function notifyStoredRecording(Room $room, Participant $participant, File $file): void { + $attendee = $participant->getAttendee(); + + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setDateTime($this->timeFactory->getDateTime()) + ->setObject('recording', $room->getToken()) + ->setUser($attendee->getActorId()) + ->setSubject('record_file_stored', [ + 'objectId' => $file->getId(), + ]); + $this->notificationManager->notify($notification); + } + + + /** + * @param 'transcript'|'summary' $aiType + */ + public function notifyStoredTranscript(Room $room, Participant $participant, File $file, string $aiType): void { + $attendee = $participant->getAttendee(); + + $notification = $this->notificationManager->createNotification(); + + $notification + ->setApp('spreed') + ->setDateTime($this->timeFactory->getDateTime()) + ->setObject('recording', $room->getToken()) + ->setUser($attendee->getActorId()) + ->setSubject($aiType === 'transcript' ? 'transcript_file_stored' : 'summary_file_stored', [ + 'objectId' => $file->getId(), + ]); + $this->notificationManager->notify($notification); + } + + public function notificationDismiss(Room $room, Participant $participant, int $timestamp, ?string $notificationSubject): void { + $notification = $this->notificationManager->createNotification(); + $notification->setApp('spreed') + ->setObject('recording', $room->getToken()) + ->setDateTime($this->timeFactory->getDateTime('@' . $timestamp)) + ->setUser($participant->getAttendee()->getActorId()); + + if ($notificationSubject === null) { + $subjects = ['record_file_stored', 'transcript_file_stored', 'summary_file_stored']; + } else { + $subjects = [$notificationSubject]; + } + + foreach ($subjects as $subject) { + $notification->setSubject($subject); + $this->notificationManager->markProcessed($notification); + } + } + + private function getTypeOfShare(string $mimetype): string { + if (str_starts_with($mimetype, 'video/')) { + return ChatManager::VERB_RECORD_VIDEO; + } + return ChatManager::VERB_RECORD_AUDIO; + } + + public function shareToChat(Room $room, Participant $participant, int $fileId, int $timestamp): void { + try { + $userFolder = $this->rootFolder->getUserFolder( + $participant->getAttendee()->getActorId() + ); + $files = $userFolder->getById($fileId); + /** @var \OCP\Files\File $file */ + $file = array_shift($files); + } catch (\Throwable $th) { + throw new InvalidArgumentException('file'); + } + + $creationDateTime = $this->timeFactory->getDateTime(); + + $share = $this->shareManager->newShare(); + $share->setNodeId($fileId) + ->setShareTime($creationDateTime) + ->setSharedBy($participant->getAttendee()->getActorId()) + ->setNode($file) + ->setShareType(IShare::TYPE_ROOM) + ->setSharedWith($room->getToken()) + ->setPermissions(\OCP\Constants::PERMISSION_READ); + + $removeNotification = null; + if (!str_ends_with($file->getName(), '.md')) { + $removeNotification = 'record_file_stored'; + } elseif (!str_ends_with($file->getName(), ' - summary.md')) { + $removeNotification = 'transcript_file_stored'; + } elseif (str_ends_with($file->getName(), ' - summary.md')) { + $removeNotification = 'summary_file_stored'; + } + + $share = $this->shareManager->createShare($share); + + $message = json_encode([ + 'message' => 'file_shared', + 'parameters' => [ + 'share' => $share->getId(), + 'metaData' => [ + 'mimeType' => $file->getMimeType(), + 'messageType' => $this->getTypeOfShare($file->getMimeType()), + ], + ], + ], JSON_THROW_ON_ERROR); + + try { + $this->chatManager->addSystemMessage( + $room, + $participant, + $participant->getAttendee()->getActorType(), + $participant->getAttendee()->getActorId(), + $message, + $creationDateTime, + true + ); + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + throw new InvalidArgumentException('system'); + } + $this->notificationDismiss($room, $participant, $timestamp, $removeNotification); + } +} diff --git a/lib/Service/ReminderService.php b/lib/Service/ReminderService.php new file mode 100644 index 0000000..767c36a --- /dev/null +++ b/lib/Service/ReminderService.php @@ -0,0 +1,177 @@ +reminderMapper->findForUser($userId, $limit); + } + + public function setReminder(string $userId, string $token, int $messageId, int $timestamp): Reminder { + try { + $reminder = $this->reminderMapper->findForUserAndMessage($userId, $token, $messageId); + $reminder->setDateTime(new \DateTime('@' . $timestamp)); + $this->reminderMapper->update($reminder); + + } catch (DoesNotExistException) { + $reminder = new Reminder(); + $reminder->setUserId($userId); + $reminder->setToken($token); + $reminder->setMessageId($messageId); + $reminder->setDateTime(new \DateTime('@' . $timestamp)); + $this->reminderMapper->insert($reminder); + } + + return $reminder; + } + + /** + * @throws DoesNotExistException + */ + public function getReminder(string $userId, string $token, int $messageId): Reminder { + return $this->reminderMapper->findForUserAndMessage($userId, $token, $messageId); + } + + public function deleteReminder(string $userId, string $token, int $messageId): void { + try { + $reminder = $this->reminderMapper->findForUserAndMessage($userId, $token, $messageId); + $this->reminderMapper->delete($reminder); + } catch (DoesNotExistException) { + // When the reminder does not exist anymore, the notification could be there + $notification = $this->notificationManager->createNotification(); + $notification->setApp(Application::APP_ID) + ->setUser($userId) + ->setObject('reminder', $token) + ->setMessage('reminder', [ + 'commentId' => $messageId, + ]); + $this->notificationManager->markProcessed($notification); + } + } + + public function executeReminders(\DateTime $executeBefore): void { + $reminders = $this->reminderMapper->findRemindersToExecute($executeBefore); + + if (empty($reminders)) { + return; + } + + $shouldFlush = $this->notificationManager->defer(); + + $roomTokens = []; + foreach ($reminders as $reminder) { + $roomTokens[] = $reminder->getToken(); + } + $roomTokens = array_unique($roomTokens); + $rooms = $this->manager->getRoomsByToken($roomTokens); + + /** @var array $proxyMessages */ + $proxyMessages = []; + $messageIds = []; + foreach ($reminders as $reminder) { + if (!isset($rooms[$reminder->getToken()])) { + $this->logger->warning('Ignoring reminder for user ' . $reminder->getUserId() . ' as conversation ' . $reminder->getToken() . ' could not be found'); + continue; + } + + $room = $rooms[$reminder->getToken()]; + if (!$room->isFederatedConversation()) { + $messageIds[] = $reminder->getMessageId(); + } else { + $key = json_encode([$room->getRemoteServer(), $room->getRemoteToken(), $reminder->getMessageId()]); + if (!isset($proxyMessages[$key])) { + try { + $proxyMessages[$key] = $this->pcmService->findByRemote($room->getRemoteServer(), $room->getRemoteToken(), $reminder->getMessageId()); + } catch (DoesNotExistException) { + } + } + } + } + + $messageIds = array_unique($messageIds); + + $messages = $this->chatManager->getMessagesById($messageIds); + + foreach ($reminders as $reminder) { + if (!isset($rooms[$reminder->getToken()])) { + continue; + } + + $room = $rooms[$reminder->getToken()]; + if (!$room->isFederatedConversation()) { + $key = $reminder->getMessageId(); + $messageList = $messages; + $messageParameters = [ + 'commentId' => $reminder->getMessageId(), + ]; + } else { + $key = json_encode([$room->getRemoteServer(), $room->getRemoteToken(), $reminder->getMessageId()]); + $messageList = $proxyMessages; + $messageParameters = [ + 'proxyId' => $messageList[$key]?->getId(), + ]; + } + + if (!isset($messageList[$key])) { + $this->logger->warning('Ignoring reminder for user ' . $reminder->getUserId() . ' as messages #' . $reminder->getMessageId() . ' could not be found for conversation ' . $reminder->getToken()); + continue; + } + $message = $messageList[$key]; + + if ($message instanceof IComment + && ($message->getObjectType() !== 'chat' + || $room->getId() !== (int)$message->getObjectId())) { + $this->logger->warning('Ignoring reminder for user ' . $reminder->getUserId() . ' as messages #' . $reminder->getMessageId() . ' could not be found for conversation ' . $reminder->getToken()); + continue; + } + + $notification = $this->notificationManager->createNotification(); + $notification->setApp(Application::APP_ID) + ->setUser($reminder->getUserId()) + ->setObject('reminder', $reminder->getToken()) + ->setDateTime($reminder->getDateTime()) + ->setSubject('reminder', [ + 'token' => $reminder->getToken(), + 'message' => $reminder->getMessageId(), + 'userType' => $message->getActorType(), + 'userId' => $message->getActorId(), + ]) + ->setMessage('reminder', $messageParameters); + $this->notificationManager->notify($notification); + } + + if ($shouldFlush) { + $this->notificationManager->flush(); + } + + $this->reminderMapper->deleteExecutedReminders($executeBefore); + } +} diff --git a/lib/Service/RoomFormatter.php b/lib/Service/RoomFormatter.php new file mode 100644 index 0000000..71441aa --- /dev/null +++ b/lib/Service/RoomFormatter.php @@ -0,0 +1,487 @@ +formatRoomV4( + $responseFormat, + $commonReadMessages, + $room, + $currentParticipant, + $statuses, + $isSIPBridgeRequest, + $isListingBreakoutRooms, + $skipLastMessage, + $thread, + $isThreadInfoComplete, + ); + } + + /** + * @param array $commonReadMessages + * @return TalkRoom + */ + public function formatRoomV4( + string $responseFormat, + array $commonReadMessages, + Room $room, + ?Participant $currentParticipant, + ?array $statuses, + bool $isSIPBridgeRequest, + bool $isListingBreakoutRooms, + bool $skipLastMessage, + ?Thread $thread = null, + bool $isThreadInfoComplete = false, + ): array { + $roomData = [ + 'id' => $room->getId(), + 'token' => $room->getToken(), + 'type' => $room->getType(), + 'name' => '', + 'displayName' => '', + 'objectType' => '', + 'objectId' => '', + 'participantType' => Participant::GUEST, + 'participantFlags' => Participant::FLAG_DISCONNECTED, + 'readOnly' => Room::READ_WRITE, + 'hasPassword' => $room->hasPassword(), + 'hasCall' => false, + 'callStartTime' => 0, + 'callRecording' => Room::RECORDING_NONE, + 'canStartCall' => false, + 'lastActivity' => 0, + 'lastReadMessage' => 0, + 'unreadMessages' => 0, + 'unreadMention' => false, + 'unreadMentionDirect' => false, + 'isFavorite' => false, + 'canLeaveConversation' => false, + 'canDeleteConversation' => false, + 'notificationLevel' => Participant::NOTIFY_NEVER, + 'notificationCalls' => Participant::NOTIFY_CALLS_OFF, + 'lobbyState' => Webinary::LOBBY_NONE, + 'lobbyTimer' => 0, + 'lastPing' => 0, + 'sessionId' => '0', + 'sipEnabled' => Webinary::SIP_DISABLED, + 'actorType' => '', + 'actorId' => '', + 'attendeeId' => 0, + 'permissions' => Attendee::PERMISSIONS_CUSTOM, + 'attendeePermissions' => Attendee::PERMISSIONS_CUSTOM, + 'callPermissions' => Attendee::PERMISSIONS_CUSTOM, + 'defaultPermissions' => Attendee::PERMISSIONS_CUSTOM, + 'canEnableSIP' => false, + 'attendeePin' => '', + 'description' => '', + 'lastCommonReadMessage' => 0, + 'listable' => Room::LISTABLE_NONE, + 'callFlag' => Participant::FLAG_DISCONNECTED, + 'messageExpiration' => 0, + 'avatarVersion' => $this->avatarService->getAvatarVersion($room), + 'isCustomAvatar' => $this->avatarService->isCustomAvatar($room), + 'breakoutRoomMode' => BreakoutRoom::MODE_NOT_CONFIGURED, + 'breakoutRoomStatus' => BreakoutRoom::STATUS_STOPPED, + 'recordingConsent' => $this->talkConfig->recordingConsentRequired() === RecordingService::CONSENT_REQUIRED_OPTIONAL ? $room->getRecordingConsent() : $this->talkConfig->recordingConsentRequired(), + 'mentionPermissions' => Room::MENTION_PERMISSIONS_EVERYONE, + 'liveTranscriptionLanguageId' => '', + 'isArchived' => false, + 'isImportant' => false, + 'isSensitive' => false, + ]; + + if ($room->isFederatedConversation()) { + $roomData['recordingConsent'] = $room->getRecordingConsent(); + } + + $lastActivity = $room->getLastActivity(); + if ($lastActivity instanceof \DateTimeInterface) { + $lastActivity = $lastActivity->getTimestamp(); + } else { + $lastActivity = 0; + } + + $lobbyTimer = $room->getLobbyTimer(); + if ($lobbyTimer instanceof \DateTimeInterface) { + $lobbyTimer = $lobbyTimer->getTimestamp(); + } else { + $lobbyTimer = 0; + } + + if ($isSIPBridgeRequest + || ($isListingBreakoutRooms && !$currentParticipant instanceof Participant) + || ($room->getListable() !== Room::LISTABLE_NONE && !$currentParticipant instanceof Participant) + ) { + return array_merge($roomData, [ + 'name' => $room->getName(), + 'displayName' => $room->getDisplayName($isListingBreakoutRooms || $isSIPBridgeRequest || $this->userId === null ? '' : $this->userId, $isListingBreakoutRooms || $isSIPBridgeRequest), + 'description' => $room->getListable() !== Room::LISTABLE_NONE ? $room->getDescription() : '', + 'objectType' => $room->getObjectType(), + 'objectId' => $room->getObjectId(), + 'readOnly' => $room->getReadOnly(), + 'hasCall' => $room->getActiveSince() instanceof \DateTimeInterface, + 'lastActivity' => $lastActivity, + 'callFlag' => $room->getCallFlag(), + 'lobbyState' => $room->getLobbyState(), + 'lobbyTimer' => $lobbyTimer, + 'sipEnabled' => $room->getSIPEnabled(), + 'listable' => $room->getListable(), + 'breakoutRoomMode' => $room->getBreakoutRoomMode(), + 'breakoutRoomStatus' => $room->getBreakoutRoomStatus(), + 'callStartTime' => $room->getActiveSince() instanceof \DateTimeInterface ? $room->getActiveSince()->getTimestamp() : 0, + 'callRecording' => $room->getCallRecording(), + ]); + } + + if (!$currentParticipant instanceof Participant) { + return $roomData; + } + + $attendee = $currentParticipant->getAttendee(); + $userId = $attendee->getActorType() === Attendee::ACTOR_USERS ? $attendee->getActorId() : ''; + + $roomData = array_merge($roomData, [ + 'name' => $room->getName(), + 'displayName' => $room->getDisplayName($userId), + 'objectType' => $room->getObjectType(), + 'objectId' => $room->getObjectId(), + 'participantType' => $attendee->getParticipantType(), + 'readOnly' => $room->getReadOnly(), + 'hasCall' => $room->getActiveSince() instanceof \DateTimeInterface, + 'callStartTime' => $room->getActiveSince() instanceof \DateTimeInterface ? $room->getActiveSince()->getTimestamp() : 0, + 'callRecording' => $room->getCallRecording(), + 'recordingConsent' => $this->talkConfig->recordingConsentRequired() === RecordingService::CONSENT_REQUIRED_OPTIONAL ? $room->getRecordingConsent() : $this->talkConfig->recordingConsentRequired(), + 'lastActivity' => $lastActivity, + 'callFlag' => $room->getCallFlag(), + 'isFavorite' => $attendee->isFavorite(), + 'notificationLevel' => $attendee->getNotificationLevel(), + 'notificationCalls' => $attendee->getNotificationCalls(), + 'lobbyState' => $room->getLobbyState(), + 'lobbyTimer' => $lobbyTimer, + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + 'attendeeId' => $attendee->getId(), + 'permissions' => $currentParticipant->getPermissions(), + 'attendeePermissions' => $attendee->getPermissions(), + 'callPermissions' => Attendee::PERMISSIONS_DEFAULT, + 'defaultPermissions' => $room->getDefaultPermissions(), + 'description' => $room->getDescription(), + 'listable' => $room->getListable(), + 'messageExpiration' => $room->getMessageExpiration(), + 'breakoutRoomMode' => $room->getBreakoutRoomMode(), + 'breakoutRoomStatus' => $room->getBreakoutRoomStatus(), + 'mentionPermissions' => $room->getMentionPermissions(), + 'liveTranscriptionLanguageId' => $room->getLiveTranscriptionLanguageId(), + 'isArchived' => $attendee->isArchived(), + 'isImportant' => $attendee->isImportant(), + 'isSensitive' => $attendee->isSensitive(), + ]); + + if ($room->isFederatedConversation()) { + $roomData['recordingConsent'] = $room->getRecordingConsent(); + } + + if ($currentParticipant->getAttendee()->getReadPrivacy() === Participant::PRIVACY_PUBLIC) { + if (isset($commonReadMessages[$room->getId()])) { + $roomData['lastCommonReadMessage'] = $commonReadMessages[$room->getId()]; + } else { + $roomData['lastCommonReadMessage'] = $this->chatManager->getLastCommonReadMessage($room); + } + } + + if ($this->talkConfig->isSIPConfigured()) { + $roomData['sipEnabled'] = $room->getSIPEnabled(); + if ($room->getSIPEnabled() !== Webinary::SIP_DISABLED) { + // Generate a PIN if the attendee is a user and doesn't have one. + $this->participantService->generatePinForParticipant($room, $currentParticipant); + + $roomData['attendeePin'] = $attendee->getPin(); + } + } + + $session = $currentParticipant->getSession(); + if ($session instanceof Session) { + $roomData = array_merge($roomData, [ + 'participantFlags' => $session->getInCall(), + 'lastPing' => $session->getLastPing(), + 'sessionId' => $session->getSessionId(), + ]); + } + + if ($roomData['notificationLevel'] === Participant::NOTIFY_DEFAULT) { + if ($currentParticipant->isGuest()) { + $roomData['notificationLevel'] = Participant::NOTIFY_NEVER; + } elseif ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + $roomData['notificationLevel'] = Participant::NOTIFY_ALWAYS; + } else { + $adminSetting = (int)$this->serverConfig->getAppValue('spreed', 'default_group_notification', (string)Participant::NOTIFY_DEFAULT); + if ($adminSetting === Participant::NOTIFY_DEFAULT) { + $roomData['notificationLevel'] = Participant::NOTIFY_MENTION; + } else { + $roomData['notificationLevel'] = $adminSetting; + } + } + } + + $currentUser = null; + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $currentUser = $this->userManager->get($attendee->getActorId()); + if ($room->isFederatedConversation()) { + $roomData['lastReadMessage'] = $attendee->getLastReadMessage(); + $roomData['unreadMention'] = (bool)$attendee->getLastMentionMessage(); + $roomData['unreadMentionDirect'] = (bool)$attendee->getLastMentionDirect(); + $roomData['unreadMessages'] = $attendee->getUnreadMessages(); + } elseif ($currentUser instanceof IUser) { + $lastReadMessage = $attendee->getLastReadMessage(); + if ($lastReadMessage === ChatManager::UNREAD_MIGRATION) { + /* + * Because the migration from the old comment_read_markers was + * not possible in a programmatic way with a reasonable O(1) or O(n) + * but only with O(user×chat), we do the conversion here. + */ + $lastReadMessage = $this->chatManager->getLastReadMessageFromLegacy($room, $currentUser); + $this->participantService->updateLastReadMessage($currentParticipant, $lastReadMessage); + } + if ($room->getLastMessage() && $lastReadMessage === (int)$room->getLastMessage()->getId()) { + // When the last message is the last read message, there are no unread messages, + // so we can save the query. + $roomData['unreadMessages'] = 0; + } else { + $roomData['unreadMessages'] = $this->chatManager->getUnreadCount($room, $lastReadMessage); + } + + $lastMention = $attendee->getLastMentionMessage(); + $lastMentionDirect = $attendee->getLastMentionDirect(); + $roomData['unreadMention'] = $roomData['unreadMessages'] !== 0 && $lastMention !== 0 && $lastReadMessage < $lastMention; + $roomData['unreadMentionDirect'] = $roomData['unreadMessages'] !== 0 && $lastMentionDirect !== 0 && $lastReadMessage < $lastMentionDirect; + $roomData['lastReadMessage'] = $lastReadMessage; + + $roomData['canDeleteConversation'] = $room->getType() !== Room::TYPE_ONE_TO_ONE + && $room->getType() !== Room::TYPE_ONE_TO_ONE_FORMER + && $currentParticipant->hasModeratorPermissions(false); + $roomData['canLeaveConversation'] = $room->getType() !== Room::TYPE_NOTE_TO_SELF; + + if ($this->appConfig->getAppValueBool('delete_one_to_one_conversations') + && in_array($room->getType(), [Room::TYPE_ONE_TO_ONE, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + $roomData['canDeleteConversation'] = true; + $roomData['canLeaveConversation'] = false; + } + + $roomData['canEnableSIP'] + = $this->talkConfig->isSIPConfigured() + && !preg_match(Room::SIP_INCOMPATIBLE_REGEX, $room->getToken()) + && ($room->getType() === Room::TYPE_GROUP || $room->getType() === Room::TYPE_PUBLIC) + && $currentParticipant->hasModeratorPermissions(false) + && $this->talkConfig->canUserEnableSIP($currentUser); + } + } elseif ($attendee->getActorType() === Attendee::ACTOR_FEDERATED_USERS) { + $lastReadMessage = $attendee->getLastReadMessage(); + $lastMention = $attendee->getLastMentionMessage(); + $lastMentionDirect = $attendee->getLastMentionDirect(); + $roomData['lastReadMessage'] = $lastReadMessage; + $roomData['unreadMessages'] = $this->chatManager->getUnreadCount($room, $lastReadMessage); + $roomData['unreadMention'] = $lastMention !== 0 && $lastReadMessage < $lastMention; + $roomData['unreadMentionDirect'] = $lastMentionDirect !== 0 && $lastReadMessage < $lastMentionDirect; + } else { + if ($attendee->getActorType() === Attendee::ACTOR_EMAILS) { + $roomData['invitedActorId'] = $attendee->getInvitedCloudId(); + } + $roomData['lastReadMessage'] = $attendee->getLastReadMessage(); + } + + if ($room->isFederatedConversation()) { + $roomData['remoteServer'] = $room->getRemoteServer(); + $roomData['remoteToken'] = $room->getRemoteToken(); + } + + if ($room->getLobbyState() === Webinary::LOBBY_NON_MODERATORS + && !$currentParticipant->hasModeratorPermissions() + && !($currentParticipant->getPermissions() & Attendee::PERMISSIONS_LOBBY_IGNORE)) { + // No participants and chat messages for users in the lobby. + $roomData['hasCall'] = false; + $roomData['unreadMessages'] = 0; + $roomData['unreadMention'] = false; + $roomData['unreadMentionDirect'] = false; + return $roomData; + } + + $roomData['canStartCall'] = $currentParticipant->canStartCall($this->serverConfig) + || ($room->getType() === Room::TYPE_PUBLIC + && $room->getObjectType() === Room::OBJECT_TYPE_VIDEO_VERIFICATION); + + // FIXME This should not be done, but currently all the clients use it to get the avatar of the user … + if ($room->getType() === Room::TYPE_ONE_TO_ONE) { + $participants = json_decode($room->getName(), true); + foreach ($participants as $participant) { + if ($participant !== $attendee->getActorId()) { + $roomData['name'] = (string)$participant; + + if ($statuses === null + && $this->userId !== null + && $this->appManager->isEnabledForUser('user_status')) { + $statuses = $this->userStatusManager->getUserStatuses([$participant]); + } + + if (isset($statuses[$participant])) { + $roomData['status'] = $statuses[$participant]->getStatus(); + $roomData['statusIcon'] = $statuses[$participant]->getIcon(); + $roomData['statusMessage'] = $statuses[$participant]->getMessage(); + $roomData['statusClearAt'] = $statuses[$participant]->getClearAt()?->getTimestamp(); + } elseif (!empty($statuses)) { + $roomData['status'] = IUserStatus::OFFLINE; + $roomData['statusIcon'] = null; + $roomData['statusMessage'] = null; + $roomData['statusClearAt'] = null; + } + } + } + } + + $skipLastMessage = $skipLastMessage || $attendee->isSensitive(); + $lastMessage = $skipLastMessage ? null : $room->getLastMessage(); + if ($lastMessage instanceof IComment && !$room->isFederatedConversation()) { + $lastMessageData = $this->formatLastMessage( + $responseFormat, + $room, + $currentParticipant, + $lastMessage, + $thread, + $isThreadInfoComplete, + ); + if ($lastMessageData !== null) { + $roomData['lastMessage'] = $lastMessageData; + } + } elseif ($room->isFederatedConversation()) { + $roomData['lastCommonReadMessage'] = 0; + try { + $cachedMessage = $this->pcmService->findByRemote( + $room->getRemoteServer(), + $room->getRemoteToken(), + $room->getLastMessageId(), + ); + $roomData['lastMessage'] = $cachedMessage->jsonSerialize(); + } catch (DoesNotExistException) { + } + } + + if ($roomData['lastReadMessage'] === 0) { + // Guest in a fully expired chat, no history, just loading the chat from beginning for now + $roomData['lastReadMessage'] = ChatManager::UNREAD_FIRST_MESSAGE; + } + + if ($currentUser instanceof IUser + && $attendee->getActorType() === Attendee::ACTOR_USERS + && $roomData['lastReadMessage'] === ChatManager::UNREAD_FIRST_MESSAGE + && $roomData['unreadMessages'] === 0) { + $roomData['unreadMessages'] = 1; + } + + if ($room->isFederatedConversation()) { + $roomData['attendeeId'] = (int)$attendee->getRemoteId(); + $roomData['canLeaveConversation'] = true; + } + + return $roomData; + } + + /** + * @return TalkRoomLastMessage|null + */ + public function formatLastMessage( + string $responseFormat, + Room $room, + Participant $participant, + IComment $lastMessage, + ?Thread $thread = null, + bool $isThreadInfoComplete = false, + ): ?array { + $message = $this->messageParser->createMessage($room, $participant, $lastMessage, $this->l10n); + $this->messageParser->parseMessage($message, true); + + if (!$message->getVisibility()) { + return null; + } + + $now = $this->timeFactory->getDateTime(); + $expireDate = $message->getComment()?->getExpireDate(); + if ($expireDate instanceof \DateTime && $expireDate < $now) { + return null; + } + + if ($thread === null && $isThreadInfoComplete === false) { + try { + $thread = $this->threadService->findByThreadId($room->getId(), (int)$lastMessage->getTopmostParentId()); + } catch (DoesNotExistException) { + } + } + return $message->toArray($responseFormat, $thread); + } +} diff --git a/lib/Service/RoomService.php b/lib/Service/RoomService.php new file mode 100644 index 0000000..f488c28 --- /dev/null +++ b/lib/Service/RoomService.php @@ -0,0 +1,1559 @@ +getUID() === $targetUser->getUID()) { + throw new InvalidArgumentException('invite'); + } + + try { + // If room exists: Reuse that one, otherwise create a new one. + $room = $this->manager->getOne2OneRoom($actor->getUID(), $targetUser->getUID()); + $this->participantService->ensureOneToOneRoomIsFilled($room, $actor->getUID()); + } catch (RoomNotFoundException) { + if (!$this->shareManager->currentUserCanEnumerateTargetUser($actor, $targetUser)) { + throw new RoomNotFoundException(); + } + + $users = [$actor->getUID(), $targetUser->getUID()]; + sort($users); + $room = $this->manager->createRoom(Room::TYPE_ONE_TO_ONE, json_encode($users)); + + $this->participantService->addUsers($room, [ + [ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $actor->getUID(), + 'displayName' => $actor->getDisplayName(), + 'participantType' => Participant::OWNER, + ], + ], $actor); + } + + return $room; + } + + /** + * @return Room + * @throws CreationException + * @throws PasswordException empty or invalid password + */ + public function createConversation( + int $type, + string $name, + ?IUser $owner = null, + string $objectType = '', + string $objectId = '', + string $password = '', + int $readOnly = Room::READ_WRITE, + int $listable = Room::LISTABLE_NONE, + int $messageExpiration = 0, + int $lobbyState = Webinary::LOBBY_NONE, + ?int $lobbyTimer = null, + int $sipEnabled = Webinary::SIP_DISABLED, + int $permissions = Attendee::PERMISSIONS_DEFAULT, + int $recordingConsent = RecordingService::CONSENT_REQUIRED_NO, + int $mentionPermissions = Room::MENTION_PERMISSIONS_EVERYONE, + string $description = '', + ?string $emoji = null, + ?string $avatarColor = null, + bool $allowInternalTypes = true, + ): Room { + $name = trim($name); + if ($name === '' || mb_strlen($name) > 255) { + throw new CreationException(CreationException::REASON_NAME); + } + + $types = [ + Room::TYPE_GROUP, + Room::TYPE_PUBLIC, + ]; + if ($allowInternalTypes) { + $types[] = Room::TYPE_CHANGELOG; + $types[] = Room::TYPE_NOTE_TO_SELF; + } + if (!\in_array($type, $types, true)) { + throw new CreationException(CreationException::REASON_TYPE); + } + + $objectType = trim($objectType); + if (isset($objectType[64])) { + throw new CreationException(CreationException::REASON_OBJECT_TYPE); + } + + $objectId = trim($objectId); + if (isset($objectId[64])) { + throw new CreationException(CreationException::REASON_OBJECT_ID); + } + + $objectTypes = [ + '', + // Kept to keep older clients working + Room::OBJECT_TYPE_PHONE_LEGACY, + Room::OBJECT_TYPE_PHONE_PERSIST, + Room::OBJECT_TYPE_PHONE_TEMPORARY, + Room::OBJECT_TYPE_EVENT, + Room::OBJECT_TYPE_EXTENDED_CONVERSATION, + Room::OBJECT_TYPE_INSTANT_MEETING, + ]; + if ($allowInternalTypes) { + $objectTypes[] = BreakoutRoom::PARENT_OBJECT_TYPE; + $objectTypes[] = Room::OBJECT_TYPE_EMAIL; + $objectTypes[] = Room::OBJECT_TYPE_FILE; + $objectTypes[] = Room::OBJECT_TYPE_NOTE_TO_SELF; + $objectTypes[] = Room::OBJECT_TYPE_SAMPLE; + $objectTypes[] = Room::OBJECT_TYPE_VIDEO_VERIFICATION; + } + + if (!in_array($objectType, $objectTypes, true)) { + throw new CreationException(CreationException::REASON_OBJECT_TYPE); + } + + if (($objectType !== '' && $objectId === '') + || ($objectType === '' && $objectId !== '')) { + throw new CreationException(CreationException::REASON_OBJECT); + } + + if ($type === Room::TYPE_PUBLIC && $password === '' && $this->config->isPasswordEnforced()) { + throw new PasswordException(PasswordException::REASON_VALUE, $this->l10n->t('Password needs to be set')); + } + + if (!in_array($readOnly, [Room::READ_WRITE, Room::READ_ONLY], true)) { + throw new CreationException(CreationException::REASON_READ_ONLY); + } + + if (!in_array($listable, [Room::LISTABLE_NONE, Room::LISTABLE_USERS, Room::LISTABLE_ALL], true)) { + throw new CreationException(CreationException::REASON_LISTABLE); + } + + if ($messageExpiration < 0) { + throw new CreationException(CreationException::REASON_MESSAGE_EXPIRATION); + } + + if (!in_array($lobbyState, [Webinary::LOBBY_NONE, Webinary::LOBBY_NON_MODERATORS], true)) { + throw new CreationException(CreationException::REASON_LOBBY); + } + + $lobbyTimerDateTime = null; + if ($lobbyState !== Webinary::LOBBY_NONE && $lobbyTimer !== null) { + if ($lobbyTimer < 0) { + throw new CreationException(CreationException::REASON_LOBBY_TIMER); + } + + $lobbyTimerDateTime = $this->timeFactory->getDateTime('@' . $lobbyTimer); + $lobbyTimerDateTime->setTimezone(new \DateTimeZone('UTC')); + } + + if (!in_array($sipEnabled, [Webinary::SIP_DISABLED, Webinary::SIP_ENABLED, Webinary::SIP_ENABLED_NO_PIN], true)) { + throw new CreationException(CreationException::REASON_SIP_ENABLED); + } + + if ($permissions < Attendee::PERMISSIONS_DEFAULT || $permissions > Attendee::PERMISSIONS_MAX_CUSTOM) { + throw new CreationException(CreationException::REASON_PERMISSIONS); + } elseif ($permissions !== Attendee::PERMISSIONS_DEFAULT) { + $permissions |= Attendee::PERMISSIONS_CUSTOM; + } + + if (!in_array($recordingConsent, [RecordingService::CONSENT_REQUIRED_NO, RecordingService::CONSENT_REQUIRED_YES], true)) { + throw new CreationException(CreationException::REASON_RECORDING_CONSENT); + } + + if (!in_array($mentionPermissions, [Room::MENTION_PERMISSIONS_EVERYONE, Room::MENTION_PERMISSIONS_MODERATORS], true)) { + throw new CreationException(CreationException::REASON_MENTION_PERMISSIONS); + } + if (mb_strlen($description) > Room::DESCRIPTION_MAXIMUM_LENGTH) { + throw new CreationException(CreationException::REASON_DESCRIPTION); + } + + if ($emoji !== null) { + if ($this->emojiService->getFirstCombinedEmoji($emoji) !== $emoji) { + throw new CreationException(CreationException::REASON_AVATAR); + } + if ($avatarColor !== null && !preg_match('/^[a-fA-F0-9]{6}$/', $avatarColor)) { + throw new CreationException(CreationException::REASON_AVATAR); + } + } + + if ($type !== Room::TYPE_PUBLIC || $password === '') { + $passwordHash = ''; + } else { + $event = new ValidatePasswordPolicyEvent($password); + try { + $this->dispatcher->dispatchTyped($event); + } catch (HintException $e) { + throw new PasswordException(PasswordException::REASON_VALUE, $e->getHint()); + } + $passwordHash = $this->hasher->hash($password); + } + + $room = $this->manager->createRoom( + $type, + $name, + $objectType, + $objectId, + $passwordHash, + $readOnly, + $listable, + $messageExpiration, + $lobbyState, + $lobbyTimerDateTime, + $sipEnabled, + $permissions, + $recordingConsent, + $mentionPermissions, + $description, + ); + + if ($emoji !== null) { + $avatarService = Server::get(AvatarService::class); + $avatarService->setAvatarFromEmoji($room, $emoji, $avatarColor); + } + + if ($owner instanceof IUser) { + $this->participantService->addUsers($room, [[ + 'actorType' => Attendee::ACTOR_USERS, + 'actorId' => $owner->getUID(), + 'displayName' => $owner->getDisplayName(), + 'participantType' => Participant::OWNER, + ]], null); + } + return $room; + + } + + public function prepareConversationName(string $objectName): string { + return rtrim(mb_substr(ltrim($objectName), 0, 64)); + } + + /** + * @deprecated + */ + public function setPermissions(Room $room, string $level, string $method, int $permissions, bool $resetCustomPermissions): bool { + if ($level === 'default' && $method === 'set') { + try { + $this->setDefaultPermissions($room, $permissions); + return true; + } catch (InvalidArgumentException) { + return false; + + } + } + return false; + } + + /** + * @throws DefaultPermissionsException + */ + public function setDefaultPermissions(Room $room, int $permissions): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE + || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER + || $room->getType() === Room::TYPE_NOTE_TO_SELF) { + throw new DefaultPermissionsException(DefaultPermissionsException::REASON_TYPE); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + // Do not allow manual changing the permissions in breakout rooms + throw new DefaultPermissionsException(DefaultPermissionsException::REASON_BREAKOUT_ROOM); + } + + if ($permissions < 0 || $permissions > 255) { + // Do not allow manual changing the permissions in breakout rooms + throw new DefaultPermissionsException(DefaultPermissionsException::REASON_VALUE); + } + + $oldPermissions = $room->getDefaultPermissions(); + $newPermissions = $permissions; + if ($newPermissions !== Attendee::PERMISSIONS_DEFAULT) { + // Make sure the custom flag is set when not setting to default permissions + $newPermissions |= Attendee::PERMISSIONS_CUSTOM; + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, $newPermissions, $oldPermissions); + $this->dispatcher->dispatchTyped($event); + + // Reset custom user permissions to default + $this->participantService->updateAllPermissions($room, Attendee::PERMISSIONS_MODIFY_SET, Attendee::PERMISSIONS_DEFAULT); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('default_permissions', $update->createNamedParameter($newPermissions, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setDefaultPermissions($newPermissions); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, $newPermissions, $oldPermissions); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @throws SipConfigurationException + */ + public function setSIPEnabled(Room $room, int $newSipEnabled): void { + $oldSipEnabled = $room->getSIPEnabled(); + + if ($newSipEnabled === $oldSipEnabled) { + return; + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new SipConfigurationException(SipConfigurationException::REASON_BREAKOUT_ROOM); + } + + if (!in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + throw new SipConfigurationException(SipConfigurationException::REASON_TYPE); + } + + if (!in_array($newSipEnabled, [Webinary::SIP_ENABLED_NO_PIN, Webinary::SIP_ENABLED, Webinary::SIP_DISABLED], true)) { + throw new SipConfigurationException(SipConfigurationException::REASON_VALUE); + } + + if (preg_match(Room::SIP_INCOMPATIBLE_REGEX, $room->getToken())) { + throw new SipConfigurationException(SipConfigurationException::REASON_TOKEN); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_SIP_ENABLED, $newSipEnabled, $oldSipEnabled); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('sip_enabled', $update->createNamedParameter($newSipEnabled, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setSIPEnabled($newSipEnabled); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_SIP_ENABLED, $newSipEnabled, $oldSipEnabled); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @psalm-param RecordingService::CONSENT_REQUIRED_* $recordingConsent + * @throws RecordingConsentException When the room has an active call or the value is invalid + */ + public function setRecordingConsent(Room $room, int $recordingConsent, bool $allowUpdatingBreakoutRoomsAndFederatedRooms = false): void { + $oldRecordingConsent = $room->getRecordingConsent(); + + if ($recordingConsent === $oldRecordingConsent) { + return; + } + + if (!in_array($recordingConsent, [RecordingService::CONSENT_REQUIRED_NO, RecordingService::CONSENT_REQUIRED_YES], true)) { + throw new RecordingConsentException(RecordingConsentException::REASON_VALUE); + } + + if (!$allowUpdatingBreakoutRoomsAndFederatedRooms) { + if ($recordingConsent !== RecordingService::CONSENT_REQUIRED_NO && $room->getCallFlag() !== Participant::FLAG_DISCONNECTED) { + throw new RecordingConsentException(RecordingConsentException::REASON_CALL); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new RecordingConsentException(RecordingConsentException::REASON_BREAKOUT_ROOM); + } + + if ($room->getBreakoutRoomStatus() !== BreakoutRoom::STATUS_STOPPED) { + throw new RecordingConsentException(RecordingConsentException::REASON_BREAKOUT_ROOM); + } + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT, $recordingConsent, $oldRecordingConsent); + $this->dispatcher->dispatchTyped($event); + + $now = $this->timeFactory->getDateTime(); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('recording_consent', $update->createNamedParameter($recordingConsent, IQueryBuilder::PARAM_INT)) + ->set('last_activity', $update->createNamedParameter($now, IQueryBuilder::PARAM_DATE)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setRecordingConsent($recordingConsent); + $room->setLastActivity($now); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT, $recordingConsent, $oldRecordingConsent); + $this->dispatcher->dispatchTyped($event); + + // Update the recording consent for all rooms + if ($room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $room->getToken()); + foreach ($breakoutRooms as $breakoutRoom) { + $this->setRecordingConsent($breakoutRoom, $recordingConsent, true); + } + } + } + + /** + * @throws NameException + */ + public function setName(Room $room, string $newName, ?string $oldName = null, bool $validateType = false): void { + if ($validateType && ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER)) { + throw new NameException(NameException::REASON_TYPE); + } + + $newName = trim($newName); + $oldName = $oldName ?? $room->getName(); + if ($newName === $oldName) { + return; + } + + if ($newName === '' || mb_strlen($newName) > 255) { + throw new NameException(NameException::REASON_VALUE); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_NAME, $newName, $oldName); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('name', $update->createNamedParameter($newName)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setName($newName); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_NAME, $newName, $oldName); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @param int $newState Currently it is only allowed to change between + * `Webinary::LOBBY_NON_MODERATORS` and `Webinary::LOBBY_NONE` + * Also it's not allowed in one-to-one conversations, + * file conversations and password request conversations. + * @param \DateTime|null $dateTime + * @param bool $timerReached + * @param bool $dispatchEvents (Only skip if the room is created in the same PHP request) + * @throws LobbyException + */ + public function setLobby(Room $room, int $newState, ?\DateTime $dateTime, bool $timerReached = false, bool $dispatchEvents = true): void { + $oldState = $room->getLobbyState(false); + + if (!in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + throw new LobbyException(LobbyException::REASON_TYPE); + } + + if ($room->getObjectType() !== '' && !in_array($room->getObjectType(), [ + BreakoutRoom::PARENT_OBJECT_TYPE, + Room::OBJECT_TYPE_EMAIL, + Room::OBJECT_TYPE_EVENT, + Room::OBJECT_TYPE_EXTENDED_CONVERSATION, + Room::OBJECT_TYPE_INSTANT_MEETING, + ], true)) { + throw new LobbyException(LobbyException::REASON_OBJECT); + } + + if (!in_array($newState, [Webinary::LOBBY_NON_MODERATORS, Webinary::LOBBY_NONE], true)) { + throw new LobbyException(LobbyException::REASON_VALUE); + } + + if ($dispatchEvents) { + $event = new BeforeLobbyModifiedEvent($room, $newState, $oldState, $dateTime, $timerReached); + $this->dispatcher->dispatchTyped($event); + } + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('lobby_state', $update->createNamedParameter($newState, IQueryBuilder::PARAM_INT)) + ->set('lobby_timer', $update->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATE)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setLobbyState($newState); + $room->setLobbyTimer($dateTime); + + if ($dispatchEvents) { + $event = new LobbyModifiedEvent($room, $newState, $oldState, $dateTime, $timerReached); + $this->dispatcher->dispatchTyped($event); + } + } + + /** + * @throws AvatarException + */ + public function setAvatar(Room $room, string $avatar): void { + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new AvatarException(AvatarException::REASON_TYPE); + } + + $oldAvatar = $room->getAvatar(); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_AVATAR, $avatar, $oldAvatar); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('avatar', $update->createNamedParameter($avatar)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setAvatar($avatar); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_AVATAR, $avatar, $oldAvatar); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @psalm-param Room::RECORDING_* $status + * @param Participant|null $participant the Participant that changed the + * state, null for the current user + * @throws CallRecordingException + */ + public function setCallRecording(Room $room, int $status = Room::RECORDING_NONE, ?Participant $participant = null): void { + $syncFederatedRoom = $room->getRemoteServer() && $room->getRemoteToken(); + if (!$syncFederatedRoom && !$this->config->isRecordingEnabled() && $status !== Room::RECORDING_NONE) { + throw new CallRecordingException(CallRecordingException::REASON_CONFIG); + } + + $availableRecordingStatus = [Room::RECORDING_NONE, Room::RECORDING_VIDEO, Room::RECORDING_AUDIO, Room::RECORDING_VIDEO_STARTING, Room::RECORDING_AUDIO_STARTING, Room::RECORDING_FAILED]; + if (!in_array($status, $availableRecordingStatus, true)) { + throw new CallRecordingException(CallRecordingException::REASON_STATUS); + } + + $oldStatus = $room->getCallRecording(); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_CALL_RECORDING, $status, $oldStatus, $participant); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('call_recording', $update->createNamedParameter($status, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setCallRecording($status); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_CALL_RECORDING, $status, $oldStatus, $participant); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @param int $newType Currently it is only allowed to change between `Room::TYPE_GROUP` and `Room::TYPE_PUBLIC` + * @param bool $allowSwitchingOneToOne Allows additionally to change the type from `Room::TYPE_ONE_TO_ONE` to `Room::TYPE_ONE_TO_ONE_FORMER` + * @throws TypeException + */ + public function setType(Room $room, int $newType, bool $allowSwitchingOneToOne = false): void { + $oldType = $room->getType(); + if ($oldType === $newType) { + return; + } + + if (!$allowSwitchingOneToOne && $oldType === Room::TYPE_ONE_TO_ONE) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if ($oldType === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if ($oldType === Room::TYPE_NOTE_TO_SELF) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if (!in_array($newType, [Room::TYPE_GROUP, Room::TYPE_PUBLIC, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + throw new TypeException(TypeException::REASON_VALUE); + } + + if ($newType === Room::TYPE_ONE_TO_ONE_FORMER && $oldType !== Room::TYPE_ONE_TO_ONE) { + throw new TypeException(TypeException::REASON_VALUE); + } + + if ($room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new TypeException(TypeException::REASON_BREAKOUT_ROOM); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new TypeException(TypeException::REASON_BREAKOUT_ROOM); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_TYPE, $newType, $oldType); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('type', $update->createNamedParameter($newType, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setType($newType); + + if ($oldType === Room::TYPE_PUBLIC) { + // Kick all guests and users that were not invited + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_attendees') + ->where($delete->expr()->eq('room_id', $delete->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($delete->expr()->in('participant_type', $delete->createNamedParameter([Participant::GUEST, Participant::GUEST_MODERATOR, Participant::USER_SELF_JOINED], IQueryBuilder::PARAM_INT_ARRAY))); + $delete->executeStatement(); + } + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_TYPE, $newType, $oldType); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @throws PasswordException|TypeException + */ + public function makePublicWithPassword(Room $room, string $password): void { + if ($room->getType() === Room::TYPE_PUBLIC) { + return; + } + + if ($room->getType() !== Room::TYPE_GROUP) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if ($password === '') { + throw new PasswordException(PasswordException::REASON_VALUE, $this->l10n->t('Password needs to be set')); + } + + $event = new ValidatePasswordPolicyEvent($password); + try { + $this->dispatcher->dispatchTyped($event); + } catch (HintException $e) { + throw new PasswordException(PasswordException::REASON_VALUE, $e->getHint()); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_TYPE, Room::TYPE_PUBLIC, $room->getType()); + $this->dispatcher->dispatchTyped($event); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_PASSWORD, $password); + $this->dispatcher->dispatchTyped($event); + + $passwordHash = $this->hasher->hash($password); + $this->manager->setPublic($room->getId(), $passwordHash); + $room->setType(Room::TYPE_PUBLIC); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_TYPE, Room::TYPE_PUBLIC, $room->getType()); + $this->dispatcher->dispatchTyped($event); + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_PASSWORD, $password); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @param int $newState Currently it is only allowed to change between + * `Room::READ_ONLY` and `Room::READ_WRITE` + * Also it's only allowed on rooms of type + * `Room::TYPE_GROUP` and `Room::TYPE_PUBLIC` + * @throws ReadOnlyException + */ + public function setReadOnly(Room $room, int $newState): void { + $oldState = $room->getReadOnly(); + if ($newState === $oldState) { + return; + } + + if (!in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC, Room::TYPE_CHANGELOG], true)) { + if ($newState !== Room::READ_ONLY || $room->getType() !== Room::TYPE_ONE_TO_ONE_FORMER) { + // Allowed for the automated conversation of one-to-one chats to read only former + throw new ReadOnlyException(ReadOnlyException::REASON_TYPE); + } + } + + if (!in_array($newState, [Room::READ_ONLY, Room::READ_WRITE], true)) { + throw new ReadOnlyException(ReadOnlyException::REASON_VALUE); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_READ_ONLY, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('read_only', $update->createNamedParameter($newState, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setReadOnly($newState); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_READ_ONLY, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @param int $newState New listable scope from self::LISTABLE_* + * Also it's only allowed on rooms of type + * `Room::TYPE_GROUP` and `Room::TYPE_PUBLIC` + * @psalm-param Room::LISTABLE_* $newState + * @throws ListableException + */ + public function setListable(Room $room, int $newState): void { + $oldState = $room->getListable(); + if ($newState === $oldState) { + return; + } + + if (!in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + throw new ListableException(ListableException::REASON_TYPE); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new ListableException(ListableException::REASON_BREAKOUT_ROOM); + } + + if (!in_array($newState, [ + Room::LISTABLE_NONE, + Room::LISTABLE_USERS, + Room::LISTABLE_ALL, + ], true)) { + throw new ListableException(ListableException::REASON_VALUE); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_LISTABLE, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('listable', $update->createNamedParameter($newState, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setListable($newState); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_LISTABLE, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param Room $room + * @param int $newState New mention permissions from Room::MENTION_PERMISSIONS_* + * @psalm-param Room::MENTION_PERMISSIONS_* $newState + * @throws MentionPermissionsException + */ + public function setMentionPermissions(Room $room, int $newState): void { + $oldState = $room->getMentionPermissions(); + if ($newState === $oldState) { + return; + } + + if (!in_array($room->getType(), [Room::TYPE_GROUP, Room::TYPE_PUBLIC], true)) { + throw new MentionPermissionsException(MentionPermissionsException::REASON_TYPE); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new MentionPermissionsException(MentionPermissionsException::REASON_BREAKOUT_ROOM); + } + + if (!in_array($newState, [Room::MENTION_PERMISSIONS_EVERYONE, Room::MENTION_PERMISSIONS_MODERATORS], true)) { + throw new MentionPermissionsException(MentionPermissionsException::REASON_VALUE); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('mention_permissions', $update->createNamedParameter($newState, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setMentionPermissions($newState); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + } + + /** + * Set the ID of the language to use for live transcriptions in the given + * room. + * + * This method is not meant to be directly used; use + * "LiveTranscriptionService::setLanguage" instead, which only sets the + * language in the room if the external app is available and the language is + * valid. + * + * @param Room $room + * @param string $newState ID of the language to set + */ + public function setLiveTranscriptionLanguageId(Room $room, string $newState): void { + $oldState = $room->getLiveTranscriptionLanguageId(); + if ($newState === $oldState) { + return; + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_LIVE_TRANSCRIPTION_LANGUAGE_ID, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('transcription_language', $update->createNamedParameter($newState, IQueryBuilder::PARAM_STR)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setLiveTranscriptionLanguageId($newState); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_LIVE_TRANSCRIPTION_LANGUAGE_ID, $newState, $oldState); + $this->dispatcher->dispatchTyped($event); + } + + public function setAssignedSignalingServer(Room $room, ?int $signalingServer): bool { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('assigned_hpb', $update->createNamedParameter($signalingServer)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + + if ($signalingServer !== null) { + $update->andWhere($update->expr()->isNull('assigned_hpb')); + } + + $updated = (bool)$update->executeStatement(); + if ($updated) { + $room->setAssignedSignalingServer($signalingServer); + } + + return $updated; + } + + /** + * @throws DescriptionException + */ + public function setDescription(Room $room, string $description): void { + $description = trim($description); + + $oldDescription = $room->getDescription(); + if ($description === $oldDescription) { + return; + } + + if (mb_strlen($description) > Room::DESCRIPTION_MAXIMUM_LENGTH) { + throw new DescriptionException(DescriptionException::REASON_VALUE); + } + + if ($room->getType() === Room::TYPE_ONE_TO_ONE || $room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new DescriptionException(DescriptionException::REASON_TYPE); + } + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_DESCRIPTION, $description, $oldDescription); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('description', $update->createNamedParameter($description)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setDescription($description); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_DESCRIPTION, $description, $oldDescription); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param string $password Currently it is only allowed to have a password for Room::TYPE_PUBLIC + * @throws PasswordException + */ + public function setPassword(Room $room, string $password): void { + if ($room->getType() !== Room::TYPE_PUBLIC) { + throw new PasswordException(PasswordException::REASON_TYPE); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new PasswordException(PasswordException::REASON_BREAKOUT_ROOM); + } + + if ($password !== '') { + $event = new ValidatePasswordPolicyEvent($password); + try { + $this->dispatcher->dispatchTyped($event); + } catch (HintException $e) { + throw new PasswordException(PasswordException::REASON_VALUE, $e->getHint()); + } + } + + $hash = $password !== '' ? $this->hasher->hash($password) : ''; + + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_PASSWORD, $password); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('password', $update->createNamedParameter($hash)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setPassword($hash); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_PASSWORD, $password); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @return array{result: ?bool, url: string} + */ + public function verifyPassword(Room $room, string $password): array { + $event = new RoomPasswordVerifyEvent($room, $password); + $this->dispatcher->dispatchTyped($event); + + if ($event->isPasswordValid() !== null) { + return [ + 'result' => $event->isPasswordValid(), + 'url' => $event->getRedirectUrl(), + ]; + } + + return [ + 'result' => !$room->hasPassword() || $this->hasher->verify($password, $room->getPassword()), + 'url' => '', + ]; + } + + /** + * @throws MessageExpirationException When the room is a breakout room or the room is a former one-to-one conversation + */ + public function setMessageExpiration(Room $room, int $seconds): void { + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new MessageExpirationException(MessageExpirationException::REASON_BREAKOUT_ROOM); + } + + if ($room->getType() === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new MessageExpirationException(MessageExpirationException::REASON_TYPE); + } + + if ($seconds < 0) { + throw new MessageExpirationException(MessageExpirationException::REASON_VALUE); + } + + $oldExpiration = $room->getMessageExpiration(); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION, $seconds, $oldExpiration); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('message_expiration', $update->createNamedParameter($seconds, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setMessageExpiration($seconds); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION, $seconds, $oldExpiration); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @psalm-param BreakoutRoom::MODE_* $mode + * @throws BreakoutRoomModeException + */ + public function setBreakoutRoomMode(Room $room, int $mode): void { + if (!in_array($mode, [ + BreakoutRoom::MODE_NOT_CONFIGURED, + BreakoutRoom::MODE_AUTOMATIC, + BreakoutRoom::MODE_MANUAL, + BreakoutRoom::MODE_FREE + ], true)) { + throw new BreakoutRoomModeException(BreakoutRoomModeException::REASON_VALUE); + } + + $oldMode = $room->getBreakoutRoomMode(); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_MODE, $mode, $oldMode); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('breakout_room_mode', $update->createNamedParameter($mode, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setBreakoutRoomMode($mode); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_MODE, $mode, $oldMode); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @psalm-param BreakoutRoom::STATUS_* $status + * @throws BreakoutRoomStatusException + */ + public function setBreakoutRoomStatus(Room $room, int $status): void { + if (!in_array($status, [ + BreakoutRoom::STATUS_STOPPED, + BreakoutRoom::STATUS_STARTED, + BreakoutRoom::STATUS_ASSISTANCE_RESET, + BreakoutRoom::STATUS_ASSISTANCE_REQUESTED, + ], true)) { + throw new BreakoutRoomStatusException(BreakoutRoomStatusException::REASON_VALUE); + } + + $oldStatus = $room->getBreakoutRoomStatus(); + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_STATUS, $status, $oldStatus); + $this->dispatcher->dispatchTyped($event); + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('breakout_room_status', $update->createNamedParameter($status, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setBreakoutRoomStatus($status); + + $oldStatus = $room->getBreakoutRoomStatus(); + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_STATUS, $status, $oldStatus); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @internal Warning! Use with care, this is only used to make sure we win the race condition for posting the final messages + * when "End call for everyone" is used where we print the chat messages before testing the race condition, + * so that no other participant leaving would trigger a call summary + */ + public function resetActiveSinceInDatabaseOnly(Room $room): bool { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('active_since', $update->createNamedParameter(null, IQueryBuilder::PARAM_DATE)) + ->set('call_flag', $update->createNamedParameter(0, IQueryBuilder::PARAM_INT)) + ->set('call_permissions', $update->createNamedParameter(Attendee::PERMISSIONS_DEFAULT, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($update->expr()->isNotNull('active_since')); + + return (bool)$update->executeStatement(); + } + + /** + * @internal Warning! Must only be used after {@see preResetActiveSinceInDatabaseOnly()} + * was called and returned `true` + */ + public function resetActiveSinceInModelOnly(Room $room): void { + $room->resetActiveSince(); + } + + public function resetActiveSince(Room $room, ?Participant $participant): void { + $oldActiveSince = $room->getActiveSince(); + $oldCallFlag = $room->getCallFlag(); + + if ($oldActiveSince === null && $oldCallFlag === Participant::FLAG_DISCONNECTED) { + return; + } + + $event = new BeforeCallEndedEvent($room, $participant, $oldActiveSince); + $this->dispatcher->dispatchTyped($event); + + $result = $this->resetActiveSinceInDatabaseOnly($room); + $this->resetActiveSinceInModelOnly($room); + + if (!$result) { + // Lost the race, someone else updated the database + return; + } + + $event = new CallEndedEvent($room, $participant, $oldActiveSince); + $this->dispatcher->dispatchTyped($event); + } + + /** + * @param list $silentFor + */ + public function setActiveSince(Room $room, ?Participant $participant, \DateTime $since, int $callFlag, bool $silent, array $silentFor = []): bool { + $oldCallFlag = $room->getCallFlag(); + $callFlag |= $oldCallFlag; // Merge the callFlags, so events and response are with the best values + + if ($room->getActiveSince() instanceof \DateTime && $oldCallFlag === $callFlag) { + // Call flags of the conversation are unchanged and it's already marked active + return false; + } + + $details = []; + if ($room->getActiveSince() instanceof \DateTime) { + // Call is already active, just someone upgrading the call flags + $event = new BeforeRoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_IN_CALL, $callFlag, $oldCallFlag, $participant); + $this->dispatcher->dispatchTyped($event); + } else { + if ($silent) { + $details[AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT] = true; + } elseif (!empty($silentFor)) { + $details[AParticipantModifiedEvent::DETAIL_IN_CALL_SILENT_FOR] = $silentFor; + } + $event = new BeforeCallStartedEvent($room, $since, $callFlag, $details, $participant); + $this->dispatcher->dispatchTyped($event); + } + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set( + 'call_flag', + $update->expr()->bitwiseOr('call_flag', $callFlag) + ) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + if ($room->getActiveSince() instanceof \DateTime) { + // Call is already active, just someone upgrading the call flags + $room->setActiveSince($room->getActiveSince(), $callFlag); + + $event = new RoomModifiedEvent($room, ARoomModifiedEvent::PROPERTY_IN_CALL, $callFlag, $oldCallFlag); + $this->dispatcher->dispatchTyped($event); + + return false; + } + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('active_since', $update->createNamedParameter($since, IQueryBuilder::PARAM_DATE)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))) + ->andWhere($update->expr()->isNull('active_since')); + $result = (bool)$update->executeStatement(); + + $room->setActiveSince($since, $callFlag); + + if (!$result) { + // Lost the race, someone else updated the database + return false; + } + + $event = new CallStartedEvent($room, $since, $callFlag, $details, $participant); + $this->dispatcher->dispatchTyped($event); + + return true; + } + + public function setLastMessage(Room $room, IComment $message): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('last_message', $update->createNamedParameter((int)$message->getId())) + ->set('last_activity', $update->createNamedParameter($message->getCreationDateTime(), 'datetime')) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setLastMessage($message); + $room->setLastActivity($message->getCreationDateTime()); + } + + public function setLastMessageInfo(Room $room, int $messageId, \DateTime $dateTime): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('last_message', $update->createNamedParameter($messageId)) + ->set('last_activity', $update->createNamedParameter($dateTime, 'datetime')) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setLastMessageId($messageId); + $room->setLastActivity($dateTime); + } + + /** + * @psalm-param int-mask-of $hasFederation + */ + public function setHasFederation(Room $room, int $hasFederation): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('has_federation', $update->createNamedParameter($hasFederation, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setFederatedParticipants($hasFederation); + } + + public function setHasAttachments(Room $room): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('has_attachments', $update->createNamedParameter(Attachment::ATTACHMENTS_ATLEAST_ONE, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + } + + public function setLastActivity(Room $room, \DateTime $now): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('last_activity', $update->createNamedParameter($now, 'datetime')) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setLastActivity($now); + } + + /** + * @psalm-param TalkRoom $host + */ + public function syncPropertiesFromHostRoom(Room $local, array $host): void { + $event = new BeforeRoomSyncedEvent($local); + $this->dispatcher->dispatchTyped($event); + + /** @var array $changed */ + $changed = []; + if (isset($host['type']) && $host['type'] !== $local->getType()) { + try { + $this->setType($local, $host['type']); + $changed[] = ARoomModifiedEvent::PROPERTY_TYPE; + } catch (TypeException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync n type of ' . $local->getId() . ' to ' . $host['type'], ['exception' => $e]); + } + } + if (isset($host['name']) && $host['name'] !== $local->getName()) { + try { + $this->setName($local, $host['name'], $local->getName()); + $changed[] = ARoomModifiedEvent::PROPERTY_NAME; + } catch (NameException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync name of ' . $local->getId() . ' to ' . $host['name'], ['exception' => $e]); + } + } + if (isset($host['description']) && $host['description'] !== $local->getDescription()) { + try { + $this->setDescription($local, $host['description']); + $changed[] = ARoomModifiedEvent::PROPERTY_DESCRIPTION; + } catch (DescriptionException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync description of ' . $local->getId() . ' to ' . $host['description'], ['exception' => $e]); + } + } + if (isset($host['callRecording']) && $host['callRecording'] !== $local->getCallRecording()) { + try { + $this->setCallRecording($local, $host['callRecording']); + $changed[] = ARoomModifiedEvent::PROPERTY_CALL_RECORDING; + } catch (CallRecordingException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync callRecording of ' . $local->getId() . ' to ' . $host['callRecording'], ['exception' => $e]); + } + } + if (isset($host['defaultPermissions']) && $host['defaultPermissions'] !== $local->getDefaultPermissions()) { + try { + $this->setDefaultPermissions($local, $host['defaultPermissions']); + $changed[] = ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS; + } catch (DefaultPermissionsException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync defaultPermissions of ' . $local->getId() . ' to ' . $host['defaultPermissions'], ['exception' => $e]); + } + } + if (isset($host['avatarVersion']) && $host['avatarVersion'] !== $local->getAvatar()) { + $hostAvatar = $host['avatarVersion']; + if ($hostAvatar) { + // Add a fake suffix as we explode by the dot in the AvatarService, but the version doesn't have one. + $hostAvatar .= '.fed'; + } + try { + $this->setAvatar($local, $hostAvatar); + $changed[] = ARoomModifiedEvent::PROPERTY_AVATAR; + } catch (AvatarException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync avatarVersion of ' . $local->getId() . ' to ' . $host['avatarVersion'], ['exception' => $e]); + } + } + if (isset($host['lastActivity']) && $host['lastActivity'] !== 0 && $host['lastActivity'] !== ((int)$local->getLastActivity()?->getTimestamp())) { + $lastActivity = $this->timeFactory->getDateTime('@' . $host['lastActivity']); + $this->setLastActivity($local, $lastActivity); + $changed[] = ARoomSyncedEvent::PROPERTY_LAST_ACTIVITY; + } + if (isset($host['lobbyState'], $host['lobbyTimer']) && ($host['lobbyState'] !== $local->getLobbyState(false) || $host['lobbyTimer'] !== ((int)$local->getLobbyTimer(false)?->getTimestamp()))) { + $hostTimer = $host['lobbyTimer'] === 0 ? null : $this->timeFactory->getDateTime('@' . $host['lobbyTimer']); + try { + $this->setLobby($local, $host['lobbyState'], $hostTimer); + $changed[] = ARoomModifiedEvent::PROPERTY_LOBBY; + } catch (LobbyException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync lobby of ' . $local->getId() . ' to ' . $host['lobbyState'] . ' with timer to ' . $host['lobbyTimer'], ['exception' => $e]); + } + } + if (isset($host['callStartTime'], $host['callFlag'])) { + $localCallStartTime = (int)$local->getActiveSince()?->getTimestamp(); + if ($host['callStartTime'] === 0 && ($host['callStartTime'] !== $localCallStartTime || $host['callFlag'] !== $local->getCallFlag())) { + $this->resetActiveSince($local, null); + $changed[] = ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE; + $changed[] = ARoomModifiedEvent::PROPERTY_IN_CALL; + } elseif ($host['callStartTime'] !== 0 && ($host['callStartTime'] !== $localCallStartTime || $host['callFlag'] !== $local->getCallFlag())) { + $startDateTime = $this->timeFactory->getDateTime('@' . $host['callStartTime']); + $this->setActiveSince($local, null, $startDateTime, $host['callFlag'], true); + $changed[] = ARoomModifiedEvent::PROPERTY_ACTIVE_SINCE; + $changed[] = ARoomModifiedEvent::PROPERTY_IN_CALL; + } + } + if (isset($host['mentionPermissions']) && $host['mentionPermissions'] !== $local->getMentionPermissions()) { + try { + $this->setMentionPermissions($local, $host['mentionPermissions']); + $changed[] = ARoomModifiedEvent::PROPERTY_MENTION_PERMISSIONS; + } catch (MentionPermissionsException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync mentionPermissions of ' . $local->getId() . ' to ' . $host['mentionPermissions'], ['exception' => $e]); + } + } + if (isset($host['messageExpiration']) && $host['messageExpiration'] !== $local->getMessageExpiration()) { + try { + $this->setMessageExpiration($local, $host['messageExpiration']); + $changed[] = ARoomModifiedEvent::PROPERTY_MESSAGE_EXPIRATION; + } catch (MessageExpirationException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync messageExpiration of ' . $local->getId() . ' to ' . $host['messageExpiration'], ['exception' => $e]); + } + } + if (isset($host['readOnly']) && $host['readOnly'] !== $local->getReadOnly()) { + try { + $this->setReadOnly($local, $host['readOnly']); + $changed[] = ARoomModifiedEvent::PROPERTY_READ_ONLY; + } catch (ReadOnlyException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync readOnly of ' . $local->getId() . ' to ' . $host['readOnly'], ['exception' => $e]); + } + } + if (isset($host['recordingConsent']) && $host['recordingConsent'] !== $local->getRecordingConsent()) { + try { + $this->setRecordingConsent($local, $host['recordingConsent'], true); + $changed[] = ARoomModifiedEvent::PROPERTY_RECORDING_CONSENT; + } catch (RecordingConsentException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync recordingConsent of ' . $local->getId() . ' to ' . $host['recordingConsent'], ['exception' => $e]); + } + } + if (isset($host['sipEnabled']) && $host['sipEnabled'] !== $local->getSIPEnabled()) { + try { + $this->setSIPEnabled($local, $host['sipEnabled']); + $changed[] = ARoomModifiedEvent::PROPERTY_SIP_ENABLED; + } catch (SipConfigurationException $e) { + $this->logger->error('An error (' . $e->getReason() . ') occurred while trying to sync sipEnabled of ' . $local->getId() . ' to ' . $host['sipEnabled'], ['exception' => $e]); + } + } + + // Ignore for now, so the conversation is not found by other users on this federated participants server + // if (isset($host['listable']) && $host['listable'] !== $local->getListable()) { + // $success = $this->setListable($local, $host['listable']); + // if (!$success) { + // $this->logger->error('An error occurred while trying to sync listable of ' . $local->getId() . ' to ' . $host['listable']); + // } else { + // $changed[] = ARoomModifiedEvent::PROPERTY_LISTABLE; + // } + // } + + $event = new RoomSyncedEvent($local, $changed); + $this->dispatcher->dispatchTyped($event); + } + + public function deleteRoom(Room $room): void { + $event = new BeforeRoomDeletedEvent($room); + $this->dispatcher->dispatchTyped($event); + + // Delete all breakout rooms when deleting a parent room + if ($room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $room->getToken()); + foreach ($breakoutRooms as $breakoutRoom) { + $this->deleteRoom($breakoutRoom); + } + } + + if ($room->isFederatedConversation()) { + // Delete PCM messages + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_proxy_messages') + ->where($delete->expr()->eq('local_token', $delete->createNamedParameter($room->getToken()))); + $delete->executeStatement(); + } + + // Delete attendees + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_attendees') + ->where($delete->expr()->eq('room_id', $delete->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $delete->executeStatement(); + + // Delete room + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_rooms') + ->where($delete->expr()->eq('id', $delete->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $delete->executeStatement(); + + $event = new RoomDeletedEvent($room); + $this->dispatcher->dispatchTyped($event); + if (class_exists(CriticalActionPerformedEvent::class)) { + $this->dispatcher->dispatchTyped(new CriticalActionPerformedEvent( + 'Conversation "%s" deleted', + ['name' => $room->getName()], + )); + } + } + + /** + * @return list + */ + public function getInactiveRooms(\DateTime $inactiveSince): array { + return $this->manager->getInactiveRooms($inactiveSince); + } + + /** + * @param Room $room + * @param int $oldType + * @param int $newType + * @param bool $allowSwitchingOneToOne + * @return void + */ + public function validateRoomTypeSwitch(Room $room, int $oldType, int $newType, bool $allowSwitchingOneToOne): void { + if (!$allowSwitchingOneToOne && $oldType === Room::TYPE_ONE_TO_ONE) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if ($oldType === Room::TYPE_ONE_TO_ONE_FORMER) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if ($oldType === Room::TYPE_NOTE_TO_SELF) { + throw new TypeException(TypeException::REASON_TYPE); + } + + if (!in_array($newType, [Room::TYPE_GROUP, Room::TYPE_PUBLIC, Room::TYPE_ONE_TO_ONE_FORMER], true)) { + throw new TypeException(TypeException::REASON_VALUE); + } + + if ($newType === Room::TYPE_ONE_TO_ONE_FORMER && $oldType !== Room::TYPE_ONE_TO_ONE) { + throw new TypeException(TypeException::REASON_VALUE); + } + + if ($room->getBreakoutRoomMode() !== BreakoutRoom::MODE_NOT_CONFIGURED) { + throw new TypeException(TypeException::REASON_BREAKOUT_ROOM); + } + + if ($room->getObjectType() === BreakoutRoom::PARENT_OBJECT_TYPE) { + throw new TypeException(TypeException::REASON_BREAKOUT_ROOM); + } + } + + public function resetObject(Room $room): void { + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('object_type', $update->createNamedParameter('', IQueryBuilder::PARAM_STR)) + ->set('object_id', $update->createNamedParameter('', IQueryBuilder::PARAM_STR)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setObjectId(''); + $room->setObjectType(''); + } + + /** + * @psalm-param Room::OBJECT_TYPE_* $objectType + */ + public function setObject(Room $room, string $objectType, string $objectId): void { + if (($objectId !== '' && $objectType === '') || ($objectId === '' && $objectType !== '')) { + throw new InvalidRoomException('Object ID and Object Type must both be empty or both have values'); + } + + $update = $this->db->getQueryBuilder(); + $update->update('talk_rooms') + ->set('object_id', $update->createNamedParameter($objectId, IQueryBuilder::PARAM_STR)) + ->set('object_type', $update->createNamedParameter($objectType, IQueryBuilder::PARAM_STR)) + ->where($update->expr()->eq('id', $update->createNamedParameter($room->getId(), IQueryBuilder::PARAM_INT))); + $update->executeStatement(); + + $room->setObjectId($objectId); + $room->setObjectType($objectType); + } + + /** + * @param string $url + * @return string + */ + public function parseRoomTokenFromUrl(string $url): string { + // Check if room exists and check if user is part of room + $array = explode('/', $url); + $token = end($array); + // Cut off any excess characters from the room token + if (str_contains($token, '?')) { + $token = substr($token, 0, strpos($token, '?')); + } + if (str_contains($token, '#')) { + $token = substr($token, 0, strpos($token, '#')); + } + + if (!$token) { + throw new RoomNotFoundException(); + } + return $token; + } + + public function hasExistingCalendarEvents(Room $room, string $userId, string $eventUid) : bool { + $calendars = $this->calendarManager->getCalendarsForPrincipal('principals/users/' . $userId); + if (!empty($calendars)) { + $searchProperties = ['LOCATION']; + foreach ($calendars as $calendar) { + $searchResult = $calendar->search($room->getToken(), $searchProperties, [], 2); + foreach ($searchResult as $result) { + foreach ($result['objects'] as $object) { + if ($object['UID'][0] !== $eventUid) { + return true; + } + } + } + } + } + + return false; + } +} diff --git a/lib/Service/SIPDialOutService.php b/lib/Service/SIPDialOutService.php new file mode 100644 index 0000000..8a034d2 --- /dev/null +++ b/lib/Service/SIPDialOutService.php @@ -0,0 +1,74 @@ +getActorType() !== Attendee::ACTOR_PHONES) { + return null; + } + + $response = $this->backendNotifier->dialOutToAttendee($room, $attendee, $callerNumber); + if ($response === null) { + $this->logger->error('Received no response from signaling server on dialout request'); + return null; + } + try { + return $this->validateDialOutResponse($response); + } catch (\InvalidArgumentException $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + return null; + } + } + + /** + * @param string $response + * @return Response + * @throws \InvalidArgumentException + */ + protected function validateDialOutResponse(string $response): Response { + try { + $dialOutResponse = (new MapperBuilder()) + ->mapper() + ->map( + Response::class, + Source::json($response) + ->map([ + 'dialout' => 'dialOut', + 'dialout.callid' => 'callId', + ]) + ); + } catch (MappingError $e) { + throw new \InvalidArgumentException('Not a valid dial-out response', 0, $e); + } + + if ($dialOutResponse->dialOut === null) { + throw new \InvalidArgumentException('Not a valid dial-out response', 1); + } + + return $dialOutResponse; + } +} diff --git a/lib/Service/SampleConversationsService.php b/lib/Service/SampleConversationsService.php new file mode 100644 index 0000000..26faab5 --- /dev/null +++ b/lib/Service/SampleConversationsService.php @@ -0,0 +1,238 @@ +appConfig->getAppValueBool('create_samples', true)) { + return; + } + + $created = $this->config->getUserValue($userId, 'spreed', 'samples_created'); + if ($created !== '') { + return; + } + + $this->config->setUserValue($userId, 'spreed', 'samples_created', $this->timeFactory->now()->format(\DateTime::ATOM)); + + $user = $this->userManager->get($userId); + if (!$user instanceof IUser) { + throw new \InvalidArgumentException('User not found'); + } + + $sampleDirectory = $this->appConfig->getAppValueString('samples_directory'); + if ($sampleDirectory !== '') { + $this->logger->debug('Creating custom sample conversations for user ' . $userId . ' from ' . $sampleDirectory); + $this->customSampleConversations($user, $sampleDirectory); + } else { + $this->logger->debug('Creating default sample conversations for user ' . $userId); + $this->defaultSampleConversation($user); + } + } + + protected function defaultSampleConversation(IUser $user): void { + $room = $this->roomService->createConversation( + Room::TYPE_GROUP, + $this->l->t('Let\'s get started!'), + $user, + Room::OBJECT_TYPE_SAMPLE, + $user->getUID() + ); + + $this->avatarService->setAvatarFromEmoji($room, '💡', null); + + $this->roomService->setDescription($room, $this->l->t('**Nextcloud Talk** is a secure, self-hosted communication platform that integrates seamlessly with the Nextcloud ecosystem. + +#### Key Features of Nextcloud Talk: + +* Chat and messaging in private and group chats +* Voice and video calls +* File sharing and integration with other Nextcloud apps +* Customizable conversation settings, moderation and privacy controls +* Web, desktop and mobile (iOS and Android) +* Private & secure communication + + Find out more in the [user documentation](https://docs.nextcloud.com/server/latest/user_manual/en/talk/index.html).')); + + $messages = [ + $this->l->t('# Welcome to Nextcloud Talk + +Nextcloud Talk is a private and powerful messaging app that integrates with Nextcloud. Chat in private or group conversations, collaborate over voice and video calls, organize webinars and events, customize your conversations and more.'), + $this->l->t('## 🎨 Format texts to create rich messages + +In Nextcloud Talk, you can use Markdown syntax to format your messages. For example, apply **bold** or *italic* formatting, or `highlight texts as code`. You can even create tables and add headings to your text. + +Need to fix a typo or change formatting? Edit your message by clicking "Edit message" in the message menu.'), + $this->l->t('## 🔗 Add attachments and links + +Attach files from your Nextcloud Hub using the "+" button. Share items from Files and various Nextcloud apps. Some apps even support interactive widgets, for example, the Text app.') + . "\n\n" . '{FILE:Readme.md}', + $this->l->t('## 💭 Let the conversations flow: mention users, react to messages and more + +You can mention everybody in the conversation by using %s or mention specific participants by typing "@" and picking their name from the list.', ['@all']) + . "\n" . '{REACTION:😍}{REACTION:👍}', + '{REPLY}' . $this->l->t('You can reply to messages, forward them to other chats and people, or copy message content.'), + $this->l->t('## ✨ Do more with Smart Picker + +Simply type "/" or go to the "+" menu to open the Smart Picker where you can attach various content to your messages. You can configure the Smart Picker to be able to add items from Nextcloud apps, GIFs, map locations, AI generated content and much more.'), + $this->l->t('## ⚙️ Manage conversation settings + +In the conversation menu, you can access various settings to manage your conversations, such as: +* Edit conversation info +* Manage notifications +* Apply numerous moderation rules +* Configure access and security +* Enable bots +* and more!'), + ]; + + $this->fillConversation($user, $room, $messages); + } + + protected function fillConversation(IUser $user, Room $room, array $messages): void { + $userFolder = $this->rootFolder->getUserFolder($user->getUID()); + + $previous = null; + foreach ($messages as $message) { + $message = trim($message); + $replyTo = ''; + if (str_starts_with($message, '{REPLY}')) { + $message = trim(str_replace('{REPLY}', '', $message)); + $replyTo = $previous->getId(); + } + if (str_contains($message, '{FILE:')) { + preg_match_all('/{FILE:([^}]*)}/', $message, $matches); + foreach ($matches[1] as $match) { + try { + $node = $userFolder->get($match); + $message = str_replace('{FILE:' . $match . '}', $this->url->linkToRouteAbsolute( + 'files.view.showFile', ['fileid' => $node->getId()] + ), $message); + } catch (NotFoundException|NotPermittedException) { + $message = trim(str_replace('{FILE:' . $match . '}', '', $message)); + } + } + } + + $reactions = []; + if (str_contains($message, '{REACTION:')) { + preg_match_all('/{REACTION:([^}]*)}/', $message, $matches); + $reactions = $matches[1]; + $message = trim(preg_replace('/{REACTION:([^}]*)}/', '', $message)); + } + + $previous = $this->chatManager->postSampleMessage($room, $message, $replyTo); + + foreach ($reactions as $reaction) { + $this->reactionManager->addReactionMessage($room, Attendee::ACTOR_GUESTS, Attendee::ACTOR_ID_SAMPLE, '', (int)$previous->getId(), $reaction); + } + } + } + + protected function customSampleConversations(IUser $user, string $sampleDirectory): void { + $iterator = $this->l10nFactory->getLanguageIterator($user); + do { + $lang = $iterator->current(); + if (file_exists($sampleDirectory . '/' . $lang)) { + break; + } + $iterator->next(); + } while ($lang !== 'en' && $iterator->valid()); + + if (!file_exists($sampleDirectory . '/' . $lang)) { + return; + } + + $directory = new \DirectoryIterator($sampleDirectory . '/' . $lang); + foreach ($directory as $file) { + if ($file->isDot() || $file->getExtension() !== 'md') { + continue; + } + + $this->createSampleFromFile($user, $file->getPathname()); + } + } + + protected function createSampleFromFile(IUser $user, string $filePath): void { + $content = file_get_contents($filePath); + + $messages = explode("\n---\n", $content); + $detailsBlock = array_shift($messages); + $details = explode("\n", $detailsBlock); + + $name = $emoji = $color = null; + foreach ($details as $detail) { + if (str_starts_with($detail, 'NAME:')) { + $name = trim(substr($detail, strlen('NAME:'))); + } + if (str_starts_with($detail, 'EMOJI:')) { + $emoji = trim(substr($detail, strlen('EMOJI:'))); + } + if (str_starts_with($detail, 'COLOR:')) { + $color = substr(trim(substr($detail, strlen('COLOR:'))), 1); + } + } + + if ($name === null) { + $this->logger->error('Sample conversation ' . $filePath . ' has no name defined'); + return; + } + + $room = $this->roomService->createConversation(Room::TYPE_GROUP, $name, $user, Room::OBJECT_TYPE_SAMPLE, $user->getUID()); + if ($emoji !== null) { + $this->avatarService->setAvatarFromEmoji($room, $emoji, $color); + } + + if (isset($messages[0]) && str_starts_with($messages[0], 'DESCRIPTION:')) { + $description = array_shift($messages); + $this->roomService->setDescription($room, trim(substr($description, strlen('DESCRIPTION:')))); + } + + $this->fillConversation($user, $room, $messages); + } +} diff --git a/lib/Service/SessionService.php b/lib/Service/SessionService.php new file mode 100644 index 0000000..ccf69c9 --- /dev/null +++ b/lib/Service/SessionService.php @@ -0,0 +1,138 @@ +connection->getQueryBuilder(); + $update->update('talk_sessions') + ->set('last_ping', $update->createNamedParameter($lastPing, IQueryBuilder::PARAM_INT)) + ->where($update->expr()->in('session_id', $update->createNamedParameter($sessionIds, IQueryBuilder::PARAM_STR_ARRAY))); + + $update->executeStatement(); + } + + public function updateLastPing(Session $session, int $lastPing): void { + $session->setLastPing($lastPing); + $this->sessionMapper->update($session); + } + + /** + * @throws \InvalidArgumentException + */ + public function updateSessionState(Session $session, int $state): void { + if (!in_array($state, [Session::STATE_INACTIVE, Session::STATE_ACTIVE], true)) { + throw new \InvalidArgumentException('state'); + } + + $session->setState($state); + $this->sessionMapper->update($session); + } + + /** + * @param int[] $ids + */ + public function deleteSessionsById(array $ids): void { + $this->sessionMapper->deleteByIds($ids); + } + + /** + * @param Attendee $attendee + * @return Session[] + */ + public function getAllSessionsForAttendee(Attendee $attendee): array { + return $this->sessionMapper->findByAttendeeId($attendee->getId()); + } + + /** + * @param Attendee $attendee + * @param string $forceSessionId + * @return Session + * @throws Exception + */ + public function createSessionForAttendee(Attendee $attendee, string $forceSessionId = ''): Session { + $session = new Session(); + $session->setAttendeeId($attendee->getId()); + $session->setInCall(Participant::FLAG_DISCONNECTED); + $session->setLastPing($this->timeFactory->getTime()); + + if ($forceSessionId !== '') { + $session->setSessionId($forceSessionId); + $this->sessionMapper->insert($session); + } else { + while (true) { + $sessionId = $this->secureRandom->generate(255); + if (!empty($attendee->getInvitedCloudId())) { + $sessionId = $this->extendSessionIdWithCloudId($sessionId, $attendee->getInvitedCloudId()); + } + $session->setSessionId($sessionId); + try { + $this->sessionMapper->insert($session); + break; + } catch (Exception $e) { + // 255 chars are not unique? Try again... + if ($e->getReason() !== Exception::REASON_UNIQUE_CONSTRAINT_VIOLATION) { + throw $e; + } + } + } + } + + return $session; + } + + /** + * Adds the given cloud id to the given session id. + * + * The session id and the cloud id are separated by '#'. + * + * If the resulting session id is longer than the column length it is + * trimmed at the end as needed. + * + * @param string $sessionId + * @param string $invitedCloudId + * @return string + */ + public function extendSessionIdWithCloudId(string $sessionId, string $invitedCloudId): string { + // Session id column length is 512, while generated session ids are 255 + // characters. + $invitedCloudId = substr($invitedCloudId, 0, 256); + + return $sessionId . '#' . $invitedCloudId; + } +} diff --git a/lib/Service/ThreadService.php b/lib/Service/ThreadService.php new file mode 100644 index 0000000..433c612 --- /dev/null +++ b/lib/Service/ThreadService.php @@ -0,0 +1,285 @@ +cache = $this->cacheFactory->createDistributed('talk.threads'); + } + + public function createThread(Room $room, int $threadId, string $title): Thread { + if (mb_strlen($title) > 203) { + $title = mb_substr($title, 0, 200) . '…'; + } + $thread = new Thread(); + $thread->setId($threadId); + $thread->setName($title); + $thread->setRoomId($room->getId()); + $thread->setLastActivity($this->timeFactory->getDateTime()); + $thread = $this->threadMapper->insert($thread); + + $this->cache->set(self::CACHE_PREFIX . $room->getId() . '/' . $threadId, $thread->toJson(), 60 * 15); + + return $thread; + } + + /** + * @param non-negative-int $roomId + * @param non-negative-int $threadId + * @throws DoesNotExistException + */ + public function findByThreadId(int $roomId, int $threadId): Thread { + $row = $this->cache->get(self::CACHE_PREFIX . $roomId . '/' . $threadId); + if (!empty($row)) { + return Thread::fromJson($row); + } + + // We already looked for a thread with this id, and we didn't find anything + if ($row === '') { + throw new DoesNotExistException('No thread found'); + } + + try { + $thread = $this->threadMapper->findById($roomId, $threadId); + $this->cache->set(self::CACHE_PREFIX . $roomId . '/' . $threadId, $thread->toJson(), 60 * 15); + } catch (DoesNotExistException $e) { + $this->cache->set(self::CACHE_PREFIX . $roomId . '/' . $threadId, '', 60 * 15); + throw $e; + } + return $thread; + + } + + /** + * @param non-negative-int $roomId + * @param list $threadIds + * @return array Map with thread id as key + */ + public function findByThreadIds(int $roomId, array $threadIds): array { + $threads = $this->threadMapper->findByIds($roomId, $threadIds); + $result = []; + foreach ($threads as $thread) { + $result[$thread->getId()] = $thread; + } + return $result; + } + + /** + * @internal Warning: does not check room memberships + * @param list $threadIds + * @return array Map with room id as key + */ + public function preloadThreadsForConversationList(array $threadIds): array { + if (empty($threadIds)) { + return []; + } + $threads = $this->threadMapper->getForIds($threadIds); + $result = []; + foreach ($threads as $thread) { + $result[$thread->getRoomId()] = $thread; + } + return $result; + } + + /** + * @throws \InvalidArgumentException When the title is empty + */ + public function renameThread(Thread $thread, string $title): Thread { + if ($title === '') { + throw new \InvalidArgumentException('name'); + } + if (mb_strlen($title) > 203) { + $title = mb_substr($title, 0, 200) . '…'; + } + $thread->setName($title); + $this->threadMapper->update($thread); + + $this->cache->set(self::CACHE_PREFIX . $thread->getRoomId() . '/' . $thread->getId(), $thread->toJson(), 60 * 15); + return $thread; + } + + /** + * @param int<1, 50> $limit + * @return list + */ + public function getRecentByRoomId(Room $room, int $limit): array { + $limit = min(50, max(1, $limit)); + return $this->threadMapper->getRecentByRoomId($room->getId(), $limit); + } + + /** + * @param int<1, 100> $limit + * @param non-negative-int $offset + */ + public function getRecentByActor(string $actorType, string $actorId, int $limit, int $offset): array { + $limit = min(100, max(1, $limit)); + + $query = $this->connection->getQueryBuilder(); + $query->select('a.*', 't.last_message_id', 't.num_replies', 't.last_activity', 't.name') + ->selectAlias('t.id', 't_id') + ->from('talk_thread_attendees', 'a') + ->join('a', 'talk_threads', 't', $query->expr()->andX( + $query->expr()->eq('a.thread_id', 't.id'), + $query->expr()->eq('a.room_id', 't.room_id'), + )) + ->where($query->expr()->eq('a.actor_type', $query->createNamedParameter($actorType))) + ->andWhere($query->expr()->eq('a.actor_id', $query->createNamedParameter($actorId))) + ->andWhere($query->expr()->neq('a.notification_level', $query->createNamedParameter(Participant::NOTIFY_NEVER))) + // FIXME ORDER BY last_activity and subscription moment of the user for better sorting? + ->orderBy('t.last_activity', 'DESC') + ->setMaxResults($limit); + + if ($offset > 0) { + $query->setFirstResult($offset); + } + + $results = []; + $result = $query->executeQuery(); + while ($row = $result->fetch()) { + $roomId = (int)$row['room_id']; + $results[$roomId][] = [ + 'thread' => Thread::createFromRow($row), + 'attendee' => ThreadAttendee::createFromRow($row), + ]; + } + $result->closeCursor(); + + return $results; + } + + /** + * @param list $threadIds + * @return array Key is the thread id + */ + public function findAttendeeByThreadIds(Attendee $attendee, array $threadIds): array { + $attendees = $this->threadAttendeeMapper->findAttendeeByThreadIds($attendee->getActorType(), $attendee->getActorId(), $attendee->getRoomId(), $threadIds); + $threadAttendees = []; + foreach ($attendees as $threadAttendee) { + $threadAttendees[$threadAttendee->getThreadId()] = $threadAttendee; + } + + return $threadAttendees; + } + + /** + * @return array Key is the attendee id + */ + public function findAttendeesForNotificationByThreadId(int $roomId, int $threadId): array { + $attendees = $this->threadAttendeeMapper->findAttendeesForNotification($roomId, $threadId); + $threadAttendees = []; + foreach ($attendees as $threadAttendee) { + $threadAttendees[$threadAttendee->getAttendeeId()] = $threadAttendee; + } + + return $threadAttendees; + } + + public function setNotificationLevel(Attendee $attendee, int $threadId, int $level): ThreadAttendee { + try { + $threadAttendee = $this->threadAttendeeMapper->findAttendeeByThreadId($attendee->getActorType(), $attendee->getActorId(), $attendee->getRoomId(), $threadId); + $threadAttendee->setNotificationLevel($level); + $this->threadAttendeeMapper->update($threadAttendee); + } catch (DoesNotExistException) { + $threadAttendee = new ThreadAttendee(); + $threadAttendee->setThreadId($threadId); + $threadAttendee->setRoomId($attendee->getRoomId()); + + $threadAttendee->setAttendeeId($attendee->getId()); + $threadAttendee->setActorType($attendee->getActorType()); + $threadAttendee->setActorId($attendee->getActorId()); + $threadAttendee->setNotificationLevel($level); + $this->threadAttendeeMapper->insert($threadAttendee); + } + + return $threadAttendee; + } + + public function ensureIsThreadAttendee(Attendee $attendee, int $threadId): void { + try { + $this->threadAttendeeMapper->findAttendeeByThreadId($attendee->getActorType(), $attendee->getActorId(), $attendee->getRoomId(), $threadId); + } catch (DoesNotExistException) { + $threadAttendee = new ThreadAttendee(); + $threadAttendee->setThreadId($threadId); + $threadAttendee->setRoomId($attendee->getRoomId()); + + $threadAttendee->setAttendeeId($attendee->getId()); + $threadAttendee->setActorType($attendee->getActorType()); + $threadAttendee->setActorId($attendee->getActorId()); + $threadAttendee->setNotificationLevel(Participant::NOTIFY_DEFAULT); + $this->threadAttendeeMapper->insert($threadAttendee); + } + } + + /** + * Used e.g. when a user or group is removed from a conversation + * @param list $attendeeIds + */ + public function removeThreadAttendeesByAttendeeIds(array $attendeeIds): void { + $query = $this->connection->getQueryBuilder(); + $query->delete('talk_thread_attendees') + ->where($query->expr()->in( + 'attendee_id', + $query->createNamedParameter($attendeeIds, IQueryBuilder::PARAM_INT_ARRAY) + )); + $query->executeStatement(); + } + + public function updateLastMessageInfoAfterReply(int $threadId, int $lastMessageId, int $roomId): bool { + $dateTime = $this->timeFactory->getDateTime(); + + $query = $this->connection->getQueryBuilder(); + $query->update('talk_threads') + ->set('num_replies', $query->func()->add('num_replies', $query->expr()->literal(1))) + ->set('last_message_id', $query->createNamedParameter($lastMessageId)) + ->set('last_activity', $query->createNamedParameter($dateTime, IQueryBuilder::PARAM_DATETIME_MUTABLE)) + ->where($query->expr()->eq('id', $query->createNamedParameter($threadId))) + ->andWhere($query->expr()->eq('room_id', $query->createNamedParameter($roomId))); + $this->cache->remove(self::CACHE_PREFIX . $roomId . '/' . $threadId); + return (bool)$query->executeStatement(); + } + + public function deleteByRoom(Room $room): void { + $this->cache->clear(self::CACHE_PREFIX . $room->getId() . '/'); + $this->threadMapper->deleteByRoomId($room->getId()); + $this->threadAttendeeMapper->deleteByRoomId($room->getId()); + } + + public function validateThread(int $roomId, int $potentialThreadId): bool { + try { + $this->findByThreadId($roomId, $potentialThreadId); + return true; + } catch (DoesNotExistException) { + return false; + } + } +} diff --git a/lib/Settings/Admin/AdminSettings.php b/lib/Settings/Admin/AdminSettings.php new file mode 100644 index 0000000..3667587 --- /dev/null +++ b/lib/Settings/Admin/AdminSettings.php @@ -0,0 +1,540 @@ +currentUser = $userSession->getUser(); + } + + /** + * @return TemplateResponse + */ + #[\Override] + public function getForm(): TemplateResponse { + $this->initGeneralSettings(); + $this->initAllowedGroups(); + $this->initFederation(); + $this->initMatterbridge(); + $this->initStunServers(); + $this->initTurnServers(); + $this->initSignalingServers(); + $this->initRequestSignalingServerTrial(); + $this->initRecording(); + $this->initSIPBridge(); + + + Util::addScript('spreed', 'talk-admin-settings'); + Util::addStyle('spreed', 'talk-admin-settings'); + + return new TemplateResponse('spreed', 'settings/admin-settings', [], ''); + } + + protected function initGeneralSettings(): void { + $this->initialState->provideInitialState('default_group_notification', (int)$this->serverConfig->getAppValue('spreed', 'default_group_notification', (string)Participant::NOTIFY_MENTION)); + $this->initialState->provideInitialState('conversations_files', (int)$this->serverConfig->getAppValue('spreed', 'conversations_files', '1')); + $this->initialState->provideInitialState('conversations_files_public_shares', (int)$this->serverConfig->getAppValue('spreed', 'conversations_files_public_shares', '1')); + $this->initialState->provideInitialState('valid_apache_php_configuration', $this->validApachePHPConfiguration()); + } + + protected function initAllowedGroups(): void { + $this->initialState->provideInitialState('start_calls', (int)$this->serverConfig->getAppValue('spreed', 'start_calls', (string)Room::START_CALL_EVERYONE)); + + $groups = $this->getGroupDetailsArray($this->talkConfig->getAllowedConversationsGroupIds(), 'start_conversations'); + $this->initialState->provideInitialState('start_conversations', $groups); + + $groups = $this->getGroupDetailsArray($this->talkConfig->getAllowedTalkGroupIds(), 'allowed_groups'); + $this->initialState->provideInitialState('allowed_groups', $groups); + } + + protected function initFederation(): void { + $this->initialState->provideInitialState('federation_enabled', $this->talkConfig->isFederationEnabled()); + $this->initialState->provideInitialState('federation_incoming_enabled', $this->appConfig->getAppValueBool('federation_incoming_enabled', true)); + $this->initialState->provideInitialState('federation_outgoing_enabled', $this->appConfig->getAppValueBool('federation_outgoing_enabled', true)); + $this->initialState->provideInitialState('federation_only_trusted_servers', $this->appConfig->getAppValueBool('federation_only_trusted_servers')); + $this->initialState->provideInitialState('federation_allowed_groups', $this->appConfig->getAppValueArray('federation_allowed_groups')); + } + + protected function initMatterbridge(): void { + $error = ''; + try { + $version = (string)$this->bridgeManager->getCurrentVersionFromBinary(); + if ($version === '') { + $error = 'binary'; + } + } catch (WrongPermissionsException $e) { + $version = ''; + $error = 'binary_permissions'; + } + $this->initialState->provideInitialState( + 'matterbridge_error', $error + ); + $this->initialState->provideInitialState( + 'matterbridge_version', $version + ); + + $this->initialState->provideInitialState( + 'matterbridge_enable', + $this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1' + ); + } + + protected function initStunServers(): void { + $this->initialState->provideInitialState('stun_servers', $this->talkConfig->getStunServers()); + $this->initialState->provideInitialState('has_internet_connection', $this->serverConfig->getSystemValueBool('has_internet_connection', true)); + } + + protected function initTurnServers(): void { + $this->initialState->provideInitialState('turn_servers', $this->talkConfig->getTurnServers(false)); + } + + protected function initSignalingServers(): void { + $this->initialState->provideInitialState('has_valid_subscription', $this->subscription->delegateHasValidSubscription()); + $this->initialState->provideInitialState('has_cache_configured', $this->memcacheFactory->isAvailable()); + $this->initialState->provideInitialState('signaling_mode', $this->talkConfig->getSignalingMode(false)); + $this->initialState->provideInitialState('signaling_servers', [ + 'servers' => $this->talkConfig->getSignalingServers(), + 'secret' => $this->talkConfig->getSignalingSecret(), + 'hideWarning' => $this->talkConfig->getHideSignalingWarning(), + ]); + } + + protected function initRequestSignalingServerTrial(): void { + $countries = [ + ['code' => 'AD', 'name' => $this->l10n->t('Andorra')], + ['code' => 'AE', 'name' => $this->l10n->t('United Arab Emirates')], + ['code' => 'AF', 'name' => $this->l10n->t('Afghanistan')], + ['code' => 'AG', 'name' => $this->l10n->t('Antigua and Barbuda')], + ['code' => 'AI', 'name' => $this->l10n->t('Anguilla')], + ['code' => 'AL', 'name' => $this->l10n->t('Albania')], + ['code' => 'AM', 'name' => $this->l10n->t('Armenia')], + ['code' => 'AO', 'name' => $this->l10n->t('Angola')], + ['code' => 'AQ', 'name' => $this->l10n->t('Antarctica')], + ['code' => 'AR', 'name' => $this->l10n->t('Argentina')], + ['code' => 'AS', 'name' => $this->l10n->t('American Samoa')], + ['code' => 'AT', 'name' => $this->l10n->t('Austria')], + ['code' => 'AU', 'name' => $this->l10n->t('Australia')], + ['code' => 'AW', 'name' => $this->l10n->t('Aruba')], + ['code' => 'AX', 'name' => $this->l10n->t('Åland Islands')], + ['code' => 'AZ', 'name' => $this->l10n->t('Azerbaijan')], + ['code' => 'BA', 'name' => $this->l10n->t('Bosnia and Herzegovina')], + ['code' => 'BB', 'name' => $this->l10n->t('Barbados')], + ['code' => 'BD', 'name' => $this->l10n->t('Bangladesh')], + ['code' => 'BE', 'name' => $this->l10n->t('Belgium')], + ['code' => 'BF', 'name' => $this->l10n->t('Burkina Faso')], + ['code' => 'BG', 'name' => $this->l10n->t('Bulgaria')], + ['code' => 'BH', 'name' => $this->l10n->t('Bahrain')], + ['code' => 'BI', 'name' => $this->l10n->t('Burundi')], + ['code' => 'BJ', 'name' => $this->l10n->t('Benin')], + ['code' => 'BL', 'name' => $this->l10n->t('Saint Barthélemy')], + ['code' => 'BM', 'name' => $this->l10n->t('Bermuda')], + ['code' => 'BN', 'name' => $this->l10n->t('Brunei Darussalam')], + ['code' => 'BO', 'name' => $this->l10n->t('Bolivia, Plurinational State of')], + ['code' => 'BQ', 'name' => $this->l10n->t('Bonaire, Sint Eustatius and Saba')], + ['code' => 'BR', 'name' => $this->l10n->t('Brazil')], + ['code' => 'BS', 'name' => $this->l10n->t('Bahamas')], + ['code' => 'BT', 'name' => $this->l10n->t('Bhutan')], + ['code' => 'BV', 'name' => $this->l10n->t('Bouvet Island')], + ['code' => 'BW', 'name' => $this->l10n->t('Botswana')], + ['code' => 'BY', 'name' => $this->l10n->t('Belarus')], + ['code' => 'BZ', 'name' => $this->l10n->t('Belize')], + ['code' => 'CA', 'name' => $this->l10n->t('Canada')], + ['code' => 'CC', 'name' => $this->l10n->t('Cocos (Keeling) Islands')], + ['code' => 'CD', 'name' => $this->l10n->t('Congo, the Democratic Republic of the')], + ['code' => 'CF', 'name' => $this->l10n->t('Central African Republic')], + ['code' => 'CG', 'name' => $this->l10n->t('Congo')], + ['code' => 'CH', 'name' => $this->l10n->t('Switzerland')], + ['code' => 'CI', 'name' => $this->l10n->t('Côte d\'Ivoire')], + ['code' => 'CK', 'name' => $this->l10n->t('Cook Islands')], + ['code' => 'CL', 'name' => $this->l10n->t('Chile')], + ['code' => 'CM', 'name' => $this->l10n->t('Cameroon')], + ['code' => 'CN', 'name' => $this->l10n->t('China')], + ['code' => 'CO', 'name' => $this->l10n->t('Colombia')], + ['code' => 'CR', 'name' => $this->l10n->t('Costa Rica')], + ['code' => 'CU', 'name' => $this->l10n->t('Cuba')], + ['code' => 'CV', 'name' => $this->l10n->t('Cabo Verde')], + ['code' => 'CW', 'name' => $this->l10n->t('Curaçao')], + ['code' => 'CX', 'name' => $this->l10n->t('Christmas Island')], + ['code' => 'CY', 'name' => $this->l10n->t('Cyprus')], + ['code' => 'CZ', 'name' => $this->l10n->t('Czechia')], + ['code' => 'DE', 'name' => $this->l10n->t('Germany')], + ['code' => 'DJ', 'name' => $this->l10n->t('Djibouti')], + ['code' => 'DK', 'name' => $this->l10n->t('Denmark')], + ['code' => 'DM', 'name' => $this->l10n->t('Dominica')], + ['code' => 'DO', 'name' => $this->l10n->t('Dominican Republic')], + ['code' => 'DZ', 'name' => $this->l10n->t('Algeria')], + ['code' => 'EC', 'name' => $this->l10n->t('Ecuador')], + ['code' => 'EE', 'name' => $this->l10n->t('Estonia')], + ['code' => 'EG', 'name' => $this->l10n->t('Egypt')], + ['code' => 'EH', 'name' => $this->l10n->t('Western Sahara')], + ['code' => 'ER', 'name' => $this->l10n->t('Eritrea')], + ['code' => 'ES', 'name' => $this->l10n->t('Spain')], + ['code' => 'ET', 'name' => $this->l10n->t('Ethiopia')], + ['code' => 'FI', 'name' => $this->l10n->t('Finland')], + ['code' => 'FJ', 'name' => $this->l10n->t('Fiji')], + ['code' => 'FK', 'name' => $this->l10n->t('Falkland Islands (Malvinas)')], + ['code' => 'FM', 'name' => $this->l10n->t('Micronesia, Federated States of')], + ['code' => 'FO', 'name' => $this->l10n->t('Faroe Islands')], + ['code' => 'FR', 'name' => $this->l10n->t('France')], + ['code' => 'GA', 'name' => $this->l10n->t('Gabon')], + ['code' => 'GB', 'name' => $this->l10n->t('United Kingdom of Great Britain and Northern Ireland')], + ['code' => 'GD', 'name' => $this->l10n->t('Grenada')], + ['code' => 'GE', 'name' => $this->l10n->t('Georgia')], + ['code' => 'GF', 'name' => $this->l10n->t('French Guiana')], + ['code' => 'GG', 'name' => $this->l10n->t('Guernsey')], + ['code' => 'GH', 'name' => $this->l10n->t('Ghana')], + ['code' => 'GI', 'name' => $this->l10n->t('Gibraltar')], + ['code' => 'GL', 'name' => $this->l10n->t('Greenland')], + ['code' => 'GM', 'name' => $this->l10n->t('Gambia')], + ['code' => 'GN', 'name' => $this->l10n->t('Guinea')], + ['code' => 'GP', 'name' => $this->l10n->t('Guadeloupe')], + ['code' => 'GQ', 'name' => $this->l10n->t('Equatorial Guinea')], + ['code' => 'GR', 'name' => $this->l10n->t('Greece')], + ['code' => 'GS', 'name' => $this->l10n->t('South Georgia and the South Sandwich Islands')], + ['code' => 'GT', 'name' => $this->l10n->t('Guatemala')], + ['code' => 'GU', 'name' => $this->l10n->t('Guam')], + ['code' => 'GW', 'name' => $this->l10n->t('Guinea-Bissau')], + ['code' => 'GY', 'name' => $this->l10n->t('Guyana')], + ['code' => 'HK', 'name' => $this->l10n->t('Hong Kong')], + ['code' => 'HM', 'name' => $this->l10n->t('Heard Island and McDonald Islands')], + ['code' => 'HN', 'name' => $this->l10n->t('Honduras')], + ['code' => 'HR', 'name' => $this->l10n->t('Croatia')], + ['code' => 'HT', 'name' => $this->l10n->t('Haiti')], + ['code' => 'HU', 'name' => $this->l10n->t('Hungary')], + ['code' => 'ID', 'name' => $this->l10n->t('Indonesia')], + ['code' => 'IE', 'name' => $this->l10n->t('Ireland')], + ['code' => 'IL', 'name' => $this->l10n->t('Israel')], + ['code' => 'IM', 'name' => $this->l10n->t('Isle of Man')], + ['code' => 'IN', 'name' => $this->l10n->t('India')], + ['code' => 'IO', 'name' => $this->l10n->t('British Indian Ocean Territory')], + ['code' => 'IQ', 'name' => $this->l10n->t('Iraq')], + ['code' => 'IR', 'name' => $this->l10n->t('Iran, Islamic Republic of')], + ['code' => 'IS', 'name' => $this->l10n->t('Iceland')], + ['code' => 'IT', 'name' => $this->l10n->t('Italy')], + ['code' => 'JE', 'name' => $this->l10n->t('Jersey')], + ['code' => 'JM', 'name' => $this->l10n->t('Jamaica')], + ['code' => 'JO', 'name' => $this->l10n->t('Jordan')], + ['code' => 'JP', 'name' => $this->l10n->t('Japan')], + ['code' => 'KE', 'name' => $this->l10n->t('Kenya')], + ['code' => 'KG', 'name' => $this->l10n->t('Kyrgyzstan')], + ['code' => 'KH', 'name' => $this->l10n->t('Cambodia')], + ['code' => 'KI', 'name' => $this->l10n->t('Kiribati')], + ['code' => 'KM', 'name' => $this->l10n->t('Comoros')], + ['code' => 'KN', 'name' => $this->l10n->t('Saint Kitts and Nevis')], + ['code' => 'KP', 'name' => $this->l10n->t('Korea, Democratic People\'s Republic of')], + ['code' => 'KR', 'name' => $this->l10n->t('Korea, Republic of')], + ['code' => 'KW', 'name' => $this->l10n->t('Kuwait')], + ['code' => 'KY', 'name' => $this->l10n->t('Cayman Islands')], + ['code' => 'KZ', 'name' => $this->l10n->t('Kazakhstan')], + ['code' => 'LA', 'name' => $this->l10n->t('Lao People\'s Democratic Republic')], + ['code' => 'LB', 'name' => $this->l10n->t('Lebanon')], + ['code' => 'LC', 'name' => $this->l10n->t('Saint Lucia')], + ['code' => 'LI', 'name' => $this->l10n->t('Liechtenstein')], + ['code' => 'LK', 'name' => $this->l10n->t('Sri Lanka')], + ['code' => 'LR', 'name' => $this->l10n->t('Liberia')], + ['code' => 'LS', 'name' => $this->l10n->t('Lesotho')], + ['code' => 'LT', 'name' => $this->l10n->t('Lithuania')], + ['code' => 'LU', 'name' => $this->l10n->t('Luxembourg')], + ['code' => 'LV', 'name' => $this->l10n->t('Latvia')], + ['code' => 'LY', 'name' => $this->l10n->t('Libya')], + ['code' => 'MA', 'name' => $this->l10n->t('Morocco')], + ['code' => 'MC', 'name' => $this->l10n->t('Monaco')], + ['code' => 'MD', 'name' => $this->l10n->t('Moldova, Republic of')], + ['code' => 'ME', 'name' => $this->l10n->t('Montenegro')], + ['code' => 'MF', 'name' => $this->l10n->t('Saint Martin (French part)')], + ['code' => 'MG', 'name' => $this->l10n->t('Madagascar')], + ['code' => 'MH', 'name' => $this->l10n->t('Marshall Islands')], + ['code' => 'MK', 'name' => $this->l10n->t('North Macedonia')], + ['code' => 'ML', 'name' => $this->l10n->t('Mali')], + ['code' => 'MM', 'name' => $this->l10n->t('Myanmar')], + ['code' => 'MN', 'name' => $this->l10n->t('Mongolia')], + ['code' => 'MO', 'name' => $this->l10n->t('Macao')], + ['code' => 'MP', 'name' => $this->l10n->t('Northern Mariana Islands')], + ['code' => 'MQ', 'name' => $this->l10n->t('Martinique')], + ['code' => 'MR', 'name' => $this->l10n->t('Mauritania')], + ['code' => 'MS', 'name' => $this->l10n->t('Montserrat')], + ['code' => 'MT', 'name' => $this->l10n->t('Malta')], + ['code' => 'MU', 'name' => $this->l10n->t('Mauritius')], + ['code' => 'MV', 'name' => $this->l10n->t('Maldives')], + ['code' => 'MW', 'name' => $this->l10n->t('Malawi')], + ['code' => 'MX', 'name' => $this->l10n->t('Mexico')], + ['code' => 'MY', 'name' => $this->l10n->t('Malaysia')], + ['code' => 'MZ', 'name' => $this->l10n->t('Mozambique')], + ['code' => 'NA', 'name' => $this->l10n->t('Namibia')], + ['code' => 'NC', 'name' => $this->l10n->t('New Caledonia')], + ['code' => 'NE', 'name' => $this->l10n->t('Niger')], + ['code' => 'NF', 'name' => $this->l10n->t('Norfolk Island')], + ['code' => 'NG', 'name' => $this->l10n->t('Nigeria')], + ['code' => 'NI', 'name' => $this->l10n->t('Nicaragua')], + ['code' => 'NL', 'name' => $this->l10n->t('Netherlands')], + ['code' => 'NO', 'name' => $this->l10n->t('Norway')], + ['code' => 'NP', 'name' => $this->l10n->t('Nepal')], + ['code' => 'NR', 'name' => $this->l10n->t('Nauru')], + ['code' => 'NU', 'name' => $this->l10n->t('Niue')], + ['code' => 'NZ', 'name' => $this->l10n->t('New Zealand')], + ['code' => 'OM', 'name' => $this->l10n->t('Oman')], + ['code' => 'PA', 'name' => $this->l10n->t('Panama')], + ['code' => 'PE', 'name' => $this->l10n->t('Peru')], + ['code' => 'PF', 'name' => $this->l10n->t('French Polynesia')], + ['code' => 'PG', 'name' => $this->l10n->t('Papua New Guinea')], + ['code' => 'PH', 'name' => $this->l10n->t('Philippines')], + ['code' => 'PK', 'name' => $this->l10n->t('Pakistan')], + ['code' => 'PL', 'name' => $this->l10n->t('Poland')], + ['code' => 'PM', 'name' => $this->l10n->t('Saint Pierre and Miquelon')], + ['code' => 'PN', 'name' => $this->l10n->t('Pitcairn')], + ['code' => 'PR', 'name' => $this->l10n->t('Puerto Rico')], + ['code' => 'PS', 'name' => $this->l10n->t('Palestine, State of')], + ['code' => 'PT', 'name' => $this->l10n->t('Portugal')], + ['code' => 'PW', 'name' => $this->l10n->t('Palau')], + ['code' => 'PY', 'name' => $this->l10n->t('Paraguay')], + ['code' => 'QA', 'name' => $this->l10n->t('Qatar')], + ['code' => 'RE', 'name' => $this->l10n->t('Réunion')], + ['code' => 'RO', 'name' => $this->l10n->t('Romania')], + ['code' => 'RS', 'name' => $this->l10n->t('Serbia')], + ['code' => 'RU', 'name' => $this->l10n->t('Russian Federation')], + ['code' => 'RW', 'name' => $this->l10n->t('Rwanda')], + ['code' => 'SA', 'name' => $this->l10n->t('Saudi Arabia')], + ['code' => 'SB', 'name' => $this->l10n->t('Solomon Islands')], + ['code' => 'SC', 'name' => $this->l10n->t('Seychelles')], + ['code' => 'SD', 'name' => $this->l10n->t('Sudan')], + ['code' => 'SE', 'name' => $this->l10n->t('Sweden')], + ['code' => 'SG', 'name' => $this->l10n->t('Singapore')], + ['code' => 'SH', 'name' => $this->l10n->t('Saint Helena, Ascension and Tristan da Cunha')], + ['code' => 'SI', 'name' => $this->l10n->t('Slovenia')], + ['code' => 'SJ', 'name' => $this->l10n->t('Svalbard and Jan Mayen')], + ['code' => 'SK', 'name' => $this->l10n->t('Slovakia')], + ['code' => 'SL', 'name' => $this->l10n->t('Sierra Leone')], + ['code' => 'SM', 'name' => $this->l10n->t('San Marino')], + ['code' => 'SN', 'name' => $this->l10n->t('Senegal')], + ['code' => 'SO', 'name' => $this->l10n->t('Somalia')], + ['code' => 'SR', 'name' => $this->l10n->t('Suriname')], + ['code' => 'SS', 'name' => $this->l10n->t('South Sudan')], + ['code' => 'ST', 'name' => $this->l10n->t('Sao Tome and Principe')], + ['code' => 'SV', 'name' => $this->l10n->t('El Salvador')], + ['code' => 'SX', 'name' => $this->l10n->t('Sint Maarten (Dutch part)')], + ['code' => 'SY', 'name' => $this->l10n->t('Syrian Arab Republic')], + ['code' => 'SZ', 'name' => $this->l10n->t('Eswatini')], + ['code' => 'TC', 'name' => $this->l10n->t('Turks and Caicos Islands')], + ['code' => 'TD', 'name' => $this->l10n->t('Chad')], + ['code' => 'TF', 'name' => $this->l10n->t('French Southern Territories')], + ['code' => 'TG', 'name' => $this->l10n->t('Togo')], + ['code' => 'TH', 'name' => $this->l10n->t('Thailand')], + ['code' => 'TJ', 'name' => $this->l10n->t('Tajikistan')], + ['code' => 'TK', 'name' => $this->l10n->t('Tokelau')], + ['code' => 'TL', 'name' => $this->l10n->t('Timor-Leste')], + ['code' => 'TM', 'name' => $this->l10n->t('Turkmenistan')], + ['code' => 'TN', 'name' => $this->l10n->t('Tunisia')], + ['code' => 'TO', 'name' => $this->l10n->t('Tonga')], + ['code' => 'TR', 'name' => $this->l10n->t('Turkey')], + ['code' => 'TT', 'name' => $this->l10n->t('Trinidad and Tobago')], + ['code' => 'TV', 'name' => $this->l10n->t('Tuvalu')], + ['code' => 'TW', 'name' => $this->l10n->t('Taiwan, Province of China')], + ['code' => 'TZ', 'name' => $this->l10n->t('Tanzania, United Republic of')], + ['code' => 'UA', 'name' => $this->l10n->t('Ukraine')], + ['code' => 'UG', 'name' => $this->l10n->t('Uganda')], + ['code' => 'UM', 'name' => $this->l10n->t('United States Minor Outlying Islands')], + ['code' => 'US', 'name' => $this->l10n->t('United States of America')], + ['code' => 'UY', 'name' => $this->l10n->t('Uruguay')], + ['code' => 'UZ', 'name' => $this->l10n->t('Uzbekistan')], + ['code' => 'VA', 'name' => $this->l10n->t('Holy See')], + ['code' => 'VC', 'name' => $this->l10n->t('Saint Vincent and the Grenadines')], + ['code' => 'VE', 'name' => $this->l10n->t('Venezuela, Bolivarian Republic of')], + ['code' => 'VG', 'name' => $this->l10n->t('Virgin Islands, British')], + ['code' => 'VI', 'name' => $this->l10n->t('Virgin Islands, U.S.')], + ['code' => 'VN', 'name' => $this->l10n->t('Viet Nam')], + ['code' => 'VU', 'name' => $this->l10n->t('Vanuatu')], + ['code' => 'WF', 'name' => $this->l10n->t('Wallis and Futuna')], + ['code' => 'WS', 'name' => $this->l10n->t('Samoa')], + ['code' => 'YE', 'name' => $this->l10n->t('Yemen')], + ['code' => 'YT', 'name' => $this->l10n->t('Mayotte')], + ['code' => 'ZA', 'name' => $this->l10n->t('South Africa')], + ['code' => 'ZM', 'name' => $this->l10n->t('Zambia')], + ['code' => 'ZW', 'name' => $this->l10n->t('Zimbabwe')], + ]; + + $userLanguage = $this->serverConfig->getUserValue($this->currentUser->getUID(), 'core', 'lang', 'en'); + if ($userLanguage === 'de_DE') { // hardcode de_DE to de because this is a quirk in Nextcloud itself + $userLanguage = 'de'; + } + $userLocale = $this->serverConfig->getUserValue($this->currentUser->getUID(), 'core', 'locale', 'en_US'); + $guessCountry = 'US'; + if (str_contains($userLocale, '_')) { + $guessCountry = substr($userLocale, strrpos($userLocale, '_') + 1); + $correctGuess = false; + foreach ($countries as $country) { + if ($country['code'] === $guessCountry) { + $correctGuess = true; + break; + } + } + if (!$correctGuess) { + $guessCountry = 'US'; + } + } + + $this->initialState->provideInitialState('hosted_signaling_server_prefill', [ + 'url' => $this->serverConfig->getSystemValueString('overwrite.cli.url'), + 'fullName' => $this->currentUser->getDisplayName(), + 'email' => $this->currentUser->getEMailAddress() ?: '', + 'language' => $userLanguage, + 'country' => $guessCountry, + ]); + $this->initialState->provideInitialState('hosted_signaling_server_trial_data', + json_decode($this->serverConfig->getAppValue('spreed', 'hosted-signaling-server-account', '{}'), true) ?? [] + ); + $languages = $this->l10nFactory->getLanguages(); + foreach ($languages['commonLanguages'] as $key => $value) { + // remove "Deutsch (Formal)" + if ($value['code'] === 'de_DE') { + unset($languages['commonLanguages'][$key]); + } + // rename "Deutsch (Persönlich)" to "Deutsch" + if ($value['code'] === 'de') { + $languages['commonLanguages'][$key]['name'] = 'Deutsch'; + } + } + $languages['commonLanguages'] = array_values($languages['commonLanguages']); + // TODO maybe filter out languages with an _ + usort($countries, function (array $a, array $b) { + return strcmp($a['name'], $b['name']); + }); + $this->initialState->provideInitialState('hosted_signaling_server_language_data', [ + 'languages' => $languages, + 'countries' => $countries, + ]); + } + + protected function initRecording(): void { + $uploadLimit = Util::uploadLimit(); + $this->initialState->provideInitialState('recording_servers', [ + 'servers' => $this->talkConfig->getRecordingServers(), + 'secret' => $this->talkConfig->getRecordingSecret(), + 'uploadLimit' => is_infinite($uploadLimit) ? 0 : $uploadLimit, + ]); + $this->initialState->provideInitialState('recording_consent', $this->talkConfig->getRecordingConsentConfig()); + $this->initialState->provideInitialState('call_recording_transcription', $this->serverConfig->getAppValue('spreed', 'call_recording_transcription', 'no') === 'yes'); + $this->initialState->provideInitialState('call_recording_summary', $this->serverConfig->getAppValue('spreed', 'call_recording_summary', 'yes') === 'yes'); + } + + protected function initSIPBridge(): void { + $groups = $this->getGroupDetailsArray($this->talkConfig->getSIPGroups(), 'sip_bridge_groups'); + + $this->initialState->provideInitialState('sip_bridge_groups', $groups); + $this->initialState->provideInitialState('sip_bridge_shared_secret', $this->talkConfig->getSIPSharedSecret()); + $this->initialState->provideInitialState('sip_bridge_dialin_info', $this->talkConfig->getDialInInfo()); + $this->initialState->provideInitialState('sip_bridge_dialout', $this->talkConfig->isSIPDialOutEnabled()); + $this->initialState->provideInitialState('sip_bridge_dialout_anonymous', $this->appConfig->getAppValueBool('sip_bridge_dialout_anonymous')); + $this->initialState->provideInitialState('sip_bridge_dialout_number', $this->serverConfig->getAppValue('spreed', 'sip_bridge_dialout_number', '')); + $this->initialState->provideInitialState('sip_bridge_dialout_prefix', $this->serverConfig->getAppValue('spreed', 'sip_bridge_dialout_prefix', '+')); + } + + protected function getGroupDetailsArray(array $gids, string $configKey): array { + $groups = []; + foreach ($gids as $gid) { + $group = $this->groupManager->get($gid); + if ($group instanceof IGroup) { + $groups[] = [ + 'id' => $group->getGID(), + 'displayname' => $group->getDisplayName(), + ]; + } + } + + if (count($gids) !== count($groups)) { + $gids = array_map(static function (array $group) { + return $group['id']; + }, $groups); + $this->serverConfig->setAppValue('spreed', $configKey, json_encode($gids)); + } + + return $groups; + } + + protected function validApachePHPConfiguration(): string { + if (!function_exists('exec')) { + return 'unknown'; + } + + $output = []; + try { + @exec('apachectl -V | grep MPM', $output, $returnCode); + } catch (\Throwable $e) { + return 'unknown'; + } + + if ($returnCode > 0) { + return 'unknown'; + } + + $apacheModule = implode("\n", $output); + $usingFPM = ini_get('fpm.config') !== false; + + if ($usingFPM) { + // Needs to use mpm_event + return str_contains($apacheModule, 'event') ? '' : 'invalid'; + } + + // Needs to use mpm_prefork + return str_contains($apacheModule, 'prefork') ? '' : 'invalid'; + } + + /** + * @return string the section ID, e.g. 'sharing' + */ + #[\Override] + public function getSection(): string { + return 'talk'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + */ + #[\Override] + public function getPriority(): int { + return 0; + } +} diff --git a/lib/Settings/Admin/Section.php b/lib/Settings/Admin/Section.php new file mode 100644 index 0000000..9627b48 --- /dev/null +++ b/lib/Settings/Admin/Section.php @@ -0,0 +1,71 @@ +url->imagePath('spreed', 'app-dark.svg'); + } + + /** + * returns the ID of the section. It is supposed to be a lower case string, + * e.g. 'ldap' + * + * @returns string + * @since 9.1 + */ + #[\Override] + public function getID(): string { + return 'talk'; + } + + /** + * returns the translated name as it should be displayed, e.g. 'LDAP / AD + * integration'. Use the L10N service to translate it. + * + * @return string + * @since 9.1 + */ + #[\Override] + public function getName(): string { + return $this->l->t('Talk'); + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the settings navigation. The sections are arranged in ascending order of + * the priority values. It is required to return a value between 0 and 99. + * + * E.g.: 70 + * @since 9.1 + */ + #[\Override] + public function getPriority(): int { + return 70; + } +} diff --git a/lib/Settings/BeforePreferenceSetEventListener.php b/lib/Settings/BeforePreferenceSetEventListener.php new file mode 100644 index 0000000..f228bae --- /dev/null +++ b/lib/Settings/BeforePreferenceSetEventListener.php @@ -0,0 +1,108 @@ + + */ +class BeforePreferenceSetEventListener implements IEventListener { + public function __construct( + protected IRootFolder $rootFolder, + protected ParticipantService $participantService, + protected LoggerInterface $logger, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if (!($event instanceof BeforePreferenceSetEvent)) { + // Unrelated + return; + } + + if ($event->getAppId() !== Application::APP_ID) { + return; + } + + $event->setValid($this->validatePreference( + $event->getUserId(), + $event->getConfigKey(), + $event->getConfigValue(), + )); + } + + /** + * @internal Make private/protected once SettingsController route was removed + */ + public function validatePreference(string $userId, string $key, string|int|null $value): bool { + if ($key === UserPreference::ATTACHMENT_FOLDER) { + return $this->validateAttachmentFolder($userId, $value); + } + + // "boolean" yes/no + if ($key === UserPreference::CALLS_START_WITHOUT_MEDIA + || $key === UserPreference::PLAY_SOUNDS + || $key === UserPreference::BLUR_VIRTUAL_BACKGROUND) { + return $value === 'yes' || $value === 'no'; + } + + // "privacy" 0/1 + if ($key === UserPreference::TYPING_PRIVACY + || $key === UserPreference::READ_STATUS_PRIVACY) { + $valid = is_numeric($value) && ((int)$value === Participant::PRIVACY_PRIVATE || (int)$value === Participant::PRIVACY_PUBLIC); + + if ($valid && $key === UserPreference::READ_STATUS_PRIVACY) { + $this->participantService->updateReadPrivacyForActor(Attendee::ACTOR_USERS, $userId, (int)$value); + } + return $valid; + } + + // "list-style" 'two-lines' / 'compact' + if ($key === UserPreference::CONVERSATIONS_LIST_STYLE) { + return $value === UserPreference::CONVERSATION_LIST_STYLE_TWO_LINES || $value === UserPreference::CONVERSATION_LIST_STYLE_COMPACT; + } + + return false; + } + + protected function validateAttachmentFolder(string $userId, string $value): bool { + try { + $userFolder = $this->rootFolder->getUserFolder($userId); + $node = $userFolder->get($value); + if (!$node instanceof Folder) { + throw new NotPermittedException('Node is not a directory'); + } + if ($node->isShared()) { + throw new NotPermittedException('Folder is shared'); + } + return !$node->getStorage()->instanceOfStorage(SharedStorage::class); + } catch (NotFoundException) { + $userFolder->newFolder($value); + return true; + } catch (NotPermittedException) { + } catch (\Exception $e) { + $this->logger->error($e->getMessage(), ['exception' => $e]); + } + return false; + } +} diff --git a/lib/Settings/Personal.php b/lib/Settings/Personal.php new file mode 100644 index 0000000..733d6c6 --- /dev/null +++ b/lib/Settings/Personal.php @@ -0,0 +1,66 @@ + $this->getClientLinks() ]; + return new TemplateResponse('spreed', 'settings/personal/clients', $parameters); + } + + /** + * @return string the section ID, e.g. 'sharing' + * @since 9.1 + */ + #[\Override] + public function getSection(): string { + return 'sync-clients'; + } + + /** + * @return int whether the form should be rather on the top or bottom of + * the admin section. The forms are arranged in ascending order of the + * priority values. It is required to return a value between 0 and 100. + * + * E.g.: 70 + * @since 9.1 + */ + #[\Override] + public function getPriority(): int { + return 30; + } + + /** + * returns an array containing links to the various clients + * + * @return array + */ + private function getClientLinks(): array { + $clients = [ + 'android' => $this->config->getSystemValue('talk_customclient_android', 'https://play.google.com/store/apps/details?id=com.nextcloud.talk2'), + 'ios' => $this->config->getSystemValue('talk_customclient_ios', 'https://geo.itunes.apple.com/us/app/nextcloud-talk/id1296825574') + ]; + return $clients; + } +} diff --git a/lib/Settings/UserPreference.php b/lib/Settings/UserPreference.php new file mode 100644 index 0000000..ab5d959 --- /dev/null +++ b/lib/Settings/UserPreference.php @@ -0,0 +1,23 @@ +l10n->t('Background blur'); + } + + #[\Override] + public function run(): SetupResult { + $url = $this->urlGenerator->linkTo('spreed', 'js/vision_wasm_internal.wasm'); + $noResponse = true; + $responses = $this->runRequest('HEAD', $url); + foreach ($responses as $response) { + $noResponse = false; + if ($response->getStatusCode() === 200) { + return SetupResult::success(); + } + } + + if ($noResponse) { + return SetupResult::info( + $this->l10n->t('Could not check for WASM loading support. Please check manually if your web server serves `.wasm` files.') . "\n" . $this->serverConfigHelp(), + $this->urlGenerator->linkToDocs('admin-nginx'), + ); + } + return SetupResult::warning( + $this->l10n->t('Your web server is not properly set up to deliver `.wasm` files. This is typically an issue with the Nginx configuration. For background blur it needs an adjustment to also deliver `.wasm` files. Compare your Nginx configuration to the recommended configuration in our documentation.'), + $this->urlGenerator->linkToDocs('admin-nginx'), + ); + + } +} diff --git a/lib/SetupCheck/Configuration.php b/lib/SetupCheck/Configuration.php new file mode 100644 index 0000000..9a8518f --- /dev/null +++ b/lib/SetupCheck/Configuration.php @@ -0,0 +1,58 @@ +l10n->t('Talk configuration values'); + } + + #[\Override] + public function run(): SetupResult { + $errors = $warnings = []; + $maxCallDuration = $this->appConfig->getAppValueInt('max_call_duration'); + if ($maxCallDuration > 0) { + if ($this->config->getAppValue('core', 'backgroundjobs_mode', 'ajax') !== 'cron') { + $errors[] = $this->l10n->t('Forcing a call duration is only supported with system cron. Please enable system cron or remove the `max_call_duration` configuration.'); + } elseif ($maxCallDuration < 3600) { + $warnings[] = $this->l10n->t('Small `max_call_duration` values (currently set to %d) are not enforceable due to technical limitations. The background job is only executed every 5 minutes, so use at own risk.', [$maxCallDuration]); + } + } + + if (!empty($errors)) { + return SetupResult::error(implode("\n", $errors)); + } + if (!empty($warnings)) { + return SetupResult::warning(implode("\n", $warnings)); + } + return SetupResult::success(); + } +} diff --git a/lib/SetupCheck/FederationLockCache.php b/lib/SetupCheck/FederationLockCache.php new file mode 100644 index 0000000..1231a52 --- /dev/null +++ b/lib/SetupCheck/FederationLockCache.php @@ -0,0 +1,51 @@ +l->t('Federation'); + } + + #[\Override] + public function run(): SetupResult { + if (!$this->talkConfig->isFederationEnabled()) { + return SetupResult::success(); + } + if (!$this->cacheFactory->createLocking('talkroom_') instanceof NullCache) { + return SetupResult::success(); + } + return SetupResult::warning( + $this->l->t('It is highly recommended to configure "memcache.locking" when Talk Federation is enabled.'), + $this->urlGenerator->linkToDocs('admin-cache'), + ); + } +} diff --git a/lib/SetupCheck/HighPerformanceBackend.php b/lib/SetupCheck/HighPerformanceBackend.php new file mode 100644 index 0000000..fd2cd1b --- /dev/null +++ b/lib/SetupCheck/HighPerformanceBackend.php @@ -0,0 +1,145 @@ +l->t('High-performance backend'); + } + + #[\Override] + public function run(): SetupResult { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + $setupResult = SetupResult::error(...); + if ($this->talkConfig->getHideSignalingWarning()) { + $setupResult = SetupResult::info(...); + } + $documentation = 'https://nextcloud-talk.readthedocs.io/en/latest/quick-install/'; + if ($this->subscription->delegateHasValidSubscription()) { + $documentation = 'https://portal.nextcloud.com/article/Nextcloud-Talk/High-Performance-Backend/Installation-of-Nextcloud-Talk-High-Performance-Backend'; + } + + return $setupResult( + $this->l->t('No High-performance backend configured - Running Nextcloud Talk without the High-performance backend only scales for very small calls (max. 2-3 participants). Please set up the High-performance backend to ensure calls with multiple participants work seamlessly.'), + $documentation, + ); + } + + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_CLUSTER_CONVERSATION) { + return SetupResult::warning( + $this->l->t('Running the High-performance backend "conversation_cluster" mode is deprecated and will no longer be supported in the upcoming version. The High-performance backend supports real clustering nowadays which should be used instead.'), + 'https://portal.nextcloud.com/article/Partner-Products/Talk-High-Performance-Backend/Nextcloud-Talk-High-Performance-Back-End-Requirements#content-clustering-and-use-of-multiple-hpbs', + ); + } + + if (count($this->talkConfig->getSignalingServers()) > 1) { + return SetupResult::warning( + $this->l->t('Defining multiple High-performance backends is deprecated and will no longer be supported in the upcoming version. Instead a load-balancer should be set up together with clustered signaling servers and configured in the Talk settings.'), + 'https://portal.nextcloud.com/article/Partner-Products/Talk-High-Performance-Backend/Nextcloud-Talk-High-Performance-Back-End-Requirements#content-clustering-and-use-of-multiple-hpbs', + ); + } + + // Verify stored signaling key pair + try { + $alg = $this->talkConfig->getSignalingTokenAlgorithm(); + $privateKey = $this->talkConfig->getSignalingTokenPrivateKey(); + $publicKey = $this->talkConfig->getSignalingTokenPublicKey(); + $publicKeyDerived = $this->talkConfig->deriveSignalingTokenPublicKey($privateKey, $alg); + + if ($publicKey !== $publicKeyDerived) { + return SetupResult::error($this->l->t('The stored public key for used algorithm %1$s does not match the stored private key. Run %2$s to fix the issue.', [$alg, '`occ talk:signaling:verify-keys --update`'])); + } + } catch (\Exception $e) { + $this->logger->error('An error occurred while verifying the public key of the signaling token', ['exception' => $e]); + return SetupResult::error($this->l->t('High-performance backend not configured correctly. Run %s for details.', ['`occ talk:signaling:verify-keys`'])); + } + + try { + $testResult = $this->signalManager->checkServerCompatibility(0); + } catch (\OutOfBoundsException) { + return SetupResult::error($this->l->t('High-performance backend not configured correctly')); + } + if ($testResult['status'] === Http::STATUS_INTERNAL_SERVER_ERROR) { + $error = $testResult['data']['error']; + if ($error === 'CAN_NOT_CONNECT') { + return SetupResult::error($this->l->t('Error: Cannot connect to server')); + } + if ($error === 'JSON_INVALID') { + return SetupResult::error($this->l->t('Error: Server did not respond with proper JSON')); + } + if ($error === 'CERTIFICATE_EXPIRED') { + return SetupResult::error($this->l->t('Error: Certificate expired')); + } + if ($error === 'TIME_OUT_OF_SYNC') { + return SetupResult::error($this->l->t('Error: System times of Nextcloud server and High-performance backend server are out of sync. Please make sure that both servers are connected to a time-server or manually synchronize their time.')); + } + if ($error === 'UPDATE_REQUIRED') { + $version = $testResult['data']['version'] ?? $this->l->t('Could not get version'); + return SetupResult::error(str_replace( + '{version}', + $version, + $this->l->t('Error: Running version: {version}; Server needs to be updated to be compatible with this version of Talk'), + )); + } + if ($error) { + return SetupResult::error(str_replace('{error}', $error, $this->l->t('Error: Server responded with: {error}'))); + } + return SetupResult::error($this->l->t('Error: Unknown error occurred')); + } + if ($testResult['status'] === Http::STATUS_OK + && isset($testResult['data']['warning']) + && $testResult['data']['warning'] === 'UPDATE_OPTIONAL' + ) { + $version = $testResult['data']['version'] ?? $this->l->t('Could not get version'); + $features = implode(', ', $testResult['data']['features'] ?? []); + return SetupResult::warning(str_replace( + ['{version}', '{features}'], + [$version, $features], + $this->l->t('Warning: Running version: {version}; Server does not support all features of this Talk version, missing features: {features}') + )); + } + + if (!$this->cacheFactory->isAvailable()) { + return SetupResult::warning( + $this->l->t('It is highly recommended to configure a memory cache when running Nextcloud Talk with a High-performance backend.'), + $this->urlGenerator->linkToDocs('admin-cache'), + ); + } + + return SetupResult::success(); + } +} diff --git a/lib/SetupCheck/NotifyPush.php b/lib/SetupCheck/NotifyPush.php new file mode 100644 index 0000000..166c35f --- /dev/null +++ b/lib/SetupCheck/NotifyPush.php @@ -0,0 +1,55 @@ +l10n->t('Client Push'); // TRANSLATORS: this is the app name of the notify_push app. + } + + #[\Override] + public function getCategory(): string { + return 'talk'; + } + + #[\Override] + public function run(): SetupResult { + if ($this->appManager->isEnabledForAnyone('notify_push')) { + return SetupResult::success( + $this->l10n->t('Client Push is installed, this improves the performance of desktop clients.') + ); + } + + return SetupResult::warning( + $this->l10n->t('{notify_push} is not installed, this might lead to performance issues when using desktop clients.'), + 'https://github.com/nextcloud/notify_push/blob/main/README.md', + [ + 'notify_push' => [ + 'id' => 'notify_push', + 'name' => $this->getName(), + 'type' => 'app', + ], + ], + ); + } +} diff --git a/lib/SetupCheck/RecordingBackend.php b/lib/SetupCheck/RecordingBackend.php new file mode 100644 index 0000000..1eb60f3 --- /dev/null +++ b/lib/SetupCheck/RecordingBackend.php @@ -0,0 +1,47 @@ +l->t('Recording backend'); + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return '[skip] ' . $name; + } + return $name; + } + + #[\Override] + public function run(): SetupResult { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return SetupResult::success($this->l->t('Using the recording backend requires a High-performance backend.')); + } + if (empty($this->talkConfig->getRecordingServers())) { + return SetupResult::info($this->l->t('No recording backend configured')); + } + return SetupResult::success(); + } +} diff --git a/lib/SetupCheck/SIPConfiguration.php b/lib/SetupCheck/SIPConfiguration.php new file mode 100644 index 0000000..d3f062d --- /dev/null +++ b/lib/SetupCheck/SIPConfiguration.php @@ -0,0 +1,75 @@ +l->t('SIP configuration'); + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return '[skip] ' . $name; + } + return $name; + } + + #[\Override] + public function run(): SetupResult { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return SetupResult::success($this->l->t('Using the SIP functionality requires a High-performance backend.')); + } + + $query = $this->connection->getQueryBuilder(); + $query->select('phone_number') + ->from('talk_phone_numbers') + ->where($query->expr()->like('phone_number', $query->createNamedParameter( + $this->connection->escapeLikeParameter('+') . '%' + ))) + ->orWhere($query->expr()->like('phone_number', $query->createNamedParameter( + $this->connection->escapeLikeParameter('0') . '%' + ))); + + $result = $query->executeQuery(); + $invalidNumbers = $result->fetchAll(\PDO::FETCH_COLUMN); + $result->closeCursor(); + + if (!empty($invalidNumbers)) { + $message = $this->l->t("Assigned Talk phone numbers must not start with + or 0. Please remove or update the following numbers:\n{list}"); + $message = str_replace( + '{list}', + implode("\n", $invalidNumbers), + $message + ); + return SetupResult::error($message, 'https://portal.nextcloud.com/article/Nextcloud-Talk/Nextcloud-Talk-Phone/Direct-Dial-in#content-provisioning'); + } + + if ($this->talkConfig->getSIPSharedSecret() === '' && $this->talkConfig->getDialInInfo() === '') { + return SetupResult::info($this->l->t('No SIP backend configured')); + } + + return SetupResult::success(); + } +} diff --git a/lib/Share/Helper/DeletedShareAPIController.php b/lib/Share/Helper/DeletedShareAPIController.php new file mode 100644 index 0000000..a4487e5 --- /dev/null +++ b/lib/Share/Helper/DeletedShareAPIController.php @@ -0,0 +1,52 @@ +manager->getRoomByToken($share->getSharedWith(), $this->userId); + } catch (RoomNotFoundException $e) { + return $result; + } + + $result['share_with_displayname'] = $room->getDisplayName($this->userId); + + return $result; + } +} diff --git a/lib/Share/Helper/FilesMetadataCache.php b/lib/Share/Helper/FilesMetadataCache.php new file mode 100644 index 0000000..5bf3bf7 --- /dev/null +++ b/lib/Share/Helper/FilesMetadataCache.php @@ -0,0 +1,93 @@ + */ + protected array $filesSizeData = []; + + public function __construct( + protected IFilesMetadataManager $filesMetadataManager, + ) { + } + + /** + * @param list $fileIds + */ + public function preloadMetadata(array $fileIds): void { + $missingFileIds = array_diff($fileIds, array_keys($this->filesSizeData)); + if (empty($missingFileIds)) { + return; + } + + $data = $this->filesMetadataManager->getMetadataForFiles($missingFileIds); + foreach ($data as $fileId => $metadata) { + $this->cachePhotosSize($fileId, $metadata); + } + } + + /** + * @param int $fileId + * @return array + * @psalm-return array{width: int, height: int, blurhash?: string} + * @throws FilesMetadataNotFoundException + */ + public function getImageMetadataForFileId(int $fileId): array { + if (!array_key_exists($fileId, $this->filesSizeData)) { + try { + $this->cachePhotosSize($fileId, $this->filesMetadataManager->getMetadata($fileId, true)); + } catch (FilesMetadataNotFoundException) { + $this->filesSizeData[$fileId] = null; + } + } + + $data = $this->filesSizeData[$fileId]; + if ($data === null) { + throw new FilesMetadataNotFoundException(); + } + + return $data; + } + + protected function cachePhotosSize(int $fileId, IFilesMetadata $metadata): void { + if ($metadata->hasKey('photos-size')) { + try { + $sizeMetadata = $metadata->getArray('photos-size'); + } catch (FilesMetadataNotFoundException|FilesMetadataTypeException) { + $this->filesSizeData[$fileId] = null; + return; + } + + if (isset($sizeMetadata['width'], $sizeMetadata['height'])) { + $dimensions = [ + 'width' => $sizeMetadata['width'], + 'height' => $sizeMetadata['height'], + ]; + + // Retrieve Blurhash from metadata (if present) + if ($metadata->hasKey('blurhash')) { + $dimensions['blurhash'] = $metadata->getString('blurhash'); + } + + $this->filesSizeData[$fileId] = $dimensions; + } else { + $this->filesSizeData[$fileId] = null; + } + } else { + $this->filesSizeData[$fileId] = null; + } + + } +} diff --git a/lib/Share/Helper/Preloader.php b/lib/Share/Helper/Preloader.php new file mode 100644 index 0000000..6517a4f --- /dev/null +++ b/lib/Share/Helper/Preloader.php @@ -0,0 +1,56 @@ +getVerb(); + if ($verb === 'object_shared') { + $message = $comment->getMessage(); + $data = json_decode($message, true); + if (isset($data['parameters']['share'])) { + $shareIds[] = $data['parameters']['share']; + } + } + } + if (!empty($shareIds)) { + // Retrieved Share objects will be cached by + // the RoomShareProvider and returned from the cache to + // the Parser\SystemMessage without additional database queries. + $shares = $this->shareProvider->getSharesByIds($shareIds); + + // Preload files metadata as well + $fileIds = array_filter(array_map(static fn (IShare $share) => $share->getNodeId(), $shares)); + $this->filesMetadataCache->preloadMetadata($fileIds); + } + } +} diff --git a/lib/Share/Helper/ShareAPIController.php b/lib/Share/Helper/ShareAPIController.php new file mode 100644 index 0000000..ace4d2b --- /dev/null +++ b/lib/Share/Helper/ShareAPIController.php @@ -0,0 +1,145 @@ +manager->getRoomByToken($share->getSharedWith(), $this->userId); + } catch (RoomNotFoundException $e) { + return $result; + } + + $result['share_with_displayname'] = $room->getDisplayName($this->userId); + try { + $this->participantService->getParticipant($room, $this->userId, false); + $result['share_with_link'] = $this->urlGenerator->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]); + } catch (ParticipantNotFoundException $e) { + // Removing the conversation token from the leaked data if not a participant. + // Adding some unique but reproducable part to the share_with here + // so the avatars for conversations are distinguishable + $result['share_with'] = 'private_conversation_' . substr(sha1($room->getName() . $room->getId()), 0, 6); + $result['share_with_link'] = ''; + } + if ($room->getType() === Room::TYPE_PUBLIC) { + $result['token'] = $share->getToken(); + } + + return $result; + } + + /** + * Prepares the given share to be passed to OC\Share20\Manager::createShare. + * + * @param IShare $share + * @param string $shareWith + * @param int $permissions + * @param string $expireDate + * @throws OCSNotFoundException + */ + public function createShare(IShare $share, string $shareWith, int $permissions, string $expireDate): void { + $share->setSharedWith($shareWith); + $share->setPermissions($permissions); + + if ($expireDate !== '') { + try { + $expireDateTime = $this->parseDate($expireDate); + $share->setExpirationDate($expireDateTime); + } catch (\Exception $e) { + throw new OCSNotFoundException($this->l->t('Invalid date, date format must be YYYY-MM-DD')); + } + } + } + + /** + * Make sure that the passed date is valid ISO 8601 + * So YYYY-MM-DD + * If not throw an exception + * + * Copied from \OCA\Files_Sharing\Controller\ShareAPIController::parseDate. + * + * @param string $expireDate + * @return \DateTime + * @throws \Exception + */ + private function parseDate(string $expireDate): \DateTime { + try { + $date = $this->timeFactory->getDateTime($expireDate); + } catch (\Exception $e) { + throw new \Exception('Invalid date. Format must be YYYY-MM-DD'); + } + + $date->setTime(0, 0); + + return $date; + } + + /** + * Returns whether the given user can access the given room share or not. + * + * A user can access a room share only if they are a participant of the room. + * + * @param IShare $share + * @param string $user + * @return bool + */ + public function canAccessShare(IShare $share, string $user): bool { + try { + $room = $this->manager->getRoomByToken($share->getSharedWith(), $user); + } catch (RoomNotFoundException $e) { + return false; + } + + try { + $this->participantService->getParticipant($room, $user, false); + } catch (ParticipantNotFoundException $e) { + return false; + } + + return true; + } +} diff --git a/lib/Share/Listener.php b/lib/Share/Listener.php new file mode 100644 index 0000000..2f1d5bd --- /dev/null +++ b/lib/Share/Listener.php @@ -0,0 +1,90 @@ + + */ +class Listener implements IEventListener { + + public function __construct( + protected Config $config, + protected RoomShareProvider $roomShareProvider, + ) { + } + + #[\Override] + public function handle(Event $event): void { + match (get_class($event)) { + BeforeShareCreatedEvent::class => $this->overwriteShareTarget($event), + VerifyMountPointEvent::class => $this->overwriteMountPoint($event), + RoomDeletedEvent::class => $this->roomDeletedEvent($event), + }; + } + + protected function overwriteShareTarget(BeforeShareCreatedEvent $event): void { + $share = $event->getShare(); + + if ($share->getShareType() !== IShare::TYPE_ROOM + && $share->getShareType() !== RoomShareProvider::SHARE_TYPE_USERROOM) { + return; + } + + $target = RoomShareProvider::TALK_FOLDER_PLACEHOLDER . '/' . $share->getNode()->getName(); + $target = Filesystem::normalizePath($target); + $share->setTarget($target); + } + + protected function overwriteMountPoint(VerifyMountPointEvent $event): void { + $share = $event->getShare(); + $view = $event->getView(); + + if ($share->getShareType() !== IShare::TYPE_ROOM + && $share->getShareType() !== RoomShareProvider::SHARE_TYPE_USERROOM) { + return; + } + + if ($event->getParent() === RoomShareProvider::TALK_FOLDER_PLACEHOLDER) { + try { + $userId = $view->getOwner('/'); + } catch (\Exception $e) { + // If we fail to get the owner of the view from the cache, + // e.g. because the user never logged in but a cron job runs + // We fall back to calculating the owner from the root of the view: + if (substr_count($view->getRoot(), '/') >= 2) { + // /37c09aa0-1b92-4cf6-8c66-86d8cac8c1d0/files + [, $userId, ] = explode('/', $view->getRoot(), 3); + } else { + // Something weird is going on, we can't fall back more + // so for now we don't overwrite the share path ¯\_(ツ)_/¯ + return; + } + } + + $parent = $this->config->getAttachmentFolder($userId); + $event->setParent($parent); + if (!$event->getView()->is_dir($parent)) { + $event->getView()->mkdir($parent); + } + } + } + + protected function roomDeletedEvent(RoomDeletedEvent $event): void { + $this->roomShareProvider->deleteInRoom($event->getRoom()->getToken()); + } +} diff --git a/lib/Share/RoomShareProvider.php b/lib/Share/RoomShareProvider.php new file mode 100644 index 0000000..745ae9c --- /dev/null +++ b/lib/Share/RoomShareProvider.php @@ -0,0 +1,1193 @@ +sharesByIdCache = new CappedMemoryCache(); + } + + /* + * Clean sharesByIdCache + */ + private function cleanSharesByIdCache(): void { + $this->sharesByIdCache = new CappedMemoryCache(); + } + + /** + * Return the identifier of this provider. + * + * @return string Containing only [a-zA-Z0-9] + */ + #[\Override] + public function identifier(): string { + return 'ocRoomShare'; + } + + /** + * Create a share + * + * @param IShare $share + * @return IShare The share object + * @throws GenericShareException + */ + #[\Override] + public function create(IShare $share): IShare { + try { + $room = $this->manager->getRoomByToken($share->getSharedWith(), $share->getSharedBy()); + } catch (RoomNotFoundException $e) { + throw new GenericShareException('Room not found', $this->l->t('Conversation not found'), 404); + } + + if ($room->getReadOnly() === Room::READ_ONLY) { + throw new GenericShareException('Room not found', $this->l->t('Conversation not found'), 404); + } + + if ($room->isFederatedConversation()) { + throw new GenericShareException('Room not found', $this->l->t('Conversation not found'), 404); + } + + try { + $participant = $this->participantService->getParticipant($room, $share->getSharedBy(), false); + } catch (ParticipantNotFoundException $e) { + // If the sharer is not a participant of the room even if the room + // exists the error is still "Room not found". + throw new GenericShareException('Room not found', $this->l->t('Conversation not found'), 404); + } + + if (!($participant->getPermissions() & Attendee::PERMISSIONS_CHAT)) { + // No chat permissions is like read-only + throw new GenericShareException('Room not found', $this->l->t('Conversation not found'), 404); + } + + $existingShares = $this->getSharesByPath($share->getNode()); + foreach ($existingShares as $existingShare) { + if ($existingShare->getSharedWith() === $share->getSharedWith()) { + $event = new BeforeDuplicateShareSentEvent($existingShare); + $this->dispatcher->dispatchTyped($event); + throw new GenericShareException('Already shared', $this->l->t('Path is already shared with this conversation'), 403); + } + } + + $share->setToken( + $this->secureRandom->generate( + 15, // \OC\Share\Constants::TOKEN_LENGTH + ISecureRandom::CHAR_HUMAN_READABLE + ) + ); + + $data = $this->atomic(function () use ($share) { + $shareId = $this->addShareToDB( + $share->getSharedWith(), + $share->getSharedBy(), + $share->getShareOwner(), + $share->getNodeType(), + $share->getNodeId(), + $share->getTarget(), + $share->getPermissions(), + $share->getToken(), + $share->getExpirationDate() + ); + + return $this->getRawShare($shareId); + }, $this->dbConnection); + + $this->roomService->setHasAttachments($room); + + return $this->createShareObject($data); + } + + /** + * Add share to the database and return the ID + * + * @param string $shareWith + * @param string $sharedBy + * @param string $shareOwner + * @param string $itemType + * @param int $itemSource + * @param string $target + * @param int $permissions + * @param string $token + * @param \DateTime|null $expirationDate + * @return int + */ + private function addShareToDB( + string $shareWith, + string $sharedBy, + string $shareOwner, + string $itemType, + int $itemSource, + string $target, + int $permissions, + string $token, + ?\DateTime $expirationDate, + ): int { + $insert = $this->dbConnection->getQueryBuilder(); + $insert->insert('share') + ->setValue('share_type', $insert->createNamedParameter(IShare::TYPE_ROOM)) + ->setValue('share_with', $insert->createNamedParameter($shareWith)) + ->setValue('uid_initiator', $insert->createNamedParameter($sharedBy)) + ->setValue('uid_owner', $insert->createNamedParameter($shareOwner)) + ->setValue('item_type', $insert->createNamedParameter($itemType)) + ->setValue('item_source', $insert->createNamedParameter($itemSource)) + ->setValue('file_source', $insert->createNamedParameter($itemSource)) + ->setValue('file_target', $insert->createNamedParameter($target)) + ->setValue('permissions', $insert->createNamedParameter($permissions)) + ->setValue('token', $insert->createNamedParameter($token)) + ->setValue('stime', $insert->createNamedParameter($this->timeFactory->getTime())); + + if ($expirationDate !== null) { + $insert->setValue('expiration', $insert->createNamedParameter($expirationDate, 'datetime')); + } + + $insert->executeStatement(); + $id = $insert->getLastInsertId(); + + return $id; + } + + /** + * Get database row of the given share + * + * @param int $id + * @return array + * @throws ShareNotFound + */ + private function getRawShare(int $id): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('id', $qb->createNamedParameter($id))); + + $cursor = $qb->executeQuery(); + $data = $cursor->fetch(); + $cursor->closeCursor(); + + if ($data === false) { + throw new ShareNotFound(); + } + + return $data; + } + + /** + * Create a share object from a database row + * + * @param array $data + * @return IShare + */ + private function createShareObject(array $data): IShare { + $share = $this->shareManager->newShare(); + $share->setId($data['id']) + ->setShareType((int)$data['share_type']) + ->setPermissions((int)$data['permissions']) + ->setTarget($data['file_target']) + ->setStatus((int)$data['accepted']) + ->setToken($data['token']); + + $shareTime = $this->timeFactory->getDateTime(); + $shareTime->setTimestamp((int)$data['stime']); + $share->setShareTime($shareTime); + $share->setSharedWith($data['share_with']); + + $share->setSharedBy($data['uid_initiator']); + $share->setShareOwner($data['uid_owner']); + + if ($data['expiration'] !== null) { + $expiration = \DateTime::createFromFormat('Y-m-d H:i:s', $data['expiration']); + if ($expiration !== false) { + $share->setExpirationDate($expiration); + } + } + + $share->setNodeId((int)$data['file_source']); + $share->setNodeType($data['item_type']); + + $share->setProviderId($this->identifier()); + + if (isset($data['f_permissions'])) { + $entryData = $data; + $entryData['permissions'] = $entryData['f_permissions']; + $entryData['parent'] = $entryData['f_parent']; + $share->setNodeCacheEntry(Cache::cacheEntryFromData($entryData, + $this->mimeTypeLoader)); + } + + return $share; + } + + /** + * Update a share + * + * @param IShare $share + * @return IShare The share object + */ + #[\Override] + public function update(IShare $share): IShare { + $this->cleanSharesByIdCache(); + + $update = $this->dbConnection->getQueryBuilder(); + $update->update('share') + ->where($update->expr()->eq('id', $update->createNamedParameter($share->getId()))) + ->set('uid_owner', $update->createNamedParameter($share->getShareOwner())) + ->set('uid_initiator', $update->createNamedParameter($share->getSharedBy())) + ->set('permissions', $update->createNamedParameter($share->getPermissions())) + ->set('item_source', $update->createNamedParameter($share->getNode()->getId())) + ->set('file_source', $update->createNamedParameter($share->getNode()->getId())) + ->set('expiration', $update->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE)) + ->executeStatement(); + + /* + * Update all user defined group shares + */ + $update = $this->dbConnection->getQueryBuilder(); + $update->update('share') + ->where($update->expr()->eq('parent', $update->createNamedParameter($share->getId()))) + ->set('uid_owner', $update->createNamedParameter($share->getShareOwner())) + ->set('uid_initiator', $update->createNamedParameter($share->getSharedBy())) + ->set('item_source', $update->createNamedParameter($share->getNode()->getId())) + ->set('file_source', $update->createNamedParameter($share->getNode()->getId())) + ->set('expiration', $update->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE)) + ->executeStatement(); + + /* + * Now update the permissions for all children that have not set it to 0 + */ + $update = $this->dbConnection->getQueryBuilder(); + $update->update('share') + ->where($update->expr()->eq('parent', $update->createNamedParameter($share->getId()))) + ->andWhere($update->expr()->neq('permissions', $update->createNamedParameter(0))) + ->set('permissions', $update->createNamedParameter($share->getPermissions())) + ->executeStatement(); + + return $share; + } + + /** + * Delete a share + * + * @param IShare $share + */ + #[\Override] + public function delete(IShare $share): void { + $this->cleanSharesByIdCache(); + + $delete = $this->dbConnection->getQueryBuilder(); + $delete->delete('share') + ->where($delete->expr()->eq('id', $delete->createNamedParameter($share->getId()))); + + $delete->orWhere($delete->expr()->eq('parent', $delete->createNamedParameter($share->getId()))); + + $delete->executeStatement(); + } + + /** + * Unshare a file from self as recipient. + * + * If a user unshares a room share from their self then the original room + * share should still exist. + * + * @param IShare $share + * @param string $recipient UserId of the recipient + */ + #[\Override] + public function deleteFromSelf(IShare $share, $recipient): void { + $this->cleanSharesByIdCache(); + + // Check if there is a userroom share + $qb = $this->dbConnection->getQueryBuilder(); + $stmt = $qb->select(['id', 'permissions']) + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($recipient))) + ->andWhere($qb->expr()->eq('parent', $qb->createNamedParameter($share->getId()))) + ->andWhere($qb->expr()->orX( + $qb->expr()->eq('item_type', $qb->createNamedParameter('file')), + $qb->expr()->eq('item_type', $qb->createNamedParameter('folder')) + )) + ->executeQuery(); + + $data = $stmt->fetch(); + $stmt->closeCursor(); + + if ($data === false) { + // No userroom share yet. Create one. + $qb = $this->dbConnection->getQueryBuilder(); + $qb->insert('share') + ->values([ + 'share_type' => $qb->createNamedParameter(self::SHARE_TYPE_USERROOM), + 'share_with' => $qb->createNamedParameter($recipient), + 'uid_owner' => $qb->createNamedParameter($share->getShareOwner()), + 'uid_initiator' => $qb->createNamedParameter($share->getSharedBy()), + 'parent' => $qb->createNamedParameter($share->getId()), + 'item_type' => $qb->createNamedParameter($share->getNodeType()), + 'item_source' => $qb->createNamedParameter($share->getNodeId()), + 'file_source' => $qb->createNamedParameter($share->getNodeId()), + 'file_target' => $qb->createNamedParameter($share->getTarget()), + 'permissions' => $qb->createNamedParameter(0), + 'stime' => $qb->createNamedParameter($share->getShareTime()->getTimestamp()), + ])->executeStatement(); + } elseif ($data['permissions'] !== 0) { + // Already a userroom share. Update it. + $qb = $this->dbConnection->getQueryBuilder(); + $qb->update('share') + ->set('permissions', $qb->createNamedParameter(0)) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($data['id']))) + ->executeStatement(); + } + } + + /** + * Restore a share for a given recipient. The implementation could be provider independant. + * + * @param IShare $share + * @param string $recipient + * @return IShare The restored share object + * @throws GenericShareException In case the share could not be restored + */ + #[\Override] + public function restore(IShare $share, string $recipient): IShare { + $this->cleanSharesByIdCache(); + + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('permissions') + ->from('share') + ->where( + $qb->expr()->eq('id', $qb->createNamedParameter($share->getId())) + ); + $cursor = $qb->executeQuery(); + $data = $cursor->fetch(); + $cursor->closeCursor(); + + $originalPermission = $data['permissions']; + + $update = $this->dbConnection->getQueryBuilder(); + $update->update('share') + ->set('permissions', $update->createNamedParameter($originalPermission)) + ->where( + $update->expr()->eq('parent', $update->createNamedParameter($share->getId())) + )->andWhere( + $update->expr()->eq('share_type', $update->createNamedParameter(self::SHARE_TYPE_USERROOM)) + )->andWhere( + $update->expr()->eq('share_with', $update->createNamedParameter($recipient)) + ); + + $update->executeStatement(); + + return $this->getShareById((int)$share->getId(), $recipient); + } + + /** + * Move a share as a recipient. + * + * This is updating the share target. Thus the mount point of the recipient. + * This may require special handling. If a user moves a room share + * the target should only be changed for them. + * + * @param IShare $share + * @param string $recipient userId of recipient + * @return IShare + */ + #[\Override] + public function move(IShare $share, $recipient): IShare { + $this->cleanSharesByIdCache(); + + // Check if there is a userroom share + $qb = $this->dbConnection->getQueryBuilder(); + $stmt = $qb->select('id') + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($recipient))) + ->andWhere($qb->expr()->eq('parent', $qb->createNamedParameter($share->getId()))) + ->andWhere($qb->expr()->orX( + $qb->expr()->eq('item_type', $qb->createNamedParameter('file')), + $qb->expr()->eq('item_type', $qb->createNamedParameter('folder')) + )) + ->setMaxResults(1) + ->executeQuery(); + + $data = $stmt->fetch(); + $stmt->closeCursor(); + + if ($data === false) { + // No userroom share yet. Create one. + $qb = $this->dbConnection->getQueryBuilder(); + $qb->insert('share') + ->values([ + 'share_type' => $qb->createNamedParameter(self::SHARE_TYPE_USERROOM), + 'share_with' => $qb->createNamedParameter($recipient), + 'uid_owner' => $qb->createNamedParameter($share->getShareOwner()), + 'uid_initiator' => $qb->createNamedParameter($share->getSharedBy()), + 'parent' => $qb->createNamedParameter($share->getId()), + 'item_type' => $qb->createNamedParameter($share->getNodeType()), + 'item_source' => $qb->createNamedParameter($share->getNodeId()), + 'file_source' => $qb->createNamedParameter($share->getNodeId()), + 'file_target' => $qb->createNamedParameter($share->getTarget()), + 'permissions' => $qb->createNamedParameter($share->getPermissions()), + 'stime' => $qb->createNamedParameter($share->getShareTime()->getTimestamp()), + ])->executeStatement(); + } else { + // Already a userroom share. Update it. + $qb = $this->dbConnection->getQueryBuilder(); + $qb->update('share') + ->set('file_target', $qb->createNamedParameter($share->getTarget())) + ->where($qb->expr()->eq('id', $qb->createNamedParameter($data['id']))) + ->executeStatement(); + } + + return $share; + } + + /** + * Get all shares by the given user in a folder + * + * @param string $userId + * @param Folder $node + * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator + * @param bool $shallow Whether the method should stop at the first level, or look into sub-folders. + * @return IShare[][] + * @psalm-return array> + */ + #[\Override] + public function getSharesInFolder($userId, Folder $node, $reshares, $shallow = true): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('s.*', + 'f.fileid', 'f.path', 'f.permissions AS f_permissions', 'f.storage', 'f.path_hash', + 'f.parent AS f_parent', 'f.name', 'f.mimetype', 'f.mimepart', 'f.size', 'f.mtime', 'f.storage_mtime', + 'f.encrypted', 'f.unencrypted_size', 'f.etag', 'f.checksum' + ) + ->from('share', 's') + ->andWhere($qb->expr()->orX( + $qb->expr()->eq('s.item_type', $qb->createNamedParameter('file')), + $qb->expr()->eq('s.item_type', $qb->createNamedParameter('folder')) + )) + ->andWhere( + $qb->expr()->eq('s.share_type', $qb->createNamedParameter(IShare::TYPE_ROOM)) + ); + + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares === false) { + $qb->andWhere($qb->expr()->eq('s.uid_initiator', $qb->createNamedParameter($userId))); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('s.uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('s.uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } + + $qb->innerJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')); + $qb->andWhere($qb->expr()->eq('f.storage', $qb->createNamedParameter($node->getMountPoint()->getNumericStorageId(), IQueryBuilder::PARAM_INT))); + if ($shallow) { + $qb->andWhere($qb->expr()->eq('f.parent', $qb->createNamedParameter($node->getId()))); + } else { + $qb->andWhere($qb->expr()->like('f.path', $qb->createNamedParameter($this->dbConnection->escapeLikeParameter($node->getInternalPath()) . '/%'))); + } + + $qb->orderBy('s.id', 'ASC'); + + $cursor = $qb->executeQuery(); + $shares = []; + while ($data = $cursor->fetch()) { + $shares[$data['fileid']][] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * Get all shares by the given user + * + * @param string $userId + * @param int $shareType + * @param Node|null $node + * @param bool $reshares Also get the shares where $user is the owner instead of just the shares where $user is the initiator + * @param int $limit The maximum number of shares to be returned, -1 for all shares + * @param int $offset + * @return IShare[] + */ + #[\Override] + public function getSharesBy($userId, $shareType, $node, $reshares, $limit, $offset): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share'); + + $qb->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))); + + /** + * Reshares for this user are shares where they are the owner. + */ + if ($reshares === false) { + $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId))); + } else { + $qb->andWhere( + $qb->expr()->orX( + $qb->expr()->eq('uid_owner', $qb->createNamedParameter($userId)), + $qb->expr()->eq('uid_initiator', $qb->createNamedParameter($userId)) + ) + ); + } + + if ($node !== null) { + $qb->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($node->getId()))); + } + + if ($limit !== -1) { + $qb->setMaxResults($limit); + } + + $qb->setFirstResult($offset); + $qb->orderBy('id', 'ASC'); + + $cursor = $qb->executeQuery(); + $shares = []; + while ($data = $cursor->fetch()) { + $shares[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * Get share by id + * + * @param int $id + * @param string|null $recipientId + * @return IShare + * @throws ShareNotFound + */ + #[\Override] + public function getShareById($id, $recipientId = null): IShare { + if (($recipientId === null) && isset($this->sharesByIdCache[$id])) { + $share = $this->sharesByIdCache[$id]; + } else { + $shares = $this->getSharesByIds([$id], $recipientId); + if (empty($shares)) { + throw new ShareNotFound(); + } + $share = $shares[0]; + } + + // Shares referring to deleted files are stored as 'false' in the cache. + if ($share === false) { + throw new ShareNotFound(); + } + + return $share; + } + + /** + * Get shares by ids + * + * Not part of IShareProvider API, but needed by OCA\Talk\Controller\ChatController. + * + * @param int[] $ids + * @param string|null $recipientId + * @return IShare[] + */ + public function getSharesByIds(array $ids, ?string $recipientId = null): array { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('s.*', + 'f.fileid', 'f.path', 'f.permissions AS f_permissions', 'f.storage', 'f.path_hash', + 'f.parent AS f_parent', 'f.name', 'f.mimetype', 'f.mimepart', 'f.size', 'f.mtime', 'f.storage_mtime', + 'f.encrypted', 'f.unencrypted_size', 'f.etag', 'f.checksum' + ) + ->selectAlias('st.id', 'storage_string_id') + ->from('share', 's') + ->leftJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')) + ->leftJoin('f', 'storages', 'st', $qb->expr()->eq('f.storage', 'st.numeric_id')) + ->where($qb->expr()->in('s.id', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($qb->expr()->eq('s.share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))); + + $cursor = $qb->executeQuery(); + + /* + * Keep retrieved shares in sharesByIdCache. + * + * Fill the cache only when $recipientId === null. + * + * For inaccessible shares use 'false' instead of the IShare object. + * (This is required to avoid additional queries in getShareById when + * the share refers to a deleted file.) + */ + $shares = []; + while ($data = $cursor->fetch()) { + $id = $data['id']; + if ($this->isAccessibleResult($data)) { + $share = $this->createShareObject($data); + $shares[(int)$share->getId()] = $share; + } else { + $share = false; + } + if ($recipientId === null && !isset($this->sharesByIdCache[$id])) { + $this->sharesByIdCache[$id] = $share; + } + } + $cursor->closeCursor(); + + if ($recipientId !== null) { + return $this->resolveSharesForRecipient($shares, $recipientId); + } else { + return array_values($shares); + } + } + + /** + * Returns each given share as seen by the given recipient. + * + * If the recipient has not modified the share the original one is returned + * instead. + * + * @param array $shareMap shares indexed by share id + * @param string $userId + * @param bool $allRoomShares indicates that the passed in shares are all room shares for the user + * @return list + */ + private function resolveSharesForRecipient(array $shareMap, string $userId, bool $allRoomShares = false): array { + $qb = $this->dbConnection->getQueryBuilder(); + + $query = $qb->select('parent', 'permissions', 'file_target') + ->from('share') + + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($userId))) + ->andWhere($qb->expr()->orX( + $qb->expr()->eq('item_type', $qb->createNamedParameter('file')), + $qb->expr()->eq('item_type', $qb->createNamedParameter('folder')) + )); + + if ($allRoomShares) { + $stmt = $query->executeQuery(); + + while ($data = $stmt->fetch()) { + if (isset($shareMap[$data['parent']])) { + $shareMap[$data['parent']]->setPermissions((int)$data['permissions']); + $shareMap[$data['parent']]->setTarget($data['file_target']); + } + } + + $stmt->closeCursor(); + } else { + $chunks = array_chunk($shareMap, 1000, true); + $query->andWhere($qb->expr()->in('parent', $qb->createParameter('share_ids'))); + foreach ($chunks as $chunk) { + $ids = array_keys($chunk); + $query->setParameter('share_ids', $ids, IQueryBuilder::PARAM_INT_ARRAY); + $stmt = $query->executeQuery(); + + while ($data = $stmt->fetch()) { + $shareMap[$data['parent']]->setPermissions((int)$data['permissions']); + $shareMap[$data['parent']]->setTarget($data['file_target']); + } + + $stmt->closeCursor(); + } + } + + return array_values($shareMap); + } + + /** + * Get shares for a given path + * + * @param Node $path + * @return IShare[] + */ + #[\Override] + public function getSharesByPath(Node $path): array { + $qb = $this->dbConnection->getQueryBuilder(); + + $cursor = $qb->select('*') + ->from('share') + ->andWhere($qb->expr()->eq('file_source', $qb->createNamedParameter($path->getId()))) + ->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))) + ->executeQuery(); + + $shares = []; + while ($data = $cursor->fetch()) { + $shares[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $shares; + } + + /** + * Get shared with the given user + * + * @param string $userId get shares where this user is the recipient + * @param int $shareType + * @param Node|null $node + * @param int $limit The max number of entries returned, -1 for all + * @param int $offset + * @return IShare[] + */ + #[\Override] + public function getSharedWith($userId, $shareType, $node, $limit, $offset): array { + $allRooms = $this->manager->getRoomTokensWithAttachmentsForUser($userId); + + if (empty($allRooms)) { + return []; + } + + /** @var IShare[] $shares */ + $shares = []; + + $chunks = array_chunk($allRooms, 100); + foreach ($chunks as $rooms) { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('s.*', + 'f.fileid', 'f.path', 'f.permissions AS f_permissions', 'f.storage', 'f.path_hash', + 'f.parent AS f_parent', 'f.name', 'f.mimetype', 'f.mimepart', 'f.size', 'f.mtime', 'f.storage_mtime', + 'f.encrypted', 'f.unencrypted_size', 'f.etag', 'f.checksum' + ) + ->selectAlias('st.id', 'storage_string_id') + ->from('share', 's') + ->orderBy('s.id', 'ASC') + ->leftJoin('s', 'filecache', 'f', $qb->expr()->eq('s.file_source', 'f.fileid')) + ->leftJoin('f', 'storages', 'st', $qb->expr()->eq('f.storage', 'st.numeric_id')); + + if ($limit !== -1) { + $qb->setMaxResults($limit); + } + + // Filter by node if provided + if ($node !== null) { + $qb->andWhere($qb->expr()->eq('s.file_source', $qb->createNamedParameter($node->getId()))); + } + + $qb->andWhere($qb->expr()->eq('s.share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))) + ->andWhere($qb->expr()->in('s.share_with', $qb->createNamedParameter( + $rooms, + IQueryBuilder::PARAM_STR_ARRAY + ))); + + $cursor = $qb->executeQuery(); + while ($data = $cursor->fetch()) { + if ($data['uid_initiator'] === $userId || $data['uid_owner'] === $userId) { + continue; + } + + if (!$this->isAccessibleResult($data)) { + continue; + } + + if ($offset > 0) { + $offset--; + continue; + } + + $share = $this->createShareObject($data); + $shares[$share->getId()] = $share; + } + $cursor->closeCursor(); + } + + $shares = $this->resolveSharesForRecipient($shares, $userId, true); + + return $shares; + } + + private function isAccessibleResult(array $data): bool { + // exclude shares leading to deleted file entries + if ($data['fileid'] === null || $data['path'] === null) { + return false; + } + + // exclude shares leading to trashbin on home storages + $pathSections = explode('/', $data['path'], 2); + // FIXME: would not detect rare md5'd home storage case properly + if ($pathSections[0] !== 'files' + && (strpos($data['storage_string_id'], 'home::') === 0 || strpos($data['storage_string_id'], 'object::user') === 0)) { + return false; + } + return true; + } + + /** + * Get a share by token + * + * Note that token here refers to share token, not room token. + * + * @param string $token + * @return IShare + * @throws ShareNotFound + */ + #[\Override] + public function getShareByToken($token): IShare { + $qb = $this->dbConnection->getQueryBuilder(); + + $cursor = $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))) + ->andWhere($qb->expr()->eq('token', $qb->createNamedParameter($token))) + ->executeQuery(); + + $data = $cursor->fetch(); + + if ($data === false) { + throw new ShareNotFound(); + } + + $roomToken = $data['share_with']; + try { + $room = $this->manager->getRoomByToken($roomToken); + } catch (RoomNotFoundException $e) { + throw new ShareNotFound(); + } + + if ($room->getType() !== Room::TYPE_PUBLIC) { + throw new ShareNotFound(); + } + + return $this->createShareObject($data); + } + + /** + * A user is deleted from the system + * So clean up the relevant shares. + * + * @param string $uid + * @param int $shareType + */ + #[\Override] + public function userDeleted($uid, $shareType): void { + // A deleted user is handled automatically by the room hooks due to the + // user being removed from the room. + } + + /** + * A group is deleted from the system. + * We have to clean up all shares to this group. + * Providers not handling group shares should just return + * + * @param string $gid + */ + #[\Override] + public function groupDeleted($gid): void { + } + + /** + * A user is deleted from a group + * We have to clean up all the related user specific group shares + * Providers not handling group shares should just return + * + * @param string $uid + * @param string $gid + */ + #[\Override] + public function userDeletedFromGroup($uid, $gid): void { + } + + /** + * Get the access list to the array of provided nodes. + * + * @see IManager::getAccessList() for sample docs + * + * @param Node[] $nodes The list of nodes to get access for + * @param bool $currentAccess If current access is required (like for removed shares that might get revived later) + * @return array + */ + #[\Override] + public function getAccessList($nodes, $currentAccess): array { + $ids = []; + foreach ($nodes as $node) { + $ids[] = $node->getId(); + } + + $qb = $this->dbConnection->getQueryBuilder(); + + $types = [IShare::TYPE_ROOM]; + if ($currentAccess) { + $types[] = self::SHARE_TYPE_USERROOM; + } + + $qb->select('id', 'parent', 'share_type', 'share_with', 'file_source', 'file_target', 'permissions') + ->from('share') + ->where($qb->expr()->in('share_type', $qb->createNamedParameter($types, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($qb->expr()->in('file_source', $qb->createNamedParameter($ids, IQueryBuilder::PARAM_INT_ARRAY))) + ->andWhere($qb->expr()->orX( + $qb->expr()->eq('item_type', $qb->createNamedParameter('file')), + $qb->expr()->eq('item_type', $qb->createNamedParameter('folder')) + )); + $cursor = $qb->executeQuery(); + + $users = []; + while ($row = $cursor->fetch()) { + $type = (int)$row['share_type']; + if ($type === IShare::TYPE_ROOM) { + $roomToken = $row['share_with']; + try { + $room = $this->manager->getRoomByToken($roomToken); + } catch (RoomNotFoundException $e) { + continue; + } + + $userList = $this->participantService->getParticipantUserIds($room); + foreach ($userList as $uid) { + $users[$uid] ??= []; + $users[$uid][$row['id']] = $row; + } + } elseif ($type === self::SHARE_TYPE_USERROOM && $currentAccess === true) { + $uid = $row['share_with']; + $users[$uid] ??= []; + $users[$uid][$row['id']] = $row; + } + } + $cursor->closeCursor(); + + if ($currentAccess === true) { + $users = array_map([$this, 'filterSharesOfUser'], $users); + $users = array_filter($users); + } else { + $users = array_keys($users); + } + + return ['users' => $users]; + } + + /** + * For each user the path with the fewest slashes is returned + * @param array $shares + * @return array + */ + protected function filterSharesOfUser(array $shares): array { + // Room shares when the user has a share exception + foreach ($shares as $id => $share) { + $type = (int)$share['share_type']; + $permissions = (int)$share['permissions']; + + if ($type === self::SHARE_TYPE_USERROOM) { + unset($shares[$share['parent']]); + + if ($permissions === 0) { + unset($shares[$id]); + } + } + } + + $best = []; + $bestDepth = 0; + foreach ($shares as $id => $share) { + $depth = substr_count($share['file_target'], '/'); + if (empty($best) || $depth < $bestDepth) { + $bestDepth = $depth; + $best = [ + 'node_id' => $share['file_source'], + 'node_path' => $share['file_target'], + ]; + } + } + + return $best; + } + + /** + * Get all children of this share + * + * Not part of IShareProvider API, but needed by OC\Share20\Manager. + * + * @param IShare $parent + * @return IShare[] + */ + #[\Override] + public function getChildren(IShare $parent): array { + $children = []; + + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('*') + ->from('share') + ->where($qb->expr()->eq('parent', $qb->createNamedParameter($parent->getId()))) + ->andWhere($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))) + ->orderBy('id', 'ASC'); + + $cursor = $qb->executeQuery(); + while ($data = $cursor->fetch()) { + $children[] = $this->createShareObject($data); + } + $cursor->closeCursor(); + + return $children; + } + + /** + * Delete all shares in a room, or only those from the given user. + * + * When a user is given all their shares are removed, both own shares and + * received shares. + * + * Not part of IShareProvider API, but needed by the hooks in + * OCA\Talk\AppInfo\Application + * + * @param string $roomToken + * @param string|null $user + */ + public function deleteInRoom(string $roomToken, ?string $user = null): void { + $this->cleanSharesByIdCache(); + + //First delete all custom room shares for the original shares to be removed + $qb = $this->dbConnection->getQueryBuilder(); + $qb->select('id') + ->from('share') + ->where($qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM))) + ->andWhere($qb->expr()->eq('share_with', $qb->createNamedParameter($roomToken))); + + if ($user !== null) { + $qb->andWhere($qb->expr()->eq('uid_initiator', $qb->createNamedParameter($user))); + } + + $cursor = $qb->executeQuery(); + $ids = []; + while ($row = $cursor->fetch()) { + $ids[] = (int)$row['id']; + } + $cursor->closeCursor(); + + if (!empty($ids)) { + $delete = $this->dbConnection->getQueryBuilder(); + $delete->delete('share') + ->where($delete->expr()->eq('share_type', $delete->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($delete->expr()->in('parent', $delete->createParameter('ids'))); + + $chunks = array_chunk($ids, 100); + foreach ($chunks as $chunk) { + $delete->setParameter('ids', $chunk, IQueryBuilder::PARAM_INT_ARRAY); + $delete->executeStatement(); + } + } + + // Now delete all the original room shares + $delete = $this->dbConnection->getQueryBuilder(); + $delete->delete('share') + ->where($delete->expr()->eq('share_type', $delete->createNamedParameter(IShare::TYPE_ROOM))) + ->andWhere($delete->expr()->eq('share_with', $delete->createNamedParameter($roomToken))); + + if ($user !== null) { + $delete->andWhere($delete->expr()->eq('uid_initiator', $delete->createNamedParameter($user))); + } + + $delete->executeStatement(); + + // Finally delete all custom room shares leftovers for the given user + if ($user !== null) { + $query = $this->dbConnection->getQueryBuilder(); + $query->select('id') + ->from('share') + ->where($query->expr()->eq('share_type', $query->createNamedParameter(IShare::TYPE_ROOM))) + ->andWhere($query->expr()->eq('share_with', $query->createNamedParameter($roomToken))); + + $cursor = $query->executeQuery(); + $ids = []; + while ($row = $cursor->fetch()) { + $ids[] = (int)$row['id']; + } + $cursor->closeCursor(); + + if (!empty($ids)) { + $chunks = array_chunk($ids, 100); + foreach ($chunks as $chunk) { + $delete->delete('share') + ->where($delete->expr()->eq('share_type', $delete->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($delete->expr()->in('share_with', $delete->createNamedParameter($user))) + ->andWhere($delete->expr()->in('parent', $delete->createNamedParameter($chunk, IQueryBuilder::PARAM_INT_ARRAY))); + $delete->executeStatement(); + } + } + } + } + + /** + * Get all the shares in this provider returned as iterable to reduce memory + * overhead + * + * @return iterable + * @since 18.0.0 + */ + #[\Override] + public function getAllShares(): iterable { + $qb = $this->dbConnection->getQueryBuilder(); + + $qb->select('*') + ->from('share') + ->where( + $qb->expr()->orX( + $qb->expr()->eq('share_type', $qb->createNamedParameter(IShare::TYPE_ROOM)) + ) + ); + + $cursor = $qb->executeQuery(); + while ($data = $cursor->fetch()) { + $share = $this->createShareObject($data); + + yield $share; + } + $cursor->closeCursor(); + } +} diff --git a/lib/Signaling/BackendNotifier.php b/lib/Signaling/BackendNotifier.php new file mode 100644 index 0000000..0883bd5 --- /dev/null +++ b/lib/Signaling/BackendNotifier.php @@ -0,0 +1,542 @@ +clientService->newClient(); + try { + $response = $client->post($url, $params); + + if (!$this->signalingManager->isCompatibleSignalingServer($response)) { + throw new \RuntimeException('Signaling server needs to be updated to be compatible with this version of Talk'); + } + + return $response; + } catch (ConnectException $e) { + if ($retries > 1) { + $this->logger->error('Failed to send message to signaling server, ' . $retries . ' retries left!', ['exception' => $e]); + return $this->doRequest($url, $params, $retries - 1); + } + + $this->logger->error('Failed to send message to signaling server, giving up!', ['exception' => $e]); + throw $e; + } catch (ServerException $e) { + if ($retries > 1) { + $this->logger->error('Failed to send message to signaling server, ' . $retries . ' retries left!', ['exception' => $e]); + return $this->doRequest($url, $params, $retries - 1); + } + + $this->logger->error('Failed to send message to signaling server, giving up!', ['exception' => $e]); + if ($e->hasResponse()) { + return new Response($e->getResponse()); + } + throw $e; + } catch (\Exception $e) { + $this->logger->error('Failed to send message to signaling server', ['exception' => $e]); + throw $e; + } + } + + /** + * Perform a request to the signaling backend. + * + * @param Room $room + * @param array $data + * @return ?IResponse + * @throws \Exception + */ + private function backendRequest(Room $room, array $data): ?IResponse { + if ($this->config->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return null; + } + + // FIXME some need to go to all HPBs, but that doesn't scale, so bad luck for now :( + $signaling = $this->signalingManager->getSignalingServerForConversation($room); + $signaling['server'] = rtrim($signaling['server'], '/'); + + $url = '/api/v1/room/' . $room->getToken(); + $url = $signaling['server'] . $url; + + if (str_starts_with($url, 'ws://')) { + $url = 'http://' . substr($url, 5); + } elseif (str_starts_with($url, 'wss://')) { + $url = 'https://' . substr($url, 6); + } + + $body = json_encode($data); + $headers = [ + 'Content-Type' => 'application/json', + ]; + + $random = $this->secureRandom->generate(64); + $hash = hash_hmac('sha256', $random . $body, $this->config->getSignalingSecret()); + $headers['Spreed-Signaling-Random'] = $random; + $headers['Spreed-Signaling-Checksum'] = $hash; + $headers['Spreed-Signaling-Backend'] = $this->urlGenerator->getAbsoluteURL(''); + + $params = [ + 'headers' => $headers, + 'body' => $body, + 'nextcloud' => [ + 'allow_local_address' => true, + ], + ]; + if (empty($signaling['verify'])) { + $params['verify'] = false; + } + return $this->doRequest($url, $params); + } + + /** + * The given users are now invited to a room. + * + * @param Room $room + * @param Attendee[] $attendees + * @throws \Exception + */ + public function roomInvited(Room $room, array $attendees): void { + $userIds = []; + foreach ($attendees as $attendee) { + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $userIds[] = $attendee->getActorId(); + } + } + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'invite', + 'invite' => [ + 'userids' => $userIds, + // TODO(fancycode): We should try to get rid of 'alluserids' and + // find a better way to notify existing users to update the room. + 'alluserids' => $this->participantService->getParticipantUserIdsAndFederatedUserCloudIds($room), + 'properties' => $room->getPropertiesForSignaling('', false), + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Now invited to {token}: {users} ({duration})', [ + 'token' => $room->getToken(), + 'users' => print_r($userIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The given users are no longer invited to a room. + * + * @param Room $room + * @param Attendee[] $attendees + * @throws \Exception + */ + public function roomsDisinvited(Room $room, array $attendees): void { + $allUserIds = $this->participantService->getParticipantUserIdsAndFederatedUserCloudIds($room); + sort($allUserIds); + $userIds = []; + foreach ($attendees as $attendee) { + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $userIds[] = $attendee->getActorId(); + } + } + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'disinvite', + 'disinvite' => [ + 'userids' => $userIds, + // TODO(fancycode): We should try to get rid of 'alluserids' and + // find a better way to notify existing users to update the room. + 'alluserids' => $allUserIds, + 'properties' => $room->getPropertiesForSignaling('', false), + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('No longer invited to {token}: {users} ({duration})', [ + 'token' => $room->getToken(), + 'users' => print_r($userIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The given sessions have been removed from a room. + * + * @param Room $room + * @param string[] $sessionIds + * @throws \Exception + */ + public function roomSessionsRemoved(Room $room, array $sessionIds): void { + $allUserIds = $this->participantService->getParticipantUserIdsAndFederatedUserCloudIds($room); + sort($allUserIds); + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'disinvite', + 'disinvite' => [ + 'sessionids' => $sessionIds, + // TODO(fancycode): We should try to get rid of 'alluserids' and + // find a better way to notify existing users to update the room. + 'alluserids' => $allUserIds, + 'properties' => $room->getPropertiesForSignaling('', false), + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Removed from {token}: {users} ({duration})', [ + 'token' => $room->getToken(), + 'users' => print_r($sessionIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The given room has been modified. + * + * @param Room $room + * @throws \Exception + */ + public function roomModified(Room $room): void { + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'update', + 'update' => [ + // Message not sent for federated users, as they will receive + // the message from their federated Nextcloud server once the + // property change is propagated. + 'userids' => $this->participantService->getParticipantUserIds($room), + 'properties' => $room->getPropertiesForSignaling(''), + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Room modified: {token} ({duration})', [ + 'token' => $room->getToken(), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The given room has been deleted. + * + * @param Room $room + * @param string[] $userIds + * @throws \Exception + */ + public function roomDeleted(Room $room, array $userIds): void { + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'delete', + 'delete' => [ + 'userids' => $userIds, + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Room deleted: {token} ({duration})', [ + 'token' => $room->getToken(), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The given participants should switch to the given room. + * + * @param Room $room + * @param string $switchToRoomToken + * @param string[] $sessionIds + * @throws \Exception + */ + public function switchToRoom(Room $room, string $switchToRoomToken, array $sessionIds): void { + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'switchto', + 'switchto' => [ + 'roomid' => $switchToRoomToken, + 'sessions' => $sessionIds, + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Switch to room: {token} {roomid} {sessions} ({duration})', [ + 'token' => $room->getToken(), + 'roomid' => $switchToRoomToken, + 'sessions' => print_r($sessionIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The participant list of the given room has been modified. + * + * @param Room $room + * @param string[] $sessionIds + * @throws \Exception + */ + public function participantsModified(Room $room, array $sessionIds): void { + $changed = []; + $users = []; + $participants = $this->participantService->getSessionsAndParticipantsForRoom($room); + foreach ($participants as $participant) { + $attendee = $participant->getAttendee(); + if ($attendee->getActorType() !== Attendee::ACTOR_USERS + && $attendee->getActorType() !== Attendee::ACTOR_GUESTS + && $attendee->getActorType() !== Attendee::ACTOR_EMAILS + && $attendee->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + continue; + } + + $data = [ + 'inCall' => Participant::FLAG_DISCONNECTED, + 'lastPing' => 0, + 'sessionId' => '0', + 'participantType' => $attendee->getParticipantType(), + 'participantPermissions' => Attendee::PERMISSIONS_CUSTOM, + 'displayName' => $attendee->getDisplayName(), + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + ]; + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $data['userId'] = $attendee->getActorId(); + } + + $session = $participant->getSession(); + if ($session instanceof Session) { + $data['inCall'] = $session->getInCall(); + $data['lastPing'] = $session->getLastPing(); + $data['sessionId'] = $session->getSessionId(); + $data['participantPermissions'] = $participant->getPermissions(); + $users[] = $data; + + if (\in_array($session->getSessionId(), $sessionIds, true)) { + $data['permissions'] = []; + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_AUDIO) { + $data['permissions'][] = 'publish-audio'; + } + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_VIDEO) { + $data['permissions'][] = 'publish-video'; + } + if ($participant->getPermissions() & Attendee::PERMISSIONS_PUBLISH_SCREEN) { + $data['permissions'][] = 'publish-screen'; + } + if ($participant->hasModeratorPermissions(false)) { + $data['permissions'][] = 'control'; + } + $changed[] = $data; + } + } else { + $users[] = $data; + } + } + + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'participants', + 'participants' => [ + 'changed' => $changed, + 'users' => $users + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Room participants modified: {token} {users} ({duration})', [ + 'token' => $room->getToken(), + 'users' => print_r($sessionIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * The "in-call" status of the given session ids has changed.. + * + * @param Room $room + * @param int $flags + * @param string[] $sessionIds + * @param bool $changeAll + * @throws \Exception + */ + public function roomInCallChanged(Room $room, int $flags, array $sessionIds, bool $changeAll = false): void { + if ($changeAll) { + $data = [ + 'incall' => $flags, + 'all' => true + ]; + } else { + $changed = []; + $users = []; + + $participants = $this->participantService->getParticipantsForAllSessions($room); + foreach ($participants as $participant) { + $session = $participant->getSession(); + if (!$session instanceof Session) { + continue; + } + + $attendee = $participant->getAttendee(); + if ($attendee->getActorType() !== Attendee::ACTOR_USERS + && $attendee->getActorType() !== Attendee::ACTOR_GUESTS + && $attendee->getActorType() !== Attendee::ACTOR_EMAILS + && $attendee->getActorType() !== Attendee::ACTOR_FEDERATED_USERS) { + continue; + } + + $data = [ + 'inCall' => $session->getInCall(), + 'lastPing' => $session->getLastPing(), + 'sessionId' => $session->getSessionId(), + 'nextcloudSessionId' => $session->getSessionId(), + 'participantType' => $attendee->getParticipantType(), + 'participantPermissions' => $participant->getPermissions(), + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + ]; + if ($attendee->getActorType() === Attendee::ACTOR_USERS) { + $data['userId'] = $attendee->getActorId(); + } + + if ($session->getInCall() !== Participant::FLAG_DISCONNECTED) { + $users[] = $data; + } + + if (\in_array($session->getSessionId(), $sessionIds, true)) { + $changed[] = $data; + } + } + + $data = [ + 'incall' => $flags, + 'changed' => $changed, + 'users' => $users, + ]; + } + + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'incall', + 'incall' => $data, + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Room in-call status changed: {token} {flags} {users} ({duration})', [ + 'token' => $room->getToken(), + 'flags' => $flags, + 'users' => $changeAll ? 'all' : print_r($sessionIds, true), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } + + /** + * Send dial-out requests to the HPB + * + * @param string|bool $callerNumber Send the call anonymous when false, default number when true otherwise the string + * @throws \Exception + */ + public function dialOutToAttendee(Room $room, Attendee $attendee, string|bool $callerNumber): ?string { + $start = microtime(true); + $dialoutData = [ + 'type' => 'dialout', + 'dialout' => [ + 'number' => $attendee->getPhoneNumber(), + 'options' => [ + 'attendeeId' => $attendee->getId(), + 'actorType' => $attendee->getActorType(), + 'actorId' => $attendee->getActorId(), + ] + ], + ]; + if ($callerNumber === false) { + $dialoutData['dialout']['options']['anonymous'] = true; + } elseif (is_string($callerNumber)) { + $dialoutData['dialout']['options']['caller'] = $callerNumber; + } + $response = $this->backendRequest($room, $dialoutData); + + if ($response === null) { + $this->logger->debug('Room dial out response was NULL'); + return null; + } + + $duration = microtime(true) - $start; + $this->logger->debug('Room dial out: {token} {number} ({duration})', [ + 'token' => $room->getToken(), + 'number' => $attendee->getPhoneNumber(), + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + + return (string)$response->getBody(); + } + + /** + * Send a message to all sessions currently joined in a room. The message + * will be received by "processRoomMessageEvent" in "signaling.js". + * + * @param Room $room + * @param array $message + * @throws \Exception + */ + public function sendRoomMessage(Room $room, array $message): void { + $start = microtime(true); + $this->backendRequest($room, [ + 'type' => 'message', + 'message' => [ + 'data' => $message, + ], + ]); + $duration = microtime(true) - $start; + $this->logger->debug('Send room message: {token} {message} ({duration})', [ + 'token' => $room->getToken(), + 'message' => $message, + 'duration' => sprintf('%.2f', $duration), + 'app' => 'spreed-hpb', + ]); + } +} diff --git a/lib/Signaling/Listener.php b/lib/Signaling/Listener.php new file mode 100644 index 0000000..f08b57f --- /dev/null +++ b/lib/Signaling/Listener.php @@ -0,0 +1,607 @@ + + */ +class Listener implements IEventListener { + public const EXTERNAL_SIGNALING_PROPERTIES = [ + ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_MODE, + ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_STATUS, + ARoomModifiedEvent::PROPERTY_CALL_RECORDING, + ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, + ARoomModifiedEvent::PROPERTY_DESCRIPTION, + ARoomModifiedEvent::PROPERTY_LISTABLE, + ARoomModifiedEvent::PROPERTY_LOBBY, + ARoomModifiedEvent::PROPERTY_NAME, + ARoomModifiedEvent::PROPERTY_PASSWORD, + ARoomModifiedEvent::PROPERTY_READ_ONLY, + ARoomModifiedEvent::PROPERTY_SIP_ENABLED, + ARoomModifiedEvent::PROPERTY_TYPE, + ]; + + protected bool $pauseRoomModifiedListener = false; + + public function __construct( + protected Config $talkConfig, + protected Messages $internalSignaling, + protected BackendNotifier $externalSignaling, + protected Manager $manager, + protected ParticipantService $participantService, + protected SessionService $sessionService, + protected ITimeFactory $timeFactory, + protected MessageParser $messageParser, + protected ThreadService $threadService, + protected IFactory $l10nFactory, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + $this->handleInternalSignaling($event); + } else { + $this->handleExternalSignaling($event); + } + } + + protected function handleInternalSignaling(Event $event): void { + match (get_class($event)) { + BeforeSessionLeftRoomEvent::class, + BeforeAttendeeRemovedEvent::class, + GuestJoinedRoomEvent::class, + BeforeRoomDeletedEvent::class, + UserJoinedRoomEvent::class => $this->refreshParticipantList($event->getRoom()), + ParticipantModifiedEvent::class => $this->refreshParticipantListParticipantModified($event), // in_call, name, permissions + RoomModifiedEvent::class => $this->refreshParticipantListRoomModified($event), // *_permissions + default => null, // Ignoring events subscribed by the external signaling + }; + } + + protected function refreshParticipantList(Room $room): void { + $this->internalSignaling->addMessageForAllParticipants($room, 'refresh-participant-list'); + } + + protected function refreshParticipantListParticipantModified(ParticipantModifiedEvent $event): void { + if (!in_array($event->getProperty(), [ + AParticipantModifiedEvent::PROPERTY_IN_CALL, + AParticipantModifiedEvent::PROPERTY_NAME, + AParticipantModifiedEvent::PROPERTY_PERMISSIONS, + ], true)) { + return; + } + + $this->refreshParticipantList($event->getRoom()); + } + + protected function refreshParticipantListRoomModified(RoomModifiedEvent $event): void { + if (!in_array($event->getProperty(), [ + ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, + ], true)) { + return; + } + + $this->refreshParticipantList($event->getRoom()); + } + + protected function handleExternalSignaling(Event $event): void { + match (get_class($event)) { + RoomModifiedEvent::class, + LobbyModifiedEvent::class => $this->notifyRoomModified($event), + RoomExtendedEvent::class => $this->notifyRoomExtended($event), + BeforeRoomSyncedEvent::class => $this->pauseRoomModifiedListener(), + RoomSyncedEvent::class => $this->notifyRoomSynced($event), + BeforeRoomDeletedEvent::class => $this->notifyBeforeRoomDeleted($event), + CallEndedForEveryoneEvent::class => $this->notifyCallEndedForEveryone($event), + GuestsCleanedUpEvent::class => $this->notifyGuestsCleanedUp($event), + AttendeesAddedEvent::class => $this->notifyAttendeesAdded($event), + AttendeeRemovedEvent::class => $this->notifyAttendeeRemoved($event), + AttendeesRemovedEvent::class => $this->notifyAttendeesRemoved($event), + ParticipantModifiedEvent::class => $this->notifyParticipantModified($event), + SessionLeftRoomEvent::class => $this->notifySessionLeftRoom($event), + ChatMessageSentEvent::class, + SystemMessageSentEvent::class, + SystemMessagesMultipleSentEvent::class => $this->notifyMessageSent($event), + ReactionAddedEvent::class, + ReactionRemovedEvent::class => $this->notifyReactionSent($event), + default => null, // Ignoring events subscribed by the internal signaling + }; + } + + protected function pauseRoomModifiedListener(): void { + $this->pauseRoomModifiedListener = true; + } + + protected function notifyRoomModified(ARoomModifiedEvent $event): void { + if (!in_array($event->getProperty(), self::EXTERNAL_SIGNALING_PROPERTIES, true)) { + return; + } + + if ($event->getProperty() === ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS) { + $this->notifyRoomPermissionsModified($event); + // The room permission itself does not need a signaling message anymore + return; + } + + if ($event->getProperty() === ARoomModifiedEvent::PROPERTY_CALL_RECORDING) { + $this->notifyRoomRecordingModified($event); + } + if ($event->getProperty() === ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_STATUS) { + $this->notifyBreakoutRoomStatusModified($event); + } + $this->externalSignaling->roomModified($event->getRoom()); + } + + protected function notifyRoomSynced(RoomSyncedEvent $event): void { + $this->pauseRoomModifiedListener = false; + if (empty(array_intersect($event->getProperties(), self::EXTERNAL_SIGNALING_PROPERTIES))) { + return; + } + + if (in_array(ARoomModifiedEvent::PROPERTY_DEFAULT_PERMISSIONS, $event->getProperties(), true)) { + $this->notifyRoomPermissionsModified($event); + } + + if (in_array(ARoomModifiedEvent::PROPERTY_CALL_RECORDING, $event->getProperties(), true)) { + $this->notifyRoomRecordingModified($event); + } + + if (in_array(ARoomModifiedEvent::PROPERTY_BREAKOUT_ROOM_STATUS, $event->getProperties(), true)) { + $this->notifyBreakoutRoomStatusModified($event); + } + + $this->externalSignaling->roomModified($event->getRoom()); + } + + protected function notifyRoomRecordingModified(ARoomEvent $event): void { + $room = $event->getRoom(); + $message = [ + 'type' => 'recording', + 'recording' => [ + 'status' => $room->getCallRecording(), + ], + ]; + + $this->externalSignaling->sendRoomMessage($room, $message); + } + + protected function notifyCallEndedForEveryone(CallEndedForEveryoneEvent $event): void { + $sessionIds = $event->getSessionIds(); + + if (empty($sessionIds)) { + return; + } + + $this->externalSignaling->roomInCallChanged( + $event->getRoom(), + $event->getCallFlag(), + [], + true + ); + } + + protected function notifyBeforeRoomDeleted(BeforeRoomDeletedEvent $event): void { + $room = $event->getRoom(); + $this->externalSignaling->roomDeleted($room, $this->participantService->getParticipantUserIds($room)); + } + + protected function notifyGuestsCleanedUp(GuestsCleanedUpEvent $event): void { + // TODO: The list of removed session ids should be passed through the event + // so the signaling server can optimize forwarding the message. + $sessionIds = []; + $this->externalSignaling->participantsModified($event->getRoom(), $sessionIds); + } + + protected function notifyParticipantModified(AParticipantModifiedEvent $event): void { + if ($event->getProperty() === AParticipantModifiedEvent::PROPERTY_TYPE) { + // TODO remove handler with "roomModified" in favour of handler with + // "participantsModified" once the clients no longer expect a + // "roomModified" message for participant type changes. + $this->externalSignaling->roomModified($event->getRoom()); + } + + if ($event->getProperty() === AParticipantModifiedEvent::PROPERTY_NAME) { + $this->notifyParticipantNameModified($event); + } + + if ($event->getProperty() === AParticipantModifiedEvent::PROPERTY_IN_CALL) { + $this->notifyParticipantInCallModified($event); + } + + if ($event->getProperty() === AParticipantModifiedEvent::PROPERTY_TYPE + || $event->getProperty() === AParticipantModifiedEvent::PROPERTY_PERMISSIONS) { + $this->notifyParticipantTypeOrPermissionsModified($event); + } + } + + protected function notifyParticipantNameModified(AParticipantModifiedEvent $event): void { + $sessionIds = []; + $sessions = $this->sessionService->getAllSessionsForAttendee($event->getParticipant()->getAttendee()); + foreach ($sessions as $session) { + $sessionIds[] = $session->getSessionId(); + } + + if (!empty($sessionIds)) { + $this->externalSignaling->participantsModified($event->getRoom(), $sessionIds); + } + } + + protected function notifyParticipantTypeOrPermissionsModified(AParticipantModifiedEvent $event): void { + $sessionIds = []; + + // If the participant is not active in the room the "participants" + // request will be sent anyway, although with an empty "changed" + // property. + $sessions = $this->sessionService->getAllSessionsForAttendee($event->getParticipant()->getAttendee()); + foreach ($sessions as $session) { + $sessionIds[] = $session->getSessionId(); + } + + $this->externalSignaling->participantsModified($event->getRoom(), $sessionIds); + } + + protected function notifyRoomPermissionsModified(ARoomEvent $event): void { + $sessionIds = []; + + // Setting the room permissions resets the permissions of all + // participants, even those with custom attendee permissions. + + // FIXME This approach does not scale, as the update message for all + // the sessions in a conversation can exceed the allowed size of the + // request in conversations with a large number of participants. + // However, note that a single message with the general permissions + // to be set on all participants can not be sent either, as the + // general permissions could be overriden by custom attendee + // permissions in specific participants. + $participants = $this->participantService->getSessionsAndParticipantsForRoom($event->getRoom()); + foreach ($participants as $participant) { + $session = $participant->getSession(); + if ($session) { + $sessionIds[] = $session->getSessionId(); + } + } + + $this->externalSignaling->participantsModified($event->getRoom(), $sessionIds); + } + + protected function notifyAttendeesAdded(AttendeesAddedEvent $event): void { + $this->externalSignaling->roomInvited($event->getRoom(), $event->getAttendees()); + } + + protected function notifyAttendeesRemoved(AttendeesRemovedEvent $event): void { + $this->externalSignaling->roomsDisinvited($event->getRoom(), $event->getAttendees()); + } + + protected function notifyAttendeeRemoved(AttendeeRemovedEvent $event): void { + $sessionIds = []; + + $sessions = $event->getSessions(); + foreach ($sessions as $session) { + $sessionIds[] = $session->getSessionId(); + } + + if (!empty($sessionIds)) { + $this->externalSignaling->roomSessionsRemoved($event->getRoom(), $sessionIds); + } + } + + protected function notifySessionLeftRoom(SessionLeftRoomEvent $event): void { + $sessionIds = []; + if ($event->getParticipant()->getSession()) { + // If a previous duplicated session is being removed it must be + // notified to the external signaling server. Otherwise, only for + // guests disconnecting is "leaving" and therefor should trigger a + // disinvite. + $attendeeParticipantType = $event->getParticipant()->getAttendee()->getParticipantType(); + if ($event->isRejoining() + || $attendeeParticipantType === Participant::GUEST + || $attendeeParticipantType === Participant::GUEST_MODERATOR) { + $sessionIds[] = $event->getParticipant()->getSession()->getSessionId(); + $this->externalSignaling->roomSessionsRemoved($event->getRoom(), $sessionIds); + } + } + } + + protected function notifyParticipantInCallModified(AParticipantModifiedEvent $event): void { + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_END_FOR_EVERYONE)) { + // If everyone is disconnected, we will not do O(n) requests. + // Instead, the listener of CallEndedForEveryoneEvent + // will send all sessions to the HPB with 1 request. + return; + } + + $sessionIds = []; + if ($event->getParticipant()->getSession()) { + $sessionIds[] = $event->getParticipant()->getSession()->getSessionId(); + } + + if (!empty($sessionIds)) { + $this->externalSignaling->roomInCallChanged( + $event->getRoom(), + $event->getNewValue(), + $sessionIds + ); + } + } + + protected function notifyBreakoutRoomStatusModified(ARoomEvent $event): void { + $room = $event->getRoom(); + if ($room->getBreakoutRoomStatus() === BreakoutRoom::STATUS_STARTED) { + $this->notifyBreakoutRoomStarted($room); + } else { + $this->notifyBreakoutRoomStopped($room); + } + } + + protected function notifyBreakoutRoomStarted(Room $room): void { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $room->getToken(), true); + + $parentRoomParticipants = $this->participantService->getSessionsAndParticipantsForRoom($room); + + foreach ($breakoutRooms as $breakoutRoom) { + $sessionIds = []; + + $breakoutRoomParticipants = $this->participantService->getParticipantsForRoom($breakoutRoom); + foreach ($breakoutRoomParticipants as $breakoutRoomParticipant) { + foreach ($this->getSessionIdsForNonModeratorsMatchingParticipant($breakoutRoomParticipant, $parentRoomParticipants) as $sessionId) { + $sessionIds[] = $sessionId; + } + } + + if (!empty($sessionIds)) { + $this->externalSignaling->switchToRoom($room, $breakoutRoom->getToken(), $sessionIds); + } + } + } + + protected function notifyRoomExtended(RoomExtendedEvent $event): void { + $room = $event->getRoom(); + + if ($room->getCallFlag() === Participant::FLAG_DISCONNECTED) { + return; + } + + $timeout = $this->timeFactory->getTime() - Session::SESSION_TIMEOUT; + $participants = $this->participantService->getParticipantsInCall($room, $timeout); + + $sessionIds = []; + foreach ($participants as $participant) { + if ($participant->getSession() instanceof Session) { + $sessionIds[] = $participant->getSession()->getSessionId(); + } + } + + $newRoom = $event->getNewRoom(); + $this->externalSignaling->switchToRoom($room, $newRoom->getToken(), $sessionIds); + } + + /** + * @param Participant $targetParticipant + * @param Participant[] $participants + * @return string[] + */ + protected function getSessionIdsForNonModeratorsMatchingParticipant(Participant $targetParticipant, array $participants): array { + $sessionIds = []; + + foreach ($participants as $participant) { + if ($participant->getAttendee()->getActorType() === $targetParticipant->getAttendee()->getActorType() + && $participant->getAttendee()->getActorId() === $targetParticipant->getAttendee()->getActorId() + && !$participant->hasModeratorPermissions()) { + $session = $participant->getSession(); + if ($session) { + $sessionIds[] = $session->getSessionId(); + } + } + } + + return $sessionIds; + } + + protected function notifyBreakoutRoomStopped(Room $room): void { + $breakoutRooms = $this->manager->getMultipleRoomsByObject(BreakoutRoom::PARENT_OBJECT_TYPE, $room->getToken(), true); + + foreach ($breakoutRooms as $breakoutRoom) { + $sessionIds = []; + + $participants = $this->participantService->getSessionsAndParticipantsForRoom($breakoutRoom); + foreach ($participants as $participant) { + $session = $participant->getSession(); + if ($session) { + $sessionIds[] = $session->getSessionId(); + } + } + + if (!empty($sessionIds)) { + $this->externalSignaling->switchToRoom($breakoutRoom, $room->getToken(), $sessionIds); + } + } + } + + protected function notifyMessageSent(AMessageSentEvent $event): void { + if (!$this->talkConfig->isChatRelayEnabled()) { + if ($event instanceof ASystemMessageSentEvent && $event->shouldSkipLastActivityUpdate()) { + return; + } + + $room = $event->getRoom(); + $message = [ + 'type' => 'chat', + 'chat' => [ + 'refresh' => true, + ], + ]; + $this->externalSignaling->sendRoomMessage($room, $message); + return; + } + + $comment = $event->getComment(); + if ($event instanceof ASystemMessageSentEvent && $event->shouldSkipLastActivityUpdate()) { + $messageDecoded = json_decode($comment->getMessage(), true); + $messageType = $messageDecoded['message'] ?? ''; + if ($messageType !== 'message_deleted' && $messageType !== 'message_edited') { + return; + } + } + + $room = $event->getRoom(); + $data = [ + 'type' => 'chat', + 'chat' => [ + 'refresh' => true, + ], + ]; + + if ($event instanceof ASystemMessageSentEvent && $comment->getVerb() === ChatManager::VERB_SYSTEM && $event->shouldSkipLastActivityUpdate() === false) { + $this->externalSignaling->sendRoomMessage($room, $data); + return; + } + + $l10n = $this->l10nFactory->get(Application::APP_ID, 'en'); + $message = $this->messageParser->createMessage($event->getRoom(), null, $comment, $l10n); + $this->messageParser->parseMessage($message); + if ($message->getVisibility() === false) { + $this->externalSignaling->sendRoomMessage($room, $data); + return; + } + + $thread = null; + if (!isset($messageType)) { + $threadId = (int)$comment->getTopmostParentId() ?: $comment->getId(); + try { + $thread = $this->threadService->findByThreadId($room->getId(), (int)$threadId); + } catch (DoesNotExistException) { + } + } + + $data['chat']['comment'] = $message->toArray('json', $thread); + + if ($event instanceof ASystemMessageSentEvent && $event->getParent() !== null) { + $parent = $event->getParent(); + $parentMessage = $this->messageParser->createMessage($event->getRoom(), null, $parent, $l10n); + $this->messageParser->parseMessage($parentMessage); + $data['chat']['comment']['parent'] = $parentMessage->toArray('json', $thread); + } + + $this->externalSignaling->sendRoomMessage($room, $data); + } + + protected function notifyReactionSent(AReactionEvent $event): void { + if (!$this->talkConfig->isChatRelayEnabled()) { + return; + } + + $room = $event->getRoom(); + $data = [ + 'type' => 'chat', + 'chat' => [ + 'refresh' => true, + ], + ]; + + $comment = $event->getMessage(); + $messageType = $event instanceof ReactionAddedEvent ? ChatManager::VERB_REACTION : 'reaction_revoked'; + + $threadId = (int)$comment->getTopmostParentId() ?: $comment->getId(); + try { + $thread = $this->threadService->findByThreadId($room->getId(), (int)$threadId); + } catch (DoesNotExistException) { + $thread = null; + } + + $reactions = $comment->getReactions(); + if ($event instanceof ReactionRemovedEvent) { + if (array_key_exists($event->getReaction(), $reactions) && $reactions[$event->getReaction()] > 1) { + --$reactions[$event->getReaction()]; + } else { + unset($reactions[$event->getReaction()]); + } + } elseif ($event instanceof ReactionAddedEvent) { + if (array_key_exists($event->getReaction(), $reactions)) { + ++$reactions[$event->getReaction()]; + } else { + $reactions[$event->getReaction()] = 1; + } + } + + $comment->setReactions($reactions); + $l10n = $this->l10nFactory->get(Application::APP_ID, 'en'); + $message = $this->messageParser->createMessage($event->getRoom(), null, $comment, $l10n); + $this->messageParser->parseMessage($message); + // Build reaction message data + $data['chat']['comment'] = [ + 'id' => $event->getReactionMessage()?->getId(), + 'token' => $event->getRoom()->getToken(), + 'actorType' => $event->getActorType(), + 'actorId' => $event->getActorId(), + 'actorDisplayName' => $event->getActorDisplayName(), + 'timestamp' => $this->timeFactory->getTime(), + 'message' => $event->getReaction(), + 'messageParameters' => [], + 'systemMessage' => $messageType, + 'messageType' => ChatManager::VERB_SYSTEM, + 'isReplyable' => false, + 'referenceId' => '', + 'reactions' => [], + 'markdown' => false , + 'expirationTimestamp' => $message->getExpirationDateTime()?->getTimestamp(), // base on parent post timestamp + room expiration + 'threadId' => $threadId, + ]; + + $data['chat']['comment']['parent'] = $message->toArray('json', $thread); + $this->externalSignaling->sendRoomMessage($room, $data); + } +} diff --git a/lib/Signaling/Manager.php b/lib/Signaling/Manager.php new file mode 100644 index 0000000..5582468 --- /dev/null +++ b/lib/Signaling/Manager.php @@ -0,0 +1,263 @@ +cache = $cacheFactory->createDistributed(CachePrefix::SIGNALING_ASSIGNED_SERVER); + } + + /** + * @param int $serverId + * @return array{status: Http::STATUS_OK, data: array{version: string, warning?: string, features?: non-empty-list}}|array{status: Http::STATUS_INTERNAL_SERVER_ERROR, data: array{error: string, version?: string}} + * @throws \OutOfBoundsException When the serverId is not found + */ + public function checkServerCompatibility(int $serverId): array { + $signalingServers = $this->talkConfig->getSignalingServers(); + if (empty($signalingServers) || !isset($signalingServers[$serverId])) { + throw new \OutOfBoundsException(); + } + + $url = rtrim($signalingServers[$serverId]['server'], '/'); + $url = strtolower($url); + + if (str_starts_with($url, 'wss://')) { + $url = 'https://' . substr($url, 6); + } + + if (str_starts_with($url, 'ws://')) { + $url = 'http://' . substr($url, 5); + } + + $verifyServer = (bool)$signalingServers[$serverId]['verify']; + + if ($verifyServer && str_contains($url, 'https://')) { + $expiration = $this->certificateService->getCertificateExpirationInDays($url); + + if ($expiration < 0) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'CERTIFICATE_EXPIRED', + ], + ]; + } + } + + $client = $this->clientService->newClient(); + try { + $timeBefore = $this->timeFactory->getTime(); + $response = $client->get($url . '/api/v1/welcome', [ + 'verify' => $verifyServer, + 'nextcloud' => [ + 'allow_local_address' => true, + ], + ]); + $timeAfter = $this->timeFactory->getTime(); + + $body = $response->getBody(); + $data = json_decode($body, true); + + if (!is_array($data)) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'JSON_INVALID', + ], + ]; + } + + if (!isset($data['version'])) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'UPDATE_REQUIRED', + 'version' => '', + ], + ]; + } + + if (!$this->isCompatibleSignalingServer($response)) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'UPDATE_REQUIRED', + 'version' => $data['version'] ?? '', + ], + ]; + } + + $responseTime = $this->timeFactory->getDateTime($response->getHeader('date'))->getTimestamp(); + if (($timeBefore - Config::ALLOWED_BACKEND_TIMEOFFSET) > $responseTime + || ($timeAfter + Config::ALLOWED_BACKEND_TIMEOFFSET) < $responseTime) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'TIME_OUT_OF_SYNC', + ], + ]; + } + + $missingFeatures = $this->getSignalingServerMissingFeatures($response); + if (!empty($missingFeatures)) { + return [ + 'status' => Http::STATUS_OK, + 'data' => [ + 'warning' => 'UPDATE_OPTIONAL', + 'features' => $missingFeatures, + 'version' => $data['version'], + ], + ]; + } + + return [ + 'status' => Http::STATUS_OK, + 'data' => [ + 'version' => $data['version'], + ], + ]; + } catch (ConnectException) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => 'CAN_NOT_CONNECT', + ], + ]; + } catch (\Exception $e) { + return [ + 'status' => Http::STATUS_INTERNAL_SERVER_ERROR, + 'data' => [ + 'error' => (string)$e->getCode(), + ], + ]; + } + + } + + public function isCompatibleSignalingServer(IResponse $response): bool { + $featureHeader = $response->getHeader(self::FEATURE_HEADER); + $features = explode(',', $featureHeader); + $features = array_map('trim', $features); + return in_array('audio-video-permissions', $features, true) + && in_array('federation', $features, true) + && in_array('incall-all', $features, true) + && in_array('hello-v2', $features, true) + && in_array('switchto', $features, true); + } + + /** + * @return list + */ + public function getSignalingServerMissingFeatures(IResponse $response): array { + $featureHeader = $response->getHeader(self::FEATURE_HEADER); + $features = explode(',', $featureHeader); + $features = array_map('trim', $features); + + $optionFeatures = [ + 'dialout', + 'join-features', + ]; + + if ($this->talkConfig->hasExperiment(Config::EXPERIMENTAL_CHAT_RELAY)) { + $optionFeatures[] = 'chat-relay'; + } + + return array_values(array_diff($optionFeatures, $features)); + } + + public function getSignalingServerLinkForConversation(?Room $room): string { + if ($this->talkConfig->getSignalingMode() === Config::SIGNALING_INTERNAL) { + return ''; + } + + return $this->getSignalingServerForConversation($room)['server']; + } + + public function getSignalingServerForConversation(?Room $room): array { + switch ($this->talkConfig->getSignalingMode()) { + case Config::SIGNALING_EXTERNAL: + return $this->getSignalingServerRandomly(); + case Config::SIGNALING_CLUSTER_CONVERSATION: + if (!$room instanceof Room) { + throw new \RuntimeException('Can not get conversation cluster HPB without conversation'); + } + return $this->getSignalingServerConversationCluster($room); + default: + throw new \RuntimeException('Unsupported signaling mode'); + } + } + + public function getSignalingServerRandomly(): array { + $servers = $this->talkConfig->getSignalingServers(); + try { + $serverId = random_int(0, count($servers) - 1); + return $servers[$serverId]; + } catch (\Exception $e) { + return $servers[0]; + } + } + + public function getSignalingServerConversationCluster(Room $room): array { + $serverId = $room->getAssignedSignalingServer(); + $servers = $this->talkConfig->getSignalingServers(); + + if ($serverId !== null && isset($servers[$serverId])) { + return $servers[$serverId]; + } + + try { + $serverIdToAssign = random_int(0, count($servers) - 1); + } catch (\Exception $e) { + $serverIdToAssign = 0; + } + + $hardcodedServers = $this->serverConfig->getSystemValue('talk_hardcoded_hpb', []); + if (isset($hardcodedServers[$room->getToken()])) { + $hardcodedServerId = $hardcodedServers[$room->getToken()]; + if (isset($servers[$hardcodedServerId])) { + $serverIdToAssign = $hardcodedServerId; + } + } + + $serverId = $this->cache->get($room->getToken()); + if ($serverId === null) { + $this->cache->set($room->getToken(), $serverIdToAssign); + $serverId = $serverIdToAssign; + $this->roomService->setAssignedSignalingServer($room, $serverId); + } + + return $servers[$serverId]; + } +} diff --git a/lib/Signaling/Messages.php b/lib/Signaling/Messages.php new file mode 100644 index 0000000..457cf38 --- /dev/null +++ b/lib/Signaling/Messages.php @@ -0,0 +1,148 @@ +db->getQueryBuilder(); + $delete->delete('talk_internalsignaling') + ->where($delete->expr()->in('recipient', $delete->createNamedParameter($sessionIds, IQueryBuilder::PARAM_STR_ARRAY))) + ->orWhere($delete->expr()->in('sender', $delete->createNamedParameter($sessionIds, IQueryBuilder::PARAM_STR_ARRAY))); + + $this->atomic(function () use ($delete): void { + $delete->executeStatement(); + }, $this->db); + } + + /** + * @param string $senderSessionId + * @param string $recipientSessionId + * @param string $message + */ + public function addMessage(string $senderSessionId, string $recipientSessionId, string $message): void { + $insert = $this->db->getQueryBuilder(); + $insert->insert('talk_internalsignaling') + ->values( + [ + 'sender' => $insert->createNamedParameter($senderSessionId), + 'recipient' => $insert->createNamedParameter($recipientSessionId), + 'timestamp' => $insert->createNamedParameter($this->timeFactory->getTime()), + 'message' => $insert->createNamedParameter($message), + ] + ); + $insert->executeStatement(); + } + + /** + * @param Room $room + * @param string $message + */ + public function addMessageForAllParticipants(Room $room, string $message): void { + $insert = $this->db->getQueryBuilder(); + $insert->insert('talk_internalsignaling') + ->values( + [ + 'sender' => $insert->createParameter('sender'), + 'recipient' => $insert->createParameter('recipient'), + 'timestamp' => $insert->createNamedParameter($this->timeFactory->getTime()), + 'message' => $insert->createNamedParameter($message), + ] + ); + + $participants = $this->participantService->getParticipantsForAllSessions($room); + $this->atomic(function () use ($participants, $insert): void { + foreach ($participants as $participant) { + $session = $participant->getSession(); + if ($session instanceof Session) { + $insert->setParameter('sender', $session->getSessionId()) + ->setParameter('recipient', $session->getSessionId()) + ->executeStatement(); + } + } + }, $this->db); + } + + /** + * Get messages and delete them afterwards + * + * To make sure we don't delete messages which we didn't return + * we do it with 1 second difference. This means you don't receive messages + * immediately, but the next polling is only 1 second later and will get the + * "new" message. + * + * @param string $sessionId + * @return list + */ + public function getAndDeleteMessages(string $sessionId): array { + $messages = []; + $time = $this->timeFactory->getTime() - 1; + + $query = $this->db->getQueryBuilder(); + $query->select('*') + ->from('talk_internalsignaling') + ->where($query->expr()->eq('recipient', $query->createNamedParameter($sessionId))) + ->andWhere($query->expr()->lte('timestamp', $query->createNamedParameter($time))) + ->orderBy('id', 'ASC'); + + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_internalsignaling') + ->where($delete->expr()->eq('recipient', $delete->createNamedParameter($sessionId))) + ->andWhere($delete->expr()->lte('timestamp', $delete->createNamedParameter($time))); + + $this->atomic(function () use (&$messages, $query, $delete): void { + $result = $query->executeQuery(); + + while ($row = $result->fetch()) { + $messages[] = ['type' => 'message', 'data' => $row['message']]; + } + $result->closeCursor(); + + $delete->executeStatement(); + }, $this->db); + + return $messages; + } + + /** + * Expires all signaling messages that are too old or invalid + * + * @param int $olderThan + */ + public function expireOlderThan(int $olderThan): void { + $time = $this->timeFactory->getTime() - $olderThan; + + $delete = $this->db->getQueryBuilder(); + $delete->delete('talk_internalsignaling') + ->where($delete->expr()->lt('timestamp', $delete->createNamedParameter($time))); + + $this->atomic(function () use ($delete): void { + $delete->executeStatement(); + }, $this->db); + } +} diff --git a/lib/Signaling/Responses/DialOut.php b/lib/Signaling/Responses/DialOut.php new file mode 100644 index 0000000..3a92678 --- /dev/null +++ b/lib/Signaling/Responses/DialOut.php @@ -0,0 +1,38 @@ + + */ +class Listener implements IEventListener { + + public function __construct( + protected IManager $statusManager, + ) { + } + + #[\Override] + public function handle(Event $event): void { + if ($event instanceof BeforeParticipantModifiedEvent) { + $this->beforeParticipantModified($event); + } + if ($event instanceof CallEndedForEveryoneEvent) { + $this->revertUserStatusOnEndCallForEveryone($event); + } + } + + protected function beforeParticipantModified(BeforeParticipantModifiedEvent $event): void { + if ($event->getParticipant()->getAttendee()->getActorType() !== Attendee::ACTOR_USERS) { + return; + } + + if ($event->getProperty() !== AParticipantModifiedEvent::PROPERTY_IN_CALL) { + return; + } + + if ($event->getDetail(AParticipantModifiedEvent::DETAIL_IN_CALL_END_FOR_EVERYONE)) { + // Do not revert the status with 3 queries per user. + // We will update it in one go at the end. + return; + } + + if ($event->getOldValue() === Participant::FLAG_DISCONNECTED && $event->getNewValue() !== Participant::FLAG_DISCONNECTED) { + $this->setUserStatus($event); + } elseif ($event->getOldValue() !== Participant::FLAG_DISCONNECTED && $event->getNewValue() === Participant::FLAG_DISCONNECTED) { + $this->revertUserStatusOnLeaveCall($event); + } + } + + protected function setUserStatus(BeforeParticipantModifiedEvent $event): void { + + $status = IUserStatus::BUSY; + + $userId = $event->getParticipant()->getAttendee()->getActorId(); + + $statuses = $this->statusManager->getUserStatuses([$userId]); + + if (isset($statuses[$userId])) { + if ($statuses[$userId]->getStatus() === IUserStatus::INVISIBLE) { + // If the user is invisible we do not overwrite the status + // with "in a call" which would be visible to any user on the + // instance opposed to users in the conversation the call is happening + return; + } + + if ($statuses[$userId]->getStatus() === IUserStatus::DND) { + $status = IUserStatus::DND; + } + } + + $this->statusManager->setUserStatus( + $userId, + 'call', + $status, + true + ); + } + + protected function revertUserStatusOnLeaveCall(BeforeParticipantModifiedEvent $event): void { + $this->statusManager->revertUserStatus($event->getParticipant()->getAttendee()->getActorId(), 'call', IUserStatus::BUSY); + } + + protected function revertUserStatusOnEndCallForEveryone(CallEndedForEveryoneEvent $event): void { + $userIds = $event->getUserIds(); + if (!empty($userIds)) { + $this->statusManager->revertMultipleUserStatus($userIds, 'call', IUserStatus::BUSY); + } + } +} diff --git a/lib/TInitialState.php b/lib/TInitialState.php new file mode 100644 index 0000000..6756edc --- /dev/null +++ b/lib/TInitialState.php @@ -0,0 +1,220 @@ + 'app', 'class' => 'nc-enable-screensharing-extension', 'name' => 'nextcloud-talk-enable-screensharing-extension', 'content' => 'true']); + + $signalingMode = $this->talkConfig->getSignalingMode(); + if ($signalingMode === Config::SIGNALING_CLUSTER_CONVERSATION + && !$this->memcacheFactory->isAvailable()) { + throw new HintException( + 'High-performance backend clustering is only supported with a distributed cache!' + ); + } + + $this->initialState->provideInitialState( + 'call_enabled', + ((int)$this->serverConfig->getAppValue('spreed', 'start_calls')) !== Room::START_CALL_NOONE + ); + + $this->initialState->provideInitialState( + 'signaling_mode', + $this->talkConfig->getSignalingMode() + ); + + $this->initialState->provideInitialState( + 'sip_dialin_info', + $this->talkConfig->getDialInInfo() + ); + + $this->initialState->provideInitialState( + 'grid_videos_limit', + $this->talkConfig->getGridVideosLimit() + ); + + $this->initialState->provideInitialState( + 'grid_videos_limit_enforced', + $this->talkConfig->getGridVideosLimitEnforced() + ); + + $this->initialState->provideInitialState( + 'federation_enabled', + $this->talkConfig->isFederationEnabled() + ); + + $this->initialState->provideInitialState( + 'default_permissions', + $this->talkConfig->getDefaultPermissions() + ); + } + + protected function publishInitialStateForUser(IUser $user, IRootFolder $rootFolder, IAppManager $appManager): void { + $this->publishInitialStateShared(); + + $this->initialState->provideInitialState( + 'start_conversations', + !$this->talkConfig->isNotAllowedToCreateConversations($user) + ); + + $this->initialState->provideInitialState( + 'circles_enabled', + $appManager->isEnabledForUser('circles', $user) + ); + + $this->initialState->provideInitialState( + 'guests_accounts_enabled', + $appManager->isEnabledForUser('guests', $user) + ); + + $this->initialState->provideInitialState( + 'read_status_privacy', + $this->talkConfig->getUserReadPrivacy($user->getUID()) + ); + + $this->initialState->provideInitialState( + 'typing_privacy', + $this->talkConfig->getUserTypingPrivacy($user->getUID()) + ); + + $this->initialState->provideInitialState( + 'play_sounds', + $this->serverConfig->getUserValue($user->getUID(), 'spreed', UserPreference::PLAY_SOUNDS, 'yes') === 'yes' + ); + + $this->initialState->provideInitialState( + 'force_enable_blur_filter', + $this->serverConfig->getUserValue($user->getUID(), 'theming', 'force_enable_blur_filter', '')); + + $this->initialState->provideInitialState( + 'user_group_ids', + $this->groupManager->getUserGroupIds($user) + ); + + $attachmentFolder = $this->talkConfig->getAttachmentFolder($user->getUID()); + $freeSpace = 0; + + if ($attachmentFolder) { + try { + $userFolder = $rootFolder->getUserFolder($user->getUID()); + + try { + try { + $folder = $userFolder->get($attachmentFolder); + if ($folder->isShared()) { + $this->logger->error('Talk attachment folder for user {userId} is set to a shared folder. Resetting to their root.', [ + 'userId' => $user->getUID(), + ]); + throw new NotPermittedException('Folder is shared'); + } + } catch (NotFoundException $e) { + $folder = $userFolder->newFolder($attachmentFolder); + } + + $freeSpace = $folder->getFreeSpace(); + } catch (NotPermittedException $e) { + $attachmentFolder = '/'; + $this->serverConfig->setUserValue($user->getUID(), 'spreed', UserPreference::ATTACHMENT_FOLDER, '/'); + $freeSpace = $userFolder->getFreeSpace(); + } + } catch (NoUserException $e) { + } + } + + $this->initialState->provideInitialState( + 'attachment_folder', + $attachmentFolder + ); + + $this->initialState->provideInitialState( + 'attachment_folder_free_space', + $freeSpace + ); + + $this->initialState->provideInitialState( + 'enable_matterbridge', + $this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1' + ); + } + + protected function publishInitialStateForGuest(): void { + $this->publishInitialStateShared(); + + $this->initialState->provideInitialState( + 'start_conversations', + false + ); + + $this->initialState->provideInitialState( + 'circles_enabled', + false + ); + + $this->initialState->provideInitialState( + 'read_status_privacy', + Participant::PRIVACY_PUBLIC + ); + + $this->initialState->provideInitialState( + 'typing_privacy', + Participant::PRIVACY_PUBLIC + ); + + $this->initialState->provideInitialState( + 'attachment_folder', + '' + ); + + $this->initialState->provideInitialState( + 'attachment_folder_free_space', + '' + ); + + $this->initialState->provideInitialState( + 'enable_matterbridge', + false + ); + + $this->initialState->provideInitialState( + 'play_sounds', + $this->talkConfig->getPlaySoundsDefaultForGuests() + ); + } +} diff --git a/lib/TalkSession.php b/lib/TalkSession.php new file mode 100644 index 0000000..a049ed5 --- /dev/null +++ b/lib/TalkSession.php @@ -0,0 +1,131 @@ +getValues('spreed-session'); + return array_values($sessions); + } + + public function getSessionForRoom(string $token): ?string { + return $this->getValue('spreed-session', $token); + } + + public function setSessionForRoom(string $token, string $sessionId): void { + $this->setValue('spreed-session', $token, $sessionId); + } + + public function removeSessionForRoom(string $token): void { + $this->removeValue('spreed-session', $token); + } + + public function getGuestActorIdForRoom(string $token): ?string { + return $this->getValue('spreed-guest-id', $token); + } + + public function setGuestActorIdForRoom(string $token, string $actorId): void { + $this->setValue('spreed-guest-id', $token, $actorId); + } + + public function removeGuestActorIdForRoom(string $token): void { + $this->removeValue('spreed-guest-id', $token); + } + + public function getAuthedEmailActorIdForRoom(string $token): ?string { + return $this->getValue('spreed-authed-email', $token); + } + + public function setAuthedEmailActorIdForRoom(string $token, string $actorId): void { + $this->setValue('spreed-authed-email', $token, $actorId); + } + + public function getFileShareTokenForRoom(string $roomToken): ?string { + return $this->getValue('spreed-file-share-token', $roomToken); + } + + public function setFileShareTokenForRoom(string $roomToken, string $shareToken): void { + $this->setValue('spreed-file-share-token', $roomToken, $shareToken); + } + + public function removeFileShareTokenForRoom(string $roomToken): void { + $this->removeValue('spreed-file-share-token', $roomToken); + } + + public function getPasswordForRoom(string $token): ?string { + return $this->getValue('spreed-password', $token); + } + + public function setPasswordForRoom(string $token, string $password): void { + $this->setValue('spreed-password', $token, $password); + } + + public function removePasswordForRoom(string $token): void { + $this->removeValue('spreed-password', $token); + } + + protected function getValues(string $key): array { + $values = $this->session->get($key); + if ($values === null) { + return []; + } + + $values = json_decode($values, true); + if ($values === null) { + return []; + } + + return $values; + } + + protected function getValue(string $key, string $token): ?string { + $values = $this->getValues($key); + return $values[$token] ?? null; + } + + protected function setValue(string $key, string $token, string $value): void { + $reopened = $this->session->reopen(); + + $values = $this->getValues($key); + $values[$token] = $value; + $this->session->set($key, json_encode($values)); + + + if ($reopened) { + $this->session->close(); + } + } + + protected function removeValue(string $key, string $token): void { + $reopened = $this->session->reopen(); + + $values = $this->getValues($key); + unset($values[$token]); + $this->session->set($key, json_encode($values)); + + if ($reopened) { + $this->session->close(); + } + } + + public function renewSessionId(): void { + $this->session->regenerateId(true, true); + } +} diff --git a/lib/Team/TalkTeamResourceProvider.php b/lib/Team/TalkTeamResourceProvider.php new file mode 100644 index 0000000..8b8ed4d --- /dev/null +++ b/lib/Team/TalkTeamResourceProvider.php @@ -0,0 +1,104 @@ +l10n->t('Talk conversations'); + } + + /** + * @inheritDoc + */ + #[\Override] + public function getIconSvg(): string { + return ''; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getSharedWith(string $teamId): array { + $rooms = $this->manager->getRoomsForActor(Attendee::ACTOR_CIRCLES, $teamId); + return array_map(function (Room $room) { + return new TeamResource( + $this, + $room->getToken(), + $room->getName(), + $this->urlGenerator->linkToRouteAbsolute('spreed.Page.showCall', ['token' => $room->getToken()]), + iconURL: $this->avatarService->getAvatarUrl($room), + ); + }, $rooms); + } + + /** + * @inheritDoc + */ + #[\Override] + public function isSharedWithTeam(string $teamId, string $resourceId): bool { + try { + $this->manager->getRoomByActor($resourceId, Attendee::ACTOR_CIRCLES, $teamId); + return true; + } catch (RoomNotFoundException) { + } + + return false; + } + + /** + * @inheritDoc + */ + #[\Override] + public function getTeamsForResource(string $resourceId): array { + try { + $room = $this->manager->getRoomByToken($resourceId); + $participants = $this->participantService->getParticipantsByActorType($room, Attendee::ACTOR_CIRCLES); + return array_map(function (Participant $participant) { + return $participant->getAttendee()->getActorId(); + }, $participants); + } catch (RoomNotFoundException) { + } + + return []; + } +} diff --git a/lib/Webinary.php b/lib/Webinary.php new file mode 100644 index 0000000..d7bff27 --- /dev/null +++ b/lib/Webinary.php @@ -0,0 +1,18 @@ +`" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee map applied successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Applying attendee map is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/request-assistance": { + "post": { + "operationId": "breakout_room-request-assistance", + "summary": "Request assistance", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Assistance requested successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Requesting assistance is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "breakout_room-reset-request-for-assistance", + "summary": "Reset the request for assistance", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Request for assistance reset successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Resetting the request for assistance is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/rooms": { + "post": { + "operationId": "breakout_room-start-breakout-rooms", + "summary": "Start the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms started successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Starting breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "breakout_room-stop-breakout-rooms", + "summary": "Stop the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Stopping breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/switch": { + "post": { + "operationId": "breakout_room-switch-breakout-room", + "summary": "Switch to another breakout room", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "target" + ], + "properties": { + "target": { + "type": "string", + "description": "Target breakout room" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Switched to breakout room successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Switching to breakout room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/dashboard/events": { + "get": { + "operationId": "calendar_integration-get-dashboard-events", + "summary": "Get up to 10 rooms that have events in the next 7 days sorted by their start timestamp ascending", + "description": "Required capability: `dashboard-event-rooms`", + "tags": [ + "calendar_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "A list of dashboard entries or an empty array", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardEvent" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/mutual-events": { + "get": { + "operationId": "calendar_integration-get-mutual-events", + "summary": "Get up to 3 events in the next 7 days sorted by their start timestamp ascending", + "description": "Required capability: `mutual-calendar-events`", + "tags": [ + "calendar_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "A list of dashboard entries or an empty array", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardEvent" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Room is not a 1 to 1 room, room is invalid, or user is not participant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}": { + "get": { + "operationId": "call-get-peers-for-call", + "summary": "Get the peers for a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of peers in the call returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CallPeer" + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "call-join-call", + "summary": "Join a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "flags": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "In-Call flags", + "minimum": 0, + "maximum": 15 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "Join the call silently" + }, + "recordingConsent": { + "type": "boolean", + "default": false, + "description": "When the user ticked a checkbox and agreed with being recorded (Only needed when the `config => call => recording-consent` capability is set to {@see RecordingService::CONSENT_REQUIRED_YES} or the capability is {@see RecordingService::CONSENT_REQUIRED_OPTIONAL} and the conversation `recordingConsent` value is {@see RecordingService::CONSENT_REQUIRED_YES} )" + }, + "silentFor": { + "type": "array", + "default": [], + "description": "Send no call notification for previous participants", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call joined successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "No recording consent was given", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "call-update-call-flags", + "summary": "Update the in-call flags", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "flags" + ], + "properties": { + "flags": { + "type": "integer", + "format": "int64", + "description": "New flags", + "minimum": 0, + "maximum": 15 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "In-call flags updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating in-call flags is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "call-leave-call", + "summary": "Leave a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "all", + "in": "query", + "description": "whether to also terminate the call for all participants", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call left successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/notification-state": { + "get": { + "operationId": "call_notification-state", + "summary": "Check the expected state of a call notification", + "description": "Required capability: `call-notification-state-api`", + "tags": [ + "call" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Conversation token to check", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification should be kept alive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "201": { + "description": "Dismiss call notification and show \"Missed call\"-notification instead", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Not logged in, try again with auth data sent", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Dismiss call notification", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/download": { + "get": { + "operationId": "call-download-participants-for-call", + "summary": "Download the list of current call participants", + "description": "Required capability: `download-call-participants`", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "format", + "in": "query", + "description": "Download format", + "schema": { + "type": "string", + "default": "csv", + "enum": [ + "csv" + ] + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of participants in the call downloaded in the requested format", + "content": { + "text/csv": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "No call in progress" + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/federation": { + "post": { + "operationId": "call-join-federated-call", + "summary": "Join call on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "sessionId" + ], + "properties": { + "sessionId": { + "type": "string", + "description": "Federated session id to join with" + }, + "flags": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "In-Call flags", + "minimum": 0, + "maximum": 15 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "Join the call silently" + }, + "recordingConsent": { + "type": "boolean", + "default": false, + "description": "Agreement to be recorded" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call joined successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Conditions to join not met", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "call-update-federated-call-flags", + "summary": "Update the in-call flags on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "sessionId", + "flags" + ], + "properties": { + "sessionId": { + "type": "string", + "description": "Federated session id to update the flags with" + }, + "flags": { + "type": "integer", + "format": "int64", + "description": "New flags", + "minimum": 0, + "maximum": 15 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "In-call flags updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating in-call flags is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "call-leave-federated-call", + "summary": "Leave a call on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Federated session id to leave with", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call left successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/ring/{attendeeId}": { + "post": { + "operationId": "call-ring-attendee", + "summary": "Ring an attendee", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "path", + "description": "ID of the attendee to ring", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee rang successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee could not be found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Ringing attendee is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/dialout/{attendeeId}": { + "post": { + "operationId": "call-sip-dial-out", + "summary": "Call a SIP dial-out attendee", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "path", + "description": "ID of the attendee to call", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Dial-out initiated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "SIP dial-out not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant could not be found or is a wrong type", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured on the server", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/file/{fileId}": { + "get": { + "operationId": "files_integration-get-room-by-file-id", + "summary": "Get the token of the room associated to the given file id", + "description": "This is the counterpart of self::getRoomByShareToken() for file ids instead of share tokens, although both return the same room token if the given file id and share token refer to the same file.\nIf there is no room associated to the given file id a new room is created; the new room is a public room associated with a \"file\" object with the given file id. Unlike normal rooms in which the owner is the user that created the room these are special rooms without owner (although self joined users with direct access to the file become persistent participants automatically when they join until they explicitly leave or no longer have access to the file).\nIn any case, to create or even get the token of the room, the file must be shared and the user must be the owner of a public share of the file (like a link share, for example) or have direct access to that file; an error is returned otherwise. A user has direct access to a file if they have access to it (or to an ancestor) through a user, group, circle or room share (but not through a link share, for example), or if they are the owner of such a file.", + "tags": [ + "files_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "fileId", + "in": "path", + "description": "ID of the file", + "required": true, + "schema": { + "type": "string", + "pattern": "^.+$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room token returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Rooms not allowed for shares", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/publicshare/{shareToken}": { + "get": { + "operationId": "files_integration-get-room-by-share-token", + "summary": "Returns the token of the room associated to the file of the given share token", + "description": "This is the counterpart of self::getRoomByFileId() for share tokens instead of file ids, although both return the same room token if the given file id and share token refer to the same file.\nIf there is no room associated to the file id of the given share token a new room is created; the new room is a public room associated with a \"file\" object with the file id of the given share token. Unlike normal rooms in which the owner is the user that created the room these are special rooms without owner (although self joined users with direct access to the file become persistent participants automatically when they join until they explicitly leave or no longer have access to the file).\nIn any case, to create or even get the token of the room, the file must be publicly shared (like a link share, for example); an error is returned otherwise.\nBesides the token of the room this also returns the current user ID and display name, if any; this is needed by the Talk sidebar to know the actual current user, as the public share page uses the incognito mode and thus logged-in users as seen as guests.", + "tags": [ + "files_integration" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "shareToken", + "in": "path", + "description": "Token of the file share", + "required": true, + "schema": { + "type": "string", + "pattern": "^.+$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room token and user info returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token", + "userId", + "userDisplayName" + ], + "properties": { + "token": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "userDisplayName": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Rooms not allowed for shares", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/guest/{token}/name": { + "post": { + "operationId": "guest-set-display-name", + "summary": "Set the display name as a guest", + "tags": [ + "guest" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "displayName" + ], + "properties": { + "displayName": { + "type": "string", + "description": "New display name" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Display name updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Not a guest", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Not a participant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge/{token}": { + "get": { + "operationId": "matterbridge-get-bridge-of-room", + "summary": "Get bridge information of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of configured bridges", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeWithProcessState" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "matterbridge-edit-bridge-of-room", + "summary": "Edit bridge information of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean", + "description": "If the bridge should be enabled" + }, + "parts": { + "$ref": "#/components/schemas/MatterbridgeConfigFields", + "default": [], + "description": "New parts" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bridge edited successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeProcessState" + } + } + } + } + } + } + } + }, + "406": { + "description": "Editing bridge is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "matterbridge-delete-bridge-of-room", + "summary": "Delete bridge of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bridge deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "406": { + "description": "Deleting bridge is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge/{token}/process": { + "get": { + "operationId": "matterbridge-get-bridge-process-state", + "summary": "Get bridge process information", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of running processes", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeProcessState" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}": { + "post": { + "operationId": "poll-create-poll", + "summary": "Create a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "question", + "options", + "resultMode", + "maxVotes" + ], + "properties": { + "question": { + "type": "string", + "description": "Question of the poll" + }, + "options": { + "type": "array", + "description": "Options of the poll", + "items": { + "type": "string" + } + }, + "resultMode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Mode how the results will be shown" + }, + "maxVotes": { + "type": "integer", + "format": "int64", + "description": "Number of maximum votes per voter" + }, + "draft": { + "type": "boolean", + "default": false, + "description": "Whether the poll should be saved as a draft (only allowed for moderators and with `talk-polls-drafts` capability)" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this poll should be posted into (also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Draft created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + }, + "201": { + "description": "Poll created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "400": { + "description": "Creating poll is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/draft/{pollId}": { + "post": { + "operationId": "poll-update-draft-poll", + "summary": "Modify a draft poll", + "description": "Required capability: `edit-draft-poll`", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "question", + "options", + "resultMode", + "maxVotes" + ], + "properties": { + "question": { + "type": "string", + "description": "Question of the poll" + }, + "options": { + "type": "array", + "description": "Options of the poll", + "items": { + "type": "string" + } + }, + "resultMode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Mode how the results will be shown" + }, + "maxVotes": { + "type": "integer", + "format": "int64", + "description": "Number of maximum votes per voter" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "The poll id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Draft modified successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + }, + "400": { + "description": "Modifying poll is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "No permission to modify this poll", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "No draft poll exists", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/drafts": { + "get": { + "operationId": "poll-get-all-draft-polls", + "summary": "Get all drafted polls", + "description": "Required capability: `talk-polls-drafts`", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "User is not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/{pollId}": { + "get": { + "operationId": "poll-show-poll", + "summary": "Get a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "poll-vote-poll", + "summary": "Vote on a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "optionIds": { + "type": "array", + "default": [], + "description": "IDs of the selected options", + "items": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Voted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "400": { + "description": "Voting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "poll-close-poll", + "summary": "Close a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll closed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "202": { + "description": "Poll draft was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Poll already closed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to close poll", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/publicshareauth": { + "post": { + "operationId": "public_share_auth-create-room", + "summary": "Creates a new room for video verification (requesting the password of a share)", + "description": "The new room is a public room associated with a \"share:password\" object with the ID of the share token. Unlike normal rooms in which the owner is the user that created the room these are special rooms always created by a guest or user on behalf of a registered user, the sharer, who will be the owner of the room.\nThe share must have \"send password by Talk\" enabled; an error is returned otherwise.", + "tags": [ + "files_integration" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "shareToken" + ], + "properties": { + "shareToken": { + "type": "string", + "description": "Token of the file share" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Room created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token", + "name", + "displayName" + ], + "properties": { + "token": { + "type": "string" + }, + "name": { + "type": "string" + }, + "displayName": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/reaction/{token}/{messageId}": { + "post": { + "operationId": "reaction-react", + "summary": "Add a reaction to a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "reaction" + ], + "properties": { + "reaction": { + "type": "string", + "description": "Emoji to add" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction already existed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "201": { + "description": "Reaction added successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Adding reaction is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "reaction-delete", + "summary": "Delete a reaction from a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "reaction", + "in": "query", + "description": "Emoji to remove", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting reaction is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "reaction-get-reactions", + "summary": "Get a list of reactions for a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "reaction", + "in": "query", + "description": "Emoji to filter", + "schema": { + "type": "string", + "nullable": true + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reactions returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message or reaction not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}": { + "post": { + "operationId": "recording-start", + "summary": "Start the recording", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "type": "integer", + "format": "int64", + "description": "Type of the recording" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording started successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Starting recording is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "recording-stop", + "summary": "Stop the recording", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Stopping recording is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/notification": { + "delete": { + "operationId": "recording-notification-dismiss", + "summary": "Dismiss the store call recording notification", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "timestamp", + "in": "query", + "description": "Timestamp of the notification to be dismissed", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification dismissed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Dismissing notification is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/share-chat": { + "post": { + "operationId": "recording-share-to-chat", + "summary": "Share the recorded file to the chat", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "fileId", + "timestamp" + ], + "properties": { + "fileId": { + "type": "integer", + "format": "int64", + "description": "ID of the file", + "minimum": 0 + }, + "timestamp": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the notification to be dismissed", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording shared to chat successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Sharing recording to chat is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room": { + "get": { + "operationId": "room-get-rooms", + "summary": "Get all currently existent rooms which the user has joined", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "noStatusUpdate", + "in": "query", + "description": "When the user status should not be automatically set to online set to 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user status", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "modifiedSince", + "in": "query", + "description": "Filter rooms modified after a timestamp", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "includeLastMessage", + "in": "query", + "description": "Include the last message, clients should opt-out when only rendering a compact list", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of rooms", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Modified-Before": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Federation-Invites": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "room-create-room", + "summary": "Create a room with a user, a group or a circle", + "description": "With the `conversation-creation-all` capability a lot of new options where introduced. Before that only `$roomType`, `$roomName`, `$objectType` and `$objectId` were supported all the time, and `$password` with the `conversation-creation-password` capability In case the `$roomType` is {@see Room::TYPE_ONE_TO_ONE} only the `$invite` or `$participants` parameter is supported.", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "roomType", + "readOnly", + "listable", + "lobbyState", + "sipEnabled", + "permissions", + "recordingConsent", + "mentionPermissions" + ], + "properties": { + "roomType": { + "type": "integer", + "format": "int64", + "description": "Type of the room" + }, + "invite": { + "type": "string", + "deprecated": true, + "default": "", + "description": "User, group, … ID to invite Deprecated: Use the `$participants` array instead" + }, + "roomName": { + "type": "string", + "default": "", + "description": "Name of the room, unless the legacy mode providing `$invite` and `$source` is used, the name must no longer be empty with the `conversation-creation-all` capability (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "source": { + "type": "string", + "deprecated": true, + "default": "", + "description": "Source of the invite ID ('circles' to create a room with a circle, etc.) Deprecated: Use the `$participants` array instead" + }, + "objectType": { + "type": "string", + "default": "", + "description": "Type of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "objectId": { + "type": "string", + "default": "", + "description": "ID of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "password": { + "type": "string", + "default": "", + "description": "The room password (only available with `conversation-creation-password` capability) (Ignored if `$roomType` is not {@see Room::TYPE_PUBLIC})" + }, + "readOnly": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Read only state of the conversation (Default writable) (only available with `conversation-creation-all` capability)" + }, + "listable": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Scope where the conversation is listable (Default not listable for anyone) (only available with `conversation-creation-all` capability)" + }, + "messageExpiration": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Seconds after which messages will disappear, 0 disables expiration (Default 0) (only available with `conversation-creation-all` capability)", + "minimum": 0 + }, + "lobbyState": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Lobby state of the conversation (Default lobby is disabled) (only available with `conversation-creation-all` capability)" + }, + "lobbyTimer": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Timer when the lobby will be removed (Default null, will not be disabled automatically) (only available with `conversation-creation-all` capability)", + "minimum": 0 + }, + "sipEnabled": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Whether SIP dial-in shall be enabled (only available with `conversation-creation-all` capability)" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "Default permissions for participants (only available with `conversation-creation-all` capability)", + "minimum": 0, + "maximum": 255 + }, + "recordingConsent": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Whether participants need to agree to a recording before joining a call (only available with `conversation-creation-all` capability)" + }, + "mentionPermissions": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Who can mention at-all in the chat (only available with `conversation-creation-all` capability)" + }, + "description": { + "type": "string", + "default": "", + "description": "Description for the conversation (limited to 2.000 characters) (only available with `conversation-creation-all` capability)" + }, + "emoji": { + "type": "string", + "nullable": true, + "default": null, + "description": "Emoji for the avatar of the conversation (only available with `conversation-creation-all` capability)", + "minLength": 1 + }, + "avatarColor": { + "type": "string", + "nullable": true, + "default": null, + "description": "Background color of the avatar (Only considered when an emoji was provided) (only available with `conversation-creation-all` capability)", + "minLength": 1 + }, + "participants": { + "$ref": "#/components/schemas/InvitationList", + "default": [], + "description": "List of participants to add grouped by type (only available with `conversation-creation-all` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room already existed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "201": { + "description": "Room created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "202": { + "description": "Room created successfully but not all participants could be added", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/RoomWithInvalidInvitations" + } + } + } + } + } + } + } + }, + "400": { + "description": "Room type invalid or missing or invalid password", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to create room", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "User, group or other target to invite was not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/listed-room": { + "get": { + "operationId": "room-get-listed-rooms", + "summary": "Get listed rooms with optional search term", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "searchTerm", + "in": "query", + "description": "search term", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of matching rooms", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/note-to-self": { + "get": { + "operationId": "room-get-note-to-self-conversation", + "summary": "Get the \"Note to self\" conversation for the user", + "description": "It will be automatically created when it is currently missing", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room returned successfully", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}": { + "get": { + "operationId": "room-get-single-room", + "summary": "Get a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room returned", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "room-rename-room", + "summary": "Rename a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "roomName" + ], + "properties": { + "roomName": { + "type": "string", + "description": "New name" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room renamed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Renaming room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "event", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-delete-room", + "summary": "Delete a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room successfully deleted", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/breakout-rooms": { + "get": { + "operationId": "room-get-breakout-rooms", + "summary": "Get breakout rooms", + "description": "All for moderators and in case of \"free selection\", or the assigned breakout room for other participants", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/object": { + "delete": { + "operationId": "room-unbind-room-from-object", + "summary": "Unbind a room from its object to prevent automatic retention", + "description": "Required capability: `unbind-conversation`", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room successfully unbound", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Unbinding room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "object-type" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/public": { + "post": { + "operationId": "room-make-public", + "summary": "Allowed guests to join conversation", + "description": "Required capability: `conversation-creation-password` for `string $password` parameter", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string", + "default": "", + "description": "New password (only available with `conversation-creation-password` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Allowed guests successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Allowing guests is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value", + "password" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-make-private", + "summary": "Disallowed guests to join conversation", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room unpublished Disallowing guests successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Disallowing guests is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/description": { + "put": { + "operationId": "room-set-description", + "summary": "Update the description of a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "description" + ], + "properties": { + "description": { + "type": "string", + "description": "New description for the conversation (limited to 2.000 characters, was 500 before Talk 21)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Description updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating description is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "event", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/read-only": { + "put": { + "operationId": "room-set-read-only", + "summary": "Set read-only state of a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New read-only state" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read-only state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating read-only state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/listable": { + "put": { + "operationId": "room-set-listable", + "summary": "Make a room listable", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "scope" + ], + "properties": { + "scope": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Scope where the room is listable" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Made room listable successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Making room listable is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/password": { + "put": { + "operationId": "room-set-password", + "summary": "Set a password for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "password" + ], + "properties": { + "password": { + "type": "string", + "description": "New password" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Password set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Setting password is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/permissions/{mode}": { + "put": { + "operationId": "room-set-permissions", + "summary": "Update the permissions of a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "permissions" + ], + "properties": { + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "mode", + "in": "path", + "description": "Level of the permissions ('call' (removed in Talk 20), 'default')", + "required": true, + "schema": { + "type": "string", + "enum": [ + "call", + "default" + ], + "pattern": "^(call|default)$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "mode", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants": { + "get": { + "operationId": "room-get-participants", + "summary": "Get a list of participants for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participants returned", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions for getting participants", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "room-add-participant-to-room", + "summary": "Add a participant to a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "newParticipant" + ], + "properties": { + "newParticipant": { + "type": "string", + "description": "New participant" + }, + "source": { + "type": "string", + "default": "users", + "enum": [ + "users", + "groups", + "circles", + "emails", + "federated_users", + "phones", + "teams" + ], + "description": "Source of the participant" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant successfully added", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Adding participant is not possible, e.g. when the user is banned (check error attribute of response for detail key)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "User, group or other target to invite was not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/breakout-rooms/participants": { + "get": { + "operationId": "room-get-breakout-room-participants", + "summary": "Get the breakout room participants for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout room participants returned", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting breakout room participants is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to get breakout room participants", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/self": { + "delete": { + "operationId": "room-remove-self-from-room", + "summary": "Remove the current user from a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Removing participant is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "participant" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "participant" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees": { + "delete": { + "operationId": "room-remove-attendee-from-room", + "summary": "Remove an attendee from a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "query", + "description": "ID of the attendee", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Removing attendee is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Removing attendee is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees/permissions": { + "put": { + "operationId": "room-set-attendee-permissions", + "summary": "Update the permissions of an attendee", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "attendeeId", + "method", + "permissions" + ], + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "description": "ID of the attendee", + "minimum": 0 + }, + "method": { + "type": "string", + "enum": [ + "set", + "remove", + "add" + ], + "description": "Method of updating permissions ('set', 'remove', 'add')" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean", + "enum": [ + true + ] + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to update permissions", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees/permissions/all": { + "put": { + "operationId": "room-set-all-attendees-permissions", + "summary": "Update the permissions of all attendees", + "deprecated": true, + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "method", + "permissions" + ], + "properties": { + "method": { + "type": "string", + "enum": [ + "set", + "remove", + "add" + ], + "description": "Method of updating permissions ('set', 'remove', 'add')" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/active": { + "post": { + "operationId": "room-join-room", + "summary": "Join a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string", + "default": "", + "description": "Password of the room" + }, + "force": { + "type": "boolean", + "default": true, + "description": "Create a new session if necessary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room joined successfully", + "headers": { + "X-Nextcloud-Talk-Proxy-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "403": { + "description": "Joining room is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "password" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "409": { + "description": "Session already exists", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "sessionId", + "inCall", + "lastPing" + ], + "properties": { + "sessionId": { + "type": "string" + }, + "inCall": { + "type": "integer", + "format": "int64" + }, + "lastPing": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-leave-room", + "summary": "Leave a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully left the room", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/resend-invitations": { + "post": { + "operationId": "room-resend-invitations", + "summary": "Resend invitations", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "ID of the attendee", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Invitation resent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/state": { + "put": { + "operationId": "room-set-session-state", + "summary": "Set active state for a session", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "of the room" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Session state set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "The provided new state was invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "The participant did not have a session", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/moderators": { + "post": { + "operationId": "room-promote-moderator", + "summary": "Promote an attendee to moderator", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "attendeeId" + ], + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "description": "ID of the attendee", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee promoted to moderator successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Promoting attendee to moderator is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Promoting attendee to moderator is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-demote-moderator", + "summary": "Demote an attendee from moderator", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "query", + "description": "ID of the attendee", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee demoted from moderator successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Demoting attendee from moderator is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Demoting attendee from moderator is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/favorite": { + "post": { + "operationId": "room-add-to-favorites", + "summary": "Add a room to the favorites", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully added room to favorites", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-remove-from-favorites", + "summary": "Remove a room from the favorites", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully removed room from favorites", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/important": { + "post": { + "operationId": "room-mark-conversation-as-important", + "summary": "Mark a conversation as important (still sending notifications while on DND)", + "description": "Required capability: `important-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as important", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-mark-conversation-as-unimportant", + "summary": "Mark a conversation as unimportant (no longer sending notifications while on DND)", + "description": "Required capability: `important-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as unimportant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/sensitive": { + "post": { + "operationId": "room-mark-conversation-as-sensitive", + "summary": "Mark a conversation as sensitive (no last message is visible / no push preview is shown)", + "description": "Required capability: `sensitive-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as sensitive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-mark-conversation-as-insensitive", + "summary": "Mark a conversation as insensitive (last message is visible / push preview is shown)", + "description": "Required capability: `sensitive-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as insensitive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/notify": { + "post": { + "operationId": "room-set-notification-level", + "summary": "Update the notification level for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification level updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating notification level is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/notify-calls": { + "post": { + "operationId": "room-set-notification-calls", + "summary": "Update call notifications", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call notification level updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating call notification level is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/webinar/lobby": { + "put": { + "operationId": "room-set-lobby", + "summary": "Update the lobby state for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New state" + }, + "timer": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Timer when the lobby will be removed", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Lobby state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating lobby state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "object", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/webinar/sip": { + "put": { + "operationId": "room-setsip-enabled", + "summary": "Update SIP enabled state", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "New state" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "SIP enabled state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + ] + } + } + } + }, + "403": { + "description": "Missing permissions to update SIP enabled state", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "412": { + "description": "SIP not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating SIP enabled state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "token", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/recording-consent": { + "put": { + "operationId": "room-set-recording-consent", + "summary": "Set recording consent requirement for this conversation", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "recordingConsent" + ], + "properties": { + "recordingConsent": { + "type": "integer", + "format": "int64", + "description": "New consent setting for the conversation (Only {@see RecordingService::CONSENT_REQUIRED_NO} and {@see RecordingService::CONSENT_REQUIRED_YES} are allowed here.)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording consent requirement set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Setting recording consent requirement is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "call", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "412": { + "description": "No recording server is configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/message-expiration": { + "post": { + "operationId": "room-set-message-expiration", + "summary": "Update message expiration time", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "seconds" + ], + "properties": { + "seconds": { + "type": "integer", + "format": "int64", + "description": "New time", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message expiration time updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating message expiration time is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/capabilities": { + "get": { + "operationId": "room-get-capabilities", + "summary": "Get capabilities for a room", + "description": "See \"Capability handling in federated conversations\" in https://github.com/nextcloud/spreed/issues/10680 to learn which capabilities should be considered from the local server or from the remote server.", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Get capabilities successfully", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Proxy-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "anyOf": [ + { + "$ref": "#/components/schemas/Capabilities" + }, + { + "type": "object", + "additionalProperties": true + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/mention-permissions": { + "put": { + "operationId": "room-set-mention-permissions", + "summary": "Update the mention permissions for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "mentionPermissions" + ], + "properties": { + "mentionPermissions": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New mention permissions" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/archive": { + "post": { + "operationId": "room-archive-conversation", + "summary": "Archive a conversation", + "description": "Required capability: `archived-conversations-v2`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was archived", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-unarchive-conversation", + "summary": "Unarchive a conversation", + "description": "Required capability: `archived-conversations-v2`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was unarchived", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/import-emails": { + "post": { + "operationId": "room-import-emails-as-participants", + "summary": "Import a list of email attendees", + "description": "Content format is comma separated values: - Header line is required and must match `\"email\",\"name\"` or `\"email\"` - One entry per line (e.g. `\"John Doe\",\"john@example.tld\"`)\nRequired capability: `email-csv-import`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "testRun": { + "type": "boolean", + "default": false, + "description": "When set to true, the file is validated and no email is actually sent nor any participant added to the conversation" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "All entries imported successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "invites", + "duplicates" + ], + "properties": { + "invites": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "duplicates": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalid": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalidLines": { + "type": "array", + "items": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + "type": { + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 6 + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Import was not successful. When message is provided the string is in user language and should be displayed as an error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "room", + "file", + "header-email", + "header-name", + "rows" + ] + }, + "message": { + "type": "string" + }, + "invites": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "duplicates": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalid": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalidLines": { + "type": "array", + "items": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + "type": { + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 6 + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/meeting": { + "post": { + "operationId": "room-schedule-meeting", + "summary": "Schedule a meeting for a conversation", + "description": "Required capability: `schedule-meeting`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "calendarUri", + "start" + ], + "properties": { + "calendarUri": { + "type": "string", + "description": "Last part of the calendar URI as seen by the participant e.g. 'personal' or 'company_shared_by_other_user'" + }, + "start": { + "type": "integer", + "format": "int64", + "description": "Unix timestamp when the meeting starts" + }, + "attendeeIds": { + "type": "array", + "nullable": true, + "default": null, + "description": "List of attendee ids to invite, if null everyone will be invited, if empty array only the actor will receive the event", + "items": { + "type": "integer", + "format": "int64" + } + }, + "end": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Unix timestamp when the meeting ends, falls back to 60 minutes after start" + }, + "title": { + "type": "string", + "nullable": true, + "default": null, + "description": "Title or summary of the event, falling back to the conversation name if none is given" + }, + "description": { + "type": "string", + "nullable": true, + "default": null, + "description": "Description of the event, falling back to the conversation description if none is given" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Meeting scheduled", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Meeting could not be created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "calendar", + "conversation", + "email", + "end", + "start" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/settings/user": { + "post": { + "operationId": "settings-set-user-setting", + "summary": "Update user setting", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string", + "enum": [ + "attachment_folder", + "read_status_privacy", + "typing_privacy", + "play_sounds" + ], + "description": "Key to update" + }, + "value": { + "nullable": true, + "description": "New value for the key", + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer", + "format": "int64" + } + ] + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User setting updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating user setting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/settings": { + "get": { + "operationId": "signaling-get-settings", + "summary": "Get the signaling settings", + "tags": [ + "internal_signaling", + "external_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the room", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "talk-recording-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-recording-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the recording backend", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling settings returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/SignalingSettings" + } + } + } + } + } + } + } + }, + "401": { + "description": "Recording request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/{token}": { + "post": { + "operationId": "signaling-send-messages", + "summary": "Send signaling messages", + "tags": [ + "internal_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "messages" + ], + "properties": { + "messages": { + "type": "string", + "description": "JSON encoded messages" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling message sent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Sending signaling message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "signaling-pull-messages", + "summary": "Get signaling messages", + "tags": [ + "internal_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling messages returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Session, room or participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "409": { + "description": "Session killed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting signaling messages is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/temp-user-avatar": { + "post": { + "operationId": "temp_avatar-post-avatar", + "summary": "Upload your avatar as a user", + "tags": [ + "user_avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar uploaded successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Uploading avatar is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "temp_avatar-delete-avatar", + "summary": "Delete your avatar as a user", + "tags": [ + "user_avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting avatar is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}": { + "post": { + "operationId": "chat-send-message", + "summary": "Sends a new chat message to the given room", + "description": "The author and timestamp are automatically set to the current user/guest and time.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "the message to send" + }, + "actorDisplayName": { + "type": "string", + "default": "", + "description": "for guests" + }, + "referenceId": { + "type": "string", + "default": "", + "description": "for the message to be able to later identify it again" + }, + "replyTo": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Parent id which this message is a reply to", + "minimum": 0 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "If sent silent the chat message will not create any notifications" + }, + "threadTitle": { + "type": "string", + "default": "", + "description": "Only supported when not replying, when given will create a thread (requires `threads` capability)" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this message is a reply to without quoting a specific message (ignored when $replyTo is given, also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Message sent successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Sending message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Actor not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "429": { + "description": "Mention rate limit exceeded (guests only)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-receive-messages", + "summary": "Receives chat messages from the given room", + "description": "- Receiving the history ($lookIntoFuture=0): The next $limit messages after $lastKnownMessageId will be returned. The new $lastKnownMessageId for the follow up query is available as `X-Chat-Last-Given` header.\n- Looking into the future ($lookIntoFuture=1): If there are currently no messages the response will not be sent immediately. Instead, HTTP connection will be kept open waiting for new messages to arrive and, when they do, then the response will be sent. The connection will not be kept open indefinitely, though; the number of seconds to wait for new messages to arrive can be set using the timeout parameter; the default timeout is 30 seconds, maximum timeout is 60 seconds. If the timeout ends a successful but empty response will be sent. If messages have been returned (status=200) the new $lastKnownMessageId for the follow up query is available as `X-Chat-Last-Given` header.\nThe limit specifies the maximum number of messages that will be returned, although the actual number of returned messages could be lower if some messages are not visible to the participant. Note that if none of the messages are visible to the participant the returned number of messages will be 0, yet the status will still be 200. Also note that `X-Chat-Last-Given` may reference a message not visible and thus not returned, but it should be used nevertheless as the $lastKnownMessageId for the follow-up query.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "lookIntoFuture", + "in": "query", + "description": "Polling for new messages (1) or getting the history of the chat (0)", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of chat messages to receive (100 by default, 200 at most)", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "lastKnownMessageId", + "in": "query", + "description": "The last known message (serves as offset)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "lastCommonReadId", + "in": "query", + "description": "The last known common read message (so the response is 200 instead of 304 when it changes even when there are no messages)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "timeout", + "in": "query", + "description": "Number of seconds to wait for new messages (30 by default, 30 at most)", + "schema": { + "type": "integer", + "format": "int64", + "default": 30, + "minimum": 0, + "maximum": 30 + } + }, + { + "name": "setReadMarker", + "in": "query", + "description": "Automatically set the last read marker when 1, if your client does this itself via chat/{token}/read set to 0", + "schema": { + "type": "integer", + "format": "int64", + "default": 1, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "includeLastKnown", + "in": "query", + "description": "Include the $lastKnownMessageId in the messages when 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "noStatusUpdate", + "in": "query", + "description": "When the user status should not be automatically set to online set to 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "markNotificationsAsRead", + "in": "query", + "description": "Set to 0 when notifications should not be marked as read (default 1)", + "schema": { + "type": "integer", + "format": "int64", + "default": 1, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "threadId", + "in": "query", + "description": "Limit the chat message list to a given thread", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Messages returned", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + }, + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + } + }, + "304": { + "description": "No messages" + } + } + }, + "delete": { + "operationId": "chat-clear-history", + "summary": "Clear the chat history", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "History cleared successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + }, + "202": { + "description": "History cleared successfully, but Federation or Matterbridge is configured, so the information can be replicated elsewhere", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to clear history", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/share": { + "post": { + "operationId": "chat-share-object-to-chat", + "summary": "Sends a rich-object to the given room", + "description": "The author and timestamp are automatically set to the current user/guest and time.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "objectType", + "objectId" + ], + "properties": { + "objectType": { + "type": "string", + "description": "Type of the object" + }, + "objectId": { + "type": "string", + "description": "ID of the object" + }, + "metaData": { + "type": "string", + "default": "", + "description": "Additional metadata, sample value: `{\\\"type\\\":\\\"geo-location\\\",\\\"id\\\":\\\"geo:52.5450511,13.3741463\\\",\\\"name\\\":\\\"Nextcloud Berlin Office\\\",\\\"latitude\\\":\\\"52.5450511\\\",\\\"longitude\\\":\\\"13.3741463\\\"}`" + }, + "actorDisplayName": { + "type": "string", + "default": "", + "description": "Guest name" + }, + "referenceId": { + "type": "string", + "default": "", + "description": "Reference ID" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this message is a reply to without quoting a specific message (also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Object shared successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Sharing object is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Actor not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-get-objects-shared-in-room", + "summary": "Get objects that are shared in the room", + "description": "Federated conversations are supported with the `federated-shared-items` capability", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "objectType", + "in": "query", + "description": "Type of the objects", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lastKnownMessageId", + "in": "query", + "description": "ID of the last known message", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of objects", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of shared objects messages returned", + "headers": { + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/summarize": { + "post": { + "operationId": "chat-summarize-chat", + "summary": "Summarize the next bunch of chat messages from a given offset", + "description": "Required capability: `chat-summary-api`", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "fromMessageId" + ], + "properties": { + "fromMessageId": { + "type": "integer", + "format": "int64", + "description": "Offset from where on the summary should be generated", + "minimum": 1 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Summary was scheduled, use the returned taskId to get the status information and output from the TaskProcessing API: [OCS TaskProcessing API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-taskprocessing-api.html#fetch-a-task-by-id). If the response data contains nextOffset, not all messages could be handled in a single request. After receiving the response a second summary should be requested with the provided nextOffset.", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "taskId" + ], + "properties": { + "taskId": { + "type": "integer", + "format": "int64" + }, + "nextOffset": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "No AI provider available or summarizing failed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ai-no-provider", + "ai-error" + ] + } + } + } + } + } + } + } + } + } + }, + "204": { + "description": "No messages found to summarize" + }, + "500": { + "description": "", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}/context": { + "get": { + "operationId": "chat-get-message-context", + "summary": "Get the context of a message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The focused message which should be in the \"middle\" of the returned context", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of chat messages to receive in both directions (50 by default, 100 at most, might return 201 messages)", + "schema": { + "type": "integer", + "format": "int64", + "default": 50, + "minimum": 0, + "maximum": 100 + } + }, + { + "name": "threadId", + "in": "query", + "description": "Limit the chat message list to a given thread", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message context returned", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + }, + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + } + }, + "304": { + "description": "No messages" + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}": { + "delete": { + "operationId": "chat-delete-message", + "summary": "Delete a chat message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message deleted successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "202": { + "description": "Message deleted successfully, but a bot or Matterbridge is configured, so the information can be replicated elsewhere", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to delete message", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "405": { + "description": "Deleting this message type is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "chat-edit-message", + "summary": "Edit a chat message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "the message to send" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message edited successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "202": { + "description": "Message edited successfully, but a bot or Matterbridge is configured, so the information can be replicated to other services", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "400": { + "description": "Editing message is not possible, e.g. when the new message is empty or the message is too old", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to edit message", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "405": { + "description": "Editing this message type is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}/reminder": { + "post": { + "operationId": "chat-set-reminder", + "summary": "Set a reminder for a chat message", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "timestamp" + ], + "properties": { + "timestamp": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the reminder", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Reminder created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatReminder" + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-get-reminder", + "summary": "Get the reminder for a chat message", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminder returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatReminder" + } + } + } + } + } + } + } + }, + "404": { + "description": "No reminder found or message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "chat-delete-reminder", + "summary": "Delete a chat reminder", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminder deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/upcoming-reminders": { + "get": { + "operationId": "chat-get-upcoming-reminders", + "summary": "Get all upcoming reminders", + "description": "Required capability: `upcoming-reminders`", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminders returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatReminderUpcoming" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/read": { + "post": { + "operationId": "chat-set-read-marker", + "summary": "Set the read marker to a specific message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "lastReadMessage": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "ID if the last read message (Optional only with `chat-read-last` capability)", + "minimum": -2 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read marker set successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "chat-mark-unread", + "summary": "Mark a chat as unread", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read marker set successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/share/overview": { + "get": { + "operationId": "chat-get-objects-shared-in-room-overview", + "summary": "Get objects that are shared in the room overview", + "description": "Federated conversations are supported with the `federated-shared-items` capability", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of objects", + "schema": { + "type": "integer", + "format": "int64", + "default": 7, + "minimum": 1, + "maximum": 20 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of shared objects messages of each type returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/mentions": { + "get": { + "operationId": "chat-mentions", + "summary": "Search for mentions", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "search", + "in": "query", + "description": "Text to search for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results", + "schema": { + "type": "integer", + "format": "int64", + "default": 20 + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of mention suggestions returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMentionSuggestion" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/{token}": { + "post": { + "operationId": "live_transcription-enable", + "summary": "Enable the live transcription", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Live transcription enabled successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The participant is not in the call", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app", + "in-call" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "live_transcription-disable", + "summary": "Disable the live transcription", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Live transcription stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The participant is not in the call", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app", + "in-call" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/languages": { + "get": { + "operationId": "live_transcription-get-available-languages", + "summary": "Get available languages for live transcriptions", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Available languages got successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/LiveTranscriptionLanguage" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "The external app \"live_transcription\" is not available", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/{token}/language": { + "post": { + "operationId": "live_transcription-set-language", + "summary": "Set language for live transcriptions", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "languageId" + ], + "properties": { + "languageId": { + "type": "string", + "description": "the ID of the language to set" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Language set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The external app \"live_transcription\" is not available", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Participant is not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/recent": { + "get": { + "operationId": "thread-get-recent-active-threads", + "summary": "Get recent active threads in a conversation", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 50, + "minimum": 1, + "maximum": 50 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of threads returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/subscribed-threads": { + "get": { + "operationId": "thread-get-subscribed-threads", + "summary": "Get subscribed threads for a user", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset in the threads list", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of threads returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/{threadId}": { + "get": { + "operationId": "thread-get-thread", + "summary": "Get thread info of a single thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "threadId", + "in": "path", + "description": "The thread ID to get the info for", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Thread info returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "404": { + "description": "Thread not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "thread", + "status" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "thread-rename-thread", + "summary": "Rename a thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "threadTitle" + ], + "properties": { + "threadTitle": { + "type": "string", + "description": "New thread title, must not be empty" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "threadId", + "in": "path", + "description": "The thread ID to get the info for", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Thread renamed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "400": { + "description": "When the provided title is empty", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "title" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Not allowed, either not the original author or not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "permission" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Thread not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "thread" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/{messageId}/notify": { + "post": { + "operationId": "thread-set-notification-level", + "summary": "Set notification level for a specific thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The message to create a thread for (Doesn't have to be the root)", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully set notification level for thread", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "400": { + "description": "Notification level was invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level", + "message", + "status", + "top-most" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message or top most message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level", + "message", + "status", + "top-most" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/proxy/new/user-avatar/{size}": { + "get": { + "operationId": "avatar-get-user-proxy-avatar-without-room", + "summary": "Get the avatar of a cloudId user when inviting users while creating a conversation", + "tags": [ + "avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "size", + "in": "path", + "description": "Avatar size", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 64, + 512 + ] + } + }, + { + "name": "cloudId", + "in": "query", + "description": "Federation CloudID to get the avatar for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "darkTheme", + "in": "query", + "description": "Theme used for background", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/proxy/new/user-avatar/{size}/dark": { + "get": { + "operationId": "avatar-get-user-proxy-avatar-dark-without-room", + "summary": "Get the dark mode avatar of a cloudId user when inviting users while creating a conversation", + "tags": [ + "avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "size", + "in": "path", + "description": "Avatar size", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 64, + 512 + ] + } + }, + { + "name": "cloudId", + "in": "query", + "description": "Federation CloudID to get the avatar for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/proxy/{token}/user-avatar/{size}": { + "get": { + "operationId": "avatar-get-user-proxy-avatar", + "summary": "Get the avatar of a cloudId user", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "size", + "in": "path", + "description": "Avatar size", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 64, + 512 + ] + } + }, + { + "name": "cloudId", + "in": "query", + "description": "Federation CloudID to get the avatar for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "darkTheme", + "in": "query", + "description": "Theme used for background", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/proxy/{token}/user-avatar/{size}/dark": { + "get": { + "operationId": "avatar-get-user-proxy-avatar-dark", + "summary": "Get the dark mode avatar of a cloudId user", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "size", + "in": "path", + "description": "Avatar size", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 64, + 512 + ] + } + }, + { + "name": "cloudId", + "in": "query", + "description": "Federation CloudID to get the avatar for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/federation/invitation/{id}": { + "post": { + "operationId": "federation-accept-share", + "summary": "Accept a federation invites", + "description": "🚧 Draft: Still work in progress", + "tags": [ + "federation" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "id", + "in": "path", + "description": "ID of the share", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Invite accepted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Invite can not be accepted (maybe it was accepted already)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Invite can not be found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "410": { + "description": "Remote server could not be reached to notify about the acceptance", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "federation-reject-share", + "summary": "Decline a federation invites", + "description": "🚧 Draft: Still work in progress", + "tags": [ + "federation" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "id", + "in": "path", + "description": "ID of the share", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Invite declined successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Invite can not be found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Invite was already accepted, use the \"Remove the current user from a room\" endpoint instead", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/federation/invitation": { + "get": { + "operationId": "federation-get-shares", + "summary": "Get a list of federation invites", + "description": "🚧 Draft: Still work in progress", + "tags": [ + "federation" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Get list of received federation invites successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/FederationInvite" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/federation/active": { + "post": { + "operationId": "room-join-federated-room", + "summary": "Join room on the host server using the session id of the federated user", + "description": "The session id can be null only for requests from Talk < 20.", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sessionId": { + "type": "string", + "nullable": true, + "description": "Federated session id to join with" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Federated user joined the room", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-leave-federated-room", + "summary": "Leave room on the host server using the session id of the federated user", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Federated session id to leave with", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully left the room", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found (non-federation request)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bot/{token}/message": { + "post": { + "operationId": "bot-send-message", + "summary": "Sends a new chat message to the given room", + "description": "The author and timestamp are automatically set to the current user/guest and time.", + "tags": [ + "bot" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "The message to send" + }, + "referenceId": { + "type": "string", + "default": "", + "description": "For the message to be able to later identify it again" + }, + "replyTo": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Parent id which this message is a reply to" + }, + "silent": { + "type": "boolean", + "default": false, + "description": "If sent silent the chat message will not create any notifications" + }, + "threadTitle": { + "type": "string", + "default": "", + "description": "Only supported when not replying, when given will create a thread (requires `threads` capability)" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this message is a reply to without quoting a specific message (ignored when $replyTo is given, also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "description": "Conversation token", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Message sent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "When the replyTo is invalid or message is empty", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Sending message is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bot/{token}/reaction/{messageId}": { + "post": { + "operationId": "bot-react", + "summary": "Adds a reaction to a chat message", + "tags": [ + "bot" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "reaction" + ], + "properties": { + "reaction": { + "type": "string", + "description": "Reaction to add" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "description": "Conversation token", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction already exists", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "201": { + "description": "Reacted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Reacting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Reacting is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Reaction not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "bot-delete-reaction", + "summary": "Deletes a reaction from a chat message", + "tags": [ + "bot" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "description": "Conversation token", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "reaction", + "in": "query", + "description": "Reaction to delete", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Reacting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Reaction not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Reacting is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bot/admin": { + "get": { + "operationId": "bot-admin-list-bots", + "summary": "List admin bots", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bot list returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/BotWithDetails" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/certificate/expiration": { + "get": { + "operationId": "certificate-get-certificate-expiration", + "summary": "Get the certificate expiration for a host", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "host", + "in": "query", + "description": "Host to check", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Certificate expiration returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "expiration_in_days" + ], + "properties": { + "expiration_in_days": { + "type": "integer", + "format": "int64", + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting certificate expiration is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/hostedsignalingserver/requesttrial": { + "post": { + "operationId": "hosted_signaling_server-request-trial", + "summary": "Request a trial account", + "description": "This endpoint requires admin access", + "tags": [ + "hosted_signaling_server" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "url", + "name", + "email", + "language", + "country" + ], + "properties": { + "url": { + "type": "string", + "description": "Server URL" + }, + "name": { + "type": "string", + "description": "Display name of the user" + }, + "email": { + "type": "string", + "description": "Email of the user" + }, + "language": { + "type": "string", + "description": "Language of the user" + }, + "country": { + "type": "string", + "description": "Country of the user" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Trial requested successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Requesting trial is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/hostedsignalingserver/delete": { + "delete": { + "operationId": "hosted_signaling_server-delete-account", + "summary": "Delete the account", + "description": "This endpoint requires admin access", + "tags": [ + "hosted_signaling_server" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "204": { + "description": "Account deleted successfully" + }, + "400": { + "description": "Deleting account is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge": { + "delete": { + "operationId": "matterbridge_settings-stop-all-bridges", + "summary": "Stop all bridges", + "description": "This endpoint requires admin access", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "All bridges stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "406": { + "description": "Stopping all bridges is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge/version": { + "get": { + "operationId": "matterbridge_settings-get-matterbridge-version", + "summary": "Get Matterbridge version", + "description": "This endpoint requires admin access", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bridge version returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting bridge version is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/welcome/{serverId}": { + "get": { + "operationId": "recording-get-welcome-message", + "summary": "Get the welcome message of a recording server", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "serverId", + "in": "path", + "description": "ID of the server", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Welcome message returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "number", + "format": "double" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Recording server not found or not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/settings/sip": { + "post": { + "operationId": "settings-setsip-settings", + "summary": "Update SIP bridge settings", + "description": "This endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "sipGroups": { + "type": "array", + "default": [], + "description": "New SIP groups", + "items": { + "type": "string" + } + }, + "dialInInfo": { + "type": "string", + "default": "", + "description": "New dial info" + }, + "sharedSecret": { + "type": "string", + "default": "", + "description": "New shared secret" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully set new SIP settings", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/welcome/{serverId}": { + "get": { + "operationId": "signaling-get-welcome-message", + "summary": "Get the welcome message from a signaling server", + "description": "Only available for logged-in users because guests can not use the apps right now.\nThis endpoint requires admin access", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "serverId", + "in": "path", + "description": "ID of the signaling server", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Welcome message returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string" + }, + "warning": { + "type": "string" + }, + "features": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Signaling server not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "500": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + }, + "version": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "403": { + "description": "Logged in account must be an admin", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/backend": { + "post": { + "operationId": "recording-backend", + "summary": "Update the recording status as a backend", + "tags": [ + "recording" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "talk-recording-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-recording-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the recording backend", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording status updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating recording status is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "type", + "error" + ], + "properties": { + "type": { + "type": "string" + }, + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to update recording status", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "type", + "error" + ], + "properties": { + "type": { + "type": "string" + }, + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "type", + "error" + ], + "properties": { + "type": { + "type": "string" + }, + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/store": { + "post": { + "operationId": "recording-store", + "summary": "Store the recording", + "tags": [ + "recording" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "owner": { + "type": "string", + "nullable": true, + "description": "User that will own the recording file. `null` is actually not allowed and will always result in a \"400 Bad Request\". It's only allowed code-wise to handle requests where the post data exceeded the limits, so we can return a proper error instead of \"500 Internal Server Error\"." + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "talk-recording-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-recording-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the recording backend", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording stored successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Storing recording is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Missing permissions to store recording", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "type", + "error" + ], + "properties": { + "type": { + "type": "string" + }, + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/pin/{pin}": { + "get": { + "operationId": "room-verify-dial-in-pin-deprecated", + "summary": "Verify a dial-in PIN (SIP bridge)", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pin", + "in": "path", + "description": "PIN the participant used to dial-in", + "required": true, + "schema": { + "type": "string", + "pattern": "^\\d{7,32}$" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-in is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialin": { + "post": { + "operationId": "room-verify-dial-in-pin", + "summary": "Verify a dial-in PIN (SIP bridge)", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "pin" + ], + "properties": { + "pin": { + "type": "string", + "description": "PIN the participant used to dial-in" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-in is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/verify-dialout": { + "post": { + "operationId": "room-verify-dial-out-number", + "summary": "Verify a dial-out number (SIP bridge)", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "number" + ], + "properties": { + "number": { + "type": "string", + "description": "E164 formatted phone number" + }, + "options": { + "type": "object", + "default": {}, + "description": "Additional details to verify the validity of the request", + "properties": { + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "attendeeId": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Phone number and details could not be confirmed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Phone number is not invited as a participant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/direct-dial-in": { + "post": { + "operationId": "room-direct-dial-in", + "summary": "Direct dial-in (SIP bridge)", + "description": "Required capability: `sip-direct-dialin`", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "phoneNumber", + "caller" + ], + "properties": { + "phoneNumber": { + "type": "string", + "description": "Phone number that is called" + }, + "caller": { + "type": "string", + "description": "Phone number of the person calling in" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call conversation created", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Number is not assigned to any user", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "500": { + "description": "Error occurred while creating conversation", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-in is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/open-dial-in": { + "post": { + "operationId": "room-create-guest-by-dial-in", + "summary": "Create a guest by their dial-in", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "SIP not enabled", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/rejected-dialout": { + "delete": { + "operationId": "room-rejected-dial-out-request", + "summary": "Reset call ID of a dial-out participant when the SIP gateway rejected it", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "callId", + "in": "query", + "description": "The call ID provided by the SIP bridge earlier to uniquely identify the call to terminate", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "options", + "in": "query", + "description": "Additional details to verify the validity of the request", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call ID reset", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Call ID mismatch or attendeeId not found in $options", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant was not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/backend": { + "post": { + "operationId": "signaling-backend", + "summary": "Backend API to query information required for standalone signaling servers", + "description": "See sections \"Backend validation\" in https://nextcloud-spreed-signaling.readthedocs.io/en/latest/standalone-signaling-api-v1/#backend-requests", + "tags": [ + "signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "spreed-signaling-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "spreed-signaling-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the signaling backend", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Always, sorry about that", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string" + }, + "error": { + "type": "object", + "required": [ + "code", + "message" + ], + "properties": { + "code": { + "type": "string" + }, + "message": { + "type": "string" + } + } + }, + "auth": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string" + }, + "userid": { + "type": "string" + }, + "user": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + }, + "room": { + "type": "object", + "required": [ + "version" + ], + "properties": { + "version": { + "type": "string" + }, + "roomid": { + "type": "string" + }, + "properties": { + "type": "object", + "additionalProperties": { + "type": "object" + } + }, + "permissions": { + "type": "array", + "items": { + "type": "string" + } + }, + "session": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "tags": [] +} diff --git a/openapi.json b/openapi.json new file mode 100644 index 0000000..35f0ddf --- /dev/null +++ b/openapi.json @@ -0,0 +1,23930 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "spreed", + "version": "0.0.1", + "description": "Chat, video & audio-conferencing using WebRTC", + "license": { + "name": "agpl" + } + }, + "components": { + "securitySchemes": { + "basic_auth": { + "type": "http", + "scheme": "basic" + }, + "bearer_auth": { + "type": "http", + "scheme": "bearer" + } + }, + "schemas": { + "ActorTypes": { + "type": "string", + "enum": [ + "users", + "groups", + "guests", + "emails", + "circles", + "bridged", + "bots", + "federated_users", + "phones" + ] + }, + "Ban": { + "type": "object", + "required": [ + "id", + "moderatorActorType", + "moderatorActorId", + "moderatorDisplayName", + "bannedActorType", + "bannedActorId", + "bannedDisplayName", + "bannedTime", + "internalNote" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "moderatorActorType": { + "type": "string" + }, + "moderatorActorId": { + "type": "string" + }, + "moderatorDisplayName": { + "type": "string" + }, + "bannedActorType": { + "type": "string" + }, + "bannedActorId": { + "type": "string" + }, + "bannedDisplayName": { + "type": "string" + }, + "bannedTime": { + "type": "integer", + "format": "int64" + }, + "internalNote": { + "type": "string" + } + } + }, + "BaseMessage": { + "type": "object", + "required": [ + "actorDisplayName", + "actorId", + "actorType", + "expirationTimestamp", + "message", + "messageParameters", + "messageType", + "systemMessage" + ], + "properties": { + "actorDisplayName": { + "type": "string" + }, + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "expirationTimestamp": { + "type": "integer", + "format": "int64" + }, + "message": { + "type": "string" + }, + "messageParameters": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/RichObjectParameter" + } + }, + "messageType": { + "type": "string" + }, + "systemMessage": { + "type": "string" + } + } + }, + "Bot": { + "type": "object", + "required": [ + "description", + "id", + "name", + "state" + ], + "properties": { + "description": { + "type": "string", + "nullable": true + }, + "id": { + "type": "integer", + "format": "int64" + }, + "name": { + "type": "string" + }, + "state": { + "type": "integer", + "format": "int64" + } + } + }, + "CallPeer": { + "type": "object", + "required": [ + "actorId", + "actorType", + "displayName", + "lastPing", + "sessionId", + "token" + ], + "properties": { + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "lastPing": { + "type": "integer", + "format": "int64" + }, + "sessionId": { + "type": "string" + }, + "token": { + "type": "string" + } + } + }, + "Capabilities": { + "type": "object", + "required": [ + "features", + "features-local", + "config", + "config-local", + "version" + ], + "properties": { + "features": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "features-local": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "config": { + "type": "object", + "required": [ + "attachments", + "call", + "chat", + "conversations", + "federation", + "previews", + "signaling", + "experiments", + "permissions" + ], + "properties": { + "attachments": { + "type": "object", + "required": [ + "allowed" + ], + "properties": { + "allowed": { + "type": "boolean" + }, + "folder": { + "type": "string" + } + } + }, + "call": { + "type": "object", + "required": [ + "enabled", + "breakout-rooms", + "recording", + "recording-consent", + "supported-reactions", + "predefined-backgrounds", + "predefined-backgrounds-v2", + "can-upload-background", + "sip-enabled", + "sip-dialout-enabled", + "default-phone-region", + "can-enable-sip", + "start-without-media", + "max-duration", + "blur-virtual-background", + "end-to-end-encryption", + "live-transcription", + "play-sounds", + "grid-limit", + "grid-limit-enforced" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "breakout-rooms": { + "type": "boolean" + }, + "recording": { + "type": "boolean" + }, + "recording-consent": { + "type": "integer", + "format": "int64" + }, + "supported-reactions": { + "type": "array", + "items": { + "type": "string" + } + }, + "predefined-backgrounds": { + "type": "array", + "description": "List of file names relative to the spreed/img/backgrounds/ web path, e.g. `2_home.jpg`", + "items": { + "type": "string" + } + }, + "predefined-backgrounds-v2": { + "type": "array", + "description": "List of file paths relative to the server web root with leading slash, e.g. `/apps/spreed/img/backgrounds/2_home.jpg`", + "items": { + "type": "string" + } + }, + "can-upload-background": { + "type": "boolean" + }, + "sip-enabled": { + "type": "boolean" + }, + "sip-dialout-enabled": { + "type": "boolean" + }, + "default-phone-region": { + "type": "string" + }, + "can-enable-sip": { + "type": "boolean" + }, + "start-without-media": { + "type": "boolean" + }, + "max-duration": { + "type": "integer", + "format": "int64" + }, + "blur-virtual-background": { + "type": "boolean" + }, + "end-to-end-encryption": { + "type": "boolean" + }, + "live-transcription": { + "type": "boolean" + }, + "play-sounds": { + "type": "boolean" + }, + "grid-limit": { + "type": "integer", + "format": "int64" + }, + "grid-limit-enforced": { + "type": "boolean" + } + } + }, + "chat": { + "type": "object", + "required": [ + "max-length", + "read-privacy", + "has-translation-providers", + "has-translation-task-providers", + "typing-privacy", + "summary-threshold", + "matterbridge-enabled" + ], + "properties": { + "max-length": { + "type": "integer", + "format": "int64" + }, + "read-privacy": { + "type": "integer", + "format": "int64" + }, + "has-translation-providers": { + "type": "boolean" + }, + "has-translation-task-providers": { + "type": "boolean" + }, + "typing-privacy": { + "type": "integer", + "format": "int64" + }, + "summary-threshold": { + "type": "integer", + "format": "int64", + "minimum": 1 + }, + "matterbridge-enabled": { + "type": "boolean" + } + } + }, + "conversations": { + "type": "object", + "required": [ + "can-create", + "force-passwords", + "list-style", + "description-length", + "retention-event", + "retention-phone", + "retention-instant-meetings" + ], + "properties": { + "can-create": { + "type": "boolean" + }, + "force-passwords": { + "type": "boolean" + }, + "list-style": { + "type": "string", + "enum": [ + "two-lines", + "compact" + ] + }, + "description-length": { + "type": "integer", + "format": "int64", + "minimum": 1 + }, + "retention-event": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "retention-phone": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "retention-instant-meetings": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "federation": { + "type": "object", + "required": [ + "enabled", + "incoming-enabled", + "outgoing-enabled", + "only-trusted-servers" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "incoming-enabled": { + "type": "boolean" + }, + "outgoing-enabled": { + "type": "boolean" + }, + "only-trusted-servers": { + "type": "boolean" + } + } + }, + "previews": { + "type": "object", + "required": [ + "max-gif-size" + ], + "properties": { + "max-gif-size": { + "type": "integer", + "format": "int64" + } + } + }, + "signaling": { + "type": "object", + "required": [ + "session-ping-limit", + "mode" + ], + "properties": { + "session-ping-limit": { + "type": "integer", + "format": "int64" + }, + "mode": { + "type": "string", + "enum": [ + "internal", + "external", + "conversation_cluster" + ] + }, + "hello-v2-token-key": { + "type": "string" + } + } + }, + "experiments": { + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "permissions": { + "type": "object", + "required": [ + "max-default", + "max-custom", + "default" + ], + "properties": { + "max-default": { + "type": "integer", + "format": "int64" + }, + "max-custom": { + "type": "integer", + "format": "int64" + }, + "default": { + "type": "integer", + "format": "int64" + } + } + } + } + }, + "config-local": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "version": { + "type": "string" + } + } + }, + "ChatMentionSuggestion": { + "type": "object", + "required": [ + "id", + "label", + "source", + "mentionId" + ], + "properties": { + "id": { + "type": "string" + }, + "label": { + "type": "string" + }, + "source": { + "type": "string" + }, + "mentionId": { + "type": "string" + }, + "details": { + "type": "string" + }, + "status": { + "type": "string" + }, + "statusClearAt": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "statusIcon": { + "type": "string", + "nullable": true + }, + "statusMessage": { + "type": "string", + "nullable": true + } + } + }, + "ChatMessage": { + "allOf": [ + { + "$ref": "#/components/schemas/BaseMessage" + }, + { + "type": "object", + "required": [ + "id", + "isReplyable", + "markdown", + "reactions", + "referenceId", + "timestamp", + "token" + ], + "properties": { + "deleted": { + "type": "boolean", + "enum": [ + true + ] + }, + "id": { + "type": "integer", + "format": "int64" + }, + "isReplyable": { + "type": "boolean" + }, + "markdown": { + "type": "boolean" + }, + "reactions": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + }, + "reactionsSelf": { + "type": "array", + "items": { + "type": "string" + } + }, + "referenceId": { + "type": "string" + }, + "timestamp": { + "type": "integer", + "format": "int64" + }, + "token": { + "type": "string" + }, + "lastEditActorDisplayName": { + "type": "string" + }, + "lastEditActorId": { + "type": "string" + }, + "lastEditActorType": { + "type": "string" + }, + "lastEditTimestamp": { + "type": "integer", + "format": "int64" + }, + "silent": { + "type": "boolean" + }, + "threadId": { + "type": "integer", + "format": "int64" + }, + "isThread": { + "type": "boolean" + }, + "threadTitle": { + "type": "string" + }, + "threadReplies": { + "type": "integer", + "format": "int64" + } + } + } + ] + }, + "ChatMessageWithParent": { + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + }, + { + "type": "object", + "properties": { + "parent": { + "anyOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + }, + { + "$ref": "#/components/schemas/DeletedChatMessage" + } + ] + } + } + } + ] + }, + "ChatProxyMessage": { + "$ref": "#/components/schemas/BaseMessage" + }, + "ChatReminder": { + "type": "object", + "required": [ + "messageId", + "timestamp", + "token", + "userId" + ], + "properties": { + "messageId": { + "type": "integer", + "format": "int64" + }, + "timestamp": { + "type": "integer", + "format": "int64" + }, + "token": { + "type": "string" + }, + "userId": { + "type": "string" + } + } + }, + "ChatReminderUpcoming": { + "type": "object", + "required": [ + "actorDisplayName", + "actorId", + "actorType", + "message", + "messageId", + "messageParameters", + "reminderTimestamp", + "roomToken" + ], + "properties": { + "actorDisplayName": { + "type": "string" + }, + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "message": { + "type": "string" + }, + "messageId": { + "type": "integer", + "format": "int64" + }, + "messageParameters": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/RichObjectParameter" + } + }, + "reminderTimestamp": { + "type": "integer", + "format": "int64" + }, + "roomToken": { + "type": "string" + } + } + }, + "DashboardEvent": { + "type": "object", + "required": [ + "calendars", + "eventName", + "eventDescription", + "eventAttachments", + "eventLink", + "start", + "end", + "roomToken", + "roomAvatarVersion", + "roomName", + "roomDisplayName", + "roomType", + "roomActiveSince", + "invited", + "accepted", + "tentative", + "declined" + ], + "properties": { + "calendars": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardEventCalendar" + }, + "minItems": 1 + }, + "eventName": { + "type": "string" + }, + "eventDescription": { + "type": "string", + "nullable": true + }, + "eventAttachments": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/DashboardEventAttachment" + } + }, + "eventLink": { + "type": "string" + }, + "start": { + "type": "integer", + "format": "int64" + }, + "end": { + "type": "integer", + "format": "int64" + }, + "roomToken": { + "type": "string" + }, + "roomAvatarVersion": { + "type": "string" + }, + "roomName": { + "type": "string" + }, + "roomDisplayName": { + "type": "string" + }, + "roomType": { + "type": "integer", + "format": "int64" + }, + "roomActiveSince": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "invited": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "accepted": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "tentative": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "declined": { + "type": "integer", + "format": "int64", + "nullable": true + } + } + }, + "DashboardEventAttachment": { + "type": "object", + "required": [ + "calendars", + "fmttype", + "filename", + "fileid", + "preview", + "previewLink" + ], + "properties": { + "calendars": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1 + }, + "fmttype": { + "type": "string" + }, + "filename": { + "type": "string" + }, + "fileid": { + "type": "integer", + "format": "int64" + }, + "preview": { + "type": "boolean" + }, + "previewLink": { + "type": "string", + "nullable": true + } + } + }, + "DashboardEventCalendar": { + "type": "object", + "required": [ + "principalUri", + "calendarName", + "calendarColor" + ], + "properties": { + "principalUri": { + "type": "string" + }, + "calendarName": { + "type": "string" + }, + "calendarColor": { + "type": "string", + "nullable": true + } + } + }, + "DeletedChatMessage": { + "type": "object", + "required": [ + "id", + "deleted" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "deleted": { + "type": "boolean", + "enum": [ + true + ] + } + } + }, + "InvitationList": { + "type": "object", + "properties": { + "users": { + "type": "array", + "items": { + "type": "string" + } + }, + "federated_users": { + "type": "array", + "items": { + "type": "string" + } + }, + "groups": { + "type": "array", + "items": { + "type": "string" + } + }, + "emails": { + "type": "array", + "items": { + "type": "string" + } + }, + "phones": { + "type": "array", + "items": { + "type": "string" + } + }, + "teams": { + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "LiveTranscriptionLanguage": { + "type": "object", + "required": [ + "name", + "metadata" + ], + "properties": { + "name": { + "type": "string" + }, + "metadata": { + "type": "object", + "required": [ + "separator", + "rtl" + ], + "properties": { + "separator": { + "type": "string" + }, + "rtl": { + "type": "boolean" + } + } + } + } + }, + "Matterbridge": { + "type": "object", + "required": [ + "enabled", + "parts", + "pid" + ], + "properties": { + "enabled": { + "type": "boolean" + }, + "parts": { + "$ref": "#/components/schemas/MatterbridgeConfigFields" + }, + "pid": { + "type": "integer", + "format": "int64" + } + } + }, + "MatterbridgeConfigFields": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "type": "object" + } + } + }, + "MatterbridgeProcessState": { + "type": "object", + "required": [ + "log", + "running" + ], + "properties": { + "log": { + "type": "string" + }, + "running": { + "type": "boolean" + } + } + }, + "MatterbridgeWithProcessState": { + "allOf": [ + { + "$ref": "#/components/schemas/Matterbridge" + }, + { + "$ref": "#/components/schemas/MatterbridgeProcessState" + } + ] + }, + "OCSMeta": { + "type": "object", + "required": [ + "status", + "statuscode" + ], + "properties": { + "status": { + "type": "string" + }, + "statuscode": { + "type": "integer" + }, + "message": { + "type": "string" + }, + "totalitems": { + "type": "string" + }, + "itemsperpage": { + "type": "string" + } + } + }, + "Participant": { + "type": "object", + "required": [ + "actorId", + "actorType", + "attendeeId", + "attendeePermissions", + "attendeePin", + "displayName", + "inCall", + "lastPing", + "participantType", + "permissions", + "roomToken", + "sessionIds" + ], + "properties": { + "actorId": { + "type": "string" + }, + "invitedActorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "attendeeId": { + "type": "integer", + "format": "int64" + }, + "attendeePermissions": { + "type": "integer", + "format": "int64" + }, + "attendeePin": { + "type": "string" + }, + "displayName": { + "type": "string" + }, + "inCall": { + "type": "integer", + "format": "int64" + }, + "lastPing": { + "type": "integer", + "format": "int64" + }, + "participantType": { + "type": "integer", + "format": "int64" + }, + "permissions": { + "type": "integer", + "format": "int64" + }, + "roomToken": { + "type": "string" + }, + "sessionIds": { + "type": "array", + "items": { + "type": "string" + } + }, + "status": { + "type": "string" + }, + "statusClearAt": { + "type": "integer", + "format": "int64", + "nullable": true + }, + "statusIcon": { + "type": "string", + "nullable": true + }, + "statusMessage": { + "type": "string", + "nullable": true + }, + "phoneNumber": { + "type": "string", + "nullable": true + }, + "callId": { + "type": "string", + "nullable": true + } + } + }, + "Poll": { + "allOf": [ + { + "$ref": "#/components/schemas/PollDraft" + }, + { + "type": "object", + "properties": { + "details": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PollVote" + } + }, + "numVoters": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "votedSelf": { + "type": "array", + "items": { + "type": "integer", + "format": "int64" + } + }, + "votes": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int64" + } + } + } + } + ] + }, + "PollDraft": { + "type": "object", + "required": [ + "actorDisplayName", + "actorId", + "actorType", + "id", + "maxVotes", + "options", + "question", + "resultMode", + "status" + ], + "properties": { + "actorDisplayName": { + "type": "string" + }, + "actorId": { + "type": "string", + "minLength": 1 + }, + "actorType": { + "$ref": "#/components/schemas/ActorTypes" + }, + "id": { + "type": "integer", + "format": "int64", + "minimum": 1 + }, + "maxVotes": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "options": { + "type": "array", + "items": { + "type": "string" + } + }, + "question": { + "type": "string", + "minLength": 1 + }, + "resultMode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ] + }, + "status": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ] + } + } + }, + "PollVote": { + "type": "object", + "required": [ + "actorDisplayName", + "actorId", + "actorType", + "optionId" + ], + "properties": { + "actorDisplayName": { + "type": "string" + }, + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "optionId": { + "type": "integer", + "format": "int64" + } + } + }, + "PublicCapabilities": { + "type": "object", + "properties": { + "spreed": { + "$ref": "#/components/schemas/Capabilities" + } + } + }, + "Reaction": { + "type": "object", + "required": [ + "actorDisplayName", + "actorId", + "actorType", + "timestamp" + ], + "properties": { + "actorDisplayName": { + "type": "string" + }, + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "timestamp": { + "type": "integer", + "format": "int64" + } + } + }, + "RichObjectParameter": { + "type": "object", + "required": [ + "type", + "id", + "name" + ], + "properties": { + "type": { + "type": "string" + }, + "id": { + "type": "string" + }, + "name": { + "type": "string" + }, + "server": { + "type": "string" + }, + "link": { + "type": "string" + }, + "call-type": { + "type": "string", + "enum": [ + "one2one", + "group", + "public" + ] + }, + "icon-url": { + "type": "string" + }, + "message-id": { + "type": "string" + }, + "boardname": { + "type": "string" + }, + "stackname": { + "type": "string" + }, + "size": { + "type": "string" + }, + "path": { + "type": "string" + }, + "mimetype": { + "type": "string" + }, + "preview-available": { + "type": "string", + "enum": [ + "yes", + "no" + ] + }, + "hide-download": { + "type": "string", + "enum": [ + "yes", + "no" + ] + }, + "mtime": { + "type": "string" + }, + "latitude": { + "type": "string" + }, + "longitude": { + "type": "string" + }, + "description": { + "type": "string" + }, + "thumb": { + "type": "string" + }, + "website": { + "type": "string" + }, + "visibility": { + "type": "string", + "enum": [ + "0", + "1" + ] + }, + "assignable": { + "type": "string", + "enum": [ + "0", + "1" + ] + }, + "conversation": { + "type": "string" + }, + "etag": { + "type": "string" + }, + "permissions": { + "type": "string" + }, + "width": { + "type": "string" + }, + "height": { + "type": "string" + }, + "blurhash": { + "type": "string" + } + } + }, + "Room": { + "type": "object", + "required": [ + "actorId", + "actorType", + "attendeeId", + "attendeePermissions", + "attendeePin", + "avatarVersion", + "breakoutRoomMode", + "breakoutRoomStatus", + "callFlag", + "callPermissions", + "callRecording", + "callStartTime", + "canDeleteConversation", + "canEnableSIP", + "canLeaveConversation", + "canStartCall", + "defaultPermissions", + "description", + "displayName", + "hasCall", + "hasPassword", + "id", + "isCustomAvatar", + "isFavorite", + "lastActivity", + "lastCommonReadMessage", + "lastPing", + "lastReadMessage", + "listable", + "liveTranscriptionLanguageId", + "lobbyState", + "lobbyTimer", + "mentionPermissions", + "messageExpiration", + "name", + "notificationCalls", + "notificationLevel", + "objectId", + "objectType", + "participantFlags", + "participantType", + "permissions", + "readOnly", + "recordingConsent", + "sessionId", + "sipEnabled", + "token", + "type", + "unreadMention", + "unreadMentionDirect", + "unreadMessages", + "isArchived", + "isImportant", + "isSensitive" + ], + "properties": { + "actorId": { + "type": "string", + "description": "The unique identifier for the given actor type" + }, + "invitedActorId": { + "type": "string", + "description": "The cloud id of the invited user" + }, + "actorType": { + "type": "string", + "description": "Actor type of the current user (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-types))" + }, + "attendeeId": { + "type": "integer", + "format": "int64", + "description": "Unique attendee id" + }, + "attendeePermissions": { + "type": "integer", + "format": "int64", + "description": "Dedicated permissions for the current participant, if not `Custom` this are not the resulting permissions (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" + }, + "attendeePin": { + "type": "string", + "nullable": true, + "description": "Unique dial-in authentication code for this user, when the conversation has SIP enabled (see `sipEnabled` attribute)" + }, + "avatarVersion": { + "type": "string", + "description": "Version of conversation avatar used to easier expiration of the avatar in case a moderator updates it, since the avatar endpoint should be cached for 24 hours. (only available with `avatar` capability)" + }, + "breakoutRoomMode": { + "type": "integer", + "format": "int64", + "description": "Breakout room configuration mode (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-modes)) (only available with `breakout-rooms-v1` capability)" + }, + "breakoutRoomStatus": { + "type": "integer", + "format": "int64", + "description": "Breakout room status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#breakout-room-status)) (only available with `breakout-rooms-v1` capability)" + }, + "callFlag": { + "type": "integer", + "format": "int64", + "description": "Combined flag of all participants in the current call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-in-call-flag), only available with `conversation-call-flags` capability)" + }, + "callPermissions": { + "type": "integer", + "format": "int64", + "description": "Call permissions, if not `Custom` this are not the resulting permissions, if set they will reset after the end of the call (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" + }, + "callRecording": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5 + ], + "description": "Type of call recording (see [Constants - Call recording status](https://nextcloud-talk.readthedocs.io/en/latest/constants#call-recording-status)) (only available with `recording-v1` capability)" + }, + "callStartTime": { + "type": "integer", + "format": "int64", + "description": "Timestamp when the call was started (only available with `recording-v1` capability)" + }, + "canDeleteConversation": { + "type": "boolean", + "description": "Flag if the user can delete the conversation for everyone (not possible without moderator permissions or in one-to-one conversations)" + }, + "canEnableSIP": { + "type": "boolean", + "description": "Whether the given user can enable SIP for this conversation. Note that when the token is not-numeric only, SIP can not be enabled even if the user is permitted and a moderator of the conversation" + }, + "canLeaveConversation": { + "type": "boolean", + "description": "Flag if the user can leave the conversation (not possible for the last user with moderator permissions)" + }, + "canStartCall": { + "type": "boolean", + "description": "Flag if the user can start a new call in this conversation (joining is always possible) (only available with `start-call-flag` capability)" + }, + "defaultPermissions": { + "type": "integer", + "format": "int64", + "description": "Default permissions for new participants (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" + }, + "description": { + "type": "string", + "description": "Description of the conversation (can also be empty) (only available with `room-description` capability)" + }, + "displayName": { + "type": "string", + "description": "`name` if non-empty, otherwise it falls back to a list of participants" + }, + "hasCall": { + "type": "boolean", + "description": "Flag if the conversation has an active call" + }, + "hasPassword": { + "type": "boolean", + "description": "Flag if the conversation has a password" + }, + "id": { + "type": "integer", + "format": "int64", + "description": "Numeric identifier of the conversation" + }, + "isCustomAvatar": { + "type": "boolean", + "description": "Flag if the conversation has a custom avatar (only available with `avatar` capability)" + }, + "isFavorite": { + "type": "boolean", + "description": "Flag if the conversation is favorited by the user" + }, + "lastActivity": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the last activity in the conversation, in seconds and UTC time zone" + }, + "lastCommonReadMessage": { + "type": "integer", + "format": "int64", + "description": "ID of the last message read by every user that has read privacy set to public in a room. When the user themself has it set to private the value is `0` (only available with `chat-read-status` capability)" + }, + "lastMessage": { + "$ref": "#/components/schemas/RoomLastMessage", + "description": "Last message in a conversation if available, otherwise empty. **Note:** Even when given the message will not contain the `parent` or `reactionsSelf` attribute due to performance reasons" + }, + "lastPing": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the user's session making the request" + }, + "lastReadMessage": { + "type": "integer", + "format": "int64", + "description": "ID of the last read message in a room (only available with `chat-read-marker` capability)" + }, + "listable": { + "type": "integer", + "format": "int64", + "description": "Listable scope for the room (only available with `listable-rooms` capability)" + }, + "liveTranscriptionLanguageId": { + "type": "string", + "description": "ID of the language to use for live transcriptions in the room," + }, + "lobbyState": { + "type": "integer", + "format": "int64", + "description": "Webinar lobby restriction (0-1), if the participant is a moderator they can always join the conversation (only available with `webinary-lobby` capability) (See [Webinar lobby states](https://nextcloud-talk.readthedocs.io/en/latest/constants#webinar-lobby-states))" + }, + "lobbyTimer": { + "type": "integer", + "format": "int64", + "description": "Timestamp when the lobby will be automatically disabled (only available with `webinary-lobby` capability)" + }, + "mentionPermissions": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Whether all participants can mention using `@all` or only moderators (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#mention-permissions)) (only available with `mention-permissions` capability)" + }, + "messageExpiration": { + "type": "integer", + "format": "int64", + "description": "The message expiration time in seconds in this chat. Zero if disabled. (only available with `message-expiration` capability)" + }, + "name": { + "type": "string", + "description": "Name of the conversation (can also be empty)" + }, + "notificationCalls": { + "type": "integer", + "format": "int64" + }, + "notificationLevel": { + "type": "integer", + "format": "int64", + "description": "The notification level for the user (See [Participant notification levels](https://nextcloud-talk.readthedocs.io/en/latest/constants#participant-notification-levels))" + }, + "objectId": { + "type": "string", + "description": "See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types) documentation for explanation" + }, + "objectType": { + "type": "string", + "description": "The type of object that the conversation is associated with (See [Object types](https://nextcloud-talk.readthedocs.io/en/latest/constants#object-types))" + }, + "participantFlags": { + "type": "integer", + "format": "int64", + "description": "\"In call\" flags of the user's session making the request (only available with `in-call-flags` capability)" + }, + "participantType": { + "type": "integer", + "format": "int64", + "description": "Permissions level of the current user" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "Combined final permissions for the current participant, permissions are picked in order of attendee then call then default and the first which is `Custom` will apply (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#attendee-permissions))" + }, + "readOnly": { + "type": "integer", + "format": "int64", + "description": "Read-only state for the current user (only available with `read-only-rooms` capability)" + }, + "recordingConsent": { + "type": "integer", + "format": "int64", + "description": "Whether recording consent is required before joining a call (Only 0 and 1 will be returned, see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#recording-consent-required)) (only available with `recording-consent` capability)" + }, + "remoteServer": { + "type": "string" + }, + "remoteToken": { + "type": "string" + }, + "sessionId": { + "type": "string", + "description": "`'0'` if not connected, otherwise an up to 512 character long string that is the identifier of the user's session making the request. Should only be used to pre-check if the user joined already with this session, but this might be outdated by the time of usage, so better check via [Get list of participants in a conversation](https://nextcloud-talk.readthedocs.io/en/latest/participant/#get-list-of-participants-in-a-conversation)" + }, + "sipEnabled": { + "type": "integer", + "format": "int64", + "description": "SIP enable status (see [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants#sip-states))" + }, + "status": { + "type": "string", + "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status" + }, + "statusClearAt": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" + }, + "statusIcon": { + "type": "string", + "nullable": true, + "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" + }, + "statusMessage": { + "type": "string", + "nullable": true, + "description": "Optional: Only available for one-to-one conversations, when `includeStatus=true` is set and the user has a status, can still be null even with a status" + }, + "token": { + "type": "string", + "description": "Token identifier of the conversation which is used for further interaction" + }, + "type": { + "type": "integer", + "format": "int64", + "description": "See list of conversation types in the [constants list](https://nextcloud-talk.readthedocs.io/en/latest/constants/#conversation-types)" + }, + "unreadMention": { + "type": "boolean", + "description": "Flag if the user was mentioned since their last visit" + }, + "unreadMentionDirect": { + "type": "boolean", + "description": "Flag if the user was mentioned directly (ignoring `@all` mentions) since their last visit (only available with `direct-mention-flag` capability)" + }, + "unreadMessages": { + "type": "integer", + "format": "int64", + "description": "Number of unread chat messages in the conversation (only available with `chat-v2` capability)" + }, + "isArchived": { + "type": "boolean", + "description": "Flag if the conversation is archived by the user (only available with `archived-conversations-v2` capability)" + }, + "isImportant": { + "type": "boolean", + "description": "Required capability: `important-conversations`" + }, + "isSensitive": { + "type": "boolean", + "description": "Required capability: `sensitive-conversations`" + } + } + }, + "RoomLastMessage": { + "anyOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + }, + { + "$ref": "#/components/schemas/ChatProxyMessage" + } + ] + }, + "RoomWithInvalidInvitations": { + "allOf": [ + { + "$ref": "#/components/schemas/Room" + }, + { + "type": "object", + "required": [ + "invalidParticipants" + ], + "properties": { + "invalidParticipants": { + "$ref": "#/components/schemas/InvitationList" + } + } + } + ] + }, + "SignalingFederationSettings": { + "type": "object", + "required": [ + "server", + "nextcloudServer", + "helloAuthParams", + "roomId" + ], + "properties": { + "server": { + "type": "string" + }, + "nextcloudServer": { + "type": "string" + }, + "helloAuthParams": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string" + } + } + }, + "roomId": { + "type": "string" + } + } + }, + "SignalingSession": { + "type": "object", + "required": [ + "actorId", + "actorType", + "inCall", + "lastPing", + "participantPermissions", + "roomId", + "sessionId", + "userId" + ], + "properties": { + "actorId": { + "type": "string" + }, + "actorType": { + "type": "string" + }, + "inCall": { + "type": "integer", + "format": "int64" + }, + "lastPing": { + "type": "integer", + "format": "int64" + }, + "participantPermissions": { + "type": "integer", + "format": "int64" + }, + "roomId": { + "type": "integer", + "format": "int64" + }, + "sessionId": { + "type": "string" + }, + "userId": { + "type": "string" + } + } + }, + "SignalingSettings": { + "type": "object", + "required": [ + "federation", + "hideWarning", + "server", + "signalingMode", + "sipDialinInfo", + "stunservers", + "turnservers", + "userId" + ], + "properties": { + "federation": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/SignalingFederationSettings" + } + ] + }, + "helloAuthParams": { + "type": "object", + "required": [ + "1.0", + "2.0" + ], + "properties": { + "1.0": { + "type": "object", + "required": [ + "userid", + "ticket" + ], + "properties": { + "userid": { + "type": "string", + "nullable": true + }, + "ticket": { + "type": "string" + } + } + }, + "2.0": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string" + } + } + } + } + }, + "hideWarning": { + "type": "boolean" + }, + "server": { + "type": "string" + }, + "signalingMode": { + "type": "string" + }, + "sipDialinInfo": { + "type": "string" + }, + "stunservers": { + "type": "array", + "items": { + "type": "object", + "required": [ + "urls" + ], + "properties": { + "urls": { + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "ticket": { + "type": "string" + }, + "turnservers": { + "type": "array", + "items": { + "type": "object", + "required": [ + "urls", + "username", + "credential" + ], + "properties": { + "urls": { + "type": "array", + "items": { + "type": "string" + } + }, + "username": { + "type": "string" + }, + "credential": { + "type": "object" + } + } + } + }, + "userId": { + "type": "string", + "nullable": true + } + } + }, + "Thread": { + "type": "object", + "required": [ + "id", + "roomToken", + "title", + "lastMessageId", + "lastActivity", + "numReplies" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64", + "minimum": 1 + }, + "roomToken": { + "type": "string" + }, + "title": { + "type": "string" + }, + "lastMessageId": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "lastActivity": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "numReplies": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "ThreadAttendee": { + "type": "object", + "required": [ + "notificationLevel" + ], + "properties": { + "notificationLevel": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2, + 3 + ] + } + } + }, + "ThreadInfo": { + "type": "object", + "required": [ + "thread", + "attendee", + "first", + "last" + ], + "properties": { + "thread": { + "$ref": "#/components/schemas/Thread" + }, + "attendee": { + "$ref": "#/components/schemas/ThreadAttendee" + }, + "first": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + } + ] + }, + "last": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessage" + } + ] + } + } + } + } + }, + "paths": { + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/avatar": { + "post": { + "operationId": "avatar-upload-avatar", + "summary": "Upload an avatar for a room", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar uploaded successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Avatar invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "avatar-get-avatar", + "summary": "Get the avatar of a room", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "darkTheme", + "in": "query", + "description": "Theme used for background", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + }, + "delete": { + "operationId": "avatar-delete-avatar", + "summary": "Delete the avatar of a room", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/avatar/emoji": { + "post": { + "operationId": "avatar-emoji-avatar", + "summary": "Set an emoji as avatar", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "emoji" + ], + "properties": { + "emoji": { + "type": "string", + "description": "Emoji" + }, + "color": { + "type": "string", + "nullable": true, + "description": "Color of the emoji" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Setting emoji avatar is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/avatar/dark": { + "get": { + "operationId": "avatar-get-avatar-dark", + "summary": "Get the dark mode avatar of a room", + "tags": [ + "avatar" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room avatar returned", + "content": { + "*/*": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/ban/{token}": { + "post": { + "operationId": "ban-ban-actor", + "summary": "Ban an actor or IP address", + "description": "Required capability: `ban-v1`", + "tags": [ + "ban" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "actorType", + "actorId" + ], + "properties": { + "actorType": { + "type": "string", + "enum": [ + "users", + "guests", + "emails", + "ip" + ], + "description": "Type of actor to ban, or `ip` when banning a clients remote address" + }, + "actorId": { + "type": "string", + "description": "Actor ID or the IP address or range in case of type `ip`" + }, + "internalNote": { + "type": "string", + "default": "", + "description": "Optional internal note (max. 4000 characters)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Ban successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Ban" + } + } + } + } + } + } + } + }, + "400": { + "description": "Actor information is invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "bannedActor", + "internalNote", + "moderator", + "self", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "ban-list-bans", + "summary": "List the bans of a conversation", + "description": "Required capability: `ban-v1`", + "tags": [ + "ban" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List all bans", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Ban" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/ban/{token}/{banId}": { + "delete": { + "operationId": "ban-unban-actor", + "summary": "Unban an actor or IP address", + "description": "Required capability: `ban-v1`", + "tags": [ + "ban" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "banId", + "in": "path", + "description": "ID of the ban to be removed", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Unban successfully or not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bot/{token}": { + "get": { + "operationId": "bot-list-bots", + "summary": "List bots", + "tags": [ + "bot" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bot list returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Bot" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bot/{token}/{botId}": { + "post": { + "operationId": "bot-enable-bot", + "summary": "Enables a bot", + "tags": [ + "bot" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "botId", + "in": "path", + "description": "ID of the bot", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bot already enabled", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Bot" + } + ] + } + } + } + } + } + } + } + }, + "201": { + "description": "Bot enabled successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Bot" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Enabling bot errored", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "bot-disable-bot", + "summary": "Disables a bot", + "tags": [ + "bot" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "botId", + "in": "path", + "description": "ID of the bot", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bot disabled successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/Bot" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Disabling bot errored", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}": { + "post": { + "operationId": "breakout_room-configure-breakout-rooms", + "summary": "Configure the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "mode", + "amount" + ], + "properties": { + "mode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2, + 3 + ], + "description": "Mode of the breakout rooms" + }, + "amount": { + "type": "integer", + "format": "int64", + "description": "Number of breakout rooms - Constants {@see BreakoutRoom::MINIMUM_ROOM_AMOUNT} and {@see BreakoutRoom::MAXIMUM_ROOM_AMOUNT}", + "minimum": 1, + "maximum": 20 + }, + "attendeeMap": { + "type": "string", + "default": "[]", + "description": "Mapping of the attendees to breakout rooms" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms configured successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Configuring breakout rooms errored", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "breakout_room-remove-breakout-rooms", + "summary": "Remove the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/broadcast": { + "post": { + "operationId": "breakout_room-broadcast-chat-message", + "summary": "Broadcast a chat message to all breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "Message to broadcast" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Chat message broadcasted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Broadcasting chat message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Chat message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/attendees": { + "post": { + "operationId": "breakout_room-apply-attendee-map", + "summary": "Apply an attendee map to the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "attendeeMap" + ], + "properties": { + "attendeeMap": { + "type": "string", + "description": "JSON encoded mapping of the attendees to breakout rooms `array`" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee map applied successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Applying attendee map is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/request-assistance": { + "post": { + "operationId": "breakout_room-request-assistance", + "summary": "Request assistance", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Assistance requested successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Requesting assistance is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "breakout_room-reset-request-for-assistance", + "summary": "Reset the request for assistance", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Request for assistance reset successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Resetting the request for assistance is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/rooms": { + "post": { + "operationId": "breakout_room-start-breakout-rooms", + "summary": "Start the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms started successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Starting breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "breakout_room-stop-breakout-rooms", + "summary": "Stop the breakout rooms", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Stopping breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/breakout-rooms/{token}/switch": { + "post": { + "operationId": "breakout_room-switch-breakout-room", + "summary": "Switch to another breakout room", + "tags": [ + "breakout_room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "target" + ], + "properties": { + "target": { + "type": "string", + "description": "Target breakout room" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Switched to breakout room successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Switching to breakout room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/dashboard/events": { + "get": { + "operationId": "calendar_integration-get-dashboard-events", + "summary": "Get up to 10 rooms that have events in the next 7 days sorted by their start timestamp ascending", + "description": "Required capability: `dashboard-event-rooms`", + "tags": [ + "calendar_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "A list of dashboard entries or an empty array", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardEvent" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/mutual-events": { + "get": { + "operationId": "calendar_integration-get-mutual-events", + "summary": "Get up to 3 events in the next 7 days sorted by their start timestamp ascending", + "description": "Required capability: `mutual-calendar-events`", + "tags": [ + "calendar_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "A list of dashboard entries or an empty array", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DashboardEvent" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Room is not a 1 to 1 room, room is invalid, or user is not participant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}": { + "get": { + "operationId": "call-get-peers-for-call", + "summary": "Get the peers for a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of peers in the call returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CallPeer" + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "call-join-call", + "summary": "Join a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "flags": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "In-Call flags", + "minimum": 0, + "maximum": 15 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "Join the call silently" + }, + "recordingConsent": { + "type": "boolean", + "default": false, + "description": "When the user ticked a checkbox and agreed with being recorded (Only needed when the `config => call => recording-consent` capability is set to {@see RecordingService::CONSENT_REQUIRED_YES} or the capability is {@see RecordingService::CONSENT_REQUIRED_OPTIONAL} and the conversation `recordingConsent` value is {@see RecordingService::CONSENT_REQUIRED_YES} )" + }, + "silentFor": { + "type": "array", + "default": [], + "description": "Send no call notification for previous participants", + "items": { + "type": "string" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call joined successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "No recording consent was given", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "call-update-call-flags", + "summary": "Update the in-call flags", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "flags" + ], + "properties": { + "flags": { + "type": "integer", + "format": "int64", + "description": "New flags", + "minimum": 0, + "maximum": 15 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "In-call flags updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating in-call flags is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "call-leave-call", + "summary": "Leave a call", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "all", + "in": "query", + "description": "whether to also terminate the call for all participants", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call left successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/notification-state": { + "get": { + "operationId": "call_notification-state", + "summary": "Check the expected state of a call notification", + "description": "Required capability: `call-notification-state-api`", + "tags": [ + "call" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Conversation token to check", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification should be kept alive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "201": { + "description": "Dismiss call notification and show \"Missed call\"-notification instead", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Not logged in, try again with auth data sent", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Dismiss call notification", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/download": { + "get": { + "operationId": "call-download-participants-for-call", + "summary": "Download the list of current call participants", + "description": "Required capability: `download-call-participants`", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "format", + "in": "query", + "description": "Download format", + "schema": { + "type": "string", + "default": "csv", + "enum": [ + "csv" + ] + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of participants in the call downloaded in the requested format", + "content": { + "text/csv": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "No call in progress" + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/federation": { + "post": { + "operationId": "call-join-federated-call", + "summary": "Join call on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "sessionId" + ], + "properties": { + "sessionId": { + "type": "string", + "description": "Federated session id to join with" + }, + "flags": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "In-Call flags", + "minimum": 0, + "maximum": 15 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "Join the call silently" + }, + "recordingConsent": { + "type": "boolean", + "default": false, + "description": "Agreement to be recorded" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call joined successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Conditions to join not met", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "call-update-federated-call-flags", + "summary": "Update the in-call flags on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "sessionId", + "flags" + ], + "properties": { + "sessionId": { + "type": "string", + "description": "Federated session id to update the flags with" + }, + "flags": { + "type": "integer", + "format": "int64", + "description": "New flags", + "minimum": 0, + "maximum": 15 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "In-call flags updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating in-call flags is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "call-leave-federated-call", + "summary": "Leave a call on the host server using the session id of the federated user", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "sessionId", + "in": "query", + "description": "Federated session id to leave with", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call left successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Call session not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/ring/{attendeeId}": { + "post": { + "operationId": "call-ring-attendee", + "summary": "Ring an attendee", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "path", + "description": "ID of the attendee to ring", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee rang successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee could not be found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Ringing attendee is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/call/{token}/dialout/{attendeeId}": { + "post": { + "operationId": "call-sip-dial-out", + "summary": "Call a SIP dial-out attendee", + "tags": [ + "call" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "path", + "description": "ID of the attendee to call", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Dial-out initiated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "SIP dial-out not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant could not be found or is a wrong type", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured on the server", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/file/{fileId}": { + "get": { + "operationId": "files_integration-get-room-by-file-id", + "summary": "Get the token of the room associated to the given file id", + "description": "This is the counterpart of self::getRoomByShareToken() for file ids instead of share tokens, although both return the same room token if the given file id and share token refer to the same file.\nIf there is no room associated to the given file id a new room is created; the new room is a public room associated with a \"file\" object with the given file id. Unlike normal rooms in which the owner is the user that created the room these are special rooms without owner (although self joined users with direct access to the file become persistent participants automatically when they join until they explicitly leave or no longer have access to the file).\nIn any case, to create or even get the token of the room, the file must be shared and the user must be the owner of a public share of the file (like a link share, for example) or have direct access to that file; an error is returned otherwise. A user has direct access to a file if they have access to it (or to an ancestor) through a user, group, circle or room share (but not through a link share, for example), or if they are the owner of such a file.", + "tags": [ + "files_integration" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "fileId", + "in": "path", + "description": "ID of the file", + "required": true, + "schema": { + "type": "string", + "pattern": "^.+$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room token returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token" + ], + "properties": { + "token": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Rooms not allowed for shares", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/publicshare/{shareToken}": { + "get": { + "operationId": "files_integration-get-room-by-share-token", + "summary": "Returns the token of the room associated to the file of the given share token", + "description": "This is the counterpart of self::getRoomByFileId() for share tokens instead of file ids, although both return the same room token if the given file id and share token refer to the same file.\nIf there is no room associated to the file id of the given share token a new room is created; the new room is a public room associated with a \"file\" object with the file id of the given share token. Unlike normal rooms in which the owner is the user that created the room these are special rooms without owner (although self joined users with direct access to the file become persistent participants automatically when they join until they explicitly leave or no longer have access to the file).\nIn any case, to create or even get the token of the room, the file must be publicly shared (like a link share, for example); an error is returned otherwise.\nBesides the token of the room this also returns the current user ID and display name, if any; this is needed by the Talk sidebar to know the actual current user, as the public share page uses the incognito mode and thus logged-in users as seen as guests.", + "tags": [ + "files_integration" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "shareToken", + "in": "path", + "description": "Token of the file share", + "required": true, + "schema": { + "type": "string", + "pattern": "^.+$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room token and user info returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token", + "userId", + "userDisplayName" + ], + "properties": { + "token": { + "type": "string" + }, + "userId": { + "type": "string" + }, + "userDisplayName": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Rooms not allowed for shares", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/guest/{token}/name": { + "post": { + "operationId": "guest-set-display-name", + "summary": "Set the display name as a guest", + "tags": [ + "guest" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "displayName" + ], + "properties": { + "displayName": { + "type": "string", + "description": "New display name" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Display name updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Not a guest", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Not a participant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge/{token}": { + "get": { + "operationId": "matterbridge-get-bridge-of-room", + "summary": "Get bridge information of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of configured bridges", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeWithProcessState" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "matterbridge-edit-bridge-of-room", + "summary": "Edit bridge information of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "enabled" + ], + "properties": { + "enabled": { + "type": "boolean", + "description": "If the bridge should be enabled" + }, + "parts": { + "$ref": "#/components/schemas/MatterbridgeConfigFields", + "default": [], + "description": "New parts" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bridge edited successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeProcessState" + } + } + } + } + } + } + } + }, + "406": { + "description": "Editing bridge is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "matterbridge-delete-bridge-of-room", + "summary": "Delete bridge of one room", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Bridge deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "boolean" + } + } + } + } + } + } + } + }, + "406": { + "description": "Deleting bridge is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/bridge/{token}/process": { + "get": { + "operationId": "matterbridge-get-bridge-process-state", + "summary": "Get bridge process information", + "tags": [ + "matterbridge" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of running processes", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/MatterbridgeProcessState" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}": { + "post": { + "operationId": "poll-create-poll", + "summary": "Create a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "question", + "options", + "resultMode", + "maxVotes" + ], + "properties": { + "question": { + "type": "string", + "description": "Question of the poll" + }, + "options": { + "type": "array", + "description": "Options of the poll", + "items": { + "type": "string" + } + }, + "resultMode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Mode how the results will be shown" + }, + "maxVotes": { + "type": "integer", + "format": "int64", + "description": "Number of maximum votes per voter" + }, + "draft": { + "type": "boolean", + "default": false, + "description": "Whether the poll should be saved as a draft (only allowed for moderators and with `talk-polls-drafts` capability)" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this poll should be posted into (also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Draft created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + }, + "201": { + "description": "Poll created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "400": { + "description": "Creating poll is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/draft/{pollId}": { + "post": { + "operationId": "poll-update-draft-poll", + "summary": "Modify a draft poll", + "description": "Required capability: `edit-draft-poll`", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "question", + "options", + "resultMode", + "maxVotes" + ], + "properties": { + "question": { + "type": "string", + "description": "Question of the poll" + }, + "options": { + "type": "array", + "description": "Options of the poll", + "items": { + "type": "string" + } + }, + "resultMode": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Mode how the results will be shown" + }, + "maxVotes": { + "type": "integer", + "format": "int64", + "description": "Number of maximum votes per voter" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "The poll id", + "required": true, + "schema": { + "type": "integer", + "format": "int64" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Draft modified successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + }, + "400": { + "description": "Modifying poll is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "No permission to modify this poll", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "No draft poll exists", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/drafts": { + "get": { + "operationId": "poll-get-all-draft-polls", + "summary": "Get all drafted polls", + "description": "Required capability: `talk-polls-drafts`", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/PollDraft" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "User is not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/poll/{token}/{pollId}": { + "get": { + "operationId": "poll-show-poll", + "summary": "Get a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "poll-vote-poll", + "summary": "Vote on a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "optionIds": { + "type": "array", + "default": [], + "description": "IDs of the selected options", + "items": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Voted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "400": { + "description": "Voting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "poll-close-poll", + "summary": "Close a poll", + "tags": [ + "poll" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "pollId", + "in": "path", + "description": "ID of the poll", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Poll closed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Poll" + } + } + } + } + } + } + } + }, + "202": { + "description": "Poll draft was deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Poll already closed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to close poll", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Poll not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "draft", + "options", + "poll", + "question", + "room" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/publicshareauth": { + "post": { + "operationId": "public_share_auth-create-room", + "summary": "Creates a new room for video verification (requesting the password of a share)", + "description": "The new room is a public room associated with a \"share:password\" object with the ID of the share token. Unlike normal rooms in which the owner is the user that created the room these are special rooms always created by a guest or user on behalf of a registered user, the sharer, who will be the owner of the room.\nThe share must have \"send password by Talk\" enabled; an error is returned otherwise.", + "tags": [ + "files_integration" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "shareToken" + ], + "properties": { + "shareToken": { + "type": "string", + "description": "Token of the file share" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Room created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "token", + "name", + "displayName" + ], + "properties": { + "token": { + "type": "string" + }, + "name": { + "type": "string" + }, + "displayName": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Share not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/reaction/{token}/{messageId}": { + "post": { + "operationId": "reaction-react", + "summary": "Add a reaction to a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "reaction" + ], + "properties": { + "reaction": { + "type": "string", + "description": "Emoji to add" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction already existed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "201": { + "description": "Reaction added successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Adding reaction is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "reaction-delete", + "summary": "Delete a reaction from a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "reaction", + "in": "query", + "description": "Emoji to remove", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reaction deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting reaction is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "reaction-get-reactions", + "summary": "Get a list of reactions for a message", + "tags": [ + "reaction" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "reaction", + "in": "query", + "description": "Emoji to filter", + "schema": { + "type": "string", + "nullable": true + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reactions returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Reaction" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message or reaction not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}": { + "post": { + "operationId": "recording-start", + "summary": "Start the recording", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "status" + ], + "properties": { + "status": { + "type": "integer", + "format": "int64", + "description": "Type of the recording" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording started successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Starting recording is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "recording-stop", + "summary": "Stop the recording", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Stopping recording is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/notification": { + "delete": { + "operationId": "recording-notification-dismiss", + "summary": "Dismiss the store call recording notification", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "timestamp", + "in": "query", + "description": "Timestamp of the notification to be dismissed", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification dismissed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Dismissing notification is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/recording/{token}/share-chat": { + "post": { + "operationId": "recording-share-to-chat", + "summary": "Share the recorded file to the chat", + "tags": [ + "recording" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "fileId", + "timestamp" + ], + "properties": { + "fileId": { + "type": "integer", + "format": "int64", + "description": "ID of the file", + "minimum": 0 + }, + "timestamp": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the notification to be dismissed", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording shared to chat successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Sharing recording to chat is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room": { + "get": { + "operationId": "room-get-rooms", + "summary": "Get all currently existent rooms which the user has joined", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "noStatusUpdate", + "in": "query", + "description": "When the user status should not be automatically set to online set to 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user status", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "modifiedSince", + "in": "query", + "description": "Filter rooms modified after a timestamp", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "includeLastMessage", + "in": "query", + "description": "Include the last message, clients should opt-out when only rendering a compact list", + "schema": { + "type": "boolean", + "default": true + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of rooms", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Modified-Before": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Federation-Invites": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "room-create-room", + "summary": "Create a room with a user, a group or a circle", + "description": "With the `conversation-creation-all` capability a lot of new options where introduced. Before that only `$roomType`, `$roomName`, `$objectType` and `$objectId` were supported all the time, and `$password` with the `conversation-creation-password` capability In case the `$roomType` is {@see Room::TYPE_ONE_TO_ONE} only the `$invite` or `$participants` parameter is supported.", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "roomType", + "readOnly", + "listable", + "lobbyState", + "sipEnabled", + "permissions", + "recordingConsent", + "mentionPermissions" + ], + "properties": { + "roomType": { + "type": "integer", + "format": "int64", + "description": "Type of the room" + }, + "invite": { + "type": "string", + "deprecated": true, + "default": "", + "description": "User, group, … ID to invite Deprecated: Use the `$participants` array instead" + }, + "roomName": { + "type": "string", + "default": "", + "description": "Name of the room, unless the legacy mode providing `$invite` and `$source` is used, the name must no longer be empty with the `conversation-creation-all` capability (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "source": { + "type": "string", + "deprecated": true, + "default": "", + "description": "Source of the invite ID ('circles' to create a room with a circle, etc.) Deprecated: Use the `$participants` array instead" + }, + "objectType": { + "type": "string", + "default": "", + "description": "Type of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "objectId": { + "type": "string", + "default": "", + "description": "ID of the object (Ignored if `$roomType` is {@see Room::TYPE_ONE_TO_ONE})" + }, + "password": { + "type": "string", + "default": "", + "description": "The room password (only available with `conversation-creation-password` capability) (Ignored if `$roomType` is not {@see Room::TYPE_PUBLIC})" + }, + "readOnly": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Read only state of the conversation (Default writable) (only available with `conversation-creation-all` capability)" + }, + "listable": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Scope where the conversation is listable (Default not listable for anyone) (only available with `conversation-creation-all` capability)" + }, + "messageExpiration": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Seconds after which messages will disappear, 0 disables expiration (Default 0) (only available with `conversation-creation-all` capability)", + "minimum": 0 + }, + "lobbyState": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Lobby state of the conversation (Default lobby is disabled) (only available with `conversation-creation-all` capability)" + }, + "lobbyTimer": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Timer when the lobby will be removed (Default null, will not be disabled automatically) (only available with `conversation-creation-all` capability)", + "minimum": 0 + }, + "sipEnabled": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Whether SIP dial-in shall be enabled (only available with `conversation-creation-all` capability)" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "Default permissions for participants (only available with `conversation-creation-all` capability)", + "minimum": 0, + "maximum": 255 + }, + "recordingConsent": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Whether participants need to agree to a recording before joining a call (only available with `conversation-creation-all` capability)" + }, + "mentionPermissions": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "Who can mention at-all in the chat (only available with `conversation-creation-all` capability)" + }, + "description": { + "type": "string", + "default": "", + "description": "Description for the conversation (limited to 2.000 characters) (only available with `conversation-creation-all` capability)" + }, + "emoji": { + "type": "string", + "nullable": true, + "default": null, + "description": "Emoji for the avatar of the conversation (only available with `conversation-creation-all` capability)", + "minLength": 1 + }, + "avatarColor": { + "type": "string", + "nullable": true, + "default": null, + "description": "Background color of the avatar (Only considered when an emoji was provided) (only available with `conversation-creation-all` capability)", + "minLength": 1 + }, + "participants": { + "$ref": "#/components/schemas/InvitationList", + "default": [], + "description": "List of participants to add grouped by type (only available with `conversation-creation-all` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room already existed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "201": { + "description": "Room created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "202": { + "description": "Room created successfully but not all participants could be added", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/RoomWithInvalidInvitations" + } + } + } + } + } + } + } + }, + "400": { + "description": "Room type invalid or missing or invalid password", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to create room", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "User, group or other target to invite was not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar", + "description", + "invite", + "listable", + "lobby", + "lobby-timer", + "mention-permissions", + "message-expiration", + "name", + "object", + "object-id", + "object-type", + "password", + "permissions", + "read-only", + "recording-consent", + "sip-enabled", + "type" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/listed-room": { + "get": { + "operationId": "room-get-listed-rooms", + "summary": "Get listed rooms with optional search term", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "searchTerm", + "in": "query", + "description": "search term", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Return list of matching rooms", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/note-to-self": { + "get": { + "operationId": "room-get-note-to-self-conversation", + "summary": "Get the \"Note to self\" conversation for the user", + "description": "It will be automatically created when it is currently missing", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room returned successfully", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}": { + "get": { + "operationId": "room-get-single-room", + "summary": "Get a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-sipbridge-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the Sipbridge", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room returned", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "SIP request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "room-rename-room", + "summary": "Rename a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "roomName" + ], + "properties": { + "roomName": { + "type": "string", + "description": "New name" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room renamed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Renaming room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "event", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-delete-room", + "summary": "Delete a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room successfully deleted", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/breakout-rooms": { + "get": { + "operationId": "room-get-breakout-rooms", + "summary": "Get breakout rooms", + "description": "All for moderators and in case of \"free selection\", or the assigned breakout room for other participants", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout rooms returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting breakout rooms is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/object": { + "delete": { + "operationId": "room-unbind-room-from-object", + "summary": "Unbind a room from its object to prevent automatic retention", + "description": "Required capability: `unbind-conversation`", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room successfully unbound", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Unbinding room is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "object-type" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/public": { + "post": { + "operationId": "room-make-public", + "summary": "Allowed guests to join conversation", + "description": "Required capability: `conversation-creation-password` for `string $password` parameter", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string", + "default": "", + "description": "New password (only available with `conversation-creation-password` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Allowed guests successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Allowing guests is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value", + "password" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-make-private", + "summary": "Disallowed guests to join conversation", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room unpublished Disallowing guests successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Disallowing guests is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/description": { + "put": { + "operationId": "room-set-description", + "summary": "Update the description of a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "description" + ], + "properties": { + "description": { + "type": "string", + "description": "New description for the conversation (limited to 2.000 characters, was 500 before Talk 21)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Description updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating description is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "event", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/read-only": { + "put": { + "operationId": "room-set-read-only", + "summary": "Set read-only state of a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New read-only state" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read-only state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating read-only state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/listable": { + "put": { + "operationId": "room-set-listable", + "summary": "Make a room listable", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "scope" + ], + "properties": { + "scope": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "Scope where the room is listable" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Made room listable successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Making room listable is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/password": { + "put": { + "operationId": "room-set-password", + "summary": "Set a password for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "password" + ], + "properties": { + "password": { + "type": "string", + "description": "New password" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Password set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Setting password is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + }, + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/permissions/{mode}": { + "put": { + "operationId": "room-set-permissions", + "summary": "Update the permissions of a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "permissions" + ], + "properties": { + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "mode", + "in": "path", + "description": "Level of the permissions ('call' (removed in Talk 20), 'default')", + "required": true, + "schema": { + "type": "string", + "enum": [ + "call", + "default" + ], + "pattern": "^(call|default)$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "mode", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants": { + "get": { + "operationId": "room-get-participants", + "summary": "Get a list of participants for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participants returned", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions for getting participants", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "post": { + "operationId": "room-add-participant-to-room", + "summary": "Add a participant to a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "newParticipant" + ], + "properties": { + "newParticipant": { + "type": "string", + "description": "New participant" + }, + "source": { + "type": "string", + "default": "users", + "enum": [ + "users", + "groups", + "circles", + "emails", + "federated_users", + "phones", + "teams" + ], + "description": "Source of the participant" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant successfully added", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "type": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Adding participant is not possible, e.g. when the user is banned (check error attribute of response for detail key)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "User, group or other target to invite was not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "501": { + "description": "SIP dial-out is not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "cloud-id", + "federation", + "moderator", + "new-participant", + "outgoing", + "reach-remote", + "room-type", + "sip", + "source", + "trusted-servers" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/breakout-rooms/participants": { + "get": { + "operationId": "room-get-breakout-room-participants", + "summary": "Get the breakout room participants for a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Breakout room participants returned", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting breakout room participants is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to get breakout room participants", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/self": { + "delete": { + "operationId": "room-remove-self-from-room", + "summary": "Remove the current user from a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Participant removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Removing participant is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "participant" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "participant" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees": { + "delete": { + "operationId": "room-remove-attendee-from-room", + "summary": "Remove an attendee from a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "query", + "description": "ID of the attendee", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee removed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Removing attendee is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Removing attendee is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "last-moderator", + "owner", + "participant", + "room-type" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees/permissions": { + "put": { + "operationId": "room-set-attendee-permissions", + "summary": "Update the permissions of an attendee", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "attendeeId", + "method", + "permissions" + ], + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "description": "ID of the attendee", + "minimum": 0 + }, + "method": { + "type": "string", + "enum": [ + "set", + "remove", + "add" + ], + "description": "Method of updating permissions ('set', 'remove', 'add')" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "headers": { + "X-Nextcloud-Has-User-Statuses": { + "schema": { + "type": "boolean", + "enum": [ + true + ] + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Participant" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to update permissions", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "participant", + "method", + "moderator", + "room-type", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/attendees/permissions/all": { + "put": { + "operationId": "room-set-all-attendees-permissions", + "summary": "Update the permissions of all attendees", + "deprecated": true, + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "method", + "permissions" + ], + "properties": { + "method": { + "type": "string", + "enum": [ + "set", + "remove", + "add" + ], + "description": "Method of updating permissions ('set', 'remove', 'add')" + }, + "permissions": { + "type": "integer", + "format": "int64", + "description": "New permissions", + "minimum": 0, + "maximum": 255 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/active": { + "post": { + "operationId": "room-join-room", + "summary": "Join a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "password": { + "type": "string", + "default": "", + "description": "Password of the room" + }, + "force": { + "type": "boolean", + "default": true, + "description": "Create a new session if necessary" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Room joined successfully", + "headers": { + "X-Nextcloud-Talk-Proxy-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "403": { + "description": "Joining room is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ban", + "password" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "409": { + "description": "Session already exists", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "sessionId", + "inCall", + "lastPing" + ], + "properties": { + "sessionId": { + "type": "string" + }, + "inCall": { + "type": "integer", + "format": "int64" + }, + "lastPing": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-leave-room", + "summary": "Leave a room", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully left the room", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/resend-invitations": { + "post": { + "operationId": "room-resend-invitations", + "summary": "Resend invitations", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "nullable": true, + "description": "ID of the attendee", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Invitation resent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/participants/state": { + "put": { + "operationId": "room-set-session-state", + "summary": "Set active state for a session", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "of the room" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Session state set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "The provided new state was invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "The participant did not have a session", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/moderators": { + "post": { + "operationId": "room-promote-moderator", + "summary": "Promote an attendee to moderator", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "attendeeId" + ], + "properties": { + "attendeeId": { + "type": "integer", + "format": "int64", + "description": "ID of the attendee", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee promoted to moderator successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Promoting attendee to moderator is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Promoting attendee to moderator is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-demote-moderator", + "summary": "Demote an attendee from moderator", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "attendeeId", + "in": "query", + "description": "ID of the attendee", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Attendee demoted from moderator successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Demoting attendee from moderator is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "403": { + "description": "Demoting attendee from moderator is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Attendee not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/favorite": { + "post": { + "operationId": "room-add-to-favorites", + "summary": "Add a room to the favorites", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully added room to favorites", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-remove-from-favorites", + "summary": "Remove a room from the favorites", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully removed room from favorites", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/important": { + "post": { + "operationId": "room-mark-conversation-as-important", + "summary": "Mark a conversation as important (still sending notifications while on DND)", + "description": "Required capability: `important-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as important", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-mark-conversation-as-unimportant", + "summary": "Mark a conversation as unimportant (no longer sending notifications while on DND)", + "description": "Required capability: `important-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as unimportant", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/sensitive": { + "post": { + "operationId": "room-mark-conversation-as-sensitive", + "summary": "Mark a conversation as sensitive (no last message is visible / no push preview is shown)", + "description": "Required capability: `sensitive-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as sensitive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-mark-conversation-as-insensitive", + "summary": "Mark a conversation as insensitive (last message is visible / push preview is shown)", + "description": "Required capability: `sensitive-conversations`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was marked as insensitive", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/notify": { + "post": { + "operationId": "room-set-notification-level", + "summary": "Update the notification level for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Notification level updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating notification level is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/notify-calls": { + "post": { + "operationId": "room-set-notification-calls", + "summary": "Update call notifications", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Call notification level updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating call notification level is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/webinar/lobby": { + "put": { + "operationId": "room-set-lobby", + "summary": "Update the lobby state for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New state" + }, + "timer": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Timer when the lobby will be removed", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Lobby state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating lobby state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "object", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/webinar/sip": { + "put": { + "operationId": "room-setsip-enabled", + "summary": "Update SIP enabled state", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "state" + ], + "properties": { + "state": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1, + 2 + ], + "description": "New state" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "SIP enabled state updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "User not found", + "content": { + "application/json": { + "schema": { + "anyOf": [ + { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + }, + { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + ] + } + } + } + }, + "403": { + "description": "Missing permissions to update SIP enabled state", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "412": { + "description": "SIP not configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating SIP enabled state is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "token", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/recording-consent": { + "put": { + "operationId": "room-set-recording-consent", + "summary": "Set recording consent requirement for this conversation", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "recordingConsent" + ], + "properties": { + "recordingConsent": { + "type": "integer", + "format": "int64", + "description": "New consent setting for the conversation (Only {@see RecordingService::CONSENT_REQUIRED_NO} and {@see RecordingService::CONSENT_REQUIRED_YES} are allowed here.)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Recording consent requirement set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Setting recording consent requirement is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "call", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "412": { + "description": "No recording server is configured", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "config" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/message-expiration": { + "post": { + "operationId": "room-set-message-expiration", + "summary": "Update message expiration time", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "seconds" + ], + "properties": { + "seconds": { + "type": "integer", + "format": "int64", + "description": "New time", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message expiration time updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating message expiration time is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/capabilities": { + "get": { + "operationId": "room-get-capabilities", + "summary": "Get capabilities for a room", + "description": "See \"Capability handling in federated conversations\" in https://github.com/nextcloud/spreed/issues/10680 to learn which capabilities should be considered from the local server or from the remote server.", + "tags": [ + "room" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Get capabilities successfully", + "headers": { + "X-Nextcloud-Talk-Hash": { + "schema": { + "type": "string" + } + }, + "X-Nextcloud-Talk-Proxy-Hash": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "anyOf": [ + { + "$ref": "#/components/schemas/Capabilities" + }, + { + "type": "object", + "additionalProperties": true + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/mention-permissions": { + "put": { + "operationId": "room-set-mention-permissions", + "summary": "Update the mention permissions for a room", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "mentionPermissions" + ], + "properties": { + "mentionPermissions": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ], + "description": "New mention permissions" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Permissions updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating permissions is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "breakout-room", + "type", + "value" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/archive": { + "post": { + "operationId": "room-archive-conversation", + "summary": "Archive a conversation", + "description": "Required capability: `archived-conversations-v2`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was archived", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "room-unarchive-conversation", + "summary": "Unarchive a conversation", + "description": "Required capability: `archived-conversations-v2`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Conversation was unarchived", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/import-emails": { + "post": { + "operationId": "room-import-emails-as-participants", + "summary": "Import a list of email attendees", + "description": "Content format is comma separated values: - Header line is required and must match `\"email\",\"name\"` or `\"email\"` - One entry per line (e.g. `\"John Doe\",\"john@example.tld\"`)\nRequired capability: `email-csv-import`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "testRun": { + "type": "boolean", + "default": false, + "description": "When set to true, the file is validated and no email is actually sent nor any participant added to the conversation" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "All entries imported successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "invites", + "duplicates" + ], + "properties": { + "invites": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "duplicates": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalid": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalidLines": { + "type": "array", + "items": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + "type": { + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 6 + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Import was not successful. When message is provided the string is in user language and should be displayed as an error.", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "room", + "file", + "header-email", + "header-name", + "rows" + ] + }, + "message": { + "type": "string" + }, + "invites": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "duplicates": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalid": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "invalidLines": { + "type": "array", + "items": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + "type": { + "type": "integer", + "format": "int64", + "minimum": -1, + "maximum": 6 + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/room/{token}/meeting": { + "post": { + "operationId": "room-schedule-meeting", + "summary": "Schedule a meeting for a conversation", + "description": "Required capability: `schedule-meeting`", + "tags": [ + "room" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "calendarUri", + "start" + ], + "properties": { + "calendarUri": { + "type": "string", + "description": "Last part of the calendar URI as seen by the participant e.g. 'personal' or 'company_shared_by_other_user'" + }, + "start": { + "type": "integer", + "format": "int64", + "description": "Unix timestamp when the meeting starts" + }, + "attendeeIds": { + "type": "array", + "nullable": true, + "default": null, + "description": "List of attendee ids to invite, if null everyone will be invited, if empty array only the actor will receive the event", + "items": { + "type": "integer", + "format": "int64" + } + }, + "end": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "Unix timestamp when the meeting ends, falls back to 60 minutes after start" + }, + "title": { + "type": "string", + "nullable": true, + "default": null, + "description": "Title or summary of the event, falling back to the conversation name if none is given" + }, + "description": { + "type": "string", + "nullable": true, + "default": null, + "description": "Description of the event, falling back to the conversation description if none is given" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v4" + ], + "default": "v4" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Meeting scheduled", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Meeting could not be created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "calendar", + "conversation", + "email", + "end", + "start" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/settings/user": { + "post": { + "operationId": "settings-set-user-setting", + "summary": "Update user setting", + "tags": [ + "settings" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "key" + ], + "properties": { + "key": { + "type": "string", + "enum": [ + "attachment_folder", + "read_status_privacy", + "typing_privacy", + "play_sounds" + ], + "description": "Key to update" + }, + "value": { + "nullable": true, + "description": "New value for the key", + "oneOf": [ + { + "type": "string" + }, + { + "type": "integer", + "format": "int64" + } + ] + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "User setting updated successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Updating user setting is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/settings": { + "get": { + "operationId": "signaling-get-settings", + "summary": "Get the signaling settings", + "tags": [ + "internal_signaling", + "external_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "query", + "description": "Token of the room", + "schema": { + "type": "string", + "default": "" + } + }, + { + "name": "talk-recording-random", + "in": "header", + "description": "Random seed used to generate the request checksum", + "schema": { + "type": "string" + } + }, + { + "name": "talk-recording-checksum", + "in": "header", + "description": "Checksum over the request body to verify authenticity from the recording backend", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling settings returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/SignalingSettings" + } + } + } + } + } + } + } + }, + "401": { + "description": "Recording request invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "404": { + "description": "Room not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/signaling/{token}": { + "post": { + "operationId": "signaling-send-messages", + "summary": "Send signaling messages", + "tags": [ + "internal_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "messages" + ], + "properties": { + "messages": { + "type": "string", + "description": "JSON encoded messages" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling message sent successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Sending signaling message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "signaling-pull-messages", + "summary": "Get signaling messages", + "tags": [ + "internal_signaling" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v3" + ], + "default": "v3" + } + }, + { + "name": "token", + "in": "path", + "description": "Token of the room", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Signaling messages returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Session, room or participant not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "409": { + "description": "Session killed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "type": "object", + "required": [ + "type", + "data" + ], + "properties": { + "type": { + "type": "string" + }, + "data": { + "oneOf": [ + { + "type": "array", + "items": { + "$ref": "#/components/schemas/SignalingSession" + } + }, + { + "type": "string" + } + ] + } + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "Getting signaling messages is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/temp-user-avatar": { + "post": { + "operationId": "temp_avatar-post-avatar", + "summary": "Upload your avatar as a user", + "tags": [ + "user_avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar uploaded successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Uploading avatar is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "temp_avatar-delete-avatar", + "summary": "Delete your avatar as a user", + "tags": [ + "user_avatar" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Avatar deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting avatar is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "avatar" + ] + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}": { + "post": { + "operationId": "chat-send-message", + "summary": "Sends a new chat message to the given room", + "description": "The author and timestamp are automatically set to the current user/guest and time.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "the message to send" + }, + "actorDisplayName": { + "type": "string", + "default": "", + "description": "for guests" + }, + "referenceId": { + "type": "string", + "default": "", + "description": "for the message to be able to later identify it again" + }, + "replyTo": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Parent id which this message is a reply to", + "minimum": 0 + }, + "silent": { + "type": "boolean", + "default": false, + "description": "If sent silent the chat message will not create any notifications" + }, + "threadTitle": { + "type": "string", + "default": "", + "description": "Only supported when not replying, when given will create a thread (requires `threads` capability)" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this message is a reply to without quoting a specific message (ignored when $replyTo is given, also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Message sent successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Sending message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Actor not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "429": { + "description": "Mention rate limit exceeded (guests only)", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-receive-messages", + "summary": "Receives chat messages from the given room", + "description": "- Receiving the history ($lookIntoFuture=0): The next $limit messages after $lastKnownMessageId will be returned. The new $lastKnownMessageId for the follow up query is available as `X-Chat-Last-Given` header.\n- Looking into the future ($lookIntoFuture=1): If there are currently no messages the response will not be sent immediately. Instead, HTTP connection will be kept open waiting for new messages to arrive and, when they do, then the response will be sent. The connection will not be kept open indefinitely, though; the number of seconds to wait for new messages to arrive can be set using the timeout parameter; the default timeout is 30 seconds, maximum timeout is 60 seconds. If the timeout ends a successful but empty response will be sent. If messages have been returned (status=200) the new $lastKnownMessageId for the follow up query is available as `X-Chat-Last-Given` header.\nThe limit specifies the maximum number of messages that will be returned, although the actual number of returned messages could be lower if some messages are not visible to the participant. Note that if none of the messages are visible to the participant the returned number of messages will be 0, yet the status will still be 200. Also note that `X-Chat-Last-Given` may reference a message not visible and thus not returned, but it should be used nevertheless as the $lastKnownMessageId for the follow-up query.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "lookIntoFuture", + "in": "query", + "description": "Polling for new messages (1) or getting the history of the chat (0)", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of chat messages to receive (100 by default, 200 at most)", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "lastKnownMessageId", + "in": "query", + "description": "The last known message (serves as offset)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "lastCommonReadId", + "in": "query", + "description": "The last known common read message (so the response is 200 instead of 304 when it changes even when there are no messages)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "timeout", + "in": "query", + "description": "Number of seconds to wait for new messages (30 by default, 30 at most)", + "schema": { + "type": "integer", + "format": "int64", + "default": 30, + "minimum": 0, + "maximum": 30 + } + }, + { + "name": "setReadMarker", + "in": "query", + "description": "Automatically set the last read marker when 1, if your client does this itself via chat/{token}/read set to 0", + "schema": { + "type": "integer", + "format": "int64", + "default": 1, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "includeLastKnown", + "in": "query", + "description": "Include the $lastKnownMessageId in the messages when 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "noStatusUpdate", + "in": "query", + "description": "When the user status should not be automatically set to online set to 1 (default 0)", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "markNotificationsAsRead", + "in": "query", + "description": "Set to 0 when notifications should not be marked as read (default 1)", + "schema": { + "type": "integer", + "format": "int64", + "default": 1, + "enum": [ + 0, + 1 + ] + } + }, + { + "name": "threadId", + "in": "query", + "description": "Limit the chat message list to a given thread", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Messages returned", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + }, + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + } + }, + "304": { + "description": "No messages" + } + } + }, + "delete": { + "operationId": "chat-clear-history", + "summary": "Clear the chat history", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "History cleared successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + }, + "202": { + "description": "History cleared successfully, but Federation or Matterbridge is configured, so the information can be replicated elsewhere", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to clear history", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/share": { + "post": { + "operationId": "chat-share-object-to-chat", + "summary": "Sends a rich-object to the given room", + "description": "The author and timestamp are automatically set to the current user/guest and time.", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "objectType", + "objectId" + ], + "properties": { + "objectType": { + "type": "string", + "description": "Type of the object" + }, + "objectId": { + "type": "string", + "description": "ID of the object" + }, + "metaData": { + "type": "string", + "default": "", + "description": "Additional metadata, sample value: `{\\\"type\\\":\\\"geo-location\\\",\\\"id\\\":\\\"geo:52.5450511,13.3741463\\\",\\\"name\\\":\\\"Nextcloud Berlin Office\\\",\\\"latitude\\\":\\\"52.5450511\\\",\\\"longitude\\\":\\\"13.3741463\\\"}`" + }, + "actorDisplayName": { + "type": "string", + "default": "", + "description": "Guest name" + }, + "referenceId": { + "type": "string", + "default": "", + "description": "Reference ID" + }, + "threadId": { + "type": "integer", + "format": "int64", + "default": 0, + "description": "Thread id which this message is a reply to without quoting a specific message (also requires `threads` capability)" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Object shared successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + ] + } + } + } + } + } + } + } + }, + "400": { + "description": "Sharing object is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Actor not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-get-objects-shared-in-room", + "summary": "Get objects that are shared in the room", + "description": "Federated conversations are supported with the `federated-shared-items` capability", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "objectType", + "in": "query", + "description": "Type of the objects", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "lastKnownMessageId", + "in": "query", + "description": "ID of the last known message", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of objects", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 200 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of shared objects messages returned", + "headers": { + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/summarize": { + "post": { + "operationId": "chat-summarize-chat", + "summary": "Summarize the next bunch of chat messages from a given offset", + "description": "Required capability: `chat-summary-api`", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "fromMessageId" + ], + "properties": { + "fromMessageId": { + "type": "integer", + "format": "int64", + "description": "Offset from where on the summary should be generated", + "minimum": 1 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Summary was scheduled, use the returned taskId to get the status information and output from the TaskProcessing API: [OCS TaskProcessing API](https://docs.nextcloud.com/server/latest/developer_manual/client_apis/OCS/ocs-taskprocessing-api.html#fetch-a-task-by-id). If the response data contains nextOffset, not all messages could be handled in a single request. After receiving the response a second summary should be requested with the provided nextOffset.", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "taskId" + ], + "properties": { + "taskId": { + "type": "integer", + "format": "int64" + }, + "nextOffset": { + "type": "integer", + "format": "int64" + } + } + } + } + } + } + } + } + } + }, + "400": { + "description": "No AI provider available or summarizing failed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "ai-no-provider", + "ai-error" + ] + } + } + } + } + } + } + } + } + } + }, + "204": { + "description": "No messages found to summarize" + }, + "500": { + "description": "", + "content": { + "text/plain": { + "schema": { + "type": "string" + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}/context": { + "get": { + "operationId": "chat-get-message-context", + "summary": "Get the context of a message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The focused message which should be in the \"middle\" of the returned context", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of chat messages to receive in both directions (50 by default, 100 at most, might return 201 messages)", + "schema": { + "type": "integer", + "format": "int64", + "default": 50, + "minimum": 0, + "maximum": 100 + } + }, + { + "name": "threadId", + "in": "query", + "description": "Limit the chat message list to a given thread", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message context returned", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + }, + "X-Chat-Last-Given": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + } + }, + "304": { + "description": "No messages" + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}": { + "delete": { + "operationId": "chat-delete-message", + "summary": "Delete a chat message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message deleted successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "202": { + "description": "Message deleted successfully, but a bot or Matterbridge is configured, so the information can be replicated elsewhere", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "400": { + "description": "Deleting message is not possible", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to delete message", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "405": { + "description": "Deleting this message type is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "chat-edit-message", + "summary": "Edit a chat message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "message" + ], + "properties": { + "message": { + "type": "string", + "description": "the message to send" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Message edited successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "202": { + "description": "Message edited successfully, but a bot or Matterbridge is configured, so the information can be replicated to other services", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatMessageWithParent" + } + } + } + } + } + } + } + }, + "400": { + "description": "Editing message is not possible, e.g. when the new message is empty or the message is too old", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Missing permissions to edit message", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "405": { + "description": "Editing this message type is not allowed", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "413": { + "description": "Message too long", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/{messageId}/reminder": { + "post": { + "operationId": "chat-set-reminder", + "summary": "Set a reminder for a chat message", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "timestamp" + ], + "properties": { + "timestamp": { + "type": "integer", + "format": "int64", + "description": "Timestamp of the reminder", + "minimum": 0 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "201": { + "description": "Reminder created successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatReminder" + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "get": { + "operationId": "chat-get-reminder", + "summary": "Get the reminder for a chat message", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminder returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ChatReminder" + } + } + } + } + } + } + } + }, + "404": { + "description": "No reminder found or message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "chat-delete-reminder", + "summary": "Delete a chat reminder", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "ID of the message", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminder deleted successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "properties": { + "error": { + "type": "string" + } + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/upcoming-reminders": { + "get": { + "operationId": "chat-get-upcoming-reminders", + "summary": "Get all upcoming reminders", + "description": "Required capability: `upcoming-reminders`", + "tags": [ + "chat" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Reminders returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatReminderUpcoming" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/read": { + "post": { + "operationId": "chat-set-read-marker", + "summary": "Set the read marker to a specific message", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": false, + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "lastReadMessage": { + "type": "integer", + "format": "int64", + "nullable": true, + "default": null, + "description": "ID if the last read message (Optional only with `chat-read-last` capability)", + "minimum": -2 + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read marker set successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "chat-mark-unread", + "summary": "Mark a chat as unread", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Read marker set successfully", + "headers": { + "X-Chat-Last-Common-Read": { + "schema": { + "type": "string" + } + } + }, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/Room" + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/share/overview": { + "get": { + "operationId": "chat-get-objects-shared-in-room-overview", + "summary": "Get objects that are shared in the room overview", + "description": "Federated conversations are supported with the `federated-shared-items` capability", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of objects", + "schema": { + "type": "integer", + "format": "int64", + "default": 7, + "minimum": 1, + "maximum": 20 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of shared objects messages of each type returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMessage" + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/mentions": { + "get": { + "operationId": "chat-mentions", + "summary": "Search for mentions", + "tags": [ + "chat" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "search", + "in": "query", + "description": "Text to search for", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "limit", + "in": "query", + "description": "Maximum number of results", + "schema": { + "type": "integer", + "format": "int64", + "default": 20 + } + }, + { + "name": "includeStatus", + "in": "query", + "description": "Include the user statuses", + "schema": { + "type": "boolean", + "default": false + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of mention suggestions returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChatMentionSuggestion" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/{token}": { + "post": { + "operationId": "live_transcription-enable", + "summary": "Enable the live transcription", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Live transcription enabled successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The participant is not in the call", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app", + "in-call" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "delete": { + "operationId": "live_transcription-disable", + "summary": "Disable the live transcription", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Live transcription stopped successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The participant is not in the call", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app", + "in-call" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/languages": { + "get": { + "operationId": "live_transcription-get-available-languages", + "summary": "Get available languages for live transcriptions", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Available languages got successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "additionalProperties": { + "$ref": "#/components/schemas/LiveTranscriptionLanguage" + } + } + } + } + } + } + } + } + }, + "400": { + "description": "The external app \"live_transcription\" is not available", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/live-transcription/{token}/language": { + "post": { + "operationId": "live_transcription-set-language", + "summary": "Set language for live transcriptions", + "tags": [ + "live_transcription" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "languageId" + ], + "properties": { + "languageId": { + "type": "string", + "description": "the ID of the language to set" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Language set successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "nullable": true + } + } + } + } + } + } + } + }, + "400": { + "description": "The external app \"live_transcription\" is not available", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Participant is not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "app" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/recent": { + "get": { + "operationId": "thread-get-recent-active-threads", + "summary": "Get recent active threads in a conversation", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 50, + "minimum": 1, + "maximum": 50 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of threads returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/subscribed-threads": { + "get": { + "operationId": "thread-get-subscribed-threads", + "summary": "Get subscribed threads for a user", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "limit", + "in": "query", + "description": "Number of threads to return", + "schema": { + "type": "integer", + "format": "int64", + "default": 100, + "minimum": 1, + "maximum": 100 + } + }, + { + "name": "offset", + "in": "query", + "description": "Offset in the threads list", + "schema": { + "type": "integer", + "format": "int64", + "default": 0, + "minimum": 0 + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "List of threads returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + } + }, + "401": { + "description": "Current user is not logged in", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": {} + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/{threadId}": { + "get": { + "operationId": "thread-get-thread", + "summary": "Get thread info of a single thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "threadId", + "in": "path", + "description": "The thread ID to get the info for", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Thread info returned", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "404": { + "description": "Thread not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "thread", + "status" + ] + } + } + } + } + } + } + } + } + } + } + } + }, + "put": { + "operationId": "thread-rename-thread", + "summary": "Rename a thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "threadTitle" + ], + "properties": { + "threadTitle": { + "type": "string", + "description": "New thread title, must not be empty" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "threadId", + "in": "path", + "description": "The thread ID to get the info for", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Thread renamed successfully", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "400": { + "description": "When the provided title is empty", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "title" + ] + } + } + } + } + } + } + } + } + } + }, + "403": { + "description": "Not allowed, either not the original author or not a moderator", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "permission" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Thread not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "thread" + ] + } + } + } + } + } + } + } + } + } + } + } + } + }, + "/ocs/v2.php/apps/spreed/api/{apiVersion}/chat/{token}/threads/{messageId}/notify": { + "post": { + "operationId": "thread-set-notification-level", + "summary": "Set notification level for a specific thread", + "description": "Required capability: `threads`", + "tags": [ + "thread" + ], + "security": [ + {}, + { + "bearer_auth": [] + }, + { + "basic_auth": [] + } + ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "level" + ], + "properties": { + "level": { + "type": "integer", + "format": "int64", + "description": "New level" + } + } + } + } + } + }, + "parameters": [ + { + "name": "apiVersion", + "in": "path", + "required": true, + "schema": { + "type": "string", + "enum": [ + "v1" + ], + "default": "v1" + } + }, + { + "name": "token", + "in": "path", + "required": true, + "schema": { + "type": "string", + "pattern": "^[a-z0-9]{4,30}$" + } + }, + { + "name": "messageId", + "in": "path", + "description": "The message to create a thread for (Doesn't have to be the root)", + "required": true, + "schema": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + }, + { + "name": "x-nextcloud-federation", + "in": "header", + "description": "Set to 1 when the request is performed by another Nextcloud Server to indicate a federation request", + "schema": { + "type": "string" + } + }, + { + "name": "OCS-APIRequest", + "in": "header", + "description": "Required to be true for the API request to pass", + "required": true, + "schema": { + "type": "boolean", + "default": true + } + } + ], + "responses": { + "200": { + "description": "Successfully set notification level for thread", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "$ref": "#/components/schemas/ThreadInfo" + } + } + } + } + } + } + } + }, + "400": { + "description": "Notification level was invalid", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level", + "message", + "status", + "top-most" + ] + } + } + } + } + } + } + } + } + } + }, + "404": { + "description": "Message or top most message not found", + "content": { + "application/json": { + "schema": { + "type": "object", + "required": [ + "ocs" + ], + "properties": { + "ocs": { + "type": "object", + "required": [ + "meta", + "data" + ], + "properties": { + "meta": { + "$ref": "#/components/schemas/OCSMeta" + }, + "data": { + "type": "object", + "required": [ + "error" + ], + "properties": { + "error": { + "type": "string", + "enum": [ + "level", + "message", + "status", + "top-most" + ] + } + } + } + } + } + } + } + } + } + } + } + } + } + }, + "tags": [] +} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..29b8781 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,27369 @@ +{ + "name": "talk", + "version": "22.0.12", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "talk", + "version": "22.0.12", + "license": "agpl", + "dependencies": { + "@matrix-org/olm": "^3.2.15", + "@mediapipe/tasks-vision": "^0.10.34", + "@nextcloud/auth": "^2.6.0", + "@nextcloud/axios": "^2.6.0", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/cdav-library": "^2.2.0", + "@nextcloud/dialogs": "^7.2.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^3.12.2", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^2.4.0", + "@nextcloud/router": "^3.0.1", + "@nextcloud/sharing": "^0.4.0", + "@nextcloud/upload": "^2.0.0-rc.0", + "@nextcloud/vue": "^9.3.3", + "@vue-leaflet/vue-leaflet": "^0.10.1", + "@vueuse/components": "^13.7.0", + "@vueuse/core": "^13.7.0", + "@vueuse/router": "^13.9.0", + "base64-js": "^1.5.1", + "blurhash": "^2.0.5", + "crypto-js": "^4.2.0", + "debounce": "^2.2.0", + "emoji-regex": "^10.6.0", + "entities": "^6.0.1", + "escape-html": "^1.0.3", + "extendable-media-recorder": "^9.2.37", + "extendable-media-recorder-wav-encoder": "^7.0.137", + "hark": "^1.2.3", + "leaflet": "^1.9.4", + "leaflet-defaulticon-compatibility": "^0.1.2", + "libphonenumber-js": "^1.12.41", + "lodash": "^4.18.1", + "mitt": "^3.0.1", + "mockconsole": "0.0.1", + "panzoom": "^9.4.4", + "pinia": "^3.0.4", + "ua-parser-js": "^2.0.9", + "util": "^0.12.5", + "uuid": "^11.1.0", + "vue": "^3.5.32", + "vue-cropperjs": "^5.0.0", + "vue-draggable-resizable": "^3.0.0", + "vue-material-design-icons": "^5.3.1", + "vue-router": "^4.6.4", + "vue-tsc": "^3.2.7", + "vuex": "^4.1.0", + "webdav": "^5.9.0", + "webrtc-adapter": "^9.0.5", + "webrtcsupport": "^2.2.0", + "wildemitter": "^1.2.1" + }, + "devDependencies": { + "@nextcloud/browserslist-config": "^3.1.2", + "@nextcloud/eslint-config": "^9.0.0-rc.9", + "@nextcloud/stylelint-config": "^3.1.1", + "@rspack/cli": "^1.7.11", + "@rspack/core": "^1.7.11", + "@rspack/plugin-node-polyfill": "^0.5.8", + "@total-typescript/ts-reset": "^0.6.1", + "@vitejs/plugin-vue": "^6.0.6", + "@vitest/coverage-v8": "^3.2.4", + "@vue/test-utils": "^2.4.6", + "@vue/tsconfig": "^0.5.1", + "css-loader": "^7.1.4", + "globals": "^16.2.0", + "jsdom": "^26.1.0", + "openapi-typescript": "^7.13.0", + "regenerator-runtime": "^0.14.1", + "sass": "^1.99.0", + "sass-loader": "^16.0.7", + "stylelint-use-logical": "^2.1.3", + "vitest": "^3.2.4", + "vue-loader": "^17.4.2", + "wasm-check": "^2.1.2" + }, + "engines": { + "node": "^22.0.0", + "npm": "^10.5.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@buttercup/fetch": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@buttercup/fetch/-/fetch-0.2.1.tgz", + "integrity": "sha512-sCgECOx8wiqY8NN1xN22BqqKzXYIG2AicNLlakOAI4f0WgyLVUbAigMf8CZhBtJxdudTcB1gD5lciqi44jwJvg==", + "optionalDependencies": { + "node-fetch": "^3.3.0" + } + }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/core/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.86.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz", + "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.58.0", + "comment-parser": "1.4.6", + "esquery": "^1.7.0", + "jsdoc-type-pratt-parser": "~7.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/compat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.5.tgz", + "integrity": "sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==", + "dev": true, + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^8.40 || 9 || 10" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", + "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint/core": "^1.2.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "eslint": "^10.0.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/json": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/json/-/json-1.2.0.tgz", + "integrity": "sha512-CEFEyNgvzu8zn5QwVYDg3FaG+ZKUeUsNYitFpMYJAqoAlnw68EQgNbUfheSmexZr4n0wZPrAkPLuvsLaXO6wRw==", + "dev": true, + "dependencies": { + "@eslint/core": "^1.1.1", + "@eslint/plugin-kit": "^0.6.1", + "@humanwhocodes/momoa": "^3.3.10", + "natural-compare": "^1.4.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "dev": true, + "dependencies": { + "@eslint/core": "^1.1.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@file-type/xml": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@file-type/xml/-/xml-0.4.4.tgz", + "integrity": "sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==", + "dependencies": { + "sax": "^1.4.1", + "strtok3": "^10.3.4" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "license": "MIT" + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "peer": true, + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/momoa": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", + "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@keyv/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer": "^6.0.3" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@matrix-org/olm": { + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/@matrix-org/olm/-/olm-3.2.15.tgz", + "integrity": "sha512-S7lOrndAK9/8qOtaTq/WhttJC/o4GAzdfK0MUPpo8ApzsJEC0QjtwrkC3KBXdFP1cD1MXi/mlKR7aaoVMKgs6Q==" + }, + "node_modules/@mdi/js": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", + "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==" + }, + "node_modules/@mediapipe/tasks-vision": { + "version": "0.10.34", + "resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.34.tgz", + "integrity": "sha512-KFGyhDsjJ+9WUMcMfjTOpcEp3LJNS3KwC7BfvKrCYELn/7G/5kmwnU7z6Spps+iWQoTGL8xW8i68r65OTa3DwA==" + }, + "node_modules/@module-federation/error-codes": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "dev": true + }, + "node_modules/@module-federation/runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "dev": true, + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-core": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "dev": true, + "dependencies": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@module-federation/runtime-tools": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "dev": true, + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" + } + }, + "node_modules/@module-federation/sdk": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "dev": true + }, + "node_modules/@module-federation/webpack-bundler-runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "dev": true, + "dependencies": { + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, + "node_modules/@nextcloud/auth": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.6.0.tgz", + "integrity": "sha512-VkT87+9UqpPi7O36bVEE4/MxWF8d90VQcuMlvKltsZyLSLkEGrPXgowtD75Y54k60/8SR6mXbeqBwapi8dDUbA==", + "dependencies": { + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/router": "^3.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/axios": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.6.0.tgz", + "integrity": "sha512-ehcIgyora8DAJ+STG6iFI4e+ufPVFrIA6o0FgMKeKdfyaxRJ9UM7L+n7V+rc/qv8sDiWC/hWIKwFtLw2W5yE4Q==", + "dependencies": { + "@nextcloud/auth": "^2.6.0", + "axios": "^1.15.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/browser-storage": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", + "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^24 || ^22 || ^20" + } + }, + "node_modules/@nextcloud/browserslist-config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.1.2.tgz", + "integrity": "sha512-2iXl1rqQOHvggFIl/V3J5OpbodVazOsO38Gz/2sUAmtWXuOpGZG+7i6zQcVqGVaT1VzyPJ1gPiMpyyZi/XRWNA==", + "dev": true, + "engines": { + "node": "^20 || ^22 || ^24", + "npm": ">=10.5.0" + }, + "peerDependencies": { + "browserslist": "^4.26.3" + } + }, + "node_modules/@nextcloud/capabilities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/cdav-library": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/cdav-library/-/cdav-library-2.2.0.tgz", + "integrity": "sha512-vaikb6JFji8MjeNSl8rsbRm97sDI8f9+Qa4ixLtubYYomm6SuNxhTau7hVC+v7sIlzrBhQlz4h0Gmq9nEsZrug==", + "dependencies": { + "@nextcloud/axios": "^2.5.2" + }, + "engines": { + "node": "^24.0.0", + "npm": "^11.3.0" + } + }, + "node_modules/@nextcloud/dialogs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-7.2.0.tgz", + "integrity": "sha512-seb2yYnGsP72t3aeK7WdcgfANpb/AHYc86Fz0kfzM11tvdqbs6Mz4Ja3bxccIJFXoyAp+NYS9UKpxA7bAQPywQ==", + "dependencies": { + "@mdi/js": "^7.4.47", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^3.12.2", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@nextcloud/vue": "^9.3.1", + "@types/toastify-js": "^1.12.4", + "@vueuse/core": "^14.1.0", + "cancelable-promise": "^4.3.1", + "p-queue": "^9.0.1", + "toastify-js": "^1.12.0", + "vue": "^3.5.25", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/paths": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.1.0.tgz", + "integrity": "sha512-vtFYA/kthaUDzu6KejTOL1OwnOy7/yynq5zdB/UBpYacAWjUX5Ddh4OMWx3rEavkBJ9/QGhrFryNJLjNfe8OQA==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" + }, + "node_modules/@nextcloud/dialogs/node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/dialogs/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/eslint-config": { + "version": "9.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-9.0.0-rc.9.tgz", + "integrity": "sha512-YEz7bWv8mXz1QzzTd9qVn9koFn3Qmz97KLBQ2ssCFHVLthaxbVPYtwQOKiQagg2EOCUc+NyP04+Pr6BOzmMEkg==", + "dev": true, + "dependencies": { + "@eslint/js": "^10.0.1", + "@eslint/json": "^1.2.0", + "@stylistic/eslint-plugin": "^5.10.0", + "eslint-config-flat-gitignore": "^2.3.0", + "eslint-plugin-antfu": "^3.2.2", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-perfectionist": "^5.8.0", + "eslint-plugin-vue": "^10.8.0", + "fast-xml-parser": "^5.5.10", + "globals": "^17.4.0", + "semver": "^7.7.4", + "sort-package-json": "^3.6.1", + "typescript-eslint": "^8.58.0" + }, + "engines": { + "node": "^20.19 || ^22.13 || ^24" + }, + "peerDependencies": { + "eslint": ">=10" + } + }, + "node_modules/@nextcloud/eslint-config/node_modules/globals": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/event-bus": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", + "integrity": "sha512-zIfvKmUGkXpVzRKoXrcO9hkoiKDm65fqNxy/XIbIxrQhZByPq3gDkjBpnu3V5Gs8JdYwa73R8DjzV9oH8HYhIg==", + "dependencies": { + "@types/semver": "^7.7.0", + "semver": "^7.7.2" + }, + "engines": { + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/files/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" + } + }, + "node_modules/@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/l10n": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", + "dependencies": { + "@nextcloud/router": "^3.0.1", + "@nextcloud/typings": "^1.9.1", + "@types/escape-html": "^1.0.4", + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" + }, + "engines": { + "node": "^20 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/logger": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", + "dependencies": { + "@nextcloud/auth": "^2.5.3" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/paths": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.4.0.tgz", + "integrity": "sha512-35hykjqzaJCw8pBYWuKbLLw2wyKMuf9+T8K8GoYiS84AIi8SO16nuEu0fyl/gwCuiDqX5tCCup4wqljf0hdvaw==", + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/router": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/typings": "^1.10.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/sharing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.4.0.tgz", + "integrity": "sha512-1hUNyc7uJdBpnimOnEshJjEtAPAjzDYVl6qmWqF5ZxoN9wOvbExw0QjX3xFIbHbX2dmvbRNLBj0RzLzipmZyeg==", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.2 || ^4.0.0" + } + }, + "node_modules/@nextcloud/stylelint-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-3.1.1.tgz", + "integrity": "sha512-nvkmeHkifV7MEmtNhkYVQXUgcqldm8pbq2TvKPSpdrXB247Xh6OpFhupDbTAgeEQDDRDneayEVfj6e6Kb9w3sQ==", + "dev": true, + "dependencies": { + "stylelint-use-logical": "^2.1.2" + }, + "engines": { + "node": "^20 || ^22 || ^24" + }, + "peerDependencies": { + "stylelint": "^16.13.2", + "stylelint-config-recommended-scss": "^15.0.1", + "stylelint-config-recommended-vue": "^1.5.0" + } + }, + "node_modules/@nextcloud/typings": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@types/jquery": "3.5.16" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/upload": { + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@nextcloud/upload/-/upload-2.0.0-rc.0.tgz", + "integrity": "sha512-F7g3Zr/7Se7bimcSzpEHXUAfQRUhXV6iOdmjRSVNQTbrhS5q70SKJoFpJRP5j/QGCKycqLyv8YMPNmrtjNFbKw==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@nextcloud/auth": "^2.5.1", + "@nextcloud/axios": "^2.5.1", + "@nextcloud/capabilities": "^1.2.0", + "@nextcloud/files": "^3.10.2", + "@nextcloud/l10n": "^3.3.0", + "@nextcloud/logger": "^3.0.2", + "@nextcloud/paths": "^2.2.1", + "@nextcloud/router": "^3.0.0", + "@nextcloud/sharing": "^0.2.4", + "axios": "^1.10.0", + "axios-retry": "^4.5.0", + "crypto-browserify": "^3.12.1", + "p-cancelable": "^4.0.1", + "p-queue": "^8.1.0", + "typescript-event-target": "^1.1.1" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/upload/node_modules/@nextcloud/initial-state": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", + "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==", + "license": "GPL-3.0-or-later", + "engines": { + "node": "^20.0.0", + "npm": "^10.0.0" + } + }, + "node_modules/@nextcloud/upload/node_modules/@nextcloud/sharing": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.2.5.tgz", + "integrity": "sha512-B3K5Dq9b5dexDA5n3AAuCF69Huwhrpw0J72fsVXV4KpPdImjhVPlExAv5o70AoXa+OqN4Rwn6gqJw+3ED892zg==", + "license": "GPL-3.0-or-later", + "dependencies": { + "@nextcloud/initial-state": "^2.2.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, + "node_modules/@nextcloud/vue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.3.3.tgz", + "integrity": "sha512-M/M4L9vp1AJQ8RRk75mbMwUo7sOwWDaTDmAwgpTa9LARDe5e6UBJoMhOmiz5EPkYRHLn2SLE+baOIXVmtVMdqw==", + "dependencies": { + "@ckpack/vue-color": "^1.6.0", + "@floating-ui/dom": "^1.7.4", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@vuepic/vue-datepicker": "^11.0.3", + "@vueuse/components": "^14.1.0", + "@vueuse/core": "^14.0.0", + "blurhash": "^2.0.5", + "clone": "^2.1.2", + "debounce": "^3.0.0", + "dompurify": "^3.3.1", + "emoji-mart-vue-fast": "^15.0.5", + "escape-html": "^1.0.3", + "floating-vue": "^5.2.2", + "focus-trap": "7.6.6", + "linkifyjs": "^4.3.2", + "p-queue": "^9.1.0", + "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.2", + "rehype-react": "^8.0.0", + "remark-breaks": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-unlink-protocols": "^1.0.0", + "splitpanes": "^4.0.4", + "striptags": "^3.2.0", + "tabbable": "^6.4.0", + "tributejs": "^5.1.3", + "ts-md5": "^2.0.1", + "unified": "^11.0.5", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vue": "^3.5.18", + "vue-router": "^4.6.4", + "vue-select": "^4.0.0-beta.6" + }, + "engines": { + "node": "^20.11.0 || ^22 || ^24" + } + }, + "node_modules/@nextcloud/vue/node_modules/@ckpack/vue-color": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.6.0.tgz", + "integrity": "sha512-b9kFTKhYbNArfgP1lmnaVm0VNsWdZjqIbyHUYry7mZ+E7JeTQclbjq1+2xWn0SE3wzqRYlXmAVjECPOgteWmMQ==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.6.0", + "material-colors": "^1.2.6" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "dependencies": { + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + }, + "optionalDependencies": { + "@nextcloud/files": "^3.12.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/@vueuse/components": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-14.1.0.tgz", + "integrity": "sha512-SDRJUAv3H7/PMh+KkYpq0d5KMzpKOfqx4qcV4xyN4mZOLPw8NkiWu+yDcfXwI8h1uCqhRNz2cdeaLa+IuaehFw==", + "dependencies": { + "@vueuse/core": "14.1.0", + "@vueuse/shared": "14.1.0" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/@vueuse/core": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.1.0.tgz", + "integrity": "sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.1.0", + "@vueuse/shared": "14.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/@vueuse/metadata": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.1.0.tgz", + "integrity": "sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@nextcloud/vue/node_modules/@vueuse/shared": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.1.0.tgz", + "integrity": "sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/debounce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==", + "license": "MIT", + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.3.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/@nextcloud/vue/node_modules/floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "license": "MIT", + "dependencies": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.0", + "vue": "^3.2.0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/@nextcloud/vue/node_modules/floating-vue/node_modules/@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.1.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/vue/node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@nextcloud/vue/node_modules/splitpanes": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.4.tgz", + "integrity": "sha512-RbysugZhjbCw5fgplvk3hOXr41stahQDtZhHVkhnnJI6H4wlGDhM2kIpbehy7v92duy9GnMa8zIhHigIV1TWtg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antoniandre" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@nextcloud/vue/node_modules/vue-select": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", + "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", + "license": "MIT", + "peerDependencies": { + "vue": "3.x" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "peer": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "node_modules/@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@redocly/ajv/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/@redocly/config": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.0.tgz", + "integrity": "sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==", + "dev": true + }, + "node_modules/@redocly/openapi-core": { + "version": "1.34.11", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.11.tgz", + "integrity": "sha512-V09ayfnb5GyysmvARbt+voFZAjGcf7hSYxOYxSkCc4fbH/DTfq5YWoec8cflvmHHqyIFbqvmGKmYFzqhr9zxDg==", + "dev": true, + "dependencies": { + "@redocly/ajv": "8.11.2", + "@redocly/config": "0.22.0", + "colorette": "1.4.0", + "https-proxy-agent": "7.0.6", + "js-levenshtein": "1.1.6", + "js-yaml": "4.1.1", + "minimatch": "5.1.9", + "pluralize": "8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "engines": { + "node": ">=18.17.0", + "npm": ">=9.5.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@redocly/openapi-core/node_modules/colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "node_modules/@redocly/openapi-core/node_modules/minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.13.tgz", + "integrity": "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.1.tgz", + "integrity": "sha512-lTahKRJip0knffA/GTNFJMrToD+CM+JJ+Qt5kjzBK/sFQ0EWqfKW3AYQSlZXN98tX0lx66083U9JYIMioMMK7g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.1.tgz", + "integrity": "sha512-uqxkb3RJLzlBbh/bbNQ4r7YpSZnjgMgyoEOY7Fy6GCbelkDSAzeiogxMG9TfLsBbqmGsdDObo3mzGqa8hps4MA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.1.tgz", + "integrity": "sha512-tV6reObmxBDS4DDyLzTDIpymthNlxrLBGAoQx6m2a7eifSNEZdkXQl1PE4ZjCkEDPVgNXSzND/k9AQ3mC4IOEQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.1.tgz", + "integrity": "sha512-XuJRPTnMk1lwsSnS3vYyVMu4x/+WIw1MMSiqj5C4j3QOWsMzbJEK90zG+SWV1h0B1ABGCQ0UZUjti+TQK35uHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.1.tgz", + "integrity": "sha512-79BAm8Ag/tmJ5asCqgOXsb3WY28Rdd5Lxj8ONiQzWzy9LvWORd5qVuOnjlqiWWZJw+dWewEktZb5yiM1DLLaHw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.1.tgz", + "integrity": "sha512-OQ2/ZDGzdOOlyfqBiip0ZX/jVFekzYrGtUsqAfLDbWy0jh1PUU18+jYp8UMpqhly5ltEqotc2miLngf9FPSWIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.1.tgz", + "integrity": "sha512-HZZBXJL1udxlCVvoVadstgiU26seKkHbbAMLg7680gAcMnRNP9SAwTMVet02ANA94kXEI2VhBnXs4e5nf7KG2A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.1.tgz", + "integrity": "sha512-sZ5p2I9UA7T950JmuZ3pgdKA6+RTBr+0FpK427ExW0t7n+QwYOcmDTK/aRlzoBrWyTpJNlS3kacgSlSTUg6P/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.1.tgz", + "integrity": "sha512-3hBFoqPyU89Dyf1mQRXCdpc6qC6At3LV6jbbIOZd72jcx7xNk3aAp+EjzAtN6sDlmHFzsDJN5yeUySvorWeRXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.1.tgz", + "integrity": "sha512-49J4FnMHfGodJWPw73Ve+/hsPjZgcXQGkmqBGZFvltzBKRS+cvMiWNLadOMXKGnYRhs1ToTGM0sItKISoSGUNA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.1.tgz", + "integrity": "sha512-4yYU8p7AneEpQkRX03pbpLmE21z5JNys16F1BZBZg5fP9rIlb0TkeQjn5du5w4agConCCEoYIG57sNxjryHEGg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.1.tgz", + "integrity": "sha512-fAiq+J28l2YMWgC39jz/zPi2jqc0y3GSRo1yyxlBHt6UN0yYgnegHSRPa3pnHS5amT/efXQrm0ug5+aNEu9UuQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.1.tgz", + "integrity": "sha512-daoT0PMENNdjVYYU9xec30Y2prb1AbEIbb64sqkcQcSaR0zYuKkoPuhIztfxuqN82KYCKKrj+tQe4Gi7OSm1ow==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.1.tgz", + "integrity": "sha512-JNyXaAhWtdzfXu5pUcHAuNwGQKevR+6z/poYQKVW+pLaYOj9G1meYc57/1Xv2u4uTxfu9qEWmNTjv/H/EpAisw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.1.tgz", + "integrity": "sha512-U/CHbqKSwEQyZXjCpY43/GLYcTVKEXeRHw0rMBJP7fP3x6WpYG4LTJWR3ic6TeYKX6ZK7mrhltP4ppolyVhLVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.1.tgz", + "integrity": "sha512-uTLEakjxOTElfeZIGWkC34u2auLHB1AYS6wBjPGI00bWdxdLcCzK5awjs25YXpqB9lS8S0vbO0t9ZcBeNibA7g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.1.tgz", + "integrity": "sha512-Ft+d/9DXs30BK7CHCTX11FtQGHUdpNDLJW0HHLign4lgMgBcPFN3NkdIXhC5r9iwsMwYreBBc4Rho5ieOmKNVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.1.tgz", + "integrity": "sha512-N9X5WqGYzZnjGAFsKSfYFtAShYjwOmFJoWbLg3dYixZOZqU7hdMq+/xyS14zKLhFhZDhP9VfkzQnsdk0ZDS9IA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.1.tgz", + "integrity": "sha512-O+KcfeCORZADEY8oQJk4HK8wtEOCRE4MdOkb8qGZQNun3jzmj2nmhV/B/ZaaZOkPmJyvm/gW9n0gsB4eRa1eiQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.1.tgz", + "integrity": "sha512-CpKnYa8eHthJa3c+C38v/E+/KZyF1Jdh2Cz3DyKZqEWYgrM1IHFArXNWvBLPQCKUEsAqqKX27tTqVEFbDNUcOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", + "dev": true, + "optionalDependencies": { + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" + } + }, + "node_modules/@rspack/binding-darwin-arm64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-darwin-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rspack/binding-linux-arm64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-arm64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-linux-x64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rspack/binding-wasm32-wasi": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "1.0.7" + } + }, + "node_modules/@rspack/binding-win32-arm64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-ia32-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/binding-win32-x64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rspack/cli": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/cli/-/cli-1.7.11.tgz", + "integrity": "sha512-vUnflkq4F654wTEpCd+L4RYVbet8L2lNqLMmAGIZvoZddlXm4Duvg+eqcFE9iF8plAjFflRcU7DhB7WZa76pwg==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.7", + "@rspack/dev-server": "~1.1.5", + "exit-hook": "^4.0.0", + "webpack-bundle-analyzer": "4.10.2" + }, + "bin": { + "rspack": "bin/rspack.js" + }, + "peerDependencies": { + "@rspack/core": "^1.0.0-alpha || ^1.x" + } + }, + "node_modules/@rspack/core": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", + "dev": true, + "dependencies": { + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.11", + "@rspack/lite-tapable": "1.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "@swc/helpers": ">=0.5.1" + }, + "peerDependenciesMeta": { + "@swc/helpers": { + "optional": true + } + } + }, + "node_modules/@rspack/dev-server": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.5.tgz", + "integrity": "sha512-cwz0qc6iqqoJhyWqxP7ZqE2wyYNHkBMQUXxoQ0tNoZ4YNRkDyQ4HVJ/3oPSmMKbvJk/iJ16u7xZmwG6sK47q/A==", + "dev": true, + "dependencies": { + "chokidar": "^3.6.0", + "http-proxy-middleware": "^2.0.9", + "p-retry": "^6.2.0", + "webpack-dev-server": "5.2.2", + "ws": "^8.18.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "peerDependencies": { + "@rspack/core": "*" + } + }, + "node_modules/@rspack/dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/@rspack/dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rspack/plugin-node-polyfill": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@rspack/plugin-node-polyfill/-/plugin-node-polyfill-0.5.8.tgz", + "integrity": "sha512-rbSkt4tbZmJJ8ltRMj836LydMbQwRuKamnVKKmgLlho777FSdCle6PVQ7VT7Sz89gcJDbNyzX/DfQRTaUL7vDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "assert": "^2.0.0", + "browserify-fs": "1.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.22.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^4.0.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" + } + }, + "node_modules/@rspack/plugin-node-polyfill/node_modules/domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true, + "license": "Artistic-2.0", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://bevry.me/fund" + } + }, + "node_modules/@rspack/plugin-node-polyfill/node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@total-typescript/ts-reset": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz", + "integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tybys/wasm-util/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + }, + "node_modules/@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" + }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "peer": true + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jquery": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", + "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==", + "dependencies": { + "@types/sizzle": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.10.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" + }, + "node_modules/@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/toastify-js": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.4.tgz", + "integrity": "sha512-zfZHU4tKffPCnZRe7pjv/eFKzTVHozKewFCKaCjZ4gFinKgJRz/t0bkZiMCXJxPhv/ZoeDGNOeRD09R0kQZ/nw==", + "license": "MIT" + }, + "node_modules/@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "license": "MIT", + "optional": true + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==", + "license": "MIT" + }, + "node_modules/@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.1.tgz", + "integrity": "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/type-utils": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.58.1", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.1.tgz", + "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.1.tgz", + "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==", + "dev": true, + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.58.1", + "@typescript-eslint/types": "^8.58.1", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.1.tgz", + "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.1.tgz", + "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.1.tgz", + "integrity": "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.1.tgz", + "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.1.tgz", + "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==", + "dev": true, + "dependencies": { + "@typescript-eslint/project-service": "8.58.1", + "@typescript-eslint/tsconfig-utils": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.1.tgz", + "integrity": "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.1.tgz", + "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.58.1", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.6.tgz", + "integrity": "sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==", + "dev": true, + "dependencies": { + "@rolldown/pluginutils": "1.0.0-rc.13" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vitest/coverage-v8": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/browser": "3.2.4", + "vitest": "3.2.4" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } + } + }, + "node_modules/@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyspy": "^4.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "dependencies": { + "@volar/source-map": "2.4.28" + } + }, + "node_modules/@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==" + }, + "node_modules/@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "dependencies": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "node_modules/@vue-leaflet/vue-leaflet": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@vue-leaflet/vue-leaflet/-/vue-leaflet-0.10.1.tgz", + "integrity": "sha512-RNEDk8TbnwrJl8ujdbKgZRFygLCxd0aBcWLQ05q/pGv4+d0jamE3KXQgQBqGAteE1mbQsk3xoNcqqUgaIGfWVg==", + "license": "MIT", + "dependencies": { + "vue": "^3.2.25" + }, + "peerDependencies": { + "@types/leaflet": "^1.5.7", + "leaflet": "^1.6.0" + }, + "peerDependenciesMeta": { + "@types/leaflet": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz", + "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.32", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-core/node_modules/entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz", + "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==", + "dependencies": { + "@vue/compiler-core": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz", + "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==", + "dependencies": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.32", + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz", + "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.7.tgz", + "integrity": "sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==", + "dependencies": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.1.2", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + } + }, + "node_modules/@vue/language-core/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", + "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==", + "dependencies": { + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz", + "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz", + "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==", + "dependencies": { + "@vue/reactivity": "3.5.32", + "@vue/runtime-core": "3.5.32", + "@vue/shared": "3.5.32", + "csstype": "^3.2.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz", + "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==", + "dependencies": { + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "vue": "3.5.32" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz", + "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==" + }, + "node_modules/@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "node_modules/@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "node_modules/@vuepic/vue-datepicker": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.3.tgz", + "integrity": "sha512-sb2adwqwK2PizLQOpxCYps2SwhVT6/ic2HMIOqHJXuYa6iAJZWGL5YVlS7O4aW+sk6ZyxlDURLO7kDZPL4HB/w==", + "license": "MIT", + "dependencies": { + "date-fns": "^4.1.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.3.0" + } + }, + "node_modules/@vueuse/components": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-13.9.0.tgz", + "integrity": "sha512-0DDFpjG3hEEK+3YgSzE/OzOGqpo/KmxcXWzW2YdmgahZvaoUdegn68GmbdcHRJE7CH55dDj13Cz47iN8QoI3jQ==", + "license": "MIT", + "dependencies": { + "@vueuse/core": "13.9.0", + "@vueuse/shared": "13.9.0" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/core": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz", + "integrity": "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.9.0", + "@vueuse/shared": "13.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@vueuse/metadata": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.9.0.tgz", + "integrity": "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/router": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-13.9.0.tgz", + "integrity": "sha512-7AYay8Pv/0fC4D0eygbIyZuLyVs+9D7dsnO5D8aqat9qcOz91v/XFWR667WE1+p+OkU0ib+FjQUdnTVBNoIw8g==", + "dependencies": { + "@vueuse/shared": "13.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0", + "vue-router": "^4.0.0" + } + }, + "node_modules/@vueuse/shared": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.9.0.tgz", + "integrity": "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "~3.0.0" + } + }, + "node_modules/abstract-leveldown/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==" + }, + "node_modules/amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha512-V5+aH8pe+Z3u/UG3L3pG3BaFQGXAyXHVQDroRwjPHdh08bcUEchAVsU1MCuJSCaU5o60wTK6KaE6te5memzgYw==", + "license": "MIT", + "dependencies": { + "bezier-easing": "^2.0.3" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, + "node_modules/assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-v8-to-istanbul": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.4.tgz", + "integrity": "sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.29", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/ast-v8-to-istanbul/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/automation-events": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-7.1.16.tgz", + "integrity": "sha512-vAAHG8WO+Cx2PfwmWIAxSD51ZYg+zRam52pzOGVAJOqsqQO6oaPM2k4/cdEF7QQ786FYB8Wzbw//qTWCdyGvzA==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.2.0" + } + }, + "node_modules/automation-events/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/axios-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz", + "integrity": "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==", + "license": "Apache-2.0", + "dependencies": { + "is-retry-allowed": "^2.2.0" + }, + "peerDependencies": { + "axios": "0.x || 1.x" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "node_modules/base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz", + "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", + "dev": true, + "peer": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.4.0.tgz", + "integrity": "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.26" + } + }, + "node_modules/bl/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/bl/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "dependencies": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/broker-factory": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.14.tgz", + "integrity": "sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "fast-unique-numbers": "^9.0.27", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + } + }, + "node_modules/broker-factory/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==", + "dev": true, + "dependencies": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "dependencies": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/browserify-sign/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/browserify-sign/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/browserify-sign/node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", + "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz", + "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "hookified": "^1.8.2", + "keyv": "^5.3.3" + } + }, + "node_modules/cacheable/node_modules/keyv": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", + "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@keyv/serialize": "^1.0.3" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cancelable-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/cancelable-promise/-/cancelable-promise-4.3.1.tgz", + "integrity": "sha512-A/8PwLk/T7IJDfUdQ68NR24QHa8rIlnN/stiJEBo6dmVUkD4K14LswG0w3VwdeK/o7qOwRUR1k2MhK5Rpy2m7A==" + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chai": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.2.tgz", + "integrity": "sha512-kx7GHSOBiiIQ+DDgMP6YMtYkb/3Usm2nUYblNEM9P+/OfkuP7OjfoDlq/DCe1OU0GsREUa0rNAxZmzxgO6+jWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "engines": { + "node": "*" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "peer": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cipher-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "peer": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "peer": true + }, + "node_modules/comment-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz", + "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==", + "dev": true, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-js": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "peer": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cropperjs": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.2.tgz", + "integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==", + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "dependencies": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/crypto-browserify/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz", + "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "webpack": "^5.27.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "engines": { + "node": ">= 12" + } + }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/debounce": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.2.0.tgz", + "integrity": "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "node_modules/default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "abstract-leveldown": "~0.12.1" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-europe-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", + "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ] + }, + "node_modules/detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "peer": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "bin": { + "editorconfig": "bin/editorconfig" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/editorconfig/node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/editorconfig/node_modules/minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.239", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.239.tgz", + "integrity": "sha512-1y5w0Zsq39MSPmEjHjbizvhYoTaulVtivpxkp5q5kaPmQtsK6/2nvAzGRxNMS9DoYySp9PkW0MAQDwU1m764mg==", + "dev": true, + "peer": true + }, + "node_modules/elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-mart-vue-fast": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.5.tgz", + "integrity": "sha512-wnxLor8ggpqshoOPwIc33MdOC3A1XFeDLgUwYLPtNPL8VeAtXJAVrnFq1CN5PeCYAFoLo4IufHQZ9CfHD4IZiw==", + "license": "BSD-3-Clause", + "dependencies": { + "@babel/runtime": "^7.18.6", + "core-js": "^3.23.5" + }, + "peerDependencies": { + "vue": ">2.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-flat-gitignore": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-2.3.0.tgz", + "integrity": "sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==", + "dev": true, + "dependencies": { + "@eslint/compat": "^2.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "^9.5.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-antfu": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.2.2.tgz", + "integrity": "sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/eslint-plugin-jsdoc": { + "version": "62.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", + "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", + "dev": true, + "dependencies": { + "@es-joy/jsdoccomment": "~0.86.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.6", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-jsdoc/node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-perfectionist": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-5.8.0.tgz", + "integrity": "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^8.58.0", + "natural-orderby": "^5.0.0" + }, + "engines": { + "node": "^20.0.0 || >=22.0.0" + }, + "peerDependencies": { + "eslint": "^8.45.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz", + "integrity": "sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.0", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "@stylistic/eslint-plugin": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "@typescript-eslint/parser": "^7.0.0 || ^8.0.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "vue-eslint-parser": "^10.0.0" + }, + "peerDependenciesMeta": { + "@stylistic/eslint-plugin": { + "optional": true + }, + "@typescript-eslint/parser": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue/node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "peer": true, + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "peer": true, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "peer": true, + "dependencies": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/exit-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", + "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "node_modules/extendable-media-recorder": { + "version": "9.2.37", + "resolved": "https://registry.npmjs.org/extendable-media-recorder/-/extendable-media-recorder-9.2.37.tgz", + "integrity": "sha512-/fGfj/6S+3RZmGrRBi9RsGewySYW/2iN7rH3wAmUboAonTsP+YEENjKOo3j5A1LX0yW+yysLt1IeSvAz7Rjdpg==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "media-encoder-host": "^9.0.28", + "multi-buffer-data-view": "^6.0.27", + "recorder-audio-worklet": "^6.0.58", + "standardized-audio-context": "^25.3.77", + "subscribable-things": "^2.1.59", + "tslib": "^2.8.1" + } + }, + "node_modules/extendable-media-recorder-wav-encoder": { + "version": "7.0.137", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder/-/extendable-media-recorder-wav-encoder-7.0.137.tgz", + "integrity": "sha512-2g1x46TOLlkleoh4H2AwlFrGb/FDb52mKlTuUjvU7ta948QsnxWSuKURshREEmhcP05YZVzE6xTTBTLTaplYiA==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "extendable-media-recorder-wav-encoder-broker": "^7.0.126", + "extendable-media-recorder-wav-encoder-worker": "^8.0.122", + "tslib": "^2.8.1" + } + }, + "node_modules/extendable-media-recorder-wav-encoder-broker": { + "version": "7.0.126", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-broker/-/extendable-media-recorder-wav-encoder-broker-7.0.126.tgz", + "integrity": "sha512-uGh/5BWQXt2NBZfGxTnlbhJVyfthKM5QVFen+cgEgYOfTUYW8S7gn7DQiy2Gkxb6TN9xLBdqHki/9gyl64zxWw==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "extendable-media-recorder-wav-encoder-worker": "^8.0.122", + "tslib": "^2.8.1" + } + }, + "node_modules/extendable-media-recorder-wav-encoder-broker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/extendable-media-recorder-wav-encoder-worker": { + "version": "8.0.122", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-worker/-/extendable-media-recorder-wav-encoder-worker-8.0.122.tgz", + "integrity": "sha512-9yQoNyTzj/9m0rPh+rqoUo2WU+br2CuyiToQgNuh01cmqEDkcI5piXJv30U99Q65oSB7dnM0Wj89oxQwiOsSTg==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + } + }, + "node_modules/extendable-media-recorder-wav-encoder-worker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/extendable-media-recorder-wav-encoder/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/extendable-media-recorder/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "node_modules/fast-unique-numbers": { + "version": "9.0.27", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz", + "integrity": "sha512-nDA9ADeINN8SA2u2wCtU+siWFTTDqQR37XvgPIDDmboWQeExz7X0mImxuaN+kJddliIqy2FpVRmnvRZ+j8i1/A==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.2.0" + } + }, + "node_modules/fast-unique-numbers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-builder": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "path-expression-matcher": "^1.1.3" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.11.tgz", + "integrity": "sha512-QL0eb0YbSTVWF6tTf1+LEMSgtCEjBYPpnAjoLC8SscESlAjXEIRJ7cHtLG0pLeDFaZLa4VKZLArtA/60ZS7vyA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "fast-xml-builder": "^1.1.4", + "path-expression-matcher": "^1.4.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "peer": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "peer": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "peer": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/focus-trap": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.6.tgz", + "integrity": "sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q==", + "license": "MIT", + "dependencies": { + "tabbable": "^6.3.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "dev": true, + "license": "MIT" + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", + "dev": true, + "dependencies": { + "readable-stream": "~1.0.26-4" + } + }, + "node_modules/fwd-stream/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/fwd-stream/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/fwd-stream/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/git-hooks-list": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", + "dev": true, + "funding": { + "url": "https://github.com/fisker/git-hooks-list?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "peer": true, + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "peer": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "peer": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "peer": true + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/hark": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/hark/-/hark-1.2.3.tgz", + "integrity": "sha512-u68vz9SCa38ESiFJSDjqK8XbXqWzyot7Cj6Y2b6jk2NJ+II3MY2dIrLMg/kjtIAun4Y1DHF/20hfx4rq1G5GMg==", + "dependencies": { + "wildemitter": "^1.2.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/hookified": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz", + "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/hot-patcher": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", + "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "peer": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/htmlparser2/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true, + "engines": { + "node": ">=10.18" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true, + "license": "MIT" + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "peer": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", + "dev": true + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-standalone-pwa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", + "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ] + }, + "node_modules/is-svg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", + "integrity": "sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==", + "dependencies": { + "@file-type/xml": "^0.4.3" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-beautify": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", + "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.4.2", + "js-cookie": "^3.0.5", + "nopt": "^7.2.1" + }, + "bin": { + "css-beautify": "js/bin/css-beautify.js", + "html-beautify": "js/bin/html-beautify.js", + "js-beautify": "js/bin/js-beautify.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz", + "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==", + "dev": true, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^3.0.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "peer": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/launch-editor": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", + "dev": true, + "dependencies": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "node_modules/layerr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", + "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==" + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, + "node_modules/leaflet-defaulticon-compatibility": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz", + "integrity": "sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==" + }, + "node_modules/level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", + "dev": true, + "dependencies": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + } + }, + "node_modules/level-blobs/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-blobs/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/level-blobs/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", + "dev": true, + "dependencies": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + } + }, + "node_modules/level-filesystem/node_modules/xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", + "dev": true, + "dependencies": { + "string-range": "~1.2" + } + }, + "node_modules/level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "deprecated": "Superseded by browser-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + } + }, + "node_modules/level-js/node_modules/object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true, + "license": "MIT" + }, + "node_modules/level-js/node_modules/xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "dependencies": { + "object-keys": "~0.4.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-fix-range": "~1.0.2" + } + }, + "node_modules/level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + } + }, + "node_modules/level-sublevel/node_modules/clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/level-sublevel/node_modules/level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "~0.1.9" + } + }, + "node_modules/level-sublevel/node_modules/object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", + "deprecated": "Please update to the latest object-keys", + "dev": true, + "license": "MIT", + "dependencies": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "node_modules/level-sublevel/node_modules/xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", + "dev": true, + "dependencies": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + }, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + } + }, + "node_modules/levelup/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/levelup/node_modules/semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", + "dev": true, + "license": "BSD", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/levelup/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/levelup/node_modules/xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.12.41", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.41.tgz", + "integrity": "sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==" + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true, + "peer": true + }, + "node_modules/linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==" + }, + "node_modules/loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true, + "license": "MIT" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==", + "license": "ISC" + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdast-squeeze-paragraphs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-6.0.0.tgz", + "integrity": "sha512-6NDbJPTg0M0Ye+TlYwX1KJ1LFbp515P2immRJyJQhc9Na9cetHzSoHNYIQcXpANEAP1sm9yd/CTZU2uHqR5A+w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-newline-to-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz", + "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-find-and-replace": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/media-encoder-host": { + "version": "9.0.28", + "resolved": "https://registry.npmjs.org/media-encoder-host/-/media-encoder-host-9.0.28.tgz", + "integrity": "sha512-U5F+VLrGkGAM1XRGTMrms4Ghg/ZvWUUBUX15QMENzIFYF/Zn7Mo71LSr4cNiOrfuF8sxYtmdnyHWOitrvOytTQ==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "media-encoder-host-broker": "^8.0.26", + "media-encoder-host-worker": "^10.0.26", + "tslib": "^2.8.1" + } + }, + "node_modules/media-encoder-host-broker": { + "version": "8.0.26", + "resolved": "https://registry.npmjs.org/media-encoder-host-broker/-/media-encoder-host-broker-8.0.26.tgz", + "integrity": "sha512-dAPslrM8VQQQh4fNA8VgWIJD1TTgtoNF28icYmzukOTnbWfLYjq+1rsBxxbwE90fdAj5UDcP2kw73pFgMWRogA==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "fast-unique-numbers": "^9.0.27", + "media-encoder-host-worker": "^10.0.26", + "tslib": "^2.8.1" + } + }, + "node_modules/media-encoder-host-broker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/media-encoder-host-worker": { + "version": "10.0.26", + "resolved": "https://registry.npmjs.org/media-encoder-host-worker/-/media-encoder-host-worker-10.0.26.tgz", + "integrity": "sha512-zDQs74toYGnZzXpATIKuvOpt7nxGUEjdTezj1ntnJBfMIhN221qYouVsweSwhlPOF5FxarTPGuRnd7F360aOGg==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "extendable-media-recorder-wav-encoder-broker": "^7.0.126", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + } + }, + "node_modules/media-encoder-host-worker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/media-encoder-host/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.57.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "dev": true, + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/thingies": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", + "dev": true, + "engines": { + "node": ">=10.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "^2" + } + }, + "node_modules/memfs/node_modules/tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/memfs/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ] + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mockconsole": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/mockconsole/-/mockconsole-0.0.1.tgz", + "integrity": "sha1-1ip+2FUwlkq80k7bnzD6WLvOVsY=" + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + }, + "node_modules/multi-buffer-data-view": { + "version": "6.0.27", + "resolved": "https://registry.npmjs.org/multi-buffer-data-view/-/multi-buffer-data-view-6.0.27.tgz", + "integrity": "sha512-hqbVIRFskEUX3PmHxGPGFOcLU93va4yfYkBBg4c1U0wK1Z/pDfIbYDexbIIWI+vtrXWkQAStCQ4drcQ1ooakiA==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=18.2.0" + } + }, + "node_modules/multi-buffer-data-view/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nested-property": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-4.0.0.tgz", + "integrity": "sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==" + }, + "node_modules/ngraph.events": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", + "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==", + "license": "BSD-3-Clause" + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "dev": true, + "peer": true + }, + "node_modules/nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true, + "license": "MIT" + }, + "node_modules/object-deep-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", + "dev": true + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.13.0.tgz", + "integrity": "sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==", + "dev": true, + "dependencies": { + "@redocly/openapi-core": "^1.34.6", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "openapi-typescript": "bin/cli.js" + }, + "peerDependencies": { + "typescript": "^5.x" + } + }, + "node_modules/openapi-typescript/node_modules/parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/openapi-typescript/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/openapi-typescript/node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "peer": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "node_modules/p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "node_modules/p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/panzoom": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.4.tgz", + "integrity": "sha512-r1KfkNZvsBw59IPq7Yy+GWZnZE1YCG/t7aG6caSkij/TBqdxTzmxNTm/lHf3h6qlVMFisIGIO+lgS2Ym23PIoA==", + "dependencies": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.2", + "wheel": "^1.0.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "dependencies": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse-asn1/node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-asn1/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "dependencies": { + "parse-statements": "1.0.11" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-posix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", + "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "license": "MIT", + "dependencies": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/pbkdf2/node_modules/create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "node_modules/pbkdf2/node_modules/hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "license": "MIT", + "dependencies": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/pbkdf2/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "dependencies": { + "@vue/devtools-api": "^7.7.7" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.5.0", + "vue": "^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.7" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-html": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", + "dev": true, + "peer": true, + "dependencies": { + "htmlparser2": "^8.0.0", + "js-tokens": "^8.0.0", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, + "engines": { + "node": "^12 || >=14" + } + }, + "node_modules/postcss-html/node_modules/js-tokens": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "dev": true, + "peer": true + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true, + "license": "ISC" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "license": "MIT" + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "dependencies": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/recorder-audio-worklet": { + "version": "6.0.58", + "resolved": "https://registry.npmjs.org/recorder-audio-worklet/-/recorder-audio-worklet-6.0.58.tgz", + "integrity": "sha512-aJn0aPM1okIBzH8ZXKWObUjeQkwWMQvlHK9CfL24RAaO+Gh6bNzrlqAbsq7ixv/IUHRoHRA2trG23dJ/kiMrDw==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "fast-unique-numbers": "^9.0.27", + "recorder-audio-worklet-processor": "^5.0.40", + "standardized-audio-context": "^25.3.77", + "subscribable-things": "^2.1.59", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + } + }, + "node_modules/recorder-audio-worklet-processor": { + "version": "5.0.40", + "resolved": "https://registry.npmjs.org/recorder-audio-worklet-processor/-/recorder-audio-worklet-processor-5.0.40.tgz", + "integrity": "sha512-9O0PkUS4Mv0y/yfHi1d+9Hu5y+of7FZK37ISg/UeUVZrP+fUd9bmfJzZVHgqjo9s/KvFwWW3i+ZqXP8u81rXSA==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + } + }, + "node_modules/recorder-audio-worklet-processor/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/recorder-audio-worklet/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-react": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-8.0.0.tgz", + "integrity": "sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-breaks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", + "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-newline-to-break": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-unlink-protocols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-unlink-protocols/-/remark-unlink-protocols-1.0.0.tgz", + "integrity": "sha512-5j/F28jhFmxeyz8nuJYYIWdR4nNpKWZ8A+tVwnK/0pq7Rjue33CINEYSckSq2PZvedhKUwbn08qyiuGoPLBung==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-squeeze-paragraphs": "^6.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rollup": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.47.1.tgz", + "integrity": "sha512-iasGAQoZ5dWDzULEUX3jiW0oB1qyFOepSyDyoU6S/OhVlDIwj5knI5QBa5RRQ0sK7OE0v+8VIi2JuV+G+3tfNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.47.1", + "@rollup/rollup-android-arm64": "4.47.1", + "@rollup/rollup-darwin-arm64": "4.47.1", + "@rollup/rollup-darwin-x64": "4.47.1", + "@rollup/rollup-freebsd-arm64": "4.47.1", + "@rollup/rollup-freebsd-x64": "4.47.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.1", + "@rollup/rollup-linux-arm-musleabihf": "4.47.1", + "@rollup/rollup-linux-arm64-gnu": "4.47.1", + "@rollup/rollup-linux-arm64-musl": "4.47.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.1", + "@rollup/rollup-linux-ppc64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-musl": "4.47.1", + "@rollup/rollup-linux-s390x-gnu": "4.47.1", + "@rollup/rollup-linux-x64-gnu": "4.47.1", + "@rollup/rollup-linux-x64-musl": "4.47.1", + "@rollup/rollup-win32-arm64-msvc": "4.47.1", + "@rollup/rollup-win32-ia32-msvc": "4.47.1", + "@rollup/rollup-win32-x64-msvc": "4.47.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "peer": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs-interop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rxjs-interop/-/rxjs-interop-2.0.0.tgz", + "integrity": "sha512-ASEq9atUw7lualXB+knvgtvwkCEvGWV2gDD/8qnASzBkzEARZck9JAyxmY8OS6Nc1pCPEgDTKNcx+YqqYfzArw==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "dev": true, + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", + "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || ^1.0.0 || ^2.0.0-0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "engines": { + "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "bin": { + "sha.js": "bin.js" + }, + "engines": { + "node": ">= 0.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sha.js/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/sort-object-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", + "dev": true + }, + "node_modules/sort-package-json": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.1.tgz", + "integrity": "sha512-Chgejw1+10p2D0U2tB7au1lHtz6TkFnxmvZktyBCRyV0GgmF6nl1IxXxAsPtJVsUyg/fo+BfCMAVVFUVRkAHrQ==", + "dev": true, + "dependencies": { + "detect-indent": "^7.0.2", + "detect-newline": "^4.0.1", + "git-hooks-list": "^4.1.1", + "is-plain-obj": "^4.1.0", + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" + }, + "bin": { + "sort-package-json": "cli.js" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/sort-package-json/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true, + "license": "MIT" + }, + "node_modules/standardized-audio-context": { + "version": "25.3.77", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.77.tgz", + "integrity": "sha512-Ki9zNz6pKcC5Pi+QPjPyVsD9GwJIJWgryji0XL9cAJXMGyn+dPOf6Qik1AHei0+UNVcc4BOCa0hWLBzlwqsW/A==", + "dependencies": { + "@babel/runtime": "^7.25.6", + "automation-events": "^7.0.9", + "tslib": "^2.7.0" + } + }, + "node_modules/standardized-audio-context/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true, + "license": "MIT" + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "node_modules/string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/strip-literal/node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "node_modules/strnum": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", + "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ] + }, + "node_modules/strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/style-to-js": { + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "license": "MIT", + "dependencies": { + "style-to-object": "1.0.9" + } + }, + "node_modules/style-to-object": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/stylelint": { + "version": "16.19.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", + "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.0.8", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.3", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.36.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/stylelint-config-html": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz", + "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==", + "dev": true, + "peer": true, + "engines": { + "node": "^12 || >=14" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "postcss-html": "^1.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz", + "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.16.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-15.0.1.tgz", + "integrity": "sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^16.0.0", + "stylelint-scss": "^6.12.0" + }, + "engines": { + "node": ">=20" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^16.16.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-recommended-vue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.5.0.tgz", + "integrity": "sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==", + "dev": true, + "peer": true, + "dependencies": { + "semver": "^7.3.5", + "stylelint-config-html": ">=1.0.0", + "stylelint-config-recommended": ">=6.0.0" + }, + "engines": { + "node": "^12 || >=14" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "postcss-html": "^1.0.0", + "stylelint": ">=14.0.0" + } + }, + "node_modules/stylelint-scss": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", + "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/stylelint-scss/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/stylelint-scss/node_modules/css-tree/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/stylelint-scss/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint-scss/node_modules/mdn-data": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", + "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/stylelint-scss/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint-use-logical": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stylelint-use-logical/-/stylelint-use-logical-2.1.3.tgz", + "integrity": "sha512-haPkgxKre+eSqr4IZJnHwNT/9/wICykeFZIaz7rZbe4SohTHkw7vBahMOrZJZpdny/EBVHAcPH2IBeoiUcZWWw==", + "dev": true, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "stylelint": ">= 11 < 18" + } + }, + "node_modules/stylelint/node_modules/@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "peer": true, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^7.0.0" + } + }, + "node_modules/stylelint/node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "peer": true + }, + "node_modules/stylelint/node_modules/css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/stylelint/node_modules/file-entry-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz", + "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "flat-cache": "^6.1.9" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz", + "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cacheable": "^1.9.0", + "flatted": "^3.3.3", + "hookified": "^1.8.2" + } + }, + "node_modules/stylelint/node_modules/ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/stylelint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylelint/node_modules/mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/stylelint/node_modules/postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } + }, + "node_modules/stylelint/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylelint/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/subscribable-things": { + "version": "2.1.59", + "resolved": "https://registry.npmjs.org/subscribable-things/-/subscribable-things-2.1.59.tgz", + "integrity": "sha512-V0GCOgYw7ZzJCDsKtEPJCZ2+BWlRIUulDdCiSetexX4qXsCs8gFRImf+y/ySGYSF9bXawsXlUE1ioKMwET7FUg==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "rxjs-interop": "^2.0.0", + "tslib": "^2.8.1" + } + }, + "node_modules/subscribable-things/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/chalk/supports-hyperlinks?sponsor=1" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true, + "peer": true + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==" + }, + "node_modules/table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.86" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "license": "MIT", + "dependencies": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/to-buffer/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/to-buffer/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "dependencies": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/toastify-js": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", + "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/tributejs": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", + "integrity": "sha512-B5CXihaVzXw+1UHhNFyAwUTMDk1EfoLP5Tj1VhD9yybZ1I8DZJEv8tZ1l0RJo0t0tk9ZhR8eG5tEsaCvRigmdQ==" + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/ts-md5": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-2.0.1.tgz", + "integrity": "sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true, + "peer": true + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", + "dev": true, + "license": "MIT" + }, + "node_modules/typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.1.tgz", + "integrity": "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.58.1", + "@typescript-eslint/parser": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-event-target": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.1.tgz", + "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg==" + }, + "node_modules/ua-is-frozen": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", + "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ] + }, + "node_modules/ua-parser-js": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.9.tgz", + "integrity": "sha512-OsqGhxyo/wGdLSXMSJxuMGN6H4gDnKz6Fb3IBm4bxZFMnyy0sdf6MN96Ie8tC6z/btdO+Bsy8guxlvLdwT076w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "dependencies": { + "detect-europe-js": "^0.1.2", + "is-standalone-pwa": "^0.1.1", + "ua-is-frozen": "^0.1.2" + }, + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unified/node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unist-builder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz", + "integrity": "sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true + }, + "node_modules/url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vite": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.2.4", + "@vitest/ui": "3.2.4", + "happy-dom": "*", + "jsdom": "*" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@types/debug": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" + }, + "node_modules/vue": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", + "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", + "dependencies": { + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-sfc": "3.5.32", + "@vue/runtime-dom": "3.5.32", + "@vue/server-renderer": "3.5.32", + "@vue/shared": "3.5.32" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-component-type-helpers": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.10.tgz", + "integrity": "sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-cropperjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz", + "integrity": "sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==", + "license": "MIT", + "dependencies": { + "cropperjs": "^1.5.6" + }, + "peerDependencies": { + "vue": ">=3.0.0" + } + }, + "node_modules/vue-draggable-resizable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vue-draggable-resizable/-/vue-draggable-resizable-3.0.0.tgz", + "integrity": "sha512-kABSggcXPoDB8dOTVE09ZkccxiMdNDUaLl7STTeghsFE3o+mk653iumrkmjKLfIBA/w5ZXWJmarBqoqsmWLzEg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.25" + } + }, + "node_modules/vue-eslint-parser": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz", + "integrity": "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==", + "dev": true, + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0 || ^9.0.0", + "eslint-visitor-keys": "^4.2.0 || ^5.0.0", + "espree": "^10.3.0 || ^11.0.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-material-design-icons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vue-material-design-icons/-/vue-material-design-icons-5.3.1.tgz", + "integrity": "sha512-6UNEyhlTzlCeT8ZeX5WbpUGFTTPSbOoTQeoASTv7X4Ylh0pe8vltj+36VMK56KM0gG8EQVoMK/Qw/6evalg8lA==" + }, + "node_modules/vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.5.0" + } + }, + "node_modules/vue-tsc": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.7.tgz", + "integrity": "sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==", + "dependencies": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.7" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + } + }, + "node_modules/vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.0.0-beta.11" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/wasm-check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/wasm-check/-/wasm-check-2.1.2.tgz", + "integrity": "sha512-Eu162RfercUY9BZ4QN4PbOkuKkXwyuD+V5+iZ+VJ85W6ubDqZcNQMBAbBcqyrHs0Qb0D0IWVhPlfYFVhMoKhYw==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/webdav": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.9.0.tgz", + "integrity": "sha512-OMJ6wtK1WvCO++aOLoQgE96S8KT4e5aaClWHmHXfFU369r4eyELN569B7EqT4OOUb99mmO58GkyuiCv/Ag6J0Q==", + "dependencies": { + "@buttercup/fetch": "^0.2.1", + "base-64": "^1.0.0", + "byte-length": "^1.0.2", + "entities": "^6.0.1", + "fast-xml-parser": "^5.3.4", + "hot-patcher": "^2.0.1", + "layerr": "^3.0.0", + "md5": "^2.3.0", + "minimatch": "^9.0.5", + "nested-property": "^4.0.0", + "node-fetch": "^3.3.2", + "path-posix": "^1.0.0", + "url-join": "^5.0.0", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/webdav/node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/webdav/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "node_modules/webpack-bundle-analyzer/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/webpack-dev-middleware/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 18.12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack/node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webrtc-adapter": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.5.tgz", + "integrity": "sha512-U9vjByy/sK2OMXu5mmfuZFKTMIUQe34c0JXRO+oDrxJTsntdYT2iIFwYMOV7HhMTuktcZLGf2W1N/OcSf9ssWg==", + "dependencies": { + "sdp": "^3.2.0" + }, + "engines": { + "node": ">=6.0.0", + "npm": ">=3.10.0" + } + }, + "node_modules/webrtcsupport": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webrtcsupport/-/webrtcsupport-2.2.0.tgz", + "integrity": "sha1-MtjJYIclraNSrwq2q/IayrUYKqY=" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url/node_modules/tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==", + "license": "MIT" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wildemitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/wildemitter/-/wildemitter-1.2.1.tgz", + "integrity": "sha512-UMmSUoIQSir+XbBpTxOTS53uJ8s/lVhADCkEbhfRjUGFDPme/XGOb0sBWLx5sTz7Wx/2+TlAw1eK9O5lw5PiEw==" + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/worker-factory": { + "version": "7.0.49", + "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.49.tgz", + "integrity": "sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==", + "dependencies": { + "@babel/runtime": "^7.29.2", + "fast-unique-numbers": "^9.0.27", + "tslib": "^2.8.1" + } + }, + "node_modules/worker-factory/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "dependencies": { + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@asamuzakjp/css-color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.2.0.tgz", + "integrity": "sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==", + "dev": true, + "requires": { + "@csstools/css-calc": "^2.1.3", + "@csstools/css-color-parser": "^3.0.9", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + } + }, + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "requires": { + "@babel/types": "^7.29.0" + } + }, + "@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==" + }, + "@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "requires": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + } + }, + "@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true + }, + "@buttercup/fetch": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@buttercup/fetch/-/fetch-0.2.1.tgz", + "integrity": "sha512-sCgECOx8wiqY8NN1xN22BqqKzXYIG2AicNLlakOAI4f0WgyLVUbAigMf8CZhBtJxdudTcB1gD5lciqi44jwJvg==", + "requires": { + "node-fetch": "^3.3.0" + } + }, + "@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true + }, + "@csstools/css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.4.tgz", + "integrity": "sha512-3N8oaj+0juUw/1H3YwmDDJXCgTB1gKU6Hc/bB502u9zR0q2vd786XJH9QfrKIEgFlZmhZiq6epXl4rHqhzsIgQ==", + "dev": true, + "requires": {} + }, + "@csstools/css-color-parser": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.10.tgz", + "integrity": "sha512-TiJ5Ajr6WRd1r8HSiwJvZBiJOqtH86aHpUjq5aEKWHiII2Qfjqd/HCWKPOW8EP4vcspXbHnXrwIDlu5savQipg==", + "dev": true, + "requires": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.4" + } + }, + "@csstools/css-parser-algorithms": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz", + "integrity": "sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==", + "dev": true, + "requires": {} + }, + "@csstools/css-tokenizer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz", + "integrity": "sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==", + "dev": true + }, + "@csstools/media-query-list-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-4.0.2.tgz", + "integrity": "sha512-EUos465uvVvMJehckATTlNqGj4UJWkTmdWuDMjqvSUkjGpmOyFZBVwb4knxCm/k2GMTXY+c/5RkdndzFYWeX5A==", + "dev": true, + "peer": true, + "requires": {} + }, + "@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==" + }, + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "peer": true + }, + "@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@es-joy/jsdoccomment": { + "version": "0.86.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.86.0.tgz", + "integrity": "sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==", + "dev": true, + "requires": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.58.0", + "comment-parser": "1.4.6", + "esquery": "^1.7.0", + "jsdoc-type-pratt-parser": "~7.2.0" + } + }, + "@es-joy/resolve.exports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@es-joy/resolve.exports/-/resolve.exports-1.2.0.tgz", + "integrity": "sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==", + "dev": true + }, + "@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "dev": true, + "optional": true + }, + "@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^3.4.3" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true + } + } + }, + "@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true + }, + "@eslint/compat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-2.0.5.tgz", + "integrity": "sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==", + "dev": true, + "requires": { + "@eslint/core": "^1.2.1" + } + }, + "@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "peer": true, + "requires": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + } + }, + "@eslint/config-helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.5.tgz", + "integrity": "sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==", + "dev": true, + "peer": true, + "requires": { + "@eslint/core": "^1.2.1" + } + }, + "@eslint/core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.15" + } + }, + "@eslint/js": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz", + "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==", + "dev": true, + "requires": {} + }, + "@eslint/json": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@eslint/json/-/json-1.2.0.tgz", + "integrity": "sha512-CEFEyNgvzu8zn5QwVYDg3FaG+ZKUeUsNYitFpMYJAqoAlnw68EQgNbUfheSmexZr4n0wZPrAkPLuvsLaXO6wRw==", + "dev": true, + "requires": { + "@eslint/core": "^1.1.1", + "@eslint/plugin-kit": "^0.6.1", + "@humanwhocodes/momoa": "^3.3.10", + "natural-compare": "^1.4.0" + } + }, + "@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "peer": true + }, + "@eslint/plugin-kit": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz", + "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==", + "dev": true, + "requires": { + "@eslint/core": "^1.1.1", + "levn": "^0.4.1" + } + }, + "@file-type/xml": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@file-type/xml/-/xml-0.4.4.tgz", + "integrity": "sha512-NhCyXoHlVZ8TqM476hyzwGJ24+D5IPSaZhmrPj7qXnEVb3q6jrFzA3mM9TBpknKSI9EuQeGTKRg2DXGUwvBBoQ==", + "requires": { + "sax": "^1.4.1", + "strtok3": "^10.3.4" + } + }, + "@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "requires": { + "@floating-ui/utils": "^0.2.10" + } + }, + "@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "requires": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==" + }, + "@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "peer": true + }, + "@humanfs/node": { + "version": "0.16.7", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz", + "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==", + "dev": true, + "peer": true, + "requires": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.4.0" + } + }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "peer": true + }, + "@humanwhocodes/momoa": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/@humanwhocodes/momoa/-/momoa-3.3.10.tgz", + "integrity": "sha512-KWiFQpSAqEIyrTXko3hFNLeQvSK8zXlJQzhhxsyVn58WFRYXST99b3Nqnu+ttOtjds2Pl2grUHGpe2NzhPynuQ==", + "dev": true + }, + "@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "peer": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + } + } + } + }, + "@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.30", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.30.tgz", + "integrity": "sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@keyv/serialize": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.0.3.tgz", + "integrity": "sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==", + "dev": true, + "peer": true, + "requires": { + "buffer": "^6.0.3" + } + }, + "@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "@matrix-org/olm": { + "version": "3.2.15", + "resolved": "https://registry.npmjs.org/@matrix-org/olm/-/olm-3.2.15.tgz", + "integrity": "sha512-S7lOrndAK9/8qOtaTq/WhttJC/o4GAzdfK0MUPpo8ApzsJEC0QjtwrkC3KBXdFP1cD1MXi/mlKR7aaoVMKgs6Q==" + }, + "@mdi/js": { + "version": "7.4.47", + "resolved": "https://registry.npmjs.org/@mdi/js/-/js-7.4.47.tgz", + "integrity": "sha512-KPnNOtm5i2pMabqZxpUz7iQf+mfrYZyKCZ8QNz85czgEt7cuHcGorWfdzUMWYA0SD+a6Hn4FmJ+YhzzzjkTZrQ==" + }, + "@mediapipe/tasks-vision": { + "version": "0.10.34", + "resolved": "https://registry.npmjs.org/@mediapipe/tasks-vision/-/tasks-vision-0.10.34.tgz", + "integrity": "sha512-KFGyhDsjJ+9WUMcMfjTOpcEp3LJNS3KwC7BfvKrCYELn/7G/5kmwnU7z6Spps+iWQoTGL8xW8i68r65OTa3DwA==" + }, + "@module-federation/error-codes": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/error-codes/-/error-codes-0.22.0.tgz", + "integrity": "sha512-xF9SjnEy7vTdx+xekjPCV5cIHOGCkdn3pIxo9vU7gEZMIw0SvAEdsy6Uh17xaCpm8V0FWvR0SZoK9Ik6jGOaug==", + "dev": true + }, + "@module-federation/runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime/-/runtime-0.22.0.tgz", + "integrity": "sha512-38g5iPju2tPC3KHMPxRKmy4k4onNp6ypFPS1eKGsNLUkXgHsPMBFqAjDw96iEcjri91BrahG4XcdyKi97xZzlA==", + "dev": true, + "requires": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/runtime-core": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "@module-federation/runtime-core": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-core/-/runtime-core-0.22.0.tgz", + "integrity": "sha512-GR1TcD6/s7zqItfhC87zAp30PqzvceoeDGYTgF3Vx2TXvsfDrhP6Qw9T4vudDQL3uJRne6t7CzdT29YyVxlgIA==", + "dev": true, + "requires": { + "@module-federation/error-codes": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "@module-federation/runtime-tools": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/runtime-tools/-/runtime-tools-0.22.0.tgz", + "integrity": "sha512-4ScUJ/aUfEernb+4PbLdhM/c60VHl698Gn1gY21m9vyC1Ucn69fPCA1y2EwcCB7IItseRMoNhdcWQnzt/OPCNA==", + "dev": true, + "requires": { + "@module-federation/runtime": "0.22.0", + "@module-federation/webpack-bundler-runtime": "0.22.0" + } + }, + "@module-federation/sdk": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/sdk/-/sdk-0.22.0.tgz", + "integrity": "sha512-x4aFNBKn2KVQRuNVC5A7SnrSCSqyfIWmm1DvubjbO9iKFe7ith5niw8dqSFBekYBg2Fwy+eMg4sEFNVvCAdo6g==", + "dev": true + }, + "@module-federation/webpack-bundler-runtime": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@module-federation/webpack-bundler-runtime/-/webpack-bundler-runtime-0.22.0.tgz", + "integrity": "sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==", + "dev": true, + "requires": { + "@module-federation/runtime": "0.22.0", + "@module-federation/sdk": "0.22.0" + } + }, + "@napi-rs/wasm-runtime": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.0.7.tgz", + "integrity": "sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "^1.5.0", + "@emnapi/runtime": "^1.5.0", + "@tybys/wasm-util": "^0.10.1" + } + }, + "@nextcloud/auth": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.6.0.tgz", + "integrity": "sha512-VkT87+9UqpPi7O36bVEE4/MxWF8d90VQcuMlvKltsZyLSLkEGrPXgowtD75Y54k60/8SR6mXbeqBwapi8dDUbA==", + "requires": { + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/router": "^3.1.0" + } + }, + "@nextcloud/axios": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@nextcloud/axios/-/axios-2.6.0.tgz", + "integrity": "sha512-ehcIgyora8DAJ+STG6iFI4e+ufPVFrIA6o0FgMKeKdfyaxRJ9UM7L+n7V+rc/qv8sDiWC/hWIKwFtLw2W5yE4Q==", + "requires": { + "@nextcloud/auth": "^2.6.0", + "axios": "^1.15.0" + } + }, + "@nextcloud/browser-storage": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@nextcloud/browser-storage/-/browser-storage-0.5.0.tgz", + "integrity": "sha512-usYr4GlJQlK3hgZURvklqWb9ivi7sgsSuFqXrs7s4hl1LTS4enzPrnkQumm6nRsQruf0ITS+OBsK+oELEbvYPA==" + }, + "@nextcloud/browserslist-config": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@nextcloud/browserslist-config/-/browserslist-config-3.1.2.tgz", + "integrity": "sha512-2iXl1rqQOHvggFIl/V3J5OpbodVazOsO38Gz/2sUAmtWXuOpGZG+7i6zQcVqGVaT1VzyPJ1gPiMpyyZi/XRWNA==", + "dev": true, + "requires": {} + }, + "@nextcloud/capabilities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/capabilities/-/capabilities-1.2.1.tgz", + "integrity": "sha512-snZ0/910zzwN6PDsIlx2Uvktr1S5x0ClhDUnfPlCj7ntNvECzuVHNY5wzby22LIkc+9ZjaDKtCwuCt2ye+9p/Q==", + "requires": { + "@nextcloud/initial-state": "^3.0.0" + } + }, + "@nextcloud/cdav-library": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/cdav-library/-/cdav-library-2.2.0.tgz", + "integrity": "sha512-vaikb6JFji8MjeNSl8rsbRm97sDI8f9+Qa4ixLtubYYomm6SuNxhTau7hVC+v7sIlzrBhQlz4h0Gmq9nEsZrug==", + "requires": { + "@nextcloud/axios": "^2.5.2" + } + }, + "@nextcloud/dialogs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/dialogs/-/dialogs-7.2.0.tgz", + "integrity": "sha512-seb2yYnGsP72t3aeK7WdcgfANpb/AHYc86Fz0kfzM11tvdqbs6Mz4Ja3bxccIJFXoyAp+NYS9UKpxA7bAQPywQ==", + "requires": { + "@mdi/js": "^7.4.47", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^3.12.2", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@nextcloud/vue": "^9.3.1", + "@types/toastify-js": "^1.12.4", + "@vueuse/core": "^14.1.0", + "cancelable-promise": "^4.3.1", + "p-queue": "^9.0.1", + "toastify-js": "^1.12.0", + "vue": "^3.5.25", + "webdav": "^5.8.0" + }, + "dependencies": { + "@nextcloud/paths": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.1.0.tgz", + "integrity": "sha512-vtFYA/kthaUDzu6KejTOL1OwnOy7/yynq5zdB/UBpYacAWjUX5Ddh4OMWx3rEavkBJ9/QGhrFryNJLjNfe8OQA==" + }, + "@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "requires": { + "@nextcloud/files": "^3.12.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + } + }, + "@vueuse/core": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.2.1.tgz", + "integrity": "sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==", + "requires": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.2.1", + "@vueuse/shared": "14.2.1" + } + }, + "@vueuse/metadata": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.2.1.tgz", + "integrity": "sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==" + }, + "@vueuse/shared": { + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.2.1.tgz", + "integrity": "sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==", + "requires": {} + }, + "eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==" + }, + "p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "requires": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + } + }, + "p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==" + } + } + }, + "@nextcloud/eslint-config": { + "version": "9.0.0-rc.9", + "resolved": "https://registry.npmjs.org/@nextcloud/eslint-config/-/eslint-config-9.0.0-rc.9.tgz", + "integrity": "sha512-YEz7bWv8mXz1QzzTd9qVn9koFn3Qmz97KLBQ2ssCFHVLthaxbVPYtwQOKiQagg2EOCUc+NyP04+Pr6BOzmMEkg==", + "dev": true, + "requires": { + "@eslint/js": "^10.0.1", + "@eslint/json": "^1.2.0", + "@stylistic/eslint-plugin": "^5.10.0", + "eslint-config-flat-gitignore": "^2.3.0", + "eslint-plugin-antfu": "^3.2.2", + "eslint-plugin-jsdoc": "^62.9.0", + "eslint-plugin-perfectionist": "^5.8.0", + "eslint-plugin-vue": "^10.8.0", + "fast-xml-parser": "^5.5.10", + "globals": "^17.4.0", + "semver": "^7.7.4", + "sort-package-json": "^3.6.1", + "typescript-eslint": "^8.58.0" + }, + "dependencies": { + "globals": { + "version": "17.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz", + "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==", + "dev": true + } + } + }, + "@nextcloud/event-bus": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/event-bus/-/event-bus-3.3.3.tgz", + "integrity": "sha512-zIfvKmUGkXpVzRKoXrcO9hkoiKDm65fqNxy/XIbIxrQhZByPq3gDkjBpnu3V5Gs8JdYwa73R8DjzV9oH8HYhIg==", + "requires": { + "@types/semver": "^7.7.0", + "semver": "^7.7.2" + } + }, + "@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "requires": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "dependencies": { + "@nextcloud/paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-3.0.0.tgz", + "integrity": "sha512-+sTfTkIbVUa2Ue3bkz3R7F1mhddvHPOWUxkSNg7Q5dAsimVFBaTRgiBAJmsAag3JPsxyuS8kUgeb0zdEssRdTA==" + }, + "@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "requires": { + "@nextcloud/files": "^3.12.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + } + } + } + }, + "@nextcloud/initial-state": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-3.0.0.tgz", + "integrity": "sha512-cV+HBdkQJGm8FxkBI5rFT/FbMNWNBvpbj6OPrg4Ae4YOOsQ15CL8InPOAw1t4XkOkQK2NEdUGQLVUz/19wXbdQ==" + }, + "@nextcloud/l10n": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@nextcloud/l10n/-/l10n-3.4.1.tgz", + "integrity": "sha512-aTFinTcKiK2gEXwLgutXekpZZ8/v/4QiC8C3QCLH5m0o+WtxsBC+fqV142ebC/rfDnzCLhY4ZtswSu8bFbZocg==", + "requires": { + "@nextcloud/router": "^3.0.1", + "@nextcloud/typings": "^1.9.1", + "@types/escape-html": "^1.0.4", + "dompurify": "^3.2.6", + "escape-html": "^1.0.3" + } + }, + "@nextcloud/logger": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@nextcloud/logger/-/logger-3.0.3.tgz", + "integrity": "sha512-TcbVRL4/O5ffI1RXFmQAFD3gwwT15AAdr1770x+RNqVvfBdoGVyhzOwCIyA5Vfc3fA1iJXFa+rE6buJZSoqlcw==", + "requires": { + "@nextcloud/auth": "^2.5.3" + } + }, + "@nextcloud/paths": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/paths/-/paths-2.4.0.tgz", + "integrity": "sha512-35hykjqzaJCw8pBYWuKbLLw2wyKMuf9+T8K8GoYiS84AIi8SO16nuEu0fyl/gwCuiDqX5tCCup4wqljf0hdvaw==" + }, + "@nextcloud/router": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@nextcloud/router/-/router-3.1.0.tgz", + "integrity": "sha512-e4dkIaxRSwdZJlZFpn9x03QgBn/Sa2hN1hp/BA7+AbzykmSAlKuWfdmX8j/8ewrLpQwYmZR23IZO9XwpJXq2Uw==", + "requires": { + "@nextcloud/typings": "^1.10.0" + } + }, + "@nextcloud/sharing": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.4.0.tgz", + "integrity": "sha512-1hUNyc7uJdBpnimOnEshJjEtAPAjzDYVl6qmWqF5ZxoN9wOvbExw0QjX3xFIbHbX2dmvbRNLBj0RzLzipmZyeg==", + "requires": { + "@nextcloud/files": "^3.12.2 || ^4.0.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + } + }, + "@nextcloud/stylelint-config": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-3.1.1.tgz", + "integrity": "sha512-nvkmeHkifV7MEmtNhkYVQXUgcqldm8pbq2TvKPSpdrXB247Xh6OpFhupDbTAgeEQDDRDneayEVfj6e6Kb9w3sQ==", + "dev": true, + "requires": { + "stylelint-use-logical": "^2.1.2" + } + }, + "@nextcloud/typings": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@nextcloud/typings/-/typings-1.10.0.tgz", + "integrity": "sha512-SMC42rDjOH3SspPTLMZRv76ZliHpj2JJkF8pGLP8l1QrVTZxE47Qz5qeKmbj2VL+dRv2e/NgixlAFmzVnxkhqg==", + "requires": { + "@types/jquery": "3.5.16" + } + }, + "@nextcloud/upload": { + "version": "2.0.0-rc.0", + "resolved": "https://registry.npmjs.org/@nextcloud/upload/-/upload-2.0.0-rc.0.tgz", + "integrity": "sha512-F7g3Zr/7Se7bimcSzpEHXUAfQRUhXV6iOdmjRSVNQTbrhS5q70SKJoFpJRP5j/QGCKycqLyv8YMPNmrtjNFbKw==", + "requires": { + "@nextcloud/auth": "^2.5.1", + "@nextcloud/axios": "^2.5.1", + "@nextcloud/capabilities": "^1.2.0", + "@nextcloud/files": "^3.10.2", + "@nextcloud/l10n": "^3.3.0", + "@nextcloud/logger": "^3.0.2", + "@nextcloud/paths": "^2.2.1", + "@nextcloud/router": "^3.0.0", + "@nextcloud/sharing": "^0.2.4", + "axios": "^1.10.0", + "axios-retry": "^4.5.0", + "crypto-browserify": "^3.12.1", + "p-cancelable": "^4.0.1", + "p-queue": "^8.1.0", + "typescript-event-target": "^1.1.1" + }, + "dependencies": { + "@nextcloud/initial-state": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@nextcloud/initial-state/-/initial-state-2.2.0.tgz", + "integrity": "sha512-cDW98L5KGGgpS8pzd+05304/p80cyu8U2xSDQGa+kGPTpUFmCbv2qnO5WrwwGTauyjYijCal2bmw82VddSH+Pg==" + }, + "@nextcloud/sharing": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.2.5.tgz", + "integrity": "sha512-B3K5Dq9b5dexDA5n3AAuCF69Huwhrpw0J72fsVXV4KpPdImjhVPlExAv5o70AoXa+OqN4Rwn6gqJw+3ED892zg==", + "requires": { + "@nextcloud/initial-state": "^2.2.0" + } + } + } + }, + "@nextcloud/vue": { + "version": "9.3.3", + "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.3.3.tgz", + "integrity": "sha512-M/M4L9vp1AJQ8RRk75mbMwUo7sOwWDaTDmAwgpTa9LARDe5e6UBJoMhOmiz5EPkYRHLn2SLE+baOIXVmtVMdqw==", + "requires": { + "@ckpack/vue-color": "^1.6.0", + "@floating-ui/dom": "^1.7.4", + "@nextcloud/auth": "^2.5.3", + "@nextcloud/axios": "^2.5.2", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "@vuepic/vue-datepicker": "^11.0.3", + "@vueuse/components": "^14.1.0", + "@vueuse/core": "^14.0.0", + "blurhash": "^2.0.5", + "clone": "^2.1.2", + "debounce": "^3.0.0", + "dompurify": "^3.3.1", + "emoji-mart-vue-fast": "^15.0.5", + "escape-html": "^1.0.3", + "floating-vue": "^5.2.2", + "focus-trap": "7.6.6", + "linkifyjs": "^4.3.2", + "p-queue": "^9.1.0", + "rehype-external-links": "^3.0.0", + "rehype-highlight": "^7.0.2", + "rehype-react": "^8.0.0", + "remark-breaks": "^4.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.1.2", + "remark-unlink-protocols": "^1.0.0", + "splitpanes": "^4.0.4", + "striptags": "^3.2.0", + "tabbable": "^6.4.0", + "tributejs": "^5.1.3", + "ts-md5": "^2.0.1", + "unified": "^11.0.5", + "unist-builder": "^4.0.0", + "unist-util-visit": "^5.0.0", + "vue": "^3.5.18", + "vue-router": "^4.6.4", + "vue-select": "^4.0.0-beta.6" + }, + "dependencies": { + "@ckpack/vue-color": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@ckpack/vue-color/-/vue-color-1.6.0.tgz", + "integrity": "sha512-b9kFTKhYbNArfgP1lmnaVm0VNsWdZjqIbyHUYry7mZ+E7JeTQclbjq1+2xWn0SE3wzqRYlXmAVjECPOgteWmMQ==", + "requires": { + "@ctrl/tinycolor": "^3.6.0", + "material-colors": "^1.2.6" + } + }, + "@nextcloud/sharing": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@nextcloud/sharing/-/sharing-0.3.0.tgz", + "integrity": "sha512-kV7qeUZvd1fTKeFyH+W5Qq5rNOqG9rLATZM3U9MBxWXHJs3OxMqYQb8UQ3NYONzsX3zDGJmdQECIGHm1ei2sCA==", + "requires": { + "@nextcloud/files": "^3.12.0", + "@nextcloud/initial-state": "^3.0.0", + "is-svg": "^6.1.0" + } + }, + "@vueuse/components": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-14.1.0.tgz", + "integrity": "sha512-SDRJUAv3H7/PMh+KkYpq0d5KMzpKOfqx4qcV4xyN4mZOLPw8NkiWu+yDcfXwI8h1uCqhRNz2cdeaLa+IuaehFw==", + "requires": { + "@vueuse/core": "14.1.0", + "@vueuse/shared": "14.1.0" + } + }, + "@vueuse/core": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-14.1.0.tgz", + "integrity": "sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==", + "requires": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "14.1.0", + "@vueuse/shared": "14.1.0" + } + }, + "@vueuse/metadata": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-14.1.0.tgz", + "integrity": "sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==" + }, + "@vueuse/shared": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-14.1.0.tgz", + "integrity": "sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==", + "requires": {} + }, + "debounce": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-3.0.0.tgz", + "integrity": "sha512-64byRbF0/AirwbuHqB3/ZpMG9/nckDa6ZA0yd6UnaQNwbbemCOwvz2sL5sjXLHhZHADyiwLm0M5qMhltUUx+TA==", + "requires": {} + }, + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + }, + "floating-vue": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/floating-vue/-/floating-vue-5.2.2.tgz", + "integrity": "sha512-afW+h2CFafo+7Y9Lvw/xsqjaQlKLdJV7h1fCHfcYQ1C4SVMlu7OAekqWgu5d4SgvkBVU0pVpLlVsrSTBURFRkg==", + "requires": { + "@floating-ui/dom": "~1.1.1", + "vue-resize": "^2.0.0-alpha.1" + }, + "dependencies": { + "@floating-ui/dom": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.1.1.tgz", + "integrity": "sha512-TpIO93+DIujg3g7SykEAGZMDtbJRrmnYRCNYSjJlvIbGhBjRSNTLVbNeDQBrzy9qDgUbiWdc7KA0uZHZ2tJmiw==", + "requires": { + "@floating-ui/core": "^1.1.0" + } + } + } + }, + "p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "requires": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + } + }, + "p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==" + }, + "splitpanes": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/splitpanes/-/splitpanes-4.0.4.tgz", + "integrity": "sha512-RbysugZhjbCw5fgplvk3hOXr41stahQDtZhHVkhnnJI6H4wlGDhM2kIpbehy7v92duy9GnMa8zIhHigIV1TWtg==", + "requires": {} + }, + "vue-select": { + "version": "4.0.0-beta.6", + "resolved": "https://registry.npmjs.org/vue-select/-/vue-select-4.0.0-beta.6.tgz", + "integrity": "sha512-K+zrNBSpwMPhAxYLTCl56gaMrWZGgayoWCLqe5rWwkB8aUbAUh7u6sXjIR7v4ckp2WKC7zEEUY27g6h1MRsIHw==", + "requires": {} + } + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "peer": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true + }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "optional": true, + "requires": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "dev": true, + "optional": true + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@polka/url": { + "version": "1.0.0-next.23", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.23.tgz", + "integrity": "sha512-C16M+IYz0rgRhWZdCmK+h58JMv8vijAA61gmz2rspCSwKwzBebpdcsiUmwrtJRdphuY30i6BSLEOP8ppbNLyLg==", + "dev": true + }, + "@redocly/ajv": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/@redocly/ajv/-/ajv-8.11.2.tgz", + "integrity": "sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js-replace": "^1.0.1" + }, + "dependencies": { + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "@redocly/config": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/@redocly/config/-/config-0.22.0.tgz", + "integrity": "sha512-gAy93Ddo01Z3bHuVdPWfCwzgfaYgMdaZPcfL7JZ7hWJoK9V0lXDbigTWkhiPFAaLWzbOJ+kbUQG1+XwIm0KRGQ==", + "dev": true + }, + "@redocly/openapi-core": { + "version": "1.34.11", + "resolved": "https://registry.npmjs.org/@redocly/openapi-core/-/openapi-core-1.34.11.tgz", + "integrity": "sha512-V09ayfnb5GyysmvARbt+voFZAjGcf7hSYxOYxSkCc4fbH/DTfq5YWoec8cflvmHHqyIFbqvmGKmYFzqhr9zxDg==", + "dev": true, + "requires": { + "@redocly/ajv": "8.11.2", + "@redocly/config": "0.22.0", + "colorette": "1.4.0", + "https-proxy-agent": "7.0.6", + "js-levenshtein": "1.1.6", + "js-yaml": "4.1.1", + "minimatch": "5.1.9", + "pluralize": "8.0.0", + "yaml-ast-parser": "0.0.43" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "colorette": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz", + "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==", + "dev": true + }, + "minimatch": { + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@rolldown/pluginutils": { + "version": "1.0.0-rc.13", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.13.tgz", + "integrity": "sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==", + "dev": true + }, + "@rollup/rollup-android-arm-eabi": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.47.1.tgz", + "integrity": "sha512-lTahKRJip0knffA/GTNFJMrToD+CM+JJ+Qt5kjzBK/sFQ0EWqfKW3AYQSlZXN98tX0lx66083U9JYIMioMMK7g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-android-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.47.1.tgz", + "integrity": "sha512-uqxkb3RJLzlBbh/bbNQ4r7YpSZnjgMgyoEOY7Fy6GCbelkDSAzeiogxMG9TfLsBbqmGsdDObo3mzGqa8hps4MA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.47.1.tgz", + "integrity": "sha512-tV6reObmxBDS4DDyLzTDIpymthNlxrLBGAoQx6m2a7eifSNEZdkXQl1PE4ZjCkEDPVgNXSzND/k9AQ3mC4IOEQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-darwin-x64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.47.1.tgz", + "integrity": "sha512-XuJRPTnMk1lwsSnS3vYyVMu4x/+WIw1MMSiqj5C4j3QOWsMzbJEK90zG+SWV1h0B1ABGCQ0UZUjti+TQK35uHQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-arm64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.47.1.tgz", + "integrity": "sha512-79BAm8Ag/tmJ5asCqgOXsb3WY28Rdd5Lxj8ONiQzWzy9LvWORd5qVuOnjlqiWWZJw+dWewEktZb5yiM1DLLaHw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-freebsd-x64": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.47.1.tgz", + "integrity": "sha512-OQ2/ZDGzdOOlyfqBiip0ZX/jVFekzYrGtUsqAfLDbWy0jh1PUU18+jYp8UMpqhly5ltEqotc2miLngf9FPSWIA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.47.1.tgz", + "integrity": "sha512-HZZBXJL1udxlCVvoVadstgiU26seKkHbbAMLg7680gAcMnRNP9SAwTMVet02ANA94kXEI2VhBnXs4e5nf7KG2A==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm-musleabihf": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.47.1.tgz", + "integrity": "sha512-sZ5p2I9UA7T950JmuZ3pgdKA6+RTBr+0FpK427ExW0t7n+QwYOcmDTK/aRlzoBrWyTpJNlS3kacgSlSTUg6P/Q==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.47.1.tgz", + "integrity": "sha512-3hBFoqPyU89Dyf1mQRXCdpc6qC6At3LV6jbbIOZd72jcx7xNk3aAp+EjzAtN6sDlmHFzsDJN5yeUySvorWeRXA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-arm64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.47.1.tgz", + "integrity": "sha512-49J4FnMHfGodJWPw73Ve+/hsPjZgcXQGkmqBGZFvltzBKRS+cvMiWNLadOMXKGnYRhs1ToTGM0sItKISoSGUNA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.47.1.tgz", + "integrity": "sha512-4yYU8p7AneEpQkRX03pbpLmE21z5JNys16F1BZBZg5fP9rIlb0TkeQjn5du5w4agConCCEoYIG57sNxjryHEGg==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-ppc64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.47.1.tgz", + "integrity": "sha512-fAiq+J28l2YMWgC39jz/zPi2jqc0y3GSRo1yyxlBHt6UN0yYgnegHSRPa3pnHS5amT/efXQrm0ug5+aNEu9UuQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.47.1.tgz", + "integrity": "sha512-daoT0PMENNdjVYYU9xec30Y2prb1AbEIbb64sqkcQcSaR0zYuKkoPuhIztfxuqN82KYCKKrj+tQe4Gi7OSm1ow==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-riscv64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.47.1.tgz", + "integrity": "sha512-JNyXaAhWtdzfXu5pUcHAuNwGQKevR+6z/poYQKVW+pLaYOj9G1meYc57/1Xv2u4uTxfu9qEWmNTjv/H/EpAisw==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-s390x-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.47.1.tgz", + "integrity": "sha512-U/CHbqKSwEQyZXjCpY43/GLYcTVKEXeRHw0rMBJP7fP3x6WpYG4LTJWR3ic6TeYKX6ZK7mrhltP4ppolyVhLVQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-gnu": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.47.1.tgz", + "integrity": "sha512-uTLEakjxOTElfeZIGWkC34u2auLHB1AYS6wBjPGI00bWdxdLcCzK5awjs25YXpqB9lS8S0vbO0t9ZcBeNibA7g==", + "dev": true, + "optional": true + }, + "@rollup/rollup-linux-x64-musl": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.47.1.tgz", + "integrity": "sha512-Ft+d/9DXs30BK7CHCTX11FtQGHUdpNDLJW0HHLign4lgMgBcPFN3NkdIXhC5r9iwsMwYreBBc4Rho5ieOmKNVQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-arm64-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.47.1.tgz", + "integrity": "sha512-N9X5WqGYzZnjGAFsKSfYFtAShYjwOmFJoWbLg3dYixZOZqU7hdMq+/xyS14zKLhFhZDhP9VfkzQnsdk0ZDS9IA==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-ia32-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.47.1.tgz", + "integrity": "sha512-O+KcfeCORZADEY8oQJk4HK8wtEOCRE4MdOkb8qGZQNun3jzmj2nmhV/B/ZaaZOkPmJyvm/gW9n0gsB4eRa1eiQ==", + "dev": true, + "optional": true + }, + "@rollup/rollup-win32-x64-msvc": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.47.1.tgz", + "integrity": "sha512-CpKnYa8eHthJa3c+C38v/E+/KZyF1Jdh2Cz3DyKZqEWYgrM1IHFArXNWvBLPQCKUEsAqqKX27tTqVEFbDNUcOA==", + "dev": true, + "optional": true + }, + "@rspack/binding": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding/-/binding-1.7.11.tgz", + "integrity": "sha512-2MGdy2s2HimsDT444Bp5XnALzNRxuBNc7y0JzyuqKbHBywd4x2NeXyhWXXoxufaCFu5PBc9Qq9jyfjW2Aeh06Q==", + "dev": true, + "requires": { + "@rspack/binding-darwin-arm64": "1.7.11", + "@rspack/binding-darwin-x64": "1.7.11", + "@rspack/binding-linux-arm64-gnu": "1.7.11", + "@rspack/binding-linux-arm64-musl": "1.7.11", + "@rspack/binding-linux-x64-gnu": "1.7.11", + "@rspack/binding-linux-x64-musl": "1.7.11", + "@rspack/binding-wasm32-wasi": "1.7.11", + "@rspack/binding-win32-arm64-msvc": "1.7.11", + "@rspack/binding-win32-ia32-msvc": "1.7.11", + "@rspack/binding-win32-x64-msvc": "1.7.11" + } + }, + "@rspack/binding-darwin-arm64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-arm64/-/binding-darwin-arm64-1.7.11.tgz", + "integrity": "sha512-oduECiZVqbO5zlVw+q7Vy65sJFth99fWPTyucwvLJJtJkPL5n17Uiql2cYP6Ijn0pkqtf1SXgK8WjiKLG5bIig==", + "dev": true, + "optional": true + }, + "@rspack/binding-darwin-x64": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-darwin-x64/-/binding-darwin-x64-1.7.11.tgz", + "integrity": "sha512-a1+TtTE9ap6RalgFi7FGIgkJP6O4Vy6ctv+9WGJy53E4kuqHR0RygzaiVxCI/GMc/vBT9vY23hyrpWb3d1vtXA==", + "dev": true, + "optional": true + }, + "@rspack/binding-linux-arm64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.7.11.tgz", + "integrity": "sha512-P0QrGRPbTWu6RKWfN0bDtbnEps3rXH0MWIMreZABoUrVmNQKtXR6e73J3ub6a+di5s2+K0M2LJ9Bh2/H4UsDUA==", + "dev": true, + "optional": true + }, + "@rspack/binding-linux-arm64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.7.11.tgz", + "integrity": "sha512-6ky7R43VMjWwmx3Yx7Jl7faLBBMAgMDt+/bN35RgwjiPgsIByz65EwytUVuW9rikB43BGHvA/eqlnjLrUzNBqw==", + "dev": true, + "optional": true + }, + "@rspack/binding-linux-x64-gnu": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.7.11.tgz", + "integrity": "sha512-cuOJMfCOvb2Wgsry5enXJ3iT1FGUjdPqtGUBVupQlEG4ntSYsQ2PtF4wIDVasR3wdxC5nQbipOrDiN/u6fYsdQ==", + "dev": true, + "optional": true + }, + "@rspack/binding-linux-x64-musl": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-linux-x64-musl/-/binding-linux-x64-musl-1.7.11.tgz", + "integrity": "sha512-CoK37hva4AmHGh3VCsQXmGr40L36m1/AdnN5LEjUX6kx5rEH7/1nEBN6Ii72pejqDVvk9anEROmPDiPw10tpFg==", + "dev": true, + "optional": true + }, + "@rspack/binding-wasm32-wasi": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-wasm32-wasi/-/binding-wasm32-wasi-1.7.11.tgz", + "integrity": "sha512-OtrmnPUVJMxjNa3eDMfHyPdtlLRmmp/aIm0fQHlAOATbZvlGm12q7rhPW5BXTu1yh+1rQ1/uqvz+SzKEZXuJaQ==", + "dev": true, + "optional": true, + "requires": { + "@napi-rs/wasm-runtime": "1.0.7" + } + }, + "@rspack/binding-win32-arm64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.7.11.tgz", + "integrity": "sha512-lObFW6e5lCWNgTBNwT//yiEDbsxm9QG4BYUojqeXxothuzJ/L6ibXz6+gLMvbOvLGV3nKgkXmx8GvT9WDKR0mA==", + "dev": true, + "optional": true + }, + "@rspack/binding-win32-ia32-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-ia32-msvc/-/binding-win32-ia32-msvc-1.7.11.tgz", + "integrity": "sha512-0pYGnZd8PPqNR68zQ8skamqNAXEA1sUfXuAdYcknIIRq2wsbiwFzIc0Pov1cIfHYab37G7sSIPBiOUdOWF5Ivw==", + "dev": true, + "optional": true + }, + "@rspack/binding-win32-x64-msvc": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.7.11.tgz", + "integrity": "sha512-EeQXayoQk/uBkI3pdoXfQBXNIUrADq56L3s/DFyM2pJeUDrWmhfIw2UFIGkYPTMSCo8F2JcdcGM32FGJrSnU0Q==", + "dev": true, + "optional": true + }, + "@rspack/cli": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/cli/-/cli-1.7.11.tgz", + "integrity": "sha512-vUnflkq4F654wTEpCd+L4RYVbet8L2lNqLMmAGIZvoZddlXm4Duvg+eqcFE9iF8plAjFflRcU7DhB7WZa76pwg==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.7", + "@rspack/dev-server": "~1.1.5", + "exit-hook": "^4.0.0", + "webpack-bundle-analyzer": "4.10.2" + } + }, + "@rspack/core": { + "version": "1.7.11", + "resolved": "https://registry.npmjs.org/@rspack/core/-/core-1.7.11.tgz", + "integrity": "sha512-rsD9b+Khmot5DwCMiB3cqTQo53ioPG3M/A7BySu8+0+RS7GCxKm+Z+mtsjtG/vsu4Tn2tcqCdZtA3pgLoJB+ew==", + "dev": true, + "requires": { + "@module-federation/runtime-tools": "0.22.0", + "@rspack/binding": "1.7.11", + "@rspack/lite-tapable": "1.1.0" + } + }, + "@rspack/dev-server": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@rspack/dev-server/-/dev-server-1.1.5.tgz", + "integrity": "sha512-cwz0qc6iqqoJhyWqxP7ZqE2wyYNHkBMQUXxoQ0tNoZ4YNRkDyQ4HVJ/3oPSmMKbvJk/iJ16u7xZmwG6sK47q/A==", + "dev": true, + "requires": { + "chokidar": "^3.6.0", + "http-proxy-middleware": "^2.0.9", + "p-retry": "^6.2.0", + "webpack-dev-server": "5.2.2", + "ws": "^8.18.0" + }, + "dependencies": { + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "@rspack/lite-tapable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rspack/lite-tapable/-/lite-tapable-1.1.0.tgz", + "integrity": "sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==", + "dev": true + }, + "@rspack/plugin-node-polyfill": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/@rspack/plugin-node-polyfill/-/plugin-node-polyfill-0.5.8.tgz", + "integrity": "sha512-rbSkt4tbZmJJ8ltRMj836LydMbQwRuKamnVKKmgLlho777FSdCle6PVQ7VT7Sz89gcJDbNyzX/DfQRTaUL7vDw==", + "dev": true, + "requires": { + "assert": "^2.0.0", + "browserify-fs": "1.0.0", + "browserify-zlib": "^0.2.0", + "buffer": "^6.0.3", + "console-browserify": "^1.2.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.12.0", + "domain-browser": "^4.22.0", + "events": "^3.3.0", + "filter-obj": "^2.0.2", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "^1.0.1", + "process": "^0.11.10", + "punycode": "^2.1.1", + "querystring-es3": "^0.2.1", + "readable-stream": "^4.0.0", + "stream-browserify": "^3.0.0", + "stream-http": "^3.2.0", + "string_decoder": "^1.3.0", + "timers-browserify": "^2.0.12", + "tty-browserify": "^0.0.1", + "url": "^0.11.0", + "util": "^0.12.4", + "vm-browserify": "^1.1.2" + }, + "dependencies": { + "domain-browser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-4.23.0.tgz", + "integrity": "sha512-ArzcM/II1wCCujdCNyQjXrAFwS4mrLh4C7DZWlaI8mdh7h3BfKdNd3bKXITfl2PT9FtfQqaGvhi1vPRQPimjGA==", + "dev": true + }, + "readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "dev": true, + "requires": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + } + } + } + }, + "@sindresorhus/base62": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/base62/-/base62-1.0.0.tgz", + "integrity": "sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==", + "dev": true + }, + "@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "dev": true + } + } + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@total-typescript/ts-reset": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@total-typescript/ts-reset/-/ts-reset-0.6.1.tgz", + "integrity": "sha512-cka47fVSo6lfQDIATYqb/vO1nvFfbPw7uWLayIXIhGETj0wcOOlrlkobOMDNQOFr9QOafegUPq13V2+6vtD7yg==", + "dev": true + }, + "@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "optional": true, + "requires": { + "tslib": "^2.4.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "optional": true + } + } + }, + "@types/body-parser": { + "version": "1.19.6", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", + "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==", + "dev": true, + "requires": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/chai": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.2.tgz", + "integrity": "sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==", + "dev": true, + "requires": { + "@types/deep-eql": "*" + } + }, + "@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "requires": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "requires": { + "@types/ms": "*" + } + }, + "@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true + }, + "@types/escape-html": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/escape-html/-/escape-html-1.0.4.tgz", + "integrity": "sha512-qZ72SFTgUAZ5a7Tj6kf2SHLetiH5S6f8G5frB2SPQ3EyF02kxdyBFf4Tz4banE3xCgGnKgWLt//a6VuYHKYJTg==" + }, + "@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "peer": true + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" + }, + "@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "requires": { + "@types/estree": "*" + } + }, + "@types/express": { + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", + "dev": true, + "requires": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "^1" + } + }, + "@types/express-serve-static-core": { + "version": "4.19.8", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.8.tgz", + "integrity": "sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "requires": { + "@types/unist": "*" + } + }, + "@types/http-errors": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz", + "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==", + "dev": true + }, + "@types/http-proxy": { + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jquery": { + "version": "3.5.16", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.16.tgz", + "integrity": "sha512-bsI7y4ZgeMkmpG9OM710RRzDFp+w4P1RGiIt30C1mSBT+ExCleeh4HObwgArnDFELmRrOpXgSYN9VF1hj+f1lw==", + "requires": { + "@types/sizzle": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/mdast": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.1.tgz", + "integrity": "sha512-IlKct1rUTJ1T81d8OHzyop15kGv9A/ff7Gz7IJgrk6jDb4Udw77pCJ+vq8oxZf4Ghpm+616+i1s/LNg/Vh7d+g==", + "requires": { + "@types/unist": "*" + } + }, + "@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "@types/ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" + }, + "@types/node": { + "version": "24.3.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.0.tgz", + "integrity": "sha512-aPTXCrfwnDLj4VvXrm+UUCQjNEvJgNA8s5F1cvwQU+3KNltTOkBm1j30uNLyqqPNe7gE3KFzImYoZEfLhp4Yow==", + "dev": true, + "requires": { + "undici-types": "~7.10.0" + } + }, + "@types/node-forge": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", + "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/qs": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==", + "dev": true + }, + "@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "@types/retry": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.2.tgz", + "integrity": "sha512-XISRgDJ2Tc5q4TRqvgJtzsRkFYNJzZrhTdtMoGVBttwzzQJkPnS3WWTFc7kuDRoPtPakl+T+OfdEUjYJj7Jbow==", + "dev": true + }, + "@types/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==" + }, + "@types/send": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/serve-static": { + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", + "dev": true, + "requires": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "<1" + }, + "dependencies": { + "@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "dev": true, + "requires": { + "@types/mime": "^1", + "@types/node": "*" + } + } + } + }, + "@types/sizzle": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", + "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + }, + "@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/toastify-js": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/@types/toastify-js/-/toastify-js-1.12.4.tgz", + "integrity": "sha512-zfZHU4tKffPCnZRe7pjv/eFKzTVHozKewFCKaCjZ4gFinKgJRz/t0bkZiMCXJxPhv/ZoeDGNOeRD09R0kQZ/nw==" + }, + "@types/trusted-types": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", + "optional": true + }, + "@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" + }, + "@types/web-bluetooth": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.21.tgz", + "integrity": "sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==" + }, + "@types/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.58.1.tgz", + "integrity": "sha512-eSkwoemjo76bdXl2MYqtxg51HNwUSkWfODUOQ3PaTLZGh9uIWWFZIjyjaJnex7wXDu+TRx+ATsnSxdN9YWfRTQ==", + "dev": true, + "requires": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/type-utils": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "dependencies": { + "ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.58.1.tgz", + "integrity": "sha512-gGkiNMPqerb2cJSVcruigx9eHBlLG14fSdPdqMoOcBfh+vvn4iCq2C8MzUB89PrxOXk0y3GZ1yIWb9aOzL93bw==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3" + } + }, + "@typescript-eslint/project-service": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.58.1.tgz", + "integrity": "sha512-gfQ8fk6cxhtptek+/8ZIqw8YrRW5048Gug8Ts5IYcMLCw18iUgrZAEY/D7s4hkI0FxEfGakKuPK/XUMPzPxi5g==", + "dev": true, + "requires": { + "@typescript-eslint/tsconfig-utils": "^8.58.1", + "@typescript-eslint/types": "^8.58.1", + "debug": "^4.4.3" + } + }, + "@typescript-eslint/scope-manager": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.58.1.tgz", + "integrity": "sha512-TPYUEqJK6avLcEjumWsIuTpuYODTTDAtoMdt8ZZa93uWMTX13Nb8L5leSje1NluammvU+oI3QRr5lLXPgihX3w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1" + } + }, + "@typescript-eslint/tsconfig-utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.58.1.tgz", + "integrity": "sha512-JAr2hOIct2Q+qk3G+8YFfqkqi7sC86uNryT+2i5HzMa2MPjw4qNFvtjnw1IiA1rP7QhNKVe21mSSLaSjwA1Olw==", + "dev": true, + "requires": {} + }, + "@typescript-eslint/type-utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.58.1.tgz", + "integrity": "sha512-HUFxvTJVroT+0rXVJC7eD5zol6ID+Sn5npVPWoFuHGg9Ncq5Q4EYstqR+UOqaNRFXi5TYkpXXkLhoCHe3G0+7w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + } + }, + "@typescript-eslint/types": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.58.1.tgz", + "integrity": "sha512-io/dV5Aw5ezwzfPBBWLoT+5QfVtP8O7q4Kftjn5azJ88bYyp/ZMCsyW1lpKK46EXJcaYMZ1JtYj+s/7TdzmQMw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.58.1.tgz", + "integrity": "sha512-w4w7WR7GHOjqqPnvAYbazq+Y5oS68b9CzasGtnd6jIeOIeKUzYzupGTB2T4LTPSv4d+WPeccbxuneTFHYgAAWg==", + "dev": true, + "requires": { + "@typescript-eslint/project-service": "8.58.1", + "@typescript-eslint/tsconfig-utils": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/visitor-keys": "8.58.1", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + } + }, + "@typescript-eslint/utils": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.58.1.tgz", + "integrity": "sha512-Ln8R0tmWC7pTtLOzgJzYTXSCjJ9rDNHAqTaVONF4FEi2qwce8mD9iSOxOpLFFvWp/wBFlew0mjM1L1ihYWfBdQ==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.58.1", + "@typescript-eslint/types": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.58.1.tgz", + "integrity": "sha512-y+vH7QE8ycjoa0bWciFg7OpFcipUuem1ujhrdLtq1gByKwfbC7bPeKsiny9e0urg93DqwGcHey+bGRKCnF1nZQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "8.58.1", + "eslint-visitor-keys": "^5.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true + } + } + }, + "@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==" + }, + "@vitejs/plugin-vue": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.6.tgz", + "integrity": "sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==", + "dev": true, + "requires": { + "@rolldown/pluginutils": "1.0.0-rc.13" + } + }, + "@vitest/coverage-v8": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-3.2.4.tgz", + "integrity": "sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.3.0", + "@bcoe/v8-coverage": "^1.0.2", + "ast-v8-to-istanbul": "^0.3.3", + "debug": "^4.4.1", + "istanbul-lib-coverage": "^3.2.2", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^5.0.6", + "istanbul-reports": "^3.1.7", + "magic-string": "^0.30.17", + "magicast": "^0.3.5", + "std-env": "^3.9.0", + "test-exclude": "^7.0.1", + "tinyrainbow": "^2.0.0" + } + }, + "@vitest/expect": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.4.tgz", + "integrity": "sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==", + "dev": true, + "requires": { + "@types/chai": "^5.2.2", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" + } + }, + "@vitest/mocker": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.4.tgz", + "integrity": "sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==", + "dev": true, + "requires": { + "@vitest/spy": "3.2.4", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.17" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + } + } + }, + "@vitest/pretty-format": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.4.tgz", + "integrity": "sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==", + "dev": true, + "requires": { + "tinyrainbow": "^2.0.0" + } + }, + "@vitest/runner": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.4.tgz", + "integrity": "sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==", + "dev": true, + "requires": { + "@vitest/utils": "3.2.4", + "pathe": "^2.0.3", + "strip-literal": "^3.0.0" + } + }, + "@vitest/snapshot": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.4.tgz", + "integrity": "sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==", + "dev": true, + "requires": { + "@vitest/pretty-format": "3.2.4", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" + } + }, + "@vitest/spy": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.4.tgz", + "integrity": "sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==", + "dev": true, + "requires": { + "tinyspy": "^4.0.3" + } + }, + "@vitest/utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.4.tgz", + "integrity": "sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==", + "dev": true, + "requires": { + "@vitest/pretty-format": "3.2.4", + "loupe": "^3.1.4", + "tinyrainbow": "^2.0.0" + } + }, + "@volar/language-core": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.28.tgz", + "integrity": "sha512-w4qhIJ8ZSitgLAkVay6AbcnC7gP3glYM3fYwKV3srj8m494E3xtrCv6E+bWviiK/8hs6e6t1ij1s2Endql7vzQ==", + "requires": { + "@volar/source-map": "2.4.28" + } + }, + "@volar/source-map": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.28.tgz", + "integrity": "sha512-yX2BDBqJkRXfKw8my8VarTyjv48QwxdJtvRgUpNE5erCsgEUdI2DsLbpa+rOQVAJYshY99szEcRDmyHbF10ggQ==" + }, + "@volar/typescript": { + "version": "2.4.28", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.28.tgz", + "integrity": "sha512-Ja6yvWrbis2QtN4ClAKreeUZPVYMARDYZl9LMEv1iQ1QdepB6wn0jTRxA9MftYmYa4DQ4k/DaSZpFPUfxl8giw==", + "requires": { + "@volar/language-core": "2.4.28", + "path-browserify": "^1.0.1", + "vscode-uri": "^3.0.8" + } + }, + "@vue-leaflet/vue-leaflet": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@vue-leaflet/vue-leaflet/-/vue-leaflet-0.10.1.tgz", + "integrity": "sha512-RNEDk8TbnwrJl8ujdbKgZRFygLCxd0aBcWLQ05q/pGv4+d0jamE3KXQgQBqGAteE1mbQsk3xoNcqqUgaIGfWVg==", + "requires": { + "vue": "^3.2.25" + } + }, + "@vue/compiler-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.32.tgz", + "integrity": "sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==", + "requires": { + "@babel/parser": "^7.29.2", + "@vue/shared": "3.5.32", + "entities": "^7.0.1", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + }, + "dependencies": { + "entities": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz", + "integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==" + } + } + }, + "@vue/compiler-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.32.tgz", + "integrity": "sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==", + "requires": { + "@vue/compiler-core": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.32.tgz", + "integrity": "sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==", + "requires": { + "@babel/parser": "^7.29.2", + "@vue/compiler-core": "3.5.32", + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.21", + "postcss": "^8.5.8", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.32.tgz", + "integrity": "sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==", + "requires": { + "@vue/compiler-dom": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "@vue/devtools-kit": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.7.tgz", + "integrity": "sha512-wgoZtxcTta65cnZ1Q6MbAfePVFxfM+gq0saaeytoph7nEa7yMXoi6sCPy4ufO111B9msnw0VOWjPEFCXuAKRHA==", + "requires": { + "@vue/devtools-shared": "^7.7.7", + "birpc": "^2.3.0", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.2" + } + }, + "@vue/devtools-shared": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.7.tgz", + "integrity": "sha512-+udSj47aRl5aKb0memBvcUG9koarqnxNM5yjuREvqwK6T3ap4mn3Zqqc17QrBFTqSMjr3HK1cvStEZpMDpfdyw==", + "requires": { + "rfdc": "^1.4.1" + } + }, + "@vue/language-core": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-3.2.7.tgz", + "integrity": "sha512-Gn4q/tRxbpVGLEuARQ43p3YELlNAFgRUVCgW9U5Cr+5q4vfD2bWDWpl3ABbJMXUt5xlE1dF8dkigg2aUq7JYYw==", + "requires": { + "@volar/language-core": "2.4.28", + "@vue/compiler-dom": "^3.5.0", + "@vue/shared": "^3.5.0", + "alien-signals": "^3.1.2", + "muggle-string": "^0.4.1", + "path-browserify": "^1.0.1", + "picomatch": "^4.0.4" + }, + "dependencies": { + "picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==" + } + } + }, + "@vue/reactivity": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.32.tgz", + "integrity": "sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==", + "requires": { + "@vue/shared": "3.5.32" + } + }, + "@vue/runtime-core": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.32.tgz", + "integrity": "sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==", + "requires": { + "@vue/reactivity": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "@vue/runtime-dom": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.32.tgz", + "integrity": "sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==", + "requires": { + "@vue/reactivity": "3.5.32", + "@vue/runtime-core": "3.5.32", + "@vue/shared": "3.5.32", + "csstype": "^3.2.3" + } + }, + "@vue/server-renderer": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.32.tgz", + "integrity": "sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==", + "requires": { + "@vue/compiler-ssr": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "@vue/shared": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.32.tgz", + "integrity": "sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==" + }, + "@vue/test-utils": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", + "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", + "dev": true, + "requires": { + "js-beautify": "^1.14.9", + "vue-component-type-helpers": "^2.0.0" + } + }, + "@vue/tsconfig": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.5.1.tgz", + "integrity": "sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==", + "dev": true + }, + "@vuepic/vue-datepicker": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-11.0.3.tgz", + "integrity": "sha512-sb2adwqwK2PizLQOpxCYps2SwhVT6/ic2HMIOqHJXuYa6iAJZWGL5YVlS7O4aW+sk6ZyxlDURLO7kDZPL4HB/w==", + "requires": { + "date-fns": "^4.1.0" + } + }, + "@vueuse/components": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-13.9.0.tgz", + "integrity": "sha512-0DDFpjG3hEEK+3YgSzE/OzOGqpo/KmxcXWzW2YdmgahZvaoUdegn68GmbdcHRJE7CH55dDj13Cz47iN8QoI3jQ==", + "requires": { + "@vueuse/core": "13.9.0", + "@vueuse/shared": "13.9.0" + } + }, + "@vueuse/core": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-13.9.0.tgz", + "integrity": "sha512-ts3regBQyURfCE2BcytLqzm8+MmLlo5Ln/KLoxDVcsZ2gzIwVNnQpQOL/UKV8alUqjSZOlpFZcRNsLRqj+OzyA==", + "requires": { + "@types/web-bluetooth": "^0.0.21", + "@vueuse/metadata": "13.9.0", + "@vueuse/shared": "13.9.0" + } + }, + "@vueuse/metadata": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-13.9.0.tgz", + "integrity": "sha512-1AFRvuiGphfF7yWixZa0KwjYH8ulyjDCC0aFgrGRz8+P4kvDFSdXLVfTk5xAN9wEuD1J6z4/myMoYbnHoX07zg==" + }, + "@vueuse/router": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-13.9.0.tgz", + "integrity": "sha512-7AYay8Pv/0fC4D0eygbIyZuLyVs+9D7dsnO5D8aqat9qcOz91v/XFWR667WE1+p+OkU0ib+FjQUdnTVBNoIw8g==", + "requires": { + "@vueuse/shared": "13.9.0" + } + }, + "@vueuse/shared": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-13.9.0.tgz", + "integrity": "sha512-e89uuTLMh0U5cZ9iDpEI2senqPGfbPRTHM/0AaQkcxnpqjkZqDYP8rpfm7edOz8s+pOCOROEy1PIveSW8+fL5g==", + "requires": {} + }, + "@webassemblyjs/ast": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "dev": true, + "peer": true, + "requires": { + "@webassemblyjs/ast": "1.12.1", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "abbrev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", + "integrity": "sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dev": true, + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "abstract-leveldown": { + "version": "0.12.4", + "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-0.12.4.tgz", + "integrity": "sha512-TOod9d5RDExo6STLMGa+04HGkl+TlMfbDnTyN93/ETJ9DpQ0DaYLqcMZlbXvdc4W3vVo1Qrl+WhSp8zvDsJ+jA==", + "dev": true, + "requires": { + "xtend": "~3.0.0" + }, + "dependencies": { + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true + } + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "dependencies": { + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + } + } + }, + "acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "dev": true + }, + "acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true + }, + "ajv": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", + "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "alien-signals": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-3.1.2.tgz", + "integrity": "sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==" + }, + "amator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/amator/-/amator-1.1.0.tgz", + "integrity": "sha512-V5+aH8pe+Z3u/UG3L3pG3BaFQGXAyXHVQDroRwjPHdh08bcUEchAVsU1MCuJSCaU5o60wTK6KaE6te5memzgYw==", + "requires": { + "bezier-easing": "^2.0.3" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true + }, + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "peer": true + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + } + } + }, + "assert": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-2.1.0.tgz", + "integrity": "sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true + }, + "ast-v8-to-istanbul": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/ast-v8-to-istanbul/-/ast-v8-to-istanbul-0.3.4.tgz", + "integrity": "sha512-cxrAnZNLBnQwBPByK4CeDaw5sWZtMilJE/Q3iDA0aamgaIVNDF9T6K2/8DfYDZEejZ2jNnDrG9m8MY72HFd0KA==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.29", + "estree-walker": "^3.0.3", + "js-tokens": "^9.0.1" + }, + "dependencies": { + "estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "requires": { + "@types/estree": "^1.0.0" + } + }, + "js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + } + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "peer": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "automation-events": { + "version": "7.1.16", + "resolved": "https://registry.npmjs.org/automation-events/-/automation-events-7.1.16.tgz", + "integrity": "sha512-vAAHG8WO+Cx2PfwmWIAxSD51ZYg+zRam52pzOGVAJOqsqQO6oaPM2k4/cdEF7QQ786FYB8Wzbw//qTWCdyGvzA==", + "requires": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "requires": { + "possible-typed-array-names": "^1.0.0" + } + }, + "axios": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.15.2.tgz", + "integrity": "sha512-wLrXxPtcrPTsNlJmKjkPnNPK2Ihe0hn0wGSaTEiHRPxwjvJwT3hKmXF4dpqxmPO9SoNb2FsYXj/xEo0gHN+D5A==", + "requires": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^2.1.0" + } + }, + "axios-retry": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/axios-retry/-/axios-retry-4.5.0.tgz", + "integrity": "sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==", + "requires": { + "is-retry-allowed": "^2.2.0" + } + }, + "bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base-64": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/base-64/-/base-64-1.0.0.tgz", + "integrity": "sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==" + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "baseline-browser-mapping": { + "version": "2.8.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.19.tgz", + "integrity": "sha512-zoKGUdu6vb2jd3YOq0nnhEDQVbPcHhco3UImJrv5dSkvxTc2pl2WjOPsjZXDwPDSl5eghIMuY3R6J9NDKF3KcQ==", + "dev": true, + "peer": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "bezier-easing": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/bezier-easing/-/bezier-easing-2.1.0.tgz", + "integrity": "sha512-gbIqZ/eslnUFC1tjEvtz0sgx+xTK20wDnYMIA27VA04R7w6xxXQPZDbibjA9DTWZRA2CXtwHykkVzlCaAJAZig==" + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "birpc": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-2.4.0.tgz", + "integrity": "sha512-5IdNxTyhXHv2UlgnPHQ0h+5ypVmkrYHzL8QT+DwFZ//2N/oNV8Ch+BCRmTJ3x6/z9Axo/cXYBc9eprsUVK/Jsg==" + }, + "bl": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-0.8.2.tgz", + "integrity": "sha512-pfqikmByp+lifZCS0p6j6KreV6kNU6Apzpm2nKOk+94cZb/jvle55+JxWiByUQ0Wo/+XnDXEy5MxxKMb6r0VIw==", + "dev": true, + "requires": { + "readable-stream": "~1.0.26" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + } + } + }, + "blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==" + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "body-parser": { + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", + "type-is": "~1.6.18", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "brace-expansion": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", + "dev": true, + "requires": { + "balanced-match": "^4.0.2" + }, + "dependencies": { + "balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "broker-factory": { + "version": "3.1.14", + "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.14.tgz", + "integrity": "sha512-L45k5HMbPIrMid0nTOZ/UPXG/c0aRuQKVrSDFIb1zOkvfiyHgYmIjc3cSiN1KwQIvRDOtKE0tfb3I9EZ3CmpQQ==", + "requires": { + "@babel/runtime": "^7.29.2", + "fast-unique-numbers": "^9.0.27", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "browserify-fs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browserify-fs/-/browserify-fs-1.0.0.tgz", + "integrity": "sha512-8LqHRPuAEKvyTX34R6tsw4bO2ro6j9DmlYBhiYWHRM26Zv2cBw1fJOU0NeUQ0RkXkPn/PFBjhA0dm4AgaBurTg==", + "dev": true, + "requires": { + "level-filesystem": "^1.0.1", + "level-js": "^2.1.3", + "levelup": "^0.18.2" + } + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.3.tgz", + "integrity": "sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==", + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.5", + "hash-base": "~3.0", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.7", + "readable-stream": "^2.3.8", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + } + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.27.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.27.0.tgz", + "integrity": "sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==", + "dev": true, + "peer": true, + "requires": { + "baseline-browser-mapping": "^2.8.19", + "caniuse-lite": "^1.0.30001751", + "electron-to-chromium": "^1.5.238", + "node-releases": "^2.0.26", + "update-browserslist-db": "^1.1.4" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", + "dev": true + }, + "bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "requires": { + "run-applescript": "^7.0.0" + } + }, + "byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/byte-length/-/byte-length-1.0.2.tgz", + "integrity": "sha512-ovBpjmsgd/teRmgcPh23d4gJvxDoXtAzEL9xTfMU8Yc2kqCDb7L9jAG0XHl1nzuGl+h3ebCIF1i62UFyA9V/2Q==" + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true + }, + "cacheable": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.9.0.tgz", + "integrity": "sha512-8D5htMCxPDUULux9gFzv30f04Xo3wCnik0oOxKoRTPIBoqA7HtOcJ87uBhQTs3jCfZZTrUBGsYIZOgE0ZRgMAg==", + "dev": true, + "peer": true, + "requires": { + "hookified": "^1.8.2", + "keyv": "^5.3.3" + }, + "dependencies": { + "keyv": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-5.3.3.tgz", + "integrity": "sha512-Rwu4+nXI9fqcxiEHtbkvoes2X+QfkTRo1TMkPfwzipGsJlJO/z69vqB4FNl9xJ3xCpAcbkvmEabZfPzrwN3+gQ==", + "dev": true, + "peer": true, + "requires": { + "@keyv/serialize": "^1.0.3" + } + } + } + }, + "call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "requires": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + } + }, + "call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + } + }, + "call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + } + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "peer": true + }, + "cancelable-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/cancelable-promise/-/cancelable-promise-4.3.1.tgz", + "integrity": "sha512-A/8PwLk/T7IJDfUdQ68NR24QHa8rIlnN/stiJEBo6dmVUkD4K14LswG0w3VwdeK/o7qOwRUR1k2MhK5Rpy2m7A==" + }, + "caniuse-lite": { + "version": "1.0.30001751", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001751.tgz", + "integrity": "sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==", + "dev": true, + "peer": true + }, + "ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" + }, + "chai": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.2.tgz", + "integrity": "sha512-kx7GHSOBiiIQ+DDgMP6YMtYkb/3Usm2nUYblNEM9P+/OfkuP7OjfoDlq/DCe1OU0GsREUa0rNAxZmzxgO6+jWg==", + "dev": true, + "requires": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + } + }, + "change-case": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true + }, + "character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" + }, + "character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==" + }, + "character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==" + }, + "character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==" + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=" + }, + "check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true + }, + "chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "requires": { + "readdirp": "^4.0.1" + } + }, + "chrome-trace-event": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", + "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "dev": true, + "peer": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "cipher-base": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "peer": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==" + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "dev": true, + "peer": true + }, + "comment-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.6.tgz", + "integrity": "sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", + "integrity": "sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.1.0", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true + }, + "cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", + "dev": true + }, + "copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "requires": { + "is-what": "^4.1.8" + } + }, + "core-js": { + "version": "3.37.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.37.0.tgz", + "integrity": "sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==" + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "peer": true, + "requires": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cropperjs": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/cropperjs/-/cropperjs-1.6.2.tgz", + "integrity": "sha512-nhymn9GdnV3CqiEHJVai54TULFAE3VshJTXSqSJKa8yXAKyBKDWdhHarnlIPrshJ0WMFTGuFvG02YjLXfPiuOA==" + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "dependencies": { + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + } + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=" + }, + "crypto-browserify": { + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.1.tgz", + "integrity": "sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==", + "requires": { + "browserify-cipher": "^1.0.1", + "browserify-sign": "^4.2.3", + "create-ecdh": "^4.0.4", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "diffie-hellman": "^5.0.3", + "hash-base": "~3.0.4", + "inherits": "^2.0.4", + "pbkdf2": "^3.1.2", + "public-encrypt": "^4.0.3", + "randombytes": "^2.1.0", + "randomfill": "^1.0.4" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + } + } + }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "css-functions-list": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", + "dev": true, + "peer": true + }, + "css-loader": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-7.1.4.tgz", + "integrity": "sha512-vv3J9tlOl04WjiMvHQI/9tmIrCxVrj6PFbHemBB1iihpeRbi/I4h033eoFIhwxBBqLhI0KYFS7yvynBFhIZfTw==", + "dev": true, + "requires": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.40", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.6.3" + }, + "dependencies": { + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0" + } + } + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, + "cssstyle": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.6.0.tgz", + "integrity": "sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==", + "dev": true, + "requires": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + } + }, + "csstype": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" + }, + "data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" + }, + "data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dev": true, + "requires": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + } + }, + "date-fns": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz", + "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==" + }, + "debounce": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-2.2.0.tgz", + "integrity": "sha512-Xks6RUDLZFdz8LIdR6q0MTH44k7FikOmnh5xkSjMig6ch45afc8sjTjRQf3P6ax8dMgcQrYO/AR2RGWURrruqw==" + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "requires": { + "ms": "^2.1.3" + } + }, + "decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", + "dev": true + }, + "decode-named-character-reference": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.1.0.tgz", + "integrity": "sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==", + "requires": { + "character-entities": "^2.0.0" + } + }, + "deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true + }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "peer": true + }, + "default-browser": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", + "dev": true, + "requires": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + } + }, + "default-browser-id": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", + "dev": true + }, + "deferred-leveldown": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-0.2.0.tgz", + "integrity": "sha512-+WCbb4+ez/SZ77Sdy1iadagFiVzMB89IKOBhglgnUkVxOxRWmmFsz8UDSNWh4Rhq+3wr/vMFlYj+rdEwWUDdng==", + "dev": true, + "requires": { + "abstract-leveldown": "~0.12.1" + } + }, + "define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true + }, + "define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "requires": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "detect-europe-js": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/detect-europe-js/-/detect-europe-js-0.1.2.tgz", + "integrity": "sha512-lgdERlL3u0aUdHocoouzT10d9I89VVhk0qNRmll7mXdGfJT1/wqZ2ZLA4oJAjeACPY5fT1wsbq2AT+GkuInsow==" + }, + "detect-indent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-7.0.2.tgz", + "integrity": "sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "optional": true + }, + "detect-newline": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-4.0.1.tgz", + "integrity": "sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==", + "dev": true + }, + "detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "requires": { + "dequal": "^2.0.0" + } + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "peer": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "requires": { + "@leichtgewicht/ip-codec": "^2.0.1" + } + }, + "dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "peer": true + } + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "peer": true + }, + "domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "^2.3.0" + } + }, + "dompurify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.1.tgz", + "integrity": "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==", + "requires": { + "@types/trusted-types": "^2.0.7" + } + }, + "domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "peer": true, + "requires": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + } + }, + "dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "requires": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "editorconfig": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", + "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", + "dev": true, + "requires": { + "@one-ini/wasm": "0.1.1", + "commander": "^10.0.0", + "minimatch": "9.0.1", + "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true + }, + "minimatch": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", + "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.239", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.239.tgz", + "integrity": "sha512-1y5w0Zsq39MSPmEjHjbizvhYoTaulVtivpxkp5q5kaPmQtsK6/2nvAzGRxNMS9DoYySp9PkW0MAQDwU1m764mg==", + "dev": true, + "peer": true + }, + "elliptic": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "emoji-mart-vue-fast": { + "version": "15.0.5", + "resolved": "https://registry.npmjs.org/emoji-mart-vue-fast/-/emoji-mart-vue-fast-15.0.5.tgz", + "integrity": "sha512-wnxLor8ggpqshoOPwIc33MdOC3A1XFeDLgUwYLPtNPL8VeAtXJAVrnFq1CN5PeCYAFoLo4IufHQZ9CfHD4IZiw==", + "requires": { + "@babel/runtime": "^7.18.6", + "core-js": "^3.23.5" + } + }, + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==" + }, + "encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "peer": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "entities": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", + "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==" + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "peer": true + }, + "errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "peer": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==" + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, + "es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true + }, + "es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "requires": { + "es-errors": "^1.3.0" + } + }, + "es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "requires": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + } + }, + "esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "peer": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.2.0.tgz", + "integrity": "sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==", + "dev": true, + "peer": true, + "requires": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.4", + "@eslint/config-helpers": "^0.5.4", + "@eslint/core": "^1.2.0", + "@eslint/plugin-kit": "^0.7.0", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "dependencies": { + "@eslint/plugin-kit": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.1.tgz", + "integrity": "sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==", + "dev": true, + "peer": true, + "requires": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + } + }, + "eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "peer": true, + "requires": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "peer": true + }, + "espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "peer": true, + "requires": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "peer": true, + "requires": { + "is-glob": "^4.0.3" + } + } + } + }, + "eslint-config-flat-gitignore": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-2.3.0.tgz", + "integrity": "sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==", + "dev": true, + "requires": { + "@eslint/compat": "^2.0.3" + } + }, + "eslint-plugin-antfu": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-3.2.2.tgz", + "integrity": "sha512-Qzixht2Dmd/pMbb5EnKqw2V8TiWHbotPlsORO8a+IzCLFwE0RxK8a9k4DCTFPzBwyxJzH+0m2Mn8IUGeGQkyUw==", + "dev": true, + "requires": {} + }, + "eslint-plugin-jsdoc": { + "version": "62.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-62.9.0.tgz", + "integrity": "sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==", + "dev": true, + "requires": { + "@es-joy/jsdoccomment": "~0.86.0", + "@es-joy/resolve.exports": "1.2.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.6", + "debug": "^4.4.3", + "escape-string-regexp": "^4.0.0", + "espree": "^11.2.0", + "esquery": "^1.7.0", + "html-entities": "^2.6.0", + "object-deep-merge": "^2.0.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.4", + "spdx-expression-parse": "^4.0.0", + "to-valid-identifier": "^1.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true + }, + "espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", + "dev": true, + "requires": { + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" + } + } + } + }, + "eslint-plugin-perfectionist": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-5.8.0.tgz", + "integrity": "sha512-k8uIptWIxkUclonCFGyDzgYs9NI+Qh0a7cUXS3L7IYZDEsjXuimFBVbxXPQQngWqMiaxJRwbtYB4smMGMqF+cw==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "^8.58.0", + "natural-orderby": "^5.0.0" + } + }, + "eslint-plugin-vue": { + "version": "10.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-10.8.0.tgz", + "integrity": "sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^7.1.0", + "semver": "^7.6.3", + "xml-name-validator": "^4.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true + }, + "espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "requires": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + } + }, + "esquery": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "peer": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true + }, + "estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "peer": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "exit-hook": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-4.0.0.tgz", + "integrity": "sha512-Fqs7ChZm72y40wKjOFXBKg7nJZvQJmewP5/7LtePDdnah/+FH9Hp5sgMujSCMPXlxOAW2//1jrW9pnsY7o20vQ==", + "dev": true + }, + "expect-type": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz", + "integrity": "sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==", + "dev": true + }, + "express": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", + "content-type": "~1.0.4", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "~0.1.12", + "proxy-addr": "~2.0.7", + "qs": "~6.14.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "~0.19.0", + "serve-static": "~1.16.2", + "setprototypeof": "1.2.0", + "statuses": "~2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extendable-media-recorder": { + "version": "9.2.37", + "resolved": "https://registry.npmjs.org/extendable-media-recorder/-/extendable-media-recorder-9.2.37.tgz", + "integrity": "sha512-/fGfj/6S+3RZmGrRBi9RsGewySYW/2iN7rH3wAmUboAonTsP+YEENjKOo3j5A1LX0yW+yysLt1IeSvAz7Rjdpg==", + "requires": { + "@babel/runtime": "^7.29.2", + "media-encoder-host": "^9.0.28", + "multi-buffer-data-view": "^6.0.27", + "recorder-audio-worklet": "^6.0.58", + "standardized-audio-context": "^25.3.77", + "subscribable-things": "^2.1.59", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "extendable-media-recorder-wav-encoder": { + "version": "7.0.137", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder/-/extendable-media-recorder-wav-encoder-7.0.137.tgz", + "integrity": "sha512-2g1x46TOLlkleoh4H2AwlFrGb/FDb52mKlTuUjvU7ta948QsnxWSuKURshREEmhcP05YZVzE6xTTBTLTaplYiA==", + "requires": { + "@babel/runtime": "^7.29.2", + "extendable-media-recorder-wav-encoder-broker": "^7.0.126", + "extendable-media-recorder-wav-encoder-worker": "^8.0.122", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "extendable-media-recorder-wav-encoder-broker": { + "version": "7.0.126", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-broker/-/extendable-media-recorder-wav-encoder-broker-7.0.126.tgz", + "integrity": "sha512-uGh/5BWQXt2NBZfGxTnlbhJVyfthKM5QVFen+cgEgYOfTUYW8S7gn7DQiy2Gkxb6TN9xLBdqHki/9gyl64zxWw==", + "requires": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "extendable-media-recorder-wav-encoder-worker": "^8.0.122", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "extendable-media-recorder-wav-encoder-worker": { + "version": "8.0.122", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-worker/-/extendable-media-recorder-wav-encoder-worker-8.0.122.tgz", + "integrity": "sha512-9yQoNyTzj/9m0rPh+rqoUo2WU+br2CuyiToQgNuh01cmqEDkcI5piXJv30U99Q65oSB7dnM0Wj89oxQwiOsSTg==", + "requires": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "peer": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "peer": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "peer": true + }, + "fast-unique-numbers": { + "version": "9.0.27", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-9.0.27.tgz", + "integrity": "sha512-nDA9ADeINN8SA2u2wCtU+siWFTTDqQR37XvgPIDDmboWQeExz7X0mImxuaN+kJddliIqy2FpVRmnvRZ+j8i1/A==", + "requires": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true + }, + "fast-xml-builder": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.4.tgz", + "integrity": "sha512-f2jhpN4Eccy0/Uz9csxh3Nu6q4ErKxf0XIsasomfOihuSUa3/xw6w8dnOtCDgEItQFJG8KyXPzQXzcODDrrbOg==", + "requires": { + "path-expression-matcher": "^1.1.3" + } + }, + "fast-xml-parser": { + "version": "5.5.11", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.11.tgz", + "integrity": "sha512-QL0eb0YbSTVWF6tTf1+LEMSgtCEjBYPpnAjoLC8SscESlAjXEIRJ7cHtLG0pLeDFaZLa4VKZLArtA/60ZS7vyA==", + "requires": { + "fast-xml-builder": "^1.1.4", + "path-expression-matcher": "^1.4.0", + "strnum": "^2.2.3" + } + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "peer": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "peer": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "requires": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + } + }, + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "peer": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-2.0.2.tgz", + "integrity": "sha512-lO3ttPjHZRfjMcxWKb1j1eDhTFsu4meeR3lnMcnBFhk6RuLhvEiuALu2TlfL310ph4lCYYwgF/ElIjdP739tdg==", + "dev": true + }, + "finalhandler": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "~2.4.1", + "parseurl": "~1.3.3", + "statuses": "~2.0.2", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "peer": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "peer": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } + }, + "flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "peer": true + }, + "focus-trap": { + "version": "7.6.6", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.6.tgz", + "integrity": "sha512-v/Z8bvMCajtx4mEXmOo7QEsIzlIOqRXTIwgUfsFOF9gEsespdbD0AkPIka1bSXZ8Y8oZ+2IVDQZePkTfEHZl7Q==", + "requires": { + "tabbable": "^6.3.0" + } + }, + "follow-redirects": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==" + }, + "for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "requires": { + "is-callable": "^1.2.7" + } + }, + "foreach": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.6.tgz", + "integrity": "sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==", + "dev": true + }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + } + } + }, + "form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + } + }, + "formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "requires": { + "fetch-blob": "^3.1.2" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "fwd-stream": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fwd-stream/-/fwd-stream-1.0.4.tgz", + "integrity": "sha512-q2qaK2B38W07wfPSQDKMiKOD5Nzv2XyuvQlrmh1q0pxyHNanKHq8lwQ6n9zHucAwA5EbzRJKEgds2orn88rYTg==", + "dev": true, + "requires": { + "readable-stream": "~1.0.26-4" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + } + } + }, + "get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "requires": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + } + }, + "get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "requires": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + } + }, + "git-hooks-list": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/git-hooks-list/-/git-hooks-list-4.2.1.tgz", + "integrity": "sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==", + "dev": true + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "peer": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "peer": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.5.0.tgz", + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==", + "dev": true + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "peer": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "peer": true + }, + "gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==" + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "hark": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/hark/-/hark-1.2.3.tgz", + "integrity": "sha512-u68vz9SCa38ESiFJSDjqK8XbXqWzyot7Cj6Y2b6jk2NJ+II3MY2dIrLMg/kjtIAun4Y1DHF/20hfx4rq1G5GMg==", + "requires": { + "wildemitter": "^1.2.0" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==" + }, + "has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "requires": { + "has-symbols": "^1.0.3" + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, + "hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "requires": { + "@types/hast": "^3.0.0" + } + }, + "hast-util-to-jsx-runtime": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", + "requires": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-js": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + } + }, + "hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "requires": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + } + }, + "hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "requires": { + "@types/hast": "^3.0.0" + } + }, + "highlight.js": { + "version": "11.11.1", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.11.1.tgz", + "integrity": "sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==" + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + }, + "hookified": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/hookified/-/hookified-1.9.0.tgz", + "integrity": "sha512-2yEEGqphImtKIe1NXWEhu6yD3hlFR4Mxk4Mtp3XEyScpSt4pQ4ymmXA1zzxZpj99QkFK+nN0nzjeb2+RUi/6CQ==", + "dev": true, + "peer": true + }, + "hot-patcher": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/hot-patcher/-/hot-patcher-2.0.1.tgz", + "integrity": "sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dev": true, + "requires": { + "whatwg-encoding": "^3.1.1" + } + }, + "html-entities": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.6.0.tgz", + "integrity": "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==", + "dev": true + }, + "html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "peer": true + }, + "htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "peer": true, + "requires": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + }, + "dependencies": { + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "peer": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "dev": true, + "requires": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + } + }, + "http-parser-js": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.10.tgz", + "integrity": "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + } + }, + "http-proxy-middleware": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", + "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "dev": true, + "requires": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", + "dev": true + }, + "https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "requires": { + "agent-base": "^7.1.2", + "debug": "4" + } + }, + "hyperdyperid": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hyperdyperid/-/hyperdyperid-1.2.0.tgz", + "integrity": "sha512-Y93lCzHYgGWdrJ66yIktxiaGULYc6oGiABxhcO5AufBeOyoIdZF7bIfLaOrbM0iGIOXQQgxxRrFEnb+Y6w1n4A==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "requires": {} + }, + "idb-wrapper": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/idb-wrapper/-/idb-wrapper-1.7.2.tgz", + "integrity": "sha512-zfNREywMuf0NzDo9mVsL0yegjsirJxHpKHvWcyRozIqQy89g0a3U+oBPOCN4cc0oCiOuYgZHimzaW/R46G1Mpg==", + "dev": true + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true + }, + "ignore": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, + "peer": true + }, + "immutable": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", + "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "peer": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "peer": true + }, + "index-to-position": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/index-to-position/-/index-to-position-1.1.0.tgz", + "integrity": "sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==", + "dev": true + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha512-i0G7hLJ1z0DE8dsqJa2rycj9dBmNKgXBvotXtZYXakU9oivfB9Uj2ZBC27qqef2U58/ZLwalxa1X/RDCdkHtVg==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==" + }, + "ipaddr.js": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.3.0.tgz", + "integrity": "sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==", + "dev": true + }, + "is": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/is/-/is-0.2.7.tgz", + "integrity": "sha512-ajQCouIvkcSnl2iRdK70Jug9mohIHVX9uKpoWnl115ov0R5mzBvRrXxrnHbsA+8AdwCwc/sfw7HXmd4I5EJBdQ==", + "dev": true + }, + "is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==" + }, + "is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==" + }, + "is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "requires": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + } + }, + "is-arguments": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", + "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==" + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true, + "peer": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" + }, + "is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==" + }, + "is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-generator-function": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.9.tgz", + "integrity": "sha512-ZJ34p1uvIfptHCN7sFTjGibB9/oBg17sHqzDLfuwhvmN/qLVvIQXRQ8licZQ35WJ8KuEQt/etnnzQFI9C9Ue/A==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==" + }, + "is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "requires": { + "is-docker": "^3.0.0" + } + }, + "is-nan": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-nan/-/is-nan-1.3.2.tgz", + "integrity": "sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + } + }, + "is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-object": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-0.1.2.tgz", + "integrity": "sha512-GkfZZlIZtpkFrqyAXPQSRBMsaHAw+CgoKe2HXAkjd/sfoI9+hS8PT4wg2rJxdQyUKr7N2vHJbg7/jQtE5l5vBQ==", + "dev": true + }, + "is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true + }, + "is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", + "dev": true + }, + "is-retry-allowed": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-2.2.0.tgz", + "integrity": "sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==" + }, + "is-standalone-pwa": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-standalone-pwa/-/is-standalone-pwa-0.1.1.tgz", + "integrity": "sha512-9Cbovsa52vNQCjdXOzeQq5CnCbAcRk05aU62K20WO372NrTv0NxibLFCK6lQ4/iZEFdEA3p3t2VNOn8AJ53F5g==" + }, + "is-svg": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-6.1.0.tgz", + "integrity": "sha512-i7YPdvYuSCYcaLQrKwt8cvKTlwHcdA6Hp8N9SO3Q5jIzo8x6kH3N47W0BvPP7NdxVBmIHx7X9DK36czYYW7lHg==", + "requires": { + "@file-type/xml": "^0.4.3" + } + }, + "is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "requires": { + "which-typed-array": "^1.1.16" + } + }, + "is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==" + }, + "is-wsl": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", + "dev": true, + "requires": { + "is-inside-container": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "isbuffer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/isbuffer/-/isbuffer-0.0.0.tgz", + "integrity": "sha512-xU+NoHp+YtKQkaM2HsQchYn0sltxMxew0HavMfHbjnucBoTSGbw745tL+Z7QBANleWM1eEQMenEpi174mIeS4g==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true + }, + "istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "requires": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + } + }, + "istanbul-lib-source-maps": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", + "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.23", + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0" + } + }, + "istanbul-reports": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.2.0.tgz", + "integrity": "sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==", + "dev": true, + "requires": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + } + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "dependencies": { + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-beautify": { + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.15.4.tgz", + "integrity": "sha512-9/KXeZUKKJwqCXUdBxFJ3vPh467OCckSBmYDwSK/EtV090K+iMJ7zx2S3HLVDIWFQdqMIsZWbnaGiba18aWhaA==", + "dev": true, + "requires": { + "config-chain": "^1.1.13", + "editorconfig": "^1.0.4", + "glob": "^10.4.2", + "js-cookie": "^3.0.5", + "nopt": "^7.2.1" + } + }, + "js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "dev": true + }, + "js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "jsdoc-type-pratt-parser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-7.2.0.tgz", + "integrity": "sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==", + "dev": true + }, + "jsdom": { + "version": "26.1.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.1.0.tgz", + "integrity": "sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==", + "dev": true, + "requires": { + "cssstyle": "^4.2.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.5.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.6", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^5.1.1", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.1.1", + "ws": "^8.18.0", + "xml-name-validator": "^5.0.0" + }, + "dependencies": { + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + }, + "xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true + } + } + }, + "json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "peer": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "peer": true + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "peer": true + }, + "keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "peer": true, + "requires": { + "json-buffer": "3.0.1" + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "peer": true + }, + "known-css-properties": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz", + "integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==", + "dev": true, + "peer": true + }, + "launch-editor": { + "version": "2.13.2", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.13.2.tgz", + "integrity": "sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==", + "dev": true, + "requires": { + "picocolors": "^1.1.1", + "shell-quote": "^1.8.3" + } + }, + "layerr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/layerr/-/layerr-3.0.0.tgz", + "integrity": "sha512-tv754Ki2dXpPVApOrjTyRo4/QegVb9eVFq4mjqp4+NM5NaX7syQvN5BBNfV/ZpAHCEHV24XdUVrBAoka4jt3pA==" + }, + "leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, + "leaflet-defaulticon-compatibility": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/leaflet-defaulticon-compatibility/-/leaflet-defaulticon-compatibility-0.1.2.tgz", + "integrity": "sha512-IrKagWxkTwzxUkFIumy/Zmo3ksjuAu3zEadtOuJcKzuXaD76Gwvg2Z1mLyx7y52ykOzM8rAH5ChBs4DnfdGa6Q==" + }, + "level-blobs": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/level-blobs/-/level-blobs-0.1.7.tgz", + "integrity": "sha512-n0iYYCGozLd36m/Pzm206+brIgXP8mxPZazZ6ZvgKr+8YwOZ8/PPpYC5zMUu2qFygRN8RO6WC/HH3XWMW7RMVg==", + "dev": true, + "requires": { + "level-peek": "1.0.6", + "once": "^1.3.0", + "readable-stream": "^1.0.26-4" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + } + } + }, + "level-filesystem": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/level-filesystem/-/level-filesystem-1.2.0.tgz", + "integrity": "sha512-PhXDuCNYpngpxp3jwMT9AYBMgOvB6zxj3DeuIywNKmZqFj2djj9XfT2XDVslfqmo0Ip79cAd3SBy3FsfOZPJ1g==", + "dev": true, + "requires": { + "concat-stream": "^1.4.4", + "errno": "^0.1.1", + "fwd-stream": "^1.0.4", + "level-blobs": "^0.1.7", + "level-peek": "^1.0.6", + "level-sublevel": "^5.2.0", + "octal": "^1.0.0", + "once": "^1.3.0", + "xtend": "^2.2.0" + }, + "dependencies": { + "xtend": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.2.0.tgz", + "integrity": "sha512-SLt5uylT+4aoXxXuwtQp5ZnMMzhDb1Xkg4pEqc00WUJCQifPfV9Ub1VrNhp9kXkrjZD2I2Hl8WnjP37jzZLPZw==", + "dev": true + } + } + }, + "level-fix-range": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-1.0.2.tgz", + "integrity": "sha512-9llaVn6uqBiSlBP+wKiIEoBa01FwEISFgHSZiyec2S0KpyLUkGR4afW/FCZ/X8y+QJvzS0u4PGOlZDdh1/1avQ==", + "dev": true + }, + "level-hooks": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/level-hooks/-/level-hooks-4.5.0.tgz", + "integrity": "sha512-fxLNny/vL/G4PnkLhWsbHnEaRi+A/k8r5EH/M77npZwYL62RHi2fV0S824z3QdpAk6VTgisJwIRywzBHLK4ZVA==", + "dev": true, + "requires": { + "string-range": "~1.2" + } + }, + "level-js": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/level-js/-/level-js-2.2.4.tgz", + "integrity": "sha512-lZtjt4ZwHE00UMC1vAb271p9qzg8vKlnDeXfIesH3zL0KxhHRDjClQLGLWhyR0nK4XARnd4wc/9eD1ffd4PshQ==", + "dev": true, + "requires": { + "abstract-leveldown": "~0.12.0", + "idb-wrapper": "^1.5.0", + "isbuffer": "~0.0.0", + "ltgt": "^2.1.2", + "typedarray-to-buffer": "~1.0.0", + "xtend": "~2.1.2" + }, + "dependencies": { + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", + "dev": true, + "requires": { + "object-keys": "~0.4.0" + } + } + } + }, + "level-peek": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/level-peek/-/level-peek-1.0.6.tgz", + "integrity": "sha512-TKEzH5TxROTjQxWMczt9sizVgnmJ4F3hotBI48xCTYvOKd/4gA/uY0XjKkhJFo6BMic8Tqjf6jFMLWeg3MAbqQ==", + "dev": true, + "requires": { + "level-fix-range": "~1.0.2" + } + }, + "level-sublevel": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/level-sublevel/-/level-sublevel-5.2.3.tgz", + "integrity": "sha512-tO8jrFp+QZYrxx/Gnmjawuh1UBiifpvKNAcm4KCogesWr1Nm2+ckARitf+Oo7xg4OHqMW76eAqQ204BoIlscjA==", + "dev": true, + "requires": { + "level-fix-range": "2.0", + "level-hooks": ">=4.4.0 <5", + "string-range": "~1.2.1", + "xtend": "~2.0.4" + }, + "dependencies": { + "clone": { + "version": "0.1.19", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.1.19.tgz", + "integrity": "sha512-IO78I0y6JcSpEPHzK4obKdsL7E7oLdRVDVOLwr2Hkbjsb+Eoz0dxW6tef0WizoKu0gLC4oZSZuEF4U2K6w1WQw==", + "dev": true + }, + "level-fix-range": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/level-fix-range/-/level-fix-range-2.0.0.tgz", + "integrity": "sha512-WrLfGWgwWbYPrHsYzJau+5+te89dUbENBg3/lsxOs4p2tYOhCHjbgXxBAj4DFqp3k/XBwitcRXoCh8RoCogASA==", + "dev": true, + "requires": { + "clone": "~0.1.9" + } + }, + "object-keys": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.2.0.tgz", + "integrity": "sha512-XODjdR2pBh/1qrjPcbSeSgEtKbYo7LqYNq64/TPuCf7j9SfDD3i21yatKoIy39yIWNvVM59iutfQQpCv1RfFzA==", + "dev": true, + "requires": { + "foreach": "~2.0.1", + "indexof": "~0.0.1", + "is": "~0.2.6" + } + }, + "xtend": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.0.6.tgz", + "integrity": "sha512-fOZg4ECOlrMl+A6Msr7EIFcON1L26mb4NY5rurSkOex/TWhazOrg6eXD/B0XkuiYcYhQDWLXzQxLMVJ7LXwokg==", + "dev": true, + "requires": { + "is-object": "~0.1.2", + "object-keys": "~0.2.0" + } + } + } + }, + "levelup": { + "version": "0.18.6", + "resolved": "https://registry.npmjs.org/levelup/-/levelup-0.18.6.tgz", + "integrity": "sha512-uB0auyRqIVXx+hrpIUtol4VAPhLRcnxcOsd2i2m6rbFIDarO5dnrupLOStYYpEcu8ZT087Z9HEuYw1wjr6RL6Q==", + "dev": true, + "requires": { + "bl": "~0.8.1", + "deferred-leveldown": "~0.2.0", + "errno": "~0.1.1", + "prr": "~0.0.0", + "readable-stream": "~1.0.26", + "semver": "~2.3.1", + "xtend": "~3.0.0" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "prr": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/prr/-/prr-0.0.0.tgz", + "integrity": "sha512-LmUECmrW7RVj6mDWKjTXfKug7TFGdiz9P18HMcO4RHL+RW7MCOGNvpj5j47Rnp6ne6r4fZ2VzyUWEpKbg+tsjQ==", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "semver": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-2.3.2.tgz", + "integrity": "sha512-abLdIKCosKfpnmhS52NCTjO4RiLspDfsn37prjzGrp9im5DPJOgh82Os92vtwGh6XdQryKI/7SREZnV+aqiXrA==", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "xtend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-3.0.0.tgz", + "integrity": "sha512-sp/sT9OALMjRW1fKDlPeuSZlDQpkqReA0pyJukniWbTGoEKefHxhGJynE3PNhUMlcM8qWIjPwecwCw4LArS5Eg==", + "dev": true + } + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "libphonenumber-js": { + "version": "1.12.41", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.12.41.tgz", + "integrity": "sha512-lsmMmGXBxXIK/VMLEj0kL6MtUs1kBGj1nTCzi6zgQoG1DEwqwt2DQyHxcLykceIxAnfE3hya7NuIh6PpC6S3fA==" + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true, + "peer": true + }, + "linkifyjs": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/linkifyjs/-/linkifyjs-4.3.2.tgz", + "integrity": "sha512-NT1CJtq3hHIreOianA8aSXn6Cw0JzYOuDQbOrSPe7gqFnCpKP++MQe3ODgO3oh2GJFORkAAdqredOa60z63GbA==" + }, + "loader-runner": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "dev": true, + "peer": true + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "peer": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "lodash": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==" + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "peer": true + }, + "longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" + }, + "loupe": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz", + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==", + "dev": true + }, + "lowlight": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lowlight/-/lowlight-3.3.0.tgz", + "integrity": "sha512-0JNhgFoPvP6U6lE/UdVsSq99tn6DhjjpAj5MxG49ewd2mOBVtwWYIT8ClyABhq198aXXODMU6Ox8DrGy/CpTZQ==", + "requires": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "highlight.js": "~11.11.0" + } + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "ltgt": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", + "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", + "dev": true + }, + "magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "magicast": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.5.tgz", + "integrity": "sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.25.4", + "@babel/types": "^7.25.4", + "source-map-js": "^1.2.0" + } + }, + "make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==" + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "peer": true + }, + "md5": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "requires": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-squeeze-paragraphs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/mdast-squeeze-paragraphs/-/mdast-squeeze-paragraphs-6.0.0.tgz", + "integrity": "sha512-6NDbJPTg0M0Ye+TlYwX1KJ1LFbp515P2immRJyJQhc9Na9cetHzSoHNYIQcXpANEAP1sm9yd/CTZU2uHqR5A+w==", + "requires": { + "@types/mdast": "^4.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "requires": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" + } + } + }, + "mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + } + }, + "mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + } + }, + "mdast-util-mdx-jsx": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.2.0.tgz", + "integrity": "sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + } + }, + "mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "requires": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + } + }, + "mdast-util-newline-to-break": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-newline-to-break/-/mdast-util-newline-to-break-2.0.0.tgz", + "integrity": "sha512-MbgeFca0hLYIEx/2zGsszCSEJJ1JSCdiY5xQxRcLDDGa8EPvlLPupJ4DSajbMPAnC0je8jfb9TiUATnxxrHUog==", + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-find-and-replace": "^3.0.0" + } + }, + "mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "requires": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + } + }, + "mdast-util-to-hast": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.0.2.tgz", + "integrity": "sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==", + "requires": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "requires": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + } + }, + "mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "requires": { + "@types/mdast": "^4.0.0" + } + }, + "media-encoder-host": { + "version": "9.0.28", + "resolved": "https://registry.npmjs.org/media-encoder-host/-/media-encoder-host-9.0.28.tgz", + "integrity": "sha512-U5F+VLrGkGAM1XRGTMrms4Ghg/ZvWUUBUX15QMENzIFYF/Zn7Mo71LSr4cNiOrfuF8sxYtmdnyHWOitrvOytTQ==", + "requires": { + "@babel/runtime": "^7.29.2", + "media-encoder-host-broker": "^8.0.26", + "media-encoder-host-worker": "^10.0.26", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "media-encoder-host-broker": { + "version": "8.0.26", + "resolved": "https://registry.npmjs.org/media-encoder-host-broker/-/media-encoder-host-broker-8.0.26.tgz", + "integrity": "sha512-dAPslrM8VQQQh4fNA8VgWIJD1TTgtoNF28icYmzukOTnbWfLYjq+1rsBxxbwE90fdAj5UDcP2kw73pFgMWRogA==", + "requires": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "fast-unique-numbers": "^9.0.27", + "media-encoder-host-worker": "^10.0.26", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "media-encoder-host-worker": { + "version": "10.0.26", + "resolved": "https://registry.npmjs.org/media-encoder-host-worker/-/media-encoder-host-worker-10.0.26.tgz", + "integrity": "sha512-zDQs74toYGnZzXpATIKuvOpt7nxGUEjdTezj1ntnJBfMIhN221qYouVsweSwhlPOF5FxarTPGuRnd7F360aOGg==", + "requires": { + "@babel/runtime": "^7.29.2", + "extendable-media-recorder-wav-encoder-broker": "^7.0.126", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "memfs": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.57.1.tgz", + "integrity": "sha512-WvzrWPwMQT+PtbX2Et64R4qXKK0fj/8pO85MrUCzymX3twwCiJCdvntW3HdhG1teLJcHDDLIKx5+c3HckWYZtQ==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-to-fsa": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "@jsonjoy.com/json-pack": "^1.11.0", + "@jsonjoy.com/util": "^1.9.0", + "glob-to-regex.js": "^1.0.1", + "thingies": "^2.5.0", + "tree-dump": "^1.0.3", + "tslib": "^2.0.0" + }, + "dependencies": { + "@jsonjoy.com/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/buffers": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/codegen": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-1.0.0.tgz", + "integrity": "sha512-E8Oy+08cmCf0EK/NMxpaJZmOxPqM+6iSe2S4nlSBrPZOORoDJILxtbSUEDKQyTamm/BVAhIGllOBNU79/dwf0g==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/fs-core": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.57.1.tgz", + "integrity": "sha512-YrEi/ZPmgc+GfdO0esBF04qv8boK9Dg9WpRQw/+vM8Qt3nnVIJWIa8HwZ/LXVZ0DB11XUROM8El/7yYTJX+WtA==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.57.1.tgz", + "integrity": "sha512-ooEPvSW/HQDivPDPZMibHGKZf/QS4WRir1czGZmXmp3MsQqLECZEpN0JobrD8iV9BzsuwdIv+PxtWX9WpPLsIA==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-node": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.57.1.tgz", + "integrity": "sha512-3YaKhP8gXEKN+2O49GLNfNb5l2gbnCFHyAaybbA2JkkbQP3dpdef7WcUaHAulg/c5Dg4VncHsA3NWAUSZMR5KQ==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-core": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/fs-print": "4.57.1", + "@jsonjoy.com/fs-snapshot": "4.57.1", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" + } + }, + "@jsonjoy.com/fs-node-builtins": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.57.1.tgz", + "integrity": "sha512-XHkFKQ5GSH3uxm8c3ZYXVrexGdscpWKIcMWKFQpMpMJc8gA3AwOMBJXJlgpdJqmrhPyQXxaY9nbkNeYpacC0Og==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/fs-node-to-fsa": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.57.1.tgz", + "integrity": "sha512-pqGHyWWzNck4jRfaGV39hkqpY5QjRUQ/nRbNT7FYbBa0xf4bDG+TE1Gt2KWZrSkrkZZDE3qZUjYMbjwSliX6pg==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-fsa": "4.57.1", + "@jsonjoy.com/fs-node-builtins": "4.57.1", + "@jsonjoy.com/fs-node-utils": "4.57.1" + } + }, + "@jsonjoy.com/fs-node-utils": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.57.1.tgz", + "integrity": "sha512-vp+7ZzIB8v43G+GLXTS4oDUSQmhAsRz532QmmWBbdYA20s465JvwhkSFvX9cVTqRRAQg+vZ7zWDaIEh0lFe2gw==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-builtins": "4.57.1" + } + }, + "@jsonjoy.com/fs-print": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.57.1.tgz", + "integrity": "sha512-Ynct7ZJmfk6qoXDOKfpovNA36ITUx8rChLmRQtW08J73VOiuNsU8PB6d/Xs7fxJC2ohWR3a5AqyjmLojfrw5yw==", + "dev": true, + "requires": { + "@jsonjoy.com/fs-node-utils": "4.57.1", + "tree-dump": "^1.1.0" + } + }, + "@jsonjoy.com/fs-snapshot": { + "version": "4.57.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.57.1.tgz", + "integrity": "sha512-/oG8xBNFMbDXTq9J7vepSA1kerS5vpgd3p5QZSPd+nX59uwodGJftI51gDYyHRpP57P3WCQf7LHtBYPqwUg2Bg==", + "dev": true, + "requires": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.57.1", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "dependencies": { + "@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "dev": true, + "requires": {} + }, + "@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "dev": true, + "requires": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + } + }, + "@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "dev": true, + "requires": { + "@jsonjoy.com/util": "17.67.0" + } + }, + "@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "dev": true, + "requires": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + } + } + } + }, + "@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "dev": true, + "requires": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "dependencies": { + "@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "requires": {} + } + } + }, + "@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "dev": true, + "requires": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + } + }, + "@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "dev": true, + "requires": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "dependencies": { + "@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "dev": true, + "requires": {} + } + } + }, + "glob-to-regex.js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", + "dev": true, + "requires": {} + }, + "thingies": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.0.tgz", + "integrity": "sha512-rMHRjmlFLM1R96UYPvpmnc3LYtdFrT33JIB7L9hetGue1qAPfn1N2LJeEjxUSidu1Iku+haLZXDuEXUHNGO/lg==", + "dev": true, + "requires": {} + }, + "tree-dump": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tree-dump/-/tree-dump-1.1.0.tgz", + "integrity": "sha512-rMuvhU4MCDbcbnleZTFezWsaZXRFemSqAM+7jPnzUl1fo9w3YEKOxAeui0fz3OI4EU4hf23iyA7uQRVko+UaBA==", + "dev": true, + "requires": {} + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + } + } + }, + "meow": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true, + "peer": true + }, + "merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "peer": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "peer": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromark": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", + "integrity": "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==", + "requires": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-core-commonmark": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.3.tgz", + "integrity": "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "requires": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "requires": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "requires": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.0.1.tgz", + "integrity": "sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==", + "requires": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "requires": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "requires": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==" + }, + "micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==" + }, + "micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "requires": { + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "requires": { + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "requires": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "micromark-util-subtokenize": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.1.0.tgz", + "integrity": "sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==", + "requires": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "micromark-util-symbol": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==" + }, + "micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==" + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "dev": true, + "requires": { + "brace-expansion": "^5.0.5" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "mockconsole": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/mockconsole/-/mockconsole-0.0.1.tgz", + "integrity": "sha1-1ip+2FUwlkq80k7bnzD6WLvOVsY=" + }, + "mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "muggle-string": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", + "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==" + }, + "multi-buffer-data-view": { + "version": "6.0.27", + "resolved": "https://registry.npmjs.org/multi-buffer-data-view/-/multi-buffer-data-view-6.0.27.tgz", + "integrity": "sha512-hqbVIRFskEUX3PmHxGPGFOcLU93va4yfYkBBg4c1U0wK1Z/pDfIbYDexbIIWI+vtrXWkQAStCQ4drcQ1ooakiA==", + "requires": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "requires": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + } + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "natural-orderby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/natural-orderby/-/natural-orderby-5.0.0.tgz", + "integrity": "sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==", + "dev": true + }, + "negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "nested-property": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/nested-property/-/nested-property-4.0.0.tgz", + "integrity": "sha512-yFehXNWRs4cM0+dz7QxCd06hTbWbSkV0ISsqBfkntU6TOY4Qm3Q88fRRLOddkGh2Qq6dZvnKVAahfhjcUvLnyA==" + }, + "ngraph.events": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/ngraph.events/-/ngraph.events-1.2.2.tgz", + "integrity": "sha512-JsUbEOzANskax+WSYiAPETemLWYXmixuPAlmZmhIbIj6FH/WDgEGCGnRwUQBK0GjOnVm8Ui+e5IJ+5VZ4e32eQ==" + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "optional": true + }, + "node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==" + }, + "node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "requires": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + } + }, + "node-forge": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.3.tgz", + "integrity": "sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==", + "dev": true + }, + "node-releases": { + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.26.tgz", + "integrity": "sha512-S2M9YimhSjBSvYnlr5/+umAnPHE++ODwt5e2Ij6FoX45HA/s4vHdkDx1eax2pAPeAOqu4s9b7ppahsyEFdVqQA==", + "dev": true, + "peer": true + }, + "nopt": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.1.tgz", + "integrity": "sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==", + "dev": true, + "requires": { + "abbrev": "^2.0.0" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + }, + "nwsapi": { + "version": "2.2.21", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.21.tgz", + "integrity": "sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==", + "dev": true + }, + "object-deep-merge": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/object-deep-merge/-/object-deep-merge-2.0.0.tgz", + "integrity": "sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==", + "dev": true + }, + "object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true + }, + "object-is": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "octal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/octal/-/octal-1.0.0.tgz", + "integrity": "sha512-nnda7W8d+A3vEIY+UrDQzzboPf1vhs4JYVhff5CDkq9QNoZY7Xrxeo/htox37j9dZf7yNHevZzqtejWgy1vCqQ==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.1.0.tgz", + "integrity": "sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.2.0.tgz", + "integrity": "sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==", + "dev": true, + "requires": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "wsl-utils": "^0.1.0" + } + }, + "openapi-typescript": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/openapi-typescript/-/openapi-typescript-7.13.0.tgz", + "integrity": "sha512-EFP392gcqXS7ntPvbhBzbF8TyBA+baIYEm791Hy5YkjDYKTnk/Tn5OQeKm5BIZvJihpp8Zzr4hzx0Irde1LNGQ==", + "dev": true, + "requires": { + "@redocly/openapi-core": "^1.34.6", + "ansi-colors": "^4.1.3", + "change-case": "^5.4.4", + "parse-json": "^8.3.0", + "supports-color": "^10.2.2", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "parse-json": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.3.0.tgz", + "integrity": "sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.26.2", + "index-to-position": "^1.1.0", + "type-fest": "^4.39.1" + } + }, + "supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "dev": true + }, + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true + } + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "peer": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", + "dev": true + }, + "p-cancelable": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==" + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "peer": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "peer": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "p-queue": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-8.1.1.tgz", + "integrity": "sha512-aNZ+VfjobsWryoiPnEApGGmf5WmNsCo9xu8dfaYamG5qaLP7ClhLN6NgsFe6SwJ2UbLEBK5dv9x8Mn5+RVhMWQ==", + "requires": { + "eventemitter3": "^5.0.1", + "p-timeout": "^6.1.2" + }, + "dependencies": { + "eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==" + } + } + }, + "p-retry": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-6.2.1.tgz", + "integrity": "sha512-hEt02O4hUct5wtwg4H4KcWgDdm+l1bOaEy/hWzd8xtXB9BqxTWBBhb+2ImAtH4Cv4rPjV76xN3Zumqk3k3AhhQ==", + "dev": true, + "requires": { + "@types/retry": "0.12.2", + "is-network-error": "^1.0.0", + "retry": "^0.13.1" + } + }, + "p-timeout": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz", + "integrity": "sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==" + }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "panzoom": { + "version": "9.4.4", + "resolved": "https://registry.npmjs.org/panzoom/-/panzoom-9.4.4.tgz", + "integrity": "sha512-r1KfkNZvsBw59IPq7Yy+GWZnZE1YCG/t7aG6caSkij/TBqdxTzmxNTm/lHf3h6qlVMFisIGIO+lgS2Ym23PIoA==", + "requires": { + "amator": "^1.1.0", + "ngraph.events": "^1.2.2", + "wheel": "^1.0.0" + } + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "peer": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-asn1": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.7.tgz", + "integrity": "sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==", + "requires": { + "asn1.js": "^4.10.1", + "browserify-aes": "^1.2.0", + "evp_bytestokey": "^1.0.3", + "hash-base": "~3.0", + "pbkdf2": "^3.1.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "parse-entities": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.2.tgz", + "integrity": "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==", + "requires": { + "@types/unist": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "dependencies": { + "@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==" + } + } + }, + "parse-imports-exports": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/parse-imports-exports/-/parse-imports-exports-0.2.4.tgz", + "integrity": "sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==", + "dev": true, + "requires": { + "parse-statements": "1.0.11" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "peer": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "parse-statements": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/parse-statements/-/parse-statements-1.0.11.tgz", + "integrity": "sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==", + "dev": true + }, + "parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "dev": true, + "requires": { + "entities": "^6.0.0" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "peer": true + }, + "path-expression-matcher": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz", + "integrity": "sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ==" + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-posix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/path-posix/-/path-posix-1.0.0.tgz", + "integrity": "sha1-BrJhE/Vr6rBCVFojv6iAA8ysJg8=" + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + } + }, + "path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "peer": true + }, + "pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "pathval": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz", + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==", + "dev": true + }, + "pbkdf2": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.3.tgz", + "integrity": "sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==", + "requires": { + "create-hash": "~1.1.3", + "create-hmac": "^1.1.7", + "ripemd160": "=2.0.1", + "safe-buffer": "^5.2.1", + "sha.js": "^2.4.11", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "create-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.1.3.tgz", + "integrity": "sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "sha.js": "^2.4.0" + } + }, + "hash-base": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-2.0.2.tgz", + "integrity": "sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==", + "requires": { + "inherits": "^2.0.1" + } + }, + "ripemd160": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.1.tgz", + "integrity": "sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==", + "requires": { + "hash-base": "^2.0.0", + "inherits": "^2.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pinia": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-3.0.4.tgz", + "integrity": "sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==", + "requires": { + "@vue/devtools-api": "^7.7.7" + }, + "dependencies": { + "@vue/devtools-api": { + "version": "7.7.7", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.7.tgz", + "integrity": "sha512-lwOnNBH2e7x1fIIbVT7yF5D+YWhqELm55/4ZKf45R9T8r9dE2AIOy8HKjfqzGsoTHFbWbr337O4E0A0QADnjBg==", + "requires": { + "@vue/devtools-kit": "^7.7.7" + } + } + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==" + }, + "postcss": { + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-html": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", + "dev": true, + "peer": true, + "requires": { + "htmlparser2": "^8.0.0", + "js-tokens": "^8.0.0", + "postcss": "^8.4.0", + "postcss-safe-parser": "^6.0.0" + }, + "dependencies": { + "js-tokens": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", + "dev": true, + "peer": true + } + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "peer": true + }, + "postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "peer": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "peer": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "property-information": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.1.0.tgz", + "integrity": "sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==" + }, + "proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "dependencies": { + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + } + } + }, + "proxy-from-env": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==" + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + } + } + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true + }, + "qs": { + "version": "6.14.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.2.tgz", + "integrity": "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==", + "dev": true, + "requires": { + "side-channel": "^1.1.0" + } + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "dev": true + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "peer": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", + "dev": true, + "requires": { + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true + }, + "recorder-audio-worklet": { + "version": "6.0.58", + "resolved": "https://registry.npmjs.org/recorder-audio-worklet/-/recorder-audio-worklet-6.0.58.tgz", + "integrity": "sha512-aJn0aPM1okIBzH8ZXKWObUjeQkwWMQvlHK9CfL24RAaO+Gh6bNzrlqAbsq7ixv/IUHRoHRA2trG23dJ/kiMrDw==", + "requires": { + "@babel/runtime": "^7.29.2", + "broker-factory": "^3.1.14", + "fast-unique-numbers": "^9.0.27", + "recorder-audio-worklet-processor": "^5.0.40", + "standardized-audio-context": "^25.3.77", + "subscribable-things": "^2.1.59", + "tslib": "^2.8.1", + "worker-factory": "^7.0.49" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "recorder-audio-worklet-processor": { + "version": "5.0.40", + "resolved": "https://registry.npmjs.org/recorder-audio-worklet-processor/-/recorder-audio-worklet-processor-5.0.40.tgz", + "integrity": "sha512-9O0PkUS4Mv0y/yfHi1d+9Hu5y+of7FZK37ISg/UeUVZrP+fUd9bmfJzZVHgqjo9s/KvFwWW3i+ZqXP8u81rXSA==", + "requires": { + "@babel/runtime": "^7.29.2", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "dev": true + }, + "rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "requires": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "rehype-highlight": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rehype-highlight/-/rehype-highlight-7.0.2.tgz", + "integrity": "sha512-k158pK7wdC2qL3M5NcZROZ2tR/l7zOzjxXd5VGdcfIyoijjQqpHd3JKtYSBDpDZ38UI2WJWuFAtkMDxmx5kstA==", + "requires": { + "@types/hast": "^3.0.0", + "hast-util-to-text": "^4.0.0", + "lowlight": "^3.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + } + }, + "rehype-react": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/rehype-react/-/rehype-react-8.0.0.tgz", + "integrity": "sha512-vzo0YxYbB2HE+36+9HWXVdxNoNDubx63r5LBzpxBGVWM8s9mdnMdbmuJBAX6TTyuGdZjZix6qU3GcSuKCIWivw==", + "requires": { + "@types/hast": "^3.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "unified": "^11.0.0" + } + }, + "remark-breaks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-breaks/-/remark-breaks-4.0.0.tgz", + "integrity": "sha512-IjEjJOkH4FuJvHZVIW0QCDWxcG96kCq7An/KVH2NfJe6rKZU2AsHeB3OEjPNRxi4QC34Xdx7I2KGYn6IpT7gxQ==", + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-newline-to-break": "^2.0.0", + "unified": "^11.0.0" + } + }, + "remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "requires": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + } + }, + "remark-rehype": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", + "requires": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + } + }, + "remark-unlink-protocols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/remark-unlink-protocols/-/remark-unlink-protocols-1.0.0.tgz", + "integrity": "sha512-5j/F28jhFmxeyz8nuJYYIWdR4nNpKWZ8A+tVwnK/0pq7Rjue33CINEYSckSq2PZvedhKUwbn08qyiuGoPLBung==", + "requires": { + "@types/mdast": "^4.0.0", + "mdast-squeeze-paragraphs": "^6.0.0", + "unist-util-visit": "^5.0.0" + } + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=" + }, + "reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "peer": true + }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "peer": true + }, + "rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "4.47.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.47.1.tgz", + "integrity": "sha512-iasGAQoZ5dWDzULEUX3jiW0oB1qyFOepSyDyoU6S/OhVlDIwj5knI5QBa5RRQ0sK7OE0v+8VIi2JuV+G+3tfNg==", + "dev": true, + "requires": { + "@rollup/rollup-android-arm-eabi": "4.47.1", + "@rollup/rollup-android-arm64": "4.47.1", + "@rollup/rollup-darwin-arm64": "4.47.1", + "@rollup/rollup-darwin-x64": "4.47.1", + "@rollup/rollup-freebsd-arm64": "4.47.1", + "@rollup/rollup-freebsd-x64": "4.47.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.47.1", + "@rollup/rollup-linux-arm-musleabihf": "4.47.1", + "@rollup/rollup-linux-arm64-gnu": "4.47.1", + "@rollup/rollup-linux-arm64-musl": "4.47.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.47.1", + "@rollup/rollup-linux-ppc64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-gnu": "4.47.1", + "@rollup/rollup-linux-riscv64-musl": "4.47.1", + "@rollup/rollup-linux-s390x-gnu": "4.47.1", + "@rollup/rollup-linux-x64-gnu": "4.47.1", + "@rollup/rollup-linux-x64-musl": "4.47.1", + "@rollup/rollup-win32-arm64-msvc": "4.47.1", + "@rollup/rollup-win32-ia32-msvc": "4.47.1", + "@rollup/rollup-win32-x64-msvc": "4.47.1", + "@types/estree": "1.0.8", + "fsevents": "~2.3.2" + } + }, + "rrweb-cssom": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true + }, + "run-applescript": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz", + "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==", + "dev": true + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "peer": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs-interop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rxjs-interop/-/rxjs-interop-2.0.0.tgz", + "integrity": "sha512-ASEq9atUw7lualXB+knvgtvwkCEvGWV2gDD/8qnASzBkzEARZck9JAyxmY8OS6Nc1pCPEgDTKNcx+YqqYfzArw==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.99.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.99.0.tgz", + "integrity": "sha512-kgW13M54DUB7IsIRM5LvJkNlpH+WhMpooUcaWGFARkF1Tc82v9mIWkCbCYf+MBvpIUBSeSOTilpZjEPr2VYE6Q==", + "dev": true, + "requires": { + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^5.1.5", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "sass-loader": { + "version": "16.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-16.0.7.tgz", + "integrity": "sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==", + "dev": true, + "requires": { + "neo-async": "^2.6.2" + } + }, + "sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dev": true, + "requires": { + "xmlchars": "^2.2.0" + } + }, + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "dependencies": { + "ajv": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, + "sdp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/sdp/-/sdp-3.2.0.tgz", + "integrity": "sha512-d7wDPgDV3DDiqulJjKiV2865wKsJ34YI+NDREbm+FySq6WuKOikwyNQcm+doLAZ1O6ltdO0SeKle2xMpN3Brgw==" + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "requires": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + } + }, + "semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==" + }, + "send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + } + } + }, + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "peer": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "serve-index": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "dev": true, + "requires": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + } + }, + "set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "requires": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "sha.js": { + "version": "2.4.12", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.12.tgz", + "integrity": "sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==", + "requires": { + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1", + "to-buffer": "^1.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true + }, + "side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + } + }, + "side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "requires": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + } + }, + "side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + } + }, + "side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "requires": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + } + }, + "siginfo": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", + "dev": true + }, + "sirv": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.3.tgz", + "integrity": "sha512-O9jm9BsID1P+0HOi81VpXPoDxYP374pkOLzACAoyUQ/3OUVndNpsz6wMnY2z+yOxzbllCKZrM+9QrWsv4THnyA==", + "dev": true, + "requires": { + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "peer": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "peer": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "requires": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } + } + }, + "sort-object-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sort-object-keys/-/sort-object-keys-2.1.0.tgz", + "integrity": "sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==", + "dev": true + }, + "sort-package-json": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-3.6.1.tgz", + "integrity": "sha512-Chgejw1+10p2D0U2tB7au1lHtz6TkFnxmvZktyBCRyV0GgmF6nl1IxXxAsPtJVsUyg/fo+BfCMAVVFUVRkAHrQ==", + "dev": true, + "requires": { + "detect-indent": "^7.0.2", + "detect-newline": "^4.0.1", + "git-hooks-list": "^4.1.1", + "is-plain-obj": "^4.1.0", + "semver": "^7.7.3", + "sort-object-keys": "^2.0.1", + "tinyglobby": "^0.2.15" + }, + "dependencies": { + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "dev": true + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "peer": true + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==" + }, + "spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz", + "integrity": "sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==" + }, + "stackback": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", + "dev": true + }, + "standardized-audio-context": { + "version": "25.3.77", + "resolved": "https://registry.npmjs.org/standardized-audio-context/-/standardized-audio-context-25.3.77.tgz", + "integrity": "sha512-Ki9zNz6pKcC5Pi+QPjPyVsD9GwJIJWgryji0XL9cAJXMGyn+dPOf6Qik1AHei0+UNVcc4BOCa0hWLBzlwqsW/A==", + "requires": { + "@babel/runtime": "^7.25.6", + "automation-events": "^7.0.9", + "tslib": "^2.7.0" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "dev": true + }, + "std-env": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz", + "integrity": "sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==", + "dev": true + }, + "stream-browserify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz", + "integrity": "sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==", + "dev": true, + "requires": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + } + } + }, + "string-range": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/string-range/-/string-range-1.2.2.tgz", + "integrity": "sha512-tYft6IFi8SjplJpxCUxyqisD3b+R2CSkomrtJYCkvuf1KuCAWgz7YXt4O0jip7efpfCemwHEzTEAO8EuOYgh3w==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + } + } + }, + "stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "requires": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-literal": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz", + "integrity": "sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==", + "dev": true, + "requires": { + "js-tokens": "^9.0.1" + }, + "dependencies": { + "js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true + } + } + }, + "striptags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.2.0.tgz", + "integrity": "sha512-g45ZOGzHDMe2bdYMdIvdAfCQkCTDMGBazSw1ypMowwGIee7ZQ5dU0rBJ8Jqgl+jAKIv4dbeE1jscZq9wid1Tkw==" + }, + "strnum": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.3.tgz", + "integrity": "sha512-oKx6RUCuHfT3oyVjtnrmn19H1SiCqgJSg+54XqURKp5aCMbrXrhLjRN9TjuwMjiYstZ0MzDrHqkGZ5dFTKd+zg==" + }, + "strtok3": { + "version": "10.3.4", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.4.tgz", + "integrity": "sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==", + "requires": { + "@tokenizer/token": "^0.3.0" + } + }, + "style-to-js": { + "version": "1.1.17", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", + "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "requires": { + "style-to-object": "1.0.9" + } + }, + "style-to-object": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", + "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "requires": { + "inline-style-parser": "0.2.4" + } + }, + "stylelint": { + "version": "16.19.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.19.1.tgz", + "integrity": "sha512-C1SlPZNMKl+d/C867ZdCRthrS+6KuZ3AoGW113RZCOL0M8xOGpgx7G70wq7lFvqvm4dcfdGFVLB/mNaLFChRKw==", + "dev": true, + "peer": true, + "requires": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "@csstools/media-query-list-parser": "^4.0.2", + "@csstools/selector-specificity": "^5.0.0", + "@dual-bundle/import-meta-resolve": "^4.1.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.3", + "css-tree": "^3.1.0", + "debug": "^4.3.7", + "fast-glob": "^3.3.3", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^10.0.8", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^7.0.3", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.36.0", + "mathml-tag-names": "^2.1.3", + "meow": "^13.2.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.5.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-safe-parser": "^7.0.1", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "supports-hyperlinks": "^3.2.0", + "svg-tags": "^1.0.0", + "table": "^6.9.0", + "write-file-atomic": "^5.0.1" + }, + "dependencies": { + "@csstools/selector-specificity": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz", + "integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==", + "dev": true, + "peer": true, + "requires": {} + }, + "balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "peer": true + }, + "css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "peer": true, + "requires": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + } + }, + "file-entry-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-10.1.0.tgz", + "integrity": "sha512-Et/ex6smi3wOOB+n5mek+Grf7P2AxZR5ueqRUvAAn4qkyatXi3cUC1cuQXVkX0VlzBVsN4BkWJFmY/fYiRTdww==", + "dev": true, + "peer": true, + "requires": { + "flat-cache": "^6.1.9" + } + }, + "flat-cache": { + "version": "6.1.9", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.9.tgz", + "integrity": "sha512-DUqiKkTlAfhtl7g78IuwqYM+YqvT+as0mY+EVk6mfimy19U79pJCzDZQsnqk3Ou/T6hFXWLGbwbADzD/c8Tydg==", + "dev": true, + "peer": true, + "requires": { + "cacheable": "^1.9.0", + "flatted": "^3.3.3", + "hookified": "^1.8.2" + } + }, + "ignore": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz", + "integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==", + "dev": true, + "peer": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "peer": true + }, + "mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "peer": true + }, + "postcss-safe-parser": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz", + "integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==", + "dev": true, + "peer": true, + "requires": {} + }, + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "peer": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "peer": true + } + } + }, + "stylelint-config-html": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz", + "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==", + "dev": true, + "peer": true, + "requires": {} + }, + "stylelint-config-recommended": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-16.0.0.tgz", + "integrity": "sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==", + "dev": true, + "peer": true, + "requires": {} + }, + "stylelint-config-recommended-scss": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-15.0.1.tgz", + "integrity": "sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==", + "dev": true, + "peer": true, + "requires": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^16.0.0", + "stylelint-scss": "^6.12.0" + } + }, + "stylelint-config-recommended-vue": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.5.0.tgz", + "integrity": "sha512-65TAK/clUqkNtkZLcuytoxU0URQYlml+30Nhop7sRkCZ/mtWdXt7T+spPSB3KMKlb+82aEVJ4OrcstyDBdbosg==", + "dev": true, + "peer": true, + "requires": { + "semver": "^7.3.5", + "stylelint-config-html": ">=1.0.0", + "stylelint-config-recommended": ">=6.0.0" + } + }, + "stylelint-scss": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.12.0.tgz", + "integrity": "sha512-U7CKhi1YNkM1pXUXl/GMUXi8xKdhl4Ayxdyceie1nZ1XNIdaUgMV6OArpooWcDzEggwgYD0HP/xIgVJo9a655w==", + "dev": true, + "peer": true, + "requires": { + "css-tree": "^3.0.1", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.36.0", + "mdn-data": "^2.21.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.6", + "postcss-selector-parser": "^7.1.0", + "postcss-value-parser": "^4.2.0" + }, + "dependencies": { + "css-tree": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz", + "integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==", + "dev": true, + "peer": true, + "requires": { + "mdn-data": "2.12.2", + "source-map-js": "^1.0.1" + }, + "dependencies": { + "mdn-data": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz", + "integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==", + "dev": true, + "peer": true + } + } + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "peer": true + }, + "mdn-data": { + "version": "2.21.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.21.0.tgz", + "integrity": "sha512-+ZKPQezM5vYJIkCxaC+4DTnRrVZR1CgsKLu5zsQERQx6Tea8Y+wMx5A24rq8A8NepCeatIQufVAekKNgiBMsGQ==", + "dev": true, + "peer": true + }, + "postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "peer": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + } + } + }, + "stylelint-use-logical": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/stylelint-use-logical/-/stylelint-use-logical-2.1.3.tgz", + "integrity": "sha512-haPkgxKre+eSqr4IZJnHwNT/9/wICykeFZIaz7rZbe4SohTHkw7vBahMOrZJZpdny/EBVHAcPH2IBeoiUcZWWw==", + "dev": true, + "requires": {} + }, + "subscribable-things": { + "version": "2.1.59", + "resolved": "https://registry.npmjs.org/subscribable-things/-/subscribable-things-2.1.59.tgz", + "integrity": "sha512-V0GCOgYw7ZzJCDsKtEPJCZ2+BWlRIUulDdCiSetexX4qXsCs8gFRImf+y/ySGYSF9bXawsXlUE1ioKMwET7FUg==", + "requires": { + "@babel/runtime": "^7.29.2", + "rxjs-interop": "^2.0.0", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "requires": { + "copy-anything": "^3.0.2" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "supports-hyperlinks": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.2.0.tgz", + "integrity": "sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==", + "dev": true, + "peer": true, + "requires": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true, + "peer": true + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "tabbable": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.4.0.tgz", + "integrity": "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==" + }, + "table": { + "version": "6.9.0", + "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", + "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", + "dev": true, + "peer": true, + "requires": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "peer": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "peer": true + } + } + }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true + }, + "terser": { + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "peer": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + } + } + }, + "test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "requires": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true + }, + "tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true + }, + "tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "dev": true, + "requires": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } + } + }, + "tinypool": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz", + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==", + "dev": true + }, + "tinyrainbow": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", + "dev": true + }, + "tinyspy": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.3.tgz", + "integrity": "sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==", + "dev": true + }, + "tldts": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.86.tgz", + "integrity": "sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==", + "dev": true, + "requires": { + "tldts-core": "^6.1.86" + } + }, + "tldts-core": { + "version": "6.1.86", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.86.tgz", + "integrity": "sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==", + "dev": true + }, + "to-buffer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", + "integrity": "sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==", + "requires": { + "isarray": "^2.0.5", + "safe-buffer": "^5.2.1", + "typed-array-buffer": "^1.0.3" + }, + "dependencies": { + "isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "to-valid-identifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-valid-identifier/-/to-valid-identifier-1.0.0.tgz", + "integrity": "sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==", + "dev": true, + "requires": { + "@sindresorhus/base62": "^1.0.0", + "reserved-identifiers": "^1.0.0" + } + }, + "toastify-js": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/toastify-js/-/toastify-js-1.12.0.tgz", + "integrity": "sha512-HeMHCO9yLPvP9k0apGSdPUWrUbLnxUKNFzgUoZp1PHCLploIX/4DSQ7V8H25ef+h4iO9n0he7ImfcndnN6nDrQ==" + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true + }, + "tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "requires": { + "tldts": "^6.1.32" + } + }, + "tributejs": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/tributejs/-/tributejs-5.1.3.tgz", + "integrity": "sha512-B5CXihaVzXw+1UHhNFyAwUTMDk1EfoLP5Tj1VhD9yybZ1I8DZJEv8tZ1l0RJo0t0tk9ZhR8eG5tEsaCvRigmdQ==" + }, + "trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==" + }, + "trough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.1.0.tgz", + "integrity": "sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==" + }, + "ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "requires": {} + }, + "ts-md5": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ts-md5/-/ts-md5-2.0.1.tgz", + "integrity": "sha512-yF35FCoEOFBzOclSkMNEUbFQZuv89KEQ+5Xz03HrMSGUGB1+r+El+JiGOFwsP4p9RFNzwlrydYoTLvPOuICl9w==" + }, + "tslib": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", + "dev": true, + "peer": true + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "requires": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "typedarray-to-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-1.0.4.tgz", + "integrity": "sha512-vjMKrfSoUDN8/Vnqitw2FmstOfuJ73G6CrSEKnf11A6RmasVxHqfeBcnTb6RsL4pTMuV5Zsv9IiHRphMZyckUw==", + "dev": true + }, + "typescript": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", + "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", + "peer": true + }, + "typescript-eslint": { + "version": "8.58.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.58.1.tgz", + "integrity": "sha512-gf6/oHChByg9HJvhMO1iBexJh12AqqTfnuxscMDOVqfJW3htsdRJI/GfPpHTTcyeB8cSTUY2JcZmVgoyPqcrDg==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "8.58.1", + "@typescript-eslint/parser": "8.58.1", + "@typescript-eslint/typescript-estree": "8.58.1", + "@typescript-eslint/utils": "8.58.1" + } + }, + "typescript-event-target": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typescript-event-target/-/typescript-event-target-1.1.1.tgz", + "integrity": "sha512-dFSOFBKV6uwaloBCCUhxlD3Pr/P1a/tJdcmPrTXCHlEFD3faj0mztjcGn6VBAhQ0/Bdy8K3VWrrqwbt/ffsYsg==" + }, + "ua-is-frozen": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ua-is-frozen/-/ua-is-frozen-0.1.2.tgz", + "integrity": "sha512-RwKDW2p3iyWn4UbaxpP2+VxwqXh0jpvdxsYpZ5j/MLLiQOfbsV5shpgQiw93+KMYQPcteeMQ289MaAFzs3G9pw==" + }, + "ua-parser-js": { + "version": "2.0.9", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-2.0.9.tgz", + "integrity": "sha512-OsqGhxyo/wGdLSXMSJxuMGN6H4gDnKz6Fb3IBm4bxZFMnyy0sdf6MN96Ie8tC6z/btdO+Bsy8guxlvLdwT076w==", + "requires": { + "detect-europe-js": "^0.1.2", + "is-standalone-pwa": "^0.1.1", + "ua-is-frozen": "^0.1.2" + } + }, + "undici-types": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", + "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "dev": true + }, + "unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "requires": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "dependencies": { + "is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" + } + } + }, + "unist-builder": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-4.0.0.tgz", + "integrity": "sha512-wmRFnH+BLpZnTKpc5L7O67Kac89s9HMrtELpnNaE6TAobq5DTZZs5YaTQfAZBA9bFPECx2uVAPO31c+GVug8mg==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "requires": { + "@types/unist": "^3.0.0" + } + }, + "unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + } + }, + "unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "peer": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "peer": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "uri-js-replace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uri-js-replace/-/uri-js-replace-1.0.1.tgz", + "integrity": "sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==", + "dev": true + }, + "url": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.4.tgz", + "integrity": "sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==", + "dev": true, + "requires": { + "punycode": "^1.4.1", + "qs": "^6.12.3" + }, + "dependencies": { + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + } + } + }, + "url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "requires": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "requires": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + } + }, + "vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "requires": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + } + }, + "vite": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.1.3.tgz", + "integrity": "sha512-OOUi5zjkDxYrKhTV3V7iKsoS37VUM7v40+HuwEmcrsf11Cdx9y3DIr2Px6liIcZFwt3XSRpQvFpL3WVy7ApkGw==", + "dev": true, + "requires": { + "esbuild": "^0.25.0", + "fdir": "^6.5.0", + "fsevents": "~2.3.3", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.14" + }, + "dependencies": { + "fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "requires": {} + }, + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } + } + }, + "vite-node": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.2.4.tgz", + "integrity": "sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==", + "dev": true, + "requires": { + "cac": "^6.7.14", + "debug": "^4.4.1", + "es-module-lexer": "^1.7.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0" + } + }, + "vitest": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.4.tgz", + "integrity": "sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==", + "dev": true, + "requires": { + "@types/chai": "^5.2.2", + "@vitest/expect": "3.2.4", + "@vitest/mocker": "3.2.4", + "@vitest/pretty-format": "^3.2.4", + "@vitest/runner": "3.2.4", + "@vitest/snapshot": "3.2.4", + "@vitest/spy": "3.2.4", + "@vitest/utils": "3.2.4", + "chai": "^5.2.0", + "debug": "^4.4.1", + "expect-type": "^1.2.1", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", + "picomatch": "^4.0.2", + "std-env": "^3.9.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.14", + "tinypool": "^1.1.1", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0-0", + "vite-node": "3.2.4", + "why-is-node-running": "^2.3.0" + }, + "dependencies": { + "picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true + } + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "vscode-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==" + }, + "vue": { + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.32.tgz", + "integrity": "sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==", + "requires": { + "@vue/compiler-dom": "3.5.32", + "@vue/compiler-sfc": "3.5.32", + "@vue/runtime-dom": "3.5.32", + "@vue/server-renderer": "3.5.32", + "@vue/shared": "3.5.32" + } + }, + "vue-component-type-helpers": { + "version": "2.2.10", + "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.2.10.tgz", + "integrity": "sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==", + "dev": true + }, + "vue-cropperjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vue-cropperjs/-/vue-cropperjs-5.0.0.tgz", + "integrity": "sha512-RhnC8O33uRZNkn74aiHZwNHnBJOXWlS4P6gsRI0lw4cZlWjKSCywZI9oSI9POlIPI6OYv30jvnHMXGch85tw7w==", + "requires": { + "cropperjs": "^1.5.6" + } + }, + "vue-draggable-resizable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vue-draggable-resizable/-/vue-draggable-resizable-3.0.0.tgz", + "integrity": "sha512-kABSggcXPoDB8dOTVE09ZkccxiMdNDUaLl7STTeghsFE3o+mk653iumrkmjKLfIBA/w5ZXWJmarBqoqsmWLzEg==", + "requires": {} + }, + "vue-eslint-parser": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-10.4.0.tgz", + "integrity": "sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==", + "dev": true, + "peer": true, + "requires": { + "debug": "^4.4.0", + "eslint-scope": "^8.2.0 || ^9.0.0", + "eslint-visitor-keys": "^4.2.0 || ^5.0.0", + "espree": "^10.3.0 || ^11.0.0", + "esquery": "^1.6.0", + "semver": "^7.6.3" + }, + "dependencies": { + "eslint-scope": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", + "dev": true, + "peer": true, + "requires": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true + } + } + }, + "vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + } + } + }, + "vue-material-design-icons": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/vue-material-design-icons/-/vue-material-design-icons-5.3.1.tgz", + "integrity": "sha512-6UNEyhlTzlCeT8ZeX5WbpUGFTTPSbOoTQeoASTv7X4Ylh0pe8vltj+36VMK56KM0gG8EQVoMK/Qw/6evalg8lA==" + }, + "vue-resize": { + "version": "2.0.0-alpha.1", + "resolved": "https://registry.npmjs.org/vue-resize/-/vue-resize-2.0.0-alpha.1.tgz", + "integrity": "sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==", + "requires": {} + }, + "vue-router": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz", + "integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==", + "requires": { + "@vue/devtools-api": "^6.6.4" + } + }, + "vue-tsc": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-3.2.7.tgz", + "integrity": "sha512-zc1tL3HoQni1zGTGrwBVRQb7rGP5SWdu/m4rGB6JcnAC5MT5LFZIxF7Y+EJEnt4hGF23d60rXH7gRjHGb5KQQQ==", + "requires": { + "@volar/typescript": "2.4.28", + "@vue/language-core": "3.2.7" + } + }, + "vuex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", + "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", + "requires": { + "@vue/devtools-api": "^6.0.0-beta.11" + } + }, + "w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dev": true, + "requires": { + "xml-name-validator": "^5.0.0" + }, + "dependencies": { + "xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "dev": true + } + } + }, + "wasm-check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/wasm-check/-/wasm-check-2.1.2.tgz", + "integrity": "sha512-Eu162RfercUY9BZ4QN4PbOkuKkXwyuD+V5+iZ+VJ85W6ubDqZcNQMBAbBcqyrHs0Qb0D0IWVhPlfYFVhMoKhYw==", + "dev": true + }, + "watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "requires": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" + }, + "webdav": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webdav/-/webdav-5.9.0.tgz", + "integrity": "sha512-OMJ6wtK1WvCO++aOLoQgE96S8KT4e5aaClWHmHXfFU369r4eyELN569B7EqT4OOUb99mmO58GkyuiCv/Ag6J0Q==", + "requires": { + "@buttercup/fetch": "^0.2.1", + "base-64": "^1.0.0", + "byte-length": "^1.0.2", + "entities": "^6.0.1", + "fast-xml-parser": "^5.3.4", + "hot-patcher": "^2.0.1", + "layerr": "^3.0.0", + "md5": "^2.3.0", + "minimatch": "^9.0.5", + "nested-property": "^4.0.0", + "node-fetch": "^3.3.2", + "path-posix": "^1.0.0", + "url-join": "^5.0.0", + "url-parse": "^1.5.10" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "webpack": { + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "dev": true, + "peer": true, + "requires": { + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.7.1", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "dependencies": { + "schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "requires": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "peer": true + } + } + }, + "webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "dependencies": { + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true + }, + "ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "requires": {} + } + } + }, + "webpack-dev-middleware": { + "version": "7.4.5", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-7.4.5.tgz", + "integrity": "sha512-uxQ6YqGdE4hgDKNf7hUiPXOdtkXvBJXrfEGYSx7P7LC8hnUYGK70X6xQXUvXeNyBDDcsiQXpG2m3G9vxowaEuA==", + "dev": true, + "requires": { + "colorette": "^2.0.10", + "memfs": "^4.43.1", + "mime-types": "^3.0.1", + "on-finished": "^2.4.1", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "dev": true + }, + "mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "dev": true, + "requires": { + "mime-db": "^1.54.0" + } + } + } + }, + "webpack-dev-server": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", + "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "dev": true, + "requires": { + "@types/bonjour": "^3.5.13", + "@types/connect-history-api-fallback": "^1.5.4", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.21", + "@types/serve-index": "^1.9.4", + "@types/serve-static": "^1.15.5", + "@types/sockjs": "^0.3.36", + "@types/ws": "^8.5.10", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.2.1", + "chokidar": "^3.6.0", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "express": "^4.21.2", + "graceful-fs": "^4.2.6", + "http-proxy-middleware": "^2.0.9", + "ipaddr.js": "^2.1.0", + "launch-editor": "^2.6.1", + "open": "^10.0.3", + "p-retry": "^6.2.0", + "schema-utils": "^4.2.0", + "selfsigned": "^2.4.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^7.4.2", + "ws": "^8.18.0" + }, + "dependencies": { + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + } + } + }, + "webrtc-adapter": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/webrtc-adapter/-/webrtc-adapter-9.0.5.tgz", + "integrity": "sha512-U9vjByy/sK2OMXu5mmfuZFKTMIUQe34c0JXRO+oDrxJTsntdYT2iIFwYMOV7HhMTuktcZLGf2W1N/OcSf9ssWg==", + "requires": { + "sdp": "^3.2.0" + } + }, + "webrtcsupport": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webrtcsupport/-/webrtcsupport-2.2.0.tgz", + "integrity": "sha1-MtjJYIclraNSrwq2q/IayrUYKqY=" + }, + "websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "requires": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true + }, + "whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dev": true, + "requires": { + "iconv-lite": "0.6.3" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "dev": true + }, + "whatwg-url": { + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", + "dev": true, + "requires": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "dependencies": { + "tr46": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.1.tgz", + "integrity": "sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==", + "dev": true, + "requires": { + "punycode": "^2.3.1" + } + }, + "webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "dev": true + } + } + }, + "wheel": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wheel/-/wheel-1.0.0.tgz", + "integrity": "sha512-XiCMHibOiqalCQ+BaNSwRoZ9FDTAvOsXxGHXChBugewDj7HC8VBIER71dEOiRH1fSdLbRCQzngKTSiZ06ZQzeA==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "peer": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "requires": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + } + }, + "why-is-node-running": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", + "dev": true, + "requires": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + } + }, + "wildemitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/wildemitter/-/wildemitter-1.2.1.tgz", + "integrity": "sha512-UMmSUoIQSir+XbBpTxOTS53uJ8s/lVhADCkEbhfRjUGFDPme/XGOb0sBWLx5sTz7Wx/2+TlAw1eK9O5lw5PiEw==" + }, + "word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "peer": true + }, + "worker-factory": { + "version": "7.0.49", + "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.49.tgz", + "integrity": "sha512-lW7tpgy6aUv2dFsQhv1yv+XFzdkCf/leoKRTGMPVK5/die6RrUjqgJHJf556qO+ZfytNG6wPXc17E8zzsOLUDw==", + "requires": { + "@babel/runtime": "^7.29.2", + "fast-unique-numbers": "^9.0.27", + "tslib": "^2.8.1" + }, + "dependencies": { + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "peer": true, + "requires": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "dependencies": { + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "peer": true + } + } + }, + "ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "requires": {} + }, + "wsl-utils": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", + "integrity": "sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==", + "dev": true, + "requires": { + "is-wsl": "^3.1.0" + } + }, + "xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "dev": true + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "peer": true + }, + "zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..e3b1d38 --- /dev/null +++ b/package.json @@ -0,0 +1,115 @@ +{ + "name": "talk", + "version": "22.0.12", + "private": true, + "description": "", + "license": "agpl", + "author": "Joas Schilling ", + "browser": { + "fs": false + }, + "scripts": { + "analyze": "rspack build --env production --analyze", + "analyze:stats": "rspack build --env production --json js/stats.json", + "build": "rspack build --env production", + "dev": "rspack build --env development", + "lint": "eslint", + "lint:fix": "eslint --fix", + "opengrep": "opengrep --opengrep-ignore-pattern=noopengrep --error --exclude '*.php' --exclude 'docs' --include '*.vue' --include '*.js' --include '*.ts' --exclude-rule 'javascript.vue.security.audit.xss.templates.avoid-v-html.avoid-v-html' --exclude-rule 'javascript.lang.security.detect-insecure-websocket.detect-insecure-websocket'", + "serve": "NODE_ENV=development rspack serve", + "stylelint": "stylelint \"src/**/*.scss\" \"src/**/*.vue\"", + "stylelint:fix": "stylelint \"src/**/*.scss\" \"src/**/*.vue\" --fix", + "test": "vitest", + "test:coverage": "vitest run --coverage", + "ts:check": "vue-tsc --noEmit", + "ts:generate": "npx openapi-typescript -t", + "ts:generate-core-types": "./src/types/generate-core-types.sh", + "watch": "rspack build --env development --watch" + }, + "browserslist": [ + "extends @nextcloud/browserslist-config" + ], + "dependencies": { + "@matrix-org/olm": "^3.2.15", + "@mediapipe/tasks-vision": "^0.10.34", + "@nextcloud/auth": "^2.6.0", + "@nextcloud/axios": "^2.6.0", + "@nextcloud/browser-storage": "^0.5.0", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/cdav-library": "^2.2.0", + "@nextcloud/dialogs": "^7.2.0", + "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^3.12.2", + "@nextcloud/initial-state": "^3.0.0", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/paths": "^2.4.0", + "@nextcloud/router": "^3.0.1", + "@nextcloud/sharing": "^0.4.0", + "@nextcloud/upload": "^2.0.0-rc.0", + "@nextcloud/vue": "^9.3.3", + "@vue-leaflet/vue-leaflet": "^0.10.1", + "@vueuse/components": "^13.7.0", + "@vueuse/core": "^13.7.0", + "@vueuse/router": "^13.9.0", + "base64-js": "^1.5.1", + "blurhash": "^2.0.5", + "crypto-js": "^4.2.0", + "debounce": "^2.2.0", + "emoji-regex": "^10.6.0", + "entities": "^6.0.1", + "escape-html": "^1.0.3", + "extendable-media-recorder": "^9.2.37", + "extendable-media-recorder-wav-encoder": "^7.0.137", + "hark": "^1.2.3", + "leaflet": "^1.9.4", + "leaflet-defaulticon-compatibility": "^0.1.2", + "libphonenumber-js": "^1.12.41", + "lodash": "^4.18.1", + "mitt": "^3.0.1", + "mockconsole": "0.0.1", + "panzoom": "^9.4.4", + "pinia": "^3.0.4", + "ua-parser-js": "^2.0.9", + "util": "^0.12.5", + "uuid": "^11.1.0", + "vue": "^3.5.32", + "vue-cropperjs": "^5.0.0", + "vue-draggable-resizable": "^3.0.0", + "vue-material-design-icons": "^5.3.1", + "vue-router": "^4.6.4", + "vue-tsc": "^3.2.7", + "vuex": "^4.1.0", + "webdav": "^5.9.0", + "webrtc-adapter": "^9.0.5", + "webrtcsupport": "^2.2.0", + "wildemitter": "^1.2.1" + }, + "devDependencies": { + "@nextcloud/browserslist-config": "^3.1.2", + "@nextcloud/eslint-config": "^9.0.0-rc.9", + "@nextcloud/stylelint-config": "^3.1.1", + "@rspack/cli": "^1.7.11", + "@rspack/core": "^1.7.11", + "@rspack/plugin-node-polyfill": "^0.5.8", + "@total-typescript/ts-reset": "^0.6.1", + "@vitejs/plugin-vue": "^6.0.6", + "@vitest/coverage-v8": "^3.2.4", + "@vue/test-utils": "^2.4.6", + "@vue/tsconfig": "^0.5.1", + "css-loader": "^7.1.4", + "globals": "^16.2.0", + "jsdom": "^26.1.0", + "openapi-typescript": "^7.13.0", + "regenerator-runtime": "^0.14.1", + "sass": "^1.99.0", + "sass-loader": "^16.0.7", + "stylelint-use-logical": "^2.1.3", + "vitest": "^3.2.4", + "vue-loader": "^17.4.2", + "wasm-check": "^2.1.2" + }, + "engines": { + "node": "^22.0.0", + "npm": "^10.5.0" + } +} diff --git a/psalm.xml b/psalm.xml new file mode 100644 index 0000000..6af2140 --- /dev/null +++ b/psalm.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rector.php b/rector.php new file mode 100644 index 0000000..cc8f5a3 --- /dev/null +++ b/rector.php @@ -0,0 +1,24 @@ +withPaths([ + __DIR__ . '/appinfo', + __DIR__ . '/lib', + __DIR__ . '/templates', + __DIR__ . '/tests/php', + ]) + ->withSkipPath(__DIR__ . '/lib/Vendor') + ->withPhpSets(php73: true) + ->withSets([ + NextcloudSets::NEXTCLOUD_27, + ]) + ->withTypeCoverageLevel(0); diff --git a/redocly.yaml b/redocly.yaml new file mode 100644 index 0000000..91a23b6 --- /dev/null +++ b/redocly.yaml @@ -0,0 +1,33 @@ +apis: + openapi@v1: + root: ./openapi.json + x-openapi-ts: + output: ./src/types/openapi/openapi.ts + openapi-administration@v1: + root: ./openapi-administration.json + x-openapi-ts: + output: ./src/types/openapi/openapi-administration.ts + openapi-backend-recording@v1: + root: ./openapi-backend-recording.json + x-openapi-ts: + output: ./src/types/openapi/openapi-backend-recording.ts + openapi-backend-signaling@v1: + root: ./openapi-backend-signaling.json + x-openapi-ts: + output: ./src/types/openapi/openapi-backend-signaling.ts + openapi-backend-sipbridge@v1: + root: ./openapi-backend-sipbridge.json + x-openapi-ts: + output: ./src/types/openapi/openapi-backend-sipbridge.ts + openapi-bots@v1: + root: ./openapi-bots.json + x-openapi-ts: + output: ./src/types/openapi/openapi-bots.ts + openapi-federation@v1: + root: ./openapi-federation.json + x-openapi-ts: + output: ./src/types/openapi/openapi-federation.ts + openapi-full@v1: + root: ./openapi-full.json + x-openapi-ts: + output: ./src/types/openapi/openapi-full.ts diff --git a/rspack.config.js b/rspack.config.js new file mode 100644 index 0000000..ee3b898 --- /dev/null +++ b/rspack.config.js @@ -0,0 +1,230 @@ +/* + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +const browserslistConfig = require('@nextcloud/browserslist-config') +const { defineConfig } = require('@rspack/cli') +const { CssExtractRspackPlugin, LightningCssMinimizerRspackPlugin, DefinePlugin, ProgressPlugin, SwcJsMinimizerRspackPlugin } = require('@rspack/core') +const NodePolyfillPlugin = require('@rspack/plugin-node-polyfill') +const browserslist = require('browserslist') +const path = require('node:path') +const { VueLoaderPlugin } = require('vue-loader') + +// browserslist-rs does not support baseline queries yet +// Manually resolving the browserslist config to the list of browsers with minimal versions +// See: https://github.com/browserslist/browserslist-rs/issues/40 +const browsers = browserslist(browserslistConfig) +const minBrowserVersion = browsers + .map((str) => str.split(' ')) + .reduce((minVersion, [browser, version]) => { + minVersion[browser] = minVersion[browser] ? Math.min(minVersion[browser], parseFloat(version)) : parseFloat(version) + return minVersion + }, {}) +const targets = Object.entries(minBrowserVersion).map(([browser, version]) => `${browser} >=${version}`).join(',') + +module.exports = defineConfig((env) => { + const appName = process.env.npm_package_name + const appVersion = process.env.npm_package_version + + const mode = (env.development && 'development') || (env.production && 'production') || process.env.NODE_ENV || 'production' + const isDev = mode === 'development' + process.env.NODE_ENV = mode + + console.info('Building', appName, appVersion, '\n') + + return { + target: 'web', + mode, + devtool: isDev ? 'cheap-source-map' : 'source-map', + + entry: { + 'admin-settings': path.join(__dirname, 'src', 'mainAdminSettings.js'), + collections: path.join(__dirname, 'src', 'collections.js'), + main: path.join(__dirname, 'src', 'main.js'), + recording: path.join(__dirname, 'src', 'mainRecording.js'), + 'files-sidebar': [ + path.join(__dirname, 'src', 'mainFilesSidebar.js'), + path.join(__dirname, 'src', 'mainFilesSidebarLoader.js'), + ], + 'public-share-auth-sidebar': path.join(__dirname, 'src', 'mainPublicShareAuthSidebar.js'), + 'public-share-sidebar': path.join(__dirname, 'src', 'mainPublicShareSidebar.js'), + flow: path.join(__dirname, 'src', 'flow.js'), + deck: path.join(__dirname, 'src', 'deck.js'), + maps: path.join(__dirname, 'src', 'maps.js'), + search: path.join(__dirname, 'src', 'search.js'), + icons: path.join(__dirname, 'src', 'icons.css'), + }, + + output: { + path: path.resolve('./js'), + filename: `${appName}-[name].js?v=[contenthash]`, + chunkFilename: `${appName}-[name].js?v=[contenthash]`, + // Set publicPath via __webpack_public_path__ + publicPath: 'auto', + // We are working with .wasm and .tflite files as resources on a public path: it must be with the original name in the output folder's root + assetModuleFilename: '[name][ext]?v=[contenthash]', + // We are working with .wasm files as resources on a public path: disabling default wasm loading as source + wasmLoading: false, + enabledWasmLoadingTypes: [], + clean: true, + devtoolNamespace: appName, + // Make sure sourcemaps have a proper path and do not leak local paths + // Source: @nextcloud/webpack-vue-config + devtoolModuleFilenameTemplate(info) { + const rootDir = process.cwd() + const rel = path.relative(rootDir, info.absoluteResourcePath) + return `webpack:///${appName}/${rel}` + }, + }, + + devServer: { + hot: true, + host: '127.0.0.1', + port: 3000, + client: { + overlay: false, + }, + devMiddleware: { + writeToDisk: true, + }, + headers: { + 'Access-Control-Allow-Origin': '*', + }, + }, + + optimization: { + chunkIds: 'named', + splitChunks: { + automaticNameDelimiter: '-', + cacheGroups: { + defaultVendors: { + reuseExistingChunk: true, + }, + }, + }, + minimize: !isDev, + minimizer: [ + new SwcJsMinimizerRspackPlugin({ + minimizerOptions: { + targets, + }, + }), + new LightningCssMinimizerRspackPlugin({ + minimizerOptions: { + targets, + }, + }), + ], + }, + + module: { + rules: [ + { + test: /\.vue$/, + loader: 'vue-loader', + options: { + experimentalInlineMatchResource: true, + }, + }, + { + test: /\.css$/, + use: [ + { + loader: CssExtractRspackPlugin.loader, + }, + 'css-loader', + ], + }, + { + test: /\.scss$/, + use: [ + { + loader: CssExtractRspackPlugin.loader, + }, + 'css-loader', + 'sass-loader', + ], + }, + { + test: /\.ts$/, + exclude: [/node_modules/], + loader: 'builtin:swc-loader', + options: { + jsc: { + parser: { + syntax: 'typescript', + }, + }, + env: { + targets, + }, + }, + type: 'javascript/auto', + }, + { + test: /\.(png|jpe?g|gif|svg|webp)$/i, + type: 'asset', + }, + { + test: /\.(woff2?|eot|ttf|otf)$/i, + type: 'asset/resource', + }, + { + test: /\.wasm$/i, + type: 'asset/resource', + }, + { + test: /\.tflite$/i, + type: 'asset/resource', + }, + { + resourceQuery: /raw/, + type: 'asset/source', + }, + ], + }, + + plugins: [ + new ProgressPlugin(), + + new VueLoaderPlugin(), + + new NodePolyfillPlugin(), + + new DefinePlugin({ + IS_DESKTOP: false, + __IS_DESKTOP__: false, + appName: JSON.stringify(appName), + appVersion: JSON.stringify(appVersion), + // Vue compile time flags + // See: https://vuejs.org/api/compile-time-flags.html#compile-time-flags + // See: https://github.com/vuejs/core/blob/v3.5.24/packages/vue/README.md#bundler-build-feature-flags + // > The build will work without configuring these flags, + // > however it is strongly recommended to properly configure them in order to get proper tree-shaking in the final bundle + // Unlike Vite plugin, vue-loader does not do this automatically for Webpack + // Although documentation says, it is optional, sometimes it breaks with: + // ReferenceError: __VUE_PROD_DEVTOOLS__ is not defined + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false, + }), + + new CssExtractRspackPlugin({ + filename: '../css/talk-[name].css', + chunkFilename: '../css/chunks/[id].chunk.css', + ignoreOrder: true, + }), + ], + + resolve: { + extensions: ['*', '.ts', '.js', '.vue'], + symlinks: false, + fallback: { + fs: false, + }, + }, + + cache: true, + } +}) diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..b04bcf8 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,635 @@ + + + + + + + + + diff --git a/src/FilesSidebarTabApp.vue b/src/FilesSidebarTabApp.vue new file mode 100644 index 0000000..7471231 --- /dev/null +++ b/src/FilesSidebarTabApp.vue @@ -0,0 +1,450 @@ + + + + + + + + diff --git a/src/PublicShareAuthRequestPasswordButton.vue b/src/PublicShareAuthRequestPasswordButton.vue new file mode 100644 index 0000000..6efc963 --- /dev/null +++ b/src/PublicShareAuthRequestPasswordButton.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/src/PublicShareAuthSidebar.vue b/src/PublicShareAuthSidebar.vue new file mode 100644 index 0000000..92af951 --- /dev/null +++ b/src/PublicShareAuthSidebar.vue @@ -0,0 +1,291 @@ + + + + + + + + + diff --git a/src/PublicShareSidebar.vue b/src/PublicShareSidebar.vue new file mode 100644 index 0000000..393d7bf --- /dev/null +++ b/src/PublicShareSidebar.vue @@ -0,0 +1,375 @@ + + + + + + + + + diff --git a/src/PublicShareSidebarTrigger.vue b/src/PublicShareSidebarTrigger.vue new file mode 100644 index 0000000..4241f5f --- /dev/null +++ b/src/PublicShareSidebarTrigger.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/src/RecordingApp.vue b/src/RecordingApp.vue new file mode 100644 index 0000000..f7bada6 --- /dev/null +++ b/src/RecordingApp.vue @@ -0,0 +1,79 @@ + + + + + + + diff --git a/src/__mocks__/capabilities.ts b/src/__mocks__/capabilities.ts new file mode 100644 index 0000000..f3105ac --- /dev/null +++ b/src/__mocks__/capabilities.ts @@ -0,0 +1,248 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import type { Capabilities } from '../types/index.ts' + +export const mockedCapabilities: Capabilities = { + spreed: { + features: [ + 'audio', + 'video', + 'chat-v2', + 'conversation-v4', + 'guest-signaling', + 'empty-group-room', + 'guest-display-names', + 'multi-room-users', + 'favorites', + 'last-room-activity', + 'no-ping', + 'system-messages', + 'delete-messages', + 'mention-flag', + 'in-call-flags', + 'conversation-call-flags', + 'notification-levels', + 'invite-groups-and-mails', + 'locked-one-to-one-rooms', + 'read-only-rooms', + 'listable-rooms', + 'chat-read-marker', + 'chat-unread', + 'webinary-lobby', + 'start-call-flag', + 'chat-replies', + 'circles-support', + 'force-mute', + 'sip-support', + 'sip-support-nopin', + 'chat-read-status', + 'phonebook-search', + 'raise-hand', + 'room-description', + 'rich-object-sharing', + 'temp-user-avatar-api', + 'geo-location-sharing', + 'voice-message-sharing', + 'signaling-v3', + 'publishing-permissions', + 'clear-history', + 'direct-mention-flag', + 'notification-calls', + 'conversation-permissions', + 'rich-object-list-media', + 'rich-object-delete', + 'unified-search', + 'chat-permission', + 'silent-send', + 'silent-call', + 'send-call-notification', + 'talk-polls', + 'breakout-rooms-v1', + 'recording-v1', + 'avatar', + 'chat-get-context', + 'single-conversation-status', + 'chat-keep-notifications', + 'typing-privacy', + 'remind-me-later', + 'bots-v1', + 'markdown-messages', + 'media-caption', + 'session-state', + 'note-to-self', + 'recording-consent', + 'sip-support-dialout', + 'delete-messages-unlimited', + 'edit-messages', + 'silent-send-state', + 'chat-read-last', + 'federation-v1', + 'federation-v2', + 'ban-v1', + 'chat-reference-id', + 'mention-permissions', + 'edit-messages-note-to-self', + 'archived-conversations-v2', + 'talk-polls-drafts', + 'download-call-participants', + 'email-csv-import', + 'conversation-creation-password', + 'call-notification-state-api', + 'schedule-meeting', + 'edit-draft-poll', + 'conversation-creation-all', + 'important-conversations', + 'unbind-conversation', + 'sip-direct-dialin', + 'dashboard-event-rooms', + 'mutual-calendar-events', + 'upcoming-reminders', + 'sensitive-conversations', + 'threads', + // Conditional features + 'message-expiration', + 'reactions', + 'chat-summary-api', + 'call-end-to-end-encryption', + ], + 'features-local': [ + 'favorites', + 'chat-read-status', + 'listable-rooms', + 'phonebook-search', + 'temp-user-avatar-api', + 'unified-search', + 'avatar', + 'remind-me-later', + 'note-to-self', + 'archived-conversations-v2', + 'chat-summary-api', + 'call-notification-state-api', + 'schedule-meeting', + 'conversation-creation-all', + 'important-conversations', + 'sip-direct-dialin', + 'dashboard-event-rooms', + 'mutual-calendar-events', + 'upcoming-reminders', + 'sensitive-conversations', + ], + config: { + attachments: { + allowed: true, + folder: '/Talk', + }, + call: { + enabled: true, + 'breakout-rooms': true, + recording: true, + 'recording-consent': 0, + 'supported-reactions': ['❤️', '🎉', '👏', '👍', '👎', '😂', '🤩', '🤔', '😲', '😥'], + 'predefined-backgrounds': ['1_office.jpg', '2_home.jpg', '3_abstract.jpg'], + 'predefined-backgrounds-v2': ['/apps/spreed/img/backgrounds/1_office.jpg', '/apps/spreed/img/backgrounds/2_home.jpg', '/apps/spreed/img/backgrounds/3_abstract.jpg'], + 'can-upload-background': true, + 'sip-enabled': true, + 'sip-dialout-enabled': true, + 'default-phone-region': '', + 'can-enable-sip': true, + 'start-without-media': false, + 'max-duration': 0, + 'blur-virtual-background': false, + 'end-to-end-encryption': false, + 'live-transcription': false, + 'play-sounds': true, + 'grid-limit': 0, + 'grid-limit-enforced': false, + }, + chat: { + 'max-length': 32000, + 'read-privacy': 0, + 'has-translation-providers': true, + 'has-translation-task-providers': true, + 'typing-privacy': 0, + 'summary-threshold': 100, + 'matterbridge-enabled': false, + }, + conversations: { + 'can-create': true, + 'force-passwords': false, + 'list-style': 'two-lines', + 'description-length': 2000, + 'retention-event': 28, + 'retention-phone': 7, + 'retention-instant-meetings': 1, + }, + federation: { + enabled: false, + 'incoming-enabled': false, + 'outgoing-enabled': false, + 'only-trusted-servers': true, + }, + previews: { + 'max-gif-size': 3145728, + }, + signaling: { + 'session-ping-limit': 200, + 'hello-v2-token-key': '123', + mode: 'internal', + }, + experiments: { + enabled: 0, + }, + permissions: { + 'max-default': 510, + 'max-custom': 511, + default: 502, + }, + }, + 'config-local': { + attachments: [ + 'allowed', + 'folder', + ], + call: [ + 'predefined-backgrounds', + 'predefined-backgrounds-v2', + 'can-upload-background', + 'start-without-media', + 'blur-virtual-background', + ], + chat: [ + 'read-privacy', + 'has-translation-providers', + 'has-translation-task-providers', + 'typing-privacy', + 'summary-threshold', + ], + conversations: [ + 'can-create', + 'list-style', + 'description-length', + ], + federation: [ + 'enabled', + 'incoming-enabled', + 'outgoing-enabled', + 'only-trusted-servers', + ], + previews: [ + 'max-gif-size', + ], + signaling: [ + 'session-ping-limit', + 'hello-v2-token-key', + ], + experiments: [ + 'enabled', + ], + }, + version: '20.0.0-dev.0', + }, +} + +export const mockedRemotes = { + 'https://nextcloud1.local': { ...mockedCapabilities, hash: 'abc123', tokens: ['TOKEN3FED1'] }, + 'https://nextcloud2.local': { ...mockedCapabilities, hash: 'def123', tokens: ['TOKEN5FED2'] }, +} diff --git a/src/__mocks__/router.js b/src/__mocks__/router.js new file mode 100644 index 0000000..d2b86ef --- /dev/null +++ b/src/__mocks__/router.js @@ -0,0 +1,10 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import { createTalkRouter } from '../router/router.ts' + +const router = createTalkRouter() +router.addRoute({ path: '/', name: 'none', redirect: '/apps/spreed', component: { template: '
' } }) + +export default router diff --git a/src/__mocks__/svg.js b/src/__mocks__/svg.js new file mode 100644 index 0000000..70674e5 --- /dev/null +++ b/src/__mocks__/svg.js @@ -0,0 +1,5 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +export default 'SvgMock' diff --git a/src/__mocks__/tabbable.js b/src/__mocks__/tabbable.js new file mode 100644 index 0000000..9ef2b90 --- /dev/null +++ b/src/__mocks__/tabbable.js @@ -0,0 +1,18 @@ +/* + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { vi } from 'vitest' + +// https://github.com/focus-trap/tabbable#testing-in-jsdom +export default async () => { + const tabbable = await vi.importActual('tabbable') + return { + ...tabbable, + tabbable: vi.fn(), + focusable: vi.fn(), + isFocusable: vi.fn(), + isTabbable: vi.fn(), + } +} diff --git a/src/__mocks__/webdav.js b/src/__mocks__/webdav.js new file mode 100644 index 0000000..b01cb95 --- /dev/null +++ b/src/__mocks__/webdav.js @@ -0,0 +1,13 @@ +/* + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { vi } from 'vitest' +import { createClient } from 'webdav' + +vi.mock('webdav', () => ({ + createClient: vi.fn(), +})) + +export { createClient } diff --git a/src/assets/admin-settings.css b/src/assets/admin-settings.css new file mode 100644 index 0000000..7ae22e3 --- /dev/null +++ b/src/assets/admin-settings.css @@ -0,0 +1,49 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +.settings-section-placeholder { + --settings-section-placeholder-header-height: 30px; + --settings-section-placeholder-line-height: 1lh; + --settings-section-placeholder-padding: 1em; + --settings-section-placeholder-image: linear-gradient(90deg, var(--color-placeholder-light) 65%, var(--color-placeholder-dark) 70%, var(--color-placeholder-light) 75%); + position: relative; + height: calc(2 * (7 * var(--default-grid-baseline)) + var(--settings-section-placeholder-header-height) + 3 * (var(--settings-section-placeholder-line-height) + 1em)); +} + +.settings-section-placeholder::before, +.settings-section-placeholder::after { + content: ''; + position: absolute; + inset: calc(7 * var(--default-grid-baseline)); + background-clip: content-box; + background-origin: content-box; + animation: loading-animation 3s forwards infinite linear; +} + +.settings-section-placeholder::before { + max-width: 300px; + background: var(--settings-section-placeholder-image) 0 0 / 200vw var(--settings-section-placeholder-header-height) repeat-x content-box; +} + +.settings-section-placeholder::after { + max-width: 900px; + background: + var(--settings-section-placeholder-image) 0 calc(var(--settings-section-placeholder-header-height) + 1em + 0 * (var(--settings-section-placeholder-line-height) + 1em)) / 200vw var(--settings-section-placeholder-line-height) repeat-x content-box, + var(--settings-section-placeholder-image) 0 calc(var(--settings-section-placeholder-header-height) + 1em + 1 * (var(--settings-section-placeholder-line-height) + 1em)) / 200vw var(--settings-section-placeholder-line-height) repeat-x content-box, + var(--settings-section-placeholder-image) 0 calc(var(--settings-section-placeholder-header-height) + 1em + 2 * (var(--settings-section-placeholder-line-height) + 1em)) / 200vw var(--settings-section-placeholder-line-height) repeat-x content-box; +} + +.settings-section-placeholder + .settings-section-placeholder { + border-top: 1px solid var(--color-border); +} + +@keyframes loading-animation { + 0% { + background-position-x: 0; + } + 100% { + background-position-x: 140vw; + } +} diff --git a/src/assets/markdown.scss b/src/assets/markdown.scss new file mode 100644 index 0000000..45d5929 --- /dev/null +++ b/src/assets/markdown.scss @@ -0,0 +1,68 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +@mixin markdown { + // Overwrite core styles, otherwise h4 is lesser than default font-size + h4 { + font-size: 100%; + } + + em { + font-style: italic; + } + + ul, + ol { + /* stylelint-disable-next-line csstools/use-logical */ + padding-left: 0; + padding-inline-start: 15px; + + &.contains-task-list { + padding: 0; + } + } + + input:disabled + .checkbox-content { + opacity: 1 !important; + } + + div:has(table) { + overflow-x: auto; + } + + pre { + padding: 4px; + margin: 0; + border-radius: var(--border-radius); + background-color: var(--color-background-dark); + + & code { + margin: 0; + padding: 0; + } + } + + code { + display: inline-block; + max-width: 100%; + padding: 2px 4px; + margin: 2px 0; + border-radius: var(--border-radius); + background-color: var(--color-background-dark); + } + + blockquote { + /* stylelint-disable-next-line csstools/use-logical */ + padding-left: 0; + padding-inline-start: 13px; + /* stylelint-disable-next-line csstools/use-logical */ + border-left: none; + border-inline-start: 4px solid var(--color-border-dark); + } + + img { + max-width: min(100%, 600px); + } +} diff --git a/src/assets/publicshareauth.css b/src/assets/publicshareauth.css new file mode 100644 index 0000000..8814920 --- /dev/null +++ b/src/assets/publicshareauth.css @@ -0,0 +1,52 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +/* Special layout to include the Talk sidebar */ + +/* The original style of the body is kept until the layout has been adjusted to + * include the Talk sidebar. If only "#body-login" was used, immediately after + * load and before the sidebar was injected the original elements would be using + * the style for the adjusted layout, which is not the proper one for them, and + * this would cause the elements to "jump" to their final position once the + * layout was adjusted. */ +body.talk-sidebar-enabled { + /* Move rules set for body by guest.scss to the wrapped body. */ + flex-direction: row; + height: 100vh; +} + +body.talk-sidebar-enabled #body-login { + display: flex; + justify-content: center; + + background-position: 50% 50%; + background-repeat: repeat; + background-size: 275px, contain; + background-attachment: fixed; + + width: 100%; + height: 100%; + + /* Changed from guest.scss. */ + flex-direction: row; + align-items: stretch; +} + +/* #body-login should be used to override the #content rules set in server. */ +#body-login #content { + position: relative; + + flex-grow: 1; + + flex-direction: column; + align-items: center; + + height: auto; + + overflow-x: hidden; + + /* Override "padding-top: 50px" set in server. */ + padding-top: 0; +} diff --git a/src/assets/unified-search.css b/src/assets/unified-search.css new file mode 100644 index 0000000..44584c2 --- /dev/null +++ b/src/assets/unified-search.css @@ -0,0 +1,35 @@ +/** + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +.reference-picker .conversation-icon, +.unified-search .conversation-icon { + background-color: var(--color-background-darker); + background-size: 22px !important; +} + +/* We always want to use the white icons, this is why we don't use var(--color-white) here.*/ +.reference-picker .conversation-icon.icon-public-white, +.unified-search .conversation-icon.icon-public-white { + background-image: url(../../img/icon-public-white.svg); +} + +.reference-picker .conversation-icon.icon-contacts-white, +.unified-search .conversation-icon.icon-contacts-white { + background-image: url(../../img/icon-contacts-white.svg); +} + +.reference-picker .conversation-icon.icon-password-white, +.unified-search .conversation-icon.icon-password-white { + background-image: url(../../img/icon-password-white.svg); +} + +.reference-picker .conversation-icon.icon-text-white, +.unified-search .conversation-icon.icon-text-white { + background-image: url(../../img/icon-text-white.svg); +} + +.reference-picker .conversation-icon.icon-mail-white, +.unified-search .conversation-icon.icon-mail-white { + background-image: url(../../img/icon-mail-white.svg); +} diff --git a/src/assets/variables.scss b/src/assets/variables.scss new file mode 100644 index 0000000..67c9f7e --- /dev/null +++ b/src/assets/variables.scss @@ -0,0 +1,30 @@ +/** + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +/** Messages list dimensions: + * - text max width: ~750px (80 characters per line is recommended by W3C standard) + * - avatar width: 32px (AVATAR.SIZE.SMALL) + 16px (paddings) = 48px + * - info width: 8ch(~68px) (timestamp) + 40px (checkmark with paddings) = ~108px + * - list max width: 48px (avatar width) + 1058px (text width with paddings) + ~108px (info width) = ~1214px + * - input max width: ~1214px (list max width) - 100px (send button) = ~1114px + */ +$messages-text-max-width: calc(50 * var(--default-font-size)); +$messages-avatar-width: calc(32px + 4 * var(--default-grid-baseline)); +$messages-info-width: calc(8ch + var(--clickable-area-small, 24px) + 4 * var(--default-grid-baseline)); +$messages-list-max-width: calc($messages-avatar-width + $messages-text-max-width + 2 * var(--default-grid-baseline) + $messages-info-width); +$messages-input-max-width: calc($messages-list-max-width - 100px); + +// background color of call container +$color-call-background: rgba(0, 0, 0, 0.7); + +// transition +$transition-duration-quick: var(--animation-quick, 100ms); +$transition-duration-slow: var(--animation-slow, 300ms); + +$transition: all $transition-duration-quick ease-in-out; +$transition-slow: all $transition-duration-slow ease-in-out; + +// To be in sync with nextcloud-vue +$breakpoint-mobile-small: 512px; \ No newline at end of file diff --git a/src/collections.js b/src/collections.js new file mode 100644 index 0000000..abd1e6b --- /dev/null +++ b/src/collections.js @@ -0,0 +1,24 @@ +/** + * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { getCSPNonce } from '@nextcloud/auth' +import { t } from '@nextcloud/l10n' +import { requestRoomSelection } from './utils/requestRoomSelection.js' + +__webpack_nonce__ = getCSPNonce() +// eslint-disable-next-line +__webpack_public_path__ = OC.linkTo('spreed', 'js/') + +window.OCP.Collaboration.registerType('room', { + action: async () => { + const conversation = await requestRoomSelection('spreed-room-select', {}) + if (!conversation) { + throw new Error('User cancelled resource selection') + } + return conversation.token + }, + typeString: t('spreed', 'Link to a conversation'), + typeIconClass: 'icon-talk', +}) diff --git a/src/components/AdminSettings/AllowedGroups.vue b/src/components/AdminSettings/AllowedGroups.vue new file mode 100644 index 0000000..c241807 --- /dev/null +++ b/src/components/AdminSettings/AllowedGroups.vue @@ -0,0 +1,251 @@ + + + + + + + diff --git a/src/components/AdminSettings/BotsSettings.vue b/src/components/AdminSettings/BotsSettings.vue new file mode 100644 index 0000000..154770f --- /dev/null +++ b/src/components/AdminSettings/BotsSettings.vue @@ -0,0 +1,196 @@ + + + + + + + diff --git a/src/components/AdminSettings/FederationSettings.vue b/src/components/AdminSettings/FederationSettings.vue new file mode 100644 index 0000000..8ee332f --- /dev/null +++ b/src/components/AdminSettings/FederationSettings.vue @@ -0,0 +1,269 @@ + + + + + + + diff --git a/src/components/AdminSettings/GeneralSettings.vue b/src/components/AdminSettings/GeneralSettings.vue new file mode 100644 index 0000000..454fc73 --- /dev/null +++ b/src/components/AdminSettings/GeneralSettings.vue @@ -0,0 +1,229 @@ + + + + + + + diff --git a/src/components/AdminSettings/HostedSignalingServer.vue b/src/components/AdminSettings/HostedSignalingServer.vue new file mode 100644 index 0000000..ec1e3a9 --- /dev/null +++ b/src/components/AdminSettings/HostedSignalingServer.vue @@ -0,0 +1,321 @@ + + + + + + + diff --git a/src/components/AdminSettings/MatterbridgeIntegration.vue b/src/components/AdminSettings/MatterbridgeIntegration.vue new file mode 100644 index 0000000..c985298 --- /dev/null +++ b/src/components/AdminSettings/MatterbridgeIntegration.vue @@ -0,0 +1,186 @@ + + + + + + + diff --git a/src/components/AdminSettings/RecordingServer.vue b/src/components/AdminSettings/RecordingServer.vue new file mode 100644 index 0000000..e16468b --- /dev/null +++ b/src/components/AdminSettings/RecordingServer.vue @@ -0,0 +1,221 @@ + + + + + + + diff --git a/src/components/AdminSettings/RecordingServers.vue b/src/components/AdminSettings/RecordingServers.vue new file mode 100644 index 0000000..d5af393 --- /dev/null +++ b/src/components/AdminSettings/RecordingServers.vue @@ -0,0 +1,297 @@ + + + + + + + diff --git a/src/components/AdminSettings/SIPBridge.vue b/src/components/AdminSettings/SIPBridge.vue new file mode 100644 index 0000000..3b73fd6 --- /dev/null +++ b/src/components/AdminSettings/SIPBridge.vue @@ -0,0 +1,333 @@ + + + + + + + diff --git a/src/components/AdminSettings/SignalingServer.vue b/src/components/AdminSettings/SignalingServer.vue new file mode 100644 index 0000000..b8898a3 --- /dev/null +++ b/src/components/AdminSettings/SignalingServer.vue @@ -0,0 +1,307 @@ + + + + + + + diff --git a/src/components/AdminSettings/SignalingServers.vue b/src/components/AdminSettings/SignalingServers.vue new file mode 100644 index 0000000..b6715a9 --- /dev/null +++ b/src/components/AdminSettings/SignalingServers.vue @@ -0,0 +1,224 @@ + + + + + + + diff --git a/src/components/AdminSettings/StunServer.vue b/src/components/AdminSettings/StunServer.vue new file mode 100644 index 0000000..37611fc --- /dev/null +++ b/src/components/AdminSettings/StunServer.vue @@ -0,0 +1,142 @@ + + + + + + + diff --git a/src/components/AdminSettings/StunServers.vue b/src/components/AdminSettings/StunServers.vue new file mode 100644 index 0000000..1f21a2c --- /dev/null +++ b/src/components/AdminSettings/StunServers.vue @@ -0,0 +1,146 @@ + + + + + + + diff --git a/src/components/AdminSettings/TurnServer.vue b/src/components/AdminSettings/TurnServer.vue new file mode 100644 index 0000000..cfb143e --- /dev/null +++ b/src/components/AdminSettings/TurnServer.vue @@ -0,0 +1,444 @@ + + + + + + + diff --git a/src/components/AdminSettings/TurnServers.vue b/src/components/AdminSettings/TurnServers.vue new file mode 100644 index 0000000..25ea788 --- /dev/null +++ b/src/components/AdminSettings/TurnServers.vue @@ -0,0 +1,162 @@ + + + + + + + diff --git a/src/components/AdminSettings/WebServerSetupChecks.vue b/src/components/AdminSettings/WebServerSetupChecks.vue new file mode 100644 index 0000000..68410b9 --- /dev/null +++ b/src/components/AdminSettings/WebServerSetupChecks.vue @@ -0,0 +1,161 @@ + + + + + + + diff --git a/src/components/AvatarWrapper/AvatarWrapper.spec.js b/src/components/AvatarWrapper/AvatarWrapper.spec.js new file mode 100644 index 0000000..d47f78a --- /dev/null +++ b/src/components/AvatarWrapper/AvatarWrapper.spec.js @@ -0,0 +1,134 @@ +import { t } from '@nextcloud/l10n' +/** + * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ +import { mount, shallowMount } from '@vue/test-utils' +import { describe, expect, it, test } from 'vitest' +import NcAvatar from '@nextcloud/vue/components/NcAvatar' +import AvatarWrapper from './AvatarWrapper.vue' +import { ATTENDEE, AVATAR } from '../../constants.ts' + +describe('AvatarWrapper.vue', () => { + const USER_ID = 'user-id' + const USER_NAME = 'John Doe' + const PRELOADED_USER_STATUS = { status: 'online', message: null, icon: null } + + describe('render user avatar', () => { + test('component renders NcAvatar with standard size by default', () => { + const wrapper = shallowMount(AvatarWrapper, { + props: { + name: USER_NAME, + }, + }) + + const avatar = wrapper.findComponent(NcAvatar) + expect(avatar.exists()).toBeTruthy() + expect(avatar.props('size')).toBe(AVATAR.SIZE.DEFAULT) + }) + + test('component does render NcAvatar for non-users', () => { + const wrapper = shallowMount(AvatarWrapper, { + props: { + name: 'Email Guest', + source: ATTENDEE.ACTOR_TYPE.EMAILS, + }, + }) + + const avatar = wrapper.findComponent(NcAvatar) + expect(avatar.exists()).toBeTruthy() + }) + + test('component does render NcAvatar for federated users', () => { + const wrapper = shallowMount(AvatarWrapper, { + props: { + token: 'XXXTOKENXXX', + name: 'Federated User', + source: ATTENDEE.ACTOR_TYPE.FEDERATED_USERS, + }, + }) + + const avatar = wrapper.findComponent(NcAvatar) + expect(avatar.exists()).toBeTruthy() + }) + + test('component renders NcAvatar with specified size', () => { + const size = 22 + const wrapper = shallowMount(AvatarWrapper, { + props: { + name: USER_NAME, + size, + }, + }) + + const avatar = wrapper.findComponent(NcAvatar) + expect(avatar.props('size')).toBe(size) + }) + + test('component pass props to NcAvatar correctly', async () => { + const wrapper = shallowMount(AvatarWrapper, { + props: { + id: USER_ID, + name: USER_NAME, + source: ATTENDEE.ACTOR_TYPE.USERS, + showUserStatus: true, + preloadedUserStatus: PRELOADED_USER_STATUS, + }, + }) + + const avatar = wrapper.findComponent(NcAvatar) + await avatar.vm.$nextTick() + + expect(avatar.props('user')).toBe(USER_ID) + expect(avatar.props('displayName')).toBe(USER_NAME) + expect(avatar.props('hideStatus')).toBe(false) + expect(avatar.props('verboseStatus')).toBe(true) + expect(avatar.props('preloadedUserStatus')).toStrictEqual(PRELOADED_USER_STATUS) + expect(avatar.props('size')).toBe(AVATAR.SIZE.DEFAULT) + }) + }) + + describe('render specific icons', () => { + const testCases = [ + [null, ATTENDEE.CHANGELOG_BOT_ID, 'Talk updates', ATTENDEE.ACTOR_TYPE.BOTS, 'icon-changelog'], + [null, ATTENDEE.SAMPLE_BOT_ID, 'Nextcloud', ATTENDEE.ACTOR_TYPE.BOTS, 'icon-changelog'], + [null, 'federated_user/id', USER_NAME, ATTENDEE.ACTOR_TYPE.FEDERATED_USERS, 'icon-user'], + [null, 'guest/id', '', ATTENDEE.ACTOR_TYPE.GUESTS, 'icon-user'], + [null, 'guest/id', t('spreed', 'Guest'), ATTENDEE.ACTOR_TYPE.GUESTS, 'icon-user'], + [null, 'guest/id', t('spreed', 'Guest'), ATTENDEE.ACTOR_TYPE.EMAILS, 'icon-user'], + [null, 'deleted_users', '', ATTENDEE.ACTOR_TYPE.DELETED_USERS, 'icon-user'], + ['new', 'guest/id', 'test@mail.com', ATTENDEE.ACTOR_TYPE.EMAILS, 'icon-mail'], + [null, 'sha-phone', '+12345...', ATTENDEE.ACTOR_TYPE.PHONES, 'icon-phone'], + [null, 'team/id', 'Team', ATTENDEE.ACTOR_TYPE.CIRCLES, 'icon-team'], + [null, 'group/id', 'Group', ATTENDEE.ACTOR_TYPE.GROUPS, 'icon-contacts'], + ] + + it.each(testCases)('renders for token \'%s\', id \'%s\', name \'%s\' and source \'%s\' icon \'%s\'', (token, id, name, source, result) => { + const wrapper = shallowMount(AvatarWrapper, { + props: { token, id, name, source }, + }) + + const avatar = wrapper.find('.avatar') + expect(avatar.exists()).toBeTruthy() + expect(avatar.attributes('iconclass')).toContain(result) + }) + }) + + describe('render specific symbols', () => { + const testCases = [ + ['guest/id', USER_NAME, ATTENDEE.ACTOR_TYPE.GUESTS, USER_NAME.charAt(0)], + ['guest/id', USER_NAME, ATTENDEE.ACTOR_TYPE.EMAILS, USER_NAME.charAt(0)], + ['bot-id', USER_NAME, ATTENDEE.ACTOR_TYPE.BOTS, '>_'], + ] + + it.each(testCases)('renders for id \'%s\', name \'%s\' and source \'%s\' symbol \'%s\'', (id, name, source, result) => { + const wrapper = mount(AvatarWrapper, { + props: { name, source }, + }) + + const avatar = wrapper.find('.avatar') + expect(avatar.exists()).toBeTruthy() + expect(avatar.text()).toBe(result) + }) + }) +}) diff --git a/src/components/AvatarWrapper/AvatarWrapper.vue b/src/components/AvatarWrapper/AvatarWrapper.vue new file mode 100644 index 0000000..e2041c9 --- /dev/null +++ b/src/components/AvatarWrapper/AvatarWrapper.vue @@ -0,0 +1,377 @@ + + + + + + + diff --git a/src/components/BreakoutRoomsEditor/BreakoutRoomsEditor.vue b/src/components/BreakoutRoomsEditor/BreakoutRoomsEditor.vue new file mode 100644 index 0000000..f0c9eef --- /dev/null +++ b/src/components/BreakoutRoomsEditor/BreakoutRoomsEditor.vue @@ -0,0 +1,212 @@ + + + + + + + diff --git a/src/components/BreakoutRoomsEditor/BreakoutRoomsParticipantsEditor.vue b/src/components/BreakoutRoomsEditor/BreakoutRoomsParticipantsEditor.vue new file mode 100644 index 0000000..7d30dd2 --- /dev/null +++ b/src/components/BreakoutRoomsEditor/BreakoutRoomsParticipantsEditor.vue @@ -0,0 +1,370 @@ + + + + + + + diff --git a/src/components/BreakoutRoomsEditor/SelectableParticipant.vue b/src/components/BreakoutRoomsEditor/SelectableParticipant.vue new file mode 100644 index 0000000..27319bd --- /dev/null +++ b/src/components/BreakoutRoomsEditor/SelectableParticipant.vue @@ -0,0 +1,241 @@ + + + + + + + diff --git a/src/components/BreakoutRoomsEditor/SendMessageDialog.vue b/src/components/BreakoutRoomsEditor/SendMessageDialog.vue new file mode 100644 index 0000000..4a4f5e3 --- /dev/null +++ b/src/components/BreakoutRoomsEditor/SendMessageDialog.vue @@ -0,0 +1,98 @@ + + + + + + + diff --git a/src/components/CalendarEventsDialog.vue b/src/components/CalendarEventsDialog.vue new file mode 100644 index 0000000..1f7e97d --- /dev/null +++ b/src/components/CalendarEventsDialog.vue @@ -0,0 +1,681 @@ + + + + + + + diff --git a/src/components/CallView/BottomBar.vue b/src/components/CallView/BottomBar.vue new file mode 100644 index 0000000..0f54898 --- /dev/null +++ b/src/components/CallView/BottomBar.vue @@ -0,0 +1,482 @@ + + + + + + + diff --git a/src/components/CallView/CallFailedDialog.vue b/src/components/CallView/CallFailedDialog.vue new file mode 100644 index 0000000..b73ac25 --- /dev/null +++ b/src/components/CallView/CallFailedDialog.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/components/CallView/CallView.vue b/src/components/CallView/CallView.vue new file mode 100644 index 0000000..e1ecad9 --- /dev/null +++ b/src/components/CallView/CallView.vue @@ -0,0 +1,978 @@ + + + + + + + diff --git a/src/components/CallView/Grid/VideosGrid.vue b/src/components/CallView/Grid/VideosGrid.vue new file mode 100644 index 0000000..d570188 --- /dev/null +++ b/src/components/CallView/Grid/VideosGrid.vue @@ -0,0 +1,1155 @@ + + + + + + + diff --git a/src/components/CallView/Grid/gridPlaceholders.ts b/src/components/CallView/Grid/gridPlaceholders.ts new file mode 100644 index 0000000..b0c4c14 --- /dev/null +++ b/src/components/CallView/Grid/gridPlaceholders.ts @@ -0,0 +1,92 @@ +/** + * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { generateFilePath } from '@nextcloud/router' + +/** + * Mock participant image for placeholders + * + * @param i index + */ +export function placeholderImage(i: number) { + return generateFilePath('spreed', 'docs', 'screenshotplaceholders/placeholder-' + (i % 9) + '.jpeg') +} + +/** + * Mock participant name for placeholders + * + * @param i index + * @param showKey show key next to the name + */ +export function placeholderName(i: number, showKey: boolean = false): string { + switch (i % 9) { + case 0: + return 'Sandra McKinney' + (showKey ? ` | ${i}` : '') + case 1: + return 'Chris Wurst' + (showKey ? ` | ${i}` : '') + case 2: + return 'Edeltraut Bobb' + (showKey ? ` | ${i}` : '') + case 3: + return 'Arthur Blitz' + (showKey ? ` | ${i}` : '') + case 4: + return 'Roeland Douma' + (showKey ? ` | ${i}` : '') + case 5: + return 'Vanessa Steg' + (showKey ? ` | ${i}` : '') + case 6: + return 'Emily Grant' + (showKey ? ` | ${i}` : '') + case 7: + return 'Tobias Kaminsky' + (showKey ? ` | ${i}` : '') + case 8: + default: + return 'Adrian Ada' + (showKey ? ` | ${i}` : '') + } +} + +/** + * Mock participant model for placeholders + * + * @param i index + */ +export function placeholderModel(i: number) { + return { + attributes: { + audioAvailable: [1, 2, 4, 5, 7, 8].includes(i % 9), + audioEnabled: (i % 9) === 8, + videoAvailable: true, + screen: false, + currentVolume: 0.75, + volumeThreshold: 0.75, + localScreen: false, + raisedHand: { + state: [0, 1, 6].includes(i % 9), + }, + }, + forceMute: () => {}, + on: () => {}, + off: () => {}, + getWebRtc: () => { + return { + connection: { + getSendVideoIfAvailable: () => {}, + }, + } + }, + } +} + +/** + * Mock shared data for placeholders + */ +export function placeholderSharedData() { + return { + videoEnabled: { + isVideoEnabled: () => true, + }, + remoteVideoBlocker: { + isVideoEnabled: () => true, + }, + screenVisible: false, + } +} diff --git a/src/components/CallView/shared/EmptyCallView.vue b/src/components/CallView/shared/EmptyCallView.vue new file mode 100644 index 0000000..5c26c75 --- /dev/null +++ b/src/components/CallView/shared/EmptyCallView.vue @@ -0,0 +1,260 @@ + + + + + + + diff --git a/src/components/CallView/shared/LiveTranscriptionRenderer.vue b/src/components/CallView/shared/LiveTranscriptionRenderer.vue new file mode 100644 index 0000000..825c7fe --- /dev/null +++ b/src/components/CallView/shared/LiveTranscriptionRenderer.vue @@ -0,0 +1,435 @@ + + + + + + + diff --git a/src/components/CallView/shared/LocalAudioControlButton.vue b/src/components/CallView/shared/LocalAudioControlButton.vue new file mode 100644 index 0000000..eea621b --- /dev/null +++ b/src/components/CallView/shared/LocalAudioControlButton.vue @@ -0,0 +1,400 @@ + + + + + + + diff --git a/src/components/CallView/shared/LocalVideo.vue b/src/components/CallView/shared/LocalVideo.vue new file mode 100644 index 0000000..0fb03ba --- /dev/null +++ b/src/components/CallView/shared/LocalVideo.vue @@ -0,0 +1,539 @@ + + + + + + + diff --git a/src/components/CallView/shared/LocalVideoControlButton.vue b/src/components/CallView/shared/LocalVideoControlButton.vue new file mode 100644 index 0000000..95330e6 --- /dev/null +++ b/src/components/CallView/shared/LocalVideoControlButton.vue @@ -0,0 +1,306 @@ + + + + + + + diff --git a/src/components/CallView/shared/PresenterOverlay.vue b/src/components/CallView/shared/PresenterOverlay.vue new file mode 100644 index 0000000..2ab829b --- /dev/null +++ b/src/components/CallView/shared/PresenterOverlay.vue @@ -0,0 +1,220 @@ + + + + + + diff --git a/src/components/CallView/shared/ReactionToaster.vue b/src/components/CallView/shared/ReactionToaster.vue new file mode 100644 index 0000000..881ad0f --- /dev/null +++ b/src/components/CallView/shared/ReactionToaster.vue @@ -0,0 +1,305 @@ + + + + + + + diff --git a/src/components/CallView/shared/ScreenShare.vue b/src/components/CallView/shared/ScreenShare.vue new file mode 100644 index 0000000..75716b1 --- /dev/null +++ b/src/components/CallView/shared/ScreenShare.vue @@ -0,0 +1,274 @@ + + + + + + + diff --git a/src/components/CallView/shared/TranscriptBlock.spec.js b/src/components/CallView/shared/TranscriptBlock.spec.js new file mode 100644 index 0000000..df5a498 --- /dev/null +++ b/src/components/CallView/shared/TranscriptBlock.spec.js @@ -0,0 +1,194 @@ +/* + * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { shallowMount } from '@vue/test-utils' +import { beforeEach, describe, expect, test } from 'vitest' +import TranscriptBlock from './TranscriptBlock.vue' + +describe('TranscriptBlock.vue', () => { + describe('remove last chunk from lines', () => { + let wrapper + let lines + + beforeEach(() => { + wrapper = shallowMount(TranscriptBlock, { + props: { + token: 'theToken', + model: { + attributes: { + peerId: 'thePeerId', + actorId: 'theActorId', + actorType: 'theActorType', + userId: 'theUserId', + name: 'The user name', + }, + }, + chunks: [], + rightToLeft: false, + }, + }) + + lines = wrapper.vm.$data.lines + }) + + test('no lines', () => { + wrapper.vm.removeLastChunkFromLines() + + expect(lines.length).toBe(0) + }) + + test('single line with single chunk', () => { + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 42, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines.length).toBe(0) + }) + + test('single line with several chunks', () => { + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 108, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines).toEqual([ + { + firstChunkIndex: 42, + lastChunkIndex: 107, + }, + ]) + }) + + test('several lines with single chunk', () => { + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 42, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines.length).toBe(0) + }) + + describe('several lines with several chunks', () => { + test('last chunk filling last line', () => { + lines.push({ + firstChunkIndex: 23, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines).toEqual([ + { + firstChunkIndex: 23, + lastChunkIndex: 42, + }, + ]) + }) + + test('last chunk filling several lines', () => { + lines.push({ + firstChunkIndex: 23, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines).toEqual([ + { + firstChunkIndex: 23, + lastChunkIndex: 42, + }, + ]) + }) + + test('last chunk partially in last line', () => { + lines.push({ + firstChunkIndex: 23, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 108, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines).toEqual([ + { + firstChunkIndex: 23, + lastChunkIndex: 42, + }, + { + firstChunkIndex: 42, + lastChunkIndex: 107, + }, + ]) + }) + + test('last chunk partially in several lines', () => { + lines.push({ + firstChunkIndex: 23, + lastChunkIndex: 42, + }) + lines.push({ + firstChunkIndex: 42, + lastChunkIndex: 108, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + lines.push({ + firstChunkIndex: 108, + lastChunkIndex: 108, + }) + + wrapper.vm.removeLastChunkFromLines() + + expect(lines).toEqual([ + { + firstChunkIndex: 23, + lastChunkIndex: 42, + }, + { + firstChunkIndex: 42, + lastChunkIndex: 107, + }, + ]) + }) + }) + }) +}) diff --git a/src/components/CallView/shared/TranscriptBlock.vue b/src/components/CallView/shared/TranscriptBlock.vue new file mode 100644 index 0000000..c90bb33 --- /dev/null +++ b/src/components/CallView/shared/TranscriptBlock.vue @@ -0,0 +1,416 @@ + + + + + + + diff --git a/src/components/CallView/shared/VideoBackground.vue b/src/components/CallView/shared/VideoBackground.vue new file mode 100644 index 0000000..ff86673 --- /dev/null +++ b/src/components/CallView/shared/VideoBackground.vue @@ -0,0 +1,61 @@ + + + + + + + diff --git a/src/components/CallView/shared/VideoBottomBar.spec.js b/src/components/CallView/shared/VideoBottomBar.spec.js new file mode 100644 index 0000000..9accc2c --- /dev/null +++ b/src/components/CallView/shared/VideoBottomBar.spec.js @@ -0,0 +1,391 @@ +/* + * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { emit } from '@nextcloud/event-bus' +import { t } from '@nextcloud/l10n' +import { mount } from '@vue/test-utils' +import { cloneDeep } from 'lodash' +import { createPinia, setActivePinia } from 'pinia' +import { afterEach, beforeEach, describe, expect, test, vi } from 'vitest' +import { createStore } from 'vuex' +import NcButton from '@nextcloud/vue/components/NcButton' +import IconAlertCircleOutline from 'vue-material-design-icons/AlertCircleOutline.vue' +import IconHandBackLeft from 'vue-material-design-icons/HandBackLeft.vue' +import IconVideo from 'vue-material-design-icons/Video.vue' +import IconVideoOffOutline from 'vue-material-design-icons/VideoOffOutline.vue' +import VideoBottomBar from './VideoBottomBar.vue' +import { CONVERSATION, PARTICIPANT } from '../../../constants.ts' +import storeConfig from '../../../store/storeConfig.js' +import { useActorStore } from '../../../stores/actor.ts' +import { useCallViewStore } from '../../../stores/callView.ts' +import { findNcButton } from '../../../test-helpers.js' +import { ConnectionState } from '../../../utils/webrtc/models/CallParticipantModel.js' + +vi.mock('@nextcloud/event-bus', () => ({ + emit: vi.fn(), + subscribe: vi.fn(), +})) + +describe('VideoBottomBar.vue', () => { + const TOKEN = 'XXTOKENXX' + const PARTICIPANT_NAME = 'John Doe' + const PEER_ID = 'peer-id' + const USER_ID = 'user-id-1' + let store + let callViewStore + let testStoreConfig + let componentProps + let conversationProps + let actorStore + + const audioIndicatorAriaLabels = [t('spreed', 'Mute'), t('spreed', 'Muted')] + const videoIndicatorAriaLabels = [t('spreed', 'Disable video'), t('spreed', 'Enable video')] + const screenSharingAriaLabel = t('spreed', 'Show screen') + const followingButtonAriaLabel = t('spreed', 'Stop following') + + beforeEach(() => { + setActivePinia(createPinia()) + callViewStore = useCallViewStore() + actorStore = useActorStore() + + conversationProps = { + token: TOKEN, + lastCommonReadMessage: 0, + type: CONVERSATION.TYPE.GROUP, + participantType: PARTICIPANT.TYPE.OWNER, + readOnly: CONVERSATION.STATE.READ_WRITE, + } + + componentProps = { + token: TOKEN, + model: { + attributes: { + connectionState: ConnectionState.CONNECTED, + raisedHand: { + state: false, + }, + audioAvailable: true, + videoAvailable: true, + screen: true, + speaking: false, + peerId: PEER_ID, + }, + forceMute: vi.fn(), + }, + participantName: PARTICIPANT_NAME, + sharedData: { + remoteVideoBlocker: { + isVideoEnabled: vi.fn().mockReturnValue(true), + setVideoEnabled: vi.fn(), + }, + }, + } + + testStoreConfig = cloneDeep(storeConfig) + testStoreConfig.modules.conversationsStore.getters.conversation = vi.fn().mockReturnValue((token) => conversationProps) + actorStore.userId = USER_ID + store = createStore(testStoreConfig) + }) + + afterEach(() => { + vi.clearAllMocks() + }) + + /** + * Shared function to mount component + */ + function mountVideoBottomBar(props) { + return mount(VideoBottomBar, { + global: { + plugins: [store], + }, + props, + }) + } + + describe('unit tests', () => { + describe('render component', () => { + test('component renders properly', async () => { + const wrapper = mountVideoBottomBar(componentProps) + expect(wrapper.exists()).toBeTruthy() + expect(wrapper.classes('wrapper')).toBeDefined() + }) + + test('component has class "wrapper--big" for main view', async () => { + componentProps.isBig = true + const wrapper = mountVideoBottomBar(componentProps) + expect(wrapper.exists()).toBeTruthy() + expect(wrapper.classes('wrapper--big')).toBeDefined() + }) + + test('component renders all indicators by default', async () => { + const wrapper = mountVideoBottomBar(componentProps) + const indicators = wrapper.findAllComponents(NcButton) + expect(indicators).toHaveLength(3) + }) + + test('component does not render indicators for ScreenShare.vue component', async () => { + componentProps.isScreen = true + const wrapper = mountVideoBottomBar(componentProps) + const indicators = wrapper.findAllComponents(NcButton) + expect(indicators).toHaveLength(0) + }) + + test('component does not show indicators after video overlay is off', async () => { + const wrapper = mountVideoBottomBar(componentProps) + componentProps.showVideoOverlay = false + await wrapper.setProps(cloneDeep(componentProps)) + + const indicators = wrapper.findAllComponents(NcButton) + indicators.forEach((indicator) => { + expect(indicator.isVisible()).toBeFalsy() + }) + }) + + test('component does not render anything when used in sidebar', async () => { + componentProps.isSidebar = true + const wrapper = mountVideoBottomBar(componentProps) + const participantName = wrapper.find('.participant-name') + expect(participantName.exists()).toBeFalsy() + + const indicators = wrapper.findAllComponents(NcButton) + expect(indicators).toHaveLength(0) + }) + }) + + describe('render participant name', () => { + test('name is shown by default', () => { + const wrapper = mountVideoBottomBar(componentProps) + const participantName = wrapper.find('.participant-name') + expect(participantName.isVisible()).toBeTruthy() + expect(participantName.text()).toBe(PARTICIPANT_NAME) + }) + + test('name is not shown if all checks are falsy', () => { + componentProps.showVideoOverlay = false + const wrapper = mountVideoBottomBar(componentProps) + const participantName = wrapper.find('.participant-name') + expect(participantName.isVisible()).toBeFalsy() + }) + }) + + describe('render indicators', () => { + describe('connection failed indicator', () => { + test('indicator is not shown by default, other indicators are visible', () => { + componentProps.model.attributes.raisedHand.state = true + const wrapper = mountVideoBottomBar(componentProps) + + const iceFailedIndicator = wrapper.findComponent(IconAlertCircleOutline) + expect(iceFailedIndicator.exists()).toBeFalsy() + + const raiseHandIndicator = wrapper.findComponent(IconHandBackLeft) + expect(raiseHandIndicator.exists()).toBeTruthy() + + const indicators = wrapper.findAllComponents(NcButton) + indicators.forEach((indicator) => { + expect(indicator.isVisible()).toBeTruthy() + }) + }) + + test('indicator is shown when model prop is true, other indicators are hidden', () => { + componentProps.model.attributes.raisedHand.state = true + componentProps.model.attributes.connectionState = ConnectionState.FAILED_NO_RESTART + const wrapper = mountVideoBottomBar(componentProps) + + const iceFailedIndicator = wrapper.findComponent(IconAlertCircleOutline) + expect(iceFailedIndicator.exists()).toBeTruthy() + + const raiseHandIndicator = wrapper.findComponent(IconHandBackLeft) + expect(raiseHandIndicator.exists()).toBeFalsy() + + const indicators = wrapper.findAllComponents(NcButton) + indicators.forEach((indicator) => { + expect(indicator.isVisible()).toBeFalsy() + }) + }) + }) + + describe('raise hand indicator', () => { + test('indicator is not shown by default', () => { + const wrapper = mountVideoBottomBar(componentProps) + + const raiseHandIndicator = wrapper.findComponent(IconHandBackLeft) + expect(raiseHandIndicator.exists()).toBeFalsy() + }) + + test('indicator is shown when model prop is true', () => { + componentProps.model.attributes.raisedHand.state = true + const wrapper = mountVideoBottomBar(componentProps) + + const raiseHandIndicator = wrapper.findComponent(IconHandBackLeft) + expect(raiseHandIndicator.exists()).toBeTruthy() + }) + }) + }) + + describe('render buttons', () => { + describe('audio indicator', () => { + test('button is rendered properly', () => { + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.exists()).toBeTruthy() + }) + + test('button is visible for moderators when audio is available', () => { + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.isVisible()).toBeTruthy() + }) + + test('button is not rendered for non-moderators when audio is available', () => { + conversationProps.participantType = PARTICIPANT.TYPE.USER + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.exists()).toBeFalsy() + }) + + test('button is visible for everyone when audio is unavailable', () => { + conversationProps.participantType = PARTICIPANT.TYPE.USER + componentProps.model.attributes.audioAvailable = false + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.isVisible()).toBeTruthy() + }) + + test('button is enabled for moderators', () => { + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.attributes('disabled')).toBeUndefined() + }) + + test('button is disabled when audio is unavailable', () => { + componentProps.model.attributes.audioAvailable = false + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + expect(audioIndicator.attributes('disabled')).toBeDefined() + }) + + test('method is called after click', async () => { + const wrapper = mountVideoBottomBar(componentProps) + const audioIndicator = findNcButton(wrapper, audioIndicatorAriaLabels) + await audioIndicator.trigger('click') + + expect(wrapper.vm.$props.model.forceMute).toHaveBeenCalled() + }) + }) + + describe('video indicator', () => { + test('button is rendered properly', () => { + const wrapper = mountVideoBottomBar(componentProps) + const videoIndicator = findNcButton(wrapper, videoIndicatorAriaLabels) + expect(videoIndicator.exists()).toBeTruthy() + }) + + test('button is visible when video is available', () => { + const wrapper = mountVideoBottomBar(componentProps) + const videoIndicator = findNcButton(wrapper, videoIndicatorAriaLabels) + expect(videoIndicator.isVisible()).toBeTruthy() + }) + + test('button is not rendered when video is unavailable', () => { + componentProps.model.attributes.videoAvailable = false + const wrapper = mountVideoBottomBar(componentProps) + const videoIndicator = findNcButton(wrapper, videoIndicatorAriaLabels) + expect(videoIndicator.exists()).toBeFalsy() + }) + + test('button shows proper icon if video is enabled', () => { + const wrapper = mountVideoBottomBar(componentProps) + const videoOnIcon = wrapper.findComponent(IconVideo) + expect(videoOnIcon.exists()).toBeTruthy() + }) + + test('button shows proper icon if video is blocked', () => { + componentProps.sharedData.remoteVideoBlocker.isVideoEnabled.mockReturnValue(false) + const wrapper = mountVideoBottomBar(componentProps) + const videoOffIcon = wrapper.findComponent(IconVideoOffOutline) + expect(videoOffIcon.exists()).toBeTruthy() + }) + + test('method is called after click', async () => { + const wrapper = mountVideoBottomBar(componentProps) + const videoIndicator = findNcButton(wrapper, videoIndicatorAriaLabels) + await videoIndicator.trigger('click') + + expect(wrapper.vm.$props.sharedData.remoteVideoBlocker.setVideoEnabled).toHaveBeenCalled() + expect(wrapper.vm.$props.sharedData.remoteVideoBlocker.setVideoEnabled).toHaveBeenCalledWith(false) + }) + }) + + describe('screen sharing indicator', () => { + test('button is rendered properly', () => { + const wrapper = mountVideoBottomBar(componentProps) + const screenSharingIndicator = findNcButton(wrapper, screenSharingAriaLabel) + expect(screenSharingIndicator.exists()).toBeTruthy() + }) + + test('button is visible when screen is available', () => { + const wrapper = mountVideoBottomBar(componentProps) + const screenSharingIndicator = findNcButton(wrapper, screenSharingAriaLabel) + expect(screenSharingIndicator.isVisible()).toBeTruthy() + }) + + test('button is not rendered when screen is unavailable', () => { + componentProps.model.attributes.screen = false + const wrapper = mountVideoBottomBar(componentProps) + const screenSharingIndicator = findNcButton(wrapper, screenSharingAriaLabel) + expect(screenSharingIndicator.exists()).toBeFalsy() + }) + + test('component emits peer id after click', async () => { + const wrapper = mountVideoBottomBar(componentProps) + const screenSharingIndicator = findNcButton(wrapper, screenSharingAriaLabel) + await screenSharingIndicator.trigger('click') + + expect(emit).toHaveBeenCalledWith('switch-screen-to-id', PEER_ID) + }) + }) + + describe('following button', () => { + test('button is not rendered for participants by default', () => { + const wrapper = mountVideoBottomBar(componentProps) + const followingButton = findNcButton(wrapper, followingButtonAriaLabel) + expect(followingButton.exists()).toBeFalsy() + }) + + test('button is not rendered for main speaker by default', () => { + componentProps.isBig = true + const wrapper = mountVideoBottomBar(componentProps) + const followingButton = findNcButton(wrapper, followingButtonAriaLabel) + expect(followingButton.exists()).toBeFalsy() + }) + + test('button is rendered when source is selected', () => { + callViewStore.setSelectedVideoPeerId(PEER_ID) + componentProps.isBig = true + const wrapper = mountVideoBottomBar(componentProps) + const followingButton = findNcButton(wrapper, followingButtonAriaLabel) + expect(followingButton.exists()).toBeTruthy() + }) + + test('method is called after click', async () => { + callViewStore.setSelectedVideoPeerId(PEER_ID) + callViewStore.startPresentation(TOKEN) + expect(callViewStore.selectedVideoPeerId).toBe(PEER_ID) + expect(callViewStore.presentationStarted).toBeTruthy() + + componentProps.isBig = true + const wrapper = mountVideoBottomBar(componentProps) + + const followingButton = findNcButton(wrapper, followingButtonAriaLabel) + await followingButton.trigger('click') + + expect(callViewStore.selectedVideoPeerId).toBe(null) + expect(callViewStore.presentationStarted).toBeFalsy() + }) + }) + }) + }) +}) diff --git a/src/components/CallView/shared/VideoBottomBar.vue b/src/components/CallView/shared/VideoBottomBar.vue new file mode 100644 index 0000000..9fb532a --- /dev/null +++ b/src/components/CallView/shared/VideoBottomBar.vue @@ -0,0 +1,410 @@ + + + + + + + diff --git a/src/components/CallView/shared/VideoVue.spec.js b/src/components/CallView/shared/VideoVue.spec.js new file mode 100644 index 0000000..23858fb --- /dev/null +++ b/src/components/CallView/shared/VideoVue.spec.js @@ -0,0 +1,1142 @@ +/* + * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +import { mount } from '@vue/test-utils' +import { cloneDeep } from 'lodash' +import { createPinia, setActivePinia } from 'pinia' +import { beforeEach, describe, expect, test, vi } from 'vitest' +import { createStore } from 'vuex' +import VideoVue from './VideoVue.vue' +import storeConfig from '../../../store/storeConfig.js' +import EmitterMixin from '../../../utils/EmitterMixin.js' +import { CallParticipantModel } from '../../../utils/webrtc/models/CallParticipantModel.js' + +describe('VideoVue.vue', () => { + let store + let testStoreConfig + + let callParticipantModel + + /** + * Constructor + */ + function PeerMock() { + this._superEmitterMixin() + + this.id = 'theId' + this.nick = 'The nick' + this.pc = { + connectionState: 'new', + iceConnectionState: 'new', + signalingState: 'stable', + } + } + PeerMock.prototype._setIceConnectionState = function(iceConnectionState) { + this.pc.iceConnectionState = iceConnectionState + this._trigger('extendedIceConnectionStateChange', [iceConnectionState]) + } + PeerMock.prototype._setSignalingState = function(signalingState) { + this.pc.signalingState = signalingState + this._trigger('signalingStateChange', [signalingState]) + } + EmitterMixin.apply(PeerMock.prototype) + // Override _trigger from EmitterMixin, as it includes "this" as the first + // argument. + PeerMock.prototype._trigger = function(event, args) { + let handlers = this._handlers[event] + if (!handlers) { + return + } + + if (!args) { + args = [] + } + + handlers = handlers.slice(0) + for (let i = 0; i < handlers.length; i++) { + const handler = handlers[i] + handler.apply(handler, args) + } + } + + beforeEach(() => { + setActivePinia(createPinia()) + + testStoreConfig = cloneDeep(storeConfig) + store = createStore(testStoreConfig) + + const webRtcMock = { + on: vi.fn(), + off: vi.fn(), + } + callParticipantModel = new CallParticipantModel({ + peerId: 'theId', + webRtc: webRtcMock, + }) + }) + + describe('connection state feedback', () => { + const connectionMessage = { + NOT_ESTABLISHED: 'Connection could not be established. Trying again …', + NOT_ESTABLISHED_NOT_RETRYING: 'Connection could not be established …', + LOST: 'Connection lost. Trying to reconnect …', + LOST_NOT_RETRYING: 'Connection was lost and could not be re-established …', + PROBLEMS: 'Connection problems …', + NONE: null, + } + + let wrapper + + /** + * "setupWrapper()" needs to be called right before checking the wrapper + * to ensure that the component state is updated. If the wrapper is + * created at the beginning of each test "await Vue.nextTick()" would + * need to be called instead (and for that the tests would need to be + * async). + */ + function setupWrapper() { + wrapper = mount(VideoVue, { + global: { plugins: [store] }, + props: { + model: callParticipantModel, + token: 'theToken', + sharedData: { + remoteVideoBlocker: { + increaseVisibleCounter: vi.fn(), + }, + promoted: false, + }, + }, + }) + } + + /** + * @param {string} expectedText Expected connection label + */ + function assertConnectionMessageLabel(expectedText) { + const connectionMessageLabel = wrapper.find('.connection-message') + if (expectedText) { + expect(connectionMessageLabel.exists()).toBe(true) + expect(connectionMessageLabel.text()).toBe(expectedText) + } else { + expect(connectionMessageLabel.exists()).toBe(false) + } + } + + /** + * @param {boolean} expected Whether the loading icon is shown + */ + function assertLoadingIconIsShown(expected) { + const loadingIcon = wrapper.findComponent({ name: 'NcLoadingIcon' }) + expect(loadingIcon.exists()).toBe(expected) + } + + /** + * @param {boolean} expected Whether the connection is not connected + */ + function assertNotConnected(expected) { + const notConnected = wrapper.find('.not-connected') + expect(notConnected.exists()).toBe(expected) + } + + test('participant just created', () => { + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('no peer', () => { + callParticipantModel.setPeer(null) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + describe('original connection', () => { + let peerMock + + beforeEach(() => { + peerMock = new PeerMock() + callParticipantModel.setPeer(peerMock) + }) + + test('peer just set', () => { + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('sending offer', () => { + peerMock._setSignalingState('have-local-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('receiving offer', () => { + peerMock._setSignalingState('have-remote-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('negotiation finished', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('establishing connection', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('connection established', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('connection established (completed)', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('completed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('disconnected', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected without ever connecting', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + peerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long without ever connecting', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + peerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without ever connecting', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + }) + + describe('renegotiation', () => { + let peerMock + + beforeEach(() => { + peerMock = new PeerMock() + callParticipantModel.setPeer(peerMock) + }) + + test('started after connection established', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setSignalingState('have-remote-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('started after connection established and then finished', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('started before disconnected', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setSignalingState('have-remote-offer') + peerMock._setIceConnectionState('disconnected') + + setupWrapper() + + // FIXME The message should be "PROBLEMS" rather than "LOST", as + // the negotiation is not caused by the disconnection itself. + // However it does not seem to be an easy way to do it right + // now. + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('started before disconnected and then finished', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setSignalingState('have-remote-offer') + peerMock._setIceConnectionState('disconnected') + peerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('started after disconnected', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + peerMock._setSignalingState('have-remote-offer') + + setupWrapper() + + // FIXME The message should be "PROBLEMS" rather than "LOST", as + // the negotiation is not caused by the disconnection itself. + // However it does not seem to be an easy way to do it right + // now. + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('started after disconnected and then finished', () => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + }) + + describe('reconnection after no original connection', () => { + let newPeerMock + + beforeEach(() => { + callParticipantModel.setPeer(null) + + newPeerMock = new PeerMock() + callParticipantModel.setPeer(newPeerMock) + }) + + test('peer just set', () => { + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('sending offer', () => { + newPeerMock._setSignalingState('have-local-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('receiving offer', () => { + newPeerMock._setSignalingState('have-remote-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('negotiation finished', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('establishing connection', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('connection established', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('connection established (completed)', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('completed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('disconnected', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + newPeerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + newPeerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + }) + + describe('reconnection', () => { + let peerMock + let newPeerMock + + beforeEach(() => { + peerMock = new PeerMock() + callParticipantModel.setPeer(peerMock) + + newPeerMock = new PeerMock() + }) + + describe('without having been connected', () => { + beforeEach(() => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('failed') + + callParticipantModel.setPeer(newPeerMock) + }) + + test('peer just set', () => { + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('sending offer', () => { + newPeerMock._setSignalingState('have-local-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('receiving offer', () => { + newPeerMock._setSignalingState('have-remote-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('negotiation finished', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('establishing connection', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('connection established', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('disconnected', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the + // connection has been disconnected for a few seconds + newPeerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the + // connection has been disconnected for a few seconds + newPeerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without ever connecting', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without ever connecting and not retrying', () => { + newPeerMock._setSignalingState('have-remote-offer') + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('failed') + // Custom event emitted when there is no HPB and the + // connection has failed several times in a row + newPeerMock._trigger('extendedIceConnectionStateChange', ['failed-no-restart']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NOT_ESTABLISHED_NOT_RETRYING) + assertLoadingIconIsShown(false) + assertNotConnected(true) + }) + }) + + describe('after having been connected', () => { + beforeEach(() => { + peerMock._setSignalingState('have-remote-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + }) + + describe('without HPB', () => { + test('ICE restarted after disconnected long (no HPB)', () => { + peerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + peerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + peerMock._setSignalingState('have-local-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('ICE restarted after failed (no HPB)', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('negotiation finished', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('establishing connection', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('connection established', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('connection established (completed)', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('completed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('disconnected', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected without connecting the second time', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + peerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected long without connecting the second time', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('disconnected') + // Custom event emitted when there is no HPB and the connection + // has been disconnected for a few seconds + peerMock._trigger('extendedIceConnectionStateChange', ['disconnected-long']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('connected') + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without connecting the second time', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without connecting the second time and not retrying', () => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + peerMock._setSignalingState('have-local-offer') + peerMock._setSignalingState('stable') + peerMock._setIceConnectionState('checking') + peerMock._setIceConnectionState('failed') + // Custom event emitted when there is no HPB and the + // connection has failed several times in a row + peerMock._trigger('extendedIceConnectionStateChange', ['failed-no-restart']) + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST_NOT_RETRYING) + assertLoadingIconIsShown(false) + assertNotConnected(true) + }) + }) + + describe('with HPB', () => { + beforeEach(() => { + peerMock._setIceConnectionState('disconnected') + peerMock._setIceConnectionState('failed') + + callParticipantModel.setPeer(newPeerMock) + + newPeerMock._setSignalingState('have-remote-offer') + }) + + test('requested renegotiation after connection failed', () => { + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('negotiation finished', () => { + newPeerMock._setSignalingState('stable') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('establishing connection', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('connection established', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('connection established (completed)', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('completed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.NONE) + assertLoadingIconIsShown(false) + assertNotConnected(false) + }) + + test('disconnected', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.PROBLEMS) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('disconnected without connecting the second time', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('disconnected') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('connected') + newPeerMock._setIceConnectionState('disconnected') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + + test('failed without connecting the second time', () => { + newPeerMock._setSignalingState('stable') + newPeerMock._setIceConnectionState('checking') + newPeerMock._setIceConnectionState('failed') + + setupWrapper() + + assertConnectionMessageLabel(connectionMessage.LOST) + assertLoadingIconIsShown(true) + assertNotConnected(true) + }) + }) + }) + }) + }) +}) diff --git a/src/components/CallView/shared/VideoVue.vue b/src/components/CallView/shared/VideoVue.vue new file mode 100644 index 0000000..ccf06cb --- /dev/null +++ b/src/components/CallView/shared/VideoVue.vue @@ -0,0 +1,789 @@ + + + + + + + diff --git a/src/components/CallView/shared/ViewerOverlayCallView.vue b/src/components/CallView/shared/ViewerOverlayCallView.vue new file mode 100644 index 0000000..27631aa --- /dev/null +++ b/src/components/CallView/shared/ViewerOverlayCallView.vue @@ -0,0 +1,343 @@ + + +